Submitted By: William Harrington (kb0iic at cross-lfs dot org)
Date: 2013-08-04
Initial Package Version: 7.3
Origin: Upstream
Upstream Status: Applied
Description: Contains all upstream patches up to 7.3.1314.

diff -Naur vim73.orig/.hg_archival.txt vim73/.hg_archival.txt
--- vim73.orig/.hg_archival.txt	1970-01-01 00:00:00.000000000 +0000
+++ vim73/.hg_archival.txt	2013-08-04 19:09:07.480619939 +0000
@@ -0,0 +1,5 @@
+repo: 770908d1cb47c04be0aef5c173b17ab8be6b6476
+node: 29e57603bf6f3a2e3c178a63d332ed4d2eccfa82
+branch: default
+latesttag: v7-3-1313
+latesttagdistance: 2
diff -Naur vim73.orig/.hgignore vim73/.hgignore
--- vim73.orig/.hgignore	1970-01-01 00:00:00.000000000 +0000
+++ vim73/.hgignore	2013-08-04 19:09:07.490619909 +0000
@@ -0,0 +1,61 @@
+syntax: glob
+
+# Unixen: object and executable files.
+*.o
+src/vim
+src/xxd/xxd
+src/auto/if_perl.c
+src/tags
+
+# We do need src/auto/configure.
+src/auto/config.aap
+src/auto/config.cache
+src/auto/config.h
+src/auto/config.log
+src/auto/config.mk
+src/auto/config.status
+src/auto/configure.aap
+src/auto/osdef.h
+src/auto/link.log
+src/auto/link.sed
+src/auto/pathdef.c
+
+# Windows
+*.exe
+*.idb
+*.manifest
+*.exp
+*.obj
+*.pdb
+*.ilk
+*.sln
+*.suo
+*.res
+*.RES
+src/if_perl.c
+src/pathdef.c
+src/Obj*/pathdef.c
+gvimext.dll
+gvimext.lib
+
+# Mac OSX
+src/xxd/xxd.dSYM
+
+# All platforms
+*.rej
+*.orig
+*.mo
+*.swp
+*~
+*.pyc
+src/po/vim.pot
+
+# Generated by "make test"
+src/po/*.ck 
+src/testdir/mbyte.vim 
+src/testdir/mzscheme.vim 
+src/testdir/lua.vim 
+src/testdir/small.vim 
+src/testdir/tiny.vim 
+src/testdir/test*.out
+src/testdir/test.log
diff -Naur vim73.orig/.hgtags vim73/.hgtags
--- vim73.orig/.hgtags	1970-01-01 00:00:00.000000000 +0000
+++ vim73/.hgtags	2013-08-04 19:09:07.507286525 +0000
@@ -0,0 +1,2652 @@
+004eb98eb3c30714cb6a24ec3e810275080a8413 v7-1-117
+006e9c8a6a8ad354a5cb6adcce6ebfceddeb20ee v7-0079
+010397e1770eec8ff399cfc3bbd79f853849ffc1 v7-0160
+0137e7c3d31b09f1c1e494405f3f99f6423b74cd v7-0196
+0139403c8eb088d58773f7e76dc2a025719a8e8c v7-3-135
+01583c79d5f4d3f29d4c33dd10dd29efd349cad0 v7-0d03
+01762f635babb0fecb3a9f04549a54e86f67cf8b v7-1-047
+01a0da54773eb2af0215762629db5c6eed01ba06 v7-1-138
+021f9d0f60a1700989e2deeab78da32837c1041b v7-2-079
+028158b1362b55a23cc6d8d086976c4dfd6e094a v7-0090
+033e7b49356c11b2d9cc45dec6dc3d695d7ef95a v7-3-083
+0358abf2b5d4ab5981a5a1dd651ecf63d40ffbfb v7-1-315
+03714c67a82b8557cb8ee0789cbced75d804d949 v7-2-134
+039ce9407934bd97142aab06c5d1869d8e2ba3c7 v7-0-032
+03b3684919e3299ff560609c0c5f577822f64614 v7-0084
+03c191181749e422b375fbb8cd0763dede7d9beb v7-2-313
+03c4ceec6bec956646c07390aa09052cf5f0468f v7-0-054
+03d49a7c83196a406cbd12f4898fc988731af927 v7-3-010
+03ec0f2b9a403b1cbc494eac6c038076ece0b37c v7-1-242
+04265ffbda1f9b14729bc5d85069ff0711ce3744 v7-1-210
+044d5e9b1292f694e73ae929eeceaa9685fa0580 v7-2-194
+04613e770ec0bd536f04c0fb6d80b76e1af1d6e4 v7-2-189
+048f26eb43a348e49fc4f9deaca03779c2de595e v7-1-082
+04943f31135747da59cbed2b39fb109dd2796426 v7-0-165
+04fc2a0e98ed7af6ee11a2025d6a0c877114c039 v7-2-057
+057029bf347002408541ec73da1373ae64002a3f v7-2-338
+05952d133506353938f50f0b22b0097b6cdf0afd v7-2-095
+05b48b16b627b63ee0f6dda7d7f07704c3d2fe64 v7-1-198
+05c8ff7f128406d2d6052abbf5b92635d3cb0284 v7-2-162
+05dc93b9c61f63c1691849fe7407c9472a7f6288 v7-0208
+0606065af0a02f79b43b4a89383b04c21e2f0be3 v7-3-111
+062104a823df0f5a225b327b00a3766e41e4610f v7-2-201
+06234af3a8b7df68bfaf0efa87edfed2d743f6c7 v7-0106
+06317850ad3acd03765fc0f8002f17417773d906 v7-2-045
+066778e39c2ae6bbf23708d98e1a7a7e53a9a6d0 v7-1-232
+0670d0df210a891f82d38c38f1b3b256dd1a5f8d v7-2-017
+0691866e6cc92996f4fbc881e134248571ae7c82 v7-1-180
+06959e7212e521904f3b7d75bac5005b9f44bde3 v7-0-077
+06aa43dde5610dff598940ccde1dd25a617a1a52 v7-3-006
+06bc859d1a32de8763e310669d0c008b3945af1c v7-0049
+06e0f7482cef3412ecb4b0b62b65b1e7c4ed92b2 v7-1-052
+071166147fc55311bb86bc9367aca005c4a1447c v7-2-299
+0713c530729ba6d2bdc9fdb4fd400f46b16c37be v7-1-169
+073f98f45a447a137c2e2d74f936a9e26179ce1b v7-0-035
+077c15286de8e37250ed1337a448c740c86ee740 v7-2-293
+07d199fe02ed46fff935b2daa4efc979eacaab4c v7-0209
+07de57cbcb25d63bf515b67de654dd89004888fa v7-2-327
+08012a1ff8d4b4f5736a47440a907ec6e5e1610d v7-0137
+0836531167ab2f1cd48382b093c3080c3bc47786 v7-2-059
+0868e4e53fb2e9f9bd469fae0323a1df43be476b v7-1-029
+0887e8a13e5f33db2f832a52654a0d1fa82f322f v7-3-109
+09cc86b6665358a20d9faf54ce8eec45ca4fc5de v7-2-387
+09d0e83c29b805f127c6756231bb4adfb1b2974c v7-0-130
+09f00d57222b6d8de104660ea3f9c6bb42b9d31a v7-2-172
+09fcdfde9afca8990c086e60fe5e122cb258cadc v7-0-046
+0a1d45e2d8e30fc0aef25d5fd7505840d1e0e836 v7-2-258
+0a60be12e47e322c4dbae7b083321c60f599c0b8 v7-0125
+0a80dc6d78048478d4e7f0f99f573c947d5d95c0 v7-1-131
+0a908b65de1dbebbde1aacfd50aa41ef09e6865e v7-2b-012
+0a9371c70540d0d42c79a1d76e590fa2ccb978b3 v7-0220
+0b056c1350dd2ff28249130194d9a2be7b606a86 v7-0-193
+0b1b7560c456a32ad921e3985b90008ef1f82a91 v7-0174
+0b211ebefd4e6ee52ae81a75938b4ee61ca15770 v7-0-071
+0b42546f036bb3ff8023b6015a5acf032a2ae1f1 v7-2-076
+0b4a515b125474db496caa0be22a28e8bd99c88e v7-3-132
+0b796e045c429253e9ce8825ad05aad2474553bd v7-2b-000
+0c0a2b25d10aaaf556344d7404d12aba81632cf4 v7-0-015
+0c381fb7846cda92fbdb327bbfe4ab1f73a86d8d v7-0214
+0c39ff7a90a81c62f2718f71bf0a4d636a8ac69c v7-3-127
+0c4a465bd7419d51017354b70ead01c18b589e9d v7-2b-029
+0c61c201ba76d7235913010395e065991ac059b9 v7-1-196
+0c6c64edcbe0481659fdd91f6312296e7c1bb303 v7-2-052
+0c7d6d01e0582b54f34ab66852116d559c39550c v7-3-101
+0d0bf7598dcb63fdb5be9300f407e043102ab895 v7-1-256
+0d31f8a78ab35b256359b6ae53c80cecce59d44c v7-0-143
+0d6554dfc71e5e58866ef0118ed05007a4c59672 v7-0061
+0dbc46d14443418020e3868a08877a365ced11e1 v7-2b-028
+0de47f0d731e32af52784171986734b735ac626f v7-3-051
+0e3bd80a3f74a99241a4857685912dc8efeb9bdf v7-1-286
+0e3e208b4b901f22beecc85c5781170f3c4e5351 v7-0-104
+0e3e601e66cf233986924652f7801dc8d2568a84 v7-1-288
+0e45a0c50acaa31dd4052c57053bb86afd4e711e v7-2-154
+0e4631bf94411717193870a5ad7d62945d06cadc v7-2-377
+0e4c64dfc61141a68b83b5204a160b5c01986279 v7-2-125
+0e4fa55d20e025a70e3e6b82abc58333902c45db v7-2-040
+0e57be57fa49a0d2c0b7f17b7cb137b4260b79d6 v7-0-207
+0e5eb96dc18ce7986eadf32bb700e503da52ae47 v7-1-142
+0e6b369b9760459289b84a9c2e07478c063cd386 v7-1-126
+0e902b8f511f0442ee2b28314d6e085e3e00798e v7-0051
+0eef0f62181190700a01129a88f693503ae94947 v7-2a-006
+0ef5b70c3eaf694c9e9b85aed3f80af53e6fd9cf v7-0045
+0ef9cebc4f5d1c00554543918fea2a0b7539b922 v7-0031
+0f109c56b521834af0d9492b21d0ef1ead5b01ef v7-2-014
+0f3f3090491faea043fa144780d1287e011390ac v7-1-205
+0f552ca271c27681ed126261ce49e52ef144175e v7-2-393
+0f9f4761ad9cafbf1e72de338aa3fc59f1dd693d v7-0216
+1002128c68dbe2f69466b1b2cb354b00eec2980b v7-1-109
+103dea6545430092db1851d1b712a742af1a74f2 v7-3-017
+10a1b67c0885aabdac7c76a96169cd9e36414428 v7-1-068
+10ce04af8c5b26e55cd2157408883d9ed79b9a3d v7-3-021
+10d7ebdbe8a3a9787360b21a9836c6bae6a6a7a2 v7-0-169
+11155435487064d64efb296f7c2966baae8d27e3 v7-2-402
+111e109dad1301c7699d18e5689f1842f4b67e6c v7-0b01
+11472bbcdb6e2effe1c248d09b4d7089fa7a26d2 v7-2-183
+11a74d2cab9dbe41af2ed5d08b18fbdac14f6e43 v7-2-147
+11c004cc1a4df89b9246a96106db6c6f0260b7d8 v7-0-241
+11c6bda3b53abb2c98ed9221ba89880eeef7514f v7-2-268
+125e80798a85dbead9a91815cabd1d0aed63f455 v7-0021
+1287e2bbeb405c10201d4caa6b2dab284f84efbf v7-2-207
+12aba62fa7c6812ec46eb3be6759d82a4a651a93 v7-2-422
+12f9cd68b9c3aaf3659d9219551a5822cf798857 v7-1-257
+131dbd3d2a4bba5d1514c2842952ca7b77b6902e v7-2a-019
+1324b7b755f3b5570ce9aa7fb27c075c89a1d2df v7-1-322
+134c7695af324bd4118f52b9235aeff7e374a425 v7-2-121
+1378bc45ebe5754c0d3ec64d37810eaad3a544f3 v7-2-348
+144ad7f25f6741815c8297fe77965f93ee359c2a v7-0-118
+15130d4dfea14898029686b72536f54197a73062 v7-2-117
+15146eaa0e9c6dd6802cf70a2da3b220992eda1e v7-0-001
+15154710ed57eab29f7e4b848eafe63ea2dfdf85 v7-1-140
+151a805b2ddc219d4a968154a43daefbb2e41fe1 v7-1-081
+152883db0edf63f35e8459dcc5862ef3f4b48c9e v7-1-321
+152e526245217fedd07f0480e08ea59b0075a8b0 v7-1-001
+15674e198164c10b08e138f4c18b58e76306d9be v7-2-389
+158a68529622f90d0b0f1f5596f55cc5ce06c9ee v7-2-060
+159d87361e4b0d99c3863b3c82b7121a474cdf1f v7-1-168
+15e847397be75c6b0590505a9e201c793d070eee v7-2-205
+165c628aa9fc3cca34ccf63dc8ab953745d4e228 v7-0108
+169533a9699fa7d3fd67b57ad99d04076d060831 v7-0g02
+17526daaf79dbf2004c78311abdad05e6e3070dc v7-2b-021
+1780e6046802498a3c4d0ddc7b99f1bd9ac75f31 v7-0-157
+17a83c0532e83e9f4cd89f03dcbf206662d25b1f v7-1-062
+17b9587ff6d5beef34d98043ca5f3111e5d29e4d v7-0-202
+17b96d8dcc5c8356e10135f5735d6de2fa5da3e8 v7-2-038
+17c88d44ace9bc9e76485811ffa459b5c15a6bb7 v7-1-234
+18061514324fefb37ea7a7e7783985004ea0874d v7-3-084
+183c3187b20dbc6ecc74958e9ba141f0d4f72d23 v7-0-205
+184a6091124e80e1c9f66ed0908deab552ca369c v7-1-220
+184d2020d8f12823a2f2cb96335a68ac1bda3270 v7-1a-001
+18ee39301b822de39caf5fa023107ddf508b42e0 v7-2a
+18f024844150562a9e56522edcad3fc1d5c257e4 v7-0086
+19106f131c872dc79bb409ffe8b5e35ebe885c1b v7-0188
+196d564759eb256f62e7fb7ec4561c1e2d533726 v7-2-072
+198a695ca8e7273641991bcf346085bbce70d740 v7-1b-001
+198ea7a9c633089ef2638513d05611a9d1b6e39c v7-1-182
+19ed3bfbe488a730858d0d26b433029b85e231cd v7-0-159
+19ef2bbf569cba64ae5125d5b1f3f205efc25e89 v7-1-263
+1a00e831244b1e509286ea35a586c6c43dcdaaaa v7-2-202
+1a040c25c44485c85e838a7530051f6d4f9793a2 v7-2-123
+1a0d346695fa3525a08a27174fbdf016afdbb9a9 v7-3-085
+1a44839049aefb0722d43a87d7ed1708c9c94b18 v7-0229
+1a511b7b69ebdf866088b9e765dc42543cd76d0a v7-0-212
+1a85f952cdfe4716be162e308fbccb0117489915 v7-0195
+1a8b518bb993e00f546c4cef8bae9b51f91fe0d7 v7-2-198
+1aba098d6abc680214b3b31c954abd53ddc772ef v7-0-039
+1b55bbf5c58077e54b83307bbe715e131c57b750 v7-1-219
+1b7cac059babfb3365c0a44c0537c7aa9b286a71 v7-0172
+1baac9d06c83400c474e6484dc20229187d27a64 v7-3-024
+1bb06e6512a2fc961eaf9a8e7a749247c408e7f6 v7-2-358
+1bc46149d9195d9134d526ef524242ede65c2457 v7-1-167
+1bdb13b8e947b85e612afec3a1b5e09c29c30551 v7-2-039
+1c00ea3641a8a1e58e70cd51ab831003bdb41d50 v7-3-005
+1c1cbdc42f75d8fa0ca5a799b5e843e9aa2c098c v7-0077
+1c4ec9ed71caf24dbec13f6d3d4adbb48bce9436 v7-3-056
+1c586ee8dd452d305bebf633d5b8c78ba1ab170d v7-0183
+1c597397f0061fd2c750c65c961a31f70dd6747f v7-1-269
+1c64bf25bbcd49a83cc08dd60a6c3e5785266790 v7-2-247
+1c7a66d820e4dc9b0a9f696ed6e7a59cd9a20e19 v7-2-360
+1c85355293f92cd8bb41eaf6ce8a8be1d77302f1 v7-2-062
+1ccc1ace9e5b6c1223ba191ce20729a49f13970e v7-3-050
+1cdd2661f34c2aa93ae2f0317194d29d3a43f5be v7-0d01
+1d0ef79659afec337c26655216a1debbd1c74497 v7-0-002
+1d12208efb3732d6f520b05a47283208f12e3856 v7-0-209
+1d4c67f8470981d280aaf1d2a25877a00ec5d240 v7-1-084
+1d6d99daf4dcba733e5517045f70e53c185aa895 v7-1-165
+1d7f46148bf4ec36a42e959cece1f9f6199a87a7 v7-2b-006
+1da25369227bead09cf603ebfa93ebe1d206c871 v7-2-345
+1dd4e0ccd822156b87516f9cd5a6a004d0d85a11 v7-1-278
+1ddec6983d9ebdb4f7a748cc171199cc8ad3d1e0 v7-2-036
+1de53700b1d9f26a420a319d9c44ba0c43950035 v7-0-127
+1df41c98fc2e9a230ab9d05be84f4c91e4078619 v7-0-239
+1dfe9032bd92ef7ab7bf0baf0f0c1f61da68bce6 v7-0-131
+1e25b58fbf7babbbe054e118617a49790f532fd4 v7-2-024
+1e52efdc900cab1dd64f6a987bbe5117fa1f9748 v7-2-270
+1ee00a062acbd04360de8b754e834f7ef6025328 v7-2-246
+1f099ff4f6fb2b0731bb38e279d0c692ee05df8d v7-1-129
+1f3902f3eb5c20e7872c42cdee9c91e2b25d3f47 v7-0038
+1f3b1021f002ac9703c1de0e80703b8067546a41 v7-0e05
+1f53050b38688e127c4ea67251ab2730002541bd v7-2-294
+1f90fab89ce32126849aa28d2918bae96603f3bd v7-2-069
+1f929f3ca8066b3170c7a58c414837d47bef707e v7-0c03
+1f93fbcb4e0cf1dcd8682242f40aa5f2906c42ac v7-1-201
+1f9e2c8e642a29d93b9c32062c785f4c38883e0c v7-1-034
+1fbbe04a950f9ed82b53ddf67d8e034224fc98ad v7-2-286
+1fc8d918d9fc076304ef0dbaad897e8e5b6ba4ab v7-2-093
+200b706675a56daad05f8b0d60991825c45b6e2d v7-1-183
+20308f30826db09e99d531214eaaf03ea8b13d15 v7-0-162
+205a26fab11655d086ce185525193d16f37d60b5 v7-1-203
+20b2e52ca96255a8d99ed9504e90a960266c4d21 v7-2-009
+20b4b6a2a212584f182a2d69a37512bf9094d85e v7-1-279
+20b52d44daafbd65b01db735c4d5597ccb9e386d v7-1-130
+20c18291deb21dcc69b6ceb3c11c309a92396fb4 v7-2-302
+20d9fc2f13a4132d6344fb6457040b02720774cf v7-2-403
+215d6b2a1816a5eaf5f5d2cb7cb1b22d24adbdab v7-1-159
+217c9aa4c3ba6ea559ec5675871d6d89313363e8 v7-2-114
+21b11491a33fee3cd77dcfcc2448382f060543f2 v7-1-156
+21c3634c211345ea79e90c4927513e7dc1381617 v7-0134
+21ce954cbdcac9dea2aa826ff40adc2fb2184600 v7-0-201
+220a9309067dfc6e7e8301b392c3499054666396 v7-1-266
+2244be18d9e9ce602a12e7529614c25ca8cef1ee v7-0162
+22886f3d882d231a528dcc012c23e54180c8248c v7-1-040
+232a4740aa0ed615c52b289a111b51171e74a78f v7-0-005
+2392a6da4aa430f896451d97da8c49ed3fcdb9cb v7-0186
+23aeaff961412f06544babde36a80a6c22be0fd9 v7-1-307
+23d23246742e7d301d09f0cb03533226b64043b4 v7-0-219
+23d366df193868572eacd04e1a32bc2283a30e56 v7-2-335
+23f82b5d2814be7ca4dee000226bd67dc6cd02cf v7-0c10
+24100651daa9d7140d33f298c987c9d42bd919bf v7-2-411
+2430fc9a18d1270a5ad7b5f7acac3e19aa8908fb v7-1-306
+2448f4c8afc65a91130fa0237c253e6698481c64 v7-0-055
+24b7b3cc4eec4387713a615519489fa5a34b253d v7-1-251
+24eb7921b8f004c8c462297cf53afad8f5578243 v7-2-367
+251307ebe1dbacd972e35e923f7360d12733f2b7 v7-1-049
+25154b22dc967b158645be9cb87017f548ee5446 v7-0-198
+2548cf0a5f625110a5cd42ee5566c2709c2c34f0 v7-0-011
+25bc02d83cf438d5794ce106edad2959e2f89454 v7-1-292
+25dd5036f2b0b5e68492c49f15eaa228aa957f69 v7-0092
+2651e7d07cd631af64818f5d3cf5dbb199fa6f64 v7-0-140
+266f9d9f5109421afcbc8169896b484ff7a19a8d v7-3-061
+26876d0f15e9294aa4fcbfc43260a5f2a703e313 v7-2-256
+26b0b2f606d2953068951dca673d963b7c5cccb7 v7-1-122
+26cbd39f22513d82cc43d2b1badefcea8db1c546 v7-1-103
+26d879bcab3aa016ccaf77cfd3a9aa5085d4776e v7-1-284
+26fb122355d4d6b04850f7608f1d82da8dbc51c7 v7-3-107
+26ff011aec2dbc96736396430403d572d4f111d5 v7-0-172
+27060fe297d0ce872dfa3bc20416f7189b9fbc59 v7-2-273
+2750661e93d556868d97f49fae32a1f470bca107 v7-1-253
+27621abffed24f1e2849ea616f91f0a99747608f v7-3-099
+276244befa5b2a34893ba581818df14cd7e4504e v7-1-189
+2775dcd056031e0a7314da9a9e0b2cebbb089525 v7-2-426
+27782797c331b8800c12ad17c5d05adab5e92edb v7-1-107
+2787b8483e6498f536e66ac134a073246ab6f5e4 v7-0-125
+279380a812add1307a2a20c444f2334b7a45106d v7-2-412
+27d8fe1c096407ddca428c52f62d002dfed7879f v7-2-090
+2832243e801ec537589809059f65efb3b8a57f93 v7-2-399
+28398206597f975583c9f8f212d336fc9f67953f v7-3-089
+28558ab31051fc1870ac690c0b576ca9365021f5 v7-1-202
+28641f0ed9deb579934416e6161260d4d218f394 v7-2-211
+288fb648badba86a0bdce6dbcecb55eb386263ab v7-2-128
+289b19a6f2edb5b46df57195d5fae41dfe963290 v7-0103
+28d0c20ad8a09dd63fa34768eac4be3cf96ed239 v7-2-051
+28e9eb0f2d849e7e32d70b4e1f06dad812288578 v7-2-077
+2928a6b338c3f434723520a12fa378895d4b24cf v7-2-187
+2930fd8e7d9f1514448261365b787501dbd9a0b7 v7-0171
+293621502c4daa122ae601398d854857bb732a83 v7-0010
+2951f28a9bd3b08c5be9bc9b3745f062b95635b8 v7-1-192
+2981ad79c362bff0c21d3ff0d68be57213bca837 v7-0-025
+29bf49bad20d3b1ad35af5cf21d91c4aa486d4a5 v7-0-068
+29c09fa57168acd665a85ed5a210b48b60d0b5e2 v7-1-211
+2a11407a5a8f4efccc04dfde8a61e40ec5eb9fc5 v7-2-066
+2a256978a64649b75d424eec6e703f99f7f28636 v7-1-003
+2a8bf2ba504f422d53dac30da8b58d76e54b4428 v7-3-003
+2a9d26c95a2a9b2f1a279e04de22ee4c7298552c v7-3-077
+2ab007070fc86d20596dfbded70d0f986c084304 v7-1-113
+2ae2dd2591fae798e4212e9b2c47281eca0c8483 v7-1-055
+2b273c71a14b7d0e64b6ae9bdcf60ef7e4d45aa8 v7-2-415
+2b475ed86e6491b20046d5c34fec8ea86988dade v7-3-074
+2b4debdc8d2c73d1fc37b750010e3a4098b035af v7-0035
+2b913f7eb9d2b411f9ef2c0fa44f313b7382bd89 v7-0039
+2bd29808d1f640f027ab7a4a4f2b5b6a0e6c8e38 v7-2-429
+2bd96108392ec08b6c384893939968d94bab4dbb v7-2-351
+2bebfa810a66caed9562541776d92f73a71de7f1 v7-0-091
+2bfc2b7033147de9689cf2d651bd8ef36fdac68b v7-0078
+2c1ffe8953ee85cf04d4db5c03ab711c1c6c015a v7-0080
+2c4ca49319a689ad9caa4429cd90bceda4e210a3 v7-1-271
+2c5e70e2858fa46c7b80b022f217103b8c90e9e9 v7-3-016
+2c885fab04e31a34d91e4375d2d0397cadb818ce v7-0e06
+2cdbc91795ca0d15343fe954ae2af71f830f9656 v7-3-007
+2cdccc96d730501ce4e509e7efe4f8fd3f2b2e29 v7-1-150
+2ced59eaf1e5c67060fe124902407a8bf77a1a78 v7-0-233
+2d0f22897a4d1f71600540e64a5cbf80a178e46a v7-0-173
+2d9eebf2c48f0bd3b51e8ba085b97da871cd4184 v7-3-126
+2df7e2d753061b54b9120ae4b34d4bf050cf17f5 v7-1-246
+2e1e9b708941e1cfc2c0540196719f78e1ab18f5 v7-0-023
+2e42153b37f171ed28293fa12e4f538070bf8619 v7-2-021
+2e915ea7110f0dc0507a733e4330ec6cc91e53ff v7-2-266
+2f016b638c0ca912d89f352f6b9b83231cf9e83b v7-1-312
+2f57d93bdbf64461c4eaeaacdba26548a2abb9cf v7-3-030
+2f6e519726f19c2f6cb58e9cd75e827eaafa0ab3 v7-2-346
+2f70b8f1f1e32dca34db07fedf9cbb56ff97007f v7-1-076
+2f9308b31181f36bf605ee060fa763a28deacb03 v7-2b-030
+2fa8cb05b861d49dec0501a2531eec39e1d0a688 v7-0218
+2fb204616c9b4e4df95f1560899d02e5bb739678 v7-0-079
+2fcd444c4bd37f916da718bf5bbe9535d2667331 v7-0057
+300fac7c5a2bafb002ee97d52da19bae8a344d51 v7-0059
+302a6aa7aca2ee9cf24958c2277a90fcfc01c939 v7-1-061
+30534c76776ab088a4142f9e15faa23d86efe020 v7-2-078
+306fc545fe2cd5d77953811fccec0d5c4bf7744e v7-0-066
+3112fcc8923830fd9060c76d1ec9c75c59487d59 v7-2-371
+31208ed42de95ba5738675cb78bd0f66c34ed785 v7-0-065
+313ec58cdc49a69c4386a4aa18fb9bcd01155feb v7-0-206
+316dad0565b8943c978c8c58b212f3c4469b1cf7 v7-0-103
+31757405c0c5408f9c83dba9d83ea74b2bd680d5 v7-3-134
+31bff9be0a7730f36e7de4792fec0688f2fc7076 v7-0g04
+31df87b80e562b6a83b97e2610f539afc94bc440 v7-2-278
+32c1b275ba6419fc014ffba3d2e55eca1ef06d4c v7-0-196
+32e19278c1ad1be6f92fc6cbcefb7e23ddf928cb v7-0-105
+32f48534fa0fa9b8e6833850fcbd77cd002ce8e0 v7-1-187
+3328b87305efcc6a8db6923c31cbf78a05983eff v7-1-077
+3372616fe1f1def653875bedaa8c059c399197ac v7-1-144
+3376d79d40f2d2c8e09cf8a3c07e15fc2424ecb3 v7-0-148
+33792c36e3aadc7f313785705f39d7ea6e214319 v7-1-018
+339999b511a0d529f09219a5d61b810fc75261ef v7-0148
+33a2652c13268ca53bb9ce0cfb7232655864c373 v7-0-231
+33d28f1c4d1dad3d4ce7f768c57820a8203c3e51 v7-2-006
+342cf2a9f5cce4f70e6a974253b20c8e309de7ef v7-1-145
+342d2b3a072a6cbc3cff898a663c4889317b32a9 v7-0-208
+3479f9aacaf57d583abb468cfe393eead386f15a v7-2b-008
+34f62bcce014d9c0b275002a1001cd1582ffa121 v7-3-123
+351bf13db8071317d7add1e55a50ae284ff53a4f v7-2-334
+354ea37841d13e0d9bb5ae995a09fb28beaa0d13 v7-0-022
+35abb70264158760c724bd0290c6c441afec4fa0 v7-2-033
+35cef95a6b7646d045b97bd4a54bb90000b5a753 v7-0168
+35edf814f2230c2bfdf403073fdcf89094c8216a v7-3-100
+35effbd07a25d1df122e795165d26ceb65510c3a v7-2-421
+35f3b20de2dd2c821675c61a11f4b227d31e9cdd v7-1-102
+36071a92cb764412276e067fed099164b0170436 v7-0167
+36275e20d997b91a357433debf8fbac0885768a0 v7-1-051
+3686831cf3da094c66ca4d2ab2c671d3d2e2d497 v7-0166
+3709cf52b9b56befb1c7a98e5f58cf39d16cf953 v7-0119
+371201c6b4c1538b593b5dc72f36c79a1f2644de v7-1-327
+378e33d47ab09cbb564a2aa6e975659a7f742a67 v7-2-250
+3796d11fde3c141d30cc3446038c20bf280c4b5f v7-1-267
+37d62d968182826522e378b31b76cf0a8c7a3cb7 v7-3-058
+389c8abd59258ba5ebc164dc7158a025bfa893a2 v7-0048
+38d7bf77e55068a5157faac7d871f2f3a66cbfad v7-0226
+38de872507e1c6440c9252a7bad077ae8c1bd488 v7-1-280
+396a9b65abe6a8fd08a6c232b443d541717cad0e v7-1-121
+39aaf0cc59e83148991c7482fa82d2bc29129d3a v7-0-150
+39d115408c71e1bf72439d5a92d98c8e551a5750 v7-0-186
+39ebe9e88854b766c569529a96dac3b67aba0e65 v7-0165
+3a6ba07b3b9fa89e94e002d44f57f5378eb59f08 v7-1-302
+3a779b47f235a62d799147b25445b01866f7c0dd v7-0223
+3acbcd0d3fd3d81ce94a40af4510fcc2e7870a82 v7-1-317
+3adc6dd2d122c76a211d88769227e447e4f8f821 v7-3-136
+3ae106044109e65b5bce1ea8938e0658729349ed v7-1-008
+3af28ecf9e56315a8617b2c58da078b6df989f2c v7-2-122
+3af484dca921e30a0bb1e4975a4fb214c3911f94 v7-2-150
+3b1d692e5a2c3053fa066d202ffc0b51779d2c71 v7-0040
+3b226f4693dc8dd1fb8886221335c39a64bb1fa9 v7-1-207
+3b241fd8d7c09d7a93694a0abcdc283dcd6b4675 v7-2-441
+3b48421dbde112f3a6dae67a651a9f114d85c874 v7-1-301
+3b705e71c7b07ba1309d08a8b370ae8ad3fc17cd v7-0124
+3ba373b54370d830e3fda93eee83e3f0b1ea2a0b v7-0008
+3bfd2e1e2609c8470c5b4f75184b66e5a4d8faef v7-1-053
+3c17132458a1538d3f1d6ab00544df8069bd983d v7-1-208
+3c17f4d2196f2f280de13a417652529c417548ff v7-0-028
+3c251a30c8cc44946e5871a7073d88ce195874cd v7-1-325
+3c6417b7e6efed4cb13673383489efb47399a902 v7-2b-027
+3c838658fc357dc48e457bdbc1f5a63ae5a73d19 v7-2-257
+3cd88bdcd97d7d0a3e2f5a00a6627f00970ce5b9 v7-0-045
+3cdf2a653e005387c4deeceb7281d62fffd34687 v7-2-391
+3d698caa5dfc7b11c8a6ada5f57e75c7a6a117dc v7-1-064
+3d842a9e2baefc023d9e4f163ea138b9e29931e8 v7-0-051
+3dc6072e0a25f24ad5d888af77d858036a9185f1 v7-0-083
+3dd986bfef63bd08894294a0828a1bca737320e1 v7-2-181
+3dfff6a80088c921b391d493c6c1231e4e64a656 v7-2-217
+3e0f9984e98e8f020260ff015cc994ccc34059a9 v7-1-111
+3e7d17e425b0f58513002797b3310e722757893f v7-0044
+3ea3dcbf2cd6e5ddb9d827c60ce999b2e4a5e755 v7-3-108
+3eb34a777f49f7f656b32c8db829fd0b153abe23 v7-2-220
+3ee6db0a746e990164e288fed6344e519a5bd1d2 v7-0083
+3ee896333e3eebba8a5e10e04649f1bd20e98770 v7-1-290
+3f1b2e6496debe5ee3068d1916ea15926d5a0f99 v7-2-252
+3f44e9abe4ec65f797cbd12f1d46bd08eb48c2ef v7-0015
+3f661e42f262e7839e2f04c50a447c53f6c4214c v7-2-228
+3f8cf4c668c30ec99289b5683f4fd36a1df602fa v7-0-115
+3fc0f57ecb91686b33630dcac973ab9d7db31c6e v7-0001
+3ffdc64af1e53617586ad0cf14e039cb6f1cad34 v7-0120
+404aac550f357223e7bab3656343827f641d9f74 v7-0017
+40a0699b6c62f93e58ae233fcdfd395bbc1bc80f v7-0046
+40a8e388692b53d36104e9c9b6ed351c01707308 v7-2-241
+40aa7ae37901ce256da18bcc84dc5ee21f83829a v7-1-149
+40f2a904bffbbe8fb600089d1b04f1115a2a4a71 v7-1-115
+4102fb4ea78127b1a95b2df3274a55d9bfba68c2 v7-0002
+410fa1a31baff929c7876be744142723c1573c75 v7-0023
+417c04135ca2ec03b6357404b62761ca9453cdba v7-3-137
+417c4d78a09c07162879dfb79e25e672e6e9218d v7-1-043
+41ab6b381572fcef699480ffb759d3c4543f0dd0 v7-0-128
+41d8447a84570ca22fe07277a2f8e9db694f66f0 v7-2-236
+41f9fd58cf132788bde73ab1954cb987521e3bd2 v7-0019
+421a77b136c2bec5d2056a799e2fa8021178beda v7-2-002
+4238b697bfff46433c49d60cc20b43761ab3c128 v7-1-097
+4256f76f72668271d9d986cc3736eb188b4400a4 v7-0-080
+4269a0673478b966f8d0e08b5681ea0cf2acd68d v7-2-432
+42ac369bd824634488b569ec5516fc435b700be8 v7-2-070
+42cafbf4b6e81160c26fc99148eb333aab5d2f96 v7-3-110
+430793c2a2315e1d0ed2de460071eb83a4f9c97f v7-2-319
+430f555d7d152cfa5b7dc43b8b8b0dfa0d520520 v7-2-195
+431ebc9412a816440aaed887a3d318deb08c6407 v7-2-418
+43243f7ce351aecf1f41932a9d02d6723fe49e34 v7-3-128
+4353593fc2c07753d40f71998688985cf96689d3 v7-1-244
+437fb19625c9e24e2157563cf0a55aeb432b2990 v7-1-275
+439f44b874a731461a187dc720edc0c663ab47b2 v7-2-291
+43a60ac87145f10d827e08b02c8241b359697740 v7-2-263
+43bf0bcf2110ffd8d42f0ea9b1469b1024def86c v7-0115
+43d337097e4ceffd268685809aa1e8e0f2a2dbec v7-2-223
+441f938ea9e90e07a05e55fef17ab22d2607f5f3 v7-0192
+4483ee552619492639c69f4345d6554b7bcbef2b v7-2-355
+44c01fae1181944162c94bfba919ac9867ceec40 v7-2-160
+44fe912b5a1b3961c7bdfbd2a8277d38eeed1e77 v7-2-145
+451bed7e9572b45d2bc98bb5c6680e7bdf4a3fc3 v7-2-321
+4541e06d4fb9dd8b69a7ab43653c72022f95151f v7-1-323
+4549e0e7fbb661089184c7b0ba1888cb6564ef2c v7-3-076
+454d71a434176e2d1ce0c2a7d47bfe2583a5069c v7-1-037
+456ae41254c975189c55a6ad28b1255936c847fb v7-2-159
+4577899b8ff1548f3f03e6516715087c9aa15e6e v7-2c-003
+45898756e0598f357776ae5aa05d717a7017e0cc v7-1-105
+4589d1792c036e15d1f9e72c0252fb243aa6d5e4 v7-2-094
+45ba31f9ba0cad526601d1d15d4e05180967133f v7-1-127
+45bae37de0373ed58d6f4ed8721d594ae322782d v7-1-031
+45d9e2f80fe18c663346a2e88409bf2476e874cd v7-2-061
+45fe7cf4a89e3963ed9c0d6a34600dcff8de3f9f v7-0-176
+463e25d28b334622df784faea456a98ddbc0b5ce v7-1
+464da5b48d277d1052e3c211000717947fa13da6 v7-3-130
+469c42f90fda78344dd4b33e7c0dd0860b777939 v7-1-030
+46d39f2eff86c940486c2da466283d7526b98c9e v7-0027
+476336a5ae9588c4a13721b5ec1cd792fa44ea2c v7-2-404
+4772a5e3f9fa652baa1cb6d5295d60daeef6ef0b v7-0138
+47a0dcad7216bfe602a2ee241df60bfc41c04979 v7-3-120
+4842e7421b5207294cc90f7e2d2d18c24e65753c v7-2b-024
+4845822f6a6c21860e0a1b4627996d745d455da2 v7-1-213
+484987f8e04c44e19e1ef2f3f6864b4c6fe61f1c v7-2-118
+4869457735a9133c39202f797a6694301c41abc5 v7-2-290
+48775ea99f249b75872e9f0268c5bda8cb8af8da v7-0-007
+48b22e2eb1ed7782c4dfb90051b64d6614fc6d3b v7-1-185
+48c9c2bf59afb140dfae3f4b7182ca410e72cb25 v7-0060
+49b5a7f186aae9fdd9b633037e8da484c61c55bf v7-1-002
+4a317df1696281eaee0e54b5c1636186290863a3 v7-1-298
+4a4287c09953fff6a65f7324c5f223f7359c46f2 v7-2-390
+4a4b16c67c62174b3b66848a32f4e5554b9cf6c0 v7-0-183
+4a6554fb0483f5cab10876ff0d9a0e92a9787119 v7-0-161
+4a7320e53f32e1f6d60c498d870e6c4b8c7acc35 v7-0126
+4a79d6d376f0897e3a899ccb104a324a94bb846c v7-0c02
+4aa4510d548c9fff9d8317977e3801a68fe2aaba v7-2-341
+4ac0c84d1c5038d0f6171c68d9c58ef0fefd4226 v7-3-079
+4ac1dce8dd5e8d8e97e3e7b921f3ada9db2fe2de v7-0012
+4b8583e82cb8875d14ff928db281aea8145d0b0d v7-0201
+4b9fef49d7ff02cf781d26d5b85a0a03c8784fd8 v7-0095
+4bac29d27e2f4c2779ecb72a5e78cd4a65cb455e v7-0
+4bac7ed34007ad41b7870888c739c1b4a129cfc3 v7-2-368
+4bc81d4dc6be1c45e41f1b083ad7fc07c58d840c v7-0-142
+4be6da0fa3d9978434273d3abc021d7e68455864 v7-2-400
+4c02214d1465ac2b014a9a1096927ad04eb710e8 v7-2-200
+4c41f0da2a2e35b42334d091130440d1b1479e7b v7-2-324
+4c70a10ce2bb6d83a4cbf3e3baab19d1752f2230 v7-1-042
+4c7cf05f60b5885e1a5caadb787cc6e290d7ee34 v7-2-110
+4c8008ab94d8da38529991004a56e65547faed15 v7-2-431
+4c8b90b7a94a123db784dea518f3c9a3bdfe85c4 v7-0-221
+4ca6669af2cdc06f39d77bfef82663e5bbdedd56 v7-2-046
+4ce0a7e4c6b3a305419590c746d2a11040fb2b92 v7-1-036
+4d53c2a2af94cf7a657d85e27f891b2d53b698c3 v7-0054
+4dccbe792a5e00c40a6e5b4f9e74d20b5aed2c50 v7-1-057
+4dd75cfd946f31e81eaa4b03ec81ef141c562137 v7-1-071
+4e22214f84640bdfbad591ec2da5eef9bc328dc5 v7-2-409
+4e581f1b08dac0b7f9345bd51b03a5fdbdd49ddc v7-1-281
+4ec11bb387a559fb6168fdae70e7d0ad78e15c3a v7-2-372
+4ec4c53046b5be6700810b9b92996a0cfb4ed52a v7-0-021
+4ee809acd1ab9c2fadee72e0fae32de57040447b v7-1-124
+4f1130893a1c135b1200f6857bd0ebfb143350e1 v7-1-320
+4f1b94b51e99370161ceb5a923573772ca068582 v7-0b02
+4f3857aa17853ab6c36005520ae723af92f50b9e v7-2-264
+4fb859cd9ba955957ad712ea390e87cffec6a540 v7-0-072
+4fe8e1a7758ea8170eaa4b1abf11cc9682437cbe v7-0102
+501b107b335af7ffcffea060c38f4b34dafe4101 v7-2-012
+5027d3220e2adb2f2f54e85f469a7b4302a010da v7-1-308
+5044d9d784ed2958022fd3446910567a4b84dacc v7-0-154
+509230ed2036945be2d9db7e1ecded3c59518c2d v7-0g05
+5098908178cdede4656e3f96f2df2847573e6ed9 v7-2-050
+50a93218720458be104f03ce1be00bcc8b898eb9 v7-0-228
+50e0337c25cae29dd3e63b333d4bfb68cc9b3740 v7-1-239
+50f5ac5b90dedfc7f88a67d7a435014e07c298ca v7-1-094
+5117153003bdb002aa3e68d3b90a98a973d38078 v7-0e
+513866ffe6af0bcc09e7275c0e9130170de66acb v7-0200
+513d037fad505a5169add3116ae459bd1adac381 v7-0154
+5232b9862f238a2a109f15527825e5cac1668a04 v7-2-000
+5232b9862f238a2a109f15527825e5cac1668a04 v7-2-080
+529c6a431ff5d5612bfba4424c023dcf073c2cc1 v7-0-056
+52c87a746f4ab8397933a53388389aba6a16bdd3 v7-0181
+52d17d53b555c45b0b9f4ddaf3551bc8ad5623ce v7-0d05
+52e76e2b5b65eae81c4ea93d290194763d7edcd7 v7-0140
+53175322ef40dd7f50dc4153e6e6fb530a4b2b29 v7-0070
+5332dd13733cd57e814b7e21cb577f6ad0c15408 v7-0094
+537cb92935b690665a72f2b31dead8d9b322dcb1 v7-0-223
+538cd3220874d9a98abc7219e7be6666e49f853b v7-3-011
+539d9b8f418aeeeac3d0da1932e1cdbe709456a1 v7-1-265
+53b2bedccfdf5ab8cbff6c3fb1f6f83ac7112b85 v7-1-091
+53b47a10825a20cd7684046146393a641d89972f v7-2-163
+53d475dff0e363bfeb31d6d171337cb19c309098 v7-2-374
+53fd0a213cff86b7185c5391cef34c1265f8b8f5 v7-0-237
+54a6b47d473e64d7ae5212f00b8b125c721d2c41 v7-1-160
+54d5eb36689f1a409d13cd6ff9b06d68a30b0d48 v7-2-092
+553c97222cc0d0adb7beecd6f73be1c512f2f37c v7-2b-005
+55e117ed68724567167ed25bfb5a320585f1bb5c v7-1-075
+563bd9a63fdcb08d55b6f6087cc8ededd31b891d v7-2-010
+56609cdae088c4d5b38ac94a95a07f1520b56fcc v7-0-059
+56695f1182f01d75843d0433484c94c1eade71de v7-0-238
+56b638f2029e728f1fb20382a7184a8e4ebdce9f v7-3-018
+56ecdb792c3353d9fc587a515fa4991e69363dd5 v7-3-036
+56fb4ab9f62f19b9812d483aa76f8b53104db26e v7-1-225
+575dacb554d8b134356fae0135383d5e2231113f v7-0096
+58059676e24a6fbbc686faf84c612cfa8c25485d v7-0-134
+5858c00d0f2c47b395e3c63cc809ee667f8c02a4 v7-0-122
+5898cc36322e7f1dc371e89dfb5e2ffc3c6c6e3e v7-1-309
+58a14bafc1f08b9712732a26a44c2a93e34e6ae2 v7-1-209
+58cad056e60844274b103ff3fdb56d7a6749b121 v7-2a-00
+58f47e17ba1565ec9c538c7f216cb9ea66e58a63 v7-3-122
+594f25e4a8065bcb865784556adf556004bddb24 v7-0144
+5950b03fc906f434d5a1b899bcee8ff839b05a34 v7-2-020
+59edc8429da0ca92da8913823f56b219e3a99051 v7-2-065
+59fd8376545beba122700d5a481793f29ff0a69e v7-0058
+5a1d8468d1fad7189c8c781149f034dbb4208b39 v7-0-224
+5a1d8468d1fad7189c8c781149f034dbb4208b39 v7-0-225
+5a1fe35a6eafb1c994955a34d8152996d53838e3 v7-3-092
+5a7384b9ca6691ee880dd4e01dddcba5dcac4f6d v7-2-031
+5a7843c57316c63d1118b6a5c2f42d330e57183b v7-0e02
+5a84b6388a5589d6f3b53a1aa6f8fcc369989a0e v7-2-369
+5a97d0c03b593699d6e0bb2ea49073dca03153f8 v7-2-397
+5abd3e3c0085de46b37ac9bcee90be8160dccafe v7-2-363
+5b101ff9d4c43c566e7adfb0a7c0978d2150d741 v7-0203
+5b154df6fcd89b4d24d34da63626cc01d9b5c0c2 v7-3-033
+5b43a3a9454ad69432d5cc82b70d59ec6c92a45a v7-2-003
+5ba8e25f7fc159a684a965ea9e6626f62b76997c v7-1-188
+5bbc2d6658adb0dd3c67dd80c59f3a7ade3ba3d6 v7-2a-013
+5bedef935ce38062e866c72aec633d38d95dfbf2 v7-2-357
+5c3844ad7d5677953eac88ec4ee317b298812bce v7-2a-017
+5c4b2fc4f067cd04bed4fd0a13bdec7d26036d26 v7-3-049
+5c6a3e894d43ed024662462cf5c6f77feb743132 v7-2-288
+5c6fa259c9236cfacc66dfeade89414479b5aa58 v7-2-328
+5d1ca05fa8ffd87bf59d26121e6cff5f91e9afd4 v7-2-199
+5d25cdc3c3f31d4893f646d5e7b94435ef59aa5e v7-2b-003
+5d2f6d04c82f900b01c18a7bcf2287a42cf09ffb v7-2-253
+5d5a41a95347bf4a1382babc697a1f940a83e43c v7-0-227
+5d5cad78a8380735abb8ca0e7d3ffb11e9eb98e6 v7-2-300
+5d84650b569c7800de8012d91660441bda95e5c0 v7-2-108
+5df74a812b7b20bd7e33634453c645be0eb8a2c4 v7-3-012
+5e0c164fc1c25fdfcef07fc03c6634216e6ac066 v7-2-277
+5e168526af25c0a59c55dd009e10a63d2f156114 v7-0-033
+5e225f973b5d22208869bfbf151c5fd03b5a3451 v7-2-089
+5e75d07bfe75fc81e0dac043b6bc0ba417736b17 v7-1-293
+5ea1f7516c2cb92422abed07129357a0d5a6a787 v7-2-165
+5eb1ac6f92ad40da9bbb585f5ff8fe003e85122c v7-1b
+5ed9395c1864269b18ffad462291eb37c92792f0 v7-2-235
+5ef53a1677ee9c831d7a18ee44d1041f182a82b2 v7-1-099
+5f0c7aae4da272c73cfc625f35dc050897b6afe7 v7-1-330
+5f33b64a6694dbc2c167b86c56488ddeeb7f46c5 v7-0107
+5fafc42c22d246e4dcef5c09d70b757e0d374b2c v7-2-053
+5fbc411a611de301397bf4f8edf494fe07bcf6f8 v7-3-042
+5fd44cf99b6ddccdadcf70ff8351999e4bf5dc38 v7-2-398
+605f5c2f77bace46037afea6841f7876af85a4b4 v7-2-182
+607cff4bc0cbd7ddf84007a20bf3e6bb01e70694 v7-0088
+60d21d224d251c448ef76b1b9df087497c06adf4 v7-1-038
+613517f0b72a1600d58abeb8c44df9b3de1ac997 v7-2-284
+61709607f5e26dc1d4cf420a25292ccc857d3575 v7-1-228
+619b90abfdc95e3b1d0981a8995b942c6a7c3c29 v7-2-032
+61b50044616bc626b27630b3c9f03322db0ec609 v7-1-090
+61d080cb268e21cc2275da3a0ff2b2081d97ff51 v7-2-086
+61e5d40135d0d90f5d1689c469958bb7a37e074f v7-0-139
+62716fd61fe94fb9e7f39294dfa9dba4aa06fbf8 v7-1-204
+630eca9496e07d9a778fe87d087832816a01a850 v7-2a-010
+631143ac4a01c32e465380ba2ab7f82949f20d75 v7-0007
+63157185aea525b39b1238df3ffbf4ec0fea10b1 v7-2-442
+63369d73b551cb0b72202c29dfdf59aa6049a333 v7-2-161
+63613d8d7e4dff96ba2f34be50fa4b002f56cff6 v7-2-354
+63bf37c1e7a2c323b368df6e926b026139ec3144 v7-2-401
+6412b0befebc17db58a1e8acbef86d3a3e4f742c v7-2a-007
+649d340f34d3ccb1c96efa9522a65803575d901c v7-2-067
+64be6e0b070a5f5f58eddedc8b57dc0356642cd5 v7-0-004
+64dd70f176c92013bc7efd0f3c50083fe4ca0972 v7-1-021
+64e2b75e16158d89c4a600bb97a62a4616632884 v7-0-141
+64ed4359d9570e345dc109b51138c36ac8769614 v7-1-221
+6510d834609f78327cf78465d6849601bfe39108 v7-2-380
+652d074e0264f453cbf76df0ce041b5032504085 v7-0-048
+656853d9c014add434086291b7af40ad828f126a v7-0-111
+656b4c052203990d56ca731d2e3ca39ebd9bd775 v7-2-029
+656ca7102064d711eed5cc678b4a5cf03b5d9c05 v7-2-026
+656e652c6579a812d9f48a0e5e4d8ee47ebc1a35 v7-3-068
+65c332f15dbf3376ed5aeea423e8f1584a65ff29 v7-2-083
+65e0c2e3a3521c9782728f307ced58a5740d87ac v7-0-166
+65fa3b16f040f5320bad34c324f230099bfd8f0c v7-0222
+6605dca2960f5c597f981c60cd3009e98b173883 v7-2-178
+66080ac5dab745208cfd8f385faea24ed68be68c v7-0130
+66263e241ce35e11faf9b33ef6e2d509e1ada4eb v7-0176
+6632670ff6fc2bd4dbe01001086874b9f75b0929 v7-0-053
+66475621f0bfacb601f38c15625c15c2a478e672 v7-0147
+6675076019ae7e7444c526b342c91ae2ef6cfaac v7-0d
+66b1822ba176a2f7d7e2878b2907af6d86e5b5c8 v7-2-326
+66ddf49935fb8979def275bcf7c56acdfac7ef6d v7-1-015
+66e40876590bca973973b6aae208a14cb428c266 v7-1-007
+680834cb19eb2dfdc88aded4bfb36518ca4caa60 v7-2-022
+684ea86baabb6ead7b673d20de6f4b5b27a3335d v7-2-101
+68f00510705229a9b8653612b806dbbcccd5aebf v7-2a-001
+694e8715dce6af134be79c99e97f90786088078f v7-1-316
+6974b167d75eabdf70005f666e3dd0e82e47be4e v7-1-056
+697dec8ec5e723ae32e12229d3ca111fe7f4ba92 v7-0-037
+69bcc0c891d706d3383f013e9e5f8876b6c76d4f v7-1-158
+69e8006af73433fa27ecf32b695919bd665be1c6 v7-0212
+6a2e4860134bf0e4b5edf382627809dc6cec309c v7-3-091
+6a80537ac7aa6d4c9011edf4db84a6aea85d2911 v7-3-041
+6a85219723b98ddd686d1a80c481a545bcb535d8 v7-3-027
+6aea606c9e911f768a5e6c9626581721f460f756 v7-2-068
+6b5d641bcdd45e53c24e0b4e0b6085a696e336a8 v7-2-395
+6b89fd4ffcc698278ecc582280c79916a425498b v7-0-008
+6ba0265d1f1b70b8a4a2b3337b18ded763f58f09 v7-2-295
+6bb1fa855dc91259d295a1beeb4144aa51b3cab6 v7-0e03
+6c05b5e5c1be4ee9b8f96334b7fba7afa832524e v7-3-032
+6c3c2e464a9628bcbfe21317b8fd90ae27076735 v7-2-392
+6c4da3e24371945408401d6330a930d44cb5d716 v7-0-232
+6c62b9b939bd8f3df4ec59b2c2d72bbbecc723d8 v7-0093
+6c7719f94811d10db3f86578e5286e5da2fd8514 v7-2-170
+6cc8a093e4a9b14df444effaef7274d2318d00d1 v7-3-115
+6d421b3c485b2da5a04529c6b71041031d41b80c v7-1-046
+6d80dbca8501a4152908713778ce03e0f45b93f3 v7-3-118
+6d95d8976b00540c053d11fff36e20556d125152 v7-1-200
+6ddd55ac6ce50b94713303278888da04d21f489f v7-2-249
+6df4e719ce4eb637d6db90febd0d1eb48bf8e96a v7-1-112
+6e03ee418b50de776b583358fe2ba20bbaf043ad v7-0-137
+6e9c10c63e25ce9212c5d629c9fdb60b67e6658a v7-2-216
+6ed4a82fcfc6f1c354906dfaa5e13a192b3246a9 v7-2-175
+6edf4a4f6cac62dd123f7d1017a7624c9f48e71c v7-0110
+6ee9d7fa5df6d00c892f7e93a63435de5c50e083 v7-3-057
+6f12c4eae4f69d1379427e8b0cee82769f75c35d v7-2-153
+6f4740f72d3d2018bfb19d4c8d8064e3682fd883 v7-3-090
+6f8b578776ab0204bf16f669383aefb0661610f0 v7-0131
+6fdbaf2bba0459270702479d6c4cd04f4f6bc034 v7-1-098
+7002404b17b15ea37887cb1dd5b5b95883cdd27f v7-3-054
+7015ddf8105575fcf48eac35b14c61a24fc38d7f v7-2b-018
+7033303ea0c065c16d5fc31d485c949f7949c10b v7-0089
+70661384379a0dd305576f64554608a396b0821f v7-2-056
+70a5e723eea2c648aa82f7c8f28a2a5dd5429132 v7-2-213
+70c67b1bb1f1aeddc1dea55438e11ae6f9ca3d14 v7-2-329
+710b52d02c4a0649d5b20c38e3394a2e248be9f5 v7-1-237
+710da9abc3c1191eec6633477eea663fada04939 v7-2-317
+71219f47ccd9551fc7d090e73afb83cc395232d8 v7-3-025
+717e759932cb94af9ee8dc9e93f33b67f292e8c1 v7-1-217
+71bd485d8fa572ac15207c5c1059b2ad0ae685fc v7-1-166
+71db8539b8c487eef0df17f2069d96fea1911cf1 v7-1-268
+71eaeb69efe49baf0f63c6e9cebde1aade638ccf v7-2-007
+7209e03df1005fc037c029799b068f545b60433d v7-2-075
+720a59d79bcd3d606bb9837492295d0c52835500 v7-2-168
+721ebb602db0fd2a5a9cded8e0830800d734469a v7-0-135
+727ab557c58a3257743a8b7589d91e21975b54ea v7-0-102
+7281a86ae640e65e5eff6d6b565be20032f736b3 v7-1-016
+72ef7987368de4715599707a85f74a8e6d029c9c v7-2-139
+730697e82c43a8bc8b5975bea39fd180fb62a4be v7-2-091
+7317e0e2775877fa0b817e20d29de9eba1a4f95d v7-2-254
+732c7ae5743ec2d22423a8bb631e2d3c5fb8e549 v7-0180
+73354c21f1e40dc792e5829152992e76f7a607ee v7-0066
+734d5bdae499eb2fa3f818e843efd9727e7f69f3 v7-2-041
+7387540b6e52e3faad6c78182de9d1354ac9e6b4 v7-1-297
+73995e7c06e668b3eafc366b3c959d32f6bc00e7 v7-1-174
+73c0eeeee0b789738812c1cf821de3f86e1fee53 v7-0-174
+73c5752b957d49da8312ef87383a7368c78df74c v7-1-295
+73d947c20291fd857fba24ddf4725b9b831188eb v7-3-038
+73dd10c18ec4eb2cc0857417fb8cc20f63dd42e1 v7-3-060
+73f10d8124f48510e0ad1468ee9e29c010009621 v7-0136
+7472c565592a373abca2ea571e229b4bcbfd7b15 v7-0117
+74e9d19831c2357d7b998f484ebc609dbc08c5e4 v7-0081
+7557b6ea0fb14ba4e97f5a8a04438db30cf902bb v7-0030
+758822790b43d2fc184878c3a50a12d71dda794e v7-3-031
+75a69023117c516ca184ed479727f105af12cc39 v7-2-221
+75a89c7c204e0f478f480598cc3f2a8c45dee8b3 v7-3-059
+75ab683fdb50e83cb9037454f5dd8d602e08e4c1 v7-1-233
+75b3f9cc19da44ef65c962deb7a6049c305f49d4 v7-2-283
+75c88515e0db5fd6f88a05634d9abd22795aacbd v7-1-214
+75dbeedddaa9b0e0784c4d23d71de713a533c5b4 v7-2b-016
+75f5889a5d8e8272fd17a104ef148776f9133aa8 v7-1-260
+763272b18e4ffe717ebb58827315badc09824e86 v7-3-098
+76406c9cbbaa1ab6a8f6ca7f079c3ba8cf06e2ca v7-1-176
+7644c80ca87b75a7dd85a7b4089e74bf5c503f3c v7-0-089
+766918de9e3a76816ebdee3b90cdb1f9f76bca6a v7-3-004
+76985a406456362dbdb4e7e4bef67656b84de965 v7-1-240
+76a42a81f68505f7b99af53a919e3cc7895096b6 v7-1-087
+76c2b2dd25c9c6945489a1c636f7e375ef1f40d0 v7-1-033
+77310929a1f94745e3d49f0cf1a6908785d3cfb0 v7-1-151
+777d5460622d4a9aac084695524d0c85b39f4174 v7-0-164
+7781fcd2b74f26a37da0d1186a1c44d904a8f11f v7-2-011
+77f3dd990b12aa963aa0a63f0db50f6443f3f41d v7-3-119
+77f8a648d2e6c765329ee6544bd8716835bda3bb v7-0-062
+78b9d5dce950b348235ee667f8573c6592920088 v7-2-420
+78e032bb32605c1437e30f7ec3215ad4c0772dd5 v7-2-303
+799c1db62b42a7c9d504c45ed313910c2e3d169b v7-1-164
+79a23c19108a8b1eb9d1b97d5844fabee6525e23 v7-1-079
+79b395ba0ea5e2bc7d27ace528d84d47aa1f5a66 v7-2-311
+79b8d69a4588b93516410e519bb9459242f46d81 v7-2-340
+79bba9e6af2b6588349ac2b3e9fb722d6ecbdc85 v7-1-224
+79d111ea8ef64e7bab0a5e27b7d5903f10e45a43 v7-2-425
+7a4ad3fb109d42f37f82664390f128dc9b7e44bd v7-2-188
+7aee5e68548a7cd13c74e67439f8c3b8ae6327be v7-2-417
+7b0e89b77216baf928145ce14741650806004c31 v7-2-365
+7b258a166daa98eb01237988ec954895a2e6ff0e v7-2-018
+7b44c70ee8ab87d5265ebec758a6f5ea9d5cfa75 v7-3-104
+7b875bfb39b871d5d40525d579e30358bab6be1a v7-2-434
+7bc38b35f1e87c1749f157ef91b6cab86bfd9561 v7-0-026
+7bcd81b96e2abb28ffb000145c917bd05e88e5c5 v7-2-267
+7c28790fa8b4054bdde6d358a9132581de76df62 v7-0-009
+7c2e6ba1d702579761d7ddc4020797bbc97805e3 v7-3-008
+7c3302e07dd7cf0d746776234ed4e9cb376d3611 v7-2-023
+7c46737918cb0adc9a51849b75b1c03da7bd77f3 v7-3-117
+7caa503b63a9b193f3b9e016a0a466ff8065f2f0 v7-2-225
+7d121c69f540272878af6fafdf658443360a698b v7-2-383
+7d127d580b6d2d86853fc0a322323cdee2eca343 v7-1-318
+7d2641e6af75b3cfb4dc29e7c88812dee6c003ae v7-2-261
+7d29124f77f5e794008c746c69a0f79da0cd966a v7-0-133
+7df2d171ef1c1284e10a4c53fb079d02e6d7b028 v7-0-163
+7e0c8a18c915a4c7dccf01be813488e27d03fdc5 v7-2-275
+7e5284f58094dd557b1502e1536c78846a59049c v7-1-134
+7e6d264ec0a270beb9692df71fedb210c1896640 v7-0141
+7e7da11555d27f62984297f3e1debc8242baf995 v7-1-080
+7f01e52cc97aca6eff92948b67876e800eb67fc3 v7-0-171
+7f2d3b3c15a2ffbd259c2ee99966124c2c2087ee v7-0122
+7f788cd2741586586a34b41627a1c978fa465666 v7-0020
+7fd70926e2e1c299ecd9dff6ddfb51ef71f7f08b v7-0055
+7fe13e0f5dce15cd16dd61c898e63899a9aff561 v7-0175
+7ff9f75f9c59f7b600ada6ac4b3234398df5f38f v7-2-245
+801d5544828215bf644cbc6ababfc66beec6cb2d v7-1-195
+802898d3afd12da41c305c495b121e41ed880659 v7-2-214
+80b9076e9e177bbcb455eef9928283077ed1c861 v7-1-310
+80e5b1da667656a146cad7a749ac9fd2afb659bb v7-2-231
+81059e8b657d911c9876f557975f34624988624f v7-2b-015
+811f29447aea27adaf1f54879ddf0fbd05a1e094 v7-1-270
+813a407a63af8773c585b0baae4d22296503ac03 v7-2-271
+8173ec1e9f1f746657dd598b6e876b11c99e1049 v7-0034
+819d952a0a5cc810c52b34e8df400f83eb3353ce v7-2-142
+81cf1b6e0a2d59192534f884135108f788a20b91 v7-0-147
+81fe2ccc1207699c377b42f1d8ca426a70177afd v7-0179
+823e9ddf23f77858f1b866fadf3e4ec5ae5d55b8 v7-2-141
+826f00fef9e338c7afebef68658716bb0aab62f4 v7-1-096
+8272535dee77ded630f57073b428e89673f1ee45 v7-2-035
+82885ffcad10aaf6d11170dc45d2721ee222c37c v7-2-310
+82add1e7c154fbbd5926df49fd4afe768e6007db v7-1-013
+82b2594be40863fef91c163200db2f56b2e4e52b v7-0-155
+82ca8ff21fd7181e16dcc58863d0d251b9228374 v7-0-175
+82f866f19e91a19ae44e7dbe5eb8747e98acfd85 v7-2-269
+8389197c91f3ecaaf28b776e69b9336eb08828d3 v7-2-133
+83a006f81bac04bf9b975347bf8d6bddc7996eb6 v7-0199
+83a126db2895ba22f2fff13b488f028ff83bec28 v7-2-027
+83eda510dbc07b4fe4db5b5f324680f60c307fff v7-0-222
+843bfffb04c739ec456e5c5f612c6d025f2a6188 v7-1-058
+8464d084fa7475830cdc53529cd20f7334c81232 v7-3-095
+8531f7ee366297c58506f9a3130f45c350ce1fe5 v7-0-218
+8562c6804861cd26020e1a004edb1c1b218af9f2 v7-2-388
+85a99ba3eb5ab45127c996c4e7b4dea2e7a76c54 v7-2-233
+85ad197907065fd92f29bf3dcc190779a20aba46 v7-2-396
+85da0376313011aa957a9132df2686c9aba079d0 v7-2-333
+86079b930b3e8735933c9349e44184761bbf56b0 v7-1-010
+862863033fddf5f0bb2f18988b79bbe0d289ba45 v7-0158
+86289e90a4bbb818e9cf8bae6e57f7b91b9671cc v7-0-123
+862d920800b1a8a5ebca3e7db5dbe431982f7d0d v7-3-103
+8647018a15f3e4e89c706b6290ab0151565f394a v7-0-178
+869c92bcfb697875d5580fdf3a13eacd5648c5f3 v7-0085
+86ce35c9750f60054f48c1bfb80507345b862d8f v7-0231
+86d71ae0c85a546d4a00b53481b540a4ade2c9bd v7-0042
+871231399cf547112a50a9f93497d40d01b66d51 v7-1-118
+87401adbf5fcbc6fb8edf329290c445528266bc5 v7-1-067
+87a777aea8993a49e61394e7a84847e91b014090 v7-1-005
+87ac4be389523f44914899c37180d22b60757ffa v7-0128
+87b6a6a065ab60f6ca4ed094c2afafe16e0b590e v7-2-171
+87b9f21264a79be4ecfd14f69da0577f9d41f260 v7-1-247
+88095f75d63b5a486f603cf28801df0118ed1218 v7-3-015
+880ece6b24762edd52b414aa1f005478707a3179 v7-1-101
+882b2fa49a2a888a8231f3cf2428b91439decb93 v7-0-014
+888c0645d64f3a844b22525387981f17317d8502 v7-1-069
+88c0c6c9eadab09b029312433f246f65e216a1f0 v7-1-184
+88c68e59d39cee12c580f1df72a5759e58574978 v7-1-088
+89189f7aaad9c28435aa5cbd4db359ae54d0769e v7-2-312
+89300f5e013c7d217d5f891113a57705cdeb017c v7-2-414
+8978513bb5e31d3f20c941e5141d228ca95a6f58 v7-2-100
+89d1e8ed6c1d6d9a672880fc73df97486b2d5966 v7-2-227
+89dc68c0ab6fd676ade26cca39e16b81896a5069 v7-2-386
+8a0a8f10b43e02d44ff26d608cd80fb61ce4773d v7-2-356
+8a2092b558c2fc11605dded24c4c5a817ca92ac9 v7-2-443
+8a22a90c964a168cf3d93f5ff8d5c531a4327ea6 v7-1-229
+8a5a95f7ef2a7dfeb585d0392489fb57ea4c5af9 v7-0185
+8a6982d59d8ef4afa5c178d772bd2943665f0146 v7-0224
+8a6c67218fccfc536fdf829075e99549fb8247dd v7-1-173
+8aa3cd045aefc5d324d820f2239ca1f533e9632f v7-2-379
+8aa94f8080bdeb8908de30bbcf62945dabba1aa3 v7-3-022
+8abc0abf8cbd09abaab555fbbaedbbc231d42b41 v7-1-248
+8ac6392acb0a87a779340f949e280bafcc49f55b v7-1-136
+8ae24f338cab86cb35fd495ddc3cbe2101ae1558 v7-0217
+8ae4de2d02af315b1c0abc2230c3ccd5a31f1013 v7-2-384
+8b2e9257cc116bf30b755aeb37a742ac83f5da42 v7-1-152
+8b84fe17e147219e6ff181f6bd7e809e5116588c v7-0159
+8bebcabccc2c430f05c5d85f8532adccb18a6136 v7-0e01
+8c229eb52e347be77c76c1c2c96f717cbfdba4c5 v7-0099
+8c25f10d49e7186c9785a0f01612166f20a29298 v7-0028
+8c60f65311fa6358488f671adc226950c18a993d v7-0052
+8c8d07318d8d0b1bcfbd395ae7aeec6813725b33 v7-0-086
+8c9396275bfaf3ba6c759c26fef07c0b687a8abb v7-1-277
+8ca3c9ad0bee0c265345decd180d971197e36194 v7-2-366
+8cd72985156286e77ac5d271a13cfb569b29ed76 v7-0g
+8d09c1eed8a57bb2df53fb1f1747137e5a3489f5 v7-1-074
+8d1db3e3ac5f3f33dcf5f68ea132502082e787db v7-2-262
+8d2b705a5a51d2a6756f16dee861dae4ea97101a v7-0113
+8d34af900baedf0db9a3e57bbf48eeee75068e06 v7-0072
+8d74df00f7daa4e79bf7fc56164369781408e1be v7-1-262
+8d8dc7e07999acbfd89d0b646d72fab69e06bef0 v7-1-230
+8dc36a64ae8b36d124bc0767ccadba3daea943ec v7-1-294
+8dd456c1e283bf8c85e9ff38994fdfc6dd009ff5 v7-0c13
+8e2d14a3e7d2860527d39f0b662beade84db9d23 v7-2-352
+8e42199f51218e2a14a946ee50c1e8d8ef38205c v7-1-054
+8e5830943bff21c0a2aa18399d18c8269ed9d3f7 v7-0e04
+8eec9649b7a2ea1a441723ce7a4e8637c294ffbb v7-0064
+8ef9da918a98e7f8fecb4d88914e4691a8da88b8 v7-2-413
+8f72e3512b437d2390860bf9fb6605b778cb0346 v7-2-381
+8fa8d7964cf116fa98895d029808a0d5e1cf201b v7-0073
+8fafff87aedbcc1a7c71e29a9369056e5c08e84e v7-0-075
+8fd2e00c44ae10bd9e8a8f5c12db47378314457a v7-0-112
+8fdc1210333357780019fa8dbabc34f07d545775 v7-3-035
+8ff7fd162d3cf15129e377401e49f8210d62aee6 v7-0016
+903088c7a7c61b7f30d35c8a184d90b7af4a44e6 v7-0193
+9032e466829601e6c56046813d0a9a00946a1d10 v7-0189
+903fcd726d9058a0b0c14a85cadf31aae3ad27a2 v7-2-359
+906b37d2f9c3a85fc9c67a29005ad1538e60efcc v7-0056
+907cf09fbb32d7b189d3372f3c4f1220f198a9d1 v7-2-385
+9090f866cd57a7febdb2e0679bf0a5e86951e314 v7-0197
+90ee46d7f4927c095141dd4afa92400f2fe4c697 v7-0164
+912b18745defca4b03d5738fc7ae6c76d701f2f7 v7-1-143
+91e7d4a7b3b0e20b6f5bf9468ad17625e745d640 v7-0178
+91fff9db214e21eeaacd20da86b22629ba6d92cf v7-2-297
+920a993902e8332e3fd539a54997278364fdbcf3 v7-0062
+92168cfd558c53f1fb0d8014559f16be0a795171 v7-2-167fix
+9230c45fdde65ac15a42c39d851c68b248fd6836 v7-2-226
+92809ecb9a476994296e51001486b3934561fc87 v7-2-292
+92f3089a7b10dc9e8f5f3c69ab1e490d52ad2f0a v7-0-082
+932fe018ad166a9f8e4b6b0ae91d562cab7c37db v7-0-168
+932ff0c0f57bb90d48470b70cc728058e0c56e3e v7-2-173
+932ff0c0f57bb90d48470b70cc728058e0c56e3e v7-2-176
+9364d114ed8d089f3a42c910442957d33e5480cc v7-0204
+9368159253f847f95c6c1f39a894e26fa3c954e8 v7-2b-007
+93ffa40b532038ad22824047b15c6edec3b6af5a v7-1-155
+94164a5b0626984b565ae6421c64bfd6d993e162 v7-0-043
+94694351f592a56f8a379510eb6992ed0dbee821 v7-3-029
+946f0cbdd535d6fb8915ccc87b837edb15287663 v7-0074
+94f44da44d2e0874a562918005789418793bb507 v7-2-339
+951641b8784de5175cadf9fdbc361db2b6b45060 v7-3-102
+954947a70580c6c5d94bd110f974bdf103dd6fd0 v7-2-166
+95723058b8ff365843508cfa47a3bc2ecb1b0cf8 v7-0-229
+9577a28005e10fab0a0cada6c41b96c9a3e1bfe9 v7-2-446
+95b507e6c9e75d5b4c114a63a98b4bc36c643eea v7-0-145
+95b659982b7c17ff93304a37f43be8dc508e20dd v7-2-375
+95dac6af3b3a8f50af24432b7e355ea44ec69f95 v7-0232
+95dd473d2d28a088822c73309c3dee597c96facd v7-2-044
+96276cc11d8e68ee320e0f61e20406dcb7a0b995 v7-2-240
+96445585f1d9d1abbc74d9c24efbf0408b2cbb12 v7-2-151
+9656552c468d29773423dcd62a323aceee0b6c55 v7-1-072
+96580558098272cca6f93085d79aa7164c7abf41 v7-0-215
+966289a3dd7ea565980bb03abc9b52d88378f96c v7-2-316
+97a73b6f28925dea4310c00225cc6210af00468a v7-2-113
+98a2a6e6b966668c810986b6ddd4820bc09db426 v7-2-353
+98a88a884610aa911950623d7cce8d067feda66c v7-0230
+98cc757f7e3dbff20ade108b82582d7a7d88ed33 v7-2-376
+98cdf5c477ec3c3ce8851a517ca3021aeda6573a v7-2-298
+98d1c149be76b44332bdb72e986bfc8b0f9f21d3 v7-0-160
+98ef5b0fe07610170bd68aac5ba6e739410c913c v7-0-029
+9913ff5706164031d5f847bc0980cc61eeed3974 v7-2-119
+992d5c69d5e917b03abcee24d2fbed8348e21c23 v7-0-132
+9947133ce85b86df83b86f476c09c0454c47a310 v7-1-078
+994ea4e6f0238f12a5516eb75f7a6d7ce86362e6 v7-0-094
+995536cad50e5c08be60c2d82c7b32a63db1e434 v7-1-218
+99a9e42e5688aeecaeaa4642d17be0ca54ab5945 v7-1-095
+99b225e0dbc1989ecae75200aaf0e5329e6bedac v7-2-430
+99ccc8932b6c450cbcdcf86de05dbd5129a370fe v7-0-180
+9a10e4d195b342292cb8ce0d368afafac146abf9 v7-0076
+9a3b65713280ebf8750989758b4b2d42f757ca9b v7-0-216
+9ab23f1e137fd5b0e35c1604ffb95979713f83e4 v7-0c12
+9adbd26f7fee884be78276fb400ee77d333cf335 v7-0-116
+9aec644c45dcc33b3f3571ba0035e7f85430eef6 v7-0-121
+9b78bb3794ba4dba44ab3eab9ab2984797e839d6 v7-2-350
+9b7d8fd5dc68074119d5a609210fc1ba924e9d7a v7-1-148
+9bc164a2c8143f6019d0b13a2aee4be89da3a9fe v7-2-204
+9be44c669f4c67406132ede84d1d2951eac7d63c v7-1-172
+9be87deaeb527ef18daf09d6c75b21d1d7a65d78 v7-0009
+9c510840e896fc3776ec7694fe90e18808036fad v7-2-439
+9c5a9e4356f8ef42ea2c177568b63bfbb1779bb0 v7-2a-003
+9c970d8681f46de0b13ff16d67c2327a19f33626 v7-1-226
+9cbe94fd5c8f1ca388ccd2be94f17caa33ef093d v7-2-314
+9d6a886aceb23fcaf8f64f9cf1ebf3f83d14b2da v7-2-242
+9d74e2f433c0370cb458c83d12b05f72226df489 v7-2c-001
+9dbb57025f2542dad344102c571c06da6b840b34 v7-1-139
+9dc77520c6d3ee0c3e689bc3e6d635cde80909ff v7-0-013
+9dd62cb57ed5845c9c2294b6002a29702ef043fb v7-1-319
+9e0174515abb6667a9e74e6fefc74ad50d7821d2 v7-1-291
+9e084588b706867fae28f93f67d163635a79ae51 v7-0-188
+9e1cefec84dde22d62c1bd2dd0ceb4e072470981 v7-2c-002
+9e265d9089fd4afcc03a4ac7c1ccbd754c8ef6f5 v7-2-436
+9e359e5759f628fd0ff90172d533636440b464e6 v7-0177
+9e554211caf55e33249908747d9259ac77f10b72 v7-2-301
+9edb5759494281d90ae0f312b2ac32c30f51ca50 v7-2-260
+9edc96495747bd354e68dfd76b6ca525d39e715c v7-2-206
+9f184758f277b816c95fd946cd2d63578d296578 v7-0-010
+9f279ebda75194c26ba5c917f68a7102348215b6 v7-0f01
+9f345c48220b7a503fde0367df20e576fd46b04a v7-0c
+9f8fd6a14cfc84953deae7d00287a1949c0f0eff v7-2-004
+9fb5bb1ea79b5ba402e51051d79a3476ffce3c35 v7-1-044
+9fbb40a1228a4d8a5f26d1dff8e2ab4e3bd870fe v7-1-282
+a03f7551baccc60bedef5ef6a9f92ccdfe69a9a3 v7-3-081
+a041f68d05909431f0a525eace55307214c33d43 v7-3-114
+a0451524244d6387ea49cfda296f6550a2a9aebd v7-0082
+a07007166d518f51749cc9e145afeb023638a415 v7-0-044
+a0a98a0f12816722b1792141edb3625dd72eb5bb v7-1-326
+a0b03b7e9168b7f7fd61b1563ffdd6d09ca54260 v7-3-028
+a0c01df852e1d183c879ee114b35b2b5b0d06746 v7-1-300
+a0c70314350fde9e0948e598fe57dddc6192468e v7-2a-012
+a1059cda45f226497278c53752d5c07d21cda09d v7-0142
+a112fdce9ebd6d538c70602550e94f29a2fc60fc v7-0-200
+a11e2070c964de1cfb9fdf3ce339ec75b7a983cd v7-0-203
+a135270b75498b76b5bacbd1e381059283c5e383 v7-1-206
+a13e4b242735dd0b3285b7f36fccda195ba1d5f5 v7-0-243
+a14db0b78c590d4bb8e1a190b80fbf3dfff89560 v7-3-121
+a157c4786b79ae94758574d5ecb4a8f4959de5e6 v7-0-073
+a16af0072ea82b2dcd265d050b349850cf8f28b6 v7-2-410
+a1c1f001b99dd591d9082db95de70e2bf8f9e8de v7-0-129
+a1c5a6cb26756450d2b7065999de140c2fb6ca74 v7-0112
+a209672376fd537735f6ab55ce926cb80fa56ca0 v7-0f
+a2271decbce54d46f62e7cc9a0c4e3ea3ae9080d v7-3-065
+a27c581d2618b9bab1c7105fba966af40e23d57a v7-2-016
+a285f0cd8a462ff5cb17053fd457646f9d33573d v7-2b-022
+a2b128f7d705ef08ae91a8616cbaf40883827cdc v7-0c11
+a33e606ceea66c946219da3899de9566fb0cad35 v7-1-024
+a3552c04f4e193d981013fa4c077e49d729abb6f v7-2-251
+a36d21d4a87596abd8775c322fced6a539385ab3 v7-0-204
+a3a4be6bdcdd0f43aea2aa09288e8f515a2c2f05 v7-2-308
+a420bba0d851093bb949070895a9dcf4c25e6c4f v7-0184
+a4365075d05c40606c2ace3340e9484a6b045f32 v7-1-093
+a509e3ba61f6e541dc8772a0f9de0c38999fd610 v7-0100
+a53e7d3fd741c68a30085fd9b22d260aec93396b v7-3-086
+a565175274f6efd9d4f725dcdee1b6e049258d3c v7-0-184
+a58806285f2086c1591272962d0b5709a63a74fd v7-2-152
+a5b3a7fb6a5a0f1857b8d0eec380aa7a0f780729 v7-1-154
+a5beb9fb4da85dfc21dbb68af0fd6aec616dd1dc v7-0-024
+a5e1d6526ac7c92fcad2ae100b1d43ae238067b0 v7-2-103
+a5fcf36ef5129596fc281d76369077ad01323b3f v7-0127
+a5fd859f69f1b5c70de7d0439150f2c681d0d915 v7-1-020
+a66a49322b6bc2a82c6cc3e8092db7d502f64c4b v7-1-073
+a66c405786754105eaa63f3264c94ce134bd275f v7-2-105
+a6776e2c9f014491c7476c3a12b2b7f108e1b6f2 v7-1-222
+a686fd6c8beb2c41110e0a65f6a403f0ccaef83d v7-0065
+a711f7a6852db37b1687044ce8a96b6f48e9855b v7-0067
+a73a117542b8b5ec22eb3c61e45ad888d3d76b51 v7-1-171
+a75120dc3e2691218f3144bbc24369283d74eb53 v7-2-190
+a7c4842a0be340d06de659940f9396f969bdae77 v7-2-212
+a81bc802c17ce7002b08d2e327136e3ac4d11d5a v7-0011
+a83f48a17efb871266ffbcb3b6c9cd5a62408410 v7-1-274
+a8752f2805d69f51f1f6370eee8c7e2c89c57db4 v7-2-037
+a881e15f44d8b5888733fc98c39984c2fe6316ef v7-2b-011
+a8aae2e1d2ae6c22551400d451e4ecaccceffcd9 v7-2-049
+a8bcc7553263bb7a12eec8813270ed34242dcdfd v7-0-190
+a8caf7dd853dd5f5ea2bbc671467ab2f78989f44 v7-0205
+a954a30e407394f51218ead2a7d832e022fd2378 v7-2-115
+a9e353f7fcc48a2b603ead42451ea8e89ee7b9d0 v7-1-285
+a9e90b3356b62da552b62eb62b8dff78438f2dc8 v7-0036
+a9f561ffbc53a7097873cce7e8a8e1615ac0c38a v7-2-243
+a9f814054152b658c1b90aadf0f75428e1130cd3 v7-2-074
+a9ffa7c7db7757ae7c1ba0e7d3b990bafaefb558 v7-0-097
+aa6caa23a4b834360b82d3d078d1d17f33d673b7 v7-0152
+aa7c51f81f46cc5379386ac622a5ba44aae1c4dc v7-1-227
+aab202d244b6bb286a62508a432222d26d5d215e v7-2-394
+abff2f6a3ad7790f86e055519dcb851a06fe78c0 v7-0-036
+ac0458d9b9dde727d1bf11e9e9221edc20b623a3 v7-3-026
+ac04f392ba48436bc1b90d3d8b8d384fef4f8135 v7-3-073
+ac33b7c03fac7bf435346233114939fec2e187e6 v7-0018
+ac6d15d91466b34e4ff31765d1d1e1733f02ffc9 v7-2a-014
+acc572c5660c90020f42c9f31c1d2c776c5dce47 v7-2-097
+acfe86afd651f1abcfb6eb38ad0101e61a27c65f v7-0135
+ad8f5bdc727441118cf45678b031d04d1a77aae0 v7-2-001
+ada3271481ceab448c69588c5cf837c2dbc91987 v7-2-289
+adf6a9dcadeda32a2a339069336ebed7fe6d53da v7-0-038
+ae2251be41f935706f7e634a832ff5ff8a91d023 v7-2-185
+ae22c450546cfc001c90ca17999318e053838c30 v7-2-433
+ae7e29b64923da886325215a1a5b20bd60e4cbc0 v7-1-194
+aeac63ad9430d81a0dfdc21080f1f05cdc633baf v7-2-048
+af7afd2bb4c235544fc9da6b34898ea93d477d77 v7-0-078
+af98ef7f5a39aadfe18dd44df9afeedbb0665778 v7-0-003
+afad99b3612ca54f3668c232e8d3ef235d74c9a2 v7-1-028
+afb64d9f5b8ee1eb6e787e1d34ef8b80f15d4749 v7-2-013
+afb740b5dfabffdc759d3428254c944bd4badeab v7-2-191
+afbe4a4c884ceacc349264075afe26e93bc75f07 v7-2-208
+afc60a6339a68f659addfbbb849e249964c9107c v7-0104
+afcf9db31561c7fe2b62b346aca751bf7bb31bc3 v7-2-336
+b00bc2bf23eb62a1883318c6565d3fe0d1b4e30e v7-1-119
+b00d5f429a4b2f0a23710200cdf2a672ed9d5501 v7-0-108
+b04bb35fcd4b7edeeb8e175955a2909a86dad118 v7-0-240
+b0605f2f9786c14e943a0ab440c16b444f2a9cac v7-3-113
+b090b216a832197c70f60ead52026a53ecb0cdd8 v7-1-009
+b0dabd584b8f89ac32af9758c221e948016e2b0e v7-1-175
+b0f8f28a67c23c9e9b6b8087b373d6fb2add726a v7-1-197
+b1706a94f9f9638cc0ecb624dd7519cc9beb6ca1 v7-2-405
+b1b09b68d7069755425a2c1849f517f3f9e760d9 v7-2-279
+b1e87b7f5db64eb40fafb0e9bcbb0c39fa2bac63 v7-0133
+b209c3f94ab7ca3ff559d255c395fa013fee31a3 v7-2-073
+b254cfdd740542f5778d787845134db3c7584335 v7-3-071
+b2789846ed3978ec3dd9a91b6e1ef2f4d054431b v7-3-069
+b2a7d143abe2f572e713acda4a67ebce76511bc8 v7-3-072
+b2cfe84c96ccbf87a7c765442f0e32c62fa112a9 v7-3-044
+b2dcb84570675cbdb4fea2d017bcd093b3f34be3 v7-0-070
+b2e037ed7e33b48a1feb69174850acc393254864 v7-2b-020
+b2f4319efde1edbabcd900a63db8998bfc117152 v7-2-084
+b31702c473ae10db32dcedae94af25228d6c920c v7-0-049
+b34d985598f68b97fe1bdf1d34bf689ea1b8355d v7-2-130
+b4791bb4fbff451efa3ffdabd4e26a668eda2283 v7-1-108
+b4b1b5324380cad36827cc211a2f92fb165d9777 v7-1-026
+b4d11ddb7303ebc28f6a40fea28f003287e77352 v7-0-187
+b4d92472f168c90d60359f6a592d6461686c2db9 v7-1-085
+b515624f6d7dc7597b0b01c5cb03076e4daf3347 v7-0-234
+b54d2f702d41f4fbb8bb3d33e52faf94568b2170 v7-2-127
+b57babddb32b2df9f04b636154a26c51f78d73a2 v7-2-281
+b57f2617965fd682c6284a706a999b58f00bdc3c v7-3-014
+b5ad00887b816469ab8f7733643380a690c1322f v7-2-111
+b5c1cb6f8d565b4fa5b714660e8a0d7f8d8f7a5e v7-2-174
+b60a569eb708bc6563cc1104335cf56bb38ea901 v7-2b-010
+b61422c4dc7a81d340e33e0ddb8ce8cf0f94aec4 v7-2-025
+b62965091b8d258aaa26871ccf80ff9b4037168e v7-1-254
+b63792dadc23ed5ff4e0e9e8c7acc24d9c61e779 v7-1-120
+b63fe7400eb30f9c7b98199a21ed0bdc583aef62 v7-1-135
+b6627f01c67dd0bcdc2f24d56d0a9342cb5dacda v7-0-151
+b6632d553df3c8d25e419d62cbbbd1d8aa5d2489 v7-0182
+b686fb4898d1fd8579e5bf61f36c2a08fee85a20 v7-1-025
+b6ffc2045211c67d42d806af38dae64626aba605 v7-2b-026
+b76637e5ace1cd75c1894c44e132ea1e4fdc1a9f v7-1-289
+b77f790d53f6b57604b1ad5113da4ab08b4ca918 v7-0-236
+b7c22e34316251f32fa1034d11a3eba1829c2b92 v7-2-043
+b7c89e3e19f703c0ebccecc10ee044367a65ea20 v7-2a-011
+b803b277688037509ad1b6d30466721396d8967f v7-3-062
+b8744d1982d1fe26fc41d62b6e84fd315dd6c941 v7-2-407
+b88f0420148e5e65c2f71f47ed2324fd83b3bd2b v7-2-155
+b8ab4ba6b11018e468362bbadf077654f9cb4be3 v7-2-304
+b8c880d61acb8d5e08ae0cb558ece76d96d12341 v7-0-185
+b8ebbfa519b990d6b892dcf943576761e714c2c3 v7-1-050
+b8ed23ef6ff15604ead321f758ecc624a9d35c2c v7-0-042
+b9202c4cf847ac1898b4af225494197671111785 v7-2-124
+b93a3fc3897b3e16e96b80e35dbd72aabf9cf37d v7-3-078
+b9897545378516c8afe3140b7172d838f33e5b29 v7-2b-009
+b99303b1483f26763f0c4b6c9d244763ad32d476 v7-2-309
+b9975513fe244047a60acc818edd8de94935cc28 v7-0169
+ba2ac6b5bfb9679edffd08edef9cd0db1237ea12 v7-2-259
+ba32a005373a78e0b07972880704e2183f578f86 v7-0-136
+ba51f75bd4b514d5c4d48e57c6018c955434b936 v7-0221
+ba9375e24d4937d863ab87d28e6b7c1ed42b3960 v7-0-050
+baa5f81197c865fd8847f6af95fb1d48cea6aa65 v7-3-043
+babbc735b80efd1ef23f35dcc77c5f5cc9e68fea start
+bac7c3fce15019af25562f5c19b099c55487a6e7 v7-1-133
+bacdeee78827acbae22a7626a93318ee1919c883 v7-1-014
+bae8347a9ae1131d95a7af1d751fa47df5d3baec v7-2a-015
+bb3661a2eccc165bd5d2a87a8d4696f89431a459 v7-3-116
+bb4797166e4c610516eaa16865682ab14411ecb5 v7-2-064
+bb7a0b90100aae1f77748f6f38aec95520825c3e v7-1-023
+bbf0ba46e51d5a4e58b872b840c5dc3e1ca44234 v7-2-116
+bc3f88ca060d25cad633a20548ca38cc529fa0ca v7-3-045
+bc68103ea3f6a13d26598bfc1958a57eae377a92 v7-0-040
+bc7ec0f1f7f35c3b58b3e32bd2ba1b87501b17d9 v7-0170
+bc95c6c4bac13d4a0f8a4bd6ec10f495d3fa5eea v7-0191
+bca50c9e1374c176a63f9baf0ed7fcb34ea16967 v7-1-147
+bce687811199a7866c7728b09f00406ac1294745 v7-2-287
+bce7c73fd56da29730fff999a1fa4b0edea3285c v7-1-157
+bd7e26d05a3fc8e010566ad8f8aea9c31ddf55c8 v7-0-034
+bd94e22dd3db36f07fd31b2e282f25ccc7335f58 v7-1-163
+bdbaeab157e6f88d82056df6b927acb5b342ae01 v7-1-272
+bdbdec22a225553f5d78db019e13cdfe92b9cb5b v7-0161
+bdcfe793d49fa832470953794583b4bb74ab9fb6 v7-1-104
+bddda5d8caa1c6bf174c5e202d3b08a51dbd54a7 v7-2-210
+bde3b38593f9d07da76cdf37ea574fc9d80aa43e v7-0-052
+bdfbf8ef447a4fabef09ee9d28eedcf0e6b99e57 v7-1-249
+be0f21f63d2c9651429a6ec9e97b8e6e9d0d102a v7-0091
+be1d64f82db26bf7892605332aea6126d6343e47 v7-2-325
+be8e2719caa6c7194ce4713206da6f1f8db694ca v7-0-138
+be9fbf8b0cdb6a42c07a8be94e9fba866cff00c8 v7-0-146
+bec979a53f47ff6866d390eff6c4ddd4d5ce8a8b v7-2-307
+bf5ba8a0cdee590c0841391f9a8b65c456ed06bb v7-0129
+bf63a31b77017d78197bc0155c0ec59e31559df3 v7-0-210
+bf7803d0f5b9d0a9cb16636b9490d723623c57e8 v7-0-019
+bf9579ab26e59cda4bdebcd934c43b6fbded60ce v7-3-019
+bfade53bcafb7b6d297f23ce3ba9e6a72dcb7949 v7-3-087
+bfd69bfb41491b83ac7a4b948c649eaec251c54d v7-3-046
+bfd8935d62009b625c37dc373404b67d0019d7f1 v7-0087
+bffbbb566d6b1004cfe26df89e102c465bed4312 v7-0-192
+c00efaa0af249c086557487d172edd6a1cfc0706 v7-3-053
+c050d5bbe79b6a0bd83fb5dc0c13c350492c7c4a v7-2-063
+c06c658691e20f22ae95d4cf117057c7d0736308 v7-0-087
+c0bb3c1dd44695b4eda074afd1a7394d2b7e4552 v7-1-132
+c11845a465ae63ea7f9942484988dd4e441c891f v7-2-370
+c12f39141bbc7c031b51352896a78324ad27398c v7-0053
+c1709e3f8536100dc87defb9f788f895b4e73578 v7-2-140
+c17a42da3920c34a75c17fe8696d2f04bf683f24 v7-2-428
+c17ba3fb433e7cddfdbf2244b777550970493b0a v7-1-106
+c19f6b8d0393dd28a2673da19e8acef59d371f65 v7-1-304
+c1b61096e3d0e4383db1ef01a5dc2f3ebd5eb0fc v7-0-074
+c1f67ce5740adaa7e1e164d706f204252711d5df v7-2-382
+c21975c58b4497d08a2fa30601723537ab1f03ec v7-0123
+c22ded254d0591df640c3ee0ea3dd0a490fa2396 v7-2-071
+c2cae213194d26214a9132c1ec7cddbdafd18175 v7-0e07
+c3242ae88ef1d4cb6eea51fdf96670cae48fc64a v7-2-081
+c3242ae88ef1d4cb6eea51fdf96670cae48fc64a v7-2-082
+c37ed44f014fdcb211ba3decf81d1f3ec94a210b v7-0-153
+c38cdd201cec8e9a774b7256a5eadf2d7194aa0e v7-1-059
+c3b5d3fe94046702944964c32eea7522ecf92c4c v7-3-020
+c3ba2dcc4cf4b96ddd1e3df9beacd1e11abe7868 v7-0-214
+c3bd0a84e11ad1caf53402dbebc39ea8b01fc832 v7-0-167
+c3e225bc213a1a91a278fdcb3c5fc003ae886f02 v7-2a-009
+c3f63ed316b621743f44a5ab6b9a5438b88feded v7-0227
+c44058ba78bc108e98fc15a14756716c3d3241fb v7-1-141
+c474f5691c0c6461414e65601a97e817e976099a v7-2-164
+c4d200412ae9b66732f2c9be98273802a0acdb95 v7-0121
+c4d5f3d8ad71c4d30397ca0101a89925f1666df8 v7-2-099
+c50c82c5e230a9ef1cb570be0a57d3dc9e295993 v7-0069
+c50ed526966abc52d825a36d5114bebc21f850b2 v7-0-220
+c51a4f9936751df0e9bbdc454727bced532da3c5 v7-2-255
+c524f99c79251a7b614776a5d064ba40c8d4d5cc v7-0022
+c544a3507e839f3ad4db6e1d7dd7474ed0167b96 v7-1-066
+c5871806d7e6c121c80030dde025a96c0ddec820 v7-0-057
+c58b9479e304ff055b0404d9d73a51da4e9bf7e5 v7-2-315
+c5a806b29372c033c3b616083c86159a8719635c v7-2-306
+c5b05f6de1adf8bf800da0bcdfa04a262e0e8329 v7-0047
+c5cafb21c45b5e1e16c006056dd5b8f5ad91145d v7-0-096
+c5d5e0f3403f65e77307d1bcb5d71acc73cbc90a v7-0-120
+c5e1b4b9016ff900a005057fd1a055c70b812414 v7-2-047
+c60d231453cfd59c8b313a894027cecc0a4315ec v7-2-424
+c6296b0ad9eae4122e31dd3b4f363e073f388a38 v7-0151
+c649cc22da98e2eee72352917030fc6068883317 v7-1-060
+c669f3280f595ba6133a94d8ceb3ed3ef6c2a4ad v7-1-324
+c6b06a4a8f928b1868a3d48d95293730262a041e v7-2b-023
+c6fe65c000d27b9ddb0cbdffe43cf188b7a51f2e v7-3-037
+c7537662746d8bae8bcdf8502a23a573a54d3855 v7-2-186
+c7654c4db8fd57c397bdfd3b3142632a4e761f32 v7-1-153
+c773cb978acfd216004c871e883d2b31cd4cc0bf v7-0116
+c78d973dce9e0456b96725f55b853ecbe4ebda96 v7-0211
+c7905d03c72e74540d91b1ebf3fc9cfffc2ba699 v7-1-273
+c7c53db66b5521d2deed3b889fbfb13030868942 v7-2b-019
+c82bb7ade452d18a121a6b0b8ff654dfad30532a v7-1-137
+c845dcf7fafa91d8cb370f690c16748758b20332 v7-1-110
+c8568bc2db390972c94374a031bbd195c4403ffd v7-1-311
+c87ce0b2ee2a14d3daf3902bdd4163a002ec7a22 v7-1-190
+c87f38b71d27d9e420e5947d4e99eba9e3eb2e19 v7-1-070
+c89903e16772bebee28ec935f7459c8c83bdf05e v7-1-223
+c8b6b7e1005daebc2d72c578d70b455f42b5bd16 v7-0150
+c8b87fa14d277702b7ca6b9ba18470c3d64ad83f v7-2-179
+c8c47cc9dab1eb6976b9c214c58e65beb3a45e97 v7-2b-025
+c8cae82dee305d003f809d91025ed21582785597 v7-0-061
+c8f343a465a271cec752fce3efdf5fa8476d3c96 v7-2-180
+c94bbf85eb160aa9eabe33b13b267c1446019eaa v7-0-213
+c9b7b1e711d194070184c9c198fbe8126701d1ee v7-0-235
+c9ddc2338f41c43a30044dbdca1775b919f80707 v7-0-058
+ca4883686f934bb338dfe3a2fd7d6d3995c3e0e2 v7-0-088
+ca501ab2fdb3a4477a6b8e469c1a4d8f1859d92a v7-1-170
+ca5b52e99385825f0083c4b122ebfb50c2653039 v7-1-255
+ca82de29ac1903bb1295c04da5624cf295b6447c v7-0g01
+caa550fe445725dea9531b9fe9f0d0f88961baf7 v7-0-191
+cab25717c6a69a7d9ebd010153fd9be9529fb49a v7-1b-002
+cb49fa8c71963b7b69529dfc2abd00b791119fd6 v7-0-126
+cb6487d683f2260fc0b47b5e95f78a297360b1fa v7-1-216
+cb7043482eca744ad9ba1eb11f08cc2906b6bd3c v7-0-149
+cb94c42c0e1a1e00f643be8a96939e42c3afff81 v7-2-445
+cba9c4003cb554f909fdb6426b8870bef24b3edf v7-2-085
+cbc9c335ddb17f9b0e9d281e1c5d97a20ed4fd94 v7-0-119
+cbe70f2e756d80015f6f0057e13a882ee7567276 v7-1-259
+cc03a79fdbb9315956fc22887483a15b414278ea v7-0-197
+cc4fe241baa3596ae9cd27ce65ad25077bfb2e71 v7-1-236
+ccbd8177e1f439fc23ef56be942ab0253d5dcc26 v7-2-132
+ccc9eda1cfcf918fbd1933bca9db01e246d5ef12 v7-2-138
+cd3689efd90a5934dcf2e4e232d97939737414c3 v7-0173
+cd3f52531f6c8f16e89e97f335f974fa25f4b498 v7-3-124
+cd6175cc27d9c8b4d4f4dadc7c38f6c490f3fa62 v7-1-235
+cd7eb2a18060734504ff974065d6a7adfc903b34 v7-1-041
+cd9471bd8e9eb1d2c59d00a7d18dc07dd97fcea6 v7-0-047
+cda8f3aceb85c72c94498120fa171939b83cc8a3 v7-2-120
+cdd82acd75b449784a574058387449096667e56f v7-1-125
+cdf37c8f46163497e0d7fabf9655be37b692fd1a v7-2-008
+cdfc3897c8950aa84c84c1a05158afd32ba71d06 v7-2-222
+ce2181d14aa08a59250267dbec36bba362eeb908 v7-0139
+ce6bc4bf2b87f2303bf47fe64ebdd470711973d0 v7-2-244
+ceaf71b15d813665b3b02036a619bc967db90d8f v7-1-177
+cec8b867838bc2a5b5f5bb0146010060639fea90 v7-0-114
+cf080795d202ac2ef02d282f4aec111b2ec126b7 v7-2-135
+cf0979c30cafc4fbe239ebb9de3c427a265207a3 v7-2-144
+cf4d73a8924e715fb5fc7db94af9a7e67d7643dc v7-0-095
+cf83dacfa25fb1fd8d4929ff2abe871c72ad94a8 v7-0105
+cf8f86128f4c428af72c116cc53d92ad7c1e40e9 v7-2-435
+cfcc1421f5e431d3984c3e9ef3f360ceafaef76f v7-2-146
+cfccbe492612c69ee77d6cca4adb690794e5feac v7-2-126
+d065616e083680035f38a54409e857ebc2202db3 v7-1-146
+d06a461924a3f92575d81c2d1c0c3a74cd0a2929 v7-2-322
+d0cf8c843186301d546870c2661cfa3e8526b3e4 v7-1-100
+d166fe2bfe7438b1539cdedf1810dc91a1cae01e v7-2a-005
+d20d37ef86c8844da2c9c45b2d9fc8b6a2dc3f78 v7-3-129
+d225695aa7945c27e1eed207e3e683b16824ea87 v7-2-282
+d23a400b718419e039eaf4f8ce23517144d41faa v7-2-019
+d2612392202f9b87c122b7233b0bbc67c9edc004 v7-1-004
+d2796c60ca6f11e05cbe080114a3cfc6006488c7 v7-0032
+d2a4f08396fe8c01ebca988db5eb95b7c3f9db8b v7-0f05
+d3571ca62cd6a9138b0aaa4673b09dec78e540e1 v7-2-323
+d38420e2fafe99d58b915213b73f8d1b8c7848d5 v7-1a
+d3bbb5dd3913b6425ffebd18b232fcc2d1907046 v7-0f02
+d3cff90680f3f985c21e34e03607a5808ed4dcbe v7-0-144
+d433f43849ba1dd0006dbc4d794cda3502fc24af v7-2-332
+d4b1aca2e3a97415460ba21ec81eba2218cc0be1 v7-1-128
+d4bc24e6a28144ebb16f143efb72ffdd98bbe0fc v7-0-156
+d4ea645c77489da3d5f0f0f48a14bb63793e1505 v7-0041
+d4f3db33d782da9d33b2715fbd14f5acac280ce0 v7-0037
+d51bf80e8fc9b1048c93bd26e308af7c250ef629 v7-1-045
+d5681bd2661b3e75b506a7d6ffe8bd053e04608b v7-3-013
+d5867fd6b2b72d8095795f4db9aea88035e49e5c v7-2-330
+d5892839ed90bb1a8f9f1b3ce88bcc205e7617cc v7-0156
+d5ec1b42ceb06062f03d828acca852a4ccfbc7a4 v7-0111
+d607b48414b79e7cacccb66391683b23cf1b2cbb v7-0-099
+d608343d25e6ce4b1e6435720c48762501b0fc7e v7-2-197
+d66394147eea6cd5b304fd2b78e5dde46fbb1b02 v7-2-136
+d6a69271cb9a787af6b3a05b01275c9694a144c0 v7-0194
+d6d6ca94371317962df5d92c9b879f7602d3e234 v7-0098
+d6f0d3db1c641e451f9cb0d0697f1b18939d6cf7 v7-2-087
+d75027183cf4b44b2a92333e57b9bc3fe2b2f5dd v7-0-230
+d763e7d7e938d8dd3887b7279b44e3a857285d38 v7-0-189
+d766b2ba2fc6d5b6211cd10d90236dfa8479d617 v7-2b-002
+d7860ee7eb7ef5c27d45c4569107376d3cbdbdef v7-0207
+d7ce3adb8dda9d7acf8aef39cda0b936ce3f3d15 v7-2-362
+d7e33248b9c80fb5c1af5880d6c6a4eb507de990 v7-0206
+d87865573d809129e6d25071cffe8ab451ea2db2 v7-0-041
+d88bdbabfbc6539ce6cb149a3e8b025740a7f351 v7-2-109
+d8983769c9ddbffc13ab427a5e44693070d7788a v7-2-361
+d8af28dbfb80aa6c6248000b011bc9df6f8f337a v7-0-152
+d8b9701a3b7bb58e3f7f2c72145a0dfa33501f31 v7-2-193
+d8dbf7d55c5e9ac3e345eb1b2b86986be3582fdd v7-0-018
+d8e7b6762aaaa48f6bb72b1c51d535119e79c379 v7-2-096
+d8f905020502b0f35d810f27b4d5d28689bb7764 v7-0b
+d9030055c432b20797f883c956f094416e00c622 v7-0033
+d92358c7d6216ff56093067384eb7d96ae47696d v7-2-238
+d92ac5a199fe88f1630678f81e0b47d5f3f1a921 v7-2-196
+d92bab35a16720d2b4e3a2b836fd68df0ee00aca v7-2-234
+d94c322508140c4cc0d36364d994f475aa84f8d0 v7-3-075
+d95676480093879730aed5ba678e3e8305977a4e v7-0-067
+d97518d6b3257b4ab48aace82f9197bd099ff758 v7-0063
+d976f4da2a4d56ed9b59c61f6971ec0cb18c84db v7-1-264
+d982226b7aaaff40647eaa5ad05e01538e90065b v7-3-023
+d9cc61139d12c315d790d79890402ef957be00ff v7-0146
+da0991871b02a5ba7bce7d3c1180d01d50d7646e v7-1-017
+da1d62fe5379f77a2a165e40bf4bcad0466c60cb v7-1-063
+da9142bd190a5ee0e45536ae4c2913be5bdb02b6 v7-0149
+daa1e34570ff649af9d7b64a447cc6d2c0b60e38 v7-0-093
+dabcabce3f9d67ee2cd22246ea16769513982910 v7-2-419
+dac5006b4443f99681d2068d0af065bec10d7a99 v7-1-162
+dae4cd29a0b7d899201c2e6a10f0441e7173bcfd v7-2-347
+db3ca1048f7f800fec81696d29ff8a7a3027a64d v7-2-320
+db44f7b81373a02990aa6030b85024478b7d82bf v7-0f03
+db83098657947521e0e797662c135516a4a300ea v7-1-123
+dbd226be80b18c494f4438045d34b65530dcc198 v7-1-027
+dbef8434a2ea19482b3ba72b428c57dafaad29a4 v7-1-329
+dbf53ece2e23fd6e8652c531ce7976f54ae85635 v7-0029
+dc8197342755fda6ca4d6619dac228406867a7ce v7-0d04
+dc81a4fc63185c72c940e8ade45b5e1534523351 v7-2-143
+dc8a5699253b833ec796460f9ac877d02ab7b165 v7-2-406
+dc8ee74574f80c7eabc90ff7a3973f882993cab5 v7-2-444
+dc948c8dfd1550972011e38d59b9a8ade5a000c4 v7-1-019
+dd9db57ee7ce46bdc86cd787fb58907f20c0a973 v7-0118
+ddafd2ba3a863054041f2f71248f0ea91fc3b1d2 v7-0-117
+dde812fb22478c1fbd34d935ec466b2cd9869da4 v7-2-437
+ddfb6f3f3b2be6e5397db2601f392c45f4a05b84 v7-0-012
+de0e7ca61893d31a4a5ad8e129691650e31477c9 v7-2-427
+de8224965034eaf748c4205cc2a61e097b4aef90 v7-0-063
+decce137e7beaa2edbfb4783d1cac714c7d84d14 v7-0-098
+df6967461cef05aa96ff708863d380e9d15f3bb7 v7-1-065
+df6b12c84b2359415cd987c016f5de135c680100 v7-3-047
+df7ceb64b0c65cc5ea525f7df25ecdbba80b0208 v7-2-137
+dfcff6590aba6d93a69b414759b164c255fda08f v7-1-238
+dfd5dcc73daa3934ff1f47d6d53207de2f9034ed v7-3-067
+dfdaac31aa5df021b444bc2ba64307709d863c63 v7-2-230
+dfdaac31aa5df021b444bc2ba64307709d863c63 v7-2-232
+e038754d419a3ab5ec25d014513bf8773cb9459c v7-2-408
+e03cb9499b83f972c2bdef503b1faa15481da81e v7-2-015
+e06e177de52ae555685a6126213dff168048fcc6 v7-1-305
+e0e0d1ae601197ad22eaad3b721407a2d0cd6294 v7-2-318
+e1070b3b03e9b1490157dce8db81b026460aea35 v7-0-081
+e10d3c07344929c21377722bd3c66d3c54ef582e v7-2-423
+e12f574898a9b21e39af38cd57e50ca87ccdea81 v7-2-272
+e1336150cfcf7e64f66563629accb1cc84fea036 v7-1-089
+e14d0a530351fe26450893977197e81e9e9ae5f2 v7-0-177
+e180933b876a74ded043348c0cff4fb209d4d92c v7-0219
+e19ecdb13f34ca1ccb3dd3c382a08423c385e847 v7-3-080
+e1c7d0ea5dacf4184cf49c3d05d6ce77d944a367 v7-2a-002
+e1d77e652cb7f9e84072f16b3ac6dcbb73a1fd81 v7-2a-018
+e1efa991c2b6992bf361cb432895749fc6b1109e v7-0-106
+e212d1a40ca9638a4b306013d54417dfcbe9d8ab v7-1-243
+e2680bc6a18024d68ce8100e21d4d307dd647aec v7-1-011
+e2d7622d70894e506f9c722bc8ce145521d098b7 v7-2-106
+e2f5c1597829256cfd784681163c232bf907f1c9 v7-1-092
+e319a4fe6e32e0297f1be2c1a8c763f7f7b26cd7 v7-2-378
+e351146e7974acd49f2e9aab749f31670b2c6044 v7-1-116
+e44523d45bf5e276817b7f1f8987f2a8ed3132b7 v7-3-125
+e44efb3af0d58fc58a392e58c604bee91bc52e2e v7-0-060
+e4fa26ce87694c7d810796d41d0f03981e500d1d v7-0187
+e5145ff9c9b0dd7b29154c2ffd220988737c99f7 v7-2-285
+e5602d92da8ccb4822917b2df3e6099344bb4ed4 v7-2-177
+e625dad74346d76132cbcf6ddf98b95d2c8fbfe5 v7-0-113
+e6372ac3ebe536aee65848e52e58fc817697b98e v7-3-063
+e641c7a27c470de82019d313a158a9894e0befc1 v7-1-181
+e649c78407e600ab28819574efd7d2d67f066171 v7-0202
+e65e50609469f1c5d98ab7396803fb697a78bc17 v7-2-219
+e68d8541494dc36b5778d9eda2814014201b0335 v7-0228
+e697bd3c3876c27addb414ae170d741aa1eb1917 v7-0075
+e6a8d55a1626baa2e38837b0e7a4a6bc65783623 v7-1-178
+e6aed39f12648124b0b4e23c669cab6ceda2ea1e v7-0-158
+e6bd96f2d7b81a8963c9c8dcfd9e2b3f08a9f0e4 v7-0-017
+e6d25347de2cc7f7632cb0cbe5adef45d9712aca v7-0-182
+e70aad5761b59933a1f69a8756457fdb3a9aad40 v7-0-069
+e70c0d863e0cb2b26f16acd17ead7ed267faef53 v7-1-022
+e72e30c69d582a55cf3c4836aa274a006a457fe3 v7-1-261
+e73f2978bd4061868337a25ff09c3c84b54dd2da v7-0f04
+e753954c86e2ce32648d9b12c3c135c22748f75f v7-2-237
+e7633eb32cfd9cd631a73f4d412272506261b427 v7-2-098
+e76a088056dd38e02a99daec0741aad6f32a24f8 v7-0-242
+e77e3c11f5076d6eae8a67bd2f531f72d33eed7e v7-2-331
+e7904492cb75b7a69964c331945b261cd4232a7f v7-0071
+e7f6ca5594cf9c6a3902458e0635bec7a7c40d87 v7-2-149
+e8450dbf6f031f2727798a7d955e83dda7ba0288 v7-1-086
+e856f9cc2aee46628ecb83351489d4f41d66c6c6 v7-3-064
+e88950f0d4f699846875e45dd3887cbdf92bc3b9 v7-0-084
+e905716f6a3aaba3c0ba1d18093d4f4f09550524 v7-0-090
+e943e5502fc9cc439294de385dc564226b7311a1 v7-0050
+e9624acb93a750d835c361c08bf3e78f587f6510 v7-2-028
+e965cf54d887eb9bc20b6668d83541992cc4e8a7 v7-2-157
+e97a97d6a0eb98b21bd068283f192e0a2f2b1a89 v7-2a-004
+e980e93d2ac2c7838acfd45fbf2de06939c929bf v7-1-186
+e9c9f37be3066d64d7d87d1b314b2913d0d751f6 v7-2-416
+e9d018b58830d50906a81e1b1ddbb3e2bdd9126a v7-2-107
+e9ddb2181f063b67b3075844b4aa7359db5750be v7-0155
+e9e3355861ba8785dba619e2358a239a9443a580 v7-2-342
+ea15087a42cd21520e628faa3c53385246c04743 v7-0-085
+ea1a2950ed16f441f66ba319615d47f1ac67402c v7-1-191
+ea399ac2c1b963b068beed88bfaff7620d345333 v7-3-138
+ea9f418ed072f45fc1cb04e455379e3db1c0f182 v7-1-215
+eac2556d46208785a173d44b4efff339a7e2fab8 v7-2-215
+eaecfa88c2469471804768932f823f5b264dd0b9 v7-2-148
+eb0504d00480ca6a7758bfa35d64a09b3d389fca v7-1-250
+eb1ce51c1cb0dc7825570f7cf30b0e2c3e9749c1 v7-2-129
+eb27e3e2df706466ccf9bd00e407d2d3419a81e7 v7-2-265
+eb4ee2010aae8f4361054eb367a7b13dcfd738c2 v7-0-107
+eb531146be0ec6cce1187568cc841718df44a296 v7-0114
+eb57516376d4b43889fe43594048f183af15c31e v7-1-032
+eb6fc577c96c2b5e322ca3760fa4e9c043ba5a8c v7-2a-008
+eb800128bd894e9b2c661627d2a302344162987c v7-0-092
+eb9cbad50fa34fad2b422758d6d814059aa89f94 v7-1-313
+ebe059f69b9e46ada2c6e02b3979e31d1b11c906 v7-1-296
+ec5ed41eea2f1d83df5a2507ab2f469fadbbfbfa v7-2b-001
+ec7a570696ac0e50147e2419d8b269ccfb75f25e v7-0-199
+ecc637a844592d48cec38bd795a17ecf6e0253ec v7-1-114
+ecee28dd16d25024fe584cfb8cd0923f1184398f v7-0213
+ed44c1c436d3d61a94062c7a781b77dabeb8ebbe v7-0-100
+ed7fefbef738386c39248b501556bdea80d0f8b4 v7-1-276
+edb3bc186e97a3392b3aac634526a4f4f84f4011 v7-0-020
+ee41e031dfe14ebe50c289158213f05eca869bb1 v7-1-179
+ee50cd1a303271c6be6cf6121f50c0abb8772dbb v7-3-088
+ee9d2d24ea9bd0a7d500f1c37cbea802d8d1d88c v7-1-231
+eef96cfdbbbebe5aa61b420d3eea31c3c5b6d719 v7-1-314
+ef0fe6201b843f699b3ed7483e52eb3348ae5b11 v7-0-006
+ef2890033e88391e92eba7d1ade8a43e9e200abc v7-2-337
+ef3a3ec8940cb0c55d35d2e5fe924a09d6815f2c v7-3-070
+ef6b11bee7d06a843474888d0bbd67d14dd2065d v7-0-181
+ef7fdb3c6927725abb07731a46ab78404ad4c7e8 v7-3-105
+ef886129f0c0be912c7b6c21e695bd9980d31210 v7-2-088
+efd0ce477ae789445312ebb08a0f78b835dd6f5b v7-0-194
+f012c4ed8c38499ed2901d139f4409e2edfe51da v7-0132
+f016c3708ae32436ab545762a1bfb8ebd31af975 v7-3-106
+f018c759e4ed5e1a851c1353c118883efab6a155 v7-2-274
+f04e890524be4a82ade7526f62a967390d3f1cf1 v7-0153
+f08390485cd365abce88ade8987e56bd267cf3e4 v7-0210
+f099adbff8871627d897979b432d74ad1623369e v7-0-031
+f0b3b9ac2147350b1d1fd762cfda0b3073b0bca3 v7-1-161
+f0c598082dff6f0332c9af602b5b4996bce01ff7 v7-2-104
+f0cfff4dcc2f7cad78ce86aae0f4cbd3371ce46d v7-1-283
+f0d6b2bb1093eb12925cea635cd58de0594c422a v7-1-245
+f10fe14748e260eb0d8bfe375cadbbaa0e5ceeca v7-2-055
+f12d38ee49de595d11efb50674bccfe0417c7063 v7-1-006
+f138491673309c018ffede08cd4858c3bf318dba v7-2-169
+f13a0227fb8844e591b6526e4393c8f93dadda29 v7-2-305
+f14cbd913415ac4d6a9968dce20a20291f8c0d05 v7-0097
+f14f7aab518707c29a8ffb75a4e8217de58dda91 v7-1-212
+f1d1214744679d401e17e9ba97ecbb6255696ed0 v7-1-287
+f1d2a58883b96144abcd5b44dbdd190a67b3eb79 v7-0024
+f1d46f94824128251d1212cfaef0b1bfea4dc71b v7-0163
+f234c87ac7e9807004cdc559cf68aa5e04850f5e v7-2-248
+f26d0c74a329cceeed80a7985f5efb5662064283 v7-1-039
+f2927225367a3ac3fbe86d6d03ebb7a526072ed9 v7-3-039
+f299f0bf32d76986d5596d279bc0733cebe1942b v7-0-211
+f2d46e4a859d0f12f12fbf332c40a717dd07df14 v7-0068
+f30c8ac7741c82503bf897fcebc68f199e5b0998 v7-0225
+f339305875fa7cd21cb4d42619f5b9789a027eb2 v7-2-229
+f3669fbc9a31512a0b81fe7f647b935243a76520 v7-0-109
+f38283ce871c19cb82b1c4d364fbc3a242c057bd v7-3-131
+f38b7359dafd1f168a15698412d266c17a16520e v7-2-102
+f398e0cc5b7a032f327aa2f33b71c3bb6a22d46b v7-2-349
+f3abb6aec8c83ada21d56b8be4ffc6be55ce39ba v7-1-048
+f3d3545d6bf6405662476b40e019044b880d8f81 v7-2-058
+f3d7fa7dcf634b669a7d7859bcc39796300346e0 v7-1-035
+f40f1a8520ffaa57ae73a720c179780025aacd64 v7-0c01
+f41b6108e46b7cb3794b2a3680f2ce91b402fb21 v7-2a-016
+f41fa84cd738b945ab34271a92f44e0d1445dda2 v7-0g03
+f455396f3c3fb524ff1082cfe2cd7731f67877b0 v7-0043
+f49d72bf9c5c425dfb8bb94c6bac975716e3023c v7-0-124
+f4a775df722b13250c2b9e6f1154c31ffd9b211f v7-0145
+f4c7b5da017adf78554a240587384823e58ba80c v7-1-012
+f4f8014d516e9b9620311aa2bb7a5a2d5749f451 v7-2c-000
+f529edb9bab3de35ca7451e4d45cc90e9f7aaf81 v7-0025
+f54dab7cebabe6aa275dd6a379b42a15c365af0a v7-2-280
+f55897d6921d622ac2649e4c94ddb38d121c2832 v7-0026
+f5bd6753cdc40733c903090cef1cff033942dcf7 v7-2-440
+f607f15ab091b6a51b0546db6a6d42adfa599c3d v7-0143
+f628d19361d9812a1266baec9f76d60c798f92d5 v7-0-195
+f637471a3607a43bab09a2b61913201a5100e636 v7-2-192
+f66abfa335bb76d20f2a375f148fb7705bfde287 v7-0-170
+f6c72dd1962a46aec26c7caac6f1c3789321e91f v7-0-030
+f713fc55bf7b9a5cbb9ae3628547a78f4e44bcc9 v7-0109
+f765f9c139de3555cd181bd4fa8de50d4aaf41c8 v7-2-158
+f798c90439866d3d29eb0fa460d51e4de26f27d8 v7-2-224
+f79bb032002565143e3392cca0540216e7f93e28 v7-1-241
+f815aad6c05549bfa36f193dc57b1f03d646bb79 v7-2-343
+f84061aa57e4498f15155a4a30da40ea07be84e0 v7-2-030
+f85fe1a05c2ae4c03994c9ea2eb87da590bb3214 v7-3-133
+f88008797313e07112b8c4e549dc2217747fed98 v7-0-101
+f892bda292a89e7592ccee5fc0e296659066d7c5 v7-0198
+f896a7dfd47d15f11ac663f132fa2c5aba91c829 v7-3-052
+f8f35d8208e6c242026dcedd8300b82f415fc59b v7-0-179
+f921368d43c3f0b9b32f52f881e7e58242489bb4 v7-3-093
+f927ca2cedb40441abcd9cf5e18cbde2863761b4 v7-0-226
+f92bb184582321910573561c941167ca46b9850f v7-0101
+f9366d458bd09b73aa46cb202c7c6329e608bf0e v7-0-217
+f959cda54600f8d014cf3a3c69285c598985d828 v7-0-027
+f987220caa57c4d13b64fcfd24cb4bc6a156bb00 v7-3-094
+f9bd6784f393aa771d497611b75a8623c20a8269 v7-3-009
+f9c55e12835e88f072c46b20ac9dac25a46ca839 v7-2-218
+f9eaf0a9872df3ef8610d3fae404231447954d5e v7-0157
+f9f6e35c9f00ee6ee518069ff2bf0f93b635b8af v7-2-005
+fa07532e69c6eec9a6860ef1362f1d8187b8244a v7-1-193
+fa5dee44df3fd23f96090d225dc11dbc4de7bf20 v7-3-034
+fa7e62dd58d779149c96570bc8943f1a1b035e3b v7-2-364
+fa9ee618000f51e5da6c951f24c9bab78f2bb428 v7-0-110
+fae6fb779a6be78f2609dac4fddb8da508735dc9 v7-3-048
+faf4b09c396e8572e84eab84eeb60ea0f3785529 v7-3-097
+fb1222c880fc037f9b76580423c5a57c74acba28 v7-2-344
+fb60c9f35517660092b161abc1e4aa17a7d0ac05 v7-3-040
+fbecb12e37f5b1523aa8e6ecc07ea6c07ed65270 v7-2-131
+fc0c566b91075643f259863d171bb253703698bf v7-0-064
+fc2ee817dc9861774c31bbe768cddcaca4690e4e v7-1-328
+fc42d9cc7ad054a21ac8bab2584732ebb191e5a6 v7-1-258
+fc89a4f98a8b2e51dcdd380a7eede9dbc5cd1282 v7-2-184
+fc8bf5d4051a1c13085db00c902092215ac9852b v7-2b-017
+fcb916bed51a5ae096a9f5f5f697a909b2062040 v7-3-055
+fcea35e2a41fdc928cb92784a4405b4fd220f560 v7-3-112
+fcf44bf1218f63d94e1807c05f470a4eb87e61a3 v7-2-209
+fd1b3406fd1cbe1e7250c95f7b30604d7e46b2d1 v7-0d02
+fd24e02210c9c05b4035ebc717f25ad64d20470a v7-2-276
+fd3346e3ccc02a11f0c2fa9c2c7351b3cead3941 v7-3-082
+fd68db1a72b5f05cc5e586ffe89a10ec6930005d v7-1-199
+fd8864aeb52aa72333573d62f0a9913b0d3e8c8d v7-2-373
+fddea6c03deefda18c971466e0688d196a62fd6c v7-2b-004
+fde086181841aa124af8a38b5c0bba132de3ea94 v7-3-002
+fe26299d6f7015c324bef3829e9ecdf7d08526df v7-2-239
+fe3ec5ea62f76a623c95a2a4bcc0d396c83488bf v7-1-303
+fe4ebbec775a55ba5d9bec6070d8d87dc28138f9 v7-2b-014
+fe52f9888eaaafda72e6f37610327206383ff6a6 v7-2-034
+fe7db192c7cc7ef3d8cdc6bbd8680833338fd7fe v7-1-299
+fea3207b800d97b802892d8edabd1d688817249a v7-3-096
+feb9b421585385b226b4adb98e10f33972068846 v7-2-042
+febddd8d11b0f8f48e3d3297628fcbfd9f427b19 v7-2-112
+fef4bd7afb263aa411f12ff13dd1d12c88ad992e v7-2-438
+ff3a304b4ac2f672e8cc3c60795f0c79c5b191b1 v7-3-066
+ff5a4a71a761f859af81821d340ac609d9309083 v7-2-156
+ff77f541d69df4e538f7db4879eb194378c04458 v7-1-252
+ff9ecf14efe3e2373f2b28fc3e32db4fe19e5ee1 v7-2-203
+ffa17de19445569ea573550eef332323d83e70bd v7-0-016
+fff7028d50c8a44a6285ab23b451d975764b8bd5 v7-2-296
+62e8d93241cd15962f895da4788f21b514238b14 v7-3-142
+632f43801ddb568f872599499fdcfd9522f8c13f v7-3-143
+322a5c8d392bd47ceebd24cd21dacf70409fcc91 v7-3-144
+329a9676040c3182f78e2014322125f8839b5cb6 v7-3-145
+2bd574a2ef1c0ad487a0673a5867b09cd332d176 v7-3-146
+55fe8407514f5387ad872a338d77f64a2ad4b5f5 v7-3-147
+d67916de812ad684718c02e3ff93455ce577be81 v7-3-148
+7f937a04cdbafd7d179b200f75e988408f8caf3c v7-3-149
+6146c9859f6558d618e950fe702c11e41ca21105 v7-3-150
+f169a51f7eadf9a07ed95161143e6209387a4f34 v7-3-151
+0f7f66682a5563c76ab47e9976fd590d9423a013 v7-3-152
+d0cae598360945a425859bf8acf22923c29501f4 v7-3-153
+d72d709f0e18c309069e42d3d7865d68db9e89d7 v7-3-154
+5747cd65d62b613d5060254849ed4bc1e1e5d714 v7-3-155
+7fb8cdb9cb25e1409abe45bba959f5f27608d713 v7-3-156
+9a98d8562637d4c90439125a14224a3403d8bee3 v7-3-157
+b5f774f159274af375455f32d628881c027417d1 v7-3-158
+415c55534d901aa4617bf584462faf0c7198e07e v7-3-159
+c5e47b752f07a95534bbfa83f031a58af67054cb v7-3-160
+25672ad7f377341ff1de9a0773d8cfcad1d37883 v7-3-161
+18ad854f5dcd0ba1700c73b03677dbc88b9844c3 v7-3-162
+e8f012b00187c5a957def85bb3c6f0430f20fed5 v7-3-163
+cdefcbb70e8cdc1f7185f1023d3a4660d30a074b v7-3-164
+e92a4b9b4484d1c07d930719ab1370fcaf94d3c5 v7-3-165
+5ddb68c2a845ad7941d1ae7533a81c12b106dffc v7-3-166
+0a0d7961b4fe83151b03d98ee904ea7038f64123 v7-3-167
+930b171ce3fc9dbca3f9da6bf883faa725593c67 v7-3-168
+5f45bacf31efef21f9b60543504d1832ded3e098 v7-3-169
+64c3402df964791a7b8c925905423f83af83e930 v7-3-170
+1bd8af13fb434e4c99bb756052556f4d56cde200 v7-3-171
+ee48b3da9d53a487f3636df34cace6400d13f32c v7-3-172
+133d089f247eb7156a6e8c49e0526f41cc082c3c v7-3-173
+820f12659c50890dbda80e7280086ae1176d1378 v7-3-174
+537e0102c0f9cc2c0656c298ed1534ef30176eb8 v7-3-175
+94f42ae4e4e66483fb6cc7305c61820b004c6182 v7-3-176
+66f2d62271fe77d4acdda5808bd0d3a45be3149c v7-3-177
+ac639ca9f58f7c71551c19090473395d81a021b6 v7-3-178
+11e62fb6f8154537f92be5f278c31e737247f781 v7-3-179
+ed47d18b39c6a672ad4f0caa2f2c3ee897e784a7 v7-3-180
+5381eb5b1eb9c39797c435ad904bfcb71f1efb01 v7-3-181
+21346361ce6c7e9afca2e475ceb62f6244197919 v7-3-182
+e4403440e192d082af7dc8fe3e1a12d24f0e259c v7-3-183
+b941cc96926a26b62d59f759a021ddb5b51823ed v7-3-184
+9c8dffc62a41a143230f76376f9a3abf46ff3536 v7-3-185
+3d1a3aa0240c7a9acdf3feb77b664798e3703463 v7-3-186
+8bd38abda3149cce7043da86e6093dbebecf63df v7-3-187
+f2e1c3a90a3bda6ce8977187b365745efd4e5c35 v7-3-188
+71e1da07e1414740d1d0eed47a346cb3292a9e2e v7-3-189
+30b7cde2194064040cb7d7e6485a5712b2fc9b40 v7-3-190
+107b03fdf1ad831e2697c22a04bd3eeaca08c291 v7-3-191
+8470ac4679c17b69aefb06989c6e8a267761988a v7-3-192
+e1c5f69de95b99112fae28c23ce6427ca251e50f v7-3-193
+664c1adcb909aca654c4fe9200364cc741068803 v7-3-194
+8dbea5adc937ecddf8ca336856cd487e1b118b1a v7-3-195
+d641f141f9376b3ecf2146e5d68c38bf0227c970 v7-3-196
+45c536fe48db330c4ee8f1056befe702d9d19cfe v7-3-197
+b0190e93e601f9061a797689a1eb95a86805f769 v7-3-198
+c76efe33a3c1db5767cfa4f4bb433466cba6e351 v7-3-199
+41b17dd070295783af37698b1229a7052ab0549c v7-3-200
+78859ef2982bbc75dcfbc551e3d8a0ec5c9126eb v7-3-201
+f80e67bd627114cf7f16098ec4ed7d878816a46b v7-3-202
+ce1dce2af2a34aec196b7fbe29cf8c653b6ec6de v7-3-203
+e6ce47f06836721108394f0b921af076606cf715 v7-3-204
+8d8bd6307b1aa51fe2f592ce45d32abf0f6666d8 v7-3-205
+46544d3ae7ecb245a2646ae5005a3d67ca380f88 v7-3-206
+d1445b72ddb7d8b4a44393756b00d21c81212db1 v7-3-207
+205adc87d579512482c27f309c73d5fe8f612ff3 v7-3-208
+82cd9f1e8d6b21ef4d59f27b39f041d5cddec19d v7-3-209
+eeb1ac4f66d1d69c0c75f1028655a81890cf65c2 v7-3-210
+c7d942260772003e21039f9891775b479311b40e v7-3-211
+6bbdb9c7a425b0bd90d5823eba9475b850a409fd v7-3-212
+493897f8bf9057aa0fee4c18d269558d32053cc7 v7-3-213
+d84a564f28c9e64c3c2a1689af0e0851bc7e5027 v7-3-214
+b7523ef31e23f1a40cc3950b6ec75b39ad7f762d v7-3-215
+eb6c704607025d89a0a5d3fd2769a694ac47e0af v7-3-216
+15705b520c298738588a9a3b8d724c6d86d4cb8c v7-3-217
+cf89a1d3a0ddd21fe6b734fd72346468b808836f v7-3-218
+acda456c788ae1b0b45b8c67a93edcccde594819 v7-3-219
+fe9c7da98b5e2f92e4212e948e98f2d44bf06320 v7-3-220
+fd4224d9ee09801ed1ad9341a72c4683e291bb76 v7-3-221
+c3b4b1c89d8ed62a2624bf9404fc79f60223bd81 v7-3-222
+4e21fd3cfc3084db66f65aef132cb6c5e076cb96 v7-3-223
+69e0783ed0ef40f72ebeba41f8c98c9992f368c7 v7-3-224
+c249d9aa60f759286f54781829c1e3da8680c4a7 v7-3-225
+8477b2cc2b81603408b3fb1a84cd65afb2aadc65 v7-3-226
+b65a26a2aa095c739e90edb7b980154476529d35 v7-3-227
+c6df8554b39d009ed146baa48c0cfb351aa8379a v7-3-228
+07647a0545c9f0fad4e1e84062e0572a07d94659 v7-3-229
+70c8f54e7efbd7b59bbe6764d0fbfa1f1602273f v7-3-230
+455a4c85d04d04c732367f915d82c5b3c9a65b50 v7-3-231
+b67d3a44262a97e7b3ae212fcffb36926b5f53f4 v7-3-232
+69b90e43b728ec28939b0a536de32f818b7ee756 v7-3-233
+7653420fdc454be197d59e420a1672909fac7b82 v7-3-234
+441d364773dc53264b5f26042f8fc6f8b77c8044 v7-3-235
+c1733ef5b6e87dde521d0d85a1e5e62259854ac1 v7-3-236
+e3bb93df6c34da672244bce5695c1426da139614 v7-3-237
+f2c108f44f415c7cfe92862e791a01cc542ac378 v7-3-238
+0bef86c5c985218a9448fa16d935b913e67af8d5 v7-3-239
+bf283e37792b4b557a2b9081e4fdb0e10acb9655 v7-3-240
+0a650db0265381b540df8ca6bd716c4b2d47dfc9 v7-3-241
+3d96ddbeb3b0003de29b736f63b76675909f133c v7-3-242
+512ddd87f1a817749c8362bd043682a7bbd87014 v7-3-243
+be6b6509636242cd7e6fab9a4b8772e97fc9a0db v7-3-244
+52512eddb876f64399e98d12643233a87c9f2823 v7-3-245
+3f1a4ed36d1b520a1ad5aa6cbf50d68bc8b9c7a5 v7-3-246
+7fe2c092913e84e6717782da1f1a220069eebbe7 v7-3-247
+57a7998e0fa8854a7a8c3946df1d4c9b1ee220e5 v7-3-248
+9f71f5a526aff4f1e0eefe1068d9534aee427afa v7-3-249
+f909f4f0f38c71594266b3595d31ce04d4ebe3ec v7-3-250
+fe6ad3fd85322b394824a5c495a78061a747b074 v7-3-251
+0b4289bcf8364854dd5f94c42d0252504103e5b9 v7-3-252
+c21429d7768cd4b834a086dd47881d01bca74e8c v7-3-253
+1eb805225de7750c03af7b0f7ac2f5dd18d032be v7-3-254
+aa998de9f9592426c17396b60c5db9170a234024 v7-3-255
+c296c225736e4489706c62c95752a0c4788be1d3 v7-3-256
+1fad9c73d77a0030586704cccab1b1a7aba8b58b v7-3-257
+bdc3335bd72eea207b28fcf8af90a73c855c8847 v7-3-258
+59130cd78dfc73bd04f22d201b8f7c0772d98e79 v7-3-259
+cb4682b959098e486977eb4b5969c9eb07d2798e v7-3-260
+410d42e3d4da09284394456186143d595e9b2efc v7-3-261
+847733973bfdd716bfafc364a4102e76f88e7fe8 v7-3-262
+a56259157c935b4e78e9f5f4dfb1436e3461eefb v7-3-263
+aa40bddeea9a44c6c6b4ffa32c1ef373df437a16 v7-3-264
+eff686fb8de66a26367f5e6430d34729f1a0e336 v7-3-265
+25be7c9dda549e4cfa1eb57937dc2b38b3d1e997 v7-3-266
+ad404f2a4bfa5374e97f29335f41b7ef34cd6bfa v7-3-267
+ee17ee712512451a54046d6bcd3ddb9f70cb5cdf v7-3-268
+7f4f5ca70dbde4e31c2de494b982bfb9bd71ed75 v7-3-269
+b9182da84c7eeda221e5219ef4361cca201b3b41 v7-3-270
+32a52f06f33b9e2d4817330099b410c1fcf64db2 v7-3-271
+02f5abca10aee570d5a9cf00928ffaa663daba66 v7-3-272
+7d4e5e31d8c10c767cdf774a2b13aedd2f95f096 v7-3-273
+1bb6776fa8c445e0b3f9dd2ed14fdf2a56f5873e v7-3-274
+125c7bf52271461dfbf46cc33317eadc67aaf742 v7-3-275
+37a54a85413eae68932233e64a0ab88c99c9d811 v7-3-276
+e5b17a5f651696ad4c523a21822692115d371250 v7-3-277
+6622f28b7e87a93de6f1520945d1c5d2a1fc0dab v7-3-278
+342b176089678e86cde3e1afac4aaaa1e5153f99 v7-3-279
+58bba69b3371d9ff02b27fe24f044e229c8aa99a v7-3-280
+45ead8a0bedeade57c320d72e9f710a703e61cf0 v7-3-281
+92167bb91c95410a0550ff8c94370307bb7d9d80 v7-3-282
+47b6d37b60122f45eb147106b8da1322c1cdbc60 v7-3-283
+27d43855b72312500e6fc2122e167a579a1f35f2 v7-3-284
+6018c815e1205e7db9328fe6ed91b26b514465f3 v7-3-285
+3f822e54765c54a1112a953e3c37bb60185fd51c v7-3-286
+07bc2ccfe5559035e785f22851365b3a31dec67e v7-3-287
+e4f3fa1a474e677dce486ea07ee31270f92b2b4a v7-3-288
+44ffd0a8abcdba441216514cb711649eb1169876 v7-3-289
+df33dba4e553f8fa27ba467042f16315c613a00d v7-3-290
+e8ee4b4ebf41abb199ea9a9e9cc38f9b0c2f7192 v7-3-291
+b6af1c5dd22f08db2b9e52ae763f193ba82965ad v7-3-292
+6cd0d6413a2e03687aca8138b2843f1f2aac5b84 v7-3-293
+dbd73fe939cf772a8b07c19230e5ee60aa0cfcc7 v7-3-294
+0d8494c051131b6470fe8af67646e235bc63fcf7 v7-3-295
+c19c15a9e9bf2914b25748c0544936e84a5c77c0 v7-3-296
+22550986c713ce5f37f069f0c8f99a54dc4a421b v7-3-297
+43b1d031e3028248abcbd5099841d3aafda7f68d v7-3-298
+eb4972982bfea006ead5b461f319744d5ecd58f5 v7-3-299
+2665b456ee59652c7b590dff0fa522ce337e0f16 v7-3-300
+4a70971530899e32058207cae683a69e7b8f85dc v7-3-301
+61b2f26623104f75850b1568bf61663597fe7fb0 v7-3-302
+d832d642f520d426f111b35102450617922547d3 v7-3-303
+b3a523ced6bd1173e4c17611559c173094830d43 v7-3-304
+0e06c025f66ffdfea20c8b73a995d23448b8dbfb v7-3-305
+0787bb5f387b79842d5c9353ae3541a992d1b9f1 v7-3-306
+880b7dd69331d1fefaf2d8735b118b39d546280c v7-3-307
+61c5e1527bd857e724f8396c89d0687126390675 v7-3-308
+6eae1b42c6684f3fcdb4d6cdbfb7dc1942d9b364 v7-3-309
+51ce22ba89d11505e18aa585fbd7dcbb22097f9a v7-3-310
+2cbde6bcc6238f41506f87bf31ff7d90f632345a v7-3-311
+0ed06069aaf32dbb2aa3827b23280b0028954ce7 v7-3-312
+dc60200a16b21c3e4157708bb825ea61b9e5bdc1 v7-3-313
+6ab1b45cc95ed56105b2130dc9938bb8344ff903 v7-3-314
+3ecf9e91d88acdb5eaaf93cc15a18914b60e0eb3 v7-3-315
+33c140e4664d102c34ec3ec5a17318f75cf475d7 v7-3-316
+92a181a1cec3fec52cde1b3d71f628a3a2dc53c6 v7-3-317
+d68f20a86a3ec75d927955be5d31983b6c37eb1d v7-3-318
+dc7f2f9759208aa07bf136deca661fd080a1ee68 v7-3-319
+738ea87c196431c452bd499c5a9849597ac938de v7-3-320
+fc0804089b2945bfe683f9bc9ee0238b8c64a46e v7-3-321
+38a7fd9043474dfb464c338ffd7f393361f5a6c1 v7-3-322
+3bdb646fc8a46ee5a5fe474dccdce098680d24d6 v7-3-323
+f04619f1fc1663f4ab05798c410e4fa35a9dd863 v7-3-324
+8aca621c00910556d4f52bd650d6841d6059d6ec v7-3-325
+d3758064ff9946d23aeccc9d2340686766647b84 v7-3-326
+9028c70adafd109ab294102f74dfb5005a20bbfb v7-3-327
+5b53cea62e5d1be2a1a36ce685c15f99bb8a41ba v7-3-328
+ec901ddc84d5c66c5d0c1dcca093584598487f9f v7-3-329
+abb03be99d661455fd3790cd25355459448fa432 v7-3-330
+4b8c614c1c914ce5d712368a75dbfea9b7e44e17 v7-3-331
+0ecfe54a273f6bc440684aca4ebe5926a2dfc6e2 v7-3-332
+992b24149a9ee0d6f417e40a7462891a9f62ec6a v7-3-333
+fdc72363229865cc6fd2da9db66f1d6e683b87c0 v7-3-334
+dc3f90a73fb375092ea9d870ae48ff31b31a56ab v7-3-335
+52526aec4afb220a1271e9a645194c42d3b2a538 v7-3-336
+176bfa951339a0a36366cbc8def41ae75f5034e0 v7-3-337
+7919a3d7333b99cece7d1a2657c89c18de78bf82 v7-3-338
+b5a2b4c0c1cac1758990ea449bc1c552522f39a9 v7-3-339
+49b08c9b9f5b72d930a1c02f00aa4128dc58532d v7-3-340
+6963603ec6dc2b47da9a7e951b2d0b3e024535eb v7-3-341
+314d9368069ec0458631ca150c202e7f724ad6d3 v7-3-342
+98a05814f1b466c87611b810eeafe8e7d9c581b6 v7-3-343
+7ba2f171cdaca18571b5e73dece426411c4f124a v7-3-344
+35f098371af699aa7e614a6397a068119b54cabf v7-3-345
+af76a61a7f79ccd3bcf64e15c73f2a3ea0eb77da v7-3-346
+72528c5eb87ea315a7c1a48f7734d1717c28820f v7-3-347
+4d4a328f199e4020457b4bf8f077622966bb3563 v7-3-348
+075acc2dccaa621998ccb1d671a987090367d485 v7-3-349
+07956eab189c0c776b79bc42235833d234480559 v7-3-350
+ff69efc4bc55d83b5f2bb68aeede1d921e8f1036 v7-3-351
+ca65249eb34bc62e82d54f74e14271be7f7f8a44 v7-3-352
+12bb368fef2c8c5478f0f8905aac381a56a75fe0 v7-3-353
+6672b1645306ceab4348caaffec40990dc319b98 v7-3-354
+d2f70593afeb432611cdb0ea2a0600c2869a20e0 v7-3-355
+c349a670716ab5e5f01b8121f3b7f07560ce0b8a v7-3-356
+e618700297e83c0d51efbb77a849ce5f0b19b507 v7-3-357
+97a52300ef2b496b6c8e2487973f134d9e0afba8 v7-3-358
+b7f0f23bf90603f83854fd1aece09fcc64876a29 v7-3-359
+28480c9006e6e6936aae05de1f3ca3eaf4d2f267 v7-3-360
+e42252611e74c1df2063955d6086f59fb3e3247d v7-3-361
+074ddc768feadcb3164973c7f7be8bf78dbdd56e v7-3-362
+c025592d7b1dd658955b9a6d2d159c04e83c31e0 v7-3-363
+b0bbaf1020f08fa6dbeb059e251127e27fab9ecc v7-3-364
+54ef99c39139cad53db24bcdc18470394d76b40f v7-3-365
+436b42f3cba1896b65ad32e791d131a7c3978738 v7-3-366
+972bd3fca5562b8752ae18313e8cb3e6fac207c5 v7-3-367
+4e9c5338f44c24d511a989b5ea50850a2b9110b6 v7-3-368
+0df9718c45b68c0aaa40934bb54b3217b0c24495 v7-3-369
+3801e4811b0ecd56667fe89172ed37a84047307d v7-3-370
+e757e1127d210632cc920d9a0d2d2a3b89be7ffe v7-3-371
+6ff80dd02b51e9bd6d3c1b0167b81e295b0b4881 v7-3-372
+a1d2f741d45c8731450db862e89eb4a650796fe9 v7-3-373
+0a9d7cf90f94945578b83883e2ade369ecfbfc6d v7-3-374
+767bb493e7d31273edc45f4cb6602784f639f516 v7-3-375
+1d7434010de186b02fd6a5c8eef3e28108a4a251 v7-3-376
+cd145cc2f2c918b9fd77dc177f69805c77e31e41 v7-3-377
+a7517e84d9b8191092ff849e520558d61be01f71 v7-3-378
+0f193ef0f4298ed632b5e9dc88c7efefe093728b v7-3-379
+534b3ef1cf1440a9e22c2efc7f2673017024f124 v7-3-380
+6cc788692b2e8e043a3d7fff4e1efa2601ad39c7 v7-3-381
+2260435283f2ba0ac8d0b35e216b297605ef81db v7-3-382
+f8d2ef4512f8d78c00a7aff24fb8f99aced6f2d6 v7-3-383
+e958eeffa0a7d0ed2021f2f4b61ed9e5daf3d9a5 v7-3-384
+910eb66c97684b3c0511789e7655dce2c7ba254a v7-3-385
+1cedbee50ca65fc96eca2d360ddf886b3e7ad74f v7-3-386
+ac16c62282ac0e961afa44b556fe850dd6c8e1aa v7-3-387
+683fab13904c115b4e1f8b9ecb902d192501245d v7-3-388
+c97c3272d7a67a2980ddc291f12f09c36568c54c v7-3-389
+48252b5fd17042ae95c6736073ba3c5b12820f2c v7-3-390
+819322e0e93e50c04fa79163f9b88085cbe7db8d v7-3-391
+c4898d6d73a2ffa55fc91f79f8e110260eda29cb v7-3-392
+e0248b732a5cf0c4e6d61253564f3f855d11a755 v7-3-393
+927c7377cf49bbbf87d12863c2a2d462c9cf97a7 v7-3-394
+80c529a5650f1d70342f18c681b69d7897495006 v7-3-395
+2f075595590f498f1a9cfc42dfce24cd0d980e96 v7-3-396
+75217982ea460e7bdfdd2517d8d4e4f0d0ebaef4 v7-3-397
+9eb7fdfb5e63ad98f6feb81b03566fbdc5ebd895 v7-3-398
+ce6afdc00290520fb2d9677b44a0cbb70bc401e6 v7-3-399
+320cc46d0eb022bfb24d1b636050becc83ac0014 v7-3-400
+1251e1ce94610b265d3c1f636d379a0504cf2ae5 v7-3-401
+4eda43e1fce06ef32d0a79721fa0a6850a72b4dc v7-3-402
+5850b58276918de8edf19ece0bd258e179967af8 v7-3-403
+8b928bc814a8d502f25a06ddfa66b0474b89a73f v7-3-404
+c75a8d2404bd4f1297aafbb10ab1ae68ba678249 v7-3-405
+fbb23bd517f8614f512cd81b253519cbf4548863 v7-3-406
+55cebc7e5de078ef323a94ad79319c0ab33b09ef v7-3-407
+1fec3c62f6e8065c2f7ea7422213e78b50032de6 v7-3-408
+7b59c2c032ca8a15425afb1b519c809abfd572f0 v7-3-409
+5cf2a671d8ebdf46590b8fe349ad2b6f84eed868 v7-3-410
+8066fb7e356481b52019a52696072594d2590d4f v7-3-411
+aaee6093302281b70798ae4dc599145b95891908 v7-3-412
+821c8be2e9d604282481f50f7c5a1a210b9b1696 v7-3-413
+c7861dd3b593a2011ae46dbe43d78f44cdf2d99f v7-3-414
+e7e4dbac7ded5e048e289c7fd92c40e29f775758 v7-3-415
+5c5ca538693fbfd3a574998693094b48f19ec12e v7-3-416
+5c5ca538693fbfd3a574998693094b48f19ec12e v7-3-416
+22a626604672b37914ae929b0d5e11e3efb0d79f v7-3-416
+63d3541d07339c65d602bac2bbc72d755b416ad8 v7-3-417
+4500a0ad2e0a24f54e5c4b4a3266456cd5ccb2eb v7-3-418
+f4574729f6df749668df181a9dc09030f37de2ad v7-3-419
+ded8f5add04c9477c47098a66991f971324787f2 v7-3-420
+076003f52582c2ec0b4851df539edf512945778c v7-3-421
+60f6df978a413952e37d03b85a50ca858456b53b v7-3-422
+b7811ab264bf31e0049e7a9b689a399ead6cbda6 v7-3-423
+2e4539dc2de7da0aed83286304d1afeb0a4cdb3d v7-3-424
+7b17a38eb223b4b56327f019267c1156121f5c0f v7-3-425
+c70c005f61fb08ca032b4eab533908cfc6e6f40a v7-3-426
+45467d77047df9134a7694367bf97344441b1b3c v7-3-427
+d473f39aeadf6d022e520968db17257b42b52b61 v7-3-428
+c9366ca36f6feb95bd8e01dbed9973a404f5391e v7-3-429
+a9f8dd20a49f9b8296a6ef6d9e17e3446c0974eb v7-3-430
+a27fac494e709a3cb78399f5dbc5d807a1dc7a46 v7-3-431
+81201fb337a58a58cbac43c2b89025c681361df7 v7-3-432
+8a731d7f0664b13176afb640ed0325949836962d v7-3-433
+636c2b1cdc8b6cc5279ac7d5986da1085484b98a v7-3-434
+afbf45d854965f9e557497ab9d4d9aca87e220fd v7-3-435
+2a6eb75275d94b864eba6d6135de650a903a4a7e v7-3-436
+539613ce999d3a938c602a6b6eb230fd0d77a1d1 v7-3-437
+bb67cd961fc3011d367357c215a0603dcc46ea40 v7-3-438
+dec4338a7da22b02e7c7cc65668d35db264d3400 v7-3-439
+e3cbb11f3555d5dbb1cbd3daac4a958a9e1f01ea v7-3-440
+af4ed13ca541f034e3241f2eda1abdb3b45d1770 v7-3-441
+198ec1fff71a44a35aa7a59b4952583a82a296fa v7-3-442
+de050fcc24cfb56a7dc07dd283cc1132d774e7b7 v7-3-443
+72146e7f47fa647f19fe419f4c8602897880eed5 v7-3-444
+397e7e49bb0b831f7260d3ad70f6b07175c44a0c v7-3-445
+20ca2e05ae20ece942490182691ed45746f64cb6 v7-3-446
+6a03b0ea2e12d748c1e4199e3f428ee080760939 v7-3-447
+756d712b3118b896b57ddb4f4c071135bc031607 v7-3-448
+9ccdc4a69d8ff7aab8abf89f9a3cc9dad12249dd v7-3-449
+3479ac596f6c4b38849d2e5235ad590378605eb8 v7-3-450
+045fdc5b6056a18579f28b40a4914f4a7cb8d4a3 v7-3-451
+f1cde9cf023e15cd1bc26ae720d6380fa5ceac7d v7-3-452
+791baa7b35e1b6244cdecd4a2feed933f78fd84f v7-3-453
+1632640a24b42a9193eeb8f6e8150afaeee5ee35 v7-3-454
+e6392f2aed4c13170664b4ec13dd2d8b3ce968aa v7-3-455
+07fd030f89be62aa11c4ea1a188ee2d8f4348677 v7-3-456
+4a2744311b3f3c8207189dee4ef405959a2e2446 v7-3-457
+da670fb71d30a1eefb07b19256f8c0d677807550 v7-3-458
+cb2ae92ce106de532c53f8a16a82bc2bf6edacd2 v7-3-459
+981c7ad9dd48cac1b4030b97c2f0dc0b8fe82337 v7-3-460
+de60f6fa3d8d77442a39ec13efef89f6ca76af03 v7-3-461
+70eff6af1158f9dc99118ba73e81f456015c3ebd v7-3-462
+8e0fe5a723adfb45c44978083db7aeac11e6d72b v7-3-463
+43259e4542c76e950fecc86114c43065064d1b34 v7-3-464
+d1096a4e96bdd5bfc0ce2f1aaddcbff1475c69ad v7-3-465
+df9c7798b5e2c022310cd12e199c9de8d866aa39 v7-3-466
+276d58e9265cfee76c04bc5450681090900a16f4 v7-3-467
+38a1357304234dcea96f96019abf0f3e5ae290ab v7-3-468
+e61c3b09ae86a8a448ad2d028df6fa6b9778666b v7-3-469
+636e4db6e2075bd22640cfc8229af62059f8ffe0 v7-3-470
+3465a9e7758850684d18a9bb11ac033efdcd1755 v7-3-471
+8332129d9ae8f11f8ecb9f016e5292c6582bbb4e v7-3-472
+7f1bce9c9b79d4ebbf798d6122612934d55d70d9 v7-3-473
+7613c9ab083f3e9262be5a21fe086921b757da4c v7-3-474
+36160830a5e8d0e3b4174aa7d98363623468b77c v7-3-475
+fb2c5a51dac7f1dbce6a0f35808927ac206c7f47 v7-3-476
+62dc0d69ab11d5b5a67c6139a0dd3e2618d2c2a1 v7-3-477
+754db405921292fc57dbdaa85e62af333dce5912 v7-3-478
+3db4282d5e6bb74a5c1094f35a81472d5a98f313 v7-3-479
+b35844f3eb49bb84101fdb276e3e69b0b8f7813f v7-3-480
+8e21ac7f2d6e9f269b057939dda58d3a31beb894 v7-3-481
+3229335d0c4e6cd7e91e6e61d791d7dff7d3082d v7-3-482
+19040069b8bf1818db44396a150acb54f47c3a96 v7-3-483
+00fa605e7d7ba7d522c627a93de6e2f5017d2884 v7-3-484
+94374e0b6267d8983a73a22166888c2282ee793d v7-3-485
+08a37c57af479b54fa327bedc0ef31c42dd96f63 v7-3-486
+21219ffc97903684349f1fcc843eb61838877874 v7-3-487
+8691bdcdbf66733c7ec1ef8161da1d4ef49dce66 v7-3-488
+c1a6e1745cb521f863e63670e6c22c1c682ab4b1 v7-3-489
+b067b8b81be9c2839df75824da2e88da24b07b54 v7-3-490
+e070b34fe35e6e8c40ec31a08196dd81353db4e5 v7-3-491
+214c7ec1c8f995664d5684da8cbeaaa86850468f v7-3-492
+bf5960ec253293b7240f59a7682f2e862dacd205 v7-3-493
+5240610f277823478983e3f04abfbed4e85141cf v7-3-494
+27f6a22ff88eea07f24163fe470b7335f3c1b32b v7-3-495
+3daba355b0c15ef66a9d2810ae7c7cc534dccf62 v7-3-496
+e34c620007be9fd805556c43fe848de521f3b64c v7-3-497
+b1a42d2522fb4ff627a0c381e994e2a598f7bbbb v7-3-498
+4a2cb025b6417b00f2ced076eb79739e03acd7d4 v7-3-499
+b36640b2f671c006fe26b573fd42347227efbfa8 v7-3-500
+d7b335626ddc7a61667cb3e23ecadfe399b676fb v7-3-501
+1d1cce57421c78884cff2d3234d3759bc858d6fb v7-3-502
+65d036fd449e488303e78d2c6679a736551c39a6 v7-3-503
+17bfcb054cb770ac685acaa349165f210bdd36ca v7-3-504
+fe7bf24804e195209bef4cd008f0bac7eec7fc60 v7-3-505
+982f84487daf102f1203977a09f2c6c76d1ed3d5 v7-3-506
+f9a865d97614940f817b76642282d966781296e5 v7-3-507
+2722f11ddc998ac7c578c68c0248b58468179418 v7-3-508
+8101253704f6504bed3f0209e9a6fcae3966c6e7 v7-3-509
+53786601213cd9f86db8714f7b0e077b05e2704f v7-3-510
+b782e2f9e6892116ae5d068249b5198bbe0042c6 v7-3-511
+454646820185cbe13e1f2e4f7533b984d3b07b18 v7-3-512
+75037f9bc97ad76bca58dbbc0ddac69cc7f5d9ac v7-3-513
+7e4428115d2cea86fcfa980097c98c11380ae196 v7-3-514
+6c318419e3310fb9658ee6ead6b4ea33def8cb6d v7-3-515
+02440d1fcc9aa953ebb7c0719405ccf2525f2777 v7-3-516
+9a1dba1f969ac4cb2477626cd79a7a6b0bea1894 v7-3-517
+ec4ab9d832b0f5308c861423d99253fa496b3a3b v7-3-518
+ebec52bc2800b8e51e522425fdca5c252e6d4f8e v7-3-519
+7bafe52b6245761a242321352daca224e6b9df78 v7-3-520
+b14842cf382bd3f99ca090c985609c6dead5f9e0 v7-3-521
+e4899d2ff5d8e552ace52b7eafe02b2c5dcdb409 v7-3-522
+d8ce4a2eb44e3e3d56db5e26d9982aeb48d7814b v7-3-523
+ae1641c4fbcc8c25d27802d6048cb0767c4021d1 v7-3-524
+ac2e00f917df566b81b9e33891b102cba5b390e0 v7-3-525
+257c2878e0fcabd5504dcfed910287374405440a v7-3-526
+a17918b76ca1296f63db0e81dea0e37b8b880150 v7-3-527
+fa17c8646feb4719639150f1c301ce6c1557afb7 v7-3-528
+d83218a156dd8258a5f2f3ae019c56f3e8851d48 v7-3-529
+81d5f3a3e27fff9188ae34c41b939fc88c9837de v7-3-530
+c44f0f7424b98d321d90994198374628911623ce v7-3-531
+9755d151c7492a5f1d0e77a2d3c9e414f20f3b4e v7-3-532
+74d51b51f3e69df7d3295255ee10391b3409055b v7-3-533
+65f905eb14cd373e205ff4c8a53027514e96d819 v7-3-534
+f52d2ea0f81c20e6f026d74cec66b135d5470d2d v7-3-535
+a8897fd5d074d7baaba692013521304b13beb784 v7-3-536
+96715c3a905faa1bbdc50b16b0f57671b4758e0c v7-3-537
+bbf1fbbe4ab45442f8876790004805503e25f563 v7-3-538
+7a710cf51d73cb3c3c76fcea34ee706443800c54 v7-3-539
+af083cb521bcb69aae315654a3873c488dc58c43 v7-3-540
+5c1aaf9b4b1bc2d14d627fe22d414f3a2525c50b v7-3-541
+8d1b63e6d3173625324f4adfe733efc8091f9422 v7-3-542
+ce7bd50bafa74f4da979f27c4e5fa9a47e69d739 v7-3-543
+09d0bda69df0c5eb505a02e37a978e92fbc89332 v7-3-544
+e7ff3251dfa157284a48c5322783499d079e3eb0 v7-3-545
+0a364618c0e59fa777f526c99bee608bb5cf55ce v7-3-546
+4f4db5d661c4fae42f2d917c09549d58a2f4d05f v7-3-547
+8625e38066dbf6a4d5e2563fbe191c3910681d2e v7-3-548
+c0c935956ac3b7c706043e5c7c0ba840636fb10f v7-3-549
+297771eff080ed3bcfb2ade57c2dcab34bac5de8 v7-3-550
+e83c5dcea112a44f9a7b06042b52798e32d96541 v7-3-551
+443c50cd3e8811b58a4ca131ab21abd18aea9489 v7-3-552
+583e46e4a56c40fa1a7336be85eaec93f6800edf v7-3-553
+a967a979c37f458bd4d164afb8a6192a5b4a6fde v7-3-554
+8fb7bd9dfb2b26b43725c90e042d2089762466a6 v7-3-555
+b8924014a03991b79947d735a894e2c2e8f94980 v7-3-556
+a220dd97b5c7218558eaea27d301af2ed4f9ec2d v7-3-557
+34724dc5172bb81a9e670c5bd23edbe6a124fd28 v7-3-558
+74adc9f7e15b8c088abd04de35615cad6c83a811 v7-3-559
+0abd38ba64557c4a6d62575aaa3fc7ab6482d747 v7-3-560
+a1de7928a7aba45240c85a2bc8d70adadc49e4dc v7-3-561
+b2763055bdf26e1f11bf8cfb0601fefbefb34e0d v7-3-562
+02c86cdcf9a23f092400c7631e5906cb9053703b v7-3-563
+683de93060968ed4e9dfb7992910c75f479471ec v7-3-564
+5f811338b1186e1aef683d03fa05a8026d30e9f1 v7-3-565
+18c6b1752d0baab043792d3f6267ec393f7a11e1 v7-3-566
+f90bb88c261582fef85c16009f19168b38debd74 v7-3-567
+3b5f541269e2d9e57b82ea1ec89c6747e2003434 v7-3-568
+c052f3b79b9948e7072580e7db42f90c92eb40af v7-3-569
+4f1c511e71f851c4f1c14e950f95ebd6967c6ed1 v7-3-570
+43fd3896fab7be5ad01deed2960d37d91ba65691 v7-3-571
+3ae387af405f46e200fdf9bc204d0a251864abb9 v7-3-572
+802b1a1b275f5c8f95724d50d53642f221621d79 v7-3-573
+3ac005f02cf015b3aa246482c6331bd61c08d91a v7-3-574
+79ae10bd056520fb6367247804af22e52d2de8b8 v7-3-575
+7e3fedfc3d08d020e3ce047ec1a1cfd195af9ed7 v7-3-576
+286ba0251c0aff1a664a481846c1f4107fae0c11 v7-3-577
+0e9b2622c94a8edf906d6c44831c1cded7184d13 v7-3-578
+80ed6aa7b9eb18058a0b105af2ecd7b213891be2 v7-3-579
+f02b6ad168ae82ead0286b64627762ab2343ee96 v7-3-580
+96249a1803e28e6173faed53f8687334aa63360c v7-3-581
+d383bc2ba8112103389a44c2c747eaa1016da935 v7-3-582
+a69b1d711ff9d8b227acff694c53310cf237933f v7-3-583
+2d107086903af80afee524549e57d3ba016b3f12 v7-3-584
+d258a0c5c38a6a604b983b6499a0f02bc061c816 v7-3-585
+8393a16069fb5f7b22ab766167b698e4dc129911 v7-3-586
+a34fb0a077c9c26946727a25222e0a99dc08db0d v7-3-587
+e92cc285632dc29d932061970e43b53cdbb3460d v7-3-588
+e82937b753a8ca6705bf55dbf258f077746ec428 v7-3-589
+bdf7f3e4c763f2a038c397af8eb6b8950e58db6b v7-3-590
+e5b925ae56e36e86eb2ff059aa28d6a2dd332845 v7-3-591
+0e06193d4bd7be03924dd9c6251a64c6c6adf78d v7-3-592
+46896c29edd74418c665af7c1ed685aa52a41e1a v7-3-593
+5e7b500dbb7e9e964457d300b536aeba9771af6c v7-3-594
+928e7cef8836d13d4f2a17234e127b928ee63ff4 v7-3-595
+5aad2c444a00a2309e6e373b6bcb5441669ba126 v7-3-596
+b9aa7fb4a9281b87a651251f799e049409634757 v7-3-597
+f0747581607924c30530687fa88ebaa57602eb5f v7-3-598
+b06578f1390fea339a2d9d18e12758ec1dbcc279 v7-3-599
+8f98038a0bf34310a8224a569eacd539b7b8b649 v7-3-600
+c1780b4cb9955fc113c3c993c18c139e06425ef5 v7-3-601
+5cacdf56c94b6fa1992f7e9c07c95bfe52bcccec v7-3-602
+085f14642fe828b1cbae5706ca87f2932cebeb75 v7-3-603
+acd91c9741a6d0185b7c63db412888de4f904118 v7-3-604
+4873d9c4ad3b7214d3ea8af9712a87ff69948380 v7-3-605
+c612d154bcdd642e4097ae88526a81ed7868c184 v7-3-606
+002f2c5de317aaedb93bd2e506a295efe2d552ce v7-3-607
+d47e6222d1cde1caf08fa63104375f5750c25d90 v7-3-608
+d29aa05b7e311bc05491521f4059ca2b625c5550 v7-3-609
+9f48a54329975434d73ddfc19e33c343653d5c73 v7-3-610
+e13f2f3568e1e21fbd223a1c0627605e2b670c53 v7-3-611
+2b4b6185054ff05fb6ee3ab1bcde47409bf2ebe0 v7-3-612
+c03b6363492b26c02b4f8a725a91849a1a5cf548 v7-3-613
+2bb51730ef4bb0824658f7507edad165e194dd45 v7-3-614
+169ccc471a8a947c046b7ff41023b9045beb3496 v7-3-615
+baba6286c91e63dd42039206e3e0990fb0ac346f v7-3-616
+73db39ca1877a07008310a2ec98a2220e50c52f1 v7-3-617
+0b1cb3f839c48daaccbb3abcbd5f1c394c57cb10 v7-3-618
+27ecf0c87bd20140d9e85d4fd581332e0916191e v7-3-619
+a6ebae140d89f35876628cde44f0e7ee5a0ae1d2 v7-3-620
+ac13ea2b098d98e62408ec2d88026f690f68f940 v7-3-621
+52247eb615118965bb6a949307e9abfd378cd088 v7-3-622
+a46a101bfddd4fcf30759f3847fa1e18546907f4 v7-3-623
+06749e351b1c030acf50cf8c469f8973aff4a96a v7-3-624
+f43ffd820a46bf47b3e55b56d3e5334302383757 v7-3-625
+956b1ed19282518e0287891d4e7b2b8a3f850402 v7-3-626
+dc65e6429d2c1b79719455d7303f3f95c5897965 v7-3-627
+1ed93878d6e224d46a7c125a82e52338b9bf0f6b v7-3-628
+7de7ef01288db1abc944293a28aac13ddd87879e v7-3-629
+3416ac23d0758528919aaffbe02cecc6420b8aac v7-3-630
+99f076ca8d846d553aefd7e626ca938bcf93f259 v7-3-631
+44038a9777aaf0e6502e0eb57b8f7ccf31798ec4 v7-3-632
+ad5fbf3596e0a8ad15c260c5b529efc5ac689e13 v7-3-633
+b7eea24095073d55ac3c59664466b78a0525bebc v7-3-634
+f7f68f83fc335379bc9e3371c5118b8f81c8d5bc v7-3-635
+616bc1ad4f12be0ef37fe67d2f6ed7535f20e515 v7-3-636
+3b62d8f36cdf709d4e0575d63486ebe57ce7150c v7-3-637
+c0256c4bd91ed7b806aab002e4a45e440dd00343 v7-3-638
+1ec385a8faf4002fa300caf370ef2ac380d9702a v7-3-639
+c2c3577021ed4e354853d330e5fc60691d8750c5 v7-3-640
+c068389057c9a89fa351678b5f5776278971dabe v7-3-641
+79ac6744237ce5076a6d2e2b21198dfddc2cc9dd v7-3-642
+fdac34e3afa5f0dea26dba5e96932e3b9a0be50a v7-3-643
+fb7c028dcac7555fee78096813e3846d157cc91b v7-3-644
+1810ee914648ef3e16a8cf866299a32c4a9a00cb v7-3-645
+e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646
+29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 v7-3-647
+76c099d45772a233982c39a29510d89eaa4d5a1c v7-3-648
+063765c3cebbd6040dc091b8c1ba28739fef9118 v7-3-649
+a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650
+ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651
+5edf3c51aa93110e57fcd0428c30e5bed149df34 v7-3-652
+fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653
+73557eda70271b49015265b7147562b63a7a094d v7-3-654
+0d3238b54963c4b1358a1f33221f75e067c1613f v7-3-655
+a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656
+3958b0e672d676a310d756bff1b9c629a7b0142f v7-3-657
+15cdcb8ddcfb848c929cc37e239d5da8fe48a8d9 v7-3-658
+e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659
+8fdadfccd184b7de73811a3a18dc8815b7eb3434 v7-3-660
+5e909c379a1e87491bfa95ba1a37b39d0725933b v7-3-661
+87afa95a2992a31b1937def0e1db4a193b0ab32f v7-3-662
+2a200527131fac8f50487790ec201badbccdaf0e v7-3-663
+f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664
+35939e1e25ff5a3862b83248f8039971c81936d0 v7-3-665
+1e22adc6176ec07f52102f383a9c3c414d43f9c2 v7-3-666
+cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667
+dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668
+2b3b7b48370848149c8b831b2b7aee9b7f4f88bb v7-3-669
+2bf8c00741f7f07d9b58596764236a92eaeca862 v7-3-670
+530f5a9030315f984e096794938c61f9d3562e22 v7-3-671
+fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672
+ca1c025079b11c98363e11576d903af756a593fc v7-3-673
+4da6003f0f0eee0f3908f8627af6d13a94c10cc6 v7-3-674
+9963f7a9b41b555a0660288dd94df44b6dee7c2e v7-3-675
+5309996ddcedd7e2dcc8c46624348405290b8940 v7-3-676
+8115f449a574bc146f75449161f1757aaa5bbb66 v7-3-677
+de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678
+dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679
+52acec46b75ecf24d044982d4cc067ef7890e7d6 v7-3-680
+a2fe24ec6a0d06d0af286b9fee9e307c33f27cca v7-3-681
+8eb5b61161b4c56b378ec829e360204102d22db4 v7-3-682
+0f5ee262963528ddccfa1f54b83696f939d21b53 v7-3-683
+1cc37b8cfaa1c670e442e2f9444feeb1820228bc v7-3-684
+34aa94a421b7a03a71013ddbb92937dbaf83b1aa v7-3-685
+ba9c9d0c4ff4cf56c3c5d2dec2da71decbbe9f6a v7-3-686
+0545dab1517f8ce2b8319c02572e4bb357567034 v7-3-687
+2696da84d37093da0dea419878e4241385eb515b v7-3-688
+3c072c1cb87372f3ebd345463abbc451e80143e2 v7-3-689
+caa0ca9ad06cb515b7e6d2e4410e03802b58e167 v7-3-690
+7f10daa706bb6ed0c39f1d2905cd78368a98d19f v7-3-691
+337a4368fd2b68b9822b94e595d77b4d6773bfa4 v7-3-692
+fd96b3cc88ed71d4c4d24c6ac67c9d3a68ae6e6b v7-3-693
+8235ccf121bb241f8105d0ba6e1c92e9f8b04555 v7-3-694
+cd6c420e31d6843fa1231e1cf7a3d9eff0ad4e07 v7-3-695
+447c688b82eb4a5eb7cd0e16521094b77160fd0f v7-3-696
+7c72b5f7ada1f4a028315aa50f8739e0e83c2e74 v7-3-697
+b5b892472ecb1a10cce1709e41700b264b6485d2 v7-3-698
+4ffb6f9b58e0b51923fe6a71e6af158b6e3f7864 v7-3-699
+c656847932d33b5d68394ae1ea3153dbdba4d3ff v7-3-700
+48af8656094539f8f71dc51e0a6aa14d48ddffd0 v7-3-701
+916b5c11a13e9978c85f9742546e70d614116883 v7-3-702
+f69321485951a3c9bd0e9e7484a1901b94cae726 v7-3-703
+be8ad9c9b973a4d87b9bcfee2b6a8de1f6d3e071 v7-3-704
+0aa74f2f50a8333fd5544f5d4b383132be41704c v7-3-705
+d0ae72c2f5f94e2483ab0979eec652b1289679a8 v7-3-706
+d24d309c365fc5c6a9324a6183d7b927d9f5132f v7-3-707
+64427849c1582299f2af389c6225eead529f0329 v7-3-708
+fb7dec372910b61478abdd7f79871724153ebfdd v7-3-709
+906eb5c0ef129b6876fa9c6c5a13e44807f7a503 v7-3-710
+2a7b2943be22c27edb3c0334423c1b17275f18fb v7-3-711
+557ef119999ea687ccb84eddca295755c24989da v7-3-712
+f15769bce0b811fc840fd455035270288e8d744d v7-3-713
+9ea14f097855e0929f86c86d405725717efb044d v7-3-714
+4f0ddf4137eeb08753f2593a32b42a1dcb1e6f4c v7-3-715
+eb268db98f321b93f5e7552920b6389f9dddfd3f v7-3-716
+6a76846b84eb0fe1220f8cfa19b1161145932d4d v7-3-717
+18e95db59826aa9379e6e3ada5d3540cbae1e596 v7-3-718
+e6d8b44065bc05741effbc0635c21506032d97b4 v7-3-719
+9e119e0ade5d804f174a3b67ad5e0d0e7449739f v7-3-720
+b23f583e132e88ec98f2b449b7216642ba64a8a8 v7-3-721
+de6968039340db04ec65164a3450a40773488e00 v7-3-722
+ee138f29259e02f62fe8181073e7a063523e50b8 v7-3-723
+6e5acfdf7a5a2b3fa27a529881af77c1e1b1c0f7 v7-3-724
+f4aa43d952f5bacc752951c80495fd20c72ba90c v7-3-725
+5049eacbff0e9688af99eb67a408cae5919ff52c v7-3-726
+d3c291efdb0b9f5cd286013b789eb1c91ae868ca v7-3-727
+233666f859339f425684af70dd008354776259af v7-3-728
+d08f05285dd102d8f071ee42869416d25dd4e72d v7-3-729
+37a4cacd20511ead4cf1a8ecb235276bc448fddf v7-3-730
+778ff2e87806133faa8fcfefbd41cad2b601bdb6 v7-3-731
+fa8bf69d3866eaf31e6c8fed74862feea11a40b0 v7-3-732
+509e55bd4a3feeb651ea173cefcbd933f723d8b6 v7-3-733
+fc8b4a06af9db05af800b1304599afd3e1229980 v7-3-734
+d3158bf4dee9270477defcde85949ce58fa350e5 v7-3-735
+b1536bbbda104edb11b0f5772e433d2b5388905e v7-3-736
+1773d5aa6437b0f88029a192cdde2c510faf517d v7-3-737
+eccae034465b9a44aa2389039ba06b25dc6ae7dc v7-3-738
+e2d36f345a7f1131e085336e7b471f718fad6c9d v7-3-739
+2c12cd5c1381dd9691af5e7d3e1fe1f54c929ee1 v7-3-740
+6e1fe64cf4404d899232a880552cf52998934656 v7-3-741
+4d1753f3e85c7fb6d9cde1a8aa9ded8d11cdcd01 v7-3-742
+67e3b2753a6ef97a94084b85f87873c309fea3d6 v7-3-743
+26c8b3b49f743ca163a63463da08cc3822322bc2 v7-3-744
+aab4b29520e79134e33f2c641f1d960de2dcdc1e v7-3-745
+4934eb2e22dc0bc03fd5d4f95706a69a1ddffb94 v7-3-746
+cd59ba19985a3b3bd66dffdcf59b00427f844818 v7-3-747
+56bb88c68f985365b0545a0370be59fcd97a4178 v7-3-748
+3e22fe67fa6935d1156738a34e50bffdf62006c9 v7-3-749
+5c36fe9f19a529fb6064b37b8e47e82cdeeb7ca8 v7-3-750
+d149f18b289fdf19363214e7805a0637307bd264 v7-3-751
+ed936effb1f374004db15f092b8c8ab87631fdd4 v7-3-752
+c83cd3d01128204d6926550cbe1064daaf8dee8c v7-3-753
+beceb0a18c79b5b1bda4822b34cb2d62b2967d27 v7-3-754
+d9b4cf53be2edbb872cc489aea32a4441b39eaf9 v7-3-755
+706c87d16d40ecdf9c6fba45bc47b911d8e140cc v7-3-756
+65ef7c96d65fb2fbf660797608809f0ac5d0c4b7 v7-3-757
+9eb0d30510f7b02aa5f55f400bfab08d847ab447 v7-3-758
+25ea15fdfa5c7d5894a06814fe9411b75050ebff v7-3-759
+8e54a32bcd56226647cfd3d8c5e142e3a98c0ca7 v7-3-760
+6834d6aeae099d6bfdff5151aa2174cafc22647f v7-3-761
+699f8d8f096d4627f97e8d3bcf64b8634a484c26 v7-3-762
+b6148e4a9c397b5dd1716cdac2f96730bd0f353d v7-3-763
+b29e55d0ef01c506ec48c0c5782e669bb1d80f14 v7-3-764
+915fb3d2dd8ffc322a5cc9e294d9bb7dfa8c5a83 v7-3-765
+b5103b7d9e1284ef9ffbc7d1170d9105c0769c4d v7-3-766
+be1cffa1e477c4a96bb54a3097d3369b23f32825 v7-3-767
+9ea81cd9b1f50054629547ce2eccfac1fa00d096 v7-3-768
+d179a8eff9d7b0adc561f4a4dcfb0b7612c1f301 v7-3-769
+da7a7ba36ed2a51f28e4d3f7e1fd550303e3ece8 v7-3-770
+3bd2c055319e086665af5e449498a4d5bf40f25e v7-3-771
+d828cab6964f4249db54bff6df0fe02d0f290387 v7-3-772
+3db9aee957f7eea6729e5bfd294e3a24d41c79e4 v7-3-773
+a8f5876e498125f4916c5f7168823885c27dad8c v7-3-774
+a6e60677aea727622dde15d1306c61588b805500 v7-3-775
+80b041b994d156360992666110964e74f7473d3e v7-3-776
+9a1a4c486e6bb367c639c29c6120d5fb1fadcc38 v7-3-777
+562bbee33aa4f9896cb23ed6de8fbf60cac323e0 v7-3-778
+2067ed78d37c331685ef8f293d6a23c372ca4b78 v7-3-779
+42edc5dac33c92876d93f00f8ab8c1f6bb25d3fc v7-3-780
+29f29e86602e4a7f83d4572d2fe75b9b0de2752f v7-3-781
+0de969850c0687d2018e025f31e5cef9e9ce1444 v7-3-782
+a80af62d5e3b3614ff9e058f42647c99bffe7481 v7-3-783
+fbadf0f6987790d98c3b3fd935fea0494743830a v7-3-784
+be4baed0c933e1f1543ea175e2e36551ff6caa18 v7-3-785
+8b3e88bab70215a18768fca5a90c6f07ac1aa5eb v7-3-786
+e1b98967a985f4d1ad889c8e69b822d9126411ab v7-3-787
+386fc822dd002958fdade4329845013cbfaa3dab v7-3-788
+43c15135926fb95fa82b01424677a9c37f4d0e46 v7-3-789
+8819ea6dcb72dcf61fd0d20f8ea1904a7546917f v7-3-790
+16e8a09e8ab08d2226dc84b12b7e434bda6b4fa9 v7-3-791
+7061704c2014e4563efa032672264a47b4b7b0d9 v7-3-792
+fdbded463fdcc861630b3ea61b9654374847231a v7-3-793
+9867f92c9b9fb082ee6daca816f859b53ed8e58b v7-3-794
+17a312ba38a0b606cfd64d82ed2ebc844828085f v7-3-795
+2c12c4e2fae8db60fbdf58b34c8b73eacdc32665 v7-3-796
+0cbea05f19c73c01dbd0f04378a65ab7de6719e7 v7-3-797
+cdaa688e3dddc442c1d39780b6ac0b5ac98c253e v7-3-798
+5e9730de25e9b4fc2abe14b8d6b0968a9e59983a v7-3-799
+c0cc0e0620dd935956a472e5b23369d1d78f5fb9 v7-3-800
+48b54c590dc83b705f2e19f9aea1e9a69fe09720 v7-3-801
+cd5145d2408bb52217417af654f5664af269e19e v7-3-802
+77fa4dee43fcd1c0bacad9dc85b3deb39e0ba487 v7-3-803
+2eb4b9ed2d42312eff32e845336aab748f7fe311 v7-3-804
+dc30c01f995623e65ee6651a46b12ff062df8860 v7-3-805
+f7e3f87ac9928df0079741258a3c6034ecc48806 v7-3-806
+1efc30385c417bb413f5199253edca2795f9da0e v7-3-807
+3b2a771abb39f670269b0ee9c4041bf02c2d5b84 v7-3-808
+918d7df425afb77261428968ae646efb95b15224 v7-3-809
+8904ccd5ee85ff326a05530c02cc90e1260f768a v7-3-810
+ad21448af931b3923d9b76e4efdcf0e966c9d199 v7-3-811
+4584e59860b8db6fc5870f0b8f0425f540ea90a7 v7-3-812
+4e6e012af15028dde0f55bd9bc676bbb14e481ff v7-3-813
+d5b1d6177b374bbecfbd5c75fbce28e148eeecea v7-3-814
+448a6e7cf32e14a4adcbc4066743e2f058f7e1c0 v7-3-815
+2b340e5c5baaf66015f3367208d9bf22ce1dfc8e v7-3-816
+01fa9313d4b560997234b94b2408e6bf64808afc v7-3-817
+ad7b6062a7f4041b736d45c5f045671d60eb782f v7-3-818
+36fd800b8c6c527c75bfe285d0ed0c3bc1cf45f7 v7-3-819
+688da4d486a019afa3565ffc553af6ee1a4e67d8 v7-3-820
+4936ee89b4bcfaa33f74114bd07f20af382af14d v7-3-821
+2f7883063b19039840a4a73fa227f6f42b9e3281 v7-3-822
+db401e5e4c5d868b7848486c84521f047dc04b01 v7-3-823
+f5ef9b9c18cd9345eca783fb0c6d4ed50e215cb8 v7-3-824
+6b1f3fc893cdb6d0a4fff5997cc8ff083940e727 v7-3-825
+646cb6b6ff2372c26cb9dc9ef1a0f8d562204950 v7-3-826
+5e17a12a3b1438a7ce044db02d9916ef36e404a9 v7-3-827
+13170a796134824375a42e77af4ff012ceed2b5a v7-3-828
+7728d626ae038dedbf3347508238ef3ab4216a9e v7-3-829
+454d35a4339251adf125de78a8a98d99105533eb v7-3-830
+cb185366f5c84852a7221ed6d9b274a7239ad06d v7-3-831
+670e576a58d19c2033877d26b4338873d8a7db12 v7-3-832
+b971097606032c6fceb961fd559121d5bd74a260 v7-3-833
+3ac9d7d8274e669d10178c4d95eac55080ee0ea5 v7-3-834
+d356b5ce84ceac41b036136807ebe887208fb6f0 v7-3-835
+ff193256398a81a520b44c67d661eee36c64ee95 v7-3-836
+14698f63de8db5b034939aa66b7076ab76bcd529 v7-3-837
+1c819b05529cbbc39982513271499e0217382124 v7-3-838
+2030aca407edf6c865114f459bf2d5d79adea390 v7-3-839
+1778d51fcbc37e819c305b860f98c949915d35eb v7-3-840
+b40e6a47ee53789e91b57c04d9ee7328fa9237d5 v7-3-841
+78321dcaa8e263cdf408f7880530b7aea7401a49 v7-3-842
+f4960ddda07ce46a098d9106ac1b22fd0f6d0f0a v7-3-843
+eccc0e8a82fb632efdfa600db3f65f4ed3dff01b v7-3-844
+171234e02b1e74a2482003d56e7110d37fb4a62b v7-3-845
+b06bb07d906be3be689f90399effd2b3b2ac2ee3 v7-3-846
+4dd43d6b3df705a513be75db8a1b50a83f72088d v7-3-847
+e49b80f267dc3cde78de78026368dec3a20520f2 v7-3-848
+dc77c2a14a05810bda7e53373d76b7f41341f44d v7-3-849
+07fef68eb0188adb3d750b92b78059cf41fc8c7c v7-3-850
+dd669f296568a7525e02ab54b615bde20d37c466 v7-3-851
+3fd805ca2a6a6ef231f111c6a7b3cd512abaf537 v7-3-852
+eea32254940fb4cd61339650e10a808f4e702e62 v7-3-853
+14cdb6e4d5b88aaaf7e33eaee87efec5b1c1ebf5 v7-3-854
+6604853dd8227c7983dc1b10f804f6aa4b28578f v7-3-855
+fb533fb6c015f40a3b1301c0c876c35665b0d6ef v7-3-856
+4905e038b1057e133d0e72c48cf88580cdedf26b v7-3-857
+0a3fab86f34d6bab27e0be69db4f39ffb664557a v7-3-858
+ecf21be84def6033137d168e0a66500c29aeffec v7-3-859
+6ce32844727d8d04e8dc91310d0a4118d81aa161 v7-3-860
+6fe728bf165e9b6974ef47e86d98b0eb14ce21f3 v7-3-861
+dd4f3ceb5d86f8367d4cfd6fdc898e493c6d0aad v7-3-862
+5c0652f455c9f2ae72790a782fe5b5fd1a0e857c v7-3-863
+a82ef37d38c09523bab204253b52e177dbbc0581 v7-3-864
+94342b0605fb9111b7fd4a45a8bbc72992c4c255 v7-3-865
+90d72df431e54d677f03171cbe558434029c027e v7-3-866
+0fcb050fd79d84ed190452e6387e42d320678fec v7-3-867
+b31989e2b05832d432557a32ed8901dce237dec2 v7-3-868
+23ce9a61bdc2a35892ec4e4fa22e8964d60dc6cd v7-3-869
+26e59a39fdd965ffe83bd654b705540551c8e0c8 v7-3-870
+d52c45b35fb0c3b77bbace6cec3deda8100fbb7a v7-3-871
+edd0bc1f26bd019cfd328a0dc2c9a854607e4a41 v7-3-872
+7faeece39228fde0ac5c26a362a223d0dbe9bba5 v7-3-873
+4d0b39bcec207130e483ffa66b6f51f999d8e95b v7-3-874
+beab15a2ef147b880bf7b5add269142b9af58317 v7-3-875
+787df0fc6539ff7886e9fabc85ea403096577440 v7-3-876
+96f478b812b14fb1a5710450a1174baa55c73409 v7-3-877
+97a5ce76cb7d5f635876bbddf35b421c0c76690c v7-3-878
+79176b78969cf5d182b378ffb8e341e22f18775b v7-3-879
+9945fe0536a32496fe4842524199b5c24bb8b0d0 v7-3-880
+d8acfc49d94e485f839d8e2534d302b91a98bf9d v7-3-881
+8653c39b85ea93e052bb0cbda571e7298451eebe v7-3-882
+76aa34cef80f5d22bbbcf60278c833fdadd70131 v7-3-883
+22adc26aaa9f701267bd1ee4636592859ee2dc70 v7-3-884
+c5eab656ec51dc2d40ef6e39194c74af868a4b5e v7-3-885
+902d6ab377ee2f011279b3aaebeb05d0f5c2bf80 v7-3-886
+015e53d9978721bbb9283a999c668c98ad2554a9 v7-3-887
+b0b253898cf9ff8f5fbacf69de76b5640b1b6a55 v7-3-888
+cb0c694517a08f1f8f548f0771e874537a390dd4 v7-3-889
+89bdd6d575101291c66f9e701c456ee71085d147 v7-3-890
+1dc160bf2488fb1332250edaefcc9f1e320c8e57 v7-3-891
+6c2e8074ea2588f710adc669e7a15041f6e80adc v7-3-892
+dc3efb6d5a0821c79f939db8e3b77a714292195c v7-3-893
+52e946d654e0fe978609e0a23dde3c8998f2ce24 v7-3-894
+11007e80829ca9d72813a9c60a2eded80a0c1855 v7-3-895
+af3a3680fc75f090e896d902f0b4c7a710c41d41 v7-3-896
+5aa74a2f8f9de4a6c10bdebbef910d6750f2a980 v7-3-897
+aca1886102bdf19f755dc5eb1ac379f1f0680f6d v7-3-898
+bb3cfdb626077d9236447f40ee725b9a5d78216b v7-3-899
+b53fa3b431934de82d3bee329643bbe0856f651b v7-3-900
+790238e5a46c70f45232c0a54d0c73a6ca1d37dd v7-3-901
+b01e3cff92530f6c317e0cf2c0ba0fb4f97df883 v7-3-902
+166b3df562ead7b4f85a494fb8a6eef40affdf85 v7-3-903
+bdab73bf24a8b361a42ffcf429c0aa705d4594e0 v7-3-904
+8e1d1da398b378cf03c0910979cf475ddb2df7e3 v7-3-905
+ff1f3e42df08b2ebc39e3b1f2c80f4751bf16dbc v7-3-906
+9f3da1dea7c0944837e8d5a080eb59a24f6c9dd7 v7-3-907
+4281875776fb2c3127d08a03c3600b58353c9796 v7-3-908
+b79f3c3a584c701e93acd1881a934c931634c39f v7-3-909
+d8d9c591c50fec51b64c12bd2f42d3550bd31d7d v7-3-910
+f1eab4f77a6fe4b77508d86a68a6681195806607 v7-3-911
+62eadd7de409641de83ce61e1eb311e9116e06fa v7-3-912
+0d3573091d42d4797f10cff1c4139557d384f899 v7-3-913
+9f642ac84df9303d34d0214da2ade28f78ecfb6c v7-3-914
+d8053e6bf72a555ed34201c6edb55a23b4fc9965 v7-3-915
+f39af34195702c5587eff88dec51b40e327f418d v7-3-916
+3887b02953cec045611021e0adcd512b3d127692 v7-3-917
+6a8ffaf0585660badbb817f6a2f1cb583c9f1447 v7-3-918
+12636b8248163628e7c8df68210dc17932440157 v7-3-919
+923277a9cce4316d6b4cb3c6571dab538a6b0108 v7-3-920
+97474f967eec7f24f09d20dbac65ec9bb660bb2e v7-3-921
+1d56e5dfa08e68c9ef0645cabf076e401799e3bd v7-3-922
+6ecb80dc6521837e28bc58d27539767d6947037d v7-3-923
+7eaccdaa530431c15fb0e0803e5495074e883bb9 v7-3-924
+04736b4030ecfa2c9e8d6046ea533718dc5d8ff0 v7-3-925
+c80838526eebf3374fc42febcf40cd911cc1523c v7-3-926
+d67e292af6f9d259d0893c8062f3896a8aac000f v7-3-927
+6d45e6f974159e816a4300877296e9a0760ad113 v7-3-928
+94aa0d30a3ea6291daf7e6207810ec5282cc97a4 v7-3-929
+d85196defe0da017ff6d547e36bcf40aecba9661 v7-3-930
+fe0c7437ae8b0e05b57990549e1ddc71e456f18e v7-3-931
+b7f2d97ae2b7442c46c48ef36d9e33c3ddd34db7 v7-3-932
+c9820396afb971035e722ddce2058d5db2f0fc64 v7-3-933
+000bb500208d54e17de26bd5cc5a18fae8d1729c v7-3-934
+c42e130ebf36515e574d89efbe98fe380ec7c694 v7-3-935
+e7361b2d8136f6468daedf1bec7390d77c5c5bb1 v7-3-936
+8ec7323f417d998685afc26bbb4e466eb0204352 v7-3-937
+a2f03b41dca7024da5e702d016ae52fe7f51594c v7-3-938
+48a22f36ff45659594ca865f502fe95691b2e332 v7-3-939
+e2db42528a5bf380bc7e92e41afc807b27f01c12 v7-3-940
+da71e66dc1d4300cd792f0da77a5afd99d634c6c v7-3-941
+358c10968c7fcb2599356b419473a3fd46edcb69 v7-3-942
+736b8e18a3bced7e498a6b81e7189d78cf4671e0 v7-3-943
+71fa86c8fd4a1af0a27a880ea15e3a7b97334453 v7-3-944
+80eea7a9d6b9c2e7e8ceb18d6a090387f7e1e9f5 v7-3-945
+11376842075637114ee3714ccbc2e0e8a432a4ac v7-3-946
+a84f21892563be88839b4026bafba77f9e9a1fec v7-3-947
+a6f0544df95e5f783861d3c67d84bc5a28a315da v7-3-948
+cfd76908da252e03f46ea15cde44a3664e895fb0 v7-3-949
+d4816e7c33289b9c8aec739850133484c5c3e8fa v7-3-950
+907b1f035ee7cc61fec1463db85a9eaba4717120 v7-3-951
+2a166caf8709876053f9b32f4f88590a4fbc6899 v7-3-952
+7b789d337820088f09f6a8fb488efd418f702133 v7-3-953
+1afdb7d21c14e15a1239d406205563dd702d7d24 v7-3-954
+fa90ebf2c8f36d98ef27b2668ac1e1c11db75bbe v7-3-955
+0bbacb6a83bd678266a0a864e47f4e03927103fd v7-3-956
+c16602758d847665ed50138a562f1513ca5dedc8 v7-3-957
+58b74ab7f29df09e54bf76ac84697f04b9f4c163 v7-3-958
+ef6b11bb183da058edf52c86ce705726ccf72600 v7-3-959
+e67522c4f56646bd6ef91ad63b152bcec96b2e05 v7-3-960
+d5177d5ece0c539680390448c8ce8d05a6d61201 v7-3-961
+0a94ac379769762200c427995551fa4325ec8f28 v7-3-962
+7eafa576528e6921f337da5c1e3e2d0a9617993a v7-3-963
+7d81f4e967285d14c9e9901328d2c66911a9a2f2 v7-3-964
+8a3ca4adb5d8046f87aabcf30a2b7aefb8b9d46c v7-3-965
+9b800f0a757fcbedc2c6a1851353c3e5044d39b2 v7-3-966
+20e30e31bd86390590e288516670b81caec6188c v7-3-967
+dfbe53a54c790d63f8788c13a6a2d18198825605 v7-3-968
+137f9d41f50894cd25e5b47764af817dd84037cd v7-3-969
+ccecb03e5e8ba41db171a5535047f9a30b5d391d v7-3-970
+8d6bb2338a583af5eb85589949065cfe46c42bd4 v7-3-971
+ba53304245f033b6cf2f6088c09f45dc0d98c47c v7-3-972
+09e1e574a52d38522a35af8741b3f8ce92336398 v7-3-973
+92fec4b83be56a65ed81f25885717f6db7639854 v7-3-974
+44b89b025cdfb6a7371a036ef1b2dd93670b2a15 v7-3-975
+015a8fabf90072ae0eadee5c013f7db00f83977c v7-3-976
+21e13403140aec6f32a8f9b49dac02c37945ab11 v7-3-977
+fe8a0a6a1c2a2ca51c92275a9010999106505ed8 v7-3-978
+a63361b9097952faa9c9eba2caebef09b9f8b62b v7-3-979
+c83656c9745a005df1aa7d6985787048a1884734 v7-3-980
+4ff8fa416a0dd64046e0471933d09f7f19a4ea0f v7-3-981
+dde1cf311be6edf32243f03fd8436bdf9798de93 v7-3-982
+ab5154170c3dfc0dd769243e1da53a865e1f69d7 v7-3-983
+94c5441984cc47971ac49435d184c13cd6d3014b v7-3-984
+0c940b6f282836186f428d201760c6f6b9b52fc6 v7-3-985
+3cc2dca142a0aed29befbe6d2944ed580d728545 v7-3-986
+032c9f916f257ed59f7c55a6c8113791d3def365 v7-3-987
+035fb0d5e7ce67eaff19a6cadb37b57c0c25a36b v7-3-988
+cd005ab15ef3fce8f551c81ea10c93889f42d09d v7-3-989
+9a1d78f828261181232734378f73d648148a42bc v7-3-990
+8fe768bc1234fc817db3cda61ae9e9dabf4ae958 v7-3-991
+89ea7593fc0cb9ec66cc04619217447715289a78 v7-3-992
+dff1542e64f95a3fe10ea24f4007206d53880087 v7-3-993
+f74611bfb1b77eb2ad42b6d74b3e3657cf3f0725 v7-3-994
+6d517f6e5f0b031cdb386878d8d428f7f2cfc2a1 v7-3-995
+ebd94eabfd8013a605d8efc7df64a970531fd5a8 v7-3-996
+ef02f32d8e53a7b3d7327ac79359a18070e4a101 v7-3-997
+47e6dec5ce3cbc8e833480b8300132d4bf5f035e v7-3-998
+e6e60d9da892296ad770b26a22f98bb72c4e1b7d v7-3-999
+d037b9cbdaaa0af2b383c93acd0fd87e8eb2b8f1 v7-3-1000
+9dbbddb2ed10936c20048ad28a2dcb9fdb6cdd79 v7-3-1001
+b498224f5b417bc436c9b967978628703191c0d9 v7-3-1002
+ce94a870b59bbaad92399eb782edc33a855e0b93 v7-3-1003
+cadb57fbb78165c81fe4718a355b5f73c641bb62 v7-3-1004
+90e9917d4114461c5f7258c04e61de1dff2e1a74 v7-3-1005
+9a2183bd829502597d52f22a1c27fec8399298fd v7-3-1006
+fba9c0f86f77942d47a5505b065e01a733e7f111 v7-3-1007
+8cb14f59a3275cb183f031e2aa1e29e230635d6f v7-3-1008
+57393dc4b811a1283a77c759a09bc52ba78acb8d v7-3-1009
+36ddcf4cecbc96b9854af6956f371dea205a6890 v7-3-1010
+55bcaa1d2749f9dc22187bea848b002220cfe960 v7-3-1011
+432a6b8c7d933dee8faf25a342e857fa0a538eea v7-3-1012
+1be43c095affe8e945751a5cb4e21210f31c02ab v7-3-1013
+6a2005efa02b4ae30fa4867db1463fd4a3689843 v7-3-1014
+45f97c34953728cfe859cfe5212c241fab1da20f v7-3-1015
+5cc98a5898cf9ff0841c78acfe1056ae075a217a v7-3-1016
+532c2e850256cced37b8864ee7042ef8240f135a v7-3-1017
+80170d61a85cc03d66228c16c80cd8a4898a971e v7-3-1018
+08ac4698095359c3a888b34074548435e9775973 v7-3-1019
+f7944ce459ac77416617e0b2f8a91a9c8cb385b6 v7-3-1020
+fc997f05cbc7b566df765c79452a541afaadccb8 v7-3-1021
+849180347ac359fd52b92d70b545800126178eab v7-3-1022
+f0c37f5cf4eabb04044ccab4031cc4056c5a47a2 v7-3-1023
+7b835b2969af137f979b633977d59e13cc0960df v7-3-1024
+b2946c06d1b6d4e9d38fad1d4281e2d4db3523f3 v7-3-1025
+888c12c899e552deb33b2e1e8ea3c8141352c3ce v7-3-1026
+04086e29756318d7a7cfe3d35fd38ccf550ac366 v7-3-1027
+4d81fdda8f35cf764744161118aeaec948b9fc90 v7-3-1028
+e7016af0cbf92a5562c01e95f2cec306b6465783 v7-3-1029
+d1f3c77159f9b69f229ee0f70fd98464b2546920 v7-3-1030
+96c1a785009768720fcb16add8b9daf1290ce56d v7-3-1031
+f262fb02889d46743226a78363250e2e1ed7426b v7-3-1032
+b2a8e3a66f8cc73c3942ef5cb9c0519df86203cd v7-3-1033
+37e444aeb33b2adf359f8736807f18ff5dc11019 v7-3-1034
+626e9ccb7c48b3fa7ff6d2ca5efe91bff39135dc v7-3-1035
+b22bff1a6af81dd78f8e9ff0bcded471ab858245 v7-3-1036
+7a2be4a39423e4763ca164dc77fcfd4b27f91a8e v7-3-1037
+6a73ac422c67d7ad4642ae9194cf9d4c832021d2 v7-3-1038
+321cfbef943199e8e967f6354877ca8fc07e4551 v7-3-1039
+b9f87487d93597f69f09ecab8cdca11bef6c09d0 v7-3-1040
+63c9b681c3dba1cfcd2df48085de2453c43855af v7-3-1041
+fa39483a1363d533f9c7897d476bf0ebd1b8f44b v7-3-1042
+1e8952a5a726ddc1458ff40270cd5da16be3f272 v7-3-1043
+0cf552b325b55d417079ad28dff4e27afec5a2ca v7-3-1044
+29b2be2bba0d369fef85af7aa3196f8b84cce35c v7-3-1045
+00eecb2f8e3e9664ff00682d278a2b1e19cc4b09 v7-3-1046
+89bec74fd7936cc425b42f9e882f1f3864b1c95d v7-3-1047
+19d406a8509d9755b05af7d5ea521925b01f0d76 v7-3-1048
+074491a83571596acb6aac6d371140e8f99fbc24 v7-3-1049
+38276cfe40b2069f94b159cc14b4ade47257c836 v7-3-1050
+70600448f9e7f3bff3b8b0c2f2733662bac08ea8 v7-3-1051
+12421d8a45d5597828b8343c31faa79f77d9c512 v7-3-1052
+49f0fcd9762ce5057e4ac22417105b3ce43a35f3 v7-3-1053
+219b2fcad60d27febcaf7251a91be331484b2c98 v7-3-1054
+5679b8ddd8cc0eb004cbb61babb336c3af398c92 v7-3-1055
+21a99611149b0f1c200e001ec26b8b07c6e28c45 v7-3-1056
+90beab957ba9ebeac150bc5a56cf6ad90f53336d v7-3-1057
+66e615ce7f61948a2a4a8615d703a42d56763490 v7-3-1058
+548b889fe3cfbf06ab50de373df5e65f52cb249c v7-3-1059
+cb5c1e37ad4d4811e5fe178f14c523b178da81ec v7-3-1060
+18ba89e06fab93e8cdf7ca8dfbb34b66ff9d61d1 v7-3-1061
+e4e48d4ee0409509d56f7d654b77a35133283bc7 v7-3-1062
+4157fef7b95074cac55977127964adfa883ec030 v7-3-1063
+3857d399ab41ee8af64c5307c27da64b01e0a233 v7-3-1064
+07c534fe9b6cdbfecfd100b7e01f894d6708de1b v7-3-1065
+4c46e1487c634997f4701d8e68ba9ab019f85227 v7-3-1066
+52a4f66ae1f5695426de21877b2954d11ad8a4f4 v7-3-1067
+59e6c2bd68e38244d2133fc8d76bfc9c7b082d9f v7-3-1068
+6ec3dada4ad3c7e2551191e598cfb6d37bedac36 v7-3-1069
+c316a30a889217be4158fba900c85d9d44ad3a1b v7-3-1070
+857f6c53f1172ed836d44f105f6832973369bef5 v7-3-1071
+9f502d8d5165a79b361ad6048e84c278e1397f88 v7-3-1072
+f10f63aaec5c08e6f3b1b3abdef6ce3eef1cff6f v7-3-1073
+b943fd24c351141113dba360bd1d1f02b38813f5 v7-3-1074
+779ca415f8e142ab5ca74f95c8f732d1f00fb7dc v7-3-1075
+93b7ed814bec8a9a0b43138be7500b948d48eb92 v7-3-1076
+80b0081824fa3084d0e12f0b21f6e504b4e5e076 v7-3-1077
+0dce3d812e7acc74c39b3d87d8bb5b3a4dbee878 v7-3-1078
+bce2051173f01564805158ff669255359953fcad v7-3-1079
+7a35419393c36edcb710602edba31d5096d357d0 v7-3-1080
+9e7ef781d494694a36e056631dbd2c4357ab1090 v7-3-1081
+2d15582e132f62aa37e5eea5e837b3824f148dd2 v7-3-1082
+b3c59716e7001ab5127c259c9fd3552de0d36d53 v7-3-1083
+05d57d7c2d5578f1d794151be9cbb5aef89d821e v7-3-1084
+811a4c9b51d808cbd54dd0bab606d7cc1cc2e412 v7-3-1085
+c1622ff9ed8d984604a47ad0805d3fc528452bde v7-3-1086
+4d92b873acefb69e112fd73b642bfdf7979f1355 v7-3-1087
+2f51ee8825dbeb31713e635fd8d77ef77742ad64 v7-3-1088
+79522bb1712556183073b148e085d302967d7260 v7-3-1089
+8db697ae406a8ceb05f9fb8b45a70980904f230a v7-3-1090
+371cc0c44097772ac13e0e3cb59350c6be52257a v7-3-1091
+9d97a0c045ef5c86652c7fae4d4cd5752bcb42d6 v7-3-1092
+08fbb1ce1bc56e3884c5d35106df31a9cae1f954 v7-3-1093
+efc4fb311d5d45f6320b9d17ed47d24748335bcb v7-3-1094
+ed4e689bbea1c45a8aeb808b526dfd052470ef20 v7-3-1095
+2db0050523719e39f17f4bd855310bf5688155f5 v7-3-1096
+0c25fa1dfd97721cd4c92f4e7a9a524a24f3f43e v7-3-1097
+26f2dbea7443f719c854c7a1fc35dbacdd129307 v7-3-1098
+542af01979be709a4763eb8b9cc1cbcfaf584838 v7-3-1099
+bf917ee1fad22f643d7ef1a919b233f07fc1fb3c v7-3-1100
+761e42cc79c2560af55ebec0ec1060f547e64577 v7-3-1101
+1c5da99d1b708b7af2928e7bc0d9d57935872958 v7-3-1102
+832bf8136d86dd17489d962cd2d7316d7edf5087 v7-3-1103
+fc4d7f02ea3ac731a9717438c72aba098b117e8e v7-3-1104
+a804309e7327f0ece015aace3c855e7987f0ac3d v7-3-1105
+ec72bb4a0fc2e7f0d517cb12f784770cea9cc19c v7-3-1106
+bd6bef0bd0fbeb79b440e429f5e077169388198c v7-3-1107
+3534e9b4fa42b392399d66d08a1dcdd230accba5 v7-3-1108
+450e13fe16211217f32bc57c3827f439540398bf v7-3-1109
+3849c811cc0bccbe09a559e2be5fec7e810510cc v7-3-1110
+43de4ebbe7ad009199987337b864240ba19bfec6 v7-3-1111
+749e2b2755d59eedd6fd28e7d9ec47523b722be7 v7-3-1112
+0798b096bab3efde994f0b50d6776ac72ca0f41c v7-3-1113
+532c31f9e92fd44526d02d26c503a15c1c1c78c2 v7-3-1114
+3f2319a953b3c2fc8cbe9ae9225080a5b30a638a v7-3-1115
+66a9e8fa6f45ddd8dec5b98c193abc576330e4d4 v7-3-1116
+97560c16ca99a1341f31d88ed9f508d777647b5c v7-3-1117
+6a706ca7a889d27ecd6b671e31dbe28ab6b66f28 v7-3-1118
+a62695305e031260557ff0cde6eca1db5ab9e3e9 v7-3-1119
+d1376091d18b5a742ada87bf825d20e99ccbef19 v7-3-1120
+4b9503f0c7d3d75d772c2c0dbe19616da2480749 v7-3-1121
+7793e737ec8723a18d4c5468b33a895249ba4f02 v7-3-1122
+77ecab3bb2078fe525602172b35c2031c819ade3 v7-3-1123
+be1e4acb30cab46ab439e45b9b6871a7aff23800 v7-3-1124
+96f3348f9f119a996ae8826ef4d5a06c3f7e677f v7-3-1125
+b25a1b2e3175902e49a69e8d9ccc5c1cc43fbe3f v7-3-1126
+532a9855bd30d28cc14848ce5136658a273bc999 v7-3-1127
+47906f888725760ac704668b71057629e266e486 v7-3-1128
+f824cb97eb922975cdc1025f3c2c62f1bdbcfdd6 v7-3-1129
+ec24ff78a79c1851d8003780035d6c55f98dcceb v7-3-1130
+82e6588762e4aee5b0f0cd51d5c124ebfec6424d v7-3-1131
+b20dbf3a5370543ffaa1d6fc337df1969843477e v7-3-1132
+03375ccf28a27ed72f6cf347383aaacbd1a51e4d v7-3-1133
+531e598651fc6a7c28bc808d82c09ddc1759bf4f v7-3-1134
+e4bc21965079eb6948d8e22ad96d145659852707 v7-3-1135
+343d09006056ff408f08850317b8e8caf056f5fe v7-3-1136
+c02c7df9bdc91ae08ef626d4a8262fed47285c41 v7-3-1137
+47222d8b1e94c962f9daf6c2ff3f6c6ddcb71613 v7-3-1138
+3b5a023a45434e825b8dbeed551cf7f4578243f6 v7-3-1139
+7fde662e1db24077abbe26e6d78c286928f5c9b6 v7-3-1140
+10673b3531ebcc18467d04bb806036cbee1b8e2b v7-3-1141
+65cef998f860b3745880622cba74135bfa249ae2 v7-3-1142
+66e849c4558aca6c522026882159b41994d0c0c1 v7-3-1143
+8360a59aa04b8668e377a66d1fc46e9e52b35110 v7-3-1144
+a30e3762957d61966152040315d160f860433576 v7-3-1145
+e3f9e33fb28c367aac7b2270b6fd304fd755b6d4 v7-3-1146
+3cd3cc1e91193a0b45e6aff1373cd4802e595a16 v7-3-1147
+220bdea4f57919c290d92b1f6c83a7252cd660b6 v7-3-1148
+66803af09906a828b9f41d7ae0f7a379137eaf99 v7-3-1149
+3dbd251777de232c168d87650acda5fec408146c v7-3-1150
+4d7e3df04256790855f7a6dc289f32ffc04da133 v7-3-1151
+9909e44879b9f80679fd05af19a423b2673b2301 v7-3-1152
+bc3f4804cf470cec5773d8842743efb760f69102 v7-3-1153
+6419ee8098c80f0418081c73b790b09c61f13c3a v7-3-1154
+bf1e6326df1104cabc04b8490f9456dbda901fd2 v7-3-1155
+8c4324e6f4779ee316361511ff783f6344750be9 v7-3-1156
+2f1ee97f5f23a5f9e1c572ed4afb50fb79ce7a35 v7-3-1157
+46077370bc605815f5e41cbfc925120a913acbaa v7-3-1158
+208a6c04e6b8221c1f5187391d86c5b57e61445b v7-3-1159
+60301d4d16827a961019d72a78e811f41326c680 v7-3-1160
+ff393592644960783e9a1c7c7959a8cbb0954673 v7-3-1161
+b8eabb6a96871321bec8526fa04ba1ff1a96780e v7-3-1162
+70b1178dec7919120632cdeee6056e38108356a7 v7-3-1163
+4db0bf9f1b44d1f0d42a1863732dfaef73c9971d v7-3-1164
+05b8436873d48055cbd24f043548092755d77be7 v7-3-1165
+d59ff2114733a526847ea38d093897f496f73ffc v7-3-1166
+81dedcd648216d6b3fc6b967368fef23d8ee1154 v7-3-1167
+ed47632fd1498d50e31ab5b30aac403de3db2496 v7-3-1168
+a83fb2bd8c8ea8865f460f7d82d8ebff8202cced v7-3-1169
+14c2e63caec65cca0d315e82f90b5e1d84430487 v7-3-1170
+fc7f985df53745d157182585b01ee5dadb722a62 v7-3-1171
+96e154e825a7441274a615e7d7fdbe68e5534ee9 v7-3-1172
+b584d361e7461c79728585f16f408984b0234fdd v7-3-1173
+52850ef928f85755f005267c1f02fe9e9f898c99 v7-3-1174
+84a8d1ba81c393dcc3a45eb3b20fb6ac5f18df7b v7-3-1175
+e48cabe984537b06cfa945926844c4af96799331 v7-3-1176
+e79a20f07daa91051435208887cc31b245555046 v7-3-1177
+c4d4f0fc12b9b8665d6859680155797be960c36f v7-3-1178
+d84833983de7708de27774e3f01e7ffc8c03eec6 v7-3-1179
+04b8912a9c85e72728a2cd6a4f8e6aee82525b31 v7-3-1180
+b7bb20390111b75616eb66558aa9517901eb0144 v7-3-1181
+fa98c2b030ed5ac8d8c8139405d20ad6c611c065 v7-3-1182
+044d23a64c177549b4b5e3183642f3a5b286d14f v7-3-1183
+9e36c6b1ebf4554a24bd879965f348b81ad5ca6a v7-3-1184
+6d935f45c489b346f06aef5b1bdd87cb98b8400b v7-3-1185
+7b8991e084f9bea2dde9ceef7a245254d656b6f9 v7-3-1186
+fefd8d33a7ea43f86d6e5a2ab30440140ada14f6 v7-3-1187
+6f7ed9b799a3db282f0fc076d8232752716a4e00 v7-3-1188
+dc78a26f6f64bb1330b9027559ce0c8fe54ba1de v7-3-1189
+25d64a4edc0b0f3f17330a7b12f3c1ca141ccfb3 v7-3-1190
+4c42efb4c0982d305ec9ee99bb3bddfaeec2cf87 v7-3-1191
+07b9c48a30e973833ee70d38633934f6fc2177d8 v7-3-1192
+8b46c37c4b843039e5a543be98978e79ff6f3d31 v7-3-1193
+91136a41f83f3716e7ccb4f2402216ea215a4acf v7-3-1194
+4837fd61be52d420c69fcde0621cd5ecc298d2b6 v7-3-1195
+56fbf60e94766a202ee71749eea19a862695c92f v7-3-1196
+2fc1f3346bfb3229f35455101a5944e6785a02af v7-3-1197
+517fa1a34c7cf1c8fb04d43976ad6c381f48cebd v7-3-1198
+be2973afe77045bd749c63c46ea02f61efa55862 v7-3-1199
+2945fe016b936c9e3a89db48692495c83f1843a1 v7-3-1200
+d8f65e6238fa2bac706f1a4868e8d38ad71ded64 v7-3-1201
+1707ddb6f5aed99b69fff8a66dc3eb8ab40d7f46 v7-3-1202
+ba328b4a990ee460cc907ec59aabee8d872b7768 v7-3-1203
+0792cc5133ce1f37ad9e1d49804100b28d0a391b v7-3-1204
+d02448031708fca0df590f46f850e33acc9f9651 v7-3-1205
+8dd2769ab75c07d88feb49d1dd489a1282854217 v7-3-1206
+6ae32a64e153d7275058d965e0c1c12d106bc7de v7-3-1207
+784e342ddcaeb260ffaab5f0dd30ec5db832842e v7-3-1208
+afb00cc8caacb8969705ffae0316bb9c01156e7f v7-3-1209
+7155782d94fb88e47e252b159dd677c31a3f14e8 v7-3-1210
+1cf02fbe6281c8efe63f866470b6c44d5835125c v7-3-1211
+81e623ff2e554695c372b7b06bd826c6298bb8b5 v7-3-1212
+ae05437a744a3b6f87d6f3304a19e5256849bb1c v7-3-1213
+bcb84438bb5bf27101b25ffb2c2267ab6ff0e946 v7-3-1214
+8bbd0ff486b3cfa711e0a7f305b4a0241bd5dd52 v7-3-1215
+b89aa3374b7fe64968421f4e20cf22cd3e95713b v7-3-1216
+613651492c1905f62cbbcbfc616d7935234badab v7-3-1217
+d10ede931224a9818a98a58bd9382f77728ced1b v7-3-1218
+eb5c3508cd7da14f8d3337ca4dfabe4122ded20c v7-3-1219
+ba7db05e1482457a36b19ed608f820275fafb9f7 v7-3-1220
+9f7b92f232d31450fd04ecec3e89b027c0f28b02 v7-3-1221
+07831d280e90a87ab9f42a9c96775ef2bc0cdedf v7-3-1222
+5cd32322154c1c5970194eb5300eec2ddb8ccc30 v7-3-1223
+0a379dea13c97df4ec2ba1487dd50c1e8ba0c912 v7-3-1224
+27b008d5b7ac5fab02c6934b87f258bc4715aed6 v7-3-1225
+b34d719b13cd9dd44485600e5cd939814b9b065f v7-3-1226
+5cee875f30961cf1adadf386b7e2764ea8aeeb64 v7-3-1227
+620d9b59d4ed9deaac614c707c71257907b1dd21 v7-3-1228
+b6e693e1f9461e5020e4cafa1c6e1de24776e11b v7-3-1229
+f5c822e5a0eba6f490d0be9f6892de929295be87 v7-3-1230
+537bbfff0c5c0bc2307a85133f59f07b00c55e41 v7-3-1231
+a594ce86b5eade96cb84415b3b027abe611c2238 v7-3-1232
+4ed713442c51625160cd0bca612d9a3417e4ba14 v7-3-1233
+f4969f8f66e974584e8e7815d0a262c5dca79638 v7-3-1234
+9ae0fe46777674504e0f372e68cfb8e0be81b2ee v7-3-1235
+39980afcf54aafdb9255424adf5808af45ab2242 v7-3-1236
+5b2c8f3b390632e1e57a3839f040146f6798a969 v7-3-1237
+048c69ebe8eecb218320030d9ea41fe4f6290848 v7-3-1238
+e130cc3d17af412971143b8420d6e7b1cbd13ff2 v7-3-1239
+bc9125136c69a4feecb4b68912fa04380f42b77f v7-3-1240
+c8747604696795a300f6ff05091813d691f9a488 v7-3-1241
+b4a2eaf28b51327b4e56b4eacf4b5d72a52560f6 v7-3-1242
+8a7d3a73adabaad5e9fe079acf6431982145c7d1 v7-3-1243
+b4a71dbdb78790ca423103ad5deb71b1df9b5b04 v7-3-1244
+43329b2b5b79ed2e1017869ee2e0b1caeaf2f0f6 v7-3-1245
+a1b41dabc682ed8f8770a12c2d3a227eb348885b v7-3-1246
+f451d60ab8ec56d02a7b5f2d5c16187566279886 v7-3-1247
+3717d569027d8ec8b62e42e33f91333ac22ce6ba v7-3-1248
+b614332f7df2f6f471bb4bd93767becd7844b90c v7-3-1249
+6aecf486bb347ac6885afe36d62ddbbf2457f898 v7-3-1250
+788f4802967766b7f3d6dce83cc027baef422f4a v7-3-1251
+875a0aeb301c3fb2be8a79f2d82e324d80caf4f3 v7-3-1252
+d6a7dea44a8667d834e463b8658cf85ea938112d v7-3-1253
+5eff37e92f03771aee77a3688d79a73e5b6107e9 v7-3-1254
+f8d307ebd74a4097f7083ea8117be0433f00c7ce v7-3-1255
+322441058afca6a8aa52d34eda9fa307608354d3 v7-3-1256
+5751284311f37399cb7a66d99fe317de4ae86ea9 v7-3-1257
+c9e2ccc53f2e119e247da7fc9111b6b9c9385d93 v7-3-1258
+7ab94cb688bebd694109442be4dd6edb6ebe3c85 v7-3-1259
+7aa4e0822dec0840770d9f41052a772a887cd213 v7-3-1260
+1cf89d38aa7628b55f1a45a5325adc83abe85dc2 v7-3-1261
+5e0b6a9282df8b9435da372cad77482f1f5b20aa v7-3-1262
+a02575cd564ade1019ea89db07c1c1d0c4b5418c v7-3-1263
+558c815e1a38d7ac2fc61c4155aabf8e81a14034 v7-3-1264
+53c1b30632df47993bc00947078dd31a226c9a97 v7-3-1265
+bbe4bd64c68c64afaa6636e8c3e9a9a6241e91cb v7-3-1266
+cabdcfe72dc398fd67bbbe02cff5e11e4dc2506e v7-3-1267
+72fcf674e545eb87bb4ea996df56e4eb7c04f6cc v7-3-1268
+350239b0e9eb063d9f84dfa4bc7a2b47d78e9afb v7-3-1269
+35b6fc57a2868b235284d914820da0815e62d54b v7-3-1270
+034abed357a1a2fabe624ed59ea49ebdec09d790 v7-3-1271
+a00cd1839ac4f3467e1e51e619b4c65ce4e0ee81 v7-3-1272
+30910831e5b0f0eb28a8eea7412f5ec9f3533ab2 v7-3-1273
+761cef8f5d1d42e315fb85765ee90857981fec06 v7-3-1274
+8875401008da99a39878478a293f833f68481ffc v7-3-1275
+d2f9f67924e77ec3d90164dd6ff2e50c5107faf0 v7-3-1276
+6a7ae677d6a1f116b685fa0f892052e20003eaad v7-3-1277
+cf52d2a8c05cd037c049abef0f58fd918146f3bb v7-3-1278
+cca600e6092839efeb3795db863916959921bb0e v7-3-1279
+1cacf785299e771ca463c493c8c870e395c09cd0 v7-3-1280
+19ed30f7cef76224ef39ceadefb64387eb986342 v7-3-1281
+22ac43fb6d30ad1097d0c7e8937b28efcb162137 v7-3-1282
+d6ceddc0be86e46a5a9a696e36c54b9d133f2203 v7-3-1283
+7b20dc8041645778eeb2f7823a4c1c647f735d24 v7-3-1284
+14e7a115d54d2c095f31ccda2d04fbcf775dacde v7-3-1285
+6ddc1785c4ff3779c18f5c313da591a052388b2d v7-3-1286
+34c629c3b4bab5fc755e83869d929f8cb322bfcd v7-3-1287
+8b7baf39a345aecf00a6116b5da211b51c6e3457 v7-3-1288
+1ed945570d47e9a60694ed1ef3a5b208243657e9 v7-3-1289
+08d4c11cdaed2c5d95e2c0be3b0df91d01f52b84 v7-3-1290
+a6ddcab6a240d22f965c4961bb93ddfea6a74c73 v7-3-1291
+cad8d29b0bc0356a49a455296e5e79eb6f38139d v7-3-1292
+18b43970fb7a796ab740e65baa4ff2ba46f929a8 v7-3-1293
+11d0c6df1d7bdc399b34a8cc70f354d6ee908661 v7-3-1294
+93cccad6a26b439728bf3c155ed5532001a2f2ab v7-3-1295
+c3a82208e143e4cd4a3b9d9b1716eb9d876bf462 v7-3-1296
+cb0a5c9c0f9bcc6c5a18ed97762206309d3e334c v7-3-1297
+dafd77a15d44cced4e405a9fcfe67fc48a02004a v7-3-1298
+f063be86b6323f396e6d3a7be73e860e636eb51d v7-3-1299
+56bc3698f8c6ac275a9a05b64ae056de619d226b v7-3-1300
+6cabac58f26fe9d8b608542d9fdbfed3fc437c90 v7-3-1301
+5569d11ef585033ef40e4402cd6a52453e4d13d9 v7-3-1302
+6e611380b4cf586f210de94d92a4f158b6900a5f v7-3-1303
+46d6318d5b965b77278ea252b25209468214dd2d v7-3-1304
+6f24376028af97c93b426cdbd46379795be7cdfd v7-3-1305
+71859e71b1f902c28b8842bc7092dd155b8c7f88 v7-3-1306
+3dafc80e781b8d5ed12d6107a2c804067aeafd90 v7-3-1307
+71e066e10a4789eeb9553aa08f9ca8e7eec96532 v7-3-1308
+a686295448918b7066bc52e3fd9748e6702c2219 v7-3-1309
+b49784c49d537fabe083cc3f8cc460629bb6957f v7-3-1310
+28e6f5f889683fe161b7bc260bd02b742157fc5b v7-3-1311
+80bab8b1a30db72b7eda880b0442ab0b0f4a1611 v7-3-1312
+afbc9dd67cea81e73d64f7ecce47dfcd35d48865 v7-3-1313
diff -Naur vim73.orig/Filelist vim73/Filelist
--- vim73.orig/Filelist	2010-08-07 11:04:57.000000000 +0000
+++ vim73/Filelist	2013-08-04 19:09:07.513953172 +0000
@@ -39,6 +39,7 @@
 		src/mark.c \
 		src/mbyte.c \
 		src/memfile.c \
+		src/memfile_test.c \
 		src/memline.c \
 		src/menu.c \
 		src/message.c \
@@ -56,6 +57,7 @@
 		src/popupmnu.c \
 		src/quickfix.c \
 		src/regexp.c \
+		src/regexp_nfa.c \
 		src/regexp.h \
 		src/screen.c \
 		src/search.c \
@@ -72,6 +74,7 @@
 		src/version.c \
 		src/version.h \
 		src/vim.h \
+		src/winclip.c \
 		src/window.c \
 		src/xxd/xxd.c \
 		src/main.aap \
@@ -80,6 +83,16 @@
 		src/testdir/test[0-9]*.ok \
 		src/testdir/test49.vim \
 		src/testdir/test60.vim \
+		src/testdir/test83-tags? \
+		src/testdir/python2/*.py \
+		src/testdir/python3/*.py \
+		src/testdir/pythonx/*.py \
+		src/testdir/pythonx/topmodule/__init__.py \
+		src/testdir/pythonx/topmodule/submodule/__init__.py \
+		src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py \
+		src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py \
+		src/testdir/python_after/*.py \
+		src/testdir/python_before/*.py \
 		src/proto.h \
 		src/proto/blowfish.pro \
 		src/proto/buffer.pro \
@@ -128,6 +141,7 @@
 		src/proto/ui.pro \
 		src/proto/undo.pro \
 		src/proto/version.pro \
+		src/proto/winclip.pro \
 		src/proto/window.pro \
 
 
@@ -259,8 +273,10 @@
 		src/Make_mvc.mak \
 		src/Make_w16.mak \
 		src/bigvim.bat \
+		src/bigvim64.bat \
 		src/msvcsetup.bat \
 		src/msvc2008.bat \
+		src/msvc2010.bat \
 		src/dimm.idl \
 		src/dlldata.c \
 		src/dosinst.c \
@@ -311,6 +327,7 @@
 		src/xxd/Make_bc5.mak \
 		src/xxd/Make_cyg.mak \
 		src/xxd/Make_djg.mak \
+		src/xxd/Make_ming.mak \
 		src/xxd/Make_mvc.mak \
 		nsis/gvim.nsi \
 		nsis/README.txt \
@@ -345,6 +362,13 @@
 		src/vim*.ico \
 		src/vim.tlb \
 		src/vimtbar.lib \
+		src/xpm/COPYRIGHT \
+		src/xpm/README.txt \
+		src/xpm/include/*.h \
+		src/xpm/x64/lib/libXpm.a \
+		src/xpm/x64/lib/libXpm.lib \
+		src/xpm/x86/lib/libXpm.a \
+		src/xpm/x86/lib/libXpm.lib \
 		src/vimtbar.dll \
 		nsis/icons/*.bmp \
 		nsis/icons/*.ico \
@@ -426,20 +450,14 @@
 		$(SRC_VMS) \
 		README_os390.txt \
 		src/Make_mint.mak \
-		src/Make_ro.mak \
-		src/gui_riscos.c \
-		src/gui_riscos.h \
 		src/if_sniff.c \
 		src/infplist.xml \
 		src/link.390 \
 		src/os_beos.c \
 		src/os_beos.h \
 		src/os_beos.rsrc \
+		src/proto/os_beos.pro \
 		src/os_mint.h \
-		src/os_riscos.c \
-		src/os_riscos.h \
-		src/proto/gui_riscos.pro \
-		src/proto/os_riscos.pro \
 		src/os_vms_fix.com \
 		src/toolbar.phi \
 
@@ -466,6 +484,7 @@
 		runtime/macros/hanoi/hanoi.vim \
 		runtime/macros/hanoi/poster \
 		runtime/macros/justify.vim \
+		runtime/macros/less.bat \
 		runtime/macros/less.sh \
 		runtime/macros/less.vim \
 		runtime/macros/life/click.me \
@@ -669,6 +688,8 @@
 
 # generic language files
 LANG_GEN = \
+		runtime/doc/*-de.1 \
+		runtime/doc/*-de.UTF-8.1 \
 		runtime/doc/*-fr.1 \
 		runtime/doc/*-fr.UTF-8.1 \
 		runtime/doc/*-it.1 \
@@ -685,7 +706,17 @@
 		runtime/tutor/Makefile \
 		runtime/tutor/tutor.utf-8 \
 		runtime/tutor/tutor.?? \
-		runtime/tutor/tutor.??.* \
+		runtime/tutor/tutor.??.utf-8 \
+		runtime/tutor/tutor.??.euc \
+		runtime/tutor/tutor.??.sjis \
+		runtime/tutor/tutor.??.iso9 \
+		runtime/tutor/tutor.??.big5 \
+		runtime/tutor/tutor.??.cp1250 \
+		runtime/tutor/tutor.??.cp1251 \
+		runtime/tutor/tutor.??.cp737 \
+		runtime/tutor/tutor.??_??.utf-8 \
+		runtime/tutor/tutor.bar \
+		runtime/tutor/tutor.bar.utf-8 \
 		runtime/spell/README.txt \
 		runtime/spell/??/*.diff \
 		runtime/spell/??/main.aap \
diff -Naur vim73.orig/Makefile vim73/Makefile
--- vim73.orig/Makefile	2010-08-15 12:23:34.000000000 +0000
+++ vim73/Makefile	2013-08-04 19:09:07.517286495 +0000
@@ -23,6 +23,9 @@
 # has run can result in compiling with $(CC) empty.
 
 first:
+	@if test ! -f src/auto/config.mk; then \
+		cp src/config.mk.dist src/auto/config.mk; \
+	fi
 	@echo "Starting make in the src directory."
 	@echo "If there are problems, cd to the src directory and run make there"
 	cd src && $(MAKE) $@
@@ -30,6 +33,9 @@
 # Some make programs use the last target for the $@ default; put the other
 # targets separately to always let $@ expand to "first" by default.
 all install uninstall tools config configure reconfig proto depend lint tags types test testclean clean distclean:
+	@if test ! -f src/auto/config.mk; then \
+		cp src/config.mk.dist src/auto/config.mk; \
+	fi
 	@echo "Starting make in the src directory."
 	@echo "If there are problems, cd to the src directory and run make there"
 	cd src && $(MAKE) $@
@@ -122,36 +128,20 @@
 # PC:
 # - Run make on Unix to update the ".mo" files.
 # - "make dossrc" and "make dosrt".  Unpack the archives on a PC.
-# 16 bit DOS version: (OBSOLETE, 16 bit version doesn't build)
-# - Set environment for compiling with Borland C++ 3.1.
-# - "bmake -f Make_bc3.mak BOR=E:\borlandc" (compiling xxd might fail, in that
-#   case set environment for compiling with Borland C++ 4.0 and do
-#   "make -f make_bc3.mak BOR=E:\BC4 xxd/xxd.exe").
-#   NOTE: this currently fails because Vim is too big.
-# - "make test" and check the output.
-# - Rename the executables to "vimd16.exe", "xxdd16.exe", "installd16.exe" and
-#   "uninstald16.exe".
-# 32 bit DOS version:
-# - Set environment for compiling with DJGPP; "gmake -f Make_djg.mak".
-# - "rm testdir/*.out", "gmake -f Make_djg.mak test" and check the output for
-#   "ALL DONE".
-# - Rename the executables to "vimd32.exe", "xxdd32.exe", "installd32.exe" and
-#   "uninstald32.exe".
 # Win32 console version:
-# - Set environment for Visual C++ 2008, e.g.:
-#   "E:\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat".  Or, when using the
-#   Visual C++ Toolkit 2003: "msvcsetup.bat" (adjust the paths when necessary).
-#   For Windows 98/ME the 2003 version is required, but then it won't work on
-#   Windows 7 and 64 bit.
-# - "nmake -f Make_mvc.mak"
+# - Set environment for Visual C++ 2008, e.g.: "msvc2008.bat"  Or:
+#   "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat".
+#   Or, when using the Visual C++ Toolkit 2003: "msvcsetup.bat" (adjust the
+#   paths when necessary).
+#   For Windows 98/ME the 2003 version is required, but then the executable
+#   won't work on Windows 7 and 64 bit.
+# - "nmake -f Make_mvc.mak"  (use the same path as for vcvars32.bat)
 # - "rm testdir/*.out", "nmake -f Make_mvc.mak test" and check the output.
-# - Rename the executables to "vimw32.exe", "xxdw32.exe".
+# - Rename vim.exe to vimw32.exe, xxd/xxd.exe to xxdw32.exe.
 # - Rename vim.pdb to vimw32.pdb.
-# - When building the Win32s version later, delete vimrun.exe, install.exe and
-#   uninstal.exe.  Otherwise rename executables to installw32.exe and
-#   uninstalw32.exe.
+# - Rename install.exe to installw32.exe and uninstal.exe to uninstalw32.exe.
 # Win32 GUI version:
-# - "nmake -f Make_mvc.mak GUI=yes.
+# - "nmake -f Make_mvc.mak GUI=yes"
 # - move "gvim.exe" to here (otherwise the OLE version will overwrite it).
 # - Move gvim.pdb to here.
 # - Delete vimrun.exe, install.exe and uninstal.exe.
@@ -161,23 +151,13 @@
 # - Rename "gvim.exe" to "gvim_ole.exe".
 # - Rename gvim.pdb to "gvim_ole.pdb".
 # - Delete install.exe and uninstal.exe.
-# - If building the Win32s version delete vimrun.exe.
-# Win32s GUI version:
-# - Set environment for Visual C++ 4.1 (requires a new console window):
-#   "vcvars32.bat" (use the path for VC 4.1 e:\msdev\bin)
-# - "nmake -f Make_mvc.mak GUI=yes INTL=no clean" (use the path for VC 4.1)
-# - "nmake -f Make_mvc.mak GUI=yes INTL=no" (use the path for VC 4.1)
-# - Rename "gvim.exe" to "gvim_w32s.exe".
-# - Rename "install.exe" to "installw32.exe"
-# - Rename "uninstal.exe" to "uninstalw32.exe"
-# - The produced uninstalw32.exe and vimrun.exe are used.
 # Create the archives:
 # - Copy all the "*.exe" files to where this Makefile is.
 # - Copy all the "*.pdb" files to where this Makefile is.
 # - "make dosbin".
 # NSIS self installing exe:
 # - To get NSIS see http://nsis.sourceforge.net
-# - Make sure gvim_ole.exe, vimd32.exe, vimw32.exe, installw32.exe,
+# - Make sure gvim_ole.exe, vimw32.exe, installw32.exe,
 #   uninstalw32.exe and xxdw32.exe have been build as mentioned above.
 # - copy these files (get them from a binary archive or build them):
 #	gvimext.dll in src/GvimExt
@@ -190,7 +170,44 @@
 # - go to ../nsis and do "makensis gvim.nsi" (takes a few minutes).
 # - Copy gvim##.exe to the dist directory.
 #
-# OS/2: (OBSOLETE, OS/2 version is no longer distributed)
+# 64 bit builds (these are not in the normal distribution, the 32 bit build
+# works just fine on 64 bit systems).
+# Like the console and GUI version, but first run vcvars64.bat or
+#   "..\VC\vcvarsall.bat x86_amd64".
+# - "nmake -f Make_mvc.mak"
+# - "nmake -f Make_mvc.mak GUI=yes"
+# Or run src/bigvim64.bat for an OLE version.
+#
+# OBSOLETE systems: You can build this if you have an appropriate system.
+#
+# 16 bit DOS version: (doesn't build anywhere)
+# - Set environment for compiling with Borland C++ 3.1.
+# - "bmake -f Make_bc3.mak BOR=E:\borlandc" (compiling xxd might fail, in that
+#   case set environment for compiling with Borland C++ 4.0 and do
+#   "make -f make_bc3.mak BOR=E:\BC4 xxd/xxd.exe").
+#   NOTE: this currently fails because Vim is too big.
+# - "make test" and check the output.
+# - Rename the executables to "vimd16.exe", "xxdd16.exe", "installd16.exe" and
+#   "uninstald16.exe".
+#
+# 32 bit DOS version: (requires Windows XP or earlier)
+# - Set environment for compiling with DJGPP; "gmake -f Make_djg.mak".
+# - "rm testdir/*.out", "gmake -f Make_djg.mak test" and check the output for
+#   "ALL DONE".
+# - Rename the executables to "vimd32.exe", "xxdd32.exe", "installd32.exe" and
+#   "uninstald32.exe".
+#
+# Win32s GUI version: (requires very old compiler)
+# - Set environment for Visual C++ 4.1 (requires a new console window):
+#   "vcvars32.bat" (use the path for VC 4.1 e:\msdev\bin)
+# - "nmake -f Make_mvc.mak GUI=yes INTL=no clean" (use the path for VC 4.1)
+# - "nmake -f Make_mvc.mak GUI=yes INTL=no" (use the path for VC 4.1)
+# - Rename "gvim.exe" to "gvim_w32s.exe".
+# - Rename "install.exe" to "installw32.exe"
+# - Rename "uninstal.exe" to "uninstalw32.exe"
+# - The produced uninstalw32.exe and vimrun.exe are used.
+#
+# OS/2: (requires an OS/2 system)
 # - Unpack the Unix archive.
 # - "make -f Make_os2.mak".
 # - Rename the executables to vimos2.exe, xxdos2.exe and teeos2.exe and copy
@@ -289,6 +306,8 @@
 		$(LANG_SRC) \
 		| (cd dist/$(VIMRTDIR); tar xf -)
 # Need to use a "distclean" config.mk file
+# Note: this file is not included in the repository to avoid problems, but it's
+# OK to put it in the archive.
 	cp -f src/config.mk.dist dist/$(VIMRTDIR)/src/auto/config.mk
 # Create an empty config.h file, make dependencies require it
 	touch dist/$(VIMRTDIR)/src/auto/config.h
diff -Naur vim73.orig/README.txt vim73/README.txt
--- vim73.orig/README.txt	2010-08-15 12:23:19.000000000 +0000
+++ vim73/README.txt	2013-08-04 19:09:07.517286495 +0000
@@ -97,10 +97,12 @@
 If you have problems, have a look at the Vim FAQ:
 	http://vimdoc.sf.net/vimfaq.html
 
-Send bug reports to:
-	Bram Moolenaar <Bram@vim.org>
+If you still have problems or any other questions, use one of the mailing
+lists to discuss them with Vim users and developers:
+	http://www.vim.org/maillist.php
 
-There are several mailing lists for Vim, see http://www.vim.org/maillist.php.
+If nothing else works, report bugs directly:
+	Bram Moolenaar <Bram@vim.org>
 
 
 MAIN AUTHOR
diff -Naur vim73.orig/README_extra.txt vim73/README_extra.txt
--- vim73.orig/README_extra.txt	2010-08-15 12:23:19.000000000 +0000
+++ vim73/README_extra.txt	2013-08-04 19:09:07.530619788 +0000
@@ -13,9 +13,6 @@
 
 src/os_amiga.*		Files for the Amiga port.
 
-src/gui_riscos.*
-src/os_riscos.*		Files for the RISC OS port.
-
 src/gui_beos.*
 src/os_beos.*		Files for the BeOS port.
 
diff -Naur vim73.orig/nsis/gvim.nsi vim73/nsis/gvim.nsi
--- vim73.orig/nsis/gvim.nsi	2010-08-15 12:23:23.000000000 +0000
+++ vim73/nsis/gvim.nsi	2013-08-04 19:09:07.557286375 +0000
@@ -5,7 +5,7 @@
 # WARNING: if you make changes to this script, look out for $0 to be valid,
 # because uninstall deletes most files in $0.
 
-# Location of gvim_ole.exe, vimd32.exe, GvimExt/*, etc.
+# Location of gvim_ole.exe, vimw32.exe, GvimExt/*, etc.
 !define VIMSRC "..\src"
 
 # Location of runtime files
@@ -40,7 +40,7 @@
 ComponentText "This will install Vim ${VER_MAJOR}.${VER_MINOR} on your computer."
 DirText "Choose a directory to install Vim (must end in 'vim')"
 Icon icons\vim_16c.ico
-# NSIS2 uses a different strategy with six diferent images in a strip...
+# NSIS2 uses a different strategy with six different images in a strip...
 #EnabledBitmap icons\enabled.bmp
 #DisabledBitmap icons\disabled.bmp
 UninstallText "This will uninstall Vim ${VER_MAJOR}.${VER_MINOR} from your system."
@@ -56,6 +56,9 @@
   !packhdr temp.dat "upx --best --compress-icons=1 temp.dat"
 !endif
 
+SetCompressor /SOLID lzma
+XPStyle on
+
 # This adds '\vim' to the user choice automagically.  The actual value is
 # obtained below with ReadINIStr.
 InstallDir "$PROGRAMFILES\Vim"
@@ -247,11 +250,10 @@
 	ReadRegStr $R0 HKLM \
 	   "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion
 	IfErrors 0 lbl_winnt
-	    # Windows 95/98/ME
-	    File /oname=vim.exe ${VIMSRC}\vimd32.exe
+	    # Windows 95/98/ME: not supported
 	    Goto lbl_done
 	lbl_winnt:
-	    # Windows NT/2000/XT
+	    # Windows NT/2000/XP and later
 	    File /oname=vim.exe ${VIMSRC}\vimw32.exe
 	lbl_done:
 	StrCpy $2 "$2 vim view vimdiff"
diff -Naur vim73.orig/runtime/autoload/ada.vim vim73/runtime/autoload/ada.vim
--- vim73.orig/runtime/autoload/ada.vim	2010-05-15 11:03:31.000000000 +0000
+++ vim73/runtime/autoload/ada.vim	2013-08-04 19:09:07.603952901 +0000
@@ -29,6 +29,8 @@
 if version < 700
    finish
 endif 
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Section: Constants {{{1
 "
@@ -619,6 +621,9 @@
 lockvar! g:ada#Keywords
 lockvar! g:ada#Ctags_Kinds
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff -Naur vim73.orig/runtime/autoload/ccomplete.vim vim73/runtime/autoload/ccomplete.vim
--- vim73.orig/runtime/autoload/ccomplete.vim	2010-05-15 11:03:31.000000000 +0000
+++ vim73/runtime/autoload/ccomplete.vim	2013-08-04 19:09:07.607286224 +0000
@@ -1,8 +1,10 @@
 " Vim completion script
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2010 Mar 23
+" Last Change:	2012 Jun 20
 
+let s:cpo_save = &cpo
+set cpo&vim
 
 " This function is used for the 'omnifunc' option.
 function! ccomplete#Complete(findstart, base)
@@ -498,7 +500,7 @@
   endif
   if !cached
     while 1
-      exe 'silent! ' . n . 'vimgrep /\t' . typename . '\(\t\|$\)/j ' . fnames
+      exe 'silent! keepj noautocmd ' . n . 'vimgrep /\t' . typename . '\(\t\|$\)/j ' . fnames
 
       let qflist = getqflist()
       if len(qflist) > 0 || match(typename, "::") < 0
@@ -603,3 +605,6 @@
   endfor
   return res
 endfunc
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/autoload/clojurecomplete.vim vim73/runtime/autoload/clojurecomplete.vim
--- vim73.orig/runtime/autoload/clojurecomplete.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/autoload/clojurecomplete.vim	2013-08-04 19:09:07.607286224 +0000
@@ -0,0 +1,20 @@
+" Vim completion script
+" Language:     Clojure
+" Maintainer:   Sung Pae <self@sungpae.com>
+" URL:          https://github.com/guns/vim-clojure-static
+" License:      Same as Vim
+" Last Change:  05 February 2013
+
+" Special forms and public vars in clojure.core
+" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-002/vim_clojure_static.clj
+" Clojure 1.5.0-RC6
+let s:words = ["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-readably*","*read-eval*","*read-whitelist*","*source-path*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods",".","..","/","<","<=","=","==",">",">=","EMPTY-NODE","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc!","assoc","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","booleans","bound-fn","bound-fn*","bound?","butlast","byte","byte-array","bytes","case","cast","catch","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","concat","cond","cond->","cond->>","condp","conj!","conj","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","def","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj!","disj","dissoc!","dissoc","distinct","distinct?","do","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","doubles","drop","drop-last","drop-while","empty","empty?","ensure","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","finally","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","hash","hash-combine","hash-map","hash-set","identical?","identity","if","if-let","if-not","ifn?","import","in-ns","inc","inc'","init-proxy","instance?","int","int-array","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mod","monitor-enter","monitor-exit","munge","name","namespace","namespace-munge","neg?","new","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop!","pop","pop-thread-bindings","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","quot","quote","rand","rand-int","rand-nth","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","realized?","recur","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seque","sequence","sequential?","set!","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","slurp","some","some->","some->>","some-fn","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","symbol","symbol?","sync","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","throw","time","to-array","to-array-2d","trampoline","transient","tree-seq","true?","try","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","update-in","update-proxy","use","val","vals","var","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","when","when-first","when-let","when-not","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"]
+
+" Simple word completion omnifunc
+function! clojurecomplete#Complete(findstart, base)
+    if a:findstart
+        return searchpos('\<', 'bnW', line('.'))[1] - 1
+    else
+        return { 'words': filter(copy(s:words), 'v:val =~ "\\V\\^' . a:base . '"') }
+    endif
+endfunction
diff -Naur vim73.orig/runtime/autoload/getscript.vim vim73/runtime/autoload/getscript.vim
--- vim73.orig/runtime/autoload/getscript.vim	2010-05-15 11:03:31.000000000 +0000
+++ vim73/runtime/autoload/getscript.vim	2013-08-04 19:09:07.613952871 +0000
@@ -1,8 +1,8 @@
 " ---------------------------------------------------------------------
 " getscript.vim
-"  Author:	Charles E. Campbell, Jr.
-"  Date:	Dec 28, 2009
-"  Version:	32
+"  Author:	Charles E. Campbell
+"  Date:	Apr 17, 2013
+"  Version:	35
 "  Installing:	:help glvs-install
 "  Usage:	:help glvs
 "
@@ -15,7 +15,7 @@
 if exists("g:loaded_getscript")
  finish
 endif
-let g:loaded_getscript= "v32"
+let g:loaded_getscript= "v35"
 if &cp
  echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
  finish
@@ -74,6 +74,11 @@
  let g:GetLatestVimScripts_allowautoinstall= 1
 endif
 
+" set up default scriptaddr address
+if !exists("g:GetLatestVimScripts_scriptaddr")
+ let g:GetLatestVimScripts_scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='
+endif
+
 "" For debugging:
 "let g:GetLatestVimScripts_wget    = "echo"
 "let g:GetLatestVimScripts_options = "options"
@@ -314,7 +319,7 @@
   if &mod
    silent! w!
   endif
-  q
+  q!
 
   " restore events and current directory
   exe "cd ".fnameescape(substitute(origdir,'\','/','ge'))
@@ -415,7 +420,7 @@
   echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
 
   " grab a copy of the plugin's vim.sourceforge.net webpage
-  let scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='.scriptid
+  let scriptaddr = g:GetLatestVimScripts_scriptaddr.scriptid
   let tmpfile    = tempname()
   let v:errmsg   = ""
 
@@ -519,6 +524,7 @@
    " --------------------------------------------------------------------------
    " AutoInstall: only if doautoinstall has been requested by the plugin itself
    " --------------------------------------------------------------------------
+"   call Decho("checking if plugin requested autoinstall: doautoinstall=".doautoinstall)
    if doautoinstall
 "    call Decho(" ")
 "    call Decho("Autoinstall: getcwd<".getcwd()."> filereadable(".sname.")=".filereadable(sname))
@@ -526,7 +532,7 @@
 "     call Decho("<".sname."> is readable")
 "     call Decho("exe silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall))
      exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)
-     let curdir    = escape(substitute(getcwd(),'\','/','ge'),"|[]*'\" #")
+     let curdir    = fnameescape(substitute(getcwd(),'\','/','ge'))
      let installdir= curdir."/Installed"
      if !isdirectory(installdir)
       call mkdir(installdir)
@@ -549,25 +555,42 @@
      " decompress
      if sname =~ '\.bz2$'
 "      call Decho("decompress: attempt to bunzip2 ".sname)
-      exe "silent !bunzip2 ".shellescape(sname)
+      exe "sil !bunzip2 ".shellescape(sname)
       let sname= substitute(sname,'\.bz2$','','')
 "      call Decho("decompress: new sname<".sname."> after bunzip2")
      elseif sname =~ '\.gz$'
 "      call Decho("decompress: attempt to gunzip ".sname)
-      exe "silent !gunzip ".shellescape(sname)
+      exe "sil !gunzip ".shellescape(sname)
       let sname= substitute(sname,'\.gz$','','')
 "      call Decho("decompress: new sname<".sname."> after gunzip")
+     elseif sname =~ '\.xz$'
+"      call Decho("decompress: attempt to unxz ".sname)
+      exe "sil !unxz ".shellescape(sname)
+      let sname= substitute(sname,'\.xz$','','')
+"      call Decho("decompress: new sname<".sname."> after unxz")
      else
 "      call Decho("no decompression needed")
      endif
      
-     " distribute archive(.zip, .tar, .vba) contents
+     " distribute archive(.zip, .tar, .vba, ...) contents
      if sname =~ '\.zip$'
 "      call Decho("dearchive: attempt to unzip ".sname)
       exe "silent !unzip -o ".shellescape(sname)
      elseif sname =~ '\.tar$'
 "      call Decho("dearchive: attempt to untar ".sname)
       exe "silent !tar -xvf ".shellescape(sname)
+     elseif sname =~ '\.tgz$'
+"      call Decho("dearchive: attempt to untar+gunzip ".sname)
+      exe "silent !tar -zxvf ".shellescape(sname)
+     elseif sname =~ '\.taz$'
+"      call Decho("dearchive: attempt to untar+uncompress ".sname)
+      exe "silent !tar -Zxvf ".shellescape(sname)
+     elseif sname =~ '\.tbz$'
+"      call Decho("dearchive: attempt to untar+bunzip2 ".sname)
+      exe "silent !tar -jxvf ".shellescape(sname)
+     elseif sname =~ '\.txz$'
+"      call Decho("dearchive: attempt to untar+xz ".sname)
+      exe "silent !tar -Jxvf ".shellescape(sname)
      elseif sname =~ '\.vba$'
 "      call Decho("dearchive: attempt to handle a vimball: ".sname)
       silent 1split
diff -Naur vim73.orig/runtime/autoload/htmlcomplete.vim vim73/runtime/autoload/htmlcomplete.vim
--- vim73.orig/runtime/autoload/htmlcomplete.vim	2010-05-15 11:03:31.000000000 +0000
+++ vim73/runtime/autoload/htmlcomplete.vim	2013-08-04 19:09:07.617286194 +0000
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	HTML and XHTML
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2006 Oct 19
+" Last Change:	2011 Apr 28
 
 function! htmlcomplete#CompleteTags(findstart, base)
   if a:findstart
@@ -285,6 +285,7 @@
 				let cssfiles = styletable + secimportfiles
 				let classes = []
 				for file in cssfiles
+				  	let classlines = []
 					if filereadable(file)
 						let stylesheet = readfile(file)
 						let stylefile = join(stylesheet, ' ')
diff -Naur vim73.orig/runtime/autoload/netrw.vim vim73/runtime/autoload/netrw.vim
--- vim73.orig/runtime/autoload/netrw.vim	2010-07-27 14:55:00.000000000 +0000
+++ vim73/runtime/autoload/netrw.vim	2013-08-04 19:09:07.633952811 +0000
@@ -1,10 +1,10 @@
 " netrw.vim: Handles file transfer and remote directory listing across
 "            AUTOLOAD SECTION
-" Date:		Jul 27, 2010
-" Version:	140
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:		May 18, 2013
+" Version:	149
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2010 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -22,10 +22,10 @@
 if &cp || exists("g:loaded_netrw")
   finish
 endif
-let g:loaded_netrw = "v140"
-if v:version < 702
+let g:loaded_netrw = "v149"
+if v:version < 703 || (v:version == 703 && !has("patch465"))
  echohl WarningMsg
- echo "***warning*** this version of netrw needs vim 7.2"
+ echo "***warning*** this version of netrw needs vim 7.3.465 or later"
  echohl Normal
  finish
 endif
@@ -35,14 +35,8 @@
  let s:ERROR   = 2
 endif
 
-" sanity checks
-if v:version < 700
- call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
- finish
-endif
-
 let s:keepcpo= &cpo
-setlocal cpo&vim
+set cpo&vim
 "DechoTabOn
 "call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)
 
@@ -51,12 +45,95 @@
 " ======================
 
 " ---------------------------------------------------------------------
+" netrw#ErrorMsg: {{{2
+"   0=note     = s:NOTE
+"   1=warning  = s:WARNING
+"   2=error    = s:ERROR
+"  May 01, 2013 : max errnum currently is 93
+fun! netrw#ErrorMsg(level,msg,errnum)
+"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
+
+  if a:level < g:netrw_errorlvl
+"   call Dret("netrw#ErrorMsg : suppressing level=".a:level." since g:netrw_errorlvl=".g:netrw_errorlvl)
+   return
+  endif
+
+  if a:level == 1
+   let level= "**warning** (netrw) "
+  elseif a:level == 2
+   let level= "**error** (netrw) "
+  else
+   let level= "**note** (netrw) "
+  endif
+"  call Decho("level=".level)
+
+  if g:netrw_use_errorwindow
+   " (default) netrw creates a one-line window to show error/warning
+   " messages (reliably displayed)
+
+   " record current window number for NetrwRestorePosn()'s benefit
+   let s:winBeforeErr= winnr()
+"   call Decho("s:winBeforeErr=".s:winBeforeErr)
+
+   " getting messages out reliably is just plain difficult!
+   " This attempt splits the current window, creating a one line window.
+   if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
+"    call Decho("write to NetrwMessage buffer")
+    exe bufwinnr("NetrwMessage")."wincmd w"
+"    call Decho("setl ma noro")
+    setl ma noro
+    keepj call setline(line("$")+1,level.a:msg)
+    keepj $
+   else
+"    call Decho("create a NetrwMessage buffer window")
+    bo 1split
+    sil! call s:NetrwEnew()
+    sil! keepj call s:NetrwSafeOptions()
+    setl bt=nofile
+    keepj file NetrwMessage
+"    call Decho("setl ma noro")
+    setl ma noro
+    call setline(line("$"),level.a:msg)
+   endif
+"   call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
+   if &fo !~ '[ta]'
+    syn clear
+    syn match netrwMesgNote	"^\*\*note\*\*"
+    syn match netrwMesgWarning	"^\*\*warning\*\*"
+    syn match netrwMesgError	"^\*\*error\*\*"
+    hi link netrwMesgWarning WarningMsg
+    hi link netrwMesgError   Error
+   endif
+"   call Decho("(ErrorMsg) setl noma ro bh=wipe")
+   setl noma ro bh=wipe
+
+  else
+   " (optional) netrw will show messages using echomsg.  Even if the
+   " message doesn't appear, at least it'll be recallable via :messages
+"   redraw!
+   if a:level == s:WARNING
+    echohl WarningMsg
+   elseif a:level == s:ERROR
+    echohl Error
+   endif
+   echomsg level.a:msg
+"   call Decho("echomsg ***netrw*** ".a:msg)
+   echohl None
+  endif
+
+"  call Dret("netrw#ErrorMsg")
+endfun
+
+" ---------------------------------------------------------------------
 " NetrwInit: initializes variables if they haven't been defined {{{2
 "            Loosely,  varname = value.
 fun s:NetrwInit(varname,value)
+" call Decho("varname<".a:varname."> value=".a:value)
   if !exists(a:varname)
    if type(a:value) == 0
     exe "let ".a:varname."=".a:value
+   elseif type(a:value) == 1 && a:value =~ '^[{[]'
+    exe "let ".a:varname."=".a:value
    elseif type(a:value) == 1
     exe "let ".a:varname."="."'".a:value."'"
    else
@@ -78,6 +155,8 @@
 
 " ---------------------------------------------------------------------
 " Default values for netrw's global protocol variables {{{2
+call s:NetrwInit("g:netrw_use_errorwindow",1)
+
 if !exists("g:netrw_dav_cmd")
  if executable("cadaver")
   let g:netrw_dav_cmd	= "cadaver"
@@ -97,6 +176,10 @@
 if !exists("g:netrw_ftp_cmd")
   let g:netrw_ftp_cmd	= "ftp"
 endif
+let s:netrw_ftp_cmd= g:netrw_ftp_cmd
+if !exists("g:netrw_ftp_options")
+ let g:netrw_ftp_options= "-i -n"
+endif
 if !exists("g:netrw_http_cmd")
  if executable("elinks")
   let g:netrw_http_cmd = "elinks"
@@ -119,7 +202,20 @@
 endif
 call s:NetrwInit("g:netrw_rcp_cmd"  , "rcp")
 call s:NetrwInit("g:netrw_rsync_cmd", "rsync")
-call s:NetrwInit("g:netrw_scp_cmd"  , "scp -q")
+if !exists("g:netrw_scp_cmd")
+ if executable("scp")
+  call s:NetrwInit("g:netrw_scp_cmd" , "scp -q")
+ elseif executable("pscp")
+  if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable('c:\private.ppk')
+   call s:NetrwInit("g:netrw_scp_cmd", 'pscp -i c:\private.ppk')
+  else
+   call s:NetrwInit("g:netrw_scp_cmd", 'pscp -q')
+  endif
+ else
+  call s:NetrwInit("g:netrw_scp_cmd" , "scp -q")
+ endif
+endif
+
 call s:NetrwInit("g:netrw_sftp_cmd" , "sftp")
 call s:NetrwInit("g:netrw_ssh_cmd"  , "ssh")
 
@@ -139,7 +235,7 @@
 " Cygwin Detection ------- {{{3
 if !exists("g:netrw_cygwin")
  if has("win32") || has("win95") || has("win64") || has("win16")
-  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
+  if  has("win32unix") && &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
    let g:netrw_cygwin= 1
   else
    let g:netrw_cygwin= 0
@@ -157,15 +253,19 @@
 call s:NetrwInit("g:netrw_chgwin"      , -1)
 call s:NetrwInit("g:netrw_compress"    , "gzip")
 call s:NetrwInit("g:netrw_ctags"       , "ctags")
-if !exists("g:netrw_cursorline")
- let g:netrw_cursorline= 1
- let s:netrw_usercul   = &cursorline
- let s:netrw_usercuc   = &cursorcolumn
+if exists("g:netrw_cursorline") && !exists("g:netrw_cursor")
+ call netrw#ErrorMsg(s:NOTE,'g:netrw_cursorline is deprecated; use g:netrw_cursor instead',77)
+ let g:netrw_cursor= g:netrw_cursorline
 endif
+call s:NetrwInit("g:netrw_cursor"      , 2)
+let s:netrw_usercul = &cursorline
+let s:netrw_usercuc = &cursorcolumn
 " Default values - d-g ---------- {{{3
+call s:NetrwInit("s:didstarstar",0)
 call s:NetrwInit("g:netrw_dirhist_cnt"      , 0)
 call s:NetrwInit("g:netrw_decompress"       , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" }')
 call s:NetrwInit("g:netrw_dirhistmax"       , 10)
+call s:NetrwInit("g:netrw_errorlvl"  , s:NOTE)
 call s:NetrwInit("g:netrw_fastbrowse"       , 1)
 call s:NetrwInit("g:netrw_ftp_browse_reject", '^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$')
 if !exists("g:netrw_ftp_list_cmd")
@@ -191,28 +291,39 @@
 endif
 call s:NetrwInit("g:netrw_keepdir",1)
 if !exists("g:netrw_list_cmd")
+
  if g:netrw_scp_cmd =~ '^pscp' && executable("pscp")
-  " provide a 'pscp' listing command
   if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk")
+   " provide a pscp-based listing command
    let g:netrw_scp_cmd ="pscp -i C:\\private.ppk"
   endif
   let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:"
+
  elseif executable(g:netrw_ssh_cmd)
-  " provide a default listing command
+  " provide a scp-based default listing command
   let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa"
+
  else
 "  call Decho(g:netrw_ssh_cmd." is not executable")
   let g:netrw_list_cmd= ""
  endif
+
 endif
 call s:NetrwInit("g:netrw_list_hide","")
 " Default values - lh-lz ---------- {{{3
+if exists("g:netrw_local_copycmd")
+ let g:netrw_localcopycmd= g:netrw_local_copycmd
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_copycmd is deprecated in favor of g:netrw_localcopycmd",84)
+endif
+if !exists("g:netrw_localcmdshell")
+ let g:netrw_localcmdshell= ""
+endif
 if !exists("g:netrw_localcopycmd")
  if has("win32") || has("win95") || has("win64") || has("win16")
   if g:netrw_cygwin
    let g:netrw_localcopycmd= "cp"
   else
-   let g:netrw_localcopycmd= "copy"
+   let g:netrw_localcopycmd= "cmd /c copy"
   endif
  elseif has("unix") || has("macunix")
   let g:netrw_localcopycmd= "cp"
@@ -220,13 +331,22 @@
   let g:netrw_localcopycmd= ""
  endif
 endif
-call s:NetrwInit("g:netrw_local_mkdir","mkdir")
+if exists("g:netrw_local_mkdir")
+ let g:netrw_localmkdir= g:netrw_local_mkdir
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_mkdir is deprecated in favor of g:netrw_localmkdir",87)
+endif
+call s:NetrwInit("g:netrw_localmkdir","mkdir")
+call s:NetrwInit("g:netrw_remote_mkdir","mkdir")
+if exists("g:netrw_local_movecmd")
+ let g:netrw_localmovecmd= g:netrw_local_movecmd
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_movecmd is deprecated in favor of g:netrw_localmovecmd",88)
+endif
 if !exists("g:netrw_localmovecmd")
  if has("win32") || has("win95") || has("win64") || has("win16")
   if g:netrw_cygwin
    let g:netrw_localmovecmd= "mv"
   else
-   let g:netrw_localmovecmd= "move"
+   let g:netrw_localmovecmd= "cmd /c move"
   endif
  elseif has("unix") || has("macunix")
   let g:netrw_localmovecmd= "mv"
@@ -234,7 +354,11 @@
   let g:netrw_localmovecmd= ""
  endif
 endif
-call s:NetrwInit("g:netrw_local_rmdir", "rmdir")
+call s:NetrwInit("g:netrw_localrmdir", "rmdir")
+if exists("g:netrw_local_rmdir")
+ let g:netrw_localrmdir= g:netrw_local_rmdir
+ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_rmdir is deprecated in favor of g:netrw_localrmdir",86)
+endif
 call s:NetrwInit("g:netrw_liststyle"  , s:THINLIST)
 " sanity checks
 if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
@@ -248,7 +372,7 @@
 call s:NetrwInit("g:netrw_maxfilenamelen", 32)
 call s:NetrwInit("g:netrw_menu"          , 1)
 call s:NetrwInit("g:netrw_mkdir_cmd"     , g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir")
-call s:NetrwInit("g:netrw_mousemaps"     , (exists("&mouse") && &mouse =~ '[anh]'))
+call s:NetrwInit("g:netrw_mousemaps"     , (exists("+mouse") && &mouse =~ '[anh]'))
 call s:NetrwInit("g:netrw_retmap"        , 0)
 if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
  call s:NetrwInit("g:netrw_chgperm"       , "chmod PERM FILENAME")
@@ -267,13 +391,13 @@
 " Default values - s ---------- {{{3
 " g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename
 call s:NetrwInit("g:netrw_sepchr"        , (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>")
-call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "silent keepj " : "keepj ")
+call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "sil keepj " : "keepj ")
 call s:NetrwInit("g:netrw_sort_by"       , "name") " alternatives: date                                      , size
 call s:NetrwInit("g:netrw_sort_options"  , "")
 call s:NetrwInit("g:netrw_sort_direction", "normal") " alternative: reverse  (z y x ...)
 if !exists("g:netrw_sort_sequence")
  if has("unix")
-  let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
+  let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
  else
   let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
  endif
@@ -283,20 +407,31 @@
 call s:NetrwInit("g:netrw_use_noswf"        , 0)
 " Default values - t-w ---------- {{{3
 call s:NetrwInit("g:netrw_timefmt","%c")
-call s:NetrwInit("g:netrw_xstrlen",0)
+if !exists("g:netrw_xstrlen")
+ if exists("g:Align_xstrlen")
+  let g:netrw_xstrlen= g:Align_xstrlen
+ elseif exists("g:drawit_xstrlen")
+  let g:netrw_xstrlen= g:drawit_xstrlen
+ elseif &enc == "latin1" || !has("multi_byte")
+  let g:netrw_xstrlen= 0
+ else
+  let g:netrw_xstrlen= 1
+ endif
+endif
 call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
-call s:NetrwInit("g:netrw_use_errorwindow",1)
 call s:NetrwInit("g:netrw_win95ftp",1)
-call s:NetrwInit("g:netrw_winsize",25)
+call s:NetrwInit("g:netrw_winsize",50)
+if g:netrw_winsize ==  0|let g:netrw_winsize=  -1|endif
+if g:netrw_winsize > 100|let g:netrw_winsize= 100|endif
 " ---------------------------------------------------------------------
 " Default values for netrw's script variables: {{{2
 call s:NetrwInit("g:netrw_fname_escape",' ?&;%')
 if has("win32") || has("win95") || has("win64") || has("win16")
- call s:NetrwInit("g:netrw_glob_escape",'[]*?`{$')
+ call s:NetrwInit("g:netrw_glob_escape",'*?`{[]$')
 else
- call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$\')
+ call s:NetrwInit("g:netrw_glob_escape",'*[]?`{~$\')
 endif
-call s:NetrwInit("g:netrw_menu_escape",'./&? \')
+call s:NetrwInit("g:netrw_menu_escape",'.&? \')
 call s:NetrwInit("g:netrw_tmpfile_escape",' &;')
 call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
 
@@ -305,84 +440,152 @@
 "  files read by network transfer aren't appropriately highlighted.
 "let g:decho_bufenter = 1	"Decho
 
+" ======================
+"  Netrw Initialization: {{{1
+" ======================
+if v:version >= 700 && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on")
+ let s:initbeval = &beval
+" let s:initbexpr = &l:bexpr
+ let &l:bexpr    = "netrw#NetrwBalloonHelp()"
+ set beval
+ au BufWinEnter,WinEnter *	if &ft == "netrw"|set beval|else|let &beval= s:initbeval|endif
+endif
+au WinEnter *	if &ft == "netrw"|call s:NetrwInsureWinVars()|endif
+
 " ==============================
 "  Netrw Utility Functions: {{{1
 " ==============================
 
+" ---------------------------------------------------------------------
+" netrw#NetrwBalloonHelp: {{{2
+if v:version >= 700 && has("balloon_eval") && &beval == 1 && has("syntax") && exists("g:syntax_on")
+  fun! netrw#NetrwBalloonHelp()
+    if !exists("w:netrw_bannercnt") || v:beval_lnum >= w:netrw_bannercnt || (exists("g:netrw_nobeval") && g:netrw_nobeval)
+     let mesg= ""
+    elseif     v:beval_text == "Netrw" || v:beval_text == "Directory" || v:beval_text == "Listing"
+     let mesg = "i: thin-long-wide-tree  gh: quick hide/unhide of dot-files   qf: quick file info  %:open new file"
+    elseif     getline(v:beval_lnum) =~ '^"\s*/'
+     let mesg = "<cr>: edit/enter   o: edit/enter in horiz window   t: edit/enter in new tab   v:edit/enter in vert window"
+    elseif     v:beval_text == "Sorted" || v:beval_text == "by"
+     let mesg = 's: sort by name, time, or file size   r: reverse sorting order   mt: mark target'
+    elseif v:beval_text == "Sort"   || v:beval_text == "sequence"
+     let mesg = "S: edit sorting sequence"
+    elseif v:beval_text == "Hiding" || v:beval_text == "Showing"
+     let mesg = "a: hiding-showing-all   ctrl-h: editing hiding list   mh: hide/show by suffix"
+    elseif v:beval_text == "Quick" || v:beval_text == "Help"
+     let mesg = "Help: press <F1>"
+    elseif v:beval_text == "Copy/Move" || v:beval_text == "Tgt"
+     let mesg = "mt: mark target   mc: copy marked file to target   mm: move marked file to target"
+    else
+     let mesg= ""
+    endif
+    return mesg
+  endfun
+endif
+
 " ------------------------------------------------------------------------
-" s:NetrwOptionSave: save options and set to "standard" form {{{2
+" s:NetrwOptionSave: save options prior to setting to "netrw-buffer-standard" form {{{2
 "  06/08/07 : removed call to NetrwSafeOptions(), either placed
 "             immediately after NetrwOptionSave() calls in NetRead
 "             and NetWrite, or after the s:NetrwEnew() call in
 "             NetrwBrowse.
 "             vt: normally its "w:" or "s:" (a variable type)
 fun! s:NetrwOptionSave(vt)
-"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$"))
-
+"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$")." mod=".&mod." ma=".&ma)
 "  call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist"))
+
   if !exists("{a:vt}netrw_optionsave")
    let {a:vt}netrw_optionsave= 1
   else
 "   call Dret("s:NetrwOptionSave : options already saved")
    return
   endif
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
+"  call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
 
   " Save current settings and current directory
+"  call Decho("saving current settings and current directory")
   let s:yykeep          = @@
-  if exists("&l:acd")
-   let {a:vt}netrw_acdkeep  = &l:acd
-  endif
+  if exists("&l:acd")|let {a:vt}netrw_acdkeep  = &l:acd|endif
   let {a:vt}netrw_aikeep    = &l:ai
   let {a:vt}netrw_awkeep    = &l:aw
+  let {a:vt}netrw_bhkeep    = &l:bh
+  let {a:vt}netrw_blkeep    = &l:bl
+  let {a:vt}netrw_btkeep    = &l:bt
   let {a:vt}netrw_bombkeep  = &l:bomb
+  let {a:vt}netrw_cedit     = &cedit
   let {a:vt}netrw_cikeep    = &l:ci
   let {a:vt}netrw_cinkeep   = &l:cin
   let {a:vt}netrw_cinokeep  = &l:cino
   let {a:vt}netrw_comkeep   = &l:com
   let {a:vt}netrw_cpokeep   = &l:cpo
   let {a:vt}netrw_diffkeep  = &l:diff
-  if g:netrw_keepdir
-   let {a:vt}netrw_dirkeep  = getcwd()
-  endif
+  let {a:vt}netrw_fenkeep   = &l:fen
+  let {a:vt}netrw_ffkeep    = &l:ff
   let {a:vt}netrw_fokeep    = &l:fo           " formatoptions
   let {a:vt}netrw_gdkeep    = &l:gd           " gdefault
   let {a:vt}netrw_hidkeep   = &l:hidden
   let {a:vt}netrw_imkeep    = &l:im
+  let {a:vt}netrw_iskkeep   = &l:isk
+  let {a:vt}netrw_lskeep    = &l:ls
+  let {a:vt}netrw_makeep    = &l:ma
   let {a:vt}netrw_magickeep = &l:magic
+  let {a:vt}netrw_modkeep   = &l:mod
+  let {a:vt}netrw_nukeep    = &l:nu
   let {a:vt}netrw_repkeep   = &l:report
+  let {a:vt}netrw_rokeep    = &l:ro
   let {a:vt}netrw_selkeep   = &l:sel
   let {a:vt}netrw_spellkeep = &l:spell
+  let {a:vt}netrw_tskeep    = &l:ts
   let {a:vt}netrw_twkeep    = &l:tw           " textwidth
   let {a:vt}netrw_wigkeep   = &l:wig          " wildignore
+  let {a:vt}netrw_wrapkeep  = &l:wrap
+  let {a:vt}netrw_writekeep = &l:write
+  if g:netrw_use_noswf && has("win32") && !has("win95")
+   let {a:vt}netrw_swfkeep   = &l:swf
+  endif
+
+  " save a few selected netrw-related variables
+"  call Decho("saving a few selected netrw-related variables")
+  if g:netrw_keepdir
+   let {a:vt}netrw_dirkeep  = getcwd()
+  endif
   if has("win32") && !has("win95")
    let {a:vt}netrw_swfkeep  = &l:swf          " swapfile
   endif
-  if &go =~ 'a' | silent! let {a:vt}netrw_regstar = @* | endif
-  silent! let {a:vt}netrw_regslash= @/
+  if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif
+  sil! let {a:vt}netrw_regslash= @/
 
-"  call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%"))
+"  call Dret("s:NetrwOptionSave : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 endfun
 
 " ------------------------------------------------------------------------
 " s:NetrwOptionRestore: restore options {{{2
 fun! s:NetrwOptionRestore(vt)
-"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")." winnr($)=".winnr("$"))
+"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$"))
   if !exists("{a:vt}netrw_optionsave")
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+   if exists("s:nbcd_curpos_{bufnr('%')}")
+"    call Decho("(NetrwOptionRestore) restoring previous position  (s:nbcd_curpos_".bufnr('%')." exists)")
+    keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
+"    call Decho("(NetrwOptionRestore) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$"))
+"    call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%'))
+    unlet s:nbcd_curpos_{bufnr('%')}
+   else
+"    call Decho("(NetrwOptionRestore) no previous position")
+   endif
+"   call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "   call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
    return
   endif
   unlet {a:vt}netrw_optionsave
 
-  if exists("&acd")
+  if exists("+acd")
    if exists("{a:vt}netrw_acdkeep")
-"    call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"    call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
     let curdir = getcwd()
     let &l:acd = {a:vt}netrw_acdkeep
     unlet {a:vt}netrw_acdkeep
     if &l:acd
-"     call Decho("exe keepjumps lcd ".fnameescape(curdir))  " NOTE: was g:netrw_fname_escape for some reason
+"     call Decho("exe keepj lcd ".fnameescape(curdir))  " NOTE: was g:netrw_fname_escape for some reason
      try
       if !exists("&l:acd") && !&l:acd
        exe 'keepj lcd '.fnameescape(curdir)
@@ -395,27 +598,41 @@
   endif
   if exists("{a:vt}netrw_aikeep")   |let &l:ai     = {a:vt}netrw_aikeep      |unlet {a:vt}netrw_aikeep   |endif
   if exists("{a:vt}netrw_awkeep")   |let &l:aw     = {a:vt}netrw_awkeep      |unlet {a:vt}netrw_awkeep   |endif
+  if g:netrw_liststyle != s:TREELIST
+   if exists("{a:vt}netrw_bhkeep")  |let &l:bh     = {a:vt}netrw_bhkeep      |unlet {a:vt}netrw_bhkeep   |endif
+  endif
+  if exists("{a:vt}netrw_blkeep")   |let &l:bl     = {a:vt}netrw_blkeep      |unlet {a:vt}netrw_blkeep   |endif
+  if exists("{a:vt}netrw_btkeep")   |let &l:bt     = {a:vt}netrw_btkeep      |unlet {a:vt}netrw_btkeep   |endif
   if exists("{a:vt}netrw_bombkeep") |let &l:bomb   = {a:vt}netrw_bombkeep    |unlet {a:vt}netrw_bombkeep |endif
+  if exists("{a:vt}netrw_cedit")    |let &cedit    = {a:vt}netrw_cedit       |unlet {a:vt}netrw_cedit    |endif
   if exists("{a:vt}netrw_cikeep")   |let &l:ci     = {a:vt}netrw_cikeep      |unlet {a:vt}netrw_cikeep   |endif
   if exists("{a:vt}netrw_cinkeep")  |let &l:cin    = {a:vt}netrw_cinkeep     |unlet {a:vt}netrw_cinkeep  |endif
   if exists("{a:vt}netrw_cinokeep") |let &l:cino   = {a:vt}netrw_cinokeep    |unlet {a:vt}netrw_cinokeep |endif
   if exists("{a:vt}netrw_comkeep")  |let &l:com    = {a:vt}netrw_comkeep     |unlet {a:vt}netrw_comkeep  |endif
   if exists("{a:vt}netrw_cpokeep")  |let &l:cpo    = {a:vt}netrw_cpokeep     |unlet {a:vt}netrw_cpokeep  |endif
   if exists("{a:vt}netrw_diffkeep") |let &l:diff   = {a:vt}netrw_diffkeep    |unlet {a:vt}netrw_diffkeep |endif
-  if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir
-   let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g')
-   if exists("{a:vt}netrw_dirkeep")  |exe "keepjumps lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep  |endif
-  endif
+  if exists("{a:vt}netrw_fenkeep")  |let &l:fen    = {a:vt}netrw_fenkeep     |unlet {a:vt}netrw_fenkeep  |endif
+  if exists("{a:vt}netrw_ffkeep")   |let &l:ff     = {a:vt}netrw_ffkeep      |unlet {a:vt}netrw_ffkeep   |endif
   if exists("{a:vt}netrw_fokeep")   |let &l:fo     = {a:vt}netrw_fokeep      |unlet {a:vt}netrw_fokeep   |endif
   if exists("{a:vt}netrw_gdkeep")   |let &l:gd     = {a:vt}netrw_gdkeep      |unlet {a:vt}netrw_gdkeep   |endif
   if exists("{a:vt}netrw_hidkeep")  |let &l:hidden = {a:vt}netrw_hidkeep     |unlet {a:vt}netrw_hidkeep  |endif
   if exists("{a:vt}netrw_imkeep")   |let &l:im     = {a:vt}netrw_imkeep      |unlet {a:vt}netrw_imkeep   |endif
-  if exists("{a:vt}netrw_magic")    |let &l:magic  = {a:vt}netrw_magic       |unlet {a:vt}netrw_magic    |endif
+  if exists("{a:vt}netrw_iskkeep")  |let &l:isk    = {a:vt}netrw_iskkeep     |unlet {a:vt}netrw_iskkeep  |endif
+  if exists("{a:vt}netrw_lskeep")   |let &l:ls     = {a:vt}netrw_lskeep      |unlet {a:vt}netrw_lskeep   |endif
+  if exists("{a:vt}netrw_makeep")   |let &l:ma     = {a:vt}netrw_makeep      |unlet {a:vt}netrw_makeep   |endif
+  if exists("{a:vt}netrw_magickeep")|let &l:magic  = {a:vt}netrw_magickeep   |unlet {a:vt}netrw_magickeep|endif
+  if exists("{a:vt}netrw_modkeep")  |let &l:mod    = {a:vt}netrw_modkeep     |unlet {a:vt}netrw_modkeep  |endif
+  if exists("{a:vt}netrw_nukeep")   |let &l:nu     = {a:vt}netrw_nukeep      |unlet {a:vt}netrw_nukeep   |endif
   if exists("{a:vt}netrw_repkeep")  |let &l:report = {a:vt}netrw_repkeep     |unlet {a:vt}netrw_repkeep  |endif
+  if exists("{a:vt}netrw_rokeep")   |let &l:ro     = {a:vt}netrw_rokeep      |unlet {a:vt}netrw_rokeep   |endif
   if exists("{a:vt}netrw_selkeep")  |let &l:sel    = {a:vt}netrw_selkeep     |unlet {a:vt}netrw_selkeep  |endif
   if exists("{a:vt}netrw_spellkeep")|let &l:spell  = {a:vt}netrw_spellkeep   |unlet {a:vt}netrw_spellkeep|endif
+  " Problem: start with liststyle=0; press <i> : result, following line resets l:ts.
+"  if exists("{a:vt}netrw_tskeep")   |let &l:ts     = {a:vt}netrw_tskeep      |unlet {a:vt}netrw_tskeep   |endif
   if exists("{a:vt}netrw_twkeep")   |let &l:tw     = {a:vt}netrw_twkeep      |unlet {a:vt}netrw_twkeep   |endif
   if exists("{a:vt}netrw_wigkeep")  |let &l:wig    = {a:vt}netrw_wigkeep     |unlet {a:vt}netrw_wigkeep  |endif
+  if exists("{a:vt}netrw_wrapkeep") |let &l:wrap   = {a:vt}netrw_wrapkeep    |unlet {a:vt}netrw_wrapkeep |endif
+  if exists("{a:vt}netrw_writekeep")|let &l:write  = {a:vt}netrw_writekeep   |unlet {a:vt}netrw_writekeep|endif
   if exists("s:yykeep")             |let  @@       = s:yykeep                |unlet s:yykeep             |endif
   if exists("{a:vt}netrw_swfkeep")
    if &directory == ""
@@ -423,3512 +640,4201 @@
     " netrw will temporarily set the swapfile directory
     " to the current directory as returned by getcwd().
     let &l:directory   = getcwd()
-    silent! let &l:swf = {a:vt}netrw_swfkeep
-    setlocal directory=
+    sil! let &l:swf = {a:vt}netrw_swfkeep
+    setl directory=
     unlet {a:vt}netrw_swfkeep
    elseif &l:swf != {a:vt}netrw_swfkeep
     " following line causes a Press ENTER in windows -- can't seem to work around it!!!
-    silent! let &l:swf= {a:vt}netrw_swfkeep
+    sil! let &l:swf= {a:vt}netrw_swfkeep
     unlet {a:vt}netrw_swfkeep
    endif
   endif
-  if exists("{a:vt}netrw_regstar") |silent! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
-  if exists("{a:vt}netrw_regslash")|silent! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
+  if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir
+   let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g')
+   if exists("{a:vt}netrw_dirkeep")  |exe "keepj lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep  |endif
+  endif
+  if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
+  if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
+  if exists("s:nbcd_curpos_{bufnr('%')}")
+"   call Decho("(NetrwOptionRestore) restoring previous position  (s:nbcd_curpos_".bufnr('%')." exists)")
+   keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
+"   call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%'))
+   unlet s:nbcd_curpos_{bufnr('%')}
+  else
+"   call Decho("no previous position")
+  endif
 
-"  call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"  call Decho("diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
-"  call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%"))
+"  call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"  call Decho("(NetrwOptionRestore) fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist"))
+"  call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Decho("(NetrwOptionRestore) diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
+"  call Decho("(NetrwOptionRestore) ts=".&l:ts)
+  " Moved the filetype detect here from NetrwGetFile() because remote files
+  " were having their filetype detect-generated settings overwritten by
+  " NetrwOptionRestore.
+  if &ft != "netrw"
+"   call Decho("(NetrwOptionRestore) filetype detect  (ft=".&ft.")")
+   filetype detect
+  endif
+"  call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 endfun
 
 " ---------------------------------------------------------------------
 " s:NetrwSafeOptions: sets options to help netrw do its job {{{2
+"                     Use  s:NetrwSaveOptions() to save user settings
+"                     Use  s:NetrwOptionRestore() to restore user settings
 fun! s:NetrwSafeOptions()
 "  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$"))
 "  call Decho("win#".winnr()."'s ft=".&ft)
-  setlocal cino=
-  setlocal com=
-  setlocal cpo-=aA
-  if exists("&acd") | setlocal noacd | endif
-  setlocal nocin noai nobomb noci magic nospell nohid wig= noaw noim
-  setlocal fo=nroql2
-  setlocal tw=0
-  setlocal report=10000
-  setlocal isk+=@ isk+=* isk+=/
-  setlocal sel=inclusive
+  if exists("+acd") | setl noacd | endif
+  setl noai
+  setl noaw
+  setl nobomb
+  setl noci
+  setl nocin
+  if g:netrw_liststyle == s:TREELIST
+   setl bh=hide
+  endif
+  setl cino=
+  setl com=
+  setl cpo-=a
+  setl cpo-=A
+  setl fo=nroql2
+   setl nohid
+  setl noim
+  setl isk+=@ isk+=* isk+=/
+  setl magic
+  setl report=10000
+  setl sel=inclusive
+  setl nospell
+  setl tw=0
+  setl wig=
+  set  cedit&
   if g:netrw_use_noswf && has("win32") && !has("win95")
-   setlocal noswf
+   setl noswf
   endif
-  call s:NetrwCursorline()
+  call s:NetrwCursor()
 
   " allow the user to override safe options
 "  call Decho("ft<".&ft."> ei=".&ei)
   if &ft == "netrw"
-"   call Decho("do any netrw FileType autocmds")
-   silent keepalt keepjumps doau FileType netrw
+"   call Decho("do any netrw FileType autocmds (doau FileType netrw)")
+   sil! keepalt keepj doau FileType netrw
   endif
 
-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+"  call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." bh=".&l:bh)
 "  call Dret("s:NetrwSafeOptions")
 endfun
 
 " ---------------------------------------------------------------------
-" netrw#NetrwClean: remove netrw {{{2
-" supports :NetrwClean  -- remove netrw from first directory on runtimepath
-"          :NetrwClean! -- remove netrw from all directories on runtimepath
-fun! netrw#NetrwClean(sys)
-"  call Dfunc("netrw#NetrwClean(sys=".a:sys.")")
-
-  if a:sys
-   let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No")
-  else
-   let choice= confirm("Remove personal copy of netrw?","&Yes\n&No")
-  endif
-"  call Decho("choice=".choice)
-  let diddel= 0
-  let diddir= ""
-
-  if choice == 1
-   for dir in split(&rtp,',')
-    if filereadable(dir."/plugin/netrwPlugin.vim")
-"     call Decho("removing netrw-related files from ".dir)
-     if s:NetrwDelete(dir."/plugin/netrwPlugin.vim")        |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55)        |endif
-     if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
-     if s:NetrwDelete(dir."/autoload/netrwSettings.vim")    |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55)    |endif
-     if s:NetrwDelete(dir."/autoload/netrw.vim")            |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55)            |endif
-     if s:NetrwDelete(dir."/syntax/netrw.vim")              |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55)              |endif
-     if s:NetrwDelete(dir."/syntax/netrwlist.vim")          |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55)          |endif
-     let diddir= dir
-     let diddel= diddel + 1
-     if !a:sys|break|endif
-    endif
-   endfor
+" netrw#Explore: launch the local browser in the directory of the current file {{{2
+"          indx:  == -1: Nexplore
+"                 == -2: Pexplore
+"                 ==  +: this is overloaded:
+"                      * If Nexplore/Pexplore is in use, then this refers to the
+"                        indx'th item in the w:netrw_explore_list[] of items which
+"                        matched the */pattern **/pattern *//pattern **//pattern
+"                      * If Hexplore or Vexplore, then this will override
+"                        g:netrw_winsize to specify the qty of rows or columns the
+"                        newly split window should have.
+"          dosplit==0: the window will be split iff the current file has been modified
+"          dosplit==1: the window will be split before running the local browser
+"          style == 0: Explore     style == 1: Explore!
+"                == 2: Hexplore    style == 3: Hexplore!
+"                == 4: Vexplore    style == 5: Vexplore!
+"                == 6: Texplore
+fun! netrw#Explore(indx,dosplit,style,...)
+"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." modifiable=".&modifiable." a:0=".a:0." win#".winnr()." buf#".bufnr("%"))
+  if !exists("b:netrw_curdir")
+   let b:netrw_curdir= getcwd()
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    let b:netrw_curdir= substitute(b:netrw_curdir,'\','/','g')
+   endif
+"   call Decho("(Explore) set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
   endif
-
-   echohl WarningMsg
-  if diddel == 0
-   echomsg "netrw is either not installed or not removable"
-  elseif diddel == 1
-   echomsg "removed one copy of netrw from <".diddir.">"
-  else
-   echomsg "removed ".diddel." copies of netrw"
+  let curdir     = simplify(b:netrw_curdir)
+  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+  if !exists("g:netrw_cygwin") && (has("win32") || has("win95") || has("win64") || has("win16"))
+   let curdir= substitute(curdir,'\','/','g')
   endif
-   echohl None
+"  call Decho("(Explore) curdir<".curdir.">  curfiledir<".curfiledir.">")
 
-"  call Dret("netrw#NetrwClean")
-endfun
+  " save registers
+  sil! let keepregstar = @*
+  sil! let keepregplus = @+
+  sil! let keepregslash= @/
 
-" ---------------------------------------------------------------------
-" netrw#Nread: {{{2
-fun! netrw#Nread(mode,fname)
-"  call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)")
-  call netrw#NetrwSavePosn()
-  call netrw#NetRead(a:mode,a:fname)
-  call netrw#NetrwRestorePosn()
-"  call Dret("netrw#Nread")
-endfun
+  " if dosplit or file has been modified
+  if a:dosplit || &modified || a:style == 6
+"   call Decho("(Explore) case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified")
+   call s:SaveWinVars()
+   let winsz= g:netrw_winsize
+   if a:indx > 0
+    let winsz= a:indx
+   endif
 
-" ------------------------------------------------------------------------
-"  Netrw Transfer Functions: {{{1
-" ===============================
+   if a:style == 0      " Explore, Sexplore
+"    call Decho("(Explore) style=0: Explore or Sexplore")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe winsz."wincmd s"
 
-" ------------------------------------------------------------------------
-" netrw#NetRead: responsible for reading a file over the net {{{2
-"   mode: =0 read remote file and insert before current line
-"         =1 read remote file and insert after current line
-"         =2 replace with remote file
-"         =3 obtain file, but leave in temporary format
-fun! netrw#NetRead(mode,...)
-"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw)
+   elseif a:style == 1  "Explore!, Sexplore!
+"    call Decho("(Explore) style=1: Explore! or Sexplore!")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt ".winsz."wincmd v"
 
-  " NetRead: save options {{{3
-  call s:NetrwOptionSave("w:")
-  call s:NetrwSafeOptions()
-  call s:RestoreCursorline()
+   elseif a:style == 2  " Hexplore
+"    call Decho("(Explore) style=2: Hexplore")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe "keepalt bel ".winsz."wincmd s"
 
-  " NetRead: interpret mode into a readcmd {{{3
-  if     a:mode == 0 " read remote file before current line
-   let readcmd = "0r"
-  elseif a:mode == 1 " read file after current line
-   let readcmd = "r"
-  elseif a:mode == 2 " replace with remote file
-   let readcmd = "%r"
-  elseif a:mode == 3 " skip read of file (leave as temporary)
-   let readcmd = "t"
-  else
-   exe a:mode
-   let readcmd = "r"
-  endif
-  let ichoice = (a:0 == 0)? 0 : 1
-"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
+   elseif a:style == 3  " Hexplore!
+"    call Decho("(Explore) style=3: Hexplore!")
+    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
+    exe "keepalt abo ".winsz."wincmd s"
 
-  " NetRead: get temporary filename {{{3
-  let tmpfile= s:GetTempfile("")
-  if tmpfile == ""
-"   call Dret("netrw#NetRead : unable to get a tempfile!")
-   return
-  endif
+   elseif a:style == 4  " Vexplore
+"    call Decho("(Explore) style=4: Vexplore")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt lefta ".winsz."wincmd v"
 
-  while ichoice <= a:0
+   elseif a:style == 5  " Vexplore!
+"    call Decho("(Explore) style=5: Vexplore!")
+    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
+    exe "keepalt rightb ".winsz."wincmd v"
 
-   " attempt to repeat with previous host-file-etc
-   if exists("b:netrw_lastfile") && a:0 == 0
-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
-    let choice = b:netrw_lastfile
-    let ichoice= ichoice + 1
+   elseif a:style == 6  " Texplore
+    call s:SaveBufVars()
+"    call Decho("(Explore) style  = 6: Texplore")
+    exe "keepalt tabnew ".fnameescape(curdir)
+    call s:RestoreBufVars()
+   endif
+   call s:RestoreWinVars()
+"  else " Decho
+"   call Decho("(Explore) case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
+  endif
+  keepj norm! 0
 
+  if a:0 > 0
+"   call Decho("(Explore) case [a:0=".a:0."] > 0: a:1<".a:1.">")
+   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
+"    call Decho("(Explore) ..case a:1<".a:1.">: starts with ~ and unix or cygwin")
+    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
+"    call Decho("(Explore) ..using dirname<".dirname.">  (case: ~ && unix||cygwin)")
+   elseif a:1 == '.'
+"    call Decho("(Explore) ..case a:1<".a:1.">: matches .")
+    let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
+    if dirname !~ '/$'
+     let dirname= dirname."/"
+    endif
+"    call Decho("(Explore) ..using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
+   elseif a:1 =~ '\$'
+"    call Decho("(Explore) ..case a:1<".a:1.">: matches ending $")
+    let dirname= simplify(expand(a:1))
+"    call Decho("(Explore) ..using user-specified dirname<".dirname."> with $env-var")
+   elseif a:1 !~ '^\*\{1,2}/' && a:1 !~ '^\a\{3,}://'
+"    call Decho("(Explore) ..case a:1<".a:1.">: other, not pattern or filepattern")
+    let dirname= simplify(a:1)
+"    call Decho("(Explore) ..using user-specified dirname<".dirname.">")
    else
-    exe "let choice= a:" . ichoice
-"    call Decho("no lastfile: choice<" . choice . ">")
+"    call Decho("(Explore) ..case a:1: pattern or filepattern")
+    let dirname= a:1
+   endif
+  else
+   " clear explore
+"   call Decho("(Explore) case a:0=".a:0.": clearing Explore list")
+   call s:NetrwClearExplore()
+"   call Dret("netrw#Explore : cleared list")
+   return
+  endif
 
-    if match(choice,"?") == 0
-     " give help
-     echomsg 'NetRead Usage:'
-     echomsg ':Nread machine:path                         uses rcp'
-     echomsg ':Nread "machine path"                       uses ftp   with <.netrc>'
-     echomsg ':Nread "machine id password path"           uses ftp'
-     echomsg ':Nread dav://machine[:port]/path            uses cadaver'
-     echomsg ':Nread fetch://machine/path                 uses fetch'
-     echomsg ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
-     echomsg ':Nread http://[user@]machine/path           uses http  wget'
-     echomsg ':Nread rcp://[user@]machine/path            uses rcp'
-     echomsg ':Nread rsync://machine[:port]/path          uses rsync'
-     echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
-     echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
-     sleep 4
-     break
+"  call Decho("(Explore) dirname<".dirname.">")
+  if dirname =~ '\.\./\=$'
+   let dirname= simplify(fnamemodify(dirname,':p:h'))
+  elseif dirname =~ '\.\.' || dirname == '.'
+   let dirname= simplify(fnamemodify(dirname,':p'))
+  endif
+"  call Decho("(Explore) dirname<".dirname.">  (after simplify)")
 
-    elseif match(choice,'^"') != -1
-     " Reconstruct Choice if choice starts with '"'
-"     call Decho("reconstructing choice")
-     if match(choice,'"$') != -1
-      " case "..."
-      let choice=strpart(choice,1,strlen(choice)-2)
-     else
-       "  case "... ... ..."
-      let choice      = strpart(choice,1,strlen(choice)-1)
-      let wholechoice = ""
+  if dirname =~ '^\*//'
+   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
+"   call Decho("(Explore) case starpat=1: Explore *//pattern")
+   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
+   let starpat= 1
+"   call Decho("(Explore) ..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
 
-      while match(choice,'"$') == -1
-       let wholechoice = wholechoice . " " . choice
-       let ichoice     = ichoice + 1
-       if ichoice > a:0
-       	if !exists("g:netrw_quiet")
-	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
-	endif
-"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
-        return
-       endif
-       let choice= a:{ichoice}
-      endwhile
-      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
-     endif
-    endif
+  elseif dirname =~ '^\*\*//'
+   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
+"   call Decho("(Explore) case starpat=2: Explore **//pattern")
+   let pattern= substitute(dirname,'^\*\*//','','')
+   let starpat= 2
+"   call Decho("(Explore) ..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+
+  elseif dirname =~ '/\*\*/'
+   " handle .../**/.../filepat
+"   call Decho("(Explore) case starpat=4: Explore .../**/.../filepat")
+   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
+   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
+    let b:netrw_curdir = prefixdir
+   else
+    let b:netrw_curdir= getcwd().'/'.prefixdir
    endif
+   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
+   let starpat= 4
+"   call Decho("(Explore) ..pwd<".getcwd()."> dirname<".dirname.">")
+"   call Decho("(Explore) ..case Explore ../**/../filepat (starpat=".starpat.")")
 
-"   call Decho("choice<" . choice . ">")
-   let ichoice= ichoice + 1
+  elseif dirname =~ '^\*/'
+   " case starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+   let starpat= 3
+"   call Decho("(Explore) case starpat=3: Explore */filepat (starpat=".starpat.")")
 
-   " NetRead: Determine method of read (ftp, rcp, etc) {{{3
-   call s:NetrwMethod(choice)
-   if !exists("b:netrw_method") || b:netrw_method < 0
-"    call Dfunc("netrw#NetRead : unsupported method")
-    return
-   endif
-   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
+  elseif dirname=~ '^\*\*/'
+   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+   let starpat= 4
+"   call Decho("(Explore) case starpat=4: Explore **/filepat (starpat=".starpat.")")
 
-   " Check if NetrwBrowse() should be handling this request
-"   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
-   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://'
-"    call Decho("yes, choice matches '^.*[\/]$'")
-    keepj call s:NetrwBrowse(0,choice)
-"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
-    return
+  else
+   let starpat= 0
+"   call Decho("(Explore) case starpat=0: default")
+  endif
+
+  if starpat == 0 && a:indx >= 0
+   " [Explore Hexplore Vexplore Sexplore] [dirname]
+"   call Decho("(Explore) case starpat==0 && a:indx=".a:indx.": dirname<".dirname.">, handles Explore Hexplore Vexplore Sexplore")
+   if dirname == ""
+    let dirname= curfiledir
+"    call Decho("(Explore) ..empty dirname, using current file's directory<".dirname.">")
+   endif
+   if dirname =~ '^scp://' || dirname =~ '^ftp://'
+    call netrw#Nread(2,dirname)
+    "call s:NetrwBrowse(0,dirname)
+   else
+    if dirname == ""
+     let dirname= getcwd()
+    elseif (has("win32") || has("win95") || has("win64") || has("win16")) && !g:netrw_cygwin
+     if dirname !~ '^[a-zA-Z]:'
+      let dirname= b:netrw_curdir."/".dirname
+     endif
+    elseif dirname !~ '^/'
+     let dirname= b:netrw_curdir."/".dirname
+    endif
+"    call Decho("(Explore) ..calling LocalBrowseCheck(dirname<".dirname.">)")
+    call netrw#LocalBrowseCheck(dirname)
+"    call Decho("(Explore) win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
    endif
+   if exists("w:netrw_bannercnt")
+    " done to handle P08-Ingelrest. :Explore will _Always_ go to the line just after the banner.
+    " If one wants to return the same place in the netrw window, use :Rex instead.
+    exe w:netrw_bannercnt
+   endif
+
+"   call Decho("(Explore) curdir<".curdir.">")
+   " ---------------------------------------------------------------------
+   " Jan 24, 2013: not sure why the following was present.  See P08-Ingelrest
+"   if has("win32") || has("win95") || has("win64") || has("win16")
+"    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
+"   else
+"    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
+"   endif
+   " ---------------------------------------------------------------------
 
-   " ============
-   " NetRead: Perform Protocol-Based Read {{{3
-   " ===========================
-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
-    echo "(netrw) Processing your read request..."
+  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+  elseif a:indx <= 0
+   " Nexplore, Pexplore, Explore: handle starpat
+"   call Decho("(Explore) case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
+   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
+"    call Decho("(Explore) ..set up <s-up> and <s-down> maps")
+    let s:didstarstar= 1
+    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
    endif
 
-   ".........................................
-   " NetRead: (rcp)  NetRead Method #1 {{{3
-   if  b:netrw_method == 1 " read with rcp
-"    call Decho("read via rcp (method #1)")
-   " ER: nothing done with g:netrw_uid yet?
-   " ER: on Win2K" rcp machine[.user]:file tmpfile
-   " ER: if machine contains '.' adding .user is required (use $USERNAME)
-   " ER: the tmpfile is full path: rcp sees C:\... as host C
-   if s:netrw_has_nt_rcp == 1
-    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
-     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
-    else
-     " Any way needed it machine contains a '.'
-     let uid_machine = g:netrw_machine .'.'. $USERNAME
-    endif
-   else
-    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
-     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-    else
-     let uid_machine = g:netrw_machine
+   if has("path_extra")
+"    call Decho("(Explore) ..starpat=".starpat.": has +path_extra")
+    if !exists("w:netrw_explore_indx")
+     let w:netrw_explore_indx= 0
     endif
-   endif
-"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
-   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
-   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-   let b:netrw_lastfile = choice
 
-   ".........................................
-   " NetRead: (ftp + <.netrc>)  NetRead Method #2 {{{3
-   elseif b:netrw_method  == 2		" read with ftp + <.netrc>
-"     call Decho("read via ftp+.netrc (method #2)")
-     let netrw_fname= b:netrw_fname
-     call s:SaveBufVars()|new|call s:RestoreBufVars()
-     let filtbuf= bufnr("%")
-     setlocal ff=unix
-     keepj put =g:netrw_ftpmode
-"     call Decho("filter input: ".getline(line("$")))
-     if exists("g:netrw_ftpextracmd")
-      keepj put =g:netrw_ftpextracmd
-"      call Decho("filter input: ".getline(line("$")))
-     endif
-     call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile)
-"     call Decho("filter input: ".getline(line("$")))
-     if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1)
-     else
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
-     endif
-     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
-      let debugkeep = &debug
-      setlocal debug=msg
-      call netrw#ErrorMsg(s:ERROR,getline(1),4)
-      let &debug    = debugkeep
+    let indx = a:indx
+"    call Decho("(Explore) ..starpat=".starpat.": set indx= [a:indx=".indx."]")
+
+    if indx == -1
+     " Nexplore
+"     call Decho("(Explore) ..case Nexplore with starpat=".starpat.": (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      keepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
      endif
-     call s:SaveBufVars()
-     bd!
-     if bufname("%") == "" && getline("$") == "" && line('$') == 1
-      " needed when one sources a file in a nolbl setting window via ftp
-      q!
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("(Explore) ....indx=".indx." curfile<".curfile.">")
+     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
+      let indx= indx + 1
+"      call Decho("(Explore) ....indx=".indx." (Nexplore while loop)")
+     endwhile
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+"     call Decho("(Explore) ....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+
+    elseif indx == -2
+     " Pexplore
+"     call Decho("(Explore) case Pexplore with starpat=".starpat.": (indx=".indx.")")
+     if !exists("w:netrw_explore_list") " sanity check
+      keepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore")
+      return
      endif
-     call s:RestoreBufVars()
-     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-     let b:netrw_lastfile = choice
+     let indx= w:netrw_explore_indx
+     if indx < 0                        | let indx= 0                           | endif
+     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+     let curfile= w:netrw_explore_list[indx]
+"     call Decho("(Explore) ....indx=".indx." curfile<".curfile.">")
+     while indx >= 0 && curfile == w:netrw_explore_list[indx]
+      let indx= indx - 1
+"      call Decho("(Explore) ....indx=".indx." (Pexplore while loop)")
+     endwhile
+     if indx < 0                        | let indx= 0                           | endif
+"     call Decho("(Explore) ....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
 
-   ".........................................
-   " NetRead: (ftp + machine,id,passwd,filename)  NetRead Method #3 {{{3
-   elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
-    " Construct execution string (four lines) which will be passed through filter
-"    call Decho("read via ftp+mipf (method #3)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    call s:SaveBufVars()|new|call s:RestoreBufVars()
-    let filtbuf= bufnr("%")
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline('.'))
     else
-     keepj put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline('.'))
-    endif
+     " Explore -- initialize
+     " build list of files to Explore with Nexplore/Pexplore
+"     call Decho("(Explore) ..starpat=".starpat.": case Explore: initialize (indx=".indx.")")
+     keepj keepalt call s:NetrwClearExplore()
+     let w:netrw_explore_indx= 0
+     if !exists("b:netrw_curdir")
+      let b:netrw_curdir= getcwd()
+     endif
+"     call Decho("(Explore) ....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
 
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     keepj put =g:netrw_uid
-"     call Decho("filter input: ".getline('.'))
-     keepj put ='\"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('.'))
-    else
-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('.'))
-    endif
+     " switch on starpat to build the w:netrw_explore_list of files
+     if starpat == 1
+      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+"      call Decho("(Explore) ..case starpat=".starpat.": build *//pattern list  (curdir-only srch for files containing pattern)  &hls=".&hls)
+"      call Decho("(Explore) ....pattern<".pattern.">")
+      try
+       exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
+      catch /^Vim\%((\a\+)\)\=:E480/
+       keepalt call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
+"       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
+       return
+      endtry
+      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
+      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
 
-    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-     keepj put =g:netrw_ftpmode
-"     call Decho("filter input: ".getline('.'))
-    endif
-    if exists("g:netrw_ftpextracmd")
-     put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline('.'))
-    endif
-    keepj put ='get \"'.netrw_fname.'\" '.tmpfile
-"    call Decho("filter input: ".getline('.'))
+     elseif starpat == 2
+      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+"      call Decho("(Explore) ..case starpat=".starpat.": build **//pattern list  (recursive descent files containing pattern)")
+"      call Decho("(Explore) ....pattern<".pattern.">")
+      try
+       exe "sil keepj noautocmd keepalt vimgrep /".pattern."/gj "."**/*"
+      catch /^Vim\%((\a\+)\)\=:E480/
+       keepalt call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
+       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+       sil! let @* = keepregstar
+       sil! let @+ = keepregstar
+       sil! let @/ = keepregslash
+"       call Dret("netrw#Explore : no files matched pattern")
+       return
+      endtry
+      let s:netrw_curdir       = b:netrw_curdir
+      let w:netrw_explore_list = getqflist()
+      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
+      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
 
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-    norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-"     call Decho("error<".getline(1).">")
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),5)
-     endif
-    endif
-    call s:SaveBufVars()|bd!|call s:RestoreBufVars()
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
+     elseif starpat == 3
+      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+"      call Decho("(Explore) ..case starpat=".starpat.": build */filepat list  (curdir-only srch filenames matching filepat)  &hls=".&hls)
+      let filepat= substitute(dirname,'^\*/','','')
+      let filepat= substitute(filepat,'^[%#<]','\\&','')
+"      call Decho("(Explore) ....b:netrw_curdir<".b:netrw_curdir.">")
+"      call Decho("(Explore) ....filepat<".filepat.">")
+      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
+      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
 
-   ".........................................
-   " NetRead: (scp) NetRead Method #4 {{{3
-   elseif     b:netrw_method  == 4	" read with scp
-"    call Decho("read via scp (method #4)")
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".g:netrw_port
-    else
-     let useport= ""
-    endif
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
+     elseif starpat == 4
+      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+"      call Decho("(Explore) ..case starpat=".starpat.": build **/filepat list  (recursive descent srch filenames matching filepat)  &hls=".&hls)
+      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
+      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
+     endif " switch on starpat to build w:netrw_explore_list
 
-   ".........................................
-   " NetRead: (http) NetRead Method #5 (wget) {{{3
-   elseif     b:netrw_method  == 5
-"    call Decho("read via http (method #5)")
-    if g:netrw_http_cmd == ""
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
-     endif
-"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
-     return
-    endif
+     let w:netrw_explore_listlen = len(w:netrw_explore_list)
+"     call Decho("(Explore) ....w:netrw_explore_list<".string(w:netrw_explore_list).">")
+"     call Decho("(Explore) ....w:netrw_explore_listlen=".w:netrw_explore_listlen)
 
-    if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd")
-     " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch)
-"     call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)")
-     if exists("g:netrw_http_xcmd")
-"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1))
-      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
-     else
-"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1))
-      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
+     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
+      keepalt keepj call netrw#ErrorMsg(s:WARNING,"no files matched",42)
+      sil! let @* = keepregstar
+      sil! let @+ = keepregstar
+      sil! let @/ = keepregslash
+"      call Dret("netrw#Explore : no files matched")
+      return
      endif
-     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-
-    else
-     " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
-"     call Decho(("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
-     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
-     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
-"     call Decho("netrw_html<".netrw_html.">")
-"     call Decho("netrw_tag <".netrw_tag.">")
-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1))
-     exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
-     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
-     exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
-    endif
-    let b:netrw_lastfile = choice
-    setlocal ro
-
-   ".........................................
-   " NetRead: (dav) NetRead Method #6 {{{3
-   elseif     b:netrw_method  == 6
-"    call Decho("read via cadaver (method #6)")
+    endif  " if indx ... endif
 
-    if !executable(g:netrw_dav_cmd)
-     call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73)
-"     call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable")
-     return
-    endif
-    if g:netrw_dav_cmd =~ "curl"
-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1))
-     exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)
-    else
-     " Construct execution string (four lines) which will be passed through filter
-     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-     new
-     setlocal ff=unix
-     if exists("g:netrw_port") && g:netrw_port != ""
-      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-     else
-      keepj put ='open '.g:netrw_machine
-     endif
-     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
-     keepj put ='get '.netrw_fname.' '.tmpfile
-     keepj put ='quit'
+    " NetrwStatusLine support - for exploring support
+    let w:netrw_explore_indx= indx
+"    call Decho("(Explore) ....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
 
-     " perform cadaver operation:
-     keepj norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_dav_cmd)
-     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
-     bd!
+    " wrap the indx around, but issue a note
+    if indx >= w:netrw_explore_listlen || indx < 0
+"     call Decho("(Explore) ....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
+     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
+     let w:netrw_explore_indx= indx
+     keepalt keepj call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
     endif
-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
 
-   ".........................................
-   " NetRead: (rsync) NetRead Method #7 {{{3
-   elseif     b:netrw_method  == 7
-"    call Decho("read via rsync (method #7)")
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
-    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
-    let result		 = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
+    exe "let dirfile= w:netrw_explore_list[".indx."]"
+"    call Decho("(Explore) ....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
+    let newdir= substitute(dirfile,'/[^/]*$','','e')
+"    call Decho("(Explore) ....newdir<".newdir.">")
 
-   ".........................................
-   " NetRead: (fetch) NetRead Method #8 {{{3
-   "    fetch://[user@]host[:http]/path
-   elseif     b:netrw_method  == 8
-"    call Decho("read via fetch (method #8)")
-    if g:netrw_fetch_cmd == ""
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
-     endif
-"     call Dret("NetRead")
-    endif
-    if exists("g:netrw_option") && g:netrw_option == ":http"
-     let netrw_option= "http"
-    else
-     let netrw_option= "ftp"
+"    call Decho("(Explore) ....calling LocalBrowseCheck(newdir<".newdir.">)")
+    call netrw#LocalBrowseCheck(newdir)
+    if !exists("w:netrw_liststyle")
+     let w:netrw_liststyle= g:netrw_liststyle
     endif
-"    call Decho("read via fetch for ".netrw_option)
-
-    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1))
-     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)
+    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
+     keepalt keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
     else
-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1))
-     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)
+     keepalt keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
     endif
+    let w:netrw_explore_mtchcnt = indx + 1
+    let w:netrw_explore_bufnr   = bufnr("%")
+    let w:netrw_explore_line    = line(".")
+    keepalt keepj call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
+"    call Decho("(Explore) ....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
 
-    let result		= s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-    setlocal ro
-
-   ".........................................
-   " NetRead: (sftp) NetRead Method #9 {{{3
-   elseif     b:netrw_method  == 9
-"    call Decho("read via sftp (method #9)")
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
-    exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile
-    let result		= s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " NetRead: Complain {{{3
    else
-    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
+"    call Decho("(Explore) ..your vim does not have +path_extra")
+    if !exists("g:netrw_quiet")
+     keepalt keepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
+    endif
+    sil! let @* = keepregstar
+    sil! let @+ = keepregstar
+    sil! let @/ = keepregslash
+"    call Dret("netrw#Explore : missing +path_extra")
+    return
    endif
-  endwhile
-
-  " NetRead: cleanup {{{3
-  if exists("b:netrw_method")
-"   call Decho("cleanup b:netrw_method and b:netrw_fname")
-   unlet b:netrw_method
-   unlet b:netrw_fname
-  endif
-  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz'
-"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
-   call s:NetrwDelete(tmpfile)
-  endif
-  call s:NetrwOptionRestore("w:")
-
-"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
-endfun
-
-" ------------------------------------------------------------------------
-" netrw#NetWrite: responsible for writing a file over the net {{{2
-fun! netrw#NetWrite(...) range
-"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
-
-  " NetWrite: option handling {{{3
-  let mod= 0
-  call s:NetrwOptionSave("w:")
-  call s:NetrwSafeOptions()
-
-  " NetWrite: Get Temporary Filename {{{3
-  let tmpfile= s:GetTempfile("")
-  if tmpfile == ""
-"   call Dret("netrw#NetWrite : unable to get a tempfile!")
-   return
-  endif
 
-  if a:0 == 0
-   let ichoice = 0
   else
-   let ichoice = 1
+"   call Decho("(Explore) ..default case: Explore newdir<".dirname.">")
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
+    sil! unlet w:netrw_treedict
+    sil! unlet w:netrw_treetop
+   endif
+   let newdir= dirname
+   if !exists("b:netrw_curdir")
+    keepj call netrw#LocalBrowseCheck(getcwd())
+   else
+    keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
+   endif
   endif
 
-  let curbufname= expand("%")
-"  call Decho("curbufname<".curbufname.">")
-  if &binary
-   " For binary writes, always write entire file.
-   " (line numbers don't really make sense for that).
-   " Also supports the writing of tar and zip files.
-"   call Decho("(write entire file) silent exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
-   exe "silent keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
-  elseif g:netrw_cygwin
-   " write (selected portion of) file to temporary
-   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
-"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
-   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
+  " visual display of **/ **// */ Exploration files
+"  call Decho("(Explore) w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
+"  call Decho("(Explore) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
+  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
+"   call Decho("(Explore) s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
+   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
+    " only update match list if current directory isn't the same as before
+"    call Decho("(Explore) only update match list if current directory not the same as before")
+    let s:explore_prvdir = b:netrw_curdir
+    let s:explore_match  = ""
+    let dirlen           = s:Strlen(b:netrw_curdir)
+    if b:netrw_curdir !~ '/$'
+     let dirlen= dirlen + 1
+    endif
+    let prvfname= ""
+    for fname in w:netrw_explore_list
+"     call Decho("(Explore) fname<".fname.">")
+     if fname =~ '^'.b:netrw_curdir
+      if s:explore_match == ""
+       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
+      else
+       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
+      endif
+     elseif fname !~ '^/' && fname != prvfname
+      if s:explore_match == ""
+       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
+      else
+       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
+      endif
+     endif
+     let prvfname= fname
+    endfor
+"    call Decho("(Explore) explore_match<".s:explore_match.">")
+    exe "2match netrwMarkFile /".s:explore_match."/"
+   endif
+   echo "<s-up>==Pexplore  <s-down>==Nexplore"
   else
-   " write (selected portion of) file to temporary
-"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
-   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+   2match none
+   if exists("s:explore_match")  | unlet s:explore_match  | endif
+   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
+   echo " "
+"   call Decho("(Explore) cleared explore match list")
   endif
 
-  if curbufname == ""
-   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
-   " on the temporary file's name.  Deletion of the temporary file during
-   " cleanup then causes an error message.
-   0file!
+  sil! let @* = keepregstar
+  sil! let @+ = keepregstar
+  sil! let @/ = keepregslash
+"  call Dret("netrw#Explore : @/<".@/.">")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetrwMakeTgt: make a target out of the directory name provided {{{2
+fun! netrw#NetrwMakeTgt(dname)
+"  call Dfunc("netrw#NetrwMakeTgt(dname<".a:dname.">)")
+   " simplify the target (eg. /abc/def/../ghi -> /abc/ghi)
+  let svpos               = netrw#NetrwSavePosn()
+  let s:netrwmftgt_islocal= (a:dname !~ '^\a\+://')
+"  call Decho("s:netrwmftgt_islocal=".s:netrwmftgt_islocal)
+  if s:netrwmftgt_islocal
+   let netrwmftgt= simplify(a:dname)
+  else
+   let netrwmftgt= a:dname
+  endif
+  if exists("s:netrwmftgt") && netrwmftgt == s:netrwmftgt
+   " re-selected target, so just clear it
+   unlet s:netrwmftgt s:netrwmftgt_islocal
+  else
+   let s:netrwmftgt= netrwmftgt
+  endif
+  if g:netrw_fastbrowse <= 1
+   call s:NetrwRefresh((b:netrw_curdir !~ '\a\+://'),b:netrw_curdir)
   endif
+  call netrw#NetrwRestorePosn(svpos)
+"  call Dret("netrw#NetrwMakeTgt")
+endfun
 
-  " NetWrite: while choice loop: {{{3
-  while ichoice <= a:0
+" ---------------------------------------------------------------------
+" netrw#NetrwClean: remove netrw {{{2
+" supports :NetrwClean  -- remove netrw from first directory on runtimepath
+"          :NetrwClean! -- remove netrw from all directories on runtimepath
+fun! netrw#NetrwClean(sys)
+"  call Dfunc("netrw#NetrwClean(sys=".a:sys.")")
 
-   " Process arguments: {{{4
-   " attempt to repeat with previous host-file-etc
-   if exists("b:netrw_lastfile") && a:0 == 0
-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
-    let choice = b:netrw_lastfile
-    let ichoice= ichoice + 1
-   else
-    exe "let choice= a:" . ichoice
+  if a:sys
+   let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No")
+  else
+   let choice= confirm("Remove personal copy of netrw?","&Yes\n&No")
+  endif
+"  call Decho("choice=".choice)
+  let diddel= 0
+  let diddir= ""
 
-    " Reconstruct Choice if choice starts with '"'
-    if match(choice,"?") == 0
-     echomsg 'NetWrite Usage:"'
-     echomsg ':Nwrite machine:path                        uses rcp'
-     echomsg ':Nwrite "machine path"                      uses ftp with <.netrc>'
-     echomsg ':Nwrite "machine id password path"          uses ftp'
-     echomsg ':Nwrite dav://[user@]machine/path           uses cadaver'
-     echomsg ':Nwrite fetch://[user@]machine/path         uses fetch'
-     echomsg ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
-     echomsg ':Nwrite rcp://machine/path                  uses rcp'
-     echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
-     echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
-     echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
-     sleep 4
-     break
+  if choice == 1
+   for dir in split(&rtp,',')
+    if filereadable(dir."/plugin/netrwPlugin.vim")
+"     call Decho("removing netrw-related files from ".dir)
+     if s:NetrwDelete(dir."/plugin/netrwPlugin.vim")        |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55)        |endif
+     if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
+     if s:NetrwDelete(dir."/autoload/netrwSettings.vim")    |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55)    |endif
+     if s:NetrwDelete(dir."/autoload/netrw.vim")            |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55)            |endif
+     if s:NetrwDelete(dir."/syntax/netrw.vim")              |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55)              |endif
+     if s:NetrwDelete(dir."/syntax/netrwlist.vim")          |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55)          |endif
+     let diddir= dir
+     let diddel= diddel + 1
+     if !a:sys|break|endif
+    endif
+   endfor
+  endif
 
-    elseif match(choice,"^\"") != -1
-     if match(choice,"\"$") != -1
-       " case "..."
-      let choice=strpart(choice,1,strlen(choice)-2)
-     else
-      "  case "... ... ..."
-      let choice      = strpart(choice,1,strlen(choice)-1)
-      let wholechoice = ""
+   echohl WarningMsg
+  if diddel == 0
+   echomsg "netrw is either not installed or not removable"
+  elseif diddel == 1
+   echomsg "removed one copy of netrw from <".diddir.">"
+  else
+   echomsg "removed ".diddel." copies of netrw"
+  endif
+   echohl None
 
-      while match(choice,"\"$") == -1
-       let wholechoice= wholechoice . " " . choice
-       let ichoice    = ichoice + 1
-       if choice > a:0
-       	if !exists("g:netrw_quiet")
-	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
-	endif
-"        call Dret("netrw#NetWrite")
-        return
-       endif
-       let choice= a:{ichoice}
-      endwhile
-      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+"  call Dret("netrw#NetrwClean")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#Nread: {{{2
+fun! netrw#Nread(mode,fname)
+"  call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)")
+  call netrw#NetrwSavePosn()
+  call netrw#NetRead(a:mode,a:fname)
+  call netrw#NetrwRestorePosn()
+"  call Dret("netrw#Nread")
+endfun
+
+" ------------------------------------------------------------------------
+" netrw#NetrwObtain: {{{2
+"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
+"     islocal=0  obtain from remote source
+"            =1  obtain from local source
+"     fname  :   a filename or a list of filenames
+"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
+fun! netrw#NetrwObtain(islocal,fname,...)
+"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
+  " NetrwStatusLine support - for obtaining support
+
+  if type(a:fname) == 1
+   let fnamelist= [ a:fname ]
+  elseif type(a:fname) == 3
+   let fnamelist= a:fname
+  else
+   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
+"   call Dret("netrw#NetrwObtain")
+   return
+  endif
+"  call Decho("fnamelist<".string(fnamelist).">")
+  if a:0 > 0
+   let tgtdir= a:1
+  else
+   let tgtdir= getcwd()
+  endif
+"  call Decho("tgtdir<".tgtdir.">")
+
+  if exists("b:netrw_islocal") && b:netrw_islocal
+   " obtain a file from local b:netrw_curdir to (local) tgtdir
+"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
+   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
+    let topath= s:ComposePath(tgtdir,"")
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+     " transfer files one at time
+"     call Decho("transfer files one at a time")
+     for fname in fnamelist
+"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
+      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
+      if v:shell_error != 0
+       call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+"       call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
+       return
+      endif
+     endfor
+    else
+     " transfer files with one command
+"     call Decho("transfer files with one command")
+     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
+"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
+     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
+     if v:shell_error != 0
+      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
+"      call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
+      return
      endif
     endif
-   endif
-   let ichoice= ichoice + 1
-"   call Decho("choice<" . choice . "> ichoice=".ichoice)
-
-   " Determine method of write (ftp, rcp, etc) {{{4
-   call s:NetrwMethod(choice)
-   if !exists("b:netrw_method") || b:netrw_method < 0
-"    call Dfunc("netrw#NetWrite : unsupported method")
-    return
+   elseif !exists("b:netrw_curdir")
+    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
+   else
+    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
    endif
 
-   " =============
-   " NetWrite: Perform Protocol-Based Write {{{3
-   " ============================
-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
-    echo "(netrw) Processing your write request..."
-"    call Decho("(netrw) Processing your write request...")
+  else
+   " obtain files from remote b:netrw_curdir to local tgtdir
+"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
+   if type(a:fname) == 1
+    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
    endif
+   call s:NetrwMethod(b:netrw_curdir)
 
-   ".........................................
-   " NetWrite: (rcp) NetWrite Method #1 {{{3
-   if  b:netrw_method == 1
-"    call Decho("write via rcp (method #1)")
-    if s:netrw_has_nt_rcp == 1
-     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
-     else
-      let uid_machine = g:netrw_machine .'.'. $USERNAME
-     endif
+   if b:netrw_method == 4
+    " obtain file using scp
+"    call Decho("obtain via scp (method#4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".g:netrw_port
     else
-     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-     else
-      let uid_machine = g:netrw_machine
-     endif
+     let useport= ""
     endif
-"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1))
-    exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3
-   elseif b:netrw_method == 2
-"    call Decho("write via ftp+.netrc (method #2)")
-    let netrw_fname = b:netrw_fname
-
-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
-    let bhkeep      = &l:bh
-    let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
-
-"    call Decho("filter input window#".winnr())
-    setlocal ff=unix
-    keepj put =g:netrw_ftpmode
-"    call Decho("filter input: ".getline('$'))
-    if exists("g:netrw_ftpextracmd")
-     keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline("$"))
-    endif
-    call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"')
-"    call Decho("filter input: ".getline("$"))
-    if exists("g:netrw_port") && g:netrw_port != ""
-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+    if b:netrw_fname =~ '/'
+     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
     else
-"     call Decho("filter input window#".winnr())
-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     let path= ""
     endif
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),14)
+    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
+
+   elseif b:netrw_method == 2
+    " obtain file using ftp + .netrc
+"     call Decho("obtain via ftp+.netrc (method #2)")
+     call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
+     let tmpbufnr= bufnr("%")
+     setl ff=unix
+     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+      keepj put =g:netrw_ftpmode
+"      call Decho("filter input: ".getline('$'))
      endif
-     let mod=1
-    endif
 
-    " remove enew buffer (quietly)
-    let filtbuf= bufnr("%")
-    exe curbuf."b!"
-    let &l:bh            = bhkeep
-    exe filtbuf."bw!"
+     if exists("b:netrw_fname") && b:netrw_fname != ""
+      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endif
 
-    let b:netrw_lastfile = choice
+     if exists("g:netrw_ftpextracmd")
+      keepj put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline('$'))
+     endif
+     for fname in fnamelist
+      call setline(line("$")+1,'get "'.fname.'"')
+"      call Decho("filter input: ".getline('$'))
+     endfor
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+     else
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     endif
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      let debugkeep= &debug
+      setl debug=msg
+      call netrw#ErrorMsg(s:ERROR,getline(1),4)
+      let &debug= debugkeep
+     endif
 
-   ".........................................
-   " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3
    elseif b:netrw_method == 3
-    " Construct execution string (three or more lines) which will be passed through filter
-"    call Decho("read via ftp+mipf (method #3)")
-    let netrw_fname = b:netrw_fname
-    let bhkeep      = &l:bh
-
-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
-    let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
-    setlocal ff=unix
+    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
+"    call Decho("obtain via ftp+mipf (method #3)")
+    call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
+    let tmpbufnr= bufnr("%")
+    setl ff=unix
 
     if exists("g:netrw_port") && g:netrw_port != ""
      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline('.'))
+"     call Decho("filter input: ".getline('$'))
     else
      keepj put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline('.'))
+"     call Decho("filter input: ".getline('$'))
     endif
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     keepj put =g:netrw_uid
-"     call Decho("filter input: ".getline('.'))
-     keepj put ='\"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('.'))
-    else
-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('.'))
+
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+"      call Decho("filter input: ".getline('$'))
+      if exists("s:netrw_passwd") && s:netrw_passwd != ""
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+"      call Decho("filter input: ".getline('$'))
+     elseif exists("s:netrw_passwd")
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"      call Decho("filter input: ".getline('$'))
+     endif
     endif
-    keepj put =g:netrw_ftpmode
-"    call Decho("filter input: ".getline('$'))
+
+    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+     keepj put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline('$'))
+    endif
+
+    if exists("b:netrw_fname") && b:netrw_fname != ""
+     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+"     call Decho("filter input: ".getline('$'))
+    endif
+
     if exists("g:netrw_ftpextracmd")
      keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline("$"))
+"     call Decho("filter input: ".getline('$'))
     endif
-    keepj put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
-"    call Decho("filter input: ".getline('.'))
-    " save choice/id/password for future use
-    let b:netrw_lastfile = choice
+
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('$'))
+    endif
+    for fname in fnamelist
+     keepj call setline(line("$")+1,'get "'.fname.'"')
+    endfor
+"    call Decho("filter input: ".getline('$'))
 
     " perform ftp:
     " -i       : turns off interactive prompting from ftp
     " -n  unix : DON'T use <.netrc>, even though it exists
     " -n  win32: quit being obnoxious about password
     keepj norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
     if getline(1) !~ "^$"
-     if  !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),15)
+"     call Decho("error<".getline(1).">")
+     if !exists("g:netrw_quiet")
+      keepj call netrw#ErrorMsg(s:ERROR,getline(1),5)
      endif
-     let mod=1
     endif
+   elseif !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetrwObtain : unsupported method")
+    return
+   endif
 
-    " remove enew buffer (quietly)
-    let filtbuf= bufnr("%")
-    exe curbuf."b!"
-    let &l:bh= bhkeep
-    exe filtbuf."bw!"
-
-   ".........................................
-   " NetWrite: (scp) NetWrite Method #4 {{{3
-   elseif     b:netrw_method == 4
-"    call Decho("write via scp (method #4)")
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port)
-    else
-     let useport= ""
-    endif
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
-    let b:netrw_lastfile = choice
+   " restore status line
+   if type(a:fname) == 1 && exists("s:netrw_users_stl")
+    keepj call s:SetupNetrwStatusLine(s:netrw_users_stl)
+   endif
 
-   ".........................................
-   " NetWrite: (http) NetWrite Method #5 {{{3
-   elseif     b:netrw_method == 5
-"    call Decho("write via http (method #5)")
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
-    endif
+  endif
 
-   ".........................................
-   " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3
-   elseif     b:netrw_method == 6
-"    call Decho("write via cadaver (method #6)")
+  " cleanup
+  if exists("tmpbufnr")
+   if bufnr("%") != tmpbufnr
+    exe tmpbufnr."bw!"
+   else
+    q!
+   endif
+  endif
 
-    " Construct execution string (four lines) which will be passed through filter
-    let netrw_fname = escape(b:netrw_fname,g:netrw_fname_escape)
-    let bhkeep      = &l:bh
+"  call Dret("netrw#NetrwObtain")
+endfun
 
-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
-    let curbuf      = bufnr("%")
-    setlocal bh=hide
-    enew
+" ---------------------------------------------------------------------
+" NetrwStatusLine: {{{2
+fun! NetrwStatusLine()
 
-    setlocal ff=unix
-    if exists("g:netrw_port") && g:netrw_port != ""
-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-    else
-     keepj put ='open '.g:netrw_machine
-    endif
-    if exists("g:netrw_uid") && exists("s:netrw_passwd")
-     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
-    endif
-    keepj put ='put '.tmpfile.' '.netrw_fname
+" vvv NetrwStatusLine() debugging vvv
+"  let g:stlmsg=""
+"  if !exists("w:netrw_explore_bufnr")
+"   let g:stlmsg="!X<explore_bufnr>"
+"  elseif w:netrw_explore_bufnr != bufnr("%")
+"   let g:stlmsg="explore_bufnr!=".bufnr("%")
+"  endif
+"  if !exists("w:netrw_explore_line")
+"   let g:stlmsg=" !X<explore_line>"
+"  elseif w:netrw_explore_line != line(".")
+"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
+"  endif
+"  if !exists("w:netrw_explore_list")
+"   let g:stlmsg=" !X<explore_list>"
+"  endif
+" ^^^ NetrwStatusLine() debugging ^^^
 
-    " perform cadaver operation:
-    keepj norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_dav_cmd)
-    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
+   " restore user's status line
+   let &stl        = s:netrw_users_stl
+   let &laststatus = s:netrw_users_ls
+   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
+   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
+   return ""
+  else
+   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
+  endif
+endfun
 
-    " remove enew buffer (quietly)
-    let filtbuf= bufnr("%")
-    exe curbuf."b!"
-    let &l:bh            = bhkeep
-    exe filtbuf."bw!"
+" ---------------------------------------------------------------------
+"  Netrw Transfer Functions: {{{1
+" ===============================
 
-    let b:netrw_lastfile = choice
+" ------------------------------------------------------------------------
+" netrw#NetRead: responsible for reading a file over the net {{{2
+"   mode: =0 read remote file and insert before current line
+"         =1 read remote file and insert after current line
+"         =2 replace with remote file
+"         =3 obtain file, but leave in temporary format
+fun! netrw#NetRead(mode,...)
+"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw.((a:0 > 0)? " a:1<".a:1.">" : ""))
 
-   ".........................................
-   " NetWrite: (rsync) NetWrite Method #7 {{{3
-   elseif     b:netrw_method == 7
-"    call Decho("write via rsync (method #7)")
-"    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
-    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
-    let b:netrw_lastfile = choice
+  " NetRead: save options {{{3
+  call s:NetrwOptionSave("w:")
+  call s:NetrwSafeOptions()
+  call s:RestoreCursorline()
 
-   ".........................................
-   " NetWrite: (sftp) NetWrite Method #9 {{{3
-   elseif     b:netrw_method == 9
-"    call Decho("read via sftp (method #9)")
-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
-    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
-     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
-    else
-     let uid_machine = g:netrw_machine
-    endif
-
-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
-    let bhkeep = &l:bh
-    let curbuf = bufnr("%")
-    setlocal bh=hide
-    enew
-
-    setlocal ff=unix
-    call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
-"    call Decho("filter input: ".getline('.'))
-"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
-    exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)
-    let filtbuf= bufnr("%")
-    exe curbuf."b!"
-    let &l:bh            = bhkeep
-    exe filtbuf."bw!"
-    let b:netrw_lastfile = choice
-
-   ".........................................
-   " NetWrite: Complain {{{3
-   else
-    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
-   endif
-  endwhile
-
-  " NetWrite: Cleanup: {{{3
-"  call Decho("cleanup")
-  if s:FileReadable(tmpfile)
-"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
-   call s:NetrwDelete(tmpfile)
-  endif
-  call s:NetrwOptionRestore("w:")
-
-  if a:firstline == 1 && a:lastline == line("$")
-   " restore modifiability; usually equivalent to set nomod
-   let &mod= mod
-  endif
-
-  " restore equalalways
-"  call Dret("netrw#NetWrite")
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#NetSource: source a remotely hosted vim script {{{2
-" uses NetRead to get a copy of the file into a temporarily file,
-"              then sources that file,
-"              then removes that file.
-fun! netrw#NetSource(...)
-"  call Dfunc("netrw#NetSource() a:0=".a:0)
-  if a:0 > 0 && a:1 == '?'
-   " give help
-   echomsg 'NetSource Usage:'
-   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
-   echomsg ':Nsource fetch://machine/path                 uses fetch'
-   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
-   echomsg ':Nsource http://[user@]machine/path           uses http  wget'
-   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
-   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
-   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
-   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
-   sleep 4
+  " NetRead: interpret mode into a readcmd {{{3
+  if     a:mode == 0 " read remote file before current line
+   let readcmd = "0r"
+  elseif a:mode == 1 " read file after current line
+   let readcmd = "r"
+  elseif a:mode == 2 " replace with remote file
+   let readcmd = "%r"
+  elseif a:mode == 3 " skip read of file (leave as temporary)
+   let readcmd = "t"
   else
-   let i= 1
-   while i <= a:0
-    call netrw#NetRead(3,a:{i})
-"    call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">")
-    if s:FileReadable(s:netrw_tmpfile)
-"     call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile))
-     exe "so ".fnameescape(s:netrw_tmpfile)
-"     call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")")
-     call delete(s:netrw_tmpfile)
-     unlet s:netrw_tmpfile
-    else
-     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
-    endif
-    let i= i + 1
-   endwhile
+   exe a:mode
+   let readcmd = "r"
   endif
-"  call Dret("netrw#NetSource")
-endfun
-
-" ===========================================
-" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
-"    readcmd == %r : replace buffer with newly read file
-"            == 0r : read file at top of buffer
-"            == r  : read file after current line
-"            == t  : leave file in temporary form (ie. don't read into buffer)
-fun! s:NetrwGetFile(readcmd, tfile, method)
-"  call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
+  let ichoice = (a:0 == 0)? 0 : 1
+"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
 
-  " readcmd=='t': simply do nothing
-  if a:readcmd == 't'
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Dret("NetrwGetFile : skip read of <".a:tfile.">")
+  " NetRead: get temporary filename {{{3
+  let tmpfile= s:GetTempfile("")
+  if tmpfile == ""
+"   call Dret("netrw#NetRead : unable to get a tempfile!")
    return
   endif
 
-  " get name of remote filename (ie. url and all)
-  let rfile= bufname("%")
-"  call Decho("rfile<".rfile.">")
-
-  if exists("*NetReadFixup")
-   " for the use of NetReadFixup (not otherwise used internally)
-   let line2= line("$")
-  endif
-
-  if a:readcmd[0] == '%'
-  " get file into buffer
-"   call Decho("get file into buffer")
+  while ichoice <= a:0
 
-   " rename the current buffer to the temp file (ie. tfile)
-   if g:netrw_cygwin
-    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
-   else
-    let tfile= a:tfile
-   endif
-"   call Decho("exe sil! keepalt file ".fnameescape(tfile))
-   exe "sil! keepalt file ".fnameescape(tfile)
+   " attempt to repeat with previous host-file-etc
+   if exists("b:netrw_lastfile") && a:0 == 0
+"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    let choice = b:netrw_lastfile
+    let ichoice= ichoice + 1
 
-   " edit temporary file (ie. read the temporary file in)
-   if     rfile =~ '\.zip$'
-"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
-    call zip#Browse(tfile)
-   elseif rfile =~ '\.tar$'
-"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.tar\.gz$'
-"    call Decho("handling remote gzip-compressed tar file")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.tar\.bz2$'
-"    call Decho("handling remote bz2-compressed tar file")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.tar\.xz$'
-"    call Decho("handling remote xz-compressed tar file")
-    call tar#Browse(tfile)
-   elseif rfile =~ '\.txz$'
-"    call Decho("handling remote xz-compressed tar file (.txz)")
-    call tar#Browse(tfile)
    else
-"    call Decho("edit temporary file")
-    e!
-   endif
-
-   " rename buffer back to remote filename
-"   call Decho("exe sil! keepalt file ".fnameescape(rfile))
-   exe "sil! keepalt file ".fnameescape(rfile)
-   filetype detect
-"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
-   let line1 = 1
-   let line2 = line("$")
+    exe "let choice= a:" . ichoice
+"    call Decho("no lastfile: choice<" . choice . ">")
 
-  elseif s:FileReadable(a:tfile)
-   " read file after current line
-"   call Decho("read file<".a:tfile."> after current line")
-   let curline = line(".")
-   let lastline= line("$")
-"   call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile).">  line#".curline)
-   exe a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)
-   let line1= curline + 1
-   let line2= line("$") - lastline + 1
+    if match(choice,"?") == 0
+     " give help
+     echomsg 'NetRead Usage:'
+     echomsg ':Nread machine:path                         uses rcp'
+     echomsg ':Nread "machine path"                       uses ftp   with <.netrc>'
+     echomsg ':Nread "machine id password path"           uses ftp'
+     echomsg ':Nread dav://machine[:port]/path            uses cadaver'
+     echomsg ':Nread fetch://machine/path                 uses fetch'
+     echomsg ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+     echomsg ':Nread http://[user@]machine/path           uses http  wget'
+     echomsg ':Nread rcp://[user@]machine/path            uses rcp'
+     echomsg ':Nread rsync://machine[:port]/path          uses rsync'
+     echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
+     echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
+     sleep 4
+     break
 
-  else
-   " not readable
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Decho("tfile<".a:tfile."> not readable")
-   call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
-"   call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
-   return
-  endif
+    elseif match(choice,'^"') != -1
+     " Reconstruct Choice if choice starts with '"'
+"     call Decho("reconstructing choice")
+     if match(choice,'"$') != -1
+      " case "..."
+      let choice= strpart(choice,1,strlen(choice)-2)
+     else
+       "  case "... ... ..."
+      let choice      = strpart(choice,1,strlen(choice)-1)
+      let wholechoice = ""
 
-  " User-provided (ie. optional) fix-it-up command
-  if exists("*NetReadFixup")
-"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
-   call NetReadFixup(a:method, line1, line2)
-"  else " Decho
-"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
-  endif
+      while match(choice,'"$') == -1
+       let wholechoice = wholechoice . " " . choice
+       let ichoice     = ichoice + 1
+       if ichoice > a:0
+       	if !exists("g:netrw_quiet")
+	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
+	endif
+"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
+        return
+       endif
+       let choice= a:{ichoice}
+      endwhile
+      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     endif
+    endif
+   endif
 
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
-   " update the Buffers menu
-   call s:UpdateBuffersMenu()
-  endif
+"   call Decho("choice<" . choice . ">")
+   let ichoice= ichoice + 1
 
-"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
+   " NetRead: Determine method of read (ftp, rcp, etc) {{{3
+   call s:NetrwMethod(choice)
+   if !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetRead : unsupported method")
+    return
+   endif
+   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
 
- " make sure file is being displayed
-"  redraw!
+   " Check if NetrwBrowse() should be handling this request
+"   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
+   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^https\=://'
+"    call Decho("yes, choice matches '^.*[\/]$'")
+    keepj call s:NetrwBrowse(0,choice)
+"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
+    return
+   endif
 
-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"  call Dret("NetrwGetFile")
-endfun
+   " ============
+   " NetRead: Perform Protocol-Based Read {{{3
+   " ===========================
+   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
+    echo "(netrw) Processing your read request..."
+   endif
 
-" ------------------------------------------------------------------------
-" s:NetrwMethod:  determine method of transfer {{{2
-" Input:
-"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
-" Output:
-"  b:netrw_method= 1: rcp                                             
-"                  2: ftp + <.netrc>                                  
-"	           3: ftp + machine, id, password, and [path]filename 
-"	           4: scp                                             
-"	           5: http (wget)                                     
-"	           6: dav
-"	           7: rsync                                           
-"	           8: fetch                                           
-"	           9: sftp                                            
-"  g:netrw_machine= hostname
-"  b:netrw_fname  = filename
-"  g:netrw_port   = optional port number (for ftp)
-"  g:netrw_choice = copy of input url (choice)
-fun! s:NetrwMethod(choice)
-"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
-
-   " record current g:netrw_machine, if any
-   " curmachine used if protocol == ftp and no .netrc
-   if exists("g:netrw_machine")
-    let curmachine= g:netrw_machine
-"    call Decho("curmachine<".curmachine.">")
+   ".........................................
+   " NetRead: (rcp)  NetRead Method #1 {{{3
+   if  b:netrw_method == 1 " read with rcp
+"    call Decho("read via rcp (method #1)")
+   " ER: nothing done with g:netrw_uid yet?
+   " ER: on Win2K" rcp machine[.user]:file tmpfile
+   " ER: if machine contains '.' adding .user is required (use $USERNAME)
+   " ER: the tmpfile is full path: rcp sees C:\... as host C
+   if s:netrw_has_nt_rcp == 1
+    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
+     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+    else
+     " Any way needed it machine contains a '.'
+     let uid_machine = g:netrw_machine .'.'. $USERNAME
+    endif
    else
-    let curmachine= "N O T A HOST"
+    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
+     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+    else
+     let uid_machine = g:netrw_machine
+    endif
    endif
+"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+   let b:netrw_lastfile = choice
 
-  " initialization
-  let b:netrw_method  = 0
-  let g:netrw_machine = ""
-  let b:netrw_fname   = ""
-  let g:netrw_port    = ""
-  let g:netrw_choice  = a:choice
-
-  " Patterns:
-  " mipf     : a:machine a:id password filename	     Use ftp
-  " mf	    : a:machine filename		     Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
-  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
-  " rcpurm   : rcp://[user@]host/filename	     Use rcp
-  " rcphf    : [user@]host:filename		     Use rcp
-  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
-  " httpurm  : http://[user@]host/filename	     Use wget
-  " davurm   : dav[s]://host[:port]/path             Use cadaver/curl
-  " rsyncurm : rsync://host[:port]/path              Use rsync
-  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
-  " sftpurm  : sftp://[user@]host/filename  Use scp
-  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
-  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
-  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
-  let rcpurm   = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
-  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
-  let scpurm   = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
-  let httpurm  = '^http://\([^/]\{-}\)\(/.*\)\=$'
-  let davurm   = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
-  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
-  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
-  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
-
-"  call Decho("determine method:")
-  " Determine Method
-  " rcp://user@hostname/...path-to-file
-  if match(a:choice,rcpurm) == 0
-"   call Decho("rcp://...")
-   let b:netrw_method  = 1
-   let userid          = substitute(a:choice,rcpurm,'\1',"")
-   let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
-   let b:netrw_fname   = substitute(a:choice,rcpurm,'\3',"")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
+   ".........................................
+   " NetRead: (ftp + <.netrc>)  NetRead Method #2 {{{3
+   elseif b:netrw_method  == 2		" read with ftp + <.netrc>
+"     call Decho("read via ftp+.netrc (method #2)")
+     let netrw_fname= b:netrw_fname
+     keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars()
+     let filtbuf= bufnr("%")
+     setl ff=unix
+     keepj put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline(line("$")))
+     if exists("g:netrw_ftpextracmd")
+      keepj put =g:netrw_ftpextracmd
+"      call Decho("filter input: ".getline(line("$")))
+     endif
+     call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile)
+"     call Decho("filter input: ".getline(line("$")))
+     if exists("g:netrw_port") && g:netrw_port != ""
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+     else
+"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+     endif
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+      let debugkeep = &debug
+      setl debug=msg
+      keepj call netrw#ErrorMsg(s:ERROR,getline(1),4)
+      let &debug    = debugkeep
+     endif
+     call s:SaveBufVars()
+     bd!
+     if bufname("%") == "" && getline("$") == "" && line('$') == 1
+      " needed when one sources a file in a nolbl setting window via ftp
+      q!
+     endif
+     call s:RestoreBufVars()
+     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+     let b:netrw_lastfile = choice
 
-  " scp://user@hostname/...path-to-file
-  elseif match(a:choice,scpurm) == 0
-"   call Decho("scp://...")
-   let b:netrw_method  = 4
-   let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
-   let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
-   let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
+   ".........................................
+   " NetRead: (ftp + machine,id,passwd,filename)  NetRead Method #3 {{{3
+   elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
+    " Construct execution string (four lines) which will be passed through filter
+"    call Decho("read via ftp+mipf (method #3)")
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+    keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars()
+    let filtbuf= bufnr("%")
+    setl ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho("filter input: ".getline('.'))
+    else
+     keepj put ='open '.g:netrw_machine
+"     call Decho("filter input: ".getline('.'))
+    endif
 
-  " http://user@hostname/...path-to-file
-  elseif match(a:choice,httpurm) == 0
-"   call Decho("http://...")
-   let b:netrw_method = 5
-   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+"       call Decho("filter input: ".getline('.'))
+      if exists("s:netrw_passwd")
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+"      call Decho("filter input: ".getline('.'))
+     elseif exists("s:netrw_passwd")
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"      call Decho("filter input: ".getline('.'))
+     endif
+    endif
 
-  " dav://hostname[:port]/..path-to-file..
-  elseif match(a:choice,davurm) == 0
-"   call Decho("dav://...")
-   let b:netrw_method= 6
-   if a:choice =~ '^s'
-    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
-   else
-    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
-   endif
-   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
+    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+     keepj put =g:netrw_ftpmode
+"     call Decho("filter input: ".getline('.'))
+    endif
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline('.'))
+    endif
+    keepj put ='get \"'.netrw_fname.'\" '.tmpfile
+"    call Decho("filter input: ".getline('.'))
 
-  " rsync://user@hostname/...path-to-file
-  elseif match(a:choice,rsyncurm) == 0
-"   call Decho("rsync://...")
-   let b:netrw_method = 7
-   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+    keepj norm! 1Gdd
+"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+"     call Decho("error<".getline(1).">")
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,getline(1),5)
+     endif
+    endif
+    call s:SaveBufVars()|bd!|call s:RestoreBufVars()
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
 
-  " ftp://[user@]hostname[[:#]port]/...path-to-file
-  elseif match(a:choice,ftpurm) == 0
-"   call Decho("ftp://...")
-   let userid	      = substitute(a:choice,ftpurm,'\2',"")
-   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
-   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
-   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
-"   call Decho("g:netrw_machine<".g:netrw_machine.">")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
-   if exists("s:netrw_passwd") && curmachine != g:netrw_machine
-    " if there's a change in hostname, require password re-entry
-    unlet s:netrw_passwd
-   endif
-   if exists("g:netrw_uid") && exists("s:netrw_passwd")
-    let b:netrw_method = 3
-   else
-    if s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
-     let b:netrw_method= 2
+   ".........................................
+   " NetRead: (scp) NetRead Method #4 {{{3
+   elseif     b:netrw_method  == 4	" read with scp
+"    call Decho("read via scp (method #4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".g:netrw_port
     else
-     if !exists("g:netrw_uid") || g:netrw_uid == ""
-      call NetUserPass()
-     elseif !exists("s:netrw_passwd") || s:netrw_passwd == ""
-      call NetUserPass(g:netrw_uid)
-    " else just use current g:netrw_uid and s:netrw_passwd
+     let useport= ""
+    endif
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetRead: (http) NetRead Method #5 (wget) {{{3
+   elseif     b:netrw_method  == 5
+"    call Decho("read via http (method #5)")
+    if g:netrw_http_cmd == ""
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
      endif
-     let b:netrw_method= 3
+"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
+     return
     endif
-   endif
 
-  elseif match(a:choice,fetchurm) == 0
-"   call Decho("fetch://...")
-   let b:netrw_method = 8
-   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
-   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
-   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
-   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
+    if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd")
+     " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch)
+"     call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)")
+     if exists("g:netrw_http_xcmd")
+"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1))
+      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
+     else
+"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1))
+      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
+     endif
+     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
 
-  " Issue an ftp : "machine id password [path/]filename"
-  elseif match(a:choice,mipf) == 0
-"   call Decho("(ftp) host id pass file")
-   let b:netrw_method  = 3
-   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
-   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
-   let s:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
-   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
+    else
+     " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
+"     call Decho("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
+     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
+     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
+"     call Decho("netrw_html<".netrw_html.">")
+"     call Decho("netrw_tag <".netrw_tag.">")
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1))
+     exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
+     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
+     exe 'keepj norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
+    endif
+    let b:netrw_lastfile = choice
+"    call Decho("(NetRead) setl ro")
+    setl ro
 
-  " Issue an ftp: "hostname [path/]filename"
-  elseif match(a:choice,mf) == 0
-"   call Decho("(ftp) host file")
-   if exists("g:netrw_uid") && exists("s:netrw_passwd")
-    let b:netrw_method  = 3
-    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
-    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+   ".........................................
+   " NetRead: (dav) NetRead Method #6 {{{3
+   elseif     b:netrw_method  == 6
+"    call Decho("read via cadaver (method #6)")
 
-   elseif s:FileReadable(expand("$HOME/.netrc"))
-    let b:netrw_method  = 2
-    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
-    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
-   endif
+    if !executable(g:netrw_dav_cmd)
+     call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73)
+"     call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable")
+     return
+    endif
+    if g:netrw_dav_cmd =~ "curl"
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1))
+     exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    else
+     " Construct execution string (four lines) which will be passed through filter
+     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+     new
+     setl ff=unix
+     if exists("g:netrw_port") && g:netrw_port != ""
+      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+     else
+      keepj put ='open '.g:netrw_machine
+     endif
+     if exists("g:netrw_uid") && exists("s:netrw_passwd") && g:netrw_uid != ""
+      keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+     endif
+     keepj put ='get '.netrw_fname.' '.tmpfile
+     keepj put ='quit'
 
-  " sftp://user@hostname/...path-to-file
-  elseif match(a:choice,sftpurm) == 0
-"   call Decho("sftp://...")
-   let b:netrw_method = 9
-   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
-   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
+     " perform cadaver operation:
+     keepj norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_dav_cmd)
+     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+     bd!
+    endif
+    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
 
-  " Issue an rcp: hostname:filename"  (this one should be last)
-  elseif match(a:choice,rcphf) == 0
-"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
-   let b:netrw_method  = 1
-   let userid          = substitute(a:choice,rcphf,'\2',"")
-   let g:netrw_machine = substitute(a:choice,rcphf,'\3',"")
-   let b:netrw_fname   = substitute(a:choice,rcphf,'\4',"")
-"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
-"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
-"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
-"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
-   if userid != ""
-    let g:netrw_uid= userid
-   endif
+   ".........................................
+   " NetRead: (rsync) NetRead Method #7 {{{3
+   elseif     b:netrw_method  == 7
+"    call Decho("read via rsync (method #7)")
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+    let result		 = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
 
-  else
-   if !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
+   ".........................................
+   " NetRead: (fetch) NetRead Method #8 {{{3
+   "    fetch://[user@]host[:http]/path
+   elseif     b:netrw_method  == 8
+"    call Decho("read via fetch (method #8)")
+    if g:netrw_fetch_cmd == ""
+     if !exists("g:netrw_quiet")
+      keepj call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
+     endif
+"     call Dret("NetRead")
+     return
+    endif
+    if exists("g:netrw_option") && g:netrw_option == ":https\="
+     let netrw_option= "http"
+    else
+     let netrw_option= "ftp"
+    endif
+"    call Decho("read via fetch for ".netrw_option)
+
+    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1))
+     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)
+    else
+"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1))
+     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)
+    endif
+
+    let result		= s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+"    call Decho("(NetRead) setl ro")
+    setl ro
+
+   ".........................................
+   " NetRead: (sftp) NetRead Method #9 {{{3
+   elseif     b:netrw_method  == 9
+"    call Decho("read via sftp (method #9)")
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
+    exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile
+    let result		= s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetRead: Complain {{{3
+   else
+    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
    endif
-   let b:netrw_method  = -1
-  endif
+  endwhile
 
-  " remove any leading [:#] from port number
-  if g:netrw_port != ""
-    let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
+  " NetRead: cleanup {{{3
+  if exists("b:netrw_method")
+"   call Decho("cleanup b:netrw_method and b:netrw_fname")
+   unlet b:netrw_method
+   unlet b:netrw_fname
+  endif
+  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz'
+"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
+   keepj call s:NetrwDelete(tmpfile)
   endif
+  keepj call s:NetrwOptionRestore("w:")
 
-"  call Decho("a:choice       <".a:choice.">")
-"  call Decho("b:netrw_method <".b:netrw_method.">")
-"  call Decho("g:netrw_machine<".g:netrw_machine.">")
-"  call Decho("g:netrw_port   <".g:netrw_port.">")
-"  if exists("g:netrw_uid")		"Decho
-"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
-"  endif					"Decho
-"  if exists("s:netrw_passwd")		"Decho
-"   call Decho("s:netrw_passwd <".s:netrw_passwd.">")
-"  endif					"Decho
-"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
-"  call Dret("NetrwMethod : b:netrw_method=".b:netrw_method)
+"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
 endfun
 
 " ------------------------------------------------------------------------
-" NetReadFixup: this sort of function is typically written by the user {{{2
-"               to handle extra junk that their system's ftp dumps
-"               into the transfer.  This function is provided as an
-"               example and as a fix for a Windows 95 problem: in my
-"               experience, win95's ftp always dumped four blank lines
-"               at the end of the transfer.
-if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
- fun! NetReadFixup(method, line1, line2)
-"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
+" netrw#NetWrite: responsible for writing a file over the net {{{2
+fun! netrw#NetWrite(...) range
+"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
 
-   " sanity checks -- attempt to convert inputs to integers
-   let method = a:method + 0
-   let line1  = a:line1 + 0
-   let line2  = a:line2 + 0
-   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
-"    call Dret("NetReadFixup")
-    return
-   endif
+  " NetWrite: option handling {{{3
+  let mod= 0
+  call s:NetrwOptionSave("w:")
+  call s:NetrwSafeOptions()
 
-   if method == 3   " ftp (no <.netrc>)
-    let fourblanklines= line2 - 3
-    if fourblanklines >= line1
-     exe "sil keepj ".fourblanklines.",".line2."g/^\s*$/d"
-     call histdel("/",-1)
-    endif
-   endif
+  " NetWrite: Get Temporary Filename {{{3
+  let tmpfile= s:GetTempfile("")
+  if tmpfile == ""
+"   call Dret("netrw#NetWrite : unable to get a tempfile!")
+   return
+  endif
 
-"   call Dret("NetReadFixup")
- endfun
-endif
+  if a:0 == 0
+   let ichoice = 0
+  else
+   let ichoice = 1
+  endif
 
-" ---------------------------------------------------------------------
-" NetUserPass: set username and password for subsequent ftp transfer {{{2
-"   Usage:  :call NetUserPass()			-- will prompt for userid and password
-"	    :call NetUserPass("uid")		-- will prompt for password
-"	    :call NetUserPass("uid","password") -- sets global userid and password
-fun! NetUserPass(...)
+  let curbufname= expand("%")
+"  call Decho("curbufname<".curbufname.">")
+  if &binary
+   " For binary writes, always write entire file.
+   " (line numbers don't really make sense for that).
+   " Also supports the writing of tar and zip files.
+"   call Decho("(write entire file) sil exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
+   exe "sil keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+  elseif g:netrw_cygwin
+   " write (selected portion of) file to temporary
+   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
+"   call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
+   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
+  else
+   " write (selected portion of) file to temporary
+"   call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
+   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+  endif
 
- " get/set userid
- if a:0 == 0
-"  call Dfunc("NetUserPass(a:0<".a:0.">)")
-  if !exists("g:netrw_uid") || g:netrw_uid == ""
-   " via prompt
-   let g:netrw_uid= input('Enter username: ')
+  if curbufname == ""
+   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
+   " on the temporary file's name.  Deletion of the temporary file during
+   " cleanup then causes an error message.
+   0file!
   endif
- else	" from command line
-"  call Dfunc("NetUserPass(a:1<".a:1.">)")
-  let g:netrw_uid= a:1
- endif
 
- " get password
- if a:0 <= 1 " via prompt
-"  call Decho("a:0=".a:0." case <=1:")
-  let s:netrw_passwd= inputsecret("Enter Password: ")
- else " from command line
-"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
-  let s:netrw_passwd=a:2
- endif
+  " NetWrite: while choice loop: {{{3
+  while ichoice <= a:0
 
-"  call Dret("NetUserPass")
-endfun
+   " Process arguments: {{{4
+   " attempt to repeat with previous host-file-etc
+   if exists("b:netrw_lastfile") && a:0 == 0
+"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+    let choice = b:netrw_lastfile
+    let ichoice= ichoice + 1
+   else
+    exe "let choice= a:" . ichoice
 
-" ===========================================
-"  Shared Browsing Support:    {{{1
-" ===========================================
+    " Reconstruct Choice if choice starts with '"'
+    if match(choice,"?") == 0
+     echomsg 'NetWrite Usage:"'
+     echomsg ':Nwrite machine:path                        uses rcp'
+     echomsg ':Nwrite "machine path"                      uses ftp with <.netrc>'
+     echomsg ':Nwrite "machine id password path"          uses ftp'
+     echomsg ':Nwrite dav://[user@]machine/path           uses cadaver'
+     echomsg ':Nwrite fetch://[user@]machine/path         uses fetch'
+     echomsg ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
+     echomsg ':Nwrite rcp://machine/path                  uses rcp'
+     echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
+     echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
+     echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
+     sleep 4
+     break
 
-" ---------------------------------------------------------------------
-" s:BrowserMaps: {{{2
-fun! s:BrowserMaps(islocal)
-"  call Dfunc("s:BrowserMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
-  if a:islocal
-"   call Decho("make local maps")
-   nnoremap <buffer> <silent> <cr>	:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
-   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
-   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(1)<cr>
-   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
-   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
-   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
-   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
-   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
-   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
-   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
-   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
-   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
-   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
-   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
-   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
-   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
-   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(1)<cr>
-   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> c		:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
-   nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("")<cr>
-   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(1)<cr>
-   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
-   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(3)<cr>
-   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(1)<cr>
-   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(1)<cr>
-   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
-   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(1)<cr>
-   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
-   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(4)<cr>
-   nnoremap <buffer> <silent> T		:call <SID>NetrwSplit(4)<bar>norm! gT<cr>
-   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
-   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
-   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
-   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
-   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(1)<cr>
-   inoremap <buffer> <silent> <cr>	<c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
-   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
-   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(1)<cr>
-   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
-   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
-   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
-   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
-   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
-   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
-   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
-   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
-   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
-   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
-   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
-   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
-   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
-   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
-   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(1)<cr>
-   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> c		<c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
-   inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("")<cr>
-   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(1)<cr>
-   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
-   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(3)<cr>
-   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(1)<cr>
-   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
-   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
-   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
-   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(1)<cr>
-   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(1)<cr>
-   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(4)<cr>
-   inoremap <buffer> <silent> T		<c-o>:call <SID>NetrwSplit(4)<bar>norm! gT<cr>
-   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
-   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
-   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(5)<cr>
-   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
-   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(1)<cr>
-   if !hasmapto('<Plug>NetrwHideEdit')
-    nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
-    imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
-   endif
-   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(1)<cr>
-   if !hasmapto('<Plug>NetrwRefresh')
-    nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
-    imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
+    elseif match(choice,"^\"") != -1
+     if match(choice,"\"$") != -1
+       " case "..."
+      let choice=strpart(choice,1,strlen(choice)-2)
+     else
+      "  case "... ... ..."
+      let choice      = strpart(choice,1,strlen(choice)-1)
+      let wholechoice = ""
+
+      while match(choice,"\"$") == -1
+       let wholechoice= wholechoice . " " . choice
+       let ichoice    = ichoice + 1
+       if choice > a:0
+       	if !exists("g:netrw_quiet")
+	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
+	endif
+"        call Dret("netrw#NetWrite")
+        return
+       endif
+       let choice= a:{ichoice}
+      endwhile
+      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+     endif
+    endif
    endif
-   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
-   if s:didstarstar || !mapcheck("<s-down>","n")
-    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
-    inoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+   let ichoice= ichoice + 1
+"   call Decho("choice<" . choice . "> ichoice=".ichoice)
+
+   " Determine method of write (ftp, rcp, etc) {{{4
+   keepj call s:NetrwMethod(choice)
+   if !exists("b:netrw_method") || b:netrw_method < 0
+"    call Dfunc("netrw#NetWrite : unsupported method")
+    return
    endif
-   if s:didstarstar || !mapcheck("<s-up>","n")
-    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
-    inoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+
+   " =============
+   " NetWrite: Perform Protocol-Based Write {{{3
+   " ============================
+   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
+    echo "(netrw) Processing your write request..."
+"    call Decho("(netrw) Processing your write request...")
    endif
-   let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape)
-   if g:netrw_mousemaps == 1
-    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
-    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
-    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-    exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-    exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-    inoremap <buffer> <silent> <leftmouse>   <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr>
-    inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
-    inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
-    exe 'inoremap <buffer> <silent> <rightmouse>  <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+
+   ".........................................
+   " NetWrite: (rcp) NetWrite Method #1 {{{3
+   if  b:netrw_method == 1
+"    call Decho("write via rcp (method #1)")
+    if s:netrw_has_nt_rcp == 1
+     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+     else
+      let uid_machine = g:netrw_machine .'.'. $USERNAME
+     endif
+    else
+     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+     else
+      let uid_machine = g:netrw_machine
+     endif
+    endif
+"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3
+   elseif b:netrw_method == 2
+"    call Decho("write via ftp+.netrc (method #2)")
+    let netrw_fname = b:netrw_fname
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let bhkeep      = &l:bh
+    let curbuf      = bufnr("%")
+    setl bh=hide
+    keepalt enew
+
+"    call Decho("filter input window#".winnr())
+    setl ff=unix
+    keepj put =g:netrw_ftpmode
+"    call Decho("filter input: ".getline('$'))
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline("$"))
+    endif
+    keepj call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"')
+"    call Decho("filter input: ".getline("$"))
+    if exists("g:netrw_port") && g:netrw_port != ""
+"     call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+    else
+"     call Decho("filter input window#".winnr())
+"     call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+    endif
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+     if !exists("g:netrw_quiet")
+      keepj call netrw#ErrorMsg(s:ERROR,getline(1),14)
+     endif
+     let mod=1
+    endif
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3
+   elseif b:netrw_method == 3
+    " Construct execution string (three or more lines) which will be passed through filter
+"    call Decho("read via ftp+mipf (method #3)")
+    let netrw_fname = b:netrw_fname
+    let bhkeep      = &l:bh
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let curbuf      = bufnr("%")
+    setl bh=hide
+    keepalt enew
+    setl ff=unix
+
+    if exists("g:netrw_port") && g:netrw_port != ""
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+"     call Decho("filter input: ".getline('.'))
+    else
+     keepj put ='open '.g:netrw_machine
+"     call Decho("filter input: ".getline('.'))
+    endif
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+"      call Decho("filter input: ".getline('.'))
+      if exists("s:netrw_passwd") && s:netrw_passwd != ""
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+"      call Decho("filter input: ".getline('.'))
+     elseif exists("s:netrw_passwd") && s:netrw_passwd != ""
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"      call Decho("filter input: ".getline('.'))
+     endif
+    endif
+    keepj put =g:netrw_ftpmode
+"    call Decho("filter input: ".getline('$'))
+    if exists("g:netrw_ftpextracmd")
+     keepj put =g:netrw_ftpextracmd
+"     call Decho("filter input: ".getline("$"))
+    endif
+    keepj put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
+"    call Decho("filter input: ".getline('.'))
+    " save choice/id/password for future use
+    let b:netrw_lastfile = choice
+
+    " perform ftp:
+    " -i       : turns off interactive prompting from ftp
+    " -n  unix : DON'T use <.netrc>, even though it exists
+    " -n  win32: quit being obnoxious about password
+    keepj norm! 1Gdd
+"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
+    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+    if getline(1) !~ "^$"
+     if  !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,getline(1),15)
+     endif
+     let mod=1
+    endif
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh= bhkeep
+    exe filtbuf."bw!"
+
+   ".........................................
+   " NetWrite: (scp) NetWrite Method #4 {{{3
+   elseif     b:netrw_method == 4
+"    call Decho("write via scp (method #4)")
+    if exists("g:netrw_port") && g:netrw_port != ""
+     let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port)
+    else
+     let useport= ""
+    endif
+"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (http) NetWrite Method #5 {{{3
+   elseif     b:netrw_method == 5
+"    call Decho("write via http (method #5)")
+    if !exists("g:netrw_quiet")
+     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
+    endif
+
+   ".........................................
+   " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3
+   elseif     b:netrw_method == 6
+"    call Decho("write via cadaver (method #6)")
+
+    " Construct execution string (four lines) which will be passed through filter
+    let netrw_fname = escape(b:netrw_fname,g:netrw_fname_escape)
+    let bhkeep      = &l:bh
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let curbuf      = bufnr("%")
+    setl bh=hide
+    keepalt enew
+
+    setl ff=unix
+    if exists("g:netrw_port") && g:netrw_port != ""
+     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+    else
+     keepj put ='open '.g:netrw_machine
+    endif
+    if exists("g:netrw_uid") && exists("s:netrw_passwd") && g:netrw_uid != ""
+     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+    endif
+    keepj put ='put '.tmpfile.' '.netrw_fname
+
+    " perform cadaver operation:
+    keepj norm! 1Gdd
+"    call Decho("executing: %!".g:netrw_dav_cmd)
+    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+
+    " remove enew buffer (quietly)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (rsync) NetWrite Method #7 {{{3
+   elseif     b:netrw_method == 7
+"    call Decho("write via rsync (method #7)")
+"    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
+    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: (sftp) NetWrite Method #9 {{{3
+   elseif     b:netrw_method == 9
+"    call Decho("write via sftp (method #9)")
+    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+    else
+     let uid_machine = g:netrw_machine
+    endif
+
+    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+    let bhkeep = &l:bh
+    let curbuf = bufnr("%")
+    setl bh=hide
+    keepalt enew
+
+    setl ff=unix
+    call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
+"    call Decho("filter input: ".getline('.'))
+"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
+    let sftpcmd= substitute(g:netrw_sftp_cmd,"%TEMPFILE%",escape(tmpfile,'\'),"g")
+    exe s:netrw_silentxfer."%!".sftpcmd.' '.shellescape(uid_machine,1)
+    let filtbuf= bufnr("%")
+    exe curbuf."b!"
+    let &l:bh            = bhkeep
+    exe filtbuf."bw!"
+    let b:netrw_lastfile = choice
+
+   ".........................................
+   " NetWrite: Complain {{{3
+   else
+    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
+    let leavemod= 1
    endif
-   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
-   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetrwMakeDir("")<cr>'
-   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
-   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
-   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
-   exe 'inoremap <buffer> <silent> <Leader>m	<c-o>:call <SID>NetrwMakeDir("")<cr>'
-   nnoremap <buffer> <F1>		:he netrw-quickhelp<cr>
+  endwhile
 
-  else " remote
-"   call Decho("make remote maps")
-   call s:RemotePathAnalysis(b:netrw_curdir)
-   nnoremap <buffer> <silent> <cr>	:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
-   nnoremap <buffer> <silent> <c-l>	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
-   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(0)<cr>
-   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
-   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
-   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
-   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
-   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
-   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
-   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
-   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
-   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
-   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
-   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
-   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
-   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
-   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
-   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(0)<cr>
-   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
-   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(0)<cr>
-   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
-   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(0)<cr>
-   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(0)<cr>
-   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(0)<cr>
-   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
-   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(0)<cr>
-   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
-   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(1)<cr>
-   nnoremap <buffer> <silent> T		:call <SID>NetrwSplit(1)<bar>norm! gT<cr>
-   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
-   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
-   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
-   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(0)<cr>
-   inoremap <buffer> <silent> <cr>	<c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
-   inoremap <buffer> <silent> <c-l>	<c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
-   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(0)<cr>
-   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
-   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
-   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
-   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
-   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
-   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
-   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
-   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
-   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
-   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
-   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
-   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
-   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
-   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
-   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
-   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(0)<cr>
-   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
-   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(0)<cr>
-   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
-   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(0)<cr>
-   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(0)<cr>
-   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
-   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
-   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
-   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(0)<cr>
-   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(0)<cr>
-   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(1)<cr>
-   inoremap <buffer> <silent> T		<c-o>:call <SID>NetrwSplit(1)<bar>norm! gT<cr>
-   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
-   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(2)<cr>
-   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
-   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(0)<cr>
-   if !hasmapto('<Plug>NetrwHideEdit')
-    nmap <buffer> <c-h> <Plug>NetrwHideEdit
-    imap <buffer> <c-h> <Plug>NetrwHideEdit
+  " NetWrite: Cleanup: {{{3
+"  call Decho("cleanup")
+  if s:FileReadable(tmpfile)
+"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
+   call s:NetrwDelete(tmpfile)
+  endif
+  call s:NetrwOptionRestore("w:")
+
+  if a:firstline == 1 && a:lastline == line("$")
+   " restore modifiability; usually equivalent to set nomod
+   let &mod= mod
+"   call Decho("(NetWrite)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+  elseif !exists("leavemod")
+   " indicate that the buffer has not been modified since last written
+"   call Decho("(NetWrite) set nomod")
+   set nomod
+"   call Decho("(NetWrite)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+  endif
+
+"  call Dret("netrw#NetWrite")
+endfun
+
+" ---------------------------------------------------------------------
+" netrw#NetSource: source a remotely hosted vim script {{{2
+" uses NetRead to get a copy of the file into a temporarily file,
+"              then sources that file,
+"              then removes that file.
+fun! netrw#NetSource(...)
+"  call Dfunc("netrw#NetSource() a:0=".a:0)
+  if a:0 > 0 && a:1 == '?'
+   " give help
+   echomsg 'NetSource Usage:'
+   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
+   echomsg ':Nsource fetch://machine/path                 uses fetch'
+   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+   echomsg ':Nsource http[s]://[user@]machine/path        uses http  wget'
+   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
+   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
+   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
+   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
+   sleep 4
+  else
+   let i= 1
+   while i <= a:0
+    call netrw#NetRead(3,a:{i})
+"    call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">")
+    if s:FileReadable(s:netrw_tmpfile)
+"     call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile))
+     exe "so ".fnameescape(s:netrw_tmpfile)
+"     call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")")
+     call delete(s:netrw_tmpfile)
+     unlet s:netrw_tmpfile
+    else
+     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
+    endif
+    let i= i + 1
+   endwhile
+  endif
+"  call Dret("netrw#NetSource")
+endfun
+
+" ===========================================
+" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
+"    readcmd == %r : replace buffer with newly read file
+"            == 0r : read file at top of buffer
+"            == r  : read file after current line
+"            == t  : leave file in temporary form (ie. don't read into buffer)
+fun! s:NetrwGetFile(readcmd, tfile, method)
+"  call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
+
+  " readcmd=='t': simply do nothing
+  if a:readcmd == 't'
+"   call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Dret("NetrwGetFile : skip read of <".a:tfile.">")
+   return
+  endif
+
+  " get name of remote filename (ie. url and all)
+  let rfile= bufname("%")
+"  call Decho("rfile<".rfile.">")
+
+  if exists("*NetReadFixup")
+   " for the use of NetReadFixup (not otherwise used internally)
+   let line2= line("$")
+  endif
+
+  if a:readcmd[0] == '%'
+  " get file into buffer
+"   call Decho("get file into buffer")
+
+   " rename the current buffer to the temp file (ie. tfile)
+   if g:netrw_cygwin
+    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
+   else
+    let tfile= a:tfile
    endif
-   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(0)<cr>
-   if !hasmapto('<Plug>NetrwRefresh')
-    nmap <buffer> <c-l> <Plug>NetrwRefresh
-    imap <buffer> <c-l> <Plug>NetrwRefresh
+"   call Decho("exe sil! keepalt file ".fnameescape(tfile))
+   exe "sil! keepalt file ".fnameescape(tfile)
+
+   " edit temporary file (ie. read the temporary file in)
+   if     rfile =~ '\.zip$'
+"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
+    call zip#Browse(tfile)
+   elseif rfile =~ '\.tar$'
+"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.gz$'
+"    call Decho("handling remote gzip-compressed tar file")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.bz2$'
+"    call Decho("handling remote bz2-compressed tar file")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.tar\.xz$'
+"    call Decho("handling remote xz-compressed tar file")
+    call tar#Browse(tfile)
+   elseif rfile =~ '\.txz$'
+"    call Decho("handling remote xz-compressed tar file (.txz)")
+    call tar#Browse(tfile)
+   else
+"    call Decho("edit temporary file")
+    e!
    endif
 
-   let mapsafepath     = escape(s:path, s:netrw_map_escape)
-   let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape)
+   " rename buffer back to remote filename
+"   call Decho("exe sil! keepalt file ".fnameescape(rfile))
+   exe "sil! keepj keepalt file ".fnameescape(rfile)
 
-   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
-   if g:netrw_mousemaps == 1
-    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
-    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
-    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-    exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-    exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-    inoremap <buffer> <silent> <leftmouse>   <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr>
-    inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
-    inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
-    exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   endif
-   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
-   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
-   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
-   nnoremap <buffer> <F1>			:he netrw-quickhelp<cr>
-   inoremap <buffer> <F1>			<c-o>:he netrw-quickhelp<cr>
+   " Detect filetype of local version of remote file.
+   " Note that isk must not include a "/" for scripts.vim
+   " to process this detection correctly.
+"   call Decho("detect filetype of local version of remote file")
+   let iskkeep= &l:isk
+   setl isk-=/
+   let &l:isk= iskkeep
+"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
+   let line1 = 1
+   let line2 = line("$")
+
+  elseif s:FileReadable(a:tfile)
+   " read file after current line
+"   call Decho("read file<".a:tfile."> after current line")
+   let curline = line(".")
+   let lastline= line("$")
+"   call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile).">  line#".curline)
+   exe "keepj ".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)
+   let line1= curline + 1
+   let line2= line("$") - lastline + 1
+
+  else
+   " not readable
+"   call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Decho("tfile<".a:tfile."> not readable")
+   keepj call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
+"   call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
+   return
   endif
-  call s:SetRexDir(a:islocal,b:netrw_curdir)
-"  call Dret("s:BrowserMaps")
-endfun
 
-" ---------------------------------------------------------------------
-" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
-fun! s:ExplorePatHls(pattern)
-"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
-  let repat= substitute(a:pattern,'^**/\{1,2}','','')
-"  call Decho("repat<".repat.">")
-  let repat= escape(repat,'][.\')
-"  call Decho("repat<".repat.">")
-  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
-"  call Dret("s:ExplorePatHls repat<".repat.">")
-  return repat
+  " User-provided (ie. optional) fix-it-up command
+  if exists("*NetReadFixup")
+"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+   keepj call NetReadFixup(a:method, line1, line2)
+"  else " Decho
+"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
+  endif
+
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+   " update the Buffers menu
+   keepj call s:UpdateBuffersMenu()
+  endif
+
+"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
+
+ " make sure file is being displayed
+"  redraw!
+
+"  call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Dret("NetrwGetFile")
 endfun
 
-" ---------------------------------------------------------------------
-"  s:NetrwBookHistHandler: {{{2
-"    0: (user: <mb>)   bookmark current directory
-"    1: (user: <gb>)   change to the bookmarked directory
-"    2: (user: <qb>)   list bookmarks
-"    3: (browsing)     record current directory history
-"    4: (user: <u>)    go up   (previous) bookmark
-"    5: (user: <U>)    go down (next)     bookmark
-"    6: (user: <mB>)   delete bookmark
-fun! s:NetrwBookHistHandler(chg,curdir)
-"  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
+" ------------------------------------------------------------------------
+" s:NetrwMethod:  determine method of transfer {{{2
+" Input:
+"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
+" Output:
+"  b:netrw_method= 1: rcp                                             
+"                  2: ftp + <.netrc>                                  
+"	           3: ftp + machine, id, password, and [path]filename 
+"	           4: scp                                             
+"	           5: http[s] (wget)                                     
+"	           6: dav
+"	           7: rsync                                           
+"	           8: fetch                                           
+"	           9: sftp                                            
+"  g:netrw_machine= hostname
+"  b:netrw_fname  = filename
+"  g:netrw_port   = optional port number (for ftp)
+"  g:netrw_choice = copy of input url (choice)
+fun! s:NetrwMethod(choice)
+"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
 
-  if a:chg == 0
-   " bookmark the current directory
-"   call Decho("(user: <b>) bookmark the current directory")
-   if !exists("g:netrw_bookmarklist")
-    let g:netrw_bookmarklist= []
-   endif
-   if index(g:netrw_bookmarklist,a:curdir) == -1
-    " curdir not currently in g:netrw_bookmarklist, so include it
-    call add(g:netrw_bookmarklist,a:curdir)
-    call sort(g:netrw_bookmarklist)
+   " sanity check: choice should have at least three slashes in it
+   if strlen(substitute(a:choice,'[^/]','','g')) < 3
+    call netrw#ErrorMsg(s:ERROR,"not a netrw-style url; netrw uses protocol://[user@]hostname[:port]/[path])",78)
+    let b:netrw_method = -1
+"    call Dret("NetrwMethod : incorrect url format<".a:choice.">")
+    return
    endif
-   echo "bookmarked the current directory"
 
-  elseif a:chg == 1
-   " change to the bookmarked directory
-"   call Decho("(user: <".v:count."mb>) change to the bookmarked directory")
-   if exists("g:netrw_bookmarklist[v:count-1]")
-    exe "e ".fnameescape(g:netrw_bookmarklist[v:count-1])
+   " record current g:netrw_machine, if any
+   " curmachine used if protocol == ftp and no .netrc
+   if exists("g:netrw_machine")
+    let curmachine= g:netrw_machine
+"    call Decho("curmachine<".curmachine.">")
    else
-    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
+    let curmachine= "N O T A HOST"
    endif
-
-  elseif a:chg == 2
-"   redraw!
-   let didwork= 0
-   " list user's bookmarks
-"   call Decho("(user: <q>) list user's bookmarks")
-   if exists("g:netrw_bookmarklist")
-"    call Decho('list '.len(g:netrw_bookmarklist).' bookmarks')
-    let cnt= 1
-    for bmd in g:netrw_bookmarklist
-"     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
-     echo "Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1]
-     let didwork = 1
-     let cnt     = cnt + 1
-    endfor
+   if exists("g:netrw_port")
+    let netrw_port= g:netrw_port
    endif
 
-   " list directory history
-   let cnt     = g:netrw_dirhist_cnt
-   let first   = 1
-   let histcnt = 0
-   while ( first || cnt != g:netrw_dirhist_cnt )
-"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
-    let histcnt= histcnt + 1
-    if exists("g:netrw_dirhist_{cnt}")
-"     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
-     echo "Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt}
-     let didwork= 1
-    endif
-    let first = 0
-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
-    if cnt < 0
-     let cnt= cnt + g:netrw_dirhistmax
-    endif
-   endwhile
-   if didwork
-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   " insure that netrw_ftp_cmd starts off every method determination
+   " with the current g:netrw_ftp_cmd
+   let s:netrw_ftp_cmd= g:netrw_ftp_cmd
+
+  " initialization
+  let b:netrw_method  = 0
+  let g:netrw_machine = ""
+  let b:netrw_fname   = ""
+  let g:netrw_port    = ""
+  let g:netrw_choice  = a:choice
+
+  " Patterns:
+  " mipf     : a:machine a:id password filename	     Use ftp
+  " mf	    : a:machine filename		     Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
+  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
+  " rcpurm   : rcp://[user@]host/filename	     Use rcp
+  " rcphf    : [user@]host:filename		     Use rcp
+  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
+  " httpurm  : http[s]://[user@]host/filename	     Use wget
+  " davurm   : dav[s]://host[:port]/path             Use cadaver/curl
+  " rsyncurm : rsync://host[:port]/path              Use rsync
+  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
+  " sftpurm  : sftp://[user@]host/filename  Use scp
+  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
+  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
+"  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+"  let rcpurm   = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
+"  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
+  let ftpurm   = '^ftp://\(\([^/]*\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+  let rcpurm   = '^rcp://\%(\([^/]*\)@\)\=\([^/]\{-}\)/\(.*\)$'
+  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
+  let scpurm   = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
+  let httpurm  = '^https\=://\([^/]\{-}\)\(/.*\)\=$'
+  let davurm   = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
+  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
+  let fetchurm = '^fetch://\(\([^/]*\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
+  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
+
+"  call Decho("determine method:")
+  " Determine Method
+  " Method#1: rcp://user@hostname/...path-to-file {{{3
+  if match(a:choice,rcpurm) == 0
+"   call Decho("rcp://...")
+   let b:netrw_method  = 1
+   let userid          = substitute(a:choice,rcpurm,'\1',"")
+   let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
+   let b:netrw_fname   = substitute(a:choice,rcpurm,'\3',"")
+   if userid != ""
+    let g:netrw_uid= userid
    endif
 
-  elseif a:chg == 3
-   " saves most recently visited directories (when they differ)
-"   call Decho("(browsing) record curdir history")
-   if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir
-    let g:netrw_dirhist_cnt                   = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
-    let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir
-"    call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+  " Method#4: scp://user@hostname/...path-to-file {{{3
+  elseif match(a:choice,scpurm) == 0
+"   call Decho("scp://...")
+   let b:netrw_method  = 4
+   let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
+   let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
+   let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
+
+  " Method#5: http[s]://user@hostname/...path-to-file {{{3
+  elseif match(a:choice,httpurm) == 0
+"   call Decho("http://...")
+   let b:netrw_method = 5
+   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
+
+  " Method#6: dav://hostname[:port]/..path-to-file.. {{{3
+  elseif match(a:choice,davurm) == 0
+"   call Decho("dav://...")
+   let b:netrw_method= 6
+   if a:choice =~ 'davs:'
+    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
+   else
+    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
    endif
+   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
 
-  elseif a:chg == 4
-   " u: change to the previous directory stored on the history list
-"   call Decho("(user: <u>) chg to prev dir from history")
-   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
-   if g:netrw_dirhist_cnt < 0
-    let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
-   endif
-   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
-"    call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
-    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-     setlocal ma noro
-"     call Decho("setlocal ma noro")
-     keepj %d
-     setlocal nomod
-"     call Decho("setlocal nomod")
-    endif
-"    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
-    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
-   else
-    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
-    echo "Sorry, no predecessor directory exists yet"
+   " Method#7: rsync://user@hostname/...path-to-file {{{3
+  elseif match(a:choice,rsyncurm) == 0
+"   call Decho("rsync://...")
+   let b:netrw_method = 7
+   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
+
+   " Methods 2,3: ftp://[user@]hostname[[:#]port]/...path-to-file {{{3
+  elseif match(a:choice,ftpurm) == 0
+"   call Decho("ftp://...")
+   let userid	      = substitute(a:choice,ftpurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
+   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
+   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
+"   call Decho("g:netrw_machine<".g:netrw_machine.">")
+   if userid != ""
+    let g:netrw_uid= userid
    endif
 
-  elseif a:chg == 5
-   " U: change to the subsequent directory stored on the history list
-"   call Decho("(user: <U>) chg to next dir from history")
-   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
-   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
-"    call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
-    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-     setlocal ma noro
-"     call Decho("setlocal ma noro")
-     keepj %d
-"     call Decho("removed all lines from buffer (%d)")
-     setlocal nomod
-"     call Decho("setlocal nomod")
+   if curmachine != g:netrw_machine
+    if exists("s:netwr_hup[".g:netrw_machine."]")
+     call NetUserPass("ftp:".g:netrw_machine)
+    elseif exists("s:netrw_passwd")
+     " if there's a change in hostname, require password re-entry
+     unlet s:netrw_passwd
     endif
-"    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
-    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
-   else
-    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
-    if g:netrw_dirhist_cnt < 0
-     let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
+    if exists("netrw_port")
+     unlet netrw_port
     endif
-    echo "Sorry, no successor directory exists yet"
-   endif
-
-  elseif a:chg == 6
-   " delete the v:count'th bookmark
-"   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
-   let savefile= s:NetrwHome()."/.netrwbook"
-   if filereadable(savefile)
-    call s:NetrwBookHistSave() " done here to merge bookmarks first
-    call delete(savefile)
    endif
-   call remove(g:netrw_bookmarklist,v:count-1)
-  endif
-  call s:NetrwBookmarkMenu()
-"  call Dret("s:NetrwBookHistHandler")
-endfun
 
-" ---------------------------------------------------------------------
-" s:NetrwBookHistRead: this function reads bookmarks and history {{{2
-"                      Sister function: s:NetrwBookHistSave()
-fun! s:NetrwBookHistRead()
-"  call Dfunc("s:NetrwBookHistRead()")
-  if !exists("s:netrw_initbookhist")
-   let home    = s:NetrwHome()
-   let savefile= home."/.netrwbook"
-   if filereadable(savefile)
-"    call Decho("sourcing .netrwbook")
-    exe "so ".savefile
-   endif
-   let savefile= home."/.netrwhist"
-   if filereadable(savefile)
-"    call Decho("sourcing .netrwhist")
-    exe "so ".savefile
+   if exists("g:netrw_uid") && exists("s:netrw_passwd")
+    let b:netrw_method = 3
+   else
+    let host= substitute(g:netrw_machine,'\..*$','','')
+    if exists("s:netrw_hup[host]")
+     call NetUserPass("ftp:".host)
+
+    elseif (has("win32") || has("win95") || has("win64") || has("win16")) && s:netrw_ftp_cmd =~ '-[sS]:'
+"     call Decho("has -s: : s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">")
+"     call Decho("          g:netrw_ftp_cmd<".g:netrw_ftp_cmd.">")
+     if g:netrw_ftp_cmd =~ '-[sS]:\S*MACHINE\>'
+      let s:netrw_ftp_cmd= substitute(g:netrw_ftp_cmd,'\<MACHINE\>',g:netrw_machine,'')
+"      call Decho("s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">")
+     endif
+     let b:netrw_method= 2
+    elseif s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
+"     call Decho("using <".expand("$HOME/.netrc")."> (readable)")
+     let b:netrw_method= 2
+    else
+     if !exists("g:netrw_uid") || g:netrw_uid == ""
+      call NetUserPass()
+     elseif !exists("s:netrw_passwd") || s:netrw_passwd == ""
+      call NetUserPass(g:netrw_uid)
+    " else just use current g:netrw_uid and s:netrw_passwd
+     endif
+     let b:netrw_method= 3
+    endif
    endif
-   let s:netrw_initbookhist= 1
-   au VimLeave * call s:NetrwBookHistSave()
-  endif
-"  call Dret("s:NetrwBookHistRead")
-endfun
 
-" ---------------------------------------------------------------------
-" s:NetrwBookHistSave: this function saves bookmarks and history {{{2
-"                      Sister function: s:NetrwBookHistRead()
-"                      I used to do this via viminfo but that appears to
-"                      be unreliable for long-term storage
-"                      COMBAK: does $HOME work under windows???
-fun! s:NetrwBookHistSave()
-"  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
-  let savefile= s:NetrwHome()."/.netrwhist"
-  1split
-  call s:NetrwEnew()
-  setlocal cino= com= cpo-=aA fo=nroql2 tw=0 report=10000 noswf
-  setlocal nocin noai noci magic nospell nohid wig= noaw
-  setlocal ma noro write
-  if exists("&acd") | setlocal noacd | endif
-  silent %d
+  " Method#8: fetch {{{3
+  elseif match(a:choice,fetchurm) == 0
+"   call Decho("fetch://...")
+   let b:netrw_method = 8
+   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
+   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
+   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
+   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
 
-  " save .netrwhist -- no attempt to merge
-  silent! file .netrwhist
-  call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
-  call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
-  let lastline = line("$")
-  let cnt      = 1
-  while cnt <= g:netrw_dirhist_cnt
-   call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
-   let cnt= cnt + 1
-  endwhile
-  exe "sil! w! ".savefile
+   " Method#3: Issue an ftp : "machine id password [path/]filename" {{{3
+  elseif match(a:choice,mipf) == 0
+"   call Decho("(ftp) host id pass file")
+   let b:netrw_method  = 3
+   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
+   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
+   let s:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
+   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
+   call NetUserPass(g:netrw_machine,g:netrw_uid,s:netrw_passwd)
 
-  sil keepj %d
-  if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
-   " merge and write .netrwbook
-   let savefile= s:NetrwHome()."/.netrwbook"
+  " Method#3: Issue an ftp: "hostname [path/]filename" {{{3
+  elseif match(a:choice,mf) == 0
+"   call Decho("(ftp) host file")
+   if exists("g:netrw_uid") && exists("s:netrw_passwd")
+    let b:netrw_method  = 3
+    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
 
-   if filereadable(savefile)
-    let booklist= deepcopy(g:netrw_bookmarklist)
-    exe "sil keepj so ".savefile
-    for bdm in booklist
-     if index(g:netrw_bookmarklist,bdm) == -1
-      call add(g:netrw_bookmarklist,bdm)
-     endif
-    endfor
-    call sort(g:netrw_bookmarklist)
-    exe "sil! w! ".savefile
+   elseif s:FileReadable(expand("$HOME/.netrc"))
+    let b:netrw_method  = 2
+    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
    endif
 
-   " construct and save .netrwbook
-   call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
-   exe "sil! w! ".savefile
-  endif
-  let bgone= bufnr("%")
-  q!
-  exe bgone."bwipe!"
-
-"  call Dret("s:NetrwBookHistSave")
-endfun
+  " Method#9: sftp://user@hostname/...path-to-file {{{3
+  elseif match(a:choice,sftpurm) == 0
+"   call Decho("sftp://...")
+   let b:netrw_method = 9
+   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
+   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
 
-" ---------------------------------------------------------------------
-" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2
-"  list of the contents of a local or remote directory.  It is assumed that the
-"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
-"  with the requested remote hostname first.
-fun! s:NetrwBrowse(islocal,dirname)
-  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
-"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
-"  call Decho("tab#".tabpagenr()." win#".winnr())
-"  call Dredir("ls!")
-  if !exists("s:netrw_initbookhist")
-   call s:NetrwBookHistRead()
-  endif
+  " Method#1: Issue an rcp: hostname:filename"  (this one should be last) {{{3
+  elseif match(a:choice,rcphf) == 0
+"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
+   let b:netrw_method  = 1
+   let userid          = substitute(a:choice,rcphf,'\2',"")
+   let g:netrw_machine = substitute(a:choice,rcphf,'\3',"")
+   let b:netrw_fname   = substitute(a:choice,rcphf,'\4',"")
+"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
+"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
+"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
+"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
+   if userid != ""
+    let g:netrw_uid= userid
+   endif
 
-  " simplify the dirname (especially for ".."s in dirnames)
-  if a:dirname !~ '^\a\+://'
-   let dirname= simplify(a:dirname)
+  " Cannot Determine Method {{{3
   else
-   let dirname= a:dirname
-  endif
-
-  if exists("s:netrw_skipbrowse")
-   unlet s:netrw_skipbrowse
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
-   return
-  endif
-  if !exists("*shellescape")
-   call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
-"   call Dret("s:NetrwBrowse : missing shellescape()")
-   return
-  endif
-  if !exists("*fnameescape")
-   call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70)
-"   call Dret("s:NetrwBrowse : missing fnameescape()")
-   return
+   if !exists("g:netrw_quiet")
+    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
+   endif
+   let b:netrw_method  = -1
   endif
+  "}}}3
 
-  call s:NetrwOptionSave("w:")                                                                                                            
-
-  " re-instate any marked files
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-"   call Decho("clearing marked files")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+  if g:netrw_port != ""
+   " remove any leading [:#] from port number
+   let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
+  elseif exists("netrw_port")
+   " retain port number as implicit for subsequent ftp operations
+   let g:netrw_port= netrw_port
   endif
 
-  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
-"   call Decho("handle w:netrw_acdkeep:")
-"   call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
-   exe 'keepj lcd '.fnameescape(dirname)
-   call s:NetrwSafeOptions()
-"   call Decho("getcwd<".getcwd().">")
-
-  elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
-   " looks like a regular file, attempt transfer
-"   call Decho("attempt transfer as regular file<".dirname.">")
+"  call Decho("a:choice       <".a:choice.">")
+"  call Decho("b:netrw_method <".b:netrw_method.">")
+"  call Decho("g:netrw_machine<".g:netrw_machine.">")
+"  call Decho("g:netrw_port   <".g:netrw_port.">")
+"  if exists("g:netrw_uid")		"Decho
+"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
+"  endif					"Decho
+"  if exists("s:netrw_passwd")		"Decho
+"   call Decho("s:netrw_passwd <".s:netrw_passwd.">")
+"  endif					"Decho
+"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
+"  call Dret("NetrwMethod : b:netrw_method=".b:netrw_method." g:netrw_port=".g:netrw_port)
+endfun
 
-   " remove any filetype indicator from end of dirname, except for the {{{3
-   " "this is a directory" indicator (/).
-   " There shouldn't be one of those here, anyway.
-   let path= substitute(dirname,'[*=@|]\r\=$','','e')
-"   call Decho("new path<".path.">")
-   call s:RemotePathAnalysis(dirname)
+" ------------------------------------------------------------------------
+" NetReadFixup: this sort of function is typically written by the user {{{2
+"               to handle extra junk that their system's ftp dumps
+"               into the transfer.  This function is provided as an
+"               example and as a fix for a Windows 95 problem: in my
+"               experience, win95's ftp always dumped four blank lines
+"               at the end of the transfer.
+if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
+ fun! NetReadFixup(method, line1, line2)
+"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
 
-   " remote-read the requested file into current buffer {{{3
-   keepj mark '
-   call s:NetrwEnew(dirname)
-   call s:NetrwSafeOptions()
-   setlocal ma noro
-"   call Decho("setlocal ma noro")
-   let b:netrw_curdir= dirname
-"   call Decho("exe sil! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")")
-   exe "sil! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
-   exe "sil! keepalt doau BufReadPre ".fnameescape(s:fname)
-   silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path)
-   if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz'
-    " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
-    exe "sil keepalt doau BufReadPost ".fnameescape(s:fname)
+   " sanity checks -- attempt to convert inputs to integers
+   let method = a:method + 0
+   let line1  = a:line1 + 0
+   let line2  = a:line2 + 0
+   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
+"    call Dret("NetReadFixup")
+    return
    endif
 
-   " save certain window-oriented variables into buffer-oriented variables {{{3
-   call s:SetBufWinVars()
-   call s:NetrwOptionRestore("w:")
-   setlocal ma nomod
+   if method == 3   " ftp (no <.netrc>)
+    let fourblanklines= line2 - 3
+    if fourblanklines >= line1
+     exe "sil keepj ".fourblanklines.",".line2."g/^\s*$/d"
+     call histdel("/",-1)
+    endif
+   endif
 
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Dret("s:NetrwBrowse : file<".s:fname.">")
-   return
-  endif
+"   call Dret("NetReadFixup")
+ endfun
+endif
 
-  " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3
-  call s:UseBufWinVars()
+" ---------------------------------------------------------------------
+" NetUserPass: set username and password for subsequent ftp transfer {{{2
+"   Usage:  :call NetUserPass()		               -- will prompt for userid and password
+"	    :call NetUserPass("uid")	               -- will prompt for password
+"	    :call NetUserPass("uid","password")        -- sets global userid and password
+"	    :call NetUserPass("ftp:host")              -- looks up userid and password using hup dictionary
+"	    :call NetUserPass("host","uid","password") -- sets hup dictionary with host, userid, password
+fun! NetUserPass(...)
 
-  " set up some variables {{{3
-  let b:netrw_browser_active = 1
-  let dirname                = dirname
-  let s:last_sort_by         = g:netrw_sort_by
+" call Dfunc("NetUserPass() a:0=".a:0)
 
-  " set up menu {{{3
-  call s:NetrwMenu(1)
+ if !exists('s:netrw_hup')
+  let s:netrw_hup= {}
+ endif
 
-  " set up buffer {{{3
-  let reusing= s:NetrwGetBuffer(a:islocal,dirname)
-  " maintain markfile highlighting
-  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
-"   call Decho("bufnr(%)=".bufnr('%'))
-"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
-  else
-"   call Decho("2match none")
-   2match none
-  endif
-  if reusing
-   call s:NetrwOptionRestore("w:")
-   setlocal noma nomod nowrap
-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"   call Dret("s:NetrwBrowse : re-using buffer")
-   return
-  endif
+ if a:0 == 0
+  " case: no input arguments
 
-  " set b:netrw_curdir to the new directory name {{{3
-"  call Decho("set b:netrw_curdir to the new directory name:  (buf#".bufnr("%").")")
-  let b:netrw_curdir= dirname
-  if b:netrw_curdir =~ '[/\\]$'
-   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
-  endif
-  if b:netrw_curdir == ''
-   if has("amiga")
-    " On the Amiga, the empty string connotes the current directory
-    let b:netrw_curdir= getcwd()
-   else
-    " under unix, when the root directory is encountered, the result
-    " from the preceding substitute is an empty string.
-    let b:netrw_curdir= '/'
-   endif
+  " change host and username if not previously entered; get new password
+  if !exists("g:netrw_machine")
+   let g:netrw_machine= input('Enter hostname: ')
   endif
-  if !a:islocal && b:netrw_curdir !~ '/$'
-   let b:netrw_curdir= b:netrw_curdir.'/'
+  if !exists("g:netrw_uid") || g:netrw_uid == ""
+   " get username (user-id) via prompt
+   let g:netrw_uid= input('Enter username: ')
   endif
-"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
-
-  " ------------
-  " (local only) {{{3
-  " ------------
-  if a:islocal
-"   call Decho("local only:")
-
-   " Set up ShellCmdPost handling.  Append current buffer to browselist
-   call s:LocalFastBrowser()
+  " get password via prompting
+  let s:netrw_passwd= inputsecret("Enter Password: ")
 
-  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
-   if !g:netrw_keepdir
-"    call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
-"    call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
-    if !exists("&l:acd") || !&l:acd
-"     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
-     try
-      exe 'keepj lcd '.fnameescape(b:netrw_curdir)
-     catch /^Vim\%((\a\+)\)\=:E472/
-      call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61)
-      if exists("w:netrw_prvdir")
-       let b:netrw_curdir= w:netrw_prvdir
-      else
-       call s:NetrwOptionRestore("w:")
-       setlocal noma nomod nowrap
-       let b:netrw_curdir= dirname
-"       call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"       call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
-       return
-      endif
-     endtry
-    endif
+  " set up hup database
+  let host = substitute(g:netrw_machine,'\..*$','','')
+  if !exists('s:netrw_hup[host]')
+   let s:netrw_hup[host]= {}
+  endif
+  let s:netrw_hup[host].uid    = g:netrw_uid
+  let s:netrw_hup[host].passwd = s:netrw_passwd
+
+ elseif a:0 == 1
+  " case: one input argument
+
+  if a:1 =~ '^ftp:'
+   " get host from ftp:... url
+   " access userid and password from hup (host-user-passwd) dictionary
+   let host = substitute(a:1,'^ftp:','','')
+   let host = substitute(host,'\..*','','')
+   if exists("s:netrw_hup[host]")
+    let g:netrw_uid    = s:netrw_hup[host].uid
+    let s:netrw_passwd = s:netrw_hup[host].passwd
+"    call Decho("get s:netrw_hup[".host."].uid   <".s:netrw_hup[host].uid.">")
+"    call Decho("get s:netrw_hup[".host."].passwd<".s:netrw_hup[host].passwd.">")
+   else
+    let g:netrw_uid    = input("Enter UserId: ")
+    let s:netrw_passwd = inputsecret("Enter Password: ")
    endif
 
-  " --------------------------------
-  " remote handling: {{{3
-  " --------------------------------
   else
-"   call Decho("remote only:")
-
-   " analyze dirname and g:netrw_list_cmd {{{4
-"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
-   if dirname =~ "^NetrwTreeListing\>"
-    let dirname= b:netrw_curdir
-"    call Decho("(dirname was ".dirname.") dirname<".dirname.">")
-   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
-    let dirname= substitute(b:netrw_curdir,'\\','/','g')
-    if dirname !~ '/$'
-     let dirname= dirname.'/'
-    endif
-    let b:netrw_curdir = dirname
-"    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
+   " case: one input argument, not an url.  Using it as a new user-id.
+   if exists("g:netrw_machine")
+    let host= substitute(g:netrw_machine,'\..*$','','')
    else
-    let dirname = substitute(dirname,'\\','/','g')
-"    call Decho("(normal) dirname<".dirname.">")
+    let g:netrw_machine= input('Enter hostname: ')
    endif
+   let g:netrw_uid = a:1
+"   call Decho("set g:netrw_uid= <".g:netrw_uid.">")
+   if exists("g:netrw_passwd")
+    " ask for password if one not previously entered
+    let s:netrw_passwd= g:netrw_passwd
+   else
+    let s:netrw_passwd = inputsecret("Enter Password: ")
+   endif
+  endif
 
-   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
-   if dirname !~ dirpat
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
-    endif
-    call s:NetrwOptionRestore("w:")
-    setlocal noma nomod nowrap
-"    call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"    call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
-    return
+"  call Decho("host<".host.">")
+  if exists("host")
+   if !exists('s:netrw_hup[host]')
+    let s:netrw_hup[host]= {}
    endif
-   let b:netrw_curdir= dirname
-"   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
-  endif  " (additional remote handling)
+   let s:netrw_hup[host].uid    = g:netrw_uid
+   let s:netrw_hup[host].passwd = s:netrw_passwd
+  endif
 
-  " -----------------------
-  " Directory Listing: {{{3
-  " -----------------------
-  call s:BrowserMaps(a:islocal)
-  call s:PerformListing(a:islocal)
+ elseif a:0 == 2
+  let g:netrw_uid    = a:1
+  let s:netrw_passwd = a:2
 
-  " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
-  " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
-  " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting
-  " the variable below avoids that second refresh of the screen.  The s:LocalBrowseShellCmdRefresh()
-  " function gets called due to that autocmd; it notices that the following variable is set
-  " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
-  let s:locbrowseshellcmd= 1
+ elseif a:0 == 3
+  " enter hostname, user-id, and password into the hup dictionary
+  let host = substitute(a:1,'^\a\+:','','')
+  let host = substitute(host,'\..*$','','')
+  if !exists('s:netrw_hup[host]')
+   let s:netrw_hup[host]= {}
+  endif
+  let s:netrw_hup[host].uid    = a:2
+  let s:netrw_hup[host].passwd = a:3
+  let g:netrw_uid              = s:netrw_hup[host].uid
+  let s:netrw_passwd           = s:netrw_hup[host].passwd
+"  call Decho("set s:netrw_hup[".host."].uid   <".s:netrw_hup[host].uid.">")
+"  call Decho("set s:netrw_hup[".host."].passwd<".s:netrw_hup[host].passwd.">")
+ endif
 
-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-"  call Dret("s:NetrwBrowse : did PerformListing")
-  return
+" call Dret("NetUserPass : uid<".g:netrw_uid."> passwd<".s:netrw_passwd.">")
 endfun
 
+" ===========================================
+"  Shared Browsing Support:    {{{1
+" ===========================================
+
 " ---------------------------------------------------------------------
-" s:NetrwFileInfo: supports qf (query for file information) {{{2
-fun! s:NetrwFileInfo(islocal,fname)
-"  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
-  if a:islocal
-   if (has("unix") || has("macunix")) && executable("/bin/ls")
-    if exists("b:netrw_curdir")
-"     call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>')
-     if b:netrw_curdir =~ '/$'
-      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname))
-     else
-      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname))
-     endif
-    else
-"     call Decho('using ls '.a:fname." using cwd<".getcwd().">")
-     echo system("/bin/ls -lsad ".shellescape(a:fname))
-    endif
-   else
-    " use vim functions to return information about file below cursor
-"    call Decho("using vim functions to query for file info")
-    if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]'
-     let fname= substitute(a:fname,".$","","")
-    else
-     let fname= a:fname
+" s:NetrwMaps: {{{2
+fun! s:NetrwMaps(islocal)
+"  call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
+
+  " set up Rexplore and [ 2-leftmouse-click -or- c-leftmouse ]
+"  call Decho("(NetrwMaps) set up Rexplore command")
+  com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif
+  if g:netrw_mousemaps && g:netrw_retmap
+"   call Decho("(NetrwMaps) set up Rexplore 2-leftmouse")
+   if !hasmapto("<Plug>NetrwReturn")
+    if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$'
+"     call Decho("(NetrwMaps) making map for 2-leftmouse")
+     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
+    elseif maparg("<c-leftmouse>","n") == ""
+"     call Decho("(NetrwMaps) making map for c-leftmouse")
+     nmap <unique> <silent> <c-leftmouse>	<Plug>NetrwReturn
     endif
-    let t  = getftime(fname)
-    let sz = getfsize(fname)
-    echo a:fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname))
-"    call Decho(fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname)))
    endif
-  else
-   echo "sorry, \"qf\" not supported yet for remote files"
+   nno <silent> <Plug>NetrwReturn	:Rexplore<cr>
+"   call Decho("(NetrwMaps) made <Plug>NetrwReturn map")
   endif
-"  call Dret("s:NetrwFileInfo")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwGetBuffer: {{{2
-"   returns 0=cleared buffer
-"           1=re-used buffer
-fun! s:NetrwGetBuffer(islocal,dirname)
-"  call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle)
-  let dirname= a:dirname
 
-  " re-use buffer if possible {{{3
-"  call Decho("--re-use a buffer if possible--")
-  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-   " find NetrwTreeList buffer if there is one
-"   call Decho("find NetrwTreeList buffer if there is one")
-   if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
-"    call Decho("  re-use w:netrw_treebufnr=".w:netrw_treebufnr)
-    let eikeep= &ei
-    set ei=all
-    exe "sil! b ".w:netrw_treebufnr
-    let &ei= eikeep
-"    call Dret("s:NetrwGetBuffer : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
-    return
+  if a:islocal
+"   call Decho("(NetrwMaps) make local maps")
+   " local normal-mode maps
+   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(1)<cr>
+   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(1)<cr>
+   nnoremap <buffer> <silent> c		:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
+   nnoremap <buffer> <silent> <cr>	:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
+   nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("")<cr>
+   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> gd	:<c-u>call <SID>NetrwForceChgDir(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> gf	:<c-u>call <SID>NetrwForceFile(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(1)<cr>
+   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
+   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(1)<cr>
+   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
+   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
+   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
+   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> mF	:<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
+   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
+   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
+   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
+   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
+   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
+   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
+   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
+   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
+   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
+   nnoremap <buffer> <silent> mX	:<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr>
+   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
+   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(1)<cr>
+   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(3)<cr>
+   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(1)<cr>
+   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr>
+   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(1)<cr>
+   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
+   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(4)<cr>
+   nnoremap <buffer> <silent> Tb	:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   nnoremap <buffer> <silent> Th	:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
+   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
+   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
+   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
+   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+   nnoremap <buffer> <silent> X		:call <SID>NetrwLocalExecute(expand("<cword>"))"<cr>
+   " local insert-mode maps
+   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(1)<cr>
+   inoremap <buffer> <silent> c		<c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
+   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(1)<cr>
+   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
+   inoremap <buffer> <silent> <cr>	<c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
+   inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("")<cr>
+   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(1)<cr>
+   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
+   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(1)<cr>
+   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
+   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
+   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
+   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
+   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
+   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
+   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
+   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
+   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
+   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
+   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
+   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
+   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
+   inoremap <buffer> <silent> mX	<c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr>
+   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
+   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(1)<cr>
+   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(3)<cr>
+   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
+   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr>
+   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(1)<cr>
+   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(1)<cr>
+   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(4)<cr>
+   inoremap <buffer> <silent> Tb	<c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   inoremap <buffer> <silent> Th	<c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
+   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
+   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
+   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(5)<cr>
+   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+   if !hasmapto('<Plug>NetrwHideEdit')
+    nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
+    imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
    endif
-   let bufnum= -1
-"   call Decho("  liststyle=TREE but w:netrw_treebufnr doesn't exist")
-
-  else
-   " find buffer number of buffer named precisely the same as dirname {{{3
-"   call Decho("--find buffer numnber of buffer named precisely the same as dirname--")
-"   call Dredir("ls!")
-
-   " get dirname and associated buffer number
-   let bufnum  = bufnr(escape(dirname,'\'))
-"   call Decho("  find buffer<".dirname.">'s number ")
-"   call Decho("  bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
-
-   if bufnum < 0 && dirname !~ '/$'
-    " try appending a trailing /
-"    call Decho("  try appending a trailing / to dirname<".dirname.">")
-    let bufnum= bufnr(escape(dirname.'/','\'))
-    if bufnum > 0
-     let dirname= dirname.'/'
-    endif
+   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(1)<cr>
+   if !hasmapto('<Plug>NetrwRefresh')
+    nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
+    imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
    endif
-
-   if bufnum < 0 && dirname =~ '/$'
-    " try removing a trailing /
-"    call Decho("  try removing a trailing / from dirname<".dirname.">")
-    let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
-    if bufnum > 0
-     let dirname= substitute(dirname,'/$','','')
-    endif
+   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+   if s:didstarstar || !mapcheck("<s-down>","n")
+    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+    inoremap <buffer> <silent> <s-down>	:Nexplore<cr>
    endif
-
-"   call Decho("  findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
-   " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
-   if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
-    " handle approximate matches
-"    call Decho("  handling approx match: bufnum#".bufnum."<".bufname(bufnum)."> approx-dirname<".dirname.">")
-    let ibuf    = 1
-    let buflast = bufnr("$")
-"    call Decho("  findbuf2: buflast=bufnr($)=".buflast)
-    while ibuf <= buflast
-     let bname= substitute(bufname(ibuf),'\\','/','g')
-     let bname= substitute(bname,'.\zs/$','','')
-"     call Decho("  findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">")
-     if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
-      " bname is not empty
-      " dirname ends with bname,
-      " dirname doesn't start with /, so its not a absolute path
-"      call Decho("  findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
-      break
-     endif
-     if bname =~ '^'.dirname.'/\=$'
-      " bname begins with dirname
-"      call Decho('  findbuf3b: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
-      break
-     endif
-     if dirname =~ '^'.bname.'/$'
-"      call Decho('  findbuf3c: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
-      break
-     endif
-     if bname != '' && dirname =~ '/'.bname.'$' && bname == bufname("%") && line("$") == 1
-"      call Decho('  findbuf3d: passes test 4 : dirname<'.dirname.'>=~ /'.bname.'$')
-      break
-     endif
-     let ibuf= ibuf + 1
-    endwhile
-    if ibuf > buflast
-     let bufnum= -1
-    else
-     let bufnum= ibuf
-    endif
-"    call Decho("  findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
+   if s:didstarstar || !mapcheck("<s-up>","n")
+    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+    inoremap <buffer> <silent> <s-up>	:Pexplore<cr>
    endif
-  endif
-
-  " get enew buffer and name it -or- re-use buffer {{{3
-  sil! keepj mark '
-  if bufnum < 0 || !bufexists(bufnum)
-"   call Decho("--get enew buffer and name it (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
-   call s:NetrwEnew(dirname)
-"   call Decho("  got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
-   " name the buffer
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-    " Got enew buffer; transform into a NetrwTreeListing
-"    call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
-    if !exists("s:netrw_treelistnum")
-     let s:netrw_treelistnum= 1
-    else
-     let s:netrw_treelistnum= s:netrw_treelistnum + 1
-    endif
-    let w:netrw_treebufnr= bufnr("%")
-"    call Decho("  exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
-    exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
-    set bt=nofile noswf
-    nnoremap <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
-    nnoremap <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
-    nnoremap <silent> <buffer> [[       :silent call <SID>TreeListMove('[')<cr>
-    nnoremap <silent> <buffer> ]]       :silent call <SID>TreeListMove(']')<cr>
-"    call Decho("  tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
-   else
-"    let v:errmsg= "" " Decho
-    let escdirname= fnameescape(dirname)
-"    call Decho("  errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
-"    call Decho('  exe sil! keepalt file '.escdirname)
-"    let v:errmsg= "" " Decho
-    exe 'sil! keepalt file '.escdirname
-"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
+   let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape)
+   if g:netrw_mousemaps == 1
+    nmap <buffer> <leftmouse>   <Plug>NetrwLeftmouse
+    nno  <buffer> <silent>	<Plug>NetrwLeftmouse	<leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
+    nmap <buffer> <s-rightdrag>	<Plug>NetrwRightdrag
+    nno  <buffer> <silent>	<Plug>NetrwRightdrag	<leftmouse>:call <SID>NetrwRightdrag(1)<cr>
+    nmap <buffer> <middlemouse>	<Plug>NetrwMiddlemouse
+    nno  <buffer> <silent>	<Plug>NetrwMiddlemouse	<leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
+    nmap <buffer> <s-leftmouse>	<Plug>NetrwSLeftmouse
+    nno  <buffer> <silent>	<Plug>NetrwSLeftmouse   <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+    nmap <buffer> <2-leftmouse>	<Plug>Netrw2Leftmouse
+    nmap <buffer> <silent>	<Plug>Netrw2Leftmouse	-
+    imap <buffer> <leftmouse>	<Plug>ILeftmouse
+    ino  <buffer> <silent>	<Plug>ILeftmouse	<c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr>
+    imap <buffer> <middlemouse>	<Plug>IMiddlemouse
+    ino  <buffer> <silent>	<Plug>IMiddlemouse	<c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
+    imap <buffer> <s-leftmouse>	<Plug>ISLeftmouse
+    ino  <buffer> <silent>	<Plug>ISLeftmouse	<c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+    exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+    exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+    exe 'inoremap <buffer> <silent> <rightmouse>  <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
    endif
-"   call Decho("  named enew buffer#".bufnr("%")."<".bufname("%").">")
+   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetrwMakeDir("")<cr>'
+   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+   exe 'inoremap <buffer> <silent> <Leader>m	<c-o>:call <SID>NetrwMakeDir("")<cr>'
+   nnoremap <buffer> <F1>		:he netrw-quickhelp<cr>
 
-  else " Re-use the buffer
-"   call Decho("--re-use buffer#".bufnum." (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
-   let eikeep= &ei
-   set ei=all
-   if getline(2) =~ '^" Netrw Directory Listing'
-"    call Decho("  re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  keepalt b ".bufnum)
-    exe "sil! keepalt b ".bufnum
-   else
-"    call Decho("  reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  b ".bufnum)
-    exe "sil! b ".bufnum
-   endif
-   if bufname("%") == '.'
-"    call Decho("exe sil! keepalt file ".fnameescape(getcwd()))
-    exe "sil! keepalt file ".fnameescape(getcwd())
+  else " remote
+"   call Decho("(NetrwMaps) make remote maps")
+   call s:RemotePathAnalysis(b:netrw_curdir)
+   " remote normal-mode maps
+   nnoremap <buffer> <silent> <cr>	:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
+   nnoremap <buffer> <silent> <c-l>	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
+   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(0)<cr>
+   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
+   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
+   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
+   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> mF	:<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
+   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
+   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
+   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
+   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
+   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
+   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
+   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
+   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
+   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
+   nnoremap <buffer> <silent> mX	:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr>
+   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
+   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> gd	:<c-u>call <SID>NetrwForceChgDir(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> gf	:<c-u>call <SID>NetrwForceFile(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(0)<cr>
+   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
+   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(0)<cr>
+   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
+   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(0)<cr>
+   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(0)<cr>
+   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(0)<cr>
+   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+   nnoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr>
+   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(0)<cr>
+   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
+   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(1)<cr>
+   nnoremap <buffer> <silent> Tb	:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   nnoremap <buffer> <silent> Th	:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
+   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
+   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
+   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
+   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(0)<cr>
+   " remote insert-mode maps
+   inoremap <buffer> <silent> <cr>	<c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
+   inoremap <buffer> <silent> <c-l>	<c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
+   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(0)<cr>
+   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
+   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
+   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
+   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
+   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
+   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
+   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
+   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
+   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
+   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
+   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
+   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
+   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
+   inoremap <buffer> <silent> mX	<c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr>
+   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
+   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(0)<cr>
+   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
+   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(0)<cr>
+   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
+   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(0)<cr>
+   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(0)<cr>
+   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
+   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+   inoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr>
+   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(0)<cr>
+   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(0)<cr>
+   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(1)<cr>
+   inoremap <buffer> <silent> Tb	<c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
+   inoremap <buffer> <silent> Th	<c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
+   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
+   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(2)<cr>
+   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
+   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(0)<cr>
+   if !hasmapto('<Plug>NetrwHideEdit')
+    nmap <buffer> <c-h> <Plug>NetrwHideEdit
+    imap <buffer> <c-h> <Plug>NetrwHideEdit
    endif
-   let &ei= eikeep
-   if line("$") <= 1
-    call s:NetrwListSettings(a:islocal)
-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it")
-    return 0
-   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
-"    call Decho("--re-use tree listing--")
-"    call Decho("  clear buffer<".expand("%")."> with :%d")
-    sil keepj %d
-    call s:NetrwListSettings(a:islocal)
-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
-    return 0
-   else
-"    call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%"))
-    return 1
+   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(0)<cr>
+   if !hasmapto('<Plug>NetrwRefresh')
+    nmap <buffer> <c-l> <Plug>NetrwRefresh
+    imap <buffer> <c-l> <Plug>NetrwRefresh
    endif
-  endif
 
-  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
-  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
-  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
-  "  med    1         D      H
-  "  fast   2         H      H
-"  call Decho("--do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
-  let fname= expand("%")
-  call s:NetrwListSettings(a:islocal)
-"  call Decho("exe sil! keepalt file ".fnameescape(fname))
-  exe "sil! keepalt file ".fnameescape(fname)
+   let mapsafepath     = escape(s:path, s:netrw_map_escape)
+   let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape)
+
+   nnoremap <buffer> <silent> <Plug>NetrwRefresh	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+   if g:netrw_mousemaps == 1
+    nmap <leftmouse>		<Plug>NetrwLeftmouse
+    nno <buffer> <silent>	<Plug>NetrwLeftmouse	<leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
+    nmap <buffer> <leftdrag>	<Plug>NetrwLeftdrag
+    nno  <buffer> <silent>	<Plug>NetrwLeftdrag	:call <SID>NetrwLeftdrag(0)<cr>
+    nmap <middlemouse>		<Plug>NetrwMiddlemouse
+    nno  <buffer> <silent>	<middlemouse>		<Plug>NetrwMiddlemouse <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
+    nmap <buffer> <s-leftmouse>	<Plug>NetrwSLeftmouse
+    nno  <buffer> <silent>	<Plug>NetrwSLeftmouse   <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+    nmap <buffer> <2-leftmouse>	<Plug>Netrw2Leftmouse
+    nmap <buffer> <silent>	<Plug>Netrw2Leftmouse	-
+    imap <buffer> <leftmouse>	<Plug>ILeftmouse
+    ino  <buffer> <silent>	<Plug>ILeftmouse	<c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr>
+    imap <buffer> <middlemouse>	<Plug>IMiddlemouse
+    ino  <buffer> <silent>	<Plug>IMiddlemouse	<c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
+    imap <buffer> <s-leftmouse>	<Plug>ISLeftmouse
+    ino  <buffer> <silent>	<Plug>ISLeftmouse	<c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+    exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+    exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+    exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   endif
+   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+   nnoremap <buffer> <F1>			:he netrw-quickhelp<cr>
+   inoremap <buffer> <F1>			<c-o>:he netrw-quickhelp<cr>
+  endif
 
-  " delete all lines from buffer {{{3
-"  call Decho("--delete all lines from buffer--")
-"  call Decho("  clear buffer<".expand("%")."> with :%d")
-  sil! keepalt keepj %d
+  keepj call s:SetRexDir(a:islocal,b:netrw_curdir)
 
-"  call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%"))
-  return 0
+"  call Dret("s:NetrwMaps")
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwGetcwd: get the current directory. {{{2
-"   Change backslashes to forward slashes, if any.
-"   If doesc is true, escape certain troublesome characters
-fun! s:NetrwGetcwd(doesc)
-"  call Dfunc("NetrwGetcwd(doesc=".a:doesc.")")
-  let curdir= substitute(getcwd(),'\\','/','ge')
-  if curdir !~ '[\/]$'
-   let curdir= curdir.'/'
-  endif
-  if a:doesc
-   let curdir= fnameescape(curdir)
-  endif
-"  call Dret("NetrwGetcwd <".curdir.">")
-  return curdir
+" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
+fun! s:ExplorePatHls(pattern)
+"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
+  let repat= substitute(a:pattern,'^**/\{1,2}','','')
+"  call Decho("repat<".repat.">")
+  let repat= escape(repat,'][.\')
+"  call Decho("repat<".repat.">")
+  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
+"  call Dret("s:ExplorePatHls repat<".repat.">")
+  return repat
 endfun
 
 " ---------------------------------------------------------------------
-"  s:NetrwGetWord: it gets the directory/file named under the cursor {{{2
-fun! s:NetrwGetWord()
-"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
-  call s:UseBufWinVars()
-
-  " insure that w:netrw_liststyle is set up
-  if !exists("w:netrw_liststyle")
-   if exists("g:netrw_liststyle")
-    let w:netrw_liststyle= g:netrw_liststyle
-   else
-    let w:netrw_liststyle= s:THINLIST
-   endif
-"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
+"  s:NetrwBookHistHandler: {{{2
+"    0: (user: <mb>)   bookmark current directory
+"    1: (user: <gb>)   change to the bookmarked directory
+"    2: (user: <qb>)   list bookmarks
+"    3: (browsing)     record current directory history
+"    4: (user: <u>)    go up   (previous) bookmark
+"    5: (user: <U>)    go down (next)     bookmark
+"    6: (user: <mB>)   delete bookmark
+fun! s:NetrwBookHistHandler(chg,curdir)
+"  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
+"   "  call Dret("s:NetrwBookHistHandler - suppressed due to g:netrw_dirhistmax")
+   return
   endif
 
-  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
-   " Active Banner support
-"   call Decho("active banner handling")
-   keepj norm! 0
-   let dirname= "./"
-   let curline= getline('.')
-
-   if curline =~ '"\s*Sorted by\s'
-    keepj norm s
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "s" also works'
-
-   elseif curline =~ '"\s*Sort sequence:'
-    let s:netrw_skipbrowse= 1
-    echo 'Press "S" to edit sorting sequence'
-
-   elseif curline =~ '"\s*Quick Help:'
-    keepj norm ?
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "?" also works'
-
-   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
-    keepj norm a
-    let s:netrw_skipbrowse= 1
-    echo 'Pressing "a" also works'
-
-   elseif line("$") > w:netrw_bannercnt
-    exe 'sil keepj '.w:netrw_bannercnt
+  let ykeep= @@
+  if a:chg == 0
+   " bookmark the current directory
+"   call Decho("(user: <b>) bookmark the current directory")
+   if !exists("g:netrw_bookmarklist")
+    let g:netrw_bookmarklist= []
    endif
+   if index(g:netrw_bookmarklist,a:curdir) == -1
+    " curdir not currently in g:netrw_bookmarklist, so include it
+    call add(g:netrw_bookmarklist,a:curdir)
+    call sort(g:netrw_bookmarklist)
+   endif
+   echo "bookmarked the current directory"
 
-  elseif w:netrw_liststyle == s:THINLIST
-"   call Decho("thin column handling")
-   keepj norm! 0
-   let dirname= getline('.')
-
-  elseif w:netrw_liststyle == s:LONGLIST
-"   call Decho("long column handling")
-   keepj norm! 0
-   let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
+  elseif a:chg == 1
+   " change to the bookmarked directory
+"   call Decho("(user: <".v:count."gb>) change to the bookmarked directory")
+   if exists("g:netrw_bookmarklist[v:count-1]")
+"    call Decho("(user: <".v:count."gb>) bookmarklist=".string(g:netrw_bookmarklist))
+    exe "keepj e ".fnameescape(g:netrw_bookmarklist[v:count-1])
+   else
+    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
+   endif
 
-  elseif w:netrw_liststyle == s:TREELIST
-"   call Decho("treelist handling")
-   let dirname= substitute(getline('.'),'^\(| \)*','','e')
+  elseif a:chg == 2
+"   redraw!
+   let didwork= 0
+   " list user's bookmarks
+"   call Decho("(user: <q>) list user's bookmarks")
+   if exists("g:netrw_bookmarklist")
+"    call Decho('list '.len(g:netrw_bookmarklist).' bookmarks')
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+"     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
+     echo printf("Netrw Bookmark#%-2d: %s",cnt,g:netrw_bookmarklist[cnt-1])
+     let didwork = 1
+     let cnt     = cnt + 1
+    endfor
+   endif
 
-  else
-"   call Decho("obtain word from wide listing")
-   let dirname= getline('.')
+   " list directory history
+   let cnt     = g:netrw_dirhist_cnt
+   let first   = 1
+   let histcnt = 0
+   if g:netrw_dirhistmax > 0
+    while ( first || cnt != g:netrw_dirhist_cnt )
+"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
+     if exists("g:netrw_dirhist_{cnt}")
+"     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
+      echo printf("Netrw  History#%-2d: %s",histcnt,g:netrw_dirhist_{cnt})
+      let didwork= 1
+     endif
+     let histcnt = histcnt + 1
+     let first   = 0
+     let cnt     = ( cnt - 1 ) % g:netrw_dirhistmax
+     if cnt < 0
+      let cnt= cnt + g:netrw_dirhistmax
+     endif
+    endwhile
+   else
+    let g:netrw_dirhist_cnt= 0
+   endif
+   if didwork
+    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   endif
 
-   if !exists("b:netrw_cpf")
-    let b:netrw_cpf= 0
-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
-    call histdel("/",-1)
-"   call Decho("computed cpf=".b:netrw_cpf)
+  elseif a:chg == 3
+   " saves most recently visited directories (when they differ)
+"   call Decho("(browsing) record curdir history")
+   if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir
+    if g:netrw_dirhistmax > 0
+     let g:netrw_dirhist_cnt                   = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+     let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir
+    endif
+"    call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
    endif
 
-"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
-   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
-"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
-"   call Decho("1: dirname<".dirname.">")
-   if filestart == 0
-    keepj norm! 0ma
+  elseif a:chg == 4
+   " u: change to the previous directory stored on the history list
+"   call Decho("(user: <u>) chg to prev dir from history")
+   if g:netrw_dirhistmax > 0
+    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - v:count1 ) % g:netrw_dirhistmax
+    if g:netrw_dirhist_cnt < 0
+     let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
+    endif
    else
-    call cursor(line("."),filestart+1)
-    keepj norm! ma
+    let g:netrw_dirhist_cnt= 0
    endif
-   let rega= @a
-   let eofname= filestart + b:netrw_cpf + 1
-   if eofname <= col("$")
-    call cursor(line("."),filestart+b:netrw_cpf+1)
-    keepj norm! "ay`a
+   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
+"    call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+     setl ma noro
+"     call Decho("(NetrwBookHistHandler) setl ma noro")
+     sil! keepj %d
+     setl nomod
+"     call Decho("(NetrwBookHistHandler) setl nomod")
+"     call Decho("(NetrwBookHistHandler)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+    endif
+"    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
+    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
    else
-    keepj norm! "ay$
+    if g:netrw_dirhistmax > 0
+     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + v:count1 ) % g:netrw_dirhistmax
+    else
+     let g:netrw_dirhist_cnt= 0
+    endif
+    echo "Sorry, no predecessor directory exists yet"
    endif
-   let dirname = @a
-   let @a      = rega
-"   call Decho("2: dirname<".dirname.">")
-   let dirname= substitute(dirname,'\s\+$','','e')
-"   call Decho("3: dirname<".dirname.">")
-  endif
-
-  " symlinks are indicated by a trailing "@".  Remove it before further processing.
-  let dirname= substitute(dirname,"@$","","")
-
-  " executables are indicated by a trailing "*".  Remove it before further processing.
-  let dirname= substitute(dirname,"\*$","","")
 
-"  call Dret("s:NetrwGetWord <".dirname.">")
-  return dirname
-endfun
+  elseif a:chg == 5
+   " U: change to the subsequent directory stored on the history list
+"   call Decho("(user: <U>) chg to next dir from history")
+   if g:netrw_dirhistmax > 0
+    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+    if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
+"    call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+"      call Decho("(NetrwBookHistHandler) setl ma noro")
+      setl ma noro
+      sil! keepj %d
+"      call Decho("removed all lines from buffer (%d)")
+"      call Decho("(NetrwBookHistHandler) setl nomod")
+      setl nomod
+"      call Decho("(set nomod)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+     endif
+"    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
+     exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
+    else
+     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
+     if g:netrw_dirhist_cnt < 0
+      let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
+     endif
+     echo "Sorry, no successor directory exists yet"
+    endif
+   else
+    let g:netrw_dirhist_cnt= 0
+    echo "Sorry, no successor directory exists yet (g:netrw_dirhistmax is ".g:netrw_dirhistmax.")"
+   endif
 
-" ---------------------------------------------------------------------
-" s:NetrwListSettings: make standard settings for a netrw listing {{{2
-fun! s:NetrwListSettings(islocal)
-"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
-  let fname= bufname("%")
-"  call Decho("setlocal bt=nofile nobl ma nonu nowrap noro")
-  setlocal bt=nofile nobl ma nonu nowrap noro
-"  call Decho("exe sil! keepalt file ".fnameescape(fname))
-  exe "sil! keepalt file ".fnameescape(fname)
-  if g:netrw_use_noswf
-   setlocal noswf
-  endif
-"  call Dredir("ls!")
-"  call Decho("exe setlocal ts=".g:netrw_maxfilenamelen)
-  exe "setlocal ts=".g:netrw_maxfilenamelen
-  setlocal isk+=.,~,-
-  if g:netrw_fastbrowse > a:islocal
-   setlocal bh=hide
-  else
-   setlocal bh=delete
+  elseif a:chg == 6
+   " delete the v:count'th bookmark
+"   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
+   let savefile= s:NetrwHome()."/.netrwbook"
+   if filereadable(savefile)
+"    call Decho("merge bookmarks (active and file)")
+    keepj call s:NetrwBookHistSave() " done here to merge bookmarks first
+"    call Decho("bookmark delete savefile<".savefile.">")
+    keepj call delete(savefile)
+   endif
+"   call Decho("remove g:netrw_bookmarklist[".(v:count-1)."]")
+   keepj call remove(g:netrw_bookmarklist,v:count-1)
+"   call Decho("resulting g:netrw_bookmarklist=".string(g:netrw_bookmarklist))
   endif
-"  call Dret("s:NetrwListSettings")
+  call s:NetrwBookmarkMenu()
+  call s:NetrwTgtMenu()
+  let @@= ykeep
+"  call Dret("s:NetrwBookHistHandler")
 endfun
 
 " ---------------------------------------------------------------------
-"  s:NetrwListStyle: {{{2
-"  islocal=0: remote browsing
-"         =1: local browsing
-fun! s:NetrwListStyle(islocal)
-"  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
-  let fname             = s:NetrwGetWord()
-  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
-  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
-"  call Decho("fname<".fname.">")
-"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
-"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
-
-  if w:netrw_liststyle == s:THINLIST
-   " use one column listing
-"   call Decho("use one column list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
-
-  elseif w:netrw_liststyle == s:LONGLIST
-   " use long list
-"   call Decho("use long list")
-   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
+" s:NetrwBookHistRead: this function reads bookmarks and history {{{2
+"                      Sister function: s:NetrwBookHistSave()
+fun! s:NetrwBookHistRead()
+"  call Dfunc("s:NetrwBookHistRead()")
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
+"   "  call Dret("s:NetrwBookHistRead - suppressed due to g:netrw_dirhistmax")
+   return
+  endif
+  let ykeep= @@
+  if !exists("s:netrw_initbookhist")
+   let home    = s:NetrwHome()
+   let savefile= home."/.netrwbook"
+   if filereadable(savefile)
+"    call Decho("sourcing .netrwbook")
+    exe "keepalt keepj so ".savefile
+   endif
+   if g:netrw_dirhistmax > 0
+    let savefile= home."/.netrwhist"
+    if filereadable(savefile)
+"    call Decho("sourcing .netrwhist")
+     exe "keepalt keepj so ".savefile
+    endif
+    let s:netrw_initbookhist= 1
+    au VimLeave * call s:NetrwBookHistSave()
+   endif
+  endif
+  let @@= ykeep
+"  call Dret("s:NetrwBookHistRead")
+endfun
 
-  elseif w:netrw_liststyle == s:WIDELIST
-   " give wide list
-"   call Decho("use wide list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+" ---------------------------------------------------------------------
+" s:NetrwBookHistSave: this function saves bookmarks and history {{{2
+"                      Sister function: s:NetrwBookHistRead()
+"                      I used to do this via viminfo but that appears to
+"                      be unreliable for long-term storage
+fun! s:NetrwBookHistSave()
+"  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
+  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
+"   call Dret("s:NetrwBookHistSave : dirhistmax=".g:netrw_dirhistmax)
+   return
+  endif
 
-  elseif w:netrw_liststyle == s:TREELIST
-"   call Decho("use tree list")
-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+  let savefile= s:NetrwHome()."/.netrwhist"
+  1split
+  call s:NetrwEnew()
+  setl cino= com= cpo-=a cpo-=A fo=nroql2 tw=0 report=10000 noswf
+  setl nocin noai noci magic nospell nohid wig= noaw
+  setl ma noro write
+  if exists("+acd") | setl noacd | endif
+  sil! keepj keepalt %d
 
-  else
-   call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
-   let g:netrw_liststyle = s:THINLIST
-   let w:netrw_liststyle = g:netrw_liststyle
-   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
-  endif
-  setlocal ma noro
-"  call Decho("setlocal ma noro")
+  " save .netrwhist -- no attempt to merge
+  sil! keepalt file .netrwhist
+  call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
+  call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
+  let lastline = line("$")
+  let cnt      = 1
+  while cnt <= g:netrw_dirhist_cnt
+   call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
+   let cnt= cnt + 1
+  endwhile
+  exe "sil! w! ".savefile
 
-  " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
-"  call Decho("clear buffer<".expand("%")."> with :%d")
-  sil! keepj %d
-  " following prevents tree listing buffer from being marked "modified"
-  setlocal nomod
+  sil keepj %d
+  if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
+   " merge and write .netrwbook
+   let savefile= s:NetrwHome()."/.netrwbook"
 
-  " refresh the listing
-"  call Decho("refresh the listing")
-  let svpos= netrw#NetrwSavePosn()
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-  call s:NetrwCursorline()
+   if filereadable(savefile)
+    let booklist= deepcopy(g:netrw_bookmarklist)
+    exe "sil keepj keepalt so ".savefile
+    for bdm in booklist
+     if index(g:netrw_bookmarklist,bdm) == -1
+      call add(g:netrw_bookmarklist,bdm)
+     endif
+    endfor
+    call sort(g:netrw_bookmarklist)
+    exe "sil! w! ".savefile
+   endif
 
-  " keep cursor on the filename
-  sil! keepj $
-  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
-"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
-  if result <= 0 && exists("w:netrw_bannercnt")
-   exe "sil! keepj ".w:netrw_bannercnt
+   " construct and save .netrwbook
+   call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
+   exe "sil! w! ".savefile
   endif
+  let bgone= bufnr("%")
+  q!
+  exe "keepalt ".bgone."bwipe!"
 
-"  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
+"  call Dret("s:NetrwBookHistSave")
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwBannerCtrl: toggles the display of the banner {{{2
-fun! s:NetrwBannerCtrl(islocal)
-"  call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner)
-
-  " toggle the banner (enable/suppress)
-  let g:netrw_banner= !g:netrw_banner
+" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2
+"  list of the contents of a local or remote directory.  It is assumed that the
+"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
+"  with the requested remote hostname first.
+fun! s:NetrwBrowse(islocal,dirname)
+  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
+"  call Decho("(NetrwBrowse) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+  " s:NetrwBrowse: initialize history {{{3
+  if !exists("s:netrw_initbookhist")
+   keepj call s:NetrwBookHistRead()
+  endif
 
-  " refresh the listing
-  let svpos= netrw#NetrwSavePosn()
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  " s:NetrwBrowse: simplify the dirname (especially for ".."s in dirnames) {{{3
+  if a:dirname !~ '^\a\+://'
+   let dirname= simplify(a:dirname)
+  else
+   let dirname= a:dirname
+  endif
 
-  " keep cursor on the filename
-  let fname= s:NetrwGetWord()
-  sil keepj $
-  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
-"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
-  if result <= 0 && exists("w:netrw_bannercnt")
-   exe "keepj ".w:netrw_bannercnt
+  if exists("s:netrw_skipbrowse")
+   unlet s:netrw_skipbrowse
+"   call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
+   return
   endif
-"  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
-endfun
 
-" ---------------------------------------------------------------------
-" s:NetrwBookmarkMenu: Uses menu priorities {{{2
-"                      .2.[cnt] for bookmarks, and
-"                      .3.[cnt] for history
-"                      (see s:NetrwMenu())
-fun! s:NetrwBookmarkMenu()
-  if !exists("s:netrw_menucnt")
+  " s:NetrwBrowse: sanity checks: {{{3
+  if !exists("*shellescape")
+   keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
+"   call Dret("s:NetrwBrowse : missing shellescape()")
+   return
+  endif
+  if !exists("*fnameescape")
+   keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70)
+"   call Dret("s:NetrwBrowse : missing fnameescape()")
    return
   endif
-"  call Dfunc("NetrwBookmarkMenu()  histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt)
 
-  " the following test assures that gvim is running, has menus available, and has menus enabled.
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
-   if exists("g:NetrwTopLvlMenu")
-"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
-    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
-    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
-   endif
-   if !exists("s:netrw_initbookhist")
-    call s:NetrwBookHistRead()
-   endif
+  " s:NetrwBrowse: save options: {{{3
+  call s:NetrwOptionSave("w:")                                                                                                            
 
-   " show bookmarked places
-   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
-    let cnt= 1
-    for bmd in g:netrw_bookmarklist
-"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.'	:e '.bmd)
-     let bmd= escape(bmd,g:netrw_menu_escape)
+  " s:NetrwBrowse: re-instate any marked files {{{3
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+"   call Decho("(NetrwBrowse) clearing marked files")
+   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+  endif
 
-     " show bookmarks for goto menu
-     exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.'	:e '.bmd."\<cr>"
+  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
+   " s:NetrwBrowse: set up "safe" options for local directory/file {{{3
+"   call Decho("(NetrwBrowse) handle w:netrw_acdkeep:")
+"   call Decho("(NetrwBrowse) keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
+   exe 'keepj lcd '.fnameescape(dirname)
+   call s:NetrwSafeOptions()
+"   call Decho("(NetrwBrowse) getcwd<".getcwd().">")
 
-     " show bookmarks for deletion menu
-     exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.'	'.cnt."mB"
-     let cnt= cnt + 1
-    endfor
+  elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
+   " s:NetrwBrowse: looks like a remote regular file, attempt transfer {{{3
+"   call Decho("(NetrwBrowse) attempt transfer as regular file<".dirname.">")
+
+   " remove any filetype indicator from end of dirname, except for the
+   " "this is a directory" indicator (/).
+   " There shouldn't be one of those here, anyway.
+   let path= substitute(dirname,'[*=@|]\r\=$','','e')
+"   call Decho("(NetrwBrowse) new path<".path.">")
+   call s:RemotePathAnalysis(dirname)
 
+   " s:NetrwBrowse: remote-read the requested file into current buffer {{{3
+   keepj mark '
+   call s:NetrwEnew(dirname)
+   call s:NetrwSafeOptions()
+   setl ma noro
+"   call Decho("(NetrwBrowse) setl ma noro")
+   let b:netrw_curdir = dirname
+   let url            = s:method."://".s:user.s:machine.(s:port ? ":".s:port : "")."/".s:path
+"   call Decho("(NetrwBrowse) exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")")
+   exe "sil! keepj keepalt file ".fnameescape(url)
+   exe "sil! keepj keepalt doau BufReadPre ".fnameescape(s:fname)
+   sil call netrw#NetRead(2,url)
+   if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz'
+    " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
+    exe "sil keepj keepalt doau BufReadPost ".fnameescape(s:fname)
    endif
 
-   " show directory browsing history
-   let cnt     = g:netrw_dirhist_cnt
-   let first   = 1
-   let histcnt = 0
-   while ( first || cnt != g:netrw_dirhist_cnt )
-    let histcnt  = histcnt + 1
-    let priority = g:netrw_dirhist_cnt + histcnt
-    if exists("g:netrw_dirhist_{cnt}")
-     let histdir= escape(g:netrw_dirhist_{cnt},g:netrw_menu_escape)
-"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir)
-     exe 'sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir."\<cr>"
-    endif
-    let first = 0
-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
-    if cnt < 0
-     let cnt= cnt + g:netrw_dirhistmax
-    endif
-   endwhile
+   " s:NetrwBrowse: save certain window-oriented variables into buffer-oriented variables {{{3
+   call s:SetBufWinVars()
+   call s:NetrwOptionRestore("w:")
+"   call Decho("(NetrwBrowse) setl ma nomod")
+   setl ma nomod
+"   call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 
+"   call Dret("s:NetrwBrowse : file<".s:fname.">")
+   return
   endif
-"  call Dret("NetrwBookmarkMenu")
-endfun
 
-" ---------------------------------------------------------------------
-"  s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2
-"                       directory and a new directory name.  Also, if the
-"                       "new directory name" is actually a file,
-"                       NetrwBrowseChgDir() edits the file.
-fun! s:NetrwBrowseChgDir(islocal,newdir,...)
-"  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
+  " use buffer-oriented WinVars if buffer variables exist but associated window variables don't {{{3
+  call s:UseBufWinVars()
 
-  if !exists("b:netrw_curdir")
-   " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
-   " and the current window is the NetrwMessage window.
-"   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
-"   call Decho("getcwd<".getcwd().">")
-"   call Dredir("ls!")
-"   call Dret("s:NetrwBrowseChgDir")
-   return
-  endif
+  " set up some variables {{{3
+  let b:netrw_browser_active = 1
+  let dirname                = dirname
+  let s:last_sort_by         = g:netrw_sort_by
 
-  call s:NetrwOptionSave("s:")
-  call s:NetrwSafeOptions()
-  let nbcd_curpos                = netrw#NetrwSavePosn()
-  let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
-  if (has("win32") || has("win95") || has("win64") || has("win16"))
-   let dirname                   = substitute(b:netrw_curdir,'\\','/','ge')
-  else
-   let dirname= b:netrw_curdir
-  endif
-  let newdir    = a:newdir
-  let dolockout = 0
+  " set up menu {{{3
+  keepj call s:NetrwMenu(1)
 
-  " set up o/s-dependent directory recognition pattern
-  if has("amiga")
-   let dirpat= '[\/:]$'
+  " get/set-up buffer {{{3
+  let reusing= s:NetrwGetBuffer(a:islocal,dirname)
+  " maintain markfile highlighting
+  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
+"   call Decho("(NetrwBrowse) bufnr(%)=".bufnr('%'))
+"   call Decho("(NetrwBrowse) exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
+   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
   else
-   let dirpat= '[\/]$'
+"   call Decho("(NetrwBrowse) 2match none")
+   2match none
   endif
-"  call Decho("dirname<".dirname.">  dirpat<".dirpat.">")
-
-  if dirname !~ dirpat
-   " apparently vim is "recognizing" that it is in a directory and
-   " is removing the trailing "/".  Bad idea, so I put it back.
-   let dirname= dirname.'/'
-"   call Decho("adjusting dirname<".dirname.">")
+  if reusing && line("$") > 1
+   call s:NetrwOptionRestore("w:")
+"   call Decho("(NetrwBrowse) setl noma nomod nowrap")
+   setl noma nomod nowrap
+"   call Decho("(NetrwBrowse) (set noma nomod nowrap)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"   call Dret("s:NetrwBrowse : re-using buffer")
+   return
   endif
 
-  if newdir !~ dirpat
-   " ------------
-   " edit a file:
-   " ------------
-"   call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
-    let dirname= s:NetrwTreeDir()
-    if dirname =~ '/$'
-     let dirname= dirname.newdir
-    else
-     let dirname= s:NetrwTreeDir()."/".newdir
-    endif
-"    call Decho("dirname<".dirname.">")
-"    call Decho("tree listing")
-   elseif newdir =~ '^\(/\|\a:\)'
-    let dirname= newdir
+  " set b:netrw_curdir to the new directory name {{{3
+"  call Decho("(NetrwBrowse) set b:netrw_curdir to the new directory name:  (buf#".bufnr("%").")")
+  let b:netrw_curdir= dirname
+  if b:netrw_curdir =~ '[/\\]$'
+   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
+  endif
+  if b:netrw_curdir == ''
+   if has("amiga")
+    " On the Amiga, the empty string connotes the current directory
+    let b:netrw_curdir= getcwd()
    else
-    let dirname= s:ComposePath(dirname,newdir)
+    " under unix, when the root directory is encountered, the result
+    " from the preceding substitute is an empty string.
+    let b:netrw_curdir= '/'
    endif
-"   call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")")
-   " this lets NetrwBrowseX avoid the edit
-   if a:0 < 1
-"    call Decho("set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
-    call s:NetrwOptionRestore("s:")
-    if !exists("s:didsplit")
-     if     g:netrw_browse_split == 1
-      new
-      if !&ea
-       wincmd _
-      endif
-     elseif g:netrw_browse_split == 2
-      rightb vert new
-      if !&ea
-       wincmd |
-      endif
-     elseif g:netrw_browse_split == 3
-      tabnew
-     elseif g:netrw_browse_split == 4
-      if s:NetrwPrevWinOpen(2) == 3
-"       call Dret("s:NetrwBrowseChgDir")
+  endif
+  if !a:islocal && b:netrw_curdir !~ '/$'
+   let b:netrw_curdir= b:netrw_curdir.'/'
+  endif
+"  call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir.">")
+
+  " ------------
+  " (local only) {{{3
+  " ------------
+  if a:islocal
+"   call Decho("(NetrwBrowse) local only:")
+
+   " Set up ShellCmdPost handling.  Append current buffer to browselist
+   call s:LocalFastBrowser()
+
+  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
+   if !g:netrw_keepdir
+"    call Decho("(NetrwBrowse) handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+"    call Decho("(NetrwBrowse) l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
+    if !exists("&l:acd") || !&l:acd
+"     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
+     try
+      exe 'keepj lcd '.fnameescape(b:netrw_curdir)
+     catch /^Vim\%((\a\+)\)\=:E472/
+      call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61)
+      if exists("w:netrw_prvdir")
+       let b:netrw_curdir= w:netrw_prvdir
+      else
+       call s:NetrwOptionRestore("w:")
+"       call Decho("(NetrwBrowse) setl noma nomod nowrap")
+       setl noma nomod nowrap
+"       call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+       let b:netrw_curdir= dirname
+"       call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
        return
       endif
-     else
-      " handling a file, didn't split, so remove menu
-"      call Decho("handling a file+didn't split, so remove menu")
-      call s:NetrwMenu(0)
-      " optional change to window
-      if g:netrw_chgwin >= 1
-       exe "keepjumps ".g:netrw_chgwin."wincmd w"
-      endif
-     endif
+     endtry
     endif
+   endif
 
-    " the point where netrw actually edits the (local) file
-    " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
-    if a:islocal
-"     call Decho("edit local file: exe e! ".fnameescape(dirname))
-     exe "e! ".fnameescape(dirname)
-    else
-"     call Decho("remote file: NetrwBrowse will edit it")
-    endif
-    let dolockout= 1
+  " --------------------------------
+  " remote handling: {{{3
+  " --------------------------------
+  else
+"   call Decho("(NetrwBrowse) remote only:")
 
-    " handle g:Netrw_funcref -- call external-to-netrw functions
-    "   This code will handle g:Netrw_funcref as an individual function reference
-    "   or as a list of function references.  It will ignore anything that's not
-    "   a function reference.  See  :help Funcref  for information about function references.
-    if exists("g:Netrw_funcref")
-"     call Decho("handle optional Funcrefs")
-     if type(g:Netrw_funcref) == 2
-"      call Decho("handling a g:Netrw_funcref")
-      call g:Netrw_funcref()
-     elseif type(g:Netrw_funcref) == 3
-"      call Decho("handling a list of g:Netrw_funcrefs")
-      for Fncref in g:Netrw_funcref
-       if type(FncRef) == 2
-        call FncRef()
-       endif
-      endfor
-     endif
+   " analyze dirname and g:netrw_list_cmd {{{3
+"   call Decho("(NetrwBrowse) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
+   if dirname =~ "^NetrwTreeListing\>"
+    let dirname= b:netrw_curdir
+"    call Decho("(NetrwBrowse) (dirname was <NetrwTreeListing>) dirname<".dirname.">")
+   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+    let dirname= substitute(b:netrw_curdir,'\\','/','g')
+    if dirname !~ '/$'
+     let dirname= dirname.'/'
     endif
+    let b:netrw_curdir = dirname
+"    call Decho("(NetrwBrowse) (liststyle is TREELIST) dirname<".dirname.">")
+   else
+    let dirname = substitute(dirname,'\\','/','g')
+"    call Decho("(NetrwBrowse) (normal) dirname<".dirname.">")
    endif
 
-  elseif newdir =~ '^/'
-   " ---------------------------------
-   " just go to the new directory spec
-   " ---------------------------------
-"   call Decho('case "just go to new directory spec": newdir<'.newdir.'>')
-   let dirname= newdir
-   call s:SetRexDir(a:islocal,dirname)
-   call s:NetrwOptionRestore("s:")
+   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+   if dirname !~ dirpat
+    if !exists("g:netrw_quiet")
+     keepj call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
+    endif
+    keepj call s:NetrwOptionRestore("w:")
+"    call Decho("(NetrwBrowse) setl noma nomod nowrap")
+    setl noma nomod nowrap
+"    call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"    call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
+    return
+   endif
+   let b:netrw_curdir= dirname
+"   call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir."> (remote)")
+  endif  " (additional remote handling)
 
-  elseif newdir == './'
-   " --------------------------
-   " refresh the directory list
-   " --------------------------
-"   call Decho('case "refresh directory listing": newdir == "./"')
-   call s:SetRexDir(a:islocal,dirname)
+  " -----------------------
+  " Directory Listing: {{{3
+  " -----------------------
+  keepj call s:NetrwMaps(a:islocal)
+  keepj call s:PerformListing(a:islocal)
+  if v:version >= 700 && has("balloon_eval") && &beval == 0 && &l:bexpr == "" && !exists("g:netrw_nobeval")
+   let &l:bexpr= "netrw#NetrwBalloonHelp()"
+"   call Decho("(NetrwBrowse) set up balloon help: l:bexpr=".&l:bexpr)
+   set beval
+  endif
+  call s:NetrwOptionRestore("w:")
 
-  elseif newdir == '../'
-   " -------------------
-   " go up one directory
-   " -------------------
-"   call Decho('case "go up one directory": newdir == "../"')
+  " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
+  " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
+  " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting
+  " the variable below avoids that second refresh of the screen.  The s:LocalBrowseShellCmdRefresh()
+  " function gets called due to that autocmd; it notices that the following variable is set
+  " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
+  let s:locbrowseshellcmd= 1
 
-   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
-    " force a refresh
-"    call Decho("clear buffer<".expand("%")."> with :%d")
-    setlocal noro ma
-"    call Decho("setlocal noro ma")
-    keepj %d
-   endif
+"  call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Dret("s:NetrwBrowse : did PerformListing  ft<".&ft.">")
+  return
+endfun
 
-   if has("amiga")
-    " amiga
-"    call Decho('case "go up one directory": newdir == "../" and amiga')
-    if a:islocal
-     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
-     let dirname= substitute(dirname,'/$','','')
+" ---------------------------------------------------------------------
+" s:NetrwFileInfo: supports qf (query for file information) {{{2
+fun! s:NetrwFileInfo(islocal,fname)
+"  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
+  let ykeep= @@
+  if a:islocal
+   if (has("unix") || has("macunix")) && executable("/bin/ls")
+    if exists("b:netrw_curdir")
+"     call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>')
+     if b:netrw_curdir =~ '/$'
+      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname))
+     else
+      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname))
+     endif
     else
-     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
+"     call Decho('using ls '.a:fname." using cwd<".getcwd().">")
+     echo system("/bin/ls -lsad ".shellescape(a:fname))
     endif
-"    call Decho("amiga: dirname<".dirname."> (go up one dir)")
-
    else
-    " unix or cygwin
-"    call Decho('case "go up one directory": newdir == "../" and unix or cygwin')
-    if a:islocal
-     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
-     if dirname == ""
-      let dirname= '/'
-     endif
+    " use vim functions to return information about file below cursor
+"    call Decho("using vim functions to query for file info")
+    if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]'
+     let fname= substitute(a:fname,".$","","")
     else
-     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
+     let fname= a:fname
     endif
-"    call Decho("unix: dirname<".dirname."> (go up one dir)")
+    let t  = getftime(fname)
+    let sz = getfsize(fname)
+    echo a:fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname))
+"    call Decho(fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname)))
    endif
-   call s:SetRexDir(a:islocal,dirname)
+  else
+   echo "sorry, \"qf\" not supported yet for remote files"
+  endif
+  let @@= ykeep
+"  call Dret("s:NetrwFileInfo")
+endfun
 
-  elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
-"   call Decho('case liststyle is TREELIST and w:netrw_treedict exists')
-   " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
-   setlocal noro ma
-"   call Decho("setlocal noro ma")
-   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
-"    call Decho("clear buffer<".expand("%")."> with :%d")
-    keepj %d
+" ---------------------------------------------------------------------
+" s:NetrwGetBuffer: {{{2
+"   returns 0=cleared buffer
+"           1=re-used buffer
+fun! s:NetrwGetBuffer(islocal,dirname)
+"  call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle)
+"  call Decho("(NetrwGetBuffer) modiable=".&mod." modifiable=".&ma." readonly=".&ro)
+  let dirname= a:dirname
+
+  " re-use buffer if possible {{{3
+"  call Decho("(NetrwGetBuffer) --re-use a buffer if possible--")
+  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+   " find NetrwTreeList buffer if there is one
+"   call Decho("(NetrwGetBuffer) case liststyle=treelist: find NetrwTreeList buffer if there is one")
+   if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
+"    call Decho("(NetrwGetBuffer)   re-using w:netrw_treebufnr=".w:netrw_treebufnr)
+    setl mod
+    sil! keepj %d
+    let eikeep= &ei
+    set ei=all
+    exe "sil! keepalt b ".w:netrw_treebufnr
+    let &ei= eikeep
+"    call Dret("s:NetrwGetBuffer 0<buffer cleared> : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
+    return 0
    endif
-   let treedir      = s:NetrwTreeDir()
-   let s:treecurpos = nbcd_curpos
-   let haskey= 0
-"   call Decho("w:netrw_treedict<".string(w:netrw_treedict).">")
+   let bufnum= -1
+"   call Decho("(NetrwGetBuffer)   liststyle=TREE but w:netrw_treebufnr doesn't exist")
 
-   " search treedict for tree dir as-is
-   if has_key(w:netrw_treedict,treedir)
-"    call Decho('....searched for treedir<'.treedir.'> : found it!')
-    let haskey= 1
-   else
-"    call Decho('....searched for treedir<'.treedir.'> : not found')
+  else
+   " find buffer number of buffer named precisely the same as dirname {{{3
+"   call Decho("(NetrwGetBuffer) case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--")
+
+   " get dirname and associated buffer number
+   let bufnum  = bufnr(escape(dirname,'\'))
+"   call Decho("(NetrwGetBuffer)   find buffer<".dirname.">'s number ")
+"   call Decho("(NetrwGetBuffer)   bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
+
+   if bufnum < 0 && dirname !~ '/$'
+    " try appending a trailing /
+"    call Decho("(NetrwGetBuffer)   try appending a trailing / to dirname<".dirname.">")
+    let bufnum= bufnr(escape(dirname.'/','\'))
+    if bufnum > 0
+     let dirname= dirname.'/'
+    endif
    endif
 
-   " search treedict for treedir with a / appended
-   if !haskey && treedir !~ '/$'
-    if has_key(w:netrw_treedict,treedir."/")
-     let treedir= treedir."/"
-"     call Decho('....searched.for treedir<'.treedir.'> found it!')
-     let haskey = 1
+   if bufnum < 0 && dirname =~ '/$'
+    " try removing a trailing /
+"    call Decho("(NetrwGetBuffer)   try removing a trailing / from dirname<".dirname.">")
+    let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
+    if bufnum > 0
+     let dirname= substitute(dirname,'/$','','')
+    endif
+   endif
+
+"   call Decho("(NetrwGetBuffer)   findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
+   " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
+   if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
+    " handle approximate matches
+"    call Decho("(NetrwGetBuffer)   handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'")
+    let ibuf    = 1
+    let buflast = bufnr("$")
+"    call Decho("(NetrwGetBuffer)   findbuf2: buflast=bufnr($)=".buflast)
+    while ibuf <= buflast
+     let bname= substitute(bufname(ibuf),'\\','/','g')
+     let bname= substitute(bname,'.\zs/$','','')
+"     call Decho("(NetrwGetBuffer)   findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">")
+     if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
+      " bname is not empty
+      " dirname ends with bname,
+      " dirname doesn't start with /, so its not a absolute path
+"      call Decho("(NetrwGetBuffer)   findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
+      break
+     endif
+     if bname =~ '^'.dirname.'/\=$'
+      " bname begins with dirname
+"      call Decho('  findbuf3b: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
+      break
+     endif
+     if dirname =~ '^'.bname.'/$'
+"      call Decho('  findbuf3c: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
+      break
+     endif
+     if bname != '' && dirname =~ '/'.bname.'$' && bname == bufname("%") && line("$") == 1
+"      call Decho('  findbuf3d: passes test 4 : dirname<'.dirname.'>=~ /'.bname.'$')
+      break
+     endif
+     let ibuf= ibuf + 1
+    endwhile
+    if ibuf > buflast
+     let bufnum= -1
     else
-"     call Decho('....searched for treedir<'.treedir.'/> : not found')
+     let bufnum= ibuf
     endif
+"    call Decho("(NetrwGetBuffer)   findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
    endif
+  endif
 
-   " search treedict for treedir with any trailing / elided
-   if !haskey && treedir =~ '/$'
-    let treedir= substitute(treedir,'/$','','')
-    if has_key(w:netrw_treedict,treedir)
-"     call Decho('....searched.for treedir<'.treedir.'> found it!')
-     let haskey = 1
+  " get enew buffer and name it -or- re-use buffer {{{3
+"  call Decho("(NetrwGetBuffer)   get enew buffer and name it OR re-use buffer")
+  sil! keepj keepalt mark '
+  if bufnum < 0 || !bufexists(bufnum)
+"   call Decho("(NetrwGetBuffer) --get enew buffer and name it  (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)")
+   call s:NetrwEnew(dirname)
+"   call Decho("(NetrwGetBuffer)   got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
+   " name the buffer
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+    " Got enew buffer; transform into a NetrwTreeListing
+"    call Decho("(NetrwGetBuffer) --transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
+    if !exists("s:netrw_treelistnum")
+     let s:netrw_treelistnum= 1
     else
-"     call Decho('....searched for treedir<'.treedir.'> : not found')
+     let s:netrw_treelistnum= s:netrw_treelistnum + 1
     endif
+    let w:netrw_treebufnr= bufnr("%")
+"    call Decho("(NetrwGetBuffer)   exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
+    exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
+    set bt=nofile noswf
+    nnoremap <silent> <buffer> [	:sil call <SID>TreeListMove('[')<cr>
+    nnoremap <silent> <buffer> ]	:sil call <SID>TreeListMove(']')<cr>
+    nnoremap <silent> <buffer> [[       :sil call <SID>TreeListMove('[')<cr>
+    nnoremap <silent> <buffer> ]]       :sil call <SID>TreeListMove(']')<cr>
+"    call Decho("(NetrwGetBuffer)   tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
+   else
+"    let v:errmsg= "" " Decho
+    let escdirname= fnameescape(dirname)
+"    call Decho("(NetrwGetBuffer)   errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
+"    call Decho('  exe sil! keepalt file '.escdirname)
+"    let v:errmsg= "" " Decho
+    exe 'sil! keepalt file '.escdirname
+"    call Decho("(NetrwGetBuffer)   errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
    endif
+"   call Decho("(NetrwGetBuffer)   named enew buffer#".bufnr("%")."<".bufname("%").">")
 
-   if haskey
-    " close tree listing for selected subdirectory
-"    call Decho("closing selected subdirectory<".dirname.">")
-    call remove(w:netrw_treedict,treedir)
-"    call Decho("removed     entry<".treedir."> from treedict")
-"    call Decho("yielding treedict<".string(w:netrw_treedict).">")
-    let dirname= w:netrw_treetop
+  else " Re-use the buffer
+"   call Decho("(NetrwGetBuffer) --re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)")
+   let eikeep= &ei
+   set ei=all
+   if getline(2) =~ '^" Netrw Directory Listing'
+"    call Decho("(NetrwGetBuffer)   getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum)
+    exe "sil! keepalt b ".bufnum
    else
-    " go down one directory
-    let dirname= substitute(treedir,'/*$','/','')
-"    call Decho("go down one dir: treedir<".treedir.">")
+"    call Decho("(NetrwGetBuffer)   getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum)
+    exe "sil! keepalt b ".bufnum
    endif
-   call s:SetRexDir(a:islocal,dirname)
-   let s:treeforceredraw = 1
-
-  else
-   " go down one directory
-   let dirname= s:ComposePath(dirname,newdir)
-"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
-   call s:SetRexDir(a:islocal,dirname)
-  endif
-
-  call s:NetrwOptionRestore("s:")
-  if dolockout
-"   call Decho("filewritable(dirname<".dirname.">)=".filewritable(dirname))
-   if filewritable(dirname)
-"    call Decho("doing modification lockout settings: ma nomod noro")
-    setlocal ma nomod noro
+   if bufname("%") == '.'
+"    call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(getcwd()))
+    exe "sil! keepalt file ".fnameescape(getcwd())
+   endif
+   let &ei= eikeep
+   if line("$") <= 1
+    keepj call s:NetrwListSettings(a:islocal)
+"    call Dret("s:NetrwGetBuffer 0<buffer empty> : re-using buffer#".bufnr("%").", but its empty, so refresh it")
+    return 0
+   elseif g:netrw_fastbrowse == 0 || (a:islocal && g:netrw_fastbrowse == 1)
+    keepj call s:NetrwListSettings(a:islocal)
+    sil keepj %d
+"    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but refreshing due to g:netrw_fastbrowse=".g:netrw_fastbrowse)
+    return 0
+   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+"    call Decho("(NetrwGetBuffer) --re-use tree listing--")
+"    call Decho("(NetrwGetBuffer)   clear buffer<".expand("%")."> with :%d")
+    sil keepj %d
+    keepj call s:NetrwListSettings(a:islocal)
+"    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
+    return 0
    else
-"    call Decho("doing modification lockout settings: ma nomod ro")
-    setlocal ma nomod ro
+"    call Dret("s:NetrwGetBuffer 1<buffer not cleared> : buf#".bufnr("%"))
+    return 1
    endif
-"   call Decho("setlocal ma nomod noro")
   endif
 
-"  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
-  return dirname
+  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
+  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
+  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
+  "  med    1         D      H
+  "  fast   2         H      H
+"  call Decho("(NetrwGetBuffer) --do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
+  let fname= expand("%")
+  keepj call s:NetrwListSettings(a:islocal)
+"  call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(fname))
+  exe "sil! keepj keepalt file ".fnameescape(fname)
+
+  " delete all lines from buffer {{{3
+"  call Decho("(NetrwGetBuffer) --delete all lines from buffer--")
+"  call Decho("(NetrwGetBuffer)   clear buffer<".expand("%")."> with :%d")
+  sil! keepalt keepj %d
+
+"  call Dret("s:NetrwGetBuffer 0<cleared buffer> : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+  return 0
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwBrowseX:  (implements "x") executes a special "viewer" script or program for the {{{2
-"              given filename; typically this means given their extension.
-"              0=local, 1=remote
-fun! netrw#NetrwBrowseX(fname,remote)
-"  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
-
-  " special core dump handler
-  if a:fname =~ '/core\(\.\d\+\)\=$'
-   if exists("g:Netrw_corehandler")
-    if type(g:Netrw_corehandler) == 2
-     " g:Netrw_corehandler is a function reference (see :help Funcref)
-"     call Decho("g:Netrw_corehandler is a funcref")
-     call g:Netrw_corehandler(a:fname)
-    elseif type(g:netrw_corehandler) == 3)
-     " g:Netrw_corehandler is a List of function references (see :help Funcref)
-"     call Decho("g:Netrw_corehandler is a List")
-     for Fncref in g:Netrw_corehandler
-      if type(FncRef) == 2
-       call FncRef(a:fname)
-      endif
-     endfor
-    endif
-"    call Dret("NetrwBrowseX : coredump handler invoked")
-    return
-   endif
+" s:NetrwGetcwd: get the current directory. {{{2
+"   Change backslashes to forward slashes, if any.
+"   If doesc is true, escape certain troublesome characters
+fun! s:NetrwGetcwd(doesc)
+"  call Dfunc("NetrwGetcwd(doesc=".a:doesc.")")
+  let curdir= substitute(getcwd(),'\\','/','ge')
+  if curdir !~ '[\/]$'
+   let curdir= curdir.'/'
   endif
-
-  " set up the filename
-  " (lower case the extension, make a local copy of a remote file)
-  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
-  if has("win32") || has("win95") || has("win64") || has("win16")
-   let exten= substitute(exten,'^.*$','\L&\E','')
+  if a:doesc
+   let curdir= fnameescape(curdir)
   endif
-"  call Decho("exten<".exten.">")
+"  call Dret("NetrwGetcwd <".curdir.">")
+  return curdir
+endfun
 
-  " seems kde systems often have gnome-open due to dependencies, even though
-  " gnome-open's subsidiary display tools are largely absent.  Kde systems
-  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
-  if !exists("s:haskdeinit")
-   if has("unix")
-    let s:haskdeinit= system("ps -e") =~ 'kdeinit' 
-    if v:shell_error
-     let s:haskdeinit = 0
-    endif
+" ---------------------------------------------------------------------
+"  s:NetrwGetWord: it gets the directory/file named under the cursor {{{2
+fun! s:NetrwGetWord()
+"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
+  call s:UseBufWinVars()
+
+  " insure that w:netrw_liststyle is set up
+  if !exists("w:netrw_liststyle")
+   if exists("g:netrw_liststyle")
+    let w:netrw_liststyle= g:netrw_liststyle
    else
-    let s:haskdeinit= 0
+    let w:netrw_liststyle= s:THINLIST
    endif
-"   call Decho("setting s:haskdeinit=".s:haskdeinit)
+"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
   endif
 
-  if a:remote == 1
-   " create a local copy
-"   call Decho("a:remote=".a:remote.": create a local copy of <".a:fname.">")
-   setlocal bh=delete
-   call netrw#NetRead(3,a:fname)
-   " attempt to rename tempfile
-   let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
-   let newname= substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
-"   call Decho("basename<".basename.">")
-"   call Decho("newname <".newname.">")
-   if rename(s:netrw_tmpfile,newname) == 0
-    " renaming succeeded
-    let fname= newname
-   else
-    " renaming failed
-    let fname= s:netrw_tmpfile
+  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
+   " Active Banner support
+"   call Decho("active banner handling")
+   keepj norm! 0
+   let dirname= "./"
+   let curline= getline('.')
+
+   if curline =~ '"\s*Sorted by\s'
+    keepj norm s
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "s" also works'
+
+   elseif curline =~ '"\s*Sort sequence:'
+    let s:netrw_skipbrowse= 1
+    echo 'Press "S" to edit sorting sequence'
+
+   elseif curline =~ '"\s*Quick Help:'
+    keepj norm ?
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "?" also works'
+
+   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
+    keepj norm a
+    let s:netrw_skipbrowse= 1
+    echo 'Pressing "a" also works'
+
+   elseif line("$") > w:netrw_bannercnt
+    exe 'sil keepj '.w:netrw_bannercnt
    endif
+
+  elseif w:netrw_liststyle == s:THINLIST
+"   call Decho("thin column handling")
+   keepj norm! 0
+   let dirname= getline('.')
+
+  elseif w:netrw_liststyle == s:LONGLIST
+"   call Decho("long column handling")
+   keepj norm! 0
+   let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
+
+  elseif w:netrw_liststyle == s:TREELIST
+"   call Decho("treelist handling")
+   let dirname= substitute(getline('.'),'^\(| \)*','','e')
+
   else
-   let fname= a:fname
-   " special ~ handler for local
-   if fname =~ '^\~' && expand("$HOME") != ""
-"    call Decho('invoking special ~ handler')
-    let fname= substitute(fname,'^\~',expand("$HOME"),'')
+"   call Decho("obtain word from wide listing")
+   let dirname= getline('.')
+
+   if !exists("b:netrw_cpf")
+    let b:netrw_cpf= 0
+    exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+    call histdel("/",-1)
+"   call Decho("computed cpf=".b:netrw_cpf)
    endif
-  endif
-"  call Decho("fname<".fname.">")
-"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
 
-  " set up redirection
-  if &srr =~ "%s"
-   if (has("win32") || has("win95") || has("win64") || has("win16"))
-    let redir= substitute(&srr,"%s","nul","")
+"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
+   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
+"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
+"   call Decho("1: dirname<".dirname.">")
+   if filestart == 0
+    keepj norm! 0ma
    else
-    let redir= substitute(&srr,"%s","/dev/null","")
+    call cursor(line("."),filestart+1)
+    keepj norm! ma
    endif
-  elseif (has("win32") || has("win95") || has("win64") || has("win16"))
-   let redir= &srr . "nul"
-  else
-   let redir= &srr . "/dev/null"
-  endif
-"  call Decho("redir{".redir."} srr{".&srr."}")
-
-  " extract any viewing options.  Assumes that they're set apart by quotes.
-  if exists("g:netrw_browsex_viewer")
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-   if g:netrw_browsex_viewer =~ '\s'
-    let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
-    let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
-    let oviewer = ''
-    let cnt     = 1
-    while !executable(viewer) && viewer != oviewer
-     let viewer  = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','')
-     let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
-     let cnt     = cnt + 1
-     let oviewer = viewer
-"     call Decho("!exe: viewer<".viewer.">  viewopt<".viewopt.">")
-    endwhile
+   let rega= @a
+   let eofname= filestart + b:netrw_cpf + 1
+   if eofname <= col("$")
+    call cursor(line("."),filestart+b:netrw_cpf+1)
+    keepj norm! "ay`a
    else
-    let viewer  = g:netrw_browsex_viewer
-    let viewopt = ""
+    keepj norm! "ay$
    endif
-"   call Decho("viewer<".viewer.">  viewopt<".viewopt.">")
+   let dirname = @a
+   let @a      = rega
+"   call Decho("2: dirname<".dirname.">")
+   let dirname= substitute(dirname,'\s\+$','','e')
+"   call Decho("3: dirname<".dirname.">")
   endif
 
-  " execute the file handler
-  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-   let ret= netrwFileHandlers#Invoke(exten,fname)
+  " symlinks are indicated by a trailing "@".  Remove it before further processing.
+  let dirname= substitute(dirname,"@$","","")
 
-  elseif exists("g:netrw_browsex_viewer") && executable(viewer)
-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
-"   call Decho("exe silent !".viewer." ".viewopt.shellescape(fname,1).redir)
-   exe "silent !".viewer." ".viewopt.shellescape(fname,1).redir
-   let ret= v:shell_error
+  " executables are indicated by a trailing "*".  Remove it before further processing.
+  let dirname= substitute(dirname,"\*$","","")
+
+"  call Dret("s:NetrwGetWord <".dirname.">")
+  return dirname
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwListSettings: make standard settings for a netrw listing {{{2
+fun! s:NetrwListSettings(islocal)
+"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
+  let fname= bufname("%")
+"  call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro")
+  setl bt=nofile nobl ma nonu nowrap noro
+"  call Decho("(NetrwListSettings) exe sil! keepalt file ".fnameescape(fname))
+  exe "sil! keepalt file ".fnameescape(fname)
+  if g:netrw_use_noswf
+   setl noswf
+  endif
+"  call Decho("(NetrwListSettings) exe setl ts=".(g:netrw_maxfilenamelen+1))
+  exe "setl ts=".(g:netrw_maxfilenamelen+1)
+  setl isk+=.,~,-
+  if g:netrw_fastbrowse > a:islocal
+   setl bh=hide
+  else
+   setl bh=delete
+  endif
+"  call Dret("s:NetrwListSettings")
+endfun
+
+" ---------------------------------------------------------------------
+"  s:NetrwListStyle: {{{2
+"  islocal=0: remote browsing
+"         =1: local browsing
+fun! s:NetrwListStyle(islocal)
+"  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
+  let ykeep             = @@
+  let fname             = s:NetrwGetWord()
+  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
+"  call Decho("fname<".fname.">")
+"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
+"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
 
-  elseif has("win32") || has("win64")
-   if executable("start")
-"    call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
-    exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
-   elseif executable("rundll32")
-"    call Decho('exe silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
-    exe 'silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
-   else
-    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
-   endif
-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   let ret= v:shell_error
+  if w:netrw_liststyle == s:THINLIST
+   " use one column listing
+"   call Decho("use one column list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
 
-  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
-"   call Decho("exe silent !gnome-open ".shellescape(fname,1)." ".redir)
-   exe "sil !gnome-open ".shellescape(fname,1).redir
-   let ret= v:shell_error
+  elseif w:netrw_liststyle == s:LONGLIST
+   " use long list
+"   call Decho("use long list")
+   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
 
-  elseif has("unix") && executable("kfmclient") && s:haskdeinit
-"   call Decho("exe silent !kfmclient exec ".shellescape(fname,1)." ".redir)
-   exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir
-   let ret= v:shell_error
+  elseif w:netrw_liststyle == s:WIDELIST
+   " give wide list
+"   call Decho("use wide list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
 
-  elseif has("macunix") && executable("open")
-"   call Decho("exe silent !open ".shellescape(fname,1)." ".redir)
-   exe "sil !open ".shellescape(fname,1)." ".redir
-   let ret= v:shell_error
+  elseif w:netrw_liststyle == s:TREELIST
+"   call Decho("use tree list")
+   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
 
   else
-   " netrwFileHandlers#Invoke() always returns 0
-   let ret= netrwFileHandlers#Invoke(exten,fname)
-  endif
-
-  " if unsuccessful, attempt netrwFileHandlers#Invoke()
-  if ret
-   let ret= netrwFileHandlers#Invoke(exten,fname)
+   keepj call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
+   let g:netrw_liststyle = s:THINLIST
+   let w:netrw_liststyle = g:netrw_liststyle
+   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
   endif
+  setl ma noro
+"  call Decho("setl ma noro")
 
-  " restoring redraw! after external file handlers
-  redraw!
+  " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
+"  call Decho("clear buffer<".expand("%")."> with :%d")
+  sil! keepj %d
+  " following prevents tree listing buffer from being marked "modified"
+"  call Decho("(NetrwListStyle) setl nomod")
+  setl nomod
+"  call Decho("(NetrwListStyle) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 
-  " cleanup: remove temporary file,
-  "          delete current buffer if success with handler,
-  "          return to prior buffer (directory listing)
-  "          Feb 12, 2008: had to de-activiate removal of
-  "          temporary file because it wasn't getting seen.
-"  if a:remote == 1 && fname != a:fname
-"   call Decho("deleting temporary file<".fname.">")
-"   call s:NetrwDelete(fname)
-"  endif
+  " refresh the listing
+"  call Decho("(NetrwListStyle) refresh the listing")
+  let svpos= netrw#NetrwSavePosn()
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwCursor()
 
-  if a:remote == 1
-   setlocal bh=delete bt=nofile
-   if g:netrw_use_noswf
-    setlocal noswf
-   endif
-   exe "keepj norm! \<c-o>"
-"   redraw!
+  " keep cursor on the filename
+  sil! keepj $
+  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
+"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
+  if result <= 0 && exists("w:netrw_bannercnt")
+   exe "sil! keepj ".w:netrw_bannercnt
   endif
+  let @@= ykeep
 
-"  call Dret("NetrwBrowseX")
+"  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwChgPerm: (implements "gp") change file permission {{{2
-fun! s:NetrwChgPerm(islocal,curdir)
-"  call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)")
-  call inputsave()
-  let newperm= input("Enter new permission: ")
-  call inputrestore()
-  let chgperm= substitute(g:netrw_chgperm,'\<FILENAME\>',shellescape(expand("<cfile>")),'')
-  let chgperm= substitute(chgperm,'\<PERM\>',shellescape(newperm),'')
-"  call Decho("chgperm<".chgperm.">")
-  call system(chgperm)
-  if v:shell_error != 0
-   call netrw#ErrorMsg(1,"changing permission on file<".expand("<cfile>")."> seems to have failed",75)
-  endif
-  if a:islocal
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  endif
-"  call Dret("s:NetrwChgPerm")
-endfun
+" s:NetrwBannerCtrl: toggles the display of the banner {{{2
+fun! s:NetrwBannerCtrl(islocal)
+"  call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner)
 
-" ---------------------------------------------------------------------
-" s:NetrwClearExplore: clear explore variables (if any) {{{2
-fun! s:NetrwClearExplore()
-"  call Dfunc("s:NetrwClearExplore()")
-  2match none
-  if exists("s:explore_match")        |unlet s:explore_match        |endif
-  if exists("s:explore_indx")         |unlet s:explore_indx         |endif
-  if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif
-  if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
-  if exists("s:explore_prvdir")       |unlet s:explore_prvdir       |endif
-  if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
-  if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
-  if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
-  if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
-"   redraw!
-  echo " "
-  echo " "
-"  call Dret("s:NetrwClearExplore")
+  let ykeep= @@
+  " toggle the banner (enable/suppress)
+  let g:netrw_banner= !g:netrw_banner
+
+  " refresh the listing
+  let svpos= netrw#NetrwSavePosn()
+  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+
+  " keep cursor on the filename
+  let fname= s:NetrwGetWord()
+  sil keepj $
+  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
+"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
+  if result <= 0 && exists("w:netrw_bannercnt")
+   exe "keepj ".w:netrw_bannercnt
+  endif
+  let @@= ykeep
+"  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
 endfun
 
 " ---------------------------------------------------------------------
-" netrw#Explore: launch the local browser in the directory of the current file {{{2
-"          indx:  == -1: Nexplore
-"                 == -2: Pexplore
-"                 ==  +: this is overloaded:
-"                      * If Nexplore/Pexplore is in use, then this refers to the
-"                        indx'th item in the w:netrw_explore_list[] of items which
-"                        matched the */pattern **/pattern *//pattern **//pattern
-"                      * If Hexplore or Vexplore, then this will override
-"                        g:netrw_winsize to specify the qty of rows or columns the
-"                        newly split window should have.
-"          dosplit==0: the window will be split iff the current file has been modified
-"          dosplit==1: the window will be split before running the local browser
-"          style == 0: Explore     style == 1: Explore!
-"                == 2: Hexplore    style == 3: Hexplore!
-"                == 4: Vexplore    style == 5: Vexplore!
-"                == 6: Texplore
-fun! netrw#Explore(indx,dosplit,style,...)
-"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0)
-  if !exists("b:netrw_curdir")
-   let b:netrw_curdir= getcwd()
-"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
+" s:NetrwBookmarkMenu: Uses menu priorities {{{2
+"                      .2.[cnt] for bookmarks, and
+"                      .3.[cnt] for history
+"                      (see s:NetrwMenu())
+fun! s:NetrwBookmarkMenu()
+  if !exists("s:netrw_menucnt")
+   return
   endif
-  let curdir     = simplify(b:netrw_curdir)
-  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
-"  call Decho("curdir<".curdir.">  curfiledir<".curfiledir.">")
-
-  " save registers
-  sil! let keepregstar = @*
-  sil! let keepregplus = @+
-  sil! let keepregslash= @/
+"  call Dfunc("NetrwBookmarkMenu()  histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt)
 
-  " if dosplit or file has been modified
-  if a:dosplit || &modified || a:style == 6
-"   call Decho("case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified")
-   call s:SaveWinVars()
-   let winsize= g:netrw_winsize
-   if a:indx > 0
-    let winsize= a:indx
+  " the following test assures that gvim is running, has menus available, and has menus enabled.
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+   if exists("g:NetrwTopLvlMenu")
+"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
+   endif
+   if !exists("s:netrw_initbookhist")
+    call s:NetrwBookHistRead()
    endif
 
-   if a:style == 0      " Explore, Sexplore
-"    call Decho("style=0: Explore or Sexplore")
-    exe winsize."wincmd s"
+   " show bookmarked places
+   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+     let ebmd= escape(bmd,g:netrw_menu_escape)
+"     call Decho('sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.ebmd.'	:e '.bmd)
 
-   elseif a:style == 1  "Explore!, Sexplore!
-"    call Decho("style=1: Explore! or Sexplore!")
-    exe winsize."wincmd v"
+     " show bookmarks for goto menu
+     exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.ebmd.'	:e '.bmd."\<cr>"
 
-   elseif a:style == 2  " Hexplore
-"    call Decho("style=2: Hexplore")
-    exe "bel ".winsize."wincmd s"
+     " show bookmarks for deletion menu
+     exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.ebmd.'	'.cnt."mB"
+     let cnt= cnt + 1
+    endfor
 
-   elseif a:style == 3  " Hexplore!
-"    call Decho("style=3: Hexplore!")
-    exe "abo ".winsize."wincmd s"
+   endif
 
-   elseif a:style == 4  " Vexplore
-"    call Decho("style=4: Vexplore")
-    exe "lefta ".winsize."wincmd v"
+   " show directory browsing history
+   if g:netrw_dirhistmax > 0
+    let cnt     = g:netrw_dirhist_cnt
+    let first   = 1
+    let histcnt = 0
+    while ( first || cnt != g:netrw_dirhist_cnt )
+     let histcnt  = histcnt + 1
+     let priority = g:netrw_dirhist_cnt + histcnt
+     if exists("g:netrw_dirhist_{cnt}")
+      let histdir= escape(g:netrw_dirhist_{cnt},g:netrw_menu_escape)
+"     call Decho('sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir)
+      exe 'sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir."\<cr>"
+     endif
+     let first = 0
+     let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+     if cnt < 0
+      let cnt= cnt + g:netrw_dirhistmax
+     endif
+    endwhile
+   endif
 
-   elseif a:style == 5  " Vexplore!
-"    call Decho("style=5: Vexplore!")
-    exe "rightb ".winsize."wincmd v"
+  endif
+"  call Dret("NetrwBookmarkMenu")
+endfun
 
-   elseif a:style == 6  " Texplore
-    call s:SaveBufVars()
-"    call Decho("style  = 6: Texplore")
-    tabnew
-    call s:RestoreBufVars()
-   endif
-   call s:RestoreWinVars()
-"  else " Decho
-"   call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
+" ---------------------------------------------------------------------
+"  s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2
+"                       directory and a new directory name.  Also, if the
+"                       "new directory name" is actually a file,
+"                       NetrwBrowseChgDir() edits the file.
+fun! s:NetrwBrowseChgDir(islocal,newdir,...)
+"  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
+
+  let ykeep= @@
+  if !exists("b:netrw_curdir")
+   " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
+   " and the current window is the NetrwMessage window.
+   let @@= ykeep
+"   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
+"   call Decho("(NetrwBrowseChgDir) getcwd<".getcwd().">")
+"   call Dret("s:NetrwBrowseChgDir")
+   return
   endif
-  keepj norm! 0
 
-  if a:0 > 0
-"   call Decho("case [a:0=".a:0."] > 0: a:1<".a:1.">")
-   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
-"    call Decho("case a:1: ~ and unix or cygwin")
-    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
-"    call Decho("using dirname<".dirname.">  (case: ~ && unix||cygwin)")
-   elseif a:1 == '.'
-"    call Decho("case a:1: .")
-    let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
-    if dirname !~ '/$'
-     let dirname= dirname."/"
-    endif
-"    call Decho("using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
-   elseif a:1 =~ '\$'
-"    call Decho("case a:1: $")
-    let dirname= simplify(expand(a:1))
-"    call Decho("using user-specified dirname<".dirname."> with $env-var")
-   elseif a:1 !~ '^\*/'
-"    call Decho("case a:1: other, not pattern or filepattern")
-    let dirname= simplify(a:1)
-"    call Decho("using user-specified dirname<".dirname.">")
-   else
-"    call Decho("case a:1: pattern or filepattern")
-    let dirname= a:1
-   endif
+  " NetrwBrowseChgDir: save options and initialize {{{3
+  keepj call s:NetrwOptionSave("s:")
+  keepj call s:NetrwSafeOptions()
+  let nbcd_curpos                = netrw#NetrwSavePosn()
+  let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
+"  call Decho("(NetrwBrowseChgDir) setting s:nbcd_curpos_".bufnr('%')." to SavePosn")
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+   let dirname                   = substitute(b:netrw_curdir,'\\','/','ge')
   else
-   " clear explore
-"   call Decho("case a:0=".a:0.": clearing Explore list")
-   call s:NetrwClearExplore()
-"   call Dret("netrw#Explore : cleared list")
-   return
+   let dirname= b:netrw_curdir
+  endif
+  let newdir    = a:newdir
+  let dolockout = 0
+
+  " set up o/s-dependent directory recognition pattern
+  if has("amiga")
+   let dirpat= '[\/:]$'
+  else
+   let dirpat= '[\/]$'
+  endif
+"  call Decho("(NetrwBrowseChgDir) dirname<".dirname.">  dirpat<".dirpat.">")
+
+  if dirname !~ dirpat
+   " apparently vim is "recognizing" that it is in a directory and
+   " is removing the trailing "/".  Bad idea, so let's put it back.
+   let dirname= dirname.'/'
+"   call Decho("(NetrwBrowseChgDir) adjusting dirname<".dirname.">")
   endif
 
-"  call Decho("dirname<".dirname.">")
-  if dirname =~ '\.\./\=$'
-   let dirname= simplify(fnamemodify(dirname,':p:h'))
-  elseif dirname =~ '\.\.' || dirname == '.'
-   let dirname= simplify(fnamemodify(dirname,':p'))
-  endif
-"  call Decho("dirname<".dirname.">  (after simplify)")
+  if newdir !~ dirpat
+   " ------------------------------
+   " NetrwBrowseChgDir: edit a file {{{3
+   " ------------------------------
+"   call Decho('(NetrwBrowseChgDir:edit-a-file) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
 
-  if dirname =~ '/\*\*/'
-   " handle .../**/.../filepat
-"   call Decho("case Explore .../**/.../filepat")
-   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
-   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
-    let b:netrw_curdir = prefixdir
+   " save position for benefit of Rexplore
+   let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn()
+
+"   call Decho("(NetrwBrowseChgDir:edit-a-file) setting s:rexposn_".bufnr("%")." to SavePosn")
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
+    let dirname= s:NetrwTreeDir()
+    if dirname =~ '/$'
+     let dirname= dirname.newdir
+    else
+     let dirname= s:NetrwTreeDir()."/".newdir
+    endif
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) dirname<".dirname.">")
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) tree listing")
+   elseif newdir =~ '^\(/\|\a:\)'
+    let dirname= newdir
    else
-    let b:netrw_curdir= getcwd().'/'.prefixdir
+    let dirname= s:ComposePath(dirname,newdir)
    endif
-   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
-   let starpat= 4;
-"   call Decho("pwd<".getcwd()."> dirname<".dirname.">")
-"   call Decho("case Explore ../**/../filepat (starpat=".starpat.")")
+"   call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file: dirname<".dirname."> (a:0=".a:0.")")
+   " this lets NetrwBrowseX avoid the edit
+   if a:0 < 1
+"    call Decho("(NetrwBrowseChgDir:edit-a-file) set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
+    keepj call s:NetrwOptionRestore("s:")
+    if !exists("s:didsplit")
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr())
+     if     g:netrw_browse_split == 1
+      " horizontally splitting the window first
+      keepalt new
+      if !&ea
+       keepalt wincmd _
+      endif
+     elseif g:netrw_browse_split == 2
+      " vertically splitting the window first
+      keepalt rightb vert new
+      if !&ea
+       keepalt wincmd |
+      endif
+     elseif g:netrw_browse_split == 3
+      " open file in new tab
+      keepalt tabnew
+     elseif g:netrw_browse_split == 4
+      " act like "P" (ie. open previous window)
+      if s:NetrwPrevWinOpen(2) == 3
+       let @@= ykeep
+"       call Dret("s:NetrwBrowseChgDir")
+       return
+      endif
+     else
+      " handling a file, didn't split, so remove menu
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file+didn't split, so remove menu")
+      call s:NetrwMenu(0)
+      " optional change to window
+      if g:netrw_chgwin >= 1
+       exe "keepj keepalt ".g:netrw_chgwin."wincmd w"
+      endif
+     endif
+    endif
 
-  elseif dirname =~ '^\*//'
-   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
-"   call Decho("case Explore *//pattern")
-   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
-   let starpat= 1
-"   call Decho("Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
-   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+    " the point where netrw actually edits the (local) file
+    " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
+    if a:islocal
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) edit local file: exe e! ".fnameescape(dirname))
+     exe "keepj keepalt e! ".fnameescape(dirname)
+     call s:NetrwCursor()
+    else
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) remote file: NetrwBrowse will edit it")
+    endif
+    let dolockout= 1
 
-  elseif dirname =~ '^\*\*//'
-   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
-"   call Decho("case Explore **//pattern")
-   let pattern= substitute(dirname,'^\*\*//','','')
-   let starpat= 2
-"   call Decho("Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+    " handle g:Netrw_funcref -- call external-to-netrw functions
+    "   This code will handle g:Netrw_funcref as an individual function reference
+    "   or as a list of function references.  It will ignore anything that's not
+    "   a function reference.  See  :help Funcref  for information about function references.
+    if exists("g:Netrw_funcref")
+"     call Decho("(NetrwBrowseChgDir:edit-a-file) handle optional Funcrefs")
+     if type(g:Netrw_funcref) == 2
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a g:Netrw_funcref")
+      keepj call g:Netrw_funcref()
+     elseif type(g:Netrw_funcref) == 3
+"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a list of g:Netrw_funcrefs")
+      for Fncref in g:Netrw_funcref
+       if type(FncRef) == 2
+        keepj call FncRef()
+       endif
+      endfor
+     endif
+    endif
+   endif
 
-  elseif dirname =~ '^\*/'
-   " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-   let starpat= 3
-"   call Decho("case Explore */filepat (starpat=".starpat.")")
+  elseif newdir =~ '^/'
+   " ----------------------------------------------------
+   " NetrwBrowseChgDir: just go to the new directory spec {{{3
+   " ----------------------------------------------------
+"   call Decho('(NetrwBrowseChgDir:goto-newdir) case "just go to new directory spec": newdir<'.newdir.'>')
+   let dirname    = newdir
+   keepj call s:SetRexDir(a:islocal,dirname)
+   keepj call s:NetrwOptionRestore("s:")
 
-  elseif dirname=~ '^\*\*/'
-   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-   let starpat= 4
-"   call Decho("case Explore **/filepat (starpat=".starpat.")")
+  elseif newdir == './'
+   " ---------------------------------------------
+   " NetrwBrowseChgDir: refresh the directory list {{{3
+   " ---------------------------------------------
+"   call Decho('(NetrwBrowseChgDir:refresh-dirlist) case "refresh directory listing": newdir == "./"')
+   keepj call s:SetRexDir(a:islocal,dirname)
 
-  else
-   let starpat= 0
-"   call Decho("default case: starpat=".starpat)
-  endif
+  elseif newdir == '../'
+   " --------------------------------------
+   " NetrwBrowseChgDir: go up one directory {{{3
+   " --------------------------------------
+"   call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../"')
 
-  if starpat == 0 && a:indx >= 0
-   " [Explore Hexplore Vexplore Sexplore] [dirname]
-"   call Decho("case starpat==0 && a:indx=".a:indx.": dirname<".dirname."> Explore Hexplore Vexplore Sexplore")
-   if dirname == ""
-    let dirname= curfiledir
-"    call Decho("empty dirname, using current file's directory<".dirname.">")
+   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+    " force a refresh
+"    call Decho("(NetrwBrowseChgDir:go-up) clear buffer<".expand("%")."> with :%d")
+"    call Decho("(NetrwBrowseChgDir:go-up) setl noro ma")
+    setl noro ma
+    keepj %d
    endif
-   if dirname =~ '^scp:' || dirname =~ '^ftp:'
-"    call Decho("calling NetrwBrowse(0,dirname<".dirname.">)")
-    call s:NetrwBrowse(0,dirname)
+
+   if has("amiga")
+    " amiga
+"    call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and amiga')
+    if a:islocal
+     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
+     let dirname= substitute(dirname,'/$','','')
+    else
+     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
+    endif
+"    call Decho("(NetrwBrowseChgDir:go-up) amiga: dirname<".dirname."> (go up one dir)")
+
    else
-    if dirname == ""|let dirname= getcwd()|endif
-"    call Decho("calling LocalBrowseCheck(dirname<".dirname.">)")
-    call netrw#LocalBrowseCheck(dirname)
+    " unix or cygwin
+"    call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and unix or cygwin')
+    if a:islocal
+     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
+     if dirname == ""
+      let dirname= '/'
+     endif
+    else
+     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
+    endif
+"    call Decho("(NetrwBrowseChgDir:go-up) unix: dirname<".dirname."> (go up one dir)")
    endif
+   keepj call s:SetRexDir(a:islocal,dirname)
 
-"   call Decho("curdir<".curdir.">")
-   if has("win32") || has("win95") || has("win64") || has("win16")
-    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
-   else
-    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
+  elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+   " --------------------------------------
+   " NetrwBrowseChgDir: Handle Tree Listing {{{3
+   " --------------------------------------
+"   call Decho('(NetrwBrowseChgDir:tree-list) case liststyle is TREELIST and w:netrw_treedict exists')
+   " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
+"   call Decho("(NetrwBrowseChgDir) (treelist) setl noro ma")
+   setl noro ma
+   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
+"    call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d")
+    keepj %d
    endif
+   let treedir      = s:NetrwTreeDir()
+   let s:treecurpos = nbcd_curpos
+   let haskey= 0
+"   call Decho("(NetrwBrowseChgDir:tree-list) w:netrw_treedict<".string(w:netrw_treedict).">")
 
-  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
-  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
-  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-  elseif a:indx <= 0
-   " Nexplore, Pexplore, Explore: handle starpat
-"   call Decho("case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
-   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
-"    call Decho("set up <s-up> and <s-down> maps")
-    let s:didstarstar= 1
-    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
-    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+   " search treedict for tree dir as-is
+   if has_key(w:netrw_treedict,treedir)
+"    call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : found it!')
+    let haskey= 1
+   else
+"    call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found')
    endif
 
-   if has("path_extra")
-"    call Decho("starpat=".starpat.": has +path_extra")
-    if !exists("w:netrw_explore_indx")
-     let w:netrw_explore_indx= 0
+   " search treedict for treedir with a / appended
+   if !haskey && treedir !~ '/$'
+    if has_key(w:netrw_treedict,treedir."/")
+     let treedir= treedir."/"
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!')
+     let haskey = 1
+    else
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'/> : not found')
     endif
+   endif
 
-    let indx = a:indx
-"    call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]")
-
-    if indx == -1
-     " Nexplore
-"     call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")")
-     if !exists("w:netrw_explore_list") " sanity check
-      call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore")
-      return
-     endif
-     let indx= w:netrw_explore_indx
-     if indx < 0                        | let indx= 0                           | endif
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-     let curfile= w:netrw_explore_list[indx]
-"     call Decho("indx=".indx." curfile<".curfile.">")
-     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
-      let indx= indx + 1
-"      call Decho("indx=".indx." (Nexplore while loop)")
-     endwhile
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-"     call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
-    elseif indx == -2
-     " Pexplore
-"     call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")")
-     if !exists("w:netrw_explore_list") " sanity check
-      call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore")
-      return
-     endif
-     let indx= w:netrw_explore_indx
-     if indx < 0                        | let indx= 0                           | endif
-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
-     let curfile= w:netrw_explore_list[indx]
-"     call Decho("indx=".indx." curfile<".curfile.">")
-     while indx >= 0 && curfile == w:netrw_explore_list[indx]
-      let indx= indx - 1
-"      call Decho("indx=".indx." (Pexplore while loop)")
-     endwhile
-     if indx < 0                        | let indx= 0                           | endif
-"     call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
-
+   " search treedict for treedir with any trailing / elided
+   if !haskey && treedir =~ '/$'
+    let treedir= substitute(treedir,'/$','','')
+    if has_key(w:netrw_treedict,treedir)
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!')
+     let haskey = 1
     else
-     " Explore -- initialize
-     " build list of files to Explore with Nexplore/Pexplore
-"     call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")")
-     call s:NetrwClearExplore()
-     let w:netrw_explore_indx= 0
-     if !exists("b:netrw_curdir")
-      let b:netrw_curdir= getcwd()
-     endif
-"     call Decho("starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
-
-     " switch on starpat to build the w:netrw_explore_list of files
-     if starpat == 1
-      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
-"      call Decho("starpat=".starpat.": build *//pattern list")
-"      call Decho("pattern<".pattern.">")
-      try
-       exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
-      catch /^Vim\%((\a\+)\)\=:E480/
-       call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
-"       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
-       return
-      endtry
-      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
-      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-
-     elseif starpat == 2
-      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
-"      call Decho("starpat=".starpat.": build **//pattern list")
-      try
-       exe "sil keepj noautocmd vimgrep /".pattern."/gj "."**/*"
-      catch /^Vim\%((\a\+)\)\=:E480/
-       call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
-       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
-       silent! let @* = keepregstar
-       silent! let @+ = keepregstar
-       silent! let @/ = keepregslash
-"       call Dret("netrw#Explore : no files matched pattern")
-       return
-      endtry
-      let s:netrw_curdir       = b:netrw_curdir
-      let w:netrw_explore_list = getqflist()
-      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
-
-     elseif starpat == 3
-      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
-"      call Decho("starpat=".starpat.": build */filepat list")
-      let filepat= substitute(dirname,'^\*/','','')
-      let filepat= substitute(filepat,'^[%#<]','\\&','')
-"      call Decho("b:netrw_curdir<".b:netrw_curdir.">")
-"      call Decho("filepat<".filepat.">")
-      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
-      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
+"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found')
+    endif
+   endif
 
-     elseif starpat == 4
-      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
-"      call Decho("starpat=".starpat.": build **/filepat list")
-      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
-      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
-     endif " switch on starpat to build w:netrw_explore_list
+   if haskey
+    " close tree listing for selected subdirectory
+"    call Decho("(NetrwBrowseChgDir:tree-list) closing selected subdirectory<".dirname.">")
+    call remove(w:netrw_treedict,treedir)
+"    call Decho("(NetrwBrowseChgDir) removed     entry<".treedir."> from treedict")
+"    call Decho("(NetrwBrowseChgDir) yielding treedict<".string(w:netrw_treedict).">")
+    let dirname= w:netrw_treetop
+   else
+    " go down one directory
+    let dirname= substitute(treedir,'/*$','/','')
+"    call Decho("(NetrwBrowseChgDir:tree-list) go down one dir: treedir<".treedir.">")
+   endif
+   keepj call s:SetRexDir(a:islocal,dirname)
+   let s:treeforceredraw = 1
 
-     let w:netrw_explore_listlen = len(w:netrw_explore_list)
-"     call Decho("w:netrw_explore_list<".string(w:netrw_explore_list).">")
-"     call Decho("w:netrw_explore_listlen=".w:netrw_explore_listlen)
+  else
+   " ----------------------------------------
+   " NetrwBrowseChgDir: Go down one directory {{{3
+   " ----------------------------------------
+   let dirname    = s:ComposePath(dirname,newdir)
+"   call Decho("(NetrwBrowseChgDir:go-down) go down one dir: dirname<".dirname."> newdir<".newdir.">")
+   keepj call s:SetRexDir(a:islocal,dirname)
+  endif
 
-     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
-      call netrw#ErrorMsg(s:WARNING,"no files matched",42)
-      sil! let @* = keepregstar
-      sil! let @+ = keepregstar
-      sil! let @/ = keepregslash
-"      call Dret("netrw#Explore : no files matched")
-      return
-     endif
-    endif  " if indx ... endif
+ " --------------------------------------
+ " NetrwBrowseChgDir: Restore and Cleanup {{{3
+ " --------------------------------------
+  keepj call s:NetrwOptionRestore("s:")
+  if dolockout
+"   call Decho("(NetrwBrowseChgDir:restore) filewritable(dirname<".dirname.">)=".filewritable(dirname))
+   if filewritable(dirname)
+"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod noro")
+"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
+    setl ma nomod noro
+"    call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+   else
+"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod ro")
+"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
+    setl ma nomod ro
+"    call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+   endif
+  endif
+  let @@= ykeep
 
-    " NetrwStatusLine support - for exploring support
-    let w:netrw_explore_indx= indx
-"    call Decho("w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
+"  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
+  return dirname
+endfun
 
-    " wrap the indx around, but issue a note
-    if indx >= w:netrw_explore_listlen || indx < 0
-"     call Decho("wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
-     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
-     let w:netrw_explore_indx= indx
-     call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
-    endif
+" ---------------------------------------------------------------------
+" s:NetrwBrowseX:  (implements "x") executes a special "viewer" script or program for the {{{2
+"              given filename; typically this means given their extension.
+"              0=local, 1=remote
+fun! netrw#NetrwBrowseX(fname,remote)
+"  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
 
-    exe "let dirfile= w:netrw_explore_list[".indx."]"
-"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
-    let newdir= substitute(dirfile,'/[^/]*$','','e')
-"    call Decho("newdir<".newdir.">")
+  let ykeep      = @@
+  let screenposn = netrw#NetrwSavePosn()
 
-"    call Decho("calling LocalBrowseCheck(newdir<".newdir.">)")
-    call netrw#LocalBrowseCheck(newdir)
-    if !exists("w:netrw_liststyle")
-     let w:netrw_liststyle= g:netrw_liststyle
-    endif
-    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
-     keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
-    else
-     keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
+  " special core dump handler
+  if a:fname =~ '/core\(\.\d\+\)\=$'
+   if exists("g:Netrw_corehandler")
+    if type(g:Netrw_corehandler) == 2
+     " g:Netrw_corehandler is a function reference (see :help Funcref)
+"     call Decho("g:Netrw_corehandler is a funcref")
+     call g:Netrw_corehandler(a:fname)
+    elseif type(g:Netrw_corehandler) == 3
+     " g:Netrw_corehandler is a List of function references (see :help Funcref)
+"     call Decho("g:Netrw_corehandler is a List")
+     for Fncref in g:Netrw_corehandler
+      if type(FncRef) == 2
+       call FncRef(a:fname)
+      endif
+     endfor
     endif
-    let w:netrw_explore_mtchcnt = indx + 1
-    let w:netrw_explore_bufnr   = bufnr("%")
-    let w:netrw_explore_line    = line(".")
-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
-"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
+    call netrw#NetrwRestorePosn(screenposn)
+    let @@= ykeep
+"    call Dret("NetrwBrowseX : coredump handler invoked")
+    return
+   endif
+  endif
 
-   else
-"    call Decho("your vim does not have +path_extra")
-    if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
+  " set up the filename
+  " (lower case the extension, make a local copy of a remote file)
+  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   let exten= substitute(exten,'^.*$','\L&\E','')
+  endif
+"  call Decho("exten<".exten.">")
+
+  " seems kde systems often have gnome-open due to dependencies, even though
+  " gnome-open's subsidiary display tools are largely absent.  Kde systems
+  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
+  if !exists("s:haskdeinit")
+   if has("unix") && executable("ps") && !has("win32unix")
+    let s:haskdeinit= system("ps -e") =~ 'kdeinit' 
+    if v:shell_error
+     let s:haskdeinit = 0
     endif
-    sil! let @* = keepregstar
-    sil! let @+ = keepregstar
-    sil! let @/ = keepregslash
-"    call Dret("netrw#Explore : missing +path_extra")
-    return
+   else
+    let s:haskdeinit= 0
    endif
+"   call Decho("setting s:haskdeinit=".s:haskdeinit)
+  endif
 
+  if a:remote == 1
+   " create a local copy
+"   call Decho("(remote) a:remote=".a:remote.": create a local copy of <".a:fname.">")
+   setl bh=delete
+   call netrw#NetRead(3,a:fname)
+   " attempt to rename tempfile
+   let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
+   let newname = substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
+"   call Decho("basename<".basename.">")
+"   call Decho("newname <".newname.">")
+   if rename(s:netrw_tmpfile,newname) == 0
+    " renaming succeeded
+    let fname= newname
+   else
+    " renaming failed
+    let fname= s:netrw_tmpfile
+   endif
   else
-"   call Decho("default case: Explore newdir<".dirname.">")
-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
-    sil! unlet w:netrw_treedict
-    sil! unlet w:netrw_treetop
+"   call Decho("(local) a:remote=".a:remote.": handling local copy of <".a:fname.">")
+   let fname= a:fname
+   " special ~ handler for local
+   if fname =~ '^\~' && expand("$HOME") != ""
+"    call Decho('invoking special ~ handler')
+    let fname= substitute(fname,'^\~',expand("$HOME"),'')
    endif
-   let newdir= dirname
-   if !exists("b:netrw_curdir")
-    call netrw#LocalBrowseCheck(getcwd())
+  endif
+"  call Decho("fname<".fname.">")
+"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
+
+  " set up redirection
+  if &srr =~ "%s"
+   if (has("win32") || has("win95") || has("win64") || has("win16"))
+    let redir= substitute(&srr,"%s","nul","")
    else
-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
+    let redir= substitute(&srr,"%s","/dev/null","")
    endif
+  elseif (has("win32") || has("win95") || has("win64") || has("win16"))
+   let redir= &srr . "nul"
+  else
+   let redir= &srr . "/dev/null"
   endif
+"  call Decho("set up redirection: redir{".redir."} srr{".&srr."}")
 
-  " visual display of **/ **// */ Exploration files
-"  call Decho("w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
-"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
-  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
-"   call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
-   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
-    " only update match list if current directory isn't the same as before
-"    call Decho("only update match list if current directory not the same as before")
-    let s:explore_prvdir = b:netrw_curdir
-    let s:explore_match  = ""
-    let dirlen           = s:Strlen(b:netrw_curdir)
-    if b:netrw_curdir !~ '/$'
-     let dirlen= dirlen + 1
-    endif
-    let prvfname= ""
-    for fname in w:netrw_explore_list
-"     call Decho("fname<".fname.">")
-     if fname =~ '^'.b:netrw_curdir
-      if s:explore_match == ""
-       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
-      else
-       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
-      endif
-     elseif fname !~ '^/' && fname != prvfname
-      if s:explore_match == ""
-       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
-      else
-       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
-      endif
-     endif
-     let prvfname= fname
-    endfor
-"    call Decho("explore_match<".s:explore_match.">")
-    exe "2match netrwMarkFile /".s:explore_match."/"
+  " extract any viewing options.  Assumes that they're set apart by quotes.
+"  call Decho("extract any viewing options")
+  if exists("g:netrw_browsex_viewer")
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+   if g:netrw_browsex_viewer =~ '\s'
+    let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
+    let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
+    let oviewer = ''
+    let cnt     = 1
+    while !executable(viewer) && viewer != oviewer
+     let viewer  = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','')
+     let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
+     let cnt     = cnt + 1
+     let oviewer = viewer
+"     call Decho("!exe: viewer<".viewer.">  viewopt<".viewopt.">")
+    endwhile
+   else
+    let viewer  = g:netrw_browsex_viewer
+    let viewopt = ""
    endif
-   echo "<s-up>==Pexplore  <s-down>==Nexplore"
+"   call Decho("viewer<".viewer.">  viewopt<".viewopt.">")
+  endif
+
+  " execute the file handler
+"  call Decho("execute the file handler (if any)")
+  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+
+  elseif exists("g:netrw_browsex_viewer") && executable(viewer)
+"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+"   call Decho("exe sil !".viewer." ".viewopt.shellescape(fname,1).redir)
+   exe "sil !".viewer." ".viewopt.shellescape(fname,1).redir
+   let ret= v:shell_error
+
+  elseif has("win32") || has("win64")
+"   call Decho("windows")
+   if executable("start")
+"    call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+    exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+   elseif executable("rundll32")
+"    call Decho('exe sil !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+    exe 'sil !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+   else
+    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
+   endif
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   let ret= v:shell_error
+
+  elseif has("win32unix")
+   let winfname= 'c:\cygwin'.substitute(fname,'/','\\','g')
+"   call Decho("cygwin: winfname<".shellescape(winfname,1).">")
+   if executable("start")
+"    call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1))
+    exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1)
+   elseif executable("rundll32")
+"    call Decho('exe sil !rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1))
+    exe 'sil !rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1)
+   else
+    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
+   endif
+   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+   let ret= v:shell_error
+
+  elseif has("unix") && executable("xdg-open") && !s:haskdeinit
+"   call Decho("unix and xdg-open")
+"   call Decho("exe sil !xdg-open ".shellescape(fname,1)." ".redir)
+   exe "sil !xdg-open ".shellescape(fname,1).redir
+   let ret= v:shell_error
+
+  elseif has("unix") && executable("kfmclient") && s:haskdeinit
+"   call Decho("unix and kfmclient")
+"   call Decho("exe sil !kfmclient exec ".shellescape(fname,1)." ".redir)
+   exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir
+   let ret= v:shell_error
+
+  elseif has("macunix") && executable("open")
+"   call Decho("macunix and open")
+"   call Decho("exe sil !open ".shellescape(fname,1)." ".redir)
+   exe "sil !open ".shellescape(fname,1)." ".redir
+   let ret= v:shell_error
+
   else
-   2match none
-   if exists("s:explore_match")  | unlet s:explore_match  | endif
-   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
-   echo " "
-"   call Decho("cleared explore match list")
+   " netrwFileHandlers#Invoke() always returns 0
+   let ret= netrwFileHandlers#Invoke(exten,fname)
   endif
 
-  sil! let @* = keepregstar
-  sil! let @+ = keepregstar
-  sil! let @/ = keepregslash
-"  call Dret("netrw#Explore : @/<".@/.">")
+  " if unsuccessful, attempt netrwFileHandlers#Invoke()
+  if ret
+   let ret= netrwFileHandlers#Invoke(exten,fname)
+  endif
+
+  " restoring redraw! after external file handlers
+  redraw!
+
+  " cleanup: remove temporary file,
+  "          delete current buffer if success with handler,
+  "          return to prior buffer (directory listing)
+  "          Feb 12, 2008: had to de-activiate removal of
+  "          temporary file because it wasn't getting seen.
+"  if a:remote == 1 && fname != a:fname
+""   call Decho("deleting temporary file<".fname.">")
+"   call s:NetrwDelete(fname)
+"  endif
+
+  if a:remote == 1
+   setl bh=delete bt=nofile
+   if g:netrw_use_noswf
+    setl noswf
+   endif
+   exe "sil! keepj norm! \<c-o>"
+"   redraw!
+  endif
+  call netrw#NetrwRestorePosn(screenposn)
+  let @@= ykeep
+
+"  call Dret("NetrwBrowseX")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwChgPerm: (implements "gp") change file permission {{{2
+fun! s:NetrwChgPerm(islocal,curdir)
+"  call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)")
+  let ykeep  = @@
+  call inputsave()
+  let newperm= input("Enter new permission: ")
+  call inputrestore()
+  let chgperm= substitute(g:netrw_chgperm,'\<FILENAME\>',shellescape(expand("<cfile>")),'')
+  let chgperm= substitute(chgperm,'\<PERM\>',shellescape(newperm),'')
+"  call Decho("chgperm<".chgperm.">")
+  call system(chgperm)
+  if v:shell_error != 0
+   keepj call netrw#ErrorMsg(1,"changing permission on file<".expand("<cfile>")."> seems to have failed",75)
+  endif
+  if a:islocal
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  endif
+  let @@= ykeep
+"  call Dret("s:NetrwChgPerm")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwClearExplore: clear explore variables (if any) {{{2
+fun! s:NetrwClearExplore()
+"  call Dfunc("s:NetrwClearExplore()")
+  2match none
+  if exists("s:explore_match")        |unlet s:explore_match        |endif
+  if exists("s:explore_indx")         |unlet s:explore_indx         |endif
+  if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif
+  if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
+  if exists("s:explore_prvdir")       |unlet s:explore_prvdir       |endif
+  if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
+  if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
+  if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
+  if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
+"   redraw!
+  echo " "
+  echo " "
+"  call Dret("s:NetrwClearExplore")
 endfun
 
 " ---------------------------------------------------------------------
 " s:NetrwExploreListUniq: {{{2
 fun! s:NetrwExploreListUniq(explist)
-"  call Dfunc("s:NetrwExploreListUniq(explist)")
+"  call Dfunc("s:NetrwExploreListUniq(explist<".string(a:explist).">)")
 
   " this assumes that the list is already sorted
   let newexplist= []
@@ -3939,11 +4845,53 @@
    endif
   endfor
 
-"  call Dret("s:NetrwExploreListUniq")
+"  call Dret("s:NetrwExploreListUniq newexplist<".string(newexplist).">")
   return newexplist
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwForceChgDir: (gd support) Force treatment as a directory {{{2
+fun! s:NetrwForceChgDir(islocal,newdir)
+"  call Dfunc("s:NetrwForceChgDir(islocal=".a:islocal." newdir<".a:newdir.">)")
+  let ykeep= @@
+  if a:newdir !~ '/$'
+   " ok, looks like force is needed to get directory-style treatment
+   if a:newdir =~ '@$'
+    let newdir= substitute(a:newdir,'@$','/','')
+   elseif a:newdir =~ '[*=|\\]$'
+    let newdir= substitute(a:newdir,'.$','/','')
+   else
+    let newdir= a:newdir.'/'
+   endif
+"   call Decho("adjusting newdir<".newdir."> due to gd")
+  else
+   " should already be getting treatment as a directory
+   let newdir= a:newdir
+  endif
+  let newdir= s:NetrwBrowseChgDir(a:islocal,newdir)
+  call s:NetrwBrowse(a:islocal,newdir)
+  let @@= ykeep
+"  call Dret("s:NetrwForceChgDir")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwForceFile: (gf support) Force treatment as a file {{{2
+fun! s:NetrwForceFile(islocal,newfile)
+"  call Dfunc("s:NetrwForceFile(islocal=".a:islocal." newdir<".a:newfile.">)")
+  if a:newfile =~ '[/@*=|\\]$'
+   let newfile= substitute(a:newfile,'.$','','')
+  else
+   let newfile= a:newfile
+  endif
+  if a:islocal
+   call s:NetrwBrowseChgDir(a:islocal,newfile)
+  else
+   call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,newfile))
+  endif
+"  call Dret("s:NetrwForceFile")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwHide: this function is invoked by the "a" map for browsing {{{2
 "          and switches the hiding mode.  The actual hiding is done by
 "          s:NetrwListHide().
@@ -3952,6 +4900,7 @@
 "                           2: show hidden files only
 fun! s:NetrwHide(islocal)
 "  call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide)
+  let ykeep= @@
   let svpos= netrw#NetrwSavePosn()
 
   if exists("s:netrwmarkfilelist_{bufnr('%')}")
@@ -3960,7 +4909,7 @@
 
    " hide the files in the markfile list
    for fname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." isk=".&isk)
+"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." l:isk=".&l:isk)
     if match(g:netrw_list_hide,'\<'.fname.'\>') != -1
      " remove fname from hiding list
      let g:netrw_list_hide= substitute(g:netrw_list_hide,'..\<'.escape(fname,g:netrw_fname_escape).'\>..','','')
@@ -3977,7 +4926,7 @@
 "     call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">")
     endif
    endfor
-   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+   keepj call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
    let g:netrw_hide= 1
 
   else
@@ -3986,14 +4935,16 @@
    let g:netrw_hide=(g:netrw_hide+1)%3
    exe "keepj norm! 0"
    if g:netrw_hide && g:netrw_list_hide == ""
-    call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
+    keepj call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
+    let @@= ykeep
 "    call Dret("NetrwHide")
     return
    endif
   endif
 
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 "  call Dret("NetrwHide")
 endfun
 
@@ -4001,6 +4952,7 @@
 " s:NetrwHidden: invoked by "gh" {{{2
 fun! s:NetrwHidden(islocal)
 "  call Dfunc("s:NetrwHidden()")
+  let ykeep= @@
   "  save current position
   let svpos= netrw#NetrwSavePosn()
 
@@ -4014,8 +4966,9 @@
   endif
 
   " refresh screen and return to saved position
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 "  call Dret("s:NetrwHidden")
 endfun
 
@@ -4043,7 +4996,7 @@
    endif
   endif
   " insure that the home directory exists
-  if !isdirectory(home)
+  if g:netrw_dirhistmax > 0 && !isdirectory(home)
    if exists("g:netrw_mkdir")
     call system(g:netrw_mkdir." ".shellescape(home))
    else
@@ -4057,11 +5010,18 @@
 " ---------------------------------------------------------------------
 " s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
 fun! s:NetrwLeftmouse(islocal)
+  if exists("s:netrwdrag")
+   return
+  endif
 "  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
 
+  let ykeep= @@
   " check if the status bar was clicked on instead of a file/directory name
+  while getchar(0) != 0
+   "clear the input stream
+  endwhile
   call feedkeys("\<LeftMouse>")
-  let c= getchar()
+  let c          = getchar()
   let mouse_lnum = v:mouse_lnum
   let wlastline  = line('w$')
   let lastline   = line('$')
@@ -4069,31 +5029,76 @@
 "  call Decho("v:mouse_col =".v:mouse_col."     col=".col(".")."  wincol =".wincol()." winwidth   =".winwidth(0))
   if mouse_lnum >= wlastline + 1 || v:mouse_win != winnr()
    " appears to be a status bar leftmouse click
+   let @@= ykeep
 "   call Dret("s:NetrwLeftmouse : detected a status bar leftmouse click")
    return
   endif
   if v:mouse_col != col('.')
+   let @@= ykeep
 "   call Dret("s:NetrwLeftmouse : detected a vertical separator bar leftmouse click")
    return
   endif
 
   if a:islocal
    if exists("b:netrw_curdir")
-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+    keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
    endif
   else
    if exists("b:netrw_curdir")
-    call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+    keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
    endif
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwLeftmouse")
 endfun
 
 " ---------------------------------------------------------------------
+" s:NetrwRightdrag: {{{2
+"DechoTabOn
+fun! s:NetrwRightdrag(islocal)
+"  call Dfunc("s:NetrwRightdrag(islocal=".a:islocal.")")
+  if !exists("s:netrwdrag")
+   let s:netrwdrag     = winnr()
+   call s:NetrwMarkFile(a:islocal,s:NetrwGetWord())
+   if a:islocal
+    nno <silent> <s-rightrelease> <leftmouse>:<c-u>call <SID>NetrwRightrelease(1)<cr>
+   else
+    nno <silent> <s-rightrelease> <leftmouse>:<c-u>call <SID>NetrwRightrelease(0)<cr>
+   endif
+  endif
+"  call Dret("s:NetrwRightdrag : s:netrwdrag=".s:netrwdrag." buf#".bufnr("%"))
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwRightrelease: {{{2
+fun! s:NetrwRightrelease(islocal)
+"  call Dfunc("s:NetrwRightrelease(islocal=".a:islocal.") s:netrwdrag=".s:netrwdrag." buf#".bufnr("%"))
+  if exists("s:netrwdrag")
+   nunmap <s-rightrelease>
+   let tgt = s:NetrwGetWord()
+"   call Decho("target#1: ".tgt)
+   if tgt =~ '/$' && tgt !~ '^\./$'
+    let tgt = b:netrw_curdir."/".tgt
+   else
+    let tgt= b:netrw_curdir
+   endif
+"   call Decho("target#2: ".tgt)
+   call netrw#NetrwMakeTgt(tgt)
+   let curwin= winnr()
+   exe s:netrwdrag."wincmd w"
+   call s:NetrwMarkFileMove(a:islocal)
+   exe curwin."wincmd w"
+   unlet s:netrwdrag
+  endif
+"  call Dret("s:NetrwRightrelease")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
 " separated patterns given in g:netrw_list_hide
 fun! s:NetrwListHide()
-"  call Dfunc("NetrwListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">")
+"  call Dfunc("NetrwListHide() g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
+  let ykeep= @@
 
   " find a character not in the "hide" string to use as a separator for :g and :v commands
   " How-it-works: take the hiding command, convert it into a range.  Duplicate
@@ -4115,17 +5120,22 @@
    " Prune the list by hiding any files which match
    if g:netrw_hide == 1
 "    call Decho("hiding<".hide."> listhide<".listhide.">")
-    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
+    exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
    elseif g:netrw_hide == 2
 "    call Decho("showing<".hide."> listhide<".listhide.">")
-    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
+    exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
    endif
   endwhile
   if g:netrw_hide == 2
-   exe 'sil keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
-   exe 'sil keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
+   exe 'sil! keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
+   exe 'sil! keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
   endif
 
+  " remove any blank lines that have somehow remained.
+  " This seems to happen under Windows.
+  exe 'sil! keepj 1,$g@^\s*$@d'
+
+  let @@= ykeep
 "  call Dret("NetrwListHide")
 endfun
 
@@ -4134,6 +5144,7 @@
 fun! s:NetrwHideEdit(islocal)
 "  call Dfunc("NetrwHideEdit(islocal=".a:islocal.")")
 
+  let ykeep= @@
   " save current cursor position
   let svpos= netrw#NetrwSavePosn()
 
@@ -4145,10 +5156,11 @@
 "  call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
 
   " refresh the listing
-  silent keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
+  sil keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
 
   " restore cursor position
   call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 
 "  call Dret("NetrwHideEdit")
 endfun
@@ -4158,6 +5170,7 @@
 fun! s:NetSortSequence(islocal)
 "  call Dfunc("NetSortSequence(islocal=".a:islocal.")")
 
+  let ykeep= @@
   let svpos= netrw#NetrwSavePosn()
   call inputsave()
   let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
@@ -4165,8 +5178,9 @@
 
   " refresh the listing
   let g:netrw_sort_sequence= newsortseq
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
 
 "  call Dret("NetSortSequence")
 endfun
@@ -4176,6 +5190,7 @@
 fun! s:NetrwMakeDir(usrhost)
 "  call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)")
 
+  let ykeep= @@
   " get name of new directory from user.  A bare <CR> will skip.
   " if its currently a directory, also request will be skipped, but with
   " a message.
@@ -4185,6 +5200,7 @@
 "  call Decho("newdirname<".newdirname.">")
 
   if newdirname == ""
+   let @@= ykeep
 "   call Dret("NetrwMakeDir : user aborted with bare <cr>")
    return
   endif
@@ -4198,15 +5214,17 @@
 "   call Decho("fullnewdir<".fullnewdir.">")
    if isdirectory(fullnewdir)
     if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
+     keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
     endif
+    let @@= ykeep
 "    call Dret("NetrwMakeDir : directory<".newdirname."> exists previously")
     return
    endif
    if s:FileReadable(fullnewdir)
     if !exists("g:netrw_quiet")
-     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
+     keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
     endif
+    let @@= ykeep
 "    call Dret("NetrwMakeDir : file<".newdirname."> exists previously")
     return
    endif
@@ -4219,8 +5237,14 @@
     let netrw_origdir= s:NetrwGetcwd(1)
     exe 'keepj lcd '.fnameescape(b:netrw_curdir)
 "    call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">")
-"    call Decho("exe silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1))
-    exe "sil! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)
+"    call Decho("exe sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
+    exe "sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)
+    if v:shell_error != 0
+     let @@= ykeep
+     call netrw#ErrorMsg(s:ERROR,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
+"     call Dret("NetrwMakeDir : failed: sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
+     return
+    endif
     if !g:netrw_keepdir
      exe 'keepj lcd '.fnameescape(netrw_origdir)
 "     call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">")
@@ -4243,26 +5267,31 @@
 "   call Decho("remote mkdir")
    let mkdircmd  = s:MakeSshCmd(g:netrw_mkdir_cmd)
    let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
-"   call Decho("exe silent! !".mkdircmd." ".shellescape(newdirname,1))
+"   call Decho("exe sil! !".mkdircmd." ".shellescape(newdirname,1))
    exe "sil! !".mkdircmd." ".shellescape(newdirname,1)
    if v:shell_error == 0
     " refresh listing
     let svpos= netrw#NetrwSavePosn()
-    call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-    call netrw#NetrwRestorePosn(svpos)
+    keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+    keepj call netrw#NetrwRestorePosn(svpos)
    elseif !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
+    keepj call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
    endif
 "   redraw!
 
   elseif b:netrw_method == 2
-   " COMBAK -- future work
-   call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68)
+   let svpos= netrw#NetrwSavePosn()
+   call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"')
+   keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   elseif b:netrw_method == 3
-   " COMBAK -- future work
-   call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68)
+   let svpos= netrw#NetrwSavePosn()
+   call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"')
+   keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   endif
 
+  let @@= ykeep
 "  call Dret("NetrwMakeDir")
 endfun
 
@@ -4283,14 +5312,22 @@
 "
 "  Creates a buffer version of islocal
 "    b:netrw_islocal
-"
 fun! s:NetrwMarkFile(islocal,fname)
 "  call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)")
+
+  " sanity check
+  if empty(a:fname)
+"   call Dret("s:NetrwMarkFile : emtpy fname")
+   return
+  endif
+
+  let ykeep   = @@
   let curbufnr= bufnr("%")
   let curdir  = b:netrw_curdir
-  let trailer = '[@=|\/\*]\=\>'
+  let trailer = '[@=|\/\*]\=\ze\%(  \|\t\|$\)'
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
-   " markfile list exists
+   " markfile list pre-exists
 "   call Decho("starting s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">")
 "   call Decho("starting s:netrwmarkfilemtch_{curbufnr}<".s:netrwmarkfilemtch_{curbufnr}.">")
    let b:netrw_islocal= a:islocal
@@ -4322,8 +5359,7 @@
       endif
       let first= 0
      endfor
-"     call Decho("ending s:netrwmarkfilelist_"curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
-"     call Decho("ending s:netrwmarkfilemtch_"curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">")
+"     call Decho("ending s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
     endif
    endif
 
@@ -4377,7 +5413,8 @@
 "   call Decho("2match none")
    2match none
   endif
-"  call Dret("s:NetrwMarkFile : netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
+  let @@= ykeep
+"  call Dret("s:NetrwMarkFile : s:netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
 endfun
 
 " ---------------------------------------------------------------------
@@ -4394,34 +5431,44 @@
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileCompress")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}") && exists("g:netrw_compress") && exists("g:netrw_decompress")
+
+   " for every filename in the marked list
    for fname in s:netrwmarkfilelist_{curbufnr}
-    " for every filename in the marked list
-    for sfx in sort(keys(g:netrw_decompress))
-     if fname =~ '\'.sfx.'$'
-      " fname has a suffix indicating that its compressed; apply associated decompression routine
-      let exe= netrw#WinPath(g:netrw_decompress[sfx])
-"      call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
-      if a:islocal
-       if g:netrw_keepdir
-        let fname= shellescape(s:ComposePath(curdir,fname))
-       endif
-      else
-       let fname= shellescape(b:netrw_curdir.fname,1)
+    let sfx= substitute(fname,'^.\{-}\(\.\a\+\)$','\1','')
+"    call Decho("extracted sfx<".sfx.">")
+    if exists("g:netrw_decompress['".sfx."']")
+     " fname has a suffix indicating that its compressed; apply associated decompression routine
+     let exe= g:netrw_decompress[sfx]
+"     call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
+     let exe= netrw#WinPath(exe)
+     if a:islocal
+      if g:netrw_keepdir
+       let fname= shellescape(s:ComposePath(curdir,fname))
       endif
-      if executable(exe)
-       if a:islocal
-	call system(exe." ".fname)
-       else
-        call s:RemoteSystem(exe." ".fname)
-       endif
+     else
+      let fname= shellescape(b:netrw_curdir.fname,1)
+     endif
+     if executable(exe)
+      if a:islocal
+       call system(exe." ".fname)
       else
-       call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
+       keepj call s:RemoteSystem(exe." ".fname)
       endif
-      break
+     else
+      keepj call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
      endif
-     unlet sfx
-    endfor
+    endif
+    unlet sfx
+
     if exists("exe")
      unlet exe
     elseif a:islocal
@@ -4429,12 +5476,13 @@
      call system(netrw#WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname)))
     else
      " fname not a compressed file, so compress it
-     call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname))
+     keepj call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname))
     endif
-   endfor
+   endfor	" for every file in the marked list
+
    call s:NetrwUnmarkList(curbufnr,curdir)
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   endif
 "  call Dret("s:NetrwMarkFileCompress")
 endfun
@@ -4446,42 +5494,112 @@
 "                      directories.  Uses the local-buffer marked file list.
 "                      Returns 1=success  (used by NetrwMarkFileMove())
 "                              0=failure
-fun! s:NetrwMarkFileCopy(islocal)
-"  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---').">")
+fun! s:NetrwMarkFileCopy(islocal,...)
+"  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---')."> a:0=".a:0)
 
-  " sanity checks
-  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
-   call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
-"   call Dret("s:NetrwMarkFileCopy 0")
-   return 0
+  if !exists("b:netrw_curdir")
+   let b:netrw_curdir= getcwd()
+"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
+  endif
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileCopy")
+   return
   endif
-"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if !exists("s:netrwmftgt")
-   call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
+   keepj call netrw#ErrorMsg(s:ERROR,"your marked file target is empty! (:help netrw-mt)",67)
 "   call Dret("s:NetrwMarkFileCopy 0")
    return 0
   endif
 "  call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">")
-  let curdir   = b:netrw_curdir
-  let curbufnr = bufnr("%")
 
   if      a:islocal &&  s:netrwmftgt_islocal
    " Copy marked files, local directory to local directory
 "   call Decho("copy from local to local")
-   let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
-"   call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")")
-   call system(netrw#WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
+   if !executable(g:netrw_localcopycmd) && g:netrw_localcopycmd !~ '\<cmd\s'
+    call netrw#ErrorMsg(s:ERROR,"g:netrw_localcopycmd<".g:netrw_localcopycmd."> not executable on your system, aborting",91)
+"    call Dfunc("s:NetrwMarkFileMove : g:netrw_localcopycmd<".g:netrw_localcopycmd."> n/a!")
+    return
+   endif
+
+   " copy marked files while within the same directory (ie. allow renaming)
+   if simplify(s:netrwmftgt) == simplify(b:netrw_curdir)
+    if len(s:netrwmarkfilelist_{bufnr('%')}) == 1
+     " only one marked file
+     let args    = shellescape(b:netrw_curdir."/".s:netrwmarkfilelist_{bufnr('%')}[0])
+     let oldname = s:netrwmarkfilelist_{bufnr('%')}[0]
+    elseif a:0 == 1
+     " this happens when the next case was used to recursively call s:NetrwMarkFileCopy()
+     let args    = shellescape(b:netrw_curdir."/".a:1)
+     let oldname = a:1
+    else
+     " copy multiple marked files inside the same directory
+     let s:recursive= 1
+     for oldname in s:netrwmarkfilelist_{bufnr("%")}
+      let ret= s:NetrwMarkFileCopy(a:islocal,oldname)
+      if ret == 0
+       break
+      endif
+     endfor
+     unlet s:recursive
+     call s:NetrwUnmarkList(curbufnr,curdir)
+"     call Dret("s:NetrwMarkFileCopy ".ret)
+     return ret
+    endif
+
+    call inputsave()
+    let newname= input("Copy ".oldname." to : ",oldname,"file")
+    call inputrestore()
+    if newname == ""
+"     call Dret("s:NetrwMarkFileCopy 0")
+     return 0
+    endif
+    let args= shellescape(oldname)
+    let tgt = shellescape(s:netrwmftgt.'/'.newname)
+   else
+    let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
+    let tgt = shellescape(s:netrwmftgt)
+   endif
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    let args= substitute(args,'/','\\','g')
+    let tgt = substitute(tgt, '/','\\','g')
+   endif
+   if g:netrw_localcopycmd =~ '\s'
+    let copycmd     = substitute(g:netrw_localcopycmd,'\s.*$','','')
+    let copycmdargs = substitute(g:netrw_localcopycmd,'^.\{-}\(\s.*\)$','\1','')
+    let copycmd     = netrw#WinPath(copycmd).copycmdargs
+   else
+    let copycmd = netrw#WinPath(g:netrw_localcopycmd)
+   endif
+"   call Decho("args   <".args.">")
+"   call Decho("tgt    <".tgt.">")
+"   call Decho("copycmd<".copycmd.">")
+"   call Decho("system(".copycmd." ".args." ".tgt.")")
+   call system(copycmd." ".args." ".tgt)
+   if v:shell_error != 0
+    call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localcopycmd<".g:netrw_localcopycmd.">; it doesn't work!",80)
+"    call Dret("s:NetrwMarkFileCopy 0 : failed: system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt))
+    return 0
+   endif
 
   elseif  a:islocal && !s:netrwmftgt_islocal
    " Copy marked files, local directory to remote directory
 "   call Decho("copy from local to remote")
-   call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
+   keepj call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
 
   elseif !a:islocal &&  s:netrwmftgt_islocal
+   " Copy marked files, remote directory to local directory
 "   call Decho("copy from remote to local")
-   call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
+   keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
 
   elseif !a:islocal && !s:netrwmftgt_islocal
+   " Copy marked files, remote directory to remote directory
 "   call Decho("copy from remote to remote")
    let curdir = getcwd()
    let tmpdir = s:GetTempfile("")
@@ -4491,19 +5609,29 @@
    if exists("*mkdir")
     call mkdir(tmpdir)
    else
-    exe "sil! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1)
+    exe "sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1)
+    if v:shell_error != 0
+     call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
+"     call Dret("s:NetrwMarkFileCopy : failed: sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1) )
+     return
+    endif
    endif
    if isdirectory(tmpdir)
     exe "keepj lcd ".fnameescape(tmpdir)
-    call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
+    keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
     let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")')
-    call s:NetrwUpload(localfiles,s:netrwmftgt)
+    keepj call s:NetrwUpload(localfiles,s:netrwmftgt)
     if getcwd() == tmpdir
      for fname in s:netrwmarkfilelist_{bufnr('%')}
-      call s:NetrwDelete(fname)
+      keepj call s:NetrwDelete(fname)
      endfor
      exe "keepj lcd ".fnameescape(curdir)
-     exe "sil !".g:netrw_local_rmdir." ".shellescape(tmpdir,1)
+     exe "sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1)
+     if v:shell_error != 0
+      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localrmdir<".g:netrw_localrmdir."> to something that works",80)
+"      call Dret("s:NetrwMarkFileCopy : failed: sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1) )
+      return
+     endif
     else
      exe "keepj lcd ".fnameescape(curdir)
     endif
@@ -4513,20 +5641,21 @@
   " -------
   " cleanup
   " -------
-"  call Decho("cleanup")
-
-  " remove markings from local buffer
-  call s:NetrwUnmarkList(curbufnr,curdir)
+"   call Decho("cleanup")
+  if !exists("s:recursive")
+   " remove markings from local buffer
+   call s:NetrwUnmarkList(curbufnr,curdir)
+  endif
 
   " refresh buffers
   if !s:netrwmftgt_islocal
    call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
   endif
   if a:islocal
-   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
+   keepj call s:NetrwRefreshDir(a:islocal,curdir)
   endif
   if g:netrw_fastbrowse <= 1
-   call s:LocalBrowseShellCmdRefresh()
+   keepj call s:LocalBrowseShellCmdRefresh()
   endif
   
 "  call Dret("s:NetrwMarkFileCopy 1")
@@ -4542,7 +5671,15 @@
 "  call Dfunc("s:NetrwMarkFileDiff(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
   let curbufnr= bufnr("%")
 
-  if exists("s:netrwmarkfilelist_{curbufnr}")
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileDiff")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
+  if exists("s:netrwmarkfilelist_{."curbufnr}")
    let cnt    = 0
    let curdir = b:netrw_curdir
    for fname in s:netrwmarkfilelist
@@ -4575,21 +5712,62 @@
 
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileEdit")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
    call s:SetRexDir(a:islocal,curdir)
    let flist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
    " unmark markedfile list
 "   call s:NetrwUnmarkList(curbufnr,curdir)
    call s:NetrwUnmarkAll()
-"   call Decho("exe silent args ".flist)
-   exe "silent args ".flist
+"   call Decho("exe sil args ".flist)
+   exe "sil args ".flist
   endif
+  echo "(use :bn, :bp to navigate files; :Rex to return)"
   
 "  call Dret("s:NetrwMarkFileEdit")
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary command on marked files, one at a time {{{2
+" s:NetrwMarkFileQFEL: convert a quickfix-error list into a marked file list {{{2
+fun! s:NetrwMarkFileQFEL(islocal,qfel)
+"  call Dfunc("s:NetrwMarkFileQFEL(islocal=".a:islocal.",qfel)")
+  call s:NetrwUnmarkAll()
+  let curbufnr= bufnr("%")
+
+  if !empty(a:qfel)
+   for entry in a:qfel
+    let bufnmbr= entry["bufnr"]
+"    call Decho("bufname(".bufnmbr.")<".bufname(bufnmbr)."> line#".entry["lnum"]." text=".entry["text"])
+    if !exists("s:netrwmarkfilelist_{curbufnr}")
+"     call Decho("case: no marked file list")
+     call s:NetrwMarkFile(a:islocal,bufname(bufnmbr))
+    elseif index(s:netrwmarkfilelist_{curbufnr},bufname(bufnmbr)) == -1
+     " s:NetrwMarkFile will remove duplicate entries from the marked file list.
+     " So, this test lets two or more hits on the same pattern to be ignored.
+"     call Decho("case: ".bufname(bufnmbr)." not currently in marked file list")
+     call s:NetrwMarkFile(a:islocal,bufname(bufnmbr))
+    else
+"     call Decho("case: ".bufname(bufnmbr)." already in marked file list")
+    endif
+   endfor
+   echo "(use me to edit marked files)"
+  else
+   call netrw#ErrorMsg(s:WARNING,"can't convert quickfix error list; its empty!",92)
+  endif
+
+"  call Dret("s:NetrwMarkFileQFEL")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary system command on marked files, one at a time {{{2
 "                     Uses the local marked-file list.
 fun! s:NetrwMarkFileExe(islocal)
 "  call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")")
@@ -4597,40 +5775,166 @@
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileExe")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist_{curbufnr}")
    " get the command
    call inputsave()
    let cmd= input("Enter command: ","","file")
    call inputrestore()
 "   call Decho("cmd<".cmd.">")
+   if cmd == ""
+"    "   call Dret("s:NetrwMarkFileExe : early exit, empty command")
+    return
+   endif
+
+   " apply command to marked files.  Substitute: filename -> %
+   " If no %, then append a space and the filename to the command
+   for fname in s:netrwmarkfilelist_{curbufnr}
+    if a:islocal
+     if g:netrw_keepdir
+      let fname= shellescape(netrw#WinPath(s:ComposePath(curdir,fname)))
+     endif
+    else
+     let fname= shellescape(netrw#WinPath(b:netrw_curdir.fname))
+    endif
+    if cmd =~ '%'
+     let xcmd= substitute(cmd,'%',fname,'g')
+    else
+     let xcmd= cmd.' '.fname
+    endif
+    if a:islocal
+"     call Decho("local: xcmd<".xcmd.">")
+     let ret= system(xcmd)
+    else
+"     call Decho("remote: xcmd<".xcmd.">")
+     let ret= s:RemoteSystem(xcmd)
+    endif
+    if v:shell_error < 0
+     keepj call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
+     break
+    else
+     echo ret
+    endif
+   endfor
+
+   " unmark marked file list
+   call s:NetrwUnmarkList(curbufnr,curdir)
+
+   " refresh the listing
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
+  else
+   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+  endif
+  
+"  call Dret("s:NetrwMarkFileExe")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkHideSfx: (invoked by mh) (un)hide files having same suffix
+"                  as the marked file(s) (toggles suffix presence)
+"                  Uses the local marked file list.
+fun! s:NetrwMarkHideSfx(islocal)
+"  call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curbufnr = bufnr("%")
+
+  " s:netrwmarkfilelist_{curbufnr}: the List of marked files
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+
+   for fname in s:netrwmarkfilelist_{curbufnr}
+"     call Decho("s:NetrwMarkFileCopy: fname<".fname.">")
+     " construct suffix pattern
+     if fname =~ '\.'
+      let sfxpat= "^.*".substitute(fname,'^.*\(\.[^. ]\+\)$','\1','')
+     else
+      let sfxpat= '^\%(\%(\.\)\@!.\)*$'
+     endif
+     " determine if its in the hiding list or not
+     let inhidelist= 0
+     if g:netrw_list_hide != ""
+      let itemnum = 0
+      let hidelist= split(g:netrw_list_hide,',')
+      for hidepat in hidelist
+       if sfxpat == hidepat
+        let inhidelist= 1
+        break
+       endif
+       let itemnum= itemnum + 1
+      endfor
+     endif
+"     call Decho("fname<".fname."> inhidelist=".inhidelist." sfxpat<".sfxpat.">")
+     if inhidelist
+      " remove sfxpat from list
+      call remove(hidelist,itemnum)
+      let g:netrw_list_hide= join(hidelist,",")
+     elseif g:netrw_list_hide != ""
+      " append sfxpat to non-empty list
+      let g:netrw_list_hide= g:netrw_list_hide.",".sfxpat
+     else
+      " set hiding list to sfxpat
+      let g:netrw_list_hide= sfxpat
+     endif
+    endfor
+
+   " refresh the listing
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
+  else
+   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+  endif
+
+"  call Dret("s:NetrwMarkHideSfx")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwMarkFileVimCmd: (invoked by mX) execute arbitrary vim command on marked files, one at a time {{{2
+"                     Uses the local marked-file list.
+fun! s:NetrwMarkFileVimCmd(islocal)
+"  call Dfunc("s:NetrwMarkFileVimCmd(islocal=".a:islocal.")")
+  let svpos    = netrw#NetrwSavePosn()
+  let curdir   = b:netrw_curdir
+  let curbufnr = bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileVimCmd")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
+  if exists("s:netrwmarkfilelist_{curbufnr}")
+   " get the command
+   call inputsave()
+   let cmd= input("Enter vim command: ","","file")
+   call inputrestore()
+"   call Decho("cmd<".cmd.">")
+   if cmd == ""
+"    "   call Dret("s:NetrwMarkFileVimCmd : early exit, empty command")
+    return
+   endif
 
    " apply command to marked files.  Substitute: filename -> %
    " If no %, then append a space and the filename to the command
    for fname in s:netrwmarkfilelist_{curbufnr}
+"    call Decho("fname<".fname.">")
     if a:islocal
-     if g:netrw_keepdir
-      let fname= shellescape(netrw#WinPath(s:ComposePath(curdir,fname)))
-     endif
-    else
-     let fname= shellescape(netrw#WinPath(b:netrw_curdir.fname))
-    endif
-    if cmd =~ '%'
-     let xcmd= substitute(cmd,'%',fname,'g')
-    else
-     let xcmd= cmd.' '.fname
-    endif
-    if a:islocal
-"     call Decho("local: xcmd<".xcmd.">")
-     let ret= system(xcmd)
-    else
-"     call Decho("remote: xcmd<".xcmd.">")
-     let ret= s:RemoteSystem(xcmd)
-    endif
-    if v:shell_error < 0
-     call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
-     break
+     1split
+     exe "sil! keepalt e ".fnameescape(fname)
+"     call Decho("local<".fname.">: exe ".cmd)
+     exe cmd
+     exe "sil! keepalt wq!"
     else
-     echo ret
+"     call Decho("remote<".fname.">: exe ".cmd." : NOT SUPPORTED YET")
+     echo "sorry, \"mX\" not supported yet for remote files"
     endif
    endfor
 
@@ -4638,13 +5942,13 @@
    call s:NetrwUnmarkList(curbufnr,curdir)
 
    " refresh the listing
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   else
-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
   endif
   
-"  call Dret("s:NetrwMarkFileExe")
+"  call Dret("s:NetrwMarkFileVimCmd")
 endfun
 
 " ---------------------------------------------------------------------
@@ -4695,10 +5999,10 @@
     endfor
 
    " refresh the listing
-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-   call netrw#NetrwRestorePosn(svpos)
+   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   else
-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
   endif
 
 "  call Dret("s:NetrwMarkHideSfx")
@@ -4716,30 +6020,47 @@
 "  call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
    let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
    call s:NetrwUnmarkAll()
+  else
+"   call Decho('no marked files, using "*"')
+   let netrwmarkfilelist= "*"
+  endif
 
-   " ask user for pattern
-   call inputsave()
-   let pat= input("Enter pattern: ","")
-   call inputrestore()
-   if pat !~ '^\s'
-    if pat !~ '^/'
-     let pat= '/'.pat.'/'
-    endif
-    let pat= " ".pat
-   endif
+  " ask user for pattern
+  call inputsave()
+  let pat= input("Enter pattern: ","")
+  call inputrestore()
+  let patbang = ""
+  if pat =~ '^!'
+   let patbang = "!"
+   let pat= strpart(pat,2)
+  endif
+  if pat =~ '^\i'
+   let pat    = escape(pat,'/')
+   let pat    = '/'.pat.'/'
+  else
+   let nonisi = pat[0]
+  endif
+
+  " use vimgrep for both local and remote
+"  call Decho("exe vimgrep".patbang." ".pat." ".netrwmarkfilelist)
+  try
+   exe "keepj noautocmd vimgrep".patbang." ".pat." ".netrwmarkfilelist
+  catch /^Vim\%((\a\+)\)\=:E480/
+   keepj call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pat.">",76)
+"   call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pat.">")
+   return
+  endtry
+  echo "(use :cn, :cp to navigate, :Rex to return)"
 
-   " use vimgrep for both local and remote
-"   call Decho("exe vimgrep".pat." ".netrwmarkfilelist)
-   try
-    exe "keepj noautocmd vimgrep".pat." ".netrwmarkfilelist
-    catch /^Vim\%((\a\+)\)\=:E480/
-     call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
-"     call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">")
-     return
-   endtry
+  2match none
+  keepj call netrw#NetrwRestorePosn(svpos)
 
-   2match none
-   call netrw#NetrwRestorePosn(svpos)
+  if exists("nonisi")
+   " original, user-supplied pattern did not begin with a character from isident
+"   call Decho("looking for trailing nonisi<".nonisi."> followed by a j, gj, or jg")
+   if pat =~ nonisi.'j$\|'.nonisi.'gj$\|'.nonisi.'jg$'
+    call s:NetrwMarkFileQFEL(a:islocal,getqflist())
+   endif
   endif
 
 "  call Dret("s:NetrwMarkFileGrep")
@@ -4756,14 +6077,15 @@
   let curbufnr = bufnr("%")
 
   " sanity check
-  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
-   call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
 "   call Dret("s:NetrwMarkFileMove")
    return
   endif
-"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if !exists("s:netrwmftgt")
-   call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
+   keepj call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
 "   call Dret("s:NetrwMarkFileCopy 0")
    return 0
   endif
@@ -4773,25 +6095,47 @@
    " move: local -> local
 "   call Decho("move from local to local")
 "   call Decho("(s:NetrwMarkFileMove) local to local move")
-   if executable(g:netrw_localmovecmd)
-    for fname in s:netrwmarkfilelist_{bufnr("%")}
-"     call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")")
-     let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt))
-     if v:shell_error < 0
-      call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54)
-      break
-     endif
-    endfor
+   if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '\<cmd\s'
+    call netrw#ErrorMsg(s:ERROR,"g:netrw_localmovecmd<".g:netrw_localmovecmd."> not executable on your system, aborting",90)
+"    call Dfunc("s:NetrwMarkFileMove : g:netrw_localmovecmd<".g:netrw_localmovecmd."> n/a!")
+    return
+   endif
+   let tgt         = shellescape(s:netrwmftgt)
+"   call Decho("tgt<".tgt.">")
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    let tgt         = substitute(tgt, '/','\\','g')
+"    call Decho("windows exception: tgt<".tgt.">")
+    if g:netrw_localmovecmd =~ '\s'
+     let movecmd     = substitute(g:netrw_localmovecmd,'\s.*$','','')
+     let movecmdargs = substitute(g:netrw_localmovecmd,'^.\{-}\(\s.*\)$','\1','')
+     let movecmd     = netrw#WinPath(movecmd).movecmdargs
+"     call Decho("windows exception: movecmd<".movecmd."> (#1: had a space)")
+    else
+     let movecmd = netrw#WinPath(movecmd)
+"     call Decho("windows exception: movecmd<".movecmd."> (#2: no space)")
+    endif
    else
-    call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> is not executable!",57)
+    let movecmd = netrw#WinPath(g:netrw_localmovecmd)
+"    call Decho("movecmd<".movecmd."> (#3 linux or cygwin)")
    endif
+   for fname in s:netrwmarkfilelist_{bufnr("%")}
+"    call Decho("system(".movecmd." ".shellescape(fname)." ".tgt.")")
+    if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+     let fname= substitute(fname,'/','\\','g')
+    endif
+    let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".tgt)
+    if v:shell_error != 0
+     call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localmovecmd<".g:netrw_localmovecmd.">; it doesn't work!",54)
+     break
+    endif
+   endfor
 
   elseif  a:islocal && !s:netrwmftgt_islocal
    " move: local -> remote
 "   call Decho("move from local to remote")
 "   call Decho("copy")
    let mflist= s:netrwmarkfilelist_{bufnr("%")}
-   call s:NetrwMarkFileCopy(a:islocal)
+   keepj call s:NetrwMarkFileCopy(a:islocal)
 "   call Decho("remove")
    for fname in mflist
     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
@@ -4804,7 +6148,7 @@
 "   call Decho("move from remote to local")
 "   call Decho("copy")
    let mflist= s:netrwmarkfilelist_{bufnr("%")}
-   call s:NetrwMarkFileCopy(a:islocal)
+   keepj call s:NetrwMarkFileCopy(a:islocal)
 "   call Decho("remove")
    for fname in mflist
     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
@@ -4817,7 +6161,7 @@
 "   call Decho("move from remote to remote")
 "   call Decho("copy")
    let mflist= s:netrwmarkfilelist_{bufnr("%")}
-   call s:NetrwMarkFileCopy(a:islocal)
+   keepj call s:NetrwMarkFileCopy(a:islocal)
 "   call Decho("remove")
    for fname in mflist
     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
@@ -4836,13 +6180,16 @@
 
   " refresh buffers
   if !s:netrwmftgt_islocal
-   call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
+"   call Decho("refresh netrwmftgt<".s:netrwmftgt.">")
+   keepj call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
   endif
   if a:islocal
-   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
+"   call Decho("refresh b:netrw_curdir<".b:netrw_curdir.">")
+   keepj call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
   endif
   if g:netrw_fastbrowse <= 1
-   call s:LocalBrowseShellCmdRefresh()
+"   call Decho("since g:netrw_fastbrowse=".g:netrw_fastbrowse.", perform shell cmd refresh")
+   keepj call s:LocalBrowseShellCmdRefresh()
   endif
   
 "  call Dret("s:NetrwMarkFileMove")
@@ -4854,6 +6201,14 @@
 fun! s:NetrwMarkFilePrint(islocal)
 "  call Dfunc("s:NetrwMarkFilePrint(islocal=".a:islocal.")")
   let curbufnr= bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFilePrint")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
   if exists("s:netrwmarkfilelist_{curbufnr}")
    let netrwmarkfilelist = s:netrwmarkfilelist_{curbufnr}
    let curdir            = b:netrw_curdir
@@ -4868,8 +6223,8 @@
     endif
     1split
     " the autocmds will handle both local and remote files
-"    call Decho("exe silent e ".escape(fname,' '))
-    exe "silent e ".fnameescape(fname)
+"    call Decho("exe sil e ".escape(fname,' '))
+    exe "sil e ".fnameescape(fname)
 "    call Decho("hardcopy")
     hardcopy
     q
@@ -4882,7 +6237,7 @@
 " ---------------------------------------------------------------------
 " s:NetrwMarkFileRegexp: (invoked by mr) This function is used to mark {{{2
 "                        files when given a regexp (for which a prompt is
-"                        issued).
+"                        issued) (matches to name of files).
 fun! s:NetrwMarkFileRegexp(islocal)
 "  call Dfunc("s:NetrwMarkFileRegexp(islocal=".a:islocal.")")
 
@@ -4894,15 +6249,15 @@
   if a:islocal
    " get the matching list of files using local glob()
 "   call Decho("handle local regexp")
-   let dirname  = escape(b:netrw_curdir,g:netrw_glob_escape)
-   let files = glob(s:ComposePath(dirname,regexp))
+   let dirname = escape(b:netrw_curdir,g:netrw_glob_escape)
+   let files   = glob(s:ComposePath(dirname,regexp))
 "   call Decho("files<".files.">")
    let filelist= split(files,"\n")
 
   " mark the list of files
   for fname in filelist
 "   call Decho("fname<".fname.">")
-   call s:NetrwMarkFile(a:islocal,substitute(fname,'^.*/','',''))
+   keepj call s:NetrwMarkFile(a:islocal,substitute(fname,'^.*/','',''))
   endfor
 
   else
@@ -4915,8 +6270,8 @@
    set ei=all ma
 "   call Decho("set ei=all ma")
    1split
-   call s:NetrwEnew()
-   call s:NetrwSafeOptions()
+   keepj call s:NetrwEnew()
+   keepj call s:NetrwSafeOptions()
    sil keepj norm! "ap
    keepj 2
    let bannercnt= search('^" =====','W')
@@ -4942,12 +6297,13 @@
    let filelist= getline(1,line("$"))
    q!
    for filename in filelist
-    call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
+    keepj call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
    endfor
    unlet filelist
    let @a  = areg
    let &ei = eikeep
   endif
+  echo "  (use me to edit marked files)"
 
 "  call Dret("s:NetrwMarkFileRegexp")
 endfun
@@ -4958,6 +6314,14 @@
 fun! s:NetrwMarkFileSource(islocal)
 "  call Dfunc("s:NetrwMarkFileSource(islocal=".a:islocal.")")
   let curbufnr= bufnr("%")
+
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileSource")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
   if exists("s:netrwmarkfilelist_{curbufnr}")
    let netrwmarkfilelist = s:netrwmarkfilelist_{bufnr("%")}
    let curdir            = b:netrw_curdir
@@ -4988,6 +6352,14 @@
   let curdir   = b:netrw_curdir
   let curbufnr = bufnr("%")
 
+  " sanity check
+  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
+   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+"   call Dret("s:NetrwMarkFileTag")
+   return
+  endif
+"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+
   if exists("s:netrwmarkfilelist")
 "   call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
    let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "shellescape(v:val,".!a:islocal.")"))
@@ -5023,9 +6395,9 @@
 " ---------------------------------------------------------------------
 " s:NetrwMarkFileTgt:  (invoked by mt) This function sets up a marked file target {{{2
 "   Sets up two variables, 
-"     s:netrwmftgt : holds the target directory
+"     s:netrwmftgt         : holds the target directory
 "     s:netrwmftgt_islocal : 0=target directory is remote
-"                    1=target directory is local
+"                            1=target directory is local
 fun! s:NetrwMarkFileTgt(islocal)
 "  call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")")
   let svpos  = netrw#NetrwSavePosn()
@@ -5037,9 +6409,21 @@
 
   " set up target
   if line(".") < w:netrw_bannercnt
-   " if cursor in banner region, use b:netrw_curdir for the target
-   let s:netrwmftgt= b:netrw_curdir
-"   call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
+   " if cursor in banner region, use b:netrw_curdir for the target unless its already the target
+   if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal") && s:netrwmftgt == b:netrw_curdir
+"    call Decho("cursor in banner region, and target already is <".b:netrw_curdir.">: removing target")
+    unlet s:netrwmftgt s:netrwmftgt_islocal
+    if g:netrw_fastbrowse <= 1
+     call s:LocalBrowseShellCmdRefresh()
+    endif
+    call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+    call netrw#NetrwRestorePosn(svpos)
+"    call Dret("s:NetrwMarkFileTgt : removed target")
+    return
+   else
+    let s:netrwmftgt= b:netrw_curdir
+"    call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
+   endif
 
   else
    " get word under cursor.
@@ -5085,6 +6469,7 @@
 " s:NetrwOpenFile: query user for a filename and open it {{{2
 fun! s:NetrwOpenFile(islocal)
 "  call Dfunc("s:NetrwOpenFile(islocal=".a:islocal.")")
+  let ykeep= @@
   call inputsave()
   let fname= input("Enter filename: ")
   call inputrestore()
@@ -5108,11 +6493,14 @@
   else
    exe "e ".fnameescape(fname)
   endif
+  let @@= ykeep
 "  call Dret("s:NetrwOpenFile")
 endfun
 
 " ---------------------------------------------------------------------
 " s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2
+"   User access provided by the <mu> mapping. (see :help netrw-mu)
+"   Used by many MarkFile functions.
 fun! s:NetrwUnmarkList(curbufnr,curdir)
 "  call Dfunc("s:NetrwUnmarkList(curbufnr=".a:curbufnr." curdir<".a:curdir.">)")
 
@@ -5144,13 +6532,13 @@
   if exists("s:netrwmarkfilelist")
    unlet s:netrwmarkfilelist
   endif
-  silent call s:NetrwUnmarkAll2()
+  sil call s:NetrwUnmarkAll2()
   2match none
 "  call Dret("s:NetrwUnmarkAll")
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwUnmarkAll2: {{{2
+" s:NetrwUnmarkAll2: unmark all files from all buffers {{{2
 fun! s:NetrwUnmarkAll2()
 "  call Dfunc("s:NetrwUnmarkAll2()")
   redir => netrwmarkfilelist_let
@@ -5181,318 +6569,133 @@
    unlet s:netrwmarkfilelist
    unlet s:netrwmarkfilelist_{curbufnr}
    unlet s:netrwmarkfilemtch_{curbufnr}
-   2match none
-  endif
-
-"  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-"  call Dret("s:NetrwUnMarkFile")
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwMenu: generates the menu for gvim and netrw {{{2
-fun! s:NetrwMenu(domenu)
-
-  if !exists("g:NetrwMenuPriority")
-   let g:NetrwMenuPriority= 80
-  endif
-
-  if has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
-"   call Dfunc("NetrwMenu(domenu=".a:domenu.")")
-
-   if !exists("s:netrw_menu_enabled") && a:domenu
-"    call Decho("initialize menu")
-    let s:netrw_menu_enabled= 1
-    exe 'sil! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1-	:'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."	\<c-h>'"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.5   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Create\ New\ File<tab>%	%'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.2  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p	p'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.3  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P	P'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.4  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o	o'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.5  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v	v'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.1  '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.13    '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.1  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf	mf'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.2  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr	mr'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.3  '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a	a'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.4  '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc	mc'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.5  '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D	D'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.6  '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md	md'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.7  '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me	me'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.8  '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx	mx'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.9  '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm	mm'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O	O'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp	mp'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R	R'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt	mt'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT	mT'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz	mz'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.15    '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1  '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)<tab>i	i'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2  '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show<tab>a	a'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.3  '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s	s'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
-    exe 'sil! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
-    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
-    let s:netrw_menucnt= 28
-
-   elseif !a:domenu
-    let s:netrwcnt = 0
-    let curwin     = winnr()
-    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
-    exe curwin."wincmd w"
-
-    if s:netrwcnt <= 1
-"     call Decho("clear menus")
-     exe 'sil! unmenu '.g:NetrwTopLvlMenu
-"     call Decho('exe silent! unmenu '.g:NetrwTopLvlMenu.'*')
-     sil! unlet s:netrw_menu_enabled
-    endif
-   endif
-"   call Dret("NetrwMenu")
-  endif
-
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwObtain: obtain file under cursor or from markfile list {{{2
-"                Used by the O maps (as <SID>NetrwObtain())
-fun! s:NetrwObtain(islocal)
-"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
-
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
-   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
-   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
-  else
-   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
-  endif
-
-"  call Dret("NetrwObtain")
-endfun
-
-" ---------------------------------------------------------------------
-" netrw#NetrwObtain: {{{2
-"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
-"     islocal=0  obtain from remote source
-"            =1  obtain from local source
-"     fname  :   a filename or a list of filenames
-"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
-fun! netrw#NetrwObtain(islocal,fname,...)
-"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
-  " NetrwStatusLine support - for obtaining support
-
-  if type(a:fname) == 1
-   let fnamelist= [ a:fname ]
-  elseif type(a:fname) == 3
-   let fnamelist= a:fname
-  else
-   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
-"   call Dret("netrw#NetrwObtain")
-   return
-  endif
-"  call Decho("fnamelist<".string(fnamelist).">")
-  if a:0 > 0
-   let tgtdir= a:1
-  else
-   let tgtdir= getcwd()
-  endif
-"  call Decho("tgtdir<".tgtdir.">")
-
-  if exists("b:netrw_islocal") && b:netrw_islocal
-   " obtain a file from local b:netrw_curdir to (local) tgtdir
-"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
-   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
-    let topath= s:ComposePath(tgtdir,"")
-    if (has("win32") || has("win95") || has("win64") || has("win16"))
-     " transfer files one at time
-"     call Decho("transfer files one at a time")
-     for fname in fnamelist
-"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
-      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
-     endfor
-    else
-     " transfer files with one command
-"     call Decho("transfer files with one command")
-     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
-"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
-     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
-    endif
-   elseif !exists("b:netrw_curdir")
-    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
-   else
-    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
-   endif
-
-  else
-   " obtain files from remote b:netrw_curdir to local tgtdir
-"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
-   if type(a:fname) == 1
-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
-   endif
-   call s:NetrwMethod(b:netrw_curdir)
-
-   if b:netrw_method == 4
-    " obtain file using scp
-"    call Decho("obtain via scp (method#4)")
-    if exists("g:netrw_port") && g:netrw_port != ""
-     let useport= " ".g:netrw_scpport." ".g:netrw_port
-    else
-     let useport= ""
-    endif
-    if b:netrw_fname =~ '/'
-     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
-    else
-     let path= ""
-    endif
-    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
-
-   elseif b:netrw_method == 2
-    " obtain file using ftp + .netrc
-"     call Decho("obtain via ftp+.netrc (method #2)")
-     call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
-     let tmpbufnr= bufnr("%")
-     setlocal ff=unix
-     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-      keepj put =g:netrw_ftpmode
-"      call Decho("filter input: ".getline('$'))
-     endif
-
-     if exists("b:netrw_fname") && b:netrw_fname != ""
-      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
-"      call Decho("filter input: ".getline('$'))
-     endif
-
-     if exists("g:netrw_ftpextracmd")
-      keepj put =g:netrw_ftpextracmd
-"      call Decho("filter input: ".getline('$'))
-     endif
-     for fname in fnamelist
-      call setline(line("$")+1,'get "'.fname.'"')
-"      call Decho("filter input: ".getline('$'))
-     endfor
-     if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
-     else
-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
-     endif
-     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
-      let debugkeep= &debug
-      setlocal debug=msg
-      call netrw#ErrorMsg(s:ERROR,getline(1),4)
-      let &debug= debugkeep
-     endif
-
-   elseif b:netrw_method == 3
-    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
-"    call Decho("obtain via ftp+mipf (method #3)")
-    call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
-    let tmpbufnr= bufnr("%")
-    setlocal ff=unix
-
-    if exists("g:netrw_port") && g:netrw_port != ""
-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
-"     call Decho("filter input: ".getline('$'))
-    else
-     keepj put ='open '.g:netrw_machine
-"     call Decho("filter input: ".getline('$'))
-    endif
+   2match none
+  endif
 
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     keepj put =g:netrw_uid
-"     call Decho("filter input: ".getline('$'))
-     keepj put ='\"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('$'))
-    else
-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"     call Decho("filter input: ".getline('$'))
-    endif
+"  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  call netrw#NetrwRestorePosn(svpos)
+"  call Dret("s:NetrwUnMarkFile")
+endfun
 
-    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
-     keepj put =g:netrw_ftpmode
-"     call Decho("filter input: ".getline('$'))
-    endif
+" ---------------------------------------------------------------------
+" s:NetrwMenu: generates the menu for gvim and netrw {{{2
+fun! s:NetrwMenu(domenu)
 
-    if exists("b:netrw_fname") && b:netrw_fname != ""
-     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
-"     call Decho("filter input: ".getline('$'))
-    endif
+  if !exists("g:NetrwMenuPriority")
+   let g:NetrwMenuPriority= 80
+  endif
 
-    if exists("g:netrw_ftpextracmd")
-     keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline('$'))
-    endif
+  if has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+"   call Dfunc("NetrwMenu(domenu=".a:domenu.")")
 
-    if exists("g:netrw_ftpextracmd")
-     keepj put =g:netrw_ftpextracmd
-"     call Decho("filter input: ".getline('$'))
-    endif
-    for fname in fnamelist
-     keepj call setline(line("$")+1,'get "'.fname.'"')
-    endfor
-"    call Decho("filter input: ".getline('$'))
+   if !exists("s:netrw_menu_enabled") && a:domenu
+"    call Decho("initialize menu")
+    let s:netrw_menu_enabled= 1
+    exe 'sil! menu '.g:NetrwMenuPriority.'.1      '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.5      '.g:NetrwTopLvlMenu.'-Sep1-	:'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.6      '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.7      '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
+    if g:netrw_dirhistmax > 0
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
+    else
+     exe 'sil! menu '.g:NetrwMenuPriority.'.8     '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History	:echo "(disabled)"'."\<cr>"
+    endif
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.1    '.g:NetrwTopLvlMenu.'Browsing\ Control.Horizontal\ Split<tab>o	o'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.2    '.g:NetrwTopLvlMenu.'Browsing\ Control.Vertical\ Split<tab>v	v'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.3    '.g:NetrwTopLvlMenu.'Browsing\ Control.New\ Tab<tab>t	t'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.4    '.g:NetrwTopLvlMenu.'Browsing\ Control.Preview<tab>p	p'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.5    '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."	\<c-h>'"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.6    '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.7    '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.8    '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.9.9    '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.10     '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Create\ New\ File<tab>%	%'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.2   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p	p'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.3   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P	P'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.4   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o	o'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.11.5   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v	v'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.1   '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2   '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2   '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.3   '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.13     '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.1   '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf	mf'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.2   '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr	mr'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.3   '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a	a'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.4   '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc	mc'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.5   '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D	D'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.6   '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md	md'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.7   '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me	me'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.8   '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx	mx'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.9   '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm	mm'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.10  '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O	O'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.11  '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp	mp'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.12  '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R	R'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.13  '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt	mt'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.14  '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT	mT'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.14.15  '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz	mz'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.15     '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.thin<tab>i	:let w:netrw_liststyle=0<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.long<tab>i	:let w:netrw_liststyle=1<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.wide<tab>i	:let w:netrw_liststyle=2<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.tree<tab>i	:let w:netrw_liststyle=3<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.1 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Show\ All<tab>a	:let g:netrw_hide=0<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.3 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Normal<tab>a	:let g:netrw_hide=1<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.2 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Hidden\ Only<tab>a	:let g:netrw_hide=2<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.3   '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.1 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Name<tab>s       :let g:netrw_sort_by="name"<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.2 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Time<tab>s       :let g:netrw_sort_by="time"<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.3 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Size<tab>s       :let g:netrw_sort_by="size"<cr><c-L>'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.17     '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
+    exe 'sil! menu '.g:NetrwMenuPriority.'.18     '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
+    let s:netrw_menucnt= 28
+    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
+    call s:NetrwTgtMenu()      " let bookmarks and history be easy targets
 
-    " perform ftp:
-    " -i       : turns off interactive prompting from ftp
-    " -n  unix : DON'T use <.netrc>, even though it exists
-    " -n  win32: quit being obnoxious about password
-    keepj norm! 1Gdd
-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
-    if getline(1) !~ "^$"
-"     call Decho("error<".getline(1).">")
-     if !exists("g:netrw_quiet")
-      call netrw#ErrorMsg(s:ERROR,getline(1),5)
-     endif
+   elseif !a:domenu
+    let s:netrwcnt = 0
+    let curwin     = winnr()
+    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
+    exe curwin."wincmd w"
+
+    if s:netrwcnt <= 1
+"     call Decho("clear menus")
+     exe 'sil! unmenu '.g:NetrwTopLvlMenu
+"     call Decho('exe sil! unmenu '.g:NetrwTopLvlMenu.'*')
+     sil! unlet s:netrw_menu_enabled
     endif
-   elseif !exists("b:netrw_method") || b:netrw_method < 0
-"    call Dfunc("netrw#NetrwObtain : unsupported method")
-    return
    endif
+"   call Dret("NetrwMenu")
+   return
+  endif
 
-   " restore status line
-   if type(a:fname) == 1 && exists("s:netrw_users_stl")
-    call s:SetupNetrwStatusLine(s:netrw_users_stl)
-   endif
+endfun
 
-  endif
+" ---------------------------------------------------------------------
+" s:NetrwObtain: obtain file under cursor or from markfile list {{{2
+"                Used by the O maps (as <SID>NetrwObtain())
+fun! s:NetrwObtain(islocal)
+"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
 
-  " cleanup
-  if exists("tmpbufnr")
-   if bufnr("%") != tmpbufnr
-    exe tmpbufnr."bw!"
-   else
-    q!
-   endif
+  let ykeep= @@
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
+   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
+   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
+  else
+   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
   endif
+  let @@= ykeep
 
-"  call Dret("netrw#NetrwObtain")
+"  call Dret("NetrwObtain")
 endfun
 
 " ---------------------------------------------------------------------
@@ -5506,6 +6709,7 @@
 fun! s:NetrwPrevWinOpen(islocal)
 "  call Dfunc("NetrwPrevWinOpen(islocal=".a:islocal.")")
 
+  let ykeep= @@
   " grab a copy of the b:netrw_curdir to pass it along to newly split windows
   let curdir    = b:netrw_curdir
 
@@ -5520,19 +6724,21 @@
    " if only one window, open a new one first
 "   call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")")
    if g:netrw_preview
-"    call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s")
-    exe (g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s"
-   else
-"    call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-    exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+    let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
+"    call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s")
+    exe (g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s"
+   else
+    let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
+"    call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
+    exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
    endif
    let didsplit  = 1
 
   else
-   call s:SaveBufVars()
+   keepj call s:SaveBufVars()
 "   call Decho("wincmd p")
    wincmd p
-   call s:RestoreBufVars()
+   keepj call s:RestoreBufVars()
    " if the previous window's buffer has been changed (is modified),
    " and it doesn't appear in any other extant window, then ask the
    " user if s/he wants to abandon modifications therein.
@@ -5554,7 +6760,7 @@
      if choice == 1
       " Yes -- write file & then browse
       let v:errmsg= ""
-      silent w
+      sil w
       if v:errmsg != ""
        call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30)
        if didsplit
@@ -5562,14 +6768,17 @@
        else
        	wincmd p
        endif
+       let @@= ykeep
 "       call Dret("NetrwPrevWinOpen ".choice." : unable to write <".bufname.">")
        return choice
       endif
 
      elseif choice == 2
       " No -- don't worry about changed file, just browse anyway
-      setlocal nomod
-      call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
+"      call Decho("(NetrwPrevWinOpen) setl nomod")
+      setl nomod
+"      call Decho("(NetrwPrevWinOpen) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+      keepj call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
       wincmd p
 
      else
@@ -5579,6 +6788,7 @@
       else
        wincmd p
       endif
+      let @@= ykeep
 "      call Dret("NetrwPrevWinOpen ".choice." : cancelled")
       return choice
      endif
@@ -5595,6 +6805,7 @@
     call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,curword))
    endif
   endif
+  let @@= ykeep
 "  call Dret("NetrwPrevWinOpen ".choice)
   return choice
 endfun
@@ -5644,7 +6855,7 @@
 "   call Decho("handle uploading a list of files via scp")
    let curdir= getcwd()
    if a:tgt =~ '^scp:'
-    exe "keepjumps silent lcd ".fnameescape(fromdir)
+    exe "keepjumps sil lcd ".fnameescape(fromdir)
     let filelist= deepcopy(s:netrwmarkfilelist_{bufnr('%')})
     let args    = join(map(filelist,"shellescape(v:val, 1)"))
     if exists("g:netrw_port") && g:netrw_port != ""
@@ -5656,7 +6867,7 @@
     let tgt     = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','')
 "    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1))
     exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)
-    exe "keepjumps silent lcd ".fnameescape(curdir)
+    exe "keepjumps sil lcd ".fnameescape(curdir)
 
    elseif a:tgt =~ '^ftp:'
     call s:NetrwMethod(a:tgt)
@@ -5678,6 +6889,9 @@
      keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
 "     call Decho("filter input: ".getline('$'))
 
+     if tgtdir == ""
+      let tgtdir= '/'
+     endif
      keepj call setline(line("$")+1,'cd "'.tgtdir.'"')
 "     call Decho("filter input: ".getline('$'))
 
@@ -5687,12 +6901,12 @@
      endfor
 
      if exists("g:netrw_port") && g:netrw_port != ""
-"      call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+"      call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
      else
 "      call Decho("filter input window#".winnr())
-"      call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+"      call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
      endif
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
      sil keepj g/Local directory now/d
@@ -5706,9 +6920,9 @@
     elseif b:netrw_method == 3
      " upload with ftp + machine, id, passwd, and fname (ie. no .netrc)
      let netrw_fname= b:netrw_fname
-     call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
+     keepj call s:SaveBufVars()|sil keepj new|keepj call s:RestoreBufVars()
      let tmpbufnr= bufnr("%")
-     setlocal ff=unix
+     setl ff=unix
 
      if exists("g:netrw_port") && g:netrw_port != ""
       keepj put ='open '.g:netrw_machine.' '.g:netrw_port
@@ -5718,14 +6932,18 @@
 "      call Decho("filter input: ".getline('$'))
      endif
 
-     if exists("g:netrw_ftp") && g:netrw_ftp == 1
-      keepj put =g:netrw_uid
-"      call Decho("filter input: ".getline('$'))
-      keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
-"      call Decho("filter input: ".getline('$'))
-     else
-      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
-"      call Decho("filter input: ".getline('$'))
+     if exists("g:netrw_uid") && g:netrw_uid != ""
+      if exists("g:netrw_ftp") && g:netrw_ftp == 1
+       keepj put =g:netrw_uid
+"       call Decho("filter input: ".getline('$'))
+       if exists("s:netrw_passwd")
+        keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
+       endif
+"       call Decho("filter input: ".getline('$'))
+      elseif exists("s:netrw_passwd")
+       keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+"       call Decho("filter input: ".getline('$'))
+      endif
      endif
 
      keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
@@ -5751,14 +6969,14 @@
      " -n  unix : DON'T use <.netrc>, even though it exists
      " -n  win32: quit being obnoxious about password
      keepj norm! 1Gdd
-"     call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n")
-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+"     call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
      sil keepj g/Local directory now/d
      call histdel("/",-1)
      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
       let debugkeep= &debug
-      setlocal debug=msg
+      setl debug=msg
       call netrw#ErrorMsg(s:ERROR,getline(1),15)
       let &debug = debugkeep
       let mod    = 1
@@ -5781,25 +6999,28 @@
 " s:NetrwPreview: {{{2
 fun! s:NetrwPreview(path) range
 "  call Dfunc("NetrwPreview(path<".a:path.">)")
-  call s:NetrwOptionSave("s:")
-  call s:NetrwSafeOptions()
+  let ykeep= @@
+  keepj call s:NetrwOptionSave("s:")
+  keepj call s:NetrwSafeOptions()
   if has("quickfix")
    if !isdirectory(a:path)
     if g:netrw_preview && !g:netrw_alto
-     let pvhkeep= &pvh
-     let &pvh   = winwidth(0) - g:netrw_winsize
+     let pvhkeep = &pvh
+     let winsz   = (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
+     let &pvh    = winwidth(0) - winsz
     endif
     exe (g:netrw_alto? "top " : "bot ").(g:netrw_preview? "vert " : "")."pedit ".fnameescape(a:path)
     if exists("pvhkeep")
      let &pvh= pvhkeep
     endif
    elseif !exists("g:netrw_quiet")
-    call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
+    keepj call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
    endif
   elseif !exists("g:netrw_quiet")
-   call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
+   keepj call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
   endif
-  call s:NetrwOptionRestore("s:")
+  keepj call s:NetrwOptionRestore("s:")
+  let @@= ykeep
 "  call Dret("NetrwPreview")
 endfun
 
@@ -5808,18 +7029,21 @@
 fun! s:NetrwRefresh(islocal,dirname)
 "  call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction)
   " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first.
-  " NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
-  " Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
-  setlocal ma noro
-"  call Decho("setlocal ma noro")
+  " (defunct) NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
+  " (defunct) Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
+  setl ma noro
+"  call Decho("setl ma noro")
 "  call Decho("clear buffer<".expand("%")."> with :%d")
+  let ykeep      = @@
+  let screenposn = netrw#NetrwSavePosn()
+"  call Decho("clearing buffer prior to refresh")
   sil! keepj %d
   if a:islocal
-   call netrw#LocalBrowseCheck(a:dirname)
+   keepj call netrw#LocalBrowseCheck(a:dirname)
   else
-   call s:NetrwBrowse(a:islocal,a:dirname)
+   keepj call s:NetrwBrowse(a:islocal,a:dirname)
   endif
-  call netrw#NetrwRestorePosn()
+  keepj call netrw#NetrwRestorePosn(screenposn)
 
   " restore file marks
   if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
@@ -5830,7 +7054,8 @@
    2match none
   endif
 
-"  redraw!
+"  restore
+  let @@= ykeep
 "  call Dret("NetrwRefresh")
 endfun
 
@@ -5839,7 +7064,7 @@
 "                    Called by NetrwMarkFileCopy()
 "                    Interfaces to s:NetrwRefresh() and s:LocalBrowseShellCmdRefresh()
 fun! s:NetrwRefreshDir(islocal,dirname)
-"  call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) fastbrowse=".g:netrw_fastbrowse)
+"  call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) g:netrw_fastbrowse=".g:netrw_fastbrowse)
   if g:netrw_fastbrowse == 0
    " slowest mode (keep buffers refreshed, local or remote)
 "   call Decho("slowest mode: keep buffers refreshed, local or remote")
@@ -5851,18 +7076,18 @@
     let curwin= winnr()
 "    call Decho("refresh tgtwin#".tgtwin." (curwin#".curwin.")")
     exe tgtwin."wincmd w"
-    call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) 
+    keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) 
     exe curwin."wincmd w"
 
    elseif bufnr(a:dirname) > 0
     let bn= bufnr(a:dirname)
 "    call Decho("bd bufnr(".a:dirname.")=".bn)
-    exe "silent bd ".bn
+    exe "sil bd ".bn
    endif
 
   elseif g:netrw_fastbrowse <= 1
 "   call Decho("medium-speed mode: refresh local buffers only")
-   call s:LocalBrowseShellCmdRefresh()
+   keepj call s:LocalBrowseShellCmdRefresh()
   endif
 "  call Dret("s:NetrwRefreshDir")
 endfun
@@ -5875,6 +7100,7 @@
 "          front.  An "*" pattern handles the default priority.
 fun! s:NetrwSetSort()
 "  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
+  let ykeep= @@
   if w:netrw_liststyle == s:LONGLIST
    let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
   else
@@ -5918,13 +7144,13 @@
     " sometimes multiple sorting patterns will match the same file or directory.
     " The following substitute is intended to remove the excess matches.
     exe 'sil keepj '.w:netrw_bannercnt.',$g/^\d\{3}'.g:netrw_sepchr.'\d\{3}\//s/^\d\{3}'.g:netrw_sepchr.'\(\d\{3}\/\).\@=/\1/e'
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
    endif
    let priority = priority + 1
   endwhile
   if exists("starpriority")
    exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/'
-   call histdel("/",-1)
+   keepj call histdel("/",-1)
   endif
 
   " Following line associated with priority -- items that satisfy a priority
@@ -5934,22 +7160,54 @@
   " priority prefixes need to be removed, but not directories that happen to
   " be just digits themselves.
   exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\d\{3}'.g:netrw_sepchr.'\)\%(\d\{3}'.g:netrw_sepchr.'\)\+\ze./\1/e'
-  call histdel("/",-1)
+  keepj call histdel("/",-1)
+  let @@= ykeep
 
 "  call Dret("SetSort")
 endfun
 
+" ---------------------------------------------------------------------
+" s:NetrwSetTgt: sets the target to the specified choice index {{{2
+"    Implements [count]Tb  (bookhist<b>)
+"               [count]Th  (bookhist<h>)
+"               See :help netrw-qb for how to make the choice.
+fun! s:NetrwSetTgt(bookhist,choice)
+"  call Dfunc("s:NetrwSetTgt(bookhist<".a:bookhist."> choice#".a:choice.")")
+
+  if     a:bookhist == 'b'
+   " supports choosing a bookmark as a target using a qb-generated list
+   let choice= a:choice - 1
+   if exists("g:netrw_bookmarklist[".choice."]")
+    call netrw#NetrwMakeTgt(g:netrw_bookmarklist[choice])
+   else
+    echomsg "Sorry, bookmark#".a:choice." doesn't exist!"
+   endif
+
+  elseif a:bookhist == 'h'
+   " supports choosing a history stack entry as a target using a qb-generated list
+   let choice= (a:choice % g:netrw_dirhistmax) + 1
+   if exists("g:netrw_dirhist_".choice)
+    let histentry = g:netrw_dirhist_{choice}
+    call netrw#NetrwMakeTgt(histentry)
+   else
+    echomsg "Sorry, history#".a:choice." not available!"
+   endif
+  endif
+
+"  call Dret("s:NetrwSetTgt")
+endfun
+
 " =====================================================================
 " s:NetrwSortStyle: change sorting style (name - time - size) and refresh display {{{2
 fun! s:NetrwSortStyle(islocal)
 "  call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">")
-  call s:NetrwSaveWordPosn()
+  keepj call s:NetrwSaveWordPosn()
   let svpos= netrw#NetrwSavePosn()
 
   let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'
   keepj norm! 0
-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
 
 "  call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">")
 endfun
@@ -5965,15 +7223,17 @@
 fun! s:NetrwSplit(mode)
 "  call Dfunc("s:NetrwSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv)
 
+  let ykeep= @@
   call s:SaveWinVars()
 
   if a:mode == 0
    " remote and o
-"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
+"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
+   exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+   keepj call s:RestoreWinVars()
+   keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
    unlet s:didsplit
 
   elseif a:mode == 1
@@ -5982,26 +7242,28 @@
 "   call Decho("tabnew")
    tabnew
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,newdir)
+   keepj call s:RestoreWinVars()
+   keepj call s:NetrwBrowse(0,newdir)
    unlet s:didsplit
 
   elseif a:mode == 2
    " remote and v
-"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
+"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v")
+   exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v"
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+   keepj call s:RestoreWinVars()
+   keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
    unlet s:didsplit
 
   elseif a:mode == 3
    " local and o
-"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
+   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
+"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
+   exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+   keepj call s:RestoreWinVars()
+   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
    unlet s:didsplit
 
   elseif a:mode == 4
@@ -6012,57 +7274,76 @@
    tabnew
    let b:netrw_curdir= netrw_curdir
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword))
+   keepj call s:RestoreWinVars()
+   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword))
    unlet s:didsplit
 
   elseif a:mode == 5
    " local and v
-"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
+   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
+"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v")
+   exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v"
    let s:didsplit= 1
-   call s:RestoreWinVars()
-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+   keepj call s:RestoreWinVars()
+   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
    unlet s:didsplit
 
   else
-   call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45)
+   keepj call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45)
   endif
 
+  let @@= ykeep
 "  call Dret("s:NetrwSplit")
 endfun
 
 " ---------------------------------------------------------------------
-" NetrwStatusLine: {{{2
-fun! NetrwStatusLine()
+" s:NetrwTgtMenu: {{{2
+fun! s:NetrwTgtMenu()
+  if !exists("s:netrw_menucnt")
+   return
+  endif
+"  call Dfunc("s:NetrwTgtMenu()")
 
-" vvv NetrwStatusLine() debugging vvv
-"  let g:stlmsg=""
-"  if !exists("w:netrw_explore_bufnr")
-"   let g:stlmsg="!X<explore_bufnr>"
-"  elseif w:netrw_explore_bufnr != bufnr("%")
-"   let g:stlmsg="explore_bufnr!=".bufnr("%")
-"  endif
-"  if !exists("w:netrw_explore_line")
-"   let g:stlmsg=" !X<explore_line>"
-"  elseif w:netrw_explore_line != line(".")
-"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
-"  endif
-"  if !exists("w:netrw_explore_list")
-"   let g:stlmsg=" !X<explore_list>"
-"  endif
-" ^^^ NetrwStatusLine() debugging ^^^
+  " the following test assures that gvim is running, has menus available, and has menus enabled.
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+   if exists("g:NetrwTopLvlMenu")
+"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
+    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Targets'
+   endif
+   if !exists("s:netrw_initbookhist")
+    call s:NetrwBookHistRead()
+   endif
 
-  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
-   " restore user's status line
-   let &stl        = s:netrw_users_stl
-   let &laststatus = s:netrw_users_ls
-   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
-   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
-   return ""
-  else
-   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
+   " target bookmarked places
+   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0
+"    call Decho("installing bookmarks as easy targets")
+    let cnt= 1
+    for bmd in g:netrw_bookmarklist
+     let ebmd= escape(bmd,g:netrw_menu_escape)
+     " show bookmarks for goto menu
+"     call Decho("menu: Targets: ".bmd)
+     exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.1.".cnt." ".g:NetrwTopLvlMenu.'Targets.'.ebmd."	:call netrw#NetrwMakeTgt('".bmd."')\<cr>"
+     let cnt= cnt + 1
+    endfor
+   endif
+
+   " target directory browsing history
+   if exists("g:netrw_dirhistmax") && g:netrw_dirhistmax > 0
+"    call Decho("installing history as easy targets (histmax=".g:netrw_dirhistmax.")")
+    let histcnt = 1
+    while histcnt <= g:netrw_dirhistmax
+     let priority = g:netrw_dirhist_cnt + histcnt
+     if exists("g:netrw_dirhist_{histcnt}")
+      let histentry  = g:netrw_dirhist_{histcnt}
+      let ehistentry = escape(histentry,g:netrw_menu_escape)
+"      call Decho("menu: Targets: ".histentry)
+      exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.2.".priority." ".g:NetrwTopLvlMenu.'Targets.'.ehistentry."	:call netrw#NetrwMakeTgt('".histentry."')\<cr>"
+     endif
+     let histcnt = histcnt + 1
+    endwhile
+   endif
   endif
+"  call Dret("s:NetrwTgtMenu")
 endfun
 
 " ---------------------------------------------------------------------
@@ -6072,12 +7353,12 @@
 "  call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">")
 
   let treedir= b:netrw_curdir
-"  call Decho("set initial treedir<".treedir.">")
+"  call Decho("(NetrwTreeDir) set initial treedir<".treedir.">")
   let s:treecurpos= netrw#NetrwSavePosn()
 
   if w:netrw_liststyle == s:TREELIST
-"   call Decho("w:netrrw_liststyle is TREELIST:")
-"   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
+"   call Decho("(NetrwTreeDir) w:netrw_liststyle is TREELIST:")
+"   call Decho("(NetrwTreeDir) line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
 
    " extract tree directory if on a line specifying a subdirectory (ie. ends with "/")
    if getline('.') =~ '/$'
@@ -6085,13 +7366,13 @@
    else
     let treedir= ""
    endif
-"   call Decho("treedir<".treedir.">")
+"   call Decho("(NetrwTreeDir) treedir<".treedir.">")
 
    " detect user attempting to close treeroot
    if getline('.') !~ '|' && getline('.') != '..'
 "    call Decho("user attempted to close treeroot")
     " now force a refresh
-"    call Decho("clear buffer<".expand("%")."> with :%d")
+"    call Decho("(NetrwTreeDir) clear buffer<".expand("%")."> with :%d")
     sil! keepj %d
 "    call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
     return b:netrw_curdir
@@ -6099,26 +7380,26 @@
 
    " elide all non-depth information
    let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
-"   call Decho("depth<".depth."> 1st subst (non-depth info removed)")
+"   call Decho("(NetrwTreeDir) depth<".depth."> 1st subst (non-depth info removed)")
 
    " elide first depth
    let depth = substitute(depth,'^| ','','')
-"   call Decho("depth<".depth."> 2nd subst (first depth removed)")
+"   call Decho("(NetrwTreeDir) depth<".depth."> 2nd subst (first depth removed)")
 
    " construct treedir by searching backwards at correct depth
-"   call Decho("constructing treedir<".treedir."> depth<".depth.">")
+"   call Decho("(NetrwTreeDir) constructing treedir<".treedir."> depth<".depth.">")
    while depth != "" && search('^'.depth.'[^|].\{-}/$','bW')
     let dirname= substitute(getline('.'),'^\(| \)*','','e')
     let treedir= dirname.treedir
     let depth  = substitute(depth,'^| ','','')
-"    call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
+"    call Decho("(NetrwTreeDir) constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
    endwhile
    if w:netrw_treetop =~ '/$'
     let treedir= w:netrw_treetop.treedir
    else
     let treedir= w:netrw_treetop.'/'.treedir
    endif
-"   call Decho("bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
+"   call Decho("(NetrwTreeDir) bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
   endif
   let treedir= substitute(treedir,'//$','/','')
 
@@ -6132,7 +7413,7 @@
 "  call Dfunc("NetrwTreeDisplay(dir<".a:dir."> depth<".a:depth.">)")
 
   " insure that there are no folds
-  setlocal nofen
+  setl nofen
 
   " install ../ and shortdir
   if a:depth == ""
@@ -6167,10 +7448,10 @@
 "   call Decho("dir<".dir."> entry<".entry."> direntry<".direntry.">")
    if entry =~ '/$' && has_key(w:netrw_treedict,direntry)
 "    call Decho("<".direntry."> is a key in treedict - display subtree for it")
-    call s:NetrwTreeDisplay(direntry,depth)
+    keepj call s:NetrwTreeDisplay(direntry,depth)
    elseif entry =~ '/$' && has_key(w:netrw_treedict,direntry.'/')
 "    call Decho("<".direntry."/> is a key in treedict - display subtree for it")
-    call s:NetrwTreeDisplay(direntry.'/',depth)
+    keepj call s:NetrwTreeDisplay(direntry.'/',depth)
    else
 "    call Decho("<".entry."> is not a key in treedict (no subtree)")
     sil! keepj call setline(line("$")+1,depth.entry)
@@ -6219,9 +7500,10 @@
 "   call Decho("fname<".fname.">")
 
    " display from treetop on down
-   call s:NetrwTreeDisplay(w:netrw_treetop,"")
+   keepj call s:NetrwTreeDisplay(w:netrw_treetop,"")
 
 "   call Dret("NetrwTreeListing : bufname<".expand("%").">")
+   return
   endif
 endfun
 
@@ -6235,12 +7517,12 @@
    " cpf: characters per filename
    " fpl: filenames per line
    " fpc: filenames per column
-   setlocal ma noro
-"   call Decho("setlocal ma noro")
+   setl ma noro
+"   call Decho("setl ma noro")
    let b:netrw_cpf= 0
    if line("$") >= w:netrw_bannercnt
     exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
    else
 "    call Dret("NetrwWideListing")
     return
@@ -6257,7 +7539,7 @@
 
    " make wide display
    exe 'sil keepj '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
-   call histdel("/",-1)
+   keepj call histdel("/",-1)
    let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
    let newcolstart = w:netrw_bannercnt + fpc
    let newcolend   = newcolstart + fpc - 1
@@ -6275,11 +7557,23 @@
     exe "sil! keepj ".newcolstart.','.newcolend.'d'
     exe 'sil! keepj '.w:netrw_bannercnt
    endwhile
-   silent! let @*= keepregstar
+   sil! let @*= keepregstar
    exe "sil! keepj ".w:netrw_bannercnt.',$s/\s\+$//e'
-   call histdel("/",-1)
-   setlocal noma nomod ro
+   keepj call histdel("/",-1)
+   exe "nmap <buffer> <silent> w	/^\\\\|\\s\\s\\zs\\S/\<cr>"
+   exe "nmap <buffer> <silent> b	?^\\\\|\\s\\s\\zs\\S?\<cr>"
+"   call Decho("NetrwWideListing) setl noma nomod ro")
+   setl noma nomod ro
+"   call Decho("(NetrwWideListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "   call Dret("NetrwWideListing")
+   return
+  else
+   if hasmapto("w","n")
+    sil! nunmap <buffer> w
+   endif
+   if hasmapto("b","n")
+    sil! nunmap <buffer> b
+   endif
   endif
 
 endfun
@@ -6289,33 +7583,47 @@
 fun! s:PerformListing(islocal)
 "  call Dfunc("s:PerformListing(islocal=".a:islocal.") bufnr(%)=".bufnr("%")."<".bufname("%").">")
 
-  call s:NetrwSafeOptions()
-  setlocal noro ma
-"  call Decho("setlocal noro ma")
+  " set up syntax highlighting {{{3
+"  call Decho("(PerformListing) set up syntax highlighting")
+  if has("syntax")
+   if !exists("g:syntax_on") || !g:syntax_on
+"    call Decho("(PerformListing) but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "<doesn't exist>"))
+    setl ft=
+   elseif &ft != "netrw"
+    setl ft=netrw
+   endif
+  endif
+
+  keepj call s:NetrwSafeOptions()
+  set noro ma
+"  call Decho("(PerformListing) setl noro ma bh=".&bh)
 
 "  if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1	" Decho
-"   call Decho("(netrw) Processing your browsing request...")
+"   call Decho("(PerformListing) (netrw) Processing your browsing request...")
 "  endif								" Decho
 
 "  call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a'))
   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
    " force a refresh for tree listings
-"   call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
+"   call Decho("(PerformListing) force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
    sil! keepj %d
   endif
 
   " save current directory on directory history list
-  call s:NetrwBookHistHandler(3,b:netrw_curdir)
+  keepj call s:NetrwBookHistHandler(3,b:netrw_curdir)
 
   " Set up the banner {{{3
   if g:netrw_banner
-"   call Decho("set up banner")
-   keepj put ='\" ============================================================================'
-   keepj put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
-   keepj put ='\"   '.b:netrw_curdir
-   keepj 1d
+"   call Decho("(PerformListing) set up banner")
+   keepj call setline(1,'" ============================================================================')
+   keepj call setline(2,'" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')')
+   if exists("g:netrw_bannerbackslash") && g:netrw_bannerbackslash
+    keepj call setline(3,'"   '.substitute(b:netrw_curdir,'/','\\','g'))
+   else
+    keepj call setline(3,'"   '.b:netrw_curdir)
+   endif
    let w:netrw_bannercnt= 3
-   exe "sil! keepj ".w:netrw_bannercnt
+   keepj exe "sil! keepj ".w:netrw_bannercnt
   else
    keepj 1
    let w:netrw_bannercnt= 1
@@ -6328,15 +7636,15 @@
 
   " Sorted by... {{{3
   if g:netrw_banner
-"   call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
+"   call Decho("(PerformListing) handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
    if g:netrw_sort_by =~ "^n"
-"   call Decho("directories will be sorted by name")
+"   call Decho("(PerformListing) directories will be sorted by name")
     " sorted by name
     keepj put ='\"   Sorted by      '.sortby
     keepj put ='\"   Sort sequence: '.g:netrw_sort_sequence
     let w:netrw_bannercnt= w:netrw_bannercnt + 2
    else
-"   call Decho("directories will be sorted by size or time")
+"   call Decho("(PerformListing) directories will be sorted by size or time")
     " sorted by size or date
     keepj put ='\"   Sorted by '.sortby
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
@@ -6347,7 +7655,7 @@
   " show copy/move target, if any
   if g:netrw_banner
    if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal")
-"    call Decho("show copy/move target<".s:netrwmftgt.">")
+"    call Decho("(PerformListing) show copy/move target<".s:netrwmftgt.">")
     keepj put =''
     if s:netrwmftgt_islocal
      sil! keepj call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
@@ -6356,14 +7664,14 @@
     endif
     let w:netrw_bannercnt= w:netrw_bannercnt + 1
    else
-"    call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
+"    call Decho("(PerformListing) s:netrwmftgt does not exist, don't make Copy/Move Tgt")
    endif
    exe "sil! keepj ".w:netrw_bannercnt
   endif
 
   " Hiding...  -or-  Showing... {{{3
   if g:netrw_banner
-"   call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
+"   call Decho("(PerformListing) handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
    if g:netrw_list_hide != "" && g:netrw_hide
     if g:netrw_hide == 1
      keepj put ='\"   Hiding:        '.g:netrw_list_hide
@@ -6382,43 +7690,38 @@
   if g:netrw_banner
    let w:netrw_bannercnt= w:netrw_bannercnt + 1
    exe "sil! keepj ".w:netrw_bannercnt
-"   call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
-  endif
-
-  " set up syntax highlighting {{{3
-"  call Decho("set up syntax highlighting")
-  if has("syntax")
-   setf netrw
-   if !exists("g:syntax_on") || !g:syntax_on
-    setlocal ft=
-   endif
+"   call Decho("(PerformListing) w:netrw_bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
   endif
 
   " get list of files
-"  call Decho("Get list of files - islocal=".a:islocal)
+"  call Decho("(PerformListing) Get list of files - islocal=".a:islocal)
   if a:islocal
-   call s:LocalListing()
+   keepj call s:LocalListing()
   else " remote
-   call s:NetrwRemoteListing()
+   keepj call s:NetrwRemoteListing()
   endif
-"  call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
 
   " manipulate the directory listing (hide, sort) {{{3
+  if !exists("w:netrw_bannercnt")
+   let w:netrw_bannercnt= 0
+  endif
+"  call Decho("(PerformListing) g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
+
   if !g:netrw_banner || line("$") >= w:netrw_bannercnt
-"   call Decho("manipulate directory listing (hide)")
-"   call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
+"   call Decho("(PerformListing) manipulate directory listing (hide)")
+"   call Decho("(PerformListing) g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
    if g:netrw_hide && g:netrw_list_hide != ""
-    call s:NetrwListHide()
+    keepj call s:NetrwListHide()
    endif
    if !g:netrw_banner || line("$") >= w:netrw_bannercnt
-"    call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
+"    call Decho("(PerformListing) manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
 
     if g:netrw_sort_by =~ "^n"
      " sort by name
-     call s:NetrwSetSort()
+     keepj call s:NetrwSetSort()
 
      if !g:netrw_banner || w:netrw_bannercnt < line("$")
-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
+"      call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
       if g:netrw_sort_direction =~ 'n'
        " normal direction sorting
        exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
@@ -6428,22 +7731,22 @@
       endif
      endif
      " remove priority pattern prefix
-"     call Decho("remove priority pattern prefix")
+"     call Decho("(PerformListing) remove priority pattern prefix")
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e'
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
 
     elseif a:islocal
      if !g:netrw_banner || w:netrw_bannercnt < line("$")
-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
+"      call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction)
       if g:netrw_sort_direction =~ 'n'
-"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort')
+"       call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort')
        exe 'sil! keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
       else
-"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
+"       call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort!')
        exe 'sil! keepj '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
       endif
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
      endif
     endif
 
@@ -6457,31 +7760,35 @@
   endif
 
   " convert to wide/tree listing {{{3
-"  call Decho("modify display if wide/tree listing style")
-  call s:NetrwWideListing()
-  call s:NetrwTreeListing(b:netrw_curdir)
+"  call Decho("(PerformListing) modify display if wide/tree listing style")
+  keepj call s:NetrwWideListing()
+  keepj call s:NetrwTreeListing(b:netrw_curdir)
 
   if exists("w:netrw_bannercnt") && (line("$") > w:netrw_bannercnt || !g:netrw_banner)
    " place cursor on the top-left corner of the file listing
-"   call Decho("place cursor on top-left corner of file listing")
+"   call Decho("(PerformListing) place cursor on top-left corner of file listing")
    exe 'sil! keepj '.w:netrw_bannercnt
    sil! keepj norm! 0
   endif
 
   " record previous current directory
   let w:netrw_prvdir= b:netrw_curdir
-"  call Decho("record netrw_prvdir<".w:netrw_prvdir.">")
+"  call Decho("(PerformListing) record netrw_prvdir<".w:netrw_prvdir.">")
 
   " save certain window-oriented variables into buffer-oriented variables {{{3
-  call s:SetBufWinVars()
-  call s:NetrwOptionRestore("w:")
+  keepj call s:SetBufWinVars()
+  keepj call s:NetrwOptionRestore("w:")
 
   " set display to netrw display settings
-"  call Decho("set display to netrw display settings (noma nomod etc)")
+"  call Decho("(PerformListing) set display to netrw display settings (".g:netrw_bufsettings.")")
   exe "setl ".g:netrw_bufsettings
+  if g:netrw_liststyle == s:LONGLIST
+"   call Decho("(PerformListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
+   exe "setl ts=".(g:netrw_maxfilenamelen+1)
+  endif
   if exists("s:treecurpos")
 
-   call netrw#NetrwRestorePosn(s:treecurpos)
+   keepj call netrw#NetrwRestorePosn(s:treecurpos)
    unlet s:treecurpos
   endif
 
@@ -6524,7 +7831,7 @@
   " insure that windows have a statusline
   " make sure statusline is displayed
   let &stl=a:statline
-  setlocal laststatus=2
+  setl laststatus=2
 "  call Decho("stl=".&stl)
   redraw
 
@@ -6541,10 +7848,18 @@
 "  call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)")
 
   call s:RemotePathAnalysis(b:netrw_curdir)
+"  call Decho("b:netrw_method#".(exists("b:netrw_method")? b:netrw_method : 'n/a'))
+"  call Decho("g:netrw_list_cmd<".(exists("g:netrw_list_cmd")? g:netrw_list_cmd : 'n/a').">")
+"  call Decho("ssh  is ".(executable("ssh")?  "" : "not ")."executable")
+"  call Decho("ftp  is ".(executable("ftp")?  "" : "not ")."executable")
+"  call Decho("sftp is ".(executable("sftp")? "" : "not ")."executable")
 
   " sanity check:
   if exists("b:netrw_method") && b:netrw_method =~ '[235]'
-"   call Decho("b:netrw_method=".b:netrw_method)
+   " b:netrw_method = 2: ftp+.netrc
+   " b:netrw_method = 3: ftp+machine,id,p/w,filename (ie. no .netrc)
+   " b:netrw_method = 5: wget (http)
+"   call Decho("b:netrw_method=".b:netrw_method." (for ".s:method.")")
    if !executable("ftp")
     if !exists("g:netrw_quiet")
      call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18)
@@ -6554,30 +7869,31 @@
     return
    endif
 
-  elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
+  elseif s:method == "scp" && (!exists("g:netrw_list_cmd") || g:netrw_list_cmd == '')
+"   call Decho("g:netrw_list_cmd<".(exists("g:netrw_list_cmd")? g:netrw_list_cmd : 'n/a').">")
    if !exists("g:netrw_quiet")
-    if g:netrw_list_cmd == ""
-     call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47)
+    if !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ""
+     keepj call netrw#ErrorMsg(s:ERROR,"neither ssh nor ftp"." is executable on your system",47)
     else
-     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
+     keepj call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
     endif
    endif
 
-   call s:NetrwOptionRestore("w:")
+   keepj call s:NetrwOptionRestore("w:")
 "   call Dret("s:NetrwRemoteListing")
    return
   endif  " (remote handling sanity check)
 
   if exists("b:netrw_method")
-"   call Decho("setting w:netrw_method<".b:netrw_method.">")
+"   call Decho("setting w:netrw_method to b:netrw_method<".b:netrw_method.">")
    let w:netrw_method= b:netrw_method
   endif
 
   if s:method == "ftp"
-   " use ftp to get remote file listing
+   " use ftp to get remote file listing {{{3
 "   call Decho("use ftp to get remote file listing")
-   let s:method  = "ftp"
-   let listcmd = g:netrw_ftp_list_cmd
+   let s:method = "ftp"
+   let listcmd  = g:netrw_ftp_list_cmd
    if g:netrw_sort_by =~ '^t'
     let listcmd= g:netrw_ftp_timelist_cmd
    elseif g:netrw_sort_by =~ '^s'
@@ -6595,19 +7911,19 @@
     " cleanup
     if g:netrw_ftp_browse_reject != ""
      exe "sil! keepalt keepj g/".g:netrw_ftp_browse_reject."/keepj d"
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
     endif
     sil! keepj %s/\r$//e
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
 
-    " if there's no ../ listed, then put ./ and ../ in
+    " if there's no ../ listed, then put ../ in
     let line1= line(".")
     exe "sil! keepj ".w:netrw_bannercnt
-    let line2= search('^\.\.\/\%(\s\|$\)','cnW')
+    let line2= search('\.\.\/\%(\s\|$\)','cnW')
+"    call Decho("search(".'\.\.\/\%(\s\|$\)'."','cnW')=".line2."  w:netrw_bannercnt=".w:netrw_bannercnt)
     if line2 == 0
-"     call Decho("netrw is putting ./ and ../ into listing")
+"     call Decho("netrw is putting ../ into listing")
      sil! keepj put='../'
-     sil! keepj put='./'
     endif
     exe "sil! keepj ".line1
     sil! keepj norm! 0
@@ -6616,15 +7932,15 @@
     if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
 "     call Decho("M$ ftp cleanup")
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
     else " normal ftp cleanup
 "     call Decho("normal ftp cleanup")
      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
      exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
      exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
-     call histdel("/",-1)
-     call histdel("/",-1)
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
+     keepj call histdel("/",-1)
+     keepj call histdel("/",-1)
     endif
    endif
 
@@ -6634,35 +7950,35 @@
    let listcmd= s:MakeSshCmd(g:netrw_list_cmd)
 "   call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)")
    if g:netrw_scp_cmd =~ '^pscp'
-"    call Decho("1: exe silent r! ".shellescape(listcmd.s:path, 1))
+"    call Decho("1: exe sil r! ".shellescape(listcmd.s:path, 1))
     exe "sil! keepj r! ".listcmd.shellescape(s:path, 1)
     " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like
     sil! keepj g/^Listing directory/keepj d
     sil! keepj g/^d[-rwx][-rwx][-rwx]/keepj s+$+/+e
     sil! keepj g/^l[-rwx][-rwx][-rwx]/keepj s+$+@+e
-    call histdel("/",-1)
-    call histdel("/",-1)
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
+    keepj call histdel("/",-1)
+    keepj call histdel("/",-1)
     if g:netrw_liststyle != s:LONGLIST
      sil! keepj g/^[dlsp-][-rwx][-rwx][-rwx]/keepj s/^.*\s\(\S\+\)$/\1/e
-     call histdel("/",-1)
+     keepj call histdel("/",-1)
     endif
    else
     if s:path == ""
-"     call Decho("2: exe silent r! ".listcmd)
-     exe "sil! keepalt r! ".listcmd
+"     call Decho("2: exe sil r! ".listcmd)
+     exe "sil! keepj keepalt r! ".listcmd
     else
-"     call Decho("3: exe silent r! ".listcmd.' '.shellescape(s:path,1))
-     exe "sil! keepalt r! ".listcmd.' '.shellescape(s:path,1)
+"     call Decho("3: exe sil r! ".listcmd.' '.shellescape(fnameescape(s:path),1))
+     exe "sil! keepj keepalt r! ".listcmd.' '.shellescape(fnameescape(s:path),1)
 "     call Decho("listcmd<".listcmd."> path<".s:path.">")
     endif
    endif
 
    " cleanup
    if g:netrw_ftp_browse_reject != ""
-"    call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d")
+"    call Decho("(cleanup) exe sil! g/".g:netrw_ssh_browse_reject."/keepjumps d")
     exe "sil! g/".g:netrw_ssh_browse_reject."/keepj d"
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
    endif
   endif
 
@@ -6676,13 +7992,12 @@
     while getline('.') =~ g:netrw_ftp_browse_reject
      sil! keepj d
     endwhile
-    " if there's no ../ listed, then put ./ and ../ in
+    " if there's no ../ listed, then put ../ in
     let line1= line(".")
     sil! keepj 1
     sil! keepj call search('^\.\.\/\%(\s\|$\)','W')
     let line2= line(".")
     if line2 == 0
-     exe 'sil! keepj '.w:netrw_bannercnt."put='./'"
      if b:netrw_curdir != '/'
       exe 'sil! keepj '.w:netrw_bannercnt."put='../'"
      endif
@@ -6699,9 +8014,9 @@
     exe 'sil keepj '.w:netrw_bannercnt.',$s/ -> .*$//e'
     exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
     exe 'sil keepj '.w:netrw_bannercnt
-    call histdel("/",-1)
-    call histdel("/",-1)
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
+    keepj call histdel("/",-1)
+    keepj call histdel("/",-1)
    endif
   endif
 
@@ -6741,7 +8056,7 @@
 
    " remove multiple files and directories
    while ctr <= a:lastline
-    exe ctr
+    exe "keepj ".ctr
     let ok= s:NetrwRemoteRmFile(a:path,s:NetrwGetWord(),all)
     if ok =~ 'q\%[uit]'
      break
@@ -6754,8 +8069,8 @@
 
   " refresh the (remote) directory listing
 "  call Decho("refresh remote directory listing")
-  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
 
 "  call Dret("s:NetrwRemoteRm")
 endfun
@@ -6802,7 +8117,7 @@
      let netrw_rm_cmd= s:MakeSshCmd(g:netrw_rm_cmd)
 "     call Decho("netrw_rm_cmd<".netrw_rm_cmd.">")
      if !exists("b:netrw_curdir")
-      call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
+      keepj call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
       let ok="q"
      else
       let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
@@ -6817,14 +8132,13 @@
 "      call Decho("call system(".netrw_rm_cmd.")")
       let ret= system(netrw_rm_cmd)
       if ret != 0
-       call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60)
+       keepj call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60)
       endif
 "      call Decho("returned=".ret." errcode=".v:shell_error)
      endif
     endif
    elseif ok =~ 'q\%[uit]'
 "    call Decho("ok==".ok)
-    break
    endif
 
   else
@@ -6845,7 +8159,7 @@
 
    if all || ok =~ 'y\%[es]' || ok == ""
     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-     call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
+     keepj call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
     else
      let rmfile          = substitute(a:path.a:rmfile,'/$','','')
      let netrw_rmdir_cmd = s:MakeSshCmd(netrw#WinPath(g:netrw_rmdir_cmd)).' '.shellescape(netrw#WinPath(rmfile))
@@ -6861,13 +8175,13 @@
 "      call Decho("returned=".ret." errcode=".v:shell_error)
 
       if v:shell_error != 0 && !exists("g:netrw_quiet")
-      	call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
+      	keepj call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
       endif
      endif
     endif
 
    elseif ok =~ 'q\%[uit]'
-    break
+"    call Decho("ok==".ok)
    endif
   endif
 
@@ -6881,18 +8195,27 @@
 "  and reverse sorts will be requested of the server but not otherwise
 "  enforced here.
 fun! s:NetrwRemoteFtpCmd(path,listcmd)
-"  call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method)
-"  call Decho("line($)=".line("$")." bannercnt=".w:netrw_bannercnt)
+"  call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) w:netrw_method=".(exists("w:netrw_method")? w:netrw_method : (exists("b:netrw_method")? b:netrw_method : "???")))
+"  call Decho("line($)=".line("$")." w:netrw_bannercnt=".w:netrw_bannercnt)
+  if !exists("w:netrw_method")
+   if exists("b:netrw_method")
+    let w:netrw_method= b:netrw_method
+   else
+    call netrw#ErrorMsg(2,"(s:NetrwRemoteFtpCmd) internal netrw error",93)
+"    call Dret("NetrwRemoteFtpCmd")
+    return
+   endif
+  endif
 
   " because WinXX ftp uses unix style input
   let ffkeep= &ff
-  setlocal ma ff=unix noro
-"  call Decho("setlocal ma ff=unix noro")
+  setl ma ff=unix noro
+"  call Decho("setl ma ff=unix noro")
 
   " clear off any older non-banner lines
   " note that w:netrw_bannercnt indexes the line after the banner
-"  call Decho('exe silent! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
-  exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
+"  call Decho('exe sil! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
+  exe "sil! keepjumps ".w:netrw_bannercnt.",$d"
 
   ".........................................
   if w:netrw_method == 2 || w:netrw_method == 5
@@ -6904,31 +8227,41 @@
     keepj put =g:netrw_ftpextracmd
 "    call Decho("filter input: ".getline('.'))
    endif
-   call setline(line("$")+1,a:listcmd)
+   keepj call setline(line("$")+1,a:listcmd)
 "   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
    if exists("g:netrw_port") && g:netrw_port != ""
-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
-    exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+    exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
    else
-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
-    exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+    exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
    endif
 
    ".........................................
   elseif w:netrw_method == 3
    " ftp + machine,id,passwd,filename:  Method #3
-    setlocal ff=unix
+    setl ff=unix
     if exists("g:netrw_port") && g:netrw_port != ""
      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
     else
      keepj put ='open '.g:netrw_machine
     endif
 
-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
-     keepj put =g:netrw_uid
-     keepj put ='\"'.s:netrw_passwd.'\"'
-    else
-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+    " handle userid and password
+    let host= substitute(g:netrw_machine,'\..*$','','')
+"    call Decho("host<".host.">")
+    if exists("s:netrw_hup") && exists("s:netrw_hup[host]")
+     call NetUserPass("ftp:".host)
+    endif
+    if exists("g:netrw_uid") && g:netrw_uid != ""
+     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+      keepj put =g:netrw_uid
+      if exists("s:netrw_passwd") && s:netrw_passwd != ""
+       keepj put ='\"'.s:netrw_passwd.'\"'
+      endif
+     elseif exists("s:netrw_passwd")
+      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+     endif
     endif
 
    if a:path != ""
@@ -6945,28 +8278,28 @@
     " -n  unix : DON'T use <.netrc>, even though it exists
     " -n  win32: quit being obnoxious about password
 "    exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n")
-    exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n"
+"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
+    exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
 
    ".........................................
   else
-   call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
+   keepj call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
   endif
 
   " cleanup for Windows
   if has("win32") || has("win95") || has("win64") || has("win16")
    sil! keepj %s/\r$//e
-   call histdel("/",-1)
+   keepj call histdel("/",-1)
   endif
   if a:listcmd == "dir"
    " infer directory/link based on the file permission string
    sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@
    sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/
-   call histdel("/",-1)
-   call histdel("/",-1)
+   keepj call histdel("/",-1)
+   keepj call histdel("/",-1)
    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
     exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
-    call histdel("/",-1)
+    keepj call histdel("/",-1)
    endif
   endif
 
@@ -7015,7 +8348,7 @@
     endif
    
     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
-     call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
+     keepj call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
     else
      let oldname= shellescape(a:path.oldname)
      let newname= shellescape(a:path.newname)
@@ -7053,17 +8386,67 @@
   endif
 
   " refresh the directory
-  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
-  call netrw#NetrwRestorePosn(svpos)
+  keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
 
 "  call Dret("NetrwRemoteRename")
 endfun
 
 " ---------------------------------------------------------------------
-"  Local Directory Browsing Support:    {{{1
-" ==========================================
-
-" ---------------------------------------------------------------------
+"  Local Directory Browsing Support:    {{{1
+" ==========================================
+
+" ---------------------------------------------------------------------
+" netrw#FileUrlRead: handles reading file://* files {{{2
+"   Should accept:   file://localhost/etc/fstab
+"                    file:///etc/fstab
+"                    file:///c:/WINDOWS/clock.avi
+"                    file:///c|/WINDOWS/clock.avi
+"                    file://localhost/c:/WINDOWS/clock.avi
+"                    file://localhost/c|/WINDOWS/clock.avi
+"                    file://c:/foo.txt
+"                    file:///c:/foo.txt
+" and %XX (where X is [0-9a-fA-F] is converted into a character with the given hexadecimal value
+fun! netrw#FileUrlRead(fname)
+"  call Dfunc("netrw#FileUrlRead(fname<".a:fname.">)")
+  let fname = a:fname
+  if fname =~ '^file://localhost/'
+"   call Decho('converting file://localhost/   -to-  file:///')
+   let fname= substitute(fname,'^file://localhost/','file:///','')
+"   call Decho("fname<".fname.">")
+  endif
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+   if fname  =~ '^file:///\=\a[|:]/'
+"    call Decho('converting file:///\a|/   -to-  file://\a:/')
+    let fname = substitute(fname,'^file:///\=\(\a\)[|:]/','file://\1:/','')
+"    call Decho("fname<".fname.">")
+   endif
+  endif
+  let fname2396 = netrw#RFC2396(fname)
+  let fname2396e= fnameescape(fname2396)
+  let plainfname= substitute(fname2396,'file://\(.*\)','\1',"")
+  if (has("win32") || has("win95") || has("win64") || has("win16"))
+"   call Decho("windows exception for plainfname")
+   if plainfname =~ '^/\+\a:'
+"    call Decho('removing leading "/"s')
+    let plainfname= substitute(plainfname,'^/\+\(\a:\)','\1','')
+   endif
+  endif
+"  call Decho("fname2396<".fname2396.">")
+"  call Decho("plainfname<".plainfname.">")
+  exe "sil doau BufReadPre ".fname2396e
+  exe 'keepj r '.plainfname
+  exe 'sil! bdelete '.plainfname
+  exe 'keepalt file! '.plainfname
+  keepj 1d
+"  call Decho("(FileUrlRead) setl nomod")
+  setl nomod
+"  call Decho("(FileUrlRead) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Dret("netrw#FileUrlRead")
+  exe "sil doau BufReadPost ".fname2396e
+endfun
+
+" ---------------------------------------------------------------------
 " netrw#LocalBrowseCheck: {{{2
 fun! netrw#LocalBrowseCheck(dirname)
   " unfortunate interaction -- split window debugging can't be
@@ -7073,18 +8456,38 @@
   " The &ft == "netrw" test was installed because the BufEnter event
   " would hit when re-entering netrw windows, creating unexpected
   " refreshes (and would do so in the middle of NetrwSaveOptions(), too)
-"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
+"  call Decho("(LocalBrowseCheck) isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
+"  call Dredir("LocalBrowseCheck","ls!")|redraw!|sleep 3
+  let ykeep= @@
   if isdirectory(a:dirname)
-"   call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$"))
-   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname)
-    silent! call s:NetrwBrowse(1,a:dirname)
+"   call Decho("(LocalBrowseCheck) is-directory ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse)
+   let svposn= netrw#NetrwSavePosn()
+   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname) || g:netrw_fastbrowse <= 1
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    elseif &ft == "netrw" && line("$") == 1
-    silent! call s:NetrwBrowse(1,a:dirname)
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    elseif exists("s:treeforceredraw")
     unlet s:treeforceredraw
-    silent! call s:NetrwBrowse(1,a:dirname)
+    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
+    keepalt call netrw#NetrwRestorePosn(svposn)
    endif
   endif
+  " following code wipes out currently unused netrw buffers
+  "       IF g:netrw_fastbrowse is zero (ie. slow browsing selected)
+  "   AND IF the listing style is not a tree listing
+  if exists("g:netrw_fastbrowse") && g:netrw_fastbrowse == 0 && g:netrw_liststyle != s:TREELIST
+   let ibuf    = 1
+   let buflast = bufnr("$")
+   while ibuf <= buflast
+    if bufwinnr(ibuf) == -1 && isdirectory(bufname(ibuf))
+     exe "sil! keepalt ".ibuf."bw!"
+    endif
+    let ibuf= ibuf + 1
+   endwhile
+  endif
+  let @@= ykeep
   " not a directory, ignore it
 endfun
 
@@ -7092,101 +8495,68 @@
 "  s:LocalListing: does the job of "ls" for local directories {{{2
 fun! s:LocalListing()
 "  call Dfunc("s:LocalListing()")
-"  call Decho("&ma=".&ma)
-"  call Decho("&mod=".&mod)
-"  call Decho("&ro=".&ro)
-"  call Decho("bufname(%)<".bufname("%").">")
+"  call Decho("(LocalListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+"  call Decho("(LocalListing) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
 
-"  if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("b:netrw_curdir doesn't exist") |endif
-"  if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif
+"  if exists("b:netrw_curdir") |call Decho('(LocalListing) b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("(LocalListing) b:netrw_curdir doesn't exist") |endif
+"  if exists("g:netrw_sort_by")|call Decho('(LocalListing) g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("(LocalListing) g:netrw_sort_by doesn't exist")|endif
 
   " get the list of files contained in the current directory
-  let dirname    = escape(b:netrw_curdir,g:netrw_glob_escape)
+  let dirname    = b:netrw_curdir
   let dirnamelen = s:Strlen(b:netrw_curdir)
-  let filelist   = glob(s:ComposePath(dirname,"*"))
-"  call Decho("glob(dirname<".dirname."/*>)=".filelist)
-  if filelist != ""
-   let filelist= filelist."\n"
-  endif
-  let filelist= filelist.glob(s:ComposePath(dirname,".*"))
-"  call Decho("glob(dirname<".dirname."/.*>)=".filelist)
-
-  " Coding choice: either   elide   ./ if present
-  "                or       include ./ if not present
-  if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)'
-   " elide /path/. from glob() entries if present
-"   call Decho("elide /path/. from glob entries if present")
-   let filelist = substitute(filelist,'\n','\t','g')
-   let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','')
-   let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','')
-   let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','')
-   let filelist = substitute(filelist,'\t','\n','g')
-  endif
-"  call Decho("filelist<".filelist.">")
-  if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
+  let filelist   = glob(s:ComposePath(dirname,"*"),0,1)
+  let filelist   = filelist + glob(s:ComposePath(dirname,".*"),0,1)
+"  call Decho("(LocalListing) filelist=".filelist)
+
+  if g:netrw_cygwin == 0 && (has("win32") || has("win95") || has("win64") || has("win16"))
+"   call Decho("(LocalListing) filelist=".string(filelist))
+  elseif index(filelist,'..') == -1 && b:netrw_curdir !~ '/'
     " include ../ in the glob() entry if its missing
-"   call Decho("forcibly tacking on ..")
-   let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../")
-"   call Decho("filelist<".filelist.">")
-  endif
-  if b:netrw_curdir == '/'
-   " remove .. from filelist when current directory is root directory
-"   call Decho("remove .. from filelist")
-   let filelist= substitute(filelist,'/\.\.\n','','')
+"   call Decho("(LocalListing) forcibly including on \"..\"")
+   let filelist= filelist+[s:ComposePath(b:netrw_curdir,"../")]
+"   call Decho("(LocalListing) filelist=".string(filelist))
+  endif
+
+"  call Decho("(LocalListing) (before while) dirname<".dirname.">")
+"  call Decho("(LocalListing) (before while) dirnamelen<".dirnamelen.">")
+"  call Decho("(LocalListing) (before while) filelist=".string(filelist))
+
+  if get(g:, 'netrw_dynamic_maxfilenamelen', 0)
+   let filelistcopy           = map(deepcopy(filelist),'fnamemodify(v:val, ":t")')
+   let g:netrw_maxfilenamelen = max(map(filelistcopy,'len(v:val)')) + 1
+"   call Decho("(LocalListing) dynamic_maxfilenamelen: filenames             =".string(filelistcopy))
+"   call Decho("(LocalListing) dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen)
   endif
-  " remove multiple contiguous newlines
-  let filelist= substitute(filelist,'\n\{2,}','\n','ge')
-  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
-   " change all \s to /s
-"   call Decho('change all \s to /s')
-   let filelist= substitute(filelist,'\','/','g')
-  else
-   " escape all \s to \\
-"   call Decho('escape all \s to \\')
-   let filelist= substitute(filelist,'\','\\','g')
-  endif
-
-"  call Decho("(before while) dirname<".dirname.">")
-"  call Decho("(before while) dirnamelen<".dirnamelen.">")
-"  call Decho("(before while) filelist<".filelist.">")
-
-  while filelist != ""
-   if filelist =~ '\n'
-    let filename = substitute(filelist,'\n.*$','','e')
-    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
-   else
-    let filename = filelist
-    let filelist = ""
-   endif
-"   call Decho(" ")
-"   call Decho("(while) filelist<".filelist.">")
-"   call Decho("(while) filename<".filename.">")
+
+  for filename in filelist
+"   call Decho("(LocalListing)  ")
+"   call Decho("(LocalListing) (while) filename<".filename.">")
 
    if getftype(filename) == "link"
     " indicate a symbolic link
-"    call Decho("indicate <".filename."> is a symbolic link with trailing @")
+"    call Decho("(LocalListing) indicate <".filename."> is a symbolic link with trailing @")
     let pfile= filename."@"
 
    elseif getftype(filename) == "socket"
     " indicate a socket
-"    call Decho("indicate <".filename."> is a socket with trailing =")
+"    call Decho("(LocalListing) indicate <".filename."> is a socket with trailing =")
     let pfile= filename."="
 
    elseif getftype(filename) == "fifo"
     " indicate a fifo
-"    call Decho("indicate <".filename."> is a fifo with trailing |")
+"    call Decho("(LocalListing) indicate <".filename."> is a fifo with trailing |")
     let pfile= filename."|"
 
    elseif isdirectory(filename)
     " indicate a directory
-"    call Decho("indicate <".filename."> is a directory with trailing /")
+"    call Decho("(LocalListing) indicate <".filename."> is a directory with trailing /")
     let pfile= filename."/"
 
    elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename)
     if (has("win32") || has("win95") || has("win64") || has("win16"))
      if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$'
       " indicate an executable
-"      call Decho("indicate <".filename."> is executable with trailing *")
+"      call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
       let pfile= filename."*"
      else
       " normal file
@@ -7194,7 +8564,7 @@
      endif
     elseif executable(filename)
      " indicate an executable
-"     call Decho("indicate <".filename."> is executable with trailing *")
+"     call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
      let pfile= filename."*"
     else
      " normal file
@@ -7205,55 +8575,55 @@
     " normal file
     let pfile= filename
    endif
-"   call Decho("pfile<".pfile."> (after *@/ appending)")
+"   call Decho("(LocalListing) pfile<".pfile."> (after *@/ appending)")
 
    if pfile =~ '//$'
     let pfile= substitute(pfile,'//$','/','e')
-"    call Decho("change // to /: pfile<".pfile.">")
+"    call Decho("(LocalListing) change // to /: pfile<".pfile.">")
    endif
    let pfile= strpart(pfile,dirnamelen)
    let pfile= substitute(pfile,'^[/\\]','','e')
-"   call Decho("filename<".filename.">")
-"   call Decho("pfile   <".pfile.">")
+"   call Decho("(LocalListing) filename<".filename.">")
+"   call Decho("(LocalListing) pfile   <".pfile.">")
 
    if w:netrw_liststyle == s:LONGLIST
     let sz   = getfsize(filename)
     let fsz  = strpart("               ",1,15-strlen(sz)).sz
     let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
-"    call Decho("sz=".sz." fsz=".fsz)
+"    call Decho("(LocalListing) sz=".sz." fsz=".fsz)
    endif
 
    if     g:netrw_sort_by =~ "^t"
     " sort by time (handles time up to 1 quintillion seconds, US)
-"    call Decho("getftime(".filename.")=".getftime(filename))
+"    call Decho("(LocalListing) getftime(".filename.")=".getftime(filename))
     let t  = getftime(filename)
     let ft = strpart("000000000000000000",1,18-strlen(t)).t
-"    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
+"    call Decho("(LocalListing) exe keepjumps put ='".ft.'/'.filename."'")
     let ftpfile= ft.'/'.pfile
     sil! keepj put=ftpfile
 
    elseif g:netrw_sort_by =~ "^s"
     " sort by size (handles file sizes up to 1 quintillion bytes, US)
-"    call Decho("getfsize(".filename.")=".getfsize(filename))
+"    call Decho("(LocalListing) getfsize(".filename.")=".getfsize(filename))
     let sz   = getfsize(filename)
     let fsz  = strpart("000000000000000000",1,18-strlen(sz)).sz
-"    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
+"    call Decho("(LocalListing) exe keepj put ='".fsz.'/'.filename."'")
     let fszpfile= fsz.'/'.pfile
     sil! keepj put =fszpfile
 
    else
     " sort by name
-"    call Decho("exe keepjumps put ='".pfile."'")
+"    call Decho("(LocalListing) exe keepjumps put ='".pfile."'")
     sil! keepj put=pfile
    endif
-  endwhile
+  endfor
 
   " cleanup any windows mess at end-of-line
   sil! keepj g/^$/d
   sil! keepj %s/\r$//e
   call histdel("/",-1)
-  exe "setlocal ts=".g:netrw_maxfilenamelen
-"  call Decho("setlocal ts=".g:netrw_maxfilenamelen)
+"  call Decho("(LocalListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
+  exe "setl ts=".(g:netrw_maxfilenamelen+1)
 
 "  call Dret("s:LocalListing")
 endfun
@@ -7284,47 +8654,214 @@
   endif
   let itab       = 1
   let buftablist = []
+  let ykeep      = @@
   while itab <= tabpagenr("$")
    let buftablist = buftablist + tabpagebuflist()
    let itab       = itab + 1
    tabn
   endwhile
-"  call Decho("buftablist".string(buftablist))
-"  call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
+"  call Decho("(LocalBrowseShellCmdRefresh) buftablist".string(buftablist))
+"  call Decho("(LocalBrowseShellCmdRefresh) s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
   "  GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
   "   | refresh any netrw window
   "   | wipe out any non-displaying netrw buffer
   let curwin = winnr()
   let ibl    = 0
   for ibuf in s:netrw_browselist
-"   call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
+"   call Decho("(LocalBrowseShellCmdRefresh) bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
    if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1
     " wipe out any non-displaying netrw buffer
-"    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
+"    call Decho("(LocalBrowseShellCmdRefresh) wiping  buf#".ibuf,"<".bufname(ibuf).">")
     exe "sil! bd ".fnameescape(ibuf)
     call remove(s:netrw_browselist,ibl)
-"    call Decho("browselist=".string(s:netrw_browselist))
+"    call Decho("(LocalBrowseShellCmdRefresh) browselist=".string(s:netrw_browselist))
     continue
    elseif index(tabpagebuflist(),ibuf) != -1
     " refresh any netrw buffer
-"    call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
+"    call Decho("(LocalBrowseShellCmdRefresh) refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
     exe bufwinnr(ibuf)."wincmd w"
-    call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+    keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
    endif
    let ibl= ibl + 1
   endfor
   exe curwin."wincmd w"
+  let @@= ykeep
 
 "  call Dret("LocalBrowseShellCmdRefresh")
 endfun
 
 " ---------------------------------------------------------------------
+" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2
+"
+"     g:netrw_    Directory Is
+"     fastbrowse  Local  Remote   
+"  slow   0         D      D      D=Deleting a buffer implies it will not be re-used (slow)
+"  med    1         D      H      H=Hiding a buffer implies it may be re-used        (fast)
+"  fast   2         H      H      
+"
+"  Deleting a buffer means that it will be re-loaded when examined, hence "slow".
+"  Hiding   a buffer means that it will be re-used   when examined, hence "fast".
+"           (re-using a buffer may not be as accurate)
+fun! s:LocalFastBrowser()
+"    call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse."  s:netrw_browser_shellcmd ".(exists("s:netrw_browser_shellcmd")? "exists" : "does not exist"))
+
+  " initialize browselist, a list of buffer numbers that the local browser has used
+  if !exists("s:netrw_browselist")
+"   call Decho("(LocalFastBrowser) initialize s:netrw_browselist")
+   let s:netrw_browselist= []
+  endif
+
+  " append current buffer to fastbrowse list
+  if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
+"   call Decho("(LocalFastBrowser) appendng current buffer to browselist")
+   call add(s:netrw_browselist,bufnr("%"))
+"   call Decho("(LocalFastBrowser) browselist=".string(s:netrw_browselist))
+  endif
+
+  " enable autocmd events to handle refreshing/removing local browser buffers
+  "    If local browse buffer is currently showing: refresh it
+  "    If local browse buffer is currently hidden : wipe it
+  "    g:netrw_fastbrowse=0 : slow   speed, never re-use directory listing
+  "                      =1 : medium speed, re-use directory listing for remote only
+  "                      =2 : fast   speed, always re-use directory listing when possible
+  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
+"   call Decho("(LocalFastBrowser) setting up local-browser shell command refresh")
+   let s:netrw_browser_shellcmd= 1
+   augroup AuNetrwShellCmd
+    au!
+    if (has("win32") || has("win95") || has("win64") || has("win16"))
+"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
+     au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
+    else
+     au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
+"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
+    endif
+   augroup END
+  endif
+
+  " user must have changed fastbrowse to its fast setting, so remove
+  " the associated autocmd events
+  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
+"   call Decho("(LocalFastBrowser) remove AuNetrwShellCmd autcmd group")
+   unlet s:netrw_browser_shellcmd
+   augroup AuNetrwShellCmd
+    au!
+   augroup END
+   augroup! AuNetrwShellCmd
+  endif
+
+"  call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwLocalExecute: uses system() to execute command under cursor ("X" command support) {{{2
+fun! s:NetrwLocalExecute(cmd)
+"  call Dfunc("s:NetrwLocalExecute(cmd<".a:cmd.">)")
+  let ykeep= @@
+  " sanity check
+  if !executable(a:cmd)
+   call netrw#ErrorMsg(s:ERROR,"the file<".a:cmd."> is not executable!",89)
+   let @@= ykeep
+"   call Dret("s:NetrwLocalExecute")
+   return
+  endif
+
+  let optargs= input(":!".a:cmd,"","file")
+"  call Decho("optargs<".optargs.">")
+  let result= system(a:cmd.optargs)
+"  call Decho(result)
+
+  " strip any ansi escape sequences off
+  let result = substitute(result,"\e\\[[0-9;]*m","","g")
+
+  " show user the result(s)
+  echomsg result
+  let @@= ykeep
+
+"  call Dret("s:NetrwLocalExecute")
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwLocalRename: rename a remote file or directory {{{2
+fun! s:NetrwLocalRename(path) range
+"  call Dfunc("NetrwLocalRename(path<".a:path.">)")
+
+  " preparation for removing multiple files/directories
+  let ykeep = @@
+  let ctr   = a:firstline
+  let svpos = netrw#NetrwSavePosn()
+
+  " rename files given by the markfilelist
+  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+   for oldname in s:netrwmarkfilelist_{bufnr("%")}
+"    call Decho("oldname<".oldname.">")
+    if exists("subfrom")
+     let newname= substitute(oldname,subfrom,subto,'')
+"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+    else
+     call inputsave()
+     let newname= input("Moving ".oldname." to : ",oldname)
+     call inputrestore()
+     if newname =~ '^s/'
+      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
+      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
+"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+      let newname = substitute(oldname,subfrom,subto,'')
+     endif
+    endif
+    call rename(oldname,newname)
+   endfor
+   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+  
+  else
+
+   " attempt to rename files/directories
+   while ctr <= a:lastline
+    exe "keepj ".ctr
+
+    " sanity checks
+    if line(".") < w:netrw_bannercnt
+     let ctr= ctr + 1
+     continue
+    endif
+    let curword= s:NetrwGetWord()
+    if curword == "./" || curword == "../"
+     let ctr= ctr + 1
+     continue
+    endif
+
+    keepj norm! 0
+    let oldname= s:ComposePath(a:path,curword)
+"   call Decho("oldname<".oldname.">")
+
+    call inputsave()
+    let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
+    call inputrestore()
+
+    call rename(oldname,newname)
+"   call Decho("renaming <".oldname."> to <".newname.">")
+
+    let ctr= ctr + 1
+   endwhile
+  endif
+
+  " refresh the directory
+"  call Decho("refresh the directory listing")
+  keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+  keepj call netrw#NetrwRestorePosn(svpos)
+  let @@= ykeep
+
+"  call Dret("NetrwLocalRename")
+endfun
+
+" ---------------------------------------------------------------------
 " s:NetrwLocalRm: {{{2
 fun! s:NetrwLocalRm(path) range
 "  call Dfunc("s:NetrwLocalRm(path<".a:path.">)")
 "  call Decho("firstline=".a:firstline." lastline=".a:lastline)
 
   " preparation for removing multiple files/directories
+  let ykeep = @@
   let ret   = 0
   let all   = 0
   let svpos = netrw#NetrwSavePosn()
@@ -7373,9 +8910,10 @@
   " refresh the directory
 "  call Decho("bufname<".bufname("%").">")
   if bufname("%") != "NetrwMessage"
-   call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
-   call netrw#NetrwRestorePosn(svpos)
+   keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+   keepj call netrw#NetrwRestorePosn(svpos)
   endif
+  let @@= ykeep
 
 "  call Dret("s:NetrwLocalRm")
 endfun
@@ -7396,281 +8934,96 @@
    " attempt to remove file
 "   call Decho("attempt to remove file<".rmfile.">")
    if !all
-    echohl Statement
-    call inputsave()
-    let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-    call inputrestore()
-    echohl NONE
-    if ok == ""
-     let ok="no"
-    endif
-"    call Decho("response: ok<".ok.">")
-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-"    call Decho("response: ok<".ok."> (after sub)")
-    if ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endif
-
-   if all || ok =~ 'y\%[es]' || ok == ""
-    let ret= s:NetrwDelete(rmfile)
-"    call Decho("errcode=".v:shell_error." ret=".ret)
-   endif
-
-  else
-   " attempt to remove directory
-   if !all
-    echohl Statement
-    call inputsave()
-    let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
-    call inputrestore()
-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
-    if ok == ""
-     let ok="no"
-    endif
-    if ok =~ 'a\%[ll]'
-     let all= 1
-    endif
-   endif
-   let rmfile= substitute(rmfile,'[\/]$','','e')
-
-   if all || ok =~ 'y\%[es]' || ok == ""
-"    call Decho("1st attempt: system(netrw#WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')')
-    call system(netrw#WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile))
-"    call Decho("v:shell_error=".v:shell_error)
-
-    if v:shell_error != 0
-"     call Decho("2nd attempt to remove directory<".rmfile.">")
-     let errcode= s:NetrwDelete(rmfile)
-"     call Decho("errcode=".errcode)
-
-     if errcode != 0
-      if has("unix")
-"       call Decho("3rd attempt to remove directory<".rmfile.">")
-       call system("rm ".shellescape(rmfile))
-       if v:shell_error != 0 && !exists("g:netrw_quiet")
-        call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
-	let ok="no"
-       endif
-      elseif !exists("g:netrw_quiet")
-       call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
-       let ok="no"
-      endif
-     endif
-    endif
-   endif
-  endif
-
-"  call Dret("s:NetrwLocalRmFile ".ok)
-  return ok
-endfun
-
-" ---------------------------------------------------------------------
-" s:NetrwLocalRename: rename a remote file or directory {{{2
-fun! s:NetrwLocalRename(path) range
-"  call Dfunc("NetrwLocalRename(path<".a:path.">)")
-
-  " preparation for removing multiple files/directories
-  let ctr  = a:firstline
-  let svpos= netrw#NetrwSavePosn()
-
-  " rename files given by the markfilelist
-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
-   for oldname in s:netrwmarkfilelist_{bufnr("%")}
-"    call Decho("oldname<".oldname.">")
-    if exists("subfrom")
-     let newname= substitute(oldname,subfrom,subto,'')
-"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
-    else
-     call inputsave()
-     let newname= input("Moving ".oldname." to : ",oldname)
-     call inputrestore()
-     if newname =~ '^s/'
-      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
-      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
-"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
-      let newname = substitute(oldname,subfrom,subto,'')
-     endif
-    endif
-    call rename(oldname,newname)
-   endfor
-   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
-  
-  else
-
-   " attempt to rename files/directories
-   while ctr <= a:lastline
-    exe "keepj ".ctr
-
-    " sanity checks
-    if line(".") < w:netrw_bannercnt
-     let ctr= ctr + 1
-     continue
+    echohl Statement
+    call inputsave()
+    let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+    call inputrestore()
+    echohl NONE
+    if ok == ""
+     let ok="no"
     endif
-    let curword= s:NetrwGetWord()
-    if curword == "./" || curword == "../"
-     let ctr= ctr + 1
-     continue
+"    call Decho("response: ok<".ok.">")
+    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+"    call Decho("response: ok<".ok."> (after sub)")
+    if ok =~ 'a\%[ll]'
+     let all= 1
     endif
+   endif
 
-    keepj norm! 0
-    let oldname= s:ComposePath(a:path,curword)
-"   call Decho("oldname<".oldname.">")
+   if all || ok =~ 'y\%[es]' || ok == ""
+    let ret= s:NetrwDelete(rmfile)
+"    call Decho("errcode=".v:shell_error." ret=".ret)
+   endif
 
+  else
+   " attempt to remove directory
+   if !all
+    echohl Statement
     call inputsave()
-    let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
+    let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
     call inputrestore()
+    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+    if ok == ""
+     let ok="no"
+    endif
+    if ok =~ 'a\%[ll]'
+     let all= 1
+    endif
+   endif
+   let rmfile= substitute(rmfile,'[\/]$','','e')
 
-    call rename(oldname,newname)
-"   call Decho("renaming <".oldname."> to <".newname.">")
-
-    let ctr= ctr + 1
-   endwhile
-  endif
-
-  " refresh the directory
-"  call Decho("refresh the directory listing")
-  call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
-  call netrw#NetrwRestorePosn(svpos)
-
-"  call Dret("NetrwLocalRename")
-endfun
-
-" ---------------------------------------------------------------------
-" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2
-"
-"     g:netrw_    Directory Is
-"     fastbrowse  Local  Remote   
-"  slow   0         D      D      D=Deleting a buffer implies it will not be re-used (slow)
-"  med    1         D      H      H=Hiding a buffer implies it may be re-used        (fast)
-"  fast   2         H      H      
-"
-"  Deleting a buffer means that it will be re-loaded when examined, hence "slow".
-"  Hiding   a buffer means that it will be re-used   when examined, hence "fast".
-"           (re-using a buffer may not be as accurate)
-fun! s:LocalFastBrowser()
-"  call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse)
-
-  " initialize browselist, a list of buffer numbers that the local browser has used
-  if !exists("s:netrw_browselist")
-"   call Decho("initialize s:netrw_browselist")
-   let s:netrw_browselist= []
-  endif
+   if all || ok =~ 'y\%[es]' || ok == ""
+"    call Decho("1st attempt: system(netrw#WinPath(".g:netrw_localrmdir.') '.shellescape(rmfile).')')
+    call system(netrw#WinPath(g:netrw_localrmdir).' '.shellescape(rmfile))
+"    call Decho("v:shell_error=".v:shell_error)
 
-  " append current buffer to fastbrowse list
-  if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
-"   call Decho("appendng current buffer to browselist")
-   call add(s:netrw_browselist,bufnr("%"))
-"   call Decho("browselist=".string(s:netrw_browselist))
-  endif
+    if v:shell_error != 0
+"     call Decho("2nd attempt to remove directory<".rmfile.">")
+     let errcode= s:NetrwDelete(rmfile)
+"     call Decho("errcode=".errcode)
 
-  " enable autocmd events to handle refreshing/removing local browser buffers
-  "    If local browse buffer is currently showing: refresh it
-  "    If local browse buffer is currently hidden : wipe it
-  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
-"   call Decho("setting up local-browser shell command refresh")
-   let s:netrw_browser_shellcmd= 1
-   augroup AuNetrwShellCmd
-    au!
-    if (has("win32") || has("win95") || has("win64") || has("win16"))
-"     call Decho("autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
-     au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
-    else
-     au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
-"     call Decho("autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
+     if errcode != 0
+      if has("unix")
+"       call Decho("3rd attempt to remove directory<".rmfile.">")
+       call system("rm ".shellescape(rmfile))
+       if v:shell_error != 0 && !exists("g:netrw_quiet")
+        call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
+	let ok="no"
+       endif
+      elseif !exists("g:netrw_quiet")
+       call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
+       let ok="no"
+      endif
+     endif
     endif
-   augroup END
-  endif
-
-  " user must have changed fastbrowse to its fast setting, so remove
-  " the associated autocmd events
-  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
-"   call Decho("remove AuNetrwShellCmd autcmd group")
-   unlet s:netrw_browser_shellcmd
-   augroup AuNetrwShellCmd
-    au!
-   augroup END
-   augroup! AuNetrwShellCmd
+   endif
   endif
 
-"  call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">")
+"  call Dret("s:NetrwLocalRmFile ".ok)
+  return ok
 endfun
 
 " ---------------------------------------------------------------------
 " Support Functions: {{{1
 
 " ---------------------------------------------------------------------
-" netrw#ErrorMsg: {{{2
-"   0=note     = s:NOTE
-"   1=warning  = s:WARNING
-"   2=error    = s:ERROR
-"  Dec 03, 2009 : max errnum currently is 76
-fun! netrw#ErrorMsg(level,msg,errnum)
-"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
-
-  if a:level == 1
-   let level= "**warning** (netrw) "
-  elseif a:level == 2
-   let level= "**error** (netrw) "
-  else
-   let level= "**note** (netrw) "
-  endif
-"  call Decho("level=".level)
-
-  if g:netrw_use_errorwindow
-   " (default) netrw creates a one-line window to show error/warning
-   " messages (reliably displayed)
-
-   " record current window number for NetrwRestorePosn()'s benefit
-   let s:winBeforeErr= winnr()
-"   call Decho("s:winBeforeErr=".s:winBeforeErr)
-
-   " getting messages out reliably is just plain difficult!
-   " This attempt splits the current window, creating a one line window.
-   if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
-"    call Decho("write to NetrwMessage buffer")
-    exe bufwinnr("NetrwMessage")."wincmd w"
-"    call Decho("setlocal ma noro")
-    setlocal ma noro
-    call setline(line("$")+1,level.a:msg)
-    keepj $
-   else
-"    call Decho("create a NetrwMessage buffer window")
-    bo 1split
-    call s:NetrwEnew()
-    call s:NetrwSafeOptions()
-    setlocal bt=nofile
-    file NetrwMessage
-"    call Decho("setlocal ma noro")
-    setlocal ma noro
-    call setline(line("$"),level.a:msg)
-   endif
-"   call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
-   if &fo !~ '[ta]'
-    syn clear
-    syn match netrwMesgNote	"^\*\*note\*\*"
-    syn match netrwMesgWarning	"^\*\*warning\*\*"
-    syn match netrwMesgError	"^\*\*error\*\*"
-    hi link netrwMesgWarning WarningMsg
-    hi link netrwMesgError   Error
-   endif
-   setlocal noma ro bh=wipe
-
+" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2
+fun! netrw#WinPath(path)
+"  call Dfunc("netrw#WinPath(path<".a:path.">)")
+  if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16"))
+   " remove cygdrive prefix, if present
+   let path = substitute(a:path,'/cygdrive/\(.\)','\1:','')
+   " remove trailing slash (Win95)
+   let path = substitute(path, '\(\\\|/\)$', '', 'g')
+   " remove escaped spaces
+   let path = substitute(path, '\ ', ' ', 'g')
+   " convert slashes to backslashes
+   let path = substitute(path, '/', '\', 'g')
   else
-   " (optional) netrw will show messages using echomsg.  Even if the
-   " message doesn't appear, at least it'll be recallable via :messages
-"   redraw!
-   if a:level == s:WARNING
-    echohl WarningMsg
-   elseif a:level == s:ERROR
-    echohl Error
-   endif
-   echomsg level.a:msg
-"   call Decho("echomsg ***netrw*** ".a:msg)
-   echohl None
+   let path= a:path
   endif
-
-"  call Dret("netrw#ErrorMsg")
+"  call Dret("netrw#WinPath <".path.">")
+  return path
 endfun
 
 " ---------------------------------------------------------------------
@@ -7680,16 +9033,18 @@
   let eikeep= &ei
   set ei=all
   if expand("%") == "NetrwMessage"
-   exe s:winBeforeErr."wincmd w"
+   if exists("s:winBeforeErr")
+    exe s:winBeforeErr."wincmd w"
+   endif
   endif
 
   if a:0 > 0
-   exe a:1
+   exe "keepj ".a:1
   endif
 
   " restore window
   if exists("w:netrw_winnr")
-"   call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
+"   call Decho("(NetrwRestorePosn) restore window: exe sil! ".w:netrw_winnr."wincmd w")
    exe "sil! ".w:netrw_winnr."wincmd w"
   endif
   if v:shell_error == 0
@@ -7700,29 +9055,29 @@
 
   " restore top-of-screen line
   if exists("w:netrw_hline")
-"   call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
+"   call Decho("(NetrwRestorePosn) restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z")
    exe "keepj norm! ".w:netrw_hline."G0z\<CR>"
   endif
 
   " restore position
   if exists("w:netrw_line") && exists("w:netrw_col")
-"   call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
+"   call Decho("(NetrwRestorePosn) restore posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|")
    exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
   endif
 
   let &ei= eikeep
-"  call Dret("netrw#NetrwRestorePosn")
+"  call Dret("netrw#NetrwRestorePosn : line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol())
 endfun
 
 " ---------------------------------------------------------------------
 " netrw#NetrwSavePosn: saves position of cursor on screen {{{2
 fun! netrw#NetrwSavePosn()
-"  call Dfunc("netrw#NetrwSavePosn()")
+"  call Dfunc("netrw#NetrwSavePosn() line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol())
   " Save current line and column
   let w:netrw_winnr= winnr()
   let w:netrw_line = line(".")
   let w:netrw_col  = virtcol(".")
-"  call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
+"  call Decho("(NetrwSavePosn) currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
 
   " Save top-of-screen line
   keepj norm! H0
@@ -7731,11 +9086,26 @@
   " set up string holding position parameters
   let ret          = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline
 
-  call netrw#NetrwRestorePosn()
+  keepj call netrw#NetrwRestorePosn()
 "  call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
   return ret
 endfun
 
+" ---------------------------------------------------------------------
+" netrw#NetrwAccess: intended to provide access to variable values for netrw's test suite {{{2
+"   0: marked file list of current buffer
+"   1: marked file target
+fun! netrw#NetrwAccess(ilist)
+  if     a:ilist == 0
+   if exists("s:netrwmarkfilelist_".bufnr('%'))
+    return s:netrwmarkfilelist_{bufnr('%')}
+   else
+    return "no-list-buf#".bufnr('%')
+   endif
+  elseif a:ilist == 1
+   return s:netrwmftgt
+endfun
+
 " ------------------------------------------------------------------------
 "  netrw#RFC2396: converts %xx into characters {{{2
 fun! netrw#RFC2396(fname)
@@ -7750,7 +9120,7 @@
 fun! s:ComposePath(base,subdir)
 "  call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
 
-  if(has("amiga"))
+  if has("amiga")
 "   call Decho("amiga")
    let ec = a:base[s:Strlen(a:base)-1]
    if ec != '/' && ec != ':'
@@ -7835,8 +9205,8 @@
 
    " sanity check -- does the temporary file's directory exist?
    if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
-"    call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
-    call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
+"    call Decho("(GetTempfile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+    keepj call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
 "    call Dret("s:GetTempfile getcwd<".getcwd().">")
     return ""
    endif
@@ -7883,7 +9253,7 @@
    endif
   endif
 
-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+"  call Decho("(GetTempFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
 "  call Dret("s:GetTempfile <".tmpfile.">")
   return tmpfile
 endfun
@@ -7918,7 +9288,7 @@
    if bmshowfuncs != []
     let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','')
     if bmshowfunc =~ '^call.*BMShow()'
-     exe "sil! ".bmshowfunc
+     exe "sil! keepj ".bmshowfunc
     endif
    endif
   endif
@@ -7926,43 +9296,78 @@
 endfun
 
 " ---------------------------------------------------------------------
-" s:NetrwCursorline: {{{2
-fun! s:NetrwCursorline()
+" s:NetrwCursor: responsible for setting cursorline/cursorcolumn based upon g:netrw_cursor {{{2
+fun! s:NetrwCursor()
   if !exists("w:netrw_liststyle")
    let w:netrw_liststyle= g:netrw_liststyle
   endif
-"  call Dfunc("s:NetrwCursorline() liststyle=".w:netrw_liststyle." g:netrw_cursorline=".g:netrw_cursorline." s:netrw_usercuc=".s:netrw_usercuc." s:netrw_usercul=".s:netrw_usercul)
-  "
-  if w:netrw_liststyle != s:WIDELIST
-   " thin-long-tree listings
-   if g:netrw_cursorline == 2
-    setlocal cursorline
-    let &l:cursorcolumn= s:netrw_usercuc
-"    call Decho("setlocal cursorline  (cursorcolumn is ".((s:netrw_usercuc)? "on" : "off").")")
-   elseif g:netrw_cursorline
-    setlocal cursorline
-"    call Decho("setlocal cursorline")
+"  call Dfunc("s:NetrwCursor() ft<".&ft."> liststyle=".w:netrw_liststyle." g:netrw_cursor=".g:netrw_cursor." s:netrw_usercuc=".s:netrw_usercuc." s:netrw_usercul=".s:netrw_usercul)
+
+  if &ft != "netrw"
+   " if the current window isn't a netrw directory listing window, then use user cursorline/column
+   " settings.  Affects when netrw is used to read/write a file using scp/ftp/etc.
+"   call Decho("case ft!=netrw: use user cul,cuc")
+   let &l:cursorline   = s:netrw_usercul
+   let &l:cursorcolumn = s:netrw_usercuc
+
+  elseif g:netrw_cursor == 4
+   " all styles: cursorline, cursorcolumn
+"   call Decho("case g:netrw_cursor==4: setl cul cuc")
+   setl cursorline
+   setl cursorcolumn
+
+  elseif g:netrw_cursor == 3
+   " thin-long-tree: cursorline, user's cursorcolumn
+   " wide          : cursorline, cursorcolumn
+   if w:netrw_liststyle == s:WIDELIST
+"    call Decho("case g:netrw_cursor==3 and wide: setl cul cuc")
+    setl cursorline
+    setl cursorcolumn
+   else
+"    call Decho("case g:netrw_cursor==3 and not wide: setl cul (use user's cuc)")
+    setl cursorline
+    let &l:cursorcolumn   = s:netrw_usercuc
+   endif
+
+  elseif g:netrw_cursor == 2
+   " thin-long-tree: cursorline, user's cursorcolumn
+   " wide          : cursorline, user's cursorcolumn
+"   call Decho("case g:netrw_cursor==2: setl cuc (use user's cul)")
+   let &l:cursorcolumn = s:netrw_usercuc
+   setl cursorline
+
+  elseif g:netrw_cursor == 1
+   " thin-long-tree: user's cursorline, user's cursorcolumn
+   " wide          : cursorline,        user's cursorcolumn
+   let &l:cursorcolumn = s:netrw_usercuc
+   if w:netrw_liststyle == s:WIDELIST
+"    call Decho("case g:netrw_cursor==2 and wide: setl cul (use user's cuc)")
+    set cursorline
+   else
+"    call Decho("case g:netrw_cursor==2 and not wide: (use user's cul,cuc)")
+    let &l:cursorline   = s:netrw_usercul
    endif
 
   else
-   " wide listings
-   if g:netrw_cursorline == 2
-    setlocal cursorline cursorcolumn
-"    call Decho("setlocal cursorline cursorcolumn")
-   elseif g:netrw_cursorline
-    let &l:cursorline= s:netrw_usercul
-"    call Decho("cursorline is ".((s:netrw_usercul)? "on" : "off").")")
-   endif
+   " all styles: user's cursorline, user's cursorcolumn
+"   call Decho("default: (use user's cul,cuc)")
+   let &l:cursorline   = s:netrw_usercul
+   let &l:cursorcolumn = s:netrw_usercuc
   endif
-"  call Dret("s:NetrwCursorline : l:cursorline=".&l:cursorline." l:cursorcolumn=".&l:cursorcolumn)
+
+"  call Dret("s:NetrwCursor : l:cursorline=".&l:cursorline." l:cursorcolumn=".&l:cursorcolumn)
 endfun
 
 " ---------------------------------------------------------------------
 " s:RestoreCursorline: restores cursorline/cursorcolumn to original user settings {{{2
 fun! s:RestoreCursorline()
-"  call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%"))
-  let &l:cursorline   = s:netrw_usercul
-  let &l:cursorcolumn = s:netrw_usercuc
+"  call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%")." mod=".&mod)
+  if exists("s:netrw_usercul")
+   let &l:cursorline   = s:netrw_usercul
+  endif
+  if exists("s:netrw_usercuc")
+   let &l:cursorcolumn = s:netrw_usercuc
+  endif
 "  call Dret("s:RestoreCursorline : restored cul=".&l:cursorline." cuc=".&l:cursorcolumn)
 endfun
 
@@ -7978,7 +9383,7 @@
   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
    if exists("+shellslash")
     let sskeep= &shellslash
-    setlocal noshellslash
+    setl noshellslash
     let result      = delete(path)
     let &shellslash = sskeep
    else
@@ -7990,7 +9395,7 @@
    let result= delete(path)
   endif
   if result < 0
-   call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
+   keepj call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
   endif
 
 "  call Dret("s:NetrwDelete ".result)
@@ -8022,13 +9427,13 @@
   if exists("b:netrw_option")         |let netrw_option          = b:netrw_option         |endif
   if exists("b:netrw_prvdir")         |let netrw_prvdir          = b:netrw_prvdir         |endif
 
-  call s:NetrwOptionRestore("w:")
+  keepj call s:NetrwOptionRestore("w:")
 "  call Decho("generate a buffer with keepjumps keepalt enew!")
   let netrw_keepdiff= &l:diff
   keepj keepalt enew!
   let &l:diff= netrw_keepdiff
 "  call Decho("bufnr($)=".bufnr("$"))
-  call s:NetrwOptionSave("w:")
+  keepj call s:NetrwOptionSave("w:")
 
   " copy function-local-variables to buffer variable equivalents
 "  call Decho("copy function-local variables back to buffer netrw variables")
@@ -8054,16 +9459,44 @@
    if b:netrw_curdir =~ '/$'
     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
      file NetrwTreeListing
-     set bt=nowrite noswf
-     nno <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
-     nno <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
+     set bt=nowrite noswf bh=hide
+     nno <silent> <buffer> [	:sil call <SID>TreeListMove('[')<cr>
+     nno <silent> <buffer> ]	:sil call <SID>TreeListMove(']')<cr>
     else
      exe "sil! keepalt file ".fnameescape(b:netrw_curdir)
     endif
    endif
   endif
 
-"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">")
+"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#")."> bh=".&bh)
+endfun
+
+" ---------------------------------------------------------------------
+" s:NetrwInsureWinVars: insure that a netrw buffer has its w: variables in spite of a wincmd v or s {{{2
+fun! s:NetrwInsureWinVars()
+"  call Dfunc("s:NetrwInsureWinVars() win#".winnr())
+  if !exists("w:netrw_liststyle")
+   let curbuf = bufnr("%")
+   let curwin = winnr()
+   let iwin   = 1
+   while iwin <= winnr("$")
+    exe iwin."wincmd w"
+    if winnr() != curwin && bufnr("%") == curbuf && exists("w:netrw_liststyle")
+     " looks like ctrl-w_s or ctrl-w_v was used to split a netrw buffer
+     let winvars= w:
+     break
+    endif
+    let iwin= iwin + 1
+   endwhile
+   exe "keepalt ".curwin."wincmd w"
+   if exists("winvars")
+"    call Decho("copying w#".iwin." window variables to w#".curwin)
+    for k in keys(winvars)
+     let w:{k}= winvars[k]
+    endfor
+   endif
+  endif
+"  call Dret("s:NetrwInsureWinVars win#".winnr())
 endfun
 
 " ------------------------------------------------------------------------
@@ -8080,7 +9513,7 @@
 "  changed sorting, etc.  Also see s:NetrwSaveWordPosn().
 fun! s:NetrwRestoreWordPosn()
 "  call Dfunc("NetrwRestoreWordPosn()")
-  silent! call search(s:netrw_saveword,'w')
+  sil! call search(s:netrw_saveword,'w')
 "  call Dret("NetrwRestoreWordPosn")
 endfun
 
@@ -8102,7 +9535,7 @@
 " ---------------------------------------------------------------------
 " s:RemotePathAnalysis: {{{2
 fun! s:RemotePathAnalysis(dirname)
-"  call Dfunc("s:RemotePathAnalysis()")
+"  call Dfunc("s:RemotePathAnalysis(a:dirname<".a:dirname.">)")
 
   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$'
   let s:method  = substitute(a:dirname,dirpat,'\1','')
@@ -8131,9 +9564,9 @@
 fun! s:RemoteSystem(cmd)
 "  call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)")
   if !executable(g:netrw_ssh_cmd)
-   call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
+   keepj call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
   elseif !exists("b:netrw_curdir")
-   call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
+   keepj call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
   else
    let cmd      = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME")
    let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
@@ -8183,15 +9616,28 @@
 "
 "             s:nbcd_curpos_{bufnr('%')} is set up by s:NetrwBrowseChgDir()
 fun! s:NetrwRexplore(islocal,dirname)
-"  call Dfunc("s:NetrwRexplore(islocal=".a:islocal." dirname<".a:dirname.">)")
-  if a:islocal
-   call netrw#LocalBrowseCheck(a:dirname)
+  if exists("s:netrwdrag")
+   return
+  endif
+"  call Dfunc("s:NetrwRexplore() w:netrw_rexlocal=".w:netrw_rexlocal." w:netrw_rexdir<".w:netrw_rexdir.">")
+  if !exists("w:netrw_rexlocal")
+"   "   call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist")
+   return
+  endif
+  if w:netrw_rexlocal
+   keepj call netrw#LocalBrowseCheck(w:netrw_rexdir)
   else
-   call s:NetrwBrowse(0,a:dirname)
+   keepj call s:NetrwBrowse(0,w:netrw_rexdir)
   endif
-  if exists("s:nbcd_curpos_{bufnr('%')}")
-   call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
-   unlet s:nbcd_curpos_{bufnr('%')}
+  if exists("s:initbeval")
+   set beval
+  endif
+  if exists("s:rexposn_".bufnr("%"))
+"   call Decho("(NetrwRexplore) restore posn, then unlet s:rexposn_".bufnr('%'))
+   keepj call netrw#NetrwRestorePosn(s:rexposn_{bufnr('%')})
+   unlet s:rexposn_{bufnr('%')}
+  else
+"   call Decho("(NetrwRexplore) s:rexposn_".bufnr('%')." doesn't exist")
   endif
   if exists("s:explore_match")
    exe "2match netrwMarkFile /".s:explore_match."/"
@@ -8265,32 +9711,14 @@
 " s:SetRexDir: set directory for :Rexplore {{{2
 fun! s:SetRexDir(islocal,dirname)
 "  call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)")
-  " set up Rex and leftmouse-double-click
-  if a:islocal
-   exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")'
-   if g:netrw_retmap
-    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
-     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
-    endif
-    let dir = escape(a:dirname, s:netrw_map_escape)
-    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(1,"'.dir.'")<cr>'
-   endif
-  else
-   exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")'
-   if g:netrw_retmap
-    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
-     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
-    endif
-    let dir = escape(a:dirname, s:netrw_map_escape)
-    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(0,"'.dir.'")<cr>'
-   endif
-  endif
-"  call Dret("s:SetRexDir")
+  let w:netrw_rexdir   = a:dirname
+  let w:netrw_rexlocal = a:islocal
+"  call Dret("s:SetRexDir : win#".winnr()." ".(a:islocal? "local" : "remote")." dir: ".a:dirname)
 endfun
 
 " ---------------------------------------------------------------------
 " s:Strlen: this function returns the length of a string, even if its {{{2
-"           using two-byte etc characters.
+"           using multiple-byte characters.
 "           Solution from Nicolai Weibull, vim docs (:help strlen()), Tony Mechelynck,
 "           and a bit from me.
 "           if g:netrw_xstrlen is zero (default), then the builtin strlen() function is used.
@@ -8317,6 +9745,7 @@
    call setline(line("."),a:x)
    let ret= virtcol("$") - 1
    keepj d
+   keepj norm! k
    let &mod= modkeep
 
   else
@@ -8390,12 +9819,12 @@
 "                      Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
 fun! s:UpdateBuffersMenu()
 "  call Dfunc("s:UpdateBuffersMenu()")
-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
+  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
    try
-    silent emenu Buffers.Refresh\ menu
+    sil emenu Buffers.Refresh\ menu
    catch /^Vim\%((\a\+)\)\=:E/
     let v:errmsg= ""
-    silent call s:NetrwBMShow()
+    sil keepj call s:NetrwBMShow()
    endtry
   endif
 "  call Dret("s:UpdateBuffersMenu")
@@ -8403,7 +9832,7 @@
 
 " ---------------------------------------------------------------------
 " s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2
-"              Matching function to BufferWinVars()
+"              Matching function to s:SetBufWinVars()
 fun! s:UseBufWinVars()
 "  call Dfunc("s:UseBufWinVars()")
   if exists("b:netrw_liststyle")       && !exists("w:netrw_liststyle")      |let w:netrw_liststyle       = b:netrw_liststyle      |endif
@@ -8420,27 +9849,7 @@
 endfun
 
 " ---------------------------------------------------------------------
-" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2
-fun! netrw#WinPath(path)
-"  call Dfunc("netrw#WinPath(path<".a:path.">)")
-  if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16"))
-   " remove cygdrive prefix, if present
-   let path = substitute(a:path,'/cygdrive/\(.\)','\1:','')
-   " remove trailing slash (Win95)
-   let path = substitute(path, '\(\\\|/\)$', '', 'g')
-   " remove escaped spaces
-   let path = substitute(path, '\ ', ' ', 'g')
-   " convert slashes to backslashes
-   let path = substitute(path, '/', '\', 'g')
-  else
-   let path= a:path
-  endif
-"  call Dret("netrw#WinPath <".path.">")
-  return path
-endfun
-
-" ---------------------------------------------------------------------
-" Settings Restoration: {{{2
+" Settings Restoration: {{{1
 let &cpo= s:keepcpo
 unlet s:keepcpo
 
diff -Naur vim73.orig/runtime/autoload/netrwFileHandlers.vim vim73/runtime/autoload/netrwFileHandlers.vim
--- vim73.orig/runtime/autoload/netrwFileHandlers.vim	2010-05-15 11:03:30.000000000 +0000
+++ vim73/runtime/autoload/netrwFileHandlers.vim	2013-08-04 19:09:07.633952811 +0000
@@ -1,9 +1,9 @@
 " netrwFileHandlers: contains various extension-based file handlers for
 "                    netrw's browsers' x command ("eXecute launcher")
-" Author:	Charles E. Campbell, Jr.
-" Date:		Sep 30, 2008
-" Version:	10
-" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
+" Author:	Charles E. Campbell
+" Date:		May 03, 2013
+" Version:	11b	ASTRO-ONLY
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -20,7 +20,7 @@
 if exists("g:loaded_netrwFileHandlers") || &cp
  finish
 endif
-let g:loaded_netrwFileHandlers= "v10"
+let g:loaded_netrwFileHandlers= "v11b"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of netrwFileHandlers needs vim 7.2"
@@ -34,10 +34,10 @@
 " netrwFileHandlers#Invoke: {{{1
 fun! netrwFileHandlers#Invoke(exten,fname)
 "  call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
-  let fname= a:fname
+  let exten= a:exten
   " list of supported special characters.  Consider rcs,v --- that can be
   " supported with a NFH_rcsCOMMAv() handler
-  if a:fname =~ '[@:,$!=\-+%?;~]'
+  if exten =~ '[@:,$!=\-+%?;~]'
    let specials= {
 \   '@' : 'AT',
 \   ':' : 'COLON',
@@ -51,20 +51,20 @@
 \   '?' : 'QUESTION',
 \   ';' : 'SEMICOLON',
 \   '~' : 'TILDE'}
-   let fname= substitute(a:fname,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
+   let exten= substitute(a:exten,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
 "   call Decho('fname<'.fname.'> done with dictionary')
   endif
 
-  if a:exten != "" && exists("*NFH_".a:exten)
+  if a:exten != "" && exists("*NFH_".exten)
    " support user NFH_*() functions
 "   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
-   exe "let ret= NFH_".a:exten.'("'.fname.'")'
-  elseif a:exten != "" && exists("*s:NFH_".a:exten)
+   exe "let ret= NFH_".exten.'("'.a:fname.'")'
+  elseif a:exten != "" && exists("*s:NFH_".exten)
    " use builtin-NFH_*() functions
 "   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
-   exe "let ret= s:NFH_".a:exten.'("'.fname.'")'
+   exe "let ret= s:NFH_".a:exten.'("'.a:fname.'")'
   endif
-  
+
 "  call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
   return 0
 endfun
@@ -356,6 +356,7 @@
 endfun
 
 let &cpo= s:keepcpo
+unlet s:keepcpo
 " ---------------------------------------------------------------------
 "  Modelines: {{{1
 "  vim: fdm=marker
diff -Naur vim73.orig/runtime/autoload/netrwSettings.vim vim73/runtime/autoload/netrwSettings.vim
--- vim73.orig/runtime/autoload/netrwSettings.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/autoload/netrwSettings.vim	2013-08-04 19:09:07.637286134 +0000
@@ -1,8 +1,8 @@
 " netrwSettings.vim: makes netrw settings simpler
-" Date:		Sep 03, 2008
-" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
-" Version:	13
-" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
+" Date:		May 03, 2013
+" Maintainer:	Charles E Campbell <drchipNOSPAM at campbellfamily dot biz>
+" Version:	14a	ASTRO-ONLY
+" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -19,7 +19,7 @@
 if exists("g:loaded_netrwSettings") || &cp
   finish
 endif
-let g:loaded_netrwSettings = "v13"
+let g:loaded_netrwSettings = "v14a"
 if v:version < 700
  echohl WarningMsg
  echo "***warning*** this version of netrwSettings needs vim 7.0"
@@ -63,7 +63,7 @@
   endif
 
   put ='+ ---------------------------------------------'
-  put ='+  NetrwSettings:  by Charles E. Campbell, Jr.'
+  put ='+  NetrwSettings:  by Charles E. Campbell'
   put ='+ Press <F1> with cursor atop any line for help'
   put ='+ ---------------------------------------------'
   let s:netrw_settings_stop= line(".")
@@ -88,6 +88,7 @@
   put = 'let g:netrw_ftpmode           = '.g:netrw_ftpmode
   put = 'let g:netrw_ignorenetrc       = '.g:netrw_ignorenetrc
   put = 'let g:netrw_sshport           = '.g:netrw_sshport
+  put = 'let g:netrw_silent            = '.g:netrw_silent
   put = 'let g:netrw_use_nt_rcp        = '.g:netrw_use_nt_rcp
   put = 'let g:netrw_win95ftp          = '.g:netrw_win95ftp
   let s:netrw_xfer_stop= line(".")
@@ -99,51 +100,81 @@
   put ='+ Netrw Browser Control'
   put = 'let g:netrw_alto              = '.g:netrw_alto
   put = 'let g:netrw_altv              = '.g:netrw_altv
+  put = 'let g:netrw_banner            = '.g:netrw_banner
+  if exists("g:netrw_bannerbackslash")
+   put = 'let g:netrw_bannerbackslash   = '.g:netrw_bannerbackslash
+  else
+   put = '\" let g:netrw_bannerbackslash   = (not defined)'
+  endif
   put = 'let g:netrw_browse_split      = '.g:netrw_browse_split
   if exists("g:netrw_browsex_viewer")
-   put = 'let g:netrw_browsex_viewer    = '.g:netrw_browsex_viewer
+   put = 'let g:netrw_browsex_viewer   = '.g:netrw_browsex_viewer
   else
-   put = 'let g:netrw_browsex_viewer    = (not defined)'
+   put = '\" let g:netrw_browsex_viewer   = (not defined)'
   endif
   put = 'let g:netrw_compress          = '.g:netrw_compress
-  put = 'let g:netrw_cursorline        = '.g:netrw_cursorline
+  if exists("g:Netrw_corehandler")
+   put = 'let g:Netrw_corehandler      = '.g:Netrw_corehandler
+  else
+   put = '\" let g:Netrw_corehandler      = (not defined)'
+  endif
+  put = 'let g:netrw_ctags             = '.g:netrw_ctags
+  put = 'let g:netrw_cursor            = '.g:netrw_cursor
   let decompressline= line("$")
-  put ='let g:netrw_decompress...'
+  put = 'let g:netrw_decompress        = '.string(g:netrw_decompress)
+  if exists("g:netrw_dynamic_maxfilenamelen")
+   put = 'let g:netrw_dynamic_maxfilenamelen='.g:netrw_dynamic_maxfilenamelen
+  else
+   put = '\" let g:netrw_dynamic_maxfilenamelen= (not defined)'
+  endif
   put = 'let g:netrw_dirhistmax        = '.g:netrw_dirhistmax
+  put = 'let g:netrw_errorlvl          = '.g:netrw_errorlvl
   put = 'let g:netrw_fastbrowse        = '.g:netrw_fastbrowse
   let fnameescline= line("$")
-  put = 'let g:netrw_fname_escape...'
+  put = 'let g:netrw_fname_escape      = '.string(g:netrw_fname_escape)
   put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
   put = 'let g:netrw_ftp_list_cmd      = '.g:netrw_ftp_list_cmd
   put = 'let g:netrw_ftp_sizelist_cmd  = '.g:netrw_ftp_sizelist_cmd
   put = 'let g:netrw_ftp_timelist_cmd  = '.g:netrw_ftp_timelist_cmd
   let globescline= line("$")
-  put ='let g:netrw_glob_escape...'
+  put = 'let g:netrw_glob_escape       = '.string(g:netrw_glob_escape)
   put = 'let g:netrw_hide              = '.g:netrw_hide
+  if exists("g:netrw_home")
+   put = 'let g:netrw_home              = '.g:netrw_home
+  else
+   put = '\" let g:netrw_home              = (not defined)'
+  endif
   put = 'let g:netrw_keepdir           = '.g:netrw_keepdir
   put = 'let g:netrw_list_cmd          = '.g:netrw_list_cmd
   put = 'let g:netrw_list_hide         = '.g:netrw_list_hide
   put = 'let g:netrw_liststyle         = '.g:netrw_liststyle
   put = 'let g:netrw_localcopycmd      = '.g:netrw_localcopycmd
-  put = 'let g:netrw_local_mkdir       = '.g:netrw_local_mkdir
+  put = 'let g:netrw_localmkdir        = '.g:netrw_localmkdir
   put = 'let g:netrw_localmovecmd      = '.g:netrw_localmovecmd
-  put = 'let g:netrw_local_rmdir       = '.g:netrw_local_rmdir
+  put = 'let g:netrw_localrmdir        = '.g:netrw_localrmdir
   put = 'let g:netrw_maxfilenamelen    = '.g:netrw_maxfilenamelen
   put = 'let g:netrw_menu              = '.g:netrw_menu
+  put = 'let g:netrw_mousemaps         = '.g:netrw_mousemaps
   put = 'let g:netrw_mkdir_cmd         = '.g:netrw_mkdir_cmd
+  if exists("g:netrw_nobeval")
+   put = 'let g:netrw_nobeval           = '.g:netrw_nobeval
+  else
+   put = '\" let g:netrw_nobeval           = (not defined)'
+  endif
+  put = 'let g:netrw_remote_mkdir      = '.g:netrw_remote_mkdir
   put = 'let g:netrw_preview           = '.g:netrw_preview
   put = 'let g:netrw_rename_cmd        = '.g:netrw_rename_cmd
   put = 'let g:netrw_retmap            = '.g:netrw_retmap
   put = 'let g:netrw_rm_cmd            = '.g:netrw_rm_cmd
   put = 'let g:netrw_rmdir_cmd         = '.g:netrw_rmdir_cmd
   put = 'let g:netrw_rmf_cmd           = '.g:netrw_rmf_cmd
-  put = 'let g:netrw_silent            = '.g:netrw_silent
   put = 'let g:netrw_sort_by           = '.g:netrw_sort_by
   put = 'let g:netrw_sort_direction    = '.g:netrw_sort_direction
   put = 'let g:netrw_sort_options      = '.g:netrw_sort_options
   put = 'let g:netrw_sort_sequence     = '.g:netrw_sort_sequence
   put = 'let g:netrw_special_syntax    = '.g:netrw_special_syntax
   put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
+  put = 'let g:netrw_ssh_cmd           = '.g:netrw_ssh_cmd
   put = 'let g:netrw_scpport           = '.g:netrw_scpport
   put = 'let g:netrw_sepchr            = '.g:netrw_sepchr
   put = 'let g:netrw_sshport           = '.g:netrw_sshport
diff -Naur vim73.orig/runtime/autoload/phpcomplete.vim vim73/runtime/autoload/phpcomplete.vim
--- vim73.orig/runtime/autoload/phpcomplete.vim	2010-05-15 11:03:30.000000000 +0000
+++ vim73/runtime/autoload/phpcomplete.vim	2013-08-04 19:09:07.643952781 +0000
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	PHP
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2006 May 9
+" Last Change:	2011 Dec 08
 "
 "   TODO:
 "   - Class aware completion:
@@ -650,6 +650,7 @@
 	" this is the most efficient way. The other way
 	" is to go through the looong string looking for
 	" matching {}
+	let original_window = winnr()
 	below 1new
 	0put =cfile
 	call search('class\s\+'.a:name)
@@ -667,6 +668,9 @@
 	let classcontent = join(classc, "\n")
 
 	bw! %
+	" go back to where we started
+	exe original_window.'wincmd w'
+
 	if extends_class != ''
 		let classlocation = phpcomplete#GetClassLocation(extends_class)
 		if filereadable(classlocation)
diff -Naur vim73.orig/runtime/autoload/rubycomplete.vim vim73/runtime/autoload/rubycomplete.vim
--- vim73.orig/runtime/autoload/rubycomplete.vim	2010-05-27 13:54:35.000000000 +0000
+++ vim73/runtime/autoload/rubycomplete.vim	2013-08-04 19:09:07.650619427 +0000
@@ -1,9 +1,7 @@
 " Vim completion script
 " Language:             Ruby
 " Maintainer:           Mark Guzman <segfault@hasno.info>
-" Last Change:          2009 Sep 28
-" URL:                  http://vim-ruby.rubyforge.org
-" Anon CVS:             See above site
+" URL:                  https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
 " Maintainer Version:   0.8.1
 " ----------------------------------------------------------------------------
@@ -12,16 +10,23 @@
 " ----------------------------------------------------------------------------
 
 " {{{ requirement checks
+
+function! s:ErrMsg(msg)
+    echohl ErrorMsg
+    echo a:msg
+    echohl None
+endfunction
+
 if !has('ruby')
-    s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" )
-    s:ErrMsg( "Error: falling back to syntax completion" )
+    call s:ErrMsg( "Error: Rubycomplete requires vim compiled with +ruby" )
+    call s:ErrMsg( "Error: falling back to syntax completion" )
     " lets fall back to syntax completion
     setlocal omnifunc=syntaxcomplete#Complete
     finish
 endif
 
 if version < 700
-    s:ErrMsg( "Error: Required vim >= 7.0" )
+    call s:ErrMsg( "Error: Required vim >= 7.0" )
     finish
 endif
 " }}} requirement checks
@@ -51,12 +56,6 @@
 " {{{ vim-side support functions
 let s:rubycomplete_debug = 0
 
-function! s:ErrMsg(msg)
-    echohl ErrorMsg
-    echo a:msg
-    echohl None
-endfunction
-
 function! s:dprint(msg)
     if s:rubycomplete_debug == 1
         echom a:msg
@@ -133,7 +132,7 @@
     let stopline = 1
     let vtp = ''
     let pos = getpos('.')
-    let sstr = '^\s*#\s*@var\s*'.a:v.'\>\s\+[^ \t]\+\s*$'
+    let sstr = '^\s*#\s*@var\s*'.escape(a:v, '*').'\>\s\+[^ \t]\+\s*$'
     let [lnum,lcol] = searchpos(sstr,'nb',stopline)
     if lnum != 0 && lcol != 0
         call setpos('.',pos)
@@ -275,7 +274,7 @@
     pare = /^\s*class\s*(.*)\s*<\s*(.*)\s*\n/.match( classdef )
     load_buffer_class( $2 ) if pare != nil  && $2 != name # load parent class if needed
 
-    mixre = /.*\n\s*include\s*(.*)\s*\n/.match( classdef )
+    mixre = /.*\n\s*(include|prepend)\s*(.*)\s*\n/.match( classdef )
     load_buffer_module( $2 ) if mixre != nil && $2 != name # load mixins if needed
 
     begin
@@ -364,6 +363,10 @@
     print txt if @@debug
   end
 
+  def escape_vim_singlequote_string(str)
+    str.to_s.gsub(/'/,"\\'")
+  end
+
   def get_buffer_entity_list( type )
     # this will be a little expensive.
     loading_allowed = VIM::evaluate("exists('g:rubycomplete_buffer_loading') && g:rubycomplete_buffer_loading")
@@ -526,9 +529,9 @@
   end
 
   def clean_sel(sel, msg)
-    sel.delete_if { |x| x == nil }
-    sel.uniq!
-    sel.grep(/^#{Regexp.quote(msg)}/) if msg != nil
+    ret = sel.reject{|x|x.nil?}.uniq
+    ret = ret.grep(/^#{Regexp.quote(msg)}/) if msg != nil
+    ret
   end
 
   def get_rails_view_methods
@@ -767,10 +770,10 @@
     constants = clean_sel( constants, message )
 
     valid = []
-    valid += methods.collect { |m| { :name => m, :type => 'm' } }
-    valid += variables.collect { |v| { :name => v, :type => 'v' } }
-    valid += classes.collect { |c| { :name => c, :type => 't' } }
-    valid += constants.collect { |d| { :name => d, :type => 'd' } }
+    valid += methods.collect { |m| { :name => m.to_s, :type => 'm' } }
+    valid += variables.collect { |v| { :name => v.to_s, :type => 'v' } }
+    valid += classes.collect { |c| { :name => c.to_s, :type => 't' } }
+    valid += constants.collect { |d| { :name => d.to_s, :type => 'd' } }
     valid.sort! { |x,y| x[:name] <=> y[:name] }
 
     outp = ""
@@ -779,7 +782,7 @@
     rg.step(150) do |x|
       stpos = 0+x
       enpos = 150+x
-      valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s','kind':'%s'}," % [ c[:name], c[:name], c[:type] ] }
+      valid[stpos..enpos].each { |c| outp += "{'word':'%s','item':'%s','kind':'%s'}," % [ c[:name], c[:name], c[:type] ].map{|x|escape_vim_singlequote_string(x)} }
       outp.sub!(/,$/, '')
 
       VIM::command("call extend(g:rubycomplete_completions, [%s])" % outp)
diff -Naur vim73.orig/runtime/autoload/spellfile.vim vim73/runtime/autoload/spellfile.vim
--- vim73.orig/runtime/autoload/spellfile.vim	2010-05-15 11:03:31.000000000 +0000
+++ vim73/runtime/autoload/spellfile.vim	2013-08-04 19:09:07.650619427 +0000
@@ -1,6 +1,6 @@
 " Vim script to download a missing spell file
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2008 Nov 29
+" Last Change:	2012 Jan 08
 
 if !exists('g:spellfile_URL')
   " Prefer using http:// when netrw should be able to use it, since
@@ -70,7 +70,7 @@
     " Remember the buffer number, we check it below.
     new
     let newbufnr = winbufnr(0)
-    setlocal bin
+    setlocal bin fenc=
     echo 'Downloading ' . fname . '...'
     call spellfile#Nread(fname)
     if getline(2) !~ 'VIMspell'
@@ -83,7 +83,7 @@
 	  " Our buffer has vanished!?  Open a new window.
 	  echomsg "download buffer disappeared, opening a new one"
 	  new
-	  setlocal bin
+	  setlocal bin fenc=
 	else
 	  exe winnr . "wincmd w"
 	endif
@@ -120,6 +120,7 @@
       else
 	let dirname = escape(dirlist[dirchoice], ' ')
       endif
+      setlocal fenc=
       exe "write " . dirname . '/' . fname
 
       " Also download the .sug file, if the user wants to.
diff -Naur vim73.orig/runtime/autoload/sqlcomplete.vim vim73/runtime/autoload/sqlcomplete.vim
--- vim73.orig/runtime/autoload/sqlcomplete.vim	2010-08-01 13:55:41.000000000 +0000
+++ vim73/runtime/autoload/sqlcomplete.vim	2013-08-04 19:09:07.653952751 +0000
@@ -1,16 +1,63 @@
 " Vim OMNI completion script for SQL
 " Language:    SQL
 " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
-" Version:     10.0
-" Last Change: 2010 Jun 11
+" Version:     15.0
+" Last Change: 2013 May 13
+" Homepage:    http://www.vim.org/scripts/script.php?script_id=1572
 " Usage:       For detailed help
-"              ":help sql.txt" 
-"              or ":help ft-sql-omni" 
+"              ":help sql.txt"
+"              or ":help ft-sql-omni"
 "              or read $VIMRUNTIME/doc/sql.txt
 
 " History
+"
+" TODO
+"     - Jonas Enberg - if no table is found when using column completion
+"       look backwards to a FROM clause and find the first table
+"       and complete it.
+"
+" Version 15.0 (May 2013)
+"     - NF: Changed the SQL precached syntax items, omni_sql_precache_syntax_groups,
+"           to use regular expressions to pick up extended syntax group names.
+"           This requires an updated SyntaxComplete plugin version 13.0.
+"           If the required versions have not been installed, previous
+"           behaviour will not be impacted.
+"
+" Version 14.0 (Dec 2012)
+"     - BF: Added check for cpo
+"
+" Version 13.0 (Dec 2012)
+"     - NF: When completing column lists or drilling into a table
+"           and g:omni_sql_include_owner is enabled, the
+"           only the table name would be replaced with the column
+"           list instead of the table name and owner (if specified).
+"     - NF: When completing column lists using table aliases
+"           and g:omni_sql_include_owner is enabled, account
+"           for the owner name when looking up the table
+"           list instead of the table name and owner (if specified).
+"     - BF: When completing column lists or drilling into a table
+"           and g:omni_sql_include_owner is enabled, the
+"           column list could often not be found for the table.
+"     - BF: When OMNI popped up, possibly the wrong word
+"           would be replaced for column and column list options.
+"
+" Version 12.0 (Feb 2012)
+"     - Partial column name completion did not work when a table
+"       name or table alias was provided (Jonas Enberg).
+"     - Improved the handling of column completion.  First we match any
+"       columns from a previous completion.  If not matches are found, we
+"       consider the partial name to be a table or table alias for the
+"       query and attempt to match on it.
+"
+" Version 11.0 (Jan 2012)
+"     Added g:omni_sql_default_compl_type variable
+"         - You can specify which type of completion to default to
+"           when pressing <C-X><C-O>.  The entire list of available
+"           choices can be found in the calls to sqlcomplete#Map in:
+"               ftplugin/sql.vim
+"
 " Version 10.0
-"     Updated PreCacheSyntax() 
+"     Updated PreCacheSyntax()
 "         - Now returns a List of the syntax items it finds.
 "           This allows other plugins / scripts to use this list for their own
 "           purposes.  In this case XPTemplate can use them for a Choose list.
@@ -18,33 +65,33 @@
 "           warning if not.
 "         - Verifies the parameters are the correct type and displays a
 "           warning if not.
-"     Updated SQLCWarningMsg() 
+"     Updated SQLCWarningMsg()
 "         - Prepends warning message with SQLComplete so you know who issued
 "           the warning.
-"     Updated SQLCErrorMsg() 
+"     Updated SQLCErrorMsg()
 "         - Prepends error message with SQLComplete so you know who issued
 "           the error.
-"     
-" Version 9.0
+"
+" Version 9.0 (May 2010)
 "     This change removes some of the support for tables with spaces in their
-"     names in order to simplify the regexes used to pull out query table 
+"     names in order to simplify the regexes used to pull out query table
 "     aliases for more robust table name and column name code completion.
 "     Full support for "table names with spaces" can be added in again
 "     after 7.3.
 "
 " Version 8.0
-"     Incorrectly re-executed the g:ftplugin_sql_omni_key_right and g:ftplugin_sql_omni_key_left 
+"     Incorrectly re-executed the g:ftplugin_sql_omni_key_right and g:ftplugin_sql_omni_key_left
 "     when drilling in and out of a column list for a table.
 "
-" Version 7.0
+" Version 7.0 (Jan 2010)
 "     Better handling of object names
 "
-" Version 6.0
+" Version 6.0 (Apr 2008)
 "     Supports object names with spaces "my table name"
 "
 " Set completion with CTRL-X CTRL-O to autoloaded function.
 " This check is in place in case this script is
-" sourced directly instead of using the autoload feature. 
+" sourced directly instead of using the autoload feature.
 if exists('&omnifunc')
     " Do not set the option if already set since this
     " results in an E117 warning.
@@ -54,9 +101,11 @@
 endif
 
 if exists('g:loaded_sql_completion')
-    finish 
+    finish
 endif
-let g:loaded_sql_completion = 100
+let g:loaded_sql_completion = 150
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Maintains filename of dictionary
 let s:sql_file_table        = ""
@@ -69,17 +118,19 @@
 let s:tbl_cols              = []
 let s:syn_list              = []
 let s:syn_value             = []
- 
+
 " Used in conjunction with the syntaxcomplete plugin
 let s:save_inc              = ""
 let s:save_exc              = ""
-if exists('g:omni_syntax_group_include_sql')
-    let s:save_inc = g:omni_syntax_group_include_sql
+if !exists('g:omni_syntax_group_include_sql')
+    let g:omni_syntax_group_include_sql = ''
 endif
-if exists('g:omni_syntax_group_exclude_sql')
-    let s:save_exc = g:omni_syntax_group_exclude_sql
+if !exists('g:omni_syntax_group_exclude_sql')
+    let g:omni_syntax_group_exclude_sql = ''
 endif
- 
+let s:save_inc = g:omni_syntax_group_include_sql
+let s:save_exc = g:omni_syntax_group_exclude_sql
+
 " Used with the column list
 let s:save_prev_table       = ""
 
@@ -90,12 +141,12 @@
 " Default syntax items to precache
 if !exists('g:omni_sql_precache_syntax_groups')
     let g:omni_sql_precache_syntax_groups = [
-                \ 'syntax',
-                \ 'sqlKeyword',
-                \ 'sqlFunction',
-                \ 'sqlOption',
-                \ 'sqlType',
-                \ 'sqlStatement'
+                \ 'syntax\w*',
+                \ 'sqlKeyword\w*',
+                \ 'sqlFunction\w*',
+                \ 'sqlOption\w*',
+                \ 'sqlType\w*',
+                \ 'sqlStatement\w*'
                 \ ]
 endif
 " Set ignorecase to the ftplugin standard
@@ -110,14 +161,25 @@
         if g:loaded_dbext >= 300
             " New to dbext 3.00, by default the table lists include the owner
             " name of the table.  This is used when determining how much of
-            " whatever has been typed should be replaced as part of the 
+            " whatever has been typed should be replaced as part of the
             " code replacement.
             let g:omni_sql_include_owner = 1
         endif
     endif
 endif
+" Default type of completion used when <C-X><C-O> is pressed
+if !exists('g:omni_sql_default_compl_type')
+    let g:omni_sql_default_compl_type = 'table'
+endif
 
 " This function is used for the 'omnifunc' option.
+" It is called twice by omni and it is responsible
+" for returning the completion list of items.
+" But it must also determine context of what to complete
+" and what to "replace" with the completion.
+" The a:base, is replaced directly with what the user
+" chooses from the choices.
+" The s:prepend provides context for the completion.
 function! sqlcomplete#Complete(findstart, base)
 
     " Default to table name completion
@@ -126,6 +188,7 @@
     if exists('b:sql_compl_type')
         let compl_type = b:sql_compl_type
     endif
+    let begindot = 0
 
     " First pass through this function determines how much of the line should
     " be replaced by whatever is chosen from the completion list
@@ -134,13 +197,12 @@
         let line     = getline('.')
         let start    = col('.') - 1
         let lastword = -1
-        let begindot = 0
         " Check if the first character is a ".", for column completion
         if line[start - 1] == '.'
             let begindot = 1
         endif
         while start > 0
-            " Additional code was required to handle objects which 
+            " Additional code was required to handle objects which
             " can contain spaces like "my table name".
             if line[start - 1] !~ '\(\w\|\.\)'
                 " If the previous character is not a period or word character
@@ -150,7 +212,7 @@
             elseif line[start - 1] =~ '\w'
                 " If the previous character is word character continue back
                 let start -= 1
-            elseif line[start - 1] =~ '\.' && 
+            elseif line[start - 1] =~ '\.' &&
                         \ compl_type =~ 'column\|table\|view\|procedure'
                 " If the previous character is a period and we are completing
                 " an object which can be specified with a period like this:
@@ -160,7 +222,10 @@
                 " If lastword has already been set for column completion
                 " break from the loop, since we do not also want to pickup
                 " a table name if it was also supplied.
-                if lastword != -1 && compl_type == 'column' 
+                " Unless g:omni_sql_include_owner == 1, then we can
+                " include the ownername.
+                if lastword != -1 && compl_type == 'column'
+                            \ && g:omni_sql_include_owner == 0
                     break
                 endif
                 " If column completion was specified stop at the "." if
@@ -171,8 +236,8 @@
                 endif
                 " If omni_sql_include_owner = 0, do not include the table
                 " name as part of the substitution, so break here
-                if lastword == -1 && 
-                            \ compl_type =~ 'table\|view\|procedure\column_csv' && 
+                if lastword == -1 &&
+                            \ compl_type =~ '\<\(table\|view\|procedure\|column\|column_csv\)\>' &&
                             \ g:omni_sql_include_owner == 0
                     let lastword = start
                     break
@@ -202,7 +267,7 @@
     let compl_list = []
 
     " Default to table name completion
-    let compl_type = 'table'
+    let compl_type = g:omni_sql_default_compl_type
     " Allow maps to specify what type of object completion they want
     if exists('b:sql_compl_type')
         let compl_type = b:sql_compl_type
@@ -216,7 +281,7 @@
 
     if compl_type == 'table' ||
                 \ compl_type == 'procedure' ||
-                \ compl_type == 'view' 
+                \ compl_type == 'view'
 
         " This type of completion relies upon the dbext.vim plugin
         if s:SQLCCheck4dbext() == -1
@@ -254,7 +319,7 @@
 
         if base == ""
             " The last time we displayed a column list we stored
-            " the table name.  If the user selects a column list 
+            " the table name.  If the user selects a column list
             " without a table name of alias present, assume they want
             " the previous column list displayed.
             let base = s:save_prev_table
@@ -269,20 +334,26 @@
             let table  = matchstr( base, '^\(.*\.\)\?\zs.*\ze\..*' )
             let column = matchstr( base, '.*\.\zs.*' )
 
+            if g:omni_sql_include_owner == 1 && owner == '' && table != '' && column != ''
+                let owner  = table
+                let table  = column
+                let column = ''
+            endif
+
             " It is pretty well impossible to determine if the user
             " has entered:
             "    owner.table
             "    table.column_prefix
-            " So there are a couple of things we can do to mitigate 
+            " So there are a couple of things we can do to mitigate
             " this issue.
             "    1.  Check if the dbext plugin has the option turned
             "        on to even allow owners
             "    2.  Based on 1, if the user is showing a table list
-            "        and the DrillIntoTable (using <Right>) then 
+            "        and the DrillIntoTable (using <Right>) then
             "        this will be owner.table.  In this case, we can
-            "        check to see the table.column exists in the 
+            "        check to see the table.column exists in the
             "        cached table list.  If it does, then we have
-            "        determined the user has actually chosen 
+            "        determined the user has actually chosen
             "        owner.table, not table.column_prefix.
             let found = -1
             if g:omni_sql_include_owner == 1 && owner == ''
@@ -297,17 +368,46 @@
             " If the user has indicated not to use table owners at all and
             " the base ends in a '.' we know they are not providing a column
             " name, so we can shift the items appropriately.
-            if found != -1 || (g:omni_sql_include_owner == 0 && base !~ '\.$')
-                let owner  = table
-                let table  = column
-                let column = ''
-            endif
+            " if found != -1 || (g:omni_sql_include_owner == 0 && base !~ '\.$')
+            "     let owner  = table
+            "     let table  = column
+            "     let column = ''
+            " endif
         else
+            " If no "." was provided and the user asked for
+            " column level completion, first attempt the match
+            " on any previous column lists.  If the user asked
+            " for a list of columns comma separated, continue as usual.
+            if compl_type == 'column' && s:save_prev_table != ''
+                " The last time we displayed a column list we stored
+                " the table name.  If the user selects a column list
+                " without a table name of alias present, assume they want
+                " the previous column list displayed.
+                let table     = s:save_prev_table
+                let list_type = ''
+
+                let compl_list  = s:SQLCGetColumns(table, list_type)
+                if ! empty(compl_list)
+                    " If no column prefix has been provided and the table
+                    " name was provided, append it to each of the items
+                    " returned.
+                    let compl_list = filter(deepcopy(compl_list), 'v:val=~"^'.base.'"' )
+
+                    " If not empty, we have a match on columns
+                    " return the list
+                    if ! empty(compl_list)
+                        return compl_list
+                    endif
+                endif
+            endif
+            " Since no columns were found to match the base supplied
+            " assume the user is trying to complete the column list
+            " for a table (and or an alias to a table).
             let table  = base
         endif
 
         " Get anything after the . and consider this the table name
-        " If an owner has been specified, then we must consider the 
+        " If an owner has been specified, then we must consider the
         " base to be a partial column name
         " let base  = matchstr( base, '^\(.*\.\)\?\zs.*' )
 
@@ -322,16 +422,25 @@
                 let list_type     = 'csv'
             endif
 
-            let compl_list  = s:SQLCGetColumns(table, list_type)
+            " If we are including the OWNER for the objects, then for
+            " table completion, if we have it, it should be included
+            " as there can be the same table names in a database yet
+            " with different owner names.
+            if g:omni_sql_include_owner == 1 && owner != '' && table != ''
+                let compl_list  = s:SQLCGetColumns(owner.'.'.table, list_type)
+            else
+                let compl_list  = s:SQLCGetColumns(table, list_type)
+            endif
+
             if column != ''
                 " If no column prefix has been provided and the table
                 " name was provided, append it to each of the items
                 " returned.
-                let compl_list = map(compl_list, "table.'.'.v:val")
+                let compl_list = map(compl_list, 'table.".".v:val')
                 if owner != ''
                     " If an owner has been provided append it to each of the
                     " items returned.
-                    let compl_list = map(compl_list, "owner.'.'.v:val")
+                    let compl_list = map(compl_list, 'owner.".".v:val')
                 endif
             else
                 let base = ''
@@ -345,11 +454,14 @@
         endif
     elseif compl_type == 'resetCache'
         " Reset all cached items
-        let s:tbl_name  = []
-        let s:tbl_alias = []
-        let s:tbl_cols  = []
-        let s:syn_list  = []
-        let s:syn_value = []
+        let s:tbl_name           = []
+        let s:tbl_alias          = []
+        let s:tbl_cols           = []
+        let s:syn_list           = []
+        let s:syn_value          = []
+        let s:sql_file_table     = ""
+        let s:sql_file_procedure = ""
+        let s:sql_file_view      = ""
 
         let msg = "All SQL cached items have been removed."
         call s:SQLCWarningMsg(msg)
@@ -361,22 +473,41 @@
 
     if base != ''
         " Filter the list based on the first few characters the user entered.
-        " Check if the text matches at the beginning 
-        " or 
+        " Check if the text matches at the beginning
+        "         \\(^.base.'\\)
+        " or
         " Match to a owner.table or alias.column type match
+        "         ^\\(\\w\\+\\.\\)\\?'.base.'\\)
         " or
         " Handle names with spaces "my table name"
+        "         "\\(^'.base.'\\|^\\(\\w\\+\\.\\)\\?'.base.'\\)"'
+        "
         let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|^\\(\\w\\+\\.\\)\\?'.base.'\\)"'
         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\)"'
         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\(\\.\\)\\?'.base.'\\)"'
         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\([^.]*\\)\\?'.base.'\\)"'
         let compl_list = filter(deepcopy(compl_list), expr)
+
+        if empty(compl_list) && compl_type == 'table' && base =~ '\.$'
+            " It is possible we could be looking for column name completion
+            " and the user simply hit C-X C-O to lets try it as well
+            " since we had no hits with the tables.
+            " If the base ends with a . it is hard to know if we are
+            " completing table names or column names.
+            let list_type = ''
+
+            let compl_list  = s:SQLCGetColumns(base, list_type)
+        endif
     endif
 
     if exists('b:sql_compl_savefunc') && b:sql_compl_savefunc != ""
         let &omnifunc = b:sql_compl_savefunc
     endif
 
+    if empty(compl_list)
+        call s:SQLCWarningMsg( 'Could not find type['.compl_type.'] using prepend[.'.s:prepended.'] base['.a:base.']' )
+    endif
+
     return compl_list
 endfunc
 
@@ -384,7 +515,7 @@
     let syn_group_arr = []
     let syn_items     = []
 
-    if a:0 > 0 
+    if a:0 > 0
         if type(a:1) != 3
             call s:SQLCWarningMsg("Parameter is not a list. Example:['syntaxGroup1', 'syntaxGroup2']")
             return ''
@@ -407,7 +538,7 @@
 function! sqlcomplete#ResetCacheSyntax(...)
     let syn_group_arr = []
 
-    if a:0 > 0 
+    if a:0 > 0
         if type(a:1) != 3
             call s:SQLCWarningMsg("Parameter is not a list. Example:['syntaxGroup1', 'syntaxGroup2']")
             return ''
@@ -458,7 +589,7 @@
 	" If the popup is not visible, simple perform the normal
 	" key behaviour.
 	" Must use exec since they key must be preceeded by "\"
-	" or feedkeys will simply push each character of the string 
+	" or feedkeys will simply push each character of the string
 	" rather than the "key press".
         exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_right.'", "n")'
     endif
@@ -475,7 +606,7 @@
 	" If the popup is not visible, simple perform the normal
 	" key behaviour.
 	" Must use exec since they key must be preceeded by "\"
-	" or feedkeys will simply push each character of the string 
+	" or feedkeys will simply push each character of the string
 	" rather than the "key press".
         exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_left.'", "n")'
     endif
@@ -484,16 +615,16 @@
 
 function! s:SQLCWarningMsg(msg)
     echohl WarningMsg
-    echomsg 'SQLComplete:'.a:msg 
+    echomsg 'SQLComplete:'.a:msg
     echohl None
 endfunction
-      
+
 function! s:SQLCErrorMsg(msg)
     echohl ErrorMsg
-    echomsg 'SQLComplete:'.a:msg 
+    echomsg 'SQLComplete:'.a:msg
     echohl None
 endfunction
-      
+
 function! s:SQLCGetSyntaxList(syn_group)
     let syn_group  = a:syn_group
     let compl_list = []
@@ -504,19 +635,23 @@
         " Return previously cached value
         let compl_list = s:syn_value[list_idx]
     else
-        " Request the syntax list items from the 
+        let s:save_inc = g:omni_syntax_group_include_sql
+        let s:save_exc = g:omni_syntax_group_exclude_sql
+        let g:omni_syntax_group_include_sql = ''
+        let g:omni_syntax_group_exclude_sql = ''
+
+        " Request the syntax list items from the
         " syntax completion plugin
         if syn_group == 'syntax'
             " Handle this special case.  This allows the user
             " to indicate they want all the syntax items available,
             " so do not specify a specific include list.
-            let g:omni_syntax_group_include_sql = ''
+            let syn_value                       = syntaxcomplete#OmniSyntaxList()
         else
             " The user has specified a specific syntax group
             let g:omni_syntax_group_include_sql = syn_group
+            let syn_value                       = syntaxcomplete#OmniSyntaxList(syn_group)
         endif
-        let g:omni_syntax_group_exclude_sql = ''
-        let syn_value                       = syntaxcomplete#OmniSyntaxList()
         let g:omni_syntax_group_include_sql = s:save_inc
         let g:omni_syntax_group_exclude_sql = s:save_exc
         " Cache these values for later use
@@ -552,7 +687,7 @@
     let table_alias = a:table_alias
     let cols        = a:cols
 
-    if g:omni_sql_use_tbl_alias != 'n' 
+    if g:omni_sql_use_tbl_alias != 'n'
         if table_alias == ''
             if 'da' =~? g:omni_sql_use_tbl_alias
                 if table_name =~ '_'
@@ -562,13 +697,13 @@
                     setlocal iskeyword-=_
 
                     " Get the first letter of each word
-                    " [[:alpha:]] is used instead of \w 
+                    " [[:alpha:]] is used instead of \w
                     " to catch extended accented characters
                     "
-                    let table_alias = substitute( 
-                                \ table_name, 
-                                \ '\<[[:alpha:]]\+\>_\?', 
-                                \ '\=strpart(submatch(0), 0, 1)', 
+                    let table_alias = substitute(
+                                \ table_name,
+                                \ '\<[[:alpha:]]\+\>_\?',
+                                \ '\=strpart(submatch(0), 0, 1)',
                                 \ 'g'
                                 \ )
                     " Restore original value
@@ -596,7 +731,7 @@
     return cols
 endfunction
 
-function! s:SQLCGetObjectOwner(object) 
+function! s:SQLCGetObjectOwner(object)
     " The owner regex matches a word at the start of the string which is
     " followed by a dot, but doesn't include the dot in the result.
     " ^           - from beginning of line
@@ -609,11 +744,29 @@
     " let owner = matchstr( a:object, '^\s*\zs.*\ze\.' )
     let owner = matchstr( a:object, '^\("\|\[\)\?\zs\.\{-}\ze\("\|\]\)\?\.' )
     return owner
-endfunction 
+endfunction
 
 function! s:SQLCGetColumns(table_name, list_type)
+    if a:table_name =~ '\.'
+        " Check if the owner/creator has been specified
+        let owner  = matchstr( a:table_name, '^\zs.*\ze\..*\..*' )
+        let table  = matchstr( a:table_name, '^\(.*\.\)\?\zs.*\ze\..*' )
+        let column = matchstr( a:table_name, '.*\.\zs.*' )
+
+        if g:omni_sql_include_owner == 1 && owner == '' && table != '' && column != ''
+            let owner  = table
+            let table  = column
+            let column = ''
+        endif
+    else
+        let owner  = ''
+        let table  = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
+        let column = ''
+    endif
+
     " Check if the table name was provided as part of the column name
-    let table_name   = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
+    " let table_name   = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
+    let table_name   = table
     let table_cols   = []
     let table_alias  = ''
     let move_to_top  = 1
@@ -636,7 +789,7 @@
     if list_idx > -1
         let table_cols = split(s:tbl_cols[list_idx], '\n')
     else
-        " Check if we have already cached the column list for this table 
+        " Check if we have already cached the column list for this table
         " by its alias, assuming the table_name provided was actually
         " the alias for the table instead
         "     select *
@@ -654,7 +807,7 @@
     " And the table ends in a "." or we are looking for a column list
     " if list_idx == -1 && (a:table_name =~ '\.' || b:sql_compl_type =~ 'column')
     " if list_idx == -1 && (a:table_name =~ '\.' || a:list_type =~ 'csv')
-    if list_idx == -1 
+    if list_idx == -1
          let saveY      = @y
          let saveSearch = @/
          let saveWScan  = &wrapscan
@@ -665,7 +818,7 @@
          setlocal nowrapscan
          " If . was entered, look at the word just before the .
          " We are looking for something like this:
-         "    select * 
+         "    select *
          "      from customer c
          "     where c.
          " So when . is pressed, we need to find 'c'
@@ -692,15 +845,15 @@
          " if query =~? '^\c\(select\)'
          if query =~? '^\(select\|update\|delete\)'
              let found = 1
-             "  \(\(\<\w\+\>\)\.\)\?   - 
+             "  \(\(\<\w\+\>\)\.\)\?   -
              " '\c\(from\|join\|,\).\{-}'  - Starting at the from clause (case insensitive)
              " '\zs\(\(\<\w\+\>\)\.\)\?' - Get the owner name (optional)
-             " '\<\w\+\>\ze' - Get the table name 
+             " '\<\w\+\>\ze' - Get the table name
              " '\s\+\<'.table_name.'\>' - Followed by the alias
              " '\s*\.\@!.*'  - Cannot be followed by a .
              " '\(\<where\>\|$\)' - Must be followed by a WHERE clause
              " '.*'  - Exclude the rest of the line in the match
-             " let table_name_new = matchstr(@y, 
+             " let table_name_new = matchstr(@y,
              "             \ '\c\(from\|join\|,\).\{-}'.
              "             \ '\zs\(\("\|\[\)\?.\{-}\("\|\]\)\.\)\?'.
              "             \ '\("\|\[\)\?.\{-}\("\|\]\)\?\ze'.
@@ -711,7 +864,16 @@
              "             \ '\(\<where\>\|$\)'.
              "             \ '.*'
              "             \ )
-             let table_name_new = matchstr(@y, 
+             "
+             "
+             " ''\c\(\<from\>\|\<join\>\|,\)\s*'  - Starting at the from clause (case insensitive)
+             " '\zs\(\("\|\[\)\?\w\+\("\|\]\)\?\.\)\?' - Get the owner name (optional)
+             " '\("\|\[\)\?\w\+\("\|\]\)\?\ze' - Get the table name
+             " '\s\+\%(as\s\+\)\?\<'.matchstr(table_name, '.\{-}\ze\.\?$').'\>' - Followed by the alias
+             " '\s*\.\@!.*'  - Cannot be followed by a .
+             " '\(\<where\>\|$\)' - Must be followed by a WHERE clause
+             " '.*'  - Exclude the rest of the line in the match
+             let table_name_new = matchstr(@y,
                          \ '\c\(\<from\>\|\<join\>\|,\)\s*'.
                          \ '\zs\(\("\|\[\)\?\w\+\("\|\]\)\?\.\)\?'.
                          \ '\("\|\[\)\?\w\+\("\|\]\)\?\ze'.
@@ -725,7 +887,12 @@
 
              if table_name_new != ''
                  let table_alias = table_name
-                 let table_name  = matchstr( table_name_new, '^\(.*\.\)\?\zs.*\ze' )
+                 if g:omni_sql_include_owner == 1
+                    let table_name  = matchstr( table_name_new, '^\zs\(.\{-}\.\)\?\(.\{-}\.\)\?.*\ze' )
+                 else
+                     " let table_name  = matchstr( table_name_new, '^\(.*\.\)\?\zs.*\ze' )
+                    let table_name  = matchstr( table_name_new, '^\(.\{-}\.\)\?\zs\(.\{-}\.\)\?.*\ze' )
+                 endif
 
                  let list_idx = index(s:tbl_name, table_name, 0, &ignorecase)
                  if list_idx > -1
@@ -753,7 +920,7 @@
 
          " Return to previous location
          call cursor(curline, curcol)
-         
+
          if found == 0
              if g:loaded_dbext > 300
                  exec 'DBSetOption use_tbl_alias='.saveSettingAlias
@@ -762,12 +929,13 @@
              " Not a SQL statement, do not display a list
              return []
          endif
-    endif 
+    endif
 
     if empty(table_cols)
         " Specify silent mode, no messages to the user (tbl, 1)
         " Specify do not comma separate (tbl, 1, 1)
-        let table_cols_str = DB_getListColumn(table_name, 1, 1)
+        " let table_cols_str = DB_getListColumn(table_name, 1, 1)
+        let table_cols_str = DB_getListColumn((owner!=''?owner.'.':'').table_name, 1, 1)
 
         if table_cols_str != ""
             let s:tbl_name  = add( s:tbl_name,  table_name )
@@ -793,3 +961,7 @@
 
     return table_cols
 endfunction
+"  Restore:
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" vim: ts=4 fdm=marker
diff -Naur vim73.orig/runtime/autoload/syntaxcomplete.vim vim73/runtime/autoload/syntaxcomplete.vim
--- vim73.orig/runtime/autoload/syntaxcomplete.vim	2010-07-29 19:21:15.000000000 +0000
+++ vim73/runtime/autoload/syntaxcomplete.vim	2013-08-04 19:09:07.653952751 +0000
@@ -1,38 +1,80 @@
 " Vim completion script
 " Language:    All languages, uses existing syntax highlighting rules
 " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
-" Version:     7.0
-" Last Change: 2010 Jul 29
-" Usage:       For detailed help, ":help ft-syntax-omni" 
+" Version:     13.0
+" Last Change: 2013 May 14
+" Usage:       For detailed help, ":help ft-syntax-omni"
 
 " History
 "
+" Version 13.0
+"   - Extended the option omni_syntax_group_include_{filetype}
+"     to accept a comma separated list of regex's rather than
+"     string.  For example, for the javascript filetype you could
+"     use:
+"        let g:omni_syntax_group_include_javascript = 'javascript\w\+,jquery\w\+'
+"   - Some syntax files (perl.vim) use the match // syntax as a mechanism
+"     to identify keywords.  This update attempts to parse the
+"     match syntax and pull out syntax items which are at least
+"     3 words or more.
+"
+" Version 12.0
+"   - It is possible to have '-' as part of iskeyword, when
+"     checking for character ranges, tighten up the regex.
+"     E688: More targets than List items.
+"
+" Version 11.0
+"   - Corrected which characters required escaping during
+"     substitution calls.
+"
+" Version 10.0
+"   - Cycle through all the character ranges specified in the
+"     iskeyword option and build a list of valid word separators.
+"     Prior to this change, only actual characters were used,
+"     where for example ASCII "45" == "-".  If "45" were used
+"     in iskeyword the hyphen would not be picked up.
+"     This introduces a new option, since the character ranges
+"     specified could be multibyte:
+"         let g:omni_syntax_use_single_byte = 1
+"   - This by default will only allow single byte ASCII
+"     characters to be added and an additional check to ensure
+"     the charater is printable (see documentation for isprint).
+"
+" Version 9.0
+"   - Add the check for cpo.
+"
+" Version 8.0
+"   - Updated SyntaxCSyntaxGroupItems()
+"         - Some additional syntax items were also allowed
+"           on nextgroup= lines which were ignored by default.
+"           Now these lines are processed independently.
+"
 " Version 7.0
-"     Updated syntaxcomplete#OmniSyntaxList()
+"   - Updated syntaxcomplete#OmniSyntaxList()
 "         - Looking up the syntax groups defined from a syntax file
-"           looked for only 1 format of {filetype}GroupName, but some 
+"           looked for only 1 format of {filetype}GroupName, but some
 "           syntax writers use this format as well:
 "               {b:current_syntax}GroupName
-"           OmniSyntaxList() will now check for both if the first
+"   -       OmniSyntaxList() will now check for both if the first
 "           method does not find a match.
 "
 " Version 6.0
-"     Added syntaxcomplete#OmniSyntaxList()
-"         - Allows other plugins to use this for their own 
+"   - Added syntaxcomplete#OmniSyntaxList()
+"         - Allows other plugins to use this for their own
 "           purposes.
 "         - It will return a List of all syntax items for the
-"           syntax group name passed in.  
-"         - XPTemplate for SQL will use this function via the 
+"           syntax group name passed in.
+"         - XPTemplate for SQL will use this function via the
 "           sqlcomplete plugin to populate a Choose box.
 "
 " Version 5.0
-"     Updated SyntaxCSyntaxGroupItems()
+"   - Updated SyntaxCSyntaxGroupItems()
 "         - When processing a list of syntax groups, the final group
 "           was missed in function SyntaxCSyntaxGroupItems.
 "
 " Set completion with CTRL-X CTRL-O to autoloaded function.
 " This check is in place in case this script is
-" sourced directly instead of using the autoload feature. 
+" sourced directly instead of using the autoload feature.
 if exists('+omnifunc')
     " Do not set the option if already set since this
     " results in an E117 warning.
@@ -42,9 +84,13 @@
 endif
 
 if exists('g:loaded_syntax_completion')
-    finish 
+    finish
 endif
-let g:loaded_syntax_completion = 70
+let g:loaded_syntax_completion = 130
+
+" Turn on support for line continuations when creating the script
+let s:cpo_save = &cpo
+set cpo&vim
 
 " Set ignorecase to the ftplugin standard
 " This is the default setting, but if you define a buffer local
@@ -61,6 +107,18 @@
     let g:omni_syntax_use_iskeyword = 1
 endif
 
+" When using iskeyword, this setting controls whether the characters
+" should be limited to single byte characters.
+if !exists('g:omni_syntax_use_single_byte')
+    let g:omni_syntax_use_single_byte = 1
+endif
+
+" When using iskeyword, this setting controls whether the characters
+" should be limited to single byte characters.
+if !exists('g:omni_syntax_use_iskeyword_numeric')
+    let g:omni_syntax_use_iskeyword_numeric = 1
+endif
+
 " Only display items in the completion window that are at least
 " this many characters in length.
 " This is the default setting, but if you define a buffer local
@@ -71,8 +129,10 @@
 
 " This script will build a completion list based on the syntax
 " elements defined by the files in $VIMRUNTIME/syntax.
-let s:syn_remove_words = 'match,matchgroup=,contains,'.
-            \ 'links to,start=,end=,nextgroup='
+" let s:syn_remove_words = 'match,matchgroup=,contains,'.
+let s:syn_remove_words = 'matchgroup=,contains,'.
+            \ 'links to,start=,end='
+            " \ 'links to,start=,end=,nextgroup='
 
 let s:cache_name = []
 let s:cache_list = []
@@ -151,7 +211,7 @@
 function! syntaxcomplete#OmniSyntaxList(...)
     if a:0 > 0
         let parms = []
-        if 3 == type(a:1) 
+        if 3 == type(a:1)
             let parms = a:1
         elseif 1 == type(a:1)
             let parms = split(a:1, ',')
@@ -165,7 +225,7 @@
 function! OmniSyntaxList(...)
     let list_parms = []
     if a:0 > 0
-        if 3 == type(a:1) 
+        if 3 == type(a:1)
             let list_parms = a:1
         elseif 1 == type(a:1)
             let list_parms = split(a:1, ',')
@@ -201,18 +261,18 @@
 
     let saveL = @l
     let filetype = substitute(&filetype, '\.', '_', 'g')
-    
+
     if empty(list_parms)
         " Default the include group to include the requested syntax group
         let syntax_group_include_{filetype} = ''
         " Check if there are any overrides specified for this filetype
         if exists('g:omni_syntax_group_include_'.filetype)
             let syntax_group_include_{filetype} =
-                        \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g') 
+                        \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g')
             let list_parms = split(g:omni_syntax_group_include_{filetype}, ',')
             if syntax_group_include_{filetype} =~ '\w'
-                let syntax_group_include_{filetype} = 
-                            \ substitute( syntax_group_include_{filetype}, 
+                let syntax_group_include_{filetype} =
+                            \ substitute( syntax_group_include_{filetype},
                             \ '\s*,\s*', '\\|', 'g'
                             \ )
             endif
@@ -222,24 +282,34 @@
     endif
 
     " Loop through all the syntax groupnames, and build a
-    " syntax file which contains these names.  This can 
+    " syntax file which contains these names.  This can
     " work generically for any filetype that does not already
     " have a plugin defined.
     " This ASSUMES the syntax groupname BEGINS with the name
-    " of the filetype.  From my casual viewing of the vim7\syntax 
+    " of the filetype.  From my casual viewing of the vim7\syntax
     " directory this is true for almost all syntax definitions.
     " As an example, the SQL syntax groups have this pattern:
     "     sqlType
     "     sqlOperators
     "     sqlKeyword ...
-    redir @l
-    silent! exec 'syntax list '.join(list_parms)
-    redir END
+    if !empty(list_parms) && empty(substitute(join(list_parms), '[a-zA-Z ]', '', 'g'))
+        " If list_parms only includes word characters, use it to limit
+        " the syntax elements.
+        " If using regex syntax list will fail to find those items, so
+        " simply grab the who syntax list.
+        redir @l
+        silent! exec 'syntax list '.join(list_parms)
+        redir END
+    else
+        redir @l
+        silent! exec 'syntax list'
+        redir END
+    endif
 
     let syntax_full = "\n".@l
     let @l = saveL
 
-    if syntax_full =~ 'E28' 
+    if syntax_full =~ 'E28'
                 \ || syntax_full =~ 'E411'
                 \ || syntax_full =~ 'E415'
                 \ || syntax_full =~ 'No Syntax items'
@@ -249,7 +319,7 @@
     let filetype = substitute(&filetype, '\.', '_', 'g')
 
     let list_exclude_groups = []
-    if a:0 > 0 
+    if a:0 > 0
         " Do nothing since we have specific a specific list of groups
     else
         " Default the exclude group to nothing
@@ -257,93 +327,178 @@
         " Check if there are any overrides specified for this filetype
         if exists('g:omni_syntax_group_exclude_'.filetype)
             let syntax_group_exclude_{filetype} =
-                        \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g') 
+                        \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g')
             let list_exclude_groups = split(g:omni_syntax_group_exclude_{filetype}, ',')
-            if syntax_group_exclude_{filetype} =~ '\w' 
-                let syntax_group_exclude_{filetype} = 
-                            \ substitute( syntax_group_exclude_{filetype}, 
+            if syntax_group_exclude_{filetype} =~ '\w'
+                let syntax_group_exclude_{filetype} =
+                            \ substitute( syntax_group_exclude_{filetype},
                             \ '\s*,\s*', '\\|', 'g'
                             \ )
             endif
         endif
     endif
 
-    " Sometimes filetypes can be composite names, like c.doxygen
-    " Loop through each individual part looking for the syntax
-    " items specific to each individual filetype.
-    let syn_list = ''
-    let ftindex  = 0
-    let ftindex  = match(&filetype, '\w\+', ftindex)
-
-    while ftindex > -1
-        let ft_part_name = matchstr( &filetype, '\w\+', ftindex )
+    if empty(list_parms)
+        let list_parms = [&filetype.'\w\+']
+    endif
 
-        " Syntax rules can contain items for more than just the current 
-        " filetype.  They can contain additional items added by the user
-        " via autocmds or their vimrc.
-        " Some syntax files can be combined (html, php, jsp).
-        " We want only items that begin with the filetype we are interested in.
-        let next_group_regex = '\n' .
-                    \ '\zs'.ft_part_name.'\w\+\ze'.
-                    \ '\s\+xxx\s\+' 
-        let index    = 0
-        let index    = match(syntax_full, next_group_regex, index)
-
-        if index == -1 && exists('b:current_syntax') && ft_part_name != b:current_syntax
-            " There appears to be two standards when writing syntax files.
-            " Either items begin as:
-            "     syn keyword {filetype}Keyword         values ...
-            "     let b:current_syntax = "sql"
-            "     let b:current_syntax = "sqlanywhere"
-            " Or
-            "     syn keyword {syntax_filename}Keyword  values ...
-            "     let b:current_syntax = "mysql"
-            " So, we will make the format of finding the syntax group names
-            " a bit more flexible and look for both if the first fails to 
-            " find a match.
+    let syn_list = ''
+    let index    = 0
+    for group_regex in list_parms
+        " Sometimes filetypes can be composite names, like c.doxygen
+        " Loop through each individual part looking for the syntax
+        " items specific to each individual filetype.
+        " let ftindex  = 0
+        " let ftindex  = match(syntax_full, group_regex, ftindex)
+
+        " while ftindex > -1
+            " let ft_part_name = matchstr( syntax_full, '\w\+', ftindex )
+
+            " Syntax rules can contain items for more than just the current
+            " filetype.  They can contain additional items added by the user
+            " via autocmds or their vimrc.
+            " Some syntax files can be combined (html, php, jsp).
+            " We want only items that begin with the filetype we are interested in.
             let next_group_regex = '\n' .
-                        \ '\zs'.b:current_syntax.'\w\+\ze'.
-                        \ '\s\+xxx\s\+' 
-            let index    = 0
+                        \ '\zs'.group_regex.'\ze'.
+                        \ '\s\+xxx\s\+'
             let index    = match(syntax_full, next_group_regex, index)
-        endif
 
-        while index > -1
-            let group_name = matchstr( syntax_full, '\w\+', index )
-
-            let get_syn_list = 1
-            for exclude_group_name in list_exclude_groups
-                if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
-                    let get_syn_list = 0
-                endif
-            endfor
-        
-            " This code is no longer needed in version 6.0 since we have
-            " augmented the syntax list command to only retrieve the syntax 
-            " groups we are interested in.
-            "
-            " if get_syn_list == 1
-            "     if syntax_group_include_{filetype} != ''
-            "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
-            "             let get_syn_list = 0
-            "         endif
-            "     endif
-            " endif
-
-            if get_syn_list == 1
-                " Pass in the full syntax listing, plus the group name we 
-                " are interested in.
-                let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
-                let syn_list = syn_list . extra_syn_list . "\n"
+            " For the matched group name, strip off any of the regex special
+            " characters and see if we get a match with the current syntax
+            if index == -1 && exists('b:current_syntax') && substitute(group_regex, '[^a-zA-Z ]\+.*', '', 'g') !~ '^'.b:current_syntax
+                " There appears to be two standards when writing syntax files.
+                " Either items begin as:
+                "     syn keyword {filetype}Keyword         values ...
+                "     let b:current_syntax = "sql"
+                "     let b:current_syntax = "sqlanywhere"
+                " Or
+                "     syn keyword {syntax_filename}Keyword  values ...
+                "     let b:current_syntax = "mysql"
+                " So, we will make the format of finding the syntax group names
+                " a bit more flexible and look for both if the first fails to
+                " find a match.
+                let next_group_regex = '\n' .
+                            \ '\zs'.b:current_syntax.'\w\+\ze'.
+                            \ '\s\+xxx\s\+'
+                let index    = 0
+                let index    = match(syntax_full, next_group_regex, index)
             endif
 
-            let index = index + strlen(group_name)
-            let index = match(syntax_full, next_group_regex, index)
-        endwhile
+            while index > -1
+                let group_name = matchstr( syntax_full, '\w\+', index )
+
+                let get_syn_list = 1
+                for exclude_group_name in list_exclude_groups
+                    if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
+                        let get_syn_list = 0
+                    endif
+                endfor
+
+                " This code is no longer needed in version 6.0 since we have
+                " augmented the syntax list command to only retrieve the syntax
+                " groups we are interested in.
+                "
+                " if get_syn_list == 1
+                "     if syntax_group_include_{filetype} != ''
+                "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
+                "             let get_syn_list = 0
+                "         endif
+                "     endif
+                " endif
+
+                if get_syn_list == 1
+                    " Pass in the full syntax listing, plus the group name we
+                    " are interested in.
+                    let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
+                    let syn_list = syn_list . extra_syn_list . "\n"
+                endif
 
-        let ftindex  = ftindex + len(ft_part_name)
-        let ftindex  = match( &filetype, '\w\+', ftindex )
-    endwhile
+                let index = index + strlen(group_name)
+                let index = match(syntax_full, next_group_regex, index)
+            endwhile
+
+            " let ftindex  = ftindex + len(ft_part_name)
+            " let ftindex  = match( syntax_full, group_regex, ftindex )
+        " endwhile
+    endfor
+
+"   " Sometimes filetypes can be composite names, like c.doxygen
+"   " Loop through each individual part looking for the syntax
+"   " items specific to each individual filetype.
+"   let syn_list = ''
+"   let ftindex  = 0
+"   let ftindex  = match(&filetype, '\w\+', ftindex)
+
+"   while ftindex > -1
+"       let ft_part_name = matchstr( &filetype, '\w\+', ftindex )
+
+"       " Syntax rules can contain items for more than just the current
+"       " filetype.  They can contain additional items added by the user
+"       " via autocmds or their vimrc.
+"       " Some syntax files can be combined (html, php, jsp).
+"       " We want only items that begin with the filetype we are interested in.
+"       let next_group_regex = '\n' .
+"                   \ '\zs'.ft_part_name.'\w\+\ze'.
+"                   \ '\s\+xxx\s\+'
+"       let index    = 0
+"       let index    = match(syntax_full, next_group_regex, index)
+
+"       if index == -1 && exists('b:current_syntax') && ft_part_name != b:current_syntax
+"           " There appears to be two standards when writing syntax files.
+"           " Either items begin as:
+"           "     syn keyword {filetype}Keyword         values ...
+"           "     let b:current_syntax = "sql"
+"           "     let b:current_syntax = "sqlanywhere"
+"           " Or
+"           "     syn keyword {syntax_filename}Keyword  values ...
+"           "     let b:current_syntax = "mysql"
+"           " So, we will make the format of finding the syntax group names
+"           " a bit more flexible and look for both if the first fails to
+"           " find a match.
+"           let next_group_regex = '\n' .
+"                       \ '\zs'.b:current_syntax.'\w\+\ze'.
+"                       \ '\s\+xxx\s\+'
+"           let index    = 0
+"           let index    = match(syntax_full, next_group_regex, index)
+"       endif
+
+"       while index > -1
+"           let group_name = matchstr( syntax_full, '\w\+', index )
+
+"           let get_syn_list = 1
+"           for exclude_group_name in list_exclude_groups
+"               if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
+"                   let get_syn_list = 0
+"               endif
+"           endfor
+
+"           " This code is no longer needed in version 6.0 since we have
+"           " augmented the syntax list command to only retrieve the syntax
+"           " groups we are interested in.
+"           "
+"           " if get_syn_list == 1
+"           "     if syntax_group_include_{filetype} != ''
+"           "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
+"           "             let get_syn_list = 0
+"           "         endif
+"           "     endif
+"           " endif
+
+"           if get_syn_list == 1
+"               " Pass in the full syntax listing, plus the group name we
+"               " are interested in.
+"               let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
+"               let syn_list = syn_list . extra_syn_list . "\n"
+"           endif
+
+"           let index = index + strlen(group_name)
+"           let index = match(syntax_full, next_group_regex, index)
+"       endwhile
+
+"       let ftindex  = ftindex + len(ft_part_name)
+"       let ftindex  = match( &filetype, '\w\+', ftindex )
+"   endwhile
 
     " Convert the string to a List and sort it.
     let compl_list = sort(split(syn_list))
@@ -385,7 +540,7 @@
     "     \|           - 2nd potential match
     "     \%$          - matches end of the file or string
     "     \)           - end a group
-    let syntax_group = matchstr(a:syntax_full, 
+    let syntax_group = matchstr(a:syntax_full,
                 \ "\n".a:group_name.'\s\+xxx\s\+\zs.\{-}\ze\(\n\w\|\%$\)'
                 \ )
 
@@ -395,26 +550,97 @@
 
         " We only want the words for the lines begining with
         " containedin, but there could be other items.
-        
+
         " Tried to remove all lines that do not begin with contained
         " but this does not work in all cases since you can have
         "    contained nextgroup=...
         " So this will strip off the ending of lines with known
         " keywords.
-        let syn_list = substitute( 
+        let syn_list = substitute(
                     \    syntax_group, '\<\('.
                     \    substitute(
                     \      escape(s:syn_remove_words, '\\/.*$^~[]')
                     \      , ',', '\\|', 'g'
                     \    ).
                     \    '\).\{-}\%($\|'."\n".'\)'
-                    \    , "\n", 'g' 
+                    \    , "\n", 'g'
                     \  )
 
-        " Now strip off the newline + blank space + contained
-        let syn_list = substitute( 
-                    \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\)'
-                    \    , "", 'g' 
+        " Attempt to deal with lines using the match syntax
+        " javaScriptDocTags xxx match /@\(param\|argument\|requires\|file\)\>/
+        " Though it can use any types of regex, so this plugin will attempt
+        " to restrict it
+        " 1.  Only use \( or \%( constructs remove all else
+        " 2   Remove and []s
+        " 3.  Account for match //constructs
+        "                       \%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?
+        " 4.  Hope for the best
+        "
+        "
+        let syn_list_old = syn_list
+        while syn_list =~ '\<match\>\s\+\/'
+            if syn_list =~ 'perlElseIfError'
+                let syn_list = syn_list
+            endif
+            " Check if the match has words at least 3 characters long
+            if syn_list =~ '\<match \/\zs.\{-}\<\w\{3,}\>.\{-}\ze\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+'
+                " Remove everything after / and before the first \(
+                let syn_list = substitute( syn_list, '\<match \/\zs.\{-}\ze\\%\?(.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+                " Remove everything after \) and up to the ending /
+                let syn_list = substitute( syn_list, '\<match \/.\{-}\\)\zs.\{-}\ze\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+
+                " Remove any character classes
+                " let syn_list = substitute( syn_list, '\<match /\zs.\{-}\[[^]]*\].\{-}\ze\/ ', '', 'g' )
+                let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\[[^]]*\]\ze.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?', '', 'g' )
+                " Remove any words < 3 characters
+                let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\<\w\{1,2}\>\ze.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+                " Remove all non-word characters
+                " let syn_list = substitute( syn_list, '\<match /\zs.\{-}\<\W\+\>.\{-}\ze\/ ', "", 'g' )
+                " let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\W\+\ze.\{-}\/ ', ' ', 'g' )
+                " Do this by using the outer substitue() call to gather all
+                " text between the match /.../ tags.
+                " The inner substitute() call operates on the text selected
+                " and replaces all non-word characters.
+                let syn_list = substitute( syn_list, '\<match \/\zs\(.\{-}\)\ze\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+'
+                            \ , '\=substitute(submatch(1), "\\W\\+", " ", "g")'
+                            \ , 'g' )
+                " Remove the match / / syntax
+                let syn_list = substitute( syn_list, '\<match \/\(.\{-}\)\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '\1', 'g' )
+            else
+                " No words long enough, remove the match
+                " Remove the match syntax
+                " let syn_list = substitute( syn_list, '\<match \/[^\/]*\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+                let syn_list = substitute( syn_list, '\<match \/\%(.\{-}\)\?\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
+            endif
+            if syn_list =~ '\<match\>\s\+\/'
+                " Problem removing the match / / tags
+                let syn_list = ''
+            endif
+        endwhile
+
+
+        " Now strip off the newline + blank space + contained.
+        " Also include lines with nextgroup=@someName skip_key_words syntax_element
+                    " \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\|nextgroup=\)'
+                    " \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\|nextgroup=[@a-zA-Z,]*\)'
+        let syn_list = substitute(
+                    \    syn_list, '\<\(contained\|nextgroup=[@a-zA-Z,]*\)'
+                    \    , "", 'g'
+                    \ )
+
+        " This can leave lines like this
+        "     =@vimMenuList  skipwhite onoremenu
+        " Strip the special option keywords first
+        "     :h :syn-skipwhite*
+        let syn_list = substitute(
+                    \    syn_list, '\<\(skipwhite\|skipnl\|skipempty\)\>'
+                    \    , "", 'g'
+                    \ )
+
+        " Now remove the remainder of the nextgroup=@someName lines
+        let syn_list = substitute(
+                    \    syn_list, '\%(^\|\n\)\@<=\s*\(@\w\+\)'
+                    \    , "", 'g'
                     \ )
 
         if b:omni_syntax_use_iskeyword == 0
@@ -423,19 +649,74 @@
             " This will replace non-word characters with spaces.
             let syn_list = substitute( syn_list, '[^0-9A-Za-z_ ]', ' ', 'g' )
         else
-            let accept_chars = ','.&iskeyword.','
-            " Remove all character ranges
-            " let accept_chars = substitute(accept_chars, ',[^,]\+-[^,]\+,', ',', 'g')
-            let accept_chars = substitute(accept_chars, ',\@<=[^,]\+-[^,]\+,', '', 'g')
-            " Remove all numeric specifications
-            " let accept_chars = substitute(accept_chars, ',\d\{-},', ',', 'g')
-            let accept_chars = substitute(accept_chars, ',\@<=\d\{-},', '', 'g')
-            " Remove all commas
-            let accept_chars = substitute(accept_chars, ',', '', 'g')
-            " Escape special regex characters
-            let accept_chars = escape(accept_chars, '\\/.*$^~[]' )
-            " Remove all characters that are not acceptable
-            let syn_list = substitute( syn_list, '[^0-9A-Za-z_ '.accept_chars.']', ' ', 'g' )
+            if g:omni_syntax_use_iskeyword_numeric == 1
+                " iskeyword can contain value like this
+                " 38,42,43,45,47-58,60-62,64-90,97-122,_,+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
+                " Numeric values convert to their ASCII equivalent using the
+                " nr2char() function.
+                "     &       38
+                "     *       42
+                "     +       43
+                "     -       45
+                "     ^       94
+                " Iterate through all numeric specifications and convert those
+                " to their ascii equivalent ensuring the character is printable.
+                " If so, add it to the list.
+                let accepted_chars = ''
+                for item in split(&iskeyword, ',')
+                    if item =~ '\d-\d'
+                        " This is a character range (ie 47-58),
+                        " cycle through each character within the range
+                        let [b:start, b:end] = split(item, '-')
+                        for range_item in range( b:start, b:end )
+                            if range_item <= 127 || g:omni_syntax_use_single_byte == 0
+                                if nr2char(range_item) =~ '\p'
+                                    let accepted_chars = accepted_chars . nr2char(range_item)
+                                endif
+                            endif
+                        endfor
+                    elseif item =~ '^\d\+$'
+                        " Only numeric, translate to a character
+                        if item < 127 || g:omni_syntax_use_single_byte == 0
+                            if nr2char(item) =~ '\p'
+                                let accepted_chars = accepted_chars . nr2char(item)
+                            endif
+                        endif
+                    else
+                        if char2nr(item) < 127 || g:omni_syntax_use_single_byte == 0
+                            if item =~ '\p'
+                                let accepted_chars = accepted_chars . item
+                            endif
+                        endif
+                    endif
+                endfor
+                " Escape special regex characters
+                " Looks like the wrong chars are escaped.  In a collection,
+                "      :h /[]
+                "      only `]', `\', `-' and `^' are special:
+                " let accepted_chars = escape(accepted_chars, '\\/.*$^~[]' )
+                let accepted_chars = escape(accepted_chars, ']\-^' )
+                " Remove all characters that are not acceptable
+                let syn_list = substitute( syn_list, '[^A-Za-z'.accepted_chars.']', ' ', 'g' )
+            else
+                let accept_chars = ','.&iskeyword.','
+                " Remove all character ranges
+                " let accept_chars = substitute(accept_chars, ',[^,]\+-[^,]\+,', ',', 'g')
+                let accept_chars = substitute(accept_chars, ',\@<=[^,]\+-[^,]\+,', '', 'g')
+                " Remove all numeric specifications
+                " let accept_chars = substitute(accept_chars, ',\d\{-},', ',', 'g')
+                let accept_chars = substitute(accept_chars, ',\@<=\d\{-},', '', 'g')
+                " Remove all commas
+                let accept_chars = substitute(accept_chars, ',', '', 'g')
+                " Escape special regex characters
+                " Looks like the wrong chars are escaped.  In a collection,
+                "      :h /[]
+                "      only `]', `\', `-' and `^' are special:
+                " let accept_chars = escape(accept_chars, '\\/.*$^~[]' )
+                let accept_chars = escape(accept_chars, ']\-^' )
+                " Remove all characters that are not acceptable
+                let syn_list = substitute( syn_list, '[^0-9A-Za-z_'.accept_chars.']', ' ', 'g' )
+            endif
         endif
 
         if b:omni_syntax_minimum_length > 0
@@ -448,3 +729,27 @@
 
     return syn_list
 endfunction
+
+function! OmniSyntaxShowChars(spec)
+  let result = []
+  for item in split(a:spec, ',')
+    if len(item) > 1
+      if item == '@-@'
+        call add(result, char2nr(item))
+      else
+        call extend(result, call('range', split(item, '-')))
+      endif
+    else
+      if item == '@'  " assume this is [A-Za-z]
+        for [c1, c2] in [['A', 'Z'], ['a', 'z']]
+          call extend(result, range(char2nr(c1), char2nr(c2)))
+        endfor
+      else
+        call add(result, char2nr(item))
+      endif
+    endif
+  endfor
+  return join(map(result, 'nr2char(v:val)'), ', ')
+endfunction
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/autoload/tar.vim vim73/runtime/autoload/tar.vim
--- vim73.orig/runtime/autoload/tar.vim	2010-08-10 00:02:24.000000000 +0000
+++ vim73/runtime/autoload/tar.vim	2013-08-04 19:09:07.657286074 +0000
@@ -1,13 +1,13 @@
 " tar.vim: Handles browsing tarfiles
 "            AUTOLOAD PORTION
-" Date:			Aug 09, 2010
-" Version:		26
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:			Apr 17, 2013
+" Version:		29
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:		Vim License  (see vim's :help license)
 "
 "	Contains many ideas from Michael Toren's <tar.vim>
 "
-" Copyright:    Copyright (C) 2005-2009 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -22,7 +22,7 @@
 if &cp || exists("g:loaded_tar")
  finish
 endif
-let g:loaded_tar= "v26"
+let g:loaded_tar= "v29"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of tar needs vim 7.2"
@@ -31,6 +31,7 @@
 endif
 let s:keepcpo= &cpo
 set cpo&vim
+"DechoTabOn
 "call Decho("loading autoload/tar.vim")
 
 " ---------------------------------------------------------------------
@@ -47,6 +48,17 @@
 if !exists("g:tar_writeoptions")
  let g:tar_writeoptions= "uf"
 endif
+if !exists("g:netrw_cygwin")
+ if has("win32") || has("win95") || has("win64") || has("win16")
+  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
+   let g:netrw_cygwin= 1
+  else
+   let g:netrw_cygwin= 0
+  endif
+ else
+  let g:netrw_cygwin= 0
+ endif
+endif
 if !exists("g:tar_copycmd")
  if !exists("g:netrw_localcopycmd")
   if has("win32") || has("win95") || has("win64") || has("win16")
@@ -63,24 +75,13 @@
  endif
  let g:tar_copycmd= g:netrw_localcopycmd
 endif
-if !exists("g:netrw_cygwin")
- if has("win32") || has("win95") || has("win64") || has("win16")
-  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
-   let g:netrw_cygwin= 1
-  else
-   let g:netrw_cygwin= 0
-  endif
- else
-  let g:netrw_cygwin= 0
- endif
-endif
 if !exists("g:tar_extractcmd")
  let g:tar_extractcmd= "tar -xf"
 endif
 
 " set up shell quoting character
 if !exists("g:tar_shq")
- if exists("&shq") && &shq != ""
+ if exists("+shq") && exists("&shq") && &shq != ""
   let g:tar_shq= &shq
  elseif has("win32") || has("win95") || has("win64") || has("win16")
   if exists("g:netrw_cygwin") && g:netrw_cygwin
@@ -142,38 +143,38 @@
   call setline(lastline+1,'" tar.vim version '.g:loaded_tar)
   call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
   call setline(lastline+3,'" Select a file with cursor and press ENTER')
-  $put =''
-  0d
-  $
+  keepj $put =''
+  keepj sil! 0d
+  keepj $
 
   let tarfile= a:tarfile
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
   let curlast= line("$")
   if tarfile =~# '\.\(gz\|tgz\)$'
 "   call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   elseif tarfile =~# '\.lrp'
 "   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
-  elseif tarfile =~# '\.bz2$'
+   exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
+  elseif tarfile =~# '\.\(bz2\|tbz\|tb2\)$'
 "   call Decho("3: exe silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
-  elseif tarfile =~# '\.lzma$'
+   exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+  elseif tarfile =~# '\.\(lzma\|tlz\)$'
 "   call Decho("3: exe silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   elseif tarfile =~# '\.\(xz\|txz\)$'
 "   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
-   exe "silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
   else
    if tarfile =~ '^\s*-'
     " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
     let tarfile = substitute(tarfile, '-', './-', '')
    endif
 "   call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,0))
-   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
+   exe "sil! r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
   endif
   if v:shell_error != 0
    redraw!
@@ -184,12 +185,12 @@
   if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
    redraw!
    echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
-   silent %d
+   keepj sil! %d
    let eikeep= &ei
    set ei=BufReadCmd,FileReadCmd
    exe "r ".fnameescape(a:tarfile)
    let &ei= eikeep
-   1d
+   keepj sil! 1d
 "   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
    return
   endif
@@ -227,7 +228,7 @@
   " about to make a new window, need to use b:tarfile
   let tarfile= b:tarfile
   let curfile= expand("%")
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
@@ -239,6 +240,8 @@
   let s:tblfile_{winnr()}= curfile
   call tar#Read("tarfile:".tarfile.'::'.fname,1)
   filetype detect
+  set nomod
+  exe 'com! -buffer -nargs=? -complete=file TarDiff	:call tar#Diff(<q-args>,"'.fnameescape(fname).'")'
 
   let &report= repkeep
 "  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
@@ -252,7 +255,7 @@
   set report=10
   let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','')
   let fname   = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
-  if has("win32") && executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    " assuming cygwin
    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
   endif
@@ -286,19 +289,19 @@
   endif
   if tarfile =~# '\.bz2$'
 "   call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
-   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.\(gz\|tgz\)$'
 "   call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
-   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.lrp$'
 "   call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
-   exe "silent r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.lzma$'
 "   call Decho("7: exe silent r! lzma -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
-   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   elseif tarfile =~# '\.\(xz\|txz\)$'
 "   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
-   exe "silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
   else
    if tarfile =~ '^\s*-'
     " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
@@ -317,7 +320,7 @@
   exe "file tarfile::".fnameescape(fname)
 
   " cleanup
-  0d
+  keepj sil! 0d
   set nomod
 
   let &report= repkeep
@@ -425,7 +428,7 @@
  
    if fname =~ '/'
     let dirpath = substitute(fname,'/[^/]\+$','','e')
-    if executable("cygpath")
+    if has("win32unix") && executable("cygpath")
      let dirpath = substitute(system("cygpath ".shellescape(dirpath, 0)),'\n','','e')
     endif
     call mkdir(dirpath,"p")
@@ -445,7 +448,7 @@
     let tar_secure= " "
    endif
    exe "w! ".fnameescape(fname)
-   if executable("cygpath")
+   if has("win32unix") && executable("cygpath")
     let tarfile = substitute(system("cygpath ".shellescape(tarfile,0)),'\n','','e')
    endif
  
@@ -501,6 +504,30 @@
 endfun
 
 " ---------------------------------------------------------------------
+" tar#Diff: {{{2
+fun! tar#Diff(userfname,fname)
+"  call Dfunc("tar#Diff(userfname<".a:userfname."> fname<".a:fname.")")
+  let fname= a:fname
+  if a:userfname != ""
+   let fname= a:userfname
+  endif
+  if filereadable(fname)
+   " sets current file (from tarball) for diff'ing
+   " splits window vertically
+   " opens original file, sets it for diff'ing
+   " sets up b:tardiff_otherbuf variables so each buffer knows about the other (for closing purposes)
+   diffthis
+   wincmd v
+   exe "e ".fnameescape(fname)
+   diffthis
+  else
+   redraw!
+   echo "***warning*** unable to read file<".fname.">"
+  endif
+"  call Dret("tar#Diff")
+endfun
+
+" ---------------------------------------------------------------------
 " s:Rmdir: {{{2
 fun! s:Rmdir(fname)
 "  call Dfunc("Rmdir(fname<".a:fname.">)")
diff -Naur vim73.orig/runtime/autoload/tohtml.vim vim73/runtime/autoload/tohtml.vim
--- vim73.orig/runtime/autoload/tohtml.vim	2010-08-12 19:59:40.000000000 +0000
+++ vim73/runtime/autoload/tohtml.vim	2013-08-04 19:09:07.657286074 +0000
@@ -1,6 +1,6 @@
 " Vim autoload file for the tohtml plugin.
 " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2010 Aug 12
+" Last Change: 2013 Jun 19
 "
 " Additional contributors:
 "
@@ -11,12 +11,286 @@
 
 " this file uses line continuations
 let s:cpo_sav = &cpo
-set cpo-=C
+set cpo&vim
 
-func! tohtml#Convert2HTML(line1, line2)
+" Automatically find charsets from all encodings supported natively by Vim. With
+" the 8bit- and 2byte- prefixes, Vim can actually support more encodings than
+" this. Let the user specify these however since they won't be supported on
+" every system.
+"
+" Note, not all of Vim's supported encodings have a charset to use.
+"
+" Names in this list are from:
+"   http://www.iana.org/assignments/character-sets
+" g:tohtml#encoding_to_charset: {{{
+let g:tohtml#encoding_to_charset = {
+      \ 'latin1' : 'ISO-8859-1',
+      \ 'iso-8859-2' : 'ISO-8859-2',
+      \ 'iso-8859-3' : 'ISO-8859-3',
+      \ 'iso-8859-4' : 'ISO-8859-4',
+      \ 'iso-8859-5' : 'ISO-8859-5',
+      \ 'iso-8859-6' : 'ISO-8859-6',
+      \ 'iso-8859-7' : 'ISO-8859-7',
+      \ 'iso-8859-8' : 'ISO-8859-8',
+      \ 'iso-8859-9' : 'ISO-8859-9',
+      \ 'iso-8859-10' : '',
+      \ 'iso-8859-13' : 'ISO-8859-13',
+      \ 'iso-8859-14' : '',
+      \ 'iso-8859-15' : 'ISO-8859-15',
+      \ 'koi8-r' : 'KOI8-R',
+      \ 'koi8-u' : 'KOI8-U',
+      \ 'macroman' : 'macintosh',
+      \ 'cp437' : '',
+      \ 'cp775' : '',
+      \ 'cp850' : '',
+      \ 'cp852' : '',
+      \ 'cp855' : '',
+      \ 'cp857' : '',
+      \ 'cp860' : '',
+      \ 'cp861' : '',
+      \ 'cp862' : '',
+      \ 'cp863' : '',
+      \ 'cp865' : '',
+      \ 'cp866' : 'IBM866',
+      \ 'cp869' : '',
+      \ 'cp874' : '',
+      \ 'cp1250' : 'windows-1250',
+      \ 'cp1251' : 'windows-1251',
+      \ 'cp1253' : 'windows-1253',
+      \ 'cp1254' : 'windows-1254',
+      \ 'cp1255' : 'windows-1255',
+      \ 'cp1256' : 'windows-1256',
+      \ 'cp1257' : 'windows-1257',
+      \ 'cp1258' : 'windows-1258',
+      \ 'euc-jp' : 'EUC-JP',
+      \ 'sjis' : 'Shift_JIS',
+      \ 'cp932' : 'Shift_JIS',
+      \ 'cp949' : '',
+      \ 'euc-kr' : 'EUC-KR',
+      \ 'cp936' : 'GBK',
+      \ 'euc-cn' : 'GB2312',
+      \ 'big5' : 'Big5',
+      \ 'cp950' : 'Big5',
+      \ 'utf-8' : 'UTF-8',
+      \ 'ucs-2' : 'UTF-8',
+      \ 'ucs-2le' : 'UTF-8',
+      \ 'utf-16' : 'UTF-8',
+      \ 'utf-16le' : 'UTF-8',
+      \ 'ucs-4' : 'UTF-8',
+      \ 'ucs-4le' : 'UTF-8',
+      \ }
+lockvar g:tohtml#encoding_to_charset
+" Notes:
+"   1. All UCS/UTF are converted to UTF-8 because it is much better supported
+"   2. Any blank spaces are there because Vim supports it but at least one major
+"      web browser does not according to http://wiki.whatwg.org/wiki/Web_Encodings.
+" }}}
+
+" Only automatically find encodings supported natively by Vim, let the user
+" specify the encoding if it's not natively supported. This function is only
+" used when the user specifies the charset, they better know what they are
+" doing!
+"
+" Names in this list are from:
+"   http://www.iana.org/assignments/character-sets
+" g:tohtml#charset_to_encoding: {{{
+let g:tohtml#charset_to_encoding = {
+      \ 'iso_8859-1:1987' : 'latin1',
+      \ 'iso-ir-100' : 'latin1',
+      \ 'iso_8859-1' : 'latin1',
+      \ 'iso-8859-1' : 'latin1',
+      \ 'latin1' : 'latin1',
+      \ 'l1' : 'latin1',
+      \ 'ibm819' : 'latin1',
+      \ 'cp819' : 'latin1',
+      \ 'csisolatin1' : 'latin1',
+      \ 'iso_8859-2:1987' : 'iso-8859-2',
+      \ 'iso-ir-101' : 'iso-8859-2',
+      \ 'iso_8859-2' : 'iso-8859-2',
+      \ 'iso-8859-2' : 'iso-8859-2',
+      \ 'latin2' : 'iso-8859-2',
+      \ 'l2' : 'iso-8859-2',
+      \ 'csisolatin2' : 'iso-8859-2',
+      \ 'iso_8859-3:1988' : 'iso-8859-3',
+      \ 'iso-ir-109' : 'iso-8859-3',
+      \ 'iso_8859-3' : 'iso-8859-3',
+      \ 'iso-8859-3' : 'iso-8859-3',
+      \ 'latin3' : 'iso-8859-3',
+      \ 'l3' : 'iso-8859-3',
+      \ 'csisolatin3' : 'iso-8859-3',
+      \ 'iso_8859-4:1988' : 'iso-8859-4',
+      \ 'iso-ir-110' : 'iso-8859-4',
+      \ 'iso_8859-4' : 'iso-8859-4',
+      \ 'iso-8859-4' : 'iso-8859-4',
+      \ 'latin4' : 'iso-8859-4',
+      \ 'l4' : 'iso-8859-4',
+      \ 'csisolatin4' : 'iso-8859-4',
+      \ 'iso_8859-5:1988' : 'iso-8859-5',
+      \ 'iso-ir-144' : 'iso-8859-5',
+      \ 'iso_8859-5' : 'iso-8859-5',
+      \ 'iso-8859-5' : 'iso-8859-5',
+      \ 'cyrillic' : 'iso-8859-5',
+      \ 'csisolatincyrillic' : 'iso-8859-5',
+      \ 'iso_8859-6:1987' : 'iso-8859-6',
+      \ 'iso-ir-127' : 'iso-8859-6',
+      \ 'iso_8859-6' : 'iso-8859-6',
+      \ 'iso-8859-6' : 'iso-8859-6',
+      \ 'ecma-114' : 'iso-8859-6',
+      \ 'asmo-708' : 'iso-8859-6',
+      \ 'arabic' : 'iso-8859-6',
+      \ 'csisolatinarabic' : 'iso-8859-6',
+      \ 'iso_8859-7:1987' : 'iso-8859-7',
+      \ 'iso-ir-126' : 'iso-8859-7',
+      \ 'iso_8859-7' : 'iso-8859-7',
+      \ 'iso-8859-7' : 'iso-8859-7',
+      \ 'elot_928' : 'iso-8859-7',
+      \ 'ecma-118' : 'iso-8859-7',
+      \ 'greek' : 'iso-8859-7',
+      \ 'greek8' : 'iso-8859-7',
+      \ 'csisolatingreek' : 'iso-8859-7',
+      \ 'iso_8859-8:1988' : 'iso-8859-8',
+      \ 'iso-ir-138' : 'iso-8859-8',
+      \ 'iso_8859-8' : 'iso-8859-8',
+      \ 'iso-8859-8' : 'iso-8859-8',
+      \ 'hebrew' : 'iso-8859-8',
+      \ 'csisolatinhebrew' : 'iso-8859-8',
+      \ 'iso_8859-9:1989' : 'iso-8859-9',
+      \ 'iso-ir-148' : 'iso-8859-9',
+      \ 'iso_8859-9' : 'iso-8859-9',
+      \ 'iso-8859-9' : 'iso-8859-9',
+      \ 'latin5' : 'iso-8859-9',
+      \ 'l5' : 'iso-8859-9',
+      \ 'csisolatin5' : 'iso-8859-9',
+      \ 'iso-8859-10' : 'iso-8859-10',
+      \ 'iso-ir-157' : 'iso-8859-10',
+      \ 'l6' : 'iso-8859-10',
+      \ 'iso_8859-10:1992' : 'iso-8859-10',
+      \ 'csisolatin6' : 'iso-8859-10',
+      \ 'latin6' : 'iso-8859-10',
+      \ 'iso-8859-13' : 'iso-8859-13',
+      \ 'iso-8859-14' : 'iso-8859-14',
+      \ 'iso-ir-199' : 'iso-8859-14',
+      \ 'iso_8859-14:1998' : 'iso-8859-14',
+      \ 'iso_8859-14' : 'iso-8859-14',
+      \ 'latin8' : 'iso-8859-14',
+      \ 'iso-celtic' : 'iso-8859-14',
+      \ 'l8' : 'iso-8859-14',
+      \ 'iso-8859-15' : 'iso-8859-15',
+      \ 'iso_8859-15' : 'iso-8859-15',
+      \ 'latin-9' : 'iso-8859-15',
+      \ 'koi8-r' : 'koi8-r',
+      \ 'cskoi8r' : 'koi8-r',
+      \ 'koi8-u' : 'koi8-u',
+      \ 'macintosh' : 'macroman',
+      \ 'mac' : 'macroman',
+      \ 'csmacintosh' : 'macroman',
+      \ 'ibm437' : 'cp437',
+      \ 'cp437' : 'cp437',
+      \ '437' : 'cp437',
+      \ 'cspc8codepage437' : 'cp437',
+      \ 'ibm775' : 'cp775',
+      \ 'cp775' : 'cp775',
+      \ 'cspc775baltic' : 'cp775',
+      \ 'ibm850' : 'cp850',
+      \ 'cp850' : 'cp850',
+      \ '850' : 'cp850',
+      \ 'cspc850multilingual' : 'cp850',
+      \ 'ibm852' : 'cp852',
+      \ 'cp852' : 'cp852',
+      \ '852' : 'cp852',
+      \ 'cspcp852' : 'cp852',
+      \ 'ibm855' : 'cp855',
+      \ 'cp855' : 'cp855',
+      \ '855' : 'cp855',
+      \ 'csibm855' : 'cp855',
+      \ 'ibm857' : 'cp857',
+      \ 'cp857' : 'cp857',
+      \ '857' : 'cp857',
+      \ 'csibm857' : 'cp857',
+      \ 'ibm860' : 'cp860',
+      \ 'cp860' : 'cp860',
+      \ '860' : 'cp860',
+      \ 'csibm860' : 'cp860',
+      \ 'ibm861' : 'cp861',
+      \ 'cp861' : 'cp861',
+      \ '861' : 'cp861',
+      \ 'cp-is' : 'cp861',
+      \ 'csibm861' : 'cp861',
+      \ 'ibm862' : 'cp862',
+      \ 'cp862' : 'cp862',
+      \ '862' : 'cp862',
+      \ 'cspc862latinhebrew' : 'cp862',
+      \ 'ibm863' : 'cp863',
+      \ 'cp863' : 'cp863',
+      \ '863' : 'cp863',
+      \ 'csibm863' : 'cp863',
+      \ 'ibm865' : 'cp865',
+      \ 'cp865' : 'cp865',
+      \ '865' : 'cp865',
+      \ 'csibm865' : 'cp865',
+      \ 'ibm866' : 'cp866',
+      \ 'cp866' : 'cp866',
+      \ '866' : 'cp866',
+      \ 'csibm866' : 'cp866',
+      \ 'ibm869' : 'cp869',
+      \ 'cp869' : 'cp869',
+      \ '869' : 'cp869',
+      \ 'cp-gr' : 'cp869',
+      \ 'csibm869' : 'cp869',
+      \ 'windows-1250' : 'cp1250',
+      \ 'windows-1251' : 'cp1251',
+      \ 'windows-1253' : 'cp1253',
+      \ 'windows-1254' : 'cp1254',
+      \ 'windows-1255' : 'cp1255',
+      \ 'windows-1256' : 'cp1256',
+      \ 'windows-1257' : 'cp1257',
+      \ 'windows-1258' : 'cp1258',
+      \ 'extended_unix_code_packed_format_for_japanese' : 'euc-jp',
+      \ 'cseucpkdfmtjapanese' : 'euc-jp',
+      \ 'euc-jp' : 'euc-jp',
+      \ 'shift_jis' : 'sjis',
+      \ 'ms_kanji' : 'sjis',
+      \ 'sjis' : 'sjis',
+      \ 'csshiftjis' : 'sjis',
+      \ 'ibm-thai' : 'cp874',
+      \ 'csibmthai' : 'cp874',
+      \ 'ks_c_5601-1987' : 'cp949',
+      \ 'iso-ir-149' : 'cp949',
+      \ 'ks_c_5601-1989' : 'cp949',
+      \ 'ksc_5601' : 'cp949',
+      \ 'korean' : 'cp949',
+      \ 'csksc56011987' : 'cp949',
+      \ 'euc-kr' : 'euc-kr',
+      \ 'cseuckr' : 'euc-kr',
+      \ 'gbk' : 'cp936',
+      \ 'cp936' : 'cp936',
+      \ 'ms936' : 'cp936',
+      \ 'windows-936' : 'cp936',
+      \ 'gb_2312-80' : 'euc-cn',
+      \ 'iso-ir-58' : 'euc-cn',
+      \ 'chinese' : 'euc-cn',
+      \ 'csiso58gb231280' : 'euc-cn',
+      \ 'big5' : 'big5',
+      \ 'csbig5' : 'big5',
+      \ 'utf-8' : 'utf-8',
+      \ 'iso-10646-ucs-2' : 'ucs-2',
+      \ 'csunicode' : 'ucs-2',
+      \ 'utf-16' : 'utf-16',
+      \ 'utf-16be' : 'utf-16',
+      \ 'utf-16le' : 'utf-16le',
+      \ 'utf-32' : 'ucs-4',
+      \ 'utf-32be' : 'ucs-4',
+      \ 'utf-32le' : 'ucs-4le',
+      \ 'iso-10646-ucs-4' : 'ucs-4',
+      \ 'csucs4' : 'ucs-4'
+      \ }
+lockvar g:tohtml#charset_to_encoding
+"}}}
+
+func! tohtml#Convert2HTML(line1, line2) "{{{
   let s:settings = tohtml#GetUserSettings()
 
-  if !&diff || s:settings.diff_one_file
+  if !&diff || s:settings.diff_one_file "{{{
     if a:line2 >= a:line1
       let g:html_start_line = a:line1
       let g:html_end_line = a:line2
@@ -24,31 +298,51 @@
       let g:html_start_line = a:line2
       let g:html_end_line = a:line1
     endif
-    runtime syntax/2html.vim
-  else
+    runtime syntax/2html.vim "}}}
+  else "{{{
     let win_list = []
     let buf_list = []
     windo | if &diff | call add(win_list, winbufnr(0)) | endif
     let s:settings.whole_filler = 1
     let g:html_diff_win_num = 0
     for window in win_list
+      " switch to the next buffer to convert
       exe ":" . bufwinnr(window) . "wincmd w"
+
+      " figure out whether current charset and encoding will work, if not
+      " default to UTF-8
+      if !exists('g:html_use_encoding') &&
+	    \ (((&l:fileencoding=='' || (&l:buftype!='' && &l:buftype!=?'help'))
+	    \      && &encoding!=?s:settings.vim_encoding)
+	    \ || &l:fileencoding!='' && &l:fileencoding!=?s:settings.vim_encoding)
+	echohl WarningMsg
+	echomsg "TOhtml: mismatched file encodings in Diff buffers, using UTF-8"
+	echohl None
+	let s:settings.vim_encoding = 'utf-8'
+	let s:settings.encoding = 'UTF-8'
+      endif
+
+      " set up for diff-mode conversion
       let g:html_start_line = 1
       let g:html_end_line = line('$')
       let g:html_diff_win_num += 1
+
+      " convert this file
       runtime syntax/2html.vim
+
+      " remember the HTML buffer for later combination
       call add(buf_list, bufnr('%'))
     endfor
     unlet g:html_diff_win_num
     call tohtml#Diff2HTML(win_list, buf_list)
-  endif
+  endif "}}}
 
   unlet g:html_start_line
   unlet g:html_end_line
   unlet s:settings
-endfunc
+endfunc "}}}
 
-func! tohtml#Diff2HTML(win_list, buf_list)
+func! tohtml#Diff2HTML(win_list, buf_list) "{{{
   let xml_line = ""
   let tag_close = '>'
 
@@ -87,7 +381,7 @@
   call add(html, '<head>')
 
   " include encoding as close to the top as possible, but only if not already
-  " contained in XML information (to avoid haggling over content type)
+  " contained in XML information
   if s:settings.encoding != "" && !s:settings.use_xhtml
     call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
   endif
@@ -97,12 +391,25 @@
   call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
   call add(html, '<meta name="settings" content="'.
 	\ join(filter(keys(s:settings),'s:settings[v:val]'),',').
+	\ ',prevent_copy='.s:settings.prevent_copy.
 	\ '"'.tag_close)
+  call add(html, '<meta name="colorscheme" content="'.
+	\ (exists('g:colors_name')
+	\ ? g:colors_name
+	\ : 'none'). '"'.tag_close)
 
   call add(html, '</head>')
   let body_line_num = len(html)
-  call add(html, '<body>')
-  call add(html, '<table border="1" width="100%">')
+  if !empty(s:settings.prevent_copy)
+    call add(html, "<body onload='FixCharWidth();".(s:settings.line_ids ? " JumpToLine();" : "")."'>")
+    call add(html, "<!-- hidden divs used by javascript to get the width of a char -->")
+    call add(html, "<div id='oneCharWidth'>0</div>")
+    call add(html, "<div id='oneInputWidth'><input size='1' value='0'".tag_close."</div>")
+    call add(html, "<div id='oneEmWidth' style='width: 1em;'></div>")
+  else
+    call add(html, '<body'.(s:settings.line_ids ? ' onload="JumpToLine();"' : '').'>')
+  endif
+  call add(html, "<table border='1' width='100%' id='vimCodeElement".s:settings.id_suffix."'>")
 
   call add(html, '<tr>')
   for buf in a:win_list
@@ -133,7 +440,8 @@
       let s:body_end_line = getline('.')
     endif
 
-    " Grab the style information.  Some of this will be duplicated...
+    " Grab the style information. Some of this will be duplicated so only insert
+    " it if it's not already there. {{{
     1
     let style_start = search('^<style type="text/css">')
     1
@@ -151,22 +459,27 @@
 	  let insert_index += 1
 	endif
       endfor
-    endif
+    endif " }}}
 
+    " everything new will get added before the diff styles so diff highlight
+    " properly overrides normal highlight
     if diff_style_start != 0
       let insert_index = diff_style_start
     endif
 
-    " Delete those parts that are not needed so
-    " we can include the rest into the resulting table
-    1,/^<body/d_
+    " Delete those parts that are not needed so we can include the rest into the
+    " resulting table.
+    1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
     $
     ?</body>?,$d_
     let temp = getline(1,'$')
+    " clean out id on the main content container because we already set it on
+    " the table
+    let temp[0] = substitute(temp[0], " id='vimCodeElement[^']*'", "", "")
     " undo deletion of start and end part
     " so we can later save the file as valid html
     " TODO: restore using grabbed lines if undolevel is 1?
-    normal 2u
+    normal! 2u
     if s:settings.use_css
       call add(html, '<td valign="top"><div>')
     elseif s:settings.use_xhtml
@@ -190,6 +503,11 @@
   call add(html, s:body_end_line)
   call add(html, '</html>')
 
+  " The generated HTML is admittedly ugly and takes a LONG time to fold.
+  " Make sure the user doesn't do syntax folding when loading a generated file,
+  " using a modeline.
+  call add(html, '<!-- vim: set foldmethod=manual : -->')
+
   let i = 1
   let name = "Diff" . (s:settings.use_xhtml ? ".xhtml" : ".html")
   " Find an unused file name if current file name is already in use
@@ -203,18 +521,114 @@
   " just in case some user autocmd creates content in the new buffer, make sure
   " it is empty before proceeding
   %d
+
+  " set the fileencoding to match the charset we'll be using
+  let &l:fileencoding=s:settings.vim_encoding
+
+  " According to http://www.w3.org/TR/html4/charset.html#doc-char-set, the byte
+  " order mark is highly recommend on the web when using multibyte encodings. But,
+  " it is not a good idea to include it on UTF-8 files. Otherwise, let Vim
+  " determine when it is actually inserted.
+  if s:settings.vim_encoding == 'utf-8'
+    setlocal nobomb
+  else
+    setlocal bomb
+  endif
+
   call append(0, html)
 
   if len(style) > 0
     1
     let style_start = search('^</head>')-1
 
+    " add required javascript in reverse order so we can just call append again
+    " and again without adjusting {{{
+
+    " insert script closing tag
+    call append(style_start, [
+	  \ '',
+	  \ s:settings.use_xhtml ? '//]]>' : '-->',
+	  \ "</script>"
+	  \ ])
+
+    " insert script which corrects the size of small input elements in
+    " prevent_copy mode. See 2html.vim for details on why this is needed and how
+    " it works.
+    if !empty(s:settings.prevent_copy)
+      call append(style_start, [
+	    \ '',
+	    \ '/* simulate a "ch" unit by asking the browser how big a zero character is */',
+	    \ 'function FixCharWidth() {',
+	    \ '  /* get the hidden element which gives the width of a single character */',
+	    \ '  var goodWidth = document.getElementById("oneCharWidth").clientWidth;',
+	    \ '  /* get all input elements, we''ll filter on class later */',
+	    \ '  var inputTags = document.getElementsByTagName("input");',
+	    \ '  var ratio = 5;',
+	    \ '  var inputWidth = document.getElementById("oneInputWidth").clientWidth;',
+	    \ '  var emWidth = document.getElementById("oneEmWidth").clientWidth;',
+	    \ '  if (inputWidth > goodWidth) {',
+	    \ '    while (ratio < 100*goodWidth/emWidth && ratio < 100) {',
+	    \ '      ratio += 5;',
+	    \ '    }',
+	    \ '    document.getElementById("vimCodeElement'.s:settings.id_suffix.'").className = "em"+ratio;',
+	    \ '  }',
+	    \ '}'
+	    \ ])
+    endif
+    "
+    " insert javascript to get IDs from line numbers, and to open a fold before
+    " jumping to any lines contained therein
+    call append(style_start, [
+	  \ "  /* Always jump to new location even if the line was hidden inside a fold, or",
+	  \ "   * we corrected the raw number to a line ID.",
+	  \ "   */",
+	  \ "  if (lineElem) {",
+	  \ "    lineElem.scrollIntoView(true);",
+	  \ "  }",
+	  \ "  return true;",
+	  \ "}",
+	  \ "if ('onhashchange' in window) {",
+	  \ "  window.onhashchange = JumpToLine;",
+	  \ "}"
+	  \ ])
+    if s:settings.dynamic_folds
+      call append(style_start, [
+	    \ "",
+	    \ "  /* navigate upwards in the DOM tree to open all folds containing the line */",
+	    \ "  var node = lineElem;",
+	    \ "  while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
+	    \ "  {",
+	    \ "    if (node.className == 'closed-fold')",
+	    \ "    {",
+	    \ "      /* toggle open the fold ID (remove window ID) */",
+	    \ "      toggleFold(node.id.substr(4));",
+	    \ "    }",
+	    \ "    node = node.parentNode;",
+	    \ "  }",
+	    \ ])
+    endif
+    call append(style_start, [
+	  \ "",
+	  \ "/* function to open any folds containing a jumped-to line before jumping to it */",
+	  \ "function JumpToLine()",
+	  \ "{",
+	  \ "  var lineNum;",
+	  \ "  lineNum = window.location.hash;",
+	  \ "  lineNum = lineNum.substr(1); /* strip off '#' */",
+	  \ "",
+	  \ "  if (lineNum.indexOf('L') == -1) {",
+	  \ "    lineNum = 'L'+lineNum;",
+	  \ "  }",
+	  \ "  if (lineNum.indexOf('W') == -1) {",
+	  \ "    lineNum = 'W1'+lineNum;",
+	  \ "  }",
+	  \ "  lineElem = document.getElementById(lineNum);"
+	  \ ])
+
     " Insert javascript to toggle matching folds open and closed in all windows,
     " if dynamic folding is active.
     if s:settings.dynamic_folds
       call append(style_start, [
-	    \  "<script type='text/javascript'>",
-	    \  s:settings.use_xhtml ? '//<![CDATA[' : "  <!--",
 	    \  "  function toggleFold(objID)",
 	    \  "  {",
 	    \  "    for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
@@ -231,16 +645,20 @@
 	    \  "      }",
 	    \  "    }",
 	    \  "  }",
-	    \  s:settings.use_xhtml ? '//]]>' : "  -->",
-	    \  "</script>"
 	    \ ])
     endif
 
+    " insert script tag; javascript is always needed for the line number
+    " normalization for URL hashes
+    call append(style_start, [
+	  \ "<script type='text/javascript'>",
+	  \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+
     " Insert styles from all the generated html documents and additional styles
     " for the table-based layout of the side-by-side diff. The diff should take
     " up the full browser window (but not more), and be static in size,
     " horizontally scrollable when the lines are too long. Otherwise, the diff
-    " is pretty useless for really long lines.
+    " is pretty useless for really long lines. {{{
     if s:settings.use_css
       call append(style_start,
 	    \ ['<style type="text/css">']+
@@ -252,28 +670,28 @@
 	    \   'td div { overflow: auto; }',
 	    \   s:settings.use_xhtml ? '' : '-->',
 	    \   '</style>'
-	    \ ])
-    endif
+	    \])
+    endif "}}}
   endif
 
   let &paste = s:old_paste
   let &magic = s:old_magic
-endfunc
+endfunc "}}}
 
 " Gets a single user option and sets it in the passed-in Dict, or gives it the
 " default value if the option doesn't actually exist.
-func! tohtml#GetOption(settings, option, default)
+func! tohtml#GetOption(settings, option, default) "{{{
   if exists('g:html_'.a:option)
     let a:settings[a:option] = g:html_{a:option}
   else
     let a:settings[a:option] = a:default
   endif
-endfunc
+endfunc "}}}
 
 " returns a Dict containing the values of all user options for 2html, including
 " default values for those not given an explicit value by the user. Discards the
 " html_ prefix of the option for nicer looking code.
-func! tohtml#GetUserSettings()
+func! tohtml#GetUserSettings() "{{{
   if exists('s:settings')
     " just restore the known options if we've already retrieved them
     return s:settings
@@ -289,21 +707,25 @@
       let g:html_use_xhtml = g:use_xhtml
     endif
 
-    " get current option settings with appropriate defaults
-    call tohtml#GetOption(user_settings,    'no_progress',  !has("statusline") )
-    call tohtml#GetOption(user_settings,  'diff_one_file',  0 )
-    call tohtml#GetOption(user_settings,   'number_lines',  &number )
-    call tohtml#GetOption(user_settings,        'use_css',  1 )
-    call tohtml#GetOption(user_settings, 'ignore_conceal',  0 )
-    call tohtml#GetOption(user_settings, 'ignore_folding',  0 )
-    call tohtml#GetOption(user_settings,  'dynamic_folds',  0 )
-    call tohtml#GetOption(user_settings,  'no_foldcolumn',  0 )
-    call tohtml#GetOption(user_settings,   'hover_unfold',  0 )
-    call tohtml#GetOption(user_settings,         'no_pre',  0 )
-    call tohtml#GetOption(user_settings,   'whole_filler',  0 )
-    call tohtml#GetOption(user_settings,      'use_xhtml',  0 )
+    " get current option settings with appropriate defaults {{{
+    call tohtml#GetOption(user_settings,    'no_progress', !has("statusline") )
+    call tohtml#GetOption(user_settings,  'diff_one_file', 0 )
+    call tohtml#GetOption(user_settings,   'number_lines', &number )
+    call tohtml#GetOption(user_settings,       'pre_wrap', &wrap )
+    call tohtml#GetOption(user_settings,        'use_css', 1 )
+    call tohtml#GetOption(user_settings, 'ignore_conceal', 0 )
+    call tohtml#GetOption(user_settings, 'ignore_folding', 0 )
+    call tohtml#GetOption(user_settings,  'dynamic_folds', 0 )
+    call tohtml#GetOption(user_settings,  'no_foldcolumn', user_settings.ignore_folding)
+    call tohtml#GetOption(user_settings,   'hover_unfold', 0 )
+    call tohtml#GetOption(user_settings,         'no_pre', 0 )
+    call tohtml#GetOption(user_settings,     'no_invalid', 0 )
+    call tohtml#GetOption(user_settings,   'whole_filler', 0 )
+    call tohtml#GetOption(user_settings,      'use_xhtml', 0 )
+    call tohtml#GetOption(user_settings,       'line_ids', user_settings.number_lines )
+    " }}}
     
-    " override those settings that need it
+    " override those settings that need it {{{
 
     " hover opening implies dynamic folding
     if user_settings.hover_unfold
@@ -324,6 +746,8 @@
     " dynamic folding implies css
     if user_settings.dynamic_folds
       let user_settings.use_css = 1
+    else
+      let user_settings.no_foldcolumn = 1 " won't do anything but for consistency and for the test suite
     endif
 
     " if we're not using CSS we cannot use a pre section because <font> tags
@@ -332,47 +756,168 @@
       let user_settings.no_pre = 1
     endif
 
-    " Figure out proper MIME charset from the 'encoding' option.
-    if exists("g:html_use_encoding")
+    " pre_wrap doesn't do anything if not using pre or not using CSS
+    if user_settings.no_pre || !user_settings.use_css
+      let user_settings.pre_wrap=0
+    endif
+    "}}}
+
+    " set up expand_tabs option after all the overrides so we know the
+    " appropriate defaults {{{
+    if user_settings.no_pre == 0
+      call tohtml#GetOption(user_settings,
+	    \ 'expand_tabs',
+	    \ &expandtab || &ts != 8 || user_settings.number_lines ||
+	    \   (user_settings.dynamic_folds && !user_settings.no_foldcolumn))
+    else
+      let user_settings.expand_tabs = 1
+    endif
+    " }}}
+
+    " textual options
+    if exists("g:html_use_encoding") "{{{
+      " user specified the desired MIME charset, figure out proper
+      " 'fileencoding' from it or warn the user if we cannot
       let user_settings.encoding = g:html_use_encoding
+      let user_settings.vim_encoding = tohtml#EncodingFromCharset(g:html_use_encoding)
+      if user_settings.vim_encoding == ''
+	echohl WarningMsg
+	echomsg "TOhtml: file encoding for"
+	      \ g:html_use_encoding
+	      \ "unknown, please set 'fileencoding'"
+	echohl None
+      endif
     else
-      let vim_encoding = &encoding
-      if vim_encoding =~ '^8bit\|^2byte'
-	let vim_encoding = substitute(vim_encoding, '^8bit-\|^2byte-', '', '')
+      " Figure out proper MIME charset from 'fileencoding' if possible
+      if &l:fileencoding != '' 
+	" If the buffer is not a "normal" type, the 'fileencoding' value may not
+	" be trusted; since the buffer should not be written the fileencoding is
+	" not intended to be used.
+	if &l:buftype=='' || &l:buftype==?'help'
+	  let user_settings.vim_encoding = &l:fileencoding
+	  call tohtml#CharsetFromEncoding(user_settings)
+	else
+	  let user_settings.encoding = '' " trigger detection using &encoding
+	endif
+      endif
+
+      " else from 'encoding' if possible
+      if &l:fileencoding == '' || user_settings.encoding == ''
+	let user_settings.vim_encoding = &encoding
+	call tohtml#CharsetFromEncoding(user_settings)
       endif
-      if vim_encoding == 'latin1'
-	let user_settings.encoding = 'iso-8859-1'
-      elseif vim_encoding =~ "^cp12"
-	let user_settings.encoding = substitute(vim_encoding, 'cp', 'windows-', '')
-      elseif vim_encoding == 'sjis' || vim_encoding == 'cp932'
-	let user_settings.encoding = 'Shift_JIS'
-      elseif vim_encoding == 'big5' || vim_encoding == 'cp950'
-	let user_settings.encoding = "Big5"
-      elseif vim_encoding == 'euc-cn'
-	let user_settings.encoding = 'GB_2312-80'
-      elseif vim_encoding == 'euc-tw'
-	let user_settings.encoding = ""
-      elseif vim_encoding =~ '^euc\|^iso\|^koi'
-	let user_settings.encoding = substitute(vim_encoding, '.*', '\U\0', '')
-      elseif vim_encoding == 'cp949'
-	let user_settings.encoding = 'KS_C_5601-1987'
-      elseif vim_encoding == 'cp936'
-	let user_settings.encoding = 'GBK'
-      elseif vim_encoding =~ '^ucs\|^utf'
+
+      " else default to UTF-8 and warn user
+      if user_settings.encoding == ''
+	let user_settings.vim_encoding = 'utf-8'
 	let user_settings.encoding = 'UTF-8'
+	echohl WarningMsg
+	echomsg "TOhtml: couldn't determine MIME charset, using UTF-8"
+	echohl None
+      endif
+    endif "}}}
+
+    " Default to making nothing uncopyable, because we default to
+    " not-standards way of doing things, and also because Microsoft Word and
+    " others paste the <input> elements anyway.
+    "
+    " html_prevent_copy only has an effect when using CSS.
+    "
+    " All options:
+    "	  f - fold column
+    "	  n - line numbers (also within fold text)
+    "	  t - fold text
+    "	  d - diff filler
+    "	  c - concealed text (reserved future)
+    "	  l - listchars (reserved possible future)
+    "	  s - signs (reserved possible future)
+    "
+    " Normal text is always selectable.
+    let user_settings.prevent_copy = ""
+    if user_settings.use_css
+      if exists("g:html_prevent_copy")
+	if user_settings.dynamic_folds && !user_settings.no_foldcolumn && g:html_prevent_copy =~# 'f'
+	  let user_settings.prevent_copy .= 'f'
+	endif
+	if user_settings.number_lines && g:html_prevent_copy =~# 'n'
+	  let user_settings.prevent_copy .= 'n'
+	endif
+	if &diff && g:html_prevent_copy =~# 'd'
+	  let user_settings.prevent_copy .= 'd'
+	endif
+	if !user_settings.ignore_folding && g:html_prevent_copy =~# 't'
+	  let user_settings.prevent_copy .= 't'
+	endif
       else
-	let user_settings.encoding = ""
+	let user_settings.prevent_copy = ""
       endif
     endif
+    if empty(user_settings.prevent_copy)
+      let user_settings.no_invalid = 0
+    endif
+
+    if exists('g:html_id_expr')
+      let user_settings.id_suffix = eval(g:html_id_expr)
+      if user_settings.id_suffix !~ '^[-_:.A-Za-z0-9]*$'
+	echohl WarningMsg
+	echomsg '2html: g:html_id_expr evaluated to invalid string for HTML id attributes'
+	echomsg '2html: Omitting user-specified suffix'
+	echohl None
+	sleep 3
+	let user_settings.id_suffix=""
+      endif
+    else
+      let user_settings.id_suffix=""
+    endif
 
     " TODO: font
 
     return user_settings
   endif
-endfunc
+endfunc "}}}
+
+" get the proper HTML charset name from a Vim encoding option.
+function! tohtml#CharsetFromEncoding(settings) "{{{
+  let l:vim_encoding = a:settings.vim_encoding
+  if exists('g:html_charset_override') && has_key(g:html_charset_override, l:vim_encoding)
+    let a:settings.encoding = g:html_charset_override[l:vim_encoding]
+  else
+    if l:vim_encoding =~ '^8bit\|^2byte'
+      " 8bit- and 2byte- prefixes are to indicate encodings available on the
+      " system that Vim will convert with iconv(), look up just the encoding name,
+      " not Vim's prefix.
+      let l:vim_encoding = substitute(l:vim_encoding, '^8bit-\|^2byte-', '', '')
+    endif
+    if has_key(g:tohtml#encoding_to_charset, l:vim_encoding)
+      let a:settings.encoding = g:tohtml#encoding_to_charset[l:vim_encoding]
+    else
+      let a:settings.encoding = ""
+    endif
+  endif
+  if a:settings.encoding != ""
+    let l:vim_encoding = tohtml#EncodingFromCharset(a:settings.encoding)
+    if l:vim_encoding != ""
+      " if the Vim encoding to HTML encoding conversion is set up (by default or
+      " by the user) to convert to a different encoding, we need to also change
+      " the Vim encoding of the new buffer
+      let a:settings.vim_encoding = l:vim_encoding
+    endif
+  endif
+endfun "}}}
+
+" Get the proper Vim encoding option setting from an HTML charset name.
+function! tohtml#EncodingFromCharset(encoding) "{{{
+  if exists('g:html_encoding_override') && has_key(g:html_encoding_override, a:encoding)
+    return g:html_encoding_override[a:encoding]
+  elseif has_key(g:tohtml#charset_to_encoding, tolower(a:encoding))
+    return g:tohtml#charset_to_encoding[tolower(a:encoding)]
+  else
+    return ""
+  endif
+endfun "}}}
 
 let &cpo = s:cpo_sav
 unlet s:cpo_sav
 
 " Make sure any patches will probably use consistent indent
-"   vim: ts=8 sw=2 sts=2 noet
+"   vim: ts=8 sw=2 sts=2 noet fdm=marker
diff -Naur vim73.orig/runtime/autoload/vimball.vim vim73/runtime/autoload/vimball.vim
--- vim73.orig/runtime/autoload/vimball.vim	2010-05-15 11:03:30.000000000 +0000
+++ vim73/runtime/autoload/vimball.vim	2013-08-04 19:09:07.660619397 +0000
@@ -1,9 +1,9 @@
 " vimball.vim : construct a file containing both paths and files
 " Author:	Charles E. Campbell, Jr.
-" Date:		Apr 12, 2010
-" Version:	31
+" Date:		Jan 17, 2012
+" Version:	35
 " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
-" Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.
+" Copyright: (c) 2004-2011 by Charles E. Campbell, Jr.
 "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
 "            (see |copyright|) except use "Vimball" instead of "Vim".
 "            No warranty, express or implied.
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_vimball")
  finish
 endif
-let g:loaded_vimball = "v31"
+let g:loaded_vimball = "v35"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of vimball needs vim 7.2"
@@ -67,10 +67,10 @@
 " vimball#MkVimball: creates a vimball given a list of paths to files {{{2
 " Input:
 "     line1,line2: a range of lines containing paths to files to be included in the vimball
-"     writelevel : if true, force a write to filename.vba, even if it exists
+"     writelevel : if true, force a write to filename.vmb, even if it exists
 "                  (usually accomplished with :MkVimball! ...
-"     filename   : base name of file to be created (ie. filename.vba)
-" Output: a filename.vba using vimball format:
+"     filename   : base name of file to be created (ie. filename.vmb)
+" Output: a filename.vmb using vimball format:
 "     path
 "     filesize
 "     [file]
@@ -80,12 +80,12 @@
 fun! vimball#MkVimball(line1,line2,writelevel,...) range
 "  call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:1.">) a:0=".a:0)
   if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
-   let vbname= substitute(a:1,'\.\a\{3}$','.vba','')
+   let vbname= substitute(a:1,'\.\a\{3}$','.vmb','')
   else
    let vbname= a:1
   endif
-  if vbname !~ '\.vba$'
-   let vbname= vbname.'.vba'
+  if vbname !~ '\.vmb$'
+   let vbname= vbname.'.vmb'
   endif
 "  call Decho("vbname<".vbname.">")
   if !a:writelevel && a:1 =~ '[\/]'
@@ -134,7 +134,7 @@
    " create/switch to mkvimball tab
    if !exists("vbtabnr")
     tabnew
-    silent! file Vimball
+    sil! file Vimball
     let vbtabnr= tabpagenr()
    else
     exe "tabn ".vbtabnr
@@ -195,8 +195,8 @@
 "  call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0)
 
   if v:version < 701 || (v:version == 701 && !exists('*fnameescape'))
-   echoerr "your vim is missing the fnameescape() function"
-"   call Dret("vimball#Vimball : needs 7.1 with patch 299")
+   echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)"
+"   call Dret("vimball#Vimball : needs 7.1 with patch 299 or later")
    return
   endif
 
@@ -214,13 +214,22 @@
   " set up vimball tab
 "  call Decho("setting up vimball tab")
   tabnew
-  silent! file Vimball
+  sil! file Vimball
   let vbtabnr= tabpagenr()
   let didhelp= ""
 
   " go to vim plugin home
   if a:0 > 0
+   " let user specify the directory where the vimball is to be unpacked.
+   " If, however, the user did not specify a full path, set the home to be below the current directory
    let home= expand(a:1)
+   if has("win32") || has("win95") || has("win64") || has("win16")
+	if home !~ '^\a:[/\\]'
+	 let home= getcwd().'/'.a:1
+	endif
+   elseif home !~ '^/'
+	let home= getcwd().'/'.a:1
+   endif
   else
    let home= vimball#VimballHome()
   endif
@@ -254,11 +263,10 @@
   while 1 < linenr && linenr < line("$")
    let fname   = substitute(getline(linenr),'\t\[\[\[1$','','')
    let fname   = substitute(fname,'\\','/','g')
-"   let fsize   = getline(linenr+1)+0
    let fsize   = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
-   let fenc    = substitute(getline(linenr+1),'^\d\+\s*\(\S\+\)$','\1','')
+   let fenc    = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
    let filecnt = filecnt + 1
-"   call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt)
+"   call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
 
    if a:really
     echomsg "extracted <".fname.">: ".fsize." lines"
@@ -283,11 +291,14 @@
 "    call Decho("making directories if they don't exist yet (fname<".fname.">)")
     let fnamebuf= substitute(fname,'\\','/','g')
 	let dirpath = substitute(home,'\\','/','g')
+"	call Decho("init: fnamebuf<".fnamebuf.">")
+"	call Decho("init: dirpath <".dirpath.">")
     while fnamebuf =~ '/'
      let dirname  = dirpath."/".substitute(fnamebuf,'/.*$','','')
 	 let dirpath  = dirname
      let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
 "	 call Decho("dirname<".dirname.">")
+"	 call Decho("dirpath<".dirpath.">")
      if !isdirectory(dirname)
 "      call Decho("making <".dirname.">")
       if exists("g:vimball_mkdir")
@@ -306,20 +317,22 @@
    let linenr   = linenr + 2
    let lastline = linenr + fsize - 1
 "   call Decho("exe ".linenr.",".lastline."yank a")
-   exe "silent ".linenr.",".lastline."yank a"
+   " no point in handling a zero-length file
+   if lastline >= linenr
+    exe "silent ".linenr.",".lastline."yank a"
 
-   " copy "a" buffer into tab
+    " copy "a" buffer into tab
 "   call Decho('copy "a buffer into tab#'.vbtabnr)
-   exe "tabn ".vbtabnr
-   setlocal ma
-   silent! %d
-   silent put a
-   1
-   silent d
-
-   " write tab to file
-   if a:really
-    let fnamepath= home."/".fname
+    exe "tabn ".vbtabnr
+    setlocal ma
+    sil! %d
+    silent put a
+    1
+    sil! d
+
+    " write tab to file
+    if a:really
+     let fnamepath= home."/".fname
 "    call Decho("exe w! ".fnameescape(fnamepath))
 	if fenc != ""
 	 exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
@@ -328,17 +341,18 @@
 	endif
 	echo "wrote ".fnameescape(fnamepath)
 	call s:RecordInVar(home,"call delete('".fnamepath."')")
-   endif
+    endif
 
-   " return to tab with vimball
+    " return to tab with vimball
 "   call Decho("exe tabn ".curtabnr)
-   exe "tabn ".curtabnr
+    exe "tabn ".curtabnr
 
-   " set up help if its a doc/*.txt file
+    " set up help if its a doc/*.txt file
 "   call Decho("didhelp<".didhelp."> fname<".fname.">")
-   if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
-   	let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
+    if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
+    	let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
 "	call Decho("didhelp<".didhelp.">")
+    endif
    endif
 
    " update for next file
@@ -400,7 +414,9 @@
    let curfile= a:1
 "   call Decho("case a:0=".a:0.": curfile<".curfile.">")
   endif
-  if curfile =~ '\.vba$'
+  if curfile =~ '\.vmb$'
+   let curfile= substitute(curfile,'\.vmb','','')
+  elseif curfile =~ '\.vba$'
    let curfile= substitute(curfile,'\.vba','','')
   endif
   if a:0 >= 2
@@ -418,13 +434,17 @@
 "   call Decho(".VimballRecord is readable")
 "   call Decho("curfile<".curfile.">")
    keepalt keepjumps 1split 
-   silent! keepalt keepjumps e .VimballRecord
+   sil! keepalt keepjumps e .VimballRecord
    let keepsrch= @/
 "   call Decho('search for ^\M'.curfile.'.\m: ')
-"   call Decho('search for ^\M'.curfile.'.\mvba: ')
-"   call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.vba: ')
+"   call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
+"   call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
    if search('^\M'.curfile."\m: ".'cw')
 	let foundit= 1
+   elseif search('^\M'.curfile.".\mvmb: ",'cw')
+	let foundit= 2
+   elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
+	let foundit= 2
    elseif search('^\M'.curfile.".\mvba: ",'cw')
 	let foundit= 1
    elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
@@ -433,25 +453,29 @@
     let foundit = 0
    endif
    if foundit
-	let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
+	if foundit == 1
+	 let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
+	else
+	 let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
+	endif
     let s:VBRstring= substitute(exestring,'call delete(','','g')
     let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
 "	call Decho("exe ".exestring)
-	silent! keepalt keepjumps exe exestring
-	silent! keepalt keepjumps d
+	sil! keepalt keepjumps exe exestring
+	sil! keepalt keepjumps d
 	let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
 "	call Decho("exestring<".exestring.">")
 	echomsg "removed ".exestring." files"
    else
     let s:VBRstring= ''
-	let curfile    = substitute(curfile,'\.vba','','')
+	let curfile    = substitute(curfile,'\.vmb','','')
 "    call Decho("unable to find <".curfile."> in .VimballRecord")
 	if !exists("s:ok_unablefind")
      call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
 	endif
    endif
-   silent! keepalt keepjumps g/^\s*$/d
-   silent! keepalt keepjumps wq!
+   sil! keepalt keepjumps g/^\s*$/d
+   sil! keepalt keepjumps wq!
    let @/= keepsrch
   endif
   call s:ChgDir(curdir)
@@ -557,9 +581,19 @@
 fun! s:ChgDir(newdir)
 "  call Dfunc("ChgDir(newdir<".a:newdir.">)")
   if (has("win32") || has("win95") || has("win64") || has("win16"))
-   exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
-  else
-   exe 'silent cd '.fnameescape(a:newdir)
+   try
+    exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
+   catch  /^Vim\%((\a\+)\)\=:E/
+    call mkdir(fnameescape(substitute(a:newdir,'/','\\','g')))
+    exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
+   endtry
+  else
+   try
+    exe 'silent cd '.fnameescape(a:newdir)
+   catch  /^Vim\%((\a\+)\)\=:E/
+    call mkdir(fnameescape(a:newdir))
+    exe 'silent cd '.fnameescape(a:newdir)
+   endtry
   endif
 "  call Dret("ChgDir : curdir<".getcwd().">")
 endfun
@@ -599,7 +633,7 @@
    let cmd= expand("%:tr").": "
 "   call Decho("cmd<".cmd.">")
 
-   silent! keepalt keepjumps e .VimballRecord
+   sil! keepalt keepjumps e .VimballRecord
    setlocal ma
    $
    if exists("s:recordfile") && exists("s:recorddir")
@@ -616,8 +650,8 @@
 
    " put command into buffer, write .VimballRecord `file
    keepalt keepjumps put=cmd
-   silent! keepalt keepjumps g/^\s*$/d
-   silent! keepalt keepjumps wq!
+   sil! keepalt keepjumps g/^\s*$/d
+   sil! keepalt keepjumps wq!
    call s:ChgDir(curdir)
 
    if exists("s:recorddir")
@@ -693,10 +727,11 @@
   let s:repkeep = &report
   let s:vekeep  = &ve
   let s:ffkeep  = &l:ff
+  let s:swfkeep = &l:swf
   if exists("&acd")
-   setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix
+   setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
   else
-   setlocal ei=all ve=all       nofen noic report=999 nohid bt= ma lz pm= ff=unix
+   setlocal ei=all ve=all       nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
   endif
   " vimballs should be in unix format
   setlocal ff=unix
@@ -732,6 +767,9 @@
 "  call Dret("RestoreSettings")
 endfun
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " ---------------------------------------------------------------------
 " Modelines: {{{1
 " vim: fdm=marker
diff -Naur vim73.orig/runtime/autoload/xmlcomplete.vim vim73/runtime/autoload/xmlcomplete.vim
--- vim73.orig/runtime/autoload/xmlcomplete.vim	2010-05-15 11:03:31.000000000 +0000
+++ vim73/runtime/autoload/xmlcomplete.vim	2013-08-04 19:09:07.683952660 +0000
@@ -1,7 +1,7 @@
 " Vim completion script
 " Language:	XML
 " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change:	2006 Aug 15
+" Last Change:	2013 Jun 29
 " Version: 1.9
 "
 " Changelog:
@@ -475,12 +475,12 @@
 endfunction
 
 function! s:SetKeywords()
-	let g:IsKeywordBak=&iskeyword
-	let &iskeyword='33-255'
+	let s:IsKeywordBak=&l:iskeyword
+	let &l:iskeyword='33-255'
 endfunction
 
 function! s:RestoreKeywords()
-	let &iskeyword=g:IsKeywordBak
+	let &l:iskeyword=s:IsKeywordBak
 endfunction
 
 function! s:Push(el, sname)
diff -Naur vim73.orig/runtime/autoload/zip.vim vim73/runtime/autoload/zip.vim
--- vim73.orig/runtime/autoload/zip.vim	2010-05-15 11:03:30.000000000 +0000
+++ vim73/runtime/autoload/zip.vim	2013-08-04 19:09:07.683952660 +0000
@@ -1,10 +1,10 @@
 " zip.vim: Handles browsing zipfiles
 "            AUTOLOAD PORTION
-" Date:		Apr 12, 2010
-" Version:	23
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:		Jul 02, 2013
+" Version:	27
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:	Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2013 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -13,13 +13,14 @@
 "               this plugin, you agree that in no event will the copyright
 "               holder be liable for any damages resulting from the use
 "               of this software.
+"redraw!|call DechoSep()|call inputsave()|call input("Press <cr> to continue")|call inputrestore()
 
 " ---------------------------------------------------------------------
 " Load Once: {{{1
 if &cp || exists("g:loaded_zip")
  finish
 endif
-let g:loaded_zip= "v23"
+let g:loaded_zip= "v27"
 if v:version < 702
  echohl WarningMsg
  echo "***warning*** this version of zip needs vim 7.2"
@@ -28,6 +29,7 @@
 endif
 let s:keepcpo= &cpo
 set cpo&vim
+"DechoTabOn
 
 let s:zipfile_escape = ' ?&;\'
 let s:ERROR          = 2
@@ -60,6 +62,16 @@
 " zip#Browse: {{{2
 fun! zip#Browse(zipfile)
 "  call Dfunc("zip#Browse(zipfile<".a:zipfile.">)")
+  " sanity check: insure that the zipfile has "PK" as its first two letters
+  "               (zipped files have a leading PK as a "magic cookie")
+  if !filereadable(a:zipfile) || readfile(a:zipfile, "", 1)[0] !~ '^PK'
+   exe "noautocmd e ".fnameescape(a:zipfile)
+"   call Dret("zip#Browse : not a zipfile<".a:zipfile.">")
+   return
+"  else        " Decho
+"   call Decho("zip#Browse: a:zipfile<".a:zipfile."> passed PK test - its a zip file")
+  endif
+
   let repkeep= &report
   set report=10
 
@@ -103,38 +115,26 @@
   set ft=tar
 
   " give header
-  let lastline= line("$")
-  call setline(lastline+1,'" zip.vim version '.g:loaded_zip)
-  call setline(lastline+2,'" Browsing zipfile '.a:zipfile)
-  call setline(lastline+3,'" Select a file with cursor and press ENTER')
-  $put =''
-  0d
-  $
+  call append(0, ['" zip.vim version '.g:loaded_zip,
+ \                '" Browsing zipfile '.a:zipfile,
+ \                '" Select a file with cursor and press ENTER'])
+  keepj $
 
 "  call Decho("exe silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1))
-  exe "silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1)
+  exe "keepj sil! r! ".g:zip_unzipcmd." -Z -1 -- ".s:Escape(a:zipfile,1)
   if v:shell_error != 0
    redraw!
    echohl WarningMsg | echo "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file" | echohl None
 "   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
-   silent %d
+   keepj sil! %d
    let eikeep= &ei
    set ei=BufReadCmd,FileReadCmd
-   exe "r ".fnameescape(a:zipfile)
+   exe "keepj r ".fnameescape(a:zipfile)
    let &ei= eikeep
-   1d
+   keepj 1d
 "   call Dret("zip#Browse")
    return
   endif
-"  call Decho("line 6: ".getline(6))
-  let namecol= stridx(getline(6),'Name') + 1
-"  call Decho("namecol=".namecol)
-  4,$g/^\s*----/d
-  4,$g/^\s*\a/d
-  $d
-  if namecol > 0
-   exe 'silent 4,$s/^.*\%'.namecol.'c//'
-  endif
 
   setlocal noma nomod ro
   noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
@@ -200,16 +200,28 @@
   else
    let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
    let fname   = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
-   let fname = substitute(fname, '[', '[[]', 'g')
+   let fname   = substitute(fname, '[', '[[]', 'g')
   endif
 "  call Decho("zipfile<".zipfile.">")
 "  call Decho("fname  <".fname.">")
 
-"  call Decho("exe r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1))
-  exe "silent r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1)
+  " the following code does much the same thing as
+  "   exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1)
+  " but allows zipfile:... entries in quickfix lists
+  let temp = tempname()
+"  call Decho("using temp file<".temp.">")
+  let fn   = expand('%:p')
+  exe "sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1).' > '.temp
+"  call Decho("exe sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1).' > '.temp)
+  sil exe 'keepalt file '.temp
+  sil keepj e!
+  sil exe 'keepalt file '.fnameescape(fn)
+  call delete(temp)
+
+  filetype detect
 
   " cleanup
-  0d
+  "  keepj 0d   " used to be needed for the ...r! ... method
   set nomod
 
   let &report= repkeep
@@ -278,7 +290,7 @@
 
   if fname =~ '/'
    let dirpath = substitute(fname,'/[^/]\+$','','e')
-   if executable("cygpath")
+   if has("win32unix") && executable("cygpath")
     let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e')
    endif
 "   call Decho("mkdir(dirpath<".dirpath.">,p)")
@@ -290,7 +302,7 @@
 "  call Decho("zipfile<".zipfile."> fname<".fname.">")
 
   exe "w! ".fnameescape(fname)
-  if executable("cygpath")
+  if has("win32unix") && executable("cygpath")
    let zipfile = substitute(system("cygpath ".s:Escape(zipfile,0)),'\n','','e')
   endif
 
diff -Naur vim73.orig/runtime/colors/koehler.vim vim73/runtime/colors/koehler.vim
--- vim73.orig/runtime/colors/koehler.vim	2010-05-15 11:03:31.000000000 +0000
+++ vim73/runtime/colors/koehler.vim	2013-08-04 19:09:07.697285954 +0000
@@ -2,7 +2,7 @@
 " vim: tw=0 ts=4 sw=4
 " Vim color file
 " Maintainer:	Ron Aaron <ron@ronware.org>
-" Last Change:	2006 Dec 10
+" Last Change:	2013 May 23
 
 hi clear
 set background=dark
@@ -43,6 +43,8 @@
 hi TabLine		  term=bold,reverse  cterm=bold ctermfg=lightblue ctermbg=white gui=bold guifg=blue guibg=white
 hi TabLineFill	  term=bold,reverse  cterm=bold ctermfg=lightblue ctermbg=white gui=bold guifg=blue guibg=white
 hi TabLineSel	  term=reverse	ctermfg=white ctermbg=lightblue guifg=white guibg=blue
+hi Underlined	  term=underline cterm=bold,underline ctermfg=lightblue guifg=lightblue gui=bold,underline
+hi Ignore		  ctermfg=black ctermbg=black guifg=black guibg=black
 hi link IncSearch		Visual
 hi link String			Constant
 hi link Character		Constant
diff -Naur vim73.orig/runtime/colors/ron.vim vim73/runtime/colors/ron.vim
--- vim73.orig/runtime/colors/ron.vim	2010-05-15 11:03:31.000000000 +0000
+++ vim73/runtime/colors/ron.vim	2013-08-04 19:09:07.700619277 +0000
@@ -2,7 +2,7 @@
 " vim: tw=0 ts=4 sw=4
 " Vim color file
 " Maintainer:	Ron Aaron <ron@ronware.org>
-" Last Change:	2003 May 02
+" Last Change:	2013 May 24
 
 set background=dark
 hi clear
@@ -11,7 +11,7 @@
 endif
 let g:colors_name = "ron"
 hi Normal		guifg=cyan	guibg=black
-hi NonText		guifg=brown
+hi NonText		guifg=yellow guibg=#303030
 hi comment		guifg=green
 hi constant		guifg=cyan	gui=bold
 hi identifier	guifg=cyan	gui=NONE
@@ -24,10 +24,11 @@
 hi Error		guibg=Red
 hi Todo			guifg=Black	guibg=orange
 hi Cursor		guibg=#60a060 guifg=#00ff00
-hi Search		guibg=lightslateblue
+hi Search		guibg=darkgray guifg=black gui=bold 
 hi IncSearch	gui=NONE guibg=steelblue
 hi LineNr		guifg=darkgrey
 hi title		guifg=darkgrey
+hi ShowMarksHL ctermfg=cyan ctermbg=lightblue cterm=bold guifg=yellow guibg=black  gui=bold
 hi StatusLineNC	gui=NONE guifg=lightblue guibg=darkblue
 hi StatusLine	gui=bold	guifg=cyan	guibg=blue
 hi label		guifg=gold2
@@ -41,3 +42,4 @@
 hi Folded		guibg=gray30
 hi FoldColumn	guibg=gray30 guifg=white
 hi cIf0			guifg=gray
+hi diffOnly	guifg=red gui=bold
diff -Naur vim73.orig/runtime/compiler/cs.vim vim73/runtime/compiler/cs.vim
--- vim73.orig/runtime/compiler/cs.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/cs.vim	2013-08-04 19:09:07.710619247 +0000
@@ -1,19 +1,26 @@
 " Vim compiler file
-" Compiler:	ms C#
-" Maintainer:	Joseph H. Yao (hyao@sina.com)
-" Last Change:	2004 Mar 27
+" Compiler:	Microsoft Visual Studio C#
+" Maintainer:	Zhou YiChao (broken.zhou@gmail.com)
+" Previous Maintainer:	Joseph H. Yao (hyao@sina.com)
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "cs"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
 endif
 
-" default errorformat
 CompilerSet errorformat&
+CompilerSet errorformat+=%f(%l\\,%v):\ %t%*[^:]:\ %m,
+            \%trror%*[^:]:\ %m,
+            \%tarning%*[^:]:\ %m
 
-" default make
 CompilerSet makeprg=csc\ %
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/decada.vim vim73/runtime/compiler/decada.vim
--- vim73.orig/runtime/compiler/decada.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/decada.vim	2013-08-04 19:09:07.713952570 +0000
@@ -15,11 +15,11 @@
 "    Help Page: compiler-decada
 "------------------------------------------------------------------------------
 
-if (exists("current_compiler")	    &&
-   \ current_compiler == "decada")  ||
-   \ version < 700
+if (exists("current_compiler") && current_compiler == "decada") || version < 700
    finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let current_compiler = "decada"
 
@@ -44,6 +44,9 @@
 execute "CompilerSet makeprg="     . escape (g:decada.Make_Command, ' ')
 execute "CompilerSet errorformat=" . escape (g:decada.Error_Format, ' ')
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff -Naur vim73.orig/runtime/compiler/erlang.vim vim73/runtime/compiler/erlang.vim
--- vim73.orig/runtime/compiler/erlang.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/erlang.vim	2013-08-04 19:09:07.717285894 +0000
@@ -0,0 +1,13 @@
+" Vim compiler file
+" Compiler:     Erlang
+" Maintainer:	Dmitry Vasiliev <dima at hlabs dot org>
+" Last Change:	2012-02-13
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "erlang"
+
+CompilerSet makeprg=erlc\ -Wall\ %
+
+CompilerSet errorformat=%f:%l:\ %m
diff -Naur vim73.orig/runtime/compiler/eruby.vim vim73/runtime/compiler/eruby.vim
--- vim73.orig/runtime/compiler/eruby.vim	2010-05-27 20:14:24.000000000 +0000
+++ vim73/runtime/compiler/eruby.vim	2013-08-04 19:09:07.717285894 +0000
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:		eRuby
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Last Change:		2008 Aug 1
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
diff -Naur vim73.orig/runtime/compiler/g95.vim vim73/runtime/compiler/g95.vim
--- vim73.orig/runtime/compiler/g95.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/g95.vim	2013-08-04 19:09:07.723952540 +0000
@@ -0,0 +1,28 @@
+" Compiler: G95
+" Maintainer: H Xu <xuhdev@gmail.com>
+" Version: 0.1.3
+" Last Change: 2012 Apr 30
+" Homepage: http://www.vim.org/scripts/script.php?script_id=3492
+"           https://bitbucket.org/xuhdev/compiler-g95.vim
+" License: Same as Vim
+
+if exists('current_compiler')
+    finish
+endif
+let current_compiler = 'g95'
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=
+            \%AIn\ file\ %f:%l,
+            \%-C%p1,
+            \%-Z%trror:\ %m,
+            \%-Z%tarning\ (%n):\ %m,
+            \%-C%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/gcc.vim vim73/runtime/compiler/gcc.vim
--- vim73.orig/runtime/compiler/gcc.vim	2010-05-30 15:24:23.000000000 +0000
+++ vim73/runtime/compiler/gcc.vim	2013-08-04 19:09:07.727285863 +0000
@@ -1,7 +1,7 @@
 " Vim compiler file
 " Compiler:         GNU C Compiler
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2010-05-30
+" Latest Revision:  2010-10-14
 
 if exists("current_compiler")
   finish
@@ -9,7 +9,7 @@
 let current_compiler = "gcc"
 
 let s:cpo_save = &cpo
-set cpo-=C
+set cpo&vim
 
 CompilerSet errorformat=
       \%*[^\"]\"%f\"%*\\D%l:%c:\ %m,
@@ -18,10 +18,10 @@
       \\"%f\"%*\\D%l:\ %m,
       \%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
       \%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
-      \%f:%l:%c:\ %terror:\ %m,
+      \%f:%l:%c:\ %trror:\ %m,
       \%f:%l:%c:\ %tarning:\ %m,
       \%f:%l:%c:\ %m,
-      \%f:%l:\ %terror:\ %m,
+      \%f:%l:\ %trror:\ %m,
       \%f:%l:\ %tarning:\ %m,
       \%f:%l:\ %m,
       \\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
diff -Naur vim73.orig/runtime/compiler/gfortran.vim vim73/runtime/compiler/gfortran.vim
--- vim73.orig/runtime/compiler/gfortran.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/gfortran.vim	2013-08-04 19:09:07.727285863 +0000
@@ -0,0 +1,27 @@
+" Compiler: GNU Fortran Compiler
+" Maintainer: H Xu <xuhdev@gmail.com>
+" Version: 0.1.3
+" Last Change: 2012 Apr 30
+" Homepage: http://www.vim.org/scripts/script.php?script_id=3496
+"           https://bitbucket.org/xuhdev/compiler-gfortran.vim
+" License: Same as Vim
+
+if exists('current_compiler')
+    finish
+endif
+let current_compiler = 'gfortran'
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=
+            \%A%f:%l.%c:,
+            \%-Z%trror:\ %m,
+            \%-Z%tarning:\ %m,
+            \%-C%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/gnat.vim vim73/runtime/compiler/gnat.vim
--- vim73.orig/runtime/compiler/gnat.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/gnat.vim	2013-08-04 19:09:07.727285863 +0000
@@ -17,11 +17,11 @@
 "    Help Page: compiler-gnat
 "------------------------------------------------------------------------------
 
-if (exists("current_compiler")	    &&
-   \ current_compiler == "gnat")    ||
-   \ version < 700
+if (exists("current_compiler")&& current_compiler == "gnat") || version < 700
    finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let current_compiler = "gnat"
 
@@ -62,6 +62,9 @@
 execute "CompilerSet makeprg="     . escape (g:gnat.Get_Command('Make'), ' ')
 execute "CompilerSet errorformat=" . escape (g:gnat.Error_Format, ' ')
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff -Naur vim73.orig/runtime/compiler/haml.vim vim73/runtime/compiler/haml.vim
--- vim73.orig/runtime/compiler/haml.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/haml.vim	2013-08-04 19:09:07.727285863 +0000
@@ -0,0 +1,28 @@
+" Vim compiler file
+" Compiler:	Haml
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2013 May 30
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "haml"
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=haml\ -c
+
+CompilerSet errorformat=
+      \Haml\ %trror\ on\ line\ %l:\ %m,
+      \Syntax\ %trror\ on\ line\ %l:\ %m,
+      \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:set sw=2 sts=2:
diff -Naur vim73.orig/runtime/compiler/hp_acc.vim vim73/runtime/compiler/hp_acc.vim
--- vim73.orig/runtime/compiler/hp_acc.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/hp_acc.vim	2013-08-04 19:09:07.730619187 +0000
@@ -2,7 +2,7 @@
 " Compiler:	HP aCC
 " Maintainer:	Matthias Ulrich <matthias-ulrich@web.de>
 " URL:          http://www.subhome.de/vim/hp_acc.vim
-" Last Change:	2005 Nov 19
+" Last Change:	2012 Apr 30
 "
 "  aCC --version says: "HP ANSI C++ B3910B A.03.13"
 "  This compiler has been tested on:
@@ -19,6 +19,8 @@
   finish
 endif
 let current_compiler = "hp_acc"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -30,4 +32,7 @@
          \%Z\ \ \ \ %p^%.%#,
          \%-C%.%#
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:ts=8:sw=4:cindent
diff -Naur vim73.orig/runtime/compiler/ifort.vim vim73/runtime/compiler/ifort.vim
--- vim73.orig/runtime/compiler/ifort.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/ifort.vim	2013-08-04 19:09:07.730619187 +0000
@@ -0,0 +1,27 @@
+" Compiler: Intel Fortran Compiler
+" Maintainer: H Xu <xuhdev@gmail.com>
+" Version: 0.1.1
+" Last Change: 2012 Apr 30
+" Homepage: http://www.vim.org/scripts/script.php?script_id=3497
+"           https://bitbucket.org/xuhdev/compiler-ifort.vim
+" License: Same as Vim
+
+if exists('current_compiler')
+    finish
+endif
+let current_compiler = 'ifort'
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=
+            \%A%f(%l):\ %trror\ \#%n:\ %m,
+            \%A%f(%l):\ %tarning\ \#%n:\ %m,
+            \%-Z%p^,
+            \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/intel.vim vim73/runtime/compiler/intel.vim
--- vim73.orig/runtime/compiler/intel.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/intel.vim	2013-08-04 19:09:07.733952510 +0000
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:     Intel C++ 7.1
 " Maintainer:   David Harrison <david_jr@users.sourceforge.net>
-" Last Change:  2004 May 16
+" Last Change:  2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "intel"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@
 		    \%-Z\ \ %p^,
 		    \%-G\\s%#,
 		    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/irix5_c.vim vim73/runtime/compiler/irix5_c.vim
--- vim73.orig/runtime/compiler/irix5_c.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/irix5_c.vim	2013-08-04 19:09:07.733952510 +0000
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 5.3 cc
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "irix5_c"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@
 		     \%-Z\ %p^,
 		     \-G\\s%#,
 		     \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/irix5_cpp.vim vim73/runtime/compiler/irix5_cpp.vim
--- vim73.orig/runtime/compiler/irix5_cpp.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/irix5_cpp.vim	2013-08-04 19:09:07.733952510 +0000
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 5.3 CC or NCC
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "irix5_cpp"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@
 		      \%-Z\ \ %p%^,
 		      \%+C\ %\\{10}%.%#,
 		      \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/mcs.vim vim73/runtime/compiler/mcs.vim
--- vim73.orig/runtime/compiler/mcs.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/mcs.vim	2013-08-04 19:09:07.737285833 +0000
@@ -1,7 +1,8 @@
 " Vim compiler file
 " Compiler:    Mono C# Compiler
 " Maintainer:  Jarek Sobiecki <harijari@go2.pl>
-" Latest Revision: 2006-06-18
+" Last Updated By: Peter Collingbourne
+" Latest Revision: 2012 Jul 19
 
 if exists("current_compiler")
   finish
@@ -12,13 +13,18 @@
 set cpo-=C
 
 setlocal errorformat=
+         \%D%.%#Project\ \"%f/%[%^/\"]%#\"%.%#,
+         \%X%.%#Done\ building\ project\ \"%f/%[%^/\"]%#\"%.%#,
+         \%-G%\\s%.%#,
+         \%E%f(%l):\ error\ CS%n:%m,
+         \%W%f(%l):\ warning\ CS%n:%m,
          \%E%f(%l\\,%c):\ error\ CS%n:%m,
          \%W%f(%l\\,%c):\ warning\ CS%n:%m,
          \%E%>syntax\ error\\,%m,%Z%f(%l\\,%c):\ error\ CS%n:%m,
          \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
          \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
          \%DMaking\ %*\\a\ in\ %f,
-         \%G-%.%#
+         \%-G%.%#
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff -Naur vim73.orig/runtime/compiler/mips_c.vim vim73/runtime/compiler/mips_c.vim
--- vim73.orig/runtime/compiler/mips_c.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/mips_c.vim	2013-08-04 19:09:07.740619157 +0000
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 6.5 MIPS C (cc)
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mips_c"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@
 		    \%-Z\ \ %p^,
 		    \%-G\\s%#,
 		    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/mipspro_c89.vim vim73/runtime/compiler/mipspro_c89.vim
--- vim73.orig/runtime/compiler/mipspro_c89.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/mipspro_c89.vim	2013-08-04 19:09:07.740619157 +0000
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 6.5 MIPSPro C (c89)
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mipspro_c89"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -20,3 +22,6 @@
 		    \%+C\ \ %m,
 		    \%-G\\s%#,
 		    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/mipspro_cpp.vim vim73/runtime/compiler/mipspro_cpp.vim
--- vim73.orig/runtime/compiler/mipspro_cpp.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/mipspro_cpp.vim	2013-08-04 19:09:07.740619157 +0000
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 6.5 MIPSPro C++ (CC)
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mipspro_cpp"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@
 		    \%-Z\ \ %p^,
 		    \%-G\\s%#,
 		    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/msbuild.vim vim73/runtime/compiler/msbuild.vim
--- vim73.orig/runtime/compiler/msbuild.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/msbuild.vim	2013-08-04 19:09:07.743952480 +0000
@@ -0,0 +1,21 @@
+" Vim compiler file
+" Compiler:	Microsoft Visual Studio C#
+" Maintainer:	Chiel ten Brinke (ctje92@gmail.com)
+" Last Change:	2013 May 13
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "msbuild"
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=\ %#%f(%l\\\,%c):\ %m
+CompilerSet makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/ocaml.vim vim73/runtime/compiler/ocaml.vim
--- vim73.orig/runtime/compiler/ocaml.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/ocaml.vim	2013-08-04 19:09:07.747285803 +0000
@@ -0,0 +1,44 @@
+" Vim Compiler File
+" Compiler:	ocaml
+" Maintainer:	See ftplugin/ocaml.vim (?)
+" Last Change:	June 2013 by Marc Weber
+"
+" Marc Weber's comments:
+" Setting makeprg doesn't make sense, because there is ocamlc, ocamlopt,
+" ocamake and whatnot. So which one to use?
+"
+" This error format was moved from ftplugin/ocaml.vim to this file,
+" because ftplugin is the wrong file to set an error format
+" and the error format itself is annoying because it joins many lines in this
+" error case:
+"
+"    Error: The implementation foo.ml does not match the interface foo.cmi:
+"    Modules do not match case.
+"
+" So having it here makes people opt-in
+
+
+if exists("current_compiler")
+    finish
+endif
+let current_compiler = "ocaml"
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+CompilerSet errorformat =
+      \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
+      \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
+      \%+EReference\ to\ unbound\ regexp\ name\ %m,
+      \%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
+      \%Wocamlyacc:\ w\ -\ %m,
+      \%-Zmake%.%#,
+      \%C%m,
+      \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
+      \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
+      \%D%*\\a:\ Entering\ directory\ `%f',
+      \%X%*\\a:\ Leaving\ directory\ `%f',
+      \%DMaking\ %*\\a\ in\ %f
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/compiler/rake.vim vim73/runtime/compiler/rake.vim
--- vim73.orig/runtime/compiler/rake.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/rake.vim	2013-08-04 19:09:07.750619127 +0000
@@ -0,0 +1,35 @@
+" Vim compiler file
+" Language:		Rake
+" Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+" URL:			https://github.com/vim-ruby/vim-ruby
+" Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "rake"
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=rake
+
+CompilerSet errorformat=
+      \%D(in\ %f),
+      \%\\s%#from\ %f:%l:%m,
+      \%\\s%#from\ %f:%l:,
+      \%\\s%##\ %f:%l:%m,
+      \%\\s%##\ %f:%l,
+      \%\\s%#[%f:%l:\ %#%m,
+      \%\\s%#%f:%l:\ %#%m,
+      \%\\s%#%f:%l:,
+      \%m\ [%f:%l]:
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: nowrap sw=2 sts=2 ts=8:
diff -Naur vim73.orig/runtime/compiler/rspec.vim vim73/runtime/compiler/rspec.vim
--- vim73.orig/runtime/compiler/rspec.vim	2010-05-27 20:15:02.000000000 +0000
+++ vim73/runtime/compiler/rspec.vim	2013-08-04 19:09:07.753952450 +0000
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:		RSpec
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2009 Dec 22
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
@@ -18,21 +16,15 @@
 let s:cpo_save = &cpo
 set cpo-=C
 
-CompilerSet makeprg=spec
+CompilerSet makeprg=rspec
 
 CompilerSet errorformat=
-    \%+W'%.%#'\ FAILED,
-    \%+I'%.%#'\ FIXED,
-    \%-Cexpected:%.%#,
-    \%-C\ \ \ \ \ got:%.%#,
+    \%f:%l:\ %tarning:\ %m,
     \%E%.%#:in\ `load':\ %f:%l:%m,
-    \%C%f:%l:,
-    \%W%f:%l:\ warning:\ %m,
-    \%E%f:%l:in\ %*[^:]:\ %m,
-    \%E%f:%l:\ %m,
-    \%-Z%\tfrom\ %f:%l,
-    \%-Z%p^%.%#,
-    \%-C%.%#,
+    \%E%f:%l:in\ `%*[^']':\ %m,
+    \%-Z\ \ \ \ \ \#\ %f:%l:%.%#,
+    \%E\ \ %\\d%\\+)%.%#,
+    \%C\ \ \ \ \ %m,
     \%-G%.%#
 
 let &cpo = s:cpo_save
diff -Naur vim73.orig/runtime/compiler/rst.vim vim73/runtime/compiler/rst.vim
--- vim73.orig/runtime/compiler/rst.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/rst.vim	2013-08-04 19:09:07.753952450 +0000
@@ -9,7 +9,7 @@
 let current_compiler = "rst"
 
 let s:cpo_save = &cpo
-set cpo-=C
+set cpo&vim
 
 setlocal errorformat=
       \%f:%l:\ (%tEBUG/0)\ %m,
diff -Naur vim73.orig/runtime/compiler/ruby.vim vim73/runtime/compiler/ruby.vim
--- vim73.orig/runtime/compiler/ruby.vim	2010-05-27 20:15:39.000000000 +0000
+++ vim73/runtime/compiler/ruby.vim	2013-08-04 19:09:07.753952450 +0000
@@ -1,33 +1,10 @@
 " Vim compiler file
 " Language:		Ruby
 " Function:		Syntax check and/or error reporting
-" Maintainer:		Tim Hammerquist <timh at rubyforge.org>
-" Last Change:		2008 Aug 1
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
-"
-" Changelog:
-" 0.2:	script saves and restores 'cpoptions' value to prevent problems with
-"	line continuations
-" 0.1:	initial release
-"
-" Contributors:
-"   Hugh Sasse <hgs@dmu.ac.uk>
-"   Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-"
-" Todo:
-"   match error type %m
-"
-" Comments:
-"   I know this file isn't perfect.  If you have any questions, suggestions,
-"   patches, etc., please don't hesitate to let me know.
-"
-"   This is my first experience with 'errorformat' and compiler plugins and
-"   I welcome any input from more experienced (or clearer-thinking)
-"   individuals.
-" ----------------------------------------------------------------------------
 
 if exists("current_compiler")
   finish
diff -Naur vim73.orig/runtime/compiler/rubyunit.vim vim73/runtime/compiler/rubyunit.vim
--- vim73.orig/runtime/compiler/rubyunit.vim	2010-05-27 20:15:23.000000000 +0000
+++ vim73/runtime/compiler/rubyunit.vim	2013-08-04 19:09:07.757285773 +0000
@@ -1,9 +1,7 @@
 " Vim compiler file
 " Language:		Test::Unit - Ruby Unit Testing Framework
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Last Change:		2008 Aug 1
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("current_compiler")
diff -Naur vim73.orig/runtime/compiler/sass.vim vim73/runtime/compiler/sass.vim
--- vim73.orig/runtime/compiler/sass.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/sass.vim	2013-08-04 19:09:07.757285773 +0000
@@ -0,0 +1,30 @@
+" Vim compiler file
+" Compiler:	Sass
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2013 May 30
+
+if exists("current_compiler")
+  finish
+endif
+let current_compiler = "sass"
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+let s:cpo_save = &cpo
+set cpo-=C
+
+CompilerSet makeprg=sass\ -c
+
+CompilerSet errorformat=
+      \%f:%l:%m\ (Sass::Syntax%trror),
+      \%ESyntax\ %trror:%m,
+      \%C%\\s%\\+on\ line\ %l\ of\ %f,
+      \%Z%.%#,
+      \%-G%.%#
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:set sw=2 sts=2:
diff -Naur vim73.orig/runtime/compiler/tex.vim vim73/runtime/compiler/tex.vim
--- vim73.orig/runtime/compiler/tex.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/tex.vim	2013-08-04 19:09:07.760619097 +0000
@@ -1,11 +1,13 @@
 " Vim compiler file
 " Compiler:     TeX
 " Maintainer:   Artem Chuprina <ran@ran.pp.ru>
-" Last Change:  2004 Mar 27
+" Last Change:  2012 Apr 30
 
 if exists("current_compiler")
 	finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -30,9 +32,6 @@
 	let current_compiler = 'make'
 endif
 
-let s:cpo_save = &cpo
-set cpo-=C
-
 " Value errorformat are taken from vim help, see :help errorformat-LaTeX, with
 " addition from Srinath Avadhanula <srinath@fastmail.fm>
 CompilerSet errorformat=%E!\ LaTeX\ %trror:\ %m,
@@ -64,5 +63,5 @@
 	\%+Q%*[^()])%r,
 	\%+Q[%\\d%*[^()])%r
 
-let &cpo = s:cpo_save
-unlet s:cpo_save
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/xbuild.vim vim73/runtime/compiler/xbuild.vim
--- vim73.orig/runtime/compiler/xbuild.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/compiler/xbuild.vim	2013-08-04 19:09:07.763952420 +0000
@@ -0,0 +1,22 @@
+" Vim compiler file
+" Compiler:	Mono C#
+" Maintainer:	Chiel ten Brinke (ctje92@gmail.com)
+" Last Change:	2013 May 13
+
+if exists("current_compiler")
+  finish
+endif
+
+let current_compiler = "xbuild"
+let s:keepcpo= &cpo
+set cpo&vim
+
+if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+  command -nargs=* CompilerSet setlocal <args>
+endif
+
+CompilerSet errorformat=\ %#%f(%l\\\,%c):\ %m
+CompilerSet makeprg=xbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/compiler/xmllint.vim vim73/runtime/compiler/xmllint.vim
--- vim73.orig/runtime/compiler/xmllint.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/compiler/xmllint.vim	2013-08-04 19:09:07.763952420 +0000
@@ -1,8 +1,7 @@
 " Vim compiler file
 " Compiler:	xmllint
-" Maintainer:	Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:		http://gus.gscit.monash.edu.au/~djkea2/vim/compiler/xmllint.vim
-" Last Change:	2004 Nov 27
+" Maintainer:	Doug Kearns <dougkearns@gmail.com>
+" Last Change:	2013 Jun 1
 
 if exists("current_compiler")
   finish
@@ -18,10 +17,8 @@
 
 CompilerSet makeprg=xmllint\ --valid\ --noout\ 
 
-CompilerSet errorformat=%E%f:%l:\ error:\ %m,
-		    \%W%f:%l:\ warning:\ %m,
-		    \%E%f:%l:\ validity\ error:\ %m,
-		    \%W%f:%l:\ validity\ warning:\ %m,
+CompilerSet errorformat=%+E%f:%l:\ %.%#\ error\ :\ %m,
+		    \%+W%f:%l:\ %.%#\ warning\ :\ %m,
 		    \%-Z%p^,
 		    \%-G%.%#
 
diff -Naur vim73.orig/runtime/doc/arabic.txt vim73/runtime/doc/arabic.txt
--- vim73.orig/runtime/doc/arabic.txt	2010-08-15 12:23:19.000000000 +0000
+++ vim73/runtime/doc/arabic.txt	2013-08-04 19:09:07.770619066 +0000
@@ -1,4 +1,4 @@
-*arabic.txt*	For Vim version 7.3.  Last change: 2005 Mar 29
+*arabic.txt*	For Vim version 7.3.  Last change: 2010 Nov 13
 
 
 		  VIM REFERENCE MANUAL	  by Nadim Shaikli
@@ -146,7 +146,7 @@
 		:set arabic
 <
    The two above noted possible invocations are the preferred manner
-   in which users are instructed to proceed.  Baring an enabled 'termbidi'
+   in which users are instructed to proceed.  Barring an enabled 'termbidi'
    setting, both command options:
 
      1. set the appropriate keymap
diff -Naur vim73.orig/runtime/doc/autocmd.txt vim73/runtime/doc/autocmd.txt
--- vim73.orig/runtime/doc/autocmd.txt	2010-08-15 12:23:19.000000000 +0000
+++ vim73/runtime/doc/autocmd.txt	2013-08-04 19:09:07.773952390 +0000
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.3.  Last change: 2010 Jul 22
+*autocmd.txt*   For Vim version 7.3.  Last change: 2013 Jun 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -33,7 +33,7 @@
 features, such as editing compressed files (see |gzip-example|).  The usual
 place to put autocommands is in your .vimrc or .exrc file.
 
-							*E203* *E204* *E143*
+						*E203* *E204* *E143* *E855*
 WARNING: Using autocommands is very powerful, and may lead to unexpected side
 effects.  Be careful not to destroy your text.
 - It's a good idea to do some testing on an expendable copy of a file first.
@@ -263,8 +263,10 @@
 	Startup and exit
 |VimEnter|		after doing all the startup stuff
 |GUIEnter|		after starting the GUI successfully
+|GUIFailed|		after starting the GUI failed
 |TermResponse|		after the terminal response to |t_RV| is received
 
+|QuitPre|		when using `:quit`, before deciding whether to quit
 |VimLeavePre|		before exiting Vim, before writing the viminfo file
 |VimLeave|		before exiting Vim, after writing the viminfo file
 
@@ -299,6 +301,8 @@
 |InsertEnter|		starting Insert mode
 |InsertChange|		when typing <Insert> while in Insert or Replace mode
 |InsertLeave|		when leaving Insert mode
+|InsertCharPre|		when a character was typed in Insert mode, before
+			inserting it
 
 |ColorScheme|		after loading a color scheme
 
@@ -310,6 +314,7 @@
 |SessionLoadPost|	after loading a session file
 
 |MenuPopup|		just before showing the popup menu
+|CompleteDone|		after Insert mode completion is done
 
 |User|			to be used in combination with ":doautocmd"
 
@@ -383,6 +388,10 @@
 				This does NOT work for ":r file".  Not used
 				when the file doesn't exist.  Also used after
 				successfully recovering a file.
+				Also triggered for the filetypedetect group
+				when executing ":filetype detect" and when
+				writing an unnamed buffer in a way that the
+				buffer gets a name.
 							*BufReadCmd*
 BufReadCmd			Before starting to edit a new buffer.  Should
 				read the file into the buffer. |Cmd-event|
@@ -446,6 +455,9 @@
 				'modified' if successful, unless '+' is in
 				'cpo' and writing to another file |cpo-+|.
 				The buffer contents should not be changed.
+				When the command resets 'modified' the undo
+				information is adjusted to mark older undo
+				states as 'modified', like |:write| does.
 				|Cmd-event|
 							*BufWritePost*
 BufWritePost			After writing the whole buffer to a file
@@ -469,6 +481,11 @@
 							*ColorScheme*
 ColorScheme			After loading a color scheme. |:colorscheme|
 
+							*CompleteDone*
+CompleteDone			After Insert mode completion is done.  Either
+				when something was completed or abandoning
+				completion. |ins-completion|
+
 							*CursorHold*
 CursorHold			When the user doesn't press a key for the time
 				specified with 'updatetime'.  Not re-triggered
@@ -496,16 +513,18 @@
 CursorHoldI			Just like CursorHold, but in Insert mode.
 
 							*CursorMoved*
-CursorMoved			After the cursor was moved in Normal mode.
-				Also when the text of the cursor line has been
-				changed, e.g., with "x", "rx" or "p".
+CursorMoved			After the cursor was moved in Normal or Visual
+				mode.  Also when the text of the cursor line
+				has been changed, e.g., with "x", "rx" or "p".
 				Not triggered when there is typeahead or when
 				an operator is pending.
 				For an example see |match-parens|.
-				Careful: Don't do anything that the user does
-				not expect or that is slow.
+				Careful: This is triggered very often, don't
+				do anything that the user does not expect or
+				that is slow.
 							*CursorMovedI*
 CursorMovedI			After the cursor was moved in Insert mode.
+				Not triggered when the popup menu is visible.
 				Otherwise the same as CursorMoved.
 							*EncodingChanged*
 EncodingChanged			Fires off after the 'encoding' option has been
@@ -657,12 +676,26 @@
 				indicates the new mode.
 				Be careful not to move the cursor or do
 				anything else that the user does not expect.
+							*InsertCharPre*
+InsertCharPre			When a character is typed in Insert mode,
+				before inserting the char.
+				The |v:char| variable indicates the char typed
+				and can be changed during the event to insert
+				a different character.  When |v:char| is set
+				to more than one character this text is
+				inserted literally.
+				It is not allowed to change the text |textlock|.
+				The event is not triggered when 'paste' is
+				set.
 							*InsertEnter*
 InsertEnter			Just before starting Insert mode.  Also for
 				Replace mode and Virtual Replace mode.  The
 				|v:insertmode| variable indicates the mode.
-				Be careful not to move the cursor or do
-				anything else that the user does not expect.
+				Be careful not to do anything else that the
+				user does not expect.
+				The cursor is restored afterwards.  If you do
+				not want that set |v:char| to a non-empty
+				string.
 							*InsertLeave*
 InsertLeave			When leaving Insert mode.  Also when using
 				CTRL-O |i_CTRL-O|.  But not for |i_CTRL-C|.
@@ -682,7 +715,10 @@
 QuickFixCmdPre			Before a quickfix command is run (|:make|,
 				|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
 				|:lgrepadd|, |:vimgrep|, |:lvimgrep|,
-				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
+				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
+				|:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
+				|:lgetfile|, |:laddfile|, |:helpgrep|,
+				|:lhelpgrep|).
 				The pattern is matched against the command
 				being run.  When |:grep| is used but 'grepprg'
 				is set to "internal" it still matches "grep".
@@ -693,7 +729,16 @@
 							*QuickFixCmdPost*
 QuickFixCmdPost			Like QuickFixCmdPre, but after a quickfix
 				command is run, before jumping to the first
-				location.  See |QuickFixCmdPost-example|.
+				location. For |:cfile| and |:lfile| commands
+				it is run after error file is read and before
+				moving to the first error. 
+				See |QuickFixCmdPost-example|.
+							*QuitPre*
+QuitPre				When using `:quit`, `:wq` or `:qall`, before
+				deciding whether it closes the current window
+				or quits Vim.  Can be used to close any
+				non-essential window if the current window is
+				the last ordinary window.
 							*RemoteReply*
 RemoteReply			When a reply from a Vim that functions as
 				server was received |server2client()|.  The
@@ -786,13 +831,31 @@
 TermResponse			After the response to |t_RV| is received from
 				the terminal.  The value of |v:termresponse|
 				can be used to do things depending on the
-				terminal version.
+				terminal version.  Note that this event may be
+				triggered halfway executing another event,
+				especially if file I/O, a shell command or
+				anything else that takes time is involved.
+							*TextChanged*
+TextChanged			After a change was made to the text in the
+				current buffer in Normal mode.  That is when
+				|b:changedtick| has changed.
+				Not triggered when there is typeahead or when
+				an operator is pending.
+				Careful: This is triggered very often, don't
+				do anything that the user does not expect or
+				that is slow.
+							*TextChangedI*
+TextChangedI			After a change was made to the text in the
+				current buffer in Insert mode.
+				Not triggered when the popup menu is visible.
+				Otherwise the same as TextChanged.
 							*User*
 User				Never executed automatically.  To be used for
 				autocommands that are only executed with
 				":doautocmd".
 							*UserGettingBored*
-UserGettingBored		When the user hits CTRL-C.  Just kidding! :-)
+UserGettingBored		When the user presses the same key 42 times.
+				Just kidding! :-)
 							*VimEnter*
 VimEnter			After doing all the startup stuff, including
 				loading .vimrc files, executing the "-c cmd"
@@ -1032,7 +1095,7 @@
 option will not cause any commands to be executed.
 
 					*:do* *:doau* *:doautocmd* *E217*
-:do[autocmd] [group] {event} [fname]
+:do[autocmd] [<nomodeline>] [group] {event} [fname]
 			Apply the autocommands matching [fname] (default:
 			current file name) for {event} to the current buffer.
 			You can use this when the current file name does not
@@ -1041,8 +1104,8 @@
 			It's possible to use this inside an autocommand too,
 			so you can base the autocommands for one extension on
 			another extension.  Example: >
-				:au Bufenter *.cpp so ~/.vimrc_cpp
-				:au Bufenter *.cpp doau BufEnter x.c
+				:au BufEnter *.cpp so ~/.vimrc_cpp
+				:au BufEnter *.cpp doau BufEnter x.c
 <			Be careful to avoid endless loops.  See
 			|autocmd-nested|.
 
@@ -1051,14 +1114,17 @@
 			argument is included, Vim executes only the matching
 			autocommands for that group.  Note: if you use an
 			undefined group name, Vim gives you an error message.
-
+							*<nomodeline>*
 			After applying the autocommands the modelines are
 			processed, so that their settings overrule the
 			settings from autocommands, like what happens when
-			editing a file.
+			editing a file. This is skipped when the <nomodeline>
+			argument is present. You probably want to use
+			<nomodeline> for events that are not used when loading
+			a buffer, such as |User|.
 
 						*:doautoa* *:doautoall*
-:doautoa[ll] [group] {event} [fname]
+:doautoa[ll] [<nomodeline>] [group] {event} [fname]
 			Like ":doautocmd", but apply the autocommands to each
 			loaded buffer.  Note that [fname] is used to select
 			the autocommands, not the buffers to which they are
diff -Naur vim73.orig/runtime/doc/change.txt vim73/runtime/doc/change.txt
--- vim73.orig/runtime/doc/change.txt	2010-08-15 12:23:19.000000000 +0000
+++ vim73/runtime/doc/change.txt	2013-08-04 19:09:07.780619036 +0000
@@ -1,4 +1,4 @@
-*change.txt*    For Vim version 7.3.  Last change: 2010 Jul 29
+*change.txt*    For Vim version 7.3.  Last change: 2013 Mar 19
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -71,7 +71,7 @@
 			"D" deletes the highlighted text plus all text until
 			the end of the line.  {not in Vi}
 
-						*:d* *:de* *:del* *:delete*
+					*:d* *:de* *:del* *:delete* *:dl*
 :[range]d[elete] [x]	Delete [range] lines (default: current line) [into
 			register x].
 
@@ -80,15 +80,16 @@
 			(default: current line |cmdline-ranges|) [into
 			register x].
 
-These commands delete text.  You can repeat them with the "." command
-(except ":d") and undo them.  Use Visual mode to delete blocks of text.  See
+These commands delete text.  You can repeat them with the `.` command
+(except `:d`) and undo them.  Use Visual mode to delete blocks of text.  See
 |registers| for an explanation of registers.
 
 An exception for the d{motion} command: If the motion is not linewise, the
 start and end of the motion are not in the same line, and there are only
 blanks before the start and after the end of the motion, the delete becomes
 linewise.  This means that the delete also removes the line of blanks that you
-might expect to remain.
+might expect to remain. Use the |o_v| operator to force the motion to be
+characterwise.
 
 Trying to delete an empty region of text (e.g., "d0" in the first column)
 is an error when 'cpoptions' includes the 'E' flag.
@@ -131,7 +132,7 @@
 			See |ex-flags| for [flags].
 
 These commands delete the <EOL> between lines.  This has the effect of joining
-multiple lines into one line.  You can repeat these commands (except ":j") and
+multiple lines into one line.  You can repeat these commands (except `:j`) and
 undo them.
 
 These commands, except "gJ", insert one space in place of the <EOL> unless
@@ -259,6 +260,12 @@
 			<CR>.  CTRL-V <NL> replaces with a <Nul>.
 			{Vi: CTRL-V <CR> still replaces with a line break,
 			cannot replace something with a <CR>}
+
+			If {char} is CTRL-E or CTRL-Y the character from the
+			line below or above is used, just like with |i_CTRL-E|
+			and |i_CTRL-Y|.  This also works with a count, thus
+			`10r<C-E>` copies 10 characters from the line below.
+
 			If you give a [count], Vim replaces [count] characters
 			with [count] {char}s.  When {char} is a <CR> or <NL>,
 			however, Vim inserts only one <CR>: "5r<CR>" replaces
@@ -464,9 +471,9 @@
 made out of spaces with the same indent made out of <Tab>s (and a few spaces
 if necessary).  If the 'expandtab' option is on, Vim uses only spaces.  Then
 you can use ">><<" to replace <Tab>s in the indent by spaces (or use
-":retab!").
+`:retab!`).
 
-To move a line several 'shiftwidth's, use Visual mode or the ":" commands.
+To move a line several 'shiftwidth's, use Visual mode or the `:` commands.
 For example: >
 	Vjj4>		move three lines 4 indents to the right
 	:<<<		move current line 3 indents to the left
@@ -486,7 +493,7 @@
 works like a filter; not all versions do).  The 'shell' option specifies the
 shell Vim uses to execute the filter command (See also the 'shelltype'
 option).  You can repeat filter commands with ".".  Vim does not recognize a
-comment (starting with '"') after the ":!" command.
+comment (starting with '"') after the `:!` command.
 
 							*!*
 !{motion}{filter}	Filter {motion} text lines through the external
@@ -522,11 +529,11 @@
 ={motion}		Filter {motion} lines through the external program
 			given with the 'equalprg' option.  When the 'equalprg'
 			option is empty (this is the default), use the
-			internal formatting function |C-indenting|.  But when
-			'indentexpr' is not empty, it will be used instead
-			|indent-expression|.  When Vim was compiled without
-			internal formatting then the "indent" program is used
-			as a last resort.
+			internal formatting function |C-indenting| and
+			|'lisp'|.  But when 'indentexpr' is not empty, it will
+			be used instead |indent-expression|.  When Vim was
+			compiled without internal formatting then the "indent"
+			program is used as a last resort.
 
 							*==*
 ==			Filter [count] lines like with ={motion}.
@@ -573,34 +580,37 @@
 			Repeat last :substitute with same search pattern and
 			substitute string, but without the same flags.  You
 			may add [flags], see |:s_flags|.
-			Note that after ":substitute" the '&' flag can't be
+			Note that after `:substitute` the '&' flag can't be
 			used, it's recognized as a pattern separator.
-			The space between ":substitute" and the 'c', 'g' and
+			The space between `:substitute` and the 'c', 'g' and
 			'r' flags isn't required, but in scripts it's a good
 			idea to keep it to avoid confusion.
 
 :[range]~[&][flags] [count]					*:~*
 			Repeat last substitute with same substitute string
 			but with last used search pattern.  This is like
-			":&r".  See |:s_flags| for [flags].
+			`:&r`.  See |:s_flags| for [flags].
 
 								*&*
-&			Synonym for ":s" (repeat last substitute).  Note
+&			Synonym for `:s` (repeat last substitute).  Note
 			that the flags are not remembered, thus it might
-			actually work differently.  You can use ":&&" to keep
+			actually work differently.  You can use `:&&` to keep
 			the flags.
 
 								*g&*
-g&			Synonym for ":%s//~/&" (repeat last substitute on all
-			lines with the same flags).
+g&			Synonym for `:%s//~/&` (repeat last substitute with
+			last search pattern on all lines with the same flags).
+			For example, when you first do a substitution with
+			`:s/pattern/repl/flags` and then `/search` for
+			something else, `g&` will do `:%s/search/repl/flags`.
 			Mnemonic: global substitute. {not in Vi}
 
 						*:snomagic* *:sno*
-:[range]sno[magic] ...	Same as ":substitute", but always use 'nomagic'.
+:[range]sno[magic] ...	Same as `:substitute`, but always use 'nomagic'.
 			{not in Vi}
 
 						*:smagic* *:sm*
-:[range]sm[agic] ...	Same as ":substitute", but always use 'magic'.
+:[range]sm[agic] ...	Same as `:substitute`, but always use 'magic'.
 			{not in Vi}
 
 							*:s_flags*
@@ -610,7 +620,7 @@
 	command.  Examples: >
 		:&&
 		:s/this/that/&
-<	Note that ":s" and ":&" don't keep the flags.
+<	Note that `:s` and `:&` don't keep the flags.
 	{not in Vi}
 
 [c]	Confirm each substitution.  Vim highlights the matching string (with
@@ -659,6 +669,8 @@
 [n]	Report the number of matches, do not actually substitute.  The [c]
 	flag is ignored.  The matches are reported as if 'report' is zero.
 	Useful to |count-items|.
+	If \= |sub-replace-expression| is used, the expression will be
+	evaluated in the |sandbox| at every match.
 
 [p]	Print the line containing the last substitute.
 
@@ -666,14 +678,14 @@
 
 [l]	Like [p] but print the text like |:list|.
 
-[r]	Only useful in combination with ":&" or ":s" without arguments.  ":&r"
-	works the same way as ":~":  When the search pattern is empty, use the
+[r]	Only useful in combination with `:&` or `:s` without arguments.  `:&r`
+	works the same way as `:~`:  When the search pattern is empty, use the
 	previously used search pattern instead of the search pattern from the
-	last substitute or ":global".  If the last command that did a search
-	was a substitute or ":global", there is no effect.  If the last
+	last substitute or `:global`.  If the last command that did a search
+	was a substitute or `:global`, there is no effect.  If the last
 	command was a search command such as "/", use the pattern from that
 	command.
-	For ":s" with an argument this already happens: >
+	For `:s` with an argument this already happens: >
 		:s/blue/red/
 		/green
 		:s//red/   or  :~   or  :&r
@@ -690,8 +702,9 @@
 order to skip the pattern the "magicness" must be known.  Catch 22!
 
 If the {pattern} for the substitute command is empty, the command uses the
-pattern from the last substitute or ":global" command.  With the [r] flag, the
-command uses the pattern from the last substitute, ":global", or search
+pattern from the last substitute or `:global` command.  If there is none, but
+there is a previous search pattern, that one is used.  With the [r] flag, the
+command uses the pattern from the last substitute, `:global`, or search
 command.
 
 If the {string} is omitted the substitute is done as if it's empty.  Thus the
@@ -716,11 +729,13 @@
 
 					*sub-replace-special* *:s\=*
 When the {string} starts with "\=" it is evaluated as an expression, see
-|sub-replace-expression|.  You can use that for any special characters.
+|sub-replace-expression|.  You can use that for complex replacement or special
+characters.
+
 Otherwise these characters in {string} have a special meaning:
 								*:s%*
 When {string} is equal to "%" and '/' is included with the 'cpoptions' option,
-then the {string} of the previous substitute command is used. |cpo-/|
+then the {string} of the previous substitute command is used, see |cpo-/|
 
 magic	nomagic	  action    ~
   &	  \&	  replaced with the whole matched pattern	     *s/\&*
@@ -755,12 +770,25 @@
       \x	  where x is any character not mentioned above:
 		  Reserved for future expansion
 
+The special meaning is also used inside the third argument {sub} of
+the |substitute()| function with the following exceptions:
+  - A % inserts a percent literally without regard to 'cpoptions'.
+  - magic is always set without regard to 'magic'.
+  - A ~ inserts a tilde literally.
+  - <CR> and \r inserts a carriage-return (CTRL-M).
+  - \<CR> does not have a special meaning. it's just one of \x.
+
 Examples: >
   :s/a\|b/xxx\0xxx/g		 modifies "a b"	     to "xxxaxxx xxxbxxx"
   :s/\([abc]\)\([efg]\)/\2\1/g	 modifies "af fa bg" to "fa fa gb"
   :s/abcde/abc^Mde/		 modifies "abcde"    to "abc", "de" (two lines)
   :s/$/\^M/			 modifies "abcde"    to "abcde^M"
   :s/\w\+/\u\0/g		 modifies "bla bla"  to "Bla Bla"
+  :s/\w\+/\L\u/g		 modifies "BLA bla"  to "Bla Bla"
+
+Note: "\L\u" can be used to capitalize the first letter of a word.  This is
+not compatible with Vi and older versions of Vim, where the "\u" would cancel
+out the "\L". Same for "\U\l".
 
 Note: In previous versions CTRL-V was handled in a special way.  Since this is
 not Vi compatible, this was removed.  Use a backslash instead.
@@ -786,17 +814,19 @@
 Substitute with an expression			*sub-replace-expression*
 						*sub-replace-\=*
 When the substitute string starts with "\=" the remainder is interpreted as an
-expression.  This does not work recursively: a substitute() function inside
+expression.  This does not work recursively: a |substitute()| function inside
 the expression cannot use "\=" for the substitute string.
 
 The special meaning for characters as mentioned at |sub-replace-special| does
-not apply except for "<CR>", "\<CR>" and "\\".  Thus in the result of the
-expression you need to use two backslashes to get one, put a backslash before a
-<CR> you want to insert, and use a <CR> without a backslash where you want to
-break the line.
-
-For convenience a <NL> character is also used as a line break.  Prepend a
-backslash to get a real <NL> character (which will be a NUL in the file).
+not apply except for "<CR>".  A <NL> character is used as a line break, you
+can get one with a double-quote string: "\n".  Prepend a backslash to get a
+real <NL> character (which will be a NUL in the file).
+
+The "\=" notation can also be used inside the third argument {sub} of
+|substitute()| function.  In this case, the special meaning for characters as
+mentioned at |sub-replace-special| does not apply at all. Especially, <CR> and
+<NL> are interpreted not as a line break but as a carriage-return and a
+new-line respectively.
 
 When the result is a |List| then the items are joined with separating line
 breaks.  Thus each item becomes a line, except that they can contain line
@@ -834,7 +864,7 @@
 
 
 4.4 Changing tabs					*change-tabs*
-							*:ret* *:retab*
+							*:ret* *:retab* *:retab!*
 :[range]ret[ab][!] [new_tabstop]
 			Replace all sequences of white-space containing a
 			<Tab> with new strings of white-space using the new
@@ -853,7 +883,7 @@
 			Careful: This command modifies any <Tab> characters
 			inside of strings in a C program.  Use "\t" to avoid
 			this (that's a good habit anyway).
-			":retab!" may also change a sequence of spaces by
+			`:retab!` may also change a sequence of spaces by
 			<Tab> characters, which can mess up a printf().
 			{not in Vi}
 			Not available when |+ex_extra| feature was disabled at
@@ -916,8 +946,10 @@
 {Visual}["x]Y		Yank the highlighted lines [into register x] (for
 			{Visual} see |Visual-mode|).  {not in Vi}
 
-							*:y* *:yank*
-:[range]y[ank] [x]	Yank [range] lines [into register x].
+							*:y* *:yank* *E850*
+:[range]y[ank] [x]	Yank [range] lines [into register x]. Yanking to the
+			"* or "+ registers is possible only when the
+			|+clipboard| feature is included.
 
 :[range]y[ank] [x] {count}
 			Yank {count} lines, starting with last line number
@@ -961,8 +993,12 @@
 			current line).  This always works |linewise|, thus
 			this command can be used to put a yanked block as new
 			lines.
-			The cursor is left on the first non-blank in the last
-			new line.
+			If no register is specified, it depends on the 'cb'
+			option: If 'cb' contains "unnamedplus", paste from the
+			+ register |quoteplus|.  Otherwise, if 'cb' contains
+			"unnamed", paste from the * register |quotestar|.
+			Otherwise, paste from the unnamed register
+			|quote_quote|.
 			The register can also be '=' followed by an optional
 			expression.  The expression continues until the end of
 			the command.  You need to escape the '|' and '"'
@@ -1167,7 +1203,7 @@
 
 9. Last search pattern register	"/			*quote_/* *quote/*
 Contains the most recent search-pattern.  This is used for "n" and 'hlsearch'.
-It is writable with ":let", you can change it to have 'hlsearch' highlight
+It is writable with `:let`, you can change it to have 'hlsearch' highlight
 other matches without actually searching.  You can't yank or delete into this
 register.  The search direction is available in |v:searchforward|.
 Note that the valued is restored when returning from a function
@@ -1175,12 +1211,12 @@
 {not in Vi}
 
 							*@/*
-You can write to a register with a ":let" command |:let-@|.  Example: >
+You can write to a register with a `:let` command |:let-@|.  Example: >
 	:let @/ = "the"
 
 If you use a put command without specifying a register, Vim uses the register
 that was last filled (this is also the contents of the unnamed register).  If
-you are confused, use the ":dis" command to find out what Vim will put (this
+you are confused, use the `:dis` command to find out what Vim will put (this
 command displays all named and numbered registers; the unnamed register is
 labelled '"').
 
@@ -1387,16 +1423,19 @@
 middle-comment leader with the end-comment leader and apply any specified
 alignment, leaving just " */".  There is no need to hit BackSpace first.
 
+When there is a match with a middle part, but there also is a maching end part
+which is longer, the end part is used.  This makes a C style comment work
+without requiring the middle part to end with a space.
 
 Here is an example of alignment flags at work to make a comment stand out
-(kind of looks like a 1 too). Consider comment string >
-	sr:/***,m:**,ex2:******/
-
-                                   /***
-                                     **<--right aligned from "r" flag
-                                     **
-offset 2 spaces from the "2" flag--->**
-                                   ******/
+(kind of looks like a 1 too). Consider comment string: >
+	:set comments=sr:/***,m:**,ex-2:******/
+<
+                                   /*** ~
+                                     **<--right aligned from "r" flag ~
+                                     ** ~
+offset 2 spaces for the "-2" flag--->** ~
+                                   ******/ ~
 In this case, the first comment was typed, then return was pressed 4 times,
 then "/" was pressed to end the comment.
 
@@ -1414,8 +1453,8 @@
 alignment flags either. The same behaviour can be defined in those other
 formatting options. One consideration is that 'cindent' has additional options
 for context based indenting of comments but cannot replicate many three piece
-indent alignments.  However, 'indentexpr' is has the ability to work better
-with three piece comments.
+indent alignments.  However, 'indentexpr' has the ability to work better with
+three piece comments.
 
 Other examples: >
    "b:*"	Includes lines starting with "*", but not if the "*" is
@@ -1473,6 +1512,7 @@
 			first line of a paragraph
 		second line of the same paragraph
 		third line.
+<	This also works inside comments, ignoring the comment leader.
 v	Vi-compatible auto-wrapping in insert mode: Only break a line at a
 	blank that you have entered during the current insert command.  (Note:
 	this is not 100% Vi compatible.  Vi has some "unexpected features" or
@@ -1493,6 +1533,12 @@
 	characters.  Overruled by the 'M' flag.
 1	Don't break a line after a one-letter word.  It's broken before it
 	instead (if possible).
+j	Where it makes sense, remove a comment leader when joining lines.  For
+	example, joining:
+		int i;   // the index ~
+		         // in the list ~
+	Becomes:
+		int i;   // the index in the list ~
 
 
 With 't' and 'c' you can specify when Vim performs auto-wrapping:
@@ -1536,7 +1582,7 @@
 	:set fo=tcrq
 <
 
-Automatic formatting					*auto-format*
+Automatic formatting				*auto-format* *autoformat*
 
 When the 'a' flag is present in 'formatoptions' text is formatted
 automatically when inserting text or deleting text.  This works nice for
@@ -1645,7 +1691,7 @@
 			last search pattern is used.  This allows trying out
 			a pattern first.
 
-Note that using ":sort" with ":global" doesn't sort the matching lines, it's
+Note that using `:sort` with `:global` doesn't sort the matching lines, it's
 quite useless.
 
 The details about sorting depend on the library function used.  There is no
diff -Naur vim73.orig/runtime/doc/cmdline.txt vim73/runtime/doc/cmdline.txt
--- vim73.orig/runtime/doc/cmdline.txt	2010-08-15 12:23:19.000000000 +0000
+++ vim73/runtime/doc/cmdline.txt	2013-08-04 19:09:07.783952360 +0000
@@ -1,4 +1,4 @@
-*cmdline.txt*   For Vim version 7.3.  Last change: 2010 May 07
+*cmdline.txt*   For Vim version 7.3.  Last change: 2013 Mar 16
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -83,9 +83,9 @@
 CTRL-Q		Same as CTRL-V.  But with some terminals it is used for
 		control flow, it doesn't work then.
 
-							*c_<Left>*
+							*c_<Left>* *c_Left*
 <Left>		cursor left
-							*c_<Right>*
+							*c_<Right>* *c_Right*
 <Right>		cursor right
 							*c_<S-Left>*
 <S-Left> or <C-Left>					*c_<C-Left>*
@@ -93,18 +93,18 @@
 							*c_<S-Right>*
 <S-Right> or <C-Right>					*c_<C-Right>*
 		cursor one WORD right
-CTRL-B or <Home>					*c_CTRL-B* *c_<Home>*
+CTRL-B or <Home>				*c_CTRL-B* *c_<Home>* *c_Home*
 		cursor to beginning of command-line
-CTRL-E or <End>						*c_CTRL-E* *c_<End>*
+CTRL-E or <End>					*c_CTRL-E* *c_<End>* *c_End*
 		cursor to end of command-line
 
 							*c_<LeftMouse>*
 <LeftMouse>	Move the cursor to the position of the mouse click.
 
-CTRL-H							*c_<BS>* *c_CTRL-H*
+CTRL-H						*c_<BS>* *c_CTRL-H* *c_BS*
 <BS>		Delete the character in front of the cursor (see |:fixdel| if
 		your <BS> key does not do what you want).
-							*c_<Del>*
+							*c_<Del>* *c_Del*
 <Del>		Delete the character under the cursor (at end of line:
 		character before the cursor) (see |:fixdel| if your <Del>
 		key does not do what you want).
@@ -118,7 +118,7 @@
 		preferred behavior, add the following to your .vimrc: >
 			:cnoremap <C-U> <C-E><C-U>
 <
-							*c_<Insert>*
+						*c_<Insert>* *c_Insert*
 <Insert>	Toggle between insert and overstrike.  {not in Vi}
 
 {char1} <BS> {char2}	or				*c_digraph*
@@ -217,16 +217,16 @@
 			   :return cmd
 			:endfunc
 <		This doesn't work recursively, thus not when already editing
-		an expression.
+		an expression.  But it is possible to use in a mapping.
 
 							*c_CTRL-Y*
 CTRL-Y		When there is a modeless selection, copy the selection into
 		the clipboard. |modeless-selection|
 		If there is no selection CTRL-Y is inserted as a character.
 
-CTRL-J						*c_CTRL-J* *c_<NL>* *c_<CR>*
+CTRL-J					*c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR*
 <CR> or <NL>	start entered command
-							*c_<Esc>*
+							*c_<Esc>* *c_Esc*
 <Esc>		When typed and 'x' not present in 'cpoptions', quit
 		Command-line mode without executing.  In macros or when 'x'
 		present in 'cpoptions', start entered command.
@@ -235,12 +235,12 @@
 							*c_CTRL-C*
 CTRL-C		quit command-line without executing
 
-							*c_<Up>*
+							*c_<Up>* *c_Up*
 <Up>		recall older command-line from history, whose beginning
 		matches the current command-line (see below).
 		{not available when compiled without the |+cmdline_hist|
 		feature}
-							*c_<Down>*
+							*c_<Down>* *c_Down*
 <Down>		recall more recent command-line from history, whose beginning
 		matches the current command-line (see below).
 		{not available when compiled without the |+cmdline_hist|
@@ -330,12 +330,12 @@
 
 :his[tory] [{name}] [{first}][, [{last}]]
 		List the contents of history {name} which can be:
-		c[md]	 or :	command-line history
-		s[earch] or /	search string history
-		e[xpr]	 or =	expression register history
-		i[nput]	 or @	input line history
-		d[ebug]	 or >	debug command history
-		a[ll]		all of the above
+		c[md]	 or :		command-line history
+		s[earch] or / or ?	search string history
+		e[xpr]	 or =		expression register history
+		i[nput]	 or @		input line history
+		d[ebug]	 or >		debug command history
+		a[ll]			all of the above
 		{not in Vi}
 
 		If the numbers {first} and/or {last} are given, the respective
@@ -372,10 +372,10 @@
 - Mappings: Only after a ":map" or similar command.
 - Variable and function names: Only after a ":if", ":call" or similar command.
 
-When Vim was compiled with the |+cmdline_compl| feature disabled, only file
-names, directories and help items can be completed.  The number of help item
-matches is limited (currently to 300) to avoid a long delay when there are
-very many matches.
+When Vim was compiled without the |+cmdline_compl| feature only file names,
+directories and help items can be completed.  The number of help item matches
+is limited (currently to 300) to avoid a long delay when there are very many
+matches.
 
 These are the commands that can be used:
 
@@ -423,7 +423,10 @@
 
 The 'wildchar' option defaults to <Tab> (CTRL-E when in Vi compatible mode; in
 a previous version <Esc> was used).  In the pattern standard wildcards '*' and
-'?' are accepted.  '*' matches any string, '?' matches exactly one character.
+'?' are accepted when matching file names.  '*' matches any string, '?'
+matches exactly one character.
+
+The 'wildignorecase' option can be set to ignore case in filenames.
 
 If you like tcsh's autolist completion, you can use this mapping:
 	:cnoremap X <C-L><C-D>
@@ -711,10 +714,15 @@
 Visual Mode and Range					*v_:*
 
 {Visual}:	Starts a command-line with the Visual selected lines as a
-		range.  The code ":'<,'>" is used for this range, which makes
+		range.  The code `:'<,'>` is used for this range, which makes
 		it possible to select a similar line from the command-line
 		history for repeating a command on different Visually selected
 		lines.
+		When Visual mode was already ended, a short way to use the
+		Visual area for a range is `:*`.  This requires that "*" does
+		not appear in 'cpo', see |cpo-star|.  Otherwise you will have
+		to type `:'<,'>`
+
 
 ==============================================================================
 5. Ex command-line flags				*ex-flags*
@@ -781,30 +789,34 @@
 			       *:<cword>* *:<cWORD>* *:<cfile>* *<cfile>*
 			       *:<sfile>* *<sfile>* *:<afile>* *<afile>*
 			       *:<abuf>* *<abuf>* *:<amatch>* *<amatch>*
-			       *E495* *E496* *E497* *E498* *E499* *E500*
+			       *<slnum>* *E495* *E496* *E497* *E499* *E500*
 Note: these are typed literally, they are not special keys!
 	<cword>    is replaced with the word under the cursor (like |star|)
 	<cWORD>    is replaced with the WORD under the cursor (see |WORD|)
 	<cfile>    is replaced with the path name under the cursor (like what
 		   |gf| uses)
-	<afile>    when executing autocommands, is replaced with the file name
-		   for a file read or write
-	<abuf>     when executing autocommands, is replaced with the currently
+	<afile>    When executing autocommands, is replaced with the file name
+		   for a file read or write.
+	<abuf>     When executing autocommands, is replaced with the currently
 		   effective buffer number (for ":r file" and ":so file" it is
 		   the current buffer, the file being read/sourced is not in a
 		   buffer).
-	<amatch>   when executing autocommands, is replaced with the match for
+	<amatch>   When executing autocommands, is replaced with the match for
 		   which this autocommand was executed.  It differs from
 		   <afile> only when the file name isn't used to match with
 		   (for FileType, Syntax and SpellFileMissing events).
-	<sfile>    when executing a ":source" command, is replaced with the
-		   file name of the sourced file;
-		   when executing a function, is replaced with
+	<sfile>    When executing a ":source" command, is replaced with the
+		   file name of the sourced file.  *E498* 
+		   When executing a function, is replaced with
 		   "function {function-name}"; function call nesting is
 		   indicated like this:
 		   "function {function-name1}..{function-name2}".  Note that
 		   filename-modifiers are useless when <sfile> is used inside
 		   a function.
+	<slnum>	   When executing a ":source" command, is replaced with the
+	           line number.  *E842*
+		   When executing a function it's the line number relative to
+		   the start of the function.
 
 							 *filename-modifiers*
 	 *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs*
@@ -819,10 +831,11 @@
 		the home directory.  If the name is a directory a path
 		separator is added at the end.  For a file name that does not
 		exist and does not have an absolute path the result is
-		unpredictable.
+		unpredictable.  On MS-Windows an 8.3 filename is expanded to
+		the long name.
 	:8	Converts the path to 8.3 short format (currently only on
-		win32).  Will act on as much of a path that is an existing
-		path.
+		MS-Windows).  Will act on as much of a path that is an
+		existing path.
 	:~	Reduce file name to be relative to the home directory, if
 		possible.  File name is unmodified if it is not below the home
 		directory.
@@ -860,7 +873,7 @@
 		After this, the previous modifiers can be used again.  For
 		example ":p", to make a full path after the substitution.
 	:gs?pat?sub?
-		Substitute all occurrences of "path" with "sub".  Otherwise
+		Substitute all occurrences of "pat" with "sub".  Otherwise
 		this works like ":s".
 
 Examples, when the file name is "src/version.c", current dir
@@ -951,7 +964,7 @@
 	\\$home		file "\\", followed by expanded $home
 
 ==============================================================================
-6. Command-line window				*cmdline-window* *cmdwin*
+7. Command-line window				*cmdline-window* *cmdwin*
 							*command-line-window*
 In the command-line window the command line can be edited just like editing
 text in any window.  It is a special kind of window, because you cannot leave
diff -Naur vim73.orig/runtime/doc/debug.txt vim73/runtime/doc/debug.txt
--- vim73.orig/runtime/doc/debug.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/debug.txt	2013-08-04 19:09:07.783952360 +0000
@@ -1,4 +1,4 @@
-*debug.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
+*debug.txt*     For Vim version 7.3.  Last change: 2012 Feb 11
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -15,14 +15,15 @@
 
 ==============================================================================
 
-1. Location of a crash, using gcc and gdb		*debug-gcc*
+1. Location of a crash, using gcc and gdb		*debug-gcc* *gdb*
 
 When Vim crashes in one of the test files, and you are using gcc for
 compilation, here is what you can do to find out exactly where Vim crashes.
 This also applies when using the MingW tools.
 
-1. Compile Vim with the "-g" option (there is a line in the Makefile for this,
-   which you can uncomment).
+1. Compile Vim with the "-g" option (there is a line in the src/Makefile for
+   this, which you can uncomment).  Also make sure "strip" is disabled (do not
+   install it, or use the line "STRIP = /bin/true").
 
 2. Execute these commands (replace "11" with the test that fails): >
 	cd testdir
@@ -67,7 +68,7 @@
 some steps to provide a useful bug report.
 
 
-GENERIC ~
+3.1 GENERIC ~
 
 You must obtain the debugger symbols (PDB) file for your executable: gvim.pdb
 for gvim.exe, or vim.pdb for vim.exe. The PDB should be available from the
@@ -89,7 +90,7 @@
 
 
 								*debug-vs2005*
-2.2 Debugging Vim crashes with Visual Studio 2005/Visual C++ 2005 Express ~
+3.2 Debugging Vim crashes with Visual Studio 2005/Visual C++ 2005 Express ~
 
 First launch vim.exe or gvim.exe and then launch Visual Studio.  (If you don't
 have Visual Studio, follow the instructions at |get-ms-debuggers| to obtain a
@@ -123,7 +124,7 @@
 need to save minidumps or you want a just-in-time (postmortem) debugger.
 
 								*debug-windbg*
-2.3 Debugging Vim crashes with WinDbg ~
+3.3 Debugging Vim crashes with WinDbg ~
 
 See |get-ms-debuggers| to obtain a copy of WinDbg.
 
@@ -149,7 +150,7 @@
         .dump vim.dmp
 <
 							*debug-minidump*
-2.4 Opening a Minidump ~
+3.4 Opening a Minidump ~
 
 If you have a minidump file, you can open it in Visual Studio or in WinDbg.
 
@@ -161,7 +162,7 @@
 |debug-windbg| to set the Symbol File Path.
 
 							*get-ms-debuggers*
-2.5 Obtaining Microsoft Debugging Tools ~
+3.5 Obtaining Microsoft Debugging Tools ~
 
 The Debugging Tools for Windows (including WinDbg) can be downloaded from
     http://www.microsoft.com/whdc/devtools/debugging/default.mspx
diff -Naur vim73.orig/runtime/doc/develop.txt vim73/runtime/doc/develop.txt
--- vim73.orig/runtime/doc/develop.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/develop.txt	2013-08-04 19:09:07.787285683 +0000
@@ -1,4 +1,4 @@
-*develop.txt*   For Vim version 7.3.  Last change: 2008 Dec 17
+*develop.txt*   For Vim version 7.3.  Last change: 2013 Apr 27
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -20,6 +20,7 @@
 Vim is open source software.  Everybody is encouraged to contribute to help
 improving Vim.  For sending patches a context diff "diff -c" is preferred.
 Also see http://www.vim.org/tips/tip.php?tip_id=618.
+Also see http://vim.wikia.com/wiki/How_to_make_and_submit_a_patch.
 
 ==============================================================================
 1. Design goals						*design-goals*
@@ -232,6 +233,17 @@
 new		C++ reserved keyword
 try		Borland C++ doesn't like it to be used as a variable.
 
+clear		Mac curses.h
+echo		Mac curses.h
+instr		Mac curses.h
+meta		Mac curses.h
+newwin		Mac curses.h
+nl		Mac curses.h
+overwrite	Mac curses.h
+refresh		Mac curses.h
+scroll		Mac curses.h
+typeahead	Mac curses.h
+
 basename()	GNU string function
 dirname()	GNU string function
 get_env_value()	Linux system function
diff -Naur vim73.orig/runtime/doc/diff.txt vim73/runtime/doc/diff.txt
--- vim73.orig/runtime/doc/diff.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/diff.txt	2013-08-04 19:09:07.790619006 +0000
@@ -1,4 +1,4 @@
-*diff.txt*      For Vim version 7.3.  Last change: 2010 Jul 31
+*diff.txt*      For Vim version 7.3.  Last change: 2012 Sep 05
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -86,16 +86,16 @@
 While already in Vim you can start diff mode in three ways.
 
 							*E98*
-:diffsplit {filename}					*:diffs* *:diffsplit*
+:diffs[plit] {filename}					*:diffs* *:diffsplit*
 		Open a new window on the file {filename}.  The options are set
 		as for "vimdiff" for the current and the newly opened window.
 		Also see 'diffexpr'.
 
 							*:difft* *:diffthis*
-:diffthis	Make the current window part of the diff windows.  This sets
+:difft[his]	Make the current window part of the diff windows.  This sets
 		the options like for "vimdiff".
 
-:diffpatch {patchfile}				 *E816* *:diffp* *:diffpatch*
+:diffp[atch] {patchfile}				 *E816* *:diffp* *:diffpatch*
 		Use the current buffer, patch it with the diff found in
 		{patchfile} and open a buffer on the result.  The options are
 		set as for "vimdiff".
@@ -123,9 +123,9 @@
 file for a moment and come back to the same file and be in diff mode again.
 
 							*:diffo* *:diffoff*
-:diffoff	Switch off diff mode for the current window.
+:diffo[ff]	Switch off diff mode for the current window.
 
-:diffoff!	Switch off diff mode for the current window and in all windows
+:diffo[ff]!	Switch off diff mode for the current window and in all windows
 		in the current tab page where 'diff' is set.
 
 The ":diffoff" command resets the relevant options to their default value.
@@ -167,8 +167,8 @@
 possible to view the changes you have made to a buffer since the file was
 loaded.  Since Vim doesn't allow having two buffers for the same file, you
 need another buffer.  This command is useful: >
-	 command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
-	 	\ | wincmd p | diffthis
+	 command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_
+	 	\ | diffthis | wincmd p | diffthis
 (this is in |vimrc_example.vim|).  Use ":DiffOrig" to see the differences
 between the current buffer and the file it was loaded from.
 
@@ -178,7 +178,7 @@
 nodiff" before hiding it.
 
 							*:diffu* *:diffupdate*
-:diffu[pdate]			Update the diff highlighting and folds.
+:diffu[pdate][!]		Update the diff highlighting and folds.
 
 Vim attempts to keep the differences updated when you make changes to the
 text.  This mostly takes care of inserted and deleted lines.  Changes within a
@@ -187,6 +187,9 @@
 
 	:diffupdate
 
+If the ! is included Vim will check if the file was changed externally and
+needs to be reloaded.  It will prompt for each changed file, like `:checktime`
+was used.
 
 Vim will show filler lines for lines that are missing in one window but are
 present in another.  These lines were inserted in another file or deleted in
@@ -217,7 +220,7 @@
 				that parts in the middle that are still the
 				same are highlighted anyway.  Only "iwhite" of
 				'diffopt' is used here.
-|hl-DiffDelete| DiffDelete	Deleted lines.  Also called filler lines,
+|hl-DiffDelete|	DiffDelete	Deleted lines.  Also called filler lines,
 				because they don't really exist in this
 				buffer.
 
@@ -261,10 +264,12 @@
 							*do*
 do		Same as ":diffget" without argument or range.  The "o" stands
 		for "obtain" ("dg" can't be used, it could be the start of
-		"dgg"!).
+		"dgg"!). Note: this doesn't work in Visual mode.
 
 							*dp*
 dp		Same as ":diffput" without argument or range.
+		Note: this doesn't work in Visual mode.
+
 
 When no [range] is given, the diff at the cursor position or just above it is
 affected.  When [range] is used, Vim tries to only put or get the specified
@@ -328,7 +333,7 @@
 
 The "1a2" item appends the line "bbb".
 The "4d4" item deletes the line "111".
-The '7c7" item replaces the line "GGG" with "ggg".
+The "7c7" item replaces the line "GGG" with "ggg".
 
 When 'diffexpr' is not empty, Vim evaluates it to obtain a diff file in the
 format mentioned.  These variables are set to the file names used:
@@ -371,9 +376,9 @@
 If it's not clear what the problem is set the 'verbose' option to one or more
 to see more messages.
 
-The self-installing Vim includes a diff program.  If you don't have it you
-might want to download a diff.exe.  For example from
-http://jlb.twu.net/code/unixkit.php.
+The self-installing Vim for MS-Windows includes a diff program.  If you don't
+have it you might want to download a diff.exe.  For example from
+http://gnuwin32.sourceforge.net/packages/diffutils.htm.
 
 
 USING PATCHES					*diff-patchexpr*
diff -Naur vim73.orig/runtime/doc/digraph.txt vim73/runtime/doc/digraph.txt
--- vim73.orig/runtime/doc/digraph.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/digraph.txt	2013-08-04 19:09:07.793952330 +0000
@@ -1,4 +1,4 @@
-*digraph.txt*   For Vim version 7.3.  Last change: 2010 Apr 11
+*digraph.txt*   For Vim version 7.3.  Last change: 2011 Jan 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -40,7 +40,7 @@
 disabled, the ":digraph" command will display an error message.
 
 Example of the output of ":digraphs": >
- TH   222  ss   223  a!   224  a'   225  a>   226  a?   227  a:   228
+ TH Þ  222  ss ß  223  a! à  224  a' á  225  a> â  226  a? ã  227  a: ä  228
 
 The first two characters in each column are the characters you have to type to
 enter the digraph.
@@ -156,7 +156,7 @@
 	Five			5	Hiragana
 	Six			6	Katakana
 
-Example: a: is   and o: is 
+Example: a: is ä  and o: is ö
 
 These are the RFC1345 digraphs for the one-byte characters.  See the output of
 ":digraphs" for the others.  The characters above 255 are only available when
@@ -251,100 +251,1233 @@
 ~^	PM	0x9e	158	PRIVACY MESSAGE (PM)
 ~_	AC	0x9f	159	APPLICATION PROGRAM COMMAND (APC)
 |	NS	0xa0	160	NO-BREAK SPACE
-	!I	0xa1	161	INVERTED EXCLAMATION MARK
-	Ct	0xa2	162	CENT SIGN
-	Pd	0xa3	163	POUND SIGN
-	Cu	0xa4	164	CURRENCY SIGN
-	Ye	0xa5	165	YEN SIGN
-	BB	0xa6	166	BROKEN BAR
-	SE	0xa7	167	SECTION SIGN
-	':	0xa8	168	DIAERESIS
-	Co	0xa9	169	COPYRIGHT SIGN
-	-a	0xaa	170	FEMININE ORDINAL INDICATOR
-	<<	0xab	171	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
-	NO	0xac	172	NOT SIGN
-	--	0xad	173	SOFT HYPHEN
-	Rg	0xae	174	REGISTERED SIGN
-	'm	0xaf	175	MACRON
-	DG	0xb0	176	DEGREE SIGN
-	+-	0xb1	177	PLUS-MINUS SIGN
-	2S	0xb2	178	SUPERSCRIPT TWO
-	3S	0xb3	179	SUPERSCRIPT THREE
-	''	0xb4	180	ACUTE ACCENT
-	My	0xb5	181	MICRO SIGN
-	PI	0xb6	182	PILCROW SIGN
-	.M	0xb7	183	MIDDLE DOT
-	',	0xb8	184	CEDILLA
-	1S	0xb9	185	SUPERSCRIPT ONE
-	-o	0xba	186	MASCULINE ORDINAL INDICATOR
-	>>	0xbb	187	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-	14	0xbc	188	VULGAR FRACTION ONE QUARTER
-	12	0xbd	189	VULGAR FRACTION ONE HALF
-	34	0xbe	190	VULGAR FRACTION THREE QUARTERS
-	?I	0xbf	191	INVERTED QUESTION MARK
-	A!	0xc0	192	LATIN CAPITAL LETTER A WITH GRAVE
-	A'	0xc1	193	LATIN CAPITAL LETTER A WITH ACUTE
-	A>	0xc2	194	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-	A?	0xc3	195	LATIN CAPITAL LETTER A WITH TILDE
-	A:	0xc4	196	LATIN CAPITAL LETTER A WITH DIAERESIS
-	AA	0xc5	197	LATIN CAPITAL LETTER A WITH RING ABOVE
-	AE	0xc6	198	LATIN CAPITAL LETTER AE
-	C,	0xc7	199	LATIN CAPITAL LETTER C WITH CEDILLA
-	E!	0xc8	200	LATIN CAPITAL LETTER E WITH GRAVE
-	E'	0xc9	201	LATIN CAPITAL LETTER E WITH ACUTE
-	E>	0xca	202	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-	E:	0xcb	203	LATIN CAPITAL LETTER E WITH DIAERESIS
-	I!	0xcc	204	LATIN CAPITAL LETTER I WITH GRAVE
-	I'	0xcd	205	LATIN CAPITAL LETTER I WITH ACUTE
-	I>	0xce	206	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-	I:	0xcf	207	LATIN CAPITAL LETTER I WITH DIAERESIS
-	D-	0xd0	208	LATIN CAPITAL LETTER ETH (Icelandic)
-	N?	0xd1	209	LATIN CAPITAL LETTER N WITH TILDE
-	O!	0xd2	210	LATIN CAPITAL LETTER O WITH GRAVE
-	O'	0xd3	211	LATIN CAPITAL LETTER O WITH ACUTE
-	O>	0xd4	212	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-	O?	0xd5	213	LATIN CAPITAL LETTER O WITH TILDE
-	O:	0xd6	214	LATIN CAPITAL LETTER O WITH DIAERESIS
-	*X	0xd7	215	MULTIPLICATION SIGN
-	O/	0xd8	216	LATIN CAPITAL LETTER O WITH STROKE
-	U!	0xd9	217	LATIN CAPITAL LETTER U WITH GRAVE
-	U'	0xda	218	LATIN CAPITAL LETTER U WITH ACUTE
-	U>	0xdb	219	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-	U:	0xdc	220	LATIN CAPITAL LETTER U WITH DIAERESIS
-	Y'	0xdd	221	LATIN CAPITAL LETTER Y WITH ACUTE
-	TH	0xde	222	LATIN CAPITAL LETTER THORN (Icelandic)
-	ss	0xdf	223	LATIN SMALL LETTER SHARP S (German)
-	a!	0xe0	224	LATIN SMALL LETTER A WITH GRAVE
-	a'	0xe1	225	LATIN SMALL LETTER A WITH ACUTE
-	a>	0xe2	226	LATIN SMALL LETTER A WITH CIRCUMFLEX
-	a?	0xe3	227	LATIN SMALL LETTER A WITH TILDE
-	a:	0xe4	228	LATIN SMALL LETTER A WITH DIAERESIS
-	aa	0xe5	229	LATIN SMALL LETTER A WITH RING ABOVE
-	ae	0xe6	230	LATIN SMALL LETTER AE
-	c,	0xe7	231	LATIN SMALL LETTER C WITH CEDILLA
-	e!	0xe8	232	LATIN SMALL LETTER E WITH GRAVE
-	e'	0xe9	233	LATIN SMALL LETTER E WITH ACUTE
-	e>	0xea	234	LATIN SMALL LETTER E WITH CIRCUMFLEX
-	e:	0xeb	235	LATIN SMALL LETTER E WITH DIAERESIS
-	i!	0xec	236	LATIN SMALL LETTER I WITH GRAVE
-	i'	0xed	237	LATIN SMALL LETTER I WITH ACUTE
-	i>	0xee	238	LATIN SMALL LETTER I WITH CIRCUMFLEX
-	i:	0xef	239	LATIN SMALL LETTER I WITH DIAERESIS
-	d-	0xf0	240	LATIN SMALL LETTER ETH (Icelandic)
-	n?	0xf1	241	LATIN SMALL LETTER N WITH TILDE
-	o!	0xf2	242	LATIN SMALL LETTER O WITH GRAVE
-	o'	0xf3	243	LATIN SMALL LETTER O WITH ACUTE
-	o>	0xf4	244	LATIN SMALL LETTER O WITH CIRCUMFLEX
-	o?	0xf5	245	LATIN SMALL LETTER O WITH TILDE
-	o:	0xf6	246	LATIN SMALL LETTER O WITH DIAERESIS
-	-:	0xf7	247	DIVISION SIGN
-	o/	0xf8	248	LATIN SMALL LETTER O WITH STROKE
-	u!	0xf9	249	LATIN SMALL LETTER U WITH GRAVE
-	u'	0xfa	250	LATIN SMALL LETTER U WITH ACUTE
-	u>	0xfb	251	LATIN SMALL LETTER U WITH CIRCUMFLEX
-	u:	0xfc	252	LATIN SMALL LETTER U WITH DIAERESIS
-	y'	0xfd	253	LATIN SMALL LETTER Y WITH ACUTE
-	th	0xfe	254	LATIN SMALL LETTER THORN (Icelandic)
-	y:	0xff	255	LATIN SMALL LETTER Y WITH DIAERESIS
+¡	!I	0xa1	161	INVERTED EXCLAMATION MARK
+¢	Ct	0xa2	162	CENT SIGN
+£	Pd	0xa3	163	POUND SIGN
+¤	Cu	0xa4	164	CURRENCY SIGN
+¥	Ye	0xa5	165	YEN SIGN
+¦	BB	0xa6	166	BROKEN BAR
+§	SE	0xa7	167	SECTION SIGN
+¨	':	0xa8	168	DIAERESIS
+©	Co	0xa9	169	COPYRIGHT SIGN
+ª	-a	0xaa	170	FEMININE ORDINAL INDICATOR
+«	<<	0xab	171	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+¬	NO	0xac	172	NOT SIGN
+­	--	0xad	173	SOFT HYPHEN
+®	Rg	0xae	174	REGISTERED SIGN
+¯	'm	0xaf	175	MACRON
+°	DG	0xb0	176	DEGREE SIGN
+±	+-	0xb1	177	PLUS-MINUS SIGN
+²	2S	0xb2	178	SUPERSCRIPT TWO
+³	3S	0xb3	179	SUPERSCRIPT THREE
+´	''	0xb4	180	ACUTE ACCENT
+µ	My	0xb5	181	MICRO SIGN
+¶	PI	0xb6	182	PILCROW SIGN
+·	.M	0xb7	183	MIDDLE DOT
+¸	',	0xb8	184	CEDILLA
+¹	1S	0xb9	185	SUPERSCRIPT ONE
+º	-o	0xba	186	MASCULINE ORDINAL INDICATOR
+»	>>	0xbb	187	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+¼	14	0xbc	188	VULGAR FRACTION ONE QUARTER
+½	12	0xbd	189	VULGAR FRACTION ONE HALF
+¾	34	0xbe	190	VULGAR FRACTION THREE QUARTERS
+¿	?I	0xbf	191	INVERTED QUESTION MARK
+À	A!	0xc0	192	LATIN CAPITAL LETTER A WITH GRAVE
+Á	A'	0xc1	193	LATIN CAPITAL LETTER A WITH ACUTE
+Â	A>	0xc2	194	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+Ã	A?	0xc3	195	LATIN CAPITAL LETTER A WITH TILDE
+Ä	A:	0xc4	196	LATIN CAPITAL LETTER A WITH DIAERESIS
+Å	AA	0xc5	197	LATIN CAPITAL LETTER A WITH RING ABOVE
+Æ	AE	0xc6	198	LATIN CAPITAL LETTER AE
+Ç	C,	0xc7	199	LATIN CAPITAL LETTER C WITH CEDILLA
+È	E!	0xc8	200	LATIN CAPITAL LETTER E WITH GRAVE
+É	E'	0xc9	201	LATIN CAPITAL LETTER E WITH ACUTE
+Ê	E>	0xca	202	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+Ë	E:	0xcb	203	LATIN CAPITAL LETTER E WITH DIAERESIS
+Ì	I!	0xcc	204	LATIN CAPITAL LETTER I WITH GRAVE
+Í	I'	0xcd	205	LATIN CAPITAL LETTER I WITH ACUTE
+Î	I>	0xce	206	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+Ï	I:	0xcf	207	LATIN CAPITAL LETTER I WITH DIAERESIS
+Ð	D-	0xd0	208	LATIN CAPITAL LETTER ETH (Icelandic)
+Ñ	N?	0xd1	209	LATIN CAPITAL LETTER N WITH TILDE
+Ò	O!	0xd2	210	LATIN CAPITAL LETTER O WITH GRAVE
+Ó	O'	0xd3	211	LATIN CAPITAL LETTER O WITH ACUTE
+Ô	O>	0xd4	212	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+Õ	O?	0xd5	213	LATIN CAPITAL LETTER O WITH TILDE
+Ö	O:	0xd6	214	LATIN CAPITAL LETTER O WITH DIAERESIS
+×	*X	0xd7	215	MULTIPLICATION SIGN
+Ø	O/	0xd8	216	LATIN CAPITAL LETTER O WITH STROKE
+Ù	U!	0xd9	217	LATIN CAPITAL LETTER U WITH GRAVE
+Ú	U'	0xda	218	LATIN CAPITAL LETTER U WITH ACUTE
+Û	U>	0xdb	219	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+Ü	U:	0xdc	220	LATIN CAPITAL LETTER U WITH DIAERESIS
+Ý	Y'	0xdd	221	LATIN CAPITAL LETTER Y WITH ACUTE
+Þ	TH	0xde	222	LATIN CAPITAL LETTER THORN (Icelandic)
+ß	ss	0xdf	223	LATIN SMALL LETTER SHARP S (German)
+à	a!	0xe0	224	LATIN SMALL LETTER A WITH GRAVE
+á	a'	0xe1	225	LATIN SMALL LETTER A WITH ACUTE
+â	a>	0xe2	226	LATIN SMALL LETTER A WITH CIRCUMFLEX
+ã	a?	0xe3	227	LATIN SMALL LETTER A WITH TILDE
+ä	a:	0xe4	228	LATIN SMALL LETTER A WITH DIAERESIS
+å	aa	0xe5	229	LATIN SMALL LETTER A WITH RING ABOVE
+æ	ae	0xe6	230	LATIN SMALL LETTER AE
+ç	c,	0xe7	231	LATIN SMALL LETTER C WITH CEDILLA
+è	e!	0xe8	232	LATIN SMALL LETTER E WITH GRAVE
+é	e'	0xe9	233	LATIN SMALL LETTER E WITH ACUTE
+ê	e>	0xea	234	LATIN SMALL LETTER E WITH CIRCUMFLEX
+ë	e:	0xeb	235	LATIN SMALL LETTER E WITH DIAERESIS
+ì	i!	0xec	236	LATIN SMALL LETTER I WITH GRAVE
+í	i'	0xed	237	LATIN SMALL LETTER I WITH ACUTE
+î	i>	0xee	238	LATIN SMALL LETTER I WITH CIRCUMFLEX
+ï	i:	0xef	239	LATIN SMALL LETTER I WITH DIAERESIS
+ð	d-	0xf0	240	LATIN SMALL LETTER ETH (Icelandic)
+ñ	n?	0xf1	241	LATIN SMALL LETTER N WITH TILDE
+ò	o!	0xf2	242	LATIN SMALL LETTER O WITH GRAVE
+ó	o'	0xf3	243	LATIN SMALL LETTER O WITH ACUTE
+ô	o>	0xf4	244	LATIN SMALL LETTER O WITH CIRCUMFLEX
+õ	o?	0xf5	245	LATIN SMALL LETTER O WITH TILDE
+ö	o:	0xf6	246	LATIN SMALL LETTER O WITH DIAERESIS
+÷	-:	0xf7	247	DIVISION SIGN
+ø	o/	0xf8	248	LATIN SMALL LETTER O WITH STROKE
+ù	u!	0xf9	249	LATIN SMALL LETTER U WITH GRAVE
+ú	u'	0xfa	250	LATIN SMALL LETTER U WITH ACUTE
+û	u>	0xfb	251	LATIN SMALL LETTER U WITH CIRCUMFLEX
+ü	u:	0xfc	252	LATIN SMALL LETTER U WITH DIAERESIS
+ý	y'	0xfd	253	LATIN SMALL LETTER Y WITH ACUTE
+þ	th	0xfe	254	LATIN SMALL LETTER THORN (Icelandic)
+ÿ	y:	0xff	255	LATIN SMALL LETTER Y WITH DIAERESIS
+
+If your Vim is compiled with |multibyte| support and you are using a multibyte
+'encoding', Vim provides this enhanced set of additional digraphs:
+
+							*digraph-table-mbyte*
+char  digraph	hex	dec	official name ~
+Ā	A-	0100	0256	LATIN CAPITAL LETTER A WITH MACRON
+ā	a-	0101	0257	LATIN SMALL LETTER A WITH MACRON
+Ă	A(	0102	0258	LATIN CAPITAL LETTER A WITH BREVE
+ă	a(	0103	0259	LATIN SMALL LETTER A WITH BREVE
+Ą	A;	0104	0260	LATIN CAPITAL LETTER A WITH OGONEK
+ą	a;	0105	0261	LATIN SMALL LETTER A WITH OGONEK
+Ć	C'	0106	0262	LATIN CAPITAL LETTER C WITH ACUTE
+ć	c'	0107	0263	LATIN SMALL LETTER C WITH ACUTE
+Ĉ	C>	0108	0264	LATIN CAPITAL LETTER C WITH CIRCUMFLEX
+ĉ	c>	0109	0265	LATIN SMALL LETTER C WITH CIRCUMFLEX
+Ċ	C.	010A	0266	LATIN CAPITAL LETTER C WITH DOT ABOVE
+ċ	c.	010B	0267	LATIN SMALL LETTER C WITH DOT ABOVE
+Č	C<	010C	0268	LATIN CAPITAL LETTER C WITH CARON
+č	c<	010D	0269	LATIN SMALL LETTER C WITH CARON
+Ď	D<	010E	0270	LATIN CAPITAL LETTER D WITH CARON
+ď	d<	010F	0271	LATIN SMALL LETTER D WITH CARON
+Đ	D/	0110	0272	LATIN CAPITAL LETTER D WITH STROKE
+đ	d/	0111	0273	LATIN SMALL LETTER D WITH STROKE
+Ē	E-	0112	0274	LATIN CAPITAL LETTER E WITH MACRON
+ē	e-	0113	0275	LATIN SMALL LETTER E WITH MACRON
+Ĕ	E(	0114	0276	LATIN CAPITAL LETTER E WITH BREVE
+ĕ	e(	0115	0277	LATIN SMALL LETTER E WITH BREVE
+Ė	E.	0116	0278	LATIN CAPITAL LETTER E WITH DOT ABOVE
+ė	e.	0117	0279	LATIN SMALL LETTER E WITH DOT ABOVE
+Ę	E;	0118	0280	LATIN CAPITAL LETTER E WITH OGONEK
+ę	e;	0119	0281	LATIN SMALL LETTER E WITH OGONEK
+Ě	E<	011A	0282	LATIN CAPITAL LETTER E WITH CARON
+ě	e<	011B	0283	LATIN SMALL LETTER E WITH CARON
+Ĝ	G>	011C	0284	LATIN CAPITAL LETTER G WITH CIRCUMFLEX
+ĝ	g>	011D	0285	LATIN SMALL LETTER G WITH CIRCUMFLEX
+Ğ	G(	011E	0286	LATIN CAPITAL LETTER G WITH BREVE
+ğ	g(	011F	0287	LATIN SMALL LETTER G WITH BREVE
+Ġ	G.	0120	0288	LATIN CAPITAL LETTER G WITH DOT ABOVE
+ġ	g.	0121	0289	LATIN SMALL LETTER G WITH DOT ABOVE
+Ģ	G,	0122	0290	LATIN CAPITAL LETTER G WITH CEDILLA
+ģ	g,	0123	0291	LATIN SMALL LETTER G WITH CEDILLA
+Ĥ	H>	0124	0292	LATIN CAPITAL LETTER H WITH CIRCUMFLEX
+ĥ	h>	0125	0293	LATIN SMALL LETTER H WITH CIRCUMFLEX
+Ħ	H/	0126	0294	LATIN CAPITAL LETTER H WITH STROKE
+ħ	h/	0127	0295	LATIN SMALL LETTER H WITH STROKE
+Ĩ	I?	0128	0296	LATIN CAPITAL LETTER I WITH TILDE
+ĩ	i?	0129	0297	LATIN SMALL LETTER I WITH TILDE
+Ī	I-	012A	0298	LATIN CAPITAL LETTER I WITH MACRON
+ī	i-	012B	0299	LATIN SMALL LETTER I WITH MACRON
+Ĭ	I(	012C	0300	LATIN CAPITAL LETTER I WITH BREVE
+ĭ	i(	012D	0301	LATIN SMALL LETTER I WITH BREVE
+Į	I;	012E	0302	LATIN CAPITAL LETTER I WITH OGONEK
+į	i;	012F	0303	LATIN SMALL LETTER I WITH OGONEK
+İ	I.	0130	0304	LATIN CAPITAL LETTER I WITH DOT ABOVE
+ı	i.	0131	0305	LATIN SMALL LETTER DOTLESS I
+Ĳ	IJ	0132	0306	LATIN CAPITAL LIGATURE IJ
+ĳ	ij	0133	0307	LATIN SMALL LIGATURE IJ
+Ĵ	J>	0134	0308	LATIN CAPITAL LETTER J WITH CIRCUMFLEX
+ĵ	j>	0135	0309	LATIN SMALL LETTER J WITH CIRCUMFLEX
+Ķ	K,	0136	0310	LATIN CAPITAL LETTER K WITH CEDILLA
+ķ	k,	0137	0311	LATIN SMALL LETTER K WITH CEDILLA
+ĸ	kk	0138	0312	LATIN SMALL LETTER KRA
+Ĺ	L'	0139	0313	LATIN CAPITAL LETTER L WITH ACUTE
+ĺ	l'	013A	0314	LATIN SMALL LETTER L WITH ACUTE
+Ļ	L,	013B	0315	LATIN CAPITAL LETTER L WITH CEDILLA
+ļ	l,	013C	0316	LATIN SMALL LETTER L WITH CEDILLA
+Ľ	L<	013D	0317	LATIN CAPITAL LETTER L WITH CARON
+ľ	l<	013E	0318	LATIN SMALL LETTER L WITH CARON
+Ŀ	L.	013F	0319	LATIN CAPITAL LETTER L WITH MIDDLE DOT
+ŀ	l.	0140	0320	LATIN SMALL LETTER L WITH MIDDLE DOT
+Ł	L/	0141	0321	LATIN CAPITAL LETTER L WITH STROKE
+ł	l/	0142	0322	LATIN SMALL LETTER L WITH STROKE
+Ń	N'	0143	0323	LATIN CAPITAL LETTER N WITH ACUTE `
+ń	n'	0144	0324	LATIN SMALL LETTER N WITH ACUTE `
+Ņ	N,	0145	0325	LATIN CAPITAL LETTER N WITH CEDILLA `
+ņ	n,	0146	0326	LATIN SMALL LETTER N WITH CEDILLA `
+Ň	N<	0147	0327	LATIN CAPITAL LETTER N WITH CARON `
+ň	n<	0148	0328	LATIN SMALL LETTER N WITH CARON `
+ŉ	'n	0149	0329	LATIN SMALL LETTER N PRECEDED BY APOSTROPHE `
+Ŋ	NG	014A	0330	LATIN CAPITAL LETTER ENG
+ŋ	ng	014B	0331	LATIN SMALL LETTER ENG
+Ō	O-	014C	0332	LATIN CAPITAL LETTER O WITH MACRON
+ō	o-	014D	0333	LATIN SMALL LETTER O WITH MACRON
+Ŏ	O(	014E	0334	LATIN CAPITAL LETTER O WITH BREVE
+ŏ	o(	014F	0335	LATIN SMALL LETTER O WITH BREVE
+Ő	O"	0150	0336	LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+ő	o"	0151	0337	LATIN SMALL LETTER O WITH DOUBLE ACUTE
+Œ	OE	0152	0338	LATIN CAPITAL LIGATURE OE
+œ	oe	0153	0339	LATIN SMALL LIGATURE OE
+Ŕ	R'	0154	0340	LATIN CAPITAL LETTER R WITH ACUTE
+ŕ	r'	0155	0341	LATIN SMALL LETTER R WITH ACUTE
+Ŗ	R,	0156	0342	LATIN CAPITAL LETTER R WITH CEDILLA
+ŗ	r,	0157	0343	LATIN SMALL LETTER R WITH CEDILLA
+Ř	R<	0158	0344	LATIN CAPITAL LETTER R WITH CARON
+ř	r<	0159	0345	LATIN SMALL LETTER R WITH CARON
+Ś	S'	015A	0346	LATIN CAPITAL LETTER S WITH ACUTE
+ś	s'	015B	0347	LATIN SMALL LETTER S WITH ACUTE
+Ŝ	S>	015C	0348	LATIN CAPITAL LETTER S WITH CIRCUMFLEX
+ŝ	s>	015D	0349	LATIN SMALL LETTER S WITH CIRCUMFLEX
+Ş	S,	015E	0350	LATIN CAPITAL LETTER S WITH CEDILLA
+ş	s,	015F	0351	LATIN SMALL LETTER S WITH CEDILLA
+Š	S<	0160	0352	LATIN CAPITAL LETTER S WITH CARON
+š	s<	0161	0353	LATIN SMALL LETTER S WITH CARON
+Ţ	T,	0162	0354	LATIN CAPITAL LETTER T WITH CEDILLA
+ţ	t,	0163	0355	LATIN SMALL LETTER T WITH CEDILLA
+Ť	T<	0164	0356	LATIN CAPITAL LETTER T WITH CARON
+ť	t<	0165	0357	LATIN SMALL LETTER T WITH CARON
+Ŧ	T/	0166	0358	LATIN CAPITAL LETTER T WITH STROKE
+ŧ	t/	0167	0359	LATIN SMALL LETTER T WITH STROKE
+Ũ	U?	0168	0360	LATIN CAPITAL LETTER U WITH TILDE
+ũ	u?	0169	0361	LATIN SMALL LETTER U WITH TILDE
+Ū	U-	016A	0362	LATIN CAPITAL LETTER U WITH MACRON
+ū	u-	016B	0363	LATIN SMALL LETTER U WITH MACRON
+Ŭ	U(	016C	0364	LATIN CAPITAL LETTER U WITH BREVE
+ŭ	u(	016D	0365	LATIN SMALL LETTER U WITH BREVE
+Ů	U0	016E	0366	LATIN CAPITAL LETTER U WITH RING ABOVE
+ů	u0	016F	0367	LATIN SMALL LETTER U WITH RING ABOVE
+Ű	U"	0170	0368	LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+ű	u"	0171	0369	LATIN SMALL LETTER U WITH DOUBLE ACUTE
+Ų	U;	0172	0370	LATIN CAPITAL LETTER U WITH OGONEK
+ų	u;	0173	0371	LATIN SMALL LETTER U WITH OGONEK
+Ŵ	W>	0174	0372	LATIN CAPITAL LETTER W WITH CIRCUMFLEX
+ŵ	w>	0175	0373	LATIN SMALL LETTER W WITH CIRCUMFLEX
+Ŷ	Y>	0176	0374	LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
+ŷ	y>	0177	0375	LATIN SMALL LETTER Y WITH CIRCUMFLEX
+Ÿ	Y:	0178	0376	LATIN CAPITAL LETTER Y WITH DIAERESIS
+Ź	Z'	0179	0377	LATIN CAPITAL LETTER Z WITH ACUTE
+ź	z'	017A	0378	LATIN SMALL LETTER Z WITH ACUTE
+Ż	Z.	017B	0379	LATIN CAPITAL LETTER Z WITH DOT ABOVE
+ż	z.	017C	0380	LATIN SMALL LETTER Z WITH DOT ABOVE
+Ž	Z<	017D	0381	LATIN CAPITAL LETTER Z WITH CARON
+ž	z<	017E	0382	LATIN SMALL LETTER Z WITH CARON
+Ơ	O9	01A0	0416	LATIN CAPITAL LETTER O WITH HORN
+ơ	o9	01A1	0417	LATIN SMALL LETTER O WITH HORN
+Ƣ	OI	01A2	0418	LATIN CAPITAL LETTER OI
+ƣ	oi	01A3	0419	LATIN SMALL LETTER OI
+Ʀ	yr	01A6	0422	LATIN LETTER YR
+Ư	U9	01AF	0431	LATIN CAPITAL LETTER U WITH HORN
+ư	u9	01B0	0432	LATIN SMALL LETTER U WITH HORN
+Ƶ	Z/	01B5	0437	LATIN CAPITAL LETTER Z WITH STROKE
+ƶ	z/	01B6	0438	LATIN SMALL LETTER Z WITH STROKE
+Ʒ	ED	01B7	0439	LATIN CAPITAL LETTER EZH
+Ǎ	A<	01CD	0461	LATIN CAPITAL LETTER A WITH CARON
+ǎ	a<	01CE	0462	LATIN SMALL LETTER A WITH CARON
+Ǐ	I<	01CF	0463	LATIN CAPITAL LETTER I WITH CARON
+ǐ	i<	01D0	0464	LATIN SMALL LETTER I WITH CARON
+Ǒ	O<	01D1	0465	LATIN CAPITAL LETTER O WITH CARON
+ǒ	o<	01D2	0466	LATIN SMALL LETTER O WITH CARON
+Ǔ	U<	01D3	0467	LATIN CAPITAL LETTER U WITH CARON
+ǔ	u<	01D4	0468	LATIN SMALL LETTER U WITH CARON
+Ǟ	A1	01DE	0478	LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
+ǟ	a1	01DF	0479	LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
+Ǡ	A7	01E0	0480	LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
+ǡ	a7	01E1	0481	LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
+Ǣ	A3	01E2	0482	LATIN CAPITAL LETTER AE WITH MACRON
+ǣ	a3	01E3	0483	LATIN SMALL LETTER AE WITH MACRON
+Ǥ	G/	01E4	0484	LATIN CAPITAL LETTER G WITH STROKE
+ǥ	g/	01E5	0485	LATIN SMALL LETTER G WITH STROKE
+Ǧ	G<	01E6	0486	LATIN CAPITAL LETTER G WITH CARON
+ǧ	g<	01E7	0487	LATIN SMALL LETTER G WITH CARON
+Ǩ	K<	01E8	0488	LATIN CAPITAL LETTER K WITH CARON
+ǩ	k<	01E9	0489	LATIN SMALL LETTER K WITH CARON
+Ǫ	O;	01EA	0490	LATIN CAPITAL LETTER O WITH OGONEK
+ǫ	o;	01EB	0491	LATIN SMALL LETTER O WITH OGONEK
+Ǭ	O1	01EC	0492	LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
+ǭ	o1	01ED	0493	LATIN SMALL LETTER O WITH OGONEK AND MACRON
+Ǯ	EZ	01EE	0494	LATIN CAPITAL LETTER EZH WITH CARON
+ǯ	ez	01EF	0495	LATIN SMALL LETTER EZH WITH CARON
+ǰ	j<	01F0	0496	LATIN SMALL LETTER J WITH CARON
+Ǵ	G'	01F4	0500	LATIN CAPITAL LETTER G WITH ACUTE
+ǵ	g'	01F5	0501	LATIN SMALL LETTER G WITH ACUTE
+ʿ	;S	02BF	0703	MODIFIER LETTER LEFT HALF RING
+ˇ	'<	02C7	0711	CARON
+˘	'(	02D8	0728	BREVE
+˙	'.	02D9	0729	DOT ABOVE
+˚	'0	02DA	0730	RING ABOVE
+˛	';	02DB	0731	OGONEK
+˝	'"	02DD	0733	DOUBLE ACUTE ACCENT
+Ά	A%	0386	0902	GREEK CAPITAL LETTER ALPHA WITH TONOS
+Έ	E%	0388	0904	GREEK CAPITAL LETTER EPSILON WITH TONOS
+Ή	Y%	0389	0905	GREEK CAPITAL LETTER ETA WITH TONOS
+Ί	I%	038A	0906	GREEK CAPITAL LETTER IOTA WITH TONOS
+Ό	O%	038C	0908	GREEK CAPITAL LETTER OMICRON WITH TONOS
+Ύ	U%	038E	0910	GREEK CAPITAL LETTER UPSILON WITH TONOS
+Ώ	W%	038F	0911	GREEK CAPITAL LETTER OMEGA WITH TONOS
+ΐ	i3	0390	0912	GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
+Α	A*	0391	0913	GREEK CAPITAL LETTER ALPHA
+Β	B*	0392	0914	GREEK CAPITAL LETTER BETA
+Γ	G*	0393	0915	GREEK CAPITAL LETTER GAMMA
+Δ	D*	0394	0916	GREEK CAPITAL LETTER DELTA
+Ε	E*	0395	0917	GREEK CAPITAL LETTER EPSILON
+Ζ	Z*	0396	0918	GREEK CAPITAL LETTER ZETA
+Η	Y*	0397	0919	GREEK CAPITAL LETTER ETA
+Θ	H*	0398	0920	GREEK CAPITAL LETTER THETA
+Ι	I*	0399	0921	GREEK CAPITAL LETTER IOTA
+Κ	K*	039A	0922	GREEK CAPITAL LETTER KAPPA
+Λ	L*	039B	0923	GREEK CAPITAL LETTER LAMDA
+Μ	M*	039C	0924	GREEK CAPITAL LETTER MU
+Ν	N*	039D	0925	GREEK CAPITAL LETTER NU
+Ξ	C*	039E	0926	GREEK CAPITAL LETTER XI
+Ο	O*	039F	0927	GREEK CAPITAL LETTER OMICRON
+Π	P*	03A0	0928	GREEK CAPITAL LETTER PI
+Ρ	R*	03A1	0929	GREEK CAPITAL LETTER RHO
+Σ	S*	03A3	0931	GREEK CAPITAL LETTER SIGMA
+Τ	T*	03A4	0932	GREEK CAPITAL LETTER TAU
+Υ	U*	03A5	0933	GREEK CAPITAL LETTER UPSILON
+Φ	F*	03A6	0934	GREEK CAPITAL LETTER PHI
+Χ	X*	03A7	0935	GREEK CAPITAL LETTER CHI
+Ψ	Q*	03A8	0936	GREEK CAPITAL LETTER PSI
+Ω	W*	03A9	0937	GREEK CAPITAL LETTER OMEGA
+Ϊ	J*	03AA	0938	GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
+Ϋ	V*	03AB	0939	GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
+ά	a%	03AC	0940	GREEK SMALL LETTER ALPHA WITH TONOS
+έ	e%	03AD	0941	GREEK SMALL LETTER EPSILON WITH TONOS
+ή	y%	03AE	0942	GREEK SMALL LETTER ETA WITH TONOS
+ί	i%	03AF	0943	GREEK SMALL LETTER IOTA WITH TONOS
+ΰ	u3	03B0	0944	GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
+α	a*	03B1	0945	GREEK SMALL LETTER ALPHA
+β	b*	03B2	0946	GREEK SMALL LETTER BETA
+γ	g*	03B3	0947	GREEK SMALL LETTER GAMMA
+δ	d*	03B4	0948	GREEK SMALL LETTER DELTA
+ε	e*	03B5	0949	GREEK SMALL LETTER EPSILON
+ζ	z*	03B6	0950	GREEK SMALL LETTER ZETA
+η	y*	03B7	0951	GREEK SMALL LETTER ETA
+θ	h*	03B8	0952	GREEK SMALL LETTER THETA
+ι	i*	03B9	0953	GREEK SMALL LETTER IOTA
+κ	k*	03BA	0954	GREEK SMALL LETTER KAPPA
+λ	l*	03BB	0955	GREEK SMALL LETTER LAMDA
+μ	m*	03BC	0956	GREEK SMALL LETTER MU
+ν	n*	03BD	0957	GREEK SMALL LETTER NU
+ξ	c*	03BE	0958	GREEK SMALL LETTER XI
+ο	o*	03BF	0959	GREEK SMALL LETTER OMICRON
+π	p*	03C0	0960	GREEK SMALL LETTER PI
+ρ	r*	03C1	0961	GREEK SMALL LETTER RHO
+ς	*s	03C2	0962	GREEK SMALL LETTER FINAL SIGMA
+σ	s*	03C3	0963	GREEK SMALL LETTER SIGMA
+τ	t*	03C4	0964	GREEK SMALL LETTER TAU
+υ	u*	03C5	0965	GREEK SMALL LETTER UPSILON
+φ	f*	03C6	0966	GREEK SMALL LETTER PHI
+χ	x*	03C7	0967	GREEK SMALL LETTER CHI
+ψ	q*	03C8	0968	GREEK SMALL LETTER PSI
+ω	w*	03C9	0969	GREEK SMALL LETTER OMEGA
+ϊ	j*	03CA	0970	GREEK SMALL LETTER IOTA WITH DIALYTIKA
+ϋ	v*	03CB	0971	GREEK SMALL LETTER UPSILON WITH DIALYTIKA
+ό	o%	03CC	0972	GREEK SMALL LETTER OMICRON WITH TONOS
+ύ	u%	03CD	0973	GREEK SMALL LETTER UPSILON WITH TONOS
+ώ	w%	03CE	0974	GREEK SMALL LETTER OMEGA WITH TONOS
+Ϙ	'G	03D8	0984	GREEK LETTER ARCHAIC KOPPA
+ϙ	,G	03D9	0985	GREEK SMALL LETTER ARCHAIC KOPPA
+Ϛ	T3	03DA	0986	GREEK LETTER STIGMA
+ϛ	t3	03DB	0987	GREEK SMALL LETTER STIGMA
+Ϝ	M3	03DC	0988	GREEK LETTER DIGAMMA
+ϝ	m3	03DD	0989	GREEK SMALL LETTER DIGAMMA
+Ϟ	K3	03DE	0990	GREEK LETTER KOPPA
+ϟ	k3	03DF	0991	GREEK SMALL LETTER KOPPA
+Ϡ	P3	03E0	0992	GREEK LETTER SAMPI
+ϡ	p3	03E1	0993	GREEK SMALL LETTER SAMPI
+ϴ	'%	03F4	1012	GREEK CAPITAL THETA SYMBOL
+ϵ	j3	03F5	1013	GREEK LUNATE EPSILON SYMBOL
+Ё	IO	0401	1025	CYRILLIC CAPITAL LETTER IO
+Ђ	D%	0402	1026	CYRILLIC CAPITAL LETTER DJE
+Ѓ	G%	0403	1027	CYRILLIC CAPITAL LETTER GJE
+Є	IE	0404	1028	CYRILLIC CAPITAL LETTER UKRAINIAN IE
+Ѕ	DS	0405	1029	CYRILLIC CAPITAL LETTER DZE
+І	II	0406	1030	CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
+Ї	YI	0407	1031	CYRILLIC CAPITAL LETTER YI
+Ј	J%	0408	1032	CYRILLIC CAPITAL LETTER JE
+Љ	LJ	0409	1033	CYRILLIC CAPITAL LETTER LJE
+Њ	NJ	040A	1034	CYRILLIC CAPITAL LETTER NJE
+Ћ	Ts	040B	1035	CYRILLIC CAPITAL LETTER TSHE
+Ќ	KJ	040C	1036	CYRILLIC CAPITAL LETTER KJE
+Ў	V%	040E	1038	CYRILLIC CAPITAL LETTER SHORT U
+Џ	DZ	040F	1039	CYRILLIC CAPITAL LETTER DZHE
+А	A=	0410	1040	CYRILLIC CAPITAL LETTER A
+Б	B=	0411	1041	CYRILLIC CAPITAL LETTER BE
+В	V=	0412	1042	CYRILLIC CAPITAL LETTER VE
+Г	G=	0413	1043	CYRILLIC CAPITAL LETTER GHE
+Д	D=	0414	1044	CYRILLIC CAPITAL LETTER DE
+Е	E=	0415	1045	CYRILLIC CAPITAL LETTER IE
+Ж	Z%	0416	1046	CYRILLIC CAPITAL LETTER ZHE
+З	Z=	0417	1047	CYRILLIC CAPITAL LETTER ZE
+И	I=	0418	1048	CYRILLIC CAPITAL LETTER I
+Й	J=	0419	1049	CYRILLIC CAPITAL LETTER SHORT I
+К	K=	041A	1050	CYRILLIC CAPITAL LETTER KA
+Л	L=	041B	1051	CYRILLIC CAPITAL LETTER EL
+М	M=	041C	1052	CYRILLIC CAPITAL LETTER EM
+Н	N=	041D	1053	CYRILLIC CAPITAL LETTER EN
+О	O=	041E	1054	CYRILLIC CAPITAL LETTER O
+П	P=	041F	1055	CYRILLIC CAPITAL LETTER PE
+Р	R=	0420	1056	CYRILLIC CAPITAL LETTER ER
+С	S=	0421	1057	CYRILLIC CAPITAL LETTER ES
+Т	T=	0422	1058	CYRILLIC CAPITAL LETTER TE
+У	U=	0423	1059	CYRILLIC CAPITAL LETTER U
+Ф	F=	0424	1060	CYRILLIC CAPITAL LETTER EF
+Х	H=	0425	1061	CYRILLIC CAPITAL LETTER HA
+Ц	C=	0426	1062	CYRILLIC CAPITAL LETTER TSE
+Ч	C%	0427	1063	CYRILLIC CAPITAL LETTER CHE
+Ш	S%	0428	1064	CYRILLIC CAPITAL LETTER SHA
+Щ	Sc	0429	1065	CYRILLIC CAPITAL LETTER SHCHA
+Ъ	="	042A	1066	CYRILLIC CAPITAL LETTER HARD SIGN
+Ы	Y=	042B	1067	CYRILLIC CAPITAL LETTER YERU
+Ь	%"	042C	1068	CYRILLIC CAPITAL LETTER SOFT SIGN
+Э	JE	042D	1069	CYRILLIC CAPITAL LETTER E
+Ю	JU	042E	1070	CYRILLIC CAPITAL LETTER YU
+Я	JA	042F	1071	CYRILLIC CAPITAL LETTER YA
+а	a=	0430	1072	CYRILLIC SMALL LETTER A
+б	b=	0431	1073	CYRILLIC SMALL LETTER BE
+в	v=	0432	1074	CYRILLIC SMALL LETTER VE
+г	g=	0433	1075	CYRILLIC SMALL LETTER GHE
+д	d=	0434	1076	CYRILLIC SMALL LETTER DE
+е	e=	0435	1077	CYRILLIC SMALL LETTER IE
+ж	z%	0436	1078	CYRILLIC SMALL LETTER ZHE
+з	z=	0437	1079	CYRILLIC SMALL LETTER ZE
+и	i=	0438	1080	CYRILLIC SMALL LETTER I
+й	j=	0439	1081	CYRILLIC SMALL LETTER SHORT I
+к	k=	043A	1082	CYRILLIC SMALL LETTER KA
+л	l=	043B	1083	CYRILLIC SMALL LETTER EL
+м	m=	043C	1084	CYRILLIC SMALL LETTER EM
+н	n=	043D	1085	CYRILLIC SMALL LETTER EN
+о	o=	043E	1086	CYRILLIC SMALL LETTER O
+п	p=	043F	1087	CYRILLIC SMALL LETTER PE
+р	r=	0440	1088	CYRILLIC SMALL LETTER ER
+с	s=	0441	1089	CYRILLIC SMALL LETTER ES
+т	t=	0442	1090	CYRILLIC SMALL LETTER TE
+у	u=	0443	1091	CYRILLIC SMALL LETTER U
+ф	f=	0444	1092	CYRILLIC SMALL LETTER EF
+х	h=	0445	1093	CYRILLIC SMALL LETTER HA
+ц	c=	0446	1094	CYRILLIC SMALL LETTER TSE
+ч	c%	0447	1095	CYRILLIC SMALL LETTER CHE
+ш	s%	0448	1096	CYRILLIC SMALL LETTER SHA
+щ	sc	0449	1097	CYRILLIC SMALL LETTER SHCHA
+ъ	='	044A	1098	CYRILLIC SMALL LETTER HARD SIGN
+ы	y=	044B	1099	CYRILLIC SMALL LETTER YERU
+ь	%'	044C	1100	CYRILLIC SMALL LETTER SOFT SIGN
+э	je	044D	1101	CYRILLIC SMALL LETTER E
+ю	ju	044E	1102	CYRILLIC SMALL LETTER YU
+я	ja	044F	1103	CYRILLIC SMALL LETTER YA
+ё	io	0451	1105	CYRILLIC SMALL LETTER IO
+ђ	d%	0452	1106	CYRILLIC SMALL LETTER DJE
+ѓ	g%	0453	1107	CYRILLIC SMALL LETTER GJE
+є	ie	0454	1108	CYRILLIC SMALL LETTER UKRAINIAN IE
+ѕ	ds	0455	1109	CYRILLIC SMALL LETTER DZE
+і	ii	0456	1110	CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
+ї	yi	0457	1111	CYRILLIC SMALL LETTER YI
+ј	j%	0458	1112	CYRILLIC SMALL LETTER JE
+љ	lj	0459	1113	CYRILLIC SMALL LETTER LJE
+њ	nj	045A	1114	CYRILLIC SMALL LETTER NJE
+ћ	ts	045B	1115	CYRILLIC SMALL LETTER TSHE
+ќ	kj	045C	1116	CYRILLIC SMALL LETTER KJE
+ў	v%	045E	1118	CYRILLIC SMALL LETTER SHORT U
+џ	dz	045F	1119	CYRILLIC SMALL LETTER DZHE
+Ѣ	Y3	0462	1122	CYRILLIC CAPITAL LETTER YAT
+ѣ	y3	0463	1123	CYRILLIC SMALL LETTER YAT
+Ѫ	O3	046A	1130	CYRILLIC CAPITAL LETTER BIG YUS
+ѫ	o3	046B	1131	CYRILLIC SMALL LETTER BIG YUS
+Ѳ	F3	0472	1138	CYRILLIC CAPITAL LETTER FITA
+ѳ	f3	0473	1139	CYRILLIC SMALL LETTER FITA
+Ѵ	V3	0474	1140	CYRILLIC CAPITAL LETTER IZHITSA
+ѵ	v3	0475	1141	CYRILLIC SMALL LETTER IZHITSA
+Ҁ	C3	0480	1152	CYRILLIC CAPITAL LETTER KOPPA
+ҁ	c3	0481	1153	CYRILLIC SMALL LETTER KOPPA
+Ґ	G3	0490	1168	CYRILLIC CAPITAL LETTER GHE WITH UPTURN
+ґ	g3	0491	1169	CYRILLIC SMALL LETTER GHE WITH UPTURN
+א	A+	05D0	1488	HEBREW LETTER ALEF
+ב	B+	05D1	1489	HEBREW LETTER BET
+ג	G+	05D2	1490	HEBREW LETTER GIMEL
+ד	D+	05D3	1491	HEBREW LETTER DALET
+ה	H+	05D4	1492	HEBREW LETTER HE
+ו	W+	05D5	1493	HEBREW LETTER VAV
+ז	Z+	05D6	1494	HEBREW LETTER ZAYIN
+ח	X+	05D7	1495	HEBREW LETTER HET
+ט	Tj	05D8	1496	HEBREW LETTER TET
+י	J+	05D9	1497	HEBREW LETTER YOD
+ך	K%	05DA	1498	HEBREW LETTER FINAL KAF
+כ	K+	05DB	1499	HEBREW LETTER KAF
+ל	L+	05DC	1500	HEBREW LETTER LAMED
+ם	M%	05DD	1501	HEBREW LETTER FINAL MEM
+מ	M+	05DE	1502	HEBREW LETTER MEM
+ן	N%	05DF	1503	HEBREW LETTER FINAL NUN `
+נ	N+	05E0	1504	HEBREW LETTER NUN `
+ס	S+	05E1	1505	HEBREW LETTER SAMEKH
+ע	E+	05E2	1506	HEBREW LETTER AYIN
+ף	P%	05E3	1507	HEBREW LETTER FINAL PE
+פ	P+	05E4	1508	HEBREW LETTER PE
+ץ	Zj	05E5	1509	HEBREW LETTER FINAL TSADI
+צ	ZJ	05E6	1510	HEBREW LETTER TSADI
+ק	Q+	05E7	1511	HEBREW LETTER QOF
+ר	R+	05E8	1512	HEBREW LETTER RESH
+ש	Sh	05E9	1513	HEBREW LETTER SHIN
+ת	T+	05EA	1514	HEBREW LETTER TAV
+،	,+	060C	1548	ARABIC COMMA
+؛	;+	061B	1563	ARABIC SEMICOLON
+؟	?+	061F	1567	ARABIC QUESTION MARK
+ء	H'	0621	1569	ARABIC LETTER HAMZA
+آ	aM	0622	1570	ARABIC LETTER ALEF WITH MADDA ABOVE
+أ	aH	0623	1571	ARABIC LETTER ALEF WITH HAMZA ABOVE
+ؤ	wH	0624	1572	ARABIC LETTER WAW WITH HAMZA ABOVE
+إ	ah	0625	1573	ARABIC LETTER ALEF WITH HAMZA BELOW
+ئ	yH	0626	1574	ARABIC LETTER YEH WITH HAMZA ABOVE
+ا	a+	0627	1575	ARABIC LETTER ALEF
+ب	b+	0628	1576	ARABIC LETTER BEH
+ة	tm	0629	1577	ARABIC LETTER TEH MARBUTA
+ت	t+	062A	1578	ARABIC LETTER TEH
+ث	tk	062B	1579	ARABIC LETTER THEH
+ج	g+	062C	1580	ARABIC LETTER JEEM
+ح	hk	062D	1581	ARABIC LETTER HAH
+خ	x+	062E	1582	ARABIC LETTER KHAH
+د	d+	062F	1583	ARABIC LETTER DAL
+ذ	dk	0630	1584	ARABIC LETTER THAL
+ر	r+	0631	1585	ARABIC LETTER REH
+ز	z+	0632	1586	ARABIC LETTER ZAIN
+س	s+	0633	1587	ARABIC LETTER SEEN
+ش	sn	0634	1588	ARABIC LETTER SHEEN
+ص	c+	0635	1589	ARABIC LETTER SAD
+ض	dd	0636	1590	ARABIC LETTER DAD
+ط	tj	0637	1591	ARABIC LETTER TAH
+ظ	zH	0638	1592	ARABIC LETTER ZAH
+ع	e+	0639	1593	ARABIC LETTER AIN
+غ	i+	063A	1594	ARABIC LETTER GHAIN
+ـ	++	0640	1600	ARABIC TATWEEL
+ف	f+	0641	1601	ARABIC LETTER FEH
+ق	q+	0642	1602	ARABIC LETTER QAF
+ك	k+	0643	1603	ARABIC LETTER KAF
+ل	l+	0644	1604	ARABIC LETTER LAM
+م	m+	0645	1605	ARABIC LETTER MEEM
+ن	n+	0646	1606	ARABIC LETTER NOON
+ه	h+	0647	1607	ARABIC LETTER HEH
+و	w+	0648	1608	ARABIC LETTER WAW
+ى	j+	0649	1609	ARABIC LETTER ALEF MAKSURA
+ي	y+	064A	1610	ARABIC LETTER YEH
+ً	:+	064B	1611	ARABIC FATHATAN
+ٌ	"+	064C	1612	ARABIC DAMMATAN
+ٍ	=+	064D	1613	ARABIC KASRATAN
+َ	/+	064E	1614	ARABIC FATHA
+ُ	'+	064F	1615	ARABIC DAMMA
+ِ	1+	0650	1616	ARABIC KASRA
+ّ	3+	0651	1617	ARABIC SHADDA
+ْ	0+	0652	1618	ARABIC SUKUN
+ٰ	aS	0670	1648	ARABIC LETTER SUPERSCRIPT ALEF
+پ	p+	067E	1662	ARABIC LETTER PEH
+ڤ	v+	06A4	1700	ARABIC LETTER VEH
+گ	gf	06AF	1711	ARABIC LETTER GAF
+۰	0a	06F0	1776	EXTENDED ARABIC-INDIC DIGIT ZERO
+۱	1a	06F1	1777	EXTENDED ARABIC-INDIC DIGIT ONE
+۲	2a	06F2	1778	EXTENDED ARABIC-INDIC DIGIT TWO
+۳	3a	06F3	1779	EXTENDED ARABIC-INDIC DIGIT THREE
+۴	4a	06F4	1780	EXTENDED ARABIC-INDIC DIGIT FOUR
+۵	5a	06F5	1781	EXTENDED ARABIC-INDIC DIGIT FIVE
+۶	6a	06F6	1782	EXTENDED ARABIC-INDIC DIGIT SIX
+۷	7a	06F7	1783	EXTENDED ARABIC-INDIC DIGIT SEVEN
+۸	8a	06F8	1784	EXTENDED ARABIC-INDIC DIGIT EIGHT
+۹	9a	06F9	1785	EXTENDED ARABIC-INDIC DIGIT NINE
+Ḃ	B.	1E02	7682	LATIN CAPITAL LETTER B WITH DOT ABOVE
+ḃ	b.	1E03	7683	LATIN SMALL LETTER B WITH DOT ABOVE
+Ḇ	B_	1E06	7686	LATIN CAPITAL LETTER B WITH LINE BELOW
+ḇ	b_	1E07	7687	LATIN SMALL LETTER B WITH LINE BELOW
+Ḋ	D.	1E0A	7690	LATIN CAPITAL LETTER D WITH DOT ABOVE
+ḋ	d.	1E0B	7691	LATIN SMALL LETTER D WITH DOT ABOVE
+Ḏ	D_	1E0E	7694	LATIN CAPITAL LETTER D WITH LINE BELOW
+ḏ	d_	1E0F	7695	LATIN SMALL LETTER D WITH LINE BELOW
+Ḑ	D,	1E10	7696	LATIN CAPITAL LETTER D WITH CEDILLA
+ḑ	d,	1E11	7697	LATIN SMALL LETTER D WITH CEDILLA
+Ḟ	F.	1E1E	7710	LATIN CAPITAL LETTER F WITH DOT ABOVE
+ḟ	f.	1E1F	7711	LATIN SMALL LETTER F WITH DOT ABOVE
+Ḡ	G-	1E20	7712	LATIN CAPITAL LETTER G WITH MACRON
+ḡ	g-	1E21	7713	LATIN SMALL LETTER G WITH MACRON
+Ḣ	H.	1E22	7714	LATIN CAPITAL LETTER H WITH DOT ABOVE
+ḣ	h.	1E23	7715	LATIN SMALL LETTER H WITH DOT ABOVE
+Ḧ	H:	1E26	7718	LATIN CAPITAL LETTER H WITH DIAERESIS
+ḧ	h:	1E27	7719	LATIN SMALL LETTER H WITH DIAERESIS
+Ḩ	H,	1E28	7720	LATIN CAPITAL LETTER H WITH CEDILLA
+ḩ	h,	1E29	7721	LATIN SMALL LETTER H WITH CEDILLA
+Ḱ	K'	1E30	7728	LATIN CAPITAL LETTER K WITH ACUTE
+ḱ	k'	1E31	7729	LATIN SMALL LETTER K WITH ACUTE
+Ḵ	K_	1E34	7732	LATIN CAPITAL LETTER K WITH LINE BELOW
+ḵ	k_	1E35	7733	LATIN SMALL LETTER K WITH LINE BELOW
+Ḻ	L_	1E3A	7738	LATIN CAPITAL LETTER L WITH LINE BELOW
+ḻ	l_	1E3B	7739	LATIN SMALL LETTER L WITH LINE BELOW
+Ḿ	M'	1E3E	7742	LATIN CAPITAL LETTER M WITH ACUTE
+ḿ	m'	1E3F	7743	LATIN SMALL LETTER M WITH ACUTE
+Ṁ	M.	1E40	7744	LATIN CAPITAL LETTER M WITH DOT ABOVE
+ṁ	m.	1E41	7745	LATIN SMALL LETTER M WITH DOT ABOVE
+Ṅ	N.	1E44	7748	LATIN CAPITAL LETTER N WITH DOT ABOVE `
+ṅ	n.	1E45	7749	LATIN SMALL LETTER N WITH DOT ABOVE `
+Ṉ	N_	1E48	7752	LATIN CAPITAL LETTER N WITH LINE BELOW `
+ṉ	n_	1E49	7753	LATIN SMALL LETTER N WITH LINE BELOW `
+Ṕ	P'	1E54	7764	LATIN CAPITAL LETTER P WITH ACUTE
+ṕ	p'	1E55	7765	LATIN SMALL LETTER P WITH ACUTE
+Ṗ	P.	1E56	7766	LATIN CAPITAL LETTER P WITH DOT ABOVE
+ṗ	p.	1E57	7767	LATIN SMALL LETTER P WITH DOT ABOVE
+Ṙ	R.	1E58	7768	LATIN CAPITAL LETTER R WITH DOT ABOVE
+ṙ	r.	1E59	7769	LATIN SMALL LETTER R WITH DOT ABOVE
+Ṟ	R_	1E5E	7774	LATIN CAPITAL LETTER R WITH LINE BELOW
+ṟ	r_	1E5F	7775	LATIN SMALL LETTER R WITH LINE BELOW
+Ṡ	S.	1E60	7776	LATIN CAPITAL LETTER S WITH DOT ABOVE
+ṡ	s.	1E61	7777	LATIN SMALL LETTER S WITH DOT ABOVE
+Ṫ	T.	1E6A	7786	LATIN CAPITAL LETTER T WITH DOT ABOVE
+ṫ	t.	1E6B	7787	LATIN SMALL LETTER T WITH DOT ABOVE
+Ṯ	T_	1E6E	7790	LATIN CAPITAL LETTER T WITH LINE BELOW
+ṯ	t_	1E6F	7791	LATIN SMALL LETTER T WITH LINE BELOW
+Ṽ	V?	1E7C	7804	LATIN CAPITAL LETTER V WITH TILDE
+ṽ	v?	1E7D	7805	LATIN SMALL LETTER V WITH TILDE
+Ẁ	W!	1E80	7808	LATIN CAPITAL LETTER W WITH GRAVE
+ẁ	w!	1E81	7809	LATIN SMALL LETTER W WITH GRAVE
+Ẃ	W'	1E82	7810	LATIN CAPITAL LETTER W WITH ACUTE
+ẃ	w'	1E83	7811	LATIN SMALL LETTER W WITH ACUTE
+Ẅ	W:	1E84	7812	LATIN CAPITAL LETTER W WITH DIAERESIS
+ẅ	w:	1E85	7813	LATIN SMALL LETTER W WITH DIAERESIS
+Ẇ	W.	1E86	7814	LATIN CAPITAL LETTER W WITH DOT ABOVE
+ẇ	w.	1E87	7815	LATIN SMALL LETTER W WITH DOT ABOVE
+Ẋ	X.	1E8A	7818	LATIN CAPITAL LETTER X WITH DOT ABOVE
+ẋ	x.	1E8B	7819	LATIN SMALL LETTER X WITH DOT ABOVE
+Ẍ	X:	1E8C	7820	LATIN CAPITAL LETTER X WITH DIAERESIS
+ẍ	x:	1E8D	7821	LATIN SMALL LETTER X WITH DIAERESIS
+Ẏ	Y.	1E8E	7822	LATIN CAPITAL LETTER Y WITH DOT ABOVE
+ẏ	y.	1E8F	7823	LATIN SMALL LETTER Y WITH DOT ABOVE
+Ẑ	Z>	1E90	7824	LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
+ẑ	z>	1E91	7825	LATIN SMALL LETTER Z WITH CIRCUMFLEX
+Ẕ	Z_	1E94	7828	LATIN CAPITAL LETTER Z WITH LINE BELOW
+ẕ	z_	1E95	7829	LATIN SMALL LETTER Z WITH LINE BELOW
+ẖ	h_	1E96	7830	LATIN SMALL LETTER H WITH LINE BELOW
+ẗ	t:	1E97	7831	LATIN SMALL LETTER T WITH DIAERESIS
+ẘ	w0	1E98	7832	LATIN SMALL LETTER W WITH RING ABOVE
+ẙ	y0	1E99	7833	LATIN SMALL LETTER Y WITH RING ABOVE
+Ả	A2	1EA2	7842	LATIN CAPITAL LETTER A WITH HOOK ABOVE
+ả	a2	1EA3	7843	LATIN SMALL LETTER A WITH HOOK ABOVE
+Ẻ	E2	1EBA	7866	LATIN CAPITAL LETTER E WITH HOOK ABOVE
+ẻ	e2	1EBB	7867	LATIN SMALL LETTER E WITH HOOK ABOVE
+Ẽ	E?	1EBC	7868	LATIN CAPITAL LETTER E WITH TILDE
+ẽ	e?	1EBD	7869	LATIN SMALL LETTER E WITH TILDE
+Ỉ	I2	1EC8	7880	LATIN CAPITAL LETTER I WITH HOOK ABOVE
+ỉ	i2	1EC9	7881	LATIN SMALL LETTER I WITH HOOK ABOVE
+Ỏ	O2	1ECE	7886	LATIN CAPITAL LETTER O WITH HOOK ABOVE
+ỏ	o2	1ECF	7887	LATIN SMALL LETTER O WITH HOOK ABOVE
+Ủ	U2	1EE6	7910	LATIN CAPITAL LETTER U WITH HOOK ABOVE
+ủ	u2	1EE7	7911	LATIN SMALL LETTER U WITH HOOK ABOVE
+Ỳ	Y!	1EF2	7922	LATIN CAPITAL LETTER Y WITH GRAVE
+ỳ	y!	1EF3	7923	LATIN SMALL LETTER Y WITH GRAVE
+Ỷ	Y2	1EF6	7926	LATIN CAPITAL LETTER Y WITH HOOK ABOVE
+ỷ	y2	1EF7	7927	LATIN SMALL LETTER Y WITH HOOK ABOVE
+Ỹ	Y?	1EF8	7928	LATIN CAPITAL LETTER Y WITH TILDE
+ỹ	y?	1EF9	7929	LATIN SMALL LETTER Y WITH TILDE
+ἀ	;'	1F00	7936	GREEK SMALL LETTER ALPHA WITH PSILI
+ἁ	,'	1F01	7937	GREEK SMALL LETTER ALPHA WITH DASIA
+ἂ	;!	1F02	7938	GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
+ἃ	,!	1F03	7939	GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
+ἄ	?;	1F04	7940	GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
+ἅ	?,	1F05	7941	GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
+ἆ	!:	1F06	7942	GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
+ἇ	?:	1F07	7943	GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
+ 	1N	2002	8194	EN SPACE
+ 	1M	2003	8195	EM SPACE
+ 	3M	2004	8196	THREE-PER-EM SPACE
+ 	4M	2005	8197	FOUR-PER-EM SPACE
+ 	6M	2006	8198	SIX-PER-EM SPACE
+ 	1T	2009	8201	THIN SPACE
+ 	1H	200A	8202	HAIR SPACE
+‐	-1	2010	8208	HYPHEN
+–	-N	2013	8211	EN DASH `
+—	-M	2014	8212	EM DASH
+―	-3	2015	8213	HORIZONTAL BAR
+‖	!2	2016	8214	DOUBLE VERTICAL LINE
+‗	=2	2017	8215	DOUBLE LOW LINE
+‘	'6	2018	8216	LEFT SINGLE QUOTATION MARK
+’	'9	2019	8217	RIGHT SINGLE QUOTATION MARK
+‚	.9	201A	8218	SINGLE LOW-9 QUOTATION MARK
+‛	9'	201B	8219	SINGLE HIGH-REVERSED-9 QUOTATION MARK
+“	"6	201C	8220	LEFT DOUBLE QUOTATION MARK
+”	"9	201D	8221	RIGHT DOUBLE QUOTATION MARK
+„	:9	201E	8222	DOUBLE LOW-9 QUOTATION MARK
+‟	9"	201F	8223	DOUBLE HIGH-REVERSED-9 QUOTATION MARK
+†	/-	2020	8224	DAGGER
+‡	/=	2021	8225	DOUBLE DAGGER
+‥	..	2025	8229	TWO DOT LEADER
+‰	%0	2030	8240	PER MILLE SIGN
+′	1'	2032	8242	PRIME
+″	2'	2033	8243	DOUBLE PRIME
+‴	3'	2034	8244	TRIPLE PRIME
+‵	1"	2035	8245	REVERSED PRIME
+‶	2"	2036	8246	REVERSED DOUBLE PRIME
+‷	3"	2037	8247	REVERSED TRIPLE PRIME
+‸	Ca	2038	8248	CARET
+‹	<1	2039	8249	SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+›	>1	203A	8250	SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+※	:X	203B	8251	REFERENCE MARK
+‾	'-	203E	8254	OVERLINE
+⁄	/f	2044	8260	FRACTION SLASH
+⁰	0S	2070	8304	SUPERSCRIPT ZERO
+⁴	4S	2074	8308	SUPERSCRIPT FOUR
+⁵	5S	2075	8309	SUPERSCRIPT FIVE
+⁶	6S	2076	8310	SUPERSCRIPT SIX
+⁷	7S	2077	8311	SUPERSCRIPT SEVEN
+⁸	8S	2078	8312	SUPERSCRIPT EIGHT
+⁹	9S	2079	8313	SUPERSCRIPT NINE
+⁺	+S	207A	8314	SUPERSCRIPT PLUS SIGN
+⁻	-S	207B	8315	SUPERSCRIPT MINUS
+⁼	=S	207C	8316	SUPERSCRIPT EQUALS SIGN
+⁽	(S	207D	8317	SUPERSCRIPT LEFT PARENTHESIS
+⁾	)S	207E	8318	SUPERSCRIPT RIGHT PARENTHESIS
+ⁿ	nS	207F	8319	SUPERSCRIPT LATIN SMALL LETTER N `
+₀	0s	2080	8320	SUBSCRIPT ZERO
+₁	1s	2081	8321	SUBSCRIPT ONE
+₂	2s	2082	8322	SUBSCRIPT TWO
+₃	3s	2083	8323	SUBSCRIPT THREE
+₄	4s	2084	8324	SUBSCRIPT FOUR
+₅	5s	2085	8325	SUBSCRIPT FIVE
+₆	6s	2086	8326	SUBSCRIPT SIX
+₇	7s	2087	8327	SUBSCRIPT SEVEN
+₈	8s	2088	8328	SUBSCRIPT EIGHT
+₉	9s	2089	8329	SUBSCRIPT NINE
+₊	+s	208A	8330	SUBSCRIPT PLUS SIGN
+₋	-s	208B	8331	SUBSCRIPT MINUS
+₌	=s	208C	8332	SUBSCRIPT EQUALS SIGN
+₍	(s	208D	8333	SUBSCRIPT LEFT PARENTHESIS
+₎	)s	208E	8334	SUBSCRIPT RIGHT PARENTHESIS
+₤	Li	20A4	8356	LIRA SIGN
+₧	Pt	20A7	8359	PESETA SIGN
+₩	W=	20A9	8361	WON SIGN
+€	Eu	20AC	8364	EURO SIGN
+℃	oC	2103	8451	DEGREE CELSIUS
+℅	co	2105	8453	CARE OF
+℉	oF	2109	8457	DEGREE FAHRENHEIT
+№	N0	2116	8470	NUMERO SIGN
+℗	PO	2117	8471	SOUND RECORDING COPYRIGHT
+℞	Rx	211E	8478	PRESCRIPTION TAKE
+℠	SM	2120	8480	SERVICE MARK
+™	TM	2122	8482	TRADE MARK SIGN
+Ω	Om	2126	8486	OHM SIGN
+Å	AO	212B	8491	ANGSTROM SIGN
+⅓	13	2153	8531	VULGAR FRACTION ONE THIRD
+⅔	23	2154	8532	VULGAR FRACTION TWO THIRDS
+⅕	15	2155	8533	VULGAR FRACTION ONE FIFTH
+⅖	25	2156	8534	VULGAR FRACTION TWO FIFTHS
+⅗	35	2157	8535	VULGAR FRACTION THREE FIFTHS
+⅘	45	2158	8536	VULGAR FRACTION FOUR FIFTHS
+⅙	16	2159	8537	VULGAR FRACTION ONE SIXTH
+⅚	56	215A	8538	VULGAR FRACTION FIVE SIXTHS
+⅛	18	215B	8539	VULGAR FRACTION ONE EIGHTH
+⅜	38	215C	8540	VULGAR FRACTION THREE EIGHTHS
+⅝	58	215D	8541	VULGAR FRACTION FIVE EIGHTHS
+⅞	78	215E	8542	VULGAR FRACTION SEVEN EIGHTHS
+Ⅰ	1R	2160	8544	ROMAN NUMERAL ONE
+Ⅱ	2R	2161	8545	ROMAN NUMERAL TWO
+Ⅲ	3R	2162	8546	ROMAN NUMERAL THREE
+Ⅳ	4R	2163	8547	ROMAN NUMERAL FOUR
+Ⅴ	5R	2164	8548	ROMAN NUMERAL FIVE
+Ⅵ	6R	2165	8549	ROMAN NUMERAL SIX
+Ⅶ	7R	2166	8550	ROMAN NUMERAL SEVEN
+Ⅷ	8R	2167	8551	ROMAN NUMERAL EIGHT
+Ⅸ	9R	2168	8552	ROMAN NUMERAL NINE
+Ⅹ	aR	2169	8553	ROMAN NUMERAL TEN
+Ⅺ	bR	216A	8554	ROMAN NUMERAL ELEVEN
+Ⅻ	cR	216B	8555	ROMAN NUMERAL TWELVE
+ⅰ	1r	2170	8560	SMALL ROMAN NUMERAL ONE
+ⅱ	2r	2171	8561	SMALL ROMAN NUMERAL TWO
+ⅲ	3r	2172	8562	SMALL ROMAN NUMERAL THREE
+ⅳ	4r	2173	8563	SMALL ROMAN NUMERAL FOUR
+ⅴ	5r	2174	8564	SMALL ROMAN NUMERAL FIVE
+ⅵ	6r	2175	8565	SMALL ROMAN NUMERAL SIX
+ⅶ	7r	2176	8566	SMALL ROMAN NUMERAL SEVEN
+ⅷ	8r	2177	8567	SMALL ROMAN NUMERAL EIGHT
+ⅸ	9r	2178	8568	SMALL ROMAN NUMERAL NINE
+ⅹ	ar	2179	8569	SMALL ROMAN NUMERAL TEN
+ⅺ	br	217A	8570	SMALL ROMAN NUMERAL ELEVEN
+ⅻ	cr	217B	8571	SMALL ROMAN NUMERAL TWELVE
+←	<-	2190	8592	LEFTWARDS ARROW
+↑	-!	2191	8593	UPWARDS ARROW
+→	->	2192	8594	RIGHTWARDS ARROW
+↓	-v	2193	8595	DOWNWARDS ARROW
+↔	<>	2194	8596	LEFT RIGHT ARROW
+↕	UD	2195	8597	UP DOWN ARROW
+⇐	<=	21D0	8656	LEFTWARDS DOUBLE ARROW
+⇒	=>	21D2	8658	RIGHTWARDS DOUBLE ARROW
+⇔	==	21D4	8660	LEFT RIGHT DOUBLE ARROW
+∀	FA	2200	8704	FOR ALL
+∂	dP	2202	8706	PARTIAL DIFFERENTIAL
+∃	TE	2203	8707	THERE EXISTS
+∅	/0	2205	8709	EMPTY SET
+∆	DE	2206	8710	INCREMENT
+∇	NB	2207	8711	NABLA
+∈	(-	2208	8712	ELEMENT OF
+∋	-)	220B	8715	CONTAINS AS MEMBER
+∏	*P	220F	8719	N-ARY PRODUCT `
+∑	+Z	2211	8721	N-ARY SUMMATION `
+−	-2	2212	8722	MINUS SIGN
+∓	-+	2213	8723	MINUS-OR-PLUS SIGN
+∗	*-	2217	8727	ASTERISK OPERATOR
+∘	Ob	2218	8728	RING OPERATOR
+∙	Sb	2219	8729	BULLET OPERATOR
+√	RT	221A	8730	SQUARE ROOT
+∝	0(	221D	8733	PROPORTIONAL TO
+∞	00	221E	8734	INFINITY
+∟	-L	221F	8735	RIGHT ANGLE
+∠	-V	2220	8736	ANGLE
+∥	PP	2225	8741	PARALLEL TO
+∧	AN	2227	8743	LOGICAL AND
+∨	OR	2228	8744	LOGICAL OR
+∩	(U	2229	8745	INTERSECTION
+∪	)U	222A	8746	UNION
+∫	In	222B	8747	INTEGRAL
+∬	DI	222C	8748	DOUBLE INTEGRAL
+∮	Io	222E	8750	CONTOUR INTEGRAL
+∴	.:	2234	8756	THEREFORE
+∵	:.	2235	8757	BECAUSE
+∶	:R	2236	8758	RATIO
+∷	::	2237	8759	PROPORTION
+∼	?1	223C	8764	TILDE OPERATOR
+∾	CG	223E	8766	INVERTED LAZY S
+≃	?-	2243	8771	ASYMPTOTICALLY EQUAL TO
+≅	?=	2245	8773	APPROXIMATELY EQUAL TO
+≈	?2	2248	8776	ALMOST EQUAL TO
+≌	=?	224C	8780	ALL EQUAL TO
+≓	HI	2253	8787	IMAGE OF OR APPROXIMATELY EQUAL TO
+≠	!=	2260	8800	NOT EQUAL TO
+≡	=3	2261	8801	IDENTICAL TO
+≤	=<	2264	8804	LESS-THAN OR EQUAL TO
+≥	>=	2265	8805	GREATER-THAN OR EQUAL TO
+≪	<*	226A	8810	MUCH LESS-THAN
+≫	*>	226B	8811	MUCH GREATER-THAN
+≮	!<	226E	8814	NOT LESS-THAN
+≯	!>	226F	8815	NOT GREATER-THAN
+⊂	(C	2282	8834	SUBSET OF
+⊃	)C	2283	8835	SUPERSET OF
+⊆	(_	2286	8838	SUBSET OF OR EQUAL TO
+⊇	)_	2287	8839	SUPERSET OF OR EQUAL TO
+⊙	0.	2299	8857	CIRCLED DOT OPERATOR
+⊚	02	229A	8858	CIRCLED RING OPERATOR
+⊥	-T	22A5	8869	UP TACK
+⋅	.P	22C5	8901	DOT OPERATOR
+⋮	:3	22EE	8942	VERTICAL ELLIPSIS
+⋯       .3      22EF    8943    MIDLINE HORIZONTAL ELLIPSIS
+⌂	Eh	2302	8962	HOUSE
+⌈	<7	2308	8968	LEFT CEILING
+⌉	>7	2309	8969	RIGHT CEILING
+⌊	7<	230A	8970	LEFT FLOOR
+⌋	7>	230B	8971	RIGHT FLOOR
+⌐	NI	2310	8976	REVERSED NOT SIGN
+⌒	(A	2312	8978	ARC
+⌕	TR	2315	8981	TELEPHONE RECORDER
+⌠	Iu	2320	8992	TOP HALF INTEGRAL
+⌡	Il	2321	8993	BOTTOM HALF INTEGRAL
+〈	</	2329	9001	LEFT-POINTING ANGLE BRACKET
+〉	/>	232A	9002	RIGHT-POINTING ANGLE BRACKET
+␣	Vs	2423	9251	OPEN BOX
+⑀	1h	2440	9280	OCR HOOK
+⑁	3h	2441	9281	OCR CHAIR
+⑂	2h	2442	9282	OCR FORK
+⑃	4h	2443	9283	OCR INVERTED FORK
+⑆	1j	2446	9286	OCR BRANCH BANK IDENTIFICATION
+⑇	2j	2447	9287	OCR AMOUNT OF CHECK
+⑈	3j	2448	9288	OCR DASH
+⑉	4j	2449	9289	OCR CUSTOMER ACCOUNT NUMBER
+⒈	1.	2488	9352	DIGIT ONE FULL STOP
+⒉	2.	2489	9353	DIGIT TWO FULL STOP
+⒊	3.	248A	9354	DIGIT THREE FULL STOP
+⒋	4.	248B	9355	DIGIT FOUR FULL STOP
+⒌	5.	248C	9356	DIGIT FIVE FULL STOP
+⒍	6.	248D	9357	DIGIT SIX FULL STOP
+⒎	7.	248E	9358	DIGIT SEVEN FULL STOP
+⒏	8.	248F	9359	DIGIT EIGHT FULL STOP
+⒐	9.	2490	9360	DIGIT NINE FULL STOP
+─	hh	2500	9472	BOX DRAWINGS LIGHT HORIZONTAL
+━	HH	2501	9473	BOX DRAWINGS HEAVY HORIZONTAL
+│	vv	2502	9474	BOX DRAWINGS LIGHT VERTICAL
+┃	VV	2503	9475	BOX DRAWINGS HEAVY VERTICAL
+┄	3-	2504	9476	BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
+┅	3_	2505	9477	BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
+┆	3!	2506	9478	BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
+┇	3/	2507	9479	BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
+┈	4-	2508	9480	BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
+┉	4_	2509	9481	BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
+┊	4!	250A	9482	BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
+┋	4/	250B	9483	BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
+┌	dr	250C	9484	BOX DRAWINGS LIGHT DOWN AND RIGHT
+┍	dR	250D	9485	BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
+┎	Dr	250E	9486	BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
+┏	DR	250F	9487	BOX DRAWINGS HEAVY DOWN AND RIGHT
+┐	dl	2510	9488	BOX DRAWINGS LIGHT DOWN AND LEFT
+┑	dL	2511	9489	BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
+┒	Dl	2512	9490	BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
+┓	LD	2513	9491	BOX DRAWINGS HEAVY DOWN AND LEFT
+└	ur	2514	9492	BOX DRAWINGS LIGHT UP AND RIGHT
+┕	uR	2515	9493	BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
+┖	Ur	2516	9494	BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
+┗	UR	2517	9495	BOX DRAWINGS HEAVY UP AND RIGHT
+┘	ul	2518	9496	BOX DRAWINGS LIGHT UP AND LEFT
+┙	uL	2519	9497	BOX DRAWINGS UP LIGHT AND LEFT HEAVY
+┚	Ul	251A	9498	BOX DRAWINGS UP HEAVY AND LEFT LIGHT
+┛	UL	251B	9499	BOX DRAWINGS HEAVY UP AND LEFT
+├	vr	251C	9500	BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+┝	vR	251D	9501	BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
+┠	Vr	2520	9504	BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
+┣	VR	2523	9507	BOX DRAWINGS HEAVY VERTICAL AND RIGHT
+┤	vl	2524	9508	BOX DRAWINGS LIGHT VERTICAL AND LEFT
+┥	vL	2525	9509	BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
+┨	Vl	2528	9512	BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
+┫	VL	252B	9515	BOX DRAWINGS HEAVY VERTICAL AND LEFT
+┬	dh	252C	9516	BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+┯	dH	252F	9519	BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
+┰	Dh	2530	9520	BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
+┳	DH	2533	9523	BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
+┴	uh	2534	9524	BOX DRAWINGS LIGHT UP AND HORIZONTAL
+┷	uH	2537	9527	BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
+┸	Uh	2538	9528	BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
+┻	UH	253B	9531	BOX DRAWINGS HEAVY UP AND HORIZONTAL
+┼	vh	253C	9532	BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+┿	vH	253F	9535	BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
+╂	Vh	2542	9538	BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
+╋	VH	254B	9547	BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
+╱	FD	2571	9585	BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
+╲	BD	2572	9586	BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
+▀	TB	2580	9600	UPPER HALF BLOCK
+▄	LB	2584	9604	LOWER HALF BLOCK
+█	FB	2588	9608	FULL BLOCK
+▌	lB	258C	9612	LEFT HALF BLOCK
+▐	RB	2590	9616	RIGHT HALF BLOCK
+░	.S	2591	9617	LIGHT SHADE
+▒	:S	2592	9618	MEDIUM SHADE
+▓	?S	2593	9619	DARK SHADE
+■	fS	25A0	9632	BLACK SQUARE
+□	OS	25A1	9633	WHITE SQUARE
+▢	RO	25A2	9634	WHITE SQUARE WITH ROUNDED CORNERS
+▣	Rr	25A3	9635	WHITE SQUARE CONTAINING BLACK SMALL SQUARE
+▤	RF	25A4	9636	SQUARE WITH HORIZONTAL FILL
+▥	RY	25A5	9637	SQUARE WITH VERTICAL FILL
+▦	RH	25A6	9638	SQUARE WITH ORTHOGONAL CROSSHATCH FILL
+▧	RZ	25A7	9639	SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
+▨	RK	25A8	9640	SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
+▩	RX	25A9	9641	SQUARE WITH DIAGONAL CROSSHATCH FILL
+▪	sB	25AA	9642	BLACK SMALL SQUARE
+▬	SR	25AC	9644	BLACK RECTANGLE
+▭	Or	25AD	9645	WHITE RECTANGLE
+▲	UT	25B2	9650	BLACK UP-POINTING TRIANGLE
+△	uT	25B3	9651	WHITE UP-POINTING TRIANGLE
+▶	PR	25B6	9654	BLACK RIGHT-POINTING TRIANGLE
+▷	Tr	25B7	9655	WHITE RIGHT-POINTING TRIANGLE
+▼	Dt	25BC	9660	BLACK DOWN-POINTING TRIANGLE
+▽	dT	25BD	9661	WHITE DOWN-POINTING TRIANGLE
+◀	PL	25C0	9664	BLACK LEFT-POINTING TRIANGLE
+◁	Tl	25C1	9665	WHITE LEFT-POINTING TRIANGLE
+◆	Db	25C6	9670	BLACK DIAMOND
+◇	Dw	25C7	9671	WHITE DIAMOND
+◊	LZ	25CA	9674	LOZENGE
+○	0m	25CB	9675	WHITE CIRCLE
+◎	0o	25CE	9678	BULLSEYE
+●	0M	25CF	9679	BLACK CIRCLE
+◐	0L	25D0	9680	CIRCLE WITH LEFT HALF BLACK
+◑	0R	25D1	9681	CIRCLE WITH RIGHT HALF BLACK
+◘	Sn	25D8	9688	INVERSE BULLET
+◙	Ic	25D9	9689	INVERSE WHITE CIRCLE
+◢	Fd	25E2	9698	BLACK LOWER RIGHT TRIANGLE
+◣	Bd	25E3	9699	BLACK LOWER LEFT TRIANGLE
+★	*2	2605	9733	BLACK STAR
+☆	*1	2606	9734	WHITE STAR
+☜	<H	261C	9756	WHITE LEFT POINTING INDEX
+☞	>H	261E	9758	WHITE RIGHT POINTING INDEX
+☺	0u	263A	9786	WHITE SMILING FACE
+☻	0U	263B	9787	BLACK SMILING FACE
+☼	SU	263C	9788	WHITE SUN WITH RAYS
+♀	Fm	2640	9792	FEMALE SIGN
+♂	Ml	2642	9794	MALE SIGN
+♠	cS	2660	9824	BLACK SPADE SUIT
+♡	cH	2661	9825	WHITE HEART SUIT
+♢	cD	2662	9826	WHITE DIAMOND SUIT
+♣	cC	2663	9827	BLACK CLUB SUIT
+♩	Md	2669	9833	QUARTER NOTE `
+♪	M8	266A	9834	EIGHTH NOTE `
+♫	M2	266B	9835	BEAMED EIGHTH NOTES
+♭	Mb	266D	9837	MUSIC FLAT SIGN
+♮	Mx	266E	9838	MUSIC NATURAL SIGN
+♯	MX	266F	9839	MUSIC SHARP SIGN
+✓	OK	2713	10003	CHECK MARK
+✗	XX	2717	10007	BALLOT X
+✠	-X	2720	10016	MALTESE CROSS
+　	IS	3000	12288	IDEOGRAPHIC SPACE
+、	,_	3001	12289	IDEOGRAPHIC COMMA
+。	._	3002	12290	IDEOGRAPHIC FULL STOP
+〃	+"	3003	12291	DITTO MARK
+〄	+_	3004	12292	JAPANESE INDUSTRIAL STANDARD SYMBOL
+々	*_	3005	12293	IDEOGRAPHIC ITERATION MARK
+〆	;_	3006	12294	IDEOGRAPHIC CLOSING MARK
+〇	0_	3007	12295	IDEOGRAPHIC NUMBER ZERO
+《	<+	300A	12298	LEFT DOUBLE ANGLE BRACKET
+》	>+	300B	12299	RIGHT DOUBLE ANGLE BRACKET
+「	<'	300C	12300	LEFT CORNER BRACKET
+」	>'	300D	12301	RIGHT CORNER BRACKET
+『	<"	300E	12302	LEFT WHITE CORNER BRACKET
+』	>"	300F	12303	RIGHT WHITE CORNER BRACKET
+【	("	3010	12304	LEFT BLACK LENTICULAR BRACKET
+】	)"	3011	12305	RIGHT BLACK LENTICULAR BRACKET
+〒	=T	3012	12306	POSTAL MARK
+〓	=_	3013	12307	GETA MARK
+〔	('	3014	12308	LEFT TORTOISE SHELL BRACKET
+〕	)'	3015	12309	RIGHT TORTOISE SHELL BRACKET
+〖	(I	3016	12310	LEFT WHITE LENTICULAR BRACKET
+〗	)I	3017	12311	RIGHT WHITE LENTICULAR BRACKET
+〜	-?	301C	12316	WAVE DASH
+ぁ	A5	3041	12353	HIRAGANA LETTER SMALL A
+あ	a5	3042	12354	HIRAGANA LETTER A
+ぃ	I5	3043	12355	HIRAGANA LETTER SMALL I
+い	i5	3044	12356	HIRAGANA LETTER I
+ぅ	U5	3045	12357	HIRAGANA LETTER SMALL U
+う	u5	3046	12358	HIRAGANA LETTER U
+ぇ	E5	3047	12359	HIRAGANA LETTER SMALL E
+え	e5	3048	12360	HIRAGANA LETTER E
+ぉ	O5	3049	12361	HIRAGANA LETTER SMALL O
+お	o5	304A	12362	HIRAGANA LETTER O
+か	ka	304B	12363	HIRAGANA LETTER KA
+が	ga	304C	12364	HIRAGANA LETTER GA
+き	ki	304D	12365	HIRAGANA LETTER KI
+ぎ	gi	304E	12366	HIRAGANA LETTER GI
+く	ku	304F	12367	HIRAGANA LETTER KU
+ぐ	gu	3050	12368	HIRAGANA LETTER GU
+け	ke	3051	12369	HIRAGANA LETTER KE
+げ	ge	3052	12370	HIRAGANA LETTER GE
+こ	ko	3053	12371	HIRAGANA LETTER KO
+ご	go	3054	12372	HIRAGANA LETTER GO
+さ	sa	3055	12373	HIRAGANA LETTER SA
+ざ	za	3056	12374	HIRAGANA LETTER ZA
+し	si	3057	12375	HIRAGANA LETTER SI
+じ	zi	3058	12376	HIRAGANA LETTER ZI
+す	su	3059	12377	HIRAGANA LETTER SU
+ず	zu	305A	12378	HIRAGANA LETTER ZU
+せ	se	305B	12379	HIRAGANA LETTER SE
+ぜ	ze	305C	12380	HIRAGANA LETTER ZE
+そ	so	305D	12381	HIRAGANA LETTER SO
+ぞ	zo	305E	12382	HIRAGANA LETTER ZO
+た	ta	305F	12383	HIRAGANA LETTER TA
+だ	da	3060	12384	HIRAGANA LETTER DA
+ち	ti	3061	12385	HIRAGANA LETTER TI
+ぢ	di	3062	12386	HIRAGANA LETTER DI
+っ	tU	3063	12387	HIRAGANA LETTER SMALL TU
+つ	tu	3064	12388	HIRAGANA LETTER TU
+づ	du	3065	12389	HIRAGANA LETTER DU
+て	te	3066	12390	HIRAGANA LETTER TE
+で	de	3067	12391	HIRAGANA LETTER DE
+と	to	3068	12392	HIRAGANA LETTER TO
+ど	do	3069	12393	HIRAGANA LETTER DO
+な	na	306A	12394	HIRAGANA LETTER NA
+に	ni	306B	12395	HIRAGANA LETTER NI
+ぬ	nu	306C	12396	HIRAGANA LETTER NU
+ね	ne	306D	12397	HIRAGANA LETTER NE
+の	no	306E	12398	HIRAGANA LETTER NO
+は	ha	306F	12399	HIRAGANA LETTER HA
+ば	ba	3070	12400	HIRAGANA LETTER BA
+ぱ	pa	3071	12401	HIRAGANA LETTER PA
+ひ	hi	3072	12402	HIRAGANA LETTER HI
+び	bi	3073	12403	HIRAGANA LETTER BI
+ぴ	pi	3074	12404	HIRAGANA LETTER PI
+ふ	hu	3075	12405	HIRAGANA LETTER HU
+ぶ	bu	3076	12406	HIRAGANA LETTER BU
+ぷ	pu	3077	12407	HIRAGANA LETTER PU
+へ	he	3078	12408	HIRAGANA LETTER HE
+べ	be	3079	12409	HIRAGANA LETTER BE
+ぺ	pe	307A	12410	HIRAGANA LETTER PE
+ほ	ho	307B	12411	HIRAGANA LETTER HO
+ぼ	bo	307C	12412	HIRAGANA LETTER BO
+ぽ	po	307D	12413	HIRAGANA LETTER PO
+ま	ma	307E	12414	HIRAGANA LETTER MA
+み	mi	307F	12415	HIRAGANA LETTER MI
+む	mu	3080	12416	HIRAGANA LETTER MU
+め	me	3081	12417	HIRAGANA LETTER ME
+も	mo	3082	12418	HIRAGANA LETTER MO
+ゃ	yA	3083	12419	HIRAGANA LETTER SMALL YA
+や	ya	3084	12420	HIRAGANA LETTER YA
+ゅ	yU	3085	12421	HIRAGANA LETTER SMALL YU
+ゆ	yu	3086	12422	HIRAGANA LETTER YU
+ょ	yO	3087	12423	HIRAGANA LETTER SMALL YO
+よ	yo	3088	12424	HIRAGANA LETTER YO
+ら	ra	3089	12425	HIRAGANA LETTER RA
+り	ri	308A	12426	HIRAGANA LETTER RI
+る	ru	308B	12427	HIRAGANA LETTER RU
+れ	re	308C	12428	HIRAGANA LETTER RE
+ろ	ro	308D	12429	HIRAGANA LETTER RO
+ゎ	wA	308E	12430	HIRAGANA LETTER SMALL WA
+わ	wa	308F	12431	HIRAGANA LETTER WA
+ゐ	wi	3090	12432	HIRAGANA LETTER WI
+ゑ	we	3091	12433	HIRAGANA LETTER WE
+を	wo	3092	12434	HIRAGANA LETTER WO
+ん	n5	3093	12435	HIRAGANA LETTER N `
+ゔ	vu	3094	12436	HIRAGANA LETTER VU
+゛	"5	309B	12443	KATAKANA-HIRAGANA VOICED SOUND MARK
+゜	05	309C	12444	KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ゝ	*5	309D	12445	HIRAGANA ITERATION MARK
+ゞ	+5	309E	12446	HIRAGANA VOICED ITERATION MARK
+ァ	a6	30A1	12449	KATAKANA LETTER SMALL A
+ア	A6	30A2	12450	KATAKANA LETTER A
+ィ	i6	30A3	12451	KATAKANA LETTER SMALL I
+イ	I6	30A4	12452	KATAKANA LETTER I
+ゥ	u6	30A5	12453	KATAKANA LETTER SMALL U
+ウ	U6	30A6	12454	KATAKANA LETTER U
+ェ	e6	30A7	12455	KATAKANA LETTER SMALL E
+エ	E6	30A8	12456	KATAKANA LETTER E
+ォ	o6	30A9	12457	KATAKANA LETTER SMALL O
+オ	O6	30AA	12458	KATAKANA LETTER O
+カ	Ka	30AB	12459	KATAKANA LETTER KA
+ガ	Ga	30AC	12460	KATAKANA LETTER GA
+キ	Ki	30AD	12461	KATAKANA LETTER KI
+ギ	Gi	30AE	12462	KATAKANA LETTER GI
+ク	Ku	30AF	12463	KATAKANA LETTER KU
+グ	Gu	30B0	12464	KATAKANA LETTER GU
+ケ	Ke	30B1	12465	KATAKANA LETTER KE
+ゲ	Ge	30B2	12466	KATAKANA LETTER GE
+コ	Ko	30B3	12467	KATAKANA LETTER KO
+ゴ	Go	30B4	12468	KATAKANA LETTER GO
+サ	Sa	30B5	12469	KATAKANA LETTER SA
+ザ	Za	30B6	12470	KATAKANA LETTER ZA
+シ	Si	30B7	12471	KATAKANA LETTER SI
+ジ	Zi	30B8	12472	KATAKANA LETTER ZI
+ス	Su	30B9	12473	KATAKANA LETTER SU
+ズ	Zu	30BA	12474	KATAKANA LETTER ZU
+セ	Se	30BB	12475	KATAKANA LETTER SE
+ゼ	Ze	30BC	12476	KATAKANA LETTER ZE
+ソ	So	30BD	12477	KATAKANA LETTER SO
+ゾ	Zo	30BE	12478	KATAKANA LETTER ZO
+タ	Ta	30BF	12479	KATAKANA LETTER TA
+ダ	Da	30C0	12480	KATAKANA LETTER DA
+チ	Ti	30C1	12481	KATAKANA LETTER TI
+ヂ	Di	30C2	12482	KATAKANA LETTER DI
+ッ	TU	30C3	12483	KATAKANA LETTER SMALL TU
+ツ	Tu	30C4	12484	KATAKANA LETTER TU
+ヅ	Du	30C5	12485	KATAKANA LETTER DU
+テ	Te	30C6	12486	KATAKANA LETTER TE
+デ	De	30C7	12487	KATAKANA LETTER DE
+ト	To	30C8	12488	KATAKANA LETTER TO
+ド	Do	30C9	12489	KATAKANA LETTER DO
+ナ	Na	30CA	12490	KATAKANA LETTER NA
+ニ	Ni	30CB	12491	KATAKANA LETTER NI
+ヌ	Nu	30CC	12492	KATAKANA LETTER NU
+ネ	Ne	30CD	12493	KATAKANA LETTER NE
+ノ	No	30CE	12494	KATAKANA LETTER NO
+ハ	Ha	30CF	12495	KATAKANA LETTER HA
+バ	Ba	30D0	12496	KATAKANA LETTER BA
+パ	Pa	30D1	12497	KATAKANA LETTER PA
+ヒ	Hi	30D2	12498	KATAKANA LETTER HI
+ビ	Bi	30D3	12499	KATAKANA LETTER BI
+ピ	Pi	30D4	12500	KATAKANA LETTER PI
+フ	Hu	30D5	12501	KATAKANA LETTER HU
+ブ	Bu	30D6	12502	KATAKANA LETTER BU
+プ	Pu	30D7	12503	KATAKANA LETTER PU
+ヘ	He	30D8	12504	KATAKANA LETTER HE
+ベ	Be	30D9	12505	KATAKANA LETTER BE
+ペ	Pe	30DA	12506	KATAKANA LETTER PE
+ホ	Ho	30DB	12507	KATAKANA LETTER HO
+ボ	Bo	30DC	12508	KATAKANA LETTER BO
+ポ	Po	30DD	12509	KATAKANA LETTER PO
+マ	Ma	30DE	12510	KATAKANA LETTER MA
+ミ	Mi	30DF	12511	KATAKANA LETTER MI
+ム	Mu	30E0	12512	KATAKANA LETTER MU
+メ	Me	30E1	12513	KATAKANA LETTER ME
+モ	Mo	30E2	12514	KATAKANA LETTER MO
+ャ	YA	30E3	12515	KATAKANA LETTER SMALL YA
+ヤ	Ya	30E4	12516	KATAKANA LETTER YA
+ュ	YU	30E5	12517	KATAKANA LETTER SMALL YU
+ユ	Yu	30E6	12518	KATAKANA LETTER YU
+ョ	YO	30E7	12519	KATAKANA LETTER SMALL YO
+ヨ	Yo	30E8	12520	KATAKANA LETTER YO
+ラ	Ra	30E9	12521	KATAKANA LETTER RA
+リ	Ri	30EA	12522	KATAKANA LETTER RI
+ル	Ru	30EB	12523	KATAKANA LETTER RU
+レ	Re	30EC	12524	KATAKANA LETTER RE
+ロ	Ro	30ED	12525	KATAKANA LETTER RO
+ヮ	WA	30EE	12526	KATAKANA LETTER SMALL WA
+ワ	Wa	30EF	12527	KATAKANA LETTER WA
+ヰ	Wi	30F0	12528	KATAKANA LETTER WI
+ヱ	We	30F1	12529	KATAKANA LETTER WE
+ヲ	Wo	30F2	12530	KATAKANA LETTER WO
+ン	N6	30F3	12531	KATAKANA LETTER N `
+ヴ	Vu	30F4	12532	KATAKANA LETTER VU
+ヵ	KA	30F5	12533	KATAKANA LETTER SMALL KA
+ヶ	KE	30F6	12534	KATAKANA LETTER SMALL KE
+ヷ	Va	30F7	12535	KATAKANA LETTER VA
+ヸ	Vi	30F8	12536	KATAKANA LETTER VI
+ヹ	Ve	30F9	12537	KATAKANA LETTER VE
+ヺ	Vo	30FA	12538	KATAKANA LETTER VO
+・	.6	30FB	12539	KATAKANA MIDDLE DOT
+ー	-6	30FC	12540	KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ヽ	*6	30FD	12541	KATAKANA ITERATION MARK
+ヾ	+6	30FE	12542	KATAKANA VOICED ITERATION MARK
+ㄅ	b4	3105	12549	BOPOMOFO LETTER B
+ㄆ	p4	3106	12550	BOPOMOFO LETTER P
+ㄇ	m4	3107	12551	BOPOMOFO LETTER M
+ㄈ	f4	3108	12552	BOPOMOFO LETTER F
+ㄉ	d4	3109	12553	BOPOMOFO LETTER D
+ㄊ	t4	310A	12554	BOPOMOFO LETTER T
+ㄋ	n4	310B	12555	BOPOMOFO LETTER N `
+ㄌ	l4	310C	12556	BOPOMOFO LETTER L
+ㄍ	g4	310D	12557	BOPOMOFO LETTER G
+ㄎ	k4	310E	12558	BOPOMOFO LETTER K
+ㄏ	h4	310F	12559	BOPOMOFO LETTER H
+ㄐ	j4	3110	12560	BOPOMOFO LETTER J
+ㄑ	q4	3111	12561	BOPOMOFO LETTER Q
+ㄒ	x4	3112	12562	BOPOMOFO LETTER X
+ㄓ	zh	3113	12563	BOPOMOFO LETTER ZH
+ㄔ	ch	3114	12564	BOPOMOFO LETTER CH
+ㄕ	sh	3115	12565	BOPOMOFO LETTER SH
+ㄖ	r4	3116	12566	BOPOMOFO LETTER R
+ㄗ	z4	3117	12567	BOPOMOFO LETTER Z
+ㄘ	c4	3118	12568	BOPOMOFO LETTER C
+ㄙ	s4	3119	12569	BOPOMOFO LETTER S
+ㄚ	a4	311A	12570	BOPOMOFO LETTER A
+ㄛ	o4	311B	12571	BOPOMOFO LETTER O
+ㄜ	e4	311C	12572	BOPOMOFO LETTER E
+ㄞ	ai	311E	12574	BOPOMOFO LETTER AI
+ㄟ	ei	311F	12575	BOPOMOFO LETTER EI
+ㄠ	au	3120	12576	BOPOMOFO LETTER AU
+ㄡ	ou	3121	12577	BOPOMOFO LETTER OU
+ㄢ	an	3122	12578	BOPOMOFO LETTER AN
+ㄣ	en	3123	12579	BOPOMOFO LETTER EN
+ㄤ	aN	3124	12580	BOPOMOFO LETTER ANG
+ㄥ	eN	3125	12581	BOPOMOFO LETTER ENG
+ㄦ	er	3126	12582	BOPOMOFO LETTER ER
+ㄧ	i4	3127	12583	BOPOMOFO LETTER I
+ㄨ	u4	3128	12584	BOPOMOFO LETTER U
+ㄩ	iu	3129	12585	BOPOMOFO LETTER IU
+ㄪ	v4	312A	12586	BOPOMOFO LETTER V
+ㄫ	nG	312B	12587	BOPOMOFO LETTER NG
+ㄬ	gn	312C	12588	BOPOMOFO LETTER GN
+㈠	1c	3220	12832	PARENTHESIZED IDEOGRAPH ONE
+㈡	2c	3221	12833	PARENTHESIZED IDEOGRAPH TWO
+㈢	3c	3222	12834	PARENTHESIZED IDEOGRAPH THREE
+㈣	4c	3223	12835	PARENTHESIZED IDEOGRAPH FOUR
+㈤	5c	3224	12836	PARENTHESIZED IDEOGRAPH FIVE
+㈥	6c	3225	12837	PARENTHESIZED IDEOGRAPH SIX
+㈦	7c	3226	12838	PARENTHESIZED IDEOGRAPH SEVEN
+㈧	8c	3227	12839	PARENTHESIZED IDEOGRAPH EIGHT
+㈨	9c	3228	12840	PARENTHESIZED IDEOGRAPH NINE
+ﬀ	ff	FB00	64256	LATIN SMALL LIGATURE FF
+ﬁ	fi	FB01	64257	LATIN SMALL LIGATURE FI
+ﬂ	fl	FB02	64258	LATIN SMALL LIGATURE FL
+ﬅ	ft	FB05	64261	LATIN SMALL LIGATURE LONG S T
+ﬆ	st	FB06	64262	LATIN SMALL LIGATURE ST
 
  vim:tw=78:ts=8:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/editing.txt vim73/runtime/doc/editing.txt
--- vim73.orig/runtime/doc/editing.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/editing.txt	2013-08-04 19:09:07.797285653 +0000
@@ -1,4 +1,4 @@
-*editing.txt*   For Vim version 7.3.  Last change: 2010 Jul 28
+*editing.txt*   For Vim version 7.3.  Last change: 2013 Feb 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -276,10 +276,11 @@
 			'readonly' option for this buffer.  {not in Vi}
 
 							*CTRL-^* *CTRL-6*
-CTRL-^			Edit the alternate file (equivalent to ":e #").
-			Mostly the alternate file is the previously edited
-			file.  This is a quick way to toggle between two
-			files.
+CTRL-^			Edit the alternate file.  Mostly the alternate file is
+			the previously edited file.  This is a quick way to
+			toggle between two files.  It is equivalent to ":e #",
+			except that it also works when there is no file name.
+
 			If the 'autowrite' or 'autowriteall' option is on and
 			the buffer was changed, write it.
 			Mostly the ^ character is positioned on the 6 key,
@@ -376,8 +377,9 @@
 embedded spaces must be escaped with a backslash.
 
 						*wildcard* *wildcards*
-Wildcards in {file} are expanded.  Which wildcards are supported depends on
-the system.  These are the common ones:
+Wildcards in {file} are expanded, but as with file completion, 'wildignore'
+and 'suffixes' apply.  Which wildcards are supported depends on the system.
+These are the common ones:
 	?	matches one character
 	*	matches anything, including nothing
 	**	matches anything, including nothing, recurses into directories
@@ -391,7 +393,7 @@
 					*starstar-wildcard*
 Expanding "**" is possible on Unix, Win32, Mac OS/X and a few other systems.
 This allows searching a directory tree.  This goes up to 100 directories deep.
-Note there are some commands where this works slightly different, see
+Note there are some commands where this works slightly differently, see
 |file-searching|.
 Example: >
 	:n **/*.txt
@@ -421,9 +423,11 @@
 external command, by using the syntax `={expr}` e.g.: >
 	:e `=tempname()`
 The expression can contain just about anything, thus this can also be used to
-avoid the special meaning of '"', '|', '%' and '#'.  Names are to be separated
-with line breaks.  When the result is a |List| then each item is used as a
-name.  Line breaks also separate names.
+avoid the special meaning of '"', '|', '%' and '#'.  However, 'wildignore'
+does apply like to other wildcards.
+If the expression returns a string then names are to be separated with line
+breaks.  When the result is a |List| then each item is used as a name.  Line
+breaks also separate names.
 
 							*++opt* *[++opt]*
 The [++opt] argument can be used to force the value of 'fileformat',
@@ -984,6 +988,11 @@
 If the creation of a backup file fails, the write is not done.  If you want
 to write anyway add a '!' to the command.
 
+							*write-permissions*
+When writing a new file the permissions are read-write.  For unix the mask is
+0666 with additionally umask applied.  When writing a file that was read Vim
+will preserve the permissions, but clear the s-bit.
+
 							*write-readonly*
 When the 'cpoptions' option contains 'W', Vim will refuse to overwrite a
 readonly file.  When 'W' is not present, ":w!" will overwrite a readonly file,
@@ -1060,6 +1069,7 @@
 			If there are other tab pages and quitting the last
 			window in the current tab page the current tab page is
 			closed |tab-page|.
+			Triggers the |QuitPre| autocommand event.
 
 :conf[irm] q[uit]	Quit, but give prompt when changes have been made, or
 			the last file in the argument list has not been
@@ -1153,8 +1163,10 @@
 							*:confirm* *:conf*
 :conf[irm] {command}	Execute {command}, and use a dialog when an
 			operation has to be confirmed.  Can be used on the
-			":q", ":qa" and ":w" commands (the latter to over-ride
-			a read-only setting).
+			|:q|, |:qa| and |:w| commands (the latter to override
+			a read-only setting), and any other command that can
+			fail in such a way, such as |:only|, |:buffer|,
+			|:bdelete|, etc.
 
 Examples: >
   :confirm w foo
@@ -1207,13 +1219,13 @@
 unmodified.
 
 							*browsefilter*
-For MS Windows, you can modify the filters that are used in the browse dialog.
-By setting the g:browsefilter or b:browsefilter variables, you can change the
-filters globally or locally to the buffer.  The variable is set to a string in
-the format "{filter label}\t{pattern};{pattern}\n" where {filter label} is the
-text that appears in the "Files of Type" comboBox, and {pattern} is the
-pattern which filters the filenames.  Several patterns can be given, separated
-by ';'.
+For MS Windows and GTK, you can modify the filters that are used in the browse
+dialog.  By setting the g:browsefilter or b:browsefilter variables, you can
+change the filters globally or locally to the buffer.  The variable is set to
+a string in the format "{filter label}\t{pattern};{pattern}\n" where {filter
+label} is the text that appears in the "Files of Type" comboBox, and {pattern}
+is the pattern which filters the filenames.  Several patterns can be given,
+separated by ';'.
 
 For Motif the same format is used, but only the very first pattern is actually
 used (Motif only offers one pattern, but you can edit it).
@@ -1221,7 +1233,7 @@
 For example, to have only Vim files in the dialog, you could use the following
 command: >
 
-     let g:browsefilter="Vim Scripts\t*.vim\nVim Startup Files\t*vimrc\n"
+     let g:browsefilter = "Vim Scripts\t*.vim\nVim Startup Files\t*vimrc\n"
 
 You can override the filter setting on a per-buffer basis by setting the
 b:browsefilter variable.  You would most likely set b:browsefilter in a
@@ -1231,6 +1243,13 @@
 may want to add "All Files\t*.*\n" as the final filter, so that the user can
 still access any desired file.
 
+To avoid setting browsefilter when Vim does not actually support it, you can
+use has("browsefilter"): >
+
+	if has("browsefilter")
+	   let g:browsefilter = "whatever"
+	endif
+
 ==============================================================================
 7. The current directory				*current-directory*
 
@@ -1340,7 +1359,7 @@
 cannot be read without the right key.
 {only available when compiled with the |+cryptv| feature}  *E833*
 
-The text in the swap file and the undo file is also encrypted.
+The text in the swap file and the undo file is also encrypted.  *E843*
 
 Note: The text in memory is not encrypted.  A system administrator may be able
 to see your text while you are editing it.  When filtering text with
@@ -1382,6 +1401,8 @@
 |vimrc| file: >
 	set cm=zip
 	set cm=blowfish
+The message given for reading and writing a file will show "[crypted]" when
+using zip, "[blowfish]" when using blowfish.
 
 When writing an undo file, the same key and method will be used for the text
 in the undo file. |persistent-undo|.
@@ -1431,13 +1452,15 @@
   history, showing the 'key' value in a viminfo file.
 - There is never 100% safety.  The encryption in Vim has not been tested for
   robustness.
-- The algorithm used is breakable.  A 4 character key in about one hour, a 6
-  character key in one day (on a Pentium 133 PC).  This requires that you know
-  some text that must appear in the file.  An expert can break it for any key.
-  When the text has been decrypted, this also means that the key can be
-  revealed, and other files encrypted with the same key can be decrypted.
-- Pkzip uses the same encryption, and US Govt has no objection to its export.
-  Pkzip's public file APPNOTE.TXT describes this algorithm in detail.
+- The algorithm used for 'cryptmethod' "zip" is breakable.  A 4 character key
+  in about one hour, a 6 character key in one day (on a Pentium 133 PC).  This
+  requires that you know some text that must appear in the file.  An expert
+  can break it for any key.  When the text has been decrypted, this also means
+  that the key can be revealed, and other files encrypted with the same key
+  can be decrypted.
+- Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
+  objection to its export.  Pkzip's public file APPNOTE.TXT describes this
+  algorithm in detail.
 - Vim originates from the Netherlands.  That is where the sources come from.
   Thus the encryption code is not exported from the USA.
 
@@ -1629,6 +1652,6 @@
 
    Note that completion for ":find", ":sfind", and ":tabfind" commands do not
    currently work with 'path' items that contain a url or use the double star
-   (/usr/**2) or upward search (;) notations. >
+   with depth limiter (/usr/**2) or upward search (;) notations.
 
  vim:tw=78:ts=8:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/eval.txt vim73/runtime/doc/eval.txt
--- vim73.orig/runtime/doc/eval.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/eval.txt	2013-08-04 19:09:07.810618946 +0000
@@ -1,4 +1,4 @@
-*eval.txt*	For Vim version 7.3.  Last change: 2010 Aug 15
+*eval.txt*	For Vim version 7.3.  Last change: 2013 Jun 11
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -39,7 +39,7 @@
 							*E712*
 There are six types of variables:
 
-Number		A 32 bit signed number.  |expr-number| *Number*
+Number		A 32 or 64 bit signed number.  |expr-number| *Number*
 		Examples:  -123  0x10  0177
 
 Float		A floating point number. |floating-point-format| *Float*
@@ -63,21 +63,21 @@
 are used.
 
 Conversion from a Number to a String is by making the ASCII representation of
-the Number.  Examples: >
-	Number 123	-->	String "123"
-	Number 0	-->	String "0"
-	Number -1	-->	String "-1"
+the Number.  Examples:
+	Number 123	-->	String "123" ~
+	Number 0	-->	String "0" ~
+	Number -1	-->	String "-1" ~
 							*octal*
 Conversion from a String to a Number is done by converting the first digits
 to a number.  Hexadecimal "0xf9" and Octal "017" numbers are recognized.  If
-the String doesn't start with digits, the result is zero.  Examples: >
-	String "456"	-->	Number 456
-	String "6bar"	-->	Number 6
-	String "foo"	-->	Number 0
-	String "0xf1"	-->	Number 241
-	String "0100"	-->	Number 64
-	String "-8"	-->	Number -8
-	String "+8"	-->	Number 0
+the String doesn't start with digits, the result is zero.  Examples:
+	String "456"	-->	Number 456 ~
+	String "6bar"	-->	Number 6 ~
+	String "foo"	-->	Number 0 ~
+	String "0xf1"	-->	Number 241 ~
+	String "0100"	-->	Number 64 ~
+	String "-8"	-->	Number -8 ~
+	String "+8"	-->	Number 0 ~
 
 To force conversion from String to Number, add zero to it: >
 	:echo "0100" + 0
@@ -91,8 +91,8 @@
 Note that in the command >
 	:if "foo"
 "foo" is converted to 0, which means FALSE.  To test for a non-empty string,
-use strlen(): >
-	:if strlen("foo")
+use empty(): >
+	:if !empty("foo")
 <				*E745* *E728* *E703* *E729* *E730* *E731*
 List, Dictionary and Funcref types are not automatically converted.
 
@@ -503,7 +503,7 @@
 
 
 Dictionary function ~
-					*Dictionary-function* *self* *E725*
+				*Dictionary-function* *self* *E725* *E862*
 When a function is defined with the "dict" attribute it can be used in a
 special way with a dictionary.	Example: >
 	:function Mylen() dict
@@ -615,7 +615,6 @@
 	- expr7			unary minus
 	+ expr7			unary plus
 
-
 |expr8|	expr8[expr1]		byte of a String or item of a |List|
 	expr8[expr1 : expr1]	substring of a String or sublist of a |List|
 	expr8.name		entry in a |Dictionary|
@@ -721,7 +720,8 @@
 			*expr-<#*  *expr-<=#* *expr-=~#* *expr-!~#*
 			*expr-==?* *expr-!=?* *expr->?*  *expr->=?*
 			*expr-<?*  *expr-<=?* *expr-=~?* *expr-!~?*
-			*expr-is*
+			*expr-is* *expr-isnot* *expr-is#* *expr-isnot#*
+			*expr-is?* *expr-isnot?*
 		use 'ignorecase'    match case	   ignore case ~
 equal			==		==#		==?
 not equal		!=		!=#		!=?
@@ -731,8 +731,8 @@
 smaller than or equal	<=		<=#		<=?
 regexp matches		=~		=~#		=~?
 regexp doesn't match	!~		!~#		!~?
-same instance		is
-different instance	isnot
+same instance		is		is#		is?
+different instance	isnot		isnot#		isnot?
 
 Examples:
 "abc" ==# "Abc"	  evaluates to 0
@@ -753,12 +753,14 @@
 A |Funcref| can only be compared with a |Funcref| and only "equal" and "not
 equal" can be used.  Case is never ignored.
 
-When using "is" or "isnot" with a |List| this checks if the expressions are
-referring to the same |List| instance.	A copy of a |List| is different from
-the original |List|.  When using "is" without a |List| it is equivalent to
-using "equal", using "isnot" equivalent to using "not equal".  Except that a
-different type means the values are different.	"4 == '4'" is true, "4 is '4'"
-is false.
+When using "is" or "isnot" with a |List| or a |Dictionary| this checks if the
+expressions are referring to the same |List| or |Dictionary| instance.  A copy
+of a |List| is different from the original |List|.  When using "is" without
+a |List| or a |Dictionary| it is equivalent to using "equal", using "isnot"
+equivalent to using "not equal".  Except that a different type means the
+values are different: "4 == '4'" is true, "4 is '4'" is false and "0 is []" is
+false and not an error. "is#"/"isnot#" and "is?"/"isnot?" can be used to match
+and ignore case.
 
 When comparing a String with a Number, the String is converted to a Number,
 and the comparison is done on Numbers.	This means that "0 == 'x'" is TRUE,
@@ -798,11 +800,12 @@
 For |Lists| only "+" is possible and then both expr6 must be a list.  The
 result is a new list with the two lists Concatenated.
 
-expr7 *	 expr7 ..	number multiplication			*expr-star*
-expr7 /	 expr7 ..	number division				*expr-/*
-expr7 %	 expr7 ..	number modulo				*expr-%*
+expr7 *	 expr7 ..	Number multiplication			*expr-star*
+expr7 /	 expr7 ..	Number division				*expr-/*
+expr7 %	 expr7 ..	Number modulo				*expr-%*
 
 For all, except ".", Strings are converted to Numbers.
+For bitwise operators see |and()|, |or()| and |xor()|.
 
 Note the difference between "+" and ".":
 	"123" + "456" = 579
@@ -942,7 +945,8 @@
 							*expr9*
 number
 ------
-number			number constant		*expr-number*
+number			number constant			*expr-number* 
+						*hex-number* *octal-number*
 
 Decimal, Hexadecimal (starting with 0x or 0X), or Octal (starting with 0).
 
@@ -1115,8 +1119,8 @@
 
 
 ==============================================================================
-3. Internal variable				*internal-variables* *E121*
-									*E461*
+3. Internal variable				*internal-variables* *E461*
+
 An internal variable name can be made up of letters, digits and '_'.  But it
 cannot start with a digit.  It's also possible to use curly braces, see
 |curly-braces-names|.
@@ -1146,14 +1150,14 @@
 	:    unlet s:[k]
 	:endfor
 <
-						*buffer-variable* *b:var*
+						*buffer-variable* *b:var* *b:*
 A variable name that is preceded with "b:" is local to the current buffer.
 Thus you can have several "b:foo" variables, one for each buffer.
 This kind of variable is deleted when the buffer is wiped out or deleted with
 |:bdelete|.
 
 One local buffer variable is predefined:
-					*b:changedtick-variable* *changetick*
+					*b:changedtick* *changetick*
 b:changedtick	The total number of changes to the current buffer.  It is
 		incremented for each change.  An undo command is also a change
 		in this case.  This can be used to perform an action only when
@@ -1163,21 +1167,21 @@
 		    :	call My_Update()
 		    :endif
 <
-						*window-variable* *w:var*
+						*window-variable* *w:var* *w:*
 A variable name that is preceded with "w:" is local to the current window.  It
 is deleted when the window is closed.
 
-						*tabpage-variable* *t:var*
+						*tabpage-variable* *t:var* *t:*
 A variable name that is preceded with "t:" is local to the current tab page,
 It is deleted when the tab page is closed. {not available when compiled
 without the |+windows| feature}
 
-						*global-variable* *g:var*
+						*global-variable* *g:var* *g:*
 Inside functions global variables are accessed with "g:".  Omitting this will
 access a variable local to a function.	But "g:" can also be used in any other
 place if you like.
 
-						*local-variable* *l:var*
+						*local-variable* *l:var* *l:*
 Inside functions local variables are accessed without prepending anything.
 But you can also prepend "l:" if you like.  However, without prepending "l:"
 you may run into reserved variable names.  For example "count".  By itself it
@@ -1260,7 +1264,7 @@
 variables for each buffer.  Use local buffer variables instead |b:var|.
 
 
-Predefined Vim variables:			*vim-variable* *v:var*
+Predefined Vim variables:			*vim-variable* *v:var* *v:*
 
 					*v:beval_col* *beval_col-variable*
 v:beval_col	The number of the column, over which the mouse pointer is.
@@ -1286,11 +1290,14 @@
 
 					*v:beval_winnr* *beval_winnr-variable*
 v:beval_winnr	The number of the window, over which the mouse pointer is. Only
-		valid while evaluating the 'balloonexpr' option.
+		valid while evaluating the 'balloonexpr' option.  The first
+		window has number zero (unlike most other places where a
+		window gets a number).
 
 					*v:char* *char-variable*
 v:char		Argument for evaluating 'formatexpr' and used for the typed
 		character when using <expr> in an abbreviation |:map-<expr>|.
+		It is also used by the |InsertCharPre| and |InsertEnter| events.
 
 			*v:charconvert_from* *charconvert_from-variable*
 v:charconvert_from
@@ -1537,13 +1544,19 @@
 
 					*v:progname* *progname-variable*
 v:progname	Contains the name (with path removed) with which Vim was
-		invoked.  Allows you to do special initialisations for "view",
-		"evim" etc., or any other name you might symlink to Vim.
+		invoked.  Allows you to do special initialisations for |view|,
+		|evim| etc., or any other name you might symlink to Vim.
 		Read-only.
 
 					*v:register* *register-variable*
-v:register	The name of the register supplied to the last normal mode
-		command.  Empty if none were supplied. |getreg()| |setreg()|
+v:register	The name of the register in effect for the current normal mode
+		command (regardless of whether that command actually used a
+		register).  Or for the currently executing normal mode mapping
+		(use this in custom commands that take a register).
+		If none is supplied it is the default register '"', unless
+		'clipboard' contains "unnamed" or "unnamedplus", then it is
+		'*' or '+'.
+		Also see |getreg()| and |setreg()|
 
 					*v:scrollstart* *scrollstart-variable*
 v:scrollstart	String describing the script or function that caused the
@@ -1657,6 +1670,15 @@
 					*v:warningmsg* *warningmsg-variable*
 v:warningmsg	Last given warning message.  It's allowed to set this variable.
 
+					*v:windowid* *windowid-variable*
+v:windowid	When any X11 based GUI is running or when running in a
+		terminal and Vim connects to the X server (|-X|) this will be
+		set to the window ID.
+		When an MS-Windows GUI is running this will be set to the
+		window handle.
+		Otherwise the value is zero.
+		Note: for windows inside Vim use |winnr()|.
+
 ==============================================================================
 4. Builtin Functions					*functions*
 
@@ -1669,6 +1691,7 @@
 abs( {expr})			Float or Number  absolute value of {expr}
 acos( {expr})			Float	arc cosine of {expr}
 add( {list}, {item})		List	append {item} to |List| {list}
+and( {expr}, {expr})		Number  bitwise AND
 append( {lnum}, {string})	Number	append {string} below line {lnum}
 append( {lnum}, {list})		Number	append lines {list} below line {lnum}
 argc()				Number	number of files in the argument list
@@ -1693,7 +1716,7 @@
 				any	call {func} with arguments {arglist}
 ceil( {expr})			Float	round {expr} up
 changenr()			Number	current change number
-char2nr( {expr})		Number	ASCII value of first char in {expr}
+char2nr( {expr}[, {utf8}])	Number	ASCII/UTF8 value of first char in {expr}
 cindent( {lnum})		Number	C indent for line {lnum}
 clearmatches()			none	clear all matches
 col( {expr})			Number	column nr of cursor or mark
@@ -1726,7 +1749,8 @@
 extend( {expr1}, {expr2} [, {expr3}])
 				List/Dict insert items of {expr2} into {expr1}
 exp( {expr})			Float	exponential of {expr}
-expand( {expr} [, {flag}])	String	expand special keywords in {expr}
+expand( {expr} [, {nosuf} [, {list}]])
+				any	expand special keywords in {expr}
 feedkeys( {string} [, {mode}])	Number	add key sequence to typeahead buffer
 filereadable( {file})		Number	TRUE if {file} is a readable file
 filewritable( {file})		Number	TRUE if {file} is a writable file
@@ -1748,12 +1772,13 @@
 foldtextresult( {lnum})		String	text for closed fold at {lnum}
 foreground( )			Number	bring the Vim window to the foreground
 function( {name})		Funcref reference to function {name}
-garbagecollect( [at_exit])	none	free memory, breaking cyclic references
+garbagecollect( [{atexit}])	none	free memory, breaking cyclic references
 get( {list}, {idx} [, {def}])	any	get item {idx} from {list} or {def}
 get( {dict}, {key} [, {def}])	any	get item {key} from {dict} or {def}
 getbufline( {expr}, {lnum} [, {end}])
 				List	lines {lnum} to {end} of buffer {expr}
-getbufvar( {expr}, {varname})	any	variable {varname} in buffer {expr}
+getbufvar( {expr}, {varname} [, {def}])
+				any	variable {varname} in buffer {expr}
 getchar( [expr])		Number	get one character from the user
 getcharmod( )			Number	modifiers for the last typed character
 getcmdline()			String	return the current command-line
@@ -1774,13 +1799,16 @@
 getqflist()			List	list of quickfix items
 getreg( [{regname} [, 1]])	String	contents of register
 getregtype( [{regname}])	String	type of register
-gettabvar( {nr}, {varname})	any	variable {varname} in tab {nr}
-gettabwinvar( {tabnr}, {winnr}, {name})
+gettabvar( {nr}, {varname} [, {def}])
+				any	variable {varname} in tab {nr} or {def}
+gettabwinvar( {tabnr}, {winnr}, {name} [, {def}])
 				any	{name} in {winnr} in tab page {tabnr}
 getwinposx()			Number	X coord in pixels of GUI Vim window
 getwinposy()			Number	Y coord in pixels of GUI Vim window
-getwinvar( {nr}, {varname})	any	variable {varname} in window {nr}
-glob( {expr} [, {flag}])	String	expand file wildcards in {expr}
+getwinvar( {nr}, {varname} [, {def}])
+				any	variable {varname} in window {nr}
+glob( {expr} [, {nosuf} [, {list}]])
+				any	expand file wildcards in {expr}
 globpath( {path}, {expr} [, {flag}])
 				String	do glob({expr}) for all dirs in {path}
 has( {feature})			Number	TRUE if feature {feature} supported
@@ -1807,6 +1835,7 @@
 inputsave()			Number	save and clear typeahead
 inputsecret( {prompt} [, {text}]) String  like input() but hiding the text
 insert( {list}, {item} [, {idx}]) List	insert {item} in {list} [before {idx}]
+invert( {expr})			Number  bitwise invert
 isdirectory( {directory})	Number	TRUE if {directory} is a directory
 islocked( {expr})		Number	TRUE if {expr} is locked
 items( {dict})			List	key-value pairs in {dict}
@@ -1821,9 +1850,11 @@
 localtime()			Number	current time
 log( {expr})			Float	natural logarithm (base e) of {expr}
 log10( {expr})			Float	logarithm of Float {expr} to base 10
+luaeval( {expr}[, {expr}])	any	evaluate |Lua| expression
 map( {expr}, {string})		List/Dict  change each item in {expr} to {expr}
-maparg( {name}[, {mode} [, {abbr}]])
-				String	rhs of mapping {name} in mode {mode}
+maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
+				String or Dict
+					rhs of mapping {name} in mode {mode}
 mapcheck( {name}[, {mode} [, {abbr}]])
 				String	check for mappings matching {name}
 match( {expr}, {pat}[, {start}[, {count}]])
@@ -1845,12 +1876,15 @@
 mode( [expr])			String	current editing mode
 mzeval( {expr})			any	evaluate |MzScheme| expression
 nextnonblank( {lnum})		Number	line nr of non-blank line >= {lnum}
-nr2char( {expr})		String	single char with ASCII value {expr}
+nr2char( {expr}[, {utf8}])	String	single char with ASCII/UTF8 value {expr}
+or( {expr}, {expr})		Number  bitwise OR
 pathshorten( {expr})		String	shorten directory names in a path
 pow( {x}, {y})			Float	{x} to the power of {y}
 prevnonblank( {lnum})		Number	line nr of non-blank line <= {lnum}
 printf( {fmt}, {expr1}...)	String	format text
 pumvisible()			Number	whether popup menu is visible
+pyeval( {expr})			any	evaluate |Python| expression
+py3eval( {expr})		any	evaluate |python3| expression
 range( {expr} [, {max} [, {stride}]])
 				List	items from {expr} to {max}
 readfile( {fname} [, {binary} [, {max}]])
@@ -1872,6 +1906,10 @@
 resolve( {filename})		String	get filename a shortcut points to
 reverse( {list})		List	reverse {list} in-place
 round( {expr})			Float	round off {expr}
+screenattr( {row}, {col})	Number	attribute at screen position
+screenchar( {row}, {col})	Number	character at screen position
+screencol()			Number	current cursor column
+screenrow()			Number	current cursor row
 search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
 				Number	search for {pattern}
 searchdecl( {name} [, {global} [, {thisblock}]])
@@ -1898,20 +1936,23 @@
 settabwinvar( {tabnr}, {winnr}, {varname}, {val})    set {varname} in window
 					{winnr} in tab page {tabnr} to {val}
 setwinvar( {nr}, {varname}, {val})	set {varname} in window {nr} to {val}
+sha256( {string})		String	SHA256 checksum of {string}
 shellescape( {string} [, {special}])
 				String	escape {string} for use as shell
 					command argument
+shiftwidth()			Number	effective value of 'shiftwidth'
 simplify( {filename})		String	simplify filename as much as possible
 sin( {expr})			Float	sine of {expr}
 sinh( {expr})			Float	hyperbolic sine of {expr}
-sort( {list} [, {func}])	List	sort {list}, using {func} to compare
+sort( {list} [, {func} [, {dict}]])
+				List	sort {list}, using {func} to compare
 soundfold( {word})		String	sound-fold {word}
 spellbadword()			String	badly spelled word at cursor
 spellsuggest( {word} [, {max} [, {capital}]])
 				List	spelling suggestions
 split( {expr} [, {pat} [, {keepempty}]])
 				List	make |List| from {pat} separated {expr}
-sqrt( {expr}			Float	squar root of {expr}
+sqrt( {expr})			Float	square root of {expr}
 str2float( {expr})		Float	convert String to Float
 str2nr( {expr} [, {base}])	Number	convert String to Number
 strchars( {expr})		Number	character length of the String {expr}
@@ -1927,13 +1968,14 @@
 				Number	last index of {needle} in {haystack}
 strtrans( {expr})		String	translate string to make it printable
 strwidth( {expr})		Number	display cell length of the String {expr}
-submatch( {nr})			String	specific match in ":substitute"
+submatch( {nr})			String	specific match in ":s" or substitute()
 substitute( {expr}, {pat}, {sub}, {flags})
 				String	all {pat} in {expr} replaced with {sub}
 synID( {lnum}, {col}, {trans})	Number	syntax ID at {lnum} and {col}
 synIDattr( {synID}, {what} [, {mode}])
 				String	attribute {what} of syntax ID {synID}
 synIDtrans( {synID})		Number	translated syntax ID of {synID}
+synconcealed( {lnum}, {col})	List    info about concealing
 synstack( {lnum}, {col})	List	stack of syntax IDs at {lnum} and {col}
 system( {expr} [, {input}])	String	output of shell command/filter {expr}
 tabpagebuflist( [{arg}])	List	list of buffer numbers in tab page
@@ -1949,13 +1991,14 @@
 toupper( {expr})		String	the String {expr} switched to uppercase
 tr( {src}, {fromstr}, {tostr})	String	translate chars of {src} in {fromstr}
 					to chars in {tostr}
-trunc( {expr}			Float	truncate Float {expr}
+trunc( {expr})			Float	truncate Float {expr}
 type( {name})			Number	type of variable {name}
 undofile( {name})		String	undo file name for {name}
 undotree()			List	undo file tree
 values( {dict})			List	values in {dict}
 virtcol( {expr})		Number	screen column of cursor or mark
 visualmode( [expr])		String	last visual mode used
+wildmenumode()			Number	whether 'wildmenu' mode is active
 winbufnr( {nr})			Number	buffer number of window {nr}
 wincol()			Number	window column of the cursor
 winheight( {nr})		Number	height of window {nr}
@@ -1967,6 +2010,7 @@
 winwidth( {nr})			Number	width of window {nr}
 writefile( {list}, {fname} [, {binary}])
 				Number	write list of lines to file {fname}
+xor( {expr}, {expr})		Number  bitwise XOR
 
 abs({expr})							*abs()*
 		Return the absolute value of {expr}.  When {expr} evaluates to
@@ -2006,6 +2050,13 @@
 		Use |insert()| to add an item at another position.
 
 
+and({expr}, {expr})					*and()*
+		Bitwise AND on the two arguments.  The arguments are converted
+		to a number.  A List, Dict or Float argument causes an error.
+		Example: >
+			:let flag = and(bits, 0x80)
+
+
 append({lnum}, {expr})					*append()*
 		When {expr} is a |List|: Append each item of the |List| as a
 		text line below line {lnum} in the current buffer.
@@ -2250,14 +2301,17 @@
 		redo it is the number of the redone change.  After undo it is
 		one less than the number of the undone change.
 
-char2nr({expr})						*char2nr()*
+char2nr({expr}[, {utf8}])					*char2nr()*
 		Return number value of the first char in {expr}.  Examples: >
 			char2nr(" ")		returns 32
 			char2nr("ABC")		returns 65
-<		The current 'encoding' is used.  Example for "utf-8": >
+<		When {utf8} is omitted or zero, the current 'encoding' is used.
+		Example for "utf-8": >
 			char2nr("")		returns 225
 			char2nr(""[0])		returns 195
-<		|nr2char()| does the opposite.
+<		With {utf8} set to 1, always treat as utf-8 characters.
+		A combining character is a separate character.
+		|nr2char()| does the opposite.
 
 cindent({lnum})						*cindent()*
 		Get the amount of indent for line {lnum} according the C
@@ -2277,7 +2331,7 @@
 		position given with {expr}.  The accepted positions are:
 		    .	    the cursor position
 		    $	    the end of the cursor line (the result is the
-			    number of characters in the cursor line plus one)
+			    number of bytes in the cursor line plus one)
 		    'x	    position of mark x (if the mark is not set, 0 is
 			    returned)
 		Additionally {expr} can be [lnum, col]: a |List| with the line
@@ -2531,6 +2585,8 @@
 		which is 0 if the file was deleted successfully, and non-zero
 		when the deletion failed.
 		Use |remove()| to delete an item from a |List|.
+		To delete a line from the buffer use |:delete|.  Use |:exe|
+		when the line number is in a variable.
 
 							*did_filetype()*
 did_filetype()	Returns non-zero when autocommands are being executed and the
@@ -2708,16 +2764,19 @@
 		{only available when compiled with the |+float| feature}
 
 
-expand({expr} [, {flag}])				*expand()*
+expand({expr} [, {nosuf} [, {list}]])				*expand()*
 		Expand wildcards and the following special keywords in {expr}.
-		The result is a String.
+		'wildignorecase' applies.
 
-		When there are several matches, they are separated by <NL>
-		characters.  [Note: in version 5.0 a space was used, which
-		caused problems when a file name contains a space]
+		If {list} is given and it is non-zero, a List will be returned.
+		Otherwise the result is a String and when there are several
+		matches, they are separated by <NL> characters.  [Note: in
+		version 5.0 a space was used, which caused problems when a
+		file name contains a space]
 
 		If the expansion fails, the result is an empty string.	A name
-		for a non-existing file is not included.
+		for a non-existing file is not included, unless {expr} does
+		not start with '%', '#' or '<', see below.
 
 		When {expr} starts with '%', '#' or '<', the expansion is done
 		like for the |cmdline-special| variables with their associated
@@ -2731,6 +2790,7 @@
 			<abuf>		autocmd buffer number (as a String!)
 			<amatch>	autocmd matched name
 			<sfile>		sourced script file name
+			<slnum>		sourced script file line number
 			<cword>		word under the cursor
 			<cWORD>		WORD under the cursor
 			<client>	the {clientid} of the last received
@@ -2767,10 +2827,10 @@
 		When {expr} does not start with '%', '#' or '<', it is
 		expanded like a file name is expanded on the command line.
 		'suffixes' and 'wildignore' are used, unless the optional
-		{flag} argument is given and it is non-zero.  Names for
-		non-existing files are included.  The "**" item can be used to
-		search in a directory tree.  For example, to find all "README"
-		files in the current directory and below: >
+		{nosuf} argument is given and it is non-zero.
+		Names for non-existing files are included.  The "**" item can
+		be used to search in a directory tree.  For example, to find
+		all "README" files in the current directory and below: >
 			:echo expand("**/README")
 <
 		Expand() can also be used to expand variables and environment
@@ -3043,7 +3103,7 @@
 		{name} can be a user defined function or an internal function.
 
 
-garbagecollect([at_exit])				*garbagecollect()*
+garbagecollect([{atexit}])				*garbagecollect()*
 		Cleanup unused |Lists| and |Dictionaries| that have circular
 		references.  There is hardly ever a need to invoke this
 		function, as it is automatically done when Vim runs out of
@@ -3053,7 +3113,7 @@
 		This is useful if you have deleted a very big |List| and/or
 		|Dictionary| with circular references in a script that runs
 		for a long time.
-		When the optional "at_exit" argument is one, garbage
+		When the optional {atexit} argument is one, garbage
 		collection will also be done when exiting Vim, if it wasn't
 		done before.  This is useful when checking for memory leaks.
 
@@ -3091,7 +3151,7 @@
 		Example: >
 			:let lines = getbufline(bufnr("myfile"), 1, "$")
 
-getbufvar({expr}, {varname})				*getbufvar()*
+getbufvar({expr}, {varname} [, {def}])				*getbufvar()*
 		The result is the value of option or local buffer variable
 		{varname} in buffer {expr}.  Note that the name without "b:"
 		must be used.
@@ -3101,8 +3161,8 @@
 		doesn't work for a global variable, window-local variable or
 		window-local option.
 		For the use of {expr}, see |bufname()| above.
-		When the buffer or variable doesn't exist an empty string is
-		returned, there is no error message.
+		When the buffer or variable doesn't exist {def} or an empty
+		string is returned, there is no error message.
 		Examples: >
 			:let bufmodified = getbufvar(1, "&mod")
 			:echo "todo myvar = " . getbufvar("todo", "myvar")
@@ -3129,6 +3189,8 @@
 		one-byte character it is the character itself as a number.
 		Use nr2char() to convert it to a String.
 
+		Use getcharmod() to obtain any additional modifiers.
+
 		When the user clicks a mouse button, the mouse event will be
 		returned.  The position can then be found in |v:mouse_col|,
 		|v:mouse_lnum| and |v:mouse_win|.  This example positions the
@@ -3167,10 +3229,11 @@
 			2	shift
 			4	control
 			8	alt (meta)
-			16	mouse double click
-			32	mouse triple click
-			64	mouse quadruple click
-			128	Macintosh only: command
+			16	meta (when it's different from ALT)
+			32	mouse double click
+			64	mouse triple click
+			96	mouse quadruple click (== 32 + 64)
+			128	command (Macintosh only)
 		Only the modifiers that have not been included in the
 		character itself are obtained.	Thus Shift-a results in "A"
 		without a modifier.
@@ -3187,7 +3250,8 @@
 		Return the position of the cursor in the command line as a
 		byte count.  The first column is 1.
 		Only works when editing the command line, thus requires use of
-		|c_CTRL-\_e| or |c_CTRL-R_=|.  Returns 0 otherwise.
+		|c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
+		Returns 0 otherwise.
 		Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
 
 getcmdtype()						*getcmdtype()*
@@ -3200,8 +3264,8 @@
 		    @	|input()| command
 		    -	|:insert| or |:append| command
 		Only works when editing the command line, thus requires use of
-		|c_CTRL-\_e| or |c_CTRL-R_=|.  Returns an empty string
-		otherwise.
+		|c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
+		Returns an empty string otherwise.
 		Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
 
 							*getcwd()*
@@ -3239,8 +3303,9 @@
 		"rwx" flags represent, in turn, the permissions of the owner
 		of the file, the group the file belongs to, and other users.
 		If a user does not have a given permission the flag for this
-		is replaced with the string "-".  Example: >
+		is replaced with the string "-".  Examples: >
 			:echo getfperm("/etc/passwd")
+			:echo getfperm(expand("~/.vimrc"))
 <		This will hopefully (from a security point of view) display
 		the string "rw-r--r--" or even "rw-------".
 
@@ -3374,26 +3439,30 @@
 		<CTRL-V> is one character with value 0x16.
 		If {regname} is not specified, |v:register| is used.
 
-gettabvar({tabnr}, {varname})				*gettabvar()*
+gettabvar({tabnr}, {varname} [, {def}])				*gettabvar()*
 		Get the value of a tab-local variable {varname} in tab page
 		{tabnr}. |t:var|
 		Tabs are numbered starting with one.
 		Note that the name without "t:" must be used.
+		When the tab or variable doesn't exist {def} or an empty
+		string is returned, there is no error message.
 
-gettabwinvar({tabnr}, {winnr}, {varname})		*gettabwinvar()*
+gettabwinvar({tabnr}, {winnr}, {varname} [, {def}])		*gettabwinvar()*
 		Get the value of window-local variable {varname} in window
 		{winnr} in tab page {tabnr}.
 		When {varname} starts with "&" get the value of a window-local
 		option.
+		When {varname} is empty a dictionary with all window-local
+		variables is returned.
+		Note that {varname} must be the name without "w:".
 		Tabs are numbered starting with one.  For the current tabpage
 		use |getwinvar()|.
 		When {winnr} is zero the current window is used.
 		This also works for a global option, buffer-local option and
 		window-local option, but it doesn't work for a global variable
 		or buffer-local variable.
-		When {varname} is empty a dictionary with all window-local
-		variables is returned.
-		Note that {varname} must be the name without "w:".
+		When the tab, window or variable doesn't exist {def} or an
+		empty string is returned, there is no error message.
 		Examples: >
 			:let list_is_on = gettabwinvar(1, 2, '&list')
 			:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
@@ -3408,24 +3477,31 @@
 		the top of the GUI Vim window.	The result will be -1 if the
 		information is not available.
 
-getwinvar({winnr}, {varname})				*getwinvar()*
+getwinvar({winnr}, {varname} [, {def}])				*getwinvar()*
 		Like |gettabwinvar()| for the current tabpage.
 		Examples: >
 			:let list_is_on = getwinvar(2, '&list')
 			:echo "myvar = " . getwinvar(1, 'myvar')
 <
-glob({expr} [, {flag}])					*glob()*
+glob({expr} [, {nosuf} [, {list}]])				*glob()*
 		Expand the file wildcards in {expr}.  See |wildcards| for the
 		use of special characters.
-		The result is a String.
-		When there are several matches, they are separated by <NL>
-		characters.
-		Unless the optional {flag} argument is given and is non-zero,
+
+		Unless the optional {nosuf} argument is given and is non-zero,
 		the 'suffixes' and 'wildignore' options apply: Names matching
 		one of the patterns in 'wildignore' will be skipped and
 		'suffixes' affect the ordering of matches.
-		If the expansion fails, the result is an empty string.
-		A name for a non-existing file is not included.
+		'wildignorecase' always applies.
+
+		When {list} is present and it is non-zero the result is a List
+		with all matching files. The advantage of using a List is,
+		you also get filenames containing newlines correctly.
+		Otherwise the result is a String and when there are several
+		matches, they are separated by <NL> characters.
+
+		If the expansion fails, the result is an empty String or List.
+		A name for a non-existing file is not included.  A symbolic
+		link is only included if it points to an existing file.
 
 		For most systems backticks can be used to get files names from
 		any external command.  Example: >
@@ -3511,6 +3587,9 @@
 			"search" or "/"   search pattern history
 			"expr"	 or "="   typed expression history
 			"input"  or "@"	  input line history
+			"debug"  or ">"   debug command history
+		The {history} string does not need to be the whole name, one
+		character is sufficient.
 		If {item} does already exist in the history, it will be
 		shifted to become the newest entry.
 		The result is a Number: 1 if the operation was successful,
@@ -3694,10 +3773,10 @@
 		Like |input()|, but when the GUI is running and text dialogs
 		are supported, a dialog window pops up to input the text.
 		Example: >
-			:let n = inputdialog("value for shiftwidth", &sw)
-			:if n != ""
-			:  let &sw = n
-			:endif
+		   :let n = inputdialog("value for shiftwidth", shiftwidth())
+		   :if n != ""
+		   :  let &sw = n
+		   :endif
 <		When the dialog is cancelled {cancelreturn} is returned.  When
 		omitted an empty string is returned.
 		Hitting <Enter> works like pressing the OK button.  Hitting
@@ -3759,6 +3838,11 @@
 		Note that when {item} is a |List| it is inserted as a single
 		item.  Use |extend()| to concatenate |Lists|.
 
+invert({expr})						*invert()*
+		Bitwise invert.  The argument is converted to a number.  A
+		List, Dict or Float argument causes an error.  Example: >
+			:let bits = invert(bits)
+
 isdirectory({directory})				*isdirectory()*
 		The result is a Number, which is non-zero when a directory
 		with the name {directory} exists.  If {directory} doesn't
@@ -3897,11 +3981,12 @@
 		Return the byte count from the start of the buffer for line
 		{lnum}.  This includes the end-of-line character, depending on
 		the 'fileformat' option for the current buffer.  The first
-		line returns 1.
+		line returns 1. 'encoding' matters, 'fileencoding' is ignored.
 		This can also be used to get the byte count for the line just
 		below the last line: >
 			line2byte(line("$") + 1)
-<		This is the file size plus one.
+<		This is the buffer size plus one.  If 'fileencoding' is empty
+		it is the file size plus one.
 		When {lnum} is invalid, or the |+byte_offset| feature has been
 		disabled at compile time, -1 is returned.
 		Also see |byte2line()|, |go| and |:goto|.
@@ -3941,6 +4026,20 @@
 <			-2.0
 		{only available when compiled with the |+float| feature}
 		
+luaeval({expr}[, {expr}])					*luaeval()*
+		Evaluate Lua expression {expr} and return its result converted 
+		to Vim data structures. Second {expr} may hold additional 
+		argument accessible as _A inside first {expr}.
+		Strings are returned as they are.
+		Boolean objects are converted to numbers.
+		Numbers are converted to |Float| values if vim was compiled 
+		with |+float| and to numbers otherwise.
+		Dictionaries and lists obtained by vim.eval() are returned 
+		as-is.
+		Other objects are returned as zero without any errors.
+		See |lua-luaeval| for more details.
+		{only available when compiled with the |+lua| feature}
+
 map({expr}, {string})					*map()*
 		{expr} must be a |List| or a |Dictionary|.
 		Replace each item in {expr} with the result of evaluating
@@ -3959,30 +4058,58 @@
 
 		The operation is done in-place.  If you want a |List| or
 		|Dictionary| to remain unmodified make a copy first: >
-			:let tlist = map(copy(mylist), ' & . "\t"')
+			:let tlist = map(copy(mylist), ' v:val . "\t"')
 
 <		Returns {expr}, the |List| or |Dictionary| that was filtered.
 		When an error is encountered while evaluating {string} no
 		further items in {expr} are processed.
 
 
-maparg({name}[, {mode} [, {abbr}]])			*maparg()*
-		Return the rhs of mapping {name} in mode {mode}.  When there
-		is no mapping for {name}, an empty String is returned.
+maparg({name}[, {mode} [, {abbr} [, {dict}]]])			*maparg()*
+		When {dict} is omitted or zero: Return the rhs of mapping
+		{name} in mode {mode}.  The returned String has special
+		characters translated like in the output of the ":map" command
+		listing.
+		
+		When there is no mapping for {name}, an empty String is
+		returned.
+
+		The {name} can have special key names, like in the ":map"
+		command.
+
 		{mode} can be one of these strings:
 			"n"	Normal
-			"v"	Visual
+			"v"	Visual (including Select)
 			"o"	Operator-pending
 			"i"	Insert
 			"c"	Cmd-line
+			"s"	Select
+			"x"	Visual
 			"l"	langmap |language-mapping|
 			""	Normal, Visual and Operator-pending
 		When {mode} is omitted, the modes for "" are used.
+
 		When {abbr} is there and it is non-zero use abbreviations
 		instead of mappings.
-		The {name} can have special key names, like in the ":map"
-		command.  The returned String has special characters
-		translated like in the output of the ":map" command listing.
+
+		When {dict} is there and it is non-zero return a dictionary
+		containing all the information of the mapping with the
+		following items:
+		  "lhs"	     The {lhs} of the mapping.
+		  "rhs"	     The {rhs} of the mapping as typed.
+		  "silent"   1 for a |:map-silent| mapping, else 0.
+		  "noremap"  1 if the {rhs} of the mapping is not remappable.
+		  "expr"     1 for an expression mapping (|:map-<expr>|).
+		  "buffer"   1 for a buffer local mapping (|:map-local|).
+		  "mode"     Modes for which the mapping is defined. In
+			     addition to the modes mentioned above, these
+			     characters will be used:
+			     " "     Normal, Visual and Operator-pending
+			     "!"     Insert and Commandline mode
+				     (|mapmode-ic|)
+		  "sid"	     The script local ID, used for <sid> mappings
+			     (|<SID>|).
+
 		The mappings local to the current buffer are checked first,
 		then the global mappings.
 		This function can be used to map a key even when it's already
@@ -4031,6 +4158,7 @@
 		{pat} matches.
 		A match at the first character or |List| item returns zero.
 		If there is no match -1 is returned.
+		For getting submatches see |matchlist()|.
 		Example: >
 			:echo match("testing", "ing")	" results in 4
 			:echo match([1, 'x'], '\a')	" results in 1
@@ -4236,7 +4364,7 @@
 
 mzeval({expr})							*mzeval()*
 		Evaluate MzScheme expression {expr} and return its result
-		convert to Vim data structures.
+		converted to Vim data structures.
 		Numbers and strings are returned as they are.
 		Pairs (including lists and improper lists) and vectors are
 		returned as Vim |Lists|.
@@ -4259,14 +4387,16 @@
 		below it, zero is returned.
 		See also |prevnonblank()|.
 
-nr2char({expr})						*nr2char()*
+nr2char({expr}[, {utf8}])				*nr2char()*
 		Return a string with a single character, which has the number
 		value {expr}.  Examples: >
 			nr2char(64)		returns "@"
 			nr2char(32)		returns " "
-<		The current 'encoding' is used.  Example for "utf-8": >
+<		When {utf8} is omitted or zero, the current 'encoding' is used.
+		Example for "utf-8": >
 			nr2char(300)		returns I with bow character
-<		Note that a NUL character in the file is specified with
+<		With {utf8} set to 1, always return utf-8 characters.
+		Note that a NUL character in the file is specified with
 		nr2char(10), because NULs are represented with newline
 		characters.  nr2char(0) is a real NUL and terminates the
 		string, thus results in an empty string.
@@ -4295,6 +4425,13 @@
 			call setpos('.', save_cursor)
 <		Also see |setpos()|.
 
+or({expr}, {expr})					*or()*
+		Bitwise OR on the two arguments.  The arguments are converted
+		to a number.  A List, Dict or Float argument causes an error.
+		Example: >
+			:let bits = or(bits, 0x80)
+
+
 pathshorten({expr})					*pathshorten()*
 		Shorten directory names in the path {expr} and return the
 		result.  The tail, the file name, is kept as-is.  The other
@@ -4334,6 +4471,7 @@
 
 		Often used items are:
 		  %s	string
+		  %6S	string right-aligned in 6 display cells
 		  %6s	string right-aligned in 6 bytes
 		  %.9s	string truncated to 9 bytes
 		  %c	single byte
@@ -4448,6 +4586,10 @@
 		s	The text of the String argument is used.  If a
 			precision is specified, no more bytes than the number
 			specified are used.
+		S	The text of the String argument is used.  If a
+			precision is specified, no more display cells than the
+			number specified are used.  Without the |+multi_byte|
+			feature works just like 's'.
 
 							*printf-f* *E807*
 		f	The Float argument is converted into a string of the 
@@ -4500,6 +4642,29 @@
 		This can be used to avoid some things that would remove the
 		popup menu.
 
+							*E860*
+py3eval({expr})						*py3eval()*
+		Evaluate Python expression {expr} and return its result
+		converted to Vim data structures.
+		Numbers and strings are returned as they are (strings are 
+		copied though, unicode strings are additionally converted to 
+		'encoding').
+		Lists are represented as Vim |List| type.
+		Dictionaries are represented as Vim |Dictionary| type with 
+		keys converted to strings.
+		{only available when compiled with the |+python3| feature}
+
+							*E858* *E859*
+pyeval({expr})						*pyeval()*
+		Evaluate Python expression {expr} and return its result
+		converted to Vim data structures.
+		Numbers and strings are returned as they are (strings are 
+		copied though).
+		Lists are represented as Vim |List| type.
+		Dictionaries are represented as Vim |Dictionary| type, 
+		non-string keys result in error.
+		{only available when compiled with the |+python| feature}
+
 							*E726* *E727*
 range({expr} [, {max} [, {stride}]])				*range()*
 		Returns a |List| with Numbers:
@@ -4727,12 +4892,50 @@
 			echo round(-4.5)
 <			-5.0
 		{only available when compiled with the |+float| feature}
-		
-		
+
+screenattr(row, col)						*screenattr()*
+		Like screenchar(), but return the attribute.  This is a rather
+		arbitrary number that can only be used to compare to the
+		attribute at other positions.
+
+screenchar(row, col)						*screenchar()*
+		The result is a Number, which is the character at position
+		[row, col] on the screen.  This works for every possible
+		screen position, also status lines, window separators and the
+		command line.  The top left position is row one, column one
+		The character excludes composing characters.  For double-byte
+		encodings it may only be the first byte.
+		This is mainly to be used for testing.
+		Returns -1 when row or col is out of range.
+
+screencol()							*screencol()*
+		The result is a Number, which is the current screen column of
+		the cursor. The leftmost column has number 1.
+		This function is mainly used for testing.
+
+		Note: Always returns the current screen column, thus if used
+		in a command (e.g. ":echo screencol()") it will return the
+		column inside the command line, which is 1 when the command is
+		executed. To get the cursor position in the file use one of
+		the following mappings: >
+			nnoremap <expr> GG ":echom ".screencol()."\n"
+			nnoremap <silent> GG :echom screencol()<CR>
+<
+screenrow()							*screenrow()*
+		The result is a Number, which is the current screen row of the
+		cursor.  The top line has number one.
+		This function is mainly used for testing.
+
+		Note: Same restrictions as with |screencol()|.
+
 search({pattern} [, {flags} [, {stopline} [, {timeout}]]])	*search()*
 		Search for regexp pattern {pattern}.  The search starts at the
 		cursor position (you can use |cursor()| to set it).
 
+		When a match has been found its line number is returned.
+		If there is no match a 0 is returned and the cursor doesn't
+		move.  No error message is given.
+
 		{flags} is a String, which can contain these character flags:
 		'b'	search backward instead of forward
 		'c'	accept a match at the cursor position
@@ -4760,15 +4963,12 @@
 		A zero value is equal to not giving the argument.
 
 		When the {timeout} argument is given the search stops when
-		more than this many milli seconds have passed.	Thus when
+		more than this many milliseconds have passed.	Thus when
 		{timeout} is 500 the search stops after half a second.
 		The value must not be negative.  A zero value is like not
 		giving the argument.
 		{only available when compiled with the |+reltime| feature}
 
-		If there is no match a 0 is returned and the cursor doesn't
-		move.  No error message is given.
-		When a match has been found its line number is returned.
 							*search()-sub-match*
 		With the 'p' flag the returned value is one more than the
 		first sub-match in \(\).  One if none of them matched but the
@@ -4987,7 +5187,8 @@
 		line.
 
 setline({lnum}, {text})					*setline()*
-		Set line {lnum} of the current buffer to {text}.
+		Set line {lnum} of the current buffer to {text}.  To insert
+		lines use |append()|.
 		{lnum} is used like with |getline()|.
 		When {lnum} is just below the last line the {text} will be
 		added as a new line.
@@ -4998,7 +5199,7 @@
 		will be set to the items in the list.  Example: >
 			:call setline(5, ['aaa', 'bbb', 'ccc'])
 <		This is equivalent to: >
-			:for [n, l] in [[5, 6, 7], ['aaa', 'bbb', 'ccc']]
+			:for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']]
 			:  call setline(n, l)
 			:endfor
 <		Note: The '[ and '] marks are not set.
@@ -5112,8 +5313,9 @@
 
 		If {options} contains no register settings, then the default
 		is to use character mode unless {value} ends in a <NL>.
-		Setting the '=' register is not possible.
-		Returns zero for success, non-zero for failure.
+		Setting the '=' register is not possible, but you can use >
+			:let @= = var_expr
+<		Returns zero for success, non-zero for failure.
 
 		Examples: >
 			:call setreg(v:register, @*)
@@ -5136,8 +5338,6 @@
 		|t:var|
 		Note that the variable name without "t:" must be used.
 		Tabs are numbered starting with one.
-		Vim briefly goes to the tab page {tabnr}, this may trigger
-		TabLeave and TabEnter autocommands.
 		This function is not available in the |sandbox|.
 
 settabwinvar({tabnr}, {winnr}, {varname}, {val})	*settabwinvar()*
@@ -5150,8 +5350,6 @@
 		doesn't work for a global or local buffer variable.
 		For a local buffer option the global value is unchanged.
 		Note that the variable name without "w:" must be used.
-		Vim briefly goes to the tab page {tabnr}, this may trigger
-		TabLeave and TabEnter autocommands.
 		Examples: >
 			:call settabwinvar(1, 1, "&list", 0)
 			:call settabwinvar(3, 2, "myvar", "foobar")
@@ -5163,6 +5361,11 @@
 			:call setwinvar(1, "&list", 0)
 			:call setwinvar(2, "myvar", "foobar")
 
+sha256({string})						*sha256()*
+		Returns a String with 64 hex charactes, which is the SHA256
+		checksum of {string}.
+		{only available when compiled with the |+cryptv| feature}
+
 shellescape({string} [, {special}])			*shellescape()*
 		Escape {string} for use as a shell command argument.
 		On MS-Windows and MS-DOS, when 'shellslash' is not set, it
@@ -5189,6 +5392,23 @@
 		    :call system("chmod +w -- " . shellescape(expand("%")))
 
 
+shiftwidth()						*shiftwidth()*
+		Returns the effective value of 'shiftwidth'. This is the
+		'shiftwidth' value unless it is zero, in which case it is the
+		'tabstop' value.  To be backwards compatible in indent
+		plugins, use this: >
+			if exists('*shiftwidth')
+			  func s:sw()
+			    return shiftwidth()
+			  endfunc
+			else
+			  func s:sw()
+			    return &sw
+			  endfunc
+			endif
+<		And then use s:sw() instead of &sw.
+
+
 simplify({filename})					*simplify()*
 		Simplify the file name as much as possible without changing
 		the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
@@ -5228,7 +5448,7 @@
 		{only available when compiled with the |+float| feature}
 
 
-sort({list} [, {func}])					*sort()* *E702*
+sort({list} [, {func} [, {dict}]])			*sort()* *E702*
 		Sort the items in {list} in-place.  Returns {list}.  If you
 		want a list to remain unmodified make a copy first: >
 			:let sortedlist = sort(copy(mylist))
@@ -5236,6 +5456,8 @@
 		Numbers sort after Strings, |Lists| after Numbers.
 		For sorting text in the current buffer use |:sort|.
 		When {func} is given and it is one then case is ignored.
+		{dict} is for functions with the "dict" attribute.  It will be
+		used to set the local variable "self". |Dictionary-function|
 		When {func} is a |Funcref| or a function name, this function
 		is called to compare items.  The function is invoked with two
 		items as argument and must return zero if they are equal, 1 or
@@ -5316,7 +5538,8 @@
 		empty each white-separated sequence of characters becomes an
 		item.
 		Otherwise the string is split where {pattern} matches,
-		removing the matched characters.
+		removing the matched characters. 'ignorecase' is not used
+		here, add \c to ignore case. |/\c|
 		When the first or last item is empty it is omitted, unless the
 		{keepempty} argument is given and it's non-zero.
 		Other empty items are kept when {pattern} matches at least one
@@ -5416,8 +5639,8 @@
 		{haystack} of the first occurrence of the String {needle}.
 		If {start} is specified, the search starts at index {start}.
 		This can be used to find a second match: >
-			:let comma1 = stridx(line, ",")
-			:let comma2 = stridx(line, ",", comma1 + 1)
+			:let colon1 = stridx(line, ":")
+			:let colon2 = stridx(line, ":", colon1 + 1)
 <		The search is done case-sensitive.
 		For pattern searches use |match()|.
 		-1 is returned if the {needle} does not occur in {haystack}.
@@ -5507,9 +5730,11 @@
 		Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
 
 submatch({nr})						*submatch()*
-		Only for an expression in a |:substitute| command.  Returns
-		the {nr}'th submatch of the matched text.  When {nr} is 0
-		the whole matched text is returned.
+		Only for an expression in a |:substitute| command or
+		substitute() function.
+		Returns the {nr}'th submatch of the matched text.  When {nr}
+		is 0 the whole matched text is returned.
+		Also see |sub-replace-expression|.
 		Example: >
 			:s/\d\+/\=submatch(0) + 1/
 <		This finds the first number in the line and adds one to it.
@@ -5517,26 +5742,37 @@
 
 substitute({expr}, {pat}, {sub}, {flags})		*substitute()*
 		The result is a String, which is a copy of {expr}, in which
-		the first match of {pat} is replaced with {sub}.  This works
-		like the ":substitute" command (without any flags).  But the
-		matching with {pat} is always done like the 'magic' option is
-		set and 'cpoptions' is empty (to make scripts portable).
-		'ignorecase' is still relevant.  'smartcase' is not used.
-		See |string-match| for how {pat} is used.
-		And a "~" in {sub} is not replaced with the previous {sub}.
+		the first match of {pat} is replaced with {sub}.
+		When {flags} is "g", all matches of {pat} in {expr} are
+		replaced.  Otherwise {flags} should be "".
+		
+		This works like the ":substitute" command (without any flags).
+		But the matching with {pat} is always done like the 'magic'
+		option is set and 'cpoptions' is empty (to make scripts
+		portable).  'ignorecase' is still relevant, use |/\c| or |/\C|
+		if you want to ignore or match case and ignore 'ignorecase'.
+		'smartcase' is not used.  See |string-match| for how {pat} is
+		used.
+
+		A "~" in {sub} is not replaced with the previous {sub}.
 		Note that some codes in {sub} have a special meaning
 		|sub-replace-special|.	For example, to replace something with
 		"\n" (two characters), use "\\\\n" or '\\n'.
+
 		When {pat} does not match in {expr}, {expr} is returned
 		unmodified.
-		When {flags} is "g", all matches of {pat} in {expr} are
-		replaced.  Otherwise {flags} should be "".
+
 		Example: >
 			:let &path = substitute(&path, ",\\=[^,]*$", "", "")
 <		This removes the last component of the 'path' option. >
 			:echo substitute("testing", ".*", "\\U\\0", "")
 <		results in "TESTING".
 
+		When {sub} starts with "\=", the remainder is interpreted as
+		an expression. See |sub-replace-expression|.  Example: >
+			:echo substitute(s, '%\(\x\x\)',
+			   \ '\=nr2char("0x" . submatch(1))', 'g')
+
 synID({lnum}, {col}, {trans})				*synID()*
 		The result is a Number, which is the syntax ID at the position
 		{lnum} and {col} in the current window.
@@ -5558,20 +5794,6 @@
 			:echo synIDattr(synID(line("."), col("."), 1), "name")
 <
 
-synconcealed({lnum}, {col})				*synconcealed()*
-		The result is a List. The first item in the list is 0 if the
-		character at the position {lnum} and {col} is not part of a
-		concealable region, 1 if it is. The second item in the list is
-		a string. If the first item is 1, the second item contains the
-		text which will be displayed in place of the concealed text,
-		depending on the current setting of 'conceallevel'. The third
-		and final item in the list is a unique number representing the
-		specific syntax region matched. This allows detection of the
-		beginning of a new concealable region if there are two
-		consecutive regions with the same replacement character.
-		For an example use see $VIMRUNTIME/syntax/2html.vim .
-
-
 synIDattr({synID}, {what} [, {mode}])			*synIDattr()*
 		The result is a String, which is the {what} attribute of
 		syntax ID {synID}.  This can be used to obtain information
@@ -5612,6 +5834,20 @@
 		highlight the character.  Highlight links given with
 		":highlight link" are followed.
 
+synconcealed({lnum}, {col})				*synconcealed()*
+		The result is a List. The first item in the list is 0 if the
+		character at the position {lnum} and {col} is not part of a
+		concealable region, 1 if it is. The second item in the list is
+		a string. If the first item is 1, the second item contains the
+		text which will be displayed in place of the concealed text,
+		depending on the current setting of 'conceallevel'. The third
+		and final item in the list is a unique number representing the
+		specific syntax region matched. This allows detection of the
+		beginning of a new concealable region if there are two
+		consecutive regions with the same replacement character.
+		For an example use see $VIMRUNTIME/syntax/2html.vim .
+
+
 synstack({lnum}, {col})					*synstack()*
 		Return a |List|, which is the stack of syntax items at the
 		position {lnum} and {col} in the current window.  Each item in
@@ -5674,9 +5910,9 @@
 		omitted the current tab page is used.
 		When {arg} is invalid the number zero is returned.
 		To get a list of all buffers in all tabs use this: >
-			tablist = []
+			let buflist = []
 			for i in range(tabpagenr('$'))
-			   call extend(tablist, tabpagebuflist(i + 1))
+			   call extend(buflist, tabpagebuflist(i + 1))
 			endfor
 <		Note that a buffer may appear in more than one window.
 
@@ -5737,8 +5973,9 @@
 		If there are no matching tags, then an empty list is returned.
 
 		To get an exact tag match, the anchors '^' and '$' should be
-		used in {expr}.  Refer to |tag-regexp| for more information
-		about the tag search regular expression pattern.
+		used in {expr}.  This also make the function work faster.
+		Refer to |tag-regexp| for more information about the tag
+		search regular expression pattern.
 
 		Refer to |'tags'| for information about how the tags file is
 		located by Vim. Refer to |tags-file-format| for the format of
@@ -5839,6 +6076,8 @@
 		the undo file exists.
 		{name} is always expanded to the full path, since that is what
 		is used internally.
+		If {name} is empty undofile() returns an empty string, since a
+		buffer without a file name will not write an undo file.
 		Useful in combination with |:wundo| and |:rundo|.
 		When compiled without the +persistent_undo option this always
 		returns an empty string.
@@ -5898,13 +6137,13 @@
 		would be of unlimited width.  When there is a <Tab> at the
 		position, the returned Number will be the column at the end of
 		the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
-		set to 8, it returns 8.
+		set to 8, it returns 8. |conceal| is ignored.
 		For the byte position use |col()|.
 		For the use of {expr} see |col()|.
 		When 'virtualedit' is used {expr} can be [lnum, col, off], where
 		"off" is the offset in screen columns from the start of the
 		character.  E.g., a position within a <Tab> or after the last
-		character.
+		character.  When "off" is omitted zero is used.
 		When Virtual editing is active in the current mode, a position
 		beyond the end of the line can be returned. |'virtualedit'|
 		The accepted positions are:
@@ -5947,6 +6186,18 @@
 		Dictionary or Float is not a Number or String, thus does not
 		cause the mode to be cleared.
 
+wildmenumode()					*wildmenumode()*
+		Returns non-zero when the wildmenu is active and zero
+		otherwise.  See 'wildmenu' and 'wildmode'.
+		This can be used in mappings to handle the 'wildcharm' option
+		gracefully. (Makes only sense with |mapmode-c| mappings).
+
+		For example to make <c-j> work like <down> in wildmode, use: >
+    :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
+<
+		(Note, this needs the 'wildcharm' option set appropriately).
+
+
 							*winbufnr()*
 winbufnr({nr})	The result is a Number, which is the number of the buffer
 		associated with window {nr}.  When {nr} is zero, the number of
@@ -5979,8 +6230,9 @@
 winnr([{arg}])	The result is a Number, which is the number of the current
 		window.  The top window has number 1.
 		When the optional argument is "$", the number of the
-		last window is returned (the window count).
-		When the optional argument is "#", the number of the last
+		last window is returned (the window count). >
+			let window_count = winnr('$')
+<		When the optional argument is "#", the number of the last
 		accessed window is returned (where |CTRL-W_p| goes to).
 		If there is no previous window or it is in another tab page 0
 		is returned.
@@ -6056,8 +6308,16 @@
 		To copy a file byte for byte: >
 			:let fl = readfile("foo", "b")
 			:call writefile(fl, "foocopy", "b")
+
+
+xor({expr}, {expr})					*xor()*
+		Bitwise XOR on the two arguments.  The arguments are converted
+		to a number.  A List, Dict or Float argument causes an error.
+		Example: >
+			:let bits = xor(bits, 0x80)
 <
 
+
 							*feature-list*
 There are three types of features:
 1.  Features that are only supported when they have been enabled when Vim
@@ -6084,6 +6344,7 @@
 beos			BeOS version of Vim.
 browse			Compiled with |:browse| support, and browse() will
 			work.
+browsefilter		Compiled with support for |browsefilter|.
 builtin_terms		Compiled with some builtin terminals.
 byte_offset		Compiled with support for 'o' in 'statusline'
 cindent			Compiled with 'cindent' support.
@@ -6093,17 +6354,17 @@
 cmdline_hist		Compiled with |cmdline-history| support.
 cmdline_info		Compiled with 'showcmd' and 'ruler' support.
 comments		Compiled with |'comments'| support.
+compatible		Compiled to be very Vi compatible.
 cryptv			Compiled with encryption support |encryption|.
 cscope			Compiled with |cscope| support.
-compatible		Compiled to be very Vi compatible.
 debug			Compiled with "DEBUG" defined.
 dialog_con		Compiled with console dialog support.
 dialog_gui		Compiled with GUI dialog support.
 diff			Compiled with |vimdiff| and 'diff' support.
 digraphs		Compiled with support for digraphs.
 dnd			Compiled with support for the "~ register |quote_~|.
-dos32			32 bits DOS (DJGPP) version of Vim.
 dos16			16 bits DOS version of Vim.
+dos32			32 bits DOS (DJGPP) version of Vim.
 ebcdic			Compiled on a machine with ebcdic character set.
 emacs_tags		Compiled with support for Emacs tags.
 eval			Compiled with expression evaluation support.  Always
@@ -6126,15 +6387,15 @@
 gettext			Compiled with message translation |multi-lang|
 gui			Compiled with GUI enabled.
 gui_athena		Compiled with Athena GUI.
+gui_gnome		Compiled with Gnome support (gui_gtk is also defined).
 gui_gtk			Compiled with GTK+ GUI (any version).
 gui_gtk2		Compiled with GTK+ 2 GUI (gui_gtk is also defined).
-gui_gnome		Compiled with Gnome support (gui_gtk is also defined).
 gui_mac			Compiled with Macintosh GUI.
 gui_motif		Compiled with Motif GUI.
 gui_photon		Compiled with Photon GUI.
+gui_running		Vim is running in the GUI, or it will start soon.
 gui_win32		Compiled with MS Windows Win32 GUI.
 gui_win32s		idem, and Win32s system being used (Windows 3.1)
-gui_running		Vim is running in the GUI, or it will start soon.
 hangul_input		Compiled with Hangul input support. |hangul|
 iconv			Can use iconv() for conversion.
 insert_expand		Compiled with support for CTRL-X expansion commands in
@@ -6156,30 +6417,32 @@
 mksession		Compiled with support for |:mksession|.
 modify_fname		Compiled with file name modifiers. |filename-modifiers|
 mouse			Compiled with support mouse.
-mouseshape		Compiled with support for 'mouseshape'.
 mouse_dec		Compiled with support for Dec terminal mouse.
 mouse_gpm		Compiled with support for gpm (Linux console mouse)
 mouse_netterm		Compiled with support for netterm mouse.
 mouse_pterm		Compiled with support for qnx pterm mouse.
 mouse_sysmouse		Compiled with support for sysmouse (*BSD console mouse)
+mouse_sgr		Compiled with support for sgr mouse.
+mouse_urxvt		Compiled with support for urxvt mouse.
 mouse_xterm		Compiled with support for xterm mouse.
+mouseshape		Compiled with support for 'mouseshape'.
 multi_byte		Compiled with support for 'encoding'
 multi_byte_encoding	'encoding' is set to a multi-byte encoding.
 multi_byte_ime		Compiled with support for IME input method.
 multi_lang		Compiled with support for multiple languages.
 mzscheme		Compiled with MzScheme interface |mzscheme|.
-netbeans_intg		Compiled with support for |netbeans|.
 netbeans_enabled	Compiled with support for |netbeans| and connected.
+netbeans_intg		Compiled with support for |netbeans|.
 ole			Compiled with OLE automation support for Win32.
 os2			OS/2 version of Vim.
-osfiletype		Compiled with support for osfiletypes |+osfiletype|
 path_extra		Compiled with up/downwards search in 'path' and 'tags'
 perl			Compiled with Perl interface.
 persistent_undo		Compiled with support for persistent undo history.
 postscript		Compiled with PostScript file printing.
 printer			Compiled with |:hardcopy| support.
 profile			Compiled with |:profile| support.
-python			Compiled with Python interface.
+python			Compiled with Python 2.x interface. |has-python|
+python3			Compiled with Python 3.x interface. |has-python|
 qnx			QNX version of Vim.
 quickfix		Compiled with |quickfix| support.
 reltime			Compiled with |reltime()| support.
@@ -6190,11 +6453,11 @@
 signs			Compiled with |:sign| support.
 smartindent		Compiled with 'smartindent' support.
 sniff			Compiled with SNiFF interface support.
+spell			Compiled with spell checking support |spell|.
 startuptime		Compiled with |--startuptime| support.
 statusline		Compiled with support for 'statusline', 'rulerformat'
 			and special formats of 'titlestring' and 'iconstring'.
 sun_workshop		Compiled with support for Sun |workshop|.
-spell			Compiled with spell checking support |spell|.
 syntax			Compiled with syntax highlighting support |syntax|.
 syntax_items		There are active syntax highlighting items for the
 			current buffer.
@@ -6215,9 +6478,9 @@
 toolbar			Compiled with support for |gui-toolbar|.
 unix			Unix version of Vim.
 user_commands		User-defined commands.
-viminfo			Compiled with viminfo support.
-vim_starting		True while initial source'ing takes place.
 vertsplit		Compiled with vertically split windows |:vsplit|.
+vim_starting		True while initial source'ing takes place. |startup|
+viminfo			Compiled with viminfo support.
 virtualedit		Compiled with 'virtualedit' option.
 visual			Compiled with Visual mode.
 visualextra		Compiled with extra Visual mode commands.
@@ -6226,16 +6489,18 @@
 vreplace		Compiled with |gR| and |gr| commands.
 wildignore		Compiled with 'wildignore' option.
 wildmenu		Compiled with 'wildmenu' option.
-windows			Compiled with support for more than one window.
-winaltkeys		Compiled with 'winaltkeys' option.
 win16			Win16 version of Vim (MS-Windows 3.1).
-win32			Win32 version of Vim (MS-Windows 95/98/ME/NT/2000/XP).
-win64			Win64 version of Vim (MS-Windows 64 bit).
+win32			Win32 version of Vim (MS-Windows 95 and later, 32 or
+			64 bits)
 win32unix		Win32 version of Vim, using Unix files (Cygwin)
+win64			Win64 version of Vim (MS-Windows 64 bit).
 win95			Win32 version for MS-Windows 95/98/ME.
+winaltkeys		Compiled with 'winaltkeys' option.
+windows			Compiled with support for more than one window.
 writebackup		Compiled with 'writebackup' default on.
 xfontset		Compiled with X fontset support |xfontset|.
 xim			Compiled with X input method support |xim|.
+xpm_w32			Compiled with pixmap support for Win32.
 xsmp			Compiled with X session management support.
 xsmp_interact		Compiled with interactive X session management support.
 xterm_clipboard		Compiled with support for xterm clipboard.
@@ -6308,7 +6573,7 @@
 <
 See |:verbose-cmd| for more information.
 
-							*E124* *E125*
+							*E124* *E125* *E853*
 :fu[nction][!] {name}([arguments]) [range] [abort] [dict]
 			Define a new function by the name {name}.  The name
 			must be made of alphanumeric characters and '_', and
@@ -6338,6 +6603,8 @@
 			is excluded, ":{range}call" will call the function for
 			each line in the range, with the cursor on the start
 			of each line.  See |function-range-example|.
+			The cursor is still moved to the first line of the
+			range, as is the case with all Ex commands.
 
 			When the [abort] argument is added, the function will
 			abort as soon as an error is detected.
@@ -6569,9 +6836,9 @@
 ==============================================================================
 6. Curly braces names					*curly-braces-names*
 
-Wherever you can use a variable, you can use a "curly braces name" variable.
-This is a regular variable name with one or more expressions wrapped in braces
-{} like this: >
+In most places where you can use a variable, you can use a "curly braces name"
+variable.  This is a regular variable name with one or more expressions
+wrapped in braces {} like this: >
 	my_{adjective}_variable
 
 When Vim encounters this, it evaluates the expression inside the braces, puts
@@ -6607,6 +6874,11 @@
 
 This would call the function "my_func_whizz(parameter)".
 
+This does NOT work: >
+  :let i = 3
+  :let @{i} = ''  " error
+  :echo @{i}      " error
+
 ==============================================================================
 7. Commands						*expression-commands*
 
@@ -6741,7 +7013,8 @@
 :let [{name}, ..., ; {lastname}] -= {expr1}
 			Like above, but append/add/subtract the value for each
 			|List| item.
-							*E106*
+
+								*E121*
 :let {var-name}	..	List the value of variable {var-name}.	Multiple
 			variable names may be given.  Special names recognized
 			here:				*E738*
@@ -7027,7 +7300,9 @@
 			is terminated.
 			Example: >
 		:try | throw "oops" | catch /^oo/ | echo "caught" | endtry
-<
+<			Note that "catch" may need to be on a separate line
+			for when an error causes the parsing to skip the whole
+			line and not see the "|" that separates the commands.
 
 							*:ec* *:echo*
 :ec[ho] {expr1} ..	Echoes each {expr1}, with a space in between.  The
diff -Naur vim73.orig/runtime/doc/evim-fr.1 vim73/runtime/doc/evim-fr.1
--- vim73.orig/runtime/doc/evim-fr.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/evim-fr.1	2013-08-04 19:09:07.813952269 +0000
@@ -1,4 +1,4 @@
-.TH EVIM 1 "16 fvrier 2002 February 16"
+.TH EVIM 1 "16 fvrier 2002"
 .SH NAME
 evim \-  Easy Vim , dite un fichier avec Vim sans utiliser les modes
 .SH SYNOPSIS
@@ -54,3 +54,4 @@
 .SH TRADUCTION
 Cette page de manuel a t traduite David Blanchet.
 <david.blanchet@free.fr> 2005-03-26.
+Mise  jour 2013-05-10, Dominique Pell <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/doc/evim-fr.UTF-8.1 vim73/runtime/doc/evim-fr.UTF-8.1
--- vim73.orig/runtime/doc/evim-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/evim-fr.UTF-8.1	2013-08-04 19:09:07.813952269 +0000
@@ -1,4 +1,4 @@
-.TH EVIM 1 "16 février 2002 February 16"
+.TH EVIM 1 "16 février 2002"
 .SH NAME
 evim \- « Easy Vim », édite un fichier avec Vim sans utiliser les modes
 .SH SYNOPSIS
@@ -54,3 +54,4 @@
 .SH TRADUCTION
 Cette page de manuel a été traduite David Blanchet.
 <david.blanchet@free.fr> 2005-03-26.
+Mise à jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/doc/filetype.txt vim73/runtime/doc/filetype.txt
--- vim73.orig/runtime/doc/filetype.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/filetype.txt	2013-08-04 19:09:07.827285563 +0000
@@ -1,4 +1,4 @@
-*filetype.txt*  For Vim version 7.3.  Last change: 2008 Jul 15
+*filetype.txt*  For Vim version 7.3.  Last change: 2013 May 25
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -270,6 +270,9 @@
 
 
 						*autocmd-osfiletypes*
+NOTE: this code is currently disabled, as the RISC OS implementation was
+removed.  In the future this will use the 'filetype' option.
+
 On operating systems which support storing a file type with the file, you can
 specify that an autocommand should only be executed if the file is of a
 certain type.
@@ -296,8 +299,6 @@
 
 This will match files of type "&fff" whose names start with "diff".
 
-Note that osfiletype checking is skipped if Vim is compiled without the
-|+osfiletype| feature.
 
 							*plugin-details*
 The "plugin" directory can be in any of the directories in the 'runtimepath'
@@ -602,7 +603,7 @@
 file: |ft_sql.txt|.
 
 
-TEX							*ft-tex-plugin*
+TEX						*ft-tex-plugin* *g:tex_flavor*
 
 If the first line of a *.tex file has the form >
 	%&<format>
diff -Naur vim73.orig/runtime/doc/fold.txt vim73/runtime/doc/fold.txt
--- vim73.orig/runtime/doc/fold.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/fold.txt	2013-08-04 19:09:07.827285563 +0000
@@ -60,7 +60,7 @@
 The nesting of folds is limited with 'foldnestmax'.
 
 Some lines are ignored and get the fold level of the line above or below it,
-whatever is the lowest.  These are empty or white lines and lines starting
+whichever is lower.  These are empty or white lines and lines starting
 with a character in 'foldignore'.  White space is skipped before checking for
 characters in 'foldignore'.  For C use "#" to ignore preprocessor lines.
 
diff -Naur vim73.orig/runtime/doc/ft_ada.txt vim73/runtime/doc/ft_ada.txt
--- vim73.orig/runtime/doc/ft_ada.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/ft_ada.txt	2013-08-04 19:09:07.830618886 +0000
@@ -6,20 +6,20 @@
 ADA								      *ada.vim*
 
 1.  Syntax Highlighting			    |ft-ada-syntax|
-2.  Plug-in				    |ft-ada-plugin|
+2.  File type Plug-in			    |ft-ada-plugin|
 3.  Omni Completion			    |ft-ada-omni|
     3.1 Omni Completion with "gnat xref"	|gnat-xref|
     3.2 Omni Completion with "ctags"		|ada-ctags|
 4.  Compiler Support			    |ada-compiler|
     4.1 GNAT					|compiler-gnat|
-    4.1 Dec Ada					|compiler-decada|
+    4.2 Dec Ada					|compiler-decada|
 5.  References				    |ada-reference|
     5.1 Options					|ft-ada-options|
-    5.2 Functions				|ft-ada-functions|
-    5.3 Commands				|ft-ada-commands|
-    5.4 Variables				|ft-ada-variables|
-    5.5 Constants				|ft-ada-constants|
-8.  Extra Plug-ins			    |ada-extra-plugins|
+    5.2 Commands				|ft-ada-commands|
+    5.3 Variables				|ft-ada-variables|
+    5.4 Constants				|ft-ada-constants|
+    5.5 Functions				|ft-ada-functions|
+6.  Extra Plug-ins			    |ada-extra-plugins|
 
 ==============================================================================
 1. Syntax Highlighting ~
@@ -139,7 +139,7 @@
 support yet.
 
 ==============================================================================
-4.  Compiler Support ~
+4. Compiler Support ~
 								*ada-compiler*
 
 The Ada mode supports more than one Ada compiler and will automatically load the
@@ -367,7 +367,7 @@
 makes no difference.
 
 ------------------------------------------------------------------------------
-5.3 Commands ~
+5.2 Commands ~
 							     *ft-ada-commands*
 
 :AdaRainbow							 *:AdaRainbow*
@@ -445,7 +445,7 @@
 		for Ctags generates.
 
 ------------------------------------------------------------------------------
-5.2 Functions ~
+5.5 Functions ~
 							    *ft-ada-functions*
 
 ada#Word([{line}, {col}])					  *ada#Word()*
@@ -479,7 +479,7 @@
 
 
 ==============================================================================
-8. Extra Plugins ~
+6. Extra Plugins ~
 							   *ada-extra-plugins*
 
 You can optionally install the following extra plug-ins. They work well with
diff -Naur vim73.orig/runtime/doc/ft_sql.txt vim73/runtime/doc/ft_sql.txt
--- vim73.orig/runtime/doc/ft_sql.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/ft_sql.txt	2013-08-04 19:09:07.830618886 +0000
@@ -1,4 +1,4 @@
-*ft_sql.txt*	For Vim version 7.3.  Last change: 2010 Jul 20
+*ft_sql.txt*	For Vim version 7.3.  Last change: 2013 May 15
 
 by David Fishburn
 
@@ -349,6 +349,7 @@
 The static maps (which are based on the syntax highlight groups) follow this
 format: >
     imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
+    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword\w*')<CR><C-X><C-O>
 
 This command breaks down as: >
     imap		   - Create an insert map
@@ -369,6 +370,9 @@
 			     command while editing a SQL file.
     'sqlKeyword'	   - Display the items for the sqlKeyword highlight
 			     group
+    'sqlKeyword\w*'	   - A second option available with Vim 7.4 which
+                             uses a regular expression to determine which
+			     syntax groups to use
     )<CR>		   - Execute the :let command
     <C-X><C-O>		   - Trigger the standard omni completion key stroke.
 			     Passing in 'sqlKeyword' instructs the SQL
@@ -435,7 +439,7 @@
 			     of columns, you can press <Left>, this will
 			     replace the column list with the list of tables.
 			   - This allows you to quickly drill down into a
-			     table to view it's columns and back again.
+			     table to view its columns and back again.
 			   - <Right> and <Left> can be also be chosen via
 			     your |.vimrc| >
                                 let g:ftplugin_sql_omni_key_right = '<Right>'
@@ -645,7 +649,7 @@
 	- When completing tables, procedure or views and using dbext.vim 3.00
 	  or higher the list of objects will also include the owner name.
 	  When completing these objects and omni_sql_include_owner is enabled
-	  the owner name will be be replaced. >
+	  the owner name will be replaced. >
 
     omni_sql_precache_syntax_groups
 <	- Default:
diff -Naur vim73.orig/runtime/doc/gui.txt vim73/runtime/doc/gui.txt
--- vim73.orig/runtime/doc/gui.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/gui.txt	2013-08-04 19:09:07.833952209 +0000
@@ -1,4 +1,4 @@
-*gui.txt*       For Vim version 7.3.  Last change: 2010 May 14
+*gui.txt*       For Vim version 7.3.  Last change: 2013 Jun 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -93,10 +93,16 @@
 terminal version.
 
 Recommended place for your personal GUI initializations:
-	Unix		    $HOME/.gvimrc
-	OS/2		    $HOME/.gvimrc or $VIM/.gvimrc
-	MS-DOS and Win32    $HOME/_gvimrc or $VIM/_gvimrc
-	Amiga		    s:.gvimrc or $VIM/.gvimrc
+	Unix		    $HOME/.gvimrc or $HOME/.vim/gvimrc
+	OS/2		    $HOME/.gvimrc, $HOME/vimfiles/gvimrc
+			    or $VIM/.gvimrc
+	MS-DOS and Win32    $HOME/_gvimrc, $HOME/vimfiles/gvimrc
+			    or $VIM/_gvimrc
+	Amiga		    s:.gvimrc, home:.gvimrc, home:vimfiles:gvimrc
+			    or $VIM/.gvimrc
+
+The personal initialization files are searched in the order specified above
+and only the first one that is found is read.
 
 There are a number of options which only have meaning in the GUI version of
 Vim.  These are 'guicursor', 'guifont', 'guipty' and 'guioptions'.  They are
@@ -147,6 +153,15 @@
 If you are running the X Window System, you can get information about the
 window Vim is running in with this command: >
 	:!xwininfo -id $WINDOWID
+<
+							*gui-IME* *iBus*
+Input methods for international characters in X that rely on the XIM
+framework, most notably iBus, have been known to produce undesirable results
+in gVim. These may include an inability to enter spaces, or long delays
+between typing a character and it being recognized by the application.
+
+One workaround that has been successful, for unknown reasons, is to prevent
+gvim from forking into the background by starting it with the |-f| argument.
 
 ==============================================================================
 2. Scrollbars						*gui-scrollbars*
@@ -156,26 +171,26 @@
 
 The interface looks like this (with ":set guioptions=mlrb"):
 
-		       +------------------------------+
-		       | File  Edit		 Help | <- Menu bar (m)
-		       +-+--------------------------+-+
-		       |^|			    |^|
-		       |#| Text area.		    |#|
-		       | |			    | |
-		       |v|__________________________|v|
- Normal status line -> |-+ File.c	       5,2  +-|
- between Vim windows   |^|""""""""""""""""""""""""""|^|
-		       | |			    | |
-		       | | Another file buffer.     | |
-		       | |			    | |
-		       |#|			    |#|
- Left scrollbar (l) -> |#|			    |#| <- Right
-		       |#|			    |#|    scrollbar (r)
-		       | |			    | |
-		       |v|			    |v|
-		       +-+--------------------------+-+
-		       | |< ####		   >| | <- Bottom
-		       +-+--------------------------+-+    scrollbar (b)
+		       +------------------------------+ `
+		       | File  Edit		 Help | <- Menu bar (m) `
+		       +-+--------------------------+-+ `
+		       |^|			    |^| `
+		       |#| Text area.		    |#| `
+		       | |			    | | `
+		       |v|__________________________|v| `
+ Normal status line -> |-+ File.c	       5,2  +-| `
+ between Vim windows   |^|""""""""""""""""""""""""""|^| `
+		       | |			    | | `
+		       | | Another file buffer.     | | `
+		       | |			    | | `
+		       |#|			    |#| `
+ Left scrollbar (l) -> |#|			    |#| <- Right `
+		       |#|			    |#|    scrollbar (r) `
+		       | |			    | | `
+		       |v|			    |v| `
+		       +-+--------------------------+-+ `
+		       | |< ####		   >| | <- Bottom `
+		       +-+--------------------------+-+    scrollbar (b) `
 
 Any of the scrollbar or menu components may be turned off by not putting the
 appropriate letter in the 'guioptions' string.  The bottom scrollbar is
diff -Naur vim73.orig/runtime/doc/gui_w16.txt vim73/runtime/doc/gui_w16.txt
--- vim73.orig/runtime/doc/gui_w16.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/gui_w16.txt	2013-08-04 19:09:07.837285533 +0000
@@ -16,7 +16,7 @@
 
 Other relevant documentation:
 |gui.txt|	For generic items of the GUI.
-|os_msdos.txt|  For items common to DOS and Windows.
+|os_msdos.txt|	For items common to DOS and Windows.
 |gui_w32.txt|	Some items here are also applicable to the Win16 version.
 
 {Vi does not have a Windows GUI}
diff -Naur vim73.orig/runtime/doc/gui_w32.txt vim73/runtime/doc/gui_w32.txt
--- vim73.orig/runtime/doc/gui_w32.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/gui_w32.txt	2013-08-04 19:09:07.837285533 +0000
@@ -1,4 +1,4 @@
-*gui_w32.txt*   For Vim version 7.3.  Last change: 2007 Aug 30
+*gui_w32.txt*   For Vim version 7.3.  Last change: 2012 Aug 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -17,7 +17,7 @@
 
 Other relevant documentation:
 |gui.txt|	For generic items of the GUI.
-|os_win32.txt|  For Win32 specific items.
+|os_win32.txt| 	For Win32 specific items.
 
 {Vi does not have a Windows GUI}
 
@@ -137,6 +137,9 @@
 And if there already is a gvim running:
 "Edit with existing gvim"   -- edit the file with the running gvim
 
+The "edit with existing Vim" entries can be disabled by adding an entry in the
+registry under HKLM\Software\Vim\Gvim, named DisableEditWithExisting, and with
+any value.
 						*install-registry*
 You can add the "Edit with Vim" menu entry in an easy way by using the
 "install.exe" program.  It will add several registry entries for you.
@@ -293,7 +296,9 @@
 sense for most shell commands which produce output for Vim to use).  If you
 want Vim to start a program and return immediately, you can use the following
 syntax on W95 & NT: >
-	:!start {command}
+	:!start [/min] {command}
+The optional "/min" causes the window to be minimized.
+
 On Win32s, you will have to go to another window instead.  Don't forget that
 you must tell Windows 3.1x to keep executing a DOS command in the background
 while you switch back to Vim.
@@ -484,4 +489,16 @@
 And add gvim to the list of applications.  This problem only appears to happen
 with the Intellimouse driver 2.2 and when "Universal Scrolling" is turned on.
 
+
+XPM support						*w32-xpm-support*
+
+Gvim can be build on MS-Windows with support for XPM files.  |+xpm_w32|
+See the Make_mvc.mak file for instructions, search for XPM.
+
+To try out if XPM support works do this: >
+	:help
+	:exe 'sign define vimxpm icon=' . $VIMRUNTIME . '\\vim16x16.xpm'
+	:exe 'sign place 1 line=1 name=vimxpm file=' . expand('%:p')
+<
+
  vim:tw=78:sw=4:ts=8:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/gui_x11.txt vim73/runtime/doc/gui_x11.txt
--- vim73.orig/runtime/doc/gui_x11.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/gui_x11.txt	2013-08-04 19:09:07.840618856 +0000
@@ -1,4 +1,4 @@
-*gui_x11.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*gui_x11.txt*   For Vim version 7.3.  Last change: 2011 Sep 14
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -53,6 +53,8 @@
 ":gui -b".
 
 "gvim --nofork" does the same as "gvim -f".
+								*E851* *E852*
+When starting the GUI fails Vim will try to continue running in the terminal.
 
 If you want the GUI to run in the foreground always, include the 'f'
 flag in 'guioptions'.  |-f|.
diff -Naur vim73.orig/runtime/doc/hebrew.txt vim73/runtime/doc/hebrew.txt
--- vim73.orig/runtime/doc/hebrew.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/hebrew.txt	2013-08-04 19:09:07.843952179 +0000
@@ -93,7 +93,7 @@
       This is also the keymap when 'keymap=hebrew' is set.  The advantage of
       'keymap' is that it works properly when using UTF8, e.g. it inserts the
       correct characters; 'hkmap' does not.  The 'keymap' keyboard can also
-      insert niqud and te`amim.  To see what those mappings are,look at the
+      insert niqud and te`amim.  To see what those mappings are, look at the
       keymap file 'hebrew.vim' etc.
 
 
diff -Naur vim73.orig/runtime/doc/help.txt vim73/runtime/doc/help.txt
--- vim73.orig/runtime/doc/help.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/help.txt	2013-08-04 19:09:07.843952179 +0000
@@ -1,4 +1,4 @@
-*help.txt*	For Vim version 7.3.  Last change: 2010 Jul 20
+*help.txt*	For Vim version 7.3.  Last change: 2012 Dec 06
 
 			VIM - main help file
 									 k
@@ -195,12 +195,12 @@
 						*standard-plugin-list*
 Standard plugins ~
 |pi_getscript.txt| Downloading latest version of Vim scripts
-|pi_gzip.txt|	   Reading and writing compressed files
-|pi_netrw.txt|	   Reading and writing files over a network
-|pi_paren.txt|	   Highlight matching parens
-|pi_tar.txt|	   Tar file explorer
+|pi_gzip.txt|      Reading and writing compressed files
+|pi_netrw.txt|     Reading and writing files over a network
+|pi_paren.txt|     Highlight matching parens
+|pi_tar.txt|       Tar file explorer
 |pi_vimball.txt|   Create a self-installing Vim script
-|pi_zip.txt|	   Zip archive explorer
+|pi_zip.txt|       Zip archive explorer
 
 LOCAL ADDITIONS:				*local-additions*
 
diff -Naur vim73.orig/runtime/doc/helphelp.txt vim73/runtime/doc/helphelp.txt
--- vim73.orig/runtime/doc/helphelp.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/helphelp.txt	2013-08-04 19:09:07.847285503 +0000
@@ -1,4 +1,4 @@
-*helphelp.txt*	For Vim version 7.3.  Last change: 2010 Jul 29
+*helphelp.txt*	For Vim version 7.3.  Last change: 2012 Nov 28
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -7,7 +7,7 @@
 Help on help files					*helphelp*
 
 1. Help commands		|online-help|
-2. Translating help files	|help-translated|
+2. Translated help files	|help-translated|
 3. Writing help files		|help-writing|
 
 ==============================================================================
@@ -188,17 +188,18 @@
 			Only for backwards compatibility.  It now executes the
 			ToolBar.FindHelp menu entry instead of using a builtin
 			dialog.  {only when compiled with |+GUI_GTK|}
-<			{not in Vi}
+			{not in Vi}
 
 					*:helpt* *:helptags*
 				*E154* *E150* *E151* *E152* *E153* *E670*
 :helpt[ags] [++t] {dir}
 			Generate the help tags file(s) for directory {dir}.
-			All "*.txt" and "*.??x" files in the directory are
-			scanned for a help tag definition in between stars.
-			The "*.??x" files are for translated docs, they
-			generate the "tags-??" file, see |help-translated|.
-			The generated tags files are sorted.
+			All "*.txt" and "*.??x" files in the directory and
+			sub-directories are scanned for a help tag definition
+			in between stars.  The "*.??x" files are for
+			translated docs, they generate the "tags-??" file, see
+			|help-translated|.  The generated tags files are
+			sorted.
 			When there are duplicates an error message is given.
 			An existing tags file is silently overwritten.
 			The optional "++t" argument forces adding the
@@ -218,11 +219,12 @@
 This is only available when compiled with the |+multi_lang| feature.
 
 At this moment translations are available for:
-	Chinese - multiple authors
-	French  - translated by David Blanchet
-	Italian - translated by Antonio Colombo
-	Polish  - translated by Mikolaj Machowski
-	Russian - translated by Vassily Ragosin
+	Chinese  - multiple authors
+	French   - translated by David Blanchet
+	Italian  - translated by Antonio Colombo
+	Japanese - multiple authors
+	Polish   - translated by Mikolaj Machowski
+	Russian  - translated by Vassily Ragosin
 See the Vim website to find them: http://www.vim.org/translations.php
 
 A set of translated help files consists of these files:
diff -Naur vim73.orig/runtime/doc/if_cscop.txt vim73/runtime/doc/if_cscop.txt
--- vim73.orig/runtime/doc/if_cscop.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/if_cscop.txt	2013-08-04 19:09:07.850618826 +0000
@@ -1,4 +1,4 @@
-*if_cscop.txt*  For Vim version 7.3.  Last change: 2009 Mar 18
+*if_cscop.txt*  For Vim version 7.3.  Last change: 2011 Jun 12
 
 
 		  VIM REFERENCE MANUAL    by Andy Kahn
@@ -112,8 +112,7 @@
 	    :cscope add /projects/vim/cscope.out /usr/local/vim
 	    :cscope add cscope.out /usr/local/vim -C
 <
-				      *cscope-find* *cs-find*
-						*E565* *E567*
+				      *cscope-find* *cs-find* *E567*
     find  : Query cscope.  All cscope query options are available
 	    except option #5 ("Change this grep pattern").
 
@@ -198,7 +197,7 @@
 
 	    USAGE   :cs help
 
-						*E260* *E261*
+							*E261*
     kill  : Kill a cscope connection (or kill all cscope connections).
 
 	    USAGE   :cs kill {num|partial_name}
@@ -265,13 +264,23 @@
 	:set cscopequickfix=s-,c-,d-,i-,t-,e-
 <
 							*cscopetag* *cst*
-If 'cscopetag' set, the commands ":tag" and CTRL-] as well as "vim -t" will
-always use |:cstag| instead of the default :tag behavior.  Effectively, by
-setting 'cst', you will always search your cscope databases as well as your
-tag files.  The default is off.  Examples: >
+If 'cscopetag' is set, the commands ":tag" and CTRL-] as well as "vim -t"
+will always use |:cstag| instead of the default :tag behavior.  Effectively,
+by setting 'cst', you will always search your cscope databases as well as
+your tag files.  The default is off.  Examples: >
 	:set cst
 	:set nocst
 <
+							*cscoperelative* *csre*
+If 'cscoperelative' is set, then in absence of a prefix given to cscope
+(prefix is the argument of -P option of cscope), basename of cscope.out
+location (usually the project root directory) will be used as the prefix
+to construct an absolute path.  The default is off.  Note: This option is
+only effective when cscope (cscopeprg) is initialized without a prefix
+path (-P).  Examples: >
+	:set csre
+	:set nocsre
+<
 							*cscopetagorder* *csto*
 The value of 'csto' determines the order in which |:cstag| performs a search.
 If 'csto' is set to zero, cscope database(s) are searched first, followed
diff -Naur vim73.orig/runtime/doc/if_lua.txt vim73/runtime/doc/if_lua.txt
--- vim73.orig/runtime/doc/if_lua.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/if_lua.txt	2013-08-04 19:09:07.853952149 +0000
@@ -1,4 +1,4 @@
-*if_lua.txt*    For Vim version 7.3.  Last change: 2010 Jul 22
+*if_lua.txt*    For Vim version 7.3.  Last change: 2012 Jun 29
 
 
 		  VIM REFERENCE MANUAL    by Luis Carvalho
@@ -8,8 +8,12 @@
 
 1. Commands			|lua-commands|
 2. The vim module		|lua-vim|
-3. Buffer userdata		|lua-buffer|
-4. Window userdata		|lua-window|
+3. List userdata		|lua-list|
+4. Dict userdata		|lua-dict|
+5. Funcref userdata		|lua-funcref|
+6. Buffer userdata		|lua-buffer|
+7. Window userdata		|lua-window|
+8. The luaeval function		|lua-luaeval|
 
 {Vi does not have any of these commands}
 
@@ -56,13 +60,14 @@
 <
 
 							*:luado*
-:[range]luado {body}	Execute Lua function "function (line) {body} end" for
-			each line in the [range], with the function argument
-			being set to the text of each line in turn, without a
-			trailing <EOL>. If the value returned by the function
-			is a string it becomes the text of the line in the
-			current turn. The default for [range] is the whole
-			file: "1,$".		      {not in Vi}
+:[range]luado {body}	Execute Lua function "function (line, linenr) {body}
+			end" for each line in the [range], with the function
+			argument being set to the text of each line in turn,
+			without a trailing <EOL>, and the current line number.
+			If the value returned by the function is a string it
+			becomes the text of the line in the current turn. The
+			default for [range] is the whole file: "1,$".
+							{not in Vi}
 
 Examples:
 >
@@ -88,11 +93,9 @@
 All these commands execute a Lua chunk from either the command line (:lua and
 :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
 interpreter, each chunk has its own scope and so only global variables are
-shared between command calls. Lua default libraries "table", "string", "math",
-and "package" are available, "io" and "debug" are not, and "os" is restricted
-to functions "date", "clock", "time", "difftime", and "getenv". In addition,
-Lua "print" function has its output redirected to the Vim message area, with
-arguments separated by a white space instead of a tab.
+shared between command calls. All Lua default libraries are available. In
+addition, Lua "print" function has its output redirected to the Vim message
+area, with arguments separated by a white space instead of a tab.
 
 Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
 and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
@@ -108,9 +111,31 @@
 module also includes routines for buffer, window, and current line queries,
 Vim evaluation and command execution, and others.
 
-	vim.isbuffer(value)	Returns 'true' (boolean, not string) if
-				"value" is a buffer userdata and 'false'
-				otherwise (see |lua-buffer|).
+	vim.list([arg])		Returns an empty list or, if "arg" is a Lua
+				table with numeric keys 1, ..., n (a
+				"sequence"), returns a list l such that l[i] =
+				arg[i] for i = 1, ..., n (see |List|).
+				Non-numeric keys are not used to initialize
+				the list. See also |lua-eval| for conversion
+				rules. Example: >
+					:lua t = {math.pi, false, say = 'hi'}
+					:echo luaeval('vim.list(t)')
+					:" [3.141593, 0], 'say' is ignored
+<
+	vim.dict([arg])		Returns an empty dictionary or, if "arg" is a
+				Lua table, returns a dict d such that d[k] =
+				arg[k] for all string keys k in "arg" (see
+				|Dictionary|). Number keys are converted to
+				strings. Keys that are not strings are not
+				used to initialize the dictionary. See also
+				|lua-eval| for conversion rules. Example: >
+					:lua t = {math.pi, false, say = 'hi'}
+					:echo luaeval('vim.dict(t)')
+					:" {'say': 'hi'}, numeric keys ignored
+<
+	vim.funcref({name})	Returns a Funcref to function {name} (see
+				|Funcref|). It is equivalent to Vim's
+				"function".
 
 	vim.buffer([arg])	If "arg" is a number, returns buffer with
 				number "arg" in the buffer list or, if "arg"
@@ -121,16 +146,21 @@
 				'true' returns the first buffer in the buffer
 				list or else the current buffer.
 
-	vim.iswindow(value)	Returns 'true' (boolean, not string) if
-				"value" is a window userdata and
-				'false' otherwise (see |lua-window|).
-
 	vim.window([arg])	If "arg" is a number, returns window with
 				number "arg" or 'nil' (nil value, not string)
 				if not found. Otherwise, if "toboolean(arg)"
 				is 'true' returns the first window or else the
 				current window.
 
+	vim.type({arg})		Returns the type of {arg}. It is equivalent to
+				Lua's "type" function, but returns "list",
+				"dict", "funcref", "buffer", or "window" if
+				{arg} is a list, dictionary, funcref, buffer,
+				or window, respectively. Examples: >
+					:lua l = vim.list()
+					:lua print(type(l), vim.type(l))
+					:" userdata list
+<
 	vim.command({cmd})	Executes the vim (ex-mode) command {cmd}.
 				Examples: >
 					:lua vim.command"set tw=60"
@@ -141,7 +171,7 @@
 				Vim strings and numbers are directly converted
 				to Lua strings and numbers respectively. Vim
 				lists and dictionaries are converted to Lua
-				tables (lists become integer-keyed tables).
+				userdata (see |lua-list| and |lua-dict|).
 				Examples: >
 					:lua tw = vim.eval"&tw"
 					:lua print(vim.eval"{'a': 'one'}".a)
@@ -157,7 +187,105 @@
 
 
 ==============================================================================
-3. Buffer userdata					*lua-buffer*
+3. List userdata					*lua-list*
+
+List userdata represent vim lists, and the interface tries to follow closely
+Vim's syntax for lists. Since lists are objects, changes in list references in
+Lua are reflected in Vim and vice-versa. A list "l" has the following
+properties and methods:
+
+Properties
+----------
+	o "#l" is the number of items in list "l", equivalent to "len(l)"
+	    in Vim.
+	o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
+	    To modify the k-th item, simply do "l[k] = newitem"; in
+	    particular, "l[k] = nil" removes the k-th item from "l".
+	o "l()" returns an iterator for "l".
+
+Methods
+-------
+	o "l:add(item)" appends "item" to the end of "l".
+	o "l:insert(item[, pos])" inserts "item" at (optional)
+	    position "pos" in the list. The default value for "pos" is 0.
+
+Examples:
+>
+	:let l = [1, 'item']
+	:lua l = vim.eval('l') -- same 'l'
+	:lua l:add(vim.list())
+	:lua l[0] = math.pi
+	:echo l[0] " 3.141593
+	:lua l[0] = nil -- remove first item
+	:lua l:insert(true, 1)
+	:lua print(l, #l, l[0], l[1], l[-1])
+	:lua for item in l() do print(item) end
+<
+
+==============================================================================
+4. Dict userdata					*lua-dict*
+
+Similarly to list userdata, dict userdata represent vim dictionaries; since
+dictionaries are also objects, references are kept between Lua and Vim. A dict
+"d" has the following properties:
+
+Properties
+----------
+	o "#d" is the number of items in dict "d", equivalent to "len(d)"
+	    in Vim.
+	o "d.key" or "d['key']" returns the value at entry "key" in "d".
+	    To modify the entry at this key, simply do "d.key = newvalue"; in
+	    particular, "d.key = nil" removes the entry from "d".
+	o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
+	    Vim.
+
+Examples:
+>
+	:let d = {'n':10}
+	:lua d = vim.eval('d') -- same 'd'
+	:lua print(d, d.n, #d)
+	:let d.self = d
+	:lua for k, v in d() do print(d, k, v) end
+	:lua d.x = math.pi
+	:lua d.self = nil -- remove entry
+	:echo d
+<
+
+==============================================================================
+5. Funcref userdata					*lua-funcref*
+
+Funcref userdata represent funcref variables in Vim. Funcrefs that were
+defined with a "dict" attribute need to be obtained as a dictionary key
+in order to have "self" properly assigned to the dictionary (see examples
+below.) A funcref "f" has the following properties:
+
+Properties
+----------
+	o "#f" is the name of the function referenced by "f"
+	o "f(...)" calls the function referenced by "f" (with arguments)
+
+Examples:
+>
+	:function I(x)
+	:  return a:x
+	:  endfunction
+	:let R = function('I')
+	:lua i1 = vim.funcref('I')
+	:lua i2 = vim.eval('R')
+	:lua print(#i1, #i2) -- both 'I'
+	:lua print(i1, i2, #i2(i1) == #i1(i2))
+	:function Mylen() dict
+	:  return len(self.data)
+	:  endfunction
+	:let mydict = {'data': [0, 1, 2, 3]}
+	:lua d = vim.eval('mydict'); d.len = vim.funcref('Mylen')
+	:echo mydict.len()
+	:lua l = d.len -- assign d as 'self'
+	:lua print(l())
+<
+
+==============================================================================
+6. Buffer userdata					*lua-buffer*
 
 Buffer userdata represent vim buffers. A buffer userdata "b" has the following
 properties and methods:
@@ -209,7 +337,7 @@
 <
 
 ==============================================================================
-4. Window userdata					*lua-window*
+7. Window userdata					*lua-window*
 
 Window objects represent vim windows. A window userdata "w" has the following
 properties and methods:
@@ -241,4 +369,35 @@
 <
 
 ==============================================================================
- vim:tw=78:ts=8:ft=help:norl:
+8. The luaeval function					*lua-luaeval* *lua-eval*
+
+The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
+"luaeval". "luaeval" takes an expression string and an optional argument and
+returns the result of the expression. It is semantically equivalent in Lua to:
+>
+	local chunkheader = "local _A = select(1, ...) return "
+	function luaeval (expstr, arg)
+	    local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
+	    return chunk(arg) -- return typval
+	end
+<
+Note that "_A" receives the argument to "luaeval". Lua numbers, strings, and
+list, dict, and funcref userdata are converted to their Vim respective types,
+while Lua booleans are converted to numbers. An error is thrown if conversion
+of any of the remaining Lua types, including userdata other than lists, dicts,
+and funcrefs, is attempted.
+
+Examples: >
+
+	:echo luaeval('math.pi')
+	:lua a = vim.list():add('newlist')
+	:let a = luaeval('a')
+	:echo a[0] " 'newlist'
+	:function Rand(x,y) " random uniform between x and y
+	:  return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
+	:  endfunction
+	:echo Rand(1,10)
+
+
+==============================================================================
+ vim:tw=78:ts=8:noet:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/if_mzsch.txt vim73/runtime/doc/if_mzsch.txt
--- vim73.orig/runtime/doc/if_mzsch.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/if_mzsch.txt	2013-08-04 19:09:07.853952149 +0000
@@ -1,4 +1,4 @@
-*if_mzsch.txt*  For Vim version 7.3.  Last change: 2010 Feb 11
+*if_mzsch.txt*  For Vim version 7.3.  Last change: 2012 Dec 17
 
 
 		  VIM REFERENCE MANUAL    by Sergey Khorev
@@ -11,7 +11,8 @@
 3. Threads				|mzscheme-threads|
 4. Vim access from MzScheme		|mzscheme-vim|
 5. mzeval() Vim function		|mzscheme-mzeval|
-6. Dynamic loading			|mzscheme-dynamic|
+6. Using Function references		|mzscheme-funcref|
+7. Dynamic loading			|mzscheme-dynamic|
 
 {Vi does not have any of these commands}
 
@@ -21,10 +22,17 @@
 Based on the work of Brent Fulgham.
 Dynamic loading added by Sergey Khorev
 
-For downloading MzScheme and other info:
-	http://www.plt-scheme.org/software/mzscheme/
+MzScheme and PLT Scheme names have been rebranded as Racket. For more
+information please check http://racket-lang.org
 
-Note: On FreeBSD you should use the "drscheme" port.
+Futures and places of Racket version 5.x up to and including 5.3.1 do not
+work correctly with processes created by Vim.
+The simplest solution is to build Racket on your own with these features
+disabled: >
+  ./configure --disable-futures --disable-places --prefix=your-install-prefix
+
+To speed up the process, you might also want to use --disable-gracket and
+--disable-docs
 
 ==============================================================================
 1. Commands						*mzscheme-commands*
@@ -155,8 +163,11 @@
     (eval {expr-string})	    Evaluate the vim expression into
 				    respective MzScheme object: |Lists| are
 				    represented as Scheme lists,
-				    |Dictionaries| as hash tables.
-				    NOTE the name clashes with MzScheme eval
+				    |Dictionaries| as hash tables,
+				    |Funcref|s as functions (see also
+				    |mzscheme-funcref|)
+				    NOTE the name clashes with MzScheme eval,
+				    use module qualifiers to overcome this.
     (range-start)		    Start/End of the range passed with
     (range-end)			    the Scheme command.
     (beep)			    beep
@@ -237,7 +248,23 @@
 evaluate MzScheme expressions and pass their values to VimL.
 
 ==============================================================================
-6. Dynamic loading				    *mzscheme-dynamic* *E815*
+6. Using Function references				    *mzscheme-funcref*
+
+MzScheme interface allows use of |Funcref|s so you can call Vim functions
+directly from Scheme. For instance: >
+    function! MyAdd2(arg)
+	return a:arg + 2
+    endfunction
+    mz (define f2 (vim-eval "function(\"MyAdd2\")"))
+    mz (f2 7)
+< or : >
+    :mz (define indent (vim-eval "function('indent')"))
+    " return Vim indent for line 12
+    :mz (indent 12)
+<
+
+==============================================================================
+7. Dynamic loading				    *mzscheme-dynamic* *E815*
 
 On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version|
 output then includes |+mzscheme/dyn|.
diff -Naur vim73.orig/runtime/doc/if_perl.txt vim73/runtime/doc/if_perl.txt
--- vim73.orig/runtime/doc/if_perl.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/if_perl.txt	2013-08-04 19:09:07.857285472 +0000
@@ -1,4 +1,4 @@
-*if_perl.txt*   For Vim version 7.3.  Last change: 2010 Jul 21
+*if_perl.txt*   For Vim version 7.3.  Last change: 2012 Oct 25
 
 
 		  VIM REFERENCE MANUAL    by Sven Verdoolaege
@@ -44,15 +44,17 @@
 	Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
 	Matt Gerassimof
 
-Perl for MS-Windows can be found at:
-http://www.perl.com/CPAN/ports/nt/Standard/x86/
+Perl for MS-Windows can be found at: http://www.perl.com/
+The ActiveState one should work.
 
 ==============================================================================
 3. Using the Perl interface				*perl-using*
 
 							*:perl* *:pe*
 :pe[rl] {cmd}		Execute Perl command {cmd}.  The current package
-			is "main".
+			is "main".  Simple example to test if `:perl` is
+			working: >
+				:perl VIM::Msg("Hello")
 
 :pe[rl] << {endpattern}
 {script}
@@ -173,7 +175,8 @@
 VIM::DoCommand({cmd})	Executes Ex command {cmd}.
 
 							*perl-Eval*
-VIM::Eval({expr})	Evaluates {expr} and returns (success, val).
+VIM::Eval({expr})	Evaluates {expr} and returns (success, value) in list 
+			context or just value in scalar context.
 			success=1 indicates that val contains the value of
 			{expr}; success=0 indicates a failure to evaluate
 			the expression.  '@x' returns the contents of register
diff -Naur vim73.orig/runtime/doc/if_pyth.txt vim73/runtime/doc/if_pyth.txt
--- vim73.orig/runtime/doc/if_pyth.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/if_pyth.txt	2013-08-04 19:09:07.860618796 +0000
@@ -1,4 +1,4 @@
-*if_pyth.txt*   For Vim version 7.3.  Last change: 2010 Aug 13
+*if_pyth.txt*   For Vim version 7.3.  Last change: 2013 Jun 28
 
 
 		  VIM REFERENCE MANUAL    by Paul Moore
@@ -6,13 +6,16 @@
 
 The Python Interface to Vim				*python* *Python*
 
-1. Commands			|python-commands|
-2. The vim module		|python-vim|
-3. Buffer objects		|python-buffer|
-4. Range objects		|python-range|
-5. Window objects		|python-window|
-6. Dynamic loading		|python-dynamic|
-7. Python 3			|python3|
+1. Commands					|python-commands|
+2. The vim module				|python-vim|
+3. Buffer objects				|python-buffer|
+4. Range objects				|python-range|
+5. Window objects				|python-window|
+6. Tab page objects				|python-tabpage|
+7. vim.bindeval objects				|python-bindeval-objects|
+8. pyeval(), py3eval() Vim functions		|python-pyeval|
+9. Dynamic loading				|python-dynamic|
+10. Python 3					|python3|
 
 {Vi does not have any of these commands}
 
@@ -26,7 +29,9 @@
 
 					*:python* *:py* *E205* *E263* *E264*
 :[range]py[thon] {stmt}
-			Execute Python statement {stmt}.
+			Execute Python statement {stmt}.  A simple check if
+			the `:python` command is working: >
+				:python print "Hello"
 
 :[range]py[thon] << {endmarker}
 {script}
@@ -51,9 +56,25 @@
 	EOF
 	endfunction
 <
-Note: Python is very sensitive to the indenting.  Also make sure the "class"
-line and "EOF" do not have any indent.
+Note: Python is very sensitive to the indenting.  Make sure the "class" line
+and "EOF" do not have any indent.
 
+							*:pydo*
+:[range]pydo {body}	Execute Python function "def _vim_pydo(line, linenr):
+			{body}" for each line in the [range], with the
+			function arguments being set to the text of each line
+			in turn, without a trailing <EOL>, and the current
+			line number. The function should return a string or
+			None. If a string is returned, it becomes the text of
+			the line in the current turn. The default for [range]
+			is the whole file: "1,$".
+			{not in Vi}
+
+Examples:
+>
+	:pydo return "%s\t%d" % (line[::-1], len(line))
+	:pydo if line: return "%4d: %s" % (linenr, line)
+<
 							*:pyfile* *:pyf*
 :[range]pyf[ile] {file}
 			Execute the Python script in {file}.  The whole
@@ -150,7 +171,27 @@
 	[{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
 	'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
 
-
+vim.bindeval(str)					*python-bindeval*
+	Like |python-eval|, but returns special objects described in 
+	|python-bindeval-objects|. These python objects let you modify (|List| 
+	or |Dictionary|) or call (|Funcref|) vim objects.
+
+vim.strwidth(str)					*python-strwidth*
+	Like |strwidth()|: returns number of display cells str occupies, tab 
+	is counted as one cell.
+
+vim.foreach_rtp(callable)				*python-foreach_rtp*
+	Call the given callable for each path in 'runtimepath' until either 
+	callable returns something but None, the exception is raised or there 
+	are no longer paths. If stopped in case callable returned non-None, 
+	vim.foreach_rtp function returns the value returned by callable.
+
+vim.chdir(*args, **kwargs)				*python-chdir*
+vim.fchdir(*args, **kwargs)				*python-fchdir*
+	Run os.chdir or os.fchdir, then all appropriate vim stuff.
+	Note: you should not use these functions directly, use os.chdir and 
+	      os.fchdir instead. Behavior of vim.fchdir is undefined in case 
+	      os.fchdir does not exist.
 
 Error object of the "vim" module
 
@@ -170,12 +211,12 @@
 	to which the variables referred.
 
 vim.buffers						*python-buffers*
-	A sequence object providing access to the list of vim buffers.  The
+	A mapping object providing access to the list of vim buffers.  The
 	object supports the following operations: >
 	    :py b = vim.buffers[i]	# Indexing (read-only)
 	    :py b in vim.buffers	# Membership test
 	    :py n = len(vim.buffers)	# Number of elements
-	    :py for b in vim.buffers:	# Sequential access
+	    :py for b in vim.buffers:	# Iterating over buffer list
 <
 vim.windows						*python-windows*
 	A sequence object providing access to the list of vim windows.  The
@@ -184,13 +225,28 @@
 	    :py w in vim.windows	# Membership test
 	    :py n = len(vim.windows)	# Number of elements
 	    :py for w in vim.windows:	# Sequential access
+<	Note: vim.windows object always accesses current tab page. 
+	|python-tabpage|.windows objects are bound to parent |python-tabpage| 
+	object and always use windows from that tab page (or throw vim.error 
+	in case tab page was deleted). You can keep a reference to both 
+	without keeping a reference to vim module object or |python-tabpage|, 
+	they will not lose their properties in this case.
+
+vim.tabpages						*python-tabpages*
+	A sequence object providing access to the list of vim tab pages. The 
+	object supports the following operations: >
+	    :py t = vim.tabpages[i]	# Indexing (read-only)
+	    :py t in vim.tabpages	# Membership test
+	    :py n = len(vim.tabpages)	# Number of elements
+	    :py for t in vim.tabpages:	# Sequential access
 <
 vim.current						*python-current*
 	An object providing access (via specific attributes) to various
 	"current" objects available in vim:
 		vim.current.line	The current line (RW)		String
-		vim.current.buffer	The current buffer (RO)		Buffer
-		vim.current.window	The current window (RO)		Window
+		vim.current.buffer	The current buffer (RW)		Buffer
+		vim.current.window	The current window (RW)		Window
+		vim.current.tabpage	The current tab page (RW)	TabPage
 		vim.current.range	The current line range (RO)	Range
 
 	The last case deserves a little explanation.  When the :python or
@@ -198,6 +254,42 @@
 	"current range".  A range is a bit like a buffer, but with all access
 	restricted to a subset of lines.  See |python-range| for more details.
 
+	Note: When assigning to vim.current.{buffer,window,tabpage} it expects 
+	valid |python-buffer|, |python-window| or |python-tabpage| objects 
+	respectively. Assigning triggers normal (with |autocommand|s) 
+	switching to given buffer, window or tab page. It is the only way to 
+	switch UI objects in python: you can't assign to 
+	|python-tabpage|.window attribute. To switch without triggering 
+	autocommands use >
+	    py << EOF
+	    saved_eventignore = vim.options['eventignore']
+	    vim.options['eventignore'] = 'all'
+	    try:
+	        vim.current.buffer = vim.buffers[2] # Switch to buffer 2
+	    finally:
+	        vim.options['eventignore'] = saved_eventignore
+	    EOF
+<
+vim.vars						*python-vars*
+vim.vvars						*python-vvars*
+	Dictionary-like objects holding dictionaries with global (|g:|) and 
+	vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`, 
+	but faster.
+
+vim.options						*python-options*
+	Object partly supporting mapping protocol (supports setting and 
+	getting items) providing a read-write access to global options.
+	Note: unlike |:set| this provides access only to global options. You
+	cannot use this object to obtain or set local options' values or
+	access local-only options in any fashion. Raises KeyError if no global
+	option with such name exists (i.e. does not raise KeyError for
+	|global-local| options and global only options, but does for window-
+	and buffer-local ones).  Use |python-buffer| objects to access to
+	buffer-local options and |python-window| objects to access to
+	window-local options.
+
+	Type of this object is available via "Options" attribute of vim 
+	module.
 
 Output from Python					*python-output*
 	Vim displays all Python code output in the Vim message area.  Normal
@@ -214,6 +306,88 @@
 	supported, and may cause the program to crash.  This should probably be
 	fixed.
 
+		    *python2-directory* *python3-directory* *pythonx-directory*
+Python 'runtimepath' handling				*python-special-path*
+
+In python vim.VIM_SPECIAL_PATH special directory is used as a replacement for 
+the list of paths found in 'runtimepath': with this directory in sys.path and 
+vim.path_hooks in sys.path_hooks python will try to load module from 
+{rtp}/python2 (or python3) and {rtp}/pythonx (for both python versions) for 
+each {rtp} found in 'runtimepath'.
+
+Implementation is similar to the following, but written in C: >
+
+    from imp import find_module, load_module
+    import vim
+    import sys
+
+    class VimModuleLoader(object):
+        def __init__(self, module):
+            self.module = module
+
+        def load_module(self, fullname, path=None):
+            return self.module
+
+    def _find_module(fullname, oldtail, path):
+        idx = oldtail.find('.')
+        if idx > 0:
+            name = oldtail[:idx]
+            tail = oldtail[idx+1:]
+            fmr = find_module(name, path)
+            module = load_module(fullname[:-len(oldtail)] + name, *fmr)
+            return _find_module(fullname, tail, module.__path__)
+        else:
+            fmr = find_module(fullname, path)
+            return load_module(fullname, *fmr)
+
+    # It uses vim module itself in place of VimPathFinder class: it does not 
+    # matter for python which object has find_module function attached to as 
+    # an attribute.
+    class VimPathFinder(object):
+        @classmethod
+        def find_module(cls, fullname, path=None):
+            try:
+                return VimModuleLoader(_find_module(fullname, fullname, path or vim._get_paths()))
+            except ImportError:
+                return None
+
+        @classmethod
+        def load_module(cls, fullname, path=None):
+            return _find_module(fullname, fullname, path or vim._get_paths())
+
+    def hook(path):
+        if path == vim.VIM_SPECIAL_PATH:
+            return VimPathFinder
+        else:
+            raise ImportError
+
+    sys.path_hooks.append(hook)
+
+vim.VIM_SPECIAL_PATH					*python-VIM_SPECIAL_PATH*
+	String constant used in conjunction with vim path hook. If path hook 
+	installed by vim is requested to handle anything but path equal to 
+	vim.VIM_SPECIAL_PATH constant it raises ImportError. In the only other 
+	case it uses special loader.
+
+	Note: you must not use value of this constant directly, always use 
+	      vim.VIM_SPECIAL_PATH object.
+
+vim.find_module(...)					*python-find_module*
+vim.path_hook(path)					*python-path_hook*
+	Methods or objects used to implement path loading as described above. 
+	You should not be using any of these directly except for vim.path_hook 
+	in case you need to do something with sys.meta_path. It is not 
+	guaranteed that any of the objects will exist in the future vim 
+	versions.
+
+vim._get_paths						*python-_get_paths*
+	Methods returning a list of paths which will be searched for by path 
+	hook. You should not rely on this method being present in future 
+	versions, but can use it for debugging.
+
+	It returns a list of {rtp}/python2 (or {rtp}/python3) and 
+	{rtp}/pythonx directories for each {rtp} in 'runtimepath'.
+
 ==============================================================================
 3. Buffer objects					*python-buffer*
 
@@ -222,8 +396,9 @@
 	- from indexing vim.buffers (|python-buffers|)
 	- from the "buffer" attribute of a window (|python-window|)
 
-Buffer objects have one read-only attribute - name - the full file name for
-the buffer.  They also have three methods (append, mark, and range; see below).
+Buffer objects have two read-only attributes - name - the full file name for
+the buffer, and number - the buffer number.  They also have three methods
+(append, mark, and range; see below).
 
 You can also treat buffer objects as sequence objects.  In this context, they
 act as if they were lists (yes, they are mutable) of strings, with each
@@ -238,6 +413,24 @@
 line numbers, which start from 1.  This is particularly relevant when dealing
 with marks (see below) which use vim line numbers.
 
+The buffer object attributes are:
+	b.vars		Dictionary-like object used to access 
+			|buffer-variable|s.
+	b.options	Mapping object (supports item getting, setting and 
+			deleting) that provides access to buffer-local options 
+			and buffer-local values of |global-local| options. Use 
+			|python-window|.options if option is window-local, 
+			this object will raise KeyError. If option is 
+			|global-local| and local value is missing getting it 
+			will return None.
+	b.name		String, RW. Contains buffer name (full path).
+			Note: when assigning to b.name |BufFilePre| and 
+			|BufFilePost| autocommands are launched.
+	b.number	Buffer number. Can be used as |python-buffers| key.
+			Read-only.
+	b.valid		True or False. Buffer object becomes invalid when 
+			corresponding buffer is wiped out.
+
 The buffer object methods are:
 	b.append(str)	Append a line to the buffer
 	b.append(str, nr)  Idem, below line "nr"
@@ -256,6 +449,8 @@
 A trailing '\n' is allowed and ignored, so that you can do: >
 	:py b.append(f.readlines())
 
+Buffer object type is available using "Buffer" attribute of vim module.
+
 Examples (assume b is the current buffer) >
 	:py print b.name		# write the buffer file name
 	:py b[0] = "hello!!!"		# replace the top line
@@ -267,6 +462,9 @@
 	:py n = len(b)			# number of lines
 	:py (row,col) = b.mark('a')	# named mark
 	:py r = b.range(1,5)		# a sub-range of the buffer
+	:py b.vars["foo"] = "bar"	# assign b:foo variable
+	:py b.options["ff"] = "dos"	# set fileformat
+	:py del b.options["ar"]		# same as :set autoread<
 
 ==============================================================================
 4. Range objects					*python-range*
@@ -294,6 +492,8 @@
 			for Python's built-in list objects.
 	r.append(list, nr)  Idem, after line "nr"
 
+Range object type is available using "Range" attribute of vim module.
+
 Example (assume r is the current range):
 	# Send all lines in a range to the default printer
 	vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
@@ -304,6 +504,8 @@
 Window objects represent vim windows.  You can obtain them in a number of ways:
 	- via vim.current.window (|python-current|)
 	- from indexing vim.windows (|python-windows|)
+	- from indexing "windows" attribute of a tab page (|python-tabpage|)
+	- from the "window" attribute of a tab page (|python-tabpage|)
 
 You can manipulate window objects only through their attributes.  They have no
 methods, and no sequence or other interface.
@@ -314,11 +516,167 @@
 				This is a tuple, (row,col).
 	height (read-write)	The window height, in rows
 	width (read-write)	The window width, in columns
+	vars (read-only)	The window |w:| variables. Attribute is 
+				unassignable, but you can change window 
+				variables this way
+	options (read-only)	The window-local options. Attribute is 
+				unassignable, but you can change window 
+				options this way. Provides access only to 
+				window-local options, for buffer-local use 
+				|python-buffer| and for global ones use 
+				|python-options|. If option is |global-local| 
+				and local value is missing getting it will 
+				return None.
+	number (read-only)	Window number.  The first window has number 1.
+				This is zero in case it cannot be determined
+				(e.g. when the window object belongs to other
+				tab page).
+	row, col (read-only)	On-screen window position in display cells.
+				First position is zero.
+	tabpage (read-only)	Window tab page.
+	valid (read-write)	True or False. Window object becomes invalid 
+				when corresponding window is closed.
+
 The height attribute is writable only if the screen is split horizontally.
 The width attribute is writable only if the screen is split vertically.
 
+Window object type is available using "Window" attribute of vim module.
+
 ==============================================================================
-6. Dynamic loading					*python-dynamic*
+6. Tab page objects					*python-tabpage*
+
+Tab page objects represent vim tab pages. You can obtain them in a number of 
+ways:
+	- via vim.current.tabpage (|python-current|)
+	- from indexing vim.tabpages (|python-tabpages|)
+
+You can use this object to access tab page windows. They have no methods and 
+no sequence or other interfaces.
+
+Tab page attributes are:
+	number		The tab page number like the one returned by 
+			|tabpagenr()|.
+	windows		Like |python-windows|, but for current tab page.
+	vars		The tab page |t:| variables.
+	window		Current tabpage window.
+	valid		True or False. Tab page object becomes invalid when 
+			corresponding tab page is closed.
+
+TabPage object type is available using "TabPage" attribute of vim module.
+
+==============================================================================
+7. vim.bindeval objects				*python-bindeval-objects*
+
+vim.Dictionary object				*python-Dictionary*
+    Dictionary-like object providing access to vim |Dictionary| type.
+    Attributes:
+        Attribute  Description ~
+        locked     One of                       *python-.locked*
+                    Value           Description ~
+                    zero            Variable is not locked
+                    vim.VAR_LOCKED  Variable is locked, but can be unlocked
+                    vim.VAR_FIXED   Variable is locked and can't be unlocked
+                   Read-write. You can unlock locked variable by assigning 
+                   `True` or `False` to this attribute. No recursive locking 
+                   is supported.
+        scope      One of
+                    Value              Description ~
+                    zero               Dictionary is not a scope one
+                    vim.VAR_DEF_SCOPE  |g:| or |l:| dictionary
+                    vim.VAR_SCOPE      Other scope dictionary,
+                                       see |internal-variables|
+    Methods (note: methods do not support keyword arguments):
+        Method      Description ~
+        keys()      Returns a list with dictionary keys.
+        values()    Returns a list with dictionary values.
+        items()     Returns a list of 2-tuples with dictionary contents.
+        update(iterable), update(dictionary), update(**kwargs)
+                    Adds keys to dictionary.
+        get(key[, default=None])
+                    Obtain key from dictionary, returning the default if it is 
+                    not present.
+        pop(key[, default])
+                    Remove specified key from dictionary and return 
+                    corresponding value. If key is not found and default is 
+                    given returns the default, otherwise raises KeyError.
+        popitem()
+                    Remove random key from dictionary and return (key, value) 
+                    pair.
+        has_key(key)
+                    Check whether dictionary contains specified key, similar 
+                    to `key in dict`.
+
+        __new__(), __new__(iterable), __new__(dictionary), __new__(update)
+                    You can use `vim.Dictionary()` to create new vim 
+                    dictionaries. `d=vim.Dictionary(arg)` is the same as 
+                    `d=vim.bindeval('{}');d.update(arg)`. Without arguments 
+                    constructs empty dictionary.
+
+    Examples: >
+        d = vim.Dictionary(food="bar")		# Constructor
+        d['a'] = 'b'				# Item assignment
+        print d['a']				# getting item
+        d.update({'c': 'd'})			# .update(dictionary)
+        d.update(e='f')				# .update(**kwargs)
+        d.update((('g', 'h'), ('i', 'j')))	# .update(iterable)
+        for key in d.keys():			# .keys()
+        for val in d.values():			# .values()
+        for key, val in d.items():		# .items()
+        print isinstance(d, vim.Dictionary)	# True
+        for key in d:				# Iteration over keys
+        class Dict(vim.Dictionary):		# Subclassing
+<
+    Note: when iterating over keys you should not modify dictionary.
+
+vim.List object					*python-List*
+    Sequence-like object providing access to vim |List| type.
+    Supports `.locked` attribute, see |python-.locked|. Also supports the 
+    following methods:
+        Method          Description ~
+        extend(item)    Add items to the list.
+
+        __new__(), __new__(iterable)
+                        You can use `vim.List()` to create new vim lists. 
+                        `l=vim.List(iterable)` is the same as 
+                        `l=vim.bindeval('[]');l.extend(iterable)`. Without 
+                        arguments constructs empty list.
+    Examples: >
+        l = vim.List("abc")		# Constructor, result: ['a', 'b', 'c']
+        l.extend(['abc', 'def'])	# .extend() method
+        print l[1:]			# slicing
+        l[:0] = ['ghi', 'jkl']		# slice assignment
+        print l[0]			# getting item
+        l[0] = 'mno'			# assignment
+        for i in l:			# iteration
+        print isinstance(l, vim.List)	# True
+        class List(vim.List):		# Subclassing
+
+vim.Function object				*python-Function*
+    Function-like object, acting like vim |Funcref| object. Supports `.name` 
+    attribute and is callable. Accepts special keyword argument `self`, see 
+    |Dictionary-function|. You can also use `vim.Function(name)` constructor, 
+    it is the same as `vim.bindeval('function(%s)'%json.dumps(name))`.
+
+    Examples: >
+        f = vim.Function('tr')			# Constructor
+        print f('abc', 'a', 'b')		# Calls tr('abc', 'a', 'b')
+        vim.command('''
+            function DictFun() dict
+                return self
+            endfunction
+        ''')
+        f = vim.bindeval('function("DictFun")')
+        print f(self={})			# Like call('DictFun', [], {})
+        print isinstance(f, vim.Function)	# True
+
+==============================================================================
+8. pyeval() and py3eval() Vim functions			*python-pyeval*
+
+To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| 
+functions to evaluate Python expressions and pass their values to VimL.
+
+==============================================================================
+9. Dynamic loading					*python-dynamic*
 
 On MS-Windows the Python library can be loaded dynamically.  The |:version|
 output then includes |+python/dyn|.
@@ -335,12 +693,17 @@
 sure edit "gvim.exe" and search for "python\d*.dll\c".
 
 ==============================================================================
-7. Python 3						*python3*
+10. Python 3						*python3*
 
 							*:py3* *:python3*
-The |:py3| and |:python3| commands work similar to |:python|.
-							*:py3file*
-The |:py3file| command works similar to |:pyfile|.
+The `:py3` and `:python3` commands work similar to `:python`.  A simple check
+if the `:py3` command is working: >
+	:py3 print("Hello")
+<							*:py3file*
+The `:py3file` command works similar to `:pyfile`.
+							*:py3do* *E863*
+The `:py3do` command works similar to `:pydo`.
+
 
 Vim can be built in four ways (:version output):
 1. No Python support	    (-python, -python3)
@@ -355,7 +718,7 @@
 When doing this on Linux/Unix systems and importing global symbols, this leads
 to a crash when the second Python version is used.  So either global symbols
 are loaded but only one Python version is activated, or no global symbols are
-loaded. The latter makes Python's "import" fail on libaries that expect the
+loaded. The latter makes Python's "import" fail on libraries that expect the
 symbols to be provided by Vim.
 							*E836* *E837*
 Vim's configuration script makes a guess for all libraries based on one
@@ -377,6 +740,23 @@
 3. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
    may crash Vim though.
 
+							*E880*
+Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
+	:py vim.command("qall!")
+<
+
+							*has-python*
+You can test what Python version is available with: >
+	if has('python')
+	  echo 'there is Python 2.x'
+  	elseif has('python3')
+	  echo 'there is Python 3.x'
+	endif
+
+Note however, that when Python 2 and 3 are both available and loaded
+dynamically, these has() calls will try to load them.  If only one can be
+loaded at a time, just checking if Python 2 or 3 are available will prevent
+the other one from being available.
 
 ==============================================================================
  vim:tw=78:ts=8:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/if_ruby.txt vim73/runtime/doc/if_ruby.txt
--- vim73.orig/runtime/doc/if_ruby.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/if_ruby.txt	2013-08-04 19:09:07.863952119 +0000
@@ -1,4 +1,4 @@
-*if_ruby.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*if_ruby.txt*   For Vim version 7.3.  Last change: 2012 Aug 02
 
 
 		  VIM REFERENCE MANUAL    by Shugo Maeda
@@ -25,7 +25,8 @@
 1. Commands						*ruby-commands*
 
 							*:ruby* *:rub*
-:rub[y] {cmd}		Execute Ruby command {cmd}.
+:rub[y] {cmd}		Execute Ruby command {cmd}.  A command to try it out: >
+				:ruby print "Hello"
 
 :rub[y] << {endpattern}
 {script}
@@ -187,12 +188,12 @@
 ==============================================================================
 6. Dynamic loading					*ruby-dynamic*
 
-On MS-Windows the Ruby library can be loaded dynamically.  The |:version|
-output then includes |+ruby/dyn|.
+On MS-Windows and Unix the Ruby library can be loaded dynamically.  The
+|:version| output then includes |+ruby/dyn|.
 
-This means that Vim will search for the Ruby DLL file only when needed.  When
-you don't use the Ruby interface you don't need it, thus you can use Vim
-without this DLL file.
+This means that Vim will search for the Ruby DLL file or shared library only
+when needed.  When you don't use the Ruby interface you don't need it, thus
+you can use Vim even though this library file is not on your system.
 
 You need to install the right version of Ruby for this to work.  You can find
 the package to download from:
@@ -208,6 +209,8 @@
 
 If you want to build Vim with Ruby 1.9.1, you need to edit the config.h file
 and comment-out the check for _MSC_VER.
+You may also need to rename the include directory name to match the version,
+strangely for Ruby 1.9.3 the directory is called 1.9.1.
 
 ==============================================================================
  vim:tw=78:ts=8:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/if_tcl.txt vim73/runtime/doc/if_tcl.txt
--- vim73.orig/runtime/doc/if_tcl.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/if_tcl.txt	2013-08-04 19:09:07.867285442 +0000
@@ -1,4 +1,4 @@
-*if_tcl.txt*    For Vim version 7.3.  Last change: 2008 Aug 16
+*if_tcl.txt*    For Vim version 7.3.  Last change: 2012 Aug 02
 
 
 		  VIM REFERENCE MANUAL    by Ingo Wilken
@@ -27,7 +27,9 @@
 1. Commands				*tcl-ex-commands* *E571* *E572*
 
 							*:tcl* *:tc*
-:tc[l] {cmd}		Execute Tcl command {cmd}.
+:tc[l] {cmd}		Execute Tcl command {cmd}.  A simple check if `:tcl`
+			is working: >
+				:tcl puts "Hello"
 
 :[range]tc[l] << {endmarker}
 {script}
diff -Naur vim73.orig/runtime/doc/indent.txt vim73/runtime/doc/indent.txt
--- vim73.orig/runtime/doc/indent.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/indent.txt	2013-08-04 19:09:07.867285442 +0000
@@ -1,4 +1,4 @@
-*indent.txt*    For Vim version 7.3.  Last change: 2010 Jul 30
+*indent.txt*    For Vim version 7.3.  Last change: 2013 Jun 13
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -128,13 +128,20 @@
 used CTRL-T or CTRL-D.
 
 						*cinoptions-values*
-The 'cinoptions' option sets how Vim performs indentation.  In the list below,
+The 'cinoptions' option sets how Vim performs indentation.  The value after
+the option character can be one of these (N is any number):
+	N	indent N spaces
+	-N	indent N spaces to the left
+	Ns	N times 'shiftwidth' spaces
+	-Ns	N times 'shiftwidth' spaces to the left
+
+In the list below,
 "N" represents a number of your choice (the number can be negative).  When
 there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
 "1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc.  You can use a
-decimal point, too: "-0.5s" is minus half a 'shiftwidth'.  The examples below
-assume a 'shiftwidth' of 4.
-
+decimal point, too: "-0.5s" is minus half a 'shiftwidth'.
+The examples below assume a 'shiftwidth' of 4.
+							*cino->*
 	>N    Amount added for "normal" indent.  Used after a line that should
 	      increase the indent (lines starting with "if", an opening brace,
 	      etc.).  (default 'shiftwidth').
@@ -145,6 +152,7 @@
 		      foo;		foo;			  foo;
 		  }		      }			  }
 <
+							*cino-e*
 	eN    Add N to the prevailing indent inside a set of braces if the
 	      opening brace at the End of the line (more precise: is not the
 	      first character in a line).  This is useful if you want a
@@ -160,6 +168,7 @@
 		      bar;		  bar;		      bar;
 		  }		      }			  }
 <
+							*cino-n*
 	nN    Add N to the prevailing indent for a statement after an "if",
 	      "while", etc., if it is NOT inside a set of braces.  This is
 	      useful if you want a different indent when there is no '{'
@@ -174,6 +183,7 @@
 		      bar;		  bar;		      bar;
 		  }		      }			  }
 <
+							*cino-f*
 	fN    Place the first opening brace of a function or other block in
 	      column N.  This applies only for an opening brace that is not
 	      inside other braces and is at the start of the line.  What comes
@@ -184,6 +194,7 @@
 		  {			{		      {
 		      int foo;		    int foo;		  int foo;
 <
+							*cino-{*
 	{N    Place opening braces N characters from the prevailing indent.
 	      This applies only for opening braces that are inside other
 	      braces.  (default 0).
@@ -193,6 +204,7 @@
 		  {			{		      {
 		      foo;		  foo;		      foo;
 <
+							*cino-}*
 	}N    Place closing braces N characters from the matching opening
 	      brace.  (default 0).
 
@@ -202,6 +214,7 @@
 		      foo;		  foo;		      foo;
 		  }		      }			    }
 <
+							*cino-^*
 	^N    Add N to the prevailing indent inside a set of braces if the
 	      opening brace is in column 0.  This can specify a different
 	      indent for whole of a function (some may like to set it to a
@@ -216,6 +229,7 @@
 		      }			}		  }
 		  }		      }			  }
 <
+							*cino-L*
 	LN    Controls placement of jump labels. If N is negative, the label
 	      will be placed at column 1. If N is non-negative, the indent of
 	      the label will be the prevailing indent minus N.  (default -1).
@@ -229,6 +243,7 @@
 		      }                   }                   }
 		  }                   }                   }
 <
+							*cino-:*
 	:N    Place case labels N characters from the indent of the switch().
 	      (default 'shiftwidth').
 
@@ -240,6 +255,7 @@
 		      default:	      default:
 		  }		      }
 <
+							*cino-=*
 	=N    Place statements occurring after a case label N characters from
 	      the indent of the label.  (default 'shiftwidth').
 
@@ -247,6 +263,7 @@
 		   case 11:		case 11:  a = a + 1;
 		       a = a + 1;		  b = b + 1;
 <
+							*cino-l*
 	lN    If N != 0 Vim will align with a case label instead of the
 	      statement after it in the same line.
 
@@ -256,8 +273,10 @@
 				    break;	      break;
 				}		  }
 <
+							*cino-b*
 	bN    If N != 0 Vim will align a final "break" with the case label,
 	      so that case..break looks like a sort of block.  (default: 0).
+	      When using 1, consider adding "0=break" to 'cinkeys'.
 
 		cino=		    cino=b1 >
 		  switch (x)	      switch(x)
@@ -271,6 +290,7 @@
 			  break;	  break;
 		  }		      }
 <
+							*cino-g*
 	gN    Place C++ scope declarations N characters from the indent of the
 	      block they are in.  (default 'shiftwidth').  A scope declaration
 	      can be "public:", "protected:" or "private:".
@@ -282,6 +302,7 @@
 		      private:	      private:
 		  }		      }
 <
+							*cino-h*
 	hN    Place statements occurring after a C++ scope declaration N
 	      characters from the indent of the label.  (default
 	      'shiftwidth').
@@ -290,6 +311,21 @@
 		   public:		public:   a = a + 1;
 		       a = a + 1;		  b = b + 1;
 <
+							*cino-N*
+	NN    Indent inside C++ namespace N characters extra compared to a
+	      normal block.  (default 0).
+
+		cino=			   cino=N-s >
+		  namespace {                namespace {
+		      void function();       void function();
+		  }                          }
+
+		  namespace my               namespace my
+		  {                          {
+		      void function();       void function();
+		  }                          }
+<
+							*cino-p*
 	pN    Parameter declarations for K&R-style function declarations will
 	      be indented N characters from the margin.  (default
 	      'shiftwidth').
@@ -299,6 +335,7 @@
 		      int a;	      int a;			  int a;
 		      char b;	      char b;			  char b;
 <
+							*cino-t*
 	tN    Indent a function return type declaration N characters from the
 	      margin.  (default 'shiftwidth').
 
@@ -306,6 +343,7 @@
 		      int	      int			 int
 		  func()	      func()		  func()
 <
+							*cino-i*
 	iN    Indent C++ base class declarations and constructor
 	      initializations, if they start in a new line (otherwise they
 	      are aligned at the right side of the ':').
@@ -319,13 +357,18 @@
 		      BaseClass(3)	    BaseClass(3)
 		  {}			    {}
 <
-	+N    Indent a continuation line (a line that spills onto the next) N
-	      additional characters.  (default 'shiftwidth').
+							*cino-+*
+	+N    Indent a continuation line (a line that spills onto the next)
+              inside a function N additional characters.  (default
+              'shiftwidth').
+              Outside of a function, when the previous line ended in a
+              backslash, the 2 * N is used.
 
 		cino=			  cino=+10 >
 		  a = b + 9 *		    a = b + 9 *
 		      c;			      c;
 <
+							*cino-c*
 	cN    Indent comment lines after the comment opener, when there is no
 	      other text with which to align, N characters from the comment
 	      opener.  (default 3).  See also |format-comments|.
@@ -335,6 +378,7 @@
 		     text.			 text.
 		   */			     */
 <
+							*cino-C*
 	CN    When N is non-zero, indent comment lines by the amount specified
 	      with the c flag above even if there is other text behind the
 	      comment opener.  (default 0).
@@ -345,12 +389,14 @@
 		  ********/		    ********/
 <	      (Example uses ":set comments& comments-=s1:/* comments^=s0:/*")
 
+							*cino-/*
 	/N    Indent comment lines N characters extra.  (default 0).
 		cino=			  cino=/4 >
 		  a = b;		    a = b;
 		  /* comment */			/* comment */
 		  c = d;		    c = d;
 <
+							*cino-(*
 	(N    When in unclosed parentheses, indent N characters from the line
 	      with the unclosed parentheses.  Add a 'shiftwidth' for every
 	      unclosed parentheses.  When N is 0 or the unclosed parentheses
@@ -366,6 +412,7 @@
 			  (c2 || c3))		(c2 || c3))
 		     {			       {
 <
+							*cino-u*
 	uN    Same as (N, but for one level deeper.  (default 'shiftwidth').
 
 		cino=			  cino=u2 >
@@ -373,6 +420,7 @@
 			  && (c22345		    && (c22345
 			      || c3))		      || c3))
 <
+							*cino-U*
 	UN    When N is non-zero, do not ignore the indenting specified by
 	      ( or u in case that the unclosed parentheses is the first
 	      non-white character in its line.  (default 0).
@@ -384,6 +432,7 @@
 		       c3			    c3
 		      ) && c4;			) && c4;
 <
+							*cino-w*
 	wN    When in unclosed parentheses and N is non-zero and either
 	      using "(0" or "u0", respectively, or using "U0" and the unclosed
 	      parentheses is the first non-white character in its line, line
@@ -396,6 +445,7 @@
 				|| c3))		    || c3))
 		      foo;			foo;
 <
+							*cino-W*
 	WN    When in unclosed parentheses and N is non-zero and either
 	      using "(0" or "u0", respectively and the unclosed parentheses is
 	      the last non-white character in its line and it is not the
@@ -410,6 +460,23 @@
 		  a_short_line(argument,    a_short_line(argument,
 			       argument);		 argument);
 <
+							*cino-k*
+	kN    When in unclosed parentheses which follow "if", "for" or
+	      "while" and N is non-zero, overrides the behaviour defined by
+	      "(N": causes the indent to be N characters relative to the outer
+	      context (i.e. the line where "if", "for" or "while" is).  Has
+	      no effect on deeper levels of nesting.  Affects flags like "wN"
+	      only for the "if", "for" and "while" conditions.  If 0, defaults
+	      to behaviour defined by the "(N" flag.  (default: 0).
+
+		cino=(0			   cino=(0,ks >
+		  if (condition1	    if (condition1
+		      && condition2)		    && condition2)
+		      action();			action();
+		  function(argument1	    function(argument1
+			   && argument2);	     && argument2);
+<
+							*cino-m*
 	mN    When N is non-zero, line up a line starting with a closing
 	      parentheses with the first character of the line with the
 	      matching opening parentheses.  (default 0).
@@ -424,6 +491,7 @@
 		     )			    )
 		      foo;			foo;
 <
+							*cino-M*
 	MN    When N is non-zero, line up a line starting with a closing
 	      parentheses with the first character of the previous line.
 	      (default 0).
@@ -433,10 +501,11 @@
 			 cond2			   cond2
 		     )				   )
 <
-					*java-cinoptions* *java-indenting*
-	jN    Indent java anonymous classes correctly.  The value 'N' is
-	      currently unused but must be non-zero (e.g. 'j1').  'j1' will
-	      indent for example the following code snippet correctly: >
+				*java-cinoptions* *java-indenting* *cino-j*
+	jN    Indent Java anonymous classes correctly.  Also works well for
+	      Javascript.  The value 'N' is currently unused but must be
+	      non-zero (e.g. 'j1').  'j1' will indent for example the
+	      following code snippet correctly: >
 
 		object.add(new ChangeListener() {
 		    public void stateChanged(ChangeEvent e) {
@@ -444,10 +513,11 @@
 		    }
 		});
 <
-				*javascript-cinoptions* *javascript-indenting*
+			*javascript-cinoptions* *javascript-indenting* *cino-J*
 	JN    Indent JavaScript object declarations correctly by not confusing
 	      them with labels.  The value 'N' is currently unused but must be 
-	      non-zero (e.g. 'J1'). >
+	      non-zero (e.g. 'J1').  If you enable this you probably also want
+	      to set |cino-j|. >
 
 		var bar = {
 		    foo: {
@@ -462,23 +532,28 @@
 		    }
 		}
 <
+								*cino-)*
 	)N    Vim searches for unclosed parentheses at most N lines away.
 	      This limits the time needed to search for parentheses.  (default
 	      20 lines).
 
+								*cino-star*
 	*N    Vim searches for unclosed comments at most N lines away.  This
 	      limits the time needed to search for the start of a comment.
+	      If your /* */ comments stop indenting after N lines this is the
+	      value you will want to change.
 	      (default 70 lines).
 
+								*cino-#*
 	#N    When N is non-zero recognize shell/Perl comments, starting with
-	      '#'.  Default N is zero: don't recognizes '#' comments.  Note
+	      '#'.  Default N is zero: don't recognize '#' comments.  Note
 	      that lines starting with # will still be seen as preprocessor
 	      lines.
 
 
 The defaults, spelled out in full, are:
-	cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
-			c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
+	cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
+			c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
 
 Vim puts a line in column 1 if:
 - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
@@ -502,15 +577,117 @@
 REMARKS ABOUT SPECIFIC INDENT FILES ~
 
 
+CLOJURE					*ft-clojure-indent* *clojure-indent*
+
+Clojure indentation differs somewhat from traditional Lisps, due in part to
+the use of square and curly brackets, and otherwise by community convention.
+These conventions are not always universally followed, so the Clojure indent
+script offers a few configurable options, listed below.
+
+If the current vim does not include searchpairpos(), the indent script falls
+back to normal 'lisp' indenting, and the following options are ignored.
+
+							*g:clojure_maxlines*
+
+Set maximum scan distance of searchpairpos(). Larger values trade performance
+for correctness when dealing with very long forms. A value of 0 will scan
+without limits.
+>
+	" Default
+	let g:clojure_maxlines = 100
+<
+
+						*g:clojure_fuzzy_indent*
+					*g:clojure_fuzzy_indent_patterns*
+					*g:clojure_fuzzy_indent_blacklist*
+
+The 'lispwords' option is a list of comma-separated words that mark special
+forms whose subforms must be indented with two spaces.
+
+For example:
+>
+	(defn bad []
+	      "Incorrect indentation")
+
+	(defn good []
+	  "Correct indentation")
+<
+If you would like to specify 'lispwords' with a |pattern| instead, you can use
+the fuzzy indent feature:
+>
+	" Default
+	let g:clojure_fuzzy_indent = 1
+	let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
+	let g:clojure_fuzzy_indent_blacklist =
+		\ ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
+
+	" Legacy comma-delimited string version; the list format above is
+	" recommended. Note that patterns are implicitly anchored with ^ and $
+	let g:clojure_fuzzy_indent_patterns = 'with.*,def.*,let.*'
+<
+|g:clojure_fuzzy_indent_patterns| and |g:clojure_fuzzy_indent_blacklist| are
+|Lists| of patterns that will be matched against the unquoted, unqualified
+symbol at the head of a list. This means that a pattern like "^foo" will match
+all these candidates: "foobar", "my.ns/foobar", and "#'foobar".
+
+Each candidate word is tested for special treatment in this order:
+
+	1. Return true if word is literally in 'lispwords'
+	2. Return false if word matches a pattern in
+	   |g:clojure_fuzzy_indent_blacklist|
+	3. Return true if word matches a pattern in
+	   |g:clojure_fuzzy_indent_patterns|
+	4. Return false and indent normally otherwise
+
+					*g:clojure_special_indent_words*
+
+Some forms in Clojure are indented so that every subform is indented only two
+spaces, regardless of 'lispwords'. If you have a custom construct that should
+be indented in this idiosyncratic fashion, you can add your symbols to the
+default list below.
+>
+	" Default
+	let g:clojure_special_indent_words =
+	   \ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
+<
+
+					*g:clojure_align_multiline_strings*
+
+Align subsequent lines in multiline strings to the column after the opening
+quote, instead of the same column.
+
+For example:
+>
+	(def default
+	  "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+	  eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
+	  enim ad minim veniam, quis nostrud exercitation ullamco laboris
+	  nisi ut aliquip ex ea commodo consequat.")
+
+	(def aligned
+	  "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
+	   eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
+	   enim ad minim veniam, quis nostrud exercitation ullamco laboris
+	   nisi ut aliquip ex ea commodo consequat.")
+<
+This option is off by default.
+>
+	" Default
+	let g:clojure_align_multiline_strings = 0
+<
+
+
 FORTRAN							*ft-fortran-indent*
 
-Block if, select case, and where constructs are indented.  Comments, labelled
-statements and continuation lines are indented if the Fortran is in free
-source form, whereas they are not indented if the Fortran is in fixed source
-form because of the left margin requirements.  Hence manual indent corrections
-will be necessary for labelled statements and continuation lines when fixed
-source form is being used.  For further discussion of the method used for the
-detection of source format see |ft-fortran-syntax|.
+Block if, select case, where, and forall constructs are indented.  So are
+type, interface, associate, block, and enum constructs.  The indenting of
+subroutines, functions, modules, and program blocks is optional.  Comments,
+labelled statements and continuation lines are indented if the Fortran is in
+free source form, whereas they are not indented if the Fortran is in fixed
+source form because of the left margin requirements.  Hence manual indent
+corrections will be necessary for labelled statements and continuation lines
+when fixed source form is being used.  For further discussion of the method
+used for the detection of source format see |ft-fortran-syntax|.
 
 Do loops ~
 All do loops are left unindented by default.  Do loops can be unstructured in
@@ -537,6 +714,64 @@
 to get do loops indented in .f90 files and left alone in Fortran files with
 other extensions such as .for.
 
+Program units ~
+The indenting of program units (subroutines, functions, modules, and program
+blocks) is enabled by default but can be suppressed if a lighter, screen-width
+preserving indent style is desired.  To suppress the indenting of program
+units for all fortran files set the global fortran_indent_less variable in
+your .vimrc as follows >
+
+  let fortran_indent_less=1
+
+A finer level of suppression can be achieved by setting the corresponding
+buffer-local variable as follows >
+
+  let b:fortran_indent_less=1
+
+
+HTML				*ft-html-indent* *html-indent* *html-indenting*
+
+This is about variables you can set in your vimrc to customize HTML indenting.
+
+You can set the indent for the first line after <script> and <style>
+"blocktags" (default "zero"): >
+
+      :let g:html_indent_script1 = "inc"
+      :let g:html_indent_style1 = "inc"
+<
+      VALUE	MEANING ~
+      "zero"	zero indent
+      "auto"	auto indent (same indent as the blocktag)
+      "inc"	auto indent + one indent step
+
+Many tags increase the indent for what follows per default (see "Add Indent
+Tags" in the script).  You can add further tags with: >
+
+      :let g:html_indent_inctags = "html,body,head,tbody"
+
+You can also remove such tags with: >
+
+      :let g:html_indent_autotags = "th,td,tr,tfoot,thead"
+
+Default value is empty for both variables.  Note: the initial "inctags" are
+only defined once per Vim session.
+
+User variables are only read when the script is sourced.  To enable your
+changes during a session, without reloading the HTML file, you can manually
+do: >
+
+      :call HtmlIndent_CheckUserSettings()
+
+Detail:
+  Calculation of indent inside "blocktags" with "alien" content:
+      BLOCKTAG   INDENT EXPR	    WHEN APPLICABLE ~
+      <script> : {customizable}	    if first line of block
+	       : cindent(v:lnum)    if attributes empty or contain "java"
+	       : -1		    else (vbscript, tcl, ...)
+      <style>  : {customizable}	    if first line of block
+	       : GetCSSIndent()	    else
+      <!-- --> : -1
+
 
 PHP				*ft-php-indent* *php-indent* *php-indenting*
 
@@ -549,12 +784,12 @@
     :%s /\r$//g
 
 Or, you can simply |:let| the variable PHP_removeCRwhenUnix to 1 and the
-script will silently remove them when Vim loads a PHP file (at each|BufRead|).
+script will silently remove them when Vim loads a PHP file (at each |BufRead|).
 
 OPTIONS: ~
 
 PHP indenting can be altered in several ways by modifying the values of some
-variables:
+global variables:
 
 								*php-comment*
 To not enable auto-formating of comments by default (if you want to use your
@@ -562,10 +797,21 @@
     :let g:PHP_autoformatcomment = 0
 
 Else, 't' will be removed from the 'formatoptions' string and "qrowcb" will be
-added, see|fo-table|for more information.
+added, see |fo-table| for more information.
 -------------
 
-To add an extra indent to every PHP lines with N being the number of
+To add extra indentation to single-line comments: >
+    :let g:PHP_outdentSLComments = N
+
+With N being the number of 'shiftwidth' to add.
+
+Only single-line comments will be affected such as: >
+    # Comment
+    // Comment
+    /* Comment */
+-------------
+
+To add extra indentation to every PHP lines with N being the number of
 'shiftwidth' to add: >
     :let g:PHP_default_indenting = N
 
@@ -581,7 +827,7 @@
 
 	$command_hist = TRUE;
     ?>
-(Notice the extra indent between the PHP container markers and the code)
+(Notice the extra indentation between the PHP container markers and the code)
 -------------
 
 To indent PHP tags as the surrounding code: >
@@ -613,8 +859,10 @@
 To indent 'case:' and 'default:' statements in switch() blocks: >
     :let g:PHP_vintage_case_default_indent = 1
 
-(Since in PHP braces are not required inside 'case/default' blocks, by default they are indented at the same level than the 'switch()' to avoid
-unnecessary indentation)
+In PHP braces are not required inside 'case/default' blocks therefore 'case:'
+and 'default:' are indented at the same level than the 'switch()' to avoid
+meaningless indentation. You can use the above option to return to the
+traditional way.
 
 
 PYTHON							*ft-python-indent*
@@ -631,6 +879,43 @@
 	let g:pyindent_continue = '&sw * 2'
 
 
+R								*ft-r-indent*
+
+Function arguments are aligned if they span for multiple lines. If you prefer
+do not have the arguments of functions aligned, put in your |vimrc|:
+>
+   let r_indent_align_args = 0
+<
+All lines beginning with a comment character, #, get the same indentation
+level of the normal R code. Users of Emacs/ESS may be used to have lines
+beginning with a single # indented in the 40th column, ## indented as R code,
+and ### not indented. If you prefer that lines beginning with comment
+characters are aligned as they are by Emacs/ESS, put in your |vimrc|:
+>
+   let r_indent_ess_comments = 1
+<
+If you prefer that lines beginning with a single # are aligned at a column
+different from the 40th one, you should set a new value to the variable
+r_indent_comment_column, as in the example below:
+>
+   let r_indent_comment_column = 30
+<
+Any code after a line that ends with "<-" is indented. Emacs/ESS does not
+indent the code if it is a top level function. If you prefer that the
+Vim-R-plugin behaves like Emacs/ESS in this regard, put in your |vimrc|:
+>
+   let r_indent_ess_compatible = 1
+<
+Below is an example of indentation with and without this option enabled:
+>
+   ### r_indent_ess_compatible = 1           ### r_indent_ess_compatible = 0
+   foo <-                                    foo <-
+       function(x)                               function(x)
+   {                                             {
+       paste(x)                                      paste(x)
+   }                                             }
+<
+
 SHELL							*ft-sh-indent*
 
 The amount of indent applied under various circumstances in a shell file can
diff -Naur vim73.orig/runtime/doc/index.txt vim73/runtime/doc/index.txt
--- vim73.orig/runtime/doc/index.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/index.txt	2013-08-04 19:09:07.873952089 +0000
@@ -1,4 +1,4 @@
-*index.txt*     For Vim version 7.3.  Last change: 2010 Jul 21
+*index.txt*     For Vim version 7.3.  Last change: 2013 Jun 21
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -29,7 +29,7 @@
 ==============================================================================
 1. Insert mode						*insert-index*
 
-tag		char		action	~
+tag		char		action in Insert mode	~
 -----------------------------------------------------------------------
 |i_CTRL-@|	CTRL-@		insert previously inserted text and stop
 				insert
@@ -94,8 +94,8 @@
 |i_CTRL-Z|	CTRL-Z		when 'insertmode' set: suspend Vim
 |i_<Esc>|	<Esc>		end insert mode (unless 'insertmode' set)
 |i_CTRL-[|	CTRL-[		same as <Esc>
-|i_CTRL-\_CTRL-N| CTRL-\ CTRL-N	 go to Normal mode
-|i_CTRL-\_CTRL-G| CTRL-\ CTRL-G	 go to mode specified with 'insertmode'
+|i_CTRL-\_CTRL-N| CTRL-\ CTRL-N	go to Normal mode
+|i_CTRL-\_CTRL-G| CTRL-\ CTRL-G	go to mode specified with 'insertmode'
 		CTRL-\ a - z	reserved for extensions
 		CTRL-\ others	not used
 |i_CTRL-]|	CTRL-]		trigger abbreviation
@@ -141,7 +141,7 @@
 |i_<ScrollWheelUp>|	<ScrollWheelUp>		move window three lines up
 |i_<S-ScrollWheelUp>|	<S-ScrollWheelUp>	move window one page up
 |i_<ScrollWheelLeft>|	<ScrollWheelLeft>	move window six columns left
-|i_<S-ScrollWheelLeft>| <S-ScrollWheelLeft>	move window one page left
+|i_<S-ScrollWheelLeft>|	<S-ScrollWheelLeft>	move window one page left
 |i_<ScrollWheelRight>|	<ScrollWheelRight>	move window six columns right
 |i_<S-ScrollWheelRight>| <S-ScrollWheelRight>	move window one page right
 
@@ -212,8 +212,8 @@
 |CTRL-Y|	CTRL-Y		   scroll N lines downwards
 |CTRL-Z|	CTRL-Z		   suspend program (or start new shell)
 		CTRL-[ <Esc>	   not used
-|CTRL-\_CTRL-N| CTRL-\ CTRL-N	   go to Normal mode (no-op)
-|CTRL-\_CTRL-G| CTRL-\ CTRL-G	   go to mode specified with 'insertmode'
+|CTRL-\_CTRL-N|	CTRL-\ CTRL-N	   go to Normal mode (no-op)
+|CTRL-\_CTRL-G|	CTRL-\ CTRL-G	   go to mode specified with 'insertmode'
 		CTRL-\ a - z	   reserved for extensions
 		CTRL-\ others      not used
 |CTRL-]|	CTRL-]		   :ta to ident under cursor
@@ -431,7 +431,7 @@
 |<Insert>|	<Insert>	2  same as "i"
 |<Left>|	<Left>		1  same as "h"
 |<LeftMouse>|	<LeftMouse>	1  move cursor to the mouse click position
-|<MiddleMouse>| <MiddleMouse>	2  same as "gP" at the mouse click position
+|<MiddleMouse>|	<MiddleMouse>	2  same as "gP" at the mouse click position
 |<PageDown>|	<PageDown>	   same as CTRL-F
 |<PageUp>|	<PageUp>	   same as CTRL-B
 |<Right>|	<Right>		1  same as "l"
@@ -459,7 +459,7 @@
 
 These can be used after an operator or in Visual mode to select an object.
 
-tag		command		   action in Normal mode	~
+tag		command		   action in op-pending and Visual mode	~
 ------------------------------------------------------------------------------
 |v_aquote|	a"		   double quoted string
 |v_a'|		a'		   single quoted string
@@ -640,7 +640,7 @@
 |[s|		[s		1  move to the previous misspelled word
 |[z|		[z		1  move to start of open fold
 |[{|		[{		1  cursor N times back to unmatched '{'
-|[<MiddleMouse> [<MiddleMouse>	2  same as "[p"
+|[<MiddleMouse>| [<MiddleMouse>	2  same as "[p"
 
 |]_CTRL-D|	] CTRL-D	   jump to first #define found in current and
 				   included files matching the word under the
@@ -680,7 +680,7 @@
 |]s|		]s		1  move to next misspelled word
 |]z|		]z		1  move to end of open fold
 |]}|		]}		1  cursor N times forward to unmatched '}'
-|]<MiddleMouse> ]<MiddleMouse>	2  same as "]p"
+|]<MiddleMouse>| ]<MiddleMouse>	2  same as "]p"
 
 ==============================================================================
 2.4 Commands starting with 'g'						*g*
@@ -719,9 +719,13 @@
 |gH|		gH		   start Select line mode
 |gI|		gI		2  like "I", but always start in column 1
 |gJ|		gJ		2  join lines without inserting space
+|gN|		gN	      1,2  find the previous match with the last used
+				   search pattern and Visually select it
 |gP|		["x]gP		2  put the text [from register x] before the
 				   cursor N times, leave the cursor after it
+|gQ|		gQ		    switch to "Ex" mode with Vim editing
 |gR|		gR		2  enter Virtual Replace mode
+|gT|		gT		   go to the previous tab page
 |gU|		gU{motion}	2  make Nmove text uppercase
 |gV|		gV		   don't reselect the previous Visual area
 				   when executing a mapping or menu in Select
@@ -750,6 +754,8 @@
 				   lines down
 |gk|		gk		1  like "k", but when 'wrap' on go N screen
 				   lines up
+|gn|		gn	      1,2  find the next match with the last used
+				   search pattern and Visually select it
 |gm|		gm		1  go to character at middle of the screenline
 |go|		go		1  cursor to byte N in the buffer
 |gp|		["x]gp		2  put the text [from register x] after the
@@ -757,6 +763,7 @@
 |gq|		gq{motion}	2  format Nmove text
 |gr|		gr{char}	2  virtual replace N chars with {char}
 |gs|		gs		   go to sleep for N seconds (default 1)
+|gt|		gt		   go to the next tab page
 |gu|		gu{motion}	2  make Nmove text lowercase
 |gv|		gv		   reselect the previous Visual area
 |gw|		gw{motion}	2  format Nmove text and keep cursor
@@ -794,6 +801,10 @@
 |zE|		zE		   eliminate all folds
 |zF|		zF		   create a fold for N lines
 |zG|		zG		   mark word as good spelled word
+|zH|		zH		   when 'wrap' off scroll half a screenwidth
+				   to the right
+|zL|		zL		   when 'wrap' off scroll half a screenwidth
+				   to the left
 |zM|		zM		   set 'foldlevel' to zero
 |zN|		zN		   set 'foldenable'
 |zO|		zO		   open folds recursively
@@ -951,11 +962,13 @@
 "Completion" below refers to context-sensitive completion.  It will complete
 file names, tags, commands etc. as appropriate.
 
+tag		command	      action in Command-line editing mode	~
+------------------------------------------------------------------------------
 		CTRL-@		not used
 |c_CTRL-A|	CTRL-A		do completion on the pattern in front of the
 				cursor and insert all matches
 |c_CTRL-B|	CTRL-B		cursor to begin of command-line
-|c_CTRL-C|	CTRL-C		same as <ESC>
+|c_CTRL-C|	CTRL-C		same as <Esc>
 |c_CTRL-D|	CTRL-D		list completions that match the pattern in
 				front of the cursor
 |c_CTRL-E|	CTRL-E		cursor to end of command-line
@@ -1004,8 +1017,8 @@
 		CTRL-Z		not used (reserved for suspend)
 |c_<Esc>|	<Esc>		abandon command-line without executing it
 |c_<Esc>|	CTRL-[		same as <Esc>
-|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N	 go to Normal mode, abandon command-line
-|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G	 go to mode specified with 'insertmode',
+|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N	go to Normal mode, abandon command-line
+|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G	go to mode specified with 'insertmode',
 				abandon command-line
 		CTRL-\ a - d	reserved for extensions
 |c_CTRL-\_e|	CTRL-\ e {expr} replace the command line with the result of
@@ -1046,6 +1059,8 @@
 mentioning any arguments.  The optional part of the command name is inside [].
 The commands are sorted on the non-optional part of their name.
 
+tag	      command	      action ~
+------------------------------------------------------------------------------
 |:!|		:!		filter lines or execute an external command
 |:!!|		:!!		repeat last ":!" command
 |:#|		:#		same as ":number"
@@ -1125,7 +1140,7 @@
 |:cgetbuffer|	:cgetb[uffer]	get errors from buffer
 |:cgetexpr|	:cgete[xpr]	get errors from expr
 |:cgetfile|	:cg[etfile]	read file with error messages
-|:changes|	:cha[nges]	print the change list
+|:changes|	:changes	print the change list
 |:chdir|	:chd[ir]	change directory
 |:checkpath|	:che[ckpath]	list included files
 |:checktime|	:checkt[ime]	check timestamp of loaded buffers
@@ -1256,7 +1271,7 @@
 |:k|		:k		set a mark
 |:keepalt|	:keepa[lt]	following command keeps the alternate file
 |:keepmarks|	:kee[pmarks]	following command keeps marks where they are
-|:keepjumps|	:keepj[jumps]	following command keeps jumplist and marks
+|:keepjumps|	:keepj[umps]	following command keeps jumplist and marks
 |:lNext|	:lN[ext]	go to previous entry in location list
 |:lNfile|	:lNf[ile]	go to last entry in previous file
 |:list|		:l[ist]		print lines
@@ -1374,7 +1389,7 @@
 |:promptrepl|	:promptr[epl]	open GUI dialog for search/replace
 |:perldo|	:perld[o]	execute Perl command for each line
 |:pop|		:po[p]		jump to older entry in tag stack
-|:popup|	:pop[up]	popup a menu by name
+|:popup|	:popu[p]	popup a menu by name
 |:ppop|		:pp[op]		":pop" in preview window
 |:preserve|	:pre[serve]	write all text to swap file
 |:previous|	:prev[ious]	go to previous file in argument list
@@ -1392,8 +1407,10 @@
 |:pwd|		:pw[d]		print current directory
 |:py3|		:py3		execute Python 3 command
 |:python3|	:python3	same as :py3
+|:py3do|	:py3d[o]	execute Python 3 command for each line
 |:py3file|	:py3f[ile]	execute Python 3 script file
 |:python|	:py[thon]	execute Python command
+|:pydo|		:pyd[o]		execute Python command for each line
 |:pyfile|	:pyf[ile]	execute Python script file
 |:quit|		:q[uit]		quit current window (when one window quit Vim)
 |:quitall|	:quita[ll]	quit Vim
@@ -1460,7 +1477,7 @@
 |:slast|	:sla[st]	split window and go to last file in the
 				argument list
 |:smagic|	:sm[agic]	:substitute with 'magic'
-|:smap|		:sma[p]		like ":map" but for Select mode
+|:smap|		:smap		like ":map" but for Select mode
 |:smapclear|	:smapc[lear]	remove all mappings for Select mode
 |:smenu|	:sme[nu]	add menu for Select mode
 |:snext|	:sn[ext]	split window and go to next file in the
@@ -1497,6 +1514,7 @@
 |:sview|	:sv[iew]	split window and edit file read-only
 |:swapname|	:sw[apname]	show the name of the current swap file
 |:syntax|	:sy[ntax]	syntax highlighting
+|:syntime|	:synti[me]	measure syntax highlighting speed
 |:syncbind|	:sync[bind]	sync scroll binding
 |:t|		:t		same as ":copy"
 |:tNext|	:tN[ext]	jump to previous matching tag
diff -Naur vim73.orig/runtime/doc/insert.txt vim73/runtime/doc/insert.txt
--- vim73.orig/runtime/doc/insert.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/insert.txt	2013-08-04 19:09:07.877285412 +0000
@@ -1,4 +1,4 @@
-*insert.txt*    For Vim version 7.3.  Last change: 2010 Jul 29
+*insert.txt*    For Vim version 7.3.  Last change: 2013 Jul 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -136,6 +136,8 @@
 				too.
 				When the result is a Float it's automatically
 				converted to a String.
+				When append() or setline() is invoked the undo
+				sequence will be broken.
 		See |registers| about registers.  {not in Vi}
 
 CTRL-R CTRL-R {0-9a-z"%#*+/:.-=}			*i_CTRL-R_CTRL-R*
@@ -380,7 +382,16 @@
 end of the line, it will be put on the last character in the line.  In
 mappings it's often better to use <Esc> (first put an "x" in the text, <Esc>
 will then always put the cursor on it).  Or use CTRL-\ CTRL-O, but then
-beware of the cursor possibly being beyond the end of the line.
+beware of the cursor possibly being beyond the end of the line.  Note that the
+command following CTRL-\ CTRL-O can still move the cursor, it is not restored
+to its original position.
+
+The CTRL-O command takes you to Normal mode.  If you then use a command enter
+Insert mode again it normally doesn't nest.  Thus when typing "a<C-O>a" and
+then <Esc> takes you back to Normal mode, you do not need to type <Esc> twice.
+An exception is when not typing the command, e.g. when executing a mapping or
+sourcing a script.  This makes mappings work that briefly switch to Insert
+mode.
 
 The shifted cursor keys are not available on all terminals.
 
@@ -394,7 +405,12 @@
 
 This redefines the backspace key to start a new undo sequence.  You can now
 undo the effect of the backspace key, without changing what you typed before
-that, with CTRL-O u.
+that, with CTRL-O u.  Another example: >
+
+	:inoremap <CR> <C-]><C-G>u<CR>
+
+This breaks undo at each line break.  It also expands abbreviations before
+this.
 
 Using CTRL-O splits undo: the text typed before and after it is undone
 separately.  If you want to avoid this (e.g., in a mapping) you might be able
@@ -479,7 +495,7 @@
 							*ins-smarttab*
 When the 'smarttab' option is on, a <Tab> inserts 'shiftwidth' positions at
 the beginning of a line and 'tabstop' positions in other places.  This means
-that often spaces instead of a <Tab> character are inserted.  When 'smarttab
+that often spaces instead of a <Tab> character are inserted.  When 'smarttab'
 is off, a <Tab> always inserts 'tabstop' positions, and 'shiftwidth' is only
 used for ">>" and the like.  {not in Vi}
 
@@ -555,12 +571,11 @@
 In 'list' mode, Virtual Replace mode acts as if it was not in 'list' mode,
 unless "L" is in 'cpoptions'.
 
-Note that the only times characters beyond the cursor should appear to move
-are in 'list' mode, and occasionally when 'wrap' is set (and the line changes
-length to become shorter or wider than the width of the screen), or
-momentarily when typing over a CTRL character.  A CTRL character takes up two
-screen spaces.  When replacing it with two normal characters, the first will
-be inserted and the second will replace the CTRL character.
+Note that the only situations for which characters beyond the cursor should
+appear to move are in List mode |'list'|, and occasionally when 'wrap' is set
+(and the line changes length to become shorter or wider than the width of the
+screen).  In other cases spaces may be inserted to avoid following characters
+to move.
 
 This mode is very useful for editing <Tab> separated columns in tables, for
 entering new data while keeping all the columns aligned.
@@ -1006,8 +1021,13 @@
 number between zero and the cursor column "col('.')".  This involves looking
 at the characters just before the cursor and including those characters that
 could be part of the completed item.  The text between this column and the
-cursor column will be replaced with the matches.  Return -1 if no completion
-can be done.
+cursor column will be replaced with the matches.
+
+Special return values:
+   -1 If no completion can be done, the completion will be cancelled with an
+      error message.
+   -2 To cancel silently and stay in completion mode.
+   -3 To cancel silently and leave completion mode.
 
 On the second invocation the arguments are:
    a:findstart  0
@@ -1017,6 +1037,23 @@
 The function must return a List with the matching words.  These matches
 usually include the "a:base" text.  When there are no matches return an empty
 List.
+
+In order to return more information than the matching words, return a Dict
+that contains the List.  The Dict can have these items:
+	words		The List of matching words (mandatory).
+	refresh		A string to control re-invocation of the function
+			(optional).
+			The only value currently recognized is "always", the
+			effect is that the function is called whenever the
+			leading text is changed.
+Other items are ignored.
+
+For acting upon end of completion, see the |CompleteDone| autocommand event.
+
+For example, the function can contain this: >
+	let matches = ... list of words ...
+	return {'words': matches, 'refresh': 'always'}
+<
 						*complete-items*
 Each list item can either be a string or a Dictionary.  When it is a string it
 is used as the completion.  When it is a Dictionary it can contain these
@@ -1034,17 +1071,21 @@
 			items that only differ in case are added
 	dup		when non-zero this match will be added even when an
 			item with the same word is already present.
+	empty		when non-zero this match will be added even when it is
+			an empty string
 
-All of these except 'icase' must be a string.  If an item does not meet these
-requirements then an error message is given and further items in the list are
-not used.  You can mix string and Dictionary items in the returned list.
+All of these except 'icase', 'dup' and 'empty' must be a string.  If an item
+does not meet these requirements then an error message is given and further
+items in the list are not used.  You can mix string and Dictionary items in
+the returned list.
 
 The "menu" item is used in the popup menu and may be truncated, thus it should
 be relatively short.  The "info" item can be longer, it will  be displayed in
 the preview window when "preview" appears in 'completeopt'.  The "info" item
 will also remain displayed after the popup menu has been removed.  This is
 useful for function arguments.  Use a single space for "info" to remove
-existing text in the preview window.
+existing text in the preview window.  The size of the preview window is three
+lines, but 'previewheight' is used when it has a value of 1 or 2.
 
 The "kind" item uses a single letter to indicate the kind of completion.  This
 may be used to show the completion differently (different color or icon).
@@ -1060,9 +1101,9 @@
 list!  Call |complete_check()| now and then to allow the user to press a key
 while still searching for matches.  Stop searching when it returns non-zero.
 
-The function is allowed to move the cursor, it is restored afterwards.  This
-option cannot be set from a |modeline| or in the |sandbox|, for security
-reasons.
+							*E839* *E840*
+The function is allowed to move the cursor, it is restored afterwards.
+The function is not allowed to move to another window or delete text.
 
 An example that completes the names of the months: >
 	fun! CompleteMonths(findstart, base)
@@ -1429,9 +1470,9 @@
 minimal language-sensitive completion.
 
 To enable syntax code completion you can run: >
-	setlocal omnifunc=syntaxcomplete#Complete
+    setlocal omnifunc=syntaxcomplete#Complete
 
-You can automate this by placing the following in your vimrc (after any
+You can automate this by placing the following in your |.vimrc| (after any
 ":filetype" command): >
     if has("autocmd") && exists("+omnifunc")
 	autocmd Filetype *
@@ -1448,7 +1489,7 @@
 a look at the PHP filetype to see how this works.
 
 If you edit a file called, index.php, run the following command: >
-	:syntax list
+    syntax list
 
 The first thing you will notice is that there are many different syntax groups.
 The PHP language can include elements from different languages like HTML,
@@ -1457,24 +1498,38 @@
 groups are included by default with the PHP: phpEnvVar, phpIntVar,
 phpFunctions.
 
+If you wish non-filetype syntax items to also be included, you can use a 
+regular expression syntax (added in version 13.0 of autoload\syntaxcomplete.vim)
+to add items.  Looking at the output from ":syntax list" while editing a PHP file 
+I can see some of these entries: >
+    htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects
+
+To pick up any JavaScript and HTML keyword syntax groups while editing a PHP
+file, you can use 3 different regexs, one for each language.  Or you can 
+simply restrict the include groups to a particular value, without using 
+a regex string: >
+    let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+'
+    let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
+<
+The basic form of this variable is: >
+    let g:omni_syntax_group_include_{filetype} = 'regex,comma,separated'
+
 The PHP language has an enormous number of items which it knows how to syntax
-highlight.  This means these items will be available within the omni
-completion list.  Some people may find this list unwieldy or are only
-interested in certain items.
+highlight.  These these items will be available within the omni completion
+list.  
 
-There are two ways to prune this list (if necessary).  If you find certain
-syntax groups you do not wish displayed you can add the following to your
-vimrc: >
-	let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
+Some people may find this list unwieldy or are only interested in certain
+items.  There are two ways to prune this list (if necessary).  If you find
+certain syntax groups you do not wish displayed you can use two different 
+methods to identify these groups.  The first specifically lists the syntax 
+groups by name.  The second uses a regular expression to identify both 
+syntax groups.  Simply add one the following to your vimrc: >
+    let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
+    let g:omni_syntax_group_exclude_php = 'php\w*Constant'
 
 Add as many syntax groups to this list by comma separating them.  The basic
 form of this variable is: >
-	let g:omni_syntax_group_exclude_{filetype} = 'comma,separated,list'
-
-For completeness the opposite is also true.  Creating this variable in your
-vimrc will only include the items in the phpFunctions and phpMethods syntax
-groups: >
-	let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
+    let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'
 
 You can create as many of these variables as you need, varying only the
 filetype at the end of the variable name.
@@ -1515,6 +1570,9 @@
 To retrieve all syntax items for both the sqlOperator and sqlType groups: >
     echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )
 
+A regular expression can also be used: >
+    echo OmniSyntaxList( ['sql\w\+'] )
+
 From within a plugin, you would typically assign the output to a List: >
     let myKeywords = []
     let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
@@ -1767,6 +1825,11 @@
 containing only a ".".  Watch out for lines starting with a backslash, see
 |line-continuation|.
 
+When in Ex mode (see |-e|) a backslash at the end of the line can be used to
+insert a NUL character.  To be able to have a line ending in a backslash use
+two backslashes.  This means that the number of backslashes is halved, but
+only at the end of the line.
+
 NOTE: These commands cannot be used with |:global| or |:vglobal|.
 ":append" and ":insert" don't work properly in between ":if" and
 ":endif", ":for" and ":endfor", ":while" and ":endwhile".
@@ -1825,13 +1888,15 @@
 			See |++opt| for the possible values of [++opt].
 
 							*:r!* *:read!*
-:[range]r[ead] !{cmd}	Execute {cmd} and insert its standard output below
+:[range]r[ead] [++opt] !{cmd}
+			Execute {cmd} and insert its standard output below
 			the cursor or the specified line.  A temporary file is
 			used to store the output of the command which is then
 			read into the buffer.  'shellredir' is used to save
 			the output of the command, which can be set to include
 			stderr or not.  {cmd} is executed like with ":!{cmd}",
 			any '!' is replaced with the previous command |:!|.
+			See |++opt| for the possible values of [++opt].
 
 These commands insert the contents of a file, or the output of a command,
 into the buffer.  They can be undone.  They cannot be repeated with the "."
diff -Naur vim73.orig/runtime/doc/intro.txt vim73/runtime/doc/intro.txt
--- vim73.orig/runtime/doc/intro.txt	2010-08-15 12:23:20.000000000 +0000
+++ vim73/runtime/doc/intro.txt	2013-08-04 19:09:07.880618736 +0000
@@ -1,4 +1,4 @@
-*intro.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
+*intro.txt*     For Vim version 7.3.  Last change: 2013 Jun 17
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -135,8 +135,10 @@
 
 Bug reports:				*bugs* *bug-reports* *bugreport.vim*
 
-Send bug reports to: Vim bugs <bugs@vim.org>
-This is not a maillist but the message is redirected to the Vim maintainer.
+Send bug reports to: Vim Developers <vim_dev@vim.org>
+This is a maillist, many people will see the message.  If you don't want that,
+e.g. because it is a security issue, send it to <bugs@vim.org>, this only goes
+to the Vim maintainer (that's Bram).
 Please be brief; all the time that is spent on answering mail is subtracted
 from the time that is spent on improving Vim!  Always give a reproducible
 example and try to find out which settings or other things influence the
@@ -259,6 +261,7 @@
 I wish to thank all the people that sent me bug reports and suggestions.  The
 list is too long to mention them all here.  Vim would not be the same without
 the ideas from all these people: They keep Vim alive!
+*love* *peace* *friendship* *gross-national-happiness*
 
 
 In this documentation there are several references to other versions of Vi:
@@ -300,7 +303,7 @@
 
 []		Characters in square brackets are optional.
 
-						    *count* *[count]* *E489*
+						    *count* *[count]*
 [count]		An optional number that may precede the command to multiply
 		or iterate the command.  If no number is given, a count of one
 		is used, unless otherwise noted.  Note that in this manual the
@@ -392,6 +395,8 @@
 							*quotecommandquote*
 "command"	A reference to a command that you can type is enclosed in
 		double quotes.
+`command`	New style command, this distinguishes it from other quoted
+		text and strings.
 
 					*key-notation* *key-codes* *keycodes*
 These names for keys are used in the documentation.  They can also be used
@@ -616,7 +621,6 @@
 Command-line	 *3	  --	  --	 :start	    --		      --
 Ex		 :vi	  --	  --	 --	    --	      --
 
--  NA
 -- not possible
 
 *1 Go from Normal mode to Insert mode by giving the command "i", "I", "a",
@@ -703,7 +707,7 @@
 (see below).  The 'linebreak' option can be set to wrap at a blank character.
 
 If the window has room after the last line of the buffer, Vim will show '~' in
-the first column of the last lines in the window, like this: >
+the first column of the last lines in the window, like this:
 
 	+-----------------------+
 	|some line		|
@@ -715,7 +719,7 @@
 Thus the '~' lines indicate that the end of the buffer was reached.
 
 If the last line in a window doesn't fit, Vim will indicate this with a '@' in
-the first column of the last lines in the window, like this: >
+the first column of the last lines in the window, like this:
 
 	+-----------------------+
 	|first line		|
@@ -730,7 +734,7 @@
 When the "lastline" flag is present in the 'display' option, you will not see
 '@' characters at the left side of window.  If the last line doesn't fit
 completely, only the part that fits is shown, and the last three characters of
-the last line are replaced with "@@@", like this: >
+the last line are replaced with "@@@", like this:
 
 	+-----------------------+
 	|first line		|
diff -Naur vim73.orig/runtime/doc/map.txt vim73/runtime/doc/map.txt
--- vim73.orig/runtime/doc/map.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/map.txt	2013-08-04 19:09:07.887285382 +0000
@@ -1,4 +1,4 @@
-*map.txt*       For Vim version 7.3.  Last change: 2010 Jul 31
+*map.txt*       For Vim version 7.3.  Last change: 2013 Jun 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -49,7 +49,7 @@
 :nm[ap]	{lhs} {rhs}		|mapmode-n|		*:nm* *:nmap*
 :vm[ap]	{lhs} {rhs}		|mapmode-v|		*:vm* *:vmap*
 :xm[ap]	{lhs} {rhs}		|mapmode-x|		*:xm* *:xmap*
-:smap	{lhs} {rhs}		|mapmode-s|		      *:smap*
+:smap	{lhs} {rhs}		|mapmode-s|		    *:smap*
 :om[ap]	{lhs} {rhs}		|mapmode-o|		*:om* *:omap*
 :map!	{lhs} {rhs}		|mapmode-ic|		*:map!*
 :im[ap]	{lhs} {rhs}		|mapmode-i|		*:im* *:imap*
@@ -107,6 +107,8 @@
 :cmapc[lear]			|mapmode-c|		*:cmapc*  *:cmapclear*
 			Remove ALL mappings for the modes where the map
 			command applies.  {not in Vi}
+			Use the <buffer> argument to remove buffer-local
+			mappings |:map-<buffer>|
 			Warning: This also removes the default mappings.
 
 :map				|mapmode-nvo|
@@ -157,9 +159,9 @@
 
 1.2 SPECIAL ARGUMENTS					*:map-arguments*
 
-"<buffer>", "<silent>", "<special>", "<script>", "<expr>" and "<unique>" can
-be used in any order.  They must appear right after the command, before any
-other arguments.
+"<buffer>", "<nowait>", "<silent>", "<special>", "<script>", "<expr>" and
+"<unique>" can be used in any order.  They must appear right after the
+command, before any other arguments.
 
 				*:map-local* *:map-<buffer>* *E224* *E225*
 If the first argument to one of these commands is "<buffer>" the mapping will
@@ -167,12 +169,23 @@
 	:map <buffer>  ,w  /[.,;]<CR>
 Then you can map ",w" to something else in another buffer: >
 	:map <buffer>  ,w  /[#&!]<CR>
-The local buffer mappings are used before the global ones.
+The local buffer mappings are used before the global ones.  See <nowait> below
+to make a short local mapping not taking effect when a longer global one
+exists.
 The "<buffer>" argument can also be used to clear mappings: >
 	:unmap <buffer> ,w
 	:mapclear <buffer>
 Local mappings are also cleared when a buffer is deleted, but not when it is
 unloaded.  Just like local option values.
+Also see |map-precedence|.
+
+						*:map-<nowait>* *:map-nowait*
+When defining a buffer-local mapping for "," there may be a global mapping
+that starts with ",".  Then you need to type another character for Vim to know
+whether to use the "," mapping or the longer one.  To avoid this add the
+<nowait> argument.  Then the mapping will be used when it matches, Vim does
+not wait for more characters to be typed.  However, if the characters were
+already type they are used.
 
 						*:map-<silent>* *:map-silent*
 To define a mapping which will not be echoed on the command line, add
@@ -226,7 +239,7 @@
 
 For abbreviations |v:char| is set to the character that was typed to trigger
 the abbreviation.  You can use this to decide how to expand the {lhs}.  You
-can't change v:char and you should not insert it.
+should not either insert or change the v:char.
 
 Be very careful about side effects!  The expression is evaluated while
 obtaining characters, you may very well make the command dysfunctional.
@@ -235,11 +248,18 @@
 - Editing another buffer.
 - The |:normal| command.
 - Moving the cursor is allowed, but it is restored afterwards.
-- You can use getchar(), but the existing typeahead isn't seen and new
-  typeahead is discarded.
 If you want the mapping to do any of these let the returned characters do
 that.
 
+You can use getchar(), it consumes typeahead if there is any. E.g., if you
+have these mappings: >
+  inoremap <expr> <C-L> nr2char(getchar())
+  inoremap <expr> <C-L>x "foo"
+If you now type CTRL-L nothing happens yet, Vim needs the next character to
+decide what mapping to use.  If you type 'x' the second mapping is used and
+"foo" is inserted.  If you type any other key the first mapping is used,
+getchar() gets the typed key and returns it.
+
 Here is an example that inserts a list number that increases: >
 	let counter = 0
 	inoremap <expr> <C-L> ListItem()
@@ -480,9 +500,9 @@
 have to type CTRL-V two times).  Unfortunately, you cannot do this in a vimrc
 file.
 							*<Nop>*
-A easier way to get a mapping that doesn't produce anything, is to use "<Nop>"
-for the {rhs}.  This only works when the |<>| notation is enabled.  For
-example, to make sure that function key 8 does nothing at all: >
+An easier way to get a mapping that doesn't produce anything, is to use
+"<Nop>" for the {rhs}.  This only works when the |<>| notation is enabled.
+For example, to make sure that function key 8 does nothing at all: >
 	:map  <F8>  <Nop>
 	:map! <F8>  <Nop>
 <
@@ -495,7 +515,7 @@
 	:set encoding=utf-8
 The mapping for <M-C> is defined with the latin1 encoding, resulting in a 0xc3
 byte.  If you type the character  (0xe1 <M-a>) in UTF-8 encoding this is the
-two bytes 0xc3 0xa1.  You don't want the 0xc3 byte to be mapped then,
+two bytes 0xc3 0xa1.  You don't want the 0xc3 byte to be mapped then or
 otherwise it would be impossible to type the  character.
 
 					*<Leader>* *mapleader*
@@ -518,7 +538,7 @@
 <LocalLeader> is just like <Leader>, except that it uses "maplocalleader"
 instead of "mapleader".  <LocalLeader> is to be used for mappings which are
 local to a buffer.  Example: >
-      :map <LocalLeader>q  \DoItNow
+      :map <buffer> <LocalLeader>A  oanother line<Esc>
 <
 In a global plugin <Leader> should be used and in a filetype plugin
 <LocalLeader>.  "mapleader" and "maplocalleader" can be equal.  Although, if
@@ -542,6 +562,7 @@
 	<Char-123>	character 123
 	<Char-033>	character 27
 	<Char-0x7f>	character 127
+	<S-Char-114>    character 114 ('r') shifted ('R')
 This is useful to specify a (multi-byte) character in a 'keymap' file.
 Upper and lowercase differences are ignored.
 
@@ -644,6 +665,17 @@
 you type slowly, or your system is slow, reset the 'timeout' option.  Then you
 might want to set the 'ttimeout' option.
 
+                            				*map-precedence*
+Buffer-local mappings (defined using |:map-<buffer>|) take precedence over
+global mappings.  When a buffer-local mapping is the same as a global mapping,
+Vim will use the buffer-local mapping.  In addition, Vim will use a complete
+mapping immediately if it was defined with <nowait>, even if a longer mapping
+has the same prefix.  For example, given the following two mappings: >
+    :map <buffer> <nowait> \a   :echo "Local \a"<CR>
+    :map                   \abc :echo "Global \abc"<CR>
+When typing \a the buffer-local mapping will be used immediately.  Vim will
+not wait for more characters to see if the user might be typing \abc.
+
 							*map-keys-fails*
 There are situations where key codes might not be recognized:
 - Vim can only read part of the key code.  Mostly this is only the first
@@ -934,11 +966,12 @@
 			avoid that a typed {lhs} is expanded, since
 			command-line abbreviations apply here.
 
-:ab[breviate] [<expr>] {lhs} {rhs}
+:ab[breviate] [<expr>] [<buffer>] {lhs} {rhs}
 			add abbreviation for {lhs} to {rhs}.  If {lhs} already
 			existed it is replaced with the new {rhs}.  {rhs} may
 			contain spaces.
 			See |:map-<expr>| for the optional <expr> argument.
+			See |:map-<buffer>| for the optional <buffer> argument.
 
 						*:una* *:unabbreviate*
 :una[bbreviate] {lhs}	Remove abbreviation for {lhs} from the list.  If none
@@ -948,12 +981,12 @@
 			expansion insert a CTRL-V (type it twice).
 
 						*:norea* *:noreabbrev*
-:norea[bbrev] [<expr>] [lhs] [rhs]
+:norea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
 			same as ":ab", but no remapping for this {rhs} {not
 			in Vi}
 
 						*:ca* *:cabbrev*
-:ca[bbrev] [<expr>] [lhs] [rhs]
+:ca[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
 			same as ":ab", but for Command-line mode only.  {not
 			in Vi}
 
@@ -962,12 +995,12 @@
 			in Vi}
 
 						*:cnorea* *:cnoreabbrev*
-:cnorea[bbrev] [<expr>] [lhs] [rhs]
+:cnorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
 			same as ":ab", but for Command-line mode only and no
 			remapping for this {rhs} {not in Vi}
 
 						*:ia* *:iabbrev*
-:ia[bbrev] [<expr>] [lhs] [rhs]
+:ia[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
 			same as ":ab", but for Insert mode only.  {not in Vi}
 
 						*:iuna* *:iunabbrev*
@@ -975,18 +1008,18 @@
 			Vi}
 
 						*:inorea* *:inoreabbrev*
-:inorea[bbrev] [<expr>] [lhs] [rhs]
+:inorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
 			same as ":ab", but for Insert mode only and no
 			remapping for this {rhs} {not in Vi}
 
 							*:abc* *:abclear*
-:abc[lear]		Remove all abbreviations.  {not in Vi}
+:abc[lear] [<buffer>]	Remove all abbreviations.  {not in Vi}
 
 							*:iabc* *:iabclear*
-:iabc[lear]		Remove all abbreviations for Insert mode.  {not in Vi}
+:iabc[lear] [<buffer>]	Remove all abbreviations for Insert mode.  {not in Vi}
 
 							*:cabc* *:cabclear*
-:cabc[lear]		Remove all abbreviations for Command-line mode.  {not
+:cabc[lear] [<buffer>]	Remove all abbreviations for Command-line mode.  {not
 			in Vi}
 
 							*using_CTRL-V*
@@ -1093,16 +1126,20 @@
 
 For starters: See section |40.2| in the user manual.
 
-						*E183* *user-cmd-ambiguous*
+					*E183* *E841* *user-cmd-ambiguous*
 All user defined commands must start with an uppercase letter, to avoid
-confusion with builtin commands.  (There are a few builtin commands, notably
-:Next, :Print and :X, which do start with an uppercase letter.  The builtin
-will always take precedence in these cases).  The other characters of the user
-command can be uppercase letters, lowercase letters or digits.  When using
-digits, note that other commands that take a numeric argument may become
-ambiguous.  For example, the command ":Cc2" could be the user command ":Cc2"
-without an argument, or the command ":Cc" with argument "2".  It is advised to
-put a space between the command name and the argument to avoid these problems.
+confusion with builtin commands.  Exceptions are these builtin commands:
+	:Next
+	:X
+They cannot be used for a user defined command.  ":Print" is also an existing
+command, but it is deprecated and can be overruled.
+
+The other characters of the user command can be uppercase letters, lowercase
+letters or digits.  When using digits, note that other commands that take a
+numeric argument may become ambiguous.  For example, the command ":Cc2" could
+be the user command ":Cc2" without an argument, or the command ":Cc" with
+argument "2".  It is advised to put a space between the command name and the
+argument to avoid these problems.
 
 When using a user-defined command, the command can be abbreviated.  However, if
 an abbreviation is not unique, an error will be issued.  Furthermore, a
@@ -1173,13 +1210,15 @@
 command can take arguments, using the -nargs attribute.  Valid cases are:
 
 	-nargs=0    No arguments are allowed (the default)
-	-nargs=1    Exactly one argument is required
-	-nargs=*    Any number of arguments are allowed (0, 1, or many)
+	-nargs=1    Exactly one argument is required, it includes spaces 
+	-nargs=*    Any number of arguments are allowed (0, 1, or many),
+		    separated by white space
 	-nargs=?    0 or 1 arguments are allowed
 	-nargs=+    Arguments must be supplied, but any number are allowed
 
 Arguments are considered to be separated by (unescaped) spaces or tabs in this
-context.
+context, except when there is one argument, then the white space is part of
+the argument.
 
 Note that arguments are used as text, not as expressions.  Specifically,
 "s:var" will use the script-local variable in the script where the command was
@@ -1202,23 +1241,33 @@
 
 	-complete=augroup	autocmd groups
 	-complete=buffer	buffer names
+	-complete=behave	:behave suboptions
+	-complete=color		color schemes
 	-complete=command	Ex command (and arguments)
+	-complete=compiler	compilers
+	-complete=cscope	|:cscope| suboptions
 	-complete=dir		directory names
 	-complete=environment	environment variable names
 	-complete=event		autocommand events
 	-complete=expression	Vim expression
 	-complete=file		file and directory names
+	-complete=file_in_path	file and directory names in |'path'|
 	-complete=filetype	filetype names |'filetype'|
 	-complete=function	function name
 	-complete=help		help subjects
 	-complete=highlight	highlight groups
+	-complete=history	:history suboptions
+	-complete=locale	locale names (as output of locale -a)
 	-complete=mapping	mapping name
 	-complete=menu		menus
 	-complete=option	options
 	-complete=shellcmd	Shell command
+	-complete=sign		|:sign| suboptions
 	-complete=syntax	syntax file names |'syntax'|
+	-complete=syntime	|:syntime| suboptions
 	-complete=tag		tags
 	-complete=tag_listfiles	tags, file names are shown when CTRL-D is hit
+	-complete=user		user names
 	-complete=var		user variables
 	-complete=custom,{func} custom completion, defined via {func}
 	-complete=customlist,{func} custom completion, defined via {func}
@@ -1285,7 +1334,8 @@
 	-range	    Range allowed, default is current line
 	-range=%    Range allowed, default is whole file (1,$)
 	-range=N    A count (default N) which is specified in the line
-		    number position (like |:split|)
+		    number position (like |:split|); allows for zero line
+		    number.
 	-count=N    A count (default N) which is specified either in the line
 		    number position, or as an initial argument (like |:Next|).
 		    Specifying -count (without a default) acts like -count=0
diff -Naur vim73.orig/runtime/doc/mbyte.txt vim73/runtime/doc/mbyte.txt
--- vim73.orig/runtime/doc/mbyte.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/mbyte.txt	2013-08-04 19:09:07.890618706 +0000
@@ -1,4 +1,4 @@
-*mbyte.txt*     For Vim version 7.3.  Last change: 2010 Jul 26
+*mbyte.txt*     For Vim version 7.3.  Last change: 2013 May 18
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar et al.
@@ -48,9 +48,9 @@
 If you already have a compiled Vim program, check if the |+multi_byte| feature
 is included.  The |:version| command can be used for this.
 
-If +multi_byte is not included, you should compile Vim with "big" features.
-You can further tune what features are included.  See the INSTALL files in the
-source directory.
+If +multi_byte is not included, you should compile Vim with "normal", "big" or
+"huge" features.  You can further tune what features are included.  See the
+INSTALL files in the source directory.
 
 
 LOCALE
@@ -280,7 +280,7 @@
 when compiled for EBCDIC).
 
 Supported 'encoding' values are:			*encoding-values*
-1   latin1	8-bit characters (ISO 8859-1)
+1   latin1	8-bit characters (ISO 8859-1, also used for cp1252)
 1   iso-8859-n	ISO_8859 variant (n = 2 to 15)
 1   koi8-r	Russian
 1   koi8-u	Ukrainian
@@ -336,7 +336,11 @@
 Examples: >
 		:set encoding=8bit-cp1252
 		:set encoding=2byte-cp932
-<
+
+The MS-Windows codepage 1252 is very similar to latin1.  For practical reasons
+the same encoding is used and it's called latin1.  'isprint' can be used to
+display the characters 0x80 - 0xA0 or not.
+
 Several aliases can be used, they are translated to one of the names above.
 An incomplete list:
 
@@ -471,7 +475,7 @@
 	|charset| converter.  Supported |charset|: ISO-2022-CN, ISO-2022-JP,
 	ISO-2022-KR, EUC-CN, EUC-JP, EUC-KR, EUC-TW, UTF-7, UTF-8, ISO-8859
 	series, Shift_JIS, Big5 and HZ.  Lv can be found at:
-	http://www.ff.iij4u.or.jp/~nrt/freeware/lv4495.tar.gz
+	http://www.ff.iij4u.or.jp/~nrt/lv/index.html
 
 
 							*mbyte-conversion*
@@ -611,7 +615,7 @@
 	    charsets, such as JIS X 0208, if this field is 0, code points has
 	    the same value as GL, and GR if 1.
 
-For example, in case of a 14 dots font corresponding to JIS X 0208, it is
+For example, in case of a 16 dots font corresponding to JIS X 0208, it is
 written like:
     -misc-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1990-0
 
@@ -793,8 +797,8 @@
   number of Hira-gana characters are 76.  So, first, we pre-input text as
   pronounced in Hira-gana, second, we convert Hira-gana to Kanji or Kata-Kana,
   if needed.  There are some Kana-Kanji conversion server: jserver
-  (distributed with Wnn, see below) and canna.  Canna could be found at:
-  ftp://ftp.nec.co.jp/pub/Canna/ (no longer works).
+  (distributed with Wnn, see below) and canna.  Canna can be found at:
+  http://canna.sourceforge.jp/
 
 There is a good input system: Wnn4.2.  Wnn 4.2 contains,
     xwnmo (|IM-server|)
@@ -853,7 +857,7 @@
 
 
 USING XIM			*multibyte-input* *E284* *E286* *E287* *E288*
-				*E285* *E291* *E292* *E290* *E289*
+				*E285* *E289*
 
 Note that Display and Input are independent.  It is possible to see your
 language even though you have no input method for it.  But when your Display
@@ -1063,7 +1067,7 @@
 is mapped to "A" and "b" to "B".  Thus the first item is mapped to the second
 item.  This is done for each line, until the end of the file.
 These items are exactly the same as what can be used in a |:lnoremap| command,
-using "<buffer>" to make the mappings local to the buffer..
+using "<buffer>" to make the mappings local to the buffer.
 You can check the result with this command: >
 	:lmap
 The two items must be separated by white space.  You cannot include white
@@ -1081,6 +1085,13 @@
 used for the start of another character.
 The "accents" keymap uses this.				*keymap-accents*
 
+The first column can also be in |<>| form:
+	<C-c>		Ctrl-C
+	<A-c>		Alt-c
+	<A-C>		Alt-C
+Note that the Alt mappings may not work, depending on your keyboard and
+terminal.
+
 Although it's possible to have more than one character in the second column,
 this is unusual.  But you can use various ways to specify the character: >
 	A	a		literal character
@@ -1302,8 +1313,8 @@
 character.)  An exception is NUL (zero) which is displayed as "<00>".
 
 In the file and buffer the full range of Unicode characters can be used (31
-bits).  However, displaying only works for 16 bit characters, and only for the
-characters present in the selected font.
+bits).  However, displaying only works for the characters present in the
+selected font.
 
 Useful commands:
 - "ga" shows the decimal, hexadecimal and octal value of the character under
diff -Naur vim73.orig/runtime/doc/message.txt vim73/runtime/doc/message.txt
--- vim73.orig/runtime/doc/message.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/message.txt	2013-08-04 19:09:07.893952029 +0000
@@ -1,4 +1,4 @@
-*message.txt*   For Vim version 7.3.  Last change: 2010 Aug 10
+*message.txt*   For Vim version 7.3.  Last change: 2013 Feb 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -27,8 +27,8 @@
 This is especially useful if you accidentally typed <Space> at the hit-enter
 prompt.  You are then back at the hit-enter prompt and can then scroll further
 back.
-Note: when you stopped the output with "q" at the more prompt only up to that
-point will be displayed.
+Note: If the output has been stopped with "q" at the more prompt, it will only
+be displayed up to this point.
 The previous command output is cleared when another command produces output.
 
 If you are using translated messages, the first printed line tells who
@@ -65,7 +65,7 @@
 LIST OF MESSAGES
 			*E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317*
 			*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
-			*E323* *E341* *E473* *E570* *E685* >
+			*E323* *E341* *E473* *E570* *E685*  >
   Add to read buffer
   makemap: Illegal mode
   Cannot create BalloonEval with both message and callback
@@ -481,8 +481,10 @@
 							*E339*  >
   Pattern too long
 
-This only happens on systems with 16 bit ints: The compiled regexp pattern is
+This happens on systems with 16 bit ints: The compiled regexp pattern is
 longer than about 65000 characters.  Try using a shorter pattern.
+It also happens when the offset of a rule doesn't fit in the space available.
+Try simplifying the pattern.
 
 							*E45*  >
   'readonly' option is set (add ! to override)
@@ -728,7 +730,11 @@
   Can't open file {filename}
   Can't read file {filename}
 
-Vim cannot read a temporary file.
+Vim cannot read a temporary file.  Especially on Windows, this can be caused
+by wrong escaping of special characters for cmd.exe; the approach was
+changed with patch 7.3.443.  Try using |shellescape()| for all shell arguments
+given to |system()|, or explicitly add escaping with ^.  Also see
+'shellxquote' and 'shellxescape'.
 
 							*E464*  >
   Ambiguous use of user-defined command
diff -Naur vim73.orig/runtime/doc/mlang.txt vim73/runtime/doc/mlang.txt
--- vim73.orig/runtime/doc/mlang.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/mlang.txt	2013-08-04 19:09:07.893952029 +0000
@@ -1,4 +1,4 @@
-*mlang.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
+*mlang.txt*     For Vim version 7.3.  Last change: 2012 Jan 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -59,7 +59,7 @@
 			system.  Some systems accept aliases like "en" or
 			"en_US", but some only accept the full specification
 			like "en_US.ISO_8859-1".  On Unix systems you can use
-			the this command to see what locales are supported: >
+			this command to see what locales are supported: >
 				:!locale -a
 <			With the "messages" argument the language used for
 			messages is set.  This can be different when you want,
@@ -68,7 +68,7 @@
 			With the "ctype" argument the language used for
 			character encoding is set.  This affects the libraries
 			that Vim was linked with.  It's unusual to set this to
-			a different value from 'encoding'.  This sets
+			a different value from 'encoding' or "C".  This sets
 			$LC_CTYPE.
 			With the "time" argument the language used for time
 			and date messages is set.  This affects strftime().
diff -Naur vim73.orig/runtime/doc/motion.txt vim73/runtime/doc/motion.txt
--- vim73.orig/runtime/doc/motion.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/motion.txt	2013-08-04 19:09:07.897285352 +0000
@@ -1,4 +1,4 @@
-*motion.txt*    For Vim version 7.3.  Last change: 2010 May 14
+*motion.txt*    For Vim version 7.3.  Last change: 2013 Mar 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -57,7 +57,7 @@
 	|>|	>	shift right
 	|<|	<	shift left
 	|zf|	zf	define a fold
-	|g@|    g@      call function set with the 'operatorfunc' option
+	|g@|	g@	call function set with the 'operatorfunc' option
 
 If the motion includes a count and the operator also had a count before it,
 the two counts are multiplied.  For example: "2d3w" deletes six words.
@@ -104,13 +104,14 @@
 |Visual-mode|.
 
 You can use a ":" command for a motion.  For example "d:call FindEnd()".
-But this can't be redone with "." if the command is more than one line.
+But this can't be repeated with "." if the command is more than one line.
 This can be repeated: >
 	d:call search("f")<CR>
 This cannot be repeated: >
 	d:if 1<CR>
 	   call search("f")<CR>
 	endif<CR>
+Note that when using ":" any motion becomes characterwise exclusive.
 
 
 FORCING A MOTION TO BE LINEWISE, CHARACTERWISE OR BLOCKWISE
@@ -269,11 +270,11 @@
 			{char} can be entered like with the |f| command.
 
 							*;*
-;			Repeat latest f, t, F or T [count] times.
+;			Repeat latest f, t, F or T [count] times. See |cpo-;|
 
 							*,*
 ,			Repeat latest f, t, F or T in opposite direction
-			[count] times.
+			[count] times. See also |cpo-;|
 
 ==============================================================================
 3. Up-down motions					*up-down-motions*
@@ -326,6 +327,7 @@
 			non-blank character |linewise|.  If 'startofline' not
 			set, keep the same column.
 
+							*:[range]*
 :[range]		Set the cursor on the last line number in [range].
 			[range] can also be just one line number, e.g., ":1"
 			or ":'m".
@@ -344,6 +346,8 @@
 			last number in it used as the byte count.  End-of-line
 			characters are counted depending on the current
 			'fileformat' setting.
+			Also see the |line2byte()| function, and the 'o'
+			option in 'statusline'.
 			{not in Vi}
 			{not available when compiled without the
 			|+byte_offset| feature}
@@ -511,6 +515,8 @@
 These commands are {not in Vi}.
 These commands are not available when the |+textobjects| feature has been
 disabled at compile time.
+Also see `gn` and `gN`, operating on the last search pattern.
+
 							*v_aw* *aw*
 aw			"a word", select [count] words (see |word|).
 			Leading or trailing white space is included, but not
@@ -687,6 +693,7 @@
 	"daw"	delete a word				*daw*
 	"diW"	delete inner WORD (see |WORD|)		*diW*
 	"daW"	delete a WORD (see |WORD|)		*daW*
+	"dgn"   delete the next search pattern match    *dgn*
 	"dd"	delete one line				|dd|
 	"dis"	delete inner sentence			*dis*
 	"das"	delete a sentence			*das*
@@ -748,6 +755,13 @@
 			to be simulated by multiple commands.  (does not move
 			the cursor, this is not a motion command).
 
+						*m<* *m>*
+m<  or  m>		Set the |'<| or |'>| mark.  Useful to change what the
+			`gv` command selects.  (does not move the cursor, this
+			is not a motion command).
+			Note that the Visual mode cannot be set, only the
+			start and end position.
+
 						*:ma* *:mark* *E191*
 :[range]ma[rk] {a-zA-Z'}
 			Set mark {a-zA-Z'} at last line number in [range],
@@ -1015,8 +1029,6 @@
 <Tab>		or					*CTRL-I* *<Tab>*
 CTRL-I			Go to [count] newer cursor position in jump list
 			(not a motion command).
-			In a |quickfix-window| it takes you to the position of
-			the error under the cursor.
 			{not in Vi}
 			{not available without the |+jumplist| feature}
 
@@ -1033,20 +1045,20 @@
 
 For example, after three jump commands you have this jump list:
 
-  jump line  col file/line ~
+  jump line  col file/text ~
     3	  1    0 some text ~
     2	 70    0 another line ~
     1  1154   23 end. ~
  > ~
 
-The "file/line" column shows the file name, or the text at the jump if it is
+The "file/text" column shows the file name, or the text at the jump if it is
 in the current file (an indent is removed and a long line is truncated to fit
 in the window).
 
 You are currently in line 1167.  If you then use the CTRL-O command, the
 cursor is put in line 1154.  This results in:
 
-  jump line  col file/line ~
+  jump line  col file/text ~
     2	  1    0 some text ~
     1	 70    0 another line ~
  >  0  1154   23 end. ~
@@ -1076,7 +1088,7 @@
 After the CTRL-O command that got you into line 1154 you could give another
 jump command (e.g., "G").  The jump list would then become:
 
-  jump line  col file/line ~
+  jump line  col file/text ~
     4	  1    0 some text ~
     3	 70    0 another line ~
     2  1167    0 foo bar ~
diff -Naur vim73.orig/runtime/doc/netbeans.txt vim73/runtime/doc/netbeans.txt
--- vim73.orig/runtime/doc/netbeans.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/netbeans.txt	2013-08-04 19:09:07.900618676 +0000
@@ -1,4 +1,4 @@
-*netbeans.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
+*netbeans.txt*  For Vim version 7.3.  Last change: 2012 Jan 26
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur et al.
@@ -118,7 +118,8 @@
 uncommenting a line with "--disable-netbeans" in the Makefile.
 
 Currently the NetBeans interface is supported by Vim running in a terminal and
-by GVim when it is run with one of the following GUIs: GTK, GNOME, and Motif.
+by GVim when it is run with one of the following GUIs: GTK, GNOME, Windows,
+Athena and Motif.
 
 If Motif support is required the user must supply XPM libraries.  See
 |workshop-xpm| for details on obtaining the latest version of XPM.
@@ -262,6 +263,12 @@
 plain UTF-8 text this protocol could also be used with any other communication
 mechanism.
 
+Netbeans messages are processed when Vim is idle, waiting for user input.
+When Vim is run in non-interactive mode, for example when running an automated
+test case that sources a Vim script, the idle loop may not be called often
+enough. In that case, insert |:sleep| commands in the Vim script. The |:sleep|
+command does invoke Netbeans messages processing.
+
 6.1 Kinds of messages		|nb-messages|
 6.2 Terms			|nb-terms|
 6.3 Commands			|nb-commands|
@@ -819,7 +826,7 @@
 ==============================================================================
 7. NetBeans commands					*netbeans-commands*
 
-							*:nbstart* *E511*
+							*:nbstart* *E511* *E838*
 :nbs[tart] {connection}	Start a new Netbeans session with {connection} as the
 			socket connection parameters.  The format of
 			{connection} is described in |netbeans-parameters|.
@@ -832,11 +839,16 @@
 			signs.
 
 							*:nbkey*
-:nb[key] {key}		Pass the {key} to the Vim Controller for processing
-
-When a hot-key has been installed with the specialKeys command, this command
-can be used to generate a hotkey messages to the Vim Controller. The events
-newDotAndMark, keyCommand and keyAtPos are generated (in this order).
+:nb[key] {key}		Pass the {key} to the Vim Controller for processing.
+			When a hot-key has been installed with the specialKeys
+			command, this command can be used to generate a hotkey
+			message to the Vim Controller.
+			This command can also be used to pass any text to the
+			Vim  Controller. It is used by Pyclewn, for example,
+			to build the complete set of gdb commands as Vim user
+			commands.
+			The events newDotAndMark, keyCommand and keyAtPos are
+			generated (in this order).
 
 
 ==============================================================================
diff -Naur vim73.orig/runtime/doc/options.txt vim73/runtime/doc/options.txt
--- vim73.orig/runtime/doc/options.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/options.txt	2013-08-04 19:09:07.913951969 +0000
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.3.  Last change: 2010 Aug 15
+*options.txt*	For Vim version 7.3.  Last change: 2013 Jun 29
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -150,6 +150,18 @@
 (the ^[ is a real <Esc> here, use CTRL-V <Esc> to enter it)
 The advantage over a mapping is that it works in all situations.
 
+You can define any key codes, e.g.: >
+	:set t_xy=^[foo;
+There is no warning for using a name that isn't recognized.  You can map these
+codes as you like: >
+	:map <t_xy> something
+<								*E846*
+When a key code is not set, it's like it does not exist.  Trying to get its
+value will result in an error: >
+	:set t_kb=
+	:set t_kb
+	E846: Key code not set: t_kb
+
 The t_xx options cannot be set from a |modeline| or in the |sandbox|, for
 security reasons.
 
@@ -265,8 +277,10 @@
 value, ":setlocal list" only changes the local value and ":e two" gets the
 global value.  Note that if you do this next: >
 	:e one
-You will not get back the 'list' value as it was the last time you edited
-"one".  The options local to a window are not remembered for each buffer.
+You will get back the 'list' value as it was the last time you edited "one".
+The options local to a window are remembered for each buffer.  This also
+happens when the buffer is not loaded, but they are lost when the buffer is
+wiped out |:bwipe|.
 
 							*:setl* *:setlocal*
 :setl[ocal] ...		Like ":set" but set only the value local to the
@@ -289,9 +303,8 @@
 			copying the value.
 			{not in Vi}
 
-:se[t] {option}<	Set the local value of {option} to its global value by
-			making it empty.  Only makes sense for |global-local|
-			options.
+:se[t] {option}<	For |global-local| options: Remove the local value of
+			{option}, so that the global value will be used.
 			{not in Vi}
 
 							*:setg* *:setglobal*
@@ -361,6 +374,7 @@
 			settings and syntax files to be loaded.
 			{not in Vi}
 
+				*option-window* *optwin*
 :bro[wse] se[t]			*:set-browse* *:browse-set* *:opt* *:options*
 :opt[ions]		Open a window for viewing and setting all options.
 			Options are grouped by function.
@@ -388,6 +402,9 @@
 contain non-id characters then.  Note that if you want to use this for the
 "gf" command, you need to add the '{' and '}' characters to 'isfname'.
 
+On MS-Windows, if $HOME is not defined as an environment variable, then
+at runtime Vim will set it to the expansion of $HOMEDRIVE$HOMEPATH.
+
 NOTE: expanding environment variables and "~/" is only done with the ":set"
 command, not when assigning a value to an option with ":let".
 
@@ -465,39 +482,42 @@
 There are two forms of modelines.  The first form:
 	[text]{white}{vi:|vim:|ex:}[white]{options}
 
-[text]		any text or empty
-{white}		at least one blank character (<Space> or <Tab>)
-{vi:|vim:|ex:}	the string "vi:", "vim:" or "ex:"
-[white]		optional white space
-{options}	a list of option settings, separated with white space or ':',
-		where each part between ':' is the argument for a ":set"
-		command (can be empty)
+[text]			any text or empty
+{white}			at least one blank character (<Space> or <Tab>)
+{vi:|vim:|ex:}		the string "vi:", "vim:" or "ex:"
+[white]			optional white space
+{options}		a list of option settings, separated with white space
+			or ':', where each part between ':' is the argument
+			for a ":set" command (can be empty)
 
-Example:
+Examples:
    vi:noai:sw=3 ts=6 ~
+   vim: tw=77 ~
 
 The second form (this is compatible with some versions of Vi):
 
-	[text]{white}{vi:|vim:|ex:}[white]se[t] {options}:[text]
+	[text]{white}{vi:|vim:|Vim:|ex:}[white]se[t] {options}:[text]
 
-[text]		any text or empty
-{white}		at least one blank character (<Space> or <Tab>)
-{vi:|vim:|ex:}	the string "vi:", "vim:" or "ex:"
-[white]		optional white space
-se[t]		the string "set " or "se " (note the space)
-{options}	a list of options, separated with white space, which is the
-		argument for a ":set" command
-:		a colon
-[text]		any text or empty
+[text]			any text or empty
+{white}			at least one blank character (<Space> or <Tab>)
+{vi:|vim:|Vim:|ex:}	the string "vi:", "vim:", "Vim:" or "ex:"
+[white]			optional white space
+se[t]			the string "set " or "se " (note the space); When
+			"Vim" is used it must be "set".
+{options}		a list of options, separated with white space, which
+			is the argument for a ":set" command
+:			a colon
+[text]			any text or empty
 
-Example:
+Examples:
    /* vim: set ai tw=75: */ ~
+   /* Vim: set ai tw=75: */ ~
 
-The white space before {vi:|vim:|ex:} is required.  This minimizes the chance
-that a normal word like "lex:" is caught.  There is one exception: "vi:" and
-"vim:" can also be at the start of the line (for compatibility with version
-3.0).  Using "ex:" at the start of the line will be ignored (this could be
-short for "example:").
+The white space before {vi:|vim:|Vim:|ex:} is required.  This minimizes the
+chance that a normal word like "lex:" is caught.  There is one exception:
+"vi:" and "vim:" can also be at the start of the line (for compatibility with
+version 3.0).  Using "ex:" at the start of the line will be ignored (this
+could be short for "example:").
 
 							*modeline-local*
 The options are set like with ":setlocal": The new value only applies to the
@@ -513,7 +533,7 @@
 
 							*modeline-version*
 If the modeline is only to be used for some versions of Vim, the version
-number can be specified where "vim:" is used:
+number can be specified where "vim:" or "Vim:" is used:
 	vim{vers}:	version {vers} or later
 	vim<{vers}:	version before {vers}
 	vim={vers}:	version {vers}
@@ -684,6 +704,10 @@
 	when the system locale is set to one of CJK locales.  See Unicode
 	Standard Annex #11 (http://www.unicode.org/reports/tr11).
 
+	Vim may set this option automatically at startup time when Vim is
+	compiled with the |+termresponse| feature and if |t_u7| is set to the
+	escape sequence to request cursor position report.
+
 			*'antialias'* *'anti'* *'noantialias'* *'noanti'*
 'antialias' 'anti'	boolean (default: off)
 			global
@@ -729,7 +753,7 @@
 	- Reset the 'rightleft' option.
 	- Disable the use of 'keymap' (without changing its value).
 	Note that 'arabicshape' and 'delcombine' are not reset (it is a global
-	option.
+	option).
 	Also see |arabic.txt|.
 
 					*'arabicshape'* *'arshape'*
@@ -741,7 +765,7 @@
 			feature}
 	When on and 'termbidi' is off, the required visual character
 	corrections that need to take place for displaying the Arabic language
-	take affect.  Shaping, in essence, gets enabled; the term is a broad
+	take effect.  Shaping, in essence, gets enabled; the term is a broad
 	one which encompasses:
 	  a) the changing/morphing of characters based on their location
 	     within a word (initial, medial, final and stand-alone).
@@ -802,7 +826,7 @@
 	been set.
 
 							*'background'* *'bg'*
-'background' 'bg'	string	(default "dark" or "light")
+'background' 'bg'	string	(default "dark" or "light", see below)
 			global
 			{not in Vi}
 	When set to "dark", Vim will try to use colors that look good on a
@@ -836,6 +860,12 @@
 	color).  To get around this, force the GUI window to be opened by
 	putting a ":gui" command in the .gvimrc file, before where the value
 	of 'background' is used (e.g., before ":syntax on").
+
+	For MS-DOS, Windows and OS/2 the default is "dark".
+	For other systems "dark" is used when 'term' is "linux",
+	"screen.linux", "cygwin" or "putty", or $COLORFGBG suggests a dark
+	background.  Otherwise the default is "light".
+
 	Normally this option would be set in the .vimrc file.  Possibly
 	depending on the terminal name.  Example: >
 		:if &term == "pcterm"
@@ -965,7 +995,7 @@
 	- The backup file will be created in the first directory in the list
 	  where this is possible.  The directory must exist, Vim will not
 	  create it for you.
-	- Empty means that no backup file will be created ('patchmode' is
+	- Empty means that no backup file will be created ( 'patchmode' is
 	  impossible!).  Writing may fail because of this.
 	- A directory "." means to put the backup file in the same directory
 	  as the edited file.
@@ -1026,6 +1056,11 @@
 	When $TMPDIR, $TMP or $TEMP is not defined, it is not used for the
 	default value.  "/tmp/*" is only used for Unix.
 
+	WARNING: Not having a backup file means that when Vim fails to write
+	your buffer correctly and then, for whatever reason, Vim exits, you
+	lose both the original file and what you were writing.  Only disable
+	backups if you don't care about losing the file.
+
 	Note that environment variables are not expanded.  If you want to use
 	$HOME you must expand it explicitly, e.g.: >
 		:let backupskip = escape(expand('$HOME'), '\') . '/tmp/*'
@@ -1081,8 +1116,8 @@
 	Vim does not try to send a message to an external debugger (Netbeans
 	or Sun Workshop).
 
-	The expression may be evaluated in the |sandbox|, see
-	|sandbox-option|.
+	The expression will be evaluated in the |sandbox| when set from a
+	modeline, see |sandbox-option|.
 
 	It is not allowed to change text or jump to another window while
 	evaluating 'balloonexpr' |textlock|.
@@ -1198,7 +1233,8 @@
 			|:bwipeout|
 
 	CAREFUL: when "unload", "delete" or "wipe" is used changes in a buffer
-	are lost without a warning.
+	are lost without a warning.  Also, these values may break autocommands
+	that switch between buffers temporarily.
 	This option is used together with 'buftype' and 'swapfile' to specify
 	special kinds of buffers.   See |special-buffers|.
 
@@ -1425,6 +1461,7 @@
 	This option is a list of comma separated names.
 	These names are recognized:
 
+						*clipboard-unnamed*
 	unnamed		When included, Vim will use the clipboard register '*'
 			for all yank, delete, change and put operations which
 			would normally go to the unnamed register.  When a
@@ -1434,6 +1471,20 @@
 			explicitly accessed using the "* notation.  Also see
 			|gui-clipboard|.
 
+						*clipboard-unnamedplus*
+	unnamedplus	A variant of the "unnamed" flag which uses the
+			clipboard register '+' (|quoteplus|) instead of
+			register '*' for all yank, delete, change and put
+			operations which would normally go to the unnamed
+			register.  When "unnamed" is also included to the
+			option, yank operations (but not delete, change or
+			put) will additionally copy the text into register
+			'*'.
+			Only available with the |+X11| feature.
+			Availability can be checked with: >
+				if has('unnamedplus')
+<
+						*clipboard-autoselect*
 	autoselect	Works like the 'a' flag in 'guioptions': If present,
 			then whenever Visual mode is started, or the Visual
 			area extended, Vim tries to become the owner of the
@@ -1445,9 +1496,16 @@
 			"autoselect" flag is used.
 			Also applies to the modeless selection.
 
+						*clipboard-autoselectplus*
+	autoselectplus  Like "autoselect" but using the + register instead of
+			the * register.  Compare to the 'P' flag in
+			'guioptions'.
+
+						*clipboard-autoselectml*
 	autoselectml	Like "autoselect", but for the modeless selection
 			only.  Compare to the 'A' flag in 'guioptions'.
 
+						*clipboard-html*
 	html		When the clipboard contains HTML, use this when
 			pasting.  When putting text on the clipboard, mark it
 			as HTML.  This works to copy rendered HTML from
@@ -1458,6 +1516,7 @@
 			Only supported for GTK version 2 and later.
 			Only available with the |+multi_byte| feature.
 
+						*clipboard-exclude*
 	exclude:{pattern}
 			Defines a pattern that is matched against the name of
 			the terminal 'term'.  If there is a match, no
@@ -1496,6 +1555,25 @@
 			feature}
 	Number of screen lines to use for the command-line window. |cmdwin|
 
+						*'colorcolumn'* *'cc'*
+'colorcolumn' 'cc'	string	(default "")
+			local to window
+			{not in Vi}
+			{not available when compiled without the |+syntax|
+			feature}
+	'colorcolumn' is a comma separated list of screen columns that are
+	highlighted with ColorColumn |hl-ColorColumn|.  Useful to align
+	text.  Will make screen redrawing slower.
+	The screen column can be an absolute number, or a number preceded with
+	'+' or '-', which is added to or subtracted from 'textwidth'. >
+
+		:set cc=+1  " highlight column after 'textwidth'
+		:set cc=+1,+2,+3  " highlight three columns after 'textwidth'
+		:hi ColorColumn ctermbg=lightgrey guibg=lightgrey
+<
+	When 'textwidth' is zero then the items with '-' and '+' are not used.
+	A maximum of 256 columns are highlighted.
+
 						*'columns'* *'co'* *E594*
 'columns' 'co'		number	(default 80 or terminal width)
 			global
@@ -1634,7 +1712,7 @@
 	when CTRL-P or CTRL-N are used.  It is also used for whole-line
 	completion |i_CTRL-X_CTRL-L|.  It indicates the type of completion
 	and the places to scan.  It is a comma separated list of flags:
-	.	scan the current buffer ('wrapscan' is ignored)
+	.	scan the current buffer ( 'wrapscan' is ignored)
 	w	scan buffers from other windows
 	b	scan other loaded buffers that are in the buffer list
 	u	scan the unloaded buffers that are in the buffer list
@@ -1680,7 +1758,8 @@
 	with CTRL-X CTRL-U. |i_CTRL-X_CTRL-U|
 	See |complete-functions| for an explanation of how the function is
 	invoked and what it should return.
-
+	This option cannot be set from a |modeline| or in the |sandbox|, for
+	security reasons.
 
 						*'completeopt'* *'cot'*
 'completeopt' 'cot'	string	(default: "menu,preview")
@@ -2069,6 +2148,12 @@
 								*cpo->*
 		>	When appending to a register, put a line break before
 			the appended text.
+								*cpo-;*
+		;	When using |,| or |;| to repeat the last |t| search
+			and the cursor is right in front of the searched
+			character, the cursor won't move. When not included,
+			the cursor would skip over it and jump to the
+			following occurrence.
 
 	POSIX flags.  These are not included in the Vi default value, except
 	when $VIM_POSIX was set on startup. |posix|
@@ -2161,6 +2246,16 @@
 	Specifies whether to use quickfix window to show cscope results.
 	See |cscopequickfix|.
 
+		*'cscoperelative'* *'csre'* *'nocscoperelative'* *'nocsre'*
+'cscoperelative' 'csre' boolean (default off)
+			global
+			{not available when compiled without the |+cscope|
+			feature}
+			{not in Vi}
+	In the absence of a prefix (-P) for cscope. setting this option enables
+	to use the basename of cscope.out path as the prefix.
+	See |cscoperelative|.
+
 				*'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
 'cscopetag' 'cst'	boolean (default off)
 			global
@@ -2782,7 +2877,7 @@
 	See |file-formats| and |file-read|.
 	For the character encoding of the file see 'fileencoding'.
 	When 'binary' is set, the value of 'fileformat' is ignored, file I/O
-	works like it was set to "unix'.
+	works like it was set to "unix".
 	This option is set automatically when starting to edit a file and
 	'fileformats' is not empty and 'binary' is off.
 	When this option is set, after starting to edit a file, the 'modified'
@@ -2817,13 +2912,14 @@
 	  2. If a <NL> is found and 'fileformats' includes "unix", 'fileformat'
 	     is set to "unix".  Note that when a <NL> is found without a
 	     preceding <CR>, "unix" is preferred over "dos".
-	  3. If 'fileformats' includes "mac", 'fileformat' is set to "mac".
-	     This means that "mac" is only chosen when "unix" is not present,
-	     or when no <NL> is found in the file, and when "dos" is not
-	     present, or no <CR><NL> is present in the file.
-	     Also if "unix" was first chosen, but the first <CR> is before
-	     the first <NL> and there appears to be more <CR>'s than <NL>'s in
-	     the file, then 'fileformat' is set to "mac".
+	  3. If 'fileformat' has not yet been set, and if 'fileformats'
+	     includes "mac", 'fileformat' is set to "mac".
+	     This means that "mac" is only chosen when:
+	      "unix" is not present or no <NL> is found in the file, and
+	      "dos" is not present or no <CR><NL> is found in the file.
+	     Except: if "unix" was chosen, but there is a <CR> before
+	     the first <NL>, and there appear to be more <CR>s than <NL>s in
+	     the first few lines, "mac" is used.
 	  4. If 'fileformat' is still not set, the first name from
 	     'fileformats' is used.
 	  When reading a file into an existing buffer, the same is done, but
@@ -2831,6 +2927,9 @@
 	  file only, the option is not changed.
 	When 'binary' is set, the value of 'fileformats' is not used.
 
+	Note that when Vim starts up with an empty buffer this option is not
+	used.  Set 'fileformat' in your .vimrc instead.
+
 	For systems with a Dos-like <EOL> (<CR><NL>), when reading files that
 	are ":source"ed and for vimrc files, automatic <EOL> detection may be
 	done:
@@ -2847,6 +2946,14 @@
 	NOTE: This option is set to the Vi default value when 'compatible' is
 	set and to the Vim default value when 'compatible' is reset.
 
+		*'fileignorecase'* *'fic'* *'nofileignorecase'* *'nofic'*
+'fileignorecase' 'fic'	boolean	(default on for systems where case in file
+				 names is normally ignored)
+			global
+			{not in Vi}
+	When set case is ignored when using file names and directories.
+	See 'wildignorecase' for only ignoring case when doing completion.
+
 					*'filetype'* *'ft'*
 'filetype' 'ft'		string (default: "")
 			local to buffer
@@ -2871,8 +2978,6 @@
 	This will use the "c" filetype first, then the "doxygen" filetype.
 	This works both for filetype plugins and for syntax files.  More than
 	one dot may appear.
-	Do not confuse this option with 'osfiletype', which is for the file
-	type that is actually stored with the file.
 	This option is not copied to another buffer, independent of the 's' or
 	'S' flag in 'cpoptions'.
 	Only normal file name characters can be used, "/\*?[|<>" are illegal.
@@ -2966,8 +3071,8 @@
 	The expression used for when 'foldmethod' is "expr".  It is evaluated
 	for each line to obtain its fold level.  See |fold-expr|.
 
-	The expression may be evaluated in the |sandbox|, see
-	|sandbox-option|.
+	The expression will be evaluated in the |sandbox| if set from a
+	modeline, see |sandbox-option|.
 	This option can't be set from a |modeline| when the 'diff' option is
 	on.
 
@@ -3044,9 +3149,11 @@
 			{not in Vi}
 			{not available when compiled without the |+folding|
 			feature}
-	Sets the minimum number of screen lines for a fold to be displayed
-	closed.  Also for manually closed folds.
-	Note that this only has an effect of what is displayed.  After using
+	Sets the number of screen lines above which a fold can be displayed
+	closed.  Also for manually closed folds.  With the default value of
+	one a fold can only be closed if it takes up two or more screen lines.
+	Set to zero to be able to close folds of just one screen line.
+	Note that this only has an effect on what is displayed.  After using
 	"zc" to close a fold, which is displayed open because it's smaller
 	than 'foldminlines', a following "zc" may close a containing fold.
 
@@ -3070,6 +3177,10 @@
 	Specifies for which type of commands folds will be opened, if the
 	command moves the cursor into a closed fold.  It is a comma separated
 	list of items.
+	NOTE: When the command is part of a mapping this option is not used.
+	Add the |zv| command to the mapping to get the same effect.
+	(rationale: the mapping may want to control opening folds itself)
+
 		item		commands ~
 		all		any
 		block		"(", "{", "[[", "[{", etc.
@@ -3084,8 +3195,6 @@
 				Also for |[s| and |]s|.
 		tag		jumping to a tag: ":ta", CTRL-T, etc.
 		undo		undo or redo: "u" and CTRL-R
-	When the command is part of a mapping this option is not used.  Add
-	the |zv| command to the mapping to get the same effect.
 	When a movement command is used for an operator (e.g., "dl" or "y%")
 	this option is not used.  This means the operator will include the
 	whole closed fold.
@@ -3105,8 +3214,8 @@
 	An expression which is used to specify the text displayed for a closed
 	fold.  See |fold-foldtext|.
 
-	The expression may be evaluated in the |sandbox|, see
-	|sandbox-option|.
+	The expression will be evaluated in the |sandbox| if set from a
+	modeline, see |sandbox-option|.
 
 	It is not allowed to change text or jump to another window while
 	evaluating 'foldtext' |textlock|.
@@ -3151,8 +3260,8 @@
 	format function will be used |C-indenting|.
 	Environment variables are expanded |:set_env|.  See |option-backslash|
 	about including spaces and backslashes.
-	The expression may be evaluated in the |sandbox|, see
-	|sandbox-option|.
+	This option cannot be set from a |modeline| or in the |sandbox|, for
+	security reasons.
 
 						*'formatexpr'* *'fex'*
 'formatexpr' 'fex'	string (default "")
@@ -3185,8 +3294,9 @@
 	When the expression evaluates to non-zero Vim will fall back to using
 	the internal format mechanism.
 
-	The expression may be evaluated in the |sandbox|, see
-	|sandbox-option|.
+	The expression will be evaluated in the |sandbox| when set from a
+	modeline, see |sandbox-option|.  That stops the option from working,
+	since changing the buffer text is not allowed.
 
 						*'fsync'* *'fs'*
 'fsync' 'fs'		boolean	(default on)
@@ -3338,7 +3448,7 @@
 	    :highlight Cursor gui=NONE guifg=bg guibg=fg
 <
 					*'guifont'* *'gfn'*
-						   *E235* *E596* *E610* *E611*
+						   *E235* *E596*
 'guifont' 'gfn'		string	(default "")
 			global
 			{not in Vi}
@@ -3470,6 +3580,10 @@
 	to set 'guifontwide' at all unless you want to override the choice
 	made by Pango/Xft.
 
+	Windows +multibyte only:		*guifontwide_win_mbyte*
+
+	If set and valid, 'guifontwide' is used for IME instead of 'guifont'.
+
 						*'guiheadroom'* *'ghr'*
 'guiheadroom' 'ghr'	number	(default 50)
 			global
@@ -3483,8 +3597,8 @@
 	screen.
 
 						*'guioptions'* *'go'*
-'guioptions' 'go'	string	(default "gmrLtT"   (MS-Windows),
-					 "agimrLtT" (GTK, Motif and Athena))
+'guioptions' 'go'	string	(default "egmrLtT"   (MS-Windows),
+					 "aegimrLtT" (GTK, Motif and Athena))
 			global
 			{not in Vi}
 			{only available when compiled with GUI enabled}
@@ -3510,6 +3624,9 @@
 		windowing system's global selection unless explicitly told to
 		by a yank or delete operation for the "* register.
 		The same applies to the modeless selection.
+								*'go-P'*
+	  'P'	Like autoselect but using the "+ register instead of the "*
+	  	register.
 								*'go-A'*
 	  'A'	Autoselect for the modeless selection.  Like 'a', but only
 		applies to the modeless selection.
@@ -3698,9 +3815,10 @@
 'highlight' 'hl'	string	(default (as a single string):
 				     "8:SpecialKey,@:NonText,d:Directory,
 				     e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,
-				     M:ModeMsg,n:LineNr,r:Question,
-				     s:StatusLine,S:StatusLineNC,c:VertSplit,
-				     t:Title,v:Visual,w:WarningMsg,W:WildMenu,
+				     M:ModeMsg,n:LineNr,N:CursorLineNr,
+				     r:Question,s:StatusLine,S:StatusLineNC,
+				     c:VertSplit, t:Title,v:Visual,
+				     w:WarningMsg,W:WildMenu,
 				     f:Folded,F:FoldColumn,A:DiffAdd,
 				     C:DiffChange,D:DiffDelete,T:DiffText,
 				     >:SignColumn,B:SpellBad,P:SpellCap,
@@ -3726,6 +3844,8 @@
 	|hl-ModeMsg|	 M  Mode (e.g., "-- INSERT --")
 	|hl-LineNr|	 n  line number for ":number" and ":#" commands, and
 			    when 'number' or 'relativenumber' option is set.
+	|hl-CursorLineNr|  N like n for when 'cursorline' or 'relativenumber' is
+			    set.
 	|hl-Question|	 r  |hit-enter| prompt and yes/no questions
 	|hl-StatusLine|	 s  status line of current window |status-line|
 	|hl-StatusLineNC| S  status lines of not-current windows
@@ -3787,14 +3907,16 @@
 	are not applied.
 	See also: 'incsearch' and |:match|.
 	When you get bored looking at the highlighted matches, you can turn it
-	off with |:nohlsearch|.  As soon as you use a search command, the
-	highlighting comes back.
+	off with |:nohlsearch|.  This does not change the option value, as
+	soon as you use a search command, the highlighting comes back.
 	'redrawtime' specifies the maximum time spent on finding matches.
 	When the search pattern can match an end-of-line, Vim will try to
 	highlight all of the matched text.  However, this depends on where the
 	search starts.  This will be the first line in the window or the first
 	line below a closed fold.  A match in a previous line which is not
 	drawn may not continue in a newly drawn line.
+	You can specify whether the highlight status is restored on startup
+	with the 'h' flag in 'viminfo' |viminfo-h|.
 	NOTE: This option is reset when 'compatible' is set.
 
 						*'history'* *'hi'*
@@ -3874,6 +3996,26 @@
 	Can be overruled by using "\c" or "\C" in the pattern, see
 	|/ignorecase|.
 
+						*'imactivatefunc'* *'imaf'*
+'imactivatefunc' 'imaf'	string (default "")
+			global
+			{not in Vi}
+			{only available when compiled with |+xim| and
+			|+GUI_GTK|}
+	This option specifies a function that will be called to
+	activate/inactivate Input Method.
+
+	Example: >
+		function ImActivateFunc(active)
+		  if a:active
+		    ... do something
+		  else
+		    ... do something
+		  endif
+		  " return value is not used
+		endfunction
+		set imactivatefunc=ImActivateFunc
+<
 						*'imactivatekey'* *'imak'*
 'imactivatekey' 'imak'	string (default "")
 			global
@@ -3970,6 +4112,24 @@
 	The value 0 may not work correctly with Athena and Motif with some XIM
 	methods.  Use 'imdisable' to disable XIM then.
 
+						*'imstatusfunc'* *'imsf'*
+'imstatusfunc' 'imsf'	string (default "")
+			global
+			{not in Vi}
+			{only available when compiled with |+xim| and
+			|+GUI_GTK|}
+	This option specifies a function that is called to obtain the status
+	of Input Method.  It must return a positive number when IME is active.
+
+	Example: >
+		function ImStatusFunc()
+		  let is_active = ...do something
+		  return is_active ? 1 : 0
+		endfunction
+		set imstatusfunc=ImStatusFunc
+<
+	NOTE: This function is invoked very often.  Keep it fast.
+
 						*'include'* *'inc'*
 'include' 'inc'		string	(default "^\s*#\s*include")
 			global or local to buffer |global-local|
@@ -4003,8 +4163,8 @@
 	found.  Allows doing "gf" on the name after an 'include' statement.
 	Also used for |<cfile>|.
 
-	The expression may be evaluated in the |sandbox|, see
-	|sandbox-option|.
+	The expression will be evaluated in the |sandbox| when set from a
+	modeline, see |sandbox-option|.
 
 	It is not allowed to change text or jump to another window while
 	evaluating 'includeexpr' |textlock|.
@@ -4047,7 +4207,8 @@
 	It is used when a new line is created, for the |=| operator and
 	in Insert mode as specified with the 'indentkeys' option.
 	When this option is not empty, it overrules the 'cindent' and
-	'smartindent' indenting.
+	'smartindent' indenting.  When 'lisp' is set, this option is
+	overridden by the Lisp indentation algorithm.
 	When 'paste' is set this option is not used for indenting.
 	The expression is evaluated with |v:lnum| set to the line number for
 	which the indent is to be computed.  The cursor is also in this line
@@ -4067,8 +4228,8 @@
 	See |indent-expression|.
 	NOTE: This option is made empty when 'compatible' is set.
 
-	The expression may be evaluated in the |sandbox|, see
-	|sandbox-option|.
+	The expression will be evaluated in the |sandbox| when set from a
+	modeline, see |sandbox-option|.
 
 	It is not allowed to change text or jump to another window while
 	evaluating 'indentexpr' |textlock|.
@@ -4270,6 +4431,8 @@
 	"echo &key".  This is to avoid showing it to someone who shouldn't
 	know.  It also means you cannot see it yourself once you have set it,
 	be careful not to make a typing error!
+	You can use "&key" in an expression to detect whether encryption is
+	enabled.  When 'key' is set it returns "*****" (five stars).
 
 					*'keymap'* *'kmp'* *E544*
 'keymap' 'kmp'		string	(default "")
@@ -4495,24 +4658,31 @@
 			{not in Vi}
 	Strings to use in 'list' mode and for the |:list| command.  It is a
 	comma separated list of string settings.
+	  						*lcs-eol*
 	  eol:c		Character to show at the end of each line.  When
 			omitted, there is no extra character at the end of the
 			line.
+	  						*lcs-tab*
 	  tab:xy	Two characters to be used to show a tab.  The first
 			char is used once.  The second char is repeated to
 			fill the space that the tab normally occupies.
 			"tab:>-" will show a tab that takes four spaces as
 			">---".  When omitted, a tab is show as ^I.
+	  						*lcs-trail*
 	  trail:c	Character to show for trailing spaces.  When omitted,
 			trailing spaces are blank.
+	  						*lcs-extends*
 	  extends:c	Character to show in the last column, when 'wrap' is
 			off and the line continues beyond the right of the
 			screen.
+	  						*lcs-precedes*
 	  precedes:c	Character to show in the first column, when 'wrap'
 			is off and there is text preceding the character
 			visible in the first column.
+	  						*lcs-conceal*
 	  conceal:c	Character to show in place of concealed text, when
 			'conceallevel' is set to 1.
+	  						*lcs-nbsp*
 	  nbsp:c	Character to show for a non-breakable space (character
 			0xA0, 160).  Left blank when omitted.
 
@@ -4601,32 +4771,15 @@
 <	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
-						*'colorcolumn'* *'cc'*
-'colorcolumn' 'cc'	string	(default "")
-			local to window
-			{not in Vi}
-			{not available when compiled without the |+syntax|
-			feature}
-	'colorcolumn' is a comma separated list of screen columns that are
-	highlighted with ColorColumn |hl-ColorColumn|.  Useful to align
-	text.  Will make screen redrawing slower.
-	The screen column can be an absolute number, or a number preceded with
-	'+' or '-', which is added to or subtracted from 'textwidth'. >
-
-		:set cc=+1  " highlight column after 'textwidth'
-		:set cc=+1,+2,+3  " highlight three columns after 'textwidth'
-		:hi ColorColumn ctermbg=lightgrey guibg=lightgrey
-<
-	When 'textwidth' is zero then the items with '-' and '+' are not used.
-	A maximum of 256 columns are highlighted.
-
 						*'matchpairs'* *'mps'*
 'matchpairs' 'mps'	string	(default "(:),{:},[:]")
 			local to buffer
 			{not in Vi}
 	Characters that form pairs.  The |%| command jumps from one to the
-	other.  Currently only single byte character pairs are allowed, and
-	they must be different.  The characters must be separated by a colon.
+	other.
+	Only character pairs are allowed that are different, thus you cannot
+	jump between two double quotes.
+	The characters must be separated by a colon.
 	The pairs must be separated by a comma.  Example for including '<' and
 	'>' (HTML): >
 		:set mps+=<:>
@@ -4806,6 +4959,10 @@
 	   written.  A ":set nomodified" command also resets the original
 	   values to the current values and the 'modified' option will be
 	   reset.
+	This option is not set when a change is made to the buffer as the
+	result of a BufNewFile, BufRead/BufReadPost, BufWritePost,
+	FileAppendPost or VimLeave autocommand event.  See |gzip-example| for
+	an explanation.
 	When 'buftype' is "nowrite" or "nofile" this option may be set, but
 	will be ignored.
 
@@ -4994,7 +5151,7 @@
 	respectively; see |CTRL-A| for more info on these commands.
 	alpha	If included, single alphabetical characters will be
 		incremented or decremented.  This is useful for a list with a
-		letter index a), b), etc.			*octal-number*
+		letter index a), b), etc.	  	*octal-nrformats*
 	octal	If included, numbers that start with a zero will be considered
 		to be octal.  Example: Using CTRL-A on "007" results in "010".
 	hex	If included, numbers starting with "0x" or "0X" will be
@@ -5014,8 +5171,20 @@
 	number.
 	When a long, wrapped line doesn't start with the first character, '-'
 	characters are put before the number.
-	See |hl-LineNr| for the highlighting used for the number.
-	When setting this option, 'relativenumber' is reset.
+	See |hl-LineNr|  and |hl-CursorLineNr| for the highlighting used for
+	the number.
+						*number_relativenumber*
+	The 'relativenumber' option changes the displayed number to be
+	relative to the cursor.  Together with 'number' there are these
+	four combinations (cursor in line 3):
+
+              	'nonu'          'nu'            'nonu'          'nu'
+		'nornu'         'nornu'         'rnu'           'rnu'
+
+	    |apple          |  1 apple      |  2 apple      |  2 apple
+	    |pear           |  2 pear       |  1 pear       |  1 pear
+	    |nobody         |  3 nobody     |  0 nobody     |3   nobody
+	    |there          |  4 there      |  1 there      |  1 there
 
 						*'numberwidth'* *'nuw'*
 'numberwidth' 'nuw'	number	(Vim default: 4  Vi default: 8)
@@ -5047,6 +5216,8 @@
 	invoked and what it should return.
 	This option is usually set by a filetype plugin:
 	|:filetype-plugin-on|
+	This option cannot be set from a |modeline| or in the |sandbox|, for
+	security reasons.
 
 
 			    *'opendevice'* *'odev'* *'noopendevice'* *'noodev'*
@@ -5072,20 +5243,12 @@
 	security reasons.
 
 
-					*'osfiletype'* *'oft'* *E366*
-'osfiletype' 'oft'	string (RISC-OS default: "Text",
-				others default: "")
+					*'osfiletype'* *'oft'*
+'osfiletype' 'oft'	string (default: "")
 			local to buffer
 			{not in Vi}
-			{only available when compiled with the |+osfiletype|
-			feature}
-	Some operating systems store extra information about files besides
-	name, datestamp and permissions.  This option contains the extra
-	information, the nature of which will vary between systems.
-	The value of this option is usually set when the file is loaded, and
-	is used to set the operating system file type when file is written.
-	It can affect the pattern matching of the automatic commands.
-	|autocmd-osfiletypes|
+	This option was supported on RISC OS, which has been removed.
+
 
 						*'paragraphs'* *'para'*
 'paragraphs' 'para'	string	(default "IPLPPPQPP TPHPLIPpLpItpplpipbp")
@@ -5190,7 +5353,7 @@
 	recognized as a compressed file.
 	Only normal file name characters can be used, "/\*?[|<>" are illegal.
 
-					*'path'* *'pa'* *E343* *E345* *E347*
+				*'path'* *'pa'* *E343* *E345* *E347* *E854*
 'path' 'pa'		string	(default on Unix: ".,/usr/include,,"
 				   on OS/2:	  ".,/emx/include,,"
 				   other systems: ".,,")
@@ -5405,6 +5568,19 @@
 	matches will be highlighted.  This is used to avoid that Vim hangs
 	when using a very complicated pattern.
 
+						*'regexpengine'* *'re'*
+'regexpengine' 're'	number	(default 0)
+			global
+			{not in Vi}
+	This selects the default regexp engine. |two-engines|
+	The possible values are:
+		0	automatic selection
+		1	old engine
+		2	NFA engine
+	Note that when using the NFA engine and the pattern contains something
+	that is not supported the pattern will not match.  This is only useful
+	for debugging the regexp engine.
+
 		*'relativenumber'* *'rnu'* *'norelativenumber'* *'nornu'*
 'relativenumber' 'rnu'	boolean	(default off)
 			local to window
@@ -5421,8 +5597,12 @@
 	number.
 	When a long, wrapped line doesn't start with the first character, '-'
 	characters are put before the number.
-	See |hl-LineNr| for the highlighting used for the number.
-	When setting this option, 'number' is reset.
+	See |hl-LineNr|  and |hl-CursorLineNr| for the highlighting used for
+	the number.
+	
+	The number in front of the cursor line also depends on the value of
+	'number', see |number_relativenumber| for all combinations of the two
+	options.
 
 						*'remap'* *'noremap'*
 'remap'			boolean	(default on)
@@ -5843,16 +6023,20 @@
 	security reasons.
 
 						*'shellcmdflag'* *'shcf'*
-'shellcmdflag' 'shcf'	string	(default: "-c", MS-DOS and Win32, when 'shell'
-					does not contain "sh" somewhere: "/c")
+'shellcmdflag' 'shcf'	string	(default: "-c";
+				 MS-DOS and Win32, when 'shell' does not
+				 contain "sh" somewhere: "/c")
 			global
 			{not in Vi}
 	Flag passed to the shell to execute "!" and ":!" commands; e.g.,
 	"bash.exe -c ls" or "command.com /c dir".  For the MS-DOS-like
 	systems, the default is set according to the value of 'shell', to
 	reduce the need to set this option by the user.  It's not used for
-	OS/2 (EMX figures this out itself).  See |option-backslash| about
-	including spaces and backslashes.  See |dos-shell|.
+	OS/2 (EMX figures this out itself).
+	On Unix it can have more than one flag.  Each white space separated
+	part is passed as an argument to the shell command.
+	See |option-backslash| about including spaces and backslashes.
+	Also see |dos-shell| for MS-DOS and MS-Windows.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -5873,9 +6057,10 @@
 	For Unix the default it "| tee".  The stdout of the compiler is saved
 	in a file and echoed to the screen.  If the 'shell' option is "csh" or
 	"tcsh" after initializations, the default becomes "|& tee".  If the
-	'shell' option is "sh", "ksh", "zsh" or "bash" the default becomes
-	"2>&1| tee".  This means that stderr is also included.  Before using
-	the 'shell' option a path is removed, thus "/bin/sh" uses "sh".
+	'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh" or "bash" the
+	default becomes "2>&1| tee".  This means that stderr is also included.
+	Before using the 'shell' option a path is removed, thus "/bin/sh" uses
+	"sh".
 	The initialization of this option is done after reading the ".vimrc"
 	and the other initializations, so that when the 'shell' option is set
 	there, the 'shellpipe' option changes automatically, unless it was
@@ -5954,7 +6139,8 @@
 			{not in Vi}
 	When on, use temp files for shell commands.  When off use a pipe.
 	When using a pipe is not possible temp files are used anyway.
-	Currently a pipe is only supported on Unix.  You can check it with: >
+	Currently a pipe is only supported on Unix and MS-Windows 2K and
+	later.  You can check it with: >
 		:if has("filterpipe")
 <	The advantage of using a pipe is that nobody can read the temp file
 	and the 'shell' command does not need to support redirection.
@@ -5978,8 +6164,18 @@
 	0 and 2: use "shell 'shellcmdflag' cmd" to start external commands
 	1 and 3: use "shell cmd" to start external commands
 
+						*'shellxescape'* *'sxe'*
+'shellxescape' 'sxe'	string	(default: "";
+				 for MS-DOS and MS-Windows: "\"&|<>()@^")
+			global
+			{not in Vi}
+	When 'shellxquote' is set to "(" then the characters listed in this
+	option will be escaped with a '^' character.  This makes it possible
+	to execute most external commands with cmd.exe.
+
 						*'shellxquote'* *'sxq'*
 'shellxquote' 'sxq'	string	(default: "";
+					for Win32, when 'shell' is cmd.exe: "("
 					for Win32, when 'shell' contains "sh"
 					somewhere: "\""
 					for Unix, when using system(): "\"")
@@ -5989,11 +6185,15 @@
 	the "!" and ":!" commands.  Includes the redirection.  See
 	'shellquote' to exclude the redirection.  It's probably not useful
 	to set both options.
-	This is an empty string by default.  Known to be useful for
-	third-party shells when using the Win32 version, such as the MKS Korn
-	Shell or bash, where it should be "\"".  The default is adjusted
-	according the value of 'shell', to reduce the need to set this option
-	by the user.  See |dos-shell|.
+	When the value is '(' then ')' is appended. When the value is '"('
+	then ')"' is appended.
+	When the value is '(' then also see 'shellxescape'.
+	This is an empty string by default on most systems, but is known to be
+	useful for on Win32 version, either for cmd.exe which automatically
+	strips off the first and last quote on a command, or 3rd-party shells
+	such as the MKS Korn Shell or bash, where it should be "\"".  The
+	default is adjusted according the value of 'shell', to reduce the need
+	to set this option by the user.  See |dos-shell|.
 	This option cannot be set from a |modeline| or in the |sandbox|, for
 	security reasons.
 
@@ -6011,6 +6211,8 @@
 			local to buffer
 	Number of spaces to use for each step of (auto)indent.  Used for
 	|'cindent'|, |>>|, |<<|, etc.
+	When zero the 'ts' value will be used.  Use the |shiftwidth()|
+	function to get the effective shiftwidth value.
 
 						*'shortmess'* *'shm'*
 'shortmess' 'shm'	string	(Vim default "filnxtToO", Vi default: "",
@@ -6214,7 +6416,7 @@
 	Override the 'ignorecase' option if the search pattern contains upper
 	case characters.  Only used when the search pattern is typed and
 	'ignorecase' option is on.  Used for the commands "/", "?", "n", "N",
-	":g" and ":s".  Not used for "*", "#", "gd", tag search, etc..  After
+	":g" and ":s".  Not used for "*", "#", "gd", tag search, etc.  After
 	"*" and "#" you can make 'smartcase' used by doing a "/" command,
 	recalling the search pattern from history and hitting <Enter>.
 	NOTE: This option is reset when 'compatible' is set.
@@ -6228,8 +6430,9 @@
 	Do smart autoindenting when starting a new line.  Works for C-like
 	programs, but can also be used for other languages.  'cindent' does
 	something like this, works better in most cases, but is more strict,
-	see |C-indenting|.  When 'cindent' is on, setting 'si' has no effect.
-	'indentexpr' is a more advanced alternative.
+	see |C-indenting|.  When 'cindent' is on or 'indentexpr' is set,
+	setting 'si' has no effect.  'indentexpr' is a more advanced
+	alternative.
 	Normally 'autoindent' should also be on when using 'smartindent'.
 	An indent is automatically inserted:
 	- After a line ending in '{'.
@@ -6273,6 +6476,7 @@
 	of 8, while being able to edit like it is set to 'sts'.  However,
 	commands like "x" still work on the actual characters.
 	When 'sts' is zero, this feature is off.
+	When 'sts' is negative, the value of 'shiftwidth' is used.
 	'softtabstop' is set to 0 when the 'paste' option is set.
 	See also |ins-expandtab|.  When 'expandtab' is not set, the number of
 	spaces is minimized by using <Tab>s.
@@ -6467,7 +6671,7 @@
 	where it was the last time the buffer was edited.
 	NOTE: This option is set when 'compatible' is set.
 
-			   *'statusline'* *'stl'* *E540* *E541* *E542*
+			   *'statusline'* *'stl'* *E540* *E542*
 'statusline' 'stl'	string	(default empty)
 			global or local to window |global-local|
 			{not in Vi}
@@ -6480,12 +6684,15 @@
 	normal text.  Each status line item is of the form:
 	  %-0{minwid}.{maxwid}{item}
 	All fields except the {item} is optional.  A single percent sign can
-	be given as "%%".  Up to 80 items can be specified.
+	be given as "%%".  Up to 80 items can be specified.  *E541*
 
 	When the option starts with "%!" then it is used as an expression,
 	evaluated and the result is used as the option value.  Example: >
 		:set statusline=%!MyStatusLine()
 <	The result can contain %{} items that will be evaluated too.
+	Note that the "%!" expression is evaluated in the context of the
+	current window and buffer, while %{} items are evaluated in the
+	context of the window that the statusline belongs to.
 
 	When there is error while evaluating the option then it will be made
 	empty to avoid further errors.  Otherwise screen updating would loop.
@@ -6533,7 +6740,7 @@
 	k S   Value of "b:keymap_name" or 'keymap' when |:lmap| mappings are
 	      being used: "<keymap>"
 	n N   Buffer number.
-	b N   Value of byte under cursor.
+	b N   Value of character under cursor.
 	B N   As above, in hexadecimal.
 	o N   Byte number in file of byte under cursor, first byte is 1.
 	      Mnemonic: Offset from start of file (with one added)
@@ -6547,7 +6754,8 @@
 	V N   Virtual column number as -{num}.  Not displayed if equal to 'c'.
 	p N   Percentage through file in lines as in |CTRL-G|.
 	P S   Percentage through file of displayed window.  This is like the
-	      percentage described for 'ruler'.  Always 3 in length.
+	      percentage described for 'ruler'.  Always 3 in length, unless
+	      translated.
 	a S   Argument list status as in default title.  ({current} of {max})
 	      Empty if the argument file count is zero or one.
 	{ NF  Evaluate expression between '%{' and '}' and substitute result.
@@ -6591,8 +6799,8 @@
 	The variable "actual_curbuf" is set to the 'bufnr()' number of the
 	real current buffer.
 
-	The 'statusline' option may be evaluated in the |sandbox|, see
-	|sandbox-option|.
+	The 'statusline' option will be evaluated in the |sandbox| if set from
+	a modeline, see |sandbox-option|.
 
 	It is not allowed to change text or jump to another window while
 	evaluating 'statusline' |textlock|.
@@ -6705,8 +6913,8 @@
 	   usetab	Like "useopen", but also consider windows in other tab
 			pages.
 	   split	If included, split the current window before loading
-			a buffer.  Otherwise: do not split, use current window.
-			Supported in |quickfix| commands that display errors.
+			a buffer for a |quickfix| command that display errors.
+			Otherwise: do not split, use current window.
 	   newtab	Like "split", but open a new tab page.  Overrules
 			"split" when both are present.
 
@@ -6960,7 +7168,7 @@
 			{not in Vi}
 	Encoding used for the terminal.  This specifies what character
 	encoding the keyboard produces and the display will understand.  For
-	the GUI it only applies to the keyboard ('encoding' is used for the
+	the GUI it only applies to the keyboard ( 'encoding' is used for the
 	display).  Except for the Mac when 'macatsui' is off, then
 	'termencoding' should be "macroman".
 	In the Win32 console version the default value is the console codepage
@@ -7035,8 +7243,8 @@
 	the file should contain words with similar meaning, separated by
 	non-keyword characters (white space is preferred).  Maximum line
 	length is 510 bytes.
-	To obtain a file to be used here, check out the wordlist FAQ at
-	http://www.hyphenologist.co.uk .
+	To obtain a file to be used here, check out this ftp site:
+	ftp://ftp.ox.ac.uk/pub/wordlists/  First get the README file.
 	To include a comma in a file name precede it with a backslash.  Spaces
 	after a comma are ignored, otherwise spaces are included in the file
 	name.  See |option-backslash| about using backslashes.
@@ -7311,6 +7519,12 @@
 	   jsbterm	JSB term mouse handling.
 							*pterm-mouse*
 	   pterm	QNX pterm mouse handling.
+							*urxvt-mouse*
+	   urxvt	Mouse handling for the urxvt (rxvt-unicode) terminal.
+							*sgr-mouse*
+	   sgr		Mouse handling for the terminal that emits SGR-styled
+			mouse reporting. Works with xterm version 277 or
+			later.
 
 	The mouse handling must be enabled at compile time |+mouse_xterm|
 	|+mouse_dec| |+mouse_netterm|.
@@ -7323,6 +7537,7 @@
 	or "xterm2" already.  The main use of this option is to set it to
 	"xterm", when the terminal name doesn't start with "xterm", but it can
 	handle xterm mouse codes.
+	The "sgr" value will be set if the xterm version is 277 or later.
 	The "xterm2" value will be set if the xterm version is reported to be
 	95 or higher.  This only works when compiled with the |+termresponse|
 	feature and if |t_RV| is set to the escape sequence to request the
@@ -7362,7 +7577,7 @@
 	given, no further entry is used.
 	See |undo-persistence|.
 
-						*'undofile'* *'udf'*
+				*'undofile'* *'noundofile'* *'udf'* *'noudf'*
 'undofile' 'udf'	boolean	(default off)
 			local to buffer
 			{not in Vi}
@@ -7374,7 +7589,7 @@
 	For more information about this feature see |undo-persistence|.
 	The undo file is not read when 'undoreload' causes the buffer from
 	before a reload to be saved for undo.
-	WARNING: this is a very new feature.  Use at your own risk!
+	When 'undofile' is turned off the undo file is NOT deleted.
 
 						*'undolevels'* *'ul'*
 'undolevels' 'ul'	number	(default 100, 1000 for Unix, VMS,
@@ -7527,15 +7742,18 @@
 	parameter.  The following is a list of the identifying characters and
 	the effect of their value.
 	CHAR	VALUE	~
+							*viminfo-!*
 	!	When included, save and restore global variables that start
 		with an uppercase letter, and don't contain a lowercase
 		letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
-		and "_K_L_M" are not.  Only String and Number types are
-		stored.
+		and "_K_L_M" are not.  Nested List and Dict items may not be
+		read back correctly, you end up with an empty item.
+							*viminfo-quote*
 	"	Maximum number of lines saved for each register.  Old name of
 		the '<' item, with the disadvantage that you need to put a
 		backslash before the ", otherwise it will be recognized as the
 		start of a comment!
+							*viminfo-%*
 	%	When included, save and restore the buffer list.  If Vim is
 		started with a file name argument, the buffer list is not
 		restored.  If Vim is started without a file name argument, the
@@ -7545,38 +7763,48 @@
 		When followed by a number, the number specifies the maximum
 		number of buffers that are stored.  Without a number all
 		buffers are stored.
+							*viminfo-'*
 	'	Maximum number of previously edited files for which the marks
 		are remembered.  This parameter must always be included when
 		'viminfo' is non-empty.
 		Including this item also means that the |jumplist| and the
 		|changelist| are stored in the viminfo file.
+							*viminfo-/*
 	/	Maximum number of items in the search pattern history to be
 		saved.  If non-zero, then the previous search and substitute
 		patterns are also saved.  When not included, the value of
 		'history' is used.
+							*viminfo-:*
 	:	Maximum number of items in the command-line history to be
 		saved.  When not included, the value of 'history' is used.
+							*viminfo-<*
 	<	Maximum number of lines saved for each register.  If zero then
 		registers are not saved.  When not included, all lines are
 		saved.  '"' is the old name for this item.
 		Also see the 's' item below: limit specified in Kbyte.
+							*viminfo-@*
 	@	Maximum number of items in the input-line history to be
 		saved.  When not included, the value of 'history' is used.
+							*viminfo-c*
 	c	When included, convert the text in the viminfo file from the
 		'encoding' used when writing the file to the current
 		'encoding'.  See |viminfo-encoding|.
+							*viminfo-f*
 	f	Whether file marks need to be stored.  If zero, file marks ('0
 		to '9, 'A to 'Z) are not stored.  When not present or when
 		non-zero, they are all stored.  '0 is used for the current
 		cursor position (when exiting or when doing ":wviminfo").
+							*viminfo-h*
 	h	Disable the effect of 'hlsearch' when loading the viminfo
 		file.  When not included, it depends on whether ":nohlsearch"
 		has been used since the last search command.
+							*viminfo-n*
 	n	Name of the viminfo file.  The name must immediately follow
 		the 'n'.  Must be the last one!  If the "-i" argument was
 		given when starting Vim, that file name overrides the one
 		given here with 'viminfo'.  Environment variables are expanded
 		when opening the file, not when setting the option.
+							*viminfo-r*
 	r	Removable media.  The argument is a string (up to the next
 		',').  This parameter can be given several times.  Each
 		specifies the start of a path for which no marks will be
@@ -7585,6 +7813,7 @@
 		also use it for temp files, e.g., for Unix: "r/tmp".  Case is
 		ignored.  Maximum length of each 'r' argument is 50
 		characters.
+							*viminfo-s*
 	s	Maximum size of an item in Kbyte.  If zero then registers are
 		not saved.  Currently only applies to registers.  The default
 		"s10" will exclude registers with more than 10 Kbyte of text.
@@ -7736,9 +7965,9 @@
 			{not available when compiled without the |+wildignore|
 			feature}
 	A list of file patterns.  A file that matches with one of these
-	patterns is ignored when completing file or directory names, and
-	influences the result of |expand()|, |glob()| and |globpath()| unless
-	a flag is passed to disable this.
+	patterns is ignored when expanding |wildcards|, completing file or
+	directory names, and influences the result of |expand()|, |glob()| and
+	|globpath()| unless a flag is passed to disable this.
 	The pattern is used like with |:autocmd|, see |autocmd-patterns|.
 	Also see 'suffixes'.
 	Example: >
@@ -7747,6 +7976,17 @@
 	a pattern from the list.  This avoids problems when a future version
 	uses another default.
 
+
+			*'wildignorecase'* *'wic'* *'nowildignorecase'* *'nowic'*
+'wildignorecase' 'wic'	boolean	(default off)
+			global
+			{not in Vi}
+	When set case is ignored when completing file names and directories.
+	Has no effect when 'fileignorecase' is set.
+	Does not apply when the shell is used to expand wildcards, which
+	happens when there are special characters.
+
+
 				*'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'*
 'wildmenu' 'wmnu'	boolean	(default off)
 			global
@@ -7761,6 +8001,7 @@
 	CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
 	When 'wildmode' is used, "wildmenu" mode is used where "full" is
 	specified.  "longest" and "list" do not start "wildmenu" mode.
+	You can check the current mode with |wildmenumode()|.
 	If there are more matches than can fit in the line, a ">" is shown on
 	the right and/or a "<" is shown on the left.  The status line scrolls
 	as needed.
@@ -8029,8 +8270,13 @@
 			{not in Vi}
 	Make a backup before overwriting a file.  The backup is removed after
 	the file was successfully written, unless the 'backup' option is
-	also on.  Reset this option if your file system is almost full.  See
-	|backup-table| for another explanation.
+	also on.
+	WARNING: Switching this option off means that when Vim fails to write
+	your buffer correctly and then, for whatever reason, Vim exits, you
+	lose both the original file and what you were writing.  Only reset
+	this option if your file system is almost full and it makes the write
+	fail (and make sure not to exit Vim until the write was successful).
+	See |backup-table| for another explanation.
 	When the 'backupskip' pattern matches, a backup is not made anyway.
 	NOTE: This option is set to the default value when 'compatible' is
 	set.
diff -Naur vim73.orig/runtime/doc/os_risc.txt vim73/runtime/doc/os_risc.txt
--- vim73.orig/runtime/doc/os_risc.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/os_risc.txt	2013-08-04 19:09:07.930618585 +0000
@@ -1,322 +1,12 @@
-*os_risc.txt*   For Vim version 7.3.  Last change: 2010 Aug 07
+*os_risc.txt*   For Vim version 7.3.  Last change: 2011 May 10
 
 
 		  VIM REFERENCE MANUAL    by Thomas Leonard
 
 
 						*riscos* *RISCOS* *RISC-OS*
-This file contains the particularities for the RISC OS version of Vim.
+The RISC OS support has been removed from Vim with patch 7.3.187.
+If you would like to use Vim on RISC OS get the files from before that patch.
 
-The RISC OS port is a completely new port and is not based on the old "archi"
-port.
 
-1.  File locations		|riscos-locations|
-2.  Filename munging		|riscos-munging|
-3.  Command-line use		|riscos-commandline|
-4.  Desktop (GUI) use		|riscos-gui|
-5.  Remote use (telnet)		|riscos-remote|
-6.  Temporary files		|riscos-temp-files|
-7.  Interrupting		|riscos-interrupt|
-8.  Memory usage		|riscos-memory|
-9.  Filetypes			|riscos-filetypes|
-10. The shell			|riscos-shell|
-11. Porting new releases	|riscos-porting|
-
-If I've missed anything, email me and I'll try to fix it.  In fact, even if I
-haven't missed anything then email me anyway to give me some confidence that it
-actually works!
-
-Thomas Leonard <tal197@ecs.soton.ac.uk>
-
-	[these URLs no longer work...]
- Port homepage:	http://www.ecs.soton.ac.uk/~tal197/
-	or try:	http://www.soton.ac.uk/~tal197/
-
-==============================================================================
-							*riscos-locations*
-1. File locations
-
-The Vim executable and shared resource files are all stored inside the !Vim
-application directory.
-
-When !Vim is first seen by the filer, it aliases the *vi and *ex commands to
-run the command-line versions of Vim (see |riscos-commandline|).
-
-!Vim.Resources and !Vim.Resources2 contain the files from the standard Vim
-distribution, but modified slightly to work within the limits of ADFS, plus
-some extra files such as the window templates.
-
-User choices are read from "Choices:*" and are saved to "<Choices$Write>.*".
-If you have the new !Boot structure then these should be set up already.  If
-not, set Choices$Path to a list of directories to search when looking for
-user configuration files.  Set Choices$Write to the directory you want files
-to be saved into (so your search patterns and marks can be remembered between
-sessions).
-
-==============================================================================
-							*riscos-munging*
-2. Filename munging
-
-All pathname munging is disabled by default, so Vim should behave like a
-normal RISC OS application now.  So, if you want to edit "doc/html" then you
-actually type "*vi doc/html".
-
-The only times munging is done is when:
-
-- Searching included files from C programs, since these are always munged.
-  See |[I|.
-  Note: make sure you are in the right directory when you use this
-	command (i.e. the one with subdirectories "c" and "h").
-
-- Sourcing files using |:so|.
-  Paths starting "$VIM/" are munged like this:
-
-  $VIM/syntax/help.vim  ->  Vim:syntax.help
-
-  Also, files ending in ".vim" have their extensions removed, and slashes
-  replaced with dots.
-
-Some tag files and script files may have to be edited to work under this port.
-
-==============================================================================
-							*riscos-commandline*
-3. Command-line use
-
-To use Vim from the command-line use the "*vi" command (or "*ex" for
-|Ex-mode|).
-
-Type "*vi -h" for a list of options.
-
-Running the command-line version of Vim in a large high-color mode may cause
-the scrolling to be very slow.  Either change to a mode with fewer colors or
-use the GUI version.
-
-Also, holding down Ctrl will slow it down even more, and Ctrl-Shift will
-freeze it, as usual for text programs.
-
-==============================================================================
-							*riscos-gui*
-4. Desktop use
-
-Limitations:
-
-- Left scrollbars don't work properly (right and bottom are fine).
-- Doesn't increase scroll speed if it gets behind.
-
-You can resize the window by dragging the lower-right corner, even though
-there is no icon shown there.
-
-You can use the --rows and --columns arguments to specify the initial size of
-the Vim window, like this: >
-
-  *Vi -g --rows 20 --columns 80
-
-The global clipboard is supported, so you can select some text and then
-paste it directly into another application (provided it supports the
-clipboard too).
-
-Clicking Menu now opens a menu like a normal RISC OS program.  Hold down Shift
-when clicking Menu to paste (from the global clipboard).
-
-Dragging a file to the window replaces the CURRENT buffer (the one with the
-cursor, NOT the one you dragged to) with the file.
-
-Dragging with Ctrl held down causes a new Vim window to be opened for the
-file (see |:sp|).
-
-Dragging a file in with Shift held down in insert mode inserts the pathname of
-the file.
-
-:browse :w opens a standard RISC OS save box.
-:browse :e opens a directory viewer.
-
-For fonts, you have the choice of the system font, an outline font, the system
-font via ZapRedraw and any of the Zap fonts via ZapRedraw: >
-
-  :set guifont=
-<			To use the system font via the VDU drivers.  Supports
-			bold and underline.
->
-  :set guifont=Corpus.Medium
-<			Use the named outline font.  You can use any font, but
-			only monospaced ones like Corpus look right.
->
-  :set guifont=Corpus.Medium:w8:h12:b:i
-<			As before, but with size of 8 point by 12 point, and
-			in bold italic.
-			If only one of width and height is given then that
-			value is used for both.  If neither is given then 10
-			point is used.
-
-Thanks to John Kortink, Vim can use the ZapRedraw module.  Start the font name
-with "!" (or "!!" for double height), like this: >
-
-  :set guifont=!!
-<			Use the system font, but via ZapRedraw.  This gives a
-			faster redraw on StrongARM processors, but you can't
-			get bold or italic text.  Double height.
->
-  :set guifont=!script
-<			Uses the named Zap font (a directory in VimFont$Path).
-			The redraw is the same speed as for "!!", but you get
-			a nicer looking font.
-			Only the "man+" and "script" fonts are supplied
-			currently, but you can use any of the Zap fonts if
-			they are in VimFont$Path.
-			Vim will try to load font files "0", "B", "I" and "IB"
-			from the named directory.  Only "0" (normal style) MUST
-			be present.  Link files are not currently supported.
-
-Note that when using ZapRedraw the edit bar is drawn in front of the character
-you are on rather than behind it.  Also redraw is incorrect for screen modes
-with eigen values of 0.  If the font includes control characters then you can
-get Vim to display them by changing the 'isprint' option.
-
-If you find the scrolling is too slow on your machine, try experimenting
-with the 'scrolljump' and 'ttyscroll' options.
-
-In particular, StrongARM users may find that: >
-
-  :set ttyscroll=0
-
-makes scrolling faster in high-color modes.
-
-=============================================================================
-							*riscos-remote*
-5. Remote use (telnet)
-
-I have included a built-in termcap entry, but you can edit the termcap file to
-allow other codes to be used if you want to use Vim from a remote terminal.
-
-Although I do not have an internet connection to my Acorn, I have managed to
-run Vim in a FreeTerm window using the loopback connection.
-
-It seems to work pretty well now, using "*vi -T ansi".
-
-==============================================================================
-							*riscos-temp-files*
-6. Temporary files
-
-If Vim crashes then the swap and backup files (if any) will be in the
-directories set with the 'directory' and 'bdir' options.  By default the swap
-files are in <Wimp$ScrapDir> (i.e. inside !Scrap) and backups are in the
-directory you were saving to.  Vim will allow you to try and recover the file
-when you next try to edit it.
-
-To see a list of swap files, press <F12> and type "*vi -r".
-
-Vim no longer brings up ATTENTION warnings if you try to edit two files with
-the same name in different directories.
-
-However, it also no longer warns if you try to edit the same file twice (with
-two copies of Vim), though you will still be warned when you save that the
-datestamp has changed.
-
-==============================================================================
-							*riscos-interrupt*
-7. Interrupting
-
-To break out of a looping macro, or similar, hold down Escape in the
-command-line version, or press CTRL-C in the GUI version.
-
-==============================================================================
-							*riscos-memory*
-8. Memory usage
-
-Vim will use dynamic areas on RISC OS 3.5 or later.  If you can use them on
-older machines then edit the !RunTxt and GVim files.  I don't know what UnixLib
-does by default on these machines so I'm playing safe.
-
-It doesn't work at all well without dynamic areas, since it can't change its
-memory allocation once running.  Hence you should edit "!Vim.GVim" and
-"!Vim.!RunTxt" to choose the best size for you.  You probably need at least
-about 1400K.
-
-==============================================================================
-							*riscos-filetypes*
-9. Filetypes
-
-You can now specify that autocommands are only executed for files of certain
-types.  The filetype is given in the form &xxx, when xxx is the filetype.
-
-Filetypes must be specified by number (e.g. &fff for Text).
-
-The system has changed from version 5.3.  The new sequence of events is:
-
-- A file is loaded. |'osfiletype'| is set to the RISC OS filetype.
-- Based on the filetype and pathname, Vim will try to set |'filetype'| to the
-  Vim-type of the file.
-- Setting this option may load syntax files and perform other actions.
-- Saving the file will give it a filetype of |'osfiletype'|.
-
-Some examples may make this clearer:
-
-  Kind of file loaded	osfiletype	filetype ~
-  C code "c.hellow"	Text (&fff)	C
-  LaTeX document	LaTeX (&2a8)	TeX
-  Draw document		DrawFile (&aff)	(not changed)
-
-==============================================================================
-							*riscos-shell*
-10. The shell
-
-- Bangs (!s) are only replaced if they are followed by a space or end-of-line,
-  since many pathnames contain them.
-
-- You can prefix the command with "~", which stops any output from being
-  displayed.  This also means that you don't have to press <Enter> afterwards,
-  and stops the screen from being redrawn. {only in the GUI version}
-
-==============================================================================
-							*riscos-porting*
-11. Porting new releases to RISC OS
-
-Downloading everything you need:
-
-- Get the latest source distribution (see www.vim.org)
-- Get the runtime environment files (e.g. these help files)
-- Get the RISC OS binary distribution (if possible)
-
-
-Unarchiving:
-
-- Create a raFS disk and put the archives on it
-- Un-gzip them
-- Un-tar them   (*tar xELf 50 archive/tar)
-
-
-Recompiling the sources:
-
-- Create c, s, and h directories.
-- Put all the header files in "h".	     \
-- Put all the C files in "c".		     | And lose the extensions
-- Put the assembler file ("swis/s") in "s".  /
-- Rename all the files in "proto" to "h", like this:
-    raFS::VimSrc.source.proto.file/pro
-	  becomes
-    raFS::VimSrc.source.h.file_pro
-- In the files "h.proto" and "c.termlib", search and replace
-    .pro"
-       with
-    _pro.h"
-- Create a simple Makefile if desired and do "*make -k".
-  Use "CC = gcc -DRISCOS -DUSE_GUI -O2 -x c" in the Makefile.
-- Save the binary as !Vim.Vim in the binary distribution.
-
-
-Updating the run-time environment:
-
-- Replace old or missing files inside !Vim.Resources with the
-  new files.
-- Remove files in "doc" not ending in "/txt", except for "tags".
-- Lose the extensions from the files in "doc".
-- Edit the "doc.tags" file.  Remove extensions from the second column: >
-	:%s/^\(.[^\t]*\t.*\)\.txt\t/\1\t/
-- Remove extensions from the syntax files.  Split them into two directories
-  to avoid the 77 entry limit on old ADFS filesystems.
-- Edit "Vim:FileType" to match "*.c.*" as well as "*/c" and so on.
-  Add filetype checking too.
-- Edit "Vim:Menu" and remove all the keys from the menus: >
-	:%s/<Tab>[^ \t]*//
-<
  vim:tw=78:ts=8:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/os_vms.txt vim73/runtime/doc/os_vms.txt
--- vim73.orig/runtime/doc/os_vms.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/os_vms.txt	2013-08-04 19:09:07.933951909 +0000
@@ -1,4 +1,4 @@
-*os_vms.txt*    For Vim version 7.3.  Last change: 2010 Jul 28
+*os_vms.txt*    For Vim version 7.3.  Last change: 2011 Aug 14
 
 
 		  VIM REFERENCE MANUAL
@@ -38,9 +38,6 @@
 Or use one of the mirrors:
 	ftp://ftp.vim.org/pub/vim/MIRRORS
 
-You will need both the Unix and Extra archives to build vim.exe for VMS.
-For using Vim's full power you will need the runtime files as well.
-
 You can download precompiled executables from:
 	http://www.polarhome.com/vim/
 	ftp://ftp.polarhome.com/pub/vim/
@@ -75,7 +72,7 @@
 4. Problems						*vms-problems*
 
 The code has been tested under Open VMS 6.2 - 8.2 on Alpha, VAX and IA64
-platforms with the DEC C compiler.  It should work without bigger problems.
+platforms with the DEC C compiler.  It should work without big problems.
 If your system does not have some include libraries you can tune up in
 OS_VMS_CONF.H file.
 
@@ -88,11 +85,11 @@
 
 Note: Under VAX it should work with the DEC C compiler without problems.  The
 VAX C compiler is not fully ANSI C compatible in pre-processor directives
-semantics, therefore you have to use a converter program what will do the lion
+semantics, therefore you have to use a converter program that will do the lion
 part of the job.  For detailed instructions read file INSTALLvms.txt
 
-MMS_VIM.EXE is build together with VIM.EXE, but for XD.EXE you should
-change to subdirectory and build it separately.
+MMS_VIM.EXE is build together with VIM.EXE, but for XXD.EXE you should
+change to a subdirectory and build it separately.
 
 CTAGS is not part of the Vim source distribution anymore, however the OpenVMS
 specific source might contain CTAGS source files as described above.
@@ -184,9 +181,9 @@
 
 The easiest way is just rename example files.  You may leave the menu file
 (MENU.VIM) and files vimrc and gvimrc in the original $VIM directory.  It will
-be default setup for all users, and for users it is enough just to have their
-own additions or resetting in their home directory in files .vimrc and .gvimrc.
-It should work without problems.
+be the default setup for all users, and for users it is enough to just have
+their own additions or resetting in their home directory in files .vimrc and
+.gvimrc.  It should work without problems.
 
 Note: Remember, system rc files (default for all users) don't have a leading
 ".".  So, system rc files are: >
@@ -200,7 +197,7 @@
 	sys$login:.vimrc
 	sys$login:.gvimrc
 
-You can check that everything is on the right place with the :version command.
+You can check that everything is at the right place with the :version command.
 
 Example LOGIN.COM: >
 
@@ -209,15 +206,15 @@
 	$ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40
 	$ set disp/create/node=192.168.5.223/trans=tcpip
 
-Note: This set-up should be enough, if you are working on standalone server or
-clustered environment, but if you want to use Vim as internode editor in
+Note: This set-up should be enough, if you are working on a standalone server or
+clustered environment, but if you want to use Vim as an internode editor in
 DECNET environment, it will satisfy as well.
 You just have to define the "whole" path: >
 
 	$ define VIM "<server_name>[""user password""]::device:<path>"
 	$ vi*m :== "mcr VIM:VIM.EXE"
 
-As for example: >
+For example: >
 
 	$ define VIM "PLUTO::RF10:[UTIL.VIM]"
 	$ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! if passwd required
@@ -300,12 +297,12 @@
 
 4) If you are working on MS-Windows or some other non X/Window environment
    you need to set up one X server and run Vim as in point 2.
-   For MS-Windows there are available free X servers as MIX , Omni X etc.,
+   For MS-Windows there are available free X servers as MIX, Omni X etc.,
    as well as excellent commercial products as eXcursion or ReflectionX with
    built-in DEC support.
 
 Please note, that executables without GUI are slightly faster during startup
-then with enabled GUI in character mode. Therefore, if you do not use GUI
+than with enabled GUI in character mode. Therefore, if you do not use GUI
 features, it is worth to choose non GUI executables.
 
 ==============================================================================
@@ -326,8 +323,8 @@
 8.12 diff-mode
 8.13 Allow '$' in C keywords
 8.14 VIMTUTOR for beginners
-8.15 Slow start in console mode issue 
-8.16 Common VIM directory - different architectures 
+8.15 Slow start in console mode issue
+8.16 Common VIM directory - different architectures
 
 8.1 Backspace/delete
 
@@ -360,7 +357,7 @@
 	:set nowritebackup   " does not have any purpose on VMS.  It's the
 			     " default.
 
-Recovery is working perfect as well from the default swap file.
+Recovery is working perfectly as well from the default swap file.
 Read more with :help swapfile
 
 (Claude Marinier <ClaudeMarinier@xwavesolutions.com> Vim 5.5, Zoltan Arpadffy
@@ -386,7 +383,7 @@
 rf10:<user.zay.work>test.c;1
 
 (David Elins <delins@foliage.com>, Jerome Lauret
-<JLAURET@mail.chem.sunysb.edu> Vim 5.6 )
+<JLAURET@mail.chem.sunysb.edu> Vim 5.6)
 
 
 8.5 Remote host invocation
@@ -445,14 +442,14 @@
     builtin_dumb
 defaulting to 'vt320'
 ---
-The solution is to define default terminal name: >
+The solution is to define the default terminal name: >
 
 	$ ! unknown terminal name.  Let us use vt320 or ansi instead.
 	$ ! Note: it's case sensitive
 	$ define term "vt320"
 
-Terminals from VT100 to VT320 (as V300, VT220, VT200 ) do not need any extra
-keyboard mappings.  They should work perfect as they are, including arrows,
+Terminals from VT100 to VT320 (as V300, VT220, VT200) do not need any extra
+keyboard mappings.  They should work perfectly as they are, including arrows,
 Ins, Del buttons etc., except Backspace in GUI mode.  To solve it, add to
 .gvimrc: >
 
@@ -465,8 +462,8 @@
 
 	set ttyfast	" set fast terminal
 
-Note: if you're using Vim on remote host or through very slow connection, it's
-recommended to avoid fast terminal option with: >
+Note: if you're using Vim on remote host or through a very slow connection, it's
+recommended to avoid the fast terminal option with: >
 
 	set nottyfast   " set terminal to slow mode
 
@@ -483,8 +480,8 @@
 
 OpenVMS users always have to be aware that the Vim command :! "just" drop them
 to DCL prompt.  This feature is possible to use without any problem with all
-DCL commands, but if we want to execute some program as XXD, CTAGS, JTAGS etc.
-we're running into trouble if we follow the Vim documentation (see: help
+DCL commands, but if we want to execute some programs such as XXD, CTAGS, JTAGS,
+etc.  we're running into trouble if we follow the Vim documentation (see: help
 xxd).
 
 Solution: Execute with the MC command and add the full path to the executable.
@@ -534,7 +531,7 @@
 
 	$define SYS$PRINT HP5ANSI
 
-You can print out whole buffer or just the marked area.
+You can print out the whole buffer or just the marked area.
 More info under :help hardcopy
 
 (Zoltan Arpadffy, Vim 6.0c)
@@ -561,16 +558,16 @@
 From 6.0 diff functionality has been implemented, but OpenVMS does not use
 GNU/Unix like diff therefore built in diff does not work.
 There is a simple solution to solve this anomaly.  Install a Unix like diff
-and Vim will work perfect in diff mode too.  You just have to redefine your
+and Vim will work perfectly in diff mode too.  You just have to redefine your
 diff program as: >
 
 	define /nolog diff <GNU_PATH>diff.exe
 
 Another, more sophisticated solution is described below (8.12 diff-mode)
-There are some other programs as patch, make etc that may cause same problems.
-At www.polarhome.com is possible to download an GNU package for Alpha and VAX
-boxes that is meant to solve GNU problems on OpenVMS.
-( Zoltan Arpadffy, Vim 6.1)
+There are other programs such as patch, make etc that may cause the same
+problems.  At www.polarhome.com is possible to download an GNU package for
+Alpha and VAX boxes that is meant to solve GNU problems on OpenVMS.
+(Zoltan Arpadffy, Vim 6.1)
 
 
 8.12 diff-mode
@@ -632,7 +629,7 @@
     3. VIM  diff:  $ VIMDIFF  <FILE1> <FILE2>
     4. GVIM diff:  $ GVIMDIFF <FILE1> <FILE2>
 
-( Coen Engelbarts, Vim 6.1)
+(Coen Engelbarts, Vim 6.1)
 
 
 8.13 Allow '$' in C keywords
@@ -653,46 +650,47 @@
 tag-lookup, work on the whole identifier.  (Ctags on VMS also supports '$' in
 C keywords since ctags version 5.1.)
 
-( Coen Engelbarts, Vim 6.1)
+(Coen Engelbarts, Vim 6.1)
 
 8.14 VIMTUTOR for beginners
 
-It exits VIMTUTOR.COM DCL script that can help Vim beginners to learn/make
-first steps with Vim on OpenVMS.  Depending of binary distribution you may
-start it with: >
+The VIMTUTOR.COM DCL script can help Vim beginners to learn/make their first
+steps with Vim on OpenVMS.  Depending of binary distribution you may start it
+with: >
 
 	@vim:vimtutor
 
 (Thomas.R.Wyant III, Vim 6.1)
 
-8.14 Slow start in console mode issue
+8.16 Slow start in console mode issue
 
 As GUI/GTK Vim works equally well in console mode, many administrators
 deploy those executables system wide.
 Unfortunately, on a remote slow connections GUI/GTK executables behave rather
-slow when user wants to run Vim just in the console mode - because of X environment detection timeout.
+slow when user wants to run Vim just in the console mode - because of X
+environment detection timeout.
 
 Luckily, there is a simple solution for that. Administrators need to deploy
 both GUI/GTK build and just console build executables, like below: >
 
-    |- vim72
+    |- vim73
     |----- doc
-    |----- syntax        
+    |----- syntax
        vimrc    (system rc files)
        gvimrc
-       gvim.exe (the renamed GUI or GTK built vim.exe)      
-       vim.exe  (the console only executable) 
+       gvim.exe (the renamed GUI or GTK built vim.exe)
+       vim.exe  (the console only executable)
 
 Define system symbols like below in for ex in LOGIN.COM or SYLOGIN.COM: >
 
-	$ define/nolog VIM RF10:[UTIL.VIM72] ! where you VIM directory is
+	$ define/nolog VIM RF10:[UTIL.VIM73] ! where you VIM directory is
 	$ vi*m  :== mcr VIM:VIM.EXE
 	$ gvi*m :== mcr VIM:GVIM.EXE
 	$ ! or you can try to spawn with
 	$ gv*im :== spawn/nowait/input=NLA0 mcr VIM:GVIM.EXE -g -GEOMETRY 80x40
 
 
-Like this, users that do not have X environment and want to use Vim just in 
+Like this, users that do not have X environment and want to use Vim just in
 console mode can avoid performance problems.
 
 (Zoltan Arpadffy, Vim 7.2)
@@ -714,8 +712,8 @@
 +---------------------------------+
 
 It is convenient to have a common VIM directory but execute different
-executables. 
-There are more solutions for this problem:
+executables.
+There are several solutions for this problem:
 
 Solution 1.  All executables in the same directory with different names
 This is easily done with the following script that can be added
@@ -755,7 +753,7 @@
 	$      define/nolog VIM RF10:[UTIL.IA64_EXE] ! IA64 executables
 	$ endif
         $! VIMRUNTIME must be defined in order to find runtime files
-	$ define/nolog VIMRUNTIME RF10:[UTIL.VIM72]
+	$ define/nolog VIMRUNTIME RF10:[UTIL.VIM73]
 
 A good example for this approach is the [GNU]gnu_tools.com script from
 GNU_TOOLS.ZIP package downloadable from http://www.polarhome.com/vim/
@@ -769,7 +767,7 @@
 Version 7.3
 - CTAGS 5.8 included
 - VMS compile warnings fixed - floating-point overflow warning corrected on VAX
-- filepath completition corrected - too many chars were escaped in filename
+- filepath completion corrected - too many chars were escaped in filename
   and shell commands
 - the following plugins are included into VMS runtime:
 	genutils 2.4, multiselect 2.2, multvals 3.1, selectbuf 4.3,
@@ -784,10 +782,10 @@
 Version 7.2 (2008 Aug 9)
 - VCF files write corrected
 - CTAGS 5.7 included
-- corrected make_vms.mms (on VAX gave syntax error) 
+- corrected make_vms.mms (on VAX gave syntax error)
 
 Version 7.1 (2007 Jun 15)
-- create TAGS file from menu 
+- create TAGS file from menu
 
 Version 7 (2006 May 8)
 - Improved low level char input (affects just console mode)
diff -Naur vim73.orig/runtime/doc/os_win32.txt vim73/runtime/doc/os_win32.txt
--- vim73.orig/runtime/doc/os_win32.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/os_win32.txt	2013-08-04 19:09:07.933951909 +0000
@@ -1,4 +1,4 @@
-*os_win32.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
+*os_win32.txt*  For Vim version 7.3.  Last change: 2012 May 18
 
 
 		  VIM REFERENCE MANUAL    by George Reilly
@@ -313,6 +313,37 @@
    with :!start do not get passed Vim's open file handles, which means they do
    not have to be closed before Vim.
    To avoid this special treatment, use ":! start".
+   There are two optional arguments (see the next Q):
+       /min  the window will be minimized
+       /b    no console window will be opened
+   You can use only one of these flags at a time.  A second one will be
+   treated as the start of the command.
+
+Q. How do I avoid getting a window for programs that I run asynchronously?
+A. You have two possible solutions depending on what you want:
+   1) You may use the /min flag in order to run program in a minimized state
+      with no other changes. It will work equally for console and GUI
+      applications.
+   2) You can use the /b flag to run console applications without creating a
+      console window for them (GUI applications are not affected). But you
+      should use this flag only if the application you run doesn't require any
+      input.  Otherwise it will get an EOF error because its input stream
+      (stdin) would be redirected to \\.\NUL (stdout and stderr too).
+
+   Example for a console application, run Exuberant ctags: >
+        :!start /min ctags -R .
+<  When it has finished you should see file named "tags" in your current
+   directory.  You should notice the window title blinking on your taskbar.
+   This is more noticable for commands that take longer.
+   Now delete the "tags" file and run this command: >
+        :!start /b ctags -R .
+<  You should have the same "tags" file, but this time there will be no
+   blinking on the taskbar.
+   Example for a GUI application: >
+        :!start /min notepad
+        :!start /b notepad
+<  The first command runs notepad minimized and the second one runs it
+   normally.
 
 Q. I'm using Win32s, and when I try to run an external command like "make",
    Vim doesn't wait for it to finish!  Help!
diff -Naur vim73.orig/runtime/doc/pattern.txt vim73/runtime/doc/pattern.txt
--- vim73.orig/runtime/doc/pattern.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/pattern.txt	2013-08-04 19:09:07.937285232 +0000
@@ -1,4 +1,4 @@
-*pattern.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*pattern.txt*   For Vim version 7.3.  Last change: 2013 Jun 02
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -21,7 +21,7 @@
 10. Highlighting matches	|match-highlight|
 
 ==============================================================================
-1. Search commands				*search-commands* *E486*
+1. Search commands				*search-commands*
 
 							*/*
 /{pattern}[/]<CR>	Search forward for the [count]'th occurrence of
@@ -150,6 +150,11 @@
 All matches for the last used search pattern will be highlighted if you set
 the 'hlsearch' option.  This can be suspended with the |:nohlsearch| command.
 
+When no match is found you get the error: *E486* Pattern not found
+Note that for the |:global| command this behaves like a normal message, for Vi
+compatibility.  For the |:s| command the "e" flag can be used to avoid the
+error message |:s_flags|.
+
 					*search-offset* *{offset}*
 These commands search for the specified pattern.  With "/" and "?" an
 additional offset may be given.  There are two types of offsets: line offsets
@@ -214,7 +219,8 @@
 the search, possibly in another direction or with another count.  Note that
 two patterns are remembered: One for 'normal' search commands and one for the
 substitute command ":s".  Each time an empty pattern is given, the previously
-used pattern is used.
+used pattern is used.  However, if there is no previous search command, a
+previous substitute pattern is used, if possible.
 
 The 'magic' option sticks with the last used pattern.  If you change 'magic',
 this will not change how the last used pattern will be interpreted.
@@ -344,6 +350,27 @@
 		or  \z( pattern \)		|/\z(|
 
 
+				*/\%#=* *two-engines*
+Vim includes two regexp engines:
+1. An old, backtracking engine that supports everything.
+2. A new, NFA engine that works much faster on some patterns, but does not
+   support everything.
+
+Vim will automatically select the right engine for you.  However, if you run
+into a problem or want to specifically select one engine or the other, you can
+prepend one of the following to the pattern:
+
+	\%#=0	Force automatic selection.  Only has an effect when
+	        'regexpengine' has been set to a non-zero value.
+	\%#=1	Force using the old engine.
+	\%#=2	Force using the NFA engine.
+
+You can also use the 'regexpengine' option to change the default.
+
+			 *E864* *E868* *E874* *E875* *E876* *E877* *E878*
+If selecting the NFA engine and it runs into something that is not implemented
+the pattern will not match.  This is only useful when debugging Vim.
+
 ==============================================================================
 3. Magic							*/magic*
 
@@ -390,9 +417,10 @@
 
 ==============================================================================
 4. Overview of pattern items				*pattern-overview*
+						*E865* *E866* *E867* *E869*
 
 Overview of multi items.				*/multi* *E61* *E62*
-More explanation and examples below, follow the links.			*E64*
+More explanation and examples below, follow the links.		*E64* *E871*
 
 	  multi ~
      'magic' 'nomagic'	matches of the preceding atom ~
@@ -498,16 +526,18 @@
 	x	x	a character with no special meaning matches itself
 
 |/[]|	[]	\[]	any character specified inside the []
-|/\%[]| \%[]	\%[]	a sequence of optionally matched atoms
+|/\%[]|	\%[]	\%[]	a sequence of optionally matched atoms
 
 |/\c|	\c	\c	ignore case, do not use the 'ignorecase' option
 |/\C|	\C	\C	match case, do not use the 'ignorecase' option
+|/\Z|	\Z	\Z	ignore differences in Unicode "combining characters".
+			Useful when searching voweled Hebrew or Arabic text.
+
 |/\m|	\m	\m	'magic' on for the following chars in the pattern
 |/\M|	\M	\M	'magic' off for the following chars in the pattern
 |/\v|	\v	\v	the following chars in the pattern are "very magic"
 |/\V|	\V	\V	the following chars in the pattern are "very nomagic"
-|/\Z|	\Z	\Z	ignore differences in Unicode "combining characters".
-			Useful when searching voweled Hebrew or Arabic text.
+|/\%#=|   \%#=1   \%#=1   select regexp engine |/zero-width|
 
 |/\%d|	\%d	\%d	match specified decimal character (eg \%d123)
 |/\%x|	\%x	\%x	match specified hex character (eg \%x2a)
@@ -575,7 +605,7 @@
 \?	Just like \=.  Cannot be used when searching backwards with the "?"
 	command. {not in Vi}
 
-						*/\{* *E58* *E60* *E554*
+					*/\{* *E58* *E60* *E554* *E870*
 \{n,m}	Matches n to m of the preceding atom, as many as possible
 \{n}	Matches n of the preceding atom
 \{n,}	Matches at least n of the preceding atom, as many as possible
@@ -631,17 +661,18 @@
 							*/\@!*
 \@!	Matches with zero width if the preceding atom does NOT match at the
 	current position. |/zero-width| {not in Vi}
-	Like '(?!pattern)" in Perl.
+	Like "(?!pattern)" in Perl.
 	Example			matches ~
 	foo\(bar\)\@!		any "foo" not followed by "bar"
-	a.\{-}p\@!		"a", "ap", "app", etc. not followed by a "p"
+	a.\{-}p\@!		"a", "ap", "app", "appp", etc. not immediately
+				followed by a "p"
 	if \(\(then\)\@!.\)*$	"if " not followed by "then"
 
 	Using "\@!" is tricky, because there are many places where a pattern
 	does not match.  "a.*p\@!" will match from an "a" to the end of the
 	line, because ".*" can match all characters in the line and the "p"
 	doesn't match at the end of the line.  "a.\{-}p\@!" will match any
-	"a", "ap", "aap", etc. that isn't followed by a "p", because the "."
+	"a", "ap", "app", etc. that isn't followed by a "p", because the "."
 	can match a "p" and "p\@!" doesn't match after that.
 
 	You can't use "\@!" to look for a non-match before the matching
@@ -650,16 +681,24 @@
 	"foobar" you could use "\(foo\)\@!...bar", but that doesn't match a
 	bar at the start of a line.  Use "\(foo\)\@<!bar".
 
+	Useful example: to find "foo" in a line that does not contain "bar": >
+		/^\%(.*bar\)\@!.*\zsfoo
+<	This pattern first checks that there is not a single position in the
+	line where "bar" matches.  If ".*bar" matches somewhere the \@! will
+	reject the pattern.  When there is no match any "foo" will be found.
+	The "\zs" is to have the match start just before "foo".
+
 							*/\@<=*
 \@<=	Matches with zero width if the preceding atom matches just before what
 	follows. |/zero-width| {not in Vi}
-	Like '(?<=pattern)" in Perl, but Vim allows non-fixed-width patterns.
+	Like "(?<=pattern)" in Perl, but Vim allows non-fixed-width patterns.
 	Example			matches ~
 	\(an\_s\+\)\@<=file	"file" after "an" and white space or an
 				end-of-line
 	For speed it's often much better to avoid this multi.  Try using "\zs"
 	instead |/\zs|.  To match the same as the above example:
 		an\_s\+\zsfile
+	At least set a limit for the look-behind, see below.
 
 	"\@<=" and "\@<!" check for matches just before what follows.
 	Theoretically these matches could start anywhere before this position.
@@ -672,20 +711,37 @@
 	Example			matches ~
 	\1\@<=,\([a-z]\+\)	",abc" in "abc,abc"
 
+\@123<=
+	Like "\@<=" but only look back 123 bytes. This avoids trying lots
+	of matches that are known to fail and make executing the pattern very
+	slow.  Example, check if there is a "<" just before "span":
+		/<\@1<=span
+	This will try matching "<" only one byte before "span", which is the
+	only place that works anyway.
+	After crossing a line boundary, the limit is relative to the end of
+	the line.  Thus the characters at the start of the line with the match
+	are not counted (this is just to keep it simple).
+	The number zero is the same as no limit.
+
 							*/\@<!*
 \@<!	Matches with zero width if the preceding atom does NOT match just
 	before what follows.  Thus this matches if there is no position in the
 	current or previous line where the atom matches such that it ends just
 	before what follows.  |/zero-width| {not in Vi}
-	Like '(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
+	Like "(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
 	The match with the preceding atom is made to end just before the match
 	with what follows, thus an atom that ends in ".*" will work.
 	Warning: This can be slow (because many positions need to be checked
-	for a match).
+	for a match).  Use a limit if you can, see below.
 	Example			matches ~
 	\(foo\)\@<!bar		any "bar" that's not in "foobar"
 	\(\/\/.*\)\@<!in	"in" which is not after "//"
 
+\@123<!
+	Like "\@<!" but only look back 123 bytes. This avoids trying lots of
+	matches that are known to fail and make executing the pattern very
+	slow.
+
 							*/\@>*
 \@>	Matches the preceding atom like matching a whole pattern. {not in Vi}
 	Like "(?>pattern)" in Perl.
@@ -923,7 +979,7 @@
 \l	lowercase character:		[a-z]		*/\l*
 \L	non-lowercase character:	[^a-z]		*/\L*
 \u	uppercase character:		[A-Z]		*/\u*
-\U	non-uppercase character		[^A-Z]		*/\U*
+\U	non-uppercase character:	[^A-Z]		*/\U*
 
 	NOTE: Using the atom is faster than the [] form.
 
@@ -948,7 +1004,8 @@
 ~	matches the last given substitute string	*/~* */\~*
 
 \(\)	A pattern enclosed by escaped parentheses.	*/\(* */\(\)* */\)*
-	E.g., "\(^a\)" matches 'a' at the start of a line.  *E51* *E54* *E55*
+	E.g., "\(^a\)" matches 'a' at the start of a line.
+	*E51* *E54* *E55* *E872* *E873*
 
 \1      Matches the same string that was matched by	*/\1* *E65*
 	the first sub-expression in \( and \). {not in Vi}
@@ -979,6 +1036,8 @@
 	[xyz]		any 'x', 'y' or 'z'
 	[a-zA-Z]$	any alphabetic character at the end of a line
 	\c[a-z]$	same
+	[А-яЁё]		Russian alphabet (with utf-8 and cp1251)
+
 								*/[\n]*
 	With "\_" prepended the collection also includes the end-of-line.
 	The same can be done by including "\n" in the collection.  The
@@ -1027,11 +1086,9 @@
 	  These items only work for 8-bit characters.
 							*/[[=* *[==]*
 	- An equivalence class.  This means that characters are matched that
-	  have almost the same meaning, e.g., when ignoring accents.  The form
-	  is:
+	  have almost the same meaning, e.g., when ignoring accents.  This
+	  only works for Unicode, latin1 and latin9.  The form is:
 		[=a=]
-	  Currently this is only implemented for latin1.  Also works for the
-	  latin1 characters in utf-8 and latin9.
 							*/[[.* *[..]*
 	- A collation element.  This currently simply accepts a single
 	  character in the form:
@@ -1047,6 +1104,8 @@
 	  any character that's not in "^]-\bdertnoUux".  "[\xyz]" matches '\',
 	  'x', 'y' and 'z'.  It's better to use "\\" though, future expansions
 	  may use other characters after '\'.
+	- Omitting the trailing ] is not considered an error. "[]" works like
+	  "[]]", it matches the ']' character.
 	- The following translations are accepted when the 'l' flag is not
 	  included in 'cpoptions' {not in Vi}:
 		\e	<Esc>
@@ -1152,6 +1211,8 @@
 Thus only the base characters need to match, the composing characters may be
 different and the number of composing characters may differ.  Only relevant
 when 'encoding' is "utf-8".
+Exception: If the pattern starts with one or more composing characters, these
+must match.
 
 When a composing character appears at the start of the pattern of after an
 item that doesn't include the composing character, a match is found at any
@@ -1161,8 +1222,20 @@
 composing character by itself, except that it doesn't matter what comes before
 this.
 
-The order of composing characters matters, even though changing the order
-doesn't change what a character looks like.  This may change in the future.
+The order of composing characters does not matter.  Also, the text may have
+more composing characters than the pattern, it still matches.  But all
+composing characters in the pattern must be found in the text.
+
+Suppose B is a base character and x and y are composing characters:
+	pattern		text		match ~
+	Bxy		Bxy		yes (perfect match)
+	Bxy		Byx		yes (order ignored)
+	Bxy		By		no (x missing)
+	Bxy		Bx		no (y missing)
+	Bx		Bx		yes (perfect match)
+	Bx		By		no (x missing)
+	Bx		Bxy		yes (extra y ignored)
+	Bx		Byx		yes (extra y ignored)
 
 ==============================================================================
 9. Compare with Perl patterns				*perl-patterns*
diff -Naur vim73.orig/runtime/doc/pi_getscript.txt vim73/runtime/doc/pi_getscript.txt
--- vim73.orig/runtime/doc/pi_getscript.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/pi_getscript.txt	2013-08-04 19:09:07.940618555 +0000
@@ -1,15 +1,21 @@
-*pi_getscript.txt*  For Vim version 7.3.  Last change: 2009 Oct 14
+*pi_getscript.txt*  For Vim version 7.0.  Last change: 2012 Apr 07
 >
-		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell, Jr.
+		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell
 <
-Authors:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamilyA.Mbiz>
+Authors:  Charles E. Campbell  <NdrOchip@ScampbellPfamilyA.Mbiz>
 	  (remove NOSPAM from the email address)
 						*GetLatestVimScripts-copyright*
-Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.	*glvs-copyright*
-           The VIM LICENSE applies to getscript.vim and
-           pi_getscript.txt (see |copyright|) except use
-           "getscript" instead of "Vim".  No warranty, express or implied.
-	   Use At-Your-Own-Risk.
+Copyright: (c) 2004-2012 by Charles E. Campbell	*glvs-copyright*
+	The VIM LICENSE (see |copyright|) applies to the files in this
+	package, including getscriptPlugin.vim, getscript.vim,
+	GetLatestVimScripts.dist, and pi_getscript.txt, except use "getscript"
+	instead of "VIM".  Like anything else that's free, getscript and its
+	associated files are provided *as is* and comes with no warranty of
+	any kind, either expressed or implied.  No guarantees of
+	merchantability.  No guarantees of suitability for any purpose.  By
+	using this plugin, you agree that in no event will the copyright
+	holder be liable for any damages resulting from the use of this
+	software. Use at your own risk!
 
 Getscript is a plugin that simplifies retrieval of the latest versions of the
 scripts that you yourself use!  Typing |:GLVS| will invoke getscript; it will
@@ -77,7 +83,9 @@
 3. GetLatestVimScripts Usage				*glvs-usage* *:GLVS*
 
 Unless it has been defined elsewhere, >
+
 	:GLVS
+
 will invoke GetLatestVimScripts().  If some other plugin has defined that
 command, then you may type
 >
@@ -127,7 +135,8 @@
 	http://vim.sourceforge.net/scripts/script.php?script_id=40
 
 The "40" happens to be a ScriptID that GetLatestVimScripts needs to
-download the associated page.
+download the associated page, and is assigned by vim.sf.net itself
+during initial uploading of the plugin.
 
 The second number on each line gives the script's SourceID.  The SourceID
 records the count of uploaded scripts as determined by vim.sf.net; hence it
@@ -151,19 +160,39 @@
 script is automatically installable.  Getscript will also use this line to
 help build the GetLatestVimScripts.dat file, by including a line such as: >
 
-	884 1 AutoAlign.vim
+	884 1 :AutoInstall: AutoAlign.vim
 <
-in it an AutoAlign.vim line isn't already in GetLatestVimScripts.dat file.
+assuming that such a line isn't already in GetLatestVimScripts.dat file.
 See |glvs-plugins| for more.  Thus, GetLatestVimScripts thus provides a
 comprehensive ability to keep your plugins up-to-date!
 
+In summary:
+
+  * Optionally tell getscript that it is allowed to build/append a
+    GetLatestVimScripts.dat file based upon already installed plugins: >
+	let g:GetLatestVimScripts_allowautoinstall=1
+<
+  * A line such as >
+	" GetLatestVimScripts: 884  1 :AutoInstall: AutoAlign.vim
+<   in an already-downloaded plugin constitutes the concurrence of the
+    plugin author that getscript may do AutoInstall.  Not all plugins
+    may be AutoInstall-able, and the plugin's author is best situated
+    to know whether or not his/her plugin will AutoInstall properly.
+
+  * A line such as >
+	884 1 :AutoInstall: AutoAlign.vim
+<   in your GetLatestVimScripts.dat file constitutes your permission
+    to getscript to do AutoInstall.  AutoInstall requires both your
+    and the plugin author's permission.  See |GetLatestVimScripts_dat|.
+
+
 						*GetLatestVimScripts_dat*
 As an example of a <GetLatestVimScripts.dat> file:
 >
     ScriptID SourceID Filename
     --------------------------
-    294 1 Align.vim
-    120 2 decho.vim
+    294 1 :AutoInstall: Align.vim
+    120 2 Decho.vim
      40 3 DrawIt.tar.gz
     451 4 EasyAccents.vim
     195 5 engspchk.vim
@@ -201,8 +230,8 @@
 	                        ^
 	                    scriptid
 <
-NOTE: :AutoInstall: is a plugin-author option, not a GetLatestVimScripts.dat~
-      entry!~
+NOTE: The :AutoInstall: feature requires both the plugin author's and~
+      the user's permission to operate!~
 
 GetLatestVimScripts commands for those scripts are then appended, if not
 already present, to the user's GetLatest/GetLatestVimScripts.dat file.  It is
@@ -210,7 +239,7 @@
 plugins depend upon.
 
 Now, as an author, you probably don't want GetLatestVimScripts to download
-your own scripts for you yourself, thereby overwriting your not-yet-released
+your own scripts atop your own copy, thereby overwriting your not-yet-released
 hard work.  GetLatestVimScripts provides a solution for this:  put
 >
 	0 0 yourscriptname
@@ -314,6 +343,11 @@
 	default= $HOME/vimfiles (windows)
 		Override where :AutoInstall: scripts will be installed.
 		Doesn't override vimball installation.
+>
+	g:GetLatestVimScripts_scriptaddr
+<       default='http://vim.sourceforge.net/script.php?script_id='
+		Override this if your system needs
+	  ...  ='http://vim.sourceforge.net/script/script.php?script_id='
 
 ==============================================================================
 8. GetLatestVimScripts Algorithm		*glvs-algorithm* *glvs-alg*
@@ -351,6 +385,15 @@
 ==============================================================================
 9. GetLatestVimScripts History		*getscript-history* *glvs-hist* {{{1
 
+v35 Apr 07, 2012 : * (MengHuan Yu) pointed out that the script url has
+		     changed (somewhat).  However, it doesn't work, and
+		     the original one does (under Linux). I'll make it
+		     yet-another-option.
+v34 Jun 23, 2011 : * handles additional decompression options for tarballs
+                     (tgz taz tbz txz)
+v33 May 31, 2011 : * using fnameescape() instead of escape()
+		   * *.xz support
+v32 Jun 19, 2010 : * (Jan Steffens) added support for xz compression
 v31 Jun 29, 2008 : * (Bill McCarthy) fixed having hls enabled with getscript
 		   * (David Schaefer) the acd option interferes with vimballs
 		     Solution: bypass the acd option
diff -Naur vim73.orig/runtime/doc/pi_gzip.txt vim73/runtime/doc/pi_gzip.txt
--- vim73.orig/runtime/doc/pi_gzip.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/pi_gzip.txt	2013-08-04 19:09:07.940618555 +0000
@@ -1,4 +1,4 @@
-*pi_gzip.txt*   For Vim version 7.3.  Last change: 2002 Oct 29
+*pi_gzip.txt*   For Vim version 7.3.  Last change: 2012 Jul 19
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -25,6 +25,8 @@
 	*.Z		compress (Lempel-Ziv)
 	*.gz		gzip
 	*.bz2		bzip2
+	*.lzma		lzma
+	*.xz		xz
 
 That's actually the only thing you need to know.  There are no options.
 
diff -Naur vim73.orig/runtime/doc/pi_netrw.txt vim73/runtime/doc/pi_netrw.txt
--- vim73.orig/runtime/doc/pi_netrw.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/pi_netrw.txt	2013-08-04 19:09:07.950618525 +0000
@@ -1,22 +1,21 @@
-*pi_netrw.txt*  For Vim version 7.3.  Last change: 2010 Jul 28
+*pi_netrw.txt*  For Vim version 7.3.  Last change: 2013 May 18
 
-	    -----------------------------------------------------
-	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
-	    -----------------------------------------------------
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+	    ------------------------------------------------
+	    NETRW REFERENCE MANUAL    by Charles E. Campbell
+	    ------------------------------------------------
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
 
-Copyright: Copyright (C) 1999-2010 Charles E Campbell, Jr    *netrw-copyright*
-	   Permission is hereby granted to use and distribute this code, with
-	   or without modifications, provided that this copyright notice is
-	   copied with it. Like anything else that's free, netrw.vim,
-	   netrwPlugin.vim, netrwFileHandlers.vim, netrwSettings.vim,
-	   syntax/netrw.vim, and pi_netrw.txt are provided *as is* and comes
-	   with no warranty of any kind, either expressed or implied.  No
-	   guarantees of merchantability.  No guarantees of suitability for
-	   any purpose.  By using this plugin, you agree that in no event will
-	   the copyright holder be liable for any damages resulting from the
-	   use of this software.
+Copyright: Copyright (C) 1999-2013 Charles E Campbell    *netrw-copyright*
+	The VIM LICENSE applies to the files in this package, including
+	netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and
+	syntax/netrw.vim.  Like anything else that's free, netrw.vim and its
+	associated files are provided *as is* and comes with no warranty of
+	any kind, either expressed or implied.  No guarantees of
+	merchantability.  No guarantees of suitability for any purpose.  By
+	using this plugin, you agree that in no event will the copyright
+	holder be liable for any damages resulting from the use of this
+	software. Use at your own risk!
 
 
 		*dav*    *ftp*    *netrw-file*  *rcp*    *scp*
@@ -26,82 +25,87 @@
 ==============================================================================
 1. Contents						*netrw-contents* {{{1
 
-1.  Contents.............................................|netrw-contents|
-2.  Starting With Netrw..................................|netrw-start|
-3.  Netrw Reference......................................|netrw-ref|
-      EXTERNAL APPLICATIONS AND PROTOCOLS................|netrw-externapp|
-      READING............................................|netrw-read|
-      WRITING............................................|netrw-write|
-      SOURCING...........................................|netrw-source|
-      DIRECTORY LISTING..................................|netrw-dirlist|
-      CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
-      VARIABLES AND SETTINGS.............................|netrw-variables|
-      PATHS..............................................|netrw-path|
-4.  Network-Oriented File Transfer.......................|netrw-xfer|
-      NETRC..............................................|netrw-netrc|
-      PASSWORD...........................................|netrw-passwd|
-5.  Activation...........................................|netrw-activate|
-6.  Transparent File Editing.............................|netrw-transparent|
-7.  Ex Commands..........................................|netrw-ex|
-8.  Variables and Options................................|netrw-var|
-9.  Browsing.............................................|netrw-browse|
-      Introduction To Browsing...........................|netrw-intro-browse|
-      Quick Reference: Maps..............................|netrw-browse-maps|
-      Quick Reference: Commands..........................|netrw-browse-cmds|
-      Bookmarking A Directory............................|netrw-mb|
-      Browsing...........................................|netrw-cr|
-      Browsing With A Horizontally Split Window..........|netrw-o|
-      Browsing With A New Tab............................|netrw-t|
-      Browsing With A Vertically Split Window............|netrw-v|
-      Change Listing Style.(thin wide long tree).........|netrw-i|
-      Changing To A Bookmarked Directory.................|netrw-gb|
-      Changing To A Predecessor Directory................|netrw-u|
-      Changing To A Successor Directory..................|netrw-U|
-      Customizing Browsing With A User Function..........|netrw-x|
-      Deleting Bookmarks.................................|netrw-mB|
-      Deleting Files Or Directories......................|netrw-D|
-      Directory Exploring Commands.......................|netrw-explore|
-      Exploring With Stars and Patterns..................|netrw-star|
-      Displaying Information About File..................|netrw-qf|
-      Edit File Or Directory Hiding List.................|netrw-ctrl-h|
-      Editing The Sorting Sequence.......................|netrw-S|
-      Going Up...........................................|netrw--|
-      Hiding Files Or Directories........................|netrw-a|
-      Improving Browsing.................................|netrw-ssh-hack|
-      Listing Bookmarks And History......................|netrw-qb|
-      Making A New Directory.............................|netrw-d|
-      Making The Browsing Directory The Current Directory|netrw-c|
-      Marking Files......................................|netrw-mf|
-      Marking Files By Regular Expression................|netrw-mr|
-      Marked Files: Arbitrary Command....................|netrw-mx|
-      Marked Files: Compression And Decompression........|netrw-mz|
-      Marked Files: Copying..............................|netrw-mc|
-      Marked Files: Diff.................................|netrw-md|
-      Marked Files: Editing..............................|netrw-me|
-      Marked Files: Grep.................................|netrw-mg|
-      Marked Files: Hiding and Unhiding by Suffix........|netrw-mh|
-      Marked Files: Moving...............................|netrw-mm|
-      Marked Files: Printing.............................|netrw-mp|
-      Marked Files: Sourcing.............................|netrw-ms|
-      Marked Files: Tagging..............................|netrw-mT|
-      Marked Files: Setting the Target Directory.........|netrw-mt|
-      Marked Files: Unmarking............................|netrw-mu|
-      Netrw Browser Variables............................|netrw-browser-var|
-      Netrw Browsing And Option Incompatibilities........|netrw-incompatible|
-      Netrw Settings.....................................|netrw-settings|
-      Obtaining A File...................................|netrw-O|
-      Preview Window.....................................|netrw-p|
-      Previous Window....................................|netrw-P|
-      Refreshing The Listing.............................|netrw-ctrl-l|
-      Renaming Files Or Directories......................|netrw-move|
-      Reversing Sorting Order............................|netrw-r|
-      Selecting Sorting Style............................|netrw-s|
-      Setting Editing Window.............................|netrw-C|
-10. Problems and Fixes...................................|netrw-problems|
-11. Debugging Netrw Itself...............................|netrw-debug|
-12. History..............................................|netrw-history|
-13. Todo.................................................|netrw-todo|
-14. Credits..............................................|netrw-credits|
+1.  Contents..............................................|netrw-contents|
+2.  Starting With Netrw...................................|netrw-start|
+3.  Netrw Reference.......................................|netrw-ref|
+      EXTERNAL APPLICATIONS AND PROTOCOLS.................|netrw-externapp|
+      READING.............................................|netrw-read|
+      WRITING.............................................|netrw-write|
+      SOURCING............................................|netrw-source|
+      DIRECTORY LISTING...................................|netrw-dirlist|
+      CHANGING THE USERID AND PASSWORD....................|netrw-chgup|
+      VARIABLES AND SETTINGS..............................|netrw-variables|
+      PATHS...............................................|netrw-path|
+4.  Network-Oriented File Transfer........................|netrw-xfer|
+      NETRC...............................................|netrw-netrc|
+      PASSWORD............................................|netrw-passwd|
+5.  Activation............................................|netrw-activate|
+6.  Transparent Remote File Editing.......................|netrw-transparent|
+7.  Ex Commands...........................................|netrw-ex|
+8.  Variables and Options.................................|netrw-variables|
+9.  Browsing..............................................|netrw-browse|
+      Introduction To Browsing............................|netrw-intro-browse|
+      Quick Reference: Maps...............................|netrw-browse-maps|
+      Quick Reference: Commands...........................|netrw-browse-cmds|
+      Bookmarking A Directory.............................|netrw-mb|
+      Browsing............................................|netrw-cr|
+      Browsing With A Horizontally Split Window...........|netrw-o|
+      Browsing With A New Tab.............................|netrw-t|
+      Browsing With A Vertically Split Window.............|netrw-v|
+      Change Listing Style.(thin wide long tree)..........|netrw-i|
+      Changing To A Bookmarked Directory..................|netrw-gb|
+      Changing To A Predecessor Directory.................|netrw-u|
+      Changing To A Successor Directory...................|netrw-U|
+      Customizing Browsing With A User Function...........|netrw-x|
+      Deleting Bookmarks..................................|netrw-mB|
+      Deleting Files Or Directories.......................|netrw-D|
+      Directory Exploring Commands........................|netrw-explore|
+      Exploring With Stars and Patterns...................|netrw-star|
+      Displaying Information About File...................|netrw-qf|
+      Edit File Or Directory Hiding List..................|netrw-ctrl-h|
+      Editing The Sorting Sequence........................|netrw-S|
+      Forcing treatment as a file or directory............|netrw-gd| |netrw-gf|
+      Going Up............................................|netrw--|
+      Hiding Files Or Directories.........................|netrw-a|
+      Improving Browsing..................................|netrw-ssh-hack|
+      Listing Bookmarks And History.......................|netrw-qb|
+      Making A New Directory..............................|netrw-d|
+      Making The Browsing Directory The Current Directory.|netrw-c|
+      Marking Files.......................................|netrw-mf|
+      Unmarking Files.....................................|netrw-mF|
+      Marking Files By QuickFix List......................|netrw-qF|
+      Marking Files By Regular Expression.................|netrw-mr|
+      Marked Files: Arbitrary Command.....................|netrw-mx|
+      Marked Files: Compression And Decompression.........|netrw-mz|
+      Marked Files: Copying...............................|netrw-mc|
+      Marked Files: Diff..................................|netrw-md|
+      Marked Files: Editing...............................|netrw-me|
+      Marked Files: Grep..................................|netrw-mg|
+      Marked Files: Hiding and Unhiding by Suffix.........|netrw-mh|
+      Marked Files: Moving................................|netrw-mm|
+      Marked Files: Printing..............................|netrw-mp|
+      Marked Files: Sourcing..............................|netrw-ms|
+      Marked Files: Setting the Target Directory..........|netrw-mt|
+      Marked Files: Tagging...............................|netrw-mT|
+      Marked Files: Target Directory Using Bookmarks......|netrw-Tb|
+      Marked Files: Target Directory Using History........|netrw-Th|
+      Marked Files: Unmarking.............................|netrw-mu|
+      Netrw Browser Variables.............................|netrw-browser-var|
+      Netrw Browsing And Option Incompatibilities.........|netrw-incompatible|
+      Netrw Settings Window...............................|netrw-settings-window|
+      Obtaining A File....................................|netrw-O|
+      Preview Window......................................|netrw-p|
+      Previous Window.....................................|netrw-P|
+      Refreshing The Listing..............................|netrw-ctrl-l|
+      Reversing Sorting Order.............................|netrw-r|
+      Renaming Files Or Directories.......................|netrw-R|
+      Selecting Sorting Style.............................|netrw-s|
+      Setting Editing Window..............................|netrw-C|
+10. Problems and Fixes....................................|netrw-problems|
+11. Debugging Netrw Itself................................|netrw-debug|
+12. History...............................................|netrw-history|
+13. Todo..................................................|netrw-todo|
+14. Credits...............................................|netrw-credits|
 
 {Vi does not have any of this}
 
@@ -140,6 +144,16 @@
 	...
 	default          login USERID password "PASSWORD"
 <
+Windows' ftp doesn't support .netrc; however, one may have in one's .vimrc:  >
+
+   let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\MyUserName\MACHINE'
+<
+Netrw will substitute the host's machine name for "MACHINE" from the url it is
+attempting to open, and so one may specify >
+	userid
+	password
+for each site in a separate file: c:\Users\MyUserName\MachineName.
+
 Now about browsing -- when you just want to look around before editing a
 file.  For browsing on your current host, just "edit" a directory: >
 
@@ -180,26 +194,26 @@
 
 	Protocol  Variable	    Default Value
 	--------  ----------------  -------------
-	   dav:  *g:netrw_dav_cmd*   = "cadaver"     if cadaver is executable
-	   dav:   g:netrw_dav_cmd    = "curl -o"     elseif curl is available
-	 fetch:  *g:netrw_fetch_cmd* = "fetch -o"    if fetch is available
-	   ftp:  *g:netrw_ftp_cmd*   = "ftp"
-	  http:  *g:netrw_http_cmd*  = "elinks"     if   elinks  is available
+	   dav:   *g:netrw_dav_cmd*    = "cadaver"    if cadaver is executable
+	   dav:   g:netrw_dav_cmd    = "curl -o"    elseif curl is available
+	 fetch:   *g:netrw_fetch_cmd*  = "fetch -o"   if fetch is available
+	   ftp:   *g:netrw_ftp_cmd*    = "ftp"
+	  http:   *g:netrw_http_cmd*   = "elinks"     if   elinks  is available
 	  http:   g:netrw_http_cmd   = "links"      elseif links is available
 	  http:   g:netrw_http_cmd   = "curl"       elseif curl  is available
 	  http:   g:netrw_http_cmd   = "wget"       elseif wget  is available
           http:   g:netrw_http_cmd   = "fetch"      elseif fetch is available
-	   rcp:  *g:netrw_rcp_cmd*   = "rcp"
-	 rsync:  *g:netrw_rsync_cmd* = "rsync -a"
-	   scp:  *g:netrw_scp_cmd*   = "scp -q"
-	  sftp:  *g:netrw_sftp_cmd*  = "sftp"
+	   rcp:   *g:netrw_rcp_cmd*    = "rcp"
+	 rsync:   *g:netrw_rsync_cmd*  = "rsync -a"
+	   scp:   *g:netrw_scp_cmd*    = "scp -q"
+	  sftp:   *g:netrw_sftp_cmd*   = "sftp"
 
 	*g:netrw_http_xcmd* : the option string for http://... protocols are
 	specified via this variable and may be independently overridden.  By
 	default, the option arguments for the http-handling commands are: >
 
 		    elinks : "-source >"
-		    links  : "-source >"
+		    links  : "-dump >"
 		    curl   : "-o"
 		    wget   : "-q -O"
 		    fetch  : "-o"
@@ -272,7 +286,7 @@
 	:Nsource "scp://[user@]machine[[:#]port]/path"	uses scp
 	:Nsource "sftp://[user@]machine/path"		uses sftp
 
-DIRECTORY LISTING					*netrw-dirlist* {{{2
+DIRECTORY LISTING			*netrw-trailingslash* *netrw-dirlist* {{{2
 
 	One may browse a directory to get a listing by simply attempting to
 	edit the directory: >
@@ -280,34 +294,42 @@
 		:e scp://[user]@hostname/path/
 		:e ftp://[user]@hostname/path/
 <
-	For remote directories (ie. those using scp or ftp), that trailing
-	"/" is necessary (the slash tells netrw to treat the argument as a
-	directory to browse instead of a file to download).
-
-	However, the Nread command can also be used to accomplish this:
+	For remote directory listings (ie. those using scp or ftp), that
+	trailing "/" is necessary (the slash tells netrw to treat the argument
+	as a directory to browse instead of as a file to download).
 
-	:Nread [protocol]://[user]@hostname/path/
+	The Nread command may also be used to accomplish this (again, that
+	trailing slash is necessary): >
 
+		:Nread [protocol]://[user]@hostname/path/
+<
 					*netrw-login* *netrw-password*
 CHANGING USERID AND PASSWORD		*netrw-chgup* *netrw-userpass* {{{2
 
 	Attempts to use ftp will prompt you for a user-id and a password.
-	These will be saved in global variables g:netrw_uid and
-	s:netrw_passwd; subsequent uses of ftp will re-use those two items to
-	simplify the further use of ftp.  However, if you need to use a
-	different user id and/or password, you'll want to call NetUserPass()
+	These will be saved in global variables |g:netrw_uid| and
+	|s:netrw_passwd|; subsequent use of ftp will re-use those two strings,
+	thereby simplifying use of ftp.  However, if you need to use a
+	different user id and/or password, you'll want to call |NetUserPass()|
 	first.  To work around the need to enter passwords, check if your ftp
 	supports a <.netrc> file in your home directory.  Also see
 	|netrw-passwd| (and if you're using ssh/scp hoping to figure out how
-	to not need to use passwords, look at |netrw-ssh-hack|).
+	to not need to use passwords for scp, look at |netrw-ssh-hack|).
 
 	:NetUserPass [uid [password]]		-- prompts as needed
 	:call NetUserPass()			-- prompts for uid and password
 	:call NetUserPass("uid")		-- prompts for password
 	:call NetUserPass("uid","password")	-- sets global uid and password
 
+(Related topics: |ftp| |netrw-userpass| |netrw-start|)
+
 NETRW VARIABLES AND SETTINGS				*netrw-variables* {{{2
-(also see: |netrw-browser-var| |netrw-protocol| |netrw-settings| |netrw-var|)
+    (Also see:
+    |netrw-browser-var|     : netrw browser option variables
+    |netrw-protocol|        : file transfer protocol option variables
+    |netrw-settings|        : additional file transfer options
+    |netrw-browser-options| : these options affect browsing directories
+    )
 
 Netrw provides a lot of variables which allow you to customize netrw to your
 preferences.  One way to look at them is via the command :NetrwSettings (see
@@ -316,95 +338,102 @@
 |netrw-externapp|:
 
  *b:netrw_lastfile*	last file Network-read/written retained on a
-		      per-buffer basis (supports plain :Nw )
+			per-buffer basis (supports plain :Nw )
 
  *g:netrw_bufsettings*	the settings that netrw buffers have
- 		      (default) noma nomod nonu nowrap ro nobl
+ 			(default) noma nomod nonu nowrap ro nobl
 
  *g:netrw_chgwin*	specifies a window number where file edits will take
-		      place.  (also see |netrw-C|)
-		      (default) not defined
+			place.  (also see |netrw-C|)
+			(default) not defined
 
  *g:Netrw_funcref*	specifies a function (or functions) to be called when
-		      netrw edits a file.  The file is first edited, and
-		      then the function reference (|Funcref|) is called.
-		      This variable may also hold a |List| of Funcrefs.
-		      (default) not defined
+			netrw edits a file.  The file is first edited, and
+			then the function reference (|Funcref|) is called.
+			This variable may also hold a |List| of Funcrefs.
+			(default) not defined.  (the capital in g:Netrw...
+			is required by its holding a function reference)
 >
 			    Example: place in .vimrc; affects all file opening
 			    fun! MyFuncRef()
 			    endfun
 			    let g:Netrw_funcref= function("MyFuncRef")
 <
- *g:netrw_ftp*		if it doesn't exist, use default ftp
-		      =0 use default ftp		       (uid password)
-		      =1 use alternate ftp method	  (user uid password)
-		      If you're having trouble with ftp, try changing the
-		      value of this variable to see if the alternate ftp
-		      method works for your setup.
+ *g:netrw_ftp*		   if it doesn't exist, use default ftp
+			=0 use default ftp		       (uid password)
+			=1 use alternate ftp method	  (user uid password)
+			   If you're having trouble with ftp, try changing the
+			   value of this variable to see if the alternate ftp
+			   method works for your setup.
+
+ *g:netrw_ftp_options*     Chosen by default, these options are supposed to turn
+			 interactive prompting off and to restrain ftp from
+			 attempting auto-login upon initial connection.
+			 However, it appears that not all ftp implementations
+			 support this (ex. ncftp).
+		        ="-i -n"
 
  *g:netrw_ftpextracmd*	default: doesn't exist
-		      If this variable exists, then any string it contains
-		      will be placed into the commands set to your ftp
-		      client.  As an example:
-		        ="passive"
+			If this variable exists, then any string it contains
+			will be placed into the commands set to your ftp
+			client.  As an example:
+			   ="passive"
 
  *g:netrw_ftpmode*	="binary"				    (default)
-		      ="ascii"
+			="ascii"
 
  *g:netrw_ignorenetrc*	=0 (default for linux, cygwin)
-		      =1 If you have a <.netrc> file but it doesn't work and
-		         you want it ignored, then set this variable as
-		         shown. (default for Windows + cmd.exe)
+			=1 If you have a <.netrc> file but it doesn't work and
+			   you want it ignored, then set this variable as
+			   shown. (default for Windows + cmd.exe)
 
  *g:netrw_menu*		=0 disable netrw's menu
-		      =1 (default) netrw's menu enabled
+			=1 (default) netrw's menu enabled
 
  *g:netrw_nogx*		if this variable exists, then the "gx" map will not
-		      be available (see |netrw-gx|)
+			be available (see |netrw-gx|)
 
  *g:netrw_uid*		(ftp) user-id,      retained on a per-vim-session basis
- *s:netrw_passwd*	(ftp) password,     retained on a per-vim-session basis
+ *s:netrw_passwd* 	(ftp) password,     retained on a per-vim-session basis
 
  *g:netrw_preview*	=0 (default) preview window shown in a horizontally
-                         split window
-		      =1 preview window shown in a vertically split window.
-		      Also affects the "previous window" (see |netrw-P|) in
-		      the same way.
-
- *g:netrw_scpport*      = "-P" : option to use to set port for scp
- *g:netrw_sshport*      = "-p" : option to use to set port for ssh
-
- *g:netrw_sepchr*	=\0xff
-		      =\0x01 for enc == euc-jp (and perhaps it should be for
-			                          others, too, please let me
-						  know)
-		      Separates priority codes from filenames internally.
-		      See |netrw-p12|.
+			   split window
+			=1 preview window shown in a vertically split window.
+			   Also affects the "previous window" (see |netrw-P|) in
+			   the same way.
+
+ *g:netrw_scpport*	= "-P" : option to use to set port for scp
+ *g:netrw_sshport*	= "-p" : option to use to set port for ssh
+
+ *g:netrw_sepchr* 	=\0xff
+			=\0x01 for enc == euc-jp (and perhaps it should be for
+			   others, too, please let me know)
+			   Separates priority codes from filenames internally.
+			   See |netrw-p12|.
 
   *g:netrw_silent*	=0 : transfers done normally
-		      =1 : transfers done silently
+			=1 : transfers done silently
 
  *g:netrw_use_errorwindow* =1 : messages from netrw will use a separate one
-                              line window.  This window provides reliable
+			      line window.  This window provides reliable
 			      delivery of messages. (default)
 			 =0 : messages from netrw will use echoerr ;
 			      messages don't always seem to show up this
 			      way, but one doesn't have to quit the window.
 
  *g:netrw_win95ftp*	=1 if using Win95, will remove four trailing blank
-		         lines that o/s's ftp "provides" on transfers
-		      =0 force normal ftp behavior (no trailing line removal)
+			   lines that o/s's ftp "provides" on transfers
+			=0 force normal ftp behavior (no trailing line removal)
 
- *g:netrw_cygwin*	=1 assume scp under windows is from cygwin. Also
-		         permits network browsing to use ls with time and
-		         size sorting (default if windows)
-		      =0 assume Windows' scp accepts windows-style paths
-		         Network browsing uses dir instead of ls
-		      This option is ignored if you're using unix
+ *g:netrw_cygwin* 	=1 assume scp under windows is from cygwin. Also
+			   permits network browsing to use ls with time and
+			   size sorting (default if windows)
+			=0 assume Windows' scp accepts windows-style paths
+			   Network browsing uses dir instead of ls
+			   This option is ignored if you're using unix
 
  *g:netrw_use_nt_rcp*	=0 don't use the rcp of WinNT, Win2000 and WinXP
-		      =1 use WinNT's rcp in binary mode         (default)
+			=1 use WinNT's rcp in binary mode         (default)
 
 PATHS							*netrw-path* {{{2
 
@@ -477,6 +506,9 @@
 	let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
 	let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
 <
+(note: it has been reported that windows 7 with putty v0.6's "-batch" option
+       doesn't work, so its best to leave it off for that system)
+
 See |netrw-p8| for more about putty, pscp, psftp, etc.
 
 Ftp, an old protocol, seems to be blessed by numerous implementations.
@@ -500,7 +532,24 @@
 >
 	vim ftp://[user@]machine[[:#]portnumber]/path
 <
-However, ftp will often need to query the user for the userid and password.
+Windows provides an ftp (typically c:\Windows\System32\ftp.exe) which uses
+an option, -s:filename (filename can and probably should be a full path)
+which contains ftp commands which will be automatically run whenever ftp
+starts.  You may use this feature to enter a user and password for one site: >
+	userid
+	password
+<					*netrw-windows-netrc*  *netrw-windows-s*
+If |g:netrw_ftp_cmd| contains -s:[path/]MACHINE, then (on Windows machines only)
+netrw will substitute the current machine name requested for ftp connections
+for MACHINE.  Hence one can have multiple machine.ftp files containing login
+and password for ftp.  Example: >
+
+    let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE'
+    vim ftp://myhost.somewhere.net/
+will use a file >
+	C:\Users\Myself\myhost.ftp
+<
+Often, ftp will need to query the user for the userid and password.
 The latter will be done "silently"; ie. asterisks will show up instead of
 the actually-typed-in password.  Netrw will retain the userid and password
 for subsequent read/writes from the most recent transfer so subsequent
@@ -594,6 +643,9 @@
 	readable for others.  Don't forget that the system administrator can
 	still read the file!  Ie. for Linux/Unix: chmod 600 .netrc
 
+Even though Windows' ftp clients typically do not support .netrc, netrw has
+a work-around: see |netrw-windows-s|.
+
 
 PASSWORD						*netrw-passwd*
 
@@ -624,7 +676,7 @@
 <
 
 ==============================================================================
-6. Transparent File Editing			*netrw-transparent* {{{1
+6. Transparent Remote File Editing			*netrw-transparent* {{{1
 
 Transparent file transfers occur whenever a regular file read or write
 (invoked via an |:autocmd| for |BufReadCmd|, |BufWriteCmd|, or |SourceCmd|
@@ -698,13 +750,15 @@
 
 
 ==============================================================================
-8. Variables and Options		*netrw-options* *netrw-var* {{{1
+8. Variables and Options			*netrw-var* *netrw-settings* {{{1
 
-(if you're interested in the netrw browser settings, see: |netrw-browser-var|)
+(also see: |netrw-options| |netrw-variables| |netrw-protocol|
+           |netrw-browser-settings| |netrw-browser-options| )
 
 The <netrw.vim> script provides several variables which act as options to
 affect <netrw.vim>'s file transfer behavior.  These variables typically may be
 set in the user's <.vimrc> file: (see also |netrw-settings| |netrw-protocol|)
+						*netrw-options*
 >
                         -------------
                         Netrw Options
@@ -736,6 +790,7 @@
                                 =1 use default method to do ftp >
 	-----------------------------------------------------------------------
 <
+							*netrw-internal-variables*
 The script will also make use of the following variables internally, albeit
 temporarily.
 >
@@ -874,6 +929,7 @@
      endfunction
     endif
 >
+(Related topics: |ftp| |netrw-userpass| |netrw-start|)
 
 ==============================================================================
 9. Browsing		*netrw-browsing* *netrw-browse* *netrw-help* {{{1
@@ -1023,6 +1079,7 @@
 	   v	Enter the file/directory under the cursor in a new   |netrw-v|
 		browser window.  A vertical split is used.
 	   x	View file with an associated program                 |netrw-x|
+	   X	Execute filename under cursor via |system()|           |netrw-X|
 
 	   %	Open a new file in netrw's current directory         |netrw-%|
 
@@ -1036,8 +1093,8 @@
 	<2-leftmouse>	(gvim only) when:
 	                 * in a netrw-selected file, AND
 		         * |g:netrw_retmap| == 1     AND
-		         * the user doesn't already have a <2-leftmouse> mapping
-			   defined before netrw is autoloaded,
+		         * the user doesn't already have a <2-leftmouse>
+			   mapping defined before netrw is autoloaded,
 			then a double clicked leftmouse button will return
 			to the netrw browser window.  See |g:netrw_retmap|.
 	<s-leftmouse>	(gvim only) like mf, will mark files
@@ -1129,25 +1186,26 @@
 horizontal split is used.  (for vertical splitting, see |netrw-v|)
 
 Normally, the o key splits the window horizontally with the new window and
-cursor at the top.  To change to splitting the window horizontally with the
-new window and cursor at the bottom, have
-
-	let g:netrw_alto = 1
-
-in your <.vimrc>.  (also see |netrw-t| |netrw-T| |netrw-v|)
+cursor at the top.
 
 Associated setting variables: |g:netrw_alto| |g:netrw_winsize|
 
+Related Actions |netrw-cr| |netrw-p| |netrw-t| |netrw-v|
+Associated setting variables:
+   |g:netrw_alto|    control above/below splitting
+   |g:netrw_winsize| control initial sizing
 
-BROWSING WITH A NEW TAB				*netrw-t* *netrw-T* {{{2
+BROWSING WITH A NEW TAB				*netrw-t*
 
 Normally one enters a file or directory using the <cr>.  The "t" map
 allows one to open a new window holding the new directory listing or file in
-a new tab.  The "T" version puts the file or directory into a background tab
-(see |gT|)
+a new tab.
 
-Related actions:  |netrw-o| |netrw-v|
+If you'd like to have the new listing in a background tab, use |gT|.
 
+Related Actions |netrw-cr| |netrw-o| |netrw-p| |netrw-v|
+Associated setting variables:
+   |g:netrw_winsize| control initial sizing
 
 BROWSING WITH A VERTICALLY SPLIT WINDOW			*netrw-v* {{{2
 
@@ -1156,18 +1214,18 @@
 vertical split is used.  (for horizontal splitting, see |netrw-o|)
 
 Normally, the v key splits the window vertically with the new window and
-cursor at the left.  To change to splitting the window vertically with the new
-window and cursor at the right, have
-
-	let g:netrw_altv = 1
-
-in your <.vimrc>.  (also see: |netrw-o| |netrw-t| |netrw-T|)
+cursor at the left.
 
 There is only one tree listing buffer; using "v" on a displayed subdirectory
 will split the screen, but the same buffer will be shown twice.
 
 Associated setting variable: |g:netrw_altv| |g:netrw_winsize|
 
+Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v|
+Associated setting variables:
+   |g:netrw_altv|    control right/left splitting
+   |g:netrw_winsize| control initial sizing
+
 
 CHANGE LISTING STYLE  (THIN LONG WIDE TREE)   			*netrw-i* {{{2
 
@@ -1196,6 +1254,18 @@
 	let g:netrw_liststyle= 4
 the tree style will become your default listing style.
 
+One typical way to use the netrw tree display is to: >
+
+	vim .
+	(use i until a tree display shows)
+	navigate to a file
+	v  (edit as desired in vertically split window)
+	ctrl-w h  (to return to the netrw listing)
+	P (edit newly selected file in the previous window)
+	ctrl-w h  (to return to the netrw listing)
+	P (edit newly selected file in the previous window)
+	...etc...
+<
 Associated setting variables: |g:netrw_liststyle| |g:netrw_maxfilenamelen|
                               |g:netrw_timefmt|   |g:netrw_list_cmd|
 
@@ -1214,6 +1284,8 @@
 	{cnt}gb
 
 Any count may be used to reference any of the bookmarks.
+Note that |netrw-qb| shows both bookmarks and history; to go
+to a location stored in the history see |netrw-u| and |netrw-U|.
 
 Related Topics:
 	|netrw-mB| how to delete bookmarks
@@ -1225,10 +1297,17 @@
 
 Every time you change to a new directory (new for the current session),
 netrw will save the directory in a recently-visited directory history
-list (unless g:netrw_dirhistmax is zero; by default, it's ten).  With the
+list (unless |g:netrw_dirhistmax| is zero; by default, it's ten).  With the
 "u" map, one can change to an earlier directory (predecessor).  To do
 the opposite, see |netrw-U|.
 
+The "u" map also accepts counts to go back in the history several slots.
+For your convenience, |netrw-qb| lists the history number which can be
+re-used in that count.
+
+See |g:netrw_dirhistmax| for how to control the quantity of history stack
+slots.
+
 
 CHANGING TO A SUCCESSOR DIRECTORY		*netrw-U* *netrw-downdir* {{{2
 
@@ -1236,6 +1315,11 @@
 This map is the opposite of the "u" map. (see |netrw-u|)  Use the
 q map to list both the bookmarks and history. (see |netrw-qb|)
 
+The "U" map also accepts counts to go forward in the history several slots.
+
+See |g:netrw_dirhistmax| for how to control the quantity of history stack
+slots.
+
 
 NETRW CLEAN					*netrw-clean* *:NetrwClean*
 
@@ -1368,7 +1452,8 @@
 
 	g:netrw_rmf_cmd: ssh HOSTNAME rm -f
 
-Associated setting variable: |g:netrw_local_rmdir| |g:netrw_rm_cmd|
+Related topics: |netrw-d|
+Associated setting variable: |g:netrw_localrmdir| |g:netrw_rm_cmd|
                              |g:netrw_rmdir_cmd|   |g:netrw_ssh_cmd|
 
 
@@ -1502,7 +1587,7 @@
 Associated setting variables: |g:netrw_hide| |g:netrw_list_hide|
 Associated topics: |netrw-a| |netrw-gh| |netrw-mh|
 
-
+					*netrw-sort-sequence*
 EDITING THE SORTING SEQUENCE		*netrw-S* *netrw-sortsequence* {{{2
 
 When "Sorted by" is name, one may specify priority via the sorting sequence
@@ -1527,6 +1612,28 @@
 Associated setting variables: |g:netrw_sort_sequence| |g:netrw_sort_options|
 
 
+EXECUTING FILE UNDER CURSOR VIA SYSTEM()			*netrw-X*
+
+Pressing X while the cursor is atop an executable file will yield a prompt
+using the filename asking for any arguments.  Upon pressing a [return], netrw
+will then call |system()| with that command and arguments.  The result will
+be displayed by |:echomsg|, and so |:messages| will repeat display of the
+result.  Ansi escape sequences will be stripped out.
+
+
+FORCING TREATMENT AS A FILE OR DIRECTORY	*netrw-gd* *netrw-gf* {{{2
+
+Remote symbolic links (ie. those listed via ssh or ftp) are problematic
+in that it is difficult to tell whether they link to a file or to a
+directory.
+
+To force treatment as a file: use >
+	gf
+<
+To force treatment as a directory: use >
+	gd
+<
+
 GOING UP							*netrw--* {{{2
 
 To go up a directory, press "-" or press the <cr> when atop the ../ directory
@@ -1589,7 +1696,7 @@
 to toggle between hiding files which begin with a period (dot) and not hiding
 them.
 
-Associated setting variable: |g:netrw_list_hide|
+Associated setting variable: |g:netrw_list_hide|  |g:netrw_hide|
 Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh|
 
 IMPROVING BROWSING			*netrw-listhack* *netrw-ssh-hack* {{{2
@@ -1687,22 +1794,23 @@
 
 With the "d" map one may make a new directory either remotely (which depends
 on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
-global variable g:netrw_local_mkdir).  Netrw will issue a request for the new
+global variable g:netrw_localmkdir).  Netrw will issue a request for the new
 directory's name.  A bare <CR> at that point will abort the making of the
 directory.  Attempts to make a local directory that already exists (as either
 a file or a directory) will be detected, reported on, and ignored.
 
-Currently, making a directory via ftp is not supported.
-
-Associated setting variable: |g:netrw_local_mkdir| |g:netrw_mkdir_cmd|
+Related topics: |netrw-D|
+Associated setting variables:	|g:netrw_localmkdir|  |g:netrw_mkdir_cmd|
+				|g:netrw_remote_mkdir|
 
 
 MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* {{{2
 
 By default, |g:netrw_keepdir| is 1.  This setting means that the current
-directory will not track the browsing directory.
+directory will not track the browsing directory. (done for backwards
+compatibility with v6's file explorer).
 
-Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory to
+Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory
 track netrw's browsing directory.
 
 However, given the default setting for g:netrw_keepdir of 1 where netrw
@@ -1725,6 +1833,7 @@
     |netrw-mc|	Copy marked files to target
     |netrw-md|	Apply vimdiff to marked files
     |netrw-me|	Edit marked files
+    |netrw-mF|	Unmark marked files
     |netrw-mg|	Apply vimgrep to marked files
     |netrw-mm|	Move marked files
     |netrw-mp|	Print marked files
@@ -1732,6 +1841,7 @@
     |netrw-mT|	Generate tags using marked files
     |netrw-mx|	Apply shell command to marked files
     |netrw-mz|	Compress/Decompress marked files
+    |netrw-qF|	Mark files using quickfix list
     |netrw-O|	Obtain marked files
     |netrw-R|	Rename marked files
 
@@ -1740,6 +1850,16 @@
 with <s-leftmouse> using gvim.  One may unmark all files by pressing
 "mu" (see |netrw-mu|).
 
+Marked files are highlighted using the "netrwMarkFile" highlighting group,
+which by default is linked to "Identifier" (see Identifier under
+|group-name|).  You may change the highlighting group by putting something
+like >
+
+	highlight clear netrwMarkFile
+	hi link netrwMarkFile ..whatever..
+<
+into $HOME/.vim/after/syntax/netrw.vim .
+
 *markfilelist* *global_markfilelist* *local_markfilelist*
 All marked files are entered onto the global marked file list; there is only
 one such list.  In addition, every netrw buffer also has its own local marked
@@ -1749,6 +1869,22 @@
 lists.
 
 
+UNMARKING FILES							*netrw-mF* {{{2
+	(also see |netrw-mf|)
+
+This command will unmark all files in the current buffer.  One may also use
+mf (|netrw-mf|) on a specific file to unmark just that file.
+
+
+MARKING FILES BY QUICKFIX LIST				*netrw-qF*
+	(also see |netrw-mf|)
+
+One may convert the |quickfix-error-lists| into a marked file list using
+"qF".  You may then proceed with commands such as me (|netrw-me|) to
+edit them.  Quickfix error lists are generated, for example, by calls
+to |:vimgrep|.
+
+
 MARKING FILES BY REGULAR EXPRESSION				*netrw-mr* {{{2
 	(also see |netrw-mf|)
 
@@ -1789,7 +1925,8 @@
 		      (Uses the global marked file list)
 
 Select a target directory with mt (|netrw-mt|).  Then change directory,
-select file(s) (see |netrw-mf|), and press "mc".
+select file(s) (see |netrw-mf|), and press "mc".  The copy is done
+from the current window (where one does the mf) to the target.
 
 Associated setting variable: |g:netrw_localcopycmd| |g:netrw_ssh_cmd|
 
@@ -1806,17 +1943,27 @@
 
 This command will place the marked files on the |arglist| and commence
 editing them.  One may return the to explorer window with |:Rexplore|.
+(use |:n| and |:p| to edit next and previous files in the arglist)
 
 MARKED FILES: GREP						*netrw-mg* {{{2
 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
 		      (uses the global marked file list)
 
-This command will apply |:vimgrep| to the marked files.  The command will ask
-for the requested pattern; one may enter: >
+This command will apply |:vimgrep| to the marked files.
+The command will ask for the requested pattern; one may then enter: >
+
 	/pattern/[g][j]
 	! /pattern/[g][j]
 	pattern
 <
+In the cases of "j" option usage as shown above, "mg" will winnow the current
+marked file list to just those possessing the specified pattern.
+Thus, one may use >
+	mr ...file-pattern
+	mg ..contents-pattern
+to have a marked file list satisfying the file-pattern but containing the
+desried contents-pattern.
+
 MARKED FILES: HIDING AND UNHIDING BY SUFFIX			*netrw-mh* {{{2
 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
 		      (uses the local marked file list)
@@ -1841,7 +1988,8 @@
 	Use at your own risk!
 
 Select a target directory with mt (|netrw-mt|).  Then change directory,
-select file(s) (see |netrw-mf|), and press "mm".
+select file(s) (see |netrw-mf|), and press "mm".  The move is done
+from the current window (where one does the mf) to the target.
 
 Associated setting variable: |g:netrw_localmovecmd| |g:netrw_ssh_cmd|
 
@@ -1861,6 +2009,36 @@
 Netrw will source the marked files (using vim's |:source| command)
 
 
+MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
+     (See |netrw-mf| and |netrw-mr| for how to mark files)
+
+Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
+
+  * If the cursor is atop a file name, then the netrw window's currently
+    displayed directory is used for the copy/move-to target.
+
+  * Also, if the cursor is in the banner, then the netrw window's currently
+    displayed directory is used for the copy/move-to target.
+    Unless the target already is the current directory.  In which case,
+    remove the target.
+
+  * However, if the cursor is atop a directory name, then that directory is
+    used for the copy/move-to target
+
+There is only one copy/move-to target per vim session; ie. the target is a
+script variable (see |s:var|) and is shared between all netrw windows (in an
+instance of vim).
+
+When using menus and gvim, netrw provides a "Targets" entry which allows one
+to pick a target from the list of bookmarks and history.
+
+Related topics:
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
+      Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
+      Marked Files: Target Directory Using History.......|netrw-Th|
+
+
 MARKED FILES: TAGGING						*netrw-mT* {{{2
 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
 		      (uses the global marked file list)
@@ -1870,7 +2048,7 @@
 netrw will use ssh (see |g:netrw_ssh_cmd|), and so ssh must be available for
 this to work on remote systems.  For your local system, see |ctags| on how to
 get a version.  I myself use hdrtags, currently available at
-http://mysite.verizon.net/astronaut/src/index.html , and have >
+http://www.drchip.org/astronaut/src/index.html , and have >
 
 	let g:netrw_ctags= "hdrtag"
 <
@@ -1886,34 +2064,48 @@
 
 Associated setting variables: |g:netrw_ctags| |g:netrw_ssh_cmd|
 
+MARKED FILES: TARGET DIRECTORY USING BOOKMARKS  		*netrw-Tb* {{{2
 
-MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
-     (See |netrw-mf| and |netrw-mr| for how to mark files)
+Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
 
-Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
+The |netrw-qb| map will give you a list of bookmarks (and history).
+One may choose one of the bookmarks to become your marked file
+target by using [count]Tb (default count: 1).
 
-  * if the cursor is atop a file name, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
+Related topics:
+      Listing Bookmarks and History......................|netrw-qb|
+      Marked Files: Setting The Target Directory.........|netrw-mt|
+      Marked Files: Target Directory Using History.......|netrw-Th|
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
 
-  * also, if the cursor is in the banner, then the netrw window's currently
-    displayed directory is used for the copy/move-to target.
 
-  * however, if the cursor is atop a directory name, then that directory is
-    used for the copy/move-to target
+MARKED FILES: TARGET DIRECTORY USING HISTORY	  		*netrw-Th* {{{2
+
+Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
+
+The |netrw-qb| map will give you a list of history (and bookmarks).
+One may choose one of the history entries to become your marked file
+target by using [count]Th (default count: 0; ie. the current directory).
+
+Related topics:
+      Listing Bookmarks and History......................|netrw-qb|
+      Marked Files: Setting The Target Directory.........|netrw-mt|
+      Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
+      Marking Files......................................|netrw-mf|
+      Marking Files by Regular Expression................|netrw-mr|
 
-There is only one copy/move-to target per vim session; ie. the target is a
-script variable (see |s:var|) and is shared between all netrw windows (in an
-instance of vim).
 
 MARKED FILES: UNMARKING						*netrw-mu* {{{2
      (See |netrw-mf| and |netrw-mr| for how to mark files)
 
 The "mu" mapping will unmark all currently marked files.
 
-
+				*netrw-browser-settings*
 NETRW BROWSER VARIABLES		*netrw-browser-options* *netrw-browser-var* {{{2
 
-(if you're interested in the netrw file transfer settings, see |netrw-options|)
+(if you're interested in the netrw file transfer settings, see |netrw-options|
+ and |netrw-protocol|)
 
 The <netrw.vim> browser provides settings in the form of variables which
 you may modify; by placing these settings in your <.vimrc>, you may customize
@@ -1936,6 +2128,10 @@
 				NOTE: suppressing the banner is a new feature
 				which may cause problems.
 
+  *g:netrw_bannerbackslash*	if this variable exists and is not zero, the
+				banner will be displayed with backslashes
+				rather than forward slashes.
+
   *g:netrw_browse_split*	when browsing, <cr> will open the file by:
 				=0: re-using the same window
 				=1: horizontally splitting the window first
@@ -1963,26 +2159,58 @@
 				    Will compress marked files with this
 				    command
 
+  *g:Netrw_corehandler*		Allows one to specify something additional
+				to do when handling <core> files via netrw's
+				browser's "x" command (see |netrw-x|).  If
+				present, g:Netrw_corehandler specifies
+				either one or more function references
+				(see |Funcref|).  (the capital g:Netrw...
+				is required its holding a function reference)
+
+
   *g:netrw_ctags*		="ctags"
-				The default external program used to create tags
+				The default external program used to create
+				tags
 
-  *g:netrw_cursorline*		= 1 (default)
-				will use the |'cursorline'| local setting when
-				|g:netrw_liststyle| ==0 (thin listing) or
-				|g:netrw_liststyle| ==1 (long listing) or
-				|g:netrw_liststyle| ==3 (tree listing)
-				(ie. doesn't affect the wide listing)
-				=0: off
-				=2: like ==1, but the wide listing gets both
-				cursorline and |'cursorcolumn'|locally set
+  *g:netrw_cursor*		= 2 (default)
+  				This option controls the use of the
+				|'cursorline'| (cul) and |'cursorcolumn'|
+				(cuc) settings by netrw:
+
+				Value   Thin-Long-Tree      Wide
+				 =0      u-cul u-cuc      u-cul u-cuc
+				 =1      u-cul u-cuc        cul u-cuc
+				 =2        cul u-cuc        cul u-cuc
+				 =3        cul u-cuc        cul   cuc
+				 =4        cul   cuc        cul   cuc
+
+				Where
+				  u-cul : user's |'cursorline'|   setting used
+				  u-cuc : user's |'cursorcolumn'| setting used
+				  cul   : |'cursorline'|  locally set
+				  cuc   : |'cursorcolumn'| locally set
 
-  *g:netrw_decompress*		= { ".gz" : "gunzip" ,
+  *g:netrw_decompress*		= { ".gz"  : "gunzip" ,
 				    ".bz2" : "bunzip2" ,
 				    ".zip" : "unzip" ,
 				    ".tar" : "tar -xf"}
 				  A dictionary mapping suffices to
 				  decompression programs.
 
+  *g:netrw_dirhistmax*            =10: controls maximum quantity of past
+                                     history.  May be zero to supppress
+				     history.
+				     (related: |netrw-qb| |netrw-u| |netrw-U|)
+
+  *g:netrw_dynamic_maxfilenamelen* =32: enables dynamic determination of
+				    |g:netrw_maxfilenamelen|, which affects
+				    local file long listing.
+  *g:netrw_errorlvl*		=0: error levels greater than or equal to
+				    this are permitted to be displayed
+				    0: notes
+				    1: warnings
+				    2: errors
+
   *g:netrw_fastbrowse*		=0: slow speed directory browsing;
 				    never re-uses directory listings,
 				    always obtains directory listings.
@@ -2046,7 +2274,10 @@
 				These characters in directory names are
 				escaped before applying glob()
 
-  *g:netrw_hide*		if true, the hiding list is used
+  *g:netrw_hide*		Controlled by the "a" map (see |netrw-a|)
+				=0 : show all
+				=1 : show not-hidden files
+				=2 : show hidden files only
 				 default: =0
 
   *g:netrw_home*		The home directory for where bookmarks and
@@ -2082,15 +2313,15 @@
 				Copies marked files (|netrw-mf|) to target
 				directory (|netrw-mt|, |netrw-mc|)
 
+  *g:netrw_localmkdir*		command for making a local directory
+				 default: "mkdir"
+
   *g:netrw_localmovecmd*	="mv" Linux/Unix/MacOS/Cygwin
 				="move" Windows
 				Moves marked files (|netrw-mf|) to target
 				directory (|netrw-mt|, |netrw-mm|)
 
-  *g:netrw_local_mkdir*		command for making a local directory
-				 default: "mkdir"
-
-  *g:netrw_local_rmdir*		remove directory command (rmdir)
+  *g:netrw_localrmdir*		remove directory command (rmdir)
 				 default: "rmdir"
 
   *g:netrw_maxfilenamelen*	=32 by default, selected so as to make long
@@ -2101,16 +2332,26 @@
 				columnar.
 
   *g:netrw_mkdir_cmd*		command for making a remote directory
+				via ssh  (also see |g:netrw_remote_mkdir|)
 				 default: "ssh USEPORT HOSTNAME mkdir"
 
-  *g:netrw_mousemaps*		=1 (default) enables the mouse buttons
-				   while browsing:
+  *g:netrw_mousemaps*		  =1 (default) enables mouse buttons while
+  				   browsing to:
 				     leftmouse       : open file/directory
 				     shift-leftmouse : mark file
 				     middlemouse     : same as P
 				     rightmouse      : remove file/directory
 				=0: disables mouse maps
 
+  *g:netrw_nobeval*		doesn't exist (default)
+				If this variable exists, then balloon
+				evaluation will be suppressed
+				(see |'ballooneval'|)
+
+  *g:netrw_remote_mkdir*	command for making a local directory
+				via ftp  (also see |g:netrw_mkdir_cmd|)
+				 default: "mkdir"
+
   *g:netrw_retmap*		if it exists and is set to one, then:
 				 * if in a netrw-selected file, AND
 				 * no normal-mode <2-leftmouse> mapping exists,
@@ -2136,7 +2377,7 @@
   *g:netrw_rmdir_cmd*		command for removing directories
 				 default: "ssh USEPORT HOSTNAME rmdir"
 
-  *g:netrw_rmf_cmd*		 command for removing softlinks
+  *g:netrw_rmf_cmd*		command for removing softlinks
 				 default: "ssh USEPORT HOSTNAME rm -f"
 
   *g:netrw_sort_by*		sort by "name", "time", or "size"
@@ -2161,7 +2402,7 @@
 				           \.info$,\.swp$,\.obj$'
 
   *g:netrw_special_syntax*	If true, then certain files will be shown
-				in special syntax in the browser:
+				using special syntax in the browser:
 
 					netrwBak     : *.bak
 					netrwCompress: *.gz *.bz2 *.Z *.zip
@@ -2171,7 +2412,7 @@
 					netrwMakefile: [mM]akefile *.mak
 					netrwObj     : *.o *.obj
 					netrwTags    : tags ANmenu ANtags
-					netrwTilde   : *~ 
+					netrwTilde   : *~
 					netrwTmp     : tmp* *tmp
 
 				These syntax highlighting groups are linked
@@ -2182,11 +2423,6 @@
 <				into one's <.vimrc> to use one's own
 				preferences.
 
-  *g:netrw_ssh_cmd*		One may specify an executable command
-				to use instead of ssh for remote actions
-				such as listing, file removal, etc.
-				 default: ssh
-
   *g:netrw_ssh_browse_reject*	ssh can sometimes produce unwanted lines,
 				messages, banners, and whatnot that one doesn't
 				want masquerading as "directories" and "files".
@@ -2194,6 +2430,11 @@
 				messages.  By default its value is:
 					 '^total\s\+\d\+$'
 
+  *g:netrw_ssh_cmd*		One may specify an executable command
+				to use instead of ssh for remote actions
+				such as listing, file removal, etc.
+				 default: ssh
+
 
   *g:netrw_tmpfile_escape*	=' &;'
 				escape() is applied to all temporary files
@@ -2219,8 +2460,14 @@
 
   *g:netrw_winsize*		specify initial size of new windows made with
 				"o" (see |netrw-o|), "v" (see |netrw-v|),
-				|:Hexplore| or |:Vexplore|.
-				 default: ""
+				|:Hexplore| or |:Vexplore|.  The g:netrw_winsize
+				is an integer describing the percentage of the
+				current netrw buffer's window to be used for
+				the new window.
+				 If g:netrw_winsize is less than zero, then
+				the absolute value of g:netrw_winsize lines
+				or columns will be used for the new window.
+				 default: 50  (for 50%)
 
   *g:netrw_xstrlen*		Controls how netrw computes string lengths,
 				including multi-byte characters' string
@@ -2254,7 +2501,7 @@
 autochdir sets the current directory to that containing the "file" (even if
 that "file" is itself a directory).
 
-NETRW SETTINGS						*netrw-settings* {{{2
+NETRW SETTINGS WINDOW				*netrw-settings-window* {{{2
 
 With the NetrwSettings.vim plugin, >
 	:NetrwSettings
@@ -2263,7 +2510,7 @@
 settings therein will be used.  One may also press "?" on any of the lines for
 help on what each of the variables do.
 
-(also see: |netrw-browser-var| |netrw-protocol| |netrw-var| |netrw-variables|)
+(also see: |netrw-browser-var| |netrw-protocol| |netrw-variables|)
 
 
 ==============================================================================
@@ -2297,7 +2544,7 @@
  * To automatically make the currently browsed directory the current
    directory, see |g:netrw_keepdir|.
 
-
+							*netrw-createfile*
 OPEN A NEW FILE IN NETRW'S CURRENT DIRECTORY		*netrw-%*
 
 To open a file in netrw's current directory, press "%".  This map will
@@ -2323,15 +2570,14 @@
 	1. Make vertical splitting the default for previewing files
 	2. Make the default listing style "tree"
 	3. When a vertical preview window is opened, the directory listing
-	   will use only 30 columns; the rest of the window is used for the
-	   preview window.
+	   will use only 30% of the columns available; the rest of the window
+	   is used for the preview window.
 
 PREVIOUS WINDOW				*netrw-P* *netrw-prvwin* {{{2
 
 To edit a file or directory in the previously used (last accessed) window (see
 :he |CTRL-W_p|), press a "P".  If there's only one window, then the one window
-will be horizontally split (above/below splitting is controlled by
-|g:netrw_alto|, and its initial size is controlled by |g:netrw_winsize|).
+will be horizontally split (by default).
 
 If there's more than one window, the previous window will be re-used on
 the selected file/directory.  If the previous window's associated buffer
@@ -2339,6 +2585,13 @@
 the user will be asked if s/he wishes to save the buffer first (yes,
 no, or cancel).
 
+Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v|
+Associated setting variables:
+   |g:netrw_alto|    control above/below splitting
+   |g:netrw_altv|    control right/left splitting
+   |g:netrw_preview| control horizontal vs vertical splitting
+   |g:netrw_winsize| control initial sizing
+
 
 REFRESHING THE LISTING			*netrw-ctrl-l* *netrw-ctrl_l* {{{2
 
@@ -2347,6 +2600,15 @@
 refresh a local directory by using ":e .".
 
 
+REVERSING SORTING ORDER		*netrw-r* *netrw-reverse* {{{2
+
+One may toggle between normal and reverse sorting order by pressing the
+"r" key.
+
+Related topics:              |netrw-s|
+Associated setting variable: |g:netrw_sort_direction|
+
+
 RENAMING FILES OR DIRECTORIES	*netrw-move* *netrw-rename* *netrw-R* {{{2
 
 If there are no marked files: (see |netrw-mf|)
@@ -2377,15 +2639,6 @@
 the V (|linewise-visual|).
 
 
-REVERSING SORTING ORDER		*netrw-r* *netrw-reverse* {{{2
-
-One may toggle between normal and reverse sorting order by pressing the
-"r" key.
-
-Related topics:              |netrw-s|
-Associated setting variable: |g:netrw_sort_direction|
-
-
 SELECTING SORTING STYLE			*netrw-s* *netrw-sort* {{{2
 
 One may select the sorting style by name, time, or (file) size.  The "s" map
@@ -2469,9 +2722,9 @@
 	P5. My times come up oddly in local browsing
 
 		Does your system's strftime() accept the "%c" to yield dates
-		such as "Sun Apr 27 11:49:23 1997"?  If not, do a "man strftime"
-		and find out what option should be used.  Then put it into
-		your |.vimrc|: >
+		such as "Sun Apr 27 11:49:23 1997"?  If not, do a
+		"man strftime" and find out what option should be used.  Then
+		put it into your |.vimrc|: >
 
 			let g:netrw_timefmt= "%X"  (where X is the option)
 <
@@ -2604,7 +2857,7 @@
 
 								*netrw-p11*
 	P11. I want to have two windows; a thin one on the left and my editing
-	     window on the right.  How can I do this?
+	     window on the right.  How may I accomplish this?
 
 		* Put the following line in your <.vimrc>:
 			let g:netrw_altv = 1
@@ -2650,30 +2903,68 @@
 	    "let g:netrw_sftp_cmd = "d:\\dev\\putty\\PSFTP.exe"
 	    "let g:netrw_scp_cmd = "d:\\dev\\putty\\PSCP.exe"
 <
-
+								*netrw-p14*
+	P14. I'd would like to speed up writes using Nwrite and scp/ssh
+	     style connections.  How?  (Thomer M. Gil)
+
+	     Try using ssh's ControlMaster and ControlPath (see the ssh_config
+	     man page) to share multiple ssh connections over a single network
+	     connection. That cuts out the cryptographic handshake on each
+	     file write, sometimes speeding it up by an order of magnitude.
+	     (see  http://thomer.com/howtos/netrw_ssh.html)
+	     (included by permission)
+
+	     Add the following to your ~/.ssh/config: >
+
+		 # you change "*" to the hostname you care about
+		 Host *
+		   ControlMaster auto
+		   ControlPath /tmp/%r@%h:%p
+
+<	     Then create an ssh connection to the host and leave it running: >
+
+		 ssh -N host.domain.com
+
+<	     Now remotely open a file with Vim's Netrw and enjoy the
+	     zippiness: >
+
+		vim scp://host.domain.com//home/user/.bashrc
+<
+								*netrw-p15*
+	P15. How may I use a double-click instead of netrw's usual single click
+	     to open a file or directory?  (Ben Fritz)
+
+	     First, disable netrw's mapping with >
+		    let g:netrw_mousemaps= 0
+<	     and then create a netrw buffer only mapping in
+	     $HOME/.vim/after/ftplugin/netrw.vim: >
+		    nmap <buffer> <2-leftmouse> <CR>
+<	     Note that setting g:netrw_mousemaps to zero will turn off
+	     all netrw's mouse mappings, not just the <leftmouse> one.
+	     (see |g:netrw_mousemaps|)
 
 ==============================================================================
 11. Debugging Netrw Itself				*netrw-debug* {{{1
 
-The <netrw.vim> script is typically available as:
+The <netrw.vim> script is typically available as something like:
 >
-	/usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
-	/usr/local/share/vim/vim6x/autoload/netrw.vim
-< -or- >
 	/usr/local/share/vim/vim7x/plugin/netrwPlugin.vim
 	/usr/local/share/vim/vim7x/autoload/netrw.vim
+< -or- >
+	/usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
+	/usr/local/share/vim/vim6x/autoload/netrw.vim
 <
 which is loaded automatically at startup (assuming :set nocp).
 
 	1. Get the <Decho.vim> script, available as:
 
-	     http://mysite.verizon.net/astronaut/vim/index.html#DECHO
+	     http://www.drchip.org/astronaut/vim/index.html#DECHO
 	   or
 	     http://vim.sourceforge.net/scripts/script.php?script_id=120
 
 	  It now comes as a "vimball"; if you're using vim 7.0 or earlier,
 	  you'll need to update vimball, too.  See
-	     http://mysite.verizon.net/astronaut/vim/index.html#VIMBALL
+	     http://www.drchip.org/astronaut/vim/index.html#VIMBALL
 
 	2. Edit the <netrw.vim> file by typing: >
 
@@ -2706,821 +2997,145 @@
 ==============================================================================
 12. History						*netrw-history* {{{1
 
-	v140: Jul 27, 2010 * (Lech Lorens) unexpected change of window
-	v139: May 14, 2010 * when viewing remote directory listings and
-			     changing listing style, going to tree listing
-			     mode was issuing two rather useless messages
-			     about the buffer name.  They have now been
-			     silenced.
-			   * (Jean Johner) with "behave mswin", clicking
-			     on a filename in wide mode opened a new file
-			     with a missing first letter
-			   * (Britton Kerin) wanted netrw listings to be
-			     buflisted; the |g:netrw_bufsettings| option
-			     permits that.
-	      Jun 18, 2010 * (Jan Steffens) added support for xz compression
-	      Jun 23, 2010 * vimdiff dir1 dir2 now works
-	      Jul 27, 2010 * (John Orr) pointed out that the intended maparg
-			     test for gx was actually testing for g rather
-			     than gx.  Fixed.
-	v138: May 01, 2010 * added the bomb setting to the Save-Set-Restore
-			     option handling (for Tony M)
-	      May 14, 2010 * (Bram Moolenaar) netrw optionally sets cursorline
-			     (and sometimes cursorcolumn) for its display.
-			     This option setting was leaking through with
-			     remote file handling.
-	v137: Dec 28, 2009 * modified the preview window handling for
-			     vertically split windows.  The preview
-			     window will take up all but g:netrw_winsize
-			     columns of the original window; those 
-			     g:netrw_winsize columns will be used for
-			     the netrw listing.
-			   * (Simon Dambe) removed "~" from
-			     |g:netrw_glob_escape| under Windows
-			   * (Bram Moolenaar) modified test for status bar
-			     click with leftmouse.  Moved code to
-			     s:NetrwLeftmouse().
-	      Feb 24, 2010 * (for Jean Johner) added insert-mode maps; one
-			     can get into insert mode with netrw via
-			     ctrl-o :e .
-	      Mar 15, 2010 * (Dominique Pellé) Directory with backslashes such
-			     as foo\bar were not being entered/left properly
-	      Mar 15, 2010 * Using :Explore .. and causing two FocusGained
-			     events caused the directory to change.  Fixed.
-	      Mar 22, 2010 * Last fix caused problems for *//pat and */filepat
-			     searches.
-	      Mar 30, 2010 * With :set hidden and changing listing styles 8
-			     times, the tree listing buffer was being marked
-			     as modified upon exit.  Fixed.
-	v136: Jan 14, 2009 * extended |g:Netrw_funcref| to also handle lists
-			     of function references
-	      Jan 14, 2009 * (reported by Marvin Renich) with spell check
-			     enabled, some filenamess will still being
-			     displayed as spelling errors.
-	      Apr 13, 2009 * (Björn Winckler) writing a file using
-	                     remote scp caused syntax highlighting problem.
-			     Solution: avoid syntax/syntax.vim's
-			     au Filetype * syntax setting autocommand by
-			     checking that the current buffer has the
-			     netrw filetype before attempting a doau
-			     in s:NetrwSafeOptions().
-	      Apr 14, 2009 * (asgeo1) suggested the "T" map (|netrw-T|)
-	      Apr 14, 2009 * marking wasn't working on executable and
-			     other special filenames
-	      Apr 20, 2009 * (Dennis Benzinger) files opened via http have
-			     their syntax filetype auto-detected
-	      Jun 19, 2009 * (Yukihiro Nakadaira) help document improvements
-	      Jul 22, 2009 * g:netrw_browse_split will honor the
-			     |'equalalways'| setting.
-	      Jul 29, 2009 * implemented "I" mapping to toggle banner
-			     (this is experimental and still being debugged)
-	      Sep 19, 2009 * (Mike McEwan) writes via ftp now send both
-			     g:netrw_ftpmode and g:netrw_ftpextracmd (if the
-			     latter exists)
-	      Dec 02, 2009 * netrw uses vimgrep several places; it now uses
-			     "noautocmd vimgrep" (should be speedier).
-	      Dec 03, 2009 * changed back to using -source instead of -dump
-			     for elinks-using commands. (requested by James
-			     Vega and Karsten Hopp)
-	v135: Oct 29, 2008 * using |simplify()| on directory names
-			     (supporting handling ".."s in directory names)
-	      Oct 31, 2008 * added special file highlighting for core dumps
-			     under Unix/Linux.  The default sorting sequence
-			     now also gives core dumps priority.
-	      Nov 10, 2008 * uses a call to netrw#Nread() instead of Nread
-			     to avoid having to use fnameescape()
-			   * fixed a tree redrawing problem (open directory,
-			     open subdir, close subdir, close dir)
-	      Nov 19, 2008 * sprinkled some histdel("/",-1)s through the code
-			     in an attempt to prevent netrw from changing
-			     the search history.
-	      Jan 02, 2009 * |g:Netrw_funcref| included
-	      Jan 05, 2009 * Explore */ **/ *// **// all clear explorer
-			     variables
-	      Jan 05, 2009 * (Panagiotis Louridas) extended s:WinPath()
-			     to remove cygdrive from non-cygwin Windows
-			     paths.  Improved the determination as to
-			     whether or not to do so.
-	      Jan 13, 2009 * included contains=@NoSpell in every syntax
-			     group for syntax/netrw.vim .
-	v134: Sep 30, 2008 * (Sander Marechal) provided a bugfix involving
-			     the use of the |netrw-t| command with a remote
-			     directory.
-	      Sep 30, 2008 * using "x" on a remote jpg was failing; fixed.
-	      Oct 03, 2008 * bookmarks now go on a list and are stored to
-			     the first directory on the |'runtimepath'| in
-			     the hopes of making their retention reliable.
-			     History now also goes to that directory.
-	      Oct 07, 2008 * Included check that vim 7.0 or later is in use.
-	      Oct 07, 2008 * Improved |g:netrw_retmap| handling.
-	      Oct 12, 2008 * Based upon Sébastien Migniot's suggestion, if
-			     cadaver isn't available then netrw will try to
-			     use curl for the dav://... protocol.
-	      Oct 13, 2008 * added @*/ to netrw buffers' |'iskeyword'|setting
-			     This lets mf (|netrw-mf|) mark directories, links
-			     and executables.
-	      Oct 13, 2008 * avoids a second NetrwBrowse() refresh when
-			     g:netrw_fastbrowse is <= 1 (slow, medium speed)
-	      Oct 22, 2008 * |g:netrw_http_xcmd| may now be overridden
-			     independently of |g:netrw_http_cmd|.
-	      Oct 23, 2008 * [N] added to the various Explore commands to
-			     let users specify the width/height of new
-			     explorer windows, overriding |g:netrw_winsize|.
-	v133: Aug 10, 2008 * NetReadFixup() for win95 was missing some "a:"s
-	      Aug 12, 2008 * (Jan Minář) an error condition in NetrwMethod()
-			     wasn't being used, resulting in "b:netrw_fname
-			     undefined" errors
-	      Aug 12, 2008 * (François Ingeirest) asked that "hi link" be
-			     changed to hi default link in the netrw syntax
-			     files.
-	      Aug 12, 2008 * using s:NetrwUnmarkList() more often.  Filenames
-			     were being left on the global list when removed
-			     from the buffer-local lists.
-	      Aug 14, 2008 * (Joshua Clayton) an errant extra ")" was left in
-			     the rcp-handling portion of NetRead().
-	      Sep 03, 2008 * added |'cursorline'| highlighting to thin, long,
-			     and tree displays.
-	v132: Aug 06, 2008 * Fixed marked file-based obtain
-	      Aug 08, 2008 * sourcing a file via ftp from a netrw-generated
-	                     buffer (or any buffer with |'nobl'|) left an
-			     empty no-name buffer in its wake.  Fixed.
-	v130: Jul 31, 2008 * trying out elinks/links for http://host/
-			     requests.  One problem: in-page links
-			     (such as with ...#LABEL) are not supported
-			   * verified that Bram's modified netrwPlugin works
-	      Aug 01, 2008 * fixed a bug: when sourcing a file via ftp, the
-			     "filter window" was left behind.
-	v129: Jul 31, 2008 * bug found in non-mouse enabled vim and some
-			     local maps
-	v128: Jul 30, 2008 * much work done in using shellescape() and
-			     fnameescape()
-	v126: Jun 30, 2008 * after having gone to a remote directory,
-	                     <f1> was no longer taking one to the correct
-			     entry in the help (|netrw-quickhelp|).  Fixed.
-	      Jul 01, 2008 * extracting the last filename from a wide listing
-			     missed the last letter when |'virtualedit'| not
-			     enabled.
-	      Jul 01, 2008 * vim foo/bar  was creating [Scratch] buffers,
-			     where bar was also a directory
-	      Jul 01, 2008 * numerous additional changes were made to netrw
-			     to use fnameescape() and shellescape() instead
-			     of escape().  Not all changes have been tested
-			     as yet...
-	      Jul 01, 2008 * (James Vega reported) some problems with
-			     :NetrwSettings (due to no longer used setting
-			     variables).
-	      Jul 07, 2008 * Additional numerous changes to support security;
-	                     shellescape(arg,1), etc.
-	v125: Apr 07, 2008 * (Cristian Rigamonti) CR provides a patch; he
-			     noted that gx was failing since its call to
-			     netrw#NetBrowseX() wasn't updated to
-			     netrw#NetrwBrowseX().
-			   * (Stanis Trendelenburg) ST provides a patch to
-			     supports davs: (dav + ssl)
-			   * (Rick Choi) noted that directory names comprised
-			     of three digits were not being displayed by
-			     the internal browser.  Fixed.
-			   * (Erik Falor) provided a patch to handle problems
-			     with changing directory and |'acd'| option.
-			   * (James Vega, Teemu Likonen) noted that netrw
-			     wasn't handling multi-byte filenames/directories
-			     correctly.  Fixed.
-			   * (Rick) found problem with g:netrw_maxfilenamelen
-			     being overridden.
-			   * (James Vega) pointed out that netrw was
-			     misidentifying all files in a symbolically linked
-			     directory as being symbolically linked
-			     themselves.  This particular problem was fixed;
-			     however, there are now situations where
-			     symbolically linked files will not be detected.
-			     Really need an internal vim function to do this
-			     identification.
-	      Apr 17, 2008 * When g:netrw_keepdir==0, current directory
-	                     doesn't necessarily equal b:netrw_curdir
-			     initially.  Problem is due to the patch directly
-			     above.
-			   * Fixed qf to handle case where b:netrw_curdir
-			     isn't the same as the current directory under
-			     linux/macosx.
-			   * New: |netrw-mg| (apply vimgrep to marked files)
-	      May 05, 2008 * (Rick) pointed out that a "setlocal ts=32" was
-			     interfering with g:netrw_maxfilenamelen
-	      May 05, 2008 * (James Vega) a file inside a linked directory
-			     was showing up as a symbolic link itself.
-	      May 22, 2008 * symbolic links, fifos, and sockets are now
-	                     indicated by a trailing @, |, or =, respectively.
-	      Jun 06, 2008 * Removed numerous bugs from the marked file
-			     move and copy.  Tested these changes under
-			     Unix only thus far.
-			   * :Rexplore returns to the screen position in the
-			     netrw listing from whence the file was edited
-	v124: Apr 02, 2008 * (Adrian Rollett) change the line supporting the
-			    "x" action for mac to use g:netrw_shq
-	v123: Feb 27, 2008 * Marked files now keeps a "global" marked file
-			     list.  The global marked file list is used to
-			     support tag processing and vimdiff'ing
-			     (|netrw-md| |netrw-mt|)
-			   * Been insuring that mm and mc works with various
-			     combinations of local and remote directories
-			   * (Stefan Bittner) http://.../ should always have
-			     filetype "html" -- fixed.
-			   * (Stefan Bittner) a "?" in a http://.../ request
-			     wasn't being handled correctly.  Fixed by
-			     removing ? from default |g:netrw_tmpfile_escape|.
-			   * (Nico Weber) % codes in http://.../ requests
-			     weren't being handled correctly.  Fixed by
-			     including % in default |g:netrw_fname_escape|.
-			   * (Stefan Bittner) attempts to update Buffers.Refresh
-			     were failing because locale use changed the menu
-			     names.  I implemented a workaround.
-	v122: Feb 12, 2008 * bugfix - first sorting sequence match now has
-			     priority
-	      Feb 14, 2008 * bugfix - sorting sequence was effectively ignoring
-			     sequencing priority of anything following '*'
-			   * toggling a marked file was showing incorrect list
-			     (list was correct, but displayed matches weren't)
-			   * |g:netrw_special_syntax| implemented
-	v121: Feb 11, 2008 * Bram M reported that :e file ... :e . would not
-			     retain the alternate file.  Fixed -- I hope!
-			   * bugfix -- apparently v120 broke an explicit
-			     :Explore dirname
-	v120: Jan 21, 2008 * |netrw-mt| changed to allow for target selection
-	                     based on whether or not word under cursor is a
-			     directory or file, or if cursor is in banner
-			     area.
-			   * |netrw-mh| included (hiding by marked-file suffix)
-			   * functions moved about a bit (improved
-			     categorization)
-			   * executable files now displayed with trailing (*)
-			   * symbolically linked files now displayed with
-			     trailing (@)
-			   * Somewhen, s:NetrwMarkFileMove() got damaged.  It
-			   * is now restored (missing an endif, for example).
-			   * |netrw-mu| implemented (unmarking marked files)
-			   * many bugs have been removed from the marked file
-			     system (tnx to Mark S. for feedback)
-			   * |netrw-ms| implemented (sourcing marked files)
-			   * fixed use of P with tree listing style
-			   * multiple tree listing now supported
-			   * ./ suppressed
-			   * changed q -> qb (query bookmarks)
-			   * implemented |netrw-qf|
-			   * Explore now has four special list-generation
-			     modes: */filepat **/filepat
-			           *//pattern **//pattern
-			   * gh (|netrw-gh|) is a shortcut for toggling the
-			     hiding of files and directories beginning with a
-			     dot
-	v119: Jan 10, 2008 * When g:netrw_keepdir is false,
-			     NetrwOptionsRestore() had a problem
-			     (Bill McCarthy)
-	      Jan 11, 2008 * Netrw now shows symbolic links with a trailing
-	                     "@" and special highlighting.
-	      Jan 15, 2008 * Changed g:netrw_noretmap -> |g:netrw_retmap|.
-	                     Changed: disabled by default at Bram's
-			     preference.
-	v118: Jan 02, 2008 * Fixed a problem with Windows;
-			     :Explore c:/path/ would not work,
-			     but :Explore c:/path would.
-			   * Fixed a bug in s:NetrwOptionRestore() - lcd's
-			     argument wasn't being properly escaped so it
-			     wouldn't handle spaces in directory names.
-			     (Gary Johnson)
-	v117: Jan 02, 2008 * Fixed a problem with P; had to include
-			     a b:netrw_curdir bypass (Bram Moolenaar)
-	v116: Nov 27, 2007 * netrw#LocalBrowseCheck() has &ft=="netrw"
-			     check to prevent doing a directory listing
-			     (was getting unexpected directory refreshes
-			     in the middle of some function calls)
-			   * NetrwOptionRestore moved after e! filename
-			     in order to retain user options for editing
-			     in s:NetrwBrowseChgDir()
-	      Dec 12, 2007 * Bug fix -- netrw does a better job of retaining
-	                     user options when editing files under the aegis
-			     of the browser
-	v115: Oct 04, 2007 * Erik Remmelzwaal pointed out that the use of
-			     shellslash in s:GetTempfile() was incorrect
-	      Oct 11, 2007 * Tracked down and eliminated a bug with editing
-			     remote *.tar.gz and *.tar.bz2 files
-	      Oct 11, 2007 * g:netrw_localmovecmd wasn't being initialized
-			     properly, and g:netrw_localcopycmd was being
-			     overwritten.
-	      Oct 12, 2007 * Placed all :Rexplore and <2-leftmouse> setup
-			     in a new support function (s:SetRexDir()).
-	      Oct 15, 2007 * new: g:netrw_browse_split == 4; means <cr>
-			     based selection will use previous window
-	      Oct 20, 2007 * also checks on |'shellxquote'| to set g:netrw_shq
-	      Oct 24, 2007 * Explore handles path/**/filename
-	      Oct 27, 2007 * sourcing remote files often didn't work with ftp,
-	                     turns out that b:netrw_method was undefined, so
-			     s:SaveBufVars and s:RestoreBufVars() fixed it.
-	v114: Sep 28, 2007 * mT, the map that invokes tags, has been improved
-			     to support use of remote tags files.
-	      Oct 02, 2007 * changed Netrw menu to use more submenus
-	v113: Sep 07, 2007 * worked out why the cursor position wasn't being
-			     saved and restored as intended after doing such
-			     things as deleting and renaming files.
-	      Sep 11, 2007 * Fixed bug which effectively disabled <c-l> and
-			     <c-h> maps
-	      Sep 18, 2007 * there used to be one NetrwOptionRestore() call at
-			     the end of the s:NetrwBrowseChgDir() function;
-			     they're now at the end of every if..elseif..else
-			     block.  The edit-a-file one is not quite at the end
-			     of its block; instead, it's just before the edit.
-			     Restores user options, then this new placement
-			     allows ftplugins, autocmds, etc to change settings
-			     (ex. ftplugin/cpp.vim sets cindent).
-	      Sep 19, 2007 * changed all strlen() calls to use s:Strlen(), a
-			     function which handles utf-8 wide characters
-			     correctly.
-	      Sep 20, 2007 * (Nico Weber) the "x" command has been extended
-			     to Mac's OS/X (macunix); it now uses open to
-			     handle |netrw-x| browsing with special files.
-	      Sep 22, 2007 * Added g:netrw_noretmap to netrw at Tony M's
-			     request.
-			   * Included path to NetrwRemoteRmFile()
-	v112: Aug 18, 2007 * added mx (|netrw-mx|) for executing arbitrary
-			     commands on marked files
-	      Aug 22, 2007 * more option save/restore work for
-			     s:NetrwBrowseChgDir(); s:NetrwOptionSave()
-			     and s:NetrwOptionRestore() now take a parameter
-			     specifying the type of variables to be used for
-			     saving and restoring (either "w:" or "s:")
-	      Sep 04, 2007 * added the :NetrwClean[!] command
-	v111: Jul 25, 2007 * using Windows but not using Cygwin, netrw does a
-			     "file bufname" where the bufname uses /s
-			     instead of \s; Vim "fixes" it by changing the
-			     bufname to use \s anyway.  This meant that
-			     NetrwGetBuffer() didn't find the appropriately
-			     named buffer, and so would generate a new
-			     buffer listing; hence the cursor would appear
-			     to have been moved when doing a preview.
-			   * added <2-leftmouse> map to return to netrw's
-			     browser display
-	      Aug 16, 2007 * added the mark-file system, including
-			     maps for mf mp mt mz and mu.  Modifications
-			     made to maps for a D O and R to support
-			     marked files.
-	v110: May 10, 2007 * added [ and ] maps to NetrwTreeListing
-	      May 25, 2007 * |g:netrw_preview| included
-	      May 29, 2007 * modified netrw#NetBrowseX to consistently use
-			     g:netrw_shq instead of hardcoded quotes,
-			     and modified the snippet that sets up redir
-			     so Windows machines use "nul" instead of
-			     "/dev/null".
-	      Jun 01, 2007 * fixed bug -- NetGetBuffer() wasn't always
-			     recognizing a buffer name match when it should,
-			     thus resulting in [Scratch] buffers.
-	      Jun 04, 2007 * Gary Johnson found a bugfix for the "c" mapping
-			     when the directory is to be made current but
-			     the name contains spaces.
-	v109: Mar 26, 2007 * if a directory name includes a "$" character,
-			     Explore() will use expand() in an attempt to
-			     decipher the name.
-	      May 07, 2007 * g:netrw_use_errorwindow now allows one to
-			     have error messages go to a reliable window
-			     or to use a less reliable but recallable
-			     echoerr method
-	      May 07, 2007 * g:netrw_scpport and g:netrw_sshport support
-			     use of -P and -p, respectively, to set port
-			     for scp/ssh.
-	v108: Jan 03, 2007 * included preview map (|netrw-p|), supporting
-			     remote browsing
-			   * netrw can now source remote files
-	      Jan 26, 2007 * Colton Jamieson noted that remote directory
-			     browsing did not support alternate port
-			     selection.  This feature has now been extended
-			     to apply to all remote browsing commands via ssh.
-			     (list, remove/delete, rename)
-	      Jan 31, 2007 * Luis Florit reported that @* was an invalid
-			     register.  The @* register is now only saved and
-			     restored if |'guioptions'| contains "a".
-	      Feb 02, 2007 * Fixed a bug that cropped up when writing files
-			     via scp using cygwin
-	      Feb 08, 2007 * tree listing mode managed to stop working again;
-			     fixed again!
-	      Feb 15, 2007 * Guido Van Hoecke reported that netrw didn't
-			     handle browsing well with M$ ftp servers.  He even
-			     set up a temporary account for me to test with
-			     (thanks!).  Netrw now can browse M$ ftp servers.
-	v107: Oct 12, 2006 * bypassed the autowrite option
-	      Oct 24, 2006 * handles automatic decompression of *.gz and *.bz2
-			     files
-	      Nov 03, 2006 * Explore will highlight matching files when
-			     **/pattern is used (and if the |'hls'| option
-			     is set)
-	      Nov 09, 2006 * a debugging line, when enabled, was inadvertently
-			     bringing up help instead of simply reporting on
-			     list contents
-	      Nov 21, 2006 * tree listing improved (cursor remains put)
-	      Nov 27, 2006 * fixed b:netrw_curdir bug when repeated "i"s were
-			     pressed.
-	      Dec 15, 2006 * considerable qty of changes, mostly to share more
-			     code between local and remote browsing.  Includes
-			     support for tree-style listing for both remote
-			     and local browsing.
-	      Dec 15, 2006 * Included Peter Bengtsson's modifications to
-			     support the Amiga.
-	v106: Sep 21, 2006 * removed old v:version<700 code as netrw now
-			     requires vim 7.0
-			   * worked around a bug where register * was
-			     overwritten during local browsing
-	v104: Sep 05, 2006 * as suggested by Rodolfo Borges, :Explore and
-			     variants will position the cursor on the file
-			     just having been edited
-			   * changed default |g:netrw_sort_sequence| order
-			   * changed b, Nb to simply mb  (see |netrw-mb|)
-			   * changed B, NB to simply gb  (see |netrw-gb|)
-			   * tree listing style (see |g:netrw_liststyle|)
-			   * attempts to retain the alternate file
-	v103: Jul 26, 2006 * used Yakov Lerner's tip#1289 to improve netrw
-			     error message display
-			   * wide listings didn't handle files with backslashes
-			     in their names properly.  A symptom was an
-			     inability to open files.
-	      Aug 09, 2006 * included "t" mapping for opening tabbed windows,
-			    both for remote and local browsing
-			   * changed netrw_longlist to netrw_liststyle
-	      Aug 15, 2006 * fixed one of the NB maps
-	      Aug 22, 2006 * changed *Explore commands to use -nargs=* instead
-			     of -nargs=?.  Allows both -complete=dir _and_ the
-			     starstar arguments to work (-nargs=? seems to
-			     require one or the other).
-	      Aug 23, 2006 * copied all w:.. variables across splits to
-			     new windows
-	      Aug 25, 2006 * when g:netrw_browsex_viewer was '-'
-			     (see |g:netrw_browsex_viewer|) it wasn't causing
-			     netrwFileHandlers#Invoke() to be called as it
-			     was expected to.  (tnx Steve Dugaro)
-	      Aug 29, 2006 * changed NetBrowseX() to use "setlocal ... noswf"
-			     instead of "set ... noswf"  (tnx Benji Fisher)
-	      Aug 31, 2006 * tabs and fastbrowse<=1 didn't work together.
-	v102: Jun 15, 2006 * chgd netrwPlugin to call netrw#LocalBrowseCheck()
-			   * bugfix: g:netrw_keepdir==0 had stopped working
-	      Jul 06, 2006 * bugfix: NetOptionSave/Restore now saves/restores
-			     the unnamed register (|registers|)
-	      Jul 07, 2006 * |g:netrw_menu| support included
-	      Jul 13, 2006 * :Texplore command implemented
-	      Jul 17, 2006 * NetSplit and (Local|Net)BrowseChgDir() were both
-			     splitting windows.  This affected o, v, and
-			     g:netrw_browse_split.
-	      Jul 20, 2006 * works around wildignore setting (was causing
-			     netrw's local browser not to list wildignore'd
-			     files)
-	      Jul 24, 2006 * <leftmouse> acts as a <cr> for selecting a file
-			     <rightmouse> acts as a <del> for deleting a file
-	v100: May 14, 2006 * when using Windows and shell==cmd.exe, the
-			     default for g:netrw_ignorenetrc is now 1
-			   * bugfix: unwanted ^Ms now removed
-			     (affected shell==cmd.exe - Windows)
-			   * added Bookmarks and History to the menu
-			   * an error message about non-existing
-			     w:netrw_longlist was appearing during attempts to
-			     Explore (fixed)
-			   * g:netrw_shq now available to make netrw use
-			     specified style of quotes for commands
-	     May 29, 2006  * user NFH_*() functions were inadvertently being
-			     ignored
-			   * fixed a Windows non-cygwin ftp handling problem.
-			   * hiding pattern candidate separators included some
-			     characters it shouldn't have (tnx to Osei Poku)
-	     Jun 01, 2006  * for browsing, netrw was supposed to use "dir"
-			     instead of "ls -lF" when using
-			     ftp+non-cygwin+windows.  Fixed.
-			   * an inadvertently left-in-place debugging statement
-			     was preventing use of the "x" key with browsing.
-	     Jun 05, 2006  * g:netrw_nogx available to prevent making the gx
-			     map (see |g:netrw_nogx|)
-			   * bugfix, Explore wouldn't change directory
-			     properly (vim ., :Explore subdirname)
-	     Jun 06, 2006  * moved history to 2nd line in Netrw menu
-			   * fixed delete for unix-based systems
-	     Jun 07, 2006  * x key now works for windows-noncygwin-ftp
-	     Jun 08, 2006  * Explore */pat and **//pat now wraps
-	v99: May 09, 2006  * g:netrw_browse_split=3 for opening files in new
-			     tabs implemented.
-	     May 12, 2006  * deletes temporary file at end of NetRead()
-			   * visual mode based Obtain implemented
-			   * added -complete=dir to the various Explore
-			     commands
-	v98: May 02, 2006  * the "p" key didn't work properly when the browsing
-			     directory name had spaces in it.
-	v97: May 01, 2006  * exists("&acd") now used to determine if
-			     the 'acd' option exists
-			   * "obtain" now works again under Windows
-	v96:		   * bugfix - the |'acd'| option is not always defined
-			     but is now bypassed only when it is
-	v95:		   * bugfix - Hiding mode worked correctly (don't show
-			     any file matching any of the g:netrw_hide
-			     patterns), but showing mode was showing only those
-			     files that didn't match any of the g:netrw_hide
-			     patterns.  Instead, it now shows all files that
-			     match any of the g:netrw_hide patterns (the
-			     difference between a logical and and logical or).
-	v94:		   * bugfix - a Decho() had a missing quote; only
-			     affects things when debugging was enabled.
-	v93:		   * bugfix - removed FocusGained event from causing a
-			     slow-browser refresh for Windows
-	v92:		   * :Explore **//pattern implemented
-			      (**/filepattern was already taken)
-	v91:		   * :Explore */pattern implemented
-			   * |'acd'| option bypassed
-	v90:		   * mark ', as suggested by Yegappan Lakshmanan, used
-			     to help guarantee entry into the jump list when
-			     appropriate.
-			   * <s-down> and <s-up> are no longer defined until a
-			     :Explore **/pattern  is used (if the user already
-			     has a map for them).  They will be defined for new
-			     browser windows from that point forward.
-	v89:		   * A <s-down>, <s-up>, :Nexplore, or a :Pexplore
-			     without having first done an :Explore **/pattern
-			     (see |netrw-starstar|) caused
-			     a lot of unhelpful error messages to appear
-	v88:		   * moved DrChip.Netrw menu to Netrw.  Now has
-			     priority 80 by default.
-			     g:NetrwTopLvlMenu == "Netrw" and can be changed
-			     by the user to suit.  The priority is given by
-			     g:NetrwMenuPriority.
-			   * Changed filetype for browser displays from
-			     netrwlist to netrw.
-	v87:		   * bug fix -- menus were partially disappearing
-	v85:		   * bug fix -- missing an endif
-			   * bug fix -- handles spaces in names and directories
-			     when using ftp-based browsing
-	v83:		   * disabled stop-acd handling; the change in directory
-			     handling may allow acd to be used again.
-			   * D was refusing to delete remote files/directories
-			     in wide listing mode.
-	v81:		   * FocusGained also used to refresh/wipe local browser
-			     directory buffers
-			   * (bugfix) netrw was leaving [Scratch] buffers behind
-			     when the user had the "hidden" option set.  The
-			     'hidden' option is now bypassed.
-	v80:		   * ShellCmdPost event used in conjunction with
-			     g:netrw_fastbrowse to refresh/wipe local browser
-			     directory buffers.
-	v79:		   * directories are now displayed with nowrap
-			   * (bugfix) if the column width was smaller than the
-			     largest file's name, then netrw would hang when
-			     using wide-listing mode - fixed
-			   * g:netrw_fastbrowse introduced
-	v78:		   * progress has been made on allowing spaces inside
-			     directory names for remote work (reading, writing,
-			     browsing).  (scp)
-	v77:		   * Mikolaj Machowski fixed a bug in a substitute cmd
-			   * g:netrw_browsex_viewer implemented
-			   * Mikolaj Machowski pointed out that gnome-open is
-			     often executable under KDE systems, although it is
-			     effectively not functional.  NetBrowseX now looks
-			     for "kicker" as a running process to determine if
-			     KDE is actually running.
-			   * Explorer's O functionality was inadvertently left
-			     out.  Netrw now does the same thing, but with the
-			     "P" key.
-			   * added g:netrw_browse_split option
-			   * fixed a bug where the directory contained a "." but
-			     the file didn't (was treating the dirname from "."
-			     onwards as a suffix)
-	v76:		   * "directory is missing" error message now restores
-			      echo highlighting
-	v75:		   * file://... now conforms to RFC2396 (thanks to
-			     S. Zacchiroli)
-			   * if the binary option is set, then NetWrite() will
-			     only write the whole file (line numbers don't make
-			     sense with this).  Supports writing of tar and zip
-			     files.
-	v74:		   * bugfix (vim, then :Explore) now works
-			   * ctrl-L keeps cursor at same screen location (both
-			     local and remote browsing)
-			   * netrw now can read remote zip and tar files
-			   * Obtain now uses WinXP ftp+.netrc successfully
-	v73:		   * bugfix -- scp://host/path/file was getting named
-			     incorrectly
-			   * netrw detects use of earlier-than-7.0 version of
-			     vim and issues a pertinent error message.
-			   * netrwSettings.vim is now uses autoloading.  Only
-			     <netrwPlugin.vim> is needed as a pure plugin
-			     (ie. always loaded).
-	v72:		   * bugfix -- formerly, one could prevent the loading
-			     of netrw by "let g:loaded_netrw=1"; when
-			     autoloading became supported, this feature was
-			     lost.  It is now restored.
-	v71:		   * bugfix -- made some "set nomodifiable"s into
-			     setlocal variants (allows :e somenewfile  to be
-			     modifiable as usual)
-			   * NetrwSettings calls a netrw function, thereby
-			     assuring that netrw has loaded.  However, if netrw
-			     does not load for whatever reason, then
-			     NetrwSettings will now issue a warning message.
-			   * For what reason I don't recall, when wget and fetch
-			     are both not present, and an attempt to read a
-			     http://... url is made, netrw exited.  It now only
-			     returns.
-			   * When ch=1, on the second and subsequent uses of
-			     browsing Netrw would issue a blank line to clear
-			     the echo'd messages.  This caused an annoying
-			     "Hit-Enter" prompt; now a blank line message
-			     is echo'd only if &ch>1.
-	v70:		   * when using |netrw-O|, the "Obtaining filename"
-			     message is now shown using |hl-User9|.  If User9
-			     has not been defined, netrw itself will define it.
-	v69:		   * Bugfix: win95/98 machines were experiencing a
-			     "E121: Undefined variable: g:netrw_win95ftp"
-			     message
-	v68:		   * double-click-leftmouse selects word under mouse
-	v67:		   * Passwords which contain blanks will now be
-			     surrounded by double-quotes automatically (Yongwei)
-	v66:		   * Netrw now seems to work with a few more Windows
-			     situations
-			   * O now obtains a file: remote browsing
-			     file -> local copy, locally browsing
-			     file -> current directory (see :pwd)
-			   * i now cycles between thin, long, and wide listing
-			     styles
-			   * NB and Nb are maps that are always available;
-			     corresponding B and b maps are only available when
-			     not using wide listing in order to allow them to
-			     be used for motions
-	v65:		   * Browser functions now use NetOptionSave/Restore; in
-			     particular, netrw now works around the report
-			     setting
-	v64:		   * Bugfix - browsing a "/" directory (Unix) yielded
-			     buffers named "[Scratch]" instead of "/"
-			   * Bugfix - remote browsing with ftp was omitting
-			     the ./ and ../
-	v63:		   * netrw now takes advantage of autoload (needs 7.0)
-			   * Bugfix - using r (to reverse sort) working again
-	v62:		   * Bugfix - spaces allowed again in directory names
-			     with g:netrw_keepdir=0.  In fact, I've tested netrw
-			     with most ANSI punctuation marks for directory
-			     names.
-			   * Bugfix - NetrwSettings gave errors when
-			     g:netrw_silent had not be set.
-	v61:		   * Document upgrade -- netrw variable-based settings
-			     all should have tags.  Supports NetrwSettings cmd.
-			   * Several important variables are window-oriented.
-			     Netrw has to transfer these across a window split.
-			     See s:BufWinVars() and s:UseBufWinVars().
-	v60:		   * When using the i map to switch between long and
-			     short listings, netrw will now keep cursor on same
-			     line
-			   * "Match # of #" now uses status line
-			   * :Explore **/*.c  will now work from a
-			     non-netrw-browser window
-			   * :Explore **/patterns can now be run in separate
-			     browser windows
-			   * active banner (hit <cr> will cause various things
-			     to happen)
-	v59:		   * bugfix -- another keepalt work-around installed
-			     (for vim6.3)
-			   * "Match # of #" for Explore **/pattern matches
-	v58:		   * Explore and relatives can now handle
-			     **/somefilepattern (v7)
-			   * Nexplore and Pexplore introduced (v7).  shift-down
-			     and shift-up cursor keys will invoke Nexplore and
-			     Pexplore, respectively.
-			   * bug fixed with o and v
-			   * autochdir only worked around for vim when it has
-			     been compiled with either
-			     |+netbeans_intg| or |+sun_workshop|
-			   * Under Windows, all directories and files were
-			     being preceded with a "/" when local browsing.
-			     Fixed.
-			   * When: syntax highlighting is off, laststatus=2, and
-			     remote browsing is used, sometimes the laststatus
-			     highlighting bleeds into the entire display.  Work
-			     around - do an extra redraw in that case.
-			   * Bugfix: when g:netrw_keepdir=0, due to re-use of
-			     buffers, netrw didn't change the directory when it
-			     should've
-			   * Bugfix: D and R commands work again
-	v57:		   * Explore and relatives can now handle RO files
-			   * reverse sort restored with vim7's sort command
-			   * g:netrw_keepdir now being used to keep the current
-			     directory unchanged as intended (sense change)
-			   * vim 6.3 still supported
-	v56:		   * LocalBrowse now saves autochdir setting, unsets it,
-			     and restores it before returning.
-			   * using vim's rename() instead of system +
-			     local_rename variable
-			   * avoids changing directory when g:netrw_keepdir is
-			     false
-	v55:		   * -bar used with :Explore :Sexplore etc to allow
-			     multiple commands to be separated by |s
-			   * browser listings now use the "nowrap" option
-			   * browser: some unuseful error messages now
-			     suppressed
-	v54:		   * For backwards compatibility, Explore and Sexplore
-			     have been implemented.  In addition, Hexplore and
-			     Vexplore commands are available, too.
-			   * <amatch> used instead of <afile> in the
-			     transparency support (BufReadCmd, FileReadCmd,
-			     FileWriteCmd)
-			   * ***netrw*** prepended to various error messages
-			     netrw may emit
-			   * g:netrw_port used instead of b:netrw_port for scp
-			   * any leading [:#] is removed from port numbers
-	v53:		   * backslashes as well as slashes placed in various
-			     patterns (ex. g:netrw_sort_sequence) to better
-			     support Windows
-	v52:		   * nonumber'ing now set for browsing buffers
-			   * when the hiding list hid all files, error messages
-			     ensued. Fixed
-			   * when browsing, swf is set, but directory is not
-			     set, when netrw was attempting to restore options,
-			     vim wanted to save a swapfile to a local directory
-			     using an url-style path.  Fixed
-	v51:		   * cygwin detection now automated
-			     (using windows and &shell is bash)
-			   * customizable browser "file" rejection patterns
-			   * directory history
-			   * :[range]w url  now supported (ie. netrw uses a
-			     FileWriteCmd event)
-			   * error messages have a "Press <cr> to continue" to
-			     allow them to be seen
-			   * directory browser displays no longer bother the
-			     swapfile
-			   * u/U commands to go up and down the history stack
-			   * history stack may be saved with viminfo with it's
-			     "!" option
-			   * bugfixes associated with unwanted [No Files]
-			     entries
-	v50:		   * directories now displayed using buftype=nofile;
-			     should keep the directory names as-is
-			   * attempts to remove empty "[No File]" buffers
-			     leftover from :file ..name.. commands
-			   * bugfix: a "caps-lock" editing difficulty left in
-			     v49 was fixed
-			   * syntax highlighting for "Showing:" the hiding list
-			     included
-			   * bookmarks can now be retained if "!" is in the
-			     viminfo option
-	v49:		   * will use ftp for http://.../ browsing
-	v48:		   * One may use ftp to do remote host file browsing
-			   * (windows and !cygwin) remote browsing with ftp can
-			     now use the "dir" command internally to provide
-			     listings
-			   * g:netrw_keepdir now allows one to keep the initial
-			     current directory as the current directory
-			     (normally the local file browser makes the
-			     currently viewed directory the current directory)
-			   * g:netrw_alto and g:netrw_altv now support
-			     alternate placement of windows started with o or v
-			   * Nread ? and Nwrite ?  now uses echomsg (instead of
-			     echo) so :messages can repeat showing the help
-			   * bugfix: avoids problems with partial matches of
-			     directory names to prior buffers with longer names
-			   * one can suppress error messages with g:netrw_quiet
-			     ctrl-h used
-			   * instead of <Leader>h for editing hiding list one
-			     may edit the sorting sequence with the S map, which
-			     now allows confirmation of deletion with
-			     [y(es) n(o) a(ll) q(uit)]
-			   * the "x" map now handles special file viewing with:
-			     (windows) rundll32 url.dll (gnome) gnome-open (kde)
-			     kfmclient If none of these are on the executable
-			     path, then netrwFileHandlers.vim is used.
-			   * directory bookmarking during both local and remote
-			     browsing implemented
-			   * one may view all, use the hiding list to suppress,
-			     or use the hiding list to show-only remote and
-			     local file/directory listings
-			   * improved unusual file and directory name handling
-			     preview window support
-	v47:		   * now handles local browsing.
-	v46:		   * now handles remote browsing
-			   * g:netrw_silent (if 1) will cause all transfers to
-			     be silent
-	v45:		   * made the [user@]hostname:path form a bit more
-			     restrictive to better handle errors in using
-			     protocols (e.g. scp:usr@host:file was being
-			     recognized as an rcp request)
-	v44:		   * changed from "rsync -a" to just "rsync"
-			   * somehow an editing error messed up the test to
-			     recognize use of the fetch method for NetRead.
-			   * more debugging statements included
-	v43:		   * moved "Explanation" comments to <pi_netrw.txt> help
-			     file as "Network Reference" (|netrw-ref|)
-			   * <netrw.vim> now uses Dfunc() Decho() and Dret() for
-			     debugging
-			   * removed superfluous NetRestorePosn() calls
-	v42:		   * now does BufReadPre and BufReadPost events on
-			     file:///* and file://localhost/*
-	v41:		   * installed file:///* and file://localhost/* handling
-	v40:		   * prevents redraw when a protocol error occurs so
-			     that the user may see it
-	v39:		   * sftp support
-	v38:		   * Now uses NetRestorePosn() calls with Nread/Nwrite
-			     commands
-			   * Temporary files now removed via bwipe! instead of
-			     bwipe (thanks to Dave Roberts)
-	v37:		   * Claar's modifications which test if ftp is
-			     successful, otherwise give an error message
-			   * After a read, the alternate file was pointing to
-			     the temp file.  The temp file buffer is now wiped
-			     out.
-			   * removed silent from transfer methods so user can
-			     see what's happening
+	v149:	Apr 18, 2013	* in wide listing format, now have maps for
+				  w and b to move to next/previous file
+		Apr 26, 2013	* one may now copy files in the same
+				  directory; netrw will issue requests for
+				  what names the files should be copied under
+		Apr 29, 2013	* Trying Benzinger's problem again.  Seems
+				  that commenting out the BufEnter and
+				  installing VimEnter (only) works.  Weird
+				  problem!  (tree listing, vim -O Dir1 Dir2)
+		May 01, 2013	* :Explore ftp://... wasn't working.  Fixed.
+		May 02, 2013	* introduced |g:netrw_bannerbackslash| as
+				  requested by Paul Domaskis.
+		May 18, 2013	* More fixes for windows (not cygwin)
+	v148:	Apr 16, 2013	* changed Netrw's Style menu to allow direct
+				  choice of listing style, hiding style, and
+				  sorting style
+	v147:	Nov 24, 2012	* (James McCoy) Even with g:netrw_dirhistmax
+				  at zero, the .vim/ directory would be
+				  created to support history/bookmarks.  I've
+				  gone over netrw to suppress history and
+				  bookmarking when g:netrw_dirhistmax is zero.
+				  For instance, the menus will display
+				  (disabled) when attempts to use
+				  bookmarks/history are made.
+		Nov 29, 2012	* (Kim Jang-hwan) reported that with
+				  g:Align_xstrlen set to 3 that the cursor was
+				  moved (linewise) after invocation.  This
+				  problem also afflicted netrw.
+				  (see |g:netrw_xstrlen|) Fixed.
+		Jan 21, 2013	* (mattn) provided a patch to insert some
+				  endifs needed with the code implementing
+				  |netrw-O|.
+		Jan 24, 2013	* (John Szakmeister) found that remote file
+				  editing resulted in filetype options being
+				  overwritten by NetrwOptionRestore().  I
+				  moved filetype detect from NetrwGetFile()
+				  to NetrwOptionRestore.
+		Feb 17, 2013	* (Yukhiro Nakadaira) provided a patch
+				  correcting some syntax errors.
+		Feb 28, 2013	* (Ingo Karkat) provided a patch preventing
+				  receipt of an |E95| when revisiting a
+				  file://... style url.
+		Mar 18, 2013	* (Gary Johnson) pointed out that changing
+				  cedit to <Esc> caused problems with visincr;
+				  the cedit setting is now bypassed in netrw too.
+		Apr 02, 2013	* (Paul Domaskis) reported an undefined
+				  variable error (s:didstarstar) was
+				  occurring.  It is now defined at
+				  initialization.
+				* included additional sanity checking for the
+				  marked file functions.
+				* included |netrw-qF| and special "j" option
+				  handling for |netrw-mg|
+		Apr 12, 2013	* |netrw-u| and |netrw-U| now handle counts
+				* the former mapping for "T" has been removed;
+				  in its place are new maps, |netrw-Tb| and |netrw-Th|.
+				* the menu now supports a "Targets" entry for
+				  easier target selection. (see |netrw-mt|)
+				* (Paul Domaskis) reported some problems with
+				  moving/copying files under Windows' gvim
+				  (ie. not cygwin).  Fixed.
+				* (Paul Mueller) provided a patch to get
+				  start and rundll working via |netrw-gx|
+				  by bypassing the user's |'shellslash'| option.
+	v146:	Oct 20, 2012	* (David Kotchan) reported that under Windows,
+				  directories named with unusual characters
+				  such as "#" or "$" were not being listed
+				  properly.
+				* (Kenny Lee) reported that the buffer list
+				  was being populated by netrw buffers.
+				  Netrw will now |:bwipe| netrw buffers
+				  upon editing a file if g:netrw_fastbrowse
+				  is zero and its not in tree listing style.
+				* fixed a bug with s:NetrwInit() that
+				  prevented initialization with |Lists| and
+				  |Dictionaries|.
+				* |netrw-mu| now unmarks marked-file lists
+	v145:	Apr 05, 2012	* moved some command from a g:netrw_local_...
+				  format to g:netwr_local... format
+				* included some NOTE level messages about
+				  commands that aren't executable
+				* |g:netrw_errorlvl| (default: NOTE=0)
+				  option introduced
+		May 18, 2012	* (Ilya Dogolazky) a scenario where a
+				  |g:netrw_fastbrowse| of zero did not
+				  have a local directory refreshed fixed.
+		Jul 10, 2012	* (Donatas) |netrw-gb| wasn't working due
+				  to an incorrectly used variable.
+		Aug 09, 2012	* (Bart Baker) netrw was doubling
+				  of entries after a split.
+				* (code by Takahiro Yoshihara) implemented
+				  |g:netrw_dynamic_maxfilenamelen|
+		Aug 31, 2012	* (Andrew Wong) netrw refresh overwriting
+				  the yank buffer.
+	v144: Mar 12, 2012	* when |CTRL-W_s| or |CTRL-W_v| are used,
+				  or their wincmd equivalents, on a netrw
+				  buffer, the netrw's w: variables were
+				  not copied over.  Fixed.
+		Mar 13, 2012	* nbcd_curpos_{bufnr('%')} was commented
+				  out, and was mistakenly used during
+				  RestorePosn.  Unfortunately, I'm not
+				  sure why it was commented out, so this
+				  "fix" may re-introduce an earlier problem.
+		Mar 21, 2012	* included s:rexposn internally to make
+				  :Rex return the cursor to the same pos'n
+				  upon restoration of netrw buffer
+		Mar 27, 2012	* (sjbesse) s:NetrwGetFile() needs to remove
+				  "/" from the netrw buffer's usual |'isk'|
+				  in order to allow "filetype detect" to work
+				  properly for scripts.
+	v143: Jun 01, 2011	* |g:netrw_winsize| will accept a negative
+				  number; the absolute value of it will then
+				  be used to specify lines/columns instead of
+				  a percentage.
+		Jul 05, 2011	* the "d" map now supports mkdir via ftp
+				  See |netrw-d| and |g:netrw_remote_mkdir|
+		Jul 11, 2011	* Changed Explore!, Sexplore!, and Vexplore
+				  to use a percentage of |winwidth()| instead
+				  of a percentage of |winheight()|.
+		Jul 11, 2011	* included support for https://... I'm just
+				  beginning to test this, however.
+		Aug 01, 2011	* changed RestoreOptions to also restore
+				  cursor position in netrw buffers.
+		Aug 12, 2011	* added a note about "%" to the balloon
+		Aug 30, 2011	* if |g:netrw_nobeval| exists, then balloon
+				  evaluation is suppressed.
+		Aug 31, 2011	* (Benjamin R Haskell) provided a patch that
+				  implements non-standard port handling for
+				  files opened via the remote browser.
+		Aug 31, 2011	* Fixed a **//pattern  Explorer bug
+		Sep 15, 2011	* (reported by Francesco Campana) netrw
+				  now permits the "@" to be part of the
+				  user id (if there's an @ that appears
+				  to the right).
+		Nov 21, 2011	* New option: |g:netrw_ftp_options|
+		Dec 07, 2011	* (James Sinclair) provided a fix handling
+				  attempts to use a uid and password when
+				  they weren't defined.  This affected
+				  NetWrite (NetRead already had that fix).
 
 
 ==============================================================================
diff -Naur vim73.orig/runtime/doc/pi_paren.txt vim73/runtime/doc/pi_paren.txt
--- vim73.orig/runtime/doc/pi_paren.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/pi_paren.txt	2013-08-04 19:09:07.950618525 +0000
@@ -1,4 +1,4 @@
-*pi_paren.txt*  For Vim version 7.3.  Last change: 2008 Jun 16
+*pi_paren.txt*  For Vim version 7.3.  Last change: 2013 May 08
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -46,7 +46,10 @@
   closed folds.
 - 'synmaxcol' times 2 bytes before or after the cursor to avoid a delay
   in a long line with syntax highlighting.
-
+- A timeout of 300 msec (60 msec in Insert mode). This can be changed with the
+  g:matchparen_timeout and g:matchparen_insert_timeout variables and their
+  buffer-local equivalents b:matchparen_timeout and
+  b:matchparen_insert_timeout.
 
 If you would like the |%| command to work better, the matchit plugin can be
 used, see |matchit-install|.  This plugin also helps to skip matches in
diff -Naur vim73.orig/runtime/doc/pi_tar.txt vim73/runtime/doc/pi_tar.txt
--- vim73.orig/runtime/doc/pi_tar.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/pi_tar.txt	2013-08-04 19:09:07.953951848 +0000
@@ -1,14 +1,21 @@
-*pi_tar.txt*	For Vim version 7.3.  Last change: 2010 Aug 09
+*pi_tar.txt*	For Vim version 7.3.  Last change: 2013 Apr 17
 
 		       +====================+
 		       | Tar File Interface |
 		       +====================+
 
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
-Copyright 2005-2010: The GPL (gnu public license) applies to	*tar-copyright*
-	   tar.vim, tarPlugin.vim, and pi_tar.txt.
-	   No warranty, express or implied.  Use At-Your-Own-Risk.
+Copyright 2005-2012:					*tar-copyright*
+	The VIM LICENSE (see |copyright|) applies to the files in this
+	package, including tarPlugin.vim, tar.vim, and pi_tar.txt.  Like
+	anything else that's except use "tar.vim" instead of "VIM".  Like
+	anything else that's free, tar.vim and its associated files are
+	provided *as is* and comes with no warranty of any kind, either
+	expressed or implied.  No guarantees of merchantability.  No
+	guarantees of suitability for any purpose.  By using this plugin, you
+	agree that in no event will the copyright holder be liable for any
+	damages resulting from the use of this software. Use at your own risk!
 
 ==============================================================================
 1. Contents					*tar* *tar-contents*
@@ -43,6 +50,21 @@
 	*g:tar_extractcmd* , which by default is >
 		"tar -xf"
 <
+						*:TarDiff*
+   DIFFERENCING SUPPORT~
+
+   :TarDiff [filename]
+
+	This command will attempt to show the differences between the tarball
+	version of a file and the associated file on the system.  In order to
+	find that file on the system, the script uses the path associated with
+	the file mentioned in the tarball.  If the current directory is not
+	correct for that path, :TarDiff will fail to find the associated file.
+
+	If the [filename] is given, that that filename (and path) will be used
+	to specify the associated file.
+
+
    PREVENTING LOADING~
 
    If for some reason you do not wish to use vim to examine tar'd files,
@@ -83,8 +105,13 @@
 4. History						*tar-history*
 
 
+   v28 Jun 23, 2011 * a few more decompression options (tbz tb2 txz)
+   v27 May 31, 2011 * moved cygwin detection before g:tar_copycmd handling
+   		    * inserted additional |:keepj| modifiers
+		    * changed silent  to  sil!  (|:silent|)
    v26 Aug 09, 2010 * uses buffer-local instead of window variables to hold
 		      tarfile name
+		    * inserted keepj before 0d to protect jump list
    v25 Jun 19, 2010 * (Jan Steffens) added support for xz compression
    v24 Apr 07, 2009 * :Untarvim command implemented
        Sep 28, 2009 * Added lzma support
diff -Naur vim73.orig/runtime/doc/pi_vimball.txt vim73/runtime/doc/pi_vimball.txt
--- vim73.orig/runtime/doc/pi_vimball.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/pi_vimball.txt	2013-08-04 19:09:07.957285172 +0000
@@ -1,4 +1,4 @@
-*pi_vimball.txt*	For Vim version 7.3.  Last change: 2010 Apr 12
+*pi_vimball.txt*	For Vim version 7.3.  Last change: 2012 Jan 17
 
 			       ----------------
 			       Vimball Archiver
@@ -6,16 +6,22 @@
 
 Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
-Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.	*Vimball-copyright*
-	   The VIM LICENSE applies to Vimball.vim, and Vimball.txt
-	   (see |copyright|) except use "Vimball" instead of "Vim".
-	   No warranty, express or implied.
-	   Use At-Your-Own-Risk!
+Copyright: (c) 2004-2012 by Charles E. Campbell, Jr.	*Vimball-copyright*
+	The VIM LICENSE (see |copyright|) applies to the files in this
+	package, including vimballPlugin.vim, vimball.vim, and pi_vimball.txt.
+	except use "vimball" instead of "VIM".  Like anything else that's free,
+	vimball.vim and its associated files are provided *as is* and comes with
+	no warranty of any kind, either expressed or implied.  No guarantees
+	of merchantability.  No guarantees of suitability for any purpose.  By
+	using this plugin, you agree that in no event will the copyright
+	holder be liable for any damages resulting from the use of this
+	software. Use at your own risk!
 
 ==============================================================================
 1. Contents				*vba* *vimball* *vimball-contents*
 
 	1. Contents......................................: |vimball-contents|
+	2. Vimball Introduction..........................: |vimball-intro|
 	3. Vimball Manual................................: |vimball-manual|
 	   MkVimball.....................................: |:MkVimball|
 	   UseVimball....................................: |:UseVimball|
@@ -176,6 +182,24 @@
 ==============================================================================
 4. Vimball History					*vimball-history* {{{1
 
+	34 : Sep 22, 2011 * "UseVimball path" now supports a non-full path by
+			    prepending the current directory to it.
+	33 : Apr 02, 2011 * Gave priority to *.vmb over *.vba
+			  * Changed silent! to sil! (shorter)
+			  * Safed |'swf'| setting (during vimball extraction,
+			    its now turned off)
+	32 : May 19, 2010 * (Christian Brabrandt) :so someplugin.vba and
+			    :so someplugin.vba.gz (and the other supported
+			    compression types) now works
+			  * (Jan Steffens) added support for xz compression
+			  * fenc extraction was erroneously picking up the
+			    end of the line number when no file encoding
+			    was present.  Fixed.
+			  * By request, beginning the switchover from the vba
+			    extension to vmb.  Currently both are supported;
+			    MkVimball, however, now will create *.vmb files.
+	     Feb 11, 2011 * motoyakurotsu reported an error with vimball's
+			    handling of zero-length files
 	30 : Dec 08, 2008 * fnameescape() inserted to protect error
 			    messaging using corrupted filenames from
 			    causing problems
@@ -199,6 +223,8 @@
 			    causing problems as reported by Zhang Shuhan
 	24 : Nov 15, 2007 * g:vimball_path_escape used by s:Path() to
 	                    prevent certain characters from causing trouble
+			    (defunct: |fnameescape()| and |shellescape()|
+			    now used instead)
 	22 : Mar 21, 2007 * uses setlocal instead of set during BufEnter
 	21 : Nov 27, 2006 * (tnx to Bill McCarthy) vimball had a header
 	                    handling problem and it now changes \s to /s
diff -Naur vim73.orig/runtime/doc/pi_zip.txt vim73/runtime/doc/pi_zip.txt
--- vim73.orig/runtime/doc/pi_zip.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/pi_zip.txt	2013-08-04 19:09:07.957285172 +0000
@@ -1,30 +1,31 @@
-*pi_zip.txt*	For Vim version 7.3.  Last change: 2010 Apr 12
+*pi_zip.txt*	For Vim version 7.3.  Last change: 2013 Apr 17
 
 				+====================+
 				| Zip File Interface |
 				+====================+
 
-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
 	  (remove NOSPAM from Campbell's email first)
-Copyright: Copyright (C) 2005-2009 Charles E Campbell, Jr *zip-copyright*
-           Permission is hereby granted to use and distribute this code,
-	   with or without modifications, provided that this copyright
-	   notice is copied with it. Like anything else that's free,
-	   zip.vim, zipPlugin.vim, and pi_zip.txt are provided *as is*
-	   and it comes with no warranty of any kind, either expressed or
-	   implied. By using this plugin, you agree that in no event will
-	   the copyright holder be liable for any damages resulting from
-	   the use of this software.
+Copyright: Copyright (C) 2005-2012 Charles E Campbell	 *zip-copyright*
+	The VIM LICENSE (see |copyright|) applies to the files in this
+	package, including zipPlugin.vim, zip.vim, and pi_zip.vim.  except use
+	"zip.vim" instead of "VIM".  Like anything else that's free, zip.vim
+	and its associated files are provided *as is* and comes with no
+	warranty of any kind, either expressed or implied.  No guarantees of
+	merchantability.  No guarantees of suitability for any purpose.  By
+	using this plugin, you agree that in no event will the copyright
+	holder be liable for any damages resulting from the use of this
+	software. Use at your own risk!
 
 ==============================================================================
-1. Contents					*zip* *zip-contents*
+1. Contents						*zip* *zip-contents*
    1. Contents................................................|zip-contents|
    2. Usage...................................................|zip-usage|
    3. Additional Extensions...................................|zip-extension|
    4. History.................................................|zip-history|
 
 ==============================================================================
-2. Usage					*zip-usage* *zip-manual*
+2. Usage						*zip-usage* *zip-manual*
 
    When one edits a *.zip file, this plugin will handle displaying a
    contents page.  Select a file to edit by moving the cursor atop
@@ -64,17 +65,16 @@
 
    If for some reason you do not wish to use vim to examine zipped files,
    you may put the following two variables into your <.vimrc> to prevent
-   the tar plugin from loading: >
+   the zip plugin from loading: >
 
 	let g:loaded_zipPlugin= 1
 	let g:loaded_zip      = 1
 <
-<
 
 ==============================================================================
 3. Additional Extensions					*zip-extension*
 
-   Apparently there are a number of archivers who generate zip files that
+   Apparently there are a number of archivers which generate zip files that
    don't use the .zip extension (.jar, .xpi, etc).  To handle such files,
    place a line in your <.vimrc> file: >
 
@@ -84,7 +84,18 @@
    should be treated as zip files.
 
 ==============================================================================
-4. History					*zip-history* {{{1
+4. History							*zip-history* {{{1
+   v26 Nov 15, 2012 * (Jason Spiro) provided a lot of new extensions that
+		      are synonyms for .zip
+   v25 Jun 27, 2011 * using keepj with unzip -Z
+		      (consistent with the -p variant)
+		    * (Ben Staniford) now uses
+			has("win32unix") && executable("cygpath")
+		      before converting to cygwin-style paths
+   v24 Jun 21, 2010 * (Cédric Bosdonnat) unzip seems to need its filenames
+		      fnameescape'd as well as shellquote'd
+		    * (Motoya Kurotsu) inserted keepj before 0d to protect
+		      jump list
    v17 May 09, 2008 * arno caught a security bug
    v15 Sep 07, 2007 * &shq now used if not the empty string for g:zip_shq
    v14 May 07, 2007 * using b:zipfile instead of w:zipfile to avoid problem
diff -Naur vim73.orig/runtime/doc/quickfix.txt vim73/runtime/doc/quickfix.txt
--- vim73.orig/runtime/doc/quickfix.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/quickfix.txt	2013-08-04 19:09:07.963951818 +0000
@@ -1,4 +1,4 @@
-*quickfix.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
+*quickfix.txt*  For Vim version 7.3.  Last change: 2013 Mar 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -215,28 +215,29 @@
 
 							*:cex* *:cexpr* *E777*
 :cex[pr][!] {expr}	Create a quickfix list using the result of {expr} and
-			jump to the first error.  If {expr} is a String, then
-			each new-line terminated line in the String is
-			processed using 'errorformat' and the result is added
-			to the quickfix list.  If {expr} is a List, then each
-			String item in the list is processed and added to the
-			quickfix list.  Non String items in the List are
-			ignored. See |:cc|
-			for [!].
+			jump to the first error.
+			If {expr} is a String, then each new-line terminated
+			line in the String is processed using the global value
+			of 'errorformat' and the result is added to the
+			quickfix list.
+			If {expr} is a List, then each String item in the list
+			is processed and added to the quickfix list.  Non
+			String items in the List are ignored.
+			See |:cc| for [!].
 			Examples: >
 				:cexpr system('grep -n xyz *')
 				:cexpr getline(1, '$')
 <
 							*:lex* *:lexpr*
-:lex[pr][!] {expr}	Same as ":cexpr", except the location list for the
+:lex[pr][!] {expr}	Same as |:cexpr|, except the location list for the
 			current window is used instead of the quickfix list.
 
 							*:cgete* *:cgetexpr*
 :cgete[xpr] {expr}	Create a quickfix list using the result of {expr}.
-			Just like ":cexpr", but don't jump to the first error.
+			Just like |:cexpr|, but don't jump to the first error.
 
 							*:lgete* *:lgetexpr*
-:lgete[xpr] {expr}	Same as ":cgetexpr", except the location list for the
+:lgete[xpr] {expr}	Same as |:cgetexpr|, except the location list for the
 			current window is used instead of the quickfix list.
 
 							*:cad* *:caddexpr*
@@ -546,13 +547,23 @@
 modifier is used the buffers are kept loaded.  This makes following searches
 in the same files a lot faster.
 
+Note that |:copen| (or |:lopen| for |:lgrep|) may be used to open a buffer
+containing the search results in linked form.  The |:silent| command may be
+used to suppress the default full screen grep output.  The ":grep!" form of
+the |:grep| command doesn't jump to the first match automatically.  These
+commands can be combined to create a NewGrep command: >
+
+        command! -nargs=+ NewGrep execute 'silent grep! <args>' | copen 42
+
 
 5.1 using Vim's internal grep
 
 					*:vim* *:vimgrep* *E682* *E683*
 :vim[grep][!] /{pattern}/[g][j] {file} ...
 			Search for {pattern} in the files {file} ... and set
-			the error list to the matches.
+			the error list to the matches.  Files matching
+			'wildignore' are ignored; files in 'suffixes' are
+			searched last.
 			Without the 'g' flag each line is added only once.
 			With 'g' every match is added.
 
@@ -563,6 +574,8 @@
 			'ignorecase' applies.  To overrule it put |/\c| in the
 			pattern to ignore case or |/\C| to match case.
 			'smartcase' is not used.
+			If {pattern} is empty (e.g. // is specified), the last
+			used search pattern is used. |last-pattern|
 
 			When a number is put before the command this is used
 			as the maximum number of matches to find.  Use
@@ -904,8 +917,8 @@
 	%n		error number (finds a number)
 	%m		error message (finds a string)
 	%r		matches the "rest" of a single-line file message %O/P/Q
-	%p		pointer line (finds a sequence of '-', '.' or ' ' and
-			uses the length for the column number)
+	%p		pointer line (finds a sequence of '-', '.', ' ' or
+			tabs and uses the length for the column number)
 	%*{conv}	any scanf non-assignable conversion
 	%%		the single '%' character
 	%s		search text (finds a string)
diff -Naur vim73.orig/runtime/doc/quickref.txt vim73/runtime/doc/quickref.txt
--- vim73.orig/runtime/doc/quickref.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/quickref.txt	2013-08-04 19:09:07.967285142 +0000
@@ -1,4 +1,4 @@
-*quickref.txt*  For Vim version 7.3.  Last change: 2010 Jul 24
+*quickref.txt*  For Vim version 7.3.  Last change: 2013 Jun 29
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -7,7 +7,7 @@
 
 							 *quickref* *Contents*
  tag	  subject			 tag	  subject	~
-|Q_ct|  list of help files		|Q_re|	Repeating commands
+|Q_ct|	list of help files		|Q_re|	Repeating commands
 |Q_lr|	motion: Left-right		|Q_km|	Key mapping
 |Q_ud|	motion: Up-down			|Q_ab|	Abbreviations
 |Q_tm|	motion: Text object		|Q_op|	Options
@@ -27,7 +27,7 @@
 |Q_co|	change: Complex			|Q_bu|	Buffer list commands
 |Q_vi|	Visual mode			|Q_sy|	Syntax highlighting
 |Q_to|	Text objects			|Q_gu|	GUI commands
-					|Q_fo|  Folding
+					|Q_fo|	Folding
 
 ------------------------------------------------------------------------------
 N is used to indicate an optional count that can be given before the command.
@@ -186,7 +186,7 @@
 |:marks|  :marks	print the active marks
 |CTRL-O|  N  CTRL-O	go to Nth older position in jump list
 |CTRL-I|  N  CTRL-I	go to Nth newer position in jump list
-|:ju|	  :ju[mps]	print the jump list
+|:ju|     :ju[mps]	print the jump list
 ------------------------------------------------------------------------------
 *Q_vm*		Various motions
 
@@ -204,30 +204,30 @@
 ------------------------------------------------------------------------------
 *Q_ta*		Using tags
 
-|:ta|	   :ta[g][!] {tag}	jump to tag {tag}
-|:ta|	   :[count]ta[g][!]	jump to [count]'th newer tag in tag list
+|:ta|      :ta[g][!] {tag}	jump to tag {tag}
+|:ta|      :[count]ta[g][!]	jump to [count]'th newer tag in tag list
 |CTRL-]|      CTRL-]		jump to the tag under cursor, unless changes
 				   have been made
-|:ts|	   :ts[elect][!] [tag]	list matching tags and select one to jump to
+|:ts|      :ts[elect][!] [tag]	list matching tags and select one to jump to
 |:tjump|   :tj[ump][!] [tag]	jump to tag [tag] or select from list when
 				   there are multiple matches
-|:ltag|	   :lt[ag][!] [tag]	jump to tag [tag] and add matching tags to the
+|:ltag|    :lt[ag][!] [tag]	jump to tag [tag] and add matching tags to the
 				   location list
 
-|:tags|	   :tags		print tag list
+|:tags|    :tags		print tag list
 |CTRL-T|   N  CTRL-T		jump back from Nth older tag in tag list
-|:po|	   :[count]po[p][!]	jump back from [count]'th older tag in tag list
+|:po|      :[count]po[p][!]	jump back from [count]'th older tag in tag list
 |:tnext|   :[count]tn[ext][!]	jump to [count]'th next matching tag
 |:tp|      :[count]tp[revious][!] jump to [count]'th previous matching tag
-|:tr|	   :[count]tr[ewind][!] jump to [count]'th matching tag
-|:tl|	   :tl[ast][!]		jump to last matching tag
+|:tr|      :[count]tr[ewind][!]	jump to [count]'th matching tag
+|:tl|      :tl[ast][!]		jump to last matching tag
 
-|:ptag|	   :pt[ag] {tag}	open a preview window to show tag {tag}
-|CTRL-W_}|     CTRL-W }		like CTRL-] but show tag in preview window
+|:ptag|    :pt[ag] {tag}	open a preview window to show tag {tag}
+|CTRL-W_}|    CTRL-W }		like CTRL-] but show tag in preview window
 |:pts|     :pts[elect]		like ":tselect" but show tag in preview window
 |:ptjump|  :ptj[ump]		like ":tjump" but show tag in preview window
 |:pclose|  :pc[lose]		close tag preview window
-|CTRL-W_z|     CTRL-W z		close tag preview window
+|CTRL-W_z|    CTRL-W z		close tag preview window
 ------------------------------------------------------------------------------
 *Q_sc*		Scrolling
 
@@ -260,7 +260,7 @@
 |:startreplace| :startr[eplace][!]  start Replace mode, at EOL when [!] used
 
 in Visual block mode:
-|v_b_I|    I	insert the same text in front of all the selected lines
+|v_b_I|	   I	insert the same text in front of all the selected lines
 |v_b_A|	   A	append the same text after all the selected lines
 ------------------------------------------------------------------------------
 *Q_ai*		Insert mode keys
@@ -334,16 +334,16 @@
 *Q_de*		Deleting text
 
 |x|	N  x		delete N characters under and after the cursor
-|<Del>| N  <Del>	delete N characters under and after the cursor
+|<Del>|	N  <Del>	delete N characters under and after the cursor
 |X|	N  X		delete N characters before the cursor
 |d|	N  d{motion}	delete the text that is moved over with {motion}
-|v_d|	{visual}d	delete the highlighted text
+|v_d|	   {visual}d	delete the highlighted text
 |dd|	N  dd		delete N lines
 |D|	N  D		delete to the end of the line (and N-1 more lines)
 |J|	N  J		join N-1 lines (delete <EOL>s)
-|v_J|	{visual}J	join the highlighted lines
+|v_J|	   {visual}J	join the highlighted lines
 |gJ|	N  gJ		like "J", but without inserting spaces
-|v_gJ|	{visual}gJ	like "{visual}J", but without inserting spaces
+|v_gJ|	   {visual}gJ	like "{visual}J", but without inserting spaces
 |:d|	:[range]d [x]	delete [range] lines [into register x]
 ------------------------------------------------------------------------------
 *Q_cm*		Copying and moving text
@@ -369,7 +369,7 @@
 |R|	  N  R		enter Replace mode (repeat the entered text N times)
 |gR|	  N  gR		enter virtual Replace mode: Like Replace mode but
 			   without affecting layout
-|v_b_r|	  {visual}r{char}
+|v_b_r|	     {visual}r{char}
 			in Visual block mode: Replace each char of the
 			   selected text with {char}
 
@@ -447,13 +447,13 @@
 
 |visual-index|	list of Visual mode commands.
 
-|v|	   v		start highlighting characters  }  move cursor and use
-|V|	   V		start highlighting linewise    }  operator to affect
+|v|        v		start highlighting characters  }  move cursor and use
+|V|        V		start highlighting linewise    }  operator to affect
 |CTRL-V|   CTRL-V	start highlighting blockwise   }  highlighted text
-|v_o|	   o		exchange cursor position with start of highlighting
-|gv|	   gv		start highlighting on previous visual area
-|v_v|	   v		highlight characters or stop highlighting
-|v_V|	   V		highlight linewise or stop highlighting
+|v_o|      o		exchange cursor position with start of highlighting
+|gv|       gv		start highlighting on previous visual area
+|v_v|      v		highlight characters or stop highlighting
+|v_V|      V		highlight linewise or stop highlighting
 |v_CTRL-V| CTRL-V	highlight blockwise or stop highlighting
 ------------------------------------------------------------------------------
 *Q_to*		Text objects (only in Visual mode or after an operator)
@@ -509,8 +509,8 @@
 ------------------------------------------------------------------------------
 *Q_km*		Key mapping
 
-|:map|	     :ma[p] {lhs} {rhs}	  map {lhs} to {rhs} in Normal and Visual mode
-|:map!|	     :ma[p]! {lhs} {rhs}  map {lhs} to {rhs} in Insert and Command-line
+|:map|       :ma[p] {lhs} {rhs}	  map {lhs} to {rhs} in Normal and Visual mode
+|:map!|      :ma[p]! {lhs} {rhs}  map {lhs} to {rhs} in Insert and Command-line
 				     mode
 |:noremap|   :no[remap][!] {lhs} {rhs}
 				  same as ":map", no remapping for this {rhs}
@@ -522,19 +522,19 @@
 				     Normal and Visual mode
 |:map_l!|    :ma[p]! [lhs]	  list mappings (starting with [lhs]) for
 				     Insert and Command-line mode
-|:cmap|	     :cmap/:cunmap/:cnoremap
+|:cmap|      :cmap/:cunmap/:cnoremap
 				  like ":map!"/":unmap!"/":noremap!" but for
 				     Command-line mode only
-|:imap|	     :imap/:iunmap/:inoremap
+|:imap|      :imap/:iunmap/:inoremap
 				  like ":map!"/":unmap!"/":noremap!" but for
 				     Insert mode only
-|:nmap|	     :nmap/:nunmap/:nnoremap
+|:nmap|      :nmap/:nunmap/:nnoremap
 				  like ":map"/":unmap"/":noremap" but for
 				     Normal mode only
-|:vmap|	     :vmap/:vunmap/:vnoremap
+|:vmap|      :vmap/:vunmap/:vnoremap
 				  like ":map"/":unmap"/":noremap" but for
 				     Visual mode only
-|:omap|	     :omap/:ounmap/:onoremap
+|:omap|      :omap/:ounmap/:onoremap
 				  like ":map"/":unmap"/":noremap" but only for
 				     when an operator is pending
 |:mapc|      :mapc[lear]	  remove mappings for Normal and Visual mode
@@ -657,6 +657,7 @@
 'cscopepathcomp'  'cspc'    how many components of the path to show
 'cscopeprg'       'csprg'   command to execute cscope
 'cscopequickfix'  'csqf'    use quickfix window for cscope results
+'cscoperelative'  'csre'    Use cscope.out path basename as prefix
 'cscopetag'       'cst'     use cscope for tag commands
 'cscopetagorder'  'csto'    determines ":cstag" search order
 'cscopeverbose'   'csverb'  give messages when adding a cscope database
@@ -690,6 +691,7 @@
 'fileencodings'   'fencs'   automatically detected character encodings
 'fileformat'	  'ff'	    file format used for file I/O
 'fileformats'	  'ffs'     automatically detected values for 'fileformat'
+'fileignorecase'  'fic'     ignore case when using file names
 'filetype'	  'ft'	    type of file, used for autocommands
 'fillchars'	  'fcs'     characters to use for displaying special items
 'fkmap'		  'fk'	    Farsi keyboard mapping
@@ -736,10 +738,12 @@
 'iconstring'		    string to use for the Vim icon text
 'ignorecase'	  'ic'	    ignore case in search patterns
 'imactivatekey'   'imak'    key that activates the X input method
+'imactivatefunc'  'imaf'    function to enable/disable the X input method
 'imcmdline'	  'imc'     use IM when starting to edit a command line
 'imdisable'	  'imd'     do not use the IM in any mode
 'iminsert'	  'imi'     use :lmap or IM in Insert mode
 'imsearch'	  'ims'     use :lmap or IM when typing a search pattern
+'imstatusfunc'    'imsf'    function to obtain X input method status
 'include'	  'inc'     pattern to be used to find an include file
 'includeexpr'	  'inex'    expression used to process an include line
 'incsearch'	  'is'	    highlight match while typing search pattern
@@ -800,7 +804,7 @@
 'omnifunc'	  'ofu'     function for filetype-specific completion
 'opendevice'	  'odev'    allow reading/writing devices on MS-Windows
 'operatorfunc'	  'opfunc'  function to be called for |g@| operator
-'osfiletype'	  'oft'     operating system-specific filetype information
+'osfiletype' 	  'oft'     no longer supported
 'paragraphs'	  'para'    nroff macros that separate paragraphs
 'paste'			    allow pasting text
 'pastetoggle'	  'pt'	    key code that causes 'paste' to toggle
@@ -822,6 +826,7 @@
 'quoteescape'	  'qe'	    escape characters used in a string
 'readonly'	  'ro'	    disallow writing the buffer
 'redrawtime'	  'rdt'     timeout for 'hlsearch' and |:match| highlighting
+'regexpengine'	  're'	    default regexp engine to use
 'relativenumber'  'rnu'	    show relative line number in front of each line
 'remap'			    allow mappings to work recursively
 'report'		    threshold for reporting nr. of lines changed
@@ -850,6 +855,7 @@
 'shellslash'	  'ssl'     use forward slash for shell file names
 'shelltemp'	  'stmp'    whether to use a temp file for shell commands
 'shelltype'	  'st'	    Amiga: influences how to use a shell
+'shellxescape'	  'sxe'     characters to escape when 'shellxquote' is (
 'shellxquote'	  'sxq'     like 'shellquote', but include redirection
 'shiftround'	  'sr'	    round indent to multiple of shiftwidth
 'shiftwidth'	  'sw'	    number of spaces to use for (auto)indent step
@@ -934,6 +940,7 @@
 'wildchar'	  'wc'	    command-line character for wildcard expansion
 'wildcharm'	  'wcm'     like 'wildchar' but also works when mapped
 'wildignore'	  'wig'     files matching these patterns are not completed
+'wildignorecase'  'wic'     ignore case when completing file names
 'wildmenu'	  'wmnu'    use menu for command line completion
 'wildmode'	  'wim'     mode for 'wildchar' command-line expansion
 'wildoptions'	  'wop'     specifies how command line completion is done
@@ -955,9 +962,9 @@
 ------------------------------------------------------------------------------
 *Q_ur*		Undo/Redo commands
 
-|u|	  N  u		undo last N changes
+|u|       N  u		undo last N changes
 |CTRL-R|  N  CTRL-R	redo last N undone changes
-|U|	     U		restore last changed line
+|U|          U		restore last changed line
 ------------------------------------------------------------------------------
 *Q_et*		External commands
 
@@ -1008,7 +1015,7 @@
 				   C4350, etc.)
 |:normal|	:norm[al][!] {commands}
 				execute Normal mode commands
-|Q|		Q		switch to "Ex" mode
+|Q|		   Q		switch to "Ex" mode
 
 |:redir|	:redir >{file}		redirect messages to {file}
 |:silent|	:silent[!] {command}	execute {command} silently
@@ -1084,18 +1091,18 @@
 ------------------------------------------------------------------------------
 *Q_ex*		Special Ex characters
 
-|:bar|	    |		separates two commands (not for ":global" and ":!")
+|:bar|      |		separates two commands (not for ":global" and ":!")
 |:quote|    "		begins comment
 
-|:_%|	    %		current file name (only where a file name is expected)
-|:_#|	    #[num]	alternate file name [num] (only where a file name is
+|:_%|       %		current file name (only where a file name is expected)
+|:_#|       #[num]	alternate file name [num] (only where a file name is
 			   expected)
 	Note: The next seven are typed literally; these are not special keys!
-|:<afile>|  <abuf>	buffer number, for use in an autocommand (only where a
+|:<abuf>|   <abuf>	buffer number, for use in an autocommand (only where a
 			   file name is expected)
-|:<afile>|  <afile>	file name, for user in an autocommand (only where a
+|:<afile>|  <afile>	file name, for use in an autocommand (only where a
 			   file name is expected)
-|:<afile>|  <amatch>	what matched with the pattern, for use in an
+|:<amatch>| <amatch>	what matched with the pattern, for use in an
 			   autocommand (only where a file name is expected)
 |:<cword>|  <cword>	word under the cursor (only where a file name is
 			   expected)
@@ -1168,18 +1175,18 @@
 	   Without !: Fail if changes have been made to the current buffer.
 	      With !: Discard any changes to the current buffer.
 |:edit_f|  :e[dit][!] {file}	edit {file}
-|:edit|	   :e[dit][!]		reload the current file
-|:enew|	   :ene[w][!]		edit a new, unnamed buffer
+|:edit|    :e[dit][!]		reload the current file
+|:enew|    :ene[w][!]		edit a new, unnamed buffer
 |:find|    :fin[d][!] {file}	find {file} in 'path' and edit it
 
-|CTRL-^|   N   CTRL-^		edit alternate file N (equivalent to ":e #N")
-|gf|	       gf  or ]f	edit the file whose name is under the cursor
-|:pwd|	   :pwd			print the current directory name
-|:cd|	   :cd [path]		change the current directory to [path]
-|:cd-|	   :cd -		back to previous current directory
-|:file|	   :f[ile]		print the current file name and the cursor
+|CTRL-^|   N  CTRL-^		edit alternate file N (equivalent to ":e #N")
+|gf|          gf  or ]f		edit the file whose name is under the cursor
+|:pwd|     :pwd			print the current directory name
+|:cd|      :cd [path]		change the current directory to [path]
+|:cd-|     :cd -		back to previous current directory
+|:file|    :f[ile]		print the current file name and the cursor
 				   position
-|:file|	   :f[ile] {name}	set the current file name to {name}
+|:file|    :f[ile] {name}	set the current file name to {name}
 |:files|   :files		show alternate file names
 ------------------------------------------------------------------------------
 *Q_fl*		Using the argument list			|argument-list|
@@ -1195,12 +1202,12 @@
 
 	     in current window    in new window	~
 |:argument|  :argu[ment] N	  :sar[gument] N	edit file N
-|:next|	     :n[ext]		  :sn[ext]		edit next file
+|:next|      :n[ext]		  :sn[ext]		edit next file
 |:next_f|    :n[ext] {arglist}	  :sn[ext] {arglist}	define new arg list
 							   and edit first file
-|:Next|	     :N[ext]		  :sN[ext]		edit previous file
+|:Next|      :N[ext]		  :sN[ext]		edit previous file
 |:first|     :fir[st]		  :sfir[st]		edit first file
-|:last|	     :la[st]		  :sla[st]		edit last file
+|:last|      :la[st]		  :sla[st]		edit last file
 ------------------------------------------------------------------------------
 *Q_wq*		Writing and quitting
 
@@ -1377,7 +1384,7 @@
 		set foldmethod=indent	folding by indent
 		set foldmethod=expr	folding by 'foldexpr'
 		set foldmethod=syntax	folding by syntax regions
-		set foldmethod=marker	folding by 'foldmarkers'
+		set foldmethod=marker	folding by 'foldmarker'
 
 |zf|		zf{motion}		operator: Define a fold manually
 |:fold|		:{range}fold		define a fold for {range} lines
diff -Naur vim73.orig/runtime/doc/quotes.txt vim73/runtime/doc/quotes.txt
--- vim73.orig/runtime/doc/quotes.txt	2010-08-15 12:23:21.000000000 +0000
+++ vim73/runtime/doc/quotes.txt	2013-08-04 19:09:07.970618465 +0000
@@ -1,4 +1,4 @@
-*quotes.txt*    For Vim version 7.3.  Last change: 2006 Apr 24
+*quotes.txt*    For Vim version 7.3.  Last change: 2010 Nov 03
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -260,15 +260,16 @@
 
 
 In summary:
-     __     ___		    _	    _	_  ___ _____
-     \ \   / (_)_ __ ___   (_)___  | | | |/ _ \_   _|
-      \ \ / /| | '_ ` _ \  | / __| | |_| | | | || |
-       \ V / | | | | | | | | \__ \ |  _  | |_| || |
-	\_/  |_|_| |_| |_| |_|___/ |_| |_|\___/ |_|
-	     ____ _____ _   _ _____ _____ _ _
-	    / ___|_   _| | | |	___|  ___| | |
-	    \___ \ | | | | | | |_  | |_  | | |
-	     ___) || | | |_| |	_| |  _| |_|_|
-	    |____/ |_|	\___/|_|   |_|	 (_|_)	      (Tony Nugent, Australia)
+     __     ___		    _	    _	_  ___ _____ `
+     \ \   / (_)_ __ ___   (_)___  | | | |/ _ \_   _| `
+      \ \ / /| | '_ ` _ \  | / __| | |_| | | | || | `
+       \ V / | | | | | | | | \__ \ |  _  | |_| || | `
+	\_/  |_|_| |_| |_| |_|___/ |_| |_|\___/ |_| `
+	     ____ _____ _   _ _____ _____ _ _ `
+	    / ___|_   _| | | |	___|  ___| | | `
+	    \___ \ | | | | | | |_  | |_  | | | `
+	     ___) || | | |_| |	_| |  _| |_|_| `
+	    |____/ |_|	\___/|_|   |_|	 (_|_)	    (Tony Nugent, Australia) `
+
 
  vim:tw=78:ts=8:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/repeat.txt vim73/runtime/doc/repeat.txt
--- vim73.orig/runtime/doc/repeat.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/repeat.txt	2013-08-04 19:09:07.977285112 +0000
@@ -1,4 +1,4 @@
-*repeat.txt*    For Vim version 7.3.  Last change: 2009 Nov 04
+*repeat.txt*    For Vim version 7.3.  Last change: 2012 Mar 23
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -102,25 +102,29 @@
 q{0-9a-zA-Z"}		Record typed characters into register {0-9a-zA-Z"}
 			(uppercase to append).  The 'q' command is disabled
 			while executing a register, and it doesn't work inside
-			a mapping.  {Vi: no recording}
+			a mapping and |:normal|.  {Vi: no recording}
 
 q			Stops recording.  (Implementation note: The 'q' that
 			stops recording is not stored in the register, unless
 			it was the result of a mapping)  {Vi: no recording}
 
 							*@*
-@{0-9a-z".=*}		Execute the contents of register {0-9a-z".=*} [count]
+@{0-9a-z".=*+}		Execute the contents of register {0-9a-z".=*+} [count]
 			times.  Note that register '%' (name of the current
 			file) and '#' (name of the alternate file) cannot be
-			used.  For "@=" you are prompted to enter an
-			expression.  The result of the expression is then
-			executed.  See also |@:|.  {Vi: only named registers}
+			used.
+			The register is executed like a mapping, that means
+			that the difference between 'wildchar' and 'wildcharm'
+			applies.
+			For "@=" you are prompted to enter an expression.  The
+			result of the expression is then executed.
+			See also |@:|.  {Vi: only named registers}
 
 							*@@* *E748*
 @@			Repeat the previous @{0-9a-z":*} [count] times.
 
-:[addr]*{0-9a-z".=}						*:@* *:star*
-:[addr]@{0-9a-z".=*}	Execute the contents of register {0-9a-z".=*} as an Ex
+:[addr]*{0-9a-z".=+}						*:@* *:star*
+:[addr]@{0-9a-z".=*+}	Execute the contents of register {0-9a-z".=*+} as an Ex
 			command.  First set cursor at line [addr] (default is
 			current line).  When the last line in the register does
 			not have a <CR> it will be added automatically when
diff -Naur vim73.orig/runtime/doc/sign.txt vim73/runtime/doc/sign.txt
--- vim73.orig/runtime/doc/sign.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/sign.txt	2013-08-04 19:09:07.980618435 +0000
@@ -1,4 +1,4 @@
-*sign.txt*      For Vim version 7.3.  Last change: 2010 May 07
+*sign.txt*      For Vim version 7.3.  Last change: 2012 Jul 10
 
 
 		  VIM REFERENCE MANUAL    by Gordon Prieur
@@ -70,12 +70,13 @@
 :sign define {name} {argument}...
 		Define a new sign or set attributes for an existing sign.
 		The {name} can either be a number (all digits) or a name
-		starting with a non-digit.
+		starting with a non-digit.  Leading digits are ignored, thus
+		"0012", "012" and "12" are considered the same name.
 		About 120 different signs can be defined.
 
 		Accepted arguments:
 
-	icon={pixmap}
+	icon={bitmap}
 		Define the file name where the bitmap can be found.  Should be
 		a full path.  The bitmap should fit in the place of two
 		characters.  This is not checked.  If the bitmap is too big it
@@ -85,6 +86,8 @@
 			GTK 1		pixmap (.xpm)
 			GTK 2		many
 			Motif		pixmap (.xpm)
+			Win32		.bmp, .ico, .cur
+					pixmap (.xpm) |+xpm_w32|
 
 	linehl={group}
 		Highlighting group used for the whole line the sign is placed
@@ -150,8 +153,14 @@
 		Remove the previously placed sign {id} from file {fname}.
 		See remark above about {fname} |:sign-fname|.
 
+:sign unplace * file={fname}
+		Remove all placed signs in file {fname}.
+
 :sign unplace {id} buffer={nr}
-		Same, but use buffer {nr}.
+		Remove the previously placed sign {id} from buffer {nr}.
+
+:sign unplace * buffer={nr}
+		Remove all placed signs in buffer {nr}.
 
 :sign unplace {id}
 		Remove the previously placed sign {id} from all files it
diff -Naur vim73.orig/runtime/doc/spell.txt vim73/runtime/doc/spell.txt
--- vim73.orig/runtime/doc/spell.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/spell.txt	2013-08-04 19:09:07.987285082 +0000
@@ -1,4 +1,4 @@
-*spell.txt*	For Vim version 7.3.  Last change: 2010 Apr 11
+*spell.txt*	For Vim version 7.3.  Last change: 2013 Jun 26
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -335,6 +335,9 @@
 |spell-mkspell| about how to create a spell file.  Converting a spell file
 with "iconv" will NOT work!
 
+Note: on VMS ".{enc}.spl" is changed to "_{enc}.spl" to avoid trouble with
+filenames.
+
 						    *spell-sug-file* *E781*
 If there is a file with exactly the same name as the ".spl" file but ending in
 ".sug", that file will be used for giving better suggestions.  It isn't loaded
@@ -519,7 +522,7 @@
 			Up to eight regions can be combined. *E754* *E755*
 			The REP and SAL items of the first .aff file where
 			they appear are used. |spell-REP| |spell-SAL|
-
+								*E845*
 			This command uses a lot of memory, required to find
 			the optimal word tree (Polish, Italian and Hungarian
 			require several hundred Mbyte).  The final result will
@@ -925,9 +928,13 @@
 Vim allows you to use spell checking for several languages in the same file.
 You can list them in the 'spelllang' option.  As a consequence all spell files
 for the same encoding must use the same word characters, otherwise they can't
-be combined without errors.  If you get a warning that the word tables differ
-you may need to generate the .spl file again with |:mkspell|.  Check the FOL,
-LOW and UPP lines in the used .aff file.
+be combined without errors.
+
+If you get an E763 warning that the word tables differ you need to update your
+".spl" spell files.  If you downloaded the files, get the latest version of
+all spell files you use.  Otherwise generate the .spl file again with
+|:mkspell|.  If you still get errors check the FOL, LOW and UPP lines in the
+used .aff files.
 
 The XX.ascii.spl spell file generated with the "-ascii" argument will not
 contain the table with characters, so that it can be combine with spell files
@@ -1241,6 +1248,7 @@
 Optionally this may be followed by:
 	*	the group appears zero or more times, e.g., sm*e
 	+	the group appears one or more times, e.g., c+
+	?	the group appears zero times or once, e.g., x?
 
 This is similar to the regexp pattern syntax (but not the same!).  A few
 examples with the sequence of word flags they require:
@@ -1248,6 +1256,7 @@
     COMPOUNDRULE yz	    yz
     COMPOUNDRULE x+z	    xz xxz xxxz etc.
     COMPOUNDRULE yx+	    yx yxx yxxx etc.
+    COMPOUNDRULE xy?z	    xz xyz
 
     COMPOUNDRULE [abc]z    az bz cz
     COMPOUNDRULE [abc]+z   az aaz abaz bz baz bcbz cz caz cbaz etc.
diff -Naur vim73.orig/runtime/doc/starting.txt vim73/runtime/doc/starting.txt
--- vim73.orig/runtime/doc/starting.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/starting.txt	2013-08-04 19:09:07.990618405 +0000
@@ -1,4 +1,4 @@
-*starting.txt*  For Vim version 7.3.  Last change: 2009 Dec 31
+*starting.txt*  For Vim version 7.3.  Last change: 2013 Jun 12
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -95,14 +95,14 @@
 			(normally not installed)
 view	vim -R	    Start in read-only mode (see |-R|).		    *view*
 gvim	vim -g	    Start the GUI (see |gui|).			    *gvim*
-gex	vim -eg	    Start the GUI in Ex mode.			    *gex*
-gview	vim -Rg	    Start the GUI in read-only mode.		    *gview*
+gex	vim -eg	    Start the GUI in Ex mode.			  *gex*
+gview	vim -Rg	    Start the GUI in read-only mode.		  *gview*
 rvim	vim -Z	    Like "vim", but in restricted mode (see |-Z|)   *rvim*
-rview	vim -RZ	    Like "view", but in restricted mode.	    *rview*
-rgvim	vim -gZ	    Like "gvim", but in restricted mode.	    *rgvim*
-rgview	vim -RgZ    Like "gview", but in restricted mode.	    *rgview*
+rview	vim -RZ	    Like "view", but in restricted mode.	  *rview*
+rgvim	vim -gZ	    Like "gvim", but in restricted mode.	  *rgvim*
+rgview	vim -RgZ    Like "gview", but in restricted mode.	  *rgview*
 evim    vim -y      Easy Vim: set 'insertmode' (see |-y|)	    *evim*
-eview   vim -yR     Like "evim" in read-only mode		    *eview*
+eview   vim -yR     Like "evim" in read-only mode		  *eview*
 vimdiff vim -d	    Start in diff mode |diff-mode|
 gvimdiff vim -gd    Start in diff mode |diff-mode|
 
@@ -244,11 +244,12 @@
 -Z		Restricted mode.  All commands that make use of an external
 		shell are disabled.  This includes suspending with CTRL-Z,
 		":sh", filtering, the system() function, backtick expansion,
-		etc.
+		delete(), rename(), mkdir(), writefile(), libcall(), etc.
 		{not in Vi}
 
 							*-g*
--g		Start Vim in GUI mode.  See |gui|.  {not in Vi}
+-g		Start Vim in GUI mode.  See |gui|. For the opposite see |-v|.
+		{not in Vi}
 
 							*-v*
 -v		Start Ex in Vi mode.  Only makes a difference when the
@@ -424,12 +425,7 @@
 		"-d con:30/10/600/150".  But you can also use it to start
 		editing on another device, e.g., AUX:.  {not in Vi}
 							*-f*
--f		Amiga: Do not restart Vim to open a new window.  This
-		option should be used when Vim is started by a program that
-		will wait for the edit session to finish (e.g., mail or
-		readnews).  See |amiga-window|.
-
-		GUI: Do not disconnect from the program that started Vim.
+-f		GUI: Do not disconnect from the program that started Vim.
 		'f' stands for "foreground".  If omitted, the GUI forks a new
 		process and exits the current one.  "-f" should be used when
 		gvim is started by a program that will wait for the edit
@@ -437,8 +433,18 @@
 		never to fork, include 'f' in 'guioptions' in your |gvimrc|.
 		Careful: You can use "-gf" to start the GUI in the foreground,
 		but "-fg" is used to specify the foreground color.  |gui-fork|
+
+		Amiga: Do not restart Vim to open a new window.  This
+		option should be used when Vim is started by a program that
+		will wait for the edit session to finish (e.g., mail or
+		readnews).  See |amiga-window|.
+
+		MS-Windows: This option is not supported.  However, when
+		running Vim with an installed vim.bat or gvim.bat file it
+		works.
 		{not in Vi}
 
+
 							*--nofork*
 --nofork	GUI: Do not fork.  Same as |-f|.
 							*-u* *E282*
@@ -751,11 +757,21 @@
 	file, but "exrc" is what Vi always used, "vimrc" is a Vim specific
 	name.  Also see |vimrc-intro|.
 
-	Recommended place for your personal initializations:
-		Unix		    $HOME/.vimrc
-		OS/2		    $HOME/.vimrc or $VIM/.vimrc (or _vimrc)
-		MS-DOS and Win32    $HOME/_vimrc or $VIM/_vimrc
-		Amiga		    s:.vimrc or $VIM/.vimrc
+	Places for your personal initializations:
+		Unix		$HOME/.vimrc or $HOME/.vim/vimrc
+		OS/2		$HOME/.vimrc, $HOME/vimfiles/vimrc
+				or $VIM/.vimrc (or _vimrc)
+		MS-Windows	$HOME/_vimrc, $HOME/vimfiles/vimrc
+				or $VIM/_vimrc
+		Amiga		s:.vimrc, home:.vimrc, home:vimfiles:vimrc
+				or $VIM/.vimrc
+
+	The files are searched in the order specified above and only the first
+	one that is found is read.
+
+	RECOMMENDATION: Put all your Vim configuration stuff in the
+	$HOME/.vim/ directory ($HOME/vimfiles/ for MS-Windows). That makes it
+	easy to copy it to another system.
 
 	If Vim was started with "-u filename", the file "filename" is used.
 	All following initializations until 4. are skipped.
@@ -785,12 +801,15 @@
 	-  The environment variable VIMINIT (see also |compatible-default|) (*)
 	   The value of $VIMINIT is used as an Ex command line.
 	-  The user vimrc file(s):
-		    "$HOME/.vimrc"	(for Unix and OS/2) (*)
-		    "s:.vimrc"		(for Amiga) (*)
-		    "home:.vimrc"	(for Amiga) (*)
-		    "$VIM/.vimrc"	(for OS/2 and Amiga) (*)
-		    "$HOME/_vimrc"	(for MS-DOS and Win32) (*)
-		    "$VIM/_vimrc"	(for MS-DOS and Win32) (*)
+		    "$HOME/.vimrc"	   (for Unix and OS/2) (*)
+		    "$HOME/.vim/vimrc"	   (for Unix and OS/2) (*)
+		    "s:.vimrc"		   (for Amiga) (*)
+		    "home:.vimrc"	   (for Amiga) (*)
+		    "home:vimfiles:vimrc"  (for Amiga) (*)
+		    "$VIM/.vimrc"	   (for OS/2 and Amiga) (*)
+		    "$HOME/_vimrc"	   (for MS-DOS and Win32) (*)
+		    "$HOME/vimfiles/vimrc" (for MS-DOS and Win32) (*)
+		    "$VIM/_vimrc"	   (for MS-DOS and Win32) (*)
 		Note: For Unix, OS/2 and Amiga, when ".vimrc" does not exist,
 		"_vimrc" is also tried, in case an MS-DOS compatible file
 		system is used.  For MS-DOS and Win32 ".vimrc" is checked
@@ -869,6 +888,7 @@
 12. Execute startup commands
 	If a "-t" flag was given to Vim, the tag is jumped to.
 	The commands given with the |-c| and |+cmd| arguments are executed.
+	The starting flag is reset, has("vim_starting") will now return zero.
 	If the 'insertmode' option is set, Insert mode is entered.
 	The |VimEnter| autocommands are executed.
 
diff -Naur vim73.orig/runtime/doc/syntax.txt vim73/runtime/doc/syntax.txt
--- vim73.orig/runtime/doc/syntax.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/syntax.txt	2013-08-04 19:09:08.000618375 +0000
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 7.3.  Last change: 2010 Aug 10
+*syntax.txt*	For Vim version 7.3.  Last change: 2013 Jul 05
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -37,6 +37,7 @@
 15. Highlighting tags		|tag-highlight|
 16. Window-local syntax		|:ownsyntax|
 17. Color xterms		|xterm-color|
+18. When syntax is slow		|:syntime|
 
 {Vi does not have any of these commands}
 
@@ -199,7 +200,8 @@
 If you don't like a distributed syntax file, or you have downloaded a new
 version, follow the same steps as for |mysyntaxfile| above.  Just make sure
 that you write the syntax file in a directory that is early in 'runtimepath'.
-Vim will only load the first syntax file found.
+Vim will only load the first syntax file found, assuming that it sets
+b:current_syntax.
 
 
 NAMING CONVENTIONS		    *group-name* *{group-name}* *E669* *W18*
@@ -377,142 +379,379 @@
 2HTML						*2html.vim* *convert-to-HTML*
 
 This is not a syntax file itself, but a script that converts the current
-window into HTML.  Vim opens a new window in which it builds the HTML file.
+window into HTML. Vim opens a new window in which it builds the HTML file.
+
+After you save the resulting file, you can view it with any browser. The
+colors should be exactly the same as you see them in Vim.  With
+|g:html_line_ids| you can jump to specific lines by adding (for example) #L123
+or #123 to the end of the URL in your browser's address bar. And with
+|g:html_dynamic_folds| enabled, you can show or hide the text that is folded
+in Vim.
 
 You are not supposed to set the 'filetype' or 'syntax' option to "2html"!
 Source the script to convert the current file: >
 
 	:runtime! syntax/2html.vim
 <
-							*:TOhtml*
-Or use the ":TOhtml" user command.  It is defined in a standard plugin.
-":TOhtml" also works with a range and in a Visual area: >
-
-	:10,40TOhtml
-
-Warning: This is slow! The script must process every character of every line.
-Because it is so slow, by default a progress bar is displayed in the
-statusline for each step that usually takes a long time. If you don't like
-seeing this progress bar, you can disable it and get a very minor speed
-improvement with: >
-
-	let g:html_no_progress = 1
-
-":TOhtml" has another special feature: if the window is in diff mode, it will
-generate HTML that shows all the related windows.  This can be disabled by
-setting the g:html_diff_one_file variable: >
-
-	let g:html_diff_one_file = 1
+Many variables affect the output of 2html.vim; see below. Any of the on/off
+options listed below can be enabled or disabled by setting them explicitly to
+the desired value, or restored to their default by removing the variable using
+|:unlet|.
 
-After you save the resulting file, you can view it with any browser.  The
-colors should be exactly the same as you see them in Vim.
+Remarks:
+- Some truly ancient browsers may not show the background colors.
+- From most browsers you can also print the file (in color)!
+- The latest TOhtml may actually work with older versions of Vim, but some
+  features such as conceal support will not function, and the colors may be
+  incorrect for an old Vim without GUI support compiled in.
 
+Here is an example how to run the script over all .c and .h files from a
+Unix shell: >
+   for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
+<
+					*g:html_start_line* *g:html_end_line*
 To restrict the conversion to a range of lines, use a range with the |:TOhtml|
-command, or set "g:html_start_line" and "g:html_end_line" to the first and
-last line to be converted.  Example, using the last set Visual area: >
+command below, or set "g:html_start_line" and "g:html_end_line" to the first
+and last line to be converted.  Example, using the last set Visual area: >
 
 	:let g:html_start_line = line("'<")
 	:let g:html_end_line = line("'>")
+	:runtime! syntax/2html.vim
+<
+							*:TOhtml*
+:[range]TOhtml		The ":TOhtml" command is defined in a standard plugin.
+			This command will source |2html.vim| for you. When a
+			range is given, set |g:html_start_line| and
+			|g:html_end_line| to the start and end of the range,
+			respectively. Default range is the entire buffer.
+
+                        If the current window is part of a |diff|, unless
+                        |g:html_diff_one_file| is set, :TOhtml will convert
+                        all windows which are part of the diff in the current
+                        tab and place them side-by-side in a <table> element
+                        in the generated HTML. With |g:html_line_ids| you can
+                        jump to lines in specific windows with (for example)
+                        #W1L42 for line 42 in the first diffed window, or
+                        #W3L87 for line 87 in the third.
+
+			Examples: >
+
+	:10,40TOhtml " convert lines 10-40 to html
+	:'<,'>TOhtml " convert current/last visual selection
+	:TOhtml      " convert entire buffer
+<
+							*g:html_diff_one_file*
+Default: 0.
+When 0, and using |:TOhtml| all windows involved in a |diff| in the current tab
+page are converted to HTML and placed side-by-side in a <table> element. When
+1, only the current buffer is converted.
+Example: >
+
+	let g:html_diff_one_file = 1
+<
+							 *g:html_whole_filler*
+Default: 0.
+When 0, if |g:html_diff_one_file| is 1, a sequence of more than 3 filler lines
+is displayed as three lines with the middle line mentioning the total number
+of inserted lines.
+When 1, always display all inserted lines as if |g:html_diff_one_file| were
+not set.
+>
+    :let g:html_whole_filler = 1
+<
+				     *TOhtml-performance* *g:html_no_progress*
+Default: 0.
+When 0, display a progress bar in the statusline for each major step in the
+2html.vim conversion process.
+When 1, do not display the progress bar. This offers a minor speed improvement
+but you won't have any idea how much longer the conversion might take; for big
+files it can take a long time!
+Example: >
 
-The lines are numbered according to 'number' option and the Number
-highlighting.  You can force lines to be numbered in the HTML output by
-setting "html_number_lines" to non-zero value: >
+	let g:html_no_progress = 1
+<
+You can obtain better performance improvements by also instructing Vim to not
+run interactively, so that too much time is not taken to redraw as the script
+moves through the buffer, switches windows, and the like: >
+
+  vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c
+<
+Note that the -s flag prevents loading your .vimrc and any plugins, so you
+need to explicitly source/enable anything that will affect the HTML
+conversion. See |-E| and |-s-ex| for details. It is probably best to create a
+script to replace all the -c commands and use it with the -u flag instead of
+specifying each command separately.
+
+							 *g:html_number_lines*
+Default: current 'number' setting.
+When 0, buffer text is displayed in the generated HTML without line numbering.
+When 1, a column of line numbers is added to the generated HTML with the same
+highlighting as the line number column in Vim (|hl-LineNr|).
+Force line numbers even if 'number' is not set: >
    :let g:html_number_lines = 1
-Force to omit the line numbers by using a zero value: >
+Force to omit the line numbers: >
    :let g:html_number_lines = 0
 Go back to the default to use 'number' by deleting the variable: >
    :unlet g:html_number_lines
-
-By default, valid HTML 4.01 using cascading style sheets (CSS1) is generated.
-If you need to generate markup for really old browsers or some other user
-agent that lacks basic CSS support, use: >
+<
+                                                             *g:html_line_ids*
+Default: 1 if |g:html_number_lines| is set, 0 otherwise.
+When 1, adds an HTML id attribute to each line number, or to an empty <span>
+inserted for that purpose if no line numbers are shown. This ID attribute
+takes the form of L123 for single-buffer HTML pages, or W2L123 for diff-view
+pages, and is used to jump to a specific line (in a specific window of a diff
+view). Javascript is inserted to open any closed dynamic folds
+(|g:html_dynamic_folds|) containing the specificed line before jumping. The
+javascript also allows omitting the window ID in the url, and the leading L.
+For example: >
+
+	page.html#L123	jumps to line 123 in a single-buffer file
+	page.html#123	does the same
+
+	diff.html#W1L42	jumps to line 42 in the first window in a diff
+	diff.html#42	does the same
+<
+							      *g:html_use_css*
+Default: 1.
+When 1, generate valid HTML 4.01 markup with CSS1 styling, supported in all
+modern browsers and most old browsers.
+When 0, generate <font> tags and similar outdated markup. This is not
+recommended but it may work better in really old browsers, email clients,
+forum posts, and similar situations where basic CSS support is unavailable.
+Example: >
    :let g:html_use_css = 0
+<
+						       *g:html_ignore_conceal*
+Default: 0.
+When 0, concealed text is removed from the HTML and replaced with a character
+from |:syn-cchar| or 'listchars' as appropriate, depending on the current
+value of 'conceallevel'.
+When 1, include all text from the buffer in the generated HTML, even if it is
+|conceal|ed.
 
-Concealed text is removed from the HTML and replaced with the appropriate
-character from |:syn-cchar| or 'listchars' depending on the current value of
-'conceallevel'. If you always want to display all text in your document,
-either set 'conceallevel' to zero before invoking 2html, or use: >
+Either of the following commands will ensure that all text in the buffer is
+included in the generated HTML (unless it is folded): >
    :let g:html_ignore_conceal = 1
-
-Similarly, closed folds are put in the HTML as they are displayed.  If you
-don't want this, use the |zR| command before invoking 2html, or use: >
+   :setl conceallevel=0
+<
+						       *g:html_ignore_folding*
+Default: 0.
+When 0, text in a closed fold is replaced by the text shown for the fold in
+Vim (|fold-foldtext|). See |g:html_dynamic_folds| if you also want to allow
+the user to expand the fold as in Vim to see the text inside.
+When 1, include all text from the buffer in the generated HTML; whether the
+text is in a fold has no impact at all. |g:html_dynamic_folds| has no effect.
+
+Either of these commands will ensure that all text in the buffer is included
+in the generated HTML (unless it is concealed): >
+   zR
    :let g:html_ignore_folding = 1
+<
+							*g:html_dynamic_folds*
+Default: 0.
+When 0, text in a closed fold is not included at all in the generated HTML.
+When 1, generate javascript to open a fold and show the text within, just like
+in Vim.
 
-You may want to generate HTML that includes all the data within the folds, and
-allow the user to view the folded data similar to how they would in Vim. To
-generate this dynamic fold information, use: >
-   :let g:html_dynamic_folds = 1
+Setting this variable to 1 causes 2html.vim to always use CSS for styling,
+regardless of what |g:html_use_css| is set to.
 
-Using html_dynamic_folds will imply html_use_css, because it would be far too
-difficult to do it for old browsers. However, html_ignore_folding overrides
-html_dynamic_folds.
-
-Using html_dynamic_folds will default to generating a foldcolumn in the html
-similar to Vim's foldcolumn, that will use javascript to open and close the
-folds in the HTML document. The width of this foldcolumn starts at the current
-setting of |'foldcolumn'| but grows to fit the greatest foldlevel in your
-document. If you do not want to show a foldcolumn at all, use: >
+This variable is ignored when |g:html_ignore_folding| is set.
+>
+   :let g:html_dynamic_folds = 1
+<
+							*g:html_no_foldcolumn*
+Default: 0.
+When 0, if |g:html_dynamic_folds| is 1, generate a column of text similar to
+Vim's foldcolumn (|fold-foldcolumn|) the user can click on to toggle folds
+open or closed. The minimum width of the generated text column is the current
+'foldcolumn' setting.
+When 1, do not generate this column; instead, hovering the mouse cursor over
+folded text will open the fold as if |g:html_hover_unfold| were set.
+>
    :let g:html_no_foldcolumn = 1
-
-Using this option, there will be no foldcolumn available to open the folds in
-the HTML. For this reason, another option is provided: html_hover_unfold.
-Enabling this option will use CSS 2.0 to allow a user to open a fold by
-hovering the mouse pointer over it. Note that old browsers (notably Internet
-Explorer 6) will not support this feature.  Browser-specific markup for IE6 is
-included to fall back to the normal CSS1 code so that the folds show up
-correctly for this browser, but they will not be openable without a
-foldcolumn. Note that using html_hover_unfold will allow modern browsers with
-disabled javascript to view closed folds. To use this option, use: >
+<
+				*TOhtml-uncopyable-text* *g:html_prevent_copy*
+Default: empty string.
+This option prevents certain regions of the generated HTML from being copied,
+when you select all text in document rendered in a browser and copy it. Useful
+for allowing users to copy-paste only the source text even if a fold column or
+line numbers are shown in the generated content. Specify regions to be
+affected in this way as follows:
+	f:	fold column
+	n:	line numbers (also within fold text)
+	t:	fold text
+	d:	diff filler
+
+Example, to make the fold column and line numbers uncopyable: >
+	:let g:html_prevent_copy = "fn"
+<
+This feature is currently implemented by inserting read-only <input> elements
+into the markup to contain the uncopyable areas. This does not work well in
+all cases. When pasting to some applications which understand HTML, the
+<input> elements also get pasted. But plain-text paste destinations should
+always work.
+
+							   *g:html_no_invalid*
+Default: 0.
+When 0, if |g:html_prevent_copy| is non-empty, an invalid attribute is
+intentionally inserted into the <input> element for the uncopyable areas. This
+increases the number of applications you can paste to without also pasting the
+<input> elements. Specifically, Microsoft Word will not paste the <input>
+elements if they contain this invalid attribute.
+When 1, no invalid markup is ever intentionally inserted, and the generated
+page should validate. However, be careful pasting into Microsoft Word when
+|g:html_prevent_copy| is non-empty; it can be hard to get rid of the <input>
+elements which get pasted.
+
+							 *g:html_hover_unfold*
+Default: 0.
+When 0, the only way to open a fold generated by 2html.vim with
+|g:html_dynamic_folds| set, is to click on the generated fold column.
+When 1, use CSS 2.0 to allow the user to open a fold by moving the mouse
+cursor over the displayed fold text. This is useful to allow users with
+disabled javascript to view the folded text.
+
+Note that old browsers (notably Internet Explorer 6) will not support this
+feature.  Browser-specific markup for IE6 is included to fall back to the
+normal CSS1 styling so that the folds show up correctly for this browser, but
+they will not be openable without a foldcolumn.
+>
    :let g:html_hover_unfold = 1
-
-Setting html_no_foldcolumn with html_dynamic_folds will automatically set
-html_hover_unfold, because otherwise the folds wouldn't be dynamic.
-
-By default "<pre>" and "</pre>" is used around the text.  This makes it show
-up as you see it in Vim, but without wrapping.	If you prefer wrapping, at the
-risk of making some things look a bit different, use: >
+<
+							      *g:html_id_expr*
+Default: ""
+Dynamic folding and jumping to line IDs rely on unique IDs within the document
+to work. If generated HTML is copied into a larger document, these IDs are no
+longer guaranteed to be unique. Set g:html_id_expr to an expression Vim can
+evaluate to get a unique string to append to each ID used in a given document,
+so that the full IDs will be unique even when combined with other content in a
+larger HTML document. Example, to append _ and the buffer number to each ID: >
+
+	:let g:html_id_expr = '"_".bufnr("%")'
+<
+To append a string "_mystring" to the end of each ID: >
+
+	:let g:html_id_expr = '"_mystring"'
+<
+Note, when converting a diff view to HTML, the expression will only be
+evaluated for the first window in the diff, and the result used for all the
+windows.
+
+					  *TOhtml-wrap-text* *g:html_pre_wrap*
+Default: current 'wrap' setting.
+When 0, if |g:html_no_pre| is 0 or unset, the text in the generated HTML does
+not wrap at the edge of the browser window.
+When 1, if |g:html_use_css| is 1, the CSS 2.0 "white-space:pre-wrap" value is
+used, causing the text to wrap at whitespace at the edge of the browser
+window.
+Explicitly enable text wrapping: >
+   :let g:html_pre_wrap = 1
+Explicitly disable wrapping: >
+   :let g:html_pre_wrap = 0
+Go back to default, determine wrapping from 'wrap' setting: >
+   :unlet g:html_pre_wrap
+<
+							       *g:html_no_pre*
+Default: 0.
+When 0, buffer text in the generated HTML is surrounded by <pre>...</pre>
+tags. Series of whitespace is shown as in Vim without special markup, and tab
+characters can be included literally (see |g:html_expand_tabs|).
+When 1 (not recommended), the <pre> tags are omitted, and a plain <div> is
+used instead. Whitespace is replaced by a series of &nbsp; character
+references, and <br> is used to end each line. This is another way to allow
+text in the generated HTML is wrap (see |g:html_pre_wrap|) which also works in
+old browsers, but may cause noticeable differences between Vim's display and
+the rendered page generated by 2html.vim.
+>
    :let g:html_no_pre = 1
-This will use <br> at the end of each line and use "&nbsp;" for repeated
-spaces.
-
-The current value of 'encoding' is used to specify the charset of the HTML
-file.  This only works for those values of 'encoding' that have an equivalent
-HTML charset name.  To overrule this set g:html_use_encoding to the name of
-the charset to be used: >
-   :let g:html_use_encoding = "foobar"
-To omit the line that specifies the charset, set g:html_use_encoding to an
-empty string: >
+<
+							  *g:html_expand_tabs*
+Default: 1 if 'tabstop' is 8, 'expandtab' is 0, and no fold column or line
+		numbers occur in the generated HTML;
+	 0 otherwise.
+When 0, <Tab> characters in the buffer text are replaced with an appropriate
+number of space characters, or &nbsp; references if |g:html_no_pre| is 1.
+When 1, if |g:html_no_pre| is 0 or unset, <Tab> characters in the buffer text
+are included as-is in the generated HTML. This is useful for when you want to
+allow copy and paste from a browser without losing the actual whitespace in
+the source document. Note that this can easily break text alignment and
+indentation in the HTML, unless set by default.
+
+Force |2html.vim| to keep <Tab> characters: >
+   :let g:html_expand_tabs = 0
+<
+Force tabs to be expanded: >
+   :let g:html_expand_tabs = 1
+<
+				    *TOhtml-encoding-detect* *TOhtml-encoding*
+It is highly recommended to set your desired encoding with
+|g:html_use_encoding| for any content which will be placed on a web server.
+
+If you do not specify an encoding, |2html.vim| uses the preferred IANA name
+for the current value of 'fileencoding' if set, or 'encoding' if not.
+'encoding' is always used for certain 'buftype' values. 'fileencoding' will be
+set to match the chosen document encoding.
+
+Automatic detection works for the encodings mentioned specifically by name in
+|encoding-names|, but TOhtml will only automatically use those encodings with
+wide browser support. However, you can override this to support specific
+encodings that may not be automatically detected by default (see options
+below). See http://www.iana.org/assignments/character-sets for the IANA names.
+
+Note, by default all Unicode encodings are converted to UTF-8 with no BOM in
+the generated HTML, as recommended by W3C:
+
+	http://www.w3.org/International/questions/qa-choosing-encodings
+	http://www.w3.org/International/questions/qa-byte-order-mark
+
+							 *g:html_use_encoding*
+Default: none, uses IANA name for current 'fileencoding' as above.
+To overrule all automatic charset detection, set g:html_use_encoding to the
+name of the charset to be used. It is recommended to set this variable to
+something widely supported, like UTF-8, for anything you will be hosting on a
+webserver: >
+   :let g:html_use_encoding = "UTF-8"
+You can also use this option to omit the line that specifies the charset
+entirely, by setting g:html_use_encoding to an empty string (NOT recommended): >
    :let g:html_use_encoding = ""
-To go back to the automatic mechanism, delete the g:html_use_encoding
+To go back to the automatic mechanism, delete the |g:html_use_encoding|
 variable: >
    :unlet g:html_use_encoding
 <
-For diff mode a sequence of more than 3 filler lines is displayed as three
-lines with the middle line mentioning the total number of inserted lines.  If
-you prefer to see all the inserted lines use: >
-    :let g:html_whole_filler = 1
-And to go back to displaying up to three lines again: >
-    :unlet g:html_whole_filler
-<
-					    *convert-to-XML* *convert-to-XHTML*
-An alternative is to have the script generate XHTML (XML compliant HTML).  To
-do this set the "html_use_xhtml" variable: >
+						    *g:html_encoding_override*
+Default: none, autoload/tohtml.vim contains default conversions for encodings
+		mentioned by name at |encoding-names|.
+This option allows |2html.vim| to detect the correct 'fileencoding' when you
+specify an encoding with |g:html_use_encoding| which is not in the default
+list of conversions.
+
+This is a dictionary of charset-encoding pairs that will replace existing
+pairs automatically detected by TOhtml, or supplement with new pairs.
+
+Detect the HTML charset "windows-1252" as the encoding "8bit-cp1252": >
+   :let g:html_encoding_override = {'windows-1252': '8bit-cp1252'}
+<
+						     *g:html_charset_override*
+Default: none, autoload/tohtml.vim contains default conversions for encodings
+		mentioned by name at |encoding-names| and which have wide
+		browser support.
+This option allows |2html.vim| to detect the HTML charset for any
+'fileencoding' or 'encoding' which is not detected automatically. You can also
+use it to override specific existing encoding-charset pairs. For example,
+TOhtml will by default use UTF-8 for all Unicode/UCS encodings. To use UTF-16
+and UTF-32 instead, use: >
+   :let g:html_charset_override = {'ucs-4': 'UTF-32', 'utf-16': 'UTF-16'}
+
+Note that documents encoded in either UTF-32 or UTF-16 have known
+compatibility problems with some major browsers.
+
+			*convert-to-XML* *convert-to-XHTML* *g:html_use_xhtml*
+Default: 0.
+When 0, generate standard HTML 4.01 (strict when possible).
+When 1, generate XHTML 1.0 instead (XML compliant HTML).
+>
     :let g:html_use_xhtml = 1
-
-Any of these options can be enabled or disabled by setting them explicitly to
-the desired value, or restored to their default by removing the variable using
-|:unlet|.
-
-Remarks:
-- This only works in a version with GUI support.  If the GUI is not actually
-  running (possible for X11) it still works, but not very well (the colors
-  may be wrong).
-- Some truly ancient browsers may not show the background colors.
-- From most browsers you can also print the file (in color)!
-
-Here is an example how to run the script over all .c and .h files from a
-Unix shell: >
-   for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
 <
 
 ABEL						*abel.vim* *ft-abel-syntax*
@@ -589,7 +828,11 @@
 	asmsyntax=nasm
 Replace "nasm" with the name of the real assembly syntax.  This line must be
 one of the first five lines in the file.  No non-white text must be
-immediately before or after this text.
+immediately before or after this text.  Note that specifying asmsyntax=foo is
+equivalent to setting ft=foo in a |modeline|, and that in case of a conflict
+between the two settings the one from the modeline will take precedence (in
+particular, if you have ft=asm in the modeline, you will get the GNU syntax
+highlighting regardless of what is specified as asmsyntax).
 
 The syntax type can always be overruled for a specific buffer by setting the
 b:asmsyntax variable: >
@@ -694,10 +937,12 @@
 c_ansi_typedefs		 ... but do standard ANSI types
 c_ansi_constants	 ... but do standard ANSI constants
 c_no_utf		don't highlight \u and \U in strings
-c_syntax_for_h		use C syntax for *.h files, instead of C++
+c_syntax_for_h		for *.h files use C syntax instead of C++ and use objc
+			syntax instead of objcpp
 c_no_if0		don't highlight "#if 0" blocks as comments
 c_no_cformat		don't highlight %-formats in strings
 c_no_c99		don't highlight C99 standard items
+c_no_c11		don't highlight C11 standard items
 
 When 'foldmethod' is set to "syntax" then /* */ comments and { } blocks will
 become a fold.  If you don't want comments to become a fold use: >
@@ -798,6 +1043,14 @@
 The ColdFusion syntax file is based on the HTML syntax file.
 
 
+CPP						*cpp.vim* *ft-cpp-syntax*
+
+Most of things are same as |ft-c-syntax|.
+
+Variable		Highlight ~
+cpp_no_c11		don't highlight C++11 standard items
+
+
 CSH						*csh.vim* *ft-csh-syntax*
 
 This covers the shell named "csh".  Note that on some systems tcsh is actually
@@ -806,13 +1059,13 @@
 Detecting whether a file is csh or tcsh is notoriously hard.  Some systems
 symlink /bin/csh to /bin/tcsh, making it almost impossible to distinguish
 between csh and tcsh.  In case VIM guesses wrong you can set the
-"filetype_csh" variable.  For using csh: >
-
-	:let filetype_csh = "csh"
+"filetype_csh" variable.  For using csh:  *g:filetype_csh*
+>
+	:let g:filetype_csh = "csh"
 
 For using tcsh: >
 
-	:let filetype_csh = "tcsh"
+	:let g:filetype_csh = "tcsh"
 
 Any script with a tcsh extension or a standard tcsh filename (.tcshrc,
 tcsh.tcshrc, tcsh.login) will have filetype tcsh.  All other tcsh/csh scripts
@@ -872,8 +1125,8 @@
 
 
 DOCBOOK					*docbk.vim* *ft-docbk-syntax* *docbook*
-DOCBOOK	XML				*docbkxml.vim* *ft-docbkxml-syntax*
-DOCBOOK	SGML				*docbksgml.vim* *ft-docbksgml-syntax*
+DOCBOOK XML				*docbkxml.vim* *ft-docbkxml-syntax*
+DOCBOOK SGML				*docbksgml.vim* *ft-docbksgml-syntax*
 
 There are two types of DocBook files: SGML and XML.  To specify what type you
 are using the "b:docbk_type" variable should be set.  Vim does this for you
@@ -889,6 +1142,10 @@
 or: >
 	:set filetype=docbkxml
 
+You can specify the DocBook version: >
+	:let docbk_ver = 3
+When not set 4 is used.
+
 
 DOSBATCH				*dosbatch.vim* *ft-dosbatch-syntax*
 
@@ -925,9 +1182,9 @@
 or >
 	// vim:syntax=c.doxygen
 
-It can also be done automatically for C, C++, C# and IDL files by setting the
-global or buffer-local variable load_doxygen_syntax.  This is done by adding
-the following to your .vimrc. >
+It can also be done automatically for C, C++, C#, IDL and PHP files by setting
+the global or buffer-local variable load_doxygen_syntax.  This is done by
+adding the following to your .vimrc. >
 	:let g:load_doxygen_syntax=1
 
 There are a couple of variables that have an effect on syntax highlighting, and
@@ -1026,22 +1283,24 @@
 
 ERLANG						*erlang.vim* *ft-erlang-syntax*
 
-The erlang highlighting supports Erlang (ERicsson LANGuage).
-Erlang is case sensitive and default extension is ".erl".
+Erlang is a functional programming language developed by Ericsson.  Files with
+the following extensions are recognized as Erlang files: erl, hrl, yaws.
 
-If you want to disable keywords highlighting, put in your .vimrc: >
-	:let erlang_keywords = 1
-If you want to disable built-in-functions highlighting, put in your
-.vimrc file: >
-	:let erlang_functions = 1
-If you want to disable special characters highlighting, put in
-your .vimrc: >
-	:let erlang_characters = 1
+The BIFs (built-in functions) are highlighted by default. To disable this,
+put the following line in your vimrc: >
+
+      :let g:erlang_highlight_bifs = 0
+
+To enable highlighting some special atoms, put this in your vimrc: >
+
+      :let g:erlang_highlight_special_atoms = 1
 
 
 FLEXWIKI				*flexwiki.vim* *ft-flexwiki-syntax*
 
 FlexWiki is an ASP.NET-based wiki package available at http://www.flexwiki.com
+NOTE: this site currently doesn't work, on Wikipedia is mentioned that
+development stopped in 2009.
 
 Syntax highlighting is available for the most common elements of FlexWiki
 syntax. The associated ftplugin script sets some buffer-local options to make
@@ -1093,14 +1352,12 @@
 FORTRAN					*fortran.vim* *ft-fortran-syntax*
 
 Default highlighting and dialect ~
-Highlighting appropriate for f95 (Fortran 95) is used by default.  This choice
-should be appropriate for most users most of the time because Fortran 95 is a
-superset of Fortran 90 and almost a superset of Fortran 77. Support for 
-Fortran 2003 and Fortran 2008 features has been introduced and is
-automatically available in the default (f95) highlighting.
+Highlighting appropriate for Fortran 2008 is used by default.  This choice
+should be appropriate for most users most of the time because Fortran 2008 is
+almost a superset of previous versions (Fortran 2003, 95, 90, and 77).
 
 Fortran source code form ~
-Fortran 9x code can be in either fixed or free source form.  Note that the
+Fortran code can be in either fixed or free source form.  Note that the
 syntax highlighting will not be correct if the form is incorrectly set.
 
 When you create a new fortran file, the syntax script assumes fixed source
@@ -1181,52 +1438,54 @@
 construct.
 
 Non-default fortran dialects ~
-The syntax script supports five Fortran dialects: f95, f90, f77, the Lahey
-subset elf90, and the Imagine1 subset F.
-
-If you use f77 with extensions, even common ones like do/enddo loops, do/while
-loops and free source form that are supported by most f77 compilers including
-g77 (GNU Fortran), then you will probably find the default highlighting
-satisfactory.  However, if you use strict f77 with no extensions, not even free
-source form or the MIL STD 1753 extensions, then the advantages of setting the
-dialect to f77 are that names such as SUM are recognized as user variable
-names and not highlighted as f9x intrinsic functions, that obsolete constructs
-such as ASSIGN statements are not highlighted as todo items, and that fixed
-source form will be assumed.
-
-If you use elf90 or F, the advantage of setting the dialect appropriately is
-that f90 features excluded from these dialects will be highlighted as todo
-items and that free source form will be assumed as required for these
-dialects.
-
-The dialect can be selected by setting the variable fortran_dialect.  The
-permissible values of fortran_dialect are case-sensitive and must be "f95",
-"f90", "f77", "elf" or "F".  Invalid values of fortran_dialect are ignored.
-
-If all your fortran files use the same dialect, set fortran_dialect in your
-.vimrc prior to your syntax on statement.  If the dialect depends upon the file
-extension, then it is most convenient to set it in a ftplugin file.  For more
-information on ftplugin files, see |ftplugin|.  For example, if all your
-fortran files with an .f90 extension are written in the elf subset, your
-ftplugin file should contain the code >
+The syntax script supports two Fortran dialects: f08 and F. You will probably
+find the default highlighting (f08) satisfactory.  A few legacy constructs
+deleted or declared obsolescent in the 2008 standard are highlighted as todo
+items.
+
+If you use F, the advantage of setting the dialect appropriately is that
+other legacy features excluded from F will be highlighted as todo items and
+that free source form will be assumed.
+
+The dialect can be selected in various ways.  If all your fortran files use
+the same dialect, set the global variable fortran_dialect in your .vimrc prior
+to your syntax on statement.  The case-sensitive, permissible values of
+fortran_dialect are "f08" or "F".  Invalid values of fortran_dialect are
+ignored.
+
+If the dialect depends upon the file extension, then it is most convenient to
+set a buffer-local variable in a ftplugin file.  For more information on
+ftplugin files, see |ftplugin|.  For example, if all your fortran files with
+an .f90 extension are written in the F subset, your ftplugin file should
+contain the code >
     let s:extfname = expand("%:e")
     if s:extfname ==? "f90"
-	let fortran_dialect="elf"
+	let b:fortran_dialect="F"
     else
-	unlet! fortran_dialect
+	unlet! b:fortran_dialect
     endif
 Note that this will work only if the "filetype plugin indent on" command
 precedes the "syntax on" command in your .vimrc file.
 
 Finer control is necessary if the file extension does not uniquely identify
-the dialect.  You can override the default dialect, on a file-by-file basis, by
-including a comment with the directive "fortran_dialect=xx" (where xx=f77 or
-elf or F or f90 or f95) in one of the first three lines in your file.  For
-example, your older .f files may be written in extended f77 but your newer
-ones may be F codes, and you would identify the latter by including in the
-first three lines of those files a Fortran comment of the form >
+the dialect.  You can override the default dialect, on a file-by-file basis,
+by including a comment with the directive "fortran_dialect=xx" (where xx=F or
+f08) in one of the first three lines in your file.  For example, your older .f
+files may be legacy code but your newer ones may be F codes, and you would
+identify the latter by including in the first three lines of those files a
+Fortran comment of the form >
   ! fortran_dialect=F
-F overrides elf if both directives are present.
+
+For previous versions of the syntax, you may have set fortran_dialect to the
+now-obsolete values "f77", "f90", "f95", or "elf". Such settings will be
+silently handled as "f08". Users of "elf" may wish to experiment with "F"
+instead.
+
+The syntax/fortran.vim script contains embedded comments that tell you how to
+comment and/or uncomment some lines to (a) activate recognition of some
+non-standard, vendor-supplied intrinsics and (b) to prevent features deleted
+or declared obsolescent in the 2008 standard from being highlighted as todo
+items.
 
 Limitations ~
 Parenthesis checking does not catch too few closing parentheses.  Hollerith
@@ -1541,11 +1800,6 @@
 strings, strings, boolean constants and types (this, super) respectively.  I
 have opted to chose another background for those statements.
 
-In order to help you write code that can be easily ported between Java and
-C++, all C++ keywords can be marked as an error in a Java program.  To
-have this add this line in your .vimrc file: >
-	:let java_allow_cpp_keywords = 0
-
 Javadoc is a program that takes special comments out of Java program files and
 creates HTML pages.  The standard configuration will highlight this HTML code
 similarly to HTML files (see |html.vim|).  You can even add Javascript
@@ -1684,19 +1938,10 @@
 
 LUA						*lua.vim* *ft-lua-syntax*
 
-This syntax file may be used for Lua 4.0, Lua 5.0 or Lua 5.1 (the latter is
+The Lua syntax file can be used for versions 4.0, 5.0, 5.1 and 5.2 (5.2 is
 the default). You can select one of these versions using the global variables
 lua_version and lua_subversion. For example, to activate Lua
-4.0 syntax highlighting, use this command: >
-
-	:let lua_version = 4
-
-If you are using Lua 5.0, use these commands: >
-
-	:let lua_version = 5
-	:let lua_subversion = 0
-
-To restore highlighting for Lua 5.1: >
+5.1 syntax highlighting, set the variables like this:
 
 	:let lua_version = 5
 	:let lua_subversion = 1
@@ -1868,7 +2113,7 @@
 than you intend to have in your final document.  For this reason, the common
 practice is to insert a carriage return immediately after all punctuation
 marks.  If you want to have "even" text in your final processed output, you
-need to maintaining regular spacing in the input text.  To mark both trailing
+need to maintain regular spacing in the input text.  To mark both trailing
 spaces and two or more spaces after a punctuation as an error, use: >
 
   :let nroff_space_errors = 1
@@ -1987,9 +2232,11 @@
 
 There are a number of possible options to the perl syntax highlighting.
 
-If you use POD files or POD segments, you might: >
+Inline POD highlighting is now turned on by default.  If you don't wish
+to have the added complexity of highlighting POD embedded within Perl
+files, you may set the 'perl_include_pod' option to 0: >
 
-	:let perl_include_pod = 1
+	:let perl_include_pod = 0
 
 The reduce the complexity of parsing (and increase performance) you can switch
 off two elements in the parsing of variable names and contents. >
@@ -2042,13 +2289,20 @@
 
 	:let perl_fold_blocks = 1
 
-To avoid folding packages or subs when perl_fold is let, let the appropriate
-variable(s): >
+Subroutines are folded by default if 'perl_fold' is set.  If you do not want
+this, you can set 'perl_nofold_subs': >
+
+	:let perl_nofold_subs = 1
 
-	:unlet perl_nofold_packages
-	:unlet perl_nofold_subs
+Anonymous subroutines are not folded by default; you may enable their folding
+via 'perl_fold_anonymous_subs': >
 
+	:let perl_fold_anonymous_subs = 1
 
+Packages are also folded by default if 'perl_fold' is set.  To disable this
+behavior, set 'perl_nofold_packages': >
+
+	:let perl_nofold_packages = 1
 
 PHP3 and PHP4		*php.vim* *php3.vim* *ft-php-syntax* *ft-php3-syntax*
 
@@ -2085,7 +2339,7 @@
 
   let php_parent_error_close = 1
 
-For skipping an php end tag, if there exists an open ( or [ without a closing
+For skipping a php end tag, if there exists an open ( or [ without a closing
 one: >
 
   let php_parent_error_open = 1
@@ -2247,24 +2501,33 @@
 
 PYTHON						*python.vim* *ft-python-syntax*
 
-There are four options to control Python syntax highlighting.
+There are six options to control Python syntax highlighting.
 
 For highlighted numbers: >
-	:let python_highlight_numbers = 1
+	:let python_no_number_highlight = 1
 
 For highlighted builtin functions: >
-	:let python_highlight_builtins = 1
+	:let python_no_builtin_highlight = 1
 
 For highlighted standard exceptions: >
-	:let python_highlight_exceptions = 1
+	:let python_no_exception_highlight = 1
+
+For highlighted doctests and code inside: >
+	:let python_no_doctest_highlight = 1
+or >
+	:let python_no_doctest_code_highlight = 1
+(first option implies second one).
 
-For highlighted trailing whitespace and mix of spaces and tabs:
-	:let python_highlight_space_errors = 1
+For highlighted trailing whitespace and mix of spaces and tabs: >
+	:let python_space_error_highlight = 1
 
 If you want all possible Python highlighting (the same as setting the
-preceding three options): >
+preceding last option and unsetting all other ones): >
 	:let python_highlight_all = 1
 
+Note: only existence of these options matter, not their value. You can replace
+      1 above with anything.
+
 
 QUAKE						*quake.vim* *ft-quake-syntax*
 
@@ -2300,6 +2563,12 @@
 later, and part earlier) adds.
 
 
+RESTRUCTURED TEXT			*rst.vim* *ft-rst-syntax*
+
+You may set what syntax definitions should be used for code blocks via
+	let rst_syntax_code_list = ['vim', 'lisp', ...]
+
+
 REXX						*rexx.vim* *ft-rexx-syntax*
 
 If you notice highlighting errors while scrolling backwards, which are fixed
@@ -2310,6 +2579,12 @@
 displayed line.  The default value is 10.  The disadvantage of using a larger
 number is that redrawing can become slow.
 
+Vim tries to guess what type a ".r" file is.  If it can't be detected (from
+comment lines), the default is "r".  To make the default rexx add this line to
+your .vimrc:  *g:filetype_r*
+>
+	:let g:filetype_r = "r"
+
 
 RUBY						*ruby.vim* *ft-ruby-syntax*
 
@@ -2537,8 +2812,41 @@
 The default is to use the twice sh_minlines.  Set it to a smaller number to
 speed up displaying.  The disadvantage is that highlight errors may appear.
 
+						*g:sh_isk* *g:sh_noisk*
+The shell languages appear to let "." be part of words, commands, etc;
+consequently it should be in the isk for sh.vim.  As of v116 of syntax/sh.vim,
+syntax/sh.vim will append the "." to |'iskeyword'| by default; you may control
+this behavior with: >
+	let g:sh_isk  = '..whatever characters you want as part of iskeyword'
+	let g:sh_noisk= 1  " otherwise, if this exists, the isk will NOT chg
+<
+						*sh-embed*  *sh-awk*
+ Sh: EMBEDDING LANGUAGES~
+
+You may wish to embed languages into sh.  I'll give an example courtesy of
+Lorance Stinson on how to do this with awk as an example. Put the following
+file into $HOME/.vim/after/syntax/sh/awkembed.vim: >
+
+    " AWK Embedding: {{{1
+    " ==============
+    " Shamelessly ripped from aspperl.vim by Aaron Hope.
+    if exists("b:current_syntax")
+      unlet b:current_syntax
+    endif
+    syn include @AWKScript syntax/awk.vim
+    syn region AWKScriptCode matchgroup=AWKCommand start=+[=\\]\@<!'+ skip=+\\'+ end=+'+ contains=@AWKScript contained
+    syn region AWKScriptEmbedded matchgroup=AWKCommand start=+\<awk\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1 contains=@shIdList,@shExprList2 nextgroup=AWKScriptCode
+    syn cluster shCommandSubList add=AWKScriptEmbedded
+    hi def link AWKCommand Type
+<
+This code will then let the awk code in the single quotes: >
+	awk '...awk code here...'
+be highlighted using the awk highlighting syntax.  Clearly this may be
+extended to other languages.
+
 
-SPEEDUP (AspenTech plant simulator)		*spup.vim* *ft-spup-syntax*
+SPEEDUP						*spup.vim* *ft-spup-syntax*
+(AspenTech plant simulator)
 
 The Speedup syntax file has some options:
 
@@ -2610,9 +2918,24 @@
 redrawing can become slow.
 
 
-TEX						*tex.vim* *ft-tex-syntax*
+TEX				*tex.vim* *ft-tex-syntax* *latex-syntax*
+
+			Tex Contents~
+	Tex: Want Syntax Folding?			|tex-folding|
+	Tex: No Spell Checking Wanted			|g:tex_nospell|
+	Tex: Don't Want Spell Checking In Comments?	|tex-nospell|
+	Tex: Want Spell Checking in Verbatim Zones?	|tex-verb|
+	Tex: Run-on Comments or MathZones		|tex-runon|
+	Tex: Slow Syntax Highlighting?			|tex-slow|
+	Tex: Want To Highlight More Commands?		|tex-morecommands|
+	Tex: Excessive Error Highlighting?		|tex-error|
+	Tex: Need a new Math Group?			|tex-math|
+	Tex: Starting a New Style?			|tex-style|
+	Tex: Taking Advantage of Conceal Mode		|tex-conceal|
+	Tex: Selective Conceal Mode			|g:tex_conceal|
+	Tex: Controlling iskeyword			|g:tex_isk|
 
-								*tex-folding*
+				*tex-folding* *g:tex_fold_enabled*
  Tex: Want Syntax Folding? ~
 
 As of version 28 of <syntax/tex.vim>, syntax-based folding of parts, chapters,
@@ -2621,16 +2944,28 @@
 in your <.vimrc>, and :set fdm=syntax.  I suggest doing the latter via a
 modeline at the end of your LaTeX file: >
 	% vim: fdm=syntax
+If your system becomes too slow, then you might wish to look into >
+	https://vimhelp.appspot.com/vim_faq.txt.html#faq-29.7
 <
-								*tex-nospell*
+						*g:tex_nospell*
+ Tex: No Spell Checking Wanted~
+
+If you don't want spell checking anywhere in your LaTeX document, put >
+	let g:tex_nospell=1
+into your .vimrc.  If you merely wish to suppress spell checking inside
+comments only, see |g:tex_comment_nospell|.
+
+				*tex-nospell* *g:tex_comment_nospell*
  Tex: Don't Want Spell Checking In Comments? ~
 
 Some folks like to include things like source code in comments and so would
 prefer that spell checking be disabled in comments in LaTeX files.  To do
 this, put the following in your <.vimrc>: >
       let g:tex_comment_nospell= 1
-<
-								*tex-verb*
+If you want to suppress spell checking everywhere inside your LaTeX document,
+see |g:tex_nospell|.
+
+				*tex-verb* *g:tex_verbspell*
  Tex: Want Spell Checking in Verbatim Zones?~
 
 Often verbatim regions are used for things like source code; seldom does
@@ -2638,7 +2973,7 @@
 want your verbatim zones spell-checked, put the following in your <.vimrc>: >
 	let g:tex_verbspell= 1
 <
-								*tex-runon*
+					*tex-runon* *tex-stopzone*
  Tex: Run-on Comments or MathZones ~
 
 The <syntax/tex.vim> highlighting supports TeX, LaTeX, and some AmsTeX.  The
@@ -2651,7 +2986,7 @@
 which will forcibly terminate the highlighting of either a texZone or a
 texMathZone.
 
-								*tex-slow*
+					*tex-slow* *tex-sync*
  Tex: Slow Syntax Highlighting? ~
 
 If you have a slow computer, you may wish to reduce the values for >
@@ -2661,7 +2996,39 @@
 increase them.	This primarily affects synchronizing (i.e. just what group,
 if any, is the text at the top of the screen supposed to be in?).
 
-					    *tex-morecommands* *tex-package*
+Another cause of slow highlighting is due to syntax-driven folding; see
+|tex-folding| for a way around this.
+
+					*g:tex_fast*
+
+Finally, if syntax highlighting is still too slow, you may set >
+
+	:let g:tex_fast= ""
+
+in your .vimrc.  Used this way, the g:tex_fast variable causes the syntax
+highlighting script to avoid defining any regions and associated
+synchronization.  The result will be much faster syntax highlighting; the
+price: you will no longer have as much highlighting or any syntax-based
+folding, and you will be missing syntax-based error checking.
+
+You may decide that some syntax is acceptable; you may use the following table
+selectively to enable just some syntax highlighting: >
+
+    b : allow bold and italic syntax
+    c : allow texComment syntax
+    m : allow texMatcher syntax (ie. {...} and [...])
+    M : allow texMath syntax
+    p : allow parts, chapter, section, etc syntax
+    r : allow texRefZone syntax (nocite, bibliography, label, pageref, eqref)
+    s : allow superscript/subscript regions
+    S : allow texStyle syntax
+    v : allow verbatim syntax
+    V : allow texNewEnv and texNewCmd syntax
+<
+As an example, let g:tex_fast= "M" will allow math-associated highlighting
+but suppress all the other region-based syntax highlighting.
+
+					*tex-morecommands* *tex-package*
  Tex: Want To Highlight More Commands? ~
 
 LaTeX is a programmable language, and so there are thousands of packages full
@@ -2669,16 +3036,18 @@
 package you'll often wish that the distributed syntax/tex.vim would support
 it.  However, clearly this is impractical.  So please consider using the
 techniques in |mysyntaxfile-add| to extend or modify the highlighting provided
-by syntax/tex.vim.
+by syntax/tex.vim.  Please consider uploading any extensions that you write,
+which typically would go in $HOME/after/syntax/tex/[pkgname].vim, to
+http://vim.sf.net/.
 
-								*tex-error*
+					*tex-error* *g:tex_no_error*
  Tex: Excessive Error Highlighting? ~
 
 The <tex.vim> supports lexical error checking of various sorts.  Thus,
 although the error checking is ofttimes very useful, it can indicate
 errors where none actually are.  If this proves to be a problem for you,
 you may put in your <.vimrc> the following statement: >
-	let tex_no_error=1
+	let g:tex_no_error=1
 and all error checking by <syntax/tex.vim> will be suppressed.
 
 								*tex-math*
@@ -2696,7 +3065,7 @@
 The "starform" variable, if true, implies that your new math group
 has a starred form (ie. eqnarray*).
 
-								*tex-style*
+					*tex-style* *b:tex_stylish*
  Tex: Starting a New Style? ~
 
 One may use "\makeatletter" in *.tex files, thereby making the use of "@" in
@@ -2723,14 +3092,15 @@
 One way to use this is to have vertically split windows (see |CTRL-W_v|); one
 with |'conceallevel'| at 0 and the other at 2; and both using |'scrollbind'|.
 
-							*g:tex_conceal*
+					*g:tex_conceal*
  Tex: Selective Conceal Mode~
 
 You may selectively use conceal mode by setting g:tex_conceal in your
-<.vimrc>.  By default it is set to "admgs" to enable conceal for the
-following sets of characters: >
+<.vimrc>.  By default, g:tex_conceal is set to "admgs" to enable concealment
+for the following sets of characters: >
 
 	a = accents/ligatures
+	b = bold and italic
 	d = delimiters
 	m = math symbols
 	g = Greek
@@ -2739,6 +3109,25 @@
 By leaving one or more of these out, the associated conceal-character
 substitution will not be made.
 
+						*g:tex_isk* *g:tex_stylish*
+ Tex: Controlling iskeyword~
+
+Normally, LaTeX keywords support 0-9, a-z, A-z, and 192-255 only. Latex
+keywords don't support the underscore - except when in *.sty files.  The
+syntax highlighting script handles this with the following logic:
+
+	* If g:tex_stylish exists and is 1
+		then the file will be treated as a "sty" file, so the "_"
+		will be allowed as part of keywords
+		(irregardless of g:tex_isk)
+	* Else if the file's suffix is sty, cls, clo, dtx, or ltx,
+		then the file will be treated as a "sty" file, so the "_"
+		will be allowed as part of keywords
+		(irregardless of g:tex_isk)
+
+	* If g:tex_isk exists, then it will be used for the local 'iskeyword'
+	* Else the local 'iskeyword' will be set to 48-57,a-z,A-Z,192-255
+
 
 TF						*tf.vim* *ft-tf-syntax*
 
@@ -2748,8 +3137,7 @@
 set "tf_minlines" to the value you desire.  Example: >
 
 	:let tf_minlines = your choice
-
-
+<
 VIM			*vim.vim*		*ft-vim-syntax*
 			*g:vimsyn_minlines*	*g:vimsyn_maxlines*
 There is a trade-off between more accurate syntax highlighting versus screen
@@ -2792,7 +3180,7 @@
    g:vimsyn_folding =~ 'P' : fold python   script
    g:vimsyn_folding =~ 'r' : fold ruby     script
    g:vimsyn_folding =~ 't' : fold tcl      script
-
+<
 							*g:vimsyn_noerror*
 Not all error highlighting that syntax/vim.vim does may be correct; VimL is a
 difficult language to highlight correctly.  A way to suppress error
@@ -3174,6 +3562,9 @@
    :hi par1 ctermfg=red guifg=red
    :hi par2 ctermfg=blue guifg=blue
    :hi par3 ctermfg=darkgreen guifg=darkgreen
+<
+						*E849*
+The maximum number of syntax groups is 19999.
 
 ==============================================================================
 6. :syntax arguments					*:syn-arguments*
@@ -3218,11 +3609,12 @@
 in this way when they have their own highlighting via "matchgroup"
 
 cchar							*:syn-cchar*
-
+							*E844*
 The "cchar" argument defines the character shown in place of the item
 when it is concealed (setting "cchar" only makes sense when the conceal
 argument is given.) If "cchar" is not set then the default conceal
-character defined in the 'listchars' option is used. Example: >
+character defined in the 'listchars' option is used.  The character cannot be
+a control character such as Tab.  Example: >
    :syntax match Entity "&amp;" conceal cchar=&
 See |hl-Conceal| for highlighting.
 
@@ -3536,7 +3928,7 @@
 e	end of the matched pattern
 e+{nr}	end of the matched pattern plus {nr} chars to the right
 e-{nr}	end of the matched pattern plus {nr} chars to the left
-{nr}	(for "lc" only): start matching {nr} chars to the left
+{nr}	(for "lc" only): start matching {nr} chars right of the start
 
 Examples: "ms=s+1", "hs=e-2", "lc=3".
 
@@ -3633,10 +4025,10 @@
 
 These extra regular expression items are available in region patterns:
 
-						*/\z(* */\z(\)* *E50* *E52*
-    \z(\)	Marks the sub-expression as "external", meaning that it is can
-		be accessed from another pattern match.  Currently only usable
-		in defining a syntax region start pattern.
+					*/\z(* */\z(\)* *E50* *E52* *E879*
+    \z(\)	Marks the sub-expression as "external", meaning that it can be
+		accessed from another pattern match.  Currently only usable in
+		defining a syntax region start pattern.
 
 					*/\z1* */\z2* */\z3* */\z4* */\z5*
     \z1  ...  \z9			*/\z6* */\z7* */\z8* */\z9* *E66* *E67*
@@ -3711,6 +4103,9 @@
    :syntax match Stuff "( aaa bbb )" contains=@BigGroup
    :syntax cluster BigGroup remove=B	" no effect, since B isn't in BigGroup
    :syntax cluster SmallGroup remove=B	" now bbb isn't matched within Stuff
+<
+						*E848*
+The maximum number of clusters is 9767.
 
 ==============================================================================
 9. Including syntax files				*:syn-include* *E397*
@@ -3750,6 +4145,9 @@
 	  with his own version, without replacing the file that does the ":syn
 	  include".
 
+						*E847*
+The maximum number of includes is 999.
+
 ==============================================================================
 10. Synchronizing				*:syn-sync* *E403* *E404*
 
@@ -3803,7 +4201,7 @@
 The file will be parsed from the start.  This makes syntax highlighting
 accurate, but can be slow for long files.  Vim caches previously parsed text,
 so that it's only slow when parsing the text for the first time.  However,
-when making changes some part of the next needs to be parsed again (worst
+when making changes some part of the text needs to be parsed again (worst
 case: to the end of the file).
 
 Using "fromstart" is equivalent to using "minlines" with a very large number.
@@ -3953,7 +4351,7 @@
 
     :sy[ntax] list {group-name}
 
-To list the syntax groups in one cluster:			*E392*	>
+To list the syntax groups in one cluster:			*E392*	 >
 
     :sy[ntax] list @{cluster-name}
 
@@ -3986,7 +4384,7 @@
 			feature it will output "unknown".
 
 :colo[rscheme] {name}	Load color scheme {name}.  This searches 'runtimepath'
-			for the file "colors/{name}.vim.  The first one that
+			for the file "colors/{name}.vim".  The first one that
 			is found is loaded.
 			To see the name of the currently active color scheme: >
 				:colo
@@ -4316,6 +4714,9 @@
 							*hl-LineNr*
 LineNr		Line number for ":number" and ":#" commands, and when 'number'
 		or 'relativenumber' option is set.
+							*hl-CursorLineNr*
+CursorLineNr	Like LineNr when 'cursorline' or 'relativenumber' is set for
+		the cursor line.
 							*hl-MatchParen*
 MatchParen	The character under the cursor or just before it, if it
 		is a paired bracket, and its match. |pi_paren.txt|
@@ -4603,8 +5004,8 @@
 "w:current_syntax".
 
 Once a window has its own syntax, syntax commands executed from other windows
-on the same buffer (including :syntax clear) have no effect. Conversely, 
-syntax commands executed from that window do not effect other windows on the
+on the same buffer (including :syntax clear) have no effect. Conversely,
+syntax commands executed from that window do not affect other windows on the
 same buffer.
 
 A window with its own syntax reverts to normal behavior when another buffer
@@ -4612,7 +5013,7 @@
 When splitting the window, the new window will use the original syntax.
 
 ==============================================================================
-16. Color xterms				*xterm-color* *color-xterm*
+17. Color xterms				*xterm-color* *color-xterm*
 
 Most color xterms have only eight colors.  If you don't get colors with the
 default setup, it should work with these lines in your .vimrc: >
@@ -4754,4 +5155,63 @@
 that Setup / Font / Enable Bold is NOT enabled.
 (info provided by John Love-Jensen <eljay@Adobe.COM>)
 
+
+==============================================================================
+18. When syntax is slow						*:syntime*
+
+This is aimed at authors of a syntax file.
+
+If your syntax causes redrawing to be slow, here are a few hints on making it
+faster.  To see slowness switch on some features that usually interfere, such
+as 'relativenumber' and |folding|.
+
+Note: this is only available when compiled with the |+profile| feature.
+You many need to build Vim with "huge" features.
+
+To find out what patterns are consuming most time, get an overview with this
+sequence: >
+	:syntime on
+	[ redraw the text at least once with CTRL-L ]
+	:syntime report
+
+This will display a list of syntax patterns that were used, sorted by the time
+it took to match them against the text.
+
+:syntime on		Start measuring syntax times.  This will add some
+			overhead to compute the time spent on syntax pattern
+			matching.
+
+:syntime off		Stop measuring syntax times.
+
+:syntime clear		Set all the counters to zero, restart measuring.
+
+:syntime report		Show the syntax items used since ":syntime on" in the
+			current window.  Use a wider display to see more of
+			the output.
+
+			The list is sorted by total time. The columns are:
+			TOTAL		Total time in seconds spent on
+					matching this pattern.
+			COUNT		Number of times the pattern was used.
+			MATCH		Number of times the pattern actually
+					matched
+			SLOWEST		The longest time for one try.
+			AVERAGE		The average time for one try.
+			NAME		Name of the syntax item.  Note that
+					this is not unique.
+			PATTERN		The pattern being used.
+
+Pattern matching gets slow when it has to try many alternatives.  Try to
+include as much literal text as possible to reduce the number of ways a
+pattern does NOT match.
+
+When using the "\@<=" and "\@<!" items, add a maximum size to avoid trying at
+all positions in the current and previous line.  For example, if the item is
+literal text specify the size of that text (in bytes):
+
+"<\@<=span"	Matches "span" in "<span".  This tries matching with "<" in
+		many places.
+"<\@1<=span"	Matches the same, but only tries one byte before "span".
+
+
  vim:tw=78:sw=4:ts=8:ft=help:norl:
diff -Naur vim73.orig/runtime/doc/tabpage.txt vim73/runtime/doc/tabpage.txt
--- vim73.orig/runtime/doc/tabpage.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/tabpage.txt	2013-08-04 19:09:08.003951698 +0000
@@ -1,4 +1,4 @@
-*tabpage.txt*   For Vim version 7.3.  Last change: 2010 Jul 31
+*tabpage.txt*   For Vim version 7.3.  Last change: 2012 Aug 08
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -113,7 +113,7 @@
 		this is a "safe" command.
 
 :tabc[lose][!] {count}
-		Close tab page {count}.  Fails in the same way as ':tabclose"
+		Close tab page {count}.  Fails in the same way as `:tabclose`
 		above.
 
 							*:tabo* *:tabonly*
@@ -173,10 +173,20 @@
 REORDERING TAB PAGES:
 
 :tabm[ove] [N]						*:tabm* *:tabmove*
+:[N]tabm[ove]
 		Move the current tab page to after tab page N.  Use zero to
 		make the current tab page the first one.  Without N the tab
 		page is made the last one.
 
+:tabm[ove] +[N]
+:tabm[ove] -[N]
+		Move the current tab page N places to the right (with +) or to
+		the left (with -).
+
+Note that although it is possible to move a tab behind the N-th one by using
+:Ntabmove, it is impossible to move it by N places by using :+Ntabmove. For
+clarification what +N means in this context see |[range]|.
+
 
 LOOPING OVER TAB PAGES:
 
diff -Naur vim73.orig/runtime/doc/tags vim73/runtime/doc/tags
--- vim73.orig/runtime/doc/tags	2010-08-15 12:54:29.000000000 +0000
+++ vim73/runtime/doc/tags	2013-08-04 19:09:08.013951668 +0000
@@ -154,12 +154,14 @@
 'cscopepathcomp'	options.txt	/*'cscopepathcomp'*
 'cscopeprg'	options.txt	/*'cscopeprg'*
 'cscopequickfix'	options.txt	/*'cscopequickfix'*
+'cscoperelative'	options.txt	/*'cscoperelative'*
 'cscopetag'	options.txt	/*'cscopetag'*
 'cscopetagorder'	options.txt	/*'cscopetagorder'*
 'cscopeverbose'	options.txt	/*'cscopeverbose'*
 'cspc'	options.txt	/*'cspc'*
 'csprg'	options.txt	/*'csprg'*
 'csqf'	options.txt	/*'csqf'*
+'csre'	options.txt	/*'csre'*
 'cst'	options.txt	/*'cst'*
 'csto'	options.txt	/*'csto'*
 'csverb'	options.txt	/*'csverb'*
@@ -231,10 +233,12 @@
 'fex'	options.txt	/*'fex'*
 'ff'	options.txt	/*'ff'*
 'ffs'	options.txt	/*'ffs'*
+'fic'	options.txt	/*'fic'*
 'fileencoding'	options.txt	/*'fileencoding'*
 'fileencodings'	options.txt	/*'fileencodings'*
 'fileformat'	options.txt	/*'fileformat'*
 'fileformats'	options.txt	/*'fileformats'*
+'fileignorecase'	options.txt	/*'fileignorecase'*
 'filetype'	options.txt	/*'filetype'*
 'fillchars'	options.txt	/*'fillchars'*
 'fk'	options.txt	/*'fk'*
@@ -279,6 +283,7 @@
 'go-F'	options.txt	/*'go-F'*
 'go-L'	options.txt	/*'go-L'*
 'go-M'	options.txt	/*'go-M'*
+'go-P'	options.txt	/*'go-P'*
 'go-R'	options.txt	/*'go-R'*
 'go-T'	options.txt	/*'go-T'*
 'go-a'	options.txt	/*'go-a'*
@@ -336,7 +341,9 @@
 'iconstring'	options.txt	/*'iconstring'*
 'ignorecase'	options.txt	/*'ignorecase'*
 'im'	options.txt	/*'im'*
+'imactivatefunc'	options.txt	/*'imactivatefunc'*
 'imactivatekey'	options.txt	/*'imactivatekey'*
+'imaf'	options.txt	/*'imaf'*
 'imak'	options.txt	/*'imak'*
 'imc'	options.txt	/*'imc'*
 'imcmdline'	options.txt	/*'imcmdline'*
@@ -346,6 +353,8 @@
 'iminsert'	options.txt	/*'iminsert'*
 'ims'	options.txt	/*'ims'*
 'imsearch'	options.txt	/*'imsearch'*
+'imsf'	options.txt	/*'imsf'*
+'imstatusfunc'	options.txt	/*'imstatusfunc'*
 'inc'	options.txt	/*'inc'*
 'include'	options.txt	/*'include'*
 'includeexpr'	options.txt	/*'includeexpr'*
@@ -491,8 +500,10 @@
 'nocopyindent'	options.txt	/*'nocopyindent'*
 'nocp'	options.txt	/*'nocp'*
 'nocrb'	options.txt	/*'nocrb'*
+'nocscoperelative'	options.txt	/*'nocscoperelative'*
 'nocscopetag'	options.txt	/*'nocscopetag'*
 'nocscopeverbose'	options.txt	/*'nocscopeverbose'*
+'nocsre'	options.txt	/*'nocsre'*
 'nocst'	options.txt	/*'nocst'*
 'nocsverb'	options.txt	/*'nocsverb'*
 'nocuc'	options.txt	/*'nocuc'*
@@ -520,6 +531,8 @@
 'noexpandtab'	options.txt	/*'noexpandtab'*
 'noexrc'	options.txt	/*'noexrc'*
 'nofen'	options.txt	/*'nofen'*
+'nofic'	options.txt	/*'nofic'*
+'nofileignorecase'	options.txt	/*'nofileignorecase'*
 'nofk'	options.txt	/*'nofk'*
 'nofkmap'	options.txt	/*'nofkmap'*
 'nofoldenable'	options.txt	/*'nofoldenable'*
@@ -650,6 +663,8 @@
 'nottybuiltin'	options.txt	/*'nottybuiltin'*
 'nottyfast'	options.txt	/*'nottyfast'*
 'notx'	options.txt	/*'notx'*
+'noudf'	options.txt	/*'noudf'*
+'noundofile'	options.txt	/*'noundofile'*
 'novb'	options.txt	/*'novb'*
 'novice'	vi_diff.txt	/*'novice'*
 'novisualbell'	options.txt	/*'novisualbell'*
@@ -659,6 +674,8 @@
 'noweirdinvert'	options.txt	/*'noweirdinvert'*
 'nowfh'	options.txt	/*'nowfh'*
 'nowfw'	options.txt	/*'nowfw'*
+'nowic'	options.txt	/*'nowic'*
+'nowildignorecase'	options.txt	/*'nowildignorecase'*
 'nowildmenu'	options.txt	/*'nowildmenu'*
 'nowinfixheight'	options.txt	/*'nowinfixheight'*
 'nowinfixwidth'	options.txt	/*'nowinfixwidth'*
@@ -727,9 +744,11 @@
 'quote	motion.txt	/*'quote*
 'quoteescape'	options.txt	/*'quoteescape'*
 'rdt'	options.txt	/*'rdt'*
+'re'	options.txt	/*'re'*
 'readonly'	options.txt	/*'readonly'*
 'redraw'	vi_diff.txt	/*'redraw'*
 'redrawtime'	options.txt	/*'redrawtime'*
+'regexpengine'	options.txt	/*'regexpengine'*
 'relativenumber'	options.txt	/*'relativenumber'*
 'remap'	options.txt	/*'remap'*
 'report'	options.txt	/*'report'*
@@ -779,6 +798,7 @@
 'shellslash'	options.txt	/*'shellslash'*
 'shelltemp'	options.txt	/*'shelltemp'*
 'shelltype'	options.txt	/*'shelltype'*
+'shellxescape'	options.txt	/*'shellxescape'*
 'shellxquote'	options.txt	/*'shellxquote'*
 'shiftround'	options.txt	/*'shiftround'*
 'shiftwidth'	options.txt	/*'shiftwidth'*
@@ -848,6 +868,7 @@
 'swf'	options.txt	/*'swf'*
 'switchbuf'	options.txt	/*'switchbuf'*
 'sws'	options.txt	/*'sws'*
+'sxe'	options.txt	/*'sxe'*
 'sxq'	options.txt	/*'sxq'*
 'syn'	options.txt	/*'syn'*
 'synmaxcol'	options.txt	/*'synmaxcol'*
@@ -957,6 +978,7 @@
 't_te'	term.txt	/*'t_te'*
 't_ti'	term.txt	/*'t_ti'*
 't_ts'	term.txt	/*'t_ts'*
+'t_u7'	term.txt	/*'t_u7'*
 't_ue'	term.txt	/*'t_ue'*
 't_us'	term.txt	/*'t_us'*
 't_ut'	term.txt	/*'t_ut'*
@@ -1064,10 +1086,12 @@
 'wh'	options.txt	/*'wh'*
 'whichwrap'	options.txt	/*'whichwrap'*
 'wi'	options.txt	/*'wi'*
+'wic'	options.txt	/*'wic'*
 'wig'	options.txt	/*'wig'*
 'wildchar'	options.txt	/*'wildchar'*
 'wildcharm'	options.txt	/*'wildcharm'*
 'wildignore'	options.txt	/*'wildignore'*
+'wildignorecase'	options.txt	/*'wildignorecase'*
 'wildmenu'	options.txt	/*'wildmenu'*
 'wildmode'	options.txt	/*'wildmode'*
 'wildoptions'	options.txt	/*'wildoptions'*
@@ -1177,7 +1201,9 @@
 +mouse_gpm	various.txt	/*+mouse_gpm*
 +mouse_netterm	various.txt	/*+mouse_netterm*
 +mouse_pterm	various.txt	/*+mouse_pterm*
++mouse_sgr	various.txt	/*+mouse_sgr*
 +mouse_sysmouse	various.txt	/*+mouse_sysmouse*
++mouse_urxvt	various.txt	/*+mouse_urxvt*
 +mouse_xterm	various.txt	/*+mouse_xterm*
 +mouseshape	various.txt	/*+mouseshape*
 +multi_byte	various.txt	/*+multi_byte*
@@ -1187,7 +1213,6 @@
 +mzscheme/dyn	various.txt	/*+mzscheme\/dyn*
 +netbeans_intg	various.txt	/*+netbeans_intg*
 +ole	various.txt	/*+ole*
-+osfiletype	various.txt	/*+osfiletype*
 +path_extra	various.txt	/*+path_extra*
 +perl	various.txt	/*+perl*
 +perl/dyn	various.txt	/*+perl\/dyn*
@@ -1237,6 +1262,7 @@
 +writebackup	various.txt	/*+writebackup*
 +xfontset	various.txt	/*+xfontset*
 +xim	various.txt	/*+xim*
++xpm_w32	various.txt	/*+xpm_w32*
 +xsmp	various.txt	/*+xsmp*
 +xsmp_interact	various.txt	/*+xsmp_interact*
 +xterm_clipboard	various.txt	/*+xterm_clipboard*
@@ -1373,6 +1399,7 @@
 /\	pattern.txt	/*\/\\*
 /\$	pattern.txt	/*\/\\$*
 /\%#	pattern.txt	/*\/\\%#*
+/\%#=	pattern.txt	/*\/\\%#=*
 /\%$	pattern.txt	/*\/\\%$*
 /\%'m	pattern.txt	/*\/\\%'m*
 /\%(	pattern.txt	/*\/\\%(*
@@ -1818,6 +1845,7 @@
 :RmVimball	pi_vimball.txt	/*:RmVimball*
 :Sexplore	pi_netrw.txt	/*:Sexplore*
 :TOhtml	syntax.txt	/*:TOhtml*
+:TarDiff	pi_tar.txt	/*:TarDiff*
 :Texplore	pi_netrw.txt	/*:Texplore*
 :UseVimball	pi_vimball.txt	/*:UseVimball*
 :Vexplore	pi_netrw.txt	/*:Vexplore*
@@ -1826,6 +1854,7 @@
 :X	editing.txt	/*:X*
 :XMLent	insert.txt	/*:XMLent*
 :XMLns	insert.txt	/*:XMLns*
+:[range]	motion.txt	/*:[range]*
 :\bar	cmdline.txt	/*:\\bar*
 :_!	cmdline.txt	/*:_!*
 :_#	cmdline.txt	/*:_#*
@@ -2087,6 +2116,7 @@
 :display	change.txt	/*:display*
 :dj	tagsrch.txt	/*:dj*
 :djump	tagsrch.txt	/*:djump*
+:dl	change.txt	/*:dl*
 :dli	tagsrch.txt	/*:dli*
 :dlist	tagsrch.txt	/*:dlist*
 :do	autocmd.txt	/*:do*
@@ -2390,6 +2420,7 @@
 :map!	map.txt	/*:map!*
 :map-<buffer>	map.txt	/*:map-<buffer>*
 :map-<expr>	map.txt	/*:map-<expr>*
+:map-<nowait>	map.txt	/*:map-<nowait>*
 :map-<script>	map.txt	/*:map-<script>*
 :map-<silent>	map.txt	/*:map-<silent>*
 :map-<special>	map.txt	/*:map-<special>*
@@ -2400,6 +2431,7 @@
 :map-expression	map.txt	/*:map-expression*
 :map-local	map.txt	/*:map-local*
 :map-modes	map.txt	/*:map-modes*
+:map-nowait	map.txt	/*:map-nowait*
 :map-operator	map.txt	/*:map-operator*
 :map-script	map.txt	/*:map-script*
 :map-silent	map.txt	/*:map-silent*
@@ -2571,7 +2603,9 @@
 :pwd	editing.txt	/*:pwd*
 :py	if_pyth.txt	/*:py*
 :py3	if_pyth.txt	/*:py3*
+:py3do	if_pyth.txt	/*:py3do*
 :py3file	if_pyth.txt	/*:py3file*
+:pydo	if_pyth.txt	/*:pydo*
 :pyf	if_pyth.txt	/*:pyf*
 :pyfile	if_pyth.txt	/*:pyfile*
 :python	if_pyth.txt	/*:python*
@@ -2607,6 +2641,7 @@
 :resize	windows.txt	/*:resize*
 :ret	change.txt	/*:ret*
 :retab	change.txt	/*:retab*
+:retab!	change.txt	/*:retab!*
 :retu	eval.txt	/*:retu*
 :return	eval.txt	/*:return*
 :rew	editing.txt	/*:rew*
@@ -2849,6 +2884,7 @@
 :syntax-enable	syntax.txt	/*:syntax-enable*
 :syntax-on	syntax.txt	/*:syntax-on*
 :syntax-reset	syntax.txt	/*:syntax-reset*
+:syntime	syntax.txt	/*:syntime*
 :t	change.txt	/*:t*
 :tN	tagsrch.txt	/*:tN*
 :tNext	tagsrch.txt	/*:tNext*
@@ -3198,10 +3234,12 @@
 <line1>	map.txt	/*<line1>*
 <line2>	map.txt	/*<line2>*
 <lt>	intro.txt	/*<lt>*
+<nomodeline>	autocmd.txt	/*<nomodeline>*
 <q-args>	map.txt	/*<q-args>*
 <reg>	map.txt	/*<reg>*
 <register>	map.txt	/*<register>*
 <sfile>	cmdline.txt	/*<sfile>*
+<slnum>	cmdline.txt	/*<slnum>*
 <xCSI>	intro.txt	/*<xCSI>*
 <xDown>	term.txt	/*<xDown>*
 <xEnd>	term.txt	/*<xEnd>*
@@ -3395,6 +3433,7 @@
 ColorScheme	autocmd.txt	/*ColorScheme*
 Command-line	cmdline.txt	/*Command-line*
 Command-line-mode	cmdline.txt	/*Command-line-mode*
+CompleteDone	autocmd.txt	/*CompleteDone*
 Contents	quickref.txt	/*Contents*
 Cscope	if_cscop.txt	/*Cscope*
 CursorHold	autocmd.txt	/*CursorHold*
@@ -3420,7 +3459,6 @@
 E103	diff.txt	/*E103*
 E104	digraph.txt	/*E104*
 E105	mbyte.txt	/*E105*
-E106	eval.txt	/*E106*
 E107	eval.txt	/*E107*
 E108	eval.txt	/*E108*
 E109	eval.txt	/*E109*
@@ -3587,7 +3625,6 @@
 E258	remote.txt	/*E258*
 E259	if_cscop.txt	/*E259*
 E26	rileft.txt	/*E26*
-E260	if_cscop.txt	/*E260*
 E261	if_cscop.txt	/*E261*
 E262	if_cscop.txt	/*E262*
 E263	if_pyth.txt	/*E263*
@@ -3620,9 +3657,6 @@
 E288	mbyte.txt	/*E288*
 E289	mbyte.txt	/*E289*
 E29	change.txt	/*E29*
-E290	mbyte.txt	/*E290*
-E291	mbyte.txt	/*E291*
-E292	mbyte.txt	/*E292*
 E293	message.txt	/*E293*
 E294	message.txt	/*E294*
 E295	message.txt	/*E295*
@@ -3702,7 +3736,6 @@
 E363	options.txt	/*E363*
 E364	eval.txt	/*E364*
 E365	print.txt	/*E365*
-E366	options.txt	/*E366*
 E367	autocmd.txt	/*E367*
 E368	eval.txt	/*E368*
 E369	pattern.txt	/*E369*
@@ -3836,7 +3869,6 @@
 E486	pattern.txt	/*E486*
 E487	options.txt	/*E487*
 E488	message.txt	/*E488*
-E489	intro.txt	/*E489*
 E49	message.txt	/*E49*
 E490	fold.txt	/*E490*
 E492	message.txt	/*E492*
@@ -3919,7 +3951,6 @@
 E562	if_cscop.txt	/*E562*
 E563	if_cscop.txt	/*E563*
 E564	if_cscop.txt	/*E564*
-E565	if_cscop.txt	/*E565*
 E566	if_cscop.txt	/*E566*
 E567	if_cscop.txt	/*E567*
 E568	if_cscop.txt	/*E568*
@@ -3969,8 +4000,6 @@
 E608	eval.txt	/*E608*
 E609	if_cscop.txt	/*E609*
 E61	pattern.txt	/*E61*
-E610	options.txt	/*E610*
-E611	options.txt	/*E611*
 E612	sign.txt	/*E612*
 E613	print.txt	/*E613*
 E614	editing.txt	/*E614*
@@ -4219,11 +4248,51 @@
 E835	options.txt	/*E835*
 E836	if_pyth.txt	/*E836*
 E837	if_pyth.txt	/*E837*
+E838	netbeans.txt	/*E838*
+E839	insert.txt	/*E839*
 E84	windows.txt	/*E84*
+E840	insert.txt	/*E840*
+E841	map.txt	/*E841*
+E842	cmdline.txt	/*E842*
+E843	editing.txt	/*E843*
+E844	syntax.txt	/*E844*
+E845	spell.txt	/*E845*
+E846	options.txt	/*E846*
+E847	syntax.txt	/*E847*
+E848	syntax.txt	/*E848*
+E849	syntax.txt	/*E849*
 E85	options.txt	/*E85*
+E850	change.txt	/*E850*
+E851	gui_x11.txt	/*E851*
+E852	gui_x11.txt	/*E852*
+E853	eval.txt	/*E853*
+E854	options.txt	/*E854*
+E855	autocmd.txt	/*E855*
+E858	eval.txt	/*E858*
+E859	eval.txt	/*E859*
 E86	windows.txt	/*E86*
+E860	eval.txt	/*E860*
+E862	eval.txt	/*E862*
+E863	if_pyth.txt	/*E863*
+E864	pattern.txt	/*E864*
+E865	pattern.txt	/*E865*
+E866	pattern.txt	/*E866*
+E867	pattern.txt	/*E867*
+E868	pattern.txt	/*E868*
+E869	pattern.txt	/*E869*
 E87	windows.txt	/*E87*
+E870	pattern.txt	/*E870*
+E871	pattern.txt	/*E871*
+E872	pattern.txt	/*E872*
+E873	pattern.txt	/*E873*
+E874	pattern.txt	/*E874*
+E875	pattern.txt	/*E875*
+E876	pattern.txt	/*E876*
+E877	pattern.txt	/*E877*
+E878	pattern.txt	/*E878*
+E879	syntax.txt	/*E879*
 E88	windows.txt	/*E88*
+E880	if_pyth.txt	/*E880*
 E89	message.txt	/*E89*
 E90	message.txt	/*E90*
 E91	options.txt	/*E91*
@@ -4290,6 +4359,7 @@
 Insert	insert.txt	/*Insert*
 Insert-mode	insert.txt	/*Insert-mode*
 InsertChange	autocmd.txt	/*InsertChange*
+InsertCharPre	autocmd.txt	/*InsertCharPre*
 InsertEnter	autocmd.txt	/*InsertEnter*
 InsertLeave	autocmd.txt	/*InsertLeave*
 J	change.txt	/*J*
@@ -4403,6 +4473,7 @@
 QuickFixCmdPost-example	quickfix.txt	/*QuickFixCmdPost-example*
 QuickFixCmdPre	autocmd.txt	/*QuickFixCmdPre*
 Quickfix	quickfix.txt	/*Quickfix*
+QuitPre	autocmd.txt	/*QuitPre*
 R	change.txt	/*R*
 RISC-OS	os_risc.txt	/*RISC-OS*
 RISCOS	os_risc.txt	/*RISCOS*
@@ -4434,6 +4505,11 @@
 T	motion.txt	/*T*
 TCL	if_tcl.txt	/*TCL*
 TERM	starting.txt	/*TERM*
+TOhtml-encoding	syntax.txt	/*TOhtml-encoding*
+TOhtml-encoding-detect	syntax.txt	/*TOhtml-encoding-detect*
+TOhtml-performance	syntax.txt	/*TOhtml-performance*
+TOhtml-uncopyable-text	syntax.txt	/*TOhtml-uncopyable-text*
+TOhtml-wrap-text	syntax.txt	/*TOhtml-wrap-text*
 TSQL	ft_sql.txt	/*TSQL*
 TTpro-telnet	syntax.txt	/*TTpro-telnet*
 Tab	intro.txt	/*Tab*
@@ -4442,6 +4518,8 @@
 Tcl	if_tcl.txt	/*Tcl*
 TermChanged	autocmd.txt	/*TermChanged*
 TermResponse	autocmd.txt	/*TermResponse*
+TextChanged	autocmd.txt	/*TextChanged*
+TextChangedI	autocmd.txt	/*TextChangedI*
 Transact-SQL	ft_sql.txt	/*Transact-SQL*
 U	undo.txt	/*U*
 UTF-8	mbyte.txt	/*UTF-8*
@@ -4669,6 +4747,7 @@
 alt-input	debugger.txt	/*alt-input*
 alternate-file	editing.txt	/*alternate-file*
 amiga-window	starting.txt	/*amiga-window*
+and()	eval.txt	/*and()*
 anonymous-function	eval.txt	/*anonymous-function*
 ant.vim	syntax.txt	/*ant.vim*
 ap	motion.txt	/*ap*
@@ -4723,6 +4802,7 @@
 autocommand	autocmd.txt	/*autocommand*
 autocommand-events	autocmd.txt	/*autocommand-events*
 autocommand-pattern	autocmd.txt	/*autocommand-pattern*
+autoformat	change.txt	/*autoformat*
 autoload	eval.txt	/*autoload*
 autoload-functions	eval.txt	/*autoload-functions*
 avoid-hit-enter	version5.txt	/*avoid-hit-enter*
@@ -4730,10 +4810,12 @@
 a{	motion.txt	/*a{*
 a}	motion.txt	/*a}*
 b	motion.txt	/*b*
-b:changedtick-variable	eval.txt	/*b:changedtick-variable*
+b:	eval.txt	/*b:*
+b:changedtick	eval.txt	/*b:changedtick*
 b:changelog_name	filetype.txt	/*b:changelog_name*
 b:current_syntax-variable	syntax.txt	/*b:current_syntax-variable*
 b:netrw_lastfile	pi_netrw.txt	/*b:netrw_lastfile*
+b:tex_stylish	syntax.txt	/*b:tex_stylish*
 b:var	eval.txt	/*b:var*
 baan-folding	syntax.txt	/*baan-folding*
 baan-syntax	syntax.txt	/*baan-syntax*
@@ -4771,6 +4853,7 @@
 beval_lnum-variable	eval.txt	/*beval_lnum-variable*
 beval_text-variable	eval.txt	/*beval_text-variable*
 beval_winnr-variable	eval.txt	/*beval_winnr-variable*
+bitwise-function	usr_41.txt	/*bitwise-function*
 blockwise-examples	visual.txt	/*blockwise-examples*
 blockwise-operators	visual.txt	/*blockwise-operators*
 blockwise-register	change.txt	/*blockwise-register*
@@ -4852,6 +4935,8 @@
 c_<S-Up>	cmdline.txt	/*c_<S-Up>*
 c_<Tab>	cmdline.txt	/*c_<Tab>*
 c_<Up>	cmdline.txt	/*c_<Up>*
+c_BS	cmdline.txt	/*c_BS*
+c_CR	cmdline.txt	/*c_CR*
 c_CTRL-A	cmdline.txt	/*c_CTRL-A*
 c_CTRL-B	cmdline.txt	/*c_CTRL-B*
 c_CTRL-C	cmdline.txt	/*c_CTRL-C*
@@ -4884,6 +4969,15 @@
 c_CTRL-]	cmdline.txt	/*c_CTRL-]*
 c_CTRL-^	cmdline.txt	/*c_CTRL-^*
 c_CTRL-_	cmdline.txt	/*c_CTRL-_*
+c_Del	cmdline.txt	/*c_Del*
+c_Down	cmdline.txt	/*c_Down*
+c_End	cmdline.txt	/*c_End*
+c_Esc	cmdline.txt	/*c_Esc*
+c_Home	cmdline.txt	/*c_Home*
+c_Insert	cmdline.txt	/*c_Insert*
+c_Left	cmdline.txt	/*c_Left*
+c_Right	cmdline.txt	/*c_Right*
+c_Up	cmdline.txt	/*c_Up*
 c_digraph	cmdline.txt	/*c_digraph*
 c_wildchar	cmdline.txt	/*c_wildchar*
 call()	eval.txt	/*call()*
@@ -4934,12 +5028,55 @@
 chill.vim	syntax.txt	/*chill.vim*
 cindent()	eval.txt	/*cindent()*
 cinkeys-format	indent.txt	/*cinkeys-format*
+cino-#	indent.txt	/*cino-#*
+cino-(	indent.txt	/*cino-(*
+cino-)	indent.txt	/*cino-)*
+cino-+	indent.txt	/*cino-+*
+cino-/	indent.txt	/*cino-\/*
+cino-:	indent.txt	/*cino-:*
+cino-=	indent.txt	/*cino-=*
+cino->	indent.txt	/*cino->*
+cino-C	indent.txt	/*cino-C*
+cino-J	indent.txt	/*cino-J*
+cino-L	indent.txt	/*cino-L*
+cino-M	indent.txt	/*cino-M*
+cino-N	indent.txt	/*cino-N*
+cino-U	indent.txt	/*cino-U*
+cino-W	indent.txt	/*cino-W*
+cino-^	indent.txt	/*cino-^*
+cino-b	indent.txt	/*cino-b*
+cino-c	indent.txt	/*cino-c*
+cino-e	indent.txt	/*cino-e*
+cino-f	indent.txt	/*cino-f*
+cino-g	indent.txt	/*cino-g*
+cino-h	indent.txt	/*cino-h*
+cino-i	indent.txt	/*cino-i*
+cino-j	indent.txt	/*cino-j*
+cino-k	indent.txt	/*cino-k*
+cino-l	indent.txt	/*cino-l*
+cino-m	indent.txt	/*cino-m*
+cino-n	indent.txt	/*cino-n*
+cino-p	indent.txt	/*cino-p*
+cino-star	indent.txt	/*cino-star*
+cino-t	indent.txt	/*cino-t*
+cino-u	indent.txt	/*cino-u*
+cino-w	indent.txt	/*cino-w*
+cino-{	indent.txt	/*cino-{*
+cino-}	indent.txt	/*cino-}*
 cinoptions-values	indent.txt	/*cinoptions-values*
 clear-undo	undo.txt	/*clear-undo*
 clearmatches()	eval.txt	/*clearmatches()*
 client-server	remote.txt	/*client-server*
 clientserver	remote.txt	/*clientserver*
 clipboard	gui.txt	/*clipboard*
+clipboard-autoselect	options.txt	/*clipboard-autoselect*
+clipboard-autoselectml	options.txt	/*clipboard-autoselectml*
+clipboard-autoselectplus	options.txt	/*clipboard-autoselectplus*
+clipboard-exclude	options.txt	/*clipboard-exclude*
+clipboard-html	options.txt	/*clipboard-html*
+clipboard-unnamed	options.txt	/*clipboard-unnamed*
+clipboard-unnamedplus	options.txt	/*clipboard-unnamedplus*
+clojure-indent	indent.txt	/*clojure-indent*
 cmdarg-variable	eval.txt	/*cmdarg-variable*
 cmdbang-variable	eval.txt	/*cmdbang-variable*
 cmdline-arguments	vi_diff.txt	/*cmdline-arguments*
@@ -5038,6 +5175,7 @@
 cpo--	options.txt	/*cpo--*
 cpo-.	options.txt	/*cpo-.*
 cpo-/	options.txt	/*cpo-\/*
+cpo-;	options.txt	/*cpo-;*
 cpo-<	options.txt	/*cpo-<*
 cpo->	options.txt	/*cpo->*
 cpo-A	options.txt	/*cpo-A*
@@ -5087,6 +5225,7 @@
 cpo-x	options.txt	/*cpo-x*
 cpo-y	options.txt	/*cpo-y*
 cpo-{	options.txt	/*cpo-{*
+cpp.vim	syntax.txt	/*cpp.vim*
 crash-recovery	recover.txt	/*crash-recovery*
 creating-menus	gui.txt	/*creating-menus*
 credits	intro.txt	/*credits*
@@ -5107,6 +5246,7 @@
 cscopepathcomp	if_cscop.txt	/*cscopepathcomp*
 cscopeprg	if_cscop.txt	/*cscopeprg*
 cscopequickfix	if_cscop.txt	/*cscopequickfix*
+cscoperelative	if_cscop.txt	/*cscoperelative*
 cscopetag	if_cscop.txt	/*cscopetag*
 cscopetagorder	if_cscop.txt	/*cscopetagorder*
 cscopeverbose	if_cscop.txt	/*cscopeverbose*
@@ -5114,6 +5254,7 @@
 cspc	if_cscop.txt	/*cspc*
 csprg	if_cscop.txt	/*csprg*
 csqf	if_cscop.txt	/*csqf*
+csre	if_cscop.txt	/*csre*
 cst	if_cscop.txt	/*cst*
 csto	if_cscop.txt	/*csto*
 csverb	if_cscop.txt	/*csverb*
@@ -5197,6 +5338,7 @@
 develop-spell-suggestions	develop.txt	/*develop-spell-suggestions*
 develop.txt	develop.txt	/*develop.txt*
 development	develop.txt	/*development*
+dgn	motion.txt	/*dgn*
 dh	change.txt	/*dh*
 diB	motion.txt	/*diB*
 diW	motion.txt	/*diW*
@@ -5220,6 +5362,7 @@
 digraph-arg	change.txt	/*digraph-arg*
 digraph-encoding	digraph.txt	/*digraph-encoding*
 digraph-table	digraph.txt	/*digraph-table*
+digraph-table-mbyte	digraph.txt	/*digraph-table-mbyte*
 digraph.txt	digraph.txt	/*digraph.txt*
 digraphs	digraph.txt	/*digraphs*
 digraphs-changed	version6.txt	/*digraphs-changed*
@@ -5390,6 +5533,11 @@
 expr-env-expand	eval.txt	/*expr-env-expand*
 expr-function	eval.txt	/*expr-function*
 expr-is	eval.txt	/*expr-is*
+expr-is#	eval.txt	/*expr-is#*
+expr-is?	eval.txt	/*expr-is?*
+expr-isnot	eval.txt	/*expr-isnot*
+expr-isnot#	eval.txt	/*expr-isnot#*
+expr-isnot?	eval.txt	/*expr-isnot?*
 expr-nesting	eval.txt	/*expr-nesting*
 expr-number	eval.txt	/*expr-number*
 expr-option	eval.txt	/*expr-option*
@@ -5525,6 +5673,7 @@
 formatting	change.txt	/*formatting*
 formfeed	intro.txt	/*formfeed*
 fortran.vim	syntax.txt	/*fortran.vim*
+friendship	intro.txt	/*friendship*
 frombook	usr_01.txt	/*frombook*
 ft-abel-syntax	syntax.txt	/*ft-abel-syntax*
 ft-ada-commands	ft_ada.txt	/*ft-ada-commands*
@@ -5551,8 +5700,10 @@
 ft-changelog-plugin	filetype.txt	/*ft-changelog-plugin*
 ft-changelog-syntax	syntax.txt	/*ft-changelog-syntax*
 ft-chill-syntax	syntax.txt	/*ft-chill-syntax*
+ft-clojure-indent	indent.txt	/*ft-clojure-indent*
 ft-cobol-syntax	syntax.txt	/*ft-cobol-syntax*
 ft-coldfusion-syntax	syntax.txt	/*ft-coldfusion-syntax*
+ft-cpp-syntax	syntax.txt	/*ft-cpp-syntax*
 ft-csh-syntax	syntax.txt	/*ft-csh-syntax*
 ft-css-omni	insert.txt	/*ft-css-omni*
 ft-cweb-syntax	syntax.txt	/*ft-cweb-syntax*
@@ -5576,6 +5727,7 @@
 ft-groff-syntax	syntax.txt	/*ft-groff-syntax*
 ft-gsp-syntax	syntax.txt	/*ft-gsp-syntax*
 ft-haskell-syntax	syntax.txt	/*ft-haskell-syntax*
+ft-html-indent	indent.txt	/*ft-html-indent*
 ft-html-omni	insert.txt	/*ft-html-omni*
 ft-html-syntax	syntax.txt	/*ft-html-syntax*
 ft-htmlos-syntax	syntax.txt	/*ft-htmlos-syntax*
@@ -5623,8 +5775,10 @@
 ft-python-indent	indent.txt	/*ft-python-indent*
 ft-python-syntax	syntax.txt	/*ft-python-syntax*
 ft-quake-syntax	syntax.txt	/*ft-quake-syntax*
+ft-r-indent	indent.txt	/*ft-r-indent*
 ft-readline-syntax	syntax.txt	/*ft-readline-syntax*
 ft-rexx-syntax	syntax.txt	/*ft-rexx-syntax*
+ft-rst-syntax	syntax.txt	/*ft-rst-syntax*
 ft-ruby-omni	insert.txt	/*ft-ruby-omni*
 ft-ruby-syntax	syntax.txt	/*ft-ruby-syntax*
 ft-scheme-syntax	syntax.txt	/*ft-scheme-syntax*
@@ -5688,7 +5842,9 @@
 g-	undo.txt	/*g-*
 g0	motion.txt	/*g0*
 g8	various.txt	/*g8*
+g:	eval.txt	/*g:*
 g:NetrwTopLvlMenu	pi_netrw.txt	/*g:NetrwTopLvlMenu*
+g:Netrw_corehandler	pi_netrw.txt	/*g:Netrw_corehandler*
 g:Netrw_funcref	pi_netrw.txt	/*g:Netrw_funcref*
 g:ada#Comment	ft_ada.txt	/*g:ada#Comment*
 g:ada#Ctags_Kinds	ft_ada.txt	/*g:ada#Ctags_Kinds*
@@ -5712,12 +5868,20 @@
 g:ada_standard_types	ft_ada.txt	/*g:ada_standard_types*
 g:ada_with_gnat_project_files	ft_ada.txt	/*g:ada_with_gnat_project_files*
 g:ada_withuse_ordinary	ft_ada.txt	/*g:ada_withuse_ordinary*
+g:clojure_align_multiline_strings	indent.txt	/*g:clojure_align_multiline_strings*
+g:clojure_fuzzy_indent	indent.txt	/*g:clojure_fuzzy_indent*
+g:clojure_fuzzy_indent_blacklist	indent.txt	/*g:clojure_fuzzy_indent_blacklist*
+g:clojure_fuzzy_indent_patterns	indent.txt	/*g:clojure_fuzzy_indent_patterns*
+g:clojure_maxlines	indent.txt	/*g:clojure_maxlines*
+g:clojure_special_indent_words	indent.txt	/*g:clojure_special_indent_words*
 g:colors_name	options.txt	/*g:colors_name*
 g:decada	ft_ada.txt	/*g:decada*
 g:decada.Error_Format	ft_ada.txt	/*g:decada.Error_Format*
 g:decada.Make()	ft_ada.txt	/*g:decada.Make()*
 g:decada.Make_Command	ft_ada.txt	/*g:decada.Make_Command*
 g:decada.Unit_Name()	ft_ada.txt	/*g:decada.Unit_Name()*
+g:filetype_csh	syntax.txt	/*g:filetype_csh*
+g:filetype_r	syntax.txt	/*g:filetype_r*
 g:gnat	ft_ada.txt	/*g:gnat*
 g:gnat.Error_Format	ft_ada.txt	/*g:gnat.Error_Format*
 g:gnat.Find()	ft_ada.txt	/*g:gnat.Find()*
@@ -5730,9 +5894,33 @@
 g:gnat.Set_Project_File()	ft_ada.txt	/*g:gnat.Set_Project_File()*
 g:gnat.Tags()	ft_ada.txt	/*g:gnat.Tags()*
 g:gnat.Tags_Command	ft_ada.txt	/*g:gnat.Tags_Command*
+g:html_charset_override	syntax.txt	/*g:html_charset_override*
+g:html_diff_one_file	syntax.txt	/*g:html_diff_one_file*
+g:html_dynamic_folds	syntax.txt	/*g:html_dynamic_folds*
+g:html_encoding_override	syntax.txt	/*g:html_encoding_override*
+g:html_end_line	syntax.txt	/*g:html_end_line*
+g:html_expand_tabs	syntax.txt	/*g:html_expand_tabs*
+g:html_hover_unfold	syntax.txt	/*g:html_hover_unfold*
+g:html_id_expr	syntax.txt	/*g:html_id_expr*
+g:html_ignore_conceal	syntax.txt	/*g:html_ignore_conceal*
+g:html_ignore_folding	syntax.txt	/*g:html_ignore_folding*
+g:html_line_ids	syntax.txt	/*g:html_line_ids*
+g:html_no_foldcolumn	syntax.txt	/*g:html_no_foldcolumn*
+g:html_no_invalid	syntax.txt	/*g:html_no_invalid*
+g:html_no_pre	syntax.txt	/*g:html_no_pre*
+g:html_no_progress	syntax.txt	/*g:html_no_progress*
+g:html_number_lines	syntax.txt	/*g:html_number_lines*
+g:html_pre_wrap	syntax.txt	/*g:html_pre_wrap*
+g:html_prevent_copy	syntax.txt	/*g:html_prevent_copy*
+g:html_start_line	syntax.txt	/*g:html_start_line*
+g:html_use_css	syntax.txt	/*g:html_use_css*
+g:html_use_encoding	syntax.txt	/*g:html_use_encoding*
+g:html_use_xhtml	syntax.txt	/*g:html_use_xhtml*
+g:html_whole_filler	syntax.txt	/*g:html_whole_filler*
 g:netrw_alto	pi_netrw.txt	/*g:netrw_alto*
 g:netrw_altv	pi_netrw.txt	/*g:netrw_altv*
 g:netrw_banner	pi_netrw.txt	/*g:netrw_banner*
+g:netrw_bannerbackslash	pi_netrw.txt	/*g:netrw_bannerbackslash*
 g:netrw_browse_split	pi_netrw.txt	/*g:netrw_browse_split*
 g:netrw_browsex_viewer	pi_netrw.txt	/*g:netrw_browsex_viewer*
 g:netrw_bufsettings	pi_netrw.txt	/*g:netrw_bufsettings*
@@ -5740,10 +5928,13 @@
 g:netrw_chgwin	pi_netrw.txt	/*g:netrw_chgwin*
 g:netrw_compress	pi_netrw.txt	/*g:netrw_compress*
 g:netrw_ctags	pi_netrw.txt	/*g:netrw_ctags*
-g:netrw_cursorline	pi_netrw.txt	/*g:netrw_cursorline*
+g:netrw_cursor	pi_netrw.txt	/*g:netrw_cursor*
 g:netrw_cygwin	pi_netrw.txt	/*g:netrw_cygwin*
 g:netrw_dav_cmd	pi_netrw.txt	/*g:netrw_dav_cmd*
 g:netrw_decompress	pi_netrw.txt	/*g:netrw_decompress*
+g:netrw_dirhistmax	pi_netrw.txt	/*g:netrw_dirhistmax*
+g:netrw_dynamic_maxfilenamelen	pi_netrw.txt	/*g:netrw_dynamic_maxfilenamelen*
+g:netrw_errorlvl	pi_netrw.txt	/*g:netrw_errorlvl*
 g:netrw_fastbrowse	pi_netrw.txt	/*g:netrw_fastbrowse*
 g:netrw_fetch_cmd	pi_netrw.txt	/*g:netrw_fetch_cmd*
 g:netrw_fname_escape	pi_netrw.txt	/*g:netrw_fname_escape*
@@ -5751,6 +5942,7 @@
 g:netrw_ftp_browse_reject	pi_netrw.txt	/*g:netrw_ftp_browse_reject*
 g:netrw_ftp_cmd	pi_netrw.txt	/*g:netrw_ftp_cmd*
 g:netrw_ftp_list_cmd	pi_netrw.txt	/*g:netrw_ftp_list_cmd*
+g:netrw_ftp_options	pi_netrw.txt	/*g:netrw_ftp_options*
 g:netrw_ftp_sizelist_cmd	pi_netrw.txt	/*g:netrw_ftp_sizelist_cmd*
 g:netrw_ftp_timelist_cmd	pi_netrw.txt	/*g:netrw_ftp_timelist_cmd*
 g:netrw_ftpextracmd	pi_netrw.txt	/*g:netrw_ftpextracmd*
@@ -5765,17 +5957,19 @@
 g:netrw_list_cmd	pi_netrw.txt	/*g:netrw_list_cmd*
 g:netrw_list_hide	pi_netrw.txt	/*g:netrw_list_hide*
 g:netrw_liststyle	pi_netrw.txt	/*g:netrw_liststyle*
-g:netrw_local_mkdir	pi_netrw.txt	/*g:netrw_local_mkdir*
-g:netrw_local_rmdir	pi_netrw.txt	/*g:netrw_local_rmdir*
 g:netrw_localcopycmd	pi_netrw.txt	/*g:netrw_localcopycmd*
+g:netrw_localmkdir	pi_netrw.txt	/*g:netrw_localmkdir*
 g:netrw_localmovecmd	pi_netrw.txt	/*g:netrw_localmovecmd*
+g:netrw_localrmdir	pi_netrw.txt	/*g:netrw_localrmdir*
 g:netrw_maxfilenamelen	pi_netrw.txt	/*g:netrw_maxfilenamelen*
 g:netrw_menu	pi_netrw.txt	/*g:netrw_menu*
 g:netrw_mkdir_cmd	pi_netrw.txt	/*g:netrw_mkdir_cmd*
 g:netrw_mousemaps	pi_netrw.txt	/*g:netrw_mousemaps*
+g:netrw_nobeval	pi_netrw.txt	/*g:netrw_nobeval*
 g:netrw_nogx	pi_netrw.txt	/*g:netrw_nogx*
 g:netrw_preview	pi_netrw.txt	/*g:netrw_preview*
 g:netrw_rcp_cmd	pi_netrw.txt	/*g:netrw_rcp_cmd*
+g:netrw_remote_mkdir	pi_netrw.txt	/*g:netrw_remote_mkdir*
 g:netrw_retmap	pi_netrw.txt	/*g:netrw_retmap*
 g:netrw_rm_cmd	pi_netrw.txt	/*g:netrw_rm_cmd*
 g:netrw_rmdir_cmd	pi_netrw.txt	/*g:netrw_rmdir_cmd*
@@ -5803,6 +5997,8 @@
 g:netrw_win95ftp	pi_netrw.txt	/*g:netrw_win95ftp*
 g:netrw_winsize	pi_netrw.txt	/*g:netrw_winsize*
 g:netrw_xstrlen	pi_netrw.txt	/*g:netrw_xstrlen*
+g:sh_isk	syntax.txt	/*g:sh_isk*
+g:sh_noisk	syntax.txt	/*g:sh_noisk*
 g:syntax_on	syntax.txt	/*g:syntax_on*
 g:tar_browseoptions	pi_tar.txt	/*g:tar_browseoptions*
 g:tar_cmd	pi_tar.txt	/*g:tar_cmd*
@@ -5812,7 +6008,16 @@
 g:tar_readoptions	pi_tar.txt	/*g:tar_readoptions*
 g:tar_secure	pi_tar.txt	/*g:tar_secure*
 g:tar_writeoptions	pi_tar.txt	/*g:tar_writeoptions*
+g:tex_comment_nospell	syntax.txt	/*g:tex_comment_nospell*
 g:tex_conceal	syntax.txt	/*g:tex_conceal*
+g:tex_fast	syntax.txt	/*g:tex_fast*
+g:tex_flavor	filetype.txt	/*g:tex_flavor*
+g:tex_fold_enabled	syntax.txt	/*g:tex_fold_enabled*
+g:tex_isk	syntax.txt	/*g:tex_isk*
+g:tex_no_error	syntax.txt	/*g:tex_no_error*
+g:tex_nospell	syntax.txt	/*g:tex_nospell*
+g:tex_stylish	syntax.txt	/*g:tex_stylish*
+g:tex_verbspell	syntax.txt	/*g:tex_verbspell*
 g:var	eval.txt	/*g:var*
 g:vimball_home	pi_vimball.txt	/*g:vimball_home*
 g:vimball_mkdir	pi_vimball.txt	/*g:vimball_mkdir*
@@ -5843,6 +6048,7 @@
 gH	visual.txt	/*gH*
 gI	insert.txt	/*gI*
 gJ	change.txt	/*gJ*
+gN	visual.txt	/*gN*
 gP	change.txt	/*gP*
 gQ	intro.txt	/*gQ*
 gR	change.txt	/*gR*
@@ -5863,6 +6069,7 @@
 ga	various.txt	/*ga*
 garbagecollect()	eval.txt	/*garbagecollect()*
 gd	pattern.txt	/*gd*
+gdb	debug.txt	/*gdb*
 ge	motion.txt	/*ge*
 get()	eval.txt	/*get()*
 get-ms-debuggers	debug.txt	/*get-ms-debuggers*
@@ -5926,6 +6133,7 @@
 glvs-plugins	pi_getscript.txt	/*glvs-plugins*
 glvs-usage	pi_getscript.txt	/*glvs-usage*
 gm	motion.txt	/*gm*
+gn	visual.txt	/*gn*
 gnat#Insert_Tags_Header()	ft_ada.txt	/*gnat#Insert_Tags_Header()*
 gnat#New()	ft_ada.txt	/*gnat#New()*
 gnat-xref	ft_ada.txt	/*gnat-xref*
@@ -5943,6 +6151,7 @@
 greek	options.txt	/*greek*
 grep	quickfix.txt	/*grep*
 groff.vim	syntax.txt	/*groff.vim*
+gross-national-happiness	intro.txt	/*gross-national-happiness*
 group-name	syntax.txt	/*group-name*
 gs	various.txt	/*gs*
 gsp.vim	syntax.txt	/*gsp.vim*
@@ -5952,6 +6161,7 @@
 gu	change.txt	/*gu*
 gugu	change.txt	/*gugu*
 gui	gui.txt	/*gui*
+gui-IME	gui.txt	/*gui-IME*
 gui-clipboard	gui_w32.txt	/*gui-clipboard*
 gui-colors	syntax.txt	/*gui-colors*
 gui-extras	gui.txt	/*gui-extras*
@@ -6009,6 +6219,7 @@
 gui_w32.txt	gui_w32.txt	/*gui_w32.txt*
 gui_x11.txt	gui_x11.txt	/*gui_x11.txt*
 guifontwide_gtk2	options.txt	/*guifontwide_gtk2*
+guifontwide_win_mbyte	options.txt	/*guifontwide_win_mbyte*
 guioptions_a	options.txt	/*guioptions_a*
 guu	change.txt	/*guu*
 gv	visual.txt	/*gv*
@@ -6031,6 +6242,7 @@
 hangulin.txt	hangulin.txt	/*hangulin.txt*
 has()	eval.txt	/*has()*
 has-patch	eval.txt	/*has-patch*
+has-python	if_pyth.txt	/*has-python*
 has_key()	eval.txt	/*has_key()*
 haskell.vim	syntax.txt	/*haskell.vim*
 haslocaldir()	eval.txt	/*haslocaldir()*
@@ -6049,6 +6261,7 @@
 helphelp	helphelp.txt	/*helphelp*
 helphelp.txt	helphelp.txt	/*helphelp.txt*
 hex-editing	tips.txt	/*hex-editing*
+hex-number	eval.txt	/*hex-number*
 hidden-buffer	windows.txt	/*hidden-buffer*
 hidden-changed	version5.txt	/*hidden-changed*
 hidden-menus	gui.txt	/*hidden-menus*
@@ -6090,6 +6303,7 @@
 hl-CursorColumn	syntax.txt	/*hl-CursorColumn*
 hl-CursorIM	syntax.txt	/*hl-CursorIM*
 hl-CursorLine	syntax.txt	/*hl-CursorLine*
+hl-CursorLineNr	syntax.txt	/*hl-CursorLineNr*
 hl-DiffAdd	syntax.txt	/*hl-DiffAdd*
 hl-DiffChange	syntax.txt	/*hl-DiffChange*
 hl-DiffDelete	syntax.txt	/*hl-DiffDelete*
@@ -6149,6 +6363,8 @@
 hpterm	term.txt	/*hpterm*
 hpterm-color	syntax.txt	/*hpterm-color*
 html-flavor	insert.txt	/*html-flavor*
+html-indent	indent.txt	/*html-indent*
+html-indenting	indent.txt	/*html-indenting*
 html.vim	syntax.txt	/*html.vim*
 htmlos.vim	syntax.txt	/*htmlos.vim*
 http	pi_netrw.txt	/*http*
@@ -6159,6 +6375,7 @@
 i<	motion.txt	/*i<*
 i>	motion.txt	/*i>*
 iB	motion.txt	/*iB*
+iBus	gui.txt	/*iBus*
 iW	motion.txt	/*iW*
 i[	motion.txt	/*i[*
 i]	motion.txt	/*i]*
@@ -6354,6 +6571,7 @@
 intro	intro.txt	/*intro*
 intro.txt	intro.txt	/*intro.txt*
 inverse	syntax.txt	/*inverse*
+invert()	eval.txt	/*invert()*
 ip	motion.txt	/*ip*
 iquote	motion.txt	/*iquote*
 is	motion.txt	/*is*
@@ -6405,6 +6623,7 @@
 keys()	eval.txt	/*keys()*
 known-bugs	todo.txt	/*known-bugs*
 l	motion.txt	/*l*
+l:	eval.txt	/*l:*
 l:var	eval.txt	/*l:var*
 lCursor	mbyte.txt	/*lCursor*
 lace.vim	syntax.txt	/*lace.vim*
@@ -6413,7 +6632,15 @@
 last-pattern	pattern.txt	/*last-pattern*
 last-position-jump	eval.txt	/*last-position-jump*
 last_buffer_nr()	eval.txt	/*last_buffer_nr()*
+latex-syntax	syntax.txt	/*latex-syntax*
 lc_time-variable	eval.txt	/*lc_time-variable*
+lcs-conceal	options.txt	/*lcs-conceal*
+lcs-eol	options.txt	/*lcs-eol*
+lcs-extends	options.txt	/*lcs-extends*
+lcs-nbsp	options.txt	/*lcs-nbsp*
+lcs-precedes	options.txt	/*lcs-precedes*
+lcs-tab	options.txt	/*lcs-tab*
+lcs-trail	options.txt	/*lcs-trail*
 left-right-motions	motion.txt	/*left-right-motions*
 len()	eval.txt	/*len()*
 less	various.txt	/*less*
@@ -6459,16 +6686,25 @@
 log()	eval.txt	/*log()*
 log10()	eval.txt	/*log10()*
 long-lines	version5.txt	/*long-lines*
+love	intro.txt	/*love*
 lowercase	change.txt	/*lowercase*
 lpc.vim	syntax.txt	/*lpc.vim*
 lua	if_lua.txt	/*lua*
 lua-buffer	if_lua.txt	/*lua-buffer*
 lua-commands	if_lua.txt	/*lua-commands*
+lua-dict	if_lua.txt	/*lua-dict*
+lua-eval	if_lua.txt	/*lua-eval*
+lua-funcref	if_lua.txt	/*lua-funcref*
+lua-list	if_lua.txt	/*lua-list*
+lua-luaeval	if_lua.txt	/*lua-luaeval*
 lua-vim	if_lua.txt	/*lua-vim*
 lua-window	if_lua.txt	/*lua-window*
 lua.vim	syntax.txt	/*lua.vim*
+luaeval()	eval.txt	/*luaeval()*
 m	motion.txt	/*m*
 m'	motion.txt	/*m'*
+m<	motion.txt	/*m<*
+m>	motion.txt	/*m>*
 m[	motion.txt	/*m[*
 m]	motion.txt	/*m]*
 m`	motion.txt	/*m`*
@@ -6498,6 +6734,7 @@
 map-modes	map.txt	/*map-modes*
 map-multibyte	map.txt	/*map-multibyte*
 map-overview	map.txt	/*map-overview*
+map-precedence	map.txt	/*map-precedence*
 map-self-destroy	tips.txt	/*map-self-destroy*
 map-typing	map.txt	/*map-typing*
 map-which-keys	map.txt	/*map-which-keys*
@@ -6525,6 +6762,7 @@
 mapmode-v	map.txt	/*mapmode-v*
 mapmode-x	map.txt	/*mapmode-x*
 mapping	map.txt	/*mapping*
+mapping-functions	usr_41.txt	/*mapping-functions*
 mark	motion.txt	/*mark*
 mark-functions	usr_41.txt	/*mark-functions*
 mark-motions	motion.txt	/*mark-motions*
@@ -6636,6 +6874,7 @@
 mzscheme-commands	if_mzsch.txt	/*mzscheme-commands*
 mzscheme-dynamic	if_mzsch.txt	/*mzscheme-dynamic*
 mzscheme-examples	if_mzsch.txt	/*mzscheme-examples*
+mzscheme-funcref	if_mzsch.txt	/*mzscheme-funcref*
 mzscheme-mzeval	if_mzsch.txt	/*mzscheme-mzeval*
 mzscheme-sandbox	if_mzsch.txt	/*mzscheme-sandbox*
 mzscheme-threads	if_mzsch.txt	/*mzscheme-threads*
@@ -6680,8 +6919,10 @@
 netrw-P	pi_netrw.txt	/*netrw-P*
 netrw-R	pi_netrw.txt	/*netrw-R*
 netrw-S	pi_netrw.txt	/*netrw-S*
-netrw-T	pi_netrw.txt	/*netrw-T*
+netrw-Tb	pi_netrw.txt	/*netrw-Tb*
+netrw-Th	pi_netrw.txt	/*netrw-Th*
 netrw-U	pi_netrw.txt	/*netrw-U*
+netrw-X	pi_netrw.txt	/*netrw-X*
 netrw-a	pi_netrw.txt	/*netrw-a*
 netrw-activate	pi_netrw.txt	/*netrw-activate*
 netrw-bookmark	pi_netrw.txt	/*netrw-bookmark*
@@ -6691,6 +6932,7 @@
 netrw-browse-maps	pi_netrw.txt	/*netrw-browse-maps*
 netrw-browser	pi_netrw.txt	/*netrw-browser*
 netrw-browser-options	pi_netrw.txt	/*netrw-browser-options*
+netrw-browser-settings	pi_netrw.txt	/*netrw-browser-settings*
 netrw-browser-var	pi_netrw.txt	/*netrw-browser-var*
 netrw-browsing	pi_netrw.txt	/*netrw-browsing*
 netrw-c	pi_netrw.txt	/*netrw-c*
@@ -6700,6 +6942,7 @@
 netrw-contents	pi_netrw.txt	/*netrw-contents*
 netrw-copyright	pi_netrw.txt	/*netrw-copyright*
 netrw-cr	pi_netrw.txt	/*netrw-cr*
+netrw-createfile	pi_netrw.txt	/*netrw-createfile*
 netrw-credits	pi_netrw.txt	/*netrw-credits*
 netrw-ctrl-h	pi_netrw.txt	/*netrw-ctrl-h*
 netrw-ctrl-l	pi_netrw.txt	/*netrw-ctrl-l*
@@ -6723,7 +6966,9 @@
 netrw-ftp	pi_netrw.txt	/*netrw-ftp*
 netrw-ftype	pi_netrw.txt	/*netrw-ftype*
 netrw-gb	pi_netrw.txt	/*netrw-gb*
+netrw-gd	pi_netrw.txt	/*netrw-gd*
 netrw-getftype	pi_netrw.txt	/*netrw-getftype*
+netrw-gf	pi_netrw.txt	/*netrw-gf*
 netrw-gh	pi_netrw.txt	/*netrw-gh*
 netrw-gp	pi_netrw.txt	/*netrw-gp*
 netrw-gx	pi_netrw.txt	/*netrw-gx*
@@ -6736,6 +6981,7 @@
 netrw-horiz	pi_netrw.txt	/*netrw-horiz*
 netrw-i	pi_netrw.txt	/*netrw-i*
 netrw-incompatible	pi_netrw.txt	/*netrw-incompatible*
+netrw-internal-variables	pi_netrw.txt	/*netrw-internal-variables*
 netrw-intro-browse	pi_netrw.txt	/*netrw-intro-browse*
 netrw-leftmouse	pi_netrw.txt	/*netrw-leftmouse*
 netrw-list	pi_netrw.txt	/*netrw-list*
@@ -6743,6 +6989,7 @@
 netrw-listhack	pi_netrw.txt	/*netrw-listhack*
 netrw-login	pi_netrw.txt	/*netrw-login*
 netrw-mB	pi_netrw.txt	/*netrw-mB*
+netrw-mF	pi_netrw.txt	/*netrw-mF*
 netrw-mT	pi_netrw.txt	/*netrw-mT*
 netrw-mb	pi_netrw.txt	/*netrw-mb*
 netrw-mc	pi_netrw.txt	/*netrw-mc*
@@ -6776,6 +7023,8 @@
 netrw-p11	pi_netrw.txt	/*netrw-p11*
 netrw-p12	pi_netrw.txt	/*netrw-p12*
 netrw-p13	pi_netrw.txt	/*netrw-p13*
+netrw-p14	pi_netrw.txt	/*netrw-p14*
+netrw-p15	pi_netrw.txt	/*netrw-p15*
 netrw-p2	pi_netrw.txt	/*netrw-p2*
 netrw-p3	pi_netrw.txt	/*netrw-p3*
 netrw-p4	pi_netrw.txt	/*netrw-p4*
@@ -6795,6 +7044,7 @@
 netrw-pscp	pi_netrw.txt	/*netrw-pscp*
 netrw-psftp	pi_netrw.txt	/*netrw-psftp*
 netrw-putty	pi_netrw.txt	/*netrw-putty*
+netrw-qF	pi_netrw.txt	/*netrw-qF*
 netrw-qb	pi_netrw.txt	/*netrw-qb*
 netrw-qf	pi_netrw.txt	/*netrw-qf*
 netrw-quickcom	pi_netrw.txt	/*netrw-quickcom*
@@ -6811,8 +7061,10 @@
 netrw-rightmouse	pi_netrw.txt	/*netrw-rightmouse*
 netrw-s	pi_netrw.txt	/*netrw-s*
 netrw-settings	pi_netrw.txt	/*netrw-settings*
+netrw-settings-window	pi_netrw.txt	/*netrw-settings-window*
 netrw-sexplore	pi_netrw.txt	/*netrw-sexplore*
 netrw-sort	pi_netrw.txt	/*netrw-sort*
+netrw-sort-sequence	pi_netrw.txt	/*netrw-sort-sequence*
 netrw-sortsequence	pi_netrw.txt	/*netrw-sortsequence*
 netrw-source	pi_netrw.txt	/*netrw-source*
 netrw-ssh-hack	pi_netrw.txt	/*netrw-ssh-hack*
@@ -6824,6 +7076,7 @@
 netrw-t	pi_netrw.txt	/*netrw-t*
 netrw-texplore	pi_netrw.txt	/*netrw-texplore*
 netrw-todo	pi_netrw.txt	/*netrw-todo*
+netrw-trailingslash	pi_netrw.txt	/*netrw-trailingslash*
 netrw-transparent	pi_netrw.txt	/*netrw-transparent*
 netrw-u	pi_netrw.txt	/*netrw-u*
 netrw-updir	pi_netrw.txt	/*netrw-updir*
@@ -6833,6 +7086,8 @@
 netrw-var	pi_netrw.txt	/*netrw-var*
 netrw-variables	pi_netrw.txt	/*netrw-variables*
 netrw-vexplore	pi_netrw.txt	/*netrw-vexplore*
+netrw-windows-netrc	pi_netrw.txt	/*netrw-windows-netrc*
+netrw-windows-s	pi_netrw.txt	/*netrw-windows-s*
 netrw-write	pi_netrw.txt	/*netrw-write*
 netrw-x	pi_netrw.txt	/*netrw-x*
 netrw-xfer	pi_netrw.txt	/*netrw-xfer*
@@ -6933,6 +7188,7 @@
 notepad	gui_w32.txt	/*notepad*
 nr2char()	eval.txt	/*nr2char()*
 nroff.vim	syntax.txt	/*nroff.vim*
+number_relativenumber	options.txt	/*number_relativenumber*
 numbered-function	eval.txt	/*numbered-function*
 o	insert.txt	/*o*
 o_CTRL-V	motion.txt	/*o_CTRL-V*
@@ -6944,7 +7200,8 @@
 obtaining-exted	netbeans.txt	/*obtaining-exted*
 ocaml.vim	syntax.txt	/*ocaml.vim*
 octal	eval.txt	/*octal*
-octal-number	options.txt	/*octal-number*
+octal-nrformats	options.txt	/*octal-nrformats*
+octal-number	eval.txt	/*octal-number*
 oldfiles-variable	eval.txt	/*oldfiles-variable*
 ole-activation	if_ole.txt	/*ole-activation*
 ole-eval	if_ole.txt	/*ole-eval*
@@ -6964,9 +7221,12 @@
 option-backslash	options.txt	/*option-backslash*
 option-list	quickref.txt	/*option-list*
 option-summary	options.txt	/*option-summary*
+option-window	options.txt	/*option-window*
 options	options.txt	/*options*
 options-changed	version5.txt	/*options-changed*
 options.txt	options.txt	/*options.txt*
+optwin	options.txt	/*optwin*
+or()	eval.txt	/*or()*
 oracle	ft_sql.txt	/*oracle*
 os2	os_os2.txt	/*os2*
 os2ansi	os_os2.txt	/*os2ansi*
@@ -7004,6 +7264,7 @@
 pattern.txt	pattern.txt	/*pattern.txt*
 patterns-composing	pattern.txt	/*patterns-composing*
 pdev-option	print.txt	/*pdev-option*
+peace	intro.txt	/*peace*
 penc-option	print.txt	/*penc-option*
 perl	if_perl.txt	/*perl*
 perl-Append	if_perl.txt	/*perl-Append*
@@ -7112,9 +7373,20 @@
 pumvisible()	eval.txt	/*pumvisible()*
 put	change.txt	/*put*
 put-Visual-mode	change.txt	/*put-Visual-mode*
+py3eval()	eval.txt	/*py3eval()*
+pyeval()	eval.txt	/*pyeval()*
 python	if_pyth.txt	/*python*
+python-.locked	if_pyth.txt	/*python-.locked*
+python-Dictionary	if_pyth.txt	/*python-Dictionary*
+python-Function	if_pyth.txt	/*python-Function*
+python-List	if_pyth.txt	/*python-List*
+python-VIM_SPECIAL_PATH	if_pyth.txt	/*python-VIM_SPECIAL_PATH*
+python-_get_paths	if_pyth.txt	/*python-_get_paths*
+python-bindeval	if_pyth.txt	/*python-bindeval*
+python-bindeval-objects	if_pyth.txt	/*python-bindeval-objects*
 python-buffer	if_pyth.txt	/*python-buffer*
 python-buffers	if_pyth.txt	/*python-buffers*
+python-chdir	if_pyth.txt	/*python-chdir*
 python-command	if_pyth.txt	/*python-command*
 python-commands	if_pyth.txt	/*python-commands*
 python-current	if_pyth.txt	/*python-current*
@@ -7122,14 +7394,29 @@
 python-error	if_pyth.txt	/*python-error*
 python-eval	if_pyth.txt	/*python-eval*
 python-examples	if_pyth.txt	/*python-examples*
+python-fchdir	if_pyth.txt	/*python-fchdir*
+python-find_module	if_pyth.txt	/*python-find_module*
+python-foreach_rtp	if_pyth.txt	/*python-foreach_rtp*
 python-input	if_pyth.txt	/*python-input*
+python-options	if_pyth.txt	/*python-options*
 python-output	if_pyth.txt	/*python-output*
+python-path_hook	if_pyth.txt	/*python-path_hook*
+python-pyeval	if_pyth.txt	/*python-pyeval*
 python-range	if_pyth.txt	/*python-range*
+python-special-path	if_pyth.txt	/*python-special-path*
+python-strwidth	if_pyth.txt	/*python-strwidth*
+python-tabpage	if_pyth.txt	/*python-tabpage*
+python-tabpages	if_pyth.txt	/*python-tabpages*
+python-vars	if_pyth.txt	/*python-vars*
 python-vim	if_pyth.txt	/*python-vim*
+python-vvars	if_pyth.txt	/*python-vvars*
 python-window	if_pyth.txt	/*python-window*
 python-windows	if_pyth.txt	/*python-windows*
 python.vim	syntax.txt	/*python.vim*
+python2-directory	if_pyth.txt	/*python2-directory*
 python3	if_pyth.txt	/*python3*
+python3-directory	if_pyth.txt	/*python3-directory*
+pythonx-directory	if_pyth.txt	/*pythonx-directory*
 q	repeat.txt	/*q*
 q/	cmdline.txt	/*q\/*
 q:	cmdline.txt	/*q:*
@@ -7246,19 +7533,9 @@
 rileft	rileft.txt	/*rileft*
 rileft.txt	rileft.txt	/*rileft.txt*
 riscos	os_risc.txt	/*riscos*
-riscos-commandline	os_risc.txt	/*riscos-commandline*
-riscos-filetypes	os_risc.txt	/*riscos-filetypes*
-riscos-gui	os_risc.txt	/*riscos-gui*
-riscos-interrupt	os_risc.txt	/*riscos-interrupt*
-riscos-locations	os_risc.txt	/*riscos-locations*
-riscos-memory	os_risc.txt	/*riscos-memory*
-riscos-munging	os_risc.txt	/*riscos-munging*
-riscos-porting	os_risc.txt	/*riscos-porting*
-riscos-remote	os_risc.txt	/*riscos-remote*
-riscos-shell	os_risc.txt	/*riscos-shell*
-riscos-temp-files	os_risc.txt	/*riscos-temp-files*
 rot13	change.txt	/*rot13*
 round()	eval.txt	/*round()*
+rst.vim	syntax.txt	/*rst.vim*
 rsync	pi_netrw.txt	/*rsync*
 ruby	if_ruby.txt	/*ruby*
 ruby-buffer	if_ruby.txt	/*ruby-buffer*
@@ -7310,6 +7587,10 @@
 save-settings	starting.txt	/*save-settings*
 scheme.vim	syntax.txt	/*scheme.vim*
 scp	pi_netrw.txt	/*scp*
+screenattr()	eval.txt	/*screenattr()*
+screenchar()	eval.txt	/*screenchar()*
+screencol()	eval.txt	/*screencol()*
+screenrow()	eval.txt	/*screenrow()*
 script	usr_41.txt	/*script*
 script-here	if_perl.txt	/*script-here*
 script-local	map.txt	/*script-local*
@@ -7374,12 +7655,17 @@
 setwinvar()	eval.txt	/*setwinvar()*
 sftp	pi_netrw.txt	/*sftp*
 sgml.vim	syntax.txt	/*sgml.vim*
+sgr-mouse	options.txt	/*sgr-mouse*
+sh-awk	syntax.txt	/*sh-awk*
+sh-embed	syntax.txt	/*sh-embed*
 sh.vim	syntax.txt	/*sh.vim*
+sha256()	eval.txt	/*sha256()*
 shell-window	tips.txt	/*shell-window*
 shell_error-variable	eval.txt	/*shell_error-variable*
 shellescape()	eval.txt	/*shellescape()*
 shift	intro.txt	/*shift*
 shift-left-right	change.txt	/*shift-left-right*
+shiftwidth()	eval.txt	/*shiftwidth()*
 short-name-changed	version4.txt	/*short-name-changed*
 showing-menus	gui.txt	/*showing-menus*
 sign-commands	sign.txt	/*sign-commands*
@@ -7641,6 +7927,7 @@
 system-vimrc	starting.txt	/*system-vimrc*
 s~	change.txt	/*s~*
 t	motion.txt	/*t*
+t:	eval.txt	/*t:*
 t:var	eval.txt	/*t:var*
 t_#2	term.txt	/*t_#2*
 t_#4	term.txt	/*t_#4*
@@ -7785,6 +8072,7 @@
 t_tp	version4.txt	/*t_tp*
 t_ts	term.txt	/*t_ts*
 t_ts_old	version4.txt	/*t_ts_old*
+t_u7	term.txt	/*t_u7*
 t_ue	term.txt	/*t_ue*
 t_undo	version4.txt	/*t_undo*
 t_us	term.txt	/*t_us*
@@ -7919,7 +8207,9 @@
 tex-package	syntax.txt	/*tex-package*
 tex-runon	syntax.txt	/*tex-runon*
 tex-slow	syntax.txt	/*tex-slow*
+tex-stopzone	syntax.txt	/*tex-stopzone*
 tex-style	syntax.txt	/*tex-style*
+tex-sync	syntax.txt	/*tex-sync*
 tex-verb	syntax.txt	/*tex-verb*
 tex.vim	syntax.txt	/*tex.vim*
 text-functions	usr_41.txt	/*text-functions*
@@ -7955,6 +8245,7 @@
 try-nesting	eval.txt	/*try-nesting*
 tutor	usr_01.txt	/*tutor*
 twice	if_cscop.txt	/*twice*
+two-engines	pattern.txt	/*two-engines*
 type()	eval.txt	/*type()*
 type-mistakes	tips.txt	/*type-mistakes*
 typecorr-settings	usr_41.txt	/*typecorr-settings*
@@ -7982,6 +8273,7 @@
 unlisted-buffer	windows.txt	/*unlisted-buffer*
 up-down-motions	motion.txt	/*up-down-motions*
 uppercase	change.txt	/*uppercase*
+urxvt-mouse	options.txt	/*urxvt-mouse*
 use-cpo-save	usr_41.txt	/*use-cpo-save*
 use-visual-cmds	version4.txt	/*use-visual-cmds*
 useful-mappings	tips.txt	/*useful-mappings*
@@ -8034,6 +8326,7 @@
 utf-8-typing	mbyte.txt	/*utf-8-typing*
 utf8	mbyte.txt	/*utf8*
 v	visual.txt	/*v*
+v:	eval.txt	/*v:*
 v:beval_bufnr	eval.txt	/*v:beval_bufnr*
 v:beval_col	eval.txt	/*v:beval_col*
 v:beval_lnum	eval.txt	/*v:beval_lnum*
@@ -8089,6 +8382,7 @@
 v:var	eval.txt	/*v:var*
 v:version	eval.txt	/*v:version*
 v:warningmsg	eval.txt	/*v:warningmsg*
+v:windowid	eval.txt	/*v:windowid*
 v_!	change.txt	/*v_!*
 v_$	visual.txt	/*v_$*
 v_:	cmdline.txt	/*v_:*
@@ -8156,11 +8450,13 @@
 v_g?	change.txt	/*v_g?*
 v_gF	editing.txt	/*v_gF*
 v_gJ	change.txt	/*v_gJ*
+v_gN	visual.txt	/*v_gN*
 v_gV	visual.txt	/*v_gV*
 v_g]	tagsrch.txt	/*v_g]*
 v_g_CTRL-G	editing.txt	/*v_g_CTRL-G*
 v_g_CTRL-]	tagsrch.txt	/*v_g_CTRL-]*
 v_gf	editing.txt	/*v_gf*
+v_gn	visual.txt	/*v_gn*
 v_gq	change.txt	/*v_gq*
 v_gv	visual.txt	/*v_gv*
 v_gw	change.txt	/*v_gw*
@@ -8263,13 +8559,27 @@
 vimdiff	diff.txt	/*vimdiff*
 vimfiles	options.txt	/*vimfiles*
 viminfo	starting.txt	/*viminfo*
+viminfo-!	options.txt	/*viminfo-!*
+viminfo-%	options.txt	/*viminfo-%*
+viminfo-'	options.txt	/*viminfo-'*
+viminfo-/	options.txt	/*viminfo-\/*
+viminfo-:	options.txt	/*viminfo-:*
+viminfo-<	options.txt	/*viminfo-<*
+viminfo-@	options.txt	/*viminfo-@*
+viminfo-c	options.txt	/*viminfo-c*
 viminfo-encoding	starting.txt	/*viminfo-encoding*
 viminfo-errors	starting.txt	/*viminfo-errors*
+viminfo-f	options.txt	/*viminfo-f*
 viminfo-file	starting.txt	/*viminfo-file*
 viminfo-file-marks	starting.txt	/*viminfo-file-marks*
 viminfo-file-name	starting.txt	/*viminfo-file-name*
+viminfo-h	options.txt	/*viminfo-h*
+viminfo-n	options.txt	/*viminfo-n*
+viminfo-quote	options.txt	/*viminfo-quote*
+viminfo-r	options.txt	/*viminfo-r*
 viminfo-read	starting.txt	/*viminfo-read*
 viminfo-read-write	starting.txt	/*viminfo-read-write*
+viminfo-s	options.txt	/*viminfo-s*
 viminfo-write	starting.txt	/*viminfo-write*
 vimrc	starting.txt	/*vimrc*
 vimrc-filetype	usr_05.txt	/*vimrc-filetype*
@@ -8309,6 +8619,8 @@
 vt100-function-keys	term.txt	/*vt100-function-keys*
 w	motion.txt	/*w*
 w32-clientserver	remote.txt	/*w32-clientserver*
+w32-xpm-support	gui_w32.txt	/*w32-xpm-support*
+w:	eval.txt	/*w:*
 w:current_syntax	syntax.txt	/*w:current_syntax*
 w:quickfix_title	quickfix.txt	/*w:quickfix_title*
 w:var	eval.txt	/*w:var*
@@ -8317,6 +8629,7 @@
 whitespace	pattern.txt	/*whitespace*
 wildcard	editing.txt	/*wildcard*
 wildcards	editing.txt	/*wildcards*
+wildmenumode()	eval.txt	/*wildmenumode()*
 win16-!start	gui_w16.txt	/*win16-!start*
 win16-clipboard	gui_w16.txt	/*win16-clipboard*
 win16-colors	gui_w16.txt	/*win16-colors*
@@ -8363,6 +8676,7 @@
 window-size-functions	usr_41.txt	/*window-size-functions*
 window-tag	windows.txt	/*window-tag*
 window-variable	eval.txt	/*window-variable*
+windowid-variable	eval.txt	/*windowid-variable*
 windows	windows.txt	/*windows*
 windows-3.1	os_win32.txt	/*windows-3.1*
 windows-intro	windows.txt	/*windows-intro*
@@ -8395,6 +8709,7 @@
 write-filetype-plugin	usr_41.txt	/*write-filetype-plugin*
 write-library-script	usr_41.txt	/*write-library-script*
 write-local-help	usr_41.txt	/*write-local-help*
+write-permissions	editing.txt	/*write-permissions*
 write-plugin	usr_41.txt	/*write-plugin*
 write-plugin-quickload	usr_41.txt	/*write-plugin-quickload*
 write-quit	editing.txt	/*write-quit*
@@ -8417,6 +8732,7 @@
 xml-folding	syntax.txt	/*xml-folding*
 xml-omni-datafile	insert.txt	/*xml-omni-datafile*
 xml.vim	syntax.txt	/*xml.vim*
+xor()	eval.txt	/*xor()*
 xpm.vim	syntax.txt	/*xpm.vim*
 xterm-8-bit	term.txt	/*xterm-8-bit*
 xterm-8bit	term.txt	/*xterm-8bit*
diff -Naur vim73.orig/runtime/doc/tagsrch.txt vim73/runtime/doc/tagsrch.txt
--- vim73.orig/runtime/doc/tagsrch.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/tagsrch.txt	2013-08-04 19:09:08.017284991 +0000
@@ -1,4 +1,4 @@
-*tagsrch.txt*   For Vim version 7.3.  Last change: 2009 Feb 18
+*tagsrch.txt*   For Vim version 7.3.  Last change: 2011 Oct 28
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -115,7 +115,7 @@
 
 The output of ":tags" looks like this:
 
-   # TO tag      FROM line in file/line
+   # TO tag      FROM line  in file/text
    1  1 main		 1  harddisk2:text/vim/test
  > 2  2 FuncA		58  i = FuncA(10);
    3  1 FuncC	       357  harddisk2:text/vim/src/amiga.c
@@ -135,7 +135,7 @@
 deleting/inserting lines, unless this was done by another program (e.g.
 another instance of Vim).
 
-For the current file, the "file/line" column shows the text at the position.
+For the current file, the "file/text" column shows the text at the position.
 An indent is removed and a long line is truncated to fit in the window.
 
 You can jump to previously used tags with several commands.  Some examples:
@@ -164,9 +164,9 @@
 deleted.  This means that an old branch in the call graph is lost.  After the
 commands explained above the tag stack will look like this:
 
-   # TO tag	FROM line in file
-   1 main	       1  harddisk2:text/vim/test
-   2 FuncB	      59  harddisk2:text/vim/src/main.c
+   # TO tag	FROM line  in file/text
+   1  1 main		1  harddisk2:text/vim/test
+   2  1 FuncB	       59  harddisk2:text/vim/src/main.c
 
 							*E73*
 When you try to use the tag stack while it doesn't contain anything you will
@@ -770,12 +770,12 @@
 			{not in Vi}
 
 							*:dli* *:dlist*
-:[range]dl[ist][!] [/]string[/]
+:[range]dli[st][!] [/]string[/]
 			Like "[D"  and "]D", but search in [range] lines
 			(default: whole file).
 			See |:search-args| for [/] and [!].  {not in Vi}
 			Note that ":dl" works like ":delete" with the "l"
-			flag.
+			register.
 
 							*[_CTRL-D*
 [ CTRL-D		Jump to the first macro definition that contains the
diff -Naur vim73.orig/runtime/doc/term.txt vim73/runtime/doc/term.txt
--- vim73.orig/runtime/doc/term.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/term.txt	2013-08-04 19:09:08.017284991 +0000
@@ -1,4 +1,4 @@
-*term.txt*      For Vim version 7.3.  Last change: 2009 Nov 05
+*term.txt*      For Vim version 7.3.  Last change: 2013 Mar 13
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -294,6 +294,8 @@
 		|termcap-cursor-shape|
 	t_RV	request terminal version string (for xterm)	*t_RV* *'t_RV'*
 		|xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-codes|
+	t_u7	request cursor position (for xterm)		*t_u7* *'t_u7'*
+		see |'ambiwidth'|
 
 KEY CODES
 Note: Use the <> form if possible
@@ -326,7 +328,7 @@
 	t_k8	<F8>		function key 8		*<F8>*	*t_k8* *'t_k8'*
 	t_k9	<F9>		function key 9		*<F9>*	*t_k9* *'t_k9'*
 	t_k;	<F10>		function key 10		*<F10>*	*t_k;* *'t_k;'*
-	t_F1	<F11>		function key 11		*<F11>* *t_F1* *'t_F1'*
+	t_F1	<F11>		function key 11		*<F11>*	*t_F1* *'t_F1'*
 	t_F2	<F12>		function key 12		*<F12>*	*t_F2* *'t_F2'*
 	t_F3	<F13>		function key 13		*<F13>*	*t_F3* *'t_F3'*
 	t_F4	<F14>		function key 14		*<F14>*	*t_F4* *'t_F4'*
@@ -356,9 +358,9 @@
 	t_kI	<Insert>	insert key			*t_kI* *'t_kI'*
 	t_kD	<Del>		delete key			*t_kD* *'t_kD'*
 	t_kb	<BS>		backspace key			*t_kb* *'t_kb'*
-	t_kB	<S-Tab>		back-tab (shift-tab)  *<S-Tab>* *t_kB* *'t_kB'*
+	t_kB	<S-Tab>		back-tab (shift-tab)  *<S-Tab>*	*t_kB* *'t_kB'*
 	t_kh	<Home>		home key			*t_kh* *'t_kh'*
-	t_#2	<S-Home>	shifted home key     *<S-Home>* *t_#2* *'t_#2'*
+	t_#2	<S-Home>	shifted home key     *<S-Home>*	*t_#2* *'t_#2'*
 		<xHome>		alternate home key		*<xHome>*
 	t_@7	<End>		end key				*t_@7* *'t_@7'*
 	t_*7	<S-End>		shifted end key	*<S-End>* *t_star7* *'t_star7'*
@@ -371,8 +373,8 @@
 	t_K5	<kPageDown>	keypad page-down key		*t_K5* *'t_K5'*
 	t_K6	<kPlus>		keypad plus key	      *<kPlus>*	*t_K6* *'t_K6'*
 	t_K7	<kMinus>	keypad minus key     *<kMinus>*	*t_K7* *'t_K7'*
-	t_K8	<kDivide>	keypad divide	    *<kDivide>* *t_K8* *'t_K8'*
-	t_K9	<kMultiply>	keypad multiply   *<kMultiply>* *t_K9* *'t_K9'*
+	t_K8	<kDivide>	keypad divide	    *<kDivide>*	*t_K8* *'t_K8'*
+	t_K9	<kMultiply>	keypad multiply   *<kMultiply>*	*t_K9* *'t_K9'*
 	t_KA	<kEnter>	keypad enter key     *<kEnter>*	*t_KA* *'t_KA'*
 	t_KB	<kPoint>	keypad decimal point *<kPoint>*	*t_KB* *'t_KB'*
 	t_KC	<k0>		keypad 0		 *<k0>*	*t_KC* *'t_KC'*
@@ -665,6 +667,7 @@
 							*xterm-copy-paste*
 NOTE: In some (older) xterms, it's not possible to move the cursor past column
 95.  This is an xterm problem, not Vim's.  Get a newer xterm |color-xterm|.
+Now the limit is 223 columns.
 
 Copy/paste in xterm with (current mode NOT included in 'mouse'):
 1. Press left mouse button on first letter of text, move mouse pointer to last
diff -Naur vim73.orig/runtime/doc/todo.txt vim73/runtime/doc/todo.txt
--- vim73.orig/runtime/doc/todo.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/todo.txt	2013-08-04 19:09:08.043951578 +0000
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.3.  Last change: 2010 Aug 15
+*todo.txt*      For Vim version 7.3.  Last change: 2013 Jul 05
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -27,65 +27,628 @@
 See |develop.txt| for development plans.  You can vote for which items should
 be worked on, but only if you sponsor Vim development.  See |sponsor|.
 
+Issues can also be entered online: http://code.google.com/p/vim/issues/list
+Updates will be forwarded to the vim_dev maillist.  Issues entered there will
+not be repeated below, unless there is extra information.
+
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-":find e" completion, editing a file in the Vim source directory, 'path' set
-to "./proto", does not shorten ./proto/eval.pro, probably because of
-./proto/ex_eval.pro.
+Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
+
+Patch to make has() check for Vim version and patch at the same time.
+(Marc Weber, 2013 Jun 7)
+
+Several syntax file match "^\s*" which may get underlined if that's in the
+highlight group.  Add a "\zs" after it?
+
+Go through more coverity reports.
+
+Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
+
+Checking runtime scripts: Thilo Six, 2012 Jun 6.
+
+Fold can't be opened after ":move". (Ein Brown)
+Patch from Christian Brabandt doesn't fix it completely.
+
+GTK: problem with 'L' in 'guioptions' changing the window width.
+(Aaron Cornelius, 2012 Feb 6)
+
+Javascript file where indent gets stuck on: GalaxyMaster, 2012 May 3.
+
+The CompleteDone autocommand needs some info passed to it:
+- The word that was selected (empty if abandoned complete)
+- Type of completion: tag, omnifunc, user func.
+
+Using ":call foo#d.f()" doesn't autoload the "foo.vim" file.
+That is, calling a dictionary function on an autoloaded dict.
+Works OK for echo, just not for  ":call" and ":call call()". (Ted, 2011 Mar
+17)
+Patch by Christian Brabandt, 2013 Mar 23.
+Not 100% sure this is the right solution.
+
+Win32: When a directory name contains an exclamation mark, completion doesn't
+complete the contents of the directory.  No escaping for the "!"? (Jan
+Stocker, 2012 Jan 5)
+
+Patch to support expression argument to sort() instead of a function name.
+Yasuhiro Matsumoto, 2013 May 31.
+Or should we add a more general mechanism, like lambda functions?
+
+Problem caused by patch 7.3.638: window->open does not update window
+correctly. Issue 91.
+
+Patch to fix that 'cedit' is recognized after :normal. (Christian Brabandt,
+2013 Mar 19, later message)
+
+Patch to view coverage of the tests. (Nazri Ramliy, 2013 Feb 15)
+
+Patch to invert characters differently in GTK. (Yukihiro Nakadaira, 2013 May
+5)
+
+Patch to add "Q" and "A" responses to interactive :substitute. They are
+carried over when using :global. (Christian Brabandt, 2013 Jun 19)
+
+Bug with 'cursorline' in diff mode.  Line being scrolled into view gets
+highlighted as the cursor line.  (Alessandro Ivaldi, 2013 Jun 4)
+
+Patch to add the bufferlist() function. (Yegappan Lakshmanan, 2013 May 5)
+May 17: with winlist() and tabpagelist().
+May 19: with local variables.
+May 28: with options
+
+Patch to support 'u' in interactive substitute. (Christian Brabandt, 2012 Sep
+28)  With tests: Oct 9.
+
+Patch to allow setting w:quickfix_title via setqflist() and setloclist()
+functions. (Christian Brabandt, 2013 May 8, update May 21)
+Patch to add getlocstack() / setlocstack(). (Christian Brabandt, 2013 May 14)
+Second one. Update May 22.
+
+Patch to make fold updates much faster. (Christian Brabandt, 2012 Dec)
+
+Issue 54: document behavior of -complete, also expands arg.
+
+-   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
+    the two into a regex for searching. (Ned Konz)
+Patch by Christian Brabandt, 2013 Apr 20, unfinished.
+
+Bug: findfile("any", "http://;") returns http://any. (Andrew Pimlott, 2013 May
+7)  Not sure if that can be fixed, but when using "file://" it should be
+possible to check if the file exists.
+
+v:register is not directly reset to " after a delete command that specifies a
+register.  It is reset after the next command. (Steve Vermeulen, 2013 Mar 16)
+
+'ff' is wrong for one-line file without EOL. (Issue 77)
+
+Patch to set antialiasing style on Windows. (Ondrej Balaz, 2013 Mar 14)
+Needs a different check for CLEARTYPE_QUALITY.
+
+Issue 72: 'autochdir' causes problems for :vimgrep.
+
+In the ATTENTION message about an existing swap file, mention the name of the
+process that is running.  It might actually be some other program, e.g. after
+a reboot.
+
+MS-Windows: Crash opening very long file name starting with "\\".
+(Christian Brock, 2012 Jun 29)
+
+patch to add "combine" flag to  syntax commands. (so8res, 2012 Dec 6)
+
+Syntax update problem in one buffer opened in two windows, bottom window is
+not correctly updated. (Paul Harris, 2012 Feb 27)
+
+Patch to add assignments in cscope. (Uli Meis, Estabrooks, 2012 Sep 1)
+Alternate patch by Gary Johnson, Sep 4.
+
+Patch to add getsid(). (Tyru, 2011 Oct 2)  Do we want this?  Update Oct 4.
+Or use expand('<sid>')?
+
+Patch to make confirm() display colors. (Christian Brabandt, 2012 Nov 9)
+
+Patch to add functions for signs. (Christian Brabandt, 2013 Jan 27)
+
+Patch to use directX to draw text on Windows.  Adds the 'renderoptions'
+option.  (Taro Muraoka, 2013 Jan 25, update 2013 Apr 3, May 14)
+
+Patch to add 'completeselect' option.  Specifies how to select a candidate in
+insert completion. (Shougo, 2013 May 29)
+Update to add to existing 'completeopt'. 2013 May 30
+
+Problem with refresh:always in completion. (Tyler Wade, 2013 Mar 17)
+
+b:undo_ftplugin cannot call a script-local function. (Boris Danilov, 2013 Jan
+7)
+
+Win32: The Python interface only works with one version of Python, selected at
+compile time.  Can this be made to work with version 2.1 and 2.2 dynamically?
+
+Python: Be able to define a Python function that can be called directly from
+Vim script.  Requires converting the arguments and return value, like with
+vim.bindeval().
+
+Patch for :tabcloseleft, after closing a tab go to left tab. (William Bowers,
+2012 Aug 4)
+
+Patch to improve equivalence classes in regexp patterns.
+(Christian Brabandt, 2013 Jan 16, update Jan 17)
+
+Patch with suggestions for starting.txt. (Tony Mechelynck, 2012 Oct 24)
+But use Gnome instead of GTK?
+
+Patch to make FocusGained and FocusLost work in modern terminals. (Hayaki
+Saito, 2013 Apr 24)
+
+Should be possible to enable/disable matchparen per window or buffer.
+Add a check for b:no_match_paren in Highlight_matching_Pair() (Marcin
+Szamotulski, 2012 Nov 8)
+
+Crash in autocmd that unloads buffers in a BufUnload event. (Andrew Pimlott,
+2012 Aug 11)  Disallow :new when BufUnload is being handled?
+
+Patch to add ":ldo" and ":cdo", execute commands over quickfix list and
+location list. (Yegappan Lakshmanan, 2013 Jun 2)
+
+MS-Windows resizing problems:
+- Windows window on screen positioning: Patch by Yukihiro Nakadaira, 2012 Jun
+  20.  Uses getWindowRect() instead of GetWindowPlacement()
+- Win32: When the taskbar is at the top of the screen creating the tabbar
+  causes the window to move unnecessarily. (William E. Skeith III, 2012 Jan
+  12) Patch: 2012 Jan 13  Needs more work (2012 Feb 2)
+
+'iminsert' global value set when using ":setlocal iminsert"? (Wu, 2012 Jun 23)
+
+Patch to append regexp to tag commands to make it possible to select one out
+of many matches. (Cody Cutler, 2013 Mar 28)
+
+Patch to add tagfunc().  Cleaned up by Christian Brabandt, 2013 Jun 22.
+
+Help for 'b:undo_indent'. (Thilo Six, 2012 May 28)
+Also question if examples are correct.
+
+It should be possible to make globpath() return a list instead of a string,
+like with glob(). (Greg Novack, 2012 Nov 2)
+
+The input map for CTRL-O in mswin.vim causes problems after CTRL-X CTRL-O.
+Suggestion for another map. (Philip Mat, 2012 Jun 18)
+But use "gi" instead of "a".  Or use CTRL-\ CTRL-O.
+
+Patch to support user name completion on MS-Windows. (Yasuhiro Matsumoto, 2012
+Aug 16)
+
+Have an option for spell checking to not mark any Chinese, Japanese or other
+double-width characters as error.  Or perhaps all characters above 256.
+(Bill Sun)  Helps a lot for mixed Asian and latin text.
+
+When there are no command line arguments ":next" and ":argu" give E163, which
+is confusing.  Should say "the argument list is empty".
+
+URXVT:
+- will get stuck if byte sequence does not contain the expected semicolon.
+- Use urxvt mouse support also in xterm.  Explanations:
+  http://www.midnight-commander.org/ticket/2662
+
+Patch to add tests for if_xcmdsrv.c., Jul 8, need some more work. (Brian Burns)
+New tests Jul 13.   Update Jul 17.  Discussion Jul 18.
+
+When running Vim in silent ex mode, an existing swapfile causes Vim to wait
+for a user action without a prompt. (Maarten Billemont, 2012 Feb 3)
+Do give the prompt? Quit with an error?
+
+Patch to list user digraphs. (Christian Brabandt, 2012 Apr 14)
+
+Patch for input method status. (Hirohito Higashi, 2012 Apr 18)
+
+Patch to use .png icons for the toolbar on MS-Windows. (Martin Gieseking, 2013
+Apr 18)
+
+Patch for has('unnamedplus') docs. (Tony Mechelynck, 2011 Sep 27)
+And one for gui_x11.txt.
+
+-   Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav
+    Smilauer, 2004 Sep 13, fix Oct 31, update 2007 May 30)
+    Version for latest MacVim: Tobia Conforto, 2009 Nov 23
+    More recent version: https://retracile.net/wiki/VimBreakIndent
+    Posted to vim-dev by Taylor Hedberg, 2011 Nov 25
+    Update by Taylor Hedberg, 2013 May 30.
+
+":cd" doesn't work when current directory path contains "**".
+finddir() has the same problem.  (Yukihiro Nakadaira, 2012 Jan 10)
+Requires a rewrite of the file_file_in_path code.
+
+Problem with l: dictionary being locked in a function. (ZyX, 2011 Jul 21)
+
+Should use has("browsefilter") in ftplugins.  Requires patch 7.3.593.
+
+Update for vim2html.pl. (Tyru, 2013 Feb 22)
+
+Issue 48: foldopen error can't be caught by try/catch
+
+Patch to sort functions starting with '<' after others.  Omit dict functions,
+they can't be called. (Yasuhiro Matsumoto, 2011 Oct 11)
+
+Patch to pass list to or(), and() and xor(). (Yasuhiro Matsumoto, 2012 Feb 8)
+
+Patch to improve "it" and "at" text object matching. (Christian Brabandt, 2011
+Nov 20)
+
+Patch to improve GUI find/replace dialog. (Christian Brabandt, 2012 May 26)
+Update Jun 2.
+
+`] moves to character after insert, instead of the last inserted character.
+(Yukihiro Nakadaira, 2011 Dec 9)
+
+Plugin for Modeleasy. (Massimiliano Tripoli, 2011 Nov 29)
+
+BufWinLeave triggers too late when quitting last window in a tab page. (Lech
+Lorens, 2012 Feb 21)
+
+Patch for 'transparency' option. (Sergiu Dotenco, 2011 Sep 17)
+Only for MS-Windows.  No documentation.  Do we want this?
+
+Patch to support cursor shape in Cygwin console. (Ben bgold, 2011 Dec 27)
+
+Patch to support UTF-8 for Hangul. (Shawn Y.H. Kim, 2011 May 1)
+Needs more work.  Pinged 2012 Jan 4.
+
+Issue 64: when 'incsearch' is on can't paste LF on command line.
 
-Problem with \NL in Ex script. (Ray Frish, 2010 Aug 10)
+On MS-Windows a temp dir with a & init causes system() to fail. (Ben Fritz,
+2012 Jun 19)
+
+'cursorline' is displayed too short when there are concealed characters and
+'list' is set.  (Dennis Preiser)
+Patch 7.3.116 was the wrong solution.
+Christian Brabandt has another incomplete patch. (2011 Jul 13)
+
+With concealed text mouse click doesn't put the cursor in the right position.
+(Herb Sitz)  Fix by Christian Brabandt, 2011 Jun 16.  Doesn't work properly,
+need to make the change in where RET_WIN_BUF_CHARTABSIZE() is called.
+
+Syntax region with 'concealends' and a 'cchar' value, 'conceallevel' set to 2,
+only one of the two ends gets the cchar displayed. (Brett Stahlman, 2010 Aug
+21, Ben Fritz, 2010 Sep 14)
+
+'cursorline' works on a text line only.  Add 'cursorscreenline' for
+highlighting the screen line. (Christian Brabandt, 2012 Mar 31)
+
+Win32: Patch to use task dialogs when available. (Sergiu Dotenco, 2011 Sep 17)
+New feature, requires testing.  Made some remarks.
+
+Win32: Patch for alpha-blended icons and toolbar height. (Sergiu Dotenco, 2011
+Sep 17)  Asked for feedback from others.
+
+Win32: Cannot cd into a directory that starts with a space. (Andy Wokula, 2012
+Jan 19)
+
+Win32: default for 'backupcopy' is wrong for a symbolic link. (mklink one
+two). (Benjamin Fritz, 2012 Mar 15)
+
+Need to escape $HOME on Windows?  (ZyX, 2011 Jul 21, discussion 2013 Jul 4)
+Can't simply use a backslash, \$HOME has a different meaning already.
+Would be possible to use $$HOME where $HOME is to be used.
+
+"2" in 'formatoptions' not working in comments. (Christian Corneliussen, 2011
+Oct 26)
+
+Bug in repeating Visual "u". (Lawrence Kesteloot, 2010 Dec 20)
+
+Using "p" in Visual mode while specifying the small delete register "-
+overwrites the register before it is put. (Marcin Szamotulski, 2012 Nov 23)
+
+With "unamedplus" in 'clipboard' pasting in Visual mode causes error for empty
+register. (Michael Seiwald, 2011 Jun 28)  I can't reproduce it.
+
+In GTK Gvim, setting 'lines' and 'columns' to 99999 causes a crash (Tony
+Mechelynck, 2011 Apr 25).  Can reproduce the crash sometimes:
+   gvim -N -u NONE --cmd 'set lines=99999 columns=99999'
+(gvim:25968): Gdk-WARNING **: Native Windows wider or taller than 65535 pixels are not supported
+The program 'gvim' received an X Window System error.
+This probably reflects a bug in the program.
+The error was 'RenderBadPicture (invalid Picture parameter)'.
+  (Details: serial 313 error_code 161 request_code 149 minor_code 8)
+  (Note to programmers: normally, X errors are reported asynchronously;
+   that is, you will receive the error a while after causing it.
+   To debug your program, run it with the --sync command line
+   option to change this behavior. You can then get a meaningful
+   backtrace from your debugger if you break on the gdk_x_error() function.)
+Check that number of pixels doesn't go above 65535?
+
+Windows keys not set properly on Windows 7?  (cncyber, 2010 Aug 26)
+
+When using a Vim server, a # in the path causes an error message.
+(Jeff Lanzarotta, 2011 Feb 17)
+
+Setting $HOME on MS-Windows is not very well documented.  Suggestion by Ben
+Fritz (2011 Oct 27).
 
 Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)
 
-CTRL-] on help tag |/[\n]| doesn't jump to the right place. (Tony Mechelynck,
-2010 Aug 8)
+Bug: Windows 7 64 bit system freezes  when 'clipboard' set to "unnamed" and
+doing ":g/test/d".  Putting every delete on the clipboard? (Robert Chan, 2011
+Jun 17)
+
+When there is a ">" in a line that "gq" wraps to the start of the next line,
+then the following line will pick it up as a leader.  Should get the leader
+from the first line, not a wrapped line. (Matt Ackeret, 2012 Feb 27)
 
-":command Print echo 'print'" works, but ":Print" doesn't.  Builtin Print
-should be overruled. (Aaron Thoma)
+Using ":break" or something else that stops executing commands inside a
+":finally" does not rethrow a previously uncaught exception. (ZyX, 2010 Oct
+15)
+
+Vim using lots of memory when joining lines. (John Little, 2010 Dec 3)
+
+BT regexp engine: After trying a \@> match and failing, submatches are not
+cleared.  See test64.
+
+Changes to manpage plugin. (Elias Toivanen, 2011 Jul 25)
+
+Patch to make "z=" work when 'spell' is off.  Does this have nasty side
+effects?  (Christian Brabandt, 2012 Aug 5)
+Would also need to do this for spellbadword() and spellsuggest().
+
+Patch for variable tabstops.
+
+On 64 bit MS-Windows "long" is only 32 bits, but we sometimes need to store a
+64 bits value.  Change all number options to use nropt_T and define it to the
+right type.
+
+string() can't parse back "inf" and "nan".  Fix documentation or fix code?
+(ZyX, 2010 Aug 23)
+
+Make 'formatprg' global-local. (Sung Pae)
+
+When doing "redir => s:foo" in a script and then "redir END" somewhere else
+(e.g. in a function) it can't find s:foo.
+
+When setqflist() uses a filename that triggers a BufReadCmd autocommand Vim
+doesn't jump to the correct line with :cfirst. (ZyX,  2011 Sep 18)
+
+7   Make "ga" show the digraph for a character, if it exists.
+Patch from Christian Brabandt, 2011 Aug 19.
+
+maparg() does not show the <script> flag.  When temporarily changing a
+mapping, how to restore the script ID?
+
+Bug in try/catch: return with invalid compare throws error that isn't caught.
+(ZyX, 2011 Jan 26)
+
+When setting a local option value from the global value, add a script ID that
+indicates this, so that ":verbose set" can give a hint.  Check with options in
+the help file.
+
+After patch 7.3.097 still get E15. (Yukihiro Nakadaira, 2011 Jan 18)
+Also for another example (ZyX, 2011 Jan 24)
+
+Build problem with small features on Mac OS X 10.6. (Rainer, 2011 Jan 24)
+
+"0g@$" puts '] on last byte of multi-byte. (ZyX, 2011 Jan 22)
+
+Patch to support sorting on floating point number.  (Alex Jakushev, 2010 Oct
+30)
+
+Patch to addd TextDeletePost and TextYankPost events. (Philippe Vaucher, 2011
+May 24)  Update May 26.
+
+Patch for :tabrecently. (Hirokazu Yoshida, 2012 Jan 30)
+
+When a script contains "redir => s:foo" but doesn't end redirection, a
+following "redir" command gives an error for not being able to access s:foo.
+(ZyX, 2011 Mar 27)
+
+Problem with "syn sync gouphere". (Gustavo Niemeyer, 2011 Jan 27)
+
+Loading autoload script even when usage is inside "if 0". (Christian Brabandt,
+2010 Dec 18)
+
+With a filler line in diff mode, it isn't displayed in the column with line
+number, but it is in the sign column.  Doesn't look right. (ZyX 2011 Jun 5)
+Patch by Christian Brabandt, 2011 Jun 5.  Introduces new problems.
+
+8   Add a command to jump to the next character highlighted with "Error".
+Patch by Christian Brabandt, uses ]e [e ]t and [t. 2011 Aug 9.
+
+8   Add an event like CursorHold that is triggered repeatedly, not just once
+    after typing something.
+Need for CursorHold that retriggers.  Use a key that doesn't do anything, or a
+function that resets did_cursorhold.
+Patch by Christian Brabandt, 2011 May 6.
+
+7   Use "++--", "+++--" for different levels instead of "+---" "+----".
+Patch by Christian Brabandt, 2011 Jul 27.
+Update by Ben Fritz, with fix for TOhtml. (2011 Jul 30)
+
+9   Add %F to 'errorformat': file name without spaces.  Useful on Unix to
+    avoid matching something up to a time 11:22:33.
+Patch by Christian Brabandt, 2011 Jul 27.
+
+Patch to fix \%V item in regexp. (Christian Brabandt, 2010 Nov 8)
+Update Nov 19.  James Vega: still not right.  Christian: it's difficult.
+
+Patch to add up to 99 match groups. (Christian Brabandt, 2010 Dec 22)
+Also add named groups: \%{name}(re)  and \%{name}g
+
+In the sandbox it's not allowed to do many things, but it's possible to change
+or set variables.  Add a way to prevent variables from being changed in the
+sandbox?  E.g.: ":protect g:restore_settings".
 
 GTK: drawing a double-width combining character over single-width characters
 doesn't look right. (Dominique Pelle, 2010 Aug 8)
 
+GTK: tear-off menu does not work. (Kurt Sonnenmoser, 2010 Oct 25)
+
+Win32: tear-off menu does not work when menu language is German. (Markus
+Bossler, 2011 Mar 2)  Fixed by 7.3.095?
+
+Version of netbeans.c for use with MacVim. (Kazuki Sakamoto, 2010 Nov 18)
+
+7.3.014 changed how backslash at end of line works, but still get a NUL when
+there is one backslash. (Ray Frush, 2010 Nov 18)  What does the original ex
+do?
+
+Searching mixed with Visual mode doesn't redraw properly. (James Vega, 2010 Nov
+22)
+
+New esperanto spell file can't be processed. (Dominique Pelle, 2011 Jan 30)
+- move compflags to separate growarray?
+- instead of a regexp use a hashtable.  Expand '?', '*', '+'.  What would be
+  the maximum repeat for * and +?
+
+"L'Italie" noted as a spell error at start of the sentence. (Dominique Pelle,
+2011 Feb 27)
+
+Copy/paste between Vim and Google chrome doesn't work well for multi-byte
+characters. (Ben Haskell, 2010 Sep 17)
+When putting text in the cut buffer (when exiting) and conversion doesn't work
+properly, Prepend "ENC==={value of 'enc'}:" to the text and don't convert?
+Then it should at least work from Vim to Vim and in other applications it's
+clear why it doesn't work.
+Experimental patch by Christian Brabandt, 2012 Apr 19.
+
 Editing a file with a ^M with 'ff' set to "mac", opening a help file, then the
 ^M is displayed as ^J sometimes.  Getting 'ff' value from wrong window/buffer?
 
+'colorcolumn' has higher priority than hlsearch.  Should probably be the other
+way around. (Nazri Ramliy, 2013 Feb 19)
+
+When Vim is put in the background (SIGTSTP) and then gets a SIGHUP it doesn't
+exit.  It exists as soon as back in the foreground. (Stephen Liang, 2011 Jan
+9)  Caused by vim_handle_signal(SIGNAL_BLOCK); in ui.c.
+
+g` not working correctly when using :edit.  It works OK when editing a file on
+the command line. (Ingo Karkat, 2011 Jan 25)
+
+Since patch 7.2.46 Yankring plugin has become very slow, eventually make Vim
+crash? (Raiwil, 2010 Nov 17)
+
+Does not work with NFA regexp engine:
+- \%u, \%x, \%o, \%d followed by a composing character
+
+Regexp engine performance:
+- Profiling:
+	./vim -u NONE -s ~/vim/test/ruby.vim
+	./vim -u NONE -s ~/vim/test/loop.vim
+	./vim -u NONE -s ~/vim/test/alsa.vim
+	./vim -s ~/vim/test/todo.vim
+	./vim -s ~/vim/test/xml.vim
+    Dominique Pelle:  xmlSyncDT is particularly slow (Jun 7)
+- More test files from the src/pkg/regexp/testdata directory in the Go repo.
+- Performance tests:
+  - Using asciidoc syntax. (Marek Schimara, 2013 Jun 6)
+  - ~/vim/text/FeiqCfg.xml (file from Netjune)
+  - ~/vim/text/edl.svg  (also XML)
+  - glts has five tests. (May 25)
+  - ~/vim/test/slowsearch
+  - ~/vim/test/rgb.vim
+  - search for  a.*e*exn  in the vim executable.  Go to last line to use
+    'hlsearch'.
+  - Slow combination of folding and PHP syntax highlighting.  Script to
+    reproduce it.  Caused by "syntax sync fromstart" in combination with patch
+    7.2.274.  (Christian Brabandt, 2010 May 27) Generally, folding with
+    'foldmethod' set to "syntax" is slow.  Do profiling to find out why.
+
+Patch to add 'systemencoding', convert between 'encoding' and this for file
+names, shell commands and the like.  (Kikuchan, 2010 Oct 14)
+Assume the system converts between the actual encoding of the filesystem to
+the system encoding (usually utf-8).
+
+Patch to add GUI colors to the terminal, when it supports it. (ZyX, 2013 Jan
+26)
+
 Problem producing tags file when hebrew.frx is present.  It has a BOM.
 Results in E670. (Tony Mechelynck, 2010 May 2)
 
+'beval' option should be global-local.
+
+Ruby: ":ruby print $buffer.number" returns zero.
+
 setpos() does not restore cursor position after :normal. (Tyru, 2010 Aug 11)
 
+7   The 'directory' option supports changing path separators to "%" to make
+    file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
+    Patch by Christian Brabandt, 2010 Oct 21.
+
+getpos()/setpos() don't include curswant.  getpos() could return a fifth
+element.  setpos() could accept an optional fifth element.
+Patch by Christian Brabandt, 2010 Sep 6.  Check that new argument is optional
+and that it's documented.
+
+With "tw=55 fo+=a" typing space before ) doesn't work well. (Scott Mcdermott,
+2010 Oct 24)
+
+Patch to add random number generator. (Hong Xu, 2010 Nov 8, update Nov 10)
+Alternative from Christian Brabandt. (2010 Sep 19)
+
+Messages in message.txt are highlighted as examples.
+
+When using cp850 the NBSP (0xff) is not drawn correctly. (Brett Stahlman, 2010
+Oct 22)  'isprint' is set to "@,161-255".
+
 Test 73 fails on MS-Windows when compiled with DJGPP and run twice.  How to
 delete the Xfind directory?  Add an rmdir() function, just like we have
 mkdir().
 
+":echo "\x85" =~# '[\u0085]'" returns 1 instead of 0. (ZyX, 2010 Oct 3)
+
 'cindent' not correct when 'list' is set. (Zdravi Korusef, 2010 Apr 15)
 
+C-indenting: A matching { in a comment is ignored, but intermediate { are not
+checked to be in a comment.  Implement FM_SKIPCOMM flag of findmatchlimit().
+Issue 46.
+
+When 'paste' is changed with 'pastetoggle', the ruler doesn't reflect this
+right away. (Samuel Ferencik, 2010 Dec 7)
+
+Mac with X11: clipboard doesn't work properly. (Raf, 2010 Aug 16)
+
+Using CompilerSet doesn't record where an option was set from.  E.g., in the
+gcc compiler plugin. (Gary Johnson, 2010 Dec 13)
+
 ":helpgrep" does not put the cursor in the correct column when preceded by
 accented character. (Tony Mechelynck, 2010 Apr 15)
 
+Don't call check_restricted() for histadd(), setbufvar(), settabvar(),
+setwinvar().
+
 Echo starts in the wrong column:
     while 1 | let s = input('A') | echo 'R' | endw
 (Boyko Bantchev, 2010 Aug 9)
 
+Patch for GVimExt to show an icon. (Dominik Riebeling, 2010 Nov 7)
+
+When writing a file > 2Gbyte, the reported number of bytes is negative.
+(Antonio Colombo, 2010 Dec 18)
+
 Patch: Let rare word highlighting overrule good word highlighting.
-(Jakson A. Aquino, 2010 Jul 30)
+(Jakson A. Aquino, 2010 Jul 30, again 2011 Jul 2)
+
+When 'lines' is 25 and 'scrolloff' is 12, "j" scrolls zero or two lines
+instead of one. (Constantin Pan, 2010 Sep 10)
 
-Patch to make more characters work in dialogs. (Yankwei Jia, 2010 Aug 4)
+Crash in setqflist(). (Benoit Mortgat, 2010 Nov 18)
 
-":drop" does not respect 'autochdir'. (Peter Odding, 2010 Jul 24)
+Gui menu edit/paste in block mode insert only inserts in one line (Bjorn
+Winckler, 2011 May 11)
+Requires a map mode for Insert mode started from blockwise Visual mode.
+
+Writing nested List and Dict in viminfo gives error message and can't be read
+back. (Yukihiro Nakadaira, 2010 Nov 13)
+
+Can 'undolevels' be a buffer-local option?  Helps for making big changes in
+one file only, set 'ul' to -1 only for that buffer.
+Patch by Christian Brabandt, 2010 Dec 17.  Needs test.
 
 Problem with cursor in the wrong column. (SungHyun Nam, 2010 Mar 11)
 Additional info by Dominique Pelle. (also on 2010 Apr 10)
 
+CreateFile and CreateFileW are used without sharing, filewritable() fails when
+the file was already open (e.g. script is being sourced).  Add FILE_SHARE_READ|
+FILE_SHARE_WRITE in mch_access()? (Phillippe Vaucher, 2010 Nov 2)
+
 Is ~/bin (literally) in $PATH supposed to work?  (Paul, 2010 March 29)
 Looks like only bash can do it. (Yakov Lerner)
 
-8   Add an event like CursorHold that is triggered repeatedly, not just once
-    after typing something.
-Need for CursorHold that retriggers.  Use a key that doesn't do anything, or a
-function that resets did_cursorhold.
-
 Cscope "cs add" stopped working somewhat before 7.2.438. (Gary Johnson, 2010
 Jun 29)  Caused by 7.2.433?
 
@@ -106,59 +669,66 @@
 Requires configure check for localtime().
 Use format year-month-day hr:min:sec.
 
+Patch to add "combine" to :syntax, combines highlight attributes. (Nate
+Soares, 2012 Dec 3)
+
+Patch to make ":hi link" also take arguments. (Nate Soares, 2012 Dec 4)
+
 Shell not recognized properly if it ends in "csh -f". (James Vega, 2009 Nov 3)
 Find tail?  Might have a / in argument.  Find space?  Might have space in
 path.
 
+Test 51 fails when language set to German. (Marco, 2011 Jan 9)
+Dominique can't reproduce it.
+
+'ambiwidth' should be global-local.
+
 ":function f(x) keepjumps" creates a function where every command is executed
 like it has ":keepjumps" before it.
 
 Coverity: ask someone to create new user: Dominique.
 Check if there are new reported defects: http://scan.coverity.com/rung2.html
 
-When setting 'undofile' while the file is already loaded, but unchanged, try
-to read the undo file.  Requires computing a checksum of the text. (Andy
-Wokula)
+Patch to support :undo absolute jump to file save number. (Christian Brabandt,
+2010 Nov 5)
+
+Patch to use 'foldnextmax' also for "marker" foldmethod. (Arnaud Lacombe, 2011
+Jan 7)
 
 Bug with 'incsearch' going to wrong line. (Wolfram Kresse, 2009 Aug 17)
 Only with "vim -u NONE".
 
 Problem with editing file in binary mode. (Ingo Krabbe, 2009 Oct 8)
 
+With 'wildmode' set to "longest:full,full" and pressing Tab once the first
+entry in wildmenu is highlighted, that shouldn't happen. (Yuki Watanabe, 2011
+Feb 12)
+
 Display error when 'tabline' that includes a file name with double-width
 characters. (2010 Aug 14, bootleq)
 
 Problem with stop directory in findfile(). (Adam Simpkins, 2009 Aug 26)
 
-Undo problem: line not removed as expected when using setline() from Insert
-mode. (Israel Chauca, 2010 May 13, more in second msg)
-Break undo when CTRL-R = changes the text?  Or save more lines?
-
-Change to C syntax folding to make it work much faster, but a bit less
-reliable. (Lech Lorens, 2009 Nov 9)  Enable with an option?
-Most time is spent in in_id_list().
-
-Slow combination of folding and PHP syntax highlighting.  Script to reproduce
-it.  Caused by "syntax sync fromstart" in combination with patch 7.2.274.
-(Christian Brabandt, 2010 May 27)
+Using ']' as the end of a range in a pattern requires double escaping:
+     /[@-\\]]  (Andy Wokula, 2011 Jun 28)
+
+Syntax priority problem. (Charles Campbell, 2011 Sep 15)
 
 When completion inserts the first match, it may trigger the line to be folded.
 Disable updating folds while completion is active? (Peter Odding, 2010 Jun 9)
 
-In command line window ":close" doesn't work properly. (Tony Mechelynck, 2009
-Jun 1)
-
 When a:base in 'completefunc' starts with a number it's passed as a number,
 not a string. (Sean Ma)  Need to add flag to call_func_retlist() to force a
 string value.
 
-There is no command line completion for ":lmap".
-
 Invalid read error in Farsi mode. (Dominique Pelle, 2009 Aug 2)
 
 For running gvim on an USB stick: avoid the OLE registration.  Use a command
 line argument -noregister.
 
+When using an expression in 'statusline' leading white space sometimes goes
+missing (but not always). (ZyX, 2010 Nov 1)
+
 When a mapping exists both for insert mode and lang-insert mode, the last one
 doesn't work. (Tyru, 2010 May 6)  Or is this intended?
 
@@ -175,11 +745,18 @@
 Patch for displaying 0x200c and 0x200d. (Ali Gholami Rudi, 2009 May 6)
 Probably needs a bit of work.
 
-List of encoding aliases. (Takao Fujiware, 2009 Jul 18)
+List of encoding aliases. (Takao Fujiwara, 2009 Jul 18)
 Are they all OK?  Update Jul 22.
 
+Win32: Improved Makefile for MSVC. (Leonardo Valeri Manera, 2010 Aug 18)
+
 Win32: Expanding 'path' runs into a maximum size limit. (bgold12, 2009 Nov 15)
 
+Win32: Patch for enabling quick edit mode in console. (Craig Barkhouse, 2010
+Sep 1)
+
+Win32: Patch for using .png files for icons. (Charles Peacech, 2012 Feb 5)
+
 Putting a Visual block while 'visualedit' is "all" does not leave the cursor
 on the first character. (John Beckett, 2010 Aug 7)
 
@@ -198,7 +775,7 @@
 When starting Vim with "gvim -f -u non_existent_file > foo.txt" there are a
 few control characters in the output. (Dale Wiles, 2009 May 28)
 
-'cmdwinheight is only used in last window when 'winheight' is a large value.
+'cmdwinheight' is only used in last window when 'winheight' is a large value.
 (Tony Mechelynck, 2009 Apr 15)
 
 Status line containing winnr() isn't updated when splitting the window (Clark
@@ -228,10 +805,6 @@
 'delcombine' does not work for the command line. (Tony Mechelynck, 2009 Jul
 20)
 
-Unwanted file name escaping: ":echo input('file:' , '', 'file')"
-And use file name completion on a file with spaces. (Frederic Hardy, 2009 Mar
-23)
-
 Don't load macmap.vim on startup, turn it into a plugin. (Ron Aaron,
 2009 Apr 7)  Reminder Apr 14.
 
@@ -267,9 +840,9 @@
 
 Diff mode out of sync. (Gary Johnson, 2010 Aug 4)
 
-Win32: A --remote command that has a directory name starting with a ( doesn't
-work, the backslash is removed, assuming that it escapes the (. (Valery
-Kondakoff, 2009 May 13)
+Support a 'systemencoding' option (for Unix).  It specifies the encoding of
+file names. (Kikuchan, 2010 Oct 5).  Useful on a latin1 or double-byte Asian
+system when 'encoding' is "utf-8".
 
 Win32 GUI: Changing manifest helps for dpi changes (Joe Castro, 2009 Mar 27)
 
@@ -288,25 +861,23 @@
 Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
 (Felix Kater, 2009 Mar 3)
 
-maparg() doesn't return the flags, such as <buffer>, <script>, <silent>.
-These are needed to save and restore a mapping.
-Also: the rhs string is not always correct. (Hari Krishna Dara, 2009 Sept 29)
+Session file generates error upon loading, cause by --remote-silent-tab.
+(7tommm (ytommm) 2010 Nov 24)
 
 Using ~ works OK on 'a' with composing char, but not on 0x0418  with composing
 char 0x0301. (Tony Mechelynck, 2009 Mar 4)
 
+A function on a dictionary is not profiled. (Zyx, 2010 Dec 25)
+
 Inconsistent: starting with $LANG set to es_ES.utf-8 gives Spanish
 messages, even though locale is not supported.  But ":lang messages
 es_ES.utf-8" gives an error and doesn't switch messages. (Dominique Pelle,
 2009 Jan 26)
 
-When $HOME contains special characters, sich as a comma, escape them when used
+When $HOME contains special characters, such as a comma, escape them when used
 in an option. (Michael Hordijk, 2009 May 5)
 Turn "esc" argument of expand_env_esc() into string of chars to be escaped.
 
-Can 'undolevels' be a buffer-local option?  Helps for making big changes in
-one file only, set 'ul' to -1 only for that buffer.
-
 Should make 'ignorecase' global-local, so that it makes sense setting it from
 a modeline.
 
@@ -325,8 +896,10 @@
 Completion for ":buf" doesn't work properly on Win32 when 'shellslash' is off.
 (Henrik Ohman, 2009, Jan 29)
 
-Allow patches to add something to version.c, like with an official patch, so
-that :version output shows which patches have been applied.
+shellescape() depends on 'shellshash' for quoting.  That doesn't work when
+'shellslash' is set but using cmd.exe. (Ben Fritz)
+Use a different option or let it depend on whether 'shell' looks like a
+unix-like shell?
 
 Bug: in Ex mode (after "Q") backslash before line break, when yanked into a
 register and executed, results in <Nul>: instead of line break.
@@ -354,6 +927,7 @@
 Also: swap files are in ~/tmp/  One has relative file name ".mozilla/...".
 
 Add v:motion_force. (Kana Natsuno, 2008 Dec 6)
+Maybe call it v:motiontype.
 
 Runtime files for Clojure. (Toralf Wittner, 2008 Jun 25)
 
@@ -374,11 +948,6 @@
 option only for when jumping to another buffer, not when the command argument
 is executed.
 
-Crash with dragn-n-drop of file combined with netrw (Marius Gedminas, 2008 Jun
-11)  I can't reproduce it.  It's probably caused by a handle_drop() call
-in combination with autocommands that invoke a ":redraw" command.
-Another valgrind output Jun 30.
-
 ":pedit %" with a BufReadPre autocommand causes the cursor to move to the
 first line. (Ingo Karkat, 2008 Jul 1)  Ian Kelling is working on this.
 
@@ -403,27 +972,29 @@
 Unfinished patch by Ian Kelling, 2008 Jul 11.  Followup Jul 14, need to have
 another look at it.
 
-Patch for c.vim and cpp.vim syntax files. (Chung-chieh Shan, 2008 Nov 26)
-
 c.vim: XXX in a comment is colored yellow, but not when it's after "#if 0".
 (Ilya Dogolazky, 2009 Aug 7)
 
-Win32:  ":dis +" shows nothing, but "+p does insert text.  Problem with "* and
-"+ being the same thing?
-
 You can type ":w ++bad=x fname", but the ++bad argument is ignored.  Give an
 error message?  Or is this easy to implement?  (Nathan Stratton Treadway, 2008
 Aug 20)  This is in ucs2bytes(), search for 0xBF.  Using the ++bad argument is
 at the other match for 0xBF.
 
-Fix for matchparen HL doesn't work.  beep.
-
 When adding "-complete=file" to a user command this also changes how the
 argument is processed for <f-args>. (Ivan Tishchenko, 2008 Aug 19)
 
 Win32: associating a type with Vim doesn't take care of space after a
 backslash? (Robert Vibrant, 2008 Jun 5)
 
+Win32: bold font doesn't work when 'guifontwide' has been set. (Yue Wu, 2010
+Aug 23)
+
+When 'rightleft' is set, cursorcolumn isn't highlighted after the end of a
+line.  It's also wrong in folds. (Dominique Pelle, 2010 Aug 21)
+
+Using an insert mode expression mapping, cursor is not in the expected
+position. (ZyX, 2010 Aug 29)
+
 After using <Tab> for command line completion after ":ta blah" and getting E33
 (no tags file), further editing the command to e.g., ":echo 'blah'", the
 command is not executed.  Fix by Ian Kelling?
@@ -438,9 +1009,6 @@
 either.  Matt Wozniski:  nv_at() calls do_execreg() which uses
 put_in_typebuf().  Char mapped twice?
 
-8   Some file systems are case-sensitive, some are not.  Turn
-    CASE_INSENSITIVE_FILENAME into an option, at least for completion.
-
 Despite adding save_subexpr() this still doesn't work properly:
 Regexp: matchlist('12a4aaa', '^\(.\{-}\)\(\%5c\@<=a\+\)\(.\+\)\?')
 Returns ['12a4', 'aaa', '4aaa'], should be ['12a4', 'aaa', '']
@@ -457,11 +1025,15 @@
 an alternate solution, also for src/ex_getln.c.
 This also fails when the file or directory name contains "%". (Thoml, 2008
 July 7)
+Using --remote-silent while the current directory has a # in the name does not
+work, the # needs to be escaped. (Tramblay Bruno, 2012 Sep 15)
 
-The str2special() function doesn't handle multi-byte characters properly.
-Patch from Vladimir Vichniakov, 2007 Apr 24.
-Should clean up the whole function.  Also allow modifiers like <S-Char-32>?
-find_special_key() also has this problem.
+When using remote-silent the -R flag is not passed on. (Axel Bender, 2012 May
+31)
+
+Win32: A --remote command that has a directory name starting with a ( doesn't
+work, the backslash is removed, assuming that it escapes the (. (Valery
+Kondakoff, 2009 May 13)
 
 Problem with 'langmap' being used on the rhs of a mapping. (Nikolai Weibull,
 2008 May 14)
@@ -476,6 +1048,14 @@
 Unexpectedly inserting a double quote. (Anton Woellert, 2008 Mar 23)
 Works OK when 'cmdheight' is 2.
 
+8   Use a mechanism similar to omni completion to figure out the kind of tab
+    for CTRL-] and jump to the appropriate matching tag (if there are
+    several).
+    Alternative: be able to define a function that takes the tag name and uses
+    taglist() to find the right location.  With indication of using CTRL-] so
+    that the context can be taken into account. (Robert Webb)
+Patch by Christian Brabandt, 2013 May 31.
+
 Test54 should not use shell commands.  Make it portable.
 
 The utf class table is missing some entries:
@@ -496,6 +1076,9 @@
 Mac: After a ":vsplit" the left scrollbar doesn't appear until 'columns' is
 changed or the window is resized.
 
+GTK: when setting 'columns' in a startup script and doing ":vertical diffsplit"
+the window isn't redrawn properly, see two vertical bars.
+
 Mac: Patch for configure: remove arch from ruby link args. (Knezevic, 2008
 Mar 5)  Alternative: Kazuki Sakamoto, Mar 7.
 
@@ -513,6 +1096,12 @@
 result in no matches.  Convert chars to lower case? (Erik Wognsen, 2009 Apr
 16)
 
+Searching for composing char works, but not when inside []. (ZyX, Benjamin R.
+Haskell, 2010 Aug 24)
+
+Fail to edit file after failed register access.  Error flag remains set?
+(Lech Lorens, 2010 Aug 30)
+
 Patch for redo register. (Ben Schmidt, 2007 Oct 19)
 Await response to question to make the register writable.
 
@@ -527,27 +1116,13 @@
 
 try/catch not working for argument of return. (Matt Wozniski, 2008 Sep 15)
 
-Recognize and ignore BOM in error file. (Aleksey Baibarin)
+try/catch not working when inside a for loop. (ZyX, 2011 Jan 25)
 
 ":tab help" always opens a new tab, while ":help" re-uses an existing window.
 Would be more consistent when an existing tab is re-used. (Tony Mechelynck)
 
-":tab drop filename" doesn't work nicely when "filename" is open in a window
-in another tab. (Tony Mechelynck, 2009 Feb 13)
-
 Add ":nofold".  Range will apply without expanding to closed fold.
 
-Including NFA regexp code:
-Use "\%#= to set the engine: 0 = automatic, 1 = backtracking, 2 = new.
-Useful in tests.
-Performance tests:
-- ~/vim/test/veryslow.js (file from Daniel Fetchinson)
-- ~/vim/test/slowsearch
-- ~/vim/test/rgb.vim
-- ~/vim/text/FeiqCfg.xml (file from Netjune)
-- search for  a.*e*exn  in the vim executable.  Go to last line to use
-  'hlsearch'.
-
 Using Aap to build Vim: add remarks about how to set personal preferences.
 Example on http://www.calmar.ws/tmp/aap.html
 
@@ -560,6 +1135,7 @@
 
 Can't easily close the help window, like ":pc" closes the preview window and
 ":ccl" closes the quickfix window.  Add ":hclose". (Chris Gaal)
+Patch for :helpclose, Christian Brabandt, 2010 Sep 6.
 
 When 'diffopt' has "context:0" a single deleted line causes two folds to merge
 and mess up syncing. (Austin Jennings, 2008 Jan 31)
@@ -569,6 +1145,9 @@
 
 New PHP syntax file, use it? (Peter Hodge)
 
+":echoe" in catch block stops processing, while this doesn't happen outside of
+a catch block. (ZyX, 2011 Jun 2)
+
 'foldcolumn' in modeline applied to wrong window when using a session. (Teemu
 Likonen, March 19)
 
@@ -589,6 +1168,9 @@
 
 More AmigaOS4 patches. (Peter Bengtsson, Nov 9)
 
+Amiga patches with vbcc. (Adrien Destugues, 2010 Aug 30)
+http://pulkomandy.ath.cx/drop/vim73_vbcc_amiga.diff
+
 Insert mode completion: When editing the text and pressing CTRL-N again goes
 back to originally completed text, edited text is gone. (Peng Yu, 2008 Jul 24)
 Suggestion by Ben Schmidt, 2008 Aug 6.
@@ -615,9 +1197,6 @@
 size and then redraw the text, skipping the characters under the popup menu.
 This should avoid flicker.  Other solution by A.Politz, 2007 Aug 22.
 
-When the popup menu is close to the edge of the window it is truncated.  Patch
-to anchor the popup menu in a different way. (James Vega, 2008 Jul 30)
-
 Windows 98: pasting from the clipboard with text from another application has
 a trailing NUL.  (Joachim Hofmann)  Perhaps the length specified for CF_TEXT
 isn't right?
@@ -643,6 +1222,9 @@
 However, for backwards compatibility escaping might be necessary.  Check if
 the user put quotes around the expanded item?
 
+A throw in a function causes missing an endif below the call. (Spiros
+Bousbouras, 2011 May 16)
+
 Error E324 can be given when a cron script has wiped out our temp directory.
 Give a clear error message about this (and tell them not to wipe out /tmp).
 
@@ -662,15 +1244,32 @@
 moves the cursor instead of deleting. (Chris Kaiser, 2007 Sep 25)
 
 Patch to use Modern UI 2.0 for the Nsis installer. (Guopeng Wen, 2010 Jul 30)
+Latest version: 2011 May 18
+8   Windows install with NSIS: make it possible to do a silent install, see
+    http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
+    Version from Guopeng Wen that does this (2010 Dec 27)
+Alternative: MSI installer: https://github.com/petrkle/vim-msi/
+
+Windows installer should install 32-bit version of right-click handler also on
+64-bit systems. (Brian Cunningham, 2011 Dec 28)
+
+Windows installer could add a "open in new tab of existing Vim" menu entry.
+Gvimext: patch to add "Edit with single Vim &tabbed" menu entry.
+Just have two choices, always using one Vim and selecting between using an
+argument list or opening each file in a separate tab.
+(Erik Falor, 2008 May 21, 2008 Jun 26)
+
+Windows installer: licence text should not use indent, causes bad word wrap.
+(Benjamin Fritz, 2010 Aug 16)
+
+Dos uninstal may delete vim.bat from the wrong directory (e.g., when someone
+makes his own wrapper).  Add a magic string with the version number to the
+.bat file and check for it in the uninstaller.  E.g.
+          # uninstall key: vim7.3*
 
 Changes for Win32 makefile. (Mike Williams, 2007 Jan 22, Alexei Alexandrov,
 2007 Feb 8)
 
-Patch for Win32 clipboard under Cygwin. (Frodak Baksik, Feb 15)
-    Sutcliffe says it works well.
-    Update 2007 May 22 for Vim 7.1
-    Update 2008 Dec 2008 for Vim 7.2.xx (Sharonov)
-
 Win32: Can't complete shell command names.  Why is setting xp_context in
 set_one_cmd_context() inside #ifndef BACKSLASH_IN_FILENAME?
 
@@ -708,19 +1307,6 @@
 
 Win32: patch for fullscreen mode. (Liushaolin, 2008 April 17)
 
-Win32: When 'shell' is cmd.exe this command fails:
-	echo system('"c:/path/echo.exe" "foo bar"')
-Should we set the default for 'shellxquote' to a double quote, when 'shell'
-contains "cmd" in the tail?  (Benjamin Fritz, 2008 Oct 13)
-Also set 'shellcmdflag' to include /s.
-
-Win32: When there is 4 Gbyte of memory mch_avail_mem() doesn't work properly.
-Unfinished patch by Jelle Geerts, 2008 Aug 24.
-Let mch_avail_mem() return Kbyte instead?
-
-Win32: With two monitors, gvim partly on both, and adding/removing a scrollbar
-Vim resizes and moves to one of the monitors. (Chris Monkiewicz, 2008 Oct)
-
 Win32: When 'shell' is bash shellescape() doesn't always do the right thing.
 Depends on 'shellslash', 'shellquote' and 'shellxquote', but shellescape()
 only takes 'shellslash' into account.
@@ -744,9 +1330,6 @@
 Feature request: Command to go to previous tab, like what CTRL-W p does for
 windows. (Adam George)
 
-When using input() in a loop and then ":echo" the display column isn't right.
-(Benjamin Fritz, 2008 Aug 28)  Patch by Ben Schmidt, 2008 Sep 2.
-
 F1 - F4 in an xterm produce a different escape sequence when used with a
 modifier key.  Need to catch three different sequences.  Use K_ZF1, like
 K_ZHOME? (Dickey, 2007 Dec 2)
@@ -772,9 +1355,6 @@
 
 ":helpgrep" should use the directory from 'helpfile'.
 
-Patch to dynamically load Python on Solaris. (Danek Duvall, 2009 Feb 16)
-Needs more work.
-
 The need_fileinfo flag is messy.  Instead make the message right away and put
 it in keep_msg?
 
@@ -802,9 +1382,6 @@
 input() completion should not insert a backslash to escape a space in a file
 name?
 
-getpos()/setpos() don't include curswant.  getpos() could return a fifth
-element.  setpos() could accept an optional fifth element.
-
 Ruby completion is insecure.  Can this be fixed?
 
 When 'backupskip' is set from $TEMP special characters need to be escaped.
@@ -819,9 +1396,6 @@
 2008 Nov 10)  call netbeans_file_closed() at the end of buf_freeall(), or in
 all places where buf_freeall() is called?
 
-":python os.chdir('/tmp')" makes short buffer names invalid. (Xavier de Gaye)
-Check directory and call shorten_fnames()?
-
 aucmd_prepbuf() should also use a window in another tab page.
 
 When unloading a buffer in a BufHidden autocommand the hidden flag is reset?
@@ -830,12 +1404,6 @@
 Substituting an area with a line break with almost the same area does change
 the Visual area.  Can this be fixed? (James Vega, 2006 Sept 15)
 
-Windows installer could add a "open in new tab of existing Vim" menu entry.
-Gvimext: patch to add "Edit with single Vim &tabbed" menu entry.
-Just have two choices, always using one Vim and selecting between using an
-argument list or opening each file in a separate tab.
-(Erik Falor, 2008 May 21, 2008 Jun 26)
-
 GUI: When combining fg en bg make sure they are not equal.
 
 Spell checking: Add a way to specify punctuation characters.  Add the
@@ -863,9 +1431,6 @@
 
 Mac: Using gvim: netrw window disappears. (Nick Lo, 2006 Jun 21)
 
-Mac: OS/X 10.4 with Python 2.5 installed: configure finds an extra argument
-that breaks the build. (Brian Victor, 2008 Sep 1)
-
 Add an option to specify the character to use when a double-width character is
 moved to the next line.  Default '>', set to a space to blank it out.  Check
 that char is single width when it's set (compare with 'listchars').
@@ -916,6 +1481,12 @@
 tree stops unexpectedly when using ":cd " and entering a directory that
 doesn't contain other directories.
 
+Setting 'background' resets the Normal background color:
+   highlight Normal ctermbg=DarkGray
+   set background=dark
+This is undesired, 'background' is supposed to tell Vim what the background
+color is, not reset it.
+
 Linux distributions:
 - Suggest compiling xterm with --enable-tcap-query, so that nr of colors is
   known to Vim.  88 colors instead of 16 works better.  See ":help
@@ -984,6 +1555,9 @@
 Cursor line at bottom of window instead of halfway after saving view and
 restoring.  Only with 'nowrap'. (Robert Webb, 2008 Aug 25)
 
+Netrw has trouble executing autocommands only for a directory.  Add <isdir>
+and <notisdir> to autocommand patterns?  Also <isfile>?
+
 Add command modifier that skips wildcard expansion, so that you don't need to
 put backslashes before special chars, only for white space.
 
@@ -993,17 +1567,14 @@
 In mswin.vim: Instead of mapping <C-V> for Insert mode in a complicated way,
 can it be done like ":imap <C-V> <MiddleMouse>" without negative side effects?
 
-Win32: When the GUI tab pages line is displayed Vim jumps from the secondary
-to the primary monitor. (Afton Lewis, 2007 Mar 9)  Old resizing problem?
-
 GTK: when the Tab pages bar appears or disappears while the window is
 maximized the window is no longer maximized.  Patch that has some idea but
 doesn't work from Geoffrey Antos, 2008 May 5.
 Also: the window may no longer fit on the screen, thus the command line is not
 visible.
 
-GTK: when setting 'columns' in a startup script and doing ":vertical diffsplit"
-the window isn't redrawn properly, see two vertical bars.
+When right after "vim file", "M" then CTRL-W v the windows are scrolled
+differently and unexpectedly.  Caused by patch 7.2.398?
 
 The magic clipboard format "VimClipboard2" appears in several places.  Should
 be only one.
@@ -1033,6 +1604,9 @@
 name is something like "c:\path\foo.txt:bar", includes a colon.  (Alex
 Jakushev, 2008 Feb 1)
 
+printf() uses the field width in bytes. Can it be made character width,
+perhaps with a modifier?  What does Posix say?
+
 Small problem displaying diff filler line when opening windows with a script.
 (David Luyer, 2007 Mar 1 ~/Mail/oldmail/mool/in.15872 )
 
@@ -1066,9 +1640,6 @@
 VERASE key is Delete.  Set VERASE to Backspace? (patch by Stephane Chazelas,
 2007 Oct 16)
 
-When entering a C /* comment, after typing <Enter> for 70 times the indent
-disappears. (Vincent Beffara, 2008 Jul 3)
-
 TermResponse autocommand isn't always triggered when using vimdiff. (Aron
 Griffis, 2007 Sep 19)
 
@@ -1101,6 +1672,12 @@
 2010 Jun 30)
 
 
+At next release:
+-   Build a huge version by default.
+-   Improve plugin handling: Automatic updates, handle dependencies?
+    E.g. Vundle: https://github.com/gmarik/vundle
+
+
 More patches:
 -   Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
     Needs a few tests.
@@ -1138,7 +1715,6 @@
     more friendly for the Vim distribution.
     New version received 2008 Jan 6.
     No maintenance in two years...
--   Patch to access screen under Python. (Marko Mahni, 2010 Jul 18)
 -   Patch to open dropped files in new tabs. (Michael Trim, 2010 Aug 3)
 
 Awaiting updated patches:
@@ -1161,9 +1737,6 @@
 7   Completion of network shares, patch by Yasuhiro Matsumoto.
     Update 2004 Sep 6.
     How does this work?  Missing comments.
--   Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav
-    Smilauer, 2004 Sep 13, fix Oct 31, update 2007 May 30)
-    Version for latest MacVim: Tobia Conforto, 2009 Nov 23
 8   Add a few more command names to the menus.  Patch from Jiri Brezina
     (28 feb 2002).  Will mess the translations...
 7   ATTENTION dialog choices are more logical when "Delete it' appears
@@ -1319,9 +1892,6 @@
     the wide functions.
 8   On Windows 98 the unicows library is needed to support functions with UCS2
     file names.  Can we load unicows.dll dynamically?
-8   When the primary monitor is below or right of the secondary monitor and
-    Vim is on the secondary monitor it will often move to the primary monitor.
-    Window position coordinates can be negative. (James Harvey)
 8   The -P argument doesn't work very well with many MDI applications.
     The last argument of CreateWindowEx() should be used, see MSDN docs.
     Tutorial: http://win32assembly.online.fr/tut32.html
@@ -1385,8 +1955,6 @@
     scroll?
 7   Scrollbar width doesn't change when selecting other windows appearance.
     Also background color of Toolbar and rectangle below vert. scrollbar.
-7   "!start /min cmd" should run in a minimized window, instead of using
-    "/min" as the command name. (Rogall)
 6   Drawing text transparently doesn't seem to work (when drawing part cursor).
 8   CTRL key doesn't always work in combination with ALT key.  It does work
     for function keys, not for alphabetic characters.  Perhaps this is because
@@ -1433,6 +2001,8 @@
 
 
 Athena GUI:
+9   The first event for any button in the menu or toolbar appears to get lost.
+    The second click on a menu does work.
 9   When dragging the scrollbar thumb very fast, focus is only obtained in
     the scrollbar itself.  And the thumb is no longer updated when moving
     through files.
@@ -1452,7 +2022,7 @@
 
 
 Motif GUI:
--   gui_mch_browsedir() is missing.
+-   gui_mch_browsedir() is missing, browsedir() doesn't work nicely.
 7   Use XmStringCreateLocalized() instead of XmStringCreateSimple()?
     David Harrison says it's OK (it exists in Motif 1.2).
 8   Lesstif: When deleting a menu that's torn off, the torn off menu becomes
@@ -1483,7 +2053,7 @@
 8   When translating menus ignore the part after the Tab, the shortcut.  So
     that the same menu item with a different shortcut (e.g., for the Mac) are
     still translated.
-8   Add menu separators for Amiga, RISCOS.
+8   Add menu separators for Amiga.
 8   Add way to specify the file filter for the browse dialog.  At least for
     browse().
 8   Add dialog for search/replace to other GUIs?  Tk has something for this,
@@ -1662,33 +2232,17 @@
 
 Macintosh:
 -   GUI: gui_mch_browsedir() is missing.
-7   Patch to add 'transparency' option.  Disadvantage: it's slow. (Eckehard
-    Berns, 2004 May 9) http://ecki.to/vim/TransBack-2004-05-09.diff
-    Needs more work.  Add when someone really wants it.
 7   Loading the Perl library only works on OS/X 10.2 or 10.3, never on both.
     Load the Perl library dynamically see Python sources file dynload_mac
     (Jack)
     dynamic linking: http://developer.apple.com/technotes/tn2002/tn2064.html
-8   Inputting Unicode characters does not work in the terminal.  They appear
-    to arrive as upper and lower bytes. (David Brown, 2004 April 17)
-8   Typing Unicode characters doesn't work at all in the GUI.
 8   inputdialog() doesn't resize when giving more text lines. (David Fishburn,
     2006 Sept 28)
-9   Problems in Carbon version for OS X: (Benji Fisher)
-    - keyboard shortcuts in the menus get lost.
-8   The Vim/About menu doesn't work.
-8   ":gui" doesn't fork.  Enabling the code in gui.c to fork causes a SEGV.
 8   Define vim_mkdir() for Macintosh.
 8   Define mch_writable() for Macintosh.
 9   When DiskLock is running, using a swap file causes a crash.  Appears to be
     a problem with writing a file that starts with a dot. (Giacalone)
-9   On G3 Mac, OS version 8, control strip causes characters messed up when
-    scrolling (CTRL-L cleans it up). (Benji Fisher)
-9   On G3 Mac, OS version 8, variable-speed scrolling doesn't work, after two
-    seconds of scrolling the screen freezes. (Benji Fisher)
 9   In mac_expandpath() check that handling of backslashes is done properly.
-8   Standard Mac shortcuts are missing.  (Amerige)
-8   Handling of non-fixed width fonts is wrong. (Amerige)
 
 
 "Small" problems:
@@ -1712,8 +2266,6 @@
     the :catch commands are always executed, also when the file is edited
     normally.  Should reset did_emsg and undo side effects.  Also make sure
     the ATTENTION message shows up.  Servatius Brandt works on this.
-8   ":g//" gives "Pattern not found error" with E486.  Should not use the
-    error number, it's not a regular error message.
 7   Vimtutor leaves escape sequence in terminal. This is the xterm response to
     requesting the version number.  (Yasuhiro Matsumoto)
 8   When redirecting and using ":silent" the current column for displaying and
@@ -1741,11 +2293,8 @@
 8   When doing Insert mode completion a mapping cannot recursively call
     edit(), because the completion information is global.  Put everything in
     an allocated structure?
-6   Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
 8   Command line completion: buffers "foo.txt" and "../b/foo.txt", completing
     ":buf foo<Tab>" doesn't find the second one. (George V. Reilly)
-7   Output for ":scriptnames" and ":breaklist" should shorten the file names:
-    use "~/" when possible.
 7   mb_off2cells() doesn't work correctly on the tail byte of a double-byte
     character. (Yasuhiro Matsumoto)  It should return 1 when used on a tail
     byte, like for utf-8.  Store second byte of double-byte in ScreenLines2[]
@@ -1772,13 +2321,6 @@
     works.
 8   A very long message in confirm() can't be quit.  Make this possible with
     CTRL-C.
-7   clip_x11_own_selection() uses CurrentTime, that is not allowed.  VNC X
-    server has a problem with this.  (Mark Waggoner) Remembering the timestamp
-    of events isn't always possible.  We don't get them in an xterm.  GTK
-    doesn't obtain the selection again when the timestamp differs, thus it
-    won't work for GTK anyway.
-8   When the clipboard isn't supported: ":yank*" gives a confusing error
-    message.  Specifically mention that the register name is invalid.
 8   "gf" always excludes trailing punctuation characters.  file_name_in_line()
     is currently fixed to use ".,:;!".  Add an option to make this
     configurable?
@@ -1792,8 +2334,6 @@
     is a multi-byte character.
 8   When appending to a file and 'patchmode' isn't empty, a backup file is
     always written, even when the original file already exists.
-7   When using "daw" on the last word in a file and this is a single letter,
-    nothing is deleted.  Should delete the letter and preceding white space.
 9   When getting focus while writing a large file, could warn for this file
     being changed outside of Vim.  Avoid checking this while the file is being
     written.
@@ -2043,6 +2583,9 @@
 -   Win32, MS-Windows XP: $HOME uses the wrong drive when the user profiles
     are not on the boot disk.  This is caused by a wrong value of $HOMEDRIVE.
     This is a bug in XP, see MSKB article 818134.
+-   Win32, MS-Windows: expanding plugin/**/*.vim also picks up
+    dir/ctags.vim,v.  This is because the short file name is something like
+    "ctags~1.vim" and that matches the pattern.
 -   SunOS 5.5.1 with Motif: The file open dialog does not have a horizontal
     scroll bar for the "files" selection.  This is a problem in the Motif
     libraries, get a patch from Sun.
@@ -2168,8 +2711,6 @@
 
 
 User Friendlier:
-8   Windows install with NSIS: make it possible to do a silent install, see
-    http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
 8   Windows install with install.exe: Use .exe instead of .bat files for
     links, so that command line arguments are passed on unmodified? (Walter
     Briscoe)
@@ -2210,8 +2751,6 @@
     font, etc.)
 8   Make GUI menu in tab pages line configurable.  Like the popup menu.
 8   balloons for the tab page labels that are shortened to show the full path.
-8   :tabmove +N	 move tab page N pages forward
-8   :tabmove -N	 move tab page N pages backward
 7   :tabdup	 duplicate the tab with all its windows.
 7   Option to put tab line at the left or right?  Need an option to specify
     its width.  It's like a separate window with ":tabs" output.
@@ -2339,7 +2878,6 @@
 8   Add "z/" and "z?" for searching in not folded text only.
 9   Add search pattern item to only match in closed or open fold and/or fold
     with certain level.  Allows doing ":g/pat/cmd" to work on closed folds.
-7   Use "++--", "+++--" for different levels instead of "+---" "+----".
 8   When a closed fold is displayed open because of 'foldminlines', the
     behavior of commands is still like the fold is closed.  How to make the
     user aware of this?
@@ -2443,7 +2981,7 @@
     For Windows, the charset_pairs[] table could be used.  But how do we know
     if a font exists?
 -   Do keyboard conversion from 'termencoding' to 'encoding' with
-    convert_input() for Mac GUI and RiscOS GUI.
+    convert_input() for Mac GUI.
 -   Add mnemonics from RFC1345 longer than two characters.
     Support CTRL-K _{mnemonic}_
 7   In "-- INSERT (lang) --" show the name of the keymap used instead of
@@ -2514,12 +3052,13 @@
     this isn't reset.  Add a special keyword definition for the syntax rules?
     When this is done, use vim.vim syntax highlighting for help file examples,
     but without ":" in 'iskeyword' for syntax.
+    Also need a separate 'iskeyword' for the command line, e.g., in a help
+    window ":e /asdf/asdf/" CTRL-W works different.
 8   Add specific syntax item to match with parens/braces that don't have a
     "%" match.  :syntax nomatch cMatchError (,{,[,),},] [contained]
 8   Highlight the text between two matching parens (e.g., with a grey
     background) when on one of the parens or in between them.
     Option for the matchparen plugin?
-8   Add a command to jump to the next character highlighted with "Error".
 8   When using a cterm, and no ctermfg or ctermbg are defined, use start/stop
     sequences.	Add remark in docs that :if 'term' == "term-name" should be
     used.
@@ -2584,9 +3123,6 @@
     colors.  And add colors, so that Green+Red becomes Yellow.
     E.g. for this html:
 	<B> bold text <I> italic+bold text </B> italic text </I>
-7   Wild idea: Not only set highlighting, but also change what is displayed
-    (e.g., remove characters, so that "<B>bold</B>" can be shown as "bold"):
-	:syn region boldstuff start="<B>" display="" end="</B>" display=""
 7   CTRL-] checks the highlight group for finding out what the tag is.
 7   Add an explanation how a list of words can be used to highlight misspelled
     words.
@@ -2709,6 +3245,10 @@
 				Patch by Ilya Sher, 2004 Mar 4.
 				Return a list instead.
 	char2hex()		convert char string to hex string.
+	crypt()			encrypt string
+	decrypt()		decrypt string
+	base64enc()		base 64 encoding
+	base64dec()		base 64 decoding
 	attributes()		return file protection flags "drwxrwxrwx"
 	filecopy(from, to)	Copy a file
 	shorten(fname)		shorten a file name, like home_replace()
@@ -2760,8 +3300,6 @@
     "command" would use <> notation.
     Does scratch buffer have a number?  Or re-use same number?
 7   Add function to generate unique number (date in milliseconds).
-7   Automatically load a function from a file when it is called.  Need an
-    option for the search path. (Sekera)
 
 
 Robustness:
@@ -2813,7 +3351,7 @@
     http://www.theregister.co.uk/content/4/22908.html. (Andre Pang)
 7   Check how performance of loading the wordlist can be improved (adding a
     lot of abbreviations).
-7   DOS console: Add t_DL support, to make scrolling faster.
+7   MS-DOS console: Add t_DL support, to make scrolling faster.
 7   Compile Ex commands to byte codes.  Store byte codes in a vim script file
     at the end, after "compiled:.  Make it look like a single comment line
     for old Vim versions.  Insert first line "Vim script compiled <timestamp>.
@@ -2821,10 +3359,6 @@
     Add command to compile a vim script and add it to the file in-place.
     Split Ex command executing into a parsing and executing phase.
     Use compiled code for functions, while loops, etc.
-8   When editing a file with extremely long lines (e.g., an executable), the
-    "linerest" in readfile() is allocated twice to be able to copy what was
-    read so far.  Use realloc() instead?  Or split the line when allocating
-    memory fails and "linerest" is big (> 100000)?
 8   When defining autocommands (e.g., from $VIMRUNTIME/filetype.vim), need to
     compare each pattern with all existing patterns.  Use a hash code to avoid
     using strcmp() too often?
@@ -2946,7 +3480,7 @@
 
 
 Scrolling:
-8   Add "zm" command: scroll horizontally to put the cursor in the middle.
+8   Add "zy" command: scroll horizontally to put the cursor in the middle.
 6   Add option to set the overlap for CTRL-F and CTRL-B. (Garhi)
 -   extend 'scrollbind' option: 'scrollopt' words "search", "relative", etc..
     Also 'e'xecute some commands (search, vertical movements) in all bound
@@ -3007,12 +3541,6 @@
     make the filename or the whole option use |wildcards| globing, better
     would be to merge the 2 kinds of globing. originally (Erik Falor, 2008
     April 18), updated (Ian Kelling, 2008 July 4)
-8   Use a mechanism similar to omni completion to figure out the kind of tab
-    for CTRL-] and jump to the appropriate matching tag (if there are
-    several).
-    Alternative: be able to define a function that takes the tag name and uses
-    taglist() to find the right location.  With indication of using CTRL-] so
-    that the context can be taken into account. (Robert Webb)
 7   Can CTRL-] (jump to tag) include a following "." and "->" to restrict the
     number of possible matches? Check tags file for an item that has members.
     (Flemming Madsen)
@@ -3055,9 +3583,6 @@
 Win32 GUI:
 8   Make debug mode work while starting up (vim -D).  Open console window for
     the message and input?
-7   The Python interface only works with one version of Python, selected at
-    compile time.  Can this be made to work with version 2.1 and 2.2
-    dynamically?
 7   GvimExt: when there are several existing Vims, move the list to a submenu.
     (Mike McCollister)
 8   When using "Edit with Vim" for one file it changes directory, when several
@@ -3092,7 +3617,7 @@
 
 
 GUI:
-8   Make inputdialog() work for Photon, Amiga, RiscOS.
+8   Make inputdialog() work for Photon, Amiga.
 -   <C--> cannot be mapped.  Should be possible to recognize this as a
     normal "-" with the Ctrl modifier.
 7   Implement ":popup" for other systems than Windows.
@@ -3171,6 +3696,8 @@
 
 
 Autocommands:
+9   Rework the code from FEAT_OSFILETYPE for autocmd-osfiletypes to use
+    'filetype'.  Only for when the current buffer is known.
 -   Put autocommand event names in a hashtable for faster lookup?
 8   When the SwapExists event is triggered, provide information about the
     swap file, e.g., whether the process is running, file was modified, etc.
@@ -3182,8 +3709,6 @@
     CursorHold), go through the list once and cache the result for a specific
     buffer.  Invalidate the cache when adding/deleting autocommands or
     changing the buffer name.
-8   Add ScriptReadCmd event: used to load remote Vim scripts, e.g.
-    "vim -u http://mach/path/vimrc".
 7   Add TagJump event: do something after jumping to a tag.
 8   Add "TagJumpFile" autocommand: When jumping to another file for a tag.
     Can be used to open "main.c.gz" when "main.c" isn't found.
@@ -3205,9 +3730,9 @@
     handled (e.g., other font) (Ron Aaron)
 7   When trying to open a directory, trigger an OpenDirectory event.
 7   Add file type in front of file pattern: <d> for directory, <l> for link,
-    <x> for executable, etc.  <&xxx> for Risc OS.  With commas to separate
-    alternatives.  The autocommand is only executed when both the file type
-    AND the file pattern match. (Leonard)
+    <x> for executable, etc.  With commas to separate alternatives.  The
+    autocommand is only executed when both the file type AND the file pattern
+    match. (Leonard)
 5   Add option that specifies extensions which are to be discarded from the
     file name.  E.g. 'ausuffix', with ".gz,.orig".  Such that file.c.gz will
     trigger the "*.c" autocommands.  (Belabas)
@@ -3234,13 +3759,7 @@
     PreDirChanged/PostDirChanged
 		    - Before/after ":cd" has been used (for changing the
 		      window title)
-    BufReadAction   - replaces reading a file
-    BufWriteAction  - replaces writing a file
     ShutDown	    - when the system is about to shut down
-    InsertCharPre   - user typed character Insert mode, before inserting the
-		      char.  Pattern is matched with text before the cursor.
-		      Set v:char to the character, can be changed.
-		      (not triggered when 'paste' is set).
     InsertCharPost  - user typed a character in Insert mode, after inserting
 		      the char.
     BufModified	    - When a buffer becomes modified, or unmodified (for
@@ -3425,9 +3944,6 @@
 
 
 Command line history:
-9   Remember which command lines were actually typed and were not loaded from
-    viminfo.  When writing viminfo append only these lines, so that lines from
-    other Vim's are not overwritten.
 -   Add "KeyWasTyped" flag: It's reset before each command and set when a
     character from the keyboard is consumed. Value is used to decide to put a
     command line in history or not. Put line in history if it didn't
@@ -3451,6 +3967,7 @@
 7   Use CTRL-G <count> to repeat what follows.  Useful for inserting a
     character multiple times or repeating CTRL-Y.
 -   Make 'revins' work in Replace mode.
+9   Can't use multi-byte characters for 'matchpairs'.
 7   Use 'matchpairs' for 'showmatch': When inserting a character check if it
     appears in the rhs of 'matchpairs'.
 -   In Insert mode (and command line editing?): Allow undo of the last typed
@@ -3470,12 +3987,10 @@
 
 
 'cindent', 'smartindent':
-9   ") :" confuses continuation line: (Colin Bennett, 2007 Dec 14)
-        cout << "a"
-                << ") :"
-                << "y";
-9   "} else" causes following lines to be indented too much. (Rouben
-    Rostamian, 2008 Aug 30)
+9   Wrapping a variable initialization should have extra indent:
+	char * veryLongName =
+		"very long string"
+    Also check if "cino=+10" is used correctly.
 8   Lisp indenting: "\\" confuses the indenter. (Dorai Sitaram, 2006 May 17)
 8   Why are continuation lines outside of a {} block not indented?  E.g.:
 	long_type foo =
@@ -3527,7 +4042,6 @@
 -   Add option to 'cindent' to set indent for comments outside of {}?
 -   Make a command to line up a comment after a code line with a previous
     comment after a code line.	Can 'cindent' do this automatically?
-7   Add 'j' flag to 'formatoptions': Remove comment leader when joining lines.
 -   When 'cindent'ing a '}', showmatch is done before fixing the indent.  It
     looks better when the indent is fixed before the showmatch. (Webb)
 -   Add option to make indenting work in comments too (for commented-out
@@ -3618,7 +4132,7 @@
 8   In blockwise mode, typed characters are inserted in front of the block,
     backspace deletes a column before the block. (Steve Hall)
 7   Alt-leftmouse starts block mode selection in MS Word.
-    See http://www.vim.org/tips/tip.php?tip_id=743
+    See http://vim.wikia.com/wiki/Use_Alt-Mouse_to_select_blockwise.
 7   Add Cmdline-select mode.  Like Select mode, but used on the command line.
     - Change gui_send_mouse_event() to pass on mouse events when 'mouse'
       contains 'C' or 'A'.
@@ -3686,7 +4200,7 @@
 -   Add "." command for visual mode: redo last visual command (e.g. ":fmt").
 7   Repeating "d:{cmd}" with "." doesn't work. (Benji Fisher)  Somehow remember
     the command line so that it can be repeated?
--   Add "gn": repeat last movement command.  Including count.
+-   Add command to repeat last movement.  Including count.
 -   Add "." command after operator: repeat last command of same operator.  E.g.
     "c." will repeat last change, also when "x" used since then (Webb).
     "y." will repeat last yank.
@@ -3712,21 +4226,14 @@
 8   Add a flag to ":abbrev" to eat the character that triggers the
     abbreviation.  Thus "abb ab xxx" and typing "ab<Space>" inserts "xxx" and
     not the <Space>.
-8   Allow mapping of CTRL-@ (anywhere in the LHS).
 8   Give a warning when using CTRL-C in the lhs of a mapping.  It will never
     (?) work.
 8   Add a way to save a current mapping and restore it later.  Use a function
     that returns the mapping command to restore it: mapcmd()?  mapcheck() is
     not fool proof.  How to handle ambiguous mappings?
 7   Add <0x8f> (hex), <033> (octal) and <123> (decimal) to <> notation?
-7   Allow mapping "Q" and "Q}" at the same time.  Need to put a flag with "Q",
-    that it needs an extra character before it can match.  See Vile 'maplonger'
-    option.
 7   When someone tries to unmap with a trailing space, and it fails, try
     unmapping without the trailing space.  Helps for ":unmap xx | unmap yy".
-7   Make it possible to map 'wildchar', but only when it's a special character
-    (like CTRL-E).  Currently it's only recognized when typed.  Useful for
-    mapping a key to do something and then completion.
 6   Context-sensitive abbreviations: Specify syntax group(s) in which the
     abbreviations are to be used.
 -   Add mappings that take arguments.  Could work like the ":s" command.  For
@@ -3738,12 +4245,9 @@
     :map q<Char>	    :s/<Char>/\u\0/g
     Or implicit:
     :map q			<Register>d<Number>$
--   Make it possible to include a <Nul> in the lhs and rhs of a mapping.
 -   Add command to repeat a whole mapping ("." only repeats the last change in
     a mapping).  Also: Repeat a whole insert command, including any mappings
     that it included.  Sort-of automatic recording?
--   Add an option to ":map" that makes it display the special keys in
-    <> notation (e.g. <CR> instead of ^M).  Or just always do this?
 -   Include an option (or flag to 'cpoptions') that makes errors in mappings
     not flush the rest of the mapping (like nvi does).
 -   Use context sensitiveness of completion to switch abbreviations and
@@ -3784,6 +4288,7 @@
 
 
 Searching:
+9   Should have an option for :vimgrep to find lines without a match.
 8   Add "g/" and "gb" to search for a pattern in the Visually selected text?
     "g?" is already used for rot13.
     The vis.vim script has a ":S" command that does something like this.
@@ -3791,6 +4296,8 @@
     Use "&/" for searching the text in the Visual area?
 9   Add "v" offset: "/pat/v": search for pattern and start Visual mode on the
     matching text.
+8   Add a modifier to interpret a space like "\_s\+" to make it much easier to
+    search for a phrase.
 8   Add a mechanism for recursiveness: "\@(([^()]*\@g[^()]*)\)".  \@g stands
     for "go recursive here" and \@( \) marks the recursive part.
     Perl does it this way:
@@ -3913,6 +4420,9 @@
 
 
 Undo:
+9   ":gundo" command: global undo.  Undoes changes spread over multiple files
+    in the order they were made.  Also ":gredo".  Both with a count.  Useful
+    when tests fail after making changes and you forgot in which files.
 9   After undo/redo, in the message show whether the buffer is modified or
     not.
 8   Use timestamps for undo, so that a version a certain time ago can be found
@@ -3987,6 +4497,9 @@
     should then mean the number of the last buffer.  E.g.: "4,$bdel".
 7   Add an option to mostly use slashes in file names.  Separately for
     internal use and for when executing an external program?
+8   Some file systems are case-sensitive, some are not.  Besides
+    'wildignorecase' there might be more parts inside
+    CASE_INSENSITIVE_FILENAME that are useful on Unix.
 
 
 Swap (.swp) files:
@@ -4085,9 +4598,6 @@
 Options:
 7   ":with option=value | command": temporarily set an option value and
     restore it after the command has executed.
-7   Setting an option always sets "w_set_curswant", while this is only
-    required for a few options.  Only do it for those options to avoid the
-    side effect.
 8   Make "old" number options that really give a number of effects into string
     options that are a comma separated list.  The old number values should
     also be supported.
@@ -4097,6 +4607,7 @@
 7   There is 'titleold', why is there no 'iconold'? (Chazelas)
 7   Make 'scrolloff' a global-local option, so that it can be different in the
     quickfix window, for example. (Gary Holloway)
+    Also do 'sidescrolloff'.
 
 
 External commands:
@@ -4169,10 +4680,8 @@
 
 
 Digraphs:
-7   Make "ga" show the digraph for a character, if it exists.
-    Also the keymap?
--   Make it possible to enter "r<C-E>" and "r<C-Y>" (get character from line
-    below/above).
+7   Make "ga" show the keymap for a character, if it exists.
+    Also show the code of the character after conversion to 'filenecoding'.
 -   Use digraph table to tell Vim about the collating sequence of special
     characters?
 8   Add command to remove one or more (all) digraphs. (Brown)
@@ -4190,8 +4699,6 @@
 8   'backupskip' doesn't write a backup file at all, a bit dangerous for some
     applications.  Add 'backupelsewhere' to write a backup file in another
     directory?  Or add a flag to 'backupdir'?
-7   The 'directory' option supports changing path separators to "%" to make
-    file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
 6   Add an option to write a new, numbered, backup file each time.  Like
     'patchmode', e.g., 'backupmode'.
 6   Make it possible to write 'patchmode' files to a different directory.
@@ -4290,8 +4797,6 @@
 
 
 Various improvements:
-8   ":sign unplace * file={filename}" should work.  Also: ":sign unplace *
-    buffer={bufnr}".  So one can remove all signs for one file/buffer.
 7   Add plugins for formatting?  Should be able to make a choice depending on
     the language of a file (English/Korean/Japanese/etc.).
     Setting the 'langformat' option to "chinese" would load the
@@ -4316,7 +4821,6 @@
 7   Allow a window not to have a statusline.  Makes it possible to use a
     window as a buffer-tab selection.
 8   Allow non-active windows to have a different statusline. (Yakov Lerner)
-6   Python interface: add vim.message() function. (Michal Vitecek, 2002 Nov 5)
 7   Support using ":vert" with User commands.  Add expandable items <vert>.
     Do the same for ":browse" and ":confirm"?
     For ":silent" and ":debug" apply to the whole user command.
@@ -4385,6 +4889,8 @@
 3   Make "2d%" work like "d%d%" instead of "d2%"?
 7   "g CTRL-O" jumps back to last used buffer.	Skip CTRL-O jumps in the same
     buffer.  Make jumplist remember the last ten accessed buffers?
+7   Make it possible to set the size of the jumplist (also to a smaller number
+    than the default). (Nikolai Weibull)
 -   Add code to disable the CAPS key when going from Insert to Normal mode.
 -   Set date/protection/etc. of the patchfile the same as the original file.
 -   Use growarray for termcodes[] in term.c
@@ -4393,7 +4899,7 @@
     (like "v" makes the operator characterwise-exclusive).  "x" could be used.
 -   Make a set of operations on list of names: expand wildcards, replace home
     dir, append a string, delete a string, etc.
--   Remove mktemp() and use tmpname() only?  Ctags does this.
+-   Remove using mktemp() and use tmpname() only?  Ctags does this.
 -   When replacing environment variables, and there is one that is not set,
     turn it into an empty string?  Only when expanding options? (Hiebert)
 -   Option to set command to be executed instead of producing a beep (e.g. to
@@ -4478,7 +4984,6 @@
     expanded.  Is there a better way to do this?
 -   Add ":@!" command, to ":@" like what ":source!" is to ":source".
 8   Add ":@:!": repeat last command with forceit set.
--   Should be possible to write to a device, e.g. ":w! /dev/null".
 -   Add 't_normal': Used whenever t_me, t_se, t_ue or t_Zr is empty.
 -   ":cab map test ^V| je", ":cunab map" doesn't work.	This is vi compatible!
 -   CTRL-W CTRL-E and CTRL-W CTRL-Y should move the current window up or down
@@ -4495,6 +5000,7 @@
 -   Make it possible for the 'showbreak' to be displayed at the end of the
     line.  Use a comma to separate the part at the end and the start of the
     line?  Highlight the linebreak characters, add flag in 'highlight'.
+    Make 'showbreak' local to a window.
 -   Some string options should be expanded if they have wildcards, e.g.
     'dictionary' when it is "*.h".
 -   Use a specific type for number and boolean options, making it possible to
@@ -4545,8 +5051,6 @@
 -   Add a variant of CTRL-V that stops interpretation of more than one
     character.	For entering mappings on the command line where a key contains
     several special characters, e.g. a trailing newline.
--   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
-    the two into a regex for searching. (Ned Konz)
 -   Make '2' option in 'formatoptions' also work inside comments.
 -   Add 's' flag to 'formatoptions': Do not break when inside a string. (Dodt)
 -   When window size changed (with the mouse) and made too small, set it back
@@ -4556,9 +5060,6 @@
 -   ":split file1 file2" adds two more windows (Webb).
 -   Don't give message "Incomplete last line" when editing binary file.
 -   Add ":a", ":i" for preloading of named buffers.
--   Allow autowrite when doing ":e file" (with an option 'eaw').
--   Allow a "+command" argument before each file name in the Vim command line:
-    "vim +123 file1 +234 file2 +345 file3". ???
 -   When entering text, keep other windows on same buffer updated (when a line
     entered)?
 -   Check out how screen does output optimizing.  Apparently this is possible
@@ -4632,8 +5133,6 @@
     working in another window.  Put cmdline in a separate window?
 -   Add possibility to put output of Ex commands in a buffer or file, e.g. for
     ":set all".  ":r :set all"?
--   'edit' option: When off changing the buffer is not possible (Really
-    read-only mode).
 -   When the 'equalalways' option is set, creating a new window should not
     result in windows to become bigger.  Deleting a window should not result in
     a window to become smaller (Webb).
diff -Naur vim73.orig/runtime/doc/uganda.txt vim73/runtime/doc/uganda.txt
--- vim73.orig/runtime/doc/uganda.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/uganda.txt	2013-08-04 19:09:08.047284901 +0000
@@ -1,4 +1,4 @@
-*uganda.txt*    For Vim version 7.3.  Last change: 2010 Aug 07
+*uganda.txt*    For Vim version 7.3.  Last change: 2012 Dec 02
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -238,6 +238,7 @@
 Holland:	Transfer to the account of "Stichting ICCF Holland" in Lisse.
 		This will allow for tax deduction if you live in Holland.
 			Postbank, nr. 4548774
+			IBAN: NL95 INGB 0004 5487 74
 
 Germany:	It is possible to make donations that allow for a tax return.
 		Check the ICCF web site for the latest information:
@@ -266,7 +267,7 @@
 Others:		Transfer to one of these accounts if possible:
 		    Postbank, account 4548774
 				Swift code: INGB NL 2A
-				IBAN: NL47 PSTB 0004 5487 74
+				IBAN: NL95 INGB 0004 5487 74
 			under the name "stichting ICCF Holland", Lisse
 		    If that doesn't work:
 		    Rabobank Lisse, account 3765.05.117
diff -Naur vim73.orig/runtime/doc/undo.txt vim73/runtime/doc/undo.txt
--- vim73.orig/runtime/doc/undo.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/undo.txt	2013-08-04 19:09:08.047284901 +0000
@@ -1,4 +1,4 @@
-*undo.txt*      For Vim version 7.3.  Last change: 2010 Jul 20
+*undo.txt*      For Vim version 7.3.  Last change: 2012 Mar 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -35,8 +35,10 @@
 :red[o]			Redo one change which was undone.  {Vi: no redo}
 
 							*U*
-U			Undo all latest changes on one line.  {Vi: while not
-			moved off of it}
+U			Undo all latest changes on one line, the line where
+			the latest change was made. |U| itself also counts as
+			a change, and thus |U| undoes a previous |U|.
+			{Vi: while not moved off of the last modified line}
 
 The last changes are remembered.  You can use the undo and redo commands above
 to revert the text to how it was before each change.  You can also apply the
@@ -125,16 +127,26 @@
 
 							*:undol* *:undolist*
 :undol[ist]		List the leafs in the tree of changes.  Example:
-				number changes   time ~
-				4      10	 10:34:11
-				18     4	 11:01:46
+			   number changes  when               saved ~
+			       88      88  2010/01/04 14:25:53
+			      108     107  08/07 12:47:51
+			      136      46  13:33:01             7
+			      166     164  3 seconds ago
 
 			The "number" column is the change number.  This number
 			continuously increases and can be used to identify a
 			specific undo-able change, see |:undo|.
 			The "changes" column is the number of changes to this
 			leaf from the root of the tree.
-			The "time" column is the time this change was made.
+			The "when" column is the date and time when this
+			change was made.  The four possible formats are:
+			    N seconds ago
+			    HH:MM:SS             hour, minute, seconds
+			    MM/DD HH:MM:SS       idem, with month and day
+			    YYYY/MM/DD HH:MM:SS  idem, with year
+			The "saved" column specifies, if this change was
+			written to disk and which file write it was. This can
+			be used with the |:later| and |:earlier| commands.
 			For more details use the |undotree()| function.
 
 							*g-*
@@ -148,7 +160,7 @@
 :earlier {N}d		Go to older text state about {N} days before.
 
 :earlier {N}f		Go to older text state {N} file writes before.
-			When changes were made since the laste write
+			When changes were made since the last write
 			":earlier 1f" will revert the text to the state when
 			it was written.  Otherwise it will go to the write
 			before that.
@@ -236,7 +248,9 @@
 a simple scheme that maps filesystem paths directly to undo files. Vim will
 detect if an undo file is no longer synchronized with the file it was written
 for (with a hash of the file contents) and ignore it when the file was changed
-after the undo file was written, to prevent corruption.
+after the undo file was written, to prevent corruption.  An undo file is also
+ignored if its owner differs from the owner of the edited file.  Set 'verbose'
+to get a message about that when opening a file.
 
 Undo files are normally saved in the same directory as the file.  This can be
 changed with the 'undodir' option.
@@ -253,7 +267,12 @@
 		(the magic number at the start of the file is wrong), then
 		this fails, unless the ! was added.
 		If it exists and does look like an undo file it is
-		overwritten.
+		overwritten. If there is no undo-history, nothing will be 
+		written.
+		Implementation detail: Overwriting happens by first deleting
+		the existing file and then creating a new file with the same
+		name. So it is not possible to overwrite an existing undofile
+		in a write-protected directory.
 		{not in Vi}
 
 :rundo {file}	Read undo history from {file}.
@@ -324,8 +343,8 @@
 	A file exists with the name of the undo file to be written, but it
 	does not start with the right magic number.  You may want to delete
 	this file or rename it.
-"Skipping undo file write, noting to undo"
-	There is no undo information not be written, nothing has been changed
+"Skipping undo file write, nothing to undo"
+	There is no undo information to be written, nothing has been changed
 	or 'undolevels' is negative.
 *E829*	An error occurred while writing the undo file.  You may want to try
 	again.
diff -Naur vim73.orig/runtime/doc/usr_01.txt vim73/runtime/doc/usr_01.txt
--- vim73.orig/runtime/doc/usr_01.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/usr_01.txt	2013-08-04 19:09:08.050618224 +0000
@@ -1,4 +1,4 @@
-*usr_01.txt*	For Vim version 7.3.  Last change: 2008 May 07
+*usr_01.txt*	For Vim version 7.3.  Last change: 2010 Nov 03
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -40,13 +40,20 @@
 	Press  CTRL-]  to jump to a subject under the cursor.
 	Press  CTRL-O  to jump back (repeat to go further back).
 
-Many links are in vertical bars, like this: |bars|.  An option name, like
-'number', a command in double quotes like ":write" and any other word can also
-be used as a link.  Try it out: Move the cursor to  CTRL-]  and press CTRL-]
-on it.
+Many links are in vertical bars, like this: |bars|.  The bars themselves may
+be hidden or invisible, see below.  An option name, like 'number', a command
+in double quotes like ":write" and any other word can also be used as a link.
+Try it out: Move the cursor to  CTRL-]  and press CTRL-] on it.
 
 Other subjects can be found with the ":help" command, see |help.txt|.
 
+The bars and stars are usually hidden with the |conceal| feature.  They also
+use |hl-Ignore|, using the same color for the text as the background.  You can
+make them visible with: >
+	:set conceallevel=0
+	:hi link HelpBar Normal
+	:hi link HelpStar Normal
+
 ==============================================================================
 *01.2*	Vim installed
 
diff -Naur vim73.orig/runtime/doc/usr_05.txt vim73/runtime/doc/usr_05.txt
--- vim73.orig/runtime/doc/usr_05.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/usr_05.txt	2013-08-04 19:09:08.057284871 +0000
@@ -1,4 +1,4 @@
-*usr_05.txt*	For Vim version 7.3.  Last change: 2009 Jun 04
+*usr_05.txt*	For Vim version 7.3.  Last change: 2012 Nov 20
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -49,8 +49,7 @@
 
 The vimrc file can contain all the commands that you type after a colon.  The
 most simple ones are for setting options.  For example, if you want Vim to
-always start with the 'incsearch' option on, add this line you your vimrc
-file: >
+always start with the 'incsearch' option on, add this line your vimrc file: >
 
 	set incsearch
 
diff -Naur vim73.orig/runtime/doc/usr_08.txt vim73/runtime/doc/usr_08.txt
--- vim73.orig/runtime/doc/usr_08.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/usr_08.txt	2013-08-04 19:09:08.060618194 +0000
@@ -17,7 +17,7 @@
 |08.6|	Commands for all windows
 |08.7|	Viewing differences with vimdiff
 |08.8|	Various
-|08.9|  Tab pages
+|08.9|	Tab pages
 
      Next chapter: |usr_09.txt|  Using the GUI
  Previous chapter: |usr_07.txt|  Editing more than one file
diff -Naur vim73.orig/runtime/doc/usr_21.txt vim73/runtime/doc/usr_21.txt
--- vim73.orig/runtime/doc/usr_21.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/usr_21.txt	2013-08-04 19:09:08.073951488 +0000
@@ -1,4 +1,4 @@
-*usr_21.txt*	For Vim version 7.3.  Last change: 2008 Nov 09
+*usr_21.txt*	For Vim version 7.3.  Last change: 2012 Nov 02
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -282,7 +282,7 @@
 SESSION HERE, SESSION THERE
 
 The obvious way to use sessions is when working on different projects.
-Suppose you store you session files in the directory "~/.vim".  You are
+Suppose you store your session files in the directory "~/.vim".  You are
 currently working on the "secret" project and have to switch to the "boring"
 project: >
 
@@ -295,7 +295,7 @@
 next time you load the secret session you can continue where you were at this
 point.  And finally you load the new "boring" session.
 
-If you open help windows, split and close various window, and generally mess
+If you open help windows, split and close various windows, and generally mess
 up the window layout, you can go back to the last saved session: >
 
 	:source ~/.vim/boring.vim
@@ -423,10 +423,10 @@
 A VIEW WITH A NAME
 
 The second basic way to use views is by storing the view in a file with a name
-you chose.  This view can be loaded while editing another file.  Vim will then
-switch to editing the file specified in the view.  Thus you can use this to
-quickly switch to editing another file, with all its options set as you saved
-them.
+you choose.  This view can be loaded while editing another file.  Vim will
+then switch to editing the file specified in the view.  Thus you can use this
+to quickly switch to editing another file, with all its options set as you
+saved them.
    For example, to save the view of the current file: >
 
 	:mkview ~/.vim/main.vim
diff -Naur vim73.orig/runtime/doc/usr_22.txt vim73/runtime/doc/usr_22.txt
--- vim73.orig/runtime/doc/usr_22.txt	2010-08-15 12:23:22.000000000 +0000
+++ vim73/runtime/doc/usr_22.txt	2013-08-04 19:09:08.073951488 +0000
@@ -1,4 +1,4 @@
-*usr_22.txt*	For Vim version 7.3.  Last change: 2010 Feb 21
+*usr_22.txt*	For Vim version 7.3.  Last change: 2012 Nov 15
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -326,9 +326,9 @@
 
 The output could look like this:
 
-  1 #h	"help.txt"			line 62 ~
-  2 %a+	"usr_21.txt"			line 1 ~
-  3	"usr_toc.txt"			line 1 ~
+  1 #h   "help.txt"			line 62 ~
+  2 %a + "usr_21.txt"			line 1 ~
+  3      "usr_toc.txt"			line 1 ~
 
 The first column contains the buffer number.  You can use this to edit the
 buffer without having to type the name, see below.
diff -Naur vim73.orig/runtime/doc/usr_28.txt vim73/runtime/doc/usr_28.txt
--- vim73.orig/runtime/doc/usr_28.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/usr_28.txt	2013-08-04 19:09:08.083951457 +0000
@@ -18,7 +18,7 @@
 |28.7|	Folding by syntax
 |28.8|	Folding by expression
 |28.9|	Folding unchanged lines
-|28.10| Which fold method to use?
+|28.10|	Which fold method to use?
 
      Next chapter: |usr_29.txt|  Moving through programs
  Previous chapter: |usr_27.txt|  Search commands and patterns
diff -Naur vim73.orig/runtime/doc/usr_41.txt vim73/runtime/doc/usr_41.txt
--- vim73.orig/runtime/doc/usr_41.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/usr_41.txt	2013-08-04 19:09:08.097284751 +0000
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 7.3.  Last change: 2010 Jul 20
+*usr_41.txt*	For Vim version 7.3.  Last change: 2013 Feb 20
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -313,7 +313,7 @@
 	:echo 10 + 5 * 2
 <	20 ~
 
-Grouping is done with braces.  No surprises here.  Example: >
+Grouping is done with parentheses.  No surprises here.  Example: >
 
 	:echo (10 + 5) * 2
 <	30 ~
@@ -537,7 +537,7 @@
 list here: |functions|.
 
 A function is called with the ":call" command.  The parameters are passed in
-between braces, separated by commas.  Example: >
+between parentheses separated by commas.  Example: >
 
 	:call search("Date: ", "W")
 
@@ -597,7 +597,7 @@
 	strridx()		last index of a short string in a long string
 	strlen()		length of a string
 	substitute()		substitute a pattern match with a string
-	submatch()		get a specific match in a ":substitute"
+	submatch()		get a specific match in ":s" and substitute()
 	strpart()		get part of a string
 	expand()		expand special keywords
 	iconv()			convert text from one encoding to another
@@ -661,7 +661,20 @@
 	sqrt()			square root
 	sin()			sine
 	cos()			cosine
+	tan()			tangent
+	asin()			arc sine
+	acos()			arc cosine
 	atan()			arc tangent
+	atan2()			arc tangent
+	sinh()			hyperbolic sine
+	cosh()			hyperbolic cosine
+	tanh()			hyperbolic tangent
+
+Other computation:					*bitwise-function*
+	and()			bitwise AND
+	invert()		bitwise invert
+	or()			bitwise OR
+	xor()			bitwise XOR
 
 Variables:						*var-functions*
 	type()			type of a variable
@@ -793,6 +806,8 @@
 	synID()			get syntax ID at a specific position
 	synIDattr()		get a specific attribute of a syntax ID
 	synIDtrans()		get translated syntax ID
+	synstack()		get list of syntax IDs at a specific position
+	synconcealed()		get info about concealing
 	diff_hlID()		get highlight ID for diff mode at a position
 	matchadd()		define a pattern to highlight (a "match")
 	matcharg()		get info about |:match| arguments
@@ -848,12 +863,15 @@
 	winsaveview()		get view of current window
 	winrestview()		restore saved view of current window
 
-Various:					*various-functions*
-	mode()			get current editing mode
-	visualmode()		last visual mode used
+Mappings:				    *mapping-functions*
 	hasmapto()		check if a mapping exists
 	mapcheck()		check if a matching mapping exists
 	maparg()		get rhs of a mapping
+	wildmenumode()		check if the wildmode is active
+
+Various:					*various-functions*
+	mode()			get current editing mode
+	visualmode()		last visual mode used
 	exists()		check if a variable, function, etc. exists
 	has()			check if a feature is supported in Vim
 	changenr()		return number of most recent change
@@ -1015,7 +1033,7 @@
 
 	:function Show(start, ...)
 	:  echohl Title
-	:  echo "Show is " . a:start
+	:  echo "start is " . a:start
 	:  echohl None
 	:  let index = 1
 	:  while index <= a:0
@@ -1283,7 +1301,7 @@
 
 	split(a:line)
 
-The split() function takes a string, chops it into white separated words
+The split() function takes a string, chops it into whitespace separated words
 and returns a list with these words.  Thus in the example it returns: >
 
 	:echo split('three two five one')
@@ -1400,7 +1418,7 @@
 
 The ":read" command will fail if the file does not exist.  Instead of
 generating an error message, this code catches the error and gives the user a
-nice message instead.
+nice message.
 
 For the commands in between ":try" and ":endtry" errors are turned into
 exceptions.  An exception is a string.  In the case of an error the string
@@ -1477,7 +1495,7 @@
 
 	:set tags=my\ nice\ file
 
-The same example written as >
+The same example written as: >
 
 	:set tags=my nice file
 
@@ -1566,7 +1584,7 @@
 
 RESTORING THE VIEW
 
-Sometimes you want to make a change and go back to where cursor was.
+Sometimes you want to make a change and go back to where the cursor was.
 Restoring the relative position would also be nice, so that the same line
 appears at the top of the window.
    This example yanks the current line, puts it above the first line in the
@@ -1666,7 +1684,7 @@
 HEADER
 
 You will probably add new corrections to the plugin and soon have several
-versions laying around.  And when distributing this file, people will want to
+versions lying around.  And when distributing this file, people will want to
 know who wrote this wonderful plugin and where they can send remarks.
 Therefore, put a header at the top of your plugin: >
 
@@ -1695,6 +1713,7 @@
  12	set cpo&vim
  ..
  42	let &cpo = s:save_cpo
+ 43	unlet s:save_cpo
 
 We first store the old value of 'cpoptions' in the s:save_cpo variable.  At
 the end of the plugin this value is restored.
@@ -1941,6 +1960,7 @@
  40	endif
  41
  42	let &cpo = s:save_cpo
+ 43	unlet s:save_cpo
 
 Line 33 wasn't explained yet.  It applies the new correction to the word under
 the cursor.  The |:normal| command is used to use the new abbreviation.  Note
@@ -2095,7 +2115,7 @@
 When an option has a value that is a list of flags or items, consider using
 "+=" and "-=" to keep the existing value.  Be aware that the user may have
 changed an option value already.  First resetting to the default value and
-then changing it often a good idea.  Example: >
+then changing it is often a good idea.  Example: >
 
 	:setlocal formatoptions& formatoptions+=ro
 
diff -Naur vim73.orig/runtime/doc/usr_toc.txt vim73/runtime/doc/usr_toc.txt
--- vim73.orig/runtime/doc/usr_toc.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/usr_toc.txt	2013-08-04 19:09:08.107284721 +0000
@@ -248,7 +248,7 @@
 		|28.7|	Folding by syntax
 		|28.8|	Folding by expression
 		|28.9|	Folding unchanged lines
-		|28.10| Which fold method to use?
+		|28.10|	Which fold method to use?
 
 |usr_29.txt|  Moving through programs
 		|29.1|	Using tags
diff -Naur vim73.orig/runtime/doc/various.txt vim73/runtime/doc/various.txt
--- vim73.orig/runtime/doc/various.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/various.txt	2013-08-04 19:09:08.110618044 +0000
@@ -1,4 +1,4 @@
-*various.txt*   For Vim version 7.3.  Last change: 2010 Aug 10
+*various.txt*   For Vim version 7.3.  Last change: 2013 May 18
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -101,13 +101,14 @@
 :[range]P[rint] [count] [flags]
 			Just as ":print".  Was apparently added to Vi for
 			people that keep the shift key pressed too long...
+			Note: A user command can overrule this command.
 			See |ex-flags| for [flags].
 
 							*:l* *:list*
 :[range]l[ist] [count] [flags]
 			Same as :print, but display unprintable characters
 			with '^' and put $ after the line.  This can be
-			changed with the 'listchars' option.
+			further changed with the 'listchars' option.
 			See |ex-flags| for [flags].
 
 							*:nu* *:number*
@@ -132,14 +133,17 @@
 			specified with {range}, or around the current line
 			if there is no {range}.  If there is a {count}, that's
 			how many lines you'll see; if there is only one window
-			then the 'window' option is used, otherwise the
-			current window size is used.
+			then twice the value of the 'scroll' option is used,
+			otherwise the current window height minus 3 is used.
+
+			If there is a {count} the 'window' option is set to
+			its value.
 
 			:z can be used either alone or followed by any of
 			several punctuation marks.  These have the following
 			effect:
 
-			mark   first line    last line      new location   ~
+			mark   first line    last line      new cursor line ~
 			----   ----------    ---------      ------------
 			+      current line  1 scr forward  1 scr forward
 			-      1 scr back    current line   current line
@@ -167,30 +171,40 @@
 :norm[al][!] {commands}					*:norm* *:normal*
 			Execute Normal mode commands {commands}.  This makes
 			it possible to execute Normal mode commands typed on
-			the command-line.  {commands} is executed like it is
-			typed.  For undo all commands are undone together.
+			the command-line.  {commands} are executed like they
+			are typed.  For undo all commands are undone together.
 			Execution stops when an error is encountered.
+
 			If the [!] is given, mappings will not be used.
+			Without it, when this command is called from a
+			non-remappable mapping (|:noremap|), the argument can
+			be mapped anyway.
+
 			{commands} should be a complete command.  If
 			{commands} does not finish a command, the last one
 			will be aborted as if <Esc> or <C-C> was typed.
-			The display isn't updated while ":normal" is busy.
 			This implies that an insert command must be completed
 			(to start Insert mode, see |:startinsert|).  A ":"
 			command must be completed as well.  And you can't use
 			"Q" or "gQ" to start Ex mode.
+
+			The display is not updated while ":normal" is busy.
+
 			{commands} cannot start with a space.  Put a count of
 			1 (one) before it, "1 " is one space.
+
 			The 'insertmode' option is ignored for {commands}.
+
 			This command cannot be followed by another command,
 			since any '|' is considered part of the command.
+
 			This command can be used recursively, but the depth is
 			limited by 'maxmapdepth'.
-			When this command is called from a non-remappable
-			mapping |:noremap|, the argument can be mapped anyway.
+
 			An alternative is to use |:execute|, which uses an
 			expression as argument.  This allows the use of
 			printable characters to represent special characters.
+
 			Example: >
 				:exe "normal \<c-w>\<c-w>"
 <			{not in Vi, of course}
@@ -351,16 +365,16 @@
 B  *+mouse_netterm*	Unix only: netterm mouse handling |netterm-mouse|
 N  *+mouse_pterm*	QNX only: pterm mouse handling |qnx-terminal|
 N  *+mouse_sysmouse*	Unix only: *BSD console mouse handling |sysmouse|
+B  *+mouse_sgr*		Unix only: sgr mouse handling |sgr-mouse|
+B  *+mouse_urxvt*	Unix only: urxvt mouse handling |urxvt-mouse|
 N  *+mouse_xterm*	Unix only: xterm mouse handling |xterm-mouse|
-B  *+multi_byte*	16 and 32 bit characters |multibyte|
+N  *+multi_byte*	16 and 32 bit characters |multibyte|
    *+multi_byte_ime*	Win32 input method for multibyte chars |multibyte-ime|
 N  *+multi_lang*	non-English language support |multi-lang|
 m  *+mzscheme*		Mzscheme interface |mzscheme|
 m  *+mzscheme/dyn*	Mzscheme interface |mzscheme-dynamic| |/dyn|
 m  *+netbeans_intg*	|netbeans|
 m  *+ole*		Win32 GUI only: |ole-interface|
-   *+osfiletype*	Support for the 'osfiletype' option and filetype
-			checking in automatic commands.  |autocmd-osfiletypes|
 N  *+path_extra*	Up/downwards search in 'path' and 'tags'
 m  *+perl*		Perl interface |perl|
 m  *+perl/dyn*		Perl interface |perl-dynamic| |/dyn|
@@ -412,6 +426,7 @@
 m  *+writebackup*	|'writebackup'| is default on
 m  *+xim*		X input method |xim|
    *+xfontset*		X fontset support |xfontset|
+m  *+xpm_w32*		Win32 GUI only: pixmap support |w32-xpm-support|
    *+xsmp*		XSMP (X session management) support
    *+xsmp_interact*	interactive XSMP (X session management) support
 N  *+xterm_clipboard*	Unix only: xterm clipboard handling
@@ -603,6 +618,10 @@
 			"gs" stands for "goto sleep".
 			While sleeping the cursor is positioned in the text,
 			if at a visible position.  {not in Vi}
+			Also process the received netbeans messages. {only
+			available when compiled with the |+netbeans_intg|
+			feature}
+
 
 							*g_CTRL-A*
 g CTRL-A		Only when Vim was compiled with MEM_PROFILING defined
@@ -610,7 +629,7 @@
 			Only useful for debugging Vim.
 
 ==============================================================================
-3. Using Vim like less or more					*less*
+2. Using Vim like less or more					*less*
 
 If you use the less or more program to view a file, you don't get syntax
 highlighting.  Thus you would like to use Vim instead.  You can do this by
diff -Naur vim73.orig/runtime/doc/version5.txt vim73/runtime/doc/version5.txt
--- vim73.orig/runtime/doc/version5.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/version5.txt	2013-08-04 19:09:08.117284691 +0000
@@ -1,4 +1,4 @@
-*version5.txt*  For Vim version 7.3.  Last change: 2008 Dec 17
+*version5.txt*  For Vim version 7.3.  Last change: 2012 Aug 08
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -6,7 +6,7 @@
 Welcome to Vim Version 5.0!
 
 This document lists the differences between Vim 4.x and Vim 5.0.
-Although 5.0 is mentioned here, this is also for version 5.1, 5.2, etc..
+Although 5.0 is mentioned here, this is also for version 5.1, 5.2, etc.
 See |vi_diff.txt| for an overview of differences between Vi and Vim 5.0.
 See |version4.txt| for differences between Vim 3.0 and Vim 4.0.
 
@@ -3888,7 +3888,7 @@
 When expand() has a second argument which is non-zero, don't use 'suffixes'
 and 'wildignore', return all matches.
 
-'O' flag in 'cpoptions: When not included, Vim will not overwrite a file, if
+'O' flag in 'cpoptions' When not included, Vim will not overwrite a file, if
 it didn't exist when editing started but it does exist when the buffer is
 written to the file.  The file must have been created outside of Vim, possibly
 without the user knowing it.  When this is detected after a shell command,
@@ -4499,7 +4499,7 @@
 restore all windows when "winsize" was not in 'sessionoptions'. (Webb)
 
 Command line completion for ":buffer" depended on 'ignorecase' for Unix, but
-not for DOS et al..  Now don't use 'ignorecase', but let it depend on whether
+not for DOS et al.  Now don't use 'ignorecase', but let it depend on whether
 file names are case sensitive or not (like when expanding file names).
 
 Win32 GUI: (Negri)
diff -Naur vim73.orig/runtime/doc/version6.txt vim73/runtime/doc/version6.txt
--- vim73.orig/runtime/doc/version6.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/version6.txt	2013-08-04 19:09:08.130617984 +0000
@@ -2452,7 +2452,7 @@
 
 ":n *.c" ":cd .." ":n" didn't use the original directory of the file.  Vi only
 does it for the current file (looks like a bug).  Now remember the buffer used
-for the entry in the argument list and use it's name (adjusted when doing
+for the entry in the argument list and use its name (adjusted when doing
 ":cd"), unless it's deleted.
 
 When inserting a special key as its name ("<F8>" as four characters) after
@@ -3675,7 +3675,7 @@
 
 
 Patch 6.0.001
-Problem:    Loading the sh.vim syntax file causes error messages . (Corinna
+Problem:    Loading the sh.vim syntax file causes error messages. (Corinna
 	    Vinschen)
 Solution:   Add an "if". (Charles Campbell)
 Files:	    runtime/syntax/sh.vim
@@ -9091,7 +9091,7 @@
 Patch 6.1.402
 Problem:    When evaluating a function name with curly braces, an error
 	    is not handled consistently.
-Solution:   Accept the result of an curly braces expression when an
+Solution:   Accept the result of a curly braces expression when an
 	    error was encountered.  Skip evaluating an expression in curly
 	    braces when skipping.  (Servatius Brandt)
 Files:	    src/eval.c
diff -Naur vim73.orig/runtime/doc/version7.txt vim73/runtime/doc/version7.txt
--- vim73.orig/runtime/doc/version7.txt	2010-08-15 12:53:08.000000000 +0000
+++ vim73/runtime/doc/version7.txt	2013-08-04 19:09:08.143951277 +0000
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.3.  Last change: 2010 Aug 15
+*version7.txt*  For Vim version 7.3.  Last change: 2012 Aug 08
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -1673,7 +1673,7 @@
 size.  Use a default size of 10.
 
 This example in the documentation didn't work:
-    :e `=foo . ".c" `
+    :e `=foo . ".c"`
 Skip over the expression in `=expr` when looking for comments, |, % and #.
 
 When ":helpgrep" doesn't find anything there is no error message.
@@ -3587,7 +3587,7 @@
 
 Patch 7.0.085
 Problem:    When doing "make test" the viminfo file is modified.
-Solution:   Use another viminfo file after setting 'compatible.
+Solution:   Use another viminfo file after setting 'compatible'.
 Files:	    src/testdir/test56.in
 
 Patch 7.0.086
@@ -7314,8 +7314,6 @@
 
 Support syntax and filetype completion for user commands. (Christian Brabandt)
 
-Add completion for ":ownsyntax" and improve completion for ":filetype".
-
 Avoid use of the GTK main_loop() so that the GtkFileChooser can be used.
 (James Vega)
 
@@ -8180,7 +8178,7 @@
 Files:	    src/ex_getln.c
 
 Patch 7.2.130
-Problem:    Vim may haing until CTRL-C is typed when using CTRL-Z.
+Problem:    Vim may hang until CTRL-C is typed when using CTRL-Z.
 Solution:   Avoid using pause().  Also use "volatile" for variables used in
 	    signal functions. (Dominique Pelle)
 Files:	    src/auto/configure, src/configure.in, src/config.h.in,
@@ -9072,7 +9070,7 @@
 Problem:    A redraw in a custom statusline with %! may cause a crash.
 	    (Yukihiro Nakadaira)
 Solution:   Make a copy of 'statusline'.  Also fix typo in function name
-	    redraw_custum_statusline. (partly by Dominique Pelle)
+	    redraw_custom_statusline. (partly by Dominique Pelle)
 Files:	    src/screen.c
 
 Patch 7.2.281
diff -Naur vim73.orig/runtime/doc/vi_diff.txt vim73/runtime/doc/vi_diff.txt
--- vim73.orig/runtime/doc/vi_diff.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/vi_diff.txt	2013-08-04 19:09:08.147284600 +0000
@@ -1,4 +1,4 @@
-*vi_diff.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
+*vi_diff.txt*   For Vim version 7.3.  Last change: 2012 Aug 08
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -88,8 +88,9 @@
 			   characters
 Maximum lhs of a mapping   50 characters.
 Number of different highlighting types: over 30000
-Range of a Number variable:  -2147483648 to 2147483647 (more on 64 bit
-			   systems)
+Range of a Number variable:  -2147483648 to 2147483647 (might be more on 64
+			   bit systems)
+Maximum length of a line in a tags file: 512 bytes.
 
 Information for undo and text in registers is kept in memory, thus when making
 (big) changes the amount of (virtual) memory available limits the number of
@@ -191,7 +192,7 @@
 
 Spell checking.						|spell|
 	When the 'spell' option is set Vim will highlight spelling mistakes.
-	About 40 languages are currently supported, selected with the
+	About 50 languages are currently supported, selected with the
 	'spelllang' option.  In source code only comments and strings are
 	checked for spelling.
 
@@ -652,7 +653,7 @@
 option includes "eol".  You can backspace over the start of insert if the
 'backspace' option includes "start".
 
-When the 'paste' option is set, a few option are reset and mapping in insert
+When the 'paste' option is set, a few options are reset and mapping in insert
 mode and abbreviation are disabled.  This allows for pasting text in windowing
 systems without unexpected results.  When the 'paste' option is reset, the old
 option values are restored.
@@ -988,6 +989,8 @@
 - vi test 33 sometimes fails for unknown reasons
 - vi test 250 fails; behavior will be changed in a new revision
     http://www.opengroup.org/austin/mailarchives/ag-review/msg01710.html
+    (link no longer works, perhaps it's now:
+    https://www.opengroup.org/sophocles/show_mail.tpl?CALLER=show_archive.tpl&source=L&listname=austin-review-l&id=1711)
 - vi test 310 fails; exit code non-zero when any error occurred?
 - ex test 24 fails because test is wrong.  Changed between SUSv2 and SUSv3.
 - ex tests 47, 48, 49, 72, 73 fail because .exrc file isn't read in silent
diff -Naur vim73.orig/runtime/doc/vim-de.1 vim73/runtime/doc/vim-de.1
--- vim73.orig/runtime/doc/vim-de.1	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/doc/vim-de.1	2013-08-04 19:09:08.150617924 +0000
@@ -0,0 +1,478 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\" Translated by bw1 (2008) and Florian Rehnisch <fm-r@gmx.de> (2012)
+.\" Kudos to the folks on vim-dev and debian-l10n-german
+.TH VIM 1 "2006 Apr 11"  
+.SH BEZEICHNUNG
+vim \- Vi IMproved, ein Text\-Editor fr Programmierer
+.SH BERSICHT
+.br
+\fBvim\fP [Optionen] [Datei ...]
+.br
+\fBvim\fP [Optionen] \-
+.br
+\fBvim\fP [Optionen] \-t Tag
+.br
+\fBvim\fP [Optionen] \-q [Fehlerdatei]
+.PP
+.br
+\fBex\fP
+.br
+\fBview\fP
+.br
+\fBgvim\fP \fBgview\fP \fBevim\fP \fBeview\fP
+.br
+\fBrvim\fP \fBrview\fP \fBrgvim\fP \fBrgview\fP
+.SH BESCHREIBUNG
+\fBVim\fP ist ein Text\-Editor, der aufwrtskompatibel zu Vi ist. Er kann
+verwendet werden, um alle Arten von Klartext zu bearbeiten. Er ist besonders
+ntzlich, um Programme zu bearbeiten.
+.PP
+Vim hat einige Erweiterungen gegenber Vi, z.B.: Rckgngigmachen in
+mehreren Schritten, mehrere Fenster und Puffer, Syntax\-Hervorhebung,
+Bearbeiten der Befehlszeile, Dateinamenergnzung, eingebaute Hilfe, visuelle
+Auswahl, usw. ... Siehe :help vi_diff.txt fr eine bersicht der
+Unterschiede zwischen \fBVim\fP und Vi.
+.PP
+Im laufenden \fBVim\fP kann mit dem Befehl :help viel Hilfe durch das
+eingebaute Hilfesystem erlangt werden. Siehe den Abschnitt EINGEBAUTE HILFE
+weiter unten.
+.PP
+Meistens wird \fBVim\fP zum Editieren einer einzigen Datei mit dem folgende
+Befehl gestartet:
+.PP
+  vim Datei
+.PP
+Allgemeiner betrachtet, wird \fBVim\fP folgendermaen gestartet:
+.PP
+  vim [Optionen] [Dateiliste]
+.PP
+Bei einer fehlenden Dateiliste startet der Editor mit einem leeren
+Puffer. Andernfalls werden nach den folgenden vier Mglichkeiten eine oder
+mehrere Dateien bearbeitet:
+.TP  12
+Datei ...
+Eine Liste von Dateinamen. Die erste Datei wird in den Puffer geladen und
+zur aktuellen. Der Cursor wird auf der ersten Zeile des Puffers
+platziert. Zu den anderen Dateien kann mit dem Befehl :next gelangt
+werden. Falls einer der Dateinamen mit einem Bindestrich beginnt, stellen
+Sie der Dateiliste \-\- voran.
+.TP 
+\-
+Die zu bearbeitende Datei wird von der Standardeingabe gelesen. Befehle
+werden von der Standardfehlerausgabe gelesen, die ein Text\-Terminal sein
+sollte.
+.TP 
+\-t {Tag}
+Die zu editierende Datei und die anfngliche Cursor\-Position hngen von
+einem Tag ab, einer Art Sprungmarke. {Tag} wird in der Tag\-Datei
+nachgeschlagen, die zugehrige Datei wird zur aktuellen und der zugehrige
+Befehl wird ausgefhrt. Dies wird meistens fr Programme in der Sprache C
+benutzt, wobei {Tag} ein Funktionsname sein knnte. Die Wirkung dieses
+Befehls ist, dass die Datei, die die Funktion enthlt, als aktuelle im
+Editor geffnet und angezeigt wird und der Cursor auf dem Beginn der
+Funktion positioniert wird. Siehe :help tag\-commands.
+.TP 
+\-q [Fehlerdatei]
+Startet im QuickFix\-Modus. Die Datei [Fehlerdatei] wird gelesen und der
+erste Fehler wird angezeigt. Falls [Fehlerdatei] ausgelassen wird, wird der
+Dateiname aus der Option 'errorfile' verwendet (bei AmigaOS ist dies
+vorgabemig AztecC.Err, sowie "errors.err bei anderen). Weitere Fehler
+knnen mit dem :cn\-Befehl angesprungen werden. Siehe ":help quickfix.
+.PP
+\fBVim\fP reagiert unterschiedlich auf den Namen, der verwendet wird, um Vim zu
+starten (die ausfhrbare Datei kann dieselbe sein).
+.TP  10
+vim
+der normale Weg, alles ist standardmig
+.TP 
+ex
+Startet im Ex\-Modus. Mit dem Befehl :vi gelangt man in den normalen
+Modus. Funktioniert auch mit dem Argument \-e.
+.TP 
+view
+Startet im Nur\-Lesen\-Modus. Die Datei wird vor dem berschreiben
+geschtzt. Dasselbe wird mit dem Parameter \-R erreicht.
+.TP 
+gvim gview
+Die grafische Version: ffnet ein neues Fenster. Dasselbe wird mit dem
+Parameter \-g erreicht.
+.TP 
+evim eview
+Die grafische Version im einfachen Modus: ffnet ein neues Fenster. Dasselbe
+wird mit dem Parameter \-y erreicht.
+.TP 
+rvim rview rgvim rgview
+Wie die obigen, aber mit Beschrnkungen: Es ist nicht mglich, Shell\-Befehle
+aufzurufen oder mit Unterbrechung in eine Shell zurckzuspringen. Dasselbe
+wird mit dem Parameter \-Z erreicht.
+.SH OPTIONEN
+Die Optionen knnen in beliebiger Reihenfolge vor oder nach den Dateinamen
+angegeben werden. Optionen ohne Parameter knnen hinter einem einzigen
+Bindestrich gruppiert werden.
+.TP  12
++[Nummer]
+In der ersten Datei wird der Cursor auf die Zeile [Nummer] gesetzt. Falls
+[Nummer] nicht angegeben wird, wird der Cursor in die letzte Zeile der Datei
+gesetzt.
+.TP 
++/{Suchmuster}
+In der ersten Datei wird der Cursor auf das erste Auftreten von {Suchmuster}
+gesetzt. Siehe :help search\-pattern.
+.TP 
++{Befehl}
+.TP 
+\-c {Befehl}
+{Befehl} wird nach dem Lesen der ersten Datei ausgefhrt. Als {Befehl} wird
+ein Ex\-Befehl erwartet. Sind in {Befehl} Leerzeichen vorhanden, muss alles
+in Anfhrungszeichen gesetzt werden (hngt von der verwendeten Shell
+ab). Beispiel: vim "+set si" main.c
+.br
+Anmerkung: Sie knnen bis zu 10 +\- oder "\-c\-Befehle verwenden.
+.TP 
+\-S {Datei}
+{Datei} wird nach dem Lesen der ersten Datei ausgefhrt. Dies entspricht \-c
+"source {Datei}". {Datei} darf nicht mit einem Bindestrich (\-)
+anfangen. Wenn kein Dateiname angegeben wird, wird Session.vim verwendet
+(Funktioniert nur, wenn \-S als letzter Parameter steht).
+.TP 
+\-\-cmd {Befehl}
+Wie \-c, aber dieser Befehl wird vor allen VimRC\-Dateien ausgefhrt. Sie
+knnen unabhngig von den \-c\-Befehlen bis zu 10 dieser Befehle verwenden.
+.TP 
+\-A
+Falls \fBVim\fP mit Untersttzung fr das Schreiben von rechts nach links und
+arabischer Tastaturbelegung compiliert wurde (ARABIC), startet dieser
+Parameter den Modus frs Arabische (:set arabic). Anderenfalls beendet sich
+\fBVim\fP mit einer Fehlermeldung.
+.TP 
+b
+Binrer Modus: Es werden einige Variablen gesetzt, sodass es mglich ist,
+eine binre oder ausfhrbare Datei zu bearbeiten.
+.TP 
+\-C
+Kompatibel: Setzt die Option 'compatible'. Das macht \fBVim\fP im Verhalten
+sehr hnlich zu Vi, selbst wenn eine VimRC\-Datei existiert.
+.TP 
+\-d
+Startet im diff\-Modus. Es sollten zwei, drei oder vier Dateinamen als
+Parameter bergeben werden. \fBVim\fP ffnet sie alle und zeigt die
+Unterschiede an. Arbeitet wie vimdiff(1).
+.TP 
+\-d {Gert}
+ffnet das {Gert}, um es als Terminal zu nutzen. Nur fr AmigaOS. Beispiel:
+"\-d con:20/30/600/150".
+.TP 
+D
+Debug\-Modus: \fBVim\fP geht in den Debug\-Modus, wenn der erste Befehl in einem
+Skript ausgefhrt wird.
+.TP 
+\-e
+Startet \fBVim\fP im Ex\-Modus, als wrde als ausfhrbare Datei ex aufgerufen.
+.TP 
+\-E
+Startet \fBVim\fP im erweiterten Ex\-Modus, als wrde die ausfhrbare Datei als
+exim aufgerufen.
+.TP 
+\-f
+Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
+lst sich nicht von der Shell, in der er aufgerufen wurde. Bei AmigaOS wird
+kein neues Fenster geffnet. Dieser Parameter wird benutzt, damit das
+aufrufende Programm auf das Beenden des Bearbeitungssitzung wartet (z.B.:
+mail). Bei AmigaOS funktionieren die Befehle :sh und ":! nicht.
+.TP 
+\-\-nofork
+Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
+lst sich nicht von der Shell, in der er aufgerufen wurde.
+.TP 
+\-F
+Wenn \fBVim\fP mit FKMAP\-Untersttzung fr das Schreiben von rechts nach links
+und Farsi\-Tastatur\-Belegung kompiliert wurde, startet Vim im Farsi\-Modus,
+d.h. die Optionen 'fkmap' und 'rightleft' werden gesetzt. Andernfalls bricht
+\fBVim\fP mit einer Fehlermeldung ab.
+.TP 
+\-g
+Falls \fBVim\fP mit GUI\-Untersttzung kompiliert wurde, wird die GUI
+aktiviert. Falls keine GUI\-Untersttzung einkompiliert wurde, wird mit einer
+Fehlermeldung abgebrochen.
+.TP 
+\-h
+Gibt eine kleine Hilfe fr die Befehlszeilenparameter aus. Danach beendet
+sich \fBVim.\fP
+.TP 
+\-H
+Hebrisch\-Modus, falls \fBVim\fP mit RIGHTLEFT\-Untersttzung fr das Schreiben
+von rechts nach links und hebrischer Tastaturbelegung kompiliert wurde,
+werden die Optionen 'hkmap' und 'rightleft' gesetzt. Andernfalls beendet
+sich \fBVim\fP mit einer Fehlermeldung.
+.TP 
+\-i {VimInfo}
+Wenn eine VimInfo\-Datei verwendet wird: Verwendet statt ~/.viminfo die
+angegebene Datei. Es ist auch mglich die Verwendung einer VimInfo\-Datei
+durch Angabe des Dateinamen NONE zu verhindern,
+.TP 
+\-L
+dasselbe wie \-r
+.TP 
+\-l
+Lisp\-Modus. Aktiviert die Optionen 'lisp' und 'showmatch'.
+.TP 
+\-m
+Deaktiviert das Verndern von Dateien, indem die Option 'write' gelscht
+wird. Der Puffer kann verndert werden, nur das Schreiben einer Datei ist
+nicht mglich.
+.TP 
+\-M
+Keine Vernderungen erlaubt: Die Optionen 'modifiable' und 'write' werden
+gelscht, so dass nderungen nicht erlaubt sind und Dateien nicht
+geschrieben werden knnen. Man beachte, dass diese Optionen ('modifiable',
+\&'write') dennnoch nachtrglich zum Erlauben von nderungen gesetzt werden
+knnen.
+.TP 
+\-N
+Nicht\-kompatibler Modus: Lscht die Option 'compatible'. Dies veranlasst
+\fBVim\fP, sich ein wenig besser, aber weniger Vi\-kompatibel zu verhalten,
+selbst wenn es keine VimRC\-Datei gibt.
+.TP 
+\-n
+Verwendet keine Auslagerungsdatei: Eine Wiederherstellung nach einem Absturz
+ist nicht mglich. Auf einem langsamen Medium (Diskette) kann diese
+Einstellung ntzlich sein. Kann auch mit set uc=0 erreicht werden; kann
+mit set uc=200 aufgehoben werden.
+.TP 
+\-nb
+\fBVim\fP fungiert als Server fr NetBeans. Details siehe Dokumentation.
+.TP 
+\-o[N]
+ffnet [N] Fenster bereinander. Wenn keine Zahl angegeben wird, ffne ein
+Fenster pro Datei.
+.TP 
+\-O[N]
+ffnet [N] Fenster nebeneinander. Wenn keine Zahl angegeben wird, ffne ein
+Fenster pro Datei.
+.TP 
+\-p[N]
+ffnet [N] Reiterseiten. Wenn keine Zahl angegeben wird, ffne eine
+Reiterseite pro Datei.
+.TP 
+\-R
+Nur\-Lesen\-Modus: Die Option 'readonly' wird gesetzt. Der Puffer kann noch
+bearbeitet werden, aber es wird verhindert, eine Datei aus Versehen zu
+berschreiben. Wenn Sie wirklich eine Datei berschreiben wollen, fgen Sie
+dem Ex\-Befehl ein Ausrufezeichen hinzu (wie in :w!). Die Option "\-R
+bedingt die Option \-n (siehe oben). Die Option 'readonly' kann durch ":set
+noro gelscht werden. Siehe :help 'readonly'.
+.TP 
+\-r
+Listet die Auslagerungsdateien und gibt Informationen zu ihrer
+Verwendbarkeit zur Wiederherstellung.
+.TP 
+\-r {Datei}
+Wiederherstellungsmodus: Die Auslagerungsdatei wird zur Wiederherstellung
+verwendet und hat denselben Dateinamen wie die Text\-Datei + .swp. Siehe
+":help recovery.
+.TP 
+\-s
+Der stille Modus: Nur wenn die ausfhrbare Datei als ex aufgerufen wird
+oder vor \-s die Option "\-e gegeben wird.
+.TP 
+\-s {Eingabeskript}
+Die Datei {Eingabeskript} wird gelesen und ausgefhrt, als wrden Sie die
+Zeichen in ihr tippen. Dasselbe kann mit dem Befehl :source!
+{Eingabeskript} erreicht werden. Wird das Ende der Datei vor dem Beenden
+des Editors erreicht, werden weitere Zeichen von der Tastatur gelesen.
+.TP 
+\-T {Terminal}
+Setzt den Namen des benutzten Terminals. Nur erforderlich, wenn die
+Automatik nicht funktioniert. Sollte ein \fBVim\fP bekanntes Terminal sein:
+(builtin) oder in einer termcap\- oder terminfo\-Datei definiert.
+.TP 
+\-u {VimRC}
+Verwendet zur Initialisierung die Befehle in der Datei {VimRC}. Alle anderen
+Initialisierungen werden bersprungen. Benutzen Sie dies, um eine besondere
+Art von Dateien zu bearbeiten. Dies kann auch benutzt werden, um alle
+Initialisierungen zu berspringen, indem der Name NONE angegeben wird. Fr
+weitere Einzelheiten siehe :help initialisation innerhalb von Vim.
+.TP 
+\-U {GvimRC}
+Benutzt die Befehle in der Datei {GvimRC} fr die Initialisierung der
+grafischen Oberflche. Alle anderen Initialisierungen werden
+bersprungen. Dies kann ebenfalls benutzt werden, um alle
+GUI\-Initialisierungen zu berspringen, indem der Name NONE angegeben
+wird. Siehe :help gui\-init innerhalb von Vim fr weitere Einzelheiten.
+.TP 
+\-V[N]
+Ausfhrlich (verbose): Gibt Meldungen darber, welche Befehlsdateien
+eingelesen werden, und ber das Lesen und Schreiben einer VimInfo\-Datei. Die
+optionale Zahl N ist der Wert fr 'verbose'. Vorgabe ist 10.
+.TP 
+\-v
+Startet \fBVim\fP im Vi\-Modus, so als wrde die ausfhrbare Datei mit vi
+aufgerufen. Dies wirkt sich nur aus, wenn die ausfhrbare Datei als ex
+aufgerufen wird.
+.TP 
+\-w {Ausgabeskript}
+Alle Zeichen, die eingetippt werden, werden in der Datei {Ausgabeskript}
+aufgezeichnet, solange bis Sie \fBVim\fP beenden. Dies ist ntzlich, falls Sie
+eine Skript\-Datei zum Benutzen mit vim \-s oder ":source! erzeugen
+wollen. Falls die Datei {Ausgabeskript} vorhanden ist, werden die Zeichen
+angehngt.
+.TP 
+\-W {Ausgabeskript}
+Wie \-w, aber eine bereits vorhandene Datei wird berschrieben.
+.TP 
+\-x
+Benutzt beim Schreiben von Dateien eine Verschlsselung. Fragt nach dem
+Schlssel.
+.TP 
+\-X
+Fhrt keine Verbindung zum X\-Server durch. Dadurch verkrzt sich die
+Startzeit, aber der Fenstertitel und die Zwischenablage werden nicht
+verwendet.
+.TP 
+\-y
+Startet \fBVim\fP im einfachen Modus, als wrde die ausfhrbare Datei mit
+evim oder eview aufgerufen. \fBVim\fP verhlt sich dann wie ein Editor zum
+Klicken und Tippen.
+.TP 
+\-Z
+Eingeschrnkter Modus: Funktioniert, als wrde der Name der ausfhrbaren
+Datei mit r beginnen.
+.TP 
+\-\-
+Markiert das Ende der Optionen. Argumente, die folgen, werden als Dateinamen
+behandelt. Dies kann benutzt werden, um einen Dateinamen mit \- am Anfang
+zu verwenden.
+.TP 
+\-\-echo\-wid
+Nur GTK\-GUI: Schreibe die Fenster\-ID auf die Standardausgabe.
+.TP 
+\-\-help
+Gibt eine Hilfe\-Nachricht aus und beendet, wie \-h.
+.TP 
+\-\-literal
+Nimmt die Dateinamen so wie sie sind und vervollstndigt sie nicht nach
+Metazeichen (*,?). Dies wirkt sich nicht unter Unix aus, wo die Shell die
+Metazeichen expandiert.
+.TP 
+\-\-noplugin
+Lade keine Plugins. Impliziert durch \-u NONE.
+.TP 
+\-\-remote
+Verbindet mit einem Vim\-Server und lsst ihn die in den restlichen
+Argumenten angegeben Dateien editieren. Wenn kein Server gefunden wird,
+fhrt dies zu einer Warnmeldung und die Dateien werden im gegenwrtigen Vim
+zum Bearbeiten geffnet.
+.TP 
+\-\-remote\-expr {Ausdruck}
+Verbindet mit einem Vim\-Server, fhrt {Ausdruck} aus und zeigt das Ergebnis
+auf der Standardausgabe an.
+.TP 
+\-\-remote\-send {Zeichen}
+Verbindet mit einem Vim\-Server und sendet ihm {Zeichen}.
+.TP 
+\-\-remote\-silent
+Wie \-\-remote, aber ohne Warnung, wenn kein Server gefunden wird.
+.TP 
+\-\-remote\-wait
+Wie \-\-remote, aber Vim beendet sich nicht, bis die Dateien bearbeitet
+wurden.
+.TP 
+\-\-remote\-wait\-silent
+Wie \-\-remote\-wait, aber ohne Warnung, wenn kein Server gefunden wird.
+.TP 
+\-\-serverlist
+Listet die Namen aller gefundenen Vim\-Server auf.
+.TP 
+\-\-servername {Name}
+Benutzt {Name} als Server\-Namen. Wird fr den gegenwrtigen Vim benutzt,
+auer es wird mit dem Argument \-\-remote benutzt, dann ist es der Name des
+zu kontaktierenden Servers.
+.TP 
+\-\-socketid {id}
+Nur GTK\-GUI: Benutzt den GtkPlug\-Mechanismus, um GVim in einem anderen
+Fenster laufen zu lassen.
+.TP 
+\-\-version
+Versionsinformation anzeigen und beenden
+.SH "EINGEBAUTE HILFE"
+Tippen Sie in \fBVim\fP :help, um zu beginnen. Geben Sie ":help begriff ein,
+um Hilfe ber ein bestimmtes Thema zu bekommen. Zum Beispiel :help ZZ fr
+Hilfe ber den Befehl ZZ. Benutzen Sie <Tab> und CTRL\-D, um
+Begriffe zu vervollstndigen (:help cmdline\-completion). Tags sind
+vorhanden, um von einem Ort zum anderen zu springen (eine Art
+Hypertext\-Verknpfungen, siehe :help). Auf diese Weise knnen alle
+Dokumentations\-Dateien aufgerufen werden, zum Beispiel :help syntax.txt.
+.SH DATEIEN
+.TP  15
+/usr/local/lib/vim/doc/*.txt
+Dokumentations\-Dateien fr \fBVim\fP. Verwenden Sie :help doc\-file\-list, um
+die gesamte Liste zu bekommen.
+.TP 
+/usr/local/lib/vim/doc/tags
+Die Tag\-Datei, die verwendet wird, um Informationen in der Dokumentation
+zu finden.
+.TP 
+/usr/local/lib/vim/syntax/syntax.vim
+Die systemweite Einrichtung der Syntaxhervorhebung.
+.TP 
+/usr/local/lib/vim/syntax/*.vim
+Syntaxdateien fr die verschiedenen Sprachen.
+.TP 
+/usr/local/lib/vim/vimrc
+Systemweite Einstellungsdatei fr \fBVim\fP
+.TP 
+~/.vimrc
+Persnliche Einstellungsdatei fr \fBVim\fP
+.TP 
+/usr/local/lib/vim/gvimrc
+Systemweite Einstellungsdatei fr GVim
+.TP 
+~/.gvimrc
+Persnliche Einstellungsdatei fr GVim
+.TP 
+/usr/local/lib/vim/optwin.vim
+Das Script, das von dem Befehl :options verwendet wird, eine schne
+Mglichkeit, um Optionen zu betrachten und zu setzen.
+.TP 
+/usr/local/lib/vim/menu.vim
+Systemweite Einstellungsdatei fr das Men von GVim
+.TP 
+/usr/local/lib/vim/bugreport.vim
+Das Script zum Generieren eines Fehlerberichts. Siehe :help bugs.
+.TP 
+/usr/local/lib/vim/filetype.vim
+Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
+Dateinamens. Siehe :help 'filetype'.
+.TP 
+/usr/local/lib/vim/scripts.vim
+Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
+Inhaltes. Siehe :help 'filetype'.
+.TP 
+/usr/local/lib/vim/print/*.ps
+Diese Dateien werden zum Drucken von PostScript verwendet.
+.PP
+Fr die neuesten Informationen lesen Sie die Vim\-Homepage:
+.br
+<URL:http://www.vim.org/>
+.SH "SIEHE AUCH"
+vimtutor(1)
+.SH AUTOR
+\fBVim\fP wurde grtenteils von Bram Moolenaar erstellt, mit viel Hilfe von
+anderen Leuten. Siehe :help credits in \fBVim.\fP
+.br
+\fBVim\fP basiert auf Stevie, der von Tim Thompson, Tony Andrews und
+G.R. (Fred) Walter geschrieben wurde. Es ist jedoch kaum etwas vom
+ursprnglichen Code brig geblieben.
+.SH FEHLER
+Die sind mglich. Siehe :help todo fr eine Liste bekannter Probleme.
+.PP
+Beachten Sie, dass gewisse Dinge, die manche Leute als Fehler betrachten
+mgen, in Wirklichkeit durch zu getreue Nachbildung des Vi\-Verhaltens
+verursacht werden. Und falls Sie denken, dass andere Dinge Fehler sind,
+weil Vi es anders tut, sollten Sie einen genaueren Blick auf die Datei
+vi_diff.txt werfen (oder in Vim :help vi_diff.txt tippen). Sehen Sie sich
+auch die Optionen 'compatible' und 'cpoptions' an.
diff -Naur vim73.orig/runtime/doc/vim-de.UTF-8.1 vim73/runtime/doc/vim-de.UTF-8.1
--- vim73.orig/runtime/doc/vim-de.UTF-8.1	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/doc/vim-de.UTF-8.1	2013-08-04 19:09:08.150617924 +0000
@@ -0,0 +1,478 @@
+.\"*******************************************************************
+.\"
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.\" Translated by bw1 (2008) and Florian Rehnisch <fm-r@gmx.de> (2012)
+.\" Kudos to the folks on vim-dev and debian-l10n-german
+.TH VIM 1 "2006 Apr 11"  
+.SH BEZEICHNUNG
+vim \- Vi IMproved, ein Text\-Editor für Programmierer
+.SH ÜBERSICHT
+.br
+\fBvim\fP [Optionen] [Datei …]
+.br
+\fBvim\fP [Optionen] \-
+.br
+\fBvim\fP [Optionen] \-t Tag
+.br
+\fBvim\fP [Optionen] \-q [Fehlerdatei]
+.PP
+.br
+\fBex\fP
+.br
+\fBview\fP
+.br
+\fBgvim\fP \fBgview\fP \fBevim\fP \fBeview\fP
+.br
+\fBrvim\fP \fBrview\fP \fBrgvim\fP \fBrgview\fP
+.SH BESCHREIBUNG
+\fBVim\fP ist ein Text\-Editor, der aufwärtskompatibel zu Vi ist. Er kann
+verwendet werden, um alle Arten von Klartext zu bearbeiten. Er ist besonders
+nützlich, um Programme zu bearbeiten.
+.PP
+Vim hat einige Erweiterungen gegenüber Vi, z.B.: Rückgängigmachen in
+mehreren Schritten, mehrere Fenster und Puffer, Syntax\-Hervorhebung,
+Bearbeiten der Befehlszeile, Dateinamenergänzung, eingebaute Hilfe, visuelle
+Auswahl, usw. … Siehe »:help vi_diff.txt« für eine Übersicht der
+Unterschiede zwischen \fBVim\fP und Vi.
+.PP
+Im laufenden \fBVim\fP kann mit dem Befehl »:help« viel Hilfe durch das
+eingebaute Hilfesystem erlangt werden. Siehe den Abschnitt EINGEBAUTE HILFE
+weiter unten.
+.PP
+Meistens wird \fBVim\fP zum Editieren einer einzigen Datei mit dem folgende
+Befehl gestartet:
+.PP
+  vim Datei
+.PP
+Allgemeiner betrachtet, wird \fBVim\fP folgendermaßen gestartet:
+.PP
+  vim [Optionen] [Dateiliste]
+.PP
+Bei einer fehlenden Dateiliste startet der Editor mit einem leeren
+Puffer. Andernfalls werden nach den folgenden vier Möglichkeiten eine oder
+mehrere Dateien bearbeitet:
+.TP  12
+Datei …
+Eine Liste von Dateinamen. Die erste Datei wird in den Puffer geladen und
+zur aktuellen. Der Cursor wird auf der ersten Zeile des Puffers
+platziert. Zu den anderen Dateien kann mit dem Befehl »:next« gelangt
+werden. Falls einer der Dateinamen mit einem Bindestrich beginnt, stellen
+Sie der Dateiliste »\-\-« voran.
+.TP 
+\-
+Die zu bearbeitende Datei wird von der Standardeingabe gelesen. Befehle
+werden von der Standardfehlerausgabe gelesen, die ein Text\-Terminal sein
+sollte.
+.TP 
+\-t {Tag}
+Die zu editierende Datei und die anfängliche Cursor\-Position hängen von
+einem »Tag« ab, einer Art Sprungmarke. {Tag} wird in der Tag\-Datei
+nachgeschlagen, die zugehörige Datei wird zur aktuellen und der zugehörige
+Befehl wird ausgeführt. Dies wird meistens für Programme in der Sprache »C«
+benutzt, wobei {Tag} ein Funktionsname sein könnte. Die Wirkung dieses
+Befehls ist, dass die Datei, die die Funktion enthält, als aktuelle im
+Editor geöffnet und angezeigt wird und der Cursor auf dem Beginn der
+Funktion positioniert wird. Siehe »:help tag\-commands«.
+.TP 
+\-q [Fehlerdatei]
+Startet im QuickFix\-Modus. Die Datei [Fehlerdatei] wird gelesen und der
+erste Fehler wird angezeigt. Falls [Fehlerdatei] ausgelassen wird, wird der
+Dateiname aus der Option 'errorfile' verwendet (bei AmigaOS ist dies
+vorgabemäßig »AztecC.Err«, sowie „errors.err« bei anderen). Weitere Fehler
+können mit dem »:cn«\-Befehl angesprungen werden. Siehe „:help quickfix«.
+.PP
+\fBVim\fP reagiert unterschiedlich auf den Namen, der verwendet wird, um Vim zu
+starten (die ausführbare Datei kann dieselbe sein).
+.TP  10
+vim
+der »normale« Weg, alles ist standardmäßig
+.TP 
+ex
+Startet im Ex\-Modus. Mit dem Befehl »:vi« gelangt man in den normalen
+Modus. Funktioniert auch mit dem Argument »\-e«.
+.TP 
+view
+Startet im Nur\-Lesen\-Modus. Die Datei wird vor dem Überschreiben
+geschützt. Dasselbe wird mit dem Parameter »\-R« erreicht.
+.TP 
+gvim gview
+Die grafische Version: Öffnet ein neues Fenster. Dasselbe wird mit dem
+Parameter »\-g« erreicht.
+.TP 
+evim eview
+Die grafische Version im einfachen Modus: Öffnet ein neues Fenster. Dasselbe
+wird mit dem Parameter »\-y« erreicht.
+.TP 
+rvim rview rgvim rgview
+Wie die obigen, aber mit Beschränkungen: Es ist nicht möglich, Shell\-Befehle
+aufzurufen oder mit Unterbrechung in eine Shell zurückzuspringen. Dasselbe
+wird mit dem Parameter »\-Z« erreicht.
+.SH OPTIONEN
+Die Optionen können in beliebiger Reihenfolge vor oder nach den Dateinamen
+angegeben werden. Optionen ohne Parameter können hinter einem einzigen
+Bindestrich gruppiert werden.
+.TP  12
++[Nummer]
+In der ersten Datei wird der Cursor auf die Zeile [Nummer] gesetzt. Falls
+[Nummer] nicht angegeben wird, wird der Cursor in die letzte Zeile der Datei
+gesetzt.
+.TP 
++/{Suchmuster}
+In der ersten Datei wird der Cursor auf das erste Auftreten von {Suchmuster}
+gesetzt. Siehe »:help search\-pattern«.
+.TP 
++{Befehl}
+.TP 
+\-c {Befehl}
+{Befehl} wird nach dem Lesen der ersten Datei ausgeführt. Als {Befehl} wird
+ein Ex\-Befehl erwartet. Sind in {Befehl} Leerzeichen vorhanden, muss alles
+in Anführungszeichen gesetzt werden (hängt von der verwendeten Shell
+ab). Beispiel: vim "+set si" main.c
+.br
+Anmerkung: Sie können bis zu 10 »+«\- oder „\-c«\-Befehle verwenden.
+.TP 
+\-S {Datei}
+{Datei} wird nach dem Lesen der ersten Datei ausgeführt. Dies entspricht »\-c
+"source {Datei}"«. {Datei} darf nicht mit einem Bindestrich (\-)
+anfangen. Wenn kein Dateiname angegeben wird, wird »Session.vim« verwendet
+(Funktioniert nur, wenn »\-S« als letzter Parameter steht).
+.TP 
+\-\-cmd {Befehl}
+Wie »\-c«, aber dieser Befehl wird vor allen VimRC\-Dateien ausgeführt. Sie
+können unabhängig von den »\-c«\-Befehlen bis zu 10 dieser Befehle verwenden.
+.TP 
+\-A
+Falls \fBVim\fP mit Unterstützung für das Schreiben von rechts nach links und
+arabischer Tastaturbelegung compiliert wurde (ARABIC), startet dieser
+Parameter den Modus fürs Arabische (:set arabic). Anderenfalls beendet sich
+\fBVim\fP mit einer Fehlermeldung.
+.TP 
+b
+Binärer Modus: Es werden einige Variablen gesetzt, sodass es möglich ist,
+eine binäre oder ausführbare Datei zu bearbeiten.
+.TP 
+\-C
+Kompatibel: Setzt die Option 'compatible'. Das macht \fBVim\fP im Verhalten
+sehr ähnlich zu Vi, selbst wenn eine VimRC\-Datei existiert.
+.TP 
+\-d
+Startet im diff\-Modus. Es sollten zwei, drei oder vier Dateinamen als
+Parameter übergeben werden. \fBVim\fP öffnet sie alle und zeigt die
+Unterschiede an. Arbeitet wie vimdiff(1).
+.TP 
+\-d {Gerät}
+Öffnet das {Gerät}, um es als Terminal zu nutzen. Nur für AmigaOS. Beispiel:
+"\-d con:20/30/600/150".
+.TP 
+D
+Debug\-Modus: \fBVim\fP geht in den Debug\-Modus, wenn der erste Befehl in einem
+Skript ausgeführt wird.
+.TP 
+\-e
+Startet \fBVim\fP im Ex\-Modus, als würde als ausführbare Datei »ex« aufgerufen.
+.TP 
+\-E
+Startet \fBVim\fP im erweiterten Ex\-Modus, als würde die ausführbare Datei als
+»exim« aufgerufen.
+.TP 
+\-f
+Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
+löst sich nicht von der Shell, in der er aufgerufen wurde. Bei AmigaOS wird
+kein neues Fenster geöffnet. Dieser Parameter wird benutzt, damit das
+aufrufende Programm auf das Beenden des Bearbeitungssitzung wartet (z.B.:
+mail). Bei AmigaOS funktionieren die Befehle »:sh« und „:!« nicht.
+.TP 
+\-\-nofork
+Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
+löst sich nicht von der Shell, in der er aufgerufen wurde.
+.TP 
+\-F
+Wenn \fBVim\fP mit FKMAP\-Unterstützung für das Schreiben von rechts nach links
+und Farsi\-Tastatur\-Belegung kompiliert wurde, startet Vim im Farsi\-Modus,
+d.h. die Optionen 'fkmap' und 'rightleft' werden gesetzt. Andernfalls bricht
+\fBVim\fP mit einer Fehlermeldung ab.
+.TP 
+\-g
+Falls \fBVim\fP mit GUI\-Unterstützung kompiliert wurde, wird die GUI
+aktiviert. Falls keine GUI\-Unterstützung einkompiliert wurde, wird mit einer
+Fehlermeldung abgebrochen.
+.TP 
+\-h
+Gibt eine kleine Hilfe für die Befehlszeilenparameter aus. Danach beendet
+sich \fBVim.\fP
+.TP 
+\-H
+Hebräisch\-Modus, falls \fBVim\fP mit RIGHTLEFT\-Unterstützung für das Schreiben
+von rechts nach links und hebräischer Tastaturbelegung kompiliert wurde,
+werden die Optionen 'hkmap' und 'rightleft' gesetzt. Andernfalls beendet
+sich \fBVim\fP mit einer Fehlermeldung.
+.TP 
+\-i {VimInfo}
+Wenn eine VimInfo\-Datei verwendet wird: Verwendet statt »~/.viminfo« die
+angegebene Datei. Es ist auch möglich die Verwendung einer VimInfo\-Datei
+durch Angabe des Dateinamen »NONE« zu verhindern,
+.TP 
+\-L
+dasselbe wie »\-r«
+.TP 
+\-l
+Lisp\-Modus. Aktiviert die Optionen 'lisp' und 'showmatch'.
+.TP 
+\-m
+Deaktiviert das Verändern von Dateien, indem die Option 'write' gelöscht
+wird. Der Puffer kann verändert werden, nur das Schreiben einer Datei ist
+nicht möglich.
+.TP 
+\-M
+Keine Veränderungen erlaubt: Die Optionen 'modifiable' und 'write' werden
+gelöscht, so dass Änderungen nicht erlaubt sind und Dateien nicht
+geschrieben werden können. Man beachte, dass diese Optionen ('modifiable',
+\&'write') dennnoch nachträglich zum Erlauben von Änderungen gesetzt werden
+können.
+.TP 
+\-N
+Nicht\-kompatibler Modus: Löscht die Option 'compatible'. Dies veranlasst
+\fBVim\fP, sich ein wenig besser, aber weniger Vi\-kompatibel zu verhalten,
+selbst wenn es keine VimRC\-Datei gibt.
+.TP 
+\-n
+Verwendet keine Auslagerungsdatei: Eine Wiederherstellung nach einem Absturz
+ist nicht möglich. Auf einem langsamen Medium (Diskette) kann diese
+Einstellung nützlich sein. Kann auch mit »set uc=0« erreicht werden; kann
+mit »set uc=200« aufgehoben werden.
+.TP 
+\-nb
+\fBVim\fP fungiert als Server für NetBeans. Details siehe Dokumentation.
+.TP 
+\-o[N]
+Öffnet [N] Fenster übereinander. Wenn keine Zahl angegeben wird, öffne ein
+Fenster pro Datei.
+.TP 
+\-O[N]
+Öffnet [N] Fenster nebeneinander. Wenn keine Zahl angegeben wird, öffne ein
+Fenster pro Datei.
+.TP 
+\-p[N]
+Öffnet [N] Reiterseiten. Wenn keine Zahl angegeben wird, öffne eine
+Reiterseite pro Datei.
+.TP 
+\-R
+Nur\-Lesen\-Modus: Die Option 'readonly' wird gesetzt. Der Puffer kann noch
+bearbeitet werden, aber es wird verhindert, eine Datei aus Versehen zu
+überschreiben. Wenn Sie wirklich eine Datei überschreiben wollen, fügen Sie
+dem Ex\-Befehl ein Ausrufezeichen hinzu (wie in »:w!«). Die Option „\-R«
+bedingt die Option »\-n« (siehe oben). Die Option 'readonly' kann durch „:set
+noro« gelöscht werden. Siehe »:help 'readonly'«.
+.TP 
+\-r
+Listet die Auslagerungsdateien und gibt Informationen zu ihrer
+Verwendbarkeit zur Wiederherstellung.
+.TP 
+\-r {Datei}
+Wiederherstellungsmodus: Die Auslagerungsdatei wird zur Wiederherstellung
+verwendet und hat denselben Dateinamen wie die Text\-Datei + ».swp«. Siehe
+„:help recovery«.
+.TP 
+\-s
+Der stille Modus: Nur wenn die ausführbare Datei als »ex« aufgerufen wird
+oder vor »\-s« die Option „\-e« gegeben wird.
+.TP 
+\-s {Eingabeskript}
+Die Datei {Eingabeskript} wird gelesen und ausgeführt, als würden Sie die
+Zeichen in ihr tippen. Dasselbe kann mit dem Befehl »:source!
+{Eingabeskript}« erreicht werden. Wird das Ende der Datei vor dem Beenden
+des Editors erreicht, werden weitere Zeichen von der Tastatur gelesen.
+.TP 
+\-T {Terminal}
+Setzt den Namen des benutzten Terminals. Nur erforderlich, wenn die
+Automatik nicht funktioniert. Sollte ein \fBVim\fP bekanntes Terminal sein:
+(builtin) oder in einer termcap\- oder terminfo\-Datei definiert.
+.TP 
+\-u {VimRC}
+Verwendet zur Initialisierung die Befehle in der Datei {VimRC}. Alle anderen
+Initialisierungen werden übersprungen. Benutzen Sie dies, um eine besondere
+Art von Dateien zu bearbeiten. Dies kann auch benutzt werden, um alle
+Initialisierungen zu überspringen, indem der Name »NONE« angegeben wird. Für
+weitere Einzelheiten siehe »:help initialisation« innerhalb von Vim.
+.TP 
+\-U {GvimRC}
+Benutzt die Befehle in der Datei {GvimRC} für die Initialisierung der
+grafischen Oberfläche. Alle anderen Initialisierungen werden
+übersprungen. Dies kann ebenfalls benutzt werden, um alle
+GUI\-Initialisierungen zu überspringen, indem der Name »NONE« angegeben
+wird. Siehe »:help gui\-init« innerhalb von Vim für weitere Einzelheiten.
+.TP 
+\-V[N]
+Ausführlich (verbose): Gibt Meldungen darüber, welche Befehlsdateien
+eingelesen werden, und über das Lesen und Schreiben einer VimInfo\-Datei. Die
+optionale Zahl N ist der Wert für 'verbose'. Vorgabe ist 10.
+.TP 
+\-v
+Startet \fBVim\fP im Vi\-Modus, so als würde die ausführbare Datei mit »vi«
+aufgerufen. Dies wirkt sich nur aus, wenn die ausführbare Datei als »ex«
+aufgerufen wird.
+.TP 
+\-w {Ausgabeskript}
+Alle Zeichen, die eingetippt werden, werden in der Datei {Ausgabeskript}
+aufgezeichnet, solange bis Sie \fBVim\fP beenden. Dies ist nützlich, falls Sie
+eine Skript\-Datei zum Benutzen mit »vim \-s« oder „:source!« erzeugen
+wollen. Falls die Datei {Ausgabeskript} vorhanden ist, werden die Zeichen
+angehängt.
+.TP 
+\-W {Ausgabeskript}
+Wie \-w, aber eine bereits vorhandene Datei wird überschrieben.
+.TP 
+\-x
+Benutzt beim Schreiben von Dateien eine Verschlüsselung. Fragt nach dem
+Schlüssel.
+.TP 
+\-X
+Führt keine Verbindung zum X\-Server durch. Dadurch verkürzt sich die
+Startzeit, aber der Fenstertitel und die Zwischenablage werden nicht
+verwendet.
+.TP 
+\-y
+Startet \fBVim\fP im einfachen Modus, als würde die ausführbare Datei mit
+»evim« oder »eview« aufgerufen. \fBVim\fP verhält sich dann wie ein Editor zum
+Klicken und Tippen.
+.TP 
+\-Z
+Eingeschränkter Modus: Funktioniert, als würde der Name der ausführbaren
+Datei mit »r« beginnen.
+.TP 
+\-\-
+Markiert das Ende der Optionen. Argumente, die folgen, werden als Dateinamen
+behandelt. Dies kann benutzt werden, um einen Dateinamen mit »\-« am Anfang
+zu verwenden.
+.TP 
+\-\-echo\-wid
+Nur GTK\-GUI: Schreibe die Fenster\-ID auf die Standardausgabe.
+.TP 
+\-\-help
+Gibt eine Hilfe\-Nachricht aus und beendet, wie »\-h«.
+.TP 
+\-\-literal
+Nimmt die Dateinamen so wie sie sind und vervollständigt sie nicht nach
+Metazeichen (*,?). Dies wirkt sich nicht unter Unix aus, wo die Shell die
+Metazeichen expandiert.
+.TP 
+\-\-noplugin
+Lade keine Plugins. Impliziert durch »\-u NONE«.
+.TP 
+\-\-remote
+Verbindet mit einem Vim\-Server und lässt ihn die in den restlichen
+Argumenten angegeben Dateien editieren. Wenn kein Server gefunden wird,
+führt dies zu einer Warnmeldung und die Dateien werden im gegenwärtigen Vim
+zum Bearbeiten geöffnet.
+.TP 
+\-\-remote\-expr {Ausdruck}
+Verbindet mit einem Vim\-Server, führt {Ausdruck} aus und zeigt das Ergebnis
+auf der Standardausgabe an.
+.TP 
+\-\-remote\-send {Zeichen}
+Verbindet mit einem Vim\-Server und sendet ihm {Zeichen}.
+.TP 
+\-\-remote\-silent
+Wie »\-\-remote«, aber ohne Warnung, wenn kein Server gefunden wird.
+.TP 
+\-\-remote\-wait
+Wie »\-\-remote«, aber Vim beendet sich nicht, bis die Dateien bearbeitet
+wurden.
+.TP 
+\-\-remote\-wait\-silent
+Wie »\-\-remote\-wait«, aber ohne Warnung, wenn kein Server gefunden wird.
+.TP 
+\-\-serverlist
+Listet die Namen aller gefundenen Vim\-Server auf.
+.TP 
+\-\-servername {Name}
+Benutzt {Name} als Server\-Namen. Wird für den gegenwärtigen Vim benutzt,
+außer es wird mit dem Argument »\-\-remote« benutzt, dann ist es der Name des
+zu kontaktierenden Servers.
+.TP 
+\-\-socketid {id}
+Nur GTK\-GUI: Benutzt den GtkPlug\-Mechanismus, um GVim in einem anderen
+Fenster laufen zu lassen.
+.TP 
+\-\-version
+Versionsinformation anzeigen und beenden
+.SH "EINGEBAUTE HILFE"
+Tippen Sie in \fBVim\fP »:help«, um zu beginnen. Geben Sie „:help begriff« ein,
+um Hilfe über ein bestimmtes Thema zu bekommen. Zum Beispiel »:help ZZ« für
+Hilfe über den Befehl »ZZ«. Benutzen Sie <Tab> und CTRL\-D, um
+Begriffe zu vervollständigen (»:help cmdline\-completion«). Tags sind
+vorhanden, um von einem Ort zum anderen zu springen (eine Art
+Hypertext\-Verknüpfungen, siehe »:help«). Auf diese Weise können alle
+Dokumentations\-Dateien aufgerufen werden, zum Beispiel »:help syntax.txt«.
+.SH DATEIEN
+.TP  15
+/usr/local/lib/vim/doc/*.txt
+Dokumentations\-Dateien für \fBVim\fP. Verwenden Sie »:help doc\-file\-list«, um
+die gesamte Liste zu bekommen.
+.TP 
+/usr/local/lib/vim/doc/tags
+Die »Tag«\-Datei, die verwendet wird, um Informationen in der Dokumentation
+zu finden.
+.TP 
+/usr/local/lib/vim/syntax/syntax.vim
+Die systemweite Einrichtung der Syntaxhervorhebung.
+.TP 
+/usr/local/lib/vim/syntax/*.vim
+Syntaxdateien für die verschiedenen Sprachen.
+.TP 
+/usr/local/lib/vim/vimrc
+Systemweite Einstellungsdatei für \fBVim\fP
+.TP 
+~/.vimrc
+Persönliche Einstellungsdatei für \fBVim\fP
+.TP 
+/usr/local/lib/vim/gvimrc
+Systemweite Einstellungsdatei für GVim
+.TP 
+~/.gvimrc
+Persönliche Einstellungsdatei für GVim
+.TP 
+/usr/local/lib/vim/optwin.vim
+Das Script, das von dem Befehl »:options« verwendet wird, eine schöne
+Möglichkeit, um Optionen zu betrachten und zu setzen.
+.TP 
+/usr/local/lib/vim/menu.vim
+Systemweite Einstellungsdatei für das Menü von GVim
+.TP 
+/usr/local/lib/vim/bugreport.vim
+Das Script zum Generieren eines Fehlerberichts. Siehe »:help bugs«.
+.TP 
+/usr/local/lib/vim/filetype.vim
+Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
+Dateinamens. Siehe »:help 'filetype'«.
+.TP 
+/usr/local/lib/vim/scripts.vim
+Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
+Inhaltes. Siehe »:help 'filetype'«.
+.TP 
+/usr/local/lib/vim/print/*.ps
+Diese Dateien werden zum Drucken von PostScript verwendet.
+.PP
+Für die neuesten Informationen lesen Sie die Vim\-Homepage:
+.br
+<URL:http://www.vim.org/>
+.SH "SIEHE AUCH"
+vimtutor(1)
+.SH AUTOR
+\fBVim\fP wurde größtenteils von Bram Moolenaar erstellt, mit viel Hilfe von
+anderen Leuten. Siehe »:help credits« in \fBVim.\fP
+.br
+\fBVim\fP basiert auf Stevie, der von Tim Thompson, Tony Andrews und
+G.R. (Fred) Walter geschrieben wurde. Es ist jedoch kaum etwas vom
+ursprünglichen Code übrig geblieben.
+.SH FEHLER
+Die sind möglich. Siehe »:help todo« für eine Liste bekannter Probleme.
+.PP
+Beachten Sie, dass gewisse Dinge, die manche Leute als Fehler betrachten
+mögen, in Wirklichkeit durch zu getreue Nachbildung des Vi\-Verhaltens
+verursacht werden. Und falls Sie denken, dass andere Dinge Fehler sind,
+»weil Vi es anders tut«, sollten Sie einen genaueren Blick auf die Datei
+vi_diff.txt werfen (oder in Vim »:help vi_diff.txt« tippen). Sehen Sie sich
+auch die Optionen 'compatible' und 'cpoptions' an.
diff -Naur vim73.orig/runtime/doc/vim-fr.1 vim73/runtime/doc/vim-fr.1
--- vim73.orig/runtime/doc/vim-fr.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/vim-fr.1	2013-08-04 19:09:08.153951247 +0000
@@ -1,11 +1,11 @@
-.\" Traduction Lundi 7 aot 2000 par Richard Hitier
+.\" Traduction lundi 7 aot 2000 par Richard Hitier
 .\" (richard.hitier@dial.oleane.com)
 .\" Mise  jour de la traduction par David Blanchet
 .\" (david.blanchet@free.fr) 2006-06-10
 .\" Mise  jour de la traduction par Dominique Pell
-.\" (dominique.pelle@gmail.com) 2008-11-29
+.\" (dominique.pelle@gmail.com) 2013-05-10
 .\"
-.TH VIM 1 "22 Fvrier 2002"
+.TH VIM 1 "22 fvrier 2002"
 .SH NOM
 vim \- Vi IMproved, diteur de texte pour programmeurs
 .SH SYNOPSIS
@@ -156,7 +156,7 @@
 {commande} est interprte comme une commande Ex.
 Si la {commande} contient des espaces, elle doit tre entoure
 de doubles-apostrophes (cela dpend du shell utilis).
-Exemple: Vim "+set si" main.c
+Exemple : Vim "+set si" main.c
 .br
 Note : vous pouvez utiliser jusqu' 10 commandes "+" ou "\-c".
 .TP
@@ -204,7 +204,7 @@
 \-d {priph}
 Ouvre {priph} pour l'utiliser comme terminal.
 Uniquement sur Amiga.
-Exemple:
+Exemple :
 "\-d con:20/30/600/150".
 .TP
 \-D
@@ -269,7 +269,7 @@
 Si
 .B Vim
 a t compil avec le support de la fonctionnalit RIGHTLEFT pour l'dition de
-fichiers de droite  gauche et les claviers hbreu, cette option lance
+fichiers de droite  gauche et les claviers hbreux, cette option lance
 .B Vim
 en mode Hbreu, c.--d. avec les options 'hkmap' et 'rightleft' actives.
 Sinon, un message d'erreur est mis et
@@ -435,7 +435,7 @@
 \-\-
 Dlimite la fin des options.
 Les arguments qui suivent seront considrs comme des noms de fichiers.
-Cela permet d'diter des fichier dbutant par un '\-'.
+Cela permet d'diter des fichiers dbutant par un '\-'.
 .TP
 \-\-echo\-wid
 IHM graphique GTK uniquement : retourne la Window ID sur stdout.
@@ -586,3 +586,4 @@
 .br
 Cette page de manuel a t mise  jour par David Blanchet.
 <david.blanchet@free.fr> 2006-04-10.
+Mise  jour 2013-05-10, Dominique Pell <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/doc/vim-fr.UTF-8.1 vim73/runtime/doc/vim-fr.UTF-8.1
--- vim73.orig/runtime/doc/vim-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/vim-fr.UTF-8.1	2013-08-04 19:09:08.153951247 +0000
@@ -1,11 +1,11 @@
-.\" Traduction Lundi 7 août 2000 par Richard Hitier
+.\" Traduction lundi 7 août 2000 par Richard Hitier
 .\" (richard.hitier@dial.oleane.com)
 .\" Mise à jour de la traduction par David Blanchet
 .\" (david.blanchet@free.fr) 2006-06-10
 .\" Mise à jour de la traduction par Dominique Pellé
-.\" (dominique.pelle@gmail.com) 2008-11-29
+.\" (dominique.pelle@gmail.com) 2013-05-10
 .\"
-.TH VIM 1 "22 Février 2002"
+.TH VIM 1 "22 février 2002"
 .SH NOM
 vim \- Vi IMproved, éditeur de texte pour programmeurs
 .SH SYNOPSIS
@@ -156,7 +156,7 @@
 {commande} est interprétée comme une commande Ex.
 Si la {commande} contient des espaces, elle doit être entourée
 de doubles-apostrophes (cela dépend du shell utilisé).
-Exemple: Vim "+set si" main.c
+Exemple : Vim "+set si" main.c
 .br
 Note : vous pouvez utiliser jusqu'à 10 commandes "+" ou "\-c".
 .TP
@@ -204,7 +204,7 @@
 \-d {périph}
 Ouvre {périph} pour l'utiliser comme terminal.
 Uniquement sur Amiga.
-Exemple:
+Exemple :
 "\-d con:20/30/600/150".
 .TP
 \-D
@@ -269,7 +269,7 @@
 Si
 .B Vim
 a été compilé avec le support de la fonctionnalité RIGHTLEFT pour l'édition de
-fichiers de droite à gauche et les claviers hébreu, cette option lance
+fichiers de droite à gauche et les claviers hébreux, cette option lance
 .B Vim
 en mode Hébreu, c.-à-d. avec les options 'hkmap' et 'rightleft' activées.
 Sinon, un message d'erreur est émis et
@@ -435,7 +435,7 @@
 \-\-
 Délimite la fin des options.
 Les arguments qui suivent seront considérés comme des noms de fichiers.
-Cela permet d'éditer des fichier débutant par un '\-'.
+Cela permet d'éditer des fichiers débutant par un '\-'.
 .TP
 \-\-echo\-wid
 IHM graphique GTK uniquement : retourne la Window ID sur stdout.
@@ -586,3 +586,4 @@
 .br
 Cette page de manuel a été mise à jour par David Blanchet.
 <david.blanchet@free.fr> 2006-04-10.
+Mise à jour par Dominique Pellé <dominique.pelle@gmail.com> 2013-05-10
diff -Naur vim73.orig/runtime/doc/vim2html.pl vim73/runtime/doc/vim2html.pl
--- vim73.orig/runtime/doc/vim2html.pl	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/vim2html.pl	2013-08-04 19:09:08.167284540 +0000
@@ -214,7 +214,7 @@
 }
 
 # main
-usage() if $#ARGV < 2;
+usage() if $#ARGV < 1;
 
 print "Processing tags...\n";
 readTagFile( $ARGV[ 0 ] );
diff -Naur vim73.orig/runtime/doc/vimdiff-fr.1 vim73/runtime/doc/vimdiff-fr.1
--- vim73.orig/runtime/doc/vimdiff-fr.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/vimdiff-fr.1	2013-08-04 19:09:08.170617864 +0000
@@ -14,7 +14,7 @@
 .B Vim
 avec deux (ou trois ou quatre) fichiers.
 Chaque fichier est ouvert dans sa propre fentre.
-Les diffrences entres ces fichiers sont mises en surbrillance.
+Les diffrences entre ces fichiers sont mises en surbrillance.
 C'est un outil trs pratique pour visualiser et reporter les
 changements entre deux versions d'un mme fichier.
 .PP
@@ -51,3 +51,4 @@
 .SH TRADUCTION
 Cette page de manuel a t traduite par David Blanchet
 <david.blanchet@free.fr> 2005-03-12.
+Mise  jour 2012-05-06, Dominique Pell <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/doc/vimdiff-fr.UTF-8.1 vim73/runtime/doc/vimdiff-fr.UTF-8.1
--- vim73.orig/runtime/doc/vimdiff-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/vimdiff-fr.UTF-8.1	2013-08-04 19:09:08.170617864 +0000
@@ -14,7 +14,7 @@
 .B Vim
 avec deux (ou trois ou quatre) fichiers.
 Chaque fichier est ouvert dans sa propre fenêtre.
-Les différences entres ces fichiers sont mises en surbrillance.
+Les différences entre ces fichiers sont mises en surbrillance.
 C'est un outil très pratique pour visualiser et reporter les
 changements entre deux versions d'un même fichier.
 .PP
@@ -51,3 +51,4 @@
 .SH TRADUCTION
 Cette page de manuel a été traduite par David Blanchet
 <david.blanchet@free.fr> 2005-03-12.
+Mise à jour 2012-05-06, Dominique Pellé <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/doc/vimtutor-fr.1 vim73/runtime/doc/vimtutor-fr.1
--- vim73.orig/runtime/doc/vimtutor-fr.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/vimtutor-fr.1	2013-08-04 19:09:08.180617833 +0000
@@ -3,7 +3,7 @@
 vimtutor \- tutoriel Vim
 .SH SYNOPSIS
 .br
-.B vimtutor [-g] [langue]
+.B vimtutor [\-g] [langue]
 .SH DESCRIPTION
 .B Vimtutor
 lance le tutoriel
@@ -17,7 +17,7 @@
 .B Vim
 \.
 .PP
-L'argument optionnel -g lance vimtutor avec gvim plutt qu'avec vim, si l'IHM
+L'argument optionnel \-g lance vimtutor avec gvim plutt qu'avec vim, si l'IHM
 graphique de vim est disponible, ou le lance avec vim si gvim n'est pas
 disponible.
 .PP
@@ -57,3 +57,4 @@
 .SH TRADUCTION
 Cette page de manuel a t traduite par David Blanchet
 <david.blanchet@free.fr> 2004-12-27.
+Mise  jour 2012-05-06, Dominique Pell <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/doc/vimtutor-fr.UTF-8.1 vim73/runtime/doc/vimtutor-fr.UTF-8.1
--- vim73.orig/runtime/doc/vimtutor-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/vimtutor-fr.UTF-8.1	2013-08-04 19:09:08.180617833 +0000
@@ -3,7 +3,7 @@
 vimtutor \- tutoriel Vim
 .SH SYNOPSIS
 .br
-.B vimtutor [-g] [langue]
+.B vimtutor [\-g] [langue]
 .SH DESCRIPTION
 .B Vimtutor
 lance le tutoriel
@@ -17,7 +17,7 @@
 .B Vim
 \.
 .PP
-L'argument optionnel -g lance vimtutor avec gvim plutôt qu'avec vim, si l'IHM
+L'argument optionnel \-g lance vimtutor avec gvim plutôt qu'avec vim, si l'IHM
 graphique de vim est disponible, ou le lance avec vim si gvim n'est pas
 disponible.
 .PP
@@ -57,3 +57,4 @@
 .SH TRADUCTION
 Cette page de manuel a été traduite par David Blanchet
 <david.blanchet@free.fr> 2004-12-27.
+Mise à jour 2012-05-06, Dominique Pellé <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/doc/visual.txt vim73/runtime/doc/visual.txt
--- vim73.orig/runtime/doc/visual.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/visual.txt	2013-08-04 19:09:08.190617803 +0000
@@ -1,4 +1,4 @@
-*visual.txt*    For Vim version 7.3.  Last change: 2010 Feb 17
+*visual.txt*    For Vim version 7.3.  Last change: 2012 Aug 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -61,15 +61,27 @@
 2. Starting and stopping Visual mode			*visual-start*
 
 						*v* *characterwise-visual*
-v			start Visual mode per character.
+[count]v		Start Visual mode per character.
+			With [count] select the same number of characters or
+			lines as used for the last Visual operation, but at
+			the current cursor position, multiplied by [count].
+			When the previous Visual operation was on a block both
+			the width and height of the block are multiplied by
+			[count].
+			When there was no previous Visual operation [count]
+			characters are selected.  This is like moving the
+			cursor right N * [count] characters.  One less when
+			'selection' is not "exclusive".
 
 						*V* *linewise-visual*
-V			start Visual mode linewise.
+[count]V		Start Visual mode linewise.
+			With [count] select that many lines.
 
 						*CTRL-V* *blockwise-visual*
-CTRL-V			start Visual mode blockwise.  Note: Under Windows
+[count]CTRL-V		Start Visual mode blockwise.  Note: Under Windows
 			CTRL-V could be mapped to paste text, it doesn't work
 			to start Visual mode then, see |CTRL-V-alternative|.
+			[count] is used as with `v` above.
 
 If you use <Esc>, click the left mouse button or use any command that
 does a jump to another buffer while in Visual mode, the highlighting stops
@@ -94,6 +106,18 @@
 			After using "p" or "P" in Visual mode the text that
 			was put will be selected.
 
+								*gn* *v_gn*
+gn			Search forward for the last used search pattern, like
+			with `n`, and start Visual mode to select the match.
+			If the cursor is on the match, visually selects it.
+			If an operator is pending, operates on the match.
+			E.g., "dgn" deletes the text of the next match.
+			If Visual mode is active, extends the selection
+			until the end of the next match.
+
+								*gN* *v_gN*
+gN			Like |gn| but searches backward, like with `N`.
+
 							*<LeftMouse>*
 <LeftMouse>		Set the current cursor position.  If Visual mode is
 			active it is stopped.  Only when 'mouse' option is
@@ -269,7 +293,10 @@
 Another way to operate on the Visual area is using the |/\%V| item in a
 pattern.  For example, to replace all '(' in the Visual area with '#': >
 
-	:%s/\%V(/X/g
+	:'<,'>s/\%V(/#/g
+
+Note that the "'<,'>" will appear automatically when you press ":" in Visual
+mode.
 
 ==============================================================================
 5. Blockwise operators					*blockwise-operators*
diff -Naur vim73.orig/runtime/doc/windows.txt vim73/runtime/doc/windows.txt
--- vim73.orig/runtime/doc/windows.txt	2010-08-15 12:23:23.000000000 +0000
+++ vim73/runtime/doc/windows.txt	2013-08-04 19:09:08.193951127 +0000
@@ -1,4 +1,4 @@
-*windows.txt*   For Vim version 7.3.  Last change: 2010 Aug 15
+*windows.txt*   For Vim version 7.3.  Last change: 2012 Nov 15
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -174,7 +174,8 @@
 		2. WinEnter for the new window
 		3. BufLeave for the current buffer
 		4. BufEnter for the new buffer
-		This behaves like a ":split" first, and then a ":e" command.
+		This behaves like a ":split" first, and then an ":enew"
+		command.
 
 :[N]vne[w] [++opt] [+cmd] [file]			*:vne* *:vnew*
 		Like |:new|, but split vertically.  If 'equalalways' is set
@@ -183,7 +184,8 @@
 
 :[N]new [++opt] [+cmd] {file}
 :[N]sp[lit] [++opt] [+cmd] {file}			*:split_f*
-		Create a new window and start editing file {file} in it.
+		Create a new window and start editing file {file} in it.  This
+		behaves like a ":split" first, and then an ":e" command.
 		If [+cmd] is given, execute the command when the file has been
 		loaded |+cmd|.
 		Also see |++opt|.
@@ -246,7 +248,7 @@
 
 These command modifiers can be combined to make a vertically split window
 occupy the full height.  Example: >
-	:vertical topleft edit tags
+	:vertical topleft split tags
 Opens a vertically split, full-height window on the "tags" file at the far
 left of the Vim window.
 
@@ -937,9 +939,9 @@
 :buffers[!]					*:buffers* *:ls*
 :ls[!]		Show all buffers.  Example:
 
-			1 #h  "/test/text"		line 1 ~
-			2u    "asdf"			line 0 ~
-			3 %a+ "version.c"		line 1 ~
+			1 #h   "/test/text"		line 1 ~
+			2u     "asdf"			line 0 ~
+			3 %a + "version.c"		line 1 ~
 
 		When the [!] is included the list will show unlisted buffers
 		(the term "unlisted" is a bit confusing then...).
diff -Naur vim73.orig/runtime/doc/xxd-fr.1 vim73/runtime/doc/xxd-fr.1
--- vim73.orig/runtime/doc/xxd-fr.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/xxd-fr.1	2013-08-04 19:09:08.197284450 +0000
@@ -159,7 +159,7 @@
 combls par des octets nuls.
 .PP
 .I xxd \-r
-ne gnre aucune erreur lors de l'analyse. Le problme sont passs
+ne gnre aucune erreur lors de l'analyse. Les problmes sont passs
 silencieusement.
 .PP
 Lors de l'dition de la reprsentation hexadcimale, veuillez noter que
@@ -307,7 +307,7 @@
 000fffc: 0000 0000 40                   ....A
 .PP
 Crer un fichier d'un octet, contenant seulement le caractre 'A'.
-Les nombres aprs '\-r \-s' s'ajoutent au numros de lignes trouves dans le
+Le nombre aprs '\-r \-s' s'ajoute aux numros de lignes trouves dans le
 fichier ; les octets initiaux sont supprims.
 .br
 \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> fichier\fR
@@ -393,3 +393,4 @@
 .SH TRADUCTION
 Cette page de manuel a t traduite par David Blanchet
 <david.blanchet@free.fr> 2004-12-24.
+Mise  jour 2013-05-10, Dominique Pell <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/doc/xxd-fr.UTF-8.1 vim73/runtime/doc/xxd-fr.UTF-8.1
--- vim73.orig/runtime/doc/xxd-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/doc/xxd-fr.UTF-8.1	2013-08-04 19:09:08.197284450 +0000
@@ -159,7 +159,7 @@
 comblés par des octets nuls.
 .PP
 .I xxd \-r
-ne génère aucune erreur lors de l'analyse. Le problème sont passés
+ne génère aucune erreur lors de l'analyse. Les problèmes sont passés
 silencieusement.
 .PP
 Lors de l'édition de la représentation hexadécimale, veuillez noter que
@@ -307,7 +307,7 @@
 000fffc: 0000 0000 40                   ....A
 .PP
 Créer un fichier d'un octet, contenant seulement le caractère 'A'.
-Les nombres après '\-r \-s' s'ajoutent au numéros de lignes trouvées dans le
+Le nombre après '\-r \-s' s'ajoute aux numéros de lignes trouvées dans le
 fichier ; les octets initiaux sont supprimés.
 .br
 \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> fichier\fR
@@ -393,3 +393,4 @@
 .SH TRADUCTION
 Cette page de manuel a été traduite par David Blanchet
 <david.blanchet@free.fr> 2004-12-24.
+Mise à jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
diff -Naur vim73.orig/runtime/filetype.vim vim73/runtime/filetype.vim
--- vim73.orig/runtime/filetype.vim	2010-08-03 20:44:00.000000000 +0000
+++ vim73/runtime/filetype.vim	2013-08-04 19:09:08.213951067 +0000
@@ -1,7 +1,7 @@
 " Vim support file to detect file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2010 Jul 30
+" Last Change:	2013 Jun 24
 
 " Listen very carefully, I will say this only once
 if exists("did_load_filetypes")
@@ -17,7 +17,7 @@
 
 " Ignored extensions
 if exists("*fnameescape")
-au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.rpmsave,?\+.rpmnew
+au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.dpkg-new,?\+.dpkg-bak,?\+.rpmsave,?\+.rpmnew
 	\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
 au BufNewFile,BufRead *~
 	\ let s:name = expand("<afile>") |
@@ -75,7 +75,7 @@
 au BufNewFile,BufRead *.aap			setf aap
 
 " A2ps printing utility
-au BufNewFile,BufRead etc/a2ps.cfg,etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
+au BufNewFile,BufRead */etc/a2ps.cfg,*/etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
 
 " ABAB/4
 au BufNewFile,BufRead *.abap			setf abap
@@ -110,8 +110,7 @@
 au BufNewFile,BufRead proftpd.conf*		call s:StarSetf('apachestyle')
 
 " Apache config file
-au BufNewFile,BufRead .htaccess,/etc/httpd/*.conf		 setf apache
-au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf*,/etc/httpd/conf.d/*.conf* call s:StarSetf('apache')
+au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf		setf apache
 
 " XA65 MOS6510 cross assembler
 au BufNewFile,BufRead *.a65			setf a65
@@ -124,17 +123,25 @@
 	\ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
 
 " ALSA configuration
-au BufNewFile,BufRead ~/.asoundrc,/usr/share/alsa/alsa.conf,/etc/asound.conf	setf alsaconf
+au BufNewFile,BufRead .asoundrc,*/usr/share/alsa/alsa.conf,*/etc/asound.conf setf alsaconf
 
 " Arc Macro Language
 au BufNewFile,BufRead *.aml			setf aml
 
+" APT config file
+au BufNewFile,BufRead apt.conf                 setf aptconf
+au BufNewFile,BufRead */.aptitude/config       setf aptconf
+au BufNewFile,BufRead */etc/apt/apt.conf.d/{[-_[:alnum:]]\+,[-_.[:alnum:]]\+.conf} setf aptconf
+
 " Arch Inventory file
 au BufNewFile,BufRead .arch-inventory,=tagging-method	setf arch
 
 " ART*Enterprise (formerly ART-IM)
 au BufNewFile,BufRead *.art			setf art
 
+" AsciiDoc
+au BufNewFile,BufRead *.asciidoc		setf asciidoc
+
 " ASN.1
 au BufNewFile,BufRead *.asn,*.asn1		setf asn
 
@@ -157,7 +164,7 @@
 	\ endif
 
 " Grub (must be before catch *.lst)
-au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf,/etc/grub.conf	setf grub
+au BufNewFile,BufRead */boot/grub/menu.lst,*/boot/grub/grub.conf,*/etc/grub.conf setf grub
 
 " Assembly (all kinds)
 " *.lst is not pure assembly, it has two extra columns (address, byte codes)
@@ -240,8 +247,8 @@
   endif
 endfunc
 
-" Visual Basic Script (close to Visual Basic)
-au BufNewFile,BufRead *.vbs,*.dsm,*.ctl		setf vb
+" Visual Basic Script (close to Visual Basic) or Visual Basic .NET
+au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl	setf vb
 
 " IBasic file (similar to QBasic)
 au BufNewFile,BufRead *.iba,*.ibi		setf ibasic
@@ -296,7 +303,7 @@
 au BufNewFile,BufRead *.bl			setf blank
 
 " Blkid cache file
-au BufNewFile,BufRead /etc/blkid.tab,/etc/blkid.tab.old   setf xml
+au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old   setf xml
 
 " C or lpc
 au BufNewFile,BufRead *.c			call s:FTlpc()
@@ -317,21 +324,21 @@
 
 " Calendar
 au BufNewFile,BufRead calendar			setf calendar
-au BufNewFile,BufRead */.calendar/*,
-	\*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
-	\					call s:StarSetf('calendar')
 
 " C#
 au BufNewFile,BufRead *.cs			setf cs
 
+" CSDL
+au BufNewFile,BufRead *.csdl			setf csdl
+
 " Cabal
-au BufNewFile,BufRead *.cabal       		setf cabal
+au BufNewFile,BufRead *.cabal			setf cabal
 
 " Cdrdao TOC
 au BufNewFile,BufRead *.toc			setf cdrtoc
 
 " Cdrdao config
-au BufNewFile,BufRead etc/cdrdao.conf,etc/defaults/cdrdao,etc/default/cdrdao,~/.cdrdao						setf cdrdaoconf
+au BufNewFile,BufRead */etc/cdrdao.conf,*/etc/defaults/cdrdao,*/etc/default/cdrdao,.cdrdao	setf cdrdaoconf
 
 " Cfengine
 au BufNewFile,BufRead cfengine.conf		setf cfengine
@@ -371,7 +378,11 @@
 
 func! s:FTheader()
   if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
-    setf objc
+    if exists("g:c_syntax_for_h")
+      setf objc
+    else
+      setf objcpp
+    endif
   elseif exists("g:c_syntax_for_h")
     setf c
   elseif exists("g:ch_syntax_for_h")
@@ -484,11 +495,14 @@
 	\   setf clipper |
 	\ endif
 
+" Clojure
+au BufNewFile,BufRead *.clj,*.cljs		setf clojure
+
 " Cmake
 au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in		setf cmake
 
 " Cmusrc
-au BufNewFile,BufRead ~/.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
+au BufNewFile,BufRead */.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
 au BufNewFile,BufRead */cmus/{rc,*.theme}			setf cmusrc
 
 " Cobol
@@ -536,7 +550,7 @@
 au BufNewFile,BufRead *.cfg			setf cfg
 
 " Cucumber
-au BufNewFile,BufRead *.feature 		setf cucumber
+au BufNewFile,BufRead *.feature			setf cucumber
 
 " Communicating Sequential Processes
 au BufNewFile,BufRead *.csp,*.fdr		setf csp
@@ -553,11 +567,15 @@
 	\| endif
 
 " Debian Sources.list
-au BufNewFile,BufRead /etc/apt/sources.list	setf debsources
+au BufNewFile,BufRead */etc/apt/sources.list		setf debsources
+au BufNewFile,BufRead */etc/apt/sources.list.d/*.list	setf debsources
 
 " Deny hosts
 au BufNewFile,BufRead denyhosts.conf		setf denyhosts
 
+" dnsmasq(8) configuration files
+au BufNewFile,BufRead */etc/dnsmasq.conf	setf dnsmasq
+
 " ROCKLinux package description
 au BufNewFile,BufRead *.desc			setf desc
 
@@ -566,7 +584,10 @@
 
 func! s:DtraceCheck()
   let lines = getline(1, min([line("$"), 100]))
-  if match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
+  if match(lines, '^module\>\|^import\>') > -1
+    " D files often start with a module and/or import statement.
+    setf d
+  elseif match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
     setf dtrace
   else
     setf d
@@ -586,7 +607,7 @@
 au BufNewFile,BufRead *.diff,*.rej,*.patch	setf diff
 
 " Dircolors
-au BufNewFile,BufRead .dir_colors,/etc/DIR_COLORS	setf dircolors
+au BufNewFile,BufRead .dir_colors,.dircolors,*/etc/DIR_COLORS	setf dircolors
 
 " Diva (with Skill) or InstallShield
 au BufNewFile,BufRead *.rul
@@ -626,6 +647,9 @@
 " DTD (Document Type Definition for XML)
 au BufNewFile,BufRead *.dtd			setf dtd
 
+" DTS/DSTI (device tree files)
+au BufNewFile,BufRead *.dts,*.dtsi		setf dts
+
 " EDIF (*.edf,*.edif,*.edn,*.edo)
 au BufNewFile,BufRead *.ed\(f\|if\|n\|o\)	setf edif
 
@@ -677,6 +701,9 @@
 " Exports
 au BufNewFile,BufRead exports			setf exports
 
+" Falcon
+au BufNewFile,BufRead *.fal			setf falcon
+
 " Fantom
 au BufNewFile,BufRead *.fan,*.fwt		setf fan
 
@@ -725,14 +752,18 @@
 au BufNewFile,BufRead *.ged,lltxxxxx.txt	setf gedcom
 
 " Git
-autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG setf gitcommit
-autocmd BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
-autocmd BufNewFile,BufRead git-rebase-todo      setf gitrebase
-autocmd BufNewFile,BufRead .msg.[0-9]*
+au BufNewFile,BufRead *.git/COMMIT_EDITMSG	setf gitcommit
+au BufNewFile,BufRead *.git/MERGE_MSG		setf gitcommit
+au BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
+au BufNewFile,BufRead *.git/modules/**/COMMIT_EDITMSG setf gitcommit
+au BufNewFile,BufRead *.git/modules/**/config	setf gitconfig
+au BufNewFile,BufRead */.config/git/config	setf gitconfig
+au BufNewFile,BufRead git-rebase-todo		setf gitrebase
+au BufNewFile,BufRead .msg.[0-9]*
       \ if getline(1) =~ '^From.*# This line is ignored.$' |
       \   setf gitsendemail |
       \ endif
-autocmd BufNewFile,BufRead *.git/**
+au BufNewFile,BufRead *.git/**
       \ if getline(1) =~ '^\x\{40\}\>\|^ref: ' |
       \   setf git |
       \ endif
@@ -746,7 +777,15 @@
 " GPG
 au BufNewFile,BufRead */.gnupg/options		setf gpg
 au BufNewFile,BufRead */.gnupg/gpg.conf		setf gpg
-au BufNewFile,BufRead /usr/**/gnupg/options.skel setf gpg
+au BufNewFile,BufRead */usr/**/gnupg/options.skel setf gpg
+
+" gnash(1) configuration files
+au BufNewFile,BufRead gnashrc,.gnashrc,gnashpluginrc,.gnashpluginrc setf gnash
+
+" Gitolite
+au BufNewFile,BufRead gitolite.conf		setf gitolite
+au BufNewFile,BufRead */gitolite-admin/conf/*	call s:StarSetf('gitolite')
+au BufNewFile,BufRead {,.}gitolite.rc,example.gitolite.rc	setf perl
 
 " Gnuplot scripts
 au BufNewFile,BufRead *.gpi			setf gnuplot
@@ -764,7 +803,7 @@
 au BufNewFile,BufRead *.gsp			setf gsp
 
 " Group file
-au BufNewFile,BufRead /etc/group,/etc/group-,/etc/group.edit,/etc/gshadow,/etc/gshadow-,/etc/gshadow.edit,/var/backups/group.bak,/var/backups/gshadow.bak  setf group
+au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/etc/gshadow-,*/etc/gshadow.edit,*/var/backups/group.bak,*/var/backups/gshadow.bak  setf group
 
 " GTK RC
 au BufNewFile,BufRead .gtkrc,gtkrc		setf gtkrc
@@ -776,7 +815,7 @@
 au BufNewFile,BufRead *.hsc,*.hsm		setf hamster
 
 " Haskell
-au BufNewFile,BufRead *.hs,*.hs-boot 		setf haskell
+au BufNewFile,BufRead *.hs,*.hs-boot		setf haskell
 au BufNewFile,BufRead *.lhs			setf lhaskell
 au BufNewFile,BufRead *.chs			setf chaskell
 
@@ -823,14 +862,17 @@
 au BufNewFile,BufRead *.tmpl			setf htmlcheetah
 
 " Host config
-au BufNewFile,BufRead /etc/host.conf		setf hostconf
+au BufNewFile,BufRead */etc/host.conf		setf hostconf
 
 " Hosts access
-au BufNewFile,BufRead /etc/hosts.allow,/etc/hosts.deny  setf hostsaccess
+au BufNewFile,BufRead */etc/hosts.allow,*/etc/hosts.deny  setf hostsaccess
 
 " Hyper Builder
 au BufNewFile,BufRead *.hb			setf hb
 
+" Httest
+au BufNewFile,BufRead *.htt,*.htb		setf httest
+
 " Icon
 au BufNewFile,BufRead *.icn			setf icon
 
@@ -869,7 +911,9 @@
   " Cproto files have a comment in the first line and a function prototype in
   " the second line, it always ends in ";".  Indent files may also have
   " comments, thus we can't match comments to see the difference.
-  if getline(2) =~ ';$'
+  " IDL files can have a single ';' in the second line, require at least one
+  " chacter before the ';'.
+  if getline(2) =~ '.;$'
     setf cpp
   else
     exe 'setf ' . a:default
@@ -884,7 +928,24 @@
 au BufNewFile,BufRead *.inf,*.INF		setf inform
 
 " Initng
-au BufNewFile,BufRead /etc/initng/**/*.i,*.ii	setf initng
+au BufNewFile,BufRead */etc/initng/**/*.i,*.ii	setf initng
+
+" Innovation Data Processing
+au BufRead,BufNewFile UPSTREAM.DAT,upstream.dat 	setf upstreamdat
+au BufRead,BufNewFile UPSTREAM.*.DAT,upstream.*.dat 	setf upstreamdat
+au BufRead,BufNewFile *.UPSTREAM.DAT,*.upstream.dat 	setf upstreamdat
+au BufRead,BufNewFile UPSTREAM.LOG,upstream.log 	setf upstreamlog
+au BufRead,BufNewFile UPSTREAM.*.LOG,upstream.*.log 	setf upstreamlog
+au BufRead,BufNewFile *.UPSTREAM.LOG,*.upstream.log 	setf upstreamlog
+au BufRead,BufNewFile UPSTREAMInstall.log,upstreaminstall.log setf upstreaminstalllog
+au BufRead,BufNewFile UPSTREAMInstall.*.log,upstreaminstall.*.log setf upstreaminstalllog
+au BufRead,BufNewFile *.UPSTREAMInstall.log,*.upstreaminstall.log setf upstreaminstalllog
+au BufRead,BufNewFile USSERVER.LOG,usserver.log 	setf usserverlog
+au BufRead,BufNewFile USSERVER.*.LOG,usserver.*.log 	setf usserverlog
+au BufRead,BufNewFile *.USSERVER.LOG,*.usserver.log 	setf usserverlog
+au BufRead,BufNewFile USW2KAgt.log,usw2kagt.log 	setf usw2kagtlog
+au BufRead,BufNewFile USW2KAgt.*.log,usw2kagt.*.log 	setf usw2kagtlog
+au BufRead,BufNewFile *.USW2KAgt.log,*.usw2kagt.log 	setf usw2kagtlog
 
 " Ipfilter
 au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules	setf ipfilter
@@ -914,7 +975,7 @@
 au BufNewFile,BufRead *.jj,*.jjt		setf javacc
 
 " JavaScript, ECMAScript
-au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx	setf javascript
+au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx,*.json   setf javascript
 
 " Java Server Pages
 au BufNewFile,BufRead *.jsp			setf jsp
@@ -929,6 +990,9 @@
 " Jgraph
 au BufNewFile,BufRead *.jgr			setf jgraph
 
+" Jovial
+au BufNewFile,BufRead *.jov,*.j73,*.jovial	setf jovial
+
 " Kixtart
 au BufNewFile,BufRead *.kix			setf kix
 
@@ -948,7 +1012,7 @@
 au BufNewFile,BufRead *.latte,*.lte		setf latte
 
 " Limits
-au BufNewFile,BufRead /etc/limits		setf limits
+au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf	setf limits
 
 " LambdaProlog (*.mod too, see Modsim)
 au BufNewFile,BufRead *.sig			setf lprolog
@@ -963,10 +1027,10 @@
 au BufNewFile,BufRead *.lex,*.l			setf lex
 
 " Libao
-au BufNewFile,BufRead /etc/libao.conf,*/.libao	setf libao
+au BufNewFile,BufRead */etc/libao.conf,*/.libao	setf libao
 
 " Libsensors
-au BufNewFile,BufRead /etc/sensors.conf		setf sensors
+au BufNewFile,BufRead */etc/sensors.conf,*/etc/sensors3.conf	setf sensors
 
 " LFTP
 au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc	setf lftp
@@ -975,7 +1039,7 @@
 au BufNewFile,BufRead *.ll			setf lifelines
 
 " Lilo: Linux loader
-au BufNewFile,BufRead lilo.conf*		call s:StarSetf('lilo')
+au BufNewFile,BufRead lilo.conf			setf lilo
 
 " Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp)
 if has("fname_case")
@@ -997,10 +1061,10 @@
 au BufNewFile,BufRead */LiteStep/*/*.rc		setf litestep
 
 " Login access
-au BufNewFile,BufRead /etc/login.access		setf loginaccess
+au BufNewFile,BufRead */etc/login.access	setf loginaccess
 
 " Login defs
-au BufNewFile,BufRead /etc/login.defs		setf logindefs
+au BufNewFile,BufRead */etc/login.defs		setf logindefs
 
 " Logtalk
 au BufNewFile,BufRead *.lgt			setf logtalk
@@ -1031,7 +1095,7 @@
 au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
 
 " Mail aliases
-au BufNewFile,BufRead /etc/mail/aliases,/etc/aliases	setf mailaliases
+au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases	setf mailaliases
 
 " Mailcap configuration file
 au BufNewFile,BufRead .mailcap,mailcap		setf mailcap
@@ -1042,11 +1106,14 @@
 " MakeIndex
 au BufNewFile,BufRead *.ist,*.mst		setf ist
 
+" Mallard
+au BufNewFile,BufRead *.page			setf mallard
+
 " Manpage
 au BufNewFile,BufRead *.man			setf man
 
 " Man config
-au BufNewFile,BufRead /etc/man.conf,man.config	setf manconf
+au BufNewFile,BufRead */etc/man.conf,man.config	setf manconf
 
 " Maple V
 au BufNewFile,BufRead *.mv,*.mpl,*.mws		setf maple
@@ -1055,7 +1122,7 @@
 au BufNewFile,BufRead *.map			setf map
 
 " Markdown
-au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,README.md  setf markdown
+au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,README.md  setf markdown
 
 " Mason
 au BufNewFile,BufRead *.mason,*.mhtml		setf mason
@@ -1094,11 +1161,14 @@
 " Maya Extension Language
 au BufNewFile,BufRead *.mel			setf mel
 
+" Mercurial (hg) commit file
+au BufNewFile,BufRead hg-editor-*.txt		setf hgcommit
+
 " Mercurial config (looks like generic config file)
 au BufNewFile,BufRead *.hgrc,*hgrc		setf cfg
 
-" Messages
-au BufNewFile,BufRead /var/log/messages,/var/log/messages.*[0-9]  setf messages
+" Messages (logs mostly)
+au BufNewFile,BufRead */log/{auth,cron,daemon,debug,kern,lpr,mail,messages,news/news,syslog,user}{,.log,.err,.info,.warn,.crit,.notice}{,.[0-9]*,-[0-9]*} setf messages
 
 " Metafont
 au BufNewFile,BufRead *.mf			setf mf
@@ -1154,11 +1224,7 @@
 au BufNewFile,BufRead *.moo			setf moo
 
 " Modconf
-au BufNewFile,BufRead /etc/modules.conf,/etc/conf.modules	setf modconf
-au BufNewFile,BufRead /etc/modutils/*
-	\ if executable(expand("<afile>")) != 1
-	\|  call s:StarSetf('modconf')
-	\|endif
+au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf
 
 " Mplayer config
 au BufNewFile,BufRead mplayer.conf,*/.mplayer/config	setf mplayerconf
@@ -1175,8 +1241,11 @@
 " Mysql
 au BufNewFile,BufRead *.mysql			setf mysql
 
+" Mutt setup files (must be before catch *.rc)
+au BufNewFile,BufRead */etc/Muttrc.d/*		call s:StarSetf('muttrc')
+
 " M$ Resource files
-au BufNewFile,BufRead *.rc			setf rc
+au BufNewFile,BufRead *.rc,*.rch		setf rc
 
 " MuPAD source
 au BufRead,BufNewFile *.mu			setf mupad
@@ -1188,7 +1257,7 @@
 au BufNewFile,BufRead Mutt{ng,}rc		setf muttrc
 
 " Nano
-au BufNewFile,BufRead /etc/nanorc,.nanorc	setf nanorc
+au BufNewFile,BufRead */etc/nanorc,.nanorc	setf nanorc
 
 " Nastran input/DMAP
 "au BufNewFile,BufRead *.dat			setf nastran
@@ -1199,6 +1268,9 @@
 " Netrc
 au BufNewFile,BufRead .netrc			setf netrc
 
+" Ninja file
+au BufNewFile,BufRead *.ninja			setf ninja
+
 " Novell netware batch files
 au BufNewFile,BufRead *.ncf			setf ncf
 
@@ -1240,10 +1312,10 @@
 au BufNewFile,BufRead *.nqc			setf nqc
 
 " NSIS
-au BufNewFile,BufRead *.nsi			setf nsis
+au BufNewFile,BufRead *.nsi,*.nsh		setf nsis
 
 " OCAML
-au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly	setf ocaml
+au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit	setf ocaml
 
 " Occam
 au BufNewFile,BufRead *.occ			setf occam
@@ -1264,13 +1336,13 @@
 au BufNewFile,BufRead pf.conf			setf pf
 
 " Pam conf
-au BufNewFile,BufRead /etc/pam.conf		setf pamconf
+au BufNewFile,BufRead */etc/pam.conf		setf pamconf
 
 " PApp
 au BufNewFile,BufRead *.papp,*.pxml,*.pxsl	setf papp
 
 " Password file
-au BufNewFile,BufRead /etc/passwd,/etc/passwd-,/etc/passwd.edit,/etc/shadow,/etc/shadow-,/var/backups/passwd.bak,/var/backups/shadow.bak setf passwd
+au BufNewFile,BufRead */etc/passwd,*/etc/passwd-,*/etc/passwd.edit,*/etc/shadow,*/etc/shadow-,*/etc/shadow.edit,*/var/backups/passwd.bak,*/var/backups/shadow.bak setf passwd
 
 " Pascal (also *.p)
 au BufNewFile,BufRead *.pas			setf pascal
@@ -1402,7 +1474,7 @@
 
 " Obj 3D file format
 " TODO: is there a way to avoid MS-Windows Object files?
-au BufNewFile,BufRead *.obj         		setf obj
+au BufNewFile,BufRead *.obj			setf obj
 
 " Oracle Pro*C/C++
 au BufNewFile,BufRead *.pc			setf proc
@@ -1496,8 +1568,11 @@
 " Promela
 au BufNewFile,BufRead *.pml			setf promela
 
+" Google protocol buffers
+au BufNewFile,BufRead *.proto			setf proto
+
 " Protocols
-au BufNewFile,BufRead /etc/protocols		setf protocols
+au BufNewFile,BufRead */etc/protocols		setf protocols
 
 " Pyrex
 au BufNewFile,BufRead *.pyx,*.pxd		setf pyrex
@@ -1528,7 +1603,7 @@
 au BufNewFile,BufRead *.rib			setf rib
 
 " Rexx
-au BufNewFile,BufRead *.rexx,*.rex,*.jrexx,*.rxj,*.orx	setf rexx
+au BufNewFile,BufRead *.rex,*.orx,*.rxo,*.rxj,*.jrexx,*.rexxj,*.rexx,*.testGroup,*.testUnit	setf rexx
 
 " R (Splus)
 if has("fname_case")
@@ -1578,13 +1653,17 @@
     endif
   endfor
 
-  " Nothing recognized, assume Rexx
-  setf rexx
+  " Nothing recognized, use user default or assume Rexx
+  if exists("g:filetype_r")
+    exe "setf " . g:filetype_r
+  else
+    " Rexx used to be the default, but R appears to be much more popular.
+    setf r
+  endif
 endfunc
 
 " Remind
-au BufNewFile,BufRead .reminders*		call s:StarSetf('remind')
-au BufNewFile,BufRead *.remind,*.rem		setf remind
+au BufNewFile,BufRead .reminders,*.remind,*.rem		setf remind
 
 " Resolv.conf
 au BufNewFile,BufRead resolv.conf		setf resolv
@@ -1592,6 +1671,9 @@
 " Relax NG Compact
 au BufNewFile,BufRead *.rnc			setf rnc
 
+" Relax NG XML
+au BufNewFile,BufRead *.rng			setf rng
+
 " RPL/2
 au BufNewFile,BufRead *.rpl			setf rpl
 
@@ -1611,7 +1693,16 @@
 au BufNewFile,BufRead .irbrc,irbrc		setf ruby
 
 " Ruby
-au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec	setf ruby
+au BufNewFile,BufRead *.rb,*.rbw		setf ruby
+
+" RubyGems
+au BufNewFile,BufRead *.gemspec			setf ruby
+
+" Rackup
+au BufNewFile,BufRead *.ru			setf ruby
+
+" Bundler
+au BufNewFile,BufRead Gemfile			setf ruby
 
 " Ruby on Rails
 au BufNewFile,BufRead *.builder,*.rxml,*.rjs	setf ruby
@@ -1638,7 +1729,7 @@
 au BufNewFile,BufRead *.sci,*.sce		setf scilab
 
 " SCSS
-au BufNewFile,BufRead *.scss 			setf scss
+au BufNewFile,BufRead *.scss			setf scss
 
 " SD: Streaming Descriptors
 au BufNewFile,BufRead *.sd			setf sd
@@ -1675,26 +1766,27 @@
 endfunc
 
 " Services
-au BufNewFile,BufRead /etc/services		setf services
+au BufNewFile,BufRead */etc/services		setf services
 
 " Service Location config
-au BufNewFile,BufRead /etc/slp.conf		setf slpconf
+au BufNewFile,BufRead */etc/slp.conf		setf slpconf
 
 " Service Location registration
-au BufNewFile,BufRead /etc/slp.reg		setf slpreg
+au BufNewFile,BufRead */etc/slp.reg		setf slpreg
 
 " Service Location SPI
-au BufNewFile,BufRead /etc/slp.spi		setf slpspi
+au BufNewFile,BufRead */etc/slp.spi		setf slpspi
 
 " Setserial config
-au BufNewFile,BufRead /etc/serial.conf		setf setserial
+au BufNewFile,BufRead */etc/serial.conf		setf setserial
 
 " SGML
 au BufNewFile,BufRead *.sgm,*.sgml
 	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' |
 	\   setf sgmllnx |
 	\ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
-	\   let b:docbk_type="sgml" |
+	\   let b:docbk_type = "sgml" |
+	\   let b:docbk_ver = 4 |
 	\   setf docbk |
 	\ else |
 	\   setf sgml |
@@ -1714,7 +1806,7 @@
 " Gentoo ebuilds are actually bash scripts
 au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,.bash_logout*,*.bash,*.ebuild call SetFileTypeSH("bash")
 au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh")
-au BufNewFile,BufRead /etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
+au BufNewFile,BufRead */etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
 
 " Also called from scripts.vim.
 func! SetFileTypeSH(name)
@@ -1729,6 +1821,10 @@
     " Some .sh scripts contain #!/bin/tcsh.
     call SetFileTypeShell("tcsh")
     return
+  elseif a:name =~ '\<zsh\>'
+    " Some .sh scripts contain #!/bin/zsh.
+    call SetFileTypeShell("zsh")
+    return
   elseif a:name =~ '\<ksh\>'
     let b:is_kornshell = 1
     if exists("b:is_bash")
@@ -1797,12 +1893,12 @@
 endfunc
 
 " Z-Shell script
-au BufNewFile,BufRead .zprofile,/etc/zprofile,.zfbfmarks  setf zsh
+au BufNewFile,BufRead .zprofile,*/etc/zprofile,.zfbfmarks  setf zsh
 au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump*  call s:StarSetf('zsh')
-au BufNewFile,BufRead *.zsh 			setf zsh
+au BufNewFile,BufRead *.zsh			setf zsh
 
 " Scheme
-au BufNewFile,BufRead *.scm,*.ss		setf scheme
+au BufNewFile,BufRead *.scm,*.ss,*.rkt		setf scheme
 
 " Screen RC
 au BufNewFile,BufRead .screenrc,screenrc	setf screen
@@ -1829,6 +1925,8 @@
 au BufNewFile,BufRead *.cls
 	\ if getline(1) =~ '^%' |
 	\  setf tex |
+	\ elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' |
+	\  setf rexx |
 	\ else |
 	\  setf st |
 	\ endif
@@ -1868,7 +1966,7 @@
 let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
 func! s:FTRules()
   let path = expand('<amatch>:p')
-  if path =~ '^/etc/udev/\%(rules\.d/\)\=.*\.rules$'
+  if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
     setf udevrules
     return
   endif
@@ -1956,13 +2054,13 @@
 au BufNewFile,BufRead *.cm			setf voscm
 
 " Sysctl
-au BufNewFile,BufRead /etc/sysctl.conf		setf sysctl
+au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf	setf sysctl
 
 " Synopsys Design Constraints
 au BufNewFile,BufRead *.sdc			setf sdc
 
 " Sudoers
-au BufNewFile,BufRead /etc/sudoers,sudoers.tmp	setf sudoers
+au BufNewFile,BufRead */etc/sudoers,sudoers.tmp	setf sudoers
 
 " SVG (Scalable Vector Graphics)
 au BufNewFile,BufRead *.svg			setf svg
@@ -2089,6 +2187,9 @@
 " TPP - Text Presentation Program
 au BufNewFile,BufReadPost *.tpp			setf tpp
 
+" Treetop
+au BufRead,BufNewFile *.treetop			setf treetop
+
 " Trustees
 au BufNewFile,BufRead trustees.conf		setf trustees
 
@@ -2101,23 +2202,34 @@
 " TSS - Command Line (temporary)
 au BufNewFile,BufReadPost *.tsscl		setf tsscl
 
+" TWIG files
+au BufNewFile,BufReadPost *.twig		setf twig
+
 " Motif UIT/UIL files
 au BufNewFile,BufRead *.uit,*.uil		setf uil
 
 " Udev conf
-au BufNewFile,BufRead /etc/udev/udev.conf	setf udevconf
+au BufNewFile,BufRead */etc/udev/udev.conf	setf udevconf
 
 " Udev permissions
-au BufNewFile,BufRead /etc/udev/permissions.d/*.permissions setf udevperm
+au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm
 "
 " Udev symlinks config
-au BufNewFile,BufRead /etc/udev/cdsymlinks.conf	setf sh
+au BufNewFile,BufRead */etc/udev/cdsymlinks.conf	setf sh
 
 " UnrealScript
 au BufNewFile,BufRead *.uc			setf uc
 
 " Updatedb
-au BufNewFile,BufRead /etc/updatedb.conf	setf updatedb
+au BufNewFile,BufRead */etc/updatedb.conf	setf updatedb
+
+" Upstart (init(8)) config files
+au BufNewFile,BufRead */usr/share/upstart/*.conf               setf upstart
+au BufNewFile,BufRead */usr/share/upstart/*.override           setf upstart
+au BufNewFile,BufRead */etc/init/*.conf,*/etc/init/*.override  setf upstart
+au BufNewFile,BufRead */.init/*.conf,*/.init/*.override        setf upstart
+au BufNewFile,BufRead */.config/upstart/*.conf                 setf upstart
+au BufNewFile,BufRead */.config/upstart/*.override             setf upstart
 
 " Vera
 au BufNewFile,BufRead *.vr,*.vri,*.vrh		setf vera
@@ -2209,15 +2321,18 @@
 " XFree86 config
 au BufNewFile,BufRead XF86Config
 	\ if getline(1) =~ '\<XConfigurator\>' |
-	\   let b:xf86c_xfree86_version = 3 |
+	\   let b:xf86conf_xfree86_version = 3 |
 	\ endif |
 	\ setf xf86conf
+au BufNewFile,BufRead */xorg.conf.d/*.conf
+	\ let b:xf86conf_xfree86_version = 4 |
+	\ setf xf86conf
 
 " Xorg config
-au BufNewFile,BufRead xorg.conf,xorg.conf-4	let b:xf86c_xfree86_version = 4 | setf xf86conf
+au BufNewFile,BufRead xorg.conf,xorg.conf-4	let b:xf86conf_xfree86_version = 4 | setf xf86conf
 
 " Xinetd conf
-au BufNewFile,BufRead /etc/xinetd.conf		setf xinetd
+au BufNewFile,BufRead */etc/xinetd.conf		setf xinetd
 
 " XS Perl extension interface language
 au BufNewFile,BufRead *.xs			setf xs
@@ -2237,8 +2352,16 @@
   let n = 1
   while n < 100 && n < line("$")
     let line = getline(n)
-    if line =~ '<!DOCTYPE.*DocBook'
+    " DocBook 4 or DocBook 5.
+    let is_docbook4 = line =~ '<!DOCTYPE.*DocBook'
+    let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"'
+    if is_docbook4 || is_docbook5
       let b:docbk_type = "xml"
+      if is_docbook5
+	let b:docbk_ver = 5
+      else
+	let b:docbk_ver = 4
+      endif
       setf docbk
       return
     endif
@@ -2264,7 +2387,7 @@
 au BufNewFile,BufRead *.tpm			setf xml
 
 " Xdg menus
-au BufNewFile,BufRead /etc/xdg/menus/*.menu	setf xml
+au BufNewFile,BufRead */etc/xdg/menus/*.menu	setf xml
 
 " ATI graphics driver configuration
 au BufNewFile,BufRead fglrxrc			setf xml
@@ -2273,6 +2396,9 @@
 au BufNewFile,BufRead *.xlf			setf xml
 au BufNewFile,BufRead *.xliff			setf xml
 
+" XML User Interface Language
+au BufNewFile,BufRead *.xul			setf xml
+
 " X11 xmodmap (also see below)
 au BufNewFile,BufRead *Xmodmap			setf xmodmap
 
@@ -2312,6 +2438,12 @@
 " Yaml
 au BufNewFile,BufRead *.yaml,*.yml		setf yaml
 
+" yum conf (close enough to dosini)
+au BufNewFile,BufRead */etc/yum.conf		setf dosini
+
+" Zimbu
+au BufNewFile,BufRead *.zu			setf zimbu
+
 " Zope
 "   dtml (zope dynamic template markup language), pt (zope page template),
 "   cpt (zope form controller page template)
@@ -2348,8 +2480,9 @@
 " Most of these should call s:StarSetf() to avoid names ending in .gz and the
 " like are used.
 
-" More Apache files.
-au BufNewFile,BufRead /etc/apache2/conf.*/*,/etc/apache2/sites-*/*,/etc/apache2/mods-*/*		call s:StarSetf('apache')
+" More Apache config files
+au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf*	call s:StarSetf('apache')
+au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf*		call s:StarSetf('apache')
 
 " Asterisk config file
 au BufNewFile,BufRead *asterisk/*.conf*		call s:StarSetf('asterisk')
@@ -2361,6 +2494,11 @@
 " BIND zone
 au BufNewFile,BufRead */named/db.*,*/bind/db.*	call s:StarSetf('bindzone')
 
+" Calendar
+au BufNewFile,BufRead */.calendar/*,
+	\*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
+	\					call s:StarSetf('calendar')
+
 " Changelog
 au BufNewFile,BufRead [cC]hange[lL]og*
 	\ if getline(1) =~ '; urgency='
@@ -2370,10 +2508,10 @@
 	\|endif
 
 " Crontab
-au BufNewFile,BufRead crontab,crontab.*,/etc/cron.d/*		call s:StarSetf('crontab')
+au BufNewFile,BufRead crontab,crontab.*,*/etc/cron.d/*		call s:StarSetf('crontab')
 
-" Debian Sources.list
-au BufNewFile,BufRead /etc/apt/sources.list.d/*	call s:StarSetf('debsources')
+" dnsmasq(8) configuration
+au BufNewFile,BufRead */etc/dnsmasq.d/*		call s:StarSetf('dnsmasq')
 
 " Dracula
 au BufNewFile,BufRead drac.*			call s:StarSetf('dracula')
@@ -2390,7 +2528,7 @@
 	\|endif
 
 " Gedcom
-au BufNewFile,BufRead /tmp/lltmp*		call s:StarSetf('gedcom')
+au BufNewFile,BufRead */tmp/lltmp*		call s:StarSetf('gedcom')
 
 " GTK RC
 au BufNewFile,BufRead .gtkrc*,gtkrc*		call s:StarSetf('gtkrc')
@@ -2407,8 +2545,11 @@
 " Kconfig
 au BufNewFile,BufRead Kconfig.*			call s:StarSetf('kconfig')
 
+" Lilo: Linux loader
+au BufNewFile,BufRead lilo.conf*		call s:StarSetf('lilo')
+
 " Logcheck
-au BufNewFile,BufRead /etc/logcheck/*.d*/*	call s:StarSetf('logcheck')
+au BufNewFile,BufRead */etc/logcheck/*.d*/*	call s:StarSetf('logcheck')
 
 " Makefile
 au BufNewFile,BufRead [mM]akefile*		call s:StarSetf('make')
@@ -2420,7 +2561,11 @@
 au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\}	setf mail
 
 " Modconf
-au BufNewFile,BufRead /etc/modprobe.*		call s:StarSetf('modconf')
+au BufNewFile,BufRead */etc/modutils/*
+	\ if executable(expand("<afile>")) != 1
+	\|  call s:StarSetf('modconf')
+	\|endif
+au BufNewFile,BufRead */etc/modprobe.*		call s:StarSetf('modconf')
 
 " Mutt setup file
 au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc*	call s:StarSetf('muttrc')
@@ -2430,7 +2575,7 @@
 au BufNewFile,BufRead tmac.*			call s:StarSetf('nroff')
 
 " Pam conf
-au BufNewFile,BufRead /etc/pam.d/*		call s:StarSetf('pamconf')
+au BufNewFile,BufRead */etc/pam.d/*		call s:StarSetf('pamconf')
 
 " Printcap and Termcap
 au BufNewFile,BufRead *printcap*
@@ -2442,6 +2587,23 @@
 	\|  let b:ptcap_type = "term" | call s:StarSetf('ptcap')
 	\|endif
 
+" ReDIF
+" Only used when the .rdf file was not detected to be XML.
+au BufRead,BufNewFile *.rdf			call s:Redif()
+func! s:Redif()
+  let lnum = 1
+  while lnum <= 5 && lnum < line('$')
+    if getline(lnum) =~ "^\ctemplate-type:"
+      setf redif
+      return
+    endif
+    let lnum = lnum + 1
+  endwhile
+endfunc
+
+" Remind
+au BufNewFile,BufRead .reminders*		call s:StarSetf('remind')
+
 " Vim script
 au BufNewFile,BufRead *vimrc*			call s:StarSetf('vim')
 
@@ -2453,10 +2615,10 @@
 
 " XFree86 config
 au BufNewFile,BufRead XF86Config-4*
-	\ let b:xf86c_xfree86_version = 4 | call s:StarSetf('xf86conf')
+	\ let b:xf86conf_xfree86_version = 4 | call s:StarSetf('xf86conf')
 au BufNewFile,BufRead XF86Config*
 	\ if getline(1) =~ '\<XConfigurator\>'
-	\|  let b:xf86c_xfree86_version = 3
+	\|  let b:xf86conf_xfree86_version = 3
 	\|endif
 	\|call s:StarSetf('xf86conf')
 
@@ -2464,28 +2626,37 @@
 au BufNewFile,BufRead *xmodmap*			call s:StarSetf('xmodmap')
 
 " Xinetd conf
-au BufNewFile,BufRead /etc/xinetd.d/*		call s:StarSetf('xinetd')
+au BufNewFile,BufRead */etc/xinetd.d/*		call s:StarSetf('xinetd')
+
+" yum conf (close enough to dosini)
+au BufNewFile,BufRead */etc/yum.repos.d/*	call s:StarSetf('dosini')
 
 " Z-Shell script
 au BufNewFile,BufRead zsh*,zlog*		call s:StarSetf('zsh')
 
 
+" Plain text files, needs to be far down to not override others.  This avoids
+" the "conf" type being used if there is a line starting with '#'.
+au BufNewFile,BufRead *.txt,*.text		setf text
+
 
 " Use the filetype detect plugins.  They may overrule any of the previously
 " detected filetypes.
 runtime! ftdetect/*.vim
 
+" NOTE: The above command could have ended the filetypedetect autocmd group
+" and started another one. Let's make sure it has ended to get to a consistent
+" state.
+augroup END
 
 " Generic configuration file (check this last, it's just guessing!)
-au BufNewFile,BufRead,StdinReadPost *
+au filetypedetect BufNewFile,BufRead,StdinReadPost *
 	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
 	\    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
 	\	|| getline(4) =~ '^#' || getline(5) =~ '^#') |
 	\   setf conf |
 	\ endif
 
-augroup END
-
 
 " If the GUI is already running, may still need to install the Syntax menu.
 " Don't do it when the 'M' flag is included in 'guioptions'.
diff -Naur vim73.orig/runtime/ftplugin/aap.vim vim73/runtime/ftplugin/aap.vim
--- vim73.orig/runtime/ftplugin/aap.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/aap.vim	2013-08-04 19:09:08.220617713 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	Aap recipe
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2003 Nov 04
+" Last Change:	2013 Apr 05
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -19,7 +19,7 @@
 setlocal fo-=t fo+=croql
 
 " Set 'comments' to format dashed lists in comments.
-setlocal comments=s:#\ -,m:#\ \,e:#,n:#,fb:-
+setlocal comments=s:#\ -,m:#\ \ ,e:#,n:#,fb:-
 
 " Expand tabs to spaces to avoid trouble.
 setlocal expandtab
diff -Naur vim73.orig/runtime/ftplugin/abap.vim vim73/runtime/ftplugin/abap.vim
--- vim73.orig/runtime/ftplugin/abap.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/ftplugin/abap.vim	2013-08-04 19:09:08.220617713 +0000
@@ -0,0 +1,29 @@
+" Vim filetype plugin file
+" Language:	ABAP
+" Author:	Steven Oliver <oliver.steven@gmail.com>
+" Copyright:	Copyright (c) 2013 Steven Oliver
+" License:	You may redistribute this under the same terms as Vim itself
+" --------------------------------------------------------------------------
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal softtabstop=2 shiftwidth=2
+setlocal suffixesadd=.abap
+
+" Windows allows you to filter the open file dialog
+if has("gui_win32") && !exists("b:browsefilter")
+  let b:browsefilter = "ABAP Source Files (*.abap)\t*.abap\n" .
+                     \ "All Files (*.*)\t*.*\n"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 sts=4 et tw=80 :
diff -Naur vim73.orig/runtime/ftplugin/abaqus.vim vim73/runtime/ftplugin/abaqus.vim
--- vim73.orig/runtime/ftplugin/abaqus.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/abaqus.vim	2013-08-04 19:09:08.223951036 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:     Abaqus finite element input file (www.abaqus.com)
 " Maintainer:   Carl Osterwisch <osterwischc@asme.org>
-" Last Change:  2008 Oct 5
+" Last Change:  2012 Apr 30
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin") | finish | endif
@@ -51,7 +51,7 @@
     \ "Abaqus Results (*.dat)\t*.dat\n" .
     \ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" .
     \ "All Files (*.*)\t*.*\n"
-    let b:undo_ftplugin .= "|unlet b:browsefilter"
+    let b:undo_ftplugin .= "|unlet! b:browsefilter"
 endif
 
 " Define patterns for the matchit plugin
@@ -62,7 +62,7 @@
     \ '\*assembly:\*end\s*assembly,' .
     \ '\*instance:\*end\s*instance,' .
     \ '\*step:\*end\s*step'
-    let b:undo_ftplugin .= "|unlet b:match_ignorecase b:match_words"
+    let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words"
 endif
 
 " Define keys used to move [count] keywords backward or forward.
@@ -85,5 +85,13 @@
 let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]"
     \ . "|unmap <buffer> <LocalLeader><LocalLeader>"
 
+" Undo must be done in nocompatible mode for <LocalLeader>.
+let b:undo_ftplugin = "let s:cpo_save = &cpoptions|"
+    \ . "set cpoptions&vim|"
+    \ . b:undo_ftplugin
+    \ . "|let &cpoptions = s:cpo_save"
+    \ . "|unlet s:cpo_save"
+
 " Restore saved compatibility options
 let &cpoptions = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/ada.vim vim73/runtime/ftplugin/ada.vim
--- vim73.orig/runtime/ftplugin/ada.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/ada.vim	2013-08-04 19:09:08.223951036 +0000
@@ -7,7 +7,7 @@
 "		Neil Bird <neil@fnxweb.com>
 "      $Author: krischik $
 "	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
-"      Version: 4.6
+"      Version: 4.6 with patch from David Bürgin
 "    $Revision: 887 $
 "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $
 "      History: 24.05.2006 MK Unified Headers
@@ -42,7 +42,7 @@
 
 " Section: Comments  {{{1
 "
-setlocal comments=O:--,:--\ \
+setlocal comments=O:--,:--\ \ 
 setlocal commentstring=--\ \ %s
 setlocal complete=.,w,b,u,t,i
 
diff -Naur vim73.orig/runtime/ftplugin/ant.vim vim73/runtime/ftplugin/ant.vim
--- vim73.orig/runtime/ftplugin/ant.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/ant.vim	2013-08-04 19:09:08.227284360 +0000
@@ -41,3 +41,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/art.vim vim73/runtime/ftplugin/art.vim
--- vim73.orig/runtime/ftplugin/art.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/art.vim	2013-08-04 19:09:08.227284360 +0000
@@ -12,5 +12,4 @@
 run ftplugin/lisp.vim
 
 setl lw-=if
-setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,
-      \for,schema,while
+setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,for,schema,while
diff -Naur vim73.orig/runtime/ftplugin/aspvbs.vim vim73/runtime/ftplugin/aspvbs.vim
--- vim73.orig/runtime/ftplugin/aspvbs.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/aspvbs.vim	2013-08-04 19:09:08.230617683 +0000
@@ -57,3 +57,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/c.vim vim73/runtime/ftplugin/c.vim
--- vim73.orig/runtime/ftplugin/c.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/c.vim	2013-08-04 19:09:08.233951006 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2007 Sep 25
+" Last Change:	2012 Jul 10
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -36,11 +36,11 @@
 
 " When the matchit plugin is loaded, this makes the % command skip parens and
 " braces in comments.
-let b:match_words = &matchpairs
+let b:match_words = &matchpairs . ',^\s*#\s*if\(\|def\|ndef\)\>:^\s*#\s*elif\>:^\s*#\s*else\>:^\s*#\s*endif\>'
 let b:match_skip = 's:comment\|string\|character'
 
 " Win32 can filter files in the browse dialog
-if has("gui_win32") && !exists("b:browsefilter")
+if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
   if &ft == "cpp"
     let b:browsefilter = "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
 	  \ "C Header Files (*.h)\t*.h\n" .
diff -Naur vim73.orig/runtime/ftplugin/changelog.vim vim73/runtime/ftplugin/changelog.vim
--- vim73.orig/runtime/ftplugin/changelog.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/changelog.vim	2013-08-04 19:09:08.240617653 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:         generic Changelog file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2009-05-25
+" Latest Revision:  2012-08-23
 " Variables:
 "   g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) -
 "       description: the timeformat used in ChangeLog entries.
@@ -99,16 +99,17 @@
   function! s:try_reading_file(path)
     try
       return readfile(a:path)
+    catch
+      return []
     endtry
-    return []
   endfunction
 
   function! s:passwd_field(line, field)
     let fields = split(a:line, ':', 1)
-    if len(fields) < field
+    if len(fields) < a:field
       return ""
     endif
-    return fields[field - 1]
+    return fields[a:field - 1]
   endfunction
 
   function! s:capitalize(word)
@@ -178,7 +179,7 @@
     " Look for an entry for today by our user.
     let date = strftime(g:changelog_dateformat)
     let search = s:substitute_items(g:changelog_date_entry_search, date,
-                                  \ g:changelog_username)
+                                  \ s:username())
     if search(search) > 0
       " Ok, now we look for the end of the date entry, and add an entry.
       call cursor(nextnonblank(line('.') + 1), 1)
@@ -197,7 +198,7 @@
 
       " No entry today, so create a date-user header and insert an entry.
       let todays_entry = s:substitute_items(g:changelog_new_date_format,
-                                          \ date, g:changelog_username)
+                                          \ date, s:username())
       " Make sure we have a cursor positioning.
       if stridx(todays_entry, '{cursor}') == -1
         let todays_entry = todays_entry . '{cursor}'
diff -Naur vim73.orig/runtime/ftplugin/clojure.vim vim73/runtime/ftplugin/clojure.vim
--- vim73.orig/runtime/ftplugin/clojure.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/ftplugin/clojure.vim	2013-08-04 19:09:08.240617653 +0000
@@ -0,0 +1,79 @@
+" Vim filetype plugin file
+" Language:     Clojure
+" Author:       Meikel Brandmeyer <mb@kotka.de>
+"
+" Maintainer:   Sung Pae <self@sungpae.com>
+" URL:          https://github.com/guns/vim-clojure-static
+" License:      Same as Vim
+" Last Change:  30 January 2013
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+    finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+let b:undo_ftplugin = 'setlocal define< formatoptions< comments< commentstring<'
+
+" There will be false positives, but this is better than missing the whole set
+" of user-defined def* definitions.
+setlocal define=\\v[(/]def(ault)@!\\S*
+
+" Remove 't' from 'formatoptions' to avoid auto-wrapping code. The '+=croql'
+" is standard ftplugin boilerplate, although it is arguably intrusive.
+setlocal formatoptions-=t formatoptions+=croql
+
+" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
+setlocal comments=n:;
+setlocal commentstring=;\ %s
+
+" Provide insert mode completions for special forms and clojure.core. As
+" 'omnifunc' is set by popular Clojure REPL client plugins, we also set
+" 'completefunc' so that the user has some form of completion available when
+" 'omnifunc' is set and no REPL connection exists.
+for s:setting in ['omnifunc', 'completefunc']
+    if exists('&' . s:setting) && empty(eval('&' . s:setting))
+        execute 'setlocal ' . s:setting . '=clojurecomplete#Complete'
+        let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<'
+    endif
+endfor
+
+" Take all directories of the CLOJURE_SOURCE_DIRS environment variable
+" and add them to the path option.
+"
+" This is a legacy option for VimClojure users.
+if exists('$CLOJURE_SOURCE_DIRS')
+    for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':')
+        let s:dir = fnameescape(s:dir)
+        " Whitespace escaping for Windows
+        let s:dir = substitute(s:dir, '\', '\\\\', 'g')
+        let s:dir = substitute(s:dir, '\ ', '\\ ', 'g')
+        execute "setlocal path+=" . s:dir . "/**"
+    endfor
+    let b:undo_ftplugin .= ' | setlocal path<'
+endif
+
+" Skip brackets in ignored syntax regions when using the % command
+if exists('loaded_matchit')
+    let b:match_words = &matchpairs
+    let b:match_skip = 's:comment\|string\|regex\|character'
+    let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip'
+endif
+
+" Win32 can filter files in the browse dialog
+if has("gui_win32") && !exists("b:browsefilter")
+    let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
+                       \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
+                       \ "Java Source Files (*.java)\t*.java\n" .
+                       \ "All Files (*.*)\t*.*\n"
+    let b:undo_ftplugin .= ' | unlet! b:browsefilter'
+endif
+
+let &cpo = s:cpo_save
+
+unlet! s:cpo_save s:setting s:dir
+
+" vim:sts=4 sw=4 et:
diff -Naur vim73.orig/runtime/ftplugin/config.vim vim73/runtime/ftplugin/config.vim
--- vim73.orig/runtime/ftplugin/config.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/config.vim	2013-08-04 19:09:08.243950976 +0000
@@ -39,3 +39,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/cs.vim vim73/runtime/ftplugin/cs.vim
--- vim73.orig/runtime/ftplugin/cs.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/cs.vim	2013-08-04 19:09:08.247284300 +0000
@@ -10,6 +10,8 @@
 
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Set 'formatoptions' to break comment lines but not other lines,
 " and insert the comment leader when hitting <CR> or using "o".
@@ -22,3 +24,6 @@
     let b:browsefilter = "C# Source Files (*.cs)\t*.cs\n" .
 		       \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/ftplugin/csc.vim vim73/runtime/ftplugin/csc.vim
--- vim73.orig/runtime/ftplugin/csc.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/csc.vim	2013-08-04 19:09:08.250617623 +0000
@@ -24,3 +24,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/csh.vim vim73/runtime/ftplugin/csh.vim
--- vim73.orig/runtime/ftplugin/csh.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/csh.vim	2013-08-04 19:09:08.250617623 +0000
@@ -45,3 +45,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/cucumber.vim vim73/runtime/ftplugin/cucumber.vim
--- vim73.orig/runtime/ftplugin/cucumber.vim	2010-08-09 03:01:52.000000000 +0000
+++ vim73/runtime/ftplugin/cucumber.vim	2013-08-04 19:09:08.250617623 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	Cucumber
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 Aug 09
+" Last Change:	2013 Jun 01
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -9,6 +9,9 @@
 endif
 let b:did_ftplugin = 1
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 setlocal formatoptions-=t formatoptions+=croql
 setlocal comments=:# commentstring=#\ %s
 setlocal omnifunc=CucumberComplete
@@ -18,11 +21,27 @@
 let b:cucumber_root = expand('%:p:h:s?.*[\/]\%(features\|stories\)\zs[\/].*??')
 
 if !exists("g:no_plugin_maps") && !exists("g:no_cucumber_maps")
-  nmap <silent><buffer> <C-]>       :<C-U>exe <SID>jump('edit',v:count)<CR>
-  nmap <silent><buffer> <C-W>]      :<C-U>exe <SID>jump('split',v:count)<CR>
-  nmap <silent><buffer> <C-W><C-]>  :<C-U>exe <SID>jump('split',v:count)<CR>
-  nmap <silent><buffer> <C-W>}      :<C-U>exe <SID>jump('pedit',v:count)<CR>
-  let b:undo_ftplugin .= "| sil! iunmap! <C-]>| sil! iunmap! <C-W>]| sil! iunmap! <C-W><C-]>| sil! iunmap! <C-W>}"
+  nnoremap <silent><buffer> <C-]>       :<C-U>exe <SID>jump('edit',v:count)<CR>
+  nnoremap <silent><buffer> [<C-D>      :<C-U>exe <SID>jump('edit',v:count)<CR>
+  nnoremap <silent><buffer> ]<C-D>      :<C-U>exe <SID>jump('edit',v:count)<CR>
+  nnoremap <silent><buffer> <C-W>]      :<C-U>exe <SID>jump('split',v:count)<CR>
+  nnoremap <silent><buffer> <C-W><C-]>  :<C-U>exe <SID>jump('split',v:count)<CR>
+  nnoremap <silent><buffer> <C-W>d      :<C-U>exe <SID>jump('split',v:count)<CR>
+  nnoremap <silent><buffer> <C-W><C-D>  :<C-U>exe <SID>jump('split',v:count)<CR>
+  nnoremap <silent><buffer> <C-W>}      :<C-U>exe <SID>jump('pedit',v:count)<CR>
+  nnoremap <silent><buffer> [d          :<C-U>exe <SID>jump('pedit',v:count)<CR>
+  nnoremap <silent><buffer> ]d          :<C-U>exe <SID>jump('pedit',v:count)<CR>
+  let b:undo_ftplugin .=
+        \ "|sil! nunmap <buffer> <C-]>" .
+        \ "|sil! nunmap <buffer> [<C-D>" .
+        \ "|sil! nunmap <buffer> ]<C-D>" .
+        \ "|sil! nunmap <buffer> <C-W>]" .
+        \ "|sil! nunmap <buffer> <C-W><C-]>" .
+        \ "|sil! nunmap <buffer> <C-W>d" .
+        \ "|sil! nunmap <buffer> <C-W><C-D>" .
+        \ "|sil! nunmap <buffer> <C-W>}" .
+        \ "|sil! nunmap <buffer> [d" .
+        \ "|sil! nunmap <buffer> ]d"
 endif
 
 function! s:jump(command,count)
@@ -38,7 +57,7 @@
 endfunction
 
 function! s:allsteps()
-  let step_pattern = '\C^\s*\K\k*\>\s*\zs\S.\{-\}\ze\s*\%(do\|{\)\s*\%(|[^|]*|\s*\)\=\%($\|#\)'
+  let step_pattern = '\C^\s*\K\k*\>\s*(\=\s*\zs\S.\{-\}\ze\s*)\=\s*\%(do\|{\)\s*\%(|[^|]*|\s*\)\=\%($\|#\)'
   let steps = []
   for file in split(glob(b:cucumber_root.'/**/*.rb'),"\n")
     let lines = readfile(file)
@@ -55,7 +74,7 @@
 endfunction
 
 function! s:steps(lnum)
-  let c = indent(a:lnum) + 1
+  let c = match(getline(a:lnum), '\S') + 1
   while synIDattr(synID(a:lnum,c,1),'name') !~# '^$\|Region$'
     let c = c + 1
   endwhile
@@ -129,4 +148,7 @@
   return sort(steps)
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set sts=2 sw=2:
diff -Naur vim73.orig/runtime/ftplugin/debchangelog.vim vim73/runtime/ftplugin/debchangelog.vim
--- vim73.orig/runtime/ftplugin/debchangelog.vim	2010-07-21 18:55:51.000000000 +0000
+++ vim73/runtime/ftplugin/debchangelog.vim	2013-08-04 19:09:08.253950946 +0000
@@ -3,8 +3,8 @@
 " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers:   Michael Piefel <piefel@informatik.hu-berlin.de>
 "                       Stefano Zacchiroli <zack@debian.org>
-" Last Change:  2010-07-11
-" License:      GNU GPL, version 2.0 or later
+" Last Change:  2012-01-31
+" License:      Vim License
 " URL:          http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/debchangelog.vim
 
 " Bug completion requires apt-listbugs installed for Debian packages or
diff -Naur vim73.orig/runtime/ftplugin/docbk.vim vim73/runtime/ftplugin/docbk.vim
--- vim73.orig/runtime/ftplugin/docbk.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/ftplugin/docbk.vim	2013-08-04 19:09:08.260617593 +0000
@@ -0,0 +1,24 @@
+" Vim filetype plugin file
+" Language:	    DocBook
+" Maintainer:	    Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2012-04-25
+
+if exists('b:did_ftplugin')
+  finish
+endif
+
+if !exists('b:docbk_type')
+  if expand('%:e') == 'sgml'
+    let b:docbk_type = 'sgml'
+  else
+    let b:docbk_type = 'xml'
+  endif
+endif
+
+if b:docbk_type == 'sgml'
+  runtime! ftplugin/sgml.vim ftplugin/sgml_*.vim ftplugin/sgml/*.vim
+else
+  runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
+endif
+
+let b:undo_ftplugin = "unlet! b:docbk_type"
diff -Naur vim73.orig/runtime/ftplugin/dosbatch.vim vim73/runtime/ftplugin/dosbatch.vim
--- vim73.orig/runtime/ftplugin/dosbatch.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/dosbatch.vim	2013-08-04 19:09:08.263950916 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:    MS-DOS .bat files
 " Maintainer:  Mike Williams <mrw@eandem.co.uk>
-" Last Change: 27th May 2009
+" Last Change: 8th May 2012
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,6 +11,9 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " BAT comment formatting
 setlocal comments=b:rem,b:@rem,b:REM,b:@REM,:::
 setlocal formatoptions-=t formatoptions+=rol
@@ -19,3 +22,9 @@
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "DOS Batch Files (*.bat, *.cmd)\t*.bat;*.cmd\nAll Files (*.*)\t*.*\n"
 endif
+
+let b:undo_ftplugin = "setlocal comments< formatoptions<"
+    \ . "| unlet! b:browsefiler"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/dtd.vim vim73/runtime/ftplugin/dtd.vim
--- vim73.orig/runtime/ftplugin/dtd.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/dtd.vim	2013-08-04 19:09:08.263950916 +0000
@@ -37,3 +37,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/erlang.vim vim73/runtime/ftplugin/erlang.vim
--- vim73.orig/runtime/ftplugin/erlang.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/ftplugin/erlang.vim	2013-08-04 19:09:08.267284239 +0000
@@ -0,0 +1,87 @@
+" Vim ftplugin file
+" Language:     Erlang
+" Author:       Oscar Hellstrm <oscar@oscarh.net>
+" Contributors: Ricardo Catalinas Jimnez <jimenezrick@gmail.com>
+"               Eduardo Lopez (http://github.com/tapichu)
+" License:      Vim license
+" Version:      2012/01/25
+
+if exists('b:did_ftplugin')
+	finish
+else
+	let b:did_ftplugin = 1
+endif
+
+if exists('s:did_function_definitions')
+	call s:SetErlangOptions()
+	finish
+else
+	let s:did_function_definitions = 1
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if !exists('g:erlang_keywordprg')
+	let g:erlang_keywordprg = 'erl -man'
+endif
+
+if !exists('g:erlang_folding')
+	let g:erlang_folding = 0
+endif
+
+let s:erlang_fun_begin = '^\a\w*(.*$'
+let s:erlang_fun_end   = '^[^%]*\.\s*\(%.*\)\?$'
+
+function s:SetErlangOptions()
+	if g:erlang_folding
+		setlocal foldmethod=expr
+		setlocal foldexpr=GetErlangFold(v:lnum)
+		setlocal foldtext=ErlangFoldText()
+	endif
+
+	setlocal comments=:%%%,:%%,:%
+	setlocal commentstring=%%s
+
+	setlocal formatoptions+=ro
+	let &l:keywordprg = g:erlang_keywordprg
+endfunction
+
+function GetErlangFold(lnum)
+	let lnum = a:lnum
+	let line = getline(lnum)
+
+	if line =~ s:erlang_fun_end
+		return '<1'
+	endif
+
+	if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
+		return '1'
+	endif
+
+	if line =~ s:erlang_fun_begin
+		return '>1'
+	endif
+
+	return '='
+endfunction
+
+function ErlangFoldText()
+	let line    = getline(v:foldstart)
+	let foldlen = v:foldend - v:foldstart + 1
+	let lines   = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
+	if foldlen < 10
+		let lines = ' ' . lines
+	endif
+	let retval = '+' . v:folddashes . lines
+
+	return retval
+endfunction
+
+call s:SetErlangOptions()
+
+let b:undo_ftplugin = "setlocal foldmethod< foldexpr< foldtext<"
+	\ . " comments< commentstring< formatoptions<"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/eruby.vim vim73/runtime/ftplugin/eruby.vim
--- vim73.orig/runtime/ftplugin/eruby.vim	2010-05-27 13:53:42.000000000 +0000
+++ vim73/runtime/ftplugin/eruby.vim	2013-08-04 19:09:08.270617563 +0000
@@ -1,9 +1,7 @@
 " Vim filetype plugin
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2010 Apr 15
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 " Only do this when not done yet for this buffer
@@ -23,13 +21,12 @@
   let g:eruby_default_subtype = "html"
 endif
 
-if !exists("b:eruby_subtype")
+if &filetype =~ '^eruby\.'
+  let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
+elseif !exists("b:eruby_subtype")
   let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
   let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
   if b:eruby_subtype == ''
-    let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
-  endif
-  if b:eruby_subtype == ''
     let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+$')
   endif
   if b:eruby_subtype == 'rhtml'
@@ -100,5 +97,6 @@
       \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim: nowrap sw=2 sts=2 ts=8:
diff -Naur vim73.orig/runtime/ftplugin/falcon.vim vim73/runtime/ftplugin/falcon.vim
--- vim73.orig/runtime/ftplugin/falcon.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/ftplugin/falcon.vim	2013-08-04 19:09:08.270617563 +0000
@@ -0,0 +1,48 @@
+" Vim filetype plugin file
+" Language:     Falcon
+" Author:       Steven Oliver <oliver.steven@gmail.com>
+" Copyright:    Copyright (c) 2009-2013 Steven Oliver
+" License:      You may redistribute this under the same terms as Vim itself
+" --------------------------------------------------------------------------
+
+" Only do this when not done yet for this buffer
+if (exists("b:did_ftplugin"))
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal softtabstop=4 shiftwidth=4 fileencoding=utf-8
+setlocal suffixesadd=.fal,.ftd
+
+" Matchit support
+if exists("loaded_matchit") && !exists("b:match_words")
+  let b:match_ignorecase = 0
+
+  let b:match_words =
+	\ '\<\%(if\|case\|while\|until\|for\|do\|class\)\>=\@!' .
+	\ ':' .
+	\ '\<\%(else\|elsif\|when\)\>' .
+	\ ':' .
+	\ '\<end\>' .
+	\ ',{:},\[:\],(:)'
+endif
+
+setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+" Windows allows you to filter the open file dialog
+if has("gui_win32") && !exists("b:browsefilter")
+  let b:browsefilter = "Falcon Source Files (*.fal *.ftd)\t*.fal;*.ftd\n" .
+                     \ "All Files (*.*)\t*.*\n"
+endif
+
+let b:undo_ftplugin = "setlocal tabstop< shiftwidth< expandtab< fileencoding<"
+	\ . " suffixesadd< comments<"
+	\ . "| unlet! b:browsefiler"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 sts=4 et tw=80 :
diff -Naur vim73.orig/runtime/ftplugin/fortran.vim vim73/runtime/ftplugin/fortran.vim
--- vim73.orig/runtime/ftplugin/fortran.vim	2010-07-24 10:40:58.000000000 +0000
+++ vim73/runtime/ftplugin/fortran.vim	2013-08-04 19:09:08.273950886 +0000
@@ -1,17 +1,21 @@
 " Vim settings file
-" Language:	Fortran90 (and Fortran95, Fortran77, F and elf90)
-" Version:	0.46
-" Last Change:	2010 July 24
+" Language:	Fortran 2008 (and older: Fortran 2003, 95, 90, 77, 66)
+" Version:	0.48
+" Last Change:	2012 Apr. 18
 " Maintainer:	Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
 " Usage:	Do :help fortran-plugin from Vim
 " Credits:
-" Useful suggestions were made by Stefano Zacchiroli and Hendrik Merx.
+" Useful suggestions were made by Stefano Zacchiroli, Hendrik Merx, and Ben
+" Fritz.
 
 " Only do these settings when not done yet for this buffer
 if exists("b:did_ftplugin")
   finish
 endif
 
+let s:cposet=&cpoptions
+set cpoptions&vim
+
 " Don't do other file type settings for this buffer
 let b:did_ftplugin = 1
 
@@ -25,7 +29,7 @@
     " User guarantees fixed source form
     let b:fortran_fixed_source = 1
   else
-    " f90 and f95 allow both fixed and free source form
+    " Modern Fortran allows both fixed and free source form
     " assume fixed source form unless signs of free source form
     " are detected in the first five columns of the first s:lmax lines
     " Detection becomes more accurate and time-consuming if more lines
@@ -76,10 +80,7 @@
 setlocal fo+=tcql
 
 setlocal include=^\\c#\\=\\s*include\\s\\+
-setlocal suffixesadd+=.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp
-
-let s:cposet=&cpoptions
-set cpoptions-=C
+setlocal suffixesadd+=.f08,.f03,.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp
 
 " Define patterns for the matchit plugin
 if !exists("b:match_words")
@@ -89,6 +90,7 @@
   let s:notprocedure = '\%(\s\+procedure\>\)\@!'
   let b:match_ignorecase = 1
   let b:match_words =
+    \ '(:),' .
     \ '\<select\s*case\>:' . s:notselect. '\<case\>:\<end\s*select\>,' .
     \ s:notelse . '\<if\s*(.\+)\s*then\>:' .
     \ '\<else\s*\%(if\s*(.\+)\s*then\)\=\>:\<end\s*if\>,'.
@@ -96,6 +98,9 @@
     \ s:notend . '\<do\>:\<end\s*do\>,'.
     \ s:notelse . '\<where\>:\<elsewhere\>:\<end\s*where\>,'.
     \ s:notend . '\<type\s*[^(]:\<end\s*type\>,'.
+    \ s:notend . '\<forall\>:\<end\s*forall\>,'.
+    \ s:notend . '\<associate\>:\<end\s*associate\>,'.
+    \ s:notend . '\<enum\>:\<end\s*enum\>,'.
     \ s:notend . '\<interface\>:\<end\s*interface\>,'.
     \ s:notend . '\<subroutine\>:\<end\s*subroutine\>,'.
     \ s:notend . '\<function\>:\<end\s*function\>,'.
@@ -105,7 +110,7 @@
 
 " File filters for :browse e
 if has("gui_win32") && !exists("b:browsefilter")
-  let b:browsefilter = "Fortran Files (*.f;*.F;*.for;*.f77;*.f90;*.f95;*.fpp;*.ftn)\t*.f;*.F;*.for;*.f77;*.f90;*.f95;*.fpp;*.ftn\n" .
+  let b:browsefilter = "Fortran Files (*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn)\t*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn\n" .
     \ "All Files (*.*)\t*.*\n"
 endif
 
diff -Naur vim73.orig/runtime/ftplugin/git.vim vim73/runtime/ftplugin/git.vim
--- vim73.orig/runtime/ftplugin/git.vim	2010-05-21 09:50:35.000000000 +0000
+++ vim73/runtime/ftplugin/git.vim	2013-08-04 19:09:08.277284209 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	generic git output
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -10,7 +10,9 @@
 let b:did_ftplugin = 1
 
 if !exists('b:git_dir')
-  if expand('%:p') =~# '\.git\>'
+  if expand('%:p') =~# '[\/]\.git[\/]modules[\/]'
+    " Stay out of the way
+  elseif expand('%:p') =~# '\.git\>'
     let b:git_dir = matchstr(expand('%:p'),'.*\.git\>')
   elseif $GIT_DIR != ''
     let b:git_dir = $GIT_DIR
diff -Naur vim73.orig/runtime/ftplugin/gitcommit.vim vim73/runtime/ftplugin/gitcommit.vim
--- vim73.orig/runtime/ftplugin/gitcommit.vim	2010-05-21 09:48:22.000000000 +0000
+++ vim73/runtime/ftplugin/gitcommit.vim	2013-08-04 19:09:08.280617533 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	git commit file
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 " Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
@@ -11,13 +11,14 @@
 runtime! ftplugin/git.vim
 let b:did_ftplugin = 1
 
+setlocal nomodeline tabstop=8 formatoptions-=croq formatoptions+=tl
+
+let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions<'
+
 if &textwidth == 0
   " make sure that log messages play nice with git-log on standard terminals
   setlocal textwidth=72
-  if !exists("b:undo_ftplugin")
-    let b:undo_ftplugin = ""
-  endif
-  let b:undo_ftplugin = b:undo_ftplugin . "|setl tw<"
+  let b:undo_ftplugin .= "|setl tw<"
 endif
 
 if exists("g:no_gitcommit_commands") || v:version < 700
@@ -28,8 +29,6 @@
   let b:git_dir = expand("%:p:h")
 endif
 
-" Automatically diffing can be done with:
-"   autocmd FileType gitcommit DiffGitCached | wincmd p
 command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
 
 function! s:diffcomplete(A,L,P)
@@ -58,11 +57,11 @@
   else
     let extra = "-p --stat=".&columns
   endif
-  call system(git." diff --cached --no-color ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
+  call system(git." diff --cached --no-color --no-ext-diff ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
   exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name)
   wincmd P
   let b:git_dir = a:gitdir
   command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
-  nnoremap <silent> q :q<CR>
+  nnoremap <buffer> <silent> q :q<CR>
   setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git
 endfunction
diff -Naur vim73.orig/runtime/ftplugin/gprof.vim vim73/runtime/ftplugin/gprof.vim
--- vim73.orig/runtime/ftplugin/gprof.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/ftplugin/gprof.vim	2013-08-04 19:09:08.283950856 +0000
@@ -0,0 +1,32 @@
+" Language:    gprof
+" Maintainer:  Dominique Pelle <dominique.pelle@gmail.com>
+" Last Change: 2013 Jun 09
+
+" When cursor is on one line of the gprof call graph,
+" calling this function jumps to this function in the call graph.
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin=1
+
+fun! <SID>GprofJumpToFunctionIndex()
+  let l:line = getline('.')
+  if l:line =~ '[\d\+\]$'
+    " We're in a line in the call graph.
+    norm! $y%
+    call search('^' . escape(@", '[]'), 'sw')
+    norm! zz
+  elseif l:line =~ '^\(\s\+[0-9\.]\+\)\{3}\s\+'
+    " We're in line in the flat profile.
+    norm! 55|eby$
+    call search('^\[\d\+\].*\d\s\+' .  escape(@", '[]*.') . '\>', 'sW')
+    norm! zz
+  endif
+endfun
+
+" Pressing <C-]> on a line in the gprof flat profile or in
+" the call graph, jumps to the corresponding function inside
+" the flat profile.
+map <buffer> <silent> <C-]> :call <SID>GprofJumpToFunctionIndex()<CR>
+
+" vim:sw=2 fdm=indent
diff -Naur vim73.orig/runtime/ftplugin/haml.vim vim73/runtime/ftplugin/haml.vim
--- vim73.orig/runtime/ftplugin/haml.vim	2010-05-21 09:51:40.000000000 +0000
+++ vim73/runtime/ftplugin/haml.vim	2013-08-04 19:09:08.287284179 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin
-" Language:		Haml
-" Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2010 May 21
+" Language:	Haml
+" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+" Last Change:	2013 Jun 01
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -18,6 +18,7 @@
 
 runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
 unlet! b:did_ftplugin
+set matchpairs-=<:>
 
 " Override our defaults if these were set by an included ftplugin.
 if exists("b:undo_ftplugin")
@@ -63,5 +64,6 @@
       \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:set sw=2:
diff -Naur vim73.orig/runtime/ftplugin/hamster.vim vim73/runtime/ftplugin/hamster.vim
--- vim73.orig/runtime/ftplugin/hamster.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/hamster.vim	2013-08-04 19:09:08.287284179 +0000
@@ -12,7 +12,7 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
-let cpo_save = &cpo
+let s:cpo_save = &cpo
 set cpo-=C
 
 let b:undo_ftplugin = "setl fo< com< tw< commentstring<"
@@ -57,5 +57,6 @@
 endif
 
 setlocal ignorecase
-let &cpo = cpo_save
+let &cpo = s:cpo_save
+unlet s:cpo_save
 setlocal cpo+=M		" makes \%( match \)
diff -Naur vim73.orig/runtime/ftplugin/help.vim vim73/runtime/ftplugin/help.vim
--- vim73.orig/runtime/ftplugin/help.vim	2010-07-24 12:31:35.000000000 +0000
+++ vim73/runtime/ftplugin/help.vim	2013-08-04 19:09:08.290617503 +0000
@@ -13,7 +13,10 @@
 
 let b:undo_ftplugin = "setl fo< tw< cole< cocu<"
 
-setlocal formatoptions+=tcroql textwidth=78 cole=2 cocu=nc
+setlocal formatoptions+=tcroql textwidth=78
+if has("conceal")
+  setlocal cole=2 cocu=nc
+endif
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/html.vim vim73/runtime/ftplugin/html.vim
--- vim73.orig/runtime/ftplugin/html.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/html.vim	2013-08-04 19:09:08.293950826 +0000
@@ -88,3 +88,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/initex.vim vim73/runtime/ftplugin/initex.vim
--- vim73.orig/runtime/ftplugin/initex.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/initex.vim	2013-08-04 19:09:08.297284149 +0000
@@ -34,5 +34,6 @@
 setlocal suffixesadd=.tex
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sts=2:sw=2:
diff -Naur vim73.orig/runtime/ftplugin/ishd.vim vim73/runtime/ftplugin/ishd.vim
--- vim73.orig/runtime/ftplugin/ishd.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/ishd.vim	2013-08-04 19:09:08.297284149 +0000
@@ -8,6 +8,8 @@
 
 setlocal foldmethod=syntax
 
+" Using line continuation here.
+let s:cpo_save = &cpo
 set cpo-=C
 
 " matchit support
@@ -26,3 +28,6 @@
     let b:browsefilter = "InstallShield Files (*.rul)\t*.rul\n" .
 		       \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/java.vim vim73/runtime/ftplugin/java.vim
--- vim73.orig/runtime/ftplugin/java.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/java.vim	2013-08-04 19:09:08.300617473 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	Java
 " Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
-" Last Change:  20 Jan 2009
+" Last Change:  2012 Mar 11
 " URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
@@ -48,3 +48,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/jsp.vim vim73/runtime/ftplugin/jsp.vim
--- vim73.orig/runtime/ftplugin/jsp.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/jsp.vim	2013-08-04 19:09:08.300617473 +0000
@@ -64,3 +64,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/kwt.vim vim73/runtime/ftplugin/kwt.vim
--- vim73.orig/runtime/ftplugin/kwt.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/kwt.vim	2013-08-04 19:09:08.303950796 +0000
@@ -1,12 +1,13 @@
 " Vim filetype plugin file
 " Language:	Kimwitu++
-" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
-" Last Change:	16 August 2001
+" Maintainer:	Michael Piefel <entwurf@piefel.de>
+" Last Change:	10 March 2012
 
 " Behaves almost like C++
 runtime! ftplugin/cpp.vim ftplugin/cpp_*.vim ftplugin/cpp/*.vim
 
-set cpo-=C
+let s:cpo_save = &cpo
+set cpo&vim
 
 " Limit the browser to related files
 if has("gui_win32") && !exists("b:browsefilter")
@@ -18,3 +19,14 @@
 
 " Set the errorformat for the Kimwitu++ compiler
 set efm+=kc%.%#:\ error\ at\ %f:%l:\ %m
+
+if exists("b:undo_ftplugin")
+    let b:undo_ftplugin = b:undo_ftplugin . " | setlocal efm<"
+	\ . "| unlet! b:browsefiler"
+else
+    let b:undo_ftplugin = "setlocal efm<"
+	\ . "| unlet! b:browsefiler"
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/lisp.vim vim73/runtime/ftplugin/lisp.vim
--- vim73.orig/runtime/ftplugin/lisp.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/lisp.vim	2013-08-04 19:09:08.310617442 +0000
@@ -1,10 +1,10 @@
 " Vim filetype plugin
 " Language:      Lisp
 " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
-" URL:		 http://iamphet.nm.ru/vim
+" URL:		 http://sites.google.com/site/khorser/opensource/vim
 " Original author:    Dorai Sitaram <ds26@gte.com>
 " Original URL:		 http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
-" Last Change:   Nov 8, 2004
+" Last Change:   Feb 12, 2013
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -19,8 +19,11 @@
 setl formatoptions-=t
 setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
 setl lisp
+setl commentstring=;%s
 
 " make comments behaviour like in c.vim
 " e.g. insertion of ;;; and ;; on normal "O" or "o" when staying in comment
 setl comments^=:;;;,:;;,sr:#\|,mb:\|,ex:\|#
 setl formatoptions+=croql
+
+let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp< commentstring<"
diff -Naur vim73.orig/runtime/ftplugin/logcheck.vim vim73/runtime/ftplugin/logcheck.vim
--- vim73.orig/runtime/ftplugin/logcheck.vim	2010-07-29 20:32:10.000000000 +0000
+++ vim73/runtime/ftplugin/logcheck.vim	2013-08-04 19:09:08.310617442 +0000
@@ -1,8 +1,8 @@
 " Vim filetype plugin file
 " Language:    Logcheck
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Last Change: 2010 Jul 29
-" License:     GNU GPL, version 2.0
+" Last Change: 2012 Jan 15
+" License:     Vim License
 " URL: http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/logcheck.vim
 
 if exists("b:did_ftplugin")
diff -Naur vim73.orig/runtime/ftplugin/lua.vim vim73/runtime/ftplugin/lua.vim
--- vim73.orig/runtime/ftplugin/lua.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/lua.vim	2013-08-04 19:09:08.317284089 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file.
 " Language:	Lua 4.0+
 " Maintainer:	Max Ischenko <mfi@ukr.net>
-" Last Change:	2008 Mar 25
+" Last Change:	2012 Mar 07
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,6 +11,9 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Set 'formatoptions' to break comment lines but not other lines, and insert
 " the comment leader when hitting <CR> or using "o".
 setlocal fo-=t fo+=croql
@@ -22,8 +25,6 @@
 
 " The following lines enable the macros/matchit.vim plugin for
 " extended matching with the % key.
-
-set cpo-=C
 if exists("loaded_matchit")
 
   let b:match_ignorecase = 0
@@ -34,3 +35,8 @@
     \ '\<repeat\>:\<until\>'
 
 endif " exists("loaded_matchit")
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+let b:undo_ftplugin = "setlocal fo< com< cms< suffixesadd<"
diff -Naur vim73.orig/runtime/ftplugin/mail.vim vim73/runtime/ftplugin/mail.vim
--- vim73.orig/runtime/ftplugin/mail.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/mail.vim	2013-08-04 19:09:08.320617412 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	Mail
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2009 Jun 03
+" Last Change:	2012 Nov 20
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -9,7 +9,7 @@
 endif
 let b:did_ftplugin = 1
 
-let b:undo_ftplugin = "setl modeline< tw< fo<"
+let b:undo_ftplugin = "setl modeline< tw< fo< comments<"
 
 " Don't use modelines in e-mail messages, avoid trojan horses and nasty
 " "jokes" (e.g., setting 'textwidth' to 5).
@@ -23,6 +23,9 @@
 " Set 'formatoptions' to break text lines and keep the comment leader ">".
 setlocal fo+=tcql
 
+" Add n:> to 'comments, in case it was removed elsewhere
+setlocal comments+=n:>
+
 " Add mappings, unless the user doesn't want this.
 if !exists("no_plugin_maps") && !exists("no_mail_maps")
   " Quote text by inserting "> "
diff -Naur vim73.orig/runtime/ftplugin/make.vim vim73/runtime/ftplugin/make.vim
--- vim73.orig/runtime/ftplugin/make.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/make.vim	2013-08-04 19:09:08.323950736 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	Make
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2006 Jun 17
+" Last Change:	2013 Apr 22
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -26,3 +26,8 @@
 
 " Including files.
 let &l:include = '^\s*include'
+
+" For matchit.vim, suggested by Albert Netymk.
+if exists("loaded_matchit")
+  let b:match_words = '\<if\(n\)\=\(eq\|def\)\>:\<else\>:\<endif\>,\<define\>:\<endef\>'
+endif
diff -Naur vim73.orig/runtime/ftplugin/man.vim vim73/runtime/ftplugin/man.vim
--- vim73.orig/runtime/ftplugin/man.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/man.vim	2013-08-04 19:09:08.323950736 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:	man
 " Maintainer:	SungHyun Nam <goweol@gmail.com>
-" Last Change:	2008 Sep 17
+" Last Change:	2012 Mar 6
 
 " To make the ":Man" command available before editing a manual page, source
 " this script from your startup vimrc file.
@@ -15,6 +15,12 @@
   endif
   let b:did_ftplugin = 1
 
+  " Ensure Vim is not recursively invoked (man-db does this)
+  " when doing ctrl-[ on a man page reference.
+  if exists("$MANPAGER")
+    let $MANPAGER = ""
+  endif
+
   " allow dot and dash in manual page name.
   setlocal iskeyword+=\.,-
 
@@ -29,6 +35,8 @@
     nnoremap <buffer> <c-t> :call <SID>PopPage()<CR>
   endif
 
+  let b:undo_ftplugin = "setlocal iskeyword<"
+
 endif
 
 if exists(":Man") != 2
diff -Naur vim73.orig/runtime/ftplugin/markdown.vim vim73/runtime/ftplugin/markdown.vim
--- vim73.orig/runtime/ftplugin/markdown.vim	2010-05-21 09:52:36.000000000 +0000
+++ vim73/runtime/ftplugin/markdown.vim	2013-08-04 19:09:08.327284059 +0000
@@ -1,19 +1,22 @@
 " Vim filetype plugin
 " Language:		Markdown
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2010 May 21
+" Last Change:		2013 May 30
 
 if exists("b:did_ftplugin")
   finish
 endif
 
 runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
-unlet! b:did_ftplugin
 
 setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=>\ %s
-setlocal formatoptions+=tcqln
+setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o
 setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+
 
-let b:undo_ftplugin .= "|setl cms< com< fo<"
+if exists('b:undo_ftplugin')
+  let b:undo_ftplugin .= "|setl cms< com< fo< flp<"
+else
+  let b:undo_ftplugin = "setl cms< com< fo< flp<"
+endif
 
 " vim:set sw=2:
diff -Naur vim73.orig/runtime/ftplugin/matlab.vim vim73/runtime/ftplugin/matlab.vim
--- vim73.orig/runtime/ftplugin/matlab.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/matlab.vim	2013-08-04 19:09:08.327284059 +0000
@@ -25,6 +25,4 @@
 	\ . "| unlet! b:match_words"
 
 let &cpo = s:save_cpo
-
-
-
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/ocaml.vim vim73/runtime/ftplugin/ocaml.vim
--- vim73.orig/runtime/ftplugin/ocaml.vim	2010-07-10 12:21:22.000000000 +0000
+++ vim73/runtime/ftplugin/ocaml.vim	2013-08-04 19:09:08.340617352 +0000
@@ -2,17 +2,23 @@
 " Maintainer:  David Baelde        <firstname.name@ens-lyon.org>
 "              Mike Leary          <leary@nwlink.com>
 "              Markus Mottl        <markus.mottl@gmail.com>
+"              Pierre Vittet       <pierre-vittet@pvittet.com>
 "              Stefano Zacchiroli  <zack@bononia.it>
 "              Vincent Aravantinos <firstname.name@imag.fr>
 " URL:         http://www.ocaml.info/vim/ftplugin/ocaml.vim
-" Last Change: 2010 Jul 10 - Bugfix, thanks to Pat Rondon
+" Last Change:
+"              2012 Jan 15 - Bugfix :reloading .annot file does not close
+"              splitted view (Pierre Vittet)
+"              2011 Nov 28 - Bugfix + support of multiple ml annotation file
+"              (Pierre Vittet)
+"              2010 Jul 10 - Bugfix, thanks to Pat Rondon
 "              2008 Jul 17 - Bugfix related to fnameescape (VA)
-"              2007 Sep 09 - Added .annot support for ocamlbuild, python not 
-"                            needed anymore (VA)
-"              2006 May 01 - Added .annot support for file.whateverext (SZ)
-"	             2006 Apr 11 - Fixed an initialization bug; fixed ASS abbrev (MM)
-"              2005 Oct 13 - removed GPL; better matchit support (MM, SZ)
+"              2013 Jul - moving errorformat into compiler/ocaml.vim Marc Weber
 "
+" Marc Weber's comment: This file may contain a lot of (very custom) stuff
+" which eventually should be moved somewhere else ..
+"
+
 if exists("b:did_ftplugin")
   finish
 endif
@@ -31,20 +37,7 @@
 
 " Error handling -- helps moving where the compiler wants you to go
 let s:cposet=&cpoptions
-set cpo-=C
-setlocal efm=
-      \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
-      \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
-      \%+EReference\ to\ unbound\ regexp\ name\ %m,
-      \%Eocamlyacc:\ e\ -\ line\ %l\ of\ \"%f\"\\,\ %m,
-      \%Wocamlyacc:\ w\ -\ %m,
-      \%-Zmake%.%#,
-      \%C%m,
-      \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
-      \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
-      \%D%*\\a:\ Entering\ directory\ `%f',
-      \%X%*\\a:\ Leaving\ directory\ `%f',
-      \%DMaking\ %*\\a\ in\ %f
+set cpo&vim
 
 " Add mappings, unless the user didn't want this.
 if !exists("no_plugin_maps") && !exists("no_ocaml_maps")
@@ -211,7 +204,7 @@
 " cursor position.
 "
 " Typing '<LocalLeader>t' (LocalLeader defaults to '\', see :h LocalLeader)
-" will cause " Ocaml_print_type function to be invoked with the right 
+" will cause " Ocaml_print_type function to be invoked with the right
 " argument depending on the current mode (visual or not).
 " >>
 "
@@ -221,9 +214,9 @@
 "   - no need for python support
 "     + plus : more portable
 "     + minus: no more lazy parsing, it looks very fast however
-"     
+"
 "   - ocamlbuild support, ie.
-"     + the plugin finds the _build directory and looks for the 
+"     + the plugin finds the _build directory and looks for the
 "       corresponding file inside;
 "     + if the user decides to change the name of the _build directory thanks
 "       to the '-build-dir' option of ocamlbuild, the plugin will manage in
@@ -232,7 +225,7 @@
 "     + if ocamlbuild is not used, the usual behaviour holds; ie. the .annot
 "       file should be in the same directory as the source file;
 "     + for vim plugin programmers:
-"       the variable 'b:_build_dir' contains the inferred path to the build 
+"       the variable 'b:_build_dir' contains the inferred path to the build
 "       directory, even if this one is not named '_build'.
 "
 " Bonus :
@@ -287,24 +280,27 @@
   endfun
 
     " After call:
-    " - b:annot_file_path : 
+    "
+    "  Following information have been put in s:annot_file_list, using
+    "  annot_file_name name as key:
+    " - annot_file_path :
     "                       path to the .annot file corresponding to the
     "                       source file (dealing with ocamlbuild stuff)
-    " - b:_build_path: 
+    " - _build_path:
     "                       path to the build directory even if this one is
     "                       not named '_build'
+    " - date_of_last annot:
+    "                       Set to 0 until we load the file. It contains the
+    "                       date at which the file has been loaded.
   function! s:Locate_annotation()
-    if !b:annotation_file_located
-
+    let annot_file_name = s:Fnameescape(expand('%:t:r')).'.annot'
+    if !exists ("s:annot_file_list[annot_file_name]")
       silent exe 'cd' s:Fnameescape(expand('%:p:h'))
-
-      let annot_file_name = s:Fnameescape(expand('%:r')).'.annot'
-
       " 1st case : the annot file is in the same directory as the buffer (no ocamlbuild)
-      let b:annot_file_path = findfile(annot_file_name,'.')
-      if b:annot_file_path != ''
-        let b:annot_file_path = getcwd().'/'.b:annot_file_path
-        let b:_build_path = ''
+      let annot_file_path = findfile(annot_file_name,'.')
+      if annot_file_path != ''
+        let annot_file_path = getcwd().'/'.annot_file_path
+        let _build_path = ''
       else
         " 2nd case : the buffer and the _build directory are in the same directory
         "      ..
@@ -312,15 +308,15 @@
         "    /    \
         " _build  .ml
         "
-        let b:_build_path = finddir('_build','.')
-        if b:_build_path != ''
-          let b:_build_path = getcwd().'/'.b:_build_path
-          let b:annot_file_path           = findfile(annot_file_name,'_build')
-          if b:annot_file_path != ''
-            let b:annot_file_path = getcwd().'/'.b:annot_file_path
+        let _build_path = finddir('_build','.')
+        if _build_path != ''
+          let _build_path = getcwd().'/'._build_path
+          let annot_file_path           = findfile(annot_file_name,'_build')
+          if annot_file_path != ''
+            let annot_file_path = getcwd().'/'.annot_file_path
           endif
         else
-          " 3rd case : the _build directory is in a directory higher in the file hierarchy 
+          " 3rd case : the _build directory is in a directory higher in the file hierarchy
           "            (it can't be deeper by ocamlbuild requirements)
           "      ..
           "     /  \
@@ -330,65 +326,74 @@
           "            \
           "           .ml
           "
-          let b:_build_path = finddir('_build',';')
-          if b:_build_path != ''
-            let project_path                = substitute(b:_build_path,'/_build$','','')
+          let _build_path = finddir('_build',';')
+          if _build_path != ''
+            let project_path                = substitute(_build_path,'/_build$','','')
             let path_relative_to_project    = s:Fnameescape(substitute(expand('%:p:h'),project_path.'/','',''))
-            let b:annot_file_path           = findfile(annot_file_name,project_path.'/_build/'.path_relative_to_project)
+            let annot_file_path           = findfile(annot_file_name,project_path.'/_build/'.path_relative_to_project)
           else
-            let b:annot_file_path = findfile(annot_file_name,'**')
+            let annot_file_path = findfile(annot_file_name,'**')
             "4th case : what if the user decided to change the name of the _build directory ?
             "           -> we relax the constraints, it should work in most cases
-            if b:annot_file_path != ''
+            if annot_file_path != ''
               " 4a. we suppose the renamed _build directory is in the current directory
-              let b:_build_path = matchstr(b:annot_file_path,'^[^/]*')
-              if b:annot_file_path != ''
-                let b:annot_file_path = getcwd().'/'.b:annot_file_path
-                let b:_build_path     = getcwd().'/'.b:_build_path
+              let _build_path = matchstr(annot_file_path,'^[^/]*')
+              if annot_file_path != ''
+                let annot_file_path = getcwd().'/'.annot_file_path
+                let _build_path     = getcwd().'/'._build_path
               endif
             else
+              let annot_file_name = ''
+              "(Pierre Vittet: I have commented 4b because this was chrashing
+              "my vim (it produced infinite loop))
+              "
               " 4b. anarchy : the renamed _build directory may be higher in the hierarchy
               " this will work if the file for which we are looking annotations has a unique name in the whole project
               " if this is not the case, it may still work, but no warranty here
-              let b:annot_file_path = findfile(annot_file_name,'**;')
-              let project_path      = s:Find_common_path(b:annot_file_path,expand('%:p:h'))
-              let b:_build_path       = matchstr(b:annot_file_path,project_path.'/[^/]*')
+              "let annot_file_path = findfile(annot_file_name,'**;')
+              "let project_path      = s:Find_common_path(annot_file_path,expand('%:p:h'))
+              "let _build_path       = matchstr(annot_file_path,project_path.'/[^/]*')
             endif
           endif
         endif
       endif
 
-      if b:annot_file_path == ''
+      if annot_file_path == ''
         throw 'E484: no annotation file found'
       endif
 
       silent exe 'cd' '-'
-
-      let b:annotation_file_located = 1
+      let s:annot_file_list[annot_file_name]= [annot_file_path, _build_path, 0]
     endif
   endfun
 
-  " This in order to locate the .annot file only once
-  let b:annotation_file_located = 0
+  " This variable contain a dictionnary of list. Each element of the dictionnary
+  " represent an annotation system. An annotation system is a list with :
+  " - annotation file name as it's key
+  " - annotation file path as first element of the contained list
+  " - build path as second element of the contained list
+  " - annot_file_last_mod (contain the date of .annot file) as third element
+  let s:annot_file_list = {}
 
 " 2. Finding the type information in the annotation file
-  
+
   " a. The annotation file is opened in vim as a buffer that
   " should be (almost) invisible to the user.
 
       " After call:
       " The current buffer is now the one containing the .annot file.
       " We manage to keep all this hidden to the user's eye.
-    function! s:Enter_annotation_buffer()
+    function! s:Enter_annotation_buffer(annot_file_path)
       let s:current_pos = getpos('.')
       let s:current_hidden = &l:hidden
       set hidden
       let s:current_buf = bufname('%')
-      if bufloaded(b:annot_file_path)
-        silent exe 'keepj keepalt' 'buffer' s:Fnameescape(b:annot_file_path)
+      if bufloaded(a:annot_file_path)
+        silent exe 'keepj keepalt' 'buffer' s:Fnameescape(a:annot_file_path)
       else
-        silent exe 'keepj keepalt' 'view' s:Fnameescape(b:annot_file_path)
+        silent exe 'keepj keepalt' 'view' s:Fnameescape(a:annot_file_path)
       endif
+      call setpos(".", [0, 0 , 0 , 0])
     endfun
 
       " After call:
@@ -401,27 +406,35 @@
 
       " After call:
       "   The annot file is loaded and assigned to a buffer.
-      "   This also handles the modification date of the .annot file, eg. after a 
-      "   compilation.
-    function! s:Load_annotation()
-      if bufloaded(b:annot_file_path) && b:annot_file_last_mod < getftime(b:annot_file_path)
-        call s:Enter_annotation_buffer()
-        silent exe "bunload"
-        call s:Exit_annotation_buffer()
+      "   This also handles the modification date of the .annot file, eg. after a
+      "   compilation (return an updated annot_file_list).
+    function! s:Load_annotation(annot_file_name)
+      let annot = s:annot_file_list[a:annot_file_name]
+      let annot_file_path = annot[0]
+      let annot_file_last_mod = 0
+      if exists("annot[2]")
+        let annot_file_last_mod = annot[2]
+      endif
+      if bufloaded(annot_file_path) && annot_file_last_mod < getftime(annot_file_path)
+        " if there is a more recent file
+        let nr = bufnr(annot_file_path)
+        silent exe 'keepj keepalt' 'bunload' nr
       endif
-      if !bufloaded(b:annot_file_path)
-        call s:Enter_annotation_buffer()
+      if !bufloaded(annot_file_path)
+        call s:Enter_annotation_buffer(annot_file_path)
         setlocal nobuflisted
         setlocal bufhidden=hide
         setlocal noswapfile
         setlocal buftype=nowrite
         call s:Exit_annotation_buffer()
-        let b:annot_file_last_mod = getftime(b:annot_file_path)
+        let annot[2] = getftime(annot_file_path)
+        " List updated with the new date
+        let s:annot_file_list[a:annot_file_name] = annot
       endif
     endfun
-  
+
   "b. 'search' and 'match' work to find the type information
-   
+
       "In:  - lin1,col1: postion of expression first char
       "     - lin2,col2: postion of expression last char
       "Out: - the pattern to be looked for to find the block
@@ -462,12 +475,13 @@
       let end = line(".") - 1
       return join(getline(begin,end),"\n")
     endfun
-        
+
       "In:  the pattern to look for in order to match the block
       "Out: the type information (calls s:Match_data)
       " Should be called in the annotation buffer
-    function! s:Extract_type_data(block_pattern)
-      call s:Enter_annotation_buffer()
+    function! s:Extract_type_data(block_pattern, annot_file_name)
+      let annot_file_path = s:annot_file_list[a:annot_file_name][0]
+      call s:Enter_annotation_buffer(annot_file_path)
       try
         if search(a:block_pattern,'e') == 0
           throw "no_annotation"
@@ -479,10 +493,10 @@
       endtry
       return annotation
     endfun
-  
+
   "c. link this stuff with what the user wants
   " ie. get the expression selected/under the cursor
-    
+
     let s:ocaml_word_char = '\w|[-]|'''
 
       "In:  the current mode (eg. "visual", "normal", etc.)
@@ -527,19 +541,20 @@
 
       "In:  the current mode (eg. "visual", "normal", etc.)
       "Out: the type information (calls s:Extract_type_data)
-    function! s:Get_type(mode)
+    function! s:Get_type(mode, annot_file_name)
       let [lin1,lin2,col1,col2] = s:Match_borders(a:mode)
-      return s:Extract_type_data(s:Block_pattern(lin1,lin2,col1,col2))
+      return s:Extract_type_data(s:Block_pattern(lin1,lin2,col1,col2), a:annot_file_name)
     endfun
-  
+
   "d. main
       "In:         the current mode (eg. "visual", "normal", etc.)
       "After call: the type information is displayed
     if !exists("*Ocaml_get_type")
       function Ocaml_get_type(mode)
+        let annot_file_name = s:Fnameescape(expand('%:t:r')).'.annot'
         call s:Locate_annotation()
-        call s:Load_annotation()
-        return s:Get_type(a:mode)
+        call s:Load_annotation(annot_file_name)
+        return s:Get_type(a:mode, annot_file_name)
       endfun
     endif
 
diff -Naur vim73.orig/runtime/ftplugin/occam.vim vim73/runtime/ftplugin/occam.vim
--- vim73.orig/runtime/ftplugin/occam.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/occam.vim	2013-08-04 19:09:08.340617352 +0000
@@ -9,6 +9,8 @@
   finish
 endif
 let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 "{{{  Indent settings
 " Set shift width for indent
@@ -37,3 +39,11 @@
 endif
 "}}}
 
+"{{{  Undo settings
+let b:undo_ftplugin = "setlocal shiftwidth< softtabstop< expandtab<"
+	\ . " formatoptions< comments< textwidth<"
+	\ . "| unlet! b:browsefiler"
+"}}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/ftplugin/pascal.vim vim73/runtime/ftplugin/pascal.vim
--- vim73.orig/runtime/ftplugin/pascal.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/pascal.vim	2013-08-04 19:09:08.343950676 +0000
@@ -1,14 +1,19 @@
 " Vim filetype plugin file
 " Language:	pascal
 " Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
-" Last Changed: 20 Jan 2009
+" Last Changed: 11 Apr 2011
 " URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
 
 if exists("loaded_matchit")
-    let b:match_words='\<\%(begin\|case\|try\)\>:\<end\>'
+    let b:match_ignorecase = 1 " (pascal is case-insensitive)
+
+    let b:match_words = '\<\%(begin\|case\|record\|object\|try\)\>'
+    let b:match_words .= ':\<^\s*\%(except\|finally\)\>:\<end\>'
+    let b:match_words .= ',\<repeat\>:\<until\>'
+    let b:match_words .= ',\<if\>:\<else\>'
 endif
 
 " Undo the stuff we changed.
diff -Naur vim73.orig/runtime/ftplugin/perl.vim vim73/runtime/ftplugin/perl.vim
--- vim73.orig/runtime/ftplugin/perl.vim	2010-07-22 03:46:09.000000000 +0000
+++ vim73/runtime/ftplugin/perl.vim	2013-08-04 19:09:08.347283999 +0000
@@ -1,8 +1,9 @@
 " Vim filetype plugin file
-" Language:     Perl
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl
-" Last Change:  2009-08-14
+" Language:      Perl
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-05-11
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
@@ -12,7 +13,8 @@
 let s:save_cpo = &cpo
 set cpo-=C
 
-setlocal formatoptions+=crq
+setlocal formatoptions-=t
+setlocal formatoptions+=crqol
 setlocal keywordprg=perldoc\ -f
 
 setlocal comments=:#
@@ -29,7 +31,7 @@
 " Provided by Ned Konz <ned at bike-nomad dot com>
 "---------------------------------------------
 setlocal include=\\<\\(use\\\|require\\)\\>
-setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','')
+setlocal includeexpr=substitute(substitute(substitute(v:fname,'::','/','g'),'->\*','',''),'$','.pm','')
 setlocal define=[^A-Za-z_]
 
 " The following line changes a global variable but is necessary to make
@@ -38,7 +40,7 @@
 " problem for you, add an after/ftplugin/perl.vim file that contains
 "       set isfname-=:
 set isfname+=:
-"setlocal iskeyword=48-57,_,A-Z,a-z,:
+set iskeyword+=:
 
 " Set this once, globally.
 if !exists("perlpath")
@@ -60,12 +62,27 @@
     endif
 endif
 
-let &l:path=perlpath
+" Append perlpath to the existing path value, if it is set.  Since we don't
+" use += to do it because of the commas in perlpath, we have to handle the
+" global / local settings, too.
+if &l:path == ""
+    if &g:path == ""
+        let &l:path=perlpath
+    else
+        let &l:path=&g:path.",".perlpath
+    endif
+else
+    let &l:path=&l:path.",".perlpath
+endif
 "---------------------------------------------
 
 " Undo the stuff we changed.
-let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp<" .
+let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp< path<" .
 	    \	      " | unlet! b:browsefilter"
 
+" proper matching for matchit plugin
+let b:match_skip = 's:comment\|string\|perlQQ\|perlShellCommand\|perlHereDoc\|perlSubstitution\|perlTranslation\|perlMatch\|perlFormatField'
+
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/perl6.vim vim73/runtime/ftplugin/perl6.vim
--- vim73.orig/runtime/ftplugin/perl6.vim	2010-08-14 19:27:16.000000000 +0000
+++ vim73/runtime/ftplugin/perl6.vim	2013-08-04 19:09:08.347283999 +0000
@@ -1,9 +1,10 @@
 " Vim filetype plugin file
-" Language:     Perl 6
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2010-08-10
-" Contributors: Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
+" Language:      Perl 6
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-05-11
+" Contributors:  Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
 "
 " Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com>
 
@@ -15,16 +16,19 @@
 let s:save_cpo = &cpo
 set cpo-=C
 
-setlocal formatoptions+=crq
+setlocal formatoptions-=t
+setlocal formatoptions+=crqol
+setlocal keywordprg=p6doc
+
 setlocal comments=:#
 setlocal commentstring=#%s
 
 " Change the browse dialog on Win32 to show mainly Perl-related files
 if has("gui_win32")
     let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
-		       \ "Perl Modules (*.pm)\t*.pm\n" .
-		       \ "Perl Documentation Files (*.pod)\t*.pod\n" .
-		       \ "All Files (*.*)\t*.*\n"
+               \ "Perl Modules (*.pm)\t*.pm\n" .
+               \ "Perl Documentation Files (*.pod)\t*.pod\n" .
+               \ "All Files (*.*)\t*.*\n"
 endif
 
 " Provided by Ned Konz <ned at bike-nomad dot com>
@@ -39,10 +43,35 @@
 " after/ftplugin/perl6.vim file that contains
 "       set isfname-=:
 set isfname+=:
+setlocal iskeyword=48-57,_,A-Z,a-z,:,-
+
+" Set this once, globally.
+if !exists("perlpath")
+    if executable("perl6")
+        try
+            if &shellxquote != '"'
+                let perlpath = system('perl6 -e  "@*INC.join(q/,/).say"')
+            else
+                let perlpath = system("perl6 -e  '@*INC.join(q/,/).say'")
+            endif
+            let perlpath = substitute(perlpath,',.$',',,','')
+        catch /E145:/
+            let perlpath = ".,,"
+        endtry
+    else
+        " If we can't call perl to get its path, just default to using the
+        " current directory and the directory of the current file.
+        let perlpath = ".,,"
+    endif
+endif
+
+let &l:path=perlpath
+"---------------------------------------------
 
 " Undo the stuff we changed.
 let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isk<" .
-	    \         " | unlet! b:browsefilter"
+        \         " | unlet! b:browsefilter"
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/php.vim vim73/runtime/ftplugin/php.vim
--- vim73.orig/runtime/ftplugin/php.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/php.vim	2013-08-04 19:09:08.350617322 +0000
@@ -8,8 +8,8 @@
 
 " Make sure the continuation lines below do not cause problems in
 " compatibility mode.
-let s:save_cpo = &cpo
-set cpo-=C
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Define some defaults in case the included ftplugins don't set them.
 let s:undo_ftplugin = ""
@@ -79,4 +79,5 @@
 	    \	      s:undo_ftplugin
 
 " Restore the saved compatibility options.
-let &cpo = s:save_cpo
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/ftplugin/plaintex.vim vim73/runtime/ftplugin/plaintex.vim
--- vim73.orig/runtime/ftplugin/plaintex.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/plaintex.vim	2013-08-04 19:09:08.350617322 +0000
@@ -32,5 +32,6 @@
 endif " exists("loaded_matchit")
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sts=2:sw=2:
diff -Naur vim73.orig/runtime/ftplugin/postscr.vim vim73/runtime/ftplugin/postscr.vim
--- vim73.orig/runtime/ftplugin/postscr.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/postscr.vim	2013-08-04 19:09:08.350617322 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
-" Language:     PostScript
-" Maintainer:   Mike Williams <mrw@eandem.co.uk>
-" Last Change:  27th June 2002
+" Language:	PostScript
+" Maintainer:	Mike Williams <mrw@eandem.co.uk>
+" Last Change:  24th April 2012
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -11,6 +11,9 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " PS comment formatting
 setlocal comments=b:%
 setlocal formatoptions-=t formatoptions+=rol
@@ -21,11 +24,15 @@
   let b:match_words = '<<:>>,\<begin\>:\<end\>,\<save\>:\<restore\>,\<gsave\>:\<grestore\>'
 endif
 
-set cpo-=C
-
 " Define patterns for the browse file filter
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "PostScript Files (*.ps)\t*.ps\n" .
     \ "EPS Files (*.eps)\t*.eps\n" .
     \ "All Files (*.*)\t*.*\n"
 endif
+
+let b:undo_ftplugin = "setlocal comments< formatoptions<"
+    \ . "| unlet! b:browsefiler b:match_ignorecase b:match_words"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/pyrex.vim vim73/runtime/ftplugin/pyrex.vim
--- vim73.orig/runtime/ftplugin/pyrex.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/pyrex.vim	2013-08-04 19:09:08.357283969 +0000
@@ -2,12 +2,14 @@
 " Language:	Pyrex
 " Maintainer:	Marco Barisione <marco.bari@people.it>
 " URL:		http://marcobari.altervista.org/pyrex_vim.html
-" Last Change:	2004 May 16
+" Last Change:	2012 May 18
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Behaves just like Python
 runtime! ftplugin/python.vim ftplugin/python_*.vim ftplugin/python/*.vim
@@ -20,3 +22,6 @@
 			\ "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
 			\ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/ftplugin/python.vim vim73/runtime/ftplugin/python.vim
--- vim73.orig/runtime/ftplugin/python.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/python.vim	2013-08-04 19:09:08.357283969 +0000
@@ -5,6 +5,8 @@
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 setlocal cinkeys-=0#
 setlocal indentkeys-=0#
@@ -41,3 +43,6 @@
     let b:browsefilter = "Python Files (*.py)\t*.py\n" .
 		       \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/ftplugin/qf.vim vim73/runtime/ftplugin/qf.vim
--- vim73.orig/runtime/ftplugin/qf.vim	2010-07-25 14:15:02.000000000 +0000
+++ vim73/runtime/ftplugin/qf.vim	2013-08-04 19:09:08.357283969 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:     Vim's quickfix window
 " Maintainer:   Lech Lorens <Lech.Lorens@gmail.com>
-" Last Changed: 22 Jul 2010
+" Last Changed: 30 Apr 2012
 
 if exists("b:did_ftplugin")
   finish
@@ -10,7 +10,7 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
-let b:undo_ftplugin = "setl stl<"
+let b:undo_ftplugin = "set stl<"
 
 " Display the command that produced the list in the quickfix window:
-setlocal stl=%q%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}
+setlocal stl=%t%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}\ %=%-15(%l,%c%V%)\ %P
diff -Naur vim73.orig/runtime/ftplugin/rpl.vim vim73/runtime/ftplugin/rpl.vim
--- vim73.orig/runtime/ftplugin/rpl.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/rpl.vim	2013-08-04 19:09:08.363950615 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:     RPL/2
 " Maintainer:   Jol BERTRAND <rpl2@free.fr>
-" Last Change:	2005 Mar 28
+" Last Change:	2012 Mar 07
 " Version: 		0.1
 
 " Only do this when not done yet for this buffer
@@ -18,3 +18,5 @@
 
 " Set 'comments' to format dashed lists in comments.
 setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+
+let b:undo_ftplugin = "setlocal fo< comments<"
diff -Naur vim73.orig/runtime/ftplugin/ruby.vim vim73/runtime/ftplugin/ruby.vim
--- vim73.orig/runtime/ftplugin/ruby.vim	2010-05-27 13:53:47.000000000 +0000
+++ vim73/runtime/ftplugin/ruby.vim	2013-08-04 19:09:08.367283939 +0000
@@ -1,17 +1,10 @@
 " Vim filetype plugin
 " Language:		Ruby
-" Maintainer:		Gavin Sinclair <gsinclair at gmail.com>
-" Last Change:		2010 Mar 15
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:  Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
-"
-" Original matchit support thanks to Ned Konz.  See his ftplugin/ruby.vim at
-"   http://bike-nomad.com/vim/ruby.vim.
-" ----------------------------------------------------------------------------
 
-" Only do this when not done yet for this buffer
 if (exists("b:did_ftplugin"))
   finish
 endif
@@ -21,7 +14,7 @@
 set cpo&vim
 
 if has("gui_running") && !has("gui_win32")
-  setlocal keywordprg=ri\ -T
+  setlocal keywordprg=ri\ -T\ -f\ bs
 else
   setlocal keywordprg=ri
 endif
@@ -49,7 +42,7 @@
 
 setlocal formatoptions-=t formatoptions+=croql
 
-setlocal include=^\\s*\\<\\(load\\\|\w*require\\)\\>
+setlocal include=^\\s*\\<\\(load\\>\\\|require\\>\\\|autoload\\s*:\\=[\"']\\=\\h\\w*[\"']\\=,\\)
 setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.rb','')
 setlocal suffixesadd=.rb
 
@@ -69,41 +62,90 @@
 setlocal comments=:#
 setlocal commentstring=#\ %s
 
-if !exists("s:ruby_path")
-  if exists("g:ruby_path")
-    let s:ruby_path = g:ruby_path
-  elseif has("ruby") && has("win32")
-    ruby VIM::command( 'let s:ruby_path = "%s"' % ($: + begin; require %q{rubygems}; Gem.all_load_paths.sort.uniq; rescue LoadError; []; end).join(%q{,}) )
-    let s:ruby_path = '.,' . substitute(s:ruby_path, '\%(^\|,\)\.\%(,\|$\)', ',,', '')
-  elseif executable("ruby")
-    let s:code = "print ($: + begin; require %q{rubygems}; Gem.all_load_paths.sort.uniq; rescue LoadError; []; end).join(%q{,})"
-    if &shellxquote == "'"
-      let s:ruby_path = system('ruby -e "' . s:code . '"')
+if !exists('g:ruby_version_paths')
+  let g:ruby_version_paths = {}
+endif
+
+function! s:query_path(root)
+  let code = "print $:.join %q{,}"
+  if &shell =~# 'sh' && $PATH !~# '\s'
+    let prefix = 'env PATH='.$PATH.' '
+  else
+    let prefix = ''
+  endif
+  if &shellxquote == "'"
+    let path_check = prefix.'ruby -e "' . code . '"'
+  else
+    let path_check = prefix."ruby -e '" . code . "'"
+  endif
+
+  let cd = haslocaldir() ? 'lcd' : 'cd'
+  let cwd = getcwd()
+  try
+    exe cd fnameescape(a:root)
+    let path = split(system(path_check),',')
+    exe cd fnameescape(cwd)
+    return path
+  finally
+    exe cd fnameescape(cwd)
+  endtry
+endfunction
+
+function! s:build_path(path)
+  let path = join(map(copy(a:path), 'v:val ==# "." ? "" : v:val'), ',')
+  if &g:path !~# '\v^\.%(,/%(usr|emx)/include)=,,$'
+    let path = substitute(&g:path,',,$',',','') . ',' . path
+  endif
+  return path
+endfunction
+
+if !exists('b:ruby_version') && !exists('g:ruby_path') && isdirectory(expand('%:p:h'))
+  let s:version_file = findfile('.ruby-version', '.;')
+  if !empty(s:version_file)
+    let b:ruby_version = get(readfile(s:version_file, '', 1), '')
+    if !has_key(g:ruby_version_paths, b:ruby_version)
+      let g:ruby_version_paths[b:ruby_version] = s:query_path(fnamemodify(s:version_file, ':p:h'))
+    endif
+  endif
+endif
+
+if exists("g:ruby_path")
+  let s:ruby_path = type(g:ruby_path) == type([]) ? join(g:ruby_path, ',') : g:ruby_path
+elseif has_key(g:ruby_version_paths, get(b:, 'ruby_version', ''))
+  let s:ruby_paths = g:ruby_version_paths[b:ruby_version]
+  let s:ruby_path = s:build_path(s:ruby_paths)
+else
+  if !exists('g:ruby_default_path')
+    if has("ruby") && has("win32")
+      ruby ::VIM::command( 'let g:ruby_default_path = split("%s",",")' % $:.join(%q{,}) )
+    elseif executable('ruby')
+      let g:ruby_default_path = s:query_path($HOME)
     else
-      let s:ruby_path = system("ruby -e '" . s:code . "'")
+      let g:ruby_default_path = map(split($RUBYLIB,':'), 'v:val ==# "." ? "" : v:val')
     endif
-    let s:ruby_path = '.,' . substitute(s:ruby_path, '\%(^\|,\)\.\%(,\|$\)', ',,', '')
-  else
-    " If we can't call ruby to get its path, just default to using the
-    " current directory and the directory of the current file.
-    let s:ruby_path = ".,,"
   endif
+  let s:ruby_paths = g:ruby_default_path
+  let s:ruby_path = s:build_path(s:ruby_paths)
 endif
 
-let &l:path = s:ruby_path
+if stridx(&l:path, s:ruby_path) == -1
+  let &l:path = s:ruby_path
+endif
+if exists('s:ruby_paths') && stridx(&l:tags, join(map(copy(s:ruby_paths),'v:val."/tags"'),',')) == -1
+  let &l:tags = &tags . ',' . join(map(copy(s:ruby_paths),'v:val."/tags"'),',')
+endif
 
 if has("gui_win32") && !exists("b:browsefilter")
   let b:browsefilter = "Ruby Source Files (*.rb)\t*.rb\n" .
                      \ "All Files (*.*)\t*.*\n"
 endif
 
-let b:undo_ftplugin = "setl fo< inc< inex< sua< def< com< cms< path< kp<"
+let b:undo_ftplugin = "setl fo< inc< inex< sua< def< com< cms< path< tags< kp<"
       \."| unlet! b:browsefilter b:match_ignorecase b:match_words b:match_skip"
       \."| if exists('&ofu') && has('ruby') | setl ofu< | endif"
       \."| if has('balloon_eval') && exists('+bexpr') | setl bexpr< | endif"
 
 if !exists("g:no_plugin_maps") && !exists("g:no_ruby_maps")
-
   nnoremap <silent> <buffer> [m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','b','n')<CR>
   nnoremap <silent> <buffer> ]m :<C-U>call <SID>searchsyn('\<def\>','rubyDefine','','n')<CR>
   nnoremap <silent> <buffer> [M :<C-U>call <SID>searchsyn('\<end\>','rubyDefine','b','n')<CR>
@@ -126,6 +168,26 @@
         \."| sil! exe 'unmap <buffer> [[' | sil! exe 'unmap <buffer> ]]' | sil! exe 'unmap <buffer> []' | sil! exe 'unmap <buffer> ]['"
         \."| sil! exe 'unmap <buffer> [m' | sil! exe 'unmap <buffer> ]m' | sil! exe 'unmap <buffer> [M' | sil! exe 'unmap <buffer> ]M'"
 
+  if maparg('im','n') == ''
+    onoremap <silent> <buffer> im :<C-U>call <SID>wrap_i('[m',']M')<CR>
+    onoremap <silent> <buffer> am :<C-U>call <SID>wrap_a('[m',']M')<CR>
+    xnoremap <silent> <buffer> im :<C-U>call <SID>wrap_i('[m',']M')<CR>
+    xnoremap <silent> <buffer> am :<C-U>call <SID>wrap_a('[m',']M')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'ounmap <buffer> im' | sil! exe 'ounmap <buffer> am'"
+          \."| sil! exe 'xunmap <buffer> im' | sil! exe 'xunmap <buffer> am'"
+  endif
+
+  if maparg('iM','n') == ''
+    onoremap <silent> <buffer> iM :<C-U>call <SID>wrap_i('[[','][')<CR>
+    onoremap <silent> <buffer> aM :<C-U>call <SID>wrap_a('[[','][')<CR>
+    xnoremap <silent> <buffer> iM :<C-U>call <SID>wrap_i('[[','][')<CR>
+    xnoremap <silent> <buffer> aM :<C-U>call <SID>wrap_a('[[','][')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'ounmap <buffer> iM' | sil! exe 'ounmap <buffer> aM'"
+          \."| sil! exe 'xunmap <buffer> iM' | sil! exe 'xunmap <buffer> aM'"
+  endif
+
   if maparg("\<C-]>",'n') == ''
     nnoremap <silent> <buffer> <C-]>       :<C-U>exe  v:count1."tag <C-R>=RubyCursorIdentifier()<CR>"<CR>
     nnoremap <silent> <buffer> g<C-]>      :<C-U>exe         "tjump <C-R>=RubyCursorIdentifier()<CR>"<CR>
@@ -142,6 +204,17 @@
           \."| sil! exe 'nunmap <buffer> <C-W>g<C-]>'| sil! exe 'nunmap <buffer> <C-W>g]'"
           \."| sil! exe 'nunmap <buffer> <C-W>}'| sil! exe 'nunmap <buffer> <C-W>g}'"
   endif
+
+  if maparg("gf",'n') == ''
+    " By using findfile() rather than gf's normal behavior, we prevent
+    " erroneously editing a directory.
+    nnoremap <silent> <buffer> gf         :<C-U>exe <SID>gf(v:count1,"gf",'edit')<CR>
+    nnoremap <silent> <buffer> <C-W>f     :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>f",'split')<CR>
+    nnoremap <silent> <buffer> <C-W><C-F> :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>\<Lt>C-F>",'split')<CR>
+    nnoremap <silent> <buffer> <C-W>gf    :<C-U>exe <SID>gf(v:count1,"\<Lt>C-W>gf",'tabedit')<CR>
+    let b:undo_ftplugin = b:undo_ftplugin
+          \."| sil! exe 'nunmap <buffer> gf' | sil! exe 'nunmap <buffer> <C-W>f' | sil! exe 'nunmap <buffer> <C-W><C-F>' | sil! exe 'nunmap <buffer> <C-W>gf'"
+  endif
 endif
 
 let &cpo = s:cpo_save
@@ -191,7 +264,7 @@
     if str !~ '^\w'
       return ''
     endif
-    silent! let res = substitute(system("ri -f simple -T \"".str.'"'),'\n$','','')
+    silent! let res = substitute(system("ri -f rdoc -T \"".str.'"'),'\n$','','')
     if res =~ '^Nothing known about' || res =~ '^Bad argument:' || res =~ '^More than one method'
       return ''
     endif
@@ -202,29 +275,57 @@
 endfunction
 
 function! s:searchsyn(pattern,syn,flags,mode)
-    norm! m'
-    if a:mode ==# 'v'
-      norm! gv
-    endif
-    let i = 0
-    let cnt = v:count ? v:count : 1
-    while i < cnt
-        let i = i + 1
-        let line = line('.')
-        let col  = col('.')
-        let pos = search(a:pattern,'W'.a:flags)
-        while pos != 0 && s:synname() !~# a:syn
-            let pos = search(a:pattern,'W'.a:flags)
-        endwhile
-        if pos == 0
-            call cursor(line,col)
-            return
-        endif
+  norm! m'
+  if a:mode ==# 'v'
+    norm! gv
+  endif
+  let i = 0
+  let cnt = v:count ? v:count : 1
+  while i < cnt
+    let i = i + 1
+    let line = line('.')
+    let col  = col('.')
+    let pos = search(a:pattern,'W'.a:flags)
+    while pos != 0 && s:synname() !~# a:syn
+      let pos = search(a:pattern,'W'.a:flags)
     endwhile
+    if pos == 0
+      call cursor(line,col)
+      return
+    endif
+  endwhile
 endfunction
 
 function! s:synname()
-    return synIDattr(synID(line('.'),col('.'),0),'name')
+  return synIDattr(synID(line('.'),col('.'),0),'name')
+endfunction
+
+function! s:wrap_i(back,forward)
+  execute 'norm k'.a:forward
+  let line = line('.')
+  execute 'norm '.a:back
+  if line('.') == line - 1
+    return s:wrap_a(a:back,a:forward)
+  endif
+  execute 'norm jV'.a:forward.'k'
+endfunction
+
+function! s:wrap_a(back,forward)
+  execute 'norm '.a:forward
+  if line('.') < line('$') && getline(line('.')+1) ==# ''
+    let after = 1
+  endif
+  execute 'norm '.a:back
+  while getline(line('.')-1) =~# '^\s*#' && line('.')
+    -
+  endwhile
+  if exists('after')
+    execute 'norm V'.a:forward.'j'
+  elseif line('.') > 1 && getline(line('.')-1) =~# '^\s*$'
+    execute 'norm kV'.a:forward
+  else
+    execute 'norm V'.a:forward
+  endif
 endfunction
 
 function! RubyCursorIdentifier()
@@ -241,6 +342,26 @@
   return stripped == '' ? expand("<cword>") : stripped
 endfunction
 
+function! s:gf(count,map,edit) abort
+  if getline('.') =~# '^\s*require_relative\s*\(["'']\).*\1\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1')
+    return a:edit.' %:h/'.target.'.rb'
+  elseif getline('.') =~# '^\s*\%(require[( ]\|load[( ]\|autoload[( ]:\w\+,\)\s*\s*\%(::\)\=File\.expand_path(\(["'']\)\.\./.*\1,\s*__FILE__)\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\.\./\zs.\{-\}\ze\1')
+    return a:edit.' %:h/'.target.'.rb'
+  elseif getline('.') =~# '^\s*\%(require \|load \|autoload :\w\+,\)\s*\(["'']\).*\1\s*$'
+    let target = matchstr(getline('.'),'\(["'']\)\zs.\{-\}\ze\1')
+  else
+    let target = expand('<cfile>')
+  endif
+  let found = findfile(target, &path, a:count)
+  if found ==# ''
+    return 'norm! '.a:count.a:map
+  else
+    return a:edit.' '.fnameescape(found)
+  endif
+endfunction
+
 "
 " Instructions for enabling "matchit" support:
 "
diff -Naur vim73.orig/runtime/ftplugin/scheme.vim vim73/runtime/ftplugin/scheme.vim
--- vim73.orig/runtime/ftplugin/scheme.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/scheme.vim	2013-08-04 19:09:08.370617262 +0000
@@ -1,13 +1,33 @@
 " Vim filetype plugin
 " Language:      Scheme
 " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
-" URL:		 http://iamphet.nm.ru/vim
+" URL:		 http://sites.google.com/site/khorser/opensource/vim
 " Original author:    Dorai Sitaram <ds26@gte.com>
 " Original URL:		 http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
-" Last Change:   Nov 22, 2004
+" Last Change:   Feb 12, 2013
 
-runtime! ftplugin/lisp.vim ftplugin/lisp_*.vim ftplugin/lisp/*.vim
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+  finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Copy-paste from ftplugin/lisp.vim
+setl comments=:;
+setl define=^\\s*(def\\k*
+setl formatoptions-=t
+setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
+setl lisp
+setl commentstring=;%s
 
+" make comments behaviour like in c.vim
+" e.g. insertion of ;;; and ;; on normal "O" or "o" when staying in comment
+setl comments^=:;;;,:;;,sr:#\|,mb:\|,ex:\|#
+setl formatoptions+=croql
+
+" Scheme-specific settings
 if exists("b:is_mzscheme") || exists("is_mzscheme")
     " improve indenting
     setl iskeyword+=#,%,^
@@ -24,3 +44,5 @@
     setl lispwords+=define-values,opt-lambda,case-lambda,syntax-rules,with-syntax,syntax-case
     setl lispwords+=cond-expand,and-let*,foreign-lambda,foreign-lambda*
 endif
+
+let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lispwords< lisp< commentstring<"
diff -Naur vim73.orig/runtime/ftplugin/sgml.vim vim73/runtime/ftplugin/sgml.vim
--- vim73.orig/runtime/ftplugin/sgml.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/sgml.vim	2013-08-04 19:09:08.377283909 +0000
@@ -37,3 +37,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/sh.vim vim73/runtime/ftplugin/sh.vim
--- vim73.orig/runtime/ftplugin/sh.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/sh.vim	2013-08-04 19:09:08.377283909 +0000
@@ -36,3 +36,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/spec.vim vim73/runtime/ftplugin/spec.vim
--- vim73.orig/runtime/ftplugin/spec.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/spec.vim	2013-08-04 19:09:08.380617232 +0000
@@ -1,13 +1,16 @@
 " Plugin to update the %changelog section of RPM spec files
 " Filename: spec.vim
 " Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com>
-" Last Change: Wed, 10 Apr 2002 16:28:52 -0300
+" Last Change: 2012 Mar 07
 
 if exists("b:did_ftplugin")
 	finish
 endif
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if !exists("no_plugin_maps") && !exists("no_spec_maps")
 	if !hasmapto("<Plug>SpecChangelog")
 		map <buffer> <LocalLeader>c <Plug>SpecChangelog
@@ -166,3 +169,7 @@
   \ '^Name:^%description:^%clean:^%setup:^%build:^%install:^%files:' .
   \ '^%package:^%preun:^%postun:^%changelog'
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+let b:undo_ftplugin = "unlet! b:match_ignorecase b:match_words"
diff -Naur vim73.orig/runtime/ftplugin/sql.vim vim73/runtime/ftplugin/sql.vim
--- vim73.orig/runtime/ftplugin/sql.vim	2010-08-01 13:57:07.000000000 +0000
+++ vim73/runtime/ftplugin/sql.vim	2013-08-04 19:09:08.383950555 +0000
@@ -1,8 +1,8 @@
 " SQL filetype plugin file
 " Language:    SQL (Common for Oracle, Microsoft SQL Server, Sybase)
-" Version:     7.0
-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: 2010 Jun 11
+" Version:     11.0
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2013 May 13
 " Download:    http://vim.sourceforge.net/script.php?script_id=454
 
 " For more details please use:
@@ -30,30 +30,52 @@
 " To change the default dialect, add the following to your vimrc:
 "    let g:sql_type_default = 'sqlanywhere'
 "
-" This file also creates a command, SQLGetType, which allows you to 
+" This file also creates a command, SQLGetType, which allows you to
 " determine what the current dialect is in use.
 "     :SQLGetType
 "
 " History
 "
+" Version 11.0 (May 2013)
+"
+" NF: Updated to use SyntaxComplete's new regex support for syntax groups.
+"
+" Version 10.0 (Dec 2012)
+"
+" NF: Changed all maps to use noremap instead of must map
+" NF: Changed all visual maps to use xnoremap instead of vnoremap as they
+"     should only be used in visual mode and not select mode.
+" BF: Most of the maps were using doubled up backslashes before they were
+"     changed to using the search() function, which meant they no longer
+"     worked.
+"
+" Version 9.0
+"
+" NF: Completes 'b:undo_ftplugin'
+" BF: Correctly set cpoptions when creating script
+"
+" Version 8.0
+"
+" NF: Improved the matchit plugin regex (Talek)
+"
 " Version 7.0
-" 
+"
 " NF: Calls the sqlcomplete#ResetCacheSyntax() function when calling
 "     SQLSetType.
 "
 " Version 6.0
-" 
+"
 " NF: Adds the command SQLGetType
 "
 " Version 5.0
-" 
-" NF: Adds the ability to choose the keys to control SQL completion, just add 
+"
+" NF: Adds the ability to choose the keys to control SQL completion, just add
 "     the following to your .vimrc:
 "    let g:ftplugin_sql_omni_key       = '<C-C>'
 "    let g:ftplugin_sql_omni_key_right = '<Right>'
 "    let g:ftplugin_sql_omni_key_left  = '<Left>'
 "
-" BF: format-options - Auto-wrap comments using textwidth was turned off 
+" BF: format-options - Auto-wrap comments using textwidth was turned off
 "                      by mistake.
 
 
@@ -63,7 +85,7 @@
 endif
 
 let s:save_cpo = &cpo
-set cpo=
+set cpo&vim
 
 " Disable autowrapping for code, but enable for comments
 " t	Auto-wrap text using textwidth
@@ -77,7 +99,7 @@
 " This works with both Vim 6 and 7.
 
 if !exists("*SQL_SetType")
-    " NOTE: You cannot use function! since this file can be 
+    " NOTE: You cannot use function! since this file can be
     " sourced from within this function.  That will result in
     " an error reported by Vim.
     function SQL_GetList(ArgLead, CmdLine, CursorPos)
@@ -101,9 +123,9 @@
             "
             "    Recursively, since there are many filenames that contain
             "    the word SQL in the indent, syntax and ftplugin directory
-            let sqls = substitute( sqls, 
-                        \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=', 
-                        \ '\1\n', 
+            let sqls = substitute( sqls,
+                        \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=',
+                        \ '\1\n',
                         \ 'g'
                         \ )
 
@@ -138,10 +160,10 @@
     function SQL_SetType(name)
 
         " User has decided to override default SQL scripts and
-        " specify a vendor specific version 
+        " specify a vendor specific version
         " (ie Oracle, Informix, SQL Anywhere, ...)
         " So check for an remove any settings that prevent the
-        " scripts from being executed, and then source the 
+        " scripts from being executed, and then source the
         " appropriate Vim scripts.
         if exists("b:did_ftplugin")
             unlet b:did_ftplugin
@@ -159,10 +181,10 @@
         endif
 
         " Ensure the name is in the correct format
-        let new_sql_type = substitute(a:name, 
+        let new_sql_type = substitute(a:name,
                     \ '\s*\([^\.]\+\)\(\.\w\+\)\?', '\L\1', '')
 
-        " Do not specify a buffer local variable if it is 
+        " Do not specify a buffer local variable if it is
         " the default value
         if new_sql_type == 'sql'
           let new_sql_type = 'sqloracle'
@@ -171,7 +193,7 @@
 
         " Remove any cached SQL since a new sytax will have different
         " items and groups
-        if !exists('g:loaded_sql_completion') || 100 == g:loaded_sql_completion
+        if !exists('g:loaded_sql_completion') || g:loaded_sql_completion >= 100
             call sqlcomplete#ResetCacheSyntax()
         endif
 
@@ -199,10 +221,10 @@
 
 if !exists("*SQL_GetType")
     function SQL_GetType()
-        if exists('b:sql_type_override') 
+        if exists('b:sql_type_override')
             echomsg "Current SQL dialect in use:".b:sql_type_override
         else
-            echomsg "Current SQL dialect in use:".g:sql_type_default        
+            echomsg "Current SQL dialect in use:".g:sql_type_default
         endif
     endfunction
     command! -nargs=0 SQLGetType :call SQL_GetType()
@@ -229,7 +251,8 @@
   finish
 endif
 
-let b:undo_ftplugin = "setl comments<"
+let b:undo_ftplugin = "setl comments< formatoptions< define< omnifunc<" .
+		    \ " | unlet! b:browsefilter b:match_words"
 
 " Don't load another plugin for this buffer
 let b:did_ftplugin     = 1
@@ -276,7 +299,7 @@
     " doend
     "
     " case
-    " when 
+    " when
     " when
     " default
     " end case
@@ -290,20 +313,20 @@
     " WHEN OTHERS THEN
     "
     " create[ or replace] procedure|function|event
+                " \ '^\s*\<\%(do\|for\|while\|loop\)\>.*:'.
 
-    let b:match_words =
-		\ '\<begin\>:\<end\>\W*$,'.
+    " For ColdFusion support
+    setlocal matchpairs+=<:>
+    let b:match_words = &matchpairs .
+		\ ',\<begin\>:\<end\>\W*$,'.
 		\
                 \ s:notend . '\<if\>:'.
                 \ '\<elsif\>\|\<elseif\>\|\<else\>:'.
                 \ '\<end\s\+if\>,'.
                 \
-                \ '\<do\>\|'.
-                \ '\<while\>\|'.
-                \ '\%(' . s:notend . '\<loop\>\)\|'.
-                \ '\%(' . s:notend . '\<for\>\):'.
-                \ '\<exit\>\|\<leave\>\|\<break\>\|\<continue\>:'.
-                \ '\%(\<end\s\+\%(for\|loop\>\)\)\|\<doend\>,'.
+                \ '\(^\s*\)\@<=\(\<\%(do\|for\|while\|loop\)\>.*\):'.
+                \ '\%(\<exit\>\|\<leave\>\|\<break\>\|\<continue\>\):'.
+                \ '\%(\<doend\>\|\%(\<end\s\+\%(for\|while\|loop\>\)\)\),'.
                 \
                 \ '\%('. s:notend . '\<case\>\):'.
                 \ '\%('.s:when_no_matched_or_others.'\):'.
@@ -335,14 +358,14 @@
 
 " Mappings to move to the next BEGIN ... END block
 " \W - no characters or digits
-nmap <buffer> <silent> ]] :call search('\\c^\\s*begin\\>', 'W' )<CR>
-nmap <buffer> <silent> [[ :call search('\\c^\\s*begin\\>', 'bW' )<CR>
-nmap <buffer> <silent> ][ :call search('\\c^\\s*end\\W*$', 'W' )<CR>
-nmap <buffer> <silent> [] :call search('\\c^\\s*end\\W*$', 'bW' )<CR>
-vmap <buffer> <silent> ]] :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*begin\\>', 'W' )<CR>
-vmap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*begin\\>', 'bW' )<CR>
-vmap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*end\\W*$', 'W' )<CR>
-vmap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*end\\W*$', 'bW' )<CR>
+nnoremap <buffer> <silent> ]] :call search('\c^\s*begin\>', 'W' )<CR>
+nnoremap <buffer> <silent> [[ :call search('\c^\s*begin\>', 'bW' )<CR>
+nnoremap <buffer> <silent> ][ :call search('\c^\s*end\W*$', 'W' )<CR>
+nnoremap <buffer> <silent> [] :call search('\c^\s*end\W*$', 'bW' )<CR>
+xnoremap <buffer> <silent> ]] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'W' )<CR>
+xnoremap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'bW' )<CR>
+xnoremap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'W' )<CR>
+xnoremap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'bW' )<CR>
 
 
 " By default only look for CREATE statements, but allow
@@ -359,7 +382,7 @@
 " backwards, you must use \{,1}
 if !exists('g:ftplugin_sql_objects')
     let g:ftplugin_sql_objects = 'function,procedure,event,' .
-                \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
+                \ '\(existing\\|global\s\+temporary\s\+\)\{,1}' .
                 \ 'table,trigger' .
                 \ ',schema,service,publication,database,datatype,domain' .
                 \ ',index,subscription,synchronization,view,variable'
@@ -380,47 +403,47 @@
 
 " Replace all ,'s with bars, except ones with numbers after them.
 " This will most likely be a \{,1} string.
-let s:ftplugin_sql_objects = 
-            \ '\\c^\\s*' .
-            \ '\\(\\(' .
-            \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\\\|', 'g') .
-            \ '\\)\\s\\+\\(or\\s\\+replace\\\s\+\\)\\{,1}\\)\\{,1}' .
-            \ '\\<\\(' .
-            \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\\\|', 'g') .
-            \ '\\)\\>' 
+let s:ftplugin_sql_objects =
+            \ '\c^\s*' .
+            \ '\(\(' .
+            \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\|', 'g') .
+            \ '\)\s\+\(or\s\+replace\s\+\)\{,1}\)\{,1}' .
+            \ '\<\(' .
+            \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\|', 'g') .
+            \ '\)\>'
 
 " Mappings to move to the next CREATE ... block
-exec "nmap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
-exec "nmap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
+exec "nnoremap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
+exec "nnoremap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
 " Could not figure out how to use a :call search() string in visual mode
 " without it ending visual mode
 " Unfortunately, this will add a entry to the search history
-exec 'vmap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
-exec 'vmap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>'
+exec 'xnoremap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
+exec 'xnoremap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>'
 
 " Mappings to move to the next COMMENT
 "
 " Had to double the \ for the \| separator since this has a special
 " meaning on maps
-let b:comment_leader = '\\(--\\\|\\/\\/\\\|\\*\\\|\\/\\*\\\|\\*\\/\\)'
+let b:comment_leader = '\(--\\|\/\/\\|\*\\|\/\*\\|\*\/\)'
 " Find the start of the next comment
-let b:comment_start  = '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
-            \ '\\(\\s*'.b:comment_leader.'\\)'
+let b:comment_start  = '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+            \ '\(\s*'.b:comment_leader.'\)'
 " Find the end of the previous comment
-let b:comment_end = '\\(^\\s*'.b:comment_leader.'.*\\n\\)'.
-            \ '\\(^\\s*'.b:comment_leader.'\\)\\@!'
+let b:comment_end = '\(^\s*'.b:comment_leader.'.*\n\)'.
+            \ '\(^\s*'.b:comment_leader.'\)\@!'
 " Skip over the comment
 let b:comment_jump_over  = "call search('".
-            \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
+            \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
             \ "', 'W')"
 let b:comment_skip_back  = "call search('".
-            \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
+            \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
             \ "', 'bW')"
 " Move to the start and end of comments
 exec 'nnoremap <silent><buffer> ]" :call search('."'".b:comment_start."'".', "W" )<CR>'
 exec 'nnoremap <silent><buffer> [" :call search('."'".b:comment_end."'".', "W" )<CR>'
-exec 'vnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
-exec 'vnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
+exec 'xnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
+exec 'xnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
 
 " Comments can be of the form:
 "   /*
@@ -429,7 +452,7 @@
 " or
 "   --
 " or
-"   // 
+"   //
 setlocal comments=s1:/*,mb:*,ex:*/,:--,://
 
 " Set completion with CTRL-X CTRL-O to autoloaded function.
@@ -439,42 +462,50 @@
     " OMNI function prior to setting up the SQL OMNI function
     let b:sql_compl_savefunc = &omnifunc
 
+    " Source it to determine it's version
+    runtime autoload/sqlcomplete.vim
     " This is used by the sqlcomplete.vim plugin
     " Source it for it's global functions
-    runtime autoload/syntaxcomplete.vim 
+    runtime autoload/syntaxcomplete.vim
 
     setlocal omnifunc=sqlcomplete#Complete
     " Prevent the intellisense plugin from loading
     let b:sql_vis = 1
     if !exists('g:omni_sql_no_default_maps')
+        let regex_extra = ''
+        if exists('g:loaded_syntax_completion') && exists('g:loaded_sql_completion')
+            if g:loaded_syntax_completion > 120 && g:loaded_sql_completion > 140
+                let regex_extra = '\\w*'
+            endif
+        endif
         " Static maps which use populate the completion list
         " using Vim's syntax highlighting rules
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword'.regex_extra.'")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction'.regex_extra.'")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption'.regex_extra.'")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType'.regex_extra.'")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement'.regex_extra.'")<CR><C-X><C-O>'
         " Dynamic maps which use populate the completion list
         " using the dbext.vim plugin
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
         " The next 3 maps are only to be used while the completion window is
         " active due to the <CR> at the beginning of the map
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
         " <C-Right> is not recognized on most Unix systems, so only create
         " these additional maps on the Windows platform.
         " If you would like to use these maps, choose a different key and make
         " the same map in your vimrc.
         " if has('win32')
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
         " endif
         " Remove any cached items useful for schema changes
-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
+        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
     endif
 
     if b:sql_compl_savefunc != ""
@@ -488,6 +519,6 @@
 endif
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sw=4:
-
diff -Naur vim73.orig/runtime/ftplugin/svg.vim vim73/runtime/ftplugin/svg.vim
--- vim73.orig/runtime/ftplugin/svg.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/svg.vim	2013-08-04 19:09:08.387283879 +0000
@@ -37,3 +37,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/tcl.vim vim73/runtime/ftplugin/tcl.vim
--- vim73.orig/runtime/ftplugin/tcl.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/tcl.vim	2013-08-04 19:09:08.390617202 +0000
@@ -32,5 +32,6 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: set et ts=4 sw=4 tw=78:
diff -Naur vim73.orig/runtime/ftplugin/tcsh.vim vim73/runtime/ftplugin/tcsh.vim
--- vim73.orig/runtime/ftplugin/tcsh.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/tcsh.vim	2013-08-04 19:09:08.390617202 +0000
@@ -37,3 +37,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/tex.vim vim73/runtime/ftplugin/tex.vim
--- vim73.orig/runtime/ftplugin/tex.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/tex.vim	2013-08-04 19:09:08.393950525 +0000
@@ -41,5 +41,6 @@
 endif " exists("loaded_matchit")
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sts=2:sw=2:
diff -Naur vim73.orig/runtime/ftplugin/treetop.vim vim73/runtime/ftplugin/treetop.vim
--- vim73.orig/runtime/ftplugin/treetop.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/ftplugin/treetop.vim	2013-08-04 19:09:08.393950525 +0000
@@ -0,0 +1,19 @@
+" Vim filetype plugin file
+" Language:         Treetop
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2011-03-14
+
+if exists("b:did_ftplugin")
+  finish
+endif
+let b:did_ftplugin = 1
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal comments=b:# commentstring=#\ %s formatoptions-=tcroq formatoptions+=l
+
+let b:undo_ftplugin = "setl com< cms< fo<"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/vhdl.vim vim73/runtime/ftplugin/vhdl.vim
--- vim73.orig/runtime/ftplugin/vhdl.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/vhdl.vim	2013-08-04 19:09:08.400617172 +0000
@@ -1,8 +1,8 @@
 " VHDL filetype plugin
 " Language:    VHDL
-" Maintainer:  R.Shankar <shankar.r?freescale.com>
+" Maintainer:  R.Shankar <shankar.pec?gmail.com>
 " Modified By: Gerald Lai <laigera+vim?gmail.com>
-" Last Change: 2006 Feb 16
+" Last Change: 2011 Dec 11
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
@@ -12,6 +12,9 @@
 " Don't load another plugin for this buffer
 let b:did_ftplugin = 1
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Set 'formatoptions' to break comment lines but not other lines,
 " and insert the comment leader when hitting <CR> or using "o".
 "setlocal fo-=t fo+=croqlm1
@@ -22,8 +25,6 @@
 " Format comments to be up to 78 characters long
 "setlocal tw=75
 
-set cpo-=C
-
 " Win32 can filter files in the browse dialog
 "if has("gui_win32") && !exists("b:browsefilter")
 "  let b:browsefilter = "Verilog Source Files (*.v)\t*.v\n" .
@@ -82,3 +83,6 @@
 vnoremap <buffer><silent>]] :<C-u>cal <SID>CountWrapper(']]')<CR>
 vnoremap <buffer><silent>[] :<C-u>cal <SID>CountWrapper('[]')<CR>
 vnoremap <buffer><silent>][ :<C-u>cal <SID>CountWrapper('][')<CR>
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/vim.vim vim73/runtime/ftplugin/vim.vim
--- vim73.orig/runtime/ftplugin/vim.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/vim.vim	2013-08-04 19:09:08.400617172 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin
 " Language:	Vim
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2009 Jan 22
+" Last Change:	2013 Jun 26
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
diff -Naur vim73.orig/runtime/ftplugin/xhtml.vim vim73/runtime/ftplugin/xhtml.vim
--- vim73.orig/runtime/ftplugin/xhtml.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/xhtml.vim	2013-08-04 19:09:08.403950495 +0000
@@ -64,3 +64,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/xml.vim vim73/runtime/ftplugin/xml.vim
--- vim73.orig/runtime/ftplugin/xml.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/xml.vim	2013-08-04 19:09:08.407283818 +0000
@@ -61,3 +61,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/xs.vim vim73/runtime/ftplugin/xs.vim
--- vim73.orig/runtime/ftplugin/xs.vim	2010-07-22 03:46:09.000000000 +0000
+++ vim73/runtime/ftplugin/xs.vim	2013-08-04 19:09:08.410617142 +0000
@@ -1,8 +1,9 @@
 " Vim filetype plugin file
-" Language:     XS (Perl extension interface language)
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl
-" Last Change:  2009-08-14
+" Language:      XS (Perl extension interface language)
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2009-08-14
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin")
diff -Naur vim73.orig/runtime/ftplugin/xsd.vim vim73/runtime/ftplugin/xsd.vim
--- vim73.orig/runtime/ftplugin/xsd.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/xsd.vim	2013-08-04 19:09:08.410617142 +0000
@@ -36,3 +36,4 @@
 
 " Restore the saved compatibility options.
 let &cpo = s:save_cpo
+unlet s:save_cpo
diff -Naur vim73.orig/runtime/ftplugin/zimbu.vim vim73/runtime/ftplugin/zimbu.vim
--- vim73.orig/runtime/ftplugin/zimbu.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/ftplugin/zimbu.vim	2013-08-04 19:09:08.413950465 +0000
@@ -0,0 +1,151 @@
+" Vim filetype plugin file
+" Language:	Zimbu
+" Maintainer:	Bram Moolenaar <Bram@vim.org>
+" Last Change:	2012 Sep 08
+
+" Only do this when not done yet for this buffer
+if exists("b:did_ftplugin")
+  finish
+endif
+
+" Don't load another plugin for this buffer
+let b:did_ftplugin = 1
+
+" Using line continuation here.
+let s:cpo_save = &cpo
+set cpo-=C
+
+let b:undo_ftplugin = "setl fo< com< ofu< efm< tw< et< sts< sw< | if has('vms') | setl isk< | endif"
+
+" Set 'formatoptions' to break comment lines but not other lines,
+" and insert the comment leader when hitting <CR> or using "o".
+setlocal fo-=t fo+=croql
+
+" Set completion with CTRL-X CTRL-O to autoloaded function.
+if exists('&ofu')
+  setlocal ofu=ccomplete#Complete
+endif
+
+" Set 'comments' to format dashed lists in comments.
+" And to keep Zudocu comment characters.
+setlocal comments=sO:#\ -,mO:#\ \ ,:#=,:#-,:#%,:#
+
+setlocal errorformat^=%f\ line\ %l\ col\ %c:\ %m,ERROR:\ %m
+
+" When the matchit plugin is loaded, this makes the % command skip parens and
+" braces in comments.
+let b:match_words = '\(^\s*\)\@<=\(MODULE\|CLASS\|INTERFACE\|BITS\|ENUM\|SHARED\|FUNC\|REPLACE\|DEFINE\|PROC\|EQUAL\|MAIN\|IF\|GENERATE_IF\|WHILE\|REPEAT\|WITH\|DO\|FOR\|SWITCH\|TRY\)\>\|{\s*$:\(^\s*\)\@<=\(ELSE\|ELSEIF\|GENERATE_ELSE\|GENERATE_ELSEIF\|CATCH\|FINALLY\)\>:\(^\s*\)\@<=\(}\|\<UNTIL\>\)'
+
+let b:match_skip = 's:comment\|string\|zimbuchar'
+
+setlocal tw=78
+setlocal et sts=2 sw=2
+
+" Does replace when a dot, space or closing brace is typed.
+func! GCUpperDot(what)
+  if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != '.' && v:char != ')' && v:char != '}' && v:char != ','
+    " no space or dot after the typed text
+    let g:got_char = v:char
+    return a:what
+  endif
+  return GCUpperCommon(a:what)
+endfunc
+
+" Does not replace when a dot is typed.
+func! GCUpper(what)
+  if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != ')' && v:char != ','
+    " no space or other "terminating" character after the typed text
+    let g:got_char = v:char
+    return a:what
+  endif
+  return GCUpperCommon(a:what)
+endfunc
+
+" Only replaces when a space is typed.
+func! GCUpperSpace(what)
+  if v:char != ' '
+    " no space after the typed text
+    let g:got_char = v:char
+    return a:what
+  endif
+  return GCUpperCommon(a:what)
+endfunc
+
+func! GCUpperCommon(what)
+  let col = col(".") - strlen(a:what)
+  if col > 1 && getline('.')[col - 2] != ' '
+    " no space before the typed text
+    let g:got_char = 999
+    return a:what
+  endif
+  let synName = synIDattr(synID(line("."), col(".") - 2, 1), "name")
+  if synName =~ 'Comment\|String\|zimbuCregion\|\<c'
+    " inside a comment or C code
+    let g:got_char = 777
+    return a:what
+  endif
+    let g:got_char = 1111
+  return toupper(a:what)
+endfunc
+
+iabbr <buffer> <expr> alias GCUpperSpace("alias")
+iabbr <buffer> <expr> arg GCUpperDot("arg")
+iabbr <buffer> <expr> break GCUpper("break")
+iabbr <buffer> <expr> case GCUpperSpace("case")
+iabbr <buffer> <expr> catch GCUpperSpace("catch")
+iabbr <buffer> <expr> check GCUpperDot("check")
+iabbr <buffer> <expr> class GCUpperSpace("class")
+iabbr <buffer> <expr> interface GCUpperSpace("interface")
+iabbr <buffer> <expr> implements GCUpperSpace("implements")
+iabbr <buffer> <expr> shared GCUpperSpace("shared")
+iabbr <buffer> <expr> continue GCUpper("continue")
+iabbr <buffer> <expr> default GCUpper("default")
+iabbr <buffer> <expr> extends GCUpper("extends")
+iabbr <buffer> <expr> do GCUpper("do")
+iabbr <buffer> <expr> else GCUpper("else")
+iabbr <buffer> <expr> elseif GCUpperSpace("elseif")
+iabbr <buffer> <expr> enum GCUpperSpace("enum")
+iabbr <buffer> <expr> exit GCUpper("exit")
+iabbr <buffer> <expr> false GCUpper("false")
+iabbr <buffer> <expr> fail GCUpper("fail")
+iabbr <buffer> <expr> finally GCUpper("finally")
+iabbr <buffer> <expr> for GCUpperSpace("for")
+iabbr <buffer> <expr> func GCUpperSpace("func")
+iabbr <buffer> <expr> if GCUpperSpace("if")
+iabbr <buffer> <expr> import GCUpperSpace("import")
+iabbr <buffer> <expr> in GCUpperSpace("in")
+iabbr <buffer> <expr> io GCUpperDot("io")
+iabbr <buffer> <expr> main GCUpper("main")
+iabbr <buffer> <expr> module GCUpperSpace("module")
+iabbr <buffer> <expr> new GCUpper("new")
+iabbr <buffer> <expr> nil GCUpper("nil")
+iabbr <buffer> <expr> ok GCUpper("ok")
+iabbr <buffer> <expr> proc GCUpperSpace("proc")
+iabbr <buffer> <expr> proceed GCUpper("proceed")
+iabbr <buffer> <expr> return GCUpper("return")
+iabbr <buffer> <expr> step GCUpperSpace("step")
+iabbr <buffer> <expr> switch GCUpperSpace("switch")
+iabbr <buffer> <expr> sys GCUpperDot("sys")
+iabbr <buffer> <expr> this GCUpperDot("this")
+iabbr <buffer> <expr> throw GCUpperSpace("throw")
+iabbr <buffer> <expr> try GCUpper("try")
+iabbr <buffer> <expr> to GCUpperSpace("to")
+iabbr <buffer> <expr> true GCUpper("true")
+iabbr <buffer> <expr> until GCUpperSpace("until")
+iabbr <buffer> <expr> while GCUpperSpace("while")
+iabbr <buffer> <expr> repeat GCUpper("repeat")
+
+nnoremap <silent> <buffer> [[ m`:call ZimbuGoStartBlock()<CR>
+nnoremap <silent> <buffer> ]] m`:call ZimbuGoEndBlock()<CR>
+
+" Using a function makes sure the search pattern is restored
+func! ZimbuGoStartBlock()
+  ?^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\>
+endfunc
+func! ZimbuGoEndBlock()
+  /^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\>
+endfunc
+
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugin/zsh.vim vim73/runtime/ftplugin/zsh.vim
--- vim73.orig/runtime/ftplugin/zsh.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/ftplugin/zsh.vim	2013-08-04 19:09:08.413950465 +0000
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:         Zsh shell script
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2008-07-09
+" Latest Revision:  2011-01-23
 
 if exists("b:did_ftplugin")
   finish
@@ -15,5 +15,12 @@
 
 setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
 
+let b:match_words =
+      \   &matchpairs
+      \ . ',\<if\>:\<elif\>:\<else\>:\<fi\>'
+      \ . ',\<case\>:^\s*([^)]*):\<esac\>'
+      \ . ',\<\%(select\|while\|until\|repeat\|for\%(each\)\=\)\>:\<done\>'
+let b:match_skip = 's:comment\|string\|heredoc\|subst'
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff -Naur vim73.orig/runtime/ftplugof.vim vim73/runtime/ftplugof.vim
--- vim73.orig/runtime/ftplugof.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/ftplugof.vim	2013-08-04 19:09:08.417283788 +0000
@@ -1,11 +1,13 @@
 " Vim support file to switch off loading plugins for file types
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2002 Apr 04
+" Last Change:	2011 Oct 20
 
 if exists("did_load_ftplugin")
   unlet did_load_ftplugin
 endif
 
-" Remove all autocommands in the filetypeplugin group
-silent! au! filetypeplugin *
+" Remove all autocommands in the filetypeplugin group, if any exist.
+if exists("#filetypeplugin")
+  silent! au! filetypeplugin *
+endif
diff -Naur vim73.orig/runtime/indent/ada.vim vim73/runtime/indent/ada.vim
--- vim73.orig/runtime/indent/ada.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/ada.vim	2013-08-04 19:09:08.430617082 +0000
@@ -39,6 +39,8 @@
 if exists("*GetAdaIndent")
    finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists("g:ada_with_gnat_project_files")
    let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<\(loop\|use\)\>\|declare\>\|begin\>\|type\>.*\<is\>[^;]*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|project\>\|then\>\|when\>\|is\>\)'
@@ -292,6 +294,9 @@
    return ind
 endfunction GetAdaIndent
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff -Naur vim73.orig/runtime/indent/awk.vim vim73/runtime/indent/awk.vim
--- vim73.orig/runtime/indent/awk.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/awk.vim	2013-08-04 19:09:08.433950405 +0000
@@ -23,6 +23,7 @@
 " 26-04-2002 Got initial version working reasonably well
 " 29-04-2002 Fixed problems in function headers and max line width
 "	     Added support for two-line if's without curly braces
+" Fixed hang: 2011 Aug 31
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -118,7 +119,7 @@
 
    " Case 1
    if prev_data =~ ')' && brace_balance < 0
-      while brace_balance != 0
+      while brace_balance != 0 && prev_lineno > 0
 	 let prev_lineno = s:Get_prev_line( prev_lineno )
 	 let prev_data = getline( prev_lineno )
 	 let brace_balance=brace_balance+s:Get_brace_balance(prev_data,'(',')' )
@@ -188,6 +189,9 @@
 
 function! s:Seems_continuing( line )
   " Unfinished lines
+  if a:line =~ '\(--\|++\)\s*$'
+    return 0
+  endif
   if a:line =~ '[\\,\|\&\+\-\*\%\^]\s*$'
     return 1
   endif
diff -Naur vim73.orig/runtime/indent/clojure.vim vim73/runtime/indent/clojure.vim
--- vim73.orig/runtime/indent/clojure.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/indent/clojure.vim	2013-08-04 19:09:08.443950375 +0000
@@ -0,0 +1,398 @@
+" Vim indent file
+" Language:     Clojure
+" Author:       Meikel Brandmeyer <mb@kotka.de>
+" URL:          http://kotka.de/projects/clojure/vimclojure.html
+"
+" Maintainer:   Sung Pae <self@sungpae.com>
+" URL:          https://github.com/guns/vim-clojure-static
+" License:      Same as Vim
+" Last Change:  30 January 2013
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent = 1
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+let b:undo_indent = 'setlocal autoindent< smartindent< lispwords< expandtab< softtabstop< shiftwidth< indentexpr< indentkeys<'
+
+setlocal noautoindent nosmartindent
+setlocal softtabstop=2 shiftwidth=2 expandtab
+setlocal indentkeys=!,o,O
+
+if exists("*searchpairpos")
+
+    if !exists('g:clojure_maxlines')
+        let g:clojure_maxlines = 100
+    endif
+
+    if !exists('g:clojure_fuzzy_indent')
+        let g:clojure_fuzzy_indent = 1
+    endif
+
+    if !exists('g:clojure_fuzzy_indent_patterns')
+        let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
+    endif
+
+    if !exists('g:clojure_fuzzy_indent_blacklist')
+        let g:clojure_fuzzy_indent_blacklist = ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
+    endif
+
+    if !exists('g:clojure_special_indent_words')
+        let g:clojure_special_indent_words = 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
+    endif
+
+    if !exists('g:clojure_align_multiline_strings')
+        let g:clojure_align_multiline_strings = 0
+    endif
+
+    function! s:SynIdName()
+        return synIDattr(synID(line("."), col("."), 0), "name")
+    endfunction
+
+    function! s:CurrentChar()
+        return getline('.')[col('.')-1]
+    endfunction
+
+    function! s:CurrentWord()
+        return getline('.')[col('.')-1 : searchpos('\v>', 'n', line('.'))[1]-2]
+    endfunction
+
+    function! s:IsParen()
+        return s:CurrentChar() =~ '\v[\(\)\[\]\{\}]' &&
+             \ s:SynIdName() !~? '\vstring|comment'
+    endfunction
+
+    " Returns 1 if string matches a pattern in 'patterns', which may be a
+    " list of patterns, or a comma-delimited string of implicitly anchored
+    " patterns.
+    function! s:MatchesOne(patterns, string)
+        let list = type(a:patterns) == type([])
+                   \ ? a:patterns
+                   \ : map(split(a:patterns, ','), '"^" . v:val . "$"')
+        for pat in list
+            if a:string =~ pat | return 1 | endif
+        endfor
+    endfunction
+
+    function! s:SavePosition()
+        let [ _b, l, c, _o ] = getpos(".")
+        let b = bufnr("%")
+        return [b, l, c]
+    endfunction
+
+    function! s:RestorePosition(value)
+        let [b, l, c] = a:value
+        if bufnr("%") != b
+            execute b "buffer!"
+        endif
+        call setpos(".", [0, l, c, 0])
+    endfunction
+
+    function! s:MatchPairs(open, close, stopat)
+        " Stop only on vector and map [ resp. {. Ignore the ones in strings and
+        " comments.
+        if a:stopat == 0
+            let stopat = max([line(".") - g:clojure_maxlines, 0])
+        else
+            let stopat = a:stopat
+        endif
+
+        let pos = searchpairpos(a:open, '', a:close, 'bWn', "!s:IsParen()", stopat)
+        return [pos[0], virtcol(pos)]
+    endfunction
+
+    function! s:ClojureCheckForStringWorker()
+        " Check whether there is the last character of the previous line is
+        " highlighted as a string. If so, we check whether it's a ". In this
+        " case we have to check also the previous character. The " might be the
+        " closing one. In case the we are still in the string, we search for the
+        " opening ". If this is not found we take the indent of the line.
+        let nb = prevnonblank(v:lnum - 1)
+
+        if nb == 0
+            return -1
+        endif
+
+        call cursor(nb, 0)
+        call cursor(0, col("$") - 1)
+        if s:SynIdName() !~? "string"
+            return -1
+        endif
+
+        " This will not work for a " in the first column...
+        if s:CurrentChar() == '"'
+            call cursor(0, col("$") - 2)
+            if s:SynIdName() !~? "string"
+                return -1
+            endif
+            if s:CurrentChar() != '\\'
+                return -1
+            endif
+            call cursor(0, col("$") - 1)
+        endif
+
+        let p = searchpos('\(^\|[^\\]\)\zs"', 'bW')
+
+        if p != [0, 0]
+            return p[1] - 1
+        endif
+
+        return indent(".")
+    endfunction
+
+    function! s:CheckForString()
+        let pos = s:SavePosition()
+        try
+            let val = s:ClojureCheckForStringWorker()
+        finally
+            call s:RestorePosition(pos)
+        endtry
+        return val
+    endfunction
+
+    function! s:ClojureIsMethodSpecialCaseWorker(position)
+        " Find the next enclosing form.
+        call search('\S', 'Wb')
+
+        " Special case: we are at a '(('.
+        if s:CurrentChar() == '('
+            return 0
+        endif
+        call cursor(a:position)
+
+        let nextParen = s:MatchPairs('(', ')', 0)
+
+        " Special case: we are now at toplevel.
+        if nextParen == [0, 0]
+            return 0
+        endif
+        call cursor(nextParen)
+
+        call search('\S', 'W')
+        if g:clojure_special_indent_words =~ '\<' . s:CurrentWord() . '\>'
+            return 1
+        endif
+
+        return 0
+    endfunction
+
+    function! s:IsMethodSpecialCase(position)
+        let pos = s:SavePosition()
+        try
+            let val = s:ClojureIsMethodSpecialCaseWorker(a:position)
+        finally
+            call s:RestorePosition(pos)
+        endtry
+        return val
+    endfunction
+
+    function! GetClojureIndent()
+        " Get rid of special case.
+        if line(".") == 1
+            return 0
+        endif
+
+        " We have to apply some heuristics here to figure out, whether to use
+        " normal lisp indenting or not.
+        let i = s:CheckForString()
+        if i > -1
+            return i + !!g:clojure_align_multiline_strings
+        endif
+
+        call cursor(0, 1)
+
+        " Find the next enclosing [ or {. We can limit the second search
+        " to the line, where the [ was found. If no [ was there this is
+        " zero and we search for an enclosing {.
+        let paren = s:MatchPairs('(', ')', 0)
+        let bracket = s:MatchPairs('\[', '\]', paren[0])
+        let curly = s:MatchPairs('{', '}', bracket[0])
+
+        " In case the curly brace is on a line later then the [ or - in
+        " case they are on the same line - in a higher column, we take the
+        " curly indent.
+        if curly[0] > bracket[0] || curly[1] > bracket[1]
+            if curly[0] > paren[0] || curly[1] > paren[1]
+                return curly[1]
+            endif
+        endif
+
+        " If the curly was not chosen, we take the bracket indent - if
+        " there was one.
+        if bracket[0] > paren[0] || bracket[1] > paren[1]
+            return bracket[1]
+        endif
+
+        " There are neither { nor [ nor (, ie. we are at the toplevel.
+        if paren == [0, 0]
+            return 0
+        endif
+
+        " Now we have to reimplement lispindent. This is surprisingly easy, as
+        " soon as one has access to syntax items.
+        "
+        " - Check whether we are in a special position after a word in
+        "   g:clojure_special_indent_words. These are special cases.
+        " - Get the next keyword after the (.
+        " - If its first character is also a (, we have another sexp and align
+        "   one column to the right of the unmatched (.
+        " - In case it is in lispwords, we indent the next line to the column of
+        "   the ( + sw.
+        " - If not, we check whether it is last word in the line. In that case
+        "   we again use ( + sw for indent.
+        " - In any other case we use the column of the end of the word + 2.
+        call cursor(paren)
+
+        if s:IsMethodSpecialCase(paren)
+            return paren[1] + &shiftwidth - 1
+        endif
+
+        " In case we are at the last character, we use the paren position.
+        if col("$") - 1 == paren[1]
+            return paren[1]
+        endif
+
+        " In case after the paren is a whitespace, we search for the next word.
+        normal! l
+        if s:CurrentChar() == ' '
+            normal! w
+        endif
+
+        " If we moved to another line, there is no word after the (. We
+        " use the ( position for indent.
+        if line(".") > paren[0]
+            return paren[1]
+        endif
+
+        " We still have to check, whether the keyword starts with a (, [ or {.
+        " In that case we use the ( position for indent.
+        let w = s:CurrentWord()
+        if stridx('([{', w[0]) > -1
+            return paren[1]
+        endif
+
+        " Test words without namespace qualifiers and leading reader macro
+        " metacharacters.
+        "
+        " e.g. clojure.core/defn and #'defn should both indent like defn.
+        let ww = substitute(w, "\\v%(.*/|[#'`~@^,]*)(.*)", '\1', '')
+
+        if &lispwords =~ '\V\<' . ww . '\>'
+            return paren[1] + &shiftwidth - 1
+        endif
+
+        if g:clojure_fuzzy_indent
+            \ && !s:MatchesOne(g:clojure_fuzzy_indent_blacklist, ww)
+            \ && s:MatchesOne(g:clojure_fuzzy_indent_patterns, ww)
+            return paren[1] + &shiftwidth - 1
+        endif
+
+        normal! W
+        if paren[0] < line(".")
+            return paren[1] + &shiftwidth - 1
+        endif
+
+        normal! ge
+        return virtcol(".") + 1
+    endfunction
+
+    setlocal indentexpr=GetClojureIndent()
+
+else
+
+    " In case we have searchpairpos not available we fall back to
+    " normal lisp indenting.
+    setlocal indentexpr=
+    setlocal lisp
+    let b:undo_indent .= '| setlocal lisp<'
+
+endif
+
+" Specially indented symbols from clojure.core and clojure.test.
+"
+" Clojure symbols are indented in the defn style when they:
+"
+"   * Define vars and anonymous functions
+"   * Create new lexical scopes or scopes with altered environments
+"   * Create conditional branches from a predicate function or value
+"
+" The arglists for these functions are generally in the form of [x & body];
+" Functions that accept a flat list of forms do not treat the first argument
+" specially and hence are not indented specially.
+
+" Definitions
+setlocal lispwords=
+setlocal lispwords+=bound-fn
+setlocal lispwords+=def
+setlocal lispwords+=definline
+setlocal lispwords+=definterface
+setlocal lispwords+=defmacro
+setlocal lispwords+=defmethod
+setlocal lispwords+=defmulti
+setlocal lispwords+=defn
+setlocal lispwords+=defn-
+setlocal lispwords+=defonce
+setlocal lispwords+=defprotocol
+setlocal lispwords+=defrecord
+setlocal lispwords+=defstruct
+setlocal lispwords+=deftest " clojure.test
+setlocal lispwords+=deftest- " clojure.test
+setlocal lispwords+=deftype
+setlocal lispwords+=extend
+setlocal lispwords+=extend-protocol
+setlocal lispwords+=extend-type
+setlocal lispwords+=fn
+setlocal lispwords+=ns
+setlocal lispwords+=proxy
+setlocal lispwords+=reify
+setlocal lispwords+=set-test " clojure.test
+
+" Binding forms
+setlocal lispwords+=as->
+setlocal lispwords+=binding
+setlocal lispwords+=doall
+setlocal lispwords+=dorun
+setlocal lispwords+=doseq
+setlocal lispwords+=dotimes
+setlocal lispwords+=doto
+setlocal lispwords+=for
+setlocal lispwords+=if-let
+setlocal lispwords+=let
+setlocal lispwords+=letfn
+setlocal lispwords+=locking
+setlocal lispwords+=loop
+setlocal lispwords+=testing " clojure.test
+setlocal lispwords+=when-first
+setlocal lispwords+=when-let
+setlocal lispwords+=with-bindings
+setlocal lispwords+=with-in-str
+setlocal lispwords+=with-local-vars
+setlocal lispwords+=with-open
+setlocal lispwords+=with-precision
+setlocal lispwords+=with-redefs
+setlocal lispwords+=with-redefs-fn
+setlocal lispwords+=with-test " clojure.test
+
+" Conditional branching
+setlocal lispwords+=case
+setlocal lispwords+=cond->
+setlocal lispwords+=cond->>
+setlocal lispwords+=condp
+setlocal lispwords+=if
+setlocal lispwords+=if-not
+setlocal lispwords+=when
+setlocal lispwords+=when-not
+setlocal lispwords+=while
+
+" Exception handling
+setlocal lispwords+=catch
+setlocal lispwords+=try " For aesthetics when enclosing single line
+
+let &cpo = s:save_cpo
+unlet! s:save_cpo
+
+" vim:sts=4 sw=4 et:
diff -Naur vim73.orig/runtime/indent/cmake.vim vim73/runtime/indent/cmake.vim
--- vim73.orig/runtime/indent/cmake.vim	2010-06-03 19:56:12.000000000 +0000
+++ vim73/runtime/indent/cmake.vim	2013-08-04 19:09:08.443950375 +0000
@@ -23,6 +23,8 @@
 if exists("*CMakeGetIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 fun! CMakeGetIndent(lnum)
   let this_line = getline(a:lnum)
@@ -83,3 +85,6 @@
 
   return ind
 endfun
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/indent/css.vim vim73/runtime/indent/css.vim
--- vim73.orig/runtime/indent/css.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/css.vim	2013-08-04 19:09:08.450617021 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	    CSS
 " Maintainer:	    Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-12-20
+" Latest Revision:  2012-05-30
 
 if exists("b:did_indent")
   finish
@@ -12,9 +12,13 @@
 setlocal indentkeys=0{,0},!^F,o,O
 setlocal nosmartindent
 
+let b:undo_indent = "setl smartindent< indentkeys< indentexpr<"
+
 if exists("*GetCSSIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 function s:prevnonblanknoncomment(lnum)
   let lnum = a:lnum
@@ -64,8 +68,6 @@
   let line = getline(v:lnum)
   if line =~ '^\s*\*'
     return cindent(v:lnum)
-  elseif line =~ '^\s*}'
-    return indent(v:lnum) - &sw
   endif
 
   let pnum = s:prevnonblanknoncomment(v:lnum - 1)
@@ -73,12 +75,9 @@
     return 0
   endif
 
-  let ind = indent(pnum) + s:count_braces(pnum, 1) * &sw
-
-  let pline = getline(pnum)
-  if pline =~ '}\s*$'
-    let ind -= (s:count_braces(pnum, 0) - (pline =~ '^\s*}' ? 1 : 0)) * &sw
-  endif
-
-  return ind
+  return indent(pnum) + s:count_braces(pnum, 1) * &sw
+        \ - s:count_braces(v:lnum, 0) * &sw
 endfunction
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/indent/cucumber.vim vim73/runtime/indent/cucumber.vim
--- vim73.orig/runtime/indent/cucumber.vim	2010-05-21 09:55:01.000000000 +0000
+++ vim73/runtime/indent/cucumber.vim	2013-08-04 19:09:08.450617021 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Cucumber
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists("b:did_indent")
   finish
@@ -12,6 +12,8 @@
 setlocal indentexpr=GetCucumberIndent()
 setlocal indentkeys=o,O,*<Return>,<:>,0<Bar>,0#,=,!^F
 
+let b:undo_indent = 'setl ai< inde< indk<'
+
 " Only define the function once.
 if exists("*GetCucumberIndent")
   finish
@@ -24,35 +26,47 @@
 function! GetCucumberIndent()
   let line  = getline(prevnonblank(v:lnum-1))
   let cline = getline(v:lnum)
+  let nline = getline(nextnonblank(v:lnum+1))
   let syn = s:syn(prevnonblank(v:lnum-1))
   let csyn = s:syn(v:lnum)
+  let nsyn = s:syn(nextnonblank(v:lnum+1))
   if csyn ==# 'cucumberFeature' || cline =~# '^\s*Feature:'
+    " feature heading
     return 0
   elseif csyn ==# 'cucumberExamples' || cline =~# '^\s*\%(Examples\|Scenarios\):'
+    " examples heading
     return 2 * &sw
   elseif csyn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || cline =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):'
+    " background, scenario or outline heading
     return &sw
   elseif syn ==# 'cucumberFeature' || line =~# '^\s*Feature:'
+    " line after feature heading
     return &sw
   elseif syn ==# 'cucumberExamples' || line =~# '^\s*\%(Examples\|Scenarios\):'
+    " line after examples heading
     return 3 * &sw
   elseif syn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || line =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):'
+    " line after background, scenario or outline heading
     return 2 * &sw
-  elseif cline =~# '^\s*@' && (s:syn(nextnonblank(v:lnum+1)) == 'cucumberFeature' || getline(nextnonblank(v:lnum+1)) =~# '^\s*Feature:' || indent(prevnonblank(v:lnum-1)) <= 0)
+  elseif cline =~# '^\s*[@#]' && (nsyn == 'cucumberFeature' || nline =~# '^\s*Feature:' || indent(prevnonblank(v:lnum-1)) <= 0)
+    " tag or comment before a feature heading
     return 0
-  elseif line =~# '^\s*@'
+  elseif cline =~# '^\s*@'
+    " other tags
     return &sw
-  elseif cline =~# '^\s*|' && line =~# '^\s*|'
+  elseif cline =~# '^\s*[#|]' && line =~# '^\s*|'
+    " mid-table
+    " preserve indent
     return indent(prevnonblank(v:lnum-1))
-  elseif cline =~# '^\s*|' && line =~# '^\s*[^|#]'
+  elseif cline =~# '^\s*|' && line =~# '^\s*[^|]'
+    " first line of a table, relative indent
     return indent(prevnonblank(v:lnum-1)) + &sw
-  elseif cline =~# '^\s*[^|# \t]' && line =~# '^\s*|'
+  elseif cline =~# '^\s*[^|]' && line =~# '^\s*|'
+    " line after a table, relative unindent
     return indent(prevnonblank(v:lnum-1)) - &sw
-  elseif cline =~# '^\s*$' && line =~# '^\s*|'
-    let in = indent(prevnonblank(v:lnum-1))
-    return in == indent(v:lnum) ? in : in - &sw
-  elseif cline =~# '^\s*#' && getline(v:lnum-1) =~ '^\s*$' && getline(v:lnum+1) =~# '\S'
-    return indent(getline(v:lnum+1))
+  elseif cline =~# '^\s*#' && getline(v:lnum-1) =~ '^\s*$' && (nsyn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || nline =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):')
+    " comments on scenarios
+    return &sw
   endif
   return indent(prevnonblank(v:lnum-1))
 endfunction
diff -Naur vim73.orig/runtime/indent/dtd.vim vim73/runtime/indent/dtd.vim
--- vim73.orig/runtime/indent/dtd.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/dtd.vim	2013-08-04 19:09:08.457283668 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	    DTD (Document Type Definition for XML)
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2008-07-18
+" Latest Revision:  2011-07-08
 
 let s:cpo_save = &cpo
 set cpo&vim
@@ -52,7 +52,7 @@
   let end = a:end
   let parentheses = [end - 1]
   while token != ""
-    let [token, end] = s:lex(a:line, end, '^\%([(),|]\|[A-Za-z0-9_-]\+\)[?*+]\=')
+    let [token, end] = s:lex(a:line, end, '^\%([(),|]\|[A-Za-z0-9_-]\+\|#P\=CDATA\|%[A-Za-z0-9_-]\+;\)[?*+]\=')
     if token[0] == '('
       call add(parentheses, end - 1)
     elseif token[0] == ')'
@@ -80,7 +80,7 @@
   let lnum = line('.')
   let col = col('.')
   let indent = indent('.')
-  let line = join(getline(lnum, v:lnum - 1), "\n")
+  let line = lnum == v:lnum ? getline(lnum) : join(getline(lnum, v:lnum - 1), "\n")
 
   let [declaration, end] = s:lex1(line, col)
   if declaration == ""
@@ -106,7 +106,7 @@
     " Check for token following element name.  This can be a specification of
     " whether the start or end tag may be omitted.  If nothing is found, indent
     " one level.
-    let [token, end] = s:lex(line, end)
+    let [token, end] = s:lex(line, end, '^\%([-O(]\|ANY\|EMPTY\)')
     let n = 0
     while token =~ '[-O]' && n < 2
       let [token, end] = s:lex(line, end, '^\%([-O(]\|ANY\|EMPTY\)')
@@ -214,8 +214,7 @@
 
       " Finally look for the attribute’s default value.  If non exists, indent
       " two levels.
-      " TODO: Do validation of keywords (#REQUIRED|#IMPLIED)?
-      let [default, end] = s:lex(line, end, '^\%("\_[^"]*"\|[^[:space:]]\+\)')
+      let [default, end] = s:lex(line, end, '^\%("\_[^"]*"\|#\(REQUIRED\|IMPLIED\|FIXED\)\)')
       if default == ""
         return indent + &sw * 2
       elseif default == '#FIXED'
@@ -323,3 +322,4 @@
 endfunction
 
 let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/indent/eiffel.vim vim73/runtime/indent/eiffel.vim
--- vim73.orig/runtime/indent/eiffel.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/eiffel.vim	2013-08-04 19:09:08.460616991 +0000
@@ -1,11 +1,11 @@
 " Vim indent file
 " Language:	Eiffel
-" Maintainer:	Jocelyn Fiat <eiffel@djoce.net>
+" Maintainer:	Jocelyn Fiat <jfiat@eiffel.com>
 " Previous-Maintainer:	David Clarke <gadicath@dishevelled.net>
+" Contributions from: Thilo Six
 " $Date: 2004/12/09 21:33:52 $
 " $Revision: 1.3 $
-" URL: http://www.djoce.net/page/vim/
-" Last Change:	2004 Sept 14 : removed specific value for tab (sw)
+" URL: https://github.com/eiffelhub/vim-eiffel
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -23,6 +23,8 @@
 setlocal indentkeys+==creation,=feature,=inherit,=class,=is,=redefine,=rename,=variant
 setlocal indentkeys+==invariant,=do,=local,=export
 
+let b:undo_indent = "setl smartindent< indentkeys< indentexpr< autoindent< comments< "
+
 " Define some stuff
 " keywords grouped by indenting
 let s:trust_user_indent = '\(+\)\(\s*\(--\).*\)\=$'
@@ -38,6 +40,9 @@
   finish
 endif
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 function GetEiffelIndent()
 
   " Eiffel Class indenting
@@ -103,4 +108,7 @@
   return ind
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2
diff -Naur vim73.orig/runtime/indent/erlang.vim vim73/runtime/indent/erlang.vim
--- vim73.orig/runtime/indent/erlang.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/erlang.vim	2013-08-04 19:09:08.460616991 +0000
@@ -1,206 +1,1390 @@
 " Vim indent file
-" Language:     Erlang
-" Maintainer:   Csaba Hoch <csaba.hoch@gmail.com>
-" Contributor:  Edwin Fine <efine145_nospam01 at usa dot net>
-" Last Change:  2008 Mar 12
+" Language:     Erlang (http://www.erlang.org)
+" Author:       Csaba Hoch <csaba.hoch@gmail.com>
+" Contributors: Edwin Fine <efine145_nospam01 at usa dot net>
+"               Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
+"               Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+" Last Update:  2013-Jun-01
+" License:      Vim license
+" URL:          https://github.com/hcs42/vim-erlang
+
+" Note About Usage:
+"   This indentation script works best with the Erlang syntax file created by
+"   Kreąimir Marľić (Kresimir Marzic) and maintained by Csaba Hoch.
 
-" Only load this indent file when no other was loaded.
-if exists("b:did_indent")
+" Notes About Implementation:
+"
+" - LTI = Line to indent.
+" - The index of the first line is 1, but the index of the first column is 0.
+
+
+" Initialization {{{1
+" ==============
+
+" Only load this indent file when no other was loaded
+" Vim 7 or later is needed
+if exists("b:did_indent") || version < 700
   finish
+else
+  let b:did_indent = 1
 endif
-let b:did_indent = 1
 
 setlocal indentexpr=ErlangIndent()
-setlocal indentkeys+==after,=end,=catch,=),=],=}
+setlocal indentkeys+=0=end,0=of,0=catch,0=after,0=when,0=),0=],0=},0=>>
 
-" Only define the functions once.
+" Only define the functions once
 if exists("*ErlangIndent")
-   finish
+  finish
 endif
 
-" The function go through the whole line, analyses it and sets the indentation
-" (ind variable).
-" l: the number of the line to be examined.
-function s:ErlangIndentAtferLine(l)
-    let i = 0 " the index of the current character in the line
-    let length = strlen(a:l) " the length of the line
-    let ind = 0 " how much should be the difference between the indentation of
-                " the current line and the indentation of the next line?
-                " e.g. +1: the indentation of the next line should be equal to
-                " the indentation of the current line plus one shiftwidth
-    let lastFun = 0 " the last token was a 'fun'
-    let lastReceive = 0 " the last token was a 'receive'; needed for 'after'
-    let lastHashMark = 0 " the last token was a 'hashmark'
-
-    while 0<= i && i < length
-
-        " m: the next value of the i
-        if a:l[i] == '%'
-            break
-        elseif a:l[i] == '"'
-            let m = matchend(a:l,'"\%([^"\\]\|\\.\)*"',i)
-            let lastReceive = 0
-        elseif a:l[i] == "'"
-            let m = matchend(a:l,"'[^']*'",i)
-            let lastReceive = 0
-        elseif a:l[i] =~# "[a-z]"
-            let m = matchend(a:l,".[[:alnum:]_]*",i)
-            if lastFun
-                let ind = ind - 1
-                let lastFun = 0
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^\%(case\|if\|try\)$'
-                let ind = ind + 1
-            elseif a:l[(i):(m-1)] =~# '^receive$'
-                let ind = ind + 1
-                let lastReceive = 1
-            elseif a:l[(i):(m-1)] =~# '^begin$'
-                let ind = ind + 2
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^end$'
-                let ind = ind - 2
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^after$'
-                if lastReceive == 0
-                    let ind = ind - 1
-                else
-                    let ind = ind + 0
-                end
-                let lastReceive = 0
-            elseif a:l[(i):(m-1)] =~# '^fun$'
-                let ind = ind + 1
-                let lastFun = 1
-                let lastReceive = 0
-            endif
-        elseif a:l[i] =~# "[A-Z_]"
-            let m = matchend(a:l,".[[:alnum:]_]*",i)
-            let lastReceive = 0
-        elseif a:l[i] == '$'
-            let m = i+2
-            let lastReceive = 0
-        elseif a:l[i] == "." && (i+1>=length || a:l[i+1]!~ "[0-9]")
-            let m = i+1
-            if lastHashMark
-                let lastHashMark = 0
-            else
-                let ind = ind - 1
-            end
-            let lastReceive = 0
-        elseif a:l[i] == '-' && (i+1<length && a:l[i+1]=='>')
-            let m = i+2
-            let ind = ind + 1
-            let lastReceive = 0
-        elseif a:l[i] == ';'
-            let m = i+1
-            let ind = ind - 1
-            let lastReceive = 0
-        elseif a:l[i] == '#'
-            let m = i+1
-            let lastHashMark = 1
-        elseif a:l[i] =~# '[({[]'
-            let m = i+1
-            let ind = ind + 1
-            let lastFun = 0
-            let lastReceive = 0
-            let lastHashMark = 0
-        elseif a:l[i] =~# '[)}\]]'
-            let m = i+1
-            let ind = ind - 1
-            let lastReceive = 0
-        else
-            let m = i+1
-        endif
-
-        let i = m
+let s:cpo_save = &cpo
+set cpo&vim
 
-    endwhile
+" Logging library {{{1
+" ===============
 
-    return ind
+" Purpose:
+"   Logs the given string using the ErlangIndentLog function if it exists.
+" Parameters:
+"   s: string
+function! s:Log(s)
+  if exists("*ErlangIndentLog")
+    call ErlangIndentLog(a:s)
+  endif
+endfunction
+
+" Line tokenizer library {{{1
+" ======================
+
+" Indtokens are "indentation tokens".
+
+" Purpose:
+"   Calculate the new virtual column after the given segment of a line.
+" Parameters:
+"   line: string
+"   first_index: integer -- the index of the first character of the segment
+"   last_index: integer -- the index of the last character of the segment
+"   vcol: integer -- the virtual column of the first character of the token
+"   tabstop: integer -- the value of the 'tabstop' option to be used
+" Returns:
+"   vcol: integer
+" Example:
+"   " index:    0 12 34567
+"   " vcol:     0 45 89
+"   s:CalcVCol("\t'\tx', b", 1, 4, 4)  -> 10
+function! s:CalcVCol(line, first_index, last_index, vcol, tabstop)
+
+  " We copy the relevent segment of the line, otherwise if the line were
+  " e.g. `"\t", term` then the else branch below would consume the `", term`
+  " part at once.
+  let line = a:line[a:first_index : a:last_index]
+
+  let i = 0
+  let last_index = a:last_index - a:first_index
+  let vcol = a:vcol
+
+  while 0 <= i && i <= last_index
+
+    if line[i] == "\t"
+      " Example (when tabstop == 4):
+      "
+      " vcol + tab -> next_vcol
+      " 0 + tab -> 4
+      " 1 + tab -> 4
+      " 2 + tab -> 4
+      " 3 + tab -> 4
+      " 4 + tab -> 8
+      "
+      " next_i - i == the number of tabs
+      let next_i = matchend(line, '\t*', i + 1)
+      let vcol = (vcol / a:tabstop + (next_i - i)) * a:tabstop
+      call s:Log('new vcol after tab: '. vcol)
+    else
+      let next_i = matchend(line, '[^\t]*', i + 1)
+      let vcol += next_i - i
+      call s:Log('new vcol after other: '. vcol)
+    endif
+    let i = next_i
+  endwhile
 
+  return vcol
 endfunction
 
-function s:FindPrevNonBlankNonComment(lnum)
+" Purpose:
+"   Go through the whole line and return the tokens in the line.
+" Parameters:
+"   line: string -- the line to be examined
+"   string_continuation: bool
+"   atom_continuation: bool
+" Returns:
+"   indtokens = [indtoken]
+"   indtoken = [token, vcol, col]
+"   token = string (examples: 'begin', '<variable>', '}')
+"   vcol = integer (the virtual column of the first character of the token)
+"   col = integer
+function! s:GetTokensFromLine(line, string_continuation, atom_continuation,
+                             \tabstop)
+
+  let linelen = strlen(a:line) " The length of the line
+  let i = 0 " The index of the current character in the line
+  let vcol = 0 " The virtual column of the current character
+  let indtokens = []
+
+  if a:string_continuation
+    let i = matchend(a:line, '^\%([^"\\]\|\\.\)*"', 0)
+    if i == -1
+      call s:Log('    Whole line is string continuation -> ignore')
+      return []
+    else
+      let vcol = s:CalcVCol(a:line, 0, i - 1, 0, a:tabstop)
+      call add(indtokens, ['<string_end>', vcol, i])
+    endif
+  elseif a:atom_continuation
+    let i = matchend(a:line, "^\\%([^'\\\\]\\|\\\\.\\)*'", 0)
+    if i == -1
+      call s:Log('    Whole line is quoted atom continuation -> ignore')
+      return []
+    else
+      let vcol = s:CalcVCol(a:line, 0, i - 1, 0, a:tabstop)
+      call add(indtokens, ['<quoted_atom_end>', vcol, i])
+    endif
+  endif
+
+  while 0 <= i && i < linelen
+
+    let next_vcol = ''
+
+    " Spaces
+    if a:line[i] == ' '
+      let next_i = matchend(a:line, ' *', i + 1)
+
+    " Tabs
+    elseif a:line[i] == "\t"
+      let next_i = matchend(a:line, '\t*', i + 1)
+
+      " See example in s:CalcVCol
+      let next_vcol = (vcol / a:tabstop + (next_i - i)) * a:tabstop
+
+    " Comment
+    elseif a:line[i] == '%'
+      let next_i = linelen
+
+    " String token: "..."
+    elseif a:line[i] == '"'
+      let next_i = matchend(a:line, '\%([^"\\]\|\\.\)*"', i + 1)
+      if next_i == -1
+        call add(indtokens, ['<string_start>', vcol, i])
+      else
+        let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop)
+        call add(indtokens, ['<string>', vcol, i])
+      endif
+
+    " Quoted atom token: '...'
+    elseif a:line[i] == "'"
+      let next_i = matchend(a:line, "\\%([^'\\\\]\\|\\\\.\\)*'", i + 1)
+      if next_i == -1
+        call add(indtokens, ['<quoted_atom_start>', vcol, i])
+      else
+        let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop)
+        call add(indtokens, ['<quoted_atom>', vcol, i])
+      endif
+
+    " Keyword or atom or variable token or number
+    elseif a:line[i] =~# '[a-zA-Z_@0-9]'
+      let next_i = matchend(a:line,
+                           \'[[:alnum:]_@:]*\%(\s*#\s*[[:alnum:]_@:]*\)\=',
+                           \i + 1)
+      call add(indtokens, [a:line[(i):(next_i - 1)], vcol, i])
+
+    " Character token: $<char> (as in: $a)
+    elseif a:line[i] == '$'
+      call add(indtokens, ['$.', vcol, i])
+      let next_i = i + 2
+
+    " Dot token: .
+    elseif a:line[i] == '.'
+
+      let next_i = i + 1
+
+      if i + 1 == linelen || a:line[i + 1] =~# '[[:blank:]%]'
+        " End of clause token: . (as in: f() -> ok.)
+        call add(indtokens, ['<end_of_clause>', vcol, i])
+
+      else
+        " Possibilities:
+        " - Dot token in float: . (as in: 3.14)
+        " - Dot token in record: . (as in: #myrec.myfield)
+        call add(indtokens, ['.', vcol, i])
+      endif
+
+    " Equal sign
+    elseif a:line[i] == '='
+      " This is handled separately so that "=<<" will be parsed as
+      " ['=', '<<'] instead of ['=<', '<']. Although Erlang parses it
+      " currently in the latter way, that may be fixed some day.
+      call add(indtokens, [a:line[i], vcol, i])
+      let next_i = i + 1
+
+    " Three-character tokens
+    elseif i + 1 < linelen &&
+         \ index(['=:=', '=/='], a:line[i : i + 1]) != -1
+      call add(indtokens, [a:line[i : i + 1], vcol, i])
+      let next_i = i + 2
+
+    " Two-character tokens
+    elseif i + 1 < linelen &&
+         \ index(['->', '<<', '>>', '||', '==', '/=', '=<', '>=', '++', '--',
+         \        '::'],
+         \       a:line[i : i + 1]) != -1
+      call add(indtokens, [a:line[i : i + 1], vcol, i])
+      let next_i = i + 2
+
+    " Other character: , ; < > ( ) [ ] { } # + - * / : ? = ! |
+    else
+      call add(indtokens, [a:line[i], vcol, i])
+      let next_i = i + 1
+
+    endif
+
+    if next_vcol == ''
+      let vcol += next_i - i
+    else
+      let vcol = next_vcol
+    endif
+
+    let i = next_i
+
+  endwhile
+
+  return indtokens
+
+endfunction
+
+" TODO: doc, handle "not found" case
+function! s:GetIndtokenAtCol(indtokens, col)
+  let i = 0
+  while i < len(a:indtokens)
+    if a:indtokens[i][2] == a:col
+      return [1, i]
+    elseif a:indtokens[i][2] > a:col
+      return [0, s:IndentError('No token at col ' . a:col . ', ' .
+                              \'indtokens = ' . string(a:indtokens),
+                              \'', '')]
+    endif
+    let i += 1
+  endwhile
+  return [0, s:IndentError('No token at col ' . a:col . ', ' .
+                           \'indtokens = ' . string(a:indtokens),
+                           \'', '')]
+endfunction
+
+" Stack library {{{1
+" =============
+
+" Purpose:
+"   Push a token onto the parser's stack.
+" Parameters:
+"   stack: [token]
+"   token: string
+function! s:Push(stack, token)
+  call s:Log('    Stack Push: "' . a:token . '" into ' . string(a:stack))
+  call insert(a:stack, a:token)
+endfunction
+
+" Purpose:
+"   Pop a token from the parser's stack.
+" Parameters:
+"   stack: [token]
+"   token: string
+" Returns:
+"   token: string -- the removed element
+function! s:Pop(stack)
+  let head = remove(a:stack, 0)
+  call s:Log('    Stack Pop: "' . head . '" from ' . string(a:stack))
+  return head
+endfunction
+
+" Library for accessing and storing tokenized lines {{{1
+" =================================================
+
+" The Erlang token cache: an `lnum -> indtokens` dictionary that stores the
+" tokenized lines.
+let s:all_tokens = {}
+let s:file_name = ''
+let s:last_changedtick = -1
+
+" Purpose:
+"   Clear the Erlang token cache if we have a different file or the file has
+"   been changed since the last indentation.
+function! s:ClearTokenCacheIfNeeded()
+  let file_name = expand('%:p')
+  if file_name != s:file_name ||
+   \ b:changedtick != s:last_changedtick
+    let s:file_name = file_name
+    let s:last_changedtick = b:changedtick
+    let s:all_tokens = {}
+  endif
+endfunction
+
+" Purpose:
+"   Return the tokens of line `lnum`, if that line is not empty. If it is
+"   empty, find the first non-empty line in the given `direction` and return
+"   the tokens of that line.
+" Parameters:
+"   lnum: integer
+"   direction: 'up' | 'down'
+" Returns:
+"   result: [] -- the result is an empty list if we hit the beginning or end
+"                  of the file
+"           | [lnum, indtokens]
+"   lnum: integer -- the index of the non-empty line that was found and
+"                    tokenized
+"   indtokens: [indtoken] -- the tokens of line `lnum`
+function! s:TokenizeLine(lnum, direction)
+
+  call s:Log('Tokenizing starts from line ' . a:lnum)
+  if a:direction == 'up'
     let lnum = prevnonblank(a:lnum)
+  else " a:direction == 'down'
+    let lnum = nextnonblank(a:lnum)
+  endif
+
+  " We hit the beginning or end of the file
+  if lnum == 0
+    let indtokens = []
+    call s:Log('  We hit the beginning or end of the file.')
+
+    " The line has already been parsed
+  elseif has_key(s:all_tokens, lnum)
+    let indtokens = s:all_tokens[lnum]
+    call s:Log('Cached line ' . lnum . ': ' . getline(lnum))
+    call s:Log("  Tokens in the line:\n    - " . join(indtokens, "\n    - "))
+
+    " The line should be parsed now
+  else
+
+    " Parse the line
     let line = getline(lnum)
-    " continue to search above if the current line begins with a '%'
-    while line =~# '^\s*%.*$'
-        let lnum = prevnonblank(lnum - 1)
-        if 0 == lnum
-            return 0
-        endif
-        let line = getline(lnum)
-    endwhile
-    return lnum
-endfunction
+    let string_continuation = s:IsLineStringContinuation(lnum)
+    let atom_continuation = s:IsLineAtomContinuation(lnum)
+    let indtokens = s:GetTokensFromLine(line, string_continuation,
+                                       \atom_continuation, &tabstop)
+    let s:all_tokens[lnum] = indtokens
+    call s:Log('Tokenizing line ' . lnum . ': ' . line)
+    call s:Log("  Tokens in the line:\n    - " . join(indtokens, "\n    - "))
 
-function ErlangIndent()
+  endif
 
-    " Find a non-blank line above the current line.
-    let lnum = prevnonblank(v:lnum - 1)
+  return [lnum, indtokens]
+endfunction
 
-    " Hit the start of the file, use zero indent.
+" Purpose:
+"   As a helper function for PrevIndToken and NextIndToken, the FindIndToken
+"   function finds the first line with at least one token in the given
+"   direction.
+" Parameters:
+"   lnum: integer
+"   direction: 'up' | 'down'
+" Returns:
+"   result: [] -- the result is an empty list if we hit the beginning or end
+"                  of the file
+"           | indtoken
+function! s:FindIndToken(lnum, dir)
+  let lnum = a:lnum
+  while 1
+    let lnum += (a:dir == 'up' ? -1 : 1)
+    let [lnum, indtokens] = s:TokenizeLine(lnum, a:dir)
     if lnum == 0
-        return 0
+      " We hit the beginning or end of the file
+      return []
+    elseif !empty(indtokens)
+      return indtokens[a:dir == 'up' ? -1 : 0]
     endif
+  endwhile
+endfunction
+
+" Purpose:
+"   Find the token that directly precedes the given token.
+" Parameters:
+"   lnum: integer -- the line of the given token
+"   i: the index of the given token within line `lnum`
+" Returns:
+"   result = [] -- the result is an empty list if the given token is the first
+"                  token of the file
+"          | indtoken
+function! s:PrevIndToken(lnum, i)
+  call s:Log('    PrevIndToken called: lnum=' . a:lnum . ', i =' . a:i)
+
+  " If the current line has a previous token, return that
+  if a:i > 0
+    return s:all_tokens[a:lnum][a:i - 1]
+  else
+    return s:FindIndToken(a:lnum, 'up')
+  endif
+endfunction
 
-    let prevline = getline(lnum)
-    let currline = getline(v:lnum)
+" Purpose:
+"   Find the token that directly succeeds the given token.
+" Parameters:
+"   lnum: integer -- the line of the given token
+"   i: the index of the given token within line `lnum`
+" Returns:
+"   result = [] -- the result is an empty list if the given token is the last
+"                  token of the file
+"          | indtoken
+function! s:NextIndToken(lnum, i)
+  call s:Log('    NextIndToken called: lnum=' . a:lnum . ', i =' . a:i)
+
+  " If the current line has a next token, return that
+  if len(s:all_tokens[a:lnum]) > a:i + 1
+    return s:all_tokens[a:lnum][a:i + 1]
+  else
+    return s:FindIndToken(a:lnum, 'down')
+  endif
+endfunction
 
-    let ind = indent(lnum) + &sw * s:ErlangIndentAtferLine(prevline)
+" ErlangCalcIndent helper functions {{{1
+" =================================
 
-    " special cases:
-    if prevline =~# '^\s*\%(after\|end\)\>'
-        let ind = ind + 2*&sw
+" Purpose:
+"   This function is called when the parser encounters a syntax error.
+"
+"   If we encounter a syntax error, we return
+"   g:erlang_unexpected_token_indent, which is -1 by default. This means that
+"   the indentation of the LTI will not be changed.
+" Parameter:
+"   msg: string
+"   token: string
+"   stack: [token]
+" Returns:
+"   indent: integer
+function! s:IndentError(msg, token, stack)
+  call s:Log('Indent error: ' . a:msg . ' -> return')
+  call s:Log('  Token = ' . a:token . ', ' .
+            \'  stack = ' . string(a:stack))
+  return g:erlang_unexpected_token_indent
+endfunction
+
+" Purpose:
+"   This function is called when the parser encounters an unexpected token,
+"   and the parser will return the number given back by UnexpectedToken.
+"
+"   If we encounter an unexpected token, we return
+"   g:erlang_unexpected_token_indent, which is -1 by default. This means that
+"   the indentation of the LTI will not be changed.
+" Parameter:
+"   token: string
+"   stack: [token]
+" Returns:
+"   indent: integer
+function! s:UnexpectedToken(token, stack)
+  call s:Log('    Unexpected token ' . a:token . ', stack = ' .
+            \string(a:stack) . ' -> return')
+  return g:erlang_unexpected_token_indent
+endfunction
+
+if !exists('g:erlang_unexpected_token_indent')
+  let g:erlang_unexpected_token_indent = -1
+endif
+
+" Purpose:
+"   Return whether the given line starts with a string continuation.
+" Parameter:
+"   lnum: integer
+" Returns:
+"   result: bool
+" Example:
+"   f() ->           % IsLineStringContinuation = false
+"       "This is a   % IsLineStringContinuation = false
+"       multiline    % IsLineStringContinuation = true
+"       string".     % IsLineStringContinuation = true
+function! s:IsLineStringContinuation(lnum)
+  if has('syntax_items')
+    return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangString'
+  else
+    return 0
+  endif
+endfunction
+
+" Purpose:
+"   Return whether the given line starts with an atom continuation.
+" Parameter:
+"   lnum: integer
+" Returns:
+"   result: bool
+" Example:
+"   'function with   % IsLineAtomContinuation = true, but should be false
+"   weird name'() -> % IsLineAtomContinuation = true
+"       ok.          % IsLineAtomContinuation = false
+function! s:IsLineAtomContinuation(lnum)
+  if has('syntax_items')
+    return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangQuotedAtom'
+  else
+    return 0
+  endif
+endfunction
+
+" Purpose:
+"   Return whether the 'catch' token (which should be the `i`th token in line
+"   `lnum`) is standalone or part of a try-catch block, based on the preceding
+"   token.
+" Parameters:
+"   lnum: integer
+"   i: integer
+" Return:
+"   is_standalone: bool
+function! s:IsCatchStandalone(lnum, i)
+  call s:Log('    IsCatchStandalone called: lnum=' . a:lnum . ', i=' . a:i)
+  let prev_indtoken = s:PrevIndToken(a:lnum, a:i)
+
+  " If we hit the beginning of the file, it is not a catch in a try block
+  if prev_indtoken == []
+    return 1
+  endif
+
+  let prev_token = prev_indtoken[0]
+
+  if prev_token =~# '[A-Z_@0-9]'
+    let is_standalone = 0
+  elseif prev_token =~# '[a-z]'
+    if index(['after', 'and', 'andalso', 'band', 'begin', 'bnot', 'bor', 'bsl',
+            \ 'bsr', 'bxor', 'case', 'catch', 'div', 'not', 'or', 'orelse',
+            \ 'rem', 'try', 'xor'], prev_token) != -1
+      " If catch is after these keywords, it is standalone
+      let is_standalone = 1
+    else
+      " If catch is after another keyword (e.g. 'end') or an atom, it is
+      " part of try-catch.
+      "
+      " Keywords:
+      " - may precede 'catch': end
+      " - may not precede 'catch': fun if of receive when
+      " - unused: cond let query
+      let is_standalone = 0
     endif
-    if currline =~# '^\s*end\>'
-        let ind = ind - 2*&sw
+  elseif index([')', ']', '}', '<string>', '<string_end>', '<quoted_atom>',
+              \ '<quoted_atom_end>', '$.'], prev_token) != -1
+    let is_standalone = 0
+  else
+    " This 'else' branch includes the following tokens:
+    "   -> == /= =< < >= > =:= =/= + - * / ++ -- :: < > ; ( [ { ? = ! . |
+    let is_standalone = 1
+  endif
+
+  call s:Log('   "catch" preceded by "' . prev_token  . '" -> catch ' .
+            \(is_standalone ? 'is standalone' : 'belongs to try-catch'))
+  return is_standalone
+
+endfunction
+
+" Purpose:
+"   This function is called when a begin-type element ('begin', 'case',
+"   '[', '<<', etc.) is found. It asks the caller to return if the stack
+" Parameters:
+"   stack: [token]
+"   token: string
+"   curr_vcol: integer
+"   stored_vcol: integer
+"   sw: integer -- number of spaces to be used after the begin element as
+"                  indentation
+" Returns:
+"   result: [should_return, indent]
+"   should_return: bool -- if true, the caller should return `indent` to Vim
+"   indent -- integer
+function! s:BeginElementFoundIfEmpty(stack, token, curr_vcol, stored_vcol, sw)
+  if empty(a:stack)
+    if a:stored_vcol == -1
+      call s:Log('    "' . a:token . '" directly preceeds LTI -> return')
+      return [1, a:curr_vcol + a:sw]
+    else
+      call s:Log('    "' . a:token .
+                \'" token (whose expression includes LTI) found -> return')
+      return [1, a:stored_vcol]
     endif
-    if currline =~# '^\s*after\>'
-        let plnum = s:FindPrevNonBlankNonComment(v:lnum-1)
-        if getline(plnum) =~# '^[^%]*\<receive\>\s*\%(%.*\)\=$'
-            let ind = ind - 1*&sw
-            " If the 'receive' is not in the same line as the 'after'
-        else
-            let ind = ind - 2*&sw
-        endif
+  else
+    return [0, 0]
+  endif
+endfunction
+
+" Purpose:
+"   This function is called when a begin-type element ('begin', 'case', '[',
+"   '<<', etc.) is found, and in some cases when 'after' and 'when' is found.
+"   It asks the caller to return if the stack is already empty.
+" Parameters:
+"   stack: [token]
+"   token: string
+"   curr_vcol: integer
+"   stored_vcol: integer
+"   end_token: end token that belongs to the begin element found (e.g. if the
+"              begin element is 'begin', the end token is 'end')
+"   sw: integer -- number of spaces to be used after the begin element as
+"                  indentation
+" Returns:
+"   result: [should_return, indent]
+"   should_return: bool -- if true, the caller should return `indent` to Vim
+"   indent -- integer
+function! s:BeginElementFound(stack, token, curr_vcol, stored_vcol, end_token, sw)
+
+  " Return 'return' if the stack is empty
+  let [ret, res] = s:BeginElementFoundIfEmpty(a:stack, a:token, a:curr_vcol,
+                                             \a:stored_vcol, a:sw)
+  if ret | return [ret, res] | endif
+
+  if a:stack[0] == a:end_token
+    call s:Log('    "' . a:token . '" pops "' . a:end_token . '"')
+    call s:Pop(a:stack)
+    if !empty(a:stack) && a:stack[0] == 'align_to_begin_element'
+      call s:Pop(a:stack)
+      if empty(a:stack)
+        return [1, a:curr_vcol]
+      else
+        return [1, s:UnexpectedToken(a:token, a:stack)]
+      endif
+    else
+      return [0, 0]
+    endif
+  else
+    return [1, s:UnexpectedToken(a:token, a:stack)]
+  endif
+endfunction
+
+" Purpose:
+"   This function is called when we hit the beginning of a file or an
+"   end-of-clause token -- i.e. when we found the beginning of the current
+"   clause.
+"
+"   If the stack contains an '->' or 'when', this means that we can return
+"   now, since we were looking for the beginning of the clause.
+" Parameters:
+"   stack: [token]
+"   token: string
+"   stored_vcol: integer
+" Returns:
+"   result: [should_return, indent]
+"   should_return: bool -- if true, the caller should return `indent` to Vim
+"   indent -- integer
+function! s:BeginningOfClauseFound(stack, token, stored_vcol)
+  if !empty(a:stack) && a:stack[0] == 'when'
+    call s:Log('    BeginningOfClauseFound: "when" found in stack')
+    call s:Pop(a:stack)
+    if empty(a:stack)
+      call s:Log('    Stack is ["when"], so LTI is in a guard -> return')
+      return [1, a:stored_vcol + &sw + 2]
+    else
+      return [1, s:UnexpectedToken(a:token, a:stack)]
     endif
-    if prevline =~# '^\s*[)}\]]'
-        let ind = ind + 1*&sw
+  elseif !empty(a:stack) && a:stack[0] == '->'
+    call s:Log('    BeginningOfClauseFound: "->" found in stack')
+    call s:Pop(a:stack)
+    if empty(a:stack)
+      call s:Log('    Stack is ["->"], so LTI is in function body -> return')
+      return [1, a:stored_vcol + &sw]
+    elseif a:stack[0] == ';'
+      call s:Pop(a:stack)
+      if empty(a:stack)
+        call s:Log('    Stack is ["->", ";"], so LTI is in a function head ' .
+                  \'-> return')
+        return [0, a:stored_vcol]
+      else
+        return [1, s:UnexpectedToken(a:token, a:stack)]
+      endif
+    else
+      return [1, s:UnexpectedToken(a:token, a:stack)]
     endif
-    if currline =~# '^\s*[)}\]]'
-        let ind = ind - 1*&sw
+  else
+    return [0, 0]
+  endif
+endfunction
+
+let g:erlang_indent_searchpair_timeout = 2000
+
+" TODO
+function! s:SearchPair(lnum, curr_col, start, middle, end)
+  call cursor(a:lnum, a:curr_col + 1)
+  let [lnum_new, col1_new] = 
+      \searchpairpos(a:start, a:middle, a:end, 'bW',
+                    \'synIDattr(synID(line("."), col("."), 0), "name") ' .
+                    \'=~? "string\\|quotedatom\\|todo\\|comment\\|' . 
+                    \'erlangmodifier"',
+                    \0, g:erlang_indent_searchpair_timeout)
+  return [lnum_new, col1_new - 1]
+endfunction
+
+function! s:SearchEndPair(lnum, curr_col)
+  return s:SearchPair(
+         \ a:lnum, a:curr_col,
+         \ '\<\%(case\|try\|begin\|receive\|if\)\>\|' .
+         \ '\<fun\>\%(\s\|\n\|%.*$\)*(',
+         \ '',
+         \ '\<end\>')
+endfunction
+
+" ErlangCalcIndent {{{1
+" ================
+
+" Purpose:
+"   Calculate the indentation of the given line.
+" Parameters:
+"   lnum: integer -- index of the line for which the indentation should be
+"                    calculated
+"   stack: [token] -- initial stack
+" Return:
+"   indent: integer -- if -1, that means "don't change the indentation";
+"                      otherwise it means "indent the line with `indent`
+"                      number of spaces or equivalent tabs"
+function! s:ErlangCalcIndent(lnum, stack)
+  let res = s:ErlangCalcIndent2(a:lnum, a:stack)
+  call s:Log("ErlangCalcIndent returned: " . res)
+  return res
+endfunction
+
+function! s:ErlangCalcIndent2(lnum, stack)
+
+  let lnum = a:lnum
+  let stored_vcol = -1 " Virtual column of the first character of the token that
+                   " we currently think we might align to.
+  let mode = 'normal'
+  let stack = a:stack
+  let semicolon_abscol = ''
+
+  " Walk through the lines of the buffer backwards (starting from the
+  " previous line) until we can decide how to indent the current line.
+  while 1
+
+    let [lnum, indtokens] = s:TokenizeLine(lnum, 'up')
+
+    " Hit the start of the file
+    if lnum == 0
+      let [ret, res] = s:BeginningOfClauseFound(stack, 'beginning_of_file',
+                                               \stored_vcol)
+      if ret | return res | endif
+
+      return 0
     endif
-    if prevline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
-        let ind = ind + 1*&sw
+
+    let i = len(indtokens) - 1
+    let last_token_of_line = 1
+
+    while i >= 0
+
+      let [token, curr_vcol, curr_col] = indtokens[i]
+      call s:Log('  Analyzing the following token: ' . string(indtokens[i]))
+
+      if len(stack) > 256 " TODO: magic number
+        return s:IndentError('Stack too long', token, stack)
+      endif
+
+      if token == '<end_of_clause>'
+        let [ret, res] = s:BeginningOfClauseFound(stack, token, stored_vcol)
+        if ret | return res | endif
+
+        if stored_vcol == -1
+          call s:Log('    End of clause directly preceeds LTI -> return')
+          return 0
+        else
+          call s:Log('    End of clause (but not end of line) -> return')
+          return stored_vcol
+        endif
+
+      elseif stack == ['prev_term_plus']
+        if token =~# '[a-zA-Z_@]' ||
+         \ token == '<string>' || token == '<string_start>' ||
+         \ token == '<quoted_atom>' || token == '<quoted_atom_start>'
+          call s:Log('    previous token found: curr_vcol + plus = ' .
+                    \curr_vcol . " + " . plus)
+          return curr_vcol + plus
+        endif
+
+      elseif token == 'begin'
+        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                            \stored_vcol, 'end', &sw)
+        if ret | return res | endif
+
+      " case EXPR of BRANCHES end
+      " try EXPR catch BRANCHES end
+      " try EXPR after BODY end
+      " try EXPR catch BRANCHES after BODY end
+      " try EXPR of BRANCHES catch BRANCHES end
+      " try EXPR of BRANCHES after BODY end
+      " try EXPR of BRANCHES catch BRANCHES after BODY end
+      " receive BRANCHES end
+      " receive BRANCHES after BRANCHES end
+
+      " This branch is not Emacs-compatible
+      elseif (index(['of', 'receive', 'after', 'if'], token) != -1 ||
+           \  (token == 'catch' && !s:IsCatchStandalone(lnum, i))) &&
+           \ !last_token_of_line &&
+           \ (empty(stack) || stack == ['when'] || stack == ['->'] ||
+           \  stack == ['->', ';'])
+
+        " If we are after of/receive, but these are not the last
+        " tokens of the line, we want to indent like this:
+        "
+        "   % stack == []
+        "   receive stored_vcol,
+        "           LTI
+        "
+        "   % stack == ['->', ';']
+        "   receive stored_vcol ->
+        "               B;
+        "           LTI
+        "
+        "   % stack == ['->']
+        "   receive stored_vcol ->
+        "               LTI
+        "
+        "   % stack == ['when']
+        "   receive stored_vcol when
+        "               LTI
+
+        " stack = []  =>  LTI is a condition
+        " stack = ['->']  =>  LTI is a branch
+        " stack = ['->', ';']  =>  LTI is a condition
+        " stack = ['when']  =>  LTI is a guard
+        if empty(stack) || stack == ['->', ';']
+          call s:Log('    LTI is in a condition after ' .
+                    \'"of/receive/after/if/catch" -> return')
+          return stored_vcol
+        elseif stack == ['->']
+          call s:Log('    LTI is in a branch after ' .
+                    \'"of/receive/after/if/catch" -> return')
+          return stored_vcol + &sw
+        elseif stack == ['when']
+          call s:Log('    LTI is in a guard after ' .
+                    \'"of/receive/after/if/catch" -> return')
+          return stored_vcol + &sw
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif index(['case', 'if', 'try', 'receive'], token) != -1
+
+        " stack = []  =>  LTI is a condition
+        " stack = ['->']  =>  LTI is a branch
+        " stack = ['->', ';']  =>  LTI is a condition
+        " stack = ['when']  =>  LTI is in a guard
+        if empty(stack)
+          " pass
+        elseif (token == 'case' && stack[0] == 'of') ||
+             \ (token == 'if') ||
+             \ (token == 'try' && (stack[0] == 'of' ||
+             \                     stack[0] == 'catch' ||
+             \                     stack[0] == 'after')) ||
+             \ (token == 'receive')
+
+          " From the indentation point of view, the keyword
+          " (of/catch/after/end) before the LTI is what counts, so
+          " when we reached these tokens, and the stack already had
+          " a catch/after/end, we didn't modify it.
+          "
+          " This way when we reach case/try/receive (i.e. now),
+          " there is at most one of/catch/after/end token in the
+          " stack.
+          if token == 'case' || token == 'try' ||
+           \ (token == 'receive' && stack[0] == 'after')
+            call s:Pop(stack)
+          endif
+
+          if empty(stack)
+            call s:Log('    LTI is in a condition; matching ' .
+                      \'"case/if/try/receive" found')
+            let stored_vcol = curr_vcol + &sw
+          elseif stack[0] == 'align_to_begin_element'
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol
+          elseif len(stack) > 1 && stack[0] == '->' && stack[1] == ';'
+            call s:Log('    LTI is in a condition; matching ' .
+                      \'"case/if/try/receive" found')
+            call s:Pop(stack)
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + &sw
+          elseif stack[0] == '->'
+            call s:Log('    LTI is in a branch; matching ' .
+                      \'"case/if/try/receive" found')
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + 2 * &sw
+          elseif stack[0] == 'when'
+            call s:Log('    LTI is in a guard; matching ' .
+                      \'"case/if/try/receive" found')
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + 2 * &sw + 2
+          endif
+
+        endif
+
+        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                            \stored_vcol, 'end', &sw)
+        if ret | return res | endif
+
+      elseif token == 'fun'
+        let next_indtoken = s:NextIndToken(lnum, i)
+        call s:Log('    Next indtoken = ' . string(next_indtoken))
+
+        if !empty(next_indtoken) && next_indtoken[0] == '('
+          " We have an anonymous function definition
+          " (e.g. "fun () -> ok end")
+
+          " stack = []  =>  LTI is a condition
+          " stack = ['->']  =>  LTI is a branch
+          " stack = ['->', ';']  =>  LTI is a condition
+          " stack = ['when']  =>  LTI is in a guard
+          if empty(stack)
+            call s:Log('    LTI is in a condition; matching "fun" found')
+            let stored_vcol = curr_vcol + &sw
+          elseif len(stack) > 1 && stack[0] == '->' && stack[1] == ';'
+            call s:Log('    LTI is in a condition; matching "fun" found')
+            call s:Pop(stack)
+            call s:Pop(stack)
+          elseif stack[0] == '->'
+            call s:Log('    LTI is in a branch; matching "fun" found')
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + 2 * &sw
+          elseif stack[0] == 'when'
+            call s:Log('    LTI is in a guard; matching "fun" found')
+            call s:Pop(stack)
+            let stored_vcol = curr_vcol + 2 * &sw + 2
+          endif
+
+          let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                              \stored_vcol, 'end', &sw)
+          if ret | return res | endif
+        else
+          " Pass: we have a function reference (e.g. "fun f/0")
+        endif
+
+      elseif token == '['
+        " Emacs compatibility
+        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                            \stored_vcol, ']', 1)
+        if ret | return res | endif
+
+      elseif token == '<<'
+        " Emacs compatibility
+        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
+                                            \stored_vcol, '>>', 2)
+        if ret | return res | endif
+
+      elseif token == '(' || token == '{'
+
+        let end_token = (token == '(' ? ')' :
+                        \token == '{' ? '}' : 'error')
+
+        if empty(stack)
+          " We found the opening paren whose block contains the LTI.
+          let mode = 'inside'
+        elseif stack[0] == end_token
+          call s:Log('    "' . token . '" pops "' . end_token . '"')
+          call s:Pop(stack)
+
+          if !empty(stack) && stack[0] == 'align_to_begin_element'
+            " We found the opening paren whose closing paren
+            " starts LTI
+            let mode = 'align_to_begin_element'
+          else
+            " We found the opening pair for a closing paren that
+            " was already in the stack.
+            let mode = 'outside'
+          endif
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+        if mode == 'inside' || mode == 'align_to_begin_element'
+
+          if last_token_of_line && i != 0
+            " Examples: {{{
+            "
+            " mode == 'inside':
+            "
+            "     my_func(
+            "       LTI
+            "
+            "     [Variable, {
+            "        LTI
+            "
+            " mode == 'align_to_begin_element':
+            "
+            "     my_func(
+            "       Params
+            "      ) % LTI
+            "
+            "     [Variable, {
+            "        Terms
+            "       } % LTI
+            " }}}
+            let stack = ['prev_term_plus']
+            let plus = (mode == 'inside' ? 2 : 1)
+            call s:Log('    "' . token .
+                      \'" token found at end of line -> find previous token')
+          elseif mode == 'align_to_begin_element'
+            " Examples: {{{
+            "
+            " mode == 'align_to_begin_element' && !last_token_of_line
+            "
+            "     my_func(stored_vcol
+            "            ) % LTI
+            "
+            "     [Variable, {stored_vcol
+            "                } % LTI
+            "
+            " mode == 'align_to_begin_element' && i == 0
+            "
+            "     (
+            "       stored_vcol
+            "     ) % LTI
+            "
+            "     {
+            "       stored_vcol
+            "     } % LTI
+            " }}}
+            call s:Log('    "' . token . '" token (whose closing token ' .
+                      \'starts LTI) found -> return')
+            return curr_vcol
+          elseif stored_vcol == -1
+            " Examples: {{{
+            "
+            " mode == 'inside' && stored_vcol == -1 && !last_token_of_line
+            "
+            "     my_func(
+            "             LTI
+            "     [Variable, {
+            "                 LTI
+            "
+            " mode == 'inside' && stored_vcol == -1 && i == 0
+            "
+            "     (
+            "      LTI
+            "
+            "     {
+            "      LTI
+            " }}}
+            call s:Log('    "' . token .
+                      \'" token (which directly precedes LTI) found -> return')
+            return curr_vcol + 1
+          else
+            " Examples: {{{
+            "
+            " mode == 'inside' && stored_vcol != -1 && !last_token_of_line
+            "
+            "     my_func(stored_vcol,
+            "             LTI
+            "
+            "     [Variable, {stored_vcol,
+            "                 LTI
+            "
+            " mode == 'inside' && stored_vcol != -1 && i == 0
+            "
+            "     (stored_vcol,
+            "      LTI
+            "
+            "     {stored_vcol,
+            "      LTI
+            " }}}
+            call s:Log('    "' . token .
+                      \'" token (whose block contains LTI) found -> return')
+            return stored_vcol
+          endif
+        endif
+
+      elseif index(['end', ')', ']', '}', '>>'], token) != -1
+
+        " If we can be sure that there is synchronization in the Erlang
+        " syntax, we use searchpair to make the script quicker. Otherwise we
+        " just push the token onto the stack and keep parsing.
+    
+        " No synchronization -> no searchpair optimization
+        if !exists('b:erlang_syntax_synced')
+          call s:Push(stack, token)
+
+        " We don't have searchpair optimization for '>>'
+        elseif token == '>>'
+          call s:Push(stack, token)
+
+        elseif token == 'end'
+          let [lnum_new, col_new] = s:SearchEndPair(lnum, curr_col)
+
+          if lnum_new == 0
+            return s:IndentError('Matching token for "end" not found',
+                                \token, stack)
+          else
+            if lnum_new != lnum
+              call s:Log('    Tokenize for "end" <<<<')
+              let [lnum, indtokens] = s:TokenizeLine(lnum_new, 'up')
+              call s:Log('    >>>> Tokenize for "end"')
+            endif
+
+            let [success, i] = s:GetIndtokenAtCol(indtokens, col_new)
+            if !success | return i | endif
+            let [token, curr_vcol, curr_col] = indtokens[i]
+            call s:Log('    Match for "end" in line ' . lnum_new . ': ' .
+                      \string(indtokens[i]))
+          endif
+
+        else " token is one of the following: ')', ']', '}'
+
+          call s:Push(stack, token)
+
+          " We have to escape '[', because this string will be interpreted as a
+          " regexp
+          let open_paren = (token == ')' ? '(' :
+                           \token == ']' ? '\[' :
+                           \               '{')
+
+          let [lnum_new, col_new] = s:SearchPair(lnum, curr_col,
+                                                \open_paren, '', token)
+
+          if lnum_new == 0
+            return s:IndentError('Matching token not found',
+                                \token, stack)
+          else
+            if lnum_new != lnum
+              call s:Log('    Tokenize the opening paren <<<<')
+              let [lnum, indtokens] = s:TokenizeLine(lnum_new, 'up')
+              call s:Log('    >>>>')
+            endif
+
+            let [success, i] = s:GetIndtokenAtCol(indtokens, col_new)
+            if !success | return i | endif
+            let [token, curr_vcol, curr_col] = indtokens[i]
+            call s:Log('    Match in line ' . lnum_new . ': ' .
+                      \string(indtokens[i]))
+
+            " Go back to the beginning of the loop and handle the opening paren
+            continue
+          endif
+        endif
+
+      elseif token == ';'
+
+        if empty(stack)
+          call s:Push(stack, ';')
+        elseif index([';', '->', 'when', 'end', 'after', 'catch'],
+                    \stack[0]) != -1
+          " Pass:
+          "
+          " - If the stack top is another ';', then one ';' is
+          "   enough.
+          " - If the stack top is an '->' or a 'when', then we
+          "   should keep that, because they signify the type of the
+          "   LTI (branch, condition or guard).
+          " - From the indentation point of view, the keyword
+          "   (of/catch/after/end) before the LTI is what counts, so
+          "   if the stack already has a catch/after/end, we don't
+          "   modify it. This way when we reach case/try/receive,
+          "   there will be at most one of/catch/after/end token in
+          "   the stack.
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif token == '->'
+
+        if empty(stack) && !last_token_of_line
+          call s:Log('    LTI is in expression after arrow -> return')
+          return stored_vcol
+        elseif empty(stack) || stack[0] == ';' || stack[0] == 'end'
+          " stack = [';']  -> LTI is either a branch or in a guard
+          " stack = ['->']  ->  LTI is a condition
+          " stack = ['->', ';']  -> LTI is a branch
+          call s:Push(stack, '->')
+        elseif index(['->', 'when', 'end', 'after', 'catch'], stack[0]) != -1
+          " Pass:
+          "
+          " - If the stack top is another '->', then one '->' is
+          "   enough.
+          " - If the stack top is a 'when', then we should keep
+          "   that, because this signifies that LTI is a in a guard.
+          " - From the indentation point of view, the keyword
+          "   (of/catch/after/end) before the LTI is what counts, so
+          "   if the stack already has a catch/after/end, we don't
+          "   modify it. This way when we reach case/try/receive,
+          "   there will be at most one of/catch/after/end token in
+          "   the stack.
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif token == 'when'
+
+        " Pop all ';' from the top of the stack
+        while !empty(stack) && stack[0] == ';'
+          call s:Pop(stack)
+        endwhile
+
+        if empty(stack)
+          if semicolon_abscol != ''
+            let stored_vcol = semicolon_abscol
+          endif
+          if !last_token_of_line
+            " Example:
+            "   when A,
+            "        LTI
+            let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
+                                                       \stored_vcol, &sw)
+            if ret | return res | endif
+          else
+            " Example:
+            "   when
+            "       LTI
+            call s:Push(stack, token)
+          endif
+        elseif index(['->', 'when', 'end', 'after', 'catch'], stack[0]) != -1
+          " Pass:
+          " - If the stack top is another 'when', then one 'when' is
+          "   enough.
+          " - If the stack top is an '->' or a 'when', then we
+          "   should keep that, because they signify the type of the
+          "   LTI (branch, condition or guard).
+          " - From the indentation point of view, the keyword
+          "   (of/catch/after/end) before the LTI is what counts, so
+          "   if the stack already has a catch/after/end, we don't
+          "   modify it. This way when we reach case/try/receive,
+          "   there will be at most one of/catch/after/end token in
+          "   the stack.
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif token == 'of' || token == 'after' ||
+           \ (token == 'catch' && !s:IsCatchStandalone(lnum, i))
+
+        if token == 'after'
+          " If LTI is between an 'after' and the corresponding
+          " 'end', then let's return
+          let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
+                                                     \stored_vcol, &sw)
+          if ret | return res | endif
+        endif
+
+        if empty(stack) || stack[0] == '->' || stack[0] == 'when'
+          call s:Push(stack, token)
+        elseif stack[0] == 'catch' || stack[0] == 'after' || stack[0] == 'end'
+          " Pass: From the indentation point of view, the keyword
+          " (of/catch/after/end) before the LTI is what counts, so
+          " if the stack already has a catch/after/end, we don't
+          " modify it. This way when we reach case/try/receive,
+          " there will be at most one of/catch/after/end token in
+          " the stack.
+        else
+          return s:UnexpectedToken(token, stack)
+        endif
+
+      elseif token == '||' && empty(stack) && !last_token_of_line
+
+        call s:Log('    LTI is in expression after "||" -> return')
+        return stored_vcol
+
+      else
+        call s:Log('    Misc token, stack unchanged = ' . string(stack))
+
+      endif
+
+      if empty(stack) || stack[0] == '->' || stack[0] == 'when'
+        let stored_vcol = curr_vcol
+        let semicolon_abscol = ''
+        call s:Log('    Misc token when the stack is empty or has "->" ' .
+                  \'-> setting stored_vcol to ' . stored_vcol)
+      elseif stack[0] == ';'
+        let semicolon_abscol = curr_vcol
+        call s:Log('    Setting semicolon-stored_vcol to ' . stored_vcol)
+      endif
+
+      let i -= 1
+      call s:Log('    Token processed. stored_vcol=' . stored_vcol)
+
+      let last_token_of_line = 0
+
+    endwhile " iteration on tokens in a line
+
+    call s:Log('  Line analyzed. stored_vcol=' . stored_vcol)
+
+    if empty(stack) && stored_vcol != -1 &&
+     \ (!empty(indtokens) && indtokens[0][0] != '<string_end>' &&
+     \                       indtokens[0][0] != '<quoted_atom_end>')
+      call s:Log('    Empty stack at the beginning of the line -> return')
+      return stored_vcol
     endif
-    if currline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
-        let ind = ind - 1*&sw
+
+    let lnum -= 1
+
+  endwhile " iteration on lines
+
+endfunction
+
+" ErlangIndent function {{{1
+" =====================
+
+function! ErlangIndent()
+
+  call s:ClearTokenCacheIfNeeded()
+
+  let currline = getline(v:lnum)
+  call s:Log('Indenting line ' . v:lnum . ': ' . currline)
+
+  if s:IsLineStringContinuation(v:lnum) || s:IsLineAtomContinuation(v:lnum)
+    call s:Log('String or atom continuation found -> ' .
+              \'leaving indentation unchanged')
+    return -1
+  endif
+
+  let ml = matchlist(currline,
+                    \'^\(\s*\)\(\%(end\|of\|catch\|after\)\>\|[)\]}]\|>>\)')
+
+  " If the line has a special beginning, but not a standalone catch
+  if !empty(ml) && !(ml[2] == 'catch' && s:IsCatchStandalone(v:lnum, 0))
+
+    let curr_col = len(ml[1])
+
+    " If we can be sure that there is synchronization in the Erlang
+    " syntax, we use searchpair to make the script quicker.
+    if ml[2] == 'end' && exists('b:erlang_syntax_synced')
+
+      let [lnum, col] = s:SearchEndPair(v:lnum, curr_col)
+
+      if lnum == 0
+        return s:IndentError('Matching token for "end" not found',
+                            \'end', [])
+      else
+        call s:Log('    Tokenize for "end" <<<<')
+        let [lnum, indtokens] = s:TokenizeLine(lnum, 'up')
+        call s:Log('    >>>> Tokenize for "end"')
+
+        let [success, i] = s:GetIndtokenAtCol(indtokens, col)
+        if !success | return i | endif
+        let [token, curr_vcol, curr_col] = indtokens[i]
+        call s:Log('    Match for "end" in line ' . lnum . ': ' .
+                   \string(indtokens[i]))
+        return curr_vcol
+      endif
+
+    else
+
+      call s:Log("  Line type = 'end'")
+      let new_col = s:ErlangCalcIndent(v:lnum - 1,
+                                      \[ml[2], 'align_to_begin_element'])
     endif
+  else
+    call s:Log("  Line type = 'normal'")
 
-    if ind<0
-        let ind = 0
+    let new_col = s:ErlangCalcIndent(v:lnum - 1, [])
+    if currline =~# '^\s*when\>'
+      let new_col += 2
     endif
-    return ind
+  endif
+
+  if new_col < -1
+    call s:Log('WARNING: returning new_col == ' . new_col)
+    return g:erlang_unexpected_token_indent
+  endif
+
+  return new_col
 
 endfunction
 
-" TODO:
-" 
-" f() ->
-"     x("foo
-"         bar")
-"         ,
-"         bad_indent.
-"
-" fun
-"     init/0,
-"     bad_indent
-"
-"     #rec
-"     .field,
-" bad_indent
-"
-" case X of
-"     1 when A; B ->
-"     bad_indent
+" Cleanup {{{1
+" =======
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
+" vim: sw=2 et fdm=marker
diff -Naur vim73.orig/runtime/indent/eruby.vim vim73/runtime/indent/eruby.vim
--- vim73.orig/runtime/indent/eruby.vim	2010-05-28 18:28:47.000000000 +0000
+++ vim73/runtime/indent/eruby.vim	2013-08-04 19:09:08.463950315 +0000
@@ -1,9 +1,7 @@
 " Vim indent file
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2010 May 28
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("b:did_indent")
@@ -50,29 +48,32 @@
   call cursor(v:lnum,1)
   let inruby = searchpair('<%','','%>','W')
   call cursor(v:lnum,vcol)
-  if inruby && getline(v:lnum) !~ '^<%\|^\s*-\=%>'
-    let ind = GetRubyIndent()
+  if inruby && getline(v:lnum) !~ '^<%\|^\s*[-=]\=%>'
+    let ind = GetRubyIndent(v:lnum)
   else
     exe "let ind = ".b:eruby_subtype_indentexpr
   endif
   let lnum = prevnonblank(v:lnum-1)
   let line = getline(lnum)
   let cline = getline(v:lnum)
-  if cline =~# '^\s*<%-\=\s*\%(}\|end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%(-\=%>\|$\)'
+  if cline =~# '^\s*<%[-=]\=\s*\%(}\|end\|else\|\%(ensure\|rescue\|elsif\|when\).\{-\}\)\s*\%([-=]\=%>\|$\)'
     let ind = ind - &sw
   endif
-  if line =~# '\S\s*<%-\=\s*\%(}\|end\).\{-\}\s*\%(-\=%>\|$\)'
+  if line =~# '\S\s*<%[-=]\=\s*\%(}\|end\).\{-\}\s*\%([-=]\=%>\|$\)'
     let ind = ind - &sw
   endif
-  if line =~# '\%({\|\<do\)\%(\s*|[^|]*|\)\=\s*-\=%>'
+  if line =~# '\%({\|\<do\)\%(\s*|[^|]*|\)\=\s*[-=]\=%>'
     let ind = ind + &sw
-  elseif line =~# '<%-\=\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
+  elseif line =~# '<%[-=]\=\s*\%(module\|class\|def\|if\|for\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure\|rescue\)\>.*%>'
     let ind = ind + &sw
   endif
   if line =~# '^\s*<%[=#-]\=\s*$' && cline !~# '^\s*end\>'
     let ind = ind + &sw
   endif
-  if cline =~# '^\s*-\=%>\s*$'
+  if line !~# '^\s*<%' && line =~# '%>\s*$'
+    let ind = ind - &sw
+  endif
+  if cline =~# '^\s*[-=]\=%>\s*$'
     let ind = ind - &sw
   endif
   return ind
diff -Naur vim73.orig/runtime/indent/falcon.vim vim73/runtime/indent/falcon.vim
--- vim73.orig/runtime/indent/falcon.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/indent/falcon.vim	2013-08-04 19:09:08.463950315 +0000
@@ -0,0 +1,451 @@
+" Vim indent file
+" Language: Falcon
+" Maintainer: Steven Oliver <oliver.steven@gmail.com>
+" Website: https://steveno@github.com/steveno/falconpl-vim.git
+" Credits: This is, to a great extent, a copy n' paste of ruby.vim.
+
+" 1. Setup {{{1
+" ============
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent = 1
+
+setlocal nosmartindent
+
+" Setup indent function and when to use it
+setlocal indentexpr=FalconGetIndent(v:lnum)
+setlocal indentkeys=0{,0},0),0],!^F,o,O,e
+setlocal indentkeys+==~case,=~catch,=~default,=~elif,=~else,=~end,=~\"
+
+" Define the appropriate indent function but only once
+if exists("*FalconGetIndent")
+    finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" 2. Variables {{{1
+" ============
+
+" Regex of syntax group names that are strings AND comments
+let s:syng_strcom = '\<falcon\%(String\|StringEscape\|Comment\)\>'
+
+" Regex of syntax group names that are strings
+let s:syng_string = '\<falcon\%(String\|StringEscape\)\>'
+
+" Regex that defines blocks.
+"
+" Note that there's a slight problem with this regex and s:continuation_regex.
+" Code like this will be matched by both:
+"
+"   method_call do |(a, b)|
+"
+" The reason is that the pipe matches a hanging "|" operator.
+"
+let s:block_regex =
+      \ '\%(\<do:\@!\>\|%\@<!{\)\s*\%(|\s*(*\s*\%([*@&]\=\h\w*,\=\s*\)\%(,\s*(*\s*[*@&]\=\h\w*\s*)*\s*\)*|\)\=\s*\%(#.*\)\=$'
+
+let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex
+
+" Regex that defines continuation lines.
+" TODO: this needs to deal with if ...: and so on
+let s:continuation_regex =
+      \ '\%(%\@<![({[\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
+" Regex that defines bracket continuations
+let s:bracket_continuation_regex = '%\@<!\%([({[]\)\s*\%(#.*\)\=$'
+
+" Regex that defines continuation lines, not including (, {, or [.
+let s:non_bracket_continuation_regex = '\%([\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
+" Keywords to indent on
+let s:falcon_indent_keywords = '^\s*\(case\|catch\|class\|enum\|default\|elif\|else' .
+    \ '\|for\|function\|if.*"[^"]*:.*"\|if \(\(:\)\@!.\)*$\|loop\|object\|select' .
+    \ '\|switch\|try\|while\|\w*\s*=\s*\w*([$\)'
+
+" Keywords to deindent on
+let s:falcon_deindent_keywords = '^\s*\(case\|catch\|default\|elif\|else\|end\)'
+
+" 3. Functions {{{1
+" ============
+
+" Check if the character at lnum:col is inside a string, comment, or is ascii.
+function s:IsInStringOrComment(lnum, col)
+    return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
+endfunction
+
+" Check if the character at lnum:col is inside a string.
+function s:IsInString(lnum, col)
+    return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_string
+endfunction
+
+" Check if the character at lnum:col is inside a string delimiter
+function s:IsInStringDelimiter(lnum, col)
+    return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'falconStringDelimiter'
+endfunction
+
+" Find line above 'lnum' that isn't empty, in a comment, or in a string.
+function s:PrevNonBlankNonString(lnum)
+    let in_block = 0
+    let lnum = prevnonblank(a:lnum)
+    while lnum > 0
+	" Go in and out of blocks comments as necessary.
+	" If the line isn't empty (with opt. comment) or in a string, end search.
+	let line = getline(lnum)
+	if line =~ '^=begin'
+	    if in_block
+		let in_block = 0
+	    else
+		break
+	    endif
+	elseif !in_block && line =~ '^=end'
+	    let in_block = 1
+	elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
+		    \ && s:IsInStringOrComment(lnum, strlen(line)))
+	    break
+	endif
+	let lnum = prevnonblank(lnum - 1)
+    endwhile
+    return lnum
+endfunction
+
+" Find line above 'lnum' that started the continuation 'lnum' may be part of.
+function s:GetMSL(lnum)
+    " Start on the line we're at and use its indent.
+    let msl = a:lnum
+    let msl_body = getline(msl)
+    let lnum = s:PrevNonBlankNonString(a:lnum - 1)
+    while lnum > 0
+	" If we have a continuation line, or we're in a string, use line as MSL.
+	" Otherwise, terminate search as we have found our MSL already.
+	let line = getline(lnum)
+	
+	if s:Match(line, s:non_bracket_continuation_regex) &&
+          	\ s:Match(msl, s:non_bracket_continuation_regex)
+	    " If the current line is a non-bracket continuation and so is the
+	    " previous one, keep its indent and continue looking for an MSL.
+	    "    
+	    " Example:
+	    "   method_call one,
+	    "       two,
+	    "           three
+	    "           
+	    let msl = lnum
+	elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
+		    \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+	    " If the current line is a bracket continuation or a block-starter, but
+	    " the previous is a non-bracket one, respect the previous' indentation,
+	    " and stop here.
+	    " 
+	    " Example:
+	    "   method_call one,
+	    "       two {
+	    "           three
+	    "
+	    return lnum
+	elseif s:Match(lnum, s:bracket_continuation_regex) &&
+		    \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+	    " If both lines are bracket continuations (the current may also be a
+	    " block-starter), use the current one's and stop here
+	    "
+	    " Example:
+	    "   method_call(
+	    "       other_method_call(
+	    "             foo
+	    return msl
+	elseif s:Match(lnum, s:block_regex) &&
+		    \ !s:Match(msl, s:continuation_regex) &&
+		    \ !s:Match(msl, s:block_continuation_regex)
+	    " If the previous line is a block-starter and the current one is
+	    " mostly ordinary, use the current one as the MSL.
+	    " 
+	    " Example:
+	    "   method_call do
+	    "       something
+	    "           something_else
+	    return msl
+	else
+	    let col = match(line, s:continuation_regex) + 1
+	    if (col > 0 && !s:IsInStringOrComment(lnum, col))
+			\ || s:IsInString(lnum, strlen(line))
+		let msl = lnum
+	    else
+		break
+	    endif
+	endif
+	
+	let msl_body = getline(msl)
+	let lnum = s:PrevNonBlankNonString(lnum - 1)
+    endwhile
+    return msl
+endfunction
+
+" Check if line 'lnum' has more opening brackets than closing ones.
+function s:ExtraBrackets(lnum)
+    let opening = {'parentheses': [], 'braces': [], 'brackets': []}
+    let closing = {'parentheses': [], 'braces': [], 'brackets': []}
+
+    let line = getline(a:lnum)
+    let pos  = match(line, '[][(){}]', 0)
+
+    " Save any encountered opening brackets, and remove them once a matching
+    " closing one has been found. If a closing bracket shows up that doesn't
+    " close anything, save it for later.
+    while pos != -1
+	if !s:IsInStringOrComment(a:lnum, pos + 1)
+	    if line[pos] == '('
+		call add(opening.parentheses, {'type': '(', 'pos': pos})
+	    elseif line[pos] == ')'
+		if empty(opening.parentheses)
+		    call add(closing.parentheses, {'type': ')', 'pos': pos})
+		else
+		    let opening.parentheses = opening.parentheses[0:-2]
+		endif
+	    elseif line[pos] == '{'
+		call add(opening.braces, {'type': '{', 'pos': pos})
+	    elseif line[pos] == '}'
+		if empty(opening.braces)
+		    call add(closing.braces, {'type': '}', 'pos': pos})
+		else
+		    let opening.braces = opening.braces[0:-2]
+		endif
+	    elseif line[pos] == '['
+		call add(opening.brackets, {'type': '[', 'pos': pos})
+	    elseif line[pos] == ']'
+		if empty(opening.brackets)
+		    call add(closing.brackets, {'type': ']', 'pos': pos})
+		else
+		    let opening.brackets = opening.brackets[0:-2]
+		endif
+	    endif
+	endif
+	
+	let pos = match(line, '[][(){}]', pos + 1)
+    endwhile
+
+    " Find the rightmost brackets, since they're the ones that are important in
+    " both opening and closing cases
+    let rightmost_opening = {'type': '(', 'pos': -1}
+    let rightmost_closing = {'type': ')', 'pos': -1}
+
+    for opening in opening.parentheses + opening.braces + opening.brackets
+	if opening.pos > rightmost_opening.pos
+	    let rightmost_opening = opening
+	endif
+    endfor
+
+    for closing in closing.parentheses + closing.braces + closing.brackets
+	if closing.pos > rightmost_closing.pos
+	    let rightmost_closing = closing
+	endif
+    endfor
+
+    return [rightmost_opening, rightmost_closing]
+endfunction
+
+function s:Match(lnum, regex)
+    let col = match(getline(a:lnum), '\C'.a:regex) + 1
+    return col > 0 && !s:IsInStringOrComment(a:lnum, col) ? col : 0
+endfunction
+
+function s:MatchLast(lnum, regex)
+    let line = getline(a:lnum)
+    let col = match(line, '.*\zs' . a:regex)
+    while col != -1 && s:IsInStringOrComment(a:lnum, col)
+	let line = strpart(line, 0, col)
+	let col = match(line, '.*' . a:regex)
+    endwhile
+    return col + 1
+endfunction
+
+" 4. FalconGetIndent Routine {{{1
+" ============
+
+function FalconGetIndent(...)
+    " For the current line, use the first argument if given, else v:lnum
+    let clnum = a:0 ? a:1 : v:lnum
+
+    " Use zero indent at the top of the file
+    if clnum == 0
+        return 0
+    endif
+
+    let line = getline(clnum)
+    let ind = -1
+
+    " If we got a closing bracket on an empty line, find its match and indent
+    " according to it.  For parentheses we indent to its column - 1, for the
+    " others we indent to the containing line's MSL's level.  Return -1 if fail.
+    let col = matchend(line, '^\s*[]})]')
+    if col > 0 && !s:IsInStringOrComment(clnum, col)
+	call cursor(clnum, col)
+	let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
+	if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
+	    if line[col-1]==')' && col('.') != col('$') - 1
+		let ind = virtcol('.') - 1
+	    else
+		let ind = indent(s:GetMSL(line('.')))
+	    endif
+	endif
+	return ind
+    endif
+
+    " If we have a deindenting keyword, find its match and indent to its level.
+    " TODO: this is messy
+    if s:Match(clnum, s:falcon_deindent_keywords)
+	call cursor(clnum, 1)
+	if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
+		    \ s:end_skip_expr) > 0
+	    let msl  = s:GetMSL(line('.'))
+	    let line = getline(line('.'))
+
+	    if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
+			\ strpart(line, col('.') - 1, 2) !~ 'do'
+		let ind = virtcol('.') - 1
+	    elseif getline(msl) =~ '=\s*\(#.*\)\=$'
+		let ind = indent(line('.'))
+	    else
+		let ind = indent(msl)
+	    endif
+	endif
+	return ind
+    endif
+
+    " If we are in a multi-line string or line-comment, don't do anything to it.
+    if s:IsInString(clnum, matchend(line, '^\s*') + 1)
+	return indent('.')
+    endif
+
+    " Find a non-blank, non-multi-line string line above the current line.
+    let lnum = s:PrevNonBlankNonString(clnum - 1)
+
+    " If the line is empty and inside a string, use the previous line.
+    if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1)
+	return indent(prevnonblank(clnum))
+    endif
+
+    " At the start of the file use zero indent.
+    if lnum == 0
+	return 0
+    endif
+
+    " Set up variables for the previous line.
+    let line = getline(lnum)
+    let ind = indent(lnum)
+
+    " If the previous line ended with a block opening, add a level of indent.
+    if s:Match(lnum, s:block_regex)
+	return indent(s:GetMSL(lnum)) + &sw
+    endif
+
+    " If it contained hanging closing brackets, find the rightmost one, find its
+    " match and indent according to that.
+    if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$'
+	let [opening, closing] = s:ExtraBrackets(lnum)
+
+	if opening.pos != -1
+	    if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
+		if col('.') + 1 == col('$')
+		    return ind + &sw
+		else
+		    return virtcol('.')
+		endif
+	    else
+		let nonspace = matchend(line, '\S', opening.pos + 1) - 1
+		return nonspace > 0 ? nonspace : ind + &sw
+	    endif
+	elseif closing.pos != -1
+	    call cursor(lnum, closing.pos + 1)
+	    normal! %
+
+	    if s:Match(line('.'), s:falcon_indent_keywords)
+		return indent('.') + &sw
+	    else
+		return indent('.')
+	    endif
+	else
+	    call cursor(clnum, vcol)
+	end
+    endif
+
+    " If the previous line ended with an "end", match that "end"s beginning's
+    " indent.
+    let col = s:Match(lnum, '\%(^\|[^.:@$]\)\<end\>\s*\%(#.*\)\=$')
+    if col > 0
+	call cursor(lnum, col)
+	if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
+		    \ s:end_skip_expr) > 0
+	    let n = line('.')
+	    let ind = indent('.')
+	    let msl = s:GetMSL(n)
+	    if msl != n
+		let ind = indent(msl)
+	    end
+	    return ind
+	endif
+    end
+
+    let col = s:Match(lnum, s:falcon_indent_keywords)
+    if col > 0
+	call cursor(lnum, col)
+	let ind = virtcol('.') - 1 + &sw
+	" TODO: make this better (we need to count them) (or, if a searchpair
+	" fails, we know that something is lacking an end and thus we indent a
+	" level
+	if s:Match(lnum, s:end_end_regex)
+	    let ind = indent('.')
+	endif
+	return ind
+    endif
+
+    " Set up variables to use and search for MSL to the previous line.
+    let p_lnum = lnum
+    let lnum = s:GetMSL(lnum)
+
+    " If the previous line wasn't a MSL and is continuation return its indent.
+    " TODO: the || s:IsInString() thing worries me a bit.
+    if p_lnum != lnum
+	if s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line))
+	    return ind
+	endif
+    endif
+
+    " Set up more variables, now that we know we wasn't continuation bound.
+    let line = getline(lnum)
+    let msl_ind = indent(lnum)
+
+    " If the MSL line had an indenting keyword in it, add a level of indent.
+    " TODO: this does not take into account contrived things such as
+    " module Foo; class Bar; end
+    if s:Match(lnum, s:falcon_indent_keywords)
+	let ind = msl_ind + &sw
+	if s:Match(lnum, s:end_end_regex)
+	    let ind = ind - &sw
+	endif
+	return ind
+    endif
+
+    " If the previous line ended with [*+/.,-=], but wasn't a block ending or a
+    " closing bracket, indent one extra level.
+    if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
+	if lnum == p_lnum
+	    let ind = msl_ind + &sw
+	else
+	    let ind = msl_ind
+	endif
+	return ind
+    endif
+
+  return ind
+endfunction
+
+" }}}1
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 sts=4 et tw=80 :
diff -Naur vim73.orig/runtime/indent/fortran.vim vim73/runtime/indent/fortran.vim
--- vim73.orig/runtime/indent/fortran.vim	2010-07-21 16:31:02.000000000 +0000
+++ vim73/runtime/indent/fortran.vim	2013-08-04 19:09:08.467283638 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Fortran95 (and Fortran90, Fortran77, F and elf90)
-" Version:	0.38
-" Last Change:	2010 July 21
+" Version:	0.40
+" Last Change:	2011 Dec. 28
 " Maintainer:	Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
 " Usage:	Do :help fortran-indent from Vim
 
@@ -11,9 +11,18 @@
 endif
 let b:did_indent = 1
 
+let s:cposet=&cpoptions
+set cpoptions&vim
+
 setlocal indentkeys+==~end,=~case,=~if,=~else,=~do,=~where,=~elsewhere,=~select
-setlocal indentkeys+==~endif,=~enddo,=~endwhere,=~endselect
-setlocal indentkeys+==~type,=~interface
+setlocal indentkeys+==~endif,=~enddo,=~endwhere,=~endselect,=~elseif
+setlocal indentkeys+==~type,=~interface,=~forall,=~associate,=~block,=~enum
+setlocal indentkeys+==~endforall,=~endassociate,=~endblock,=~endenum
+if exists("b:fortran_indent_more") || exists("g:fortran_indent_more")
+  setlocal indentkeys+==~function,=~subroutine,=~module,=~contains,=~program
+  setlocal indentkeys+==~endfunction,=~endsubroutine,=~endmodule
+  setlocal indentkeys+==~endprogram
+endif
 
 " Determine whether this is a fixed or free format source file
 " if this hasn't been done yet
@@ -61,14 +70,13 @@
   endif
 endif
 
-let s:cposet=&cpoptions
-set cpoptions-=C
-
 function FortranGetIndent(lnum)
   let ind = indent(a:lnum)
   let prevline=getline(a:lnum)
   " Strip tail comment
   let prevstat=substitute(prevline, '!.*$', '', '')
+  let prev2line=getline(a:lnum-1)
+  let prev2stat=substitute(prev2line, '!.*$', '', '')
 
   "Indent do loops only if they are all guaranteed to be of do/end do type
   if exists("b:fortran_do_enddo") || exists("g:fortran_do_enddo")
@@ -80,33 +88,64 @@
     endif
   endif
 
-  "Add a shiftwidth to statements following if, else, case,
-  "where, elsewhere, type and interface statements
-  if prevstat =~? '^\s*\(\d\+\s\)\=\s*\(else\|case\|where\|elsewhere\)\>'
-	\ ||prevstat =~? '^\s*\(\d\+\s\)\=\s*\(type\|interface\)\>'
-	\ || prevstat =~? '^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*if\>'
+  "Add a shiftwidth to statements following if, else, else if, case,
+  "where, else where, forall, type, interface and associate statements
+  if prevstat =~? '^\s*\(case\|else\|else\s*if\|else\s*where\)\>'
+	\ ||prevstat=~? '^\s*\(type\|interface\|associate\|enum\)\>'
+	\ ||prevstat=~?'^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*\(forall\|where\|block\)\>'
+	\ ||prevstat=~? '^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*if\>'
      let ind = ind + &sw
     " Remove unwanted indent after logical and arithmetic ifs
     if prevstat =~? '\<if\>' && prevstat !~? '\<then\>'
       let ind = ind - &sw
     endif
     " Remove unwanted indent after type( statements
-    if prevstat =~? '\<type\s*('
+    if prevstat =~? '^\s*type\s*('
       let ind = ind - &sw
     endif
   endif
 
-  "Subtract a shiftwidth from else, elsewhere, case, end if,
-  " end where, end select, end interface and end type statements
+  "Indent program units unless instructed otherwise
+  if !exists("b:fortran_indent_less") && !exists("g:fortran_indent_less")
+    let prefix='\(\(pure\|impure\|elemental\|recursive\)\s\+\)\{,2}'
+    let type='\(\(integer\|real\|double\s\+precision\|complex\|logical'
+          \.'\|character\|type\|class\)\s*\S*\s\+\)\='
+    if prevstat =~? '^\s*\(module\|contains\|program\)\>'
+            \ ||prevstat =~? '^\s*'.prefix.'subroutine\>'
+            \ ||prevstat =~? '^\s*'.prefix.type.'function\>'
+            \ ||prevstat =~? '^\s*'.type.prefix.'function\>'
+      let ind = ind + &sw
+    endif
+    if getline(v:lnum) =~? '^\s*contains\>'
+          \ ||getline(v:lnum)=~? '^\s*end\s*'
+          \ .'\(function\|subroutine\|module\|program\)\>'
+      let ind = ind - &sw
+    endif
+  endif
+
+  "Subtract a shiftwidth from else, else if, elsewhere, case, end if,
+  " end where, end select, end forall, end interface, end associate,
+  " end enum, and end type statements
   if getline(v:lnum) =~? '^\s*\(\d\+\s\)\=\s*'
-	\. '\(else\|elsewhere\|case\|end\s*\(if\|where\|select\|interface\|type\)\)\>'
+        \. '\(else\|else\s*if\|else\s*where\|case\|'
+        \. 'end\s*\(if\|where\|select\|interface\|'
+        \. 'type\|forall\|associate\|enum\)\)\>'
     let ind = ind - &sw
     " Fix indent for case statement immediately after select
-    if prevstat =~? '\<select\>'
+    if prevstat =~? '\<select\s\+\(case\|type\)\>'
       let ind = ind + &sw
     endif
   endif
 
+  "First continuation line
+  if prevstat =~ '&\s*$' && prev2stat !~ '&\s*$'
+    let ind = ind + &sw
+  endif
+  "Line after last continuation line
+  if prevstat !~ '&\s*$' && prev2stat =~ '&\s*$'
+    let ind = ind - &sw
+  endif
+
   return ind
 endfunction
 
diff -Naur vim73.orig/runtime/indent/gitconfig.vim vim73/runtime/indent/gitconfig.vim
--- vim73.orig/runtime/indent/gitconfig.vim	2010-05-21 09:53:47.000000000 +0000
+++ vim73/runtime/indent/gitconfig.vim	2013-08-04 19:09:08.467283638 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	git config file
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists("b:did_indent")
   finish
@@ -12,6 +12,8 @@
 setlocal indentexpr=GetGitconfigIndent()
 setlocal indentkeys=o,O,*<Return>,0[,],0;,0#,=,!^F
 
+let b:undo_indent = 'setl ai< inde< indk<'
+
 " Only define the function once.
 if exists("*GetGitconfigIndent")
   finish
diff -Naur vim73.orig/runtime/indent/gitolite.vim vim73/runtime/indent/gitolite.vim
--- vim73.orig/runtime/indent/gitolite.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/indent/gitolite.vim	2013-08-04 19:09:08.470616961 +0000
@@ -0,0 +1,45 @@
+" Vim indent file
+" Language:	gitolite configuration
+" URL:		https://github.com/tmatilai/gitolite.vim
+" Maintainer:	Teemu Matilainen <teemu.matilainen@iki.fi>
+" Last Change:	2011-12-24
+
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal autoindent
+setlocal indentexpr=GetGitoliteIndent()
+setlocal indentkeys=o,O,*<Return>,!^F,=repo,\",=
+
+" Only define the function once.
+if exists("*GetGitoliteIndent")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+function! GetGitoliteIndent()
+  let prevln = prevnonblank(v:lnum-1)
+  let pline = getline(prevln)
+  let cline = getline(v:lnum)
+
+  if cline =~ '^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\|-\)[ \t=]'
+    return &sw
+  elseif cline =~ '^\s*config\s'
+    return &sw
+  elseif pline =~ '^\s*repo\s' && cline =~ '^\s*\(#.*\)\?$'
+    return &sw
+  elseif cline =~ '^\s*#'
+    return indent(prevln)
+  elseif cline =~ '^\s*$'
+    return -1
+  else
+    return 0
+  endif
+endfunction
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/indent/haml.vim vim73/runtime/indent/haml.vim
--- vim73.orig/runtime/indent/haml.vim	2010-07-27 19:30:13.000000000 +0000
+++ vim73/runtime/indent/haml.vim	2013-08-04 19:09:08.470616961 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Haml
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists("b:did_indent")
   finish
@@ -23,7 +23,7 @@
 let s:tag = '\%([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*'
 
 if !exists('g:haml_self_closing_tags')
-  let g:haml_self_closing_tags = 'meta|link|img|hr|br'
+  let g:haml_self_closing_tags = 'base|link|meta|br|hr|img|input'
 endif
 
 function! GetHamlIndent()
diff -Naur vim73.orig/runtime/indent/html.vim vim73/runtime/indent/html.vim
--- vim73.orig/runtime/indent/html.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/html.vim	2013-08-04 19:09:08.473950285 +0000
@@ -1,242 +1,505 @@
-" Description:	html indenter
-" Author:	Johannes Zellner <johannes@zellner.org>
-" Last Change:	Mo, 05 Jun 2006 22:32:41 CEST
-" 		Restoring 'cpo' and 'ic' added by Bram 2006 May 5
-" Globals:	g:html_indent_tags	   -- indenting tags
-"		g:html_indent_strict       -- inhibit 'O O' elements
-"		g:html_indent_strict_table -- inhibit 'O -' elements
+" Vim indent script for HTML
+" General: "{{{
+" File:		html.vim (Vimscript #2075)
+" Author:	Andy Wokula <anwoku@yahoo.de>
+" Last Change:	2013 Jun 12
+" Rev Days:     13
+" Version:	0.9
+" Vim Version:	Vim7
+" Description:
+"   Improved version of the distributed html indent script, faster on a
+"   range of lines.
+"
+" Credits:
+"	indent/html.vim (2006 Jun 05) from J. Zellner
+"	indent/css.vim (2006 Dec 20) from N. Weibull
+"
+" History:
+" 2012 Oct 21	(v0.9) added support for shiftwidth()
+" 2011 Sep 09	(v0.8) added HTML5 tags (thx to J. Zuckerman)
+" 2008 Apr 28	(v0.6) revised customization
+" 2008 Mar 09	(v0.5) fixed 'indk' issue (thx to C.J. Robinson)
+" }}}
 
-" Only load this indent file when no other was loaded.
+" Init Folklore, check user settings (2nd time ++) "{{{
 if exists("b:did_indent")
     finish
 endif
 let b:did_indent = 1
 
+setlocal indentexpr=HtmlIndent()
+setlocal indentkeys=o,O,<Return>,<>>,{,},!^F
 
-" [-- local settings (must come before aborting the script) --]
-setlocal indentexpr=HtmlIndentGet(v:lnum)
-setlocal indentkeys=o,O,*<Return>,<>>,{,}
+let b:indent = {"lnum": -1}
+let b:undo_indent = "set inde< indk<| unlet b:indent"
 
-
-if exists('g:html_indent_tags')
-    unlet g:html_indent_tags
+" Load Once:
+if exists("*HtmlIndent")
+    call HtmlIndent_CheckUserSettings()
+    finish
 endif
 
-" [-- helper function to assemble tag list --]
-fun! <SID>HtmlIndentPush(tag)
-    if exists('g:html_indent_tags')
-	let g:html_indent_tags = g:html_indent_tags.'\|'.a:tag
-    else
-	let g:html_indent_tags = a:tag
-    endif
-endfun
-
-
-" [-- <ELEMENT ? - - ...> --]
-call <SID>HtmlIndentPush('a')
-call <SID>HtmlIndentPush('abbr')
-call <SID>HtmlIndentPush('acronym')
-call <SID>HtmlIndentPush('address')
-call <SID>HtmlIndentPush('b')
-call <SID>HtmlIndentPush('bdo')
-call <SID>HtmlIndentPush('big')
-call <SID>HtmlIndentPush('blockquote')
-call <SID>HtmlIndentPush('button')
-call <SID>HtmlIndentPush('caption')
-call <SID>HtmlIndentPush('center')
-call <SID>HtmlIndentPush('cite')
-call <SID>HtmlIndentPush('code')
-call <SID>HtmlIndentPush('colgroup')
-call <SID>HtmlIndentPush('del')
-call <SID>HtmlIndentPush('dfn')
-call <SID>HtmlIndentPush('dir')
-call <SID>HtmlIndentPush('div')
-call <SID>HtmlIndentPush('dl')
-call <SID>HtmlIndentPush('em')
-call <SID>HtmlIndentPush('fieldset')
-call <SID>HtmlIndentPush('font')
-call <SID>HtmlIndentPush('form')
-call <SID>HtmlIndentPush('frameset')
-call <SID>HtmlIndentPush('h1')
-call <SID>HtmlIndentPush('h2')
-call <SID>HtmlIndentPush('h3')
-call <SID>HtmlIndentPush('h4')
-call <SID>HtmlIndentPush('h5')
-call <SID>HtmlIndentPush('h6')
-call <SID>HtmlIndentPush('i')
-call <SID>HtmlIndentPush('iframe')
-call <SID>HtmlIndentPush('ins')
-call <SID>HtmlIndentPush('kbd')
-call <SID>HtmlIndentPush('label')
-call <SID>HtmlIndentPush('legend')
-call <SID>HtmlIndentPush('map')
-call <SID>HtmlIndentPush('menu')
-call <SID>HtmlIndentPush('noframes')
-call <SID>HtmlIndentPush('noscript')
-call <SID>HtmlIndentPush('object')
-call <SID>HtmlIndentPush('ol')
-call <SID>HtmlIndentPush('optgroup')
-" call <SID>HtmlIndentPush('pre')
-call <SID>HtmlIndentPush('q')
-call <SID>HtmlIndentPush('s')
-call <SID>HtmlIndentPush('samp')
-call <SID>HtmlIndentPush('script')
-call <SID>HtmlIndentPush('select')
-call <SID>HtmlIndentPush('small')
-call <SID>HtmlIndentPush('span')
-call <SID>HtmlIndentPush('strong')
-call <SID>HtmlIndentPush('style')
-call <SID>HtmlIndentPush('sub')
-call <SID>HtmlIndentPush('sup')
-call <SID>HtmlIndentPush('table')
-call <SID>HtmlIndentPush('textarea')
-call <SID>HtmlIndentPush('title')
-call <SID>HtmlIndentPush('tt')
-call <SID>HtmlIndentPush('u')
-call <SID>HtmlIndentPush('ul')
-call <SID>HtmlIndentPush('var')
-
-
-" [-- <ELEMENT ? O O ...> --]
-if !exists('g:html_indent_strict')
-    call <SID>HtmlIndentPush('body')
-    call <SID>HtmlIndentPush('head')
-    call <SID>HtmlIndentPush('html')
-    call <SID>HtmlIndentPush('tbody')
+" Patch 7.3.694
+if exists('*shiftwidth')
+    let s:ShiftWidth = function('shiftwidth')
+else
+    func! s:ShiftWidth()
+	return &shiftwidth
+    endfunc
 endif
 
+let s:cpo_save = &cpo
+set cpo-=C
+"}}}
+
+func! HtmlIndent_CheckUserSettings() "{{{
+    if exists("g:html_indent_inctags")
+	call s:AddITags(split(g:html_indent_inctags, ","))
+    endif
+    if exists("g:html_indent_autotags")
+	call s:RemoveITags(split(g:html_indent_autotags, ","))
+    endif
 
-" [-- <ELEMENT ? O - ...> --]
-if !exists('g:html_indent_strict_table')
-    call <SID>HtmlIndentPush('th')
-    call <SID>HtmlIndentPush('td')
-    call <SID>HtmlIndentPush('tr')
-    call <SID>HtmlIndentPush('tfoot')
-    call <SID>HtmlIndentPush('thead')
+    let indone = {"zero": 0
+		\,"auto": "indent(prevnonblank(v:lnum-1))"
+		\,"inc": "b:indent.blocktagind + s:ShiftWidth()"}
+    if exists("g:html_indent_script1")
+	let s:js1indent = get(indone, g:html_indent_script1, indone.zero)
+    endif
+    if exists("g:html_indent_style1")
+	let s:css1indent = get(indone, g:html_indent_style1, indone.zero)
+    endif
+endfunc "}}}
+
+" Init Script Vars  "{{{
+let s:usestate = 1
+let s:css1indent = 0
+let s:js1indent = 0
+" not to be changed:
+let s:endtags = [0,0,0,0,0,0,0,0]   " some places unused
+let s:newstate = {}
+let s:countonly = 0
+ "}}}
+func! s:AddITags(taglist) "{{{
+    for itag in a:taglist
+	let s:indent_tags[itag] = 1
+	let s:indent_tags['/'.itag] = -1
+    endfor
+endfunc "}}}
+func! s:AddBlockTag(tag, id, ...) "{{{
+    if !(a:id >= 2 && a:id < 2+len(s:endtags))
+	return
+    endif
+    let s:indent_tags[a:tag] = a:id
+    if a:0 == 0
+	let s:indent_tags['/'.a:tag] = -a:id
+	let s:endtags[a:id-2] = "</".a:tag.">"
+    else
+	let s:indent_tags[a:1] = -a:id
+	let s:endtags[a:id-2] = a:1
+    endif
+endfunc "}}}
+func! s:RemoveITags(taglist) "{{{
+    " remove itags (protect blocktags from being removed)
+    for itag in a:taglist
+	if !has_key(s:indent_tags, itag) || s:indent_tags[itag] != 1
+	    continue
+	endif
+	unlet s:indent_tags[itag]
+	if itag =~ '^\w\+$'
+	    unlet s:indent_tags["/".itag]
+	endif
+    endfor
+endfunc "}}}
+" Add Indent Tags: {{{
+if !exists("s:indent_tags")
+    let s:indent_tags = {}
 endif
 
-delfun <SID>HtmlIndentPush
+" old tags:
+call s:AddITags(['a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big',
+    \ 'blockquote', 'button', 'caption', 'center', 'cite', 'code', 'colgroup',
+    \ 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font', 'form',
+    \ 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'i', 'iframe', 'ins', 'kbd',
+    \ 'label', 'legend', 'map', 'menu', 'noframes', 'noscript', 'object', 'ol',
+    \ 'optgroup', 'q', 's', 'samp', 'select', 'small', 'span', 'strong', 'sub',
+    \ 'sup', 'table', 'textarea', 'title', 'tt', 'u', 'ul', 'var', 'th', 'td',
+    \ 'tr', 'tfoot', 'thead'])
+
+" tags added 2011 Sep 09 (especially HTML5 tags):
+call s:AddITags(['area', 'article', 'aside', 'audio', 'bdi', 'canvas',
+    \ 'command', 'datalist', 'details', 'embed', 'figure', 'footer',
+    \ 'header', 'group', 'keygen', 'mark', 'math', 'meter', 'nav', 'output',
+    \ 'progress', 'ruby', 'section', 'svg', 'texture', 'time', 'video',
+    \ 'wbr', 'text'])
+
+"}}}
+" Add Block Tags: contain alien content "{{{
+call s:AddBlockTag('pre', 2)
+call s:AddBlockTag('script', 3)
+call s:AddBlockTag('style', 4)
+call s:AddBlockTag('<!--', 5, '-->')
+"}}}
+
+func! s:CountITags(...) "{{{
+
+    " relative indent steps for current line [unit &sw]:
+    let s:curind = 0
+    " relative indent steps for next line [unit &sw]:
+    let s:nextrel = 0
+
+    if a:0==0
+	let s:block = s:newstate.block
+	let tmpline = substitute(s:curline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
+	if s:block == 3
+	    let s:newstate.scripttype = s:GetScriptType(matchstr(tmpline, '\C.*<SCRIPT\>\zs[^>]*'))
+	endif
+	let s:newstate.block = s:block
+    else
+	let s:block = 0		" assume starting outside of a block
+	let s:countonly = 1	" don't change state
+	let tmpline = substitute(s:altline, '<\zs\/\=\w\+\>\|<!--\|-->', '\=s:CheckTag(submatch(0))', 'g')
+	let s:countonly = 0
+    endif
+endfunc "}}}
+func! s:CheckTag(itag) "{{{
+    " "tag" or "/tag" or "<!--" or "-->"
+    let ind = get(s:indent_tags, a:itag)
+    if ind == -1
+	" closing tag
+	if s:block != 0
+	    " ignore itag within a block
+	    return "foo"
+	endif
+	if s:nextrel == 0
+	    let s:curind -= 1
+	else
+	    let s:nextrel -= 1
+	endif
+	" if s:curind >= 1
+	"     let s:curind -= 1
+	" else
+	"     let s:nextrel -= 1
+	" endif
+    elseif ind == 1
+	" opening tag
+	if s:block != 0
+	    return "foo"
+	endif
+	let s:nextrel += 1
+    elseif ind != 0
+	" block-tag (opening or closing)
+	return s:Blocktag(a:itag, ind)
+    endif
+    " else ind==0 (other tag found): keep indent
+    return "foo"   " no matter
+endfunc "}}}
+func! s:Blocktag(blocktag, ind) "{{{
+    if a:ind > 0
+	" a block starts here
+	if s:block != 0
+	    " already in a block (nesting) - ignore
+	    " especially ignore comments after other blocktags
+	    return "foo"
+	endif
+	let s:block = a:ind		" block type
+	if s:countonly
+	    return "foo"
+	endif
+	let s:newstate.blocklnr = v:lnum
+	" save allover indent for the endtag
+	let s:newstate.blocktagind = b:indent.baseindent + (s:nextrel + s:curind) * s:ShiftWidth()
+	if a:ind == 3
+	    return "SCRIPT"    " all except this must be lowercase
+	    " line is to be checked again for the type attribute
+	endif
+    else
+	let s:block = 0
+	" we get here if starting and closing block-tag on same line
+    endif
+    return "foo"
+endfunc "}}}
+func! s:GetScriptType(str) "{{{
+    if a:str == "" || a:str =~ "java"
+	return "javascript"
+    else
+	return ""
+    endif
+endfunc "}}}
 
-let s:cpo_save = &cpo
-set cpo-=C
+func! s:FreshState(lnum) "{{{
+    " Look back in the file (lines 1 to a:lnum-1) to calc a state for line
+    " a:lnum.  A state is to know ALL relevant details about the lines
+    " 1..a:lnum-1, initial calculating (here!) can be slow, but updating is
+    " fast (incremental).
+    " State:
+    "	lnum		last indented line == prevnonblank(a:lnum - 1)
+    "	block = 0	a:lnum located within special tag: 0:none, 2:<pre>,
+    "			3:<script>, 4:<style>, 5:<!--
+    "	baseindent	use this indent for line a:lnum as a start - kind of
+    "			autoindent (if block==0)
+    "	scripttype = ''	type attribute of a script tag (if block==3)
+    "	blocktagind	indent for current opening (get) and closing (set)
+    "			blocktag (if block!=0)
+    "	blocklnr	lnum of starting blocktag (if block!=0)
+    "	inattr		line {lnum} starts with attributes of a tag
+    let state = {}
+    let state.lnum = prevnonblank(a:lnum - 1)
+    let state.scripttype = ""
+    let state.blocktagind = -1
+    let state.block = 0
+    let state.baseindent = 0
+    let state.blocklnr = 0
+    let state.inattr = 0
 
-" [-- count indent-increasing tags of line a:lnum --]
-fun! <SID>HtmlIndentOpen(lnum, pattern)
-    let s = substitute('x'.getline(a:lnum),
-    \ '.\{-}\(\(<\)\('.a:pattern.'\)\>\)', "\1", 'g')
-    let s = substitute(s, "[^\1].*$", '', '')
-    return strlen(s)
-endfun
-
-" [-- count indent-decreasing tags of line a:lnum --]
-fun! <SID>HtmlIndentClose(lnum, pattern)
-    let s = substitute('x'.getline(a:lnum),
-    \ '.\{-}\(\(<\)/\('.a:pattern.'\)\>>\)', "\1", 'g')
-    let s = substitute(s, "[^\1].*$", '', '')
-    return strlen(s)
-endfun
-
-" [-- count indent-increasing '{' of (java|css) line a:lnum --]
-fun! <SID>HtmlIndentOpenAlt(lnum)
-    return strlen(substitute(getline(a:lnum), '[^{]\+', '', 'g'))
-endfun
-
-" [-- count indent-decreasing '}' of (java|css) line a:lnum --]
-fun! <SID>HtmlIndentCloseAlt(lnum)
-    return strlen(substitute(getline(a:lnum), '[^}]\+', '', 'g'))
-endfun
-
-" [-- return the sum of indents respecting the syntax of a:lnum --]
-fun! <SID>HtmlIndentSum(lnum, style)
-    if a:style == match(getline(a:lnum), '^\s*</')
-	if a:style == match(getline(a:lnum), '^\s*</\<\('.g:html_indent_tags.'\)\>')
-	    let open = <SID>HtmlIndentOpen(a:lnum, g:html_indent_tags)
-	    let close = <SID>HtmlIndentClose(a:lnum, g:html_indent_tags)
-	    if 0 != open || 0 != close
-		return open - close
-	    endif
+    if state.lnum == 0
+	return state
+    endif
+
+    " Heuristic:
+    " remember startline state.lnum
+    " look back for <pre, </pre, <script, </script, <style, </style tags
+    " remember stopline
+    " if opening tag found,
+    "	assume a:lnum within block
+    " else
+    "	look back in result range (stopline, startline) for comment
+    "	    \ delimiters (<!--, -->)
+    "	if comment opener found,
+    "	    assume a:lnum within comment
+    "	else
+    "	    assume usual html for a:lnum
+    "	    if a:lnum-1 has a closing comment
+    "		look back to get indent of comment opener
+    " FI
+
+    " look back for blocktag
+    call cursor(a:lnum, 1)
+    let [stopline, stopcol] = searchpos('\c<\zs\/\=\%(pre\>\|script\>\|style\>\)', "bW")
+    " fugly ... why isn't there searchstr()
+    let tagline = tolower(getline(stopline))
+    let blocktag = matchstr(tagline, '\/\=\%(pre\>\|script\>\|style\>\)', stopcol-1)
+    if stopline > 0 && blocktag[0] != "/"
+	" opening tag found, assume a:lnum within block
+	let state.block = s:indent_tags[blocktag]
+	if state.block == 3
+	    let state.scripttype = s:GetScriptType(matchstr(tagline, '\>[^>]*', stopcol))
 	endif
+	let state.blocklnr = stopline
+	" check preceding tags in the line:
+	let s:altline = tagline[: stopcol-2]
+	call s:CountITags(1)
+	let state.blocktagind = indent(stopline) + (s:curind + s:nextrel) * s:ShiftWidth()
+	return state
+    elseif stopline == state.lnum
+	" handle special case: previous line (= state.lnum) contains a
+	" closing blocktag which is preceded by line-noise;
+	" blocktag == "/..."
+	let swendtag = match(tagline, '^\s*</') >= 0
+	if !swendtag
+	    let [bline, bcol] = searchpos('<'.blocktag[1:].'\>', "bW")
+	    let s:altline = tolower(getline(bline)[: bcol-2])
+	    call s:CountITags(1)
+	    let state.baseindent = indent(bline) + (s:nextrel+s:curline) * s:ShiftWidth()
+	    return state
+	endif
+    endif
+
+    " else look back for comment
+    call cursor(a:lnum, 1)
+    let [comline, comcol, found] = searchpos('\(<!--\)\|-->', 'bpW', stopline)
+    if found == 2
+	" comment opener found, assume a:lnum within comment
+	let state.block = 5
+	let state.blocklnr = comline
+	" check preceding tags in the line:
+	let s:altline = tolower(getline(comline)[: comcol-2])
+	call s:CountITags(1)
+	let state.blocktagind = indent(comline) + (s:curind + s:nextrel) * s:ShiftWidth()
+	return state
     endif
-    if '' != &syntax &&
-	\ synIDattr(synID(a:lnum, 1, 1), 'name') =~ '\(css\|java\).*' &&
-	\ synIDattr(synID(a:lnum, strlen(getline(a:lnum)), 1), 'name')
-	\ =~ '\(css\|java\).*'
-	if a:style == match(getline(a:lnum), '^\s*}')
-	    return <SID>HtmlIndentOpenAlt(a:lnum) - <SID>HtmlIndentCloseAlt(a:lnum)
-	endif
-    endif
-    return 0
-endfun
-
-fun! HtmlIndentGet(lnum)
-    " Find a non-empty line above the current line.
-    let lnum = prevnonblank(a:lnum - 1)
-
-    " Hit the start of the file, use zero indent.
-    if lnum == 0
-	return 0
-    endif
-
-    let restore_ic = &ic
-    setlocal ic " ignore case
-
-    " [-- special handling for <pre>: no indenting --]
-    if getline(a:lnum) =~ '\c</pre>'
-		\ || 0 < searchpair('\c<pre>', '', '\c</pre>', 'nWb')
-		\ || 0 < searchpair('\c<pre>', '', '\c</pre>', 'nW')
-	" we're in a line with </pre> or inside <pre> ... </pre>
-	if restore_ic == 0
-	  setlocal noic
+
+    " else within usual html
+    let s:altline = tolower(getline(state.lnum))
+    " check a:lnum-1 for closing comment (we need indent from the opening line)
+    let comcol = stridx(s:altline, '-->')
+    if comcol >= 0
+	call cursor(state.lnum, comcol+1)
+	let [comline, comcol] = searchpos('<!--', 'bW')
+	if comline == state.lnum
+	    let s:altline = s:altline[: comcol-2]
+	else
+	    let s:altline = tolower(getline(comline)[: comcol-2])
 	endif
-	return -1
+	call s:CountITags(1)
+	let state.baseindent = indent(comline) + (s:nextrel+s:curline) * s:ShiftWidth()
+	return state
+	" TODO check tags that follow "-->"
+    endif
+
+    " else no comments
+    call s:CountITags(1)
+    let state.baseindent = indent(state.lnum) + s:nextrel * s:ShiftWidth()
+    " line starts with end tag
+    let swendtag = match(s:altline, '^\s*</') >= 0
+    if !swendtag
+	let state.baseindent += s:curind * s:ShiftWidth()
     endif
+    return state
+endfunc "}}}
 
-    " [-- special handling for <javascript>: use cindent --]
-    let js = '<script.*type\s*=\s*.*java'
+func! s:Alien2() "{{{
+    " <pre> block
+    return -1
+endfunc "}}}
+func! s:Alien3() "{{{
+    " <script> javascript
+    if prevnonblank(v:lnum-1) == b:indent.blocklnr
+	" indent for the first line after <script>
+	return eval(s:js1indent)
+    endif
+    if b:indent.scripttype == "javascript"
+	return cindent(v:lnum)
+    else
+	return -1
+    endif
+endfunc "}}}
+func! s:Alien4() "{{{
+    " <style>
+    if prevnonblank(v:lnum-1) == b:indent.blocklnr
+	" indent for first content line
+	return eval(s:css1indent)
+    endif
+    return s:CSSIndent()
+endfunc
 
-    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
-    " by Tye Zdrojewski <zdro@yahoo.com>, 05 Jun 2006
-    " ZDR: This needs to be an AND (we are 'after the start of the pair' AND
-    "      we are 'before the end of the pair').  Otherwise, indentation
-    "      before the start of the script block will be affected; the end of
-    "      the pair will still match if we are before the beginning of the
-    "      pair.
-    "
-    if   0 < searchpair(js, '', '</script>', 'nWb')
-    \ && 0 < searchpair(js, '', '</script>', 'nW')
-	" we're inside javascript
-	if getline(lnum) !~ js && getline(a:lnum) != '</script>'
-	    if restore_ic == 0
-	      setlocal noic
+func! s:CSSIndent() "{{{
+    " adopted $VIMRUNTIME/indent/css.vim
+    if getline(v:lnum) =~ '^\s*[*}]'
+	return cindent(v:lnum)
+    endif
+    let minline = b:indent.blocklnr
+    let pnum = s:css_prevnoncomment(v:lnum - 1, minline)
+    if pnum <= minline
+	" < is to catch errors
+	" indent for first content line after comments
+	return eval(s:css1indent)
+    endif
+    let ind = indent(pnum) + s:css_countbraces(pnum, 1) * s:ShiftWidth()
+    let pline = getline(pnum)
+    if pline =~ '}\s*$'
+	let ind -= (s:css_countbraces(pnum, 0) - (pline =~ '^\s*}')) * s:ShiftWidth()
+    endif
+    return ind
+endfunc "}}}
+func! s:css_prevnoncomment(lnum, stopline) "{{{
+    " caller starts from a line a:lnum-1 that is not a comment
+    let lnum = prevnonblank(a:lnum)
+    let ccol = match(getline(lnum), '\*/')
+    if ccol < 0
+	return lnum
+    endif
+    call cursor(lnum, ccol+1)
+    let lnum = search('/\*', 'bW', a:stopline)
+    if indent(".") == virtcol(".")-1
+	return prevnonblank(lnum-1)
+    else
+	return lnum
+    endif
+endfunc "}}}
+func! s:css_countbraces(lnum, count_open) "{{{
+    let brs = substitute(getline(a:lnum),'[''"].\{-}[''"]\|/\*.\{-}\*/\|/\*.*$\|[^{}]','','g')
+    let n_open = 0
+    let n_close = 0
+    for brace in split(brs, '\zs')
+	if brace == "{"
+	    let n_open += 1
+	elseif brace == "}"
+	    if n_open > 0
+		let n_open -= 1
+	    else
+		let n_close += 1
 	    endif
-	    return cindent(a:lnum)
 	endif
+    endfor
+    return a:count_open ? n_open : n_close
+endfunc "}}}
+
+"}}}
+func! s:Alien5() "{{{
+    " <!-- -->
+    return -1
+endfunc "}}}
+
+func! HtmlIndent() "{{{
+    let s:curline = tolower(getline(v:lnum))
+    let indentunit = s:ShiftWidth()
+
+    let s:newstate = {}
+    let s:newstate.lnum = v:lnum
+
+    " does the line start with a closing tag?
+    let swendtag = match(s:curline, '^\s*</') >= 0
+
+    if prevnonblank(v:lnum-1) == b:indent.lnum && s:usestate
+	" use state (continue from previous line)
+    else
+	" start over (know nothing)
+	let b:indent = s:FreshState(v:lnum)
     endif
 
-    if getline(lnum) =~ '\c</pre>'
-	" line before the current line a:lnum contains
-	" a closing </pre>. --> search for line before
-	" starting <pre> to restore the indent.
-	let preline = prevnonblank(search('\c<pre>', 'bW') - 1)
-	if preline > 0
-	    if restore_ic == 0
-	      setlocal noic
+    if b:indent.block >= 2
+	" within block
+	let endtag = s:endtags[b:indent.block-2]
+	let blockend = stridx(s:curline, endtag)
+	if blockend >= 0
+	    " block ends here
+	    let s:newstate.block = 0
+	    " calc indent for REST OF LINE (may start more blocks):
+	    let s:curline = strpart(s:curline, blockend+strlen(endtag))
+	    call s:CountITags()
+	    if swendtag && b:indent.block != 5
+		let indent = b:indent.blocktagind + s:curind * indentunit
+		let s:newstate.baseindent = indent + s:nextrel * indentunit
+	    else
+		let indent = s:Alien{b:indent.block}()
+		let s:newstate.baseindent = b:indent.blocktagind + s:nextrel * indentunit
 	    endif
-	    return indent(preline)
+	    call extend(b:indent, s:newstate, "force")
+	    return indent
+	else
+	    " block continues
+	    " indent this line with alien method
+	    let indent = s:Alien{b:indent.block}()
+	    call extend(b:indent, s:newstate, "force")
+	    return indent
 	endif
+    else
+	" not within a block - within usual html
+	" if < 2 then always 0
+	let s:newstate.block = b:indent.block
+	call s:CountITags()
+	if swendtag
+	    let indent = b:indent.baseindent + s:curind * indentunit
+	    let s:newstate.baseindent = indent + s:nextrel * indentunit
+	else
+	    let indent = b:indent.baseindent
+	    let s:newstate.baseindent = indent + (s:curind + s:nextrel) * indentunit
+	endif
+	call extend(b:indent, s:newstate, "force")
+	return indent
     endif
 
-    let ind = <SID>HtmlIndentSum(lnum, -1)
-    let ind = ind + <SID>HtmlIndentSum(a:lnum, 0)
+endfunc "}}}
 
-    if restore_ic == 0
-	setlocal noic
-    endif
+" check user settings (first time), clear cpo, Modeline: {{{1
+
+" DEBUG:
+com! -nargs=* IndHtmlLocal <args>
 
-    return indent(lnum) + (&sw * ind)
-endfun
+call HtmlIndent_CheckUserSettings()
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
-" [-- EOF <runtime>/indent/html.vim --]
+" vim:set fdm=marker ts=8:
diff -Naur vim73.orig/runtime/indent/idlang.vim vim73/runtime/indent/idlang.vim
--- vim73.orig/runtime/indent/idlang.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/idlang.vim	2013-08-04 19:09:08.473950285 +0000
@@ -1,6 +1,6 @@
 " IDL (Interactive Data Language) indent file.
 " Language: IDL (ft=idlang)
-" Last change:	2002 Sep 23
+" Last change:	2012 May 18
 " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
 
 " Only load this indent file when no other was loaded.
@@ -9,8 +9,7 @@
 endif
 let b:did_indent = 1
 
-setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,
-		    \0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
+setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
 
 setlocal indentexpr=GetIdlangIndent(v:lnum)
 
diff -Naur vim73.orig/runtime/indent/java.vim vim73/runtime/indent/java.vim
--- vim73.orig/runtime/indent/java.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/java.vim	2013-08-04 19:09:08.477283608 +0000
@@ -1,7 +1,12 @@
 " Vim indent file
 " Language:	Java
-" Maintainer:	Toby Allsopp <toby.allsopp@peace.com> (resigned)
-" Last Change:	2005 Mar 28
+" Previous Maintainer: Toby Allsopp <toby.allsopp@peace.com>
+" Current Maintainer: Hong Xu <xuhdev@gmail.com>
+" Last Change:	2012 May 18
+" Version: 1.0
+" License: Same as Vim.
+" Copyright (c) 2012 Hong Xu
+" Before 2012, this file is maintained by Toby Allsopp.
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -24,6 +29,8 @@
 if exists("*GetJavaIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 function! SkipJavaBlanksAndComments(startline)
   let lnum = a:startline
@@ -60,6 +67,13 @@
 
   " find start of previous line, in case it was a continuation line
   let lnum = SkipJavaBlanksAndComments(v:lnum - 1)
+
+  " If the previous line starts with '@', we should have the same indent as
+  " the previous one
+  if getline(lnum) =~ '^\s*@\S\+\s*$'
+    return indent(lnum)
+  endif
+
   let prev = lnum
   while prev > 1
     let next_prev = SkipJavaBlanksAndComments(prev - 1)
@@ -127,4 +141,7 @@
   return theIndent
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vi: sw=2 et
diff -Naur vim73.orig/runtime/indent/liquid.vim vim73/runtime/indent/liquid.vim
--- vim73.orig/runtime/indent/liquid.vim	2010-05-21 09:56:11.000000000 +0000
+++ vim73/runtime/indent/liquid.vim	2013-08-04 19:09:08.483950255 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:     Liquid
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists('b:did_indent')
   finish
@@ -54,9 +54,8 @@
   let line  = substitute(line,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','')
   let line .= matchstr(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+')
   let cline = substitute(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','')
-  let ind += &sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|tablerow\|capture\)\>')
+  let ind += &sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|empty\|tablerow\|capture\)\>')
   let ind -= &sw * s:count(line,'{%\s*end\%(if\|unless\|ifchanged\|case\|for\|tablerow\|capture\)\>')
-  let ind += &sw * s:count(line,'{%\s*\%(elsif\|else\|when\|empty\)\>')
   let ind -= &sw * s:count(cline,'{%\s*\%(elsif\|else\|when\|empty\)\>')
   let ind -= &sw * s:count(cline,'{%\s*end\w*$')
   return ind
diff -Naur vim73.orig/runtime/indent/lisp.vim vim73/runtime/indent/lisp.vim
--- vim73.orig/runtime/indent/lisp.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/lisp.vim	2013-08-04 19:09:08.483950255 +0000
@@ -1,8 +1,8 @@
 " Vim indent file
 " Language:	Lisp
 " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
-" URL:		 http://iamphet.nm.ru/vim
-" Last Change:	2005 May 19
+" URL:		 http://sites.google.com/site/khorser/opensource/vim
+" Last Change:	2012 Jan 10
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
diff -Naur vim73.orig/runtime/indent/mp.vim vim73/runtime/indent/mp.vim
--- vim73.orig/runtime/indent/mp.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/mp.vim	2013-08-04 19:09:08.490616901 +0000
@@ -1,7 +1,7 @@
 " MetaPost indent file
 " Language:	MetaPost
 " Maintainer:	Eugene Minkovskii <emin@mccme.ru>
-" Last Change:	2003 Nov 21
+" Last Change:	2012 May 18
 " Version: 0.1
 " ==========================================================================
 
@@ -56,6 +56,8 @@
 if exists("*GetMetaPostIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Auxiliary Definitions: {{{1
 function! MetaNextNonblankNoncomment(pos)
@@ -203,4 +205,7 @@
 endfunction
 "
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2:fdm=marker
diff -Naur vim73.orig/runtime/indent/ocaml.vim vim73/runtime/indent/ocaml.vim
--- vim73.orig/runtime/indent/ocaml.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/ocaml.vim	2013-08-04 19:09:08.493950224 +0000
@@ -1,12 +1,16 @@
 " Vim indent file
 " Language:     OCaml
-" Maintainers:	Jean-Francois Yuen   <jfyuen@happycoders.org>
-"		Mike Leary	     <leary@nwlink.com>
-"		Markus Mottl	     <markus.mottl@gmail.com>
-" URL:		http://www.ocaml.info/vim/indent/ocaml.vim
-" Last Change:  2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
-"		2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
-"		2005 Apr 11 - Fixed an indentation bug concerning "let" (MM)
+" Maintainers:  Jean-Francois Yuen   <jfyuen@happycoders.org>
+"               Mike Leary           <leary@nwlink.com>
+"               Markus Mottl         <markus.mottl@gmail.com>
+" URL:          http://www.ocaml.info/vim/indent/ocaml.vim
+" Last Change:  2013 Jun 29
+"               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
+"               2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
+"               2013 June   - commented textwidth (Marc Weber)
+"
+" Marc Weber's comment: This file may contain a lot of (very custom) stuff
+" which eventually should be moved somewhere else ..
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -19,7 +23,9 @@
 setlocal indentkeys+=0=and,0=class,0=constraint,0=done,0=else,0=end,0=exception,0=external,0=if,0=in,0=include,0=inherit,0=initializer,0=let,0=method,0=open,0=then,0=type,0=val,0=with,0;;,0>\],0\|\],0>},0\|,0},0\],0)
 setlocal nolisp
 setlocal nosmartindent
-setlocal textwidth=80
+
+" At least Marc Weber and Markus Mottl do not like this:
+" setlocal textwidth=80
 
 " Comment formatting
 if !exists("no_ocaml_comments")
@@ -44,7 +50,7 @@
 let s:type = '^\s*\%(class\|let\|type\)\>.*='
 
 " Skipping pattern, for comments
-function s:GetLineWithoutFullComment(lnum)
+function! s:GetLineWithoutFullComment(lnum)
  let lnum = prevnonblank(a:lnum - 1)
  let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
  while lline =~ '^\s*$' && lnum > 0
@@ -55,7 +61,7 @@
 endfunction
 
 " Indent for ';;' to match multiple 'let'
-function s:GetInd(lnum, pat, lim)
+function! s:GetInd(lnum, pat, lim)
  let llet = search(a:pat, 'bW')
  let old = indent(a:lnum)
  while llet > 0
@@ -70,18 +76,18 @@
 endfunction
 
 " Indent pairs
-function s:FindPair(pstart, pmid, pend)
+function! s:FindPair(pstart, pmid, pend)
  call search(a:pend, 'bW')
  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
 endfunction
 
 " Indent 'let'
-function s:FindLet(pstart, pmid, pend)
+function! s:FindLet(pstart, pmid, pend)
  call search(a:pend, 'bW')
  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet'))
 endfunction
 
-function GetOCamlIndent()
+function! GetOCamlIndent()
  " Find a non-commented line above the current line.
  let lnum = s:GetLineWithoutFullComment(v:lnum)
 
@@ -239,6 +245,20 @@
  elseif lline =~ '^\s*(\*' && line =~ '^\s*\*'
    let ind = ind + 1
 
+ else
+ " Don't change indentation of this line
+ " for new lines (indent==0) use indentation of previous line
+
+ " This is for preventing removing indentation of these args:
+ "   let f x =
+ "     let y = x + 1 in
+ "     Printf.printf
+ "       "o"           << here
+ "       "oeuth"       << don't touch indentation
+
+   let i = indent(v:lnum)
+   return i == 0 ? ind : i
+
  endif
 
  " Subtract a 'shiftwidth' after lines matching 'match ... with parser':
diff -Naur vim73.orig/runtime/indent/occam.vim vim73/runtime/indent/occam.vim
--- vim73.orig/runtime/indent/occam.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/occam.vim	2013-08-04 19:09:08.493950224 +0000
@@ -20,6 +20,8 @@
 if exists("*GetOccamIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 "{{{  Indent definitions
 " Define carriage return indent
@@ -180,3 +182,6 @@
 
 endfunction
 "}}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/indent/pascal.vim vim73/runtime/indent/pascal.vim
--- vim73.orig/runtime/indent/pascal.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/pascal.vim	2013-08-04 19:09:08.497283548 +0000
@@ -2,7 +2,11 @@
 " Language:    Pascal
 " Maintainer:  Neil Carter <n.carter@swansea.ac.uk>
 " Created:     2004 Jul 13
-" Last Change: 2005 Jul 05
+" Last Change: 2011 Apr 01
+"
+" This is version 2.0, a complete rewrite.
+"
+" For further documentation, see http://psy.swansea.ac.uk/staff/carter/vim/
 
 
 if exists("b:did_indent")
@@ -38,7 +42,15 @@
 endfunction
 
 
+function! s:PurifyCode( line_num )
+	" Strip any trailing comments and whitespace
+	let pureline = 'TODO'
+	return pureline
+endfunction
+
+
 function! GetPascalIndent( line_num )
+
 	" Line 0 always goes at column 0
 	if a:line_num == 0
 		return 0
@@ -46,128 +58,171 @@
 
 	let this_codeline = getline( a:line_num )
 
-	" If in the middle of a three-part comment
+
+	" SAME INDENT
+
+	" Middle of a three-part comment
 	if this_codeline =~ '^\s*\*'
-		return indent( a:line_num )
+		return indent( a:line_num - 1)
 	endif
 
-	let prev_codeline_num = s:GetPrevNonCommentLineNum( a:line_num )
-	let prev_codeline = getline( prev_codeline_num )
-	let indnt = indent( prev_codeline_num )
 
-	" Compiler directives should always go in column zero.
-	if this_codeline =~ '^\s*{\(\$IFDEF\|\$ELSE\|\$ENDIF\)'
+	" COLUMN 1 ALWAYS
+
+	" Last line of the program
+	if this_codeline =~ '^\s*end\.'
 		return 0
 	endif
 
-	" These items have nothing before or after (not even a comment), and
-	" go on column 0. Make sure that the ^\s* is followed by \( to make
-	" ORs work properly, and not include the start of line (this must
-	" always appear).
-	" The bracketed expression with the underline is a routine
-	" separator. This is one case where we do indent comment lines.
-	if this_codeline =~ '^\s*\((\*\ _\+\ \*)\|\<\(const\|var\)\>\)$'
+	" Compiler directives, allowing "(*" and "{"
+	"if this_codeline =~ '^\s*\({\|(\*\)$\(IFDEF\|IFNDEF\|ELSE\|ENDIF\)'
+	if this_codeline =~ '^\s*\({\|(\*\)\$'
 		return 0
 	endif
 
-	" These items may have text after them, and go on column 0 (in most
-	" cases). The problem is that "function" and "procedure" keywords
-	" should be indented if within a class declaration.
-	if this_codeline =~ '^\s*\<\(program\|type\|uses\|procedure\|function\)\>'
+	" section headers
+	if this_codeline =~ '^\s*\(program\|procedure\|function\|type\)\>'
 		return 0
 	endif
 
-	" BEGIN
-	" If the begin does not come after "if", "for", or "else", then it
-	" goes in column 0
-	if this_codeline =~ '^\s*begin\>' && prev_codeline !~ '^\s*\<\(if\|for\|else\)\>'
+	" Subroutine separators, lines ending with "const" or "var"
+	if this_codeline =~ '^\s*\((\*\ _\+\ \*)\|\(const\|var\)\)$'
 		return 0
 	endif
 
-	" These keywords are indented once only.
-	if this_codeline =~ '^\s*\<\(private\)\>'
-		return &shiftwidth
-	endif
 
-	" If the PREVIOUS LINE contained these items, the current line is
-	" always indented once.
-	if prev_codeline =~ '^\s*\<\(type\|uses\)\>'
-		return &shiftwidth
-	endif
+	" OTHERWISE, WE NEED TO LOOK FURTHER BACK...
 
-	" These keywords are indented once only. Possibly surrounded by
-	" other chars.
-	if this_codeline =~ '^.\+\<\(object\|record\)\>'
-		return &shiftwidth
+	let prev_codeline_num = s:GetPrevNonCommentLineNum( a:line_num )
+	let prev_codeline = getline( prev_codeline_num )
+	let indnt = indent( prev_codeline_num )
+
+
+	" INCREASE INDENT
+
+	" If the PREVIOUS LINE ended in these items, always indent
+	if prev_codeline =~ '\<\(type\|const\|var\)$'
+		return indnt + &shiftwidth
 	endif
 
-	" If the previous line was indenting...
-	if prev_codeline =~ '^\s*\<\(for\|if\|case\|else\|end\ else\)\>'
-		" then indent.
-		let indnt = indnt + &shiftwidth
-		" BUT... if this is the start of a multistatement block then we
-		" need to align the begin with the previous line.
-		if this_codeline =~ '^\s*begin\>'
-			return indnt - &shiftwidth
+	if prev_codeline =~ '\<repeat$'
+		if this_codeline !~ '^\s*until\>'
+			return indnt + &shiftwidth
+		else
+			return indnt
 		endif
+	endif
 
-		" We also need to keep the indentation level constant if the
-		" whole if-then statement was on one line.
-		if prev_codeline =~ '\<then\>.\+'
-			let indnt = indnt - &shiftwidth
+	if prev_codeline =~ '\<\(begin\|record\)$'
+		if this_codeline !~ '^\s*end\>'
+			return indnt + &shiftwidth
+		else
+			return indnt
 		endif
 	endif
 
-	" PREVIOUS-LINE BEGIN
-	" If the previous line was an indenting keyword then indent once...
-	if prev_codeline =~ '^\s*\<\(const\|var\|begin\|repeat\|private\)\>'
-		" But only if this is another var in a list.
-		if this_codeline !~ '^\s*var\>'
+	" If the PREVIOUS LINE ended with these items, indent if not
+	" followed by "begin"
+	if prev_codeline =~ '\<\(\|else\|then\|do\)$' || prev_codeline =~ ':$'
+		if this_codeline !~ '^\s*begin\>'
 			return indnt + &shiftwidth
+		else
+			" If it does start with "begin" then keep the same indent
+			"return indnt + &shiftwidth
+			return indnt
 		endif
 	endif
 
-	" PREVIOUS-LINE BEGIN
-	" Indent code after a case statement begin
-	if prev_codeline =~ '\:\ begin\>'
+	" Inside a parameter list (i.e. a "(" without a ")"). ???? Considers
+	" only the line before the current one. TODO: Get it working for
+	" parameter lists longer than two lines.
+	if prev_codeline =~ '([^)]\+$'
 		return indnt + &shiftwidth
 	endif
 
-	" These words may have text before them on the line (hence the .*)
-	" but are followed by nothing. Always indent once only.
-	if prev_codeline =~ '^\(.*\|\s*\)\<\(object\|record\)\>$'
-		return indnt + &shiftwidth
+
+	" DECREASE INDENT
+
+	" Lines starting with "else", but not following line ending with
+	" "end".
+	if this_codeline =~ '^\s*else\>' && prev_codeline !~ '\<end$'
+		return indnt - &shiftwidth
 	endif
 
-	" If we just closed a bracket that started on a previous line, then
-	" unindent. But don't return yet -- we need to check for further
-	" unindentation (for end/until/else)
-	if prev_codeline =~ '^[^(]*[^*])'
-		let indnt = indnt - &shiftwidth
+	" Lines after a single-statement branch/loop.
+	" Two lines before ended in "then", "else", or "do"
+	" Previous line didn't end in "begin"
+	let prev2_codeline_num = s:GetPrevNonCommentLineNum( prev_codeline_num )
+	let prev2_codeline = getline( prev2_codeline_num )
+	if prev2_codeline =~ '\<\(then\|else\|do\)$' && prev_codeline !~ '\<begin$'
+		" If the next code line after a single statement branch/loop
+		" starts with "end", "except" or "finally", we need an
+		" additional unindentation.
+		if this_codeline =~ '^\s*\(end;\|except\|finally\|\)$'
+			" Note that we don't return from here.
+			return indnt - &shiftwidth - &shiftwidth
+		endif
+		return indnt - &shiftwidth
 	endif
 
-	" At the end of a block, we have to unindent both the current line
-	" (the "end" for instance) and the newly-created line.
-	if this_codeline =~ '^\s*\<\(end\|until\|else\)\>'
+	" Lines starting with "until" or "end". This rule must be overridden
+	" by the one for "end" after a single-statement branch/loop. In
+	" other words that rule should come before this one.
+	if this_codeline =~ '^\s*\(end\|until\)\>'
 		return indnt - &shiftwidth
 	endif
 
-	" If we have opened a bracket and it continues over one line,
-	" then indent once.
-	"
-	" RE = an opening bracket followed by any amount of anything other
-	" than a closing bracket and then the end-of-line.
-	"
-	" If we didn't include the end of line, this RE would match even
-	" closed brackets, since it would match everything up to the closing
-	" bracket.
-	"
-	" This test isn't clever enough to handle brackets inside strings or
-	" comments.
-	if prev_codeline =~ '([^*]\=[^)]*$'
+
+	" MISCELLANEOUS THINGS TO CATCH
+
+	" Most "begin"s will have been handled by now. Any remaining
+	" "begin"s on their own line should go in column 1.
+	if this_codeline =~ '^\s*begin$'
+		return 0
+	endif
+
+
+" ____________________________________________________________________
+" Object/Borland Pascal/Delphi Extensions
+"
+" Note that extended-pascal is handled here, unless it is simpler to
+" handle them in the standard-pascal section above.
+
+
+	" COLUMN 1 ALWAYS
+
+	" section headers at start of line.
+	if this_codeline =~ '^\s*\(interface\|implementation\|uses\|unit\)\>'
+		return 0
+	endif
+
+
+	" INDENT ONCE
+
+	" If the PREVIOUS LINE ended in these items, always indent.
+	if prev_codeline =~ '^\s*\(unit\|uses\|try\|except\|finally\|private\|protected\|public\|published\)$'
 		return indnt + &shiftwidth
 	endif
 
+	" ???? Indent "procedure" and "functions" if they appear within an
+	" class/object definition. But that means overriding standard-pascal
+	" rule where these words always go in column 1.
+
+
+	" UNINDENT ONCE
+
+	if this_codeline =~ '^\s*\(except\|finally\)$'
+		return indnt - &shiftwidth
+	endif
+
+	if this_codeline =~ '^\s*\(private\|protected\|public\|published\)$'
+		return indnt - &shiftwidth
+	endif
+
+
+" ____________________________________________________________________
+
+	" If nothing changed, return same indent.
 	return indnt
 endfunction
 
diff -Naur vim73.orig/runtime/indent/perl.vim vim73/runtime/indent/perl.vim
--- vim73.orig/runtime/indent/perl.vim	2010-08-09 03:51:45.000000000 +0000
+++ vim73/runtime/indent/perl.vim	2013-08-04 19:09:08.497283548 +0000
@@ -1,8 +1,9 @@
 " Vim indent file
-" Language:     Perl 5
-" Author:       Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl/tree/master
-" Last Change:  June 3, 2009
+" Language:      Perl 5
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   May 12, 2013
 
 " Suggestions and improvements by :
 "   Aaron J. Sherman (use syntax for hints)
@@ -11,9 +12,9 @@
 " TODO things that are not or not properly indented (yet) :
 " - Continued statements
 "     print "foo",
-"	"bar";
+"       "bar";
 "     print "foo"
-"	if bar();
+"       if bar();
 " - Multiline regular expressions (m//x)
 " (The following probably needs modifying the perl syntax file)
 " - qw() lists
@@ -34,15 +35,10 @@
     setlocal indentkeys+=0=EO
 endif
 
-" Only define the function once.
-if exists("*GetPerlIndent")
-    finish
-endif
-
 let s:cpo_save = &cpo
 set cpo-=C
 
-function GetPerlIndent()
+function! GetPerlIndent()
 
     " Get the line to be indented
     let cline = getline(v:lnum)
@@ -52,7 +48,7 @@
         return 0
     endif
 
-    " Don't reindent coments on first column
+    " Don't reindent comments on first column
     if cline =~ '^#.'
         return 0
     endif
@@ -124,7 +120,12 @@
     " Indent blocks enclosed by {}, (), or []
     if b:indent_use_syntax
         " Find a real opening brace
-        let bracepos = match(line, '[(){}\[\]]', matchend(line, '^\s*[)}\]]'))
+        " NOTE: Unlike Perl character classes, we do NOT need to escape the
+        " closing brackets with a backslash.  Doing so just puts a backslash
+        " in the character class and causes sorrow.  Instead, put the closing
+        " bracket as the first character in the class.
+        let braceclass = '[][(){}]'
+        let bracepos = match(line, braceclass, matchend(line, '^\s*[])}]'))
         while bracepos != -1
             let synid = synIDattr(synID(lnum, bracepos + 1, 0), "name")
             " If the brace is highlighted in one of those groups, indent it.
@@ -133,7 +134,7 @@
                         \ || synid == "perlMatchStartEnd"
                         \ || synid == "perlHereDoc"
                         \ || synid =~ "^perlFiledescStatement"
-                        \ || synid =~ '^perl\(Sub\|Block\)Fold'
+                        \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
                 let brace = strpart(line, bracepos, 1)
                 if brace == '(' || brace == '{' || brace == '['
                     let ind = ind + &sw
@@ -141,22 +142,22 @@
                     let ind = ind - &sw
                 endif
             endif
-            let bracepos = match(line, '[(){}\[\]]', bracepos + 1)
+            let bracepos = match(line, braceclass, bracepos + 1)
         endwhile
-        let bracepos = matchend(cline, '^\s*[)}\]]')
+        let bracepos = matchend(cline, '^\s*[])}]')
         if bracepos != -1
             let synid = synIDattr(synID(v:lnum, bracepos, 0), "name")
             if synid == ""
                         \ || synid == "perlMatchStartEnd"
-                        \ || synid =~ '^perl\(Sub\|Block\)Fold'
+                        \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
                 let ind = ind - &sw
             endif
         endif
     else
-        if line =~ '[{\[(]\s*\(#[^)}\]]*\)\=$'
+        if line =~ '[{[(]\s*\(#[^])}]*\)\=$'
             let ind = ind + &sw
         endif
-        if cline =~ '^\s*[)}\]]'
+        if cline =~ '^\s*[])}]'
             let ind = ind - &sw
         endif
     endif
diff -Naur vim73.orig/runtime/indent/perl6.vim vim73/runtime/indent/perl6.vim
--- vim73.orig/runtime/indent/perl6.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/perl6.vim	2013-08-04 19:09:08.497283548 +0000
@@ -1,12 +1,13 @@
 " Vim indent file
-" Language:     Perl 6
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2009-07-04
-" Contributors: Andy Lester <andy@petdance.com>
-"               Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
+" Language:      Perl 6
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-05-12
+" Contributors:  Andy Lester <andy@petdance.com>
+"                Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
 "
-" Adapted from Perl indent file by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
+" Adapted from indent/perl.vim by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
 
 " Suggestions and improvements by :
 "   Aaron J. Sherman (use syntax for hints)
@@ -46,15 +47,10 @@
     setlocal indentkeys+=0=EO
 endif
 
-" Only define the function once.
-if exists("*GetPerl6Indent")
-    finish
-endif
-
 let s:cpo_save = &cpo
 set cpo-=C
 
-function GetPerl6Indent()
+function! GetPerl6Indent()
 
     " Get the line to be indented
     let cline = getline(v:lnum)
diff -Naur vim73.orig/runtime/indent/php.vim vim73/runtime/indent/php.vim
--- vim73.orig/runtime/indent/php.vim	2010-07-30 20:32:16.000000000 +0000
+++ vim73/runtime/indent/php.vim	2013-08-04 19:09:08.500616871 +0000
@@ -2,21 +2,23 @@
 " Language:	PHP
 " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>
 " URL:		http://www.2072productions.com/vim/indent/php.vim
-" Last Change:	2010 Jully 26th
-" Newsletter:	http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php
-" Version:	1.33
+" Home:		https://github.com/2072/PHP-Indenting-for-VIm
+" Last Change:	2013 May 10th
+" Version:	1.37
 "
 "
-"  If you find a bug, please report it on GitHub:
-"	http://github.com/2072/PHP-Indenting-for-VIm/issues
-"  with an example of code that breaks the algorithm.
+"	Type :help php-indent for available options
 "
+"	A fully commented version of this file is available on github
 "
-"	Thanks a lot for using this script.
 "
+"  If you find a bug, please open a ticket on github.org
+"  ( https://github.com/2072/PHP-Indenting-for-VIm/issues ) with an example of
+"  code that breaks the algorithm.
 "
+
 " NOTE: This script must be used with PHP syntax ON and with the php syntax
-"	script by Lutz Eymers (http://www.ipdienste.net/data/php.vim ) or with the
+"	script by Lutz Eymers (http://www.isp.de/data/php.vim ) or with the
 "	script by Peter Hodge (http://www.vim.org/scripts/script.php?script_id=1571 )
 "	the later is bunbdled by default with Vim 7.
 "
@@ -26,7 +28,7 @@
 "	script will automatically put HereDoc end identifiers at col 1 if
 "	they are followed by a ';').
 "
-"
+
 " NOTE: If you are editing files in Unix file format and that (by accident)
 "	there are '\r' before new lines, this script won't be able to proceed
 "	correctly and will make many mistakes because it won't be able to match
@@ -38,8 +40,6 @@
 "	or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will
 "	silently remove them when VIM load this script (at each bufread).
 "
-" Options: See :help php-indent for available options.
-
 
 if exists("b:did_indent")
     finish
@@ -50,12 +50,19 @@
 let php_sync_method = 0
 
 
+
 if exists("PHP_default_indenting")
     let b:PHP_default_indenting = PHP_default_indenting * &sw
 else
     let b:PHP_default_indenting = 0
 endif
 
+if exists("PHP_outdentSLComments")
+    let b:PHP_outdentSLComments = PHP_outdentSLComments * &sw
+else
+    let b:PHP_outdentSLComments = 0
+endif
+
 if exists("PHP_BracesAtCodeLevel")
     let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel
 else
@@ -116,13 +123,20 @@
 
 if exists("*GetPhpIndent")
     call ResetPhpOptions()
-    finish
+    finish " XXX -- comment this line for easy dev
 endif
 
 let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'
 let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!'
 
 
+function! DebugPrintReturn(scriptLine)
+
+    echo "debug:" . a:scriptLine
+    call getchar()
+
+endfunction
+
 function! GetLastRealCodeLNum(startline) " {{{
 
     let lnum = a:startline
@@ -189,8 +203,6 @@
 	let b:InPHPcode_and_script = 0
     endif
 
-
-
     return lnum
 endfunction " }}}
 
@@ -198,11 +210,11 @@
 
     let line = getline(".")
 
-   if line =~ '\%(".*\)\@<=/\*\%(.*"\)\@=' || line =~ '\%(\%(//\|#\).*\)\@<=/\*'
-       return 1
-   else
-       return 0
-   endif
+    if line =~ "\\([\"']\\).*/\\*.*\\1" || line =~ '\%(//\|#\).*/\*'
+        return 1
+    else
+        return 0
+    endif
 endfun
 
 function! Skippmatch()	" {{{
@@ -314,7 +326,7 @@
     endif
 endfunction " }}}
 
-let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|else\)'
+let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|die\|else\)'
 let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|try\>\|catch\>\)'
 
 let s:autoresetoptions = 0
@@ -361,14 +373,12 @@
     if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast
 	if b:PHP_indentbeforelast
 	    let b:PHP_indentinghuge = 1
-	    echom 'Large indenting detected, speed optimizations engaged (v1.33)'
 	endif
 	let b:PHP_indentbeforelast = b:PHP_lastindented
     endif
 
     if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented
 	if b:PHP_indentinghuge
-	    echom 'Large indenting deactivated'
 	    let b:PHP_indentinghuge = 0
 	    let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
 	endif
@@ -425,7 +435,7 @@
 	else
 	    let b:InPHPcode = 0
 	    let b:UserIsTypingComment = 0
-	    let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>'
+	    let b:InPHPcode_tofind = s:PHP_startindenttag
 	endif
     endif "!b:InPHPcode_checked }}}
 
@@ -493,7 +503,9 @@
     endif
 
     " Indent successive // or # comment the same way the first is {{{
+    let addSpecial = 0
     if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
+	let addSpecial = b:PHP_outdentSLComments
 	if b:PHP_LastIndentedWasComment == 1
 	    return indent(real_PHP_lastindented)
 	endif
@@ -550,7 +562,7 @@
     endif
 
     if lnum == 0
-	return b:PHP_default_indenting
+	return b:PHP_default_indenting + addSpecial
     endif
 
 
@@ -577,17 +589,17 @@
     endif
 
 
-    if last_line =~ '[;}]'.endline && last_line !~ '^)' && last_line !~# s:defaultORcase
+    if last_line =~ '[;}]'.endline && last_line !~ '^[)\]]' && last_line !~# s:defaultORcase
 	if ind==b:PHP_default_indenting
-	    return b:PHP_default_indenting
+	    return b:PHP_default_indenting + addSpecial
 	elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline
-	    return b:PHP_CurrentIndentLevel
+	    return b:PHP_CurrentIndentLevel + addSpecial
 	endif
     endif
 
     let LastLineClosed = 0
 
-    let terminated = '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\)'.endline
+    let terminated = '\%(;\%(\s*\%(?>\|}\)\)\=\|<<<''\=\a\w*''\=$\|^\s*}\)'.endline
 
     let unstated   = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline
 
@@ -618,19 +630,23 @@
 	endwhile
 
     elseif last_line =~# unstated && cline !~ '^\s*);\='.endline
-	let ind = ind + &sw
-	return ind
+	let ind = ind + &sw " we indent one level further when the preceding line is not stated
+	return ind + addSpecial
 
-    elseif (ind != b:PHP_default_indenting || last_line =~ '^)' ) && last_line =~ terminated
+    elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated " Added || last_line =~ '^)' on 2007-12-30 (array indenting problem broke other things)
 	let previous_line = last_line
 	let last_line_num = lnum
 	let LastLineClosed = 1
 
 	while 1
-	    if previous_line =~ '^\s*}'
-		let last_line_num = FindOpenBracket(last_line_num)
+	    if previous_line =~ '^\s*}\|;\s*}'.endline " XXX
+
+		call cursor(last_line_num, 1)
+		call search('}\|;\s*}'.endline, 'W')
+		let oldLastLine = last_line_num
+		let last_line_num = searchpair('{', '', '}', 'bW', 'Skippmatch()')
 
-		if getline(last_line_num) =~ '^\s*{'
+		if oldLastLine == last_line_num || getline(last_line_num) =~ '^\s*{'
 		    let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
 		endif
 
@@ -674,7 +690,7 @@
 	    let ind = indent(last_match)
 	    let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
 
-	    return ind
+	    return ind + addSpecial
 	endif
     endif
 
@@ -693,7 +709,7 @@
     if !LastLineClosed
 
 
-	if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(]'.endline
+	if last_line =~# '[{(\[]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(]'.endline
 
 	    if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{'
 		let ind = ind + &sw
@@ -702,7 +718,7 @@
 	    if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1
 		let b:PHP_CurrentIndentLevel = ind
 
-		return ind
+		return ind + addSpecial
 	    endif
 
 	elseif last_line =~ '\S\+\s*),'.endline
@@ -712,22 +728,21 @@
 	    if openedparent != lnum
 		let ind = indent(openedparent)
 	    endif
-	
+
 	elseif last_line =~ '^\s*'.s:blockstart
 	    let ind = ind + &sw
 
 
-
-	elseif AntepenultimateLine =~ '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . s:defaultORcase
+	elseif AntepenultimateLine =~ '\%(;\%(\s*\%(?>\|}\)\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . s:defaultORcase
 	    let ind = ind + &sw
 	endif
 
     endif
 
-    if cline =~  '^\s*);\='
+    if cline =~  '^\s*[)\]];\='
 	let ind = ind - &sw
     endif
 
     let b:PHP_CurrentIndentLevel = ind
-    return ind
+    return ind + addSpecial
 endfunction
diff -Naur vim73.orig/runtime/indent/python.vim vim73/runtime/indent/python.vim
--- vim73.orig/runtime/indent/python.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/python.vim	2013-08-04 19:09:08.507283518 +0000
@@ -2,7 +2,7 @@
 " Language:		Python
 " Maintainer:		Bram Moolenaar <Bram@vim.org>
 " Original Author:	David Bustos <bustos@caltech.edu>
-" Last Change:		2006 Jun 18
+" Last Change:		2013 Jun 21
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -21,6 +21,8 @@
 if exists("*GetPythonIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Come here when loading the script the first time.
 
@@ -34,7 +36,7 @@
     if a:lnum > 1 && getline(a:lnum - 2) =~ '\\$'
       return indent(a:lnum - 1)
     endif
-    return indent(a:lnum - 1) + (exists("g:pyindent_continue") ? eval(g:pyindent_continue) : (&sw * 2))
+    return indent(a:lnum - 1) + (exists("g:pyindent_continue") ? eval(g:pyindent_continue) : (shiftwidth() * 2))
   endif
 
   " If the start of the line is in a string don't change the indent.
@@ -87,9 +89,9 @@
 	  \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
 	  \ . " =~ '\\(Comment\\|String\\)$'")
       if pp > 0
-	return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : &sw)
+	return indent(plnum) + (exists("g:pyindent_nested_paren") ? eval(g:pyindent_nested_paren) : shiftwidth())
       endif
-      return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (&sw * 2))
+      return indent(plnum) + (exists("g:pyindent_open_paren") ? eval(g:pyindent_open_paren) : (shiftwidth() * 2))
     endif
     if plnumstart == p
       return indent(plnum)
@@ -132,15 +134,15 @@
 
   " If the previous line ended with a colon, indent this line
   if pline =~ ':\s*$'
-    return plindent + &sw
+    return plindent + shiftwidth()
   endif
 
   " If the previous line was a stop-execution statement...
   if getline(plnum) =~ '^\s*\(break\|continue\|raise\|return\|pass\)\>'
     " See if the user has already dedented
-    if indent(a:lnum) > indent(plnum) - &sw
+    if indent(a:lnum) > indent(plnum) - shiftwidth()
       " If not, recommend one dedent
-      return indent(plnum) - &sw
+      return indent(plnum) - shiftwidth()
     endif
     " Otherwise, trust the user
     return -1
@@ -171,11 +173,11 @@
     endif
 
     " Or the user has already dedented
-    if indent(a:lnum) <= plindent - &sw
+    if indent(a:lnum) <= plindent - shiftwidth()
       return -1
     endif
 
-    return plindent - &sw
+    return plindent - shiftwidth()
   endif
 
   " When after a () construct we probably want to go back to the start line.
@@ -190,4 +192,7 @@
 
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2
diff -Naur vim73.orig/runtime/indent/r.vim vim73/runtime/indent/r.vim
--- vim73.orig/runtime/indent/r.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/indent/r.vim	2013-08-04 19:09:08.507283518 +0000
@@ -0,0 +1,492 @@
+" Vim indent file
+" Language:	R
+" Author:	Jakson Alves de Aquino <jalvesaq@gmail.com>
+" Last Change:	Fri Feb 15, 2013  08:11PM
+
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+    finish
+endif
+let b:did_indent = 1
+
+setlocal indentkeys=0{,0},:,!^F,o,O,e
+setlocal indentexpr=GetRIndent()
+
+" Only define the function once.
+if exists("*GetRIndent")
+    finish
+endif
+
+" Options to make the indentation more similar to Emacs/ESS:
+if !exists("g:r_indent_align_args")
+    let g:r_indent_align_args = 1
+endif
+if !exists("g:r_indent_ess_comments")
+    let g:r_indent_ess_comments = 0
+endif
+if !exists("g:r_indent_comment_column")
+    let g:r_indent_comment_column = 40
+endif
+if ! exists("g:r_indent_ess_compatible")
+    let g:r_indent_ess_compatible = 0
+endif
+
+function s:RDelete_quotes(line)
+    let i = 0
+    let j = 0
+    let line1 = ""
+    let llen = strlen(a:line)
+    while i < llen
+        if a:line[i] == '"'
+            let i += 1
+            let line1 = line1 . 's'
+            while !(a:line[i] == '"' && ((i > 1 && a:line[i-1] == '\' && a:line[i-2] == '\') || a:line[i-1] != '\')) && i < llen
+                let i += 1
+            endwhile
+            if a:line[i] == '"'
+                let i += 1
+            endif
+        else
+            if a:line[i] == "'"
+                let i += 1
+                let line1 = line1 . 's'
+                while !(a:line[i] == "'" && ((i > 1 && a:line[i-1] == '\' && a:line[i-2] == '\') || a:line[i-1] != '\')) && i < llen
+                    let i += 1
+                endwhile
+                if a:line[i] == "'"
+                    let i += 1
+                endif
+            else
+                if a:line[i] == "`"
+                    let i += 1
+                    let line1 = line1 . 's'
+                    while a:line[i] != "`" && i < llen
+                        let i += 1
+                    endwhile
+                    if a:line[i] == "`"
+                        let i += 1
+                    endif
+                endif
+            endif
+        endif
+        if i == llen
+            break
+        endif
+        let line1 = line1 . a:line[i]
+        let j += 1
+        let i += 1
+    endwhile
+    return line1
+endfunction
+
+" Convert foo(bar()) int foo()
+function s:RDelete_parens(line)
+    if s:Get_paren_balance(a:line, "(", ")") != 0
+        return a:line
+    endif
+    let i = 0
+    let j = 0
+    let line1 = ""
+    let llen = strlen(a:line)
+    while i < llen
+        let line1 = line1 . a:line[i]
+        if a:line[i] == '('
+            let nop = 1
+            while nop > 0 && i < llen
+                let i += 1
+                if a:line[i] == ')'
+                    let nop -= 1
+                else
+                    if a:line[i] == '('
+                        let nop += 1 
+                    endif
+                endif
+            endwhile
+            let line1 = line1 . a:line[i]
+        endif
+        let i += 1
+    endwhile
+    return line1
+endfunction
+
+function! s:Get_paren_balance(line, o, c)
+    let line2 = substitute(a:line, a:o, "", "g")
+    let openp = strlen(a:line) - strlen(line2)
+    let line3 = substitute(line2, a:c, "", "g")
+    let closep = strlen(line2) - strlen(line3)
+    return openp - closep
+endfunction
+
+function! s:Get_matching_brace(linenr, o, c, delbrace)
+    let line = SanitizeRLine(getline(a:linenr))
+    if a:delbrace == 1
+        let line = substitute(line, '{$', "", "")
+    endif
+    let pb = s:Get_paren_balance(line, a:o, a:c)
+    let i = a:linenr
+    while pb != 0 && i > 1
+        let i -= 1
+        let pb += s:Get_paren_balance(SanitizeRLine(getline(i)), a:o, a:c)
+    endwhile
+    return i
+endfunction
+
+" This function is buggy because there 'if's without 'else'
+" It must be rewritten relying more on indentation
+function! s:Get_matching_if(linenr, delif)
+"    let filenm = expand("%")
+"    call writefile([filenm], "/tmp/matching_if_" . a:linenr)
+    let line = SanitizeRLine(getline(a:linenr))
+    if a:delif
+        let line = substitute(line, "if", "", "g")
+    endif
+    let elsenr = 0
+    let i = a:linenr
+    let ifhere = 0
+    while i > 0
+        let line2 = substitute(line, '\<else\>', "xxx", "g")
+        let elsenr += strlen(line) - strlen(line2)
+        if line =~ '.*\s*if\s*()' || line =~ '.*\s*if\s*()'
+            let elsenr -= 1
+            if elsenr == 0
+                let ifhere = i
+                break
+            endif
+        endif
+        let i -= 1
+        let line = SanitizeRLine(getline(i))
+    endwhile
+    if ifhere
+        return ifhere
+    else
+        return a:linenr
+    endif
+endfunction
+
+function! s:Get_last_paren_idx(line, o, c, pb)
+    let blc = a:pb
+    let line = substitute(a:line, '\t', s:curtabstop, "g")
+    let theidx = -1
+    let llen = strlen(line)
+    let idx = 0
+    while idx < llen
+        if line[idx] == a:o
+            let blc -= 1
+            if blc == 0
+                let theidx = idx
+            endif
+        else
+            if line[idx] == a:c
+                let blc += 1
+            endif
+        endif
+        let idx += 1
+    endwhile
+    return theidx + 1
+endfunction
+
+" Get previous relevant line. Search back until getting a line that isn't
+" comment or blank
+function s:Get_prev_line(lineno)
+    let lnum = a:lineno - 1
+    let data = getline( lnum )
+    while lnum > 0 && (data =~ '^\s*#' || data =~ '^\s*$')
+        let lnum = lnum - 1
+        let data = getline( lnum )
+    endwhile
+    return lnum
+endfunction
+
+" This function is also used by r-plugin/common_global.vim
+" Delete from '#' to the end of the line, unless the '#' is inside a string.
+function SanitizeRLine(line)
+    let newline = s:RDelete_quotes(a:line)
+    let newline = s:RDelete_parens(newline)
+    let newline = substitute(newline, '#.*', "", "")
+    let newline = substitute(newline, '\s*$', "", "")
+    return newline
+endfunction
+
+function GetRIndent()
+
+    let clnum = line(".")    " current line
+
+    let cline = getline(clnum)
+    if cline =~ '^\s*#'
+        if g:r_indent_ess_comments == 1
+            if cline =~ '^\s*###'
+                return 0
+            endif
+            if cline !~ '^\s*##'
+                return g:r_indent_comment_column
+            endif
+        endif
+    endif
+
+    let cline = SanitizeRLine(cline)
+
+    if cline =~ '^\s*}' || cline =~ '^\s*}\s*)$'
+        let indline = s:Get_matching_brace(clnum, '{', '}', 1)
+        if indline > 0 && indline != clnum
+            let iline = SanitizeRLine(getline(indline))
+            if s:Get_paren_balance(iline, "(", ")") == 0 || iline =~ '(\s*{$'
+                return indent(indline)
+            else
+                let indline = s:Get_matching_brace(indline, '(', ')', 1)
+                return indent(indline)
+            endif
+        endif
+    endif
+
+    " Find the first non blank line above the current line
+    let lnum = s:Get_prev_line(clnum)
+    " Hit the start of the file, use zero indent.
+    if lnum == 0
+        return 0
+    endif
+
+    let line = SanitizeRLine(getline(lnum))
+
+    if &filetype == "rhelp"
+        if cline =~ '^\\dontshow{' || cline =~ '^\\dontrun{' || cline =~ '^\\donttest{' || cline =~ '^\\testonly{'
+            return 0
+        endif
+        if line =~ '^\\examples{' || line =~ '^\\usage{' || line =~ '^\\dontshow{' || line =~ '^\\dontrun{' || line =~ '^\\donttest{' || line =~ '^\\testonly{'
+            return 0
+        endif
+        if line =~ '^\\method{.*}{.*}(.*'
+            let line = substitute(line, '^\\method{\(.*\)}{.*}', '\1', "")
+        endif
+    endif
+
+    if cline =~ '^\s*{'
+        if g:r_indent_ess_compatible && line =~ ')$'
+            let nlnum = lnum
+            let nline = line
+            while s:Get_paren_balance(nline, '(', ')') < 0
+                let nlnum = s:Get_prev_line(nlnum)
+                let nline = SanitizeRLine(getline(nlnum)) . nline
+            endwhile
+            if nline =~ '^\s*function\s*(' && indent(nlnum) == &sw
+                return 0
+            endif
+        endif
+        if s:Get_paren_balance(line, "(", ")") == 0
+            return indent(lnum)
+        endif
+    endif
+
+    " line is an incomplete command:
+    if line =~ '\<\(if\|while\|for\|function\)\s*()$' || line =~ '\<else$' || line =~ '<-$'
+        return indent(lnum) + &sw
+    endif
+
+    " Deal with () and []
+
+    let pb = s:Get_paren_balance(line, '(', ')')
+
+    if line =~ '^\s*{$' || line =~ '(\s*{' || (pb == 0 && (line =~ '{$' || line =~ '(\s*{$'))
+        return indent(lnum) + &sw
+    endif
+
+    let bb = s:Get_paren_balance(line, '[', ']')
+
+    let s:curtabstop = repeat(' ', &tabstop)
+    if g:r_indent_align_args == 1
+
+        if pb == 0 && bb == 0 && (line =~ '.*[,&|\-\*+<>]$' || cline =~ '^\s*[,&|\-\*+<>]')
+            return indent(lnum)
+        endif
+
+        if pb > 0
+            if &filetype == "rhelp"
+                let ind = s:Get_last_paren_idx(line, '(', ')', pb)
+            else
+                let ind = s:Get_last_paren_idx(getline(lnum), '(', ')', pb)
+            endif
+            return ind
+        endif
+
+        if pb < 0 && line =~ '.*[,&|\-\*+<>]$'
+            let lnum = s:Get_prev_line(lnum)
+            while pb < 1 && lnum > 0
+                let line = SanitizeRLine(getline(lnum))
+                let line = substitute(line, '\t', s:curtabstop, "g")
+                let ind = strlen(line)
+                while ind > 0
+                    if line[ind] == ')'
+                        let pb -= 1
+                    else
+                        if line[ind] == '('
+                            let pb += 1
+                        endif
+                    endif
+                    if pb == 1
+                        return ind + 1
+                    endif
+                    let ind -= 1
+                endwhile
+                let lnum -= 1
+            endwhile
+            return 0
+        endif
+
+        if bb > 0
+            let ind = s:Get_last_paren_idx(getline(lnum), '[', ']', bb)
+            return ind
+        endif
+    endif
+
+    let post_block = 0
+    if line =~ '}$'
+        let lnum = s:Get_matching_brace(lnum, '{', '}', 0)
+        let line = SanitizeRLine(getline(lnum))
+        if lnum > 0 && line =~ '^\s*{'
+            let lnum = s:Get_prev_line(lnum)
+            let line = SanitizeRLine(getline(lnum))
+        endif
+        let pb = s:Get_paren_balance(line, '(', ')')
+        let post_block = 1
+    endif
+
+    let post_fun = 0
+    if pb < 0 && line !~ ')\s*[,&|\-\*+<>]$'
+        let post_fun = 1
+        while pb < 0 && lnum > 0
+            let lnum -= 1
+            let linepiece = SanitizeRLine(getline(lnum))
+            let pb += s:Get_paren_balance(linepiece, "(", ")")
+            let line = linepiece . line
+        endwhile
+        if line =~ '{$' && post_block == 0
+            return indent(lnum) + &sw
+        endif
+
+        " Now we can do some tests again
+        if cline =~ '^\s*{'
+            return indent(lnum)
+        endif
+        if post_block == 0
+            let newl = SanitizeRLine(line)
+            if newl =~ '\<\(if\|while\|for\|function\)\s*()$' || newl =~ '\<else$' || newl =~ '<-$'
+                return indent(lnum) + &sw
+            endif
+        endif
+    endif
+
+    if cline =~ '^\s*else'
+        if line =~ '<-\s*if\s*()'
+            return indent(lnum) + &sw
+        else
+            if line =~ '\<if\s*()'
+                return indent(lnum)
+            else
+                return indent(lnum) - &sw
+            endif
+        endif
+    endif
+
+    if bb < 0 && line =~ '.*]'
+        while bb < 0 && lnum > 0
+            let lnum -= 1
+            let linepiece = SanitizeRLine(getline(lnum))
+            let bb += s:Get_paren_balance(linepiece, "[", "]")
+            let line = linepiece . line
+        endwhile
+        let line = s:RDelete_parens(line)
+    endif
+
+    let plnum = s:Get_prev_line(lnum)
+    let ppost_else = 0
+    if plnum > 0
+        let pline = SanitizeRLine(getline(plnum))
+        let ppost_block = 0
+        if pline =~ '}$'
+            let ppost_block = 1
+            let plnum = s:Get_matching_brace(plnum, '{', '}', 0)
+            let pline = SanitizeRLine(getline(plnum))
+            if pline =~ '^\s*{$' && plnum > 0
+                let plnum = s:Get_prev_line(plnum)
+                let pline = SanitizeRLine(getline(plnum))
+            endif
+        endif
+
+        if pline =~ 'else$'
+            let ppost_else = 1
+            let plnum = s:Get_matching_if(plnum, 0)
+            let pline = SanitizeRLine(getline(plnum))
+        endif
+
+        if pline =~ '^\s*else\s*if\s*('
+            let pplnum = s:Get_prev_line(plnum)
+            let ppline = SanitizeRLine(getline(pplnum))
+            while ppline =~ '^\s*else\s*if\s*(' || ppline =~ '^\s*if\s*()\s*\S$'
+                let plnum = pplnum
+                let pline = ppline
+                let pplnum = s:Get_prev_line(plnum)
+                let ppline = SanitizeRLine(getline(pplnum))
+            endwhile
+            while ppline =~ '\<\(if\|while\|for\|function\)\s*()$' || ppline =~ '\<else$' || ppline =~ '<-$'
+                let plnum = pplnum
+                let pline = ppline
+                let pplnum = s:Get_prev_line(plnum)
+                let ppline = SanitizeRLine(getline(pplnum))
+            endwhile
+        endif
+
+        let ppb = s:Get_paren_balance(pline, '(', ')')
+        if ppb < 0 && (pline =~ ')\s*{$' || pline =~ ')$')
+            while ppb < 0 && plnum > 0
+                let plnum -= 1
+                let linepiece = SanitizeRLine(getline(plnum))
+                let ppb += s:Get_paren_balance(linepiece, "(", ")")
+                let pline = linepiece . pline
+            endwhile
+            let pline = s:RDelete_parens(pline)
+        endif
+    endif
+
+    let ind = indent(lnum)
+    let pind = indent(plnum)
+
+    if g:r_indent_align_args == 0 && pb != 0
+        let ind += pb * &sw
+        return ind
+    endif
+
+    if g:r_indent_align_args == 0 && bb != 0
+        let ind += bb * &sw
+        return ind
+    endif
+
+    if ind == pind || (ind == (pind  + &sw) && pline =~ '{$' && ppost_else == 0)
+        return ind
+    endif
+
+    let pline = getline(plnum)
+    let pbb = s:Get_paren_balance(pline, '[', ']')
+
+    while pind < ind && plnum > 0 && ppb == 0 && pbb == 0
+        let ind = pind
+        let plnum = s:Get_prev_line(plnum)
+        let pline = getline(plnum)
+        let ppb = s:Get_paren_balance(pline, '(', ')')
+        let pbb = s:Get_paren_balance(pline, '[', ']')
+        while pline =~ '^\s*else'
+            let plnum = s:Get_matching_if(plnum, 1)
+            let pline = getline(plnum)
+            let ppb = s:Get_paren_balance(pline, '(', ')')
+            let pbb = s:Get_paren_balance(pline, '[', ']')
+        endwhile
+        let pind = indent(plnum)
+        if ind == (pind  + &sw) && pline =~ '{$'
+            return ind
+        endif
+    endwhile
+
+    return ind
+
+endfunction
+
+" vim: sw=4
diff -Naur vim73.orig/runtime/indent/rst.vim vim73/runtime/indent/rst.vim
--- vim73.orig/runtime/indent/rst.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/rst.vim	2013-08-04 19:09:08.510616841 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:         reStructuredText Documentation Format
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-12-20
+" Latest Revision:  2011-08-03
 
 if exists("b:did_indent")
   finish
@@ -16,6 +16,9 @@
   finish
 endif
 
+let s:itemization_pattern = '^\s*[-*+]\s'
+let s:enumeration_pattern = '^\s*\%(\d\+\|#\)\.\s\+'
+
 function GetRSTIndent()
   let lnum = prevnonblank(v:lnum - 1)
   if lnum == 0
@@ -25,27 +28,30 @@
   let ind = indent(lnum)
   let line = getline(lnum)
 
-  if line =~ '^\s*[-*+]\s'
-    let ind = ind + 2
-  elseif line =~ '^\s*\d\+.\s'
-    let ind = ind + matchend(substitute(line, '^\s*', '', ''), '\d\+.\s\+')
+  if line =~ s:itemization_pattern
+    let ind += 2
+  elseif line =~ s:enumeration_pattern
+    let ind += matchend(line, s:enumeration_pattern)
   endif
 
   let line = getline(v:lnum - 1)
 
+  " Indent :FIELD: lines.  Don’t match if there is no text after the field or
+  " if the text ends with a sent-ender.
+   if line =~ '^:.\+:\s\{-1,\}\S.\+[^.!?:]$'
+     return matchend(line, '^:.\{-1,}:\s\+')
+   endif
+
   if line =~ '^\s*$'
     execute lnum
-    call search('^\s*\%([-*+]\s\|\d\+.\s\|\.\.\|$\)', 'bW')
+    call search('^\s*\%([-*+]\s\|\%(\d\+\|#\)\.\s\|\.\.\|$\)', 'bW')
     let line = getline('.')
-    if line =~ '^\s*[-*+]'
-      let ind = ind - 2
-    elseif line =~ '^\s*\d\+\.\s'
-      let ind = ind - matchend(substitute(line, '^\s*', '', ''),
-            \ '\d\+\.\s\+')
+    if line =~ s:itemization_pattern
+      let ind -= 2
+    elseif line =~ s:enumeration_pattern
+      let ind -= matchend(line, s:enumeration_pattern)
     elseif line =~ '^\s*\.\.'
-      let ind = ind - 3
-    else
-      let ind = ind
+      let ind -= 3
     endif
   endif
 
diff -Naur vim73.orig/runtime/indent/ruby.vim vim73/runtime/indent/ruby.vim
--- vim73.orig/runtime/indent/ruby.vim	2010-05-27 13:53:57.000000000 +0000
+++ vim73/runtime/indent/ruby.vim	2013-08-04 19:09:08.510616841 +0000
@@ -1,9 +1,7 @@
 " Vim indent file
 " Language:		Ruby
 " Maintainer:		Nikolai Weibull <now at bitwi.se>
-" Last Change:		2009 Dec 17
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 " 0. Initialization {{{1
@@ -18,9 +16,9 @@
 setlocal nosmartindent
 
 " Now, set up our indentation expression and keys that trigger it.
-setlocal indentexpr=GetRubyIndent()
+setlocal indentexpr=GetRubyIndent(v:lnum)
 setlocal indentkeys=0{,0},0),0],!^F,o,O,e
-setlocal indentkeys+==end,=elsif,=when,=ensure,=rescue,==begin,==end
+setlocal indentkeys+==end,=else,=elsif,=when,=ensure,=rescue,==begin,==end
 
 " Only define the function once.
 if exists("*GetRubyIndent")
@@ -33,8 +31,9 @@
 " 1. Variables {{{1
 " ============
 
-" Regex of syntax group names that are or delimit string or are comments.
-let s:syng_strcom = '\<ruby\%(String\|StringEscape\|ASCIICode' .
+" Regex of syntax group names that are or delimit strings/symbols or are comments.
+let s:syng_strcom = '\<ruby\%(Regexp\|RegexpDelimiter\|RegexpEscape' .
+      \ '\|Symbol\|String\|StringDelimiter\|StringEscape\|ASCIICode' .
       \ '\|Interpolation\|NoInterpolation\|Comment\|Documentation\)\>'
 
 " Regex of syntax group names that are strings.
@@ -43,7 +42,7 @@
 
 " Regex of syntax group names that are strings or documentation.
 let s:syng_stringdoc =
-  \'\<ruby\%(String\|Interpolation\|NoInterpolation\|StringEscape\|Documentation\)\>'
+      \'\<ruby\%(String\|Interpolation\|NoInterpolation\|StringEscape\|Documentation\)\>'
 
 " Expression used to check whether we should skip a match with searchpair().
 let s:skip_expr =
@@ -52,45 +51,60 @@
 " Regex used for words that, at the start of a line, add a level of indent.
 let s:ruby_indent_keywords = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
       \ '\|while\|until\|else\|elsif\|case\|when\|unless\|begin\|ensure' .
-      \ '\|rescue\)\>' .
-      \ '\|\%([*+/,=-]\|<<\|>>\|:\s\)\s*\zs' .
-      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\)\>'
+      \ '\|rescue\):\@!\>' .
+      \ '\|\%([=,*/%+-]\|<<\|>>\|:\s\)\s*\zs' .
+      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\):\@!\>'
 
 " Regex used for words that, at the start of a line, remove a level of indent.
 let s:ruby_deindent_keywords =
-      \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\)\>'
+      \ '^\s*\zs\<\%(ensure\|else\|rescue\|elsif\|when\|end\):\@!\>'
 
 " Regex that defines the start-match for the 'end' keyword.
 "let s:end_start_regex = '\%(^\|[^.]\)\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\|do\)\>'
 " TODO: the do here should be restricted somewhat (only at end of line)?
-let s:end_start_regex = '^\s*\zs\<\%(module\|class\|def\|if\|for' .
-      \ '\|while\|until\|case\|unless\|begin\)\>' .
-      \ '\|\%([*+/,=-]\|<<\|>>\|:\s\)\s*\zs' .
-      \    '\<\%(if\|for\|while\|until\|case\|unless\|begin\)\>' .
-      \ '\|\<do\>'
+let s:end_start_regex =
+      \ '\C\%(^\s*\|[=,*/%+\-|;{]\|<<\|>>\|:\s\)\s*\zs' .
+      \ '\<\%(module\|class\|def\|if\|for\|while\|until\|case\|unless\|begin\):\@!\>' .
+      \ '\|\%(^\|[^.:@$]\)\@<=\<do:\@!\>'
 
 " Regex that defines the middle-match for the 'end' keyword.
-let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue\>\|when\|elsif\)\>'
+let s:end_middle_regex = '\<\%(ensure\|else\|\%(\%(^\|;\)\s*\)\@<=\<rescue:\@!\>\|when\|elsif\):\@!\>'
 
 " Regex that defines the end-match for the 'end' keyword.
-let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end\>'
+let s:end_end_regex = '\%(^\|[^.:@$]\)\@<=\<end:\@!\>'
 
 " Expression used for searchpair() call for finding match for 'end' keyword.
 let s:end_skip_expr = s:skip_expr .
       \ ' || (expand("<cword>") == "do"' .
-      \ ' && getline(".") =~ "^\\s*\\<\\(while\\|until\\|for\\)\\>")'
+      \ ' && getline(".") =~ "^\\s*\\<\\(while\\|until\\|for\\):\\@!\\>")'
 
 " Regex that defines continuation lines, not including (, {, or [.
-let s:continuation_regex = '\%([\\*+/.,:]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+let s:non_bracket_continuation_regex = '\%([\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
 
 " Regex that defines continuation lines.
 " TODO: this needs to deal with if ...: and so on
-let s:continuation_regex2 =
-      \ '\%([\\*+/.,:({[]\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+let s:continuation_regex =
+      \ '\%(%\@<![({[\\.,:*/%+]\|\<and\|\<or\|\%(<%\)\@<![=-]\|\W[|&?]\|||\|&&\)\s*\%(#.*\)\=$'
+
+" Regex that defines bracket continuations
+let s:bracket_continuation_regex = '%\@<!\%([({[]\)\s*\%(#.*\)\=$'
+
+" Regex that defines the first part of a splat pattern
+let s:splat_regex = '[[,(]\s*\*\s*\%(#.*\)\=$'
 
 " Regex that defines blocks.
+"
+" Note that there's a slight problem with this regex and s:continuation_regex.
+" Code like this will be matched by both:
+"
+"   method_call do |(a, b)|
+"
+" The reason is that the pipe matches a hanging "|" operator.
+"
 let s:block_regex =
-      \ '\%(\<do\>\|{\)\s*\%(|\%([*@]\=\h\w*,\=\s*\)\%(,\s*[*@]\=\h\w*\)*|\)\=\s*\%(#.*\)\=$'
+      \ '\%(\<do:\@!\>\|%\@<!{\)\s*\%(|\s*(*\s*\%([*@&]\=\h\w*,\=\s*\)\%(,\s*(*\s*[*@&]\=\h\w*\s*)*\s*\)*|\)\=\s*\%(#.*\)\=$'
+
+let s:block_continuation_regex = '^\s*[^])}\t ].*'.s:block_regex
 
 " 2. Auxiliary Functions {{{1
 " ======================
@@ -110,6 +124,11 @@
   return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_stringdoc
 endfunction
 
+" Check if the character at lnum:col is inside a string delimiter
+function s:IsInStringDelimiter(lnum, col)
+  return synIDattr(synID(a:lnum, a:col, 1), 'name') == 'rubyStringDelimiter'
+endfunction
+
 " Find line above 'lnum' that isn't empty, in a comment, or in a string.
 function s:PrevNonBlankNonString(lnum)
   let in_block = 0
@@ -118,16 +137,16 @@
     " Go in and out of blocks comments as necessary.
     " If the line isn't empty (with opt. comment) or in a string, end search.
     let line = getline(lnum)
-    if line =~ '^=begin$'
+    if line =~ '^=begin'
       if in_block
-	let in_block = 0
+        let in_block = 0
       else
-	break
+        break
       endif
-    elseif !in_block && line =~ '^=end$'
+    elseif !in_block && line =~ '^=end'
       let in_block = 1
     elseif !in_block && line !~ '^\s*#.*$' && !(s:IsInStringOrComment(lnum, 1)
-	  \ && s:IsInStringOrComment(lnum, strlen(line)))
+          \ && s:IsInStringOrComment(lnum, strlen(line)))
       break
     endif
     let lnum = prevnonblank(lnum - 1)
@@ -139,42 +158,144 @@
 function s:GetMSL(lnum)
   " Start on the line we're at and use its indent.
   let msl = a:lnum
+  let msl_body = getline(msl)
   let lnum = s:PrevNonBlankNonString(a:lnum - 1)
   while lnum > 0
     " If we have a continuation line, or we're in a string, use line as MSL.
     " Otherwise, terminate search as we have found our MSL already.
     let line = getline(lnum)
-    let col = match(line, s:continuation_regex2) + 1
-    if (col > 0 && !s:IsInStringOrComment(lnum, col))
-	  \ || s:IsInString(lnum, strlen(line))
+
+    if s:Match(lnum, s:splat_regex)
+      " If the above line looks like the "*" of a splat, use the current one's
+      " indentation.
+      "
+      " Example:
+      "   Hash[*
+      "     method_call do
+      "       something
+      "
+      return msl
+    elseif s:Match(line, s:non_bracket_continuation_regex) &&
+          \ s:Match(msl, s:non_bracket_continuation_regex)
+      " If the current line is a non-bracket continuation and so is the
+      " previous one, keep its indent and continue looking for an MSL.
+      "
+      " Example:
+      "   method_call one,
+      "     two,
+      "     three
+      "
       let msl = lnum
+    elseif s:Match(lnum, s:non_bracket_continuation_regex) &&
+          \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+      " If the current line is a bracket continuation or a block-starter, but
+      " the previous is a non-bracket one, respect the previous' indentation,
+      " and stop here.
+      "
+      " Example:
+      "   method_call one,
+      "     two {
+      "     three
+      "
+      return lnum
+    elseif s:Match(lnum, s:bracket_continuation_regex) &&
+          \ (s:Match(msl, s:bracket_continuation_regex) || s:Match(msl, s:block_continuation_regex))
+      " If both lines are bracket continuations (the current may also be a
+      " block-starter), use the current one's and stop here
+      "
+      " Example:
+      "   method_call(
+      "     other_method_call(
+      "       foo
+      return msl
+    elseif s:Match(lnum, s:block_regex) &&
+          \ !s:Match(msl, s:continuation_regex) &&
+          \ !s:Match(msl, s:block_continuation_regex)
+      " If the previous line is a block-starter and the current one is
+      " mostly ordinary, use the current one as the MSL.
+      "
+      " Example:
+      "   method_call do
+      "     something
+      "     something_else
+      return msl
     else
-      break
+      let col = match(line, s:continuation_regex) + 1
+      if (col > 0 && !s:IsInStringOrComment(lnum, col))
+            \ || s:IsInString(lnum, strlen(line))
+        let msl = lnum
+      else
+        break
+      endif
     endif
+
+    let msl_body = getline(msl)
     let lnum = s:PrevNonBlankNonString(lnum - 1)
   endwhile
   return msl
 endfunction
 
 " Check if line 'lnum' has more opening brackets than closing ones.
-function s:LineHasOpeningBrackets(lnum)
-  let open_0 = 0
-  let open_2 = 0
-  let open_4 = 0
+function s:ExtraBrackets(lnum)
+  let opening = {'parentheses': [], 'braces': [], 'brackets': []}
+  let closing = {'parentheses': [], 'braces': [], 'brackets': []}
+
   let line = getline(a:lnum)
-  let pos = match(line, '[][(){}]', 0)
+  let pos  = match(line, '[][(){}]', 0)
+
+  " Save any encountered opening brackets, and remove them once a matching
+  " closing one has been found. If a closing bracket shows up that doesn't
+  " close anything, save it for later.
   while pos != -1
     if !s:IsInStringOrComment(a:lnum, pos + 1)
-      let idx = stridx('(){}[]', line[pos])
-      if idx % 2 == 0
-	let open_{idx} = open_{idx} + 1
-      else
-	let open_{idx - 1} = open_{idx - 1} - 1
+      if line[pos] == '('
+        call add(opening.parentheses, {'type': '(', 'pos': pos})
+      elseif line[pos] == ')'
+        if empty(opening.parentheses)
+          call add(closing.parentheses, {'type': ')', 'pos': pos})
+        else
+          let opening.parentheses = opening.parentheses[0:-2]
+        endif
+      elseif line[pos] == '{'
+        call add(opening.braces, {'type': '{', 'pos': pos})
+      elseif line[pos] == '}'
+        if empty(opening.braces)
+          call add(closing.braces, {'type': '}', 'pos': pos})
+        else
+          let opening.braces = opening.braces[0:-2]
+        endif
+      elseif line[pos] == '['
+        call add(opening.brackets, {'type': '[', 'pos': pos})
+      elseif line[pos] == ']'
+        if empty(opening.brackets)
+          call add(closing.brackets, {'type': ']', 'pos': pos})
+        else
+          let opening.brackets = opening.brackets[0:-2]
+        endif
       endif
     endif
+
     let pos = match(line, '[][(){}]', pos + 1)
   endwhile
-  return (open_0 > 0) . (open_2 > 0) . (open_4 > 0)
+
+  " Find the rightmost brackets, since they're the ones that are important in
+  " both opening and closing cases
+  let rightmost_opening = {'type': '(', 'pos': -1}
+  let rightmost_closing = {'type': ')', 'pos': -1}
+
+  for opening in opening.parentheses + opening.braces + opening.brackets
+    if opening.pos > rightmost_opening.pos
+      let rightmost_opening = opening
+    endif
+  endfor
+
+  for closing in closing.parentheses + closing.braces + closing.brackets
+    if closing.pos > rightmost_closing.pos
+      let rightmost_closing = closing
+    endif
+  endfor
+
+  return [rightmost_opening, rightmost_closing]
 endfunction
 
 function s:Match(lnum, regex)
@@ -195,32 +316,35 @@
 " 3. GetRubyIndent Function {{{1
 " =========================
 
-function GetRubyIndent()
+function GetRubyIndent(...)
   " 3.1. Setup {{{2
   " ----------
 
-  " Set up variables for restoring position in file.  Could use v:lnum here.
+  " For the current line, use the first argument if given, else v:lnum
+  let clnum = a:0 ? a:1 : v:lnum
+
+  " Set up variables for restoring position in file.  Could use clnum here.
   let vcol = col('.')
 
   " 3.2. Work on the current line {{{2
   " -----------------------------
 
   " Get the current line.
-  let line = getline(v:lnum)
+  let line = getline(clnum)
   let ind = -1
 
   " If we got a closing bracket on an empty line, find its match and indent
   " according to it.  For parentheses we indent to its column - 1, for the
   " others we indent to the containing line's MSL's level.  Return -1 if fail.
   let col = matchend(line, '^\s*[]})]')
-  if col > 0 && !s:IsInStringOrComment(v:lnum, col)
-    call cursor(v:lnum, col)
+  if col > 0 && !s:IsInStringOrComment(clnum, col)
+    call cursor(clnum, col)
     let bs = strpart('(){}[]', stridx(')}]', line[col - 1]) * 2, 2)
     if searchpair(escape(bs[0], '\['), '', bs[1], 'bW', s:skip_expr) > 0
       if line[col-1]==')' && col('.') != col('$') - 1
-	let ind = virtcol('.')-1
+        let ind = virtcol('.') - 1
       else
-	let ind = indent(s:GetMSL(line('.')))
+        let ind = indent(s:GetMSL(line('.')))
       endif
     endif
     return ind
@@ -233,35 +357,47 @@
 
   " If we have a deindenting keyword, find its match and indent to its level.
   " TODO: this is messy
-  if s:Match(v:lnum, s:ruby_deindent_keywords)
-    call cursor(v:lnum, 1)
+  if s:Match(clnum, s:ruby_deindent_keywords)
+    call cursor(clnum, 1)
     if searchpair(s:end_start_regex, s:end_middle_regex, s:end_end_regex, 'bW',
-	    \ s:end_skip_expr) > 0
-      let line = getline('.')
+          \ s:end_skip_expr) > 0
+      let msl  = s:GetMSL(line('.'))
+      let line = getline(line('.'))
+
       if strpart(line, 0, col('.') - 1) =~ '=\s*$' &&
-       \ strpart(line, col('.') - 1, 2) !~ 'do'
-	let ind = virtcol('.') - 1
+            \ strpart(line, col('.') - 1, 2) !~ 'do'
+        let ind = virtcol('.') - 1
+      elseif getline(msl) =~ '=\s*\(#.*\)\=$'
+        let ind = indent(line('.'))
       else
-	let ind = indent('.')
+        let ind = indent(msl)
       endif
     endif
     return ind
   endif
 
   " If we are in a multi-line string or line-comment, don't do anything to it.
-  if s:IsInStringOrDocumentation(v:lnum, matchend(line, '^\s*') + 1)
+  if s:IsInStringOrDocumentation(clnum, matchend(line, '^\s*') + 1)
     return indent('.')
   endif
 
+  " If we are at the closing delimiter of a "<<" heredoc-style string, set the
+  " indent to 0.
+  if line =~ '^\k\+\s*$'
+        \ && s:IsInStringDelimiter(clnum, 1)
+        \ && search('\V<<'.line, 'nbW') > 0
+    return 0
+  endif
+
   " 3.3. Work on the previous line. {{{2
   " -------------------------------
 
   " Find a non-blank, non-multi-line string line above the current line.
-  let lnum = s:PrevNonBlankNonString(v:lnum - 1)
+  let lnum = s:PrevNonBlankNonString(clnum - 1)
 
   " If the line is empty and inside a string, use the previous line.
-  if line =~ '^\s*$' && lnum != prevnonblank(v:lnum - 1)
-    return indent(prevnonblank(v:lnum))
+  if line =~ '^\s*$' && lnum != prevnonblank(clnum - 1)
+    return indent(prevnonblank(clnum))
   endif
 
   " At the start of the file use zero indent.
@@ -269,7 +405,7 @@
     return 0
   endif
 
-  " Set up variables for current line.
+  " Set up variables for the previous line.
   let line = getline(lnum)
   let ind = indent(lnum)
 
@@ -278,20 +414,42 @@
     return indent(s:GetMSL(lnum)) + &sw
   endif
 
-  " If the previous line contained an opening bracket, and we are still in it,
-  " add indent depending on the bracket type.
-  if line =~ '[[({]'
-    let counts = s:LineHasOpeningBrackets(lnum)
-    if counts[0] == '1' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
-      if col('.') + 1 == col('$')
-	return ind + &sw
+  " If the previous line ended with the "*" of a splat, add a level of indent
+  if line =~ s:splat_regex
+    return indent(lnum) + &sw
+  endif
+
+  " If the previous line contained unclosed opening brackets and we are still
+  " in them, find the rightmost one and add indent depending on the bracket
+  " type.
+  "
+  " If it contained hanging closing brackets, find the rightmost one, find its
+  " match and indent according to that.
+  if line =~ '[[({]' || line =~ '[])}]\s*\%(#.*\)\=$'
+    let [opening, closing] = s:ExtraBrackets(lnum)
+
+    if opening.pos != -1
+      if opening.type == '(' && searchpair('(', '', ')', 'bW', s:skip_expr) > 0
+        if col('.') + 1 == col('$')
+          return ind + &sw
+        else
+          return virtcol('.')
+        endif
       else
-	return virtcol('.')
+        let nonspace = matchend(line, '\S', opening.pos + 1) - 1
+        return nonspace > 0 ? nonspace : ind + &sw
+      endif
+    elseif closing.pos != -1
+      call cursor(lnum, closing.pos + 1)
+      normal! %
+
+      if s:Match(line('.'), s:ruby_indent_keywords)
+        return indent('.') + &sw
+      else
+        return indent('.')
       endif
-    elseif counts[1] == '1' || counts[2] == '1'
-      return ind + &sw
     else
-      call cursor(v:lnum, vcol)
+      call cursor(clnum, vcol)
     end
   endif
 
@@ -301,12 +459,12 @@
   if col > 0
     call cursor(lnum, col)
     if searchpair(s:end_start_regex, '', s:end_end_regex, 'bW',
-		\ s:end_skip_expr) > 0
+          \ s:end_skip_expr) > 0
       let n = line('.')
       let ind = indent('.')
       let msl = s:GetMSL(n)
       if msl != n
-	let ind = indent(msl)
+        let ind = indent(msl)
       end
       return ind
     endif
@@ -316,7 +474,6 @@
   if col > 0
     call cursor(lnum, col)
     let ind = virtcol('.') - 1 + &sw
-"    let ind = indent(lnum) + &sw
     " TODO: make this better (we need to count them) (or, if a searchpair
     " fails, we know that something is lacking an end and thus we indent a
     " level
@@ -336,7 +493,7 @@
   " If the previous line wasn't a MSL and is continuation return its indent.
   " TODO: the || s:IsInString() thing worries me a bit.
   if p_lnum != lnum
-    if s:Match(p_lnum,s:continuation_regex)||s:IsInString(p_lnum,strlen(line))
+    if s:Match(p_lnum, s:non_bracket_continuation_regex) || s:IsInString(p_lnum,strlen(line))
       return ind
     endif
   endif
@@ -356,13 +513,15 @@
     return ind
   endif
 
-  " If the previous line ended with [*+/.-=], indent one extra level.
-  if s:Match(lnum, s:continuation_regex)
+  " If the previous line ended with [*+/.,-=], but wasn't a block ending or a
+  " closing bracket, indent one extra level.
+  if s:Match(lnum, s:non_bracket_continuation_regex) && !s:Match(lnum, '^\s*\([\])}]\|end\)')
     if lnum == p_lnum
       let ind = msl_ind + &sw
     else
       let ind = msl_ind
     endif
+    return ind
   endif
 
   " }}}2
@@ -375,4 +534,4 @@
 let &cpo = s:cpo_save
 unlet s:cpo_save
 
-" vim:set sw=2 sts=2 ts=8 noet:
+" vim:set sw=2 sts=2 ts=8 et:
diff -Naur vim73.orig/runtime/indent/sass.vim vim73/runtime/indent/sass.vim
--- vim73.orig/runtime/indent/sass.vim	2010-05-21 09:55:50.000000000 +0000
+++ vim73/runtime/indent/sass.vim	2013-08-04 19:09:08.513950164 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Sass
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists("b:did_indent")
   finish
@@ -17,7 +17,8 @@
   finish
 endif
 
-let s:property = '^\s*:\|^\s*[[:alnum:]-]\+\%(:\|\s*=\)'
+let s:property = '^\s*:\|^\s*[[:alnum:]#{}-]\+\%(:\|\s*=\)'
+let s:extend = '^\s*\%(@extend\|@include\|+\)'
 
 function! GetSassIndent()
   let lnum = prevnonblank(v:lnum-1)
@@ -27,7 +28,7 @@
   let line = substitute(line,'^\s\+','','')
   let indent = indent(lnum)
   let cindent = indent(v:lnum)
-  if line !~ s:property && cline =~ s:property
+  if line !~ s:property && line !~ s:extend && cline =~ s:property
     return indent + &sw
   "elseif line =~ s:property && cline !~ s:property
     "return indent - &sw
diff -Naur vim73.orig/runtime/indent/sdl.vim vim73/runtime/indent/sdl.vim
--- vim73.orig/runtime/indent/sdl.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/sdl.vim	2013-08-04 19:09:08.517283488 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	SDL
-" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
-" Last Change:	2001 Sep 17
+" Maintainer:	Michael Piefel <entwurf@piefel.de>
+" Last Change:	10 December 2011
 
 " Shamelessly stolen from the Vim-Script indent file
 
@@ -19,7 +19,8 @@
 "  finish
 endif
 
-set cpo-=C
+let s:cpo_save = &cpo
+set cpo&vim
 
 function! GetSDLIndent()
   " Find a non-blank line above the current line.
@@ -72,7 +73,7 @@
 
   " Systems and packages are always in column 0
   if getline(v:lnum) =~? '^\s*\(\(end\)\=system\|\(end\)\=package\)'
-    return 0;
+    return 0
   endif
 
   " Put each end* where the corresponding begin was
@@ -86,4 +87,7 @@
   return ind
 endfunction
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:sw=2
diff -Naur vim73.orig/runtime/indent/sqlanywhere.vim vim73/runtime/indent/sqlanywhere.vim
--- vim73.orig/runtime/indent/sqlanywhere.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/sqlanywhere.vim	2013-08-04 19:09:08.520616811 +0000
@@ -1,8 +1,8 @@
 " Vim indent file
 " Language:    SQL
-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: Mon Apr 02 2007 9:13:47 AM
-" Version:     1.5
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2012 Dec 06
+" Version:     3.0
 " Download:    http://vim.sourceforge.net/script.php?script_id=495
 
 " Notes:
@@ -18,6 +18,17 @@
 " Known Issues:
 "    The Oracle MERGE statement does not have an end tag associated with
 "    it, this can leave the indent hanging to the right one too many.
+"
+" History:
+"    3.0 (Dec 2012)
+"        Added cpo check
+"
+"    2.0
+"        Added the FOR keyword to SQLBlockStart to handle (Alec Tica):
+"            for i in 1..100 loop
+"              |<-- I expect to have indentation here
+"            end loop;
+"
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -48,14 +59,16 @@
 if exists("*GetSQLIndent")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " List of all the statements that start a new block.
 " These are typically words that start a line.
 " IS is excluded, since it is difficult to determine when the
 " ending block is (especially for procedures/functions).
 let s:SQLBlockStart = '^\s*\%('.
-            \ 'if\|else\|elseif\|elsif\|'.
-                \ 'while\|loop\|do\|'.
+                \ 'if\|else\|elseif\|elsif\|'.
+                \ 'while\|loop\|do\|for\|'.
                 \ 'begin\|'.
                 \ 'case\|when\|merge\|exception'.
                 \ '\)\>'
@@ -64,7 +77,7 @@
 " The indent level is also based on unmatched paranethesis
 " If a line has an extra "(" increase the indent
 " If a line has an extra ")" decrease the indent
-function s:CountUnbalancedParan( line, paran_to_check )
+function! s:CountUnbalancedParan( line, paran_to_check )
     let l = a:line
     let lp = substitute(l, '[^(]', '', 'g')
     let l = a:line
@@ -86,7 +99,7 @@
 endfunction
 
 " Unindent commands based on previous indent level
-function s:CheckToIgnoreRightParan( prev_lnum, num_levels )
+function! s:CheckToIgnoreRightParan( prev_lnum, num_levels )
     let lnum = a:prev_lnum
     let line = getline(lnum)
     let ends = 0
@@ -149,7 +162,7 @@
 "         something;
 "    WHEN ...
 " Should return indent level of exception.
-function s:GetStmtStarterIndent( keyword, curr_lnum )
+function! s:GetStmtStarterIndent( keyword, curr_lnum )
     let lnum  = a:curr_lnum
 
     " Default - reduce indent by 1
@@ -191,7 +204,7 @@
 
 
 " Check if the line is a comment
-function s:IsLineComment(lnum)
+function! s:IsLineComment(lnum)
     let rc = synIDattr(
                 \ synID(a:lnum,
                 \     match(getline(a:lnum), '\S')+1, 0)
@@ -203,7 +216,7 @@
 
 
 " Check if the column is a comment
-function s:IsColComment(lnum, cnum)
+function! s:IsColComment(lnum, cnum)
     let rc = synIDattr(synID(a:lnum, a:cnum, 0), "name")
                 \           =~? "comment"
 
@@ -213,7 +226,7 @@
 
 " Instead of returning a column position, return
 " an appropriate value as a factor of shiftwidth.
-function s:ModuloIndent(ind)
+function! s:ModuloIndent(ind)
     let ind = a:ind
 
     if ind > 0
@@ -229,7 +242,7 @@
 
 
 " Find correct indent of a new line based upon the previous line
-function GetSQLIndent()
+function! GetSQLIndent()
     let lnum = v:lnum
     let ind = indent(lnum)
 
@@ -240,35 +253,27 @@
     "     return ind
     " endif
 
-    " while 1
-        " Get previous non-blank line
-        let prevlnum = prevnonblank(lnum - 1)
-        if prevlnum <= 0
-            return ind
-        endif
+    " Get previous non-blank line
+    let prevlnum = prevnonblank(lnum - 1)
+    if prevlnum <= 0
+        return ind
+    endif
 
-        if s:IsLineComment(prevlnum) == 1
-            if getline(v:lnum) =~ '^\s*\*'
-                let ind = s:ModuloIndent(indent(prevlnum))
-                return ind + 1
-            endif
-            " If the previous line is a comment, then return -1
-            " to tell Vim to use the formatoptions setting to determine
-            " the indent to use
-            " But only if the next line is blank.  This would be true if
-            " the user is typing, but it would not be true if the user
-            " is reindenting the file
-            if getline(v:lnum) =~ '^\s*$'
-                return -1
-            endif
+    if s:IsLineComment(prevlnum) == 1
+        if getline(v:lnum) =~ '^\s*\*'
+            let ind = s:ModuloIndent(indent(prevlnum))
+            return ind + 1
+        endif
+        " If the previous line is a comment, then return -1
+        " to tell Vim to use the formatoptions setting to determine
+        " the indent to use
+        " But only if the next line is blank.  This would be true if
+        " the user is typing, but it would not be true if the user
+        " is reindenting the file
+        if getline(v:lnum) =~ '^\s*$'
+            return -1
         endif
-
-    "     let prevline = getline(prevlnum)
-    "     if prevline !~ '^\s*$'
-    "         " echom 'previous non blank - break: ' . prevline
-    "         break
-    "     endif
-    " endwhile
+    endif
 
     " echom 'PREVIOUS INDENT: ' . indent(prevlnum) . '  LINE: ' . getline(prevlnum)
 
@@ -382,4 +387,7 @@
     return s:ModuloIndent(ind)
 endfunction
 
-" vim:sw=4:
+"  Restore:
+let &cpo= s:keepcpo
+unlet s:keepcpo
+" vim: ts=4 fdm=marker sw=4
diff -Naur vim73.orig/runtime/indent/tcsh.vim vim73/runtime/indent/tcsh.vim
--- vim73.orig/runtime/indent/tcsh.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/tcsh.vim	2013-08-04 19:09:08.523950134 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:		C-shell (tcsh)
-" Maintainer:		Gautam Iyer <gautam@math.uchicago.edu>
-" Last Modified:	Sat 16 Jun 2007 04:27:45 PM PDT
+" Maintainer:		GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
+" Last Modified:	Sat 10 Dec 2011 09:23:00 AM EST
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -18,8 +18,6 @@
     finish
 endif
 
-set cpoptions-=C
-
 function TcshGetIndent()
     " Find a non-blank line above the current line.
     let lnum = prevnonblank(v:lnum - 1)
diff -Naur vim73.orig/runtime/indent/tex.vim vim73/runtime/indent/tex.vim
--- vim73.orig/runtime/indent/tex.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/indent/tex.vim	2013-08-04 19:09:08.523950134 +0000
@@ -0,0 +1,295 @@
+" Vim indent file
+" Language:     LaTeX
+" Maintainer:   YiChao Zhou <broken.zhou AT gmail.com>
+" Created:      Sat, 16 Feb 2002 16:50:19 +0100
+" Last Change:	2012 Mar 18 19:19:50
+" Version: 0.7
+"   Please email me if you found something we can do.  Bug report and
+"   feature request is welcome.
+
+" Last Update:  {{{
+"               25th Sep 2002, by LH :
+"               (*) better support for the option
+"               (*) use some regex instead of several '||'.
+"               Oct 9th, 2003, by JT:
+"               (*) don't change indentation of lines starting with '%'
+"               2005/06/15, Moshe Kaminsky <kaminsky AT math.huji.ac.il>
+"               (*) New variables:
+"                   g:tex_items, g:tex_itemize_env, g:tex_noindent_env
+"               2011/3/6, by Zhou YiChao <broken.zhou AT gmail.com>
+"               (*) Don't change indentation of lines starting with '%'
+"                   I don't see any code with '%' and it doesn't work properly
+"                   so I add some code.
+"               (*) New features: Add smartindent-like indent for "{}" and  "[]".
+"               (*) New variables: g:tex_indent_brace
+"               2011/9/25, by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Bug fix: smartindent-like indent for "[]"
+"               (*) New features: Align with "&".
+"               (*) New variable: g:tex_indent_and.
+"               2011/10/23 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Bug fix: improve the smartindent-like indent for "{}" and
+"               "[]".
+"               2012/02/27 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Bug fix: support default folding marker.
+"               (*) Indent with "&" is not very handy.  Make it not enable by
+"               default.
+"               2012/03/06 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Modify "&" behavior and make it default again.  Now "&"
+"               won't align when there are more then one "&" in the previous
+"               line.
+"               (*) Add indent "\left(" and "\right)"
+"               (*) Trust user when in "verbatim" and "lstlisting"
+"               2012/03/11 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Modify "&" so that only indent when current line start with
+"               "&".
+"               2012/03/12 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Modify indentkeys.
+"               2012/03/18 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Add &cpo
+"               2013/05/02 by Zhou Yichao <broken.zhou AT gmail.com>
+"               (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk
+"                   for reporting this.
+" }}}
+
+" Document: {{{
+"
+" To set the following options (ok, currently it's just one), add a line like
+"   let g:tex_indent_items = 1
+" to your ~/.vimrc.
+"
+" * g:tex_indent_brace
+"
+"   If this variable is unset or non-zero, it will use smartindent-like style
+"   for "{}" and "[]"
+"   
+" * g:tex_indent_items
+"
+"   If this variable is set, item-environments are indented like Emacs does
+"   it, i.e., continuation lines are indented with a shiftwidth.
+"   
+"   NOTE: I've already set the variable below; delete the corresponding line
+"   if you don't like this behaviour.
+"
+"   Per default, it is unset.
+"   
+"              set                                unset
+"   ----------------------------------------------------------------
+"       \begin{itemize}                      \begin{itemize}  
+"         \item blablabla                      \item blablabla
+"           bla bla bla                        bla bla bla  
+"         \item blablabla                      \item blablabla
+"           bla bla bla                        bla bla bla  
+"       \end{itemize}                        \end{itemize}    
+"
+"
+" * g:tex_items
+"
+"   A list of tokens to be considered as commands for the beginning of an item 
+"   command. The tokens should be separated with '\|'. The initial '\' should 
+"   be escaped. The default is '\\bibitem\|\\item'.
+"
+" * g:tex_itemize_env
+" 
+"   A list of environment names, separated with '\|', where the items (item 
+"   commands matching g:tex_items) may appear. The default is 
+"   'itemize\|description\|enumerate\|thebibliography'.
+"
+" * g:tex_noindent_env
+"
+"   A list of environment names. separated with '\|', where no indentation is 
+"   required. The default is 'document\|verbatim'.
+"
+" * g:tex_indent_and
+"
+"   If this variable is unset or zero, vim will try to align the line with first
+"   "&". This is pretty useful when you use environment like table or align.
+"   Note that this feature need to search back some line, so vim may become
+"   a little slow.
+"
+" }}} 
+
+" Only define the function once
+if exists("b:did_indent")
+    finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Define global variable {{{
+
+let b:did_indent = 1
+
+if !exists("g:tex_indent_items")
+    let g:tex_indent_items = 1
+endif
+if !exists("g:tex_indent_brace")
+    let g:tex_indent_brace = 1
+endif
+if !exists("g:tex_indent_and")
+    let g:tex_indent_and = 1
+endif
+if g:tex_indent_items
+    if !exists("g:tex_itemize_env")
+        let g:tex_itemize_env = 'itemize\|description\|enumerate\|thebibliography'
+    endif
+    if !exists('g:tex_items')
+        let g:tex_items = '\\bibitem\|\\item' 
+    endif
+else
+    let g:tex_items = ''
+endif
+
+if !exists("g:tex_indent_paretheses")
+    let g:tex_indent_paretheses = 1
+endif
+
+if !exists("g:tex_noindent_env")
+    let g:tex_noindent_env = 'document\|verbatim\|lstlisting'
+endif "}}}
+
+" VIM Setting " {{{
+setlocal autoindent
+setlocal nosmartindent
+setlocal indentexpr=GetTeXIndent()
+setlocal indentkeys&
+exec 'setlocal indentkeys+=[,(,{,),},],\&' . substitute(g:tex_items, '^\|\(\\|\)', ',=', 'g')
+let g:tex_items = '^\s*' . substitute(g:tex_items, '^\(\^\\s\*\)*', '', '')
+" }}}
+
+function! GetTeXIndent() " {{{
+    " Find a non-blank line above the current line.
+    let lnum = prevnonblank(v:lnum - 1)
+
+    " Comment line is not what we need.
+    while lnum != 0 && getline(lnum) =~ '^\s*%'
+        let lnum = prevnonblank(lnum - 1)
+    endwhile
+
+    " At the start of the file use zero indent.
+    if lnum == 0
+        return 0 
+    endif
+
+    let line = substitute(getline(lnum), '%.*', ' ','g')     " last line
+    let cline = substitute(getline(v:lnum), '%.*', ' ', 'g') " current line
+
+    "  We are in verbatim, so do what our user what.
+    if synIDattr(synID(v:lnum, indent(v:lnum), 1), "name") == "texZone"
+        if empty(cline)
+            return indent(lnum)
+        else
+            return indent(v:lnum)
+        end
+    endif
+    
+    " You want to align with "&"
+    if g:tex_indent_and
+        " Align only when current line start with "&"
+        if line =~ '&.*\\\\' && cline =~ '^\s*&'
+            return indent(v:lnum) + stridx(line, "&") - stridx(cline, "&")
+        endif
+
+        " set line & lnum to the line which doesn't contain "&"
+        while lnum != 0 && (stridx(line, "&") != -1 || line =~ '^\s*%')
+            let lnum = prevnonblank(lnum - 1)
+            let line = getline(lnum)
+        endwhile
+    endif
+
+
+    if lnum == 0
+        return 0 
+    endif
+
+    let ind = indent(lnum)
+
+    " New code for comment: retain the indent of current line
+    if cline =~ '^\s*%'
+        return indent(v:lnum)
+    endif
+
+    " Add a 'shiftwidth' after beginning of environments.
+    " Don't add it for \begin{document} and \begin{verbatim}
+    ""if line =~ '^\s*\\begin{\(.*\)}'  && line !~ 'verbatim' 
+    " LH modification : \begin does not always start a line
+    " ZYC modification : \end after \begin won't cause wrong indent anymore
+    if line =~ '\\begin{.*}' && line !~ g:tex_noindent_env
+        let ind = ind + &sw
+
+        if g:tex_indent_items
+            " Add another sw for item-environments
+            if line =~ g:tex_itemize_env
+                let ind = ind + &sw
+            endif
+        endif
+    endif
+
+    " Subtract a 'shiftwidth' when an environment ends
+    if cline =~ '\\end{.*}' && cline !~ g:tex_noindent_env
+
+        if g:tex_indent_items
+            " Remove another sw for item-environments
+            if cline =~ g:tex_itemize_env
+                let ind = ind - &sw
+            endif
+        endif
+
+        let ind = ind - &sw
+    endif
+
+    if g:tex_indent_brace
+        let sum1 = 0
+        for i in range(0, strlen(line)-1)
+            if line[i] == "}" || line[i] == "]" ||
+                        \ strpart(line, i, 7) == '\right)'
+                let sum1 = max([0, sum1-1])
+            endif
+            if line[i] == "{" || line[i] == "[" ||
+                        \ strpart(line, i, 6) == '\left('
+                let sum1 += 1
+            endif
+        endfor
+
+        let sum2 = 0
+        for i in reverse(range(0, strlen(cline)-1))
+            if cline[i] == "{" || cline[i] == "[" ||
+                        \ strpart(cline, i, 6) == '\left('
+                let sum2 = max([0, sum2-1])
+            endif
+            if cline[i] == "}" || cline[i] == "]" ||
+                        \ strpart(cline, i, 7) == '\right)'
+                let sum2 += 1
+            endif
+        endfor
+
+        let ind += (sum1 - sum2) * &sw
+    endif
+
+    if g:tex_indent_paretheses
+    endif
+
+    " Special treatment for 'item'
+    " ----------------------------
+
+    if g:tex_indent_items
+
+        " '\item' or '\bibitem' itself:
+        if cline =~ g:tex_items
+            let ind = ind - &sw
+        endif
+
+        " lines following to '\item' are intented once again:
+        if line =~ g:tex_items
+            let ind = ind + &sw
+        endif
+
+    endif
+
+    return ind
+endfunction "}}}
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim: set sw=4 textwidth=80:
diff -Naur vim73.orig/runtime/indent/treetop.vim vim73/runtime/indent/treetop.vim
--- vim73.orig/runtime/indent/treetop.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/indent/treetop.vim	2013-08-04 19:09:08.527283458 +0000
@@ -0,0 +1,38 @@
+" Vim indent file
+" Language:         Treetop
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2011-03-14
+
+if exists("b:did_indent")
+  finish
+endif
+let b:did_indent = 1
+
+setlocal indentexpr=GetTreetopIndent()
+setlocal indentkeys=0{,0},!^F,o,O,=end
+setlocal nosmartindent
+
+if exists("*GetTreetopIndent")
+  finish
+endif
+
+function GetTreetopIndent()
+  let pnum = prevnonblank(v:lnum - 1)
+  if pnum == 0
+    return 0
+  endif
+
+  let ind = indent(pnum)
+  let line = getline(pnum)
+
+  if line =~ '^\s*\%(grammar\|module\|rule\)\>'
+    let ind += &sw
+  endif
+
+  let line = getline(v:lnum)
+  if line =~ '^\s*end\>'
+    let ind -= &sw
+  end
+
+  retur ind
+endfunction
diff -Naur vim73.orig/runtime/indent/verilog.vim vim73/runtime/indent/verilog.vim
--- vim73.orig/runtime/indent/verilog.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/verilog.vim	2013-08-04 19:09:08.530616781 +0000
@@ -1,6 +1,6 @@
 " Language:     Verilog HDL
 " Maintainer:	Chih-Tsun Huang <cthuang@larc.ee.nthu.edu.tw>
-" Last Change:	Wed Oct 31 16:13:11 CST 2001
+" Last Change:	2011 Dec 10 by Thilo Six
 " URL:		http://larc.ee.nthu.edu.tw/~cthuang/vim/indent/verilog.vim
 "
 " Credits:
@@ -30,7 +30,8 @@
   finish
 endif
 
-set cpo-=C
+let s:cpo_save = &cpo
+set cpo&vim
 
 function GetVerilogIndent()
 
@@ -216,4 +217,7 @@
   return ind
 endfunction
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:sw=2
diff -Naur vim73.orig/runtime/indent/vhdl.vim vim73/runtime/indent/vhdl.vim
--- vim73.orig/runtime/indent/vhdl.vim	2010-07-11 12:05:34.000000000 +0000
+++ vim73/runtime/indent/vhdl.vim	2013-08-04 19:09:08.530616781 +0000
@@ -1,8 +1,8 @@
 " VHDL indent ('93 syntax)
 " Language:    VHDL
 " Maintainer:  Gerald Lai <laigera+vim?gmail.com>
-" Version:     1.56
-" Last Change: 2010 Jun 29
+" Version:     1.58
+" Last Change: 2011 Sep 27
 " URL:         http://www.vim.org/scripts/script.php?script_id=1450
 
 " only load this indent file when no other was loaded
@@ -95,7 +95,7 @@
 
   " ****************************************************************************************
   " indent:   align generic variables & port names
-  " keywords: "generic", "map", "port" + "(", provided current line is part of mapping
+  " keywords: "procedure" + name, "generic", "map", "port" + "(", provided current line is part of mapping
   " where:    anywhere in previous 2 lines
   " find following previous non-comment line
   let pn = prevnonblank(prevn - 1)
@@ -104,7 +104,7 @@
     let pn = prevnonblank(pn - 1)
     let ps = getline(pn)
   endwhile
-  if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
+  if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(procedure\|generic\|map\|port\)\>.*\)\@<!\w\+\s*\w*\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(procedure\s\+\S\+\|generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(procedure\|generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
     " align closing ")" with opening "("
     if curs =~ '^\s*)'
       return ind2 + stridx(prevs_noi, '(')
@@ -160,12 +160,12 @@
         " make sure one of these is true
         " keywords: variable + "<=" without ";" ending
         " where:    start of previous non-comment line
-        " keywords: "generic", "map", "port"
+        " keywords: "procedure", "generic", "map", "port"
         " where:    anywhere in previous non-comment line
         " keyword:  "("
         " where:    start of previous non-comment line
         if m < 3 && ps !~? '^\s*\S\+\s*<=[^;]*'.s:ES
-          if ps =~? s:NC.'\<\%(generic\|map\|port\)\>' || ps =~ '^\s*('
+          if ps =~? s:NC.'\<\%(procedure\|generic\|map\|port\)\>' || ps =~ '^\s*('
             let ind = t
           endif
           break
@@ -207,14 +207,26 @@
   " keyword:  "begin"
   " where:    anywhere in current line
   if curs =~? s:NC.'\<begin\>'
-    let ind = ind - &sw
     " find previous opening statement of
     " keywords: "architecture", "block", "entity", "function", "generate", "procedure", "process"
     let s2 = s:NC.s:NE.'\<\%(architecture\|block\|entity\|function\|generate\|procedure\|process\)\>'
-    if (curs !~? s2.'.*'.s:NC.'\<begin\>.*'.s:ES && prevs =~? s2) || m == 1
-      let ind = ind + &sw
+
+    let pn = prevnonblank(curn - 1)
+    let ps = getline(pn)
+    while pn > 0 && (ps =~ '^\s*--' || ps !~? s2)
+      let pn = prevnonblank(pn - 1)
+      let ps = getline(pn)
+
+      if (ps =~? s:NC.'\<begin\>')
+        return indent(pn) - &sw
+      endif
+    endwhile
+
+    if (pn == 0)
+      return ind - &sw
+    else
+      return indent(pn)
     endif
-    return ind
   endif
 
   " indent:   +sw if previous line is previous opening statement
@@ -319,8 +331,13 @@
   " indent:   -sw
   " keywords: "else", "elsif", "end" + "block", "for", "function", "generate", "if", "loop", "procedure", "process", "record", "units"
   " where:    start of current line
-  if curs =~? '^\s*\%(else\|elsif\|end\s\+\%(block\|for\|function\|generate\|if\|loop\|procedure\|process\|record\|units\)\)\>'
-    return ind - &sw
+  let s5 = 'block\|for\|function\|generate\|if\|loop\|procedure\|process\|record\|units'
+  if curs =~? '^\s*\%(else\|elsif\|end\s\+\%('.s5.'\)\)\>'
+    if prevs =~? '^\s*\%(elsif\|'.s5.'\)'
+      return ind
+    else
+      return ind - &sw
+    endif
   endif
 
   " indent:   backtrace previous non-comment lines
@@ -395,9 +412,9 @@
 
   " ****************************************************************************************
   " indent:   maintain indent of previous opening statement
-  " keywords: without "generic", "map", "port" + ":" but not ":=" + "in", "out", "inout", "buffer", "linkage", variable & ":="
+  " keywords: without "procedure", "generic", "map", "port" + ":" but not ":=" + "in", "out", "inout", "buffer", "linkage", variable & ":="
   " where:    start of current line
-  if curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)'
+  if curs =~? '^\s*\%(\<\%(procedure\|generic\|map\|port\)\>.*\)\@<!\w\+\s*\w*\s*:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)'
     return ind2
   endif
 
diff -Naur vim73.orig/runtime/indent/vim.vim vim73/runtime/indent/vim.vim
--- vim73.orig/runtime/indent/vim.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/vim.vim	2013-08-04 19:09:08.533950104 +0000
@@ -1,7 +1,7 @@
 " Vim indent file
 " Language:	Vim script
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2005 Jul 06
+" Last Change:	2012 Aug 02
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
@@ -12,12 +12,26 @@
 setlocal indentexpr=GetVimIndent()
 setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\
 
+let b:undo_indent = "setl indentkeys< indentexpr<"
+
 " Only define the function once.
 if exists("*GetVimIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 function GetVimIndent()
+  let ignorecase_save = &ignorecase
+  try
+    let &ignorecase = 0
+    return GetVimIndentIntern()
+  finally
+    let &ignorecase = ignorecase_save
+  endtry
+endfunc
+
+function GetVimIndentIntern()
   " Find a non-blank line above the current line.
   let lnum = prevnonblank(v:lnum - 1)
 
@@ -44,10 +58,18 @@
     else
       let ind = ind + &sw * 3
     endif
-  elseif getline(lnum) =~ '\(^\||\)\s*\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\%[lly]\|fu\%[nction]\|el\%[seif]\)\>'
-    let ind = ind + &sw
   elseif getline(lnum) =~ '^\s*aug\%[roup]' && getline(lnum) !~ '^\s*aug\%[roup]\s*!\=\s\+END'
     let ind = ind + &sw
+  else
+    let line = getline(lnum)
+    let i = match(line, '\(^\||\)\s*\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\%[lly]\|fu\%[nction]\|el\%[seif]\)\>')
+    if i >= 0
+      let ind += &sw
+      if strpart(line, i, 1) == '|' && has('syntax_items')
+            \ && synIDattr(synID(lnum, i, 1), "name") =~ '\(Comment\|String\)$'
+        let ind -= &sw
+      endif
+    endif
   endif
 
   " If the previous line contains an "end" after a pipe, but not in an ":au"
@@ -71,4 +93,7 @@
   return ind
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2
diff -Naur vim73.orig/runtime/indent/xinetd.vim vim73/runtime/indent/xinetd.vim
--- vim73.orig/runtime/indent/xinetd.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/xinetd.vim	2013-08-04 19:09:08.537283427 +0000
@@ -15,6 +15,8 @@
 if exists("*GetXinetdIndent")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 function s:count_braces(lnum, count_open)
   let n_open = 0
@@ -48,3 +50,6 @@
   return indent(pnum) + s:count_braces(pnum, 1) * &sw
         \ - s:count_braces(v:lnum, 0) * &sw
 endfunction
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/indent/xml.vim vim73/runtime/indent/xml.vim
--- vim73.orig/runtime/indent/xml.vim	2010-05-15 11:03:29.000000000 +0000
+++ vim73/runtime/indent/xml.vim	2013-08-04 19:09:08.537283427 +0000
@@ -1,6 +1,6 @@
 " Language:	xml
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
-" Last Change:	2009-05-26 00:17:25
+" Last Change:	2012 Jul 25
 " Notes:	1) does not indent pure non-xml code (e.g. embedded scripts)
 "		2) will be confused by unbalanced tags in comments
 "		or CDATA sections.
@@ -12,13 +12,13 @@
     finish
 endif
 let b:did_indent = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " [-- local settings (must come before aborting the script) --]
 setlocal indentexpr=XmlIndentGet(v:lnum,1)
 setlocal indentkeys=o,O,*<Return>,<>>,<<>,/,{,}
 
-set cpo-=C
-
 if !exists('b:xml_indent_open')
     let b:xml_indent_open = '.\{-}<\a'
     " pre tag, e.g. <address>
@@ -31,8 +31,16 @@
     " let b:xml_indent_close = '.\{-}</\(address\)\@!'
 endif
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " [-- finish, if the function already exists --]
-if exists('*XmlIndentGet') | finish | endif
+if exists('*XmlIndentGet')
+  finish
+endif
+
+let s:keepcpo= &cpo
+set cpo&vim
 
 fun! <SID>XmlIndentWithPattern(line, pat)
     let s = substitute('x'.a:line, a:pat, "\1", 'g')
@@ -93,4 +101,7 @@
     return ind
 endfun
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:ts=8
diff -Naur vim73.orig/runtime/indent/yaml.vim vim73/runtime/indent/yaml.vim
--- vim73.orig/runtime/indent/yaml.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/indent/yaml.vim	2013-08-04 19:09:08.540616751 +0000
@@ -0,0 +1,132 @@
+" Vim indent file
+" Language:         YAML
+" Maintainer:       Nikolai Pavlov <zyx.vim@gmail.com>
+
+" Only load this indent file when no other was loaded.
+if exists('b:did_indent')
+  finish
+endif
+
+let s:save_cpo = &cpo
+set cpo&vim
+
+let b:did_indent = 1
+
+setlocal indentexpr=GetYAMLIndent(v:lnum)
+setlocal indentkeys=!^F,o,O,0#,0},0],<:>,-
+setlocal nosmartindent
+
+let b:undo_indent = 'setlocal indentexpr< indentkeys< smartindent<'
+
+" Only define the function once.
+if exists('*GetYAMLIndent')
+    finish
+endif
+
+if exists('*shiftwidth')
+    let s:shiftwidth = function('shiftwidth')
+else
+    function s:shiftwidth()
+        return &shiftwidth
+    endfunction
+endif
+
+function s:FindPrevLessIndentedLine(lnum, ...)
+    let prevlnum = prevnonblank(a:lnum-1)
+    let curindent = a:0 ? a:1 : indent(a:lnum)
+    while           prevlnum
+                \&&  indent(prevlnum) >=  curindent
+                \&& getline(prevlnum) !~# '^\s*#'
+        let prevlnum = prevnonblank(prevlnum-1)
+    endwhile
+    return prevlnum
+endfunction
+
+function s:FindPrevLEIndentedLineMatchingRegex(lnum, regex)
+    let plilnum = s:FindPrevLessIndentedLine(a:lnum, indent(a:lnum)+1)
+    while plilnum && getline(plilnum) !~# a:regex
+        let plilnum = s:FindPrevLessIndentedLine(plilnum)
+    endwhile
+    return plilnum
+endfunction
+
+let s:mapkeyregex='\v^\s*%(\''%([^'']|'''')*\'''.
+                \        '|\"%([^"\\]|\\.)*\"'.
+                \        '|%(%(\:\ )@!.)*)\:%(\ |$)'
+let s:liststartregex='\v^\s*%(\-%(\ |$))'
+
+function GetYAMLIndent(lnum)
+    if a:lnum == 1 || !prevnonblank(a:lnum-1)
+        return 0
+    endif
+
+    let prevlnum = prevnonblank(a:lnum-1)
+    let previndent = indent(prevlnum)
+
+    let line = getline(a:lnum)
+    if line =~# '^\s*#' && getline(a:lnum-1) =~# '^\s*#'
+        " Comment blocks should have identical indent
+        return previndent
+    elseif line =~# '^\s*[\]}]'
+        " Lines containing only closing braces should have previous indent
+        return indent(s:FindPrevLessIndentedLine(a:lnum))
+    endif
+
+    " Ignore comment lines when calculating indent
+    while getline(prevlnum) =~# '^\s*#'
+        let prevlnum = prevnonblank(prevlnum-1)
+        if !prevlnum
+            return previndent
+        endif
+    endwhile
+
+    let prevline = getline(prevlnum)
+    let previndent = indent(prevlnum)
+
+    " Any examples below assume that shiftwidth=2
+    if prevline =~# '\v[{[:]$|[:-]\ [|>][+\-]?%(\s+\#.*|\s*)$'
+        " Mapping key:
+        "     nested mapping: ...
+        "
+        " - {
+        "     key: [
+        "         list value
+        "     ]
+        " }
+        "
+        " - |-
+        "     Block scalar without indentation indicator
+        return previndent+s:shiftwidth()
+    elseif prevline =~# '\v[:-]\ [|>]%(\d+[+\-]?|[+\-]?\d+)%(\#.*|\s*)$'
+        " - |+2
+        "   block scalar with indentation indicator
+        "#^^ indent+2, not indent+shiftwidth
+        return previndent + str2nr(matchstr(prevline,
+                    \'\v([:-]\ [|>])@<=[+\-]?\d+%([+\-]?%(\s+\#.*|\s*)$)@='))
+    elseif prevline =~# '\v\"%([^"\\]|\\.)*\\$'
+        "    "Multiline string \
+        "     with escaped end"
+        let qidx = match(prevline, '\v\"%([^"\\]|\\.)*\\')
+        return virtcol([prevlnum, qidx+1])
+    elseif line =~# s:liststartregex
+        " List line should have indent equal to previous list line unless it was 
+        " caught by one of the previous rules
+        return indent(s:FindPrevLEIndentedLineMatchingRegex(a:lnum,
+                    \                                       s:liststartregex))
+    elseif line =~# s:mapkeyregex
+        " Same for line containing mapping key
+        return indent(s:FindPrevLEIndentedLineMatchingRegex(a:lnum,
+                    \                                       s:mapkeyregex))
+    elseif prevline =~# '^\s*- '
+        " - List with
+        "   multiline scalar
+        return previndent+2
+    elseif prevline =~# s:mapkeyregex
+        " Mapping with: value
+        "     that is multiline scalar
+        return previndent+s:shiftwidth()
+    endif
+    return previndent
+endfunction
+
+let &cpo = s:save_cpo
diff -Naur vim73.orig/runtime/indent/zimbu.vim vim73/runtime/indent/zimbu.vim
--- vim73.orig/runtime/indent/zimbu.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/indent/zimbu.vim	2013-08-04 19:09:08.540616751 +0000
@@ -0,0 +1,128 @@
+" Vim indent file
+" Language:	Zimbu
+" Maintainer:	Bram Moolenaar <Bram@vim.org>
+" Last Change:	2012 Sep 08
+
+" Only load this indent file when no other was loaded.
+if exists("b:did_indent")
+   finish
+endif
+let b:did_indent = 1
+
+setlocal ai nolisp nocin
+setlocal indentexpr=GetZimbuIndent(v:lnum)
+setlocal indentkeys=0{,0},!^F,o,O,0=ELSE,0=ELSEIF,0=CASE,0=DEFAULT,0=FINALLY
+
+" We impose recommended defaults: no Tabs, 'shiftwidth' = 2
+setlocal sw=2 et
+
+let b:undo_indent = "setl et< sw< ai< indentkeys< indentexpr="
+
+" Only define the function once.
+if exists("*GetZimbuIndent")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Come here when loading the script the first time.
+
+let s:maxoff = 50	" maximum number of lines to look backwards for ()
+
+func GetZimbuIndent(lnum)
+  let prevLnum = prevnonblank(a:lnum - 1)
+  if prevLnum == 0
+    " This is the first non-empty line, use zero indent.
+    return 0
+  endif
+
+  " Taken from Python indenting:
+  " If the previous line is inside parenthesis, use the indent of the starting
+  " line.
+  " Trick: use the non-existing "dummy" variable to break out of the loop when
+  " going too far back.
+  call cursor(prevLnum, 1)
+  let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW',
+	  \ "line('.') < " . (prevLnum - s:maxoff) . " ? dummy :"
+	  \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
+	  \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
+  if parlnum > 0
+    let plindent = indent(parlnum)
+    let plnumstart = parlnum
+  else
+    let plindent = indent(prevLnum)
+    let plnumstart = prevLnum
+  endif
+
+
+  " When inside parenthesis: If at the first line below the parenthesis add
+  " two 'shiftwidth', otherwise same as previous line.
+  " i = (a
+  "       + b
+  "       + c)
+  call cursor(a:lnum, 1)
+  let p = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW',
+	  \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :"
+	  \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
+	  \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
+  if p > 0
+    if p == prevLnum
+      " When the start is inside parenthesis, only indent one 'shiftwidth'.
+      let pp = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW',
+	  \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :"
+	  \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
+	  \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
+      if pp > 0
+	return indent(prevLnum) + &sw
+      endif
+      return indent(prevLnum) + &sw * 2
+    endif
+    if plnumstart == p
+      return indent(prevLnum)
+    endif
+    return plindent
+  endif
+
+  let prevline = getline(prevLnum)
+  let thisline = getline(a:lnum)
+
+  " If this line is not a comment and the previous one is then move the
+  " previous line further back.
+  if thisline !~ '^\s*#'
+    while prevline =~ '^\s*#'
+      let prevLnum = prevnonblank(prevLnum - 1)
+      if prevLnum == 0
+	" Only comment lines before this, no indent
+	return 0
+      endif
+      let prevline = getline(prevLnum)
+      let plindent = indent(prevLnum)
+    endwhile
+  endif
+
+  if prevline =~ '^\s*\(IF\|\|ELSEIF\|ELSE\|GENERATE_IF\|\|GENERATE_ELSEIF\|GENERATE_ELSE\|WHILE\|REPEAT\|TRY\|CATCH\|FINALLY\|FOR\|DO\|SWITCH\|CASE\|DEFAULT\|FUNC\|VIRTUAL\|ABSTRACT\|DEFINE\|REPLACE\|FINAL\|PROC\|MAIN\|NEW\|ENUM\|CLASS\|INTERFACE\|BITS\|MODULE\|SHARED\)\>'
+    let plindent += &sw
+  endif
+  if thisline =~ '^\s*\(}\|ELSEIF\>\|ELSE\>\|CATCH\|FINALLY\|GENERATE_ELSEIF\>\|GENERATE_ELSE\>\|UNTIL\>\)'
+    let plindent -= &sw
+  endif
+  if thisline =~ '^\s*\(CASE\>\|DEFAULT\>\)' && prevline !~ '^\s*SWITCH\>'
+    let plindent -= &sw
+  endif
+
+  " line up continued comment that started after some code
+  "   String something   # comment comment
+  "                      # comment
+  if a:lnum == prevLnum + 1 && thisline =~ '^\s*#' && prevline !~ '^\s*#'
+    let n = match(prevline, '#')
+    if n > 1
+      let plindent = n
+    endif
+  endif
+
+  return plindent
+endfunc
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/keymap/belarusian-jcuken.vim vim73/runtime/keymap/belarusian-jcuken.vim
--- vim73.orig/runtime/keymap/belarusian-jcuken.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/keymap/belarusian-jcuken.vim	2013-08-04 19:09:08.550616721 +0000
@@ -0,0 +1,87 @@
+" Vim Keymap file for Belarusian characters, layout 'jcuken', classical variant
+" Useful mainly with UTF-8, but may work with other encodings.
+
+" Derived From: russian-jcuken.vim
+" Maintainer:   Aliaksei Nestserau <aliaksei@screencustoms.com>
+" Last Changed: 2012 Jul 23
+
+" All characters are given literally, conversion to another encoding (e.g.,
+" UTF-8) should work.
+scriptencoding utf-8
+
+let b:keymap_name = "by"
+
+loadkeymap
+~	Ё	CYRILLIC CAPITAL LETTER IO
+`	ё	CYRILLIC SMALL LETTER IO
+F	А	CYRILLIC CAPITAL LETTER A
+<	Б	CYRILLIC CAPITAL LETTER BE
+D	В	CYRILLIC CAPITAL LETTER VE
+U	Г	CYRILLIC CAPITAL LETTER GHE
+L	Д	CYRILLIC CAPITAL LETTER DE
+T	Е	CYRILLIC CAPITAL LETTER IE
+:	Ж	CYRILLIC CAPITAL LETTER ZHE
+P	З	CYRILLIC CAPITAL LETTER ZE
+B	І	CYRILLIC CAPITAL LETTER I
+Q	Й	CYRILLIC CAPITAL LETTER SHORT I
+R	К	CYRILLIC CAPITAL LETTER KA
+K	Л	CYRILLIC CAPITAL LETTER EL
+V	М	CYRILLIC CAPITAL LETTER EM
+Y	Н	CYRILLIC CAPITAL LETTER EN
+J	О	CYRILLIC CAPITAL LETTER O
+G	П	CYRILLIC CAPITAL LETTER PE
+H	Р	CYRILLIC CAPITAL LETTER ER
+C	С	CYRILLIC CAPITAL LETTER ES
+N	Т	CYRILLIC CAPITAL LETTER TE
+E	У	CYRILLIC CAPITAL LETTER U
+A	Ф	CYRILLIC CAPITAL LETTER EF
+{	Х	CYRILLIC CAPITAL LETTER HA
+W	Ц	CYRILLIC CAPITAL LETTER TSE
+X	Ч	CYRILLIC CAPITAL LETTER CHE
+I	Ш	CYRILLIC CAPITAL LETTER SHA
+O	Ў	CYRILLIC CAPITAL LETTER ASYLLABIC U
+}	'	APOSTROPHE
+S	Ы	CYRILLIC CAPITAL LETTER YERU
+M	Ь	CYRILLIC CAPITAL LETTER SOFT SIGN
+\"	Э	CYRILLIC CAPITAL LETTER E
+>	Ю	CYRILLIC CAPITAL LETTER YU
+Z	Я	CYRILLIC CAPITAL LETTER YA
+f	а	CYRILLIC SMALL LETTER A
+,	б	CYRILLIC SMALL LETTER BE
+d	в	CYRILLIC SMALL LETTER VE
+u	г	CYRILLIC SMALL LETTER GHE
+l	д	CYRILLIC SMALL LETTER DE
+t	е	CYRILLIC SMALL LETTER IE
+;	ж	CYRILLIC SMALL LETTER ZHE
+p	з	CYRILLIC SMALL LETTER ZE
+b	і	CYRILLIC SMALL LETTER I
+q	й	CYRILLIC SMALL LETTER SHORT I
+r	к	CYRILLIC SMALL LETTER KA
+k	л	CYRILLIC SMALL LETTER EL
+v	м	CYRILLIC SMALL LETTER EM
+y	н	CYRILLIC SMALL LETTER EN
+j	о	CYRILLIC SMALL LETTER O
+g	п	CYRILLIC SMALL LETTER PE
+h	р	CYRILLIC SMALL LETTER ER
+c	с	CYRILLIC SMALL LETTER ES
+n	т	CYRILLIC SMALL LETTER TE
+e	у	CYRILLIC SMALL LETTER U
+a	ф	CYRILLIC SMALL LETTER EF
+[	х	CYRILLIC SMALL LETTER HA
+w	ц	CYRILLIC SMALL LETTER TSE
+x	ч	CYRILLIC SMALL LETTER CHE
+i	ш	CYRILLIC SMALL LETTER SHA
+o	ў	CYRILLIC SMALL LETTER ASYLLABIC U
+]	'	APOSTROPHE
+s	ы	CYRILLIC SMALL LETTER YERU
+m	ь	CYRILLIC SMALL LETTER SOFT SIGN
+'	э	CYRILLIC SMALL LETTER E
+.	ю	CYRILLIC SMALL LETTER YU
+z	я	CYRILLIC SMALL LETTER YA
+@	"
+#	'
+$	*
+%	:
+^	,
+&	.
+*	;
diff -Naur vim73.orig/runtime/lang/menu_af_af.latin1.vim vim73/runtime/lang/menu_af_af.latin1.vim
--- vim73.orig/runtime/lang/menu_af_af.latin1.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_af_af.latin1.vim	2013-08-04 19:09:08.617283187 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:	Afrikaas
 " Maintainer:		Danie Roux <droux@tuks.co.za>
-" Last Change:		2003 Mar 30
+" Last Change:		2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -150,3 +152,6 @@
 menutrans Co&lor\ test		Toets\ die\ &kleure
 menutrans &Highlight\ test	Toets\ die\ verligting
 menutrans &Convert\ to\ HTML	Verwissel\ na\ HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_ca_es.latin1.vim vim73/runtime/lang/menu_ca_es.latin1.vim
--- vim73.orig/runtime/lang/menu_ca_es.latin1.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_ca_es.latin1.vim	2013-08-04 19:09:08.620616510 +0000
@@ -9,6 +9,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252,
 " iso-8859-15 without conversion as well.
@@ -311,3 +313,5 @@
 menutrans Set\ '&syntax'\ only		Noms\ el\ ressalt\ de\ sintaxi
 menutrans Set\ '&filetype'\ too		Carrega\ tamb\ els\ plugins
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_chinese_gb.936.vim vim73/runtime/lang/menu_chinese_gb.936.vim
--- vim73.orig/runtime/lang/menu_chinese_gb.936.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_chinese_gb.936.vim	2013-08-04 19:09:08.623949834 +0000
@@ -9,6 +9,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp936
 
@@ -261,3 +263,6 @@
 menutrans &Convert\ to\ HTML		ת\ HTML(&C)
 menutrans Set\ '&syntax'\ only		趨\ 'syntax'(&S)
 menutrans Set\ '&filetype'\ too		Ҳ趨\ 'filetype'(&F)
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_chinese_taiwan.950.vim vim73/runtime/lang/menu_chinese_taiwan.950.vim
--- vim73.orig/runtime/lang/menu_chinese_taiwan.950.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_chinese_taiwan.950.vim	2013-08-04 19:09:08.627283157 +0000
@@ -1,6 +1,6 @@
 " Menu Translations:	Traditional Chinese
 " Translated By:	Hung-Te Lin	<piaip@csie.ntu.edu.tw>
-" Last Change:		2005/01/28 02:51:38
+" Last Change:		2012 May 01
 
 " {{{ Quit when menu translations have already been done.
 if exists("did_menu_trans")
@@ -8,6 +8,8 @@
 endif
 let did_menu_trans = 1
 " }}}
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp950
 
@@ -282,4 +284,7 @@
 endif
 " }}}
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:foldmethod=marker:nowrap:foldcolumn=2:foldlevel=1
diff -Naur vim73.orig/runtime/lang/menu_cs_cz.iso_8859-2.vim vim73/runtime/lang/menu_cs_cz.iso_8859-2.vim
--- vim73.orig/runtime/lang/menu_cs_cz.iso_8859-2.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_cs_cz.iso_8859-2.vim	2013-08-04 19:09:08.630616480 +0000
@@ -1,30 +1,38 @@
-" Menu Translations:	Czech for ISO-8859-2
-" Maintainer:		Jiri Brezina <brzj@seznam.cz>
-" vim:set foldmethod=marker:
-" $Revision: 1.3 $
-" $Date: 2005/12/19 22:08:24 $
+" Menu Translations:    Czech (ISO-8859-2)
+" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
+" Previous maintainer:  Jiri Brezina
+" Based on:             menu.vim (2012-10-21)
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
-  finish
+   finish
 endif
+
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
-scriptencoding ISO-8859-2
+scriptencoding iso-8859-2
 
 " {{{ File menu
 menutrans &File				&Soubor
 menutrans &Open\.\.\.<Tab>:e		&Otevt\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp	Otevt\ v\ no&vm\ okn\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	Otevt\ tab\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew		&Nov<Tab>:enew
 menutrans &Close<Tab>:close		&Zavt<Tab>:close
 menutrans &Save<Tab>:w			&Uloit<Tab>:w
 menutrans Save\ &As\.\.\.<Tab>:sav	Uloit\ &jako\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.	Rozdlit\ okno\ -\ &Diff\.\.\.
-menutrans Split\ Patched\ &By\.\.\.	Rozdlit\ okno\ -\ &Patch\.\.\.
-menutrans &Print			&Tisk
-menutrans Sa&ve-Exit<Tab>:wqa		U&loit\ -\ Konec<Tab>:wqa
-menutrans E&xit<Tab>:qa			&Konec<Tab>:qa
+if has("printer") || has("unix")
+   menutrans &Print			&Tisk
+endif
+menutrans Sa&ve-Exit<Tab>:wqa		U&loit\ a\ ukonit<Tab>:wqa
+menutrans E&xit<Tab>:qa			&Ukonit<Tab>:qa
+
+if has("diff")
+   menutrans Split\ &Diff\ with\.\.\.	Rozdlit\ okno\ -\ &Diff\.\.\.
+   menutrans Split\ Patched\ &By\.\.\.	Rozdlit\ okno\ -\ &Patch\.\.\.
+endif
 " }}}
 
 " {{{ Edit menu
@@ -37,24 +45,32 @@
 menutrans &Paste<Tab>"+gP		V&loit<Tab>"+gP
 menutrans Put\ &Before<Tab>[p		Vloit\ &ped<Tab>[p
 menutrans Put\ &After<Tab>]p		Vloi&t\ za<Tab>]p
-menutrans &Delete<Tab>x			&Smazat<Tab>x
+if has("win32") || has("win16")
+   menutrans &Delete<Tab>x			&Smazat<Tab>x
+endif
 menutrans &Select\ All<Tab>ggVG		Vy&brat\ ve<Tab>ggVG
-menutrans &Find\.\.\.			&Hledat\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
-menutrans Options\.\.\.			Volb&y\.\.\.
+if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
+   menutrans &Find\.\.\.			&Hledat\.\.\.
+   menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
+else
+   menutrans Find<Tab>/ &Hledat<Tab>/
+   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
+   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
+endif
 menutrans Settings\ &Window		Nastav&en\ okna
-	" {{{2 Edit -1
+" {{{2 Edit -1
+menutrans Startup\ &Settings  Poten\ &nastaven
 menutrans &Global\ Settings				&Globln\ nastaven
 menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&Pepnout\ zvraznn\ vzoru<Tab>:set\ hls!
 menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Pepnout\ ignorovn\ &VERZLEK<Tab>:set\ ic!
 menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Pepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
 menutrans &Context\ lines				Zobrazit\ konte&xt\ kurzoru
 menutrans &Virtual\ Edit				Virtuln\ p&ozice\ kurzoru
-	menutrans Never						Nikdy
-	menutrans Block\ Selection				Vbr\ Bloku
-	menutrans Insert\ mode					Insert\ md
-	menutrans Block\ and\ Insert				Blok\ a\ Insert
-	menutrans Always					Vdycky
+menutrans Never						Nikdy
+menutrans Block\ Selection				Vbr\ Bloku
+menutrans Insert\ mode					Insert\ md
+menutrans Block\ and\ Insert				Blok\ a\ Insert
+menutrans Always					Vdycky
 menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Pepnout\ Insert\ m&d<Tab>:set\ im!
 menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Pepnout\ kompatibiln\ reim\ s\ 'vi'<Tab>:set\ cp!
 menutrans Search\ &Path\.\.\.				Nastavit\ &cestu\ k\ prohledvn\.\.\.
@@ -63,9 +79,10 @@
 menutrans Toggle\ &Bottom\ Scrollbar			P&epnout\ doln\ rolovac\ litu
 menutrans Toggle\ &Left\ Scrollbar			Pepnout\ &levou\ rolovac\ litu
 menutrans Toggle\ &Right\ Scrollbar			Pepnout\ p&ravou\ rolovac\ litu
-	" {{{2 Edit -2
+" {{{2 Edit -2
 menutrans F&ile\ Settings				Nastaven\ so&uboru
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Pepnout\ slovn\ &dk<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Pepnout\ relativn\ slovn\ &dk<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Pepnout\ &List\ md<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Pepnout\ zala&movn\ dk<Tab>:set\ wrap!
 menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Pepnout\ zl&om\ ve\ slov<Tab>:set\ lbr!
@@ -76,10 +93,12 @@
 menutrans Soft\ &Tabstop				Nastavit\ Soft\ &Tabstop
 menutrans Te&xt\ Width\.\.\.				ka\ te&xtu\.\.\.
 menutrans &File\ Format\.\.\.				&Formt\ souboru\.\.\.
-	" {{{2 Edit -3
+" {{{2 Edit -3
 menutrans C&olor\ Scheme		Barevn\ s&chma
 menutrans &Keymap			Klvesov\ m&apa
-menutrans Select\ Fo&nt\.\.\.		Vybrat\ ps&mo\.\.\.
+if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
+   menutrans Select\ Fo&nt\.\.\.		Vybrat\ ps&mo\.\.\.
+endif
 " }}}1
 
 " {{{ Programming menu
@@ -88,46 +107,52 @@
 menutrans Jump\ &back<Tab>^T		Skoit\ &zpt<Tab>^T
 menutrans Build\ &Tags\ File		&Vytvoit\ soubor\ tag
 
-menutrans &Spelling			&Kontrola\ pravopisu
-menutrans &Spell\ Check\ On		Kontrola\ pravopisu\ &zapnuta
-menutrans Spell\ Check\ &Off		Kontrola\ pravopisu\ &vypnuta
-menutrans To\ Next\ error<Tab>]s	&Dal\ chyba<Tab>]s
-menutrans To\ Previous\ error<Tab>[s	&Pedchoz\ chyba<Tab>[s
-menutrans Suggest\ Corrections<Tab>z?	&Nvrh\ oprav<Tab>z?
-menutrans Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
-menutrans Set\ language\ to\ "en"	Nastav\ jazyk\ na\ "en"
-menutrans Set\ language\ to\ "en_au"	Nastav\ jazyk\ na\ "en_au"
-menutrans Set\ language\ to\ "en_ca"	Nastav\ jazyk\ na\ "en_ca"
-menutrans Set\ language\ to\ "en_gb"	Nastav\ jazyk\ na\ "en_gb"
-menutrans Set\ language\ to\ "en_nz"	Nastav\ jazyk\ na\ "en_nz"
-menutrans Set\ language\ to\ "en_us"	Nastav\ jazyk\ na\ "en_us"
-menutrans Set\ language\ to\ "cz"	Nastav\ jazyk\ na\ "cz"
-menutrans Set\ language\ to\ "cs_cz"	Nastav\ jazyk\ na\ "cs_cz"
-menutrans &Find\ More\ Languages	Nalzt\ dal\ &jazyky
-
-menutrans &Folding			&Foldy
-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv	&Zobrazit\ dek\ kurzoru<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zo&brazit\ pouze\ dek\ kurzoru\ <Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm	&Vyjmout\ jednu\ rove\ fold<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM	Zav&t\ vechny\ foldy<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr	Pidat\ jedn&u\ rove\ fold<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR	&Otevt\ vechny\ foldy<Tab>zR
-menutrans Fold\ Met&hod			Metoda\ &skldn
-	"menutrans M&anual			&Run
-	"menutrans I&ndent			&Odsazen
-	"menutrans E&xpression			&Vraz
-	"menutrans S&yntax			&Syntax
-	"menutrans &Diff			&Diff
-	"menutrans Ma&rker			Ma&rker
-menutrans Create\ &Fold<Tab>zf		Vytvoit\ &fold<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		Vymazat\ fol&d<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	V&ymazat\ vechny\ foldy<Tab>zD
-menutrans Fold\ col&umn\ width		Sloupec\ zob&razen\ fold
-
-menutrans &Update			&Obnovit
-menutrans &Get\ Block			&Sejmout\ Blok
-menutrans &Put\ Block			&Vloit\ Blok
+if has("spell")
+   menutrans &Spelling			&Kontrola\ pravopisu
+   menutrans &Spell\ Check\ On		&Zapnout\ kontrolu\ pravopisu
+   menutrans Spell\ Check\ &Off		&Vypnout \kontrolu\ pravopisu
+   menutrans To\ &Next\ error<Tab>]s	&Dal\ chyba<Tab>]s
+   menutrans To\ &Previous\ error<Tab>[s	&Pedchoz\ chyba<Tab>[s
+   menutrans Suggest\ &Corrections<Tab>z=	&Navrhnout\ opravy<Tab>z=
+   menutrans &Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
+   menutrans Set\ language\ to\ "en"	Nastavit\ jazyk\ na\ "en"
+   menutrans Set\ language\ to\ "en_au"	Nastavit\ jazyk\ na\ "en_au"
+   menutrans Set\ language\ to\ "en_ca"	Nastavit\ jazyk\ na\ "en_ca"
+   menutrans Set\ language\ to\ "en_gb"	Nastavit\ jazyk\ na\ "en_gb"
+   menutrans Set\ language\ to\ "en_nz"	Nastavit\ jazyk\ na\ "en_nz"
+   menutrans Set\ language\ to\ "en_us"	Nastavit\ jazyk\ na\ "en_us"
+   menutrans &Find\ More\ Languages	Nalzt\ dal\ &jazyky
+   let g:menutrans_set_lang_to = "Nastavit jazyk na"
+endif
+
+if has("Folding")   
+   menutrans &Folding			&Skldn
+   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+   menutrans &View\ Cursor\ Line<Tab>zv	Zobrazit\ dek\ &kurzoru<Tab>zv
+   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zobrazit\ &pouze\ dek\ kurzoru\ <Tab>zMzx
+   menutrans C&lose\ more\ folds<Tab>zm	Sloit\ &jednu\ rove\ sklad<Tab>zm
+   menutrans &Close\ all\ folds<Tab>zM	Sloit\ vechny\ sklady<Tab>zM
+   menutrans O&pen\ more\ folds<Tab>zr	Pidat\ jednu\ rove\ sklad<Tab>zr
+   menutrans &Open\ all\ folds<Tab>zR	&Otevt\ vechny\ sklady<Tab>zR
+   menutrans Fold\ Met&hod			&Metoda\ skldn
+   menutrans M&anual			&Run
+   menutrans I&ndent			&Odsazen
+   menutrans E&xpression	&Vraz
+   menutrans S&yntax			&Syntaxe
+   menutrans &Diff			&Rozdly
+   menutrans Ma&rker			&Znaky
+   menutrans Create\ &Fold<Tab>zf		Vytvoit\ &sklad<Tab>zf
+   menutrans &Delete\ Fold<Tab>zd		Vymazat\ skla&d<Tab>zd
+   menutrans Delete\ &All\ Folds<Tab>zD	Vymazat\ vechny\ sklady<Tab>zD
+   menutrans Fold\ col&umn\ width		Sloupec\ zob&razen\ sklad
+endif
+
+if has("diff")
+   menutrans &Update			&Obnovit
+   menutrans &Get\ Block			&Sejmout\ Blok
+   menutrans &Put\ Block			&Vloit\ Blok
+endif
+
 menutrans &Make<Tab>:make		&Make<Tab>:make
 menutrans &List\ Errors<Tab>:cl		Vpis\ &chyb<Tab>:cl
 menutrans L&ist\ Messages<Tab>:cl!	Vp&is\ zprv<Tab>:cl!
@@ -140,7 +165,7 @@
 menutrans &Update<Tab>:cwin		O&bnovit<Tab>:cwin
 menutrans &Open<Tab>:copen		&Otevt<Tab>:copen
 menutrans &Close<Tab>:cclose		&Zavt<Tab>:cclose
-menutrans &Set\ Compiler		N&astavit\ kompiltor
+menutrans Se&T\ Compiler		N&astavit\ kompiltor
 
 menutrans &Convert\ to\ HEX<Tab>:%!xxd	Pevst\ do\ estnctkovho\ formt&u<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r P&evst\ zpt<Tab>:%!xxd\ -r
@@ -168,7 +193,6 @@
 menutrans &Alternate		&Zmnit
 menutrans &Next			&Dal
 menutrans &Previous		&Pedchoz
-menutrans [No\ File]		[dn\ soubor]
 " }}}
 
 " {{{ Menu Window
@@ -219,6 +243,8 @@
 menutrans &Delete		&Smazat
 menutrans Select\ Blockwise	Vybrat\ blokov
 menutrans Select\ &Word		Vybrat\ &slovo
+menutrans Select\ Pa&ragraph Vybrat\ &odstavec
+menutrans Select\ &Sentence   Vybrat\ v&tu
 menutrans Select\ &Line		Vybrat\ &dek
 menutrans Select\ &Block	Vybrat\ &blok
 menutrans Select\ &All		Vybrat\ &ve
@@ -226,39 +252,57 @@
 
 " {{{ The GUI toolbar
 if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open		Otevt soubor
-    tmenu ToolBar.Save		Uloit soubor
-    tmenu ToolBar.SaveAll		Uloit vechny soubory
-    tmenu ToolBar.Print		Tisk
-    tmenu ToolBar.Undo		Zpt
-    tmenu ToolBar.Redo		Zruit vrcen
-    tmenu ToolBar.Cut		Vyznout
-    tmenu ToolBar.Copy		Koprovat
-    tmenu ToolBar.Paste		Vloit
-    tmenu ToolBar.Find		Hledat...
-    tmenu ToolBar.FindNext	Hledat dal
-    tmenu ToolBar.FindPrev	Hledat pedchoz
-    tmenu ToolBar.Replace		Nahradit...
-    if 0	" disabled; These are in the Windows menu
-      tmenu ToolBar.New		Nov okno
-      tmenu ToolBar.WinSplit	Rozdlit okno
-      tmenu ToolBar.WinMax		Maximalizovat okno
-      tmenu ToolBar.WinMin		Minimalizovat okno
-      tmenu ToolBar.WinClose	Zavt okno
-    endif
-    tmenu ToolBar.LoadSesn	Nast sezen
-    tmenu ToolBar.SaveSesn	Uloit sezen
-    tmenu ToolBar.RunScript	Spustit skript
-    tmenu ToolBar.Make		Spustit make
-    tmenu ToolBar.Shell		Spustit shell
-    tmenu ToolBar.RunCtags	Spustit ctags
-    tmenu ToolBar.TagJump		Skoit na tag pod kurzorem
-    tmenu ToolBar.Help		Npovda
-    tmenu ToolBar.FindHelp	Hledat npovdu k...
-  endfun
+   if exists("*Do_toolbar_tmenu")
+      delfun Do_toolbar_tmenu
+   endif
+   fun Do_toolbar_tmenu()
+      tmenu ToolBar.Open		Otevt soubor
+      tmenu ToolBar.Save		Uloit soubor
+      tmenu ToolBar.SaveAll		Uloit vechny soubory
+      if has("printer") || has("unix")
+         tmenu ToolBar.Print		Tisk
+      endif
+      tmenu ToolBar.Undo		Zpt
+      tmenu ToolBar.Redo		Zruit vrcen
+      tmenu ToolBar.Cut		Vyznout
+      tmenu ToolBar.Copy		Koprovat
+      tmenu ToolBar.Paste		Vloit
+      tmenu ToolBar.Find		Hledat...
+      tmenu ToolBar.FindNext	Hledat dal
+      tmenu ToolBar.FindPrev	Hledat pedchoz
+      tmenu ToolBar.Replace		Nahradit...
+      if 0	" disabled; These are in the Windows menu
+         tmenu ToolBar.New		Nov okno
+         tmenu ToolBar.WinSplit	Rozdlit okno
+         tmenu ToolBar.WinMax		Maximalizovat okno
+         tmenu ToolBar.WinMin		Minimalizovat okno
+         tmenu ToolBar.WinClose	Zavt okno
+      endif
+      tmenu ToolBar.LoadSesn	Nast sezen
+      tmenu ToolBar.SaveSesn	Uloit sezen
+      tmenu ToolBar.RunScript	Spustit skript
+      tmenu ToolBar.Make		Spustit make
+      tmenu ToolBar.Shell		Spustit shell
+      tmenu ToolBar.RunCtags	Spustit ctags
+      tmenu ToolBar.TagJump		Skoit na tag pod kurzorem
+      tmenu ToolBar.Help		Npovda
+      tmenu ToolBar.FindHelp	Hledat npovdu k...
+   endfun
 endif
 " }}}
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[dn soubor]"
+let g:menutrans_help_dialog = "Zadejte hledan pkaz nebo slovo:\n\n\tPidejte i_ pro pkazy vkldacho reimu (nap. i_CTRL-X)\n\tPidejte c_ pro pkazy pkazov dky (nap. c_<Del>)\n\tPidejte ' pro jmno volby (nap. 'shiftwidth')"
+let g:menutrans_path_dialog = "Zadejte cesty pro vyhledvn soubor. Jednotliv cesty oddlte rkou"
+let g:menutrans_tags_dialog = "Zadejte jmna soubor s tagy. Jmna oddlte rkami."
+let g:menutrans_textwidth_dialog = "Zadejte dlku dku (0 pro zakzn formtovn):"
+let g:menutrans_fileformat_dialog = "Vyberte typ konce dk"
+" }}}" 
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+
+
+" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
diff -Naur vim73.orig/runtime/lang/menu_cs_cz.latin1.vim vim73/runtime/lang/menu_cs_cz.latin1.vim
--- vim73.orig/runtime/lang/menu_cs_cz.latin1.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_cs_cz.latin1.vim	2013-08-04 19:09:08.630616480 +0000
@@ -1,3 +1,3 @@
 " Menu Translations:	Czech
 
-source <sfile>:p:h/menu_czech_czech_republic.1252.vim
+source <sfile>:p:h/menu_czech_czech_republic.ascii.vim
diff -Naur vim73.orig/runtime/lang/menu_cs_cz.utf-8.vim vim73/runtime/lang/menu_cs_cz.utf-8.vim
--- vim73.orig/runtime/lang/menu_cs_cz.utf-8.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/lang/menu_cs_cz.utf-8.vim	2013-08-04 19:09:08.633949803 +0000
@@ -0,0 +1,308 @@
+" Menu Translations:    Czech (UTF-8)
+" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
+" Previous maintainer:  Jiri Brezina
+" Based on:             menu.vim (2012-10-21)
+
+" Quit when menu translations have already been done.
+if exists("did_menu_trans")
+   finish
+endif
+
+let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
+scriptencoding utf-8
+
+" {{{ File menu
+menutrans &File				&Soubor
+menutrans &Open\.\.\.<Tab>:e		&Otevřít\.\.\.<Tab>:e
+menutrans Sp&lit-Open\.\.\.<Tab>:sp	Otevřít\ v\ no&vém\ okně\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	Otevřít\ tab\.\.\.<Tab>:tabnew
+menutrans &New<Tab>:enew		&Nový<Tab>:enew
+menutrans &Close<Tab>:close		&Zavřít<Tab>:close
+menutrans &Save<Tab>:w			&Uložit<Tab>:w
+menutrans Save\ &As\.\.\.<Tab>:sav	Uložit\ &jako\.\.\.<Tab>:sav
+if has("printer") || has("unix")
+   menutrans &Print			&Tisk
+endif
+menutrans Sa&ve-Exit<Tab>:wqa		U&ložit\ a\ ukončit<Tab>:wqa
+menutrans E&xit<Tab>:qa			&Ukončit<Tab>:qa
+
+if has("diff")
+   menutrans Split\ &Diff\ with\.\.\.	Rozdělit\ okno\ -\ &Diff\.\.\.
+   menutrans Split\ Patched\ &By\.\.\.	Rozdělit\ okno\ -\ &Patch\.\.\.
+endif
+" }}}
+
+" {{{ Edit menu
+menutrans &Edit				Úpr&avy
+menutrans &Undo<Tab>u			&Zpět<Tab>u
+menutrans &Redo<Tab>^R			Z&rušit\ vrácení<Tab>^R
+menutrans Rep&eat<Tab>\.		&Opakovat<Tab>\.
+menutrans Cu&t<Tab>"+x			&Vyříznout<Tab>"+x
+menutrans &Copy<Tab>"+y			&Kopírovat<Tab>"+y
+menutrans &Paste<Tab>"+gP		V&ložit<Tab>"+gP
+menutrans Put\ &Before<Tab>[p		Vložit\ &před<Tab>[p
+menutrans Put\ &After<Tab>]p		Vloži&t\ za<Tab>]p
+if has("win32") || has("win16")
+   menutrans &Delete<Tab>x			&Smazat<Tab>x
+endif
+menutrans &Select\ All<Tab>ggVG		Vy&brat\ vše<Tab>ggVG
+if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
+   menutrans &Find\.\.\.			&Hledat\.\.\.
+   menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
+else
+   menutrans Find<Tab>/ &Hledat<Tab>/
+   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
+   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
+endif
+menutrans Settings\ &Window		Nastav&ení\ okna
+" {{{2 Edit -1
+menutrans Startup\ &Settings  Počáteční\ &nastavení
+menutrans &Global\ Settings				&Globální\ nastavení
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&Přepnout\ zvýraznění\ vzoru<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Přepnout\ ignorování\ &VERZÁLEK<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Přepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
+menutrans &Context\ lines				Zobrazit\ konte&xt\ kurzoru
+menutrans &Virtual\ Edit				Virtuální\ p&ozice\ kurzoru
+menutrans Never						Nikdy
+menutrans Block\ Selection				Výběr\ Bloku
+menutrans Insert\ mode					Insert\ mód
+menutrans Block\ and\ Insert				Blok\ a\ Insert
+menutrans Always					Vždycky
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Přepnout\ Insert\ mó&d<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Přepnout\ kompatibilní\ režim\ s\ 'vi'<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\.				Nastavit\ &cestu\ k\ prohledávání\.\.\.
+menutrans Ta&g\ Files\.\.\.				Ta&g\ soubory\.\.\.
+menutrans Toggle\ &Toolbar				Přepnout\ &Toolbar
+menutrans Toggle\ &Bottom\ Scrollbar			Př&epnout\ dolní\ rolovací\ lištu
+menutrans Toggle\ &Left\ Scrollbar			Přepnout\ &levou\ rolovací\ lištu
+menutrans Toggle\ &Right\ Scrollbar			Přepnout\ p&ravou\ rolovací\ lištu
+" {{{2 Edit -2
+menutrans F&ile\ Settings				Nastavení\ so&uboru
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Přepnout\ číslování\ řá&dků<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Přepnout\ relativní\ číslování\ řá&dků<Tab>:set\ rnu!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Přepnout\ &List\ mód<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Přepnout\ zala&mování\ řádků<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Přepnout\ zl&om\ ve\ slově<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!		Přepnout\ &expand-tab<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!		Přepnout\ &auto-indent<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!		Přepnout\ &C-indenting<Tab>:set\ cin!
+menutrans &Shiftwidth					Nastav&it\ šířku\ od&sazení
+menutrans Soft\ &Tabstop				Nastavit\ Soft\ &Tabstop
+menutrans Te&xt\ Width\.\.\.				Šířka\ te&xtu\.\.\.
+menutrans &File\ Format\.\.\.				&Formát\ souboru\.\.\.
+" {{{2 Edit -3
+menutrans C&olor\ Scheme		Barevné\ s&chéma
+menutrans &Keymap			Klávesová\ m&apa
+if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
+   menutrans Select\ Fo&nt\.\.\.		Vybrat\ pís&mo\.\.\.
+endif
+" }}}1
+
+" {{{ Programming menu
+menutrans &Tools			Nást&roje
+menutrans &Jump\ to\ this\ tag<Tab>g^]	&Skočit\ na\ tag<Tab>g^]
+menutrans Jump\ &back<Tab>^T		Skočit\ &zpět<Tab>^T
+menutrans Build\ &Tags\ File		&Vytvořit\ soubor\ tagů
+
+if has("spell")
+   menutrans &Spelling			&Kontrola\ pravopisu
+   menutrans &Spell\ Check\ On		&Zapnout\ kontrolu\ pravopisu
+   menutrans Spell\ Check\ &Off		&Vypnout \kontrolu\ pravopisu
+   menutrans To\ &Next\ error<Tab>]s	&Další\ chyba<Tab>]s
+   menutrans To\ &Previous\ error<Tab>[s	&Předchozí\ chyba<Tab>[s
+   menutrans Suggest\ &Corrections<Tab>z=	&Navrhnout\ opravy<Tab>z=
+   menutrans &Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
+   menutrans Set\ language\ to\ "en"	Nastavit\ jazyk\ na\ "en"
+   menutrans Set\ language\ to\ "en_au"	Nastavit\ jazyk\ na\ "en_au"
+   menutrans Set\ language\ to\ "en_ca"	Nastavit\ jazyk\ na\ "en_ca"
+   menutrans Set\ language\ to\ "en_gb"	Nastavit\ jazyk\ na\ "en_gb"
+   menutrans Set\ language\ to\ "en_nz"	Nastavit\ jazyk\ na\ "en_nz"
+   menutrans Set\ language\ to\ "en_us"	Nastavit\ jazyk\ na\ "en_us"
+   menutrans &Find\ More\ Languages	Nalézt\ další\ &jazyky
+   let g:menutrans_set_lang_to = "Nastavit jazyk na"
+endif
+
+if has("Folding")   
+   menutrans &Folding			&Skládání
+   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+   menutrans &View\ Cursor\ Line<Tab>zv	Zobrazit\ řádek\ &kurzoru<Tab>zv
+   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zobrazit\ &pouze\ řádek\ kurzoru\ <Tab>zMzx
+   menutrans C&lose\ more\ folds<Tab>zm	Složit\ &jednu\ úroveň\ skladů<Tab>zm
+   menutrans &Close\ all\ folds<Tab>zM	Složit\ všechny\ sklady<Tab>zM
+   menutrans O&pen\ more\ folds<Tab>zr	Přidat\ jednu\ úroveň\ skladů<Tab>zr
+   menutrans &Open\ all\ folds<Tab>zR	&Otevřít\ všechny\ sklady<Tab>zR
+   menutrans Fold\ Met&hod			&Metoda\ skládání
+   menutrans M&anual			&Ručně
+   menutrans I&ndent			&Odsazení
+   menutrans E&xpression	&Výraz
+   menutrans S&yntax			&Syntaxe
+   menutrans &Diff			&Rozdíly
+   menutrans Ma&rker			&Značky
+   menutrans Create\ &Fold<Tab>zf		Vytvořit\ &sklad<Tab>zf
+   menutrans &Delete\ Fold<Tab>zd		Vymazat\ skla&d<Tab>zd
+   menutrans Delete\ &All\ Folds<Tab>zD	Vymazat\ všechny\ sklady<Tab>zD
+   menutrans Fold\ col&umn\ width		Sloupec\ zob&razení\ skladů
+endif
+
+if has("diff")
+   menutrans &Update			&Obnovit
+   menutrans &Get\ Block			&Sejmout\ Blok
+   menutrans &Put\ Block			&Vložit\ Blok
+endif
+
+menutrans &Make<Tab>:make		&Make<Tab>:make
+menutrans &List\ Errors<Tab>:cl		Výpis\ &chyb<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!	Výp&is\ zpráv<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn		Další\ ch&yba<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp	&Předchozí\ chyba<Tab>:cp
+menutrans &Older\ List<Tab>:cold	Sta&rší\ seznam<Tab>:cold
+menutrans N&ewer\ List<Tab>:cnew	N&ovější\ seznam<Tab>:cnew
+menutrans Error\ &Window		Chybové\ o&kno
+menutrans SeT\ Compiler			Nas&tavení\ kompilátoru
+menutrans &Update<Tab>:cwin		O&bnovit<Tab>:cwin
+menutrans &Open<Tab>:copen		&Otevřít<Tab>:copen
+menutrans &Close<Tab>:cclose		&Zavřít<Tab>:cclose
+menutrans Se&T\ Compiler		N&astavit\ kompilátor
+
+menutrans &Convert\ to\ HEX<Tab>:%!xxd	Převést\ do\ šestnáctkového\ formát&u<Tab>:%!xxd
+menutrans Conve&rt\ back<Tab>:%!xxd\ -r Př&evést\ zpět<Tab>:%!xxd\ -r
+" }}}
+
+" {{{ Syntax menu
+menutrans &Syntax		Synta&xe
+menutrans Set\ '&syntax'\ only	Nastavit\ pouze\ 'synta&x'
+menutrans Set\ '&filetype'\ too	Nastavit\ také\ '&filetype'
+menutrans &Off			&Vypnout
+menutrans &Manual		&Ručně
+menutrans A&utomatic		A&utomaticky
+menutrans on/off\ for\ &This\ file	&Přepnout\ (pro\ tento\ soubor)
+menutrans o&ff\ (this\ file)	vyp&nout\ (pro\ tento\ soubor)
+menutrans Co&lor\ test		Test\ &barev
+menutrans &Highlight\ test	&Test\ zvýrazňování
+menutrans &Convert\ to\ HTML	Převést\ &do\ HTML
+menutrans &Show\ filetypes\ in\ menu	&Zobrazit\ výběr\ možností
+" }}}
+
+" {{{ Menu Buffers
+menutrans &Buffers		&Buffery
+menutrans &Refresh\ menu	&Obnovit\ menu
+menutrans &Delete		Z&rušit
+menutrans &Alternate		&Změnit
+menutrans &Next			&Další
+menutrans &Previous		&Předchozí
+" }}}
+
+" {{{ Menu Window
+menutrans &Window			&Okna
+menutrans &New<Tab>^Wn			&Nové<Tab>^Wn
+menutrans S&plit<Tab>^Ws		&Rozdělit<Tab>^Ws
+menutrans Sp&lit\ To\ #<Tab>^W^^	Ro&zdělit\ na\ #<Tab>^W^^
+menutrans Split\ &Vertically<Tab>^Wv	Rozdělit\ &vertikálně<Tab>^Wv
+menutrans Split\ File\ E&xplorer	Rozdělit\ -\ File\ E&xplorer
+menutrans Move\ &To			&Přesun
+menutrans &Top<Tab>^WK			&Nahoru<Tab>^WK
+menutrans &Bottom<Tab>^WJ		&Dolu<Tab>^WJ
+menutrans &Left\ side<Tab>^WH		&Vlevo<Tab>^WH
+menutrans &Right\ side<Tab>^WL		Vp&ravo<Tab>^WL
+
+menutrans &Close<Tab>^Wc		Zavří&t<Tab>^Wc
+menutrans Close\ &Other(s)<Tab>^Wo	Zavřít\ &ostatní<Tab>^Wo
+menutrans Ne&xt<Tab>^Ww			&Další<Tab>^Ww
+menutrans P&revious<Tab>^WW		&Předchozí<Tab>^WW
+menutrans &Equal\ Size<Tab>^W=		&Stejná\ výška<Tab>^W=
+menutrans &Max\ Height<Tab>^W_		Maximální\ výš&ka<Tab>^W_
+menutrans M&in\ Height<Tab>^W1_		M&inimální\ výška<Tab>^W1_
+menutrans Max\ &Width<Tab>^W\|		&Maximální\ šířka<Tab>^W\|
+menutrans Min\ Widt&h<Tab>^W1\|		Minimální\ šířk&a<Tab>^W1\|
+menutrans Rotate\ &Up<Tab>^WR		Rotovat\ na&horu<Tab>^WR
+menutrans Rotate\ &Down<Tab>^Wr		Rotovat\ &dolů<Tab>^Wr
+
+" {{{ Help menu
+menutrans &Help			&Nápověda
+menutrans &Overview<Tab><F1>	&Přehled<Tab><F1>
+menutrans &User\ Manual		&Uživatelský\ Manuál
+menutrans &How-to\ links	Ho&wto
+menutrans &GUI			&Grafické\ rozhraní
+menutrans &Credits		&Autoři
+menutrans Co&pying		&Licenční\ politika
+menutrans &Sponsor/Register	Sponzorování/&Registrace
+menutrans &Find\.\.\.		&Hledat\.\.\.
+menutrans O&rphans		O&siřelé\ děti
+menutrans &Version		&Verze
+menutrans &About		&O\ aplikaci
+" }}}
+
+" {{{ The popup menu
+menutrans &Undo			&Zpět
+menutrans Cu&t			&Vyříznout
+menutrans &Copy			&Kopírovat
+menutrans &Paste		&Vložit
+menutrans &Delete		&Smazat
+menutrans Select\ Blockwise	Vybrat\ blokově
+menutrans Select\ &Word		Vybrat\ &slovo
+menutrans Select\ Pa&ragraph Vybrat\ &odstavec
+menutrans Select\ &Sentence   Vybrat\ vě&tu
+menutrans Select\ &Line		Vybrat\ &řádek
+menutrans Select\ &Block	Vybrat\ &blok
+menutrans Select\ &All		Vybrat\ &vše
+" }}}
+
+" {{{ The GUI toolbar
+if has("toolbar")
+   if exists("*Do_toolbar_tmenu")
+      delfun Do_toolbar_tmenu
+   endif
+   fun Do_toolbar_tmenu()
+      tmenu ToolBar.Open		Otevřít soubor
+      tmenu ToolBar.Save		Uložit soubor
+      tmenu ToolBar.SaveAll		Uložit všechny soubory
+      if has("printer") || has("unix")
+         tmenu ToolBar.Print		Tisk
+      endif
+      tmenu ToolBar.Undo		Zpět
+      tmenu ToolBar.Redo		Zrušit vrácení
+      tmenu ToolBar.Cut		Vyříznout
+      tmenu ToolBar.Copy		Kopírovat
+      tmenu ToolBar.Paste		Vložit
+      tmenu ToolBar.Find		Hledat...
+      tmenu ToolBar.FindNext	Hledat další
+      tmenu ToolBar.FindPrev	Hledat předchozí
+      tmenu ToolBar.Replace		Nahradit...
+      if 0	" disabled; These are in the Windows menu
+         tmenu ToolBar.New		Nové okno
+         tmenu ToolBar.WinSplit	Rozdělit okno
+         tmenu ToolBar.WinMax		Maximalizovat okno
+         tmenu ToolBar.WinMin		Minimalizovat okno
+         tmenu ToolBar.WinClose	Zavřít okno
+      endif
+      tmenu ToolBar.LoadSesn	Načíst sezení
+      tmenu ToolBar.SaveSesn	Uložit sezení
+      tmenu ToolBar.RunScript	Spustit skript
+      tmenu ToolBar.Make		Spustit make
+      tmenu ToolBar.Shell		Spustit shell
+      tmenu ToolBar.RunCtags	Spustit ctags
+      tmenu ToolBar.TagJump		Skočit na tag pod kurzorem
+      tmenu ToolBar.Help		Nápověda
+      tmenu ToolBar.FindHelp	Hledat nápovědu k...
+   endfun
+endif
+" }}}
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[Žádný soubor]"
+let g:menutrans_help_dialog = "Zadejte hledaný příkaz nebo slovo:\n\n\tPřidejte i_ pro příkazy vkládacího režimu (např. i_CTRL-X)\n\tPřidejte c_ pro příkazy příkazové řádky (např. c_<Del>)\n\tPřidejte ' pro jméno volby (např. 'shiftwidth')"
+let g:menutrans_path_dialog = "Zadejte cesty pro vyhledávání souborů. Jednotlivé cesty oddělte čárkou"
+let g:menutrans_tags_dialog = "Zadejte jména souborů s tagy. Jména oddělte čárkami."
+let g:menutrans_textwidth_dialog = "Zadejte délku řádku (0 pro zakázání formátování):"
+let g:menutrans_fileformat_dialog = "Vyberte typ konce řádků"
+" }}}" 
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+
+
+" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
diff -Naur vim73.orig/runtime/lang/menu_czech_czech_republic.1250.vim vim73/runtime/lang/menu_czech_czech_republic.1250.vim
--- vim73.orig/runtime/lang/menu_czech_czech_republic.1250.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_czech_czech_republic.1250.vim	2013-08-04 19:09:08.633949803 +0000
@@ -1,14 +1,16 @@
-" Menu Translations:	Czech for MS-Windows
-" Maintainer:		Jiri Brezina <brzj@seznam.cz>
-" vim:set foldmethod=marker:
-" $Revision: 1.3 $
-" $Date: 2005/12/19 22:13:30 $
+" Menu Translations:    Czech (CP1250)
+" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
+" Previous maintainer:  Jiri Brezina
+" Based on:             menu.vim (2012-10-21)
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
-  finish
+   finish
 endif
+
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp1250
 
@@ -16,15 +18,21 @@
 menutrans &File				&Soubor
 menutrans &Open\.\.\.<Tab>:e		&Otevt\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp	Otevt\ v\ no&vm\ okn\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	Otevt\ tab\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew		&Nov<Tab>:enew
 menutrans &Close<Tab>:close		&Zavt<Tab>:close
 menutrans &Save<Tab>:w			&Uloit<Tab>:w
 menutrans Save\ &As\.\.\.<Tab>:sav	Uloit\ &jako\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.	Rozdlit\ okno\ -\ &Diff\.\.\.
-menutrans Split\ Patched\ &By\.\.\.	Rozdlit\ okno\ -\ &Patch\.\.\.
-menutrans &Print			&Tisk
-menutrans Sa&ve-Exit<Tab>:wqa		U&loit\ -\ Konec<Tab>:wqa
-menutrans E&xit<Tab>:qa			&Konec<Tab>:qa
+if has("printer") || has("unix")
+   menutrans &Print			&Tisk
+endif
+menutrans Sa&ve-Exit<Tab>:wqa		U&loit\ a\ ukonit<Tab>:wqa
+menutrans E&xit<Tab>:qa			&Ukonit<Tab>:qa
+
+if has("diff")
+   menutrans Split\ &Diff\ with\.\.\.	Rozdlit\ okno\ -\ &Diff\.\.\.
+   menutrans Split\ Patched\ &By\.\.\.	Rozdlit\ okno\ -\ &Patch\.\.\.
+endif
 " }}}
 
 " {{{ Edit menu
@@ -37,24 +45,32 @@
 menutrans &Paste<Tab>"+gP		V&loit<Tab>"+gP
 menutrans Put\ &Before<Tab>[p		Vloit\ &ped<Tab>[p
 menutrans Put\ &After<Tab>]p		Vloi&t\ za<Tab>]p
-menutrans &Delete<Tab>x			&Smazat<Tab>x
+if has("win32") || has("win16")
+   menutrans &Delete<Tab>x			&Smazat<Tab>x
+endif
 menutrans &Select\ All<Tab>ggVG		Vy&brat\ ve<Tab>ggVG
-menutrans &Find\.\.\.			&Hledat\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
-menutrans Options\.\.\.			Volb&y\.\.\.
+if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
+   menutrans &Find\.\.\.			&Hledat\.\.\.
+   menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
+else
+   menutrans Find<Tab>/ &Hledat<Tab>/
+   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
+   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
+endif
 menutrans Settings\ &Window		Nastav&en\ okna
-	" {{{2 Edit -1
+" {{{2 Edit -1
+menutrans Startup\ &Settings  Poten\ &nastaven
 menutrans &Global\ Settings				&Globln\ nastaven
 menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&Pepnout\ zvraznn\ vzoru<Tab>:set\ hls!
 menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Pepnout\ ignorovn\ &VERZLEK<Tab>:set\ ic!
 menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Pepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
 menutrans &Context\ lines				Zobrazit\ konte&xt\ kurzoru
 menutrans &Virtual\ Edit				Virtuln\ p&ozice\ kurzoru
-	menutrans Never						Nikdy
-	menutrans Block\ Selection				Vbr\ Bloku
-	menutrans Insert\ mode					Insert\ md
-	menutrans Block\ and\ Insert				Blok\ a\ Insert
-	menutrans Always					Vdycky
+menutrans Never						Nikdy
+menutrans Block\ Selection				Vbr\ Bloku
+menutrans Insert\ mode					Insert\ md
+menutrans Block\ and\ Insert				Blok\ a\ Insert
+menutrans Always					Vdycky
 menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Pepnout\ Insert\ m&d<Tab>:set\ im!
 menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Pepnout\ kompatibiln\ reim\ s\ 'vi'<Tab>:set\ cp!
 menutrans Search\ &Path\.\.\.				Nastavit\ &cestu\ k\ prohledvn\.\.\.
@@ -63,9 +79,10 @@
 menutrans Toggle\ &Bottom\ Scrollbar			P&epnout\ doln\ rolovac\ litu
 menutrans Toggle\ &Left\ Scrollbar			Pepnout\ &levou\ rolovac\ litu
 menutrans Toggle\ &Right\ Scrollbar			Pepnout\ p&ravou\ rolovac\ litu
-	" {{{2 Edit -2
+" {{{2 Edit -2
 menutrans F&ile\ Settings				Nastaven\ so&uboru
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Pepnout\ slovn\ &dk<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Pepnout\ relativn\ slovn\ &dk<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Pepnout\ &List\ md<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Pepnout\ zala&movn\ dk<Tab>:set\ wrap!
 menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Pepnout\ zl&om\ ve\ slov<Tab>:set\ lbr!
@@ -76,10 +93,12 @@
 menutrans Soft\ &Tabstop				Nastavit\ Soft\ &Tabstop
 menutrans Te&xt\ Width\.\.\.				ka\ te&xtu\.\.\.
 menutrans &File\ Format\.\.\.				&Formt\ souboru\.\.\.
-	" {{{2 Edit -3
+" {{{2 Edit -3
 menutrans C&olor\ Scheme		Barevn\ s&chma
 menutrans &Keymap			Klvesov\ m&apa
-menutrans Select\ Fo&nt\.\.\.		Vybrat\ ps&mo\.\.\.
+if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
+   menutrans Select\ Fo&nt\.\.\.		Vybrat\ ps&mo\.\.\.
+endif
 " }}}1
 
 " {{{ Programming menu
@@ -88,46 +107,52 @@
 menutrans Jump\ &back<Tab>^T		Skoit\ &zpt<Tab>^T
 menutrans Build\ &Tags\ File		&Vytvoit\ soubor\ tag
 
-menutrans &Spelling			&Kontrola\ pravopisu
-menutrans &Spell\ Check\ On		Kontrola\ pravopisu\ &zapnuta
-menutrans Spell\ Check\ &Off		Kontrola\ pravopisu\ &vypnuta
-menutrans To\ Next\ error<Tab>]s	&Dal\ chyba<Tab>]s
-menutrans To\ Previous\ error<Tab>[s	&Pedchoz\ chyba<Tab>[s
-menutrans Suggest\ Corrections<Tab>z?	&Nvrh\ oprav<Tab>z?
-menutrans Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
-menutrans Set\ language\ to\ "en"	Nastav\ jazyk\ na\ "en"
-menutrans Set\ language\ to\ "en_au"	Nastav\ jazyk\ na\ "en_au"
-menutrans Set\ language\ to\ "en_ca"	Nastav\ jazyk\ na\ "en_ca"
-menutrans Set\ language\ to\ "en_gb"	Nastav\ jazyk\ na\ "en_gb"
-menutrans Set\ language\ to\ "en_nz"	Nastav\ jazyk\ na\ "en_nz"
-menutrans Set\ language\ to\ "en_us"	Nastav\ jazyk\ na\ "en_us"
-menutrans Set\ language\ to\ "cz"	Nastav\ jazyk\ na\ "cz"
-menutrans Set\ language\ to\ "cs_cz"	Nastav\ jazyk\ na\ "cs_cz"
-menutrans &Find\ More\ Languages	Nalzt\ dal\ &jazyky
-
-menutrans &Folding			&Foldy
-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv	&Zobrazit\ dek\ kurzoru<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zo&brazit\ pouze\ dek\ kurzoru\ <Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm	&Vyjmout\ jednu\ rove\ fold<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM	Zav&t\ vechny\ foldy<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr	Pidat\ jedn&u\ rove\ fold<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR	&Otevt\ vechny\ foldy<Tab>zR
-menutrans Fold\ Met&hod			Metoda\ &skldn
-	"menutrans M&anual			&Run
-	"menutrans I&ndent			&Odsazen
-	"menutrans E&xpression			&Vraz
-	"menutrans S&yntax			&Syntax
-	"menutrans &Diff			&Diff
-	"menutrans Ma&rker			Ma&rker
-menutrans Create\ &Fold<Tab>zf		Vytvoit\ &fold<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		Vymazat\ fol&d<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	V&ymazat\ vechny\ foldy<Tab>zD
-menutrans Fold\ col&umn\ width		Sloupec\ zob&razen\ fold
-
-menutrans &Update			&Obnovit
-menutrans &Get\ Block			&Sejmout\ Blok
-menutrans &Put\ Block			&Vloit\ Blok
+if has("spell")
+   menutrans &Spelling			&Kontrola\ pravopisu
+   menutrans &Spell\ Check\ On		&Zapnout\ kontrolu\ pravopisu
+   menutrans Spell\ Check\ &Off		&Vypnout \kontrolu\ pravopisu
+   menutrans To\ &Next\ error<Tab>]s	&Dal\ chyba<Tab>]s
+   menutrans To\ &Previous\ error<Tab>[s	&Pedchoz\ chyba<Tab>[s
+   menutrans Suggest\ &Corrections<Tab>z=	&Navrhnout\ opravy<Tab>z=
+   menutrans &Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
+   menutrans Set\ language\ to\ "en"	Nastavit\ jazyk\ na\ "en"
+   menutrans Set\ language\ to\ "en_au"	Nastavit\ jazyk\ na\ "en_au"
+   menutrans Set\ language\ to\ "en_ca"	Nastavit\ jazyk\ na\ "en_ca"
+   menutrans Set\ language\ to\ "en_gb"	Nastavit\ jazyk\ na\ "en_gb"
+   menutrans Set\ language\ to\ "en_nz"	Nastavit\ jazyk\ na\ "en_nz"
+   menutrans Set\ language\ to\ "en_us"	Nastavit\ jazyk\ na\ "en_us"
+   menutrans &Find\ More\ Languages	Nalzt\ dal\ &jazyky
+   let g:menutrans_set_lang_to = "Nastavit jazyk na"
+endif
+
+if has("Folding")   
+   menutrans &Folding			&Skldn
+   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+   menutrans &View\ Cursor\ Line<Tab>zv	Zobrazit\ dek\ &kurzoru<Tab>zv
+   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zobrazit\ &pouze\ dek\ kurzoru\ <Tab>zMzx
+   menutrans C&lose\ more\ folds<Tab>zm	Sloit\ &jednu\ rove\ sklad<Tab>zm
+   menutrans &Close\ all\ folds<Tab>zM	Sloit\ vechny\ sklady<Tab>zM
+   menutrans O&pen\ more\ folds<Tab>zr	Pidat\ jednu\ rove\ sklad<Tab>zr
+   menutrans &Open\ all\ folds<Tab>zR	&Otevt\ vechny\ sklady<Tab>zR
+   menutrans Fold\ Met&hod			&Metoda\ skldn
+   menutrans M&anual			&Run
+   menutrans I&ndent			&Odsazen
+   menutrans E&xpression	&Vraz
+   menutrans S&yntax			&Syntaxe
+   menutrans &Diff			&Rozdly
+   menutrans Ma&rker			&Znaky
+   menutrans Create\ &Fold<Tab>zf		Vytvoit\ &sklad<Tab>zf
+   menutrans &Delete\ Fold<Tab>zd		Vymazat\ skla&d<Tab>zd
+   menutrans Delete\ &All\ Folds<Tab>zD	Vymazat\ vechny\ sklady<Tab>zD
+   menutrans Fold\ col&umn\ width		Sloupec\ zob&razen\ sklad
+endif
+
+if has("diff")
+   menutrans &Update			&Obnovit
+   menutrans &Get\ Block			&Sejmout\ Blok
+   menutrans &Put\ Block			&Vloit\ Blok
+endif
+
 menutrans &Make<Tab>:make		&Make<Tab>:make
 menutrans &List\ Errors<Tab>:cl		Vpis\ &chyb<Tab>:cl
 menutrans L&ist\ Messages<Tab>:cl!	Vp&is\ zprv<Tab>:cl!
@@ -140,7 +165,7 @@
 menutrans &Update<Tab>:cwin		O&bnovit<Tab>:cwin
 menutrans &Open<Tab>:copen		&Otevt<Tab>:copen
 menutrans &Close<Tab>:cclose		&Zavt<Tab>:cclose
-menutrans &Set\ Compiler		N&astavit\ kompiltor
+menutrans Se&T\ Compiler		N&astavit\ kompiltor
 
 menutrans &Convert\ to\ HEX<Tab>:%!xxd	Pevst\ do\ estnctkovho\ formt&u<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r P&evst\ zpt<Tab>:%!xxd\ -r
@@ -168,7 +193,6 @@
 menutrans &Alternate		&Zmnit
 menutrans &Next			&Dal
 menutrans &Previous		&Pedchoz
-menutrans [No\ File]		[dn\ soubor]
 " }}}
 
 " {{{ Menu Window
@@ -219,6 +243,8 @@
 menutrans &Delete		&Smazat
 menutrans Select\ Blockwise	Vybrat\ blokov
 menutrans Select\ &Word		Vybrat\ &slovo
+menutrans Select\ Pa&ragraph Vybrat\ &odstavec
+menutrans Select\ &Sentence   Vybrat\ v&tu
 menutrans Select\ &Line		Vybrat\ &dek
 menutrans Select\ &Block	Vybrat\ &blok
 menutrans Select\ &All		Vybrat\ &ve
@@ -226,39 +252,57 @@
 
 " {{{ The GUI toolbar
 if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open		Otevt soubor
-    tmenu ToolBar.Save		Uloit soubor
-    tmenu ToolBar.SaveAll		Uloit vechny soubory
-    tmenu ToolBar.Print		Tisk
-    tmenu ToolBar.Undo		Zpt
-    tmenu ToolBar.Redo		Zruit vrcen
-    tmenu ToolBar.Cut		Vyznout
-    tmenu ToolBar.Copy		Koprovat
-    tmenu ToolBar.Paste		Vloit
-    tmenu ToolBar.Find		Hledat...
-    tmenu ToolBar.FindNext	Hledat dal
-    tmenu ToolBar.FindPrev	Hledat pedchoz
-    tmenu ToolBar.Replace		Nahradit...
-    if 0	" disabled; These are in the Windows menu
-      tmenu ToolBar.New		Nov okno
-      tmenu ToolBar.WinSplit	Rozdlit okno
-      tmenu ToolBar.WinMax		Maximalizovat okno
-      tmenu ToolBar.WinMin		Minimalizovat okno
-      tmenu ToolBar.WinClose	Zavt okno
-    endif
-    tmenu ToolBar.LoadSesn	Nast sezen
-    tmenu ToolBar.SaveSesn	Uloit sezen
-    tmenu ToolBar.RunScript	Spustit skript
-    tmenu ToolBar.Make		Spustit make
-    tmenu ToolBar.Shell		Spustit shell
-    tmenu ToolBar.RunCtags	Spustit ctags
-    tmenu ToolBar.TagJump		Skoit na tag pod kurzorem
-    tmenu ToolBar.Help		Npovda
-    tmenu ToolBar.FindHelp	Hledat npovdu k...
-  endfun
+   if exists("*Do_toolbar_tmenu")
+      delfun Do_toolbar_tmenu
+   endif
+   fun Do_toolbar_tmenu()
+      tmenu ToolBar.Open		Otevt soubor
+      tmenu ToolBar.Save		Uloit soubor
+      tmenu ToolBar.SaveAll		Uloit vechny soubory
+      if has("printer") || has("unix")
+         tmenu ToolBar.Print		Tisk
+      endif
+      tmenu ToolBar.Undo		Zpt
+      tmenu ToolBar.Redo		Zruit vrcen
+      tmenu ToolBar.Cut		Vyznout
+      tmenu ToolBar.Copy		Koprovat
+      tmenu ToolBar.Paste		Vloit
+      tmenu ToolBar.Find		Hledat...
+      tmenu ToolBar.FindNext	Hledat dal
+      tmenu ToolBar.FindPrev	Hledat pedchoz
+      tmenu ToolBar.Replace		Nahradit...
+      if 0	" disabled; These are in the Windows menu
+         tmenu ToolBar.New		Nov okno
+         tmenu ToolBar.WinSplit	Rozdlit okno
+         tmenu ToolBar.WinMax		Maximalizovat okno
+         tmenu ToolBar.WinMin		Minimalizovat okno
+         tmenu ToolBar.WinClose	Zavt okno
+      endif
+      tmenu ToolBar.LoadSesn	Nast sezen
+      tmenu ToolBar.SaveSesn	Uloit sezen
+      tmenu ToolBar.RunScript	Spustit skript
+      tmenu ToolBar.Make		Spustit make
+      tmenu ToolBar.Shell		Spustit shell
+      tmenu ToolBar.RunCtags	Spustit ctags
+      tmenu ToolBar.TagJump		Skoit na tag pod kurzorem
+      tmenu ToolBar.Help		Npovda
+      tmenu ToolBar.FindHelp	Hledat npovdu k...
+   endfun
 endif
 " }}}
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[dn soubor]"
+let g:menutrans_help_dialog = "Zadejte hledan pkaz nebo slovo:\n\n\tPidejte i_ pro pkazy vkldacho reimu (nap. i_CTRL-X)\n\tPidejte c_ pro pkazy pkazov dky (nap. c_<Del>)\n\tPidejte ' pro jmno volby (nap. 'shiftwidth')"
+let g:menutrans_path_dialog = "Zadejte cesty pro vyhledvn soubor. Jednotliv cesty oddlte rkou"
+let g:menutrans_tags_dialog = "Zadejte jmna soubor s tagy. Jmna oddlte rkami."
+let g:menutrans_textwidth_dialog = "Zadejte dlku dku (0 pro zakzn formtovn):"
+let g:menutrans_fileformat_dialog = "Vyberte typ konce dk"
+" }}}" 
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+
+
+" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
diff -Naur vim73.orig/runtime/lang/menu_czech_czech_republic.ascii.vim vim73/runtime/lang/menu_czech_czech_republic.ascii.vim
--- vim73.orig/runtime/lang/menu_czech_czech_republic.ascii.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_czech_czech_republic.ascii.vim	2013-08-04 19:09:08.637283127 +0000
@@ -1,30 +1,38 @@
-" Menu Translations:	Czech for systems without localization
-" Maintainer:		Jiri Brezina <brzj@seznam.cz>
-" vim:set foldmethod=marker:
-" $Revision: 1.3 $
-" $Date: 2005/12/19 22:06:56 $
+" Menu Translations:    Czech (latin1 - w/o diacritics)
+" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
+" Previous maintainer:  Jiri Brezina
+" Based on:             menu.vim (2012-10-21)
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
-  finish
+   finish
 endif
-let did_menu_trans = 1
 
+let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
+scriptencoding latin1
 
 " {{{ File menu
 menutrans &File				&Soubor
 menutrans &Open\.\.\.<Tab>:e		&Otevrit\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp	Otevrit\ v\ no&vem\ okne\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	Otevrit\ tab\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew		&Novy<Tab>:enew
 menutrans &Close<Tab>:close		&Zavrit<Tab>:close
 menutrans &Save<Tab>:w			&Ulozit<Tab>:w
 menutrans Save\ &As\.\.\.<Tab>:sav	Ulozit\ &jako\.\.\.<Tab>:sav
-menutrans Split\ &Diff\ with\.\.\.	Rozdelit\ okno\ -\ &Diff\.\.\.
-menutrans Split\ Patched\ &By\.\.\.	Rozdelit\ okno\ -\ &Patch\.\.\.
-menutrans &Print			&Tisk
-menutrans Sa&ve-Exit<Tab>:wqa		U&lozit\ -\ Konec<Tab>:wqa
-menutrans E&xit<Tab>:qa			&Konec<Tab>:qa
+if has("printer") || has("unix")
+   menutrans &Print			&Tisk
+endif
+menutrans Sa&ve-Exit<Tab>:wqa		U&lozit\ a\ ukoncit<Tab>:wqa
+menutrans E&xit<Tab>:qa			&Ukoncit<Tab>:qa
+
+if has("diff")
+   menutrans Split\ &Diff\ with\.\.\.	Rozdelit\ okno\ -\ &Diff\.\.\.
+   menutrans Split\ Patched\ &By\.\.\.	Rozdelit\ okno\ -\ &Patch\.\.\.
+endif
 " }}}
 
 " {{{ Edit menu
@@ -37,24 +45,32 @@
 menutrans &Paste<Tab>"+gP		V&lozit<Tab>"+gP
 menutrans Put\ &Before<Tab>[p		Vlozit\ &pred<Tab>[p
 menutrans Put\ &After<Tab>]p		Vlozi&t\ za<Tab>]p
-menutrans &Delete<Tab>x			&Smazat<Tab>x
+if has("win32") || has("win16")
+   menutrans &Delete<Tab>x			&Smazat<Tab>x
+endif
 menutrans &Select\ All<Tab>ggVG		Vy&brat\ vse<Tab>ggVG
-menutrans &Find\.\.\.			&Hledat\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
-menutrans Options\.\.\.			Volb&y\.\.\.
+if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
+   menutrans &Find\.\.\.			&Hledat\.\.\.
+   menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
+else
+   menutrans Find<Tab>/ &Hledat<Tab>/
+   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
+   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
+endif
 menutrans Settings\ &Window		Nastav&eni\ okna
-	" {{{2 Edit -1
+" {{{2 Edit -1
+menutrans Startup\ &Settings  Pocatecni\ &nastaveni
 menutrans &Global\ Settings				&Globalni\ nastaveni
 menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&Prepnout\ zvyrazneni\ vzoru<Tab>:set\ hls!
 menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Prepnout\ ignorovani\ &VERZALEK<Tab>:set\ ic!
 menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Prepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
 menutrans &Context\ lines				Zobrazit\ konte&xt\ kurzoru
 menutrans &Virtual\ Edit				Virtualni\ p&ozice\ kurzoru
-	menutrans Never						Nikdy
-	menutrans Block\ Selection				Vyber\ Bloku
-	menutrans Insert\ mode					Insert\ mod
-	menutrans Block\ and\ Insert				Blok\ a\ Insert
-	menutrans Always					Vzdycky
+menutrans Never						Nikdy
+menutrans Block\ Selection				Vyber\ Bloku
+menutrans Insert\ mode					Insert\ mod
+menutrans Block\ and\ Insert				Blok\ a\ Insert
+menutrans Always					Vzdycky
 menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Prepnout\ Insert\ mo&d<Tab>:set\ im!
 menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Prepnout\ kompatibilni\ rezim\ s\ 'vi'<Tab>:set\ cp!
 menutrans Search\ &Path\.\.\.				Nastavit\ &cestu\ k\ prohledavani\.\.\.
@@ -63,9 +79,10 @@
 menutrans Toggle\ &Bottom\ Scrollbar			Pr&epnout\ dolni\ rolovaci\ listu
 menutrans Toggle\ &Left\ Scrollbar			Prepnout\ &levou\ rolovaci\ listu
 menutrans Toggle\ &Right\ Scrollbar			Prepnout\ p&ravou\ rolovaci\ listu
-	" {{{2 Edit -2
+" {{{2 Edit -2
 menutrans F&ile\ Settings				Nastaveni\ so&uboru
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Prepnout\ cislovani\ ra&dku<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Prepnout\ relativni\ cislovani\ ra&dku<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Prepnout\ &List\ mod<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Prepnout\ zala&movani\ radku<Tab>:set\ wrap!
 menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Prepnout\ zl&om\ ve\ slove<Tab>:set\ lbr!
@@ -76,10 +93,12 @@
 menutrans Soft\ &Tabstop				Nastavit\ Soft\ &Tabstop
 menutrans Te&xt\ Width\.\.\.				Sirka\ te&xtu\.\.\.
 menutrans &File\ Format\.\.\.				&Format\ souboru\.\.\.
-	" {{{2 Edit -3
+" {{{2 Edit -3
 menutrans C&olor\ Scheme		Barevne\ s&chema
 menutrans &Keymap			Klavesova\ m&apa
-menutrans Select\ Fo&nt\.\.\.		Vybrat\ pis&mo\.\.\.
+if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
+   menutrans Select\ Fo&nt\.\.\.		Vybrat\ pis&mo\.\.\.
+endif
 " }}}1
 
 " {{{ Programming menu
@@ -88,46 +107,52 @@
 menutrans Jump\ &back<Tab>^T		Skocit\ &zpet<Tab>^T
 menutrans Build\ &Tags\ File		&Vytvorit\ soubor\ tagu
 
-menutrans &Spelling			&Kontrola\ pravopisu
-menutrans &Spell\ Check\ On		Kontrola\ pravopisu\ &zapnuta
-menutrans Spell\ Check\ &Off		Kontrola\ pravopisu\ &vypnuta
-menutrans To\ Next\ error<Tab>]s	&Dalsi\ chyba<Tab>]s
-menutrans To\ Previous\ error<Tab>[s	&Predchozi\ chyba<Tab>[s
-menutrans Suggest\ Corrections<Tab>z?	&Navrh\ oprav<Tab>z?
-menutrans Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
-menutrans Set\ language\ to\ "en"	Nastav\ jazyk\ na\ "en"
-menutrans Set\ language\ to\ "en_au"	Nastav\ jazyk\ na\ "en_au"
-menutrans Set\ language\ to\ "en_ca"	Nastav\ jazyk\ na\ "en_ca"
-menutrans Set\ language\ to\ "en_gb"	Nastav\ jazyk\ na\ "en_gb"
-menutrans Set\ language\ to\ "en_nz"	Nastav\ jazyk\ na\ "en_nz"
-menutrans Set\ language\ to\ "en_us"	Nastav\ jazyk\ na\ "en_us"
-menutrans Set\ language\ to\ "cz"	Nastav\ jazyk\ na\ "cz"
-menutrans Set\ language\ to\ "cs_cz"	Nastav\ jazyk\ na\ "cs_cz"
-menutrans &Find\ More\ Languages	Nalezt\ dalsi\ &jazyky
-
-menutrans &Folding			&Foldy
-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
-menutrans &View\ Cursor\ Line<Tab>zv	&Zobrazit\ radek\ kurzoru<Tab>zv
-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zo&brazit\ pouze\ radek\ kurzoru\ <Tab>zMzx
-menutrans C&lose\ more\ folds<Tab>zm	&Vyjmout\ jednu\ uroven\ foldu<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM	Zavri&t\ vsechny\ foldy<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr	Pridat\ jedn&u\ uroven\ foldu<Tab>zr
-menutrans &Open\ all\ folds<Tab>zR	&Otevrit\ vsechny\ foldy<Tab>zR
-menutrans Fold\ Met&hod			Metoda\ &skladani
-	"menutrans M&anual			&Rucne
-	"menutrans I&ndent			&Odsazeni
-	"menutrans E&xpression			&Vyraz
-	"menutrans S&yntax			&Syntax
-	"menutrans &Diff			&Diff
-	"menutrans Ma&rker			Ma&rker
-menutrans Create\ &Fold<Tab>zf		Vytvorit\ &fold<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		Vymazat\ fol&d<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	V&ymazat\ vsechny\ foldy<Tab>zD
-menutrans Fold\ col&umn\ width		Sloupec\ zob&razeni\ foldu
-
-menutrans &Update			&Obnovit
-menutrans &Get\ Block			&Sejmout\ Blok
-menutrans &Put\ Block			&Vlozit\ Blok
+if has("spell")
+   menutrans &Spelling			&Kontrola\ pravopisu
+   menutrans &Spell\ Check\ On		&Zapnout\ kontrolu\ pravopisu
+   menutrans Spell\ Check\ &Off		&Vypnout \kontrolu\ pravopisu
+   menutrans To\ &Next\ error<Tab>]s	&Dalsi\ chyba<Tab>]s
+   menutrans To\ &Previous\ error<Tab>[s	&Predchozi\ chyba<Tab>[s
+   menutrans Suggest\ &Corrections<Tab>z=	&Navrhnout\ opravy<Tab>z=
+   menutrans &Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
+   menutrans Set\ language\ to\ "en"	Nastavit\ jazyk\ na\ "en"
+   menutrans Set\ language\ to\ "en_au"	Nastavit\ jazyk\ na\ "en_au"
+   menutrans Set\ language\ to\ "en_ca"	Nastavit\ jazyk\ na\ "en_ca"
+   menutrans Set\ language\ to\ "en_gb"	Nastavit\ jazyk\ na\ "en_gb"
+   menutrans Set\ language\ to\ "en_nz"	Nastavit\ jazyk\ na\ "en_nz"
+   menutrans Set\ language\ to\ "en_us"	Nastavit\ jazyk\ na\ "en_us"
+   menutrans &Find\ More\ Languages	Nalezt\ dalsi\ &jazyky
+   let g:menutrans_set_lang_to = "Nastavit jazyk na"
+endif
+
+if has("Folding")   
+   menutrans &Folding			&Skladani
+   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+   menutrans &View\ Cursor\ Line<Tab>zv	Zobrazit\ radek\ &kurzoru<Tab>zv
+   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zobrazit\ &pouze\ radek\ kurzoru\ <Tab>zMzx
+   menutrans C&lose\ more\ folds<Tab>zm	Slozit\ &jednu\ uroven\ skladu<Tab>zm
+   menutrans &Close\ all\ folds<Tab>zM	Slozit\ vsechny\ sklady<Tab>zM
+   menutrans O&pen\ more\ folds<Tab>zr	Pridat\ jednu\ uroven\ skladu<Tab>zr
+   menutrans &Open\ all\ folds<Tab>zR	&Otevrit\ vsechny\ sklady<Tab>zR
+   menutrans Fold\ Met&hod			&Metoda\ skladani
+   menutrans M&anual			&Rucne
+   menutrans I&ndent			&Odsazeni
+   menutrans E&xpression	&Vyraz
+   menutrans S&yntax			&Syntaxe
+   menutrans &Diff			&Rozdily
+   menutrans Ma&rker			&Znacky
+   menutrans Create\ &Fold<Tab>zf		Vytvorit\ &sklad<Tab>zf
+   menutrans &Delete\ Fold<Tab>zd		Vymazat\ skla&d<Tab>zd
+   menutrans Delete\ &All\ Folds<Tab>zD	Vymazat\ vsechny\ sklady<Tab>zD
+   menutrans Fold\ col&umn\ width		Sloupec\ zob&razeni\ skladu
+endif
+
+if has("diff")
+   menutrans &Update			&Obnovit
+   menutrans &Get\ Block			&Sejmout\ Blok
+   menutrans &Put\ Block			&Vlozit\ Blok
+endif
+
 menutrans &Make<Tab>:make		&Make<Tab>:make
 menutrans &List\ Errors<Tab>:cl		Vypis\ &chyb<Tab>:cl
 menutrans L&ist\ Messages<Tab>:cl!	Vyp&is\ zprav<Tab>:cl!
@@ -140,7 +165,7 @@
 menutrans &Update<Tab>:cwin		O&bnovit<Tab>:cwin
 menutrans &Open<Tab>:copen		&Otevrit<Tab>:copen
 menutrans &Close<Tab>:cclose		&Zavrit<Tab>:cclose
-menutrans &Set\ Compiler		N&astavit\ kompilator
+menutrans Se&T\ Compiler		N&astavit\ kompilator
 
 menutrans &Convert\ to\ HEX<Tab>:%!xxd	Prevest\ do\ sestnactkoveho\ format&u<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r Pr&evest\ zpet<Tab>:%!xxd\ -r
@@ -168,7 +193,6 @@
 menutrans &Alternate		&Zmenit
 menutrans &Next			&Dalsi
 menutrans &Previous		&Predchozi
-menutrans [No\ File]		[Zadny\ soubor]
 " }}}
 
 " {{{ Menu Window
@@ -219,6 +243,8 @@
 menutrans &Delete		&Smazat
 menutrans Select\ Blockwise	Vybrat\ blokove
 menutrans Select\ &Word		Vybrat\ &slovo
+menutrans Select\ Pa&ragraph Vybrat\ &odstavec
+menutrans Select\ &Sentence   Vybrat\ ve&tu
 menutrans Select\ &Line		Vybrat\ &radek
 menutrans Select\ &Block	Vybrat\ &blok
 menutrans Select\ &All		Vybrat\ &vse
@@ -226,39 +252,57 @@
 
 " {{{ The GUI toolbar
 if has("toolbar")
-  if exists("*Do_toolbar_tmenu")
-    delfun Do_toolbar_tmenu
-  endif
-  fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open		Otevrit soubor
-    tmenu ToolBar.Save		Ulozit soubor
-    tmenu ToolBar.SaveAll		Ulozit vsechny soubory
-    tmenu ToolBar.Print		Tisk
-    tmenu ToolBar.Undo		Zpet
-    tmenu ToolBar.Redo		Zrusit vraceni
-    tmenu ToolBar.Cut		Vyriznout
-    tmenu ToolBar.Copy		Kopirovat
-    tmenu ToolBar.Paste		Vlozit
-    tmenu ToolBar.Find		Hledat...
-    tmenu ToolBar.FindNext	Hledat dalsi
-    tmenu ToolBar.FindPrev	Hledat predchozi
-    tmenu ToolBar.Replace		Nahradit...
-    if 0	" disabled; These are in the Windows menu
-      tmenu ToolBar.New		Nove okno
-      tmenu ToolBar.WinSplit	Rozdelit okno
-      tmenu ToolBar.WinMax		Maximalizovat okno
-      tmenu ToolBar.WinMin		Minimalizovat okno
-      tmenu ToolBar.WinClose	Zavrit okno
-    endif
-    tmenu ToolBar.LoadSesn	Nacist sezeni
-    tmenu ToolBar.SaveSesn	Ulozit sezeni
-    tmenu ToolBar.RunScript	Spustit skript
-    tmenu ToolBar.Make		Spustit make
-    tmenu ToolBar.Shell		Spustit shell
-    tmenu ToolBar.RunCtags	Spustit ctags
-    tmenu ToolBar.TagJump		Skocit na tag pod kurzorem
-    tmenu ToolBar.Help		Napoveda
-    tmenu ToolBar.FindHelp	Hledat napovedu k...
-  endfun
+   if exists("*Do_toolbar_tmenu")
+      delfun Do_toolbar_tmenu
+   endif
+   fun Do_toolbar_tmenu()
+      tmenu ToolBar.Open		Otevrit soubor
+      tmenu ToolBar.Save		Ulozit soubor
+      tmenu ToolBar.SaveAll		Ulozit vsechny soubory
+      if has("printer") || has("unix")
+         tmenu ToolBar.Print		Tisk
+      endif
+      tmenu ToolBar.Undo		Zpet
+      tmenu ToolBar.Redo		Zrusit vraceni
+      tmenu ToolBar.Cut		Vyriznout
+      tmenu ToolBar.Copy		Kopirovat
+      tmenu ToolBar.Paste		Vlozit
+      tmenu ToolBar.Find		Hledat...
+      tmenu ToolBar.FindNext	Hledat dalsi
+      tmenu ToolBar.FindPrev	Hledat predchozi
+      tmenu ToolBar.Replace		Nahradit...
+      if 0	" disabled; These are in the Windows menu
+         tmenu ToolBar.New		Nove okno
+         tmenu ToolBar.WinSplit	Rozdelit okno
+         tmenu ToolBar.WinMax		Maximalizovat okno
+         tmenu ToolBar.WinMin		Minimalizovat okno
+         tmenu ToolBar.WinClose	Zavrit okno
+      endif
+      tmenu ToolBar.LoadSesn	Nacist sezeni
+      tmenu ToolBar.SaveSesn	Ulozit sezeni
+      tmenu ToolBar.RunScript	Spustit skript
+      tmenu ToolBar.Make		Spustit make
+      tmenu ToolBar.Shell		Spustit shell
+      tmenu ToolBar.RunCtags	Spustit ctags
+      tmenu ToolBar.TagJump		Skocit na tag pod kurzorem
+      tmenu ToolBar.Help		Napoveda
+      tmenu ToolBar.FindHelp	Hledat napovedu k...
+   endfun
 endif
 " }}}
+
+" {{{ DIALOG TEXTS
+let g:menutrans_no_file = "[Zadny soubor]"
+let g:menutrans_help_dialog = "Zadejte hledany prikaz nebo slovo:\n\n\tPridejte i_ pro prikazy vkladaciho rezimu (napr. i_CTRL-X)\n\tPridejte c_ pro prikazy prikazove radky (napr. c_<Del>)\n\tPridejte ' pro jmeno volby (napr. 'shiftwidth')"
+let g:menutrans_path_dialog = "Zadejte cesty pro vyhledavani souboru. Jednotlive cesty oddelte carkou"
+let g:menutrans_tags_dialog = "Zadejte jmena souboru s tagy. Jmena oddelte carkami."
+let g:menutrans_textwidth_dialog = "Zadejte delku radku (0 pro zakazani formatovani):"
+let g:menutrans_fileformat_dialog = "Vyberte typ konce radku"
+" }}}" 
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
+
+
+" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
diff -Naur vim73.orig/runtime/lang/menu_de_de.latin1.vim vim73/runtime/lang/menu_de_de.latin1.vim
--- vim73.orig/runtime/lang/menu_de_de.latin1.vim	2010-05-16 13:23:48.000000000 +0000
+++ vim73/runtime/lang/menu_de_de.latin1.vim	2013-08-04 19:09:08.640616450 +0000
@@ -10,6 +10,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -302,3 +304,6 @@
 let g:menutrans_textwidth_dialog = "Geben Sie eine neue Text-Breite ein (oder 0, um die Formatierung abzuschalten)"
 let g:menutrans_fileformat_dialog = "Whlen Sie ein Datei-Format aus"
 " }}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_eo.utf-8.vim vim73/runtime/lang/menu_eo.utf-8.vim
--- vim73.orig/runtime/lang/menu_eo.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_eo.utf-8.vim	2013-08-04 19:09:08.647283097 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:	Esperanto
 " Maintainer:		Dominique PELLE <dominique.pelle@free.fr>
-" Last Change:		2008 Mar 01
+" Last Change:		2012 May 01
 " 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -455,3 +457,6 @@
 menutrans Co&lor\ test				Testo\ de\ &koloroj
 menutrans &Highlight\ test			Testo\ de\ &emfazo
 menutrans &Convert\ to\ HTML			Konverti\ al\ &HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_es_es.latin1.vim vim73/runtime/lang/menu_es_es.latin1.vim
--- vim73.orig/runtime/lang/menu_es_es.latin1.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_es_es.latin1.vim	2013-08-04 19:09:08.650616420 +0000
@@ -2,7 +2,7 @@
 " Previous translator:	Alejandro Lpez-Valencia <dradul@users.sourceforge.net>
 " Last translator:	Omar Campagne Polaino <ocampagne@gmail.com>
 " Version:		7.2.245
-" Last Change:		2009 Sep 03
+" Last Change:		2012 May 01
 "
 
 " Quit when menu translations have already been done.
@@ -10,6 +10,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252,
 " iso-8859-15 without conversion as well.
@@ -316,3 +318,6 @@
 
 " Find Help dialog text
 let g:menutrans_help_dialog = "Introduzca un nombre de comando o palabra para obtener ayuda;\n\nAnteponga i_ para comandos de entrada (e.g.: i_CTRL-X)\nAnteponga c_ para comandos de la lnea de comandos (e.g.: c_<Del>)\nAnteponga ` para un nombre de opcin (e.g.: `shiftwidth`)"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_fi_fi.latin1.vim vim73/runtime/lang/menu_fi_fi.latin1.vim
--- vim73.orig/runtime/lang/menu_fi_fi.latin1.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_fi_fi.latin1.vim	2013-08-04 19:09:08.657283067 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:	Finnish
 " Maintainer:		Flammie Pirinen <flammie@iki.fi>
-" Last Change:		2007 Sep 04
+" Last Change:		2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Translations should be in latin1, if it requires latin9 or even unicode,
 " change this:
@@ -470,4 +472,7 @@
   tmenu ToolBar.FindHelp			Etsi ohjeesta
 endfun
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: set fileencoding=latin1
diff -Naur vim73.orig/runtime/lang/menu_fr_fr.latin1.vim vim73/runtime/lang/menu_fr_fr.latin1.vim
--- vim73.orig/runtime/lang/menu_fr_fr.latin1.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_fr_fr.latin1.vim	2013-08-04 19:09:08.660616390 +0000
@@ -2,13 +2,15 @@
 " Maintainer:		Adrien Beau <version.francaise@free.fr>
 " First Version:	Francois Thunus <thunus@systran.fr>
 " Last Modification:    David Blanchet <david.blanchet@free.fr>
-" Last Change:		2006 Apr 30
+" Last Change:		2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -466,3 +468,6 @@
 menutrans Co&lor\ test				Tester\ les\ co&uleurs
 menutrans &Highlight\ test			Tester\ les\ g&roupes\ de\ surbrillance
 menutrans &Convert\ to\ HTML			Con&vertir\ en\ HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_hu_hu.iso_8859-2.vim vim73/runtime/lang/menu_hu_hu.iso_8859-2.vim
--- vim73.orig/runtime/lang/menu_hu_hu.iso_8859-2.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_hu_hu.iso_8859-2.vim	2013-08-04 19:09:08.667283037 +0000
@@ -1,7 +1,7 @@
 " Menu Translations:	Hungarian (Magyar)
 " Original Translation:	Zoltn rpdffy
 " Maintained By:	Kontra Gergely <kgergely@mcl.hu>
-" Last Change:		2003 May 31
+" Last Change:		2012 May 01
 " I'm working on defining (unaccented) hotkeys for everything.
 " I want to remove y and z hotkeys, because on the hungarian keymap they're at
 " a differrent place.
@@ -27,6 +27,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding iso-8859-2
 
@@ -256,3 +258,6 @@
 let g:menutrans_tags_dialog = "rd be a tag fjl lehetsges elrsi tjait, vesszvel elvlasztva"
 let g:menutrans_textwidth_dialog = "rd be a szveg szlessgt (0 = formzs kikapcsolva)"
 let g:menutrans_fileformat_dialog = "Vlaszd ki a fjl formtumt"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_hu_hu.utf-8.vim vim73/runtime/lang/menu_hu_hu.utf-8.vim
--- vim73.orig/runtime/lang/menu_hu_hu.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_hu_hu.utf-8.vim	2013-08-04 19:09:08.667283037 +0000
@@ -1,7 +1,7 @@
 " Menu Translations:	Hungarian (Magyar)
 " Original Translation:	Zoltán Árpádffy
 " Maintained By:	Kontra Gergely <kgergely@mcl.hu>
-" Last Change:		2004 Jun 10
+" Last Change:		2012 May 01
 "
 " This file was converted from menu_hu_hu.iso_8859-2.vim.  See there for
 " remarks.
@@ -11,6 +11,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -240,3 +242,6 @@
 let g:menutrans_tags_dialog = "Írd be a tag fájl lehetséges elérési útjait, vesszővel elválasztva"
 let g:menutrans_textwidth_dialog = "Írd be a szöveg szélességét (0 = formázás kikapcsolva)"
 let g:menutrans_fileformat_dialog = "Válaszd ki a fájl formátumát"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_it_it.latin1.vim vim73/runtime/lang/menu_it_it.latin1.vim
--- vim73.orig/runtime/lang/menu_it_it.latin1.vim	2010-08-13 07:50:32.000000000 +0000
+++ vim73/runtime/lang/menu_it_it.latin1.vim	2013-08-04 19:09:08.670616360 +0000
@@ -2,13 +2,15 @@
 " Maintainer:		Antonio Colombo <azc100@gmail.com>
 "			Vlad Sandrini <vlad.gently@gmail.com>
 "			Luciano Montanaro <mikelima@cirulla.net>
-" Last Change:	2010 Ago 13
+" Last Change:	2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding iso-8859-1
 
@@ -348,4 +350,7 @@
   endfun
 endif
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: set sw=2 :
diff -Naur vim73.orig/runtime/lang/menu_ja.cp932.vim vim73/runtime/lang/menu_ja.cp932.vim
--- vim73.orig/runtime/lang/menu_ja.cp932.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_ja.cp932.vim	2013-08-04 19:09:08.673949683 +0000
@@ -1,5 +1,8 @@
 " Menu Translations:	Japanese (for Windows)
-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:		29-Apr-2004.
+" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:		15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 source <sfile>:p:h/menu_japanese_japan.932.vim
diff -Naur vim73.orig/runtime/lang/menu_ja.euc-jp.vim vim73/runtime/lang/menu_ja.euc-jp.vim
--- vim73.orig/runtime/lang/menu_ja.euc-jp.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_ja.euc-jp.vim	2013-08-04 19:09:08.677283006 +0000
@@ -1,6 +1,9 @@
 " Menu Translations:	Japanese (for UNIX)
-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:		08:50:47 25-Mar-2001.
+" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:		15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " eucjp is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
diff -Naur vim73.orig/runtime/lang/menu_ja.eucjp.vim vim73/runtime/lang/menu_ja.eucjp.vim
--- vim73.orig/runtime/lang/menu_ja.eucjp.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_ja.eucjp.vim	2013-08-04 19:09:08.677283006 +0000
@@ -1,6 +1,9 @@
 " Menu Translations:	Japanese (for UNIX)
-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:		08:50:47 25-Mar-2001.
+" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:		15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " eucjp is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
diff -Naur vim73.orig/runtime/lang/menu_ja.ujis.vim vim73/runtime/lang/menu_ja.ujis.vim
--- vim73.orig/runtime/lang/menu_ja.ujis.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_ja.ujis.vim	2013-08-04 19:09:08.677283006 +0000
@@ -1,6 +1,9 @@
 " Menu Translations:	Japanese (for UNIX)
-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:		08:50:47 25-Mar-2001.
+" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:		15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " ujis is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
diff -Naur vim73.orig/runtime/lang/menu_ja_jp.cp932.vim vim73/runtime/lang/menu_ja_jp.cp932.vim
--- vim73.orig/runtime/lang/menu_ja_jp.cp932.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_ja_jp.cp932.vim	2013-08-04 19:09:08.680616330 +0000
@@ -1,5 +1,8 @@
 " Menu Translations:	Japanese (for Windows)
-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:		29-Apr-2004.
+" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:		15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 source <sfile>:p:h/menu_japanese_japan.932.vim
diff -Naur vim73.orig/runtime/lang/menu_ja_jp.euc-jp.vim vim73/runtime/lang/menu_ja_jp.euc-jp.vim
--- vim73.orig/runtime/lang/menu_ja_jp.euc-jp.vim	2010-05-15 16:15:11.000000000 +0000
+++ vim73/runtime/lang/menu_ja_jp.euc-jp.vim	2013-08-04 19:09:08.680616330 +0000
@@ -1,14 +1,19 @@
 " vi:set ts=8 sts=8 sw=8 tw=0:
 "
 " Menu Translations:	Japanese (EUC-JP)
-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:		18-Apr-2006.
+" Translated By:	MURAOKA Taro  <koron.kaoriya@gmail.com>
+" Last Change:		12-May-2013.
+"
+" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding euc-jp
 
@@ -99,6 +104,8 @@
 menutrans F&ile\ Settings		ե(&I)
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
 	\	ֹɽ(&N)<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
+	\	йֹɽ(&V)<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!
 	\ ꥹȥ⡼(&L)<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
@@ -149,7 +156,7 @@
 " Tools.Spelling Menu
 menutrans &Spelling			ڥ(&S)
 menutrans &Spell\ Check\ On		ڥåͭ(&S)
-menutrans Spell\ Check\ &Off		ڥåͭ(&O)
+menutrans Spell\ Check\ &Off		ڥå̵(&O)
 menutrans To\ &Next\ error<Tab>]s	Υ顼(&N)<Tab>]s
 menutrans To\ &Previous\ error<Tab>[s	Υ顼(&P)<Tab>[s
 menutrans Suggest\ &Corrections<Tab>z=	(&C)<Tab>z=
@@ -234,6 +241,8 @@
 menutrans &Delete		(&D)
 menutrans Select\ Blockwise	֥å
 menutrans Select\ &Word		ñ(&W)
+menutrans Select\ &Sentence	ʸ(&S)
+menutrans Select\ Pa&ragraph	(&R)
 menutrans Select\ &Line		(&L)
 menutrans Select\ &Block	֥å(&B)
 menutrans Select\ &All		٤(&A)
@@ -290,49 +299,8 @@
 menutrans &Highlight\ test	ϥ饤ȥƥ(&H)
 menutrans &Convert\ to\ HTML	HTMLإС(&C)
 
-" Japanese specific menu
-" ݤiconv衢ɬꤷ󥳡ɤˤʤ櫓ǤϤʤȤ
-if has('iconv')
-  " iconvΥСȽ
-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
-  "
-  " ɤ߹
-  an 10.395 &File.-SEPICONV- <Nop>
-  an 10.396.100.100 &File.󥳡ɻ(&E)\.\.\..(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.100.110 &File.󥳡ɻ(&E)\.\.\..(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
-    an 10.396.100.120 &File.󥳡ɻ(&E)\.\.\..(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.100.110 &File.󥳡ɻ(&E)\.\.\..(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
-    an 10.396.100.120 &File.󥳡ɻ(&E)\.\.\..(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.100.130 &File.󥳡ɻ(&E)\.\.\..(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
-
-  " ɹ
-  an 10.396.110.100 &File.󥳡ɻ(&E)\.\.\..ɹ(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.110.110 &File.󥳡ɻ(&E)\.\.\..ɹ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
-    an 10.396.110.120 &File.󥳡ɻ(&E)\.\.\..ɹ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.110.110 &File.󥳡ɻ(&E)\.\.\..ɹ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
-    an 10.396.110.120 &File.󥳡ɻ(&E)\.\.\..ɹ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.110.130 &File.󥳡ɻ(&E)\.\.\..ɹ(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
-
-  " ¸
-  an 10.396.115 &File.󥳡ɻ(&E)\.\.\..-SEP1- <Nop>
-  an 10.396.120.100 &File.󥳡ɻ(&E)\.\.\..¸(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
-  if !support_jisx0213
-    an 10.396.120.110 &File.󥳡ɻ(&E)\.\.\..¸(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
-    an 10.396.120.120 &File.󥳡ɻ(&E)\.\.\..¸(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
-  else
-    an 10.396.120.110 &File.󥳡ɻ(&E)\.\.\..¸(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
-    an 10.396.120.120 &File.󥳡ɻ(&E)\.\.\..¸(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
-  endif
-  an 10.396.120.130 &File.󥳡ɻ(&E)\.\.\..¸(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
-endif
+let &cpo = s:keepcpo
+unlet s:keepcpo
 
 " filler to avoid the line above being recognized as a modeline
 " filler
-" filler
-" filler
diff -Naur vim73.orig/runtime/lang/menu_ja_jp.eucjp.vim vim73/runtime/lang/menu_ja_jp.eucjp.vim
--- vim73.orig/runtime/lang/menu_ja_jp.eucjp.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_ja_jp.eucjp.vim	2013-08-04 19:09:08.680616330 +0000
@@ -1,6 +1,9 @@
 " Menu Translations:	Japanese (for UNIX)
-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:		08:50:47 25-Mar-2001.
+" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:		15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " eucjp is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
diff -Naur vim73.orig/runtime/lang/menu_ja_jp.ujis.vim vim73/runtime/lang/menu_ja_jp.ujis.vim
--- vim73.orig/runtime/lang/menu_ja_jp.ujis.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_ja_jp.ujis.vim	2013-08-04 19:09:08.683949653 +0000
@@ -1,6 +1,9 @@
 " Menu Translations:	Japanese (for UNIX)
-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
-" Last Change:		08:50:47 25-Mar-2001.
+" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
+" Last Change:		15-Jun-2012.
+"
+" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " ujis is the same as euc-jp.  Source the other one from here.
 source <sfile>:p:h/menu_ja_jp.euc-jp.vim
diff -Naur vim73.orig/runtime/lang/menu_ja_jp.utf-8.vim vim73/runtime/lang/menu_ja_jp.utf-8.vim
--- vim73.orig/runtime/lang/menu_ja_jp.utf-8.vim	2010-05-15 16:15:11.000000000 +0000
+++ vim73/runtime/lang/menu_ja_jp.utf-8.vim	2013-08-04 19:09:08.683949653 +0000
@@ -1,14 +1,19 @@
 " vi:set ts=8 sts=8 sw=8 tw=0:
 "
 " Menu Translations:	Japanese (UTF-8)
-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:		18-Apr-2006.
+" Translated By:	MURAOKA Taro  <koron.kaoriya@gmail.com>
+" Last Change:		12-May-2013.
+"
+" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -99,6 +104,8 @@
 menutrans F&ile\ Settings		ファイル設定(&I)
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
 	\	行番号表示切替(&N)<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
+	\	相対行番号表示切替(&V)<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!
 	\ リストモード切替(&L)<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
@@ -149,7 +156,7 @@
 " Tools.Spelling Menu
 menutrans &Spelling			スペリング(&S)
 menutrans &Spell\ Check\ On		スペルチェック有効(&S)
-menutrans Spell\ Check\ &Off		スペルチェック有効(&O)
+menutrans Spell\ Check\ &Off		スペルチェック無効(&O)
 menutrans To\ &Next\ error<Tab>]s	次のエラー(&N)<Tab>]s
 menutrans To\ &Previous\ error<Tab>[s	前のエラー(&P)<Tab>[s
 menutrans Suggest\ &Corrections<Tab>z=	修正候補(&C)<Tab>z=
@@ -234,6 +241,8 @@
 menutrans &Delete		削除(&D)
 menutrans Select\ Blockwise	矩形ブロック選択
 menutrans Select\ &Word		単語選択(&W)
+menutrans Select\ &Sentence	文選択(&S)
+menutrans Select\ Pa&ragraph	段落選択(&R)
 menutrans Select\ &Line		行選択(&L)
 menutrans Select\ &Block	ブロック選択(&B)
 menutrans Select\ &All		すべて選択(&A)
@@ -290,49 +299,8 @@
 menutrans &Highlight\ test	ハイライトテスト(&H)
 menutrans &Convert\ to\ HTML	HTMLへコンバート(&C)
 
-" Japanese specific menu
-" 成否はiconv次第、必ずしも指定したエンコードになるわけではないことに注意
-if has('iconv')
-  " iconvのバージョン判定
-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
-  "
-  " 読み込み
-  an 10.395 &File.-SEPICONV- <Nop>
-  an 10.396.100.100 &File.エンコード指定(&E)\.\.\..開く(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.100.110 &File.エンコード指定(&E)\.\.\..開く(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
-    an 10.396.100.120 &File.エンコード指定(&E)\.\.\..開く(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.100.110 &File.エンコード指定(&E)\.\.\..開く(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
-    an 10.396.100.120 &File.エンコード指定(&E)\.\.\..開く(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.100.130 &File.エンコード指定(&E)\.\.\..開く(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
-
-  " 再読込
-  an 10.396.110.100 &File.エンコード指定(&E)\.\.\..再読込(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.110.110 &File.エンコード指定(&E)\.\.\..再読込(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
-    an 10.396.110.120 &File.エンコード指定(&E)\.\.\..再読込(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.110.110 &File.エンコード指定(&E)\.\.\..再読込(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
-    an 10.396.110.120 &File.エンコード指定(&E)\.\.\..再読込(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.110.130 &File.エンコード指定(&E)\.\.\..再読込(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
-
-  " 保存
-  an 10.396.115 &File.エンコード指定(&E)\.\.\..-SEP1- <Nop>
-  an 10.396.120.100 &File.エンコード指定(&E)\.\.\..保存(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
-  if !support_jisx0213
-    an 10.396.120.110 &File.エンコード指定(&E)\.\.\..保存(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
-    an 10.396.120.120 &File.エンコード指定(&E)\.\.\..保存(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
-  else
-    an 10.396.120.110 &File.エンコード指定(&E)\.\.\..保存(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
-    an 10.396.120.120 &File.エンコード指定(&E)\.\.\..保存(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
-  endif
-  an 10.396.120.130 &File.エンコード指定(&E)\.\.\..保存(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
-endif
+let &cpo = s:keepcpo
+unlet s:keepcpo
 
 " filler to avoid the line above being recognized as a modeline
 " filler
-" filler
-" filler
diff -Naur vim73.orig/runtime/lang/menu_japanese_japan.932.vim vim73/runtime/lang/menu_japanese_japan.932.vim
--- vim73.orig/runtime/lang/menu_japanese_japan.932.vim	2010-05-15 16:15:11.000000000 +0000
+++ vim73/runtime/lang/menu_japanese_japan.932.vim	2013-08-04 19:09:08.687282976 +0000
@@ -1,14 +1,19 @@
 " vi:set ts=8 sts=8 sw=8 tw=0:
 "
 " Menu Translations:	Japanese (CP932)
-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
-" Last Change:		18-Apr-2006.
+" Translated By:	MURAOKA Taro  <koron.kaoriya@gmail.com>
+" Last Change:		12-May-2013.
+"
+" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
+" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp932
 
@@ -99,6 +104,8 @@
 menutrans F&ile\ Settings		t@Cݒ(&I)
 menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
 	\	sԍ\ؑ(&N)<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
+	\	΍sԍ\ؑ(&V)<Tab>:set\ rnu!
 menutrans Toggle\ &List\ Mode<Tab>:set\ list!
 	\ Xg[hؑ(&L)<Tab>:set\ list!
 menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
@@ -149,7 +156,7 @@
 " Tools.Spelling Menu
 menutrans &Spelling			XyO(&S)
 menutrans &Spell\ Check\ On		Xy`FbNL(&S)
-menutrans Spell\ Check\ &Off		Xy`FbNL(&O)
+menutrans Spell\ Check\ &Off		Xy`FbN(&O)
 menutrans To\ &Next\ error<Tab>]s	̃G[(&N)<Tab>]s
 menutrans To\ &Previous\ error<Tab>[s	ÕG[(&P)<Tab>[s
 menutrans Suggest\ &Corrections<Tab>z=	C(&C)<Tab>z=
@@ -234,6 +241,8 @@
 menutrans &Delete		폜(&D)
 menutrans Select\ Blockwise	`ubNI
 menutrans Select\ &Word		PI(&W)
+menutrans Select\ &Sentence	I(&S)
+menutrans Select\ Pa&ragraph	iI(&R)
 menutrans Select\ &Line		sI(&L)
 menutrans Select\ &Block	ubNI(&B)
 menutrans Select\ &All		ׂđI(&A)
@@ -290,49 +299,8 @@
 menutrans &Highlight\ test	nCCgeXg(&H)
 menutrans &Convert\ to\ HTML	HTMLփRo[g(&C)
 
-" Japanese specific menu
-" ۂiconvAKw肵GR[hɂȂ킯ł͂ȂƂɒ
-if has('iconv')
-  " iconṽo[W
-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
-  "
-  " ǂݍ
-  an 10.395 &File.-SEPICONV- <Nop>
-  an 10.396.100.100 &File.GR[hw(&E)\.\.\..J(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.100.110 &File.GR[hw(&E)\.\.\..J(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
-    an 10.396.100.120 &File.GR[hw(&E)\.\.\..J(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.100.110 &File.GR[hw(&E)\.\.\..J(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
-    an 10.396.100.120 &File.GR[hw(&E)\.\.\..J(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.100.130 &File.GR[hw(&E)\.\.\..J(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
-
-  " ēǍ
-  an 10.396.110.100 &File.GR[hw(&E)\.\.\..ēǍ(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
-  if !support_jisx0213
-    an 10.396.110.110 &File.GR[hw(&E)\.\.\..ēǍ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
-    an 10.396.110.120 &File.GR[hw(&E)\.\.\..ēǍ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
-  else
-    an 10.396.110.110 &File.GR[hw(&E)\.\.\..ēǍ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
-    an 10.396.110.120 &File.GR[hw(&E)\.\.\..ēǍ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
-  endif
-  an 10.396.110.130 &File.GR[hw(&E)\.\.\..ēǍ(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
-
-  " ۑ
-  an 10.396.115 &File.GR[hw(&E)\.\.\..-SEP1- <Nop>
-  an 10.396.120.100 &File.GR[hw(&E)\.\.\..ۑ(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
-  if !support_jisx0213
-    an 10.396.120.110 &File.GR[hw(&E)\.\.\..ۑ(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
-    an 10.396.120.120 &File.GR[hw(&E)\.\.\..ۑ(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
-  else
-    an 10.396.120.110 &File.GR[hw(&E)\.\.\..ۑ(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
-    an 10.396.120.120 &File.GR[hw(&E)\.\.\..ۑ(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
-  endif
-  an 10.396.120.130 &File.GR[hw(&E)\.\.\..ۑ(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
-endif
+let &cpo = s:keepcpo
+unlet s:keepcpo
 
 " filler to avoid the line above being recognized as a modeline
 " filler
-" filler
-" filler
diff -Naur vim73.orig/runtime/lang/menu_ko_kr.euckr.vim vim73/runtime/lang/menu_ko_kr.euckr.vim
--- vim73.orig/runtime/lang/menu_ko_kr.euckr.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_ko_kr.euckr.vim	2013-08-04 19:09:08.687282976 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:	Korean
 " Maintainer:		SungHyun Nam <goweol@gmail.com>
-" Last Change:		2010 Feb 18
+" Last Change:		2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding euc-kr
 
@@ -42,7 +44,7 @@
 " Edit menu
 menutrans &Edit				(&E)
 menutrans &Undo<Tab>u			(&U)<Tab>u
-menutrans &Redo<Tab>^R			ٽ (&R)<Tab>^R
+menutrans &Redo<Tab>^R			ٽ\ (&R)<Tab>^R
 menutrans Rep&eat<Tab>\.		Ǯ(&e)<Tab>\.
 menutrans Cu&t<Tab>"+x			ڸ(&t)<Tab>"+x
 menutrans &Copy<Tab>"+y			(&C)<Tab>"+y
@@ -63,7 +65,7 @@
 menutrans Toggle\ &Showmatch<Tab>:set\ sm! Showmatch\ (&S)<Tab>:set\ sm!
 menutrans &Context\ lines		ؽƮ\ (&C)
 menutrans &Virtual\ Edit		\ (&V)
-menutrans Never				  
+menutrans Never				\ \ 
 menutrans Block\ Selection		\ 
 menutrans Insert\ mode			\ 
 menutrans Block\ and\ Insert		\ 
@@ -92,7 +94,7 @@
 menutrans Toggle\ &C-indenting<Tab>:set\ cin! C-ε\ (&C)<Tab>:set\ cin!
 
 " other options
-menutrans &Shiftwidth			Ʈ ʺ(&S)
+menutrans &Shiftwidth			Ʈ\ ʺ(&S)
 menutrans Soft\ &Tabstop		Ʈ\ ǽ(&T)
 menutrans Te&xt\ Width\.\.\.		ؽƮ\ ʺ(&x)\.\.\.
 menutrans &File\ Format\.\.\.		\ (&F)\.\.\.
@@ -125,12 +127,12 @@
 " Tools.Fold Menu
 menutrans &Folding			(&F)
 " open close folds
-menutrans &Enable/Disable\ folds<Tab>zi	\ \ \ (&E)<Tab>zi
+menutrans &Enable/Disable\ folds<Tab>zi	\ \ (&E)<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv	Ŀ\ \ (&V)<Tab>zv
 menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Ŀ\ ٸ\ (&w)<Tab>zMzx
 menutrans C&lose\ more\ folds<Tab>zm	\ \ \ ݱ(&l)<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM	\ κ\ \ (&C)<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr	 \ \ (&p)<Tab>zr
+menutrans &Close\ all\ folds<Tab>zM	\ \ ݱ(&C)<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr	\ \ \ (&p)<Tab>zr
 menutrans &Open\ all\ folds<Tab>zR	\ κ\ \ (&O)<Tab>zR
 " fold method
 menutrans Fold\ Met&hod			\ (&h)
@@ -141,11 +143,11 @@
 "menutrans &Diff				&Diff
 menutrans Ma&rker			ǥ(&r)
 " create and delete folds
-menutrans Create\ &Fold<Tab>zf		 (&F)<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		 (&D)<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	\ (&A)<Tab>zD
+menutrans Create\ &Fold<Tab>zf		\ (&F)<Tab>zf
+menutrans &Delete\ Fold<Tab>zd		\ (&D)<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD	\ \ (&A)<Tab>zD
 " moving around in folds
-menutrans Fold\ column\ &width		\ ĭ\ ʺ(&w)
+menutrans Fold\ column\ &width		\ ÷\ ʺ(&w)
 
 "menutrans &Diff				&Diff
 menutrans &Update			(&U)
@@ -259,3 +261,5 @@
 menutrans &Highlight\ test	Highlight\ (&H)
 menutrans &Convert\ to\ HTML	HTML\ ȯ(&C)
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_ko_kr.utf-8.vim vim73/runtime/lang/menu_ko_kr.utf-8.vim
--- vim73.orig/runtime/lang/menu_ko_kr.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_ko_kr.utf-8.vim	2013-08-04 19:09:08.690616300 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:	Korean
 " Maintainer:		SungHyun Nam <goweol@gmail.com>
-" Last Change:		2010 Feb 18
+" Last Change:		2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -42,7 +44,7 @@
 " Edit menu
 menutrans &Edit				편집(&E)
 menutrans &Undo<Tab>u			취소(&U)<Tab>u
-menutrans &Redo<Tab>^R			다시 실행(&R)<Tab>^R
+menutrans &Redo<Tab>^R			다시\ 실행(&R)<Tab>^R
 menutrans Rep&eat<Tab>\.		되풀이(&e)<Tab>\.
 menutrans Cu&t<Tab>"+x			자르기(&t)<Tab>"+x
 menutrans &Copy<Tab>"+y			복사(&C)<Tab>"+y
@@ -63,7 +65,7 @@
 menutrans Toggle\ &Showmatch<Tab>:set\ sm! Showmatch\ 토글(&S)<Tab>:set\ sm!
 menutrans &Context\ lines		콘텍스트\ 줄(&C)
 menutrans &Virtual\ Edit		가상\ 편집(&V)
-menutrans Never				사용 안 함
+menutrans Never				사용\ 안\ 함
 menutrans Block\ Selection		블럭\ 고르기
 menutrans Insert\ mode			삽입\ 모드
 menutrans Block\ and\ Insert		블럭과\ 삽입
@@ -92,7 +94,7 @@
 menutrans Toggle\ &C-indenting<Tab>:set\ cin! C-인덴팅\ 토글(&C)<Tab>:set\ cin!
 
 " other options
-menutrans &Shiftwidth			쉬프트 너비(&S)
+menutrans &Shiftwidth			쉬프트\ 너비(&S)
 menutrans Soft\ &Tabstop		소프트\ 탭스톱(&T)
 menutrans Te&xt\ Width\.\.\.		텍스트\ 너비(&x)\.\.\.
 menutrans &File\ Format\.\.\.		파일\ 형식(&F)\.\.\.
@@ -125,12 +127,12 @@
 " Tools.Fold Menu
 menutrans &Folding			접기(&F)
 " open close folds
-menutrans &Enable/Disable\ folds<Tab>zi	접는\ 기능\ 사용\ 토글(&E)<Tab>zi
+menutrans &Enable/Disable\ folds<Tab>zi	접기\ 사용\ 토글(&E)<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv	커서\ 줄\ 보기(&V)<Tab>zv
 menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx 커서\ 줄만\ 보기(&w)<Tab>zMzx
 menutrans C&lose\ more\ folds<Tab>zm	더\ 많은\ 접기\ 닫기(&l)<Tab>zm
-menutrans &Close\ all\ folds<Tab>zM	접힌\ 부분\ 모두\ 접기(&C)<Tab>zM
-menutrans O&pen\ more\ folds<Tab>zr	더 많은\ 접기\ 열기(&p)<Tab>zr
+menutrans &Close\ all\ folds<Tab>zM	모든\ 접기\ 닫기(&C)<Tab>zM
+menutrans O&pen\ more\ folds<Tab>zr	더\ 많은\ 접기\ 열기(&p)<Tab>zr
 menutrans &Open\ all\ folds<Tab>zR	접힌\ 부분\ 모두\ 펴기(&O)<Tab>zR
 " fold method
 menutrans Fold\ Met&hod			접는\ 방법(&h)
@@ -141,11 +143,11 @@
 "menutrans &Diff				&Diff
 menutrans Ma&rker			꼬리표(&r)
 " create and delete folds
-menutrans Create\ &Fold<Tab>zf		새로 접기(&F)<Tab>zf
-menutrans &Delete\ Fold<Tab>zd		완전히 펴기(&D)<Tab>zd
-menutrans Delete\ &All\ Folds<Tab>zD	모두\ 펴기(&A)<Tab>zD
+menutrans Create\ &Fold<Tab>zf		접기\ 생성(&F)<Tab>zf
+menutrans &Delete\ Fold<Tab>zd		접기\ 삭제(&D)<Tab>zd
+menutrans Delete\ &All\ Folds<Tab>zD	모든\ 접기\ 삭제(&A)<Tab>zD
 " moving around in folds
-menutrans Fold\ column\ &width		접을\ 칸\ 너비(&w)
+menutrans Fold\ column\ &width		접기\ 컬럼\ 너비(&w)
 
 "menutrans &Diff				&Diff
 menutrans &Update			갱신(&U)
@@ -259,3 +261,5 @@
 menutrans &Highlight\ test	Highlight\ 시험(&H)
 menutrans &Convert\ to\ HTML	HTML로\ 변환(&C)
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_nl_nl.latin1.vim vim73/runtime/lang/menu_nl_nl.latin1.vim
--- vim73.orig/runtime/lang/menu_nl_nl.latin1.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_nl_nl.latin1.vim	2013-08-04 19:09:08.693949623 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:	Nederlands
 " Maintainer:		Bram Moolenaar
-" Last Change:	2004 May 05
+" Last Change:	2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -238,3 +240,6 @@
 let g:menutrans_tags_dialog = "Typ namen van tag bestanden.\nGebruik commas tussen de namen."
 let g:menutrans_textwidth_dialog = "Typ de nieuwe tekst breedte (0 om formatteren uit the schakelen): "
 let g:menutrans_fileformat_dialog = "Selecteer formaat voor het schrijven van het bestand"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_no_no.latin1.vim vim73/runtime/lang/menu_no_no.latin1.vim
--- vim73.orig/runtime/lang/menu_no_no.latin1.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_no_no.latin1.vim	2013-08-04 19:09:08.697282946 +0000
@@ -1,6 +1,6 @@
 " Menu Translations:	Norwegian / Norsk (Bokml)
 " Maintainer:		yvind A. Holm <sunny@sunbase.org>
-" Last Change:		2004-05-16 20:00:52 +0200
+" Last Change:		2012 May 01
 " menu_no_no.latin1.vim 289 2004-05-16 18:00:52Z sunny
 
 " Quit when menu translations have already been done.
@@ -8,6 +8,8 @@
 	finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in ISO-8859-1, but they work for ISO-8859-15 and
 " CP1252 without conversion as well.
@@ -229,5 +231,8 @@
 	let g:menutrans_textwidth_dialog = "Velg ny tekstbredde (0 for  forhindre formatering): "
 	let g:menutrans_fileformat_dialog = "Velg filformat som filen skal lagres med"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 "    vim: set ts=8 sw=8 :
 " vim600: set fdm=indent :
diff -Naur vim73.orig/runtime/lang/menu_pl_pl.iso_8859-2.vim vim73/runtime/lang/menu_pl_pl.iso_8859-2.vim
--- vim73.orig/runtime/lang/menu_pl_pl.iso_8859-2.vim	2010-05-18 20:12:10.000000000 +0000
+++ vim73/runtime/lang/menu_pl_pl.iso_8859-2.vim	2013-08-04 19:09:08.703949593 +0000
@@ -8,6 +8,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding iso-8859-2
 
@@ -285,3 +287,6 @@
 let g:menutrans_textwidth_dialog = "Wprowad now szeroko tekstu (0 wycza przewijanie): "
 let g:menutrans_fileformat_dialog = "Wybierz format w ktrym ten plik ma by zapisany"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_pl_pl.utf-8.vim vim73/runtime/lang/menu_pl_pl.utf-8.vim
--- vim73.orig/runtime/lang/menu_pl_pl.utf-8.vim	2010-05-18 20:08:13.000000000 +0000
+++ vim73/runtime/lang/menu_pl_pl.utf-8.vim	2013-08-04 19:09:08.703949593 +0000
@@ -8,6 +8,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -285,3 +287,6 @@
 let g:menutrans_textwidth_dialog = "Wprowadź nową szerokość tekstu (0 wyłącza przewijanie): "
 let g:menutrans_fileformat_dialog = "Wybierz format w którym ten plik ma być zapisany"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_polish_poland.1250.vim vim73/runtime/lang/menu_polish_poland.1250.vim
--- vim73.orig/runtime/lang/menu_polish_poland.1250.vim	2010-05-18 20:12:51.000000000 +0000
+++ vim73/runtime/lang/menu_polish_poland.1250.vim	2013-08-04 19:09:08.703949593 +0000
@@ -8,6 +8,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp1250
 
@@ -285,3 +287,6 @@
 let g:menutrans_textwidth_dialog = "Wprowad now szeroko tekstu (0 wycza przewijanie): "
 let g:menutrans_fileformat_dialog = "Wybierz format w ktrym ten plik ma by zapisany"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_pt_br.vim vim73/runtime/lang/menu_pt_br.vim
--- vim73.orig/runtime/lang/menu_pt_br.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_pt_br.vim	2013-08-04 19:09:08.707282916 +0000
@@ -1,6 +1,6 @@
 " Menu Translations: Portugus do Brasil
 " Maintainer: Jos de Paula <jose@infoviaweb.com>
-" Last Change: 2006-09-19 02:30:00-03:00
+" Last Change: 2012 May 01
 "
 
 " Quit when menu translations have already been done.
@@ -8,6 +8,8 @@
 	finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Translations in latin1 (ISO-8859-1), and should work in
 " latin9 (ISO-8859-15)
@@ -283,3 +285,6 @@
 
 " Find Help dialog text
 let g:menutrans_help_dialog = "Digite um comando ou palavra para obter ajuda;\n\nAnteponha i_ para comandos de entrada (ex.: i_CTRL-X)\nAnteponha c_ para comandos da linha de comandos (ex.: c_<Del>)\nAnteponha ` para um nome de opo (ex.: `shiftwidth`)"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_pt_pt.vim vim73/runtime/lang/menu_pt_pt.vim
--- vim73.orig/runtime/lang/menu_pt_pt.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_pt_pt.vim	2013-08-04 19:09:08.710616240 +0000
@@ -7,6 +7,8 @@
 	finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Translations in latin1 (ISO-8859-1), and should work in
 " latin9 (ISO-8859-15)
@@ -262,3 +264,6 @@
 
 " Find Help dialog text
 let g:menutrans_help_dialog = "Digite um comando ou palavra para obter ajuda;\n\nAnteponha i_ para comandos de entrada (ex.: i_CTRL-X)\nAnteponha c_ para comandos da linha de comandos (ex.: c_<Del>)\nAnteponha ` para um nome de opo (ex.: `shiftwidth`)"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_ru_ru.koi8-r.vim vim73/runtime/lang/menu_ru_ru.koi8-r.vim
--- vim73.orig/runtime/lang/menu_ru_ru.koi8-r.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_ru_ru.koi8-r.vim	2013-08-04 19:09:08.713949563 +0000
@@ -1,9 +1,10 @@
 " Menu Translations:	Russian
-" Maintainer:		vassily ragosin <vrr[at]users.sourceforge.net>
-" Last Change:		26 Apr 2004
+" Maintainer:		Sergey Alyoshin <alyoshin.s@gmail.com>
+" Previous Maintainer:	vassily ragosin <vrr[at]users.sourceforge.net>
+" Last Change:		29 May 2013
 " URL:			cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
 "
-" $Id: menu_ru_ru.koi8-r.vim,v 1.2 2004/06/16 11:19:21 vimboss Exp $
+" $Id: menu_ru_ru.vim,v 1.1 2004/06/13 16:09:10 vimboss Exp $
 "
 " Adopted for RuVim project by Vassily Ragosin.
 " First translation: Tim Alexeevsky <realtim [at] mail.ru>,
@@ -16,6 +17,8 @@
    finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding koi8-r
 
@@ -48,6 +51,7 @@
 " File menu
 menutrans &Open\.\.\.<Tab>:e		&\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp	&\ \.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	\ &\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew		&<Tab>:enew
 menutrans &Close<Tab>:close		&<Tab>:close
 "--------------------
@@ -75,51 +79,57 @@
 menutrans &Delete<Tab>x			&<Tab>x
 menutrans &Select\ All<Tab>ggVG		&\ ӣ<Tab>ggVG
 "--------------------
+" Athena GUI only
+menutrans &Find<Tab>/			&<Tab>/
+menutrans Find\ and\ Rep&lace<Tab>:%s	\ \ &<Tab>:%s
+" End Athena GUI only
 menutrans &Find\.\.\.<Tab>/		&\.\.\.<Tab>/
 menutrans Find\ and\ Rep&lace\.\.\.	\ \ &\.\.\.
 menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s	\ \ &\.\.\.<Tab>:%s
-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s     \ \ &\.\.\.<Tab>:s
+menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s	\ \ &\.\.\.<Tab>:s
 "--------------------
 menutrans Settings\ &Window		\ \ &
+menutrans Startup\ &Settings		\ &
 menutrans &Global\ Settings		&\ 
 menutrans F&ile\ Settings		\ &
 menutrans C&olor\ Scheme		&\ 
 menutrans &Keymap			\ &
 menutrans Select\ Fo&nt\.\.\.		\ &\.\.\.
 ">>>----------------- Edit/Global settings
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	 \ &\ <Tab>:set\ hls!
-menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		 &\ <Tab>:set\ ic!
-menutrans Toggle\ &Showmatch<Tab>:set\ sm!		 \ \ &<Tab>:set\ sm!
-menutrans &Context\ lines				 &\ \ 
-menutrans &Virtual\ Edit				 &\ 
-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		 \ &<Tab>:set\ im!
-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		 &\ \ Vi<Tab>:set\ cp!
-menutrans Search\ &Path\.\.\.				 &\ \ \ \.\.\.
-menutrans Ta&g\ Files\.\.\.				 \ &\.\.\.
-"
-menutrans Toggle\ &Toolbar				 &\ 
-menutrans Toggle\ &Bottom\ Scrollbar			 \ \ &
-menutrans Toggle\ &Left\ Scrollbar			 \ \ &
-menutrans Toggle\ &Right\ Scrollbar			 \ \ &
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	\ &\ <Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		&\ <Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!		\ \ &<Tab>:set\ sm!
+menutrans &Context\ lines				&\ \ 
+menutrans &Virtual\ Edit				&\ 
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		\ &<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		&\ \ Vi<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\.				&\ \ \ \.\.\.
+menutrans Ta&g\ Files\.\.\.				\ &\.\.\.
+"
+menutrans Toggle\ &Toolbar				&\ 
+menutrans Toggle\ &Bottom\ Scrollbar			\ \ &
+menutrans Toggle\ &Left\ Scrollbar			\ \ &
+menutrans Toggle\ &Right\ Scrollbar			\ \ &
 ">>>->>>------------- Edit/Global settings/Virtual edit
-menutrans Never						 
-menutrans Block\ Selection				 \ \ 
-menutrans Insert\ mode					 \ \ 
-menutrans Block\ and\ Insert				 \ \ \ \ \ \ 
-menutrans Always					 \ 
+menutrans Never						
+menutrans Block\ Selection				\ \ 
+menutrans Insert\ mode					\ \ 
+menutrans Block\ and\ Insert				\ \ \ \ \ \ 
+menutrans Always					\ 
 ">>>----------------- Edit/File settings
-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	 &\ <Tab>:set\ nu!
-menutrans Toggle\ &List\ Mode<Tab>:set\ list!		 &\ \ <Tab>:set\ list!
-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		 &\ \ <Tab>:set\ wrap!
-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	 \ &\ <Tab>:set\ lbr!
-menutrans Toggle\ &expand-tab<Tab>:set\ et!		 &\ \ <Tab>:set\ et!
-menutrans Toggle\ &auto-indent<Tab>:set\ ai!		 \ \ &<Tab>:set\ ai!
-menutrans Toggle\ &C-indenting<Tab>:set\ cin!		 \ \ \ &\ C<Tab>:set\ cin!
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	&\ <Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!	&\ \ <Tab>:set\ nru!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!		&\ \ <Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		&\ \ <Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	\ &\ <Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!		&\ \ <Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!		\ \ &<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!		\ \ \ &\ C<Tab>:set\ cin!
 ">>>---
-menutrans &Shiftwidth					 &\ 
-menutrans Soft\ &Tabstop				 \ &
-menutrans Te&xt\ Width\.\.\.				 &\ \.\.\.
-menutrans &File\ Format\.\.\.				 &\ \.\.\.
+menutrans &Shiftwidth					&\ 
+menutrans Soft\ &Tabstop				\ &
+menutrans Te&xt\ Width\.\.\.				&\ \.\.\.
+menutrans &File\ Format\.\.\.				&\ \.\.\.
 "
 "
 "
@@ -129,6 +139,7 @@
 menutrans Build\ &Tags\ File				\ &\ 
 "-------------------
 menutrans &Folding					\ \ &
+menutrans &Spelling					&
 menutrans &Diff						&\ (diff)
 "-------------------
 menutrans &Make<Tab>:make				&<Tab>:make
@@ -139,10 +150,26 @@
 menutrans &Older\ List<Tab>:cold			\ &\ \ <Tab>:cold
 menutrans N&ewer\ List<Tab>:cnew			\ &\ \ <Tab>:cnew
 menutrans Error\ &Window				&\ 
-menutrans &Set\ Compiler				\ &
+menutrans Se&T\ Compiler				\ &
 "-------------------
 menutrans &Convert\ to\ HEX<Tab>:%!xxd			&\ \ HEX<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r			\ &\ HEX<Tab>:%!xxd\ -r
+">>>---------------- Tools/Spelling
+menutrans &Spell\ Check\ On				&\ \ 
+menutrans Spell\ Check\ &Off				&\ \ 
+menutrans To\ &Next\ error<Tab>]s			&\ 
+menutrans To\ &Previous\ error<Tab>[s			&\ 
+menutrans Suggest\ &Corrections<Tab>z=			\ &
+menutrans &Repeat\ correction<Tab>:spellrepall		&\ \ \ 
+"-------------------
+menutrans Set\ language\ to\ "en"			\ \ "en"
+menutrans Set\ language\ to\ "en_au"			\ \ "en_au"
+menutrans Set\ language\ to\ "en_ca"			\ \ "en_ca"
+menutrans Set\ language\ to\ "en_gb"			\ \ "en_gb"
+menutrans Set\ language\ to\ "en_nz"			\ \ "en_nz"
+menutrans Set\ language\ to\ "en_us"			\ \ "en_us"
+menutrans &Find\ More\ Languages			&\ \ 
+let g:menutrans_set_lang_to =				' '
 ">>>---------------- Folds
 menutrans &Enable/Disable\ folds<Tab>zi			/\ &<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv			\ \ \ &<Tab>zv
@@ -217,7 +244,7 @@
 menutrans Max\ &Width<Tab>^W\|				\ &<Tab>^W\|
 menutrans Min\ Widt&h<Tab>^W1\|				&\ <Tab>^W1\|
 ">>>----------------- Window/Move To
-menutrans &Top<Tab>^WK					&<Tab>^WK
+menutrans &Top<Tab>^WK					&<Tab>^WK
 menutrans &Bottom<Tab>^WJ				&<Tab>^WJ
 menutrans &Left\ side<Tab>^WH				&<Tab>^WH
 menutrans &Right\ side<Tab>^WL				&<Tab>^WL
@@ -294,3 +321,6 @@
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&"
 "
 let menutrans_no_file = "[ ]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_ru_ru.vim vim73/runtime/lang/menu_ru_ru.vim
--- vim73.orig/runtime/lang/menu_ru_ru.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_ru_ru.vim	2013-08-04 19:09:08.717282886 +0000
@@ -1,6 +1,7 @@
 " Menu Translations:	Russian
-" Maintainer:		vassily ragosin <vrr[at]users.sourceforge.net>
-" Last Change:		26 Apr 2004
+" Maintainer:		Sergey Alyoshin <alyoshin.s@gmail.com>
+" Previous Maintainer:	vassily ragosin <vrr[at]users.sourceforge.net>
+" Last Change:		29 May 2013
 " URL:			cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
 "
 " $Id: menu_ru_ru.vim,v 1.1 2004/06/13 16:09:10 vimboss Exp $
@@ -16,6 +17,8 @@
    finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -48,6 +51,7 @@
 " File menu
 menutrans &Open\.\.\.<Tab>:e		&Открыть\.\.\.<Tab>:e
 menutrans Sp&lit-Open\.\.\.<Tab>:sp	По&делить\ окно\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	Открыть\ в&кладку\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew		&Новый<Tab>:enew
 menutrans &Close<Tab>:close		&Закрыть<Tab>:close
 "--------------------
@@ -75,51 +79,57 @@
 menutrans &Delete<Tab>x			&Удалить<Tab>x
 menutrans &Select\ All<Tab>ggVG		В&ыделить\ всё<Tab>ggVG
 "--------------------
+" Athena GUI only
+menutrans &Find<Tab>/			&Поиск<Tab>/
+menutrans Find\ and\ Rep&lace<Tab>:%s	Поиск\ и\ &замена<Tab>:%s
+" End Athena GUI only
 menutrans &Find\.\.\.<Tab>/		&Поиск\.\.\.<Tab>/
-menutrans Find\ and\ Rep&lace\.\.\.     Поиск\ и\ &замена\.\.\.
-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s     Поиск\ и\ &замена\.\.\.<Tab>:%s
-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s     Поиск\ и\ &замена\.\.\.<Tab>:s
+menutrans Find\ and\ Rep&lace\.\.\.	Поиск\ и\ &замена\.\.\.
+menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s	Поиск\ и\ &замена\.\.\.<Tab>:%s
+menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s	Поиск\ и\ &замена\.\.\.<Tab>:s
 "--------------------
 menutrans Settings\ &Window		Окно\ настройки\ &опций
+menutrans Startup\ &Settings		Настройки\ запус&ка
 menutrans &Global\ Settings		&Глобальные\ настройки
 menutrans F&ile\ Settings		Настройки\ &файлов
 menutrans C&olor\ Scheme		&Цветовая\ схема
 menutrans &Keymap			Раскладка\ кл&авиатуры
 menutrans Select\ Fo&nt\.\.\.		Выбор\ &шрифта\.\.\.
 ">>>----------------- Edit/Global settings
-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!     Подсветка\ &найденных\ соответствий<Tab>:set\ hls!
-menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		 &Регистронезависимый\ поиск<Tab>:set\ ic!
-menutrans Toggle\ &Showmatch<Tab>:set\ sm!		 Показывать\ парные\ &элементы<Tab>:set\ sm!
-menutrans &Context\ lines				 Стр&ок\ вокруг\ курсора
-menutrans &Virtual\ Edit				 Вир&туальное\ редактирование
-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		 Режим\ &Вставки<Tab>:set\ im!
-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		 &Совместимость\ с\ Vi<Tab>:set\ cp!
-menutrans Search\ &Path\.\.\.				 &Путь\ для\ поиска\ файлов\.\.\.
-menutrans Ta&g\ Files\.\.\.				 Файлы\ &меток\.\.\.
-"
-menutrans Toggle\ &Toolbar				 &Инструментальная\ панель
-menutrans Toggle\ &Bottom\ Scrollbar			 Полоса\ прокрутки\ вни&зу
-menutrans Toggle\ &Left\ Scrollbar			 Полоса\ прокрутки\ с&лева
-menutrans Toggle\ &Right\ Scrollbar			 Полоса\ прокрутки\ спр&ава
+menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	Подсветка\ &найденных\ соответствий<Tab>:set\ hls!
+menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		&Регистронезависимый\ поиск<Tab>:set\ ic!
+menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Показывать\ парные\ &элементы<Tab>:set\ sm!
+menutrans &Context\ lines				Стр&ок\ вокруг\ курсора
+menutrans &Virtual\ Edit				Вир&туальное\ редактирование
+menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Режим\ &Вставки<Tab>:set\ im!
+menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		&Совместимость\ с\ Vi<Tab>:set\ cp!
+menutrans Search\ &Path\.\.\.				&Путь\ для\ поиска\ файлов\.\.\.
+menutrans Ta&g\ Files\.\.\.				Файлы\ &меток\.\.\.
+"
+menutrans Toggle\ &Toolbar				&Инструментальная\ панель
+menutrans Toggle\ &Bottom\ Scrollbar			Полоса\ прокрутки\ вни&зу
+menutrans Toggle\ &Left\ Scrollbar			Полоса\ прокрутки\ с&лева
+menutrans Toggle\ &Right\ Scrollbar			Полоса\ прокрутки\ спр&ава
 ">>>->>>------------- Edit/Global settings/Virtual edit
-menutrans Never						 Выключено
-menutrans Block\ Selection				 При\ выделении\ блока
-menutrans Insert\ mode					 В\ режиме\ Вставки
-menutrans Block\ and\ Insert				 При\ выделении\ блока\ и\ в\ режиме\ Вставки
-menutrans Always					 Включено\ всегда
+menutrans Never						Выключено
+menutrans Block\ Selection				При\ выделении\ блока
+menutrans Insert\ mode					В\ режиме\ Вставки
+menutrans Block\ and\ Insert				При\ выделении\ блока\ и\ в\ режиме\ Вставки
+menutrans Always					Включено\ всегда
 ">>>----------------- Edit/File settings
-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	 &Нумерация\ строк<Tab>:set\ nu!
-menutrans Toggle\ &List\ Mode<Tab>:set\ list!		 Отобра&жение\ невидимых\ символов<Tab>:set\ list!
-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		 &Перенос\ длинных\ строк<Tab>:set\ wrap!
-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	 Перенос\ &целых\ слов<Tab>:set\ lbr!
-menutrans Toggle\ &expand-tab<Tab>:set\ et!		 Про&белы\ вместо\ табуляции<Tab>:set\ et!
-menutrans Toggle\ &auto-indent<Tab>:set\ ai!		 Автоматическое\ форматирование\ &отступов<Tab>:set\ ai!
-menutrans Toggle\ &C-indenting<Tab>:set\ cin!		 Форматирование\ отступов\ в\ &стиле\ C<Tab>:set\ cin!
+menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	&Нумерация\ строк<Tab>:set\ nu!
+menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!	Относите&льная\ нумерация\ строк<Tab>:set\ nru!
+menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Отобра&жение\ невидимых\ символов<Tab>:set\ list!
+menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		&Перенос\ длинных\ строк<Tab>:set\ wrap!
+menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Перенос\ &целых\ слов<Tab>:set\ lbr!
+menutrans Toggle\ &expand-tab<Tab>:set\ et!		Про&белы\ вместо\ табуляции<Tab>:set\ et!
+menutrans Toggle\ &auto-indent<Tab>:set\ ai!		Автоматическое\ форматирование\ &отступов<Tab>:set\ ai!
+menutrans Toggle\ &C-indenting<Tab>:set\ cin!		Форматирование\ отступов\ в\ &стиле\ C<Tab>:set\ cin!
 ">>>---
-menutrans &Shiftwidth					 Вели&чина\ отступа
-menutrans Soft\ &Tabstop				 Ширина\ &табуляции
-menutrans Te&xt\ Width\.\.\.				 &Ширина\ текста\.\.\.
-menutrans &File\ Format\.\.\.				 &Формат\ файла\.\.\.
+menutrans &Shiftwidth					Вели&чина\ отступа
+menutrans Soft\ &Tabstop				Ширина\ &табуляции
+menutrans Te&xt\ Width\.\.\.				&Ширина\ текста\.\.\.
+menutrans &File\ Format\.\.\.				&Формат\ файла\.\.\.
 "
 "
 "
@@ -129,6 +139,7 @@
 menutrans Build\ &Tags\ File				Создать\ &файл\ меток
 "-------------------
 menutrans &Folding					Работа\ со\ &складками
+menutrans &Spelling					Пр&авописание
 menutrans &Diff						&Отличия\ (diff)
 "-------------------
 menutrans &Make<Tab>:make				Ко&мпиляция<Tab>:make
@@ -139,10 +150,26 @@
 menutrans &Older\ List<Tab>:cold			Более\ стар&ый\ список\ ошибок<Tab>:cold
 menutrans N&ewer\ List<Tab>:cnew			Более\ све&жий\ список\ ошибок<Tab>:cnew
 menutrans Error\ &Window				Ок&но\ ошибок
-menutrans &Set\ Compiler				Выбор\ &компилятора
+menutrans Se&T\ Compiler				Выбор\ &компилятора
 "-------------------
 menutrans &Convert\ to\ HEX<Tab>:%!xxd			П&еревести\ в\ HEX<Tab>:%!xxd
 menutrans Conve&rt\ back<Tab>:%!xxd\ -r			Перевести\ и&з\ HEX<Tab>:%!xxd\ -r
+">>>---------------- Tools/Spelling
+menutrans &Spell\ Check\ On				&Вкл\ проверку\ правописания
+menutrans Spell\ Check\ &Off				Вы&кл\ проверку\ правописания
+menutrans To\ &Next\ error<Tab>]s			&Следующая\ ошибка
+menutrans To\ &Previous\ error<Tab>[s			&Предыдущая\ ошибка
+menutrans Suggest\ &Corrections<Tab>z=			Предложить\ исп&равления
+menutrans &Repeat\ correction<Tab>:spellrepall		Пов&торить\ исправление\ для\ всех
+"-------------------
+menutrans Set\ language\ to\ "en"			Установить\ язык\ "en"
+menutrans Set\ language\ to\ "en_au"			Установить\ язык\ "en_au"
+menutrans Set\ language\ to\ "en_ca"			Установить\ язык\ "en_ca"
+menutrans Set\ language\ to\ "en_gb"			Установить\ язык\ "en_gb"
+menutrans Set\ language\ to\ "en_nz"			Установить\ язык\ "en_nz"
+menutrans Set\ language\ to\ "en_us"			Установить\ язык\ "en_us"
+menutrans &Find\ More\ Languages			&Найти\ больше\ языков
+let g:menutrans_set_lang_to =				'Установить язык'
 ">>>---------------- Folds
 menutrans &Enable/Disable\ folds<Tab>zi			Вкл/выкл\ &складки<Tab>zi
 menutrans &View\ Cursor\ Line<Tab>zv			Открыть\ строку\ с\ &курсором<Tab>zv
@@ -217,7 +244,7 @@
 menutrans Max\ &Width<Tab>^W\|				Максимальная\ &ширина<Tab>^W\|
 menutrans Min\ Widt&h<Tab>^W1\|				Минимал&ьная\ ширина<Tab>^W1\|
 ">>>----------------- Window/Move To
-menutrans &Top<Tab>^WK					На&верх<Tab>^WK
+menutrans &Top<Tab>^WK					В&верх<Tab>^WK
 menutrans &Bottom<Tab>^WJ				В&низ<Tab>^WJ
 menutrans &Left\ side<Tab>^WH				В&лево<Tab>^WH
 menutrans &Right\ side<Tab>^WL				В&право<Tab>^WL
@@ -294,3 +321,6 @@
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nО&тмена"
 "
 let menutrans_no_file = "[Нет файла]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_sk_sk.iso_8859-2.vim vim73/runtime/lang/menu_sk_sk.iso_8859-2.vim
--- vim73.orig/runtime/lang/menu_sk_sk.iso_8859-2.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_sk_sk.iso_8859-2.vim	2013-08-04 19:09:08.720616209 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:	Slovak
 " Translated By:	Martin Lacko <lacko@host.sk>
-" Last Change:		2003 Mar 30
+" Last Change:		2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding iso-8859-2
 
@@ -230,3 +232,6 @@
 menutrans Co&lor\ test		Test\ &farieb
 menutrans &Highlight\ test	&Test\ zvrazovania
 menutrans &Convert\ to\ HTML	&Previes\ do\ HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_sl_si.cp1250.vim vim73/runtime/lang/menu_sl_si.cp1250.vim
--- vim73.orig/runtime/lang/menu_sl_si.cp1250.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_sl_si.cp1250.vim	2013-08-04 19:09:08.723949533 +0000
@@ -11,6 +11,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp1250
 
@@ -292,3 +294,6 @@
 let g:menutrans_fileformat_dialog = "Izberite format datoteke"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Preklii"
 " }}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_sl_si.latin2.vim vim73/runtime/lang/menu_sl_si.latin2.vim
--- vim73.orig/runtime/lang/menu_sl_si.latin2.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_sl_si.latin2.vim	2013-08-04 19:09:08.723949533 +0000
@@ -11,6 +11,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding latin2
 
@@ -292,3 +294,6 @@
 let g:menutrans_fileformat_dialog = "Izberite format datoteke"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Preklii"
 " }}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_sl_si.utf-8.vim vim73/runtime/lang/menu_sl_si.utf-8.vim
--- vim73.orig/runtime/lang/menu_sl_si.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_sl_si.utf-8.vim	2013-08-04 19:09:08.723949533 +0000
@@ -11,6 +11,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -292,3 +294,6 @@
 let g:menutrans_fileformat_dialog = "Izberite format datoteke"
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Prekliči"
 " }}}
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_slovak_slovak_republic.1250.vim vim73/runtime/lang/menu_slovak_slovak_republic.1250.vim
--- vim73.orig/runtime/lang/menu_slovak_slovak_republic.1250.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_slovak_slovak_republic.1250.vim	2013-08-04 19:09:08.727282856 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:	Slovak
 " Translated By:	Martin Lacko <lacko@host.sk>
-" Last Change:		2006 Jun 17
+" Last Change:		2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding cp1250
 
@@ -230,3 +232,6 @@
 menutrans Co&lor\ test		Test\ &farieb
 menutrans &Highlight\ test	&Test\ zvrazovania
 menutrans &Convert\ to\ HTML	&Previes\ do\ HTML
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_sr_rs.ascii.vim vim73/runtime/lang/menu_sr_rs.ascii.vim
--- vim73.orig/runtime/lang/menu_sr_rs.ascii.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_sr_rs.ascii.vim	2013-08-04 19:09:08.730616179 +0000
@@ -7,6 +7,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Help menu
 menutrans &Help		      Pomo&c
@@ -256,3 +258,6 @@
 let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
 
 let menutrans_no_file = "[Nema datoteke]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_sr_rs.iso_8859-2.vim vim73/runtime/lang/menu_sr_rs.iso_8859-2.vim
--- vim73.orig/runtime/lang/menu_sr_rs.iso_8859-2.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_sr_rs.iso_8859-2.vim	2013-08-04 19:09:08.730616179 +0000
@@ -7,6 +7,9 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding iso8859-2
 
 " Help menu
@@ -257,3 +260,6 @@
 let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
 
 let menutrans_no_file = "[Nema datoteke]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_sr_rs.iso_8859-5.vim vim73/runtime/lang/menu_sr_rs.iso_8859-5.vim
--- vim73.orig/runtime/lang/menu_sr_rs.iso_8859-5.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_sr_rs.iso_8859-5.vim	2013-08-04 19:09:08.730616179 +0000
@@ -7,6 +7,9 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding iso8859-5
 
 " Help menu
@@ -257,3 +260,6 @@
 let g:menutrans_fileformat_dialog = "  "
 
 let menutrans_no_file = "[ ]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_sr_rs.utf-8.vim vim73/runtime/lang/menu_sr_rs.utf-8.vim
--- vim73.orig/runtime/lang/menu_sr_rs.utf-8.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_sr_rs.utf-8.vim	2013-08-04 19:09:08.733949503 +0000
@@ -7,6 +7,9 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding utf-8
 
 " Help menu
@@ -258,4 +261,7 @@
 
 let menutrans_no_file = "[Нема датотеке]"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: tw=0 keymap=serbian
diff -Naur vim73.orig/runtime/lang/menu_sv_se.latin1.vim vim73/runtime/lang/menu_sv_se.latin1.vim
--- vim73.orig/runtime/lang/menu_sv_se.latin1.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_sv_se.latin1.vim	2013-08-04 19:09:08.740616149 +0000
@@ -1,12 +1,14 @@
 " Menu Translations:    Swedish
 " Maintainer:		Johan Svedberg <johan@svedberg.com>
-" Last Change:		2006 Apr 13
+" Last Change:		2012 May 01
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -248,3 +250,6 @@
 let g:menutrans_tags_dialog = "Skriv in namn p taggfiler.\nSeparera namn med komma."
 let g:menutrans_textwidth_dialog = "Vlj ny textbredd (0 fr att frhindra formatering): "
 let g:menutrans_fileformat_dialog = "Vlj filformat som filen ska sparas med"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_uk_ua.cp1251.vim vim73/runtime/lang/menu_uk_ua.cp1251.vim
--- vim73.orig/runtime/lang/menu_uk_ua.cp1251.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_uk_ua.cp1251.vim	2013-08-04 19:09:08.743949473 +0000
@@ -12,6 +12,9 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding cp1251
 
 " Help menu
@@ -244,3 +247,5 @@
 let g:menutrans_textwidth_dialog = "    (0   )"
 let g:menutrans_fileformat_dialog = "  "
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_uk_ua.koi8-u.vim vim73/runtime/lang/menu_uk_ua.koi8-u.vim
--- vim73.orig/runtime/lang/menu_uk_ua.koi8-u.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_uk_ua.koi8-u.vim	2013-08-04 19:09:08.743949473 +0000
@@ -12,6 +12,9 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding koi8-u
 
 " Help menu
@@ -244,3 +247,5 @@
 let g:menutrans_textwidth_dialog = "֦    (0  צͦ )"
 let g:menutrans_fileformat_dialog = "Ҧ  "
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_vi_vn.vim vim73/runtime/lang/menu_vi_vn.vim
--- vim73.orig/runtime/lang/menu_vi_vn.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_vi_vn.vim	2013-08-04 19:09:08.743949473 +0000
@@ -14,6 +14,8 @@
    finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -327,3 +329,6 @@
 let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Hủy bỏ"
 "
 let menutrans_no_file = "[không có tập tin]"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_zh_cn.gb2312.vim vim73/runtime/lang/menu_zh_cn.gb2312.vim
--- vim73.orig/runtime/lang/menu_zh_cn.gb2312.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_zh_cn.gb2312.vim	2013-08-04 19:09:08.753949443 +0000
@@ -9,6 +9,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " This causes trouble for a broken iconv (symptom: last character is always
 " ??).  Without this it works fine anyway, because gbk/cp936 is a superset of
@@ -264,3 +266,6 @@
 menutrans &Convert\ to\ HTML		ת\ HTML(&C)
 menutrans Set\ '&syntax'\ only		趨\ 'syntax'(&S)
 menutrans Set\ '&filetype'\ too		Ҳ趨\ 'filetype'(&F)
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_zh_cn.utf-8.vim vim73/runtime/lang/menu_zh_cn.utf-8.vim
--- vim73.orig/runtime/lang/menu_zh_cn.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/lang/menu_zh_cn.utf-8.vim	2013-08-04 19:09:08.753949443 +0000
@@ -9,6 +9,8 @@
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 scriptencoding utf-8
 
@@ -261,3 +263,6 @@
 menutrans &Convert\ to\ HTML		转换成\ HTML(&C)
 menutrans Set\ '&syntax'\ only		仅设定\ 'syntax'(&S)
 menutrans Set\ '&filetype'\ too		也设定\ 'filetype'(&F)
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/lang/menu_zh_tw.utf-8.vim vim73/runtime/lang/menu_zh_tw.utf-8.vim
--- vim73.orig/runtime/lang/menu_zh_tw.utf-8.vim	2010-05-15 11:04:03.000000000 +0000
+++ vim73/runtime/lang/menu_zh_tw.utf-8.vim	2013-08-04 19:09:08.757282766 +0000
@@ -1,6 +1,6 @@
 " Menu Translations:	Traditional Chinese
 " Translated By:	Hung-Te Lin	<piaip@csie.ntu.edu.tw>
-" Last Change:		2005/01/28 02:51:38
+" Last Change:		2012 May 01
 
 " {{{ Quit when menu translations have already been done.
 if exists("did_menu_trans")
@@ -9,6 +9,9 @@
 let did_menu_trans = 1
 " }}}
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 scriptencoding utf-8
 
 " {{{ Help menu: complete
@@ -282,4 +285,7 @@
 endif
 " }}}
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:foldmethod=marker:nowrap:foldcolumn=2:foldlevel=1
diff -Naur vim73.orig/runtime/macros/editexisting.vim vim73/runtime/macros/editexisting.vim
--- vim73.orig/runtime/macros/editexisting.vim	2010-05-15 11:04:01.000000000 +0000
+++ vim73/runtime/macros/editexisting.vim	2013-08-04 19:09:08.763949412 +0000
@@ -1,6 +1,6 @@
 " Vim Plugin:	Edit the file with an existing Vim if possible
 " Maintainer:	Bram Moolenaar
-" Last Change:	2008 May 29
+" Last Change:	2013 Feb 24
 
 " This is a plugin, drop it in your (Unix) ~/.vim/plugin or (Win32)
 " $VIM/vimfiles/plugin directory.  Or make a symbolic link, so that you
@@ -98,7 +98,7 @@
 	" Make this tab page the current one and find the window number.
 	exe 'tabnext ' . (i + 1)
 	let winnr = bufwinnr(a:fname)
-	break;
+	break
       endif
     endfor
   endif
diff -Naur vim73.orig/runtime/macros/justify.vim vim73/runtime/macros/justify.vim
--- vim73.orig/runtime/macros/justify.vim	2010-05-15 11:04:01.000000000 +0000
+++ vim73/runtime/macros/justify.vim	2013-08-04 19:09:08.770616059 +0000
@@ -1,4 +1,4 @@
-" Function to left and rigt align text.
+" Function to left and right align text.
 "
 " Written by:	Preben "Peppe" Guldberg <c928400@student.dtu.dk>
 " Created:	980806 14:13 (or around that time anyway)
@@ -256,18 +256,17 @@
 	let str = substitute(str, '\s\+$', '', '')
 	let str = substitute(str, '^\s\+', '', '')
 	let str = substitute(str, '\s\+', ' ', 'g')
-	" Use substitute() hack to get strlen in characters instead of bytes
-	let str_n = strlen(substitute(str, '.', 'x', 'g'))
+	let str_n = strdisplaywidth(str)
 
 	" Possible addition of space after punctuation
 	if exists("join_str")
 	    let str = substitute(str, join_str, '\1 ', 'g')
 	endif
-	let join_n = strlen(substitute(str, '.', 'x', 'g')) - str_n
+	let join_n = strdisplaywidth(str) - str_n
 
 	" Can extraspaces be added?
 	" Note that str_n may be less than strlen(str) [joinspaces above]
-	if strlen(substitute(str, '.', 'x', 'g')) < tw - indent_n && str_n > 0
+	if strdisplaywidth(str) <= tw - indent_n && str_n > 0
 	    " How many spaces should be added
 	    let s_add = tw - str_n - indent_n - join_n
 	    let s_nr  = strlen(substitute(str, '\S', '', 'g') ) - join_n
diff -Naur vim73.orig/runtime/macros/less.bat vim73/runtime/macros/less.bat
--- vim73.orig/runtime/macros/less.bat	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/macros/less.bat	2013-08-04 19:09:08.773949382 +0000
@@ -0,0 +1,10 @@
+@echo off
+rem batch file to start Vim with less.vim.
+rem Read stdin if no arguments were given.
+rem Written by Ken Takata.
+
+if "%1"=="" (
+  vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
+) else (
+  vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" %*
+)
diff -Naur vim73.orig/runtime/macros/less.sh vim73/runtime/macros/less.sh
--- vim73.orig/runtime/macros/less.sh	2010-05-15 11:04:01.000000000 +0000
+++ vim73/runtime/macros/less.sh	2013-08-04 19:09:08.773949382 +0000
@@ -1,16 +1,24 @@
 #!/bin/sh
 # Shell script to start Vim with less.vim.
-# Read stdin if no arguments were given.
+# Read stdin if no arguments were given and stdin was redirected.
 
 if test -t 1; then
- if test $# = 0; then
-   vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
+  if test $# = 0; then
+    if test -t 0; then
+      echo "Missing filename" 1>&2
+      exit
+    fi
+    vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
   else
-   vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
+    vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
   fi
 else
   # Output is not a terminal, cat arguments or stdin
   if test $# = 0; then
+    if test -t 0; then
+      echo "Missing filename" 1>&2
+      exit
+    fi
     cat
   else
     cat "$@"
diff -Naur vim73.orig/runtime/macros/less.vim vim73/runtime/macros/less.vim
--- vim73.orig/runtime/macros/less.vim	2010-05-15 11:04:01.000000000 +0000
+++ vim73/runtime/macros/less.vim	2013-08-04 19:09:08.773949382 +0000
@@ -1,6 +1,6 @@
 " Vim script to work like "less"
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2006 Dec 05
+" Last Change:	2012 May 18
 
 " Avoid loading this file twice, allow the user to define his own script.
 if exists("loaded_less")
@@ -92,7 +92,8 @@
 fun! s:NextPage()
   if line(".") == line("$")
     if argidx() + 1 >= argc()
-      quit
+      " Don't quit at the end of the last file
+      return
     endif
     next
     1
diff -Naur vim73.orig/runtime/macros/matchit.vim vim73/runtime/macros/matchit.vim
--- vim73.orig/runtime/macros/matchit.vim	2010-05-15 11:04:01.000000000 +0000
+++ vim73/runtime/macros/matchit.vim	2013-08-04 19:09:08.780616029 +0000
@@ -131,7 +131,7 @@
     " let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+',
     "  \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>'
     let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
-      \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
+      \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>'
     " s:all = pattern with all the keywords
     let match_words = match_words . (strlen(match_words) ? "," : "") . default
     if match_words !~ s:notslash . '\\\d'
@@ -649,7 +649,7 @@
   "   s:all	regexp based on s:pat and the default groups
   " This part is copied and slightly modified from s:Match_wrapper().
   let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
-    \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
+    \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>'
   " Allow b:match_words = "GetVimMatchWords()" .
   if b:match_words =~ ":"
     let match_words = b:match_words
@@ -808,5 +808,6 @@
 endfun
 
 let &cpo = s:save_cpo
+unlet s:save_cpo
 
 " vim:sts=2:sw=2:
diff -Naur vim73.orig/runtime/menu.vim vim73/runtime/menu.vim
--- vim73.orig/runtime/menu.vim	2010-07-17 13:17:21.000000000 +0000
+++ vim73/runtime/menu.vim	2013-08-04 19:09:08.807282615 +0000
@@ -2,7 +2,7 @@
 " You can also use this as a start for your own set of menus.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2009 Feb 26
+" Last Change:	2013 May 17
 
 " Note that ":an" (short for ":anoremenu") is often used to make a menu work
 " in all modes and avoid side effects from mappings defined by the user.
@@ -101,7 +101,7 @@
 an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew	:browse tabnew<CR>
 an 10.325 &File.&New<Tab>:enew			:confirm enew<CR>
 an <silent> 10.330 &File.&Close<Tab>:close
-	\ :if winheight(2) < 0 <Bar>
+	\ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
 	\   confirm enew <Bar>
 	\ else <Bar>
 	\   confirm close <Bar>
@@ -132,7 +132,7 @@
 an 10.620 &File.E&xit<Tab>:qa			:confirm qa<CR>
 
 func! <SID>SelectAll()
-  exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
+  exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
 endfunc
 
 func! s:FnameEscape(fname)
@@ -308,8 +308,10 @@
   endif
   let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
   if n != ""
-    " remove leading zeros to avoid it being used as an octal number
-    let &tw = substitute(n, "^0*", "", "")
+    " Remove leading zeros to avoid it being used as an octal number.
+    " But keep a zero by itself.
+    let tw = substitute(n, "^0*", "", "")
+    let &tw = tw == '' ? 0 : tw 
   endif
 endfun
 
@@ -434,6 +436,10 @@
       let enc = &enc
     endif
 
+    if !exists("g:menutrans_set_lang_to")
+      let g:menutrans_set_lang_to = 'Set language to'
+    endif
+
     let found = 0
     let s = globpath(&rtp, "spell/*." . enc . ".spl")
     if s != ""
@@ -441,8 +447,9 @@
       for f in split(s, "\n")
 	let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
 	if nm != "en" && nm !~ '/'
+          let _nm = nm
 	  let found += 1
-	  let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
+	  let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
 	  exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
 	  let s:undo_spellang += ['aun ' . menuname]
 	endif
@@ -452,7 +459,7 @@
     if found == 0
       echomsg "Could not find other spell files"
     elseif found == 1
-      echomsg "Found spell file " . nm
+      echomsg "Found spell file " . _nm
     else
       echomsg "Found " . found . " more spell files"
     endif
diff -Naur vim73.orig/runtime/mswin.vim vim73/runtime/mswin.vim
--- vim73.orig/runtime/mswin.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/mswin.vim	2013-08-04 19:09:08.807282615 +0000
@@ -1,7 +1,7 @@
 " Set options and add mapping such that Vim behaves a lot like MS-Windows
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2006 Apr 02
+" Last change:	2012 Jul 25
 
 " bail out if this isn't wanted (mrsvim.vim uses this).
 if exists("g:skip_loading_mswin") && g:skip_loading_mswin
@@ -42,9 +42,10 @@
 " Visual mode without the +virtualedit feature.  They are pasted as if they
 " were characterwise instead.
 " Uses the paste.vim autoload script.
+" Use CTRL-G u to have CTRL-Z only undo the paste.
 
-exe 'inoremap <script> <C-V>' paste#paste_cmd['i']
-exe 'vnoremap <script> <C-V>' paste#paste_cmd['v']
+exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
+exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
 
 imap <S-Insert>		<C-V>
 vmap <S-Insert>		<C-V>
diff -Naur vim73.orig/runtime/optwin.vim vim73/runtime/optwin.vim
--- vim73.orig/runtime/optwin.vim	2010-07-24 18:52:39.000000000 +0000
+++ vim73/runtime/optwin.vim	2013-08-04 19:09:08.810615939 +0000
@@ -1,7 +1,7 @@
 " These commands create the option window.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2010 Jul 24
+" Last Change:	2013 Jun 29
 
 " If there already is an option window, jump to that one.
 if bufwinnr("option-window") > 0
@@ -10,7 +10,7 @@
     if @% == "option-window"
       finish
     endif
-    exe "norm! \<C-W>w"
+    wincmd w
     if s:thiswin == winnr()
       break
     endif
@@ -26,12 +26,8 @@
 fun! <SID>CR()
 
   " If on a continued comment line, go back to the first comment line
-  let lnum = line(".")
+  let lnum = search("^[^\t]", 'bWcn')
   let line = getline(lnum)
-  while line[0] == "\t"
-    let lnum = lnum - 1
-    let line = getline(lnum)
-  endwhile
 
   " <CR> on a "set" line executes the option line
   if match(line, "^ \tset ") >= 0
@@ -82,11 +78,11 @@
     if getline(a:lnum - 1) =~ "(local to"
       let local = 1
       let thiswin = winnr()
-      exe "norm! \<C-W>p"
+      wincmd p
       if exists("b:current_syntax") && b:current_syntax == "help"
-	exe "norm! \<C-W>j"
+	wincmd j
 	if winnr() == thiswin
-	  exe "norm! \<C-W>j"
+	  wincmd j
 	endif
       endif
     else
@@ -111,10 +107,10 @@
   if name == "pt" && &pt =~ "\x80"
     let val = <SID>PTvalue()
   else
-    exe "let val = substitute(&" . name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+    let val = escape(eval('&' . name), " \t\\\"|")
   endif
   if a:local
-    exe "norm! " . a:thiswin . "\<C-W>w"
+    exe a:thiswin . "wincmd w"
   endif
   if match(a:line, "=") >= 0 || (val != "0" && val != "1")
     call setline(a:lnum, " \tset " . name . "=" . val)
@@ -139,7 +135,7 @@
 " Relies on syntax highlighting to be switched on.
 let s:thiswin = winnr()
 while exists("b:current_syntax") && b:current_syntax == "help"
-  exe "norm! \<C-W>w"
+  wincmd w
   if s:thiswin == winnr()
     break
   endif
@@ -147,7 +143,7 @@
 
 " Open the window
 new option-window
-setlocal ts=15 tw=0 noro
+setlocal ts=15 tw=0 noro buftype=nofile
 
 " Insert help and a "set" command for each option.
 call append(0, '" Each "set" line shows the current value of an option (on the left).')
@@ -162,9 +158,7 @@
 
 " Init a local binary option
 fun! <SID>BinOptionL(name)
-  exe "norm! \<C-W>p"
-  exe "let val = &" . a:name
-  exe "norm! \<C-W>p"
+  let val = getwinvar(winnr('#'), '&' . a:name)
   call append("$", substitute(substitute(" \tset " . val . a:name . "\t" .
 	\!val . a:name, "0", "no", ""), "1", "", ""))
 endfun
@@ -177,16 +171,13 @@
 
 " Init a local string option
 fun! <SID>OptionL(name)
-  exe "norm! \<C-W>p"
-  exe "let val = substitute(&" . a:name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
-  exe "norm! \<C-W>p"
+  let val = escape(getwinvar(winnr('#'), '&' . a:name), " \t\\\"|")
   call append("$", " \tset " . a:name . "=" . val)
 endfun
 
 " Init a global string option
 fun! <SID>OptionG(name, val)
-  call append("$", " \tset " . a:name . "=" . substitute(a:val, '[ \t\\"|]',
-	\ '\\\0', "g"))
+  call append("$", " \tset " . a:name . "=" . escape(a:val, " \t\\\"|"))
 endfun
 
 let s:idx = 1
@@ -267,6 +258,8 @@
 call <SID>BinOptionG("is", &is)
 call append("$", "magic\tchange the way backslashes are used in search patterns")
 call <SID>BinOptionG("magic", &magic)
+call append("$", "regexpengine\tselect the default regexp engine used")
+call <SID>OptionG("re", &re)
 call append("$", "ignorecase\tignore case when using a search pattern")
 call <SID>BinOptionG("ic", &ic)
 call append("$", "smartcase\toverride 'ignorecase' when pattern has upper case characters")
@@ -315,6 +308,8 @@
   call append("$", " \tset cspc=" . &cspc)
   call append("$", "cscopequickfix\twhen to open a quickfix window for cscope")
   call <SID>OptionG("csqf", &csqf)
+  call append("$", "cscoperelative\tfile names in a cscope file are relative to that file")
+  call <SID>BinOptionG("csre", &csre)
 endif
 
 
@@ -1042,6 +1037,10 @@
   call append("$", "wildignore\tlist of patterns to ignore files for file name completion")
   call <SID>OptionG("wig", &wig)
 endif
+call append("$", "fileignorecase\tignore case when using file names")
+call <SID>BinOptionG("fic", &fic)
+call append("$", "wildignorecase\tignore case when completing file names")
+call <SID>BinOptionG("wic", &wic)
 if has("wildmenu")
   call append("$", "wildmenu\tcommand-line completion shows a list of matches")
   call <SID>BinOptionG("wmnu", &wmnu)
@@ -1069,6 +1068,8 @@
 call <SID>OptionG("shq", &shq)
 call append("$", "shellxquote\tlike 'shellquote' but include the redirection")
 call <SID>OptionG("sxq", &sxq)
+call append("$", "shellxescape\tcharacters to escape when 'shellxquote' is (")
+call <SID>OptionG("sxe", &sxe)
 call append("$", "shellcmdflag\targument for 'shell' to execute a command")
 call <SID>OptionG("shcf", &shcf)
 call append("$", "shellredir\tused to redirect command output to a file")
@@ -1197,6 +1198,10 @@
 if has("xim")
   call append("$", "imcmdline\twhen set always use IM when starting to edit a command line")
   call <SID>BinOptionG("imc", &imc)
+  call append("$", "imstatusfunc\tfunction to obtain IME status")
+  call <SID>OptionG("imsf", &imsf)
+  call append("$", "imactivatefunc\tfunction to enable/disable IME")
+  call <SID>OptionG("imaf", &imaf)
 endif
 
 
@@ -1340,3 +1345,5 @@
 let &sc = s:old_sc
 let &cpo = s:cpo_save
 unlet s:old_title s:old_icon s:old_ru s:old_sc s:cpo_save s:idx s:lnum
+
+" vim: ts=8 sw=2 sts=2
diff -Naur vim73.orig/runtime/plugin/getscriptPlugin.vim vim73/runtime/plugin/getscriptPlugin.vim
--- vim73.orig/runtime/plugin/getscriptPlugin.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/plugin/getscriptPlugin.vim	2013-08-04 19:09:08.813949262 +0000
@@ -1,6 +1,6 @@
 " ---------------------------------------------------------------------
 " getscriptPlugin.vim
-"  Author:	Charles E. Campbell, Jr.
+"  Author:	Charles E. Campbell
 "  Date:	Jan 07, 2008
 "  Installing:	:help glvs-install
 "  Usage:	:help glvs
@@ -19,7 +19,7 @@
  endif
  finish
 endif
-let g:loaded_getscriptPlugin = "v32"
+let g:loaded_getscriptPlugin = "v35"
 let s:keepcpo                = &cpo
 set cpo&vim
 
diff -Naur vim73.orig/runtime/plugin/matchparen.vim vim73/runtime/plugin/matchparen.vim
--- vim73.orig/runtime/plugin/matchparen.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/plugin/matchparen.vim	2013-08-04 19:09:08.817282585 +0000
@@ -1,19 +1,29 @@
 " Vim plugin for showing matching parens
 " Maintainer:  Bram Moolenaar <Bram@vim.org>
-" Last Change: 2008 Sep 03
+" Last Change: 2013 May 08
 
 " Exit quickly when:
 " - this plugin was already loaded (or disabled)
 " - when 'compatible' is set
-" - the "CursorMoved" autocmd event is not availble.
+" - the "CursorMoved" autocmd event is not available.
 if exists("g:loaded_matchparen") || &cp || !exists("##CursorMoved")
   finish
 endif
 let g:loaded_matchparen = 1
 
+if !exists("g:matchparen_timeout")
+  let g:matchparen_timeout = 300
+endif
+if !exists("g:matchparen_insert_timeout")
+  let g:matchparen_insert_timeout = 60
+endif
+
 augroup matchparen
   " Replace all matchparen autocommands
   autocmd! CursorMoved,CursorMovedI,WinEnter * call s:Highlight_Matching_Pair()
+  if exists('##TextChanged')
+    autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair()
+  endif
 augroup END
 
 " Skip the rest if it was already done.
@@ -82,8 +92,9 @@
   endif
 
   " When not in a string or comment ignore matches inside them.
+  " We match "escape" for special items, such as lispEscapeSpecial.
   let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
-	\ '=~?  "string\\|character\\|singlequote\\|comment"'
+	\ '=~?  "string\\|character\\|singlequote\\|escape\\|comment"'
   execute 'if' s_skip '| let s_skip = 0 | endif'
 
   " Limit the search to lines visible in the window.
@@ -95,10 +106,15 @@
     let stopline = stoplinetop
   endif
 
+  " Limit the search time to 300 msec to avoid a hang on very long lines.
+  " This fails when a timeout is not supported.
+  if mode() == 'i' || mode() == 'R'
+    let timeout = exists("b:matchparen_insert_timeout") ? b:matchparen_insert_timeout : g:matchparen_insert_timeout
+  else
+    let timeout = exists("b:matchparen_timeout") ? b:matchparen_timeout : g:matchparen_timeout
+  endif
   try
-    " Limit the search time to 300 msec to avoid a hang on very long lines.
-    " This fails when a timeout is not supported.
-    let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 300)
+    let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, timeout)
   catch /E118/
     " Can't use the timeout, restrict the stopline a bit more to avoid taking
     " a long time on closed folds and long lines.
diff -Naur vim73.orig/runtime/plugin/netrwPlugin.vim vim73/runtime/plugin/netrwPlugin.vim
--- vim73.orig/runtime/plugin/netrwPlugin.vim	2010-07-27 14:55:00.000000000 +0000
+++ vim73/runtime/plugin/netrwPlugin.vim	2013-08-04 19:09:08.817282585 +0000
@@ -1,9 +1,9 @@
 " netrwPlugin.vim: Handles file transfer and remote directory listing across a network
 "            PLUGIN SECTION
-" Date:		Jul 27, 2010
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:		Apr 30, 2013
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
-" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -20,13 +20,15 @@
 if &cp || exists("g:loaded_netrwPlugin")
  finish
 endif
-let g:loaded_netrwPlugin = "v140"
+"DechoTabOn
+let g:loaded_netrwPlugin = "v149"
 if v:version < 702
  echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
  finish
 endif
 let s:keepcpo = &cpo
 set cpo&vim
+"DechoTabOn
 
 " ---------------------------------------------------------------------
 " Public Interface: {{{1
@@ -34,30 +36,26 @@
 " Local Browsing: {{{2
 augroup FileExplorer
  au!
- au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
- au VimEnter * silent! call s:VimEnter(expand("<amatch>"))
+ " SEE Benzinger problem...
+ au BufEnter *	sil! call s:LocalBrowse(expand("<amatch>"))
+ au VimEnter *	sil! call s:VimEnter(expand("<amatch>"))
  if has("win32") || has("win95") || has("win64") || has("win16")
-  au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
+  au BufEnter .* sil! call s:LocalBrowse(expand("<amatch>"))
  endif
 augroup END
 
 " Network Browsing Reading Writing: {{{2
 augroup Network
  au!
- if has("win32") || has("win95") || has("win64") || has("win16")
-  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
- else
-  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
-  au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
- endif
- au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
- au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
- au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
- au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
+ au BufReadCmd   file://*									call netrw#FileUrlRead(expand("<amatch>"))
+ au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
+ au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>"))
+ au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
+ au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
  try
-  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
+  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
  catch /^Vim\%((\a\+)\)\=:E216/
-  au SourcePre   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
+  au SourcePre   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
  endtry
 augroup END
 
@@ -94,27 +92,37 @@
   " unfortunate interaction -- debugging calls can't be used here;
   " the BufEnter event causes triggering when attempts to write to
   " the DBG buffer are made.
+  if !exists("s:vimentered")
+   return
+  endif
+"  call Decho("s:LocalBrowse(dirname<".a:dirname.">){")
 "  echomsg "dirname<".a:dirname.">"
   if has("amiga")
    " The check against '' is made for the Amiga, where the empty
    " string is the current directory and not checking would break
    " things such as the help command.
+"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (amiga)")
    if a:dirname != '' && isdirectory(a:dirname)
-    silent! call netrw#LocalBrowseCheck(a:dirname)
+    sil! call netrw#LocalBrowseCheck(a:dirname)
    endif
   elseif isdirectory(a:dirname)
 "   echomsg "dirname<".dirname."> isdir"
-   silent! call netrw#LocalBrowseCheck(a:dirname)
+"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (not amiga)")
+   sil! call netrw#LocalBrowseCheck(a:dirname)
   endif
   " not a directory, ignore it
+"  call Decho("|return s:LocalBrowse }")
 endfun
 
 " ---------------------------------------------------------------------
 " s:VimEnter: {{{2
 fun! s:VimEnter(dirname)
-  let curwin= winnr()
+"  call Decho("VimEnter(dirname<".a:dirname.">){")
+  let curwin       = winnr()
+  let s:vimentered = 1
   windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
   exe curwin."wincmd w"
+"  call Decho("|return VimEnter }")
 endfun
 
 " ---------------------------------------------------------------------
diff -Naur vim73.orig/runtime/plugin/tarPlugin.vim vim73/runtime/plugin/tarPlugin.vim
--- vim73.orig/runtime/plugin/tarPlugin.vim	2010-08-10 00:02:24.000000000 +0000
+++ vim73/runtime/plugin/tarPlugin.vim	2013-08-04 19:09:08.820615909 +0000
@@ -1,6 +1,6 @@
 " tarPlugin.vim -- a Vim plugin for browsing tarfiles
 " Original was copyright (c) 2002, Michael C. Toren <mct@toren.net>
-" Modified by Charles E. Campbell, Jr.
+" Modified by Charles E. Campbell
 " Distributed under the GNU General Public License.
 "
 " Updates are available from <http://michael.toren.net/code/>.  If you
@@ -14,7 +14,7 @@
 if &cp || exists("g:loaded_tarPlugin")
  finish
 endif
-let g:loaded_tarPlugin = "v26"
+let g:loaded_tarPlugin = "v29"
 let s:keepcpo          = &cpo
 set cpo&vim
 
diff -Naur vim73.orig/runtime/plugin/tohtml.vim vim73/runtime/plugin/tohtml.vim
--- vim73.orig/runtime/plugin/tohtml.vim	2010-08-12 19:59:26.000000000 +0000
+++ vim73/runtime/plugin/tohtml.vim	2013-08-04 19:09:08.823949232 +0000
@@ -1,31 +1,175 @@
 " Vim plugin for converting a syntax highlighted file to HTML.
 " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2010 Aug 12
+" Last Change: 2013 Jun 26
 "
 " The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and
 " $VIMRUNTIME/syntax/2html.vim
 "
-" TODO:
+" TODO: {{{
+"   * Options for generating the CSS in external style sheets. New :TOcss
+"     command to convert the current color scheme into a (mostly) generic CSS
+"     stylesheet which can be re-used. Alternate stylesheet support? Good start
+"     by Erik Falor
+"     ( https://groups.google.com/d/topic/vim_use/7XTmC4D22dU/discussion ).
+"   * Add optional argument to :TOhtml command to specify mode (gui, cterm,
+"     term) to use for the styling. Suggestion by "nacitar".
+"   * Add way to override or specify which RGB colors map to the color numbers
+"     in cterm. Get better defaults than just guessing? Suggestion by "nacitar".
+"   * Disable filetype detection until after all processing is done.
+"   * Add option for not generating the hyperlink on stuff that looks like a
+"     URL? Or just color the link to fit with the colorscheme (and only special
+"     when hovering)?
+"   * Bug: Opera does not allow printing more than one page if uncopyable
+"     regions is turned on. Possible solution: Add normal text line numbers with
+"     display:none, set to display:inline for print style sheets, and hide
+"     <input> elements for print, to allow Opera printing multiple pages (and
+"     other uncopyable areas?). May need to make the new text invisible to IE
+"     with conditional comments to prevent copying it, IE for some reason likes
+"     to copy hidden text. Other browsers too?
+"   * Bug: still a 1px gap throughout the fold column when html_prevent_copy is
+"     "fn" in some browsers. Specifically, in Chromium on Ubuntu (but not Chrome
+"     on Windows). Perhaps it is font related?
+"   * Bug: still some gaps in the fold column when html_prevent_copy contains
+"     'd' and showing the whole diff (observed in multiple browsers). Only gaps
+"     on diff lines though.
+"   * Undercurl support via CSS3, with fallback to dotted or something:
+"	https://groups.google.com/d/topic/vim_use/BzXA6He1pHg/discussion
+"   * Redo updates for modified default foldtext (v11) when/if the patch is
+"     accepted to modify it.
+"   * Test case +diff_one_file-dynamic_folds+expand_tabs-hover_unfold
+"		+ignore_conceal-ignore_folding+no_foldcolumn+no_pre+no_progress
+"		+number_lines-pre_wrap-use_css+use_xhtml+whole_filler.xhtml
+"     does not show the whole diff filler as it is supposed to?
+"   * Bug: when 'isprint' is wrong for the current encoding, will generate
+"     invalid content. Can/should anything be done about this? Maybe a separate
+"     plugin to correct 'isprint' based on encoding?
+"   * Check to see if the windows-125\d encodings actually work in Unix without
+"     the 8bit- prefix. Add prefix to autoload dictionaries for Unix if not.
+"   * Font auto-detection similar to
+"     http://www.vim.org/scripts/script.php?script_id=2384 but for a variety of
+"     platforms.
+"   * Error thrown when sourcing 2html.vim directly when plugins are not loaded.
+"   * Pull in code from http://www.vim.org/scripts/script.php?script_id=3113 :
+"	- listchars support
+"	- full-line background highlight
+"	- other?
+"   * Make it so deleted lines in a diff don't create side-scrolling (get it
+"     free with full-line background highlight above).
 "   * Restore open/closed folds and cursor position after processing each file
-"     with option not to restore for speed increase
-"   * Add extra meta info (generation time, etc.)
-"   * Tidy up so we can use strict doctype more?
+"     with option not to restore for speed increase.
+"   * Add extra meta info (generation time, etc.)?
+"   * Tidy up so we can use strict doctype in even more situations
 "   * Implementation detail: add threshold for writing the lines to the html
 "     buffer before we're done (5000 or so lines should do it)
 "   * TODO comments for code cleanup scattered throughout
+"}}}
 
 if exists('g:loaded_2html_plugin')
   finish
 endif
-let g:loaded_2html_plugin = 'vim7.3_v6'
+let g:loaded_2html_plugin = 'vim7.3_v14'
+
+"
+" Changelog: {{{
+"
+"   7.3_v14 (this version): Allow suppressing line number anchors using
+"			    g:html_line_ids=0. Allow customizing
+"			    important IDs (like line IDs and fold IDs) using
+"			    g:html_id_expr evalutated when the buffer conversion
+"			    is started.
+"   7.3_v13 (2eb30f341e8d): Keep foldmethod at manual in the generated file and
+"			    insert modeline to set it to manual.
+"			    Fix bug: diff mode with 2 unsaved buffers creates a
+"			    duplicate of one buffer instead of including both.
+"			    Add anchors to each line so you can put '#L123'
+"			    or '#123' at the end of the URL to jump to line 123
+"			    (idea by Andy Spencer). Add javascript to open folds
+"			    to show the anchor being jumped to if it is hidden.
+"			    Fix XML validation error: &nsbp; not part of XML.
+"			    Allow TOhtml to chain together with other commands
+"			    using |.
+"   7.3_v12 (9910cbff5f16): Fix modeline mangling to also work for when multiple
+"			    highlight groups make up the start-of-modeline text.
+"			    Improve render time of page with uncopyable regions
+"			    by not using one-input-per-char. Change name of
+"			    uncopyable option from html_unselectable to
+"			    html_prevent_copy. Added html_no_invalid option and
+"			    default to inserting invalid markup for uncopyable
+"			    regions to prevent MS Word from pasting undeletable
+"			    <input> elements. Fix 'cpo' handling (Thilo Six).
+"		 7.3_v12b1: Add html_unselectable option. Rework logic to
+"			    eliminate post-processing substitute commands in
+"			    favor of doing the work up front. Remove unnecessary
+"			    special treatment of 'LineNr' highlight group. Minor
+"			    speed improvements. Fix modeline mangling in
+"			    generated output so it works for text in the first
+"			    column. Fix missing line number and fold column in
+"			    diff filler lines. Fix that some fonts have a 1px
+"			    gap (using a dirty hack, improvements welcome). Add
+"			    "colorscheme" meta tag. Does NOT include support for
+"			    the new default foldtext added in v11, as the patch
+"			    adding it has not yet been included in Vim.
+"   7.3_v11 ( unreleased ): Support new default foldtext from patch by Christian
+"			    Brabandt in
+"			    http://groups.google.com/d/topic/vim_dev/B6FSGfq9VoI/discussion.
+"			    This patch has not yet been included in Vim, thus
+"			    these changes are removed in the next version.
+"   7.3_v10 (fd09a9c8468e): Fix error E684 when converting a range wholly inside
+"			    multiple nested folds with dynamic folding on.
+"			    Also fix problem with foldtext in this situation.
+"   7.3_v9  (0877b8d6370e): Add html_pre_wrap option active with html_use_css
+"			    and without html_no_pre, default value same as
+"			    'wrap' option, (Andy Spencer). Don't use
+"			    'fileencoding' for converted document encoding if
+"			    'buftype' indicates a special buffer which isn't
+"			    written.
+"   7.3_v8  (85c5a72551e2): Add html_expand_tabs option to allow leaving tab
+"			    characters in generated output (Andy Spencer).
+"			    Escape text that looks like a modeline so Vim
+"			    doesn't use anything in the converted HTML as a
+"			    modeline. Bugfixes: Fix folding when a fold starts
+"			    before the conversion range. Remove fold column when
+"			    there are no folds.
+"   7.3_v7  (840c3cadb842): see betas released on vim_dev below:
+"		  7.3_v7b3: Fixed bug, convert Unicode to UTF-8 all the way.
+"		  7.3_v7b2: Remove automatic detection of encodings that are not
+"			    supported by all major browsers according to
+"			    http://wiki.whatwg.org/wiki/Web_Encodings and
+"			    convert to UTF-8 for all Unicode encodings. Make
+"			    HTML encoding to Vim encoding detection be
+"			    case-insensitive for built-in pairs.
+"		  7.3_v7b1: Remove use of setwinvar() function which cannot be
+"			    called in restricted mode (Andy Spencer). Use
+"			    'fencoding' instead of 'encoding' to determine by
+"			    charset, and make sure the 'fenc' of the generated
+"			    file matches its indicated charset. Add charsets for
+"			    all of Vim's natively supported encodings.
+"   7.3_v6  (0d3f0e3d289b): Really fix bug with 'nowrapscan', 'magic' and other
+"			    user settings interfering with diff mode generation,
+"			    trailing whitespace (e.g. line number column) when
+"			    using html_no_pre, and bugs when using
+"			    html_hover_unfold.
+"   7.3_v5  ( unreleased ): Fix bug with 'nowrapscan' and also with out-of-sync
+"			    folds in diff mode when first line was folded.
+"   7.3_v4  (7e008c174cc3): Bugfixes, especially for xhtml markup, and diff mode
+"   7.3_v3  (a29075150aee): Refactor option handling and make html_use_css
+"			    default to true when not set to anything. Use strict
+"			    doctypes where possible. Rename use_xhtml option to
+"			    html_use_xhtml for consistency. Use .xhtml extension
+"			    when using this option. Add meta tag for settings.
+"   7.3_v2  (80229a724a11): Fix syntax highlighting in diff mode to use both the
+"			    diff colors and the normal syntax colors
+"   7.3_v1  (e7751177126b): Add conceal support and meta tags in output
+"   Pre-v1 baseline: Mercurial changeset 3c9324c0800e
+"}}}
 
 " Define the :TOhtml command when:
 " - 'compatible' is not set
 " - this plugin was not already loaded
-" - user commands are available.
+" - user commands are available. {{{
 if !&cp && !exists(":TOhtml") && has("user_commands")
-  command -range=% TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
-endif
+  command -range=% -bar TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
+endif "}}}
 
 " Make sure any patches will probably use consistent indent
-"   vim: ts=8 sw=2 sts=2 noet
+"   vim: ts=8 sw=2 sts=2 noet fdm=marker
diff -Naur vim73.orig/runtime/plugin/vimballPlugin.vim vim73/runtime/plugin/vimballPlugin.vim
--- vim73.orig/runtime/plugin/vimballPlugin.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/plugin/vimballPlugin.vim	2013-08-04 19:09:08.823949232 +0000
@@ -16,18 +16,22 @@
 if &cp || exists("g:loaded_vimballPlugin")
  finish
 endif
-let g:loaded_vimballPlugin = "v31"
+let g:loaded_vimballPlugin = "v35"
 let s:keepcpo              = &cpo
 set cpo&vim
 
 " ------------------------------------------------------------------------------
 " Public Interface: {{{1
-com! -ra   -complete=file -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
-com! -na=? -complete=dir  UseVimball			call vimball#Vimball(1,<f-args>)
-com! -na=0                VimballList			call vimball#Vimball(0)
-com! -na=* -complete=dir  RmVimball				call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
-au SourceCmd  *.vba.gz,*.vba.bz2,*.vba.zip		call vimball#Decompress(expand("<amatch>"))|call vimball#Vimball(1)
-au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'| setlocal ma ff=unix noma |endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+com! -ra   -complete=file -na=+ -bang MkVimball				call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
+com! -na=? -complete=dir  UseVimball						call vimball#Vimball(1,<f-args>)
+com! -na=0                VimballList						call vimball#Vimball(0)
+com! -na=* -complete=dir  RmVimball							call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
+au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+au SourceCmd *.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz			if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if expand("%")!=expand("<afile>")|close|endif
+au SourceCmd *.vba											if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
+au BufEnter  *.vmb,*.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
+au SourceCmd *.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz			if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if expand("%")!=expand("<afile>")|close|endif
+au SourceCmd *.vmb											if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
 
 " =====================================================================
 " Restoration And Modelines: {{{1
diff -Naur vim73.orig/runtime/plugin/zipPlugin.vim vim73/runtime/plugin/zipPlugin.vim
--- vim73.orig/runtime/plugin/zipPlugin.vim	2010-05-15 11:04:01.000000000 +0000
+++ vim73/runtime/plugin/zipPlugin.vim	2013-08-04 19:09:08.827282555 +0000
@@ -1,9 +1,9 @@
 " zipPlugin.vim: Handles browsing zipfiles
 "            PLUGIN PORTION
-" Date:			Oct 05, 2007
-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+" Date:			Jun 07, 2013
+" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
 " License:		Vim License  (see vim's :help license)
-" Copyright:    Copyright (C) 2005,2006 Charles E. Campbell, Jr. {{{1
+" Copyright:    Copyright (C) 2005-2013 Charles E. Campbell {{{1
 "               Permission is hereby granted to use and distribute this code,
 "               with or without modifications, provided that this copyright
 "               notice is copied with it. Like anything else that's free,
@@ -20,11 +20,17 @@
 if &cp || exists("g:loaded_zipPlugin")
  finish
 endif
-let g:loaded_zipPlugin = "v23"
+let g:loaded_zipPlugin = "v27"
 let s:keepcpo          = &cpo
 set cpo&vim
 
 " ---------------------------------------------------------------------
+" Options: {{{1
+if !exists("g:zipPlugin_ext")
+ let g:zipPlugin_ext= '*.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,*.oxt,*.kmz,*.wsz,*.xap,*.docx,*.docm,*.dotx,*.dotm,*.potx,*.potm,*.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsx,*.xlsm,*.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx'
+endif
+
+" ---------------------------------------------------------------------
 " Public Interface: {{{1
 augroup zip
  au!
@@ -40,7 +46,7 @@
   au FileWriteCmd zipfile:*/*	call zip#Write(expand("<amatch>"))
  endif
 
- au BufReadCmd   *.zip,*.jar,*.xpi,*.war,*.ear		call zip#Browse(expand("<amatch>"))
+ exe "au BufReadCmd ".g:zipPlugin_ext.' call zip#Browse(expand("<amatch>"))'
 augroup END
 
 " ---------------------------------------------------------------------
diff -Naur vim73.orig/runtime/scripts.vim vim73/runtime/scripts.vim
--- vim73.orig/runtime/scripts.vim	2010-07-29 20:35:43.000000000 +0000
+++ vim73/runtime/scripts.vim	2013-08-04 19:09:08.863949112 +0000
@@ -1,7 +1,7 @@
 " Vim support file to detect file types in scripts
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2010 Jul 29
+" Last change:	2013 May 24
 
 " This file is called by an autocommand for every file that has just been
 " loaded into a buffer.  It checks if the type of file can be recognized by
@@ -152,6 +152,10 @@
   elseif s:name =~ 'cfengine'
     set ft=cfengine
 
+    " Erlang scripts
+  elseif s:name =~ 'escript'
+    set ft=erlang
+
   endif
   unlet s:name
 
@@ -168,7 +172,8 @@
     call SetFileTypeSH(s:line1)	" defined in filetype.vim
 
     " Z shell scripts
-  elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>'
+  elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>' ||
+        \ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
     set ft=zsh
 
   " ELM Mail files
@@ -197,7 +202,8 @@
     " - "=== ", line of "=", "---", "+++ " (SVK diff)
     " - "=== ", "--- ", "+++ " (bzr diff, common case)
     " - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
-  elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
+    " - "# HG changeset patch" in first line (Mercurial export format)
+  elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
 	\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
 	\ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
 	\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
@@ -325,6 +331,17 @@
   elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
     set ft=git
 
+   " Gprof (gnu profiler)
+   elseif s:line1 == 'Flat profile:'
+     \ && s:line2 == ''
+     \ && s:line3 =~ '^Each sample counts as .* seconds.$'
+     set ft=gprof
+
+  " Erlang terms
+  " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
+  elseif s:line1 =~? '-\*-.*erlang.*-\*-'
+    set ft=erlang
+
   " CVS diff
   else
     let s:lnum = 1
diff -Naur vim73.orig/runtime/spell/br/br_FR.diff vim73/runtime/spell/br/br_FR.diff
--- vim73.orig/runtime/spell/br/br_FR.diff	2010-05-15 11:03:47.000000000 +0000
+++ vim73/runtime/spell/br/br_FR.diff	2013-08-04 19:09:08.873949082 +0000
@@ -1,13 +0,0 @@
-*** br_FR.orig.aff	2010-04-14 18:44:36.365731271 +0200
---- br_FR.aff	2010-04-14 18:43:31.069137439 +0200
-***************
-*** 9,14 ****
---- 9,16 ----
-  SET UTF-8
-  TRY esiaùnñrtolcdugmphbyfvkwzESIAÙNÑRTOLCDUGMPHBYFVKWZ'
-  
-+ MIDWORD '
-+ 
-  PFX m Y 1
-  PFX m   0          m'         [aehiouy]
-  
diff -Naur vim73.orig/runtime/spell/br/main.aap vim73/runtime/spell/br/main.aap
--- vim73.orig/runtime/spell/br/main.aap	2010-05-15 11:03:47.000000000 +0000
+++ vim73/runtime/spell/br/main.aap	2013-08-04 19:09:08.873949082 +0000
@@ -25,16 +25,16 @@
 #
 # Fetching the files from OpenOffice.org.
 #
-OODIR = http://extensions.services.openoffice.org/e-files/2207/3
-:attr {fetch = $OODIR/%file%} dict-br_0.3.oxt
+OODIR = http://extensions.libreoffice.org/extension-center/an-drouizig-breton-spellchecker/releases/0.11/
+:attr {fetch = $OODIR/%file%} dict-br-0.11.oxt
 
 # The files don't depend on the .zip file so that we can delete it.
 # Only download the zip file if the targets don't exist.
 br_FR.aff br_FR.dic: {buildcheck=}
         :assertpkg unzip patch
-        :fetch dict-br_0.3.oxt
-        :sys $UNZIP dict-br_0.3.oxt
-        :delete dict-br_0.3.oxt
+        :fetch dict-br-0.11.oxt
+        :sys $UNZIP dict-br-0.11.oxt
+        :delete dict-br-0.11.oxt
         :copy dictionaries/br_FR.aff br_FR.aff
         :copy dictionaries/br_FR.dic br_FR.dic
         # The br_FR.aff file contains a BOM, remove it.
@@ -65,12 +65,12 @@
 
 check:
         :assertpkg unzip diff
-        :fetch dict-br_0.3.oxt
+        :fetch dict-br-0.11.oxt
         :mkdir tmp
         :cd tmp
         @try:
             @import stat
-            :sys $UNZIP ../dict-br_0.3.oxt
+            :sys $UNZIP ../dict-br-0.11.oxt
             :sys {force} diff ../dictionaries/br_FR.aff br_FR.aff >d
             @if os.stat('d')[stat.ST_SIZE] > 0:
                 :copy br_FR.aff ../br_FR.new.aff
@@ -80,7 +80,7 @@
         @finally:
             :cd ..
             :delete {r}{f}{q} tmp
-            :delete dict-br_0.3.oxt
+            :delete dict-br-0.11.oxt
 
 
 # vim: set sts=4 sw=4 :
diff -Naur vim73.orig/runtime/spell/en.utf-8.spl vim73/runtime/spell/en.utf-8.spl
--- vim73.orig/runtime/spell/en.utf-8.spl	2010-05-15 11:03:38.000000000 +0000
+++ vim73/runtime/spell/en.utf-8.spl	2013-08-04 19:09:09.017281984 +0000
@@ -1,5 +1,5 @@
 VIMspell2    
-usaucagbnz                                                                      ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ   '   K _aeiaeya anaa ananaiieairereairearairarean aanan aaareearareairareeircckchkchtuchtechtichscisdijearereearairearareearierearaireauoeeieiaeirereeirareereairereearereeirewooewoewueewuewuieyafghfphgejggjghfieeiighiuyieaiieyierearieuooieuuighijdijggjgekcckchkqukwquoeauoewoeuooieuooewoouioouphfquwqukscischstishunsionshuntionshuncionssztechtistichtuchuoouieuuoeuewueewufoughuffoughuioouiewuyiwquyiezss   Z kah(aeiouy)-^*har(aeiouy)-^*ra(hr)^*a^*ah(aeiouy)-har(aeiouy)-ra(hr) à^*å^*bb- bbcq- ciaxchxc(eiy)-sckkcough^kfcc<cckdg(eiy)kdd- dté<eeh(aeiouy)-^*her(aeiouy)-^*re(hr)^*enough^$*nfe^*eh(aeiouy)-her(aeiouy)-re(hr) ff- ffgn^ngn$ngns$nsgned$ngh(aeiouy)-kgh gg9kgkhhih(aeiouy)-^*hir(aeiouy)-^*ri(hr)^*i^*ing6nih(aeiouy)-hir(aeiouy)-ri(hr) jkkn^nkk- kklaugh^lfll- llmb$mmmmmmnn- nnoh(aeiouy)-^*hor(aeiouy)-^*ro(hr)^*o^*oh(aeiouy)-hor(aeiouy)-ro(hr) phfpn^npp- ppqkrh^rrough^rfrr- rr	sch(eou)-sksc(iey)-sshxsi(ao)-xss- ssti(ao)-xth@tch-- tough^tftt- ttuh(aeiouy)-^*hur(aeiouy)-^*ru(hr)^*u^*uh(aeiouy)-hur(aeiouy)-ru(hr) v^wvfwr^rwh^w	w(aeiou)-wx^sxks	y(aeiou)-yzz- zs     @htht@   will boy mother found name run differ such of on or even four all father would I need see place earth a hot world how her eye much study was get way well still for does school about act plant where few thing hand back think large high also like move call been just and some day start add go any know long water this little read port great real say first left last don't sound came life point from when he word went could work after five look put said late eight show our out they two here state change might so never you if food in is it follow house story than him tree that line hundred want grow old man build give may self light mean to answer through learn six home which thousand find small hard side over only end sun very north good own every keep sentence time too again did cover are up ten us each thought make draw an sea press as turn set tell near had by must has one big while at page city were there take play ask cross form head be farm other air write year live before same with three far come land nine people close saw between more who part we round these why me stand picture help their my now seven right number should new them then spell can cause many under men but country off night the most his try down low no let what kind do your she made use have animal     Jaàáâãäå/eèéêë/iìíîï/oòóôõö/uùúûü/nñ/cç/yÿý/sß/        F=c 4'23abcdefghijklmnopqrstuvwxyzmnstongsteath
+usaucagbnz                                                                     ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ   '   K _aeiaeya anaa ananaiieairareairereairearan aaan aanareairareearareeircckchtechtichtuchschkcisdijearareearairearereearierearaireauoeeieiaeirareeirereereairereearereeirewoewooewuiewuewueeyafphfghgejggjghfiighiuyieeieaiieyierearieuuieuooighijdijggjgekchkcckqukwquoeauoewoeuooewoouioouooieuphfqukquwschstiscishuntionshunsionshuncionssztechtichtistuchuewuoouoeuieuueewufoughuffoughuiewuioouyiwquyiezss   Z kah(aeiouy)-^*har(aeiouy)-^*ra(hr)^*a^*ah(aeiouy)-har(aeiouy)-ra(hr) à^*å^*bb- bbcq- ciaxchxc(eiy)-sckkcough^kfcc<cckdg(eiy)kdd- dté<eeh(aeiouy)-^*her(aeiouy)-^*re(hr)^*enough^$*nfe^*eh(aeiouy)-her(aeiouy)-re(hr) ff- ffgn^ngn$ngns$nsgned$ngh(aeiouy)-kgh gg9kgkhhih(aeiouy)-^*hir(aeiouy)-^*ri(hr)^*i^*ing6nih(aeiouy)-hir(aeiouy)-ri(hr) jkkn^nkk- kklaugh^lfll- llmb$mmmmmmnn- nnoh(aeiouy)-^*hor(aeiouy)-^*ro(hr)^*o^*oh(aeiouy)-hor(aeiouy)-ro(hr) phfpn^npp- ppqkrh^rrough^rfrr- rr	sch(eou)-sksc(iey)-sshxsi(ao)-xss- ssti(ao)-xth@tch-- tough^tftt- ttuh(aeiouy)-^*hur(aeiouy)-^*ru(hr)^*u^*uh(aeiouy)-hur(aeiouy)-ru(hr) v^wvfwr^rwh^w	w(aeiou)-wx^sxks	y(aeiou)-yzz- zs     @htht@   will boy mother found name run differ such of on or even four all father would I need see place earth a hot world how her eye much study was get way well still for does school about act plant where few thing hand back think large high also like move call been just and some day start add go any know long water this little read port great real say first left last don't sound came life point from when he word went could work after five look put said late eight show our out they two here state change might so never you if food in is it follow house story than him tree that line hundred want grow old man build give may self light mean to answer through learn six home which thousand find small hard side over only end sun very north good own every keep sentence time too again did cover are up ten us each thought make draw an sea press as turn set tell near had by must has one big while at page city were there take play ask cross form head be farm other air write year live before same with three far come land nine people close saw between more who part we round these why me stand picture help their my now seven right number should new them then spell can cause many under men but country off night the most his try down low no let what kind do your she made use have animal     Jaàáâãäå/eèéêë/iìíîï/oòóôõö/uùúûü/nñ/cç/yÿý/sß/        O 4'23abcdefghijklmnopqrstuvwxyzmnstongsteath
 tre  4uwt  .hwai  .sx  8tyza  Wbgpp's   '-.abcdefghijklmnopqrstuvwxyzatnheslevels
 km.  a.acrhen'sdehiovwark 's  s olfv'  s  en  'u  sk  an'vsitch's  'abcdehijlmnorsuybcfglnst a  kus   '  e  taei  l  lon  edon eim  s  dr   'n  gent   'seh _i   dm \r  sent '  ss e _imd  s l  yen  te _it   d m \r  soi  raeiory  '  'sy 8s '  ss   '  et  '  s teviatei   d  s ano  n  '  e ms's Eeiou cm einal  l  sc lt e i o  s  d	  'adlrt  uy  m  'asr do ncdnryornwy'sombie'seen  'shir Heath yantt e lssion   'a  s *lstwyt Hh   st e _i o  'an Kc  tor r  se _i  dn \rc t ied  eglnaeijn c  d \r  sng  l san  'a Eeil l  eein eti \y  egdoneuct ei ln *s *dn o *gess 'e ms msrae _itio o r   d  r  saeou  ytz ei an ove ls my  e -  rsbodie d  t (ot =i seo g  rrmal  i l s  'adlmr  suv rei   ' *d  s "nisth e _i cm  d  r  sion   'i  ss im  tinab tl  e  yintginael  \ls  ' s i ei  s  d mr anovn   'i  s se  lness  0'ntd  e _i  s  *se bg *so arou naeiou  'cdhm  nsadabra  ' mse _i   d \r  sa m  n  '  os  oi ove   ' ln  sess  0ea xc <sdge _im   dm \r  sent's sent's s agat ei o ano inpt e ln mrs mtess   ' 0e	  0'ceiotueioss   'e _i  d  sssa =i   ' e  snd e _i  s  d  rinl  e _i  s Kct -ei lm ^smindedln yesses  de  r   'i  ss im \a anindedln *yesse *snt Khlru Xvtei  l n  rs  mt os  m  tbp ei  s  dn  r  ct   ' ^sn gti ov  eit \yaeiri nm xnious  lness ' 0e msnen Kc tauct ei l n o  sd \r s  l n ano `vn   'i  ss \m  tse  l n mr srd  ei l $n *ss  t t K'jnstza K'd aa Aeibl me anv e  m  st 	e _i  zsmsa l   'a  ei  lnia  ' n  'acehiklmnoqrtuycdnprsi  aeim  ei \y iac  e ai  sl l san   's hi mp ath 6uulc ou s .eilor  tudlnps e _ieraot ei on o `vg  \lmet et   ' e _i  sua l tt aei o  sb ntilliti \y 0ee  y  $nion i' *s d  rn 8vg  lne 0ss   ' eiob anoi ll in   ' e _i  sr i ms \ydenct \e   '-a  spron el  l n  saiimm  Ye _i  s xam Jvat ei an oszae _itio  n   dr s ' sae _ition  i' *s   d r  slmrsuadei   ' md  sn mgmpodat ei n ove  nalniye m s  d \r  s  _ii Kcsh  e _i md   'a 	ei  s n n o tntt   'a ei  sbn Hile  y ness  '  c  tn gerr e im *sent i' *sei dm sent   ' sn g aeudtit  xa e _i  s qei ov ea e _i  llmrsturat ei an o `vulat ei o an o 
 vas  ct eed  l $nae it \lti ?o ove   s  d  r  som e _i  s d   'dr  stv i'bai tc  t al laioym Ktinophe n  cn  ei *cl Ieed  oaeior  ye 7a  ' b  d Knrsnoa  r ^n   oel n  r <svae _ib `l   d m  r  sl  e *oomat 	idn   'i lno  su  cf  ti yc eatio \ness 0'pshil e  ei \slo  u genr 	9mowledge _i m  	[a dm  r  sent ' su  e eln rsuy Ktc 	iag  u  tstic  Pai >s 	auaiint a e _i  snce   's hi perstsce _i   d n  s 	[ae _i   d m  siti o v   sta Ye _i  ln cceiouy   'a  s Kgdm e i l $n *rs *toni \y  eou sbnpsat   'i  sc  	a >sy  mhoo blis  '  e  sti  c  xlait 	e c   'a ehior su  'e  onovgi o  ' s  c Kdum   ' *sn   ' 	[a e _i  saeit e i o  l $n  s s  t n  re 6salr 
diff -Naur vim73.orig/runtime/spell/en.utf-8.sug vim73/runtime/spell/en.utf-8.sug
--- vim73.orig/runtime/spell/en.utf-8.sug	2010-05-15 11:03:45.000000000 +0000
+++ vim73/runtime/spell/en.utf-8.sug	2013-08-04 19:09:09.043948570 +0000
@@ -1,372 +1,319 @@
-VIMsug    F=c  ] *@bfhklmnprstwxy  @bfhklmnprstwxy @n   bfhklmnprstwxyns  *tk n  *s   *ssf  Gtmb  *k klnr  *s   *n  *s  *t n  *s  *y  *s l st  *y   *n  *s  *tx  Gn  Gyfk  *s  Gy l   *y   Nbkn  Nrstyks  Gy  *l   Gt   *s  Gt   *t ks l  *s  *y s  Gm   Gnf  *n   *n  *s	 klm  Gnstw  Gx   lr  *sf   *k  *s  Gy   k  *s@  *ltl  k n  *sttr  *k  s  *s  Gy ks   l  ]t  wx   t  Gr   Gn  *st  Gk  Nskl  *n  Npst  r   gn  *y k  *n  *s  *t  wxlpr  gs   *k  *s   Gkr  *st  Gyn s   Gmf  *s   ln  Gs   Gm  st k  *s   l kn  *ss   l  *s  Gy   *s  t  Gx  Gkl  Gm  *s  Gtt l  gn  *yk  Gpt  *n gr   Cl   Gbfhklmnprstxy   ?bks  ]t  wxr  ?n k  l 6n  *st  wx   *n  r  *s  *t r  *s  Gt n  *s  *t   Gs At klnr  Gsttx f  ln  *s  *t k  l 6n  *sty  wx   *s  Gy   *n   Gsn b  *s 
+VIMsug    O  J *@bfhklmnprstwxy  @bfhklmnprstwxy @n   bfhklmnprstwxyns  *tk n  *s   *ssf  Gtmb  *k klnr  *s   *n  *s  *t n  *s  *y  *s l st  *y   *n  *s  *tx  Gn  Gyfk  *s  Gy l   *y   Nbkn  Nrstyks  Gy  *l   Gt   *s  Gt   *t ks l  *s  *y s  Gm   Gnf  *n   *n  *s	 klm  Gnstw  Gx   lr  *sf   *k  *s  Gy   k  *s@  *ltl  k n  *sttr  *k  s  *s  Gy ks   l  ]t  wx   t  Gr   Gn  *st  Gk  Nskl  *n  Npst  r   gn  *y k  *n  *s  *t  wxlpr  gs   *k  *s   Gkr  *st  Gyn s   Gmf  *s   ln  Gs   Gm  st k  *s   l kn  *ss   l  *s  Gy   *s  t  Gx  Gkl  Gm  *s  Gtt l  gn  *yk  Gpt  *n gr   Cl   Gbfhklmnprstxy   ?bks  ]t  wxr  ?n k  l 6n  *st  wx   *n  r  *s  *t r  *s  Gt n  *s  *t   Gs At klnr  Gsttx f  ln  *s  *t k  l 6n  *sty  wx   *s  Gy   *n   Gsn b  *s 
 l   gr  *s   *s  yw m  *n  *st  wx  Gb   r  *ks  *y   l  gn
  bfk  *mnstx  *y  ?t  Gn 2s   ln  *stx   l  gn  Gs   l  *nr  *s  *t  Gy  l  *yn   l  *s k  Gs At   l  gn  *s   Gk  Gn  *t   f  l  Gnr  *s  *t  Gyt  wx  Af  *n  *s  *t mn  *s  *t  Nn s   Gm  Gt n  *sb  ]t  wx  l
    y@  fklm  *nst  Gy s  ]t  wx  2sk  *y  s  *yl   *s  t  *y   Gm  *n  *s  *t  wx n  *s  *t  Gy  Cm  *n  Gs Atr  wf   G@fhk  lmnpstxy   ]t  wx  Gm  Gn  Cmn  *st  wx l  *s   *s  *y   b  *n  *s  *t   s   *s  tt   l 6n  ?s f  *t   l 6n  *s k  Gm  *n  *s  *t  Cm  *n  *s n  *s  *t   *l  *s s twy  G@ bfkl Cmnpst x   *ln  *s  *t   l  s  Gt b  ln  *st xl   *s  yt  *y   l  Gs  t   r nr 2s  ]t   l mn  s t gx   *sts  Gm  Gt   ]f  *n st  wx   l n Hs  *t   G@  lst  Gx   *s  *t   lm  *n ,s  *t  Gynt 2tt  wxf   yt  f  *n  *s  *t	 k  lmnr  st  Gy  Gl 2s  n s t  wxkp stx  f  l n  s 2t En urr  *s  Gy k  wx	  fk lmnrs  *t  Gn  ]t  wx n  l  *s  Gt  Tb  l Cm  *n  Gs At  x  ]k Cmrst  wx  Gy  l 6n  *y  2f  *s  Gy   *f  l n  *s  *t   l 6n  s  Cmn  *s At   s ns  *t   Gs  *t   *l Tm  n  *s @bfhklmnprstwx  Cykl  Tprt  wx  *f  ?nm  Gklk  *k  s  Gy   *n  *s gw  *pl  *f   ]kl  *nr  *st gy n  ?st  *y   ]s   *n  *s  Gy   *k n n  *s  An  *s  *t l  *m  ?n s  tx  Gy   *n  *s  Gtw y  *n  *t   *n  *t ln  rs  ]t  ;m  Gn  *s  *t  kt   *n  *s 2t   t   b  ]klmnprstx  ]y   ?f  *n  *s  ]t   *np  *stlnks  ]t  yts  ]t  wx  Cm  *n  *s  *t f  Gnrstn  Gs Atl  *s  ]s mn  wt p  gx st l   G@  fk Inst gw gx   *n  *s  t   k  *n  *s  *t   *n s  Ct  Gy  f 
 l  n  Gr  *st  wx   l  Gn  *s  *tn  *s   l  *n  *s At bfk  *mn  ]prstx  Cyl   gn  t  *y   Gm  *n  *s  *t  ns 7t  wx  Gy   *n  *s  Gt   *k  Gs  t  ]xs n  Gs  *t  6nt  !nr  *s   *n  *s  *t  Gy   *f  Gn  r  Gs  *tn   l rs   *m  Gt nrst  Cx   *n  s  t  *y  l  *s  gt   Gmt  Ak Pr  *s   f  ?s bhk  l  Gm  Gnrst  Gy  Tn  Gt  Gx n  *s  Gtt t l  *n  *s  *t k  Gns l  ,s  *y   Gm  *n  *s t  t  f  ln  *st  ?h  l 6n  *s   Gk  Gs  *t   Gn  *s  *y fk ql  Gn  *st  Gyl  6n  *yrt  Ns s  *m  Gt   *ns  *t   gt
    *kl Cmpr  ]stw gy   *s Pyl  *s  ]t  wx "nst  wx   *n  *r  *s  *t  Afk  *n  ]s  *tt  wx   *f  *n  *s  *t   k  *n r  *s An  *t   N@b fklmnpst  ]wxynt "n   lnrst  wx   s s pst  wxlst  *t gx   *n  Gr  *s  *t  ]s  ]t n  *s  *t   ]t gx f  *n  *s  *t   *s  t  k  *n  *s  *t  bfn  *p  *s  *tx s  x Tn @fk  *n  *stxs  Tt lrs gst  gl As  t l  *n  r  *s  *tk  *y  n  *s  *t rts nms  Gm  Tt   Gmn st   t  Ak m  *n  *s  *t  wx kn  *s  Gtx  Gy  t  t  Gk   ]f  *n  *s  *t
    w@ bh  Gl  Cm  Gn p  *st  *r   gn bfhklmnprstx  *ls  tkr  ]b   l 6n t  Nl  gr  s   *n  ]p s  *t  *y   Nnp  *s  Gtl f  *n  *t k  *s  *t y st   *st  Gyf  6n  t   l  *r  *slnrx   *n  *s  *t  y  t  Gn  tl  qsb  *n  ]t  wx  r   l n p  *s  *t
-  Sf  ]km  *n  ]pr  *s t Py "l  ]kn  ]p  s  t  x  *k  *n  *t  Gp   N@bf  ghklmnpr  ]stwx   G@l  Gn  *s  *t   t  *yl  Gt  ]p   Gl  *nr  ]s  Gt   *s  ]t  Gfk 2s  *y  s  *t   G@n  s  *t   gs   Gn  ]st Tx   l  gm  *s n  Gs t	 f k m  Gn  ]s  *t gw  Gy   Nk  *n  *s  Gt   l m  ?n  s  Gy  Nl  Gt  Gf  Gk   ]k  Gln  *st   *nt  Pr  *s   l  *n  *s  *t   ]kln  *r  *st  wx   gn ,s  t  *y  gk  *n  Gs  Gt   *n  *s  *t Pw   Gb  Ck  Gl  Gmn 6pr  *s  Gty   m  *s   Gn  *r  *s@m  gk   G@bfhklmnprstwxy   Gklm  *s  Gt  Gw   gn  *s  t  *y   *s  Gx   *bkl  Tn  *s  Gt l  ]t  wxns  t   *n  *s  *t  *yntk  wtl s s t   Gk l m  Gp  *s t  wx  Nmt  wx   *n r  *s  *t  i@bfhk lmnpstxyr   Gm  ]t  wx k  t  Gy  *k  Cm   k  st  Gy  ks  s   *n r  *st  wx   *n  qs  *t   Gk  Gs  Ct  ]s t   Gf  l n  *s  Gt  wx   lnr ,s  *t  Gy   Gn t  wx  Gl )n t  wxl  Gnsk  k  Ns  *yt ks s  *m   *np  Gt t	   *blmnp  wr  *s  Gtt  wx  f  *n  *s  *t  wntt  wx  f An  *s  *t  kst   Gm 2s  Gt   *n  *st  wx  fln  Gs x  Cm  s  *t y  @ bfklm  gnrst  Cw  wx  Gy  Nk  Gln k   Gklpr  Gs sx s  *y  Gm tnt nf  *k  *s  Gy k  *st  *y   b Cm  *s At  k  *s  knst w  Gy As  Gy   *n  *s  Gt  wx  Tlr  *s  Gy  Gkx  gn   b 6mn  *s  *t   Gs !t b mn  stx  Gy Vl l  *s  *s  *y   Gk 	l  s  Gt n	  b  *f  ln  *s  *tx  Gy   Gns  Gt   *s ix  Gy Sn
-   Gkl Cmnr  ]st x y  Gk n k  s  Gtt rp  sxn l  *t n  wx  *t  x   G@bfk  Glmnp 'rstxy lst 6n   k  *s b  *n  *st  wx   Gk  *s   k  l An  *s  *t l st  wx   *str l  s   Ns  *y  Af  l  Gn  *s  *t n  *s 2s  Gt  Gy m  Gn  Gst  y  Gk  s  Gy  s  6l  Gn  *s  2f  *n  *st  Gx  Gy   Gk  l 6n   *f  l  Gmn  st   l  s At   *n  *s  *t  wx  Gy m  Gn sk l  *s  Gt   Gk  Gt @bfhklmnprstwxym Ak l  nr  *s t  k  Gt  *k nt   *s xbl  qmst t x   *nr  *s  *t  wxt  wx   *f An  *s  *tt  wx   b 2f An  *s At   *nr  *s  *t  wx   *l  Gn	  flmnrstx  Gbmn ps  ]tx   *n  *s t  wx  gtf   l 6n  *s  tn   r  *sn  *s  Gy k  Ns Ks  t bm  *n !stxn t  Af  *n 	r  *s t  Gn ;t  wx  b 2f  Gn  Gs t
+  Sf  ]km  *n  ]pr  *s t Py "l  ]kn  ]p  s  t  x  *k  *n  *t  Gp   N@bf  ghklmnpr  ]stwx   G@l  Gn  *s  *t   t  *yl  Gt  ]p   Gl  *nr  ]s  Gt   *s  ]t  Gfk 2s  *y  s  *t   G@n  s  *t   gs   Gn  ]st Tx   l  gm  *s n  Gs t	 f k m  Gn  ]s  *t gw  Gy   Nk  *n  *s  Gt   l m  ?n  s  Gy  Nl  Gt  Gf  Gk   ]k  Gln  *st   *nt  Pr  *s   l  *n  *s  *t   ]kln  *r  *st  wx   gn ,s  t  *y  gk  *n  Gs  Gt   *n  *s  *t Pw   Gb  Ck  Gl  Gmn 6pr  *s  Gty   m  *s   Gn  *r  *s@m  gk   G@bfhklmnprstwxy   Gklm  *s  Gt  Gw   gn  *s  t  *y   *s  Gx   *bkl  Tn  *s  Gt l  ]t  wxns  t   *n  *s  *t  *yntk  wtl s s t   Gk l m  Gp  *s t  wx  Nmt  wx   *n r  *s  *t  i@bfhk lmnpstxyr   Gm  ]t  wx k  t  Gy  *k  Cm   k  st  Gy  ks  s   *n r  *st  wx   *n  qs  *t   Gk  Gs  Ct  ]s t   Gf  l n  *s  Gt  wx   lnr ,s  *t  Gy   Gn t  wx  Gl )n t  wxl  Gnsk  k  Ns  *yt ks s  *m   *np  Gt t	   *blmnp  wr  *stt  wx  f  *n  *s  *t  wn  kst   Gm 2s  Gt   *n  *st  wx  fln  Gs x  Cm  s  *t y   *st  wx  f An  *s  *t  @ bfklm  gnrst  Cw  wx  Gy  Nk  Gln k   Gklpr  Gs sx s  *y  Gm tnt nf  *k  *s  Gy k  *st  *y   b Cm  *s At  k  *s  knst w  Gy As  Gy   *n  *s  Gt  wx  Tlr  *s  Gy  Gkx  gn   b 6mn  *s  *t   Gs !t b mn  stx  Gy Vl l  *s  *s  *y   Gk 	l  s  Gt n	  b  *f  ln  *s  *tx  Gy   Gns  Gt   *s ix  Gy Sn
+   Gkl Cmnr  ]st x y  Gk n k  s  Gtt rp  sxn l  *t n  wx  *t  x   G@bfk  Glmnp 'rstxy lst 6n   k  *s b  *n  *st  wx   Gk  *s   k  l An  *s  *t l st  wx   *str l  s   Ns  *y  Af  l  Gn  *s  *t n  *s 2s  Gt  Gy m  Gn  Gst  y  Gk  s  Gy  s  6l  Gn  *s  2f  *n  *s ht  Gx  Gy   *f  l  Gm 6n  st   *n  *s  *t  wx  Gy m  Gn sk l  *s  Gt   Gk  Gt @bfhklmnprstwxym Ak l  nr  *s t  k  Gt  *k nt   *s xbl  qmst t x   *nr  *s  *t  wxt  wx   *f An  *s  *tt  wx   b 2f An  *s At   *nr  *s  *t  wx   *l  Gn	  flmnrstx  Gbmn ps  ]tx   *n  *s t  wx  gtf   l 6n  *s  tn   r  *sn  *s  Gy k  Ns Ks  t bm  *n !stxn t  Af  *n 	r  *s t  Gn ;t  wx  b 2f  Gn  Gs t
   sb  Gf k  l nr  s  t  Gy 6k  gsn   l  s k  Gm  *nrst  *y  Tk  Gy  Nm  *s 
-t  wx  *y   Tt   Gln  Gr  *s At  wx   l At   *@  *k  lnp  *st   b  *n  Gs  *t  wxl  ]t  wx f  *n `r  *s  *t  k  *s  *t y   k  qs   l  *n r  Gst   l  *nr  *s  ]t  wx  ks  t	   bklnrst xt  wx   bnr  *s t x   l  s  t  Nn  ]t  wx   bknrst  wx  b 7t  wx   b  *n  *s t  wx   b  *n  *s t  wx  f t   b  Gf  *n  *st  wx   *f  ]knstx  Gtx l  ]t  wx   b 2f  *n  *s  *t b  *n  *stl   *s  yt   Grn   r Hs mnps tx  Gynt l  *n  *s  *t  wx  2s  *y   ]s Tx r b 2f  l  *n  *st  Gw l   Nnn ls s   Gm t   *n  Gr  *st  wx  l  r  *s  *t	 b  *flnr  ]s txl  6n  t  *y   ?s  *y   l  gn s  t  ]t  wx  *y 
-n 2sb  *s l b  fkl  *np  rst  wxl  ]t  wx   t  *yl  wt n  *s  *t  Gx  s Atr txt  wx  An  *s Atn   b 
-l  *s b f  Gm  *n  *s  Gt ll  b Cmn  wr  *st  wx   l  Gs  Gtx 	Il   l 
-n  r  fk Tlmn prstx   l  gn  *s  np  *s tr  un  qs  kl  Gnstx   qs  gt  *y b 2f  *s `l  b  bl  *n ip  *s t   b n  *s  *t fklmnpst  wx  *yh k  ]t  wx  k  bl 
-prt  wx |k   b Af  *n  *s  *t  Tk zn  *s  *y   l 6nr Hs t  *l  t s  Ak  l  Gm  gn l   *fln  Als  r nr  *st  wx r  l  gn  *s  *ystt srr  l   b  *n  *s  *t   Gn ,s  *t  wx  Gy  Af  k  *n  *s  *tn  Gr   r  s At  Gf  Gkn  ck  *n  *s  *t hkmsytrk 
-sn   Gs  ]t  wx  r t  Gmy  wl bfhklmnprstx  Gy f 
+t  wx  *y   Tt   Gln  Gr  *s At  wx   l At   *@  *k  lnp  *st   b  *n  Gs  *t  wxl  ]t  wx f  *n `r  *s  *t  k  *s  *t y   k  qs   l  *n r  Gst   l  *nr  *s  ]t  wx  ks  t	   bklnrst xt  wx   bnr  *s t x   l  s  t  Nn  ]t  wx   bknrst  wx  b 7t  wx   b  *n  *s t  wx   b  *n  *s t  wx  f t   b  Gf  *n  *st  wx   *f  ]knstx  Gtx l  ]t  wx   b 2f  *n  *s  *t b  *n  *stl   *s  yt   Grn   r Hs mnps tx  Gynt l  *n  *s  *t  wx  2s  *y   ]s Tx r b 2f  l  *n  *st  Gw l   Nnn ls s   Gm t   *n  Gr  *st  wx  l  r  *s  *t	 b  *flnr  ]s txl  6n  t  *y   ?s  *y   l  gn s  t  ]t  wx  *y 
+n 2sb  *s l b  fkl  *np  rst  wxl  ]t  wx   t  *yl  wt n  *s  *t  Gx  s Atr txt  wx  An  *s Atn   b 
+l  *s b f  Gm  *n  *s  Gt ll  b Cmn  wr  *st  wx   l  Gs  Gtx 	Jl   l 
+n  r  fk Tlmn prstx   l  gn  *s  np  *s tr  un  qs  kl  Gnstx   qs  gt  *y b 2f  *s `l  b  bl  *n ip  *s t   b n  *s  *t fklmnpst  wx  *yh k  ]t  wx  k  bl 
+grt  wx |k   b Af  *n  *s  *t  Tk zn  *s  *y   l 6nr Hs t  *l  t s  Ak  l  Gm  gn l   *fln  Als  r nr  *st  wx r  l  gn  *s  *ystt srr  l   b  *n  *s  *t   Gn ,s  *t  wx  Gy  Af  k  *n  *s  *tn  Gr   r  s At  Gf  Gkn  Zk  *n  *s  *t hkmsytrk 
+sn   Gs  ]t  wx  r t  Gmy  wl bfhklmnprstx  Gy f 
 l  *s  ?s   l n Hs .t  wx  Gntr  *l  Gn   ln  *s  Gt   l  wr  *s   Gn  qs  t  *y  k 
-n  *sx  Gyn   *s x k  *l  m  Gs  Gt   ?n  *k l ir  Gs  l Cm n  Gs  *t  *w  Gy   Gk  Gm  *st   kn  *s  Gy At   *f  *n  *s At  Gn  r  Gr  *s  Gt   Gb  Gln  *s   b  l  Gn Pr  *s  *t b  Gl  Gm  *np  *s  *tk  *s  *t  *yt  wx l  *s  yk @bfhklmnprstwxy   *k  Gm  *s
- hk  *l  Cmnr  st ew  ?f  Gk n  Gr   Gn ,s  Gy   Gk |l  Gm  *s tx  *y   Gn  *s  Gt   Gn 6r  *s bfkl  Gmnrst  x  Cyt  k  *n  qs  *t  ?r   *s Gt   Gf  l  *s  Gt  *y   G@f  *km  Gs  ]t x  ?lr k k s t m  *s  *b  gt   *f  *k  *n  *s  Gt   Nb  Glm  Gn  Gs   b  ?r  *s b Ifhkl  wmnprstxy  qlr  *s   k  sl  Gt   k ,s   l n  *s  *t   G@  n  ]s t  *y   Gb  k Cm  Gnst  Gy   ?f  *s t   l  Cr  *sl  *t Gs  Gy @k  Gns t  Gy =m  
-l   *n  Gt n  *r  *s t   *st   Cr  *s	  b !f  lm  *nr  *s  *t  s t @fklmn \pst  Twxrp  Ns  *y  k 6r  *s  *t y  
+n  *sx  Gyn   *s x k  l  m  s  t   ?n  *k l ir  Gs  l Cm n  Gs  *t  *w  Gy   Gk  Gm  *st   kn  *s  Gy At   *f  *n  *s At  Gn  r  Gr  *s  Gt   Gb  Gln  *s   b  l  Gn Pr  *s  *t b  Gl  Gm  *np  *s  *tk  *s  *t  *yt  wx l  *s  yk @bfhklmnprstwxy   *k  Gm  *s
+ hk  *l  Cmnr  st ew  ?f  Gk n  Gr   Gn ,s  Gy   Gk sl  Gm  *s tx  *y   Gn  *s  Gt   Gn 6r  *s bfkl  Gmnrst  x  Cyt  k  *n  qs  *t  ?r   *s >t   Gf  l  *s  Gt  *y   G@f  *km  Gs  ]t x  ?lr k k s t m  *s  *b  gt   *f  *k  *n  *s  Gt   Nb  Glm  Gn  Gs   b  ?r  *s b Ifhkl  wmnprstxy  qlr  *s   k  sl  Gt   k ,s   l n  *s  *t   G@  n  ]s t  *y   Gb  k Cm  Gnst  Gy   ?f  *s t   l  Cr  *sl  *t >s  Gy @k  Gns t  Gy =m  
+l   *n  Gt n  *r  *s t   *st   Cr  *s	  b !f  lm  *nr  *s  *t  s t @fklmn \pst  Twxrp  Ns  *y  k 6r  *s  *t y  
 l  *st  wx k  *n  *s  *tr f  Gm kmy  sn s   ]s =tk txynt  Ak ,snk  *l  *skrf  Ak  Gy ks   l  *s t flkr  f  Gm k  *st p  *s t  Gy   *syn  ]pm  k  ]km  Gn Tk kn  *s  Gy   *l r  s  *n  *t  *y   Gl  *s  Gt   *k  *s  ]t  wx
- b hknp  Grst x  Gkr  Gt gs   wr  ?s  Gt   b  Gk  l  Gm  n  ?r  Gst  wx  Gy   *f l Anr  *s  *t  l  gn  *y   *s t   Nf  wm  ty Gn b  Gn  *s  Gy l   G@  bfk lm  Gn  Gr |st  wx  ?m  .l  s  ]tx  Gn  *r 
-n  Gy   Gk  Gl  *m  Gn  *s  *t	 f  Gk Cm n  gpstw gt m  *n  *s t 
-t k `s  l  f k Cmn  *s  t  Gx  Gy  m  *s   l  *s  *t b 2fh  Ck  Gl  mnprstw  wx  Cy  C@  Gt  Gm  *r   Gr  Gst   Gr  *s   G@  Gs  Gn  *s t  wx  *y   *s  gt	 k  l  mnrst  wx   l  *s  ?t   f  Gs 2s 7t  wx   ]s  t   *f  *n  *s  *ty n  G@h  *l  *r bfhk  blmnprstw  *xr  Gn  *s  Gy l  ?n  s x  Gt  *w  *m  Ny   G@  ?l  *s  *t  wx   n p  *st   l  Gm  Gn  *s  *t  b  *k  Gn  Gst  wx  !f  l  *n  *s  *t  wl  Gs   bf  *hklm  Gn pstx  *y  Nl  ?s n  Gssf t  Gt  *yn  wr gt   *s  wt   Gmn  *st  Gy  kt r  *sfk   l  *s gx  Akr  *sk  t  Af  l m  Gn  *s  *t   Gn  *s  *t m pt  sb  *s   *s  y   l  Gm  gn  *s  Gt  ?l  wm  Gn  b  Gf +n  Gr  *s  t  wy   *lmn r  *s   k  s  Gy   r  s mns  Gt  Cxp   Gk  Gn  *s  Gt  bf  *s   Gm  Gn  *s @bfhklmnprst  Gwxyy :s   ]bfklnrst wx  Gy l   *n 6r st  wx   *r  *s  Gy kmnstx  Gy  Gl  *s   *n  *st   *k  Is  Gt  b  Gm n  *s  *t  wx   ]n 	r  *s  *t  Gy  Cm  Gn  *s  *t  k  Gs  Gt	 k l  Gm  *nst xy   Gl  *n  *s  *t  wx   b  *f Cm An  Gr  *s At   *l .r  *s l  Tn  *s  k  "kl  *m  *n  *st  Gy   *k  l Cm  *n  *s t r  *s ix  *l  Gs
+ b hknp  Grst x  Gkr  Gt gs   wr  ?s  Gt   b  Gk  l  Gm  n  ?r  Gst  wx  Gy   *f l Anr  *s  *t  l  gn  *y   *s t   Nf  wm  ty >n b  Gn  *s  Gy l   G@  bfk lm  Gn  Gr sst  wx  ?m  .l  s  ]tx  Gn  *r 
+n  Gy   Gk  Gl  *m  Gn  *s  *t	 f  Gk Cm n  gpstw gt m  *n  *s t 
+t k `s  l  f k Cmn  *s  t  Gx  Gy  m  *s   l  *s  *t b 2fh  Ck  Gl  mnprstw  wx  Cy  C@  Gt  Gm  *r   Gr  Gst   Gr  *s   G@  Gs  Gn  *s t  wx  *y   *s  gt	 k  l  mnrst  wx   l  *s  ?t   f  Gs 2s 7t  wx   ]s  t   *f  *n  *s  *ty n  G@h  *l  *r bfhk  blmnprstw  *xr  Gn  *s  Gy l  ?n  s x  Gt  *w  *m  Ny   G@  ?l  *s  *t  wx   n p  *st   l  Gm  Gn  *s  *t  b  *k  Gn  Gst  wx  !f  l  *n  *s  *t  wl  Gs   bf  *hklm  Gn pstx  *y  Nl  ?s n  Gssf vt  Gt  *yn  wr gt   *s  wt   Gmn  *st  Gy  kt r  *sfk   l  *s gx  Akr  *sk  t  Af  l m  Gn  *s  *t   Gn  *s  *t m pt  sb  *s   *s  y   l  Gm  gn  *s  Gt  ?l  wm  Gn  b  Gf +n  Gr  *s  t  wy   *lmn r  *s   k  s  Gy   r  s mns  Gt  Cxp   Gk  Gn  *s  Gt  bf  *s   Gm  Gn  *s @bfhklmnprst  Gwxyy :s   ]bfklnrst wx  Gy l   *n 6r st  wx   *r  *s  Gy kmnstx  Gy  Gl  *s   *n  *st   *k  Is  Gt  b  Gm n  *s  *t  wx   ]n 	r  *s  *t  Gy  Cm  Gn  *s  *t  k  Gs  Gt	 k l  Gm  *nst xy   Gl  *n  *s  *t  wx   b  *f Cm An  Gr  *s At   *l .r  *s l  Tn  *s  k  "kl  *m  *n  *st  Gy   *k  l Cm  *n  *s t r  *s ix  *l  Gs
    bkl Cm  Gn Prs  *t ystr As  t m  *n  *s  *t 
-n   wm   ]n  Gr 2s  *t @b  Gl  Grsty t l  Gn s   yk  gn  *s  t  *y   l  Gm 6n  ]s Ak  wms m   Gl r  s  b Ylnr  *s  t  b  Gk  Gnr st  wx  gn  *s  *y  f  *s   n  *s  ]t  wx  Gy	 k Cm  n rs 7t  wx  Cym   *s t  wx  qf  l 6n   n r  *s bfhkl  Gmnprstx |ln  Gs  Ts fr it   s  Gt k  *s  k  s  Gy  s trt sn  Gs  t  Gh   Gk  ln p  st  wx   Gst   l  Gs   *s  *t  y   bf  *k  Nl Cm  *nr  s  *t  wx  Gy sn 	s  *tk  Gtx  n   Gk  Gn  *s @fklmnrstwxy   *k  ]st  Gy  k kr st  wx b  *f  l 6n  *s l x obn  Gs t  wx  b Cm  *n 2s  qfkmnp ;rst  wxy b  Nn t  wxnt  b  *n  *s  *t  wx   *n  *st   b  *n  *s  *t  wx Tb b f Cm  *n  *s 2t |l  k  l n  *s  Gt  b  *n  *s  *t bns n  Gt  b   ]l Cm  *n  *st  xmnr  *s  *t  Gy   Gs  tb 9l bfklmnpstx b  /b Cm  *nst   *n  *s t x  n   ln  *st  wx b  ]t  wx k  *n  *s  *tb  ll   gn  t  *y  Cm  *ns  *t  *y   Gm =t   Np  *s  Gt   *s ot   l  gn r  gx
-  ab 2f  l Cmn  Grs  Gt  wx  Cm  *n  Gs  *t   l  Gm 6n  Gt  !f n  *s  Gybn  bl b 4sl   gn  t	  bf  lnp  *s >t  wx   b  l 6n  t l  Gs  ]t  wx   ?s  yt  *yt b  *f b Af  Gk  l Cmn  grs  ]t  wxy b  *l   *@  l n st   l  Gn  *s  *t  Gy   l 6n  *s t h  *n  *s n  ?t  Cm Pr  *s  b |l Cmn  *s  *t   *n  Gs  *t  wr	 kl  Gmn Ls t  Cxy n  *s  vs   *s ty   *m   G@  Ct  6l  *n  *s
-   b  fk  wl Cmnr  *st  l  *s   l  Gn  *s b  *s  Gy   l 	Tr  Gs  t b Af  Gkl  wm nrstx  Gy  l  *t   ]s  t  *y   Gk Ql  Gn ,stx  *y   l  gn  *s  Gy   l n   *n  *s Kt  wx  Gy  2f  l n  *s  *t  Gn  gp n  *s  ]t  wx l  *s  s  yt  *y  l  *s   $ @bfhklmnprstwxy
-   G@ Tklmnr  ]stx k 6n  p  *s  *y  k s  Gy   *n  *st   *k  ]s kt  Gy Tb Ank s   ?t 6k l npsklms  Gt   Tnk Tk  s  Gyft Aks   Gm  *n  *sr  Gk  Gynt  Tr  *s !t   fks   l  *ys  Gm =t  b fklnprst  ?w xk  ]lmn  *tx n nn   ?s	 f  ]kmns .t x  *y  'b An  *s  *t  Nn  ?x ks  ?t An   *n  *s t   Gm  *t   *n  *st   b Sl  *n  *s tts  *s  Gt @ Tb fkn  ?st  wx  b An |r It   ?t  ?x l  Gn  *s  *ts  *t  *s  *t   ?bf  ]mt sb n  *t   gnr t k	  Tbf k cnr  *s At gw  l  ?@s  *t 2f @bfklmnrst  *wxy  fk  lm  ?r gm Tb  *tl  Cm  Gn  s t  *yr [b  gn  Gt
+n   wm   ]n  Gr 2s  *t @b  Gl  Grsty t l  Gn s   yk  gn  *s  t  *y   l  Gm 6n  ]s Ak  wms m   Gl r  s  b Ylnr  *s  t  b  Gk  Gnr st  wx  gn  *s  *y  f  *s   n  *s  ]t  wx  Gy	 k Cm  n rs 7t  wx  Cym   *s t  wx  hf  l 6n   n r  *s bfhkl  Gmnprstx sln  Gs  Ts fr it   s  Gt k  *s  k  s  Gy  s trt sn  Gs  t  Gh   Gk  ln p  st  wx   Gst   l  Gs   *s  *t  y   bf  *k  Nl Cm  *nr  s  *t  wx  Gy sn 	s  *tk  Gtx  n   Gk  Gn  *s @fklmnrstwxy   *k  ]st  Gy  k kr st  wx b  *f  l 6n  *s l x obn  Gs t  wx  b Cm  *n 2s  hfkmnp ;rst  wxy b  Nn t  wxnt  b  *n  *s  *t  wx   *n  *st   b  *n  *s  *t  wx Tb b f Cm  *n  *s 2t sl  k  l n  *s  Gt  b  *n  *s  *t bns n  Gt  b   ]l Cm  *n  *st  omnr  *s  *t  Gy   Gs  tb 9l bfklmnpstx b  &b Cm  *nst   *n  *s t x  n   ln  *st  wx b  ]t  wx k  *n  *s  *tb  ll   gn  t  *y  Cm  *ns  *t  *y   Gm =t   Np  *s  Gt   *s ft   l  gn r  gx
+  Xb 2f  l Cmn  Grs  Gt  wx  Cm  *n  Gs  *t   l  Gm 6n  Gt  !f n  *s  Gybn  bl b +sl   gn  t	  bf  lnp  *s >t  wx   b  l 6n  t l  Gs  ]t  wx   ?s  yt  *yt b  *f b Af  Gk  l Cmn  grs  ]t  wxy b  *l   *@  l n st   l  Gn  *s  *t  Gy   l 6n  *s t h  *n  *s n  ?t  Cm Pr  *s  b sl Cmn  *s  *t   *n  Gs  *t  wr	 kl  Gmn Cs t  Cxy n  *s  vs   *s ty   *m   G@  Ct  6l  *n  *s
+   b  fk  wl Cmnr  *st  l  *s   l  Gn  *s b  *s  Gy   l 	Ur  Gs  t b Af  Gkl  wm nrstx  Gy  l  *t   ]s  t  *y   Gk Hl  Gn ,stx  *y   l  gn  *s  Gy   l n   *n  *s Kt  wx  Gy  2f  l n  *s  *t  Gn  gp n  *s  ]t  wx l  *s  s  yt  *y  l  *s   $ @bfhklmnprstwxy
+   G@ Tklmnr  ]stx k 6n  p  *s  *y  k s  Gy   *n  *st   *k  ]s kt  Gy Tb Ank s   ?t 6k l npsklms  Gt   Tnk Tk  s  Gyft Aks   Gm  *n  *sr  Gk  Gynt  Tr  *s !t   fks   l  *ys  Gm =t  b fklnprst  ?w 	xk  ]lmn  *tx n nn   ?s	 f  ]kmns .t x  *y  b An  *s  *t  Nn  ?x ks  ?t An   *n  *s t   Gm  *t   *n  *st   b Sl  *n  *s tts  *s  Gt @ Tb fkn  ?st  wx  b An |r It   ?t  ?x l  Gn  *s  *ts  *t  *s  *t   ?bf  ]mt sb 	n  *t   gnr t k	  Tbf k Znr  *s At gw  l  ?@s  *t 2f @bfklmnrst  *wxy  fk  lm  ?r gm Tb  *tl  Cm  Gn  s t  *yr Rb  gn  Gt
    bf sklnrstx Tb n  m  *n  s  ]t  Ny  At ;t  wx   b  *n s  *t  Gy  Tb f 
-l m  *n  *s tn 2s   *s At  bfk  lmnprst gwx  *y l Cm  *n  ?r  *s At  b  *tns t x   l  Ns  b  Gn  *s  *t b  *n  *s t  wxl   gn  *s  t   l  gn r  ]stx  r  *s l An b Cm  *n  *s  *tl  	t  *y !s f 	tt  b ?s	  sb  l Cm  Gnr ,s .t  wx  *l An t  wx  
-n l n  rstx  Gy   lr ?st  *y  ?s  t  *s  *t  Gy   l  *t  2f  Gk  r  *s  *t  Gy  Gl n k  l  ]mstx  *y  *t  ?x  b 2f  *s  *t  Gy
-   bfl  *m  Gnrs  Gt  Gy   l 6n  *s   ?t  *y  Gs  *ty   wm  *n  *s m  Gt l  Gn  *t  b fk  l  ?mnrst  wx y  	ln  *s  *t  wx  s Ft m  *n  stxnt  l  *s l  *s  6n  ?s  *y  l s t   b n  *st r  *s  *t  Gykt r  f  ln  *s  *t   l  ws  b f  ]kl Cmn  r  *st  *y   gn s  t  *y  s  t
-   bk  l Cm  ]n  *s t  wx  Gyt  wx   *f  *n  r  *s  *t
- bf  ?klnr 2s  ]t 	x  l  Nr   l  gn  *t   s  t  *y   l Cm  Gs  t  *n  s Ft  *y  b  ln  Tb  *n  *s  *t  Ans   kbf  ]klmnprst  ]xyt  wx   b  *fn  r  *s  *t  wx   s  Gt s @  *f  *mnpst  ?w  wx  *y   f  l 6n  ?s  *y   Gs  Gt f  2m  *t   *f  Gn  *s  *t	  k  ln p  ?r  *s  *t ln  *s  t   *k  l  gns  t   l 6n  *s  *t   Gk  *nrstb  *t 	l   b Cm  *n  *s  *t   l  *n  ?rs  *t  *y  ]m  *t   l 6n  ?s  *t  *y   *k l n  *st  /b  l nr  *s  *t 6k  Gs   *np  *stt b l   ?n r t   *f  n  *t fkst  Tnt rrl As  Gt y @bfhklmnprst swxy   l  gn  ?r  Gkl  Gs t  wx   Gt  *y  Tk ln Pr  *s   b n  *s  *t r  *sn s At  Cmnr  *st  wx   l s  Gt  f   b  *f  *n  *s  *t   ]@bf  Ghk  lmnprst 2wxy   Gn r  Gt	   Gb  Gl Cm  Gnr  *s At  Gxn  *x l )n  s  ]t  wx  Gy b gt  *yl   gn  yt  *y bn 2rt   s At   ?s  *t   Gk lm  Gn Ist ox  *n  Gt   l  *n  *s  b  *s  ]t  s %t  *x f k  *n  ]p  Gr vst   b  l 6n  *t   ?r  f  *n Pr  *s At  Gy   wm  Gns  *tw p k  wm   Gf
- bf  lmnp  r  *st   b Cmnrs  *t  s  Gt n  *t t sb }t   *st Pt k  ls  ]t  b t r  *s  *t  b At l Cmnr  ]st  b km nt xn Gt   l 6n  *t  s  tbhmsl   yt  *yn s t  wxs  b An  b  *n  *s  *t  obn t s  t   b Ak  *n s  *t bfklmnrstwx  *y lmn  ?st  bt   Gyns  *tx  ]s At n  *t n b  *t l nr st  wx cs  *y  b n 2s t   *f  *t   ?k 6n  ?s  *y  k gs   s l  n As  *t
-  sb fkl mnpstn r ]t Tx b t  *y  b n  Gs t uk   l 6n  *s 0t   l 2nrt b  ?n 2t  wxx n  -b fl mnrstx  Gy m  gn  ?s  *y ]n  ns  *tx   b  *s Asfl  *n  *t t Tx 'b  *t  nt  b  *t   l  rn   l  *s  *t sb  n  b  Gn  *t  bl  *nrst   *ns  *t  	t  b  l t  wx  lt  *s  ]t  wx  Gy  l   G@b ofklmnpst gwxy  bl r  b Cm An  *s t   *s  ?t  *y n  *st t  wx   l  *n  r  *s  *t gx k  l   l  *n  *s Ft t  wx ob  *t
-   b 'f  l Cm  n p st  Gy   l  *n  *s  *t  wx  bfkl  ns  t  l  *t gy  l  *n As  t  *y  s   b Cm  Gn  *s ;t  wx  ps t l   bhklmnprstxst b  grst b  *t   l n  Nt  r  *s  *y  Nn p   l  Gs  ?t  b Wkl  Gmnr  ?st k n  ?rs  ?t !ts  ?t  2fns  *t Isb 2f  *tl   gn  *s  yt  *y  -b  l 2n  *s  *t |b  ]t  wx  b  l 6np  ?stxn Tb  l  n  *t
-   bf  lmnr Is  *t  Gy  Tb  l 6n  *t  r At s It x   b k  l  Gmn  Tb  l An  *s  *t  'bfk l Cmn rs t  Gy   l .t  wx   l  *n r  *s   *s  ?t   l 6n 2s  *t   b  Gk  Gn s  *t  b  *n  *s  *t bf  Ghk  lmn  *pst  ]xy  ?lr l  gn  Gt   bl n  *s  *t  n  ?s  *t  *y
-  ob Tkl Cm nst  Gx  Gy   Nh 6n ?s  *y   Gk  l n  *s  Gt  Tb  *f  *s  *t b "n t  b  ]k  *n  *st   ?r  *s n  *st   *n  s  *t  Ak Cm  *n r  *s  *t  nr  *s  *tyb l  r  *tl   gnt  *y  gy  Tl b  *nst ^k   b  n  *s  Gt  ks 	t @bfklmnprstx  Gy t klr x   Ns  ?x  ?s  *t  b  *k  *nt  Ak   b  ln  s Ct  Tb  ?ft  f  Ns  sk  Gns t  w  Gy   l  *m  Gn As  t  wxrt  b l  *n  ?s   yr  *s
- klm  *npr  *stx  Tb  *t   gn  ?s  *y  Tn  ?sl ?s l At	   b  f ln  ?r  *s  *t  wx   b  *tn sb  *tlr Sstxmynt   b  *s  *t b  Gt  ?fs  *t  *f  *t  ?n  *t Tb  ?n  *t  |b  l  *n st  wx   *f  *n  gr  *s  *t
-   b Tfk Tlm 6n r  *st   l  *n  *s  *t  r  *s k  *s  Gy  Tb  bf zklnprs At  Gy  b  ]t  wx   ?s  ?t  *y  Is   *k  *s  Tt  ?s  ?t   *t  wx   b Cmn  *s  *t   k  l Is @fhklmnstxyxs 
-t  b klm n s St  ?f nt  Afbt  b  *n t	   Ghk lmpr  s  wx t b r  *t xy pty Pn  s  n r Ast   l 6n  *s  Gy   s x   wk lm  *np r  *stw  wx   Nn  *s Pr n Qr  *s x r fkl Cmnprs t  wx  Gy  ?r ut  ?w n  *s Ps k |b n  t   l  ?t nxr gs t b zps  *tt An At pt tr l  b l  ?r  ]t  wxm s  t
-bfklmnprstl s x  ?m r  *t  ?k  *n  *st  r fkm n rst  ?w  ?xy wr  b  *n  s /t  ?b n  mn  *t  2t  b  k  *t b  *tn x k l  *n  *s t  ?x tl r  t  gs  t
-bfk lmnpstxl m ft bklntx t  ?k  t  b  *t n k rt  k  ?sf p st s  r tnst spl t   b  l  *t kr s  ?t  gx t  ?fk r Istr  ?b  n  fkn  *tt ob Af At gt 2x -bt f  *t  Tb f  ?lnp st  l  *s t   Gk r  *s  *t
- b  k  l wmnrs  t x  *l At  Tb  l  gn  Gs  Gtn  Tt s  An bf hklmnpst wxy  Ak l  *s  *tl  ?m  ?nr  ?s k  Gn  *s  *t t Hk n  *t  ?x fk l mnst rns Tb An  *t   Gl  ?rs lt  Qr   Gk  *st  Pr  *s  *t   b  Gk  *s  *t  b  ?f Cmnst  *y   Gs t   b  *m  *s /t   *s  *t  Gy k Fmn  ?r t r 
-t  fk  ls  *t  ?l  *t   ?m  *s nr  st   *st  n  bstn t s  b  ]r  *t
-   b |flnp rst  ?x f  *y  b An  Gs  *tn t cs  't   *nr  *s  *tk |nt  *f At	  b k  *l m In s  t  *y   b Cm  *n  *s  Gt   Gl  s @bfklmnprstwxytx  k 	ws l  *sk  s  Gy  lrst  Gk tkt Nrn  ?s tx  l  ?t  ln  *t t  wx  f kl  gnrs It kpst  *yr  Tf  y@  *s t  *k  *s  gt  Gy  Tb  *k  Gn  *s t  Gy   bnt  s At k  ?t  wx	   ?@lmn prst  f Cm  *n r  *s  *t n s f  *k .s t k   ]b k  lm Inp  *st Pw  ?xb  ]l ul t  wx  Obn  *s  Gy s s  f   f  ?ls  *t  t bfk  l  Gmn  ?prs ;t  wx  *y 9lr  *s  ?t   bk Cmn  *s  *t 2xn 2s   s  t   *n  *s  t   *k  Gs  t  *s  t  *y   t blnp r  *s  *x Il  (n  ?s  *y   Gk  l  gn  *s 2t  wx hl	 k Tl  gn  ]prstx   b x  Cm  *n  *s  ]t  wx  b  *nr  *st   l t f  l  gn  ?s   l  gn  t	 f  lmn 	r  s  *t  Gy  Ak  l  *snt l   l  Gs  *t  Gl  Gn	  fkl nrstx  Tb  *nt  wx   *f  k  *n  Nr  *s  *t  b  *tx  gr  *s  b kns  ]t x  ?y   *k  l   b An  *t f s  *t  *k  *t  /b Af  l  *n  grs t m n l  Gn bkm n  *s  Gtl  tx n 2n  2fnp r  *st  b  l Atk nt t ab nr 2s  *t   b  l  Gs At  l  *n  Gs  *t  Gy bfklmnprst  Cx  *yl   gn  ?s  t  ?x  *y   l  *t  *y m  *n  *s t  wxt  *k  Ns   b Cm !n  st  wx  *y   gn  *t b l  Nn  ?p  gs t k  l  Gm  *n  ]st xt  Af  *l  *s  ln  *s t  Gy   l s  Tb  ?l  *n  *s  *t	 k lmnpst xt x  f  *n  ?r  *s  *tn  *tt l  *n  *s  *t  wx   s  t  *y   *k  *t   *k  *n  *s  *t  Gy  ?k  *s  *t   ?f  *t f  l 6n  *s bk  *t gyt r   l Cm n  s tx yn l  *s s  *y   Gm  *n  *s  Gt  wx  `@ f p cr  *s t b Vl n  ?t  	fkmnsl  sk  *np  s  *t t  b Elp  *st@s 
-t  n  *t Ak r  V@ Tkxr n t m  *n  *s  *t  Nnt  *ks  *n At   @bfhklmnprstwxy  l  Tm  gn  ?r  gs ft y [kl  Tnrt  wx   *m  *s t  Gy gs  t  ]x  b  Gk  *n  *s 2t  Gy   *@fklmnrst  ]w gyskx n  Tl  Nst wb  k  *n  ?p  *s  *t Pw  wx  l  ?n  *t b l  Gnst xl   gn  *s  t  *y  Tb  *s   lm n  gr  *s  *tn t   Glmn  Gs  *tt r  *s  *k  Gy   l  Gs At x  b  Gn  s At  kln  s  ]t  wx s  t  *y   Gm An  *s =t  wx   l  Gs Atln  Grs  *t  ]mt   *n 2tt  wm r   bf  ?hklmnrst  wx nmn  tl  ]t x  Nn  wx
- @  bkm  Gnrs t x  Gn  *s t  gwk  Gs 
-t sk  *t   wm  *s  *y np  *st  Gy k 2s It s t ]k	 fk nrst  wx  Gy  *t  wx   *st  wx  f  *n  *s t x   b  lm  Gn  *st  p  *s  Ak  *s  Gy   l $]n  *s  Gy  G@ b f  Gk Tln  *p st  wx  Gy   l ,s  Gt   *f  *n  *s  Gt  Gy	   bkl  *n  *st  wx  Gy  Nnt  wx   *n  *s At ?n  sb  ?r  *t   b f  Gk  l Cm nr  *s  *t  Gy n bfk Cmn  ]prst  Cxy   l Gr   *n 
-r  *s  *t  b Tknr  2st  Gy   ]st   l  Gx  @  Afl  gn  r  *s   gn s  yt  *y   ]k  *l  Gn  Gs Ft |bn  *t  Gs !t   l n  Gp  s  Gt   *n r  *s  *t   *n gr  Ns b fklnprst x  Gy  *l Cm  *n  *s  *t  lr  ]s  *t sbt Ak  gs k 6n sr  ?s  *y  k Al  s  Gy	  b f  ]l  *ns .tx  Gy tr Tbt fn  *t  *l  *t r  *s  *t 6n 	s 2t  Gk  *s  *t y  ab  Gl  *n  *st  Gy  k  *s  *y	  b  *kl nr  *st  wx  It  wx  *y  gk  *s  Gy   l  n  r  *s  *t   G@ |b fklmn prstxy  b l Cm  ?n Pr  *s   qs  *y  n  Gy  r  *s  ?tx Cm  *t f  l n  s t  k  l 6n  *s  *t y	  f Vl qn  ]r  *s !t  Tw  wx n  Gp  *s  *t l  *s  *t  #5s  yt  *y   Gm  *s @f kl Cmnprst w gy   *s  Tt  Gy  ?m  t   m ns Dt  wx Py   Tm   Gn  *st   b nr  *s  gt  wx !l  *sfst ?l  An  *s  b Af k  *n  *s /t  wx   np  *s  Gt  wx Cr   b  *f sk  Gl  Gn  *s  *t @bf hklmnprstxy  f  *sl  Gn t   *t  *y  b  ?l ]mn  *s  ]t  wx  s	   ?hk  Glnstxy It   *k  l  Gmr  *s nx   *lp  *st  Gy l >s r  bf  l n 	r  *s  *t   l  gn  *s  tn  l  *s  n  n  stx  *y   *n  *s tn   *s ix	  f  ]l  *np Trst  Gxl Cm  ?y k Al  Akr  sp ^l
-   bfk  lm  Gnst xst m b l  Nnr  ?t gx
-  >fkl sm Anp  *s 	t  Gw   l n  *s  t  ?s t   gks  Gt   b  Gf  *kl Cm  *nr  *st  wx  Gy 'm bns  ]t gx   r  *s ixn  *s t  b  *f  l  Gn  *s t nk  s	   b fklnpst $_r Ht  *l  Nn  6n  *t k   *m  *t  m n  *s Atw  *y `@   bk Al Anp gr  ]s  Gt nx  Gy ^st  wx  *f  r  *t s $[tf  *l  Gn  Gt  m  *n  *s  *t   *s  Gw bfklmnprstxy  *l im   *n r  *s At fln  pr s  ]t  wx 
-rs t  *n  ?s  gt bm  *n  *st  wx [bnt  wx   l  n  *t   l  gn  r  bf  *n  *s  *t 	r  *t  Nn  t  ?y   b  l  *nst   *l  *s  Gy   l  ?s  *tl  Gmnst  wx In  ?y s t fm  *n  *s  *t  wx k  *t t  b Af  k  *n  r  *s  *t b  Gm p  *t  2f  *n  r  *s  *t b  ?f Fk  *lnr st x  *yl  *t   t ' x k  l  Gst xt   *f  l 6n  -b  yl  n  *s bk #1ln 2s  Gyt b  Grk  *@   *k Cm  *n  *s  *t  y  b  ?k  l  Gn  ?t kml ntr  *k  *y   bfklmnprstw  y l 6n   gn %p  *y   Gn  st  wx  'b  *f  *n  *s  *t   wf Cm  *n  *s  *t  *y kn  *s |r bs t  wx  Gm  *st  Gy  *k  *s   *km An  Gstn  Gt nx   *l  *tnrt 0t Csmn Ttr  Ns  *t s   *kps  *t 'ltblxmntr n   *l  *n  *s  *t  ]n   f  ]k l  ]n  Gps !t   ]t  sb  ]k mnr  *s  t k  ?r  s  |b  Gn  *s  *t  *f  Ns   wm  Gnp  ?r  *s  k  *t @fklmn  ?prstx   l 6n  s  *y  *n r  	b  ?n  *t k 2n  *st m l 6n  ?s  *y 6n  *yn  l ?s  gkt   b  *n  *s t   b  ln  s At  *y  Gs }t   l  gn  ?s  t   Gk  ln  *s  *t   l  s  bt   gn  *s   ]@bfklmnprstw  Cx  Gyxn   Ns  bl  *n  *s  *t  Gyr ]s  Tb Tl  *n hrs  *t Ct n  qst  *y k  *s  b  *n  *t   ?r  *s  *t  Gnr Atk )n k l  *n  *st -b n  *t  Cm An 6r  *s  *t  ?@  l  ?n  p r  ws  *t   bknst   *strs /t k Cm  *ns  *t  ?l  *n   Gm 
-t  |m t gx  b  *k  *n ,s  *t   Gm  *nt   *k  l  s  yt   Gf  *nr  *s  *t  *t  *y  Cm   w@ b h k "gl m (n p  *s t  Gw @bf  *hklmnprstwxkl r +s =t  Gy  Gm  r  *lm   *kl  *s (k r  Gt  n  ]t@  ?ln r  km  *s  Gy n	   Gkl mn  Gprst s 6ty   wm  *s p  Gs  Tt   Gst  *k 	r fm  Gn  *sty  Tk  s  Gy   *s  Tt   b  Gn  *s  *tf  
-l  *s   *n  *s  *t y   *n  *s  gt   ybfkmnpstx y ot  b  Gk  n st  wx  Gy  Af  k  *s   gb   ]k  l  *n  Gr  Gst   l  *s  *y   s t  n  Gs  Gt   f Tk  Gn  *s  *t  sk  Gn  *s   g@  ?k  st 6k fh k  lmnp Ist w 
-xy  wr Is  Gmnttt  6n  t  ?@ zn   *st   *s t  ?x gl   *fk Cm  *n  *pst   Gst  m   *s 6t  	t  gm  *tlk  s  Tt bfhk lnprstx  Gy llr  *t  wx  Gm As   Gl An  *s  *tns  ]t  wx  b 2fs  Gt mt  wx  Af  l  *n  *s  *t   *n st   l  gns   *n  *s  *t ixr  *s  bt  wx   *f  l n  s  *t  *n s  *t  2f  Gl  n  *s  Gt  !f  k  l n s  *t  -b  Gkn  *st  wx l  *s  s  *y  f  *n  r  *s  *t   bkl smn  *stw xy   ]l  *np  *s  *t l  s  Gt   Gn  *p  t
-   f klmnr st  Gy   *k 	r  *s Gt ix  *y  *klk Tk  Gy   Gst n +f  Gk  ]m   *n  ]s  *tn  Gx   *k  *n  *skl   k  *s  Gt  ' @  ]fklmnr ;st  wx  *y   ls   l  Gyk  *yt r   kl  Gm  Nn  *pst  k  t  *y   Gm  *n  *s =t  wx r   l qns t   Gm  *s =t   Nf  *l  Nn  *s  Gt  wb  *f  *n  *s  Gt  gl  Nn  *s !t   ]k  ln  *s  Gt  l Cm  *n  *s  *t @bfhklmnprstwxy m  Gnr  *st k  ]s  wx   *l  *st  gk  *s   kl  Gn  r 
-ws t  Gy   *s  t  kl  *nrs #t  .k  *s n  *s  'b  *s   gn  Gr  *s  Gty@m   k  *s   bfl  Gmn  Gprst  wx  Cy r   l m  *n r  *s  *t  ql Cm  Gnst  wx  l  *s  Af  l  *n  *s  *t f   Gn  Tt  l n  *s  *t  wx  0f  kn  s It  Gx  *y   *k  Gt @ f  Gk n  *styr lp  b !k `s  ws fklm  Gn  rstw  wxy  Gx   bl Cm  Gn  rst   gn  Gt  *y   Nt  
-
-n  *s   *s y n  *s Zk   l  Gm  gn  *s  Ct  Gy	   b kl  *nr  *s  ]t  wx   s  *y  Gn  Gy  Gk  Gr  Gt   Gl  *s	   Ghl  Gmnr  *st  wx  Gns /b   qs b st xs b   f  *n  *s  *t   *k  *l  *s  Gt
- b fl  gmnp  Grst  |l  *s  f  s 2t  wx   Gn  *s tkn  Gstt Af s )s t |b   b 	fk An  *st  gxr  s =t   Cl  *s   G@ bklmn prst  wxy   b  l  *s t  wx  k  *s  *y  b  *s   Gst  Hs  t  f Tk  Gm  *s  Gy  	@ -b n ,s  *t   *f  l An  *s At  Gy n   Ck  *n  *s kt   wmn  *s  t w  f 9l  *s  Gt @ )ns t mrs  Ny p 6l @bfhklmnprstwxy m  *s  t   l  Gn p  Gs t kl In rs .t   l  Gn Cs   *s t  *y  6t   whklrs -ty   *l  Gs  wx  6n  ]t  *yn  ]t  wxt `l   Gx k  *ns   *s  ]t  wx bf  Gl   G@ b  *kl  Gmnprst  ]wx   Gn  ]p  *st  wx   *n  *s  ]t  wx   b Cm  *n  Gs  Nt  wx   b  l Cm  *n Hs  Gt	  cb  Gl  *np  *s t Pw  Gx t  wx  |l  *n  *s   *n sr  *s  *t In
-   b  Cfmn  *ps +tx  *y   Nb  Gk  *s   *st   *k  Gn  *s  *t  ik  l 6nn  4s  @b f  Gkl  Gmn /pr  Gstl   Gk  *n  *s  ty   wm  *s w   b l r  *s t "Rx   l  *s  Gt   *k  Nl &)s   *k r
- fhkl  Gmnstxrn  t  Gw   *n  r  Gs   k  Gs   l  Gs t   Gn  *s  Ct  !n  *s  *tl  Gn   gn  s  *y
-  	hklnrstx y  sn  *s  Gt   G@ n Pr  *s gt   Gk  *l  Gs  6km qn  Gs .t xtr k   Gl  *n 2s  Gt   k  Gm srs   Gk  t  l  Gn   l (n s !t  Gy
-   b  ?fk l Cm .n  *st Cy t n  *s t   Gs &t @bfhklmnprstwxyrt  *s  gt yl In  k l n  *s  *t gx y  *l  ys   lm  *n  *st  Gk  s   yk  Nn  *s  *y  /bn  *s t  wx   wf  *s  Gt
-  @ sb  Gf  *km  Gn stx  Nn  ?s  An  *s  *tx  Gn s  Cm An  *s  *t   @  *k  *l r  *s
- fkln $pst  Gx  Gyys k s   G@  wh  l  Gn  Gs	   Gbk Inp  *s  Gt  Cx  *y  Tk  s  Gy @  kmn  *st gx   k  *s  Gy  s  t  k  *s   ]k s  *t   Gf  *l  *s  Gy   l 6n ,s  *y  #Yf  *k  l n  s  *t  Gy  Gk  Nl  Gt  @  Gn  *s  wl  *n  l  wm  Gn s  b  Gl nrtw x yn  l As f El  *n  *s  *t x   l 	t 6t klmnr  s  *tl n  Gf Ak  Tbm  hs 
-nptt  m =t  }r xrns  *y   l  Gm  El  Gn  *s  @bfhklmnprstwxy  *l es   *b  *s kl nr )/st r  *s 0f  n  *s t  *y  k  Ak  *n  *s  b  gfkln ?pstx y  .st  wx   *f  *l  *n  *s  *t nr  *s  Gt Pw  *y  ]k  Gs 	s st  Afkr  s 2x   *n s  *t   *ns  *t   l  *m 6n  *s  b l sm nr  st  *l  *s  Gy   *k  l  *s  Gy   *n sr s  *t  l  *n   Gh il  Gm  Gnr 	s  wx  n  *s  *t bkl  Gmn  Gprstx  y ,l ^s   *st  f  Nm   b  ]f  Nm  *n Tst  wx   *f  l n  r  *s  *t k Cm  Gn r  s  Gt  wxt   *f  l  *s   G@f l  Gm  *n op s =t gw  wx  y   *k  *n  *s  *t  k n  *st  Gy  Tb  *f Cm  *n  s  *t  fk  l qn  *s t   *n t  wxn  
-%l s  @ b  ]f  Nhknrstw  wx  y  Tk  *n  s  Gt  Gy   *k  *n  Gst   Gk  *n  *s  *t 2x  s *y	   Nf  Gk  l  Gm n  qst  wx  Ak  *n  *s  *t   l  Gnr  *s  *t  Gy n  s  ]t  wx  Gy  ,s  Gt  *n  Gs  *t b fk  Gl  mnprst ox  ]l 4r   l rs   *n  *s t   bf  lstx   ]r  *s t r  *s  b  Gnt  wx  Af  *n +(r  *s  *t   l  Gn  rs  *y  Gb  Cm  n  *s  *t  rt   n  *s  *t  b ,l An  *s  *t  wx  bf  Gn  *s  t  wxr   k  *s  *t   *f !k n $r s At   G@bf h  Gklmnrstx   l  *s  Nk  ?l  6n  *s  t  *y b  Gk  Nn As  Gy   Gs  gt   l n  r  s  *y   Gl  *s  Gy	 f k l  Gm qn  *s t  Gy  'b k  l 6n  *s  *t y  &n  *s	   T@ $>flnrst  wx s  Gt Sy  Cm  ,s  ]t  Gn t   *n  *s  Gt  y  abf  l qn  s t  wx   l  gn  t bf 	Thk l  Gmnp  Grst |x  Gy lt x   b  f  *n  *s  *t  *k  gr  *s  *t  y  n .r st  wx   b 2f  n  *s  *t   ]k l  *n  Gs t   Gn  *s  t  bk  l  Gn 2s t l  Gn r  Af  Gk  l n  s  *t b fklm npsty   *l  n  *s  Gt   ]rs  Gt t gx jb   *f  *n  *s  *t  *y   *l  *s  ]tk :n :r -t  wx  (n   l n  *s  *t knr  *s  *t  wx  ]y   l m  *s   *s t   ]p  *s  ]x  Gy n  *skr  s 
-t   bfk  *ln  Gprst ix  Gy   l  *s  t   l m  Cm  *s	   Gkl  Gmn  *s t gw  *y  s  *y s  f t  *y n  #Ykn  *s t  l  ]s   ]k l  Gn r  *s t  Gy   b  Gk Cm n  *s  ]t	 @flmn pst r  *s  Gt  f   G@f  ?l  Ns   G@ f  ?l  Ak  s l  fn   G@ f fk  *s 4nn  Nn 4ns  f 4Vw  @ bfkl mn  wprst  *x l  *s  on  Gs  *t w   *n  *s  Gt x  *y  b Inrs  *t ix k p r   Gk 6n  ?s   *l 2m t  n  *s  *t @bf hklmnprst  w  Gyy  l   Nln  *s  Ctx  Gy spp  r  *s   b Il Cm  n  s  Gt   Nbh  ln  Gx  Nb  s k n Pr  *s  Gy  k  s  wx  Gy  b  Cl  Gn  *s  t k  l m  Gst   Gl   m  *s  lst k  pr y  *m  *ns  Gt  Gy  t   Gm  Gn  *st r  *s   l  *s  ]t  wx k  Gnrs xy  
-n  *st  n r  *s   Gf  *s   sp   k  *l  *s b sfkl m  Gnprstw  ?x  ]l  Gr   wb 6l  *s gx   f  Gm jns  ]t  Gx b  yr  n  Gs   *s  x  n  Gr  *st  r  *s   G@  Gl  gn ir  *s 	t  Gx   G@bfklmn  Gprstwxy   Nl  Gn  *s  Gt   Nl  Gn  r  *s  Gt x	 h l mnrs It x  t   Gn  Gs  *t  s (t  Gy  k  Gt  .ifk  Gm  n  *st Tk  Gn s  Gy   Nm bfkl $
-mnpstx l 5n pst  sf  *n  *s  *t   k   ]k  Pm  *s sprf m  km Gs  *y n  k  *s l  Gn  s  *t  *w s  t l  Gm  Gn  *st  gf  Tn   bk  *n  *st   gl   k  *n  *s  *t   kyn m m  b  Ghk  lm nst  *x  Gy  bf fl !ns t l  k b k f  *s  *t  *@  Gl  Nw	 bf  Nhk  Gnrs /yx  gk  Nl  gt -fl l  *s  Gp  Gt   n As  *t  *y t  Gm  Tr bfhklmnpstwx  Gy   Gk  *n  Nr  *s  Gt  *y   ?l  nr  *st   *m  *s  	l 6n  s  *y  *l n   *l n Is  Gt   ?k An  *s ,t  *y b  *n  *s  *t   Gs  Tt  5b  ]k  *n  Gs t  ln $r  s 	t  Gy   Gs  *t  *y  k  Gl m  Gn  *s  t  wx b f klmn  r  s  *t  wx  *y  r  *s   *k  *n  *s  *t  *y &n   n  Gs  *t   *@  *n  *s  *t  Gw  "l  Gn  *s  *t
- fl  Gmn $sp r  *sty k  s  Gy n  Gy  Gk  Gnt   G@ f  *s   *kl n  s  *t  *y   *s  wt  *y  Nn 
-t   G@ fkl 75npr  Gs  *t  xy   gl  Gn  *s  2s  Gt  *yr  tf gk k  *s  *t  ql  Gn  *s  4Q@ 4Yf 4jns 4|t  4wf 4yk  ]k  *n t   Gnr  *s  *t s  *t lmrsn k   Gn  Gsk gn  Nstl  ws +Ub  k  *lr  *sf  Gnp  *k  *n  *k  Gn  l @bfhklmnprstwxy   wf 6h  Gklmn .nprst %w xy   h m  Gn  *s  Gt   Gk  *s  Gt   k  *s  Gy  Gb Im  *n  Gt   *m  *s  Ct   Gb  *k  *s s   fk  gf  b  Nhkl  Gm 7n  Gprst  wxy   Gk  *n  *s  Gt  sfk hns  *t  *y  l  Gmrf  k  *s  Gy   Ns  *t  Ak  Gl )n s t  Gy l  *s  *t   ]k  *s ot   ]l  Gn  Nr  *s  *t  w  Gk  Gp   Nhl  *nst  *x  Cn  k  t ir  b  yfkl  *mnrsty   Gk  Gl  *n  *s t  wx  If  Nh Cm /Zn  *s  *t  Gy   l  r  Gs  Gt  *x  h  Gk n  *s  *t  Gy  ht  b l  n  *s  *t s  k s	 flmnps ot %/y   nr  *s  *t  ls  *t  Gm 
-
-t   Gf  t   G@n  *s   *k  Gn ,s   *st  h  *s   Gl  *n  *s  *t  k  Gt   ]@bfhklmnprstwxy   *lnr  *s  Ct   *st  Gx   Gn  r  *s  gk l  ]r  *t   Gmn  Cr  Gs  Gt   *s $t  6k l  wmr  Gs -t  wx "n   Gf k 2m /Znpr  *s  ]t  ]x  Gyr  ]f  *n  ]s  Gt  Gy   G@b oknr  sy  Gl  Gr   ls tf il  l  n  *s
- bfhk  *m  Gn Prst ' s  gk  Gl 5m  Gt   *f  ?t  f  *s t   Gn  *s  *t  Gy   ]k |l  Gn  Gp s !Dt	  0f Ik  Gl  ]m  Gn  st  Gy  k  *s fklm  Gnp  st  Nw  Gy  l  *s   Gn  *s t   *k  Cp  *s  t  ]x  *y   l  gn  ?s  Gt  Gn  ]s  Gt
+l m  *n  *s tn 2s   *s At  bfk  lmnprst gwx  *y l Cm  *n  ?r  *s At  b  *tns t x   l  Ns  b  Gn  *s  *t b  *n  *s t  wxl   gn  *s  t   l  gn r  ]stx  r  *s l An b Cm  *n  *s  *tl  	t  *y !s f 	ut  b 6s	  sb  l Cm  Gnr ,s .t  wx  *l An t  wx  
+n l n  rstx  Gy   lr 6st  *y  ?s  t  *s  *t  Gy   l  *t  2f  Gk  r  *s  *t  Gy  Gl n k  l  ]mstx  *y  *t  ?x  b 2f  *s  *t  Gy
+   bfl  *m  Gnrs  Gt  Gy   l 6n  *s   ?t  *y  Gs  *ty   wm  *n  *s m  Gt l  Gn  *t  b fk  l  ?mnrst  wx y  	ln  *s  *t  wx  s =t m  *n  stxnt  l  *s l  *s  6n  ?s  *y  l s t   b n  *st r  *s  *t  Gykt r  f  ln  *s  *t   l  ws  b f  ]kl Cmn  r  *st  *y   gn s  t  *y  s  t
+   bk  l Cm  ]n  *s t  wx  Gyt  wx   *f  *n  r  *s  *t
+ bf  ?klnr 2s  ]t 	x  l  Nr   l  gn  *t   s  t  *y   l Cm  Gs  t  *n  s =t  *y  b  ln  Tb  *n  *s  *t  Ans   kbf  ]klmnprst  ]xyt  wx   b  *fn  r  *s  *t  wx   s  Gt s @  *f  *mnpst  ?w  wx  *y   f  l 6n  ?s  *y   Gs  Gt f  2m  *t   *f  Gn  *s  *t	  k  ln p  ?r  *s  *t ln  *s  t   *k  l  gns  t   l 6n  *s  *t   Gk  *nrstb  *t 	l   b Cm  *n  *s  *t   l  *n  ?rs  *t  *y  Tm  *t   l 6n  ?s  *t  *y   *k l n  *st  &b  l nr  *s  *t 6k  Gs   *np  *stt b l   ?n r t   *f  n  *t fkst  Tnt rrl As  Gt y @bfhklmnprst swxy   l  gn  ?r  Gkl  Gs t  wx   Gt  *y  Tk ln Pr  *s   b n  *s  *t r  *sn s At  Cmnr  *st  wx   l s  Gt  f   b  *f  *n  *s  *t   ]@bf  Ghk  lmnprst 2wxy   Gn r  Gt	   Gb  Gl Cm  Gnr  *s At  Gxn  *x l )n  s  ]t  wx  Gy b gt  *yl   gn  yt  *y bn )rt   s At   ?s  *t   Gk lm  Gn Ist fx  *n  Gt   l  *n  *s  b  *s  ]t  s t  *x f k  *n  ]p  Gr vst   b  l 6n  *t   ?r  f  *n Pr  *s At  Gy   wm  Gns  *tw p k  wm   Gf
+ bf  l  Gmnp  r  *st   b Cmnrs  *t  s  Gt n  *t t sb tt k  ls  ]t  b t r  *s  *t  b At l Cmnr  ]st  b km nt xn >t   l 6n  *t  s  tbhmsl   yt  *yn s t  wxs  b An  b  *n  *s  *t  obn t s  t   b Ak  *n s St bfklmnrstwx  *y lmn  ?st  bt   Gyns  *tx  ]s At n  *t n b  *t l nr st  wx Zs  *y  b n 2s t   *f  *t   ?k 6n  ?s  *y  k gs   s l  n As  *t
+  sb fkl mnpstn r Tt Tx b t  *y  b n  Gs t uk   l 6n  *s 't   l )nrt b  ?n 2t  wxx n  b fl mnrstx  Gy m  gn  ?s  *y Tn  ns  *tx   b  *s Asfl  *n  *t t Tx b  *t  nt  b  *t   l  rn   l  *s  *t sb  n  b  Gn  *t  bl  *nrst   *ns  *t  	t  b  l t  wx  lt  *s  ]t  wx  Gy  l   G@b ffklmnpst gwxy  bl r  b Cm An  *s t   *s  ?t  *y n  *st t  wx   l  *n  r  *s  *t gx k  l   l  *n  *s =t t  wx ob  *t
+   b f  l Cm  n p st  Gy   l  *n  *s  *t  wx  bfkl  ns  t  l  *t gy  l  *n As  t  *y  s   b Cm  Gn  *s ;t  wx  ps t l   bhklmnprstxst b  grst b  *t   l n  Nt  r  *s  *y  Nn p   l  Gs  ?t  b Wkl  Gmnr  ?st k n  ?rs  ?t !ts  ?t  2fns  *t Isb 2f  *tl   gn  *s  yt  *y  b  l )n  *s  *t sb  ]t  wx  b  l 6np  ?stxn Tb  l  n  *t
+   bf  lmnr Is  *t  Gy  Tb  l 6n  *t  r At s It x   b k  l  Gmn  Tb  l An  *s  *t  bfk l Cmn rs t  Gy   l .t  wx   l  *n r  *s   *s  ?t   l 6n 2s  *t   b  Gk  Gn s  *t  b  *n  *s  *t bf  Ghk  lmn  *pst  ]xy  ?lr l  gn  Gt   bl n  *s  *t  n  ?s  *t  *y
+  ob Tkl Cm nst  Gx  Gy   Nh 6n 6s  *y   Gk  l n  *s  Gt  Tb  *f  *s  *t b "n 	t  b  ]k  *n  *st   ?r  *s n  *st   *n  s  *t  Ak Cm  *n r  *s  *t  nr  *s  *tyb l  r  *tl   gnt  *y  gy  Tl b  *nst Uk   b  n  *s  Gt  ks 	t @bfklmnprstx  Gy t klr x   Ns  ?x  ?s  *t  b  *k  *nt  Ak   b  ln  s 4t  Tb  ?ft  f  Ns  sk  Gns t  w  Gy   l  *m  Gn As  t  wxrt  b l  *n  ?s   yr  *s
+ klm  *npr  *stx  Tb  *t   gn  ?s  *y  Tn  ?sl 6s l At	   b  f ln  ?r  *s  *t  wx   b  *tn sb  *tlr Sstxmynt   b  *s  *t b  Gt  ?fs  *t  *f  *t  6n  *t Tb  ?n  *t  sb  l  *n st  wx   *f  *n  gr  *s  *t
+   b Tfk Tlm 6n r  *st   l  *n  *s  *t  r  *s k  *s  Gy  Tb  bf zklnprs At  Gy  b  ]t  wx   ?s  ?t  *y  Is   *k  *s  Tt  ?s  ?t   *t  wx   b Cmn  *s  *t   k  l Is @fhklmnstxyxs 
+t  b klm n s St  ?f nt  Afbt  b  *n t	   Ghk lmpr  s  wx t b r  *t xy pty Pn  s  n r Ast   l 6n  *s  Gy   s x   wk lm  *np r  *stw  wx   Nn  *s Pr n Hr  *s x r fkl Cmnprs t  wx  Gy  ?r ft  ?w n  *s Ps k sb 	n  t   l  ?t nxr gs t b zps  *tt An At pt 	tr l  b l  ?r  ]t  wxm s  t
+bfklmnprstl s x  ?m r  *t  6k  *n  *st  r fkm n rst  ?w  ?xy hr  b  *n  s  t  ?b n  mn  *t  2t  b  k  *t b  *tn x k l  *n  *s wt  ?x tl r  t  gs  t
+bfk lmnpstxl m ]t bklntx t  ?k  t  b  *t n k rt  k  ?sf p st s  r tnst spl t   b  l  *t kr s  ?t  gx t  ?fk r Istr  ?b  n  fkn  *tt ob Af At gt )x bt f  *t  Tb f  ?lnp st  l  *s t   Gk r  *s  *t
+ b  k  l hmnrs  t x  *l At  Tb  l  gn  Gs  Gtn  Tt s  An bf hklmnpstwxy  Ak l  *s  *tl  ?m  ?nr  ?s k  Gn  *s  *t t 9k n  *t  ?x fk l mnst rns Tb An  *t   Gl  ?rs lt  Hr   Gk  *st  Pr  *s  *t   b  Gk  *s  *t  b  ?f Cmnst  *y   Gs t   b  *m  *s  t   *s  *t  Gy k 7mn  ?r t r 
+t  fk  ls  *t  ?l  *t   ?m  *s nr  st   *st  	n  bstn t s  b  ]r  *t
+   b |flnp rst  ?x f  *y  b An  Gs  *tn t Zs  t   *nr  *s  *tk |nt  *f At	  b k  *l m In s  t  *y Pt   b Cm  *n  *s  Gt   Gl  s @bfklmnprstwxytx  k 	xs l  *sk  s  Gy  lrst  Gk tkt ?rn  ?s tx  l  ?t  ln  *t t  wx  f kl  gnrs It kpst  *yr  Tf  y@  *s t  *k  *s  gt  Gy  Tb  *k  Gn  *s t  Gy   bnt  s At k  ?t  wx	   ?@lmn prst  f Cm  *n r  *s  *t n s f  *k .s t k   ]b k  lm Inp  *st Pw  ?xb  ]l ul t  wx  Fbn  *s  Gy s s  f   f  ?ls  *t  t bfk  l  Gmn  ?prs ;t  wx  *y 9lr  *s  ?t   bk Cmn  *s  *t 2xn )s   s  t   *n  *s  t   *k  Gs  t  *s  t  *y   t blnp r  *s  *x Il  n  ?s  *y   Gk  l  gn  *s )t  wx _l	 k Tl  gn  ]prstx   b x  Cm  *n  *s  ]t  wx  b  *nr  *st   l t f  l  gn  ?s   l  gn  t	 f  lmn 	r  s  *t  Gy  Ak  l  *snt l   l  Gs  *t  Gl  Gn	  fkl nrstx  Tb  *nt  wx   *f  k  *n  Nr  *s  *t  b  *tx  gr  *s  b kns  ]t x  ?y   *k  l   b An  *t f s  *t  *k  *t  &b Af  l  *n  grs t m n l  Gn bkm n  *s  Gtl  tx n )n  2fnp r  *st  b  l Atk nt t Xb nr 2s  *t   b  l  Gs At  l  *n  Gs  *t  Gy bfklmnprst  Cx  *yl   gn  ?s  t  ?x  *y   l  *t  *y m  *n  *s t  wxt  *k  Ns   b Cm !n  st  wx  *y   gn  *t b l  Nn  ?p  gs t k  l  Gm  *n  ]st xt  Af  *l  *s  ln  *s t  Gy   l s  Tb  ?l  *n  *s  *t	 k lmnpst xt x  f  *n  ?r  *s  *tn  *tt l  *n  *s  *t  wx   s  t  *y   *k  *t   *k  *n  *s  *t  Gy  ?k  *s  *t   ?f  *t f  l 6n  *s bk  *t gyt r   l Cm n  s tx yn l  *s s  *y   Gm  *n  *s  Gt  wx  `@ f p Zr  *s t b Ml n  ?t  	fkmnsl  sk  *np  s  *t t  b <lp  *st@s 
+t  n  *t Ak r  G@ Tkxr n t m  *n  *s  *t  Nnt  *ks  *n At   @bfhklmnprstwxy  l  Tm  gn  ?r  gs ]t y Rkl  Tnrt  wx   *m  *s t  Gy gs  t  ]x  b  Gk  *n  *s 2t  Gy   *@fklmnrst  ]w gyskx n  Tl  Nst nb  k  *n  ?p  *s  *t Pw  wx  l  ?n  *t b l  Gnst xl   gn  *s  t  *y  Tb  *s   lm n  gr  *s  *tn t   Glmn  Gs  *tt r  *s  *k  Gy   l  Gs At x  b  Gn  s At  kln  s  ]t  wx s  t  *y   Gm An  *s =t  wx   l  Gs Atln  Grs  *t  ]mt   *n 2tt  wm r   bf  ?hklmnrst  wx nmn  tl  ]t x  Nn  wx
+ @  bkm  Gnrs t x  Gn  *s t  gwk  Gs 
+t sk  *t   wm  *s  *y np  *st  Gy k 2s It s t Tk	 fk 	nrst  wx  Gy  *t  wx   *st  wx  f  *n  *s t x   b  lm  Gn  *st  p  *s  Ak  *s  Gy   l $Pn  *s  Gy  G@ b f  Gk Eln  *p st  wx  Gy   l ,s  Gt   *f  *n  *s  Gt  Gy	   bkl  *n  *st  wx  Gy  Nnt  wx   *n  *s At 0n  sb  ?r  *t   b f  Gk  l Cm nr  *s  *t  Gy n bfk Cmn  ]prst  Cxy   l >r   *n r  *s  *t  b Tknr  #st  Gy   ]st   l  Gx  @  Afl  gn  r  *s   gn s  yt  *y   ]k  *l  Gn  Gs =t sbn  *t  Gs !t   l n  Gp  s  Gt   *n r  *s  *t   *n gr  Ns b fklnprst x  Gy  *l Cm  *n  *s  *t  lr  ]s  *t sbt Ak  gs k 6n sr  ?s  *y  k Al  s  Gy	  b f  ]l  *ns .tx  Gy tr Tbt fn  *t  *l  *t r  *s  *t 6n 	s 2t  Gk  *s  *t y  Xb  Gl  *n  *st  Gy  k  *s  *y	  b  *kl nr  *st  wx  It  wx  *y  gk  *s  Gy   l  n  r  *s  *t   G@ sb fklmn prstxy  b l Cm  ?n Pr  *s   qs  *y  n  Gy  vr  *s  ?tx Cm  *t f  l n  s t  k  l 6n  *s  *t y	  f Ml hn  ]r  *s !t  Tw  wx n  Gp  *s  *t l  *s  *t  #(s  yt  *y   Gm  *s @f kl Cmnprst w gy   *s  Tt  Gy  ?m  t  m ns ;t  wx Py   Tm   Gn  *st   b nr  *s  gt  wx !	l  *sfst 0l  An  *s  b Af k  *n  *s  t  wx   np  *s  Gt  wx Cr   b  *f sk  Gl  Gn  *s  *t @bf hklmnprstxy  f  *sl  Gn t   *t  *y  b  ?l Tmn  *s  ]t  wx  s	   ?hk  Glnstxy It   *k  l  Gmr  *s nx   *lp  *st  Gy l >s r  bf  l n 	r  *s  *t   l  gn  *s  tn  l  *s  n  n  stx  *y   *n  *s tn   *s ix	  f  ]l  *np Trst  Gxl Cm  ?y k Al  Akr  sp Ul
+   bfk  lm  Gnst xst m b l  Nnr  ?t gx
+  5fkl dm Anp  *s 	t  Gw   l n  *s  t  ?s t   gks  >t   b  Gf  *kl Cm  *nr  *st  wx  Gy m bns  ]t gx   r  *s ixn  *s t  b  *f  l  Gn  *s t nk  s	   b fklnpst $Rr Ht  *l  Nn  6n  *t k   *m  *t  m n  *s Atw  *y `@   bk Al Anp gr  ]s  Gt nx  Gy Ust  wx  *f  r  *t s $Ntf  *l  Gn  Gt  m  *n  *s  *t   *s  Gw bfklmnprstxy  *l im   *n r  *s At qfln  pr 	s  ]t  wx 
+rs t  *n  ?s  gt bm  *n  *st  wx Rbnt  wx   l  n  *t   l  gn  r  bf  *n  *s  *t 	r  *t  Nn  t  ?y   b  l  *nst   *l  *s  Gy   l  ?s  *tl  Gmnst  wx In  ?y s t fm  *n  *s  *t  wx k  *t t  b Af  k  *n  r  *s  *t b  Gm p  *t  2f  *n  r  *s  *t b  ?f =k  *lnr st x  *yl  *t   t 'x k  l  Gst xt   *f  l 6n  b  yl  n  *s bk #$ln 2s  Gyt b  Grk  *@   *k Cm  *n  *s  *t  y  b  ?k  l  Gn  ?t kml ntr  *k  *y   bfklmnprstw  y l 6n   gn %p  *y   Gn  st  wx  b  *f  *n  *s  *t   wf Cm  *n  *s  *t  *y kn  *s |r bs t  wx  Gm  *st  Gy  *k  *s   *km An  Gstn  Gt nx   *l  *tnrt 't Csmn Ttr  Ns  *t s   *kps  *t ltblxmntr n   *l  *n  *s  *t  ]n   f  ]k l  ]n  Gps !t   ]t  sb  ]k mnr  *s  t k  ?r  s  sb  Gn  *s  *t  *f  Ns   wm  Gnp  ?r  *s  k  *t @fklmn  ?prstx   l 6n  s  *y  *n r  	b  ?n  *t k 2n  *st m l 6n  ?s  *y 6n  *yn  l 6s  gkt   b  *n  *s t   b  ln  s At  *y  Gs tt   l  gn  ?s  t   Gk  ln  *s  *t   l  s  bt   gn  *s   ]@bfklmnprstw  Cx  Gyxn   Ns  bl  *n  *s  *t  Gyr Ts  Tb Tl  *n _rs  *t Ct n  qst  *y k  *s  b  *n  *t   ?r  *s  *t  Gnr Atk (n k l  *n  *st b n  *t  Cm An 6r  *s  *t  ?@  l  ?n  p r  ws  *t   bknst   *strs  t k Cm  *ns  *t  ?l  *n   Gm 
+t  |m t gx  b  *k  *n ,s  *t   Gm  *nt   *k  l  s  yt   Gf  *nr  *s  *t  *t  *y  Cm   w@ b h k "Zl m n p  *s t  Gw @bf  *hklmnprstwxkl r +s =t  Gy  Gm  r  *lm   *kl  *s (k r  Gt  n  ]t@  ?ln r  km  *s  Gy n	   Gkl mn  Gprst s 6ty   wm  *s p  Gs  Tt   Gst  *k 	r fm  Gn  *sty  Tk  s  Gy   *s  Tt   b  Gn  *s  *tf  
+l  *s   *n  *s  *t y   *n  *s  gt   ybfkmnpstx y ft  b  Gk  n st  wx  Gy  Af  k  *s   gb   ]k  l  *n  Gr  Gst   l  *s  *y   s t  n  Gs  Gt   f Tk  Gn  *s  *t  sk  Gn  *s   g@  ?k  st 6k fh k  lmnp Ist w 
+xy  wr Is  Gmnttt  6n  t  ?@ zn   *st   *s t  ?x gl   *fk Cm  *n  *pst   Gst  m   *s 6t  	t  gm  *tlk  s  Tt bfhk lnprstx  Gy llr  *t  wx  Gm As   Gl An  *s  *tns  ]t  wx  b 2fs  Gt mt  wx  Af  l  *n  *s  *t   *n st   l  gns   *n  *s  *t ixr  *s  bt  wx   *f  l n  s  *t  *n s  *t  2f  Gl  n  *s  Gt  !f  k  l n s  *t  b  Gkn  *st  wx l  *s  s  *y  f  *n  r  *s  *t   bkl dmn  *stw xy   ]l  *np  *s  *t l  s  Gt   Gn  *p  t
+   f klmnr st  Gy   *k 	r  *s >t ix  *y  *klk Tk  Gy   Gst n +f  Gk  ]m   *n  ]s  *tn  Gx   *k  *n  *skl   k  *s  Gt  '@  ]fklmnr ;st  wx  *y   ls   l  Gyk  *yt r   kl  Gm  Nn  *pst  k  t  *y   Gm  *n  *s =t  wx r   l hns t   Gm  *s =t   Nf  *l  Nn  *s  Gt  nb  *f  *n  *s  Gt  gl  Nn  *s !t   ]k  ln  *s  Gt  l Cm  *n  *s  *t @bfhklmnprstwxy m  Gnr  *st k  ]s  wx   *l  *st  gk  *s   kl  Gn  r 
+ns t  Gy   *s  t  kl  *nrs #t  .k  *s n  *s  b  *s   gn  Gr  *s  Gty@m   k  *s   bfl  Gmn  Gprst  wx  Cy r   l m  *n r  *s  *t  ql Cm  Gnst  wx  l  *s  Af  l  *n  *s  *t f   Gn  Tt  l n  *s  *t  wx  'f  kn  s It  Gx  *y   *k  Gt @ f  Gk n  *styr lp  b !k `s  ws fklm  Gn  rstw  wxy  Gx   bl Cm  Gn  rst   gn  Gt  *y   Nt  
+n  *s   *s y n  *s Kk   l  Gm  gn  *s  Ct  Gy	   b kl  *nr  *s  ]t  wx   s  *y  Gn  Gy  Gk  Gr  Gt   Gl  *s	   Ghl  Gmnr  *st  wx  Gns &b   qs b st xs b   f  *n  *s  *t   *k  *l  *s  Gt
+ b fl  gmnp  Grst  sl  *s  f  s 2t  wx   Gn  *s tkn  Gstt Af s (s t sb   b 	fk An  *st  gxr  s =t   Cl  *s   G@ bklmn prst  wxy   b  l  *s t  wx  k  *s  *y  b  *s   Gst  Hs  t  f Tk  Gm  *s  Gy  	@ b n ,s  *t   *f  l An  *s At  Gy n   Ck  *n  *s \t   wmn  *s  t w  f 9l  *s  Gt @ )ns t mrs  Ny p 6l @bfhklmnprstwxy m  *s  t   l  Gn yp  Gs t kl In rs .t   l  Gn :s   *s t  *y  6t   whklrs -ty   *l  Gs  wx  6n  ]t  *yn  ]t  wxt `l   Gx k  *ns   *s  ]t  wx bf  Gl   G@ b  *kl  Gmnprst  ]wx   Gn  ]p  *st  wx   *n  *s  ]t  wx   b Cm  *n  Gs  Nt  wx   b  l Cm  *n Hs  Gt	  Zb  Gl  *np  *s t Pw  Gx t  wx  sl  *n  *s   *n sr  *s  *t In
+   b  Cfmn  *ps +tx  *y   Nb  Gk  *s   *st   *k  Gn  *s  *t  ik  l 6nn  +s  @b f  Gkl  Gmn .pr  Gstl   Gk  *n  *s  ty   wm  *s w   b l r  *s t "Ex   l  *s  Gt   *k  Nl &s   *k r
+ fhkl  Gmnstxrn  t  Gw   *n  r  Gs   k  Gs   l  Gs t   Gn  *s  Ct  !un  *s  *tl  Gn   gn  s  *y
+  	hklnrstx y  sn  *s  Gt   G@ n Pr  *s gt   Gk  *l  Gs  6km hn  Gs .t xtr k   Gl  *n 2s  Gt   k  Gm srs   Gk  t  l  Gn   l n s !t  Gy
+   b  ?fk l Cm .n  *st Cy t n  *s t   Gs &t @bfhklmnprstwxyrt  *s  gt pl In  k l n  *s  *t gx y  *l  ys   lm  *n  *st  Gk  s   yk  Nn  *s  *y  &bn  *s t  wx   wf  *s  Gt
+  @ sb  Gf  *km  Gn stx  Nn  ?s  An  *s  *tx  Gn s  Cm An  *s  *t   @  *k  *l r  *s
+ fkln $pst  Gx  Gyys k s   G@  wh  l  Gn  Gs	   Gbk Inp  *s  Gt  Cx  *y  Tk  s  Gy @  kmn  *st gx   k  *s  Gy  s  t  k  *s   ]k s  *t   Gf  *l  *s  Gy   l 6n ,s  *y  #Lf  *k  l n  s  *t  Gy  Gk  Nl  Gt  @  Gn  *s  wl  *n  l  wm  Gn s  b  Gl nrtw x yn  l As f <l  *n  *s  *t x   l 	t 6t klmnr  s  *tl n  Gf Ak  Tbm  hs 
+nptt m =t  }r xrns  *y   l  Gm  <l  Gn  *s  @bfhklmnprstwxy  *l \s   *b  *s kl nr )"st r  *s 0f  n  *s t  *y  k  Ak  *n  *s  b  gfkln 0pstx y  .st  wx   *f  *l  *n  *s  *t nr  *s  Gt Pw  *y  ]k  Gs 	s st  Afkr  s )x   *n s  *t   *ns  *t   l  *m 6n  *s  b l dm nr  st  *l  *s  Gy   *k  l  *s  Gy   *n sr s  *t  l  *n   Gh il  Gm  Gnr 	s  wx  n  *s  *t bkl  Gmn  Gprstx  y ,l Us   *st  f  Nm   b  ]f  Nm  *n Tst  wx   *f  l n  r  *s  *t k Cm  Gn r  s  Gt  wxt   *f  l  *s   G@f l  Gm  *n fp s =t gw  wx  y   *k  *n  *s  *t  k n  *st  Gy  Tb  *f Cm  *n  s  *t  fk  l hn  *s t   *n t  wxn  
+&l s  @ b  ]f  Nhknrstw  wx  y  Tk  *n  s  Gt  Gy   *k  *n  Gst   Gk  *n  *s  *t 2x  s *y	   Nf  Gk  l  Gm n  qst  wx  Ak  *n  *s  *t   l  Gnr  *s  *t  Gy n  s  ]t  wx  Gy  ,s  Gt  *n  Gs  *t b fk  Gl  mnprst fx  ]l 4r   l rs   *n  *s t   bf  lstx   ]r  *s t r  *s  b  Gnt  wx  Af  *n +r  *s  *t   l  Gn  rs  *y  >b  Cm  n  *s  *t  rt   n  *s  *t  b ,l An  *s  *t  wx  bf  Gn  *s  t  wxr   k  *s  *t   *f !k n $r s At   G@bf h  Gklmnrstx   l  *s  Nk  ?l  6n  *s  t  *y b  Gk  Nn As  Gy   Gs  gt   l n  r  s  *y   Gl  *s  Gy	 f k l  Gm hn  *s t  Gy  b k  l 6n  *s  *t y  &n  *s	   T@ $1flnrst  wx s  Gt Sy  Cm  ,s  ]t  Gn t   *n  *s  Gt  y  Xbf  l hn  s t  wx   l  gn  t bf 	Uhk l  Gmnp  Grst sx  Gy lt x   b  f  *n  *s  *t  *k  gr  *s  *t  y  n .r st  wx   b 2f  n  *s  *t   ]k l  *n  Gs t   Gn  *s  t  bk  l  Gn 2s t l  Gn vr  Af  Gk  l n  s  *t b fklm npsty   *l  n  *s  Gt   ]rs  Gt t gx ab   *f  *n  *s  *t  *y   *l  *s  ]tk :n :r -t  wx  n   l n  *s  *t knr  *s  *t  wx  ]y   l m  *s   *s t   ]p  *s  ]x  Gy n  *skr  s 
+t   bfk  *ln  Gprst ix  Gy   l  *s  t   l m  Cm  *s	   Gkl  Gmn  *s t gw  *y  s  *y s  f t  *y n  #Lkn  *s t  l  ]s   ]k vl  Gn r  *s t  Gy   b  Gk Cm n  *s  ]t	 @flmn pst r  *s  Gt  f   G@f  ?l  Ns   G@ f  ?l  Ak  s l  fn   G@ f fk  *s 4an  Nn 4as  f 4Iw  @ bfkl mn  wprst  *x l  *s  fn  Gs  *t w   *n  *s  Gt x  *y  b Inrs  *t ix k p r   Gk 6n  ?s   *l 2m t  n  *s  *t @bf hklmnprst  w  Gyy  l   Nln  *s  Ctx  Gy spp  r  *s   b Il Cm  n  s  Gt   Nbh  ln  Gx  Nb  s k n Pr  *s  Gy  k  s  wx  Gy  b  Cl  Gn  *s  t k  l m  Gst   Gl   m  *s  lst k  pr y  *m  *ns  Gt  Gy  t   Gm  Gn  *st r  *s   l  *s  ]t  wx k  Gnrs xy  
+n  *st  n r  *s   Gf  *s   sp   k  *l  *s b sfkl m  Gnprstw  ?x  ]l  Gr   wb 6l  *s gx   f  Gm [ns  ]t  Gx b  yr  n  Gs   *s  x  n  Gr  *st  r  *s   G@  Gl  gn ir  *s 	t  Gx   G@bfklmn  Gprstwxy   Nl  Gn  *s  Gt   Nl  Gn  r  *s  Gt x	 h l mnrs It x  t   Gn  Gs  *t  s (t  Gy  k  Gt  .\fk  Gm  n  *st Tk  Gn s  Gy   Nm bfkl #mnpstx l 5n pst  sf  *n  *s  *t   k   ]k  Pm  *s sprf m  km >s  *y n  k  *s l  Gn  s  *t  *w s  t l  Gm  Gn  *st  gf  Tn   bk  *n  *st   gl   k  *n  *s  *t   kyn m m  b  Ghk  lm nst  *x  Gy  bf fl !ns t l  k b k f  *s  *t  *@  Gl  Nw	 bf  Nhk  Gnrs /lx  gk  Nl  gt -Yl l  *s  Gp  Gt   n As  *t  *y t  Gm  Tr bfhklmnpstwx  Gy   Gk  *n  Nr  *s  Gt  *y   ?l  nr  *st   *m  *s  	l 6n  s  *y  *l n   *l n Is  Gt   ?k An  *s ,t  *y b  *n  *s  *t   Gs  Tt  5rb  ]k  *n  Gs t  ln $r  s 
+ t  Gy   Gs  *t  *y  k  Gl m  Gn  *s  t  wx b f klmn  r  s  *t  wx  *y  r  *s   *k  *n  *s  *t  *y &n   n  Gs  *t   *@  *n  *s  *t  Gw  "l  Gn  *s  *t
+ fl  Gmn $fp r  *sty k  s  Gy n  Gy  Gk  Gnt   G@ f  *s   *kl n  s  *t  *y   *s  wt  *y  Nn 
+t   G@ fkl 7(npr  Gs  *t  xy   gl  Gn  *s  2s  Gt  *yr  tf gk k  *s  *t  ql  Gn  *s  4D@ 4Lf 4]ns 4ot  4jf 4lk  ]k  *n t   Gnr  *s  *t s  *t lmrsn k   Gn  Gsk gn  Nstl  ws +Hb  k  *lr  *sf  Gnp  *k  *n  *k  Gn  l @bfhklmnprstwxy   wf 6h  Gklmn .aprst %w xy   h m  Gn  *s  Gt   Gk  *s  Gt   k  *s  Gy  Gb Im  *n  Gt   *m  *s  Ct   Gb  *k  *s s   fk  gf  b  Nhkl  Gm 7n  Gprst  wxy   Gk  *n  *s  Gt  sfk hns  *t  *y  l  Gmrf  k  *s  Gy   Ns  *t  Ak  Gl )n s t  Gy l  *s  *t   ]k  *s ft   ]l  Gn  Nr  *s  *t  w  Gk  Gp   Nhl  *nst  *x  Cn  k  t ir  b  yfkl  *mnrsty   Gk  Gl  *n  *s t  wx  If  Nh Cm /Mn  *s  *t  Gy   l  r  Gs  Gt  *x  h  Gk n  *s  *t  Gy  ht  b l  n  *s  *t s  k s	 flmnps ft %"y   nr  *s  *t  ls  *t  Gm 
+t   Gf  t   G@n  *s   *k  Gn ,s   *st  h  *s   Gl  *n  *s  *t  k  Gt   ]@bfhklmnprstwxy   *lnr  *s  Ct   *st  Gx   Gn  r  *s  gk l  ]r  *t   Gmn  Cr  Gs  Gt   *s $t  l  wmr  Gs -t  wx "n   Gf k 2m /Mnpr  *s  ]t  ]x  Gyr  ]f  *n  ]s  Gt  Gy   G@b fknr  sy  Gl  Gr   ls tf il  l  n  *s
+ bfhk  *m  Gn Prst 's  gk  Gl 5wm  Gt   *f  ?t  f  *s t   Gn  *s  *t  Gy   ]k sl  Gn  Gp s !7t	  0f Ik  Gl  ]m  Gn  st  Gy  k  *s fklm  Gnp  st  Nw  Gy  l  *s   Gn  *s t   *k  Cp  *s  t  ]x  *y   l  gn  ?s  Gt  Gn  ]s  Gt
    b  Nh  *k  Gl  Gn  ]pr  *s  ]x   ]k  Gm  *s  Gt  Gx	  I@  Tb sf 
-
-l  *nr  *s 3t	 @f  ]kl  Gm  ]p !^s  Gyr  p  *k  *r  7(k  *y  Gk  ]l  Gm  Gn  ?st  ]x   l 6n *s	   *kln  Gp  Gr  *s  Gt  Gx  Gf  *y   Cl  *n  *s  gm  *n  *s  Gt @bfhklmnprstwxy   l 6n Srs   *m  *s  *t
-   Gkl m -Anr  Gs 8t  *x Cy   *k  *s  t   *k  Gn  *s  *t  Gy  -blnr  st  Gx  6n  s  Gt  Gw  Gy   Gs  Gx  Gk  *s  Gy   Gn  Grs   yk  gk  Gn  Gp  *st   *s 2t   w@b  Nfhklmn sprstw  x  Gy  ]l  Gnrs Tt  *s  y  Ct  *@  Gs It  Gx   ]k l Cr  *s t   G@  Gf  ]k )/s  *y   ]l  Gn  *s   l  Gn  qs  *t  Gy   *f n  Gs  Gt lm 
-
-n  ?p  *st  ?n  *y  @   Gn  *s  Gy   *n  ]p  *s  *t  Gl  *t   Gk  *n  *s  *y bf k uln  Cpr  stw  ]x  Gy   Gk  *l  Nl n  s@  Gs  Ct 6k  *l   Tr  *s )|@   G@ f  hk l  m  *n  *p  Grst 3x  ]y   l 	Tmn Pr  s ot   gn  Gs ix   Nk  *n  *s )t
-  6b \f l (nr s  *t xy   n  *s  *t   gn  Gr  *s   Gkln  Gp 9r s  *t  Gt  Gy  68s  Gt
-   wb  Gk  l  Gmn  s At  Cxy  *Ol  Gs   ?y	  bf kmn  st  *y lm   *n s  *t  Gy   *k  Gn  *s  *t  *y   l  *n  Gs  *t   Gf  Ck  l nr  s  *t  An  *s  Gt  *y @bfhklmnprstw  xyst   l 6n  ?s  *y  G@ (r  ]s  *t  Nn  *t  m  *n  *st  gl  Cm  Gn s  t  *y sb  Gn  Gr   ?h  *n s !t  9rs  gn  k 
-l  Gn 5*s  Gt  y  sfk  wm  *n  Np  *st   Gn r  *s   Gk In  r   l  gn  Gx   Gm  Gn  *s  Gt m  *nnt 	t	   G@  ]kn  Gp  *r  s  Gty  sk  *s  s f  l (ns  ]t  *y  Gk 8s   *s  t   G@ Cb sf  ]h  ?k  wm  Gn 6$s  *t  ]x b  *f sh  Gklnprstw  gx
-   Gkl  Gnp  yrs t sx  Gy   Gb  n  *s  *t r   ]l =tk s  l  @  h  *n  *s  Gt   wk n Pr  s  *t ux  *y  6 n  *s  *t  Cm  *n  *s At   kl gm  Gn rs   Gk  s   *k  Gn   *s (t  ,@bfhklmnprst  *wxy   Gk  Gl  Gn r  *s  Gx  Gy kl en  Grs  ]t xt  wx  6r  *s n  s  *y  Gs t  n  r  *s  *t Cm  t b 6hklmnrs ot  Gy  Gk  *l  *n  Gk  Gt   l An  Gr  *s .t  *y   gb  Gn  s  Gt   l  ?n  wr  *s t  Nf  ]l  *np  *tt   *n s  *t   *s  t   *b 6k  Tn  s  t  *y   G@b l  Gn  *s  *n  *s  *t   l  Gs  wt y  Gl  Gt   l  *n  *s  *t  *y   f l  n r  st  *y  hl  ]m  Gn sp  wr  *s b f hklmn  gprstwy k  *l l  *n  Gst  wx  n  *s  *t   Gn  r  *s  Gy   *n 2s  *t  *y   Gn  Gp  s  Nw   Gk  l  Gn  *s  An  *s  *t  Gy   l  wm 6nt   Gk  Nn  *p   l  gn  r  *s  wk  wmt   G@  *s  ?l  *n  *s m  *n  s  *t  *y  ]k  Nn   wm  Gn  *s  Gt   Gkl  *nst   Gn r   *k  *s  *t  y  ls At  wx  mn  *st  ix   r  *s @bfhklmn prstwxy	   b  Nhl  Gnrst  *y  6n 2s y n  *t   n  *t  k   h Ik  l  n r  *st n  *s  1Bn  6k  l Cm nrs .t  !n  *s  Gy  !t   Gh  Gl n  *s  ?t @bf h  Gklmnprst 7wx  yr   gk  *s  Gl  Tr  Gt  l Cr "s   *s  Gt  Cy   n  s   G@ zh  *k l r  Gs Mt  "n  *s  Gt  Gk  *n  st  Ak  qs   wb  gl  *st   Gw   Gl  Gn  Gs  *t  6n  *s  t   k  *ln  *s  *t  Gy  s t
- bf  h  Glnpst -fwl   Gn  s  *t  *y  *l  Gt  ,s  *tt  Gn  Gr kt r   Gk  Gnr 	Tl   *k  *n 
-r  *s  bf hkl n /ypstwx  Gy   ?l  *s  b  *k  Glmsn ix h  *s gt l  ;s  *y  sf  Gl  Gn  *st w  om  Gn  *s   b  Nf Il ?mn  ]rs t  Nw  ]xy  b  *s   *n 6r  *s  Gy   Gn  *s gw  Gf ox  sfl  Gn  *st   *k  *st  gr  *s   Gk  Gs   *s  gy b <fhkln  Grst  Gw  *y ll  Gn n   l n  s  Gt   Nk  Gn  Gs  Gt  *y   h  l  *n  Gs  *t  bn  *t	   wb /fl  Gn ps  *t w   *n  s  *t  *y t r   G@bfklmn  ?p rs  *twx Iy 6k  ?nrs  ]t  *x  Gy  Nk  ?l  Nr  Gt   Nh l  wm =Mnrsm   gb  *s   *s  Ct
-  gb :f  l  Gm n  qs t  Gw  Gy  zn  Gr  *s   Gk  l  Gn  Gst  Gy   ?b  l  Nm  st  Nw   *n  Nr  *s  *t   Gl  Gn  s  Gt   yl 6n  *s  Gt   bnr  *s  *t  	f  *k  *s  *n  *s  Gy  fl  Gm n  p  Gr  s  Gt <w  *y   *k  *s St  *y l  mn  rs  *tx  k  Gm  *s   *st   Gr  *s  Gy n  *st  rn k bfklmnpr Hstwxy   Gl  ?n  *s  Gt  Gyk  Tl  Gr  *s  *t y 	x	  l  Gm In rst  wxy  ql  sb  f  *n  r  *s  *t w   Gb   Gk  Gn  rst  *y   Gk  gn  *s   *k  Gn  *s	   G@  Gk  n Pr  s  *t  ]x  *y b sfh  Gnst  rs k   Tl  wmp  *s 
-
-t w  p  ws n  *s  Gl 	r k  Nln  r  *s t   *n  *st k !Dk l  gn  *s  Gy   Gf  *y b fkl  Cnrstw  Gx  *y  l gn n  s  *t  *y   l  Gs  Gt   ]ns  t Pw   l  *m 6n   l  *s  *t   ls  Gy   *n  *s ht  wx  Gl  *n  *t k  Gl  Gt  |l ~n  r  *s  Gt  bk  Rln  *s wl   *n  s  *t  V@  Gs bfhklmnprstwxy   G@  Gkl  *n /r  *s  *t   Gk  *s  Gt  *y klns 5t y   l  wx  Cm  Gn  s  Gt  y  ?r  *s  t st   Gm  *s 5Ot  h	   Gkl  gmn  Gpr  Gs  *t  g@  gb   *l  *n  *r  *s  *t  Gk  *nt  ab
- fkmn r &)s t ix  Gy  Nl Cr  *t   Gnr  Gs  Gt  n  *y n  *s  *t   *s It   ]k  gm  *n  *s  Gt	   ]@  Gkl ?En  Gp  Gr  s  Gt  Gk s hk  l  *n  Grs  t  Nw  Gx  Gy  ]l  Gm  Gs  l  *n  *s  *t  m  *s  Gt  Gn xr  Ns
-  8@  *fk  Gl Im  n  ]s  t 8y   ]l  Gs nx   f -fkl  wm 1np  Gr  *stw  Gy  Cm  *n  *s  *t  *yr  Gn  Gt r  *s  Gt   ]p  *s  Gn !t  bm  Gn  wr  *s  Gt  p  *s   G@ k l  Gn  Gs t  x   Gf mn  *s  gt  Cl  *s b >Nk  Gl  Gn p  Nr  s  Gtw  Txl   Ct  Gk  *t	 kln .r  *s  Gt Pw 0Px  	lp  *s  *tnt  Nw   Gf  *n  *st  Cmr  *s An t  f  *s  *t   Gbfhklmnpr  s -tw  *y l  *r  wf ok  Gt  Gk m   Nh  n  *s  *t  *y k  Gn  gps =t   Gl  Gn  Gs  Gt w   *n rs 5t   Nk  &m  *n  s  *t  Gy   *@  Nl  *s  *t   b  wkl gmnprs  Gt  w +x  k  ]n r  *s  *y   *k  *m s t   G@  Glr  ]s b ?1t   *k  Gl  Gmn  *s  Gt   *ks  m n Ct t @bfhklmnprstwxy bf &hklm  Gnrstw /rt   Gn  *tl  6n  *s  *y  m n 2s  Gt  *y  Gs  Gt   b  gl  Gn  *r  s  *t   *kn  s t  *y   *l  Gs   nt   Gn  *x   *p  *s t  *@  Gt
+l  *nr  *s 3t	 @f  ]kl  Gm  ]p !Qs  Gyr  p  *k  *r  7k  *y  Gk  ]l  Gm  Gn  ?st  ]x   l 6n *s	   *kln  Gp  Gr  *s  Gt  Gx  Gf  *y   Cl  *n  *s  gm  *n  *s  Gt @bfhklmnprstwxy   l 6n Srs   *m  *s  *t
+   Gkl m -4nr  Gs 8t  *x 4y   *k  *s  t   *k  Gn  *s  *t  Gy  blnr  st  Gx  6n  s  Gt  Gw  Gy   Gs  Gx  Gk  *s  Gy   Gn  Grs   yk  gk  Gn  Gp  *st   *s 2t   w@b  Nfhklmn sprstw  x  Gy  ]l  Gnrs Tt  *s  y  Ct  *@  Gs It  Gx   ]k l Cr  *s t   G@  Gf  ]k )"s  *y   ]l  Gn  *s   l  Gn  qs  *t  Gy   *f n  Gs  Gt lm 
+n  ?p  *st  ?n  *y  @   Gn  *s  Gy   *n  ]p  *s  *t  Gl  *t   Gk  *n  *s  *y bf k uln  Cpr  stw  ]x  Gy   Gk  *l  Nl yn  s@  Gs  Ct 6k  *l   Tr  *s )o@   G@ f  hk l  m  *n  *p  Grst 3yx  ]y   l 	Umn Pr  s ft   gn  Gs ix   Nk  *n  *s )t
+  6b \f l nr s  *t xy   n  *s  *t   gn  Gr  *s   Gkln  Gp 8r s  *t  Gt  Gy  6+s  Gt
+   wb  Gk  l  Gmn  s At  Cxy  *Bl  Gs   ?y	  bf kmn  st  *y lm   *n s  *t  Gy   *k  Gn  *s  *t  *y   l  *n  Gs  *t   Gf  Ck  l nr  s  *t  An  *s  Gt  *y @bfhklmnprstw  xyst   l 6n  ?s  *y  G@ (tr  ]s  *t  Nn  *t  m  *n  *st  gl  Cm  Gn s  t  *y sb  Gn  Gr   ?h  *n s !t  9
+rs  gn  k 
+l  Gn 5s  Gt  y  sfk  wm  *n  Np  *st   Gn r  *s   Gk In  r   l  gn  Gx   Gm  Gn  *s  Gt m  *nnt 	t	   G@  ]kn  Gp  *r  s  Gty  sk  *s  s f  l ns  ]t  *y  Gk 8s   *s  t   G@ :b sf  ]h  ?k  wm  Gn 6s  *t  ]x b  *f sh  Gklnprstw  gx
+   Gkl  Gnp  yrs t sx  Gy   Gb  n  *s  *t r   ]l =tk s  l  @  h  *n  *s  Gt   wk n Pr  s  *t ux  *y  5n  *s  *t  Cm  *n  *s At   kl gm  Gn rs   Gk  s   *k  Gn   *s (tt  ,@bfhklmnprst  *wxy   Gk  Gl  Gn r  *s  Gx  Gy kl \n  Grs  ]t xt  wx  6r  *s n  s  *y  Gs t  n  r  *s  *t :m  t b 6hklmnrs ft  Gy  Gk  *l  *n  Gk  Gt   l An  Gr  *s .t  *y   gb  Gn  s  Gt   l  ?n  wr  *s t  Nf  ]l  *np  *tt   *n s  *t   *s  t   *b 6k  Tn  s  t  *y   G@b l  Gn  *s  *n  *s  *t   l  Gs  wt y  Gl  Gt   l  *n  *s  *t  *y   f l  n vr  st  *y  hl  ]m  Gn sp  wr  *s b f hklmn  gprstwy k  *l l  *n  Gst  wx  n  *s  *t   Gn  r  *s  Gy   *n 2s  *t  *y   Gn  Gp  s  Nw   Gk  l  Gn  *s  An  *s  *t  Gy   l  wm 6nt   Gk  Nn  *p   l  gn  r  *s  wk  wmt   G@  *s  0l  *n  *s m  *n  s  *t  *y  ]k  Nn   wm  Gn  *s  Gt   Gkl  *nst   Gn r   *k  *s  *t  y  ls At  wx  mn  *st  ix   r  *s @bfhklmn prstwxy	   b  Nhl  Gnrst  *y  6n 2s y n  *t   n  *t  k   h Ik  l  n r  *st n  *s  15n  6k  l Cm nrs .t  !n  *s  Gy  !t   Gh  Gl n  *s  ?t @bf h  Gklmnprst 7wx  yr   gk  *s  Gl  Tr  Gt  l Cr "s   *s  Gt  Cy   n  s   G@ zh  *k l r  Gs Dt  "n  *s  Gt  Gk  *n  st  Ak  qs   wb  gl  *st   Gw   Gl  Gn  Gs  *t  6n  *s  t   k  *ln  *s  *t  Gy  s t
+ bf  h  Glnpst -Ywl   Gn  s  *t  *y  *l  Gt  ,s  *tt  Gn  Gr kt vr   Gk  Gnr 	Ul   *k  *n 
+r  *s  bf hkl n /lpstwx  Gy   ?l  *s  b  *k  Glmsn ix h  *s gt l  ;s  *y  sf  Gl  Gn  *st w  fm  Gn  *s   b  Nf Il 0mn  ]rs t  Nw  ]xy  b  *s   *n 6r  *s  Gy   Gn  *s gw  Gf fx  sfl  Gn  *st   *k  *st  gr  *s   Gk  Gs   *s  gy b <fhkln  Grst  Gw  *y ll  Gn vn   l n  s  Gt   Nk  Gn  Gs  Gt  *y   h  l  *n  Gs  *t  bn  *t	   wb /fl  Gn ps  *t w   *n  s  *t  *y t r   G@bfklmn  ?p rs  *twx Iy 6k  ?nrs  ]t  *x  Gy  Nk  ?l  Nr  Gt   Nh l  wm =?nrsm   gb  *s   *s  Ct
+  gb :f  l  Gm n  qs t  Gw  Gy  zn  Gr  *s   Gk  l  Gn  Gst  Gy   ?b  vl  Nm  st  Nw   *n  Nr  *s  *t   Gl  Gn  s  Gt   yl 6n  *s  Gt   bnr  *s  *t  	f  *k  *s  *n  *s  Gy  fl  Gm n  p  Gr  s  Gt <w  *y   *k  *s St  *y l  mn  rs  *tx  k  Gm  *s   *st   Gr  *s  Gy n  *st  rn vk bfklmnpr Hstwxy   Gl  ?n  *s  Gt  Gyk  Tl  Gr  *s  *t y 	x	  l  Gm In rst  wxy  ql  sb  f  *n  r  *s  *t w   Gb   Gk  Gn  rst  *y   Gk  gn  *s   *k  Gn  *s	   G@  Gk  n Pr  s  *t  ]x  *y b sfh  Gnst  rs k   Tl  wmp  *s 
+t w  p  ws n  *s  Gl 	r k  Nln r  *s t   *n  *st k !7k l  gn  *s  Gy   Gf  *y b fkl  Cnrstw  Gx  *y  l gn n  s  *t  *y   l  Gs  Gt   ]ns  t Pw   l  *m 6n   l  *s  *t   ls  Gy   *n  *s ht  wx  Gl  *n  *t k  Gl  Gt  sl un  r  *s  Gt  bk  Rln  *s wl   *n  s  *t  G@  Gs bfhklmnprstwxy   G@  Gkl  *n /r  *s  *t   Gk  *s  Gt  *y klns 5wt y   l  wx  Cm  Gn  s  Gt  y  ?r  *s  t st   Gm  *s 5Bt  h	   Gkl  gmn  Gpr  Gs  *t  g@  gb   *l  *n  *r  *s  *t  Gk  *nt  Xb
+ fkmn r &s t ix  Gy  Nl Cr  *t   Gnr  Gs  Gt  n  *y n  *s  *t   *s It   ]k  gm  *n  *s  Gt	   ]@  Gkl ?7n  Gp  Gr  s  Gt  Gk s hk  l  *n  Grs  t  Nw  Gx  Gy  ]l  Gm  Gs  l  *n  *s  *t  m  *s  Gt  Gn or  Ns
+  8@  *fk  Gl Im  n  ]s  t 8y   ]l  Gs nx   f -Ykl  wm 1np  Gr  *stw  Gy  Cm  *n  *s  *t  *yr  Gn  Gt r  *s  Gt   ]p  *s  Gn !t  bm  Gn  wr  *s  Gt  p  *s   G@ k l  Gn  Gs t  x   Gf mn  *s  gt  :l  *s b >@k  Gl  Gn p  Nr  s  Gtw  Txl   Ct  Gk  *t	 kln .r  *s  Gt Pw 0Cx  	lp  *s  *tnt  Nw   Gf  *n  *st  Cmr  *s An t  f  *s  *t   Gbfhklmnpr  s -tw  *y l  *r  wf fk  Gt  Gk m   Nh  n  *s  *t  *y k  Gn  gps =xt   Gl  Gn  Gs  Gt w   *n rs 5t   Nk  &m  *n  s  *t  Gy   *@  Nl  *s  *t   b  wkl gmnprs  Gt  w "x  k  ]n r  *s  *y   *k  *m s t   G@  Glr  ]s b ?#t   *k  Gl  Gmn  *s  Gt   *ks  m n Ct t @bfhklmnprstwxy bf &hklm  Gnrstw /rt   Gn  *tl  6n  *s  *y  m n 2s  Gt  *y  Gs  Gt   b  gl  Gn  *r  s  *t   *kn  s t  *y   *l  Gs   nt   Gn  *x   *p  *s t  *@  Gt
    Nb sfklnr  *st  ]x  l  *s  m ns  *t Pw  *y   l  gn  Gt  6k  *s
- b sfkl n  rs  Gt  *y l  Gt  6l  *s  ]t  wx   *s Tt  wx   l 6n  *s  t  !n  *s @ **f 6klnr st fx  *y k  l  *sn r n  ?s  Gt  *y  *k  Gs  s t  [b  n  *st 2x   l  gn ,s	   G@  l  Gm 75n  Gr  *s  *t 7ry   *l  *n  Gr  @ bf  Gkl Cmnrstxy  Tb  Gl n  *s  "f 6n s t  *y   *n  Gst  wb .t  wx   Nh  *l  n  *st  wx  Gy  f   b  fhk  l !Dm n  st  wx  y  Gl :n l   Gf l  Gn r  *s  *t  Gy  Tbf  Gk ~l Cm  Gnr  Gs &)t 2x  *y  l  gn  *s  Gl  Gn s  *t  Gyn s l  *s  vs  *y   *m  *s t  *x @bfhklmnprstwxy   l  *m 6n  s  Gt y kl n  Nrst  *y   *ns  ;t  n Bt  *y  2t  4k  m  *s  Gt	   f 6k l nr :s  *t  *y n  *s  *t   *s  tm  *n ;ot  n  *s   Gklmn sprstwx  *y   *k  Gm  nr  *s  ]t  wx   *k  s   Gn  *s 
-t  b  l ?r  Gs   Gmn  *s  *t  *y   l s At  b  mn rst  *y   Gk  Gn  Gs  't   Gf  l  Gm  Gn  t   Gln  ]t  wx  s  gf  *s   Gp  k  *n 2s  *t  *y @bf +k (ln 9p  Grs ,t |x  *y  /yr  *t  ,l  *n  *s  *tyn s  t $>l   Gk  l  Gs t  wx   l 6n  st  *y  ir @  Nhkl  Gm  Gnst ;x  Gyrp Ak  s  Gy   *@  Gn  Gs  *t  Gy   *n  *s  Gt  *y   l n  s  *t  Gy	   *fl  n  ]r +Fs  *t  x  *y  Gk  *s  *y
+ b sfkl n  rs  Gt  *y l  Gt  6l  *s  ]t  wx   *s Tt  wx   l 6n  *s  t  !n  *s @ *f 6klnr st Wx  *y k  l  *sn r n  ?s  Gt  *y  *k  Gs  s t  Rb  n  *st 2x   l  gn ,s	   G@  l  Gm 7(n  Gr  *s  *t 7ey   *l  *n  Gr  @ bf  Gkl Cmnrstxy  Tb  Gl n  *s  "f 6n s t  *y   *n  Gst  nb .t  wx   Nh  *l  n  *st  wx  Gy  f   b  fhk  l !7m n  st  wx  y  Gl :n vl   Gf l  Gn r  *s  *t  Gy  Tbf  Gk ul Cm  Gnr  Gs &t )x  *y  l  gn  *s  Gl  Gn s  *t  Gyn s l  *s  vs  *y   *m  *s t  *x @bfhklmnprstwxy   l  *m 6n  s  Gt y kl n  Nrst  *y   *ns  ;t  n 9t  *y  2t  4k  m  *s  Gt	   f 6k l nr 9s  *t  *y n  *s  *t   *s  tm  *n ;at  n  *s   Gklmn sprstwx  *y   *k  Gm  nr  *s  ]t  wx   *k  s   Gn  *s 
+t  b  l ?{r  Gs   Gmn  *s  *t  *y   l s At  b  mn rst  *y   Gk  Gn  Gs  't   Gf  l  Gm  Gn  t   Gln  ]t  wx  s  gf  *s   Gp  k  *n 2s  *t  *y @bf +k (ln 9p  Grs ,t sx  *y  /lr  *t  ,l  *n  *s  *tyn s  t $1l   Gk  l  Gs t  wx   l 6n  st  *y  ir @  Nhkl  Gm  Gnst ;x  Gyrp Ak  s  Gy   *@  Gn  Gs  *t  Gy   *n  *s  Gt  *y   l n  s  *t  Gy	   *fl  n  ]r +9s  *t  x  *y  Gk  *s  *y
    bf 
-
-k  l n r  s  *t  Gy il
- k l mn  Gpst ;x  y  wb   l  Gs ot  Gx k qn  *s  Gt 1p   l n  *s  ]t  wx f  Nhk  l 2m n  gp st x  Gy  bk  ]s  *t  y   l  wx   *l  Gp  *s	   Gf )n  gp Pr s  ]t  wx  Gy   Nbfkl |mnprstwx  Gy :gn &t  Gx   wl  *n  *s  Gt   Gf  *k ns  ]t  Gy   l 6n  Gt   yl n p  Gst   wr   *@  wl  *s	   b sf  gl  n  *s  ]t  wx  Gy   Gm  *n  Gp  *s  Ct   ?p  *s  Gy   Gk  Gm  Gr  *s  Gt   Gn 2s	  >Nb  *f 
-
-l /Zn  pr  *s  Gt  n  s  *t  *y	 bkl np  s  t  *y  Gk ?l  Gb  Gn  Gt   s  Gt  *y   n  *s  Gt bfh -fk l  Gm  Gnpst  w  Nx ly   ?n  *s w  ?l  *s gxl   *f  *s  Gp  Ns p  Nw  ]k  r bfhkl smn srstw ox  yl   n  *s ktt  *l  *n  Nn  Gs  l  Nn  Gp  *s  ]t  wx
-   Nh  *k  l qnrst  wx  Gys  t  An  *s  *t  wx   l  Gm n  *s t  wx  .ih  *n  *s  *t  Gy   ln #5st   l  gn  *s  t   Gn  *s  *t  wx    l  Gn  st  Gyf t  k  Gt  b !f  *n  *s  *t  Gk  Gr  z@bf shklmnprst w xybk  *r  Gt st  Nt   Nl  Gr  *s  Gt	  sb Tl nrs  ]tx  *y f  ?n   *s tn l  *n  r  *s  *t  Hs 	t  *y fk  n 	ws t  *y @  *n   k  s  Gy   kn s l  Gn  *s k  *y Tk  s  Gy  ls 7t x   Gn Pr  *s  *t  ?l 9r  l  Gn  r s  *t  Gy	  5b f  l np  sty  *n  Ns   Gn r  f  *n  *s w   bh *klmn  Gprs  *txylt  *n  *s   Gn  Gr  *s  t  *y n  *stl  Hs  *y	  sb  Nh  Gk  Gl  *n  wp  Gs  Gt   *n  s  *t  Gy mst  y   k  *l  *s   Gm  *n  *s  Gt  k   l n  *s   Gp  *s l  *n  *s l  *s  wn n  r  s  Gt 2x   Gs  *y @bfhklmnprstwxy n  s  Gt  *y   Ck  Gs	  k )lm  *nr  ]st  Gx  <b  Gk  Nn  !n  *s  *t   G@lm  Gnr  *s  Ct   *n 2s  t  Gy   *r   *l  Nn  *s  Gfl  *mn  Gs  Gt  n  *s  Gtt   l  gn  *s At  @  wh  klmnrstx  *y   l  *n >s t  *yn  ?x   *st   *n r  *s  *t  wx l  *n st gw  Gk  *y   l  Gn  r  s  *t  Gkn  Gs t   *n  *st   Gl  *n  *s f l 6n  ]r  Gs  t   *s  *t y   ln 2s l  *n  Gs St  wx  As  *y  gfk *mn  s .t  *y   *n st   Tr   ]s  Gt k Fynps  *t w #Yn  *t   gn  s  *x  *y  =n  Gt
- hk l Im  nstx  Gy  ?n  Gt	  abflns  t  Gx  Gy  gb  Gn  Gt   Gn  *s  y s  6n  *s  wt   *s t   k  Gm  Gns At  Cy   Ck
-  !kl hn  Tprs  *t  Nw ix   l n "s  *y  n   *l  wm  *n 6p   wm  *n  ]s  Gt w  >l  *n  pr  s  Gt  Gw  ]f  *s  Gy  n  *s  Gy
- bfkl 7fmnst  *y   *k ll  *s  r   l n  s  Gt  *y   k  *n  s  *t  *y  l  Gs   l  *m 6n  *t
- bl  Gmnr  s t  wx -y  Nl  Ct  Cm  n  *s  *t  *y   Gs gt  *s t  wx  Gy   ?b 6_fh 
-
-klmnr s  *t w  Gy  l n 2s  *t   Gs t   Gn  Gp  *s  *t   l An  qs t k  *n  Gp !^s  *t  Gx   s  wt   Gkl  wm on  *st   k  *n  *s  *t  6n  *s	  f  l  wm n  Gr  st  Nw   ]n  *s Pw   Nb Cl Amn  *s t k  Gl  Gs 0
-t  @bf  Ghkl !mnp  ]rstwxy Bk  l  Nn  Ns l  *m  Gnr  *st  6n  Gt  *y  *ks  n  *s   *n  Gs   kl  *n  Gr  *s   G@  *s  t  wx  *y	   ?bf  Gk  l  Gn F,st  *y  gr  *t   *n  *s t  wx  Gy   Gs ;t  wx  Nl  *s  Gt  f  Gm t bfk ln  Gp  ]rst  *y  Gk  Gl  Gn  l 6n  *s t  ?w  Gf  gl   *m  Gn  Gs  *t  Ht   l 6n 2s   *n r  *s  wb  *l  Gn 2s   G@    G@bf  hklmnprst 
-
-wx 7ryk 5m  Gk  ]l r  kln  *s  *t y  6n  *s  Tt  *y  Gs  wx n ,pr  Cs  *t  Akl 2s  *yf  Ak  *n  *s  *t  Gy k  lm  ns ty   *str Ak (nn 	s   Gm  *n  *s 	t  wx   gs  Tt kl n  *str  *skr f 4t r  *s Ak  Gy   G@ fk  l  n  Gstr of  l  Gn  *s  *t   G@l Cr  Gt  Gty  gm   Gkl  Gnst  wx   k #5s  *y   Gm  *n  ?p  *s 
-
-t  Af  *n  *s  *t  Gy   fkl  Gmnp rst >wy r   *s  Gt  *y s   *s t ?t  	m   Gf  *k  Gl  Gp  *s 1tn@ s 
-t f  l n  yr 2s  Gty 	r p  *s s  t   lm n 4s Tks 5t   *@  ?n  st  *y l n  s  *t gk  *y b hklmnp r  st w  Gx  *y  Gk  Gl  Gk  Gl  Gt   *k  *s  Gt  *y  *l 
-
-n  [b  l  *n  Gs  Gt  Nl  Nn   ]l n  *s l  Gnstx k  Gm  *s  Gt  gyn @t  *s  Tt  Gy k s  *t  wx  l  *n  *s  *t  sfp  *sln k@kl 6Ixr  p +dnr  f k @bfhklmnprstwxy	   Nk Cl  mnrst  Gw  ,s  t Ax   Gb  *k  *s  *y   *n  *s  t  n  *s 2t   Gbfhklmnrst  Gxy r  *s   Tn As  wk  b  Gk  Gn  Gp  *s  Cm  Gn Bs  *t  Gn 
-s   ]b  ]l  Gn Pr  *s  ]t  wx   *k  *n &)s =Mt  Gx  Gy  6k  Gn  *s t  ab {f Bl  n  *s  ]tx  n  r  *s  6h  s  g@kl 70mn @rst  *xy   *n  Lr  *s  *t   *k  *n  *s  t  y   Gk ml  Gm  *ns  Gt  Nw   ?n  *s   Gb  Gk  *st   l  wm n  *s  t   l n Is  *t  *y  h  ?s t  Nw   ?l  *mn  Gr  *s  Gt Pwh ls Yt  n  wl t   G@b  *f  Nhklmnprstwx y   Gk  *l  *s  Gt   *k  Gn JCr  *s t   G@ @b ,n  Gst  *y   *sy p wk   n  *p  *s k  *n Is  t Py   *m  *s  *y   Gk  *n  *s  *t   gf n  *s  *t  Gy fk  Gl  Nm  *n p  *st Pwxl  Nr n  r   Gnrs  Gm  *n  *t  ml  Nr	 klm n  ]r  *s  *t gy   l  r  *s  t  *y   gb t  Gk  Gm  Gx  *y   l 6n  Gp  Ts  Gt @bf shklmnprstw 2xy  f k  l 6n  Tp  s  *y  *k l  n 
-
-r  Gt bhklmnp  Grstw  wx ]y Iklr   *s  t  G@  Gt   l  *st 2t  *y  wr  s  *t   Gf (n  *t  *nr  ?s  w@   *st  x h n  Gsy   *s (w  if ns t  *f  Gt   *km  Gnpr  *s  b  *s l  G@  *k   *ft   *s t	  gb l *mnpr  s  Gt  ,s  ?t t #f  Gm  Ns   Gk  *n  *s  *t  *y h  ]k  Gm  Gn zs ot 0l   Gk  Gns t  sf  Gm  *n  *s t  wx  f l  Nm  Gn  *s  Gt   G@  *n 2s t  Gy
-   b f  wmn Cp  *st sw  Cy  -yk  *st  wx   *f  *n (r  *s  *t  Ak  Gl  Gm  n Pr  *s b  Gf  Nk  Gl mn  Gprs  Gt  ]y  *k  *l Cr   *k  l  *s  *n  Gp  *s  *t  Gy  k  *s w  l  Gn  Gr  s  *t  ?y	  ]b  ?f <h  Gk  Gns  Gt  Nw   wt @bfhklmnprstwx  Gym   *k  *l  *y   ]kl  ?nr  s t  n  s t  *y   *s  ?w  bl nr  *s  *t   Gk 6n  *s  *y   *st   *st   *k s n  Gt  Dl -mnr  *s  *t  *y s t   l  Gn  *s  *t  wx  Gf  *n k qn st  Cxy   k  *s  Gy   Gk n  *s  *t  Gy   Gn  *s  Ttf  Ck  *t  Ak ,s  *y   Nbk  l  Gm nst  Gw x &)y  	l  Nn  *s   Tb  l  Gm n  *s t  wx   Gk 'r  *s t  Gy   @b  *kl  *n Pr st  x  *y Ik Jjy   Gny   ?   *s	   Gbh  *k  Gl  Gm  Gns "!t 1k t   l 6n t
- fkl m  Gn  wp  *styr  k  *s  *t  k  wl 6n os   *f r  *s   l  Gn ,<r  Gs 1t  ]x k
-  qf kl  Gm  Gn (p  r -vs t 7(k  *y  Gkt  b  *s   *n p  *s  ?t bfklmnprst swx oy l  Gm  r  *s  Gy   Nn  *s  Gw   *l r  *s   b If  Gk <lm -n  Gp Drs 
-
-ty  <b  Gn   *h  *n  *t p  *s  n  k  Gl  Gn  *s   ]n  *s   *s t  ]k  Gp
-  Bb f  Gk  *nr  *s  Gt  Gx  y  l  Gm  *s  *y f sk l  Gm n  *st  *@  ?w  l  s  Gy b 5f hklmn Eprstw  Ax *y  ]k  Gl 
-
-r gs
-   @  ]fl  Gn  ]pr  *s  Gt x isft   *n zs  *t  b  n  *s  *t  Gy  G@  ?s  Ct  b  l  Gst 5n k  Gl n  Gst   Cs   G@ f  Gn  *s  Nw  sfm  Gnp  *st   l n  s  Gk  wr   n  *s  h  l (m 6n  *s gf  Gk  N~b  wmn  *s  *t  b  *s   *@  wb Bfklnprstw ?xynr  Gt  *s  wx (t   ?h 2s  Gt  *y   Gns  *t  *y   *s 	tt 6m  f  Gn s  bk  *s  Gtx  ]x t  @k  l  wm  Gn  rt  n  *s  Gs  gt  Gl  ?r   k  *s  @bfhklmnp  Grstwx ;y Bl r  Gt  *y  Ak  *s 5t y   n  Gt l  Gn  *r  *s  Gt  *s  gty  
-
-f  7(k  Gn Ip  *st   *k  *n  r  *s  *t   ]f  *s  )$b  ?f  ]k  Gst Jjy   Gn As  *n  gx	  b Dbk l smn  *st  Gy  b  *s t   k r	  b f k  l 
-
-n  *st  ?w  r  *s  Gy   *@  *n  *s t   k  *l  Gm  *s  Gy   G@bfhklmnpr  stw  ]x  Gy   Gk ^lnr  *s  Gtt   l  wm  *n  r  *s  *t   Ck  *s t l   *s  Gx  Gy   Nl n  ]ps  Gt  Cb   wfl n  Cp Ss  Gt  *y   *@ on  *s  *y  b  *f  *k  n  *s  Gt  *y  G@ gf &n  Gt  b  *n  Gs  t ln  *pr  Gst  Gw   Nn  *s  Ct  Gy   Gk  Gl   n  *s +Ft  Tbl   qs  t  s -ft  Gy   Gf  ghkl  mn  pr s ;txy   r  *s  *t   k  l  *n  r  *s t  *y   *n s Atk 2ns t  Gy  
-lr N7f  2s  tm  Gn k Js l  *s   *n  sf  Gk  wm  gr  `l  *s bfhklmnprstwxy k Ll |nr  t &ek  Gk I]l  Gn  ?st   *n  *s  *t  x *nt   *n r  *s 2t	   Gfh  Ckl Fn  Gr  *s t  Gk  ]ptr   *l  s	  b  Gkmn sp 2s  Gt  *y   Gn  Gp  *s   *k  *n  *s  Gt  *l  Gn ps  Gtt  6r  *s ix   b  l Knst  Gx   Gm  *s t   gm gr  Ts  Gt   Nl  Gnr Is  Gt  *f  ?s k  Gm 3nst  Gy   m n k  Gnst  Gx y os  t r  *sk t k  *s gy s
-  fkl  wm n pst gx   Gf 6n r  *sp  *y sx p 	Tr   Gk  Gl  nr  *s  Gk (n	   *f  Gk  l 6n  Gp  r  *s  Gx	   *f  k  Gl gmn  ]r  *s  Gt  ]k  Gt   *l  Gp 	Tr  *s  Gt   *n  *s t   G@  *f  Gk  Gl  wm  Gn  Gr  *s t  *x y  b Eh 
-
-k l  Gmn -fp r Bs  ]t  Gw  Gx   *n  Cs  *t
- bfkm  np rstr t .n hnr   k  s  Nmsk  Tp n  *s  bkl  *n 	r  *s t r  f  Zk  *s @bfklmnprstx %l  Gm s ftyr  tl   k  *s tlny s t lsk  *lt m  Gbl 	tmrs tyks 
-
-m 
-
-m  st  Tk  *s   *k  *m  *s  *t k  Nk  Gt @  *k  gstr  p  k Gsl  Gn  Gxk mnst ,f f  *s l@  Tt  *x   fln 6pl r  *kstf  6n  t  k mnr 5Os  wxf  *s  *t  ynt 
-
-r  n  Gptr ks   l  *s +dt s   gm   Gl  *nr  *s @  Nbfklm <npstx Tm S r bl  Gn   *k  Tr  *s  wb .n rs  Gty l  ws   *s  *t gxk y   k  l  *n  st  Gy r Ak sktx |n  %r  *s n )$l n f  Gn (5t GBl  Gr   *n  *s  *tynm klm  Gnr  *k  Gt s @bfhklmnprstwxy
- klm nrst  Gwy   l  wn  *s  k  Gns   s  t   *k  *l  Nn  *s   Gn  *s  Gt  Cy  b  wm s   Gk  *lr  *s  Gl  ]s   wl  *s    Gb fhkl  Gmn  gprstw {xy p  Nly Lt  l  wm  *n  Gs  *t kn  Grst  wx   r :s  :@s At  6n /t  k  *n  *r  *s  *ty k
- fk  l  *n p  qst  wx sy  gr  Il   Gl  Am  *n 1r  *s  *t w
-   Gk  l Gmn  Gr  Gs  Gt  Gx  Gy   *s  t   l  Gm  Gn  *s Ot   Gl  Gn rs  *t gw   *m  *n  *s  Gt ?b  sh  Gn  *s 5Ox   G@b 6hkl 70mn  Nprst  ]w xy  Gk  *l   Gkl  Gn  Gp s  Gt  gft  *xs  gk  *x   Nk  lnr  s t  Gy   l  *n r  Gs At  *n  *s  *t *y
-   b -ff -k lmn  st ixn t   Gs  ]t   *n  r  *s  Gx
-   b  Gk Il @in  Gp  *s  Gt gx  Gy kn 2s tr  ?p   Gn  *s  t
-  sb  l  Gm (n  Gr 2s t gx  Gy   Gns k s  l  *s b  Gfkl  Cmn  ]prs ;twxyrt bf   n  *s  *t x   Gf  Gh  *s  Gt   Gl  Gn  *s  Gt ks -t gb  Gn  b  Gn n  *s  *tx  s At x  2f  Gn  *s  r  *s  Nf  Gn t  Gb  Gm   G@bfhklmnprstwxy  k >l  Gn  Gr  s It  y @ Il  n  *s  Ct  Trw  Tl  *t   Gl m  *p  *s 6t   Nk  wl PRn  Gr  *s  Gt b  Gkl sm /Znr  st !x By  6k  *l  *s  t  Gm  *y  *s  t  Gy   *n  r  *s  *t	   Gb  Gl  *mn p  ]r  *s  Gt   *st   l  s @  h  Gk  l  Cm  Gn  *pst x )y b   b  Gl n  *s  Gy   b  f k  l  *n  *s  t   *s 4t
-  "b 0f 6k  Gln ,s  Gt  Gxy   *s  Gt sw p  *s Gk	 kln  *r  *st Pwy  *mr  *s   *s Pw f  *y  sf  *n  Gs  Gt   n  Gp G,r  *s  ]t  Gyk  Gl  Gs   *f Tlnr Is tx   Gs t  Gs  Gy   l  Gn El  Gr It   Gm  Gn  Gp  *s t  *y lm  *n  *s t   Tn  *st h @bfhklmnprstwxy  b  Gns  *t 6x b )$l gm 70p mr  &f 6hkl nr Ist  Gx  y   gl  Gs   *k  ln rs t  *y   *s +Ct   Gm  *s  Gt gx   G@  Gk  Gm  *n  *s -t "Rx   Gn :r  s hkl  *mnrs t  Nxy 1Bn   Gl  Gs  wx   Gfn  *s  Gt  Gw  *y (k  Gs  Gt   *km  Gns  ]t   *s :t   Gm  *n  *s t  wx   Nn  ?s  *t  Gy   wk  *st  n  n  ]l  Gn  Gr Ht   G@f klmn  Cprstwx /My  Gl  *n b ,st  wx  *yl   gn  yt   *f An  *s t  *y  gb  Gkn  Gp  *s  Gxn  x   *kst  Gy  sp   *k  *r  *s f  Gm s  Gy   *k  s  Gy   *f  gk  Gn 7fp  *s  t  Gy  sbf  *k  l  *n  *s t   l #5s  t   Gk  *s  *x   l n  Gp   Gn 2s t  *y   G@b Ufk  lnprstx y   b  Gk  l  Gn  ]r  *s t  Gn  ]st  *k r  k  l  *ns t  Cx  Gy   *n  *s  Gt  Gy   *n  ]s  t  *y   Gn N%s  *t   l n  s  *t  *y  Ak l  *nr !s  *t  Gy   Gk  *s  wx   Gl  Gn bf hklm  Gn  Gprst  Nwx  Gy ll  Tr   Nl  *s   l  nr Is  *t  y  *n As  *t  *y  gf  *k 6ns  *y   Gm  *s  Gt  Gy ^s :t   Gk  yt gw  *y   f  wm  n  *s  Gt  wx  Gy	   ]k +l m  Gn Wrs  *t  *w  t  gf  l (n  *p  *s  *t  Gy
- bk  *l  Gn Arst  *w  Gy  l  ]t l  *s  b  *n  *s  Gt m  Gn G,r 
-
-n  -bfk  Glmn  Gpst  wx  y k  *s  *t y   wx  l  *s   Nn $t  b 6h  l  Gn  Gst   Gn  s   l  Gn  *s =t  wx   Gn  Gr  *s  *t  Gy  	T@bf hklmnprstw  *x ;y  *kl  Gt 	w   Cw   bk  Gl  gr s  t y Gt  wx lnr  *s   *@  Ns  t  *ys  *t s   *n  ?p  *s k  Gl "s  *y  k  Ns  Gy   ?@  k  ]n  *s  Gt  gf  *n  s  Gt  >k  *n  *p  *s  Gt   Gm  *n  *s  *t  Gy   Gm 2s 5t   mnrs  *t  Gy  5b  *n  *s  *tf  *l  Gm  Gn  *t b   ?k  y@  Ck  Gr t bfhkl Amnprstwx  Gy  Gkl Er  Ns  |t   b  Nl -fn ct  Cx  Gl  Gp  ?t  k  *n  *s  *t   gk 
-ns  Gt  *y   l  gn  *t  wx   l  Gn  Nrs  Gt  Gy  l  gn  *s  *t  l  l  n  Gs  Gt  *y km n  s  Ctw  *y  =p   G@  s  @  Af  r  *s  Gt  Gl  Gt  wy l  gn  *s it  *y	   *@  Gk  Gm +n Pr  s  Gt y   ln r  s  ]t  wx  k  l  s   wb ?fk l  Gmn 6p srst Sw  *x  wk  Gl  Gs   l  *st   wb  *s   Gnr  *s EVt l A&n  Gt  	Tbmsn es  st   @bfhklmnprst  wx  y   Gkl  Gmnrst   n  *s  t  Cy   b  *n  *st x r  *s  Gk  l  *y  5k  Gn  *s  *t  2mt  wx b  *f  *s  *t ,l  2f  n  Gr  *s  *t l  st  *yk  *t  k  *n  *s  *t  Gy b An  *s  *tl  6n 	t  *y m	   Gk  ln  Gpr  Gs  Gt  *y   l  *st Ak  s =k  *s  Gy   Gh k  Gln F<p  *r  s 7t  wx  *y  m  Gs   Nb  Glr  *s -t  wx   fkl  Gm  Gnp  rstw  Cx  Gy  b  Nn  *s t x   *n  *s t  *yl )s  smnr  *s t  <s Tb  t  wx
-  Tb Af Cmnrs t  wx  Gy   Gk  l  *s  Gtn  *s  *t  Gy   *s x   *m  *n  *s  *t =Ml b fkl 
-mnrstx  *yl s gt   Np   n Cr  *st  wx   l n  s  *t	   bkmnst  wx  ys &t  wx   l n  s tnt   *nr  *s  *t  wx  gn  *s  t  *y   ln  Gs  t   l  Gt  Bf 2nr t  l  *s  *y   b  *f  l n  s  *t  k  lnst  y  b  *n  *s  Gt  Gw ix   b  *s t  wx   b  Gm  *n  *s  *t  bhm  *nst xns  ]t  wx b f ;s  b Af  Gn  *s At  !f  *s   Gf  Gn  Gr  *st x   l  Gn  *s t	  blm nr  *st x tnt  -l  *n  *s  *t  Gl  qs  Gt  2f  *s n  *s   *s t   Gf  *k  wm |n r  *st w  *x  Gy l  Gr  *s ix  gn  ?s  *y   Glmnr  *st  Gy =n   *s  Nw  *s t  wx  Gy  sb  *l  Gn  *s   b k lm  Gnr st w  wx  Gy  n  k  Gp  *s  wx  Gy f  *n  *s  *t  Gy   l  t   Nfl n  *s ht   gn vs  *y   C@bfhklmnprstwxy   Gklr  Gs t  wx gy s  *y   Gm  *n  *s t  wx  ib  Gk  *s  Gt b -fklmnrstxy  l  *n  *s  *t   l n rs tx   l  *n  *s tn   l  *n  r  s  *t	   ]fk ns t  Gw  wx  *y  r  *st  wx   *f  *l An  *s  *t  f qn  *s  *t  Tb  l qn Hst x   l  gn  r  *s  Gy   b Cm nstx  n  *s  *t  sk  *n  *s Atn l  *s  Gs  t  *y  b  Gln  Gr 2st   ]st   *n  *s  *t x  n  Tb k  l Rn  s txn  
-%l  *s  bnr  Gs  *t  wx   l  gn  Gs  t x  s t  wx n  *s  l  *n ,s   bn  *s  *t  osb  Gm 
-t bfklmnprst  Gwx  y  
-
-n s   l n  Gr  *s t   l  st  wx   *f  l  Gn r  *s  *t   Gfmn s  ]t  wx  *y  Nn r   *k  *s  Gt  *b /ut k ql  *n  Gs  t   *st  wx f  *m  Gr  *s  *t   l  *s 6t  	Tl s	   b  Gfknst x  Gy   *s  ]tx n   *n s  t  x   l  wm  Gn @-p  *s  *t w l n  *s  *t  Gy t  wx  *y	  b  *f  *h  Gk  Gn  *st  wx   *f  *n )r  *s t	   bf  k  *mn  ]r  *s !t   l  *s  t   Gs t  wxn   gl  s  0k np Vs t w  Gy gy   b  *k  Gl  Gn  Gr  *st   Gk  Glr k  *y	  !Db  hk  l n  *r 	wst  %l   *n  r  *s  *t   n  Gr  *s  Gt  wx  y
-  hkl  Cns Jt Pwx  Gy   l  gn  *s  Gx   gnps  t ix  *y  gp b  Gm  *n  *s  Gt  wxl   *s  t  *y   l 6n  t  n  *s @bfklmnprst wx  y  gs t  Gk rstn x  'b 
-
-ln  *stx   s  !f  r ,sn  Bs  lnr  *s Ctt  Cm  *n  Gs !t x p t  wx   b  Gf [mn -Wp  Gst wx  Gy   l  *n  *s  Gt   *f  ln  r  *s t  wx  	s  Gt  Gn  Gp	   G@ sb  np 0r  *st  wxt  wx  f   *f  l  *n  *s  *t	   b sfkn  Gpst ux n  *s  As  t   Gs t  ls  Gt   *st 7fr   lnr  *s  *t   l  yr  *s Ak t  wxkr  wst x 2s 6t   *n stx  Tr  *s  n   *f  ll  *s 6n As  Gy   l 6n  st  n  r  *s  *t b  *kl mn pr  ]st  Gx =l   Gk  wx   *n st  Cx   ln  *s  *t  sp  *s  bkn  *s 2t  wxt .x  bf  *n  *s  *t   l 6n s   *n  *s  t   l Dn 7txn  "l  *s n  *p   l r  *s bfhklmnprstwxylr gy  +n  *s  t  *y gk  Gn  Gy   b k  ]l  Gs  ]t y  n  *s Yt l  Gn rst  wx  Gy k  ]m  *s  t  *y  gw   l 6nt  %l  *s  abf n 6r  *s  *t  Gy   l  t bf  Nlmn 'ps .tw  *y &)r  l Pr  *s QXn   G@ f  Gs   l  *m ht  Gk  wm   lnps   b  Gm  n As t  wxlrtt  wx  !f  *n  *s  *t nr 6n  *s  *y  b 2s   Gr As  Gy   b k  l smn  *p Arst x  .s t	   b  yk  l  Gm  Gn  *s  Gt  wx   l Cm  *n  *s 2t  Gy l nr  ]s  Gtpt ss k bfklnprst  wxy  Nn  *st  wx  Af  *n Zr  *s  *t  kln s ctx y   *sx =n   *n 5Os  *t  wx 
-%l  Cmst  wx  4m   b  *f  l  *n  *s  *t  -b  *n  *s  Gt f  rstlx n kn  s kl t 	k (n :s  wx  l 6n  *s  t  gw  *y pt n t  wx  Af An  *s  *t  *y k  l ]m 6ns   *n  *st  wx   *n Sr  *s  *t t 	?n   wm  *n  sw  wm  *t	  fkn  p  st  wxyn  *n  t   k  Gs ;t /x   b  *k  n  Tr  *s  *tk l  Af  l nr  2st  Gy )r  f  Gr  *sn  ]t Cl  *tn  ]l  Gn  s  *t  f  *n  Gps  Tt   Gl Qn  *r  *s  Gt	   b  gl Cmn  Gp  Gs  Gt  Gx  	Tk  *s k  Nm In hs  Gt  Gkml ]t   w@bf  Nhkln prstxyl  Gt   gn  ?s  t  *y   l  *s  *t   Gk  Cs  mn !r  *st  wx  y  *s t   Gf k  *n  r  *s  *t	  Kh Fk  l  *n  Gst  ]x  *y  9Xr  *s	  f  Ckl Inst  wxy   gn  *s t  *y   ]n s  f  l  *n Hs  *t  
-l klm n 3st  Gy   Gl  Gm  Gn  *s   *n  gr  ]s  t  *y  G@  Gn  Af n  wr  *s t  Gy   ?@ Ebf  Gkln  ]r  ]s t  wx  Gy   *s .t  wx   Gn ,ws  ]t  wx  *y   *n Ks  *t  ]n 2s  Tb "k  *nr  s ct @bfhklmnprstwxy   Gl  *s  ?t
-  <zkl  Gm n sprs !t  *y   *k  gn  *s t  *y  *nt  wx  Af  *n  r  *s  *t  6 t   G@ klmn  *rst  ]x  y k (n  s  *t  *y   s  Gy   Gn  *s :t   l  *n =s  *t   l n  *s  Ct   Gk  l ns t x  Gy  &mp  *t w  p 	s  Gm  Nn  Ebf kl gmn  prst wx  Gy   gk  Gn  *s   Gm  Gn  s  *t  *y   Gk  Gs &)t   Gm  n 2s  Gy   l 6n sp  *s  *t   b !f l nr  s  *t   *ns  *t   Gt gxn  *s   Gk  l  *s   g kmn  rst hw  wx  Cy  n gb   l  Gn  Gs  *t   l 2mn 6p  *t  *n  Gs   f  Gn  *r  *s ty  f  *s   G@b  wflnp rstw  wx 
-
-y l  *n  *r  s  *t  *y  (n  s  *t  *y  k  n  ]s  Gt  *y  kl  Gs st   k  qs  t  *y  Tl n Is  Gt  *y   b  Gf  wm  ]n  *s  *t k  *nr  *s  *t  ~l   Gm  *s  *y  l  @bfhklmn prstw Ex Lcy  Gk  l n  r  gxl -fn  Gt   *s  Gt  Gy  Gn  Gs  h k ?l n  Gpr  s  Gt  Lx  *y Zs	   *k  l  n rs t  wx  *y  |y   ]l  ?n  *s  gt   *k  l  Gs  Gm  *s  Gy	   b sf  yk 7l  *s <Lt  Nw  Gy bf hklmnp  Grs t <wx  y Kr @  *l  *s   l Pr  *s r  Gt  ys k sw  *y  k n  s  Gy 
-l   @ n  s   Gf sk  l  *n  Gs  Gt  gl Cr  *s k  l &m  Gnt sw  gp  r  n  *s  Gyl  ?s  Gt >t  Nl  Gt  Gx	 f kl Hn Ist Ax  *y  Gn  Nr  /Zn  *s  *t  *y  ab Af  wk  l n  s  *t   *n Hs  *t  #t bfklmnpr stw  wx Iy   Gk  Gl  Cm  gnr  *s  Gy  *k  *n  t
-   bkl  Gm  Gn  Gr  *st y  Cs gx  gf 6n  ?s  Gt  *y l s   ]k nrs  ]t x  Gy  n  ]s mn   *n  *s  *t gx   ?k  Gm qn s  Gt  *y   l n  Gr  ?s   l  *n  Gs  ]t by	   b  lnr Is  *t  Gx  *y   l  gn  Gst  @in  *s  *t  *ft  Nkn  Gs  *t Txf  *s  t  Gy  4+r  *s  sbfkl sm nr Bs  *t  Cy l  Gr  *s  n  x   Gk  gn  s  *y gm gs   Gk 
-wl  Nn  *s  Gt  -bfklnrst =x  Gy  k l 6n  *s t y  #l  nr  Gs Itnt (f mpx xrl it  Lck n Ls t  *y   *f  k  l  *n &)s  Gt !Dx   Gk 
-l  ]n  *s  *t f ]ks  *tltt k k   yl  Gmn  *s  *t  	l  |b  Gn 2s  Gt 'w  Gy   *@  bl An  *s  *t   *s w
-   bl  Gmnp  st  ]x  *y n  *s  *y St   ls   Gm  *s  Gt  r  *s   Gn  *s  *t  *y b )fk  Clm 1np  Grs  t w  *x  b :l Gkm n  Gtn   *s tt kln hs   lr $f  Gmk k  Ns  Gy l  *sy  s  Tt  @kt l  *s  Gt  wy k  Gn  qs  Gt  *l  r   G@bfhklmnprstwxy   Gk D	l ]m  Gn  r  *s  Gy  k  l  Gn  s  *t  y  Gl )$t	 h  wk  l *mn  Gr  Gs  ]t  Ms   *n  Gs @t  Gy   Nb n  Gp  *s  2t  y kl  np  Gst  wy   l  n  k  *sl 't   k  l  *s  wx
-   G@  Gfk  l  Gm  *n  Gst  Gy n  *s   *k ,s	   Tf  Nh  l  gn  Gpr hs  Gy  Ak s  Gy	   Gl mnr  *s t  Gx  *y   l s   Gf  *s w  -ff Tl n Hs  *t  *y   Gk  l  gn  Tst )$wy   *k n p  r  *s  *tnx 	r   *@fklmn -prst  Gwx  Cy  -bk  l  Gns  *t yt  wx f  r  In l  s  ]t  wx 7t  wx  *y   *k gm n  Gr  s It  *y  b 6h  *n Sr s  ]t   l  Gns  Gt  Af  *s   ]k  Gln  Np  *st  wx  0m  *st 0rs Kt   gm  *n  Gs  Gt   Gm  *s t   *l &n  r  *s  *t  Gy  bn   l  r  *s   Gk  r  *s Py n  *ps  b  n  Gr  *s  *t l  Af  bb  wkn  *s   G@ k ex @bfhklmnprstwxy   Gb  *s   ]kl $r  *s  Gt  Gy   *k 	t  @  *f klnrs  *t  Gx y   Gk  *s  y   w@  Gl  *s   *n As  Gt  Gy  Ek  lm  gp  Gs It r   blm  Gn  Gprst x -fy   *f  ]m  *n  *s  *ty sm   *k  *l  *s   gb Tn   f  k  Gm  qs  ]x  y   *s Lt  r  *s   wbfk [mnp rsty  *l  Gx   Gf -n  Gr  s  *t  Gy  b  Gm  Gs  Gt  s t  6n  *s  *t   r  *s  Gy   Gn s 
-t   G@  *bk  Cl  Gmn  wr  s  t  x  yl   *n Fst   *r  *s  b f sk qlm  Gn op rst  Nwx  *y   G@  *t   Gk  l  wm  *n  *s  Gt  wx	   *f  Gk l  Gn p r  *s  *t   l  Gn  Gp  6klnr  s  Gt  *x  'm  *s  ]ttn 	s  Gt  Nn p  *s f  Gh  kl  Gmnpstx  ]y   *l  Gm n  75n  *st  *y  sr k l  Gm  *s  Gt  l  *slt k  *n  *s  Gt  *y   Gk  *s  ]t  wx   *l  *s At gx   Gl  *n 6p  *s  Gt  wx  k  Gr  *s   Tk  *s   ybkl  Cmn  p 	r st w x  ]y   Gl  Gn  *s  Fbk  *s  *y   *n  Gp  Gs  Gt   Gf  ?l  Gnr  *s  *t =f k  lm >n  *s  *t  gm  *s  Gn p   Gk Lcl  Gm  Gn  Gs  Gt l gm n  Gp  r Gs  Gt   wm >t  *y  l  *ns  t  b   Nb Lfklnrst +Cxy   *s st  Gw  ok  *n  r hs  Gt   G@k  *n  Gr  Gst 6y  Gk  gx   bl  *s  Gn  wy  An  *p  *s  *t  &)k  *l  *s  )|l  Gn  Gs  Gy n   G@  *s  *t bf h  Gklmnpr s  ]tw  Gy   Gk  *l m  *s   *n 6r  *s  Gt   Gn  *s  gt  *y  Tk  n  Grs  @t	   Gf  *k  Gl  Gn  r  Gs  Gt  w  	n  *s  Gt  An  *s  *t  Gk  Gn  Gt b  ]f 8klmnprs >tw  Gx   *n r  *s  *t  gx   Gl  Gn  *s  Gt  wy kn  *p  *s  wh Brs  Gx  Gm  p 	t   G@k  *s gt l  *tk 5k  s  Gy   *n  Grs  *t   Gm  *s  Gt  y fkms  ]t  wx Kl ]mys s Sk  k  wt   l 6n  r  *s  *ttn  p @bfhklmnprstwxy kl  Gm DGnrst  Ak Jr  *s  Gy k  *s  yt  *y  k  Gy  )n  Gp  *s  Gt  *y f 2m  *s  *t r   *l 2t   @f  Gklmnrst  *wxyr 6~m   *b  l 
-
-n r As t  *y  -fb  Gn  *s   Gm  Gns  r  *s
-  sfkl  Gmnrstx   n As t  wx  6n vs  t  *y   l  *st .n n  *s  Gy   l 6n As  t   l  Gn r  s  *tn  s  gf  Gk t   lmn 'r  *s  Gy  ]s  Gy   *l s  tf  Gn Es   Gnr  s :n @bf ihklmnprstwx y nr   Gs M5t @at l  *s gt  6n t  *y   gm  *s y  gf  Lr  *s  ]t h )kn  Gr s  ]t  *yt  r  *s 2t   Gk  Gs  Gt  wk  Gr   l  Gnst w  70t   *@ Pr  *s  Gl .r t   Nf  ]k  *n  *s 'Et  *x *y   Cf  Gk p  st   Gk l  Tr sy  jf Fk  l m n (r Hs  ]tw  wx  Gy  Gf  Gn  Gt  Gk  Ns  Gt  *Ol n  s  *t n  Gr  Gs 6t k bfhklmn prstwx  ]y  Gklr  *y   wk 6n  t  *y 2s  ]t  wx  k  ?l  Gn  *s  *t y  Ns It  9l  Gm  *s  *t   Nh  Gk Ins t  *y   Gm  *n  *st  wx   *k  Gr  *s   *@  Gk A&n  *st  wx   f  r	  @bk  *m  *n  Gp r  Gst l  Gs  *y  Kr  *s  %@  wl  Gm H`n  Gs [Rt  Gx fklmn  Cpr st  y  gxk  l  Gn  *s 1:r   *st  wx  *y   f  *n  Gr  *s  *t   C@ 1Bb  *s  b  Gs  wt n 2s  ]t  wx  Gy  !f k  *n  Gp ]r  *s  Gy   b  Gf  *k  lm  Gn +rs .t x iy  Gn 
-est  wx   l  *n  ]s  *t  'k  *n  *s  *t  wx  Gk 2m  Gn  *s  Gt   Gm n  *s
-   G@ S>b f Tknp s \Dty k  Gs  Gt  *n  Gw  Gp  Gt  wx   ?h Ekl  Gn  *s  t f   *@b fklnp 
-
-rst  Gy	   *@ Mk 	l  wmnrs :t  s At  *y   Gn  s  *t  Ny   wk  ]t  w   wl  Gn  Gs b  *s  ]t  *yrn  x  n  rst  wx  *y   l "n  *s t  b  *n  *s  *t  wx
- b <ln  Gp  Gr  s 
-t Bx  *y l   *n  r  Gs  *t   Gm  Gn  r  t	  'b  ?f ul  Gn  Gr  *s !t  wx @ <b  Gf &hklmn  Gprst  Nwx  y 2n @bfh  Gkl  Gm @inprstwxy   l n  s  gw  *y   *l  Tr  *s  Gt  Gl  ?s t  Gx  gn  Gt   G@  f  ?kns  *y   *s  Gt  x  t  ]_l  *s 7n As  *x  4f  *st  ?w n  Nr  *s t   *s gt  *Ol  *m 6nr ;st  n  Tn  *sn s It ft  An *r  *s  *t b  wy   Gm n  s  *y  n  Gw   Nrs  t   Gm  *s  *t  Gy   ns t  *y  b  *n  *s  *t gx
-  f  *h lm =n st  wx  Gy   l n  *s   k  *l  *n  *s  
-
-bfh Qklmnrs  *tw Qy   ]l  gm  *sl  Gm  Ct   Gb  ?k  gn  *s t  *y  ]k  *n  Gs   Gn  *st ix   yr   Nm  Gn  Gs  Gt /My  b kl  wm  *st  Gy  Gp  t   Gn  r  Gr  Gt   wk np  r  *s ,t  *k  Gn  Gt   Nbf  Gkl  wm  Gn  prst  ww  ?x  *y Er   *k  Nn  Gst  sf  *s  f s  Ct  wx   gfk  Gn  *st 0xy  *m  *s 6t  wx   ]k  *n 2tn  *k  *x   Gk  Gn  Gp  rs  gk  *s	   gkl  Gmn Ist  xy   *n  *s  *t  wy   ls Ot  wx  sf  Gm  *s   l n  Gs  *t ix   Nln  Gs k  *s l  Gst  gm  *s  gt   C@bf h 7klmnprst Aw gxy  G@  Gk  *l )n   Gl 2s   *f  *s  Gt  Gy   gn  *r  Ik  *ns  tx  Gy   b  *n  *s  Gt 2s  Gt   *n r  *s  *t  )|l  *s t  *w  wx  f l 6n 
-t	  fl b7nr  s t  gw  *y  2s  *y   gl  Gn s  *t  	b  *n  *s bfhklmnprst <wxy k kl r   Gk n  *r Is  Gl  Gn  Gt	  k sm  nrs  ]t  wx  Gy  *n 2s  *t   l 6n  *s  Gt  >n  s  t  *y  I@  Gl  Gn  Gs t   h  l  Gmn bs  t  Gy  s  Gt   Gnr  *s  *f  Gs
-   Gbl  Gm  Gn )|r st  wx  Gy  m ns  *t  *y   Gm  *s  Tt gx   l  gn  Gr  *s   wm  Gn 1Bp  *s  Ct w   Gl  Gm  Gn  r  *st n  *s  lr  Gn  *y   l  gn  Gp  *s  <b  wfl  *s ix  Gf  *k
-  ^bklmnr  s  Gt x  gl  ]s   *s  wy  Gn  ?s gx  h k Es  Gt   *n  *t  Gy	  f  Gkln  *pr Ist  *n  *y   Gf  l  Gn  Gs  *t  *n 2s  *ty  m  *s  hn  *s  *t   Nb  Gfklmn  Gprstw  Gx   gkp  Gr  Gs  t   Gp Hs  t  Gy f  Gn  *s   Gms ht   Ny  k l  Gstx  h  Gl  Gn  Gs  *x  Gy  b  Gn  *s  *t   Nb *k  Gns  *t  2s  *t   Gl  Gm 
-
-ns  Lt  l  Gn  *s  ll  *s @bfhklmnprstwxy bf  Nh gklmn 6prstwy  ]l  Gt  k Bl  Gn Bn s  Gt  *yft {t k  wx   gk  Gl  Gn  Gs  5f n  *s t   Gl n  *t  kl (m  Gn Hsk Tk s  Gy  *l it  Gx l  Gr   Gn  *s  ?t
-   wb Dbkl  Gn  gp r  s 
-t ?y   Gn s t  #bfklm n  *prs  Gt  Cyn m  n  *s   }k  *n s  *t  Gw  Gy   Gk  n  *s  *t   ]k  *s   Gm  *st f b  fk  Glmn  *pr  *sty h  n  *s   *st  )n  *s  *k  gt bf  Gk  Gnx   *s  t  sb  Gm  *s n  g
-@bfhklmnprstwx  Cy   G@  Gk l Zr  *s  Gt  Ny l  ]n  s bt   Nn  *s  Gt  Gl  Gm 6t   Cf l  *nr  *s  *t  ww   G@  Gk  *s  @  wh  Gk  wl X.mn .np  Crs  Gt )x  *y   wh  *k  *s  f  Gk  Gn  Gt   wh  Gk  wl  *s 7t
-  :bf  Gkl mn ;st )x  k s  *t y  !k  qs  t  *y m  *s  Gt 3Ls  t
- hk  *l  Nm  Gn  wrst  Gxytrtyn m   l hs  b  f  Gm  *n  *s  *t  wx   *s y   Nn s @bfhklmnpstwx  Gy   *s )y lr !^s t   kw 	r b kl  n  ?r s  Gx  ]m  Gtytrt y   *lmnrs  ]t  Np  m ,sf  Gm   *s  t  Gy  m   fk  gn  *s  Gt  *y Rt   Gk 
-pln  *p  *st k r  *s   *s t   *kls  Gt  Cxy  gs  Tt t 	?rr  Gtk D\s $>r   Nfkm ps t  Nnp  r  Gt   k  s  Gyk XCln  Tm pk   *f  *mn 	r  *s  Gty s  >t  pn  *s cf  Gtm  Gn  Gp  r Js   b  f gklm  ]n  *p dst bw ;y  	r  *s l  m &n  qs   Gn  *s  t  *y  Akr  *s  Gy   l s  Gt   G@ ab sk nl Hmn .np r Is  *t sw  Gx  *y l  *s    *s  Gt Sr im  Gt   Nf  l n  Gt @bf shklmnprstwxy  Gn  *p  *s  wx  k cl  Gn r  *s kl $mn s  Gt  y   Gt  wx  n 2st   Nm  *s k  *s )$x   *@l Amn &)rst  Nw x  *y   l  Gm  r  *s  wx   l !n  Gstn  *s  Gy M5t   Gp  *s  *t  Gy  n  s  *t   *s t  *y b  Gl  Gn p gr 2s tm  b   G@ f  Gk l 1*m  Gnrstx  Gy   n  *s  *t %x  Gy   Gk p  *s  wx  r  Gs l  Gn  *s   Gk  *s  Gy  wm <nr  Ns  Gt 0k  Tn )p  6k  *l  Gst  wx  Gy   *f  *n  *s  *t  Gy  Okn st   *s t   Gn  r  *s  *t  wx  @  bfklmnprst Swx  Gy  kl Amnrs t  *m  ?n  *t k  *sxn   l  *t 2s  *t t  *t  Gy lm  p  Grs  *t  wx  gmn  ?r  *st  *y r 96rp n  Gt t   *f Cm  *s  *t @_f 96nt  *yrl  s  *y  kln  *s t n  ?rs Ct   *k  l sm  *n s !tx ln  *@l  ?n  gpr t   bk  s  Gt  gx y  Nn  ]s ^3t  wxk D\sr Bm   lm  *n Vst  x  *y   *s t   l Cm n  *s  *t l 6n  *sty  *l  *y   *k r  Rl m  Gn  Trstnx 'n   wk )
-p  2n  *s sn   Gk  Gl  Gn  s  t  k  l  wm n  *s  Gt  Gy bk  lm  n  *s  Gk kt !Dt  ?@  *k   G@bfk |ln  gpr  st  y kl  *nr  Gs  *t ix m   Gn  *st y p  In  *t k  *s  Gt y   *nr  *s  *t .f  Gm  *s  Gy st   Gk  Gm   l  Gm r 2s  bl  *mn  qs  *ty   ]s  *y   *s ,t   gl  *s   k  gn  Gs @bfhklmnprstwxy  Tl 4s  Gk  Tl  Gm 6r  Gs
-  S@kl nrs  Gt  *w ytr  b  Gn  *s  *t   Gk 6n  s t  *y  ab  Gm  Gn  *s  Gt  n N%t   Gl  Gmn  Tr  *s  Ct   *st   ]l  *s b  wklmnrstx Sy l  *s   gn 	t   Gk  ln ,st  *y   *k  Gl  Gn  *s   *r  *s _w   Nn  p Bs  Gy   Gn  Gs  Gt   ]f  Gk l  ]m  *n  s  *t   Gk  *s -t  n  p  Nr y   Gn  Gp  Gt  =@ @kn  s ot  Gy  4l  *n  Gs  Gt
-  5@ 7kl  Gmn rs  ]t  wx   k 4s  t  *y  k  *st  /l  *n  *s  *t   *n  *s  Gt  wx  wy  fk mml  ?r  st sh l  *s   Gn  *s  gt l  Gr s  Gt  Gw  b  Gnst  wx  Gy   *n  *s t  wx   b )f  *n  r  *s  *t   Gf  *hl  *n Hs t  Gw   k  qs  *y  Kfk  l  mnpr  st G,w  Gxy   Gl g
-n  Gp pcr  *s  Gt  Gy   l  *s  Gt ql  wr /b  *s  wx   b k  Gnr  s  *kl  ]m qn !s  ]t  wx  Gy  s  *ylb  *k  Gl   g@bfklmn -prst w  Gy k  Gl En  *r  *s  wt l l  Gt  &)l 5m mns  *t p ^n	  Lb &)f  Gn 6ps t x  *y   l n  Gt   Gn  ]s  t
-  bk  lm n rs Dbt  Gy   l  r b   l 6n  *s t   b gf  Gk l  Gn  Gp #5s  *t  Nx  *y	   Gk  Gl  *m  Gn  r s t  wx   ?k  l  Gn 	r  *s  *t  gk El  Gt
-   ?f -Wh k  lnrs  Gt  Gy   b  Gk  *n  Gs  *t m  Gn  *s   *s t   Gm  Gn t   *n  *p  *s  *t   *@  b  *f  *kl m  Gns  Gt  *x  *y  i@k s  *y r   Nn  *t   @b Gf hklmnprstwxy   G@  Gln  *r  *s  gt   *st   l  yt bl m  Gn  *s  *t  Gx   l  *s  s  Gt   ns t  Cy   *n  *s =t  wx b  Tf  Gk  Nn  *s   Gk  *l  *s {t	   *bh Ak  *n  Gr ls  ]t  wx (p  Gk  Gl  Gr   n  *s  *t   yb  Gk l n  *s  Ct  wx
-   G@k l  *mnr  Gs  *t  Gy r  s (t   *l  Gn  *s  Gm Is   G@  *n  *t   Gn  *s Qy bkl  Am  Gn 6rs  G@  Gl  *r   Gn Cr  *s   wb  n  *s  wy   f  *s @bfklmnprstwxy  *f  ]t  9h kk  l  Gnr  *s  "n  *s l 6n  ]r Ist   Gn  *s  Gt  *y   Gn  Gr  *s  *t f klmn ]_prstyn  Gt  Gy   l Cm  *n  *s  *t	  bk  ln rs ?t  *y  k l  s  Gy   Gk  l  gn  *s  t f k  *t gy  wlnp  s  Gyk It gxr h fst  wx Ck   ]f p  *str  k  *n  *s  *t  "k  *n  *s  *t   *f  Gk  n  *s  ]t y   yk  *n  t	   bk  Gl n  r  *s t  wx Cm An n 5*s  Gy  @ sb  whk dl  Gmn  r st y n  *s Cm  *n  *s  !s  Gy   n  *s
+k  l n r  s  *t  Gy il
+ k l mn  Gpst ;x  y  wb   l  Gs ft  Gx k hn  *s  Gt 1p   l n  *s  ]t  wx f  Nhk  l 2m n  gp st x  Gy  bk  ]s  *t  y   l  wx   *l  Gp  *s	   Gf )n  gp Pr s  ]t  wx  Gy   Nbfkl smnprstwx  Gy :Yn &t  Gx   wl  *n  *s  Gt   Gf  *k ns  ]t  Gy   l 6n  Gt   yl n p  Gst   wr   *@  wl  *s	   b sf  gl  n  *s  ]t  wx  Gy   Gm  *n  Gp  *s  Ct   ?p  *s  Gy   Gk  Gm  Gr  *s  Gt   Gn 2s	  >@b  *f 
+l /Mn  pr  *s  Gt  n  s  *t  *y	 bkl np  s  t  *y  Gk ?l  Gb  Gn  Gt   s  Gt  *y   n  *s  Gt bfh -Yk vl  Gm  Gnpst  w  Nx ly   ?n  *s w  0l  *s gxl   *f  *s  Gp  Ns p  Nw  ]k  r bfhkl dmn srstw fx  yl   n  *s \tt  *l  *n  Nn  Gs  l  Nn  Gp  *s  ]t  wx
+   Nh  *k  l hnrst  wx  Gys  t  An  *s  *t  wx   l  Gm n  *s t  wx  .\h  *n  *s  *t  Gy   ln #(st   l  gn  *s  t   Gn  *s  *t  wx    l  Gn  st  Gyf t  k  Gt  b !f  *n  *s  *t  Gk  Gr  z@bf shklmnprst w xybk  *r  Gt st  Nt   Nl  Gr  *s  Gt	  sb Tl nrs  ]tx  *y f  ?n   *s tn l  *n  r  *s  *t  Hs 	t  *y fk  n 	xs t  *y @  *n   k  s  Gy   kn s l  Gn  *s k  *y Tk  s  Gy  ls 7t x   Gn Pr  *s  *t  ?l 8r  l  Gn  r s  *t  Gy	  5rb f  l np  sty  *n  Ns   Gn r  f  *n  *s w   bh *klmn  Gprs  *txylt  *n  *s   Gn  Gr  *s  t  *y n  *stl  Hs  *y	  sb  Nh  Gk  Gl  *n  wp  Gs  Gt   *n  s  *t  Gy mst  y   k  *l  *s   Gm  *n  *s  Gt  k   l n  *s   Gp  *s l  *n  *s  	l  *s n  r  s  Gt 2x   Gs  *y @bfhklmnprstwxy n  s  Gt  *y   Ck  Gs	  k )lm  *nr  ]st  Gx  <b  Gk  Nn  !n  *s  *t   G@lm  Gnr  *s  Ct   *n 2s  t  Gy   *r   *l  Nn  *s  Gfl  *mn  Gs  Gt  n  *s  Gtt   l  gn  *s At  @  wh  klmnrstx  *y   l  *n >s t  *yn  ?x   *st   *n r  *s  *t  wx l  *n st gw  Gk  *y   l  Gn  r  s  *t  Gkn  Gs t   *n  *st   Gl  *n  *s f l 6n  ]r  Gs  t   *s  *t y   ln 2s l  *n  Gs St  wx  As  *y  gfk *mn  s .t  *y   *n st   Tr   ]s  Gt k Fknps  *t w #Ln  *t   gn  s  *x  *y  =xn  Gt
+ hk l Im  nstx  Gy  ?n  Gt	  Xbflns  t  Gx  Gy  gb  Gn  Gt   Gn  *s  y s  6n  *s  wt   *s t   k  Gm  Gns At  Cy   Ck
+  !kl hn  Tprs  *t  Nw ix   l n "s  *y  n   *l  wm  *n 6p   wm  *n  ]s  Gt w  >l  *n  pr  s  Gt  Gw  ]f  *s  Gy  n  *s  Gy
+ bfkl 7Ymnst  *y   *k ll  *s  r   l n  s  Gt  *y   k  *n  s  *t  *y  l  Gs   l  *m 6n  *t
+ bl  Gmnr  s t  wx -y  Nl  Ct  Cm  n  *s  *t  *y   Gs gt  *s t  wx  Gy   ?b 6Rfh 
+klmnr s  *t w  Gy  l n 2s  *t   Gs t   Gn  Gp  *s  *t   l An  qs t k  *n  Gp !Qs  *t  Gx   s  wt   Gkl  wm fn  *st   k  *n  *s  *t  6n  *s	  f  l  wm n  Gr  st  Nw   ]n  *s Pw   Nb Cl Aumn  *s t k  Gl  Gs /t  @bf  Ghkl !mnp  ]rstwxy Bk  l  Nn  Ns l  *m  Gnr  *st  6n  Gt  *y  *ks  n  *s   *n  Gs   kl  *n  Gr  *s   G@  *s  t  wx  *y	   ?bf  Gk  l  Gn Fst  *y  gr  *t   *n  *s t  wx  Gy   Gs ;t  wx  Nl  *s  Gt  f  Gm t bfk ln  Gp  ]rst  *y  Gk  Gl  Gn  l 6n  *s t  ?w  Gf  gl   *m  Gn  Gs  *t  Gt   l 6n 2s   *n r  *s  wb  *l  Gn 2s   G@    G@bf  hklmnprst 
+wx 7eyk 5m  Gk  ]l r  kln  *s  *t y  6n  *s  Tt  *y  Gs  wx n #pr  Cs  *t  Akl 2s  *yf  Ak  *n  *s  *t  Gy k  lm  ns ty   *str Ak (nn 	s   Gm  *n  *s 
+ t  wx   gs  Tt kl n  *str  *skr f 4t r  *s Ak  Gy   G@ fk  l  n  Gstr ff  l  Gn  *s  *t   G@l Cr  Gt  Gty  gm   Gkl  Gnst  wx   k #(s  *y   Gm  *n  ?p  *s 
+t  Af  *n  *s  *t  Gy   fkl  Gmnp rst >wy r   *s  Gt  *y s   *s t ?t  	m   Gf  *k  Gl  Gp  *s 1tn@ s 
+t f  l n  yr 2s  Gty 	r p  *s s  t   lm n +s Tks 5rt   *@  ?n  st  *y l n  s  *t gk  *y b hklmnp r  st vw  Gx  *y  Gk  Gl  Gk  Gl  Gt   *k  *s  Gt  *y  *l 
+n  Rb  l  *n  Gs  Gt  Nl  Nn   ]l n  *s l  Gnstx k  Gm  *s  Gt  gyn @t  *s  Tt  Gy k s  *t  wx  l  *n  *s  *t  sfp  *sln yk@kl 6<xr  p +Wnr  f k @bfhklmnprstwxy	   Nk Cl  mnrst  Gw  ,s  t Ax   Gb  *k  *s  *y   *n  *s  t  n  *s 2t   Gbfhklmnrst  Gxy r  *s   Tn As  wk  b  Gk  Gn  Gp  *s  Cm  Gn Bs  *t  Gn 
+s   ]b  ]l  Gn Pr  *s  ]t  wx   *k  *n &s =?t  Gx  Gy  6k  Gn  *s t  Xb rf Bl  n  *s  ]tx  n  r  *s  6h  s  g@kl 7#mn @rst  *xy   *n  Lr  *s  *t   *k  *n  *s  t  y   Gk ^l  Gm  *ns  Gt  Nw   ?n  *s   Gb  Gk  *st   l  wm n  *s  t   l n Is  *t  *y  h  ?s t  Nw   ?l  *mn  Gr  *s  Gt Pwh ls Yt  n  wl t   G@b  *f  Nhklmnprstwx y   Gk  *l  *s  Gt   *k  Gn J3r  *s t   G@ @b ,n  Gst  *y   *sy p nk   n  *p  *s k  *n Is  t Py   *m  *s  *y   Gk  *n  *s  *t   gf n  *s  *t  Gy fk  Gl  Nm  *n p  *st Pwxl  Nr n  r   Gnrs  Gm  *n  *t  ml  Nr	 klm n  ]r  *s  *t gy   l  r  *s  t  *y   gb t  Gk  Gm  Gx  *y   l 6n  Gp  Ts  Gt @bf shklmnprstw 2xy  f k  l 6n  Tp  s  *y  *k l  n 
+r  Gt bhklmnp  Grstw  wx Ty Iklr   *s  t  G@  Gt   l  *st 2t  *y  wr  s  *t   Gf (rn  *t  *nr  ?s  w@   *st  x h n  Gsy   *s (tw  if ns t  *f  Gt   *km  Gnpr  *s  b  *s l  G@  *k   *ft   *s t	  gb l *mnpr  s  Gt  ,s  ?t t "f  Gm  Ns   Gk  *n  *s  *t  *y h  ]k  Gm  Gn qs ft 0l   Gk  Gns t  sf  Gm  *n  *s t  wx  f l  Nm  Gn  *s  Gt   G@  *n 2s t  Gy
+   b f  wmn Cp  *st sw  Cy  -lk  *st  wx   *f  *n (r  *s  *t  Ak  Gl  Gm  n Pr  *s b  Gf  Nk  Gl mn  Gprs  Gt  ]y  *k  *l Cr   *k  l  *s  *n  Gp  *s  *t  Gy  k  *s w  l  Gn  Gr  s  *t  ?y	  Tb  ?f <h  Gk  Gns  Gt  Nw   wt @bfhklmnprstwx  Gym   *k  *l  *y   ]kl  ?nr  s t  n  s t  *y   *s  ?w  bl nr  *s  *t   Gk 6n  *s  *y   *st   *st   *k s n  Gt  Dl -mnr  *s  *t  *y s t   l  Gn  *s  *t  wx  Gf  *n k hn st  Cxy   k  *s  Gy   Gk n  *s  *t  Gy   Gn  *s  Ttf  Ck  *t  Ak ,s  *y   Nbk  l  Gm nst  Gw x &y  	l  Nn  *s   Tb  l  Gm n  *s t  wx   Gk 'r  *s t  Gy   @b  *kl  *n Pr st  x  *y Ik JZy   Gny   ?   *s	   Gbh  *k  Gl  Gm  Gns "t 1k t   l 6n t
+ fkl m  Gn  wp  *styr  k  *s  *t  k  wl 6n os   *f r  *s   l  Gn ,/r  Gs 1t  ]x k
+  hf kl  Gm  Gn (p  r -is t 7k  *y  Gkt  b  *s   *n p  *s  ?t bfklmnprst swx fy l  Gm  r  *s  Gy   Nn  *s  Gw   *l r  *s   b If  Gk <lm -n  Gp Drs 
+ty  <b  Gn   *h  *n  *t p  *s  n  k  Gl  Gn  *s   ]n  *s   *s t  ]k  Gp
+  Bb f  Gk  *nr  *s  Gt  Gx  y  l  Gm  *s  *y f sk l  Gm n  *st  *@  ?w  l  s  Gy b 5f hklmn Eprstw  Ax *y  ]k  Gl 
+r gs
+   @  ]fl  Gn  ]pr  *s  Gt vx isft   *n qs  *t  b  n  *s  *t  Gy  G@  ?s  Ct  b  l  Gst 5wn k  Gl n  Gst   Cs   G@ f  Gn  *s  Nw  sfm  Gnp  *st   l n  s  Gk  wr   n  *s  h  l (tm 6n  *s gf  Gk  Nnb  wmn  *s  *t  b  *s   *@  wb Bfklnprstw 6xynr  Gt  *s  wx (t   ?h 2s  Gt  *y   Gns  *t  *y   *s 	tt 6m  f  Gn s  bk  *s  Gtx  ]x t  @k  l  wm  Gn  rt  n  *s  Gs  gt  Gl  ?r   k  *s  @bfhklmnp  Grstwx ;y Bl r  Gt  *y  Ak  *s 5wt y   n  Gt l  Gn  *r  *s  Gt  *s  gty  
+f  7k  Gn Ip  *st   *k  *n  r  *s  *t   ]f  *s  )b  ?f  ]k  Gst JZy   Gn As  *n  gx	  b DTk l dmn  *st  Gy  b  *s t   k r	  b f k  l 
+n  *st  ?w  r  *s  Gy   *@  *n  *s t   k  *l  Gm  *s  Gy   G@bfhklmnpr  stw  ]x  Gy   Gk Ulnr  *s  Gtt   l  wm  *n  r  *s  *t   Ck  *s t l   *s  Gx  Gy   Nl n  ]ps  Gt  Cb   wfl n  Cp Ss  Gt  *y   *@ fn  *s  *y  b  *f  *k  n  *s  Gt  *y  G@ gf &n  Gt  b  *n  Gs  t ln  *pr  Gst  Gw   Nn  *s  Ct  Gy   Gk  Gl   n  *s +9t  Tbl   qs  t  s -Yt  Gy   Gf  ghkl  mn  pr s ;txy   r  *s  *t   k  l  *n  r  *s t  *y   *n s Atk 2ns t  Gy  
+lr N'f  2s  tm  Gn k Js l  *s   *n  sf  Gk  wm  gr  `l  *s bfhklmnprstwxy k Ll snr  t &Xk  Gk IMl  Gn  ?st   *n  *s  *t  x *nt   *n r  *s 2t	   Gfh  Ckl =n  Gr  *s t  Gk  ]ptr   *l  s	  b  Gkmn sp 2s  Gt  *y   Gn  Gp  *s   *k  *n  *s  Gt  *l  Gn ps  Gtt  6r  *s ix   b  l Knst  Gx   Gm  *s t   gm gr  Ts  Gt   Nl  Gnr Is  Gt  *f  ?s k  Gm 3nst  Gy   m n k  Gnst  Gx y os  t r  *sk t k  *s gy s
+  fkl  wm n pst gx   Gf 6n r  *sp  *y sx p 	Ur   Gk  Gl  nr  *s  Gk (n	   *f  Gk  l 6n  Gp  r  *s  Gx	   *f  k  Gl gmn  ]r  *s  Gt  ]k  Gt   *l  Gp 	Ur  *s  Gt   *n  *s t   G@  *f  Gk  Gl  wm  Gn  Gr  *s t  *x y  b Eh 
+k l  Gmn -Yp r Bs  ]t  Gw  Gx   *n  Cs  *t
+ bfkm  np rstr t .n hnr   k  s  Nmsk  Tp n  *s  bkl  *n 	r  *s t r  f  Qk  *s @bfklmnprstx l  Gm s ]tyr  tl   k  *s tlny s t lsk  *lt m  Gbl 	umrs tyks 
+m 
+m  st  Tk  *s   *k  *m  *s  *t k  Nk  Gt @  *k  gstr  p  k Gsl  Gn  Gxk mnst ,f f  *s l@  Tt  *x   fln 6pl r  *kstf  6n  t  k mnr 5Bs  wxf  *s  *t  ynt 
+r  n  Gptr ks   l  *s +Wt s   gm   Gl  *nr  *s @  Nbfklm <npstx Tm Rr bl  Gn   *k  Tr  *s  wb .n vrs  Gty l  ws   *s  *t gxk y   k  l  *n  st  Gy r Ak sktx |n  %r  *s n )l n f  Gn ((t G2l  Gr   *n  *s  *tynm klm  Gnr  *k  Gt s @bfhklmnprstwxy
+ klm nrst  Gwy   l  wn  *s  k  Gns   s  t   *k  *l  Nn  *s   Gn  *s  Gt  Cy  b  wm s   Gk  *lr  *s  Gl  ]s   wl  *s    Gb fhkl  Gmn  gprstw rxy p  Nly Lt  l  wm  *n  Gs  *t kn  Grst  wx   r :s  :2s At  6n /t  k  *n  *r  *s  *ty k
+ fk  l  *n p  qst  wx sy  gr  Il   Gl  Am  *n 1r  *s  *t w
+   Gk  l Gumn  Gr  Gs  Gt  Gx  Gy   *s  t   l  Gm  Gn  *s Ot   Gl  Gn vrs  *t gw   *m  *n  *s  Gt >b  sh  Gn  *s 5Bx   G@b 6hkl 7#mn  Nprst  ]w xy  Gk  *l   Gkl  Gn  Gp s  Gt  gft  *xs  gk  *x   Nk  lnr  s t  Gy   l  *n r  Gs At  *n  *s  *t *y
+   b -Yf -k lmn  st ixn t   Gs  ]t   *n  r  *s  Gx
+   b  Gk Il @[n  Gp  *s  Gt gx  Gy kn 2s tr  ?p   Gn  *s  t
+  sb  l  Gm n  Gr 2s t gx  Gy   Gns k s  l  *s b  Gfkl  Cmn  ]prs ;twxyrt bf   n  *s  *t x   Gf  Gh  *s  Gt   Gl  Gn  *s  Gt ks -t gb  Gn  b  Gn n  *s  *tx  s At vx  2f  Gn  *s  r  *s  Nf  Gn t  Gb  Gm   G@bfhklmnprstwxy  k >l  Gn  Gr  s It  y @ Il  n  *s  Ct  Trw  Tl  *t   Gl m  *p  *s 6t   Nk  wl PBn  Gr  *s  Gt b  Gkl dm /Mnr  st !x By  6k  *l  *s  t  Gm  *y  *s  t  Gy   *n  r  *s  *t	   Gb  Gl  *mn p  ]r  *s  Gt   *st   l  s @  h  Gk  l  Cm  Gn  *pst x (y b   b  Gl n  *s  Gy   b  f k  l  *n  *s  t   *s 4t
+  "b 0f 6k  Gln ,s  Gt  Gxy   *s  Gt sw p  *s >k	 kln  *r  *st Pwy  *mr  *s   *s Pw f  *y  sf  *n  Gs  Gt   n  Gp Gr  *s  ]t  Gyk  Gl  Gs   *f Tlnr Is tx   Gs t  Gs  Gy   l  Gn El  Gr It   Gm  Gn  Gp  *s t  *y lm  *n  *s t   Tn  *st h @bfhklmnprstwxy  b  Gns  *t 6x b )l gm 7#p dr  &f 6hkl nr Ist  Gx  y   gl  Gs   *k  ln rs t  *y   *s +6t   Gm  *s  Gt gx   G@  Gk  Gm  *n  *s -t "Ex   Gn :r  s hkl  *mnrs t  Nxy 15n   Gl  Gs  wx   Gfn  *s  Gt  Gw  *y (tk  Gs  Gt   *km  Gns  ]t   *s :t   Gm  *n  *s t  wx   Nn  ?s  *t  Gy   wk  *st  n  n  ]l  Gn  Gr Ht   G@f klmn  Cprstwx /@y  Gl  *n b ,st  wx  *yl   gn  yt   *f An  *s t  *y  gb  Gkn  Gp  *s  Gxn  x   *kst  Gy  sp   *k  *r  *s f  Gm s  Gy   *k  s  Gy   *f  gk  Gn 7Yp  *s  t  Gy  sbf  *k  l  *n  *s t   l #(s  t   Gk  *s  *x   l n  Gp   Gn 2s t  *y   G@b Ufk  lnprstx y   b  Gk  l  Gn  ]r  *s t  Gn  ]st  *k r  k  l  *ns t  Cx  Gy   *n  *s  Gt  Gy   *n  ]s  t  *y   Gn Ns  *t   l n  s  *t  *y  Ak l  *nr !s  *t  Gy   Gk  *s  wx   Gl  Gn bf hklm  Gn  Gprst  Nwx  Gy ll  Tr   Nl  *s   l  nr Is  *t  y  *n As  *t  *y  gf  *k 6ns  *y   Gm  *s  Gt  Gy Us :t   Gk  yt gw  *y   f  wm  n  *s  Gt  wx  Gy	   ]k *l m  Gn Wrs  *t  *w  t  gf  l n  *p  *s  *t  Gy
+ bk  *l  Gn Aurst  *w  Gy  l  ]t l  *s  b  *n  *s  Gt m  Gn Gr 
+n  -bfk  Glmn  Gpst  wx  y k  *s  *t y   wx  l  *s   Nn #t  b 6h  l  Gn  Gst   Gn  s   l  Gn  *s =xt  wx   Gn  Gr  *s  *t  Gy  	U@bf hklmnprstw  *x ;y  *kl  Gt 	w   Cw   bk  Gl  gr s  t y >t  wx lnr  *s   *@  Ns  t  *ys  *t s   *n  ?p  *s k  Gl "s  *y  k  Ns  Gy   ?@  k  ]n  *s  Gt  gf  *n  s  Gt  >k  *n  *p  *s  Gt   Gm  *n  *s  *t  Gy   Gm 2s 5wt   mnrs  *t  Gy  5rb  *n  *s  *tf  *l  Gm  Gn  *t b   ?k  y@  Ck  Gr t bfhkl Aumnprstwx  Gy  Gkl Er  Ns  |t   b  Nl -Yn Zt  Cx  Gl  Gp  ?t  k  *n  *s  *t   gk 
+ns  Gt  *y   l  gn  *t  wx   l  Gn  Nrs  Gt  Gy  l  gn  *s  *t  l  l  n  Gs  Gt  *y km n  s  Ctw  *y  =p   G@  s  @  Af  r  *s  Gt  Gl  Gt  wy l  gn  *s it  *y	   *@  Gk  Gm *n Pr  s  Gt y   ln r  s  ]t  wx  vk  l  s   wb ?fk l  Gmn 6p srst Sw  *x  wk  Gl  Gs   l  *st   wb  *s   Gnr  *s EHt l An  Gt  	Ubmsn \s  st   @bfhklmnprst  wx  y   Gkl  Gmnrst   n  *s  t  Cy   b  *n  *st x r  *s  Gk  l  *y  5wk  Gn  *s  *t  2mt  wx b  *f  *s  *t ,l  2f  n  Gr  *s  *t l  st  *yk  *t  k  *n  *s  *t  Gy b An  *s  *tl  6n 	t  *y m	   Gk  ln  Gpr  Gs  Gt  *y   l  *st Ak  s =xk  *s  Gy   Gh k  Gln F.p  *r  s 7t  wx  *y  m  Gs   Nb  Glr  *s -t  wx   fkl  Gm  Gnp  rstw  Cx  Gy  b  Nn  *s t x   *n  *s t  *yl )s  dmnr  *s t  3s Tb  t  wx
+  Tb Af Cmnrs t  wx  Gy   Gk  l  *s  Gtn  *s  *t  Gy   *s x   *m  *n  *s  *t =?l b fkl 
+mnrstx  *yl s gt   Np   n Cr  *st  wx   l n  s  *t	   bkmnst  wx  ys &t  wx   l n  s tnt   *nr  *s  *t  wx  gn  *s  t  *y   ln  Gs  t   l  Gt  Bf )nr t  l  *s  *y   b  *f  l n  s  *t  k  lnst  y  b  *n  *s  Gt  Gw ix   b  *s t  wx   b  Gm  *n  *s  *t  bhm  *nst xns  ]t  wx b f ;s  b Af  Gn  *s At  !f  *s   Gf  Gn  Gr  *st x   l  Gn  *s t	  blm nr  *st x tnt  -l  *n  *s  *t  Gl  qs  Gt  2f  *s n  *s   *s t   Gf  *k  wm sn r  *st w  *x  Gy l  Gr  *s ix  gn  ?s  *y   Glmnr  *st  Gy =un   *s  Nw  *s t  wx  Gy  sb  *l  Gn  *s   b k lm  Gnr st w  wx  Gy  n  k  Gp  *s  wx  Gy f  *n  *s  *t  Gy   l  t   Nfl n  *s ht   gn vs  *y   C@bfhklmnprstwxy   Gklr  Gs t  wx gy s  *y   Gm  *n  *s t  wx  ib  Gk  *s  Gt b -fklmnrstxy  l  *n  *s  *t   l n rs tx   l  *n  *s tn   l  *n  r  s  *t	   ]fk ns t  Gw  wx  *y  r  *st  wx   *f  *l An  *s  *t  f hn  *s  *t  Tb  l hn Hst x   l  gn  r  *s  Gy   b Cm nstx  n  *s  *t  sk  *n  *s Atn l  *s  Gs  t  *y  b  Gln  Gr 2st   ]st   *n  *s  *t x  n  Tb k  l In  s txn  
+&l  *s  bnr  Gs  *t  wx   l  gn  Gs  t x  s t  wx n  *s  l  *n ,s   bn  *s  *t  fsb  Gm 
+t bfklmnprst  Gwx  y  
+n s   l n  Gr  *s t   l  st  wx   *f  l  Gn r  *s  *t   Gfmn s  ]t  wx  *y  Nn r   *k  *s  Gt  *b /ht k ql  *n  Gs  t   *st  wx f  *m  Gr  *s  *t   l  *s 6t  	Ul s	   b  Gfknst x  Gy   *s  ]tx n   *n s  t  x   l  wm  Gn @p  *s  *t w l n  *s  *t  Gy t  wx  *y	  b  *f  *h  Gk  Gn  *st  wx   *f  *n (r  *s t	   bf  k  *mn  ]r  *s !t   l  *s  t   Gs t  wxn   gl  s  0sk np Vs t w  Gy gy   b  *k  Gl  Gn  Gr  *st   Gk  Glr k  *y	  !7b  hk  l n  *r 	xst  %l   *n  r  *s  *t   n  Gr  *s  Gt  wx  y
+  hkl  Cns Jpt Pwx  Gy   l  gn  *s  Gx   gnps  t ix  *y  gp b  Gm  *n  *s  Gt  wxl   *s  t  *y   l 6n  t  n  *s @bfklmnprst wx  y  gs t  Gk rstn x  b 
+ln  *stx   s  !f  r ,sn  Bs  lnr  *s Cft  Cm  *n  Gs !t x p t  wx   b  Gf [mn -Jp  Gst wx  Gy   l  *n  *s  Gt   *f  ln  r  *s t  wx  	s  Gt  Gn  Gp	   G@ sb  np 0r  *st  wxt  wx  f   *f  l  *n  *s  *t	   b sfkn  Gpst ux n  *s  As  t   Gs t  ls  Gt   *st 7Yr   lnr  *s  *t   l  yr  *s Ak t  wxkr  wst x 2s 6t   *n stx  Tr  *s  n   *f  ll  *s 6n As  Gy   l 6n  st  n  r  *s  *t b  *kl mn pr  ]st  Gx =xl   Gk  wx   *n st  Cx   ln  *s  *t  sp  *s  bkn  *s 2t  wxt %x  bf  *n  *s  *t   l 6n s   *n  *s  t   l Dyn 7txn  "l  *s n  *p   l r  *s bfhklmnprstwxylr gy  +n  *s  t  *y gk  Gn  Gy   b k  ]l  Gs  ]t y  n  *s Yt l  Gn yrst  wx  Gy k  ]m  *s  t  *y  gw   l 6nt  %l  *s  Xbf n 6r  *s  *t  Gy   l  t bf  Nlmn 'ps .tw  *y &r  l Pr  *s QHn   G@ f  Gs   l  *m ht  Gk  wm   lnps   b  Gm  n As t  wxlrtt  wx  !f  *n  *s  *t nr 6n  *s  *y  b 2s   Gr As  Gy   b k  l dmn  *p Arst x  .s t	   b  yk  l  Gm  Gn  *s  Gt  wx   l Cm  *n  *s 2t  Gy l nr  ]s  Gtpt ss k bfklnprst  wxy  Nn  *st  wx  Af  *n Zr  *s  *t  kln s Ztx y   *sx =xn   *n 5Bs  *t  wx 
+&l  Cmst  wx  4m   b  *f  l  *n  *s  *t  b  *n  *s  Gt f  rstlx n kn  s kl t 	k (n 1s  wx  l 6n  *s  t  gw  *y pt n vt  wx  Af An  *s  *t  *y k  l ]m 6ns   *n  *st  wx   *n Jr  *s  *t t 	@n   wm  *n  sw  wm  *t	  fkn  p  st  wxyn  *n  t   k  Gs ;t /x   b  *k  n  Tr  *s  *tk l  Af  l nr  #st  Gy (r  f  Gr  *sn  ]t Cl  *tn  ]l  Gn  s  *t  f  *n  Gps  Tt   Gl Qn  *r  *s  Gt	   b  gl Cmn  Gp  Gs  Gt  Gx  	Uk  *s k  Nm In hs  Gt  Gkml Tt   w@bf  Nhkln prstxyl  Gt   gn  ?s  t  *y   l  *s  *t   Gk  Cs  mn !r  *st  wx  y  *s t   Gf k  *n  r  *s  *t	  Kh Fk  l  *n  Gst  ]x  *y  9Jr  *s	  f  Ckl Inst  wxy   gn  *s t  *y   ]n s  f  l  *n Hs  *t  
+l klm n 3st  Gy   Gl  Gm  Gn  *s   *n  gr  ]s  t  *y  G@  Gn  Af n  wr  *s t  Gy   ?@ Ebf  Gkln  ]r  ]s t  wx  Gy   *s .t  wx   Gn ,js  ]t  wx  *y   *n Ks  *t  ]n 2s  Tb "k  *nr  s Zt @bfhklmnprstwxy   Gl  *s  ?t
+  <lkl  Gm n sprs !t  *y   *k  gn  *s t  *y  *nt  wx  Af  *n  r  *s  *t  5t   G@ klmn  *rst  ]x  y k n  s  *t  *y   s  Gy   Gn  *s :t   l  *n =xs  *t   l n  *s  Ct   Gk  l ns t x  Gy  &mp  *t w  p 	s  Gm  Nn  Ebf kl gmn  prst wx  Gy   gk  Gn  *s   Gm  Gn  s  *t  *y   Gk  Gs &t   Gm  n 2s  Gy   l 6n sp  *s  *t   b !f l nr  s  *t   *ns  *t   Gt gxn  *s   Gk  l  *s   g kmn  rst hw  wx  Cy  n gb   l  Gn  Gs  *t   l 2mn 6p  *t  *n  Gs   f  Gn  *r  *s ty  f  *s   G@b  wflnp rstw  wx 
+y l  *n  *r  s  *t  *y  n  s  *t  *y  k  n  ]s  Gt  *y  kl  Gs st   k  qs  t  *y  Tl n Is  Gt  *y   b  Gf  wm  ]n  *s  *t k  *nr  *s  *t  ul   Gm  *s  *y  l  @bfhklmn prstw E{x LSy  Gk  l n  r  gxl -Yn  Gt   *s  Gt  Gy  Gn  Gs  h k >l n  Gpr  s  Gt  Lx  *y Ks	   *k  l  n rs t  wx  *y  |y   ]l  ?n  *s  gt   *k  l  Gs  Gm  *s  Gy	   b sf  yk 7l  *s <>t  Nw  Gy bf hklmnp  Grs t <wx  y Kr @  *l  *s   l Pr  *s r  Gt  ys k sw  *y  k n  s  Gy 
+l   @ n  s   Gf sk  l  *n  Gs  Gt  gl Cr  *s k  l &m  Gnt sw  gp  r  n  *s  Gyl  ?s  Gt >t  Nl  Gt  Gx	 f kl Hn Ist Aux  *y  Gn  Nr  /Mn  *s  *t  *y  Xb Af  wk  l n  s  *t   *n Hs  *t  #g bfklmnpr stw  wx Iy   Gk  Gl  Cm  gnr  *s  Gy  *k  *n  t
+   bkl  Gm  Gn  Gr  *st y  Cs gx  gf 6n  ?s  Gt  *y l s   ]k nrs  ]t x  Gy  n  ]s mn   *n  *s  *t gx   ?k  Gm hn s  Gt  *y   l n  Gr  ?s   l  *n  Gs  ]t by	   b  lnr Is  *t  Gx  *y   l  gn  Gst  @[n  *s  *t  *ft  Nkn  Gs  *t Txf  *s  t  Gy  4r  *s  sbfkl sm nr Bs  *t  Cy l  Gr  *s  n  x   Gk  gn  s  *y gm gs   Gk 
+nl  Nn  *s  Gt  -bfklnrst 4x  Gy  k l 6n  *s t y  #l  nr  Gs Itnt (tf mpx orl it  LSk n Cs t  *y   *f  k  l  *n &s  Gt !7x   Gk 
+l  ]n  *s  *t f Nks  *tltt k k   yl  Gmn  *s  *t  	l  sb  Gn 2s  Gt 'w  Gy   *@  bl An  *s  *t   *s w
+   bl  Gmnp  st  ]x  *y n  *s  *y St   ls   Gm  *s  Gt  r  *s   Gn  *s  *t  *y b )fk  Clm 1np  Grs  t w  *x  b :l G[m n  Gtn   *s tt kln hs   lr $f  Gmk k  Ns  Gy l  *sy s  Tt  @kt l  *s  Gt  wy k  Gn  qs  Gt  *l  r   G@bfhklmnprstwxy   Gk Cl ]m  Gn  r  *s  Gy  k  l  Gn  s  *t  y  Gl )t	 h  wk  l *mn  Gr  Gs  ]t  Ms   *n  Gs @t  Gy   Nb n  Gp  *s  #t  y kl  np  Gst  wy   l  n  k  *sl 't   k  l  *s  wx
+   G@  Gfk  l  Gm  *n  Gst  Gy n  *s   *k ,s	   Tf  Nh  l  gn  Gpr hs  Gy  Ak s  Gy	   Gl mnr  *s t  Gx  *y   l s   Gf  *s w  -Yf Tl n Hs  *t  *y   Gk  l  gn  Tst )wy   *k n p  r  *s  *tnx 	r   *@fklmn -prst  Gwx  Cy  bk  l  Gns  *t yt  wx f  r  In l  s  ]t  wx 7t  wx  *y   *k gm n  Gr  s It  *y  b 6h  *n Jr s  ]t   l  Gns  Gt  Af  *s   ]k  Gln  Np  *st  wx  0m  *st /rs Bt   gm  *n  Gs  Gt   Gm  *s t   *l &n  r  *s  *t  Gy  bn   l  r  *s   Gk  r  *s Py n  *ps  b  n  Gr  *s  *t l  Af  bb  wkn  *s   G@ k ex @bfhklmnprstwxy   Gb  *s   ]kl $r  *s  Gt  Gy   *k 	t
+  @ klnrs  *t  Gx y   Gk  *s  y   w@  Gl  *s   *n As  Gt  Gy  Ek  lm  gp  Gs It 	r   blm  Gn  Gprst x -Yy   *f  ]m  *n  *s  *ty sm   *k  *l  *s   gb Tn   f  k  Gm  qs  ]x  y   *s Lt  r  *s   wbfk [mnp rsty  *l  Gx   Gf -n  Gr  s  *t  Gy  b  Gm  Gs  Gt  s t  6n  *s  *t   r  *s  Gy   Gn s 
+t   G@  *bk  Cl  Gmn  wr  s  t  x  yl   *n =st   *r  *s  b f dk qlm  Gn fp rst  Nwx  *y   G@  *t   Gk  l  wm  *n  *s  Gt  wx	   *f  Gk l  Gn p 	r  *s  *t   l  Gn  Gp  6klnr  s  Gt  *x  m  *s  ]ttn 	s  Gt  Nn p  *s f  Gh  kl  Gmnpstx  ]y   *l  Gm n  7(n  *st  *y  sr k l  Gm  *s  Gt  l  *slt k  *n  *s  Gt  *y   Gk  *s  ]t  wx   *l  *s At gx   Gl  *n 6p  *s  Gt  wx  k  Gr  *s   Tk  *s   ybkl  Cmn p 	r st w x  ]y   Gl  Gn  *s  FTk  *s  *y   *n  Gp  Gs  Gt   Gf  ?l  Gnr  *s  *t =f k  lm >n  *s  *t  gm  *s  Gn p   Gk LSl  Gm  Gn  Gs  Gt l gm n  Gp  r Gs  Gt   wm >t  *y  yl  *ns  t  b   Nb Lfklnrst +6xy   *s st  Gw  fk  *n  r hs  Gt   G@k  *n  Gr  Gst 6y  Gk  gx   bl  *s  Gn  wy  An  *p  *s  *t  &k  *l  *s  )ol  Gn  Gs  Gy n   G@  *s  *t bf vh  Gklmnpr s  ]tw  Gy   Gk  *l m  *s   *n 6r  *s  Gt   Gn  *s  gt  *y  Tk  n  Grs  @t	   Gf  *k  Gl  Gn  r  Gs  Gt  w  	n  *s  Gt  8n  *s  *t  Gk  Gn  Gt b  ]f 8klmnprs >tw  Gx   *n r  *s  *t  gx   Gl  Gn  *s  Gt  wy kn  *p  *s  wh 9rs  Gx  Gm  p 
+ t   G@k  *s gt l  *tk 5k  s  Gy   *n  Grs  *t   Gm  *s  Gt  y fkms  ]t  wx Kl ]mys ys Sk  k  wt   l 6n  r  *s  *ttn  p @bfhklmnprstwxy kl  Gm D9nrst  Ak Ir  *s  Gy k  *s  yt  *y  k  Gy  )n  Gp  *s  Gt  *y f 2m  *s  *t r   *l 2t   @f  Gklmnrst  *wxyr 6qm   *b  l 
+n r As t  *y  -Yb  Gn  *s   Gm  Gns  r  *s
+  sfkl  Gmnrstx   n As t  wx  6n vs  t  *y   l  *st .n n  *s  Gy   l 6n As  t   l  Gn r  s  *tn  s  gf  Gk t   lmn 'r  *s  Gy  ]s  Gy   *l s  tf  Gn <s   Gnr  s :n @bf ihklmnprstwx y nr   Gs M%t @St l  *s gt  6n t  *y   gm  *s y  gf  Lr  *s  ]t h )kn  Gr s  ]t  *yt  r  *s 2t   Gk  Gs  Gt  wk  Gr   l  Gnst w  7#t   *@ Pr  *s  Gl .r t   Nf  ]k  *n  *s '8t  *x *y   Cf  Gk p  st   Gk l  Tr sy  [f Fk  l m n (r Hs  ]tw  wx  Gy  Gf  Gn  Gt  Gk  Ns  Gt  *Bl n  s  *t n  Gr  Gs 6t k bfhklmn prstwx  ]y  Gklr  *y   wk 6n  t  *y 2s  ]t  wx  k  ?l  Gn  *s  *t y  Ns It  9l  Gm  *s  *t   Nh  Gk Ins t  *y   Gm  *n  *st  wx   *k  Gr  *s   *@  Gk An  *st  wx   f  r	  @bk  *m  *n  Gp r  Gst l  Gs  *y  Kr  *s  @  wl  Gm HPn  Gs [Bt  Gx fklmn  Cpr st  y  gxk  l  Gn  *s 1-r   *st  wx  *y   f  *n  Gr  *s  *t   C@ 15b  *s  b  Gs  wt n 2s  ]t  wx  Gy  !f k  *n  Gp ]r  *s  Gy   b  Gf  *k  lm  Gn +rs .t x iy  Gn 
+\st  wx   l  *n  ]s  *t  k  *n  *s  *t  wx  Gk 2m  Gn  *s  Gt   Gm n  *s
+   G@ S.b f T knp s \4ty k  Gs  Gt  *n  Gw  Gp  Gt  wx   ?h Ekl  Gn  *s  t f   *@b fklnp 
+rst  Gy	   *@ Dk 	l  wmnrs :t  s At  *y   Gn  s  *t  Ny   wk  ]t  w   wl  Gn  Gs b  *s  ]t  *yrn  x  n  rst  wx  *y   l "n  *s t  b  *n  *s  *t  wx
+ b 3ln  Gp  Gr  s 
+t Bx  *y l   *n  r  Gs  *t   Gm  Gn  r  t	  b  ?f ul  Gn  Gr  *s !t  wx @ <b  8f &hklmn  Gprst  Nwx  y 2n @bfh  Gkl  Gm @[nprstwxy   l n  s  gw  *y   *l  Tr  *s  Gt  Gl  ?s t  Gx  gn  Gt   G@  f  ?kns  *y   *s  Gt  x  t  ]Ol  *s 7n As  *x  4f  *st  ?w n  Nr  *s t   *s gt  *Bl  *m 6nr ;st  n  Tn  *sn s It Wt  An *r  *s  *t b  wy   Gm n  s  *y  n  Gw   Nrs  t   Gm  *s  *t  Gy   ns t  *y  b  *n  *s  *t gx
+  f  *h lm =n st  wx  Gy   l n  *s   k  *l  *n  *s  
+bfh Qklmnrs  *tw Qy   ]l  gm  *sl  Gm  Ct   Gb  ?k  gn  *s t  *y  ]k  *n  Gs   Gn  *st ix   yr   Nm  Gn  Gs  Gt /@y  b kl  wm  *st  Gy  Gp  t   Gn  r  Gr  Gt   wk np  r  *s ,t  *k  Gn  Gt   Nbf  Gkl  wm  Gn  prst  ww  ?x  *y Er   *k  Nn  Gst  sf  *s  f s  Ct  wx   gfk  Gn  *st 0xy  *m  *s 6t  wx   ]k  *n 2tn  *k  *x   Gk  Gn  Gp  rs  gk  *s	   gkl  Gmn Ist  xy   *n  *s  *t  wy   ls Ot  wx  sf  Gm  *s   l n  Gs  *t ix   Nln  Gs k  *s l  Gst  gm  *s  gt   C@bf h 7klmnprst Auw gxy  G@  Gk  *l )n   Gl 2s   *f  *s  Gt  Gy   gn  *r  Ik  *ns  tx  Gy   b  *n  *s  Gt 2s  Gt   *n r  *s  *t  )ol  *s t  *w  wx  f l 6n 
+t	  fl b'nr  s t  gw  *y  2s  *y   gl  Gn s  *t  	b  *n  *s bfhklmnprst <wxy k \l r   Gk n  *r Is  Gl  Gn  Gt	  k dm  nrs  ]t  wx  Gy  *n 2s  *t   l 6n  *s  Gt  >n  s  t  *y  I@  Gl  Gn  Gs vt   h  l  Gmn bs  t  Gy  s  Gt   Gnr  *s  *f  Gs
+   Gbl  Gm  Gn )or st  wx  Gy  m ns  *t  *y   Gm  *s  Tt gx   l  gn  Gr  *s   wm  Gn 15p  *s  Ct w   Gl  Gm  Gn  r  *st n  *s  lr  Gn  *y   l  gn  Gp  *s  <b  wfl  *s ix  Gf  *k
+  Ubklmnr  s  Gt x  gl  ]s   *s  wy  Gn  ?s gx  h k <s  Gt   *n  *t  Gy	  f  Gkln  *pr Ist  *n  *y   Gf  l  Gn  Gs  *t  *n 2s  *ty  m  *s  hn  *s  *t   Nb  Gfklmn  Gprstw  Gx   gkp  Gr  Gs  t   Gp Hs  t  Gy f  Gn  *s   Gms ht   Ny  k l  Gstx  h  Gl  Gn  Gs  *x  Gy  b  Gn  *s  *t   Nb *k  Gns  *t  2s  *t   Gl  Gm 
+ns  Lt  yl  Gn  *s  ll  *s @bfhklmnprstwxy bf  Nh gklmn 6prstwy  ]l  Gt  k Bl  Gn Bn s  Gt  *yft rt k  wx   gk  Gl  Gn  Gs  5f n  *s t   Gl n  *t  kl (tm  Gn Hsk Tk s  Gy  *l it  Gx l  Gr   Gn  *s  ?t
+   wb DTkl  Gn  gp r  s 
+t 6y   Gn s t  #bfklm n  *prs  Gt  Cyn m  n  *s   }k  *n s  *t  Gw  Gy   Gk  n  *s  *t   ]k  *s   Gm  *st f b  fk  Glmn  *pr  *sty h  n  *s   *st  )n  *s  *k  gt bf  Gk  Gnx   *s  t  sb  Gm  *s n @bfhklmnprstwx  Cy   *r  *s )y   G@  Gk l Zr  *s  Gt  Ny l  ]n  s bt   Nn  *s  Gt  Gl  Gm 6t   Cf l  *nr  *s  *t  ww   G@  Gk  *s  @  wh  Gk  wl Xmn .ap  Crs  Gt )x  *y   wh  *k  *s  f  Gk  Gn  Gt   wh  Gk  wl  *s 7t
+  :bf  Gkl mn ;st )x  k s  *t y  !k  qs  t  *y m  *s  Gt 3?s  t
+ hk  *l  Nm  Gn  wrst  Gxytrtyn m   l hs  b  f  Gm  *n  *s  *t  wx   *s y   Nn s   G@bfhklmnpstwx  Gy lr !Qs t   kw 	r b kl  n  ?r s  Gx  ]m  Gtytrt y   *lmnrs  ]t  Np  m ,sf  Gm   *s  t  Gy  m   fk  gn  *s  Gt  *y Rt  
+gln  *p  *st k r  *s   *s t   *kls  Gt  Cxy  gs  Tt t 	@rr  Gtk DNs $1r   Nfkm ps t  Nnp  r  Gt   k  s  Gyk X3ln  Tm pk   *f  *mn 	r  *s  Gty s 5t  pn  *s Zf  Gtm  Gn  Gp  r Js   b  f gklm  ]n  *p dst bw ;y  	r  *s l  m &n  qs   Gn  *s  t  *y  Akr  *s  Gy   l s  Gt   G@ Xb sk ml Hmn .ap r Is  *t sw  Gx  Gy l  *s    *s  Gt Sr im  Gt   Nf  l n  Gt @bf shklmnprstwxy  Gn  *p  *s  wx  k Zl  Gn r  *s kl $mn s  Gt  y   Gt  wx  n 2st   Nm  *s k  *s )x   *@l Aumn &rst  Nw x  *y   l  Gm  r  *s  wx   l !un  Gstn  *s  Gy M%t   Gp  *s  *t  Gy  n  s  *t   *s t  *y b  Gl  Gn p gr 2s tm  b   G@ f  Gk l 1m  Gnrstx  Gy   n  *s  *t %x  Gy   Gk p  *s  wx  r  Gs l  Gn  *s   Gk  *s  Gy  wm 3nr  Ns  Gt 0k  Tn )p  6k  *l  Gst  wx  Gy   *f  *n  *s  *t  Gy  Okn st   *s t   Gn  r  *s  *t  wx  @ bfklmnprst Swx  Gy  kl Amnrs t  *m  ?n  *t k  *sxn   l  *t 2s  *t t  *t  Gy lm  p  Grs  *t  wx  gmn  ?r  *st  *y r 9(rp n  Gt t   *f Cm  *s  *t @Qf 9(nt  *yrl  s  *y  ykln  *s t n  ?rs Ct   *k  l sm  *n s !tx cn  *@l  ?n  gpr t   bk  s  Gt  gx y  Nn  ]s ^#t  wxk DNsr Bm   lm  *n Vst  x  *y   *s t   l Cm n  *s  *t l 6n  *sty  *l  *y   *k r  Rl m  Gn  Trstnx n   wk (p  )n  *s sn   Gk  Gl  Gn  s  t  k  l  wm n  *s  Gt  Gy bk  lm  n  *s  Gk kt !7t  ?@  *k   G@bfk sln  gpr  st  y kl  *nr  Gs  *t ix m   Gn  *st y p  In  *t k  *s  Gt y   *nr  *s  *t .f  Gm  *s  Gy st   Gk  Gm   l  Gm r 2s  bl  *mn  qs  *ty   ]s  *y   *s ,t   gl  *s   k  gn  Gs @bfhklmnprstwxy  El +s  Gk  Tl  Gm 6r  Gs
+  S@kl nrs  Gt  *w ytr  b  Gn  *s  *t   Gk 6n  s t  *y  Xb  Gm  Gn  *s  Gt  n Nt   Gl  Gmn  Tr  *s  Ct   *st   ]l  *s b  wklmnrstx Sy l  *s   gn 	t   Gk  ln ,st  *y   *k  Gl  Gn  *s   *r  *s _w   Nn  p Bs  Gy   Gn  Gs  Gt   ]f  Gk l  ]m  *n  s  *t   Gk  *s -t  n  p  Nr wy   Gn  Gp  Gt  =@ @kn  s ft  Gy  4l  *n  Gs  Gt
+  5w@ 7kl  Gmn rs  ]t  wx   k +s  t  *y  k  *st   l  *n  *s  *t   *n  *s  Gt  wx  wy  fk m\l  ?r  st sh l  *s   Gn  *s  gt l  Gr s  Gt  Gw  b  Gnst  wx  Gy   *n  *s t  wx   b )f  *n  r  *s  *t   Gf  *hl  *n Hs t  Gw   k  qs  *y  Jfk  l  mnpr  st Gw  Gxy   Gl fn  Gp pSr  *s  Gt  Gy   l  *s  Gt ql  wr &b  *s  wx   b k  Gnr  s  *kl  ]m hn !s  ]t  wx  Gy  s  *ylb  *k  Gl   g@bfklmn -prst w  Gy k  Gl En  *r  *s  wt l l  Gt  &l 5rm mns  *t p Un	  Lb &f  Gn 6ps t x  *y   l n  Gt   Gn  ]s  t
+  bk  lm n rs DTt  Gy   l  r b   l 6n  *s t   b gf  Gk l  Gn  Gp #(s  *t  Nx  *y	   Gk  Gl  *m  Gn  r s t  wx   ?k  l  Gn 	r  *s  *t  gk El  Gt
+   ?f -Jh k  lnrs  Gt  Gy   b  Gk  *n  Gs  *t m  Gn  *s   *s t   Gm  Gn t   *n  *p  *s  *t   *@  b  *f  *kl m  Gns  Gt  *x  *y  i@k s  *y r   Nn  *t   @b Gf hklmnprstwxy   G@  Gln  *r  *s  gt   *st   l  yt bl m  Gn  *s  *t  Gx   l  *s  s  Gt   ns t  Cy   *n  *s =t  wx b  Tf  Gk  Nn  *s   Gk  *l  *s rt	   *bh Ak  *n  Gr ls  ]t  wx (tp  Gk  Gl  Gr   n  *s  *t   yb  Gk l n  *s  Ct  wx
+   G@k l  *mnr  Gs  *t  Gy r  s (t   *l  Gn  *s  Gm Is   G@  *n  *t   Gn  *s Qy bkl  Am  Gn 6rs  G@  Gl  *r   Gn Cr  *s   wb  n  *s  wy   f  *s @bfklmnprstwxy  *f  ]t  9
+h kk  l  Gnr  *s  "n  *s l 6n  ]r Ist   Gn  *s  Gt  *y   Gn  Gr  *s  *t f klmn ]Oprstyn  Gt  Gy   l Cm  *n  *s  *t	  bk  ln rs ?t  *y  k l  s  Gy   Gk  l  gn  *s  t f k  *t gy  wlnp  s  Gyk It gxr h fst  wx Ck   ]f p  *str  k  *n  *s  *t  "k  *n  *s  *t   *f  Gk  n  *s  ]t y   yk  *n  t	   bk  Gl n  r  *s t  wx Cm An n 5s  Gy  @ s~b  whk dl  Gmn  r st y n  *s Cm  *n  *s  !s  Gy   n  *s
    Ab f  ?k  lnr  *s  Gt  ]x  k  *k s
- @f klm  Gnr  Gstrp  Ak  s  Gy  qmy  ?s   *n Pr  s  *t   gn  *s  Gy p grs  Gx  yr  qt t :gn  *t  kl <nrs *Rt  k  Gn s  *t  ]y %hn p t  wxn  ]t  ]s xf x  k  *s  *t  Bb !lm  Gnp  Gr  ]s t  wx 
-
-ym  Nnb  Prr  ]ts vn   f  Gk  *np  *s  Gtx   Gn gr  *s Fdm  bfk vlmn prs t wxy  
-l en  *s   b 6ln  *st  wx   l  ]s   m  *n  *s  *t n 68s  *t   Nn  *s  ]t   Gk  Gn  Gst  f  k  Gln  ]ps t  Gy s l <t  wx   l  *n  *st  Tf  *n  *s  *t  	b  Gn  *st  r   Gp  *s  *t  op  *s  BSl f  Gmn (s m  *n 2s  *t Fk   l  ]s ix   Gf  *n  *s  *t  i@bfhklmnprstwxy  ]kl <n  *r  Gt  Ak  gn s t  *y  Wb f kl nrst xy  Bs  Gt  *y  b  k   Nf   *f  l n  *s  *t   *n s  Gn  Gs  Gy
-  ckl sm n -prst  wx   k  Gn 2s  *y   Gs t   Ck  *s   *f  *k  *n  r  *s  *t   w@bfhk  lmnrstw  wx  y  r  @  gr  *st   *s t   k  glr  s  *t  Gy  yf  Gn  Gr  ?s  Gx  
-
-k  l 6$s  Gt  qs  t   b 6k Im  *n  s  Gt  wx   *f  Gn  *s  *t  Gy  Ck  Gt @ vf  nps  Gt  m  *ssy x   Gl  ?s t   b qh  Gk  bl An Prstxy   l  Gm  Gn  *s t  wx  Gy   l  *n  *s  *t  Gy   gp  *s   ym  *n  *s   wk  n  ?r   Gbfklmnpstx  Gy  k  *s l  Gs  ]t  wx   *n  *s  ]t  wx  *y  7(k  gn ,ws  yt  *y n  *s  l  *s  Gy   *k  l m  *s  Gtl  Gstn  js   l  Gn  ]s t  wx   *f  Gk  l n  *s  *t  Gy   *l n  *s  Gy    *@ -fb sf  Nhkl  mn gp  *st  Nw Ixyf p fl  wx  r   Cn  *s  Gt  l  *n  *st r   *k  *l  b  l  Gn  rs  Tt  Gy   ]s  *t @k   *f  *k  l  Gm  Gn  *p G9r -s t  wx  Uf ~k  wm /wn As   ln *p  *s   l  Gst r   Gnr  *s   *n  *s ,t l  Gn  *s  *t  Cy  m  =bf  Nh [klmnprs  t  Nw  *y  Cl   Gk 6mn V?s  Gt  *y  sk  *s  Gt  Ck  Gl  Gx	   bkl  *nrstx  l  ]n  *s   *k 2s  *s t  Gy  b  Gm  *n  *s =t  wx  b  ]l  wm  *n *s  *t $m  Gn   *l (n  *s  *t  ]m  *n   Gm  Gn ht @  Gbkln 	prs  Gtx kl  *s   l JCrk Tk s  Gy   l  *st  *l  Gm   gk  *s 0
-t   Gh  Gm  Gs  lf  Ghl Cm  n  ?p  Gst lw  Gx   Gn  *s  t l  Gs   ?f  *s  l  n  Grt f kr  s  k  *s  *t &ey 2s  *t  y  Gl  Gp @bfhklmnprstwxy  b fklmn irs  Gtw  Gx  l  *s  Gt   Nn  *s  *y b  *np  ?s Cl  *r Ot  @ l m 6n  *s   *@t  	l  *n  *s  Nw  Nls  Gt zyt   Gb  Nh kl  Gm  Gnrs tx  Gy   Cm >n ts t w  Gx  *y   Gn H`s  *ty   Np  *s   Gk  *t 	t @  f  Ghklmnrst Zx  y  $sl  *s  ab  Gn  Nrs  ]t x n bt ks t  *y  s   l n  *s t  wx  Gb  *r  k  Gst  Cl  ^n 2st  Gy   *k l  *s  gt  bb  yk  l 6n  *s  *t  l  Gn  *r  s  Gt  Gy  gfl  Gm  Gr  *s st  n 4s b  Gfhklmnprstwx y   Gk  Nn  *s  Gt  Gw  Ny nk  *t   r  *s  *x   b g
-f  Nhk  Gl  Gmnpst  wx 7y  -b n  *st  f  *n  *s  *t l  *s  s  *y  Tt w  k  *n  s  *t   Gn  s  Gt   *b  Gr  *s k  l  ]m :@s  Gt x   *s t   *h  *n  *s  *t f  Gh  Cklmnp  Gs \t w  *y 
-
-l  k n  *s s  Tt   *s 7t 6l  ys  sf  Gk  Gn !st l  *t n  *stl y	 f k )|l  gm Hn r  qs  *t   l n ,s t  yr  Ns  ab  Gf  n  *s  ]t  wx  @b qfkn p r Bs ty   -fr gt +Up  b  *n s k  *s  Gt   *@   Gn  *s  Nw   G@bfkln prst  *x y	   *kl (n p ors 5ty  6n  s  *w  *y  sk  *s  *t  qp Jjs  gl  Gt   *ks  t  *y  b  l  Gn  *s  *t  wx  Gy k -l  Gst  wx  el   f  Gl  *n  *s  *t  Gy  b kls  ]t  wx   k  *s  *y   l  gn  *s  *y  -km  *s  t   b f  k r  Gs  Gt @bfhklmnprstwxy  rkl Kn ir  *st  *s  Tt r _kl nrs  Gfk  *nr Gtn  s  Gt k s Cb !f  *k  gn
-  Tbklnr  *st  xy  *lt x  Gf  *lbk m n t iw gy l ^t &k  gm  Gt l s   *l n  wr  *s s mr 
-s  Gt t bf $[klmnprst xh T*yl $[n Bn  Dk nr 5k b lnp  *s  txs Ct t kl  Gprt 6n  wy th  *n t  Gl  ?n   *bf  Tm  wrstm t  *n  Ns  t  f k  grt _rk ?nr  *s  tbft  *n  r  x r nxk rm n st  wxyl Ht  k  Gn  *ts +Ut k Tmp stx .l tl 	t s  cn  t |n  *fk m  x  $]m  *s   @ gfkn |st kh k  *lnt Cm Sr   l r |s Grkl m prt  kn r  s  Tt  bkt n  Nn  r sk  *l  lr  *s  'p  *s fk  Gn  st kl  *ms k m 'x  b  *f  .lfklp r }7st }Txn 	r ox s Fbk n  *f  *s  Gy  bf  *kl Cmnr  wst gym n  ]st  k  *n   Gs xfkl m 6nstxt Hx   b 7fm  *srt Cm gs  x  &f  Gl  *s ktr p Tr  *f k sb Tn gbs  *y  Gnp  Nn gtfhk lnp  rst  x  Gy l Dny p@ fk gr t n t wrsnt ^x pstnr  *s Ctk  Gl gt |t  *ln _r  Gt  x k m n gs gt kl 1Bmnp  *rst w xy  k  *lnrst  b  Gt k  *n  *l s   ?l gr  *p  ?r   *l  *nst sx  k  *s t  Tf  Ns Ef gk Fbr  s  txl s   n @at   *kn  *pr  *s  Gt  *n  ?tkt  *n Ht  Tk  km  *sp 6@  -@f .hklmnprst mwx 7ry r  *s }(n rs Et nx sb  *k  ?n t  @f  *y  (kn  *s t  Gls gt  wxt r   G@ f 7	m  ?r  *st x   k 6n  *srt ^x  *f $]m  b f  *l |mn p &t y  Gks f p k )
-ptlr  sm /wp Xnr -k  Dkm  *s xns At  *m 
-t  *yn Tk  l gk  gt kl n <n  ^l  *n  *s   b  Gf  wkl mn r zst sx  Gy   ]mns  t   *k  *s  *t   Gm  Tt   G@  l  Gs  &)n Hs  *t bfklmnpstw x 5Oy  El  ?n  *r  *s   *syx El  )n  *s  *t  Fk  *y bn s  Gk  *n  ft  b  *k  *l  Gst  m  *r @sy x  X.@kn  *s  t  Gn  r  *s t	   f  k  l  *n  *pr  Gs  Gtn  wls  Nm  n  ?s  *t bfklm nprstw y   Gk  Nl  *s  .l  Nr  i@  Gf  Gl  n ir As   Gns t  *y   l n  *s  *t  wx   G@  k  Gn  Gs  Gt p Cr  *s   wm Pr  *s w  G@  Gl  Gm  Gn  *s  Gt *y   Gm 6n Zr 4st   *s  ]t  wx  Gy
-   b  ]f  Gkl @inrst y  	k  Gn  *s  *t  *y  Gl  Gm  Nn  *s Jjt   s  *t   l  Gm 6n @k  wm  *r  Gt   l  *s bfhklmnprstwxy  Gkl n  *s  t  *y  *s 	t   b k  bl  gn  *s bt y  Gf  Gm l  wm  Gn  Gp r  *s   g@  ]b  *y	   Gfkn Cps kt _\w  Gy  Lr   *k  Gs   l  *m 6n  *s  *t   ]k  Tlr  *s  Gt   *s Ax   Gbh  Gl  *n  Gs  *t 5m  ok  Gp  Gt
-  	?fkl Cmnstx  Gy l  Gny s  6n Vs  t  *y   *s 
-t l  Gn  *s  *t  Nw  wx 6l  *y  Af  l  Gn  *s  *t  *y 0n 2s
- bh G,k  *l  Gm  Gn  Np  *st  l  Gtlk Fby   Gk  Nn  r  *s   *f  l  Gn 6r  *s  *t  Gy @ ok  gl  s  Gt {x 6ns  *y tt   Gl n  *s  Gt   m  *s   b  Ck 
-
-ln  st  Gx k  l  gn  s r   *l  *m  *s  sf ln r  *s  *t   Nhl  *s  ?w  ,ws  t  *y  )k  wlm 7fn  r  Gs  Gtf l X.m  *s  Gt cp @bfhklmnprstwxy   Gb Cfkln Pr Ist  Gw  x  *y  n  *s  k  Gn s  Gt  *y k  Gm  Gn  Gs  *t n  Ak  Gn  *s   Gkl  *nrs (t k  Gm Ins  Gt *x  *y   l  Gns  wx  Hp  s t  Gk  Gx  "n  Gt  sbklmn #rst +xy t x  ab f  l n  s  *t   f  ]n  *s  *t   b Tn  r  *s  *t k  Gs   *s # t  2f  l 6n  *s t   l  Gn s ty s  ^[t  n K$r  *s  *t   *kn 6p  Gst   wk  *s  /yk  Gn  *s bfhklmnprst @wxy   gk  *l  *s  Gt   *l  Nr  s  Gt  gx  
-n  Gs   Gh  *l  Gn r  *s  *t  p@ gb  *k l  *m  n r 4s Tt  wx  *y   ]kn  Gp  *s  *t  gy   *s  qt b 	fh  ]k n  Gp 	rst  wxr s  ]l  *m  Gs   Gm  Gn 2s  t  Gy   l  Gn  r  *s  *t  :k }n  Gs   Gl  ]m 
-
-n hst  wx  Gy   f  b fk  Gl im  Gn  Gst sw  *y n   Gf  *k  Gl  Gn  *s  Gy	  b -fk  2lnr  *s 2t  nr f  *m  As   bl  *n ^rs  *t  Gy  2k   ln   s  Eb  Gn  *s @bfhklmnprst 8wxy   Gn  Gr  Gs  k l  n  Grst  *y  
-tn  k  ?s  *y   Gklr  Gs  6n  *s t  *y   b  Gk  *n  qs  *t  Gm  Gs   b  *kl  ym nrst  wx  *y  km  *s  *ytl k  0f oHm  Nn  Gp Gs  Gy  .nk  Gs  *t   *f  *nr  *s  *t   Gm  *y  T@ k  *y
- b klnp  rs Hty   Gk 
-
-n  r  *s  *t   Gf  *k  *s   r  *st  *y  nr  *s   l n 8&s  *t  *x  *y   gl  Ns 8t  0l  Gr @ Wfk *Ol  Gm  *nprst /x  Gy r  *s p ln  *s  t @s  gm  f k s  *ttn pDx  *s  t  *y   Gk  Cm n 7fp  *s  *t  Gy
+ @f klm  Gnr  Gstrp  Ak  s  Gy  qmy  6s   *n Pr  s  *t   gn  *s  Gy p grs  Gx  yr  qt t :Yn  *t  kl <nrs *Et  k  Gn s  *t  ]y $hn p t  wxn  ]t  ]s xf x  k  *s  *t  Bb !ylm  Gnp  Gr  ]s t  wx 
+ym  Nnb  Prr  ]ts vn   f  Gk  *np  *s  Gtx   Gn gr  *s FVm  bfk ulmn prs t wxy  
+l \n  *s   b 6ln  *st  wx   l  ]s   m  *n  *s  *t n 6+s  *t   Nn  *s  ]t   Gk  Gn  Gst  f  k  Gln  ]ps t  Gy s l <t  wx   l  *n  *st  Tf  *n  *s  *t  	b  Gn  *st  r   Gp  *s  *t  fp  *s  BEl f  Gmn s m  *n 2s  *t Fk   l  ]s ix   Gf  *n  *s  *t  i@bfhklmnprstwxy  ]kl <n  *r  Gt  Ak  gn s t  *y  Vb f kl nrst xy  Bs  Gt  *y  b  k   Nf   *f  l n  *s  *t   *n s  Gn  Gs  Gy
+  Zkl dm n -prst  wx   k  Gn 2s  *y   Gs t   Ck  *s   *f  *k  *n  r  *s  *t   w@bfhk  lmnrstw  wx  y  r  @  gr  *st   *s t   k  glr  s  *t  Gy  yf  Gn  Gr  ?s  Gx  
+k  l 6s  Gt  qs  t   b 6k Im  *n  s  Gt  wx   *f  Gn  *s  *t  Gy  Ck  Gt @ vf  nps  Gt  m  *ssy x   Gl  ?s t   b hh  Gk  bl An Prstxy   l  Gm  Gn  *s t  wx  Gy   l  *n  *s  *t  Gy   gp  *s   ym  *n  *s   wk  n  ?r   Gbfklmnpstx  Gy  	k  *s l  Gs  ]t  wx   *n  *s  ]t  wx  *y  7k  gn ,js  yt  *y n  *s  l  *s  Gy   *k  l m  *s  Gtl  Gstn  js   l  Gn  ]s t  wx   *f  Gk  l n  *s  *t  Gy   *l n  *s  Gy    *@ -Yb df  Nhkl  mn gp  *st  Nw Ixyf p fl  wx  r   Cn  *s  Gt  l  *n  *st r   *k  *l  b  l  Gn  rs  Tt  Gy   ]s  *t @k   *f  *k  l  Gm  Gn  *p 	r -s t  wx  Uf uk  wm /jn As   ln *p  *s   l  Gst r   Gnr  *s   *n  *s ,t l  Gn  *s  *t  Cy  m  <bf  Nh [klmnprs  t  Nw  *y  Cl   Gk 6mn V/s  Gt  *y  sk  *s  Gt  Ck  Gl  Gx	   bkl  *nrstx  l  ]n  *s   *k 2s  *s t  Gy  b  Gm  *n  *s =t  wx  b  ]l  wm  *n *s  *t $m  Gn   *l n  *s  *t  ]m  *n   Gm  Gn ht @  Gbkln 
+ prs  Gtx kl  *s   l J3rk Tk s  Gy   l  *st  *l  Gm   gk  *s /t   Gh  Gm  Gs  lf  Ghl :m  n  ?p  Gst lw  Gx   Gn  *s  t l  Gs   ?f  *s  l  n  Grt f kr  s  k  *s  *t &Xy 2s  *t  y  Gl  Gp @bfhklmnprstwxy  b fklmn irs  Gtw  Gx  l  *s  Gt   Nn  *s  *y b  *np  ?s Cl  *r Oxt  @ l m 6n  *s   *@t  	l  *n  *s  Nw  Nls  Gt zgt   Gb  Nh kl  Gm  Gnrs tx  Gy   Cm >n ts t w  Gx  *y   Gn HPs  *ty   Np  *s   Gk  *t 	t @  f  Ghklmnrst Zx  y  $fl  *s  Xb  Gn  Nrs  ]t x n bt ks t  *y  s   l n  *s t  wx  Gb  *r  k  Gst  Cl  Un 2st  Gy   *k vl  *s  gt  bb  yk  l 6n  *s  *t  l  Gn  *r  s  Gt  Gy  gfl  Gm  Gr  *s st  n +s b  Gfhklmnprstwx y   Gk  Nn  *s  Gt  Gw  Ny nk  *t   r  *s  *x   b ff  Nhk  Gl  Gmnpst  wx 7y  b n  *st  f  *n  *s  *t l  *s  s  *y  Tt w  k  *n  s  *t   Gn  s  Gt   *b  Gr  *s k  l  ]m :2s  Gt x   *s t   *h  *n  *s  *t f  Gh  Cklmnp  Gs \t w  *y 
+l  k n  *s s  Tt   *s 7t 6l  ys  sf  Gk  Gn !st l  *t n  *stl y	 f k )ol  gm Hn r  qs  *t   l n ,s t  yr  Ns  Xb  Gf  n  *s  ]t  wx  @b hfkn p r Bs ty   -Yr gt +Hp  b  *n s k  *s  Gt   *@   Gn  *s  Nw   G@bfkln prst  *x y	   *kl n p frs 5ty  6n  s  *w  *y  sk  *s  *t  qp JZs  gl  Gt   *ks  t  *y  b  l  Gn  *s  *t  wx  Gy k -l  Gst  wx  \l   f  Gl  *n  *s  *t  Gy  b kls  ]t  wx   k  *s  *y   l  gn  *s  *y  -km  *s  t   b f  k r  Gs  Gt @bfhklmnprstwxy  rkl Kn ir  *st  *s  Tt r _kl nrs  Gfk  *nr >tn  s  Gt k s Cb !f  *k  gn
+  Tbklnr  *st  xy  *lt x  Gf  *lbk m n t iw gy l Ut &k  gm  Gt l s   *l n  wr  *s s mr 
+s  Gt t bf $Nklmnprst xh Tyl $Nn Bn  5k nr 5k b lnp  *s  txs Ct t kl  Gprt 6n  wy th  *n t  Gl  ?n   *bf  Tm  wrstm t  *n  Ns  t  f k  grt _rk 6nr  *s  tbft  *n  r  x r nxk rm n st  wxyl Ht  k  Gn  *ts +Ht k Tmp stx .l tl 	t vs  Tn  t |n  *fk m  x  $Pm  *s   @ gfkn |st kqh k  *lnt Cm Sr   l r |s >rkl m prt  kn r  s  Tt  bkt n  Nn  r sk  *l  lr  *s  'p  *s fk  Gn  st kl  *ms k m x  b  *f  .lfklp r }%st }Bxn 	r onx s FTk n  *f  *s  Gy  bf  *kl Cmnr  wst gym n  ]st  k  *n   Gs xfkl m 6nstxt 9x   b 7Ym  *srt 4m gs  x  &f  Gl  *s ktr p Tr  *f k sb Tn gbs  *y  Gnp  Nn gtfhk lnp  rst  x  Gy l 5ny p@ fk gr t n t wrsnt ^px pstnr  *s Ctk  Gl gt |t  *ln _r  Gt  x k m n gs gt kl 15mnp  *rst w xy  k  *lnrst  b  Gt k  *n  *l s   ?l gr  *p  ?r   *l  *nst sx  k  *s t  Tf  Ns <f gk FTr  s  txl s   n @St   *kn  *pr  *s  Gt  *n  ?tkt  *n Ht  Tk  km  *sp 6@  -@f .hklmnprst dwx 7ey r  *s }n rs Et nx sb  *k  ?n t  @f  *y  (kn  *s t  Gls gt  wxt r   G@ f 6m  ?r  *st x   k 6n  *srt Ux  *f $Pm  b f  *l |mn p &t y  Gks f p k (ptlr  sm /jp Xznr -k  5km  *s xns At  *m 
+t  *yn Tk  l gk  gt kl n <un  Ul  *n  *s   b  Gf  wkl mn r zst sx  Gy   ]mns  t   *k  *s  *t   Gm  Tt   G@  l  Gs  &n Hs  *t bfklmnpstw x 5By  <l  ?n  *r  *s   *syx <l  )n  *s  *t  Fk  *y bn s  Gk  *n  Wt  b  *k  *l  Gst  m  *r z@sy x  X@kn  *s  t  Gn  r  *s t	   f  k  l  *n  *pr  Gs  Gtn  wls  Nm  n  ?s  *t bfklm nprstw y   Gk  Nl  *s  .l  Nr  i@  Gf  Gl  n ir As   Gns t  *y   l n  *s  *t  wx   G@  k  Gn  Gs  Gt p Cr  *s   wm Pr  *s w  G@  Gl  Gm  Gn  *s  Gt *y   Gm 6n Zr +st   *s  ]t  wx  Gy
+   b  ]f  Gkl @[nrst y  
+ k  Gn  *s  *t  *y  Gl  Gm  Nn  *s JZt   s  *t   l  Gm 6n @k  wm  *r  Gt   l  *s bfhklmnprstwxy  Gkl n  *s  t  *y  *s 	t   b k  bl  gn  *s bt y  Gf  Gm l  wm  Gn  Gp r  *s   g@  ]b  *y	   Gfkn Cps \t _Lw  Gy  Lr   *k  Gs   l  *m 6n  *s  *t   ]k  Tlr  *s  Gt   *s Ax   Gbh  Gl  *n  Gs  *t 5wm  fk  Gp  Gt
+  	@fkl Cmnstx  Gy l  Gny s  6n Vs  t  *y   *s 
+t l  Gn  *s  *t  Nw  wx 6l  *y  Af  l  Gn  *s  *t  *y 'n 2s
+ bh Gk  *l  Gm  Gn  Np  *st  l  Gtlk FTy   Gk  Nn  r  *s   *f  l  Gn 6r  *s  *t  Gy @ fk  gl  s  Gt rx 6ns  *y tt   Gl n  *s  Gt   m  *s   b  Ck 
+ln  st  Gx k  l  gn  s r   *l  *m  *s  sf ln r  *s  *t   Nhl  *s  ?w  ,js  t  *y  )k  wlm 7Yn  r  Gs  Gtf l Xm  *s  Gt c	p @bfhklmnprstwxy   Gb Cfkln Pr Ist  Gw  x  *y  n  *s  k  Gn s  Gt  *y k  Gm  Gn  Gs  *t n  Ak  Gn  *s   Gkl  *nrs (t k  Gm Ins  Gt *x  *y   l  Gns  wx  9p  s t  Gk  Gx  "n  Gt  sbklmn rst "xy t x  Xb f  l n  s  *t   f  ]n  *s  *t   b Tn  r  *s  *t k  Gs   *s #t  2f  l 6n  *s t   l  Gn s ty s  ^Kt  n Kr  *s  *t   *kn 6p  Gst   wk  *s  /lk  Gn  *s bfhklmnprst @wxy   gk  *l  *s  Gt   *l  Nr  s  Gt  gx  
+n  Gs   Gh  *l  Gn r  *s  *t  p@ gb  *k l  *m  n r +s Tt  wx  *y   ]kn  Gp  *s  *t  gy   *s  qt b 	fh  ]k n  Gp 	rst  wxr s  ]l  *m  Gs   Gm  Gn 2s  t  Gy   l  Gn  r  *s  *t  :k tn  Gs   Gl  ]m 
+n hst  wx  Gy   f  b fk  Gl im  Gn  Gst sw  *y n   Gf  *k  Gl  Gn  *s  Gy	  b -fk  #lnr  *s 2t  vnr f  *m  As   bl  *n Urs  *t  Gy  2k   ln   s  Eb  Gn  *s @bfhklmnprst 8 wxy   Gn  Gr  Gs  k l  n  Grst  *y  
+tn  k  ?s  *y   Gklr  Gs  6n  *s t  *y   b  Gk  *n  qs  *t  Gm  Gs   b  *kl  ym nrst  wx  *y  km  *s  *ytl k  0f o7m  Nn  Gp Gs  Gy  .ak  Gs  *t   *f  *nr  *s  *t   Gm  *y  T@ k  *y
+ b klnp  rs Hty   Gk 
+n  r  *s  *t   Gf  *k  *s   r  *st  *y  mr  *s   l n 8s  *t  *x  *y   gl  Ns 8t  /l  Gr @ Wfk *Bl  Gm  *nprst /x  Gy r  *s p ln  *s  t @s  gm  f k s  *ttn p4x  *s  t  *y   Gk  Cm n 7Yp  *s  *t  Gy
  f Ckl  Gnrs  Gt  wx  Gy  
-l  gn  *sk  *y  k  s  Gy  m  *n  *s  *t  *y   l sm  gn	  Tb ?1f n  s .t  Nw  wx  *y  pkl m  *ns :t  y  Vs  t  *y  ik  *n  *s  *t  wx  Gy b  *f h oHklmnr  *st w  wxy   l  yr  *s  Gp As  *y   n  *s  Gt   l  gn  *st  l 6n  r  s  b  f  *n  *s  *t	   Nb  k  l  Cn ors t w   Gn  ]s  t  h 1Bm  *n  *s bfkl  Gmnrst  Cxy Wl  Gr  l  ]m  *s   l  Gnr  s  *t  s t   qs  Gt  *y   *k  l  Gm  *n s  Gt  n  s  *t  Gy   *n  qs  *t  wx   *st  n  *s h 6p  *slmn  g@   l nr  s  Gt  *y   *st )t @bfhklmnp Mrstwx   Gn 4s y ll  wt   gmn x s  *k  *s -y  gmt y 
-r b Nlm nr ot 	y Zs  Gy 1f }=yktrl 
-y   G@fr  *s y   *k ,s  *k  qs  ms @t  Cx tr ?t  Fdpr  *sp y bkstyt +Uyx 
-r xy   *s y k tl   Tm Tn  gp 	Tx  gk  Gtmr k Gm bfk olnp Htrst  wx  Gy clr gt  *y 
-k MGl r  Gn Cr  k  *ln  *s  Gt s !t   wkl  Gmn  ]r ]s t   *k  s  *t  Gy  sk  Gl  *s  |b 2f  Gn  *s  Gt  lf  *n  *s  *t  wx @bfhklmnprstwxy   Gn s  @  Gl  Ar  G@ l  Gr  Gt   wf  ]l rn  s xMt   Gb h  ]k dlnrst  Cx 4y   Gf st   l  r  $f  Gs  Tt t  7fr l  Gn  ]r  ]t x   gn 2s  t  *y   k  Gn  Gpst  *y   l n  *s  Gt  wx  /wm  *s  Gy   bn  Gr  *s   k  Gn  *s ix   *k  *nst   Gl  *n  *s  *t  gy  n  *s   2ln  gp Er  *s  *k  ]t   *@ m  *n gp 2s  Gt  Gy fk ol  Gmn Pr st  Gxy   l 6n  Gl  Gy   yb  Gk  Gs kr  *s   n Ip l  *s 8Of @bf  ghklmn prst "/wxy Al  6k l -fr  *s  k  l  gn s   Gl nrs  Gf  Gl  Gm t  )l  *s   Gm  Gn Ls  t  *y   Gkm  n  *s  Gt   *k  *n  s  *t   *n  Gs  tx l  r  ab  Gk  *n 2st  wx  Gy  f An  *s  *t   Gt ry   l (n 	r  *s  t  Gx 7fn   gh gl w @  Tn  sb  Gk  Cl Cmn  Gpr  st  *y   b  Gk  *n  *s  Gt |m   wr  *s f  *npr  *s st Lw g@ n  y b  Gfhkl smn  *prst <w  xy   ]k  *s  Gt  An  *t  G,l  Gn  Gr  *st  Fbp  *s	 k  l  ]nrs  ]t  x  *y s   *n  *s Kts  t  *y   *m  *n  *s  *t  wx   l  Gm 6n  *s  Gt   Gk  l  Gst k  *n  *s  *tl   l r  *s   Gk  *l 
-
-n s  *t  *y	  bfkl  Gn  *s  Ct  Gy  l  gn   Gk  Gl  *s s  *y   Gk l  *n 3r st  wx   l  *n  Gs  *t  Gy  k  *n  Gr  s  *x @bfhklmnprstwxy   Gn  gr  *s Ly bln  Nr s qtxl s  t  *y  /t   Gf  *km  *n  *s gt   *s t   *s 5tn   l 	r  *s bkl 2mnrst  ]wxy   l  *nr  *s  *t k  An  qr  ]st  wx  f  Gr  *s k n  *s  ]ty   *n s  t  R   sk  l n  Gstx	  Tb !f  l n Pr  st  Gy   Gf  *s  Gy l  Gn  b k ln s  t  Gy   Gs Tx   l n Tr  *s  t ix  y	  b Afk 	lnr  qs  *t   l  *n   Gs At Tx  Gl  *n  *t  *yn l  *n  *s  *t  s  *y l  *n  *sk  gs tb  lns  ]t +t "Rx  s t 1 t  fklmnprstx  wy  Cmn  *st "Rx  t  wx  Af  Gl  *n  *s  *t	  f  Gkmn  s  ]t x  *y   b  *n Sp  *s  *t  wx   k  *l  Gs ib pt k 2s   g@f nst gx  Gykr   b  *n  *t   ]f  ]l p  gr  *st k  k  *s )$x  *s  *t  wx y	   b  ]f  Gkm .nst x  	b  n  *s t f  l n  *st   l 6n s  n  *s  lf  *n  r  *s  *t m  rsty  l  Gr %t   l 6n t   gl  *n 7r  Gs  *t  Gy s  m   *fk  Gmr  ]s  *tx b 9l sm  *n  *sl   gn 	t  *y  *l  *n  *t 
-l  Gn   l kn  *s
- fklmn p %sty  k r   Gl gm  *n ]Fs  ]t  wx  k  *n pcp vs  *t  *yn  Zr  *s  .k *s  *t   *nr  *s  *t  Gy -n  Gt s t  dn  *s dt @bfklmnprstx  Gm  *n  *s .l  yr  l  gsn  ]s  *tt   *k  Gr s  k  *s pDt  Gy n  *sst  r x  ns Ut  wx   *s Ht l  *n  *st  wx  Gfmnt   *s gx  Af  l n r  s  t   Gb gk  l  *n  ]s  t  Gy  k  Gm An  r  *s  *t  Gy	  bf -k l  *nr  *st   l 6n ,s   k  l  gn s  yt  t  wx  n  Gp @  Ghk lmn }(pst x s ,t   *l  Gn  *r  s  *t  ln  *s xl s x   b Cm  *n  *s At  l Anp  Gst  ZQl  *s   Gm  Gn
-  Tb  Gf  Gk l  Am  Gn  rs  Gt   Gn  *st   r  *s bkl Cmnrstxy 	?l |s   ]kn t  wxt s   *n  *s t  
-
-k  n s  *t  wx  *y  k  Nn  st   *nr  *s  *t n t gx	 fk  Gm )/n pst  wx 	r ct rx >r p  ]s  *t t gx	   f k  l 6nr  *s ix  Gy  *l  Gs  *y   Gl  *m  *n  ]stxy  2r n 4x   *s ht  Gyn s t  wx  l Cm  *n  *s t   wl  *n knp  Gst  wx  Gy   *nst  wx t r  *s  *n  *t  wx  If  *n  *s  *t k  Gs Atb 7fl   *n F,s  *t gx  Gy @bfklmnprstwxy  gs 
-
-ty  Gpt r  *s x  *l )n  *s  *t  Gy   b  *n  *st "Rx   Gf  Gn  *s  ln  ]pr  *s ct  wx   k  *n  ]bpt  wx f  *s   ls  *m  *t  "k  Gs  ?ty t   *n s  *t  Tb  np  Gs tt  wx Af 2s   Nk  l  Gm  *n  Gst  b  l Cm  Gn  *s  *t x k  Gnr  qstt  wx  !f  *n  Gs  *t  *n s t   b Af  Nn st  wx   *f  l  Gn  *s  *t  k  *n  qs  *t   b  l n  s t
- kl -mnr &)st wy   l s k 6n Is  Tt  *y  Ns  Gy   l s It Tx   Gk l  *n  *s  ]t  wx k  *s  ]t  wxt t  wx   Gl  m  *s )|@  n ANn m  Gn  *sp (5@ bf  whklmnprst lFxy !r ln  *s  *t y   *n  *s t  wx
-  sblm n  grst x  Gy   *n  ?r  *s t  *y   Nn  *s  Tt  'k  l  gn  *s  ]t  b 
-f ,n >Nr  ]s At  k An s  *t J1yknr  s n t  wx   k  l Km  *nstx   *f  Gm  Gn  *s   gk  l  *n Tr  s At l  ]n 2sls m	  k  *l  Gn  Gps t  wx  Gy  f  Gk  *l	   bk  Gl  m  Gn Ap  ]st   *l "n n  *s  *t  wx  Gy   l  *n  *s )t  wx m  *n  r  *s  *ty  qnp   k  *n  *s  *t   Nf  *n  *s   ]k 
-pn Is	  sbl Cm  nr  s @t  *y   *n r ,s  t  *y 1Bn s   Tb f An  Gs  *t @bfklmnp GBrstwxy 2m  Gn  Nsy Sp  Gkl  ?n  *y   gn  s  t  *y	  Tbkl nr 4s  2t y   l  *s  wx k 6n  s  *y  Tk  s  *y  (n  *s  *t	  l n $sp  st  Gw  wx  *y   *f  *n rr  *s  *t kmn  Gp  *s =t  *ytr  *k s   n  s  *t   l om  *s  Gt   Ck  ln  Gr (s  As  Gy
-   ?@ /b qfkl  Gn  Gp !st   l  m  *s  t   qs  t  *y   Gk l p  r  *sk Bnrt xst   l  gn s  t  f  *s  Gy   *n  *s  t  wx  'b 2f  l  *s   b f  *n  *st   l n 
-r  *s  *t bfklmnprst  *w  Gx  Gy k  *l  Gt k  lm 6n  Gr ds  t  Tl  ]sn s ln Fdrs t  n ss t $]n   *s ]t  n  *s  ]t  wx   ]kl  Gnp Erstn l  srxns  *m t  <zt  Gm n   Gk }(p st  yl 	r }7s  $_k  nr ?s t $_nt Af k	   Gkl *m  Gn  *r  qs t  Gy   gns  *y   *m  wx knt n pcr  Gs  t r  *sktr l  }7k  ]t  Gk  *s It  Gln   b  l  *n  *s  *t  "f  Nk  *n  *sx @bfklmnpstrp  s t  Gy sb Elys x k s ln 6$s t  Ht  *y  *k  gs  Tt  gx knst  Gk  *st r  *s l ry s /t@   Gk El  *s  Gy  (5m  *s Tx   klr   k  *k  Gm p  s  Gy @bfhklmnprstwx vy  *w l  Gn  Gr  *s  *t  wx   gn  *s t  Gy   ]kl .nms   gn  s  *y  wp  Gn  Gs  Gt	   Gbklnr  Gs It +(w  k  *n  *s  *t  Gy   Nb  l  gnr  Gs  Gt  *ys t   *m  *n  *s t  wx   Gn  *stk 7t   Gk  *n  s  *t  Tkmn s  *t  Gx  *y  *k s  Gy   Gs t   Ck gln  *s  Gt   *st   gk  *l  *s  *t
-  b -kl  Gm n Prstx s  *y   Gm t  s t  Gy
-   b Ak  l  Gm  Gn  r s  Gt  Gy ql  Nm  Gp gt   *f Ir  *s  ]t   bfklmn  Grstx 8y /k  *s  *t y lr  *s y /f   k  Cm  *n  *s ,t {w 1n   Gk ls y   n  *s  *t  wx f  Gk "n  *s qt m k l  gn  Gr Hs  yt   lt sy   *l 
-pm  Gn  *s  Gt  Gy  
-
-b f  gk l =Mmnp  *r  Gst (w  *x  Gy   *k  Gs ix  b l  Nn t  wx   ]l  Gm  Gnr  *sn  s   f  Gnr  *s  Gk  s  wx  Gy   t   l  ]n  *s  Gt   Nb f 6h  Gkl n Pr  *s  Gt Pw ix  2s gt b oHf |kl [mn p  Grstw  Gxy  Gkl  wt   n  *y r  *s  t  *y '(n  Gt f  gl  *n  Gst /yl   l  Gn  *s  Gt   b  *n  *s  t   *k  *n  Gr  *s   Gk  Tl  *n  *s  *t s  t en @ sb  Gf ?hkl mnrs tk n  *s $srmns   wl  s  Gy  *k  Tt   *n  *s 6t   Gn r  *s k  wx 	Ty	 f hklm  gn  *st  *k  Ls Os *y 
-
-nt   l  Gn $r  *s  *t   Gn  *sxn k  Ns  *y  gy @bfhklmnprstwxy f  h +Uk ul  *mnrs  *t  Gy 
-l &)t   k  Gm  *s xMt  qs  ]t  sk x   G@  Gbfklnrst Tx |y  l  *n  *s  *t   *k ~n  *s  *t  +nr 2st gx s   *n  r  *s   f  ?hk  *nst l  *n  *s  *t   *k  *y  ln  wt   *n ir  *s  *t  "f  Gk  Gl  *n  ]st  y  k l   ]b m  Gn  p  *st   lm 6n  ?s Sp   *b  Gk l  Gm ns  *t   *m  Gn  *s  *t bfhklmnprst  ]wx  Gy nr  Gt x  ?n t  wx  f El  *n r  *s  *t  *n  ]s   b  *n  ]st  wx   *n ?r   bfk [m @in ?rstx  *y   b  Gn  *r  *s  *t nstx fl  Gn  *s  *t   l  gn  *s  yt  k  *y f n  *s  *t   l  gn  yt n  t  An  r  *s  ]t  wxn r s  gn  *s  Gy  b l  *n  ]p Hst  wx   *f  *n  r  *s  *t	 k  l Cm +n  rst x  f  *n  *s  *t  @b  l  gn  *s  ?w  Gn r   b  *n r  *s  *tr s
-   bfk  Glns  *tx y  k  *s  *t y rt  wx  fm  *n r  *s  *tt  (r  *s   *n  ]st ]x   l  Gm  *s   *n  *s  qt   b Cm An  *s  *t  bln  *st  Tx s  *y   *s  wx   gk   Gl  ]n  *s  *t   b Gf 9k Al Cm  n  Gp  ?r  *s  *t  wx  Gy   l Cmn  *s  *t   l  *n  r ds  *t
- b  Glm oHn or 8s ot  ]xy l  *n  *s  *t tn  *ss  *s gxtr ct gx  @bfhklmnprst wx  Gy  Gk  ln  *s 6t  Gy s  *t   lnr  *s  Gt  t  wx  b  *n  *s  *t  Gym ^p  fln  *st  wxm  b s  wx  'bn  *s dt  	l  Gs  *t   *f An  *s  ]t  wx bk  lmnrs t  wx  *y  *lr  ]t gx l  ]t  wx   b  n  *s -t  wx   *n  qs  Gt  *n  qs t  qf  l 6n  *st r  *s Bn  *t
- b  wf  wlnp -r  *s 8t )$xn   n  *s At Dx  st   b  Gl  *n  *s t  wx  ql n  qs ct  
-
-bfhkl m Inrst gxk  qm  qn  ]t  wx r  *m  Gs  Pr  s  ]t  wx  ,st  *y  }mk  *s  s 
-)t  wx	 kl np  *st  wx  Gyn r m  *n   b  *n  *st  wx   *n  r Ittls  *n gx r  *s tk  *n  *t  wx Dt  wx	  "k  ]lm  *nr  *s tx n   ?b  *n  *s  *t on	   b  Gl  *n r  *st  wx y l  ]r  qs  ]t  wx   G@  Gkmn  ]pst gw xy n  s t  f  l n  *s  *t  Tb 'f Cm  Gns  *t  n  Gs  *t s  ?t b f  h  Gk  lmnp  st )$x  Gy   *r  *s  *y n   l s  Gt )$l ct   ?f  Gnr  Gs  *t   b  n  *s  *t $sx  Gy bfkl  Gmnr  s Jt  *y  Gl 7fr	   b k  l  gn  *s Tt  wx y   *n r  *s  Ans  *y   l  gn  *s  wx  <#k  Gs  Gt  Gn  *s  *t  Gy   ln  *s  ]t   r  Gs bf  Nhk  Gmnprst *wxy  Gkl  Gt   Gn  *s t  *y   b  Gk n  *s At	   k  *ln  rst  wx  Gy   l Cm  *n  s   l @in  *s %t  wx   b n  *s  *t k  *n  wp NCst  ]x   *n  *t x l  *n  *s  *t 2s  *yl  ]s  t Py  *n  *s ot  Gy  b "k  Gm wen  *s t  wx
-   bf  gkm  Gn r  *s 2t  Gy   l  gn (s  t  
-n n  *s  *t   l  *s ix   *n ]p  *s  *t bfklmnprstxy   ]klnrst   n s  *t k ux Fdn   b Cm  *n  *s  *t  gx   *l  *s  *t y b k  Gl  *n +s  Gt y )l  Bbn r  ]s  Gt f  Gs t  *s  *t y   *st   *np  *s  *tl  *s  *t gybn r r  *s  n  *s  *t k  Gt   Gf n rst  Cx  Gy   Gk n  *st  wx r  *s Bn 7t  wx  lf  k  Gn Prs  *t   *n Gs  *t  wx   ]klnr  ]s  ]t m  *ns  *t pyn ct t lt Ks  	s At mk   Gk  gm  *n  Gs  ]t y  'f 4l 6n 'r  *s t
-  /b +kl n ur s  *t  wx  y   *n  *s  ]t gx  *y   k  Gn  *s  *t   Gn  *s  ?y  @bfhklmnprstwxy   *l  *s  Gt
- @k lnrs  ]t  wx y  m r  *s  ]t  wx Ss  ]t  wx  Ns  x  Cm  *n  *st  k Cm  *n  *s  *tl  t  t f 'kl np r  st x  *y l  t   n  s  ]t gx  *y  r   Gk Cm  Gn  *s t  )k  ns  Gt y  t	  b  Ckl n r  s  ]t  wx cs   l  *n s  *tx  ?nt  wx   *f  r   *l 9r  *s  *m  Nn  *p   *f ok l  ]m npr  *st  wx  "k 6n  Gs   ]l  Gm n  *st  Cm  *n  *s  ]t  wx  Gy @ bfhklm (nprs )t  wx  Gy k   *r  *s Pw  Gs xMt  Gn r   Gf  *s  *y   l 6n  qs  vr  *s  In  Gp  *stx  Gy  k  ]s  *n  gt  f  *t  [Bl  ]n   b  Gk  l  Gm  *n  *s  Gt ln  s  Gt  *y  qs  *y  Tl  Gs   Nm  Gn  *s   b  ]f  Ghklmnprstxyl k  ]x  )n  *s  wx   ]k n  *s  Gt  wx  fkns t  wxy   b  *n  Gs t  wx   l  *n t x   b 2f Cm  *n  *s  *t   *n  ?p  *t   n   l  *n -st y  Cm n  *s  *t l Pr  *s  gr  ]t b ;fhk 9mn p rstx  *l t  wxn s  ]t  wx kr cm   Gs ot  f  Gln cs  *t t  Tb  *n  *st x  &f kst  wx &f  ob  *n  *s  *t   b f Cm  n  *s  Gt   f k  *n 3st Pw )$x  k  Gn  r  ]s  *t  Gy
-  b f  Gk l nr  st a`x   l n s  ]t  wx  Gy  2f  l  *n  *s  *t  Gy  *k n  ]s  b  *n	   Nb fkln )/st  Gy  s  ]t   ]s kt  *y  k  l  *n Is .t   b  Gn  *s  t  Gy bf 6hklmnprstwxy  *@  Gk ,l m  yrs  Gt  Gx k t	  sbl  *n  *ps 3t ^#x Py Os  Gt gx   *n  *r  *s  Gt	 l  wmnr Ist )$x  *y   *n  ?r  *s  ]t  wx  *y   b Sl Cm  *n  ]s t  wx  gn  wx   ]l
- bf hkn  *st  wx y  *l r  b  n  *s  *t  G@ ct gx  s  t   *f  l n  s  *t b  n p r  s tl  n  *s  *t  Gy
-   s@b (l nst  wx  *y Qt  Gkl   Gm 6n  *y   *s w  Gy  f  l Cm (nr  s  *t  Al  @bkln  *prst "Rx  *y   *st  b %f  *n  *s  *t n  *s  *t "x  y  t   ls 2t 	x  b 2f  *s  *y k  *n  s Zt  wx Py l t  wx  f  *t  ]f sk  Gn  *s  *t  k (n  *s  *t  Gy	   b Cf Xl sm  *np  *st !n  Tb ?f  gl n  *s t  wx bfklmn 9pr @st -fw ox syl  n  Gt   Gt x  k l n  wr Hs  *t  *y   l  *n  *s  ]t  wx  Cm  Gn EJs  *t  *y   *s  ]t gx  st Tx   *st  Os
-  wbk l  Gmn  *st  wx  *y   *st  wx  f  *nr  *s At  wb  *n  *s  *t k  *n  *s  t  )$@  !f  *s  *t	   b  Gf Cm  *n  *s  *t  wx  y   @  Gl  *n  *s  Gt   bn  *p  *s  *t  *x   Gl  r  *s kmn  *sl  sb  *n  *s  *tbl Os i@xr An  KD@bfhklmnprstwxy  Gkl  r  ?s 2t   ]k  Gn  *st  *y   *s t  Gy	  kl  *m  qn  s  ]t gxy  6n p  *s  *y   *n s  b  Gk  *l n  Gs It   wblmn  prst  Gwx
-   Gfk  Gm  Gn  qrs t  wx  *y 	s   l  Gm n  *s  *t  wxn ?k t rf  Gm  Nn  ]t  wx   *k  Gr  *s  Gy   *s t  _9f  *n  *s  *t  /4n	 bfknst  wx  *y /r r  *s  *n  *t  Gy   k  s t  Gy   l  Gn  Gs  Gt   Gm 
-
-n  *s /t  wx   *f  *nr  *s  *t  Gp  *y   bnp Ist  wx st  k  `r  *s  *t  t  wx   *n 	Xr  *s  *t	 bk l m  *n  ]st  wx  Gl  yr   Nl  *s  *t f  l n  *s t   l 6n  yt ls  ]t  Gy  k Cm  *s Py t gx   *n cr  *s  *t bfk  Gl Cmn  Gp ?1rst gw  Cx y t  wx   bl  *n r  *s  ]t gx k  *s Bs gx  
-lr  Gst  wx 7s t  wx   b Af  *l  *n  *s  *t k  l  Gns  *t x l  l m   *np  *s  *t Z9k  !f  l  Gn  *s  *t  -bkl  Gm np  Gr  ]st ]w  *yf  n p  ?s r  *s  *n  *s  *t  Gy  ]f  *y l   Gk  Gn  Gpr  *s  *t &b "kln ;sm  k  *y   b Af klmn  r  s  *t  wx   wf JAk  *n  *s  *t  *y  cn  *s   *s t   @  Gk  Gn  *s Ct   Nfm n  Gp <r  *s  *t Tk  Nn Js   ?m  *n  ]p ,s  Gt   fkl  ]mn  ]r  s :t  ]x  Gy   b on  *s  *t   *n Cp  *s  *t   Nb  *st   b  Gn  *s  @ &bf  *h cklmnprstw  Gx  Gy l  *t   Nn Hs  *y  Gbn  Gr  n 
-t  bl  *n  Gs  *t   gn Vs  t  *y  Cm  ]n  *s  *ts )$t  n =t   l n Pr Bs  *t  *@  *n  *t @ kl @m n  st 0m s  t  *y   t  b  Gh  *l  *s @bfhklmnprstwxy b flmn Ip  *rs  *tw  ?n r  gy   n  *s  *y p   l m  gn S[s )t @ zyt  Cy  ?s w  *k zs  Gt   G@bfhklmnprst w gxy n  *s  t   qs  Gt  lm nrs  ]t  wx  l  Gm gs f  *k X.m  Ct klmnrstt  wx f  *n  *s  *t   l  gn Bs  t   *nst  kf  *s )r  Nnp  Gt  Nk Cn t  :k  *n rst   ?p s t  
-nr "k  Gf  p  &p  Gt  wxk n r  *s s  Gy  mfmn st  Gy   l n  s .t  wx   r s  t  sn Gr  *s  *yk )$rstx  Bnr  *s  *t Rs  sb 2f  *n  *s  *t   b  Gl  *n  *s  *t ln l m  *nst Dxk  *y n   *sx sm  sf 6k  *s w  *k  Nl  ]nprt l Hbfk 6s   *s rx  ?k yr   m  *s  hkn  st  n  *s  Gt  wx   Gk  l  *s  Gx   ?@  Gn  *s  Gy f ihk  ]lmn 6p  *rst  wxy n  Gs sm %Inr  wx  ]b p  gb  n sp  *s  *t  *k 	t t   *l n  *s  *t nr  qst  wx  Gy   Gstx &f  *t  bl t  wx ekl  Gn  *s bt  Gy s  *y tx  b Af  *n  *s  *tn   *l  r  *s nos  sbfk `l mn prst iy  Gk  ]t  wx   Gl  *n  s  *t gx  n  *s Gt  wx  Chk dn Sp  *st  wx  Af  *n 	r  *s  *t   Gkt  ?1r  Tl  *n  r  *s  *t   l  *s  l@bfklmnrst  wxy  *l  ]t  b l  *n  s  *t ix y ln  wp  r  qst  wx   *n  *s  *y   Gm  Gs   *f Zn  *s  *t   Nb  Gk  l n /pst  Gw x  Gy   *n  *s tx -n   l  gn  s  Gy r  Gt )x
-   G@f  hk  *n 	p sr  Gst  ?l n  *l  Gs  Gt   G@ 75n  *s  *t 7ry   bkln  st  Gy   l ]Fn  s  Gt  f  *s  yt  *y  	l  Gs  Gt   l  *s  Gy	  ab  *f k  Cm n  *st w k  *n sp  rs   l  *s $t  wx   gf b  *kl  Gm nps  Gt lw  y Il  ?n bf  Gny s `f  ?st Sl   *l 7fp  *t   Gn  Gr  *s t
-   Gb f k  *l  Gmn  Cr  Gst k s   *h  n  *s  ;@bfhklmnprstwxy   ]lnr  s 1t  *y   Nf  Gs  s  Gx	  S>f  Gkl oHn  Nr Is  Gt  *y   *n  *s ot  *y   wlr ,s  Gf  Ns l m n  s  ]t  Gw  *y   G@  *n  s  *t  *y bf 6hk 	lmnprst wxy   Gk ll  *s   *@ Bl  *n r  *s  Gt l  *n  Gp  *s  *t   *s  *x ums  Gtt  2hr  *s s  Gt  ?p  *s  Gy   Gl  Gn  *st   *nr  *s  *t   l  *n  Gs  *t  Gm #5s :7t  Gy   *f  *l  *s Mt
-   *f @k  l  *m n  r Is t  Gx  cNl  Gn  Gp  s  *t  *y   *n  *s  Gt w bfl  *mnps Mt 3x  *y  Gk  *n  *s  *tlnr k ct  wxn  Gs Tx Xk f  *stk  ]t x   l  *n  *s  *t  wx   l n Pr  s  *t  *y  fk  lp  ]st  wxr  ]b pk At  wx n  ]s x  i@ <bf  Nhkl  Gm (npr ostx  *y k l  *s  *t y n  wx   *n  *r  *s `t   wm  *n  qs t  *y "s   *k  *l  Gn  *s  *y  b  f hkl smnr  s  *t  *y  gl  *r  	Tm  *n s  *t  *y   Cf  l  Gs  l  Gn  *s  *t  Gyl  Gn   ]s  yt  *y	  sfk ln Pr  *st  Gy  6r  *s  ]t   Gh  *s  k  Gn s bf  ?hklmnpstwx  Cy  ol  Gn  s  Gt  *y	  k l n  Gp  ]s  *t Tx y
-   b Vl  n  Gp  Gr  s t "Rx  *y  b k  *n s t  *y	  !Db h  ]knp  *s  *t Vx  k  l 8t   *n  *s  *t x	  ?k n sp  Nr Is  t Tx  *y  bl  Gn  st  y   *n ]s  *t   *nr  *s  *t   l  *m  *s  Ct  sfn  *s :t  Gy +Ak   b 2f  Gk  l  Gmnr  s  *t  Gy s  Gy  dn  *s  *t  wx  Gf  *l  *s  Gt &y   Gm n  *p  s  *t   k  l n  *p  s  *t  *y @ ybfkl smnpst Ax  *y   f  l  *s   ?l n r  EVns  *t  Gy   *f  gk   k ?n  s  t  *y  k  Gs  Gy  Gk jn  Gt f  l  Gm  gn  *s zt x  
-l  gn   G@ ab 2f Ak  wl  gmnpr  *s  Gt 7ry   G@ f  *s  Gt l  *n  ]t  wx b Gfklmnrst x  Gy /r ot  *n  Gy   Nbk  n  *s  *t  *y  k  *s  Gy  Gr  Ns  r  Gs k  *ln  Gs  *t  Gy  gl  Gs   l  *n ,s  *t   l  wm 6n 5t w   ]l  *s  Gy   Gn Pr  *s  *t  ?y  b  Nk  l  wmn  ?pr  s  *t {w  *y  
-l  *n  Gs  *t  Gn  gt   b hkl  *n  Gprs JYtw  ok  Gp  *s   Gb  ]k  Gn  *s  Gt "k  Ct k  Gp ir   *f  *s  Gt @bfhklmnprstw bix >y  f  *n r  *s  *t  ,l  *nr s t  Gx  Gy  n st  wx  *y   *n  r  *s t  Gy bfhklmnprstw lFx  *l <ns   ?b m p  st  Gxn  *s Atl t  *p  Gt	   bfl mnrst n gnr gsf k fk  Tlst  ?s Rtr +Ustl Gt gx s   l  gnt n  ?nr  *lt k ^kt  k )s  mpt l rf k gy  gr f gk 6n 2s t  *y  l  *k l  Gnptlr  ?st  ?y ' f ?n  f f  Gkl  Nm zn stl  ?f k  6n  ?s y l gr  s k  *y  l n |prst  *y  fkpst >l ^k  ?l f k  *y  ?s  *t gx  Nr  *y fk l  Gnst  Gy l ~r l  *s t }%t gx   l  Gnpt /k  r  s fk lmn /prst gx  *ns  n   *nr  *s f   G@ ]b  gn s t ?n  *t St   *f  *m  Gn  rs y  (2f
-   ?bf .h zlnprst  gn gt   *l gy  *n r   f  Gn  s  Gt pt gl gx rk t gx m  *r ;n  *@  ?l ^n )r  Gl  ]t
-  kl  Gmnst  wx  Gy  G@  *y   *n gr  Gs  *t   *f k  *s  Gt   b !f  wm n r  *s  *t   ln  *s   l  Gs	  +k  l  ]m  Nn r  Gs  Gt  *y  2bln  ]p  s  *t  *y  *n  Gt  *y  f l  qs t
-   Nbfkl m  *n Tst 6x  s   Gn  *p JCr  s  *t  *y Zk  *y   l (nr  s  *t  gw  Gy   *n s  *t   Gfkl n  *p rs .tw  ?xy  f  Nn  Gs  ]n 2s  *y  2st   Gk $>r l  *s ok   Nh   Gm  Gn  *s t  Cy b  yfhkl &m >np  rst wxy  Gk  yrnt ls 
-
-l  Gn 	t  *y sp  ws   l  Gm 6n  *s t   Gn s  Gt  wx  Cy  l  *n  *s   Tl  f hk l .mnprst  ?wx  Gy h  *n  *s  *t m   l  Gst  p  *s   Gn  *s t   l n  s t  Gy   Gl  wp  *st   Gn ]_r  *t  	r  *s  *y   Gk  Gn  *p   Gn Is  *t  *x  wy @bfhklmnprstwxy   b f  l nrst  Tw  *x  Gy  Gn  *s  *t  *y   Cn  *t   Tln   ?k  *s bl nr  Gst  Cw  6n  yt  *y   l 6n  Gr   *s y ln  ]r  *s sw Tx   ck  *s  Gt l   Gr  Gs  Gt   b  gf 6h dl Gmn rs t  *y  ?k r  Gst  :k  *s -t   Nb kt   Gk  *n   bhk  lmn +(p rst  Nw  x  *y :gl  *kr s  *y p@  Gm ln   l 
-
-s   k  l  Gn  *t   *f  Tl  *mn r  *s  Gt  s  t n  ?s  *y  @  *s   G@ Kf h  klm  Gn Gp r 5st ix  Gy  n  *s  *yb 0l   b k  Gm  *n }p )s  *t  blm  Gnrst  qf 6km ns  t  *y zn   *s $t  bn n f  *n  Gs  *t  *t Hx   Gnt 6r  *kn 2s  l  t k  l  Gm 
-
-n  qst  Gy 4s  *t   Gn  ?r k "l 7n  *st  ?w Il  ?m  ?r   *nr  *s  *t [Bk  Gs  f  k lm npr st  wxy   *s At  l   Gln p  *s  Cy s  p   ?x  xp  *s  k  *s ln  Gp  *s  *t k   l  *stk r @  l  wr  *s  Gt $_s @bfhklmnprstwxy   Gp  *s  Gt  o@ Ikl  Gmn  r  s /'t 2x  *y   Gk  *n  *s  Gt  Gw   Gk  *n  s  Gt bl  Gn r  *s t  Gx  k  *s  *x   Gk n  s  Gt  Gw  *y 6l EVt bf shln  ?prst )$x  *y  Gk  *l  Gt 
-l  Nr  Ns   *k  *n  Gr  Gs  *t  *y   Gk  l  Gn  r  Gs  *t   *m  *n  s  t  gk (m  *s <zt  qfm .r  t n  *s 2s  Gy	 h nClm bnr st  *y n n  Gp s  t   Gk  Gn  Gr  *s  Gy  !Db  Gn  *st k   r  b  l  Gs	  Tbl (n  Cr  stx  Gy  Pk  *s Pw  *y  Kr  *s   l 6n  ]t   Gf  Gm  ns t  Gy   l n  *s  Gt bkl  Gmn  Npr 3stx  *y l  *s  6n  s  t  *y r  Gn t s  t  *y   l 6n  Gt gx k  *l  Gs  Gt   *n  ?r  *s  *t   b  *f  l  n s t  *y  
-f  l  Gm  Gnr  qs  Gy  Gk  ln  Gp l  *s  s  *y bfhklmnprst Ow  wx  Cy  k <l n  *s  Gt  Ak bl  *s   Gk  *l  Gm  *s r Ys  Gm  *s  Gt  kk qn Fs >t  Nw  wx  y n  *s t   *st l  *s  #5s  t  *y  Tl  *nr  ]s  t 0x  Gn  *s  *y  *l p JYr  Gs  Gt   Nbf kl  Gmnp  s  Gt  Gyk  Nl  Gt  l  *n  *s  Gt  wx   Gn #5s  t  *y  h  *s   Gs Tt   yk  Gn  *s t gx   gn r   l n  ?s  *t   Gk n r Is  Gt  sf  *n  s  Gt   G@bfhklmnprstwxy  k  l  gn  ?s  6kl  qn s  Gtx y 2s  t l  Gn  *s  *t   gn  *s 	t  *y dmr  ]t  Gw s   *w   b  Gklmn rstx  *y	   l  *m An r  *s 7t  wx  *y  Gn :p st   ?p  *s  *bkt  f  *n  *s   wm @-p  *s XCt w  Gy kr  *s  Gt ~l fk 
-lms  *tt $
-mrf  Gm  ]k  *s  Gy   *s $t k $p  Gf  Gp b A&fklmnst  Gwx  ]y  Gk  Gl :n   n  *s  ]t  wx  k  *ynt   Gl  *n 	r  *s  *t  wx   Ck  *m  r  Gst f  Gk  *nr  *st 2r  *n  *s  *t  *y   l  gn  ?s   Gn  Np  *s  *t   b !f ol  Gn  ]rs  *t  f k   l n r  s  t  *y   Nk  Gm  n !^st gx  *y  .if  Gl  s  bfklm  Gnrstx  *y   Gl  *s  t   b  Tkl n  s  *t  *y   *k  *n gr  *s  *t  Gx   *n s  *t  *y  l pDr  s  Gt   Gk Pr  *st ix   Nh mr  *s	  @  b 6k >Hlnr  *s  *t   l  *n s t   ?fl  *s   gn ,s  *y  gl  *sr s  Gw ?t bfk Tlmnrst Ax Zy  l n  k #Yy   Gl  *n  *s  ]t   l  gn Aps   s  *t  Gy  <bfkl nst  ?wx  *y  l l  *s  In  ?r  *s  *t  *k 
-n  ?t  *y   *r  *s  t   Gmn  *s  *t t  mn  *s  *tn l  *s   s  *y  gb Xk  t	   b f  yh $[k  l @in  s  *t	   b  *fkl n Gs t  Nx  *Ol  6n 4s  t  *y  fbfk mmlmn  Npstw ^#x  *y  'b k  Nl 's  *t y r  *s  ]b  Nf p   Gn  *s /t   k  ls   *st f  gf  l 6n  Gt
-   Gk  l  *m  Gnr  *s  Gt 0Mx  *y  k  *s  ]t  wx  Gy  El  wm  *s bfklmn  Gprstw gx  *y l  Ct l  gn  Gr  *x  6n  s  *y   l mn  Gs  wr  Gt   *k 75n 2s  ]t  *y   Gb  *s  Gt   Gk  l  Gs   *n  s  *t  *x  *y  km  Nr ,s  Gt *w   *kn  *s  (l  *s ix   Gk  ]l  *s   Gb  Gkl  *s  Gt   *s St   G@  wm  Gn  *s  Gt  ]_f  ]kl  *n  *st   gn Fs  t  *y m ~	p   h .nk  *n  *s  *t   *@bf hklmnprst Lcw  Cx  Cy ,lr  Gy  l  Gm  ]t  wx	  Ak l  Gm  Gn  *r  *st  Ny  t   Gf hl  Gn  r Ts  ]t  wx k  Gn ,ws  t  *y Tk  *s  Gy   Gkns  bl 2s  Gt  Gy   Ns  Gt k  l  Gm n ost   Gf  *s  Gt   Gnp  ]r  *s  *t  Gy 	tt   *st   *s ux Bt   l  *m n  *st  'r  *s   Gf  Gk n  *s  *t  Gy bf  Ghklmnprst Pwxyl   yk  gn   Gn r  *t	   whlmn  Gps  wtx ~	t n m  Gs n  *s rt  ww kn 2s  Gt  Gy k  s  Gy s  *t kl  Nm  *st   lr  f  *m  k $r  b  *kl  Gn  Gs  Gt   *n  *s  t  *y  G@ "kln srst   *s t s  ]t  wx   f  r  *s  ]n s  ab  *s n  Gs  *t  Gy   *n  *s  t   Gk  *n  Gs  *t
-  f  Nh lmn =r =s t  Gy  k  'b Cm n  *s  *t  n  *s  ww  Ffm  *s bb @bfklmnprstwxy s |t ik   Gkln  Tr  s  ]t y   Gbf sk  Nl m ns t  *x  *y  l  wb  *n  *s  *t  wx   Gk  l  *n Is  Gt  Tb kln iprst  Cxy   n  *s  *t  *y   k  Gn  Cs  *t   *m  *s  *t  *y   *l  Nn  *t   ]r  *s  x l  *n  *s k b \fhklmnprst Jw  wx y ll xyr 2l  Nn  Cs   Lr  *s  Gx  b  *n  *s t  *y n  *stk  m  *s  *t   Gk  qs  Kb !n  Gst  wx   *n ;{r  *s  *t   ]l  Gn  *s  Gt   Gm  n  *s  *t   b  *n r  *s :t  2f  wk  *ln 6r  *s  *t  
-n  *s  )`@b c&hk  lmn 7fp Fstw  y  G@  Gk  Gn   ?l  Nmn  *s  t  gy   gh  *s  Gk  n  ]t	 b T\f  *k  l  Gn  Nr Is  *t -fs  f  l n  s |Dt  Gk  Gl !t   *@bf klnprst  wx  Gy ;l  ?n  Gt -fn  Ct  :gn  Gst  wx  *y   Gf  *n  r  *s  *t   Gst   *n  r  *s  *t  wx   Gk  Gn r  s  ]t  *y l An  *s  *t   *n Pr  *s  *t  rk  Gl  Gn  *s  *tx 	Ms  ]r  *s  sf  gl  *np  *st  Gx  m  *s   *b  @ b fhklm (n  Grstwx  *y n  *p	  bl  n  Np  r  s  Gt  Gy   *s  *t  *y   *k  s  Gy   s 6t  Gbl  Gm  *s  t f  Gn  *s  *ts kk   ybf sh k  l  wm  Gnp nCr Yst  Gx G,y   *s  Gt x   Nn  Gp   b  l  gn  qs   Gk  ]l  Gr  *s  Gt  ?x   l n  s  *t bfkl mnrstwx  *l r   G@ k  *s  *t y   Gk  Gp  *s  -fb k  Gn  *s otx  *y  Gn  ]s   *n Cst   r s  n  *t   Gn  s  *t   l  gn  s t  *s  Gx cNl @bf bDhklmnp  rstwxy klm .il gt ]_b  Gn  Gr gt   *l  Gn  rs  *t  k   *k /yln Cr  *s  *t   *k :@s	 bl  n  Gpr  st  *y  Ar   n  ?r  s  *t  *y $f   l 6nr  s  Fl  *n  *s  *t   *n  qs t  *y  Jb )$l  Gn "p  *s  *t k l UPn st  *y
-  O @blm 6n Lr  s  Gt  *x  6k  h  Gn  *s  ]t  wx  *y jn  b  Gm  *n  *s t  bl  Gnst  *y   *t Px  km  ]s -Wy  b f {k  n  *s  Gt  bfkl  Gmns  *tw  *xy k  Gr  stw y p  *sn gf t k  Gmr  s  Gy   l  *s  ]tf k  Gy   *n  s  Gt  *y   *n s At f  *t =r  1Bl  *sp   k  *n  *s  *t  *y   Gm  Gn  *t  b  Gn Pr  s  *t  *y b gl  *n  *s kt G9x  Gk  ]t f  k l  Cmnp st w  Gy  bk  *s  *t y # t  wx   l  r  *s  *t ix ^l @Dn  Ak  Gl  *n  ]p R>r  *s  t  Jbf Bhkl smn  Gprst  ?wy   ?@ s   l  Lr  *s  Gt  n 's  *t  *y  Cl  *n  Gs &t   ]k  Gm  *n  *p s  *t  Gy  k  lm n  *st w ^n  k  *s  wx   l  gn r  *s  gk 	Tl  *n  *s   Gk 
-
-l  n  *st  Gw   *n  Gs  *t ix	   lmn p 	rs  *t  *y ht   l m  *nr Is  *t Kw  gn  *s  t  Gy   l  gnt  Ak s  @ bDklmn (5prs  *t  ?w   *ns  Gt 2x   *n  *s 	t  wx   *n  *s  *t  gy r G9y   f  *k  Gn  Gs  ik @bfhklmnprst  Nwx  ]y   m n  s  Gt  *y  Ik  Gn  *s  *t  *y   ]l  *n  *s Zt  Gl  *r   *n Sr  *s  *t  &h  n  st  ]w  *y   Gl #gr  *s   np  s  *t  *w  Cl  Gn  s  *t  *y
-  b  Nh Wkl  n st x  *y   *k  *s  t   ]l  Gn  Gr   b !n 6$st   Tb   Gk  *n  *s  *t Ky l  *s ht   n 6$s  *t b -ff gklmnp Prs 5tx  *y  Nn  r  gk  *n  *s  *t  *y p  Gt  b  Gn  Gs  *t l 
-n  Cl &m  *s  *t   l  Gp  Gt	 b  Gf  *k  wm  Gn  *s t  *yk  l  Gt   Cl  *n  *s  *t  ob  Cf  ]klmn 9(prs  ]tw  wx Py  -k !m  Gn  ]pst  *y   Gm  Gn  *s t  wx   Gs  Gy   Gkl  ]s  tt -s  sb  Gk  l  gp -st s   Gl  *s  *x   Gf  Gr  *s  Ct  Gy fm  *s  Gtr 	n   *s t y   Gb  Gn  gpst k n ps  k  *s   ]@bfklmnprst   Gk  Gln 	Tp #Yrs syt gx   Gk gx  ^k 6p  l  ]n Pr  *sfl  m  n  s tn 	s !t	 h lk Am np  st  Gwk Ks l  *n  *s t   *k  *l  wr  *s bf k  *l  Gmn  *s   Gb f .k  ]l  r Vs   *k  Tl n  s   *st r  *s  k  *n  *tbf 	k Cnptl  Nn  Gr  gs 
-t  k  *n #5s  *t n@  st  *x :s t  Gym   gl  *st Ak Elr 'k  qs  Gy @ sfk  Nmnp rstx  +s t  Gy  kl 	m np ds  Gy  n  *y   *l  *s t  wx   *sym   *k s  t  Gy ,7s t  S@  *n  Gr ,s  *t k  *l  *n r  *s  *t  Gy  l  Gst  wx  k  *n  *s  *t Ty rn ts  *y   l  Gm  Gn  *s  *t  wxr  *n  Gs  Gt  k l  ]n Tp  *s   *sty k lm  *s  gt  xYr   k XCst k  qs 	k   Gkln p  stx   k  *s y   h  *s k pm  r @bfhklmnprstwxy b Kkl %m  Gn  pr :stw  Gxy  Glr  Gt  x   *k s  *y   *l n  *s t   Gl ir Cr  *t  Gx l  *s msn @tlb [s   G@ b  wf  Ghklmn 8Uprst  *wxy  7l @n  *s  Gt  wx  	T@bhkl  *m n ?pst  wx  *y lr  ?l s  p It l n r  *s  *t   G@  gn  ?s  *y  Nn  *y   Gmp  *s ?t  Gk ln	   Gk 7l  Gn  Gp  *s  ]t  wx  Gy  ?k  Gn   n  *r  *s k  l 6n  *st   ]l  *n  *s  *t   Gr  *s  *t f  Gk  Gn  Gs  *t  Gy  
-
-n  *s  *t	   Gk  l Cm n  *p  *s  *t  Gy	   b f  Gk 2l @in  *s t  Gy  Ik  *n  r  *s t   *n  *s  x @b S>fklmnrstx &ey n  Gr b5m r l n  ]s ct  wx Kt   ]fk Cm  np  r  *st wx  *y   *n  *s Dt  wx  Tm  *n  *s  *t   b  *n  r  *s  *t   ln   r  Gs   bn  *st x  It   r  *s  Gy
-  Ab lk  l  n  Npstx  Gy  -b f 4l  Gn  *s t  *y	  !f  l  *m qn r  *s  *t  Gy  n  Gr  *s   bk  Glns  ]t @y  *m  *n  *st  wx   Nm  *n  *s  *t   ]s !tx b l  ]t  wx   qt  abf  l Cm n  *st  k  l 6n  *s kt y  Cm  *n  *st  wx  Gy   *f An  Gr  *s  *t	   b M\kl Cm ns t  *y   *n  ]s  *t  *y   Gm  Gn  Gt n  *s  l  r  *s   Gb  Gklmn  Gpr  Gst  wxy  k  Gt  An  *st qf   Gn  *s t   gn  *s  Gt   r  *s  *ttr %k  ]t  wx @bfhklmnprst 7wxy   wl 6n   gk Il ?1s  Gt   Gl "n  *s  t  Gx   Gm  Nn  *s  ul  Gns &t  Gw  Cx  >Wt   *@  Gb ,f  ]kmn  Gprs 
-
-txy   wk  *n  *s t  wx   *n  qs  Gt  wx   b  *n st  wx   f  r  *s  f  *s  *t   l  Gm n s r	   *knp r  Gst  w )$x  Mst   *n  r  *s  *t  wx l Cm  *nrs  *t   b  *n  *s  *t gx  ]s  wx  b  *n  *s  *t  wx   k Hs  :bf hkl  Nm  *nrst  wx  Gy l  *s  *t y  ]f gx )s  wx s  *y  b  *n  *s  *t  s Gt  wx   b  Gm  Gn  *st   k 	?r  wx  %m  Gnr  *s  *t  Gy  Gk  ]l  *s  Gy	  sf  ]k ol In  *p  Gr  *st  *l  ]t  wx
-   Gf lm  Gn 5pst  xy   bn  *st  Al )t k l  t  *y  f  l @in  *s  *t	   b f k An  *s t  wx y   Gn p bfkl \mnp ,st  Gw  wxy l  r  yt  *r  Gt   Gbl  Nr  *s  k  Gp  k  Nn  *t   l m  *s  Cy
- b !f l  m  Gnr  *st  wx  Gk  l   l  Gn s t  Dkr nosb n   G@bfkl  Gmn  Gpr  qst w  wxy  lll  Gn  ]t  wx   *f 6n  *y   l  *n  *s  ]t  wx   l s  t  *y   k s  t   *l  Gmn  *s  ]t  6k  l  Gr  *s   *k  *n r  *s  *t ix  Gy   *bl  *s   Gk  *s  wt  =n  *s   *n $_p  *s  Gt @bf :3hklmnprstwxy   *m  Gn  *s	   G@ k  *l  Gnr  *s  Gt  Gy   Gk  *s at  wx k lnr )st  wx s   m k  Gm  *n  s  *t  Gy  0l  Gn  sb n  *s  *t *y k  *s  w KKr	   bmnrst  wx  *y n  *s ot $k f  *k  *n  Gstrn os   *k  l  gn @f 6k  ]m  Gs  Ak  *n  s  *t  Gy   n  *s  t  Gy  #b 2f k  l n r  s  *t  wx  *y k  *s  Tk  *s  Gy   Gf /k n ,?r  *st  Cx   Gk  *nr  s  *t  wx  *k  *n  *s  *t  Gy k  l  gn  Gst  wx  0n  *r  *t   *f  gl  Gn  *s  Gt @ gl  *n  Gpr  *st Ak  *s  Gy pcm  Nn -Ws   *n  ]t  wx  -b m n 2s t  wx
- fk  lm  Gn  wp st  Gy   l  gn  *t  *y 2Op   *@  l n  *s   *k  l  Gn  *s   b 'f k lnr  *s !t +xy   l  *st  ,s  *x  Gm  gn s  Gy   Gnp  *s   Nr  *s  gk gl  n  Cr  *s  Gt   Gf n  Gp  *s   ]h  *n Pr  ]st  l  *s   g @bfhklmnprstwxy   *sy l  *s k  *sly )k
-  9fkl nrs  t  Nwy  Gb  Gt	  sf  *k  n  *p  qst  Nw y   *n Gr  *y   Gl m  Gn  *s  *t t   Gn  Tr   *x   *k =l  Nn  grs   Gm  ]s  ]k n
-   bk  gln  Cpr  Gst  wx   *k  *n  r  *s  *t  Gy  f  l st   *k s f s >t  k  s  Gy   *m  *n  Gs  *t  n  gpst ox  *y   l Bn  *t   *np Ar s  *t ln  gt 	m  Ct
-  bkl nrstx  Gy   l  Gn  *s  k  *s  *y l n  *t   *st  Gy  *nr b ct  wx  Tb !f m Anr 	ws t  gk  gs   bn  *s  *t  l  *n  *s  *t klnrst  *y  gn  Gs   wm  Gn  s  Ct  *y   *n  s  *t  l Tm nr :st  l 6n  *s  *y   l n  Gr  *s  *t   *st   *n 2s  *t   n 6r  *s  *t  wx  Gy   Gkl qn s .t  Fs  *y  	@  b  Cf 8klm np  *st  f  *n  r  *s  Gt  k  *m  Gn km  *n  s  *t   l  *s  ]t  wx ?p  !Db df  Gkl  Gm nr Ist  Gy  k  ]t  wx  *y   k l  *s  Gy   Gs  gt  Gy  *@  Gk  *n ^s It  Gn  ]r @  *nsl Ak t f   @bfhklmnprstwxy  -k 9l  *n 	Xr  *st  x  W&n  *s   Gkl m  Gn  *s  n  *s  Gt  *y   Gl  Gm  Gs Yt  Gy b f  Gkl  *mnrst  wx  *y 2l  t   *m  n r  s  *t  *y   Gn s  Gtx y  *k  l   Gn  Gr s t  wx  *y   Gk  *s |t   ]r  *s  *t w  gkn  Gpst  Gy   ]k  l  *s  Gt   l  Gn  *t  b  *n  s  *t  Gy   Gk ln r  *s t  t x   b  wm  *n rst x  Cm  *n  *s  *t  Gy   *n  r  *s  Gt   Gkl  Gn  Gpr  *s  *t   *s  Gt Pyp  *st U*r   *f \n  *s t  Gy bfkl a7m np )r 3stwy  *l kr  l   ]l  *p  *s k  *n  *p  *s 7t  *y  +dt sp  Gt
-   b  Gk  Gl $
-m  Gn r  *s  Gt  Gy  wm  Gn   *sw n   *@bfh T^kl Kmnrs 	t x G,y 6k  Gl   ?l 6r  *s  Gt y  Gk :It   ]f  Gm  Gns Gt  *y   ln  *s  *t  wx  	l 6n  Gs	  \b  *k  l n  *r s t ux   f  Gl  Gm  n  qs  txrnl k   Gk  gn  *st r  *s cl  *s  Gy  ?n  Gr |Dt   b  ln  Gp  *st  %l  *n  *s  *t  t b  Gl An  Cs  Gtw gx  Gp r  n   G@  bfkl Fmnprst w  *x  *y   ?lr  *s s  *t l  n 1:r  *s  ]t  wx   Nn  t  *y
-   fkm  ]nrst  wx cy  b Tk  Tn s t  wx  Gy   n s Rt  b An  qs  *t   t   *f  *n 	r +s  *t   Nk  n  Gst  *x  b n  *s  *t  l  ?r
- fk  Gm  *n  yrstx  *y   *n  *s %t  wx $>rt  wx  An  r  *s  *t   b  f /Zn  *s  *t   *s  *t  wx  b  Gnt  wx  Af An  *s  *t	  Tl X.mn  wp  stxy  Al s t   Gk  *n ,r  *s  *t n  r   *s Bt   *k  lm 5Sn  Gp r  ]s t  wx ?yn _,t @bfhklmnprstwxy  f  wl  *n  *s  *t  Gy   Gkln Gnrs Ut  1Bm >ns tx  *y  !m  Gn  ]t   Gl  Gs   wm  *t w @  bkl  Gmn 4+rst  Gw  wx &ey Sn l  Gn  *s  *t Pm  *s  *y   Gk In  Nr  qs t  y   *sylfs s  *n b5t   bf  Gl  *n  *s ,tpy ^r  !f  l (ns  *t  Nw  *y  &m p  *t {w   *k  *l  *st   r  :bhklnrstx  *y   p  *s   lm  *s @t  *k  t  n  ?r Ast  wxy   *n  r  *s  *t  Ny   *n Ls  f  Nh  lm  *n >s  Gttr k  *s  Gy  Gm  *n  *s  *t  Gy   Gl  *s t  Gy
-  b f  l nr  s  *t ix  Gy 6k  l  gn  Gs  Gt  Gyn  f ]l  *s b  Gfkmn  ]p vrs gjt  *x oyl  Gs  Gt  Gy  Cs   *s  Gt  wx  Gy   Nn  s   G@ f  l  Gs   l n  *s  *t  Tw gx bf  Nh  Gkl  wmnp  wrst Wwy l n  *s  t   n  s  *t  *y  l n  Nr  *s  *t   *k  n 2s  *t  *y  ]@  l  Gs &t l  *n  r  *st  n  *s  *t   k  *n  *p  *s  *t   ?l +Un 
-
-t   *f k  *l  r 	ws  Gt  gs   @bk l Fmn ipstx  *y  *l  ?n  Gr  Gt  sbl Cm (n  st  wx
-   b  l  Gm  gn r 6st  wx  *y   l  *n  *s  *t  *y   *n r  *s  *t   Nb  l  *s bfklmnp rst jxystn $x k  Glm nrs  wx  qr  ]s   b  *n  *s  *t Dx  b  Gl n  *s  *t   b l  *n  *st   s 4t -fk }7lnrs  ]t x  *kt ;k $]n  ]bp s  wx  Gt Dx )l  gp 0st Dx  b  *f  *n r  *s  *t k  gnst  wxr f  ]t  wx   b  *f   b  Gl n  *s  *t  wx   *k st Hx   ln  *s  *t   Gst  Fll  Nnrs t  Gw n t n  *s  *t  wx   s t   b  Tf  *n  *s  *t  wx   Tnt  r  *s  ]f k Sl  *n `r  Gs  *t  l  *s   h Tl nr ks  Gt  Gy  Gn t   *l  wm Q0n p  *s  *t   b 7ffkl !n  rst  wx  *y   Gkl  *s  gk  *s  *y k  *n  *s  Gty  Gs  ]t  wx f  *n hs  if  k  Gm  *n  *s t  Gy   *l  r )/s  *t  wx -fy  Gp  Ct  Jl  Gm 6n Vs  Gy bfklmnpr  st  Gxy  Gk Wl  l 6n   T@  *s  ]t  wx   Gm An Fs  *t  *y   Ck  l 6n  *s   b  Gs rt  Nn  ]s   *n  *st x  Gy   gp r f Ak  Gl  Gm  nr  s  *tw ix  Gy l  Gr gk l  Gm  Gn @  !Dk l  *s   bfklmn  Gprs t swx  Gy l  *s  6n 	r  *s  *y   *ln  r  *s   *k  l   k  *n  *s  *t  *y   ]k  Gl  n  *s   l  Gmn  Gs  Gt Hh l As  Gy km  *n @-p  *s  *t w mn  Gy n  *s   *s  *t ixn  	Il  *s   b  ]l iIn  Gr  *s  *t
-   wf kl  Gm Bnr  st  *y r  *s  Gt g@ m |s |m 2s  Gy   m kl Am (n -Wps  Ctw  *x  ?yl  *@ Pn   ?n  *s  *y  )t  ]l  wm bfklmnprst  wwxy	   Gkl Cmn Prs t  ]y  ;f  ]k Cm  *n  *s t t   Gl Cm  *n  *s  *t
-  2fk l Cm  nr  Gstw r &t  wx   bn  *s  *t x s   l  gn  *r  Gl  *n  *s  *t  @fklmnprst  wx  *y r  *s   b  *n  *s  *t  Gy   *n KKr  *s  *t  b f cmr >s  ]t  wx  Gn )t  wxbfps  ]t Rbt  An  Gr  *s  *t >s <zt   bk  Gnst x  Gyt  wx   f  *n  *s 2t  l  *n  *s ;t  wx  b  *f  ln  *s 2t  +n st  wx  Cm  *n  *s At  Gy r bkmnp  Gr {Est 
-x y   b Bl  *n  *s  *t  Cm An  *s t  wx !Dbn  b  Nnt  wx   *f An  r  *s  *t t l !nt  wx  f  *s   l ns 2t   *t gx   b 2f  n  *st  wx  Tf  l An  *s At   l $3n  Gp ]s  Gt   b fkln r  *st Pwxy   b Cm  *n  *s  ]t  wx k  *y   l  qs  ]t  wx	   Gf gk l (n |Dr  *s  *t  Gy n  |l	 blmn >st  wx y  .k l  *st Dw Cm  *s  *t y   l  gn r  qs t  wx  *y b  Nn   l  Gn  *st  wx  l  *n  *s  *t   *n r  *s  *t   G@bfhk z^lmnstx  Gk l  yrkl mrs 2t  wx 
-xn x 33tr t k Ilm Hp b   Nn  *s 6t   l  s At  :n  *s At  Gy	 k  l Cmnr  s  *t  Gy r  Dk  Gl 	r  Gt Al  *ns  *t gtn   *s t	  kl  *mnrstx  Cmns  *t ^#x cy   *n nr  *s  *t  Cm  *n  Gr  *s At  sfst   b  *n  r  *s  *t  wx  Cm D9n  *s At	  bf 0Pk (np  ]st  wx  b  Gl An  *s  *txn   l  *n  *s t  wx   l n  *s At  Gy	  	b f  Gl Cm  n  ]s At x  Tb 2f Ak  n ,s tx  Gn As  M5n  *s  *t
- b mfk  Glnps  *t Py  2l  *n  *s  *tt   f  *n  *s  *t  k  *s .t   *st  wx  b f  *n  *s  *t   l  Gm  gnp  *tk wt  2fhm  Gn  *st x inb .l b  ]m  *n r  *s  *t yl bfklmn oprst  wx  Gy l (n  *s  Gt   qs  yt  k ln :@s  *t ytk   *n s t   *f jlm  Gt t	   b  Ck n  r 2s Et  wx  *y n p s   Gl  *s 
-t  Gy	 fk  l  *n  ]s tx  Gy  *k 
-lt  wx  2f  l 6n  ?s  Tb  Gn  *s  *t bk Cns t  wx cyt Dx   b &f  *n  *s  *t ixt  wx  ab 2f An  *s t   f An  *s tt  f  Gh  *k  l  gn  *st  f  *n  wr  *s  *t   b )|l  Gnr  *s t  wx f  gk  gs  b  ]kn 7t  wx   l 7fm  *n  *s  *t   Nk tln  *r  *s   lx 4+r bf  hklmnprst  wxy  l  ]s  Gt  *x  l s  ]t  wx h  Gknrst  wx t  ks  Gt  Gm  *t  f  Gn  *s  *t  b  f  k  *n  rs At  Jjs  b hk  ln "/p 	r st  wxy  Tk  *n  *s  *t  Gy  Ik  *n  Gs  Gt   Gf l  n 'r  *s t  Gy  k Sw   G@  *kn  Gs  Gt  wx  Wb  nst  wx   Gm 
-t  *y  f  l  gn  *s   b yhk l sm  n  *p  Gs {t  wx  h  l  *s   Gl  ]n  Gr  +U@ Bbfhk lmnp rs  ]tx  Gyl  ?n  ?r 
-ltr   l  Gn  n  *s 7t  wx n gr  *s  Gt  t   Gk  l  ym  Gs  t l  *s  *t k   *n  *st  wxy   *m  *xkl 7lb  *k  *l  Ll  Gn  *s  Gt   b  Gfh l -m Bn Ist -x  Gy hk  b  Gl  *n  *s  *t  wx   Gkl m  gn  *s  *t   *n ,s  *t  *y   b Cm  Gn  Gp  *s t  b fl  Gnsn M,k  l  Gm  
-@  Gbfhkl mnp rst  *w ?x sy   Nl  Gn s  *t  *x  Gl n n  s  *t  *y  h fn  s  Gt  *y   G@ fm  *s n   l  *p  *s k  Gn dst  dl  *n  s  *t  *y   G@  ]l  *sy  4Q@ 4Yf 4jn 7yst  fw  f n  jn  *s   Gl m  *n  *st   *n  *p r  *s  *t  *y lm  Gn Tr  s  *t  *y   Gn  s &)t  *y  &n b Dfklmnprstw Cxy  )l  Gr  *s  Gt   Gk l  Nn r  *sk  Gnr  Gt  *y if n  Gtn  Gp 
-t   *k s  Gy
-   Gbfkl  Gn 2rst  wx b  gl  9l Qr  *s  k  *y   *s Kt  *k  Gm   Gn  *p  *s  Gkn  *s  *y k  ik  *s  Ct m ;n  *s swy N%s  Gy p  wm  Gt  Gx  ]f  Nk  Gn  *s bf  Cklmnprst  ?y  6k  l  *s  Gn  Gs xt  -n  *s  y@  Gnpn   Gm  Ns m  Gn 5s 5t   *@ k s  ]t	 f  ?hkl  Gn :grs t k  Gs  *t y  l 1:r :s k  *s k  Ct pcr   Cln  s  *t  'ks  Gt  Gy   n 6r  *s  Gt   bflnptn $kk 	s t   *s @tp r t  Gx  Gf  Gp xYr  sf  *k  *s @bfhklmnprstwxy b Afh oHk mml  wmnprst gw  Gy  ?n tl   gn  Ct   Gs  wt JYr  ws   n  ]s  *t   wpt  :nr  *t op r  *s   Gn  *s Gw	  &fkl dnrst  Gx  n  *s  n  qs t  *y  "Rf ih  *kn  *s t x  *k  s  t   l  gnt  sf  *s  Gy   *m  *n  ;{bfkln T\prst  *w  y  k  Gm Cr  *s  *t y Cn  gs  Gt   *kn gr  s t  Gy  k  Gs  Gt  m  Gs  Gt   b  Gm  n  *s  *t k 2s t  ]t .x   l n  s  *t
-   *b  *f -k  Glm  Gn  Gp  Gs  Gtn s At bfh zklmnprstwxy   Gkln  *s   gnr  *s  yt  *y n  *s  Gy Lct  Gx I]l  Gr  Gs  Gx  l  *m  Gs   Gf  Gkn #5s  ]t gx  *y   *k  Gst   l s   *kn  *s  Gt  (l  *s  ?t ix  h k l  wm  Gn gr st w  *y   l  Gn  s  *t  Gy  6l  *n  Gp  Gs  Gt	   Gf  Gk  Cm !n p 2s  *t  Gy  b  Nf  l mn p  s @t 70w 0Mx  *y   *l  Gs  ]t V?x  sb  fk Tlm n  Gpr  s t  wx  Gy  p  *t   gl  qs   Gl )n N%s  *t  Gy   ]k  Gm  *s   ln  Gp  *s  Gt  *y l  *n  s  *t   ?n  *y   Gm  *s  Nw @bfhklmnprstwxy   Gm 6n  s t  *y	  6f hhl 
-
-nr  Gs  Gt  Gy   ?fn  *s t  *y  s   Gk  *s  *t Pw hkl Pm !n ;r s >Ht x  y sm  Nn F<s n  wx  6n  *s  Gw  *yl  Gs :It   Cm  *s @ >Nb f kl mn  ?prst  Gw  y   Cr  *k m  *y  k  *ns  *t   Gm  Gn  *s  *t  wx   Gm n vs  t   Gn  *s Kw  l  *s  s  *y   *b  ?k  *lnst  ?x   *n  ?r 2s  t  b  *l  Gn t   *n 
-r  *s   bf  hk  l 6nrst  Gx  Gy   ?m  Gn  *s  n  *r  *s b l  Gn  *s |t  Gy   s  *y   wk  lnr  *s  ?w   Gn  *s x  l  Gn ,s  *t  *y	 k l  Gn pr  *st  Gwsn  ?x  p zs   r 2s   Gl jns  Gt w  Gy   ?f  l  *n  *s  *t	  <f 6k Tl 2mnp  *st   h  *n  *s gk  wr It bnr  *s  Gt  Gy Ůl  k  *s [Bk bf  hkl mnrstw >Wx   *l  *r  Ns l  gm  ?n  Gr 6$s   ?p  *s  Gw   gl  *m st  wx   *n r  *s  *t   Gf 6n  qs  ty   gw n  Gs  *t gx Jj@   Tl In  s  *t   ?f  *np  *s  *t l  ?s n  *s  *t  Gy  'r  *l  r  Gt   G@  *l  n  st  Gx  wy  -fs   wm &n  p  Gr s  *t w   Nb An  *s  Gt   G@b fhk nlnp  rs  ]t  Nw  *x  Gyl  *s  Gt gy   *s t  Gl Yt  Nl  r 
-s  *t	  kf  Nhkl  *n  ]s  Gt  *x   Nn  wr  *s   *k 6n  ?s  *y	   ]l  Gm  *n  ]r  s  *t  *x  *y   *f k  Gl  *n  s  *t  Gy @ )bfhklm  n prst  ]wxy  *k ir   Nl  r   *m  *s  Gt  *flm npr  s  Gt w  ]x  *y   l gm  *n  Gs  *t  wm  Gt gk  Gr   *n  *s  Gt  Gw  *y   *k Inr  *s  t  *y s  Gy   Gk  Gn s  Gt
- b  *k  *l  wm  Gn  *s  ]t  wx  Gy sl bfkl m x#np  *s  Ct  y  Gk  *l  Gr   ?l   Gn  *s ot   Gn  *s st  *y   Gn  Nr  *s bfhklmnprstwx 
-
-y   Gk l  ]n r  *s l  Gk  Gm   Gm  *n  wr  *st  wx  2f  *n  *s  *t   ns t  wx  *y   l  Gm  Gn  *s  Gt   ]l  Nn  *r  *st +(r  b  l  *n  Gs  *t  ?x   Gl  Gn  Gp r  *s  skl  ns  *t Pw  *y  Ek  *s  *y   l 2m n  *s  *t  of k  Gl  *s ,tw  G@  ?p   l  Gm  gn  *s   G@  *n  t  Nl  *p  Gt   Gl  n  s  *t   Gl  *n  *s  Gt   G@kln  *prs 
-t sw  *y   Gr  *s  Gt   Gn  *s  t  ]x   gl  *n  r  *s  Gt  Gy   n  qs  *t  *x  *y  in  *s  *t Pw bfhklmn gp Dbrstwxy  9l  Gt  *y  Wb k  Gr  *s  *t y   Gm  ?rs   wm  *n  *s  *t l n 6r  Gs  ]t  wx   Nr   k n  ]s t  *y  *l  n   Gk  l m st   b  ?h  l  Gn  *s  *t  ]y   *f lm  gn 2s t l  gn  Nt  *y	  bk l  *n  ]p  *s  *ty  l  *r   wp  *s  5@ gk l  *s  n   n  *s  Nw @bfklmnprstx y sm  l An  wt  k jQr  *s  *t y
-   G@hl  Nmnr F&s ;t  Gypt Jjn   ls  ]t gx t  *k s  [st  s   ]k  Nn  *s  *t  *y   Gk  ]n s ;t  wx  y  Gl  Gn  *t   h  Gk  *l  *n  Gs t	  6k  *nr  s  *t \w +x  *y   ns  *t t ~Xn   k  l  *n  *s  *t   l 6n kt bf klmn 6pr  s  Gt  Nw  wx  Gy Il  Nn Gr ?1sl  6n  *s  Gt  *y b  l  ns t  *y >!l  t   G@ Cln  Gr  *s  Ns  Gt  6h  l m vs  Gt   Gl  *n  *s  *t *y n  ss &l @bfhklmnprstwx Iy   *s  gw   Gkl Inr  *s  Gt  Gy   Gk ;n   *k  l  *s  Gt  wx  Gy   Gk vl  Gn Cr  Gs  Gt  Gx  wf  Gl  *n  Gs  Gt   Cf  Gkl *mn  Gpr  s  Ct  Nw   gnr  *st  *y  *n  Ns  *t  r  *y f  Gk Msr n   Nf n  ]s  ?Ef Ik 	l  n s t  *y   ?@  ]k  Cl n  *s  Gt bk  l m  Gns t   Gk  Tn  *s   *l  Gr  *s  Gb f  *n  *s  Gt  *y ?f  Gk  Gl  pr  ws of s 7t  wx
-   ]b qf 1l  Gmn  Grs  *t  Gy   h gk r  Gs   l  Gn Qs  *t   *f kl @mnp st w  *y   b  *s  *y   Gs It  ?r  *s  Gt   Gk  Gns  gt  Gy  n   b  Gl  Gn  ]p  Gr hs t	   Ck  Gl  Gm  n  *st  *w  ]x s  Cr   Gk n  Gps  ]t n   b 5kl  Gn  *st   gf  *n  *s  *t   l 6n  Gs bf Ehk lmnprst w  wxy  Gl  n  ws  Gt  l l  Lrk  Gn   Nl  Gn  *s   Gk  *n  *p r  *st  w   Cn  f n  *s  *t  Gk  Gm  *n  *s  *t  Gy   ]f )t   Gb k  *n  *s  *t  Gw hy  sw  x  6h 9Xk  *l  *n r  *s @bfhklmnprstwxy   Gm A&n  *s  *t	   wh $sklnr Is  ]t  *y   G@  Gs  *y  Gk  Gs  *k  ]l	 flnr Ist  Gx  y  *n  *s  *t y   Nb sf nr  s  Gt  *y  *k 2s  Gy  (s  Gx   Nl ~n  *s  *t  *y  f 4l  Gmns  *t  *y   Gs 6t  5b  *s  *t   Gh  ]n bfh  Ckl "mnprs t  Nw =x  Gy  Gkl  Gn  yr  Gt   *k  gn  *y   *l :@s   Gf 
-
-l  *s  An  s t  *y	   ?f hl *n +(p  r  Gs  Gt f  *y   Nn r  *s  Gm  ]n  *s  *t  Gy  h  wk  ]m  *np  *s  *t  Cr bfhk lmnrstw +xy   wl  *s  Gy l  Tm  Gn 6r  *s  Gt  Gx   *f  *k  *s  *b gf   Nb gl n  s  *t  *y   wk  gl  Gns  Ny   ?fl  ?w  ;k  ls   *s t f  k  Gl .n p  *s  Gtl  ]m syr Dk   l 6n  *st  Gy  n sr b  h  kl xmn 9prs  t 2x  Gy  G@  wr k (n +Cs  *y  h  r ,s  Gt   Gn gr  *s  *t  sf  *t   *n  ?s  *t b  Gn  *s bn  @bfkl smnprs  *t  Gx  y  ol  Nm  Np r  *s  l Pr s  l  *n  *s  Gy  6m  Gn 2s  *y   *k  l  *ns  *t ix  ?y   *m  *s t   wk  wl [n  *s  *t  k  *n  *s  *t  *y   yk  *n  *s =tyn @ bkl  wmn  Npstw sxy  Gn sy  Ob  Gf  wk l nr  s  *t  Cx  *y  gn  *s   *k  Gn  qs  *t   Ck  l gm  Gs  Gt
- l zm np  r  st Pw  *y   rs ix  sf xl  ir  *s k l 
-
-nrs  *t Cy   Gh  Gl  *s  pck  *ns  *tx  Gy  k @   Gm  s  Gt  *y Sk  hn  *s bfklmnrstwx |y   Gk Al  *n r  *s  Gt  *f  l  Gl  p  *s t  *f  *k ȗn  r s  Gt  *y 7n  Gt  h  *n  Gs 5t   *f  ]k  Gl Lcn  *s  Gt  Ak  ?l  Gn  *st   Gk  Gn   Gk l  *n  *p Pr  *s  l  n  *s   l ʤn  *p  Ct bfhklmnpstw  ]xy	   *k  *l  Gm hn  r 's  Gt  *y   ]l  *n  Np  *s  t :gl  *m   *nr  *st Jf  ]p   f  glr  *s  *ns  *t  	b  *n  *s Mt  wx  n  s  *t  y   *k  Gm  *n  ]pst   f m k  Gn  s   l  gnr  *sf  Gm   *k  Gy k lm  *n  Gs  *t   b  Gk Tl Anr  *s f  ?p :t  5nr  *s at  xk 
-
-t	  5b km  *n  *stx  Gy   *s Mt	  sbf lmn  Gp  *s  Cy   Gl  Gr  *ss   *s 2t   Gn  s ,tn  Gx  os  t	  b  l  Gm n Pr  s  *t  Gy  *n  Gr  Gt x  
-b  Gls  2ln s -t@  m
-  Jbk dl  Cm n Op  st  *y  Gk l	  fkln  wr s :t  Gy -ff [Bs  *y   *n  Gs  Gt bf -fhklmnprs  Ctw  *x  Gy +k  *l H6r   Gl Cr  *s   Gk  l  wmn r  *s  t   *@  Gk  *n  *s  *t   ?f 6 k  ns  *t  *y  St   Gk s bk  l  Gn rs  *t 6k  Tr   Nk  *s  Gt   *s t r  *t   *k  Gm Mn  Gs  *t  *y  /k l  Gp  *st   ?f  Gp  *s 2t   Gf  Gk  *l jn  s  *t
- b  Gf  l  wm nr  s  Gt Cy  G@  *l   *n  ?s  *t  *y f  Ckl  wmnr  s  ]tw  Nyn k   Gm  Gn  *s  *y   ]k  *s  Gy  in  *s  wm  wt  ifl  Gm n  Ns  Ck  *y  &@bfhklmn  ]prst  ]wx  *y   Gk  *r s  *t y   *l  Nnt   *s 	Tx   *s  t	   h  Gl  Gmnstx  *y   h :p  *s t l  *s  *t  Cf   Gnr hsn b  gr  b  hk  Gmn  ]p  *r Mstw  *y  n  *s  *t x   G@  *k  *p  Gs  Gt   Gn s  Gt   *n  ?s  *t  *x	   G@ b  Gh ln  ]rs y   l  r  *s  Gt   k  *t k  n st x b rl  Gns 7t  *x  r   *m  Ct k  Gl  *m  Gn  *s b
-   Gb  wf  k  l  *mn rs wk Gt  *y ]b l sf   *f l Am  Gn  *st   Gn  yr  s  Gt  *y	   Gkl XVm  Gn 6$s  *t  Gx  Gy n  *s  *t br ' k   Gf  Gk  Tm  *st   Gns  *t   wm w  ZÀ 	Yes*tpSGP"Te.
+l  gn  *sk  *y  k  s  Gy  m  *n  *s  *t  *y   l sm  gn	  Tb ?#f n  s .t  Nw  wx  *y  gkl m  *ns :t  y  Vs  t  *y  ik  *n  *s  *t  wx  Gy b  *f h o7klmnr  *st w  wxy   l  yr  *s  Gp As  *y   n  *s  Gt   l  gn  *st  l 6n  r  s  b  f  *n  *s  *t	   Nb  k  l  Cn frs t w   Gn  ]s  t  h 15m  *n  *s bfkl  Gmnrst  Cxy Wl  Gr  l  ]m  *s   l  Gnr  s  *t  s t   qs  Gt  *y   *k  l  Gm  *n s  Gt  n  s  *t  Gy   *n  qs  *t  wx   *st  n  *s h 6p  *slmn  g@   l nr  s  Gt  *y   *st )t @bfhklmnp Lrstwx   Gn +s y ll  wt   gmn ws  *k  *s -y  gmt y 
+r b Nlm nr ft 	y Zs  Gy 1f }+yktrl 
+y   G@fr  *s y   *k ,s  *k  qs  ms @t  Cx tr 6t  FVpr  *sp y bkstyt +Hyx 
+r oy   *s y k tsl   Tm Tn  gp 	Ux  gk  Gtmr k >m bfk flnp Hdrst  wx  Gy Zlr gt  *y 
+k M7l r  Gn Cr  k  *ln  *s  Gt s !t   wkl  Gmn  ]r ]s t   *k  s  *t  Gy  sk  Gl  *s  sb 2f  Gn  *s  Gt  lf  *n  *s  *t  wx @bfhklmnprstwxy   Gn s  @  Gl  Ar  G@ l  Gr  Gt   wf  ]l rn  s x;t   Gb h  ]k dlnrst  Cx 4y   Gf st   l  r  $f  Gs  Tt t  7Yr l  Gn  ]r  ]t x   gn 2s  t  *y   k  Gn  Gpst  *y   l n  *s  Gt  wx  /jm  *s  Gy   bn  Gr  *s   k  Gn  *s ix   *k  *nst   Gl  *n  *s  *t  gy  n  *s   #ln  gp Er  *s  *k  ]t   *@ m  *n gp 2s  Gt  Gy fk fl  Gmn Pr st  Gxy   l 6n  Gl  Gy   yb  Gk  Gs kr  *s   n Ip l  *s 8Bf @bf  ghklmn prst ""wxy Aul  6k l -Yr  *s  k  l  gn s   Gl nrs  Gf  Gl  Gm t  )l  *s   Gm  Gn Cs  t  *y   Gkm  n  *s  Gt   *k  *n  s  *t   *n  Gs  tx l  r  Xb  Gk  *n 2st  wx  Gy  f An  *s  *t   Gt ry   l (n 	r  *s  t  Gx 7Yn   gh gl w @  Tn  sb  Gk  Cl Cmn  Gpr  st  *y   b  Gk  *n  *s  Gt |m   wr  *s f  *npr  *s st Lw g@ n  y b  Gfhkl dmn  *prst <w  xy   ]k  *s  Gt  An  *t  Gl  Gn  Gr  *st  FTp  *s	 k  l  ]nrs  ]t  x  *y s   *n  *s Kts  t  *y   *m  *n  *s  *t  wx   l  Gm 6n  *s  Gt   Gk  l  Gst k  *n  *s  *tl   l r  *s   Gk  *l 
+n s  *t  *y	  bfkl  Gn  *s  Ct  Gy  l  gn   Gk  Gl  *s s  *y   Gk l  *n $r st  wx   l  *n  Gs  *t  Gy  k  *n  Gr  s  *x @bfhklmnprstwxy   Gn  gr  *s Ly bln  Nr s qtxl s  t  *y   t   Gf  *km  *n  *s gt   *s t   *s 5rtn   l 	r  *s bkl 2mnrst  ]wxy   l  *nr  *s  *t k  An  qr  ]st  wx  f  Gr  *s k n  *s  ]ty   *n s  t  R{   sk  l n  Gstx	  Tb !f  l n Pr  st  Gy   Gf  *s  Gy l  Gn  b k ln s  t  Gy   Gs Tx   l n Tr  *s  t ix  y	  b Afk 	lnr  qs  *t   l  *n   Gs At Tx  Gl  *n  *t  *yn l  *n  *s  *t  s  *y l  *n  *sk  gs tb  lns  ]t +t "Ex  s t 0t  vfklmnprstx  wy  Cmn  *st "Ex  t  wx  Af  Gl  *n  *s  *t	  f  Gkmn  s  ]t x  *y   b  *n Sp  *s  *t  wx   k  *l  Gs ib pt k 2s   g@f nst gx  Gykr   b  *n  *t   ]f  ]l p  gr  *st k  yk  *s )x  *s  *t  wx y	   b  ]f  Gkm .nst x  	b  n  *s t f  l n  *st   l 6n s  n  *s  lf  *n  r  *s  *t m  rsty  l  Gr t   l 6n t   gl  *n 7r  Gs  *t  Gy s  m   *fk  Gmr  ]s  *tx b 9l dm  *n  *sl   gn 	t  *y  *l  *n  *t 
+l  Gn   l ksn  *s
+ fklmn p sty  k r   Gl gm  *n ]6s  ]t  wx  k  *n pSp vs  *t  *yn  Zr  *s  .k *s  *t   *nr  *s  *t  Gy -n  Gt s t  don  *s dot @bfklmnprstx  Gm  *n  *s .l  yr  l  gsn  ]s  *tt   *k  Gr s  k  *s p4t  Gy n  *sst  r x  ns Ut  wx   *s Ht l  *n  *st  wx  Gfmnt   *s gx  Af  l n r  s  t   Gb gk  l  *n  ]s  t  Gy  k  Gm An  r  *s  *t  Gy	  bf -k l  *nr  *st   l 6n ,s   k  l  gn s  yt  t  wx  n  Gp @  Ghk lmn }pst x s ,t   *l  Gn  *r  s  *t  ln  *s xl s x   b Cm  *n  *s At  l Anp  Gst  ZAl  *s   Gm  Gn
+  Tb  Gf  Gk l  Am  Gn  rs  Gt   Gn  *st   r  *s bkl Cmnrstxy 	@l |s   ]kn t  wxt s   *n  *s t  
+k  n s  *t  wx  *y  k  Nn  st   *nr  *s  *t n t gx	 fk  Gm )"n pst  wx 	r ct rx 5r p  ]s  *t t gx	   f k  l 6nr  *s ix  Gy  *l  Gs  *y   Gl  *m  *n  ]stxy  )r n 4x   *s ht  Gyn s t  wx  l Cm  *n  *s t   wl  *n knp  Gst  wx  Gy   *nst  wx t r  *s  *n  *t  wx  If  *n  *s  *t k  Gs Atb 7Yl   *n Fs  *t gx  Gy @bfklmnprstwxy  gs 
+ty  Gpt r  *s x  *l )n  *s  *t  Gy   b  *n  *st "Ex   Gf  Gn  *s  ln  ]pr  *s Zt  wx   k  *n  ]bpt  wx f  *s   ls  *m  *t  "k  Gs  ?ty t   *n s  *t  Tb  np  Gs tt  wx Af 2s   Nk  l  Gm  *n  Gst  b  l Cm  Gn  *s  *t x k  Gnr  qstt  wx  !f  *n  Gs  *t  *n s t   b Af  Nn st  wx   *f  l  Gn  *s  *t  k  *n  qs  *t   b  l n  s t
+ kl -mnr &st wy   l s k 6n Is  Tt  *y  Ns  Gy   l s It Tx   Gk l  *n  *s  ]t  wx k  *s  ]t  wxt t  wx   Gl  m  *s )o@  n A@n m  Gn  *sp ((@ bf  whklmnprst l5xy !r ln  *s  *t y   *n  *s t  wx
+  sblm n  grst x  Gy   *n  ?r  *s t  *y   Nn  *s  Tt  k  l  gn  *s  ]t  b 
+f ,n >@r  ]s At  k An s  *t J!yknr  s n t  wx   k  l Km  *nstx   *f  Gm  Gn  *s   gk  l  *n Tr  s At l  ]n 2sls m	  k  *l  Gn  Gps t  wx  Gy  f  Gk  *l	   bk  Gl  m  Gn Ap  ]st   *l "n n  *s  *t  wx  Gy   l  *n  *s )t  wx m  *n  r  *s  *ty  qnp   k  *n  *s  *t   Nf  *n  *s   ]k 
+gn Is	  sbl Cm  nr  s @t  *y   *n r ,s  t  *y 15n s   Tb f An  Gs  *t @bfklmnp G2rstwxy )m  Gn  Nsy Sp  Gkl  ?n  *y   gn  s  t  *y	  Tbkl nr +s  #t y   l  *s  wx k 6n  s  *y  Tk  s  *y  n  *s  *t	  l n $fp  st  Gw  wx  *y   *f  *n rr  *s  *t kmn  Gp  *s =xt  *ytr  *k s   n  s  *t   l fm  *s  Gt   Ck  ln  Gr s  As  Gy
+   ?@ &b hfkl  Gn  Gp !st   l  m  *s  t   qs  t  *y   Gk l p  r  *sk Bnrt xst   l  gn s  t  f  *s  Gy   *n  *s  t  wx  b 2f  l  *s   b f  *n  *st   l n 
+r  *s  *t bfklmnprst  *w  Gx  Gy k  *l  Gt k  lm 6n  Gr ds  t  Tl  ]sn s ln FVrs t  n ss t $Pn   *s Tt  n  *s  ]t  wx   ]kl  Gnp Erstn l  srxns  *m t  <lt  Gm rn   Gk }p st  yl 	r }%s  $Rk  nr ?s t $Rnt Af k	   Gkl *m  Gn  *r  qs t  Gy   gns  *y   *m  wx knt n pSr  Gs  t r  *sktr rl  }%k  ]t  Gk  *s It  Gln   b  l  *n  *s  *t  "f  Nk  *n  *sx @bfklmnpstrp  s t  Gy sb <lys zx k s ln 6s t  Ht  *y  *k  gs  Tt  gx knst  Gk  *st r  *s l ry s /t@   Gk <l  *s  Gy  ((m  *s Tx   klr   k  *k  Gm p  s  Gy @bfhklmnprstwx vy  *w l  Gn  Gr  *s  *t  wx   gn  *s t  Gy   ]kl .ams   gn  s  *y  wp  Gn  Gs  Gt	   Gbklnr  Gs It +w  k  *n  *s  *t  Gy   Nb  l  gnr  Gs  Gt  *ys t   *m  *n  *s t  wx   Gn  *stk 7t   Gk  *n  s  *t  Tkmn s  *t  Gx  *y  *k s  Gy   Gs t   Ck gln  *s  Gt   *st   gk  *l  *s  *t
+  b -kl  Gm n Prstx s  *y   Gm t  s t  Gy
+   b Ak  l  Gm  Gn  r s  Gt  Gy ql  Nm  Gp gt   *f Ir  *s  ]t   bfklmn  Grstx 8y .k  *s  *t y lr  *s vy /f   k  Cm  *n  *s ,t rw 1n   Gk ls y   n  *s  *t  wx f  Gk "n  *s qt m k l  gn  Gr Hs  yt   lt sy   *l 
+gm  Gn  *s  Gt  Gy  
+b f  gk l =?mnp  *r  Gst (tw  *x  Gy   *k  Gs ix  b l  Nn t  wx   ]l  Gm  Gnr  *sn  s   f  Gnr  *s  Gk  s  wx  Gy   t   l  ]n  *s  Gt   Nb f 6h  Gkl n Pr  *s  Gt Pw ix  2s gt b o7f skl [mn p  Grstw  Gxy  Gkl  wt  n  *y r  *s  t  *y 'n  Gt f  gl  *n  Gst /ll   l  Gn  *s  Gt   b  *n  *s  t   *k  *n  Gr  *s   Gk  Tl  *n  *s  *t s  t \n @ sb  Gf ?hkl mnrs tk n  *s $frmns   wl  s  Gy  *k  Tt   *n  *s 6t   Gn r  *s k  wx 	Uy	 f hklm  gn  *st  *k  Ls Os *y 
+nt   l  Gn $r  *s  *t   Gn  *sxn k  Ns  *y  gy @bfhklmnprstwxy f  h +Hk ul  *mnrs  *t  Gy 
+l &t   k  Gm  *s x;t  qs  ]t  sk x   G@  Gbfklnrst Tx sy  l  *n  *s  *t   *k un  *s  *t  +nr 2st gx s   *n  r  *s   f  ?hk  *nst l  *n  *s  *t   *k  *y  ln  wt   *n ir  *s  *t  "f  Gk  Gl  *n  ]st  y  k l   ]b m  Gn  p  *st   lm 6n  ?s Sp   *b  Gk l  Gm ns  *t   *m  Gn  *s  *t bfhklmnprst  ]wx  Gy nr  Gt x  ?n t  wx  f El  *n r  *s  *t  *n  ]s   b  *n  ]st  wx   *n ?{r   bfk [m @[n ?{rstx  *y   b  Gn  *r  *s  *t nstx fl  Gn  *s  *t   l  gn  *s  yt  k  *y f n  *s  *t   l  gn  yt n  t  An  r  *s  ]t  wxn r s  gn  *s  Gy  b l  *n  ]p Hst  wx   *f  *n  r  *s  *t	 k  l Cm +n  rst x  f  *n  *s  *t  @b  l  gn  *s  ?w  Gn r   b  *n r  *s  *tr s
+   bfk  Glns  *tx y  k  *s  *t y rt  wx  fm  *n r  *s  *tt  (r  *s   *n  ]st ]x   l  Gm  *s   *n  *s  qt   b Cm An  *s  *t  bln  *st  Tx s  *y   *s  wx   gk   Gl  ]n  *s  *t   b Gf 9k Al Cm  n  Gp  ?r  *s  *t  wx  Gy   l Cmn  *s  *t   l  *n  r ds  *t
+ b  Glm o7n fr 8s ft  ]xy l  *n  *s  *t tn  *ss  *s gxtr Zt gx  @bfhklmnprst wx  Gy  Gk  ln  *s 6t  Gy s  *t   lnr  *s  Gt  t  wx  b  *n  *s  *t  Gym Up  fln  *st  wxm  b s  wx  bn  *s dot  	l  Gs  *t   *f An  *s  ]t  wx bk  lmnrs t  wx  *y  *lr  ]t gx l  ]t  wx   b  n  *s -t  wx   *n  qs  Gt  *n  qs t  hf  l 6n  *st r  *s Bn  *t
+ b  wf  wlnp -r  *s 8t )xn   n  *s At 2x  st   b  Gl  *n  *s t  wx  ql n  qs Zt  
+bfhkl m Inrst gxk  qm  qn  ]t  wx r  *m  Gs  Pr  s  ]t  wx  ,st  *y  }[k  *s  s 
+*t  wx	 kl np  *st  wx  Gyn r m  *n   b  *n  *st  wx   *n  r Ittls  *n gx r  *s tk  *n  *t  wx ;t  wx	  "k  ]lm  *nr  *s tx qn   ?b  *n  *s  *t fn	   b  Gl  *n r  *st  wx y l  ]r  qs  ]t  wx   G@  Gkmn  ]pst gw xy n  s t  f  l n  *s  *t  Tb f Cm  *ns  *t  n  Gs  *t s  ?t b f  h  Gk  lmnp  st )x  Gy   *r  *s  *y n   l s  Gt )l Zt   ?f  Gnr  Gs  *t   b  n  *s  *t $fx  Gy bfkl  Gmnr  s Jt  *y  Gl 7Yr	   b k  l  gn  *s Tt  wx y   *n r  *s  Ans  *y   l  gn  *s  wx  <k  Gs  Gt  Gn  *s  *t  Gy   ln  *s  ]t   r  Gs bf  Nhk  Gmnprst *wxy  Gkl  Gt   Gn  *s t  *y   b  Gk n  *s At	   k  *ln  rst  wx  Gy   l Cm  *n  s   l @[n  *s t  wx   b n  *s  *t k  *n  wp N3st  ]x   *n  *t x l  *n  *s  *t 2s  *yl  ]s  t Py  *n  *s ft  Gy  b "k  Gm wSn  *s t  wx
+   bf  gkm  Gn r  *s 2t  Gy   l  gn s  t  
+n n  *s  *t   l  *s ix   *n Tp  *s  *t bfklmnprstxy   ]klnrst   n s  *t k ux FVn   b Cm  *n  *s  *t  gx   *l  *s  *t y b k  Gl  *n +s  Gt y )l  Bbn r  ]s  Gt f  Gs |t  *s  *t y   *st   *np  *s  *tl  *s  *t gybn r r  *s  n  *s  *t k  Gt   Gf n rst  Cx  Gy   Gk n  *st  wx r  *s Bn 7t  wx  cf  k  Gn Prs  *t   *n Gs  *t  wx   ]klnr  ]s  ]t m  *ns  *t ^yn ct t lt Ks  	s At dk   Gk  gm  *n  Gs  ]t y  f "l 6n 'r  *s t
+  &b *kl n fr s  *t  wx  y   *n  *s  ]t gx  *y   k  Gn  *s  *t   Gn  *s  ?y  @bfhklmnprstwxy   *l  *s  Gt
+ @k lnrs  ]t  wx y  m r  *s  ]t  wx Ss  ]t  wx  Ns  x  Cm  *n  *st  k Cm  *n  *s  *tl  t  t f 'kl np r  st x  *y l  t   n  s  ]t gx  *y  r   Gk Cm  Gn  *s t  )k  ns  Gt y  t	  b  Ckl n r  s  ]t  wx cs   l  *n s  *tx  ?nt  wx   *f  r   *l 9
+r  *s  *m  Nn  *p   *f fk l  ]m npr  *st  wx  "k 6n  Gs   ]l  Gm n  *st  Cm  *n  *s  ]t  wx  Gy @ |bfhklm nprs )t  wx  Gy k   *r  *s Pw  Gs x;t  Gn r   Gf  *s  *y   l 6n  qs  vr  *s  In  Gp  *stx  Gy  k  ]s  *n  gt  f  *t  [2l  ]n   b  Gk  l  Gm  *n  *s  Gt ln  s  Gt  *y  qs  *y  Bl  Gs   Nm  Gn  *s   b  ]f  Ghklmnprstxyl k  ]x  )n  *s  wx   ]k n  *s  Gt  wx  fkns t  wxy   b  *n  Gs t  wx   l  *n t x   b 2f Cm  *n  *s  *t   *n  ?p  *t   n   l  *n -st y  Cm n  *s  *t l Pr  *s  gr  ]t b ;fhk 8mn p rstx  *l t  wxn s  ]t  wx kr Zm   Gs ft  f  Gln Zs  *t t  Tb  *n  *st x  &f kst  wx &f  ob  *n  *s  *t   b f Cm  n  *s  Gt   f k  *n 3st Pw )x  k  Gn  r  ]s  *t  Gy
+  b f  Gk l nr  st aPx   l n s  ]t  wx  Gy  2f  l  *n  *s  *t  Gy  *k n  ]s  b  *n	   Nb fkln )"st  Gy  s  ]t   ]s \t  *y  k  l  *n Is .t   b  Gn  *s  t  Gy bf 6hklmnprstwxy  *@  Gk ,l m  yrs  Gt  Gx k t	  sbl  *n  *ps 3t ^x Py Os  Gt gx   *n  *r  *s  Gt	 l  wmnr Ist )x  *y   *n  ?r  *s  ]t  wx  *y   b Sl Cm  *n  ]s t  wx  gn  wx   ]l
+ bf hkn  *st  wx y  *l r  b  n  *s  *t  G@ Zt gx  s  t   *f  l n  s  *t b  n p r  s tl  n  *s  *t  Gy
+   s@b (l nst  wx  *y Qt  Gkl   Gm 6n  *y   *s w  Gy  f  l Cm nr  s  *t  Al  @bkln  *prst "Ex  *y   *st  b f  *n  *s  *t n  *s  *t "x  y  t   ls 2t 	x  b 2f  *s  *y k  *n  s Kt  wx Py l t  wx  f  *t  ]f sk  Gn  *s  *t  k n  *s  *t  Gy	   b Cf Xl dm  *np  *st !	n  Tb -f  gl n  *s t  wx bfklmn 9pr @st -Yw fx s~yl  n  Gt   Gt x  k l n  wr Hs  *t  *y   l  *n  *s  ]t  wx  Cm  Gn E<s  *t  *y   *s  ]t gx  st Tx   *st  Os
+  nbk l  Gmn  *st  wx  *y   *st  wx  f  *nr  *s At  nb  *n  *s  *t k  *n  *s  t  )@  !f  *s  *t	   b  Gf Cm  *n  *s  *t  wx  y   @  Gl  *n  *s  Gt   bn  *p  *s  *t  *x   Gl  r  *s kmn  *sl  sb  *n  *s  *tbl Os i@xr An  K4@bfhklmnprstwxy  Gkl  r  ?s )t   ]k  Gn  *st  *y   *s t  Gy	  kl  *m  qn  s  ]t gxy  6n p  *s  *y   *n s  b  Gk  *l n  Gs It   wblmn  prst  Gwx
+   Gfk  Gm  Gn  qrs t  wx  *y 	s   l  Gm n  *s  *t  wxn ?k t rf  Gm  Nn  ]t  wx   *k  Gr  *s  Gy   *s t  _)f  *n  *s  *t  /'n	 bfknst  wx  *y /r r  *s  *n  *t  Gy   k  s t  Gy   l  Gn  Gs  Gt   Gm 
+n  *s  t  wx   *f  *nr  *s  *t  Gp  *y   bnp Ist  wx st  k  `r  *s  *t  t  wx   *n 	Yr  *s  *t	 bk l m  *n  ]st  wx  Gl  yr   Nl  *s  *t f  l n  *s t   l 6n  yt ls  ]t  Gy  k Cm  *s Py t gx   *n cr  *s  *t bfk  Gl Cmn  Gp ?#rst gw  Cx y t  wx   bl  *n r  *s  ]t gx k  *s Bs gx  
+lr  Gst  wx 7s yt  wx   b Af  *l  *n  *s  *t k  l  Gns  *t x l  l m   *np  *s  *t Z)k  !f  l  Gn  *s  *t  bkl  Gm np  Gr  ]st ]w  *yf  n p  ?s r  *s  *n  *s  *t  Gy  ]f  *y l   Gk  Gn  Gpr  *s  *t b "kln ;sm  k  *y   b Af klmn  r  s  *t  wx   wf J1k  *n  *s  *t  *y  cn  *s   *s t   @  Gk  Gn  *s :t   Nfm n  Gp <r  *s  *t Tk  Nn Js   ?m  *n  ]p ,s  Gt   fkl  ]mn  ]r  s :t  ]x  Gy   b fn  *s  *t   *n Cp  *s  *t   Nb  *st   b  Gn  *s  @ &bf  *h Zklmnprstw  Gx  Gy l  *t   Nn Hs  *y  Gbn  Gr  vn 
+t  bl  *n  Gs  *t   gn Vs  t  *y  Cm  ]n  *s  *ts )t  n =t   l n Pr Bs  *t  *@  *n  *t @ kl @m n  st 0m s  t  *y   t  b  Gh  *l  *s @bfhklmnprstwxy b flmn Ip  *rs  *tw  ?n r  gy   n  *s  *y yp   l m  gn SKs )t @ zgt  Cy  ?s w  *k zqs  Gt   G@bfhklmnprst w gxy n  *s  t   qs  Gt  lm nrs  ]t  wx  l  Gm gs f  *k Xm  Ct klmnrstt  wx f  *n  *s  *t   l  gn Bs  t   *nst  Yf  *s )r  Nnp  Gt  Nk Cn t  1k  *n rst   ?p s t  nr "k  Gf  p  &p  Gt  wxk n r  *s s  Gy  dfmn st  Gy   l n  s .t  wx   r s  t  dn >r  *s  *yk )rstx  Bnr  *s  *t Rys  sb 2f  *n  *s  *t   b  Gl  *n  *s  *t ln l m  *nst 2xk  *y n   *sx sm  sf 6k  *s w  *k  Nl  ]nprt l Hbfk 6s   *s rx  ?k gr   m  *s  hkn  st  n  *s  Gt  wx   Gk  l  *s  Gx   ?@  Gn  *s  Gy f ihk  ]lmn 6p  *rst  wxy n  Gs dm %<nr  wx  ]b p  fb  n sp  *s  *t  *k 	t t   *l n  *s  *t nr  qst  wx  Gy   Gstx &f  *t  bl t  wx \kl  Gn  *s bt  Gy s  *y tx  b Af  *n  *s  *tn   *l  r  *s n^s  sbfk `l mn prst iy  Gk  ]t  wx   Gl  *n  s  *t gx  n  *s 5t  wx  Chk dn Sp  *st  wx  Af  *n 	r  *s  *t   Gkt  ?#r  Tl  *n  r  *s  *t   l  *s  k@bfklmnrst  wxy  *l  ]t  b l  *n  s  *t ix y ln  wp  r  qst  wx   *n  *s  *y   Gm  Gs   *f Zn  *s  *t   Nb  Gk  l n /pst  Gw x  Gy   *n  *s tx -n   l  gn  s  Gy r  Gt )x
+   G@f  hk  *n 	p sr  Gst  ?l n  *l  Gs  Gt   G@ 7(n  *s  *t 7ey   bkln  st  Gy   l ]6n  s  Gt  f  *s  yt  *y  	l  Gs  Gt   l  *s  Gy	  Xb  *f k  Cm n  *st w k  *n sp  rs   l  *s $t  wx   gf b  *kl  Gm nps  Gt lw  y Il  ?n bf  Gny s `f  ?st Sl   *l 7Yp  *t   Gn  Gr  *s t
+   Gb f vk  *l  Gmn  Cr  Gst k s   *h  vn  *s  ;@bfhklmnprstwxy   ]lnr  s 1t  *y   Nf  Gs  s  Gx	  S.f  Gkl o7n  Nr Is  Gt  *y   *n  *s ft  *y   wlr ,s  Gf  Ns l m n  s  ]t  Gw  *y   G@  *n  s  *t  *y bf 6hk 	lmnprst wxy   Gk ll  *s   *@ Bl  *n r  *s  Gt l  *n  Gp  *s  *t   *s  *x cms  Gtt  2[r  *s s  Gt  0p  *s  Gy   Gl  Gn  *st   *nr  *s  *t   l  *n  Gs  *t  Gm #(s :)t  Gy   *f  *l  *s ;t
+   *f @k  l  *m n  r Is t  Gx  c>l  Gn  Gp  s  *t  *y   *n  *s  Gt w
+ bflnps ;t 3x  *y  Gk  *n  *s  *tlnr k Zt  wxn  Gs Tx Xzk f  *stk  ]t x   l  *n  *s  *t  wx   l n Pr  s  *t  *y  fk  lp  ]st  wxr  ]b pk At  wx n  ]s x  i@ <bf  Nhkl  Gm npr fstx  *y k l  *s  *t y n  wx   *n  *r  *s `t   wm  *n  qs t  *y "s   *k  *l  Gn  *s  *y  b  f hkl dmnr  s  *t  *y  gl  *r  	Um  *n s  *t  *y   Cf  l  Gs  l  Gn  *s  *t  Gyl  Gn   ]s  yt  *y	  sfk ln Pr  *st  Gy  6r  *s  ]t   Gh  *s  k  Gn s bf  ?hklmnpstwx  Cy  fl  Gn  s  Gt  *y	  k l n  Gp  ]s  *t Tx y
+   b Ml  n  Gp  Gr  s t "Ex  *y  b k  *n s t  *y	  !7b h  ]knp  *s  *t Vx  k  l 8t   *n  *s  *t x	  >k n sp  Nr Is  t Tx  *y  bl  Gn  st  y   *n ]s  *t   *nr  *s  *t   l  *m  *s  Ct  sfn  *s :t  Gy +4k   b 2f  Gk  l  Gmnr  s  *t  Gy s  Gy  don  *s  *t  wx  Gf  *l  *s  Gt &y   Gm n  *p  s  *t   k  l n  *p  s  *t  *y @ ybfkl dmnpst Aux  *y   f  l  *s   ?l n r  EHns  *t  Gy   *f  gk   k 0n  s  t  *y  k  Gs  Gy  Gk jn  Gt f  l  Gm  gn  *s zt x  
+l  gn   G@ Xb 2f Ak  wl  gmnpr  *s  Gt 7ey   G@ f  *s  Gt l  *n  ]t  wx b Gufklmnrst x  Gy /r ft  *n  Gy   Nbk  n  *s  *t  *y  k  *s  Gy  Gr  Ns  r  Gs k  *ln  Gs  *t  Gy  gl  Gs   l  *n ,s  *t   l  wm 6n 5t w   ]l  *s  Gy   Gn Pr  *s  *t  ?y  b  Nk  l  wmn  ?pr  s  *t rw  *y  l  *n  Gs  *t  Gn  gt   b hkl  *n  Gprs JItw  fk  Gp  *s   Gb  ]k  Gn  *s  Gt "k  Ct k  Gp ir   *f  *s  Gt @bfhklmnprstw bYx >y  f  *n r  *s  *t  ,l  *nr s t  Gx  Gy  n st  wx  *y   *n  r  *s t  Gy bfhklmnprstw l5x  *l 3ns   ?b m p  st  Gxn  *s Atl t  *p  Gt	   bfl mnrst n gnr gsf k fk  Tlst  ?s ?tr +Hstl >t gx s   l  gnt n  ?nr  *lt ok Ukt  k (s  mpt l rf k gy  gr f gk 6n 2s t  *y  l  *k l  Gnptlr  ?st  ?y 'f 6n  f f  Gkl  Nm zn stl  ?f k  6n  ?s y l Ur  s k  *y  l n |prst  *y  fkpst 5l Uk  ?l f k  *y  ?s  *t gx  Nr  *y fk l  Gnst  Gy l ~r l  *s t }t gx   l  Gnpt /k  r  s fk lmn /prst gx  *ns  n   *nr  *s f   G@ Tb  gn  s t 6n  *t Dt   *f  *m  Gn  rs y  (%f
+   ?bf .h hlnprst  gn gt   *l gy  *n r   f  Gn  s  Gt pt gl gx rk t gx m  *r ;n  *@  ?l Un )r  Gl  ]t
+  kl  Gmnst  wx  Gy  G@  *y   *n gr  Gs  *t   *f k  *s  Gt   b !f  wm n r  *s  *t   ln  *s   l  Gs	  +k  l  ]m  Nn r  Gs  Gt  *y  2bln  ]p  s  *t  *y  *n  Gt  *y  f l  qs t
+   Nbfkl m  *n Tst 6wx  s   Gn  *p J3r  s  *t  *y Qk  *y   l nr  s  *t  gw  Gy   *n s  *t   Gfkl n  *p rs .tw  ?xy  f  Nn  Gs  ]n 2s  *y  2st   Gk $1r l  *s fk   Nh   Gm  Gn  *s t  Cy b  yfhkl &m >np  rst wxy  Gk  yrnt ls 
+l  Gn 	t  *y sp  ws   l  Gm 6n  *s t   Gn s  Gt  wx  Cy  l  *n  *s   Tl  f hk l .mnprst  ?wx  Gy h  *n  *s  *t m   l  Gst  p  *s   Gn  *s t   l n  s t  Gy   Gl  wp  *st   Gn ]Or  *t  	r  *s  *y   Gk  Gn  *p   Gn Is  *t  *x  wy @bfhklmnprstwxy   b f  l nrst  Tw  *x  Gy  Gn  *s  *t  *y   Cn  *t   Tln   ?k  *s bl nr  Gst  Cw  6n  yt  *y   l 6n  Gr   *s y ln  ]r  *s sw Tx   Tk  *s  Gt l   Gr  Gs  Gt   b  gf 6h dl >mn rs t  *y  0k r  Gst  :k  *s -t   Nb kt   Gk  *n   bhk  lmn +p rst  Nw  x  *y :Yl  *kr s  *y p@  Gm kn   l 
+s   k  l  Gn  *t   *f  Tl  *mn r  *s  Gt  s  t n  ?s  *y  @  *s   G@ Kf vh  klm  Gn Gup r 5st ix  Gy  n  *s  *yb 0l   b k  Gm  *n }p )s  *t  blm  Gnrst  hf 6km ns  t  *y zn   *s $t  bn 	n f  *n  Gs  *t  *t 9x   Gnt 6r  *kn 2s  l  t k  l  Gm 
+n  qst  Gy 4s  *t   Gn  ?r k "l 7n  *st  ?w Il  ?m  ?r   *nr  *s  *t [2k  Gs  f  k lm npr st  wxy   *s At  l   Gln p  *s  Cy s  p   ?x  op  *s  k  *s ln  Gp  *s  *t k   l  *stk r @  l  wr  *s  Gt $Rs @bfhklmnprstwxy   Gp  *s  Gt  f@ Ikl  Gmn  r  s /t 2x  *y   Gk  *n  *s  Gt  Gw   Gk  *n  s  Gt bl  Gn r  *s t  Gx  k  *s  *x   Gk n  s  Gt  Gw  *y 6l EHt bf shln  ?prst )x  *y  Gk  *l  Gt 
+l  Nr  Ns   *k  *n  Gr  Gs  *t  *y   Gk  l  Gn  r  Gs  *t   *m  *n  s  t  gk (tm  *s <lt  hfm .r  t n  *s 2s  Gy	 h n2lm bnr st  *y n n  Gp s  t   Gk  Gn  Gr  *s  Gy  !7b  Gn  *st k   r  b  l  Gs	  Tbl n  Cr  stx  Gy  Pk  *s Pw  *y  Kr  *s   l 6n  ]t   Gf  Gm  ns t  Gy   l n  *s  Gt bkl  Gmn  Npr 3stx  *y l  *s  6n  s  t  *y r  Gn t s  t  *y   l 6n  Gt gx k  *l  Gs  Gt   *n  ?r  *s  *t   b  *f  l  n s t  *y  
+f  l  Gm  Gnr  qs  Gy  Gk  ln  Gp l  *s  s  *y bfhklmnprst Ow  wx  Cy  k )l n  *s  Gt  Ak bl  *s   Gk  *l  Gm  *s r Ys  Gm  *s  Gt  \k hn =s >t  Nw  wx  y n  *s t   *st l  *s  #(s  t  *y  Tl  *nr  ]s  t 0x  Gn  *s  *y  *l p JIr  Gs  Gt   Nbf kl  Gmnp  s  Gt  Gyk  Nl  Gt  l  *n  *s  Gt  wx   Gn #(s  t  *y  h  *s   Gs Tt   yk  Gn  *s t gx   gn r   l n  ?s  *t   Gk n r Is  Gt  sf  *n  s  Gt   G@bfhklmnprstwxy  k  l  gn  ?s  6kl  qn s  Gtx y 2s  t l  Gn  *s  *t   gn  *s 	t  *y dmr  ]t  Gw s   *w   b  Gklmn rstx  *y	   l  *m An r  *s 7t  wx  *y  Gn :p st   ?p  *s  *bkt  f  *n  *s   wm @p  *s X3t w  Gy kr  *s  Gt ul fk 
+lms  *tt #mrf  Gm  Tk  *s  Gy   *s #t k $p  Gf  Gp b Afklmnst  Gwx  ]y  Gk  Gl :n   n  *s  ]t  wx  k  *ynt   Gl  *n 	r  *s  *t  wx   Ck  *m  r  Gst f  Gk  *nr  *st )r  *n  *s  *t  *y   l  gn  ?s   Gn  Np  *s  *t   b !f fl  Gn  ]rs  *t  f k   l n r  s  t  *y   Nk  Gm  n !Qst gx  *y  .\f  Gl  s  bfklm  Gnrstx  *y   Gl  *s  t   b  Tkl n  s  *t  *y   *k  *n gr  *s  *t  Gx   *n s  *t  *y  l p4r  s  Gt   Gk Pr  *st ix   Nh dr  *s	  @  b 6k >:lnr  *s  *t   l  *n s t   ?fl  *s   gn ,s  *y  gl  *sr s  Gw 0t bfk Tlmnrst Aux Zy  l n  k #Ly   Gl  *n  *s  ]t   l  gn Aps   s  *t  Gy  <bfkl nst  ?wx  *y  l l  *s  In  ?r  *s  *t  *k 
+n  ?t  *y   *r  *s  t   Gmn  *s  *t t  mn  *s  *tn l  *s   s  *y  gb Xzk  t	   b f  yh $Nk  l @[n  s  *t	   b  *fkl n Gs t  Nx  *Bl  6n +s  t  *y  fbfk m\lmn  Npstw ^x  *y  b k  Nl s  *t y r  *s  ]b  Nf p   Gn  *s  t   k  ls   *st f  gf  l 6n  Gt
+   Gk  l  *m  Gnr  *s  Gt 0@x  *y  k  *s  ]t  wx  Gy  El  wm  *s bfklmn  Gprstw gx  *y l  Ct l  gn  Gr  *x  6n  s  *y   l mn  Gs  wr  Gt   *k 7(n 2s  ]t  *y   Gb  *s  Gt   Gk  l  Gs   *n  s  *t  *x  *y  km  Nr ,s  Gt *w   *kn  *s  (l  *s ix   Gk  ]l  *s   Gb  Gkl  *s  Gt   *s St   G@  wm  Gn  *s  Gt  ]Of  ]kl  *n  *st   gn Fs  t  *y m }p   h .ak  *n  *s  *t   *@bf hklmnprst LSw  Cx  Cy ,lr  Gy  l  Gm  ]t  wx	  Ak l  Gm  Gn  *r  *st  Ny  t   Gf Vl  Gn  r Ts  ]t  wx k  Gn ,js  t  *y Tk  *s  Gy   Gkns  bl 2s  Gt  Gy   Ns  Gt k  l  Gm n fst   Gf  *s  Gt   Gnp  ]r  *s  *t  Gy 	ut   *st   *s ux 9t   l  *m n  *st  'r  *s   Gf  Gk n  *s  *t  Gy bf  Ghklmnprst Pwxyl   yk  gn   Gn r  *t	   whlmn  Gps  wtx }t n m  Gs n  *s rt  ww kn 2s  Gt  Gy k  s  Gy s  t kl  Nm  *st   lr  f  *m  k $r  b  *kl  Gn  Gs  Gt   *n  *s  t  *y  G@ "kln srst   *s t s  ]t  wx   f  r  *s  ]n s  Xb  *s n  Gs  *t  Gy   *n  *s  t   Gk  *n  Gs  *t
+  f  Nh lmn =r =s t  Gy  k  b Cm n  *s  *t  n  *s  ww  Ffm  *s bb @bfklmnprstwxy s |t ik   Gkln  Tr  s  ]t y   Gbf sk  Nl m ns t  *x  *y  l  nb  *n  *s  *t  wx   Gk  l  *n Is  Gt  Tb kln iprst  Cxy   n  *s  *t  *y   k  Gn  Cs  *t   *m  *s  *t  *y   *l  Nn  *t   ]r  *s  x l  *n  *s k b Jfhklmnprst Jw  wx y ll xgr 2l  Nn  Cs   Lr  *s  Gx  b  *n  *s t  *y n  *stk  m  *s  *t   Gk  qs  Bb !n  Gst  wx   *n ;mr  *s  *t   ]l  Gn  *s  Gt   Gm  n  *s  *t   b  *n r  *s :t  2f  wk  *ln 6r  *s  *t  
+n  *s  )S@b chk  lmn 7Yp =stw  y  G@  Gk  Gn   ?l  Nmn  *s  t  gy   gh  *s  Gk  n  ]t	 b TLf  *k  l  Gn  Nr Is  *t -Ys  f  l n  s |2t  Gk  Gl !t   *@bf klnprst  wx  Gy ;l  ?n  Gt -Yn  Ct  :Yn  Gst  wx  *y   Gf  *n  r  *s  *t   Gst   *n  r  *s  *t  wx   Gk  Gn r  s  ]t  *y l An  *s  *t   *n Pr  *s  *t  rk  Gl  Gn  *s  *tx 	Ns  ]r  *s  sf  gl  *np  *st  Gx  m  *s   *b  @ b fhklm n  Grstwx  *y n  *p	  bl  n  Np  r  s  Gt  Gy   *s  *t  *y   *k  s  Gy   s 6t  >bl  Gm  *s  t f  Gn  *s  *ts \k   ybf sh k  l  wm  Gnp n2r Yst  Gx Gy   *s  Gt x   Nn  Gp   b  l  gn  qs   Gk  ]l  Gr  *s  Gt  ?x   l n  s  *t bfkl mnrstwx  *l r   G@ k  *s  *t y   Gk  Gp  *s  -Yb k  Gn  *s ftx  *y  Gn  ]s   *n :st   r s  n  *t   Gn  s  *t   l  gn  s t  *s  Gx c>l @bf b4hklmnp  rstwxy klm .\l gt ]Ob  Gn  Gr gt   *l  Gn  rs  *t  k   *k /lln Cr  *s  *t   *k :2s	 bl  n  Gpr  st  *y  Ar   n  ?r  s  *t  *y $f   l 6nr  s  Fl  *n  *s  *t   *n  qs t  *y  Jb )l  Gn "p  *s  *t k l U@n st  *y
+  O@blm 6n Lxr  s  Gt  *x  6k  h  Gn  *s  ]t  wx  *y [n  b  Gm  *n  *s t  bl  Gnst  *y   *t Px  km  ]s -Jy  b f hk  n  *s  Gt  bfkl  Gmns  *tw  *xy k  Gr  stw y p  *sn gf t k  Gmr  s  Gy   l  *s  ]tf k  Gy   *n  s  Gt  *y   *n s At f  *t =r  15l  *sp   k  *n  *s  *t  *y   Gm  Gn  *t  b  Gn Pr  s  *t  *y b gl  *n  *s kt 	x  Gk  ]t f  k l  Cmnp st w  Gy  bk  *s  *t y #t  wx   l  r  *s  *t ix Ul @6n  Ak  Gl  *n  ]p R.r  *s  t  Jbf Bhkl dmn  Gprst  ?wy   ?@ s   l  Lr  *s  Gt  n 'us  *t  *y  Cl  *n  Gs &t   ]k  Gm  *n  *p s  *t  Gy  k  lm n  *st w Kn  k  *s  wx   l  gn r  *s  gk 	Ul  *n  *s   Gk 
+l  n  *st  Gw   *n  Gs  *t ix	   lmn p 	rs  *t  *y Ut   l m  *nr Is  *t Kw  gn  *s  t  Gy   l  gnt  Ak s  @ b4klmn ((prs  *t  ?w   *ns  Gt 2x   *n  *s 
+ t  wx   *n  *s  *t  gy r 	y   f  *k  Gn  Gs  ik @bfhklmnprst  Nwx  ]y   m n  s  Gt  *y  Ik  Gn  *s  *t  *y   ]l  *n  *s Zt  Gl  *r   *n Sr  *s  *t  &h  n  st  ]w  *y   Gl #Zr  *s   np  s  *t  *w  Cl  Gn  s  *t  *y
+  b  Nh Wkl  n st x  *y   *k  *s  t   ]l  Gn  Gr   b !n 6st   Tb   Gk  *n  *s  *t Ky l  *s ht   n 6s  *t b -Yf gklmnp Prs 5tx  *y  Nn  r  gk  *n  *s  *t  *y p  Gt  b  Gn  Gs  *t l 
+n  Cl &m  *s  *t   l  Gp  Gt	 b  Gf  *k  wm  Gn  *s t  *yk  l  Gt   Cl  *n  *s  *t  ob  Cf  ]klmn 9prs  ]tw  wx Py  -k !m  Gn  ]pst  *y   Gm  Gn  *s t  wx   Gs  Gy   Gkl  ]s  tt -s  sb  Gk  l  gp -st s   Gl  *s  *x   Gf  Gr  *s  Ct  Gy fm  *s  Gtr 
+ n   *s t y   Gb  Gn  gpst k n vps  k  *s   ]@bfklmnprst   Gk  Gln 	Up #Lrs syt gx   Gk gx  Uk 6p  l  ]n Pr  *sfl  m n  s tn 	s !t	 h ck Aum np  st  Gwk Bs l  *n  *s t   *k  *l  wr  *s bf k  *l  Gmn  *s   Gb f .k  ]l  r Vs   *k  Tl n  s   *st r  *s  k  *n  *tbf 	k :nptl  Nn  Gr  gs 
+t  k  *n #(s  *t n@  st  *x :s t  Gym   gl  *st Ak <lr k  qs  Gy @ sfk  Nmnp rstx  +s t  Gy  kl 	m np Rs  Gy  n  *y   *l  *s t  wx   *sym   *k s  t  Gy ,*s t  S@  *n  Gr ,s  *t k  *l  *n r  *s  *t  Gy  rl  Gst  wx  k  *n  *s  *t Ty rn ts  *y   l  Gm  Gn  *s  *t  wxr  *n  Gs  Gt  k l  ]n Tp  *s   *sty k lm  *s  gt  xGr   k X3st k  qs 	k   Gkln p  stx   k  *s y   h  *s k pm  r @bfhklmnprstwxy b Bkl %m  Gn  pr 9stw  Gxy  Glr  Gt  x   *k s  *y   *l n  *s t   Gl ir Cr  *t  Gx l  *s msn @tlb Rs   G@ b  wf  Ghklmn 8Hprst  *wxy  7l @n  *s  Gt  wx  	U@bhkl  *m n 0pst  wx  *y lr  ?l s  p It l n r  *s  *t   G@  gn  ?s  *y  Nn  *y   Gmp  *s 6t  Gk ln	   Gk 7l  Gn  Gp  *s  ]t  wx  Gy  ?k  Gn   n  *r  *s k  l 6n  *st   ]l  *n  *s  *t   Gr  *s  *t f  Gk  Gn  Gs  *t  Gy  
+n  *s  *t	   Gk  l Cm n  *p  *s  *t  Gy	   b f  Gk )l @[n  *s t  Gy  Ik  *n  r  *s t   *n  *s  x @b S.fklmnrstx &Xy n  Gr b%m r l n  ]s ct  wx Kt   ]fk Cm  np  r  *st wx  *y   *n  *s ;t  wx  Tm  *n  *s  *t   b  *n  r  *s  *t   ln   r  Gs   bn  *st x  It   r  *s  Gy
+  .b lk  l  n  Npstx  Gy  b f "l  Gn  *s t  *y	  !f  l  *m hn r  *s  *t  Gy  n  Gr  *s   bk  Glns  ]t @{y  *m  *n  *st  wx   Nm  *n  *s  *t   ]s !tx b l  ]t  wx   qt  Xbf  l Cm n  *st  k  l 6n  *s \t y  Cm  *n  *st  wx  Gy   *f An  Gr  *s  *t	   b MLkl Cm ns t  *y   *n  ]s  *t  *y   Gm  Gn  Gt n  *s  l  r  *s   Gb  Gklmn  Gpr  Gst  wxy  k  Gt  An  *st hf   Gn  *s t   gn  *s  Gt   r  *s  *ttr $k  ]t  wx @bfhklmnprst 7wxy   wl 6n   gk Il ?#s  Gt   Gl "n  *s  t  Gx   Gm  Nn  *s  cl  Gns &t  Gw  Cx  >It   *@  Gb ,f  ]kmn  Gprs 
+txy   wk  *n  *s t  wx   *n  qs  Gt  wx   b  *n st  wx   f  r  *s  f  *s  *t   l  Gm n s r	   *knp r  Gst  w )x  Mst   *n  r  *s  *t  wx l Cm  *nrs  *t   b  *n  *s  *t gx  ]s  wx  b  *n  *s  *t  wx   k Hs  :bf hkl  Nm  *nrst  wx  Gy l  *s  *t y  ]f gx )s  wx s  *y  b  *n  *s  *t  s 5t  wx   b  Gm  Gn  *st   k 	@r  wx  $m  Gnr  *s  *t  Gy  Gk  ]l  *s  Gy	  sf  ]k fl In  *p  Gr  *st  *l  ]t  wx
+   Gf lm  Gn 5pst  xy   bn  *st  Al )t k l  t  *y  f  l @[n  *s  *t	   b f k An  *s t  wx y   Gn qp bfkl \mnp ,st  Gw  wxy l  r  yt  *r  Gt   Gbl  Nr  *s  k  Gp  k  Nn  *t   l m  *s  Cy
+ b !f l  m  Gnr  *st  wx  Gk  l   l  Gn s t  5kr n^sb  n   G@bfkl  Gmn  Gpr  qst w  wxy  lll  Gn  ]t  wx   *f 6n  *y   l  *n  *s  ]t  wx   l s  t  *y   k s  t   *l  Gmn  *s  ]t  6k  l  Gr  *s   *k  *n r  *s  *t ix  Gy   *bl  *s   Gk  *s  wt  =xn  *s   *n $Rp  *s  Gt @bf :%hklmnprstwxy   *m  Gn  *s	   G@ k  *l  Gnr  *s  Gt  Gy   Gk  *s Ot  wx k lnr )st  wx s   m k  Gm  *n  s  *t  Gy  0l  Gn  sb n  *s  *t *y k  *s  w K;r	   bmnrst  wx  *y n  *s ft $k f  *k  *n  Gstrn fs   *k  l  gn @f 6k  ]m  Gs  Ak  *n  s  *t  Gy   n  *s  t  Gy  #b 2f k  l n r  s  *t  wx  *y k  *s  Tk  *s  Gy   Gf /|k n ,2r  *st  Cx   Gk  *nr  s  *t  wx  *k  *n  *s  *t  Gy k  l  gn  Gst  wx  0n  *r  *t   *f  gl  Gn  *s  Gt @ gl  *n  Gpr  *st Ak  *s  Gy pSm  Nn -Js   *n  ]t  wx  b m n 2s t  wx
+ fk  lm  Gn  wp st  Gy   l  gn  *t  *y 2Bp   *@  l n  *s   *k  l  Gn  *s   b f k lnr  *s !t "xy   l  *st  ,s  *x  Gm  gn s  Gy   Gnp  *s   Nr  *s  gk gl  n  Cr  *s  Gt   Gf n  Gp  *s   ]h  *n Pr  ]st  l  *s   g @bfhklmnprstwxy   *sy l  *s k  *sly (k
+  8fkl nrs  t  Nwy  Gb  Gt	  sf  *k  n  *p  qst  Nw y   *n 4r  *y   Gl m  Gn  *s  *t t   Gn  Tr   *x   *k =xl  Nn  grs   Gm  ]s  ]k n
+   bk  gln  Cpr  Gst  wx   *k  *n  r  *s  *t  Gy  f  l ~st   *k s f s >	t  k  s  Gy   *m  *n  Gs  *t  n  gpst fx  *y   l Bn  *t   *np Ar s  *t ln  gt 	m  Ct
+  bkl nrstx  Gy   l  Gn  *s  k  *s  *y |l n  *t   *st  Gy  *nr b ct  wx  Tb !f m Anr 	xs t  gk  gs   bn  *s  *t  l  *n  *s  *t klnrst  *y  gn  Gs   wm  Gn  s  Ct  *y   *n  s  *t  l Tm nr :st  l 6n  *s  *y   l n  Gr  *s  *t   *st   *n 2s  *t   n 6r  *s  *t  wx  Gy   Gkl hn s .t  Es  *y  	@  b  Cf 8klm np  *st  f  *n  r  *s  Gt  vk  *m  Gn km  *n  s  *t   l  *s  ]t  wx 6p  !7b df  Gkl  Gm nr Ist  Gy  k  ]t  wx  *y   k l  *s  Gy   Gs  gt  Gy  *@  Gk  *n Us It  Gn  ]r @  *nsl Ak t f   @bfhklmnprstwxy  -k 9l  *n 	Yr  *st  x  Wn  *s   Gkl m  Gn  *s  n  *s  Gt  *y   Gl  Gm  Gs Yt  Gy b f  Gkl  *mnrst  wx  *y 2l  t   *m  n r  s  *t  *y   Gn s  Gtx y  *k  l   Gn  Gr s t  wx  *y   Gk  *s st   ]r  *s  *t w  gkn  Gpst  Gy   ]k  l  *s  Gt   l  Gn  *t  b  *n  s  *t  Gy   Gk ln r  *s t  t x   b  wm  *n vrst x  Cm  *n  *s  *t  Gy   *n  r  *s  Gt   Gkl  Gn  Gpr  *s  *t   *s  Gt Pyp  *st Ur   *f \n  *s t  Gy bfkl a'm np )r 3stwy  *l \r  l   ]l  *p  *s k  *n  *p  *s 7t  *y  +Wt sp  Gt
+   b  Gk  Gl #m  Gn r  *s  Gt  Gy  wm  Gn   *sw n   *@bfh TNkl Kmnrs 	t x Gy 6k  Gl   ?l 6r  *s  Gt y  Gk :;t   ]f  Gm  Gns Gut  *y   ln  *s  *t  wx  	l 6n  Gs	  Jb  *k  l n  *r s t ux   f  Gl  Gm  n  qs  txrnl k   Gk  gn  *st r  *s cl  *s  Gy  ?n  Gr |2t   b  ln  Gp  *st  %l  *n  *s  *t  t b  Gl An  Cs  Gtw gx  Gp r  n   G@  bfkl Fmnprst w  *x  *y   ?lr  *s s  *t l  n 1-r  *s  ]t  wx   Nn  t  *y
+   fkm  ]nrst  wx Zy  b Tk  Tn s t  wx  Gy   n s Rrt  b An  qs  *t   t   *f  *n 	r +s  *t   Nk  n  Gst  *x  b n  *s  *t  l  ?r
+ fk  Gm  *n  yrstx  *y   *n  *s t  wx $1rt  wx  An  r  *s  *t   b  f /Mn  *s  *t   *s  *t  wx  b  Gnt  wx  Af An  *s  *t	  Tl Xmn  wp  stxy  Al s t   Gk  *n #r  *s  *t n  r   *s 9t   *k  lm 5Fn  Gp r  ]s t  wx ?yn _t @bfhklmnprstwxy  f  wl  *n  *s  *t  Gy   Gkln G^rs Ut  15m >ns tx  *y  !m  Gn  ]t   Gl  Gs   wm  *t w @  bkl  Gmn 4rst  Gw  wx &Xy Sn l  Gn  *s  *t Pm  *s  *y   Gk In  Nr  qs t  y   *sylfs s  *n b%t   bf  Gl  *n  *s #tpy Ur  !f  l ns  *t  Nw  *y  &m p  *t rw   *k  *l  *st   r  :bhklnrstx  *y   p  *s   lm  *s @t  *k  t  n  ?r Ast  wxy   *n  r  *s  *t  Ny   *n Ls  f  Nh  lm  *n >s  Gttr k  *s  Gy  Gm  *n  *s  *t  Gy   Gl  *s t  Gy
+  b f  l nr  s  *t ix  Gy 6k  l  gn  Gs  Gt  Gyn  f ]l  *s b  Gfkmn  ]p drs gYt  *x fyl  Gs  Gt  Gy  Cs   *s  Gt  wx  Gy   Nn  s   G@ f  l  Gs   l n  *s  *t  Tw gx bf  Nh  Gkl  wmnp  wrst Wwy l n  *s  t   n  s  *t  *y  rl n  Nr  *s  *t   *k  n 2s  *t  *y  T@  l  Gs t l  *n  r  *st  n  *s  *t   k  *n  *p  *s  *t   ?l +Hn 
+t   *f k  *l  r 	xs  Gt  gs   @bk l =mn ipstx  *y  *l  ?n  Gr  Gt  sbl Cm n  st  wx
+   b  l  Gm  gn |r $st  wx  *y   l  *n  *s  *t  *y   *n r  *s  *t   Nb  l  *s bfklmnp rst Xxystn $x k  Glm 	nrs  wx  qr  ]s   b  *n  *s  *t 2x  b  Gl n  *s  *t   b l  *n  *st   s 4t -Yk }%lnrs  ]t x  *kt ;k $Pn  ]bp s  wx  Gt 2x )l  gp 'st 2x  b  *f  *n r  *s  *t k  gnst  wxr f  ]t  wx   b  *f   b  Gl n  *s  *t  wx   *k st 9x   ln  *s  *t   Gst  Fll  Nnrs t  Gw n t n  *s  *t  wx   s t   b  Tf  *n  *s  *t  wx   Tnt  r  *s  ]f k Sl  *n `r  Gs  *t  l  *s   h Tl nr ks  Gt  Gy  Gn t   *l  wm Q n p  *s  *t   b 7Yfkl !n  rst  wx  *y   Gkl  *s  gk  *s  *y k  *n  *s  Gty  Gs  ]t  wx f  *n _s  if  k  Gm  *n  *s t  Gy   *l  r )"s  *t  wx -Yy  Gp  Ct  Jl  Gm 6n Vs  Gy bfklmnpr  st  Gxy  Gk Wl  l 6n   T@  *s  ]t  wx   Gm An =s  *t  *y   Ck  l 6n  *s   b  Gs rt  Nn  ]s   *n  *st x  Gy   gp vr f Ak  Gl  Gm  nr  s  *tw ix  Gy l  Gr gk l  Gm  Gn @  !7k l  *s   bfklmn  Gprs t swx  Gy l  *s  6n 	r  *s  *y   *ln  r  *s   *k  l   k  *n  *s  *t  *y   ]k  Gl  n  *s   l  Gmn  Gs  Gt Hh l As  Gy km  *n @p  *s  *t w dn  Gy n  *s   *s  *t ixn  	Jl  *s   b  ]l i8n  Gr  *s  *t
+   wf kl  Gm Bnr  st  *y r  *s  Gt g@ m |s |m 2s  Gy   m kl Aum n -Jps  Ctw  *x  ?yl  *@ Pn   ?n  *s  *y  )t  ]l  wm bfklmnprst  wwxy	   Gkl Cmn Prs t  ]y  ;f  ]k Cm  *n  *s t t   Gl Cm  *n  *s  *t
+  2fk l Cm  nr  Gstw r &t  wx   bn  *s  *t x s   l  gn  *r  Gl  *n  *s  *t  @fklmnprst  wx  *y r  *s   b  *n  *s  *t  Gy   *n K;r  *s  *t  b f Zmr >s  ]t  wx  Gn )t  wxbfps  ]t Rbt  An  Gr  *s  *t >s <lt   bk  Gnst x  Gyt  wx   f  *n  *s 2t  l  *n  *s ;t  wx  b  *f  ln  *s 2t  +n st  wx  Cm  *n  *s At  Gy r bkmnp  Gr {3st 
+x y   b Bl  *n  *s  *t  Cm An  *s t  wx !7bn  b  Nnt  wx   *f An  r  *s  *t t l !nt  wx  f  *s   l ns )t   *t gx   b 2f  n  *st  wx  Tf  l An  *s At   l $&n  Gp Ns  Gt   b fkln r  *st Pwxy   b Cm  *n  *s  ]t  wx k  *y   l  qs  ]t  wx	   Gf gk l n |2r  *s  *t  Gy n  sl	 blmn ,st  wx y  .k l  *st 1w Cm  *s  *t y   l  gn r  qs t  wx  *y b  Nn   l  Gn  *st  wx  l  *n  *s  *t   *n r  *s  *t   G@bfhk zLlmnstx  Gk l  yrkl mrs 2t  wx 
+xn x 3&tr t k 7lm 9p b   Nn  *s 6t   l  s At  1n  *s At  Gy	 k  l Cmnr  s  *t  Gy r  1k  Gl 	r  Gt Al  *ns  *t gtn   *s t	  kl  *mnrstx  Cmns  *t ^x Zy   *n mr  *s  *t  Cm  *n  Gr  *s At  sfst   b  *n  r  *s  *t  wx  Cm D+n  *s At	  bf 0Ck np  ]st  wx  b  Gl An  *s  *txn   l  *n  *s t  wx   l n  *s At  Gy	  	b f  Gl Cm  n  ]s At x  Tb 2f Ak  n ,s tx  Gn As  M%n  *s  *t
+ b dfk  Glnps  *t Py  2l  *n  *s  *tt   f  *n  *s  *t  k  *s .t   *st  wx  b f  *n  *s  *t   l  Gm  gnp  *tk wt  2fhm  Gn  *st x inb .l b  ]m  *n r  *s  *t pl bfklmn fprst  wx  Gy l n  *s  Gt   qs  yt  k ln :2s  *t ytk   *n s t   *f [lm  Gt |t	   b  Ck n  r 2s Et  wx  *y n p s   Gl  *s 
+t  Gy	 fk  l  *n  ]s tx  Gy  *k 
+lt  wx  2f  l 6n  ?s  Tb  Gn  *s  *t bk 4ns t  wx Zyt 2x   b &f  *n  *s  *t ixt  wx  Xb 2f An  *s t   f An  *s bt  f  Gh  *k  l  gn  *st  f  *n  wr  *s  *t   b )ol  Gnr  *s t  wx f  gk  gs  b  ]kn 7t  wx   l 7Ym  *n  *s  *t   Nk tsln  *r  *s   lx 4r bf  hklmnprst  wxy  l  ]s  Gt  *x  l s  ]t  wx h  Gknrst  wx t  \s  Gt  Gm  *t  f  Gn  *s  *t  b  f  k  *n  rs At  JZs  b hk  ln ""p 	r 	st  wxy  Tk  *n  *s  *t  Gy  Ik  *n  Gs  Gt   Gf l  n 'r  *s t  Gy  k Sw   G@  *kn  Gs  Gt  wx  Vb  nst  wx   Gm 
+t  *y  f  l  gn  *s   b yhk l dm  n  *p  Gs rt  wx  h  l  *s   Gl  ]n  Gr  +H@ Bbfhk lmnp rs  ]tx  Gyl  ?n  ?r 
+ltr   l  Gn  n  *s 7t  wx n gr  *s  Gt  t   Gk  l  ym  Gs  t l  *s  *t k   *n  *st  wxy   *m  *xkl 7lb  *k  *l  Ll  Gn  *s  Gt   b  Gfh l -m Bn Ist -x  Gy hk  b  Gl  *n  *s  *t  wx   Gkl m  gn  *s  *t   *n ,s  *t  *y   b Cm  Gn  Gp  *s t  b fl  Gnsn Mk  l  Gm  
+@  Gbfhkl mnp rst  *w >x sy   Nl  Gn s  *t  *x  Gl n n  s  *t  *y  h fn  s  Gt  *y   G@ fm  *s n   l  *p  *s k  Gn dst  dl  *n  s  *t  *y   G@  ]l  *sy  4D@ 4Lf 4]n 7lst  fw  f n  jn  *s   Gl m  *n  *st   *n  *p r  *s  *t  *y lm  Gn Tr  s  *t  *y   Gn  s &t  *y  &n b 1fklmnprstw Cxy  )l  Gr  *s  Gt   Gk l  Nn vr  *sk  Gnr  Gt  *y if qn  Gtn  Gp 
+t   *k s  Gy
+   Gbfkl  Gn )rst  wx b  gl  9l ?r  *s  k  *y   *s Kt  *k  Gm   Gn  *p  *s  Gkn  *s  *y k  ik  *s  Ct m ;n  *s swy Ns  Gy p  wm  Gt  Gx  Tf  Nk  Gn  *s bf  Cklmnprst  ?y  6k  l  *s  Gn  Gs xt  -n  *s  y@  Gnpn   Gm  Ns m  Gn "s 5t   *@ k s  ]t	 f  ?hkl  Gn :Yrs t k  Gs  *t y  l 1-r :s k  *s k  Ct pSr   Cln  s  *t  ks  Gt  Gy   n 6r  *s  Gt   bflnptn $kk 
+ s t   *s @tp r t  Gx  Gf  Gp xGr  sf  *k  *s @bfhklmnprstwxy b Aufh o7k m\l  wmnprst gw  Gy  ?n tl   gn  Ct   Gs  wt JIr  ws   n  ]s  *t   wpt  :nr  *t fp r  *s   Gn  *s Gw	  &fkl dnrst  Gx  n  *s  n  qs t  *y  "Ef ih  *kn  *s t x  *k  s  t   l  gnt  sf  *s  Gy   *m  *n  ;mbfkln TLprst  *w  y  k  Gm Cr  *s  *t y Cn  gs  Gt   *kn gr  s t  Gy  k  Gs  Gt  m  Gs  Gt   b  Gm  n  *s  *t k 2s t  ]t %x   l n  s  *t
+   *b  *f -k  Glm  Gn  Gp  Gs  Gtn s At bfh qklmnprstwxy   Gkln  *s   gnr  *s  yt  *y n  *s  Gy LSt  Gx IMl  Gr  Gs  Gx  l  *m  Gs   Gf  Gkn #(s  ]t gx  *y   *k  Gst   l s   *kn  *s  Gt  (l  *s  ?t ix  h k l  wm  Gn gr st w  *y   l  Gn  s  *t  Gy  6l  *n  Gp  Gs  Gt	   Gf  Gk  Cm !un p 2s  *t  Gy  b  Nf  l mn p  s @t 7#w 0@x  *y   *l  Gs  ]t V/x  sb  fk Tlm n  Gpr  s t  wx  Gy  p  *t   gl  qs   Gl )n Ns  *t  Gy   ]k  Gm  *s   ln  Gp  *s  Gt  *y l  *n  s  *t   ?n  *y   Gm  *s  Nw @bfhklmnprstwxy   Gm 6n  s t  *y	  6f _hl 
+nr  Gs  Gt  Gy   ?fn  *s t  *y  s   Gk  *s  *t Pw hkl Pm !n ;r s >:t x  y am  Nn F.s n  wx  6n  *s  Gw  *yl  Gs :;t   Cm  *s @ >@b f kl mn  ?prst  Gw  y   Cr  *k m  *y  k  *ns  *t   Gm  Gn  *s  *t  wx   Gm n vs  t   Gn  *s Kw  l  *s  s  *y   *b  ?k  *lnst  ?x   *n  ?r 2s  t  b  *l  Gn t   *n 
+r  *s   bf  hk  l 6nrst  Gx  Gy   ?m  Gn  *s  n  *r  *s b l  Gn  *s st  Gy   s  *y   wk  lnr  *s  ?w   Gn  *s x  l  Gn ,s  *t  *y	 k l  Gn pr  *st  Gwsn  ?x  p zs   r 2s   Gl [ns  Gt w  Gy   ?f  l  *n  *s  *t	  <f 6k Tl 2mnp  *st   h  *n  *s gk  wr It bnr  *s  Gt  Gy śl  k  *s [2k bf  hkl mnrstw >Ix   *l  *r  Ns l  gm  ?n  Gr 6s   ?p  *s  Gw   gl  *m st  wx   *n r  *s  *t   Gf 6n  qs  ty   gw n  Gs  *t gx JZ@   Tl In  s  *t   ?f  *np  *s  *t l  ?s n  *s  *t  Gy  'r  *l  r  Gt   G@  *l  n  st  Gx  wy  -Ys   wm &n  p  Gr s  *t w   Nb An  *s  Gt   G@b fhk mlnp  rs  ]t  Nw  *x  Gyl  *s  Gt gy   *s t  Gl Yt  Nl  r 
+s  *t	  kqf  Nhkl  *n  ]s  Gt  *x   Nn  wr  *s   *k 6n  ?s  *y	   ]l  Gm  *n  ]r  s  *t  *x  *y   *f k  Gl  *n  s  *t  Gy @ bfhklm  n prst  ]wxy  *k ir   Nl  r   *m  *s  Gt  *flm npr  s  Gt w  ]x  *y   l gm  *n  Gs  *t  wm  Gt gk  Gr   *n  *s  Gt  Gw  *y   *k Inr  *s  t  *y s  Gy   Gk  Gn s  Gt
+ b  *k  *l  wm  Gn  *s  ]t  wx  Gy sl bfkl m xnp  *s  Ct  y  Gk  *l  Gr   ?l   Gn  *s ft   Gn  *s st  *y   Gn  Nr  *s bfhklmnprstwx 
+y   Gk l  ]n r  *s l  Gk  Gm   Gm  *n  wr  *st  wx  2f  *n  *s  *t   ns t  wx  *y   l  Gm  Gn  *s  Gt   ]l  Nn  *r  *st +r  b  l  *n  Gs  *t  ?x   Gl  Gn  Gp r  *s  skl  ns  *t Pw  *y  Ek  *s  *y   l 2m n  *s  *t  ff k  Gl  *s ,tw  G@  ?p   l  Gm  gn  *s   G@  *n  t  Nl  *p  Gt   Gl  n  s  *t   Gl  *n  *s  Gt   G@kln  *prs 
+t sw  *y   Gr  *s  Gt   Gn  *s  t  ]x   gl  *n  r  *s  Gt  Gy   n  qs  *t  *x  *y  in  *s  *t Pw bfhklmn gp DTrstwxy  9l  Gt  *y  Vb k  Gr  *s  *t y   Gm  ?rs   wm  *n  *s  *t l n 6r  Gs  ]t  wx   Nr   k n  ]s t  *y  *l  n   Gk  l m lst   b  ?h  l  Gn  *s  *t  ]y   *f lm  gn 2s t l  gn  Nt  *y	  bk l  *n  ]p  *s  *ty  l  *r   wp  *s  5@ gk vl  *s  n   n  *s  Nw @bfklmnprstx y am  l An  wt  k j@r  *s  *t y
+   G@hl  Nmnr Fs (t  Gypt JZn   ls  ]t gx t  *k s  [st  s   ]k  Nn  *s  *t  *y   Gk  ]n s ;t  wx  y  Gl  Gn  *t   h  Gk  *l  *n  Gs t	  6k  *nr  s  *t Sw "x  *y   ns  *t t ~Fn   k  l  *n  *s  *t   l 6n kt bf klmn 6wpr  s  Gt  Nw  wx  Gy Il  Nn Gr ?#sl  6n  *s  Gt  *y b  l  ns t  *y >l  t   G@ Cln  Gr  *s  Ns  Gt  6h  l m vs  Gt   Gl  *n  *s  *t *y n  ss &l @bfhklmnprstwx Iy   *s  gw   Gkl Inr  *s  Gt  Gy   Gk ;n   *k  l  *s  Gt  wx  Gy   Gk ul  Gn Cr  Gs  Gt  Gx  wf  Gl  *n  Gs  Gt   Cf  Gkl *mn  Gpr  s  Ct  Nw   gnr  *st  *y  *n  Ns  *t  r  *y f  Gk Msr n   Nf n  ]s  ?7f Ik 	l  n s t  *y   ?@  ]k  Cl ln  *s  Gt bk  l m  Gns t   Gk  Tn  *s   *l  Gr  *s  >b f  *n  *s  Gt  *y 0f  Gk  Gl  pr  ws ff s 7t  wx
+   ]b hf 1l  Gmn  Grs  *t  Gy   h gk r  Gs   l  Gn Qs  *t   *f kl ?mnp st w  *y   b  *s  *y   Gs It  ?r  *s  Gt   Gk  Gns  gt  Gy  n   b  Gl  Gn  ]p  Gr hs t	   Ck  Gl  Gm  n  *st  *w  ]x s  Cr   Gk n  Gps  ]t n   b 5wkl  Gn  *st   gf  *n  *s  *t   l 6n  Gs bf Ehk lmnprst w  wxy  Gl  n  ws  Gt  l l  Lrk  Gn   Nl  Gn  *s   Gk  *n  *p r  *st  w   Cn  f n  *s  *t  Gk  Gm  *n  *s  *t  Gy   ]f  t   Gb k  *n  *s  *t  Gw hy  sw  x  6h 9Jk  *l  *n r  *s @bfhklmnprstwxy   Gm An  *s  *t	   wh $fklnr Is  ]t  *y   G@  Gs  *y  Gk  Gs  *k  ]l	 flnr Ist  Gx  y  *n  *s  *t y   Nb sf nr  s  Gt  *y  *k 2s  Gy  s  Gx   Nl un  *s  *t  *y  f "l  Gmns  *t  *y   Gs 6t  5rb  *s  *t   Gh  ]n bfh  Ckl "mnprs t  Nw =xx  Gy  Gkl  Gn  yr  Gt   *k  gn  *y   *l :2s   Gf 
+l  *s  An  s t  *y	   ?f hl *n +p  r  Gs  Gt f  *y   Nn r  *s  Gm  ]n  *s  *t  Gy  h  wk  ]m  *np  *s  *t  Cr bfhk lmnrstw "xy   wl  *s  Gy l  Tm  Gn 6r  *s  Gt  Gx   *f  *k  *s  *b gf   Nb gl n  s  *t  *y   wk  gl  Gns  Ny   ?fl  ?w  ;k  ls   *s t f  k  Gl .n p  *s  Gtl  ]m syr Dk   l 6n  *st  Gy  n sr b  h  kl omn 9prs  t 2x  Gy  G@  wr k (rn +6s  *y  h  r ,s  Gt   Gn gr  *s  *t  sf  *t   *n  ?s  *t b  Gn  *s bn  @bfkl smnprs  *t  Gx  y  fl  Nm  Np r  *s  l Pr s  l  *n  *s  Gy  6m  Gn 2s  *y   *k  l  *ns  *t ix  ?y   *m  *s t   wk  wl Hn  *s  *t  k  *n  *s  *t  *y   yk  *n  *s =xtyn @ bkl  wmn  Npstw sxy  Gn sy  Fb  Gf  wk l nr  s  *t  Cx  *y  gn  *s   *k  Gn  qs  *t   Ck  l gm  Gs  Gt
+ l gm np  r  st Pw  *y   rs ix  sf ol  ir  *s k l 
+nrs  *t :y   Gh  Gl  *s  pSk  *ns  *tx  Gy  k @   Gm  s  Gt  *y Sk  hn  *s bfklmnrstwx sy   Gk Al  *n r  *s  Gt  *f  l  Gl  p  *s t  *f  *k Ȅn  r s  Gt  *y 7n  Gt  h  *n  Gs 5t   *f  ]k  Gl LSn  *s  Gt  Auk  ?l  Gn  *st   Gk  Gn   Gk l  *n  *p Pr  *s  l  n  *s   l ʑn  *p  Ct bfhklmnpstw  ]xy	   *k  *l  Gm hn  r '{s  Gt  *y   ]l  *n  Np  *s  t :Yl  *m   *nr  *st If  ]p   f  glr  *s  *ns  *t  	b  *n  *s ;t  wx  n  s  *t  y   *k  Gm  *n  ]pst   f m k  Gn  s   l  gnr  *sf  Gm   *k  Gy k lm  *n  Gs  *t   b  Gk Tl Anr  *s f  ?p :t  5nr  *s at  xk 
+t	  5rb km  *n  *stx  Gy   *s ;t	  sbf lmn  Gp  *s  Cy   Gl  Gr  *ss   *s 2t   Gn  s ,tn  Gx  fs  t	  b  l  Gm n Pr  s  *t  Gy  *n  Gr  Gt x  
+b  Gls  2ln zs -t@  m
+  Jbk dl  Cm n Op  st  *y  Gk l	  fkln  wr s :t  Gy -Yf [2s  *y   *n  Gs  Gt bf -Yhklmnprs  Ctw  *x  Gy +k  *l H&r   Gl Cr  *s   Gk  l  wmn r  *s  t   *@  Gk  *n  *s  *t   ?f 5k  ns  *t  *y  St   Gk s bk  l  Gn rs  *t 6k  Tr   Nk  *s  Gt   *s t r  *t   *k  Gm Mn  Gs  *t  *y  /k vl  Gp  *st   ?f  Gp  *s 2t   Gf  Gk  *l [n  s  *t
+ b  Gf  l  wm nr  s  Gt Cy  G@  *l   *n  ?s  *t  *y f  Ckl  wmnr  s  ]tw  Nyn k   Gm  Gn  *s  *y   ]k  *s  Gy  in  *s  wm  wt  ifl  Gm n  Ns  Ck  *y  &@bfhklmn  ]prst  ]wx  *y   Gk  *r s  *t y   *l  Nnt   *s 	Ux   *s  t	   h  Gl  Gmnstx  *y   h 1p  *s t l  *s  *t  Cf   Gnr hsn b  gr  b  hk  Gmn  ]p  *r Mstw  *y  vn  *s  *t x   G@  *k  *p  Gs  Gt   Gn s  Gt   *n  ?s  *t  *x	   G@ b  Gh ln  ]rs y   l  r  *s  Gt   k  *t k  n st x b rl  Gns 7t  *x  r   *m  Ct k  Gl  *m  Gn  *s b
+   Gb  wf  k  l  *mn rs wk Gut  *y Tb l sf   *f vl Aum  Gn  *st   Gn  yr  s  Gt  *y	   Gkl XFm  Gn 6s  *t  Gx  Gy n  *s  *t br 'k   Gf  Gk  Tm  *st   Gns  *t   wm w  NÀ 	Yes*tpSGP"Te.
 F	-    T	vO톒	 D     h i k l \ ` ] ^     3 D G
  J
  I
@@ -404,40 +351,40 @@
  ¢ {p ¢ £ ¡   p:><jn7, ¡ ¡0 rr V#- { ¡ £  C' D&   u v o p d e f g  ¤ ¤ ¤ ¤    ¤ ¤ ¤ ¤ ¤  }  ¤ ¤	 ¤ =nv} ¡ ¡ ¡ ¡   
      u\ tV>y ȉ ¡$ ux1 w ӉP   >t qi ً j  £d £c   ISmw   Ij    0 2 f 1 6 7   9 7 8 = ª ¬     e  Ի d ǩ u!"_e&2.
 	
-#?V4>;cOd
+#?V4>;cOd
 J ˅   % & ,_Y? Ë 1O Ç È É -a g h    = > s t f q                	 
    } p q     ~½ ~½   N O Fʄb > ?   T U#        F G 0         E=1AMUFyPOpA % &          e % & '        " D E F 7 H I ( ) - * + K L e e  $          	  	  	  	   	 
  ~\}  X e e qg ] ^ qf . 2 / 0 3 4 ~U-B
 oXmyPQn!; O P  Ù   Ö 1  Ñ Ò (ujf
 |E Y ,            6 : 7 8        )Ä V W * 
-       L M      	 ˃¡ e 4 6 8 N O Fz݂             - 5 6 0 1 / . 2 3 4N    
+       L M      	 ˃¡ e 4 6 8 N O Fz݂             4N    
  5M         5T#  6
-R#  :S ; < >  7S 8R D E G N O M J H 9 < = : ? @ 8 B C Z [ H x y JȂc"s򐮁*sTLd$j -            RT\ Q R       R e e     Sz    / 6 7 : ; @ 8 9 0  = B C A >     V W X Y     \ e b ` g ] ^ z O Q R í î ï   r s               KǂsR@_sTL+yWj T j S a c b P] [ Q  	ae+׵ S T 
-	 ? @ T K f A B   U W o X V k k iO'{N n* o k l m r  u7 zNYI   {虭H s g h t u v w jH'qM yN % & $ K L       ] ^ [ӈܯ     ` d a b V    , - / 0 [ \ ] ^ _     * + csܮ    w     a c d b k l 3e)2p   u q s t          b c  	  !2 9 :    Q               *               #  f     x y   g ݆crCB        e e X>F p                i m j k %Ig1.0W{%邶m      Lh&       ~    Q	E j     \ ] SZ Tj ` a V W R	
-|  X6        *   e d %      % b c )[$d
+R#  :S ; < >  7S 8R D E G N O M J H 9 < = : ? @ 8 B C Z [ H x y - 5 6 0 1 / . 2 3 JȂc"s򐮁*sTLd$j -            RT\ Q R       R e e     Sz    / 6 7 : ; @ 8 9 0  = B C A >     V W X Y     \ e b ` g ] ^ z O Q R í î ï   r s               KǂsR@_sTL+yWj T j S a c b P] [ Q  	ae+׵ S T 
+	 ? @ T K f A B   U W o X V k k iO'{N n* o k l m r  u7 zNYI   {虭H s g h t u v w jH'qM yN % & $ K L       ] ^ [ӈܯ     ` d a b V    , - / 0 [ \ ] ^ _     * + csܮ    w     a c d b k l 3e)p   u q s t          b c  	  !2 9 :    Q               *               #  f     x y   g ݆crCB        e e X>F p                i m j k %Ig1.0W{%m      Lh& ʄ   ~     j                 *   e d %      % b c )[$d
 u
 "UBkX
 	?R
 9;	cl]b]'
-C
+?
  ) p q 21 > ? @ ¤f ¤g 4 5 6 ¤k     3/ U V X Y ¤r ¤s ¤u                              
                V      W    jL ɉ Ɍ ɋ Ɋ ɍ Ɏ ɇ Ɉ         G J N I H K L         g9  	      #      ! * + E F G 6 I       l m p + - , A / 0 2 O< X! Y T< = ? S	< P> Q R U< V; @ C D B A E F cʙ ^ _ b U V W Z i = [/ ] d     :B
  z { ʍ ʎ ʛ ʜ ʝ J ?E @ A K M ʔ ʕ ʓ =3	S > ;D G H   D6 ʆ ʇ E2 Q R ĉ~
 Z ¤d g h i j   #    
     	    S ŉ~X ¤e ];   f 0 ) *   d3 a b ^ _ w 3Αfdl =  1 Z l w [h+ 1 q m n x' ʩ ʥ ʦ ʪ ʨ ʭ ʮ | ʠ ʤ y% z ʯ ʱ ʵ ʰ ʲ ʳ 'E  m n o t- p v u q r ӁE[T|  ¤ K R N M L O P nf' o Y    l k k k k k        | " ˪I ˫ ˺< ˻ ˬ ˭ ˮ ˯ ˰ ˱ ˼ ˽ ˾   ˿   ł0 ˷= ˸ ˹ ˲ ˴ ˵ ˳     E F M N I H G J K T 7 < : 8 A > ? o j u r p n k l  y z { ~  O P Q S T t	 ^ B' C [ X	 V b _ ` vt ws     ̂ ̃ ̄ ̆ ̅ ̇ ̊ ̉ ̈ ̋ ̌ ˇi ˋ ˗^ ˘^ ˙] ˛^ ˌh ˈg ˉi }c ˀf  ~  ˅f ˃d ˁg   ˍ ˏ ˎ	 ː ˑ ˓ ˔ /       	    
-  3             1            . /   0 . +    ,      4 5 ́ ̣ ̴ ̵ ̠  ̭ ̰ ̯ ̮ ̱ ̲ ̬ ̪ ̥ ̦ ̧ 3m	         D F + :u   ]X X      ˣ ˦ ˥ ˤ ˧ ˨ * 1l	    Es            ' ( ˜ ˟ ˞ ˝ ˠ ˡ S T v1 ^9cJQ,1      3 6 5 4 7 8 m n j k ɜ ɦ ɞ ɟ ɢ ɣ ɤ ɥ ɧ ɝ ɨ ɩ  ~ ɂ Ƀ Ɂ  ɀ Ʉ Ʌ ɫ ɷ ɭ ɸ ɬ ɮ ɰ ɱ ɳ ɲ ɯ    C Ձ ԁ    ^ _ 䁟  ၢ b ƯT	,         ə\> ɚ\ / ' ) 3 * + , . 0 / 2 ɓ ɔ ɘW< ɖV:  0      i:fOM恭R	oʂ%M Ɂ     [ \ ] x ` ͈ ͌ ͋ ͉    M P O N Q R      		  	  
+  3             1            . /   0 . +    ,      4 5 ́ ̣ ̴ ̵ ̠  ̭ ̰ ̯ ̮ ̱ ̲ ̬ ̪ ̥ ̦ ̧ 3m	         D F + :u   ]X X      ˣ ˦ ˥ ˤ ˧ ˨ * 1l	    Es            ' ( ˜ ˟ ˞ ˝ ˠ ˡ S T v1 ^9cJQ,1      3 6 5 4 7 8 m n j k ɜ ɦ ɞ ɟ ɢ ɣ ɤ ɥ ɧ ɝ ɨ ɩ  ~ ɂ Ƀ Ɂ  ɀ Ʉ Ʌ ɫ ɷ ɭ ɸ ɬ ɮ ɰ ɱ ɳ ɲ ɯ    C Ձ ԁ    ^ _ 䁟  ၢ b ƯT	,         ə\> ɚ\ / ' ) 3 * + , . 0 / 2 ɓ ɔ ɘW< ɖV:  0      [:fOM恭R	oʂ%M Ɂ     [ \ ] x ` ͈ ͌ ͋ ͉    M P O N Q R      		  	  
 
  
     Hx p v r w q s t Y \
  b _
- ] Z [ c n    0 . / 6 7 8 ;  	9 * +   D  B D ,  %5  $ ! " x y 1: 3 4 2 | z ̀ ͇ ̓ ͂ ́ ̈́ ͅ IY        &   	  ͼ ͢ ͳ ͥ
+ ] Z [ c n    0 . / 6 7 8 ; ˡ 	9 * +   D  B D ,  %5  $ ! " x y 1: 3 4 2 | z ̀ ͇ ̓ ͂ ́ ̈́ ͅ IY        &   	  ͼ ͢ ͳ ͥ
 Q ͦ ͬ ͭ ͨZ ͯP ͧY ͩZ ͪY r ͽ ; Ϳ s K .       /                        J   ͣ ͤ               ͵\ ʹ ͸ ͷ Ͷ ͹ ͺ    gNM3So	[
  ¤ ¤ zC
  u v  ¤
- ¤ { | [xWU ͟ ¤~ } ~  ͒ ͑ ͏ ^6Z ͕ _6Y ͛ ͜ ͖ ͗ ¤ ¤ 1 2   ؁F       E  ' ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ( t u ¤ ¤ #	858Wɂo=YT_ߋm'gIۭ   ðH                      * +    mN n       oM s t {dg   |    
+ ¤ { | [xWU ͟ ¤~ } ~  ͒ ͑ ͏ ^6Z ͕ _6Y ͛ ͜ ͖ ͗ ¤ ¤ 1 2   ؁F       E  ' ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ¤ ( t u ¤ ¤ 	&#	858Wɂo=YT_ߋm'gIۭ   ðH                      * +    mN n       oM s t {dg   |    
  
  	 
-  !l              :-&vj        @,;kmi       # $     û    ެ ެ  u      	85$WE=Z0CxWHgP 1 1    9J       j k ?P
+  !l              \2:-&vj    ]     S(@,;kmi T7 ` a V{ W     # $     û    ެ ެ  u      	
+ 	85$WE=Z0CxWHgP 1 1    9J       j k X5?P
         0 1 % &    ާ     Y Z ٠CӁ  8 9 ݠGs < " ! ?Ӏ ܠBs  
 :u E D H IH, JH,            
 |k" u	V
@@ -528,8 +475,8 @@
  m m m l7 l m l m m m m l! m= m< m> m? m6 m7 n o j k C|/^`܄	fiZX8 h h h ' '
  '
  !F )+ ), !F # # #	 # # # # # # h k k &  l h  l h h h  " " " " " "  6a.Hs 6 5 6UH   " " " " "  6a*Hu 6h	?) ) )	 ) ) )FJ ) ) sQbFe#@w hR hU hT hS /   g g  g  ǂ ; < 6 7 i j @ A 0  ɂ° pl   s? s@ Sh  "# "$ "! "" "& g  S9    ͬ   #Ec # # #E{ # #   c hE hF 5 " " " " " h  h! h" h fz hd Jh? ( ( h2 h4 h6 h3 h7 3 " " " " Lg? h:. h15 -bF^l l 1 . h@ "Fv " hB hA #  #EY # # # h= (& (' (( h> h<- hi hj `S aR bR 2 zLhA	| " h* " " " h+ 4 ¬ h& h( h) h'  d	 ¬   !     
- ©G hX "?e" @w* )? i "އ % hY 8D  "܇? hW & &   3g 4g 5 = > <b " 6 7 8 9 A B k] 7 8 }b}G%  hr   # # # #E~ #      " " hs hv hw hx hu   f| f{ "2ru #Fy # h h #x # # # h h § h{ § hz*  h h h h h ## #$ #% #' h #( #) f~    h f} h # # # # #- #. #* #+ #, #0 h h #1 #2 h h h h #6 #4 #5 h h h T    ¯ #!Fc # # # # # # # # # #! #  h mC ~b|, #LK #   # # #
- # #Fx )fCgb3"q4X߆ # # h h #EFe #FFe # # # # # # h h h h h h h h h h h #FL # # h )E #? #@ #A #C ) h h h h #G #H #I #J #N #O #P #R h #K #L #M h nh ) h ) ) (]E8 f l l l g k]E k^ k_ k` ,`­ g g l & ( ' l l % (bgu	Wrj o o #;Fa #< #8 #9 #: #> #U #S #T h #h #i #k g& h (	 h h h h h h h #l #m (A (	 h h h #n #o #p #r )7@D h h h h #b #c #d #e #f #g g o o #s #t #u #v #w #V #W #Y h #ZFe #[ #\ #^ #_ #` h h h h 4ha$Gl fl f f fl pm pn l l nb na nd h "3 "O #} #~ # # "NM #D nf "M h h # # h h #FM h h h 4 4 4b4E "' "( "* "+ ", nQ #{FQ #x #y #z #| h "2 E3e g "1 ". h h "/ h ( ( nk nl nm nn no po "T "U pp g )?G "7 "8 ": "4 "5 "6 "; h h h   h g # # # # #FK # # # # # )?J       "B "< "? "> "= "@ "A "C "D gɄՄ g 
+ ©G hX "?e" @w* )? i "އ % hY 8D  "܇? hW & &   3g 4g 5 = > <b " 6 7 8 9 A B k] 7 8 }b}G%  hr   # # # #E~ #      " " hs hv hw hx hu   "2ru #Fy # h h #x # # # h h § h{ § hz*  h h h h h ## #$ #% #' h #( #) f~    h f} h # # # # #- #. #* #+ #, #0 h h #1 #2 h h h h #6 #4 #5 h h h T    ¯ #!Fc # # # # # # # # # #! #  h mC ~b|, #LK #   # # #
+ # #Fx f| f{ )fCgb3"q4X߆ # # h h #EFe #FFe # # # # # # h h h h h h h h h h h #FL # # h )E #? #@ #A #C ) h h h h #G #H #I #J #N #O #P #R h #K #L #M h nh ) h ) ) (]E8 f l l l g k]E k^ k_ k` ,`­ g g l & ( ' l l % (bgu	Wrj o o #;Fa #< #8 #9 #: #> #U #S #T h #h #i #k g& h (	 h h h h h h h #l #m (A (	 h h h #n #o #p #r )7@D h h h h #b #c #d #e #f #g g o o #s #t #u #v #w #V #W #Y h #ZFe #[ #\ #^ #_ #` h h h h 4ha$Gl fl f f fl pm pn l l nb na nd h "3 "O #} #~ # # "NM #D nf "M h h # # h h #FM h h h 4 4 4b4E "' "( "* "+ ", nQ #{FQ #x #y #z #| h "2 E3e g "1 ". h h "/ h ( ( nk nl nm nn no po "T "U pp g )?G "7 "8 ": "4 "5 "6 "; h h h   h g # # # # #FK # # # # # )?J       "B "< "? "> "= "@ "A "C "D gɄՄ g 
 gC (Z ([ # # # # h R X Y U S  #F\ # # # # # #     ª d #FM # # # fF ! ! h M :g ? #	 # # # # # # # # # ;g > < l l =Y '҃c2%ǁ> h (7 G"" MgA (6 l  # # # # # # h # # ubM3@% #F[ f l l l )! c d acWFX bcW #i l _a&1A l l L]cXFM ]    d d ! ! 
 `w:Ɓ>҂6 #FD # # # # # i l l l l l l i i l # # # # # ! " (I (J "< i	 i
  i !H (F?? (G (W S i   cO "N R iG (A (B (@ (? (C (D Qh.  	   
@@ -686,7 +633,7 @@
 	A=EUb VC Y \ Z X W=      w  yMo     a	 I1   JH  z {    	   L        L |  "  AS AT  لˈ	        n o   ^ r t s q u v wh 	 
   Kd Ke y z j     }^.f	 xi ݊ ފ DJ ug慼 S C Kh Ki Kj vI   C- C. Kk y{    Az       ފ/I C C ߄Cw	    ڄԂSG
      " # & % ! /Q   ^O O ƅܔ         ǁ%	 t7	 	  w x z { } ~   y  q8	  k l    D    a    ` @! @" @  n o               C >  Ab    E18L7	ng8	$=Q/
-ǅ	G4DN5	.     _ @c d e a Ap Aq Al An Ao Q S U @ g [ Xn ^ _ [m { } ~ x y         J J      K K K K k  K K    i j        At     #e@e	;   n K  l    [ \   #@恠 c 5 Ζ  MX MZ M[ MY J M\ Ma M` M_ ' ( Mg Mh $?e	 bL] e       |  'U   A A K K A A A A A $1  %1X J    U | }  1  ~q#T
+ǅ	G4DN5	.     _ @c d e a Ap Aq Al An Ao Q S U @ g [ Xn ^ _ [m { } ~ x y         J J      K K K K k  K K  i j             #e@e	;   n K  l    [ \   #@恠 c 5 Ζ  MX MZ M[ MY J M\ Ma M` M_ ' ( Mg Mh $?e	 bL] e       |  'U   A A K K A A A A A $1  %1X J    U | }  1  ~q#T
 	.`GT$:*+  3 C/ C0   J J _ ` @ 1 2 z ̄#: ( J J yq3Y
 "^9;Q)   a b &  Mt Az Ax Mv Mw M	1           1 1   N	0 J Hk Jk  Ik R@        Ry Uw S k j N Q P O 4W . 	+   *Z T V W + -M -M F1IJC1L		h32>	%	!d
 C[#ǅE8	%z54 D D   D D K K D     - D              O O O O   ӏ= ԏ;       4 5 %}N D K{߈    O O  A A ՚C ֚C   $  A       A          D D d  %#.6HR
@@ -1240,7 +1187,7 @@
  ` j k  c d b f 
  m l v s q n o ؋s a ^ _ YjGvllK^'t 7 < < YkFjb}lt n n  YK YL  K < < < < < YrE 4S A" A A  O @ YHjU = @ A B > D E  : 9 < F G YrE YzGnsR J Y} Y| 8 Y{ 5 Y~ Y PiDR	>PЉbւF%	Ny!DP   < v [7 [8 [9 YUʔcჳobU T YZf V X Y  Pf  \ ] YP YQ <    >   Cb Cc  [/ X| Xo YA YB YC [0 [2 [1 : [{         [{   	     YDjc,:c E E E E }@ 4 4 @ A ? YEwe P(";0b(ʒZ iG"^`e*5"^JGk3" $'Xk4qM
 ?g&BFw~ 95nK)	+TS	5$&5	"
- ; P Q ; Y n}s< 8 n}s; 8 % 7 ) * n P/ P0 Y V< V; / 0 P*lɔ[=2kw@J  " !   [ nH nI XU Y Y XV 8 C 9 ~u % & P Q ~v %  P, P-   ) * P+k$;1kv@J VL  nK Z\ Z] nP nQ S X X X X V& ( ) 9? \ ] + , ' P1"Ճ KwBAr܈ ;x Y>r A     Y Y Y 5 Y Y Y Y Y Y ;q ;s ;t ;r PVՅ!mJp V, _ ` ?v V>+ Xk V?* Xm Xn Z. Z/ Z0 V; V< Z1	8 Z: Z7	 Z5 Z2
+ ; P Q ; Y n}s< 8 n}s; 8 % 7 ) * n P/ P0 Y V< V; / 0 P*lɁޓ}=2kw@J  " !   nH nI XU Y Y XV 8 C 9 ~u % & P Q ~v %  P, P-   ) * P+k$;1kv@J VL  nK Z\ Z] nP nQ S X X X X V& ( ) 9? \ ] + , ' P1"Ճ KwBAr܈ ;x Y>r A     Y Y Y 5 Y Y Y Y Y Y ;q ;s ;t ;r PVՅ!mJp V, _ ` ?v V>+ Xk V?* Xm Xn Z. Z/ Z0 V; V< Z1	8 Z: Z7	 Z5 Z2
  Z3
  T Z W U ZE V ZF P2"ԃ KmUN܈ n8 7 8 Z_ ;{ ;y ;z Z` ni nk nl nj C C XLq3T	DhY@   @   PW
 QzA   Y
@@ -1358,10 +1305,10 @@
  ] L/ L. ]N ]R ]S ]V ]W ]Y ]X ]a K) L$ ]O ][ ]\ ]^ ]_ ]b K) K%} ]i ]j \ \ ]e ]c ]d ]f ]l ]g ]h L' ]m ]n \ \ L( L V. V/ L \ \ ]sB4o#&XN~(.BIcJc fw	XV	' ~ ~ ~ ~ ~ ~ ~ ~ ~ u u u  u pN pO ~ ~  ~ ~ ~ ~ u u u hq hr ~ p* hX h[ h\ hZ h] h^ f{~ p1 p. p/ p2 p3 f|z    hv8 ~ ~ ~ ~ xa8 ~ xb fxNT		 pK pL hj ~ hk ~ p4t p6 p8 p: p7 pA pB pC pD pE pF  p'c p( p5 p; p< p> p? ~     pP pS pT pQ pR oT pW ]}?^3 j j d x x ]>O d d ]>O x x d d d x x d x x x j j j  ? @ ]~A(~ x x j+; }6 }7 }8 x }3 }4 }5 x j! ^p?̈́E9{f      } } pF } uF fd } } } } } } f f f f f i i i i } } } }   } } f|E     f!  ^ǋR i] i` i^ i_ ifR ^݈
 e?~E
  } } ^ n rE" y     iӐ, _ _ _ y _5 _	, _ _ y _ _ i i y y҇ y yԇ y _ x y i y y _ _ _ _ _ _ _ _ p _ lN lO _ _ _ _ _ _ ]XC}h
-7  b&'6Au4%9>e2a́ރ22 ] k ] eo ] ] l l `~ ` ] ] j* j+ ]Å l l l l ` ` jc jd ` l8 l9 e l4 l1 l2 ` j j ja jb e e r r e e l l ]ey js ji jj jt ^k jh ^ _ jo jm jn ]ʍ ]ˍ jp ]d	q _ jk jl ]bp	S1 l  l" l! j j `gq `hp j>S j?S l$ l& l' l% ^ьFW j j ^ ^FW l* l, j@ j j jA ]bp	S0 ] jB jC q q j( j) dr# ds# ^ ^@ ^ j:v _>p j j q! q" ^ ^ _>o _ j j ^3I[6i	1=MYn y  y _\ _S _T _] _V _W _Y _Z _[ _` _a ^ؒ ^" _k5B _b _c _e _l7C d d d d d d dc _n j j _o ^ _ _ _ _ _ _ _ r r r ]
+7  b&'6Au4%9>e2a́ރ22 ] k ] j2 j3 j4 j5 eo ] ] l l `~ ` ] ] j* j+ ]Å l l l l ` ` jc jd ` l8 l9 e l4 l1 l2 ` j j ja jb e e r r e e l l ]ey js ji jj jt ^k jh ^ _ jo jm jn ]ʍ ]ˍ jp ]d	q _ jk jl ]bp	S1 l  l" l! j j `gq `hp j>S j?S l$ l& l' l% ^ьFW j j ^ ^FW l* l, j@ j j jA ]bp	S0 ] jB jC q q j( j) dr# ds# ^ ^@ ^ j:v _>p j j jF jG ^ ^ _>o _ j j ^3I[6i	1=MYn y  y _\ _S _T _] _V _W _Y _Z _[ _` _a ^ؒ ^" _k5B _b _c _e _l7C d d d d d d dc _n j j _o ^ _ _ _ _ _ _ _ r r r ]
 IS	663	'I _$ _% _q _r ^B:B _" _# ^$o _G _H _) _* _+ _f _g n  _J _K j j _P _Q ^#
-	: _. _- _N _O _5 _6 _4 _3 _2 _/ _0 _81 _90 _F ^ ^ _ d _  _w;\ ^ ^ _x:[ l/ ^dzh d|@ d}@ j2 j3 j4 j5 q. q1 q5 q6 q7 q8 q: q; q< q= q/ q3 q2 q4 ^  ^! q] q_ q` q^ ^4 ^5 q qc qg qd qe ^ ^ q q q q\ qi qa qb qv n` qz qI qJ jK ^), ^** jL q&t q's qo qt qr qp qq qj qk T ^%( qN ^&' qE qH ^$$ qF ^[ q{ qX qY n^ ^\ q| q} jǄ ^G jF jG ^- ^/ q~ q q q q q q) ^F q q q q q q q ]F
- ] q* q- ]SC	 qw qx r r q q q q q q q q q q q q q ^L|\ q q q q q ^8y q ^9z q q q q q q q qB qC ^= q ^: q q ^; q _ze2 r q j6l j7 qP r r _{e2 qQO qR `x ^( `y q q q q q q q q> q? r r q@ qA nb nc dӉ dӉ ]WAPC}	Y7
+	: _. _- _N _O _5 _6 _4 _3 _2 _/ _0 _81 _90 _F ^ ^ _ d _  _w;\ ^ ^ _x:[ l/ ^dzh d|@ d}@ q. q1 q5 q6 q7 q8 q: q; q< q= q/ q3 q2 q4 ^  ^! q] q_ q` q^ ^4 ^5 q qc qg qd qe ^ ^ q q q q\ qi qa qb qv n` qz qI qJ jK ^), ^** jL q&t q's qo qt qr qp qq qj qk T ^%( qN ^&' qE qH ^$$ qF ^[ q{ qX qY n^ ^\ q| q} jǄ ^G ^- ^/ q~ q q q q q q) ^F q q q q q q q ]F
+ ] q* q- ]SC	 qw qx r r q q q q q q q q q q q q q ^L|\ q q q q q ^8y q ^9z q q q q q q q qB qC ^= q ^: q q ^; q _ze2 r q r qP r r _{e2 qQO qR `x ^( `y q q q q q q q q> q? r r q@ qA nb nc dӉ dӉ ]WAPC}	Y7
 R56' =f	OR
 
  x ^ p p `}( p p p i{ i~ i i| e! i i i i i i i i i e e e e e	 i i	 i i
@@ -1370,8 +1317,8 @@
  x _ _ _ _ _ `d `e `f i i i i l l i ^	h5
 
 _
-MIj l l e e~ e e jY jZ ^ ^ ev ] ] ] ] ] jS jT er ] ] jR ] ] es e e ] ]R f f ^g>|
- y ^ e j[ j\ y y ^   l: l; ik ` ` il ^ ^m io   ^􁒆<݅ڐ>f r r ^;݅ډ _4B#+54		A].$PWI8$#t\
+MIj l l e e~ e e jY jZ ^ ^ ev ] ] ] ] ] jS jT er ] ] jR ] ] es e e ] ]R f f ^g>|
+ y ^ e j[ j\ y y ^E j9   l: l; ik ` ` il ^ ^m io   ^􁒆<݅ڐ>f r r ^;݅ډ _4B#+54		A].$PWI8$#t\
 e ` ` s a a a `c _ _ _ _傄 aj af ag ah l l e e*   `c af a a a as ar m a a a a lL l l l s s s s a! a a ae a" a$ a% a# ae afc a	 a
  a r| r zy m` m zS zT `2B?f sj s zO ` ` zK zL zM zN s a a sA sB s> s? a@F aG aC a9 a: a; a< a= a> aAB s< ` ` ` ` ` aD aE aF  s} s~ r ]{X2-? sH sI ]| s9 ` ` a^Ԏ      s s  sK sL sF sG sN _m _ s s s s l ad  s s _s _u sm sn so s ae a| ` s s ` _K#(H&4$܃3"n64!x&	d l l s l{W l| s^ s_ l s l l l aQM aT s[ s\ aRB aP a~ a a} s s _K5(&4!.&	o aV aW e e a l l `Z2J a a aLO* l lw lo lr ls lp lu lv ly lz lx azw lw m m s s a` a a s ` ` ` ` ad r s scE `ʁ a a ` `} s l  l l l\ l z( z) l l av aw _4!"	+2		@6,$
 O	CL7 
@@ -1643,7 +1590,7 @@
  
  i j ظ	  Œ F G ض زu| س   ؞ ؟ q t r p إ ئ A B ?, @ R  ا
 +	   ة   Q < :    p s z v u t w x r { q   &    |, ~  } I            ^9 SE  PH QF           v@
-˃ɂ=@k
+˃ɂ=@ĉ
 =)<	KuA-X"Z2\-*          ߰ ߱ ߭ ߮   d  e Z  ـC     M                فJ Lr   ᝇ%) E F                     ᠇$) ឆ
     	 i4 l k j m n   هk9ԃb3 ߄ ~ ߁ ߀  ߂ w z y x { |       Y w x }   { y O R Q P S T   և6  A      E   K N M L I
  J
@@ -1653,12 +1600,12 @@
  
    Ȇug7              i&+ S  Q U P sh h% , - ߊ 1 2 ߋ 0  +a ߥ ὓ
 
- 	 a 1 8 4 3 2 5 6 `k ܦgal ߓ ߖ ߕ ߔ ߑ ߒ ߞ ߡ ߠ ߟ ߢ ߣ ߩ ߬ ߫ ߪ   ᣉ ᤉ ٓ؉M C D   ۋ    ݋    n҅M! ; <  p p 8 Ѕi ; = > < ٔمy:$ME	p & ' ( k : l m :
- : lI!Fb 1 2  , . -   $& C 
-!        "( @ ՅN   K  C       ׶hK8x=).
+ 	 a 1 8 4 3 2 5 6 `k ܦgal ߓ ߖ ߕ ߔ ߑ ߒ ߞ ߡ ߠ ߟ ߢ ߣ ߩ ߬ ߫ ߪ   ᣉ ᤉ ٓ؉h C D   ۋ    ݋    n҅M! ; <  p p 8 Ѕi ; = > < ٔمy:$kE	p & ' ( k : l m :
+ : lI!Fb 1 2  , . -   $& 
+!        "( @ ՅN   K  C       ׶hK8x=).ሱ
 =)C	Eu.-U"XyV)     I J K ÒB ÒC Y Z  # ! & % $ " < Ek  Xd  O P Q ' ) * ( + , . / - k_ M ߳('  ߴ   
-           ߵ*'   N"0  p2    ׷N0y|A"'Q=Q	)) Ί   ݄    ݅ ݆ @ } ݀ 	 ~ ݈ ݁ ݂ @    ߶ ߹ ߸ ߷     守   ݐ ݍ ݎ Ί?R\ F E Â&W    kF\ ќ\ r s ׿  ' ׾ ) * ׺
-XzA  ։3  ׻$% \   ! ] ł       ٍ َ wϕ/ y z { ُ ْ      ێB ܎B *;\qNEpJ qZ rY t  r r  DH E F J   ٗ	A|.
+           ߵ*'   N"0  p2    ׷N0y|="'Q=Q	)) Ί   ݄    ݅ ݆ @ } ݀ 	 ~ ݈ ݁ ݂ @    ߶ ߹ ߸ ߷     守   ݐ ݍ ݎ Ί?R\ F E Â&׃    F\ ќ\ r s ׿  ' ׾ ) * ׺
+Xz=  ։3  ׻$% \   ! ] ł       ٍ َ wϕ/ y z { ُ ْ      ێB ܎B *;\qNEpJ qZ rY t  r r  DH E F J   ٗ	A|.
 +    h- < = @ A B C ٘		-+ b1 c  	 PUۄ y t m:     n o p    	=3ل v   w y 
    k
    { s t   ĂW^-F	 Ō ǂW_r     ɂTZ,G ܲV^r ȂW_r  ^q } ~ + , KF\("S ~         !]   E*2S Z [ /   . 6 7 8 : O 5 ;# 4     d 0 1 f e              |$;\
@@ -1762,7 +1709,7 @@
 f{}S6      ; ?U &(   &) ("x ?Y ; ; ; : ; < ]²2'o DٗY9(r &/ &0 &1 &: &2 &6 &5 &3 &4 &7 &8 $   &; &< &= &, ?W % & ]ub͆K Y( $G $H $< $J  @ @ @ @ $W $X   Bf  $P Bh	 $[ $L $A $B $D $C gnbJ9n $E $F $S E ; $] $^ $` $a G% I H% ; ; ? ? ? Ö Ö ? X × y $m ~  Ö Ö Ö Ö } $k $l Ö   Ö y { | z o / < Ö Ö < [X
 
 ]WK; ,I=
--<K1;UmcJT1T"s'3 n p q <K o i	 P - - ~ v   s u & z { | _ ` j r k:j > n l<X m w ?;Gwr + * , . -   Ԅy 	# ӄy ȃׂ   Å  	m DɃ     	n ) ) @&5G B 	Z Cƃd%  	\           GFb# Fv   - - - - -A     ` -v - F -8 
+-<K1;Umc?T1T"s'3 n p q <K o i	 P - - ~ v   s u & z { | _ ` j r k:j > n l<X m w ?;Gwr + * , . -   Ԅy 	# ӄy ȃׂ   Å  	m DɃ     	n ) ) @&5G B 	Z Cƃd%  	\           GFb# Fv   - - - - -A     ` -v - F -8 
 c ; ; ;
    - [%\Pc'a	T$NP\ g a b   h \  q;
  
@@ -1776,7 +1723,7 @@
    g4 g5£ g6£ 	, 	- gM	!a=KTx$M[ 
 }  l Z$ S T U g(	MfMCR	X聫 gF 9 : ; V W ` gBU	c B -0 gH g(X?j`;  -, g@UȂb 
 u 
-v     - j l k gC£80 gD£7 P Q - - - - bbJ:ӓ? % ^     \¦'cΏo1_j 	H 	I ;c ;d ;b gW g[ gX gY g g g g g g g gR gS gU gV g_ g\ g] ;a Ȃ vj g` gc gb ga gd gf gg ge  Ƈ"[    	[     gi  Ҙ       ˘  \¦&a	ˏn0j gv gj gm gl gk gn go -? gq gu gr gs gI gN gL gJ 	L gw g{ gx gy g| g~ g} gO gP ǂaׄ    U -  - - U  	N ā7 :PJZS1ZN*oH99
+v     - j l k gC£80 gD£7 P Q - - - - bbJ:ӓ? % ^     \¦'cΏo1_\ 	H 	I ;c ;d ;b gW g[ gX gY g g g g g g g gR gS gU gV g_ g\ g] Ȃ vj g` gc gb ga gd gf gg ge  Ƈ"[    	[     gi  Ҙ       ˘  \¦&a	ˏn0j gv gj gm gl gk gn go -? gq gu gr gs gI gN gL gJ 	L gw g{ gx gy g| g~ g} gO gP ǂaׄ    U -  - - U  	N ā7 :PJZS1ZN*oH99
 WB 	P 	Q H I J K c Y Z \ ] ^ _ ` b d   c d b e f   K N  L M   
 ~ ? @ , ' 2 1 0 - . ) ( { ×E ×F o`큚 	 
 _  w z x y k   r s Վ  	799ge)3")}9X "! C B   ;
@@ -1793,12 +1740,12 @@
  
  F HY&5큂  ̈́  E H K J I F G L    S2ꏬ , - 5   6      < <   d/   k 	U 	T 
 J
--\ c ` b c a   d e   ȁ MSC~x([ !KVc  ΁ j  Ɂ `Y a "JW`  I%X J  M  I J     3    t   ي L   O P -      Ձ ф Q R 3 4 $  L   Mk       fL<     
+-\ c ` b c a   d e   ȁ MSC~{([ !KVc  ΁ j  Ɂ `Y a "JW`  I%X J  M  I J     3    t   ي L   O P -      Ձ ф Q R 3 4 $  L   Mk       fL<     
   UƁ( f  	c 	d 	f  ( 	_ 	` 	a Q̃գY IPdB=      wb }c xa ye E 7 9 : 8 *       ~      BLX
 B= B $` %`   TSrRhp       ?    " B C F G R
 S
 T S  =        #              	  
-                  wKC}m	'W -R -S    
+                  wKC}p'W -R -S    
  H\      
  
  f2Sj;M9u\  
@@ -1828,7 +1775,7 @@
 .^['	='^
 Jm7d^I;LH<
 )YWr%39U	w
-#	z>1
+#	z>1
 T
 
 s'      -   Ór  M N P Q E F × |/   Ós Ó} Ó~ ×
diff -Naur vim73.orig/runtime/spell/ga/ga_IE.diff vim73/runtime/spell/ga/ga_IE.diff
--- vim73.orig/runtime/spell/ga/ga_IE.diff	2010-05-15 11:03:54.000000000 +0000
+++ vim73/runtime/spell/ga/ga_IE.diff	2013-08-04 19:09:09.070615157 +0000
@@ -29,7 +29,7 @@
 + # soundslike mapping from Aspell
 + # Aspell phonetics for Irish, by Kevin Scannell <scannell@slu.edu>
 + # Copyright 2002, 2003 Kevin P. Scannell, distributed under GNU GPL
-+ # version 2.0
++ # version 2.0 or the Vim license (attribution by Kevin Scannell, Jan 2012)
 + 
 + SAL followup 0                    # else breaks QU^, e.g.
 + SAL collapse_result 1             # no double letters in resulting strings
diff -Naur vim73.orig/runtime/spell/gd/gd_GB.diff vim73/runtime/spell/gd/gd_GB.diff
--- vim73.orig/runtime/spell/gd/gd_GB.diff	2010-05-15 11:03:33.000000000 +0000
+++ vim73/runtime/spell/gd/gd_GB.diff	2013-08-04 19:09:09.073948480 +0000
@@ -25,7 +25,7 @@
 + # soundslike mapping from Aspell
 + # Aspell phonetics for Irish, by Kevin Scannell <scannell@slu.edu>
 + # Copyright 2002, 2003 Kevin P. Scannell, distributed under GNU GPL
-+ # version 2.0
++ # version 2.0 or the Vim license (attribution by Kevin Scannell, Jan 2012)
 + 
 + SAL followup 0                    # else breaks QU^, e.g.
 + SAL collapse_result 1             # no double letters in resulting strings
diff -Naur vim73.orig/runtime/spell/hu/main.aap vim73/runtime/spell/hu/main.aap
--- vim73.orig/runtime/spell/hu/main.aap	2010-05-15 11:03:51.000000000 +0000
+++ vim73/runtime/spell/hu/main.aap	2013-08-04 19:09:09.083948450 +0000
@@ -7,19 +7,20 @@
     :progsearch VIM vim
 
 SPELLDIR = ..
+VIMRC = ../spell.vim
 FILES    = hu_HU.aff hu_HU.dic
 
 all: $SPELLDIR/hu.iso-8859-2.spl $SPELLDIR/hu.utf-8.spl \
         $SPELLDIR/hu.cp1250.spl ../README_hu.txt
 
 $SPELLDIR/hu.iso-8859-2.spl : $FILES
-        :sys env LANG=hu_HU.ISO8859-2 $VIM -u NONE -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+        :sys env LANG=hu_HU.ISO8859-2 $VIM -u $VIMRC -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
 
 $SPELLDIR/hu.utf-8.spl : $FILES
-        :sys env LANG=hu_HU.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+        :sys env LANG=hu_HU.UTF-8 $VIM -u $VIMRC -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
 
 $SPELLDIR/hu.cp1250.spl : $FILES
-        :sys $VIM -u NONE -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+        :sys $VIM -u $VIMRC -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/hu hu_HU" -c q
 
 ../README_hu.txt: README_hu_HU.txt
         :copy $source $target
diff -Naur vim73.orig/runtime/spell/spell.vim vim73/runtime/spell/spell.vim
--- vim73.orig/runtime/spell/spell.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/spell/spell.vim	2013-08-04 19:09:09.133948300 +0000
@@ -0,0 +1,4 @@
+" Settings for when generating spellfiles.
+"
+" Assume we have 2 Gbyte RAM available.
+set mkspellmem=1800000,6000,1600
diff -Naur vim73.orig/runtime/spell/sv/sv_SE.diff vim73/runtime/spell/sv/sv_SE.diff
--- vim73.orig/runtime/spell/sv/sv_SE.diff	2010-07-11 16:02:02.000000000 +0000
+++ vim73/runtime/spell/sv/sv_SE.diff	2013-08-04 19:09:09.137281623 +0000
@@ -27,7 +27,7 @@
 + # soundslike mapping from Aspell
 + # swedish_phonet.dat - Swedish phonetic transformation rules for aspell
 + # Copyright (C) 2000  Martin Norbck  <d95mback@dtek.chalmers.se>
-+ # distributed under GNU GPL
++ # distributed under GNU GPL or the Vim license, at your choice.
 + # version 0.2
 + 
 + SAL &	&
diff -Naur vim73.orig/runtime/synmenu.vim vim73/runtime/synmenu.vim
--- vim73.orig/runtime/synmenu.vim	2010-08-15 12:52:26.000000000 +0000
+++ vim73/runtime/synmenu.vim	2013-08-04 19:09:09.160614886 +0000
@@ -2,7 +2,7 @@
 " This file is normally sourced from menu.vim.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2010 Jul 26
+" Last Change:	2013 Jun 24
 
 " Define the SetSyn function, used for the Syntax menu entries.
 " Set 'filetype' and also 'syntax' if it is manually selected.
@@ -124,16 +124,17 @@
 an 50.20.370 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
 an 50.20.380 &Syntax.C.CRM114 :cal SetSyn("crm")<CR>
 an 50.20.390 &Syntax.C.Crontab :cal SetSyn("crontab")<CR>
-an 50.20.400 &Syntax.C.CSP :cal SetSyn("csp")<CR>
-an 50.20.410 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
-an 50.20.420 &Syntax.C.Cucumber :cal SetSyn("cucumber")<CR>
-an 50.20.430 &Syntax.C.CUDA :cal SetSyn("cuda")<CR>
-an 50.20.440 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
-an 50.20.450 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
-an 50.20.460 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
-an 50.20.470 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
-an 50.20.480 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
-an 50.20.490 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
+an 50.20.400 &Syntax.C.CSDL :cal SetSyn("csdl")<CR>
+an 50.20.410 &Syntax.C.CSP :cal SetSyn("csp")<CR>
+an 50.20.420 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
+an 50.20.430 &Syntax.C.Cucumber :cal SetSyn("cucumber")<CR>
+an 50.20.440 &Syntax.C.CUDA :cal SetSyn("cuda")<CR>
+an 50.20.450 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
+an 50.20.460 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
+an 50.20.470 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
+an 50.20.480 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
+an 50.20.490 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
+an 50.20.500 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
 an 50.30.100 &Syntax.DE.D :cal SetSyn("d")<CR>
 an 50.30.110 &Syntax.DE.Datascript :cal SetSyn("datascript")<CR>
 an 50.30.120 &Syntax.DE.Debian.Debian\ ChangeLog :cal SetSyn("debchangelog")<CR>
@@ -242,6 +243,11 @@
 an 50.50.370 &Syntax.HIJK.Initng :cal SetSyn("initng")<CR>
 an 50.50.380 &Syntax.HIJK.Inittab :cal SetSyn("inittab")<CR>
 an 50.50.390 &Syntax.HIJK.Inno\ setup :cal SetSyn("iss")<CR>
+an 50.50.393 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ dat :cal SetSyn ("upstreamdat")<CR>
+an 50.50.394 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ log :cal SetSyn ("upstreamlog")<CR>
+an 50.50.395 &Syntax.HIJK.Innovation\ Data\ Processing.Upstream\ Install\ log :cal SetSyn ("upstreaminstalllog")<CR>
+an 50.50.396 &Syntax.HIJK.Innovation\ Data\ Processing.Usserver\ log :cal SetSyn ("usserverlog")<CR>
+an 50.50.397 &Syntax.HIJK.Innovation\ Data\ Processing.USW2KAgt\ log :cal SetSyn ("usw2kagtlog")<CR>
 an 50.50.400 &Syntax.HIJK.InstallShield\ script :cal SetSyn("ishd")<CR>
 an 50.50.410 &Syntax.HIJK.Interactive\ Data\ Lang :cal SetSyn("idlang")<CR>
 an 50.50.420 &Syntax.HIJK.IPfilter :cal SetSyn("ipfilter")<CR>
diff -Naur vim73.orig/runtime/syntax/2html.vim vim73/runtime/syntax/2html.vim
--- vim73.orig/runtime/syntax/2html.vim	2010-08-12 19:57:26.000000000 +0000
+++ vim73/runtime/syntax/2html.vim	2013-08-04 19:09:09.163948210 +0000
@@ -1,6 +1,6 @@
 " Vim syntax support file
 " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2010 Aug 12
+" Last Change: 2013 Jun 19
 "
 " Additional contributors:
 "
@@ -20,7 +20,7 @@
 " this file uses line continuations
 let s:cpo_sav = &cpo
 let s:ls  = &ls
-set cpo-=C
+set cpo&vim
 
 let s:end=line('$')
 
@@ -33,26 +33,155 @@
 
 let s:settings = tohtml#GetUserSettings()
 
+if !exists('s:FOLDED_ID')
+  let s:FOLDED_ID  = hlID("Folded")     | lockvar s:FOLDED_ID
+  let s:FOLD_C_ID  = hlID("FoldColumn") | lockvar s:FOLD_C_ID
+  let s:LINENR_ID  = hlID('LineNr')     | lockvar s:LINENR_ID
+  let s:DIFF_D_ID  = hlID("DiffDelete") | lockvar s:DIFF_D_ID
+  let s:DIFF_A_ID  = hlID("DiffAdd")    | lockvar s:DIFF_A_ID
+  let s:DIFF_C_ID  = hlID("DiffChange") | lockvar s:DIFF_C_ID
+  let s:DIFF_T_ID  = hlID("DiffText")   | lockvar s:DIFF_T_ID
+  let s:CONCEAL_ID = hlID('Conceal')    | lockvar s:CONCEAL_ID
+endif
+
+" Whitespace
+if s:settings.pre_wrap
+  let s:whitespace = "white-space: pre-wrap; "
+else
+  let s:whitespace = ""
+endif
+
+if !empty(s:settings.prevent_copy)
+  if s:settings.no_invalid
+    " User has decided they don't want invalid markup. Still works in
+    " OpenOffice, and for text editors, but when pasting into Microsoft Word the
+    " input elements get pasted too and they cannot be deleted (at least not
+    " easily).
+    let s:unselInputType = ""
+  else
+    " Prevent from copy-pasting the input elements into Microsoft Word where
+    " they cannot be deleted easily by deliberately inserting invalid markup.
+    let s:unselInputType = " type='invalid_input_type'"
+  endif
+endif
+
 " When not in gui we can only guess the colors.
+" TODO - is this true anymore?
 if has("gui_running")
   let s:whatterm = "gui"
 else
   let s:whatterm = "cterm"
   if &t_Co == 8
-    let s:cterm_color = {0: "#808080", 1: "#ff6060", 2: "#00ff00", 3: "#ffff00", 4: "#8080ff", 5: "#ff40ff", 6: "#00ffff", 7: "#ffffff"}
+    let s:cterm_color = {
+	    \   0: "#808080", 1: "#ff6060", 2: "#00ff00", 3: "#ffff00",
+	    \   4: "#8080ff", 5: "#ff40ff", 6: "#00ffff", 7: "#ffffff"
+	    \ }
   else
-    let s:cterm_color = {0: "#000000", 1: "#c00000", 2: "#008000", 3: "#804000", 4: "#0000c0", 5: "#c000c0", 6: "#008080", 7: "#c0c0c0", 8: "#808080", 9: "#ff6060", 10: "#00ff00", 11: "#ffff00", 12: "#8080ff", 13: "#ff40ff", 14: "#00ffff", 15: "#ffffff"}
+    let s:cterm_color = {
+	    \   0: "#000000", 1: "#c00000", 2: "#008000", 3: "#804000", 
+	    \   4: "#0000c0", 5: "#c000c0", 6: "#008080", 7: "#c0c0c0", 
+	    \   8: "#808080", 9: "#ff6060", 10: "#00ff00", 11: "#ffff00",
+	    \   12: "#8080ff", 13: "#ff40ff", 14: "#00ffff", 15: "#ffffff"
+	    \ }
 
     " Colors for 88 and 256 come from xterm.
     if &t_Co == 88
-      call extend(s:cterm_color, {16: "#000000", 17: "#00008b", 18: "#0000cd", 19: "#0000ff", 20: "#008b00", 21: "#008b8b", 22: "#008bcd", 23: "#008bff", 24: "#00cd00", 25: "#00cd8b", 26: "#00cdcd", 27: "#00cdff", 28: "#00ff00", 29: "#00ff8b", 30: "#00ffcd", 31: "#00ffff", 32: "#8b0000", 33: "#8b008b", 34: "#8b00cd", 35: "#8b00ff", 36: "#8b8b00", 37: "#8b8b8b", 38: "#8b8bcd", 39: "#8b8bff", 40: "#8bcd00", 41: "#8bcd8b", 42: "#8bcdcd", 43: "#8bcdff", 44: "#8bff00", 45: "#8bff8b", 46: "#8bffcd", 47: "#8bffff", 48: "#cd0000", 49: "#cd008b", 50: "#cd00cd", 51: "#cd00ff", 52: "#cd8b00", 53: "#cd8b8b", 54: "#cd8bcd", 55: "#cd8bff", 56: "#cdcd00", 57: "#cdcd8b", 58: "#cdcdcd", 59: "#cdcdff", 60: "#cdff00", 61: "#cdff8b", 62: "#cdffcd", 63: "#cdffff", 64: "#ff0000"})
-      call extend(s:cterm_color, {65: "#ff008b", 66: "#ff00cd", 67: "#ff00ff", 68: "#ff8b00", 69: "#ff8b8b", 70: "#ff8bcd", 71: "#ff8bff", 72: "#ffcd00", 73: "#ffcd8b", 74: "#ffcdcd", 75: "#ffcdff", 76: "#ffff00", 77: "#ffff8b", 78: "#ffffcd", 79: "#ffffff", 80: "#2e2e2e", 81: "#5c5c5c", 82: "#737373", 83: "#8b8b8b", 84: "#a2a2a2", 85: "#b9b9b9", 86: "#d0d0d0", 87: "#e7e7e7"})
+      call extend(s:cterm_color, {
+	    \   16: "#000000", 17: "#00008b", 18: "#0000cd", 19: "#0000ff",
+	    \   20: "#008b00", 21: "#008b8b", 22: "#008bcd", 23: "#008bff",
+	    \   24: "#00cd00", 25: "#00cd8b", 26: "#00cdcd", 27: "#00cdff",
+	    \   28: "#00ff00", 29: "#00ff8b", 30: "#00ffcd", 31: "#00ffff",
+	    \   32: "#8b0000", 33: "#8b008b", 34: "#8b00cd", 35: "#8b00ff",
+	    \   36: "#8b8b00", 37: "#8b8b8b", 38: "#8b8bcd", 39: "#8b8bff",
+	    \   40: "#8bcd00", 41: "#8bcd8b", 42: "#8bcdcd", 43: "#8bcdff",
+	    \   44: "#8bff00", 45: "#8bff8b", 46: "#8bffcd", 47: "#8bffff",
+	    \   48: "#cd0000", 49: "#cd008b", 50: "#cd00cd", 51: "#cd00ff",
+	    \   52: "#cd8b00", 53: "#cd8b8b", 54: "#cd8bcd", 55: "#cd8bff",
+	    \   56: "#cdcd00", 57: "#cdcd8b", 58: "#cdcdcd", 59: "#cdcdff",
+	    \   60: "#cdff00", 61: "#cdff8b", 62: "#cdffcd", 63: "#cdffff",
+	    \   64: "#ff0000"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   65: "#ff008b", 66: "#ff00cd", 67: "#ff00ff", 68: "#ff8b00",
+	    \   69: "#ff8b8b", 70: "#ff8bcd", 71: "#ff8bff", 72: "#ffcd00",
+	    \   73: "#ffcd8b", 74: "#ffcdcd", 75: "#ffcdff", 76: "#ffff00",
+	    \   77: "#ffff8b", 78: "#ffffcd", 79: "#ffffff", 80: "#2e2e2e",
+	    \   81: "#5c5c5c", 82: "#737373", 83: "#8b8b8b", 84: "#a2a2a2",
+	    \   85: "#b9b9b9", 86: "#d0d0d0", 87: "#e7e7e7"
+	    \ })
     elseif &t_Co == 256
-      call extend(s:cterm_color, {16: "#000000", 17: "#00005f", 18: "#000087", 19: "#0000af", 20: "#0000d7", 21: "#0000ff", 22: "#005f00", 23: "#005f5f", 24: "#005f87", 25: "#005faf", 26: "#005fd7", 27: "#005fff", 28: "#008700", 29: "#00875f", 30: "#008787", 31: "#0087af", 32: "#0087d7", 33: "#0087ff", 34: "#00af00", 35: "#00af5f", 36: "#00af87", 37: "#00afaf", 38: "#00afd7", 39: "#00afff", 40: "#00d700", 41: "#00d75f", 42: "#00d787", 43: "#00d7af", 44: "#00d7d7", 45: "#00d7ff", 46: "#00ff00", 47: "#00ff5f", 48: "#00ff87", 49: "#00ffaf", 50: "#00ffd7", 51: "#00ffff", 52: "#5f0000", 53: "#5f005f", 54: "#5f0087", 55: "#5f00af", 56: "#5f00d7", 57: "#5f00ff", 58: "#5f5f00", 59: "#5f5f5f", 60: "#5f5f87", 61: "#5f5faf", 62: "#5f5fd7", 63: "#5f5fff", 64: "#5f8700"})
-      call extend(s:cterm_color, {65: "#5f875f", 66: "#5f8787", 67: "#5f87af", 68: "#5f87d7", 69: "#5f87ff", 70: "#5faf00", 71: "#5faf5f", 72: "#5faf87", 73: "#5fafaf", 74: "#5fafd7", 75: "#5fafff", 76: "#5fd700", 77: "#5fd75f", 78: "#5fd787", 79: "#5fd7af", 80: "#5fd7d7", 81: "#5fd7ff", 82: "#5fff00", 83: "#5fff5f", 84: "#5fff87", 85: "#5fffaf", 86: "#5fffd7", 87: "#5fffff", 88: "#870000", 89: "#87005f", 90: "#870087", 91: "#8700af", 92: "#8700d7", 93: "#8700ff", 94: "#875f00", 95: "#875f5f", 96: "#875f87", 97: "#875faf", 98: "#875fd7", 99: "#875fff", 100: "#878700", 101: "#87875f", 102: "#878787", 103: "#8787af", 104: "#8787d7", 105: "#8787ff", 106: "#87af00", 107: "#87af5f", 108: "#87af87", 109: "#87afaf", 110: "#87afd7", 111: "#87afff", 112: "#87d700"})
-      call extend(s:cterm_color, {113: "#87d75f", 114: "#87d787", 115: "#87d7af", 116: "#87d7d7", 117: "#87d7ff", 118: "#87ff00", 119: "#87ff5f", 120: "#87ff87", 121: "#87ffaf", 122: "#87ffd7", 123: "#87ffff", 124: "#af0000", 125: "#af005f", 126: "#af0087", 127: "#af00af", 128: "#af00d7", 129: "#af00ff", 130: "#af5f00", 131: "#af5f5f", 132: "#af5f87", 133: "#af5faf", 134: "#af5fd7", 135: "#af5fff", 136: "#af8700", 137: "#af875f", 138: "#af8787", 139: "#af87af", 140: "#af87d7", 141: "#af87ff", 142: "#afaf00", 143: "#afaf5f", 144: "#afaf87", 145: "#afafaf", 146: "#afafd7", 147: "#afafff", 148: "#afd700", 149: "#afd75f", 150: "#afd787", 151: "#afd7af", 152: "#afd7d7", 153: "#afd7ff", 154: "#afff00", 155: "#afff5f", 156: "#afff87", 157: "#afffaf", 158: "#afffd7"})
-      call extend(s:cterm_color, {159: "#afffff", 160: "#d70000", 161: "#d7005f", 162: "#d70087", 163: "#d700af", 164: "#d700d7", 165: "#d700ff", 166: "#d75f00", 167: "#d75f5f", 168: "#d75f87", 169: "#d75faf", 170: "#d75fd7", 171: "#d75fff", 172: "#d78700", 173: "#d7875f", 174: "#d78787", 175: "#d787af", 176: "#d787d7", 177: "#d787ff", 178: "#d7af00", 179: "#d7af5f", 180: "#d7af87", 181: "#d7afaf", 182: "#d7afd7", 183: "#d7afff", 184: "#d7d700", 185: "#d7d75f", 186: "#d7d787", 187: "#d7d7af", 188: "#d7d7d7", 189: "#d7d7ff", 190: "#d7ff00", 191: "#d7ff5f", 192: "#d7ff87", 193: "#d7ffaf", 194: "#d7ffd7", 195: "#d7ffff", 196: "#ff0000", 197: "#ff005f", 198: "#ff0087", 199: "#ff00af", 200: "#ff00d7", 201: "#ff00ff", 202: "#ff5f00", 203: "#ff5f5f", 204: "#ff5f87"})
-      call extend(s:cterm_color, {205: "#ff5faf", 206: "#ff5fd7", 207: "#ff5fff", 208: "#ff8700", 209: "#ff875f", 210: "#ff8787", 211: "#ff87af", 212: "#ff87d7", 213: "#ff87ff", 214: "#ffaf00", 215: "#ffaf5f", 216: "#ffaf87", 217: "#ffafaf", 218: "#ffafd7", 219: "#ffafff", 220: "#ffd700", 221: "#ffd75f", 222: "#ffd787", 223: "#ffd7af", 224: "#ffd7d7", 225: "#ffd7ff", 226: "#ffff00", 227: "#ffff5f", 228: "#ffff87", 229: "#ffffaf", 230: "#ffffd7", 231: "#ffffff", 232: "#080808", 233: "#121212", 234: "#1c1c1c", 235: "#262626", 236: "#303030", 237: "#3a3a3a", 238: "#444444", 239: "#4e4e4e", 240: "#585858", 241: "#626262", 242: "#6c6c6c", 243: "#767676", 244: "#808080", 245: "#8a8a8a", 246: "#949494", 247: "#9e9e9e", 248: "#a8a8a8", 249: "#b2b2b2", 250: "#bcbcbc", 251: "#c6c6c6", 252: "#d0d0d0", 253: "#dadada", 254: "#e4e4e4", 255: "#eeeeee"})
+      call extend(s:cterm_color, {
+	    \   16: "#000000", 17: "#00005f", 18: "#000087", 19: "#0000af",
+	    \   20: "#0000d7", 21: "#0000ff", 22: "#005f00", 23: "#005f5f",
+	    \   24: "#005f87", 25: "#005faf", 26: "#005fd7", 27: "#005fff",
+	    \   28: "#008700", 29: "#00875f", 30: "#008787", 31: "#0087af",
+	    \   32: "#0087d7", 33: "#0087ff", 34: "#00af00", 35: "#00af5f",
+	    \   36: "#00af87", 37: "#00afaf", 38: "#00afd7", 39: "#00afff",
+	    \   40: "#00d700", 41: "#00d75f", 42: "#00d787", 43: "#00d7af",
+	    \   44: "#00d7d7", 45: "#00d7ff", 46: "#00ff00", 47: "#00ff5f",
+	    \   48: "#00ff87", 49: "#00ffaf", 50: "#00ffd7", 51: "#00ffff",
+	    \   52: "#5f0000", 53: "#5f005f", 54: "#5f0087", 55: "#5f00af",
+	    \   56: "#5f00d7", 57: "#5f00ff", 58: "#5f5f00", 59: "#5f5f5f",
+	    \   60: "#5f5f87", 61: "#5f5faf", 62: "#5f5fd7", 63: "#5f5fff",
+	    \   64: "#5f8700"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   65: "#5f875f", 66: "#5f8787", 67: "#5f87af", 68: "#5f87d7",
+	    \   69: "#5f87ff", 70: "#5faf00", 71: "#5faf5f", 72: "#5faf87",
+	    \   73: "#5fafaf", 74: "#5fafd7", 75: "#5fafff", 76: "#5fd700",
+	    \   77: "#5fd75f", 78: "#5fd787", 79: "#5fd7af", 80: "#5fd7d7",
+	    \   81: "#5fd7ff", 82: "#5fff00", 83: "#5fff5f", 84: "#5fff87",
+	    \   85: "#5fffaf", 86: "#5fffd7", 87: "#5fffff", 88: "#870000",
+	    \   89: "#87005f", 90: "#870087", 91: "#8700af", 92: "#8700d7",
+	    \   93: "#8700ff", 94: "#875f00", 95: "#875f5f", 96: "#875f87",
+	    \   97: "#875faf", 98: "#875fd7", 99: "#875fff", 100: "#878700",
+	    \   101: "#87875f", 102: "#878787", 103: "#8787af", 104: "#8787d7",
+	    \   105: "#8787ff", 106: "#87af00", 107: "#87af5f", 108: "#87af87",
+	    \   109: "#87afaf", 110: "#87afd7", 111: "#87afff", 112: "#87d700"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   113: "#87d75f", 114: "#87d787", 115: "#87d7af", 116: "#87d7d7",
+	    \   117: "#87d7ff", 118: "#87ff00", 119: "#87ff5f", 120: "#87ff87",
+	    \   121: "#87ffaf", 122: "#87ffd7", 123: "#87ffff", 124: "#af0000",
+	    \   125: "#af005f", 126: "#af0087", 127: "#af00af", 128: "#af00d7",
+	    \   129: "#af00ff", 130: "#af5f00", 131: "#af5f5f", 132: "#af5f87",
+	    \   133: "#af5faf", 134: "#af5fd7", 135: "#af5fff", 136: "#af8700",
+	    \   137: "#af875f", 138: "#af8787", 139: "#af87af", 140: "#af87d7",
+	    \   141: "#af87ff", 142: "#afaf00", 143: "#afaf5f", 144: "#afaf87",
+	    \   145: "#afafaf", 146: "#afafd7", 147: "#afafff", 148: "#afd700",
+	    \   149: "#afd75f", 150: "#afd787", 151: "#afd7af", 152: "#afd7d7",
+	    \   153: "#afd7ff", 154: "#afff00", 155: "#afff5f", 156: "#afff87",
+	    \   157: "#afffaf", 158: "#afffd7"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   159: "#afffff", 160: "#d70000", 161: "#d7005f", 162: "#d70087",
+	    \   163: "#d700af", 164: "#d700d7", 165: "#d700ff", 166: "#d75f00",
+	    \   167: "#d75f5f", 168: "#d75f87", 169: "#d75faf", 170: "#d75fd7",
+	    \   171: "#d75fff", 172: "#d78700", 173: "#d7875f", 174: "#d78787",
+	    \   175: "#d787af", 176: "#d787d7", 177: "#d787ff", 178: "#d7af00",
+	    \   179: "#d7af5f", 180: "#d7af87", 181: "#d7afaf", 182: "#d7afd7",
+	    \   183: "#d7afff", 184: "#d7d700", 185: "#d7d75f", 186: "#d7d787",
+	    \   187: "#d7d7af", 188: "#d7d7d7", 189: "#d7d7ff", 190: "#d7ff00",
+	    \   191: "#d7ff5f", 192: "#d7ff87", 193: "#d7ffaf", 194: "#d7ffd7",
+	    \   195: "#d7ffff", 196: "#ff0000", 197: "#ff005f", 198: "#ff0087",
+	    \   199: "#ff00af", 200: "#ff00d7", 201: "#ff00ff", 202: "#ff5f00",
+	    \   203: "#ff5f5f", 204: "#ff5f87"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   205: "#ff5faf", 206: "#ff5fd7", 207: "#ff5fff", 208: "#ff8700",
+	    \   209: "#ff875f", 210: "#ff8787", 211: "#ff87af", 212: "#ff87d7",
+	    \   213: "#ff87ff", 214: "#ffaf00", 215: "#ffaf5f", 216: "#ffaf87",
+	    \   217: "#ffafaf", 218: "#ffafd7", 219: "#ffafff", 220: "#ffd700",
+	    \   221: "#ffd75f", 222: "#ffd787", 223: "#ffd7af", 224: "#ffd7d7",
+	    \   225: "#ffd7ff", 226: "#ffff00", 227: "#ffff5f", 228: "#ffff87",
+	    \   229: "#ffffaf", 230: "#ffffd7", 231: "#ffffff", 232: "#080808",
+	    \   233: "#121212", 234: "#1c1c1c", 235: "#262626", 236: "#303030",
+	    \   237: "#3a3a3a", 238: "#444444", 239: "#4e4e4e", 240: "#585858",
+	    \   241: "#626262", 242: "#6c6c6c", 243: "#767676", 244: "#808080",
+	    \   245: "#8a8a8a", 246: "#949494", 247: "#9e9e9e", 248: "#a8a8a8",
+	    \   249: "#b2b2b2", 250: "#bcbcbc", 251: "#c6c6c6", 252: "#d0d0d0",
+	    \   253: "#dadada", 254: "#e4e4e4", 255: "#eeeeee"
+	    \ })
     endif
   endif
 endif
@@ -73,19 +202,33 @@
   endfun
 endif
 
+" Find out the background and foreground color for use later
+let s:fgc = s:HtmlColor(synIDattr(hlID("Normal"), "fg#", s:whatterm))
+let s:bgc = s:HtmlColor(synIDattr(hlID("Normal"), "bg#", s:whatterm))
+if s:fgc == ""
+  let s:fgc = ( &background == "dark" ? "#ffffff" : "#000000" )
+endif
+if s:bgc == ""
+  let s:bgc = ( &background == "dark" ? "#000000" : "#ffffff" )
+endif
+
 if !s:settings.use_css
   " Return opening HTML tag for given highlight id
-  function! s:HtmlOpening(id)
+  function! s:HtmlOpening(id, extra_attrs)
     let a = ""
     if synIDattr(a:id, "inverse")
       " For inverse, we always must set both colors (and exchange them)
       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
-      let a = a . '<span style="background-color: ' . ( x != "" ? x : s:fgc ) . '">'
+      let a = a . '<span '.a:extra_attrs.'style="background-color: ' . ( x != "" ? x : s:fgc ) . '">'
       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
       let a = a . '<font color="' . ( x != "" ? x : s:bgc ) . '">'
     else
       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
-      if x != "" | let a = a . '<span style="background-color: ' . x . '">' | endif
+      if x != ""
+	let a = a . '<span '.a:extra_attrs.'style="background-color: ' . x . '">'
+      elseif !empty(a:extra_attrs)
+	let a = a . '<span '.a:extra_attrs.'>'
+      endif
       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
       if x != "" | let a = a . '<font color="' . x . '">' | endif
     endif
@@ -96,7 +239,7 @@
   endfun
 
   " Return closing HTML tag for given highlight id
-  function! s:HtmlClosing(id)
+  function! s:HtmlClosing(id, has_extra_attrs)
     let a = ""
     if synIDattr(a:id, "underline") | let a = a . "</u>" | endif
     if synIDattr(a:id, "italic") | let a = a . "</i>" | endif
@@ -107,24 +250,190 @@
       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
       if x != "" | let a = a . '</font>' | endif
       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
-      if x != "" | let a = a . '</span>' | endif
+      if x != "" || a:has_extra_attrs | let a = a . '</span>' | endif
     endif
     return a
   endfun
 endif
 
+" Use a different function for formatting based on user options. This way we
+" can avoid a lot of logic during the actual execution.
+"
+" Build the function line by line containing only what is needed for the options
+" in use for maximum code sharing with minimal branch logic for greater speed.
+"
+" Note, 'exec' commands do not recognize line continuations, so must concatenate
+" lines rather than continue them.
+if s:settings.use_css
+  " save CSS to a list of rules to add to the output at the end of processing
+
+  " first, get the style names we need
+  let wrapperfunc_lines = [
+	\ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, make_unselectable, unformatted)',
+	\ '',
+	\ '  let l:style_name = synIDattr(a:style_id, "name", s:whatterm)'
+	\ ]
+  if &diff
+    let wrapperfunc_lines += [
+	\ '  let l:diff_style_name = synIDattr(a:diff_style_id, "name", s:whatterm)']
+
+  " Add normal groups and diff groups to separate lists so we can order them to
+  " allow diff highlight to override normal highlight
+
+  " if primary style IS a diff style, grab it from the diff cache instead
+  " (always succeeds because we pre-populate it)
+  let wrapperfunc_lines += [
+	\ '',
+	\ '  if a:style_id == s:DIFF_D_ID || a:style_id == s:DIFF_A_ID ||'.
+	\ '          a:style_id == s:DIFF_C_ID || a:style_id == s:DIFF_T_ID',
+	\ '    let l:saved_style = get(s:diffstylelist,a:style_id)',
+	\ '  else'
+	\ ]
+  endif
+
+  " get primary style info from cache or build it on the fly if not found
+  let wrapperfunc_lines += [
+	\ '    let l:saved_style = get(s:stylelist,a:style_id)',
+	\ '    if type(l:saved_style) == type(0)',
+	\ '      unlet l:saved_style',
+	\ '      let l:saved_style = s:CSS1(a:style_id)',
+	\ '      if l:saved_style != ""',
+	\ '        let l:saved_style = "." . l:style_name . " { " . l:saved_style . "}"',
+	\ '      endif',
+	\ '      let s:stylelist[a:style_id]= l:saved_style',
+	\ '    endif'
+	\ ]
+  if &diff
+    let wrapperfunc_lines += [ '  endif' ]
+  endif
+
+  " Build the wrapper tags around the text. It turns out that caching these
+  " gives pretty much zero performance gain and adds a lot of logic.
+
+  let wrapperfunc_lines += [
+	\ '',
+	\ '  if l:saved_style == "" && empty(a:extra_attrs)'
+	\ ]
+  if &diff
+    let wrapperfunc_lines += [
+	\ '    if a:diff_style_id <= 0'
+	\ ]
+  endif
+  " no surroundings if neither primary nor diff style has any info
+  let wrapperfunc_lines += [
+	\ '       return a:text'
+	\ ]
+  if &diff
+    " no primary style, but diff style
+    let wrapperfunc_lines += [
+	\ '     else',
+	\ '       return "<span class=\"" .l:diff_style_name . "\">".a:text."</span>"',
+	\ '     endif'
+	\ ]
+  endif
+  " open tag for non-empty primary style
+  let wrapperfunc_lines += [
+	\ '  else']
+  " non-empty primary style. handle either empty or non-empty diff style.
+  "
+  " separate the two classes by a space to apply them both if there is a diff
+  " style name, unless the primary style is empty, then just use the diff style
+  " name
+  let diffstyle =
+	  \ (&diff ? '(a:diff_style_id <= 0 ? "" : " ". l:diff_style_name) .'
+	  \        : "")
+  if s:settings.prevent_copy == ""
+    let wrapperfunc_lines += [
+	  \ '    return "<span ".a:extra_attrs."class=\"" . l:style_name .'.diffstyle.'"\">".a:text."</span>"'
+	  \ ]
+  else
+
+    "
+    " Wrap the <input> in a <span> to allow fixing the stupid bug in some fonts
+    " which cause browsers to display a 1px gap between lines when these
+    " <input>s have a background color (maybe not really a bug, this isn't
+    " well-defined)
+    "
+    " use strwidth, because we care only about how many character boxes are
+    " needed to size the input, we don't care how many characters (including
+    " separately counted composing chars, from strchars()) or bytes (from
+    " len())the string contains. strdisplaywidth() is not needed because none of
+    " the unselectable groups can contain tab characters (fold column, fold
+    " text, line number).
+    "
+    " Note, if maxlength property needs to be added in the future, it will need
+    " to use strchars(), because HTML specifies that the maxlength parameter
+    " uses the number of unique codepoints for its limit.
+    let wrapperfunc_lines += [
+	  \ '    if a:make_unselectable',
+	  \ '      return "<span ".a:extra_attrs."class=\"" . l:style_name .'.diffstyle.'"\">'.
+	  \                '<input'.s:unselInputType.' class=\"" . l:style_name .'.diffstyle.'"\"'.
+	  \                 ' value=\"".substitute(a:unformatted,''\s\+$'',"","")."\"'.
+	  \                 ' onselect=''this.blur(); return false;'''.
+	  \                 ' onmousedown=''this.blur(); return false;'''.
+	  \                 ' onclick=''this.blur(); return false;'''.
+	  \                 ' readonly=''readonly'''.
+	  \                 ' size=\"".strwidth(a:unformatted)."\"'.
+	  \                 (s:settings.use_xhtml ? '/' : '').'></span>"',
+	  \ '    else',
+	  \ '      return "<span ".a:extra_attrs."class=\"" . l:style_name .'. diffstyle .'"\">".a:text."</span>"'
+	  \ ]
+  endif
+  let wrapperfunc_lines += [
+	\ '  endif',
+	\ 'endfun'
+	\ ]
+else
+  " Non-CSS method just needs the wrapper.
+  "
+  " Functions used to get opening/closing automatically return null strings if
+  " no styles exist.
+  if &diff
+    let wrapperfunc_lines = [
+	  \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, unusedarg, unusedarg2)',
+	  \ '  return s:HtmlOpening(a:style_id, a:extra_attrs).(a:diff_style_id <= 0 ? "" :'.
+	  \                                     's:HtmlOpening(a:diff_style_id, "")).a:text.'.
+	  \   '(a:diff_style_id <= 0 ? "" : s:HtmlClosing(a:diff_style_id, 0)).s:HtmlClosing(a:style_id, !empty(a:extra_attrs))',
+	  \ 'endfun'
+	  \ ]
+  else
+    let wrapperfunc_lines = [
+	  \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, unusedarg, unusedarg2)',
+	  \ '  return s:HtmlOpening(a:style_id, a:extra_attrs).a:text.s:HtmlClosing(a:style_id, !empty(a:extra_attrs))',
+	  \ 'endfun'
+	  \ ]
+  endif
+endif
+
+" create the function we built line by line above
+exec join(wrapperfunc_lines, "\n")
+
+let s:diff_mode = &diff
+
 " Return HTML valid characters enclosed in a span of class style_name with
 " unprintable characters expanded and double spaces replaced as necessary.
-function! s:HtmlFormat(text, style_name, diff_style_name)
+"
+" TODO: eliminate unneeded logic like done for BuildStyleWrapper
+function! s:HtmlFormat(text, style_id, diff_style_id, extra_attrs, make_unselectable)
   " Replace unprintable characters
-  let formatted = strtrans(a:text)
+  let unformatted = strtrans(a:text)
 
-  " separate the two classes by a space to apply them both if there is a diff
-  " style name
-  let l:style_name = a:style_name . (a:diff_style_name == '' ? '' : ' ') . a:diff_style_name
+  let formatted = unformatted
 
   " Replace the reserved html characters
-  let formatted = substitute(substitute(substitute(substitute(substitute(formatted, '&', '\&amp;', 'g'), '<', '\&lt;', 'g'), '>', '\&gt;', 'g'), '"', '\&quot;', 'g'), "\x0c", '<hr class="PAGE-BREAK">', 'g')
+  let formatted = substitute(formatted, '&', '\&amp;',  'g')
+  let formatted = substitute(formatted, '<', '\&lt;',   'g')
+  let formatted = substitute(formatted, '>', '\&gt;',   'g')
+  let formatted = substitute(formatted, '"', '\&quot;', 'g')
+  " &apos; is not valid in HTML but it is in XHTML, so just use the numeric
+  " reference for it instead. Needed because it could appear in quotes
+  " especially if unselectable regions is turned on.
+  let formatted = substitute(formatted, '"', '\&#0039;', 'g')
+
+  " Replace a "form feed" character with HTML to do a page break
+  " TODO: need to prevent this in unselectable areas? Probably it should never
+  " BE in an unselectable area...
+  let formatted = substitute(formatted, "\x0c", '<hr class="PAGE-BREAK">', 'g')
 
   " Replace double spaces, leading spaces, and trailing spaces if needed
   if ' ' != s:HtmlSpace
@@ -133,31 +442,115 @@
     let formatted = substitute(formatted, ' \+$', s:HtmlSpace, 'g')
   endif
 
-  " Enclose in a span of class style_name
-  let formatted = '<span class="' . l:style_name . '">' . formatted . '</span>'
+  " Enclose in the correct format
+  return s:BuildStyleWrapper(a:style_id, a:diff_style_id, a:extra_attrs, formatted, a:make_unselectable, unformatted)
+endfun
 
-  " Add the class to class list if it's not there yet.
-  " Add normal groups to the beginning so diff groups can override them.
-  let s:id = hlID(a:style_name)
-  if index(s:idlist, s:id ) == -1
-    if a:style_name =~ 'Diff\%(Add\|Change\|Delete\|Text\)'
-      call add(s:idlist, s:id)
+" set up functions to call HtmlFormat in certain ways based on whether the
+" element is supposed to be unselectable or not
+if s:settings.prevent_copy =~# 'n'
+  if s:settings.number_lines
+    if s:settings.line_ids
+      function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+	if a:lnr > 0
+	  return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.s:settings.id_suffix.'" ', 1)
+	else
+	  return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
+	endif
+      endfun
     else
-      call insert(s:idlist, s:id)
+      function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+	return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
+      endfun
     endif
+  elseif s:settings.line_ids
+    " if lines are not being numbered the only reason this function gets called
+    " is to put the line IDs on each line; "text" will be emtpy but lnr will
+    " always be non-zero, however we don't want to use the <input> because that
+    " won't work as nice for empty text
+    function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.s:settings.id_suffix.'" ', 0)
+    endfun
   endif
-  
-  " Add the diff highlight class to class list if used and it's not there yet.
-  " Add diff groups to the end so they override the other highlighting.
-  if a:diff_style_name != ""
-    let s:diff_id = hlID(a:diff_style_name)
-    if index(s:idlist, s:diff_id) == -1
-      call add(s:idlist, s:diff_id)
-    endif
+else
+  if s:settings.line_ids
+    function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+      if a:lnr > 0
+	return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.s:settings.id_suffix.'" ', 0)
+      else
+	return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+      endif
+    endfun
+  else
+    function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+    endfun
   endif
-
-  return formatted
-endfun
+endif
+if s:settings.prevent_copy =~# 'd'
+  function! s:HtmlFormat_d(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
+  endfun
+else
+  function! s:HtmlFormat_d(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+  endfun
+endif
+if s:settings.prevent_copy =~# 'f'
+  " Note the <input> elements for fill spaces will have a single space for
+  " content, to allow active cursor CSS selection to work.
+  "
+  " Wrap the whole thing in a span for the 1px padding workaround for gaps.
+  function! s:FoldColumn_build(char, len, numfill, char2, class, click)
+    let l:input_open = "<input readonly='readonly'".s:unselInputType.
+	  \ " onselect='this.blur(); return false;'".
+	  \ " onmousedown='this.blur(); ".a:click." return false;'".
+	  \ " onclick='return false;' size='".
+	  \ string(a:len + (empty(a:char2) ? 0 : 1) + a:numfill) .
+	  \ "' "
+    let l:common_attrs = "class='FoldColumn' value='"
+    let l:input_close = (s:settings.use_xhtml ? "' />" : "'>")
+    return "<span class='".a:class."'>".
+	  \ l:input_open.l:common_attrs.repeat(a:char, a:len).
+	  \ (!empty(a:char2) ? a:char2 : "").
+	  \ l:input_close . "</span>"
+  endfun
+  function! s:FoldColumn_fill()
+    return s:FoldColumn_build('', s:foldcolumn, 0, '', 'FoldColumn', '')
+  endfun
+else
+  " For normal fold columns, simply space-pad to the desired width (note that
+  " the FoldColumn definition includes a whitespace:pre rule)
+  function! s:FoldColumn_build(char, len, numfill, char2, class, click)
+    return "<a href='#' class='".a:class."' onclick='".a:click."'>".
+	  \ repeat(a:char, a:len).a:char2.repeat(' ', a:numfill).
+	  \ "</a>"
+  endfun
+  function! s:FoldColumn_fill()
+    return s:HtmlFormat(repeat(' ', s:foldcolumn), s:FOLD_C_ID, 0, "", 0)
+  endfun
+endif
+if s:settings.prevent_copy =~# 't'
+  " put an extra empty span at the end for dynamic folds, so the linebreak can
+  " be surrounded. Otherwise do it as normal.
+  "
+  " TODO: isn't there a better way to do this, than placing it here and using a
+  " substitute later?
+  if s:settings.dynamic_folds
+    function! s:HtmlFormat_t(text, style_id, diff_style_id)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1) .
+	    \ s:HtmlFormat("", a:style_id, 0, "", 0)
+    endfun
+  else
+    function! s:HtmlFormat_t(text, style_id, diff_style_id)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
+    endfun
+  endif
+else
+  function! s:HtmlFormat_t(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+  endfun
+endif
 
 " Return CSS style describing given highlight id (can be empty)
 function! s:CSS1(id)
@@ -172,7 +565,15 @@
     let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
     if x != "" | let a = a . "color: " . x . "; " | endif
     let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
-    if x != "" | let a = a . "background-color: " . x . "; " | endif
+    if x != ""
+      let a = a . "background-color: " . x . "; "
+      " stupid hack because almost every browser seems to have at least one font
+      " which shows 1px gaps between lines which have background
+      let a = a . "padding-bottom: 1px; "
+    elseif (a:id == s:FOLDED_ID || a:id == s:LINENR_ID || a:id == s:FOLD_C_ID) && !empty(s:settings.prevent_copy)
+      " input elements default to a different color than the rest of the page
+      let a = a . "background-color: " . s:bgc . "; "
+    endif
   endif
   if synIDattr(a:id, "bold") | let a = a . "font-weight: bold; " | endif
   if synIDattr(a:id, "italic") | let a = a . "font-style: italic; " | endif
@@ -232,7 +633,11 @@
 let s:orgbufnr = winbufnr(0)
 let s:origwin_stl = &l:stl
 if expand("%") == ""
-  exec 'new Untitled.'.(s:settings.use_xhtml ? 'x' : '').'html'
+  if exists('g:html_diff_win_num')
+    exec 'new Untitled_win'.g:html_diff_win_num.'.'.(s:settings.use_xhtml ? 'x' : '').'html'
+  else
+    exec 'new Untitled.'.(s:settings.use_xhtml ? 'x' : '').'html'
+  endif
 else
   exec 'new %.'.(s:settings.use_xhtml ? 'x' : '').'html'
 endif
@@ -250,7 +655,6 @@
 let s:newwin_stl = &l:stl
 
 " on the new window, set the least time-consuming fold method
-let s:old_fdm = &foldmethod
 let s:old_fen = &foldenable
 setlocal foldmethod=manual
 setlocal nofoldenable
@@ -265,6 +669,19 @@
 let s:old_magic = &magic
 set magic
 
+" set the fileencoding to match the charset we'll be using
+let &l:fileencoding=s:settings.vim_encoding
+
+" According to http://www.w3.org/TR/html4/charset.html#doc-char-set, the byte
+" order mark is highly recommend on the web when using multibyte encodings. But,
+" it is not a good idea to include it on UTF-8 files. Otherwise, let Vim
+" determine when it is actually inserted.
+if s:settings.vim_encoding == 'utf-8'
+  setlocal nobomb
+else
+  setlocal bomb
+endif
+
 let s:lines = []
 
 if s:settings.use_xhtml
@@ -283,7 +700,7 @@
 let s:HtmlEndline = ''
 if s:settings.no_pre
   let s:HtmlEndline = '<br' . s:tag_close
-  let s:LeadingSpace = '&nbsp;'
+  let s:LeadingSpace = s:settings.use_xhtml ? '&#160;' : '&nbsp;'
   let s:HtmlSpace = '\' . s:LeadingSpace
 endif
 
@@ -305,7 +722,12 @@
 call add(s:lines, '<meta name="syntax" content="'.s:current_syntax.'"'.s:tag_close)
 call add(s:lines, '<meta name="settings" content="'.
       \ join(filter(keys(s:settings),'s:settings[v:val]'),',').
+      \ ',prevent_copy='.s:settings.prevent_copy.
       \ '"'.s:tag_close)
+call add(s:lines, '<meta name="colorscheme" content="'.
+      \ (exists('g:colors_name')
+      \ ? g:colors_name
+      \ : 'none'). '"'.s:tag_close)
 
 if s:settings.use_css
   if s:settings.dynamic_folds
@@ -381,12 +803,17 @@
   endif
 endif
 
+" insert script tag; javascript is always needed for the line number
+" normalization for URL hashes
+call extend(s:lines, [
+      \ "",
+      \ "<script type='text/javascript'>",
+      \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+
 " insert javascript to toggle folds open and closed
 if s:settings.dynamic_folds
   call extend(s:lines, [
 	\ "",
-	\ "<script type='text/javascript'>",
-	\ s:settings.use_xhtml ? '//<![CDATA[' : "<!--",
 	\ "function toggleFold(objID)",
 	\ "{",
 	\ "  var fold;",
@@ -399,22 +826,159 @@
 	\ "  {",
 	\ "    fold.className = 'closed-fold';",
 	\ "  }",
+	\ "}"
+	\ ])
+endif
+
+if s:settings.line_ids
+  " insert javascript to get IDs from line numbers, and to open a fold before
+  " jumping to any lines contained therein
+  call extend(s:lines, [
+	\ "",
+	\ "/* function to open any folds containing a jumped-to line before jumping to it */",
+	\ "function JumpToLine()",
+	\ "{",
+	\ "  var lineNum;",
+	\ "  lineNum = window.location.hash;",
+	\ "  lineNum = lineNum.substr(1); /* strip off '#' */",
+	\ "",
+	\ "  if (lineNum.indexOf('L') == -1) {",
+	\ "    lineNum = 'L'+lineNum;",
+	\ "  }",
+	\ "  lineElem = document.getElementById(lineNum);"
+	\ ])
+  if s:settings.dynamic_folds
+    call extend(s:lines, [
+	  \ "",
+	  \ "  /* navigate upwards in the DOM tree to open all folds containing the line */",
+	  \ "  var node = lineElem;",
+	  \ "  while (node && node.id != 'vimCodeElement".s:settings.id_suffix."')",
+	  \ "  {",
+	  \ "    if (node.className == 'closed-fold')",
+	  \ "    {",
+	  \ "      node.className = 'open-fold';",
+	  \ "    }",
+	  \ "    node = node.parentNode;",
+	  \ "  }",
+	  \ ])
+  endif
+  call extend(s:lines, [
+	\ "  /* Always jump to new location even if the line was hidden inside a fold, or",
+	\ "   * we corrected the raw number to a line ID.",
+	\ "   */",
+	\ "  if (lineElem) {",
+	\ "    lineElem.scrollIntoView(true);",
+	\ "  }",
+	\ "  return true;",
 	\ "}",
-	\ s:settings.use_xhtml ? '//]]>' : '-->',
-	\ "</script>"
-	\])
+	\ "if ('onhashchange' in window) {",
+	\ "  window.onhashchange = JumpToLine;",
+	\ "}"
+	\ ])
+endif
+
+" Small text columns like the foldcolumn and line number column need a weird
+" hack to work around Webkit's and (in versions prior to 9) IE's lack of support
+" for the 'ch' unit without messing up Opera, which also doesn't support it but
+" works anyway.
+"
+" The problem is that without the 'ch' unit, it is not possible to specify a
+" size of an <input> in terms of character widths. Only Opera seems to do the
+" "sensible" thing and make the <input> sized to fit exactly as many characters
+" as specified by its "size" attribute, but the spec actually says "at least
+" wide enough to fit 'size' characters", so the other browsers are technically
+" correct as well.
+"
+" Anyway, this leads to two diffculties:
+"   1. The foldcolumn is made up of multiple elements side-by-side with
+"      different sizes, each of which has their own extra padding added. Thus, a
+"      column made up of one item of size 1 and another of size 2 would not
+"      necessarily be equal in size to another line's foldcolumn with a single
+"      item of size 3.
+"   2. The extra padding added to the <input> elements adds up to make the
+"      foldcolumn and line number column too wide, especially in Webkit
+"      browsers.
+"
+" So, the full workaround is:
+"   1. Define a default size in em, equal to the number of characters in the
+"      input element, in case javascript is disabled and the browser does not
+"      support the 'ch' unit. Unfortunately this makes Opera no longer work
+"      properly without javascript. 1em per character is much too wide but it
+"      looks better in webkit browsers than unaligned columns.
+"   2. Insert the following javascript to run at page load, which checks for the
+"      width of a single character (in an extraneous page element inserted
+"      before the page title, and set to hidden) and compares it to the width of
+"      another extra <input> element with only one character. If the width
+"      matches, the script does nothing more, but if not, it will figure out the
+"      fraction of an em unit which would correspond with a ch unit if there
+"      were one, and set the containing element (<pre> or <div>) to a class with
+"      pre-defined rules which is closest to that fraction of an em. Rules are
+"      defined from 0.05 em to 1em per ch.
+if !empty(s:settings.prevent_copy)
+  call extend(s:lines, [
+	\ '',
+	\ '/* simulate a "ch" unit by asking the browser how big a zero character is */',
+	\ 'function FixCharWidth() {',
+	\ '  /* get the hidden element which gives the width of a single character */',
+	\ '  var goodWidth = document.getElementById("oneCharWidth").clientWidth;',
+	\ '  /* get all input elements, we''ll filter on class later */',
+	\ '  var inputTags = document.getElementsByTagName("input");',
+	\ '  var ratio = 5;',
+	\ '  var inputWidth = document.getElementById("oneInputWidth").clientWidth;',
+	\ '  var emWidth = document.getElementById("oneEmWidth").clientWidth;',
+	\ '  if (inputWidth > goodWidth) {',
+	\ '    while (ratio < 100*goodWidth/emWidth && ratio < 100) {',
+	\ '      ratio += 5;',
+	\ '    }',
+	\ '    document.getElementById("vimCodeElement'.s:settings.id_suffix.'").className = "em"+ratio;',
+	\ '  }',
+	\ '}'
+	\ ])
 endif
 
+" insert script closing tag
+call extend(s:lines, [
+      \ '',
+      \ s:settings.use_xhtml ? '//]]>' : '-->',
+      \ "</script>"
+      \ ])
+
+call extend(s:lines, ["</head>"])
+if !empty(s:settings.prevent_copy)
+  call extend(s:lines,
+	\ ["<body onload='FixCharWidth();".(s:settings.line_ids ? " JumpToLine();" : "")."'>",
+	\ "<!-- hidden divs used by javascript to get the width of a char -->",
+	\ "<div id='oneCharWidth'>0</div>",
+	\ "<div id='oneInputWidth'><input size='1' value='0'".s:tag_close."</div>",
+	\ "<div id='oneEmWidth' style='width: 1em;'></div>"
+	\ ])
+else
+  call extend(s:lines, ["<body".(s:settings.line_ids ? " onload='JumpToLine();'" : "").">"])
+endif
 if s:settings.no_pre
-  call extend(s:lines, ["</head>", "<body>"])
+  " if we're not using CSS we use a font tag which can't have a div inside
+  if s:settings.use_css
+    call extend(s:lines, ["<div id='vimCodeElement".s:settings.id_suffix."'>"])
+  endif
 else
-  call extend(s:lines, ["</head>", "<body>", "<pre>"])
+  call extend(s:lines, ["<pre id='vimCodeElement".s:settings.id_suffix."'>"])
 endif
 
 exe s:orgwin . "wincmd w"
 
-" List of all id's
-let s:idlist = []
+" caches of style data
+" initialize to include line numbers if using them
+if s:settings.number_lines
+  let s:stylelist = { s:LINENR_ID : ".LineNr { " . s:CSS1( s:LINENR_ID ) . "}" }
+else
+  let s:stylelist = {}
+endif
+let s:diffstylelist = {
+      \   s:DIFF_A_ID : ".DiffAdd { " . s:CSS1( s:DIFF_A_ID ) . "}",
+      \   s:DIFF_C_ID : ".DiffChange { " . s:CSS1( s:DIFF_C_ID ) . "}",
+      \   s:DIFF_D_ID : ".DiffDelete { " . s:CSS1( s:DIFF_D_ID ) . "}",
+      \   s:DIFF_T_ID : ".DiffText { " . s:CSS1( s:DIFF_T_ID ) . "}"
+      \ }
 
 " set up progress bar in the status line
 if !s:settings.no_progress
@@ -545,9 +1109,6 @@
       " level, so subtract 2 from index of first non-dash after the dashes
       " in order to get the fold level of the current fold
       let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
-      if s:level+1 > s:foldcolumn
-	let s:foldcolumn = s:level+1
-      endif
       " store fold info for later use
       let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
       call add(s:allfolds, s:newfold)
@@ -577,9 +1138,6 @@
       " level, so subtract 2 from index of first non-dash after the dashes
       " in order to get the fold level of the current fold
       let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
-      if s:level+1 > s:foldcolumn
-	let s:foldcolumn = s:level+1
-      endif
       let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
       " only add the fold if we don't already have it
       if empty(s:allfolds) || index(s:allfolds, s:newfold) == -1
@@ -609,6 +1167,74 @@
 
   " close all folds again so we can get the fold text as we go
   silent! %foldclose!
+
+  " Go through and remove folds we don't need to (or cannot) process in the
+  " current conversion range
+  "
+  " If a fold is removed which contains other folds, which are included, we need
+  " to adjust the level of the included folds as used by the conversion logic
+  " (avoiding special cases is good)
+  "
+  " Note any time we remove a fold, either all of the included folds are in it,
+  " or none of them, because we only remove a fold if neither its start nor its
+  " end are within the conversion range.
+  let leveladjust = 0
+  for afold in s:allfolds
+    let removed = 0
+    if exists("g:html_start_line") && exists("g:html_end_line")
+      if afold.firstline < g:html_start_line
+	if afold.lastline <= g:html_end_line && afold.lastline >= g:html_start_line
+	  " if a fold starts before the range to convert but stops within the
+	  " range, we need to include it. Make it start on the first converted
+	  " line.
+	  let afold.firstline = g:html_start_line
+	else
+	  " if the fold lies outside the range or the start and stop enclose
+	  " the entire range, don't bother parsing it
+	  call remove(s:allfolds, index(s:allfolds, afold))
+	  let removed = 1
+	  if afold.lastline > g:html_end_line
+	    let leveladjust += 1
+	  endif
+	endif
+      elseif afold.firstline > g:html_end_line
+	" If the entire fold lies outside the range we need to remove it.
+	call remove(s:allfolds, index(s:allfolds, afold))
+	let removed = 1
+      endif
+    elseif exists("g:html_start_line")
+      if afold.firstline < g:html_start_line
+	" if there is no last line, but there is a first line, the end of the
+	" fold will always lie within the region of interest, so keep it
+	let afold.firstline = g:html_start_line
+      endif
+    elseif exists("g:html_end_line")
+      " if there is no first line we default to the first line in the buffer so
+      " the fold start will always be included if the fold itself is included.
+      " If however the entire fold lies outside the range we need to remove it.
+      if afold.firstline > g:html_end_line
+	call remove(s:allfolds, index(s:allfolds, afold))
+	let removed = 1
+      endif
+    endif
+    if !removed
+      let afold.level -= leveladjust
+      if afold.level+1 > s:foldcolumn
+	let s:foldcolumn = afold.level+1
+      endif
+    endif
+  endfor
+
+  " if we've removed folds containing the conversion range from processing,
+  " getting foldtext as we go won't know to open the removed folds, so the
+  " foldtext would be wrong; open them now.
+  "
+  " Note that only when a start and an end line is specified will a fold
+  " containing the current range ever be removed.
+  while leveladjust > 0
+    exe g:html_start_line."foldopen"
+    let leveladjust -= 1
+  endwhile
 endif
 
 " Now loop over all lines in the original text to convert to html.
@@ -656,6 +1282,13 @@
 
 let s:foldId = 0
 
+if !s:settings.expand_tabs
+  " If keeping tabs, add them to printable characters so we keep them when
+  " formatting text (strtrans() doesn't replace printable chars)
+  let s:old_isprint = &isprint
+  setlocal isprint+=9
+endif
+
 while s:lnum <= s:end
 
   " If there are filler lines for diff mode, show these above the line.
@@ -672,15 +1305,22 @@
 
       if !s:settings.no_pre
 	" HTML line wrapping is off--go ahead and fill to the margin
+	" TODO: what about when CSS wrapping is turned on?
 	let s:new = s:new . repeat(s:difffillchar, &columns - strlen(s:new) - s:margin)
       else
 	let s:new = s:new . repeat(s:difffillchar, 3)
       endif
 
-      let s:new = s:HtmlFormat(s:new, "DiffDelete", "")
+      let s:new = s:HtmlFormat_d(s:new, s:DIFF_D_ID, 0)
       if s:settings.number_lines
-	" Indent if line numbering is on; must be after escaping.
-	let s:new = repeat(s:LeadingSpace, s:margin) . s:new
+	" Indent if line numbering is on. Indent gets style of line number
+	" column.
+	let s:new = s:HtmlFormat_n(repeat(' ', s:margin), s:LINENR_ID, 0, 0) . s:new
+      endif
+      if s:settings.dynamic_folds && !s:settings.no_foldcolumn && s:foldcolumn > 0
+	" Indent for foldcolumn if there is one. Assume it's empty, there should
+	" not be a fold for deleted lines in diff mode.
+	let s:new = s:FoldColumn_fill() . s:new
       endif
       call add(s:lines, s:new.s:HtmlEndline)
 
@@ -693,8 +1333,6 @@
   " Start the line with the line number.
   if s:settings.number_lines
     let s:numcol = repeat(' ', s:margin - 1 - strlen(s:lnum)) . s:lnum . ' '
-  else
-    let s:numcol = ""
   endif
 
   let s:new = ""
@@ -702,14 +1340,14 @@
   if has('folding') && !s:settings.ignore_folding && foldclosed(s:lnum) > -1 && !s:settings.dynamic_folds
     "
     " This is the beginning of a folded block (with no dynamic folding)
-    "
-    let s:new = s:numcol . foldtextresult(s:lnum)
+    let s:new = foldtextresult(s:lnum)
     if !s:settings.no_pre
       " HTML line wrapping is off--go ahead and fill to the margin
       let s:new = s:new . repeat(s:foldfillchar, &columns - strlen(s:new))
     endif
 
-    let s:new = s:HtmlFormat(s:new, "Folded", "")
+    " put numcol in a separate group for sake of unselectable text
+    let s:new = (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, s:lnum): "") . s:HtmlFormat_t(s:new, s:FOLDED_ID, 0)
 
     " Skip to the end of the fold
     let s:new_lnum = foldclosedend(s:lnum)
@@ -734,13 +1372,13 @@
 	call remove(s:foldstack, 0)
       endwhile
 
-      " Now insert an opening any new folds that start on this line
+      " Now insert an opening for any new folds that start on this line
       let s:firstfold = 1
       while !empty(s:allfolds) && get(s:allfolds,0).firstline == s:lnum
 	let s:foldId = s:foldId + 1
 	let s:new .= "<span id='"
 	let s:new .= (exists('g:html_diff_win_num') ? "win".g:html_diff_win_num : "")
-	let s:new .= "fold".s:foldId."' class='".s:allfolds[0].type."'>"
+	let s:new .= "fold".s:foldId.s:settings.id_suffix."' class='".s:allfolds[0].type."'>"
 
 
 	" Unless disabled, add a fold column for the opening line of a fold.
@@ -751,38 +1389,46 @@
 	if !s:settings.no_foldcolumn
 	  " add fold column that can open the new fold
 	  if s:allfolds[0].level > 1 && s:firstfold
-	    let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
-	    let s:new = s:new . repeat('|', s:allfolds[0].level - 1) . "</a>"
+	    let s:new = s:new . s:FoldColumn_build('|', s:allfolds[0].level - 1, 0, "",
+		  \ 'toggle-open FoldColumn','javascript:toggleFold("fold'.s:foldstack[0].id.s:settings.id_suffix.'");')
 	  endif
-	  let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>+</a>"
-	  let s:new = s:new . "<a class='toggle-open "
+	  " add the filler spaces separately from the '+' char so that it can be
+	  " shown/hidden separately during a hover unfold
+	  let s:new = s:new . s:FoldColumn_build("+", 1, 0, "",
+		\ 'toggle-open FoldColumn', 'javascript:toggleFold("fold'.s:foldId.s:settings.id_suffix.'");')
 	  " If this is not the last fold we're opening on this line, we need
 	  " to keep the filler spaces hidden if the fold is opened by mouse
 	  " hover. If it is the last fold to open in the line, we shouldn't hide
 	  " them, so don't apply the toggle-filler class.
-	  if get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum
-	    let s:new = s:new . "toggle-filler "
-	  endif
-	  let s:new = s:new . "FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
-	  let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level) . "</a>"
+	  let s:new = s:new . s:FoldColumn_build(" ", 1, s:foldcolumn - s:allfolds[0].level - 1, "",
+		\ 'toggle-open FoldColumn'. (get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum ?" toggle-filler" :""),
+		\ 'javascript:toggleFold("fold'.s:foldId.s:settings.id_suffix.'");')
 
 	  " add fold column that can close the new fold
-	  let s:new = s:new . "<a class='toggle-closed FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
-	  if s:firstfold
-	    let s:new = s:new . repeat('|', s:allfolds[0].level - 1)
-	  endif
-	  let s:new = s:new . "-"
-	  " only add spaces if we aren't opening another fold on the same line
+	  " only add extra blank space if we aren't opening another fold on the
+	  " same line
 	  if get(s:allfolds, 1, {'firstline': 0}).firstline != s:lnum
-	    let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level)
+	    let s:extra_space = s:foldcolumn - s:allfolds[0].level
+	  else
+	    let s:extra_space = 0
+	  endif
+	  if s:firstfold
+	    " the first fold in a line has '|' characters from folds opened in
+	    " previous lines, before the '-' for this fold
+	    let s:new .= s:FoldColumn_build('|', s:allfolds[0].level - 1, s:extra_space, '-',
+		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'.s:foldId.s:settings.id_suffix.'");')
+	  else
+	    " any subsequent folds in the line only add a single '-'
+	    let s:new = s:new . s:FoldColumn_build("-", 1, s:extra_space, "",
+		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'.s:foldId.s:settings.id_suffix.'");')
 	  endif
-	  let s:new = s:new . "</a>"
 	  let s:firstfold = 0
 	endif
 
-	" add fold text, moving the span ending to the next line so collapsing
-	" of folds works correctly
-	let s:new = s:new . substitute(s:HtmlFormat(s:numcol . foldtextresult(s:lnum), "Folded", ""), '</span>', s:HtmlEndline.'\n\0', '')
+	" Add fold text, moving the span ending to the next line so collapsing
+	" of folds works correctly.
+	" Put numcol in a separate group for sake of unselectable text.
+	let s:new = s:new . (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, 0) : "") . substitute(s:HtmlFormat_t(foldtextresult(s:lnum), s:FOLDED_ID, 0), '</span>', s:HtmlEndline.'\n\0', '')
 	let s:new = s:new . "<span class='fulltext'>"
 
 	" open the fold now that we have the fold text to allow retrieval of
@@ -802,14 +1448,13 @@
 	  " add the empty foldcolumn for unfolded lines if there is a fold
 	  " column at all
 	  if s:foldcolumn > 0
-	    let s:new = s:new . s:HtmlFormat(repeat(' ', s:foldcolumn), "FoldColumn", "")
+	    let s:new = s:new . s:FoldColumn_fill()
 	  endif
 	else
 	  " add the fold column for folds not on the opening line
 	  if get(s:foldstack, 0).firstline < s:lnum
-	    let s:new = s:new . "<a class='FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
-	    let s:new = s:new . repeat('|', s:foldstack[0].level)
-	    let s:new = s:new . repeat(' ', s:foldcolumn - s:foldstack[0].level) . "</a>"
+	    let s:new = s:new . s:FoldColumn_build('|', s:foldstack[0].level, s:foldcolumn - s:foldstack[0].level, "",
+		  \ 'FoldColumn', 'javascript:toggleFold("fold'.s:foldstack[0].id.s:settings.id_suffix.'");')
 	  endif
 	endif
       endif
@@ -817,8 +1462,9 @@
 
     " Now continue with the unfolded line text
     if s:settings.number_lines
-      " TODO: why not use the real highlight name here?
-      let s:new = s:new . s:HtmlFormat(s:numcol, "lnr", "")
+      let s:new = s:new . s:HtmlFormat_n(s:numcol, s:LINENR_ID, 0, s:lnum)
+    elseif s:settings.line_ids
+      let s:new = s:new . s:HtmlFormat_n("", s:LINENR_ID, 0, s:lnum)
     endif
 
     " Get the diff attribute, if any.
@@ -832,7 +1478,6 @@
 
     " most of the time we won't use the diff_id, initialize to zero
     let s:diff_id = 0
-    let s:diff_id_name = ""
 
     while s:col <= s:len || (s:col == 1 && s:diffattr)
       let s:startcol = s:col " The start column for processing text
@@ -871,47 +1516,45 @@
       endif
 
       if s:settings.ignore_conceal || !s:concealinfo[0]
-	" Expand tabs
+	" Expand tabs if needed
 	let s:expandedtab = strpart(s:line, s:startcol - 1, s:col - s:startcol)
-	let s:offset = 0
-	let s:idx = stridx(s:expandedtab, "\t")
-	while s:idx >= 0
-	  if has("multi_byte_encoding")
-	    if s:startcol + s:idx == 1
-	      let s:i = &ts
-	    else
-	      if s:idx == 0
-		let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:idx + s:offset) . 'c')
+	if s:settings.expand_tabs
+	  let s:offset = 0
+	  let s:idx = stridx(s:expandedtab, "\t")
+	  while s:idx >= 0
+	    if has("multi_byte_encoding")
+	      if s:startcol + s:idx == 1
+		let s:i = &ts
 	      else
-		let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c')
+		if s:idx == 0
+		  let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:idx + s:offset) . 'c')
+		else
+		  let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c')
+		endif
+		let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
+		let s:i = &ts - (s:vcol % &ts)
 	      endif
-	      let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
-	      let s:i = &ts - (s:vcol % &ts)
+	      let s:offset -= s:i - 1
+	    else
+	      let s:i = &ts - ((s:idx + s:startcol - 1) % &ts)
 	    endif
-	    let s:offset -= s:i - 1
-	  else
-	    let s:i = &ts - ((s:idx + s:startcol - 1) % &ts)
-	  endif
-	  let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
-	  let s:idx = stridx(s:expandedtab, "\t")
-	endwhile
+	    let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
+	    let s:idx = stridx(s:expandedtab, "\t")
+	  endwhile
+	end
 
 	" get the highlight group name to use
 	let s:id = synIDtrans(s:id)
-	let s:id_name = synIDattr(s:id, "name", s:whatterm)
-	if s:diff_id
-	  let s:diff_id_name = synIDattr(s:diff_id, "name", s:whatterm)
-	endif
       else
 	" use Conceal highlighting for concealed text
-	let s:id_name = 'Conceal'
+	let s:id = s:CONCEAL_ID
 	let s:expandedtab = s:concealinfo[1]
       endif
 
-      " Output the text with the same synID, with class set to {s:id_name},
-      " unless it has been concealed completely.
+      " Output the text with the same synID, with class set to the highlight ID
+      " name, unless it has been concealed completely.
       if strlen(s:expandedtab) > 0
-	let s:new = s:new . s:HtmlFormat(s:expandedtab,  s:id_name, s:diff_id_name)
+	let s:new = s:new . s:HtmlFormat(s:expandedtab,  s:id, s:diff_id, "", 0)
       endif
     endwhile
   endif
@@ -936,9 +1579,9 @@
   endwhile
 
   " add fold column to the style list if not already there
-  let s:id = hlID('FoldColumn')
-  if index(s:idlist, s:id) == -1
-    call insert(s:idlist, s:id)
+  let s:id = s:FOLD_C_ID
+  if !has_key(s:stylelist, s:id)
+    let s:stylelist[s:id] = '.FoldColumn { ' . s:CSS1(s:id) . '}'
   endif
 endif
 
@@ -947,7 +1590,7 @@
     " Close off the font tag that encapsulates the whole <body>
     call extend(s:lines, ["</font>", "</body>", "</html>"])
   else
-    call extend(s:lines, ["</body>", "</html>"])
+    call extend(s:lines, ["</div>", "</body>", "</html>"])
   endif
 else
   call extend(s:lines, ["</pre>", "</body>", "</html>"])
@@ -957,91 +1600,119 @@
 call setline(1, s:lines)
 unlet s:lines
 
+" Mangle modelines so Vim doesn't try to use HTML text as a modeline if editing
+" this file in the future; need to do this after generating all the text in case
+" the modeline text has different highlight groups which all turn out to be
+" stripped from the final output.
+%s!\v(%(^|\s+)%(vim?|ex)):!\1\&#0058;!ge
+
+" The generated HTML is admittedly ugly and takes a LONG time to fold.
+" Make sure the user doesn't do syntax folding when loading a generated file,
+" using a modeline.
+call append(line('$'), "<!-- vim: set foldmethod=manual : -->")
+
 " Now, when we finally know which, we define the colors and styles
 if s:settings.use_css
   1;/<style type="text/+1
 endif
 
-" Find out the background and foreground color.
-let s:fgc = s:HtmlColor(synIDattr(hlID("Normal"), "fg#", s:whatterm))
-let s:bgc = s:HtmlColor(synIDattr(hlID("Normal"), "bg#", s:whatterm))
-if s:fgc == ""
-  let s:fgc = ( &background == "dark" ? "#ffffff" : "#000000" )
-endif
-if s:bgc == ""
-  let s:bgc = ( &background == "dark" ? "#000000" : "#ffffff" )
-endif
-
 " Normal/global attributes
 " For Netscape 4, set <body> attributes too, though, strictly speaking, it's
 " incorrect.
 if s:settings.use_css
   if s:settings.no_pre
-    execute "normal! A\nbody { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }\e"
+    call append('.', "body { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }")
+    +
   else
-    execute "normal! A\npre { font-family: ". s:htmlfont ."; color: " . s:fgc . "; background-color: " . s:bgc . "; }\e"
+    call append('.', "pre { " . s:whitespace . "font-family: ". s:htmlfont ."; color: " . s:fgc . "; background-color: " . s:bgc . "; }")
+    +
     yank
     put
     execute "normal! ^cwbody\e"
+    " body should not have the wrap formatting, only the pre section
+    if s:whitespace != ''
+      exec 's#'.s:whitespace
+    endif
   endif
-else
-  execute '%s:<body>:<body bgcolor="' . s:bgc . '" text="' . s:fgc . '">\r<font face="'. s:htmlfont .'">'
-endif
-
-" Line numbering attributes
-if s:settings.number_lines
-  if s:settings.use_css
-    execute "normal! A\n.lnr { " . s:CSS1(hlID("LineNr")) . "}\e"
-  else
-    execute '%s+^<span class="lnr">\([^<]*\)</span>+' . s:HtmlOpening(hlID("LineNr")) . '\1' . s:HtmlClosing(hlID("LineNr")) . '+g'
-  endif
-endif
-
-" Gather attributes for all other classes
-if !s:settings.no_progress && !empty(s:idlist)
-  let s:pgb = s:ProgressBar("Processing classes:", len(s:idlist),s:newwin)
-endif
-while !empty(s:idlist)
-  let s:attr = ""
-  let s:id = remove(s:idlist, 0)
-  let s:attr = s:CSS1(s:id)
-  let s:id_name = synIDattr(s:id, "name", s:whatterm)
-
-  " If the class has some attributes, export the style, otherwise DELETE all
-  " its occurences to make the HTML shorter
-  if s:attr != ""
-    if s:settings.use_css
-      execute "normal! A\n." . s:id_name . " { " . s:attr . "}"
-    else
-      " replace spans of just this class name with non-CSS style markup
-      execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '\1' . s:HtmlClosing(s:id) . '+ge'
-      " Replace spans of this class name AND a diff class with non-CSS style
-      " markup surrounding a span of just the diff class. The diff class will
-      " be handled later because we know that information is at the end.
-      execute '%s+<span class="' . s:id_name . ' \(Diff\%(Add\|Change\|Delete\|Text\)\)">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '<span class="\1">\2</span>' . s:HtmlClosing(s:id) . '+ge'
+  " fix browser inconsistencies (sometimes within the same browser) of different
+  " default font size for different elements
+  call append('.', '* { font-size: 1em; }')
+  +
+  " if we use any input elements for unselectable content, make sure they look
+  " like normal text
+  if !empty(s:settings.prevent_copy)
+    call append('.', 'input { border: none; margin: 0; padding: 0; font-family: '.s:htmlfont.'; }')
+    +
+    " ch units for browsers which support them, em units for a somewhat
+    " reasonable fallback. Also make sure the special elements for size
+    " calculations aren't seen.
+    call append('.', [
+	  \ "input[size='1'] { width: 1em; width: 1ch; }",
+	  \ "input[size='2'] { width: 2em; width: 2ch; }",
+	  \ "input[size='3'] { width: 3em; width: 3ch; }",
+	  \ "input[size='4'] { width: 4em; width: 4ch; }",
+	  \ "input[size='5'] { width: 5em; width: 5ch; }",
+	  \ "input[size='6'] { width: 6em; width: 6ch; }",
+	  \ "input[size='7'] { width: 7em; width: 7ch; }",
+	  \ "input[size='8'] { width: 8em; width: 8ch; }",
+	  \ "input[size='9'] { width: 9em; width: 9ch; }",
+	  \ "input[size='10'] { width: 10em; width: 10ch; }",
+	  \ "input[size='11'] { width: 11em; width: 11ch; }",
+	  \ "input[size='12'] { width: 12em; width: 12ch; }",
+	  \ "input[size='13'] { width: 13em; width: 13ch; }",
+	  \ "input[size='14'] { width: 14em; width: 14ch; }",
+	  \ "input[size='15'] { width: 15em; width: 15ch; }",
+	  \ "input[size='16'] { width: 16em; width: 16ch; }",
+	  \ "input[size='17'] { width: 17em; width: 17ch; }",
+	  \ "input[size='18'] { width: 18em; width: 18ch; }",
+	  \ "input[size='19'] { width: 19em; width: 19ch; }",
+	  \ "input[size='20'] { width: 20em; width: 20ch; }",
+	  \ "#oneCharWidth, #oneEmWidth, #oneInputWidth { padding: 0; margin: 0; position: absolute; left: -999999px; visibility: hidden; }"
+	  \ ])
+    +21
+    for w in range(5, 100, 5)
+      let base = 0.01 * w
+      call append('.', join(map(range(1,20), "'.em'.w.' input[size='''.v:val.'''] { width: '.string(v:val*base).'em; }'")))
+      +
+    endfor
+    if s:settings.prevent_copy =~# 'f'
+    " Make the cursor show active fold columns as active areas, and empty fold
+    " columns as not interactive.
+      call append('.', ['input.FoldColumn { cursor: pointer; }',
+	    \ 'input.FoldColumn[value=""] { cursor: default; }'
+	    \ ])
+      +2
     endif
-  else
-    execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+\1+ge'
-    execute '%s+<span class="' . s:id_name . ' \(Diff\%(Add\|Change\|Delete\|Text\)\)">\([^<]*\)</span>+<span class="\1">\2</span>+ge'
-    if s:settings.use_css
-      1;/<\/style>/-2
+    " make line number column show as non-interactive if not selectable
+    if s:settings.prevent_copy =~# 'n'
+      call append('.', 'input.LineNr { cursor: default; }')
+      +
+    endif
+    " make fold text and line number column within fold text show as
+    " non-interactive if not selectable
+    if (s:settings.prevent_copy =~# 'n' || s:settings.prevent_copy =~# 't') && !s:settings.ignore_folding
+      call append('.', 'input.Folded { cursor: default; }')
+      +
     endif
   endif
+else
+  execute '%s:<body\([^>]*\):<body bgcolor="' . s:bgc . '" text="' . s:fgc . '"\1>\r<font face="'. s:htmlfont .'"'
+endif
 
-  if !s:settings.no_progress
-    call s:pgb.incr()
-    if s:pgb.needs_redraw
-      redrawstatus
-      let s:pgb.needs_redraw = 0
-      " TODO: sleep here to show the progress bar, but only if total time spent
-      " so far on this step is < 1 second? Too slow for batch runs like the test
-      " suite to sleep all the time. Maybe there's no good reason to sleep at
-      " all.
-    endif
+" Gather attributes for all other classes. Do diff first so that normal
+" highlight groups are inserted before it.
+if s:settings.use_css
+  if s:diff_mode
+    call append('.', filter(map(keys(s:diffstylelist), "s:diffstylelist[v:val]"), 'v:val != ""'))
   endif
-endwhile
+  if !empty(s:stylelist)
+    call append('.', filter(map(keys(s:stylelist), "s:stylelist[v:val]"), 'v:val != ""'))
+  endif
+endif
 
 " Add hyperlinks
+" TODO: add option to not do this? Maybe just make the color the same as the
+" text highlight group normally is?
 %s+\(https\=://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|&gt;\|&lt;\|&quot;\)+<a href="\1">\1</a>\2+ge
 
 " The DTD
@@ -1060,9 +1731,11 @@
 " Cleanup
 %s:\s\+$::e
 
-" Restore old settings
+" Restore old settings (new window first)
+"
+" Don't bother restoring foldmethod in case it was syntax because the markup is
+" so weirdly formatted it can take a LONG time.
 let &l:foldenable = s:old_fen
-let &l:foldmethod = s:old_fdm
 let &report = s:old_report
 let &title = s:old_title
 let &icon = s:old_icon
@@ -1070,29 +1743,40 @@
 let &magic = s:old_magic
 let @/ = s:old_search
 let &more = s:old_more
+
+" switch to original window to restore those settings
 exe s:orgwin . "wincmd w"
+
+if !s:settings.expand_tabs
+  let &l:isprint = s:old_isprint
+endif
+let &l:stl = s:origwin_stl
 let &l:et = s:old_et
 let &l:scrollbind = s:old_bind
+
+" and back to the new window again to end there
 exe s:newwin . "wincmd w"
+
+let &l:stl = s:newwin_stl
 exec 'resize' s:old_winheight
 let &l:winfixheight = s:old_winfixheight
 
-call setwinvar(s:orgwin,'&stl', s:origwin_stl)
-call setwinvar(s:newwin,'&stl', s:newwin_stl)
 let &ls=s:ls
 
 " Save a little bit of memory (worth doing?)
-unlet s:htmlfont
+unlet s:htmlfont s:whitespace
 unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
-unlet s:old_magic s:old_more s:old_fdm s:old_fen s:old_winheight
-unlet s:whatterm s:idlist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
-unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo
+unlet s:old_magic s:old_more s:old_fen s:old_winheight
+unlet! s:old_isprint
+unlet s:whatterm s:stylelist s:diffstylelist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
+unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo s:diff_mode
 unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset s:ls s:origwin_stl
 unlet! s:newwin_stl s:current_syntax
 if !v:profiling
   delfunc s:HtmlColor
   delfunc s:HtmlFormat
   delfunc s:CSS1
+  delfunc s:BuildStyleWrapper
   if !s:settings.use_css
     delfunc s:HtmlOpening
     delfunc s:HtmlClosing
@@ -1110,8 +1794,8 @@
 endif
 
 unlet! s:new_lnum s:diffattr s:difffillchar s:foldfillchar s:HtmlSpace
-unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:foldcolumn
-unlet s:foldstack s:allfolds s:foldId s:numcol s:settings
+unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:numcol s:foldcolumn
+unlet s:foldstack s:allfolds s:foldId s:settings
 
 let &cpo = s:cpo_sav
 unlet! s:cpo_sav
diff -Naur vim73.orig/runtime/syntax/abap.vim vim73/runtime/syntax/abap.vim
--- vim73.orig/runtime/syntax/abap.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/abap.vim	2013-08-04 19:09:09.170614856 +0000
@@ -1,8 +1,9 @@
 " Vim ABAP syntax file
 "    Language: SAP - ABAP/R4
-"    Revision: 1.0
-"  Maintainer: Marius Piedallu van Wyk <marius@e.co.za>
-" Last Change: 2006 Apr 13
+"    Revision: 2.1
+"  Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>
+" Last Change: 2013 Jun 13
+"     Comment: Thanks to EPI-USE Labs for all your assistance. :)
 
 " For version  < 6.0: Clear all syntax items
 " For version >= 6.0: Quit when a syntax file was already loaded
@@ -15,101 +16,153 @@
 " Always ignore case
 syn case ignore
 
-" Symbol Operators
-syn match   abapSymbolOperator  "[+\-/=<>$]"
-syn match   abapSymbolOperator  "\*"
-syn match   abapSymbolOperator  "[<>]="
-syn match   abapSymbolOperator  "<>"
-syn match   abapSymbolOperator  "\*\*"
-syn match   abapSymbolOperator  "[()]"
-syn match   abapSymbolOperator  "[:,\.]"
+" Symbol Operators (space delimited)
+syn match   abapSymbolOperator  "\W+\W"
+syn match   abapSymbolOperator  "\W-\W"
+syn match   abapSymbolOperator  "\W/\W"
+syn match   abapSymbolOperator  "\W%\W"
+syn match   abapSymbolOperator  "\W=\W"
+syn match   abapSymbolOperator  "\W<\W"
+syn match   abapSymbolOperator  "\W>\W"
+syn match   abapSymbolOperator  "\W\*\W"
+syn match   abapSymbolOperator  "\W[<>]=\W"
+syn match   abapSymbolOperator  "\W<>\W"
+syn match   abapSymbolOperator  "\W\*\*\W"
+syn match   abapSymbolOperator  "\[\]"
+syn match   abapSymbolOperator  "->\*\?"
+syn match   abapSymbolOperator  "=>"
+syn match   abapSymbolOperator  "[()~:,\.&$]"
 
 " Literals
-syn region  abapString matchgroup=abapString start="'" end="'" contains=abapStringEscape
-syn match   abapStringEscape contained "''"
+syn region  abapCharString matchgroup=abapCharString start="'" end="'" contains=abapCharStringEscape
+syn match   abapCharStringEscape contained "''"
 
-syn match   abapNumber  "-\=\<\d\+\>"
+syn region  abapString matchgroup=abapString start="`" end="`" contains=abapStringEscape
+syn match   abapStringEscape contained "``"
+
+syn match   abapNumber  "\-\=\<\d\+\>"
 syn region  abapHex     matchgroup=abapHex start="X'" end="'"
 
 if version >= 600
-  setlocal iskeyword=-,48-57,_,A-Z,a-z
+  setlocal iskeyword=48-57,_,A-Z,a-z,/
 else
-  set iskeyword=-,48-57,_,A-Z,a-z
+  set iskeyword=48-57,_,A-Z,a-z,/
 endif
 
+syn match   abapNamespace        "\</\w\+/"
+
+" multi-word statements
+syn match   abapComplexStatement "\<\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)\>"
+syn match   abapComplexStatement "\<NO\W\+STANDARD\W\+PAGE\W\+HEADING\>"
+syn match   abapComplexStatement "\<\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\>"
+syn match   abapComplexStatement "\<\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\>"
+syn match   abapComplexStatement "\<\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\>"
+syn match   abapComplexStatement "\<NO\W\+INTERVALS\>"
+syn match   abapComplexStatement "\<RESPECTING\W\+BLANKS\>"
+syn match   abapComplexStatement "\<SEPARATED\W\+BY\>"
+syn match   abapComplexStatement "\<USING\(\W\+EDIT\W\+MASK\)\?\>"
+syn match   abapComplexStatement "\<WHERE\(\W\+LINE\)\?\>"
+syn match   abapComplexStatement "\<RADIOBUTTON\W\+GROUP\>"
+syn match   abapComplexStatement "\<REF\W\+TO\>"
+syn match   abapComplexStatement "\<\(PUBLIC\|PRIVATE\|PROTECTED\)\(\W\+SECTION\)\?\>"
+syn match   abapComplexStatement "\<DELETING\W\+\(TRAILING\|LEADING\)\>"
+syn match   abapComplexStatement "\<\(ALL\W\+OCCURRENCES\)\|\(\(FIRST\|LAST\)\W\+OCCURRENCE\)\>"
+syn match   abapComplexStatement "\<INHERITING\W\+FROM\>"
+syn match   abapComplexStatement "\<\(UP\W\+\)\?TO\>"
+
+" hyphenated-word statements
+syn match   abapComplexStatement "\<LINE-COUNT\>"
+syn match   abapComplexStatement "\<ADD-CORRESPONDING\>"
+syn match   abapComplexStatement "\<AUTHORITY-CHECK\>"
+syn match   abapComplexStatement "\<BREAK-POINT\>"
+syn match   abapComplexStatement "\<CLASS-DATA\>"
+syn match   abapComplexStatement "\<CLASS-METHODS\>"
+syn match   abapComplexStatement "\<CLASS-METHOD\>"
+syn match   abapComplexStatement "\<DIVIDE-CORRESPONDING\>"
+syn match   abapComplexStatement "\<EDITOR-CALL\>"
+syn match   abapComplexStatement "\<END-OF-DEFINITION\>"
+syn match   abapComplexStatement "\<END-OF-PAGE\>"
+syn match   abapComplexStatement "\<END-OF-SELECTION\>"
+syn match   abapComplexStatement "\<FIELD-GROUPS\>"
+syn match   abapComplexStatement "\<FIELD-SYMBOLS\>"
+syn match   abapComplexStatement "\<FUNCTION-POOL\>"
+syn match   abapComplexStatement "\<IS\W\+\(NOT\W\+\)\?\(ASSIGNED\|BOUND\|INITIAL\|SUPPLIED\)\>"
+syn match   abapComplexStatement "\<MOVE-CORRESPONDING\>"
+syn match   abapComplexStatement "\<MULTIPLY-CORRESPONDING\>"
+syn match   abapComplexStatement "\<NEW-LINE\>"
+syn match   abapComplexStatement "\<NEW-PAGE\>"
+syn match   abapComplexStatement "\<NEW-SECTION\>"
+syn match   abapComplexStatement "\<PRINT-CONTROL\>"
+syn match   abapComplexStatement "\<RP-PROVIDE-FROM-LAST\>"
+syn match   abapComplexStatement "\<SELECT-OPTIONS\>"
+syn match   abapComplexStatement "\<SELECTION-SCREEN\>"
+syn match   abapComplexStatement "\<START-OF-SELECTION\>"
+syn match   abapComplexStatement "\<SUBTRACT-CORRESPONDING\>"
+syn match   abapComplexStatement "\<SYNTAX-CHECK\>"
+syn match   abapComplexStatement "\<SYNTAX-TRACE\>"
+syn match   abapComplexStatement "\<TOP-OF-PAGE\>"
+syn match   abapComplexStatement "\<TYPE-POOL\>"
+syn match   abapComplexStatement "\<TYPE-POOLS\>"
+syn match   abapComplexStatement "\<LINE-SIZE\>"
+syn match   abapComplexStatement "\<LINE-COUNT\>"
+syn match   abapComplexStatement "\<MESSAGE-ID\>"
+syn match   abapComplexStatement "\<DISPLAY-MODE\>"
+syn match   abapComplexStatement "\<READ\(-ONLY\)\?\>"
+
 " ABAP statements
-syn keyword abapStatement ADD ADD-CORRESPONDING ASSIGN AT AUTHORITY-CHECK
-syn keyword abapStatement BACK BREAK-POINT
-syn keyword abapStatement CALL CASE CHECK CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
-syn keyword abapStatement DATA DEFINE DELETE DESCRIBE DETAIL DIVIDE DIVIDE-CORRESPONDING DO
-syn keyword abapStatement EDITOR-CALL ELSE ELSEIF END-OF-DEFINITION END-OF-PAGE END-OF-SELECTION ENDAT ENDCASE ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDLOOP ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDWHILE EXEC EXPORT EXPORTING EXTRACT
-syn keyword abapStatement FETCH FIELD-GROUPS FIELD-SYMBOLS FIELDS FORM FORMAT FREE FUNCTION FUNCTION-POOL
+syn keyword abapStatement ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT
+syn keyword abapStatement BACK
+syn keyword abapStatement CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
+syn keyword abapStatement DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO
+syn keyword abapStatement ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT
+syn keyword abapStatement FETCH FIELDS FORM FORMAT FREE FROM FUNCTION
 syn keyword abapStatement GENERATE GET
 syn keyword abapStatement HIDE
-syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INPUT INSERT
-syn keyword abapStatement LEAVE LIKE LOAD LOCAL LOOP
-syn keyword abapStatement MESSAGE MODIFY MODULE MOVE MOVE-CORRESPONDING MULTIPLY MULTIPLY-CORRESPONDING
-syn keyword abapStatement NEW-LINE NEW-PAGE NEW-SECTION
-syn keyword abapStatement ON OVERLAY
-syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PRINT-CONTROL PROGRAM PROVIDE PUT
-syn keyword abapStatement RAISE RANGES READ RECEIVE REFRESH REJECT REPLACE REPORT RESERVE RESTORE ROLLBACK RP-PROVIDE-FROM-LAST
-syn keyword abapStatement SCAN SCROLL SEARCH SELECT SELECT-OPTIONS SELECTION-SCREEN SET SHIFT SKIP SORT SPLIT START-OF-SELECTION STATICS STOP SUBMIT SUBTRACT SUBTRACT-CORRESPONDING SUM SUMMARY SUPPRESS SYNTAX-CHECK SYNTAX-TRACE
-syn keyword abapStatement TABLES TOP-OF-PAGE TRANSFER TRANSLATE TYPE TYPE-POOL TYPE-POOLS TYPES
-syn keyword abapStatement UNPACK UPDATE
+syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION 
+syn keyword abapStatement LEAVE LIKE LINE LOAD LOCAL LOOP
+syn keyword abapStatement MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY
+syn keyword abapStatement ON OVERLAY OPTIONAL OTHERS
+syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT
+syn keyword abapStatement RAISE RANGES RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK
+syn keyword abapStatement SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS
+syn keyword abapStatement TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES
+syn keyword abapStatement UNASSIGN ULINE UNPACK UPDATE
 syn keyword abapStatement WHEN WHILE WINDOW WRITE
 
 " More statemets
+syn keyword abapStatement LINES
+syn keyword abapStatement INTO GROUP BY HAVING ORDER BY SINGLE
+syn keyword abapStatement APPENDING CORRESPONDING FIELDS OF TABLE
+syn keyword abapStatement LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER ROWS CONNECTING
 syn keyword abapStatement OCCURS STRUCTURE OBJECT PROPERTY
 syn keyword abapStatement CASTING APPEND RAISING VALUE COLOR
-syn keyword abapStatement LINE-SIZE LINE-COUNT MESSAGE-ID
-syn keyword abapStatement CHANGING EXCEPTIONS DEFAULT CHECKBOX COMMENT
-syn keyword abapStatement ID NUMBER FOR DISPLAY-MODE TITLE OUTPUT
-
-" More multi-word statements
-syn match   abapStatement "\(\W\|^\)\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)NO\W\+STANDARD\W\+PAGE\W\+HEADING\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)IS\W\+INITIAL\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)NO\W\+INTERVALS\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)SEPARATED\W\+BY\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(USING\W\+\(EDIT\W\+MASK\)\|USING\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)\(WHERE\W\+\(LINE\)\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)RADIOBUTTON\W\+GROUP\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapStatement "\(\W\|^\)REF\W\+TO\(\W\|$\)"ms=s+1,me=e-1
+syn keyword abapStatement CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT
+syn keyword abapStatement ID NUMBER FOR TITLE OUTPUT
 
 " Special ABAP specific tables:
-syn match   abapSpecial       "\(\W\|^\)\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)\(\W\|$\)"ms=s+1,me=e-1
-syn match   abapSpecialTables "\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
-syn match   abapSpecial       "\(\W\|^\)\w\+-\(\w\+-\w\+\|\w\+\)"ms=s+1 contains=abapSpecialTables
+syn match   abapSpecialTables "\<\(sy\|\(hrp\|p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
+syn match   abapStructure     "\<\w\+-[^\>]"me=e-2 contains=abapSpecialTables,abapStatement,abapComplexStatement
+syn match   abapField         "-\w\+"ms=s+1
 
 " Pointer
 syn match   abapSpecial  "<\w\+>"
 
-" Abap constants:
+" Abap common constants:
 syn keyword abapSpecial  TRUE FALSE NULL SPACE
 
 " Includes
 syn region abapInclude   start="include" end="." contains=abapComment
 
 " Types
-syn keyword abapTypes    c n i p f d t x
+syn keyword abapTypes    c n i p f d t x string xstring decfloat16 decfloat34
 
 " Atritmitic operators
 syn keyword abapOperator abs sign ceil floor trunc frac acos asin atan cos sin tan
 syn keyword abapOperator cosh sinh tanh exp log log10 sqrt
 
 " String operators
-syn keyword abapOperator strlen xstrlen charlen numofchar dbmaxlen
+syn keyword abapStatement strlen xstrlen charlen numofchar dbmaxlen
 
-" Table operators
-syn keyword abapOperator lines
-
-" Table operators (SELECT operators)
-syn keyword abapOperator INTO FROM WHERE GROUP BY HAVING ORDER BY SINGLE
-syn keyword abapOperator APPENDING CORRESPONDING FIELDS OF TABLE
-syn keyword abapOperator LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING
 syn keyword abapOperator EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN
 
 " An error? Not strictly... but cannot think of reason this is intended.
@@ -119,6 +172,7 @@
 syn region  abapComment  start="^\*" end="$" contains=abapTodo
 syn match   abapComment  "\".*" contains=abapTodo
 syn keyword abapTodo     contained TODO NOTE
+syn match   abapTodo     "\#EC\W\+\w\+"
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -134,13 +188,20 @@
   HiLink abapError          Error
   HiLink abapComment        Comment
   HiLink abapInclude        Include
+  HiLink abapStatement      Statement
+  HiLink abapComplexStatement      Statement
   HiLink abapSpecial        Special
-  HiLink abapSpecialTables  PreProc
+  HiLink abapNamespace      Special
+  HiLink abapSpecialTables  Special
   HiLink abapSymbolOperator abapOperator
   HiLink abapOperator       Operator
-  HiLink abapStatement      Statement
+  HiLink abapCharString     String
   HiLink abapString         String
   HiLink abapFloat          Float
+  HiLink abapTypes          Type
+  HiLink abapSymbol         Structure
+  HiLink abapStructure      Structure
+  HiLink abapField          Variable
   HiLink abapNumber         Number
   HiLink abapHex            Number
 
diff -Naur vim73.orig/runtime/syntax/abel.vim vim73/runtime/syntax/abel.vim
--- vim73.orig/runtime/syntax/abel.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/abel.vim	2013-08-04 19:09:09.173948179 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	ABEL
-" Maintainer:	John Cook <john.cook@kla-tencor.com>
-" Last Change:	2001 Sep 2
+" Maintainer:	John Cook <johncook3@gmail.com>
+" Last Change:	2011 Dec 27
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " this language is oblivious to case
 syn case ignore
 
@@ -164,4 +167,8 @@
 endif
 
 let b:current_syntax = "abel"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:ts=8
diff -Naur vim73.orig/runtime/syntax/ada.vim vim73/runtime/syntax/ada.vim
--- vim73.orig/runtime/syntax/ada.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/ada.vim	2013-08-04 19:09:09.177281503 +0000
@@ -32,6 +32,8 @@
 if exists("b:current_syntax") || version < 700
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let b:current_syntax = "ada"
 
@@ -352,6 +354,9 @@
 " this speeds things up greatly.
 syntax sync minlines=1 maxlines=1
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff -Naur vim73.orig/runtime/syntax/aptconf.vim vim73/runtime/syntax/aptconf.vim
--- vim73.orig/runtime/syntax/aptconf.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/aptconf.vim	2013-08-04 19:09:09.190614796 +0000
@@ -0,0 +1,512 @@
+" Vim syntax file
+" Language:	APT config file
+" Maintainer:	Yann Amar <quidame@poivron.org>
+" Last Change:	2013 Apr 12
+
+" For version 5.x: Clear all syntax items
+" For version 6.x and 7.x: Quit when a syntax file was already loaded
+if !exists("main_syntax")
+  if version < 600
+    syntax clear
+  elseif exists("b:current_syntax")
+    finish
+  endif
+  let main_syntax = 'aptconf'
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Errors:
+" Catch all that is not overridden by next rules/items:
+syn match	aptconfError		display '[^[:blank:]]'
+syn match	aptconfError		display '^[^[:blank:]][^:{]*'
+
+" Options:
+" Define a general regular expression for the options that are not defined
+" later as keywords. Following apt.conf(5), we know that options are case
+" insensitive, and can contain alphanumeric characters and '/-:._+'; we
+" assume that there can not be consecutive colons (::) which is used as
+" syntax operator; we also assume that an option name can not start or end
+" by a colon.
+syn case	ignore
+syn match	aptconfRegexpOpt	'[-[:alnum:]/.+_]\+\(:[-[:alnum:]/.+_]\+\)*' contained display
+
+" Keywords:
+setlocal iskeyword+=/,-,.,_,+
+"setlocal iskeyword+=: is problematic, because of the '::' separator
+
+" Incomplete keywords will be treated differently than completely bad strings:
+syn keyword	aptconfGroupIncomplete
+	\ a[cquire] a[ptitude] d[ebtags] d[ebug] d[ir] d[pkg] d[select]
+	\ o[rderlist] p[ackagemanager] p[kgcachegen] q[uiet] r[pm]
+	\ u[nattended-upgrade]
+
+" Only the following keywords can be used at toplevel (to begin an option):
+syn keyword	aptconfGroup
+	\ acquire apt aptitude debtags debug dir dpkg dselect
+	\ orderlist packagemanager pkgcachegen quiet rpm
+	\ unattended-upgrade
+
+" Possible options for each group:
+" Acquire: {{{
+syn keyword	aptconfAcquire contained
+	\ cdrom Check-Valid-Until CompressionTypes ForceHash ftp gpgv
+	\ GzipIndexes http https Languages Max-ValidTime Min-ValidTime PDiffs
+	\ Queue-Mode Retries Source-Symlinks
+
+syn keyword	aptconfAcquireCDROM contained
+	\ AutoDetect CdromOnly Mount UMount
+
+syn keyword	aptconfAcquireCompressionTypes contained
+	\ bz2 lzma gz Order
+
+syn keyword	aptconfAcquireFTP contained
+	\ Passive Proxy ProxyLogin Timeout
+
+syn keyword	aptconfAcquireHTTP contained
+	\ AllowRedirect Dl-Limit Max-Age No-Cache No-Store Pipeline-Depth
+	\ Proxy Timeout User-Agent
+
+syn keyword	aptconfAcquireHTTPS contained
+	\ CaInfo CaPath CrlFile IssuerCert SslCert SslForceVersion SslKey
+	\ Verify-Host Verify-Peer
+
+syn keyword	aptconfAcquireMaxValidTime contained
+	\ Debian Debian-Security
+
+syn keyword	aptconfAcquirePDiffs contained
+	\ FileLimit SizeLimit
+
+syn cluster	aptconfAcquire_ contains=aptconfAcquire,
+	\ aptconfAcquireCDROM,aptconfAcquireCompressionTypes,aptconfAcquireFTP,
+	\ aptconfAcquireHTTP,aptconfAcquireHTTPS,aptconfAcquireMaxValidTime,
+	\ aptconfAcquirePDiffs
+" }}}
+" Apt: {{{
+syn keyword	aptconfApt contained
+	\ Architecture Architectures Archive Authentication AutoRemove
+	\ Build-Essential Cache Cache-Grow Cache-Limit Cache-Start CDROM
+	\ Changelogs Clean-Installed Compressor Default-Release
+	\ Force-LoopBreak Get Ignore-Hold Immediate-Configure
+	\ Install-Recommends Install-Suggests Keep-Fds List-Cleanup
+	\ NeverAutoRemove Never-MarkAuto-Sections Periodic Status-Fd Update
+
+syn keyword	aptconfAptAuthentication contained
+	\ TrustCDROM
+
+syn keyword	aptconfAptAutoRemove contained
+	\ RecommendsImportant SuggestsImportant
+
+syn keyword	aptconfAptCache contained
+	\ AllNames AllVersions Generate GivenOnly Important Installed NamesOnly
+	\ RecurseDepends ShowFull
+
+syn keyword	aptconfAptCDROM contained
+	\ Fast NoAct NoMount Rename
+
+syn keyword	aptconfAptChangelogs contained
+	\ Server
+
+syn keyword	aptconfAptCompressor contained
+	\ bzip2 gzip lzma xz
+
+syn keyword	aptconfAptCompressorAll contained
+	\ Binary CompressArg Cost Extension Name UncompressArg
+
+syn keyword	aptconfAptGet contained
+	\ AllowUnauthenticated Arch-Only Assume-No Assume-Yes AutomaticRemove
+	\ Build-Dep-Automatic Compile Diff-Only Download Download-Only Dsc-Only
+	\ Fix-Broken Fix-Missing Force-Yes HideAutoRemove Host-Architecture
+	\ List-Cleanup Only-Source Print-URIs Purge ReInstall Remove
+	\ Show-Upgraded Show-User-Simulation-Note Show-Versions Simulate
+	\ Tar-Only Trivial-Only Upgrade
+
+syn keyword	aptconfAptPeriodic contained
+	\ AutocleanInterval BackupArchiveInterval BackupLevel
+	\ Download-Upgradeable-Packages MaxAge MaxSize MinAge
+	\ Unattended-Upgrade Update-Package-Lists Verbose
+
+syn keyword	aptconfAptUpdate contained
+	\ Pre-Invoke Post-Invoke Post-Invoke-Success
+
+syn cluster	aptconfApt_ contains=aptconfApt,
+	\ aptconfAptAuthentication,aptconfAptAutoRemove,aptconfAptCache,
+	\ aptconfAptCDROM,aptconfAptChangelogs,aptconfAptCompressor,
+	\ aptconfAptCompressorAll,aptconfAptGet,aptconfAptPeriodic,
+	\ aptconfAptUpdate
+" }}}
+" Aptitude: {{{
+syn keyword	aptconfAptitude contained
+	\ Allow-Null-Upgrade Always-Use-Safe-Resolver Autoclean-After-Update
+	\ Auto-Install Auto-Fix-Broken Cmdline Debtags-Binary
+	\ Debtags-Update-Options Delete-Unused Delete-Unused-Pattern
+	\ Display-Planned-Action Forget-New-On-Install Forget-New-On-Update
+	\ Get-Root-Command Ignore-Old-Tmp Ignore-Recommends-Important
+	\ Keep-Recommends Keep-Suggests Keep-Unused-Pattern LockFile Log
+	\ Logging Parse-Description-Bullets Pkg-Display-Limit ProblemResolver
+	\ Purge-Unused Recommends-Important Safe-Resolver Screenshot Sections
+	\ Simulate Spin-Interval Suggests-Important Suppress-Read-Only-Warning
+	\ Theme Track-Dselect-State UI Warn-Not-Root
+
+syn keyword	aptconfAptitudeCmdline contained
+	\ Always-Prompt Assume-Yes Disable-Columns Download-Only Fix-Broken
+	\ Ignore-Trust-Violations Package-Display-Format Package-Display-Width
+	\ Progress Request-Strictness Resolver-Debug Resolver-Dump
+	\ Resolver-Show-Steps Safe-Upgrade Show-Deps Show-Size-Changes
+	\ Show-Versions Show-Why Simulate Verbose Version-Display-Format
+	\ Versions-Group-By Versions-Show-Package-Names Visual-Preview
+	\ Why-Display-Mode
+
+syn keyword	aptconfAptitudeCmdlineProgress contained
+	\ Percent-On-Right Retain-Completed
+
+syn keyword	aptconfAptitudeCmdlineSafeUpgrade contained
+	\ No-New-Installs
+
+syn keyword	aptconfAptitudeLogging contained
+	\ File Levels
+
+syn keyword	aptconfAptitudeProblemResolver contained
+	\ Allow-Break-Holds BreakHoldScore Break-Hold-Level BrokenScore
+	\ DefaultResolutionScore Discard-Null-Solution
+	\ EssentialRemoveScore ExtraScore FullReplacementScore FutureHorizon
+	\ Hints ImportantScore Infinity InstallScore Keep-All-Level KeepScore
+	\ NonDefaultScore Non-Default-Level OptionalScore PreserveAutoScore
+	\ PreserveManualScore RemoveScore Remove-Essential-Level Remove-Level
+	\ RequiredScore ResolutionScore Safe-Level SolutionCost StandardScore
+	\ StepLimit StepScore Trace-Directory Trace-File
+	\ UndoFullReplacementScore UnfixedSoftScore UpgradeScore
+
+syn keyword	aptconfAptitudeSafeResolver contained
+	\ No-New-Installs No-New-Upgrades Show-Resolver-Actions
+
+syn keyword	aptconfAptitudeScreenshot contained
+	\ Cache-Max IncrementalLoadLimit
+
+syn keyword	aptconfAptitudeSections contained
+	\ Descriptions Top-Sections
+
+syn keyword	aptconfAptitudeUI contained
+	\ Advance-On-Action Auto-Show-Reasons Default-Grouping
+	\ Default-Package-View Default-Preview-Grouping Default-Sorting
+	\ Description-Visible-By-Default Exit-On-Last-Close Fill-Text
+	\ Flat-View-As-First-View HelpBar Incremental-Search InfoAreaTabs
+	\ KeyBindings MenuBar-Autohide Minibuf-Download-Bar Minibuf-Prompts
+	\ New-package-Commands Package-Display-Format Package-Header-Format
+	\ Package-Status-Format Pause-After-Download Preview-Limit
+	\ Prompt-On-Exit Styles ViewTabs
+
+syn keyword	aptconfAptitudeUIKeyBindings contained
+	\ ApplySolution Begin BugReport Cancel Changelog ChangePkgTreeGrouping
+	\ ChangePkgTreeLimit ChangePkgTreeSorting ClearAuto CollapseAll
+	\ CollapseTree Commit Confirm Cycle CycleNext CycleOrder CyclePrev
+	\ DelBOL DelBack DelEOL DelForward Dependencies DescriptionCycle
+	\ DescriptionDown DescriptionUp DoInstallRun Down DpkgReconfigure
+	\ DumpResolver EditHier End ExamineSolution ExpandAll ExpandTree
+	\ FirstSolution ForbidUpgrade ForgetNewPackages Help HistoryNext
+	\ HistoryPrev Hold Install InstallSingle Keep LastSolution Left
+	\ LevelDown LevelUp MarkUpgradable MineFlagSquare MineLoadGame
+	\ MineSaveGame MineSweepSquare MineUncoverSquare MineUncoverSweepSquare
+	\ NextPage NextSolution No Parent PrevPage PrevSolution Purge
+	\ PushButton Quit QuitProgram RejectBreakHolds Refresh Remove
+	\ ReInstall RepeatSearchBack ReSearch ReverseDependencies Right
+	\ SaveHier Search SearchBack SearchBroken SetAuto ShowHideDescription
+	\ SolutionActionApprove SolutionActionReject ToggleExpanded
+	\ ToggleMenuActive Undo Up UpdatePackageList Versions Yes
+
+syn keyword	aptconfAptitudeUIStyles contained
+	\ Bullet ChangeLogNewerVersion Default DepBroken DisabledMenuEntry
+	\ DownloadHit DownloadProgress EditLine Error Header HighlightedMenuBar
+	\ HighlightedMenuEntry MediaChange MenuBar MenuBorder MenuEntry
+	\ MineBomb MineBorder MineFlag MineNumber1 MineNumber2 MineNumber3
+	\ MineNumber4 MineNumber5 MineNumber6 MineNumber7 MineNumber8
+	\ MultiplexTab MultiplexTabHighlighted PkgBroken PkgBrokenHighlighted
+	\ PkgIsInstalled PkgIsInstalledHighlighted PkgNotInstalled
+	\ PkgNotInstalledHighlighted PkgToDowngrade PkgToDowngradeHighlighted
+	\ PkgToHold PkgToHoldHighlighted PkgToInstall PkgToInstallHighlighted
+	\ PkgToRemove PkgToRemoveHighlighted PkgToUpgrade
+	\ PkgToUpgradeHighlighted Progress SolutionActionApproved
+	\ SolutionActionRejected Status TreeBackground TrustWarning
+
+syn keyword	aptconfAptitudeUIStylesElements contained
+	\ bg clear fg flip set
+
+syn cluster	aptconfAptitude_ contains=aptconfAptitude,
+	\ aptconfAptitudeCmdline,aptconfAptitudeCmdlineProgress,
+	\ aptconfAptitudeCmdlineSafeUpgrade,aptconfAptitudeLogging,
+	\ aptconfAptitudeProblemResolver,aptconfAptitudeSafeResolver,
+	\ aptconfAptitudeScreenshot,aptconfAptitudeSections,aptconfAptitudeUI,
+	\ aptconfAptitudeUIKeyBindings,aptconfAptitudeUIStyles,
+	\ aptconfAptitudeUIStylesElements
+" }}}
+" DebTags: {{{
+syn keyword	aptconfDebTags contained
+	\ Vocabulary
+
+syn cluster	aptconfDebTags_ contains=aptconfDebTags
+" }}}
+" Debug: {{{
+syn keyword	aptconfDebug contained
+	\ Acquire aptcdrom BuildDeps Hashes IdentCdrom Nolocking
+	\ pkgAcquire pkgAutoRemove pkgCacheGen pkgDepCache pkgDPkgPM
+	\ pkgDPkgProgressReporting pkgInitialize pkgOrderList
+	\ pkgPackageManager pkgPolicy pkgProblemResolver sourceList
+
+syn keyword	aptconfDebugAcquire contained
+	\ cdrom Ftp gpgv Http Https netrc
+
+syn keyword	aptconfDebugPkgAcquire contained
+	\ Auth Diffs RRed Worker
+
+syn keyword	aptconfDebugPkgDepCache contained
+	\ AutoInstall Marker
+
+syn keyword	aptconfDebugPkgProblemResolver contained
+	\ ShowScores
+
+syn cluster	aptconfDebug_ contains=aptconfDebug,
+	\ aptconfDebugAcquire,aptconfDebugPkgAcquire,aptconfDebugPkgDepCache,
+	\ aptconfDebugPkgProblemResolver
+" }}}
+" Dir: {{{
+syn keyword	aptconfDir contained
+	\ Aptitude Bin Cache Etc Ignore-Files-Silently Log Media Parts RootDir
+	\ State
+
+syn keyword	aptconfDirAptitude contained
+	\ state
+
+syn keyword	aptconfDirBin contained
+	\ apt-get apt-cache dpkg dpkg-buildpackage dpkg-source gpg gzip Methods
+	\ solvers
+
+syn keyword	aptconfDirCache contained
+	\ Archives Backup pkgcache srcpkgcache
+
+syn keyword	aptconfDirEtc contained
+	\ Main Netrc Parts Preferences PreferencesParts SourceList SourceParts
+	\ VendorList VendorParts Trusted TrustedParts
+
+syn keyword	aptconfDirLog contained
+	\ History Terminal
+
+syn keyword	aptconfDirMedia contained
+	\ MountPath
+
+syn keyword	aptconfDirState contained
+	\ cdroms extended_states Lists mirrors status
+
+syn cluster	aptconfDir_ contains=aptconfDir,
+	\ aptconfDirAptitude,aptconfDirBin,aptconfDirCache,aptconfDirEtc,
+	\ aptconfDirLog,aptconfDirMedia,aptconfDirState
+" }}}
+" DPkg: {{{
+syn keyword	aptconfDPkg contained
+	\ Build-Options Chroot-Directory ConfigurePending FlushSTDIN MaxArgs
+	\ MaxBytes NoTriggers options Pre-Install-Pkgs Pre-Invoke Post-Invoke
+	\ Run-Directory StopOnError Tools TriggersPending
+
+syn keyword	aptconfDPkgTools contained
+	\ Options Version
+
+syn cluster	aptconfDPkg_ contains=aptconfDPkg,
+	\ aptconfDPkgOrderList,aptconfDPkgOrderListScore,aptconfDPkgTools
+" }}}
+" DSelect: {{{
+syn keyword	aptconfDSelect contained
+	\ CheckDir Clean Options PromptAfterUpdate UpdateOptions
+
+syn cluster	aptconfDSelect_ contains=aptconfDSelect
+" }}}
+" OrderList: {{{
+syn keyword	aptconfOrderList contained
+	\ Score
+
+syn keyword	aptconfOrderListScore contained
+	\ Delete Essential Immediate PreDepends
+
+syn cluster	aptconfOrderList_ contains=aptconfOrderList,
+	\ aptconfOrderListScore
+" }}}
+" PackageManager: {{{
+syn keyword	aptconfPackageManager contained
+	\ Configure
+
+syn cluster	aptconfPackageManager_ contains=aptconfPackageManager
+" }}}
+" PkgCacheGen: {{{
+syn keyword	aptconfPkgCacheGen contained
+	\ Essential
+
+syn cluster	aptconfPkgCacheGen_ contains=aptconfPkgCacheGen
+" }}}
+" Quiet: {{{
+syn keyword	aptconfQuiet contained
+	\ NoUpdate
+
+syn cluster	aptconfQuiet_ contains=aptconfQuiet
+" }}}
+" Rpm: {{{
+syn keyword	aptconfRpm contained
+	\ Post-Invoke Pre-Invoke
+
+syn cluster	aptconfRpm_ contains=aptconfRpm
+" }}}
+" Unattened Upgrade: {{{
+syn keyword	aptconfUnattendedUpgrade contained
+	\ AutoFixInterruptedDpkg Automatic-Reboot InstallOnShutdown Mail
+	\ MailOnlyOnError MinimalSteps Origins-Pattern Package-Blacklist
+	\ Remove-Unused-Dependencies
+
+syn cluster	aptconfUnattendedUpgrade_ contains=aptconfUnattendedUpgrade
+" }}}
+
+syn case	match
+
+" Now put all the keywords (and 'valid' options) in a single cluster:
+syn cluster	aptconfOptions contains=aptconfRegexpOpt,
+	\ @aptconfAcquire_,@aptconfApt_,@aptconfAptitude_,@aptconfDebTags_,
+	\ @aptconfDebug_,@aptconfDir_,@aptconfDPkg_,@aptconfDSelect_,
+	\ @aptconfOrderList_,@aptconfPackageManager_,@aptconfPkgCacheGen_,
+	\ @aptconfQuiet_,@aptconfRpm_,@aptconfUnattendedUpgrade_
+
+" Syntax:
+syn match	aptconfSemiColon	';'
+syn match	aptconfDoubleColon	'::'
+syn match	aptconfCurlyBraces	'[{}]'
+syn region	aptconfValue		start='"' end='"' oneline display
+syn region	aptconfInclude		matchgroup=aptconfOperator start='{' end='}' contains=ALLBUT,aptconfGroup,aptconfGroupIncomplete,@aptconfCommentSpecial
+syn region	aptconfInclude		matchgroup=aptconfOperator start='::' end='{'me=s-1 contains=@aptconfOptions,aptconfError display
+syn region	aptconfInclude		matchgroup=aptconfOperator start='::' end='::\|\s'me=s-1 oneline contains=@aptconfOptions,aptconfError display
+
+" Basic Syntax Errors: XXX avoid to generate false positives !!!
+"
+" * Invalid comment format (seems to not cause errors, but...):
+syn match	aptconfAsError		display '^#.*'
+"
+" * When a semicolon is missing after a double-quoted string:
+" There are some cases (for example in the Dir group of options, but not only)
+" where this syntax is valid. So we don't treat it as a strict error.
+syn match	aptconfAsError		display '"[^"]*"[^;]'me=e-1
+syn match	aptconfAsError		display '"[^"]*"$'
+"
+" * When double quotes are missing around a value (before a semicolon):
+" This omission has no effect if the value is a single string (without blank
+" characters). But apt.conf(5) says that quotes are required, and this item
+" avoids to match unquoted keywords.
+syn match	aptconfAsError		display '\s[^"[:blank:]]*[^}"];'me=e-1
+"
+" * When only one double quote is missing around a value (before a semicolon):
+" No comment for that: it must be highly visible.
+syn match	aptconfError		display '\(\s\|;\)"[^"[:blank:]]\+;'me=e-1
+syn match	aptconfError		display '\(\s\|;\)[^"[:blank:]]\+";'me=e-1
+"
+" * When space is missing between option and (quoted) value:
+" TODO (partially implemented)
+syn match	aptconfError		display '::[^[:blank:]]*"'
+
+" Special Actions:
+syn match	aptconfAction		'^#\(clear\|include\)\>'
+syn region	aptconfAction		matchgroup=aptconfAction start='^#clear\>' end=';'me=s-1 oneline contains=aptconfGroup,aptconfDoubleColon,@aptconfOptions
+syn region	aptconfAction		matchgroup=aptconfAction start='^#include\>' end=';'me=s-1 oneline contains=aptconfRegexpOpt
+
+" Comments:
+syn keyword	aptconfTodo		TODO FIXME NOTE XXX contained
+syn cluster	aptconfCommentSpecial	contains=@Spell,aptconfTodo
+syn match	aptconfComment		'//.*' contains=@aptconfCommentSpecial
+syn region	aptconfComment		start='/\*' end='\*/' contains=@aptconfCommentSpecial
+
+" Highlight Definitions:
+hi def link aptconfTodo				Todo
+hi def link aptconfError			Error
+hi def link aptconfComment			Comment
+hi def link aptconfOperator			Operator
+
+hi def link aptconfAction			PreProc
+hi def link aptconfOption			Type
+hi def link aptconfValue			String
+hi def link aptconfRegexpOpt			Normal
+hi def link aptconfAsError			Special
+
+hi def link aptconfSemiColon			aptconfOperator
+hi def link aptconfDoubleColon			aptconfOperator
+hi def link aptconfCurlyBraces			aptconfOperator
+
+hi def link aptconfGroupIncomplete		Special
+hi def link aptconfGroup			aptconfOption
+
+hi def link aptconfAcquire			aptconfOption
+hi def link aptconfAcquireCDROM			aptconfOption
+hi def link aptconfAcquireCompressionTypes	aptconfOption
+hi def link aptconfAcquireFTP			aptconfOption
+hi def link aptconfAcquireHTTP			aptconfOption
+hi def link aptconfAcquireHTTPS			aptconfOption
+hi def link aptconfAcquireMaxValidTime		aptconfOption
+hi def link aptconfAcquirePDiffs		aptconfOption
+
+hi def link aptconfApt				aptconfOption
+hi def link aptconfAptAuthentication		aptconfOption
+hi def link aptconfAptAutoRemove		aptconfOption
+hi def link aptconfAptCache			aptconfOption
+hi def link aptconfAptCDROM			aptconfOption
+hi def link aptconfAptChangelogs		aptconfOption
+hi def link aptconfAptCompressor		aptconfOption
+hi def link aptconfAptCompressorAll		aptconfOption
+hi def link aptconfAptGet			aptconfOption
+hi def link aptconfAptPeriodic			aptconfOption
+hi def link aptconfAptUpdate			aptconfOption
+
+hi def link aptconfAptitude			aptconfOption
+hi def link aptconfAptitudeCmdline		aptconfOption
+hi def link aptconfAptitudeCmdlineProgress	aptconfOption
+hi def link aptconfAptitudeCmdlineSafeUpgrade	aptconfOption
+hi def link aptconfAptitudeLogging		aptconfOption
+hi def link aptconfAptitudeProblemResolver	aptconfOption
+hi def link aptconfAptitudeSafeResolver		aptconfOption
+hi def link aptconfAptitudeScreenshot		aptconfOption
+hi def link aptconfAptitudeSections		aptconfOption
+hi def link aptconfAptitudeUI			aptconfOption
+hi def link aptconfAptitudeUIKeyBindings	aptconfOption
+hi def link aptconfAptitudeUIStyles		aptconfOption
+hi def link aptconfAptitudeUIStylesElements	aptconfOption
+
+hi def link aptconfDebTags			aptconfOption
+
+hi def link aptconfDebug			aptconfOption
+hi def link aptconfDebugAcquire			aptconfOption
+hi def link aptconfDebugPkgAcquire		aptconfOption
+hi def link aptconfDebugPkgDepCache		aptconfOption
+hi def link aptconfDebugPkgProblemResolver	aptconfOption
+
+hi def link aptconfDir				aptconfOption
+hi def link aptconfDirAptitude			aptconfOption
+hi def link aptconfDirBin			aptconfOption
+hi def link aptconfDirCache			aptconfOption
+hi def link aptconfDirEtc			aptconfOption
+hi def link aptconfDirLog			aptconfOption
+hi def link aptconfDirMedia			aptconfOption
+hi def link aptconfDirState			aptconfOption
+
+hi def link aptconfDPkg				aptconfOption
+hi def link aptconfDPkgTools			aptconfOption
+
+hi def link aptconfDSelect			aptconfOption
+
+hi def link aptconfOrderList			aptconfOption
+hi def link aptconfOrderListScore		aptconfOption
+
+hi def link aptconfPackageManager		aptconfOption
+
+hi def link aptconfPkgCacheGen			aptconfOption
+
+hi def link aptconfQuiet			aptconfOption
+
+hi def link aptconfRpm				aptconfOption
+
+hi def link aptconfUnattendedUpgrade		aptconfOption
+
+let b:current_syntax = "aptconf"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/art.vim vim73/runtime/syntax/art.vim
--- vim73.orig/runtime/syntax/art.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/art.vim	2013-08-04 19:09:09.190614796 +0000
@@ -2,12 +2,15 @@
 " Language:      ART-IM and ART*Enterprise
 " Maintainer:    Dorai Sitaram <ds26@gte.com>
 " URL:		 http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
-" Last Change:   Nov 6, 2002
+" Last Change:   2011 Dec 28 by Thilo Six
 
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 syn keyword artspform => and assert bind
@@ -42,3 +45,6 @@
 hi def link artvariable function
 
 let b:current_syntax = "art"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/asciidoc.vim vim73/runtime/syntax/asciidoc.vim
--- vim73.orig/runtime/syntax/asciidoc.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/asciidoc.vim	2013-08-04 19:09:09.193948119 +0000
@@ -0,0 +1,183 @@
+" Vim syntax file
+" Language:     AsciiDoc
+" Author:       Stuart Rackham <srackham@gmail.com> (inspired by Felix
+"               Obenhuber's original asciidoc.vim script).
+" URL:          http://asciidoc.org/
+" Licence:      GPL (http://www.gnu.org)
+" Remarks:      Vim 6 or greater
+" Limitations:
+" 
+" - Nested quoted text formatting is highlighted according to the outer
+"   format.
+" - If a closing Example Block delimiter may be mistaken for a title
+"   underline. A workaround is to insert a blank line before the closing
+"   delimiter.
+" - Lines within a paragraph starting with equals characters are
+"   highlighted as single-line titles.
+" - Lines within a paragraph beginning with a period are highlighted as
+"   block titles.
+
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syn clear
+syn sync fromstart
+syn sync linebreaks=100
+
+" Run :help syn-priority to review syntax matching priority.
+syn keyword asciidocToDo TODO FIXME CHECK TEST XXX ZZZ DEPRECATED
+syn match asciidocBackslash /\\/
+syn region asciidocIdMarker start=/^\$Id:\s/ end=/\s\$$/
+syn match asciidocCallout /\\\@<!<\d\{1,2}>/
+syn match asciidocOpenBlockDelimiter /^--$/
+syn match asciidocLineBreak /[ \t]+$/ containedin=asciidocList
+syn match asciidocRuler /^'\{3,}$/
+syn match asciidocPagebreak /^<\{3,}$/
+syn match asciidocEntityRef /\\\@<!&[#a-zA-Z]\S\{-};/
+syn region asciidocLiteralParagraph start=/\(\%^\|\_^\s*\n\)\@<=\s\+\S\+/ end=/\(^\(+\|--\)\?\s*$\)\@=/ contains=asciidocToDo
+syn match asciidocURL /\\\@<!\<\(http\|https\|ftp\|file\|irc\):\/\/[^| \t]*\(\w\|\/\)/
+syn match asciidocEmail /[\\.:]\@<!\(\<\|<\)\w\(\w\|[.-]\)*@\(\w\|[.-]\)*\w>\?[0-9A-Za-z_]\@!/
+syn match asciidocAttributeRef /\\\@<!{\w\(\w\|[-,+]\)*\([=!@#$%?:].*\)\?}/
+
+" As a damage control measure quoted patterns always terminate at a blank
+" line (see 'Limitations' above).
+syn match asciidocQuotedAttributeList /\\\@<!\[[a-zA-Z0-9_-][a-zA-Z0-9 _-]*\][+_'`#*]\@=/
+syn match asciidocQuotedSubscript /\\\@<!\~\S\_.\{-}\(\~\|\n\s*\n\)/ contains=asciidocEntityRef
+syn match asciidocQuotedSuperscript /\\\@<!\^\S\_.\{-}\(\^\|\n\s*\n\)/ contains=asciidocEntityRef
+
+syn match asciidocQuotedMonospaced /\(^\|[| \t([.,=\]]\)\@<=+\([+ \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(+\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+syn match asciidocQuotedMonospaced2 /\(^\|[| \t([.,=\]]\)\@<=`\([` \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(`\([| \t)[\],.?!;:=]\|$\)\@=\)/
+syn match asciidocQuotedUnconstrainedMonospaced /[\\+]\@<!++\S\_.\{-}\(++\|\n\s*\n\)/ contains=asciidocEntityRef
+
+syn match asciidocQuotedEmphasized /\(^\|[| \t([.,=\]]\)\@<=_\([_ \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(_\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+syn match asciidocQuotedEmphasized2 /\(^\|[| \t([.,=\]]\)\@<='\([' \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\('\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+syn match asciidocQuotedUnconstrainedEmphasized /\\\@<!__\S\_.\{-}\(__\|\n\s*\n\)/ contains=asciidocEntityRef
+
+syn match asciidocQuotedBold /\(^\|[| \t([.,=\]]\)\@<=\*\([* \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(\*\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+syn match asciidocQuotedUnconstrainedBold /\\\@<!\*\*\S\_.\{-}\(\*\*\|\n\s*\n\)/ contains=asciidocEntityRef
+
+" Don't allow ` in single quoted (a kludge to stop confusion with `monospaced`).
+syn match asciidocQuotedSingleQuoted /\(^\|[| \t([.,=\]]\)\@<=`\([` \n\t]\)\@!\([^`]\|\n\(\s*\n\)\@!\)\{-}[^` \t]\('\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+
+syn match asciidocQuotedDoubleQuoted /\(^\|[| \t([.,=\]]\)\@<=``\([` \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(''\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
+
+syn match asciidocDoubleDollarPassthrough /\\\@<!\(^\|[^0-9a-zA-Z$]\)\@<=\$\$..\{-}\(\$\$\([^0-9a-zA-Z$]\|$\)\@=\|^$\)/
+syn match asciidocTriplePlusPassthrough /\\\@<!\(^\|[^0-9a-zA-Z$]\)\@<=+++..\{-}\(+++\([^0-9a-zA-Z$]\|$\)\@=\|^$\)/
+
+syn match asciidocAdmonition /^\u\{3,15}:\(\s\+.*\)\@=/
+
+syn region asciidocTable_OLD start=/^\([`.']\d*[-~_]*\)\+[-~_]\+\d*$/ end=/^$/
+syn match asciidocBlockTitle /^\.[^. \t].*[^-~_]$/ contains=asciidocQuoted.*,asciidocAttributeRef
+syn match asciidocTitleUnderline /[-=~^+]\{2,}$/ transparent contained contains=NONE
+syn match asciidocOneLineTitle /^=\{1,5}\s\+\S.*$/ contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash
+syn match asciidocTwoLineTitle /^[^. +/].*[^.]\n[-=~^+]\{3,}$/ contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocTitleUnderline
+
+syn match asciidocAttributeList /^\[[^[ \t].*\]$/
+syn match asciidocQuoteBlockDelimiter /^_\{4,}$/
+syn match asciidocExampleBlockDelimiter /^=\{4,}$/
+syn match asciidocSidebarDelimiter /^*\{4,}$/
+
+" See http://vimdoc.sourceforge.net/htmldoc/usr_44.html for excluding region
+" contents from highlighting.
+syn match asciidocTablePrefix /\(\S\@<!\(\([0-9.]\+\)\([*+]\)\)\?\([<\^>.]\{,3}\)\?\([a-z]\)\?\)\?|/ containedin=asciidocTableBlock contained
+syn region asciidocTableBlock matchgroup=asciidocTableDelimiter start=/^|=\{3,}$/ end=/^|=\{3,}$/ keepend contains=ALL
+syn match asciidocTablePrefix /\(\S\@<!\(\([0-9.]\+\)\([*+]\)\)\?\([<\^>.]\{,3}\)\?\([a-z]\)\?\)\?!/ containedin=asciidocTableBlock contained
+syn region asciidocTableBlock2 matchgroup=asciidocTableDelimiter2 start=/^!=\{3,}$/ end=/^!=\{3,}$/ keepend contains=ALL
+
+syn match asciidocListContinuation /^+$/
+syn region asciidocLiteralBlock start=/^\.\{4,}$/ end=/^\.\{4,}$/ contains=asciidocCallout,asciidocToDo keepend
+syn region asciidocListingBlock start=/^-\{4,}$/ end=/^-\{4,}$/ contains=asciidocCallout,asciidocToDo keepend
+syn region asciidocCommentBlock start="^/\{4,}$" end="^/\{4,}$" contains=asciidocToDo
+syn region asciidocPassthroughBlock start="^+\{4,}$" end="^+\{4,}$"
+
+" Allowing leading \w characters in the filter delimiter is to accomodate
+" the pre version 8.2.7 syntax and may be removed in future releases.
+syn region asciidocFilterBlock start=/^\w*\~\{4,}$/ end=/^\w*\~\{4,}$/
+
+syn region asciidocMacroAttributes matchgroup=asciidocRefMacro start=/\\\@<!<<"\{-}\(\w\|-\|_\|:\|\.\)\+"\?,\?/ end=/\(>>\)\|^$/ contains=asciidocQuoted.* keepend
+syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@<!\[\{2}\(\w\|-\|_\|:\|\.\)\+,\?/ end=/\]\{2}/ keepend
+syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@<!\[\{3}\(\w\|-\|_\|:\|\.\)\+/ end=/\]\{3}/ keepend
+syn region asciidocMacroAttributes matchgroup=asciidocMacro start=/[\\0-9a-zA-Z]\@<!\w\(\w\|-\)*:\S\{-}\[/ skip=/\\\]/ end=/\]\|^$/ contains=asciidocQuoted.*,asciidocAttributeRef,asciidocEntityRef keepend
+" Highlight macro that starts with an attribute reference (a common idiom).
+syn region asciidocMacroAttributes matchgroup=asciidocMacro start=/\(\\\@<!{\w\(\w\|[-,+]\)*\([=!@#$%?:].*\)\?}\)\@<=\S\{-}\[/ skip=/\\\]/ end=/\]\|^$/ contains=asciidocQuoted.*,asciidocAttributeRef keepend
+syn region asciidocMacroAttributes matchgroup=asciidocIndexTerm start=/\\\@<!(\{2,3}/ end=/)\{2,3}/ contains=asciidocQuoted.*,asciidocAttributeRef keepend
+
+syn match asciidocCommentLine "^//\([^/].*\|\)$" contains=asciidocToDo
+
+syn region asciidocAttributeEntry start=/^:\w/ end=/:\(\s\|$\)/ oneline
+
+" Lists.
+syn match asciidocListBullet /^\s*\zs\(-\|\*\{1,5}\)\ze\s/
+syn match asciidocListNumber /^\s*\zs\(\(\d\+\.\)\|\.\{1,5}\|\(\a\.\)\|\([ivxIVX]\+)\)\)\ze\s\+/
+syn region asciidocListLabel start=/^\s*/ end=/\(:\{2,4}\|;;\)$/ oneline contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocToDo keepend
+" DEPRECATED: Horizontal label.
+syn region asciidocHLabel start=/^\s*/ end=/\(::\|;;\)\(\s\+\|\\$\)/ oneline contains=asciidocQuoted.*,asciidocMacroAttributes keepend
+" Starts with any of the above.
+syn region asciidocList start=/^\s*\(-\|\*\{1,5}\)\s/ start=/^\s*\(\(\d\+\.\)\|\.\{1,5}\|\(\a\.\)\|\([ivxIVX]\+)\)\)\s\+/ start=/.\+\(:\{2,4}\|;;\)$/ end=/\(^[=*]\{4,}$\)\@=/ end=/\(^\(+\|--\)\?\s*$\)\@=/ contains=asciidocList.\+,asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocCommentLine,asciidocAttributeList,asciidocToDo
+
+hi def link asciidocAdmonition Special
+hi def link asciidocAnchorMacro Macro
+hi def link asciidocAttributeEntry Special
+hi def link asciidocAttributeList Special
+hi def link asciidocAttributeMacro Macro
+hi def link asciidocAttributeRef Special
+hi def link asciidocBackslash Special
+hi def link asciidocBlockTitle Title
+hi def link asciidocCallout Label
+hi def link asciidocCommentBlock Comment
+hi def link asciidocCommentLine Comment
+hi def link asciidocDoubleDollarPassthrough Special
+hi def link asciidocEmail Macro
+hi def link asciidocEntityRef Special
+hi def link asciidocExampleBlockDelimiter Type
+hi def link asciidocFilterBlock Type
+hi def link asciidocHLabel Label
+hi def link asciidocIdMarker Special
+hi def link asciidocIndexTerm Macro
+hi def link asciidocLineBreak Special
+hi def link asciidocOpenBlockDelimiter Label
+hi def link asciidocListBullet Label
+hi def link asciidocListContinuation Label
+hi def link asciidocListingBlock Identifier
+hi def link asciidocListLabel Label
+hi def link asciidocListNumber Label
+hi def link asciidocLiteralBlock Identifier
+hi def link asciidocLiteralParagraph Identifier
+hi def link asciidocMacroAttributes Label
+hi def link asciidocMacro Macro
+hi def link asciidocOneLineTitle Title
+hi def link asciidocPagebreak Type
+hi def link asciidocPassthroughBlock Identifier
+hi def link asciidocQuoteBlockDelimiter Type
+hi def link asciidocQuotedAttributeList Special
+hi def link asciidocQuotedBold Special
+hi def link asciidocQuotedDoubleQuoted Label
+hi def link asciidocQuotedEmphasized2 Type
+hi def link asciidocQuotedEmphasized Type
+hi def link asciidocQuotedMonospaced2 Identifier
+hi def link asciidocQuotedMonospaced Identifier
+hi def link asciidocQuotedSingleQuoted Label
+hi def link asciidocQuotedSubscript Type
+hi def link asciidocQuotedSuperscript Type
+hi def link asciidocQuotedUnconstrainedBold Special
+hi def link asciidocQuotedUnconstrainedEmphasized Type
+hi def link asciidocQuotedUnconstrainedMonospaced Identifier
+hi def link asciidocRefMacro Macro
+hi def link asciidocRuler Type
+hi def link asciidocSidebarDelimiter Type
+hi def link asciidocTableBlock2 NONE
+hi def link asciidocTableBlock NONE
+hi def link asciidocTableDelimiter2 Label
+hi def link asciidocTableDelimiter Label
+hi def link asciidocTable_OLD Type
+hi def link asciidocTablePrefix2 Label
+hi def link asciidocTablePrefix Label
+hi def link asciidocToDo Todo
+hi def link asciidocTriplePlusPassthrough Special
+hi def link asciidocTwoLineTitle Title
+hi def link asciidocURL Macro
+let b:current_syntax = "asciidoc"
+
+" vim: wrap et sw=2 sts=2:
diff -Naur vim73.orig/runtime/syntax/asm.vim vim73/runtime/syntax/asm.vim
--- vim73.orig/runtime/syntax/asm.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/asm.vim	2013-08-04 19:09:09.193948119 +0000
@@ -3,7 +3,7 @@
 " Maintainer:	Erik Wognsen <erik.wognsen@gmail.com>
 "		Previous maintainer:
 "		Kevin Dahlhausen <kdahlhaus@yahoo.com>
-" Last Change:	2010 Apr 18
+" Last Change:	2012 Apr 09
 
 " Thanks to Ori Avtalion for feedback on the comment markers!
 
@@ -15,6 +15,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 " storage types
@@ -40,7 +43,7 @@
 " Various #'s as defined by GAS ref manual sec 3.6.2.1
 " Technically, the first decNumber def is actually octal,
 " since the value of 0-7 octal is the same as 0-7 decimal,
-" I prefer to map it as decimal:
+" I (Kevin) prefer to map it as decimal:
 syn match decNumber		"0\+[1-7]\=[\t\n$,; ]"
 syn match decNumber		"[1-9]\d*"
 syn match octNumber		"0[0-7][0-7]\+"
@@ -49,14 +52,39 @@
 
 syn keyword asmTodo		contained TODO
 
-" GAS supports various comment markers as described here:
-" http://sourceware.org/binutils/docs-2.19/as/Comments.html
-" I have commented out the ARM comment marker "@" by default as I think more
-" people are using "@" with the .type directive. See
-" http://sourceware.org/binutils/docs-2.19/as/Type.html
+
+" GAS supports one type of multi line comments:
 syn region asmComment		start="/\*" end="\*/" contains=asmTodo
+
+" GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however,
+" a backslash ending a C++ style comment does not extend the comment to the
+" next line (hence the syntax region does not define 'skip="\\$"')
+syn region asmComment		start="//" end="$" keepend contains=asmTodo
+
+" Line comment characters depend on the target architecture and command line
+" options and some comments may double as logical line number directives or
+" preprocessor commands. This situation is described at
+" http://sourceware.org/binutils/docs-2.22/as/Comments.html
+" Some line comment characters have other meanings for other targets. For
+" example, .type directives may use the `@' character which is also an ARM
+" comment marker.
+" As a compromise to accommodate what I arbitrarily assume to be the most
+" frequently used features of the most popular architectures (and also the
+" non-GNU assembly languages that use this syntax file because their asm files
+" are also named *.asm), the following are used as line comment characters:
 syn match asmComment		"[#;!|].*" contains=asmTodo
-" syn match asmComment		"@.*" contains=asmTodo
+
+" Side effects of this include:
+" - When `;' is used to separate statements on the same line (many targets
+"   support this), all statements except the first get highlighted as
+"   comments. As a remedy, remove `;' from the above.
+" - ARM comments are not highlighted correctly. For ARM, uncomment the
+"   following two lines and comment the one above.
+"syn match asmComment		"@.*" contains=asmTodo
+"syn match asmComment		"^#.*" contains=asmTodo
+
+" Advanced users of specific architectures will probably want to change the
+" comment highlighting or use a specific, more comprehensive syntax file.
 
 syn match asmInclude		"\.include"
 syn match asmCond		"\.if"
@@ -97,7 +125,7 @@
   HiLink octNumber	Number
   HiLink binNumber	Number
 
-  HiLink asmIdentifier Identifier
+  HiLink asmIdentifier	Identifier
   HiLink asmType	Type
 
   delcommand HiLink
@@ -105,4 +133,7 @@
 
 let b:current_syntax = "asm"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/asn.vim vim73/runtime/syntax/asn.vim
--- vim73.orig/runtime/syntax/asn.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/asn.vim	2013-08-04 19:09:09.197281443 +0000
@@ -2,7 +2,7 @@
 " Language:	ASN.1
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/asn.vim
-" Last Change:	2001 Apr 26
+" Last Change:	2012 Oct 05
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " keyword definitions
 syn keyword asnExternal		DEFINITIONS BEGIN END IMPORTS EXPORTS FROM
 syn match   asnExternal		"\<IMPLICIT\s\+TAGS\>"
@@ -76,6 +79,8 @@
   delcommand HiLink
 endif
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 let b:current_syntax = "asn"
 
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/autoit.vim vim73/runtime/syntax/autoit.vim
--- vim73.orig/runtime/syntax/autoit.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/autoit.vim	2013-08-04 19:09:09.203948089 +0000
@@ -6,6 +6,15 @@
 " Script URL:	http://www.vim.org/scripts/script.php?script_id=1239
 " ChangeLog:	Please visit the script URL for detailed change information
 
+" Quit when a syntax file was already loaded.
+if exists("b:current_syntax")
+  finish
+endif
+let s:keepcpo= &cpo
+set cpo&vim
+
+let b:current_syntax = "autoit"
+
 " AutoIt is not case dependent
 syn case ignore
 
@@ -1108,4 +1117,8 @@
 hi def link autoitStyle Type
 hi def link autoitConst Type
 hi def link autoitSend Type
+
 syn sync minlines=50
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/syntax/automake.vim vim73/runtime/syntax/automake.vim
--- vim73.orig/runtime/syntax/automake.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/automake.vim	2013-08-04 19:09:09.207281413 +0000
@@ -2,8 +2,8 @@
 " Language:	automake Makefile.am
 " Maintainer:   Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainer:	John Williams <jrw@pobox.com>
-" Last Change:	2007-10-14
-" URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/syntax/automake.vim;hb=debian
+" Last Change:	2011-06-13
+" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/automake.vim
 "
 " XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain
 "     it only because patches have been submitted for it by Debian users and the
@@ -17,6 +17,12 @@
 " when they are used in an inappropriate place, such as in defining
 " EXTRA_SOURCES.
 
+" Standard syntax initialization
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
 
 " Read the Makefile syntax to start with
 if version < 600
@@ -25,27 +31,28 @@
   runtime! syntax/make.vim
 endif
 
-syn match automakePrimary "^[A-Za-z0-9_]\+\(_PROGRAMS\|LIBRARIES\|_LIST\|_SCRIPTS\|_DATA\|_HEADERS\|_MANS\|_TEXINFOS\|_JAVA\|_LTLIBRARIES\)\s*="me=e-1
-syn match automakePrimary "^TESTS\s*="me=e-1
-syn match automakeSecondary "^[A-Za-z0-9_]\+\(_SOURCES\|_LDADD\|_LIBADD\|_LDFLAGS\|_DEPENDENCIES\|_CPPFLAGS\)\s*="me=e-1
-syn match automakeSecondary "^OMIT_DEPENDENCIES\s*="me=e-1
-syn match automakeExtra "^EXTRA_[A-Za-z0-9_]\+\s*="me=e-1
-syn match automakeOptions "^\(AUTOMAKE_OPTIONS\|ETAGS_ARGS\|TAGS_DEPENDENCIES\)\s*="me=e-1
-syn match automakeClean "^\(MOSTLY\|DIST\|MAINTAINER\)\=CLEANFILES\s*="me=e-1
-syn match automakeSubdirs "^\(DIST_\)\=SUBDIRS\s*="me=e-1
-syn match automakeConditional "^\(if\s*[a-zA-Z0-9_]\+\|else\|endif\)\s*$"
+syn match automakePrimary "^\w\+\(_PROGRAMS\|_LIBRARIES\|_LISP\|_PYTHON\|_JAVA\|_SCRIPTS\|_DATA\|_HEADERS\|_MANS\|_TEXINFOS\|_LTLIBRARIES\)\s*\ze+\=="
+syn match automakePrimary "^TESTS\s*\ze+\=="me=e-1
+syn match automakeSecondary "^\w\+\(_SOURCES\|_LIBADD\|_LDADD\|_LDFLAGS\|_DEPENDENCIES\|_AR\|_CCASFLAGS\|_CFLAGS\|_CPPFLAGS\|_CXXFLAGS\|_FCFLAGS\|_FFLAGS\|_GCJFLAGS\|_LFLAGS\|_LIBTOOLFLAGS\|OBJCFLAGS\|RFLAGS\|UPCFLAGS\|YFLAGS\)\s*\ze+\=="
+syn match automakeSecondary "^\(LDADD\|ARFLAGS\|OMIT_DEPENDENCIES\|AM_MAKEFLAGS\|\(AM_\)\=\(MAKEINFOFLAGS\|RUNTESTDEFAULTFLAGS\|ETAGSFLAGS\|CTAGSFLAGS\|JAVACFLAGS\)\)\s*\ze+\=="
+syn match automakeExtra "^EXTRA_\w\+\s*\ze+\=="
+syn match automakeOptions "^\(ACLOCAL_AMFLAGS\|AUTOMAKE_OPTIONS\|DISTCHECK_CONFIGURE_FLAGS\|ETAGS_ARGS\|TAGS_DEPENDENCIES\)\s*\ze+\=="
+syn match automakeClean "^\(MOSTLY\|DIST\|MAINTAINER\)\=CLEANFILES\s*\ze+\=="
+syn match automakeSubdirs "^\(DIST_\)\=SUBDIRS\s*\ze+\=="
+syn match automakeConditional "^\(if\s*!\=\w\+\|else\|endif\)\s*$"
 
-syn match automakeSubst     "@[a-zA-Z0-9_]\+@"
-syn match automakeSubst     "^\s*@[a-zA-Z0-9_]\+@"
+syn match automakeSubst     "@\w\+@"
+syn match automakeSubst     "^\s*@\w\+@"
 syn match automakeComment1 "#.*$" contains=automakeSubst
 syn match automakeComment2 "##.*$"
 
 syn match automakeMakeError "$[{(][^})]*[^a-zA-Z0-9_})][^})]*[})]" " GNU make function call
+syn match automakeMakeError "^AM_LDADD\s*\ze+\==" " Common mistake
 
-syn region automakeNoSubst start="^EXTRA_[a-zA-Z0-9_]*\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
-syn region automakeNoSubst start="^DIST_SUBDIRS\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
-syn region automakeNoSubst start="^[a-zA-Z0-9_]*_SOURCES\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
-syn match automakeBadSubst  "@\([a-zA-Z0-9_]*@\=\)\=" contained
+syn region automakeNoSubst start="^EXTRA_\w*\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
+syn region automakeNoSubst start="^DIST_SUBDIRS\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
+syn region automakeNoSubst start="^\w*_SOURCES\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
+syn match automakeBadSubst  "@\(\w*@\=\)\=" contained
 
 syn region  automakeMakeDString start=+"+  skip=+\\"+  end=+"+  contains=makeIdent,automakeSubstitution
 syn region  automakeMakeSString start=+'+  skip=+\\'+  end=+'+  contains=makeIdent,automakeSubstitution
diff -Naur vim73.orig/runtime/syntax/awk.vim vim73/runtime/syntax/awk.vim
--- vim73.orig/runtime/syntax/awk.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/awk.vim	2013-08-04 19:09:09.210614736 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	awk, nawk, gawk, mawk
-" Maintainer:	Antonio Colombo <azc10@yahoo.com>
-" Last Change:	2005 Mar 16
+" Maintainer:	Antonio Colombo <azc100@gmail.com>
+" Last Change:	2012 May 18
 
 " AWK  ref.  is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger
 " The AWK Programming Language, Addison-Wesley, 1988
@@ -25,6 +25,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " A bunch of useful Awk keywords
 " AWK  ref. p. 188
 syn keyword awkStatement	break continue delete exit
@@ -87,7 +90,7 @@
 
 " String and Character constants
 " Highlight special characters (those which have a backslash) differently
-syn region  awkString	start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=awkSpecialCharacter,awkSpecialPrintf
+syn region  awkString	start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=@Spell,awkSpecialCharacter,awkSpecialPrintf
 syn match   awkSpecialCharacter contained "\\."
 
 " Some of these combinations may seem weird, but they work.
@@ -129,7 +132,7 @@
 " Put this above those to override them.
 " Put this in a 'match "\<printf\=\>.*;\="' to make it not override
 " less/greater than (most of the time), but it won't work yet because
-" keywords allways have precedence over match & region.
+" keywords always have precedence over match & region.
 " File I/O: (print foo, bar > "filename") & for nawk (getline < "filename")
 "syn match  awkFileIO		contained ">"
 "syn match  awkFileIO		contained "<"
@@ -138,7 +141,7 @@
 syn match  awkSemicolon	";"
 syn match  awkComma		","
 
-syn match  awkComment	"#.*" contains=awkTodo
+syn match  awkComment	"#.*" contains=@Spell,awkTodo
 
 syn match  awkLineSkip	"\\$"
 
@@ -155,7 +158,7 @@
 
 " 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 highlightling yet
+" For version 5.8 and later: only when an item doesn't have highlighting yet
 if version >= 508 || !exists("did_awk_syn_inits")
   if version < 508
     let did_awk_syn_inits = 1
@@ -213,4 +216,7 @@
 
 let b:current_syntax = "awk"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/ayacc.vim vim73/runtime/syntax/ayacc.vim
--- vim73.orig/runtime/syntax/ayacc.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/ayacc.vim	2013-08-04 19:09:09.210614736 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	AYacc
 " Maintainer:	Mathieu Clabaut <mathieu.clabaut@free.fr>
-" LastChange:	02 May 2001
+" LastChange:	2011 Dec 25
 " Original:	Yacc, maintained by Dr. Charles E. Campbell, Jr.
 " Comment:	     Replaced sourcing c.vim file by ada.vim and rename yacc*
 "		in ayacc*
@@ -22,6 +22,9 @@
    unlet b:current_syntax
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Clusters
 syn cluster	ayaccActionGroup	contains=ayaccDelim,cInParen,cTodo,cIncluded,ayaccDelim,ayaccCurlyError,ayaccUnionCurly,ayaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError
 syn cluster	ayaccUnionGroup	contains=ayaccKey,cComment,ayaccCurly,cType,cStructure,cStorageClass,ayaccUnionCurly
@@ -83,4 +86,6 @@
 
 let b:current_syntax = "ayacc"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=15
diff -Naur vim73.orig/runtime/syntax/basic.vim vim73/runtime/syntax/basic.vim
--- vim73.orig/runtime/syntax/basic.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/basic.vim	2013-08-04 19:09:09.213948059 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	BASIC
 " Maintainer:	Allan Kelly <allan@fruitloaf.co.uk>
-" Last Change:	Tue Sep 14 14:24:23 BST 1999
+" Last Change:  2011 Dec 25 by Thilo Six
 
 " First version based on Micro$soft QBASIC circa 1989, as documented in
 " 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
@@ -16,6 +16,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " A bunch of useful BASIC keywords
 syn keyword basicStatement	BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave
 syn keyword basicStatement	CALL call Call ABSOLUTE absolute Absolute
@@ -171,4 +174,6 @@
 
 let b:current_syntax = "basic"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/bc.vim vim73/runtime/syntax/bc.vim
--- vim73.orig/runtime/syntax/bc.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/bc.vim	2013-08-04 19:09:09.213948059 +0000
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:	bc - An arbitrary precision calculator language
 " Maintainer:	Vladimir Scholtz <vlado@gjh.sk>
-" Last change:	2001 Sep 02
+" Last change:	2012 Jun 01
+" 		(Dominique Pelle added @Spell)
 " Available on:	www.gjh.sk/~vlado/bc.vim
 
 " For version 5.x: Clear all syntax items
@@ -31,14 +32,14 @@
 syn match bcIdentifier		"[a-z_][a-z0-9_]*"
 
 " String
- syn match bcString		"\"[^"]*\""
+ syn match bcString		"\"[^"]*\"" contains=@Spell
 
 " Number
 syn match bcNumber		"[0-9]\+"
 
 " Comment
-syn match bcComment		"\#.*"
-syn region bcComment		start="/\*" end="\*/"
+syn match bcComment		"\#.*" contains=@Spell
+syn region bcComment		start="/\*" end="\*/" contains=@Spell
 
 " Parent ()
 syn cluster bcAll contains=bcList,bcIdentifier,bcNumber,bcKeyword,bcType,bcConstant,bcString,bcParentError
diff -Naur vim73.orig/runtime/syntax/bib.vim vim73/runtime/syntax/bib.vim
--- vim73.orig/runtime/syntax/bib.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/bib.vim	2013-08-04 19:09:09.217281382 +0000
@@ -2,7 +2,7 @@
 " Language:	BibTeX (bibliographic database format for (La)TeX)
 " Maintainer:	Bernd Feige <Bernd.Feige@gmx.net>
 " Filenames:	*.bib
-" Last Change:	Aug 02, 2005
+" Last Change:	2011 Dec 25
 
 " Thanks to those who pointed out problems with this file or supplied fixes!
 
@@ -16,6 +16,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Ignore case
 syn case ignore
 
@@ -34,6 +37,8 @@
 syn keyword bibEntryKw contained	school series title type volume year
 " Non-standard:
 syn keyword bibNSEntryKw contained	abstract isbn issn keywords url
+" AMS mref http://www.ams.org/mref
+syn keyword bibNSEntryKw contained	mrclass mrnumber mrreviewer fjournal coden
 
 " Clusters
 " ========
@@ -55,11 +60,11 @@
 " Actually, 5.8 <= Vim < 6.0 would ignore the `fold' keyword anyway, but Vim<5.8 would produce
 " an error, so we explicitly distinguish versions with and without folding functionality:
 if version < 600
-  syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment
+  syn region bibEntry start=/@\S\+\s*[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment
 else
-  syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment
+  syn region bibEntry start=/@\S\+\s*[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment
 endif
-syn region bibComment2 start=/@Comment[{(]/ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
+syn region bibComment2 start=/@Comment\s*[{(]/ end=/^\s*[})]/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
 
 " Synchronization
 " ===============
@@ -91,3 +96,6 @@
 endif
 
 let b:current_syntax = "bib"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/bindzone.vim vim73/runtime/syntax/bindzone.vim
--- vim73.orig/runtime/syntax/bindzone.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/bindzone.vim	2013-08-04 19:09:09.220614706 +0000
@@ -1,13 +1,13 @@
 " Vim syntax file
-" Language:     BIND zone files (RFC1035)
+" Language:     BIND zone files (RFC 1035)
 " Maintainer:   Julian Mehnle <julian@mehnle.net>
 " URL:          http://www.mehnle.net/source/odds+ends/vim/syntax/
-" Last Change:  Thu 2006-04-20 12:30:45 UTC
+" Last Change:  Thu 2011-07-16 20:42:00 UTC
 " 
 " Based on an earlier version by Вячеслав Горбанев (Slava Gorbanev), with
 " heavy modifications.
 " 
-" $Id: bindzone.vim,v 1.2 2006/04/20 22:06:21 vimboss Exp $
+" $Id: bindzone.vim 12 2011-07-16 21:09:57Z julian $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -23,7 +23,7 @@
 syn region      zoneRRecord     start=/^/ end=/$/ contains=zoneOwnerName,zoneSpecial,zoneTTL,zoneClass,zoneRRType,zoneComment,zoneUnknown
 
 syn match       zoneDirective   /^\$ORIGIN\s\+/   nextgroup=zoneOrigin,zoneUnknown
-syn match       zoneDirective   /^\$TTL\s\+/      nextgroup=zoneNumber,zoneUnknown
+syn match       zoneDirective   /^\$TTL\s\+/      nextgroup=zoneTTL,zoneUnknown
 syn match       zoneDirective   /^\$INCLUDE\s\+/  nextgroup=zoneText,zoneUnknown
 syn match       zoneDirective   /^\$GENERATE\s/
 
@@ -34,9 +34,9 @@
 syn match       zoneDomain      contained  /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\|$\)\@=/
 
 syn match       zoneSpecial     contained /^[@*.]\s/
-syn match       zoneTTL         contained /\<\d[0-9HhWwDd]*\>/  nextgroup=zoneClass,zoneRRType skipwhite
-syn keyword     zoneClass       contained IN CHAOS              nextgroup=zoneRRType,zoneTTL   skipwhite
-syn keyword     zoneRRType      contained A AAAA CNAME HINFO MX NS PTR SOA SRV TXT nextgroup=zoneRData skipwhite
+syn match       zoneTTL         contained /\s\@<=\d[0-9WwDdHhMmSs]*\(\s\|$\)\@=/ nextgroup=zoneClass,zoneRRType skipwhite
+syn keyword     zoneClass       contained IN CHAOS nextgroup=zoneRRType,zoneTTL skipwhite
+syn keyword     zoneRRType      contained A AAAA CNAME DNAME HINFO MX NS PTR SOA SRV TXT SPF nextgroup=zoneRData skipwhite
 syn match       zoneRData       contained /[^;]*/ contains=zoneDomain,zoneIPAddr,zoneIP6Addr,zoneText,zoneNumber,zoneParen,zoneUnknown
 
 syn match       zoneIPAddr      contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/
@@ -66,7 +66,7 @@
 syn match       zoneSerial      contained /\<[0-9]\{9,10}\(\s\|;\|$\)\@=/
 
 syn match       zoneErrParen    /)/
-syn region      zoneParen       contained start="(" end=")" contains=zoneSerial,zoneNumber,zoneComment
+syn region      zoneParen       contained start="(" end=")" contains=zoneSerial,zoneTTL,zoneNumber,zoneComment
 syn match       zoneComment     /;.*/
 
 " Define the default highlighting.
diff -Naur vim73.orig/runtime/syntax/blank.vim vim73/runtime/syntax/blank.vim
--- vim73.orig/runtime/syntax/blank.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/blank.vim	2013-08-04 19:09:09.220614706 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     Blank 1.4.1
 " Maintainer:   Rafal M. Sulejman <unefunge@friko2.onet.pl>
-" Last change:  21 Jul 2000
+" Last change:  2011 Dec 28 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 " Blank instructions
@@ -43,4 +46,7 @@
 endif
 
 let b:current_syntax = "blank"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/bzr.vim vim73/runtime/syntax/bzr.vim
--- vim73.orig/runtime/syntax/bzr.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/bzr.vim	2013-08-04 19:09:09.223948029 +0000
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:     Bazaar (bzr) commit file
-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
-" URL:          http://www.hlabs.spb.ru/vim/bzr.vim
-" Last Change:  2009-01-27
+" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
+" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/bzr.vim
+" Last Change:  2012-02-11
 " Filenames:    bzr_log.*
-" Version:      1.2.1
+" Version:      1.2.2
 "
 " Thanks:
 "
diff -Naur vim73.orig/runtime/syntax/c.vim vim73/runtime/syntax/c.vim
--- vim73.orig/runtime/syntax/c.vim	2010-08-13 09:17:32.000000000 +0000
+++ vim73/runtime/syntax/c.vim	2013-08-04 19:09:09.223948029 +0000
@@ -1,13 +1,18 @@
 " Vim syntax file
 " Language:	C
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2009 Nov 17
+" Last Change:	2013 Jul 05
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
+let s:ft = matchstr(&ft, '^\([^.]\)\+')
+
 " A bunch of useful C keywords
 syn keyword	cStatement	goto break return continue asm
 syn keyword	cLabel		case default
@@ -18,7 +23,7 @@
 
 " It's easy to accidentally add a space after a backslash that was intended
 " for line continuation.  Some compilers allow it, which makes it
-" unpredicatable and should be avoided.
+" unpredictable and should be avoided.
 syn match	cBadContinuation contained "\\\s\+$"
 
 " cCommentGroup allows adding matches for special things in comments
@@ -31,9 +36,15 @@
   syn match	cSpecial	display contained "\\\(u\x\{4}\|U\x\{8}\)"
 endif
 if exists("c_no_cformat")
-  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell
+  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
   " cCppString: same as cString, but ends at end of line
-  syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell
+  if !exists("cpp_no_cpp11") " ISO C++11
+    syn region cCppString	start=+\(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
+  else
+    syn region cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
+  endif
+  syn region	cCppOut2	contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
+  syn region	cCppSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
 else
   if !exists("c_no_c99") " ISO C99
     syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
@@ -41,7 +52,7 @@
     syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
   endif
   syn match	cFormat		display "%%" contained
-  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell
+  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
   " cCppString: same as cString, but ends at end of line
   syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
 endif
@@ -59,6 +70,25 @@
 syn match	cSpecialCharacter display "'\\x\x\{1,2}'"
 syn match	cSpecialCharacter display "L'\\x\x\+'"
 
+if !exists("c_no_c11") " ISO C11
+  if exists("c_no_cformat")
+    syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
+  else
+    syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
+  endif
+  syn match	cCharacter	"[Uu]'[^\\]'"
+  syn match	cCharacter	"[Uu]'[^']*'" contains=cSpecial
+  if exists("c_gnu")
+    syn match	cSpecialError	"[Uu]'\\[^'\"?\\abefnrtv]'"
+    syn match	cSpecialCharacter "[Uu]'\\['\"?\\abefnrtv]'"
+  else
+    syn match	cSpecialError	"[Uu]'\\[^'\"?\\abfnrtv]'"
+    syn match	cSpecialCharacter "[Uu]'\\['\"?\\abfnrtv]'"
+  endif
+  syn match	cSpecialCharacter display "[Uu]'\\\o\{1,3}'"
+  syn match	cSpecialCharacter display "[Uu]'\\x\x\+'"
+endif
+
 "when wanted, highlight trailing white space
 if exists("c_space_errors")
   if !exists("c_no_trail_space_error")
@@ -71,40 +101,69 @@
 
 " This should be before cErrInParen to avoid problems with #define ({ xxx })
 if exists("c_curly_error")
-  syntax match cCurlyError "}"
-  syntax region	cBlock		start="{" end="}" contains=ALLBUT,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
+  syn match cCurlyError "}"
+  syn region	cBlock		start="{" end="}" contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
 else
-  syntax region	cBlock		start="{" end="}" transparent fold
+  syn region	cBlock		start="{" end="}" transparent fold
 endif
 
 "catch errors caused by wrong parenthesis and brackets
 " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
 " But avoid matching <::.
-syn cluster	cParenGroup	contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
+syn cluster	cParenGroup	contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
 if exists("c_no_curly_error")
-  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
-  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
-  syn match	cParenError	display ")"
-  syn match	cErrInParen	display contained "^[{}]\|^<%\|^%>"
+  if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
+    syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+    syn match	cParenError	display ")"
+    syn match	cErrInParen	display contained "^^<%\|^%>"
+  else
+    syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+    syn match	cParenError	display ")"
+    syn match	cErrInParen	display contained "^[{}]\|^<%\|^%>"
+  endif
 elseif exists("c_no_bracket_error")
-  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
-  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
-  syn match	cParenError	display ")"
-  syn match	cErrInParen	display contained "[{}]\|<%\|%>"
+  if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
+    syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+    syn match	cParenError	display ")"
+    syn match	cErrInParen	display contained "<%\|%>"
+  else
+    syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+    syn match	cParenError	display ")"
+    syn match	cErrInParen	display contained "[{}]\|<%\|%>"
+  endif
 else
-  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
-  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
-  syn match	cParenError	display "[\])]"
-  syn match	cErrInParen	display contained "[\]{}]\|<%\|%>"
-  syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
+  if s:ft ==# 'cpp' && !exists("cpp_no_cpp11")
+    syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
+    syn match	cParenError	display "[\])]"
+    syn match	cErrInParen	display contained "<%\|%>"
+    syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
+  else
+    syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
+    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
+    syn match	cParenError	display "[\])]"
+    syn match	cErrInParen	display contained "[\]{}]\|<%\|%>"
+    syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
+  endif
   " cCppBracket: same as cParen but ends at end-of-line; used in cDefine
   syn region	cCppBracket	transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
   syn match	cErrInBracket	display contained "[);{}]\|<%\|%>"
 endif
 
+if s:ft ==# 'c' || exists("cpp_no_cpp11")
+  syn region	cBadBlock	keepend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold
+endif
+
 "integer number, or floating point number without a dot and with "f".
 syn case ignore
 syn match	cNumbers	display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal
@@ -140,16 +199,16 @@
   " need to use a special type of cString: cCommentString, which also ends on
   " "*/", and sees a "*" at the start of the line as comment again.
   " Unfortunately this doesn't very well work for // type of comments :-(
-  syntax match	cCommentSkip	contained "^\s*\*\($\|\s\+\)"
-  syntax region cCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
-  syntax region cComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
-  syntax region  cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
+  syn match	cCommentSkip	contained "^\s*\*\($\|\s\+\)"
+  syn region cCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
+  syn region cComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
+  syn region  cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
   if exists("c_no_comment_fold")
     " Use "extend" here to have preprocessor lines not terminate halfway a
     " comment.
-    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
+    syn region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
   else
-    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
+    syn region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
   endif
 else
   syn region	cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell
@@ -160,8 +219,8 @@
   endif
 endif
 " keep a // comment separately, it terminates a preproc. conditional
-syntax match	cCommentError	display "\*/"
-syntax match	cCommentStartError display "/\*"me=e-1 contained
+syn match	cCommentError	display "\*/"
+syn match	cCommentStartError display "/\*"me=e-1 contained
 
 syn keyword	cOperator	sizeof
 if exists("c_gnu")
@@ -176,7 +235,7 @@
   syn keyword   cType		mbstate_t wctrans_t wint_t wctype_t
 endif
 if !exists("c_no_c99") " ISO C99
-  syn keyword	cType		bool complex
+  syn keyword	cType		_Bool bool _Complex complex _Imaginary imaginary
   syn keyword	cType		int8_t int16_t int32_t int64_t
   syn keyword	cType		uint8_t uint16_t uint32_t uint64_t
   syn keyword	cType		int_least8_t int_least16_t int_least32_t int_least64_t
@@ -198,6 +257,16 @@
 if !exists("c_no_c99")
   syn keyword	cStorageClass	inline restrict
 endif
+if !exists("c_no_c11")
+  syn keyword	cStorageClass	_Alignas alignas
+  syn keyword	cOperator	_Alignof alignof
+  syn keyword	cStorageClass	_Atomic
+  syn keyword	cOperator	_Generic
+  syn keyword	cStorageClass	_Noreturn noreturn
+  syn keyword	cOperator	_Static_assert static_assert
+  syn keyword	cStorageClass	_Thread_local thread_local
+  syn keyword   cType		char16_t char32_t
+endif
 
 if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
   if exists("c_gnu")
@@ -270,28 +339,42 @@
 endif
 
 " Accept %: for # (C99)
-syn region      cPreCondit      start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$"  keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
-syn match	cPreCondit	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
+syn region	cPreCondit	start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
+syn match	cPreConditMatch	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
 if !exists("c_no_if0")
+  syn cluster	cCppOutInGroup	contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
+  syn region	cCppOutWrapper	start="^\s*\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold
+  syn region	cCppOutIf	contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse
   if !exists("c_no_if0_fold")
-    syn region	cCppOut		start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 fold
+    syn region	cCppOutIf2	contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold
   else
-    syn region	cCppOut		start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2
+    syn region	cCppOutIf2	contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
   endif
-  syn region	cCppOut2	contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
-  syn region	cCppSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
+  syn region	cCppOutElse	contained matchgroup=cCppOutWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit
+  syn region	cCppInWrapper	start="^\s*\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold
+  syn region	cCppInIf	contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit
+  if !exists("c_no_if0_fold")
+    syn region	cCppInElse	contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold
+  else
+    syn region	cCppInElse	contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2
+  endif
+  syn region	cCppInElse2	contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
+  syn region	cCppOutSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip
+  syn region	cCppInSkip	contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc
 endif
 syn region	cIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
 syn match	cIncluded	display contained "<[^>]*>"
 syn match	cInclude	display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
 "syn match cLineSkip	"\\$"
-syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti
+syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti,cBadBlock
 syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
 syn region	cPreProc	start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
 
 " Highlight User Labels
-syn cluster	cMultiGroup	contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
-syn region	cMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
+syn cluster	cMultiGroup	contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
+if s:ft ==# 'c' || exists("cpp_no_cpp11")
+  syn region	cMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
+endif
 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
 syn cluster	cLabelGroup	contains=cUserLabel
 syn match	cUserCont	display "^\s*\I\i*\s*:$" contains=@cLabelGroup
@@ -354,6 +437,9 @@
 hi def link cIncluded		cString
 hi def link cError		Error
 hi def link cStatement		Statement
+hi def link cCppInWrapper	cCppOutWrapper
+hi def link cCppOutWrapper	cPreCondit
+hi def link cPreConditMatch	cPreCondit
 hi def link cPreCondit		PreCondit
 hi def link cType		Type
 hi def link cConstant		Constant
@@ -365,10 +451,16 @@
 hi def link cSpecial		SpecialChar
 hi def link cTodo		Todo
 hi def link cBadContinuation	Error
-hi def link cCppSkip		cCppOut
-hi def link cCppOut2		cCppOut
+hi def link cCppOutSkip		cCppOutIf2
+hi def link cCppInElse2		cCppOutIf2
+hi def link cCppOutIf2		cCppOut2  " Old syntax group for #if 0 body
+hi def link cCppOut2		cCppOut  " Old syntax group for #if of #if 0
 hi def link cCppOut		Comment
 
 let b:current_syntax = "c"
 
+unlet s:ft
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/cfg.vim vim73/runtime/syntax/cfg.vim
--- vim73.orig/runtime/syntax/cfg.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/cfg.vim	2013-08-04 19:09:09.237281322 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Good old CFG files
 " Maintainer:	Igor N. Prischepoff (igor@tyumbit.ru, pri_igor@mail.ru)
-" Last change:	2001 Sep 02
+" Last change:	2012 Aug 11
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -18,7 +18,7 @@
 "Dos Drive:\Path
 syn match CfgDirectory "[a-zA-Z]:\\\p*" contained
 "Parameters
-syn match   CfgParams    ".*="me=e-1 contains=CfgComment
+syn match   CfgParams    ".\{0}="me=e-1 contains=CfgComment
 "... and their values (don't want to highlight '=' sign)
 syn match   CfgValues    "=.*"hs=s+1 contains=CfgDirectory,UncPath,CfgComment,CfgString,CfgOnOff
 
diff -Naur vim73.orig/runtime/syntax/cl.vim vim73/runtime/syntax/cl.vim
--- vim73.orig/runtime/syntax/cl.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/cl.vim	2013-08-04 19:09:09.243947969 +0000
@@ -1,9 +1,14 @@
 " Vim syntax file
-" Language:	cl ("Clever Language" by Multibase, http://www.mbase.com.au)
-" Filename extensions: *.ent, *.eni
-" Maintainer:	Philip Uren <philuSPAX@ieee.org> - Remove SPAX spam block
-" Last update:	Wed Apr 12 08:47:18 EST 2006
-" $Id: cl.vim,v 1.3 2006/04/12 21:43:28 vimboss Exp $
+" Language:		CL
+" 			(pronounced alphabetically: "Cee-El".
+" 			CL stands for Clever Language,
+" 			but the language is CL, not "Clever".
+" 			CL was created by Multibase, http://www.mbase.com.au)
+" Filename extensions:	*.ent
+"			*.eni
+" Maintainer:		Philip Uren	<philuSPAX@ieee.org> Remove SPAX spam block
+" Version:              6
+" Last Change:		Mar 06 2013
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -14,9 +19,9 @@
 endif
 
 if version >= 600
-	setlocal iskeyword=@,48-57,_,-,
+	setlocal iskeyword=@,48-57,_,-
 else
-	set iskeyword=@,48-57,_,-,
+	set iskeyword=@,48-57,_,-
 endif
 
 syn case ignore
@@ -24,12 +29,12 @@
 syn sync lines=300
 
 "If/else/elsif/endif and while/wend mismatch errors
-syn match	clifError		"\<wend\>"
-syn match	clifError		"\<elsif\>"
-syn match	clifError		"\<else\>"
-syn match	clifError		"\<endif\>"
+syn match	clifError	"\<wend\>"
+syn match	clifError	"\<elsif\>"
+syn match	clifError	"\<else\>"
+syn match	clifError	"\<endif\>"
 
-syn match	clSpaceError		"\s\+$"
+syn match	clSpaceError	"\s\+$"
 
 " If and while regions
 syn region	clLoop		transparent matchgroup=clWhile start="\<while\>" matchgroup=clWhile end="\<wend\>" contains=ALLBUT,clBreak,clProcedure
@@ -40,7 +45,7 @@
 syn match	clNeedsWork	contained	"NEED[S]*\s\s*WORK"
 syn keyword	clDebug		contained	debug
 
-syn match	clComment	"#.*$"		contains=clTodo,clNeedsWork
+syn match	clComment	"#.*$"		contains=clTodo,clNeedsWork,@Spell
 syn region	clProcedure	oneline		start="^\s*[{}]" end="$"
 syn match	clInclude	"^\s*include\s.*"
 
@@ -60,8 +65,8 @@
 
 syn match	clNumber	"\<\d\+\(u\=l\=\|lu\|f\)\>"
 
-syn region	clString	matchgroup=clQuote	start=+"+ end=+"+	skip=+\\"+
-syn region	clString	matchgroup=clQuote	start=+'+ end=+'+	skip=+\\'+
+syn region	clString	matchgroup=clQuote	start=+"+ end=+"+	skip=+\\"+ contains=@Spell
+syn region	clString	matchgroup=clQuote	start=+'+ end=+'+	skip=+\\'+ contains=@Spell
 
 syn keyword	clReserved	ERROR EXIT INTERRUPT LOCKED LREPLY MODE MCOL MLINE MREPLY NULL REPLY V1 V2 V3 V4 V5 V6 V7 V8 V9 ZERO BYPASS GOING_BACK AAUTO ABORT ABORT ALIGN BIGE CONVERT FNUM GOBACK HANGUP JUSTIFY NEXIT OUTPUT RAUTO RAWDISPLAY RAWPRINT REPEAT SKIP TAB TRIM LCOUNT PCOUNT PLINES SLINES SCOLS MATCH LMATCH
 
diff -Naur vim73.orig/runtime/syntax/clean.vim vim73/runtime/syntax/clean.vim
--- vim73.orig/runtime/syntax/clean.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/clean.vim	2013-08-04 19:09:09.247281292 +0000
@@ -2,7 +2,7 @@
 " Language:		Clean
 " Author:		Pieter van Engelen <pietere@sci.kun.nl>
 " Co-Author:	Arthur van Leeuwen <arthurvl@sci.kun.nl>
-" Last Change:	Fri Sep 29 11:35:34 CEST 2000
+" Last Change:	2013 Jun 19 by Jurriën Stutterheim
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,10 +12,12 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Some Clean-keywords
 syn keyword cleanConditional if case
 syn keyword cleanLabel let! with where in of
-syn keyword cleanInclude from import
 syn keyword cleanSpecial Start
 syn keyword cleanKeyword infixl infixr infix
 syn keyword cleanBasicType Int Real Char Bool String
@@ -23,6 +25,10 @@
 syn keyword cleanModuleSystem module implementation definition system
 syn keyword cleanTypeClass class instance export
 
+" Import highlighting
+syn region cleanIncludeRegion start="^\s*\(from\|import\|\s\+\(as\|qualified\)\)" end="\n" contains=cleanIncludeKeyword keepend
+syn keyword cleanIncludeKeyword contained from import as qualified
+
 " To do some Denotation Highlighting
 syn keyword cleanBoolDenot True False
 syn region  cleanStringDenot start=+"+ end=+"+
@@ -71,7 +77,7 @@
    HiLink cleanLabel		Label
    HiLink cleanKeyword      Keyword
    " Generic Preprocessing
-   HiLink cleanInclude      Include
+   HiLink cleanIncludeKeyword      Include
    HiLink cleanModuleSystem PreProc
    " Type
    HiLink cleanBasicType    Type
@@ -91,4 +97,6 @@
 
 let b:current_syntax = "clean"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=4
diff -Naur vim73.orig/runtime/syntax/clipper.vim vim73/runtime/syntax/clipper.vim
--- vim73.orig/runtime/syntax/clipper.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/clipper.vim	2013-08-04 19:09:09.247281292 +0000
@@ -2,7 +2,7 @@
 " Language:	Clipper 5.2 & FlagShip
 " Maintainer:	C R Zamana <zamana@zip.net>
 " Some things based on c.vim by Bram Moolenaar and pascal.vim by Mario Eusebio
-" Last Change:	Sat Sep 09 2000
+" Last Change:	2011 Dec 29 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Exceptions for my "Very Own" (TM) user variables naming style.
 " If you don't like this, comment it
 syn match  clipperUserVariable	"\<[a,b,c,d,l,n,o,u,x][A-Z][A-Za-z0-9_]*\>"
@@ -140,4 +143,6 @@
 
 let b:current_syntax = "clipper"
 
-" vim: ts=4
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim: ts=8
diff -Naur vim73.orig/runtime/syntax/clojure.vim vim73/runtime/syntax/clojure.vim
--- vim73.orig/runtime/syntax/clojure.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/clojure.vim	2013-08-04 19:09:09.250614616 +0000
@@ -0,0 +1,134 @@
+" Vim syntax file
+" Language:     Clojure
+" Authors:      Toralf Wittner <toralf.wittner@gmail.com>
+"               modified by Meikel Brandmeyer <mb@kotka.de>
+" URL:          http://kotka.de/projects/clojure/vimclojure.html
+"
+" Maintainer:   Sung Pae <self@sungpae.com>
+" URL:          https://github.com/guns/vim-clojure-static
+" License:      Same as Vim
+" Last Change:  05 February 2013
+
+if version < 600
+    syntax clear
+elseif exists("b:current_syntax")
+    finish
+endif
+
+setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$
+
+" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-002/vim_clojure_static.clj
+" Clojure 1.5.0-RC6
+syntax keyword clojureConstant nil
+syntax keyword clojureBoolean false true
+syntax keyword clojureSpecial . catch clojure.core/fn clojure.core/let clojure.core/loop def do finally fn if let loop monitor-enter monitor-exit new quote recur set! throw try var
+syntax keyword clojureException catch finally throw try
+syntax keyword clojureCond case clojure.core/case clojure.core/cond clojure.core/cond-> clojure.core/cond->> clojure.core/condp clojure.core/if-let clojure.core/if-not clojure.core/when clojure.core/when-first clojure.core/when-let clojure.core/when-not cond cond-> cond->> condp if-let if-not when when-first when-let when-not
+syntax keyword clojureRepeat clojure.core/doall clojure.core/dorun clojure.core/doseq clojure.core/dotimes clojure.core/while doall dorun doseq dotimes while
+syntax keyword clojureDefine clojure.core/definline clojure.core/definterface clojure.core/defmacro clojure.core/defmethod clojure.core/defmulti clojure.core/defn clojure.core/defn- clojure.core/defonce clojure.core/defprotocol clojure.core/defrecord clojure.core/defstruct clojure.core/deftype definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol defrecord defstruct deftype
+syntax keyword clojureMacro -> ->> .. amap and areduce as-> assert binding bound-fn clojure.core/-> clojure.core/->> clojure.core/.. clojure.core/amap clojure.core/and clojure.core/areduce clojure.core/as-> clojure.core/assert clojure.core/binding clojure.core/bound-fn clojure.core/comment clojure.core/declare clojure.core/delay clojure.core/dosync clojure.core/doto clojure.core/extend-protocol clojure.core/extend-type clojure.core/for clojure.core/future clojure.core/gen-class clojure.core/gen-interface clojure.core/import clojure.core/io! clojure.core/lazy-cat clojure.core/lazy-seq clojure.core/letfn clojure.core/locking clojure.core/memfn clojure.core/ns clojure.core/or clojure.core/proxy clojure.core/proxy-super clojure.core/pvalues clojure.core/refer-clojure clojure.core/reify clojure.core/some-> clojure.core/some->> clojure.core/sync clojure.core/time clojure.core/with-bindings clojure.core/with-in-str clojure.core/with-loading-context clojure.core/with-local-vars clojure.core/with-open clojure.core/with-out-str clojure.core/with-precision clojure.core/with-redefs comment declare delay dosync doto extend-protocol extend-type for future gen-class gen-interface import io! lazy-cat lazy-seq letfn locking memfn ns or proxy proxy-super pvalues refer-clojure reify some-> some->> sync time with-bindings with-in-str with-loading-context with-local-vars with-open with-out-str with-precision with-redefs
+syntax keyword clojureFunc * *' + +' - -' ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods / < <= = == > >= accessor aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! alter-var-root ancestors apply array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint biginteger bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn* bound? butlast byte byte-array bytes cast char char-array char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version clojure.core/* clojure.core/*' clojure.core/+ clojure.core/+' clojure.core/- clojure.core/-' clojure.core/->ArrayChunk clojure.core/->Vec clojure.core/->VecNode clojure.core/->VecSeq clojure.core/-cache-protocol-fn clojure.core/-reset-methods clojure.core// clojure.core/< clojure.core/<= clojure.core/= clojure.core/== clojure.core/> clojure.core/>= clojure.core/accessor clojure.core/aclone clojure.core/add-classpath clojure.core/add-watch clojure.core/agent clojure.core/agent-error clojure.core/agent-errors clojure.core/aget clojure.core/alength clojure.core/alias clojure.core/all-ns clojure.core/alter clojure.core/alter-meta! clojure.core/alter-var-root clojure.core/ancestors clojure.core/apply clojure.core/array-map clojure.core/aset clojure.core/aset-boolean clojure.core/aset-byte clojure.core/aset-char clojure.core/aset-double clojure.core/aset-float clojure.core/aset-int clojure.core/aset-long clojure.core/aset-short clojure.core/assoc clojure.core/assoc! clojure.core/assoc-in clojure.core/associative? clojure.core/atom clojure.core/await clojure.core/await-for clojure.core/await1 clojure.core/bases clojure.core/bean clojure.core/bigdec clojure.core/bigint clojure.core/biginteger clojure.core/bit-and clojure.core/bit-and-not clojure.core/bit-clear clojure.core/bit-flip clojure.core/bit-not clojure.core/bit-or clojure.core/bit-set clojure.core/bit-shift-left clojure.core/bit-shift-right clojure.core/bit-test clojure.core/bit-xor clojure.core/boolean clojure.core/boolean-array clojure.core/booleans clojure.core/bound-fn* clojure.core/bound? clojure.core/butlast clojure.core/byte clojure.core/byte-array clojure.core/bytes clojure.core/cast clojure.core/char clojure.core/char-array clojure.core/char? clojure.core/chars clojure.core/chunk clojure.core/chunk-append clojure.core/chunk-buffer clojure.core/chunk-cons clojure.core/chunk-first clojure.core/chunk-next clojure.core/chunk-rest clojure.core/chunked-seq? clojure.core/class clojure.core/class? clojure.core/clear-agent-errors clojure.core/clojure-version clojure.core/coll? clojure.core/commute clojure.core/comp clojure.core/comparator clojure.core/compare clojure.core/compare-and-set! clojure.core/compile clojure.core/complement clojure.core/concat clojure.core/conj clojure.core/conj! clojure.core/cons clojure.core/constantly clojure.core/construct-proxy clojure.core/contains? clojure.core/count clojure.core/counted? clojure.core/create-ns clojure.core/create-struct clojure.core/cycle clojure.core/dec clojure.core/dec' clojure.core/decimal? clojure.core/delay? clojure.core/deliver clojure.core/denominator clojure.core/deref clojure.core/derive clojure.core/descendants clojure.core/destructure clojure.core/disj clojure.core/disj! clojure.core/dissoc clojure.core/dissoc! clojure.core/distinct clojure.core/distinct? clojure.core/double clojure.core/double-array clojure.core/doubles clojure.core/drop clojure.core/drop-last clojure.core/drop-while clojure.core/empty clojure.core/empty? clojure.core/ensure clojure.core/enumeration-seq clojure.core/error-handler clojure.core/error-mode clojure.core/eval clojure.core/even? clojure.core/every-pred clojure.core/every? clojure.core/ex-data clojure.core/ex-info clojure.core/extend clojure.core/extenders clojure.core/extends? clojure.core/false? clojure.core/ffirst clojure.core/file-seq clojure.core/filter clojure.core/filterv clojure.core/find clojure.core/find-keyword clojure.core/find-ns clojure.core/find-protocol-impl clojure.core/find-protocol-method clojure.core/find-var clojure.core/first clojure.core/flatten clojure.core/float clojure.core/float-array clojure.core/float? clojure.core/floats clojure.core/flush clojure.core/fn? clojure.core/fnext clojure.core/fnil clojure.core/force clojure.core/format clojure.core/frequencies clojure.core/future-call clojure.core/future-cancel clojure.core/future-cancelled? clojure.core/future-done? clojure.core/future? clojure.core/gensym clojure.core/get clojure.core/get-in clojure.core/get-method clojure.core/get-proxy-class clojure.core/get-thread-bindings clojure.core/get-validator clojure.core/group-by clojure.core/hash clojure.core/hash-combine clojure.core/hash-map clojure.core/hash-set clojure.core/identical? clojure.core/identity clojure.core/ifn? clojure.core/in-ns clojure.core/inc clojure.core/inc' clojure.core/init-proxy clojure.core/instance? clojure.core/int clojure.core/int-array clojure.core/integer? clojure.core/interleave clojure.core/intern clojure.core/interpose clojure.core/into clojure.core/into-array clojure.core/ints clojure.core/isa? clojure.core/iterate clojure.core/iterator-seq clojure.core/juxt clojure.core/keep clojure.core/keep-indexed clojure.core/key clojure.core/keys clojure.core/keyword clojure.core/keyword? clojure.core/last clojure.core/line-seq clojure.core/list clojure.core/list* clojure.core/list? clojure.core/load clojure.core/load-file clojure.core/load-reader clojure.core/load-string clojure.core/loaded-libs clojure.core/long clojure.core/long-array clojure.core/longs clojure.core/macroexpand clojure.core/macroexpand-1 clojure.core/make-array clojure.core/make-hierarchy clojure.core/map clojure.core/map-indexed clojure.core/map? clojure.core/mapcat clojure.core/mapv clojure.core/max clojure.core/max-key clojure.core/memoize clojure.core/merge clojure.core/merge-with clojure.core/meta clojure.core/method-sig clojure.core/methods clojure.core/min clojure.core/min-key clojure.core/mod clojure.core/munge clojure.core/name clojure.core/namespace clojure.core/namespace-munge clojure.core/neg? clojure.core/newline clojure.core/next clojure.core/nfirst clojure.core/nil? clojure.core/nnext clojure.core/not clojure.core/not-any? clojure.core/not-empty clojure.core/not-every? clojure.core/not= clojure.core/ns-aliases clojure.core/ns-imports clojure.core/ns-interns clojure.core/ns-map clojure.core/ns-name clojure.core/ns-publics clojure.core/ns-refers clojure.core/ns-resolve clojure.core/ns-unalias clojure.core/ns-unmap clojure.core/nth clojure.core/nthnext clojure.core/nthrest clojure.core/num clojure.core/number? clojure.core/numerator clojure.core/object-array clojure.core/odd? clojure.core/parents clojure.core/partial clojure.core/partition clojure.core/partition-all clojure.core/partition-by clojure.core/pcalls clojure.core/peek clojure.core/persistent! clojure.core/pmap clojure.core/pop clojure.core/pop! clojure.core/pop-thread-bindings clojure.core/pos? clojure.core/pr clojure.core/pr-str clojure.core/prefer-method clojure.core/prefers clojure.core/print clojure.core/print-ctor clojure.core/print-simple clojure.core/print-str clojure.core/printf clojure.core/println clojure.core/println-str clojure.core/prn clojure.core/prn-str clojure.core/promise clojure.core/proxy-call-with-super clojure.core/proxy-mappings clojure.core/proxy-name clojure.core/push-thread-bindings clojure.core/quot clojure.core/rand clojure.core/rand-int clojure.core/rand-nth clojure.core/range clojure.core/ratio? clojure.core/rational? clojure.core/rationalize clojure.core/re-find clojure.core/re-groups clojure.core/re-matcher clojure.core/re-matches clojure.core/re-pattern clojure.core/re-seq clojure.core/read clojure.core/read-line clojure.core/read-string clojure.core/realized? clojure.core/reduce clojure.core/reduce-kv clojure.core/reduced clojure.core/reduced? clojure.core/reductions clojure.core/ref clojure.core/ref-history-count clojure.core/ref-max-history clojure.core/ref-min-history clojure.core/ref-set clojure.core/refer clojure.core/release-pending-sends clojure.core/rem clojure.core/remove clojure.core/remove-all-methods clojure.core/remove-method clojure.core/remove-ns clojure.core/remove-watch clojure.core/repeat clojure.core/repeatedly clojure.core/replace clojure.core/replicate clojure.core/require clojure.core/reset! clojure.core/reset-meta! clojure.core/resolve clojure.core/rest clojure.core/restart-agent clojure.core/resultset-seq clojure.core/reverse clojure.core/reversible? clojure.core/rseq clojure.core/rsubseq clojure.core/satisfies? clojure.core/second clojure.core/select-keys clojure.core/send clojure.core/send-off clojure.core/send-via clojure.core/seq clojure.core/seq? clojure.core/seque clojure.core/sequence clojure.core/sequential? clojure.core/set clojure.core/set-agent-send-executor! clojure.core/set-agent-send-off-executor! clojure.core/set-error-handler! clojure.core/set-error-mode! clojure.core/set-validator! clojure.core/set? clojure.core/short clojure.core/short-array clojure.core/shorts clojure.core/shuffle clojure.core/shutdown-agents clojure.core/slurp clojure.core/some clojure.core/some-fn clojure.core/sort clojure.core/sort-by clojure.core/sorted-map clojure.core/sorted-map-by clojure.core/sorted-set clojure.core/sorted-set-by clojure.core/sorted? clojure.core/special-symbol? clojure.core/spit clojure.core/split-at clojure.core/split-with clojure.core/str clojure.core/string? clojure.core/struct clojure.core/struct-map clojure.core/subs clojure.core/subseq clojure.core/subvec clojure.core/supers clojure.core/swap! clojure.core/symbol clojure.core/symbol? clojure.core/take clojure.core/take-last clojure.core/take-nth clojure.core/take-while clojure.core/test clojure.core/the-ns clojure.core/thread-bound? clojure.core/to-array clojure.core/to-array-2d clojure.core/trampoline clojure.core/transient clojure.core/tree-seq clojure.core/true? clojure.core/type clojure.core/unchecked-add clojure.core/unchecked-add-int clojure.core/unchecked-byte clojure.core/unchecked-char clojure.core/unchecked-dec clojure.core/unchecked-dec-int clojure.core/unchecked-divide-int clojure.core/unchecked-double clojure.core/unchecked-float clojure.core/unchecked-inc clojure.core/unchecked-inc-int clojure.core/unchecked-int clojure.core/unchecked-long clojure.core/unchecked-multiply clojure.core/unchecked-multiply-int clojure.core/unchecked-negate clojure.core/unchecked-negate-int clojure.core/unchecked-remainder-int clojure.core/unchecked-short clojure.core/unchecked-subtract clojure.core/unchecked-subtract-int clojure.core/underive clojure.core/update-in clojure.core/update-proxy clojure.core/use clojure.core/val clojure.core/vals clojure.core/var-get clojure.core/var-set clojure.core/var? clojure.core/vary-meta clojure.core/vec clojure.core/vector clojure.core/vector-of clojure.core/vector? clojure.core/with-bindings* clojure.core/with-meta clojure.core/with-redefs-fn clojure.core/xml-seq clojure.core/zero? clojure.core/zipmap coll? commute comp comparator compare compare-and-set! compile complement concat conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? delay? deliver denominator deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info extend extenders extends? false? ffirst file-seq filter filterv find find-keyword find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn? fnext fnil force format frequencies future-call future-cancel future-cancelled? future-done? future? gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash hash-combine hash-map hash-set identical? identity ifn? in-ns inc inc' init-proxy instance? int int-array integer? interleave intern interpose into into-array ints isa? iterate iterator-seq juxt keep keep-indexed key keys keyword keyword? last line-seq list list* list? load load-file load-reader load-string loaded-libs long long-array longs macroexpand macroexpand-1 make-array make-hierarchy map map-indexed map? mapcat mapv max max-key memoize merge merge-with meta method-sig methods min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext nthrest num number? numerator object-array odd? parents partial partition partition-all partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers print print-ctor print-simple print-str printf println println-str prn prn-str promise proxy-call-with-super proxy-mappings proxy-name push-thread-bindings quot rand rand-int rand-nth range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string realized? reduce reduce-kv reduced reduced? reductions ref ref-history-count ref-max-history ref-min-history ref-set refer release-pending-sends rem remove remove-all-methods remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off send-via seq seq? seque sequence sequential? set set-agent-send-executor! set-agent-send-off-executor! set-error-handler! set-error-mode! set-validator! set? short short-array shorts shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol symbol? take take-last take-nth take-while test the-ns thread-bound? to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of vector? with-bindings* with-meta with-redefs-fn xml-seq zero? zipmap
+syntax keyword clojureVariable *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *compiler-options* *data-readers* *default-data-reader-fn* *e *err* *file* *flush-on-newline* *fn-loader* *in* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *read-whitelist* *source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* EMPTY-NODE char-escape-string char-name-string clojure.core/*1 clojure.core/*2 clojure.core/*3 clojure.core/*agent* clojure.core/*allow-unresolved-vars* clojure.core/*assert* clojure.core/*clojure-version* clojure.core/*command-line-args* clojure.core/*compile-files* clojure.core/*compile-path* clojure.core/*compiler-options* clojure.core/*data-readers* clojure.core/*default-data-reader-fn* clojure.core/*e clojure.core/*err* clojure.core/*file* clojure.core/*flush-on-newline* clojure.core/*fn-loader* clojure.core/*in* clojure.core/*math-context* clojure.core/*ns* clojure.core/*out* clojure.core/*print-dup* clojure.core/*print-length* clojure.core/*print-level* clojure.core/*print-meta* clojure.core/*print-readably* clojure.core/*read-eval* clojure.core/*read-whitelist* clojure.core/*source-path* clojure.core/*unchecked-math* clojure.core/*use-context-classloader* clojure.core/*verbose-defrecords* clojure.core/*warn-on-reflection* clojure.core/EMPTY-NODE clojure.core/char-escape-string clojure.core/char-name-string clojure.core/default-data-readers clojure.core/primitives-classnames clojure.core/print-dup clojure.core/print-method clojure.core/unquote clojure.core/unquote-splicing default-data-readers primitives-classnames print-dup print-method unquote unquote-splicing
+
+" Keywords are symbols:
+"   static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^/]].*/)?([\\D&&[^/]][^/]*)");
+" But they:
+"   * Must not end in a : or /
+"   * Must not have two adjacent colons except at the beginning
+"   * Must not contain any reader metacharacters except for ' and #
+syntax match clojureKeyword "\v:{1,2}%([^ \n\r\t()\[\]{}";@^`~\\%/]+/)*[^ \n\r\t()\[\]{}";@^`~\\%/]+:@<!"
+
+syntax region clojureString start=/L\="/ skip=/\\\\\|\\"/ end=/"/
+
+syntax match clojureCharacter "\\."
+syntax match clojureCharacter "\\o[0-7]\{3\}"
+syntax match clojureCharacter "\\u[0-9]\{4\}"
+syntax match clojureCharacter "\\space"
+syntax match clojureCharacter "\\tab"
+syntax match clojureCharacter "\\newline"
+syntax match clojureCharacter "\\return"
+syntax match clojureCharacter "\\backspace"
+syntax match clojureCharacter "\\formfeed"
+
+let s:radixChars = "0123456789abcdefghijklmnopqrstuvwxyz"
+for s:radix in range(2, 36)
+    execute 'syntax match clojureNumber "\c\<-\?' . s:radix . 'r[' . strpart(s:radixChars, 0, s:radix) . ']\+\>"'
+endfor
+unlet! s:radixChars s:radix
+
+syntax match clojureNumber "\<-\=[0-9]\+\(\.[0-9]*\)\=\(M\|\([eE][-+]\?[0-9]\+\)\)\?\>"
+syntax match clojureNumber "\<-\=[0-9]\+N\?\>"
+syntax match clojureNumber "\<-\=0x[0-9a-fA-F]\+\>"
+syntax match clojureNumber "\<-\=[0-9]\+/[0-9]\+\>"
+
+syntax match clojureVarArg "&"
+
+syntax match clojureQuote "'"
+syntax match clojureQuote "`"
+syntax match clojureUnquote "\~"
+syntax match clojureUnquote "\~@"
+syntax match clojureMeta "\^"
+syntax match clojureDeref "@"
+syntax match clojureAnonArg "%\(\d\|&\)\?"
+syntax match clojureDispatch "\v#[\^\'\=\<]?"
+
+syntax region clojureRegexp start=/L\=\#"/ skip=/\\\\\|\\"/ end=/"/
+
+syntax match clojureComment ";.*$" contains=clojureTodo,@Spell
+syntax match clojureComment "#!.*$"
+syntax match clojureComment "#_"
+
+syntax keyword clojureTodo contained FIXME XXX TODO FIXME: XXX: TODO:
+
+syntax region clojureSexp   matchgroup=clojureParen start="("  matchgroup=clojureParen end=")"  contains=TOP,@Spell
+syntax region clojureVector matchgroup=clojureParen start="\[" matchgroup=clojureParen end="\]" contains=TOP,@Spell
+syntax region clojureMap    matchgroup=clojureParen start="{"  matchgroup=clojureParen end="}"  contains=TOP,@Spell
+
+" Highlight superfluous closing parens, brackets and braces.
+syntax match clojureError "]\|}\|)"
+
+syntax sync fromstart
+
+if version >= 600
+    command -nargs=+ HiLink highlight default link <args>
+else
+    command -nargs=+ HiLink highlight link <args>
+endif
+
+HiLink clojureConstant  Constant
+HiLink clojureBoolean   Boolean
+HiLink clojureCharacter Character
+HiLink clojureKeyword   Keyword
+HiLink clojureNumber    Number
+HiLink clojureString    String
+HiLink clojureRegexp    Constant
+
+HiLink clojureVariable  Identifier
+HiLink clojureCond      Conditional
+HiLink clojureDefine    Define
+HiLink clojureException Exception
+HiLink clojureFunc      Function
+HiLink clojureMacro     Macro
+HiLink clojureRepeat    Repeat
+
+HiLink clojureSpecial   Special
+HiLink clojureVarArg    Special
+HiLink clojureQuote     SpecialChar
+HiLink clojureUnquote   SpecialChar
+HiLink clojureMeta      SpecialChar
+HiLink clojureDeref     SpecialChar
+HiLink clojureAnonArg   SpecialChar
+HiLink clojureDispatch  SpecialChar
+
+HiLink clojureComment   Comment
+HiLink clojureTodo      Todo
+
+HiLink clojureError     Error
+
+HiLink clojureParen     Delimiter
+
+delcommand HiLink
+
+let b:current_syntax = "clojure"
+
+" vim:sts=4 sw=4 et:
diff -Naur vim73.orig/runtime/syntax/cmake.vim vim73/runtime/syntax/cmake.vim
--- vim73.orig/runtime/syntax/cmake.vim	2010-06-03 19:56:12.000000000 +0000
+++ vim73/runtime/syntax/cmake.vim	2013-08-04 19:09:09.250614616 +0000
@@ -4,7 +4,8 @@
 " Language:     CMake
 " Author:       Andy Cedilnik <andy.cedilnik@kitware.com>
 " Maintainer:   Karthik Krishnan <karthik.krishnan@kitware.com>
-" Last Change:  $Date: 2008-08-25 14:31:28 $
+" Last Change:  2012 Jun 01
+" 		(Dominique Pelle added @Spell)
 " Version:      $Revision: 1.10 $
 "
 " Licence:      The CMake license applies to this file. See
@@ -18,10 +19,12 @@
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case ignore
 syn match cmakeEscaped /\(\\\\\|\\"\|\\n\|\\t\)/ contained
-syn region cmakeComment start="#" end="$" contains=cmakeTodo
+syn region cmakeComment start="#" end="$" contains=@Spell,cmakeTodo
 syn region cmakeRegistry start=/\[/ end=/]/
             \ contained oneline contains=CONTAINED,cmakeTodo,cmakeEscaped
 syn region cmakeVariableValue start=/\${/ end=/}/
@@ -78,4 +81,7 @@
 
 let b:current_syntax = "cmake"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 "EOF"
diff -Naur vim73.orig/runtime/syntax/cpp.vim vim73/runtime/syntax/cpp.vim
--- vim73.orig/runtime/syntax/cpp.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/cpp.vim	2013-08-04 19:09:09.260614585 +0000
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:	C++
-" Maintainer:	Ken Shan <ccshan@post.harvard.edu>
-" Last Change:	2002 Jul 15
+" Current Maintainer:	vim-jp (https://github.com/vim-jp/cpp-vim)
+" Previous Maintainer:	Ken Shan <ccshan@post.harvard.edu>
+" Last Change:	2012 Jun 14
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -19,7 +20,7 @@
   unlet b:current_syntax
 endif
 
-" C++ extentions
+" C++ extensions
 syn keyword cppStatement	new delete this friend using
 syn keyword cppAccess		public protected private
 syn keyword cppType		inline virtual explicit export bool wchar_t
@@ -30,9 +31,16 @@
 syn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
 syn keyword cppStorageClass	mutable
 syn keyword cppStructure	class typename template namespace
-syn keyword cppNumber		NPOS
 syn keyword cppBoolean		true false
 
+" C++ 11 extensions
+if !exists("cpp_no_cpp11")
+  syn keyword cppType		override final
+  syn keyword cppExceptions	noexcept
+  syn keyword cppStorageClass	constexpr decltype
+  syn keyword cppConstant	nullptr
+endif
+
 " The minimum and maximum operators in GNU C++
 syn match cppMinMax "[<>]?"
 
@@ -52,8 +60,8 @@
   HiLink cppType		Type
   HiLink cppStorageClass	StorageClass
   HiLink cppStructure		Structure
-  HiLink cppNumber		Number
   HiLink cppBoolean		Boolean
+  HiLink cppConstant		Constant
   delcommand HiLink
 endif
 
diff -Naur vim73.orig/runtime/syntax/crontab.vim vim73/runtime/syntax/crontab.vim
--- vim73.orig/runtime/syntax/crontab.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/crontab.vim	2013-08-04 19:09:09.263947909 +0000
@@ -5,8 +5,7 @@
 " License: This file can be redistribued and/or modified under the same terms
 "   as Vim itself.
 " Filenames: /tmp/crontab.* used by "crontab -e"
-" URL: http://trific.ath.cx/Ftp/vim/syntax/crontab.vim
-" Last Change: 2006-04-20
+" Last Change: 2012-05-16
 "
 " crontab line format:
 " Minutes   Hours   Days   Months   Days_of_Week   Commands # comments
@@ -30,7 +29,7 @@
 syntax keyword crontabDow7 contained sun mon tue wed thu fri sat
 
 syntax region crontabCmd start="\S" end="$" skipwhite contained keepend contains=crontabPercent
-syntax match crontabCmnt "^\s*#.*"
+syntax match crontabCmnt "^\s*#.*" contains=@Spell
 syntax match crontabPercent "[^\\]%.*"lc=1 contained
 
 syntax match crontabNick "^\s*@\(reboot\|yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\)\>" nextgroup=crontabCmd skipwhite
diff -Naur vim73.orig/runtime/syntax/csc.vim vim73/runtime/syntax/csc.vim
--- vim73.orig/runtime/syntax/csc.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/csc.vim	2013-08-04 19:09:09.263947909 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: Essbase script
 " Maintainer:	Raul Segura Acevedo <raulseguraaceved@netscape.net>
-" Last change:	2001 Sep 25
+" Last change:	2011 Dec 25 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
 	finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " folds: fix/endfix and comments
 sy	region	EssFold start="\<Fix" end="EndFix" transparent fold
 
@@ -196,4 +199,6 @@
 
 let b:current_syntax = "csc"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/csdl.vim vim73/runtime/syntax/csdl.vim
--- vim73.orig/runtime/syntax/csdl.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/csdl.vim	2013-08-04 19:09:09.267281232 +0000
@@ -0,0 +1,536 @@
+" Vim syntax file
+" Language: Curated Stream Definition Language (CSDL)
+" Maintainer: Jacek Artymiak
+" Latest Revision: 25 February 2013
+
+if exists("b:current_syntax")
+  finish
+endif
+
+setlocal iskeyword=.,@,48-57,_,192-255
+syn case ignore 
+
+syn match csdlKeyword "tag "
+syn match csdlKeyword "stream "
+syn match csdlKeyword "return "
+
+syn keyword csdlOperator contains
+syn match csdlOperator "cs contains"
+syn keyword csdlOperator substr
+syn match csdlOperator "cs substr"
+syn keyword csdlOperator contains_any
+syn match csdlOperator "cs contains_any"
+syn keyword csdlOperator any
+syn match csdlOperator "cs any"
+syn keyword csdlOperator contains_near
+syn match csdlOperator "cs contains_near"
+syn keyword csdlOperator exists
+syn keyword csdlOperator in
+syn keyword csdlOperator url_in
+syn match csdlOperator "=="
+syn match csdlOperator "!="
+syn match csdlOperator "cs =="
+syn match csdlOperator "cs !="
+syn match csdlOperator ">"
+syn match csdlOperator ">="
+syn match csdlOperator "<"
+syn match csdlOperator "<="
+syn keyword csdlOperator regex_partial
+syn keyword csdlOperator regex_exact
+syn keyword csdlOperator geo_box
+syn keyword csdlOperator geo_radius
+syn keyword csdlOperator geo_polygon
+
+syn keyword csdlLogicalOperator and
+syn keyword csdlLogicalOperator or
+syn keyword csdlLogicalOperator not
+
+syn match csdlTarget 'reddit\.title'
+syn match csdlTarget 'reddit\.content'
+syn match csdlTarget 'reddit\.contenttype'
+syn match csdlTarget 'reddit\.link'
+syn match csdlTarget 'reddit\.author\.name'
+syn match csdlTarget 'reddit\.author\.link'
+syn match csdlTarget 'reddit\.type'
+syn match csdlTarget 'reddit\.thread'
+syn match csdlTarget 'interaction\.type'
+syn match csdlTarget 'interaction\.title'
+syn match csdlTarget 'interaction\.content'
+syn match csdlTarget 'interaction\.source'
+syn match csdlTarget 'interaction\.geo'
+syn match csdlTarget 'interaction\.link'
+syn match csdlTarget 'interaction\.author\.username'
+syn match csdlTarget 'interaction\.author\.name'
+syn match csdlTarget 'interaction\.author\.id'
+syn match csdlTarget 'interaction\.author\.avatar'
+syn match csdlTarget 'interaction\.author\.link'
+syn match csdlTarget 'interaction\.sample'
+syn match csdlTarget 'links\.title'
+syn match csdlTarget 'links\.url'
+syn keyword csdlTarget links.normalized_url
+syn match csdlTarget 'links\.hops'
+syn match csdlTarget 'links\.code'
+syn match csdlTarget 'links\.domain'
+syn keyword csdlTarget links.retweet_count
+syn match csdlTarget 'links\.age'
+syn keyword csdlTarget links.meta.content_type
+syn match csdlTarget 'links\.meta\.charset'
+syn match csdlTarget 'links\.meta\.lang'
+syn match csdlTarget 'links\.meta\.keywords'
+syn match csdlTarget 'links\.meta\.description'
+syn match csdlTarget 'links\.meta\.newskeywords'
+syn match csdlTarget 'links\.meta\.standout'
+syn match csdlTarget 'links\.meta\.opengraph\.type'
+syn match csdlTarget 'links\.meta\.opengraph\.title'
+syn match csdlTarget 'links\.meta\.opengraph\.image'
+syn match csdlTarget 'links\.meta\.opengraph\.url'
+syn match csdlTarget 'links\.meta\.opengraph\.description'
+syn keyword csdlTarget links.meta.opengraph.site_name
+syn match csdlTarget 'links\.meta\.opengraph\.email'
+syn keyword csdlTarget links.meta.opengraph.phone_number
+syn keyword csdlTarget links.meta.opengraph.fax_number
+syn match csdlTarget 'links\.meta\.opengraph\.geo'
+syn keyword csdlTarget links.meta.opengraph.street_address
+syn match csdlTarget 'links\.meta\.opengraph\.locality'
+syn match csdlTarget 'links\.meta\.opengraph\.region'
+syn keyword csdlTarget links.meta.opengraph.postal_code
+syn match csdlTarget 'links\.meta\.opengraph\.activity'
+syn match csdlTarget 'links\.meta\.opengraph\.sport'
+syn match csdlTarget 'links\.meta\.opengraph\.bar'
+syn match csdlTarget 'links\.meta\.opengraph\.company'
+syn match csdlTarget 'links\.meta\.opengraph\.cafe'
+syn match csdlTarget 'links\.meta\.opengraph\.hotel'
+syn match csdlTarget 'links\.meta\.opengraph\.restaurant'
+syn match csdlTarget 'links\.meta\.opengraph\.cause'
+syn keyword csdlTarget links.meta.opengraph.sports_league
+syn keyword csdlTarget links.meta.opengraph.sports_team
+syn match csdlTarget 'links\.meta\.opengraph\.band'
+syn match csdlTarget 'links\.meta\.opengraph\.government'
+syn keyword csdlTarget links.meta.opengraph.non_profit
+syn match csdlTarget 'links\.meta\.opengraph\.school'
+syn match csdlTarget 'links\.meta\.opengraph\.university'
+syn match csdlTarget 'links\.meta\.opengraph\.actor'
+syn match csdlTarget 'links\.meta\.opengraph\.athlete'
+syn match csdlTarget 'links\.meta\.opengraph\.author'
+syn match csdlTarget 'links\.meta\.opengraph\.director'
+syn match csdlTarget 'links\.meta\.opengraph\.musician'
+syn match csdlTarget 'links\.meta\.opengraph\.politician'
+syn keyword csdlTarget links.meta.opengraph.public_figure
+syn match csdlTarget 'links\.meta\.opengraph\.city'
+syn match csdlTarget 'links\.meta\.opengraph\.country'
+syn match csdlTarget 'links\.meta\.opengraph\.landmark'
+syn keyword csdlTarget links.meta.opengraph.state_province
+syn match csdlTarget 'links\.meta\.opengraph\.album'
+syn match csdlTarget 'links\.meta\.opengraph\.book'
+syn match csdlTarget 'links\.meta\.opengraph\.drink'
+syn match csdlTarget 'links\.meta\.opengraph\.food'
+syn match csdlTarget 'links\.meta\.opengraph\.game'
+syn match csdlTarget 'links\.meta\.opengraph\.movie'
+syn match csdlTarget 'links\.meta\.opengraph\.product'
+syn match csdlTarget 'links\.meta\.opengraph\.song'
+syn keyword csdlTarget links.meta.opengraph.tv_show
+syn match csdlTarget 'links\.meta\.opengraph\.blog'
+syn match csdlTarget 'links\.meta\.opengraph\.website'
+syn match csdlTarget 'links\.meta\.opengraph\.article'
+syn match csdlTarget 'links\.meta\.twitter\.card'
+syn match csdlTarget 'links\.meta\.twitter\.site'
+syn keyword csdlTarget links.meta.twitter.site_id
+syn match csdlTarget 'links\.meta\.twitter\.creator'
+syn keyword csdlTarget links.meta.twitter.creator_id
+syn match csdlTarget 'links\.meta\.twitter\.url'
+syn match csdlTarget 'links\.meta\.twitter\.description'
+syn match csdlTarget 'links\.meta\.twitter\.title'
+syn match csdlTarget 'links\.meta\.twitter\.image'
+syn keyword csdlTarget links.meta.twitter.image_width
+syn keyword csdlTarget links.meta.twitter.image_height
+syn match csdlTarget 'links\.meta\.twitter\.player'
+syn keyword csdlTarget links.meta.twitter.player_width
+syn keyword csdlTarget links.meta.twitter.player_height
+syn keyword csdlTarget links.meta.twitter.player_stream
+syn keyword csdlTarget links.meta.twitter.player_stream_content_type
+syn match csdlTarget 'myspace\.link'
+syn match csdlTarget 'myspace\.content'
+syn match csdlTarget 'myspace\.contenttype'
+syn match csdlTarget 'myspace\.category'
+syn match csdlTarget 'myspace\.author\.username'
+syn match csdlTarget 'myspace\.author\.name'
+syn match csdlTarget 'myspace\.author\.id'
+syn match csdlTarget 'myspace\.author\.link'
+syn match csdlTarget 'myspace\.author\.avatar'
+syn match csdlTarget 'myspace\.geo'
+syn match csdlTarget 'myspace\.verb'
+syn match csdlTarget 'newscred\.type'
+syn match csdlTarget 'newscred\.article\.domain'
+syn match csdlTarget 'newscred\.video\.domain'
+syn match csdlTarget 'newscred\.article\.topics'
+syn match csdlTarget 'newscred\.video\.topics'
+syn match csdlTarget 'newscred\.article\.category'
+syn match csdlTarget 'newscred\.video\.category'
+syn match csdlTarget 'newscred\.article\.title'
+syn match csdlTarget 'newscred\.video\.title'
+syn match csdlTarget 'newscred\.article\.content'
+syn match csdlTarget 'newscred\.article\.fulltext'
+syn match csdlTarget 'newscred\.article\.authors'
+syn match csdlTarget 'newscred\.image\.caption'
+syn match csdlTarget 'newscred\.video\.caption'
+syn match csdlTarget 'newscred\.image\.attribution\.text'
+syn match csdlTarget 'newscred\.image\.attribution\.link'
+syn match csdlTarget 'newscred\.source\.name'
+syn match csdlTarget 'newscred\.source\.link'
+syn match csdlTarget 'newscred\.source\.domain'
+syn keyword csdlTarget newscred.source.media_type
+syn keyword csdlTarget newscred.source.company_type
+syn match csdlTarget 'newscred\.source\.country'
+syn match csdlTarget 'newscred\.source\.circulation'
+syn match csdlTarget 'newscred\.source\.founded'
+syn match csdlTarget 'imdb\.title'
+syn match csdlTarget 'imdb\.content'
+syn match csdlTarget 'imdb\.contenttype'
+syn match csdlTarget 'imdb\.link'
+syn match csdlTarget 'imdb\.author\.name'
+syn match csdlTarget 'imdb\.author\.link'
+syn match csdlTarget 'imdb\.type'
+syn match csdlTarget 'imdb\.thread'
+syn match csdlTarget 'amazon\.title'
+syn match csdlTarget 'amazon\.content'
+syn match csdlTarget 'amazon\.contenttype'
+syn match csdlTarget 'amazon\.link'
+syn match csdlTarget 'amazon\.author\.name'
+syn match csdlTarget 'amazon\.author\.link'
+syn match csdlTarget 'amazon\.type'
+syn match csdlTarget 'amazon\.thread'
+syn match csdlTarget 'salience\.content\.sentiment'
+syn match csdlTarget 'salience\.content\.topics'
+syn match csdlTarget 'salience\.title\.sentiment'
+syn match csdlTarget 'salience\.title\.topics'
+syn match csdlTarget 'salience\.content\.entities\.name'
+syn match csdlTarget 'salience\.content\.entities\.type'
+syn match csdlTarget 'salience\.title\.entities\.name'
+syn match csdlTarget 'salience\.title\.entities\.type'
+syn match csdlTarget 'klout\.score'
+syn match csdlTarget 'klout\.network'
+syn match csdlTarget 'klout\.amplification'
+syn keyword csdlTarget klout.true_reach
+syn match csdlTarget 'klout\.topics'
+syn match csdlTarget 'wikipedia\.author\.talk'
+syn match csdlTarget 'wikipedia\.author\.contributions'
+syn match csdlTarget 'wikipedia\.author\.username'
+syn match csdlTarget 'wikipedia\.body'
+syn match csdlTarget 'wikipedia\.title'
+syn match csdlTarget 'wikipedia\.images'
+syn match csdlTarget 'wikipedia\.categories'
+syn match csdlTarget 'wikipedia\.externallinks'
+syn match csdlTarget 'wikipedia\.ns'
+syn match csdlTarget 'wikipedia\.namespace'
+syn match csdlTarget 'wikipedia\.pageid'
+syn match csdlTarget 'wikipedia\.parentid'
+syn match csdlTarget 'wikipedia\.oldlen'
+syn match csdlTarget 'wikipedia\.newlen'
+syn match csdlTarget 'wikipedia\.changetype'
+syn match csdlTarget 'wikipedia\.diff\.from'
+syn match csdlTarget 'wikipedia\.diff\.to'
+syn match csdlTarget 'wikipedia\.diff\.changes\.added'
+syn match csdlTarget 'wikipedia\.diff\.changes\.removed'
+syn keyword csdlTarget demographic.twitter_activity
+syn match csdlTarget 'demographic\.location\.country'
+syn keyword csdlTarget demographic.location.us_state
+syn match csdlTarget 'demographic\.location\.city'
+syn match csdlTarget 'demographic\.type'
+syn match csdlTarget 'demographic\.sex'
+syn match csdlTarget 'demographic\.status\.relationship'
+syn match csdlTarget 'demographic\.status\.work'
+syn keyword csdlTarget demographic.likes_and_interests
+syn keyword csdlTarget demographic.first_language
+syn match csdlTarget 'demographic\.professions'
+syn match csdlTarget 'demographic\.services'
+syn keyword csdlTarget demographic.large_accounts_followed
+syn keyword csdlTarget demographic.age_range.start
+syn keyword csdlTarget demographic.age_range.end
+syn match csdlTarget 'demographic\.income\.start'
+syn match csdlTarget 'demographic\.income\.end'
+syn keyword csdlTarget demographic.main_street.dressed_by
+syn keyword csdlTarget demographic.main_street.shop_at
+syn keyword csdlTarget demographic.main_street.eat_and_drink_at
+syn match csdlTarget 'demographic\.accounts\.categories'
+syn match csdlTarget 'tumblr\.activity'
+syn match csdlTarget 'tumblr\.source\.blogid'
+syn match csdlTarget 'tumblr\.dest\.blogid'
+syn match csdlTarget 'tumblr\.dest\.postid'
+syn match csdlTarget 'tumblr\.root\.blogid'
+syn match csdlTarget 'tumblr\.root\.postid'
+syn match csdlTarget 'tumblr\.blogid'
+syn keyword csdlTarget tumblr.blog_name
+syn match csdlTarget 'tumblr\.type'
+syn match csdlTarget 'tumblr\.title'
+syn match csdlTarget 'tumblr\.body'
+syn match csdlTarget 'tumblr\.text'
+syn match csdlTarget 'tumblr\.tags'
+syn keyword csdlTarget tumblr.track_name
+syn match csdlTarget 'tumblr\.album'
+syn match csdlTarget 'tumblr\.link'
+syn match csdlTarget 'tumblr\.meta\.url'
+syn match csdlTarget 'tumblr\.meta\.type'
+syn match csdlTarget 'tumblr\.meta\.description'
+syn keyword csdlTarget tumblr.meta.likes_local
+syn keyword csdlTarget tumblr.meta.likes_global
+syn keyword csdlTarget tumblr.meta.reblogged_global
+syn match csdlTarget 'demographic\.gender'
+syn match csdlTarget 'flickr\.title'
+syn match csdlTarget 'flickr\.content'
+syn match csdlTarget 'flickr\.contenttype'
+syn match csdlTarget 'flickr\.link'
+syn match csdlTarget 'flickr\.author\.name'
+syn match csdlTarget 'flickr\.author\.link'
+syn match csdlTarget 'flickr\.author\.username'
+syn match csdlTarget 'flickr\.type'
+syn match csdlTarget 'flickr\.thread'
+syn match csdlTarget 'twitter\.text'
+syn match csdlTarget 'twitter\.source'
+syn match csdlTarget 'twitter\.mentions'
+syn keyword csdlTarget twitter.mention_ids
+syn match csdlTarget 'twitter\.links'
+syn match csdlTarget 'twitter\.domains'
+syn keyword csdlTarget twitter.in_reply_to_screen_name
+syn keyword csdlTarget twitter.in_reply_to_user_id
+syn keyword csdlTarget twitter.in_reply_to_status_id
+syn keyword csdlTarget twitter.filter_level
+syn match csdlTarget 'twitter\.lang'
+syn match csdlTarget 'twitter\.geo'
+syn match csdlTarget 'twitter\.user\.description'
+syn match csdlTarget 'twitter\.user\.location'
+syn keyword csdlTarget twitter.user.statuses_count
+syn keyword csdlTarget twitter.user.followers_count
+syn keyword csdlTarget twitter.user.follower_ratio
+syn keyword csdlTarget twitter.user.profile_age
+syn keyword csdlTarget twitter.user.friends_count
+syn keyword csdlTarget twitter.user.screen_name
+syn match csdlTarget 'twitter\.user\.lang'
+syn keyword csdlTarget twitter.user.time_zone
+syn match csdlTarget 'twitter\.user\.name'
+syn match csdlTarget 'twitter\.user\.id'
+syn keyword csdlTarget twitter.user.listed_count
+syn match csdlTarget 'twitter\.user\.url'
+syn match csdlTarget 'twitter\.user\.verified'
+syn keyword csdlTarget twitter.place.place_type
+syn match csdlTarget 'twitter\.place\.country'
+syn keyword csdlTarget twitter.place.country_code
+syn keyword csdlTarget twitter.place.full_name
+syn match csdlTarget 'twitter\.place\.name'
+syn match csdlTarget 'twitter\.place\.url'
+syn match csdlTarget 'twitter\.place\.attributes\.locality'
+syn match csdlTarget 'twitter\.place\.attributes\.region'
+syn keyword csdlTarget twitter.place.attributes.street_address
+syn match csdlTarget 'twitter\.status'
+syn match csdlTarget 'twitter\.retweet\.text'
+syn match csdlTarget 'twitter\.retweet\.elapsed'
+syn match csdlTarget 'twitter\.retweet\.source'
+syn keyword csdlTarget twitter.retweet.filter_level
+syn match csdlTarget 'twitter\.retweet\.lang'
+syn match csdlTarget 'twitter\.retweet\.user\.description'
+syn match csdlTarget 'twitter\.retweet\.user\.location'
+syn keyword csdlTarget twitter.retweet.user.statuses_count
+syn keyword csdlTarget twitter.retweet.user.followers_count
+syn keyword csdlTarget twitter.retweet.user.follower_ratio
+syn keyword csdlTarget twitter.retweet.user.profile_age
+syn keyword csdlTarget twitter.retweet.user.friends_count
+syn keyword csdlTarget twitter.retweet.user.screen_name
+syn match csdlTarget 'twitter\.retweet\.user\.lang'
+syn keyword csdlTarget twitter.retweet.user.time_zone
+syn match csdlTarget 'twitter\.retweet\.user\.name'
+syn match csdlTarget 'twitter\.retweet\.user\.id'
+syn keyword csdlTarget twitter.retweet.user.listed_count
+syn match csdlTarget 'twitter\.retweet\.user\.url'
+syn match csdlTarget 'twitter\.retweet\.user\.verified'
+syn match csdlTarget 'twitter\.retweeted\.id'
+syn match csdlTarget 'twitter\.retweeted\.source'
+syn keyword csdlTarget twitter.retweeted.in_reply_to_screen_name
+syn keyword csdlTarget twitter.retweeted.in_reply_to_user_id_str
+syn keyword csdlTarget twitter.retweeted.in_reply_to_status_id
+syn match csdlTarget 'twitter\.retweet\.count'
+syn match csdlTarget 'twitter\.retweet\.mentions'
+syn keyword csdlTarget twitter.retweet.mention_ids
+syn match csdlTarget 'twitter\.retweet\.links'
+syn match csdlTarget 'twitter\.retweet\.domains'
+syn match csdlTarget 'twitter\.retweeted\.user\.description'
+syn match csdlTarget 'twitter\.retweeted\.user\.location'
+syn keyword csdlTarget twitter.retweeted.user.statuses_count
+syn keyword csdlTarget twitter.retweeted.user.followers_count
+syn keyword csdlTarget twitter.retweeted.user.follower_ratio
+syn keyword csdlTarget twitter.retweeted.user.profile_age
+syn keyword csdlTarget twitter.retweeted.user.friends_count
+syn keyword csdlTarget twitter.retweeted.user.screen_name
+syn match csdlTarget 'twitter\.retweeted\.user\.lang'
+syn keyword csdlTarget twitter.retweeted.user.time_zone
+syn match csdlTarget 'twitter\.retweeted\.user\.name'
+syn match csdlTarget 'twitter\.retweeted\.user\.id'
+syn keyword csdlTarget twitter.retweeted.user.listed_count
+syn match csdlTarget 'twitter\.retweeted\.user\.url'
+syn match csdlTarget 'twitter\.retweeted\.user\.verified'
+syn match csdlTarget 'twitter\.retweeted\.geo'
+syn keyword csdlTarget twitter.retweeted.place.place_type
+syn match csdlTarget 'twitter\.retweeted\.place\.country'
+syn keyword csdlTarget twitter.retweeted.place.country_code
+syn keyword csdlTarget twitter.retweeted.place.full_name
+syn match csdlTarget 'twitter\.retweeted\.place\.name'
+syn match csdlTarget 'twitter\.retweeted\.place\.url'
+syn match csdlTarget 'twitter\.retweeted\.place\.attributes'
+syn match csdlTarget 'twitter\.hashtags'
+syn match csdlTarget 'twitter\.retweet\.hashtags'
+syn match csdlTarget 'twitter\.media\.type'
+syn keyword csdlTarget twitter.media.media_url
+syn keyword csdlTarget twitter.media.display_url
+syn match csdlTarget 'twitter\.retweet\.media\.type'
+syn keyword csdlTarget twitter.retweet.media.media_url
+syn keyword csdlTarget twitter.retweet.media.display_url
+syn match csdlTarget 'blog\.title'
+syn match csdlTarget 'blog\.content'
+syn match csdlTarget 'blog\.contenttype'
+syn match csdlTarget 'blog\.link'
+syn match csdlTarget 'blog\.domain'
+syn match csdlTarget 'blog\.author\.name'
+syn match csdlTarget 'blog\.author\.link'
+syn match csdlTarget 'blog\.author\.avatar'
+syn match csdlTarget 'blog\.author\.username'
+syn match csdlTarget 'blog\.type'
+syn match csdlTarget 'blog\.post\.link'
+syn match csdlTarget 'blog\.post\.title'
+syn match csdlTarget 'facebook\.author\.name'
+syn match csdlTarget 'facebook\.author\.link'
+syn match csdlTarget 'facebook\.author\.id'
+syn match csdlTarget 'facebook\.author\.avatar'
+syn match csdlTarget 'facebook\.message'
+syn match csdlTarget 'facebook\.description'
+syn match csdlTarget 'facebook\.caption'
+syn match csdlTarget 'facebook\.type'
+syn match csdlTarget 'facebook\.application'
+syn match csdlTarget 'facebook\.source'
+syn match csdlTarget 'facebook\.link'
+syn match csdlTarget 'facebook\.name'
+syn match csdlTarget 'facebook\.to\.names'
+syn match csdlTarget 'facebook\.to\.ids'
+syn match csdlTarget 'facebook\.og\.title'
+syn match csdlTarget 'facebook\.og\.location'
+syn match csdlTarget 'facebook\.og\.photos'
+syn match csdlTarget 'facebook\.og\.by'
+syn match csdlTarget 'facebook\.og\.description'
+syn match csdlTarget 'facebook\.og\.type'
+syn match csdlTarget 'facebook\.og\.length'
+syn match csdlTarget 'facebook\.likes\.count'
+syn match csdlTarget 'facebook\.likes\.names'
+syn match csdlTarget 'facebook\.likes\.ids'
+syn match csdlTarget 'topix\.title'
+syn match csdlTarget 'topix\.content'
+syn match csdlTarget 'topix\.contenttype'
+syn match csdlTarget 'topix\.link'
+syn match csdlTarget 'topix\.author\.name'
+syn match csdlTarget 'topix\.type'
+syn match csdlTarget 'topix\.thread'
+syn match csdlTarget 'topix\.author\.location'
+syn match csdlTarget 'bitly\.user\.agent'
+syn keyword csdlTarget bitly.url_hash
+syn match csdlTarget 'bitly\.share\.hash'
+syn match csdlTarget 'bitly\.cname'
+syn keyword csdlTarget bitly.referring_url
+syn keyword csdlTarget bitly.referring_domain
+syn match csdlTarget 'bitly\.url'
+syn match csdlTarget 'bitly\.domain'
+syn keyword csdlTarget bitly.country_code
+syn keyword csdlTarget bitly.geo_region_code
+syn match csdlTarget 'bitly\.country'
+syn keyword csdlTarget bitly.geo_region
+syn keyword csdlTarget bitly.geo_city
+syn match csdlTarget 'bitly\.geo'
+syn match csdlTarget 'bitly\.timezone'
+syn match csdlTarget 'trends\.type'
+syn match csdlTarget 'trends\.content'
+syn match csdlTarget 'trends\.source'
+syn match csdlTarget 'board\.title'
+syn match csdlTarget 'board\.content'
+syn match csdlTarget 'board\.contenttype'
+syn match csdlTarget 'board\.link'
+syn match csdlTarget 'board\.domain'
+syn match csdlTarget 'board\.author\.name'
+syn match csdlTarget 'board\.author\.link'
+syn match csdlTarget 'board\.author\.avatar'
+syn match csdlTarget 'board\.author\.username'
+syn match csdlTarget 'board\.type'
+syn match csdlTarget 'board\.thread'
+syn match csdlTarget 'board\.author\.location'
+syn match csdlTarget 'board\.author\.signature'
+syn match csdlTarget 'board\.author\.registered'
+syn match csdlTarget 'board\.author\.age'
+syn match csdlTarget 'board\.author\.gender'
+syn match csdlTarget 'video\.title'
+syn match csdlTarget 'video\.content'
+syn match csdlTarget 'video\.contenttype'
+syn match csdlTarget 'video\.domain'
+syn match csdlTarget 'video\.author\.name'
+syn match csdlTarget 'video\.author\.link'
+syn match csdlTarget 'video\.author\.avatar'
+syn match csdlTarget 'video\.author\.username'
+syn match csdlTarget 'video\.type'
+syn match csdlTarget 'video\.videolink'
+syn match csdlTarget 'video\.commentslink'
+syn match csdlTarget 'video\.duration'
+syn match csdlTarget 'video\.thumbnail'
+syn match csdlTarget 'video\.category'
+syn match csdlTarget 'video\.tags'
+syn match csdlTarget '2ch\.title'
+syn match csdlTarget '2ch\.content'
+syn match csdlTarget '2ch\.contenttype'
+syn match csdlTarget '2ch\.link'
+syn match csdlTarget '2ch\.author\.name'
+syn match csdlTarget '2ch\.type'
+syn match csdlTarget '2ch\.thread'
+syn match csdlTarget 'dailymotion\.title'
+syn match csdlTarget 'dailymotion\.content'
+syn match csdlTarget 'dailymotion\.contenttype'
+syn match csdlTarget 'dailymotion\.author\.link'
+syn match csdlTarget 'dailymotion\.author\.username'
+syn match csdlTarget 'dailymotion\.videolink'
+syn match csdlTarget 'dailymotion\.duration'
+syn match csdlTarget 'dailymotion\.thumbnail'
+syn match csdlTarget 'dailymotion\.category'
+syn match csdlTarget 'dailymotion\.tags'
+syn match csdlTarget 'language\.tag'
+syn match csdlTarget 'language\.confidence'
+syn match csdlTarget 'digg\.type'
+syn match csdlTarget 'digg\.user\.name'
+syn match csdlTarget 'digg\.user\.fullname'
+syn match csdlTarget 'digg\.user\.registered'
+syn match csdlTarget 'digg\.user\.profileviews'
+syn match csdlTarget 'digg\.user\.icon'
+syn match csdlTarget 'digg\.user\.links'
+syn match csdlTarget 'digg\.item\.status'
+syn match csdlTarget 'digg\.item\.description'
+syn match csdlTarget 'digg\.item\.title'
+syn match csdlTarget 'digg\.item\.diggs'
+syn match csdlTarget 'digg\.item\.comments'
+syn match csdlTarget 'digg\.item\.topic'
+syn match csdlTarget 'digg\.comment\.buries'
+syn match csdlTarget 'digg\.comment\.diggs'
+syn match csdlTarget 'digg\.comment\.text'
+syn match csdlTarget 'youtube\.title'
+syn match csdlTarget 'youtube\.content'
+syn match csdlTarget 'youtube\.contenttype'
+syn match csdlTarget 'youtube\.author\.name'
+syn match csdlTarget 'youtube\.author\.link'
+syn match csdlTarget 'youtube\.type'
+syn match csdlTarget 'youtube\.videolink'
+syn match csdlTarget 'youtube\.commentslink'
+syn match csdlTarget 'youtube\.duration'
+syn match csdlTarget 'youtube\.thumbnail'
+syn match csdlTarget 'youtube\.category'
+syn match csdlTarget 'youtube\.tags'
+
+syn match csdlComment "^\/\/.*$"
+syn match csdlComment "^\/\*.*$"
+syn match csdlComment "^.*\*\/$"
+
+highlight link csdlKeyword Statement
+highlight link csdlOperator Operator
+highlight link csdlLogicalOperator Operator
+highlight link csdlTarget Constant
+highlight link csdlComment Comment
+"
+let b:current_syntax = "csdl"
diff -Naur vim73.orig/runtime/syntax/css.vim vim73/runtime/syntax/css.vim
--- vim73.orig/runtime/syntax/css.vim	2010-07-28 10:40:39.000000000 +0000
+++ vim73/runtime/syntax/css.vim	2013-08-04 19:09:09.270614555 +0000
@@ -1,10 +1,12 @@
 " Vim syntax file
-" Language:	Cascading Style Sheets
-" Maintainer:	Claudio Fleiner <claudio@fleiner.com>
-" URL:		http://www.fleiner.com/vim/syntax/css.vim
-" Last Change:	2010 Jul 28
-" CSS2 by Nikolai Weibull
-" Full CSS2, HTML4 support by Yeti
+" Language:     Cascading Style Sheets
+" Previous Contributor List:
+"               Claudio Fleiner <claudio@fleiner.com> (Maintainer)
+"               Yeti            (Add full CSS2, HTML4 support)
+"               Nikolai Weibull (Add CSS2 support)
+" Maintainer:   Jules Wang      <w.jq0722@gmail.com>
+" URL:          https://github.com/JulesWang/css.vim
+" Last Change:  2012 Dec 15
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -17,8 +19,12 @@
   let main_syntax = 'css'
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
+" All HTML4 tags
 syn keyword cssTagName abbr acronym address applet area a b base
 syn keyword cssTagName basefont bdo big blockquote body br button
 syn keyword cssTagName caption center cite code col colgroup dd del
@@ -27,32 +33,51 @@
 syn keyword cssTagName iframe img input ins isindex kbd label legend li
 syn keyword cssTagName link map menu meta noframes noscript ol optgroup
 syn keyword cssTagName option p param pre q s samp script select small
-syn keyword cssTagName span strike strong style sub sup tbody td
+syn keyword cssTagName span strike strong style sub sup table tbody td
 syn keyword cssTagName textarea tfoot th thead title tr tt ul u var
-syn match cssTagName "\<table\>"
-syn match cssTagName "\*"
+syn keyword cssTagName object
 
-syn match cssTagName "@page\>" nextgroup=cssDefinition
+" HTML5 new tags 5*6=30
+syn keyword cssTagName article aside audio bdi canvas command
+syn keyword cssTagName datalist details embed figcaption figure footer
+syn keyword cssTagName header hgroup keygen mark meter nav
+syn keyword cssTagName output progress rt rp ruby section
+syn keyword cssTagName source summary time track video wbr
+
+" Tags not supported in HTML5
+syn keyword cssDeprecated acronym applet basefont big center dir
+syn keyword cssDeprecated font frame frameset noframes strike tt
 
-syn match cssSelectorOp "[+>.]"
-syn match cssSelectorOp2 "[~|]\?=" contained
+"syn match cssTagName "\<table\>"
+syn match cssTagName "\*"
+
+" selectors
+syn match cssSelectorOp "[,>+]"
+syn match cssSelectorOp2 "[~|^$*]\?=" contained
+" FIXME: add HTML5 attribute
 syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" transparent contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ
 
+" .class and #id
+syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
+
 try
 syn match cssIdentifier "#[A-Za-z-_@][A-Za-z-0-9_@-]*"
 catch /^.*/
 syn match cssIdentifier "#[A-Za-z_@][A-Za-z0-9_@-]*"
 endtry
 
+syn match cssTagName "@page\>" nextgroup=cssDefinition
+" FIXME: use cssVendor here
+syn match cssTagName "@\(-\(webkit\|moz\|o\|ms\)-\)\=keyframes\>" nextgroup=cssDefinition
 
 syn match cssMedia "@media\>" nextgroup=cssMediaType skipwhite skipnl
 syn keyword cssMediaType contained screen print aural braile embosed handheld projection ty tv all nextgroup=cssMediaComma,cssMediaBlock skipwhite skipnl
-syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl
+"syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl
 syn region cssMediaBlock transparent matchgroup=cssBraces start='{' end='}' contains=cssTagName,cssError,cssComment,cssDefinition,cssURL,cssUnicodeEscape,cssIdentifier
 
 syn match cssValueInteger contained "[-+]\=\d\+"
 syn match cssValueNumber contained "[-+]\=\d\+\(\.\d*\)\="
-syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\)"
+syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\|rem\)"
 syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)"
 syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)"
 syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)"
@@ -66,27 +91,115 @@
 syn match cssUnicodeRange contained "U+[0-9A-Fa-f?]\+"
 syn match cssUnicodeRange contained "U+\x\+-\x\+"
 
+" The 16 basic color names
 syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon navy olive purple red silver teal yellow
+
+" 130 more color names
+syn keyword cssColor contained aliceblue antiquewhite aquamarine azure
+syn keyword cssColor contained beige bisque blanchedalmond blueviolet brown burlywood
+syn keyword cssColor contained cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan
+syn match cssColor contained /dark\(blue\|cyan\|goldenrod\|gray\|green\|grey\|khaki\)/
+syn match cssColor contained /dark\(magenta\|olivegreen\|orange\|orchid\|red\|salmon\|seagreen\)/
+syn match cssColor contained /darkslate\(blue\|gray\|grey\)/
+syn match cssColor contained /dark\(turquoise\|violet\)/
+syn keyword cssColor contained deeppink deepskyblue dimgray dimgrey dodgerblue firebrick
+syn keyword cssColor contained floralwhite forestgreen gainsboro ghostwhite gold
+syn keyword cssColor contained goldenrod greenyellow grey honeydew hotpink
+syn keyword cssColor contained indianred indigo ivory khaki lavender lavenderblush lawngreen
+syn keyword cssColor contained lemonchiffon limegreen linen magenta
+syn match cssColor contained /light\(blue\|coral\|cyan\|goldenrodyellow\|gray\|green\)/
+syn match cssColor contained /light\(grey\|pink\|salmon\|seagreen\|skyblue\|yellow\)/
+syn match cssColor contained /light\(slategray\|slategrey\|steelblue\)/
+syn match cssColor contained /medium\(aquamarine\|blue\|orchid\|purple\|seagreen\)/
+syn match cssColor contained /medium\(slateblue\|springgreen\|turquoise\|violetred\)/
+syn keyword cssColor contained midnightblue mintcream mistyrose moccasin navajowhite
+syn keyword cssColor contained oldlace olivedrab orange orangered orchid
+syn match cssColor contained /pale\(goldenrod\|green\|turquoise\|violetred\)/
+syn keyword cssColor contained papayawhip peachpuff peru pink plum powderblue
+syn keyword cssColor contained rosybrown royalblue saddlebrown salmon sandybrown
+syn keyword cssColor contained seagreen seashell sienna skyblue slateblue
+syn keyword cssColor contained slategray slategrey snow springgreen steelblue tan
+syn keyword cssColor contained thistle tomato turquoise violet wheat
+syn keyword cssColor contained whitesmoke yellowgreen
+
 " FIXME: These are actually case-insentivie too, but (a) specs recommend using
 " mixed-case (b) it's hard to highlight the word `Background' correctly in
 " all situations
 syn case match
 syn keyword cssColor contained ActiveBorder ActiveCaption AppWorkspace ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText Background
 syn case ignore
+
+syn match cssImportant contained "!\s*important\>"
+
 syn match cssColor contained "\<transparent\>"
 syn match cssColor contained "\<white\>"
 syn match cssColor contained "#[0-9A-Fa-f]\{3\}\>"
 syn match cssColor contained "#[0-9A-Fa-f]\{6\}\>"
-"syn match cssColor contained "\<rgb\s*(\s*\d\+\(\.\d*\)\=%\=\s*,\s*\d\+\(\.\d*\)\=%\=\s*,\s*\d\+\(\.\d*\)\=%\=\s*)"
-syn region cssURL contained matchgroup=cssFunctionName start="\<url\s*(" end=")" oneline keepend
-syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\)\s*(" end=")" oneline keepend
 
-syn match cssImportant contained "!\s*important\>"
-
-syn keyword cssCommonAttr contained auto none inherit
+syn region cssURL contained matchgroup=cssFunctionName start="\<url\s*(" end=")" oneline keepend
+syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\|cubic-bezier\)\s*(" end=")" oneline keepend
+syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgba\|hsl\|hsla\)\s*(" end=")" oneline keepend
+syn region cssFunction contained matchgroup=cssFunctionName start="\<\(linear\|radial\)-gradient\s*(" end=")" oneline keepend
+syn region cssFunction contained matchgroup=cssFunctionName start="\<\(matrix\(3d\)\=\|scale\(3d\|X\|Y|\Z\)\=\|translate\(3d\|X\|Y|\Z\)\=\|skew\(X\|Y\)\=\|rotate\(3d\|X\|Y|\Z\)\=\|perspective\)\s*(" end=")" oneline keepend
+
+" Prop and Attr
+" Reference: http://www.w3schools.com/cssref/default.asp
+syn keyword cssCommonAttr contained auto none inherit all
 syn keyword cssCommonAttr contained top bottom
 syn keyword cssCommonAttr contained medium normal
 
+
+syn match cssAnimationProp contained "\<animation\(-\(name\|duration\|timing-function\|delay\|iteration-cout\|play-state\)\)\=\>"
+
+
+syn keyword cssAnimationAttr contained infinite alternate paused running
+" bugfix: escape linear-gradient
+syn match cssAnimationAttr contained "\<linear\(-gradient\)\@!\>"
+syn match cssAnimationAttr contained "\<ease\(-\(in-out\|out\|in\)\)\=\>"
+
+syn match cssBackgroundProp contained "\<background\(-\(color\|image\|attachment\|position\|clip\|origin\|size\)\)\=\>"
+syn keyword cssBackgroundAttr contained center fixed over contain
+syn match cssBackgroundAttr contained "\<no-repeat\>"
+syn match cssBackgroundAttr contained "\<repeat\(-[xy]\)\=\>"
+syn match cssBackgroundAttr contained "\<\(border\|content\|padding\)-box\>"
+
+
+syn match cssBorderOutlineProp contained "\<border\(-\(top\|right\|bottom\|left\)\)\=\(-\(width\|color\|style\)\)\=\>"
+syn match cssBorderOutlineProp contained "\<outline\(-\(width\|style\|color\)\)\=\>"
+syn match cssBorderOutlineProp contained "\<border-\(top\|bottom\)-\(left\|right\)\(-radius\)\=\>"
+syn match cssBorderOutlineProp contained "\<border-image\(-\(outset\|repeat\|slice\|source\|width\)\)\=\>"
+syn match cssBorderOutlineProp contained "\<border-radius\>"
+syn keyword cssBorderOutlineAttr contained thin thick medium
+syn keyword cssBorderOutlineAttr contained dotted dashed solid double groove ridge inset outset
+syn keyword cssBorderOutlineAttr contained hidden visible scroll collapse
+syn keyword cssBorderOutlineAttr contained stretch round
+
+
+syn match cssBoxProp contained "\<overflow\(-\(x\|y\|style\)\)\=\>"
+syn match cssBoxProp contained "\<rotation\(-point\)=\>"
+syn keyword cssBoxAttr contained visible hidden scroll auto
+syn match cssBoxAttr contained "\<no-\(display\|content\)\>"
+
+syn keyword cssColorProp contained opacity
+syn match cssColorProp contained "\<color-profile\>"
+syn match cssColorProp contained "\<rendering-intent\>"
+
+
+syn match cssDimensionProp contained "\<\(min\|max\)-\(width\|height\)\>"
+syn keyword cssDimensionProp contained height
+syn keyword cssDimensionProp contained width
+
+" shadow and sizing are in other property groups
+syn match cssFlexibleBoxProp contained "\<box-\(align\|direction\|flex\|ordinal-group\|orient\|pack\|shadow\|sizing\)\>"
+syn keyword cssFlexibleBoxAttr contained start end center baseline stretch
+syn keyword cssFlexibleBoxAttr contained normal reverse
+syn keyword cssFlexibleBoxAttr contained single mulitple
+syn keyword cssFlexibleBoxAttr contained horizontal
+" bugfix: escape vertial-align
+syn match cssFlexibleBoxAttr contained "\<vertical\(-align\)\@!\>"
+syn match cssFlexibleBoxAttr contained "\<\(inline\|block\)-axis\>"
+
+
 syn match cssFontProp contained "\<font\(-\(family\|style\|variant\|weight\|size\(-adjust\)\=\|stretch\)\)\=\>"
 syn match cssFontAttr contained "\<\(sans-\)\=\<serif\>"
 syn match cssFontAttr contained "\<small\(-\(caps\|caption\)\)\=\>"
@@ -95,67 +208,92 @@
 syn match cssFontAttr contained "\<status-bar\>"
 syn match cssFontAttr contained "\<\(\(ultra\|extra\|semi\|status-bar\)-\)\=\(condensed\|expanded\)\>"
 syn keyword cssFontAttr contained cursive fantasy monospace italic oblique
-syn keyword cssFontAttr contained bold bolder lighter larger smaller
-syn keyword cssFontAttr contained icon menu
-syn match cssFontAttr contained "\<caption\>"
-syn keyword cssFontAttr contained large smaller larger
-syn keyword cssFontAttr contained narrower wider
-
-syn keyword cssColorProp contained color
-syn match cssColorProp contained "\<background\(-\(color\|image\|attachment\|position\)\)\=\>"
-syn keyword cssColorAttr contained center scroll fixed
-syn match cssColorAttr contained "\<repeat\(-[xy]\)\=\>"
-syn match cssColorAttr contained "\<no-repeat\>"
+syn keyword cssFontAttr contained bold bolder light lighter larger smaller
+syn keyword cssFontAttr contained icon menu caption
+syn keyword cssFontAttr contained large smaller larger narrower wider
+syn keyword cssFontAttr contained Courier Arial Georgia Times
 
-syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>"
-syn match cssTextAttr contained "\<line-through\>"
-syn match cssTextAttr contained "\<text-indent\>"
-syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>"
-syn keyword cssTextAttr contained underline overline blink sub super middle
-syn keyword cssTextAttr contained capitalize uppercase lowercase center justify baseline sub super
-
-syn match cssBoxProp contained "\<\(margin\|padding\|border\)\(-\(top\|right\|bottom\|left\)\)\=\>"
-syn match cssBoxProp contained "\<border-\(\(\(top\|right\|bottom\|left\)-\)\=\(width\|color\|style\)\)\=\>"
-syn match cssBoxProp contained "\<\(width\|z-index\)\>"
-syn match cssBoxProp contained "\<\(min\|max\)-\(width\|height\)\>"
-syn keyword cssBoxProp contained width height float clear overflow clip visibility
-syn keyword cssBoxAttr contained thin thick both
-syn keyword cssBoxAttr contained dotted dashed solid double groove ridge inset outset
-syn keyword cssBoxAttr contained hidden visible scroll collapse
 
-syn keyword cssGeneratedContentProp contained content quotes
+syn keyword cssGeneratedContentProp contained content quotes crop
 syn match cssGeneratedContentProp contained "\<counter-\(reset\|increment\)\>"
-syn match cssGeneratedContentProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
+syn match cssGeneratedContentProp contained "\<move-to\>"
+syn match cssGeneratedContentProp contained "\<page-policy\>"
 syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>"
-syn match cssAuralAttr contained "\<lower\>"
-syn match cssGeneratedContentAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>"
-syn match cssGeneratedContentAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>"
-syn match cssGeneratedContentAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>"
-syn keyword cssGeneratedContentAttr contained disc circle square hebrew armenian georgian
-syn keyword cssGeneratedContentAttr contained inside outside
-
-syn match cssPagingProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
-syn keyword cssPagingProp contained size marks inside orphans widows
-syn keyword cssPagingAttr contained landscape portrait crop cross always avoid
 
-syn keyword cssUIProp contained cursor
-syn match cssUIProp contained "\<outline\(-\(width\|style\|color\)\)\=\>"
-syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>"
-syn keyword cssUIAttr contained default crosshair pointer move wait help
-syn keyword cssUIAttr contained thin thick
-syn keyword cssUIAttr contained dotted dashed solid double groove ridge inset outset
-syn keyword cssUIAttr contained invert
-
-syn match cssRenderAttr contained "\<marker\>"
-syn match cssRenderProp contained "\<\(display\|marker-offset\|unicode-bidi\|white-space\|list-item\|run-in\|inline-table\)\>"
-syn keyword cssRenderProp contained position top bottom direction
-syn match cssRenderProp contained "\<\(left\|right\)\>"
-syn keyword cssRenderAttr contained block inline compact
-syn match cssRenderAttr contained "\<table\(-\(row-gorup\|\(header\|footer\)-group\|row\|column\(-group\)\=\|cell\|caption\)\)\=\>"
-syn keyword cssRenderAttr contained static relative absolute fixed
-syn keyword cssRenderAttr contained ltr rtl embed bidi-override pre nowrap
-syn match cssRenderAttr contained "\<bidi-override\>"
 
+syn match cssGridProp contained "\<grid-\(columns\|rows\)\>"
+
+syn match cssHyerlinkProp contained "\<target\(-\(name\|new\|position\)\)\=\>"
+
+syn match cssListProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
+syn match cssListAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>"
+syn match cssListAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>"
+syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>"
+syn keyword cssListAttr contained disc circle square hebrew armenian georgian
+syn keyword cssListAttr contained inside outside
+
+
+syn match cssMarginProp contained "\<margin\(-\(top\|right\|bottom\|left\)\)\=\>"
+
+syn match cssMultiColumnProp contained "\<column\(-\(\break-\(after\|before\)\|count\|gap\|rule\(-\(color\|style\|width\)\)\=\)\|span\|width\)\=\>"
+
+
+syn match cssPaddingProp contained "\<padding\(-\(top\|right\|bottom\|left\)\)\=\>"
+
+syn keyword cssPositioningProp contained bottom clear clip display float left
+syn keyword cssPositioningProp contained position right top visibility
+syn match cssPositioningProp contained "\<z-index\>"
+syn keyword cssPositioningAttr contained block inline compact
+syn match cssPositioningAttr contained "\<table\(-\(row-gorup\|\(header\|footer\)-group\|row\|column\(-group\)\=\|cell\|caption\)\)\=\>"
+syn keyword cssPositioningAttr contained left right both
+syn match cssPositioningAttr contained "\<list-item\>"
+syn match cssPositioningAttr contained "\<inline-\(block\|table\)\>"
+syn keyword cssPositioningAttr contained static relative absolute fixed
+
+syn match cssPrintProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
+syn keyword cssPrintProp contained orphans widows
+syn keyword cssPrintAttr contained landscape portrait crop cross always avoid
+
+syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>"
+syn keyword cssTableAttr contained fixed collapse separate show hide once always
+
+
+syn keyword cssTextProp contained color direction
+syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>"
+syn match cssTextProp contained "\<text-\(justify\|\outline\|overflow\|warp\|align-last\)\>"
+syn match cssTextProp contained "\<word-\(break\|\wrap\)\>"
+syn match cssTextProp contained "\<white-space\>"
+syn match cssTextProp contained "\<hanging-punctuation\>"
+syn match cssTextProp contained "\<punctuation-trim\>"
+syn match cssTextAttr contained "\<line-through\>"
+syn match cssTextAttr contained "\<text-indent\>"
+syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>"
+syn keyword cssTextAttr contained ltr rtl embed nowrap
+syn keyword cssTextAttr contained underline overline blink sub super middle
+syn keyword cssTextAttr contained capitalize uppercase lowercase
+syn keyword cssTextAttr contained center justify baseline sub super
+syn match cssTextAttr contained "\<pre\(-\(line\|wrap\)\)\=\>"
+syn match cssTextAttr contained "\<\(allow\|force\)-end\>"
+syn keyword cssTextAttr contained start end adjacent
+syn match cssTextAttr contained "\<inter-\(word\|ideographic\|cluster\)\>"
+syn keyword cssTextAttr contained distribute kashida first last
+syn keyword cssTextAttr contained clip ellipsis unrestricted suppress
+syn match cssTextAttr contained "\<break-all\>"
+syn match cssTextAttr contained "\<break-word\>"
+syn keyword cssTextAttr contained hyphenate
+
+
+syn match cssTransformProp contained "\<transform\(-\(origin\|style\)\)\=\>"
+syn match cssTransformProp contained "\<perspective\(-origin\)\=\>"
+syn match cssTransformProp contained "\<backface-visibility\>"
+
+syn match cssTransitionProp contained "\<transition\(-\(delay\|duration\|property\|timing-function\)\)\=\>"
+
+syn match cssUIProp contained "\<nav-\(down\|index\|left\|right\|up\)\=\>"
+syn match cssUIProp contained "\<outline-offset\>"
+syn match cssUIProp contained "\<box-sizing\>"
+syn keyword cssUIProp contained appearance icon resize
+syn keyword cssUIAttr contained window button menu field
 
 syn match cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>"
 syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numerals\)\)\=\)\>"
@@ -171,30 +309,54 @@
 syn match cssAuralAttr contained "\<\(x-\)\=\(slow\|fast\)\>"
 syn keyword cssAuralAttr contained faster slower
 syn keyword cssAuralAttr contained male female child code digits continuous
+syn match cssAuralAttr contained "\<lower\>"
+
+" cursor
+syn keyword cssUIProp contained cursor
+syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>"
+syn keyword cssUIAttr contained crosshair default help move pointer
+syn keyword cssUIAttr contained progress wait
+
+" FIXME: I could not find them in reference
+syn keyword cssUIAttr contained invert maker size zoom
+syn match cssRenderAttr contained "\<run-in\>"
+syn match cssRenderAttr contained "\<text-rendering\>"
+syn match cssRenderAttr contained "\<font-smoothing\>"
+syn match cssRenderProp contained "\<marker-offset\>"
+syn match cssRenderAttr contained "\<bidi-override\>"
 
-syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\|speak-header\)\>"
-syn keyword cssTableAttr contained fixed collapse separate show hide once always
 
 " FIXME: This allows cssMediaBlock before the semicolon, which is wrong.
 syn region cssInclude start="@import" end=";" contains=cssComment,cssURL,cssUnicodeEscape,cssMediaType
 syn match cssBraces contained "[{}]"
 syn match cssError contained "{@<>"
-syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape
+syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition
 syn match cssBraceError "}"
 
-syn match cssPseudoClass ":\S*" contains=cssPseudoClassId,cssUnicodeEscape
-syn keyword cssPseudoClassId contained link visited active hover focus before after left right
+" Pseudo class
+syn match cssPseudoClass ":[A-Za-z0-9_-]*" contains=cssPseudoClassId,cssUnicodeEscape
+syn keyword cssPseudoClassId link visited active hover focus before after left right lang
 syn match cssPseudoClassId contained "\<first\(-\(line\|letter\|child\)\)\=\>"
-syn region cssPseudoClassLang matchgroup=cssPseudoClassId start=":lang(" end=")" oneline
+" FIXME: handle functions.
+"syn region cssPseudoClassLang matchgroup=cssPseudoClassId start="lang(" end=")"
+syn match cssPseudoClassId contained "\<\(last\|only\|nth\|nth-last\)-child\>"
+syn match cssPseudoClassId contained "\<\(first\|last\|only\|nth\|nth-last\)-of-type\>"
+syn keyword cssPseudoClassId root empty target enable disabled checked not invalid
+syn match cssPseudoClassId contained  "::\(-moz-\)\=selection"
 
+" Comment
 syn region cssComment start="/\*" end="\*/" contains=@Spell
+syn region cssComment start="//" skip="\\$" end="$" keepend contains=@Spell
 
 syn match cssUnicodeEscape "\\\x\{1,6}\s\?"
 syn match cssSpecialCharQQ +\\"+ contained
 syn match cssSpecialCharQ +\\'+ contained
 syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ
 syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ
-syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
+
+" Vendor Prefix
+syn match cssVendor contained "\(-\(webkit\|moz\|o\|ms\)-\)"
+
 
 if main_syntax == "css"
   syn sync minlines=10
@@ -212,31 +374,75 @@
   endif
 
   HiLink cssComment Comment
+  HiLink cssVendor Comment
   HiLink cssTagName Statement
+  HiLink cssDeprecated Error
   HiLink cssSelectorOp Special
   HiLink cssSelectorOp2 Special
-  HiLink cssFontProp StorageClass
-  HiLink cssColorProp StorageClass
-  HiLink cssTextProp StorageClass
+
+  HiLink cssAnimationProp StorageClass
+  HiLink cssBackgroundProp StorageClass
+  HiLink cssBorderOutlineProp StorageClass
   HiLink cssBoxProp StorageClass
-  HiLink cssRenderProp StorageClass
-  HiLink cssAuralProp StorageClass
-  HiLink cssRenderProp StorageClass
+  HiLink cssColorProp StorageClass
+  HiLink cssContentForPagedMediaProp StorageClass
+  HiLink cssDimensionProp StorageClass
+  HiLink cssFlexibleBoxProp StorageClass
+  HiLink cssFontProp StorageClass
   HiLink cssGeneratedContentProp StorageClass
-  HiLink cssPagingProp StorageClass
+  HiLink cssGridProp StorageClass
+  HiLink cssHyerlinkProp StorageClass
+  HiLink cssLineboxProp StorageClass
+  HiLink cssListProp StorageClass
+  HiLink cssMarginProp StorageClass
+  HiLink cssMarqueeProp StorageClass
+  HiLink cssMultiColumnProp StorageClass
+  HiLink cssPaddingProp StorageClass
+  HiLink cssPagedMediaProp StorageClass
+  HiLink cssPositioningProp StorageClass
+  HiLink cssPrintProp StorageClass
+  HiLink cssRubyProp StorageClass
+  HiLink cssSpeechProp StorageClass
   HiLink cssTableProp StorageClass
+  HiLink cssTextProp StorageClass
+  HiLink cssTransformProp StorageClass
+  HiLink cssTransitionProp StorageClass
   HiLink cssUIProp StorageClass
-  HiLink cssFontAttr Type
-  HiLink cssColorAttr Type
-  HiLink cssTextAttr Type
+  HiLink cssAuralProp StorageClass
+  HiLink cssRenderProp StorageClass
+
+  HiLink cssAnimationAttr Type
+  HiLink cssBackgroundAttr Type
+  HiLink cssBorderOutlineAttr Type
   HiLink cssBoxAttr Type
-  HiLink cssRenderAttr Type
-  HiLink cssAuralAttr Type
+  HiLink cssColorAttr Type
+  HiLink cssContentForPagedMediaAttr Type
+  HiLink cssDimensionAttr Type
+  HiLink cssFlexibleBoxAttr Type
+  HiLink cssFontAttr Type
   HiLink cssGeneratedContentAttr Type
-  HiLink cssPagingAttr Type
+  HiLink cssGridAttr Type
+  HiLink cssHyerlinkAttr Type
+  HiLink cssLineboxAttr Type
+  HiLink cssListAttr Type
+  HiLink cssMarginAttr Type
+  HiLink cssMarqueeAttr Type
+  HiLink cssMultiColumnAttr Type
+  HiLink cssPaddingAttr Type
+  HiLink cssPagedMediaAttr Type
+  HiLink cssPositioningAttr Type
+  HiLink cssPrintAttr Type
+  HiLink cssRubyAttr Type
+  HiLink cssSpeechAttr Type
   HiLink cssTableAttr Type
+  HiLink cssTextAttr Type
+  HiLink cssTransformAttr Type
+  HiLink cssTransitionAttr Type
   HiLink cssUIAttr Type
+  HiLink cssAuralAttr Type
+  HiLink cssRenderAttr Type
   HiLink cssCommonAttr Type
+
   HiLink cssPseudoClassId PreProc
   HiLink cssPseudoClassLang Constant
   HiLink cssValueLength Number
@@ -277,6 +483,7 @@
   unlet main_syntax
 endif
 
-
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
 
diff -Naur vim73.orig/runtime/syntax/cucumber.vim vim73/runtime/syntax/cucumber.vim
--- vim73.orig/runtime/syntax/cucumber.vim	2010-05-21 09:42:35.000000000 +0000
+++ vim73/runtime/syntax/cucumber.vim	2013-08-04 19:09:09.273947879 +0000
@@ -2,60 +2,72 @@
 " Language:     Cucumber
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:    *.feature
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case match
 syn sync minlines=20
 
 let g:cucumber_languages = {
-      \"en": {"and": "And\\>", "background": "Background\\>", "but": "But\\>", "examples": "Scenarios\\>\\|Examples\\>", "feature": "Feature\\>", "given": "Given\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Outline\\>", "then": "Then\\>", "when": "When\\>"},
+      \"en": {"and": "And\\>", "background": "Background\\>", "but": "But\\>", "examples": "Scenarios\\>\\|Examples\\>", "feature": "Business Need\\>\\|Feature\\>\\|Ability\\>", "given": "Given\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Template\\>\\|Scenario Outline\\>", "then": "Then\\>", "when": "When\\>"},
       \"ar": {"and": "\\%u0648\\>", "background": "\\%u0627\\%u0644\\%u062e\\%u0644\\%u0641\\%u064a\\%u0629\\>", "but": "\\%u0644\\%u0643\\%u0646\\>", "examples": "\\%u0627\\%u0645\\%u062b\\%u0644\\%u0629\\>", "feature": "\\%u062e\\%u0627\\%u0635\\%u064a\\%u0629\\>", "given": "\\%u0628\\%u0641\\%u0631\\%u0636\\>", "scenario": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648\\>", "scenario_outline": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648 \\%u0645\\%u062e\\%u0637\\%u0637\\>", "then": "\\%u0627\\%u0630\\%u0627\\%u064b\\>\\|\\%u062b\\%u0645\\>", "when": "\\%u0639\\%u0646\\%u062f\\%u0645\\%u0627\\>\\|\\%u0645\\%u062a\\%u0649\\>"},
       \"bg": {"and": "\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u0438\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>", "but": "\\%u041d\\%u043e\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\>", "given": "\\%u0414\\%u0430\\%u0434\\%u0435\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0420\\%u0430\\%u043c\\%u043a\\%u0430 \\%u043d\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0430\\%u0442\\%u043e\\>"},
+      \"bm": {"and": "Dan\\>", "background": "Latar Belakang\\>", "but": "Tetapi\\>", "examples": "Contoh \\>", "feature": "Fungsi\\>", "given": "Bagi\\>", "scenario": "Senario\\>", "scenario_outline": "Menggariskan Senario \\>", "then": "Kemudian\\>", "when": "Apabila\\>"},
       \"ca": {"and": "I\\>", "background": "Antecedents\\>\\|Rerefons\\>", "but": "Per\\%u00f2\\>", "examples": "Exemples\\>", "feature": "Caracter\\%u00edstica\\>\\|Funcionalitat\\>", "given": "At\\%u00e8s\\>\\|Donada\\>\\|Donat\\>\\|Atesa\\>", "scenario": "Escenari\\>", "scenario_outline": "Esquema de l'escenari\\>", "then": "Aleshores\\>\\|Cal\\>", "when": "Quan\\>"},
-      \"cs": {"and": "A tak\\%u00e9\\>\\|A\\>", "background": "Pozad\\%u00ed\\>\\|Kontext\\>", "but": "Ale\\>", "examples": "P\\%u0159\\%u00edklady\\>", "feature": "Po\\%u017eadavek\\>", "given": "Pokud\\>", "scenario": "Sc\\%u00e9n\\%u00e1\\%u0159\\>", "scenario_outline": "N\\%u00e1\\%u010drt Sc\\%u00e9n\\%u00e1\\%u0159e\\>\\|Osnova sc\\%u00e9n\\%u00e1\\%u0159e\\>", "then": "Pak\\>", "when": "Kdy\\%u017e\\>"},
+      \"cs": {"and": "A tak\\%u00e9\\>\\|A\\>", "background": "Pozad\\%u00ed\\>\\|Kontext\\>", "but": "Ale\\>", "examples": "P\\%u0159\\%u00edklady\\>", "feature": "Po\\%u017eadavek\\>", "given": "Za p\\%u0159edpokladu\\>\\|Pokud\\>", "scenario": "Sc\\%u00e9n\\%u00e1\\%u0159\\>", "scenario_outline": "N\\%u00e1\\%u010drt Sc\\%u00e9n\\%u00e1\\%u0159e\\>\\|Osnova sc\\%u00e9n\\%u00e1\\%u0159e\\>", "then": "Pak\\>", "when": "Kdy\\%u017e\\>"},
       \"cy-GB": {"and": "A\\>", "background": "Cefndir\\>", "but": "Ond\\>", "examples": "Enghreifftiau\\>", "feature": "Arwedd\\>", "given": "Anrhegedig a\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Amlinellol\\>", "then": "Yna\\>", "when": "Pryd\\>"},
       \"da": {"and": "Og\\>", "background": "Baggrund\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskab\\>", "given": "Givet\\>", "scenario": "Scenarie\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
       \"de": {"and": "Und\\>", "background": "Grundlage\\>", "but": "Aber\\>", "examples": "Beispiele\\>", "feature": "Funktionalit\\%u00e4t\\>", "given": "Gegeben sei\\>\\|Angenommen\\>", "scenario": "Szenario\\>", "scenario_outline": "Szenariogrundriss\\>", "then": "Dann\\>", "when": "Wenn\\>"},
+      \"el": {"and": "\\%u039a\\%u03b1\\%u03b9\\>", "background": "\\%u03a5\\%u03c0\\%u03cc\\%u03b2\\%u03b1\\%u03b8\\%u03c1\\%u03bf\\>", "but": "\\%u0391\\%u03bb\\%u03bb\\%u03ac\\>", "examples": "\\%u03a0\\%u03b1\\%u03c1\\%u03b1\\%u03b4\\%u03b5\\%u03af\\%u03b3\\%u03bc\\%u03b1\\%u03c4\\%u03b1\\>\\|\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03b1\\>", "feature": "\\%u0394\\%u03c5\\%u03bd\\%u03b1\\%u03c4\\%u03cc\\%u03c4\\%u03b7\\%u03c4\\%u03b1\\>\\|\\%u039b\\%u03b5\\%u03b9\\%u03c4\\%u03bf\\%u03c5\\%u03c1\\%u03b3\\%u03af\\%u03b1\\>", "given": "\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5 \\%u03cc\\%u03c4\\%u03b9\\>\\|\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5\\>", "scenario": "\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03bf\\>", "scenario_outline": "\\%u03a0\\%u03b5\\%u03c1\\%u03b9\\%u03b3\\%u03c1\\%u03b1\\%u03c6\\%u03ae \\%u03a3\\%u03b5\\%u03bd\\%u03b1\\%u03c1\\%u03af\\%u03bf\\%u03c5\\>", "then": "\\%u03a4\\%u03cc\\%u03c4\\%u03b5\\>", "when": "\\%u038c\\%u03c4\\%u03b1\\%u03bd\\>"},
       \"en-Scouse": {"and": "An\\>", "background": "Dis is what went down\\>", "but": "Buh\\>", "examples": "Examples\\>", "feature": "Feature\\>", "given": "Youse know when youse got\\>\\|Givun\\>", "scenario": "The thing of it is\\>", "scenario_outline": "Wharrimean is\\>", "then": "Den youse gotta\\>\\|Dun\\>", "when": "Youse know like when\\>\\|Wun\\>"},
-      \"en-au": {"and": "N\\>", "background": "Background\\>", "but": "Cept\\>", "examples": "Cobber\\>", "feature": "Crikey\\>", "given": "Ya know how\\>", "scenario": "Mate\\>", "scenario_outline": "Blokes\\>", "then": "Ya gotta\\>", "when": "When\\>"},
+      \"en-au": {"and": "Too right\\>", "background": "First off\\>", "but": "Yeah nah\\>", "examples": "You'll wanna\\>", "feature": "Pretty much\\>", "given": "Y'know\\>", "scenario": "Awww, look mate\\>", "scenario_outline": "Reckon it's like\\>", "then": "But at the end of the day I reckon\\>", "when": "It's just unbelievable\\>"},
       \"en-lol": {"and": "AN\\>", "background": "B4\\>", "but": "BUT\\>", "examples": "EXAMPLZ\\>", "feature": "OH HAI\\>", "given": "I CAN HAZ\\>", "scenario": "MISHUN\\>", "scenario_outline": "MISHUN SRSLY\\>", "then": "DEN\\>", "when": "WEN\\>"},
+      \"en-old": {"and": "Ond\\>\\|7\\>", "background": "\\%u00c6r\\>\\|Aer\\>", "but": "Ac\\>", "examples": "Se \\%u00f0e\\>\\|Se \\%u00fee\\>\\|Se the\\>", "feature": "Hw\\%u00e6t\\>\\|Hwaet\\>", "given": "\\%u00d0urh\\>\\|\\%u00deurh\\>\\|Thurh\\>", "scenario": "Swa\\>", "scenario_outline": "Swa hw\\%u00e6r swa\\>\\|Swa hwaer swa\\>", "then": "\\%u00d0a \\%u00f0e\\>\\|\\%u00dea \\%u00fee\\>\\|\\%u00dea\\>\\|\\%u00d0a\\>\\|Tha the\\>\\|Tha\\>", "when": "\\%u00d0a\\>\\|\\%u00dea\\>\\|Tha\\>"},
+      \"en-pirate": {"and": "Aye\\>", "background": "Yo-ho-ho\\>", "but": "Avast!\\>", "examples": "Dead men tell no tales\\>", "feature": "Ahoy matey!\\>", "given": "Gangway!\\>", "scenario": "Heave to\\>", "scenario_outline": "Shiver me timbers\\>", "then": "Let go and haul\\>", "when": "Blimey!\\>"},
       \"en-tx": {"and": "And y'all\\>", "background": "Background\\>", "but": "But y'all\\>", "examples": "Examples\\>", "feature": "Feature\\>", "given": "Given y'all\\>", "scenario": "Scenario\\>", "scenario_outline": "All y'all\\>", "then": "Then y'all\\>", "when": "When y'all\\>"},
       \"eo": {"and": "Kaj\\>", "background": "Fono\\>", "but": "Sed\\>", "examples": "Ekzemploj\\>", "feature": "Trajto\\>", "given": "Donita\\%u0135o\\>", "scenario": "Scenaro\\>", "scenario_outline": "Konturo de la scenaro\\>", "then": "Do\\>", "when": "Se\\>"},
-      \"es": {"and": "Y\\>", "background": "Antecedentes\\>", "but": "Pero\\>", "examples": "Ejemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esquema del escenario\\>", "then": "Entonces\\>", "when": "Cuando\\>"},
+      \"es": {"and": "Y\\>", "background": "Antecedentes\\>", "but": "Pero\\>", "examples": "Ejemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esquema del escenario\\>", "then": "Entonces\\>", "when": "Cuando\\>"},
       \"et": {"and": "Ja\\>", "background": "Taust\\>", "but": "Kuid\\>", "examples": "Juhtumid\\>", "feature": "Omadus\\>", "given": "Eeldades\\>", "scenario": "Stsenaarium\\>", "scenario_outline": "Raamstsenaarium\\>", "then": "Siis\\>", "when": "Kui\\>"},
+      \"fa": {"and": "\\%u0648\\>", "background": "\\%u0632\\%u0645\\%u06cc\\%u0646\\%u0647\\>", "but": "\\%u0627\\%u0645\\%u0627\\>", "examples": "\\%u0646\\%u0645\\%u0648\\%u0646\\%u0647 \\%u0647\\%u0627\\>", "feature": "\\%u0648\\%u0650\\%u06cc\\%u0698\\%u06af\\%u06cc\\>", "given": "\\%u0628\\%u0627 \\%u0641\\%u0631\\%u0636\\>", "scenario": "\\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\>", "scenario_outline": "\\%u0627\\%u0644\\%u06af\\%u0648\\%u06cc \\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\>", "then": "\\%u0622\\%u0646\\%u06af\\%u0627\\%u0647\\>", "when": "\\%u0647\\%u0646\\%u06af\\%u0627\\%u0645\\%u06cc\\>"},
       \"fi": {"and": "Ja\\>", "background": "Tausta\\>", "but": "Mutta\\>", "examples": "Tapaukset\\>", "feature": "Ominaisuus\\>", "given": "Oletetaan\\>", "scenario": "Tapaus\\>", "scenario_outline": "Tapausaihio\\>", "then": "Niin\\>", "when": "Kun\\>"},
-      \"fr": {"and": "Et\\>", "background": "Contexte\\>", "but": "Mais\\>", "examples": "Exemples\\>", "feature": "Fonctionnalit\\%u00e9\\>", "given": "Etant donn\\%u00e9\\>\\|Soit\\>", "scenario": "Sc\\%u00e9nario\\>", "scenario_outline": "Plan du sc\\%u00e9nario\\>\\|Plan du Sc\\%u00e9nario\\>", "then": "Alors\\>", "when": "Lorsqu'\\|Lorsque\\>\\|Quand\\>"},
+      \"fr": {"and": "Et\\>", "background": "Contexte\\>", "but": "Mais\\>", "examples": "Exemples\\>", "feature": "Fonctionnalit\\%u00e9\\>", "given": "\\%u00c9tant donn\\%u00e9es\\>\\|\\%u00c9tant donn\\%u00e9s\\>\\|\\%u00c9tant donn\\%u00e9e\\>\\|\\%u00c9tant donn\\%u00e9\\>\\|Etant donn\\%u00e9es\\>\\|Etant donn\\%u00e9s\\>\\|Etant donn\\%u00e9e\\>\\|Etant donn\\%u00e9\\>\\|Soit\\>", "scenario": "Sc\\%u00e9nario\\>", "scenario_outline": "Plan du sc\\%u00e9nario\\>\\|Plan du Sc\\%u00e9nario\\>", "then": "Alors\\>", "when": "Lorsqu'\\|Lorsque\\>\\|Quand\\>"},
+      \"gl": {"and": "E\\>", "background": "Contexto\\>", "but": "Mais\\>\\|Pero\\>", "examples": "Exemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esbozo do escenario\\>", "then": "Ent\\%u00f3n\\>\\|Logo\\>", "when": "Cando\\>"},
       \"he": {"and": "\\%u05d5\\%u05d2\\%u05dd\\>", "background": "\\%u05e8\\%u05e7\\%u05e2\\>", "but": "\\%u05d0\\%u05d1\\%u05dc\\>", "examples": "\\%u05d3\\%u05d5\\%u05d2\\%u05de\\%u05d0\\%u05d5\\%u05ea\\>", "feature": "\\%u05ea\\%u05db\\%u05d5\\%u05e0\\%u05d4\\>", "given": "\\%u05d1\\%u05d4\\%u05d9\\%u05e0\\%u05ea\\%u05df\\>", "scenario": "\\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9\\>", "scenario_outline": "\\%u05ea\\%u05d1\\%u05e0\\%u05d9\\%u05ea \\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9\\>", "then": "\\%u05d0\\%u05d6\\%u05d9\\>\\|\\%u05d0\\%u05d6\\>", "when": "\\%u05db\\%u05d0\\%u05e9\\%u05e8\\>"},
+      \"hi": {"and": "\\%u0924\\%u0925\\%u093e\\>\\|\\%u0914\\%u0930\\>", "background": "\\%u092a\\%u0943\\%u0937\\%u094d\\%u0920\\%u092d\\%u0942\\%u092e\\%u093f\\>", "but": "\\%u092a\\%u0930\\>", "examples": "\\%u0909\\%u0926\\%u093e\\%u0939\\%u0930\\%u0923\\>", "feature": "\\%u0930\\%u0942\\%u092a \\%u0932\\%u0947\\%u0916\\>", "given": "\\%u091a\\%u0942\\%u0902\\%u0915\\%u093f\\>\\|\\%u092f\\%u0926\\%u093f\\>\\|\\%u0905\\%u0917\\%u0930\\>", "scenario": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f\\>", "scenario_outline": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f \\%u0930\\%u0942\\%u092a\\%u0930\\%u0947\\%u0916\\%u093e\\>", "then": "\\%u0924\\%u092c\\>", "when": "\\%u091c\\%u092c\\>"},
       \"hr": {"and": "I\\>", "background": "Pozadina\\>", "but": "Ali\\>", "examples": "Scenariji\\>\\|Primjeri\\>", "feature": "Mogu\\%u0107nost\\>\\|Mogucnost\\>\\|Osobina\\>", "given": "Zadano\\>\\|Zadani\\>\\|Zadan\\>", "scenario": "Scenarij\\>", "scenario_outline": "Koncept\\>\\|Skica\\>", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"},
-      \"hu": {"and": "\\%u00c9s\\>", "background": "H\\%u00e1tt\\%u00e9r\\>", "but": "De\\>", "examples": "P\\%u00e9ld\\%u00e1k\\>", "feature": "Jellemz\\%u0151\\>", "given": "Ha\\>", "scenario": "Forgat\\%u00f3k\\%u00f6nyv\\>", "scenario_outline": "Forgat\\%u00f3k\\%u00f6nyv v\\%u00e1zlat\\>", "then": "Akkor\\>", "when": "Majd\\>"},
+      \"hu": {"and": "\\%u00c9s\\>", "background": "H\\%u00e1tt\\%u00e9r\\>", "but": "De\\>", "examples": "P\\%u00e9ld\\%u00e1k\\>", "feature": "Jellemz\\%u0151\\>", "given": "Amennyiben\\>\\|Adott\\>", "scenario": "Forgat\\%u00f3k\\%u00f6nyv\\>", "scenario_outline": "Forgat\\%u00f3k\\%u00f6nyv v\\%u00e1zlat\\>", "then": "Akkor\\>", "when": "Amikor\\>\\|Majd\\>\\|Ha\\>"},
       \"id": {"and": "Dan\\>", "background": "Dasar\\>", "but": "Tapi\\>", "examples": "Contoh\\>", "feature": "Fitur\\>", "given": "Dengan\\>", "scenario": "Skenario\\>", "scenario_outline": "Skenario konsep\\>", "then": "Maka\\>", "when": "Ketika\\>"},
-      \"it": {"and": "E\\>", "background": "Contesto\\>", "but": "Ma\\>", "examples": "Esempi\\>", "feature": "Funzionalit\\%u00e0\\>", "given": "Dato\\>", "scenario": "Scenario\\>", "scenario_outline": "Schema dello scenario\\>", "then": "Allora\\>", "when": "Quando\\>"},
+      \"is": {"and": "Og\\>", "background": "Bakgrunnur\\>", "but": "En\\>", "examples": "Atbur\\%u00f0ar\\%u00e1sir\\>\\|D\\%u00e6mi\\>", "feature": "Eiginleiki\\>", "given": "Ef\\>", "scenario": "Atbur\\%u00f0ar\\%u00e1s\\>", "scenario_outline": "L\\%u00fdsing Atbur\\%u00f0ar\\%u00e1sar\\>\\|L\\%u00fdsing D\\%u00e6ma\\>", "then": "\\%u00de\\%u00e1\\>", "when": "\\%u00deegar\\>"},
+      \"it": {"and": "E\\>", "background": "Contesto\\>", "but": "Ma\\>", "examples": "Esempi\\>", "feature": "Funzionalit\\%u00e0\\>", "given": "Dato\\>\\|Data\\>\\|Dati\\>\\|Date\\>", "scenario": "Scenario\\>", "scenario_outline": "Schema dello scenario\\>", "then": "Allora\\>", "when": "Quando\\>"},
       \"ja": {"and": "\\%u304b\\%u3064", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u3057\\%u304b\\%u3057\\|\\%u305f\\%u3060\\%u3057\\|\\%u4f46\\%u3057", "examples": "\\%u30b5\\%u30f3\\%u30d7\\%u30eb\\>\\|\\%u4f8b\\>", "feature": "\\%u30d5\\%u30a3\\%u30fc\\%u30c1\\%u30e3\\>\\|\\%u6a5f\\%u80fd\\>", "given": "\\%u524d\\%u63d0", "scenario": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\>", "scenario_outline": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30a2\\%u30a6\\%u30c8\\%u30e9\\%u30a4\\%u30f3\\>\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\%u30fc\\%u30c8\\>\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\>\\|\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\>", "then": "\\%u306a\\%u3089\\%u3070", "when": "\\%u3082\\%u3057"},
       \"ko": {"and": "\\%uadf8\\%ub9ac\\%uace0", "background": "\\%ubc30\\%uacbd\\>", "but": "\\%ud558\\%uc9c0\\%ub9cc\\|\\%ub2e8", "examples": "\\%uc608\\>", "feature": "\\%uae30\\%ub2a5\\>", "given": "\\%uc870\\%uac74\\|\\%uba3c\\%uc800", "scenario": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624\\>", "scenario_outline": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624 \\%uac1c\\%uc694\\>", "then": "\\%uadf8\\%ub7ec\\%uba74", "when": "\\%ub9cc\\%uc77c\\|\\%ub9cc\\%uc57d"},
       \"lt": {"and": "Ir\\>", "background": "Kontekstas\\>", "but": "Bet\\>", "examples": "Pavyzd\\%u017eiai\\>\\|Scenarijai\\>\\|Variantai\\>", "feature": "Savyb\\%u0117\\>", "given": "Duota\\>", "scenario": "Scenarijus\\>", "scenario_outline": "Scenarijaus \\%u0161ablonas\\>", "then": "Tada\\>", "when": "Kai\\>"},
       \"lu": {"and": "an\\>\\|a\\>", "background": "Hannergrond\\>", "but": "m\\%u00e4\\>\\|awer\\>", "examples": "Beispiller\\>", "feature": "Funktionalit\\%u00e9it\\>", "given": "ugeholl\\>", "scenario": "Szenario\\>", "scenario_outline": "Plang vum Szenario\\>", "then": "dann\\>", "when": "wann\\>"},
       \"lv": {"and": "Un\\>", "background": "Situ\\%u0101cija\\>\\|Konteksts\\>", "but": "Bet\\>", "examples": "Piem\\%u0113ri\\>\\|Paraugs\\>", "feature": "Funkcionalit\\%u0101te\\>\\|F\\%u012b\\%u010da\\>", "given": "Kad\\>", "scenario": "Scen\\%u0101rijs\\>", "scenario_outline": "Scen\\%u0101rijs p\\%u0113c parauga\\>", "then": "Tad\\>", "when": "Ja\\>"},
       \"nl": {"and": "En\\>", "background": "Achtergrond\\>", "but": "Maar\\>", "examples": "Voorbeelden\\>", "feature": "Functionaliteit\\>", "given": "Gegeven\\>\\|Stel\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstract Scenario\\>", "then": "Dan\\>", "when": "Als\\>"},
-      \"no": {"and": "Og\\>", "background": "Bakgrunn\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskap\\>", "given": "Gitt\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
-      \"pl": {"and": "Oraz\\>", "background": "Za\\%u0142o\\%u017cenia\\>", "but": "Ale\\>", "examples": "Przyk\\%u0142ady\\>", "feature": "W\\%u0142a\\%u015bciwo\\%u015b\\%u0107\\>", "given": "Zak\\%u0142adaj\\%u0105c\\>", "scenario": "Scenariusz\\>", "scenario_outline": "Szablon scenariusza\\>", "then": "Wtedy\\>", "when": "Je\\%u017celi\\>"},
-      \"pt": {"and": "E\\>", "background": "Contexto\\>", "but": "Mas\\>", "examples": "Exemplos\\>", "feature": "Funcionalidade\\>", "given": "Dado\\>", "scenario": "Cen\\%u00e1rio\\>\\|Cenario\\>", "scenario_outline": "Esquema do Cen\\%u00e1rio\\>\\|Esquema do Cenario\\>", "then": "Ent\\%u00e3o\\>\\|Entao\\>", "when": "Quando\\>"},
-      \"ro": {"and": "Si\\>", "background": "Conditii\\>", "but": "Dar\\>", "examples": "Exemplele\\>", "feature": "Functionalitate\\>", "given": "Daca\\>", "scenario": "Scenariu\\>", "scenario_outline": "Scenariul de sablon\\>", "then": "Atunci\\>", "when": "Cand\\>"},
-      \"ro-RO": {"and": "\\%u0218i\\>", "background": "Condi\\%u0163ii\\>", "but": "Dar\\>", "examples": "Exemplele\\>", "feature": "Func\\%u021bionalitate\\>", "given": "Dac\\%u0103\\>", "scenario": "Scenariu\\>", "scenario_outline": "Scenariul de \\%u015fablon\\>", "then": "Atunci\\>", "when": "C\\%u00e2nd\\>"},
-      \"ru": {"and": "\\%u041a \\%u0442\\%u043e\\%u043c\\%u0443 \\%u0436\\%u0435\\>\\|\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u044b\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>", "but": "\\%u041d\\%u043e\\>\\|\\%u0410\\>", "examples": "\\%u0417\\%u043d\\%u0430\\%u0447\\%u0435\\%u043d\\%u0438\\%u044f\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>\\|\\%u0424\\%u0438\\%u0447\\%u0430\\>", "given": "\\%u0414\\%u043e\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u0415\\%u0441\\%u043b\\%u0438\\>"},
-      \"sk": {"and": "A\\>", "background": "Pozadie\\>", "but": "Ale\\>", "examples": "Pr\\%u00edklady\\>", "feature": "Po\\%u017eiadavka\\>", "given": "Pokia\\%u013e\\>", "scenario": "Scen\\%u00e1r\\>", "scenario_outline": "N\\%u00e1\\%u010drt Scen\\%u00e1ru\\>", "then": "Tak\\>", "when": "Ke\\%u010f\\>"},
+      \"no": {"and": "Og\\>", "background": "Bakgrunn\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskap\\>", "given": "Gitt\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>\\|Scenariomal\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
+      \"pl": {"and": "Oraz\\>\\|I\\>", "background": "Za\\%u0142o\\%u017cenia\\>", "but": "Ale\\>", "examples": "Przyk\\%u0142ady\\>", "feature": "W\\%u0142a\\%u015bciwo\\%u015b\\%u0107\\>\\|Potrzeba biznesowa\\>\\|Funkcja\\>\\|Aspekt\\>", "given": "Zak\\%u0142adaj\\%u0105c\\>\\|Maj\\%u0105c\\>", "scenario": "Scenariusz\\>", "scenario_outline": "Szablon scenariusza\\>", "then": "Wtedy\\>", "when": "Je\\%u017celi\\>\\|Je\\%u015bli\\>\\|Kiedy\\>\\|Gdy\\>"},
+      \"pt": {"and": "E\\>", "background": "Cen\\%u00e1rio de Fundo\\>\\|Cenario de Fundo\\>\\|Contexto\\>\\|Fundo\\>", "but": "Mas\\>", "examples": "Cen\\%u00e1rios\\>\\|Exemplos\\>\\|Cenarios\\>", "feature": "Caracter\\%u00edstica\\>\\|Funcionalidade\\>\\|Caracteristica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Cen\\%u00e1rio\\>\\|Cenario\\>", "scenario_outline": "Delinea\\%u00e7\\%u00e3o do Cen\\%u00e1rio\\>\\|Esquema do Cen\\%u00e1rio\\>\\|Delineacao do Cenario\\>\\|Esquema do Cenario\\>", "then": "Ent\\%u00e3o\\>\\|Entao\\>", "when": "Quando\\>"},
+      \"ro": {"and": "\\%u015ei\\>\\|\\%u0218i\\>\\|Si\\>", "background": "Context\\>", "but": "Dar\\>", "examples": "Exemple\\>", "feature": "Func\\%u0163ionalitate\\>\\|Func\\%u021bionalitate\\>\\|Functionalitate\\>", "given": "Da\\%u0163i fiind\\>\\|Da\\%u021bi fiind\\>\\|Dati fiind\\>\\|Date fiind\\>\\|Dat fiind\\>", "scenario": "Scenariu\\>", "scenario_outline": "Structur\\%u0103 scenariu\\>\\|Structura scenariu\\>", "then": "Atunci\\>", "when": "C\\%u00e2nd\\>\\|Cand\\>"},
+      \"ru": {"and": "\\%u041a \\%u0442\\%u043e\\%u043c\\%u0443 \\%u0436\\%u0435\\>\\|\\%u0422\\%u0430\\%u043a\\%u0436\\%u0435\\>\\|\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u044b\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>\\|\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\>", "but": "\\%u041d\\%u043e\\>\\|\\%u0410\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u044b\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>\\|\\%u0421\\%u0432\\%u043e\\%u0439\\%u0441\\%u0442\\%u0432\\%u043e\\>\\|\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u044f\\>", "given": "\\%u0414\\%u043e\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\>\\|\\%u041f\\%u0443\\%u0441\\%u0442\\%u044c\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f\\>", "then": "\\%u0422\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0415\\%u0441\\%u043b\\%u0438\\>"},
+      \"sk": {"and": "A z\\%u00e1rove\\%u0148\\>\\|A taktie\\%u017e\\>\\|A tie\\%u017e\\>\\|A\\>", "background": "Pozadie\\>", "but": "Ale\\>", "examples": "Pr\\%u00edklady\\>", "feature": "Po\\%u017eiadavka\\>\\|Vlastnos\\%u0165\\>\\|Funkcia\\>", "given": "Za predpokladu\\>\\|Pokia\\%u013e\\>", "scenario": "Scen\\%u00e1r\\>", "scenario_outline": "N\\%u00e1\\%u010drt Scen\\%u00e1ru\\>\\|N\\%u00e1\\%u010drt Scen\\%u00e1ra\\>\\|Osnova Scen\\%u00e1ra\\>", "then": "Potom\\>\\|Tak\\>", "when": "Ke\\%u010f\\>\\|Ak\\>"},
       \"sr-Cyrl": {"and": "\\%u0418\\>", "background": "\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\>\\|\\%u041f\\%u043e\\%u0437\\%u0430\\%u0434\\%u0438\\%u043d\\%u0430\\>\\|\\%u041e\\%u0441\\%u043d\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0438\\>", "examples": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0438\\>\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\>\\|\\%u041c\\%u043e\\%u0433\\%u0443\\%u045b\\%u043d\\%u043e\\%u0441\\%u0442\\>\\|\\%u041e\\%u0441\\%u043e\\%u0431\\%u0438\\%u043d\\%u0430\\>", "given": "\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u043e\\>\\|\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u0435\\>\\|\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u0438\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0430\\>\\|\\%u041a\\%u043e\\%u043d\\%u0446\\%u0435\\%u043f\\%u0442\\>\\|\\%u0421\\%u043a\\%u0438\\%u0446\\%u0430\\>", "then": "\\%u041e\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u041a\\%u0430\\%u0434\\%u0430\\>\\|\\%u041a\\%u0430\\%u0434\\>"},
       \"sr-Latn": {"and": "I\\>", "background": "Kontekst\\>\\|Pozadina\\>\\|Osnova\\>", "but": "Ali\\>", "examples": "Scenariji\\>\\|Primeri\\>", "feature": "Mogu\\%u0107nost\\>\\|Funkcionalnost\\>\\|Mogucnost\\>\\|Osobina\\>", "given": "Zadato\\>\\|Zadate\\>\\|Zatati\\>", "scenario": "Scenario\\>\\|Primer\\>", "scenario_outline": "Struktura scenarija\\>\\|Koncept\\>\\|Skica\\>", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"},
-      \"sv": {"and": "Och\\>", "background": "Bakgrund\\>", "but": "Men\\>", "examples": "Exempel\\>", "feature": "Egenskap\\>", "given": "Givet\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e4r\\>"},
+      \"sv": {"and": "Och\\>", "background": "Bakgrund\\>", "but": "Men\\>", "examples": "Exempel\\>", "feature": "Egenskap\\>", "given": "Givet\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>\\|Scenariomall\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e4r\\>"},
+      \"th": {"and": "\\%u0e41\\%u0e25\\%u0e30\\>", "background": "\\%u0e41\\%u0e19\\%u0e27\\%u0e04\\%u0e34\\%u0e14\\>", "but": "\\%u0e41\\%u0e15\\%u0e48\\>", "examples": "\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>\\|\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e15\\%u0e31\\%u0e27\\%u0e2d\\%u0e22\\%u0e48\\%u0e32\\%u0e07\\>", "feature": "\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e15\\%u0e49\\%u0e2d\\%u0e07\\%u0e01\\%u0e32\\%u0e23\\%u0e17\\%u0e32\\%u0e07\\%u0e18\\%u0e38\\%u0e23\\%u0e01\\%u0e34\\%u0e08\\>\\|\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e2a\\%u0e32\\%u0e21\\%u0e32\\%u0e23\\%u0e16\\>\\|\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2b\\%u0e25\\%u0e31\\%u0e01\\>", "given": "\\%u0e01\\%u0e33\\%u0e2b\\%u0e19\\%u0e14\\%u0e43\\%u0e2b\\%u0e49\\>", "scenario": "\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>", "scenario_outline": "\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2a\\%u0e23\\%u0e49\\%u0e32\\%u0e07\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>\\|\\%u0e2a\\%u0e23\\%u0e38\\%u0e1b\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>", "then": "\\%u0e14\\%u0e31\\%u0e07\\%u0e19\\%u0e31\\%u0e49\\%u0e19\\>", "when": "\\%u0e40\\%u0e21\\%u0e37\\%u0e48\\%u0e2d\\>"},
+      \"tl": {"and": "\\%u0c2e\\%u0c30\\%u0c3f\\%u0c2f\\%u0c41\\>", "background": "\\%u0c28\\%u0c47\\%u0c2a\\%u0c25\\%u0c4d\\%u0c2f\\%u0c02\\>", "but": "\\%u0c15\\%u0c3e\\%u0c28\\%u0c3f\\>", "examples": "\\%u0c09\\%u0c26\\%u0c3e\\%u0c39\\%u0c30\\%u0c23\\%u0c32\\%u0c41\\>", "feature": "\\%u0c17\\%u0c41\\%u0c23\\%u0c2e\\%u0c41\\>", "given": "\\%u0c1a\\%u0c46\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c2c\\%u0c21\\%u0c3f\\%u0c28\\%u0c26\\%u0c3f\\>", "scenario": "\\%u0c38\\%u0c28\\%u0c4d\\%u0c28\\%u0c3f\\%u0c35\\%u0c47\\%u0c36\\%u0c02\\>", "scenario_outline": "\\%u0c15\\%u0c25\\%u0c28\\%u0c02\\>", "then": "\\%u0c05\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c41\\%u0c21\\%u0c41\\>", "when": "\\%u0c08 \\%u0c2a\\%u0c30\\%u0c3f\\%u0c38\\%u0c4d\\%u0c25\\%u0c3f\\%u0c24\\%u0c3f\\%u0c32\\%u0c4b\\>"},
       \"tr": {"and": "Ve\\>", "background": "Ge\\%u00e7mi\\%u015f\\>", "but": "Fakat\\>\\|Ama\\>", "examples": "\\%u00d6rnekler\\>", "feature": "\\%u00d6zellik\\>", "given": "Diyelim ki\\>", "scenario": "Senaryo\\>", "scenario_outline": "Senaryo tasla\\%u011f\\%u0131\\>", "then": "O zaman\\>", "when": "E\\%u011fer ki\\>"},
-      \"uk": {"and": "\\%u0406\\>", "background": "\\%u041f\\%u0435\\%u0440\\%u0435\\%u0434\\%u0443\\%u043c\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0435\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0456\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e, \\%u0449\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e\\>\\|\\%u041d\\%u0435\\%u0445\\%u0430\\%u0439\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u044e\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u042f\\%u043a\\%u0449\\%u043e\\>"},
+      \"tt": {"and": "\\%u04ba\\%u04d9\\%u043c\\>\\|\\%u0412\\%u04d9\\>", "background": "\\%u041a\\%u0435\\%u0440\\%u0435\\%u0448\\>", "but": "\\%u041b\\%u04d9\\%u043a\\%u0438\\%u043d\\>\\|\\%u04d8\\%u043c\\%u043c\\%u0430\\>", "examples": "\\%u04ae\\%u0440\\%u043d\\%u04d9\\%u043a\\%u043b\\%u04d9\\%u0440\\>\\|\\%u041c\\%u0438\\%u0441\\%u0430\\%u043b\\%u043b\\%u0430\\%u0440\\>", "feature": "\\%u04ae\\%u0437\\%u0435\\%u043d\\%u0447\\%u04d9\\%u043b\\%u0435\\%u043a\\%u043b\\%u0435\\%u043b\\%u0435\\%u043a\\>\\|\\%u041c\\%u04e9\\%u043c\\%u043a\\%u0438\\%u043d\\%u043b\\%u0435\\%u043a\\>", "given": "\\%u04d8\\%u0439\\%u0442\\%u0438\\%u043a\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\%u043d\\%u044b\\%u04a3 \\%u0442\\%u04e9\\%u0437\\%u0435\\%u043b\\%u0435\\%u0448\\%u0435\\>", "then": "\\%u041d\\%u04d9\\%u0442\\%u0438\\%u0497\\%u04d9\\%u0434\\%u04d9\\>", "when": "\\%u04d8\\%u0433\\%u04d9\\%u0440\\>"},
+      \"uk": {"and": "\\%u0410 \\%u0442\\%u0430\\%u043a\\%u043e\\%u0436\\>\\|\\%u0422\\%u0430\\>\\|\\%u0406\\>", "background": "\\%u041f\\%u0435\\%u0440\\%u0435\\%u0434\\%u0443\\%u043c\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0435\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0456\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e, \\%u0449\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e\\>\\|\\%u041d\\%u0435\\%u0445\\%u0430\\%u0439\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u044e\\>", "then": "\\%u0422\\%u043e\\%u0434\\%u0456\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u042f\\%u043a\\%u0449\\%u043e\\>\\|\\%u041a\\%u043e\\%u043b\\%u0438\\>"},
       \"uz": {"and": "\\%u0412\\%u0430\\>", "background": "\\%u0422\\%u0430\\%u0440\\%u0438\\%u0445\\>", "but": "\\%u041b\\%u0435\\%u043a\\%u0438\\%u043d\\>\\|\\%u0411\\%u0438\\%u0440\\%u043e\\%u043a\\>\\|\\%u0410\\%u043c\\%u043c\\%u043e\\>", "examples": "\\%u041c\\%u0438\\%u0441\\%u043e\\%u043b\\%u043b\\%u0430\\%u0440\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u0410\\%u0433\\%u0430\\%u0440\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439 \\%u0441\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430\\%u0441\\%u0438\\>", "then": "\\%u0423\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u0410\\%u0433\\%u0430\\%u0440\\>"},
       \"vi": {"and": "V\\%u00e0\\>", "background": "B\\%u1ed1i c\\%u1ea3nh\\>", "but": "Nh\\%u01b0ng\\>", "examples": "D\\%u1eef li\\%u1ec7u\\>", "feature": "T\\%u00ednh n\\%u0103ng\\>", "given": "Bi\\%u1ebft\\>\\|Cho\\>", "scenario": "T\\%u00ecnh hu\\%u1ed1ng\\>\\|K\\%u1ecbch b\\%u1ea3n\\>", "scenario_outline": "Khung t\\%u00ecnh hu\\%u1ed1ng\\>\\|Khung k\\%u1ecbch b\\%u1ea3n\\>", "then": "Th\\%u00ec\\>", "when": "Khi\\>"},
-      \"zh-CN": {"and": "\\%u800c\\%u4e14", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982", "scenario": "\\%u573a\\%u666f\\>", "scenario_outline": "\\%u573a\\%u666f\\%u5927\\%u7eb2\\>", "then": "\\%u90a3\\%u4e48", "when": "\\%u5f53"},
-      \"zh-TW": {"and": "\\%u800c\\%u4e14\\|\\%u4e26\\%u4e14", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u8a2d", "scenario": "\\%u5834\\%u666f\\>\\|\\%u5287\\%u672c\\>", "scenario_outline": "\\%u5834\\%u666f\\%u5927\\%u7db1\\>\\|\\%u5287\\%u672c\\%u5927\\%u7db1\\>", "then": "\\%u90a3\\%u9ebc", "when": "\\%u7576"}}
+      \"zh-CN": {"and": "\\%u800c\\%u4e14\\|\\%u5e76\\%u4e14\\|\\%u540c\\%u65f6", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8bbe\\|\\%u5047\\%u5b9a", "scenario": "\\%u573a\\%u666f\\>\\|\\%u5267\\%u672c\\>", "scenario_outline": "\\%u573a\\%u666f\\%u5927\\%u7eb2\\>\\|\\%u5267\\%u672c\\%u5927\\%u7eb2\\>", "then": "\\%u90a3\\%u4e48", "when": "\\%u5f53"},
+      \"zh-TW": {"and": "\\%u800c\\%u4e14\\|\\%u4e26\\%u4e14\\|\\%u540c\\%u6642", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8a2d\\|\\%u5047\\%u5b9a", "scenario": "\\%u5834\\%u666f\\>\\|\\%u5287\\%u672c\\>", "scenario_outline": "\\%u5834\\%u666f\\%u5927\\%u7db1\\>\\|\\%u5287\\%u672c\\%u5927\\%u7db1\\>", "then": "\\%u90a3\\%u9ebc", "when": "\\%u7576"}}
 
 function! s:pattern(key)
   let language = matchstr(getline(1),'#\s*language:\s*\zs\S\+')
@@ -71,13 +83,15 @@
 endfunction
 
 function! s:Add(name)
-  let next = " skipempty skipwhite nextgroup=".join(map(["Region","AndRegion","ButRegion","Comment","Table"],'"cucumber".a:name.v:val'),",")
+  let next = " skipempty skipwhite nextgroup=".join(map(["Region","AndRegion","ButRegion","Comment","String","Table"],'"cucumber".a:name.v:val'),",")
   exe "syn region cucumber".a:name.'Region matchgroup=cucumber'.a:name.' start="\%(^\s*\)\@<=\%('.s:pattern(tolower(a:name)).'\)" end="$"'.next
   exe 'syn region cucumber'.a:name.'AndRegion matchgroup=cucumber'.a:name.'And start="\%(^\s*\)\@<='.s:pattern('and').'" end="$" contained'.next
   exe 'syn region cucumber'.a:name.'ButRegion matchgroup=cucumber'.a:name.'But start="\%(^\s*\)\@<='.s:pattern('but').'" end="$" contained'.next
   exe 'syn match cucumber'.a:name.'Comment "\%(^\s*\)\@<=#.*" contained'.next
+  exe 'syn region cucumber'.a:name.'String start=+\%(^\s*\)\@<="""+ end=+"""+ contained'.next
   exe 'syn match cucumber'.a:name.'Table "\%(^\s*\)\@<=|.*" contained contains=cucumberDelimiter'.next
   exe 'hi def link cucumber'.a:name.'Comment cucumberComment'
+  exe 'hi def link cucumber'.a:name.'String cucumberString'
   exe 'hi def link cucumber'.a:name.'But cucumber'.a:name.'And'
   exe 'hi def link cucumber'.a:name.'And cucumber'.a:name
   exe 'syn cluster cucumberStepRegions add=cucumber'.a:name.'Region,cucumber'.a:name.'AndRegion,cucumber'.a:name.'ButRegion'
@@ -97,9 +111,8 @@
 
 syn match   cucumberPlaceholder   "<[^<>]*>" contained containedin=@cucumberStepRegions
 syn match   cucumberExampleTable  "\%(^\s*\)\@<=|.*" contains=cucumberDelimiter
-syn match   cucumberDelimiter     "|" contained
-syn match   cucumberTags          "\%(^\s*\)\@<=\%(@[^@[:space:]]\+\s\+\)*@[^@[:space:]]\+\s*$"
-syn region  cucumberString   start=+\%(^\s*\)\@<="""+ end=+"""+
+syn match   cucumberDelimiter     "\\\@<!\%(\\\\\)*\zs|" contained
+syn match   cucumberTags          "\%(^\s*\)\@<=\%(@[^@[:space:]]\+\s\+\)*@[^@[:space:]]\+\s*$" contains=@NoSpell
 
 call s:Add('Then')
 call s:Add('When')
@@ -123,4 +136,7 @@
 
 let b:current_syntax = "cucumber"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set sts=2 sw=2:
diff -Naur vim73.orig/runtime/syntax/cupl.vim vim73/runtime/syntax/cupl.vim
--- vim73.orig/runtime/syntax/cupl.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/cupl.vim	2013-08-04 19:09:09.277281202 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	CUPL
-" Maintainer:	John Cook <john.cook@kla-tencor.com>
-" Last Change:	2001 Apr 25
+" Maintainer:	John Cook <johncook3@gmail.com>
+" Last Change:	2011 Dec 27
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " this language is oblivious to case.
 syn case ignore
 
@@ -127,4 +130,8 @@
 endif
 
 let b:current_syntax = "cupl"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:ts=8
diff -Naur vim73.orig/runtime/syntax/cweb.vim vim73/runtime/syntax/cweb.vim
--- vim73.orig/runtime/syntax/cweb.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/cweb.vim	2013-08-04 19:09:09.280614525 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	CWEB
 " Maintainer:	Andreas Scherer <andreas.scherer@pobox.com>
-" Last Change:	April 30, 2001
+" Last Change:	2011 Dec 25 by Thilo Six
 
 " Details of the CWEB language can be found in the article by Donald E. Knuth
 " and Silvio Levy, "The CWEB System of Structured Documentation", included as
@@ -36,6 +36,9 @@
 " C/C++ section of a CWEB chunk or in inner C/C++ context in "|...|" groups.
 syntax include @webIncludedC <sfile>:p:h/cpp.vim
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Inner C/C++ context (ICC) should be quite simple as it's comprised of
 " material in "|...|"; however the naive definition for this region would
 " hickup at the innocious "\|" TeX macro.  Note: For the time being we expect
@@ -77,4 +80,6 @@
 
 let b:current_syntax = "cweb"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/d.vim vim73/runtime/syntax/d.vim
--- vim73.orig/runtime/syntax/d.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/d.vim	2013-08-04 19:09:09.283947849 +0000
@@ -1,18 +1,23 @@
-" Vim syntax file for the D programming language (version 1.053 and 2.039).
+" Vim syntax file for the D programming language (version 1.076 and 2.063).
 "
-" Language:	D
-" Maintainer:	Jason Mills<jasonmills@nf.sympatico.ca>
-" Last Change:	2010 Jan 07
-" Version:	0.18
+" Language:     D
+" Maintainer:   Jesse Phillips <Jesse.K.Phillips+D@gmail.com>
+" Last Change:  2013 May 21
+" Version:      0.25
 "
 " Contributors:
-"   - Kirk McDonald: version 0.17 updates, with minor modifications
-"     (http://paste.dprogramming.com/dplmb7qx?view=hidelines)
-"   - Jesse K. Phillips: patch for some keywords and attributes (annotations), with modifications
-"   - Tim Keating: patch to fix a bug in highlighting the `\` literal
-"   - Frank Benoit: Fixed a bug that caused some identifiers and numbers to highlight as octal number errors.
+"   - Jason Mills: original Maintainer
+"   - Kirk McDonald
+"   - Tim Keating
+"   - Frank Benoit
+"   - Shougo Matsushita
+"   - Ellery Newcomer
+"   - Steven N. Oliver
+"   - Sohgo Takeuchi
+"   - Robert Clipsham
 "
-" Please email me with bugs, comments, and suggestions.
+" Please submit bugs/comments/suggestions to the github repo: 
+" https://github.com/JesseKPhillips/d.vim
 "
 " Options:
 "   d_comment_strings - Set to highlight strings and numbers in comments.
@@ -20,107 +25,174 @@
 "   d_hl_operator_overload - Set to highlight D's specially named functions
 "   that when overloaded implement unary and binary operators (e.g. opCmp).
 "
-" Todo:
-"   - Determine a better method of sync'ing than simply setting minlines
-"   to a large number.
-"
-"   - Several keywords (e.g., in, out, inout) are both storage class and
-"   statements, depending on their context. Perhaps use pattern matching to
-"   figure out which and highlight appropriately. For now I have made such
-"   keywords storage classes so their highlighting is consistent with other
-"   keywords that are commonly used with them, but are true storage classes,
-"   such as lazy. Similarly, I made some statement keywords (e.g. body) storage
-"   classes.
-"
-"   - Mark contents of the asm statement body as special
-"
-"   - Maybe highlight the 'exit', 'failure', and 'success' parts of the
-"   scope() statement.
-"
-"   - Highlighting DDoc comments.
-"
+"   d_hl_object_types - Set to highlight some common types from object.di.
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+" Support cpoptions
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Set the current syntax to be known as d
+let b:current_syntax = "d"
+
 " Keyword definitions
 "
-syn keyword dExternal		import package module extern
-syn keyword dConditional	if else switch
-syn keyword dBranch		goto break continue
-syn keyword dRepeat		while for do foreach foreach_reverse
-syn keyword dBoolean		true false
-syn keyword dConstant		null
-syn keyword dConstant		__FILE__ __LINE__ __EOF__ __VERSION__
-syn keyword dConstant		__DATE__ __TIME__ __TIMESTAMP__ __VENDOR__
-
-syn keyword dTypedef		alias typedef
-syn keyword dStructure		template interface class struct union
-syn keyword dEnum		enum
-syn keyword dOperator		new delete typeof typeid cast align is
-syn keyword dOperator		this super
+syn keyword dExternal              contained import module
+syn keyword dAssert                assert
+syn keyword dConditional           if else switch
+syn keyword dBranch                goto break continue
+syn keyword dRepeat                while for do foreach foreach_reverse
+syn keyword dBoolean               true false
+syn keyword dConstant              null
+syn keyword dConstant              __FILE__ __LINE__ __EOF__ __VERSION__
+syn keyword dConstant              __DATE__ __TIME__ __TIMESTAMP__ __VENDOR__
+syn keyword dConstant              __MODULE__ __FUNCTION__ __PRETTY_FUNCTION__
+syn keyword dTypedef               alias typedef
+syn keyword dStructure             template interface class struct union
+syn keyword dEnum                  enum
+syn keyword dOperator              new delete typeof typeid cast align is
+syn keyword dOperator              this super
 if exists("d_hl_operator_overload")
-  syn keyword dOpOverload	opNeg opCom opPostInc opPostDec opCast opAdd opSub opSub_r
-  syn keyword dOpOverload	opMul opDiv opDiv_r opMod opMod_r opAnd opOr opXor
-  syn keyword dOpOverload	opShl opShl_r opShr opShr_r opUShr opUShr_r opCat
-  syn keyword dOpOverload	opCat_r opEquals opEquals opCmp
-  syn keyword dOpOverload	opAssign opAddAssign opSubAssign opMulAssign opDivAssign
-  syn keyword dOpOverload	opModAssign opAndAssign opOrAssign opXorAssign
-  syn keyword dOpOverload	opShlAssign opShrAssign opUShrAssign opCatAssign
-  syn keyword dOpOverload	opIndex opIndexAssign opCall opSlice opSliceAssign opPos
-  syn keyword dOpOverload	opAdd_r opMul_r opAnd_r opOr_r opXor_r opIn opIn_r
-  syn keyword dOpOverload	opPow opDispatch opStar opDot opApply opApplyReverse
+  syn keyword dOpOverload          opNeg opCom opPostInc opPostDec opCast opAdd
+  syn keyword dOpOverload          opSub opSub_r opMul opDiv opDiv_r opMod 
+  syn keyword dOpOverload          opMod_r opAnd opOr opXor opShl opShl_r opShr
+  syn keyword dOpOverload          opShr_r opUShr opUShr_r opCat
+  syn keyword dOpOverload          opCat_r opEquals opCmp
+  syn keyword dOpOverload          opAssign opAddAssign opSubAssign opMulAssign
+  syn keyword dOpOverload          opDivAssign opModAssign opAndAssign 
+  syn keyword dOpOverload          opOrAssign opXorAssign opShlAssign 
+  syn keyword dOpOverload          opShrAssign opUShrAssign opCatAssign
+  syn keyword dOpOverload          opIndex opIndexAssign opIndexOpAssign
+  syn keyword dOpOverload          opCall opSlice opSliceAssign opSliceOpAssign 
+  syn keyword dOpOverload          opPos opAdd_r opMul_r opAnd_r opOr_r opXor_r
+  syn keyword dOpOverload          opIn opIn_r opPow opDispatch opStar opDot 
+  syn keyword dOpOverload          opApply opApplyReverse opDollar
+  syn keyword dOpOverload          opUnary opIndexUnary opSliceUnary
+  syn keyword dOpOverload          opBinary opBinaryRight
 endif
-syn keyword dType		ushort int uint long ulong float
-syn keyword dType		void byte ubyte double bit char wchar ucent cent
-syn keyword dType		short bool dchar string wstring dstring
-syn keyword dType		real ireal ifloat idouble creal cfloat cdouble
-syn keyword dDebug		deprecated unittest
-syn keyword dExceptions		throw try catch finally
-syn keyword dScopeDecl		public protected private export
-syn keyword dStatement		version debug return with
-syn keyword dStatement		function delegate __traits asm mixin macro
-syn keyword dStorageClass	in out inout ref lazy scope body
-syn keyword dStorageClass	pure nothrow
-syn keyword dStorageClass	auto static override final abstract volatile __gshared __thread
-syn keyword dStorageClass	synchronized immutable shared const invariant lazy
-syn keyword dPragma		pragma
+
+syn keyword dType                  byte ubyte short ushort int uint long ulong cent ucent
+syn keyword dType                  void bool Object
+syn keyword dType                  float double real
+syn keyword dType                  ushort int uint long ulong float
+syn keyword dType                  char wchar dchar string wstring dstring
+syn keyword dType                  ireal ifloat idouble creal cfloat cdouble
+syn keyword dType                  size_t ptrdiff_t sizediff_t equals_t hash_t
+if exists("d_hl_object_types")
+  syn keyword dType                Object Throwable AssociativeArray Error Exception
+  syn keyword dType                Interface OffsetTypeInfo TypeInfo TypeInfo_Typedef
+  syn keyword dType                TypeInfo_Enum TypeInfo_Pointer TypeInfo_Array
+  syn keyword dType                TypeInfo_StaticArray TypeInfo_AssociativeArray
+  syn keyword dType                TypeInfo_Function TypeInfo_Delegate TypeInfo_Class
+  syn keyword dType                ClassInfo TypeInfo_Interface TypeInfo_Struct
+  syn keyword dType                TypeInfo_Tuple TypeInfo_Const TypeInfo_Invariant
+  syn keyword dType                TypeInfo_Shared TypeInfo_Inout MemberInfo
+  syn keyword dType                MemberInfo_field MemberInfo_function ModuleInfo
+endif
+syn keyword dDebug                 deprecated unittest invariant
+syn keyword dExceptions            throw try catch finally
+syn keyword dScopeDecl             public protected private export package 
+syn keyword dStatement             debug return with
+syn keyword dStatement             function delegate __ctfe mixin macro __simd
+syn keyword dStatement             in out body
+syn keyword dStorageClass          contained in out scope
+syn keyword dStorageClass          inout ref lazy pure nothrow
+syn keyword dStorageClass          auto static override final abstract volatile
+syn keyword dStorageClass          __gshared __vector
+syn keyword dStorageClass          synchronized shared immutable const lazy
+syn keyword dIdentifier            _arguments _argptr __vptr __monitor
+syn keyword dIdentifier             _ctor _dtor __argTypes __overloadset
+syn keyword dScopeIdentifier       contained exit success failure
+syn keyword dTraitsIdentifier      contained isAbstractClass isArithmetic
+syn keyword dTraitsIdentifier      contained isAssociativeArray isFinalClass
+syn keyword dTraitsIdentifier      contained isPOD isNested isFloating
+syn keyword dTraitsIdentifier      contained isIntegral isScalar isStaticArray
+syn keyword dTraitsIdentifier      contained isUnsigned isVirtualFunction
+syn keyword dTraitsIdentifier      contained isVirtualMethod isAbstractFunction
+syn keyword dTraitsIdentifier      contained isFinalFunction isStaticFunction
+syn keyword dTraitsIdentifier      contained isRef isOut isLazy hasMember
+syn keyword dTraitsIdentifier      contained identifier getAttributes getMember
+syn keyword dTraitsIdentifier      contained getOverloads getProtection
+syn keyword dTraitsIdentifier      contained getVirtualFunctions
+syn keyword dTraitsIdentifier      contained getVirtualMethods parent
+syn keyword dTraitsIdentifier      contained classInstanceSize allMembers
+syn keyword dTraitsIdentifier      contained derivedMembers isSame compiles
+syn keyword dPragmaIdentifier      contained lib msg startaddress GNU_asm
+syn keyword dExternIdentifier      contained Windows Pascal Java System D
+syn keyword dAttribute             contained safe trusted system
+syn keyword dAttribute             contained property disable
+syn keyword dVersionIdentifier     contained DigitalMars GNU LDC SDC D_NET
+syn keyword dVersionIdentifier     contained X86 X86_64 ARM PPC PPC64 IA64 MIPS MIPS64 Alpha
+syn keyword dVersionIdentifier     contained SPARC SPARC64 S390 S390X HPPA HPPA64 SH SH64
+syn keyword dVersionIdentifier     contained linux Posix OSX FreeBSD Windows Win32 Win64
+syn keyword dVersionIdentifier     contained OpenBSD BSD Solaris AIX SkyOS SysV3 SysV4 Hurd
+syn keyword dVersionIdentifier     contained Cygwin MinGW
+syn keyword dVersionIdentifier     contained LittleEndian BigEndian
+syn keyword dVersionIdentifier     contained D_InlineAsm_X86 D_InlineAsm_X86_64
+syn keyword dVersionIdentifier     contained D_Version2 D_Coverage D_Ddoc D_LP64 D_PIC
+syn keyword dVersionIdentifier     contained unittest none all
+
+syn cluster dComment contains=dNestedComment,dBlockComment,dLineComment
+
+" Highlight the sharpbang
+syn match dSharpBang "\%^#!.*"     display
 
 " Attributes/annotations
-syn match dAnnotation	"@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
+syn match dAnnotation	"@[_$a-zA-Z][_$a-zA-Z0-9_]*\>" contains=dAttribute
+
+" Version Identifiers
+syn match dVersion      "\<version\>"
+syn match dVersion      "\<version\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+7 contains=dVersionIdentifier
+
+" Scope Identifiers
+syn match dStatement    "\<scope\>"
+syn match dStatement    "\<scope\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+5 contains=dScopeIdentifier
+
+" Traits Statement
+syn match dStatement    "\<__traits\>"
+syn match dStatement    "\<__traits\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+8 contains=dTraitsIdentifier
 
-" Assert is a statement and a module name.
-syn match dAssert "^assert\>"
-syn match dAssert "[^.]\s*\<assert\>"ms=s+1
+" Pragma Statement
+syn match dPragma       "\<pragma\>"
+syn match dPragma       "\<pragma\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+8 contains=dPragmaIdentifier
+
+" Necessary to highlight C++ in extern modifiers.
+syn match dExternIdentifier "C\(++\)\?" contained
+
+" Extern Identifiers
+syn match dExternal     "\<extern\>"
+syn match dExtern       "\<extern\s*([_a-zA-Z][_a-zA-Z0-9\+]*\>"he=s+6 contains=dExternIdentifier
+
+" Make import a region to prevent highlighting keywords
+syn region dImport start="import" end=";" contains=dExternal,@dComment
+
+" Make module a region to prevent highlighting keywords
+syn region dImport start="module" end=";" contains=dExternal,@dComment
 
 " dTokens is used by the token string highlighting
 syn cluster dTokens contains=dExternal,dConditional,dBranch,dRepeat,dBoolean
 syn cluster dTokens add=dConstant,dTypedef,dStructure,dOperator,dOpOverload
 syn cluster dTokens add=dType,dDebug,dExceptions,dScopeDecl,dStatement
-syn cluster dTokens add=dStorageClass,dPragma,dAssert,dAnnotation
+syn cluster dTokens add=dStorageClass,dPragma,dAssert,dAnnotation,dEnum
 
-" Marks contents of the asm statment body as special
-"
-" TODO
-"syn match dAsmStatement "\<asm\>"
-"syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement
-"
-"hi def link dAsmBody dUnicode
-"hi def link dAsmStatement dStatement
+" Create a match for parameter lists to identify storage class
+syn region paramlist start="(" end=")" contains=@dTokens
 
 " Labels
 "
 " We contain dScopeDecl so public: private: etc. are not highlighted like labels
 syn match dUserLabel    "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl,dEnum
-syn keyword dLabel	case default
+syn keyword dLabel      case default
 
 syn cluster dTokens add=dUserLabel,dLabel
 
 " Comments
 "
-syn keyword dTodo	contained TODO FIXME TEMP REFACTOR REVIEW HACK BUG XXX
+syn keyword dTodo                                                                contained TODO FIXME TEMP REFACTOR REVIEW HACK BUG XXX
 syn match dCommentStar	contained "^\s*\*[^/]"me=e-1
 syn match dCommentStar	contained "^\s*\*$"
 syn match dCommentPlus	contained "^\s*+[^/]"me=e-1
@@ -129,12 +201,12 @@
   syn region dBlockCommentString	contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=dCommentStar,dUnicode,dEscSequence,@Spell
   syn region dNestedCommentString	contained start=+"+ end=+"+ end="+"me=s-1,he=s-1 contains=dCommentPlus,dUnicode,dEscSequence,@Spell
   syn region dLineCommentString		contained start=+"+ end=+$\|"+ contains=dUnicode,dEscSequence,@Spell
-  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
-  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
+  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell fold
+  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell fold
   syn match  dLineComment	"//.*" contains=dLineCommentString,dTodo,@Spell
 else
-  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
-  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
+  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell fold
+  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell fold
   syn match  dLineComment	"//.*" contains=dLineCommentString,dTodo,@Spell
 endif
 
@@ -248,54 +320,241 @@
 " TODO: Highlight following Integer and optional Filespec.
 syn region  dPragma start="#\s*\(line\>\)" skip="\\$" end="$"
 
+" Block
+"
+syn region dBlock	start="{" end="}" transparent fold
+
 
 " The default highlighting.
 "
-hi def link dBinary		Number
-hi def link dDec		Number
-hi def link dHex		Number
-hi def link dOctal		Number
-hi def link dFloat		Float
-hi def link dHexFloat		Float
-hi def link dDebug		Debug
-hi def link dBranch		Conditional
-hi def link dConditional	Conditional
-hi def link dLabel		Label
-hi def link dUserLabel		Label
-hi def link dRepeat		Repeat
-hi def link dExceptions		Exception
-hi def link dAssert		Statement
-hi def link dStatement		Statement
-hi def link dScopeDecl		dStorageClass
-hi def link dStorageClass	StorageClass
-hi def link dBoolean		Boolean
-hi def link dUnicode		Special
-hi def link dTokenStringBrack	String
-hi def link dHereString		String
-hi def link dNestString		String
-hi def link dDelimString	String
-hi def link dRawString		String
-hi def link dString		String
-hi def link dHexString		String
-hi def link dCharacter		Character
-hi def link dEscSequence	SpecialChar
-hi def link dSpecialCharError	Error
-hi def link dOctalError		Error
-hi def link dOperator		Operator
-hi def link dOpOverload		Identifier
-hi def link dConstant		Constant
-hi def link dTypedef		Typedef
-hi def link dEnum		Structure
-hi def link dStructure		Structure
-hi def link dTodo		Todo
-hi def link dType		Type
-hi def link dLineComment	Comment
-hi def link dBlockComment	Comment
-hi def link dNestedComment	Comment
-hi def link dExternal		Include
-hi def link dPragma		PreProc
-hi def link dAnnotation		PreProc
+hi def link dBinary              Number
+hi def link dDec                 Number
+hi def link dHex                 Number
+hi def link dOctal               Number
+hi def link dFloat               Float
+hi def link dHexFloat            Float
+hi def link dDebug               Debug
+hi def link dBranch              Conditional
+hi def link dConditional         Conditional
+hi def link dLabel               Label
+hi def link dUserLabel           Label
+hi def link dRepeat              Repeat
+hi def link dExceptions          Exception
+hi def link dAssert              Statement
+hi def link dStatement           Statement
+hi def link dScopeDecl           dStorageClass
+hi def link dStorageClass        StorageClass
+hi def link dBoolean             Boolean
+hi def link dUnicode             Special
+hi def link dTokenStringBrack    String
+hi def link dHereString          String
+hi def link dNestString          String
+hi def link dDelimString         String
+hi def link dRawString           String
+hi def link dString              String
+hi def link dHexString           String
+hi def link dCharacter           Character
+hi def link dEscSequence         SpecialChar
+hi def link dSpecialCharError    Error
+hi def link dOctalError          Error
+hi def link dOperator            Operator
+hi def link dOpOverload          Identifier
+hi def link dConstant            Constant
+hi def link dTypedef             Typedef
+hi def link dEnum                Structure
+hi def link dStructure           Structure
+hi def link dTodo                Todo
+hi def link dType                Type
+hi def link dLineComment         Comment
+hi def link dBlockComment        Comment
+hi def link dNestedComment       Comment
+hi def link dExternal            Include
+hi def link dAnnotation          PreProc
+hi def link dSharpBang           PreProc
+hi def link dAttribute           StorageClass
+hi def link dIdentifier          Identifier
+hi def link dVersion             dStatement
+hi def link dVersionIdentifier   Identifier
+hi def link dScopeIdentifier     Identifier
+hi def link dTraitsIdentifier    Identifier
+hi def link dPragma              PreProc
+hi def link dPragmaIdentifier    Identifier
+hi def link dExtern              dExternal
+hi def link dExternIdentifier    Identifier
 
-let b:current_syntax = "d"
+" Marks contents of the asm statment body as special
+
+syn match dAsmStatement "\<asm\>"
+syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement,dAsmOpCode,@dComment,DUserLabel
+
+hi def link dAsmBody dUnicode
+hi def link dAsmStatement dStatement
+hi def link dAsmOpCode Identifier
+
+syn keyword dAsmOpCode contained	aaa		aad		aam		aas
+syn keyword dAsmOpCode contained	add		addpd		addps		addsd
+syn keyword dAsmOpCode contained	and		andnpd		andnps		andpd
+syn keyword dAsmOpCode contained	arpl		bound		bsf		bsr
+syn keyword dAsmOpCode contained	bt		btc		btr		bts
+syn keyword dAsmOpCode contained	call		bswap		andps		addss
+syn keyword dAsmOpCode contained	cbw		cdq		clc		cld
+syn keyword dAsmOpCode contained	cli		clts		cmc		cmova
+syn keyword dAsmOpCode contained	cmovb		cmovbe		cmovc		cmove
+syn keyword dAsmOpCode contained	cmovge		cmovl		cmovle		cmovna
+syn keyword dAsmOpCode contained	cmovnae		cmovg		cmovae		clflush
+syn keyword dAsmOpCode contained	cmovnb		cmovnbe		cmovnc		cmovne
+syn keyword dAsmOpCode contained	cmovnge		cmovnl		cmovnle		cmovno
+syn keyword dAsmOpCode contained	cmovns		cmovnz		cmovo		cmovp
+syn keyword dAsmOpCode contained	cmovpo		cmovs		cmovz		cmp
+syn keyword dAsmOpCode contained	cmppd		cmovpe		cmovnp		cmovng
+syn keyword dAsmOpCode contained	cmpps		cmps		cmpsb		cmpsd
+syn keyword dAsmOpCode contained	cmpsw		cmpxch8b	cmpxchg		comisd
+syn keyword dAsmOpCode contained	cpuid		cvtdq2pd	cvtdq2ps	cvtpd2dq
+syn keyword dAsmOpCode contained	cvtpd2ps	cvtpi2pd	cvtpi2ps	cvtps2dq
+syn keyword dAsmOpCode contained	cvtps2pd	cvtpd2pi	comiss		cmpss
+syn keyword dAsmOpCode contained	cvtps2pi	cvtsd2si	cvtsd2ss	cvtsi2sd
+syn keyword dAsmOpCode contained	cvtss2sd	cvtss2si	cvttpd2dq	cvttpd2pi
+syn keyword dAsmOpCode contained	cvttps2pi	cvttsd2si	cvttss2si	cwd
+syn keyword dAsmOpCode contained	da		daa		das		db
+syn keyword dAsmOpCode contained	dd		cwde		cvttps2dq	cvtsi2ss
+syn keyword dAsmOpCode contained	de		dec		df		di
+syn keyword dAsmOpCode contained	divpd		divps		divsd		divss
+syn keyword dAsmOpCode contained	dq		ds		dt		dw
+syn keyword dAsmOpCode contained	enter		f2xm1		fabs		fadd
+syn keyword dAsmOpCode contained	faddp		emms		dl		div
+syn keyword dAsmOpCode contained	fbld		fbstp		fchs		fclex
+syn keyword dAsmOpCode contained	fcmovbe		fcmove		fcmovnb		fcmovnbe
+syn keyword dAsmOpCode contained	fcmovnu		fcmovu		fcom		fcomi
+syn keyword dAsmOpCode contained	fcomp		fcompp		fcos		fdecstp
+syn keyword dAsmOpCode contained	fdisi		fcomip		fcmovne		fcmovb
+syn keyword dAsmOpCode contained	fdiv		fdivp		fdivr		fdivrp
+syn keyword dAsmOpCode contained	ffree		fiadd		ficom		ficomp
+syn keyword dAsmOpCode contained	fidivr		fild		fimul		fincstp
+syn keyword dAsmOpCode contained	fist		fistp		fisub		fisubr
+syn keyword dAsmOpCode contained	fld		finit		fidiv		feni
+syn keyword dAsmOpCode contained	fld1		fldcw		fldenv		fldl2e
+syn keyword dAsmOpCode contained	fldlg2		fldln2		fldpi		fldz
+syn keyword dAsmOpCode contained	fmulp		fnclex		fndisi		fneni
+syn keyword dAsmOpCode contained	fnop		fnsave		fnstcw		fnstenv
+syn keyword dAsmOpCode contained	fnstsw		fninit		fmul		fldl2t
+syn keyword dAsmOpCode contained	fpatan		fprem		fprem1		fptan
+syn keyword dAsmOpCode contained	frstor		fsave		fscale		fsetpm
+syn keyword dAsmOpCode contained	fsincos		fsqrt		fst		fstcw
+syn keyword dAsmOpCode contained	fstp		fstsw		fsub		fsubp
+syn keyword dAsmOpCode contained	fsubr		fstenv		fsin		frndint
+syn keyword dAsmOpCode contained	fsubrp		ftst		fucom		fucomi
+syn keyword dAsmOpCode contained	fucomp		fucompp		fwait		fxam
+syn keyword dAsmOpCode contained	fxrstor		fxsave		fxtract		fyl2x
+syn keyword dAsmOpCode contained	hlt		idiv		imul		in
+syn keyword dAsmOpCode contained	inc		fyl2xp1		fxch		fucomip
+syn keyword dAsmOpCode contained	ins		insb		insd		insw
+syn keyword dAsmOpCode contained	into		invd		invlpg		iret
+syn keyword dAsmOpCode contained	ja		jae		jb		jbe
+syn keyword dAsmOpCode contained	jcxz		je		jecxz		jg
+syn keyword dAsmOpCode contained	jge		jc		iretd		int
+syn keyword dAsmOpCode contained	jl		jle		jmp		jna
+syn keyword dAsmOpCode contained	jnb		jnbe		jnc		jne
+syn keyword dAsmOpCode contained	jnge		jnl		jnle		jno
+syn keyword dAsmOpCode contained	jns		jnz		jo		jp
+syn keyword dAsmOpCode contained	jpe		jnp		jng		jnae
+syn keyword dAsmOpCode contained	jpo		js		jz		lahf
+syn keyword dAsmOpCode contained	ldmxcsr		lds		lea		leave
+syn keyword dAsmOpCode contained	lfence		lfs		lgdt		lgs
+syn keyword dAsmOpCode contained	lldt		lmsw		lock		lods
+syn keyword dAsmOpCode contained	lodsb		lidt		les		lar
+syn keyword dAsmOpCode contained	lodsd		lodsw		loop		loope
+syn keyword dAsmOpCode contained	loopnz		loopz		lsl		lss
+syn keyword dAsmOpCode contained	maskmovdqu	maskmovq	maxpd		maxps
+syn keyword dAsmOpCode contained	maxss		mfence		minpd		minps
+syn keyword dAsmOpCode contained	minsd		maxsd		ltr		loopne
+syn keyword dAsmOpCode contained	minss		mov		movapd		movaps
+syn keyword dAsmOpCode contained	movdq2q		movdqa		movdqu		movhlps
+syn keyword dAsmOpCode contained	movhps		movlhps		movlpd		movlps
+syn keyword dAsmOpCode contained	movmskps	movntdq		movnti		movntpd
+syn keyword dAsmOpCode contained	movntps		movmskpd	movhpd		movd
+syn keyword dAsmOpCode contained	movntq		movq		movq2dq		movs
+syn keyword dAsmOpCode contained	movsd		movss		movsw		movsx
+syn keyword dAsmOpCode contained	movups		movzx		mul		mulpd
+syn keyword dAsmOpCode contained	mulsd		mulss		neg		nop
+syn keyword dAsmOpCode contained	not		mulps		movupd		movsb
+syn keyword dAsmOpCode contained	or		orpd		orps		out
+syn keyword dAsmOpCode contained	outsb		outsd		outsw		packssdw
+syn keyword dAsmOpCode contained	packuswb	paddb		paddd		paddq
+syn keyword dAsmOpCode contained	paddsw		paddusb		paddusw		paddw
+syn keyword dAsmOpCode contained	pand		paddsb		packsswb	outs
+syn keyword dAsmOpCode contained	pandn		pavgb		pavgw		pcmpeqb
+syn keyword dAsmOpCode contained	pcmpeqw		pcmpgtb		pcmpgtd		pcmpgtw
+syn keyword dAsmOpCode contained	pinsrw		pmaddwd		pmaxsw		pmaxub
+syn keyword dAsmOpCode contained	pminub		pmovmskb	pmulhuw		pmulhw
+syn keyword dAsmOpCode contained	pmullw		pminsw		pextrw		pcmpeqd
+syn keyword dAsmOpCode contained	pmuludq		pop		popa		popad
+syn keyword dAsmOpCode contained	popfd		por		prefetchnta	prefetcht0
+syn keyword dAsmOpCode contained	prefetcht2	psadbw		pshufd		pshufhw
+syn keyword dAsmOpCode contained	pshufw		pslld		pslldq		psllq
+syn keyword dAsmOpCode contained	psllw		pshuflw		prefetcht1	popf
+syn keyword dAsmOpCode contained	psrad		psraw		psrld		psrldq
+syn keyword dAsmOpCode contained	psrlw		psubb		psubd		psubq
+syn keyword dAsmOpCode contained	psubsw		psubusb		psubusw		psubw
+syn keyword dAsmOpCode contained	punpckhdq	punpckhqdq	punpckhwd	punpcklbw
+syn keyword dAsmOpCode contained	punpckldq	punpckhbw	psubsb		psrlq
+syn keyword dAsmOpCode contained	punpcklqdq	punpcklwd	push		pusha
+syn keyword dAsmOpCode contained	pushf		pushfd		pxor		rcl
+syn keyword dAsmOpCode contained	rcpss		rcr		rdmsr		rdpmc
+syn keyword dAsmOpCode contained	rep		repe		repne		repnz
+syn keyword dAsmOpCode contained	repz		rdtsc		rcpps		pushad
+syn keyword dAsmOpCode contained	ret		retf		rol		ror
+syn keyword dAsmOpCode contained	rsqrtps		rsqrtss		sahf		sal
+syn keyword dAsmOpCode contained	sbb		scas		scasb		scasd
+syn keyword dAsmOpCode contained	seta		setae		setb		setbe
+syn keyword dAsmOpCode contained	setc		scasw		sar		rsm
+syn keyword dAsmOpCode contained	sete		setg		setge		setl
+syn keyword dAsmOpCode contained	setna		setnae		setnb		setnbe
+syn keyword dAsmOpCode contained	setne		setng		setnge		setnl
+syn keyword dAsmOpCode contained	setno		setnp		setns		setnz
+syn keyword dAsmOpCode contained	seto		setnle		setnc		setle
+syn keyword dAsmOpCode contained	setp		setpe		setpo		sets
+syn keyword dAsmOpCode contained	sfence		sgdt		shl		shld
+syn keyword dAsmOpCode contained	shrd		shufpd		shufps		sidt
+syn keyword dAsmOpCode contained	smsw		sqrtpd		sqrtps		sqrtsd
+syn keyword dAsmOpCode contained	sqrtss		sldt		shr		setz
+syn keyword dAsmOpCode contained	stc		std		sti		stmxcsr
+syn keyword dAsmOpCode contained	stosb		stosd		stosw		str
+syn keyword dAsmOpCode contained	subpd		subps		subsd		subss
+syn keyword dAsmOpCode contained	sysexit		test		ucomisd		ucomiss
+syn keyword dAsmOpCode contained	ud2		sysenter	sub		stos
+syn keyword dAsmOpCode contained	unpckhpd	unpckhps	unpcklpd	unpcklps
+syn keyword dAsmOpCode contained	verw		wbinvd		wrmsr		xadd
+syn keyword dAsmOpCode contained	xchg		xlatb		xor		xorpd
+syn keyword dAsmOpCode contained	xorps		pfrcpit1	pfmin		movddup
+syn keyword dAsmOpCode contained	addsubpd	addsubps	fisttp		haddps
+syn keyword dAsmOpCode contained	hsubpd		hsubps		lddqu		monitor
+syn keyword dAsmOpCode contained	haddpd		xlat		wait		verr
+syn keyword dAsmOpCode contained	movshdup	movsldup	mwait		pfcmpeq
+syn keyword dAsmOpCode contained	pavgusb		pf2id		pfacc		pfadd
+syn keyword dAsmOpCode contained	pfcmpge		pfcmpgt		pfmax		pfmul
+syn keyword dAsmOpCode contained	pfnacc		pfpnacc		pfrcp		pfrcpit1
+syn keyword dAsmOpCode contained	pfrsqit1	pfrsqrt		pfsub		pfsubr
+syn keyword dAsmOpCode contained	pmulhrw 	pswapd		syscall		sysret
+syn keyword dAsmOpCode contained	vpmuldq		xgetbv		cmpxchg8b	cmpxchg16b
+syn keyword dAsmOpCode contained	pabsb		pabsd		pabsw		palignr
+syn keyword dAsmOpCode contained	phaddd		phaddsw		phaddw		phsubd
+syn keyword dAsmOpCode contained	phsubsw		phsubw		pmaddubsw	pmulhrsw
+syn keyword dAsmOpCode contained	pshufb		psignb		psignd		psignw
+syn keyword dAsmOpCode contained	popfq		pushfq		blendpd		blendps
+syn keyword dAsmOpCode contained	blendvpd	blendvps	extractps	insertps
+syn keyword dAsmOpCode contained	movntdqa	mpsadbw		packusdw	pblendvb
+syn keyword dAsmOpCode contained	pblendw		pcmpeqq		pextrb		pextrd
+syn keyword dAsmOpCode contained	pextrq		phminposuw	pinsrb		pinsrd
+syn keyword dAsmOpCode contained	pinsrq		pmaxsb		pmaxsd		pmaxud
+syn keyword dAsmOpCode contained	pmaxuw		pminsb		pminsd		pminud
+syn keyword dAsmOpCode contained	pminuw		pmulld		ptest		roundpd
+syn keyword dAsmOpCode contained	roundps		roundsd		roundss		pmuldq
+syn keyword dAsmOpCode contained	pmovsxbd	pmovsxdq	pmovzxbq	pmovzxdq
+syn keyword dAsmOpCode contained	pmovsxbq	pmovsxwd	pmovzxbq	pmovzxwd
+syn keyword dAsmOpCode contained	pmovsxbw	pmovsxwq	pmovzxbw	pmovzxwq
+syn keyword dAsmOpCode contained	crc32		pcmpestri	pcmpestrm	pcmpgtq
+syn keyword dAsmOpCode contained	pcmpistri	pcmpistrm	popcnt		pi2fd
+syn keyword dAsmOpCode contained	adc
 
-" vim: ts=8 noet
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/datascript.vim vim73/runtime/syntax/datascript.vim
--- vim73.orig/runtime/syntax/datascript.vim	2010-08-01 19:45:43.000000000 +0000
+++ vim73/runtime/syntax/datascript.vim	2013-08-04 19:09:09.287281172 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Datascript
 " Maintainer:	Dominique Pelle <dominique.pelle@gmail.com>
-" Last Change:	2010-08-01
+" Last Change:	2012 Apr 30
 "
 " DataScript is a formal language for modelling binary datatypes,
 " bitstreams or file formats. For more information, see:
@@ -12,6 +12,8 @@
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn keyword dsPackage      import package
 syn keyword dsType         bit string
@@ -88,3 +90,6 @@
 hi def link dsComment           Comment
 
 let b:current_syntax = "datascript"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/syntax/debchangelog.vim vim73/runtime/syntax/debchangelog.vim
--- vim73.orig/runtime/syntax/debchangelog.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/debchangelog.vim	2013-08-04 19:09:09.290614495 +0000
@@ -3,8 +3,8 @@
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2010 May 06
-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debchangelog.vim
+" Last Change: 2013 May 05
+" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debchangelog.vim
 
 " Standard syntax initialization
 if version < 600
@@ -19,7 +19,7 @@
 " Define some common expressions we can use later on
 syn match debchangelogName	contained "^[[:alnum:]][[:alnum:].+-]\+ "
 syn match debchangelogUrgency	contained "; urgency=\(low\|medium\|high\|critical\|emergency\)\( \S.*\)\="
-syn match debchangelogTarget	contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|%(etch|lenny)-%(backports|volatile)|%(dapper|hardy|jaunty|karmic|lucid|maverick)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
+syn match debchangelogTarget	contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(lucid|precise|quantal|raring|saucy)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
 syn match debchangelogVersion	contained "(.\{-})"
 syn match debchangelogCloses	contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
 syn match debchangelogLP	contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*"
diff -Naur vim73.orig/runtime/syntax/debcontrol.vim vim73/runtime/syntax/debcontrol.vim
--- vim73.orig/runtime/syntax/debcontrol.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/debcontrol.vim	2013-08-04 19:09:09.290614495 +0000
@@ -3,8 +3,8 @@
 " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
 "                     Wichert Akkerman <wakkerma@debian.org>
-" Last Change: 2009 Aug 17
-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debcontrol.vim
+" Last Change: 2013 May 05
+" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debcontrol.vim
 
 " Standard syntax initialization
 if version < 600
@@ -24,10 +24,11 @@
 syn match debControlSpace " "
 
 " Define some common expressions we can use later on
-syn match debcontrolArchitecture contained "\%(all\|any\|alpha\|amd64\|arm\%(e[bl]\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\|hurd-i386\|kfreebsd-\%(i386\|amd64\|gnu\)\|knetbsd-i386\|kopensolaris-i386\|netbsd-\%(alpha\|i386\)\)"
+syn match debcontrolArchitecture contained "\%(all\|linux-any\|\%(any-\)\=\%(alpha\|amd64\|arm\%(e[bl]\|hf\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\)\|hurd-\%(i386\|any\)\|kfreebsd-\%(i386\|amd64\|any\)\|knetbsd-\%(i386\|any\)\|kopensolaris-\%(i386\|any\)\|netbsd-\%(alpha\|i386\|any\)\|any\)"
+syn match debcontrolMultiArch contained "\%(no\|foreign\|allowed\|same\)"
 syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
 syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
-syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
+syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|education|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|introspection|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|metapackages|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
 syn match debcontrolPackageType contained "u\?deb"
 syn match debcontrolVariable contained "\${.\{-}}"
 syn match debcontrolDmUpload contained "\cyes"
@@ -37,36 +38,40 @@
 syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
 syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
 syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
-syn match debcontrolVcsGit contained "\v%(git|http)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
+syn match debcontrolVcsGit contained "\v%(git|http)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$"
 
 " An email address
 syn match	debcontrolEmail	"[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
 syn match	debcontrolEmail	"<.\{-}>"
 
 " #-Comments
-syn match debcontrolComment "^#.*$"
+syn match debcontrolComment "^#.*$" contains=@Spell
 
 syn case ignore
 
 " List of all legal keys
-syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Essential\|Architecture\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|XC-Package-Type\|\%(XS-\)\=DM-Upload-Allowed\): *"
+syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Essential\|Architecture\|Multi-Arch\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|\%(XC-\)\=Package-Type\): *"
+
+syn match debcontrolDeprecatedKey contained "^\%(\%(XS-\)\=DM-Upload-Allowed\): *"
 
 " Fields for which we do strict syntax checking
 syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace oneline
+syn region debcontrolStrictField start="^Multi-Arch" end="$" contains=debcontrolKey,debcontrolMultiArch oneline
 syn region debcontrolStrictField start="^\(Package\|Source\)" end="$" contains=debcontrolKey,debcontrolName oneline
 syn region debcontrolStrictField start="^Priority" end="$" contains=debcontrolKey,debcontrolPriority oneline
 syn region debcontrolStrictField start="^Section" end="$" contains=debcontrolKey,debcontrolSection oneline
-syn region debcontrolStrictField start="^XC-Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
+syn region debcontrolStrictField start="^\%(XC-\)\=Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
 syn region debcontrolStrictField start="^Homepage" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
 syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\)" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
 syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Svn" end="$" contains=debcontrolKey,debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
 syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Cvs" end="$" contains=debcontrolKey,debcontrolVcsCvs oneline keepend
 syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Git" end="$" contains=debcontrolKey,debcontrolVcsGit oneline keepend
-syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolKey,debcontrolDmUpload oneline
+syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolDeprecatedKey,debcontrolDmUpload oneline
 
 " Catch-all for the other legal fields
 syn region debcontrolField start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Essential\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
 syn region debcontrolMultiField start="^\%(Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
+syn region debcontrolMultiFieldSpell start="^\%(Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
 
 " Associate our matches and regions with pretty colours
 if version >= 508 || !exists("did_debcontrol_syn_inits")
@@ -80,8 +85,10 @@
   HiLink debcontrolKey		Keyword
   HiLink debcontrolField	Normal
   HiLink debcontrolStrictField	Error
+  HiLink debcontrolDeprecatedKey	Error
   HiLink debcontrolMultiField	Normal
   HiLink debcontrolArchitecture	Normal
+  HiLink debcontrolMultiArch	Normal
   HiLink debcontrolName		Normal
   HiLink debcontrolPriority	Normal
   HiLink debcontrolSection	Normal
diff -Naur vim73.orig/runtime/syntax/debsources.vim vim73/runtime/syntax/debsources.vim
--- vim73.orig/runtime/syntax/debsources.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/debsources.vim	2013-08-04 19:09:09.290614495 +0000
@@ -2,8 +2,8 @@
 " Language:     Debian sources.list
 " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
-" Last Change: 2010 May 06
-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debsources.vim
+" Last Change: 2013 May 05
+" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debsources.vim
 
 " Standard syntax initialization
 if version < 600
@@ -23,7 +23,7 @@
 
 " Match uri's
 syn match debsourcesUri            +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' 	<>"]\++
-syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(etch\|lenny\|squeeze\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|dapper\|hardy\|jaunty\|karmic\|lucid\|maverick\)\([-[:alnum:]_./]*\)+
+syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|raring\|saucy\)\([-[:alnum:]_./]*\)+
 
 " Associate our matches and regions with pretty colours
 hi def link debsourcesLine            Error
diff -Naur vim73.orig/runtime/syntax/dircolors.vim vim73/runtime/syntax/dircolors.vim
--- vim73.orig/runtime/syntax/dircolors.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/dircolors.vim	2013-08-04 19:09:09.300614465 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         dircolors(1) input file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-06-23
+" Latest Revision:  2012-04-25
 
 if exists("b:current_syntax")
   finish
@@ -17,6 +17,8 @@
 syn keyword dircolorsKeyword    TERM LEFT LEFTCODE RIGHT RIGHTCODE END ENDCODE
 
 syn keyword dircolorsKeyword    NORMAL NORM FILE DIR LNK LINK SYMLINK ORPHAN
+                                \ RESET MULTIHARDLINK CAPABILITY SETUID SETGID
+                                \ STICKY STICKY_OTHER_WRITABLE OTHER_WRITABLE 
                                 \ MISSING FIFO PIPE SOCK BLK BLOCK CHR CHAR
                                 \ DOOR EXEC
                                 \ nextgroup=@dircolorsColors skipwhite
diff -Naur vim73.orig/runtime/syntax/dirpager.vim vim73/runtime/syntax/dirpager.vim
--- vim73.orig/runtime/syntax/dirpager.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/dirpager.vim	2013-08-04 19:09:09.303947788 +0000
@@ -0,0 +1,56 @@
+" Vim syntax file
+" Maintainer:	  Thilo Six
+" Contact:	  <vim-dev at vim dot org>
+"		  http://www.vim.org/maillist.php#vim-dev
+"
+" Description:	  display directory content inside Vim with syntax
+"		  highlighting
+" File:		  runtime/syntax/dirpager.vim
+" Last Change:	  2012 May 19
+" Modeline:	  vim: ts=8:sw=2:sts=2:
+"
+" Credits:	  dirpager.vim is derived from Nikolai Weibulls dircolors.vim
+"
+" License:	  VIM License
+"		  Vim is Charityware, see ":help Uganda"
+"
+" Usage:	  $ ls -la | view -c "set ft=dirpager" -
+"
+"
+",----[ ls(1posix) ]--------------------------------------------------
+"
+" The  <entry type> character shall describe the type of file, as
+"       follows:
+"
+"       d	Directory.
+"       b	Block special file.
+"       c	Character special file.
+"       l (ell)	Symbolic link.
+"       p	FIFO.
+"       -	Regular file.
+"
+
+if exists("b:current_syntax") || &compatible
+  finish
+endif
+
+setlocal nowrap
+
+syn keyword  DirPagerTodo	contained FIXME TODO XXX NOTE
+
+syn region   DirPagerExe	start='^...x\|^......x\|^.........x' end='$'	contains=DirPagerTodo,@Spell
+syn region   DirPagerDir	start='^d' end='$'	contains=DirPagerTodo,@Spell
+syn region   DirPagerLink	start='^l' end='$'	contains=DirPagerTodo,@Spell
+syn region   DirPagerSpecial	start='^b' end='$'	contains=DirPagerTodo,@Spell
+syn region   DirPagerSpecial	start='^c' end='$'	contains=DirPagerTodo,@Spell
+syn region   DirPagerFifo	start='^p' end='$'	contains=DirPagerTodo,@Spell
+
+hi def link  DirPagerTodo	Todo
+hi def	     DirPagerExe	ctermfg=Green	    guifg=Green
+hi def	     DirPagerDir	ctermfg=Blue	    guifg=Blue
+hi def	     DirPagerLink	ctermfg=Cyan	    guifg=Cyan
+hi def	     DirPagerSpecial	ctermfg=Yellow	    guifg=Yellow
+hi def	     DirPagerFifo	ctermfg=Brown	    guifg=Brown
+
+let b:current_syntax = "dirpager"
+
diff -Naur vim73.orig/runtime/syntax/django.vim vim73/runtime/syntax/django.vim
--- vim73.orig/runtime/syntax/django.vim	2010-05-19 19:57:56.000000000 +0000
+++ vim73/runtime/syntax/django.vim	2013-08-04 19:09:09.303947788 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Django template
 " Maintainer:	Dave Hodder <dmh@dmh.org.uk>
-" Last Change:	2010 May 19
+" Last Change:	2012 Apr 09
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -21,7 +21,7 @@
 syn keyword djangoStatement contained autoescape csrf_token empty
 " FIXME ==, !=, <, >, <=, and >= should be djangoStatements:
 " syn keyword djangoStatement contained == != < > <= >=
-syn keyword djangoStatement contained and as block endblock by cycle debug else
+syn keyword djangoStatement contained and as block endblock by cycle debug else elif
 syn keyword djangoStatement contained extends filter endfilter firstof for
 syn keyword djangoStatement contained endfor if endif ifchanged endifchanged
 syn keyword djangoStatement contained ifequal endifequal ifnotequal
@@ -45,7 +45,7 @@
 syn keyword djangoFilter contained lower make_list phone2numeric pluralize
 syn keyword djangoFilter contained pprint random removetags rjust slice slugify
 syn keyword djangoFilter contained safe safeseq stringformat striptags
-syn keyword djangoFilter contained time timesince timeuntil title
+syn keyword djangoFilter contained time timesince timeuntil title truncatechars
 syn keyword djangoFilter contained truncatewords truncatewords_html unordered_list upper urlencode
 syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno
 
diff -Naur vim73.orig/runtime/syntax/dnsmasq.vim vim73/runtime/syntax/dnsmasq.vim
--- vim73.orig/runtime/syntax/dnsmasq.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/dnsmasq.vim	2013-08-04 19:09:09.307281112 +0000
@@ -0,0 +1,229 @@
+" Vim syntax file
+" Maintainer:	Thilo Six
+" Contact:	<vim-dev at vim dot org>
+"		http://www.vim.org/maillist.php#vim-dev
+"
+" Description:	highlight dnsmasq configuration files
+" File:		runtime/syntax/dnsmasq.vim
+" Version:	2.61-1
+" Last Change:	2012 May 19
+" Modeline:	vim: ts=8:sw=2:sts=2:
+"
+" Credits:	Igor N. Prischepoff
+"		Doug Kearns
+"		David Ne\v{c}as
+"		Christian Brabandt
+"
+" License:	VIM License
+"		Vim is Charityware, see ":help Uganda"
+"
+" Options:	You might want to add this to your vimrc:
+"
+"		if &background == "dark"
+"		  " dnsmasq.vim
+"		    let dnsmasq_backrgound_light = 0
+"		else
+"		    let dnsmasq_backrgound_light = 1
+"		endif
+"
+
+" 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") || &compatible
+    finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+if !exists("b:dnsmasq_backrgound_light")
+	if exists("dnsmasq_backrgound_light")
+		let b:dnsmasq_backrgound_light = dnsmasq_backrgound_light
+	else
+		let b:dnsmasq_backrgound_light = 0
+	endif
+endif
+
+
+" case on
+syn case match
+
+syn match   DnsmasqValues   "=.*"hs=s+1 contains=DnsmasqComment,DnsmasqSpecial
+syn match   DnsmasqSpecial  display '=\|@\|,\|!\|:'	  nextgroup=DnsmasqValues
+syn match   DnsmasqSpecial  "#"
+
+syn match   DnsmasqIPv4	    "\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>"	nextgroup=DnsmasqSubnet2,DnsmasqRange
+syn match   DnsmasqSubnet   "\<255.\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{2\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>"
+syn match   DnsmasqSubnet2  contained "\/\([0-4]\?[0-9]\)\>"
+syn match   DnsmasqRange    contained "-"
+syn match   DnsmasqMac	    "\<\(\x\x\?:\)\{5}\x\x\?"
+
+syn match   DnsmasqTime	    "\<\(\d\{1,3}\)[hm]\>"
+
+" String
+syn match   DnsmasqString   "\".*\""  contains=@Spell
+syn match   DnsmasqString   "'.*'"    contains=@Spell
+
+" Comments
+syn keyword DnsmasqTodo	    FIXME TODO XXX NOTE contained
+syn match   DnsmasqComment  "\(^\|\s\+\)#.*$"   contains=@Spell,DnsmasqTodo
+
+" highlight trailing spaces
+syn match   DnsmasqTrailSpace	   "[ \t]\+$"
+syn match   DnsmasqTrailSpace	   "[ \t]\+$" containedin=ALL
+
+syn match DnsmasqKeywordSpecial    "\<set\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<tag\>:"me=e-1
+syn match DnsmasqKeywordSpecial    ",\<static\>"hs=s+1	  contains=DnsmasqSpecial
+syn match DnsmasqKeywordSpecial    ",\<infinite\>"hs=s+1  contains=DnsmasqSpecial
+syn match DnsmasqKeywordSpecial    "\<encap\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<interface\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<vi-encap\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<net\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<vendor\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<opt\>:"me=e-1
+syn match DnsmasqKeywordSpecial    "\<option\>:"me=e-1
+syn match DnsmasqKeywordSpecial    ",\<ignore\>"hs=s+1	  contains=DnsmasqSpecial
+syn match DnsmasqKeywordSpecial    "\<id\>:"me=e-1
+
+syn match DnsmasqKeyword    "^\s*add-mac\>"
+syn match DnsmasqKeyword    "^\s*addn-hosts\>"
+syn match DnsmasqKeyword    "^\s*address\>"
+syn match DnsmasqKeyword    "^\s*alias\>"
+syn match DnsmasqKeyword    "^\s*all-servers\>"
+syn match DnsmasqKeyword    "^\s*bind-interfaces\>"
+syn match DnsmasqKeyword    "^\s*bogus-nxdomain\>"
+syn match DnsmasqKeyword    "^\s*bogus-priv\>"
+syn match DnsmasqKeyword    "^\s*bootp-dynamic\>"
+syn match DnsmasqKeyword    "^\s*bridge-interface\>"
+syn match DnsmasqKeyword    "^\s*cache-size\>"
+syn match DnsmasqKeyword    "^\s*clear-on-reload\>"
+syn match DnsmasqKeyword    "^\s*cname\>"
+syn match DnsmasqKeyword    "^\s*conf-dir\>"
+syn match DnsmasqKeyword    "^\s*conf-file\>"
+syn match DnsmasqKeyword    "^\s*conntrack\>"
+syn match DnsmasqKeyword    "^\s*dhcp-alternate-port\>"
+syn match DnsmasqKeyword    "^\s*dhcp-authoritative\>"
+syn match DnsmasqKeyword    "^\s*dhcp-boot\>"
+syn match DnsmasqKeyword    "^\s*dhcp-broadcast\>"
+syn match DnsmasqKeyword    "^\s*dhcp-circuitid\>"
+syn match DnsmasqKeyword    "^\s*dhcp-client-update\>"
+syn match DnsmasqKeyword    "^\s*dhcp-duid\>"
+syn match DnsmasqKeyword    "^\s*dhcp-fqdn\>"
+syn match DnsmasqKeyword    "^\s*dhcp-generate-names\>"
+syn match DnsmasqKeyword    "^\s*dhcp-host\>"
+syn match DnsmasqKeyword    "^\s*dhcp-hostsfile\>"
+syn match DnsmasqKeyword    "^\s*dhcp-ignore\>"
+syn match DnsmasqKeyword    "^\s*dhcp-ignore-names\>"
+syn match DnsmasqKeyword    "^\s*dhcp-lease-max\>"
+syn match DnsmasqKeyword    "^\s*dhcp-leasefile\>"
+syn match DnsmasqKeyword    "^\s*dhcp-luascript\>"
+syn match DnsmasqKeyword    "^\s*dhcp-mac\>"
+syn match DnsmasqKeyword    "^\s*dhcp-match\>"
+syn match DnsmasqKeyword    "^\s*dhcp-no-override\>"
+syn match DnsmasqKeyword    "^\s*dhcp-option\>"
+syn match DnsmasqKeyword    "^\s*dhcp-option-force\>"
+syn match DnsmasqKeyword    "^\s*dhcp-optsfile\>"
+syn match DnsmasqKeyword    "^\s*dhcp-proxy\>"
+syn match DnsmasqKeyword    "^\s*dhcp-range\>"
+syn match DnsmasqKeyword    "^\s*dhcp-remoteid\>"
+syn match DnsmasqKeyword    "^\s*dhcp-script\>"
+syn match DnsmasqKeyword    "^\s*dhcp-scriptuser\>"
+syn match DnsmasqKeyword    "^\s*dhcp-sequential-ip\>"
+syn match DnsmasqKeyword    "^\s*dhcp-subscrid\>"
+syn match DnsmasqKeyword    "^\s*dhcp-userclass\>"
+syn match DnsmasqKeyword    "^\s*dhcp-vendorclass\>"
+syn match DnsmasqKeyword    "^\s*dns-forward-max\>"
+syn match DnsmasqKeyword    "^\s*domain\>"
+syn match DnsmasqKeyword    "^\s*domain-needed\>"
+syn match DnsmasqKeyword    "^\s*edns-packet-max\>"
+syn match DnsmasqKeyword    "^\s*enable-dbus\>"
+syn match DnsmasqKeyword    "^\s*enable-ra\>"
+syn match DnsmasqKeyword    "^\s*enable-tftp\>"
+syn match DnsmasqKeyword    "^\s*except-interface\>"
+syn match DnsmasqKeyword    "^\s*expand-hosts\>"
+syn match DnsmasqKeyword    "^\s*filterwin2k\>"
+syn match DnsmasqKeyword    "^\s*group\>"
+syn match DnsmasqKeyword    "^\s*host-record\>"
+syn match DnsmasqKeyword    "^\s*interface\>"
+syn match DnsmasqKeyword    "^\s*interface-name\>"
+syn match DnsmasqKeyword    "^\s*keep-in-foreground\>"
+syn match DnsmasqKeyword    "^\s*leasefile-ro\>"
+syn match DnsmasqKeyword    "^\s*listen-address\>"
+syn match DnsmasqKeyword    "^\s*local\>"
+syn match DnsmasqKeyword    "^\s*localmx\>"
+syn match DnsmasqKeyword    "^\s*local-ttl\>"
+syn match DnsmasqKeyword    "^\s*localise-queries\>"
+syn match DnsmasqKeyword    "^\s*log-async\>"
+syn match DnsmasqKeyword    "^\s*log-dhcp\>"
+syn match DnsmasqKeyword    "^\s*log-facility\>"
+syn match DnsmasqKeyword    "^\s*log-queries\>"
+syn match DnsmasqKeyword    "^\s*max-ttl\>"
+syn match DnsmasqKeyword    "^\s*min-port\>"
+syn match DnsmasqKeyword    "^\s*mx-host\>"
+syn match DnsmasqKeyword    "^\s*mx-target\>"
+syn match DnsmasqKeyword    "^\s*naptr-record\>"
+syn match DnsmasqKeyword    "^\s*neg-ttl\>"
+syn match DnsmasqKeyword    "^\s*no-daemon\>"
+syn match DnsmasqKeyword    "^\s*no-dhcp-interface\>"
+syn match DnsmasqKeyword    "^\s*no-hosts\>"
+syn match DnsmasqKeyword    "^\s*no-negcache\>"
+syn match DnsmasqKeyword    "^\s*no-ping\>"
+syn match DnsmasqKeyword    "^\s*no-poll\>"
+syn match DnsmasqKeyword    "^\s*no-resolv\>"
+syn match DnsmasqKeyword    "^\s*pid-file\>"
+syn match DnsmasqKeyword    "^\s*port\>"
+syn match DnsmasqKeyword    "^\s*proxy-dnssec\>"
+syn match DnsmasqKeyword    "^\s*ptr-record\>"
+syn match DnsmasqKeyword    "^\s*pxe-prompt\>"
+syn match DnsmasqKeyword    "^\s*pxe-service\>"
+syn match DnsmasqKeyword    "^\s*query-port\>"
+syn match DnsmasqKeyword    "^\s*read-ethers\>"
+syn match DnsmasqKeyword    "^\s*rebind-domain-ok\>"
+syn match DnsmasqKeyword    "^\s*rebind-localhost-ok\>"
+syn match DnsmasqKeyword    "^\s*resolv-file\>"
+syn match DnsmasqKeyword    "^\s*selfmx\>"
+syn match DnsmasqKeyword    "^\s*server\>"
+syn match DnsmasqKeyword    "^\s*srv-host\>"
+syn match DnsmasqKeyword    "^\s*stop-dns-rebind\>"
+syn match DnsmasqKeyword    "^\s*strict-order\>"
+syn match DnsmasqKeyword    "^\s*tag-if\>"
+syn match DnsmasqKeyword    "^\s*test\>"
+syn match DnsmasqKeyword    "^\s*tftp-max\>"
+syn match DnsmasqKeyword    "^\s*tftp-lowercase\>"
+syn match DnsmasqKeyword    "^\s*tftp-no-blocksize\>"
+syn match DnsmasqKeyword    "^\s*tftp-port-range\>"
+syn match DnsmasqKeyword    "^\s*tftp-root\>"
+syn match DnsmasqKeyword    "^\s*tftp-secure\>"
+syn match DnsmasqKeyword    "^\s*tftp-unique-root\>"
+syn match DnsmasqKeyword    "^\s*txt-record\>"
+syn match DnsmasqKeyword    "^\s*user\>"
+syn match DnsmasqKeyword    "^\s*version\>"
+
+
+if b:dnsmasq_backrgound_light == 1
+    hi def DnsmasqKeyword	ctermfg=DarkGreen guifg=DarkGreen
+else
+    hi def link DnsmasqKeyword  Keyword
+endif
+hi def link DnsmasqKeywordSpecial Type
+hi def link DnsmasqTodo		Todo
+hi def link DnsmasqSpecial	Constant
+hi def link DnsmasqIPv4		Identifier
+hi def link DnsmasqSubnet2	DnsmasqSubnet
+hi def link DnsmasqSubnet	DnsmasqMac
+hi def link DnsmasqRange	DnsmasqMac
+hi def link DnsmasqMac		Preproc
+hi def link DnsmasqTime		Preproc
+hi def link DnsmasqComment	Comment
+hi def link DnsmasqTrailSpace	DiffDelete
+hi def link DnsmasqString	Constant
+hi def link DnsmasqValues	Normal
+
+let b:current_syntax = "dnsmasq"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
diff -Naur vim73.orig/runtime/syntax/docbk.vim vim73/runtime/syntax/docbk.vim
--- vim73.orig/runtime/syntax/docbk.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/docbk.vim	2013-08-04 19:09:09.307281112 +0000
@@ -1,9 +1,10 @@
 " Vim syntax file
 " Language:	DocBook
 " Maintainer:	Devin Weaver <vim@tritarget.com>
+" Last Updated By: Shlomi Fish
 " URL:		http://tritarget.com/pub/vim/syntax/docbk.vim
-" Last Change:	$Date: 2005/06/23 22:31:01 $
-" Version:	$Revision: 1.2 $
+" Last Change:	2012 Nov 28
+" Version:	1.2 (and modified after that)
 " Thanks to Johannes Zellner <johannes@zellner.org> for the default to XML
 " suggestion.
 
@@ -28,6 +29,15 @@
     let b:docbk_type = 'xml'
   endif
 endif
+
+if !exists('b:docbk_ver')
+  if exists('docbk_ver')
+    let b:docbk_ver = docbk_ver
+  else
+    let b:docbk_ver = 4
+  endif
+end
+
 if 'xml' == b:docbk_type
     doau Syntax xml
     syn cluster xmlTagHook add=docbkKeyword
@@ -40,81 +50,121 @@
     syn case ignore
 endif
 
-" <comment> has been removed and replace with <remark> in DocBook 4.0
-" <comment> kept for backwards compatability.
-syn keyword docbkKeyword abbrev abstract accel ackno acronym action contained
-syn keyword docbkKeyword address affiliation alt anchor answer appendix contained
-syn keyword docbkKeyword application area areaset areaspec arg artheader contained
-syn keyword docbkKeyword article articleinfo artpagenums attribution audiodata contained
-syn keyword docbkKeyword audioobject author authorblurb authorgroup contained
-syn keyword docbkKeyword authorinitials beginpage bibliodiv biblioentry contained
-syn keyword docbkKeyword bibliography bibliomisc bibliomixed bibliomset contained
-syn keyword docbkKeyword biblioset blockquote book bookbiblio bookinfo contained
-syn keyword docbkKeyword bridgehead callout calloutlist caption caution contained
-syn keyword docbkKeyword chapter citation citerefentry citetitle city contained
-syn keyword docbkKeyword classname cmdsynopsis co collab collabname contained
-syn keyword docbkKeyword colophon colspec command comment computeroutput contained
-syn keyword docbkKeyword confdates confgroup confnum confsponsor conftitle contained
-syn keyword docbkKeyword constant contractnum contractsponsor contrib contained
-syn keyword docbkKeyword copyright corpauthor corpname country database contained
-syn keyword docbkKeyword date dedication docinfo edition editor email contained
-syn keyword docbkKeyword emphasis entry entrytbl envar epigraph equation contained
-syn keyword docbkKeyword errorcode errorname errortype example fax figure contained
-syn keyword docbkKeyword filename firstname firstterm footnote footnoteref contained
+syn keyword docbkKeyword abbrev abstract accel acronym address contained
+syn keyword docbkKeyword affiliation alt anchor answer appendix contained
+syn keyword docbkKeyword application area areaset areaspec arg contained
+syn keyword docbkKeyword article artpagenums attribution audiodata contained
+syn keyword docbkKeyword audioobject author authorgroup contained
+syn keyword docbkKeyword authorinitials bibliocoverage bibliodiv contained
+syn keyword docbkKeyword biblioentry bibliography biblioid contained
+syn keyword docbkKeyword bibliolist bibliomisc bibliomixed contained
+syn keyword docbkKeyword bibliomset biblioref bibliorelation contained
+syn keyword docbkKeyword biblioset bibliosource blockquote book contained
+syn keyword docbkKeyword bridgehead callout calloutlist caption contained
+syn keyword docbkKeyword caution chapter citation citebiblioid contained
+syn keyword docbkKeyword citerefentry citetitle city classname contained
+syn keyword docbkKeyword classsynopsis classsynopsisinfo cmdsynopsis contained
+syn keyword docbkKeyword co code col colgroup collab colophon contained
+syn keyword docbkKeyword colspec command computeroutput confdates contained
+syn keyword docbkKeyword confgroup confnum confsponsor conftitle contained
+syn keyword docbkKeyword constant constructorsynopsis contractnum contained
+syn keyword docbkKeyword contractsponsor contrib copyright coref contained
+syn keyword docbkKeyword country database date dedication contained
+syn keyword docbkKeyword destructorsynopsis edition editor email contained
+syn keyword docbkKeyword emphasis entry entrytbl envar epigraph contained
+syn keyword docbkKeyword equation errorcode errorname errortext contained
+syn keyword docbkKeyword errortype example exceptionname fax contained
+syn keyword docbkKeyword fieldsynopsis figure filename firstname contained
+syn keyword docbkKeyword firstterm footnote footnoteref contained
 syn keyword docbkKeyword foreignphrase formalpara funcdef funcparams contained
 syn keyword docbkKeyword funcprototype funcsynopsis funcsynopsisinfo contained
-syn keyword docbkKeyword function glossary glossdef glossdiv glossentry contained
-syn keyword docbkKeyword glosslist glosssee glossseealso glossterm graphic contained
-syn keyword docbkKeyword graphicco group guibutton guiicon guilabel contained
+syn keyword docbkKeyword function glossary glossdef glossdiv contained
+syn keyword docbkKeyword glossentry glosslist glosssee glossseealso contained
+syn keyword docbkKeyword glossterm group guibutton guiicon guilabel contained
 syn keyword docbkKeyword guimenu guimenuitem guisubmenu hardware contained
-syn keyword docbkKeyword highlights holder honorific imagedata imageobject contained
-syn keyword docbkKeyword imageobjectco important index indexdiv indexentry contained
-syn keyword docbkKeyword indexterm informalequation informalexample contained
-syn keyword docbkKeyword informalfigure informaltable inlineequation contained
-syn keyword docbkKeyword inlinegraphic inlinemediaobject interface contained
-syn keyword docbkKeyword interfacedefinition invpartnumber isbn issn contained
-syn keyword docbkKeyword issuenum itemizedlist itermset jobtitle keycap contained
-syn keyword docbkKeyword keycode keycombo keysym keyword keywordset label contained
-syn keyword docbkKeyword legalnotice lineage lineannotation link listitem contained
-syn keyword docbkKeyword literal literallayout lot lotentry manvolnum contained
-syn keyword docbkKeyword markup medialabel mediaobject mediaobjectco contained
-syn keyword docbkKeyword member menuchoice modespec mousebutton msg msgaud contained
-syn keyword docbkKeyword msgentry msgexplan msginfo msglevel msgmain contained
-syn keyword docbkKeyword msgorig msgrel msgset msgsub msgtext note contained
-syn keyword docbkKeyword objectinfo olink option optional orderedlist contained
-syn keyword docbkKeyword orgdiv orgname otheraddr othercredit othername contained
-syn keyword docbkKeyword pagenums para paramdef parameter part partintro contained
-syn keyword docbkKeyword phone phrase pob postcode preface primary contained
-syn keyword docbkKeyword primaryie printhistory procedure productname contained
-syn keyword docbkKeyword productnumber programlisting programlistingco contained
-syn keyword docbkKeyword prompt property pubdate publisher publishername contained
-syn keyword docbkKeyword pubsnumber qandadiv qandaentry qandaset question contained
-syn keyword docbkKeyword quote refclass refdescriptor refentry contained
+syn keyword docbkKeyword holder honorific imagedata imageobject contained
+syn keyword docbkKeyword imageobjectco important index indexdiv contained
+syn keyword docbkKeyword indexentry indexterm informalequation contained
+syn keyword docbkKeyword informalexample informalfigure contained
+syn keyword docbkKeyword informaltable initializer inlineequation contained
+syn keyword docbkKeyword inlinemediaobject interfacename issuenum contained
+syn keyword docbkKeyword itemizedlist itermset jobtitle keycap contained
+syn keyword docbkKeyword keycode keycombo keysym keyword keywordset contained
+syn keyword docbkKeyword label legalnotice lineage lineannotation contained
+syn keyword docbkKeyword link listitem literal literallayout contained
+syn keyword docbkKeyword manvolnum markup mathphrase mediaobject contained
+syn keyword docbkKeyword member menuchoice methodname methodparam contained
+syn keyword docbkKeyword methodsynopsis modifier mousebutton msg contained
+syn keyword docbkKeyword msgaud msgentry msgexplan msginfo msglevel contained
+syn keyword docbkKeyword msgmain msgorig msgrel msgset msgsub contained
+syn keyword docbkKeyword msgtext note olink ooclass ooexception contained
+syn keyword docbkKeyword oointerface option optional orderedlist contained
+syn keyword docbkKeyword orgdiv orgname otheraddr othercredit contained
+syn keyword docbkKeyword othername package pagenums para paramdef contained
+syn keyword docbkKeyword parameter part partintro personblurb contained
+syn keyword docbkKeyword personname phone phrase pob postcode contained
+syn keyword docbkKeyword preface primary primaryie printhistory contained
+syn keyword docbkKeyword procedure productname productnumber contained
+syn keyword docbkKeyword programlisting programlistingco prompt contained
+syn keyword docbkKeyword property pubdate publisher publishername contained
+syn keyword docbkKeyword qandadiv qandaentry qandaset question quote contained
+syn keyword docbkKeyword refclass refdescriptor refentry contained
 syn keyword docbkKeyword refentrytitle reference refmeta refmiscinfo contained
 syn keyword docbkKeyword refname refnamediv refpurpose refsect1 contained
-syn keyword docbkKeyword refsect1info refsect2 refsect2info refsect3 contained
-syn keyword docbkKeyword refsect3info refsynopsisdiv refsynopsisdivinfo contained
-syn keyword docbkKeyword releaseinfo remark replaceable returnvalue revhistory contained
-syn keyword docbkKeyword revision revnumber revremark row sbr screen contained
-syn keyword docbkKeyword screenco screeninfo screenshot secondary contained
-syn keyword docbkKeyword secondaryie sect1 sect1info sect2 sect2info sect3 contained
-syn keyword docbkKeyword sect3info sect4 sect4info sect5 sect5info section contained
-syn keyword docbkKeyword sectioninfo see seealso seealsoie seeie seg contained
-syn keyword docbkKeyword seglistitem segmentedlist segtitle seriesinfo contained
-syn keyword docbkKeyword seriesvolnums set setindex setinfo sgmltag contained
-syn keyword docbkKeyword shortaffil shortcut sidebar simpara simplelist contained
-syn keyword docbkKeyword simplesect spanspec state step street structfield contained
-syn keyword docbkKeyword structname subject subjectset subjectterm contained
-syn keyword docbkKeyword subscript substeps subtitle superscript surname contained
-syn keyword docbkKeyword symbol synopfragment synopfragmentref synopsis contained
-syn keyword docbkKeyword systemitem table tbody term tertiary tertiaryie contained
-syn keyword docbkKeyword textobject tfoot tgroup thead tip title contained
-syn keyword docbkKeyword titleabbrev toc tocback tocchap tocentry tocfront contained
-syn keyword docbkKeyword toclevel1 toclevel2 toclevel3 toclevel4 toclevel5 contained
-syn keyword docbkKeyword tocpart token trademark type ulink userinput contained
+syn keyword docbkKeyword refsect2 refsect3 refsection refsynopsisdiv contained
+syn keyword docbkKeyword releaseinfo remark replaceable returnvalue contained
+syn keyword docbkKeyword revdescription revhistory revision contained
+syn keyword docbkKeyword revnumber revremark row sbr screen screenco contained
+syn keyword docbkKeyword screenshot secondary secondaryie sect1 contained
+syn keyword docbkKeyword sect2 sect3 sect4 sect5 section see seealso contained
+syn keyword docbkKeyword seealsoie seeie seg seglistitem contained
+syn keyword docbkKeyword segmentedlist segtitle seriesvolnums set contained
+syn keyword docbkKeyword setindex shortaffil shortcut sidebar contained
+syn keyword docbkKeyword simpara simplelist simplemsgentry contained
+syn keyword docbkKeyword simplesect spanspec state step contained
+syn keyword docbkKeyword stepalternatives street subject subjectset contained
+syn keyword docbkKeyword subjectterm subscript substeps subtitle contained
+syn keyword docbkKeyword superscript surname symbol synopfragment contained
+syn keyword docbkKeyword synopfragmentref synopsis systemitem table contained
+syn keyword docbkKeyword task taskprerequisites taskrelated contained
+syn keyword docbkKeyword tasksummary tbody td term termdef tertiary contained
+syn keyword docbkKeyword tertiaryie textdata textobject tfoot tgroup contained
+syn keyword docbkKeyword th thead tip title titleabbrev toc tocentry contained
+syn keyword docbkKeyword token tr trademark type uri userinput contained
 syn keyword docbkKeyword varargs variablelist varlistentry varname contained
-syn keyword docbkKeyword videodata videoobject void volumenum warning contained
-syn keyword docbkKeyword wordasword xref year contained
+syn keyword docbkKeyword videodata videoobject void volumenum contained
+syn keyword docbkKeyword warning wordasword xref year contained
+
+if b:docbk_ver == 4
+  syn keyword docbkKeyword ackno action appendixinfo articleinfo contained
+  syn keyword docbkKeyword authorblurb beginpage bibliographyinfo contained
+  syn keyword docbkKeyword blockinfo bookinfo chapterinfo contained
+  syn keyword docbkKeyword collabname corpauthor corpcredit contained
+  syn keyword docbkKeyword corpname glossaryinfo graphic graphicco contained
+  syn keyword docbkKeyword highlights indexinfo inlinegraphic contained
+  syn keyword docbkKeyword interface invpartnumber isbn issn lot contained
+  syn keyword docbkKeyword lotentry medialabel mediaobjectco contained
+  syn keyword docbkKeyword modespec objectinfo partinfo contained
+  syn keyword docbkKeyword prefaceinfo pubsnumber refentryinfo contained
+  syn keyword docbkKeyword referenceinfo refsect1info refsect2info contained
+  syn keyword docbkKeyword refsect3info refsectioninfo contained
+  syn keyword docbkKeyword refsynopsisdivinfo screeninfo sect1info contained
+  syn keyword docbkKeyword sect2info sect3info sect4info sect5info contained
+  syn keyword docbkKeyword sectioninfo setindexinfo setinfo contained
+  syn keyword docbkKeyword sgmltag sidebarinfo structfield contained
+  syn keyword docbkKeyword structname tocback tocchap tocfront contained
+  syn keyword docbkKeyword toclevel1 toclevel2 toclevel3 toclevel4 contained
+  syn keyword docbkKeyword toclevel5 tocpart ulink contained
+
+else
+  syn keyword docbkKeyword acknowledgements annotation arc contained
+  syn keyword docbkKeyword constraint constraintdef cover contained
+  syn keyword docbkKeyword extendedlink givenname info lhs locator contained
+  syn keyword docbkKeyword multimediaparam nonterminal org person contained
+  syn keyword docbkKeyword production productionrecap contained
+  syn keyword docbkKeyword productionset rhs tag tocdiv topic contained
+
+endif
 
 " Add special emphasis on some regions. Thanks to Rory Hunter <roryh@dcs.ed.ac.uk> for these ideas.
 syn region docbkRegion start="<emphasis>"lc=10 end="</emphasis>"me=e-11 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend
diff -Naur vim73.orig/runtime/syntax/dosini.vim vim73/runtime/syntax/dosini.vim
--- vim73.orig/runtime/syntax/dosini.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/dosini.vim	2013-08-04 19:09:09.313947758 +0000
@@ -1,9 +1,12 @@
 " Vim syntax file
-" Language:	Configuration File (ini file) for MSDOS/MS Windows
-" Version Info: @(#)dosini.vim 1.6 97/12/15 08:54:12
-" Author:       Sean M. McKee <mckee@misslink.net>
-" Maintainer:   Nima Talebi <nima@it.net.au>
-" Last Change:	Mon, 26 Jun 2006 22:07:28 +1000
+" Language:               Configuration File (ini file) for MSDOS/MS Windows
+" Version:                2.1
+" Original Author:        Sean M. McKee <mckee@misslink.net>
+" Previous Maintainer:    Nima Talebi <nima@it.net.au>
+" Current Maintainer:     Hong Xu <xuhdev@gmail.com>
+" Homepage:               http://www.vim.org/scripts/script.php?script_id=3747
+"                         https://bitbucket.org/xuhdev/syntax-dosini.vim
+" Last Change:            2011 Nov 8
 
 
 " For version 5.x: Clear all syntax items
@@ -17,9 +20,12 @@
 " shut case off
 syn case ignore
 
-syn match  dosiniLabel		"^.\{-}="
-syn region dosiniHeader		start="^\[" end="\]"
-syn match  dosiniComment	"^;.*$"
+syn match  dosiniNumber   "\<\d\+\>"
+syn match  dosiniNumber   "\<\d*\.\d\+\>"
+syn match  dosiniNumber   "\<\d\+e[+-]\=\d\+\>"
+syn match  dosiniLabel    "^.\{-}="
+syn region dosiniHeader   start="^\s*\[" end="\]"
+syn match  dosiniComment  "^[#;].*$"
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -32,13 +38,14 @@
     command -nargs=+ HiLink hi def link <args>
   endif
 
-	HiLink dosiniHeader	Special
-	HiLink dosiniComment	Comment
-	HiLink dosiniLabel	Type
+  HiLink dosiniNumber   Number
+  HiLink dosiniHeader   Special
+  HiLink dosiniComment  Comment
+  HiLink dosiniLabel    Type
 
   delcommand HiLink
 endif
 
 let b:current_syntax = "dosini"
 
-" vim:ts=8
+" vim: sts=2 sw=2 et
diff -Naur vim73.orig/runtime/syntax/dot.vim vim73/runtime/syntax/dot.vim
--- vim73.orig/runtime/syntax/dot.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/dot.vim	2013-08-04 19:09:09.313947758 +0000
@@ -3,7 +3,7 @@
 " Filenames:    *.dot
 " Maintainer:   Markus Mottl  <markus.mottl@gmail.com>
 " URL:          http://www.ocaml.info/vim/syntax/dot.vim
-" Last Change:  2006 Feb 05
+" Last Change:  2011 May 17 - improved identifier matching + two new keywords
 "               2001 May 04 - initial version
 
 " For version 5.x: Clear all syntax items
@@ -47,10 +47,10 @@
 
 " Edge attributes
 syn keyword  dotType arrowhead arrowsize arrowtail constraint decorateP
-syn keyword  dotType dir headclip headlabel labelangle labeldistance
+syn keyword  dotType dir headclip headlabel headport labelangle labeldistance
 syn keyword  dotType labelfontcolor labelfontname labelfontsize
 syn keyword  dotType minlen port_label_distance samehead sametail
-syn keyword  dotType tailclip taillabel weight
+syn keyword  dotType tailclip taillabel tailport weight
 
 " Shared attributes (graphs, nodes, edges)
 syn keyword  dotType color
@@ -67,7 +67,7 @@
 syn match    dotKeyChar  "->"
 
 " Identifier
-syn match    dotIdentifier /\<\w\+\>/
+syn match    dotIdentifier /\<\w\+\(:\w\+\)\?\>/
 
 " Synchronization
 syn sync minlines=50
diff -Naur vim73.orig/runtime/syntax/dtd.vim vim73/runtime/syntax/dtd.vim
--- vim73.orig/runtime/syntax/dtd.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/dtd.vim	2013-08-04 19:09:09.320614405 +0000
@@ -13,17 +13,11 @@
 " TODO:
 "   - improve synchronizing.
 
-if version < 600
-    syntax clear
-    let __dtd_cpo_save__ = &cpo
-    set cpo&
-else
-    if exists("b:current_syntax")
-	finish
-    endif
-    let s:dtd_cpo_save = &cpo
-    set cpo&vim
+if exists("b:current_syntax")
+    finish
 endif
+let s:dtd_cpo_save = &cpo
+set cpo&vim
 
 if !exists("dtd_ignore_case")
     " I prefer having the case takes into consideration.
@@ -168,13 +162,8 @@
     delcommand HiLink
 endif
 
-if version < 600
-    let &cpo = __dtd_cpo_save__
-    unlet __dtd_cpo_save__
-else
-    let &cpo = s:dtd_cpo_save
-    unlet s:dtd_cpo_save
-endif
+let &cpo = s:dtd_cpo_save
+unlet s:dtd_cpo_save
 
 let b:current_syntax = "dtd"
 
diff -Naur vim73.orig/runtime/syntax/dts.vim vim73/runtime/syntax/dts.vim
--- vim73.orig/runtime/syntax/dts.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/dts.vim	2013-08-04 19:09:09.323947728 +0000
@@ -0,0 +1,28 @@
+" Vim syntax file
+" Language:	dts/dtsi (device tree files)
+" Maintainer:	Daniel Mack <vim@zonque.org>
+" Last Change:	2013 Apr 05
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syntax region dtsComment        start="/\*"  end="\*/"
+syntax match  dtsReference      "&[[:alpha:][:digit:]_]\+"
+syntax region dtsBinaryProperty start="\[" end="\]" 
+syntax match  dtsStringProperty "\".*\""
+syntax match  dtsKeyword        "/.*/"
+syntax match  dtsLabel          "^[[:space:]]*[[:alpha:][:digit:]_]\+:"
+syntax match  dtsNode           /[[:alpha:][:digit:]-_]\+\(@[0-9a-fA-F]\+\|\)[[:space:]]*{/he=e-1
+syntax region dtsCellProperty   start="<" end=">" contains=dtsReference,dtsBinaryProperty,dtsStringProperty,dtsComment
+syntax region dtsCommentInner   start="/\*"  end="\*/"
+
+hi def link dtsCellProperty     Number
+hi def link dtsBinaryProperty   Number
+hi def link dtsStringProperty   String
+hi def link dtsKeyword          Include
+hi def link dtsLabel            Label
+hi def link dtsNode             Structure
+hi def link dtsReference        Macro
+hi def link dtsComment          Comment
+hi def link dtsCommentInner     Comment 
diff -Naur vim73.orig/runtime/syntax/eiffel.vim vim73/runtime/syntax/eiffel.vim
--- vim73.orig/runtime/syntax/eiffel.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/eiffel.vim	2013-08-04 19:09:09.330614375 +0000
@@ -1,10 +1,10 @@
 " Eiffel syntax file
 " Language:	Eiffel
-" Maintainer:	Reimer Behrends <behrends@cse.msu.edu>
-"		With much input from Jocelyn Fiat <fiat@eiffel.com>
-" See http://www.cse.msu.edu/~behrends/vim/ for the most current version.
-" Last Change:	2001 May 09
-
+" Maintainer: Jocelyn Fiat <jfiat@eiffel.com>
+" Previous maintainer:	Reimer Behrends <behrends@cse.msu.edu>
+" Contributions from: Thilo Six
+" 
+" URL: https://github.com/eiffelhub/vim-eiffel
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
@@ -13,6 +13,9 @@
   finish
 endif
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 " Option handling
 
 if exists("eiffel_ignore_case")
@@ -40,7 +43,7 @@
 
 " Keyword definitions
 
-syn keyword eiffelTopStruct	indexing feature creation inherit
+syn keyword eiffelTopStruct	note indexing feature creation inherit
 syn match   eiffelTopStruct	"\<class\>"
 syn match   eiffelKeyword	"\<end\>"
 syn match   eiffelTopStruct	"^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName
@@ -48,27 +51,30 @@
 syn match eiffelBracketError	"\]"
 syn region eiffelGeneric	transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct
 if exists("eiffel_ise")
+  syn match   eiffelAgent	"\<agent\>"
+  syn match   eiffelConvert	"\<convert\>"
   syn match   eiffelCreate	"\<create\>"
   syn match   eiffelTopStruct	contained "\<create\>"
+  syn match   eiffelTopStruct	contained "\<convert\>"
   syn match   eiffelGenericCreate  contained "\<create\>"
   syn match   eiffelTopStruct	"^create\>"
   syn region  eiffelGenericDecl	transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets
   syn region  eiffelClassHeader	start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets
 endif
-syn keyword eiffelDeclaration	is do once deferred unique local
-syn keyword eiffelDeclaration	Unique
+syn keyword eiffelDeclaration	is do once deferred unique local attribute assign
+syn keyword eiffelDeclaration	attached detachable Unique
 syn keyword eiffelProperty	expanded obsolete separate frozen
 syn keyword eiffelProperty	prefix infix
 syn keyword eiffelInheritClause	rename redefine undefine select export as
 syn keyword eiffelAll		all
-syn keyword eiffelKeyword	external alias
+syn keyword eiffelKeyword	external alias some
 syn keyword eiffelStatement	if else elseif inspect
 syn keyword eiffelStatement	when then
 syn match   eiffelAssertion	"\<require\(\s\+else\)\=\>"
 syn match   eiffelAssertion	"\<ensure\(\s\+then\)\=\>"
 syn keyword eiffelAssertion	check
 syn keyword eiffelDebug		debug
-syn keyword eiffelStatement	from until loop
+syn keyword eiffelStatement	across from until loop
 syn keyword eiffelAssertion	variant
 syn match   eiffelAssertion	"\<invariant\>"
 syn match   eiffelTopStruct	"^invariant\>"
@@ -126,6 +132,11 @@
 syn match eiffelParenError	")"
 syn region eiffelParen		transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape
 
+if exists("eiffel_fold")
+"    setlocal foldmethod=indent
+"    syn sync fromstart
+endif
+
 " Should suffice for even very long strings and expressions
 syn sync lines=40
 
@@ -150,6 +161,8 @@
   HiLink eiffelException	Statement
   HiLink eiffelGenericCreate	Statement
 
+  HiLink eiffelAgent		Statement
+  HiLink eiffelConvert		Statement
 
   HiLink eiffelTopStruct	PreProc
 
@@ -193,4 +206,7 @@
 
 let b:current_syntax = "eiffel"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/erlang.vim vim73/runtime/syntax/erlang.vim
--- vim73.orig/runtime/syntax/erlang.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/erlang.vim	2013-08-04 19:09:09.333947698 +0000
@@ -1,229 +1,258 @@
 " Vim syntax file
-" Language:    erlang (ERicsson LANGuage)
-"              http://www.erlang.se
-"              http://www.erlang.org
-" Maintainer:  Csaba Hoch <csaba.hoch@gmail.com>
-" Former Maintainer:  Kreąimir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
-" Last update: 12-Mar-2008
-" Filenames:   .erl
-
-
-" There are three sets of highlighting in here:
-" One is "erlang_characters", second is "erlang_functions" and third
-" is "erlang_keywords".
-" If you want to disable keywords highlighting, put in your .vimrc:
-"       let erlang_keywords=1
-" If you want to disable erlang BIF highlighting, put in your .vimrc
-" this:
-"       let erlang_functions=1
-" If you want to disable special characters highlighting, put in
-" your .vimrc:
-"       let erlang_characters=1
-
+" Language:     Erlang (http://www.erlang.org)
+" Maintainer:   Csaba Hoch <csaba.hoch@gmail.com>
+" Last Update:  2013-Jun-01
+" License:      Vim license
+" URL:          https://github.com/hcs42/vim-erlang
+
+" Acknowledgements: This script was originally created by Kresimir Marzic [1].
+" The script was then revamped by Csaba Hoch [2]. During the revamp, the new
+" highlighting style and some code was taken from the Erlang syntax script
+" that is part of vimerl [3], created by Oscar Hellström [4] and improved by
+" Ricardo Catalinas Jiménez [5].
+
+" [1]: Kreąimir Marľić (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
+" [2]: Csaba Hoch <csaba.hoch@gmail.com>
+" [3]: https://github.com/jimenezrick/vimerl
+" [4]: Oscar Hellström <oscar@oscarh.net> (http://oscar.hellstrom.st)
+" [5]: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
+
+" Customization:
+"
+" To use the old highlighting style, add this to your .vimrc:
+"
+"     let g:erlang_old_style_highlight = 1
+"
+" To highlight further module attributes, add them to
+" ~/.vim/after/syntax/erlang.vim:
+"
+"     syn keyword erlangAttribute myattr1 myattr2 contained
 
 " 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")
+elseif exists("b:current_syntax")
     finish
 endif
 
-
 " Case sensitive
 syn case match
 
-
-if ! exists ("erlang_characters")
-
-    " Basic elements
-    syn match   erlangComment          "%.*$" contains=erlangAnnotation,erlangTodo
-    syn match   erlangAnnotation       " \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)" contained
-    syn match   erlangAnnotation       "`[^']*'" contained
-    syn keyword erlangTodo             TODO FIXME XXX contained
-    syn match   erlangModifier         "\~\a\|\\\a\|\\\\" contained
-    syn match   erlangSpecialCharacter ":\|_\|@\|\\\|\"\|\."
-    syn match   erlangSeparator        "(\|)\|{\|}\|\[\|]\||\|||\|;\|,\|?\|->\|#" contained
-    syn region  erlangString           start=+"+ skip=+\\.+ end=+"+ contains=erlangModifier
-    syn region  erlangAtom             start=+'+ skip=+\\'+ end=+'+
-
-    " Operators
-    syn match   erlangOperator         "+\|-\|\*\|\/"
-    syn keyword erlangOperator         div rem or xor bor bxor bsl bsr
-    syn keyword erlangOperator         and band not bnot andalso orelse
-    syn match   erlangOperator         "==\|/=\|=:=\|=/=\|<\|=<\|>\|>="
-    syn match   erlangOperator         "++\|--\|=\|!\|<-"
-
-    " Numbers
-    syn match   erlangNumberInteger    "\d\+" contains=erlangSeparator
-    syn match   erlangNumberFloat1     "\d\+\.\d\+" contains=erlangSeparator
-    syn match   erlangNumberFloat2     "\d\+\(\.\d\+\)\=[eE][+-]\=\d\+\(\.\d\+\)\=" contains=erlangSeparator
-    syn match   erlangNumberFloat3     "\d\+[#]\x\+" contains=erlangSeparator
-    syn match   erlangNumberHex        "$\x\+" contains=erlangSeparator
-
-    " Ignore '_' and '-' in words
-    syn match   erlangWord             "\h\+\w*"
-
-    syn match   erlangChar             /\$./
+if version >= 600
+  setlocal iskeyword+=$,@-@
 endif
 
-if ! exists ("erlang_functions")
-    " Functions call
-    syn match   erlangFCall      "\%(\w\+\s*\.\s*\)*\w\+\s*[:@]\s*\w\+"
-
-    " build-in-functions (BIFs)
-    syn keyword erlangBIF        abs alive apply atom_to_list
-    syn keyword erlangBIF        binary_to_list binary_to_term
-    syn keyword erlangBIF        concat_binary
-    syn keyword erlangBIF        date disconnect_node
-    syn keyword erlangBIF        element erase exit
-    syn keyword erlangBIF        float float_to_list
-    syn keyword erlangBIF        get get_keys group_leader
-    syn keyword erlangBIF        halt hd
-    syn keyword erlangBIF        integer_to_list is_alive
-    syn keyword erlangBIF        length link list_to_atom list_to_binary
-    syn keyword erlangBIF        list_to_float list_to_integer list_to_pid
-    syn keyword erlangBIF        list_to_tuple load_module
-    syn keyword erlangBIF        make_ref monitor_node
-    syn keyword erlangBIF        node nodes now
-    syn keyword erlangBIF        open_port
-    syn keyword erlangBIF        pid_to_list process_flag
-    syn keyword erlangBIF        process_info process put
-    syn keyword erlangBIF        register registered round
-    syn keyword erlangBIF        self setelement size spawn
-    syn keyword erlangBIF        spawn_link split_binary statistics
-    syn keyword erlangBIF        term_to_binary throw time tl trunc
-    syn keyword erlangBIF        tuple_to_list
-    syn keyword erlangBIF        unlink unregister
-    syn keyword erlangBIF        whereis
-
-    " Other BIFs
-    syn keyword erlangBIF        atom binary constant function integer
-    syn keyword erlangBIF        list number pid ports port_close port_info
-    syn keyword erlangBIF        reference record
-
-    " erlang:BIFs
-    syn keyword erlangBIF        check_process_code delete_module
-    syn keyword erlangBIF        get_cookie hash math module_loaded
-    syn keyword erlangBIF        preloaded processes purge_module set_cookie
-    syn keyword erlangBIF        set_node
-
-    " functions of math library
-    syn keyword erlangFunction   acos asin atan atan2 cos cosh exp
-    syn keyword erlangFunction   log log10 pi pow power sin sinh sqrt
-    syn keyword erlangFunction   tan tanh
-
-    " Other functions
-    syn keyword erlangFunction   call module_info parse_transform
-    syn keyword erlangFunction   undefined_function
-
-    " Modules
-    syn keyword erlangModule     error_handler
-endif
+" Comments
+syn match erlangComment           '%.*$' contains=erlangCommentAnnotation,erlangTodo
+syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained
+syn match erlangCommentAnnotation /`[^']*'/ contained
+syn keyword erlangTodo            TODO FIXME XXX contained
+syn match erlangShebang           '^#!.*'
+
+" Numbers (minimum base is 2, maximum is 36.)
+syn match erlangNumberInteger '\<\d\+\>'
+syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>'
+syn match erlangNumberFloat   '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>'
+
+" Strings, atoms, characters
+syn region erlangString            start=/"/ end=/"/ contains=erlangStringModifier
+syn region erlangQuotedAtom        start=/'/ end=/'/ contains=erlangQuotedAtomModifier
+syn match erlangStringModifier     '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
+syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
+syn match erlangModifier           '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)'
+
+" Operators, separators
+syn match erlangOperator   '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/'
+syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse
+syn match erlangBracket    '{\|}\|\[\|]\||\|||'
+syn match erlangPipe       '|'
+syn match erlangRightArrow '->'
+
+" Atoms, function calls (order is important)
+syn match erlangAtom           '\<\l[[:alnum:]_@]*' contains=erlangBoolean
+syn keyword erlangBoolean      true false contained
+syn match erlangLocalFuncCall  '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF
+syn match erlangLocalFuncRef   '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@='
+syn match erlangGlobalFuncCall '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangComment
+syn match erlangGlobalFuncRef  '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' contains=erlangComment
+
+" Variables, macros, records
+syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*'
+syn match erlangMacro    '??\=[[:alnum:]_@]\+'
+syn match erlangMacro    '\%(-define(\)\@<=[[:alnum:]_@]\+'
+syn match erlangRecord   '#\s*\l[[:alnum:]_@]*'
+
+" Bitstrings
+syn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment
+
+" Constants and Directives
+syn match erlangUnknownAttribute '-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment
+syn match erlangAttribute '-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\|export_type\)' contains=erlangComment
+syn match erlangInclude   '-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment
+syn match erlangRecordDef '-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment
+syn match erlangDefine    '-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment
+syn match erlangPreCondit '-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment
+syn match erlangType      '-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment
+
+" Keywords
+syn keyword erlangKeyword after begin case catch cond end fun if let of query
+syn keyword erlangKeyword receive when try
+
+" Build-in-functions (BIFs)
+syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained
+syn keyword erlangBIF binary_part binary_to_atom contained
+syn keyword erlangBIF binary_to_existing_atom binary_to_float contained
+syn keyword erlangBIF binary_to_integer bitstring_to_list contained
+syn keyword erlangBIF binary_to_list binary_to_term bit_size contained
+syn keyword erlangBIF byte_size check_old_code check_process_code contained
+syn keyword erlangBIF concat_binary date delete_module demonitor contained
+syn keyword erlangBIF disconnect_node element erase error exit contained
+syn keyword erlangBIF float float_to_binary float_to_list contained
+syn keyword erlangBIF garbage_collect get get_keys group_leader contained
+syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained
+syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained
+syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained
+syn keyword erlangBIF is_float is_function is_integer is_list contained
+syn keyword erlangBIF is_number is_pid is_port is_process_alive contained
+syn keyword erlangBIF is_record is_reference is_tuple length link contained
+syn keyword erlangBIF list_to_atom list_to_binary contained
+syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained
+syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained
+syn keyword erlangBIF list_to_tuple load_module make_ref max min contained
+syn keyword erlangBIF module_loaded monitor monitor_node node contained
+syn keyword erlangBIF nodes now open_port pid_to_list port_close contained
+syn keyword erlangBIF port_command port_connect pre_loaded contained
+syn keyword erlangBIF process_flag process_flag process_info contained
+syn keyword erlangBIF process purge_module put register registered contained
+syn keyword erlangBIF round self setelement size spawn spawn_link contained
+syn keyword erlangBIF spawn_monitor spawn_opt split_binary contained
+syn keyword erlangBIF statistics term_to_binary throw time tl contained
+syn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained
+syn keyword erlangBIF unregister whereis contained
+
+" Sync at the beginning of functions: if this is not used, multiline string
+" are not always recognized, and the indentation script cannot use the
+" "searchpair" (because it would not always skip strings and comments when
+" looking for keywords and opening parens/brackets).
+syn sync match erlangSync grouphere NONE "^[a-z]\s*("
+let b:erlang_syntax_synced = 1
 
-if ! exists ("erlang_keywords")
-    " Constants and Directives
-    syn match   erlangDirective  "-behaviour\|-behavior"
-    syn match   erlangDirective  "-compile\|-define\|-else\|-endif\|-export\|-file"
-    syn match   erlangDirective  "-ifdef\|-ifndef\|-import\|-include_lib\|-include"
-    syn match   erlangDirective  "-module\|-record\|-undef"
-
-    syn match   erlangConstant   "-author\|-copyright\|-doc\|-vsn"
-
-    " Keywords
-    syn keyword erlangKeyword    after begin case catch
-    syn keyword erlangKeyword    cond end fun if
-    syn keyword erlangKeyword    let of query receive
-    syn keyword erlangKeyword    when
-    syn keyword erlangKeyword    try
-
-    " Processes
-    syn keyword erlangProcess    creation current_function dictionary
-    syn keyword erlangProcess    group_leader heap_size high initial_call
-    syn keyword erlangProcess    linked low memory_in_use message_queue
-    syn keyword erlangProcess    net_kernel node normal priority
-    syn keyword erlangProcess    reductions registered_name runnable
-    syn keyword erlangProcess    running stack_trace status timer
-    syn keyword erlangProcess    trap_exit waiting
-
-    " Ports
-    syn keyword erlangPort       command count_in count_out creation in
-    syn keyword erlangPort       in_format linked node out owner packeting
-
-    " Nodes
-    syn keyword erlangNode       atom_tables communicating creation
-    syn keyword erlangNode       current_gc current_reductions current_runtime
-    syn keyword erlangNode       current_wall_clock distribution_port
-    syn keyword erlangNode       entry_points error_handler friends
-    syn keyword erlangNode       garbage_collection magic_cookie magic_cookies
-    syn keyword erlangNode       module_table monitored_nodes name next_ref
-    syn keyword erlangNode       ports preloaded processes reductions
-    syn keyword erlangNode       ref_state registry runtime wall_clock
-
-    " Reserved
-    syn keyword erlangReserved   apply_lambda module_info module_lambdas
-    syn keyword erlangReserved   record record_index record_info
+" Define the default highlighting. See ":help group-name" for the groups and
+" their colors.
 
-    " Extras
-    syn keyword erlangExtra      badarg nocookie false fun true
+let s:old_style = (exists("g:erlang_old_style_highlight") && g:erlang_old_style_highlight == 1)
 
-    " Signals
-    syn keyword erlangSignal     badsig kill killed exit normal
-endif
+" 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_erlang_inits")
+  if version < 508
+    let did_erlang_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
+
+  " Comments
+  HiLink erlangComment Comment
+  HiLink erlangCommentAnnotation Special
+  HiLink erlangTodo Todo
+  HiLink erlangShebang Comment
+
+  " Numbers
+  HiLink erlangNumberInteger Number
+  HiLink erlangNumberFloat Float
+
+  " Strings, atoms, characters
+  HiLink erlangString String
+
+  if s:old_style
+    HiLink erlangQuotedAtom Type
+  else
+    HiLink erlangQuotedAtom String
+  endif
+
+  HiLink erlangStringModifier Special
+  HiLink erlangQuotedAtomModifier Special
+  HiLink erlangModifier Special
+
+  " Operators, separators
+  HiLink erlangOperator Operator
+  HiLink erlangRightArrow Operator
+  if s:old_style
+    HiLink erlangBracket Normal
+    HiLink erlangPipe Normal
+  else
+    HiLink erlangBracket Delimiter
+    HiLink erlangPipe Delimiter
+  endif
+
+  " Atoms, functions, variables, macros
+  if s:old_style
+    HiLink erlangAtom Normal
+    HiLink erlangLocalFuncCall Normal
+    HiLink erlangLocalFuncRef Normal
+    HiLink erlangGlobalFuncCall Function
+    HiLink erlangGlobalFuncRef Function
+    HiLink erlangVariable Normal
+    HiLink erlangMacro Normal
+    HiLink erlangRecord Normal
+  else
+    HiLink erlangAtom String
+    HiLink erlangLocalFuncCall Normal
+    HiLink erlangLocalFuncRef Normal
+    HiLink erlangGlobalFuncCall Normal
+    HiLink erlangGlobalFuncRef Normal
+    HiLink erlangVariable Identifier
+    HiLink erlangMacro Macro
+    HiLink erlangRecord Structure
+  endif
+
+  " Bitstrings
+  if !s:old_style
+    HiLink erlangBitType Type
+  endif
+
+  " Constants and Directives
+  if s:old_style
+    HiLink erlangAttribute Type
+    HiLink erlangMacroDef Type
+    HiLink erlangUnknownAttribute Normal
+    HiLink erlangInclude Type
+    HiLink erlangRecordDef Type
+    HiLink erlangDefine Type
+    HiLink erlangPreCondit Type
+    HiLink erlangType Type
+  else
+    HiLink erlangAttribute Keyword
+    HiLink erlangMacroDef Macro
+    HiLink erlangUnknownAttribute Normal
+    HiLink erlangInclude Include
+    HiLink erlangRecordDef Keyword
+    HiLink erlangDefine Define
+    HiLink erlangPreCondit PreCondit
+    HiLink erlangType Type
+  endif
 
+  " Keywords
+  HiLink erlangKeyword Keyword
 
+  " Build-in-functions (BIFs)
+  HiLink erlangBIF Function
 
-" 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_erlang_inits")
-    if version < 508
-        let did_erlang_inits = 1
-        command -nargs=+ HiLink hi link <args>
-    else
-        command -nargs=+ HiLink hi def link <args>
-    endif
-
-    " erlang_characters
-    HiLink erlangComment Comment
-    HiLink erlangAnnotation Special
-    HiLink erlangTodo Todo
-    HiLink erlangSpecialCharacter Special
-    HiLink erlangSeparator Normal
-    HiLink erlangModifier Special
-    HiLink erlangOperator Operator
-    HiLink erlangString String
-    HiLink erlangAtom Type
-
-    HiLink erlangNumberInteger Number
-    HiLink erlangNumberFloat1 Float
-    HiLink erlangNumberFloat2 Float
-    HiLink erlangNumberFloat3 Float
-    HiLink erlangNumberFloat4 Float
-    HiLink erlangNumberHex Number
-
-    HiLink erlangWord Normal
-
-    " erlang_functions
-    HiLink erlangFCall Function
-    HiLink erlangBIF Function
-    HiLink erlangFunction Function
-    HiLink erlangModuleFunction Function
-
-    " erlang_keywords
-    HiLink erlangDirective Type
-    HiLink erlangConstant Type
-    HiLink erlangKeyword Keyword
-    HiLink erlangProcess Special
-    HiLink erlangPort Special
-    HiLink erlangNode Special
-    HiLink erlangReserved Statement
+  if s:old_style
+    HiLink erlangBoolean Statement
+    HiLink erlangExtra Statement
+    HiLink erlangSignal Statement
+  else
+    HiLink erlangBoolean Boolean
     HiLink erlangExtra Statement
     HiLink erlangSignal Statement
+  endif
 
-    delcommand HiLink
+  delcommand HiLink
 endif
 
-
 let b:current_syntax = "erlang"
 
+" vim: sw=2 et
diff -Naur vim73.orig/runtime/syntax/eruby.vim vim73/runtime/syntax/eruby.vim
--- vim73.orig/runtime/syntax/eruby.vim	2010-05-27 13:54:02.000000000 +0000
+++ vim73/runtime/syntax/eruby.vim	2013-08-04 19:09:09.333947698 +0000
@@ -1,9 +1,7 @@
 " Vim syntax file
 " Language:		eRuby
 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
-" Last Change:		2010 Apr 15
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 
 if exists("b:current_syntax")
@@ -18,13 +16,12 @@
   let g:eruby_default_subtype = "html"
 endif
 
-if !exists("b:eruby_subtype") && main_syntax == 'eruby'
+if &filetype =~ '^eruby\.'
+  let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
+elseif !exists("b:eruby_subtype") && main_syntax == 'eruby'
   let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
   let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
   if b:eruby_subtype == ''
-    let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
-  endif
-  if b:eruby_subtype == ''
     let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\)\+$','',''),'\.\zs\w\+$')
   endif
   if b:eruby_subtype == 'rhtml'
@@ -61,7 +58,7 @@
 exe 'syn region  erubyOneLiner   matchgroup=erubyDelimiter start="^%\{1,'.b:eruby_nest_level.'\}%\@!"    end="$"     contains=@rubyTop	     containedin=ALLBUT,@erubyRegions keepend oneline'
 exe 'syn region  erubyBlock      matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}%\@!-\=" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
 exe 'syn region  erubyExpression matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}=\{1,4}" end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=@rubyTop  containedin=ALLBUT,@erubyRegions keepend'
-exe 'syn region  erubyComment    matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}#"       end="%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
+exe 'syn region  erubyComment    matchgroup=erubyDelimiter start="<%\{1,'.b:eruby_nest_level.'\}-\=#"    end="[=-]\=%\@<!%\{1,'.b:eruby_nest_level.'\}>" contains=rubyTodo,@Spell containedin=ALLBUT,@erubyRegions keepend'
 
 " Define the default highlighting.
 
diff -Naur vim73.orig/runtime/syntax/esmtprc.vim vim73/runtime/syntax/esmtprc.vim
--- vim73.orig/runtime/syntax/esmtprc.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/esmtprc.vim	2013-08-04 19:09:09.337281022 +0000
@@ -12,23 +12,23 @@
 endif
 
 "All options
-:syntax keyword	esmtprcOptions hostname username password starttls certificate_passphrase preconnect identity mda
+syntax keyword	esmtprcOptions hostname username password starttls certificate_passphrase preconnect identity mda
 
 "All keywords
-:syntax keyword esmtprcIdentifier default enabled disabled required
+syntax keyword esmtprcIdentifier default enabled disabled required
 
 "We're trying to be smarer than /."*@.*/ :)
-:syntax match esmtprcAddress /[a-z0-9_.-]*[a-z0-9]\+@[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+/
-:syntax match esmtprcFulladd /[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+:[0-9]\+/
+syntax match esmtprcAddress /[a-z0-9_.-]*[a-z0-9]\+@[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+/
+syntax match esmtprcFulladd /[a-z0-9_.-]*[a-z0-9]\+\.[a-z]\+:[0-9]\+/
  
 "String..
-:syntax region esmtprcString start=/"/ end=/"/
+syntax region esmtprcString start=/"/ end=/"/
 
 
-:highlight link esmtprcOptions		Label
-:highlight link esmtprcString 		String
-:highlight link esmtprcAddress		Type
-:highlight link esmtprcIdentifier 	Identifier
-:highlight link esmtprcFulladd		Include
+highlight link esmtprcOptions		Label
+highlight link esmtprcString 		String
+highlight link esmtprcAddress		Type
+highlight link esmtprcIdentifier 	Identifier
+highlight link esmtprcFulladd		Include
 
-let b:current_syntax="esmtprc"
+let b:current_syntax = "esmtprc"
diff -Naur vim73.orig/runtime/syntax/expect.vim vim73/runtime/syntax/expect.vim
--- vim73.orig/runtime/syntax/expect.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/expect.vim	2013-08-04 19:09:09.343947668 +0000
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:	Expect
 " Maintainer:	Ralph Jennings <knowbudy@oro.net>
-" Last Change:	2001 May 09
+" Last Change:	2012 Jun 01
+" 		(Dominique Pelle added @Spell)
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -72,11 +73,12 @@
   "syn match  expectIdentifier	"\<[a-z_][a-z0-9_]*\>"
 syn case match
 
-syn region  expectString	start=+"+  end=+"+  contains=expectVariables,expectSpecial
+syn region  expectString	start=+"+  end=+"+  contains=@Spell,expectVariables,expectSpecial
 
 " Are these really comments in Expect? (I never use it, so I'm just guessing).
 syn keyword expectTodo		contained TODO
-syn match   expectComment		"#.*$" contains=expectTodo
+syn match   expectComment	"#.*$" contains=@Spell,expectTodo
+syn match   expectSharpBang	"\%^#!.*"
 
 " Define the default highlighting.
 " For version 5.7 and earlier: only when not done already
@@ -89,6 +91,7 @@
     command -nargs=+ HiLink hi def link <args>
   endif
 
+  HiLink expectSharpBang	PreProc
   HiLink expectVariables	Special
   HiLink expectCommand		Function
   HiLink expectStatement	Statement
diff -Naur vim73.orig/runtime/syntax/falcon.vim vim73/runtime/syntax/falcon.vim
--- vim73.orig/runtime/syntax/falcon.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/falcon.vim	2013-08-04 19:09:09.347280991 +0000
@@ -0,0 +1,199 @@
+" Vim syntax file
+" Language:     Falcon
+" Maintainer:   Steven Oliver <oliver.steven@gmail.com>
+" Website:      http://github.com/steveno/vim-files/blob/master/syntax/falcon.vim
+" Credits:      Thanks the ruby.vim authors, I borrowed a lot!
+"               Thanks to the lisp authors for the rainbow code!
+" -------------------------------------------------------------------------------
+
+" When wanted, highlight the trailing whitespace.
+if exists("c_space_errors")
+    if !exists("c_no_trail_space_error")
+        syn match falconSpaceError "\s\+$"
+    endif
+
+    if !exists("c_no_tab_space_error")
+        syn match falconSpaceError " \+\t"me=e-1
+    endif
+endif
+
+" Symbols
+syn match falconSymbol "\(;\|,\|\.\)"
+syn match falconSymbolOther "\(#\|@\)" display
+
+" Operators
+syn match falconOperator "\(+\|-\|\*\|/\|=\|<\|>\|\*\*\|!=\|\~=\)"
+syn match falconOperator "\(<=\|>=\|=>\|\.\.\|<<\|>>\|\"\)"
+
+" Clusters
+syn region falconSymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@falconStringSpecial fold
+syn case match
+
+" Keywords
+syn keyword falconKeyword all allp any anyp as attributes brigade cascade catch choice class const
+syn keyword falconKeyword continue def directive do list dropping enum eq eval exit export from function
+syn keyword falconKeyword give global has hasnt in init innerfunc lambda launch launch len List list
+syn keyword falconKeyword load notin object pass print printl provides raise return self sender static to
+syn keyword falconKeyword try xamp
+
+" Error Type Keywords
+syn keyword falconKeyword CloneError CodeError Error InterruprtedError IoError MathError
+syn keyword falconKeyword ParamError RangeError SyntaxError TraceStep TypeError
+
+" Todo
+syn keyword falconTodo DEBUG FIXME NOTE TODO XXX
+
+" Conditionals
+syn keyword falconConditional and case default else end if iff
+syn keyword falconConditional elif or not switch select
+syn match   falconConditional "end\s\if"
+
+" Loops
+syn keyword falconRepeat break for loop forfirst forlast formiddle while
+
+" Booleans
+syn keyword falconBool true false
+
+" Constants
+syn keyword falconConst PI E nil
+syn match   falconConstant  "\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
+
+" Comments
+syn match falconCommentSkip contained "^\s*\*\($\|\s\+\)"
+syn region falconComment start="/\*" end="\*/" contains=@falconCommentGroup,falconSpaceError,falconTodo
+syn region falconCommentL start="//" end="$" keepend contains=@falconCommentGroup,falconSpaceError,falconTodo
+syn match falconSharpBang "\%^#!.*" display
+syn sync ccomment falconComment
+
+" Numbers
+syn match falconNumbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal
+syn match falconNumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal
+syn match falconHexadecimal contained "\<0x\x\+\>"
+syn match falconOctal contained "\<0\o\+\>"
+syn match falconIntLiteral contained "[+-]\<d\+\(\d\+\)\?\>"
+syn match falconFloatLiteral contained "[+-]\=\d\+\.\d*"
+syn match falconFloatLiteral contained "[+-]\=\d*\.\d*"
+
+" Includes
+syn keyword falconInclude load import
+
+" Expression Substitution and Backslash Notation
+syn match falconStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
+syn match falconStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
+syn region falconSymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=falconStringEscape fold
+
+" Normal String and Shell Command Output
+syn region falconString matchgroup=falconStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=falconStringEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="'" end="'" skip="\\\\\|\\'" fold
+syn region falconString matchgroup=falconStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=falconStringEscape fold
+
+" Generalized Single Quoted String, Symbol and Array of Strings
+syn region falconString matchgroup=falconStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"  end="\z1" skip="\\\\\|\\\z1" fold
+syn region falconString matchgroup=falconStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape
+syn region falconString matchgroup=falconStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape
+syn region falconString matchgroup=falconStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape
+syn region falconString matchgroup=falconStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape
+syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape
+
+" Generalized Double Quoted String and Array of Strings and Shell Command Output
+syn region falconString matchgroup=falconStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=falconStringEscape,falconDelimEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=falconStringEscape,falconDelimEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=falconStringEscape,falconDelimEscape fold
+syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=falconStringEscape,falconDelimEscape fold
+
+syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2 matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
+
+syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3 matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ fold keepend
+syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
+
+" Falcon rainbox to highlight parens in varying colors
+if exists("g:falcon_rainbow") && g:falcon_rainbow != 0
+    syn region falconParen0           matchgroup=hlLevel0 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen1
+    syn region falconParen1 contained matchgroup=hlLevel1 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen2
+    syn region falconParen2 contained matchgroup=hlLevel2 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen3
+    syn region falconParen3 contained matchgroup=hlLevel3 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen4
+    syn region falconParen4 contained matchgroup=hlLevel4 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen5
+    syn region falconParen5 contained matchgroup=hlLevel5 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen6
+    syn region falconParen6 contained matchgroup=hlLevel6 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen7
+    syn region falconParen7 contained matchgroup=hlLevel7 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen8
+    syn region falconParen8 contained matchgroup=hlLevel8 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen9
+    syn region falconParen9 contained matchgroup=hlLevel9 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen0
+endif
+
+" Setup the colors for the rainbox
+if exists("g:falcon_rainbow") && g:falcon_rainbow != 0
+    if &bg == "dark"
+        hi def hlLevel0 ctermfg=red         guifg=red1
+        hi def hlLevel1 ctermfg=yellow      guifg=orange1
+        hi def hlLevel2 ctermfg=green       guifg=yellow1
+        hi def hlLevel3 ctermfg=cyan        guifg=greenyellow
+        hi def hlLevel4 ctermfg=magenta     guifg=green1
+        hi def hlLevel5 ctermfg=red         guifg=springgreen1
+        hi def hlLevel6 ctermfg=yellow      guifg=cyan1
+        hi def hlLevel7 ctermfg=green       guifg=slateblue1
+        hi def hlLevel8 ctermfg=cyan        guifg=magenta1
+        hi def hlLevel9 ctermfg=magenta     guifg=purple1
+    else
+        hi def hlLevel0 ctermfg=red         guifg=red3
+        hi def hlLevel1 ctermfg=darkyellow  guifg=orangered3
+        hi def hlLevel2 ctermfg=darkgreen   guifg=orange2
+        hi def hlLevel3 ctermfg=blue        guifg=yellow3
+        hi def hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
+        hi def hlLevel5 ctermfg=red         guifg=green4
+        hi def hlLevel6 ctermfg=darkyellow  guifg=paleturquoise3
+        hi def hlLevel7 ctermfg=darkgreen   guifg=deepskyblue4
+        hi def hlLevel8 ctermfg=blue        guifg=darkslateblue
+        hi def hlLevel9 ctermfg=darkmagenta guifg=darkviolet
+    endif
+endif
+
+" Syntax Synchronizing
+syn sync minlines=10 maxlines=100
+
+" Define the default highlighting
+if !exists("did_falcon_syn_inits")
+    command -nargs=+ HiLink hi def link <args>
+
+    HiLink falconKeyword          Keyword
+    HiLink falconCommentString    String
+    HiLink falconTodo             Todo
+    HiLink falconConditional      Keyword
+    HiLink falconRepeat           Repeat
+    HiLink falconcommentSkip      Comment
+    HiLink falconComment          Comment
+    HiLink falconCommentL         Comment
+    HiLink falconConst            Constant
+    HiLink falconConstants        Constant
+    HiLink falconOperator         Operator
+    HiLink falconSymbol           Normal
+    HiLink falconSpaceError       Error
+    HiLink falconHexadecimal      Number
+    HiLink falconOctal            Number
+    HiLink falconIntLiteral       Number
+    HiLink falconFloatLiteral     Float
+    HiLink falconStringEscape     Special
+    HiLink falconStringDelimiter  Delimiter
+    HiLink falconString           String
+    HiLink falconBool             Constant
+    HiLink falconSharpBang        PreProc
+    HiLink falconInclude          Include
+    HiLink falconSymbol           Constant
+    HiLink falconSymbolOther      Delimiter
+    delcommand HiLink
+endif
+
+let b:current_syntax = "falcon"
+
+" vim: set sw=4 sts=4 et tw=80 :
+
diff -Naur vim73.orig/runtime/syntax/fasm.vim vim73/runtime/syntax/fasm.vim
--- vim73.orig/runtime/syntax/fasm.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/fasm.vim	2013-08-04 19:09:09.347280991 +0000
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:	Flat Assembler (FASM)
 " Maintainer:	Ron Aaron <ron@ronware.org>
-" Last Change:	2004 May 16
+" Last Change:	2012/02/13
 " Vim URL:	http://www.vim.org/lang.html
 " FASM Home:	http://flatassembler.net/
-" FASM Version: 1.52
+" FASM Version: 1.56
 
 if version < 600
   syntax clear
@@ -12,6 +12,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 setlocal iskeyword=a-z,A-Z,48-57,.,_
 setlocal isident=a-z,A-Z,48-57,.,_
 syn case ignore
@@ -97,7 +100,7 @@
 syn keyword fasmDirective	elf entry executable export extern far fixups format gui
 syn keyword fasmDirective	import label ms mz native near notpageable pe public readable
 syn keyword fasmDirective	repeat resource section segment shareable stack times
-syn keyword fasmDirective	use16 use32 virtual wdm writeable
+syn keyword fasmDirective	use16 use32 virtual wdm writable writeable
 syn keyword fasmOperator 	as at defined eq eqtype from mod on ptr rva used
 
 syn match	fasmNumericOperator	"[+-/*]"
@@ -142,4 +145,8 @@
 hi def link	fasmLabel label
 hi def link	fasmPrefix preproc
 let b:current_syntax = "fasm"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 sw=8 :
diff -Naur vim73.orig/runtime/syntax/forth.vim vim73/runtime/syntax/forth.vim
--- vim73.orig/runtime/syntax/forth.vim	2010-05-29 12:09:37.000000000 +0000
+++ vim73/runtime/syntax/forth.vim	2013-08-04 19:09:09.357280961 +0000
@@ -1,13 +1,13 @@
 " Vim syntax file
 " Language:    FORTH
 " Maintainer:  Christian V. J. Brssow <cvjb@cvjb.de>
-" Last Change: Di 07 Jul 2009 21:38:45 CEST
+" Last Change: So 27 Mai 2012 15:56:28 CEST
 " Filenames:   *.fs,*.ft
 " URL:	       http://www.cvjb.de/comp/vim/forth.vim
 
-" $Id: forth.vim,v 1.12 2008/07/07 21:39:12 bruessow Exp $
+" $Id: forth.vim,v 1.14 2012/05/27 15:57:22 bruessow Exp $
 
-" The list of keywords is incomplete, compared with the offical ANS
+" The list of keywords is incomplete, compared with the official ANS
 " wordlist. If you use this language, please improve it, and send me
 " the patches.
 "
@@ -17,6 +17,14 @@
 
 " Many Thanks to...
 "
+" 2012-05-13:
+" Dominique Pell <dominique dot pelle at gmail dot com> for sending the
+" patch to allow spellchecking of strings, comments, ...
+" 
+" 2012-01-07:
+" Thilo Six <T.Six at gmx dot de> send a patch for cpoptions.
+" See the discussion at http://thread.gmane.org/gmane.editors.vim.devel/32151
+"
 " 2009-06-28:
 " Josh Grams send a patch to allow the parenthesis comments at the
 " beginning of a line. That patch also fixed a typo in one of the
@@ -40,14 +48,14 @@
 " Bill McCarthy <WJMc@...> and Ilya Sher <ilya-vim@...>
 " Who found a bug in the ccomment line in 2004!!!
 " I'm really very sorry, that it has taken two years to fix that
-" in the offical version of this file. Shame on me.
+" in the official version of this file. Shame on me.
 " I think my face will be red the next ten years...
 "
 " 2006-05-21:
 " Thomas E. Vaughan <tevaugha at ball dot com> send me a patch
 " for the parenthesis comment word, so words with a trailing
 " parenthesis will not start the highlighting for such comments.
-" 
+"
 " 2003-05-10:
 " Andrew Gaul <andrew at gaul.org> send me a patch for
 " forthOperators.
@@ -80,6 +88,9 @@
     finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Synchronization method
 syn sync ccomment
 syn sync maxlines=200
@@ -125,7 +136,7 @@
 syn keyword forthOperators 0< 0<= 0<> 0= 0> 0>= < <= <> = > >= U< U<=
 syn keyword forthOperators U> U>= D0< D0<= D0<> D0= D0> D0>= D< D<= D<>
 syn keyword forthOperators D= D> D>= DU< DU<= DU> DU>= WITHIN ?NEGATE
-syn keyword forthOperators ?DNEGATE 
+syn keyword forthOperators ?DNEGATE
 
 " stack manipulations
 syn keyword forthStack DROP NIP DUP OVER TUCK SWAP ROT -ROT ?DUP PICK ROLL
@@ -171,7 +182,7 @@
 syn keyword forthDefine <INTERPRETATION COMPILATION> <COMPILATION ] LASTXT
 syn keyword forthDefine COMP' POSTPONE, FIND-NAME NAME>INT NAME?INT NAME>COMP
 syn keyword forthDefine NAME>STRING STATE C; CVARIABLE
-syn keyword forthDefine , 2, F, C, 
+syn keyword forthDefine , 2, F, C,
 syn match forthDefine "\[IFDEF]"
 syn match forthDefine "\[IFUNDEF]"
 syn match forthDefine "\[THEN]"
@@ -210,7 +221,7 @@
 syn region forthCharOps start=+."\s+ skip=+\\"+ end=+"+
 
 " char-number conversion
-syn keyword forthConversion <<# <# # #> #>> #S (NUMBER) (NUMBER?) CONVERT D>F 
+syn keyword forthConversion <<# <# # #> #>> #S (NUMBER) (NUMBER?) CONVERT D>F
 syn keyword forthConversion D>S DIGIT DPL F>D HLD HOLD NUMBER S>D SIGN >NUMBER
 syn keyword forthConversion F>S S>F
 
@@ -225,7 +236,7 @@
 syn keyword forthVocs VOCABULARY DEFINITIONS
 
 " File keywords
-syn keyword forthFileMode R/O R/W W/O BIN 
+syn keyword forthFileMode R/O R/W W/O BIN
 syn keyword forthFileWords OPEN-FILE CREATE-FILE CLOSE-FILE DELETE-FILE
 syn keyword forthFileWords RENAME-FILE READ-FILE READ-LINE KEY-FILE
 syn keyword forthFileWords KEY?-FILE WRITE-FILE WRITE-LINE EMIT-FILE
@@ -249,22 +260,22 @@
 syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe]\d\+\>'
 syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe][-+]\d\+\>'
 
-" XXX If you find this overkill you can remove it. this has to come after the
+" XXX If you find this overkill you can remove it. This has to come after the
 " highlighting for numbers otherwise it has no effect.
 syn region forthComment start='0 \[if\]' end='\[endif\]' end='\[then\]' contains=forthTodo
 
 " Strings
-syn region forthString start=+\.*\"+ end=+"+ end=+$+
+syn region forthString start=+\.*\"+ end=+"+ end=+$+ contains=@Spell
 " XXX
-syn region forthString start=+s\"+ end=+"+ end=+$+
-syn region forthString start=+c\"+ end=+"+ end=+$+
+syn region forthString start=+s\"+ end=+"+ end=+$+ contains=@Spell
+syn region forthString start=+c\"+ end=+"+ end=+$+ contains=@Spell
 
 " Comments
-syn match forthComment '\\\s.*$' contains=forthTodo,forthSpaceError
-syn region forthComment start='\\S\s' end='.*' contains=forthTodo,forthSpaceError
-syn match forthComment '\.(\s[^)]*)' contains=forthTodo,forthSpaceError
-syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=forthTodo,forthSpaceError
-syn region forthComment start='/\*' end='\*/' contains=forthTodo,forthSpaceError
+syn match forthComment '\\\s.*$' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='\\S\s' end='.*' contains=@Spell,forthTodo,forthSpaceError
+syn match forthComment '\.(\s[^)]*)' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=@Spell,forthTodo,forthSpaceError
+syn region forthComment start='/\*' end='\*/' contains=@Spell,forthTodo,forthSpaceError
 
 " Include files
 syn match forthInclude '^INCLUDE\s\+\k\+'
@@ -288,7 +299,7 @@
 	command -nargs=+ HiLink hi def link <args>
     endif
 
-    " The default methods for highlighting. Can be overriden later.
+    " The default methods for highlighting. Can be overridden later.
     HiLink forthTodo Todo
     HiLink forthOperators Operator
     HiLink forthMath Number
@@ -331,4 +342,6 @@
 
 let b:current_syntax = "forth"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim:ts=8:sw=4:nocindent:smartindent:
diff -Naur vim73.orig/runtime/syntax/fortran.vim vim73/runtime/syntax/fortran.vim
--- vim73.orig/runtime/syntax/fortran.vim	2010-07-22 20:26:18.000000000 +0000
+++ vim73/runtime/syntax/fortran.vim	2013-08-04 19:09:09.357280961 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
-" Language:	Fortran95 (and Fortran90, Fortran77, F and elf90)
-" Version:	0.89
-" Last Change:	2010 July 21
+" Language:	Fortran 2008 (and earlier versions: 2003, 95, 90, and 77)
+" Version:	0.94
+" Last Change:	2012 June 18
 " Maintainer:	Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
 " Usage:	For instructions, do :help fortran-syntax from Vim
 " Credits:
@@ -11,63 +11,48 @@
 "  Walter Dieudonn, Alexander Wagner, Roman Bertle, Charles Rendleman,
 "  Andrew Griffiths, Joe Krahn, and Hendrik Merx.
 
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit if a syntax file is already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+if exists("b:current_syntax")
   finish
 endif
 
-" let b:fortran_dialect = fortran_dialect if set correctly by user
-if exists("fortran_dialect")
-  if fortran_dialect =~ '\<\(f\(9[05]\|77\)\|elf\|F\)\>'
-    let b:fortran_dialect = matchstr(fortran_dialect,'\<\(f\(9[05]\|77\)\|elf\|F\)\>')
-  else
-    echohl WarningMsg | echo "Unknown value of fortran_dialect" | echohl None
-    let b:fortran_dialect = "unknown"
-  endif
-else
-  let b:fortran_dialect = "unknown"
-endif
+let s:cpo_save = &cpo
+set cpo&vim
 
-" fortran_dialect not set or set incorrectly by user,
-if b:fortran_dialect == "unknown"
-  " set b:fortran_dialect from directive in first three lines of file
-  let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
-  if b:fortran_retype =~ '\<fortran_dialect\s*=\s*F\>'
-    let b:fortran_dialect = "F"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*elf\>'
-    let b:fortran_dialect = "elf"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f90\>'
-    let b:fortran_dialect = "f90"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f95\>'
-    let b:fortran_dialect = "f95"
-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f77\>'
-    let b:fortran_dialect = "f77"
-  else
-    " no directive found, so assume f95
-    let b:fortran_dialect = "f95"
-  endif
-  unlet b:fortran_retype
+" Choose fortran_dialect using the priority:
+" source file directive > buffer-local value > global value > default
+" try using directive in first three lines of file
+let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
+if b:fortran_retype =~? '\<fortran_dialect\s*=\s*F\>'
+  let b:fortran_dialect = "F"
+elseif b:fortran_retype =~? '\<fortran_dialect\s*=\s*f08\>'
+  let b:fortran_dialect = "f08"
+elseif !exists("b:fortran_dialect")
+  if exists("g:fortran_dialect") && g:fortran_dialect =~# '\<F\|f08\>'
+    " try global variable
+    let b:fortran_dialect = g:fortran_dialect
+  else         " nothing found, so use default
+    let b:fortran_dialect = "f08"
+  endif
+endif
+unlet! b:fortran_retype
+" make sure buffer-local value is not invalid
+if b:fortran_dialect !~# '\<F\|f08\>'
+  let b:fortran_dialect = "f08"
 endif
 
 " Choose between fixed and free source form if this hasn't been done yet
 if !exists("b:fortran_fixed_source")
-  if b:fortran_dialect == "elf" || b:fortran_dialect == "F"
-    " elf and F require free source form
+  if b:fortran_dialect == "F"
+    " F requires free source form
     let b:fortran_fixed_source = 0
-  elseif b:fortran_dialect == "f77"
-    " f77 requires fixed source form
-    let b:fortran_fixed_source = 1
   elseif exists("fortran_free_source")
-    " User guarantees free source form for all f90 and f95 files
+    " User guarantees free source form for all fortran files
     let b:fortran_fixed_source = 0
   elseif exists("fortran_fixed_source")
-    " User guarantees fixed source form for all f90 and f95 files
+    " User guarantees fixed source form for all fortran files
     let b:fortran_fixed_source = 1
   else
-    " f90 and f95 allow both fixed and free source form.
+    " Modern fortran still allows both free and fixed source form.
     " Assume fixed source form unless signs of free source form
     " are detected in the first five columns of the first s:lmax lines.
     " Detection becomes more accurate and time-consuming if more lines
@@ -93,29 +78,18 @@
 
 syn case ignore
 
-if b:fortran_dialect !=? "f77"
-  if version >= 600
-    if b:fortran_fixed_source == 1
-      syn match fortranConstructName	"^\s\{6,}\zs\a\w*\ze\s*:"
-    else
-      syn match fortranConstructName	"^\s*\zs\a\w*\ze\s*:"
-    endif
-    if exists("fortran_more_precise")
-      syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
-      syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
-      syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
-    endif
-  else
-    if b:fortran_fixed_source == 1
-      syn match fortranConstructName	"^\s\{6,}\a\w*\s*:"
-    else
-      syn match fortranConstructName	"^\s*\a\w*\s*:"
-    endif
-  endif
+if b:fortran_fixed_source == 1
+  syn match fortranConstructName	"^\s\{6,}\zs\a\w*\ze\s*:"
+else
+  syn match fortranConstructName	"^\s*\zs\a\w*\ze\s*:"
+endif
+if exists("fortran_more_precise")
+  syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
+  syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
+  syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
 endif
 
-syn match   fortranUnitHeader	"\<end\>"
-
+syn match fortranUnitHeader	"\<end\>"
 syn match fortranType		"\<character\>"
 syn match fortranType		"\<complex\>"
 syn match fortranType		"\<integer\>"
@@ -130,6 +104,7 @@
 syn keyword fortranKeyword	return stop
 syn keyword fortranConditional	else then
 syn match fortranConditional	"\<if\>"
+syn match fortranConditionalOb	"\<if\s*(.*)\s*\d\+\s*,\s*\d\+\s*,\s*\d\+\s*$"
 syn match fortranRepeat		"\<do\>"
 
 syn keyword fortranTodo		contained todo fixme
@@ -141,6 +116,7 @@
 syn match fortranOperator	"\.\s*n\=eqv\s*\."
 syn match fortranOperator	"\.\s*\(and\|or\|not\)\s*\."
 syn match fortranOperator	"\(+\|-\|/\|\*\)"
+syn match fortranTypeOb		"\<character\s*\*"
 
 syn match fortranBoolean	"\.\s*\(true\|false\)\s*\."
 
@@ -155,17 +131,17 @@
 
 syn keyword fortranIO		access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit
 
-syn keyword fortran66Intrinsic		alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
+syn keyword fortranIntrinsicR		alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
 
 " Intrinsics provided by some vendors
-syn keyword fortranExtraIntrinsic	algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama erf erfc gamma iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
+syn keyword fortranExtraIntrinsic	algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
 
-syn keyword fortran77Intrinsic	abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
-syn match fortran77Intrinsic	"\<len\s*[(,]"me=s+3
-syn match fortran77Intrinsic	"\<real\s*("me=s+4
+syn keyword fortranIntrinsic	abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
+syn match fortranIntrinsic	"\<len\s*[(,]"me=s+3
+syn match fortranIntrinsic	"\<real\s*("me=s+4
 syn match fortranType		"\<implicit\s\+real"
 syn match fortranType		"^\s*real\>"
-syn match fortran90Intrinsic	"\<logical\s*("me=s+7
+syn match fortranIntrinsic	"\<logical\s*("me=s+7
 syn match fortranType		"\<implicit\s\+logical"
 syn match fortranType		"^\s*logical\>"
 
@@ -173,13 +149,13 @@
 " Integers
 syn match fortranNumber	display "\<\d\+\(_\a\w*\)\=\>"
 " floating point number, without a decimal point
-syn match fortranFloatNoDec	display	"\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
+syn match fortranFloatIll	display	"\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
 " floating point number, starting with a decimal point
-syn match fortranFloatIniDec	display	"\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll	display	"\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number, no digits after decimal
-syn match fortranFloatEndDec	display	"\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll	display	"\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number, D or Q exponents
-syn match fortranFloatDExp	display	"\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+syn match fortranFloatIll	display	"\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " floating point number
 syn match fortranFloat	display	"\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
 " Numbers in formats
@@ -197,131 +173,131 @@
 syn match fortranLabelNumber	display	"^   \d\d\=\s"ms=s+3,me=e-1
 syn match fortranLabelNumber	display	"^    \d\s"ms=s+4,me=e-1
 
-if version >= 600 && exists("fortran_more_precise")
+if exists("fortran_more_precise")
   " Numbers as targets
   syn match fortranTarget	display	"\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
   syn match fortranTarget	display	"\(\<do\s\+\)\@<=\d\+\>"
   syn match fortranTarget	display	"\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
 endif
 
-syn keyword fortranTypeEx	external
-syn keyword fortranIOEx		format
-syn match fortranKeywordEx	"\<continue\>"
+syn keyword fortranTypeR	external
+syn keyword fortranIOR		format
+syn match fortranKeywordR	"\<continue\>"
 syn match fortranKeyword	"^\s*\d\+\s\+continue\>"
-syn match fortranKeywordEx	"\<go\s*to\>"
-syn region fortranStringEx	start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
-syn keyword fortran77IntrinsicEx	dim lge lgt lle llt mod
-syn keyword fortranKeywordOb	assign pause to
-
-if b:fortran_dialect != "f77"
-
-  syn match fortranType         "\<type\>"
-  syn keyword fortranType	none
-
-  syn keyword fortranStructure	private public intent optional
-  syn keyword fortranStructure	pointer target allocatable
-  syn keyword fortranStorageClass	in out
-  syn match fortranStorageClass	"\<kind\s*="me=s+4
-  syn match fortranStorageClass	"\<len\s*="me=s+3
-
-  syn match fortranUnitHeader	"\<module\>"
-  syn keyword fortranUnitHeader	use only contains
-  syn keyword fortranUnitHeader	result operator assignment
-  syn match fortranUnitHeader	"\<interface\>"
-  syn match fortranUnitHeader	"\<recursive\>"
-  syn keyword fortranKeyword	allocate deallocate nullify cycle exit
-  syn match fortranConditional	"\<select\>"
-  syn keyword fortranConditional	case default where elsewhere
-
-  syn match fortranOperator	"\(\(>\|<\)=\=\|==\|/=\|=\)"
-  syn match fortranOperator	"=>"
-
-  syn region fortranString	start=+"+ end=+"+	contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
-  syn keyword fortranIO		pad position action delim readwrite
-  syn keyword fortranIO		eor advance nml
-
-  syn keyword fortran90Intrinsic	adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
-  syn keyword fortran90Intrinsic	scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
-  syn match fortran90Intrinsic		"\<not\>\(\s*\.\)\@!"me=s+3
-  syn match fortran90Intrinsic	"\<kind\>\s*[(,]"me=s+4
-
-  syn match  fortranUnitHeader	"\<end\s*function"
-  syn match  fortranUnitHeader	"\<end\s*interface"
-  syn match  fortranUnitHeader	"\<end\s*module"
-  syn match  fortranUnitHeader	"\<end\s*program"
-  syn match  fortranUnitHeader	"\<end\s*subroutine"
-  syn match  fortranRepeat	"\<end\s*do"
-  syn match  fortranConditional	"\<end\s*where"
-  syn match  fortranConditional	"\<select\s*case"
-  syn match  fortranConditional	"\<end\s*select"
-  syn match  fortranType	"\<end\s*type"
-  syn match  fortranType	"\<in\s*out"
-
-  syn keyword fortranUnitHeaderEx	procedure
-  syn keyword fortranIOEx		namelist
-  syn keyword fortranConditionalEx	while
-  syn keyword fortran90IntrinsicEx	achar iachar transfer
+syn match fortranKeyword  	"\<go\s*to\>"
+syn match fortranKeywordDel  	"\<go\s*to\ze\s\+.*,\s*(.*$"
+syn match fortranKeywordOb  	"\<go\s*to\ze\s*(\d\+.*$"
+syn region fortranStringR	start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
+syn keyword fortranIntrinsicR	dim lge lgt lle llt mod
+syn keyword fortranKeywordDel	assign pause
+
+syn match fortranType           "\<type\>"
+syn keyword fortranType	        none
+
+syn keyword fortranStructure	private public intent optional
+syn keyword fortranStructure	pointer target allocatable
+syn keyword fortranStorageClass	in out
+syn match fortranStorageClass	"\<kind\s*="me=s+4
+syn match fortranStorageClass	"\<len\s*="me=s+3
+
+syn match fortranUnitHeader	"\<module\>"
+syn keyword fortranUnitHeader	use only contains
+syn keyword fortranUnitHeader	result operator assignment
+syn match fortranUnitHeader	"\<interface\>"
+syn match fortranUnitHeader	"\<recursive\>"
+syn keyword fortranKeyword	allocate deallocate nullify cycle exit
+syn match fortranConditional	"\<select\>"
+syn keyword fortranConditional	case default where elsewhere
+
+syn match fortranOperator	"\(\(>\|<\)=\=\|==\|/=\|=\)"
+syn match fortranOperator	"=>"
+
+syn region fortranString	start=+"+ end=+"+	contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
+syn keyword fortranIO		pad position action delim readwrite
+syn keyword fortranIO		eor advance nml
+
+syn keyword fortranIntrinsic	adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
+syn keyword fortranIntrinsic	scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
+syn match fortranIntrinsic		"\<not\>\(\s*\.\)\@!"me=s+3
+syn match fortranIntrinsic	"\<kind\>\s*[(,]"me=s+4
+
+syn match  fortranUnitHeader	"\<end\s*function"
+syn match  fortranUnitHeader	"\<end\s*interface"
+syn match  fortranUnitHeader	"\<end\s*module"
+syn match  fortranUnitHeader	"\<end\s*program"
+syn match  fortranUnitHeader	"\<end\s*subroutine"
+syn match  fortranRepeat	"\<end\s*do"
+syn match  fortranConditional	"\<end\s*where"
+syn match  fortranConditional	"\<select\s*case"
+syn match  fortranConditional	"\<end\s*select"
+syn match  fortranType	"\<end\s*type"
+syn match  fortranType	"\<in\s*out"
+
+syn keyword fortranType	        procedure
+syn match  fortranType	        "\<module\ze\s\+procedure\>"
+syn keyword fortranIOR		namelist
+syn keyword fortranConditionalR	while
+syn keyword fortranIntrinsicR	achar iachar transfer
 
-  syn keyword fortranInclude		include
-  syn keyword fortran90StorageClassR	sequence
-endif
+syn keyword fortranInclude		include
+syn keyword fortranStorageClassR	sequence
 
 syn match   fortranConditional	"\<end\s*if"
 syn match   fortranIO		contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
 syn match   fortranConditional	"\<else\s*if"
 
-syn keyword fortranUnitHeaderR	entry
+syn keyword fortranUnitHeaderOb	entry
 syn match fortranTypeR		display "double\s\+precision"
 syn match fortranTypeR		display "double\s\+complex"
 syn match fortranUnitHeaderR	display "block\s\+data"
 syn keyword fortranStorageClassR	common equivalence data
-syn keyword fortran77IntrinsicR	dble dprod
-syn match   fortran77OperatorR	"\.\s*[gl][et]\s*\."
-syn match   fortran77OperatorR	"\.\s*\(eq\|ne\)\s*\."
-
-if b:fortran_dialect == "f95" || b:fortran_dialect == "F"
-  syn keyword fortranRepeat		forall
-  syn match fortranRepeat		"\<end\s*forall"
-  syn keyword fortran95Intrinsic	null cpu_time
-  syn match fortranType			"\<elemental\>"
-  syn match fortranType			"\<pure\>"
-  if exists("fortran_more_precise")
-    syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
-  endif
+syn keyword fortranIntrinsicR	dble dprod
+syn match   fortranOperatorR	"\.\s*[gl][et]\s*\."
+syn match   fortranOperatorR	"\.\s*\(eq\|ne\)\s*\."
+
+syn keyword fortranRepeat		forall
+syn match fortranRepeat		"\<end\s*forall"
+syn keyword fortranIntrinsic	null cpu_time
+syn match fortranType			"\<elemental\>"
+syn match fortranType			"\<pure\>"
+if exists("fortran_more_precise")
+  syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
 endif
 
-if b:fortran_dialect == "f95"
+if b:fortran_dialect == "f08"
   " F2003
-  syn keyword fortran03Intrinsic        command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
+  syn keyword fortranIntrinsic        command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
   " ISO_C_binding
-  syn keyword fortran03Constant         c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
-  syn keyword fortran03Constant         c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
-  syn keyword fortran03Intrinsic        iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_f_procpointer
-  syn keyword fortran03Type             c_ptr c_funptr
+  syn keyword fortranConstant         c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
+  syn keyword fortranConstant         c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
+  syn keyword fortranIntrinsic        iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_f_procpointer
+  syn keyword fortranType             c_ptr c_funptr
   " ISO_Fortran_env
-  syn keyword fortran03Constant         iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
+  syn keyword fortranConstant         iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
   " IEEE_arithmetic
-  syn keyword fortran03Intrinsic        ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
+  syn keyword fortranIntrinsic        ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
 
-  syn keyword fortran03ReadWrite	flush wait
-  syn keyword fortran03IO	        decimal round iomsg
-  syn keyword fortran03Type             asynchronous nopass non_overridable pass protected volatile abstract extends import
-  syn keyword fortran03Type             non_intrinsic value bind deferred generic final enumerator class
-  syn match fortran03Type               "\<associate\>"
-  syn match fortran03Type               "\<end\s*associate"
-  syn match fortran03Type               "\<enum\s*,\s*bind\s*(\s*c\s*)"
-  syn match fortran03Type               "\<end\s*enum"
-  syn match fortran03Conditional	"\<select\s*type"
-  syn match fortran03Conditional        "\<type\s*is\>"
-  syn match fortran03UnitHeader         "\<abstract\s*interface\>"
-  syn match fortran03Operator           "\([\|]\)"
+  syn keyword fortranReadWrite	flush wait
+  syn keyword fortranIO 	      decimal round iomsg
+  syn keyword fortranType             asynchronous nopass non_overridable pass protected volatile abstract extends import
+  syn keyword fortranType             non_intrinsic value bind deferred generic final enumerator
+  syn match fortranType               "\<class\>"
+  syn match fortranType               "\<associate\>"
+  syn match fortranType               "\<end\s*associate"
+  syn match fortranType               "\<enum\s*,\s*bind\s*(\s*c\s*)"
+  syn match fortranType               "\<end\s*enum"
+  syn match fortranConditional	"\<select\s*type"
+  syn match fortranConditional        "\<type\s*is\>"
+  syn match fortranConditional        "\<class\s*is\>"
+  syn match fortranUnitHeader         "\<abstract\s*interface\>"
+  syn match fortranOperator           "\([\|]\)"
 
   " F2008
-  syn keyword fortran08Intrinsic        acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
-  syn keyword fortran08Intrinsic        atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
-  syn keyword fortran08Intrinsic        bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
-  syn keyword fortran08IO               newunit
-  syn keyword fortran08Type             contiguous
+  syn keyword fortranIntrinsic        acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
+  syn keyword fortranIntrinsic        atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
+  syn keyword fortranIntrinsic        bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
+  syn keyword fortranIO               newunit
+  syn keyword fortranType             contiguous
 endif
 
 syn cluster fortranCommentGroup contains=fortranTodo
@@ -341,9 +317,7 @@
   syn match fortranContinueMark		display "&"
 endif
 
-if b:fortran_dialect != "f77"
-  syn match fortranComment	excludenl "!.*$" contains=@fortranCommentGroup,@spell
-endif
+syn match fortranComment	excludenl "!.*$" contains=@fortranCommentGroup,@spell
 
 "cpp is often used with Fortran
 syn match	cPreProc		"^\s*#\s*\(define\|ifdef\)\>.*"
@@ -363,7 +337,7 @@
   syn sync minlines=30
 endif
 
-if version >= 600 && exists("fortran_fold")
+if exists("fortran_fold")
 
   if (b:fortran_fixed_source == 1)
     syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
@@ -407,134 +381,95 @@
 endif
 
 " 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_fortran_syn_inits")
-  if version < 508
-    let did_fortran_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-
-  " The default highlighting differs for each dialect.
-  " Transparent groups:
-  " fortranParen, fortranLeftMargin
-  " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
-  " fortranBlockData
-  " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
-  " fortranMultiCommentLines
-  HiLink fortranKeyword 	Keyword
-  HiLink fortranConstructName	Identifier
-  HiLink fortran03Conditional	fortranConditional
-  HiLink fortranConditional	Conditional
-  HiLink fortranRepeat		Repeat
-  HiLink fortranTodo		Todo
-  if (b:fortran_fixed_source == 1)
-    HiLink fortranContinueMark	Todo
-  else
-    HiLink fortranContinueMark	Keyword
-  endif
-  HiLink fortranString		String
-  HiLink fortranNumber		Number
-  HiLink fortran03Operator	fortranOperator
-  HiLink fortranOperator	Operator
-  HiLink fortranBoolean		Boolean
-  HiLink fortranLabelError	Error
-  HiLink fortranObsolete	Todo
-  HiLink fortran03Type  	fortranType
-  HiLink fortran08Type	        fortranType
-  HiLink fortranType		Type
-  HiLink fortranStructure	Type
-  HiLink fortranStorageClass	StorageClass
-  HiLink fortranCall		Function
-  HiLink fortran03UnitHeader	fortranUnitHeader
-  HiLink fortranUnitHeader	fortranPreCondit
-  HiLink fortran03ReadWrite	fortranReadWrite
-  HiLink fortranReadWrite	Keyword
-  HiLink fortran03IO		fortranIO
-  HiLink fortran08IO		fortranIO
-  HiLink fortranIO		Keyword
-  HiLink fortran95Intrinsic	fortran90Intrinsic
-  HiLink fortran77Intrinsic	fortran90Intrinsic
-  HiLink fortran90Intrinsic	Function
-  HiLink fortran03Intrinsic	Function
-  HiLink fortran08Intrinsic	Function
-  HiLink fortran03Constant	Function
-
-  if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
-    HiLink fortranKeywordOb	fortranObsolete
-    HiLink fortran66Intrinsic	fortranObsolete
-    HiLink fortran77IntrinsicR	fortranObsolete
-    HiLink fortranUnitHeaderR	fortranObsolete
-    HiLink fortranTypeR		fortranObsolete
-    HiLink fortranStorageClassR	fortranObsolete
-    HiLink fortran90StorageClassR	fortranObsolete
-    HiLink fortran77OperatorR	fortranObsolete
-    HiLink fortranInclude	fortranObsolete
-  else
-    HiLink fortranKeywordOb	fortranKeyword
-    HiLink fortran66Intrinsic	fortran90Intrinsic
-    HiLink fortran77IntrinsicR	fortran90Intrinsic
-    HiLink fortranUnitHeaderR	fortranPreCondit
-    HiLink fortranTypeR		fortranType
-    HiLink fortranStorageClassR	fortranStorageClass
-    HiLink fortran77OperatorR	fortranOperator
-    HiLink fortranInclude	Include
-    HiLink fortran90StorageClassR	fortranStorageClass
-  endif
-
-  if ( b:fortran_dialect == "F" )
-    HiLink fortranLabelNumber	fortranObsolete
-    HiLink fortranTarget	fortranObsolete
-    HiLink fortranFormatSpec	fortranObsolete
-    HiLink fortranFloatDExp	fortranObsolete
-    HiLink fortranFloatNoDec	fortranObsolete
-    HiLink fortranFloatIniDec	fortranObsolete
-    HiLink fortranFloatEndDec	fortranObsolete
-    HiLink fortranTypeEx	fortranObsolete
-    HiLink fortranIOEx		fortranObsolete
-    HiLink fortranKeywordEx	fortranObsolete
-    HiLink fortranStringEx	fortranObsolete
-    HiLink fortran77IntrinsicEx	fortranObsolete
-    HiLink fortranUnitHeaderEx	fortranObsolete
-    HiLink fortranConditionalEx	fortranObsolete
-    HiLink fortran90IntrinsicEx	fortranObsolete
-  else
-    HiLink fortranLabelNumber	Special
-    HiLink fortranTarget	Special
-    HiLink fortranFormatSpec	Identifier
-    HiLink fortranFloatDExp	fortranFloat
-    HiLink fortranFloatNoDec	fortranFloat
-    HiLink fortranFloatIniDec	fortranFloat
-    HiLink fortranFloatEndDec	fortranFloat
-    HiLink fortranTypeEx	fortranType
-    HiLink fortranIOEx		fortranIO
-    HiLink fortranKeywordEx	fortranKeyword
-    HiLink fortranStringEx	fortranString
-    HiLink fortran77IntrinsicEx	fortran90Intrinsic
-    HiLink fortranUnitHeaderEx	fortranUnitHeader
-    HiLink fortranConditionalEx	fortranConditional
-    HiLink fortran90IntrinsicEx	fortran90Intrinsic
-  endif
-
-  HiLink fortranFloat		Float
-  HiLink fortranPreCondit	PreCondit
-  HiLink fortranInclude		Include
-  HiLink cIncluded		fortranString
-  HiLink cInclude		Include
-  HiLink cPreProc		PreProc
-  HiLink cPreCondit		PreCondit
-  HiLink fortranParenError	Error
-  HiLink fortranComment		Comment
-  HiLink fortranSerialNumber	Todo
-  HiLink fortranTab		Error
-  " Vendor extensions
-  HiLink fortranExtraIntrinsic	Function
+" The default highlighting differs for each dialect.
+" Transparent groups:
+" fortranParen, fortranLeftMargin
+" fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
+" fortranBlockData
+" fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
+" fortranMultiCommentLines
+hi def link fortranKeyword 	Keyword
+hi def link fortranConstructName	Identifier
+hi def link fortranConditional	Conditional
+hi def link fortranRepeat	Repeat
+hi def link fortranTodo		Todo
+hi def link fortranContinueMark	Special
+hi def link fortranString	String
+hi def link fortranNumber	Number
+hi def link fortranOperator	Operator
+hi def link fortranBoolean	Boolean
+hi def link fortranLabelError	Error
+hi def link fortranObsolete	Todo
+hi def link fortranType		Type
+hi def link fortranStructure	Type
+hi def link fortranStorageClass	StorageClass
+hi def link fortranCall		Function
+hi def link fortranUnitHeader	fortranPreCondit
+hi def link fortranReadWrite	Keyword
+hi def link fortranIO		Keyword
+hi def link fortranIntrinsic	Function
+hi def link fortranConstant	Constant
+
+" To stop deleted & obsolescent features being highlighted as Todo items,
+" comment out the next 5 lines and uncomment the 5 lines after that
+hi def link fortranUnitHeaderOb    fortranObsolete
+hi def link fortranKeywordOb       fortranObsolete
+hi def link fortranConditionalOb   fortranObsolete
+hi def link fortranTypeOb          fortranObsolete
+hi def link fortranKeywordDel      fortranObsolete
+"hi def link fortranUnitHeaderOb    fortranUnitHeader
+"hi def link fortranKeywordOb       fortranKeyword
+"hi def link fortranConditionalOb   fortranConditional
+"hi def link fortranTypeOb          fortranType
+"hi def link fortranKeywordDel      fortranKeyword
+
+if b:fortran_dialect == "F"
+  hi! def link fortranIntrinsicR	fortranObsolete
+  hi! def link fortranUnitHeaderR	fortranObsolete
+  hi! def link fortranTypeR		fortranObsolete
+  hi! def link fortranStorageClassR	fortranObsolete
+  hi! def link fortranOperatorR 	fortranObsolete
+  hi! def link fortranInclude   	fortranObsolete
+  hi! def link fortranLabelNumber	fortranObsolete
+  hi! def link fortranTarget	        fortranObsolete
+  hi! def link fortranFloatIll	        fortranObsolete
+  hi! def link fortranIOR		fortranObsolete
+  hi! def link fortranKeywordR	        fortranObsolete
+  hi! def link fortranStringR	        fortranObsolete
+  hi! def link fortranConditionalR	fortranObsolete
+else
+  hi! def link fortranIntrinsicR	fortranIntrinsic
+  hi! def link fortranUnitHeaderR	fortranPreCondit
+  hi! def link fortranTypeR		fortranType
+  hi! def link fortranStorageClassR	fortranStorageClass
+  hi! def link fortranOperatorR	        fortranOperator
+  hi! def link fortranInclude	        Include
+  hi! def link fortranLabelNumber	Special
+  hi! def link fortranTarget	        Special
+  hi! def link fortranFloatIll	        fortranFloat
+  hi! def link fortranIOR		fortranIO
+  hi! def link fortranKeywordR	        fortranKeyword
+  hi! def link fortranStringR	        fortranString
+  hi! def link fortranConditionalR	fortranConditional
+endif
+
+hi def link fortranFormatSpec	Identifier
+hi def link fortranFloat	Float
+hi def link fortranPreCondit	PreCondit
+hi def link cIncluded		fortranString
+hi def link cInclude		Include
+hi def link cPreProc		PreProc
+hi def link cPreCondit		PreCondit
+hi def link fortranParenError	Error
+hi def link fortranComment	Comment
+hi def link fortranSerialNumber	Todo
+hi def link fortranTab		Error
 
-  delcommand HiLink
-endif
+" Uncomment the next line if you use extra intrinsics provided by vendors
+"hi def link fortranExtraIntrinsic	Function
 
 let b:current_syntax = "fortran"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 tw=132
diff -Naur vim73.orig/runtime/syntax/fstab.vim vim73/runtime/syntax/fstab.vim
--- vim73.orig/runtime/syntax/fstab.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/fstab.vim	2013-08-04 19:09:09.363947608 +0000
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language: fstab file
-" Maintaner: Radu Dineiu <radu.dineiu@gmail.com>
-" URL: http://ld.yi.org/vim/fstab.vim
-" Last Change: 2009 Feb 04
-" Version: 0.93
+" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
+" URL: https://raw.github.com/rid9/vim-fstab/master/fstab.vim
+" Last Change: 2013 May 21
+" Version: 1.0
 "
 " Credits:
 "   David Necas (Yeti) <yeti@physics.muni.cz>
@@ -11,10 +11,13 @@
 "   Georgi Georgiev <chutz@gg3.net>
 "   James Vega <jamessan@debian.org>
 "   Elias Probst <mail@eliasprobst.eu>
-"
+
 " Options:
 "   let fstab_unknown_fs_errors = 1
 "     highlight unknown filesystems as errors
+"
+"   let fstab_unknown_device_errors = 0
+"     do not highlight unknown devices as errors
 
 if version < 600
 	syntax clear
@@ -22,15 +25,18 @@
 	finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " General
 syn cluster fsGeneralCluster contains=fsComment
-syn match fsComment /\s*#.*/
+syn match fsComment /\s*#.*/ contains=@Spell
 syn match fsOperator /[,=:#]/
 
 " Device
 syn cluster fsDeviceCluster contains=fsOperator,fsDeviceKeyword,fsDeviceError
 syn match fsDeviceError /\%([^a-zA-Z0-9_\/#@:\.-]\|^\w\{-}\ze\W\)/ contained
-syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts sysfs usbfs
+syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs
 syn keyword fsDeviceKeyword contained LABEL nextgroup=fsDeviceLabel
 syn keyword fsDeviceKeyword contained UUID nextgroup=fsDeviceUUID
 syn keyword fsDeviceKeyword contained sshfs nextgroup=fsDeviceSshfs
@@ -47,7 +53,7 @@
 " Type
 syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeUnknown
 syn match fsTypeUnknown /\s\+\zs\w\+/ contained
-syn keyword fsTypeKeyword contained adfs ados affs atfs audiofs auto autofs befs bfs cd9660 cfs cifs coda cramfs devfs devpts e2compr efs ext2 ext2fs ext3 ext4 fdesc ffs filecore fuse hfs hpfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix msdos ncpfs nfs none ntfs null nwfs overlay ovlfs portal proc procfs ptyfs qnx4 reiserfs romfs shm smbfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xfs zisofs
+syn keyword fsTypeKeyword contained adfs ados affs anon_inodefs atfs audiofs auto autofs bdev befs bfs btrfs binfmt_misc cd9660 cfs cgroup cifs coda configfs cpuset cramfs devfs devpts devtmpfs e2compr efs ext2 ext2fs ext3 ext4 fdesc ffs filecore fuse fuseblk fusectl hfs hpfs hugetlbfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix mqueue msdos ncpfs nfs nfsd nilfs2 none ntfs null nwfs overlay ovlfs pipefs portal proc procfs pstore ptyfs qnx4 reiserfs ramfs romfs securityfs shm smbfs squashfs sockfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xenfs xfs zisofs
 
 " Options
 " -------
@@ -71,6 +77,11 @@
 syn match fsOptionsKeywords contained /\<bs=/ nextgroup=fsOptionsSize
 syn keyword fsOptionsKeywords contained protect usemp verbose
 
+" Options: btrfs
+syn match fsOptionsKeywords contained /\<\%(subvol\|subvolid\|subvolrootid\|device\|compress\|compress-force\|fatal_errors\)=/ nextgroup=fsOptionsString
+syn match fsOptionsKeywords contained /\<\%(max_inline\|alloc_start\|thread_pool\|metadata_ratio\|check_int_print_mask\)=/ nextgroup=fsOptionsNumber
+syn keyword fsOptionsKeywords contained degraded nodatasum nodatacow nobarrier ssd ssd_spread noacl notreelog flushoncommit space_cache nospace_cache clear_cache user_subvol_rm_allowed autodefrag inode_cache enospc_debug recovery check_int check_int_data skip_balance discard
+
 " Options: cd9660
 syn keyword fsOptionsKeywords contained extatt gens norrip nostrictjoilet
 
@@ -84,7 +95,7 @@
 syn keyword fsOptionsExt2Check contained none normal strict
 syn keyword fsOptionsExt2Errors contained continue panic
 syn match fsOptionsExt2Errors contained /\<remount-ro\>/
-syn keyword fsOptionsKeywords contained acl bsddf minixdf debug grpid bsdgroups minixdf noacl nocheck nogrpid oldalloc orlov sysvgroups nouid32 nobh user_xattr nouser_xattr
+syn keyword fsOptionsKeywords contained acl bsddf minixdf debug grpid bsdgroups minixdf nocheck nogrpid oldalloc orlov sysvgroups nouid32 nobh user_xattr nouser_xattr
 
 " Options: ext3
 syn match fsOptionsKeywords contained /\<journal=/ nextgroup=fsOptionsExt3Journal
@@ -92,7 +103,7 @@
 syn match fsOptionsKeywords contained /\<commit=/ nextgroup=fsOptionsNumber
 syn keyword fsOptionsExt3Journal contained update inum
 syn keyword fsOptionsExt3Data contained journal ordered writeback
-syn keyword fsOptionsKeywords contained noload user_xattr nouser_xattr acl noacl
+syn keyword fsOptionsKeywords contained noload user_xattr nouser_xattr acl
 
 " Options: ext4
 syn match fsOptionsKeywords contained /\<journal=/ nextgroup=fsOptionsExt4Journal
@@ -216,7 +227,7 @@
 syn match fsFreqPass /\s\+.\{-}$/ contains=@fsFreqPassCluster,@fsGeneralCluster contained
 
 " Whole line comments
-syn match fsCommentLine /^#.*$/
+syn match fsCommentLine /^#.*$/ contains=@Spell
 
 if version >= 508 || !exists("did_config_syntax_inits")
 	if version < 508
@@ -241,7 +252,10 @@
 		HiLink fsTypeUnknown Error
 	endif
 
-	HiLink fsDeviceError Error
+	if !exists('fstab_unknown_device_errors') || fstab_unknown_device_errors == 1
+		HiLink fsDeviceError Error
+	endif
+
 	HiLink fsMountPointError Error
 	HiLink fsMountPointKeyword Keyword
 	HiLink fsFreqPassError Error
@@ -277,4 +291,7 @@
 
 let b:current_syntax = "fstab"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 ft=vim
diff -Naur vim73.orig/runtime/syntax/fvwm.vim vim73/runtime/syntax/fvwm.vim
--- vim73.orig/runtime/syntax/fvwm.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/fvwm.vim	2013-08-04 19:09:09.363947608 +0000
@@ -12,6 +12,8 @@
 if exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Fvwm configuration files are case insensitive
 syn case ignore
@@ -635,3 +637,6 @@
 hi def link fvwmModuleName	Function
 
 let b:current_syntax = "fvwm"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/syntax/gdb.vim vim73/runtime/syntax/gdb.vim
--- vim73.orig/runtime/syntax/gdb.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/gdb.vim	2013-08-04 19:09:09.367280931 +0000
@@ -2,7 +2,7 @@
 " Language:	GDB command files
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/gdb.vim
-" Last Change:	2009 May 25
+" Last Change:	2012 Oct 05
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn keyword gdbInfo contained address architecture args breakpoints catch common copying dcache
 syn keyword gdbInfo contained display files float frame functions handle line
 syn keyword gdbInfo contained locals program registers scope set sharedlibrary signals
@@ -32,7 +35,7 @@
 syn match gdbStatmentContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef
 syn match gdbStatement "^\s*info" nextgroup=gdbInfo skipwhite skipempty
 
-" some commonly used abreviations
+" some commonly used abbreviations
 syn keyword gdbStatement c disp undisp disas p
 
 syn region gdbDocument matchgroup=gdbFuncDef start="\<document\>.*$" matchgroup=gdbFuncDef end="^end\s*$"
@@ -65,12 +68,12 @@
 syn match gdbSet "\<demangle-style\>"
 syn match gdbSet "\<output-radix\>"
 
-syn match gdbComment "^\s*#.*"
+syn match gdbComment "^\s*#.*" contains=@Spell
 
 syn match gdbVariable "\$\K\k*"
 
 " Strings and constants
-syn region  gdbString		start=+"+  skip=+\\\\\|\\"+  end=+"+
+syn region  gdbString		start=+"+  skip=+\\\\\|\\"+  end=+"+ contains=@Spell
 syn match   gdbCharacter	"'[^']*'" contains=gdbSpecialChar,gdbSpecialCharError
 syn match   gdbCharacter	"'\\''" contains=gdbSpecialChar
 syn match   gdbCharacter	"'[^\\]'"
@@ -108,4 +111,6 @@
 
 let b:current_syntax = "gdb"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/gdmo.vim vim73/runtime/syntax/gdmo.vim
--- vim73.orig/runtime/syntax/gdmo.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/gdmo.vim	2013-08-04 19:09:09.367280931 +0000
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:	GDMO
 "		(ISO-10165-4; Guidelines for the Definition of Managed Object)
-" Maintainer:	Gyuman Kim <violino@dooly.modacom.co.kr>
-" URL:		http://dooly.modacom.co.kr/gdmo.vim
-" Last change:	2001 Sep 02
+" Maintainer:	Gyuman (Chester) Kim <violkim@gmail.com>
+" URL:		http://classicalprogrammer.wikidot.com/local--files/vim-syntax-file-for-gdmo/gdmo.vim
+" Last change:	8th June, 2011
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
diff -Naur vim73.orig/runtime/syntax/gitcommit.vim vim73/runtime/syntax/gitcommit.vim
--- vim73.orig/runtime/syntax/gitcommit.vim	2010-05-21 09:39:11.000000000 +0000
+++ vim73/runtime/syntax/gitcommit.vim	2013-08-04 19:09:09.370614255 +0000
@@ -2,7 +2,7 @@
 " Language:	git commit file
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	*.git/COMMIT_EDITMSG
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists("b:current_syntax")
   finish
@@ -16,7 +16,7 @@
 endif
 
 syn include @gitcommitDiff syntax/diff.vim
-syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^$\|^#\@=/ contains=@gitcommitDiff
+syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff
 
 syn match   gitcommitFirstLine	"\%^[^#].*"  nextgroup=gitcommitBlank skipnl
 syn match   gitcommitSummary	"^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
@@ -26,7 +26,7 @@
 syn match   gitcommitHead	"^\%(#   .*\n\)\+#$" contained transparent
 syn match   gitcommitOnBranch	"\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
 syn match   gitcommitOnBranch	"\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
-syn match   gitcommitBranch	"[^ \t']\+" contained
+syn match   gitcommitBranch	"[^ ']\+" contained
 syn match   gitcommitNoBranch	"\%(^# \)\@<=Not currently on any branch." contained containedin=gitcommitComment
 syn match   gitcommitHeader	"\%(^# \)\@<=.*:$"	contained containedin=gitcommitComment
 syn region  gitcommitAuthor	matchgroup=gitCommitHeader start=/\%(^# \)\@<=\%(Author\|Committer\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent
@@ -35,7 +35,7 @@
 syn region  gitcommitUntracked	start=/^# Untracked files:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUntrackedFile fold
 syn match   gitcommitUntrackedFile  "\t\@<=.*"	contained
 
-syn region  gitcommitDiscarded	start=/^# Changed but not updated:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
+syn region  gitcommitDiscarded	start=/^# Change\%(s not staged for commit\|d but not updated\):/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
 syn region  gitcommitSelected	start=/^# Changes to be committed:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitSelectedType fold
 syn region  gitcommitUnmerged	start=/^# Unmerged paths:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUnmergedType fold
 
diff -Naur vim73.orig/runtime/syntax/gitolite.vim vim73/runtime/syntax/gitolite.vim
--- vim73.orig/runtime/syntax/gitolite.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/gitolite.vim	2013-08-04 19:09:09.373947578 +0000
@@ -0,0 +1,86 @@
+" Vim syntax file
+" Language:	gitolite configuration
+" URL:		https://github.com/tmatilai/gitolite.vim
+" Maintainer:	Teemu Matilainen <teemu.matilainen@iki.fi>
+" Last Change:	2011-12-25
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+" Comment
+syn match	gitoliteComment		"\(^\|\s\)#.*" contains=gitoliteTodo
+syn keyword	gitoliteTodo		TODO FIXME XXX NOT contained
+
+" Groups, users and repos
+syn match	gitoliteGroupDef	"\(^\s*\)\@<=@[^=]\{-1,}\(\s*=\)\@=" contains=gitoliteSpaceError,gitoliteUserError nextgroup=gitoliteGroupDefSep
+syn match	gitoliteGroupDefSep	"\s*=" contained nextgroup=gitoliteRepoLine
+syn match	gitoliteRepoDef		"^\s*repo\s" nextgroup=gitoliteRepoLine
+
+syn match	gitoliteRepoLine	".*" contained transparent contains=gitoliteGroup,gitoliteWildRepo,gitoliteCreator,gitoliteExtCmdHelper,gitoliteRepoError,gitoliteComment
+syn match	gitoliteUserLine	".*" contained transparent contains=gitoliteGroup,gitolitePreProc,gitoliteUserError,gitoliteComment
+
+syn match	gitoliteWildRepo	"[ \t=]\@<=[^ \t]*[\\^$|()[\]*?{},][^ \t]*" contained contains=gitoliteCreator,gitoliteRepoError
+syn match	gitoliteGroup		"[ \t=]\@<=@[^ \t]\+" contained contains=gitoliteUserError
+
+syn keyword	gitoliteCreator		CREATER CREATOR contained
+syn keyword	gitolitePreProc		CREATER CREATOR READERS WRITERS contained
+
+syn match	gitoliteExtCmdHelper	"[ \t=]\@<=EXTCMD/" contained nextgroup=gitoliteExtCmd
+syn match	gitoliteExtCmd		"rsync\(\s\|$\)" contained
+
+" Illegal characters
+syn match	gitoliteRepoError	"[^ \t0-9a-zA-Z._@+/\\^$|()[\]*?{},-]\+" contained
+syn match	gitoliteUserError	"[^ \t0-9a-zA-Z._@+-]\+" contained
+syn match	gitoliteSpaceError	"\s\+" contained
+
+" Permission
+syn match	gitoliteKeyword		"^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\)[ \t=]\@=" nextgroup=gitoliteRefex
+syn match	gitoliteKeyword		"^\s*-[ \t=]\@=" nextgroup=gitoliteDenyRefex
+syn match	gitoliteRefex		"[^=]*="he=e-1 contained contains=gitoliteSpecialRefex,gitoliteGroup nextgroup=gitoliteUserLine
+syn match	gitoliteDenyRefex	"[^=]*="he=e-1 contained contains=gitoliteSpecialRefex,gitoliteGroup nextgroup=gitoliteDenyUsers
+syn match	gitoliteSpecialRefex	"\sNAME/"he=e-1 contained
+syn match	gitoliteSpecialRefex	"/USER/"hs=s+1,he=e-1 contained
+syn match	gitoliteDenyUsers	".*" contained contains=gitoliteUserError,gitoliteComment
+
+" Configuration
+syn match	gitoliteKeyword		"^\s*config\s\+" nextgroup=gitoliteConfVariable
+syn match	gitoliteConfVariable	"[^=]*" contained
+
+" Include
+syn match	gitoliteInclude		"^\s*\(include\|subconf\)\s"
+
+" String
+syn region	gitoliteString		start=+"+ end=+"+ oneline
+
+" Define the default highlighting
+hi def link gitoliteComment		Comment
+hi def link gitoliteTodo		Todo
+hi def link gitoliteGroupDef		gitoliteGroup
+hi def link gitoliteGroup		Identifier
+hi def link gitoliteWildRepo		Special
+hi def link gitoliteRepoError		gitoliteError
+hi def link gitoliteUserError		gitoliteError
+hi def link gitoliteSpaceError		gitoliteError
+hi def link gitoliteError		Error
+hi def link gitoliteCreator		gitolitePreProc
+hi def link gitolitePreProc		PreProc
+hi def link gitoliteExtCmdHelper	PreProc
+hi def link gitoliteExtCmd		Special
+hi def link gitoliteRepoDef		Type
+hi def link gitoliteKeyword		Keyword
+hi def link gitoliteRefex		String
+hi def link gitoliteDenyRefex		gitoliteRefex
+hi def link gitoliteSpecialRefex	PreProc
+hi def link gitoliteDenyUsers		WarningMsg
+hi def link gitoliteConfVariable	Identifier
+hi def link gitoliteInclude		Include
+hi def link gitoliteString		String
+
+let b:current_syntax = "gitolite"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/gitrebase.vim vim73/runtime/syntax/gitrebase.vim
--- vim73.orig/runtime/syntax/gitrebase.vim	2010-05-21 09:41:12.000000000 +0000
+++ vim73/runtime/syntax/gitrebase.vim	2013-08-04 19:09:09.373947578 +0000
@@ -2,7 +2,7 @@
 " Language:	git rebase --interactive
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	git-rebase-todo
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists("b:current_syntax")
   finish
@@ -17,7 +17,9 @@
 syn match   gitrebaseEdit   "\v^e%(dit)=>"   nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseSquash "\v^s%(quash)=>" nextgroup=gitrebaseCommit skipwhite
 syn match   gitrebaseFixup  "\v^f%(ixup)=>"  nextgroup=gitrebaseCommit skipwhite
+syn match   gitrebaseExec   "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite
 syn match   gitrebaseSummary ".*"               contains=gitrebaseHash contained
+syn match   gitrebaseCommand ".*"                                      contained
 syn match   gitrebaseComment "^#.*"             contains=gitrebaseHash
 syn match   gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite
 
@@ -28,6 +30,7 @@
 hi def link gitrebaseEdit           PreProc
 hi def link gitrebaseSquash         Type
 hi def link gitrebaseFixup          Special
+hi def link gitrebaseExec           Function
 hi def link gitrebaseSummary        String
 hi def link gitrebaseComment        Comment
 hi def link gitrebaseSquashError    Error
diff -Naur vim73.orig/runtime/syntax/gnash.vim vim73/runtime/syntax/gnash.vim
--- vim73.orig/runtime/syntax/gnash.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/gnash.vim	2013-08-04 19:09:09.377280901 +0000
@@ -0,0 +1,99 @@
+" Vim syntax file
+" Maintainer: 	Thilo Six
+" Contact:	<vim-dev at vim dot org>
+"		http://www.vim.org/maillist.php#vim-dev
+"
+" Description: 	highlight gnash configuration files
+"		http://www.gnu.org/software/gnash/manual/gnashuser.html#gnashrc
+" File:		runtime/syntax/gnash.vim
+" Last Change: 	2012 May 19
+" Modeline:	vim: ts=8:sw=2:sts=2:
+"
+" Credits:	derived from Nikolai Weibulls readline.vim
+"
+" License:	VIM License
+"		Vim is Charityware, see ":help Uganda"
+"
+
+" 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") || &compatible
+    finish
+endif
+
+syn case match
+syn keyword GnashTodo	    contained TODO FIXME XXX NOTE
+
+" Comments
+syn match   GnashComment    "^#.*$"   contains=@Spell,GnashTodo
+syn match   GnashComment    "\s#.*$"  contains=@Spell,GnashTodo
+
+syn match   GnashNumber	    display '\<\d\+\>'
+
+syn case ignore
+syn keyword GnashOn	    ON YES TRUE
+syn keyword GnashOff	    OFF NO FALSE
+
+syn match GnashSet	    '^\s*set\>'
+syn match GnashSet	    '^\s*append\>'
+
+syn match GnashKeyword	    '\<CertDir\>'
+syn match GnashKeyword      '\<ASCodingErrorsVerbosity\>'
+syn match GnashKeyword      '\<CertFile\>'
+syn match GnashKeyword      '\<EnableExtensions\>'
+syn match GnashKeyword      '\<HWAccel\>'
+syn match GnashKeyword      '\<LCShmKey\>'
+syn match GnashKeyword      '\<LocalConnection\>'
+syn match GnashKeyword      '\<MalformedSWFVerbosity\>'
+syn match GnashKeyword      '\<Renderer\>'
+syn match GnashKeyword      '\<RootCert\>'
+syn match GnashKeyword      '\<SOLReadOnly\>'
+syn match GnashKeyword      '\<SOLSafeDir\>'
+syn match GnashKeyword      '\<SOLreadonly\>'
+syn match GnashKeyword      '\<SOLsafedir\>'
+syn match GnashKeyword      '\<StartStopped\>'
+syn match GnashKeyword      '\<StreamsTimeout\>'
+syn match GnashKeyword      '\<URLOpenerFormat\>'
+syn match GnashKeyword      '\<XVideo\>'
+syn match GnashKeyword      '\<actionDump\>'
+syn match GnashKeyword      '\<blacklist\>'
+syn match GnashKeyword      '\<debugger\>'
+syn match GnashKeyword      '\<debuglog\>'
+syn match GnashKeyword      '\<delay\>'
+syn match GnashKeyword      '\<enableExtensions\>'
+syn match GnashKeyword      '\<flashSystemManufacturer\>'
+syn match GnashKeyword      '\<flashSystemOS\>'
+syn match GnashKeyword      '\<flashVersionString\>'
+syn match GnashKeyword      '\<ignoreFSCommand\>'
+syn match GnashKeyword      '\<ignoreShowMenu\>'
+syn match GnashKeyword      '\<insecureSSL\>'
+syn match GnashKeyword      '\<localSandboxPath\>'
+syn match GnashKeyword      '\<localdomain\>'
+syn match GnashKeyword      '\<localhost\>'
+syn match GnashKeyword      '\<microphoneDevice\>'
+syn match GnashKeyword      '\<parserDump\>'
+syn match GnashKeyword      '\<pluginsound\>'
+syn match GnashKeyword      '\<quality\>'
+syn match GnashKeyword      '\<solLocalDomain\>'
+syn match GnashKeyword      '\<sound\>'
+syn match GnashKeyword      '\<splashScreen\>'
+syn match GnashKeyword      '\<startStopped\>'
+syn match GnashKeyword      '\<streamsTimeout\>'
+syn match GnashKeyword      '\<urlOpenerFormat\>'
+syn match GnashKeyword      '\<verbosity\>'
+syn match GnashKeyword      '\<webcamDevice\>'
+syn match GnashKeyword      '\<whitelist\>'
+syn match GnashKeyword      '\<writelog\>'
+
+hi def link GnashOn	    Identifier
+hi def link GnashOff	    Preproc
+hi def link GnashComment    Comment
+hi def link GnashTodo	    Todo
+hi def link GnashNumber	    Type
+hi def link GnashSet	    String
+hi def link GnashKeyword    Keyword
+
+let b:current_syntax = "gnash"
+
diff -Naur vim73.orig/runtime/syntax/gp.vim vim73/runtime/syntax/gp.vim
--- vim73.orig/runtime/syntax/gp.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/gp.vim	2013-08-04 19:09:09.380614225 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
-" Language:	gp (version 2.4)
+" Language:	gp (version 2.5)
 " Maintainer:	Karim Belabas <Karim.Belabas@math.u-bordeaux.fr>
-" Last change:	2007 Oct 1
+" Last change:	2012 Jan 08
 " URL:		http://pari.math.u-bordeaux.fr
 
 if version < 600
@@ -10,21 +10,30 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " control statements
 syntax keyword gpStatement	break return next
 syntax keyword gpConditional	if
-syntax keyword gpRepeat		until while for fordiv forprime forstep forvec
+syntax keyword gpRepeat		until while for fordiv forell forprime 
+syntax keyword gpRepeat		forsubgroup forstep forvec
 " storage class
 syntax keyword gpScope		my local global
 " defaults
-syntax keyword gpInterfaceKey	colors compatible datadir debug debugfiles
-syntax keyword gpInterfaceKey	debugmem echo factor_add_primes format help
-syntax keyword gpInterfaceKey	histsize lines log logfile new_galois_format
+syntax keyword gpInterfaceKey	breakloop colors compatible
+syntax keyword gpInterfaceKey	datadir debug debugfiles debugmem 
+syntax keyword gpInterfaceKey	echo factor_add_primes factor_proven format 
+syntax keyword gpInterfaceKey	graphcolormap graphcolors
+syntax keyword gpInterfaceKey	help histfile histsize 
+syntax keyword gpInterfaceKey	lines linewrap log logfile new_galois_format
 syntax keyword gpInterfaceKey	output parisize path prettyprinter primelimit
-syntax keyword gpInterfaceKey	prompt prompt_cont psfile realprecision secure
-syntax keyword gpInterfaceKey	seriesprecision simplify strictmatch TeXstyle timer
+syntax keyword gpInterfaceKey	prompt prompt_cont psfile 
+syntax keyword gpInterfaceKey	readline realprecision recover 
+syntax keyword gpInterfaceKey	secure seriesprecision simplify strictmatch
+syntax keyword gpInterfaceKey	TeXstyle timer
 
-syntax match   gpInterface	"^\s*\\[a-z].*"
+syntax match gpInterface	"^\s*\\[a-z].*"
 syntax keyword gpInterface	default
 syntax keyword gpInput		read input
 
@@ -79,4 +88,6 @@
 endif
 
 let b:current_syntax = "gp"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/gpg.vim vim73/runtime/syntax/gpg.vim
--- vim73.orig/runtime/syntax/gpg.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/gpg.vim	2013-08-04 19:09:09.380614225 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         gpg(1) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2007-06-17
+" Latest Revision:  2010-10-14
 
 if exists("b:current_syntax")
   finish
@@ -54,7 +54,7 @@
                         \ personal-digest-preferences photo-viewer
                         \ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
                         \ secret-keyring set-filename set-policy-url status-fd
-                        \ trusted-key verify-options
+                        \ trusted-key verify-options keyid-format list-options
 syn keyword gpgOption   contained skipwhite nextgroup=gpgArgError
                         \ allow-freeform-uid allow-non-selfsigned-uid
                         \ allow-secret-key-import always-trust
diff -Naur vim73.orig/runtime/syntax/gprof.vim vim73/runtime/syntax/gprof.vim
--- vim73.orig/runtime/syntax/gprof.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/gprof.vim	2013-08-04 19:09:09.383947548 +0000
@@ -0,0 +1,69 @@
+" Vim syntax file
+" Language: Syntax for Gprof Output
+" Maintainer: Dominique Pelle <dominique.pelle@gmail.com>
+" Last Change: 2013 Jun 09
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+	finish
+endif
+let s:keepcpo= &cpo
+set cpo&vim
+
+syn case match
+syn sync minlines=100
+
+" Flat profile
+syn match gprofFlatProfileTitle
+  \ "^Flat profile:$" 
+syn region gprofFlatProfileHeader 
+  \ start="^Each sample counts as.*"
+  \ end="^ time.*name\s*$"
+syn region gprofFlatProfileTrailer
+  \ start="^\s*%\s\+the percentage of the total running time.*"
+  \ end="^\s*the gprof listing if it were to be printed\."
+
+" Call graph
+syn match gprofCallGraphTitle "Call graph (explanation follows)"
+syn region gprofCallGraphHeader
+  \ start="^granularity: each sample hit covers.*"
+  \ end="^\s*index % time\s\+self\s\+children\s\+called\s\+name$"
+syn match gprofCallGraphFunction "\s\+\(\d\+\.\d\+\s\+\)\{3}\([0-9+]\+\)\?\s\+[a-zA-Z_<].*\ze\["
+syn match gprofCallGraphSeparator "^-\+$"
+syn region gprofCallGraphTrailer
+  \ start="This table describes the call tree of the program"
+  \ end="^\s*the cycle\.$"
+
+" Index
+syn region gprofIndex
+  \ start="^Index by function name$"
+  \ end="\%$"
+
+syn match gprofIndexFunctionTitle "^Index by function name$"
+
+syn match gprofNumbers "^\s\+[0-9 ./+]\+"
+syn match gprofFunctionIndex "\[\d\+\]"
+syn match gprofSpecial "<\(spontaneous\|cycle \d\+\)>"
+
+hi def link gprofFlatProfileTitle      Title
+hi def link gprofFlatProfileHeader     Comment
+hi def link gprofFlatProfileFunction   Number
+hi def link gprofFlatProfileTrailer    Comment
+
+hi def link gprofCallGraphTitle        Title
+hi def link gprofCallGraphHeader       Comment
+hi def link gprofFlatProfileFunction   Number
+hi def link gprofCallGraphFunction     Special
+hi def link gprofCallGraphTrailer      Comment
+hi def link gprofCallGraphSeparator    Label
+
+hi def link gprofFunctionIndex         Label
+hi def link gprofSpecial               SpecialKey
+hi def link gprofNumbers               Number
+
+hi def link gprofIndexFunctionTitle Title
+
+let b:current_syntax = "gprof"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/syntax/groovy.vim vim73/runtime/syntax/groovy.vim
--- vim73.orig/runtime/syntax/groovy.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/groovy.vim	2013-08-04 19:09:09.387280871 +0000
@@ -1,13 +1,16 @@
 " Vim syntax file
 " Language:	Groovy
-" Maintainer:	Alessio Pace <billy.corgan@tiscali.it>
-" Version: 	0.1.9b
-" URL:	  http://www.vim.org/scripts/script.php?script_id=945	
-" Last Change:	6/4/2004
+" Original Author:	Alessio Pace <billy.corgan@tiscali.it>
+" Maintainer:	Tobias Rapp <yahuxo@gmx.de>
+" Version: 	0.1.13
+" URL:	  http://www.vim.org/scripts/script.php?script_id=945
+" Last Change:	2013 Apr 24
 
+" THE ORIGINAL AUTHOR'S NOTES:
+"
 " This is my very first vim script, I hope to have
 " done it the right way.
-" 
+"
 " I must directly or indirectly thank the author of java.vim and ruby.vim:
 " I copied from them most of the stuff :-)
 "
@@ -16,11 +19,10 @@
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
 "
-" HOWTO USE IT (INSTALL):
-" [groovy is still not recognized by vim! :-( ]
+" HOWTO USE IT (INSTALL) when not part of the distribution:
 "
 " 1) copy the file in the (global or user's $HOME/.vim/syntax/) syntax folder
-" 
+"
 " 2) add this line to recognize groovy files by filename extension:
 "
 " au BufNewFile,BufRead *.groovy  setf groovy
@@ -36,7 +38,7 @@
 "  endif
 "
 "  in the global scripts.vim file or in $HOME/.vim/scripts.vim
-" 
+"
 " 4) open/write a .groovy file or a groovy script :-)
 "
 " Let me know if you like it or send me patches, so that I can improve it
@@ -53,6 +55,9 @@
   let main_syntax='groovy'
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't use standard HiLink, it will not work with included syntax files
 if version < 508
   command! -nargs=+ GroovyHiLink hi link <args>
@@ -69,7 +74,7 @@
 
 " keyword definitions
 syn keyword groovyExternal        native package
-syn match groovyExternal          "\<import\(\s\+static\>\)\?"
+syn match groovyExternal          "\<import\>\(\s\+static\>\)\?"
 syn keyword groovyError           goto const
 syn keyword groovyConditional     if else switch
 syn keyword groovyRepeat          while for do
@@ -99,11 +104,11 @@
 if exists("groovy_highlight_groovy_lang_ids") || exists("groovy_highlight_groovy_lang") || exists("groovy_highlight_all")
   " groovy.lang.*
   syn keyword groovyLangClass  Closure MetaMethod GroovyObject
-  
+
   syn match groovyJavaLangClass "\<System\>"
   syn keyword groovyJavaLangClass  Cloneable Comparable Runnable Serializable Boolean Byte Class Object
   syn keyword groovyJavaLangClass  Character CharSequence ClassLoader Compiler
-  " syn keyword groovyJavaLangClass  Integer Double Float Long 
+  " syn keyword groovyJavaLangClass  Integer Double Float Long
   syn keyword groovyJavaLangClass  InheritableThreadLocal Math Number Object Package Process
   syn keyword groovyJavaLangClass  Runtime RuntimePermission InheritableThreadLocal
   syn keyword groovyJavaLangClass  SecurityManager Short StrictMath StackTraceElement
@@ -157,18 +162,18 @@
 
 " Groovy JDK stuff
 syn keyword groovyJDKBuiltin    as def in
-syn keyword groovyJDKOperOverl  div minus plus abs round power multiply 
-syn keyword groovyJDKMethods 	each call inject sort print println 
+syn keyword groovyJDKOperOverl  div minus plus abs round power multiply
+syn keyword groovyJDKMethods 	each call inject sort print println
 syn keyword groovyJDKMethods    getAt putAt size push pop toList getText writeLine eachLine readLines
-syn keyword groovyJDKMethods    withReader withStream withWriter withPrintWriter write read leftShift 
+syn keyword groovyJDKMethods    withReader withStream withWriter withPrintWriter write read leftShift
 syn keyword groovyJDKMethods    withWriterAppend readBytes splitEachLine
-syn keyword groovyJDKMethods    newInputStream newOutputStream newPrintWriter newReader newWriter 
-syn keyword groovyJDKMethods    compareTo next previous isCase 
+syn keyword groovyJDKMethods    newInputStream newOutputStream newPrintWriter newReader newWriter
+syn keyword groovyJDKMethods    compareTo next previous isCase
 syn keyword groovyJDKMethods    times step toInteger upto any collect dump every find findAll grep
-syn keyword groovyJDKMethods    inspect invokeMethods join 
+syn keyword groovyJDKMethods    inspect invokeMethods join
 syn keyword groovyJDKMethods    getErr getIn getOut waitForOrKill
 syn keyword groovyJDKMethods    count tokenize asList flatten immutable intersect reverse reverseEach
-syn keyword groovyJDKMethods    subMap append asWritable eachByte eachLine eachFile 
+syn keyword groovyJDKMethods    subMap append asWritable eachByte eachLine eachFile
 syn cluster groovyTop add=groovyJDKBuiltin,groovyJDKOperOverl,groovyJDKMethods
 
 " no useful I think, so I comment it..
@@ -245,11 +250,17 @@
 " Strings and constants
 syn match   groovySpecialError     contained "\\."
 syn match   groovySpecialCharError contained "[^']"
-syn match   groovySpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
+syn match   groovySpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\|\$\)"
+syn match   groovyRegexChar        contained "\\."
 syn region  groovyString          start=+"+ end=+"+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
-syn region  groovyString          start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
+syn region  groovyString          start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell
+syn region  groovyString          start=+"""+ end=+"""+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
+syn region  groovyString          start=+'''+ end=+'''+ contains=groovySpecialChar,groovySpecialError,@Spell
+" regex string
+syn region groovyString           start='/[^/]'  end='/' contains=groovySpecialChar,groovyRegexChar,groovyELExpr
 " syn region groovyELExpr start=+${+ end=+}+ keepend contained
- syn match groovyELExpr /\${.\{-}}/ contained
+syn match groovyELExpr /\${.\{-}}/ contained
+syn match groovyELExpr /\$[a-zA-Z_][a-zA-Z0-9_.]*/ contained
 GroovyHiLink groovyELExpr Identifier
 
 " TODO: better matching. I am waiting to understand how it really works in groovy
@@ -327,7 +338,7 @@
     GroovyHiLink groovyDebugSpecialCharacter DebugSpecial
     GroovyHiLink groovyDebugCharacter        DebugString
     GroovyHiLink groovyDebugParen            Debug
-  
+
     GroovyHiLink DebugString               String
     GroovyHiLink DebugSpecial              Special
     GroovyHiLink DebugBoolean              Boolean
@@ -335,7 +346,7 @@
   endif
 endif
 
-" Match all Exception classes 
+" Match all Exception classes
 syn match groovyExceptions        "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>"
 
 
@@ -345,7 +356,7 @@
 exec "syn sync ccomment groovyComment minlines=" . groovy_minlines
 
 
-" ################### 
+" ###################
 " Groovy stuff
 " syn match groovyOperator		"|[ ,a-zA-Z0-9_*]\+|"
 
@@ -408,6 +419,7 @@
   GroovyHiLink groovySpecialError	Error
   GroovyHiLink groovySpecialCharError	Error
   GroovyHiLink groovyString		String
+  GroovyHiLink groovyRegexChar		String
   GroovyHiLink groovyCharacter		Character
   GroovyHiLink groovySpecialChar	SpecialChar
   GroovyHiLink groovyNumber		Number
@@ -421,15 +433,15 @@
   GroovyHiLink groovyConstant		Constant
   GroovyHiLink groovyTypedef		Typedef
   GroovyHiLink groovyTodo		Todo
-  
+
   GroovyHiLink groovyCommentTitle	SpecialComment
   GroovyHiLink groovyDocTags		Special
   GroovyHiLink groovyDocParam		Function
   GroovyHiLink groovyCommentStar	groovyComment
-  
+
   GroovyHiLink groovyType		Type
   GroovyHiLink groovyExternal		Include
-  
+
   GroovyHiLink htmlComment		Special
   GroovyHiLink htmlCommentPart		Special
   GroovyHiLink groovySpaceError		Error
@@ -448,4 +460,7 @@
 
 let b:spell_options="contained"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/group.vim vim73/runtime/syntax/group.vim
--- vim73.orig/runtime/syntax/group.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/group.vim	2013-08-04 19:09:09.387280871 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         group(5) user group file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2012-08-05
 
 if exists("b:current_syntax")
   finish
@@ -12,7 +12,7 @@
 
 syn match   groupBegin          display '^' nextgroup=groupName
 
-syn match   groupName           contained display '[a-z_][a-z0-9_-]\{0,15}'
+syn match   groupName           contained display '[^:]\+'
                                 \ nextgroup=groupPasswordColon
 
 syn match   groupPasswordColon  contained display ':'
@@ -30,7 +30,7 @@
 
 syn match   groupUserListColon  contained display ':' nextgroup=groupUserList
 
-syn match   groupUserList       contained '[a-z_][a-z0-9_-]*'
+syn match   groupUserList       contained '[^,]\+'
                                 \ nextgroup=groupUserListSep
 
 syn match   groupUserListSep    contained display ',' nextgroup=groupUserList
diff -Naur vim73.orig/runtime/syntax/gsp.vim vim73/runtime/syntax/gsp.vim
--- vim73.orig/runtime/syntax/gsp.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/gsp.vim	2013-08-04 19:09:09.390614195 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	GSP - GNU Server Pages (v. 0.86)
 " Created By:	Nathaniel Harward nharward@yahoo.com
-" Last Changed: Dec. 12, 2000
+" Last Changed: 2012 Jan 08 by Thilo Six
 " Filenames:    *.gsp
 " URL:		http://www.constructicon.com/~nharward/vim/syntax/gsp.vim
 
@@ -34,6 +34,9 @@
   syn include @gspJava syntax/java.vim
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Add <java> as an HTML tag name along with its args
 syn keyword htmlTagName contained java
 syn keyword htmlArg     contained type file page
@@ -57,3 +60,6 @@
 if main_syntax == 'gsp'
   unlet main_syntax
 endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/hb.vim vim73/runtime/syntax/hb.vim
--- vim73.orig/runtime/syntax/hb.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/hb.vim	2013-08-04 19:09:09.400614164 +0000
@@ -2,7 +2,7 @@
 " Language:	Hyper Builder
 " Maintainer:	Alejandro Forero Cuervo
 " URL:		http://bachue.com/hb/vim/syntax/hb.vim
-" Last Change:	2001 Sep 02
+" Last Change:	2012 Jan 08 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Read the HTML syntax to start with
 "syn include @HTMLStuff <sfile>:p:h/htmlhb.vim
 
@@ -94,4 +97,6 @@
 
 let b:current_syntax = "hb"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/help.vim vim73/runtime/syntax/help.vim
--- vim73.orig/runtime/syntax/help.vim	2010-07-18 21:18:04.000000000 +0000
+++ vim73/runtime/syntax/help.vim	2013-08-04 19:09:09.400614164 +0000
@@ -1,16 +1,19 @@
 " Vim syntax file
 " Language:	Vim help file
 " Maintainer:	Bram Moolenaar (Bram@vim.org)
-" Last Change:	2009 May 18
+" Last Change:	2013 Jun 02
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn match helpHeadline		"^[-A-Z .][-A-Z0-9 .()]*[ \t]\+\*"me=e-1
-syn match helpSectionDelim	"^=\{3,}.*===$"
-syn match helpSectionDelim	"^-\{3,}.*--$"
+syn match helpSectionDelim	"^===.*===$"
+syn match helpSectionDelim	"^---.*--$"
 syn region helpExample		matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<"
 if has("ebcdic")
   syn match helpHyperTextJump	"\\\@<!|[^"*|]\+|" contains=helpBar
@@ -21,16 +24,30 @@
   syn match helpHyperTextEntry	"\*[#-)!+-~]\+\*\s"he=e-1 contains=helpStar
   syn match helpHyperTextEntry	"\*[#-)!+-~]\+\*$" contains=helpStar
 endif
-syn match helpBar		contained "|" conceal
-syn match helpStar		contained "\*" conceal
+if has("conceal")
+  syn match helpBar		contained "|" conceal
+  syn match helpBacktick	contained "`" conceal
+  syn match helpStar		contained "\*" conceal
+else
+  syn match helpBar		contained "|"
+  syn match helpBacktick	contained "`"
+  syn match helpStar		contained "\*"
+endif
 syn match helpNormal		"|.*====*|"
+syn match helpNormal		"|||"
 syn match helpNormal		":|vim:|"	" for :help modeline
 syn match helpVim		"Vim version [0-9.a-z]\+"
 syn match helpVim		"VIM REFERENCE.*"
 syn match helpOption		"'[a-z]\{2,\}'"
 syn match helpOption		"'t_..'"
+syn match helpCommand		"`[^` ]\+`"hs=s+1,he=e-1 contains=helpBacktick
 syn match helpHeader		"\s*\zs.\{-}\ze\s\=\~$" nextgroup=helpIgnore
-syn match helpIgnore		"." contained conceal
+syn match helpGraphic		".* \ze`$" nextgroup=helpIgnore
+if has("conceal")
+  syn match helpIgnore		"." contained conceal
+else
+  syn match helpIgnore		"." contained
+endif
 syn keyword helpNote		note Note NOTE note: Note: NOTE: Notes Notes:
 syn match helpSpecial		"\<N\>"
 syn match helpSpecial		"\<N\.$"me=e-1
@@ -135,12 +152,14 @@
 hi def link helpIgnore		Ignore
 hi def link helpHyperTextJump	Subtitle
 hi def link helpBar		Ignore
+hi def link helpBacktick	Ignore
 hi def link helpStar		Ignore
 hi def link helpHyperTextEntry	String
 hi def link helpHeadline	Statement
 hi def link helpHeader		PreProc
 hi def link helpSectionDelim	PreProc
 hi def link helpVim		Identifier
+hi def link helpCommand		Comment
 hi def link helpExample		Comment
 hi def link helpOption		Type
 hi def link helpNotVi		Special
@@ -185,4 +204,6 @@
 
 let b:current_syntax = "help"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 sw=2
diff -Naur vim73.orig/runtime/syntax/hgcommit.vim vim73/runtime/syntax/hgcommit.vim
--- vim73.orig/runtime/syntax/hgcommit.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/hgcommit.vim	2013-08-04 19:09:09.403947488 +0000
@@ -0,0 +1,27 @@
+" Vim syntax file
+" Language:	hg (Mercurial) commit file
+" Maintainer:	Ken Takata <kentkt at csc dot jp>
+" Last Change:	2012 Aug 23
+" Filenames:	hg-editor-*.txt
+" License:	VIM License
+" URL:		https://github.com/k-takata/hg-vim
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syn match hgcommitComment "^HG:.*$"             contains=@NoSpell
+syn match hgcommitUser    "^HG: user: \zs.*$"   contains=@NoSpell contained containedin=hgcommitComment
+syn match hgcommitBranch  "^HG: branch \zs.*$"  contains=@NoSpell contained containedin=hgcommitComment
+syn match hgcommitAdded   "^HG: \zsadded .*$"   contains=@NoSpell contained containedin=hgcommitComment
+syn match hgcommitChanged "^HG: \zschanged .*$" contains=@NoSpell contained containedin=hgcommitComment
+syn match hgcommitRemoved "^HG: \zsremoved .*$" contains=@NoSpell contained containedin=hgcommitComment
+
+hi def link hgcommitComment Comment
+hi def link hgcommitUser    String
+hi def link hgcommitBranch  String
+hi def link hgcommitAdded   Identifier
+hi def link hgcommitChanged Special
+hi def link hgcommitRemoved Constant
+
+let b:current_syntax = "hgcommit"
diff -Naur vim73.orig/runtime/syntax/hostsaccess.vim vim73/runtime/syntax/hostsaccess.vim
--- vim73.orig/runtime/syntax/hostsaccess.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/hostsaccess.vim	2013-08-04 19:09:09.407280811 +0000
@@ -0,0 +1,27 @@
+" Vim syntax file
+" Language:	hosts.deny, hosts.allow configuration files
+" Maintainer:	Thilo Six <T.Six@gmx.de>
+" Last Change:	2011 May 01
+" Derived From: conf.vim
+" Credits:	Bram Moolenaar
+"
+" This file is there to get at least a minimal highlighting.
+" A later version may be improved.
+
+
+" Quit when a (custom) syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" For a starter we just use conf.vim for highlighting
+if version < 600
+  so <sfile>:p:h/conf.vim
+else
+  runtime! syntax/conf.vim
+  unlet b:current_syntax
+endif
+
+
+let b:current_syntax = "hostsaccess"
+" vim: ts=8 sw=2
diff -Naur vim73.orig/runtime/syntax/html.vim vim73/runtime/syntax/html.vim
--- vim73.orig/runtime/syntax/html.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/html.vim	2013-08-04 19:09:09.410614134 +0000
@@ -2,7 +2,7 @@
 " Language:	HTML
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/html.vim
-" Last Change:  2006 Jun 19
+" Last Change:	2012 Oct 05
 
 " Please check :help html.vim for some comments and a description of the options
 
@@ -17,6 +17,9 @@
   let main_syntax = 'html'
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't use standard HiLink, it will not work with included syntax files
 if version < 508
   command! -nargs=+ HtmlHiLink hi link <args>
@@ -37,7 +40,7 @@
 syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
 syn match   htmlValue    contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1   contains=javaScriptExpression,@htmlPreproc
 syn region  htmlEndTag             start=+</+      end=+>+ contains=htmlTagN,htmlTagError
-syn region  htmlTag                start=+<[^/]+   end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
+syn region  htmlTag                start=+<[^/]+   end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
 syn match   htmlTagN     contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
 syn match   htmlTagN     contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
 syn match   htmlTagError contained "[^>]<"ms=s+1
@@ -98,11 +101,11 @@
 
 " Comments (the real ones or the old netscape ones)
 if exists("html_wrong_comments")
-  syn region htmlComment                start=+<!--+    end=+--\s*>+
+  syn region htmlComment                start=+<!--+    end=+--\s*>+ contains=@Spell
 else
-  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError
+  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError,@Spell
   syn match  htmlCommentError contained "[^><!]"
-  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc
+  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc,@Spell
 endif
 syn region htmlComment                  start=+<!DOCTYPE+ keepend end=+>+
 
@@ -147,7 +150,8 @@
   syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
   syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
 
-  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
+  syn match htmlLeadingSpace "^\s\+" contained
+  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc
   syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
   syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
   syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
@@ -164,8 +168,8 @@
   " JAVA SCRIPT
   syn include @htmlJavaScript syntax/javascript.vim
   unlet b:current_syntax
-  syn region  javaScript start=+<script[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
-  syn region  htmlScriptTag     contained start=+<script+ end=+>+       contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
+  syn region  javaScript start=+<script\_[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
+  syn region  htmlScriptTag     contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
   HtmlHiLink htmlScriptTag htmlTag
 
   " html events (i.e. arguments that include javascript commands)
@@ -189,7 +193,7 @@
   " VB SCRIPT
   syn include @htmlVbScript syntax/vb.vim
   unlet b:current_syntax
-  syn region  javaScript start=+<script [^>]*language *=[^>]*vbscript[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
+  syn region  javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
 endif
 
 syn cluster htmlJavaScript      add=@htmlPreproc
@@ -246,6 +250,7 @@
     HtmlHiLink htmlItalicBoldUnderline     htmlBoldUnderlineItalic
     HtmlHiLink htmlItalicUnderlineBold     htmlBoldUnderlineItalic
     HtmlHiLink htmlLink                    Underlined
+    HtmlHiLink htmlLeadingSpace            None
     if !exists("html_my_rendering")
       hi def htmlBold                term=bold cterm=bold gui=bold
       hi def htmlBoldUnderline       term=bold,underline cterm=bold,underline gui=bold,underline
@@ -289,4 +294,6 @@
   unlet main_syntax
 endif
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/idl.vim vim73/runtime/syntax/idl.vim
--- vim73.orig/runtime/syntax/idl.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/idl.vim	2013-08-04 19:09:09.420614104 +0000
@@ -2,7 +2,7 @@
 " Language:    IDL (Interface Description Language)
 " Created By:  Jody Goldberg
 " Maintainer:  Michael Geddes <vim@frog.wheelycreek.net>
-" Last Change:  Thu Apr 13 2006
+" Last Change:  2012 Jan 11
 
 
 " This is an experiment.  IDL's structure is simple enough to permit a full
@@ -17,303 +17,310 @@
 " History:
 " 2.0: Michael's new version
 " 2.1: Support for Vim 7 spell (Anduin Withers)
-"      
+"
 
 if exists("b:current_syntax")
   finish
 endif
 
-if exists("idlsyntax_showerror")
-  syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
-endif
+let s:cpo_save = &cpo
+try
+  set cpo&vim
 
-syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
+  if exists("idlsyntax_showerror")
+    syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
+  endif
 
-" Misc basic
-syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
-syn match   idlEnumComma   contained ","
-syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
-syn match   idlSemiColon   contained ";"
-syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
-syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
-syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
-syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
-syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
-syn match   idlLiteral     contained "0"
-syn match   idlLiteral     contained "\.\d\+"
-syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
-syn match   idlLiteral     contained "0[0-7]\+"
-syn keyword idlLiteral     contained TRUE FALSE
-
-" Comments
-syn keyword idlTodo        contained TODO FIXME XXX
-syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
-syn match  idlComment      "//.*" contains=idlTodo,@Spell
-syn match  idlCommentError "\*/"
-
-" C style Preprocessor
-syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
-syn match  idlIncluded    contained "<[^>]*>"
-syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
-syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
-syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
-
-" Constants
-syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
-
-" Attribute
-syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
-syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
-
-" Types
-syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
-syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
-syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
-syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
-syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
-syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
-syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
-syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
-
-" Modules
-syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
-syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
-syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
-
-" Interfaces
-syn cluster idlCommentable contains=idlComment
-syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
-
-syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
-syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
-syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
-syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
-syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
-syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
-syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
-syn match   idlSectionColon contained ":"
-
-
-syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
-syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
-syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
-
-syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
-syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
-
-syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
-syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
-
-syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
-syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
-syn keyword idlCoclassAttribute contained default source
-"syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
-
-syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
-syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
-
-syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
-syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
-if !exists('idl_no_ms_extensions')
-syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
-endif
-syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
-" skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
-syn match idlErrorBrace contained "}"
-syn match idlErrorBracket contained ")"
-syn match idlErrorSquareBracket contained "\]"
-
-syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
-
-" Raises
-syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
-
-" Context
-syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
-
-" Operation
-syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
-syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
-syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
-syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
-syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
-syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
-syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
-syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
-syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
-syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
-
-if !exists('idl_no_ms_extensions')
-syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
-  syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
+  syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
 
-  syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
-  syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
-endif
+  " Misc basic
+  syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
+  syn match   idlEnumComma   contained ","
+  syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
+  syn match   idlSemiColon   contained ";"
+  syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
+  syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
+  syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
+  syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
+  syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
+  syn match   idlLiteral     contained "0"
+  syn match   idlLiteral     contained "\.\d\+"
+  syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
+  syn match   idlLiteral     contained "0[0-7]\+"
+  syn keyword idlLiteral     contained TRUE FALSE
+
+  " Comments
+  syn keyword idlTodo        contained TODO FIXME XXX
+  syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
+  syn match  idlComment      "//.*" contains=idlTodo,@Spell
+  syn match  idlCommentError "\*/"
+
+  " C style Preprocessor
+  syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
+  syn match  idlIncluded    contained "<[^>]*>"
+  syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
+  syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
+  syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
+
+  " Constants
+  syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
+
+  " Attribute
+  syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
+  syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
+
+  " Types
+  syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
+  syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
+  syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
+  syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
+  syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
+  syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
+  syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
+  syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
+
+  " Modules
+  syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
+  syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
+  syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
+
+  " Interfaces
+  syn cluster idlCommentable contains=idlComment
+  syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
+
+  syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+  syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
+  syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
+  syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
+  syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
+  syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
+  syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
+  syn match   idlSectionColon contained ":"
+
+
+  syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
+  syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
+  syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
+
+  syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
+  syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
+
+  syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
+  syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
+
+  syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
+  syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
+  syn keyword idlCoclassAttribute contained default source
+  "syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
+
+  syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
+  syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
+
+  syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
+  syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
+  if !exists('idl_no_ms_extensions')
+  syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
+  endif
+  syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
+  " skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+  syn match idlErrorBrace contained "}"
+  syn match idlErrorBracket contained ")"
+  syn match idlErrorSquareBracket contained "\]"
+
+  syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
+
+  " Raises
+  syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+
+  " Context
+  syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+
+  " Operation
+  syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
+  syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+  syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
+  syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
+  syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
+  syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
+  syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
+  syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
+  syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
+  syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
+
+  if !exists('idl_no_ms_extensions')
+  syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
+    syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
 
-syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
-syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
-syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
-syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
-syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
-syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
-syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
-syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
-syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
-syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
-
-" Enum
-syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
-syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
-syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
-
-" Typedef
-syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
-
-if !exists('idl_no_extensions')
-  syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
-
-  syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
-
-  syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
-  syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
-  syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
-  " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
-
-  " Enum typedef
-  syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
-  syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
-  syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
+    syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
+    syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
+  endif
 
-  syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
-endif
+  syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
+  syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
+  syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
+  syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
+  syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
+  syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
+  syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
+  syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
+  syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
+  syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
+
+  " Enum
+  syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
+  syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
+  syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
+
+  " Typedef
+  syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
+
+  if !exists('idl_no_extensions')
+    syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
+
+    syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
+
+    syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+    syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+    syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
+    " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
+
+    " Enum typedef
+    syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
+    syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
+    syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
 
-" Struct
-syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
-syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
-syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
-
-" Exception
-syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
-
-" Union
-syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
-syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
-syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
-syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
-syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
-syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
-syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
-syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
-syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
-
-if !exists('idl_no_extensions')
-  syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
-  syn sync maxlines=1000 minlines=100
-else
-  syn sync lines=200
-endif
-" syn sync fromstart
+    syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
+  endif
 
-if !exists("did_idl_syntax_inits")
-  let did_idl_syntax_inits = 1
-  " The default methods for highlighting.  Can be overridden later
-  command -nargs=+ HiLink hi def link <args>
-
-  HiLink idlInclude             Include
-  HiLink idlPreProc             PreProc
-  HiLink idlPreCondit           PreCondit
-  HiLink idlDefine              Macro
-  HiLink idlIncluded            String
-  HiLink idlString              String
-  HiLink idlComment             Comment
-  HiLink idlTodo                Todo
-  HiLink idlLiteral             Number
-  HiLink idlUuid                Number
-  HiLink idlType                Type
-  HiLink idlVariantType         idlType
-
-  HiLink idlModule              Keyword
-  HiLink idlInterface           Keyword
-  HiLink idlEnum                Keyword
-  HiLink idlStruct              Keyword
-  HiLink idlUnion               Keyword
-  HiLink idlTypedef             Keyword
-  HiLink idlException           Keyword
-  HiLink idlTypedefOtherTypeQualifier keyword
-
-  HiLink idlModuleName          Typedef
-  HiLink idlInterfaceName       Typedef
-  HiLink idlEnumName            Typedef
-  HiLink idlStructName          Typedef
-  HiLink idlUnionName           Typedef
-
-  HiLink idlBaseTypeInt         idlType
-  HiLink idlBaseType            idlType
-  HiLink idlSeqType             idlType
-  HiLink idlD1                  Paren
-  HiLink idlD2                  Paren
-  HiLink idlD3                  Paren
-  HiLink idlD4                  Paren
-  "HiLink idlArraySize          Paren
-  "HiLink idlArraySize1         Paren
-  HiLink idlModuleContent       Paren
-  HiLink idlUnionContent        Paren
-  HiLink idlStructContent       Paren
-  HiLink idlEnumContents        Paren
-  HiLink idlInterfaceContent    Paren
-
-  HiLink idlSimpDecl            Identifier
-  HiLink idlROAttr              StorageClass
-  HiLink idlAttr                Keyword
-  HiLink idlConst               StorageClass
-
-  HiLink idlOneWayOp            StorageClass
-  HiLink idlOp                  idlType
-  HiLink idlParmType            idlType
-  HiLink idlOpName              Function
-  HiLink idlOpParms             SpecialComment
-  HiLink idlParmName            Identifier
-  HiLink idlInheritFrom         Identifier
-  HiLink idlAttribute           SpecialComment
-
-  HiLink idlId                  Constant
-  "HiLink idlCase               Keyword
-  HiLink idlCaseLabel           Constant
-
-  HiLink idlErrorBracket        Error
-  HiLink idlErrorBrace          Error
-  HiLink idlErrorSquareBracket  Error
-
-  HiLink idlImport              Keyword
-  HiLink idlImportString        idlString
-  HiLink idlCoclassAttribute    StorageClass
-  HiLink idlLibrary             Keyword
-  HiLink idlImportlib           Keyword
-  HiLink idlCoclass             Keyword
-  HiLink idlLibraryName         Typedef
-  HiLink idlCoclassName         Typedef
-  " hi idlLibraryContent guifg=red
-  HiLink idlTypedefDecl         Typedef
-  HiLink idlDefEnum             Keyword
-  HiLink idlDefv1Enum           Keyword
-  HiLink idlDefEnumName         Typedef
-  HiLink idlDefEnumContents     Paren
-  HiLink idlDefBaseTypeInt      idlType
-  HiLink idlDefBaseType         idlType
-  HiLink idlDefSeqType          idlType
-  HiLink idlInterfaceSections   Label
+  " Struct
+  syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
+  syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
+  syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
+
+  " Exception
+  syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
+
+  " Union
+  syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
+  syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
+  syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
+  syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
+  syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
+  syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
+  syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
+  syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
+  syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
+
+  if !exists('idl_no_extensions')
+    syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+    syn sync maxlines=1000 minlines=100
+  else
+    syn sync lines=200
+  endif
+  " syn sync fromstart
 
-  if exists("idlsyntax_showerror")
-    if exists("idlsyntax_showerror_soft")
-      hi default idlError guibg=#d0ffd0
-    else
-      HiLink idlError Error
+  if !exists("did_idl_syntax_inits")
+    let did_idl_syntax_inits = 1
+    " The default methods for highlighting.  Can be overridden later
+    command -nargs=+ HiLink hi def link <args>
+
+    HiLink idlInclude             Include
+    HiLink idlPreProc             PreProc
+    HiLink idlPreCondit           PreCondit
+    HiLink idlDefine              Macro
+    HiLink idlIncluded            String
+    HiLink idlString              String
+    HiLink idlComment             Comment
+    HiLink idlTodo                Todo
+    HiLink idlLiteral             Number
+    HiLink idlUuid                Number
+    HiLink idlType                Type
+    HiLink idlVariantType         idlType
+
+    HiLink idlModule              Keyword
+    HiLink idlInterface           Keyword
+    HiLink idlEnum                Keyword
+    HiLink idlStruct              Keyword
+    HiLink idlUnion               Keyword
+    HiLink idlTypedef             Keyword
+    HiLink idlException           Keyword
+    HiLink idlTypedefOtherTypeQualifier keyword
+
+    HiLink idlModuleName          Typedef
+    HiLink idlInterfaceName       Typedef
+    HiLink idlEnumName            Typedef
+    HiLink idlStructName          Typedef
+    HiLink idlUnionName           Typedef
+
+    HiLink idlBaseTypeInt         idlType
+    HiLink idlBaseType            idlType
+    HiLink idlSeqType             idlType
+    HiLink idlD1                  Paren
+    HiLink idlD2                  Paren
+    HiLink idlD3                  Paren
+    HiLink idlD4                  Paren
+    "HiLink idlArraySize          Paren
+    "HiLink idlArraySize1         Paren
+    HiLink idlModuleContent       Paren
+    HiLink idlUnionContent        Paren
+    HiLink idlStructContent       Paren
+    HiLink idlEnumContents        Paren
+    HiLink idlInterfaceContent    Paren
+
+    HiLink idlSimpDecl            Identifier
+    HiLink idlROAttr              StorageClass
+    HiLink idlAttr                Keyword
+    HiLink idlConst               StorageClass
+
+    HiLink idlOneWayOp            StorageClass
+    HiLink idlOp                  idlType
+    HiLink idlParmType            idlType
+    HiLink idlOpName              Function
+    HiLink idlOpParms             SpecialComment
+    HiLink idlParmName            Identifier
+    HiLink idlInheritFrom         Identifier
+    HiLink idlAttribute           SpecialComment
+
+    HiLink idlId                  Constant
+    "HiLink idlCase               Keyword
+    HiLink idlCaseLabel           Constant
+
+    HiLink idlErrorBracket        Error
+    HiLink idlErrorBrace          Error
+    HiLink idlErrorSquareBracket  Error
+
+    HiLink idlImport              Keyword
+    HiLink idlImportString        idlString
+    HiLink idlCoclassAttribute    StorageClass
+    HiLink idlLibrary             Keyword
+    HiLink idlImportlib           Keyword
+    HiLink idlCoclass             Keyword
+    HiLink idlLibraryName         Typedef
+    HiLink idlCoclassName         Typedef
+    " hi idlLibraryContent guifg=red
+    HiLink idlTypedefDecl         Typedef
+    HiLink idlDefEnum             Keyword
+    HiLink idlDefv1Enum           Keyword
+    HiLink idlDefEnumName         Typedef
+    HiLink idlDefEnumContents     Paren
+    HiLink idlDefBaseTypeInt      idlType
+    HiLink idlDefBaseType         idlType
+    HiLink idlDefSeqType          idlType
+    HiLink idlInterfaceSections   Label
+
+    if exists("idlsyntax_showerror")
+      if exists("idlsyntax_showerror_soft")
+        hi default idlError guibg=#d0ffd0
+      else
+        HiLink idlError Error
+      endif
     endif
+    delcommand HiLink
   endif
-  delcommand HiLink
-endif
-
-let b:current_syntax = "idl"
 
+  let b:current_syntax = "idl"
+finally
+  let &cpo = s:cpo_save
+  unlet s:cpo_save
+endtry
 " vim: sw=2 et
diff -Naur vim73.orig/runtime/syntax/idlang.vim vim73/runtime/syntax/idlang.vim
--- vim73.orig/runtime/syntax/idlang.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/idlang.vim	2013-08-04 19:09:09.420614104 +0000
@@ -1,6 +1,6 @@
 " Interactive Data Language syntax file (IDL, too  [:-)]
 " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
-" Last change: 2003 Apr 25
+" Last change: 2011 Apr 11
 " Created by: Hermann Rochholz <Hermann.Rochholz AT gmx.de>
 
 " Remove any old syntax stuff hanging around
@@ -113,7 +113,7 @@
 syn keyword idlangRoutine F_PDF FACTORIAL FFT FILE_CHMOD FILE_DELETE
 syn keyword idlangRoutine FILE_EXPAND_PATH FILE_MKDIR FILE_TEST FILE_WHICH
 syn keyword idlangRoutine FILEPATH FINDFILE FINDGEN FINITE FIX FLICK FLOAT
-syn keyword idlangRoutine FLOOR FLOW3 FLTARR FLUSH FOR FORMAT_AXIS_VALUES
+syn keyword idlangRoutine FLOOR FLOW3 FLTARR FLUSH FORMAT_AXIS_VALUES
 syn keyword idlangRoutine FORWARD_FUNCTION FREE_LUN FSTAT FULSTR FUNCT
 syn keyword idlangRoutine FV_TEST FX_ROOT FZ_ROOTS GAMMA GAMMA_CT
 syn keyword idlangRoutine GAUSS_CVF GAUSS_PDF GAUSS2DFIT GAUSSFIT GAUSSINT
diff -Naur vim73.orig/runtime/syntax/ist.vim vim73/runtime/syntax/ist.vim
--- vim73.orig/runtime/syntax/ist.vim	2010-05-15 11:03:55.000000000 +0000
+++ vim73/runtime/syntax/ist.vim	2013-08-04 19:09:09.433947398 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Makeindex style file, *.ist
 " Maintainer:	Peter Meszaros <pmeszaros@effice.hu>
-" Last Change:	May 4, 2001
+" Last Change:	2012 Jan 08 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if version >= 600
   setlocal iskeyword=$,@,48-57,_
 else
@@ -67,4 +70,6 @@
 
 let b:current_syntax = "ist"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 sw=2
diff -Naur vim73.orig/runtime/syntax/jam.vim vim73/runtime/syntax/jam.vim
--- vim73.orig/runtime/syntax/jam.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/jam.vim	2013-08-04 19:09:09.433947398 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	JAM
 " Maintainer:	Ralf Lemke (ralflemk@t-online.de)
-" Last change:	09-10-2000
+" Last change:	2012 Jan 08 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if version >= 600
   setlocal iskeyword=@,48-57,_,-
 else
@@ -249,4 +252,6 @@
 
 let b:current_syntax = "jam"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/java.vim vim73/runtime/syntax/java.vim
--- vim73.orig/runtime/syntax/java.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/java.vim	2013-08-04 19:09:09.437280721 +0000
@@ -1,7 +1,8 @@
-" Vim syntax file " Language:	  Java
+" Vim syntax file
+" Language:	Java
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/java.vim
-" Last Change:	2010 March 23
+" Last Change:	2012 Oct 05
 
 " Please check :help java.vim for comments on some of the options available.
 
@@ -17,6 +18,9 @@
   syn region javaFold start="{" end="}" transparent fold
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't use standard HiLink, it will not work with included syntax files
 if version < 508
   command! -nargs=+ JavaHiLink hi link <args>
@@ -26,7 +30,8 @@
 
 " some characters that cannot be in a java program (outside a string)
 syn match javaError "[\\@`]"
-syn match javaError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
+syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|[^-]->\|\*\/"
+
 syn match javaOK "\.\.\."
 
 " use separate name so that it can be deleted in javacc.vim
@@ -120,11 +125,8 @@
 syn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
 syn keyword javaLabel		default
 
-if !exists("java_allow_cpp_keywords")
-  syn keyword javaError auto delete extern friend inline redeclared
-  syn keyword javaError register signed sizeof struct template typedef union
-  syn keyword javaError unsigned operator
-endif
+" highlighting C++ keywords as errors removed, too many people find it
+" annoying.  Was: if !exists("java_allow_cpp_keywords")
 
 " The following cluster contains all java groups except the contained ones
 syn cluster javaTop add=javaExternal,javaError,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaClassDecl,javaClassDecl,javaScopeDecl,javaError,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
@@ -164,7 +166,7 @@
   syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
   syn region  javaCommentTitle	contained matchgroup=javaDocComment start="/\*\*"   matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag
 
-  syn region javaDocTags	 contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
+  syn region javaDocTags	 contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
   syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
   syn match  javaDocParam	 contained "\s\S\+"
   syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
@@ -344,5 +346,7 @@
 endif
 
 let b:spell_options="contained"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/javacc.vim vim73/runtime/syntax/javacc.vim
--- vim73.orig/runtime/syntax/javacc.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/javacc.vim	2013-08-04 19:09:09.440614044 +0000
@@ -2,7 +2,7 @@
 " Language:	JavaCC, a Java Compiler Compiler written by JavaSoft
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/javacc.vim
-" Last Change:	2001 Jun 20
+" Last Change:	2012 Oct 05
 
 " Uses java.vim, and adds a few special things for JavaCC Parser files.
 " Those files usually have the extension  *.jj
@@ -15,6 +15,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " source the java.vim file
 if version < 600
   source <sfile>:p:h/java.vim
@@ -44,7 +47,7 @@
 syn keyword javaccPackages COMMON_TOKEN_ACTION IGNORE_CASE CHOICE_AMBIGUITY_CHECK
 syn keyword javaccPackages OTHER_AMBIGUITY_CHECK STATIC LOOKAHEAD ERROR_REPORTING
 syn keyword javaccPackages USER_TOKEN_MANAGER  USER_CHAR_STREAM JAVA_UNICODE_ESCAPE
-syn keyword javaccPackages UNICODE_INPUT
+syn keyword javaccPackages UNICODE_INPUT JDK_VERSION
 syn match javaccPackages "PARSER_END([^)]*)"
 syn match javaccPackages "PARSER_BEGIN([^)]*)"
 syn match javaccSpecToken "<EOF>"
@@ -73,5 +76,7 @@
 endif
 
 let b:current_syntax = "javacc"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/javascript.vim vim73/runtime/syntax/javascript.vim
--- vim73.orig/runtime/syntax/javascript.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/javascript.vim	2013-08-04 19:09:09.440614044 +0000
@@ -7,7 +7,8 @@
 "		(ss) repaired several quoting and grouping glitches
 "		(ss) fixed regex parsing issue with multiple qualifiers [gi]
 "		(ss) additional factoring of keywords, globals, and members
-" Last Change:	2010 Mar 25
+" Last Change:	2012 Oct 05
+" 		2013 Jun 12: adjusted javaScriptRegexpString (Kevin Locke)
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -23,6 +24,9 @@
   let main_syntax = 'javascript'
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Drop fold if it set but vim doesn't support it.
 if version < 600 && exists("javaScript_fold")
   unlet javaScript_fold
@@ -39,7 +43,7 @@
 
 syn match   javaScriptSpecialCharacter "'\\.'"
 syn match   javaScriptNumber	       "-\=\<\d\+L\=\>\|0[xX][0-9a-fA-F]\+\>"
-syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gi]\{0,2\}\s*$+ end=+/[gi]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
+syn region  javaScriptRegexpString     start=+/[^/*]+me=e-1 skip=+\\\\\|\\/+ end=+/[gim]\{0,2\}\s*$+ end=+/[gim]\{0,2\}\s*[;.,)\]}]+me=e-1 contains=@htmlPreproc oneline
 
 syn keyword javaScriptConditional	if else switch
 syn keyword javaScriptRepeat		while for do in
@@ -131,5 +135,7 @@
 if main_syntax == 'javascript'
   unlet main_syntax
 endif
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/jovial.vim vim73/runtime/syntax/jovial.vim
--- vim73.orig/runtime/syntax/jovial.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/jovial.vim	2013-08-04 19:09:09.443947367 +0000
@@ -0,0 +1,110 @@
+" Vim syntax file
+" Language: JOVIAL J73
+" Version: 1.2
+" Maintainer: Paul McGinnis <paulmcg@aol.com>
+" Last Change: 2011/06/17
+" Remark: Based on MIL-STD-1589C for JOVIAL J73 language
+
+" Quit when a (custom) syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+syn case ignore
+
+syn keyword jovialTodo TODO FIXME XXX contained
+
+" JOVIAL beads - first digit is number of bits, [0-9A-V] is the bit value
+" representing 0-31 (for 5 bits on the bead)
+syn match jovialBitConstant "[1-5]B'[0-9A-V]'"
+
+syn match jovialNumber "\<\d\+\>"
+
+syn match jovialFloat "\d\+E[-+]\=\d\+"
+syn match jovialFloat "\d\+\.\d*\(E[-+]\=\d\+\)\="
+syn match jovialFloat "\.\d\+\(E[-+]\=\d\+\)\="
+
+syn region jovialComment start=/"/ end=/"/ contains=jovialTodo
+syn region jovialComment start=/%/ end=/%/ contains=jovialTodo
+
+" JOVIAL variable names. This rule is to prevent conflicts with strings.
+" Handle special case where ' character can be part of a JOVIAL variable name.
+syn match jovialIdentifier "[A-Z\$][A-Z0-9'\$]\+"
+
+syn region jovialString start="\s*'" skip=/''/ end=/'/ oneline
+
+" JOVIAL compiler directives -- see Section 9 in MIL-STD-1589C
+syn region jovialPreProc start="\s*![A-Z]\+" end=/;/
+
+syn keyword jovialOperator AND OR NOT XOR EQV MOD
+
+" See Section 2.1 in MIL-STD-1589C for data types
+syn keyword jovialType ITEM B C P V
+syn match jovialType "\<S\(,R\|,T\|,Z\)\=\>"
+syn match jovialType "\<U\(,R\|,T\|,Z\)\=\>"
+syn match jovialType "\<F\(,R\|,T\|,Z\)\=\>"
+syn match jovialType "\<A\(,R\|,T\|,Z\)\=\>"
+
+syn keyword jovialStorageClass STATIC CONSTANT PARALLEL BLOCK N M D W
+
+syn keyword jovialStructure TABLE STATUS
+
+syn keyword jovialConstant NULL
+
+syn keyword jovialBoolean FALSE TRUE
+
+syn keyword jovialTypedef TYPE
+
+syn keyword jovialStatement ABORT BEGIN BY BYREF BYRES BYVAL CASE COMPOOL
+syn keyword jovialStatement DEF DEFAULT DEFINE ELSE END EXIT FALLTHRU FOR
+syn keyword jovialStatement GOTO IF INLINE INSTANCE LABEL LIKE OVERLAY POS
+syn keyword jovialStatement PROC PROGRAM REC REF RENT REP RETURN START STOP
+syn keyword jovialStatement TERM THEN WHILE
+
+" JOVIAL extensions, see section 8.2.2 in MIL-STD-1589C
+syn keyword jovialStatement CONDITION ENCAPSULATION EXPORTS FREE HANDLER IN INTERRUPT NEW
+syn keyword jovialStatement PROTECTED READONLY REGISTER SIGNAL TO UPDATE WITH WRITEONLY ZONE
+
+" implementation specific constants and functions, see section 1.4 in MIL-STD-1589C
+syn keyword jovialConstant BITSINBYTE BITSINWORD LOCSINWORD
+syn keyword jovialConstant BYTESINWORD BITSINPOINTER INTPRECISION
+syn keyword jovialConstant FLOATPRECISION FIXEDPRECISION FLOATRADIX
+syn keyword jovialConstant MAXFLOATPRECISION MAXFIXEDPRECISION
+syn keyword jovialConstant MAXINTSIZE MAXBYTES MAXBITS
+syn keyword jovialConstant MAXTABLESIZE MAXSTOP MINSTOP MAXSIGDIGITS
+syn keyword jovialFunction BYTEPOS MAXINT MININT
+syn keyword jovialFunction IMPLFLOATPRECISION IMPLFIXEDPRECISION IMPLINTSIZE
+syn keyword jovialFunction MINSIZE MINFRACTION MINSCALE MINRELPRECISION
+syn keyword jovialFunction MAXFLOAT MINFLOAT FLOATRELPRECISION
+syn keyword jovialFunction FLOATUNDERFLOW MAXFIXED MINFIXED
+
+" JOVIAL built-in functions
+syn keyword jovialFunction LOC NEXT BIT BYTE SHIFTL SHIFTR ABS SGN BITSIZE
+syn keyword jovialFunction BYTESIZE WORDSIZE LBOUND UBOUND NWDSEN FIRST
+syn keyword jovialFunction LAST NENT
+
+" Define the default highlighting.
+hi def link jovialBitConstant Number
+hi def link jovialBoolean Boolean
+hi def link jovialComment Comment
+hi def link jovialConstant Constant
+hi def link jovialFloat Float
+hi def link jovialFunction Function
+" No color highlighting for JOVIAL identifiers. See above,
+" this is to prevent confusion with JOVIAL strings
+"hi def link jovialIdentifier Identifier
+hi def link jovialNumber Number
+hi def link jovialOperator Operator
+hi def link jovialPreProc PreProc
+hi def link jovialStatement Statement
+hi def link jovialStorageClass StorageClass
+hi def link jovialString String
+hi def link jovialStructure Structure
+hi def link jovialTodo Todo
+hi def link jovialType Type
+hi def link jovialTypedef Typedef
+
+
+let b:current_syntax = "jovial"
+
+" vim: ts=8
diff -Naur vim73.orig/runtime/syntax/kwt.vim vim73/runtime/syntax/kwt.vim
--- vim73.orig/runtime/syntax/kwt.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/kwt.vim	2013-08-04 19:09:09.450614014 +0000
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Language:	kimwitu++
-" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
+" Maintainer:	Michael Piefel <entwurf@piefel.de>
 " Last Change:	2 May 2001
 
 " For version 5.x: Clear all syntax items
diff -Naur vim73.orig/runtime/syntax/lex.vim vim73/runtime/syntax/lex.vim
--- vim73.orig/runtime/syntax/lex.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/lex.vim	2013-08-04 19:09:09.457280661 +0000
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Lex
-" Maintainer:	Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Sep 11, 2009
-" Version:	10
+" Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change:	Nov 14, 2012
+" Version:	14
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Option:
@@ -17,28 +17,23 @@
 endif
 
 " Read the C/C++ syntax to start with
-if version >= 600
-  if exists("lex_uses_cpp")
-    runtime! syntax/cpp.vim
-  else
-    runtime! syntax/c.vim
-  endif
-  unlet b:current_syntax
-else
-  if exists("lex_uses_cpp")
-    so <sfile>:p:h/cpp.vim
-  else
-    so <sfile>:p:h/c.vim
+let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:lex_uses_cpp")? "/cpp.vim" : "/c.vim"))
+if !filereadable(s:Cpath)
+ for s:Cpath in split(globpath(&rtp,(exists("g:lex_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
+  if filereadable(fnameescape(s:Cpath))
+   let s:Cpath= fnameescape(s:Cpath)
+   break
   endif
+ endfor
 endif
+exe "syn include @lexCcode ".s:Cpath
 
 " --- ========= ---
 " --- Lex stuff ---
 " --- ========= ---
 
-"I'd prefer to use lex.* , but vim doesn't handle forward definitions yet
-syn cluster lexListGroup		contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatString,lexPatTag,lexPatTag,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,lexPatCode,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
-syn cluster lexListPatCodeGroup	contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatTag,lexPatTag,lexPatTagZoneStart,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
+" Options Section
+syn match lexOptions '^%\s*option\>.*$' contains=lexPatString
 
 " Abbreviations Section
 if has("folding")
@@ -50,50 +45,69 @@
 syn match  lexAbbrv		"^%[sx]"					contained
 syn match  lexAbbrvRegExp	"\s\S.*$"lc=1				contained nextgroup=lexAbbrv,lexInclude
 if has("folding")
- syn region lexInclude	fold matchgroup=lexSep	start="^%{"	end="%}"	contained	contains=ALLBUT,@lexListGroup
+ syn region lexInclude	fold matchgroup=lexSep	start="^%{"	end="%}"	contained	contains=@lexCcode
  syn region lexAbbrvComment	fold			start="^\s\+/\*"	end="\*/"	contains=@Spell
+ syn region lexAbbrvComment	fold			start="\%^/\*"	end="\*/"	contains=@Spell
  syn region lexStartState	fold matchgroup=lexAbbrv	start="^%\a\+"	end="$"	contained
 else
- syn region lexInclude	matchgroup=lexSep		start="^%{"	end="%}"	contained	contains=ALLBUT,@lexListGroup
+ syn region lexInclude	matchgroup=lexSep		start="^%{"	end="%}"	contained	contains=@lexCcode
  syn region lexAbbrvComment				start="^\s\+/\*"	end="\*/"	contains=@Spell
+ syn region lexAbbrvComment				start="\%^/\*"	end="\*/"	contains=@Spell
  syn region lexStartState	matchgroup=lexAbbrv		start="^%\a\+"	end="$"	contained
 endif
 
 "%% : Patterns {Actions}
 if has("folding")
- syn region lexPatBlock	fold matchgroup=Todo	start="^%%$" matchgroup=Todo	end="^%%$"	skipnl skipwhite	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat
- syn region lexPat		fold			start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1		contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexPatBlock	fold matchgroup=Todo	start="^%%$" matchgroup=Todo	end="^%\ze%$"	skipnl	skipwhite	nextgroup=lexFinalCodeBlock	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatInclude
+ syn region lexPat		fold			start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1	skipwhite	contained nextgroup=lexMorePat,lexPatSep,lexPattern contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexPatInclude	fold matchgroup=lexSep	start="^%{"	end="%}"	contained	contains=lexPatCode
  syn region lexBrace	fold			start="\[" skip=+\\\\\|\\+	end="]"			contained
  syn region lexPatString	fold matchgroup=String	start=+"+	skip=+\\\\\|\\"+	matchgroup=String end=+"+	contained
 else
- syn region lexPatBlock	matchgroup=Todo		start="^%%$" matchgroup=Todo	end="^%%$"	skipnl skipwhite	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat
- syn region lexPat					start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1		contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexPatBlock	matchgroup=Todo		start="^%%$" matchgroup=Todo	end="^%%$"	skipnl	skipwhite	nextgroup=lexFinalCodeBlock	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatInclude
+ syn region lexPat					start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1	skipwhite	contained nextgroup=lexMorePat,lexPatSep,lexPattern contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
+ syn region lexPatInclude	matchgroup=lexSep		start="^%{"	end="%}"	contained	contains=lexPatCode
  syn region lexBrace				start="\[" skip=+\\\\\|\\+	end="]"			contained
  syn region lexPatString	matchgroup=String		start=+"+	skip=+\\\\\|\\"+	matchgroup=String end=+"+	contained
 endif
 syn match  lexPatTag	"^<\I\i*\(,\I\i*\)*>"			contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
-syn match  lexPatTagZone	"^<\I\i*\(,\I\i*\)*>\s*\ze{"		contained nextgroup=lexPatTagZoneStart
+syn match  lexPatTagZone	"^<\I\i*\(,\I\i*\)*>\s\+\ze{"			contained nextgroup=lexPatTagZoneStart
 syn match  lexPatTag	+^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+		contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
+
+" Lex Patterns
+syn region lexPattern	start='[^ \t{}]'	end="$"			contained	contains=lexPatRange
+syn region lexPatRange	matchgroup=Delimiter	start='\['	skip='\\\\\|\\.'	end='\]'	contains=lexEscape
+syn match  lexEscape	'\%(\\\\\)*\\.'				contained
+
 if has("folding")
- syn region  lexPatTagZoneStart matchgroup=lexPatTag	fold	start='{' end='}'	contained contains=lexPat,lexPatComment
+ syn region lexPatTagZoneStart matchgroup=lexPatTag	fold	start='{' end='}'	contained contains=lexPat,lexPatComment
  syn region lexPatComment	start="\s\+/\*" end="\*/"	fold	skipnl	contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
 else
- syn region  lexPatTagZoneStart matchgroup=lexPatTag		start='{' end='}'	contained contains=lexPat,lexPatComment
+ syn region lexPatTagZoneStart matchgroup=lexPatTag		start='{' end='}'	contained contains=lexPat,lexPatComment
  syn region lexPatComment	start="\s\+/\*" end="\*/"		skipnl	contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
 endif
-syn match  lexPatCodeLine	".*$"					contained contains=ALLBUT,@lexListGroup
+syn match  lexPatCodeLine	"[^{\[].*"				contained contains=@lexCcode
 syn match  lexMorePat	"\s*|\s*$"			skipnl	contained nextgroup=lexPat,lexPatTag,lexPatComment
 syn match  lexPatSep	"\s\+"					contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine
 syn match  lexSlashQuote	+\(\\\\\)*\\"+				contained
 if has("folding")
- syn region lexPatCode matchgroup=Delimiter start="{" end="}"	fold	skipnl contained contains=ALLBUT,@lexListPatCodeGroup
+ syn region lexPatCode matchgroup=Delimiter start="{" end="}"	fold	skipnl contained contains=@lexCcode,lexCFunctions
 else
- syn region lexPatCode matchgroup=Delimiter start="{" end="}"		skipnl contained contains=ALLBUT,@lexListPatCodeGroup
+ syn region lexPatCode matchgroup=Delimiter start="{" end="}"	skipnl	contained contains=@lexCcode,lexCFunctions
 endif
 
+" Lex "functions" which may appear in C/C++ code blocks
 syn keyword lexCFunctions	BEGIN	input	unput	woutput	yyleng	yylook	yytext
 syn keyword lexCFunctions	ECHO	output	winput	wunput	yyless	yymore	yywrap
 
+" %%
+"  lexAbbrevBlock
+" %%
+"  lexPatBlock
+" %%
+"  lexFinalCodeBlock
+syn region lexFinalCodeBlock matchgroup=Todo start="%$"me=e-1 end="\%$"	contained	contains=@lexCcode
+
 " <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups
 syn cluster cParenGroup	add=lex.*
 syn cluster cDefineGroup	add=lex.*
@@ -102,26 +116,27 @@
 
 " Synchronization
 syn sync clear
-syn sync minlines=300
+syn sync minlines=500
 syn sync match lexSyncPat	grouphere  lexPatBlock	"^%[a-zA-Z]"
 syn sync match lexSyncPat	groupthere lexPatBlock	"^<$"
 syn sync match lexSyncPat	groupthere lexPatBlock	"^%%$"
 
 " The default highlighting.
 hi def link lexAbbrvComment	lexPatComment
-hi def link lexBrace	lexPat
-hi def link lexPatTagZone	lexPatTag
-hi def link lexSlashQuote	lexPat
-
 hi def link lexAbbrvRegExp	Macro
 hi def link lexAbbrv	SpecialChar
+hi def link lexBrace	lexPat
 hi def link lexCFunctions	Function
+hi def link lexCstruct	cStructure
 hi def link lexMorePat	SpecialChar
+hi def link lexOptions	PreProc
 hi def link lexPatComment	Comment
 hi def link lexPat		Function
 hi def link lexPatString	Function
 hi def link lexPatTag	Special
+hi def link lexPatTagZone	lexPatTag
 hi def link lexSep		Delimiter
+hi def link lexSlashQuote	lexPat
 hi def link lexStartState	Statement
 
 let b:current_syntax = "lex"
diff -Naur vim73.orig/runtime/syntax/liquid.vim vim73/runtime/syntax/liquid.vim
--- vim73.orig/runtime/syntax/liquid.vim	2010-05-21 09:47:22.000000000 +0000
+++ vim73/runtime/syntax/liquid.vim	2013-08-04 19:09:09.467280631 +0000
@@ -2,7 +2,7 @@
 " Language:     Liquid
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:    *.liquid
-" Last Change:	2010 May 21
+" Last Change:	2013 May 30
 
 if exists('b:current_syntax')
   finish
@@ -71,8 +71,9 @@
 syn region  liquidStatement  matchgroup=liquidDelimiter start="{%" end="%}" contains=@liquidStatement containedin=ALLBUT,@liquidExempt keepend
 syn region  liquidExpression matchgroup=liquidDelimiter start="{{" end="}}" contains=@liquidExpression  containedin=ALLBUT,@liquidExempt keepend
 syn region  liquidComment    matchgroup=liquidDelimiter start="{%\s*comment\s*%}" end="{%\s*endcomment\s*%}" contains=liquidTodo,@Spell containedin=ALLBUT,@liquidExempt keepend
+syn region  liquidRaw        matchgroup=liquidDelimiter start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" contains=TOP,@liquidExempt containedin=ALLBUT,@liquidExempt keepend
 
-syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,@liquidStatement,liquidYamlHead
+syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,liquidRaw,@liquidStatement,liquidYamlHead
 syn cluster liquidStatement contains=liquidConditional,liquidRepeat,liquidKeyword,@liquidExpression
 syn cluster liquidExpression contains=liquidOperator,liquidString,liquidNumber,liquidFloat,liquidBoolean,liquidNull,liquidEmpty,liquidPipe,liquidForloop
 
diff -Naur vim73.orig/runtime/syntax/lisp.vim vim73/runtime/syntax/lisp.vim
--- vim73.orig/runtime/syntax/lisp.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/lisp.vim	2013-08-04 19:09:09.467280631 +0000
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    Lisp
 " Maintainer:  Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change: Mar 05, 2009
-" Version:     21
+" Last Change: Nov 16, 2010
+" Version:     22
 " URL:	       http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 "  Thanks to F Xavier Noria for a list of 978 Common Lisp symbols
@@ -32,7 +32,7 @@
 " ---------------------------------------------------------------------
 " Clusters: {{{1
 syn cluster			lispAtomCluster		contains=lispAtomBarSymbol,lispAtomList,lispAtomNmbr0,lispComment,lispDecl,lispFunc,lispLeadWhite
-syn cluster			lispBaseListCluster	contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispSpecial,lispSymbol,lispVar,lispLeadWhite
+syn cluster			lispBaseListCluster	contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispEscapeSpecial,lispSymbol,lispVar,lispLeadWhite
 if exists("g:lisp_instring")
  syn cluster			lispListCluster		contains=@lispBaseListCluster,lispString,lispInString,lispInStringString
 else
@@ -68,7 +68,7 @@
 syn match lispAtom			"'[^ \t()]\+"			contains=lispAtomMark
 syn match lispAtomBarSymbol		!'|..\{-}|!			contains=lispAtomMark
 syn region lispAtom			start=+'"+			skip=+\\"+ end=+"+
-syn region lispAtomList			contained			matchgroup=Special start="("	skip="|.\{-}|" matchgroup=Special end=")"	contains=@lispAtomCluster,lispString,lispSpecial
+syn region lispAtomList			contained			matchgroup=Special start="("	skip="|.\{-}|" matchgroup=Special end=")"	contains=@lispAtomCluster,lispString,lispEscapeSpecial
 syn match lispAtomNmbr			contained			"\<\d\+"
 syn match lispLeadWhite			contained			"^\s\+"
 
@@ -537,16 +537,16 @@
 syn match lispNumber		"-\=\(\.\d\+\|\d\+\(\.\d*\)\=\)\([dDeEfFlL][-+]\=\d\+\)\="
 syn match lispNumber		"-\=\(\d\+/\d\+\)"
 
-syn match lispSpecial		"\*\w[a-z_0-9-]*\*"
-syn match lispSpecial		!#|[^()'`,"; \t]\+|#!
-syn match lispSpecial		!#x\x\+!
-syn match lispSpecial		!#o\o\+!
-syn match lispSpecial		!#b[01]\+!
-syn match lispSpecial		!#\\[ -}\~]!
-syn match lispSpecial		!#[':][^()'`,"; \t]\+!
-syn match lispSpecial		!#([^()'`,"; \t]\+)!
-syn match lispSpecial		!#\\\%(Space\|Newline\|Tab\|Page\|Rubout\|Linefeed\|Return\|Backspace\)!
-syn match lispSpecial		"\<+[a-zA-Z_][a-zA-Z_0-9-]*+\>"
+syn match lispEscapeSpecial		"\*\w[a-z_0-9-]*\*"
+syn match lispEscapeSpecial		!#|[^()'`,"; \t]\+|#!
+syn match lispEscapeSpecial		!#x\x\+!
+syn match lispEscapeSpecial		!#o\o\+!
+syn match lispEscapeSpecial		!#b[01]\+!
+syn match lispEscapeSpecial		!#\\[ -}\~]!
+syn match lispEscapeSpecial		!#[':][^()'`,"; \t]\+!
+syn match lispEscapeSpecial		!#([^()'`,"; \t]\+)!
+syn match lispEscapeSpecial		!#\\\%(Space\|Newline\|Tab\|Page\|Rubout\|Linefeed\|Return\|Backspace\)!
+syn match lispEscapeSpecial		"\<+[a-zA-Z_][a-zA-Z_0-9-]*+\>"
 
 syn match lispConcat		"\s\.\s"
 syn match lispParenError	")"
@@ -585,7 +585,7 @@
   HiLink lispMark		Delimiter
   HiLink lispNumber		Number
   HiLink lispParenError		Error
-  HiLink lispSpecial		Type
+  HiLink lispEscapeSpecial	Type
   HiLink lispString		String
   HiLink lispTodo		Todo
   HiLink lispVar		Statement
diff -Naur vim73.orig/runtime/syntax/logindefs.vim vim73/runtime/syntax/logindefs.vim
--- vim73.orig/runtime/syntax/logindefs.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/logindefs.vim	2013-08-04 19:09:09.473947277 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         login.defs(5) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2010-11-29
 
 if exists("b:current_syntax")
   finish
@@ -10,83 +10,163 @@
 let s:cpo_save = &cpo
 set cpo&vim
 
-syn keyword logindefsTodo       contained TODO FIXME XXX NOTE
-
-syn region  logindefsComment    display oneline start='^\s*#' end='$'
-                                \ contains=logindefsTodo,@Spell
-
-syn match   logindefsString     contained '[[:graph:]]\+'
-
-syn match   logindefsPath       contained '[[:graph:]]\+'
-
-syn match   logindefsPaths      contained '[[:graph:]]\+'
-                                \ nextgroup=logindefsPathDelim
-
-syn match   logindefsPathDelim  contained ':' nextgroup=logindefsPaths
-
-syn keyword logindefsBoolean    contained yes no
-
-syn match   logindefsDecimal    contained '\<\d\+\>'
-
-syn match   logindefsOctal      contained display '\<0\o\+\>'
-                                \ contains=logindefsOctalZero
-syn match   logindefsOctalZero  contained display '\<0'
-syn match   logindefsOctalError contained display '\<0\o*[89]\d*\>'
-
-syn match   logindefsHex        contained display '\<0x\x\+\>'
-
-syn cluster logindefsNumber     contains=logindefsDecimal,logindefsOctal,
-                                \ logindefsOctalError,logindefsHex
-
-syn match   logindefsBegin      display '^'
-                                \ nextgroup=logindefsKeyword,logindefsComment
-                                \ skipwhite
-
-syn keyword logindefsKeyword    contained CHFN_AUTH CLOSE_SESSIONS CREATE_HOME
-                                \ DEFAULT_HOME FAILLOG_ENAB LASTLOG_ENAB
-                                \ LOG_OK_LOGINS LOG_UNKFAIL_ENAB MAIL_CHECK_ENAB
-                                \ MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB
-                                \ PASS_ALWAYS_WARN PORTTIME_CHECKS_ENAB
-                                \ QUOTAS_ENAB SU_WHEEL_ONLY SYSLOG_SG_ENAB
-                                \ SYSLOG_SU_ENAB USERGROUPS_ENAB
-                                \ nextgroup=logindefsBoolean skipwhite
-
-syn keyword logindefsKeyword    contained CHFN_RESTRICT CONSOLE CONSOLE_GROUPS
-                                \ ENV_TZ ENV_HZ FAKE_SHELL SU_NAME LOGIN_STRING
-                                \ NOLOGIN_STR TTYGROUP USERDEL_CMD
-                                \ nextgroup=logindefsString skipwhite
-
-syn keyword logindefsKeyword    contained ENVIRON_FILE FTMP_FILE HUSHLOGIN_FILE
-                                \ ISSUE_FILE MAIL_DIR MAIL_FILE NOLOGINS_FILE
-                                \ NOLOGINS_FILE TTYTYPE_FILE QMAIL_DIR
-                                \ SULOG_FILE
-                                \ nextgroup=logindefsPath skipwhite
-
-syn keyword logindefsKeyword    contained CRACKLIB_DICTPATH ENV_PATH
-                                \ ENV_ROOTPATH ENV_SUPATH MOTD_FILE
-                                \ nextgroup=logindefsPaths skipwhite
-
-syn keyword logindefsKeyword    contained ERASECHAR FAIL_DELAY GETPASS_ASTERISKS
-                                \ GID_MAX GID_MIN KILLCHAR LOGIN_RETRIES
-                                \ LOGIN_TIMEOUT PASS_CHANGE_TRIES PASS_MAX_DAYS
-                                \ PASS_MAX_LEN PASS_MIN_DAYS PASS_MIN_LEN
-                                \ PASS_WARN_AGE TTYPERM UID_MAX UID_MIN ULIMIT
-                                \ UMASK
-                                \ nextgroup=@logindefsNumber skipwhite
-
-hi def link logindefsTodo       Todo
-hi def link logindefsComment    Comment
-hi def link logindefsString     String
-hi def link logindefsPath       String
-hi def link logindefsPaths      logindefsPath
-hi def link logindefsPathDelim  Delimiter
-hi def link logindefsBoolean    Boolean
-hi def link logindefsDecimal    Number
-hi def link logindefsOctal      Number
-hi def link logindefsOctalZero  PreProc
-hi def link logindefsOctalError Error
-hi def link logindefsHex        Number
-hi def link logindefsKeyword    Keyword
+syn match   logindefsBegin          display '^'
+                                    \ nextgroup=
+                                    \   logindefsComment,
+                                    \   @logindefsKeyword
+                                    \ skipwhite
+
+syn region  logindefsComment        display oneline start='^\s*#' end='$'
+                                    \ contains=logindefsTodo,@Spell
+
+syn keyword logindefsTodo           contained TODO FIXME XXX NOTE
+
+syn cluster logindefsKeyword        contains=
+                                    \ logindefsBooleanKeyword,
+                                    \ logindefsEncryptKeyword,
+                                    \ logindefsNumberKeyword,
+                                    \ logindefsPathKeyword,
+                                    \ logindefsPathsKeyword,
+                                    \ logindefsStringKeyword
+
+syn keyword logindefsBooleanKeyword contained
+                                    \ CHFN_AUTH
+                                    \ CHSH_AUTH
+                                    \ CREATE_HOME
+                                    \ DEFAULT_HOME
+                                    \ FAILLOG_ENAB
+                                    \ LASTLOG_ENAB
+                                    \ LOG_OK_LOGINS
+                                    \ LOG_UNKFAIL_ENAB
+                                    \ MAIL_CHECK_ENAB
+                                    \ MD5_CRYPT_ENAB
+                                    \ OBSCURE_CHECKS_ENAB
+                                    \ PASS_ALWAYS_WARN
+                                    \ PORTTIME_CHECKS_ENAB
+                                    \ QUOTAS_ENAB
+                                    \ SU_WHEEL_ONLY
+                                    \ SYSLOG_SG_ENAB
+                                    \ SYSLOG_SU_ENAB
+                                    \ USERGROUPS_ENAB
+                                    \ nextgroup=logindefsBoolean skipwhite
+
+syn keyword logindefsBoolean        contained yes no
+
+syn keyword logindefsEncryptKeyword contained
+                                    \ ENCRYPT_METHOD
+                                    \ nextgroup=logindefsEncryptMethod skipwhite
+
+syn keyword logindefsEncryptMethod  contained
+                                    \ DES
+                                    \ MD5
+                                    \ SHA256
+                                    \ SHA512
+
+syn keyword logindefsNumberKeyword  contained
+                                    \ ERASECHAR
+                                    \ FAIL_DELAY
+                                    \ GID_MAX
+                                    \ GID_MIN
+                                    \ KILLCHAR
+                                    \ LOGIN_RETRIES
+                                    \ LOGIN_TIMEOUT
+                                    \ MAX_MEMBERS_PER_GROUP
+                                    \ PASS_CHANGE_TRIES
+                                    \ PASS_MAX_DAYS
+                                    \ PASS_MIN_DAYS
+                                    \ PASS_WARN_AGE
+                                    \ PASS_MAX_LEN
+                                    \ PASS_MIN_LEN
+                                    \ SHA_CRYPT_MAX_ROUNDS
+                                    \ SHA_CRYPT_MIN_ROUNDS
+                                    \ SYS_GID_MAX
+                                    \ SYS_GID_MIN
+                                    \ SYS_UID_MAX
+                                    \ SYS_UID_MIN
+                                    \ UID_MAX
+                                    \ UID_MIN
+                                    \ ULIMIT
+                                    \ UMASK
+                                    \ nextgroup=@logindefsNumber skipwhite
+
+syn cluster logindefsNumber         contains=
+                                    \ logindefsDecimal,
+                                    \ logindefsHex,
+                                    \ logindefsOctal,
+                                    \ logindefsOctalError
+
+syn match   logindefsDecimal        contained '\<\d\+\>'
+
+syn match   logindefsHex            contained display '\<0x\x\+\>'
+
+syn match   logindefsOctal          contained display '\<0\o\+\>'
+                                    \ contains=logindefsOctalZero
+syn match   logindefsOctalZero      contained display '\<0'
+
+syn match   logindefsOctalError     contained display '\<0\o*[89]\d*\>'
+
+syn keyword logindefsPathKeyword    contained
+                                    \ ENVIRON_FILE
+                                    \ FAKE_SHELL
+                                    \ FTMP_FILE
+                                    \ HUSHLOGIN_FILE
+                                    \ ISSUE_FILE
+                                    \ MAIL_DIR
+                                    \ MAIL_FILE
+                                    \ NOLOGINS_FILE
+                                    \ SULOG_FILE
+                                    \ TTYTYPE_FILE
+                                    \ nextgroup=logindefsPath skipwhite
+
+syn match   logindefsPath           contained '[[:graph:]]\+'
+
+syn keyword logindefsPathsKeyword   contained
+                                    \ CONSOLE
+                                    \ ENV_PATH
+                                    \ ENV_SUPATH
+                                    \ MOTD_FILE
+                                    \ nextgroup=logindefsPaths skipwhite
+
+syn match   logindefsPaths          contained '[^:]\+'
+                                    \ nextgroup=logindefsPathDelim
+
+syn match   logindefsPathDelim      contained ':' nextgroup=logindefsPaths
+
+syn keyword logindefsStringKeyword  contained
+                                    \ CHFN_RESTRICT
+                                    \ CONSOLE_GROUPS
+                                    \ ENV_HZ
+                                    \ ENV_TZ
+                                    \ LOGIN_STRING
+                                    \ SU_NAME
+                                    \ TTYGROUP
+                                    \ TTYPERM
+                                    \ USERDEL_CMD
+                                    \ nextgroup=logindefsString skipwhite
+
+syn match   logindefsString         contained '[[:graph:]]\+'
+
+hi def link logindefsComment        Comment
+hi def link logindefsTodo           Todo
+hi def link logindefsKeyword        Keyword
+hi def link logindefsBooleanKeyword logindefsKeyword
+hi def link logindefsEncryptKeyword logindefsKeyword
+hi def link logindefsNumberKeyword  logindefsKeyword
+hi def link logindefsPathKeyword    logindefsKeyword
+hi def link logindefsPathsKeyword   logindefsKeyword
+hi def link logindefsStringKeyword  logindefsKeyword
+hi def link logindefsBoolean        Boolean
+hi def link logindefsEncryptMethod  Type
+hi def link logindefsNumber         Number
+hi def link logindefsDecimal        logindefsNumber
+hi def link logindefsHex            logindefsNumber
+hi def link logindefsOctal          logindefsNumber
+hi def link logindefsOctalZero      PreProc
+hi def link logindefsOctalError     Error
+hi def link logindefsPath           String
+hi def link logindefsPaths          logindefsPath
+hi def link logindefsPathDelim      Delimiter
+hi def link logindefsString         String
 
 let b:current_syntax = "logindefs"
 
diff -Naur vim73.orig/runtime/syntax/logtalk.vim vim73/runtime/syntax/logtalk.vim
--- vim73.orig/runtime/syntax/logtalk.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/logtalk.vim	2013-08-04 19:09:09.473947277 +0000
@@ -2,7 +2,7 @@
 "
 " Language:	Logtalk
 " Maintainer:	Paulo Moura <pmoura@logtalk.org>
-" Last Change:	Oct 31, 2008
+" Last Change:	February 4, 2012
 
 
 " Quit when a syntax file was already loaded:
@@ -13,6 +13,8 @@
 	finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
 
 " Logtalk is case sensitive:
 
@@ -75,8 +77,13 @@
 
 " Logtalk directives
 
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- if("			matchgroup=logtalkDirTag	end=")\."	contains=ALL
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- elif("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+syn match	logtalkDirTag		":- else\."
+syn match	logtalkDirTag		":- endif\."
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- alias("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- calls("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- coinductive("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- encoding("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- initialization("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- info("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
@@ -89,17 +96,27 @@
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- protected("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- private("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- meta_predicate("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- meta_non_terminal("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- op("			matchgroup=logtalkDirTag	end=")\."	contains=ALL
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- set_logtalk_flag("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- synchronized("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn match	logtalkDirTag		":- synchronized\."
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- uses("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn match	logtalkDirTag		":- threaded\."
 
 
+" Prolog directives
+
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- ensure_loaded("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- include("     	matchgroup=logtalkDirTag	end=")\."	contains=ALL
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- set_prolog_flag("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
+
+
 " Module directives
 
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- module("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- export("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- reexport("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- use_module("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
 
 
@@ -109,7 +126,7 @@
 
 syn match	logtalkBuiltIn		"\<\(object\|protocol\|category\)_property\ze("
 
-syn match	logtalkBuiltIn		"\<complements_object\ze("
+syn match	logtalkBuiltIn		"\<co\(mplements_object\|nforms_to_protocol\)\ze("
 syn match	logtalkBuiltIn		"\<extends_\(object\|protocol\|category\)\ze("
 syn match	logtalkBuiltIn		"\<imp\(orts_category\|lements_protocol\)\ze("
 syn match	logtalkBuiltIn		"\<\(instantiat\|specializ\)es_class\ze("
@@ -119,7 +136,7 @@
 
 syn match	logtalkBuiltIn		"\<\(curren\|se\)t_logtalk_flag\ze("
 
-syn match	logtalkBuiltIn		"\<logtalk_\(compile\|l\(ibrary_path\|oad\)\)\ze("
+syn match	logtalkBuiltIn		"\<logtalk_\(compile\|l\(ibrary_path\|oad\|oad_context\)\)\ze("
 
 syn match	logtalkBuiltIn		"\<\(for\|retract\)all\ze("
 
@@ -145,7 +162,7 @@
 syn match	logtalkBuiltInMethod	"\<before\ze("
 syn match	logtalkBuiltInMethod	"\<after\ze("
 
-syn match	logtalkBuiltInMethod	"\<expand_term\ze("
+syn match	logtalkBuiltInMethod	"\<expand_\(goal\|term\)\ze("
 syn match	logtalkBuiltInMethod	"\<\(goal\|term\)_expansion\ze("
 syn match	logtalkBuiltInMethod	"\<phrase\ze("
 
@@ -182,12 +199,14 @@
 syn match	logtalkKeyword		"\<atom\(ic\)\?\ze("
 syn match	logtalkKeyword		"\<integer\ze("
 syn match	logtalkKeyword		"\<float\ze("
-syn match	logtalkKeyword		"\<compound\ze("
+syn match	logtalkKeyword		"\<c\(allable\|ompound\)\ze("
 syn match	logtalkKeyword		"\<n\(onvar\|umber\)\ze("
+syn match	logtalkKeyword		"\<ground\ze("
 
 
 " Term comparison
 
+syn match	logtalkKeyword		"\<compare\ze("
 syn match	logtalkOperator		"@=<"
 syn match	logtalkOperator		"=="
 syn match	logtalkOperator		"\\=="
@@ -202,6 +221,7 @@
 syn match	logtalkKeyword		"\<arg\ze("
 syn match	logtalkOperator		"=\.\."
 syn match	logtalkKeyword		"\<copy_term\ze("
+syn match	logtalkKeyword		"\<numbervars\ze("
 
 
 " Arithemtic evaluation
@@ -250,6 +270,7 @@
 " Logic and control
 
 syn match	logtalkOperator		"\\+"
+syn match	logtalkKeyword		"\<ignore\ze("
 syn match	logtalkKeyword		"\<once\ze("
 syn match	logtalkKeyword		"\<repeat\>"
 
@@ -269,6 +290,11 @@
 syn match	logtalkKeyword		"\<halt\>"
 
 
+" Sorting
+
+syn match	logtalkKeyword		"\<\(key\)\?sort\ze("
+
+
 " Evaluable functors
 
 syn match	logtalkOperator		"+"
@@ -277,6 +303,8 @@
 syn match	logtalkOperator		"//"
 syn match	logtalkOperator		"/"
 syn match	logtalkKeyword		"\<r\(ound\|em\)\ze("
+syn match	logtalkKeyword		"\<e\>"
+syn match	logtalkKeyword		"\<pi\>"
 syn match	logtalkKeyword		"\<rem\>"
 syn match	logtalkKeyword		"\<mod\ze("
 syn match	logtalkKeyword		"\<mod\>"
@@ -311,7 +339,12 @@
 syn match	logtalkOperator		"|"
 
 
-" Logtalk numbers
+" Logtalk existential quantifier operator
+
+syn match	logtalkOperator		"\^"
+
+
+" Logtalk numbers 
 
 syn match	logtalkNumber		"\<\d\+\>"
 syn match	logtalkNumber		"\<\d\+\.\d\+\>"
@@ -333,6 +366,17 @@
 syn region	logtalkBlockComment	start="/\*"	end="\*/"	fold
 syn match	logtalkLineComment	"%.*"
 
+syn cluster	logtalkComment		contains=logtalkBlockComment,logtalkLineComment
+
+
+" Logtalk conditional compilation folding
+
+syn region logtalkIfContainer transparent keepend extend start=":- if(" end=":- endif\." containedin=ALLBUT,@logtalkComment contains=NONE
+syn region logtalkIf transparent fold keepend start=":- if(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
+syn region logtalkElseIf transparent fold keepend start=":- elif(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
+syn region logtalkElse transparent fold keepend start=":- else\." end=":- endif\." contained containedin=logtalkIfContainer contains=TOP
+
+
 
 " Logtalk entity folding
 
@@ -362,6 +406,11 @@
 	HiLink	logtalkOpenEntityDir	Normal
 	HiLink	logtalkOpenEntityDirTag	PreProc
 
+	HiLink	logtalkIfContainer	PreProc
+	HiLink	logtalkIf		PreProc
+	HiLink	logtalkElseIf		PreProc
+	HiLink	logtalkElse		PreProc
+
 	HiLink	logtalkEntity		Normal
 
 	HiLink	logtalkEntityRel	Normal
@@ -396,3 +445,6 @@
 
 
 let b:current_syntax = "logtalk"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/lout.vim vim73/runtime/syntax/lout.vim
--- vim73.orig/runtime/syntax/lout.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/lout.vim	2013-08-04 19:09:09.477280601 +0000
@@ -1,13 +1,21 @@
 " Vim syntax file
 " Language:    Lout
 " Maintainer:  Christian V. J. Brssow <cvjb@cvjb.de>
-" Last Change: Son 22 Jun 2003 20:43:26 CEST
+" Last Change: So 12 Feb 2012 15:15:03 CET
 " Filenames:   *.lout,*.lt
-" URL:			http://www.cvjb.de/comp/vim/lout.vim
-" $Id: lout.vim,v 1.1 2004/06/13 17:52:18 vimboss Exp $
+" URL:         http://www.cvjb.de/comp/vim/lout.vim
+
+" $Id: lout.vim,v 1.4 2012/02/12 15:16:17 bruessow Exp $
 "
 " Lout: Basser Lout document formatting system.
 
+" Many Thanks to...
+" 
+" 2012-02-12:
+" Thilo Six <T.Six at gmx dot de> send a patch for cpoptions.
+" See the discussion at http://thread.gmane.org/gmane.editors.vim.devel/32151
+
+
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
@@ -16,6 +24,9 @@
 	finish
 endif
 
+let s:cpo_save=&cpo
+set cpo&vim
+
 " Lout is case sensitive
 syn case match
 
@@ -136,4 +147,7 @@
 
 let b:current_syntax = "lout"
 
+let &cpo=s:cpo_save
+unlet s:cpo_save
+
 " vim:ts=8:sw=4:nocindent:smartindent:
diff -Naur vim73.orig/runtime/syntax/lpc.vim vim73/runtime/syntax/lpc.vim
--- vim73.orig/runtime/syntax/lpc.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/lpc.vim	2013-08-04 19:09:09.477280601 +0000
@@ -2,7 +2,7 @@
 " Language:	LPC
 " Maintainer:	Shizhu Pan <poet@mudbuilder.net>
 " URL:		http://poet.tomud.com/pub/lpc.vim.bz2
-" Last Change:	2003 May 11
+" Last Change:	2011 Dec 10 by Thilo Six
 " Comments:	If you are using Vim 6.2 or later, see :h lpc.vim for
 "		file type recognizing, if not, you had to use modeline.
 
@@ -17,6 +17,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Nodule: Keywords {{{1
 
 " LPC keywords
@@ -345,7 +348,6 @@
 setlocal cindent
 setlocal fo-=t fo+=croql
 setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
-set cpo-=C
 
 " Win32 can filter files in the browse dialog
 if has("gui_win32") && !exists("b:browsefilter")
@@ -451,5 +453,8 @@
 
 let b:current_syntax = "lpc"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:ts=8:nosta:sw=2:ai:si:
 " vim600:set fdm=marker: }}}1
diff -Naur vim73.orig/runtime/syntax/lsl.vim vim73/runtime/syntax/lsl.vim
--- vim73.orig/runtime/syntax/lsl.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/lsl.vim	2013-08-04 19:09:09.480613924 +0000
@@ -1,12 +1,14 @@
 " Vim syntax file
 " Language:	Linden Scripting Language
 " Maintainer:	Timo Frenay <timo@frenay.net>
-" Last Change:	2008 Mar 29
+" Last Change:	2012 Apr 30
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Initializations
 syn case match
@@ -269,4 +271,7 @@
 
 let b:current_syntax = "lsl"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/lua.vim vim73/runtime/syntax/lua.vim
--- vim73.orig/runtime/syntax/lua.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/lua.vim	2013-08-04 19:09:09.483947247 +0000
@@ -1,11 +1,11 @@
 " Vim syntax file
-" Language:	Lua 4.0, Lua 5.0 and Lua 5.1
-" Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol com br>
+" Language:	Lua 4.0, Lua 5.0, Lua 5.1 and Lua 5.2
+" Maintainer:	Marcus Aurelius Farias <masserahguard-lua 'at' yahoo com>
 " First Author:	Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
-" Last Change:	2006 Aug 10
+" Last Change:	2012 Aug 12
 " Options:	lua_version = 4 or 5
-"		lua_subversion = 0 (4.0, 5.0) or 1 (5.1)
-"		default 5.1
+"		lua_subversion = 0 (4.0, 5.0) or 1 (5.1) or 2 (5.2)
+"		default 5.2
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -15,10 +15,13 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if !exists("lua_version")
-  " Default is lua 5.1
+  " Default is lua 5.2
   let lua_version = 5
-  let lua_subversion = 1
+  let lua_subversion = 2
 elseif !exists("lua_subversion")
   " lua_version exists, but lua_subversion doesn't. So, set it to 0
   let lua_subversion = 0
@@ -30,14 +33,14 @@
 syn sync minlines=100
 
 " Comments
-syn keyword luaTodo             contained TODO FIXME XXX
-syn match   luaComment          "--.*$" contains=luaTodo,@Spell
+syn keyword luaTodo            contained TODO FIXME XXX
+syn match   luaComment         "--.*$" contains=luaTodo,@Spell
 if lua_version == 5 && lua_subversion == 0
-  syn region  luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
-  syn region  luaInnerComment   contained transparent start="\[\[" end="\]\]"
+  syn region luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
+  syn region luaInnerComment   contained transparent start="\[\[" end="\]\]"
 elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
   " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
-  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
+  syn region luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
 endif
 
 " First line may start with #!
@@ -45,60 +48,69 @@
 
 " catch errors caused by wrong parenthesis and wrong curly brackets or
 " keywords placed outside their respective blocks
+syn region luaParen      transparent                     start='(' end=')' contains=ALLBUT,luaParenError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
+syn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaBraceError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
 
-syn region luaParen transparent start='(' end=')' contains=ALLBUT,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
-syn match  luaError ")"
-syn match  luaError "}"
+syn match  luaParenError ")"
+syn match  luaBraceError "}"
 syn match  luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>"
 
-" Function declaration
-syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+" function ... end
+syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
 
-" if then else elseif end
-syn keyword luaCond contained else
+" if ... then
+syn region luaIfThen transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4           contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaIn nextgroup=luaThenEnd skipwhite skipempty
 
 " then ... end
-syn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat
+syn region luaThenEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaThenEnd,luaIn
 
 " elseif ... then
-syn region luaCondElseif contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+syn region luaElseifThen contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
 
-" if ... then
-syn region luaCondStart transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaCondEnd skipwhite skipempty
+" else
+syn keyword luaElse contained else
 
 " do ... end
-syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>"          contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
 
 " repeat ... until
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
+syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>"   contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
 
 " while ... do
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaBlock skipwhite skipempty
+syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaIn nextgroup=luaBlock skipwhite skipempty
 
 " for ... do and for ... in ... do
-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd nextgroup=luaBlock skipwhite skipempty
+syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2   contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd nextgroup=luaBlock skipwhite skipempty
 
-" Following 'else' example. This is another item to those
-" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it.
-syn keyword luaRepeat contained in
+syn keyword luaIn contained in
 
 " other keywords
 syn keyword luaStatement return local break
-syn keyword luaOperator  and or not
-syn keyword luaConstant  nil
+if lua_version > 5 || (lua_version == 5 && lua_subversion >= 2)
+  syn keyword luaStatement goto
+  syn match luaLabel "::\I\i*::"
+endif
+syn keyword luaOperator and or not
+syn keyword luaConstant nil
 if lua_version > 4
   syn keyword luaConstant true false
 endif
 
 " Strings
 if lua_version < 5
-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
-elseif lua_version == 5 && lua_subversion == 0
-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
-  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
-elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
-  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
+  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\[[:digit:]]\{,3}"
+elseif lua_version == 5
+  if lua_subversion == 0
+    syn match  luaSpecial contained #\\[\\abfnrtv'"[\]]\|\\[[:digit:]]\{,3}#
+    syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
+  else
+    if lua_subversion == 1
+      syn match  luaSpecial contained #\\[\\abfnrtv'"]\|\\[[:digit:]]\{,3}#
+    else " Lua 5.2
+      syn match  luaSpecial contained #\\[\\abfnrtvz'"]\|\\x[[:xdigit:]]\{2}\|\\[[:digit:]]\{,3}#
+    endif
+    syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
+  endif
 endif
 syn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell
 syn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell
@@ -106,20 +118,21 @@
 " integer number
 syn match luaNumber "\<\d\+\>"
 " floating point number, with dot, optional exponent
-syn match luaFloat  "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>"
+syn match luaNumber  "\<\d\+\.\d*\%([eE][-+]\=\d\+\)\=\>"
 " floating point number, starting with a dot, optional exponent
-syn match luaFloat  "\.\d\+\%(e[-+]\=\d\+\)\=\>"
+syn match luaNumber  "\.\d\+\%([eE][-+]\=\d\+\)\=\>"
 " floating point number, without dot, with exponent
-syn match luaFloat  "\<\d\+e[-+]\=\d\+\>"
+syn match luaNumber  "\<\d\+[eE][-+]\=\d\+\>"
 
 " hex numbers
-if lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
-  syn match luaNumber "\<0x\x\+\>"
+if lua_version >= 5
+  if lua_subversion == 1
+    syn match luaNumber "\<0[xX]\x\+\>"
+  elseif lua_subversion >= 2
+    syn match luaNumber "\<0[xX][[:xdigit:].]\+\%([pP][-+]\=\d\+\)\=\>"
+  endif
 endif
 
-" tables
-syn region  luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
-
 syn keyword luaFunc assert collectgarbage dofile error next
 syn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
 
@@ -144,127 +157,170 @@
   syn keyword luaFunc format strfind gsub
   syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
 elseif lua_version == 5
-  " Not sure if all these functions need to be highlighted...
-  syn keyword luaFunc _G getfenv getmetatable ipairs loadfile
-  syn keyword luaFunc loadstring pairs pcall rawequal
-  syn keyword luaFunc require setfenv setmetatable unpack xpcall
+  syn keyword luaFunc getmetatable setmetatable
+  syn keyword luaFunc ipairs pairs
+  syn keyword luaFunc pcall xpcall
+  syn keyword luaFunc _G loadfile rawequal require
   if lua_subversion == 0
+    syn keyword luaFunc getfenv setfenv
+    syn keyword luaFunc loadstring unpack
     syn keyword luaFunc gcinfo loadlib LUA_PATH _LOADED _REQUIREDNAME
-  elseif lua_subversion == 1
-    syn keyword luaFunc load module select
-    syn match luaFunc /package\.cpath/
-    syn match luaFunc /package\.loaded/
-    syn match luaFunc /package\.loadlib/
-    syn match luaFunc /package\.path/
-    syn match luaFunc /package\.preload/
-    syn match luaFunc /package\.seeall/
-    syn match luaFunc /coroutine\.running/
+  else
+    syn keyword luaFunc load select
+    syn match   luaFunc /\<package\.cpath\>/
+    syn match   luaFunc /\<package\.loaded\>/
+    syn match   luaFunc /\<package\.loadlib\>/
+    syn match   luaFunc /\<package\.path\>/
+    if lua_subversion == 1
+      syn keyword luaFunc getfenv setfenv
+      syn keyword luaFunc loadstring module unpack
+      syn match   luaFunc /\<package\.loaders\>/
+      syn match   luaFunc /\<package\.preload\>/
+      syn match   luaFunc /\<package\.seeall\>/
+    elseif lua_subversion == 2
+      syn keyword luaFunc _ENV rawlen
+      syn match   luaFunc /\<package\.config\>/
+      syn match   luaFunc /\<package\.preload\>/
+      syn match   luaFunc /\<package\.searchers\>/
+      syn match   luaFunc /\<package\.searchpath\>/
+      syn match   luaFunc /\<bit32\.arshift\>/
+      syn match   luaFunc /\<bit32\.band\>/
+      syn match   luaFunc /\<bit32\.bnot\>/
+      syn match   luaFunc /\<bit32\.bor\>/
+      syn match   luaFunc /\<bit32\.btest\>/
+      syn match   luaFunc /\<bit32\.bxor\>/
+      syn match   luaFunc /\<bit32\.extract\>/
+      syn match   luaFunc /\<bit32\.lrotate\>/
+      syn match   luaFunc /\<bit32\.lshift\>/
+      syn match   luaFunc /\<bit32\.replace\>/
+      syn match   luaFunc /\<bit32\.rrotate\>/
+      syn match   luaFunc /\<bit32\.rshift\>/
+    endif
+    syn match luaFunc /\<coroutine\.running\>/
   endif
-  syn match   luaFunc /coroutine\.create/
-  syn match   luaFunc /coroutine\.resume/
-  syn match   luaFunc /coroutine\.status/
-  syn match   luaFunc /coroutine\.wrap/
-  syn match   luaFunc /coroutine\.yield/
-  syn match   luaFunc /string\.byte/
-  syn match   luaFunc /string\.char/
-  syn match   luaFunc /string\.dump/
-  syn match   luaFunc /string\.find/
-  syn match   luaFunc /string\.len/
-  syn match   luaFunc /string\.lower/
-  syn match   luaFunc /string\.rep/
-  syn match   luaFunc /string\.sub/
-  syn match   luaFunc /string\.upper/
-  syn match   luaFunc /string\.format/
-  syn match   luaFunc /string\.gsub/
+  syn match   luaFunc /\<coroutine\.create\>/
+  syn match   luaFunc /\<coroutine\.resume\>/
+  syn match   luaFunc /\<coroutine\.status\>/
+  syn match   luaFunc /\<coroutine\.wrap\>/
+  syn match   luaFunc /\<coroutine\.yield\>/
+  syn match   luaFunc /\<string\.byte\>/
+  syn match   luaFunc /\<string\.char\>/
+  syn match   luaFunc /\<string\.dump\>/
+  syn match   luaFunc /\<string\.find\>/
+  syn match   luaFunc /\<string\.format\>/
+  syn match   luaFunc /\<string\.gsub\>/
+  syn match   luaFunc /\<string\.len\>/
+  syn match   luaFunc /\<string\.lower\>/
+  syn match   luaFunc /\<string\.rep\>/
+  syn match   luaFunc /\<string\.sub\>/
+  syn match   luaFunc /\<string\.upper\>/
   if lua_subversion == 0
-    syn match luaFunc /string\.gfind/
-    syn match luaFunc /table\.getn/
-    syn match luaFunc /table\.setn/
-    syn match luaFunc /table\.foreach/
-    syn match luaFunc /table\.foreachi/
-  elseif lua_subversion == 1
-    syn match luaFunc /string\.gmatch/
-    syn match luaFunc /string\.match/
-    syn match luaFunc /string\.reverse/
-    syn match luaFunc /table\.maxn/
+    syn match luaFunc /\<string\.gfind\>/
+  else
+    syn match luaFunc /\<string\.gmatch\>/
+    syn match luaFunc /\<string\.match\>/
+    syn match luaFunc /\<string\.reverse\>/
   endif
-  syn match   luaFunc /table\.concat/
-  syn match   luaFunc /table\.sort/
-  syn match   luaFunc /table\.insert/
-  syn match   luaFunc /table\.remove/
-  syn match   luaFunc /math\.abs/
-  syn match   luaFunc /math\.acos/
-  syn match   luaFunc /math\.asin/
-  syn match   luaFunc /math\.atan/
-  syn match   luaFunc /math\.atan2/
-  syn match   luaFunc /math\.ceil/
-  syn match   luaFunc /math\.sin/
-  syn match   luaFunc /math\.cos/
-  syn match   luaFunc /math\.tan/
-  syn match   luaFunc /math\.deg/
-  syn match   luaFunc /math\.exp/
-  syn match   luaFunc /math\.floor/
-  syn match   luaFunc /math\.log/
-  syn match   luaFunc /math\.log10/
-  syn match   luaFunc /math\.max/
-  syn match   luaFunc /math\.min/
   if lua_subversion == 0
-    syn match luaFunc /math\.mod/
+    syn match luaFunc /\<table\.getn\>/
+    syn match luaFunc /\<table\.setn\>/
+    syn match luaFunc /\<table\.foreach\>/
+    syn match luaFunc /\<table\.foreachi\>/
   elseif lua_subversion == 1
-    syn match luaFunc /math\.fmod/
-    syn match luaFunc /math\.modf/
-    syn match luaFunc /math\.cosh/
-    syn match luaFunc /math\.sinh/
-    syn match luaFunc /math\.tanh/
+    syn match luaFunc /\<table\.maxn\>/
+  elseif lua_subversion == 2
+    syn match luaFunc /\<table\.pack\>/
+    syn match luaFunc /\<table\.unpack\>/
+  endif
+  syn match   luaFunc /\<table\.concat\>/
+  syn match   luaFunc /\<table\.sort\>/
+  syn match   luaFunc /\<table\.insert\>/
+  syn match   luaFunc /\<table\.remove\>/
+  syn match   luaFunc /\<math\.abs\>/
+  syn match   luaFunc /\<math\.acos\>/
+  syn match   luaFunc /\<math\.asin\>/
+  syn match   luaFunc /\<math\.atan\>/
+  syn match   luaFunc /\<math\.atan2\>/
+  syn match   luaFunc /\<math\.ceil\>/
+  syn match   luaFunc /\<math\.sin\>/
+  syn match   luaFunc /\<math\.cos\>/
+  syn match   luaFunc /\<math\.tan\>/
+  syn match   luaFunc /\<math\.deg\>/
+  syn match   luaFunc /\<math\.exp\>/
+  syn match   luaFunc /\<math\.floor\>/
+  syn match   luaFunc /\<math\.log\>/
+  syn match   luaFunc /\<math\.max\>/
+  syn match   luaFunc /\<math\.min\>/
+  if lua_subversion == 0
+    syn match luaFunc /\<math\.mod\>/
+    syn match luaFunc /\<math\.log10\>/
+  else
+    if lua_subversion == 1
+      syn match luaFunc /\<math\.log10\>/
+    endif
+    syn match luaFunc /\<math\.huge\>/
+    syn match luaFunc /\<math\.fmod\>/
+    syn match luaFunc /\<math\.modf\>/
+    syn match luaFunc /\<math\.cosh\>/
+    syn match luaFunc /\<math\.sinh\>/
+    syn match luaFunc /\<math\.tanh\>/
   endif
-  syn match   luaFunc /math\.pow/
-  syn match   luaFunc /math\.rad/
-  syn match   luaFunc /math\.sqrt/
-  syn match   luaFunc /math\.frexp/
-  syn match   luaFunc /math\.ldexp/
-  syn match   luaFunc /math\.random/
-  syn match   luaFunc /math\.randomseed/
-  syn match   luaFunc /math\.pi/
-  syn match   luaFunc /io\.stdin/
-  syn match   luaFunc /io\.stdout/
-  syn match   luaFunc /io\.stderr/
-  syn match   luaFunc /io\.close/
-  syn match   luaFunc /io\.flush/
-  syn match   luaFunc /io\.input/
-  syn match   luaFunc /io\.lines/
-  syn match   luaFunc /io\.open/
-  syn match   luaFunc /io\.output/
-  syn match   luaFunc /io\.popen/
-  syn match   luaFunc /io\.read/
-  syn match   luaFunc /io\.tmpfile/
-  syn match   luaFunc /io\.type/
-  syn match   luaFunc /io\.write/
-  syn match   luaFunc /os\.clock/
-  syn match   luaFunc /os\.date/
-  syn match   luaFunc /os\.difftime/
-  syn match   luaFunc /os\.execute/
-  syn match   luaFunc /os\.exit/
-  syn match   luaFunc /os\.getenv/
-  syn match   luaFunc /os\.remove/
-  syn match   luaFunc /os\.rename/
-  syn match   luaFunc /os\.setlocale/
-  syn match   luaFunc /os\.time/
-  syn match   luaFunc /os\.tmpname/
-  syn match   luaFunc /debug\.debug/
-  syn match   luaFunc /debug\.gethook/
-  syn match   luaFunc /debug\.getinfo/
-  syn match   luaFunc /debug\.getlocal/
-  syn match   luaFunc /debug\.getupvalue/
-  syn match   luaFunc /debug\.setlocal/
-  syn match   luaFunc /debug\.setupvalue/
-  syn match   luaFunc /debug\.sethook/
-  syn match   luaFunc /debug\.traceback/
+  syn match   luaFunc /\<math\.pow\>/
+  syn match   luaFunc /\<math\.rad\>/
+  syn match   luaFunc /\<math\.sqrt\>/
+  syn match   luaFunc /\<math\.frexp\>/
+  syn match   luaFunc /\<math\.ldexp\>/
+  syn match   luaFunc /\<math\.random\>/
+  syn match   luaFunc /\<math\.randomseed\>/
+  syn match   luaFunc /\<math\.pi\>/
+  syn match   luaFunc /\<io\.close\>/
+  syn match   luaFunc /\<io\.flush\>/
+  syn match   luaFunc /\<io\.input\>/
+  syn match   luaFunc /\<io\.lines\>/
+  syn match   luaFunc /\<io\.open\>/
+  syn match   luaFunc /\<io\.output\>/
+  syn match   luaFunc /\<io\.popen\>/
+  syn match   luaFunc /\<io\.read\>/
+  syn match   luaFunc /\<io\.stderr\>/
+  syn match   luaFunc /\<io\.stdin\>/
+  syn match   luaFunc /\<io\.stdout\>/
+  syn match   luaFunc /\<io\.tmpfile\>/
+  syn match   luaFunc /\<io\.type\>/
+  syn match   luaFunc /\<io\.write\>/
+  syn match   luaFunc /\<os\.clock\>/
+  syn match   luaFunc /\<os\.date\>/
+  syn match   luaFunc /\<os\.difftime\>/
+  syn match   luaFunc /\<os\.execute\>/
+  syn match   luaFunc /\<os\.exit\>/
+  syn match   luaFunc /\<os\.getenv\>/
+  syn match   luaFunc /\<os\.remove\>/
+  syn match   luaFunc /\<os\.rename\>/
+  syn match   luaFunc /\<os\.setlocale\>/
+  syn match   luaFunc /\<os\.time\>/
+  syn match   luaFunc /\<os\.tmpname\>/
+  syn match   luaFunc /\<debug\.debug\>/
+  syn match   luaFunc /\<debug\.gethook\>/
+  syn match   luaFunc /\<debug\.getinfo\>/
+  syn match   luaFunc /\<debug\.getlocal\>/
+  syn match   luaFunc /\<debug\.getupvalue\>/
+  syn match   luaFunc /\<debug\.setlocal\>/
+  syn match   luaFunc /\<debug\.setupvalue\>/
+  syn match   luaFunc /\<debug\.sethook\>/
+  syn match   luaFunc /\<debug\.traceback\>/
   if lua_subversion == 1
-    syn match luaFunc /debug\.getfenv/
-    syn match luaFunc /debug\.getmetatable/
-    syn match luaFunc /debug\.getregistry/
-    syn match luaFunc /debug\.setfenv/
-    syn match luaFunc /debug\.setmetatable/
+    syn match luaFunc /\<debug\.getfenv\>/
+    syn match luaFunc /\<debug\.setfenv\>/
+    syn match luaFunc /\<debug\.getmetatable\>/
+    syn match luaFunc /\<debug\.setmetatable\>/
+    syn match luaFunc /\<debug\.getregistry\>/
+  elseif lua_subversion == 2
+    syn match luaFunc /\<debug\.getmetatable\>/
+    syn match luaFunc /\<debug\.setmetatable\>/
+    syn match luaFunc /\<debug\.getregistry\>/
+    syn match luaFunc /\<debug\.getuservalue\>/
+    syn match luaFunc /\<debug\.setuservalue\>/
+    syn match luaFunc /\<debug\.upvalueid\>/
+    syn match luaFunc /\<debug\.upvaluejoin\>/
   endif
 endif
 
@@ -281,24 +337,31 @@
 
   HiLink luaStatement		Statement
   HiLink luaRepeat		Repeat
+  HiLink luaFor			Repeat
   HiLink luaString		String
   HiLink luaString2		String
   HiLink luaNumber		Number
-  HiLink luaFloat		Float
   HiLink luaOperator		Operator
+  HiLink luaIn			Operator
   HiLink luaConstant		Constant
   HiLink luaCond		Conditional
+  HiLink luaElse		Conditional
   HiLink luaFunction		Function
   HiLink luaComment		Comment
   HiLink luaTodo		Todo
   HiLink luaTable		Structure
   HiLink luaError		Error
+  HiLink luaParenError		Error
+  HiLink luaBraceError		Error
   HiLink luaSpecial		SpecialChar
   HiLink luaFunc		Identifier
+  HiLink luaLabel		Label
 
   delcommand HiLink
 endif
 
 let b:current_syntax = "lua"
 
-" vim: et ts=8
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim: et ts=8 sw=2
diff -Naur vim73.orig/runtime/syntax/mail.vim vim73/runtime/syntax/mail.vim
--- vim73.orig/runtime/syntax/mail.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/mail.vim	2013-08-04 19:09:09.487280570 +0000
@@ -1,14 +1,17 @@
 " Vim syntax file
 " Language:		Mail file
 " Previous Maintainer:	Felix von Leitner <leitner@math.fu-berlin.de>
-" Maintainer:		Gautam Iyer <gi1242@users.sourceforge.net>
-" Last Change:		Thu 06 Nov 2008 10:10:55 PM PST
+" Maintainer:		GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
+" Last Change:		Thu 02 Feb 2012 08:47:04 PM EST
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " The mail header is recognized starting with a "keyword:" line and ending
 " with an empty line or other line that can't be in the header. All lines of
 " the header are highlighted. Headers of quoted messages (quoted with >) are
@@ -89,7 +92,7 @@
 hi def link mailHeaderEmail	mailEmail
 hi def link mailEmail		Special
 hi def link mailURL		String
-hi def link mailSubject		LineNR
+hi def link mailSubject		Title
 hi def link mailQuoted1		Comment
 hi def link mailQuoted3		mailQuoted1
 hi def link mailQuoted5		mailQuoted1
@@ -104,3 +107,6 @@
 hi def link mailQuoteExp6	mailQuoted6
 
 let b:current_syntax = "mail"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/make.vim vim73/runtime/syntax/make.vim
--- vim73.orig/runtime/syntax/make.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/make.vim	2013-08-04 19:09:09.490613894 +0000
@@ -2,7 +2,7 @@
 " Language:	Makefile
 " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
 " URL:		http://www.fleiner.com/vim/syntax/make.vim
-" Last Change:	2008 Aug 04
+" Last Change:	2012 Oct 05
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,10 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
+
 " some special characters
 syn match makeSpecial	"^\s*[@+-]\+"
 syn match makeNextLine	"\\\n\s*"
@@ -25,8 +29,8 @@
 hi link makeOverride makeStatement
 hi link makeExport makeStatement
 
-" Koehler: catch unmatched define/endef keywords.  endef only matches it is by itself on a line
-syn region makeDefine start="^\s*define\s" end="^\s*endef\s*$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
+" catch unmatched define/endef keywords.  endef only matches it is by itself on a line, possibly followed by a commend
+syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
 
 " Microsoft Makefile specials
 syn case ignore
@@ -48,8 +52,8 @@
 
 " make targets
 " syn match makeSpecTarget	"^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>"
-syn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
 syn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 nextgroup=makeSource
+syn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
 
 syn region makeTarget	transparent matchgroup=makeTarget start="^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"rs=e-1 end=";"re=e-1,me=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands
 syn match makeTarget		"^[A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains=makeIdent,makeSpecTarget skipnl nextgroup=makeCommands,makeCommandError
@@ -134,4 +138,6 @@
 
 let b:current_syntax = "make"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/mallard.vim vim73/runtime/syntax/mallard.vim
--- vim73.orig/runtime/syntax/mallard.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/mallard.vim	2013-08-04 19:09:09.493947217 +0000
@@ -0,0 +1,37 @@
+" Vim syntax file
+" Language:    Mallard
+" Maintainer:  Jaromir Hradilek <jhradilek@gmail.com>
+" URL:         https://github.com/jhradilek/vim-syntax
+" Last Change: 11 February 2013
+" Description: A syntax file for the Mallard markup language according to
+"              Mallard 1.0 DRAFT as of 2013-02-11.
+
+if exists("b:current_syntax")
+  finish
+endif
+
+do Syntax xml
+syn cluster xmlTagHook add=mallardTagName
+syn spell toplevel
+syn case match
+
+syn keyword mallardTagName app cite cmd code col colgroup comment contained
+syn keyword mallardTagName credit desc em email example figure contained
+syn keyword mallardTagName file gui guiseq info input item key contained
+syn keyword mallardTagName keyseq license link links list listing contained
+syn keyword mallardTagName media name note output p page quote contained
+syn keyword mallardTagName revision screen section span steps contained
+syn keyword mallardTagName subtitle synopsis sys table tbody td contained
+syn keyword mallardTagName terms tfoot thead title tr tree var contained
+syn keyword mallardTagName years contained
+
+syn region mallardComment start="<comment\>" end="</comment>"me=e-10 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
+syn region mallardEmphasis start="<em\>" end="</em>"me=e-5 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
+syn region mallardTitle start="<title\>" end="</title>"me=e-8 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
+
+hi def link mallardComment  Comment
+hi def link mallardTagName  Statement
+hi def link mallardTitle    Title
+hi def mallardEmphasis term=italic cterm=italic gui=italic
+
+let b:current_syntax = "mallard"
diff -Naur vim73.orig/runtime/syntax/markdown.vim vim73/runtime/syntax/markdown.vim
--- vim73.orig/runtime/syntax/markdown.vim	2010-05-21 09:46:29.000000000 +0000
+++ vim73/runtime/syntax/markdown.vim	2013-08-04 19:09:09.500613864 +0000
@@ -2,50 +2,66 @@
 " Language:     Markdown
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:    *.markdown
-" Last Change:	2010 May 21
+" Last Change:  2013 May 30
 
 if exists("b:current_syntax")
   finish
 endif
 
+if !exists('main_syntax')
+  let main_syntax = 'markdown'
+endif
+
 runtime! syntax/html.vim
 unlet! b:current_syntax
 
+if !exists('g:markdown_fenced_languages')
+  let g:markdown_fenced_languages = []
+endif
+for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")')
+  if s:type =~ '\.'
+    let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
+  endif
+  exe 'syn include @markdownHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
+  unlet! b:current_syntax
+endfor
+unlet! s:type
+
 syn sync minlines=10
 syn case ignore
 
-syn match markdownValid '[<>]\S\@!'
+syn match markdownValid '[<>]\c[a-z/$!]\@!'
 syn match markdownValid '&\%(#\=\w*;\)\@!'
 
-syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock
+syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar
 
 syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule
-syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop
+syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError
 
-syn match markdownH1 ".\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule
-syn match markdownH2 ".\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule
+syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
+syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
 
 syn match markdownHeadingRule "^[=-]\+$" contained
 
-syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!"     end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!"    end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!"   end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!"  end="#*\s*$" keepend oneline contains=@markdownInline contained
-syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained
+syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!"     end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!"    end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!"   end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!"  end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
 
-syn match markdownBlockquote ">\s" contained nextgroup=@markdownBlock
+syn match markdownBlockquote ">\%(\s\|$\)" contained nextgroup=@markdownBlock
 
 syn region markdownCodeBlock start="    \|\t" end="$" contained
 
 " TODO: real nesting
-syn match markdownListMarker " \{0,4\}[-*+]\%(\s\+\S\)\@=" contained
-syn match markdownOrderedListMarker " \{0,4}\<\d\+\.\%(\s*\S\)\@=" contained
+syn match markdownListMarker "\%(\t\| \{0,4\}\)[-*+]\%(\s\+\S\)\@=" contained
+syn match markdownOrderedListMarker "\%(\t\| \{0,4}\)\<\d\+\.\%(\s\+\S\)\@=" contained
 
 syn match markdownRule "\* *\* *\*[ *]*$" contained
 syn match markdownRule "- *- *-[ -]*$" contained
 
-syn match markdownLineBreak "\s\{2,\}$"
+syn match markdownLineBreak " \{2,\}$"
 
 syn region markdownIdDeclaration matchgroup=markdownLinkDelimiter start="^ \{0,3\}!\=\[" end="\]:" oneline keepend nextgroup=markdownUrl skipwhite
 syn match markdownUrl "\S\+" nextgroup=markdownUrlTitle skipwhite contained
@@ -61,14 +77,23 @@
 
 syn region markdownItalic start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart
 syn region markdownItalic start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart
-syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart
-syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart
+syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic
+syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic
 syn region markdownBoldItalic start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart
 syn region markdownBoldItalic start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart
-syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" transparent keepend contains=markdownLineStart
+syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" keepend contains=markdownLineStart
 syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart
+syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*```.*$" end="^\s*```\ze\s*$" keepend
+
+if main_syntax ==# 'markdown'
+  for s:type in g:markdown_fenced_languages
+    exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*```'.matchstr(s:type,'[^=]*').'\>.*$" end="^\s*```\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g')
+  endfor
+  unlet! s:type
+endif
 
 syn match markdownEscape "\\[][\\`*_{}()#+.!-]"
+syn match markdownError "\w\@<=_\w\@="
 
 hi def link markdownH1                    htmlH1
 hi def link markdownH2                    htmlH2
@@ -99,7 +124,11 @@
 hi def link markdownCodeDelimiter         Delimiter
 
 hi def link markdownEscape                Special
+hi def link markdownError                 Error
 
 let b:current_syntax = "markdown"
+if main_syntax ==# 'markdown'
+  unlet main_syntax
+endif
 
 " vim:set sw=2:
diff -Naur vim73.orig/runtime/syntax/masm.vim vim73/runtime/syntax/masm.vim
--- vim73.orig/runtime/syntax/masm.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/masm.vim	2013-08-04 19:09:09.500613864 +0000
@@ -2,8 +2,8 @@
 " Language:	Microsoft Macro Assembler (80x86)
 " Orig Author:	Rob Brady <robb@datatone.com>
 " Maintainer:	Wu Yongwei <wuyongwei@gmail.com>
-" Last Change:	$Date: 2007/04/21 13:20:15 $
-" $Revision: 1.44 $
+" Last Change:	$Date: 2012/02/04 12:45:39 $
+" $Revision: 1.46 $
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -13,6 +13,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 
@@ -184,6 +187,12 @@
 syn keyword masmRegister	TR3 TR4 TR5 TR6 TR7
 syn match   masmRegister	"ST([0-7])"
 
+" x86-64 registers
+syn keyword masmRegister	RAX RBX RCX RDX RSI RDI RBP RSP
+syn keyword masmRegister	R8 R9 R10 R11 R12 R13 R14 R15
+syn keyword masmRegister	R8D R9D R10D R11D R12D R13D R14D R15D
+syn keyword masmRegister	R8W R9W R10W R11W R12W R13W R14W R15W
+syn keyword masmRegister	R8B R9B R10B R11B R12B R13B R14B R15B
 
 " Instruction prefixes
 syn keyword masmOpcode		LOCK REP REPE REPNE REPNZ REPZ
@@ -340,4 +349,7 @@
 
 let b:current_syntax = "masm"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/matlab.vim vim73/runtime/syntax/matlab.vim
--- vim73.orig/runtime/syntax/matlab.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/matlab.vim	2013-08-04 19:09:09.503947187 +0000
@@ -4,6 +4,8 @@
 " Credits:	Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
 "		Original author: Mario Eusebio
 " Last Change:	Wed Jan 13 11:12:34 CET 2010
+" 		sinh added to matlab implicit commands
+" Change History:
 " 		- 'global' and 'persistent' keyword are now recognized
 
 " For version 5.x: Clear all syntax items
@@ -68,7 +70,7 @@
 syn keyword matlabFunction		error eval function
 
 syn keyword matlabImplicit		abs acos atan asin cos cosh exp log prod sum
-syn keyword matlabImplicit		log10 max min sign sin sqrt tan reshape
+syn keyword matlabImplicit		log10 max min sign sin sinh sqrt tan reshape
 
 syn match matlabError	"-\=\<\d\+\.\d\+\.[^*/\\^]"
 syn match matlabError	"-\=\<\d\+\.\d\+[eEdD][-+]\=\d\+\.\([^*/\\^]\)"
diff -Naur vim73.orig/runtime/syntax/mma.vim vim73/runtime/syntax/mma.vim
--- vim73.orig/runtime/syntax/mma.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/mma.vim	2013-08-04 19:09:09.513947157 +0000
@@ -1,12 +1,12 @@
 " Vim syntax file
 " Language:     Mathematica
 " Maintainer:   steve layland <layland@wolfram.com>
-" Last Change:  Thu May 19 21:36:04 CDT 2005
+" Last Change:  2012 Feb 03 by Thilo Six
 " Source:       http://members.wri.com/layland/vim/syntax/mma.vim
 "               http://vim.sourceforge.net/scripts/script.php?script_id=1273
 " Id:           $Id: mma.vim,v 1.4 2006/04/14 20:40:38 vimboss Exp $
 " NOTE:
-" 
+"
 " Empty .m files will automatically be presumed as Matlab files
 " unless you have the following in your .vimrc:
 "
@@ -14,7 +14,7 @@
 "
 " I also recommend setting the default 'Comment' hilighting to something
 " other than the color used for 'Function', since both are plentiful in
-" most mathematica files, and they are often the same color (when using 
+" most mathematica files, and they are often the same color (when using
 " background=dark).
 "
 " Credits:
@@ -24,11 +24,11 @@
 "    from the Java vim syntax file by Claudio Fleiner.  Thanks!
 " o  Everything else written by steve <layland@wolfram.com>
 "
-" Bugs: 
-" o  Vim 6.1 didn't really have support for character classes 
+" Bugs:
+" o  Vim 6.1 didn't really have support for character classes
 "    of other named character classes.  For example, [\a\d]
 "    didn't work.  Therefore, a lot of this code uses explicit
-"    character classes instead: [0-9a-zA-Z] 
+"    character classes instead: [0-9a-zA-Z]
 "
 " TODO:
 "   folding
@@ -41,6 +41,9 @@
     finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Group Definitions:
 syntax cluster mmaNotes contains=mmaTodo,mmaFixme
 syntax cluster mmaComments contains=mmaComment,mmaFunctionComment,mmaItem,mmaFunctionTitle,mmaCommentStar
@@ -58,7 +61,7 @@
 syntax keyword mmaVariable True False None Automatic All Null C General
 
 " mathematical constants:
-syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher 
+syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher
 
 " stream data / atomic heads:
 syntax keyword mmaVariable Byte Character Expression Number Real String Word EndOfFile Integer Symbol
@@ -80,7 +83,7 @@
 syntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink Purple Red White Yellow
 
 " function attributes
-syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub 
+syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub
 
 " Comment Sections:
 "   this:
@@ -135,25 +138,25 @@
 
 " Patterns:
 "   Each pattern marker below can be Blank[] (_), BlankSequence[] (__)
-"   or BlankNullSequence[] (___).  Most examples below can also be 
+"   or BlankNullSequence[] (___).  Most examples below can also be
 "   combined, for example Pattern tests with Default values.
-"   
+"
 "   _Head                   Anonymous patterns
-"   name_Head 
+"   name_Head
 "   name:(_Head|_Head2)     Named patterns
-"    
+"
 "   _Head : val
 "   name:_Head:val          Default values
 "
-"   _Head?testQ, 
+"   _Head?testQ,
 "   _Head?(test[#]&)        Pattern tests
 "
 "   name_Head/;test[name]   Conditionals
-"   
+"
 "   _Head:.                 Predefined Default
 "
 "   .. ...                  Pattern Repeat
-   
+
 syntax match mmaPatternError "\%(_\{4,}\|)\s*&\s*)\@!\)" contained
 
 "pattern name:
@@ -172,7 +175,7 @@
 "   >= <= < >
 "   += -= *=
 "   /= ++ --    Math
-"   ^* 
+"   ^*
 "   -> :>       Rules
 "   @@ @@@      Apply
 "   /@ //@      Map
@@ -200,7 +203,7 @@
 syntax match mmaPureFunction "&"
 
 " Named Functions:
-" Since everything is pretty much a function, get this straight 
+" Since everything is pretty much a function, get this straight
 " from context
 syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
 syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
@@ -223,7 +226,7 @@
 syntax match mmaError "\%([/]{3,}\|[&:|+*?~-]\{3,}\|[.=]\{4,}\|_\@<=\.\{2,}\|`\{2,}\)" containedin=ALLBUT,@mmaComments,@mmaStrings
 
 " Punctuation:
-" things that shouldn't really be highlighted, or highlighted 
+" things that shouldn't really be highlighted, or highlighted
 " in they're own group if you _really_ want. :)
 "  ( ) { }
 " TODO - use Delimiter group?
@@ -251,9 +254,9 @@
 
 "function MmaFoldText()
 "    let line = getline(v:foldstart)
-"    
+"
 "    let lines = v:foldend-v:foldstart+1
-"    
+"
 "    let sub = substitute(line, '(\*\+|\*\+)|[-*_]\+', '', 'g')
 "
 "    if match(line, '(\*') != -1
@@ -264,7 +267,7 @@
 "
 "    return v:folddashes.' '.lines.' '.sub
 "endf
-    
+
 "this is slow for computing folds, but it does so accurately
 syntax sync fromstart
 
@@ -288,8 +291,8 @@
 		command -nargs=+ HiLink hi def link <args>
 	endif
 
-    " NOTE - the following links are not guaranteed to 
-    " look good under all colorschemes.  You might need to 
+    " NOTE - the following links are not guaranteed to
+    " look good under all colorschemes.  You might need to
     " :so $VIMRUNTIME/syntax/hitest.vim and tweak these to
     " look good in yours
 
@@ -323,3 +326,6 @@
 endif
 
 let b:current_syntax = "mma"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/mmix.vim vim73/runtime/syntax/mmix.vim
--- vim73.orig/runtime/syntax/mmix.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/mmix.vim	2013-08-04 19:09:09.513947157 +0000
@@ -1,12 +1,13 @@
 " Vim syntax file
 " Language:	MMIX
 " Maintainer:	Dirk Hsken, <huesken@informatik.uni-tuebingen.de>
-" Last Change:	Wed Apr 24 01:18:52 CEST 2002
+" Last Change:	2012 Jun 01
+" 		(Dominique Pelle added @Spell)
 " Filenames:	*.mms
 " URL: http://homepages.uni-tuebingen.de/student/dirk.huesken/vim/syntax/mmix.vim
 
 " Limitations:	Comments must start with either % or //
-"		(preferrably %, Knuth-Style)
+"		(preferably %, Knuth-Style)
 
 if version < 600
   syntax clear
@@ -23,7 +24,7 @@
 syn match decNumber		"[0-9]*"
 syn match octNumber		"0[0-7][0-7]\+"
 syn match hexNumber		"#[0-9a-fA-F]\+"
-syn region mmixString		start=+"+ skip=+\\"+ end=+"+
+syn region mmixString		start=+"+ skip=+\\"+ end=+"+ contains=@Spell
 syn match mmixChar		"'.'"
 
 " ...and more special MMIX stuff
@@ -40,9 +41,9 @@
 syn keyword mmixPseudo		is loc greg
 
 " comments
-syn match mmixComment		"%.*"
-syn match mmixComment		"//.*"
-syn match mmixComment		"^\*.*"
+syn match mmixComment		"%.*" contains=@Spell
+syn match mmixComment		"//.*" contains=@Spell
+syn match mmixComment		"^\*.*" contains=@Spell
 
 
 syn keyword mmixOpcode	trap fcmp fun feql fadd fix fsub fixu
diff -Naur vim73.orig/runtime/syntax/monk.vim vim73/runtime/syntax/monk.vim
--- vim73.orig/runtime/syntax/monk.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/monk.vim	2013-08-04 19:09:09.520613804 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: Monk (See-Beyond Technologies)
 " Maintainer: Mike Litherland <litherm@ccf.org>
-" Last Change: March 6, 2002
+" Last Change: 2012 Feb 03 by Thilo Six
 
 " This syntax file is good enough for my needs, but others
 " may desire more features.  Suggestions and bug reports
@@ -29,6 +29,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 " Fascist highlighting: everything that doesn't fit the rules is an error...
@@ -226,3 +229,6 @@
 endif
 
 let b:current_syntax = "monk"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/mrxvtrc.vim vim73/runtime/syntax/mrxvtrc.vim
--- vim73.orig/runtime/syntax/mrxvtrc.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/mrxvtrc.vim	2013-08-04 19:09:09.527280450 +0000
@@ -1,13 +1,16 @@
-" Created	: Wed 26 Apr 2006 01:20:53 AM CDT
-" Modified	: Mon 27 Aug 2007 12:10:37 PM PDT
-" Author	: Gautam Iyer <gi1242@users.sourceforge.net>
 " Description	: Vim syntax file for mrxvtrc (for mrxvt-0.5.0 and up)
+" Created	: Wed 26 Apr 2006 01:20:53 AM CDT
+" Modified	: Thu 02 Feb 2012 08:37:45 PM EST
+" Maintainer	: GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case match
 
 " Errors
@@ -274,3 +277,6 @@
 hi def link mrxvtrcSubwin	mrxvtrcStrVal
 
 let b:current_syntax = "mrxvtrc"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/msidl.vim vim73/runtime/syntax/msidl.vim
--- vim73.orig/runtime/syntax/msidl.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/msidl.vim	2013-08-04 19:09:09.527280450 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:     MS IDL (Microsoft dialect of Interface Description Language)
 " Maintainer:   Vadim Zeitlin <vadim@wxwindows.org>
-" Last Change:  2003 May 11
+" Last Change:  2012 Feb 12 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Misc basic
 syn match   msidlId		"[a-zA-Z][a-zA-Z0-9_]*"
 syn match   msidlUUID		"{\?[[:xdigit:]]\{8}-\([[:xdigit:]]\{4}-\)\{3}[[:xdigit:]]\{12}}\?"
@@ -89,4 +92,6 @@
 
 let b:current_syntax = "msidl"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vi: set ts=8 sw=4:
diff -Naur vim73.orig/runtime/syntax/muttrc.vim vim73/runtime/syntax/muttrc.vim
--- vim73.orig/runtime/syntax/muttrc.vim	2010-08-09 18:25:08.000000000 +0000
+++ vim73/runtime/syntax/muttrc.vim	2013-08-04 19:09:09.537280420 +0000
@@ -2,9 +2,9 @@
 " Language:	Mutt setup files
 " Original:	Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
 " Maintainer:	Kyle Wheeler <kyle-muttrc.vim@memoryhole.net>
-" Last Change:	9 Aug 2010
+" Last Change:	2 Feb 2012
 
-" This file covers mutt version 1.5.20 (and most of the mercurial tip)
+" This file covers mutt version 1.5.21 (and most of the mercurial tip)
 " Included are also a few features from 1.4.2.1
 
 " For version 5.x: Clear all syntax items
@@ -15,6 +15,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Set the keyword characters
 if version < 600
   set isk=@,48-57,_,-
@@ -22,6 +25,11 @@
   setlocal isk=@,48-57,_,-
 endif
 
+" handling optional variables
+if !exists("use_mutt_sidebar")
+  let use_mutt_sidebar=0
+endif
+
 syn match muttrcComment		"^# .*$" contains=@Spell
 syn match muttrcComment		"^#[^ ].*$"
 syn match muttrcComment		"^#$"
@@ -98,7 +106,7 @@
 syn region  muttrcKey		contained start=+'+ skip=+\\\\\|\\'+ end=+'+	contains=muttrcKeySpecial,muttrcKeyName
 syn match   muttrcKeyName	contained "\<f\%(\d\|10\)\>"
 syn match   muttrcKeyName	contained "\\[trne]"
-syn match   muttrcKeyName	contained "\c<\%(BackSpace\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
+syn match   muttrcKeyName	contained "\c<\%(BackSpace\|BackTab\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
 syn match   muttrcKeyName	contained "<F[0-9]\+>"
 
 syn keyword muttrcVarBool	skipwhite contained allow_8bit allow_ansi arrow_cursor ascii_chars askbcc askcc attach_split auto_tag autoedit beep beep_new nextgroup=muttrcSetBoolAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
@@ -207,6 +215,9 @@
 syn keyword muttrcVarBool	skipwhite contained invthread_received invtilde invuncollapse_jump invuse_8bitmime nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarBool	skipwhite contained invuse_domain invuse_envelope_from invuse_from invuse_idn invuse_ipv6 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarBool	skipwhite contained invuser_agent invwait_key invweed invwrap_search invwrite_bcc nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+if use_mutt_sidebar == 1
+    syn keyword muttrcVarBool skipwhite contained sidebar_visible sidebar_sort nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+endif
 
 syn keyword muttrcVarQuad	skipwhite contained abort_nosubject abort_unmodified bounce copy nextgroup=muttrcSetQuadAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarQuad	skipwhite contained crypt_verify_sig delete fcc_attach forward_edit honor_followup_to nextgroup=muttrcSetQuadAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
@@ -232,6 +243,9 @@
 syn keyword muttrcVarNum	skipwhite contained score_threshold_flag score_threshold_read search_context sendmail_wait sleep_time nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarNum	skipwhite contained smime_timeout ssl_min_dh_prime_bits timeout time_inc wrap wrapmargin nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarNum	skipwhite contained write_inc nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+if use_mutt_sidebar == 1
+    syn keyword muttrcVarNum skipwhite contained sidebar_width nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+endif
 
 syn match muttrcFormatErrors contained /%./
 
@@ -372,6 +386,9 @@
 syn keyword muttrcVarStr	contained skipwhite smtp_url smtp_authenticators smtp_pass sort sort_alias sort_aux nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarStr	contained skipwhite sort_browser spam_separator spoolfile ssl_ca_certificates_file ssl_client_cert nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
 syn keyword muttrcVarStr	contained skipwhite status_chars tmpdir to_chars tunnel visual nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+if use_mutt_sidebar == 1
+    syn keyword muttrcVarStr skipwhite contained sidebar_delim nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+endif
 
 " Present in 1.4.2.1 (pgp_create_traditional was a bool then)
 syn keyword muttrcVarBool	contained skipwhite imap_force_ssl noimap_force_ssl invimap_force_ssl nextgroup=muttrcSetBoolAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
@@ -417,7 +434,10 @@
 syn keyword muttrcAlternateKeyword contained alternates unalternates
 syn region muttrcAlternatesLine keepend start=+^\s*\%(un\)\?alternates\s+ skip=+\\$+ end=+$+ contains=muttrcAlternateKeyword,muttrcGroupDef,muttrcRXPat,muttrcUnHighlightSpace,muttrcComment
 
-syn match muttrcVariable	contained "\\\@<!\$[a-zA-Z_-]\+"
+" muttrcVariable includes a prefix because partial strings are considered
+" valid.
+syn match muttrcVariable	contained "\\\@<![a-zA-Z_-]*\$[a-zA-Z_-]\+" contains=muttrcVariableInner
+syn match muttrcVariableInner	contained "\$[a-zA-Z_-]\+"
 syn match muttrcEscapedVariable	contained "\\\$[a-zA-Z_-]\+"
 
 syn match muttrcBadAction	contained "[^<>]\+" contains=muttrcEmail
@@ -450,6 +470,9 @@
 syn match muttrcFunction	contained "\<collapse-\%(parts\|thread\|all\)\>"
 syn match muttrcFunction	contained "\<view-\%(attach\|attachments\|file\|mailcap\|name\|text\)\>"
 syn match muttrcFunction	contained "\<\%(backspace\|backward-char\|bol\|bottom\|bottom-page\|buffy-cycle\|clear-flag\|complete\%(-query\)\?\|copy-file\|create-alias\|detach-file\|eol\|exit\|extract-keys\|\%(imap-\)\?fetch-mail\|forget-passphrase\|forward-char\|group-reply\|help\|ispell\|jump\|limit\|list-reply\|mail\|mail-key\|mark-as-new\|middle-page\|new-mime\|noop\|pgp-menu\|query\|query-append\|quit\|quote-char\|read-subthread\|redraw-screen\|refresh\|rename-file\|reply\|select-new\|set-flag\|shell-escape\|skip-quoted\|sort\|subscribe\|sync-mailbox\|top\|top-page\|transpose-chars\|unsubscribe\|untag-pattern\|verify-key\|what-key\|write-fcc\)\>"
+if use_mutt_sidebar == 1
+    syn match muttrcFunction    contained "\<sidebar-\%(prev\|next\|open\|scroll-up\|scroll-down\)"
+endif
 syn match muttrcAction		contained "<[^>]\{-}>" contains=muttrcBadAction,muttrcFunction,muttrcKeyName
 
 syn keyword muttrcCommand	set     skipwhite nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
@@ -523,7 +546,7 @@
 syn match muttrcSimplePat contained "!\?\^\?[~][dr]\s*\%(\%(-\?[0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)\|\%(\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)-\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)\?\)\?\)\|\%([<>=][0-9]\+[ymwd]\)\|\%(`[^`]\+`\)\|\%(\$[a-zA-Z0-9_-]\+\)\)" contains=muttrcShellString,muttrcVariable
 syn match muttrcSimplePat contained "!\?\^\?[~][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatRXContainer
 syn match muttrcSimplePat contained "!\?\^\?[%][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
-syn match muttrcSimplePat contained "!\?\^\?[=][bh]\s*" nextgroup=muttrcSimplePatString
+syn match muttrcSimplePat contained "!\?\^\?[=][bcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
 syn region muttrcSimplePat contained keepend start=+!\?\^\?[~](+ end=+)+ contains=muttrcSimplePat
 "syn match muttrcSimplePat contained /'[^~=%][^']*/ contains=muttrcRXString
 syn region muttrcSimplePatString contained keepend start=+"+ end=+"+ skip=+\\"+
@@ -557,9 +580,12 @@
 syn region muttrcColorRXPat	contained start=+\s*"+ skip=+\\"+ end=+"\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
 syn keyword muttrcColorField	contained attachment body bold error hdrdefault header index indicator markers message normal quoted search signature status tilde tree underline
 syn match   muttrcColorField	contained "\<quoted\d\=\>"
+if use_mutt_sidebar == 1
+    syn keyword muttrcColorField contained sidebar_new
+endif
 syn keyword muttrcColor	contained black blue cyan default green magenta red white yellow
 syn keyword muttrcColor	contained brightblack brightblue brightcyan brightdefault brightgreen brightmagenta brightred brightwhite brightyellow
-syn match   muttrcColor	contained "\<\%(bright\)\=color\d\{1,2}\>"
+syn match   muttrcColor	contained "\<\%(bright\)\=color\d\{1,3}\>"
 " Now for the structure of the color line
 syn match muttrcColorRXNL	contained skipnl "\s*\\$" nextgroup=muttrcColorRXPat,muttrcColorRXNL
 syn match muttrcColorBG 	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL
@@ -641,7 +667,7 @@
   HiLink muttrcSetQuadAssignment	Boolean
   HiLink muttrcSetStrAssignment	String
   HiLink muttrcEmail		Special
-  HiLink muttrcVariable		Special
+  HiLink muttrcVariableInner	Special
   HiLink muttrcEscapedVariable	String
   HiLink muttrcHeader		Type
   HiLink muttrcKeySpecial	SpecialChar
@@ -765,4 +791,6 @@
 
 let b:current_syntax = "muttrc"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 "EOF	vim: ts=8 noet tw=100 sw=8 sts=0 ft=vim
diff -Naur vim73.orig/runtime/syntax/nasm.vim vim73/runtime/syntax/nasm.vim
--- vim73.orig/runtime/syntax/nasm.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/nasm.vim	2013-08-04 19:09:09.540613743 +0000
@@ -1,9 +1,10 @@
 " Vim syntax file
 " Language:	NASM - The Netwide Assembler (v0.98)
-" Maintainer:	Manuel M.H. Stol	<mmh.stol@gmx.net>
-" Last Change:	2003 May 11
-" Vim URL:	http://www.vim.org/lang.html
-" NASM Home:	http://www.cryogen.com/Nasm/
+" Maintainer:	Andriy Sokolov	<andriy145@gmail.com>
+" Original Author:	Manuel M.H. Stol	<Manuel.Stol@allieddata.nl>
+" Former Maintainer:	Manuel M.H. Stol	<Manuel.Stol@allieddata.nl>
+" Last Change:	2012 Feb 7
+" NASM Home:	http://www.nasm.us/
 
 
 
@@ -47,14 +48,14 @@
 "  in NASM: 'Everything is a Label'
 "  Definition Label = label defined by %[i]define or %[i]assign
 "  Identifier Label = label defined as first non-keyword on a line or %[i]macro
-syn match   nasmLabelError	"$\=\(\d\+\K\|[#\.@]\|\$\$\k\)\k*\>"
+syn match   nasmLabelError	"$\=\(\d\+\K\|[#.@]\|\$\$\k\)\k*\>"
 syn match   nasmLabel		"\<\(\h\|[?@]\)\k*\>"
 syn match   nasmLabel		"[\$\~]\(\h\|[?@]\)\k*\>"lc=1
 "  Labels starting with one or two '.' are special
 syn match   nasmLocalLabel	"\<\.\(\w\|[#$?@~]\)\k*\>"
 syn match   nasmLocalLabel	"\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1
 if !exists("nasm_no_warn")
-  syn match  nasmLabelWarn	"\<\~\=\$\=[_\.][_\.\~]*\>"
+  syn match  nasmLabelWarn	"\<\~\=\$\=[_.][_.\~]*\>"
 endif
 if exists("nasm_loose_syntax")
   syn match   nasmSpecialLabel	"\<\.\.@\k\+\>"
@@ -91,7 +92,6 @@
 syn match   nasmNumberError	"\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
 
 
-
 " Netwide Assembler Storage Directives:
 "  Storage types
 syn keyword nasmTypeError	DF EXTRN FWORD RESF TBYTE
@@ -160,6 +160,7 @@
 "syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro
 "syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
 syn region  nasmInMacPreConDef	contained transparent matchgroup=nasmInMacPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(ctx\|def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(ctx\|def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnMacro,nasmInMacPreCondit,nasmInPreCondit
+" Todo: allow STRUC/ISTRUC to be used inside preprocessor conditional block
 syn match   nasmInMacPreCondit	contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
 syn match   nasmInMacPreCondit	contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
 syn match   nasmInMacPreCondit	contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
@@ -179,7 +180,7 @@
   syn region nasmPreConditDef	transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon
   syn match  nasmCtxPreProc	"^\s*%pop\>"hs=e-3
   if exists("nasm_loose_syntax")
-    syn match   nasmCtxLocLabel	"%$\+\(\w\|[#\.?@~]\)\k*\>"
+    syn match   nasmCtxLocLabel	"%$\+\(\w\|[#.?@~]\)\k*\>"
   else
     syn match   nasmCtxLocLabel	"%$\+\(\h\|[?@]\)\k*\>"
   endif
@@ -210,15 +211,17 @@
 syn cluster nasmGrpPreCondits	contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel
 
 "  Other pre-processor statements
-syn match   nasmPreProc		"^\s*%rep\>"hs=e-3
+syn match   nasmPreProc		"^\s*%\(rep\|use\)\>"hs=e-3
 syn match   nasmPreProc		"^\s*%line\>"hs=e-4
-syn match   nasmPreProc		"^\s*%\(clear\|error\)\>"hs=e-5
-syn match   nasmPreProc		"^\s*%endrep\>"hs=e-6
-syn match   nasmPreProc		"^\s*%exitrep\>"hs=e-7
+syn match   nasmPreProc		"^\s*%\(clear\|error\|fatal\)\>"hs=e-5
+syn match   nasmPreProc		"^\s*%\(endrep\|strlen\|substr\)\>"hs=e-6
+syn match   nasmPreProc		"^\s*%\(exitrep\|warning\)\>"hs=e-7
 syn match   nasmDefine		"^\s*%undef\>"hs=e-5
 syn match   nasmDefine		"^\s*%\(assign\|define\)\>"hs=e-6
 syn match   nasmDefine		"^\s*%i\(assign\|define\)\>"hs=e-7
+syn match   nasmDefine		"^\s*%unmacro\>"hs=e-7
 syn match   nasmInclude		"^\s*%include\>"hs=e-7
+" Todo: Treat the line tail after %fatal, %error, %warning as text
 
 "  Multiple pre-processor instructions on single line detection (obsolete)
 "syn match   nasmPreProcError	+^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+
@@ -231,6 +234,7 @@
 syn match   nasmGen08Register	"\<[A-D][HL]\>"
 syn match   nasmGen16Register	"\<\([A-D]X\|[DS]I\|[BS]P\)\>"
 syn match   nasmGen32Register	"\<E\([A-D]X\|[DS]I\|[BS]P\)\>"
+syn match   nasmGen64Register	"\<R\([A-D]X\|[DS]I\|[BS]P\|[89]\|1[0-5]\|[89][WD]\|1[0-5][WD]\)\>"
 syn match   nasmSegRegister	"\<[C-GS]S\>"
 syn match   nasmSpcRegister	"\<E\=IP\>"
 syn match   nasmFpuRegister	"\<ST\o\>"
@@ -244,10 +248,10 @@
 syn match   nasmRegisterError	"\<ST\((\d)\|[8-9]\>\)"
 syn match   nasmRegisterError	"\<E\([A-D][HL]\|[C-GS]S\)\>"
 "  Memory reference operand (address):
-syn match   nasmMemRefError	"[\[\]]"
+syn match   nasmMemRefError	"[[\]]"
 syn cluster nasmGrpCntnMemRef	contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError
-syn match   nasmInMacMemRef	contained "\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
-syn match   nasmMemReference	"\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
+syn match   nasmInMacMemRef	contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
+syn match   nasmMemReference	"\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
 
 
 
@@ -298,20 +302,21 @@
 syn match   nasmStdInstruction	"\<POP\>"
 syn keyword nasmStdInstruction	AAA AAD AAM AAS ADC ADD AND
 syn keyword nasmStdInstruction	BOUND BSF BSR BSWAP BT[C] BTR BTS
-syn keyword nasmStdInstruction	CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW
-syn keyword nasmStdInstruction	CMPXCHG CMPXCHG8B CPUID CWD[E]
+syn keyword nasmStdInstruction	CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW CMPSQ
+syn keyword nasmStdInstruction	CMPXCHG CMPXCHG8B CPUID CWD[E] CQO
 syn keyword nasmStdInstruction	DAA DAS DEC DIV ENTER
-syn keyword nasmStdInstruction	IDIV IMUL INC INT[O] IRET[D] IRETW
+syn keyword nasmStdInstruction	IDIV IMUL INC INT[O] IRET[D] IRETW IRETQ
 syn keyword nasmStdInstruction	JCXZ JECXZ JMP
-syn keyword nasmStdInstruction	LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD
+syn keyword nasmStdInstruction	LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD LODSQ
 syn keyword nasmStdInstruction	LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS
-syn keyword nasmStdInstruction	MOVSB MOVSD MOVSW MOVSX MOVZX MUL NEG NOP NOT
-syn keyword nasmStdInstruction	OR POPA[D] POPAW POPF[D] POPFW
-syn keyword nasmStdInstruction	PUSH[AD] PUSHAW PUSHF[D] PUSHFW
+syn keyword nasmStdInstruction	MOVSB MOVSD MOVSW MOVSX MOVSQ MOVZX MUL NEG NOP NOT
+syn keyword nasmStdInstruction	OR POPA[D] POPAW POPF[D] POPFW POPFQ
+syn keyword nasmStdInstruction	PUSH[AD] PUSHAW PUSHF[D] PUSHFW PUSHFQ
 syn keyword nasmStdInstruction	RCL RCR RETF RET[N] ROL ROR
 syn keyword nasmStdInstruction	SAHF SAL SAR SBB SCASB SCASD SCASW
-syn keyword nasmStdInstruction	SHL[D] SHR[D] STC STD STOSB STOSD STOSW SUB
+syn keyword nasmStdInstruction	SHL[D] SHR[D] STC STD STOSB STOSD STOSW STOSQ SUB
 syn keyword nasmStdInstruction	TEST XADD XCHG XLATB XOR
+syn keyword nasmStdInstruction	LFENCE MFENCE SFENCE
 
 
 " System Instructions: (usually privileged)
diff -Naur vim73.orig/runtime/syntax/natural.vim vim73/runtime/syntax/natural.vim
--- vim73.orig/runtime/syntax/natural.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/natural.vim	2013-08-04 19:09:09.543947067 +0000
@@ -1,9 +1,9 @@
 " Vim syntax file
 "
 " Language:	NATURAL
-" Version:	2.1.0.3
+" Version:	2.1.0.5
 " Maintainer:	Marko von Oppen <marko@von-oppen.com>
-" Last Changed:	2008-07-29 01:40:52
+" Last Changed:	2012-02-05 18:50:43
 " Support:	http://www.von-oppen.com/
 
 " For version 5.x: Clear all syntax items
@@ -17,6 +17,9 @@
   setlocal iskeyword+=-,*,#,+,_,/
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " NATURAL is case insensitive
 syntax case ignore
 
@@ -206,4 +209,7 @@
 
 let b:current_syntax = "natural"
 
-" vim:set ts=8 sw=8 noet ft=vim:
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:set ts=8 sw=8 noet ft=vim list:
diff -Naur vim73.orig/runtime/syntax/netrw.vim vim73/runtime/syntax/netrw.vim
--- vim73.orig/runtime/syntax/netrw.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/netrw.vim	2013-08-04 19:09:09.547280390 +0000
@@ -1,7 +1,7 @@
 " Language   : Netrw Remote-Directory Listing Syntax
 " Maintainer : Charles E. Campbell, Jr.
-" Last change: Jan 14, 2009
-" Version    : 16
+" Last change: Dec 18, 2012
+" Version    : 17
 " ---------------------------------------------------------------------
 
 " Syntax Clearing: {{{1
@@ -22,7 +22,7 @@
 syn match  netrwDir		"\%(\S\+ \)*\S\+/"					contains=netrwClassify,@NoSpell
 syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"	skipwhite	contains=netrwDateSep,@NoSpell	nextgroup=netrwTime
 syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  			contains=netrwClassify,@NoSpell
-syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" 			contains=netrwClassify,@NoSpell
+syn match  netrwExe		"\%(\S\+ \)*\S*[^~]\*\ze\%(\s\{2,}\|$\)" 		contains=netrwClassify,@NoSpell
 syn match  netrwTreeBar		"^\%([-+|] \)\+"					contains=netrwTreeBarSpace	nextgroup=@netrwTreeGroup
 syn match  netrwTreeBarSpace	" "					contained
 
@@ -56,14 +56,17 @@
  if has("unix")
   syn match netrwCoreDump	"\<core\%(\.\d\+\)\=\>"				contains=netrwTreeBar,@NoSpell
  endif
+ syn match netrwLex		"\(\S\+ \)*\S\+\.\%(l\|lex\)\>"			contains=netrwTreeBar,@NoSpell
+ syn match netrwYacc		"\(\S\+ \)*\S\+\.y\>"				contains=netrwTreeBar,@NoSpell
  syn match netrwData		"\(\S\+ \)*\S\+\.dat\>"				contains=netrwTreeBar,@NoSpell
- syn match netrwHdr		"\(\S\+ \)*\S\+\.h\>"				contains=netrwTreeBar,@NoSpell
+ syn match netrwDoc		"\(\S\+ \)*\S\+\.\%(doc\|txt\|pdf\|ps\)"	contains=netrwTreeBar,@NoSpell
+ syn match netrwHdr		"\(\S\+ \)*\S\+\.\%(h\|hpp\)\>"			contains=netrwTreeBar,@NoSpell
  syn match netrwLib		"\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"		contains=netrwTreeBar,@NoSpell
  syn match netrwMakeFile	"\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"	contains=netrwTreeBar,@NoSpell
  syn match netrwObj		"\(\S\+ \)*\S*\.\%(o\|obj\)\>"			contains=netrwTreeBar,@NoSpell
- syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar,@NoSpell
  syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar,@NoSpell
- syn match netrwTilde		"\(\S\+ \)*\S\+\~\>"				contains=netrwTreeBar,@NoSpell
+ syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar,@NoSpell
+ syn match netrwTilde		"\(\S\+ \)*\S\+\~\*\=\>"			contains=netrwTreeBar,@NoSpell
  syn match netrwTmp		"\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"	contains=netrwTreeBar,@NoSpell
 endif
 
@@ -88,19 +91,22 @@
  hi default link netrwTimeSep	netrwDateSep
  hi default link netrwComma	netrwComment
  hi default link netrwHide	netrwComment
- hi default link netrwMarkFile	Identifier
+ hi default link netrwMarkFile	TabLineSel
 
  " special syntax highlighting (see :he g:netrw_special_syntax)
  hi default link netrwBak	NonText
  hi default link netrwCompress	Folded
  hi default link netrwCoreDump	WarningMsg
  hi default link netrwData	DiffChange
+ hi default link netrwHdr	netrwPlain
+ hi default link netrwLex	netrwPlain
  hi default link netrwLib	DiffChange
  hi default link netrwMakefile	DiffChange
  hi default link netrwObj	Folded
  hi default link netrwTilde	Folded
  hi default link netrwTmp	Folded
  hi default link netrwTags	Folded
+ hi default link netrwYacc	netrwPlain
 endif
 
 " Current Syntax: {{{1
diff -Naur vim73.orig/runtime/syntax/ninja.vim vim73/runtime/syntax/ninja.vim
--- vim73.orig/runtime/syntax/ninja.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/ninja.vim	2013-08-04 19:09:09.547280390 +0000
@@ -0,0 +1,81 @@
+" ninja build file syntax.
+" Language: ninja build file as described at
+"           http://martine.github.com/ninja/manual.html
+" Version: 1.3
+" Last Change: 2013/04/16
+" Maintainer: Nicolas Weber <nicolasweber@gmx.de>
+" Version 1.3 of this script is in the upstream vim repository and will be
+" included in the next vim release. If you change this, please send your change
+" upstream.
+
+" ninja lexer and parser are at
+" https://github.com/martine/ninja/blob/master/src/lexer.in.cc
+" https://github.com/martine/ninja/blob/master/src/manifest_parser.cc
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn case match
+
+syn match ninjaComment /#.*/  contains=@Spell
+
+" Toplevel statements are the ones listed here and
+" toplevel variable assignments (ident '=' value).
+" lexer.in.cc, ReadToken() and manifest_parser.cc, Parse()
+syn match ninjaKeyword "^build\>"
+syn match ninjaKeyword "^rule\>"
+syn match ninjaKeyword "^pool\>"
+syn match ninjaKeyword "^default\>"
+syn match ninjaKeyword "^include\>"
+syn match ninjaKeyword "^subninja\>"
+
+" Both 'build' and 'rule' begin a variable scope that ends
+" on the first line without indent. 'rule' allows only a
+" limited set of magic variables, 'build' allows general
+" let assignments.
+" manifest_parser.cc, ParseRule()
+syn region ninjaRule start="^rule" end="^\ze\S" contains=ALL transparent
+syn keyword ninjaRuleCommand contained command deps depfile description generator
+                                     \ pool restat rspfile rspfile_content
+
+syn region ninjaPool start="^pool" end="^\ze\S" contains=ALL transparent
+syn keyword ninjaPoolCommand contained depth
+
+" Strings are parsed as follows:
+" lexer.in.cc, ReadEvalString()
+" simple_varname = [a-zA-Z0-9_-]+;
+" varname = [a-zA-Z0-9_.-]+;
+" $$ -> $
+" $\n -> line continuation
+" '$ ' -> escaped space
+" $simple_varname -> variable
+" ${varname} -> variable
+
+syn match   ninjaWrapLineOperator "\$$"
+syn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
+syn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}"
+
+" operators are:
+" variable assignment =
+" rule definition :
+" implicit dependency |
+" order-only dependency ||
+syn match ninjaOperator "\(=\|:\||\|||\)\ze\s"
+
+hi def link ninjaComment Comment
+hi def link ninjaKeyword Keyword
+hi def link ninjaRuleCommand Statement
+hi def link ninjaPoolCommand Statement
+hi def link ninjaWrapLineOperator ninjaOperator
+hi def link ninjaOperator Operator
+hi def link ninjaSimpleVar ninjaVar
+hi def link ninjaVar Identifier
+
+let b:current_syntax = "ninja"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/nroff.vim vim73/runtime/syntax/nroff.vim
--- vim73.orig/runtime/syntax/nroff.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/nroff.vim	2013-08-04 19:09:09.550613713 +0000
@@ -1,8 +1,8 @@
 " VIM syntax file
 " Language:	nroff/groff
-" Maintainer:	Alejandro Lpez-Valencia <dradul@yahoo.com>
-" URL:		http://dradul.tripod.com/vim
-" Last Change:	2006 Apr 14
+" Maintainer:	Pedro Alejandro Lpez-Valencia <palopezv@gmail.com>
+" URL:		http://vorbote.wordpress.com/
+" Last Change:	2012 Feb 2
 "
 " {{{1 Acknowledgements
 "
@@ -31,6 +31,9 @@
 	finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 "
 " {{{1 plugin settings...
 "
@@ -256,4 +259,6 @@
 
 let b:current_syntax = "nroff"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim600: set fdm=marker fdl=2:
diff -Naur vim73.orig/runtime/syntax/objc.vim vim73/runtime/syntax/objc.vim
--- vim73.orig/runtime/syntax/objc.vim	2010-05-15 11:03:55.000000000 +0000
+++ vim73/runtime/syntax/objc.vim	2013-08-04 19:09:09.557280360 +0000
@@ -1,110 +1,437 @@
 " Vim syntax file
-" Language:	    Objective C
-" Maintainer:	    Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
-" Ex-maintainer:    Anthony Hodsdon <ahodsdon@fastmail.fm>
-" First Author:	    Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de>
-" Last Change:	    2007 Feb 21
-
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
-  syntax clear
-elseif exists("b:current_syntax")
+" Language:     Objective-C
+" Maintainer:   Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
+" Last Change:  2013 Jun 13
+" Remark:       Modern Objective-C Edition
+
+""" Preparation for loading ObjC stuff
+if exists("b:current_syntax")
   finish
 endif
-
 if &filetype != 'objcpp'
-  " Read the C syntax to start with
-  if version < 600
-    source <sfile>:p:h/c.vim
-  else
-    runtime! syntax/c.vim
-  endif
+  syn clear
+  runtime! syntax/c.vim
 endif
+let s:cpo_save = &cpo
+set cpo&vim
+
+""" ObjC proper stuff follows...
+
+syn keyword objcPreProcMacro __OBJC__ __OBJC2__ __clang__
 
-" Objective C extentions follow below
-"
-" NOTE: Objective C is abbreviated to ObjC/objc
-" and uses *.h, *.m as file extensions!
-
-
-" ObjC keywords, types, type qualifiers etc.
-syn keyword objcStatement	self super _cmd
-syn keyword objcType		id Class SEL IMP BOOL
-syn keyword objcTypeModifier	bycopy in out inout oneway
-syn keyword objcConstant	nil Nil
-
-" Match the ObjC #import directive (like C's #include)
-syn region objcImported display contained start=+"+  skip=+\\\\\|\\"+  end=+"+
-syn match  objcImported display contained "<[-_0-9a-zA-Z.\/]*>"
-syn match  objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
-
-" Match the important ObjC directives
-syn match  objcScopeDecl    "@public\|@private\|@protected"
-syn match  objcDirective    "@interface\|@implementation"
-syn match  objcDirective    "@class\|@end\|@defs"
-syn match  objcDirective    "@encode\|@protocol\|@selector"
-syn match  objcDirective    "@try\|@catch\|@finally\|@throw\|@synchronized"
-
-" Match the ObjC method types
-"
-" NOTE: here I match only the indicators, this looks
-" much nicer and reduces cluttering color highlightings.
-" However, if you prefer full method declaration matching
-" append .* at the end of the next two patterns!
-"
-syn match objcInstMethod    "^\s*-\s*"
-syn match objcFactMethod    "^\s*+\s*"
-
-" To distinguish from a header inclusion from a protocol list.
-syn match objcProtocol display "<[_a-zA-Z][_a-zA-Z0-9]*>" contains=objcType,cType,Type
-
-
-" To distinguish labels from the keyword for a method's parameter.
-syn region objcKeyForMethodParam display
-    \ start="^\s*[_a-zA-Z][_a-zA-Z0-9]*\s*:\s*("
-    \ end=")\s*[_a-zA-Z][_a-zA-Z0-9]*"
-    \ contains=objcType,objcTypeModifier,cType,cStructure,cStorageClass,Type
+" Defined Types
+syn keyword objcPrincipalType id Class SEL IMP BOOL instancetype
+syn keyword objcUsefulTerm nil Nil NO YES
+
+" Preprocessor Directives
+syn region objcImported display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn match objcImported display contained "<[^>]*>"
+syn match objcImport display "^\s*\(%:\|#\)\s*import\>\s*["<]" contains=objcImported
+
+" ObjC Compiler Directives
+syn match objcObjDef display /@interface\>\|@implementation\>\|@end\>\|@class\>/
+syn match objcProtocol display /@protocol\>\|@optional\>\|@required\>/
+syn match objcProperty display /@property\>\|@synthesize\>\|@dynamic\>/
+syn match objcIvarScope display /@private\>\|@protected\>\|@public\>/
+syn match objcInternalRep display /@selector\>\|@encode\>/
+syn match objcException display /@try\>\|@throw\>\|@catch\|@finally\>/
+syn match objcThread display /@synchronized\>/
+syn match objcPool display /@autoreleasepool\>/
+syn match objcModuleImport display /@import\>/
 
-" Objective-C Constant Strings
-syn match objcSpecial display "%@" contained
+" ObjC Constant Strings
+syn match objcSpecial display contained "%@"
 syn region objcString start=+\(@"\|"\)+ skip=+\\\\\|\\"+ end=+"+ contains=cFormat,cSpecial,objcSpecial
 
-" Objective-C Message Expressions
-syn region objcMessage display start="\[" end="\]" contains=objcMessage,objcStatement,objcType,objcTypeModifier,objcString,objcConstant,objcDirective,cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,Type
+" ObjC Hidden Arguments
+syn keyword objcHiddenArgument self _cmd super
 
-syn cluster cParenGroup add=objcMessage
-syn cluster cPreProcGroup add=objcMessage
+" ObjC Type Qualifiers for Blocks
+syn keyword objcBlocksQualifier __block
+" ObjC Type Qualifiers for Object Lifetime
+syn keyword objcObjectLifetimeQualifier __strong __weak __unsafe_unretained __autoreleasing
+" ObjC Type Qualifiers for Toll-Free Bridge
+syn keyword objcTollFreeBridgeQualifier __bridge __bridge_retained __bridge_transfer
+
+" ObjC Type Qualifiers for Remote Messaging
+syn match objcRemoteMessagingQualifier display contained /\((\s*oneway\s\+\|(\s*in\s\+\|(\s*out\s\+\|(\s*inout\s\+\|(\s*bycopy\s\+\(in\(out\)\?\|out\)\?\|(\s*byref\s\+\(in\(out\)\?\|out\)\?\)/hs=s+1
+
+" shorthand
+syn cluster objcTypeQualifier contains=objcBlocksQualifier,objcObjectLifetimeQualifier,objcTollFreeBridgeQualifier,objcRemoteMessagingQualifier
+
+" ObjC Fast Enumeration
+syn match objcFastEnumKeyword display /\sin\(\s\|$\)/
+
+" ObjC Literal Syntax
+syn match objcLiteralSyntaxNumber display /@\(YES\>\|NO\>\|\d\|-\|+\)/ contains=cNumber,cFloat,cOctal
+syn match objcLiteralSyntaxSpecialChar display /@'/ contains=cSpecialCharacter
+syn match objcLiteralSyntaxChar display /@'[^\\]'/ 
+syn match objcLiteralSyntaxOp display /@\((\|\[\|{\)/me=e-1,he=e-1
+
+" ObjC Declared Property Attributes
+syn match objDeclPropAccessorNameAssign display /\s*=\s*/ contained
+syn region objcDeclPropAccessorName display start=/\(getter\|setter\)/ end=/\h\w*/ contains=objDeclPropAccessorNameAssign
+syn keyword objcDeclPropAccessorType readonly readwrite contained
+syn keyword objcDeclPropAssignSemantics assign retain copy contained
+syn keyword objcDeclPropAtomicity nonatomic contained
+syn keyword objcDeclPropARC strong weak contained
+syn region objcDeclProp display transparent keepend start=/@property\s*(/ end=/)/ contains=objcProperty,objcDeclPropAccessorName,objcDeclPropAccessorType,objcDeclPropAssignSemantics,objcDeclPropAtomicity,objcDeclPropARC
+
+" To distinguish colons in methods and dictionaries from those in C's labels.
+syn match objcColon display /^\s*\h\w*\s*\:\(\s\|.\)/me=e-1,he=e-1
+
+" To distinguish a protocol list from system header files
+syn match objcProtocolList display /<\h\w*\(\s*,\s*\h\w*\)*>/ contains=objcPrincipalType,cType,Type
+
+" shorthand
+syn cluster objcCEntities contains=cType,cStructure,cStorageClass,cString,cCharacter,cSpecialCharacter,cNumbers,cConstant,cOperator,cComment,cCommentL,cStatement,cLabel,cConditional,cRepeat
+syn cluster objcObjCEntities contains=objcHiddenArgument,objcPrincipalType,objcString,objcUsefulTerm,objcProtocol,objcInternalRep,objcException,objcThread,objcPool,objcModuleImport,@objcTypeQualifier,objcLiteralSyntaxNumber,objcLiteralSyntaxOp,objcLiteralSyntaxChar,objcLiteralSyntaxSpecialChar,objcProtocolList,objcColon,objcFastEnumKeyword,objcType,objcClass,objcMacro,objcEnum,objcEnumValue,objcExceptionValue,objcNotificationValue,objcConstVar,objcPreProcMacro
 
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_objc_syntax_inits")
-  if version < 508
-    let did_objc_syntax_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-
-  HiLink objcImport		Include
-  HiLink objcImported		cString
-  HiLink objcTypeModifier	objcType
-  HiLink objcType		Type
-  HiLink objcScopeDecl		Statement
-  HiLink objcInstMethod		Function
-  HiLink objcFactMethod		Function
-  HiLink objcStatement		Statement
-  HiLink objcDirective		Statement
-  HiLink objcKeyForMethodParam	None
-  HiLink objcString		cString
-  HiLink objcSpecial		Special
-  HiLink objcProtocol		None
-  HiLink objcConstant		cConstant
+" Objective-C Message Expressions
+syn region objcMethodCall start=/\[/ end=/\]/ contains=objcMethodCall,objcBlocks,@objcObjCEntities,@objcCEntities
 
-  delcommand HiLink
-endif
+" To distinguish class method and instance method
+syn match objcInstanceMethod display /^s*-\s*/
+syn match objcClassMethod display /^s*+\s*/
+
+" ObjC Blocks
+syn region objcBlocks start=/\(\^\s*([^)]\+)\s*{\|\^\s*{\)/ end=/}/ contains=objcBlocks,objcMethodCall,@objcObjCEntities,@objcCEntities
+
+syn cluster cParenGroup add=objcMethodCall
+syn cluster cPreProcGroup add=objcMethodCall
+
+""" Foundation Framework
+syn match objcClass /Protocol\s*\*/me=s+8,he=s+8
+
+"""""""""""""""""
+" NSObjCRuntime.h
+syn keyword objcType NSInteger NSUInteger NSComparator
+syn keyword objcEnum NSComparisonResult
+syn keyword objcEnumValue NSOrderedAscending NSOrderedSame NSOrderedDescending
+syn keyword objcEnum NSEnumerationOptions
+syn keyword objcEnumValue NSEnumerationConcurrent NSEnumerationReverse
+syn keyword objcEnum NSSortOptions
+syn keyword objcEnumValue NSSortConcurrent NSSortStable
+syn keyword objcEnumValue NSNotFound
+syn keyword objcMacro NSIntegerMax NSIntegerMin NSUIntegerMax
+" NSRange.h
+syn keyword objcType NSRange NSRangePointer
+" NSGeometry.h
+syn keyword objcType NSPoint NSPointPointer NSPointArray NSSize NSSizePointer NSSizeArray NSRect NSRectPointer NSRectArray
+syn keyword objcEnum NSRectEdge
+syn keyword objcEnumValue NSMinXEdge NSMinYEdge NSMaxXEdge NSMaxYEdge
+syn keyword objcConstVar NSZeroPoint NSZeroSize NSZeroRect
+syn keyword cType CGFloat CGPoint CGSize CGRect
+syn keyword objcEnum NSAlignmentOptions
+syn keyword objcEnumValue NSAlignMinXInward NSAlignMinYInward NSAlignMaxXInward NSAlignMaxYInward NSAlignWidthInward NSAlignHeightInward NSAlignMinXOutward NSAlignMinYOutward NSAlignMaxXOutward NSAlignMaxYOutward NSAlignWidthOutward NSAlignHeightOutward NSAlignMinXNearest NSAlignMinYNearest NSAlignMaxXNearest NSAlignMaxYNearest NSAlignWidthNearest NSAlignHeightNearest NSAlignRectFlipped NSAlignAllEdgesInward NSAlignAllEdgesOutward NSAlignAllEdgesNearest
+" NSDecimal.h
+syn keyword objcType NSDecimal
+syn keyword objcEnum  NSRoundingMode
+syn keyword objcEnumValue NSRoundPlain NSRoundDown NSRoundUp NSRoundBankers
+syn keyword objcEnum NSCalculationError
+syn keyword objcEnumValue NSCalculationNoError NSCalculationLossOfPrecision NSCalculationUnderflow NSCalculationOverflow NSCalculationDivideByZero
+" NSDate.h
+syn match objcClass /NSDate\s*\*/me=s+6,he=s+6
+syn keyword objcType NSTimeInterval
+syn keyword objcNotificationValue NSSystemClockDidChangeNotification
+syn keyword objcMacro NSTimeIntervalSince1970
+" NSZone.h
+syn match objcType /NSZone\s*\*/me=s+6,he=s+6
+" NSError.h
+syn match objcClass /NSError\s*\*/me=s+7,he=s+7
+syn keyword objcConstVar NSCocoaErrorDomain NSPOSIXErrorDomain NSOSStatusErrorDomain NSMachErrorDomain NSUnderlyingErrorKey NSLocalizedDescriptionKey NSLocalizedFailureReasonErrorKey NSLocalizedRecoverySuggestionErrorKey NSLocalizedRecoveryOptionsErrorKey NSRecoveryAttempterErrorKey NSHelpAnchorErrorKey NSStringEncodingErrorKey NSURLErrorKey NSFilePathErrorKey
+" NSException.h
+syn match objcClass /NSException\s*\*/me=s+11,he=s+11
+syn keyword objcType NSUncaughtExceptionHandler
+syn keyword objcConstVar NSGenericException NSRangeException NSInvalidArgumentException NSInternalInconsistencyException NSMallocException NSObjectInaccessibleException NSObjectNotAvailableException NSDestinationInvalidException NSPortTimeoutException NSInvalidSendPortException NSInvalidReceivePortException NSPortSendException NSPortReceiveException NSOldStyleException
+" NSNotification.h
+syn match objcClass /NSNotification\s*\*/me=s+14,he=s+14
+syn match objcClass /NSNotificationCenter\s*\*/me=s+20,he=s+20
+" NSDistributedNotificationCenter.h
+syn match objcClass /NSDistributedNotificationCenter\s*\*/me=s+31,he=s+31
+syn keyword objcConstVar NSLocalNotificationCenterType
+syn keyword objcEnum NSNotificationSuspensionBehavior
+syn keyword objcEnumValue NSNotificationSuspensionBehaviorDrop NSNotificationSuspensionBehaviorCoalesce NSNotificationSuspensionBehaviorHold NSNotificationSuspensionBehaviorHold NSNotificationSuspensionBehaviorDeliverImmediately
+syn keyword objcEnumValue NSNotificationDeliverImmediately NSNotificationPostToAllSessions
+" NSNotificationQueue.h
+syn match objcClass /NSNotificationQueue\s*\*/me=s+19,he=s+19
+syn keyword objcEnum NSPostingStyle
+syn keyword objcEnumValue NSPostWhenIdle NSPostASAP NSPostNow
+syn keyword objcEnum NSNotificationCoalescing
+syn keyword objcEnumValue NSNotificationNoCoalescing NSNotificationCoalescingOnName NSNotificationCoalescingOnSender
+" NSEnumerator.h
+syn match objcClass /NSEnumerator\s*\*/me=s+12,he=s+12
+" NSIndexSet.h
+syn match objcClass /NSIndexSet\s*\*/me=s+10,he=s+10
+syn match objcClass /NSMutableIndexSet\s*\*/me=s+17,he=s+17
+" NSCharecterSet.h
+syn match objcClass /NSCharacterSet\s*\*/me=s+14,he=s+14
+" NSURL.h
+syn match objcClass /NSURL\s*\*/me=s+5,he=s+5
+syn keyword objcEnum NSURLBookmarkCreationOptions
+syn keyword objcEnumValue NSURLBookmarkCreationPreferFileIDResolution NSURLBookmarkCreationMinimalBookmark NSURLBookmarkCreationSuitableForBookmarkFile NSURLBookmarkCreationWithSecurityScope NSURLBookmarkCreationSecurityScopeAllowOnlyReadAccess
+syn keyword objcEnum NSURLBookmarkResolutionOptions
+syn keyword objcEnumValue NSURLBookmarkResolutionWithoutUI NSURLBookmarkResolutionWithoutMounting NSURLBookmarkResolutionWithSecurityScope
+syn keyword objcType NSURLBookmarkFileCreationOptions
+syn keyword objcConstVar NSURLFileScheme NSURLKeysOfUnsetValuesKey
+syn keyword objcConstVar NSURLNameKey NSURLLocalizedNameKey NSURLIsRegularFileKey NSURLIsDirectoryKey NSURLIsSymbolicLinkKey NSURLIsVolumeKey NSURLIsPackageKey NSURLIsSystemImmutableKey NSURLIsUserImmutableKey NSURLIsHiddenKey NSURLHasHiddenExtensionKey NSURLCreationDateKey NSURLContentAccessDateKey NSURLContentModificationDateKey NSURLAttributeModificationDateKey NSURLLinkCountKey NSURLParentDirectoryURLKey NSURLVolumeURLKey NSURLTypeIdentifierKey NSURLLocalizedTypeDescriptionKey NSURLLabelNumberKey NSURLLabelColorKey NSURLLocalizedLabelKey NSURLEffectiveIconKey NSURLCustomIconKey NSURLFileResourceIdentifierKey NSURLVolumeIdentifierKey NSURLPreferredIOBlockSizeKey NSURLIsReadableKey NSURLIsWritableKey NSURLIsExecutableKey NSURLFileSecurityKey NSURLIsExcludedFromBackupKey NSURLPathKey NSURLIsMountTriggerKey NSURLFileResourceTypeKey
+syn keyword objcConstVar NSURLFileResourceTypeNamedPipe NSURLFileResourceTypeCharacterSpecial NSURLFileResourceTypeDirectory NSURLFileResourceTypeBlockSpecial NSURLFileResourceTypeRegular NSURLFileResourceTypeSymbolicLink NSURLFileResourceTypeSocket NSURLFileResourceTypeUnknown
+syn keyword objcConstVar NSURLFileSizeKey NSURLFileAllocatedSizeKey NSURLTotalFileSizeKey NSURLTotalFileAllocatedSizeKey NSURLIsAliasFileKey
+syn keyword objcConstVar NSURLVolumeLocalizedFormatDescriptionKey NSURLVolumeTotalCapacityKey NSURLVolumeAvailableCapacityKey NSURLVolumeResourceCountKey NSURLVolumeSupportsPersistentIDsKey NSURLVolumeSupportsSymbolicLinksKey NSURLVolumeSupportsHardLinksKey NSURLVolumeSupportsJournalingKey NSURLVolumeIsJournalingKey NSURLVolumeSupportsSparseFilesKey NSURLVolumeSupportsZeroRunsKey NSURLVolumeSupportsCaseSensitiveNamesKey NSURLVolumeSupportsCasePreservedNamesKey NSURLVolumeSupportsRootDirectoryDatesKey NSURLVolumeSupportsVolumeSizesKey NSURLVolumeSupportsRenamingKey NSURLVolumeSupportsAdvisoryFileLockingKey NSURLVolumeSupportsExtendedSecurityKey NSURLVolumeIsBrowsableKey NSURLVolumeMaximumFileSizeKey NSURLVolumeIsEjectableKey NSURLVolumeIsRemovableKey NSURLVolumeIsInternalKey NSURLVolumeIsAutomountedKey NSURLVolumeIsLocalKey NSURLVolumeIsReadOnlyKey NSURLVolumeCreationDateKey NSURLVolumeURLForRemountingKey NSURLVolumeUUIDStringKey NSURLVolumeNameKey NSURLVolumeLocalizedNameKey
+syn keyword objcConstVar NSURLIsUbiquitousItemKey NSURLUbiquitousItemHasUnresolvedConflictsKey NSURLUbiquitousItemIsDownloadedKey NSURLUbiquitousItemIsDownloadingKey NSURLUbiquitousItemIsUploadedKey NSURLUbiquitousItemIsUploadingKey NSURLUbiquitousItemPercentDownloadedKey NSURLUbiquitousItemPercentUploadedKey
+""""""""""""
+" NSString.h
+syn match objcClass /NSString\s*\*/me=s+8,he=s+8
+syn match objcClass /NSMutableString\s*\*/me=s+15,he=s+15
+syn keyword objcType unichar
+syn keyword objcExceptionValue NSParseErrorException NSCharacterConversionException
+syn keyword objcMacro NSMaximumStringLength
+syn keyword objcEnum NSStringCompareOptions
+syn keyword objcEnumValue NSCaseInsensitiveSearch NSLiteralSearch NSBackwardsSearch NSAnchoredSearch NSNumericSearch NSDiacriticInsensitiveSearch NSWidthInsensitiveSearch NSForcedOrderingSearch NSRegularExpressionSearch 
+syn keyword objcEnum NSStringEncoding
+syn keyword objcEnumValue NSASCIIStringEncoding NSNEXTSTEPStringEncoding NSJapaneseEUCStringEncoding NSUTF8StringEncoding NSISOLatin1StringEncoding NSSymbolStringEncoding NSNonLossyASCIIStringEncoding NSShiftJISStringEncoding NSISOLatin2StringEncoding NSUnicodeStringEncoding NSWindowsCP1251StringEncoding NSWindowsCP1252StringEncoding NSWindowsCP1253StringEncoding NSWindowsCP1254StringEncoding NSWindowsCP1250StringEncoding NSISO2022JPStringEncoding NSMacOSRomanStringEncoding NSUTF16StringEncoding NSUTF16BigEndianStringEncoding NSUTF16LittleEndianStringEncoding NSUTF32StringEncoding NSUTF32BigEndianStringEncoding NSUTF32LittleEndianStringEncoding
+syn keyword objcEnum NSStringEncodingConversionOptions
+syn keyword objcEnumValue NSStringEncodingConversionAllowLossy NSStringEncodingConversionExternalRepresentation
+syn keyword objcEnum NSStringEnumerationOptions
+syn keyword objcEnumValue NSStringEnumerationByLines NSStringEnumerationByParagraphs NSStringEnumerationByComposedCharacterSequences NSStringEnumerationByWords NSStringEnumerationBySentences NSStringEnumerationReverse NSStringEnumerationSubstringNotRequired NSStringEnumerationLocalized
+" NSAttributedString.h
+syn match objcClass /NSAttributedString\s*\*/me=s+18,he=s+18
+syn match objcClass /NSMutableAttributedString\s*\*/me=s+25,he=s+25
+syn keyword objcEnum NSAttributedStringEnumerationOptions
+syn keyword objcEnumValue NSAttributedStringEnumerationReverse NSAttributedStringEnumerationLongestEffectiveRangeNotRequired
+" NSValue.h
+syn match objcClass /NSValue\s*\*/me=s+7,he=s+7
+syn match objcClass /NSNumber\s*\*/me=s+8,he=s+8
+" NSDecimalNumber.h
+syn match objcClass /NSDecimalNumber\s*\*/me=s+15,he=s+15
+syn match objcClass /NSDecimalNumberHandler\s*\*/me=s+22,he=s+22
+syn keyword objcExceptionValue NSDecimalNumberExactnessException NSDecimalNumberOverflowException NSDecimalNumberUnderflowException NSDecimalNumberDivideByZeroException
+" NSData.h
+syn match objcClass /NSData\s*\*/me=s+6,he=s+6
+syn match objcClass /NSMutableData\s*\*/me=s+13,he=s+13
+syn keyword objcEnum NSDataReadingOptions
+syn keyword objcEnumValue NSDataReadingMappedIfSafe NSDataReadingUncached NSDataReadingMappedAlways NSDataReadingMapped NSMappedRead NSUncachedRead
+syn keyword objcEnum NSDataWritingOptions
+syn keyword objcEnumValue NSDataWritingAtomic NSDataWritingWithoutOverwriting NSDataWritingFileProtectionNone NSDataWritingFileProtectionComplete NSDataWritingFileProtectionCompleteUnlessOpen NSDataWritingFileProtectionCompleteUntilFirstUserAuthentication NSDataWritingFileProtectionMask NSAtomicWrite
+syn keyword objcEnum NSDataSearchOptions
+syn keyword objcEnumValue NSDataSearchBackwards NSDataSearchAnchored
+" NSArray.h
+syn match objcClass /NSArray\s*\*/me=s+7,he=s+7
+syn match objcClass /NSMutableArray\s*\*/me=s+14,he=s+14
+syn keyword objcEnum NSBinarySearchingOptions
+syn keyword objcEnumValue NSBinarySearchingFirstEqual NSBinarySearchingLastEqual NSBinarySearchingInsertionIndex
+" NSDictionary.h
+syn match objcClass /NSDictionary\s*\*/me=s+12,he=s+12
+syn match objcClass /NSMutableDictionary\s*\*/me=s+19,he=s+19
+" NSSet.h
+syn match objcClass /NSSet\s*\*/me=s+5,me=s+5
+syn match objcClass /NSMutableSet\s*\*/me=s+12,me=s+12
+syn match objcClass /NSCountedSet\s*\*/me=s+12,me=s+12
+" NSOrderedSet.h
+syn match objcClass /NSOrderedSet\s*\*/me=s+12,me=s+12
+syn match objcClass /NSMutableOrderedSet\s*\*/me=s+19,me=s+19
+"""""""""""""""""""
+" NSPathUtilities.h
+syn keyword objcEnum NSSearchPathDirectory
+syn keyword objcEnumValue NSApplicationDirectory NSDemoApplicationDirectory NSDeveloperApplicationDirectory NSAdminApplicationDirectory NSLibraryDirectory NSDeveloperDirectory NSUserDirectory NSDocumentationDirectory NSDocumentDirectory NSCoreServiceDirectory NSAutosavedInformationDirectory NSDesktopDirectory NSCachesDirectory NSApplicationSupportDirectory NSDownloadsDirectory NSInputMethodsDirectory NSMoviesDirectory NSMusicDirectory NSPicturesDirectory NSPrinterDescriptionDirectory NSSharedPublicDirectory NSPreferencePanesDirectory NSApplicationScriptsDirectory NSItemReplacementDirectory NSAllApplicationsDirectory NSAllLibrariesDirectory NSTrashDirectory
+syn keyword objcEnum NSSearchPathDomainMask
+syn keyword objcEnumValue NSUserDomainMask NSLocalDomainMask NSNetworkDomainMask NSSystemDomainMask NSAllDomainsMask
+" NSFileManger.h
+syn match objcClass /NSFileManager\s*\*/me=s+13,he=s+13
+syn match objcClass /NSDirectoryEnumerator\s*\*/me=s+21,he=s+21
+syn keyword objcEnum NSVolumeEnumerationOptions
+syn keyword objcEnumValue NSVolumeEnumerationSkipHiddenVolumes NSVolumeEnumerationProduceFileReferenceURLs 
+syn keyword objcEnum NSDirectoryEnumerationOptions
+syn keyword objcEnumValue NSDirectoryEnumerationSkipsSubdirectoryDescendants NSDirectoryEnumerationSkipsPackageDescendants NSDirectoryEnumerationSkipsHiddenFiles 
+syn keyword objcEnum NSFileManagerItemReplacementOptions
+syn keyword objcEnumValue NSFileManagerItemReplacementUsingNewMetadataOnly NSFileManagerItemReplacementWithoutDeletingBackupItem
+syn keyword objcNotificationValue NSUbiquityIdentityDidChangeNotification
+syn keyword objcConstVar NSFileType NSFileTypeDirectory NSFileTypeRegular NSFileTypeSymbolicLink NSFileTypeSocket NSFileTypeCharacterSpecial NSFileTypeBlockSpecial NSFileTypeUnknown NSFileSize NSFileModificationDate NSFileReferenceCount NSFileDeviceIdentifier NSFileOwnerAccountName NSFileGroupOwnerAccountName NSFilePosixPermissions NSFileSystemNumber NSFileSystemFileNumber NSFileExtensionHidden NSFileHFSCreatorCode NSFileHFSTypeCode NSFileImmutable NSFileAppendOnly NSFileCreationDate NSFileOwnerAccountID NSFileGroupOwnerAccountID NSFileBusy NSFileProtectionKey NSFileProtectionNone NSFileProtectionComplete NSFileProtectionCompleteUnlessOpen NSFileProtectionCompleteUntilFirstUserAuthentication NSFileSystemSize NSFileSystemFreeSize NSFileSystemNodes NSFileSystemFreeNodes
+" NSFileHandle.h
+syn match objcClass /NSFileHandle\s*\*/me=s+12,he=s+12
+syn keyword objcExceptionValue NSFileHandleOperationException
+syn keyword objcNotificationValue NSFileHandleReadCompletionNotification NSFileHandleReadToEndOfFileCompletionNotification NSFileHandleConnectionAcceptedNotification NSFileHandleDataAvailableNotification NSFileHandleNotificationDataItem NSFileHandleNotificationFileHandleItem NSFileHandleNotificationMonitorModes
+syn match objcClass /NSPipe\s*\*/me=s+6,he=s+6
+""""""""""""
+" NSLocale.h
+syn match objcClass /NSLocale\s*\*/me=s+8,he=s+8
+syn keyword objcEnum NSLocaleLanguageDirection
+syn keyword objcEnumValue NSLocaleLanguageDirectionUnknown NSLocaleLanguageDirectionLeftToRight NSLocaleLanguageDirectionRightToLeft NSLocaleLanguageDirectionTopToBottom NSLocaleLanguageDirectionBottomToTop
+syn keyword objcNotificationValue NSCurrentLocaleDidChangeNotification
+syn keyword objcConstVar NSLocaleIdentifier NSLocaleLanguageCode NSLocaleCountryCode NSLocaleScriptCode NSLocaleVariantCode NSLocaleExemplarCharacterSet NSLocaleCalendar NSLocaleCollationIdentifier NSLocaleUsesMetricSystem NSLocaleMeasurementSystem NSLocaleDecimalSeparator NSLocaleGroupingSeparator NSLocaleCurrencySymbol NSLocaleCurrencyCode NSLocaleCollatorIdentifier NSLocaleQuotationBeginDelimiterKey NSLocaleQuotationEndDelimiterKey NSLocaleAlternateQuotationBeginDelimiterKey NSLocaleAlternateQuotationEndDelimiterKey NSGregorianCalendar NSBuddhistCalendar NSChineseCalendar NSHebrewCalendar NSIslamicCalendar NSIslamicCivilCalendar NSJapaneseCalendar NSRepublicOfChinaCalendar NSPersianCalendar NSIndianCalendar NSISO8601Calendar 
+" NSFormatter.h
+syn match objcClass /NSFormatter\s*\*/me=s+11,he=s+11
+" NSNumberFormatter.h
+syn match objcClass /NSNumberFormatter\s*\*/me=s+17,he=s+17
+syn keyword objcEnum NSNumberFormatterStyle
+syn keyword objcEnumValue NSNumberFormatterNoStyle NSNumberFormatterDecimalStyle NSNumberFormatterCurrencyStyle NSNumberFormatterPercentStyle NSNumberFormatterScientificStyle NSNumberFormatterSpellOutStyle
+syn keyword objcEnum NSNumberFormatterBehavior
+syn keyword objcEnumValue NSNumberFormatterBehaviorDefault NSNumberFormatterBehavior10_0 NSNumberFormatterBehavior10_4
+syn keyword objcEnum NSNumberFormatterPadPosition
+syn keyword objcEnumValue NSNumberFormatterPadBeforePrefix NSNumberFormatterPadAfterPrefix NSNumberFormatterPadBeforeSuffix NSNumberFormatterPadAfterSuffix
+syn keyword objcEnum NSNumberFormatterRoundingMode
+syn keyword objcEnumValue NSNumberFormatterRoundCeiling NSNumberFormatterRoundFloor NSNumberFormatterRoundDown NSNumberFormatterRoundUp NSNumberFormatterRoundHalfEven NSNumberFormatterRoundHalfDown NSNumberFormatterRoundHalfUp
+" NSDateFormatter.h
+syn match objcClass /NSDateFormatter\s*\*/me=s+15,he=s+15
+syn keyword objcEnum NSDateFormatterStyle
+syn keyword objcEnumValue NSDateFormatterNoStyle NSDateFormatterShortStyle NSDateFormatterMediumStyle NSDateFormatterLongStyle NSDateFormatterFullStyle
+syn keyword objcEnum NSDateFormatterBehavior
+syn keyword objcEnumValue NSDateFormatterBehaviorDefault NSDateFormatterBehavior10_0 NSDateFormatterBehavior10_4
+" NSCalendar.h
+syn match objcClass /NSCalendar\s*\*/me=s+10,he=s+10
+syn keyword objcEnum NSCalendarUnit
+syn keyword objcEnumValue NSEraCalendarUnit NSYearCalendarUnit NSMonthCalendarUnit NSDayCalendarUnit NSHourCalendarUnit NSMinuteCalendarUnit NSSecondCalendarUnit NSWeekCalendarUnit NSWeekdayCalendarUnit NSWeekdayOrdinalCalendarUnit NSQuarterCalendarUnit NSWeekOfMonthCalendarUnit NSWeekOfYearCalendarUnit NSYearForWeekOfYearCalendarUnit NSCalendarCalendarUnit NSTimeZoneCalendarUnit
+syn keyword objcEnumValue NSWrapCalendarComponents NSUndefinedDateComponent
+syn match objcClass /NSDateComponents\s*\*/me=s+16,he=s+16
+" NSTimeZone.h
+syn match objcClass /NSTimeZone\s*\*/me=s+10,he=s+10
+syn keyword objcEnum NSTimeZoneNameStyle
+syn keyword objcEnumValue NSTimeZoneNameStyleStandard NSTimeZoneNameStyleShortStandard NSTimeZoneNameStyleDaylightSaving NSTimeZoneNameStyleShortDaylightSaving NSTimeZoneNameStyleGeneric NSTimeZoneNameStyleShortGeneric
+syn keyword objcNotificationValue NSSystemTimeZoneDidChangeNotification
+"""""""""""
+" NSCoder.h
+syn match objcClass /NSCoder\s*\*/me=s+7,he=s+7
+" NSArchiver.h
+syn match objcClass /NSArchiver\s*\*/me=s+10,he=s+10
+syn match objcClass /NSUnarchiver\s*\*/me=s+12,he=s+12
+syn keyword objcExceptionValue NSInconsistentArchiveException
+" NSKeyedArchiver.h
+syn match objcClass /NSKeyedArchiver\s*\*/me=s+15,he=s+15
+syn match objcClass /NSKeyedUnarchiver\s*\*/me=s+17,he=s+17
+syn keyword objcExceptionValue NSInvalidArchiveOperationException NSInvalidUnarchiveOperationException
+""""""""""""""""""
+" NSPropertyList.h
+syn keyword objcEnum NSPropertyListMutabilityOptions
+syn keyword objcEnumValue NSPropertyListImmutable NSPropertyListMutableContainers NSPropertyListMutableContainersAndLeaves
+syn keyword objcEnum NSPropertyListFormat
+syn keyword objcEnumValue NSPropertyListOpenStepFormat NSPropertyListXMLFormat_v1_0 NSPropertyListBinaryFormat_v1_0
+syn keyword objcType NSPropertyListReadOptions NSPropertyListWriteOptions
+" NSUserDefaults.h
+syn match objcClass /NSUserDefaults\s*\*/me=s+14,he=s+14
+syn keyword objcConstVar NSGlobalDomain NSArgumentDomain NSRegistrationDomain
+syn keyword objcNotificationValue NSUserDefaultsDidChangeNotification
+" NSBundle.h
+syn match objcClass /NSBundle\s*\*/me=s+8,he=s+8
+syn keyword objcEnumValue NSBundleExecutableArchitectureI386 NSBundleExecutableArchitecturePPC NSBundleExecutableArchitectureX86_64 NSBundleExecutableArchitecturePPC64
+syn keyword objcNotificationValue NSBundleDidLoadNotification NSLoadedClasses
+"""""""""""""""""
+" NSProcessInfo.h
+syn match objcClass /NSProcessInfo\s*\*/me=s+13,he=s+13
+syn keyword objcEnumValue NSWindowsNTOperatingSystem NSWindows95OperatingSystem NSSolarisOperatingSystem NSHPUXOperatingSystem NSMACHOperatingSystem NSSunOSOperatingSystem NSOSF1OperatingSystem
+" NSTask.h
+syn match objcClass /NSTask\s*\*/me=s+6,he=s+6
+syn keyword objcEnum NSTaskTerminationReason
+syn keyword objcEnumValue NSTaskTerminationReasonExit NSTaskTerminationReasonUncaughtSignal
+syn keyword objcNotificationValue NSTaskDidTerminateNotification
+" NSThread.h
+syn match objcClass /NSThread\s*\*/me=s+8,he=s+8
+syn keyword objcNotificationValue NSWillBecomeMultiThreadedNotification NSDidBecomeSingleThreadedNotification NSThreadWillExitNotification
+" NSLock.h
+syn match objcClass /NSLock\s*\*/me=s+6,he=s+6
+syn match objcClass /NSConditionLock\s*\*/me=s+15,he=s+15
+syn match objcClass /NSRecursiveLock\s*\*/me=s+15,he=s+15
+" NSDictributedLock
+syn match objcClass /NSDistributedLock\s*\*/me=s+17,he=s+17
+" NSOperation.h
+""""""""""""""""
+syn match objcClass /NSOperation\s*\*/me=s+11,he=s+11
+syn keyword objcEnum NSOperationQueuePriority
+syn keyword objcEnumValue NSOperationQueuePriorityVeryLow NSOperationQueuePriorityLow NSOperationQueuePriorityNormal NSOperationQueuePriorityHigh NSOperationQueuePriorityVeryHigh
+syn match objcClass /NSBlockOperation\s*\*/me=s+16,he=s+16
+syn match objcClass /NSInvocationOperation\s*\*/me=s+21,he=s+21
+syn keyword objcExceptionValue NSInvocationOperationVoidResultException NSInvocationOperationCancelledException
+syn match objcClass /NSOperationQueue\s*\*/me=s+16,he=s+16
+syn keyword objcEnumValue NSOperationQueueDefaultMaxConcurrentOperationCount
+" NSConnection.h
+syn match objcClass /NSConnection\s*\*/me=s+12,he=s+12
+syn keyword objcConstVar NSConnectionReplyMode
+syn keyword objcNotificationValue NSConnectionDidDieNotification NSConnectionDidInitializeNotification
+syn keyword objcExceptionValue NSFailedAuthenticationException
+" NSPort.h
+syn match objcClass /NSPort\s*\*/me=s+6,he=s+6
+syn keyword objcType NSSocketNativeHandle
+syn keyword objcNotificationValue NSPortDidBecomeInvalidNotification
+syn match objcClass /NSMachPort\s*\*/me=s+10,he=s+10
+syn keyword objcEnumValue NSMachPortDeallocateNone NSMachPortDeallocateSendRight NSMachPortDeallocateReceiveRight
+syn match objcClass /NSMessagePort\s*\*/me=s+13,he=s+13
+syn match objcClass /NSSocketPort\s*\*/me=s+12,he=s+12
+" NSPortMessage.h
+syn match objcClass /NSPortMessage\s*\*/me=s+13,he=s+13
+" NSDistantObject.h
+syn match objcClass /NSDistantObject\s*\*/me=s+15,he=s+15
+" NSPortNameServer.h
+syn match objcClass /NSPortNameServer\s*\*/me=s+16,he=s+16
+syn match objcClass /NSMessagePortNameServer\s*\*/me=s+23,he=s+23
+syn match objcClass /NSSocketPortNameServer\s*\*/me=s+22,he=s+22
+" NSHost.h
+syn match objcClass /NSHost\s*\*/me=s+6,he=s+6
+" NSInvocation.h
+syn match objcClass /NSInvocation\s*\*/me=s+12,he=s+12
+" NSMethodSignature.h
+syn match objcClass /NSMethodSignature\s*\*/me=s+17,he=s+17
+"""""
+" NSScanner.h
+syn match objcClass /NSScanner\s*\*/me=s+9,he=s+9
+" NSTimer.h
+syn match objcClass /NSTimer\s*\*/me=s+7,he=s+7
+" NSAutoreleasePool.h
+syn match objcClass /NSAutoreleasePool\s*\*/me=s+17,he=s+17
+" NSRunLoop.h
+syn match objcClass /NSRunLoop\s*\*/me=s+9,he=s+9
+syn keyword objcConstVar NSDefaultRunLoopMode NSRunLoopCommonModes
+" NSNull.h
+syn match objcClass /NSNull\s*\*/me=s+6,he=s+6
+" NSProxy.h
+syn match objcClass /NSProxy\s*\*/me=s+7,he=s+7
+" NSObject.h
+syn match objcClass /NSObject\s*\*/me=s+8,he=s+8
+
+""" Default Highlighting
+hi def link objcPreProcMacro                cConstant
+hi def link objcPrincipalType               cType
+hi def link objcUsefulTerm                  cConstant
+hi def link objcImport                      cInclude
+hi def link objcImported                    cString
+hi def link objcObjDef                      cOperator
+hi def link objcProtocol                    cOperator
+hi def link objcProperty                    cOperator
+hi def link objcIvarScope                   cOperator
+hi def link objcInternalRep                 cOperator
+hi def link objcException                   cOperator
+hi def link objcThread                      cOperator
+hi def link objcPool                        cOperator
+hi def link objcModuleImport                cOperator
+hi def link objcSpecial                     cSpecial
+hi def link objcString                      cString
+hi def link objcHiddenArgument              cStatement
+hi def link objcBlocksQualifier             cStorageClass
+hi def link objcObjectLifetimeQualifier     cStorageClass
+hi def link objcTollFreeBridgeQualifier     cStorageClass
+hi def link objcRemoteMessagingQualifier    cStorageClass
+hi def link objcFastEnumKeyword             cStatement
+hi def link objcLiteralSyntaxNumber         cNumber
+hi def link objcLiteralSyntaxChar           cCharacter
+hi def link objcLiteralSyntaxSpecialChar    cCharacter
+hi def link objcLiteralSyntaxOp             cOperator
+hi def link objcDeclPropAccessorName        cConstant
+hi def link objcDeclPropAccessorType        cConstant
+hi def link objcDeclPropAssignSemantics     cConstant
+hi def link objcDeclPropAtomicity           cConstant
+hi def link objcDeclPropARC                 cConstant
+hi def link objcInstanceMethod              Function
+hi def link objcClassMethod                 Function
+hi def link objcType                        cType
+hi def link objcClass                       cType
+hi def link objcMacro                       cConstant
+hi def link objcEnum                        cType
+hi def link objcEnumValue                   cConstant
+hi def link objcExceptionValue              cConstant
+hi def link objcNotificationValue           cConstant
+hi def link objcConstVar                    cConstant
 
+""" Final step
 let b:current_syntax = "objc"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
-" vim: ts=8
+" vim: ts=8 sw=2 sts=2
diff -Naur vim73.orig/runtime/syntax/ocaml.vim vim73/runtime/syntax/ocaml.vim
--- vim73.orig/runtime/syntax/ocaml.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/ocaml.vim	2013-08-04 19:09:09.557280360 +0000
@@ -5,9 +5,9 @@
 "               Karl-Heinz Sylla  <Karl-Heinz.Sylla@gmd.de>
 "               Issac Trotts      <ijtrotts@ucdavis.edu>
 " URL:          http://www.ocaml.info/vim/syntax/ocaml.vim
-" Last Change:  2007 Apr 13 - Added highlighting of nativeints (MM)
-"               2006 Oct 09 - More highlighting improvements to numbers (MM)
-"               2006 Sep 19 - Improved highlighting of numbers (Florent Monnier)
+" Last Change:  2010 Oct 11 - Added highlighting of lnot (MM, thanks to Erick Matsen)
+"               2010 Sep 03 - Fixed escaping bug (MM, thanks to Florent Monnier)
+"               2010 Aug 07 - Fixed module type bug (MM)
 
 " A minor patch was applied to the official version so that object/end
 " can be distinguished from begin/end, which is used for indentation,
@@ -24,14 +24,14 @@
 " OCaml is case sensitive.
 syn case match
 
+" Access to the method of an object
+syn match    ocamlMethod       "#"
+
 " Script headers highlighted like comments
 syn match    ocamlComment   "^#!.*"
 
 " Scripting directives
-syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|require\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\)\>"
-
-" Script headers highlighted like comments
-syn match    ocamlComment      "^#!.*"
+syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|require\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\|camlp4o\)\>"
 
 " lowercase identifier - the standard way to match
 syn match    ocamlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
@@ -69,7 +69,7 @@
 
 syn cluster  ocamlAENoParen contains=ocamlBraceErr,ocamlBrackErr,ocamlCommentErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr
 
-syn cluster  ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlPreMPRestr,ocamlMPRestr,ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3,ocamlModRHS,ocamlFuncWith,ocamlFuncStruct,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlModType,ocamlFullMod
+syn cluster  ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlPreMPRestr,ocamlMPRestr,ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3,ocamlModRHS,ocamlFuncWith,ocamlFuncStruct,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlModType,ocamlFullMod,ocamlVal
 
 
 " Enclosing delimiters
@@ -109,9 +109,6 @@
 
 "" Modules
 
-" "struct"
-syn region   ocamlStruct matchgroup=ocamlModule start="\<struct\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
-
 " "sig"
 syn region   ocamlSig matchgroup=ocamlModule start="\<sig\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
 syn region   ocamlModSpec matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contained contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlModTRWith,ocamlMPRestr
@@ -124,8 +121,8 @@
 
 " "module" - somewhat complicated stuff ;-)
 syn region   ocamlModule matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlPreDef
-syn region   ocamlPreDef start="."me=e-1 matchgroup=ocamlKeyword end="\l\|="me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlModTypeRestr,ocamlModTRWith nextgroup=ocamlModPreRHS
-syn region   ocamlModParam start="([^*]" end=")" contained contains=@ocamlAENoParen,ocamlModParam1
+syn region   ocamlPreDef start="."me=e-1 matchgroup=ocamlKeyword end="\l\|=\|)"me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlModTypeRestr,ocamlModTRWith nextgroup=ocamlModPreRHS
+syn region   ocamlModParam start="([^*]" end=")" contained contains=@ocamlAENoParen,ocamlModParam1,ocamlVal
 syn match    ocamlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlPreMPRestr
 
 syn region   ocamlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlMPRestr,ocamlModTypeRestr
@@ -135,6 +132,8 @@
 syn region   ocamlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=ocamlKeyword end="->" contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam skipwhite skipempty nextgroup=ocamlFuncWith,ocamlMPRestr2
 syn match    ocamlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" contained
 syn match    ocamlModPreRHS "=" contained skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
+syn keyword  ocamlKeyword val
+syn region   ocamlVal matchgroup=ocamlKeyword start="\<val\>" matchgroup=ocamlLCIdentifier end="\<\l\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlMPRestr
 syn region   ocamlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=ocamlComment skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
 syn match    ocamlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=ocamlFuncWith
 
@@ -146,8 +145,11 @@
 syn match    ocamlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlWithRest
 syn region   ocamlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@ocamlContained
 
+" "struct"
+syn region   ocamlStruct matchgroup=ocamlModule start="\<\(module\s\+\)\=struct\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+
 " "module type"
-syn region   ocamlKeyword start="\<module\>\s*\<type\>" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
+syn region   ocamlKeyword start="\<module\>\s*\<type\>\(\s*\<of\>\)\=" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
 syn match    ocamlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s
 
 syn keyword  ocamlKeyword  and as assert class
@@ -159,7 +161,7 @@
 syn keyword  ocamlKeyword  method mutable new of
 syn keyword  ocamlKeyword  parser private raise rec
 syn keyword  ocamlKeyword  try type
-syn keyword  ocamlKeyword  val virtual when while with
+syn keyword  ocamlKeyword  virtual when while with
 
 if exists("ocaml_revised")
   syn keyword  ocamlKeyword  do value
@@ -174,7 +176,7 @@
 syn keyword  ocamlType     int int32 int64 lazy_t list nativeint option
 syn keyword  ocamlType     string unit
 
-syn keyword  ocamlOperator asr lor lsl lsr lxor mod not
+syn keyword  ocamlOperator asr lnot lor lsl lsr lxor mod not
 
 syn match    ocamlConstructor  "(\s*)"
 syn match    ocamlConstructor  "\[\s*\]"
@@ -189,6 +191,7 @@
 syn match    ocamlModPath      "\u\(\w\|'\)*\."he=e-1
 
 syn match    ocamlCharacter    "'\\\d\d\d'\|'\\[\'ntbr]'\|'.'"
+syn match    ocamlCharacter    "'\\x\x\x'"
 syn match    ocamlCharErr      "'\\\d\d'\|'\\\d'"
 syn match    ocamlCharErr      "'\\[^\'ntbr]'"
 syn region   ocamlString       start=+"+ skip=+\\\\\|\\"+ end=+"+
@@ -220,7 +223,7 @@
 syn match    ocamlNumber        "\<-\=0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
 syn match    ocamlNumber        "\<-\=0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
 syn match    ocamlNumber        "\<-\=0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
-syn match    ocamlFloat         "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
+syn match    ocamlFloat         "\<-\=\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
 
 " Labels
 syn match    ocamlLabel        "\~\(\l\|_\)\(\w\|'\)*"lc=1
@@ -294,6 +297,7 @@
 
   HiLink ocamlConstructor  Constant
 
+  HiLink ocamlVal          Keyword
   HiLink ocamlModPreRHS    Keyword
   HiLink ocamlMPRestr2	   Keyword
   HiLink ocamlKeyword	   Keyword
diff -Naur vim73.orig/runtime/syntax/opl.vim vim73/runtime/syntax/opl.vim
--- vim73.orig/runtime/syntax/opl.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/opl.vim	2013-08-04 19:09:09.563947007 +0000
@@ -1,6 +1,7 @@
 " Vim syntax file
 " Language:	OPL
 " Maintainer:	Czo <Olivier.Sirol@lip6.fr>
+" Last Change:	2012 Feb 03 by Thilo Six
 " $Id: opl.vim,v 1.1 2004/06/13 17:34:11 vimboss Exp $
 
 " Open Psion Language... (EPOC16/EPOC32)
@@ -13,6 +14,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " case is not significant
 syn case ignore
 
@@ -93,4 +97,6 @@
 
 let b:current_syntax = "opl"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/pamconf.vim vim73/runtime/syntax/pamconf.vim
--- vim73.orig/runtime/syntax/pamconf.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/pamconf.vim	2013-08-04 19:09:09.567280330 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         pam(8) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2011-08-03
 
 
 if exists("b:current_syntax")
@@ -33,7 +33,7 @@
                                     \ pamconfTypeLineCont skipwhite skipnl
 
 syn keyword pamconfControl          contained requisite required sufficient
-                                    \ optional
+                                    \ optional include substack
                                     \ nextgroup=pamconfMPath,
                                     \ pamconfControlLineContH skipwhite
 
@@ -57,7 +57,9 @@
                                     \ bad_item and default
                                     \ nextgroup=pamconfControlValueEq
 
-syn match   pamconfControlValueEq   contained '=' nextgroup=pamconfControlAction
+syn match   pamconfControlValueEq   contained '='
+                                    \ nextgroup=pamconfControlActionN,
+                                    \           pamconfControlAction
 
 syn match   pamconfControlActionN   contained '\d\+\>'
                                     \ nextgroup=pamconfControlValues,
diff -Naur vim73.orig/runtime/syntax/perl.vim vim73/runtime/syntax/perl.vim
--- vim73.orig/runtime/syntax/perl.vim	2010-08-11 21:46:38.000000000 +0000
+++ vim73/runtime/syntax/perl.vim	2013-08-04 19:09:09.573946976 +0000
@@ -1,22 +1,24 @@
 " Vim syntax file
-" Language:     Perl 5
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2010-08-10
-" Contributors: Andy Lester <andy@petdance.com>
-"               Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
-"               Lukas Mai <l.mai.web.de>
-"               Nick Hibma <nick@van-laarhoven.org>
-"               Sonia Heimann <niania@netsurf.org>
-"               and many others.
+" Language:      Perl 5
+" 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-05-11
+" Contributors:  Andy Lester <andy@petdance.com>
+"                Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
+"                Lukas Mai <l.mai.web.de>
+"                Nick Hibma <nick@van-laarhoven.org>
+"                Sonia Heimann <niania@netsurf.org>
+"                Rob Hoelz <rob@hoelz.ro>
+"                and many others.
 "
-" Please download most recent version first before mailing
+" Please download the most recent version first, before mailing
 " any comments.
 "
 " The following parameters are available for tuning the
 " perl syntax highlighting, with defaults given:
 "
-" unlet perl_include_pod
+" let perl_include_pod = 1
 " unlet perl_no_scope_in_variables
 " unlet perl_no_extended_vars
 " unlet perl_string_as_statement
@@ -27,21 +29,29 @@
 " unlet perl_fold_blocks
 " let perl_nofold_packages = 1
 " let perl_nofold_subs = 1
+" unlet perl_fold_anonymous_subs
 
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
+if exists('&regexpengine')
+  let s:regexpengine=&regexpengine
+  set regexpengine=1
+endif
 
 " POD starts with ^=<word> and ends with ^=cut
 
-if exists("perl_include_pod")
+if !exists("perl_include_pod") || perl_include_pod == 1
   " Include a while extra syntax file
   syn include @Pod syntax/pod.vim
   unlet b:current_syntax
   if exists("perl_fold")
-    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold
-    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold
+    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend
+    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend
   else
     syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
     syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
@@ -63,10 +73,13 @@
 " All keywords
 "
 syn match perlConditional		"\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
-syn match perlConditional		"\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
+syn match perlConditional		"\<else\%(\%(\_s\*if\>\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty
 syn match perlRepeat			"\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
 syn match perlOperator			"\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
-syn match perlControl			"\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>"
+" for some reason, adding this as the nextgroup for perlControl fixes BEGIN
+" folding issues...
+syn match perlFakeGroup 		"" contained
+syn match perlControl			"\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup
 
 syn match perlStatementStorage		"\<\%(my\|our\|local\|state\)\>"
 syn match perlStatementControl		"\<\%(return\|last\|next\|redo\|goto\|break\)\>"
@@ -93,9 +106,9 @@
 
 syn match perlStatementMisc		"\<\%(warn\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
 
-syn keyword perlTodo			TODO TBD FIXME XXX NOTE contained
+syn keyword perlTodo			TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained
 
-syn region perlStatementIndirObjWrap	matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|print\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock
+syn region perlStatementIndirObjWrap   matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock extend
 
 syn match perlLabel      "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
 
@@ -146,14 +159,14 @@
   syn region perlArrow		matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
   syn match  perlArrow		"->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
   syn region perlArrow		matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
-  syn region perlVarBlock	matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn region perlVarBlock2	matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn region perlVarBlock	matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+  syn region perlVarBlock2	matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
   syn match  perlVarPlain2	"[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
   syn match  perlVarPlain	"\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
-  syn match  perlVarSimpleMember	"\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained
+  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+  syn match  perlVarSimpleMember	"\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained extend
   syn match  perlVarSimpleMemberName	"\I\i*" contained
-  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
   syn match perlPackageConst	"__PACKAGE__" nextgroup=perlMethod
   syn match  perlMethod		"->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod
 endif
@@ -168,13 +181,13 @@
 
 " Special characters in strings and matches
 syn match  perlSpecialString	"\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
-syn match  perlSpecialStringU2	"\\." extend contained transparent contains=NONE
+syn match  perlSpecialStringU2	"\\." extend contained contains=NONE
 syn match  perlSpecialStringU	"\\\\" contained
 syn match  perlSpecialMatch	"\\[1-9]" contained extend
 syn match  perlSpecialMatch	"\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
 syn match  perlSpecialMatch	"\\k\%(<\h\w*>\|'\h\w*'\)" contained
 syn match  perlSpecialMatch	"{\d\+\%(,\%(\d\+\)\=\)\=}" contained
-syn match  perlSpecialMatch	"\[[]-]\=[^\[\]]*[]-]\=\]" contained
+syn match  perlSpecialMatch	"\[[]-]\=[^\[\]]*[]-]\=\]" contained extend
 syn match  perlSpecialMatch	"[+*()?.]" contained
 syn match  perlSpecialMatch	"(?[#:=!]" contained
 syn match  perlSpecialMatch	"(?[impsx]*\%(-[imsx]\+\)\=)" contained
@@ -186,10 +199,9 @@
 "
 " Highlight lines with only whitespace (only in blank delimited here documents) as errors
 syn match  perlNotEmptyLine	"^\s\+$" contained
-" Highlight '} else if (...) {', it should be '} else { if (...) { ' or
-" '} elsif (...) {'.
-syn match perlElseIfError	"\s\+if" contained
-syn keyword perlElseIfError	elseif
+" Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {"
+syn match perlElseIfError	"else\_s*if" containedin=perlConditional
+syn keyword perlElseIfError	elseif containedin=perlConditional
 
 " Variable interpolation
 "
@@ -217,32 +229,32 @@
 syn match  perlVStringV	"\<v" contained
 
 
-syn region perlParensSQ		start=+(+ end=+)+ extend contained transparent contains=perlParensSQ,@perlInterpSQ keepend
-syn region perlBracketsSQ	start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsSQ,@perlInterpSQ keepend
-syn region perlBracesSQ		start=+{+ end=+}+ extend contained transparent contains=perlBracesSQ,@perlInterpSQ keepend
-syn region perlAnglesSQ		start=+<+ end=+>+ extend contained transparent contains=perlAnglesSQ,@perlInterpSQ keepend
-
-syn region perlParensDQ		start=+(+ end=+)+ extend contained transparent contains=perlParensDQ,@perlInterpDQ keepend
-syn region perlBracketsDQ	start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsDQ,@perlInterpDQ keepend
-syn region perlBracesDQ		start=+{+ end=+}+ extend contained transparent contains=perlBracesDQ,@perlInterpDQ keepend
-syn region perlAnglesDQ		start=+<+ end=+>+ extend contained transparent contains=perlAnglesDQ,@perlInterpDQ keepend
+syn region perlParensSQ		start=+(+ end=+)+ extend contained contains=perlParensSQ,@perlInterpSQ keepend
+syn region perlBracketsSQ	start=+\[+ end=+\]+ extend contained contains=perlBracketsSQ,@perlInterpSQ keepend
+syn region perlBracesSQ		start=+{+ end=+}+ extend contained contains=perlBracesSQ,@perlInterpSQ keepend
+syn region perlAnglesSQ		start=+<+ end=+>+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend
+
+syn region perlParensDQ		start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend
+syn region perlBracketsDQ	start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend
+syn region perlBracesDQ		start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend
+syn region perlAnglesDQ		start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend
 
 
 " Simple version of searches and matches
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[cgimopsx]*+ contains=@perlInterpMatch keepend
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[cgimopsx]*+ contains=@perlInterpMatch keepend
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[cgimopsx]*+ contains=@perlInterpSQ keepend
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash keepend
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[cgimopsx]*+ contains=@perlInterpMatch,perlParensDQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[msixpodualgc]*+ contains=@perlInterpMatch keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[msixpodualgc]*+ contains=@perlInterpMatch keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgc]*+ contains=@perlInterpSQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgc]*+ contains=@perlInterpMatch,perlParensDQ keepend
 
 " A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ keepend
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[cgimopsx]*+ contains=@perlInterpMatch,perlAnglesDQ keepend
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgc]*+ contains=@perlInterpMatch,perlAnglesDQ keepend
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend
 
 " Below some hacks to recognise the // variant. This is virtually impossible to catch in all
 " cases as the / is used in so many other ways, but these should be the most obvious ones.
-syn region perlMatch	matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash
+syn region perlMatch	matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash
 
 
 " Substitutions
@@ -254,13 +266,13 @@
 syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
 syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
 syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[ecgimopsx]*+ keepend contained contains=@perlInterpDQ
-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[ecgimopsx]*+ contained contains=@perlInterpDQ,perlParensDQ keepend
-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend
-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend
-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[ecgimopsx]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend
-syn region perlSubstitutionSQ		matchgroup=perlMatchStartEnd start=+'+  end=+'[ecgimopsx]*+ contained contains=@perlInterpSQ keepend 
+syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[msixpodualgcer]*+ keepend contained contains=@perlInterpDQ
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlParensDQ keepend
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend
+syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend
+syn region perlSubstitutionSQ		matchgroup=perlMatchStartEnd start=+'+  end=+'[msixpodualgcer]*+ contained contains=@perlInterpSQ keepend
 
 " Translations
 " perlMatch is the first part, perlTranslation* is the second, translator part.
@@ -270,48 +282,48 @@
 syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
 syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
 syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cds]*+ contained
-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[cds]*+ contains=perlParensSQ contained
-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contains=perlBracketsSQ contained
-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contains=perlBracesSQ contained
-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[cds]*+ contains=perlAnglesSQ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cdsr]*+ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[cdsr]*+ contains=perlParensSQ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][cdsr]*+ contains=perlBracketsSQ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[cdsr]*+ contains=perlBracesSQ contained
+syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[cdsr]*+ contains=perlAnglesSQ contained
 
 
 " Strings and q, qq, qw and qr expressions
 
-syn region perlStringUnexpanded	matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend
-syn region perlString		matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
-
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend
-
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+  end=+\z1+ contains=@perlInterpSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+  end=+#+ contains=@perlInterpSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+  end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+  end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+  end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+  end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
-
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+  end=+\z1[imosx]*+ contains=@perlInterpMatch keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+  end=+/[imosx]*+ contains=@perlInterpSlash keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+  end=+#[imosx]*+ contains=@perlInterpMatch keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+  end=+'[imosx]*+ contains=@perlInterpSQ keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+  end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend
+syn region perlStringUnexpanded	matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend
+syn region perlString		matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
+
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend extend
+
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+  end=+\z1+ contains=@perlInterpSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+  end=+#+ contains=@perlInterpSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+  end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+  end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+  end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+  end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
+
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+  end=+\z1[imosx]*+ contains=@perlInterpMatch keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+  end=+/[imosx]*+ contains=@perlInterpSlash keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+  end=+#[imosx]*+ contains=@perlInterpMatch keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+  end=+'[imosx]*+ contains=@perlInterpSQ keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+  end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
 
 " A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+  end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+  end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend
-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+  end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+  end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+  end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend
+syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+  end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend
 
 " Constructs such as print <<EOF [...] EOF, 'here' documents
 "
@@ -319,14 +331,14 @@
 " 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
 " seems due to the 'auto-extending nature' of regions.
 if exists("perl_fold")
-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ fold
-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold
-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold
-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine fold
-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine fold
-  syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ fold extend
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold extend
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold extend
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine fold extend
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine fold extend
+  syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold extend
 else
-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+    end=+^\z1$+ contains=@perlInterpDQ
+  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ
   syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ
   syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ
   syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine
@@ -349,13 +361,13 @@
 else
     syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained
     syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ
-    syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError
+    syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError,perlFakeGroup
     syn match perlSubAttributes "" contained nextgroup=perlSubError
     syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe
 endif
 syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained
-syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes contained contains=perlSubPrototypeError
-syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype
+syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes,perlComment contained contains=perlSubPrototypeError
+syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype,perlComment
 
 syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
 
@@ -371,7 +383,7 @@
 syn match  perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
 
 " All other # are comments, except ^#!
-syn match  perlComment		"#.*" contains=perlTodo,@Spell
+syn match  perlComment		"#.*" contains=perlTodo,@Spell extend
 syn match  perlSharpBang	"^#!.*"
 
 " Formats
@@ -385,9 +397,11 @@
 
 " __END__ and __DATA__ clauses
 if exists("perl_fold")
-  syntax region perlDATA		start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold
+  syntax region perlDATA		start="^__DATA__$" skip="." end="." fold
+  syntax region perlDATA		start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA fold
 else
-  syntax region perlDATA		start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA
+  syntax region perlDATA		start="^__DATA__$" skip="." end="."
+  syntax region perlDATA		start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA
 endif
 
 "
@@ -400,8 +414,15 @@
     syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
   endif
   if !exists("perl_nofold_subs")
-    syn region perlSubFold     start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
-    syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
+    if exists("perl_fold_anonymous_subs") && perl_fold_anonymous_subs
+      syn region perlSubFold     start="\<sub\>[^\n;]*{" end="}" transparent fold keepend extend
+      syn region perlSubFold     start="\<\%(BEGIN\|END\|CHECK\|INIT\)\>\s*{" end="}" transparent fold keepend
+
+      syn region perlBraces start="{" end="}" transparent extend
+    else
+      syn region perlSubFold     start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
+      syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
+    endif
   endif
 
   if exists("perl_fold_blocks")
@@ -418,6 +439,9 @@
 
 command -nargs=+ HiLink hi def link <args>
 
+" NOTE: If you're linking new highlight groups to perlString, please also put
+"       them into b:match_skip in ftplugin/perl.vim.
+
 " The default highlighting.
 HiLink perlSharpBang		PreProc
 HiLink perlControl		PreProc
@@ -505,6 +529,22 @@
 HiLink perlSpecialMatch		perlSpecial
 HiLink perlDATA			perlComment
 
+" NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part),
+"       I had to remove the transparent property from the following regions
+"       in order to get them to highlight correctly.  Feel free to remove
+"       these and reinstate the transparent property if you know how.
+HiLink perlParensSQ		perlString
+HiLink perlBracketsSQ		perlString
+HiLink perlBracesSQ		perlString
+HiLink perlAnglesSQ		perlString
+
+HiLink perlParensDQ		perlString
+HiLink perlBracketsDQ		perlString
+HiLink perlBracesDQ		perlString
+HiLink perlAnglesDQ		perlString
+
+HiLink perlSpecialStringU2	perlString
+
 " Possible errors
 HiLink perlNotEmptyLine		Error
 HiLink perlElseIfError		Error
@@ -539,5 +579,13 @@
 
 let b:current_syntax = "perl"
 
+if exists('&regexpengine')
+  let &regexpengine=s:regexpengine
+  unlet s:regexpengine
+endif
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " XXX Change to sts=4:sw=4
 " vim:ts=8:sts=2:sw=2:expandtab:ft=vim
diff -Naur vim73.orig/runtime/syntax/perl6.vim vim73/runtime/syntax/perl6.vim
--- vim73.orig/runtime/syntax/perl6.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/perl6.vim	2013-08-04 19:09:09.577280300 +0000
@@ -1,12 +1,13 @@
 " Vim syntax file
-" Language:     Perl 6
-" Maintainer:   Andy Lester <andy@petdance.com>
-" Homepage:     http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2009-07-04
-
-" Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org>
-"               Moritz Lenz <moritz@faui2k3.org>
-"               Hinrik Örn Sigurðsson <hinrik.sig@gmail.com>
+" 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:   2009-07-04
+
+" 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.
@@ -67,6 +68,8 @@
 elseif exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " identifiers
 syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*"
@@ -1021,7 +1024,7 @@
 " TODO: mostly stolen from perl.vim, might need more work
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%([$@%&*]\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!"
     \ start="^//\@!"
     \ start=+\s\@<=/[^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!/\@!+
     \ skip="\\/"
@@ -1031,7 +1034,7 @@
 " m/foo/, mm/foo/, rx/foo/
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!"
     \ skip="\\/"
     \ end="/"
     \ keepend
@@ -1040,7 +1043,7 @@
 " m!foo!, mm!foo!, rx!foo!
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!"
     \ skip="\\!"
     \ end="!"
     \ keepend
@@ -1049,7 +1052,7 @@
 " 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([\"'`|,$]\)\$\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!"
     \ skip="\\\z1"
     \ end="\z1"
     \ keepend
@@ -1058,7 +1061,7 @@
 " m (foo), mm (foo), rx (foo)
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!"
     \ skip="\\)"
     \ end=")"
     \ contains=@p6Regexen,@p6Variables
@@ -1066,7 +1069,7 @@
 " m[foo], mm[foo], rx[foo]
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!"
     \ skip="\\]"
     \ end="]"
     \ contains=@p6Regexen,@p6Variables
@@ -1074,7 +1077,7 @@
 " m{foo}, mm{foo}, rx{foo}
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!"
     \ skip="\\}"
     \ end="}"
     \ contains=@p6Regexen,@p6Variables
@@ -1082,7 +1085,7 @@
 " m<foo>, mm<foo>, rx<foo>
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!"
     \ skip="\\>"
     \ end=">"
     \ contains=@p6Regexen,@p6Variables
@@ -1090,7 +1093,7 @@
 " m«foo», mm«foo», rx«foo»
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!»\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!»\@!"
     \ skip="\\»"
     \ end="»"
     \ contains=@p6Regexen,@p6Variables
@@ -1100,7 +1103,7 @@
 " s/foo/bar/
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/"
     \ skip="\\/"
     \ end="/"me=e-1
     \ keepend
@@ -1119,7 +1122,7 @@
 " s!foo!bar!
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!"
     \ skip="\\!"
     \ end="!"me=e-1
     \ keepend
@@ -1138,7 +1141,7 @@
 " s$foo$bar$, s|foo|bar, etc
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)"
     \ skip="\\\z1"
     \ end="\z1"me=e-1
     \ keepend
@@ -1157,7 +1160,7 @@
 " s{foo}
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!"
     \ skip="\\}"
     \ end="}"
     \ contains=@p6Regexen,@p6Variables
@@ -1165,7 +1168,7 @@
 " s[foo]
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!"
     \ skip="\\]"
     \ end="]"
     \ contains=@p6Regexen,@p6Variables
@@ -1173,7 +1176,7 @@
 " s<foo>
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!"
     \ skip="\\>"
     \ end=">"
     \ contains=@p6Regexen,@p6Variables
@@ -1181,7 +1184,7 @@
 " s«foo»
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=«»\@!"
     \ skip="\\»"
     \ end="»"
     \ contains=@p6Regexen,@p6Variables
@@ -1189,7 +1192,7 @@
 " s (foo)
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!"
     \ skip="\\)"
     \ end=")"
     \ contains=@p6Regexen,@p6Variables
@@ -1199,7 +1202,7 @@
 " m:P5//
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
     \ skip="\\/"
     \ end="/"
     \ contains=@p6RegexP5,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
@@ -1207,7 +1210,7 @@
 " m:P5!!
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!"
     \ skip="\\!"
     \ end="!"
     \ contains=@p6RegexP5,p6Variable,p6VarSlash,p6VarMatch,p6VarNum
@@ -1215,7 +1218,7 @@
 " m:P5$$, m:P5||, etc
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
     \ skip="\\\z1"
     \ end="\z1"
     \ contains=@p6RegexP5,@p6Variables
@@ -1223,7 +1226,7 @@
 " m:P5 ()
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
     \ skip="\\)"
     \ end=")"
     \ contains=@p6RegexP5,@p6Variables
@@ -1231,7 +1234,7 @@
 " m:P5[]
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
     \ skip="\\]"
     \ end="]"
     \ contains=@p6RegexP5,@p6Variables
@@ -1239,7 +1242,7 @@
 " m:P5{}
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
     \ skip="\\}"
     \ end="}"
     \ contains=@p6RegexP5,p6Variables
@@ -1247,7 +1250,7 @@
 " m:P5<>
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
     \ skip="\\>"
     \ end=">"
     \ contains=@p6RegexP5,p6Variables
@@ -1255,7 +1258,7 @@
 " m:P5«»
 syn region p6Match
     \ matchgroup=p6Quote
-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=«»\@!"
     \ skip="\\»"
     \ end="»"
     \ contains=@p6RegexP5,p6Variables
@@ -1265,7 +1268,7 @@
 " tr/foo/bar/, tr|foo|bar, etc
 syn region p6String
     \ matchgroup=p6Quote
-    \ start="\%(\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)"
+    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)"
     \ skip="\\\z1"
     \ end="\z1"me=e-1
     \ contains=p6RxRange
@@ -2246,4 +2249,7 @@
 
 let b:current_syntax = "perl6"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:ts=8:sts=4:sw=4:expandtab:ft=vim
diff -Naur vim73.orig/runtime/syntax/pf.vim vim73/runtime/syntax/pf.vim
--- vim73.orig/runtime/syntax/pf.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/pf.vim	2013-08-04 19:09:09.577280300 +0000
@@ -1,7 +1,8 @@
 " pf syntax file
-" Language:	OpenBSD packet filter configuration (pf.conf)
-" Maintainer:	Camiel Dobbelaar <cd@sentia.nl>
-" Last Change:	2003 May 27
+" Language:        OpenBSD packet filter configuration (pf.conf)
+" Original Author: Camiel Dobbelaar <cd@sentia.nl>
+" Maintainer:      Lauri Tirkkonen <lotheac@iki.fi>
+" Last Change:     2013 Apr 02
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -14,7 +15,7 @@
 setlocal foldmethod=syntax
 syn sync fromstart
 
-syn cluster	pfNotLS		contains=pfComment,pfTodo,pfVarAssign
+syn cluster	pfNotLS		contains=pfTodo,pfVarAssign
 syn keyword	pfCmd		altq anchor antispoof binat nat pass
 syn keyword	pfCmd		queue rdr scrub table set
 syn keyword	pfService	auth bgp domain finger ftp http https ident
diff -Naur vim73.orig/runtime/syntax/pfmain.vim vim73/runtime/syntax/pfmain.vim
--- vim73.orig/runtime/syntax/pfmain.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/pfmain.vim	2013-08-04 19:09:09.580613623 +0000
@@ -1,10 +1,11 @@
 " Vim syntax file
 " Language:	Postfix main.cf configuration
 " Maintainer:	KELEMEN Peter <Peter dot Kelemen at cern dot ch>
-" Last Change:	2006 Apr 15
-" Version:	0.20
+" Last Update:  Hong Xu
+" Last Change:	2011 May 14
+" Version:	0.40
 " URL:		http://cern.ch/fuji/vim/syntax/pfmain.vim
-" Comment:	Based on Postfix 2.3.x defaults.
+" Comment:	Based on Postfix 2.9 defaults.
 
 if version < 600
 	syntax clear
@@ -22,7 +23,9 @@
 syntax sync minlines=1
 
 syntax keyword pfmainConf 2bounce_notice_recipient
+syntax keyword pfmainConf access_map_defer_code
 syntax keyword pfmainConf access_map_reject_code
+syntax keyword pfmainConf address_verify_cache_cleanup_interval
 syntax keyword pfmainConf address_verify_default_transport
 syntax keyword pfmainConf address_verify_local_transport
 syntax keyword pfmainConf address_verify_map
@@ -36,6 +39,7 @@
 syntax keyword pfmainConf address_verify_relay_transport
 syntax keyword pfmainConf address_verify_relayhost
 syntax keyword pfmainConf address_verify_sender
+syntax keyword pfmainConf address_verify_sender_dependent_default_transport_maps
 syntax keyword pfmainConf address_verify_sender_dependent_relayhost_maps
 syntax keyword pfmainConf address_verify_service_name
 syntax keyword pfmainConf address_verify_transport_maps
@@ -83,22 +87,31 @@
 syntax keyword pfmainConf connection_cache_status_update_time
 syntax keyword pfmainConf connection_cache_ttl_limit
 syntax keyword pfmainConf content_filter
+syntax keyword pfmainConf cyrus_sasl_config_path
 syntax keyword pfmainConf daemon_directory
 syntax keyword pfmainConf daemon_timeout
+syntax keyword pfmainConf data_directory
 syntax keyword pfmainConf debug_peer_level
 syntax keyword pfmainConf debug_peer_list
 syntax keyword pfmainConf default_database_type
 syntax keyword pfmainConf default_delivery_slot_cost
 syntax keyword pfmainConf default_delivery_slot_discount
 syntax keyword pfmainConf default_delivery_slot_loan
+syntax keyword pfmainConf default_destination_concurrency_failed_cohort_limit
 syntax keyword pfmainConf default_destination_concurrency_limit
+syntax keyword pfmainConf default_destination_concurrency_negative_feedback
+syntax keyword pfmainConf default_destination_concurrency_positive_feedback
+syntax keyword pfmainConf default_destination_rate_delay
 syntax keyword pfmainConf default_destination_recipient_limit
 syntax keyword pfmainConf default_extra_recipient_limit
+syntax keyword pfmainConf default_filter_nexthop
 syntax keyword pfmainConf default_minimum_delivery_slots
 syntax keyword pfmainConf default_privs
 syntax keyword pfmainConf default_process_limit
 syntax keyword pfmainConf default_rbl_reply
 syntax keyword pfmainConf default_recipient_limit
+syntax keyword pfmainConf default_recipient_refill_delay
+syntax keyword pfmainConf default_recipient_refill_limit
 syntax keyword pfmainConf default_transport
 syntax keyword pfmainConf default_verp_delimiters
 syntax keyword pfmainConf defer_code
@@ -109,15 +122,22 @@
 syntax keyword pfmainConf delay_warning_time
 syntax keyword pfmainConf deliver_lock_attempts
 syntax keyword pfmainConf deliver_lock_delay
+syntax keyword pfmainConf destination_concurrency_feedback_debug
+syntax keyword pfmainConf detect_8bit_encoding_header
 syntax keyword pfmainConf disable_dns_lookups
 syntax keyword pfmainConf disable_mime_input_processing
 syntax keyword pfmainConf disable_mime_output_conversion
 syntax keyword pfmainConf disable_verp_bounces
 syntax keyword pfmainConf disable_vrfy_command
+syntax keyword pfmainConf dnsblog_reply_delay
+syntax keyword pfmainConf dnsblog_service_name
 syntax keyword pfmainConf dont_remove
 syntax keyword pfmainConf double_bounce_sender
 syntax keyword pfmainConf duplicate_filter_limit
+syntax keyword pfmainConf empty_address_default_transport_maps_lookup_key
 syntax keyword pfmainConf empty_address_recipient
+syntax keyword pfmainConf empty_address_relayhost_maps_lookup_key
+syntax keyword pfmainConf enable_long_queue_ids
 syntax keyword pfmainConf enable_original_recipient
 syntax keyword pfmainConf error_notice_recipient
 syntax keyword pfmainConf error_service_name
@@ -151,13 +171,16 @@
 syntax keyword pfmainConf inet_interfaces
 syntax keyword pfmainConf inet_protocols
 syntax keyword pfmainConf initial_destination_concurrency
+syntax keyword pfmainConf internal_mail_filter_classes
 syntax keyword pfmainConf invalid_hostname_reject_code
 syntax keyword pfmainConf ipc_idle
 syntax keyword pfmainConf ipc_timeout
 syntax keyword pfmainConf ipc_ttl
 syntax keyword pfmainConf line_length_limit
+syntax keyword pfmainConf lmtp_address_preference
 syntax keyword pfmainConf lmtp_bind_address
 syntax keyword pfmainConf lmtp_bind_address6
+syntax keyword pfmainConf lmtp_body_checks
 syntax keyword pfmainConf lmtp_cname_overrides_servername
 syntax keyword pfmainConf lmtp_connect_timeout
 syntax keyword pfmainConf lmtp_connection_cache_destinations
@@ -172,23 +195,34 @@
 syntax keyword pfmainConf lmtp_destination_recipient_limit
 syntax keyword pfmainConf lmtp_discard_lhlo_keyword_address_maps
 syntax keyword pfmainConf lmtp_discard_lhlo_keywords
+syntax keyword pfmainConf lmtp_dns_resolver_options
 syntax keyword pfmainConf lmtp_enforce_tls
 syntax keyword pfmainConf lmtp_generic_maps
+syntax keyword pfmainConf lmtp_header_checks
 syntax keyword pfmainConf lmtp_host_lookup
 syntax keyword pfmainConf lmtp_lhlo_name
 syntax keyword pfmainConf lmtp_lhlo_timeout
 syntax keyword pfmainConf lmtp_line_length_limit
 syntax keyword pfmainConf lmtp_mail_timeout
+syntax keyword pfmainConf lmtp_mime_header_checks
 syntax keyword pfmainConf lmtp_mx_address_limit
 syntax keyword pfmainConf lmtp_mx_session_limit
+syntax keyword pfmainConf lmtp_nested_header_checks
+syntax keyword pfmainConf lmtp_per_record_deadline
 syntax keyword pfmainConf lmtp_pix_workaround_delay_time
+syntax keyword pfmainConf lmtp_pix_workaround_maps
 syntax keyword pfmainConf lmtp_pix_workaround_threshold_time
+syntax keyword pfmainConf lmtp_pix_workarounds
 syntax keyword pfmainConf lmtp_quit_timeout
 syntax keyword pfmainConf lmtp_quote_rfc821_envelope
 syntax keyword pfmainConf lmtp_randomize_addresses
 syntax keyword pfmainConf lmtp_rcpt_timeout
+syntax keyword pfmainConf lmtp_reply_filter
 syntax keyword pfmainConf lmtp_rset_timeout
+syntax keyword pfmainConf lmtp_sasl_auth_cache_name
+syntax keyword pfmainConf lmtp_sasl_auth_cache_time
 syntax keyword pfmainConf lmtp_sasl_auth_enable
+syntax keyword pfmainConf lmtp_sasl_auth_soft_bounce
 syntax keyword pfmainConf lmtp_sasl_mechanism_filter
 syntax keyword pfmainConf lmtp_sasl_password_maps
 syntax keyword pfmainConf lmtp_sasl_path
@@ -201,10 +235,34 @@
 syntax keyword pfmainConf lmtp_skip_5xx_greeting
 syntax keyword pfmainConf lmtp_starttls_timeout
 syntax keyword pfmainConf lmtp_tcp_port
+syntax keyword pfmainConf lmtp_tls_CAfile
+syntax keyword pfmainConf lmtp_tls_CApath
+syntax keyword pfmainConf lmtp_tls_block_early_mail_reply
+syntax keyword pfmainConf lmtp_tls_cert_file
+syntax keyword pfmainConf lmtp_tls_ciphers
+syntax keyword pfmainConf lmtp_tls_dcert_file
+syntax keyword pfmainConf lmtp_tls_dkey_file
+syntax keyword pfmainConf lmtp_tls_eccert_file
+syntax keyword pfmainConf lmtp_tls_eckey_file
 syntax keyword pfmainConf lmtp_tls_enforce_peername
+syntax keyword pfmainConf lmtp_tls_exclude_ciphers
+syntax keyword pfmainConf lmtp_tls_fingerprint_cert_match
+syntax keyword pfmainConf lmtp_tls_fingerprint_digest
+syntax keyword pfmainConf lmtp_tls_key_file
+syntax keyword pfmainConf lmtp_tls_loglevel
+syntax keyword pfmainConf lmtp_tls_mandatory_ciphers
+syntax keyword pfmainConf lmtp_tls_mandatory_exclude_ciphers
+syntax keyword pfmainConf lmtp_tls_mandatory_protocols
 syntax keyword pfmainConf lmtp_tls_note_starttls_offer
 syntax keyword pfmainConf lmtp_tls_per_site
+syntax keyword pfmainConf lmtp_tls_policy_maps
+syntax keyword pfmainConf lmtp_tls_protocols
 syntax keyword pfmainConf lmtp_tls_scert_verifydepth
+syntax keyword pfmainConf lmtp_tls_secure_cert_match
+syntax keyword pfmainConf lmtp_tls_security_level
+syntax keyword pfmainConf lmtp_tls_session_cache_database
+syntax keyword pfmainConf lmtp_tls_session_cache_timeout
+syntax keyword pfmainConf lmtp_tls_verify_cert_match
 syntax keyword pfmainConf lmtp_use_tls
 syntax keyword pfmainConf lmtp_xforward_timeout
 syntax keyword pfmainConf local_command_shell
@@ -229,6 +287,7 @@
 syntax keyword pfmainConf manpage_directory
 syntax keyword pfmainConf maps_rbl_domains
 syntax keyword pfmainConf maps_rbl_reject_code
+syntax keyword pfmainConf master_service_disable
 syntax keyword pfmainConf masquerade_classes
 syntax keyword pfmainConf masquerade_domains
 syntax keyword pfmainConf masquerade_exceptions
@@ -239,10 +298,31 @@
 syntax keyword pfmainConf message_reject_characters
 syntax keyword pfmainConf message_size_limit
 syntax keyword pfmainConf message_strip_characters
+syntax keyword pfmainConf milter_command_timeout
+syntax keyword pfmainConf milter_connect_macros
+syntax keyword pfmainConf milter_connect_timeout
+syntax keyword pfmainConf milter_content_timeout
+syntax keyword pfmainConf milter_data_macros
+syntax keyword pfmainConf milter_default_action
+syntax keyword pfmainConf milter_end_of_data_macros
+syntax keyword pfmainConf milter_end_of_header_macros
+syntax keyword pfmainConf milter_header_checks
+syntax keyword pfmainConf milter_helo_macros
+syntax keyword pfmainConf milter_macro_daemon_name
+syntax keyword pfmainConf milter_macro_v
+syntax keyword pfmainConf milter_mail_macros
+syntax keyword pfmainConf milter_protocol
+syntax keyword pfmainConf milter_rcpt_macros
+syntax keyword pfmainConf milter_unknown_command_macros
 syntax keyword pfmainConf mime_boundary_length_limit
 syntax keyword pfmainConf mime_header_checks
 syntax keyword pfmainConf mime_nesting_limit
 syntax keyword pfmainConf minimal_backoff_time
+syntax keyword pfmainConf multi_instance_directories
+syntax keyword pfmainConf multi_instance_enable
+syntax keyword pfmainConf multi_instance_group
+syntax keyword pfmainConf multi_instance_name
+syntax keyword pfmainConf multi_instance_wrapper
 syntax keyword pfmainConf multi_recipient_bounce_reject_code
 syntax keyword pfmainConf mydestination
 syntax keyword pfmainConf mydomain
@@ -253,23 +333,74 @@
 syntax keyword pfmainConf nested_header_checks
 syntax keyword pfmainConf newaliases_path
 syntax keyword pfmainConf non_fqdn_reject_code
+syntax keyword pfmainConf non_smtpd_milters
 syntax keyword pfmainConf notify_classes
 syntax keyword pfmainConf owner_request_special
 syntax keyword pfmainConf parent_domain_matches_subdomains
 syntax keyword pfmainConf permit_mx_backup_networks
 syntax keyword pfmainConf pickup_service_name
 syntax keyword pfmainConf plaintext_reject_code
+syntax keyword pfmainConf postmulti_control_commands
+syntax keyword pfmainConf postmulti_start_commands
+syntax keyword pfmainConf postmulti_stop_commands
+syntax keyword pfmainConf postscreen_access_list
+syntax keyword pfmainConf postscreen_bare_newline_action
+syntax keyword pfmainConf postscreen_bare_newline_enable
+syntax keyword pfmainConf postscreen_bare_newline_ttl
+syntax keyword pfmainConf postscreen_blacklist_action
+syntax keyword pfmainConf postscreen_cache_cleanup_interval
+syntax keyword pfmainConf postscreen_cache_map
+syntax keyword pfmainConf postscreen_cache_retention_time
+syntax keyword pfmainConf postscreen_client_connection_count_limit
+syntax keyword pfmainConf postscreen_command_count_limit
+syntax keyword pfmainConf postscreen_command_filter
+syntax keyword pfmainConf postscreen_command_time_limit
+syntax keyword pfmainConf postscreen_disable_vrfy_command
+syntax keyword pfmainConf postscreen_discard_ehlo_keyword_address_maps
+syntax keyword pfmainConf postscreen_discard_ehlo_keywords
+syntax keyword pfmainConf postscreen_dnsbl_action
+syntax keyword pfmainConf postscreen_dnsbl_reply_map
+syntax keyword pfmainConf postscreen_dnsbl_sites
+syntax keyword pfmainConf postscreen_dnsbl_threshold
+syntax keyword pfmainConf postscreen_dnsbl_ttl
+syntax keyword pfmainConf postscreen_enforce_tls
+syntax keyword pfmainConf postscreen_expansion_filter
+syntax keyword pfmainConf postscreen_forbidden_commands
+syntax keyword pfmainConf postscreen_greet_action
+syntax keyword pfmainConf postscreen_greet_banner
+syntax keyword pfmainConf postscreen_greet_ttl
+syntax keyword pfmainConf postscreen_greet_wait
+syntax keyword pfmainConf postscreen_helo_required
+syntax keyword pfmainConf postscreen_non_smtp_command_action
+syntax keyword pfmainConf postscreen_non_smtp_command_enable
+syntax keyword pfmainConf postscreen_non_smtp_command_ttl
+syntax keyword pfmainConf postscreen_pipelining_action
+syntax keyword pfmainConf postscreen_pipelining_enable
+syntax keyword pfmainConf postscreen_pipelining_ttl
+syntax keyword pfmainConf postscreen_post_queue_limit
+syntax keyword pfmainConf postscreen_pre_queue_limit
+syntax keyword pfmainConf postscreen_reject_footer
+syntax keyword pfmainConf postscreen_tls_security_level
+syntax keyword pfmainConf postscreen_use_tls
+syntax keyword pfmainConf postscreen_watchdog_timeout
+syntax keyword pfmainConf postscreen_whitelist_interfaces
 syntax keyword pfmainConf prepend_delivered_header
+syntax keyword pfmainConf process_id
 syntax keyword pfmainConf process_id_directory
+syntax keyword pfmainConf process_name
 syntax keyword pfmainConf propagate_unmatched_extensions
 syntax keyword pfmainConf proxy_interfaces
 syntax keyword pfmainConf proxy_read_maps
+syntax keyword pfmainConf proxy_write_maps
+syntax keyword pfmainConf proxymap_service_name
+syntax keyword pfmainConf proxywrite_service_name
 syntax keyword pfmainConf qmgr_clog_warn_time
 syntax keyword pfmainConf qmgr_fudge_factor
 syntax keyword pfmainConf qmgr_message_active_limit
 syntax keyword pfmainConf qmgr_message_recipient_limit
 syntax keyword pfmainConf qmgr_message_recipient_minimum
 syntax keyword pfmainConf qmqpd_authorized_clients
+syntax keyword pfmainConf qmqpd_client_port_logging
 syntax keyword pfmainConf qmqpd_error_delay
 syntax keyword pfmainConf qmqpd_timeout
 syntax keyword pfmainConf queue_directory
@@ -285,6 +416,7 @@
 syntax keyword pfmainConf recipient_canonical_maps
 syntax keyword pfmainConf recipient_delimiter
 syntax keyword pfmainConf reject_code
+syntax keyword pfmainConf reject_tempfail_action
 syntax keyword pfmainConf relay_clientcerts
 syntax keyword pfmainConf relay_destination_concurrency_limit
 syntax keyword pfmainConf relay_destination_recipient_limit
@@ -296,23 +428,28 @@
 syntax keyword pfmainConf relocated_maps
 syntax keyword pfmainConf remote_header_rewrite_domain
 syntax keyword pfmainConf require_home_directory
+syntax keyword pfmainConf reset_owner_alias
 syntax keyword pfmainConf resolve_dequoted_address
 syntax keyword pfmainConf resolve_null_domain
 syntax keyword pfmainConf resolve_numeric_domain
 syntax keyword pfmainConf rewrite_service_name
 syntax keyword pfmainConf sample_directory
+syntax keyword pfmainConf send_cyrus_sasl_authzid
 syntax keyword pfmainConf sender_bcc_maps
 syntax keyword pfmainConf sender_canonical_classes
 syntax keyword pfmainConf sender_canonical_maps
+syntax keyword pfmainConf sender_dependent_default_transport_maps
 syntax keyword pfmainConf sender_dependent_relayhost_maps
 syntax keyword pfmainConf sendmail_path
 syntax keyword pfmainConf service_throttle_time
 syntax keyword pfmainConf setgid_group
 syntax keyword pfmainConf show_user_unknown_table_name
 syntax keyword pfmainConf showq_service_name
+syntax keyword pfmainConf smtp_address_preference
 syntax keyword pfmainConf smtp_always_send_ehlo
 syntax keyword pfmainConf smtp_bind_address
 syntax keyword pfmainConf smtp_bind_address6
+syntax keyword pfmainConf smtp_body_checks
 syntax keyword pfmainConf smtp_cname_overrides_servername
 syntax keyword pfmainConf smtp_connect_timeout
 syntax keyword pfmainConf smtp_connection_cache_destinations
@@ -327,25 +464,35 @@
 syntax keyword pfmainConf smtp_destination_recipient_limit
 syntax keyword pfmainConf smtp_discard_ehlo_keyword_address_maps
 syntax keyword pfmainConf smtp_discard_ehlo_keywords
+syntax keyword pfmainConf smtp_dns_resolver_options
 syntax keyword pfmainConf smtp_enforce_tls
 syntax keyword pfmainConf smtp_fallback_relay
 syntax keyword pfmainConf smtp_generic_maps
+syntax keyword pfmainConf smtp_header_checks
 syntax keyword pfmainConf smtp_helo_name
 syntax keyword pfmainConf smtp_helo_timeout
 syntax keyword pfmainConf smtp_host_lookup
 syntax keyword pfmainConf smtp_line_length_limit
 syntax keyword pfmainConf smtp_mail_timeout
+syntax keyword pfmainConf smtp_mime_header_checks
 syntax keyword pfmainConf smtp_mx_address_limit
 syntax keyword pfmainConf smtp_mx_session_limit
+syntax keyword pfmainConf smtp_nested_header_checks
 syntax keyword pfmainConf smtp_never_send_ehlo
 syntax keyword pfmainConf smtp_pix_workaround_delay_time
+syntax keyword pfmainConf smtp_pix_workaround_maps
 syntax keyword pfmainConf smtp_pix_workaround_threshold_time
+syntax keyword pfmainConf smtp_pix_workarounds
 syntax keyword pfmainConf smtp_quit_timeout
 syntax keyword pfmainConf smtp_quote_rfc821_envelope
 syntax keyword pfmainConf smtp_randomize_addresses
 syntax keyword pfmainConf smtp_rcpt_timeout
+syntax keyword pfmainConf smtp_reply_filter
 syntax keyword pfmainConf smtp_rset_timeout
+syntax keyword pfmainConf smtp_sasl_auth_cache_name
+syntax keyword pfmainConf smtp_sasl_auth_cache_time
 syntax keyword pfmainConf smtp_sasl_auth_enable
+syntax keyword pfmainConf smtp_sasl_auth_soft_bounce
 syntax keyword pfmainConf smtp_sasl_mechanism_filter
 syntax keyword pfmainConf smtp_sasl_password_maps
 syntax keyword pfmainConf smtp_sasl_path
@@ -360,18 +507,33 @@
 syntax keyword pfmainConf smtp_starttls_timeout
 syntax keyword pfmainConf smtp_tls_CAfile
 syntax keyword pfmainConf smtp_tls_CApath
+syntax keyword pfmainConf smtp_tls_block_early_mail_reply
 syntax keyword pfmainConf smtp_tls_cert_file
 syntax keyword pfmainConf smtp_tls_cipherlist
+syntax keyword pfmainConf smtp_tls_ciphers
 syntax keyword pfmainConf smtp_tls_dcert_file
 syntax keyword pfmainConf smtp_tls_dkey_file
+syntax keyword pfmainConf smtp_tls_eccert_file
+syntax keyword pfmainConf smtp_tls_eckey_file
 syntax keyword pfmainConf smtp_tls_enforce_peername
+syntax keyword pfmainConf smtp_tls_exclude_ciphers
+syntax keyword pfmainConf smtp_tls_fingerprint_cert_match
+syntax keyword pfmainConf smtp_tls_fingerprint_digest
 syntax keyword pfmainConf smtp_tls_key_file
 syntax keyword pfmainConf smtp_tls_loglevel
+syntax keyword pfmainConf smtp_tls_mandatory_ciphers
+syntax keyword pfmainConf smtp_tls_mandatory_exclude_ciphers
+syntax keyword pfmainConf smtp_tls_mandatory_protocols
 syntax keyword pfmainConf smtp_tls_note_starttls_offer
 syntax keyword pfmainConf smtp_tls_per_site
+syntax keyword pfmainConf smtp_tls_policy_maps
+syntax keyword pfmainConf smtp_tls_protocols
 syntax keyword pfmainConf smtp_tls_scert_verifydepth
+syntax keyword pfmainConf smtp_tls_secure_cert_match
+syntax keyword pfmainConf smtp_tls_security_level
 syntax keyword pfmainConf smtp_tls_session_cache_database
 syntax keyword pfmainConf smtp_tls_session_cache_timeout
+syntax keyword pfmainConf smtp_tls_verify_cert_match
 syntax keyword pfmainConf smtp_use_tls
 syntax keyword pfmainConf smtp_xforward_timeout
 syntax keyword pfmainConf smtpd_authorized_verp_clients
@@ -383,8 +545,10 @@
 syntax keyword pfmainConf smtpd_client_event_limit_exceptions
 syntax keyword pfmainConf smtpd_client_message_rate_limit
 syntax keyword pfmainConf smtpd_client_new_tls_session_rate_limit
+syntax keyword pfmainConf smtpd_client_port_logging
 syntax keyword pfmainConf smtpd_client_recipient_rate_limit
 syntax keyword pfmainConf smtpd_client_restrictions
+syntax keyword pfmainConf smtpd_command_filter
 syntax keyword pfmainConf smtpd_data_restrictions
 syntax keyword pfmainConf smtpd_delay_open_until_valid_rcpt
 syntax keyword pfmainConf smtpd_delay_reject
@@ -401,18 +565,22 @@
 syntax keyword pfmainConf smtpd_helo_restrictions
 syntax keyword pfmainConf smtpd_history_flush_threshold
 syntax keyword pfmainConf smtpd_junk_command_limit
+syntax keyword pfmainConf smtpd_milters
 syntax keyword pfmainConf smtpd_noop_commands
 syntax keyword pfmainConf smtpd_null_access_lookup_key
 syntax keyword pfmainConf smtpd_peername_lookup
+syntax keyword pfmainConf smtpd_per_record_deadline
 syntax keyword pfmainConf smtpd_policy_service_max_idle
 syntax keyword pfmainConf smtpd_policy_service_max_ttl
 syntax keyword pfmainConf smtpd_policy_service_timeout
 syntax keyword pfmainConf smtpd_proxy_ehlo
 syntax keyword pfmainConf smtpd_proxy_filter
+syntax keyword pfmainConf smtpd_proxy_options
 syntax keyword pfmainConf smtpd_proxy_timeout
 syntax keyword pfmainConf smtpd_recipient_limit
 syntax keyword pfmainConf smtpd_recipient_overshoot_limit
 syntax keyword pfmainConf smtpd_recipient_restrictions
+syntax keyword pfmainConf smtpd_reject_footer
 syntax keyword pfmainConf smtpd_reject_unlisted_recipient
 syntax keyword pfmainConf smtpd_reject_unlisted_sender
 syntax keyword pfmainConf smtpd_restriction_classes
@@ -426,59 +594,142 @@
 syntax keyword pfmainConf smtpd_sasl_type
 syntax keyword pfmainConf smtpd_sender_login_maps
 syntax keyword pfmainConf smtpd_sender_restrictions
+syntax keyword pfmainConf smtpd_service_name
 syntax keyword pfmainConf smtpd_soft_error_limit
 syntax keyword pfmainConf smtpd_starttls_timeout
 syntax keyword pfmainConf smtpd_timeout
 syntax keyword pfmainConf smtpd_tls_CAfile
 syntax keyword pfmainConf smtpd_tls_CApath
+syntax keyword pfmainConf smtpd_tls_always_issue_session_ids
 syntax keyword pfmainConf smtpd_tls_ask_ccert
 syntax keyword pfmainConf smtpd_tls_auth_only
 syntax keyword pfmainConf smtpd_tls_ccert_verifydepth
 syntax keyword pfmainConf smtpd_tls_cert_file
 syntax keyword pfmainConf smtpd_tls_cipherlist
+syntax keyword pfmainConf smtpd_tls_ciphers
 syntax keyword pfmainConf smtpd_tls_dcert_file
 syntax keyword pfmainConf smtpd_tls_dh1024_param_file
 syntax keyword pfmainConf smtpd_tls_dh512_param_file
 syntax keyword pfmainConf smtpd_tls_dkey_file
+syntax keyword pfmainConf smtpd_tls_eccert_file
+syntax keyword pfmainConf smtpd_tls_eckey_file
+syntax keyword pfmainConf smtpd_tls_eecdh_grade
+syntax keyword pfmainConf smtpd_tls_exclude_ciphers
+syntax keyword pfmainConf smtpd_tls_fingerprint_digest
 syntax keyword pfmainConf smtpd_tls_key_file
 syntax keyword pfmainConf smtpd_tls_loglevel
+syntax keyword pfmainConf smtpd_tls_mandatory_ciphers
+syntax keyword pfmainConf smtpd_tls_mandatory_exclude_ciphers
+syntax keyword pfmainConf smtpd_tls_mandatory_protocols
+syntax keyword pfmainConf smtpd_tls_protocols
 syntax keyword pfmainConf smtpd_tls_received_header
 syntax keyword pfmainConf smtpd_tls_req_ccert
+syntax keyword pfmainConf smtpd_tls_security_level
 syntax keyword pfmainConf smtpd_tls_session_cache_database
 syntax keyword pfmainConf smtpd_tls_session_cache_timeout
 syntax keyword pfmainConf smtpd_tls_wrappermode
 syntax keyword pfmainConf smtpd_use_tls
 syntax keyword pfmainConf soft_bounce
 syntax keyword pfmainConf stale_lock_time
+syntax keyword pfmainConf stress
 syntax keyword pfmainConf strict_7bit_headers
 syntax keyword pfmainConf strict_8bitmime
 syntax keyword pfmainConf strict_8bitmime_body
 syntax keyword pfmainConf strict_mime_encoding_domain
 syntax keyword pfmainConf strict_rfc821_envelopes
+syntax keyword pfmainConf strict_7bit_headers
+syntax keyword pfmainConf strict_8bitmime
+syntax keyword pfmainConf strict_8bitmime_body
+syntax keyword pfmainConf strict_mailbox_ownership
+syntax keyword pfmainConf strict_mime_encoding_domain
+syntax keyword pfmainConf strict_rfc821_envelopes
 syntax keyword pfmainConf sun_mailtool_compatibility
 syntax keyword pfmainConf swap_bangpath
 syntax keyword pfmainConf syslog_facility
 syntax keyword pfmainConf syslog_name
+syntax keyword pfmainConf tcp_windowsize
+syntax keyword pfmainConf tls_append_default_CA
 syntax keyword pfmainConf tls_daemon_random_bytes
+syntax keyword pfmainConf tls_disable_workarounds
+syntax keyword pfmainConf tls_eecdh_strong_curve
+syntax keyword pfmainConf tls_eecdh_ultra_curve
+syntax keyword pfmainConf tls_export_cipherlist
+syntax keyword pfmainConf tls_high_cipherlist
+syntax keyword pfmainConf tls_low_cipherlist
+syntax keyword pfmainConf tls_medium_cipherlist
+syntax keyword pfmainConf tls_null_cipherlist
+syntax keyword pfmainConf tls_preempt_cipherlist
 syntax keyword pfmainConf tls_random_bytes
 syntax keyword pfmainConf tls_random_exchange_name
 syntax keyword pfmainConf tls_random_prng_update_period
 syntax keyword pfmainConf tls_random_reseed_period
 syntax keyword pfmainConf tls_random_source
+syntax keyword pfmainConf tlsproxy_enforce_tls
+syntax keyword pfmainConf tlsproxy_service_name
+syntax keyword pfmainConf tlsproxy_tls_CAfile
+syntax keyword pfmainConf tlsproxy_tls_CApath
+syntax keyword pfmainConf tlsproxy_tls_always_issue_session_ids
+syntax keyword pfmainConf tlsproxy_tls_ask_ccert
+syntax keyword pfmainConf tlsproxy_tls_ccert_verifydepth
+syntax keyword pfmainConf tlsproxy_tls_cert_file
+syntax keyword pfmainConf tlsproxy_tls_ciphers
+syntax keyword pfmainConf tlsproxy_tls_dcert_file
+syntax keyword pfmainConf tlsproxy_tls_dh1024_param_file
+syntax keyword pfmainConf tlsproxy_tls_dh512_param_file
+syntax keyword pfmainConf tlsproxy_tls_dkey_file
+syntax keyword pfmainConf tlsproxy_tls_eccert_file
+syntax keyword pfmainConf tlsproxy_tls_eckey_file
+syntax keyword pfmainConf tlsproxy_tls_eecdh_grade
+syntax keyword pfmainConf tlsproxy_tls_exclude_ciphers
+syntax keyword pfmainConf tlsproxy_tls_fingerprint_digest
+syntax keyword pfmainConf tlsproxy_tls_key_file
+syntax keyword pfmainConf tlsproxy_tls_loglevel
+syntax keyword pfmainConf tlsproxy_tls_mandatory_ciphers
+syntax keyword pfmainConf tlsproxy_tls_mandatory_exclude_ciphers
+syntax keyword pfmainConf tlsproxy_tls_mandatory_protocols
+syntax keyword pfmainConf tlsproxy_tls_protocols
+syntax keyword pfmainConf tlsproxy_tls_req_ccert
+syntax keyword pfmainConf tlsproxy_tls_security_level
+syntax keyword pfmainConf tlsproxy_tls_session_cache_timeout
+syntax keyword pfmainConf tlsproxy_use_tls
+syntax keyword pfmainConf tlsproxy_watchdog_timeout
 syntax keyword pfmainConf trace_service_name
+syntax keyword pfmainConf transport_delivery_slot_cost
+syntax keyword pfmainConf transport_delivery_slot_discount
+syntax keyword pfmainConf transport_delivery_slot_loan
+syntax keyword pfmainConf transport_destination_concurrency_failed_cohort_limit
+syntax keyword pfmainConf transport_destination_concurrency_limit
+syntax keyword pfmainConf transport_destination_concurrency_negative_feedback
+syntax keyword pfmainConf transport_destination_concurrency_positive_feedback
+syntax keyword pfmainConf transport_destination_rate_delay
+syntax keyword pfmainConf transport_destination_recipient_limit
+syntax keyword pfmainConf transport_extra_recipient_limit
+syntax keyword pfmainConf transport_initial_destination_concurrency
 syntax keyword pfmainConf transport_maps
+syntax keyword pfmainConf transport_minimum_delivery_slots
+syntax keyword pfmainConf transport_recipient_limit
+syntax keyword pfmainConf transport_recipient_refill_delay
+syntax keyword pfmainConf transport_recipient_refill_limit
 syntax keyword pfmainConf transport_retry_time
 syntax keyword pfmainConf trigger_timeout
 syntax keyword pfmainConf undisclosed_recipients_header
 syntax keyword pfmainConf unknown_address_reject_code
+syntax keyword pfmainConf unknown_address_tempfail_action
 syntax keyword pfmainConf unknown_client_reject_code
+syntax keyword pfmainConf unknown_helo_hostname_tempfail_action
 syntax keyword pfmainConf unknown_hostname_reject_code
 syntax keyword pfmainConf unknown_local_recipient_reject_code
 syntax keyword pfmainConf unknown_relay_recipient_reject_code
 syntax keyword pfmainConf unknown_virtual_alias_reject_code
 syntax keyword pfmainConf unknown_virtual_mailbox_reject_code
+syntax keyword pfmainConf unverified_recipient_defer_code
 syntax keyword pfmainConf unverified_recipient_reject_code
+syntax keyword pfmainConf unverified_recipient_reject_reason
+syntax keyword pfmainConf unverified_recipient_tempfail_action
+syntax keyword pfmainConf unverified_sender_defer_code
 syntax keyword pfmainConf unverified_sender_reject_code
+syntax keyword pfmainConf unverified_sender_reject_reason
+syntax keyword pfmainConf unverified_sender_tempfail_action
 syntax keyword pfmainConf verp_delimiter_filter
 syntax keyword pfmainConf virtual_alias_domains
 syntax keyword pfmainConf virtual_alias_expansion_limit
@@ -496,7 +747,9 @@
 syntax keyword pfmainConf virtual_transport
 syntax keyword pfmainConf virtual_uid_maps
 syntax match pfmainRef "$\<2bounce_notice_recipient\>"
+syntax match pfmainRef "$\<access_map_defer_code\>"
 syntax match pfmainRef "$\<access_map_reject_code\>"
+syntax match pfmainRef "$\<address_verify_cache_cleanup_interval\>"
 syntax match pfmainRef "$\<address_verify_default_transport\>"
 syntax match pfmainRef "$\<address_verify_local_transport\>"
 syntax match pfmainRef "$\<address_verify_map\>"
@@ -510,6 +763,7 @@
 syntax match pfmainRef "$\<address_verify_relay_transport\>"
 syntax match pfmainRef "$\<address_verify_relayhost\>"
 syntax match pfmainRef "$\<address_verify_sender\>"
+syntax match pfmainRef "$\<address_verify_sender_dependent_default_transport_maps\>"
 syntax match pfmainRef "$\<address_verify_sender_dependent_relayhost_maps\>"
 syntax match pfmainRef "$\<address_verify_service_name\>"
 syntax match pfmainRef "$\<address_verify_transport_maps\>"
@@ -557,22 +811,31 @@
 syntax match pfmainRef "$\<connection_cache_status_update_time\>"
 syntax match pfmainRef "$\<connection_cache_ttl_limit\>"
 syntax match pfmainRef "$\<content_filter\>"
+syntax match pfmainRef "$\<cyrus_sasl_config_path\>"
 syntax match pfmainRef "$\<daemon_directory\>"
 syntax match pfmainRef "$\<daemon_timeout\>"
+syntax match pfmainRef "$\<data_directory\>"
 syntax match pfmainRef "$\<debug_peer_level\>"
 syntax match pfmainRef "$\<debug_peer_list\>"
 syntax match pfmainRef "$\<default_database_type\>"
 syntax match pfmainRef "$\<default_delivery_slot_cost\>"
 syntax match pfmainRef "$\<default_delivery_slot_discount\>"
 syntax match pfmainRef "$\<default_delivery_slot_loan\>"
+syntax match pfmainRef "$\<default_destination_concurrency_failed_cohort_limit\>"
 syntax match pfmainRef "$\<default_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<default_destination_concurrency_negative_feedback\>"
+syntax match pfmainRef "$\<default_destination_concurrency_positive_feedback\>"
+syntax match pfmainRef "$\<default_destination_rate_delay\>"
 syntax match pfmainRef "$\<default_destination_recipient_limit\>"
 syntax match pfmainRef "$\<default_extra_recipient_limit\>"
+syntax match pfmainRef "$\<default_filter_nexthop\>"
 syntax match pfmainRef "$\<default_minimum_delivery_slots\>"
 syntax match pfmainRef "$\<default_privs\>"
 syntax match pfmainRef "$\<default_process_limit\>"
 syntax match pfmainRef "$\<default_rbl_reply\>"
 syntax match pfmainRef "$\<default_recipient_limit\>"
+syntax match pfmainRef "$\<default_recipient_refill_delay\>"
+syntax match pfmainRef "$\<default_recipient_refill_limit\>"
 syntax match pfmainRef "$\<default_transport\>"
 syntax match pfmainRef "$\<default_verp_delimiters\>"
 syntax match pfmainRef "$\<defer_code\>"
@@ -583,15 +846,22 @@
 syntax match pfmainRef "$\<delay_warning_time\>"
 syntax match pfmainRef "$\<deliver_lock_attempts\>"
 syntax match pfmainRef "$\<deliver_lock_delay\>"
+syntax match pfmainRef "$\<destination_concurrency_feedback_debug\>"
+syntax match pfmainRef "$\<detect_8bit_encoding_header\>"
 syntax match pfmainRef "$\<disable_dns_lookups\>"
 syntax match pfmainRef "$\<disable_mime_input_processing\>"
 syntax match pfmainRef "$\<disable_mime_output_conversion\>"
 syntax match pfmainRef "$\<disable_verp_bounces\>"
 syntax match pfmainRef "$\<disable_vrfy_command\>"
+syntax match pfmainRef "$\<dnsblog_reply_delay\>"
+syntax match pfmainRef "$\<dnsblog_service_name\>"
 syntax match pfmainRef "$\<dont_remove\>"
 syntax match pfmainRef "$\<double_bounce_sender\>"
 syntax match pfmainRef "$\<duplicate_filter_limit\>"
+syntax match pfmainRef "$\<empty_address_default_transport_maps_lookup_key\>"
 syntax match pfmainRef "$\<empty_address_recipient\>"
+syntax match pfmainRef "$\<empty_address_relayhost_maps_lookup_key\>"
+syntax match pfmainRef "$\<enable_long_queue_ids\>"
 syntax match pfmainRef "$\<enable_original_recipient\>"
 syntax match pfmainRef "$\<error_notice_recipient\>"
 syntax match pfmainRef "$\<error_service_name\>"
@@ -625,13 +895,16 @@
 syntax match pfmainRef "$\<inet_interfaces\>"
 syntax match pfmainRef "$\<inet_protocols\>"
 syntax match pfmainRef "$\<initial_destination_concurrency\>"
+syntax match pfmainRef "$\<internal_mail_filter_classes\>"
 syntax match pfmainRef "$\<invalid_hostname_reject_code\>"
 syntax match pfmainRef "$\<ipc_idle\>"
 syntax match pfmainRef "$\<ipc_timeout\>"
 syntax match pfmainRef "$\<ipc_ttl\>"
 syntax match pfmainRef "$\<line_length_limit\>"
+syntax match pfmainRef "$\<lmtp_address_preference\>"
 syntax match pfmainRef "$\<lmtp_bind_address\>"
 syntax match pfmainRef "$\<lmtp_bind_address6\>"
+syntax match pfmainRef "$\<lmtp_body_checks\>"
 syntax match pfmainRef "$\<lmtp_cname_overrides_servername\>"
 syntax match pfmainRef "$\<lmtp_connect_timeout\>"
 syntax match pfmainRef "$\<lmtp_connection_cache_destinations\>"
@@ -646,23 +919,34 @@
 syntax match pfmainRef "$\<lmtp_destination_recipient_limit\>"
 syntax match pfmainRef "$\<lmtp_discard_lhlo_keyword_address_maps\>"
 syntax match pfmainRef "$\<lmtp_discard_lhlo_keywords\>"
+syntax match pfmainRef "$\<lmtp_dns_resolver_options\>"
 syntax match pfmainRef "$\<lmtp_enforce_tls\>"
 syntax match pfmainRef "$\<lmtp_generic_maps\>"
+syntax match pfmainRef "$\<lmtp_header_checks\>"
 syntax match pfmainRef "$\<lmtp_host_lookup\>"
 syntax match pfmainRef "$\<lmtp_lhlo_name\>"
 syntax match pfmainRef "$\<lmtp_lhlo_timeout\>"
 syntax match pfmainRef "$\<lmtp_line_length_limit\>"
 syntax match pfmainRef "$\<lmtp_mail_timeout\>"
+syntax match pfmainRef "$\<lmtp_mime_header_checks\>"
 syntax match pfmainRef "$\<lmtp_mx_address_limit\>"
 syntax match pfmainRef "$\<lmtp_mx_session_limit\>"
+syntax match pfmainRef "$\<lmtp_nested_header_checks\>"
+syntax match pfmainRef "$\<lmtp_per_record_deadline\>"
 syntax match pfmainRef "$\<lmtp_pix_workaround_delay_time\>"
+syntax match pfmainRef "$\<lmtp_pix_workaround_maps\>"
 syntax match pfmainRef "$\<lmtp_pix_workaround_threshold_time\>"
+syntax match pfmainRef "$\<lmtp_pix_workarounds\>"
 syntax match pfmainRef "$\<lmtp_quit_timeout\>"
 syntax match pfmainRef "$\<lmtp_quote_rfc821_envelope\>"
 syntax match pfmainRef "$\<lmtp_randomize_addresses\>"
 syntax match pfmainRef "$\<lmtp_rcpt_timeout\>"
+syntax match pfmainRef "$\<lmtp_reply_filter\>"
 syntax match pfmainRef "$\<lmtp_rset_timeout\>"
+syntax match pfmainRef "$\<lmtp_sasl_auth_cache_name\>"
+syntax match pfmainRef "$\<lmtp_sasl_auth_cache_time\>"
 syntax match pfmainRef "$\<lmtp_sasl_auth_enable\>"
+syntax match pfmainRef "$\<lmtp_sasl_auth_soft_bounce\>"
 syntax match pfmainRef "$\<lmtp_sasl_mechanism_filter\>"
 syntax match pfmainRef "$\<lmtp_sasl_password_maps\>"
 syntax match pfmainRef "$\<lmtp_sasl_path\>"
@@ -675,10 +959,31 @@
 syntax match pfmainRef "$\<lmtp_skip_5xx_greeting\>"
 syntax match pfmainRef "$\<lmtp_starttls_timeout\>"
 syntax match pfmainRef "$\<lmtp_tcp_port\>"
+syntax match pfmainRef "$\<lmtp_tls_CAfile\>"
+syntax match pfmainRef "$\<lmtp_tls_CApath\>"
+syntax match pfmainRef "$\<lmtp_tls_block_early_mail_reply\>"
+syntax match pfmainRef "$\<lmtp_tls_cert_file\>"
+syntax match pfmainRef "$\<lmtp_tls_ciphers\>"
+syntax match pfmainRef "$\<lmtp_tls_dcert_file\>"
+syntax match pfmainRef "$\<lmtp_tls_dkey_file\>"
+syntax match pfmainRef "$\<lmtp_tls_eccert_file\>"
+syntax match pfmainRef "$\<lmtp_tls_eckey_file\>"
 syntax match pfmainRef "$\<lmtp_tls_enforce_peername\>"
+syntax match pfmainRef "$\<lmtp_tls_exclude_ciphers\>"
+syntax match pfmainRef "$\<lmtp_tls_fingerprint_cert_match\>"
+syntax match pfmainRef "$\<lmtp_tls_fingerprint_digest\>"
+syntax match pfmainRef "$\<lmtp_tls_key_file\>"
+syntax match pfmainRef "$\<lmtp_tls_loglevel\>"
+syntax match pfmainRef "$\<lmtp_tls_mandatory_ciphers\>"
+syntax match pfmainRef "$\<lmtp_tls_mandatory_exclude_ciphers\>"
+syntax match pfmainRef "$\<lmtp_tls_mandatory_protocols\>"
 syntax match pfmainRef "$\<lmtp_tls_note_starttls_offer\>"
 syntax match pfmainRef "$\<lmtp_tls_per_site\>"
+syntax match pfmainRef "$\<lmtp_tls_policy_maps\>"
+syntax match pfmainRef "$\<lmtp_tls_protocols\>"
 syntax match pfmainRef "$\<lmtp_tls_scert_verifydepth\>"
+syntax match pfmainRef "$\<lmtp_tls_session_cache_timeout\>"
+syntax match pfmainRef "$\<lmtp_tls_verify_cert_match\>"
 syntax match pfmainRef "$\<lmtp_use_tls\>"
 syntax match pfmainRef "$\<lmtp_xforward_timeout\>"
 syntax match pfmainRef "$\<local_command_shell\>"
@@ -703,6 +1008,7 @@
 syntax match pfmainRef "$\<manpage_directory\>"
 syntax match pfmainRef "$\<maps_rbl_domains\>"
 syntax match pfmainRef "$\<maps_rbl_reject_code\>"
+syntax match pfmainRef "$\<master_service_disable\>"
 syntax match pfmainRef "$\<masquerade_classes\>"
 syntax match pfmainRef "$\<masquerade_domains\>"
 syntax match pfmainRef "$\<masquerade_exceptions\>"
@@ -713,10 +1019,31 @@
 syntax match pfmainRef "$\<message_reject_characters\>"
 syntax match pfmainRef "$\<message_size_limit\>"
 syntax match pfmainRef "$\<message_strip_characters\>"
+syntax match pfmainRef "$\<milter_command_timeout\>"
+syntax match pfmainRef "$\<milter_connect_macros\>"
+syntax match pfmainRef "$\<milter_connect_timeout\>"
+syntax match pfmainRef "$\<milter_content_timeout\>"
+syntax match pfmainRef "$\<milter_data_macros\>"
+syntax match pfmainRef "$\<milter_default_action\>"
+syntax match pfmainRef "$\<milter_end_of_data_macros\>"
+syntax match pfmainRef "$\<milter_end_of_header_macros\>"
+syntax match pfmainRef "$\<milter_header_checks\>"
+syntax match pfmainRef "$\<milter_helo_macros\>"
+syntax match pfmainRef "$\<milter_macro_daemon_name\>"
+syntax match pfmainRef "$\<milter_macro_v\>"
+syntax match pfmainRef "$\<milter_mail_macros\>"
+syntax match pfmainRef "$\<milter_protocol\>"
+syntax match pfmainRef "$\<milter_rcpt_macros\>"
+syntax match pfmainRef "$\<milter_unknown_command_macros\>"
 syntax match pfmainRef "$\<mime_boundary_length_limit\>"
 syntax match pfmainRef "$\<mime_header_checks\>"
 syntax match pfmainRef "$\<mime_nesting_limit\>"
 syntax match pfmainRef "$\<minimal_backoff_time\>"
+syntax match pfmainRef "$\<multi_instance_directories\>"
+syntax match pfmainRef "$\<multi_instance_enable\>"
+syntax match pfmainRef "$\<multi_instance_group\>"
+syntax match pfmainRef "$\<multi_instance_name\>"
+syntax match pfmainRef "$\<multi_instance_wrapper\>"
 syntax match pfmainRef "$\<multi_recipient_bounce_reject_code\>"
 syntax match pfmainRef "$\<mydestination\>"
 syntax match pfmainRef "$\<mydomain\>"
@@ -727,23 +1054,77 @@
 syntax match pfmainRef "$\<nested_header_checks\>"
 syntax match pfmainRef "$\<newaliases_path\>"
 syntax match pfmainRef "$\<non_fqdn_reject_code\>"
+syntax match pfmainRef "$\<non_smtpd_milters\>"
 syntax match pfmainRef "$\<notify_classes\>"
 syntax match pfmainRef "$\<owner_request_special\>"
 syntax match pfmainRef "$\<parent_domain_matches_subdomains\>"
 syntax match pfmainRef "$\<permit_mx_backup_networks\>"
 syntax match pfmainRef "$\<pickup_service_name\>"
 syntax match pfmainRef "$\<plaintext_reject_code\>"
+syntax match pfmainRef "$\<postmulti_control_commands\>"
+syntax match pfmainRef "$\<postmulti_start_commands\>"
+syntax match pfmainRef "$\<postmulti_stop_commands\>"
+syntax match pfmainRef "$\<postscreen_access_list\>"
+syntax match pfmainRef "$\<postscreen_bare_newline_action\>"
+syntax match pfmainRef "$\<postscreen_bare_newline_enable\>"
+syntax match pfmainRef "$\<postscreen_bare_newline_ttl\>"
+syntax match pfmainRef "$\<postscreen_blacklist_action\>"
+syntax match pfmainRef "$\<postscreen_cache_cleanup_interval\>"
+syntax match pfmainRef "$\<postscreen_cache_map\>"
+syntax match pfmainRef "$\<postscreen_cache_retention_time\>"
+syntax match pfmainRef "$\<postscreen_client_connection_count_limit\>"
+syntax match pfmainRef "$\<postscreen_command_count_limit\>"
+syntax match pfmainRef "$\<postscreen_command_filter\>"
+syntax match pfmainRef "$\<postscreen_command_time_limit\>"
+syntax match pfmainRef "$\<postscreen_disable_vrfy_command\>"
+syntax match pfmainRef "$\<postscreen_discard_ehlo_keyword_address_maps\>"
+syntax match pfmainRef "$\<postscreen_discard_ehlo_keywords\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_action\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_reply_map\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_sites\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_threshold\>"
+syntax match pfmainRef "$\<postscreen_dnsbl_ttl\>"
+syntax match pfmainRef "$\<postscreen_enforce_tls\>"
+syntax match pfmainRef "$\<postscreen_expansion_filter\>"
+syntax match pfmainRef "$\<postscreen_forbidden_commands\>"
+syntax match pfmainRef "$\<postscreen_greet_action\>"
+syntax match pfmainRef "$\<postscreen_greet_banner\>"
+syntax match pfmainRef "$\<postscreen_greet_ttl\>"
+syntax match pfmainRef "$\<postscreen_greet_wait\>"
+syntax match pfmainRef "$\<postscreen_helo_required\>"
+syntax match pfmainRef "$\<postscreen_non_smtp_command_action\>"
+syntax match pfmainRef "$\<postscreen_non_smtp_command_enable\>"
+syntax match pfmainRef "$\<postscreen_non_smtp_command_ttl\>"
+syntax match pfmainRef "$\<postscreen_pipelining_action\>"
+syntax match pfmainRef "$\<postscreen_pipelining_enable\>"
+syntax match pfmainRef "$\<postscreen_pipelining_ttl\>"
+syntax match pfmainRef "$\<postscreen_post_queue_limit\>"
+syntax match pfmainRef "$\<postscreen_pre_queue_limit\>"
+syntax match pfmainRef "$\<postscreen_reject_footer\>"
+syntax match pfmainRef "$\<postscreen_tls_security_level\>"
+syntax match pfmainRef "$\<lmtp_tls_secure_cert_match\>"
+syntax match pfmainRef "$\<lmtp_tls_security_level\>"
+syntax match pfmainRef "$\<lmtp_tls_session_cache_database\>"
+syntax match pfmainRef "$\<postscreen_use_tls\>"
+syntax match pfmainRef "$\<postscreen_watchdog_timeout\>"
+syntax match pfmainRef "$\<postscreen_whitelist_interfaces\>"
 syntax match pfmainRef "$\<prepend_delivered_header\>"
+syntax match pfmainRef "$\<process_id\>"
 syntax match pfmainRef "$\<process_id_directory\>"
+syntax match pfmainRef "$\<process_name\>"
 syntax match pfmainRef "$\<propagate_unmatched_extensions\>"
 syntax match pfmainRef "$\<proxy_interfaces\>"
 syntax match pfmainRef "$\<proxy_read_maps\>"
+syntax match pfmainRef "$\<proxy_write_maps\>"
+syntax match pfmainRef "$\<proxymap_service_name\>"
+syntax match pfmainRef "$\<proxywrite_service_name\>"
 syntax match pfmainRef "$\<qmgr_clog_warn_time\>"
 syntax match pfmainRef "$\<qmgr_fudge_factor\>"
 syntax match pfmainRef "$\<qmgr_message_active_limit\>"
 syntax match pfmainRef "$\<qmgr_message_recipient_limit\>"
 syntax match pfmainRef "$\<qmgr_message_recipient_minimum\>"
 syntax match pfmainRef "$\<qmqpd_authorized_clients\>"
+syntax match pfmainRef "$\<qmqpd_client_port_logging\>"
 syntax match pfmainRef "$\<qmqpd_error_delay\>"
 syntax match pfmainRef "$\<qmqpd_timeout\>"
 syntax match pfmainRef "$\<queue_directory\>"
@@ -759,6 +1140,7 @@
 syntax match pfmainRef "$\<recipient_canonical_maps\>"
 syntax match pfmainRef "$\<recipient_delimiter\>"
 syntax match pfmainRef "$\<reject_code\>"
+syntax match pfmainRef "$\<reject_tempfail_action\>"
 syntax match pfmainRef "$\<relay_clientcerts\>"
 syntax match pfmainRef "$\<relay_destination_concurrency_limit\>"
 syntax match pfmainRef "$\<relay_destination_recipient_limit\>"
@@ -770,23 +1152,28 @@
 syntax match pfmainRef "$\<relocated_maps\>"
 syntax match pfmainRef "$\<remote_header_rewrite_domain\>"
 syntax match pfmainRef "$\<require_home_directory\>"
+syntax match pfmainRef "$\<reset_owner_alias\>"
 syntax match pfmainRef "$\<resolve_dequoted_address\>"
 syntax match pfmainRef "$\<resolve_null_domain\>"
 syntax match pfmainRef "$\<resolve_numeric_domain\>"
 syntax match pfmainRef "$\<rewrite_service_name\>"
 syntax match pfmainRef "$\<sample_directory\>"
+syntax match pfmainRef "$\<send_cyrus_sasl_authzid\>"
 syntax match pfmainRef "$\<sender_bcc_maps\>"
 syntax match pfmainRef "$\<sender_canonical_classes\>"
 syntax match pfmainRef "$\<sender_canonical_maps\>"
+syntax match pfmainRef "$\<sender_dependent_default_transport_maps\>"
 syntax match pfmainRef "$\<sender_dependent_relayhost_maps\>"
 syntax match pfmainRef "$\<sendmail_path\>"
 syntax match pfmainRef "$\<service_throttle_time\>"
 syntax match pfmainRef "$\<setgid_group\>"
 syntax match pfmainRef "$\<show_user_unknown_table_name\>"
 syntax match pfmainRef "$\<showq_service_name\>"
+syntax match pfmainRef "$\<smtp_address_preference\>"
 syntax match pfmainRef "$\<smtp_always_send_ehlo\>"
 syntax match pfmainRef "$\<smtp_bind_address\>"
 syntax match pfmainRef "$\<smtp_bind_address6\>"
+syntax match pfmainRef "$\<smtp_body_checks\>"
 syntax match pfmainRef "$\<smtp_cname_overrides_servername\>"
 syntax match pfmainRef "$\<smtp_connect_timeout\>"
 syntax match pfmainRef "$\<smtp_connection_cache_destinations\>"
@@ -801,25 +1188,35 @@
 syntax match pfmainRef "$\<smtp_destination_recipient_limit\>"
 syntax match pfmainRef "$\<smtp_discard_ehlo_keyword_address_maps\>"
 syntax match pfmainRef "$\<smtp_discard_ehlo_keywords\>"
+syntax match pfmainRef "$\<smtp_dns_resolver_options\>"
 syntax match pfmainRef "$\<smtp_enforce_tls\>"
 syntax match pfmainRef "$\<smtp_fallback_relay\>"
 syntax match pfmainRef "$\<smtp_generic_maps\>"
+syntax match pfmainRef "$\<smtp_header_checks\>"
 syntax match pfmainRef "$\<smtp_helo_name\>"
 syntax match pfmainRef "$\<smtp_helo_timeout\>"
 syntax match pfmainRef "$\<smtp_host_lookup\>"
 syntax match pfmainRef "$\<smtp_line_length_limit\>"
 syntax match pfmainRef "$\<smtp_mail_timeout\>"
+syntax match pfmainRef "$\<smtp_mime_header_checks\>"
 syntax match pfmainRef "$\<smtp_mx_address_limit\>"
 syntax match pfmainRef "$\<smtp_mx_session_limit\>"
+syntax match pfmainRef "$\<smtp_nested_header_checks\>"
 syntax match pfmainRef "$\<smtp_never_send_ehlo\>"
 syntax match pfmainRef "$\<smtp_pix_workaround_delay_time\>"
+syntax match pfmainRef "$\<smtp_pix_workaround_maps\>"
 syntax match pfmainRef "$\<smtp_pix_workaround_threshold_time\>"
+syntax match pfmainRef "$\<smtp_pix_workarounds\>"
 syntax match pfmainRef "$\<smtp_quit_timeout\>"
 syntax match pfmainRef "$\<smtp_quote_rfc821_envelope\>"
 syntax match pfmainRef "$\<smtp_randomize_addresses\>"
 syntax match pfmainRef "$\<smtp_rcpt_timeout\>"
+syntax match pfmainRef "$\<smtp_reply_filter\>"
 syntax match pfmainRef "$\<smtp_rset_timeout\>"
+syntax match pfmainRef "$\<smtp_sasl_auth_cache_name\>"
+syntax match pfmainRef "$\<smtp_sasl_auth_cache_time\>"
 syntax match pfmainRef "$\<smtp_sasl_auth_enable\>"
+syntax match pfmainRef "$\<smtp_sasl_auth_soft_bounce\>"
 syntax match pfmainRef "$\<smtp_sasl_mechanism_filter\>"
 syntax match pfmainRef "$\<smtp_sasl_password_maps\>"
 syntax match pfmainRef "$\<smtp_sasl_path\>"
@@ -834,18 +1231,33 @@
 syntax match pfmainRef "$\<smtp_starttls_timeout\>"
 syntax match pfmainRef "$\<smtp_tls_CAfile\>"
 syntax match pfmainRef "$\<smtp_tls_CApath\>"
+syntax match pfmainRef "$\<smtp_tls_block_early_mail_reply\>"
 syntax match pfmainRef "$\<smtp_tls_cert_file\>"
 syntax match pfmainRef "$\<smtp_tls_cipherlist\>"
+syntax match pfmainRef "$\<smtp_tls_ciphers\>"
 syntax match pfmainRef "$\<smtp_tls_dcert_file\>"
 syntax match pfmainRef "$\<smtp_tls_dkey_file\>"
+syntax match pfmainRef "$\<smtp_tls_eccert_file\>"
+syntax match pfmainRef "$\<smtp_tls_eckey_file\>"
 syntax match pfmainRef "$\<smtp_tls_enforce_peername\>"
+syntax match pfmainRef "$\<smtp_tls_exclude_ciphers\>"
+syntax match pfmainRef "$\<smtp_tls_fingerprint_cert_match\>"
+syntax match pfmainRef "$\<smtp_tls_fingerprint_digest\>"
 syntax match pfmainRef "$\<smtp_tls_key_file\>"
 syntax match pfmainRef "$\<smtp_tls_loglevel\>"
+syntax match pfmainRef "$\<smtp_tls_mandatory_ciphers\>"
+syntax match pfmainRef "$\<smtp_tls_mandatory_exclude_ciphers\>"
+syntax match pfmainRef "$\<smtp_tls_mandatory_protocols\>"
 syntax match pfmainRef "$\<smtp_tls_note_starttls_offer\>"
 syntax match pfmainRef "$\<smtp_tls_per_site\>"
+syntax match pfmainRef "$\<smtp_tls_policy_maps\>"
+syntax match pfmainRef "$\<smtp_tls_protocols\>"
 syntax match pfmainRef "$\<smtp_tls_scert_verifydepth\>"
+syntax match pfmainRef "$\<smtp_tls_secure_cert_match\>"
+syntax match pfmainRef "$\<smtp_tls_security_level\>"
 syntax match pfmainRef "$\<smtp_tls_session_cache_database\>"
 syntax match pfmainRef "$\<smtp_tls_session_cache_timeout\>"
+syntax match pfmainRef "$\<smtp_tls_verify_cert_match\>"
 syntax match pfmainRef "$\<smtp_use_tls\>"
 syntax match pfmainRef "$\<smtp_xforward_timeout\>"
 syntax match pfmainRef "$\<smtpd_authorized_verp_clients\>"
@@ -857,8 +1269,10 @@
 syntax match pfmainRef "$\<smtpd_client_event_limit_exceptions\>"
 syntax match pfmainRef "$\<smtpd_client_message_rate_limit\>"
 syntax match pfmainRef "$\<smtpd_client_new_tls_session_rate_limit\>"
+syntax match pfmainRef "$\<smtpd_client_port_logging\>"
 syntax match pfmainRef "$\<smtpd_client_recipient_rate_limit\>"
 syntax match pfmainRef "$\<smtpd_client_restrictions\>"
+syntax match pfmainRef "$\<smtpd_command_filter\>"
 syntax match pfmainRef "$\<smtpd_data_restrictions\>"
 syntax match pfmainRef "$\<smtpd_delay_open_until_valid_rcpt\>"
 syntax match pfmainRef "$\<smtpd_delay_reject\>"
@@ -875,18 +1289,22 @@
 syntax match pfmainRef "$\<smtpd_helo_restrictions\>"
 syntax match pfmainRef "$\<smtpd_history_flush_threshold\>"
 syntax match pfmainRef "$\<smtpd_junk_command_limit\>"
+syntax match pfmainRef "$\<smtpd_milters\>"
 syntax match pfmainRef "$\<smtpd_noop_commands\>"
 syntax match pfmainRef "$\<smtpd_null_access_lookup_key\>"
 syntax match pfmainRef "$\<smtpd_peername_lookup\>"
+syntax match pfmainRef "$\<smtpd_per_record_deadline\>"
 syntax match pfmainRef "$\<smtpd_policy_service_max_idle\>"
 syntax match pfmainRef "$\<smtpd_policy_service_max_ttl\>"
 syntax match pfmainRef "$\<smtpd_policy_service_timeout\>"
 syntax match pfmainRef "$\<smtpd_proxy_ehlo\>"
 syntax match pfmainRef "$\<smtpd_proxy_filter\>"
+syntax match pfmainRef "$\<smtpd_proxy_options\>"
 syntax match pfmainRef "$\<smtpd_proxy_timeout\>"
 syntax match pfmainRef "$\<smtpd_recipient_limit\>"
 syntax match pfmainRef "$\<smtpd_recipient_overshoot_limit\>"
 syntax match pfmainRef "$\<smtpd_recipient_restrictions\>"
+syntax match pfmainRef "$\<smtpd_reject_footer\>"
 syntax match pfmainRef "$\<smtpd_reject_unlisted_recipient\>"
 syntax match pfmainRef "$\<smtpd_reject_unlisted_sender\>"
 syntax match pfmainRef "$\<smtpd_restriction_classes\>"
@@ -900,59 +1318,142 @@
 syntax match pfmainRef "$\<smtpd_sasl_type\>"
 syntax match pfmainRef "$\<smtpd_sender_login_maps\>"
 syntax match pfmainRef "$\<smtpd_sender_restrictions\>"
+syntax match pfmainRef "$\<smtpd_service_name\>"
 syntax match pfmainRef "$\<smtpd_soft_error_limit\>"
 syntax match pfmainRef "$\<smtpd_starttls_timeout\>"
 syntax match pfmainRef "$\<smtpd_timeout\>"
 syntax match pfmainRef "$\<smtpd_tls_CAfile\>"
 syntax match pfmainRef "$\<smtpd_tls_CApath\>"
+syntax match pfmainRef "$\<smtpd_tls_always_issue_session_ids\>"
 syntax match pfmainRef "$\<smtpd_tls_ask_ccert\>"
 syntax match pfmainRef "$\<smtpd_tls_auth_only\>"
 syntax match pfmainRef "$\<smtpd_tls_ccert_verifydepth\>"
 syntax match pfmainRef "$\<smtpd_tls_cert_file\>"
 syntax match pfmainRef "$\<smtpd_tls_cipherlist\>"
+syntax match pfmainRef "$\<smtpd_tls_ciphers\>"
 syntax match pfmainRef "$\<smtpd_tls_dcert_file\>"
 syntax match pfmainRef "$\<smtpd_tls_dh1024_param_file\>"
 syntax match pfmainRef "$\<smtpd_tls_dh512_param_file\>"
 syntax match pfmainRef "$\<smtpd_tls_dkey_file\>"
+syntax match pfmainRef "$\<smtpd_tls_eccert_file\>"
+syntax match pfmainRef "$\<smtpd_tls_eckey_file\>"
+syntax match pfmainRef "$\<smtpd_tls_eecdh_grade\>"
+syntax match pfmainRef "$\<smtpd_tls_exclude_ciphers\>"
+syntax match pfmainRef "$\<smtpd_tls_fingerprint_digest\>"
 syntax match pfmainRef "$\<smtpd_tls_key_file\>"
 syntax match pfmainRef "$\<smtpd_tls_loglevel\>"
+syntax match pfmainRef "$\<smtpd_tls_mandatory_ciphers\>"
+syntax match pfmainRef "$\<smtpd_tls_mandatory_exclude_ciphers\>"
+syntax match pfmainRef "$\<smtpd_tls_mandatory_protocols\>"
+syntax match pfmainRef "$\<smtpd_tls_protocols\>"
 syntax match pfmainRef "$\<smtpd_tls_received_header\>"
 syntax match pfmainRef "$\<smtpd_tls_req_ccert\>"
+syntax match pfmainRef "$\<smtpd_tls_security_level\>"
 syntax match pfmainRef "$\<smtpd_tls_session_cache_database\>"
 syntax match pfmainRef "$\<smtpd_tls_session_cache_timeout\>"
 syntax match pfmainRef "$\<smtpd_tls_wrappermode\>"
 syntax match pfmainRef "$\<smtpd_use_tls\>"
 syntax match pfmainRef "$\<soft_bounce\>"
 syntax match pfmainRef "$\<stale_lock_time\>"
+syntax match pfmainRef "$\<stress\>"
 syntax match pfmainRef "$\<strict_7bit_headers\>"
 syntax match pfmainRef "$\<strict_8bitmime\>"
 syntax match pfmainRef "$\<strict_8bitmime_body\>"
 syntax match pfmainRef "$\<strict_mime_encoding_domain\>"
 syntax match pfmainRef "$\<strict_rfc821_envelopes\>"
+syntax match pfmainRef "$\<strict_7bit_headers\>"
+syntax match pfmainRef "$\<strict_8bitmime\>"
+syntax match pfmainRef "$\<strict_8bitmime_body\>"
+syntax match pfmainRef "$\<strict_mailbox_ownership\>"
+syntax match pfmainRef "$\<strict_mime_encoding_domain\>"
+syntax match pfmainRef "$\<strict_rfc821_envelopes\>"
 syntax match pfmainRef "$\<sun_mailtool_compatibility\>"
 syntax match pfmainRef "$\<swap_bangpath\>"
 syntax match pfmainRef "$\<syslog_facility\>"
 syntax match pfmainRef "$\<syslog_name\>"
+syntax match pfmainRef "$\<tcp_windowsize\>"
+syntax match pfmainRef "$\<tls_append_default_CA\>"
 syntax match pfmainRef "$\<tls_daemon_random_bytes\>"
+syntax match pfmainRef "$\<tls_disable_workarounds\>"
+syntax match pfmainRef "$\<tls_eecdh_strong_curve\>"
+syntax match pfmainRef "$\<tls_eecdh_ultra_curve\>"
+syntax match pfmainRef "$\<tls_export_cipherlist\>"
+syntax match pfmainRef "$\<tls_high_cipherlist\>"
+syntax match pfmainRef "$\<tls_low_cipherlist\>"
+syntax match pfmainRef "$\<tls_medium_cipherlist\>"
+syntax match pfmainRef "$\<tls_null_cipherlist\>"
+syntax match pfmainRef "$\<tls_preempt_cipherlist\>"
 syntax match pfmainRef "$\<tls_random_bytes\>"
 syntax match pfmainRef "$\<tls_random_exchange_name\>"
 syntax match pfmainRef "$\<tls_random_prng_update_period\>"
 syntax match pfmainRef "$\<tls_random_reseed_period\>"
 syntax match pfmainRef "$\<tls_random_source\>"
+syntax match pfmainRef "$\<tlsproxy_enforce_tls\>"
+syntax match pfmainRef "$\<tlsproxy_service_name\>"
+syntax match pfmainRef "$\<tlsproxy_tls_CAfile\>"
+syntax match pfmainRef "$\<tlsproxy_tls_CApath\>"
+syntax match pfmainRef "$\<tlsproxy_tls_always_issue_session_ids\>"
+syntax match pfmainRef "$\<tlsproxy_tls_ask_ccert\>"
+syntax match pfmainRef "$\<tlsproxy_tls_ccert_verifydepth\>"
+syntax match pfmainRef "$\<tlsproxy_tls_cert_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_ciphers\>"
+syntax match pfmainRef "$\<tlsproxy_tls_dcert_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_dh1024_param_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_dh512_param_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_dkey_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_eccert_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_eckey_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_eecdh_grade\>"
+syntax match pfmainRef "$\<tlsproxy_tls_exclude_ciphers\>"
+syntax match pfmainRef "$\<tlsproxy_tls_fingerprint_digest\>"
+syntax match pfmainRef "$\<tlsproxy_tls_key_file\>"
+syntax match pfmainRef "$\<tlsproxy_tls_loglevel\>"
+syntax match pfmainRef "$\<tlsproxy_tls_mandatory_ciphers\>"
+syntax match pfmainRef "$\<tlsproxy_tls_mandatory_exclude_ciphers\>"
+syntax match pfmainRef "$\<tlsproxy_tls_mandatory_protocols\>"
+syntax match pfmainRef "$\<tlsproxy_tls_protocols\>"
+syntax match pfmainRef "$\<tlsproxy_tls_req_ccert\>"
+syntax match pfmainRef "$\<tlsproxy_tls_security_level\>"
+syntax match pfmainRef "$\<tlsproxy_tls_session_cache_timeout\>"
+syntax match pfmainRef "$\<tlsproxy_use_tls\>"
+syntax match pfmainRef "$\<tlsproxy_watchdog_timeout\>"
 syntax match pfmainRef "$\<trace_service_name\>"
+syntax match pfmainRef "$\<transport_delivery_slot_cost\>"
+syntax match pfmainRef "$\<transport_delivery_slot_discount\>"
+syntax match pfmainRef "$\<transport_delivery_slot_loan\>"
+syntax match pfmainRef "$\<transport_destination_concurrency_failed_cohort_limit\>"
+syntax match pfmainRef "$\<transport_destination_concurrency_limit\>"
+syntax match pfmainRef "$\<transport_destination_concurrency_negative_feedback\>"
+syntax match pfmainRef "$\<transport_destination_concurrency_positive_feedback\>"
+syntax match pfmainRef "$\<transport_destination_rate_delay\>"
+syntax match pfmainRef "$\<transport_destination_recipient_limit\>"
+syntax match pfmainRef "$\<transport_extra_recipient_limit\>"
+syntax match pfmainRef "$\<transport_initial_destination_concurrency\>"
 syntax match pfmainRef "$\<transport_maps\>"
+syntax match pfmainRef "$\<transport_minimum_delivery_slots\>"
+syntax match pfmainRef "$\<transport_recipient_limit\>"
+syntax match pfmainRef "$\<transport_recipient_refill_delay\>"
+syntax match pfmainRef "$\<transport_recipient_refill_limit\>"
 syntax match pfmainRef "$\<transport_retry_time\>"
 syntax match pfmainRef "$\<trigger_timeout\>"
 syntax match pfmainRef "$\<undisclosed_recipients_header\>"
 syntax match pfmainRef "$\<unknown_address_reject_code\>"
+syntax match pfmainRef "$\<unknown_address_tempfail_action\>"
 syntax match pfmainRef "$\<unknown_client_reject_code\>"
+syntax match pfmainRef "$\<unknown_helo_hostname_tempfail_action\>"
 syntax match pfmainRef "$\<unknown_hostname_reject_code\>"
 syntax match pfmainRef "$\<unknown_local_recipient_reject_code\>"
 syntax match pfmainRef "$\<unknown_relay_recipient_reject_code\>"
 syntax match pfmainRef "$\<unknown_virtual_alias_reject_code\>"
 syntax match pfmainRef "$\<unknown_virtual_mailbox_reject_code\>"
+syntax match pfmainRef "$\<unverified_recipient_defer_code\>"
 syntax match pfmainRef "$\<unverified_recipient_reject_code\>"
+syntax match pfmainRef "$\<unverified_recipient_reject_reason\>"
+syntax match pfmainRef "$\<unverified_recipient_tempfail_action\>"
+syntax match pfmainRef "$\<unverified_sender_defer_code\>"
 syntax match pfmainRef "$\<unverified_sender_reject_code\>"
+syntax match pfmainRef "$\<unverified_sender_reject_reason\>"
+syntax match pfmainRef "$\<unverified_sender_tempfail_action\>"
 syntax match pfmainRef "$\<verp_delimiter_filter\>"
 syntax match pfmainRef "$\<virtual_alias_domains\>"
 syntax match pfmainRef "$\<virtual_alias_expansion_limit\>"
@@ -969,6 +1470,7 @@
 syntax match pfmainRef "$\<virtual_minimum_uid\>"
 syntax match pfmainRef "$\<virtual_transport\>"
 syntax match pfmainRef "$\<virtual_uid_maps\>"
+
 syntax keyword pfmainWord all
 syntax keyword pfmainWord check_address_map
 syntax keyword pfmainWord check_ccert_access
@@ -987,17 +1489,29 @@
 syntax keyword pfmainWord check_sender_mx_access
 syntax keyword pfmainWord check_sender_ns_access
 syntax keyword pfmainWord class
+syntax keyword pfmainWord client_address
+syntax keyword pfmainWord client_port
 syntax keyword pfmainWord defer_if_permit
 syntax keyword pfmainWord defer_if_reject
 syntax keyword pfmainWord dns
+syntax keyword pfmainWord drop
+syntax keyword pfmainWord dunno
+syntax keyword pfmainWord enforce
 syntax keyword pfmainWord envelope_recipient
 syntax keyword pfmainWord envelope_sender
+syntax keyword pfmainWord export
 syntax keyword pfmainWord header_recipient
 syntax keyword pfmainWord header_sender
+syntax keyword pfmainWord high
 syntax keyword pfmainWord host
+syntax keyword pfmainWord ignore
 syntax keyword pfmainWord ipv4
 syntax keyword pfmainWord ipv6
+syntax keyword pfmainWord localtime
+syntax keyword pfmainWord low
+syntax keyword pfmainWord medium
 syntax keyword pfmainWord native
+syntax keyword pfmainWord null
 syntax keyword pfmainWord permit
 syntax keyword pfmainWord permit_auth_destination
 syntax keyword pfmainWord permit_inet_interfaces
@@ -1008,6 +1522,7 @@
 syntax keyword pfmainWord permit_tls_all_clientcerts
 syntax keyword pfmainWord permit_tls_clientcerts
 syntax keyword pfmainWord reject
+syntax keyword pfmainWord reject_authenticated_sender_login_mismatch
 syntax keyword pfmainWord reject_invalid_helo_hostname
 syntax keyword pfmainWord reject_invalid_hostname
 syntax keyword pfmainWord reject_maps_rbl
@@ -1041,8 +1556,23 @@
 syntax keyword pfmainWord reject_unverified_sender
 syntax keyword pfmainWord sleep
 syntax keyword pfmainWord smtpd_access_maps
+syntax keyword pfmainWord server_name
+syntax keyword pfmainWord speed_adjust
 syntax keyword pfmainWord subnet
 syntax keyword pfmainWord warn_if_reject
+syntax keyword pfmainWord CRYPTOPRO_TLSEXT_BUG
+syntax keyword pfmainWord DONT_INSERT_EMPTY_FRAGMENTS
+syntax keyword pfmainWord LEGACY_SERVER_CONNECT
+syntax keyword pfmainWord MICROSOFT_BIG_SSLV3_BUFFER
+syntax keyword pfmainWord MICROSOFT_SESS_ID_BUG
+syntax keyword pfmainWord MSIE_SSLV2_RSA_PADDING
+syntax keyword pfmainWord NETSCAPE_CHALLENGE_BUG
+syntax keyword pfmainWord NETSCAPE_REUSE_CIPHER_CHANGE_BUG
+syntax keyword pfmainWord SSLEAY_080_CLIENT_DH_BUG
+syntax keyword pfmainWord SSLREF2_REUSE_CERT_TYPE_BUG
+syntax keyword pfmainWord TLS_BLOCK_PADDING_BUG
+syntax keyword pfmainWord TLS_D5_BUG
+syntax keyword pfmainWord TLS_ROLLBACK_BUG
 
 syntax keyword pfmainDict	btree cidr environ hash nis pcre proxy regexp sdbm sdbm static tcp unix
 syntax keyword pfmainQueueDir	incoming active deferred corrupt hold
diff -Naur vim73.orig/runtime/syntax/php.vim vim73/runtime/syntax/php.vim
--- vim73.orig/runtime/syntax/php.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/php.vim	2013-08-04 19:09:09.583946946 +0000
@@ -1,11 +1,10 @@
 " Vim syntax file
 " Language: php PHP 3/4/5
-" Maintainer: Peter Hodge <toomuchphp-vim@yahoo.com>
-" Last Change:  June 9, 2006
-" URL: http://www.vim.org/scripts/script.php?script_id=1571
-"
-" Former Maintainer:  Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
-" Former URL: http://svn.debian.org/wsvn/pkg-vim/trunk/runtime/syntax/php.vim?op=file&rev=0&sc=0
+" Maintainer: Jason Woofenden <jason@jasonwoof.com>
+" Last Change: Dec 11, 2012
+" URL: https://gitorious.org/jasonwoof/vim-syntax/blobs/master/php.vim
+" Former Maintainers: Peter Hodge <toomuchphp-vim@yahoo.com>
+"         Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
 "
 " Note: If you are using a colour terminal with dark background, you will probably find
 "       the 'elflord' colorscheme is much better for PHP's syntax than the default
@@ -55,14 +54,6 @@
 "        the string would be highlighted as an error, what is incorrect.
 "    ii) Same problem if you are setting php_folding = 2 with a closing
 "        } inside an string on the first line of this string.
-"
-"  - A double-quoted string like this:
-"      "$foo->someVar->someOtherVar->bar"
-"    will highight '->someOtherVar->bar' as though they will be parsed
-"    as object member variables, but PHP only recognizes the first
-"    object member variable ($foo->someVar).
-"
-"
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -119,6 +110,10 @@
   syn cluster phpAddStrings add=@htmlTop
 endif
 
+" make sure we can use \ at the begining of the line to do a continuation
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case match
 
 " Env Variables
@@ -132,7 +127,7 @@
 
 syn case ignore
 
-syn keyword phpConstant  __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__  contained
+syn keyword phpConstant  __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__ __DIR__ __NAMESPACE__  contained
 
 
 " Function and Methods ripped from php_manual_de.tar.gz Jan 2003
@@ -187,6 +182,7 @@
 syn keyword phpFunctions  ingres_autocommit ingres_close ingres_commit ingres_connect ingres_fetch_array ingres_fetch_object ingres_fetch_row ingres_field_length ingres_field_name ingres_field_nullable ingres_field_precision ingres_field_scale ingres_field_type ingres_num_fields ingres_num_rows ingres_pconnect ingres_query ingres_rollback  contained
 syn keyword phpFunctions  ircg_channel_mode ircg_disconnect ircg_fetch_error_msg ircg_get_username ircg_html_encode ircg_ignore_add ircg_ignore_del ircg_is_conn_alive ircg_join ircg_kick ircg_lookup_format_messages ircg_msg ircg_nick ircg_nickname_escape ircg_nickname_unescape ircg_notice ircg_part ircg_pconnect ircg_register_format_messages ircg_set_current ircg_set_file ircg_set_on_die ircg_topic ircg_whois  contained
 syn keyword phpFunctions  java_last_exception_clear java_last_exception_get contained
+syn keyword phpFunctions  json_decode json_encode json_last_error contained
 syn keyword phpFunctions  ldap_8859_to_t61 ldap_add ldap_bind ldap_close ldap_compare ldap_connect ldap_count_entries ldap_delete ldap_dn2ufn ldap_err2str ldap_errno ldap_error ldap_explode_dn ldap_first_attribute ldap_first_entry ldap_first_reference ldap_free_result ldap_get_attributes ldap_get_dn ldap_get_entries ldap_get_option ldap_get_values_len ldap_get_values ldap_list ldap_mod_add ldap_mod_del ldap_mod_replace ldap_modify ldap_next_attribute ldap_next_entry ldap_next_reference ldap_parse_reference ldap_parse_result ldap_read ldap_rename ldap_search ldap_set_option ldap_set_rebind_proc ldap_sort ldap_start_tls ldap_t61_to_8859 ldap_unbind  contained
 syn keyword phpFunctions  lzf_compress lzf_decompress lzf_optimized_for contained
 syn keyword phpFunctions  ezmlm_hash mail contained
@@ -274,7 +270,7 @@
 syn keyword phpLabel  case default switch contained
 
 " Statement
-syn keyword phpStatement  return break continue exit  contained
+syn keyword phpStatement  return break continue exit goto  contained
 
 " Keyword
 syn keyword phpKeyword  var const contained
@@ -283,7 +279,7 @@
 syn keyword phpType bool[ean] int[eger] real double float string array object NULL  contained
 
 " Structure
-syn keyword phpStructure  extends implements instanceof parent self contained
+syn keyword phpStructure  namespace extends implements instanceof parent self contained
 
 " Operator
 syn match phpOperator "[-=+%^&|*!.~?:]" contained display
@@ -303,11 +299,41 @@
 syn region  phpIdentifierComplex  matchgroup=phpParent start="{\$"rs=e-1 end="}"  contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
 syn region  phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
 
+" Interpolated indentifiers (inside strings)
+	syn match phpBrackets "[][}{]" contained display
+	" errors
+		syn match phpInterpSimpleError "\[[^]]*\]" contained display  " fallback (if nothing else matches)
+		syn match phpInterpSimpleError "->[^a-zA-Z_]" contained display
+		" make sure these stay above the correct DollarCurlies so they don't take priority
+		syn match phpInterpBogusDollarCurley "${[^}]*}" contained display  " fallback (if nothing else matches)
+	syn match phpinterpSimpleBracketsInner "\w\+" contained
+	syn match phpInterpSimpleBrackets "\[\h\w*]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+	syn match phpInterpSimpleBrackets "\[\d\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+	syn match phpInterpSimpleBrackets "\[0[xX]\x\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
+	syn match phpInterpSimple "\$\h\w*\(\[[^]]*\]\|->\h\w*\)\?" contained contains=phpInterpSimpleBrackets,phpIdentifier,phpInterpSimpleError,phpMethods,phpMemberSelector display
+	syn match phpInterpVarname "\h\w*" contained
+	syn match phpInterpMethodName "\h\w*" contained " default color
+	syn match phpInterpSimpleCurly "\${\h\w*}"  contains=phpInterpVarname contained extend
+	syn region phpInterpDollarCurley1Helper matchgroup=phpParent start="{" end="\[" contains=phpInterpVarname contained
+	syn region phpInterpDollarCurly1 matchgroup=phpParent start="\${\h\w*\["rs=s+1 end="]}" contains=phpInterpDollarCurley1Helper,@phpClConst contained extend
+
+	syn match phpInterpDollarCurley2Helper "{\h\w*->" contains=phpBrackets,phpInterpVarname,phpMemberSelector contained
+
+	syn region phpInterpDollarCurly2 matchgroup=phpParent start="\${\h\w*->"rs=s+1 end="}" contains=phpInterpDollarCurley2Helper,phpInterpMethodName contained
+
+	syn match phpInterpBogusDollarCurley "${\h\w*->}" contained display
+	syn match phpInterpBogusDollarCurley "${\h\w*\[]}" contained display
+
+	syn region phpInterpComplex matchgroup=phpParent start="{\$"rs=e-1 end="}" contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
+	syn region phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
+	" define a cluster to get all interpolation syntaxes for double-quoted strings
+	syn cluster phpInterpDouble contains=phpInterpSimple,phpInterpSimpleCurly,phpInterpDollarCurly1,phpInterpDollarCurly2,phpInterpBogusDollarCurley,phpInterpComplex
+
 " Methoden
 syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display
 
 " Include
-syn keyword phpInclude  include require include_once require_once contained
+syn keyword phpInclude  include require include_once require_once use contained
 
 " Peter Hodge - added 'clone' keyword
 " Define
@@ -323,10 +349,18 @@
 " Float
 syn match phpFloat  "\(-\=\<\d+\|-\=\)\.\d\+\>" contained display
 
-" SpecialChar
-syn match phpSpecialChar  "\\[abcfnrtyv\\]" contained display
-syn match phpSpecialChar  "\\\d\{3}"  contained contains=phpOctalError display
-syn match phpSpecialChar  "\\x\x\{2}" contained display
+" Backslash escapes
+	syn case match
+	" for double quotes and heredoc
+	syn match phpBackslashSequences  "\\[fnrtv\\\"$]" contained display
+	syn match phpBackslashSequences  "\\\d\{1,3}"  contained contains=phpOctalError display
+	syn match phpBackslashSequences  "\\x\x\{1,2}" contained display
+	" additional sequence for double quotes only
+	syn match phpBackslashDoubleQuote "\\[\"]" contained display
+	" for single quotes only
+	syn match phpBackslashSingleQuote "\\[\\']" contained display
+	syn case ignore
+
 
 " Error
 syn match phpOctalError "[89]"  contained display
@@ -355,23 +389,32 @@
 
 " String
 if exists("php_parent_error_open")
-  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
-  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
-  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings contained keepend
+  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpBackslashSequences,phpBackslashDoubleQuote,@phpInterpDouble contained keepend
+  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpBackslashSequences,phpIdentifierSimply,phpIdentifierComplex contained keepend
+  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings,phpBackslashSingleQuote contained keepend
 else
-  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
-  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
-  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings contained keepend extend
+  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpBackslashSequences,phpBackslashDoubleQuote,@phpInterpDouble contained extend keepend
+  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpBackslashSequences,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
+  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings,phpBackslashSingleQuote contained keepend extend
 endif
 
-" HereDoc
+" HereDoc and NowDoc
 if version >= 600
   syn case match
-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\I\i*\)$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+
+  " HereDoc
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\I\i*\)\2$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+" including HTML,JavaScript,SQL even if not enabled via options
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
+
+  " NowDoc
+  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\I\i*\)'$" end="^\z1\(;\=$\)\@=" contained keepend extend
 " including HTML,JavaScript,SQL even if not enabled via options
-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop keepend extend
+  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop keepend extend
+  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript keepend extend
   syn case ignore
 endif
 
@@ -388,7 +431,7 @@
 endif
 
 syn cluster phpClConst  contains=phpFunctions,phpIdentifier,phpConditional,phpRepeat,phpStatement,phpOperator,phpRelation,phpStringSingle,phpStringDouble,phpBacktick,phpNumber,phpFloat,phpKeyword,phpType,phpBoolean,phpStructure,phpMethodsVar,phpConstant,phpCoreConstant,phpException
-syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc
+syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc,phpNowDoc
 syn cluster phpClFunction contains=@phpClInside,phpDefine,phpParentError,phpStorageClass
 syn cluster phpClTop  contains=@phpClFunction,phpFoldFunction,phpFoldClass,phpFoldInterface,phpFoldTry,phpFoldCatch
 
@@ -451,17 +494,14 @@
   syn keyword phpStorageClass final global private protected public static  contained
 endif
 
+" TODO: fold on "trait". For now just make sure it gets colored:
+syn keyword phpStructure trait
+
 " ================================================================
 " Peter Hodge - June 9, 2006
 " Some of these changes (highlighting isset/unset/echo etc) are not so
 " critical, but they make things more colourful. :-)
 
-" corrected highlighting for an escaped '\$' inside a double-quoted string
-syn match phpSpecialChar  "\\\$"  contained display
-
-" highlight object variables inside strings
-syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display containedin=phpStringDouble
-
 " highlight constant E_STRICT
 syntax case match
 syntax keyword phpCoreConstant E_STRICT contained
@@ -612,11 +652,21 @@
   HiLink   phpType  Type
   HiLink   phpInclude Include
   HiLink   phpDefine  Define
-  HiLink   phpSpecialChar SpecialChar
+  HiLink   phpBackslashSequences SpecialChar
+  HiLink   phpBackslashDoubleQuote SpecialChar
+  HiLink   phpBackslashSingleQuote SpecialChar
   HiLink   phpParent  Delimiter
+  HiLink   phpBrackets  Delimiter
   HiLink   phpIdentifierConst Delimiter
   HiLink   phpParentError Error
   HiLink   phpOctalError  Error
+  HiLink   phpInterpSimpleError Error
+  HiLink   phpInterpBogusDollarCurley Error
+  HiLink   phpInterpDollarCurly1 Error
+  HiLink   phpInterpDollarCurly2 Error
+  HiLink   phpInterpSimpleBracketsInner String
+  HiLink   phpInterpSimpleCurly Delimiter
+  HiLink   phpInterpVarname Identifier
   HiLink   phpTodo  Todo
   HiLink   phpMemberSelector  Structure
   if exists("php_oldStyle")
@@ -628,13 +678,13 @@
   hi  phpIdentifier guifg=DarkGray ctermfg=Brown
   hi  phpIdentifierSimply guifg=DarkGray ctermfg=Brown
   else
-  HiLink  phpIntVar Identifier
-  HiLink  phpEnvVar Identifier
-  HiLink  phpOperator Operator
-  HiLink  phpVarSelector  Operator
-  HiLink  phpRelation Operator
-  HiLink  phpIdentifier Identifier
-  HiLink  phpIdentifierSimply Identifier
+  HiLink   phpIntVar Identifier
+  HiLink   phpEnvVar Identifier
+  HiLink   phpOperator Operator
+  HiLink   phpVarSelector  Operator
+  HiLink   phpRelation Operator
+  HiLink   phpIdentifier Identifier
+  HiLink   phpIdentifierSimply Identifier
   endif
 
   delcommand HiLink
@@ -646,4 +696,8 @@
   unlet main_syntax
 endif
 
+" put cpoptions back the way we found it
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 sts=2 sw=2 expandtab
diff -Naur vim73.orig/runtime/syntax/pine.vim vim73/runtime/syntax/pine.vim
--- vim73.orig/runtime/syntax/pine.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/pine.vim	2013-08-04 19:09:09.590613593 +0000
@@ -12,9 +12,9 @@
 endif
 
 if version >= 600
-  setlocal iskeyword=@,48-57,_,128-167,224-235,-,
+  setlocal iskeyword=@,48-57,_,128-167,224-235,-
 else
-  set iskeyword=@,48-57,_,128-167,224-235,-,
+  set iskeyword=@,48-57,_,128-167,224-235,-
 endif
 
 syn keyword pineConfig addrbook-sort-rule
diff -Naur vim73.orig/runtime/syntax/po.vim vim73/runtime/syntax/po.vim
--- vim73.orig/runtime/syntax/po.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/po.vim	2013-08-04 19:09:09.597280240 +0000
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:	po (gettext)
 " Maintainer:	Dwayne Bailey <dwayne@translate.org.za>
-" Last Change:	2008 Sep 17
+" Last Change:	2012 Apr 30
 " Contributors: Dwayne Bailey (Most advanced syntax highlighting)
 "               Leonardo Fontenelle (Spell checking)
-"               SungHyun Nam <goweol@gmail.com> (Original maintainer)
+"               Nam SungHyun <namsh@kldp.org> (Original maintainer)
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -13,6 +13,8 @@
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn sync minlines=10
 
@@ -39,7 +41,7 @@
                             \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
 
 " Header and Copyright
-syn match     poHeaderItem "\(Project-Id-Version\|Report-Msgid-Bugs-To\|POT-Creation-Date\|PO-Revision-Date\|Last-Translator\|Language-Team\|MIME-Version\|Content-Type\|Content-Transfer-Encoding\|Plural-Forms\|X-Generator\): " contained
+syn match     poHeaderItem "\(Project-Id-Version\|Report-Msgid-Bugs-To\|POT-Creation-Date\|PO-Revision-Date\|Last-Translator\|Language-Team\|Language\|MIME-Version\|Content-Type\|Content-Transfer-Encoding\|Plural-Forms\|X-Generator\): " contained
 syn match     poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <LL@li.org>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained
 syn match     poCopyrightUnset "SOME DESCRIPTIVE TITLE\|FIRST AUTHOR <EMAIL@ADDRESS>, YEAR\|Copyright (C) YEAR Free Software Foundation, Inc\|YEAR THE PACKAGE\'S COPYRIGHT HOLDER\|PACKAGE" contained
 
@@ -132,4 +134,7 @@
 
 let b:current_syntax = "po"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set ts=8 sts=2 sw=2 noet:
diff -Naur vim73.orig/runtime/syntax/pod.vim vim73/runtime/syntax/pod.vim
--- vim73.orig/runtime/syntax/pod.vim	2010-08-10 18:27:29.000000000 +0000
+++ vim73/runtime/syntax/pod.vim	2013-08-04 19:09:09.597280240 +0000
@@ -1,9 +1,10 @@
 " Vim syntax file
-" Language:     Perl POD format
-" Maintainer:   Andy Lester <andy@petdance.com>
-" Previously:   Scott Bigham <dsb@killerbunnies.org>
-" URL:          http://github.com/petdance/vim-perl
-" Last Change:  2009-08-14
+" Language:      Perl POD format
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Previously:    Scott Bigham <dsb@killerbunnies.org>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013 May 30
 
 " To add embedded POD documentation highlighting to your syntax file, add
 " the commands:
@@ -26,7 +27,11 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " POD commands
+syn match podCommand    "^=encoding"  nextgroup=podCmdText contains=@NoSpell
 syn match podCommand    "^=head[1234]"  nextgroup=podCmdText contains=@NoSpell
 syn match podCommand    "^=item"        nextgroup=podCmdText contains=@NoSpell
 syn match podCommand    "^=over"        nextgroup=podOverIndent skipwhite contains=@NoSpell
@@ -85,6 +90,100 @@
   delcommand HiLink
 endif
 
+if exists("perl_pod_spellcheck_headings")
+  " Spell-check headings
+  syn clear podCmdText
+  syn match podCmdText    ".*$" contained contains=podFormat
+endif
+
+if exists("perl_pod_formatting")
+  " By default, escapes like C<> are not checked for spelling. Remove B<>
+  " and I<> from the list of escapes.
+  syn clear podFormat
+  syn region podFormat start="[CLF]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
+  syn region podFormat start="[CLF]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
+
+  " Don't spell-check inside E<>, but ensure that the E< itself isn't
+  " marked as a spelling mistake.
+  syn match podFormat   "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
+
+  " Z<> is a mock formatting code. Ensure Z<> on its own isn't marked as a
+  " spelling mistake.
+  syn match podFormat   "Z<>" contains=podEscape,podEscape2,@NoSpell
+
+  " These are required so that whatever is *within* B<...>, I<...>, etc. is
+  " spell-checked, but not the B, I, ... itself.
+  syn match podBoldOpen    "B<" contains=@NoSpell
+  syn match podItalicOpen  "I<" contains=@NoSpell
+  syn match podNoSpaceOpen "S<" contains=@NoSpell
+  syn match podIndexOpen   "X<" contains=@NoSpell
+
+  " Same as above but for the << >> syntax.
+  syn match podBoldAlternativeDelimOpen    "B<< " contains=@NoSpell
+  syn match podItalicAlternativeDelimOpen  "I<< " contains=@NoSpell
+  syn match podNoSpaceAlternativeDelimOpen "S<< " contains=@NoSpell
+  syn match podIndexAlternativeDelimOpen   "X<< " contains=@NoSpell
+
+  " Add support for spell checking text inside B<>, I<>, S<> and X<>.
+  syn region podBold start="B<[^<]"me=e end=">" oneline contains=podBoldItalic,podBoldOpen
+  syn region podBoldAlternativeDelim start="B<<\s" end="\s>>" oneline contains=podBoldAlternativeDelimOpen
+
+  syn region podItalic start="I<[^<]"me=e end=">" oneline contains=podItalicBold,podItalicOpen
+  syn region podItalicAlternativeDelim start="I<<\s" end="\s>>" oneline contains=podItalicAlternativeDelimOpen
+
+  " Nested bold/italic and vice-versa
+  syn region podBoldItalic contained start="I<[^<]"me=e end=">" oneline
+  syn region podItalicBold contained start="B<[^<]"me=e end=">" oneline
+
+  syn region podNoSpace start="S<[^<]"ms=s-2 end=">"me=e oneline contains=podNoSpaceOpen
+  syn region podNoSpaceAlternativeDelim start="S<<\s"ms=s-2 end="\s>>"me=e oneline contains=podNoSpaceAlternativeDelimOpen
+
+  syn region podIndex start="X<[^<]"ms=s-2 end=">"me=e oneline contains=podIndexOpen
+  syn region podIndexAlternativeDelim start="X<<\s"ms=s-2 end="\s>>"me=e oneline contains=podIndexAlternativeDelimOpen
+
+  " Restore this (otherwise B<> is shown as bold inside verbatim)
+  syn match podVerbatimLine	"^\s.*$" contains=@NoSpell
+
+  " Ensure formatted text can be displayed in headings and items
+  syn clear podCmdText
+
+  if exists("perl_pod_spellcheck_headings")
+    syn match podCmdText ".*$" contained contains=podFormat,podBold,
+          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
+          \podBoldOpen,podItalicOpen,podBoldAlternativeDelimOpen,
+          \podItalicAlternativeDelimOpen,podNoSpaceOpen
+  else
+    syn match podCmdText ".*$" contained contains=podFormat,podBold,
+          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
+          \@NoSpell
+  endif
+
+  " Specify how to display these
+  hi def podBold term=bold cterm=bold gui=bold
+
+  hi link podBoldAlternativeDelim podBold
+  hi link podBoldAlternativeDelimOpen podBold
+  hi link podBoldOpen podBold
+
+  hi link podNoSpace                 Identifier
+  hi link podNoSpaceAlternativeDelim Identifier
+
+  hi link podIndex                   Identifier
+  hi link podIndexAlternativeDelim   Identifier
+
+  hi def podItalic term=italic cterm=italic gui=italic
+
+  hi link podItalicAlternativeDelim podItalic
+  hi link podItalicAlternativeDelimOpen podItalic
+  hi link podItalicOpen podItalic
+
+  hi def podBoldItalic term=italic,bold cterm=italic,bold gui=italic,bold
+  hi def podItalicBold term=italic,bold cterm=italic,bold gui=italic,bold
+endif
+
 let b:current_syntax = "pod"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/pov.vim vim73/runtime/syntax/pov.vim
--- vim73.orig/runtime/syntax/pov.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/pov.vim	2013-08-04 19:09:09.600613563 +0000
@@ -1,9 +1,7 @@
 " Vim syntax file
-" This is a GENERATED FILE. Please always refer to source file at the URI below.
-" Language: PoV-Ray(tm) 3.5 Scene Description Language
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2003 Apr 25
-" URL: http://physics.muni.cz/~yeti/download/syntax/pov.vim
+" Language: PoV-Ray(tm) 3.7 Scene Description Language
+" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2011-04-23
 " Required Vim Version: 6.0
 
 " Setup
@@ -22,20 +20,21 @@
 
 " Top level stuff
 syn keyword povCommands global_settings
-syn keyword povObjects array atmosphere background bicubic_patch blob box camera component cone cubic cylinder disc fog height_field isosurface julia_fractal lathe light_group light_source mesh mesh2 object parametric pattern photons plane poly polygon prism quadric quartic rainbow sky_sphere smooth_triangle sor sphere sphere_sweep spline superellipsoid text torus triangle
+syn keyword povObjects array atmosphere background bicubic_patch blob box camera component cone cubic cylinder disc fog height_field isosurface julia_fractal lathe light_group light_source mesh mesh2 object ovus parametric pattern photons plane poly polygon polynomial prism quadric quartic rainbow sky_sphere smooth_triangle sor sphere sphere_sweep spline superellipsoid text torus triangle
 syn keyword povCSG clipped_by composite contained_by difference intersection merge union
 syn keyword povAppearance interior material media texture interior_texture texture_list
 syn keyword povGlobalSettings ambient_light assumed_gamma charset hf_gray_16 irid_wavelength max_intersections max_trace_level number_of_waves radiosity noise_generator
 syn keyword povTransform inverse matrix rotate scale translate transform
 
 " Descriptors
-syn keyword povDescriptors finish normal pigment uv_mapping uv_vectors vertex_vectors
-syn keyword povDescriptors adc_bailout always_sample brightness count error_bound distance_maximum gray_threshold load_file low_error_factor max_sample media minimum_reuse nearest_count normal pretrace_end pretrace_start recursion_limit save_file
-syn keyword povDescriptors color colour gray rgb rgbt rgbf rgbft red green blue
+syn keyword povDescriptors finish inside_vector normal pigment uv_mapping uv_vectors vertex_vectors
+syn keyword povDescriptors adc_bailout always_sample brightness count error_bound distance_maximum gray_threshold load_file low_error_factor maximum_reuse max_sample media minimum_reuse mm_per_unit nearest_count normal pretrace_end pretrace_start recursion_limit save_file
+syn keyword povDescriptors color colour rgb rgbt rgbf rgbft srgb srgbf srgbt srgbft
+syn match povDescriptors "\<\(red\|green\|blue\|gray\)\>"
 syn keyword povDescriptors bump_map color_map colour_map image_map material_map pigment_map quick_color quick_colour normal_map texture_map image_pattern pigment_pattern
-syn keyword povDescriptors ambient brilliance conserve_energy crand diffuse fresnel irid metallic phong phong_size refraction reflection reflection_exponent roughness specular
-syn keyword povDescriptors cylinder fisheye omnimax orthographic panoramic perspective spherical ultra_wide_angle
-syn keyword povDescriptors agate average brick boxed bozo bumps cells checker crackle cylindrical dents facets function gradient granite hexagon julia leopard magnet mandel marble onion planar quilted radial ripples slope spherical spiral1 spiral2 spotted tiles tiles2 toroidal waves wood wrinkles
+syn keyword povDescriptors ambient brilliance conserve_energy crand diffuse fresnel irid metallic phong phong_size refraction reflection reflection_exponent roughness specular subsurface
+syn keyword povDescriptors cylinder fisheye mesh_camera omnimax orthographic panoramic perspective spherical ultra_wide_angle
+syn keyword povDescriptors agate aoi average brick boxed bozo bumps cells checker crackle cylindrical dents facets function gradient granite hexagon julia leopard magnet mandel marble onion pavement planar quilted radial ripples slope spherical spiral1 spiral2 spotted square tiles tile2 tiling toroidal triangular waves wood wrinkles
 syn keyword povDescriptors density_file
 syn keyword povDescriptors area_light shadowless spotlight parallel
 syn keyword povDescriptors absorption confidence density emission intervals ratio samples scattering variance
@@ -46,32 +45,35 @@
 " Modifiers
 syn keyword povModifiers caustics dispersion dispersion_samples fade_color fade_colour fade_distance fade_power ior
 syn keyword povModifiers bounded_by double_illuminate hierarchy hollow no_shadow open smooth sturm threshold water_level
+syn keyword povModifiers importance no_radiosity
 syn keyword povModifiers hypercomplex max_iteration precision quaternion slice
 syn keyword povModifiers conic_sweep linear_sweep
 syn keyword povModifiers flatness type u_steps v_steps
-syn keyword povModifiers aa_level aa_threshold adaptive falloff jitter looks_like media_attenuation media_interaction method point_at radius tightness
-syn keyword povModifiers angle aperture blur_samples confidence direction focal_point h_angle location look_at right sky up v_angle variance
-syn keyword povModifiers all bump_size filter interpolate map_type once slope_map transmit use_alpha use_color use_colour use_index
+syn keyword povModifiers aa_level aa_threshold adaptive area_illumination falloff jitter looks_like media_attenuation media_interaction method point_at radius tightness
+syn keyword povModifiers angle aperture bokeh blur_samples confidence direction focal_point h_angle location look_at right sky up v_angle variance
+syn keyword povModifiers all bump_size gamma interpolate map_type once premultiplied slope_map use_alpha use_color use_colour use_index
+syn match povModifiers "\<\(filter\|transmit\)\>"
 syn keyword povModifiers black_hole agate_turb brick_size control0 control1 cubic_wave density_map flip frequency interpolate inverse lambda metric mortar octaves offset omega phase poly_wave ramp_wave repeat scallop_wave sine_wave size strength triangle_wave thickness turbulence turb_depth type warp
 syn keyword povModifiers eccentricity extinction
 syn keyword povModifiers arc_angle falloff_angle width
 syn keyword povModifiers accuracy all_intersections altitude autostop circular collect coords cutaway_textures dist_exp expand_thresholds exponent exterior gather global_lights major_radius max_trace no_bump_scale no_image no_reflection orient orientation pass_through precompute projected_through range_divider solid spacing split_union tolerance
 
 " Words not marked `reserved' in documentation, but...
-syn keyword povBMPType alpha gif iff jpeg pgm png pot ppm sys tga tiff contained
+syn keyword povBMPType alpha exr gif hdr iff jpeg pgm png pot ppm sys tga tiff
 syn keyword povFontType ttf contained
 syn keyword povDensityType df3 contained
 syn keyword povCharset ascii utf8 contained
 
 " Math functions on floats, vectors and strings
-syn keyword povFunctions abs acos acosh asc asin asinh atan atan2 atanh ceil cos cosh defined degrees dimensions dimension_size div exp file_exists floor int internal ln log max min mod pow radians rand seed select sin sinh sqrt strcmp strlen tan tanh val vdot vlength vstr vturbulence
+syn keyword povFunctions abs acos acosh asc asin asinh atan atan2 atanh bitwise_and bitwise_or bitwise_xor ceil cos cosh defined degrees dimensions dimension_size div exp file_exists floor inside int internal ln log max min mod pow prod radians rand seed select sin sinh sqrt strcmp strlen sum tan tanh val vdot vlength vstr vturbulence
 syn keyword povFunctions min_extent max_extent trace vcross vrotate vaxis_rotate vnormalize vturbulence
-syn keyword povFunctions chr concat substr str strupr strlwr
+syn keyword povFunctions chr concat datetime now substr str strupr strlwr
 syn keyword povJuliaFunctions acosh asinh atan cosh cube pwr reciprocal sinh sqr tanh
 
 " Specialities
-syn keyword povConsts clock clock_delta clock_on final_clock final_frame frame_number initial_clock initial_frame image_width image_height false no off on pi t true u v version x y yes z
-syn match povDotItem "\.\@<=\(blue\|green\|filter\|red\|transmit\|t\|u\|v\|x\|y\|z\)\>" display
+syn keyword povConsts clock clock_delta clock_on final_clock final_frame frame_number initial_clock initial_frame input_file_name image_width image_height false no off on pi true version yes
+syn match povConsts "\<[tuvxyz]\>"
+syn match povDotItem "\.\@<=\(blue\|green\|gray\|filter\|red\|transmit\|hf\|t\|u\|v\|x\|y\|z\)\>" display
 
 " Comments
 syn region povComment start="/\*" end="\*/" contains=povTodo,povComment
@@ -83,16 +85,18 @@
 syn cluster povPRIVATE add=povTodo
 
 " Language directives
-syn match povConditionalDir "#\s*\(else\|end\|if\|ifdef\|ifndef\|switch\|while\)\>"
+syn match povConditionalDir "#\s*\(else\|end\|for\|if\|ifdef\|ifndef\|switch\|while\)\>"
 syn match povLabelDir "#\s*\(break\|case\|default\|range\)\>"
-syn match povDeclareDir "#\s*\(declare\|default\|local\|macro\|undef\|version\)\>"
+syn match povDeclareDir "#\s*\(declare\|default\|local\|macro\|undef\|version\)\>" nextgroup=povDeclareOption skipwhite
+syn keyword povDeclareOption deprecated once contained nextgroup=povDeclareOption skipwhite
 syn match povIncludeDir "#\s*include\>"
 syn match povFileDir "#\s*\(fclose\|fopen\|read\|write\)\>"
+syn keyword povFileDataType uint8 sint8 unit16be uint16le sint16be sint16le sint32le sint32be
 syn match povMessageDir "#\s*\(debug\|error\|render\|statistics\|warning\)\>"
 syn region povFileOpen start="#\s*fopen\>" skip=+"[^"]*"+ matchgroup=povOpenType end="\<\(read\|write\|append\)\>" contains=ALLBUT,PovParenError,PovBraceError,@PovPRIVATE transparent keepend
 
 " Literal strings
-syn match povSpecialChar "\\\d\d\d\|\\." contained
+syn match povSpecialChar "\\u\x\{4}\|\\\d\d\d\|\\." contained
 syn region povString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=povSpecialChar oneline
 syn cluster povPRIVATE add=povSpecialChar
 
@@ -112,7 +116,7 @@
 hi def link povString String
 hi def link povFileOpen Constant
 hi def link povConsts Constant
-hi def link povDotItem Constant
+hi def link povDotItem povSpecial
 hi def link povBMPType povSpecial
 hi def link povCharset povSpecial
 hi def link povDensityType povSpecial
@@ -123,8 +127,10 @@
 hi def link povConditionalDir PreProc
 hi def link povLabelDir PreProc
 hi def link povDeclareDir Define
+hi def link povDeclareOption Define
 hi def link povIncludeDir Include
 hi def link povFileDir PreProc
+hi def link povFileDataType Special
 hi def link povMessageDir Debug
 hi def link povAppearance povDescriptors
 hi def link povObjects povDescriptors
diff -Naur vim73.orig/runtime/syntax/povini.vim vim73/runtime/syntax/povini.vim
--- vim73.orig/runtime/syntax/povini.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/povini.vim	2013-08-04 19:09:09.600613563 +0000
@@ -1,9 +1,7 @@
 " Vim syntax file
-" This is a GENERATED FILE. Please always refer to source file at the URI below.
-" Language: PoV-Ray(tm) 3.5 configuration/initialization files
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2002-06-01
-" URL: http://physics.muni.cz/~yeti/download/syntax/povini.vim
+" Language: PoV-Ray(tm) 3.7 configuration/initialization files
+" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2011-04-24
 " Required Vim Version: 6.0
 
 " Setup
@@ -25,15 +23,17 @@
 syn match poviniLabel "^.\{-1,}\ze=" transparent contains=poviniKeyword nextgroup=poviniBool,poviniNumber
 syn keyword poviniBool On Off True False Yes No
 syn match poviniNumber "\<\d*\.\=\d\+\>"
-syn keyword poviniKeyword Clock Initial_Frame Final_Frame Initial_Clock Final_Clock Subset_Start_Frame Subset_End_Frame Cyclic_Animation Field_Render Odd_Field
+syn keyword poviniKeyword Clock Initial_Frame Final_Frame Frame_Final Frame_Step Initial_Clock Final_Clock Subset_Start_Frame Subset_End_Frame Cyclic_Animation Clockless_Animation Real_Time_Raytracing Field_Render Odd_Field Work_Threads
 syn keyword poviniKeyword Width Height Start_Column Start_Row End_Column End_Row Test_Abort Test_Abort_Count Continue_Trace Create_Ini
-syn keyword poviniKeyword Display Video_Mode Palette Display_Gamma Pause_When_Done Verbose Draw_Vistas Preview_Start_Size Preview_End_Size
-syn keyword poviniKeyword Output_to_File Output_File_Type Output_Alpha Bits_Per_Color Output_File_Name Buffer_Output Buffer_Size
+syn keyword poviniKeyword Display Video_Mode Palette Display_Gamma Pause_When_Done Verbose Draw_Vistas Preview_Start_Size Preview_End_Size Render_Block_Size Render_Block_Step Render_Pattern Max_Image_Buffer_Memory
+syn keyword poviniKeyword Output_to_File Output_File_Type Output_Alpha Bits_Per_Color Output_File_Name Buffer_Output Buffer_Size Dither Dither_Method File_Gamma
+syn keyword poviniKeyword BSP_Base BSP_Child BSP_Isect BSP_Max BSP_Miss
 syn keyword poviniKeyword Histogram_Type Histogram_Grid_Size Histogram_Name
 syn keyword poviniKeyword Input_File_Name Include_Header Library_Path Version
 syn keyword poviniKeyword Debug_Console Fatal_Console Render_Console Statistic_Console Warning_Console All_Console Debug_File Fatal_File Render_File Statistic_File Warning_File All_File Warning_Level
-syn keyword poviniKeyword Quality Radiosity Bounding Bounding_Threshold Light_Buffer Vista_Buffer Remove_Bounds Split_Unions Antialias Sampling_Method Antialias_Threshold Jitter Jitter_Amount Antialias_Depth
+syn keyword poviniKeyword Quality Bounding Bounding_Method Bounding_Threshold Light_Buffer Vista_Buffer Remove_Bounds Split_Unions Antialias Sampling_Method Antialias_Threshold Jitter Jitter_Amount Antialias_Depth Antialias_Gamma
 syn keyword poviniKeyword Pre_Scene_Return Pre_Frame_Return Post_Scene_Return Post_Frame_Return User_Abort_Return Fatal_Error_Return
+syn keyword poviniKeyword Radiosity Radiosity_File_Name Radiosity_From_File Radiosity_To_File Radiosity_Vain_Pretrace High_Reproducibility
 syn match poviniShellOut "^\s*\(Pre_Scene_Command\|Pre_Frame_Command\|Post_Scene_Command\|Post_Frame_Command\|User_Abort_Command\|Fatal_Error_Command\)\>" nextgroup=poviniShellOutEq skipwhite
 syn match poviniShellOutEq "=" nextgroup=poviniShellOutRHS skipwhite contained
 syn match poviniShellOutRHS "[^;]\+" skipwhite contained contains=poviniShellOutSpecial
diff -Naur vim73.orig/runtime/syntax/progress.vim vim73/runtime/syntax/progress.vim
--- vim73.orig/runtime/syntax/progress.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/progress.vim	2013-08-04 19:09:09.610613533 +0000
@@ -3,14 +3,15 @@
 " Filename extensions:	*.p (collides with Pascal),
 "			*.i (collides with assembler)
 "			*.w (collides with cweb)
-" Maintainer:		Philip Uren		<philuSPAX@ieee.org> Remove "SPAX" spam block
-" Contributors:         Chris Ruprecht		<chrup@mac.com> (Chris, where are you now?)
-"			Mikhail Kuperblum	<mikhail@whasup.com>
-"			John Florian		<jflorian@voyager.net>
-" Last Change:		Wed Apr 12 08:55:35 EST 2006
-" $Id: progress.vim,v 1.3 2006/04/12 21:48:47 vimboss Exp $
+" Maintainer:		Philip Uren		<philuSPAXY@ieee.org> Remove SPAXY spam block
+" Contributors:         Matthew Stickney	<mtstickneySPAXY@gmail.com>
+" 			Chris Ruprecht		<chrisSPAXY@ruprecht.org>
+"			Mikhail Kuperblum	<mikhailSPAXY@whasup.com>
+"			John Florian		<jflorianSPAXY@voyager.net>
+" Version:              13
+" Last Change:		Nov 11 2012
 
-" For version 5.x: Clear all syntax items
+" For version 5.x: Clear all syntax item
 " For version 6.x: Quit when a syntax file was already loaded
 if version < 600
 	syntax clear
@@ -18,6 +19,9 @@
 	finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 if version >= 600
   setlocal iskeyword=@,48-57,_,-,!,#,$,%
 else
@@ -30,159 +34,250 @@
 syn case ignore
 
 " Progress Blocks of code and mismatched "end." errors.
-syn match	ProgressEndError	"\<end\>"
-syn region	ProgressDoBlock		transparent matchgroup=ProgressDo start="\<do\>" matchgroup=ProgressDo end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
-syn region	ProgressForBlock	transparent matchgroup=ProgressFor start="\<for\>" matchgroup=ProgressFor end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
-syn region	ProgressRepeatBlock	transparent matchgroup=ProgressRepeat start="\<repeat\>" matchgroup=ProgressRepeat end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
-syn region	ProgressCaseBlock	transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>\|\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn match   ProgressEndError		"\<end\>"
+syn region ProgressDoBlock transparent matchgroup=ProgressDo start="\<do\>" matchgroup=ProgressDo end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn region ProgressForBlock transparent matchgroup=ProgressFor start="\<for\>" matchgroup=ProgressFor end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn region ProgressRepeatBlock transparent matchgroup=ProgressRepeat start="\<repeat\>" matchgroup=ProgressRepeat end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+syn region ProgressCaseBlock transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>\|\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
 
 " These are Progress reserved words,
 " and they could go in ProgressReserved,
 " but I found it more helpful to highlight them in a different color.
-syn keyword	ProgressConditional	if else then when otherwise
-syn keyword	ProgressFor		each where
+syn keyword ProgressConditional	if else then when otherwise
+syn keyword ProgressFor				each where
 
 " Make those TODO and debugging notes stand out!
-syn keyword	ProgressTodo		contained	TODO BUG FIX
-syn keyword	ProgressDebug		contained	DEBUG
-syn keyword	ProgressDebug		debugger
-syn match  	ProgressTodo            contained	"NEED[S]*\s\s*WORK"
+syn keyword ProgressTodo			contained	TODO BUG FIX
+syn keyword ProgressDebug			contained	DEBUG
+syn keyword ProgressDebug			debugger
 
 " If you like to highlight the whole line of
 " the start and end of procedures
 " to make the whole block of code stand out:
-syn match	ProgressProcedure	"^\s*procedure.*"
-syn match	ProgressProcedure	"^\s*end\s\s*procedure.*"
-syn match	ProgressFunction	"^\s*function.*"
-syn match	ProgressFunction	"^\s*end\s\s*function.*"
+syn match ProgressProcedure		"^\s*procedure.*"
+syn match ProgressProcedure		"^\s*end\s\s*procedure.*"
+syn match ProgressFunction		"^\s*function.*"
+syn match ProgressFunction		"^\s*end\s\s*function.*"
 " ... otherwise use this:
 " syn keyword ProgressFunction	procedure function
 
-syn keyword	ProgressReserved	accum[ulate] active-window add alias all alter ambig[uous] analyz[e] and any apply as asc[ending] assign at attr[-space]
-syn keyword	ProgressReserved	authorization auto-ret[urn] avail[able] back[ground] before-h[ide] begins bell between blank break btos by call can-do can-find
-syn keyword	ProgressReserved	center[ed] character check chr clear clipboard col colon color col[umn] column-lab[el] col[umns] compiler connected control count-of
-syn keyword	ProgressReserved	cpstream create ctos current current-changed current-lang[uage] current-window current_date curs[or] database dataservers
-syn keyword	ProgressReserved	dbcodepage dbcollation dbname dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimal decimals declare
-syn keyword	ProgressReserved	def default default-noxl[ate] default-window def[ine] delete delimiter desc[ending] dict[ionary] disable discon[nect] disp
-syn keyword	ProgressReserved	disp[lay] distinct dos down drop editing enable encode entry error-stat[us] escape etime except exclusive
-syn keyword	ProgressReserved	exclusive[-lock] exclusive-web-us[er] exists export false fetch field field[s] file-info[rmation] fill find find-case-sensitive
-syn keyword	ProgressReserved	find-global find-next-occurrence find-prev-occurrence find-select find-wrap-around first first-of focus font form form[at]
-syn keyword	ProgressReserved	fram[e] frame-col frame-db frame-down frame-field frame-file frame-inde[x] frame-line frame-name frame-row frame-val[ue]
-syn keyword	ProgressReserved	from from-c[hars] from-p[ixels] gateway[s] get-byte get-codepage[s] get-coll[ations] get-key-val[ue] getbyte global go-on
-syn keyword	ProgressReserved	go-pend[ing] grant graphic-e[dge] group having header help hide import in index indicator input input-o[utput] insert
-syn keyword	ProgressReserved	integer into is is-attr[-space] join kblabel key-code key-func[tion] key-label keycode keyfunc[tion] keylabel keys keyword label
-syn keyword	ProgressReserved	last last-even[t] last-key last-of lastkey ldbname leave library like line-count[er] listi[ng] locked lookup machine-class
-syn keyword	ProgressReserved	map member message message-lines mouse mpe new next next-prompt no no-attr[-space] no-error no-f[ill] no-help no-hide no-label[s]
-syn keyword	ProgressReserved	no-lock no-map no-mes[sage] no-pause no-prefe[tch] no-undo no-val[idate] no-wait not null num-ali[ases] num-dbs num-entries
-syn keyword	ProgressReserved	of off old on open opsys option or os-append os-command os-copy os-create-dir os-delete os-dir os-drive[s] os-error os-rename
-syn keyword	ProgressReserved	os2 os400 output overlay page page-bot[tom] page-num[ber] page-top param[eter] pause pdbname persist[ent] pixels
-syn keyword	ProgressReserved	preproc[ess] privileges proc-ha[ndle] proc-st[atus] process program-name Progress prompt prompt[-for] promsgs propath provers[ion]
-syn keyword	ProgressReserved	put put-byte put-key-val[ue] putbyte query query-tuning quit r-index rcode-informatio[n] readkey recid record-len[gth] rect[angle]
-syn keyword	ProgressReserved	release reposition retain retry return return-val[ue] revert revoke run save schema screen screen-io screen-lines
-syn keyword	ProgressReserved	scroll sdbname search seek select self session set setuser[id] share[-lock] shared show-stat[s] skip some space status stream
-syn keyword	ProgressReserved	stream-io string-xref system-dialog table term term[inal] text text-cursor text-seg[-growth] this-procedure time title
-syn keyword	ProgressReserved	to today top-only trans trans[action] trigger triggers trim true underl[ine] undo unform[atted] union unique unix up update
-syn keyword	ProgressReserved	use-index use-revvideo use-underline user user[id] using v6frame value values variable view view-as vms wait-for web-con[text]
-syn keyword	ProgressReserved	window window-maxim[ized] window-minim[ized] window-normal with work-tab[le] workfile write xcode xref yes _cbit
-syn keyword	ProgressReserved	_control _list _memory _msg _pcontrol _serial[-num] _trace 
+syn keyword ProgressReserved	accum[ulate] active-form active-window add alias all alter ambig[uous] analyz[e] and any apply as asc[ending]
+syn keyword ProgressReserved	assign asynchronous at attr[-space] audit-control audit-policy authorization auto-ret[urn] avail[able] back[ground]
+syn keyword ProgressReserved	before-h[ide] begins bell between big-endian blank break buffer-comp[are] buffer-copy by by-pointer by-variant-point[er] call
+syn keyword ProgressReserved	can-do can-find case case-sen[sitive] cast center[ed] check chr clear clipboard codebase-locator colon color column-lab[el]
+syn keyword ProgressReserved	col[umns] com-self compiler connected control copy-lob count-of cpstream create current current-changed current-lang[uage]
+syn keyword ProgressReserved	current-window current_date curs[or] database dataservers dataset dataset-handle db-remote-host dbcodepage dbcollation dbname
+syn keyword ProgressReserved	dbparam dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimals declare default
+syn keyword ProgressReserved	default-noxl[ate] default-window def[ine] delete delimiter desc[ending] dict[ionary] disable discon[nect] disp[lay] distinct do dos
+syn keyword ProgressReserved	down drop dynamic-cast dynamic-func[tion] dynamic-new each editing else enable encode end entry error-stat[us] escape
+syn keyword ProgressReserved	etime event-procedure except exclusive[-lock] exclusive-web[-user] exists export false fetch field[s] file-info[rmation]
+syn keyword ProgressReserved	fill find find-case-sensitive find-global find-next-occurrence find-prev-occurrence find-select find-wrap-around first
+syn keyword ProgressReserved	first-of focus font for form[at] fram[e] frame-col frame-db frame-down frame-field frame-file frame-inde[x] frame-line
+syn keyword ProgressReserved	frame-name frame-row frame-val[ue] from from-c[hars] from-p[ixels] function-call-type gateway[s] get-attr-call-type get-byte
+syn keyword ProgressReserved	get-codepage[s] get-coll[ations] get-column get-error-column get-error-row get-file-name get-file-offse[t] get-key-val[ue]
+syn keyword ProgressReserved	get-message-type get-row getbyte global go-on go-pend[ing] grant graphic-e[dge] group having header help hide host-byte-order if
+syn keyword ProgressReserved	import in index indicator input input-o[utput] insert into is is-attr[-space] join kblabel key-code key-func[tion] key-label
+syn keyword ProgressReserved	keycode keyfunc[tion] keylabel keys keyword label last last-even[t] last-key last-of lastkey ldbname leave library like
+syn keyword ProgressReserved	like-sequential line-count[er] listi[ng] little-endian locked log-manager lookup machine-class map member message message-lines mouse
+syn keyword ProgressReserved	mpe new next next-prompt no no-attr[-space] no-error no-f[ill] no-help no-hide no-label[s] no-lobs no-lock no-map
+syn keyword ProgressReserved	no-mes[sage] no-pause no-prefe[tch] no-return-val[ue] no-undo no-val[idate] no-wait not now null num-ali[ases] num-dbs num-entries
+syn keyword ProgressReserved	of off old on open opsys option or os-append os-command os-copy os-create-dir os-delete os-dir os-drive[s] os-error
+syn keyword ProgressReserved	os-rename otherwise output overlay page page-bot[tom] page-num[ber] page-top param[eter] password-field pause pdbname
+syn keyword ProgressReserved	persist[ent] pixels preproc[ess] privileges proc-ha[ndle] proc-st[atus] procedure-call-type process profiler program-name progress
+syn keyword ProgressReserved	prompt[-for] promsgs propath provers[ion] publish put put-byte put-key-val[ue] putbyte query query-tuning quit r-index
+syn keyword ProgressReserved	rcode-info[rmation] read-available read-exact-num readkey recid record-len[gth] rect[angle] release repeat reposition retain retry return
+syn keyword ProgressReserved	return-val[ue] revert revoke row-created row-deleted row-modified row-unmodified run save sax-comple[te] sax-parser-error
+syn keyword ProgressReserved	sax-running sax-uninitialized sax-write-begin sax-write-complete sax-write-content sax-write-element sax-write-error
+syn keyword ProgressReserved	sax-write-idle sax-write-tag schema screen screen-io screen-lines scroll sdbname search search-self search-target security-policy
+syn keyword ProgressReserved	seek select self session set set-attr-call-type setuser[id] share[-lock] shared show-stat[s] skip some source-procedure
+syn keyword ProgressReserved	space status stream stream-handle stream-io string-xref subscribe super system-dialog table table-handle target-procedure
+syn keyword ProgressReserved	term[inal] text text-cursor text-seg[-grow] then this-object this-procedure time title to today top-only trans[action] trigger
+syn keyword ProgressReserved	triggers trim true underl[ine] undo unform[atted] union unique unix unless-hidden unsubscribe up update use-index use-revvideo
+syn keyword ProgressReserved	use-underline user[id] using value values view view-as wait-for web-con[text] when where while window window-delayed-min[imize]
+syn keyword ProgressReserved	window-maxim[ized] window-minim[ized] window-normal with work-tab[le] workfile write xcode xcode-session-key xref xref-xml yes
 
 " Strings. Handles embedded quotes.
 " Note that, for some reason, Progress doesn't use the backslash, "\"
 " as the escape character; it uses tilde, "~".
-syn region	ProgressString		matchgroup=ProgressQuote	start=+"+ end=+"+	skip=+\~'\|\~\~+
-syn region	ProgressString		matchgroup=ProgressQuote	start=+'+ end=+'+	skip=+\~'\|\~\~+
+syn region ProgressString matchgroup=ProgressQuote start=+"+ end=+"+ skip=+\~'\|\~\~\|\~"+ contains=@Spell
+syn region ProgressString matchgroup=ProgressQuote start=+'+ end=+'+ skip=+\~'\|\~\~\|\~"+ contains=@Spell
 
-syn match	ProgressIdentifier	"\<[a-zA-Z_%#]+\>()"
+syn match  ProgressIdentifier		"\<[a-zA-Z_][a-zA-Z0-9_]*\>()"
 
-" syn match	ProgressDelimiter	"()"
+" syn match  ProgressDelimiter		"()"
 
-syn match	ProgressMatrixDelimiter	"[][]"
-" If you prefer you can highlight the range
-"syn match	ProgressMatrixDelimiter	"[\d\+\.\.\d\+]"
+syn match  ProgressMatrixDelimiter	"[][]"
+" If you prefer you can highlight the range:
+"syn match  ProgressMatrixDelimiter	"[\d\+\.\.\d\+]"
 
-syn match	ProgressNumber		"\<\-\=\d\+\(u\=l\=\|lu\|f\)\>"
-syn match	ProgressByte		"\$[0-9a-fA-F]\+"
+syn match  ProgressNumber		"\<\-\=\d\+\(u\=l\=\|lu\|f\)\>"
+syn match  ProgressByte			"\$[0-9a-fA-F]\+"
 
 " More values: Logicals, and Progress's unknown value, ?.
-syn match	ProgressNumber		"?"
-syn keyword	ProgressNumber		true false yes no
+syn match   ProgressNumber				"?"
+syn keyword ProgressNumber		true false yes no
 
 " If you don't like tabs:
-syn match	ProgressShowTab		"\t"
+syn match ProgressShowTab "\t"
 
-" If you don't like white space on the end of lines:
-" syn match	ProgressSpaceError	"\s\+$"
+" If you don't like white space on the end of lines, uncomment this:
+" syn match   ProgressSpaceError "\s\+$"
 
-syn region	ProgressComment		start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug
-syn region	ProgressInclude		start="^[ 	]*[{][^&]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
-syn region	ProgressPreProc		start="&" end="\>" contained
+syn region ProgressComment		start="/\*"  end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug,@Spell
+syn region ProgressInclude		start="^[ 	]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
+syn region ProgressPreProc		start="&" end="\>" contained
 
 " This next line works reasonably well.
-" syn match	ProgressOperator        "[!;|)(:.><+*=-]"
+" syn match ProgressOperator        "[!;|)(:.><+*=-]"
 "
 " Progress allows a '-' to be part of an identifier.  To be considered
 " the subtraction/negation operation operator it needs a non-word
 " character on either side.  Also valid are cases where the minus
 " operation appears at the beginning or end of a line.
 " This next line trips up on "no-undo" etc.
-" syn match	ProgressOperator	"[!;|)(:.><+*=]\|\W-\W\|^-\W\|\W-$"
-syn match	ProgressOperator	"[!;|)(:.><+*=]\|\s-\s\|^-\s\|\s-$"
+" syn match ProgressOperator    "[!;|)(:.><+*=]\|\W-\W\|^-\W\|\W-$"
+syn match ProgressOperator      "[!;|)(:.><+*=]\|\s-\s\|^-\s\|\s-$"
 
-syn keyword	ProgressOperator	<= <> >= abs[olute] accelerator across add-first add-last advise alert-box allow-replication ansi-only anywhere append appl-alert[-boxes] application as-cursor ask-overwrite
-syn keyword	ProgressOperator	attach[ment] auto-end-key auto-endkey auto-go auto-ind[ent] auto-resize auto-z[ap] available-formats ave[rage] avg backward[s] base-key batch[-mode] bgc[olor] binary
-syn keyword	ProgressOperator	bind-where block-iteration-display border-bottom border-bottom-ch[ars] border-bottom-pi[xels] border-left border-left-char[s] border-left-pixe[ls] border-right border-right-cha[rs]
-syn keyword	ProgressOperator	border-right-pix[els] border-t[op] border-t[op-chars] border-top-pixel[s] both bottom box box-select[able] browse browse-header buffer buffer-chars buffer-lines
-syn keyword	ProgressOperator	button button[s] byte cache cache-size can-query can-set cancel-break cancel-button caps careful-paint case-sensitive cdecl char[acter] character_length charset
-syn keyword	ProgressOperator	checked choose clear-select[ion] close code codepage codepage-convert col-of colon-align[ed] color-table column-bgc[olor] column-dcolor column-fgc[olor] column-font
-syn keyword	ProgressOperator	column-label-bgc[olor] column-label-dcolor column-label-fgc[olor] column-label-font column-of column-pfc[olor] column-sc[rolling] combo-box command compile complete
-syn keyword	ProgressOperator	connect constrained contents context context-pop[up] control-containe[r] c[ontrol-form] convert-to-offse[t] convert count cpcase cpcoll cpint[ernal] cplog
-syn keyword	ProgressOperator	cpprint cprcodein cprcodeout cpterm crc-val[ue] c[reate-control] create-result-list-entry create-test-file current-column current-environm[ent] current-iteration
-syn keyword	ProgressOperator	current-result-row current-row-modified current-value cursor-char cursor-line cursor-offset data-entry-retur[n] data-t[ype] date date-f[ormat] day db-references
-syn keyword	ProgressOperator	dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] dec[imal] default-b[utton] default-extensio[n] defer-lob-fetch define defined delete-char delete-current-row
-syn keyword	ProgressOperator	delete-line delete-selected-row delete-selected-rows deselect-focused-row deselect-rows deselect-selected-row d[esign-mode] dialog-box dialog-help dir disabled display-message
-syn keyword	ProgressOperator	display-t[ype] double drag-enabled drop-down drop-down-list dump dynamic echo edge edge[-chars] edge-p[ixels] editor empty end-key endkey entered eq error error-col[umn]
-syn keyword	ProgressOperator	error-row event-t[ype] event[s] exclusive-id execute exp expand extended extent external extract fetch-selected-row fgc[olor] file file-name file-off[set] file-type
-syn keyword	ProgressOperator	filename fill-in filled filters first-child first-column first-proc[edure] first-tab-i[tem] fixed-only float focused-row font-based-layout font-table force-file
-syn keyword	ProgressOperator	fore[ground] form-input forward[s] frame-spa[cing] frame-x frame-y frequency from-cur[rent] full-height full-height-char[s] full-height-pixe[ls] full-pathn[ame]
-syn keyword	ProgressOperator	full-width full-width[-chars] full-width-pixel[s] ge get get-blue[-value] g[et-char-property] get-double get-dynamic get-file get-float get-green[-value]
-syn keyword	ProgressOperator	get-iteration get-license get-long get-message get-number get-pointer-value get-red[-value] get-repositioned-row get-selected-wid[get] get-short get-signature get-size
-syn keyword	ProgressOperator	get-string get-tab-item get-text-height get-text-height-char[s] get-text-height-pixe[ls] get-text-width get-text-width-c[hars] get-text-width-pixel[s] get-unsigned-short
-syn keyword	ProgressOperator	grayed grid-factor-horizont[al] grid-factor-vert[ical] grid-set grid-snap grid-unit-height grid-unit-height-cha[rs] grid-unit-height-pix[els] grid-unit-width grid-unit-width-char[s]
-syn keyword	ProgressOperator	grid-unit-width-pixe[ls] grid-visible gt handle height height[-chars] height-p[ixels] help-con[text] helpfile-n[ame] hidden hint hori[zontal] hwnd image image-down
-syn keyword	ProgressOperator	image-insensitive image-size image-size-c[hars] image-size-pixel[s] image-up immediate-display index-hint indexed-reposition info[rmation] init init[ial] initial-dir
-syn keyword	ProgressOperator	initial-filter initiate inner inner-chars inner-lines insert-b[acktab] insert-file insert-row insert-string insert-t[ab] int[eger] internal-entries is-lead-byte
-syn keyword	ProgressOperator	is-row-selected is-selected item items-per-row join-by-sqldb keep-frame-z-ord[er] keep-messages keep-tab-order key keyword-all label-bgc[olor] label-dc[olor] label-fgc[olor]
-syn keyword	ProgressOperator	label-font label-pfc[olor] labels language[s] large large-to-small last-child last-tab-i[tem] last-proce[dure] lc le leading left left-align[ed] left-trim length
-syn keyword	ProgressOperator	line list-events list-items list-query-attrs list-set-attrs list-widgets load l[oad-control] load-icon load-image load-image-down load-image-insensitive load-image-up
-syn keyword	ProgressOperator	load-mouse-point[er] load-small-icon log logical lookahead lower lt manual-highlight margin-extra margin-height margin-height-ch[ars] margin-height-pi[xels] margin-width
-syn keyword	ProgressOperator	margin-width-cha[rs] margin-width-pix[els] matches max max-chars max-data-guess max-height max-height[-chars] max-height-pixel[s] max-rows max-size max-val[ue] max-width
-syn keyword	ProgressOperator	max-width[-chars] max-width-p[ixels] maximize max[imum] memory menu menu-bar menu-item menu-k[ey] menu-m[ouse] menubar message-area message-area-font message-line
-syn keyword	ProgressOperator	min min-height min-height[-chars] min-height-pixel[s] min-size min-val[ue] min-width min-width[-chars] min-width-p[ixels] min[imum] mod modified mod[ulo] month mouse-p[ointer]
-syn keyword	ProgressOperator	movable move-after-tab-i[tem] move-before-tab-[item] move-col[umn] move-to-b[ottom] move-to-eof move-to-t[op] multiple multiple-key multitasking-interval must-exist
-syn keyword	ProgressOperator	name native ne new-row next-col[umn] next-sibling next-tab-ite[m] next-value no-apply no-assign no-bind-where no-box no-column-scroll[ing] no-convert no-current-value
-syn keyword	ProgressOperator	no-debug no-drag no-echo no-index-hint no-join-by-sqldb no-lookahead no-row-markers no-scrolling no-separate-connection no-separators no-und[erline] no-word-wrap
-syn keyword	ProgressOperator	none num-but[tons] num-col[umns] num-copies num-formats num-items num-iterations num-lines num-locked-colum[ns] num-messages num-results num-selected num-selected-rows
-syn keyword	ProgressOperator	num-selected-widgets num-tabs num-to-retain numeric numeric-f[ormat] octet_length ok ok-cancel on-frame[-border] ordered-join ordinal orientation os-getenv outer
-syn keyword	ProgressOperator	outer-join override owner page-size page-wid[th] paged parent partial-key pascal pathname pfc[olor] pinnable pixels-per-colum[n] pixels-per-row popup-m[enu] popup-o[nly]
-syn keyword	ProgressOperator	position precision presel[ect] prev prev-col[umn] prev-sibling prev-tab-i[tem] primary printer-control-handle printer-setup private-d[ata] profiler Progress-s[ource]
-syn keyword	ProgressOperator	publish put-double put-float put-long put-short put-string put-unsigned-short query-off-end question radio-buttons radio-set random raw raw-transfer read-file read-only
-syn keyword	ProgressOperator	real recursive refresh refreshable replace replace-selection-text replication-create replication-delete replication-write request resiza[ble] resize retry-cancel
-syn keyword	ProgressOperator	return-ins[erted] return-to-start-di[r] reverse-from right right-align[ed] right-trim round row row-ma[rkers] row-of rowid rule rule-row rule-y save-as save-file
-syn keyword	ProgressOperator	screen-val[ue] scroll-bars scroll-delta scroll-horiz-value scroll-offset scroll-to-current-row scroll-to-i[tem] scroll-to-selected-row scroll-vert-value scrollable
-syn keyword	ProgressOperator	scrollbar-horizo[ntal] scrollbar-vertic[al] scrolled-row-positio[n] scrolling se-check-pools se-enable-of[f] se-enable-on se-num-pools se-use-messa[ge] section select-focused-row
-syn keyword	ProgressOperator	select-next-row select-prev-row select-repositioned-row select-row selectable selected selected-items selection-end selection-list selection-start selection-text
-syn keyword	ProgressOperator	send sensitive separate-connection separators set-blue[-value] set-break set-cell-focus set-contents set-dynamic set-green[-value] set-leakpoint set-pointer-valu[e]
-syn keyword	ProgressOperator	s[et-property] set-red[-value] set-repositioned-row set-selection set-size set-wait[-state] side-lab side-lab[e] side-lab[el] side-label-handl[e] side-lab[els] silent
-syn keyword	ProgressOperator	simple single size size-c[hars] size-p[ixels] slider smallint sort source source-procedure sql sqrt start status-area status-area-font status-bar stdcall stenciled stop stoppe[d]
-syn keyword	ProgressOperator	stored-proc[edure] string sub-ave[rage] sub-count sub-max[imum] sub-me[nu] sub-menu-help sub-min[imum] sub-total subscribe subst[itute] substr[ing] subtype sum super suppress-warning[s]
-syn keyword	ProgressOperator	system-alert-box[es] system-help tab-position tabbable target target-procedure temp-dir[ectory] temp-table terminate text-selected three-d through thru tic-marks time-source title-bgc[olor]
-syn keyword	ProgressOperator	title-dc[olor] title-fgc[olor] title-fo[nt] to-rowid toggle-box tool-bar top topic total trailing trunc[ate] type unbuff[ered] unique-id unload unsubscribe upper use use-dic[t-exps]
-syn keyword	ProgressOperator	use-filename use-text v6display valid-event valid-handle validate validate-condition validate-message var[iable] vert[ical] virtual-height virtual-height-c[hars]
-syn keyword	ProgressOperator	virtual-height-pixel[s] virtual-width virtual-width-ch[ars] virtual-width-pi[xels] visible wait warning weekday widget widget-e[nter] widget-h[andle] widget-l[eave]
-syn keyword	ProgressOperator	widget-pool width width[-chars] width-p[ixels] window-name window-sta[te] window-sys[tem] word-wrap x-of y-of year yes-no yes-no-cancel _dcm
+syn keyword ProgressOperator	<= <> >=
+syn keyword ProgressOperator	abs[olute] accelerator accept-changes accept-row-changes across active actor add-buffer add-calc-col[umn]
+syn keyword ProgressOperator	add-columns-from add-events-proc[edure] add-fields-from add-first add-header-entry add-index-field add-interval add-last
+syn keyword ProgressOperator	add-like-col[umn] add-like-field add-like-index add-new-field add-new-index add-rel[ation] add-schema-location add-source-buffer
+syn keyword ProgressOperator	add-super-proc[edure] adm-data advise after-buffer after-rowid after-table alert-box allow-column-searching allow-replication alternate-key
+syn keyword ProgressOperator	always-on-top ansi-only anywhere append append-child appl-alert[-boxes] appl-context-id application apply-callback appserver-info
+syn keyword ProgressOperator	appserver-password appserver-userid array-m[essage] ask-overwrite assembly async-request-count async-request-handle attach-data-source
+syn keyword ProgressOperator	attached-pairlist attach attribute-names audit-enabled audit-event-context authentication-failed auto-comp[letion] auto-delete
+syn keyword ProgressOperator	auto-delete-xml auto-end-key auto-endkey auto-go auto-ind[ent] auto-resize auto-synchronize auto-val[idate] auto-z[ap] automatic
+syn keyword ProgressOperator	available-formats ave[rage] avg backward[s] base-ade base-key basic-logging batch[-mode] batch-size before-buffer before-rowid
+syn keyword ProgressOperator	before-table begin-event-group bgc[olor] binary bind bind-where blob block-iteration-display border-b[ottom-chars]
+syn keyword ProgressOperator	border-bottom-p[ixels] border-l[eft-chars] border-left-p[ixels] border-r[ight-chars] border-right-p[ixels] border-t[op-chars]
+syn keyword ProgressOperator	border-top-p[ixels] both bottom box box-select[able] browse buffer buffer-chars buffer-create buffer-delete buffer-field buffer-handle
+syn keyword ProgressOperator	buffer-lines buffer-n[ame] buffer-releas[e] buffer-validate buffer-value button[s] by-reference by-value byte bytes-read
+syn keyword ProgressOperator	bytes-written cache cache-size call-name call-type can-crea[te] can-dele[te] can-query can-read can-set can-writ[e] cancel-break
+syn keyword ProgressOperator	cancel-button cancel-requests cancelled caps careful-paint catch cdecl chained char[acter] character_length charset checked
+syn keyword ProgressOperator	child-buffer child-num choose class class-type clear-appl-context clear-log clear-select[ion] clear-sort-arrow[s]
+syn keyword ProgressOperator	client-connection-id client-principal client-tty client-type client-workstation clob clone-node close close-log code codepage
+syn keyword ProgressOperator	codepage-convert col-of collate colon-align[ed] color-table column-bgc[olor] column-codepage column-dcolor column-fgc[olor]
+syn keyword ProgressOperator	column-font column-movable column-of column-pfc[olor] column-read-only column-resizable column-sc[rolling] com-handle combo-box
+syn keyword ProgressOperator	command compare[s] compile complete config-name connect constructor contents context context-help context-help-file
+syn keyword ProgressOperator	context-help-id context-pop[up] control-box control-fram[e] convert convert-to-offs[et] copy-dataset copy-sax-attributes
+syn keyword ProgressOperator	copy-temp-table count cpcase cpcoll cpint[ernal] cplog cpprint cprcodein cprcodeout cpterm crc-val[ue] create-like
+syn keyword ProgressOperator	create-like-sequential create-node create-node-namespace create-result-list-entry create-test-file current-column current-env[ironment]
+syn keyword ProgressOperator	current-iteration current-query current-result-row current-row-modified current-value cursor-char cursor-line cursor-offset data-b[ind]
+syn keyword ProgressOperator	data-entry-ret[urn] data-rel[ation] data-source data-source-complete-map data-source-modified data-source-rowid data-t[ype] date
+syn keyword ProgressOperator	date-f[ormat] day db-references dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] debug-alert
+syn keyword ProgressOperator	declare-namespace decrypt default-buffer-handle default-but[ton] default-commit default-ex[tension] default-string
+syn keyword ProgressOperator	default-value define-user-event-manager defined delete-char delete-current-row delete-header-entry delete-line delete-node
+syn keyword ProgressOperator	delete-result-list-entry delete-selected-row delete-selected-rows descript[ion] deselect-focused-row deselect-rows deselect-selected-row
+syn keyword ProgressOperator	destructor detach-data-source dialog-box dir directory disable-auto-zap disable-connections disable-dump-triggers
+syn keyword ProgressOperator	disable-load-triggers disabled display-message display-timezone display-t[ype] domain-description domain-name domain-type double
+syn keyword ProgressOperator	drag-enabled drop-down drop-down-list drop-target dump dump-logging-now dynamic dynamic-current-value dynamic-next-value echo
+syn keyword ProgressOperator	edge[-chars] edge-p[ixels] edit-can-paste edit-can-undo edit-clear edit-copy edit-cut edit-paste edit-undo editor empty
+syn keyword ProgressOperator	empty-dataset empty-temp-table enable-connections enabled encoding encrypt encrypt-audit-mac-key encryption-salt end-document
+syn keyword ProgressOperator	end-element end-event-group end-file-drop end-key end-user-prompt endkey entered entry-types-list eq error error-col[umn]
+syn keyword ProgressOperator	error-object-detail error-row error-stack-trace error-string event-group-id event-procedure-context event-t[ype] events exclusive-id
+syn keyword ProgressOperator	execute execution-log exp expand expandable expire explicit export-principal extended extent external extract
+syn keyword ProgressOperator	fetch-selected-row fgc[olor] file file-create-d[ate] file-create-t[ime] file-mod-d[ate] file-mod-t[ime] file-name file-off[set]
+syn keyword ProgressOperator	file-size file-type filename fill-in fill-mode fill-where-string filled filters final finally find-by-rowid find-current
+syn keyword ProgressOperator	find-first find-last find-unique finder first-async[-request] first-buffer first-child first-column first-data-source
+syn keyword ProgressOperator	first-dataset first-form first-object first-proc[edure] first-query first-serv[er] first-server-socket first-socket
+syn keyword ProgressOperator	first-tab-i[tem] fit-last-column fix-codepage fixed-only flat-button float focused-row focused-row-selected font-table force-file
+syn keyword ProgressOperator	fore[ground] foreign-key-hidden form-input form-long-input formatte[d] forward-only forward[s] fragmen[t] frame-spa[cing] frame-x
+syn keyword ProgressOperator	frame-y frequency from-cur[rent] full-height[-chars] full-height-p[ixels] full-pathn[ame] full-width[-chars]
+syn keyword ProgressOperator	full-width-p[ixels] function ge generate-pbe-key generate-pbe-salt generate-random-key generate-uuid get get-attribute get-attribute-node
+syn keyword ProgressOperator	get-binary-data get-bits get-blue[-value] get-browse-col[umn] get-buffer-handle get-byte-order get-bytes get-bytes-available
+syn keyword ProgressOperator	get-callback-proc-context get-callback-proc-name get-cgi-list get-cgi-long-value get-cgi-value get-changes get-child get-child-rel[ation]
+syn keyword ProgressOperator	get-config-value get-curr[ent] get-dataset-buffer get-dir get-document-element get-double get-dropped-file get-dynamic get-file
+syn keyword ProgressOperator	get-firs[t] get-float get-green[-value] get-header-entr[y] get-index-by-namespace-name get-index-by-qname get-iteration get-last
+syn keyword ProgressOperator	get-localname-by-index get-long get-message get-next get-node get-number get-parent get-pointer-value get-prev get-printers get-property
+syn keyword ProgressOperator	get-qname-by-index get-red[-value] get-rel[ation] get-repositioned-row get-rgb[-value] get-selected[-widget] get-serialized get-short
+syn keyword ProgressOperator	get-signature get-size get-socket-option get-source-buffer get-string get-tab-item get-text-height[-chars] get-text-height-p[ixels]
+syn keyword ProgressOperator	get-text-width[-chars] get-text-width-p[ixels] get-top-buffer get-type-by-index get-type-by-namespace-name get-type-by-qname
+syn keyword ProgressOperator	get-unsigned-long get-unsigned-short get-uri-by-index get-value-by-index get-value-by-namespace-name get-value-by-qname
+syn keyword ProgressOperator	get-wait[-state] grayed grid-factor-h[orizontal] grid-factor-v[ertical] grid-snap grid-unit-height[-chars] grid-unit-height-p[ixels]
+syn keyword ProgressOperator	grid-unit-width[-chars] grid-unit-width-p[ixels] grid-visible group-box gt guid handle handler has-lobs has-records height[-chars]
+syn keyword ProgressOperator	height-p[ixels] help-topic hex-decode hex-encode hidden hint hori[zontal] html-charset html-end-of-line html-end-of-page
+syn keyword ProgressOperator	html-frame-begin html-frame-end html-header-begin html-header-end html-title-begin html-title-end hwnd icfparam[eter] icon
+syn keyword ProgressOperator	ignore-current-mod[ified] image image-down image-insensitive image-size image-size-c[hars] image-size-p[ixels] image-up immediate-display
+syn keyword ProgressOperator	implements import-node import-principal in-handle increment-exclusive-id index-hint index-info[rmation] indexed-reposition
+syn keyword ProgressOperator	info[rmation] inherit-bgc[olor] inherit-fgc[olor] inherits init[ial] initial-dir initial-filter initialize-document-type initiate
+syn keyword ProgressOperator	inner inner-chars inner-lines input-value insert-attribute insert-b[acktab] insert-before insert-file insert-row
+syn keyword ProgressOperator	insert-string insert-t[ab] instantiating-procedure int[eger] interface internal-entries interval invoke is-clas[s]
+syn keyword ProgressOperator	is-codepage-fixed is-column-codepage is-lead-byte is-open is-parameter-set is-row-selected is-selected is-xml iso-date item
+syn keyword ProgressOperator	items-per-row join-by-sqldb keep-connection-open keep-frame-z[-order] keep-messages keep-security-cache keep-tab-order key
+syn keyword ProgressOperator	keyword-all label-bgc[olor] label-dc[olor] label-fgc[olor] label-font label-pfc[olor] labels landscape language[s] large
+syn keyword ProgressOperator	large-to-small last-async[-request] last-batch last-child last-form last-object last-proce[dure] last-serv[er] last-server-socket
+syn keyword ProgressOperator	last-socket last-tab-i[tem] lc le leading left left-align[ed] left-trim length line list-events list-item-pairs list-items
+syn keyword ProgressOperator	list-property-names list-query-attrs list-set-attrs list-widgets literal-question load load-domains load-icon load-image load-image-down
+syn keyword ProgressOperator	load-image-insensitive load-image-up load-mouse-p[ointer] load-picture load-small-icon lob-dir local-host local-name local-port
+syn keyword ProgressOperator	locator-column-number locator-line-number locator-public-id locator-system-id locator-type lock-registration log log-audit-event
+syn keyword ProgressOperator	log-entry-types log-threshold logfile-name logging-level logical login-expiration-timestamp login-host login-state logout long[char]
+syn keyword ProgressOperator	longchar-to-node-value lookahead lower lt mandatory manual-highlight margin-extra margin-height[-chars] margin-height-p[ixels]
+syn keyword ProgressOperator	margin-width[-chars] margin-width-p[ixels] mark-new mark-row-state matches max-button max-chars max-data-guess max-height[-chars]
+syn keyword ProgressOperator	max-height-p[ixels] max-rows max-size max-val[ue] max-width[-chars] max-width-p[ixels] maximize max[imum] maximum-level memory memptr
+syn keyword ProgressOperator	memptr-to-node-value menu menu-bar menu-item menu-k[ey] menu-m[ouse] menubar merge-by-field merge-changes merge-row-changes message-area
+syn keyword ProgressOperator	message-area-font method min-button min-column-width-c[hars] min-column-width-p[ixels] min-height[-chars] min-height-p[ixels]
+syn keyword ProgressOperator	min-schema-marshal min-size min-val[ue] min-width[-chars] min-width-p[ixels] min[imum] modified mod[ulo] month mouse-p[ointer] movable
+syn keyword ProgressOperator	move-after[-tab-item] move-befor[e-tab-item] move-col[umn] move-to-b[ottom] move-to-eof move-to-t[op] mtime multi-compile multiple
+syn keyword ProgressOperator	multiple-key multitasking-interval must-exist must-understand name namespace-prefix namespace-uri native ne needs-appserver-prompt
+syn keyword ProgressOperator	needs-prompt nested new-instance new-row next-col[umn] next-rowid next-sibling next-tab-ite[m] next-value no-apply
+syn keyword ProgressOperator	no-array-m[essage] no-assign no-attr-l[ist] no-auto-validate no-bind-where no-box no-console no-convert no-current-value no-debug
+syn keyword ProgressOperator	no-drag no-echo no-empty-space no-focus no-index-hint no-inherit-bgc[olor] no-inherit-fgc[olor] no-join-by-sqldb no-lookahead
+syn keyword ProgressOperator	no-row-markers no-schema-marshal no-scrollbar-v[ertical] no-separate-connection no-separators no-tab[-stop] no-und[erline]
+syn keyword ProgressOperator	no-word-wrap node-value node-value-to-longchar node-value-to-memptr nonamespace-schema-location none normalize not-active
+syn keyword ProgressOperator	num-buffers num-but[tons] num-child-relations num-children num-col[umns] num-copies num-dropped-files num-fields num-formats
+syn keyword ProgressOperator	num-header-entries num-items num-iterations num-lines num-locked-col[umns] num-log-files num-messages num-parameters num-references
+syn keyword ProgressOperator	num-relations num-repl[aced] num-results num-selected-rows num-selected[-widgets] num-source-buffers num-tabs num-to-retain
+syn keyword ProgressOperator	num-top-buffers num-visible-col[umns] numeric numeric-dec[imal-point] numeric-f[ormat] numeric-sep[arator] object ok ok-cancel
+syn keyword ProgressOperator	on-frame[-border] ordered-join ordinal orientation origin-handle origin-rowid os-getenv outer outer-join override owner owner-document
+syn keyword ProgressOperator	page-size page-wid[th] paged parent parent-buffer parent-rel[ation] parse-status partial-key pascal pathname
+syn keyword ProgressOperator	pbe-hash-alg[orithm] pbe-key-rounds perf[ormance] persistent-cache-disabled persistent-procedure pfc[olor] pixels-per-col[umn]
+syn keyword ProgressOperator	pixels-per-row popup-m[enu] popup-o[nly] portrait position precision prefer-dataset prepare-string prepared presel[ect] prev
+syn keyword ProgressOperator	prev-col[umn] prev-sibling prev-tab-i[tem] primary printer printer-control-handle printer-hdc printer-name printer-port
+syn keyword ProgressOperator	printer-setup private private-d[ata] proce[dure] procedure-name progress-s[ource] property protected proxy proxy-password
+syn keyword ProgressOperator	proxy-userid public public-id published-events put-bits put-bytes put-double put-float put-long put-short put-string
+syn keyword ProgressOperator	put-unsigned-long put-unsigned-short query-close query-off-end query-open query-prepare question quoter radio-buttons radio-set random
+syn keyword ProgressOperator	raw raw-transfer read read-file read-only read-xml read-xmlschema real recursive reference-only refresh
+syn keyword ProgressOperator	refresh-audit-policy refreshable register-domain reject-changes reject-row-changes rejected relation-fi[elds] relations-active remote
+syn keyword ProgressOperator	remote-host remote-port remove-attribute remove-child remove-events-proc[edure] remove-super-proc[edure] replace replace-child
+syn keyword ProgressOperator	replace-selection-text replication-create replication-delete replication-write reposition-back[ward] reposition-forw[ard] reposition-to-row
+syn keyword ProgressOperator	reposition-to-rowid request reset resiza[ble] resize restart-row restart-rowid result retain-s[hape] retry-cancel return-ins[erted]
+syn keyword ProgressOperator	return-to-start-di[r] return-value-data-type returns reverse-from rgb-v[alue] right right-align[ed] right-trim roles round rounded
+syn keyword ProgressOperator	routine-level row row-height[-chars] row-height-p[ixels] row-ma[rkers] row-of row-resizable row-state rowid rule run-proc[edure]
+syn keyword ProgressOperator	save-as save-file save-row-changes save-where-string sax-attributes sax-parse sax-parse-first sax-parse-next sax-reader
+syn keyword ProgressOperator	sax-writer schema-change schema-location schema-marshal schema-path screen-val[ue] scroll-bars scroll-delta scroll-offset
+syn keyword ProgressOperator	scroll-to-current-row scroll-to-i[tem] scroll-to-selected-row scrollable scrollbar-h[orizontal] scrollbar-v[ertical]
+syn keyword ProgressOperator	scrolled-row-pos[ition] scrolling seal seal-timestamp section select-all select-focused-row select-next-row select-prev-row select-row
+syn keyword ProgressOperator	selectable selected selection-end selection-list selection-start selection-text send sensitive separate-connection
+syn keyword ProgressOperator	separator-fgc[olor] separators server server-connection-bo[und] server-connection-bound-re[quest] server-connection-co[ntext]
+syn keyword ProgressOperator	server-connection-id server-operating-mode server-socket session-end session-id set-actor set-appl-context set-attribute
+syn keyword ProgressOperator	set-attribute-node set-blue[-value] set-break set-buffers set-byte-order set-callback set-callback-procedure set-client set-commit
+syn keyword ProgressOperator	set-connect-procedure set-contents set-db-client set-dynamic set-green[-value] set-input-source set-must-understand set-node
+syn keyword ProgressOperator	set-numeric-form[at] set-option set-output-destination set-parameter set-pointer-val[ue] set-property set-read-response-procedure
+syn keyword ProgressOperator	set-red[-value] set-repositioned-row set-rgb[-value] set-rollback set-selection set-serialized set-size set-socket-option
+syn keyword ProgressOperator	set-sort-arrow set-wait[-state] short show-in-task[bar] side-label-h[andle] side-lab[els] silent simple single single-character size
+syn keyword ProgressOperator	size-c[hars] size-p[ixels] skip-deleted-rec[ord] slider small-icon small-title smallint soap-fault soap-fault-actor
+syn keyword ProgressOperator	soap-fault-code soap-fault-detail soap-fault-string soap-header soap-header-entryref socket sort sort-ascending sort-number source
+syn keyword ProgressOperator	sql sqrt ssl-server-name standalone start-document start-element start[ing] startup-parameters state-detail static
+syn keyword ProgressOperator	status-area status-area-font stdcall stop stop-parsing stoppe[d] stored-proc[edure] stretch-to-fit strict string string-value
+syn keyword ProgressOperator	sub-ave[rage] sub-count sub-max[imum] sub-menu sub-menu-help sub-min[imum] sub-total subst[itute] substr[ing] subtype sum
+syn keyword ProgressOperator	super-proc[edures] suppress-namespace-processing suppress-w[arnings] suspend symmetric-encryption-algorithm symmetric-encryption-iv
+syn keyword ProgressOperator	symmetric-encryption-key symmetric-support synchronize system-alert[-boxes] system-help system-id tab-position tab-stop table-crc-list
+syn keyword ProgressOperator	table-list table-num[ber] target temp-dir[ectory] temp-table temp-table-prepar[e] terminate text-selected three-d through throw
+syn keyword ProgressOperator	thru tic-marks time-source timezone title-bgc[olor] title-dc[olor] title-fgc[olor] title-fo[nt] to-rowid toggle-box
+syn keyword ProgressOperator	tooltip tooltips top top-nav-query topic total tracking-changes trailing trans-init-proc[edure] transaction-mode
+syn keyword ProgressOperator	transpar[ent] trunc[ate] ttcodepage type type-of unbox unbuff[ered] unique-id unique-match unload unsigned-byte unsigned-integer
+syn keyword ProgressOperator	unsigned-long unsigned-short update-attribute upper url url-decode url-encode url-password url-userid use use-dic[t-exps]
+syn keyword ProgressOperator	use-filename use-text use-widget-pool user-id valid-event valid-handle valid-object validate validate-expressio[n]
+syn keyword ProgressOperator	validate-message validate-seal validate-xml validation-enabled var[iable] verb[ose] version vert[ical] view-first-column-on-reopen
+syn keyword ProgressOperator	virtual-height[-chars] virtual-height-p[ixels] virtual-width[-chars] virtual-width-p[ixels] visible void wait warning weekday where-string
+syn keyword ProgressOperator	widget widget-e[nter] widget-h[andle] widget-id widget-l[eave] widget-pool width[-chars] width-p[ixels] window-name
+syn keyword ProgressOperator	window-sta[te] window-sys[tem] word-index word-wrap work-area-height-p[ixels] work-area-width-p[ixels] work-area-x work-area-y
+syn keyword ProgressOperator	write-cdata write-characters write-comment write-data-element write-empty-element write-entity-ref write-external-dtd
+syn keyword ProgressOperator	write-fragment write-message write-processing-instruction write-status write-xml write-xmlschema x x-document x-noderef x-of
+syn keyword ProgressOperator	xml-data-type xml-node-name xml-node-type xml-schema-pat[h] xml-suppress-namespace-processing y y-of year year-offset yes-no
+syn keyword ProgressOperator	yes-no-cancel
 
-syn keyword	ProgressType		char[acter] int[eger] format
-syn keyword	ProgressType		var[iable] log[ical] da[te]
+syn keyword ProgressType	char[acter] int[eger] int64 dec[imal] log[ical] da[te] datetime datetime-tz
 
 syn sync lines=800
 
@@ -190,42 +285,45 @@
 " 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_progress_syntax_inits")
-  if version < 508
-	let did_progress_syntax_inits = 1
-	command -nargs=+ HiLink hi link <args>
-  else
-	command -nargs=+ HiLink hi def link <args>
-  endif
-
-  " The default methods for highlighting. Can be overridden later.
-  HiLink ProgressByte			Number
-  HiLink ProgressCase			Repeat
-  HiLink ProgressComment		Comment
-  HiLink ProgressConditional		Conditional
-  HiLink ProgressDebug			Debug
-  HiLink ProgressDo			Repeat
-  HiLink ProgressEndError		Error
-  HiLink ProgressFor			Repeat
-  HiLink ProgressFunction		Procedure
-  HiLink ProgressIdentifier		Identifier
-  HiLink ProgressInclude		Include
-  HiLink ProgressMatrixDelimiter	Identifier
-  HiLink ProgressNumber			Number
-  HiLink ProgressOperator		Operator
-  HiLink ProgressPreProc		PreProc
-  HiLink ProgressProcedure		Procedure
-  HiLink ProgressQuote			Delimiter
-  HiLink ProgressRepeat			Repeat
-  HiLink ProgressReserved		Statement
-  HiLink ProgressSpaceError		Error
-  HiLink ProgressString			String
-  HiLink ProgressTodo			Todo
-  HiLink ProgressType			Statement
-  HiLink ProgressShowTab		Error
+	if version < 508
+		let did_progress_syntax_inits = 1
+		command -nargs=+ HiLink hi link <args>
+	else
+		command -nargs=+ HiLink hi def link <args>
+	endif
+
+	" The default methods for highlighting. Can be overridden later.
+	HiLink ProgressByte		Number
+	HiLink ProgressCase		Repeat
+	HiLink ProgressComment		Comment
+	HiLink ProgressConditional	Conditional
+	HiLink ProgressDebug		Debug
+	HiLink ProgressDo		Repeat
+	HiLink ProgressEndError		Error
+	HiLink ProgressFor		Repeat
+	HiLink ProgressFunction		Procedure
+	HiLink ProgressIdentifier	Identifier
+	HiLink ProgressInclude		Include
+	HiLink ProgressMatrixDelimiter	Identifier
+	HiLink ProgressNumber		Number
+	HiLink ProgressOperator		Operator
+	HiLink ProgressPreProc		PreProc
+	HiLink ProgressProcedure	Procedure
+	HiLink ProgressQuote		Delimiter
+	HiLink ProgressRepeat		Repeat
+	HiLink ProgressReserved		Statement
+	HiLink ProgressSpaceError	Error
+	HiLink ProgressString		String
+	HiLink ProgressTodo		Todo
+	HiLink ProgressType		Statement
+	HiLink ProgressShowTab		Error
 
-  delcommand HiLink
+	delcommand HiLink
 endif
 
 let b:current_syntax = "progress"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 sw=8
diff -Naur vim73.orig/runtime/syntax/prolog.vim vim73/runtime/syntax/prolog.vim
--- vim73.orig/runtime/syntax/prolog.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/prolog.vim	2013-08-04 19:09:09.610613533 +0000
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:    PROLOG
 " Maintainers: Thomas Koehler <jean-luc@picard.franken.de>
-" Last Change: 2009 Dec 04
-" URL:	       http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/prolog.vim
+" Last Change: 2013 May 23
+" URL:         http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/prolog.vim
 
 " There are two sets of highlighting in here:
 " If the "prolog_highlighting_clean" variable exists, it is rather sparse.
@@ -21,14 +21,14 @@
 " Very simple highlighting for comments, clause heads and
 " character codes.  It respects prolog strings and atoms.
 
-syn region   prologCComment	start=+/\*+ end=+\*/+
-syn match    prologComment	+%.*+
+syn region   prologCComment start=+/\*+ end=+\*/+
+syn match    prologComment  +%.*+
 
-syn keyword  prologKeyword	module meta_predicate multifile dynamic
-syn match    prologCharCode	+0'\\\=.+
-syn region   prologString      start=+"+ skip=+\\\\\|\\"+ end=+"+
-syn region   prologAtom                start=+'+ skip=+\\\\\|\\'+ end=+'+
-syn region   prologClauseHead   start=+^[a-z][^(]*(+ skip=+\.[^		]+ end=+:-\|\.$\|\.[	 ]\|-->+ contains=prologComment,prologCComment,prologString
+syn keyword  prologKeyword  module meta_predicate multifile dynamic
+syn match    prologCharCode +0'\\\=.+
+syn region   prologString   start=+"+ skip=+\\\\\|\\"+ end=+"+
+syn region   prologAtom     start=+'+ skip=+\\\\\|\\'+ end=+'+
+syn region   prologClause   matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause
 
 if !exists("prolog_highlighting_clean")
 
@@ -40,12 +40,12 @@
   syn keyword prologKeyword   arg     current_prolog_flag     put_char
   syn keyword prologKeyword   asserta fail    put_code
   syn keyword prologKeyword   assertz findall read
-  syn keyword prologKeyword   at_end_of_stream	      float   read_term
+  syn keyword prologKeyword   at_end_of_stream        float   read_term
   syn keyword prologKeyword   atom    flush_output    repeat
   syn keyword prologKeyword   atom_chars      functor retract
-  syn keyword prologKeyword   atom_codes      get_byte	      set_input
-  syn keyword prologKeyword   atom_concat     get_char	      set_output
-  syn keyword prologKeyword   atom_length     get_code	      set_prolog_flag
+  syn keyword prologKeyword   atom_codes      get_byte        set_input
+  syn keyword prologKeyword   atom_concat     get_char        set_output
+  syn keyword prologKeyword   atom_length     get_code        set_prolog_flag
   syn keyword prologKeyword   atomic  halt    set_stream_position
   syn keyword prologKeyword   bagof   integer setof
   syn keyword prologKeyword   call    is      stream_property
@@ -54,7 +54,7 @@
   syn keyword prologKeyword   char_conversion number  true
   syn keyword prologKeyword   clause  number_chars    unify_with_occurs_check
   syn keyword prologKeyword   close   number_codes    var
-  syn keyword prologKeyword   compound	      once    write
+  syn keyword prologKeyword   compound        once    write
   syn keyword prologKeyword   copy_term       op      write_canonical
   syn keyword prologKeyword   current_char_conversion open    write_term
   syn keyword prologKeyword   current_input   peek_byte       writeq
@@ -63,11 +63,13 @@
   syn match   prologOperator "=\\=\|=:=\|\\==\|=<\|==\|>=\|\\=\|\\+\|<\|>\|="
   syn match   prologAsIs     "===\|\\===\|<=\|=>"
 
-  syn match   prologNumber	      "\<[0123456789]*\>'\@!"
+  syn match   prologNumber            "\<[0123456789]*\>'\@!"
   syn match   prologCommentError      "\*/"
   syn match   prologSpecialCharacter  ";"
   syn match   prologSpecialCharacter  "!"
-  syn match   prologQuestion	      "?-.*\."	contains=prologNumber
+  syn match   prologSpecialCharacter  ":-"
+  syn match   prologSpecialCharacter  "-->"
+  syn match   prologQuestion          "?-.*\."  contains=prologNumber
 
 
 endif
@@ -87,27 +89,29 @@
   endif
 
   " The default highlighting.
-  HiLink prologComment		Comment
-  HiLink prologCComment		Comment
-  HiLink prologCharCode		Special
+  HiLink prologComment          Comment
+  HiLink prologCComment         Comment
+  HiLink prologCharCode         Special
 
   if exists ("prolog_highlighting_clean")
 
-    HiLink prologKeyword	Statement
-    HiLink prologClauseHead	Statement
+    HiLink prologKeyword        Statement
+    HiLink prologClauseHead     Statement
+    HiLink prologClause Normal
 
   else
 
-    HiLink prologKeyword	Keyword
-    HiLink prologClauseHead	Constant
-    HiLink prologQuestion	PreProc
+    HiLink prologKeyword        Keyword
+    HiLink prologClauseHead     Constant
+    HiLink prologClause Normal
+    HiLink prologQuestion       PreProc
     HiLink prologSpecialCharacter Special
-    HiLink prologNumber		Number
-    HiLink prologAsIs		Normal
-    HiLink prologCommentError	Error
-    HiLink prologAtom		String
-    HiLink prologString		String
-    HiLink prologOperator	Operator
+    HiLink prologNumber         Number
+    HiLink prologAsIs           Normal
+    HiLink prologCommentError   Error
+    HiLink prologAtom           String
+    HiLink prologString         String
+    HiLink prologOperator       Operator
 
   endif
 
diff -Naur vim73.orig/runtime/syntax/proto.vim vim73/runtime/syntax/proto.vim
--- vim73.orig/runtime/syntax/proto.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/proto.vim	2013-08-04 19:09:09.613946856 +0000
@@ -0,0 +1,74 @@
+" syntax file for Protocol Buffers - Google's data interchange format
+"
+" Copyright 2008 Google Inc.  All rights reserved.
+"
+" Permission is hereby granted, free of charge, to any person obtaining a copy
+" of this software and associated documentation files (the "Software"), to deal
+" in the Software without restriction, including without limitation the rights
+" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+" copies of the Software, and to permit persons to whom the Software is
+" furnished to do so, subject to the following conditions:
+"
+" The above copyright notice and this permission notice shall be included in
+" all copies or substantial portions of the Software.
+"
+" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+" THE SOFTWARE.
+"
+" http://code.google.com/p/protobuf/
+
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+syn case match
+
+syn keyword protoTodo       contained TODO FIXME XXX
+syn cluster protoCommentGrp contains=protoTodo
+
+syn keyword protoSyntax     syntax import option
+syn keyword protoStructure  package message group
+syn keyword protoRepeat     optional required repeated
+syn keyword protoDefault    default
+syn keyword protoExtend     extend extensions to max
+syn keyword protoRPC        service rpc returns
+
+syn keyword protoType      int32 int64 uint32 uint64 sint32 sint64
+syn keyword protoType      fixed32 fixed64 sfixed32 sfixed64
+syn keyword protoType      float double bool string bytes
+syn keyword protoTypedef   enum
+syn keyword protoBool      true false
+
+syn match   protoInt     /-\?\<\d\+\>/
+syn match   protoInt     /\<0[xX]\x+\>/
+syn match   protoFloat   /\<-\?\d*\(\.\d*\)\?/
+syn region  protoComment start="\/\*" end="\*\/" contains=@protoCommentGrp
+syn region  protoComment start="//" skip="\\$" end="$" keepend contains=@protoCommentGrp
+syn region  protoString  start=/"/ skip=/\\./ end=/"/
+syn region  protoString  start=/'/ skip=/\\./ end=/'/
+
+hi def link protoTodo         Todo
+
+hi def link protoSyntax       Include
+hi def link protoStructure    Structure
+hi def link protoRepeat       Repeat
+hi def link protoDefault      Keyword
+hi def link protoExtend       Keyword
+hi def link protoRPC          Keyword
+hi def link protoType         Type
+hi def link protoTypedef      Typedef
+hi def link protoBool         Boolean
+
+hi def link protoInt          Number
+hi def link protoFloat        Float
+hi def link protoComment      Comment
+hi def link protoString       String
+
+let b:current_syntax = "proto"
diff -Naur vim73.orig/runtime/syntax/python.vim vim73/runtime/syntax/python.vim
--- vim73.orig/runtime/syntax/python.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/python.vim	2013-08-04 19:09:09.620613503 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Python
 " Maintainer:	Neil Schemenauer <nas@python.ca>
-" Last Change:	2009-10-13
+" Last Change:	2013 Feb 26
 " Credits:	Zvezdan Petkovic <zpetkovic@acm.org>
 "		Neil Schemenauer <nas@python.ca>
 "		Dmitry Vasiliev
@@ -45,6 +45,11 @@
   finish
 endif
 
+" We need nocompatible mode in order to continue lines with backslashes.
+" Original setting will be restored.
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Keep Python keywords in alphabetical order inside groups for easy
 " comparison with the table in the 'Python Language Reference'
 " http://docs.python.org/reference/lexical_analysis.html#keywords.
@@ -231,7 +236,7 @@
 " Notice that the end of a string, either ''', or """, will end the contained
 " doctest too.  Thus, we do *not* need to have it as an end pattern.
 if !exists("python_no_doctest_highlight")
-  if !exists("python_no_doctest_code_higlight")
+  if !exists("python_no_doctest_code_highlight")
     syn region pythonDoctest
 	  \ start="^\s*>>>\s" end="^\s*$"
 	  \ contained contains=ALLBUT,pythonDoctest,@Spell
@@ -292,4 +297,7 @@
 
 let b:current_syntax = "python"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim:set sw=2 sts=2 ts=8 noet:
diff -Naur vim73.orig/runtime/syntax/r.vim vim73/runtime/syntax/r.vim
--- vim73.orig/runtime/syntax/r.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/r.vim	2013-08-04 19:09:09.623946826 +0000
@@ -1,111 +1,221 @@
 " Vim syntax file
-" Language:	R (GNU S)
-" Maintainer:	Vaidotas Zemlys <zemlys@gmail.com>
-" Last Change:  2006 Apr 30
-" Filenames:	*.R *.Rout *.r *.Rhistory *.Rt *.Rout.save *.Rout.fail
-" URL:		http://uosis.mif.vu.lt/~zemlys/vim-syntax/r.vim
-
-" First maintainer Tom Payne <tom@tompayne.org>
-" Modified to make syntax less colourful and added the highlighting of
-" R assignment arrow
-
-" 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")
+" Language:	      R (GNU S)
+" Maintainer:	      Jakson Aquino <jalvesaq@gmail.com>
+" Former Maintainers: Vaidotas Zemlys <zemlys@gmail.com>
+" 		      Tom Payne <tom@tompayne.org>
+" Last Change:	      Sun May 19, 2013  05:59PM
+" Filenames:	      *.R *.r *.Rhistory *.Rt
+" 
+" NOTE: The highlighting of R functions is defined in the
+" r-plugin/functions.vim, which is part of vim-r-plugin2:
+" http://www.vim.org/scripts/script.php?script_id=2628
+"
+" CONFIGURATION:
+"   syntax folding can be turned on by
+"
+"      let r_syntax_folding = 1
+"
+" Some lines of code were borrowed from Zhuojun Chen.
+
+if exists("b:current_syntax")
   finish
 endif
 
-if version >= 600
-  setlocal iskeyword=@,48-57,_,.
-else
-  set iskeyword=@,48-57,_,.
+setlocal iskeyword=@,48-57,_,.
+
+if exists("g:r_syntax_folding")
+  setlocal foldmethod=syntax
 endif
 
 syn case match
 
 " Comment
-syn match rComment /\#.*/
+syn match rComment contains=@Spell "#.*"
 
-" Constant
-" string enclosed in double quotes
-syn region rString start=/"/ skip=/\\\\\|\\"/ end=/"/
-" string enclosed in single quotes
-syn region rString start=/'/ skip=/\\\\\|\\'/ end=/'/
-" number with no fractional part or exponent
-syn match rNumber /\d\+/
-" floating point number with integer and fractional parts and optional exponent
-syn match rFloat /\d\+\.\d*\([Ee][-+]\=\d\+\)\=/
-" floating point number with no integer part and optional exponent
-syn match rFloat /\.\d\+\([Ee][-+]\=\d\+\)\=/
-" floating point number with no fractional part and optional exponent
-syn match rFloat /\d\+[Ee][-+]\=\d\+/
+" Roxygen
+syn match rOKeyword contained "@\(param\|return\|name\|rdname\|examples\|include\|docType\)"
+syn match rOKeyword contained "@\(S3method\|TODO\|aliases\|alias\|assignee\|author\|callGraphDepth\|callGraph\)"
+syn match rOKeyword contained "@\(callGraphPrimitives\|concept\|exportClass\|exportMethod\|exportPattern\|export\|formals\)"
+syn match rOKeyword contained "@\(format\|importClassesFrom\|importFrom\|importMethodsFrom\|import\|keywords\)"
+syn match rOKeyword contained "@\(method\|nord\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)"
+syn match rOComment contains=@Spell,rOKeyword "#'.*"
+
+
+if &filetype == "rhelp"
+  " string enclosed in double quotes
+  syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
+  " string enclosed in single quotes
+  syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
+else
+  " string enclosed in double quotes
+  syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
+  " string enclosed in single quotes
+  syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
+endif
+
+syn match rStrError display contained "\\."
 
-" Identifier
-" identifier with leading letter and optional following keyword characters
-syn match rIdentifier /\a\k*/
-" identifier with leading period, one or more digits, and at least one non-digit keyword character
-syn match rIdentifier /\.\d*\K\k*/
+
+" New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash
+syn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
+
+" Hexadecimal and Octal digits
+syn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)"
+
+" Unicode characters
+syn match rSpecial display contained "\\u\x\{1,4}"
+syn match rSpecial display contained "\\U\x\{1,8}"
+syn match rSpecial display contained "\\u{\x\{1,4}}"
+syn match rSpecial display contained "\\U{\x\{1,8}}"
 
 " Statement
 syn keyword rStatement   break next return
 syn keyword rConditional if else
 syn keyword rRepeat      for in repeat while
 
-" Constant
-syn keyword rConstant LETTERS letters month.ab month.name pi
+" Constant (not really)
+syn keyword rConstant T F LETTERS letters month.abb month.name pi
+syn keyword rConstant R.version.string
+
+syn keyword rNumber   NA_integer_ NA_real_ NA_complex_ NA_character_ 
+
+" Constants
 syn keyword rConstant NULL
 syn keyword rBoolean  FALSE TRUE
-syn keyword rNumber   NA
-syn match rArrow /<\{1,2}-/
+syn keyword rNumber   NA Inf NaN 
 
-" Type
-syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame 
+" integer
+syn match rInteger "\<\d\+L"
+syn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L"
+syn match rInteger "\<\d\+[Ee]+\=\d\+L"
+
+" number with no fractional part or exponent
+syn match rNumber "\<\d\+\>"
+" hexadecimal number 
+syn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+"
+
+" floating point number with integer and fractional parts and optional exponent
+syn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\="
+" floating point number with no integer part and optional exponent
+syn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\="
+" floating point number with no fractional part and optional exponent
+syn match rFloat "\<\d\+[Ee][-+]\=\d\+"
+
+" complex number
+syn match rComplex "\<\d\+i"
+syn match rComplex "\<\d\++\d\+i"
+syn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i"
+syn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i"
+syn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i"
+syn match rComplex "\<\d\+[Ee][-+]\=\d\+i"
+
+syn match rOperator    "&"
+syn match rOperator    '-'
+syn match rOperator    '\*'
+syn match rOperator    '+'
+syn match rOperator    '='
+if &filetype != "rmd" && &filetype != "rrst"
+  syn match rOperator    "[|!<>^~/:]"
+else
+  syn match rOperator    "[|!<>^~`/:]"
+endif
+syn match rOperator    "%\{2}\|%\S*%"
+syn match rOpError  '\*\{3}'
+syn match rOpError  '//'
+syn match rOpError  '&&&'
+syn match rOpError  '|||'
+syn match rOpError  '<<'
+syn match rOpError  '>>'
+
+syn match rArrow "<\{1,2}-"
+syn match rArrow "->\{1,2}"
 
 " Special
-syn match rDelimiter /[,;:]/
+syn match rDelimiter "[,;:]"
 
 " Error
-syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
-syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
-syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
-syn match rError      /[)\]}]/
-syn match rBraceError /[)}]/ contained
-syn match rCurlyError /[)\]]/ contained
-syn match rParenError /[\]}]/ contained
+if exists("g:r_syntax_folding")
+  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
+  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold
+  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold
+else
+  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
+  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
+  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
+endif
 
-" 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_r_syn_inits")
-  if version < 508
-    let did_r_syn_inits = 1
-    command -nargs=+ HiLink hi link <args>
-  else
-    command -nargs=+ HiLink hi def link <args>
-  endif
-  HiLink rComment     Comment
-  HiLink rConstant    Constant
-  HiLink rString      String
-  HiLink rNumber      Number
-  HiLink rBoolean     Boolean
-  HiLink rFloat       Float
-  HiLink rStatement   Statement
-  HiLink rConditional Conditional
-  HiLink rRepeat      Repeat
-  HiLink rIdentifier  Normal
-  HiLink rArrow	      Statement	
-  HiLink rType        Type
-  HiLink rDelimiter   Delimiter
-  HiLink rError       Error
-  HiLink rBraceError  Error
-  HiLink rCurlyError  Error
-  HiLink rParenError  Error
-  delcommand HiLink
+syn match rError      "[)\]}]"
+syn match rBraceError "[)}]" contained
+syn match rCurlyError "[)\]]" contained
+syn match rParenError "[\]}]" contained
+
+" Source list of R functions. The list is produced by the Vim-R-plugin
+" http://www.vim.org/scripts/script.php?script_id=2628
+runtime r-plugin/functions.vim
+
+syn match rDollar display contained "\$"
+syn match rDollar display contained "@"
+
+" List elements will not be highlighted as functions:
+syn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar
+syn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar
+
+" Functions that may add new objects
+syn keyword rPreProc     library require attach detach source
+
+if &filetype == "rhelp"
+    syn match rHelpIdent '\\method'
+    syn match rHelpIdent '\\S4method'
 endif
 
+" Type
+syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame 
+
+" Name of object with spaces
+if &filetype != "rmd" && &filetype != "rrst"
+  syn region rNameWSpace start="`" end="`"
+endif
+
+if &filetype == "rhelp"
+  syn match rhPreProc "^#ifdef.*" 
+  syn match rhPreProc "^#endif.*" 
+  syn match rhSection "\\dontrun\>"
+endif
+
+" Define the default highlighting.
+hi def link rArrow       Statement	
+hi def link rBoolean     Boolean
+hi def link rBraceError  Error
+hi def link rComment     Comment
+hi def link rOComment    Comment
+hi def link rComplex     Number
+hi def link rConditional Conditional
+hi def link rConstant    Constant
+hi def link rCurlyError  Error
+hi def link rDelimiter   Delimiter
+hi def link rDollar      SpecialChar
+hi def link rError       Error
+hi def link rFloat       Float
+hi def link rFunction    Function
+hi def link rHelpIdent   Identifier
+hi def link rhPreProc    PreProc
+hi def link rhSection    PreCondit
+hi def link rInteger     Number
+hi def link rLstElmt	 Normal
+hi def link rNameWSpace  Normal
+hi def link rNumber      Number
+hi def link rOperator    Operator
+hi def link rOpError     Error
+hi def link rParenError  Error
+hi def link rPreProc     PreProc
+hi def link rRepeat      Repeat
+hi def link rSpecial     SpecialChar
+hi def link rStatement   Statement
+hi def link rString      String
+hi def link rStrError    Error
+hi def link rType        Type
+hi def link rOKeyword    Title
+
 let b:current_syntax="r"
 
 " vim: ts=8 sw=2
-
diff -Naur vim73.orig/runtime/syntax/ratpoison.vim vim73/runtime/syntax/ratpoison.vim
--- vim73.orig/runtime/syntax/ratpoison.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/ratpoison.vim	2013-08-04 19:09:09.627280149 +0000
@@ -1,8 +1,9 @@
 " Vim syntax file
 " Language:	Ratpoison configuration/commands file ( /etc/ratpoisonrc ~/.ratpoisonrc )
-" Maintainer:	Doug Kearns <djkea2@gus.gscit.monash.edu.au>
-" URL:		http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/ratpoison.vim
-" Last Change:	2005 Oct 06
+" Maintainer:	Magnus Woldrich <m@japh.se>
+" URL:		http://github.com/trapd00r/vim-syntax-ratpoison
+" Last Change:	2011 Apr 11
+" Previous Maintainer:	Doug Kearns <djkea2@gus.gscit.monash.edu.au>
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -94,6 +95,13 @@
 syn keyword ratpoisonSetArg	bgcolor
 syn keyword ratpoisonSetArg	border		contained nextgroup=ratpoisonNumberArg
 syn keyword ratpoisonSetArg	fgcolor
+syn keyword ratpoisonSetArg	fwcolor
+syn keyword ratpoisonSetArg	bwcolor
+syn keyword ratpoisonSetArg	historysize
+syn keyword ratpoisonSetArg	historycompaction
+syn keyword ratpoisonSetArg	historyexpansion
+syn keyword ratpoisonSetArg	topkmap
+syn keyword ratpoisonSetArg	barinpadding
 syn keyword ratpoisonSetArg	font
 syn keyword ratpoisonSetArg	framesels
 syn keyword ratpoisonSetArg	inputwidth	contained nextgroup=ratpoisonNumberArg
diff -Naur vim73.orig/runtime/syntax/rcs.vim vim73/runtime/syntax/rcs.vim
--- vim73.orig/runtime/syntax/rcs.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/rcs.vim	2013-08-04 19:09:09.630613473 +0000
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:     RCS file
-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
-" URL:          http://www.hlabs.spb.ru/vim/rcs.vim
-" Revision:     $Id: rcs.vim,v 1.2 2006/03/27 16:41:00 vimboss Exp $
+" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
+" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/rcs.vim
+" Last Change:  2012-02-11
 " Filenames:    *,v
-" Version:      1.11
+" Version:      1.12
 
 " Options:
 "   rcs_folding = 1   For folding strings
diff -Naur vim73.orig/runtime/syntax/readline.vim vim73/runtime/syntax/readline.vim
--- vim73.orig/runtime/syntax/readline.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/readline.vim	2013-08-04 19:09:09.630613473 +0000
@@ -1,11 +1,11 @@
 " Vim syntax file
 " Language:         readline(3) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2009-05-25
+" Latest Revision:  2012-04-25
 "   readline_has_bash - if defined add support for bash specific
 "                       settings/functions
 
-if exists("b:current_syntax")
+if exists('b:current_syntax')
   finish
 endif
 
@@ -14,163 +14,382 @@
 
 setlocal iskeyword+=-
 
-syn keyword readlineTodo        contained TODO FIXME XXX NOTE
+syn match   readlineKey         contained
+                              \ '\S'
+                              \ nextgroup=readlineKeyTerminator
+
+syn match   readlineBegin       display '^'
+                              \ nextgroup=readlineComment,
+                              \           readlineConditional,
+                              \           readlineInclude,
+                              \           readlineKeyName,
+                              \           readlineKey,
+                              \           readlineKeySeq,
+                              \           readlineKeyword
+                              \ skipwhite
+
+syn region  readlineComment     contained display oneline
+                                \ start='#'
+                                \ end='$'
+                                \ contains=readlineTodo,
+                                \          @Spell
+
+syn keyword readlineTodo        contained
+                              \ TODO
+                              \ FIXME
+                              \ XXX
+                              \ NOTE
+
+syn match   readlineConditional contained
+                              \ '$if\>'
+                              \ nextgroup=readlineTest,
+                              \           readlineTestApp
+                              \ skipwhite
+
+syn keyword readlineTest        contained
+                              \ mode
+                              \ nextgroup=readlineTestModeEq
+
+syn match   readlineTestModeEq  contained
+                              \ '='
+                              \ nextgroup=readlineEditingMode
+
+syn keyword readlineTest        contained
+                              \ term
+                              \ nextgroup=readlineTestTermEq
+
+syn match   readlineTestTermEq  contained
+                              \ '='
+                              \ nextgroup=readlineTestTerm
+
+syn match   readlineTestTerm    contained
+                              \ '\S\+'
+
+syn match   readlineTestApp     contained
+                              \ '\S\+'
+
+syn match   readlineConditional contained display
+                              \ '$\%(else\|endif\)\>'
+
+syn match   readlineInclude     contained display
+                              \ '$include\>'
+                              \ nextgroup=readlinePath
 
-syn region  readlineComment     display oneline start='^\s*#' end='$'
-                                \ contains=readlineTodo,@Spell
-
-syn match   readlineString      '^\s*[A-Za-z-]\+:'me=e-1 contains=readlineKeys
-syn region  readlineString      display oneline start=+"+ skip=+\\\\\|\\"+
-                                \ end=+"+ contains=readlineKeysTwo
+syn match   readlinePath        contained display
+                              \ '.\+'
 
 syn case ignore
-syn keyword readlineKeys        contained Control Meta Del Esc Escape LFD
-                                \ Newline Ret Return Rubout Space Spc Tab
+syn match   readlineKeyName     contained display
+                              \ nextgroup=readlineKeySeparator,
+                              \           readlineKeyTerminator
+                              \ '\%(Control\|Del\|Esc\|Escape\|LFD\|Meta\|Newline\|Ret\|Return\|Rubout\|Space\|Spc\|Tab\)'
 syn case match
 
-syn match   readlineKeysTwo     contained display
-                                \ +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{3}\)+
-
-syn match   readlineKeymaps     contained display
-                                \ 'emacs\(-standard\|-meta\|-ctlx\)\='
-syn match   readlineKeymaps     contained display
-                                \ 'vi\(-move\|-command\|-insert\)\='
-
-syn keyword readlineBellStyles  contained audible visible none
-
-syn match   readlineNumber      contained display '\<\d\+\>'
+syn match   readlineKeySeparator  contained
+                                \ '-'
+                                \ nextgroup=readlineKeyName,
+                                \           readlineKey
+
+syn match   readlineKeyTerminator contained
+                                \ ':'
+                                \ nextgroup=readlineFunction
+                                \ skipwhite
+
+syn region  readlineKeySeq     contained display oneline
+                              \ start=+"+
+                              \ skip=+\\\\\|\\"+
+                              \ end=+"+
+                              \ contains=readlineKeyEscape
+                              \ nextgroup=readlineKeyTerminator
+
+syn match   readlineKeyEscape   contained display
+                              \ +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{2}\)+
+
+syn keyword readlineKeyword     contained
+                              \ set
+                              \ nextgroup=readlineVariable
+                              \ skipwhite
+
+syn keyword readlineVariable    contained 
+                              \ nextgroup=readlineBellStyle
+                              \ skipwhite
+                              \ bell-style
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineBoolean
+                              \ skipwhite
+                              \ bind-tty-special-chars
+                              \ completion-ignore-case
+                              \ completion-map-case
+                              \ convert-meta
+                              \ disable-completion
+                              \ echo-control-characters
+                              \ enable-keypad
+                              \ enable-meta-key
+                              \ expand-tilde
+                              \ history-preserve-point
+                              \ horizontal-scroll-mode
+                              \ input-meta
+                              \ meta-flag
+                              \ mark-directories
+                              \ mark-modified-lines
+                              \ mark-symlinked-directories
+                              \ match-hidden-files
+                              \ menu-complete-display-prefix
+                              \ output-meta
+                              \ page-completions
+                              \ print-completions-horizontally
+                              \ revert-all-at-newline
+                              \ show-all-if-ambiguous
+                              \ show-all-if-unmodified
+                              \ skip-completed-text
+                              \ visible-stats
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineString
+                              \ skipwhite
+                              \ comment-begin
+                              \ isearch-terminators
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineNumber
+                              \ skipwhite
+                              \ completion-display-width
+                              \ completion-prefix-display-length
+                              \ completion-query-items
+                              \ history-size
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineEditingMode
+                              \ skipwhite
+                              \ editing-mode
+
+syn keyword readlineVariable    contained
+                              \ nextgroup=readlineKeymap
+                              \ skipwhite
+                              \ keymap
+
+syn keyword readlineBellStyle   contained
+                              \ audible
+                              \ visible
+                              \ none
 
 syn case ignore
-syn keyword readlineBoolean     contained on off
+syn keyword readlineBoolean     contained
+                              \ on
+                              \ off
 syn case match
 
-syn keyword readlineIfOps       contained mode term
-
-syn region  readlineConditional display oneline transparent
-                                \ matchgroup=readlineConditional
-                                \ start='^\s*$if' end="$"
-                                \ contains=readlineIfOps,readlineKeymaps
-syn match   readlineConditional display '^\s*$\(else\|endif\)\>'
-
-syn match   readlineInclude     display '^\s*$include\>'
-
-syn region  readlineSet         display oneline transparent
-                                \ matchgroup=readlineKeyword start='^\s*set\>'
-                                \ end="$"me=e-1 contains=readlineNumber,
-                                \ readlineBoolean,readlineKeymaps,
-                                \ readlineBellStyles,readlineSettings
-
-syn keyword readlineSettings    contained bell-style comment-begin
-                                \ completion-ignore-case completion-query-items
-                                \ convert-meta disable-completion editing-mode
-                                \ enable-keypad expand-tilde
-                                \ horizontal-scroll-mode mark-directories
-                                \ keymap mark-modified-lines meta-flag
-                                \ input-meta output-meta
-                                \ print-completions-horizontally
-                                \ show-all-if-ambiguous visible-stats
-                                \ prefer-visible-bell blink-matching-paren
-                                \ match-hidden-files history-preserve-point
-                                \ isearch-terminators
-
-syn region  readlineBinding     display oneline transparent
-                                \ matchgroup=readlineKeyword start=':' end='$'
-                                \ contains=readlineKeys,readlineFunctions
-
-syn keyword readlineFunctions   contained display
-                                \ beginning-of-line end-of-line forward-char
-                                \ backward-char forward-word backward-word
-                                \ clear-screen redraw-current-line
-                                \ accept-line previous-history
-                                \ next-history beginning-of-history
-                                \ end-of-history reverse-search-history
-                                \ forward-search-history
-                                \ non-incremental-reverse-search-history
-                                \ non-incremental-forward-search-history
-                                \ history-search-forward
-                                \ history-search-backward
-                                \ yank-nth-arg yank-last-arg
-                                \ delete-char backward-delete-char
-                                \ forward-backward-delete-char quoted-insert
-                                \ tab-insert self-insert transpose-chars
-                                \ transpose-words upcase-word downcase-word
-                                \ capitalize-word overwrite-mode kill-line
-                                \ backward-kill-line unix-line-discard
-                                \ kill-whole-line kill-word backward-kill-word
-                                \ unix-word-rubout unix-filename-rubout
-                                \ delete-horizontal-space kill-region
-                                \ copy-region-as-kill copy-backward-word
-                                \ copy-forward-word yank yank-pop
-                                \ digit-argument universal-argument complete
-                                \ possible-completions insert-completions
-                                \ menu-complete delete-char-or-list
-                                \ start-kbd-macro end-kbd-macro
-                                \ call-last-kbd-macro re-read-init-file
-                                \ abort do-uppercase-version prefix-meta
-                                \ undo revert-line tilde-expand set-mark
-                                \ exchange-point-and-mark character-search
-                                \ character-search-backward insert-comment
-                                \ dump-functions dump-variables dump-macros
-                                \ emacs-editing-mode vi-editing-mode
-                                \ vi-complete vi-char-search vi-redo
-                                \ vi-search vi-arg-digit vi-append-eol
-                                \ vi-prev-word vi-change-to vi-delete-to
-                                \ vi-end-word vi-fetch-history vi-insert-beg
-                                \ vi-search-again vi-put vi-replace
-                                \ vi-subst vi-yank-to vi-first-print
-                                \ vi-yank-arg vi-goto-mark vi-append-mode
-                                \ vi-insertion-mode prev-history vi-set-mark
-                                \ vi-search-again vi-put vi-change-char
-                                \ vi-subst vi-delete vi-yank-to
-                                \ vi-column vi-change-case vi-overstrike
-                                \ vi-overstrike-delete do-lowercase-version
-                                \ delete-char-or-list tty-status
-                                \ arrow-key-prefix vi-back-to-indent vi-bword
-                                \ vi-bWord vi-eword vi-eWord vi-fword vi-fWord
-                                \ vi-next-word
-                                \ vi-movement-mode
+syn region  readlineString      contained display oneline
+                              \ matchgroup=readlineStringDelimiter
+                              \ start=+"+
+                              \ skip=+\\\\\|\\"+
+                              \ end=+"+
+
+syn match   readlineNumber      contained display
+                              \ '[+-]\d\+\>'
+
+syn keyword readlineEditingMode contained
+                              \ emacs
+                              \ vi
+
+syn match   readlineKeymap      contained display
+                              \ 'emacs\%(-\%(standard\|meta\|ctlx\)\)\=\|vi\%(-\%(move\|command\|insert\)\)\='
+
+syn keyword readlineFunction    contained
+                              \ beginning-of-line
+                              \ end-of-line
+                              \ forward-char
+                              \ backward-char
+                              \ forward-word
+                              \ backward-word
+                              \ clear-screen
+                              \ redraw-current-line
+                              \
+                              \ accept-line
+                              \ previous-history
+                              \ next-history
+                              \ beginning-of-history
+                              \ end-of-history
+                              \ reverse-search-history
+                              \ forward-search-history
+                              \ non-incremental-reverse-search-history
+                              \ non-incremental-forward-search-history
+                              \ history-search-forward
+                              \ history-search-backward
+                              \ yank-nth-arg
+                              \ yank-last-arg
+                              \
+                              \ delete-char
+                              \ backward-delete-char
+                              \ forward-backward-delete-char
+                              \ quoted-insert
+                              \ tab-insert
+                              \ self-insert
+                              \ transpose-chars
+                              \ transpose-words
+                              \ upcase-word
+                              \ downcase-word
+                              \ capitalize-word
+                              \ overwrite-mode
+                              \
+                              \ kill-line
+                              \ backward-kill-line
+                              \ unix-line-discard
+                              \ kill-whole-line
+                              \ kill-word
+                              \ backward-kill-word
+                              \ unix-word-rubout
+                              \ unix-filename-rubout
+                              \ delete-horizontal-space
+                              \ kill-region
+                              \ copy-region-as-kill
+                              \ copy-backward-word
+                              \ copy-forward-word
+                              \ yank
+                              \ yank-pop
+                              \
+                              \ digit-argument
+                              \ universal-argument
+                              \
+                              \ complete
+                              \ possible-completions
+                              \ insert-completions
+                              \ menu-complete
+                              \ menu-complete-backward
+                              \ delete-char-or-list
+                              \
+                              \ start-kbd-macro
+                              \ end-kbd-macro
+                              \ call-last-kbd-macro
+                              \
+                              \ re-read-init-file
+                              \ abort
+                              \ do-uppercase-version
+                              \ prefix-meta
+                              \ undo
+                              \ revert-line
+                              \ tilde-expand
+                              \ set-mark
+                              \ exchange-point-and-mark
+                              \ character-search
+                              \ character-search-backward
+                              \ skip-csi-sequence
+                              \ insert-comment
+                              \ dump-functions
+                              \ dump-variables
+                              \ dump-macros
+                              \ emacs-editing-mode
+                              \ vi-editing-mode
+                              \
+                              \ vi-eof-maybe
+                              \ vi-movement-mode
+                              \ vi-undo
+                              \ vi-match
+                              \ vi-tilde-expand
+                              \ vi-complete
+                              \ vi-char-search
+                              \ vi-redo
+                              \ vi-search
+                              \ vi-arg-digit
+                              \ vi-append-eol
+                              \ vi-prev-word
+                              \ vi-change-to
+                              \ vi-delete-to
+                              \ vi-end-word
+                              \ vi-char-search
+                              \ vi-fetch-history
+                              \ vi-insert-beg
+                              \ vi-search-again
+                              \ vi-put
+                              \ vi-replace
+                              \ vi-subst
+                              \ vi-char-search
+                              \ vi-next-word
+                              \ vi-yank-to
+                              \ vi-first-print
+                              \ vi-yank-arg
+                              \ vi-goto-mark
+                              \ vi-append-mode
+                              \ vi-prev-word
+                              \ vi-change-to
+                              \ vi-delete-to
+                              \ vi-end-word
+                              \ vi-char-search
+                              \ vi-insert-mode
+                              \ vi-set-mark
+                              \ vi-search-again
+                              \ vi-put
+                              \ vi-change-char
+                              \ vi-subst
+                              \ vi-char-search
+                              \ vi-undo
+                              \ vi-next-word
+                              \ vi-delete
+                              \ vi-yank-to
+                              \ vi-column
+                              \ vi-change-case
 
 if exists("readline_has_bash")
-  syn keyword readlineFunctions contained
-                                \ shell-expand-line history-expand-line
-                                \ magic-space alias-expand-line
-                                \ history-and-alias-expand-line
-                                \ insert-last-argument operate-and-get-next
-                                \ forward-backward-delete-char
-                                \ delete-char-or-list complete-filename
-                                \ possible-filename-completions
-                                \ complete-username
-                                \ possible-username-completions
-                                \ complete-variable
-                                \ possible-variable-completions
-                                \ complete-hostname
-                                \ possible-hostname-completions
-                                \ complete-command
-                                \ possible-command-completions
-                                \ dynamic-complete-history
-                                \ complete-into-braces
-                                \ glob-expand-word glob-list-expansions
-                                \ display-shell-version glob-complete-word
-                                \ edit-and-execute-command
+  syn keyword readlineFunction  contained
+                              \ shell-expand-line
+                              \ history-expand-line
+                              \ magic-space
+                              \ alias-expand-line
+                              \ history-and-alias-expand-line
+                              \ insert-last-argument
+                              \ operate-and-get-next
+                              \ forward-backward-delete-char
+                              \ delete-char-or-list
+                              \ complete-filename
+                              \ possible-filename-completions
+                              \ complete-username
+                              \ possible-username-completions
+                              \ complete-variable
+                              \ possible-variable-completions
+                              \ complete-hostname
+                              \ possible-hostname-completions
+                              \ complete-command
+                              \ possible-command-completions
+                              \ dynamic-complete-history
+                              \ complete-into-braces
+                              \ glob-expand-word
+                              \ glob-list-expansions
+                              \ display-shell-version
+                              \ glob-complete-word
+                              \ edit-and-execute-command
 endif
 
-hi def link readlineComment     Comment
-hi def link readlineTodo        Todo
-hi def link readlineString      String
-hi def link readlineKeys        SpecialChar
-hi def link readlineKeysTwo     SpecialChar
-hi def link readlineKeymaps     Constant
-hi def link readlineBellStyles  Constant
-hi def link readlineNumber      Number
-hi def link readlineBoolean     Boolean
-hi def link readlineIfOps       Type
-hi def link readlineConditional Conditional
-hi def link readlineInclude     Include
-hi def link readlineKeyword     Keyword
-hi def link readlineSettings    Type
-hi def link readlineFunctions   Type
+hi def link readlineKey           readlineKeySeq
+hi def link readlineComment       Comment
+hi def link readlineTodo          Todo
+hi def link readlineConditional   Conditional
+hi def link readlineTest          Type
+hi def link readlineDelimiter     Delimiter
+hi def link readlineTestModeEq    readlineEq
+hi def link readlineTestTermEq    readlineEq
+hi def link readlineTestTerm      readlineString
+hi def link readlineTestAppEq     readlineEq
+hi def link readlineTestApp       readlineString
+hi def link readlineInclude       Include
+hi def link readlinePath          String
+hi def link readlineKeyName       SpecialChar
+hi def link readlineKeySeparator  readlineKeySeq
+hi def link readlineKeyTerminator readlineDelimiter
+hi def link readlineKeySeq        String
+hi def link readlineKeyEscape     SpecialChar
+hi def link readlineKeyword       Keyword
+hi def link readlineVariable      Identifier
+hi def link readlineBellStyle     Constant
+hi def link readlineBoolean       Boolean
+hi def link readlineString        String
+hi def link readlineStringDelimiter readlineString
+hi def link readlineNumber        Number
+hi def link readlineEditingMode   Constant
+hi def link readlineKeymap        Constant
+hi def link readlineFunction      Function
 
-let b:current_syntax = "readline"
+let b:current_syntax = 'readline'
 
 let &cpo = s:cpo_save
 unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/redif.vim vim73/runtime/syntax/redif.vim
--- vim73.orig/runtime/syntax/redif.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/redif.vim	2013-08-04 19:09:09.637280119 +0000
@@ -0,0 +1,972 @@
+" Vim syntax file
+" Language:          ReDIF
+" Maintainer:        Axel Castellane <axel.castellane@polytechnique.edu>
+" Last Change:       2013 April 17
+" Original Author:   Axel Castellane
+" Source:            http://openlib.org/acmes/root/docu/redif_1.html
+" File Extension:    rdf
+" Note:              The ReDIF format is used by RePEc.
+
+" To be compatible with Vim 5.8 use:
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+" ReDIF is case-insensitive
+syntax case ignore
+
+" Structure: Some fields determine what fields can come next. For example:
+"       Template-Type
+"       *-Name
+"       File-URL
+"       *-Institution
+" Those fields span a syntax region over several lines so that these regions
+" can only contain their respective items.
+
+" Any line which is not a correct template or part of an argument is an error.
+" This comes at the very beginning, so it has the lowest priority and will
+" only match if nothing else did.
+syntax match redifWrongLine /^.\+/ display
+
+highlight def link redifWrongLine redifError
+
+" Comments must start with # and it must be the first character of the line,
+" otherwise I believe that they are considered as part of an argument.
+syntax match redifComment /^#.*/ containedin=ALL display
+
+" Defines the 9 possible multi-lines regions of Template-Type and the fields
+" they can contain.
+syntax region redifRegionTemplatePaper start=/^Template-Type:\_s*ReDIF-Paper \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsPaper,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
+syntax region redifRegionTemplateArticle start=/^Template-Type:\_s*ReDIF-Article \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsArticle,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
+syntax region redifRegionTemplateChapter start=/^Template-Type:\_s*ReDIF-Chapter \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsChapter,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
+syntax region redifRegionTemplateBook start=/^Template-Type:\_s*ReDIF-Book \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsBook,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
+syntax region redifRegionTemplateSoftware start=/^Template-Type:\_s*ReDIF-Software \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsSoftware,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
+syntax region redifRegionTemplateArchive start=/^Template-Type:\_s*ReDIF-Archive \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsArchive,redifWrongLine fold
+syntax region redifRegionTemplateSeries start=/^Template-Type:\_s*ReDIF-Series \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsSeries,redifWrongLine,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
+syntax region redifRegionTemplateInstitution start=/^Template-Type:\_s*ReDIF-Institution \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsInstitution,redifWrongLine,redifRegionClusterPrimary,redifRegionClusterSecondary,redifRegionClusterTertiary,redifRegionClusterQuaternary fold
+syntax region redifRegionTemplatePerson start=/^Template-Type:\_s*ReDIF-Person \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsPerson,redifWrongLine,redifRegionClusterWorkplace fold
+
+" All fields are foldable (These come before clusters, so they have lower
+" priority). So they are contained in a foldable syntax region.
+syntax region redifContainerFieldsPaper start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldLanguage,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNumber,redifFieldCreationDate,redifFieldRevisionDate,redifFieldPublicationStatus,redifFieldNote,redifFieldLength,redifFieldSeries,redifFieldAvailability,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldRestriction,redifFieldPrice,redifFieldNotification,redifFieldPublicationType,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsArticle start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldLanguage,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNumber,redifFieldCreationDate,redifFieldPublicationStatus,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldRestriction,redifFieldPrice,redifFieldNotification,redifFieldPublicationType,redifFieldJournal,redifFieldVolume,redifFieldYear,redifFieldIssue,redifFieldMonth,redifFieldPages,redifFieldNumber,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsChapter start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfWork,redifFieldTitle,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldBookTitle,redifFieldYear,redifFieldMonth,redifFieldPages,redifFieldChapter,redifFieldVolume,redifFieldEdition,redifFieldSeries,redifFieldISBN,redifFieldPublicationStatus,redifFieldNote,redifFieldInBook,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsBook start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldContactEmail,redifFieldYear,redifFieldMonth,redifFieldVolume,redifFieldEdition,redifFieldSeries,redifFieldISBN,redifFieldPublicationStatus,redifFieldNote,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldHasChapter,redifFieldPrice,redifFieldOrderURL,redifFieldNumber,redifFieldCreationDate,redifFieldPublicationDate,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsSoftware start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfWork,redifFieldTitle,redifFieldProgrammingLanguage,redifFieldAbstract,redifFieldNumber,redifFieldVersion,redifFieldClassificationJEL,redifFieldKeywords,redifFieldSize,redifFieldSeries,redifFieldCreationDate,redifFieldRevisionDate,redifFieldNote,redifFieldRequires,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsArchive start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfArchive,redifFieldURL,redifFieldMaintainerEmail,redifFieldName,redifFieldMaintainerName,redifFieldMaintainerPhone,redifFieldMaintainerFax,redifFieldClassificationJEL,redifFieldHomepage,redifFieldDescription,redifFieldNotification,redifFieldRestriction,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsSeries start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldName,redifFieldHandleOfSeries,redifFieldMaintainerEmail,redifFieldType,redifFieldOrderEmail,redifFieldOrderHomepage,redifFieldOrderPostal,redifFieldPrice,redifFieldRestriction,redifFieldMaintainerPhone,redifFieldMaintainerFax,redifFieldMaintainerName,redifFieldDescription,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNotification,redifFieldISSN,redifFieldFollowup,redifFieldPredecessor,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsInstitution start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfInstitution,redifFieldPrimaryDefunct,redifFieldSecondaryDefunct,redifFieldTertiaryDefunct,redifFieldTemplateType,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsPerson start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfPerson,redifFieldNameFull,redifFieldNameFirst,redifFieldNameLast,redifFieldNamePrefix,redifFieldNameMiddle,redifFieldNameSuffix,redifFieldNameASCII,redifFieldEmail,redifFieldHomepage,redifFieldFax,redifFieldPostal,redifFieldPhone,redifFieldWorkplaceOrganization,redifFieldAuthorPaper,redifFieldAuthorArticle,redifFieldAuthorSoftware,redifFieldAuthorBook,redifFieldAuthorChapter,redifFieldEditorBook,redifFieldEditorSeries,redifFieldClassificationJEL,redifFieldShortId,redifFieldLastLoginDate,redifFieldRegisteredDate,redifWrongLine contained transparent fold
+
+" Defines the 10 possible clusters and what they can contain
+" A field not in the cluster ends the cluster.
+syntax region redifRegionClusterWorkplace start=/^Workplace-Name:/ skip=/^Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsWorkplace fold
+syntax region redifRegionClusterPrimary start=/^Primary-Name:/ skip=/^Primary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsPrimary fold
+syntax region redifRegionClusterSecondary start=/^Secondary-Name:/ skip=/^Secondary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsSecondary fold
+syntax region redifRegionClusterTertiary start=/^Tertiary-Name:/ skip=/^Tertiary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsTertiary fold
+syntax region redifRegionClusterQuaternary start=/^Quaternary-Name:/ skip=/^Quaternary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsQuaternary fold
+syntax region redifRegionClusterProvider start=/^Provider-Name:/ skip=/^Provider-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsProvider fold
+syntax region redifRegionClusterPublisher start=/^Publisher-Name:/ skip=/^Publisher-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsPublisher fold
+syntax region redifRegionClusterAuthor start=/^Author-Name:/ skip=/^Author-\%(Name\%(-First\|-Last\)\|Homepage\|Email\|Fax\|Postal\|Phone\|Person\|Workplace-Name\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifRegionClusterAuthorWorkplace,redifContainerFieldsAuthor fold
+syntax region redifRegionClusterEditor start=/^Editor-Name:/ skip=/^Editor-\%(Name\%(-First\|-Last\)\|Homepage\|Email\|Fax\|Postal\|Phone\|Person\|Workplace-Name\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifRegionClusterEditorWorkplace,redifContainerFieldsEditor fold
+syntax region redifRegionClusterFile start=/^File-URL:/ skip=/^File-\%(Format\|Function\|Size\|Restriction\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsFile fold
+
+" The foldable containers of the clusters.
+syntax region redifContainerFieldsWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldWorkplaceName,redifFieldWorkplaceHomepage,redifFieldWorkplaceNameEnglish,redifFieldWorkplacePostal,redifFieldWorkplaceLocation,redifFieldWorkplaceEmail,redifFieldWorkplacePhone,redifFieldWorkplaceFax,redifFieldWorkplaceInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsPrimary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldPrimaryName,redifFieldPrimaryHomepage,redifFieldPrimaryNameEnglish,redifFieldPrimaryPostal,redifFieldPrimaryLocation,redifFieldPrimaryEmail,redifFieldPrimaryPhone,redifFieldPrimaryFax,redifFieldPrimaryInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsSecondary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldSecondaryName,redifFieldSecondaryHomepage,redifFieldSecondaryNameEnglish,redifFieldSecondaryPostal,redifFieldSecondaryLocation,redifFieldSecondaryEmail,redifFieldSecondaryPhone,redifFieldSecondaryFax,redifFieldSecondaryInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsTertiary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTertiaryName,redifFieldTertiaryHomepage,redifFieldTertiaryNameEnglish,redifFieldTertiaryPostal,redifFieldTertiaryLocation,redifFieldTertiaryEmail,redifFieldTertiaryPhone,redifFieldTertiaryFax,redifFieldTertiaryInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsQuaternary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldQuaternaryName,redifFieldQuaternaryHomepage,redifFieldQuaternaryNameEnglish,redifFieldQuaternaryPostal,redifFieldQuaternaryLocation,redifFieldQuaternaryEmail,redifFieldQuaternaryPhone,redifFieldQuaternaryFax,redifFieldQuaternaryInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsProvider start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldProviderName,redifFieldProviderHomepage,redifFieldProviderNameEnglish,redifFieldProviderPostal,redifFieldProviderLocation,redifFieldProviderEmail,redifFieldProviderPhone,redifFieldProviderFax,redifFieldProviderInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsPublisher start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldPublisherName,redifFieldPublisherHomepage,redifFieldPublisherNameEnglish,redifFieldPublisherPostal,redifFieldPublisherLocation,redifFieldPublisherEmail,redifFieldPublisherPhone,redifFieldPublisherFax,redifFieldPublisherInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsAuthor start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldAuthorName,redifFieldAuthorNameFirst,redifFieldAuthorNameLast,redifFieldAuthorHomepage,redifFieldAuthorEmail,redifFieldAuthorFax,redifFieldAuthorPostal,redifFieldAuthorPhone,redifFieldAuthorPerson,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsEditor start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldEditorName,redifFieldEditorNameFirst,redifFieldEditorNameLast,redifFieldEditorHomepage,redifFieldEditorEmail,redifFieldEditorFax,redifFieldEditorPostal,redifFieldEditorPhone,redifFieldEditorPerson,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsFile start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldFileURL,redifFieldFileFormat,redifFieldFileFunction,redifFieldFileSize,redifFieldFileRestriction,redifWrongLine contained transparent fold
+
+" The two clusters in cluster (must be presented after to have priority over
+" fields containers)
+syntax region redifRegionClusterAuthorWorkplace start=/^Author-Workplace-Name:/ skip=/^Author-Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsAuthorWorkplace fold
+syntax region redifRegionClusterEditorWorkplace start=/^Editor-Workplace-Name:/ skip=/^Editor-Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsEditorWorkplace fold
+
+" Their foldable fields containers
+syntax region redifContainerFieldsAuthorWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldAuthorWorkplaceName,redifFieldAuthorWorkplaceHomepage,redifFieldAuthorWorkplaceNameEnglish,redifFieldAuthorWorkplacePostal,redifFieldAuthorWorkplaceLocation,redifFieldAuthorWorkplaceEmail,redifFieldAuthorWorkplacePhone,redifFieldAuthorWorkplaceFax,redifFieldAuthorWorkplaceInstitution,redifWrongLine contained transparent fold
+syntax region redifContainerFieldsEditorWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldEditorWorkplaceName,redifFieldEditorWorkplaceHomepage,redifFieldEditorWorkplaceNameEnglish,redifFieldEditorWorkplacePostal,redifFieldEditorWorkplaceLocation,redifFieldEditorWorkplaceEmail,redifFieldEditorWorkplacePhone,redifFieldEditorWorkplaceFax,redifFieldEditorWorkplaceInstitution,redifWrongLine contained transparent fold
+
+" All the possible fields
+"     Note: The "Handle" field is handled a little bit differently, because it
+"     does not have the same meaning depending on the Template-Type. See:
+" 	  /redifFieldHandleOf....
+syntax match redifFieldAbstract /^Abstract:/ skipwhite skipempty nextgroup=redifArgumentAbstract contained
+syntax match redifFieldArticleHandle /^Article-Handle:/ skipwhite skipempty nextgroup=redifArgumentArticleHandle contained
+syntax match redifFieldAuthorArticle /^Author-Article:/ skipwhite skipempty nextgroup=redifArgumentAuthorArticle contained
+syntax match redifFieldAuthorBook /^Author-Book:/ skipwhite skipempty nextgroup=redifArgumentAuthorBook contained
+syntax match redifFieldAuthorChapter /^Author-Chapter:/ skipwhite skipempty nextgroup=redifArgumentAuthorChapter contained
+syntax match redifFieldAuthorEmail /^Author-Email:/ skipwhite skipempty nextgroup=redifArgumentAuthorEmail contained
+syntax match redifFieldAuthorFax /^Author-Fax:/ skipwhite skipempty nextgroup=redifArgumentAuthorFax contained
+syntax match redifFieldAuthorHomepage /^Author-Homepage:/ skipwhite skipempty nextgroup=redifArgumentAuthorHomepage contained
+syntax match redifFieldAuthorName /^Author-Name:/ skipwhite skipempty nextgroup=redifArgumentAuthorName contained
+syntax match redifFieldAuthorNameFirst /^Author-Name-First:/ skipwhite skipempty nextgroup=redifArgumentAuthorNameFirst contained
+syntax match redifFieldAuthorNameLast /^Author-Name-Last:/ skipwhite skipempty nextgroup=redifArgumentAuthorNameLast contained
+syntax match redifFieldAuthorPaper /^Author-Paper:/ skipwhite skipempty nextgroup=redifArgumentAuthorPaper contained
+syntax match redifFieldAuthorPerson /^Author-Person:/ skipwhite skipempty nextgroup=redifArgumentAuthorPerson contained
+syntax match redifFieldAuthorPhone /^Author-Phone:/ skipwhite skipempty nextgroup=redifArgumentAuthorPhone contained
+syntax match redifFieldAuthorPostal /^Author-Postal:/ skipwhite skipempty nextgroup=redifArgumentAuthorPostal contained
+syntax match redifFieldAuthorSoftware /^Author-Software:/ skipwhite skipempty nextgroup=redifArgumentAuthorSoftware contained
+syntax match redifFieldAuthorWorkplaceEmail /^Author-Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceEmail contained
+syntax match redifFieldAuthorWorkplaceFax /^Author-Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceFax contained
+syntax match redifFieldAuthorWorkplaceHomepage /^Author-Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceHomepage contained
+syntax match redifFieldAuthorWorkplaceInstitution /^Author-Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceInstitution contained
+syntax match redifFieldAuthorWorkplaceLocation /^Author-Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceLocation contained
+syntax match redifFieldAuthorWorkplaceName /^Author-Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceName contained
+syntax match redifFieldAuthorWorkplaceNameEnglish /^Author-Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceNameEnglish contained
+syntax match redifFieldAuthorWorkplacePhone /^Author-Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplacePhone contained
+syntax match redifFieldAuthorWorkplacePostal /^Author-Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplacePostal contained
+syntax match redifFieldAvailability /^Availability:/ skipwhite skipempty nextgroup=redifArgumentAvailability contained
+syntax match redifFieldBookHandle /^Book-Handle:/ skipwhite skipempty nextgroup=redifArgumentBookHandle contained
+syntax match redifFieldBookTitle /^Book-Title:/ skipwhite skipempty nextgroup=redifArgumentBookTitle contained
+syntax match redifFieldChapterHandle /^Chapter-Handle:/ skipwhite skipempty nextgroup=redifArgumentChapterHandle contained
+syntax match redifFieldChapter /^Chapter:/ skipwhite skipempty nextgroup=redifArgumentChapter contained
+syntax match redifFieldClassificationJEL /^Classification-JEL:/ skipwhite skipempty nextgroup=redifArgumentClassificationJEL contained
+syntax match redifFieldContactEmail /^Contact-Email:/ skipwhite skipempty nextgroup=redifArgumentContactEmail contained
+syntax match redifFieldCreationDate /^Creation-Date:/ skipwhite skipempty nextgroup=redifArgumentCreationDate contained
+syntax match redifFieldDescription /^Description:/ skipwhite skipempty nextgroup=redifArgumentDescription contained
+syntax match redifFieldEdition /^Edition:/ skipwhite skipempty nextgroup=redifArgumentEdition contained
+syntax match redifFieldEditorBook /^Editor-Book:/ skipwhite skipempty nextgroup=redifArgumentEditorBook contained
+syntax match redifFieldEditorEmail /^Editor-Email:/ skipwhite skipempty nextgroup=redifArgumentEditorEmail contained
+syntax match redifFieldEditorFax /^Editor-Fax:/ skipwhite skipempty nextgroup=redifArgumentEditorFax contained
+syntax match redifFieldEditorHomepage /^Editor-Homepage:/ skipwhite skipempty nextgroup=redifArgumentEditorHomepage contained
+syntax match redifFieldEditorName /^Editor-Name:/ skipwhite skipempty nextgroup=redifArgumentEditorName contained
+syntax match redifFieldEditorNameFirst /^Editor-Name-First:/ skipwhite skipempty nextgroup=redifArgumentEditorNameFirst contained
+syntax match redifFieldEditorNameLast /^Editor-Name-Last:/ skipwhite skipempty nextgroup=redifArgumentEditorNameLast contained
+syntax match redifFieldEditorPerson /^Editor-Person:/ skipwhite skipempty nextgroup=redifArgumentEditorPerson contained
+syntax match redifFieldEditorPhone /^Editor-Phone:/ skipwhite skipempty nextgroup=redifArgumentEditorPhone contained
+syntax match redifFieldEditorPostal /^Editor-Postal:/ skipwhite skipempty nextgroup=redifArgumentEditorPostal contained
+syntax match redifFieldEditorSeries /^Editor-Series:/ skipwhite skipempty nextgroup=redifArgumentEditorSeries contained
+syntax match redifFieldEditorWorkplaceEmail /^Editor-Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceEmail contained
+syntax match redifFieldEditorWorkplaceFax /^Editor-Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceFax contained
+syntax match redifFieldEditorWorkplaceHomepage /^Editor-Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceHomepage contained
+syntax match redifFieldEditorWorkplaceInstitution /^Editor-Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceInstitution contained
+syntax match redifFieldEditorWorkplaceLocation /^Editor-Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceLocation contained
+syntax match redifFieldEditorWorkplaceName /^Editor-Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceName contained
+syntax match redifFieldEditorWorkplaceNameEnglish /^Editor-Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceNameEnglish contained
+syntax match redifFieldEditorWorkplacePhone /^Editor-Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplacePhone contained
+syntax match redifFieldEditorWorkplacePostal /^Editor-Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplacePostal contained
+syntax match redifFieldEmail /^Email:/ skipwhite skipempty nextgroup=redifArgumentEmail contained
+syntax match redifFieldFax /^Fax:/ skipwhite skipempty nextgroup=redifArgumentFax contained
+syntax match redifFieldFileFormat /^File-Format:/ skipwhite skipempty nextgroup=redifArgumentFileFormat contained
+syntax match redifFieldFileFunction /^File-Function:/ skipwhite skipempty nextgroup=redifArgumentFileFunction contained
+syntax match redifFieldFileRestriction /^File-Restriction:/ skipwhite skipempty nextgroup=redifArgumentFileRestriction contained
+syntax match redifFieldFileSize /^File-Size:/ skipwhite skipempty nextgroup=redifArgumentFileSize contained
+syntax match redifFieldFileURL /^File-URL:/ skipwhite skipempty nextgroup=redifArgumentFileURL contained
+syntax match redifFieldFollowup /^Followup:/ skipwhite skipempty nextgroup=redifArgumentFollowup contained
+syntax match redifFieldHandleOfArchive /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfArchive contained
+syntax match redifFieldHandleOfInstitution /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfInstitution contained
+syntax match redifFieldHandleOfPerson /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfPerson contained
+syntax match redifFieldHandleOfSeries /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfSeries contained
+syntax match redifFieldHandleOfWork /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfWork contained
+syntax match redifFieldHasChapter /^HasChapter:/ skipwhite skipempty nextgroup=redifArgumentHasChapter contained
+syntax match redifFieldHomepage /^Homepage:/ skipwhite skipempty nextgroup=redifArgumentHomepage contained
+syntax match redifFieldInBook /^In-Book:/ skipwhite skipempty nextgroup=redifArgumentInBook contained
+syntax match redifFieldISBN /^ISBN:/ skipwhite skipempty nextgroup=redifArgumentISBN contained
+syntax match redifFieldISSN /^ISSN:/ skipwhite skipempty nextgroup=redifArgumentISSN contained
+syntax match redifFieldIssue /^Issue:/ skipwhite skipempty nextgroup=redifArgumentIssue contained
+syntax match redifFieldJournal /^Journal:/ skipwhite skipempty nextgroup=redifArgumentJournal contained
+syntax match redifFieldKeywords /^Keywords:/ skipwhite skipempty nextgroup=redifArgumentKeywords contained
+syntax match redifFieldKeywords /^Keywords:/ skipwhite skipempty nextgroup=redifArgumentKeywords contained
+syntax match redifFieldLanguage /^Language:/ skipwhite skipempty nextgroup=redifArgumentLanguage contained
+syntax match redifFieldLastLoginDate /^Last-Login-Date:/ skipwhite skipempty nextgroup=redifArgumentLastLoginDate contained
+syntax match redifFieldLength /^Length:/ skipwhite skipempty nextgroup=redifArgumentLength contained
+syntax match redifFieldMaintainerEmail /^Maintainer-Email:/ skipwhite skipempty nextgroup=redifArgumentMaintainerEmail contained
+syntax match redifFieldMaintainerFax /^Maintainer-Fax:/ skipwhite skipempty nextgroup=redifArgumentMaintainerFax contained
+syntax match redifFieldMaintainerName /^Maintainer-Name:/ skipwhite skipempty nextgroup=redifArgumentMaintainerName contained
+syntax match redifFieldMaintainerPhone /^Maintainer-Phone:/ skipwhite skipempty nextgroup=redifArgumentMaintainerPhone contained
+syntax match redifFieldMonth /^Month:/ skipwhite skipempty nextgroup=redifArgumentMonth contained
+syntax match redifFieldNameASCII /^Name-ASCII:/ skipwhite skipempty nextgroup=redifArgumentNameASCII contained
+syntax match redifFieldNameFirst /^Name-First:/ skipwhite skipempty nextgroup=redifArgumentNameFirst contained
+syntax match redifFieldNameFull /^Name-Full:/ skipwhite skipempty nextgroup=redifArgumentNameFull contained
+syntax match redifFieldNameLast /^Name-Last:/ skipwhite skipempty nextgroup=redifArgumentNameLast contained
+syntax match redifFieldNameMiddle /^Name-Middle:/ skipwhite skipempty nextgroup=redifArgumentNameMiddle contained
+syntax match redifFieldNamePrefix /^Name-Prefix:/ skipwhite skipempty nextgroup=redifArgumentNamePrefix contained
+syntax match redifFieldNameSuffix /^Name-Suffix:/ skipwhite skipempty nextgroup=redifArgumentNameSuffix contained
+syntax match redifFieldName /^Name:/ skipwhite skipempty nextgroup=redifArgumentName contained
+syntax match redifFieldNote /^Note:/ skipwhite skipempty nextgroup=redifArgumentNote contained
+syntax match redifFieldNotification /^Notification:/ skipwhite skipempty nextgroup=redifArgumentNotification contained
+syntax match redifFieldNumber /^Number:/ skipwhite skipempty nextgroup=redifArgumentNumber contained
+syntax match redifFieldOrderEmail /^Order-Email:/ skipwhite skipempty nextgroup=redifArgumentOrderEmail contained
+syntax match redifFieldOrderHomepage /^Order-Homepage:/ skipwhite skipempty nextgroup=redifArgumentOrderHomepage contained
+syntax match redifFieldOrderPostal /^Order-Postal:/ skipwhite skipempty nextgroup=redifArgumentOrderPostal contained
+syntax match redifFieldOrderURL /^Order-URL:/ skipwhite skipempty nextgroup=redifArgumentOrderURL contained
+syntax match redifFieldPages /^Pages:/ skipwhite skipempty nextgroup=redifArgumentPages contained
+syntax match redifFieldPaperHandle /^Paper-Handle:/ skipwhite skipempty nextgroup=redifArgumentPaperHandle contained
+syntax match redifFieldPhone /^Phone:/ skipwhite skipempty nextgroup=redifArgumentPhone contained
+syntax match redifFieldPostal /^Postal:/ skipwhite skipempty nextgroup=redifArgumentPostal contained
+syntax match redifFieldPredecessor /^Predecessor:/ skipwhite skipempty nextgroup=redifArgumentPredecessor contained
+syntax match redifFieldPrice /^Price:/ skipwhite skipempty nextgroup=redifArgumentPrice contained
+syntax match redifFieldPrimaryDefunct /^Primary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentPrimaryDefunct contained
+syntax match redifFieldPrimaryEmail /^Primary-Email:/ skipwhite skipempty nextgroup=redifArgumentPrimaryEmail contained
+syntax match redifFieldPrimaryFax /^Primary-Fax:/ skipwhite skipempty nextgroup=redifArgumentPrimaryFax contained
+syntax match redifFieldPrimaryHomepage /^Primary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentPrimaryHomepage contained
+syntax match redifFieldPrimaryInstitution /^Primary-Institution:/ skipwhite skipempty nextgroup=redifArgumentPrimaryInstitution contained
+syntax match redifFieldPrimaryLocation /^Primary-Location:/ skipwhite skipempty nextgroup=redifArgumentPrimaryLocation contained
+syntax match redifFieldPrimaryName /^Primary-Name:/ skipwhite skipempty nextgroup=redifArgumentPrimaryName contained
+syntax match redifFieldPrimaryNameEnglish /^Primary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentPrimaryNameEnglish contained
+syntax match redifFieldPrimaryPhone /^Primary-Phone:/ skipwhite skipempty nextgroup=redifArgumentPrimaryPhone contained
+syntax match redifFieldPrimaryPostal /^Primary-Postal:/ skipwhite skipempty nextgroup=redifArgumentPrimaryPostal contained
+syntax match redifFieldProgrammingLanguage /^Programming-Language:/ skipwhite skipempty nextgroup=redifArgumentProgrammingLanguage contained
+syntax match redifFieldProviderEmail /^Provider-Email:/ skipwhite skipempty nextgroup=redifArgumentProviderEmail contained
+syntax match redifFieldProviderFax /^Provider-Fax:/ skipwhite skipempty nextgroup=redifArgumentProviderFax contained
+syntax match redifFieldProviderHomepage /^Provider-Homepage:/ skipwhite skipempty nextgroup=redifArgumentProviderHomepage contained
+syntax match redifFieldProviderInstitution /^Provider-Institution:/ skipwhite skipempty nextgroup=redifArgumentProviderInstitution contained
+syntax match redifFieldProviderLocation /^Provider-Location:/ skipwhite skipempty nextgroup=redifArgumentProviderLocation contained
+syntax match redifFieldProviderName /^Provider-Name:/ skipwhite skipempty nextgroup=redifArgumentProviderName contained
+syntax match redifFieldProviderNameEnglish /^Provider-Name-English:/ skipwhite skipempty nextgroup=redifArgumentProviderNameEnglish contained
+syntax match redifFieldProviderPhone /^Provider-Phone:/ skipwhite skipempty nextgroup=redifArgumentProviderPhone contained
+syntax match redifFieldProviderPostal /^Provider-Postal:/ skipwhite skipempty nextgroup=redifArgumentProviderPostal contained
+syntax match redifFieldPublicationDate /^Publication-Date:/ skipwhite skipempty nextgroup=redifArgumentPublicationDate contained
+syntax match redifFieldPublicationStatus /^Publication-Status:/ skipwhite skipempty nextgroup=redifArgumentPublicationStatus contained
+syntax match redifFieldPublicationType /^Publication-Type:/ skipwhite skipempty nextgroup=redifArgumentPublicationType contained
+syntax match redifFieldQuaternaryEmail /^Quaternary-Email:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryEmail contained
+syntax match redifFieldQuaternaryFax /^Quaternary-Fax:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryFax contained
+syntax match redifFieldQuaternaryHomepage /^Quaternary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryHomepage contained
+syntax match redifFieldQuaternaryInstitution /^Quaternary-Institution:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryInstitution contained
+syntax match redifFieldQuaternaryLocation /^Quaternary-Location:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryLocation contained
+syntax match redifFieldQuaternaryName /^Quaternary-Name:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryName contained
+syntax match redifFieldQuaternaryNameEnglish /^Quaternary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryNameEnglish contained
+syntax match redifFieldQuaternaryPhone /^Quaternary-Phone:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryPhone contained
+syntax match redifFieldQuaternaryPostal /^Quaternary-Postal:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryPostal contained
+syntax match redifFieldRegisteredDate /^Registered-Date:/ skipwhite skipempty nextgroup=redifArgumentRegisteredDate contained
+syntax match redifFieldRequires /^Requires:/ skipwhite skipempty nextgroup=redifArgumentRequires contained
+syntax match redifFieldRestriction /^Restriction:/ skipwhite skipempty nextgroup=redifArgumentRestriction contained
+syntax match redifFieldRevisionDate /^Revision-Date:/ skipwhite skipempty nextgroup=redifArgumentRevisionDate contained
+syntax match redifFieldSecondaryDefunct /^Secondary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentSecondaryDefunct contained
+syntax match redifFieldSecondaryEmail /^Secondary-Email:/ skipwhite skipempty nextgroup=redifArgumentSecondaryEmail contained
+syntax match redifFieldSecondaryFax /^Secondary-Fax:/ skipwhite skipempty nextgroup=redifArgumentSecondaryFax contained
+syntax match redifFieldSecondaryHomepage /^Secondary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentSecondaryHomepage contained
+syntax match redifFieldSecondaryInstitution /^Secondary-Institution:/ skipwhite skipempty nextgroup=redifArgumentSecondaryInstitution contained
+syntax match redifFieldSecondaryLocation /^Secondary-Location:/ skipwhite skipempty nextgroup=redifArgumentSecondaryLocation contained
+syntax match redifFieldSecondaryName /^Secondary-Name:/ skipwhite skipempty nextgroup=redifArgumentSecondaryName contained
+syntax match redifFieldSecondaryNameEnglish /^Secondary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentSecondaryNameEnglish contained
+syntax match redifFieldSecondaryPhone /^Secondary-Phone:/ skipwhite skipempty nextgroup=redifArgumentSecondaryPhone contained
+syntax match redifFieldSecondaryPostal /^Secondary-Postal:/ skipwhite skipempty nextgroup=redifArgumentSecondaryPostal contained
+syntax match redifFieldSeries /^Series:/ skipwhite skipempty nextgroup=redifArgumentSeries contained
+syntax match redifFieldShortId /^Short-Id:/ skipwhite skipempty nextgroup=redifArgumentShortId contained
+syntax match redifFieldSize /^Size:/ skipwhite skipempty nextgroup=redifArgumentSize contained
+syntax match redifFieldSoftwareHandle /^Software-Handle:/ skipwhite skipempty nextgroup=redifArgumentSoftwareHandle contained
+syntax match redifFieldTemplateType /^Template-Type:/ skipwhite skipempty nextgroup=redifArgumentTemplateType contained
+syntax match redifFieldTertiaryDefunct /^Tertiary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentTertiaryDefunct contained
+syntax match redifFieldTertiaryEmail /^Tertiary-Email:/ skipwhite skipempty nextgroup=redifArgumentTertiaryEmail contained
+syntax match redifFieldTertiaryFax /^Tertiary-Fax:/ skipwhite skipempty nextgroup=redifArgumentTertiaryFax contained
+syntax match redifFieldTertiaryHomepage /^Tertiary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentTertiaryHomepage contained
+syntax match redifFieldTertiaryInstitution /^Tertiary-Institution:/ skipwhite skipempty nextgroup=redifArgumentTertiaryInstitution contained
+syntax match redifFieldTertiaryLocation /^Tertiary-Location:/ skipwhite skipempty nextgroup=redifArgumentTertiaryLocation contained
+syntax match redifFieldTertiaryName /^Tertiary-Name:/ skipwhite skipempty nextgroup=redifArgumentTertiaryName contained
+syntax match redifFieldTertiaryNameEnglish /^Tertiary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentTertiaryNameEnglish contained
+syntax match redifFieldTertiaryPhone /^Tertiary-Phone:/ skipwhite skipempty nextgroup=redifArgumentTertiaryPhone contained
+syntax match redifFieldTertiaryPostal /^Tertiary-Postal:/ skipwhite skipempty nextgroup=redifArgumentTertiaryPostal contained
+syntax match redifFieldTitle /^Title:/ skipwhite skipempty nextgroup=redifArgumentTitle contained
+syntax match redifFieldType /^Type:/ skipwhite skipempty nextgroup=redifArgumentType contained
+syntax match redifFieldURL /^URL:/ skipwhite skipempty nextgroup=redifArgumentURL contained
+syntax match redifFieldVersion /^Version:/ skipwhite skipempty nextgroup=redifArgumentVersion contained
+syntax match redifFieldVolume /^Volume:/ skipwhite skipempty nextgroup=redifArgumentVolume contained
+syntax match redifFieldWorkplaceEmail /^Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceEmail contained
+syntax match redifFieldWorkplaceFax /^Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceFax contained
+syntax match redifFieldWorkplaceHomepage /^Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceHomepage contained
+syntax match redifFieldWorkplaceInstitution /^Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceInstitution contained
+syntax match redifFieldWorkplaceLocation /^Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceLocation contained
+syntax match redifFieldWorkplaceName /^Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceName contained
+syntax match redifFieldWorkplaceNameEnglish /^Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceNameEnglish contained
+syntax match redifFieldWorkplaceOrganization /^Workplace-Organization:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceOrganization contained
+syntax match redifFieldWorkplacePhone /^Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentWorkplacePhone contained
+syntax match redifFieldWorkplacePostal /^Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentWorkplacePostal contained
+syntax match redifFieldYear /^Year:/ skipwhite skipempty nextgroup=redifArgumentYear contained
+
+highlight def link redifFieldAbstract redifField
+highlight def link redifFieldArticleHandle redifField
+highlight def link redifFieldAuthorArticle redifField
+highlight def link redifFieldAuthorBook redifField
+highlight def link redifFieldAuthorChapter redifField
+highlight def link redifFieldAuthorEmail redifField
+highlight def link redifFieldAuthorFax redifField
+highlight def link redifFieldAuthorHomepage redifField
+highlight def link redifFieldAuthorName redifField
+highlight def link redifFieldAuthorNameFirst redifField
+highlight def link redifFieldAuthorNameLast redifField
+highlight def link redifFieldAuthorPaper redifField
+highlight def link redifFieldAuthorPerson redifField
+highlight def link redifFieldAuthorPhone redifField
+highlight def link redifFieldAuthorPostal redifField
+highlight def link redifFieldAuthorSoftware redifField
+highlight def link redifFieldAuthorWorkplaceEmail redifField
+highlight def link redifFieldAuthorWorkplaceFax redifField
+highlight def link redifFieldAuthorWorkplaceHomepage redifField
+highlight def link redifFieldAuthorWorkplaceInstitution redifField
+highlight def link redifFieldAuthorWorkplaceLocation redifField
+highlight def link redifFieldAuthorWorkplaceName redifField
+highlight def link redifFieldAuthorWorkplaceNameEnglish redifField
+highlight def link redifFieldAuthorWorkplacePhone redifField
+highlight def link redifFieldAuthorWorkplacePostal redifField
+highlight def link redifFieldAvailability redifField
+highlight def link redifFieldBookHandle redifField
+highlight def link redifFieldBookTitle redifField
+highlight def link redifFieldChapterHandle redifField
+highlight def link redifFieldChapter redifField
+highlight def link redifFieldClassificationJEL redifField
+highlight def link redifFieldContactEmail redifField
+highlight def link redifFieldCreationDate redifField
+highlight def link redifFieldDescription redifField
+highlight def link redifFieldEdition redifField
+highlight def link redifFieldEditorBook redifField
+highlight def link redifFieldEditorEmail redifField
+highlight def link redifFieldEditorFax redifField
+highlight def link redifFieldEditorHomepage redifField
+highlight def link redifFieldEditorName redifField
+highlight def link redifFieldEditorNameFirst redifField
+highlight def link redifFieldEditorNameLast redifField
+highlight def link redifFieldEditorPerson redifField
+highlight def link redifFieldEditorPhone redifField
+highlight def link redifFieldEditorPostal redifField
+highlight def link redifFieldEditorSeries redifField
+highlight def link redifFieldEditorWorkplaceEmail redifField
+highlight def link redifFieldEditorWorkplaceFax redifField
+highlight def link redifFieldEditorWorkplaceHomepage redifField
+highlight def link redifFieldEditorWorkplaceInstitution redifField
+highlight def link redifFieldEditorWorkplaceLocation redifField
+highlight def link redifFieldEditorWorkplaceName redifField
+highlight def link redifFieldEditorWorkplaceNameEnglish redifField
+highlight def link redifFieldEditorWorkplacePhone redifField
+highlight def link redifFieldEditorWorkplacePostal redifField
+highlight def link redifFieldEmail redifField
+highlight def link redifFieldFax redifField
+highlight def link redifFieldFileFormat redifField
+highlight def link redifFieldFileFunction redifField
+highlight def link redifFieldFileRestriction redifField
+highlight def link redifFieldFileSize redifField
+highlight def link redifFieldFileURL redifField
+highlight def link redifFieldFollowup redifField
+highlight def link redifFieldHandleOfArchive redifField
+highlight def link redifFieldHandleOfInstitution redifField
+highlight def link redifFieldHandleOfPerson redifField
+highlight def link redifFieldHandleOfSeries redifField
+highlight def link redifFieldHandleOfWork redifField
+highlight def link redifFieldHasChapter redifField
+highlight def link redifFieldHomepage redifField
+highlight def link redifFieldInBook redifField
+highlight def link redifFieldISBN redifField
+highlight def link redifFieldISSN redifField
+highlight def link redifFieldIssue redifField
+highlight def link redifFieldJournal redifField
+highlight def link redifFieldKeywords redifField
+highlight def link redifFieldKeywords redifField
+highlight def link redifFieldLanguage redifField
+highlight def link redifFieldLastLoginDate redifField
+highlight def link redifFieldLength redifField
+highlight def link redifFieldMaintainerEmail redifField
+highlight def link redifFieldMaintainerFax redifField
+highlight def link redifFieldMaintainerName redifField
+highlight def link redifFieldMaintainerPhone redifField
+highlight def link redifFieldMonth redifField
+highlight def link redifFieldNameASCII redifField
+highlight def link redifFieldNameFirst redifField
+highlight def link redifFieldNameFull redifField
+highlight def link redifFieldNameLast redifField
+highlight def link redifFieldNameMiddle redifField
+highlight def link redifFieldNamePrefix redifField
+highlight def link redifFieldNameSuffix redifField
+highlight def link redifFieldName redifField
+highlight def link redifFieldNote redifField
+highlight def link redifFieldNotification redifField
+highlight def link redifFieldNumber redifField
+highlight def link redifFieldOrderEmail redifField
+highlight def link redifFieldOrderHomepage redifField
+highlight def link redifFieldOrderPostal redifField
+highlight def link redifFieldOrderURL redifField
+highlight def link redifFieldPages redifField
+highlight def link redifFieldPaperHandle redifField
+highlight def link redifFieldPhone redifField
+highlight def link redifFieldPostal redifField
+highlight def link redifFieldPredecessor redifField
+highlight def link redifFieldPrice redifField
+highlight def link redifFieldPrimaryDefunct redifField
+highlight def link redifFieldPrimaryEmail redifField
+highlight def link redifFieldPrimaryFax redifField
+highlight def link redifFieldPrimaryHomepage redifField
+highlight def link redifFieldPrimaryInstitution redifField
+highlight def link redifFieldPrimaryLocation redifField
+highlight def link redifFieldPrimaryName redifField
+highlight def link redifFieldPrimaryNameEnglish redifField
+highlight def link redifFieldPrimaryPhone redifField
+highlight def link redifFieldPrimaryPostal redifField
+highlight def link redifFieldProgrammingLanguage redifField
+highlight def link redifFieldProviderEmail redifField
+highlight def link redifFieldProviderFax redifField
+highlight def link redifFieldProviderHomepage redifField
+highlight def link redifFieldProviderInstitution redifField
+highlight def link redifFieldProviderLocation redifField
+highlight def link redifFieldProviderName redifField
+highlight def link redifFieldProviderNameEnglish redifField
+highlight def link redifFieldProviderPhone redifField
+highlight def link redifFieldProviderPostal redifField
+highlight def link redifFieldPublicationDate redifField
+highlight def link redifFieldPublicationStatus redifField
+highlight def link redifFieldPublicationType redifField
+highlight def link redifFieldQuaternaryEmail redifField
+highlight def link redifFieldQuaternaryFax redifField
+highlight def link redifFieldQuaternaryHomepage redifField
+highlight def link redifFieldQuaternaryInstitution redifField
+highlight def link redifFieldQuaternaryLocation redifField
+highlight def link redifFieldQuaternaryName redifField
+highlight def link redifFieldQuaternaryNameEnglish redifField
+highlight def link redifFieldQuaternaryPhone redifField
+highlight def link redifFieldQuaternaryPostal redifField
+highlight def link redifFieldRegisteredDate redifField
+highlight def link redifFieldRequires redifField
+highlight def link redifFieldRestriction redifField
+highlight def link redifFieldRevisionDate redifField
+highlight def link redifFieldSecondaryDefunct redifField
+highlight def link redifFieldSecondaryEmail redifField
+highlight def link redifFieldSecondaryFax redifField
+highlight def link redifFieldSecondaryHomepage redifField
+highlight def link redifFieldSecondaryInstitution redifField
+highlight def link redifFieldSecondaryLocation redifField
+highlight def link redifFieldSecondaryName redifField
+highlight def link redifFieldSecondaryNameEnglish redifField
+highlight def link redifFieldSecondaryPhone redifField
+highlight def link redifFieldSecondaryPostal redifField
+highlight def link redifFieldSeries redifField
+highlight def link redifFieldShortId redifField
+highlight def link redifFieldSize redifField
+highlight def link redifFieldSoftwareHandle redifField
+highlight def link redifFieldTemplateType redifField
+highlight def link redifFieldTertiaryDefunct redifField
+highlight def link redifFieldTertiaryEmail redifField
+highlight def link redifFieldTertiaryFax redifField
+highlight def link redifFieldTertiaryHomepage redifField
+highlight def link redifFieldTertiaryInstitution redifField
+highlight def link redifFieldTertiaryLocation redifField
+highlight def link redifFieldTertiaryName redifField
+highlight def link redifFieldTertiaryNameEnglish redifField
+highlight def link redifFieldTertiaryPhone redifField
+highlight def link redifFieldTertiaryPostal redifField
+highlight def link redifFieldTitle redifField
+highlight def link redifFieldTitle redifField
+highlight def link redifFieldType redifField
+highlight def link redifFieldURL redifField
+highlight def link redifFieldVersion redifField
+highlight def link redifFieldVolume redifField
+highlight def link redifFieldWorkplaceEmail redifField
+highlight def link redifFieldWorkplaceFax redifField
+highlight def link redifFieldWorkplaceHomepage redifField
+highlight def link redifFieldWorkplaceInstitution redifField
+highlight def link redifFieldWorkplaceLocation redifField
+highlight def link redifFieldWorkplaceName redifField
+highlight def link redifFieldWorkplaceNameEnglish redifField
+highlight def link redifFieldWorkplaceOrganization redifField
+highlight def link redifFieldWorkplacePhone redifField
+highlight def link redifFieldWorkplacePostal redifField
+highlight def link redifFieldYear redifField
+
+" Deprecated
+"     same as Provider-*
+"     nextgroup=redifArgumentProvider*
+syntax match redifFieldPublisherEmail /^Publisher-Email:/ skipwhite skipempty nextgroup=redifArgumentProviderEmail contained
+syntax match redifFieldPublisherFax /^Publisher-Fax:/ skipwhite skipempty nextgroup=redifArgumentProviderFax contained
+syntax match redifFieldPublisherHomepage /^Publisher-Homepage:/ skipwhite skipempty nextgroup=redifArgumentProviderHomepage contained
+syntax match redifFieldPublisherInstitution /^Publisher-Institution:/ skipwhite skipempty nextgroup=redifArgumentProviderInstitution contained
+syntax match redifFieldPublisherLocation /^Publisher-Location:/ skipwhite skipempty nextgroup=redifArgumentProviderLocation contained
+syntax match redifFieldPublisherName /^Publisher-Name:/ skipwhite skipempty nextgroup=redifArgumentProviderName contained
+syntax match redifFieldPublisherNameEnglish /^Publisher-Name-English:/ skipwhite skipempty nextgroup=redifArgumentProviderNameEnglish contained
+syntax match redifFieldPublisherPhone /^Publisher-Phone:/ skipwhite skipempty nextgroup=redifArgumentProviderPhone contained
+syntax match redifFieldPublisherPostal /^Publisher-Postal:/ skipwhite skipempty nextgroup=redifArgumentProviderPostal contained
+
+highlight def link redifFieldPublisherEmail redifFieldDeprecated
+highlight def link redifFieldPublisherFax redifFieldDeprecated
+highlight def link redifFieldPublisherHomepage redifFieldDeprecated
+highlight def link redifFieldPublisherInstitution redifFieldDeprecated
+highlight def link redifFieldPublisherLocation redifFieldDeprecated
+highlight def link redifFieldPublisherName redifFieldDeprecated
+highlight def link redifFieldPublisherNameEnglish redifFieldDeprecated
+highlight def link redifFieldPublisherPhone redifFieldDeprecated
+highlight def link redifFieldPublisherPostal redifFieldDeprecated
+
+" Standard arguments
+"    By default, they contain all the argument until another field is started:
+"        start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1
+"    For arguments that must not span more than one line, use a match:
+"        /\%(^\S\{-}:\)\@!\S.*/
+"        AND ADD "display"
+"    This is faster.
+"
+"    Those arguments are not highlighted so far. They are here for future
+"    extensions.
+"    TODO Find more RegEx for these arguments
+"    	TODO Fax, Phone
+"    	TODO URL, Homepage
+"    	TODO Keywords
+"    	TODO Classification-JEL
+"    	TODO Short-Id, Author-Person, Editor-Person
+"
+"    Arguments that may span several lines:
+syntax region redifArgumentAuthorWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentFileFunction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentIssue start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentJournal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentOrderPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrice start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentRequires start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSize start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentVersion start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+
+" Arguments that may not span several lines:
+"    If you are sure that these arguments cannot span several lines, change
+"    them to a match:
+"        /\%(^\S\{-}:\)\@!\S.*/
+"    AND ADD "display" after "contained"
+"        You can use this command on each line that you want to change:
+"        :s+\Vregion \(\w\+\) start=/\\%(^\\S\\{-}:\\)\\@!\\S/ end=/^\\S\\{-}:/me=s-1 contained+match \1 /\\%(^\\S\\{-}:\\)\\@!\\S.*/ contained display
+syntax region redifArgumentAuthorFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorPerson start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentAuthorWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorPerson start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentEditorWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentFileURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentMaintainerFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentMaintainerName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentMaintainerPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameFull start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameMiddle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNamePrefix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNameSuffix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentNumber start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentOrderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentOrderURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentPrimaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentProviderPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentQuaternaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSecondaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentSeries start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentShortId start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentTertiaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+syntax region redifArgumentWorkplaceOrganization start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
+
+" Special arguments
+"    Those arguments require special values
+"    TODO Improve some RegEx
+"    	TODO Improve Emails
+"    	TODO Improve ISBN
+"    	TODO Improve ISSN
+"    	TODO Improve spell check (add words from economics.
+"    	   expl=macroeconometrics, Schumpeterian, IS-LM, etc.)
+"
+"    Template-Type
+syntax match redifArgumentTemplateType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectTemplateType contained display
+syntax match redifCorrectTemplateType /ReDIF-\%(Paper\|Article\|Chapter\|Book\|Software\|Archive\|Series\|Institution\|Person\)/ nextgroup=redifTemplateVersionNumberContainer contained display
+syntax match redifTemplateVersionNumberContainer /.\+/ contains=redifTemplateVersionNumber contained display
+syntax match redifTemplateVersionNumber / \d\+\.\d\+/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentTemplateType redifError
+highlight def link redifCorrectTemplateType Constant
+highlight def link redifTemplateVersionNumber Number
+highlight def link redifTemplateVersionNumberContainer redifError
+
+"    Handles:
+"
+"        Handles of Works:
+syntax match redifArgumentHandleOfWork /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorArticle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorPaper /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentAuthorSoftware /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentEditorBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentEditorSeries /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentInBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentHasChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentArticleHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentBookHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentChapterHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentPaperHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifArgumentSoftwareHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
+syntax match redifCorrectHandleOfWork /RePEc:\a\a\a:\%(_\@!\w\)\{6}:\S\+/ contains=redifForbiddenCharactersInHandle,redifBestPracticeInHandle nextgroup=redifWrongLineEnding contained display
+" TODO Are those characters really forbidden???
+syntax match redifForbiddenCharactersInHandle /[\/*?"<>|]/ contained display
+syntax match redifBestPracticeInHandle /\<\%([vi]:[1-9]\d*\|y:[1-9]\d\{3}\|p:[1-9]\d*-[1-9]\d*\|i:\%(jan\|feb\|mar\|apr\|may\|jun\|jul\|aug\|sep\|oct\|nov\|dec\|spr\|sum\|aut\|win\|spe\|Q[1-4]\|\d\d-\d\d\)\|Q:[1-4]\)\>/ contained display
+
+highlight def link redifArgumentHandleOfWork redifError
+highlight def link redifArgumentAuthorArticle redifError
+highlight def link redifArgumentAuthorBook redifError
+highlight def link redifArgumentAuthorChapter redifError
+highlight def link redifArgumentAuthorPaper redifError
+highlight def link redifArgumentAuthorSoftware redifError
+highlight def link redifArgumentEditorBook redifError
+highlight def link redifArgumentEditorSeries redifError
+highlight def link redifArgumentInBook redifError
+highlight def link redifArgumentHasChapter redifError
+highlight def link redifArgumentArticleHandle redifError
+highlight def link redifArgumentBookHandle redifError
+highlight def link redifArgumentChapterHandle redifError
+highlight def link redifArgumentPaperHandle redifError
+highlight def link redifArgumentSoftwareHandle redifError
+highlight def link redifForbiddenCharactersInHandle redifError
+highlight def link redifBestPracticeInHandle redifSpecial
+
+"        Handles of Series:
+syntax match redifArgumentHandleOfSeries /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
+syntax match redifArgumentFollowup /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
+syntax match redifArgumentPredecessor /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
+syntax match redifCorrectHandleOfSeries /RePEc:\a\a\a:\%(_\@!\w\)\{6}/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentHandleOfSeries redifError
+highlight def link redifArgumentFollowup redifError
+highlight def link redifArgumentPredecessor redifError
+
+"        Handles of Archives:
+syntax match redifArgumentHandleOfArchive /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfArchive contained display
+syntax match redifCorrectHandleOfArchive /RePEc:\a\a\a/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentHandleOfArchive redifError
+
+"        Handles of Person:
+syntax match redifArgumentHandleOfPerson /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfPerson contained display
+syntax match redifCorrectHandleOfPerson /\%(\%(:\@!\S\)\{-}:\)\{2}[1-9]\d\{3}\%(-02\%(-[12]\d\|-0[1-9]\)\|-\%(0[469]\|11\)\%(-30\|-[12]\d\|-0[1-9]\)\|-\%(0[13578]\|1[02]\)\%(-3[01]\|-[12]\d\|-0[1-9]\)\):\S\+/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentHandleOfPerson redifError
+
+"        Handles of Institution:
+syntax match redifArgumentAuthorWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentEditorWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentPrimaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentProviderInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentPublisherInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentQuaternaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentSecondaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentTertiaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentHandleOfInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentPrimaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentSecondaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+syntax match redifArgumentTertiaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
+" TODO Are digits authorized? Apparently not.
+" Country codes:
+" http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm
+syntax match redifCorrectHandleOfInstitution /RePEc:\a\a\a:\a\{5}\(ea\|af\|ax\|al\|dz\|as\|ad\|ao\|ai\|aq\|ag\|ar\|am\|aw\|au\|at\|az\|bs\|bh\|bd\|bb\|by\|be\|bz\|bj\|bm\|bt\|bo\|bq\|ba\|bw\|bv\|br\|io\|bn\|bg\|bf\|bi\|kh\|cm\|ca\|cv\|ky\|cf\|td\|cl\|cn\|cx\|cc\|co\|km\|cg\|cd\|ck\|cr\|ci\|hr\|cu\|cw\|cy\|cz\|dk\|dj\|dm\|do\|ec\|eg\|sv\|gq\|er\|ee\|et\|fk\|fo\|fj\|fi\|fr\|gf\|pf\|tf\|ga\|gm\|ge\|de\|gh\|gi\|gr\|gl\|gd\|gp\|gu\|gt\|gg\|gn\|gw\|gy\|ht\|hm\|va\|hn\|hk\|hu\|is\|in\|id\|ir\|iq\|ie\|im\|il\|it\|jm\|jp\|je\|jo\|kz\|ke\|ki\|kp\|kr\|kw\|kg\|la\|lv\|lb\|ls\|lr\|ly\|li\|lt\|lu\|mo\|mk\|mg\|mw\|my\|mv\|ml\|mt\|mh\|mq\|mr\|mu\|yt\|mx\|fm\|md\|mc\|mn\|me\|ms\|ma\|mz\|mm\|na\|nr\|np\|nl\|nc\|nz\|ni\|ne\|ng\|nu\|nf\|mp\|no\|om\|pk\|pw\|ps\|pa\|pg\|py\|pe\|ph\|pn\|pl\|pt\|pr\|qa\|re\|ro\|ru\|rw\|bl\|sh\|kn\|lc\|mf\|pm\|vc\|ws\|sm\|st\|sa\|sn\|rs\|sc\|sl\|sg\|sx\|sk\|si\|sb\|so\|za\|gs\|ss\|es\|lk\|sd\|sr\|sj\|sz\|se\|ch\|sy\|tw\|tj\|tz\|th\|tl\|tg\|tk\|to\|tt\|tn\|tr\|tm\|tc\|tv\|ug\|ua\|ae\|gb\|us\|um\|uy\|uz\|vu\|ve\|vn\|vg\|vi\|wf\|eh\|ye\|zm\|zw\)/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentHandleOfInstitution redifError
+highlight def link redifArgumentPrimaryDefunct redifError
+highlight def link redifArgumentSecondaryDefunct redifError
+highlight def link redifArgumentTertiaryDefunct redifError
+
+"    Emails:
+syntax match redifArgumentAuthorEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentAuthorWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentContactEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentEditorEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentEditorWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentMaintainerEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentOrderEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentPrimaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentProviderEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentPublisherEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentQuaternaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentSecondaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentTertiaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifArgumentWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
+syntax match redifCorrectEmail /\%(@\@!\S\)\+@\%(@\@!\S\)\+/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentAuthorEmail redifError
+highlight def link redifArgumentAuthorWorkplaceEmail redifError
+highlight def link redifArgumentContactEmail redifError
+highlight def link redifArgumentEditorEmail redifError
+highlight def link redifArgumentEditorWorkplaceEmail redifError
+highlight def link redifArgumentEmail redifError
+highlight def link redifArgumentMaintainerEmail redifError
+highlight def link redifArgumentOrderEmail redifError
+highlight def link redifArgumentPrimaryEmail redifError
+highlight def link redifArgumentProviderEmail redifError
+highlight def link redifArgumentPublisherEmail redifError
+highlight def link redifArgumentQuaternaryEmail redifError
+highlight def link redifArgumentSecondaryEmail redifError
+highlight def link redifArgumentTertiaryEmail redifError
+highlight def link redifArgumentWorkplaceEmail redifError
+
+"    Language
+"    Source: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
+syntax match redifArgumentLanguage /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectLanguage contained display
+syntax match redifCorrectLanguage /\<\(aa\|ab\|af\|ak\|als\|am\|an\|ang\|ar\|arc\|as\|ast\|av\|ay\|az\|ba\|bar\|bat-smg\|bcl\|be\|be-x-old\|bg\|bh\|bi\|bm\|bn\|bo\|bpy\|br\|bs\|bug\|bxr\|ca\|ce\|ceb\|ch\|cho\|chr\|chy\|co\|cr\|cs\|csb\|cu\|cv\|cy\|da\|de\|diq\|dsb\|dv\|dz\|ee\|el\|en\|eo\|es\|et\|eu\|ext\|fa\|ff\|fi\|fiu-vro\|fj\|fo\|fr\|frp\|fur\|fy\|ga\|gd\|gil\|gl\|gn\|got\|gu\|gv\|ha\|haw\|he\|hi\|ho\|hr\|ht\|hu\|hy\|hz\|ia\|id\|ie\|ig\|ii\|ik\|ilo\|io\|is\|it\|iu\|ja\|jbo\|jv\|ka\|kg\|ki\|kj\|kk\|kl\|km\|kn\|khw\|ko\|kr\|ks\|ksh\|ku\|kv\|kw\|ky\|la\|lad\|lan\|lb\|lg\|li\|lij\|lmo\|ln\|lo\|lt\|lv\|map-bms\|mg\|mh\|mi\|mk\|ml\|mn\|mo\|mr\|ms\|mt\|mus\|my\|na\|nah\|nap\|nd\|nds\|nds-nl\|ne\|new\|ng\|nl\|nn\|no\|nr\|nso\|nrm\|nv\|ny\|oc\|oj\|om\|or\|os\|pa\|pag\|pam\|pap\|pdc\|pi\|pih\|pl\|pms\|ps\|pt\|qu\|rm\|rmy\|rn\|ro\|roa-rup\|ru\|rw\|sa\|sc\|scn\|sco\|sd\|se\|sg\|sh\|si\|simple\|sk\|sl\|sm\|sn\|so\|sq\|sr\|ss\|st\|su\|sv\|sw\|ta\|te\|tet\|tg\|th\|ti\|tk\|tl\|tlh\|tn\|to\|tpi\|tr\|ts\|tt\|tum\|tw\|ty\|udm\|ug\|uk\|ur\|uz\|ve\|vi\|vec\|vls\|vo\|wa\|war\|wo\|xal\|xh\|yi\|yo\|za\|zh\|zh-min-nan\|zh-yue\|zu\)\>/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentLanguage redifError
+highlight def link redifCorrectLanguage redifSpecial
+
+"    Length
+"    Based on the example in the documentation. But apparently any field is
+"    possible
+syntax region redifArgumentLength start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifGoodLength contained
+syntax match redifGoodLength /1 page\|[1-9]\d*\%( pages\)\=/ contained display
+
+highlight def link redifGoodLength redifSpecial
+
+"    Publication-Type
+syntax match redifArgumentPublicationType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectPublicationType contained display
+syntax match redifCorrectPublicationType /\<\(journal article\|book\|book chapter\|working paper\|conference paper\|report\|other\)\>/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentPublicationType redifError
+highlight def link redifCorrectPublicationType redifSpecial
+
+"    Publication-Status
+syntax region redifArgumentPublicationStatus start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifSpecialPublicationStatus contained
+syntax match redifSpecialPublicationStatus /published\|forthcoming/ nextgroup=redifCorrectPublicationStatus contained display
+syntax region redifCorrectPublicationStatus start=/./ end=/^\S\{-}:/me=s-1 contained
+
+highlight def link redifArgumentPublicationStatus redifError
+highlight def link redifSpecialPublicationStatus redifSpecial
+
+"    Month
+"    TODO Are numbers also allowed?
+syntax match redifArgumentMonth /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodMonth contained display
+syntax match redifGoodMonth /\<\(Jan\%(uary\)\=\|Feb\%(ruary\)\=\|Mar\%(ch\)\=\|Apr\%(il\)\=\|May\|June\=\|July\=\|Aug\%(ust\)\=\|Sep\%(tember\)\=\|Oct\%(ober\)\=\|Nov\%(ember\)\=\|Dec\%(ember\)\=\)\>/ contained display
+
+highlight def link redifGoodMonth redifSpecial
+
+"    Integers: Volume, Chapter
+syntax match redifArgumentVolume /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
+syntax match redifArgumentChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
+syntax match redifCorrectInteger /[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentVolume redifError
+highlight def link redifArgumentChapter redifError
+
+"    Year
+syntax match redifArgumentYear /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectYear contained display
+syntax match redifCorrectYear /[1-9]\d\{3}/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentYear redifError
+
+"    Edition
+"    Based on the example in the documentation.
+syntax match redifArgumentEdition /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodEdition contained display
+syntax match redifGoodEdition /1st\|2nd\|3rd\|[4-9]th\|[1-9]\d*\%(1st\|2nd\|3rd\|[4-9]th\)\|[1-9]\d*/ contained display
+
+highlight def link redifGoodEdition redifSpecial
+
+"    ISBN
+syntax match redifArgumentISBN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISBN contained display
+syntax match redifGoodISBN /\d[0-9-]\{8,15}\d/ contained display
+
+highlight def link redifGoodISBN redifSpecial
+
+"    ISSN
+syntax match redifArgumentISSN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISSN contained display
+syntax match redifGoodISSN /\d\{4}-\d\{3}[0-9X]/ contained display
+
+highlight def link redifGoodISSN redifSpecial
+
+"    File-Size
+"    Based on the example in the documentation.
+syntax region redifArgumentFileSize start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifGoodSize contained
+syntax match redifGoodSize /kb\|bytes/ contained display
+
+highlight def link redifGoodSize redifSpecial
+
+"    Type
+syntax match redifArgumentType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectType contained display
+syntax match redifCorrectType /ReDIF-Paper\|ReDIF-Software\|ReDIF-Article\|ReDIF-Chapter\|ReDIF-Book/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentType redifError
+highlight def link redifCorrectType redifSpecial
+
+"    Dates: Publication-Date, Creation-Date, Revision-Date,
+"    Last-Login-Date, Registration-Date
+syntax match redifArgumentCreationDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifArgumentLastLoginDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifArgumentPublicationDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifArgumentRegisteredDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifArgumentRevisionDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
+syntax match redifCorrectDate /[1-9]\d\{3}\%(-02\%(-[12]\d\|-0[1-9]\)\=\|-\%(0[469]\|11\)\%(-30\|-[12]\d\|-0[1-9]\)\=\|-\%(0[13578]\|1[02]\)\%(-3[01]\|-[12]\d\|-0[1-9]\)\=\)\=/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentCreationDate redifError
+highlight def link redifArgumentLastLoginDate redifError
+highlight def link redifArgumentPublicationDate redifError
+highlight def link redifArgumentRegisteredDate redifError
+highlight def link redifArgumentRevisionDate redifError
+
+"    Classification-JEL
+syntax match redifArgumentClassificationJEL /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectJEL contained display
+syntax match redifCorrectJEL /\<\%(\u\d\{,2}[,; \t]\s*\)*\u\d\{,2}/ contains=redifSpecialJEL nextgroup=redifWrongLineEnding contained display
+syntax match redifSpecialJEL /\<\u\d\{,2}/ contained display
+
+highlight def link redifArgumentClassificationJEL redifError
+highlight def link redifSpecialJEL redifSpecial
+
+"    Pages
+syntax match redifArgumentPages /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectPages contained display
+syntax match redifCorrectPages /[1-9]\d*-[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifArgumentPages redifError
+
+"    Name-ASCII
+syntax match redifArgumentNameASCII /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectNameASCII contained display
+syntax match redifCorrectNameASCII /[ -~]/ contained display
+
+highlight def link redifArgumentNameASCII redifError
+
+"    Programming-Language
+syntax match redifArgumentProgrammingLanguage /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodProgrammingLanguage contained display
+syntax match redifGoodProgrammingLanguage /\<c++\|\<\%(c\|dos executable\|executable\|fortran\|gauss\|gretl\|java\|mathematica\|matlab\|octave\|ox\|perl\|python\|rats\|r\|shazam\|s-plus\|stata\|tsp international\)\>/ nextgroup=redifWrongLineEnding contained display
+
+highlight def link redifGoodProgrammingLanguage redifSpecial
+
+"    File-Format
+"    TODO The link in the documentation that gives the list of possible formats is broken.
+"    ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/media-types
+"    These are based on the examples in the documentation.
+syntax match redifArgumentFileFormat /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodFormat contained display
+syntax match redifGoodFormat "\a\+/[[:alpha:]+-]\+" nextgroup=redifWrongLineEnding contains=redifSpecialFormat contained display
+syntax match redifSpecialFormat "application/atom+xml\|application/ecmascript\|application/EDI-X12\|application/EDIFACT\|application/json\|application/javascript\|application/octet-stream\|application/ogg\|application/pdf\|application/postscript\|application/rdf+xml\|application/rss+xml\|application/soap+xml\|application/font-woff\|application/xhtml+xml\|application/xml\|application/xml-dtd\|application/xop+xml\|application/zip\|application/gzip\|audio/basic\|audio/L24\|audio/mp4\|audio/mpeg\|audio/ogg\|audio/vorbis\|audio/vnd.rn-realaudio\|audio/vnd.wave\|audio/webm\|image/gif\|image/jpeg\|image/pjpeg\|image/png\|image/svg+xml\|image/tiff\|image/vnd.microsoft.icon\|message/http\|message/imdn+xml\|message/partial\|message/rfc822\|model/example\|model/iges\|model/mesh\|model/vrml\|model/x3d+binary\|model/x3d+vrml\|model/x3d+xml\|multipart/mixed\|multipart/alternative\|multipart/related\|multipart/form-data\|multipart/signed\|multipart/encrypted\|text/cmd\|text/css\|text/csv\|text/html\|text/javascript\|text/plain\|text/vcard\|text/xml\|video/mpeg\|video/mp4\|video/ogg\|video/quicktime\|video/webm\|video/x-matroska\|video/x-ms-wmv\|video/x-flv" contained display
+
+highlight def link redifSpecialFormat redifSpecial
+highlight def link redifArgumentFileFormat redifError
+
+" Keywords
+"     Spell checked
+syntax match redifArgumentKeywords /\%(^\S\{-}:\)\@!\S.*/ contains=@Spell,redifKeywordsSemicolon contained
+syntax match redifKeywordsSemicolon /;/ contained
+
+highlight def link redifKeywordsSemicolon redifSpecial
+
+" Other spell-checked arguments
+"    Very useful when copy-pasting abstracts that may contain hyphens or
+"    ligatures.
+syntax region redifArgumentAbstract start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentAvailability start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentBookTitle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentDescription start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentFileRestriction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentNote start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentNotification start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentRestriction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+syntax region redifArgumentTitle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
+
+" Wrong line ending
+syntax match redifWrongLineEnding /.\+/ contained display
+
+highlight def link redifWrongLineEnding redifError
+
+" Final highlight
+highlight def link redifComment Comment
+highlight def link redifError Error
+highlight def link redifField Identifier
+highlight def link redifFieldDeprecated Identifier
+highlight def link redifSpecial Special
+" For deprecated fields:
+highlight redifFieldDeprecated term=undercurl cterm=undercurl gui=undercurl guisp=DarkGrey
+
+" Sync: The template-type (ReDIF-Paper, ReDIF-Archive, etc.) influences which
+" fields can follow. Thus sync must search backwards for it.
+"
+" I would like to simply ask VIM to search backward for the first occurence of
+" /^Template-Type:/, but it does not seem to be possible, so I have to start
+" from the beginning of the file... This might slow down a lot for files that
+" contain a lot of Template-Type statements.
+syntax sync fromstart
+
+" The problem with syntax sync match (tried below), it is that, for example,
+" it cannot realize when it is inside a Author-Name cluster, which is inside a
+" Template-Type template...
+"
+" TODO Is this linecont pattern really useful? It seems to work anyway...
+"syntax sync linecont /^\(Template-Type:\)\=\s*$/
+" TODO This sync is surprising... It seems to work on several lines even
+" though I replaced \_s* by \s*, even without the linecont pattern...
+"syntax sync match redifSyncForTemplatePaper groupthere redifRegionTemplatePaper /^Template-Type:\s*ReDIF-Paper \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateArticle groupthere redifRegionTemplateArticle /^Template-Type:\s*ReDIF-Article \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateChapter groupthere redifRegionTemplateChapter /^Template-Type:\s*ReDIF-Chapter \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateBook groupthere redifRegionTemplateBook /^Template-Type:\s*ReDIF-Book \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateSoftware groupthere redifRegionTemplateSoftware /^Template-Type:\s*ReDIF-Software \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateArchive groupthere redifRegionTemplateArchive /^Template-Type:\s*ReDIF-Archive \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateSeries groupthere redifRegionTemplateSeries /^Template-Type:\s*ReDIF-Series \d\+\.\d\+/
+"syntax sync match redifSyncForTemplateInstitution groupthere redifRegionTemplateInstitution /^Template-Type:\s*ReDIF-Institution \d\+\.\d\+/
+"syntax sync match redifSyncForTemplatePerson groupthere redifRegionTemplatePerson /^Template-Type:\s*ReDIF-Person \d\+\.\d\+/
+
+" I do not really know how sync linebreaks works, but it helps when making
+" changes on the argument when this argument is not on the same line than its
+" field. I just assume that people won't leave more than one line of
+" whitespace between fields and arguments (which is already very unlikely)
+" hence the value of 2.
+syntax sync linebreaks=2
+
+" Since folding is defined by the syntax, set foldmethod to syntax.
+set foldmethod=syntax
+
+" Set "b:current_syntax" to the name of the syntax at the end:
+let b:current_syntax="redif"
diff -Naur vim73.orig/runtime/syntax/resolv.vim vim73/runtime/syntax/resolv.vim
--- vim73.orig/runtime/syntax/resolv.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/resolv.vim	2013-08-04 19:09:09.640613443 +0000
@@ -1,11 +1,13 @@
 " Vim syntax file
 " Language: resolver configuration file
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Original Maintaner: Radu Dineiu <littledragon@altern.org>
-" License: This file can be redistribued and/or modified under the same terms
-"   as Vim itself.
-" URL: http://trific.ath.cx/Ftp/vim/syntax/resolv.vim
-" Last Change: 2006-04-16
+" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
+" URL: https://raw.github.com/rid9/vim-resolv/master/resolv.vim
+" Last Change: 2013 May 21
+" Version: 1.0
+"
+" Credits:
+"   David Necas (Yeti) <yeti@physics.muni.cz>
+"   Stefano Zacchiroli <zack@debian.org>
 
 if version < 600
 	syntax clear
@@ -42,8 +44,6 @@
 syn match resolvOptions /^\s*options\>/ nextgroup=resolvOption skipwhite
 
 " Options
-" FIXME: The manual page and the source code do not exactly agree on the set
-" of allowed options
 syn match resolvOption /\<\%(debug\|no_tld_query\|rotate\|no-check-names\|inet6\)\>/ contained nextgroup=resolvOption skipwhite
 syn match resolvOption /\<\%(ndots\|timeout\|attempts\):\d\+\>/ contained contains=resolvOperator nextgroup=resolvOption skipwhite
 
diff -Naur vim73.orig/runtime/syntax/reva.vim vim73/runtime/syntax/reva.vim
--- vim73.orig/runtime/syntax/reva.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/reva.vim	2013-08-04 19:09:09.640613443 +0000
@@ -1,10 +1,10 @@
 " Vim syntax file
 " Language:	Reva Forth
-" Version:	7.1
-" Last Change:	2008/01/11
+" Version:	2011.2
+" Last Change:	2012/02/13
 " Maintainer:	Ron Aaron <ron@ronware.org>
 " URL:		http://ronware.org/reva/
-" Filetypes:	*.rf *.frt 
+" Filetypes:	*.rf *.frt
 " NOTE: 	You should also have the ftplugin/reva.vim file to set 'isk'
 
 " For version 5.x: Clear all syntax items and don't load
@@ -17,10 +17,13 @@
    finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn clear
 
 " Synchronization method
-syn sync ccomment 
+syn sync ccomment
 syn sync maxlines=100
 
 
@@ -39,7 +42,7 @@
 syn case match
 " basic mathematical and logical operators
 syn keyword revaoperators + - * / mod /mod negate abs min max umin umax
-syn keyword revaoperators and or xor not invert 1+ 1- 
+syn keyword revaoperators and or xor not invert 1+ 1-
 syn keyword revaoperators m+ */ */mod m* um* m*/ um/mod fm/mod sm/rem
 syn keyword revaoperators d+ d- dnegate dabs dmin dmax > < = >> << u< <>
 
@@ -53,10 +56,10 @@
 " address operations
 syn keyword revamemory @ ! +! c@ c! 2@ 2! align aligned allot allocate here free resize
 syn keyword revaadrarith chars char+ cells cell+ cell cell- 2cell+ 2cell- 3cell+ 4cell+
-syn keyword revamemblks move fill 
+syn keyword revamemblks move fill
 
 " conditionals
-syn keyword revacond if else then =if >if <if <>if if0  ;; catch throw 
+syn keyword revacond if else then =if >if <if <>if if0  ;; catch throw
 
 " iterations
 syn keyword revaloop while repeat until again
@@ -66,18 +69,18 @@
 syn match revaColonDef '\<noname:\|\<:\s+' contains=revaComment
 syn keyword revaEndOfColonDef ; ;inline
 syn keyword revadefine constant constant, variable create variable,
-syn keyword revadefine user value to +to defer! defer@ defer is does> immediate 
+syn keyword revadefine user value to +to defer! defer@ defer is does> immediate
 syn keyword revadefine compile literal ' [']
 
 " Built in words
 com! -nargs=+ Builtin syn keyword revaBuiltin <args>
 Builtin execute ahead interp bye >body here pad words make
 Builtin accept close cr creat delete ekey emit fsize ioerr key?
-Builtin mtime open/r open/rw read rename seek space spaces stat 
+Builtin mtime open/r open/rw read rename seek space spaces stat
 Builtin tell type type_ write (seek) (argv) (save) 0; 0drop;
 Builtin >class >lz >name >xt alias alias: appname argc asciiz, asciizl,
 Builtin body> clamp depth disassemble findprev fnvhash getenv here,
-Builtin iterate last! last@ later link lz> lzmax os parse/ peek 
+Builtin iterate last! last@ later link lz> lzmax os parse/ peek
 Builtin peek-n pop prior push put rp@ rpick save setenv slurp
 Builtin stack-empty? stack-iterate stack-size stack: THROW_BADFUNC
 Builtin THROW_BADLIB THROW_GENERIC used xt>size z,
@@ -88,21 +91,21 @@
 Builtin (-lib) (bye) (call) (else) (find) (func) (here) (if (lib) (s0) (s^)
 Builtin (to~) (while) >in >rel ?literal appstart cold compiling? context? d0 default_class
 Builtin defer? dict dolstr dostr find-word h0 if) interp isa onexit
-Builtin onstartup pdoes pop>ebx prompt rel> rp0 s0 src srcstr state str0 then,> then> tib 
+Builtin onstartup pdoes pop>ebx prompt rel> rp0 s0 src srcstr state str0 then,> then> tib
 Builtin tp vector vector! word? xt? .ver revaver revaver# && '' 'constant 'context
 Builtin 'create 'defer 'does 'forth 'inline 'macro 'macront 'notail 'value 'variable
 Builtin (.r) (context) (create) (header) (hide) (inline) (p.r) (words~) (xfind)
 Builtin ++ -- , -2drop -2nip -link -swap . .2x .classes .contexts .funcs .libs .needs .r
 Builtin .rs .x 00; 0do 0if 1, 2, 3, 2* 2/ 2constant 2variable 3dup 4dup ;then >base >defer
 Builtin >rr ? ?do @execute @rem appdir argv as back base base! between chain cleanup-libs
-Builtin cmove> context?? ctrl-c ctx>name data: defer: defer@def dictgone do_cr eleave 
-Builtin endcase endof eval exception exec false find func: header heapgone help help/ 
+Builtin cmove> context?? ctrl-c ctx>name data: defer: defer@def dictgone do_cr eleave
+Builtin endcase endof eval exception exec false find func: header heapgone help help/
 Builtin hex# hide inline{ last lastxt lib libdir literal, makeexename mnotail ms ms@
-Builtin newclass noop nosavedict notail nul of off on p: padchar parse parseln 
-Builtin parsews rangeof rdepth remains reset reva revaused rol8 rr> scratch setclass sp 
+Builtin newclass noop nosavedict notail nul of off on p: padchar parse parseln
+Builtin parsews rangeof rdepth remains reset reva revaused rol8 rr> scratch setclass sp
 Builtin strof super> temp time&date true turnkey? undo vfunc: w! w@
 Builtin xchg xchg2 xfind xt>name xwords { {{ }} }  _+ _1+ _1- pathsep case \||
-" p[ [''] [ ['] 
+" p[ [''] [ [']
 
 
 " debugging
@@ -116,11 +119,11 @@
 " syn region revaCharOps start=+."\s+ skip=+\\"+ end=+"+
 
 " char-number conversion
-syn keyword revaconversion s>d >digit digit> >single >double >number >float 
+syn keyword revaconversion s>d >digit digit> >single >double >number >float
 
 " contexts
-syn keyword revavocs forth macro inline  
-syn keyword revavocs context: 
+syn keyword revavocs forth macro inline
+syn keyword revavocs context:
 syn match revavocs /\<\~[^~ ]*/
 syn match revavocs /[^~ ]*\~\>/
 
@@ -135,7 +138,7 @@
 
 " Strings
 " syn region revaString start=+\.\?\"+ end=+"+ end=+$+
-syn region revaString start=/"/ skip=/\\"/ end=/"/ 
+syn region revaString start=/"/ skip=/\\"/ end=/"/
 
 " Comments
 syn region revaComment start='\\S\s' end='.*' contains=revaTodo
@@ -187,5 +190,7 @@
 endif
 
 let b:current_syntax = "reva"
+let &cpo = s:cpo_save
+unlet s:cpo_save
 
 " vim: ts=8:sw=4:nocindent:smartindent:
diff -Naur vim73.orig/runtime/syntax/rexx.vim vim73/runtime/syntax/rexx.vim
--- vim73.orig/runtime/syntax/rexx.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/rexx.vim	2013-08-04 19:09:09.640613443 +0000
@@ -1,14 +1,8 @@
 " Vim syntax file
 " Language:	Rexx
 " Maintainer:	Thomas Geulig <geulig@nentec.de>
-" Last Change:  2005 Dez  9, added some <http://www.ooRexx.org>-coloring,
-"                            line comments, do *over*, messages, directives,
-"                            highlighting classes, methods, routines and requires
-"               2007 Oct 17, added support for new ooRexx 3.2 features
-"               Rony G. Flatscher <rony.flatscher@wu-wien.ac.at>
-"
+" Last Change:  2012 Sep 14, added support for new ooRexx 4.0 features
 " URL:		http://www.geulig.de/vim/rexx.vim
-"
 " Special Thanks to Dan Sharp <dwsharp@hotmail.com> and Rony G. Flatscher
 " <Rony.Flatscher@wu-wien.ac.at> for comments and additions
 
@@ -54,7 +48,7 @@
 syn match rexxRegularCallSignal contained "\<\(call\|signal\)\s\(\s*on\>\|\s*off\>\)\@!\(\k\+\ze\|\ze(\)\(\s*\|;\|$\|(\)"
 syn region rexxLabel contained start="\<\(call\|signal\)\>\s*\zs\(\k*\|(\)" end="\ze\(\s*\|;\|$\|(\)" containedin=rexxRegularCallSignal
 
-syn match rexxExceptionHandling contained "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>.*\(;\|$\)"
+syn match rexxExceptionHandling contained "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>.*\(;\|$\)" contains=rexxComment
 
 " hilite label given after keyword "name"
 syn match rexxLabel "name\s\+\zs\k\+\ze" containedin=rexxExceptionHandling
@@ -74,13 +68,14 @@
 syn match rexxLoopKeywords "\<\(to\|by\|for\|until\|while\|over\)\>" containedin=doLoopSelectLabelRegion
 
 " must be after Conditional phrases!
-syn match doLoopSelectLabelRegion "\<\(do\|loop\|select\)\>\s\+\(label\s\+\)\?\(\s\+\k\+\s\+\zs\<over\>\)\?\k*\(\s\+forever\)\?\(\s\|;\|$\)" 
+syn match doLoopSelectLabelRegion "\<\(do\|loop\|select\)\>\s\+\(label\s\+\)\?\(\s\+\k\+\s\+\zs\<over\>\)\?\k*\(\s\+forever\)\?\(\s\|;\|$\)" contains=doLoopSelectLabelRegion,rexxStartValueAssignment,rexxLoopKeywords
 
 " color label's name
 syn match rexxLabel2 "\<\(do\|loop\|select\)\>\s\+label\s\+\zs\k*\ze" containedin=doLoopSelectLabelRegion
 
 " make sure control variable is normal
-syn match rexxControlVariable        "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\s\+\<over\>" containedin=doLoopSelectLabelRegion
+" TODO: re-activate ?
+"rgf syn match rexxControlVariable        "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\s\+\<over\>" containedin=doLoopSelectLabelRegion
 
 " make sure control variable assignment is normal
 syn match rexxStartValueAssignment       "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\(=.*\)\?\s\+\<to\>" containedin=doLoopSelectLabelRegion
@@ -96,7 +91,8 @@
 syn match rexxTrace "\(^\|;\|:\)\s*\<trace\>\s\+\<\K\k*\>"
 
 " Raise statement
-syn match rexxRaise "\(^\|;\|:\)\s\+\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
+" syn match rexxRaise "\(^\|;\|:\)\s\+\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
+syn match rexxRaise "\(^\|;\|:\)\s*\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
 syn match rexxRaise2 "\<\(additional\|array\|description\|exit\|propagate\|return\)\>" containedin=rexxRaise
 
 " Forward statement
@@ -142,19 +138,36 @@
 syn keyword rexxSpecialVariable  .environment .error .input .local .methods .output .rs .stderr .stdin .stdout .stdque
 
 " Constants
-syn keyword rexxConst .true .false .nil .endOfLine .line
+syn keyword rexxConst .true .false .nil .endOfLine .line .context
+
+" Rexx numbers
+" int like number
+syn match rexxNumber '\d\+' contained
+syn match rexxNumber '[-+]\s*\d\+' contained
+
+" Floating point number with decimal
+syn match rexxNumber '\d\+\.\d*' contained
+syn match rexxNumber '[-+]\s*\d\+\.\d*' contained
+
+" Floating point like number with E
+syn match rexxNumber '[-+]\s*\d*[eE][\-+]\d\+' contained
+syn match rexxNumber '\d*[eE][\-+]\d\+' contained
+
+" Floating point like number with E and decimal point (+,-)
+syn match rexxNumber '[-+]\s*\d*\.\d*[eE][\-+]\d\+' contained
+syn match rexxNumber '\d*\.\d*[eE][\-+]\d\+' contained
 
-syn match rexxNumber "\(-\|+\)\?\s*\zs\<\(\d\+\.\?\|\d*\.\d\+\(E\(+\|-\)\d\{2,2}\)\?\)\?\>"
 
 " ooRexx builtin classes (as of version 3.2.0, fall 2007), first define dot to be o.k. in keywords
 syn keyword rexxBuiltinClass .Alarm .ArgUtil .Array .Bag .CaselessColumnComparator
 syn keyword rexxBuiltinClass .CaselessComparator .CaselessDescendingComparator .CircularQueue
 syn keyword rexxBuiltinClass .Class .Collection .ColumnComparator .Comparable .Comparator
-syn keyword rexxBuiltinClass .DateTime .DescendingComparator .Directory .InputOutputStream
+syn keyword rexxBuiltinClass .DateTime .DescendingComparator .Directory .File .InputOutputStream
 syn keyword rexxBuiltinClass .InputStream .InvertingComparator .List .MapCollection
 syn keyword rexxBuiltinClass .Message .Method .Monitor .MutableBuffer .Object
-syn keyword rexxBuiltinClass .OrderedCollection .OutputStream .Properties .Queue
-syn keyword rexxBuiltinClass .Relation .RexxQueue .Set .SetCollection .Stem .Stream
+syn keyword rexxBuiltinClass .OrderedCollection .OutputStream .Package .Properties .Queue
+syn keyword rexxBuiltinClass .RegularExpression .Relation .RexxContext .RexxQueue .Routine
+syn keyword rexxBuiltinClass .Set .SetCollection .Stem .Stream
 syn keyword rexxBuiltinClass .StreamSupplier .String .Supplier .Table .TimeSpan
 
 " Windows-only classes
@@ -163,7 +176,8 @@
 syn keyword rexxBuiltinClass .DialogExtensions .DlgArea .DlgAreaU .DynamicDialog
 syn keyword rexxBuiltinClass .EditControl .InputBox .IntegerBox .ListBox .ListChoice
 syn keyword rexxBuiltinClass .ListControl .MenuObject .MessageExtensions .MultiInputBox
-syn keyword rexxBuiltinClass .MultiListChoice .PasswordBox .PlainBaseDialog .PlainUserDialog
+syn keyword rexxBuiltinClass .MultiListChoice .OLEObject .OLEVariant
+syn keyword rexxBuiltinClass .PasswordBox .PlainBaseDialog .PlainUserDialog
 syn keyword rexxBuiltinClass .ProgressBar .ProgressIndicator .PropertySheet .RadioButton
 syn keyword rexxBuiltinClass .RcDialog .ResDialog .ScrollBar .SingleSelection .SliderControl
 syn keyword rexxBuiltinClass .StateIndicator .StaticControl .TabControl .TimedMessage
@@ -171,22 +185,34 @@
 syn keyword rexxBuiltinClass .WindowExtensions .WindowObject .WindowsClassesBase .WindowsClipboard
 syn keyword rexxBuiltinClass .WindowsEventLog .WindowsManager .WindowsProgramManager .WindowsRegistry
 
+" BSF4ooRexx classes
+syn keyword rexxBuiltinClass .BSF .bsf.dialog .bsf_proxy
+syn keyword rexxBuiltinClass .UNO .UNO_ENUM .UNO_CONSTANTS .UNO_PROPERTIES
+
 " ooRexx directives, ---rgf location important, otherwise directives in top of file not matched!
 syn region rexxClassDirective     start="::\s*class\s*"ms=e+1    end="\ze\(\s\|;\|$\)"
 syn region rexxMethodDirective    start="::\s*method\s*"ms=e+1   end="\ze\(\s\|;\|$\)"
 syn region rexxRequiresDirective  start="::\s*requires\s*"ms=e+1 end="\ze\(\s\|;\|$\)"
 syn region rexxRoutineDirective   start="::\s*routine\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
 syn region rexxAttributeDirective start="::\s*attribute\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
+" rgf, 2012-09-09
+syn region rexxOptionsDirective   start="::\s*options\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
+syn region rexxConstantDirective  start="::\s*constant\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
+
+syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxNumber,rexxComment,rexxLineComment,rexxClassDirective,rexxMethodDirective,rexxRoutineDirective,rexxRequiresDirective,rexxAttributeDirective,rexxOptionsDirective,rexxConstantDirective keepend
+
+syn match rexxOptionsDirective2 "\<\(digits\|form\|fuzz\|trace\)\>" containedin = rexxOptionsDirective3
+syn region rexxOptionsDirective3 start="\(^\|;\)\s*::\s*options\s"ms=e+1  end="\($\|;\)" contains=rexxString,rexxNumber,rexxVariable,rexxComment,rexxLineComment containedin = rexxDirective
 
-syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxComment,rexxLineComment,rexxClassDirective,rexxMethodDirective,rexxRoutineDirective,rexxRequiresDirective,rexxAttributeDirective keepend
 
 syn region rexxVariable start="\zs\<\(\.\)\@!\K\k\+\>\ze\s*\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)" end="\(\_$\|.\)"me=e-1
-syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze" 
+syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze"
 
 " rgf, 2007-07-22: unfortunately, the entire region is colored (not only the
 " patterns), hence useless (vim 7.0)! (syntax-docs hint that that should work)
 " attempt: just colorize the parenthesis in matching colors, keep content
 "          transparent to keep the formatting already done to it!
+" TODO: test on 7.3
 " syn region par1 matchgroup=par1 start="(" matchgroup=par1 end=")" transparent contains=par2
 " syn region par2 matchgroup=par2 start="(" matchgroup=par2 end=")" transparent contains=par3 contained
 " syn region par3 matchgroup=par3 start="(" matchgroup=par3 end=")" transparent contains=par4 contained
@@ -200,11 +226,11 @@
 " syn region par4 matchgroup=par4 start="(" end=")" contains=par5 contained
 " syn region par5 matchgroup=par5 start="(" end=")" contains=par1 contained
 
-hi par1 ctermfg=red 		guifg=red
-hi par2 ctermfg=blue 		guifg=blue
-hi par3 ctermfg=darkgreen 	guifg=darkgreen
-hi par4 ctermfg=darkyellow	guifg=darkyellow
-hi par5 ctermfg=darkgrey 	guifg=darkgrey
+hi par1 ctermfg=red 		guifg=red          "guibg=grey
+hi par2 ctermfg=blue 		guifg=blue         "guibg=grey
+hi par3 ctermfg=darkgreen 	guifg=darkgreen    "guibg=grey
+hi par4 ctermfg=darkyellow	guifg=darkyellow   "guibg=grey
+hi par5 ctermfg=darkgrey 	guifg=darkgrey     "guibg=grey
 
 " line continuation (trailing comma or single dash)
 syn sync linecont "\(,\|-\ze-\@!\)\ze\s*\(--.*\|\/\*.*\)*$"
@@ -214,7 +240,7 @@
 " endif
 " exec "syn sync ccomment rexxComment minlines=" . rexx_minlines
 
-" always scan from start, PCs are powerful enough for that in 2007 !
+" always scan from start, PCs have long become to be powerful enough for that
 exec "syn sync fromstart"
 
 " Define the default highlighting.
@@ -236,7 +262,7 @@
   HiLink endIterateLeaveLabelRegion	rexxKeyword
   HiLink rexxLoopKeywords	rexxKeyword " Todo
 
-  HiLink rexxNumber		Normal	
+  HiLink rexxNumber		Normal "DiffChange
 "  HiLink rexxIdentifier		DiffChange
 
   HiLink rexxRegularCallSignal	Statement
@@ -249,7 +275,7 @@
   HiLink rexxCommentError	rexxError
   HiLink rexxError		Error
   HiLink rexxKeyword		Statement
-  HiLink rexxKeywordStatements	Statement  
+  HiLink rexxKeywordStatements	Statement
 
   HiLink rexxFunction		Function
   HiLink rexxString		String
@@ -271,6 +297,13 @@
   HiLink rexxRequiresDirective	Include
   HiLink rexxRoutineDirective	rexxFunction
 
+" rgf, 2012-09-09
+  HiLink rexxOptionsDirective	rexxFunction
+  HiLink rexxOptionsDirective2  rexxOptionsDirective
+  HiLink rexxOptionsDirective3  Normal " rexxOptionsDirective
+
+  HiLink rexxConstantDirective	rexxFunction
+
   HiLink rexxConst		Constant
   HiLink rexxTypeSpecifier	Type
   HiLink rexxBuiltinClass	rexxTypeSpecifier
diff -Naur vim73.orig/runtime/syntax/rhelp.vim vim73/runtime/syntax/rhelp.vim
--- vim73.orig/runtime/syntax/rhelp.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/rhelp.vim	2013-08-04 19:09:09.643946766 +0000
@@ -1,10 +1,11 @@
 " Vim syntax file
 " Language:    R Help File
-" Maintainer:  Johannes Ranke <jranke@uni-bremen.de>
-" Last Change: 2010 Apr 22
-" Version:     0.7.3
-" SVN:		   $Id: rhelp.vim 88 2010-04-22 19:37:09Z ranke $
-" Remarks:     - Now includes R syntax highlighting in the appropriate
+" Maintainer: Jakson Aquino <jalvesaq@gmail.com>
+" Former Maintainer: Johannes Ranke <jranke@uni-bremen.de>
+" Last Change: Fri Oct 14, 2011  09:54PM
+" Version:     0.7.4
+" SVN:		   $Id: rhelp.vim 90 2010-11-22 10:58:11Z ranke $
+" Remarks:     - Includes R syntax highlighting in the appropriate
 "                sections if an r.vim file is in the same directory or in the
 "                default debian location.
 "              - There is no Latex markup in equations
@@ -24,30 +25,40 @@
 
 syn case match
 
-" R help identifiers {{{
+" R help identifiers {{{1
 syn region rhelpIdentifier matchgroup=rhelpSection	start="\\name{" end="}" 
 syn region rhelpIdentifier matchgroup=rhelpSection	start="\\alias{" end="}" 
-syn region rhelpIdentifier matchgroup=rhelpSection	start="\\pkg{" end="}" 
-syn region rhelpIdentifier matchgroup=rhelpSection	start="\\item{" end="}" contained contains=rhelpDots
-syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end=/}/ contained
+syn region rhelpIdentifier matchgroup=rhelpSection	start="\\pkg{" end="}" contains=rhelpLink
+syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end="}" contained
+syn region rhelpIdentifier matchgroup=rhelpSection start="\\Rdversion{" end="}"
 
 " Highlighting of R code using an existing r.vim syntax file if available {{{1
 syn include @R syntax/r.vim
-syn match rhelpDots		"\\dots" containedin=@R
-syn region rhelpRcode matchgroup=Delimiter start="\\examples{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpSection
-syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpIdentifier,rhelpS4method
-syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end=/}/ contains=@R
-syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end=/}/ contains=@R contained
-syn region rhelpRcode matchgroup=Delimiter start="\\code{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpLink contained
-syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=/)/ contains=@R,rhelpDots contained
-syn region rhelpSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter transparent end=/}/ contains=@R
 
 " Strings {{{1
-syn region rhelpString start=/"/ end=/"/ 
+syn region rhelpString start=/"/ skip=/\\"/ end=/"/ contains=rhelpSpecialChar,rhelpCodeSpecial,rhelpLink contained
+
+" Special characters in R strings
+syn match rhelpCodeSpecial display contained "\\\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
 
-" Special characters  ( \$ \& \% \# \{ \} \_) {{{1
+" Special characters  ( \$ \& \% \# \{ \} \_)
 syn match rhelpSpecialChar        "\\[$&%#{}_]"
 
+
+" R code {{{1
+syn match rhelpDots		"\\dots" containedin=@R
+syn region rhelpRcode matchgroup=Delimiter start="\\examples{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpLink,rhelpIdentifier,rhelpString,rhelpSpecialChar,rhelpSection
+syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpIdentifier,rhelpS4method
+syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end="}" contains=@R
+syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end="}" contains=@R
+syn region rhelpRcode matchgroup=Delimiter start="\\code{" skip='\\\@<!{.\{-}\\\@<!}' transparent end="}" contains=@R,rhelpDots,rhelpString,rhelpSpecialChar,rhelpLink keepend
+syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=")" contains=@R,rhelpDots
+syn region rhelpSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter transparent end="}" contains=@R
+
+" PreProc {{{1
+syn match rhelpPreProc "^#ifdef.*" 
+syn match rhelpPreProc "^#endif.*" 
+
 " Special Delimiters {{{1
 syn match rhelpDelimiter		"\\cr"
 syn match rhelpDelimiter		"\\tab "
@@ -111,9 +122,13 @@
 syn match rhelpKeyword	"\\Omega"
 
 " Links {{{1
-syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend
-syn region rhelpLink matchgroup=rhelpSection start="\\link\[.\{-}\]{" end="}" contained keepend
-syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend
+syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend extend
+syn region rhelpLink matchgroup=rhelpSection start="\\link\[.\{-}\]{" end="}" contained keepend extend
+syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend extend
+
+" Verbatim like {{{1
+syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
+syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
 
 " Type Styles {{{1
 syn match rhelpType		"\\emph\>"
@@ -123,16 +138,18 @@
 syn match rhelpType		"\\dQuote\>"
 syn match rhelpType		"\\preformatted\>"
 syn match rhelpType		"\\kbd\>"
-syn match rhelpType		"\\samp\>"
 syn match rhelpType		"\\eqn\>"
 syn match rhelpType		"\\deqn\>"
 syn match rhelpType		"\\file\>"
 syn match rhelpType		"\\email\>"
 syn match rhelpType		"\\url\>"
+syn match rhelpType		"\\href\>"
 syn match rhelpType		"\\var\>"
 syn match rhelpType		"\\env\>"
 syn match rhelpType		"\\option\>"
 syn match rhelpType		"\\command\>"
+syn match rhelpType		"\\newcommand\>"
+syn match rhelpType		"\\renewcommand\>"
 syn match rhelpType		"\\dfn\>"
 syn match rhelpType		"\\cite\>"
 syn match rhelpType		"\\acronym\>"
@@ -140,6 +157,7 @@
 " rhelp sections {{{1
 syn match rhelpSection		"\\encoding\>"
 syn match rhelpSection		"\\title\>"
+syn match rhelpSection		"\\item\>"
 syn match rhelpSection		"\\description\>"
 syn match rhelpSection		"\\concept\>"
 syn match rhelpSection		"\\arguments\>"
@@ -153,11 +171,11 @@
 syn match rhelpSection		"\\docType\>"
 syn match rhelpSection		"\\format\>"
 syn match rhelpSection		"\\source\>"
-syn match rhelpSection     "\\itemize\>"
-syn match rhelpSection     "\\describe\>"
-syn match rhelpSection     "\\enumerate\>"
-syn match rhelpSection     "\\item "
-syn match rhelpSection     "\\item$"
+syn match rhelpSection    "\\itemize\>"
+syn match rhelpSection    "\\describe\>"
+syn match rhelpSection    "\\enumerate\>"
+syn match rhelpSection    "\\item "
+syn match rhelpSection    "\\item$"
 syn match rhelpSection		"\\tabular{[lcr]*}"
 syn match rhelpSection		"\\dontrun\>"
 syn match rhelpSection		"\\dontshow\>"
@@ -165,16 +183,18 @@
 syn match rhelpSection		"\\donttest\>"
 
 " Freely named Sections {{{1
-syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end=/}/ 
-syn region rhelpFreesubsec matchgroup=Delimiter start="\\subsection{" matchgroup=Delimiter transparent end=/}/ 
+syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end="}"
+syn region rhelpFreesubsec matchgroup=Delimiter start="\\subsection{" matchgroup=Delimiter transparent end="}" 
+
+syn match rhelpDelimiter "{\|\[\|(\|)\|\]\|}"
 
 " R help file comments {{{1
-syn match rhelpComment /%.*$/ contained 
+syn match rhelpComment /%.*$/
 
 " Error {{{1
-syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rhelpError,rhelpBraceError,rhelpCurlyError
-syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rhelpError,rhelpBraceError,rhelpParenError
-syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rhelpError,rhelpCurlyError,rhelpParenError
+syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
+syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
+syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
 syn match rhelpError      /[)\]}]/
 syn match rhelpBraceError /[)}]/ contained
 syn match rhelpCurlyError /[)\]]/ contained
@@ -190,17 +210,21 @@
   else
     command -nargs=+ HiLink hi def link <args>
   endif
+  HiLink rhelpVerbatim    String
+  HiLink rhelpDelimiter   Delimiter
   HiLink rhelpIdentifier  Identifier
   HiLink rhelpString      String
+  HiLink rhelpCodeSpecial Special
   HiLink rhelpKeyword     Keyword
   HiLink rhelpDots        Keyword
   HiLink rhelpLink        Underlined
-  HiLink rhelpType	      Type
+  HiLink rhelpType        Type
   HiLink rhelpSection     PreCondit
   HiLink rhelpError       Error
   HiLink rhelpBraceError  Error
   HiLink rhelpCurlyError  Error
   HiLink rhelpParenError  Error
+  HiLink rhelpPreProc     PreProc
   HiLink rhelpDelimiter   Delimiter
   HiLink rhelpComment     Comment
   HiLink rhelpRComment    Comment
diff -Naur vim73.orig/runtime/syntax/rng.vim vim73/runtime/syntax/rng.vim
--- vim73.orig/runtime/syntax/rng.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/rng.vim	2013-08-04 19:09:09.647280089 +0000
@@ -0,0 +1,25 @@
+" Vim syntax file
+" Language:    RELAX NG
+" Maintainer:  Jaromir Hradilek <jhradilek@gmail.com>
+" URL:         https://github.com/jhradilek/vim-rng
+" Last Change: 25 March 2013
+" Description: A syntax file for RELAX NG, a schema language for XML
+
+if exists('b:current_syntax')
+  finish
+endif
+
+do Syntax xml
+syn spell toplevel
+syn cluster xmlTagHook add=rngTagName
+syn case match
+
+syn keyword rngTagName anyName attribute choice data define div contained
+syn keyword rngTagName element empty except externalRef grammar contained
+syn keyword rngTagName group include interleave list mixed name contained
+syn keyword rngTagName notAllowed nsName oneOrMore optional param contained
+syn keyword rngTagName parentRef ref start text value zeroOrMore contained
+
+hi def link rngTagName Statement
+
+let b:current_syntax = 'rng'
diff -Naur vim73.orig/runtime/syntax/rpl.vim vim73/runtime/syntax/rpl.vim
--- vim73.orig/runtime/syntax/rpl.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/rpl.vim	2013-08-04 19:09:09.650613413 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	RPL/2
 " Version:	0.15.15 against RPL/2 version 4.00pre7i
-" Last Change:	2003 august 24
+" Last Change:	2012 Feb 03 by Thilo Six
 " Maintainer:	Jol BERTRAND <rpl2@free.fr>
 " URL:		http://www.makalis.fr/~bertrand/rpl2/download/vim/indent/rpl.vim
 " Credits:	Nothing
@@ -14,6 +14,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Keyword characters (not used)
 " set iskeyword=33-127
 
@@ -488,4 +491,6 @@
 
 let b:current_syntax = "rpl"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 tw=132
diff -Naur vim73.orig/runtime/syntax/rst.vim vim73/runtime/syntax/rst.vim
--- vim73.orig/runtime/syntax/rst.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/rst.vim	2013-08-04 19:09:09.653946736 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         reStructuredText documentation format
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2010-01-23
+" Latest Revision:  2013-06-03
 
 if exists("b:current_syntax")
   finish
@@ -135,14 +135,34 @@
 syn match   rstStandaloneHyperlink  contains=@NoSpell
       \ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]"
 
-" TODO: Use better syncing.  I don’t know the specifics of syncing well enough,
-" though.
-syn sync minlines=50 linebreaks=1
+syn region rstCodeBlock contained matchgroup=rstDirective
+      \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s+
+      \ skip=+^$+
+      \ end=+^\s\@!+ 
+      \ contains=@NoSpell
+syn cluster rstDirectives add=rstCodeBlock
+
+if !exists('g:rst_syntax_code_list')
+    let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', 'python', 'perl']
+endif
+
+for code in g:rst_syntax_code_list
+    unlet! b:current_syntax
+    exe 'syn include @rst'.code.' syntax/'.code.'.vim'
+    exe 'syn region rstDirective'.code.' matchgroup=rstDirective fold '
+                \.'start=#\%(sourcecode\|code\%(-block\)\=\)::\s\+'.code.'\s*$# '
+                \.'skip=#^$# '
+                \.'end=#^\s\@!# contains=@NoSpell,@rst'.code
+    exe 'syn cluster rstDirectives add=rstDirective'.code
+endfor
+
+" TODO: Use better syncing.
+syn sync minlines=50 linebreaks=2
 
 hi def link rstTodo                         Todo
 hi def link rstComment                      Comment
-hi def link rstSections                     Type
-hi def link rstTransition                   Type
+hi def link rstSections                     Title
+hi def link rstTransition                   rstSections
 hi def link rstLiteralBlock                 String
 hi def link rstQuotedLiteralBlock           String
 hi def link rstDoctestBlock                 PreProc
@@ -168,6 +188,7 @@
 hi def link rstCitationReference            Identifier
 hi def link rstHyperLinkReference           Identifier
 hi def link rstStandaloneHyperlink          Identifier
+hi def link rstCodeBlock                    String
 
 let b:current_syntax = "rst"
 
diff -Naur vim73.orig/runtime/syntax/ruby.vim vim73/runtime/syntax/ruby.vim
--- vim73.orig/runtime/syntax/ruby.vim	2010-05-27 13:54:07.000000000 +0000
+++ vim73/runtime/syntax/ruby.vim	2013-08-04 19:09:09.657280059 +0000
@@ -1,9 +1,7 @@
 " Vim syntax file
 " Language:		Ruby
 " Maintainer:		Doug Kearns <dougkearns@gmail.com>
-" Last Change:		2009 Dec 2
-" URL:			http://vim-ruby.rubyforge.org
-" Anon CVS:		See above site
+" URL:			https://github.com/vim-ruby/vim-ruby
 " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
 " ----------------------------------------------------------------------------
 "
@@ -32,8 +30,8 @@
 
 " Operators
 if exists("ruby_operators")
-  syn match  rubyOperator	 "\%([~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::\)"
-  syn match  rubyPseudoOperator  "\%(-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!=\)"
+  syn match  rubyOperator "[~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::"
+  syn match  rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
   syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
 endif
 
@@ -95,86 +93,89 @@
 syn match rubyBlockArgument	    "&[_[:lower:]][_[:alnum:]]"		 contains=NONE display transparent
 
 syn match  rubyConstant		"\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
-syn match  rubyClassVariable	"@@\h\w*" display
-syn match  rubyInstanceVariable "@\h\w*"  display
-syn match  rubyGlobalVariable	"$\%(\h\w*\|-.\)"
-syn match  rubySymbol		"[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
+syn match  rubyClassVariable	"@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
+syn match  rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"  display
+syn match  rubyGlobalVariable	"$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
+syn match  rubySymbol		"[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
 syn match  rubySymbol		"[]})\"':]\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
-syn match  rubySymbol		"[]})\"':]\@<!:\%(\$\|@@\=\)\=\h\w*"
-syn match  rubySymbol		"[]})\"':]\@<!:\h\w*\%([?!=]>\@!\)\="
+syn match  rubySymbol		"[]})\"':]\@<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"
+syn match  rubySymbol		"[]})\"':]\@<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\="
 syn match  rubySymbol		"\%([{(,]\_s*\)\@<=\l\w*[!?]\=::\@!"he=e-1
-syn match  rubySymbol		"[]})\"':]\@<!\h\w*[!?]\=:\s\@="he=e-1
+syn match  rubySymbol		"[]})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="he=e-1
+syn match  rubySymbol		"\%([{(,]\_s*\)\@<=[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1
+syn match  rubySymbol		"[[:space:],{]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="hs=s+1,he=e-1
 syn region rubySymbol		start="[]})\"':]\@<!:'"  end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape fold
 syn region rubySymbol		start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
 
-syn match  rubyBlockParameter	  "\h\w*" contained
+syn match  rubyBlockParameter	  "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained
 syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\s*\)\@<=|" end="|" oneline display contains=rubyBlockParameter
 
 syn match rubyInvalidVariable	 "$[^ A-Za-z_-]"
-syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]#
+syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]#
+syn match rubyPredefinedVariable "$\d\+"										   display
 syn match rubyPredefinedVariable "$_\>"											   display
 syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>"									   display
 syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>"					   display
 syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
 syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
-syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!"
-syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
-"Obsolete Global Constants
-"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>"
-"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\)\>\%(\s*(\)\@!"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
+syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!"
 
 " Normal Regular Expression
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial keepend fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
 syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
 
 " Generalized Regular Expression
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"	end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				end="}[iomxneus]*"   skip="\\\\\|\\}"	contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				end=">[iomxneus]*"   skip="\\\\\|\\>"	contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				end="\][iomxneus]*"  skip="\\\\\|\\\]"	contains=@rubyRegexpSpecial fold
-syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				end=")[iomxneus]*"   skip="\\\\\|\\)"	contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{"				 end="}[iomxneus]*"   skip="\\\\\|\\}"	 contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<"				 end=">[iomxneus]*"   skip="\\\\\|\\>"	 contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\["				 end="\][iomxneus]*"  skip="\\\\\|\\\]"	 contains=@rubyRegexpSpecial fold
+syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r("				 end=")[iomxneus]*"   skip="\\\\\|\\)"	 contains=@rubyRegexpSpecial fold
 
 " Normal String and Shell Command Output
-syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial,@Spell fold
+syn region rubyString matchgroup=rubyStringDelimiter start="'"	end="'"  skip="\\\\\|\\'"  contains=rubyQuoteEscape,@Spell    fold
 syn region rubyString matchgroup=rubyStringDelimiter start="`"	end="`"  skip="\\\\\|\\`"  contains=@rubyStringSpecial fold
 
 " Generalized Single Quoted String, Symbol and Array of Strings
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
-syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"  end="\z1" skip="\\\\\|\\\z1" fold
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
-syn region rubySymbol matchgroup=rubySymbolDelimiter start="%[s]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
+syn region rubyString matchgroup=rubyStringDelimiter start="%q "				   end=" "   skip="\\\\\|\\)"	fold
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)"   end="\z1" skip="\\\\\|\\\z1" fold
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{"				   end="}"   skip="\\\\\|\\}"	fold contains=rubyNestedCurlyBraces,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<"				   end=">"   skip="\\\\\|\\>"	fold contains=rubyNestedAngleBrackets,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\["				   end="\]"  skip="\\\\\|\\\]"	fold contains=rubyNestedSquareBrackets,rubyDelimEscape
+syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s("				   end=")"   skip="\\\\\|\\)"	fold contains=rubyNestedParentheses,rubyDelimEscape
 
 " Generalized Double Quoted String and Array of Strings and Shell Command Output
 " Note: %= is not matched here as the beginning of a double quoted string
 syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)"	    end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape    fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape  fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
-syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\={"				    end="}"   skip="\\\\\|\\}"	 contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=<"				    end=">"   skip="\\\\\|\\>"	 contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape  fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=\["				    end="\]"  skip="\\\\\|\\\]"	 contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=("				    end=")"   skip="\\\\\|\\)"	 contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape    fold
+syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx] "				    end=" "   skip="\\\\\|\\)"   contains=@rubyStringSpecial fold
 
 " Here Document
-syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\h\w*\)+	 end=+$+ oneline contains=ALLBUT,@rubyNotTop
+syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+	 end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
 
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart			fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     fold keepend
-syn region rubyString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc			fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2	matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
+
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3    matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart		     fold keepend
+syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3  matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
 
 if exists('main_syntax') && main_syntax == 'eruby'
   let b:ruby_no_expensive = 1
@@ -187,7 +188,7 @@
 syn match  rubyModuleDeclaration   "[^[:space:];#<]\+"	 contained contains=rubyConstant,rubyOperator
 syn match  rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
 syn match  rubyFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
-syn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|==\|=\~\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
+syn match  rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
 
 syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter
 
@@ -198,7 +199,7 @@
 syn match   rubyOperator       "\<defined?" display
 syn match   rubyKeyword	       "\<\%(super\|yield\)\>[?!]\@!"
 syn match   rubyBoolean	       "\<\%(true\|false\)\>[?!]\@!"
-syn match   rubyPseudoVariable "\<\%(nil\|self\|__FILE__\|__LINE__\)\>[?!]\@!"
+syn match   rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise
 syn match   rubyBeginEnd       "\<\%(BEGIN\|END\)\>[?!]\@!"
 
 " Expensive Mode - match 'end' with the appropriate opening keyword for syntax
@@ -220,13 +221,13 @@
 
   syn region rubyDoBlock      matchgroup=rubyControl start="\<do\>" end="\<end\>"                 contains=ALLBUT,@rubyNotTop fold
   " curly bracket block or hash literal
-  syn region rubyCurlyBlock   start="{" end="}"							  contains=ALLBUT,@rubyNotTop fold
-  syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
+  syn region rubyCurlyBlock	matchgroup=rubyCurlyBlockDelimiter  start="{" end="}"				contains=ALLBUT,@rubyNotTop fold
+  syn region rubyArrayLiteral	matchgroup=rubyArrayDelimiter	    start="\%(\w\|[\]})]\)\@<!\[" end="]"	contains=ALLBUT,@rubyNotTop fold
 
   " statements without 'do'
   syn region rubyBlockExpression       matchgroup=rubyControl	  start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
   syn region rubyCaseExpression	       matchgroup=rubyConditional start="\<case\>"  end="\<end\>" contains=ALLBUT,@rubyNotTop fold
-  syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
+  syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
 
   syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!"	contained containedin=rubyCaseExpression
   syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
@@ -239,7 +240,7 @@
   syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
 
   if !exists("ruby_minlines")
-    let ruby_minlines = 50
+    let ruby_minlines = 500
   endif
   exec "syn sync minlines=" . ruby_minlines
 
@@ -253,7 +254,7 @@
 
 " Special Methods
 if !exists("ruby_no_special_methods")
-  syn keyword rubyAccess    public protected private module_function
+  syn keyword rubyAccess    public protected private public_class_method private_class_method public_constant private_constant module_function
   " attr is a common variable name
   syn match   rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
   syn keyword rubyAttribute attr_accessor attr_reader attr_writer
@@ -262,17 +263,17 @@
   syn keyword rubyException raise fail catch throw
   " false positive with 'include?'
   syn match   rubyInclude   "\<include\>[?!]\@!"
-  syn keyword rubyInclude   autoload extend load require
+  syn keyword rubyInclude   autoload extend load prepend require require_relative
   syn keyword rubyKeyword   callcc caller lambda proc
 endif
 
 " Comments and Documentation
 syn match   rubySharpBang "\%^#!.*" display
-syn keyword rubyTodo	  FIXME NOTE TODO OPTIMIZE XXX contained
+syn keyword rubyTodo	  FIXME NOTE TODO OPTIMIZE XXX todo contained
 syn match   rubyComment   "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
 if !exists("ruby_no_comment_fold")
   syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
-  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell fold
+  syn region rubyDocumentation	  start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold
 else
   syn region rubyDocumentation	  start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
 endif
@@ -286,12 +287,12 @@
 syn match rubyKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)[?!]" transparent contains=NONE
 syn match rubyKeywordAsMethod "\<\%(if\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
 
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"   transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"	    transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"		    transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>"		    transparent contains=NONE
-syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>"		    transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>"	transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>"		transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>"	transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>"			transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|prepend\|private\|proc\|protected\)\>"		transparent contains=NONE
+syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|require_relative\|raise\|throw\|trap\)\>"	transparent contains=NONE
 
 " __END__ Directive
 syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
@@ -330,7 +331,6 @@
 hi def link rubySymbol			Constant
 hi def link rubyKeyword			Keyword
 hi def link rubyOperator		Operator
-hi def link rubyPseudoOperator		rubyOperator
 hi def link rubyBeginEnd		Statement
 hi def link rubyAccess			Statement
 hi def link rubyAttribute		Statement
@@ -351,6 +351,7 @@
 hi def link rubyRegexpDelimiter		rubyStringDelimiter
 hi def link rubySymbolDelimiter		rubyStringDelimiter
 hi def link rubyStringDelimiter		Delimiter
+hi def link rubyHeredoc			rubyString
 hi def link rubyString			String
 hi def link rubyRegexpEscape		rubyRegexpSpecial
 hi def link rubyRegexpQuantifier	rubyRegexpSpecial
diff -Naur vim73.orig/runtime/syntax/sas.vim vim73/runtime/syntax/sas.vim
--- vim73.orig/runtime/syntax/sas.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/sas.vim	2013-08-04 19:09:09.657280059 +0000
@@ -1,7 +1,9 @@
 " Vim syntax file
 " Language:	SAS
 " Maintainer:	James Kidd <james.kidd@covance.com>
-" Last Change:  18 Jul 2008 by Paulo Tanimoto <ptanimoto@gmail.com>
+" Last Change:  2012 Apr 20
+"               Corrected bug causing some keywords to appear as strings instead
+"               18 Jul 2008 by Paulo Tanimoto <ptanimoto@gmail.com>
 "               Fixed comments with * taking multiple lines.
 "               Fixed highlighting of macro keywords.
 "               Added words to cases that didn't fit anywhere.
@@ -211,16 +213,7 @@
 
 " These don't fit anywhere else (Bob Heckel).
 " Added others that were missing.
-syn match sasUnderscore	"_ALL_"
-syn match sasUnderscore "_AUTOMATIC_"
-syn match sasUnderscore	"_CHARACTER_"
-syn match sasUnderscore	"_INFILE_"
-syn match sasUnderscore	"_N_"
-syn match sasUnderscore "_NAME_"
-syn match sasUnderscore	"_NULL_"
-syn match sasUnderscore	"_NUMERIC_"
-syn match sasUnderscore "_USER_"
-syn match sasUnderscore	"_WEBOUT_"
+syn keyword sasUnderscore	_ALL_ _AUTOMATIC_ _CHARACTER_ _INFILE_ _N_ _NAME_ _NULL_ _NUMERIC_ _USER_ _WEBOUT_
 
 " End of SAS Functions
 
diff -Naur vim73.orig/runtime/syntax/sass.vim vim73/runtime/syntax/sass.vim
--- vim73.orig/runtime/syntax/sass.vim	2010-08-09 18:06:23.000000000 +0000
+++ vim73/runtime/syntax/sass.vim	2013-08-04 19:09:09.660613383 +0000
@@ -2,7 +2,7 @@
 " Language:	Sass
 " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:	*.sass
-" Last Change:	2010 Aug 9
+" Last Change:	2013 May 30
 
 if exists("b:current_syntax")
   finish
@@ -17,8 +17,8 @@
 
 syn region sassDefinition matchgroup=cssBraces start="{" end="}" contains=TOP
 
-syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition
-syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
+syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition
+syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
 syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
 syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation
 syn match sassDefault "!default\>" contained
@@ -34,14 +34,19 @@
 syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained
 syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained
 
-syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,sassProperty
+syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,cssPseudoClass,sassProperty
 
 syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
-syn match sassMixin  "^="               nextgroup=sassMixinName
+syn match sassMixin  "^="               nextgroup=sassMixinName skipwhite
 syn match sassMixin  "\%([{};]\s*\|^\s*\)\@<=@mixin"   nextgroup=sassMixinName skipwhite
 syn match sassMixing "^\s\+\zs+"        nextgroup=sassMixinName
 syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite
 syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend"
+syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%"   nextgroup=sassMixinName skipwhite
+
+syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
+syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function"   nextgroup=sassFunctionName skipwhite
+syn match sassReturn "\%([{};]\s*\|^\s*\)\@<=@return"
 
 syn match sassEscape     "^\s*\zs\\"
 syn match sassIdChar     "#[[:alnum:]_-]\@=" nextgroup=sassId
@@ -53,11 +58,11 @@
 " TODO: Attribute namespaces
 " TODO: Arithmetic (including strings and concatenation)
 
-syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssURL,cssUnicodeEscape,cssMediaType
+syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType
 syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction
 syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction
-syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
-syn keyword sassFor from to through contained
+syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\|each\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
+syn keyword sassFor from to through in contained
 
 syn keyword sassTodo        FIXME NOTE TODO OPTIMIZE XXX contained
 syn region  sassComment     start="^\z(\s*\)//"  end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
@@ -70,7 +75,10 @@
 hi def link sassFunction                Function
 hi def link sassMixing                  PreProc
 hi def link sassMixin                   PreProc
+hi def link sassPlaceholder             PreProc
 hi def link sassExtend                  PreProc
+hi def link sassFunctionDecl            PreProc
+hi def link sassReturn                  PreProc
 hi def link sassTodo                    Todo
 hi def link sassInclude                 Include
 hi def link sassDebug                   sassControl
diff -Naur vim73.orig/runtime/syntax/scheme.vim vim73/runtime/syntax/scheme.vim
--- vim73.orig/runtime/syntax/scheme.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/scheme.vim	2013-08-04 19:09:09.663946706 +0000
@@ -1,13 +1,13 @@
 " Vim syntax file
 " Language:	Scheme (R5RS + some R6RS extras)
-" Last Change:	2009 Nov 27
+" Last Change:	2012 May 13
 " Maintainer:	Sergey Khorev <sergey.khorev@gmail.com>
 " Original author:	Dirk van Deun <dirk@igwe.vub.ac.be>
 
 " This script incorrectly recognizes some junk input as numerals:
 " parsing the complete system of Scheme numerals using the pattern
 " language is practically impossible: I did a lax approximation.
- 
+
 " MzScheme extensions can be activated with setting is_mzscheme variable
 
 " Suggestions and bug reports are solicited by the author.
@@ -22,6 +22,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 
 " Fascist highlighting: everything that doesn't fit the rules is an error...
@@ -117,7 +120,7 @@
 syn keyword schemeFunc hashtable-delete! hashtable-contains? hashtable-update!
 syn keyword schemeFunc hashtable-copy hashtable-clear! hashtable-keys
 syn keyword schemeFunc hashtable-entries hashtable-equivalence-function hashtable-hash-function
-syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash 
+syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash
 syn keyword schemeFunc find for-all exists filter partition fold-left fold-right
 syn keyword schemeFunc remp remove remv remq memp assp cons*
 
@@ -154,11 +157,11 @@
 syn region schemeStruc matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALL
 
 " Simple literals:
-syn region schemeString start=+\%(\\\)\@<!"+ skip=+\\[\\"]+ end=+"+
+syn region schemeString start=+\%(\\\)\@<!"+ skip=+\\[\\"]+ end=+"+ contains=@Spell
 
 " Comments:
 
-syn match	schemeComment	";.*$"
+syn match	schemeComment	";.*$" contains=@Spell
 
 
 " Writing out the complete description of Scheme numerals without
@@ -189,7 +192,7 @@
 if exists("b:is_mzscheme") || exists("is_mzscheme")
     " MzScheme extensions
     " multiline comment
-    syn region	schemeComment start="#|" end="|#"
+    syn region	schemeComment start="#|" end="|#" contains=@Spell
 
     " #%xxx are the special MzScheme identifiers
     syn match schemeOther "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
@@ -207,7 +210,7 @@
     syn keyword schemeExtSyntax free-identifier=? bound-identifier=? module-identifier=? syntax-object->datum
     syn keyword schemeExtSyntax datum->syntax-object
     syn keyword schemeExtSyntax let-values let*-values letrec-values set!-values fluid-let parameterize begin0
-    syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature 
+    syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature
     syn keyword schemeExtSyntax invoke-unit/sig define-values/invoke-unit/sig compound-unit/sig import export
     syn keyword schemeExtSyntax link syntax quasisyntax unsyntax with-syntax
 
@@ -231,7 +234,7 @@
     syn keyword schemeExtFunc exn:i/o:tcp? exn:i/o:udp? exn:misc? exn:misc:application? exn:misc:unsupported? exn:module? exn:read? exn:read:non-char?
     syn keyword schemeExtFunc exn:special-comment? exn:syntax? exn:thread? exn:user? exn:variable? exn:application:mismatch?
     " Command-line parsing
-    syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each 
+    syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each
 
     " syntax quoting, unquoting and quasiquotation
     syn region schemeUnquote matchgroup=Delimiter start="#," end=![ \t\[\]()";]!me=e-1 contains=ALL
@@ -247,7 +250,7 @@
 
 if exists("b:is_chicken") || exists("is_chicken")
     " multiline comment
-    syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment
+    syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=@Spell,schemeMultilineComment
 
     syn match schemeOther "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
     syn match schemeExtSyntax "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
@@ -262,8 +265,8 @@
     syn keyword schemeExtFunc ##core#inline ##sys#error ##sys#update-errno
 
     " here-string
-    syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+
- 
+    syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
+
     if filereadable(expand("<sfile>:p:h")."/cpp.vim")
 	unlet! b:current_syntax
 	syn include @ChickenC <sfile>:p:h/cpp.vim
@@ -282,7 +285,7 @@
 
     " suggested by Alex Queiroz
     syn match schemeExtSyntax "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
-    syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ 
+    syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
 endif
 
 " Synchronization and the wrapping up...
@@ -322,3 +325,6 @@
 endif
 
 let b:current_syntax = "scheme"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/sd.vim vim73/runtime/syntax/sd.vim
--- vim73.orig/runtime/syntax/sd.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/sd.vim	2013-08-04 19:09:09.667280029 +0000
@@ -3,7 +3,7 @@
 " License: This file can be redistribued and/or modified under the same terms
 "   as Vim itself.
 " URL: http://netstudent.polito.it/vim_syntax/
-" Last Change: 2006-09-27
+" Last Change: 2012 Feb 03 by Thilo Six
 
 if version < 600
         syntax clear
@@ -11,6 +11,9 @@
         finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " Always ignore case
 syn case ignore
 
@@ -24,13 +27,13 @@
 syn match sdIP contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}/ contains=@sdIPCluster
 
 " Statements
-syn keyword sdStatement AGGREGATE AUDIO_CHANNELS 
+syn keyword sdStatement AGGREGATE AUDIO_CHANNELS
 syn keyword sdStatement BYTE_PER_PCKT BIT_PER_SAMPLE BITRATE
 syn keyword sdStatement CLOCK_RATE CODING_TYPE CREATOR
 syn match sdStatement /^\s*CODING_TYPE\>/ nextgroup=sdCoding skipwhite
 syn match sdStatement /^\s*ENCODING_NAME\>/ nextgroup=sdEncoding skipwhite
 syn keyword sdStatement FILE_NAME FRAME_LEN FRAME_RATE FORCE_FRAME_RATE
-syn keyword sdStatement LICENSE 
+syn keyword sdStatement LICENSE
 syn match sdStatement /^\s*MEDIA_SOURCE\>/ nextgroup=sdSource skipwhite
 syn match sdStatement /^\s*MULTICAST\>/ nextgroup=sdIP skipwhite
 syn keyword sdStatement PAYLOAD_TYPE PKT_LEN PRIORITY
@@ -73,3 +76,6 @@
 endif
 
 let b:current_syntax = "sd"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/sdl.vim vim73/runtime/syntax/sdl.vim
--- vim73.orig/runtime/syntax/sdl.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/sdl.vim	2013-08-04 19:09:09.670613352 +0000
@@ -1,6 +1,6 @@
 " Vim syntax file
 " Language:	SDL
-" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
+" Maintainer:	Michael Piefel <entwurf@piefel.de>
 " Last Change:	2 May 2001
 
 " For version 5.x: Clear all syntax items
diff -Naur vim73.orig/runtime/syntax/sendpr.vim vim73/runtime/syntax/sendpr.vim
--- vim73.orig/runtime/syntax/sendpr.vim	2010-05-15 11:03:55.000000000 +0000
+++ vim73/runtime/syntax/sendpr.vim	2013-08-04 19:09:09.670613352 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: FreeBSD send-pr file
 " Maintainer: Hendrik Scholz <hendrik@scholz.net>
-" Last Change: 2002 Mar 21
+" Last Change: 2012 Feb 03
 "
 " http://raisdorf.net/files/misc/send-pr.vim
 
@@ -13,6 +13,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn match sendprComment /^SEND-PR:/
 " email address
 syn match sendprType /<[a-zA-Z0-9\-\_\.]*@[a-zA-Z0-9\-\_\.]*>/
@@ -30,3 +33,6 @@
 hi def link sendprType      Type
 hi def link sendprString    String
 hi def link sendprLabel     Label
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/sgmldecl.vim vim73/runtime/syntax/sgmldecl.vim
--- vim73.orig/runtime/syntax/sgmldecl.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/sgmldecl.vim	2013-08-04 19:09:09.677279999 +0000
@@ -12,6 +12,8 @@
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case ignore
 
@@ -76,4 +78,8 @@
 endif
 
 let b:current_syntax = "sgmldecl"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set tw=78 ts=4:
diff -Naur vim73.orig/runtime/syntax/sgmllnx.vim vim73/runtime/syntax/sgmllnx.vim
--- vim73.orig/runtime/syntax/sgmllnx.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/sgmllnx.vim	2013-08-04 19:09:09.677279999 +0000
@@ -1,8 +1,7 @@
 " Vim syntax file
 " Language:	SGML-linuxdoc (supported by old sgmltools-1.x)
-"		(for more information, visit www.sgmltools.org)
 " Maintainer:	SungHyun Nam <goweol@gmail.com>
-" Last Change:	2008 Sep 17
+" Last Change:	2013 May 13
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -29,7 +28,7 @@
 syn keyword sgmllnxTagName contained article author date toc title sect verb
 syn keyword sgmllnxTagName contained abstract tscreen p itemize item enum
 syn keyword sgmllnxTagName contained descrip quote htmlurl code ref
-syn keyword sgmllnxTagName contained tt tag bf
+syn keyword sgmllnxTagName contained tt tag bf it url
 syn match   sgmllnxTagName contained "sect\d\+"
 
 " Comments
diff -Naur vim73.orig/runtime/syntax/sh.vim vim73/runtime/syntax/sh.vim
--- vim73.orig/runtime/syntax/sh.vim	2010-08-05 20:00:59.000000000 +0000
+++ vim73/runtime/syntax/sh.vim	2013-08-04 19:09:09.680613322 +0000
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:		shell (sh) Korn shell (ksh) bash (sh)
-" Maintainer:		Dr. Charles E. Campbell, Jr.  <NdrOchipS@PcampbellAfamily.Mbiz>
+" Maintainer:		Charles E. Campbell  <NdrOchipS@PcampbellAfamily.Mbiz>
 " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int>
-" Last Change:		Aug 04, 2010
-" Version:		114
+" Last Change:		Jul 02, 2013
+" Version:		131
 " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 " For options and settings, please use:      :help ft-sh-syntax
 " This file includes many ideas from ?ric Brunet (eric.brunet@ens.fr)
@@ -16,12 +16,42 @@
   finish
 endif
 
+" AFAICT "." should be considered part of the iskeyword.  Using iskeywords in
+" syntax is dicey, so the following code permits the user to
+"  g:sh_isk set to a string	: specify iskeyword.
+"  g:sh_noisk exists	: don't change iskeyword
+"  g:sh_noisk does not exist	: (default) append "." to iskeyword
+if exists("g:sh_isk") && type(g:sh_isk) == 1	" user specifying iskeyword
+ exe "setl isk=".g:sh_isk
+elseif !exists("g:sh_noisk")		" optionally prevent appending '.' to iskeyword
+ setl isk+=.
+endif
+
+" trying to answer the question: which shell is /bin/sh, really?
+" If the user has not specified any of g:is_kornshell, g:is_bash, g:is_posix, g:is_sh, then guess.
+if !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix") && !exists("g:is_sh")
+ let s:shell = ""
+ if executable("/bin/sh")
+  let s:shell = resolve("/bin/sh")
+ elseif executable("/usr/bin/sh")
+  let s:shell = resolve("/usr/bin/sh")
+ endif
+ if     s:shell =~ 'bash$'
+  let g:is_bash= 1
+ elseif s:shell =~ 'ksh$'
+  let g:is_kornshell = 1
+ elseif s:shell =~ 'dash$'
+  let g:is_posix = 1
+ endif
+ unlet s:shell
+endif
+
 " handling /bin/sh with is_kornshell/is_sh {{{1
 " b:is_sh is set when "#! /bin/sh" is found;
 " However, it often is just a masquerade by bash (typically Linux)
 " or kornshell (typically workstations with Posix "sh").
-" So, when the user sets "is_bash" or "is_kornshell",
-" a b:is_sh is converted into b:is_bash/b:is_kornshell,
+" So, when the user sets "g:is_bash", "g:is_kornshell",
+" or "g:is_posix", a b:is_sh is converted into b:is_bash/b:is_kornshell,
 " respectively.
 if !exists("b:is_kornshell") && !exists("b:is_bash")
   if exists("g:is_posix") && !exists("g:is_kornshell")
@@ -50,16 +80,19 @@
  echomsg "Ignoring g:sh_fold_enabled=".g:sh_fold_enabled."; need to re-compile vim for +fold support"
 endif
 if !exists("s:sh_fold_functions")
- let s:sh_fold_functions = 1
+ let s:sh_fold_functions= and(g:sh_fold_enabled,1)
 endif
 if !exists("s:sh_fold_heredoc")
- let s:sh_fold_heredoc   = 2
+ let s:sh_fold_heredoc  = and(g:sh_fold_enabled,2)
 endif
 if !exists("s:sh_fold_ifdofor")
- let s:sh_fold_ifdofor   = 4
+ let s:sh_fold_ifdofor  = and(g:sh_fold_enabled,4)
 endif
 if g:sh_fold_enabled && &fdm == "manual"
- setlocal fdm=syntax
+ " Given that	the	user provided g:sh_fold_enabled
+ " 	AND	g:sh_fold_enabled is manual (usual default)
+ " 	implies	a desire for syntax-based folding
+ setl fdm=syntax
 endif
 
 " sh syntax is case sensitive {{{1
@@ -74,17 +107,17 @@
 syn cluster shArithParenList	contains=shArithmetic,shCaseEsac,shDeref,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement
 syn cluster shArithList	contains=@shArithParenList,shParenError
 syn cluster shCaseEsacList	contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange
-syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
-syn cluster shColonList	contains=@shCaseList
-syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial
+syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
+"syn cluster shColonList	contains=@shCaseList
+syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shEcho,shEscape,shNumber,shOption,shPosnParm,shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial,shCmdParenRegion
 syn cluster shCurlyList	contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial
-syn cluster shDblQuoteList	contains=shCommandSub,shDeref,shDerefSimple,shPosnParm,shCtrlSeq,shSpecial
+syn cluster shDblQuoteList	contains=shCommandSub,shDeref,shDerefSimple,shEscape,shPosnParm,shCtrlSeq,shSpecial
 syn cluster shDerefList	contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPPS
 syn cluster shDerefVarList	contains=shDerefOp,shDerefVarArray,shDerefOpError
-syn cluster shEchoList	contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
+syn cluster shEchoList	contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shEscape,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
 syn cluster shExprList1	contains=shCharClass,shNumber,shOperator,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq
 syn cluster shExprList2	contains=@shExprList1,@shCaseList,shTest
-syn cluster shFunctionList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
+syn cluster shFunctionList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn cluster shFunctionList	add=shRepeat
  syn cluster shFunctionList	add=shDblBrace,shDblParen
@@ -92,16 +125,16 @@
 syn cluster shHereBeginList	contains=@shCommandSubList
 syn cluster shHereList	contains=shBeginHere,shHerePayload
 syn cluster shHereListDQ	contains=shBeginHere,@shDblQuoteList,shHerePayload
-syn cluster shIdList	contains=shCommandSub,shWrapLineOperator,shSetOption,shDeref,shDerefSimple,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial
-syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet
-syn cluster shSubShList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
-syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shExDoubleQuote,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
-
+syn cluster shIdList	contains=shCommandSub,shWrapLineOperator,shSetOption,shDeref,shDerefSimple,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial,shAtExpr
+syn cluster shIfList	contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo
+syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet,shOption
+syn cluster shSubShList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
+syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shExDoubleQuote,shDoubleQuote,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
 " Echo: {{{1
 " ====
 " This one is needed INSIDE a CommandSub, so that `echo bla` be correct
-syn region shEcho matchgroup=shStatement start="\<echo\>"  skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
-syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
+syn region shEcho matchgroup=shStatement start="\<echo\>"  skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
+syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()`]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment
 syn match  shEchoQuote contained	'\%(\\\\\)*\\["`'()]'
 
 " This must be after the strings, so that ... \" will be correct
@@ -111,29 +144,31 @@
 " =====
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn match shStatement "\<alias\>"
- syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\w\+\)\@=" skip="\\$" end="\>\|`"
- syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\w\+=\)\@=" skip="\\$" end="="
+ syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+\)\@="  skip="\\$" end="\>\|`"
+ syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+=\)\@=" skip="\\$" end="="
 endif
 
 " Error Codes: {{{1
 " ============
-syn match   shDoError "\<done\>"
-syn match   shIfError "\<fi\>"
-syn match   shInError "\<in\>"
-syn match   shCaseError ";;"
-syn match   shEsacError "\<esac\>"
-syn match   shCurlyError "}"
-syn match   shParenError ")"
-syn match   shOK	'\.\(done\|fi\|in\|esac\)'
-if exists("b:is_kornshell")
- syn match     shDTestError "]]"
+if !exists("g:sh_no_error")
+ syn match   shDoError "\<done\>"
+ syn match   shIfError "\<fi\>"
+ syn match   shInError "\<in\>"
+ syn match   shCaseError ";;"
+ syn match   shEsacError "\<esac\>"
+ syn match   shCurlyError "}"
+ syn match   shParenError ")"
+ syn match   shOK	'\.\(done\|fi\|in\|esac\)'
+ if exists("b:is_kornshell")
+  syn match     shDTestError "]]"
+ endif
+ syn match     shTestError "]"
 endif
-syn match     shTestError "]"
 
 " Options: {{{1
 " ====================
-syn match   shOption	"\s\zs[-+][-_a-zA-Z0-9]\+\>"
-syn match   shOption	"\s\zs--[^ \t$`'"|]\+"
+syn match   shOption	"\s\zs[-+][-_a-zA-Z0-9#]\+"
+syn match   shOption	"\s\zs--[^ \t$`'"|);]\+"
 
 " File Redirection Highlighted As Operators: {{{1
 "===========================================
@@ -152,8 +187,8 @@
 
 " Subshells: {{{1
 " ==========
-syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"	contains=@shExprList2 nextgroup=shMoreSpecial
-syn region shSubSh transparent matchgroup=shSubShRegion start="(" end=")"	contains=@shSubShList nextgroup=shMoreSpecial
+syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"		contains=@shExprList2 nextgroup=shMoreSpecial
+syn region shSubSh transparent matchgroup=shSubShRegion start="[^(]\zs(" end=")"	contains=@shSubShList nextgroup=shMoreSpecial
 
 " Tests: {{{1
 "=======
@@ -162,7 +197,7 @@
 syn match  shTestOpr	contained	"<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!<>]"
 syn match  shTestOpr	contained	'=' skipwhite nextgroup=shTestDoubleQuote,shTestSingleQuote,shTestPattern
 syn match  shTestPattern	contained	'\w\+'
-syn match  shTestDoubleQuote	contained	'"[^"]*"'
+syn match  shTestDoubleQuote	contained	'\%(\%(\\\\\)*\\\)\@<!"[^"]*"'
 syn match  shTestSingleQuote	contained	'\\.'
 syn match  shTestSingleQuote	contained	"'[^']*'"
 if exists("b:is_kornshell") || exists("b:is_bash")
@@ -176,14 +211,15 @@
 
 " Loops: do, if, while, until {{{1
 " ======
-if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor
+if s:sh_fold_ifdofor
  syn region shDo	fold transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
- syn region shIf	fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>"   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey
- syn region shFor	fold matchgroup=shLoop start="\<for\_s" end="\<in\_s" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
+ syn region shIf	fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>"   contains=@shIfList
+ syn region shFor	fold matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\_s" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
 else
  syn region shDo	transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
- syn region shIf	transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>"   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey
- syn region shFor	matchgroup=shLoop start="\<for\_s" end="\<in\>" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
+ syn region shIf	transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>"   contains=@shIfList
+ syn region shFor	matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\>" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
+ syn match  shForPP	'\<for\>\ze\_s*(('
 endif
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn cluster shCaseList	add=shRepeat
@@ -202,7 +238,7 @@
 " ====
 syn match   shCaseBar	contained skipwhite "\(^\|[^\\]\)\(\\\\\)*\zs|"		nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
 syn match   shCaseStart	contained skipwhite skipnl "("			nextgroup=shCase,shCaseBar
-if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor
+if s:sh_fold_ifdofor
  syn region  shCase	fold contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)"  end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment
  syn region  shCaseEsac	fold matchgroup=shConditional start="\<case\>" end="\<esac\>"	contains=@shCaseEsacList
 else
@@ -212,19 +248,23 @@
 syn keyword shCaseIn	contained skipwhite skipnl in			nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
 if exists("b:is_bash")
  syn region  shCaseExSingleQuote	matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial,shSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
-else
+elseif !exists("g:sh_no_error")
  syn region  shCaseExSingleQuote	matchgroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
 endif
 syn region  shCaseSingleQuote	matchgroup=shQuote start=+'+ end=+'+		contains=shStringSpecial		skipwhite skipnl nextgroup=shCaseBar	contained
 syn region  shCaseDoubleQuote	matchgroup=shQuote start=+"+ skip=+\\\\\|\\.+ end=+"+	contains=@shDblQuoteList,shStringSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
 syn region  shCaseCommandSub	start=+`+ skip=+\\\\\|\\.+ end=+`+		contains=@shCommandSubList		skipwhite skipnl nextgroup=shCaseBar	contained
-syn region  shCaseRange	matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+]+	contained
-
+if exists("b:is_bash")
+ syn region  shCaseRange	matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+\]+	contained	contains=shCharClass
+ syn match   shCharClass	'\[:\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|or\|xdigit\):\]'			contained
+else
+ syn region  shCaseRange	matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+\]+	contained
+endif
 " Misc: {{{1
 "======
 syn match   shWrapLineOperator "\\$"
-syn region  shCommandSub   start="`" skip="\\\\\|\\." end="`" contains=@shCommandSubList
-syn match   shEscape	contained	'\\.'
+syn region  shCommandSub   start="`" skip="\\\\\|\\." end="`"	contains=@shCommandSubList
+syn match   shEscape	contained	'\%(^\)\@!\%(\\\\\)*\\.'
 
 " $() and $(()): {{{1
 " $(..) is not supported by sh (Bourne shell).  However, apparently
@@ -235,30 +275,35 @@
 if exists("b:is_kornshell") || exists("b:is_bash")
  syn region shCommandSub matchgroup=shCmdSubRegion start="\$("  skip='\\\\\|\\.' end=")"  contains=@shCommandSubList
  syn region shArithmetic matchgroup=shArithRegion  start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList
+ syn region shArithmetic matchgroup=shArithRegion  start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList
  syn match  shSkipInitWS contained	"^\s\+"
-else
+elseif !exists("g:sh_no_error")
  syn region shCommandSub matchgroup=Error start="\$(" end=")" contains=@shCommandSubList
 endif
+syn region shCmdParenRegion matchgroup=shCmdSubRegion start="(" skip='\\\\\|\\.' end=")"	contains=@shCommandSubList
 
 if exists("b:is_bash")
  syn cluster shCommandSubList add=bashSpecialVariables,bashStatement
  syn cluster shCaseList add=bashAdminStatement,bashStatement
- syn keyword bashSpecialVariables contained BASH BASH_ENV BASH_VERSINFO BASH_VERSION CDPATH DIRSTACK EUID FCEDIT FIGNORE GLOBIGNORE GROUPS HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_MESSAGES LINENO MACHTYPE MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELLOPTS SHLVL TIMEFORMAT TIMEOUT UID auto_resume histchars
- syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep install less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch
+ syn keyword bashSpecialVariables contained auto_resume BASH BASH_ALIASES BASH_ALIASES BASH_ARGC BASH_ARGC BASH_ARGV BASH_ARGV BASH_CMDS BASH_CMDS BASH_COMMAND BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_EXECUTION_STRING BASH_LINENO BASH_LINENO BASHOPTS BASHOPTS BASHPID BASHPID BASH_REMATCH BASH_REMATCH BASH_SOURCE BASH_SOURCE BASH_SUBSHELL BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD BASH_XTRACEFD CDPATH COLUMNS COLUMNS COMP_CWORD COMP_CWORD COMP_KEY COMP_KEY COMP_LINE COMP_LINE COMP_POINT COMP_POINT COMPREPLY COMPREPLY COMP_TYPE COMP_TYPE COMP_WORDBREAKS COMP_WORDBREAKS COMP_WORDS COMP_WORDS COPROC COPROC DIRSTACK EMACS EMACS ENV ENV EUID FCEDIT FIGNORE FUNCNAME FUNCNAME FUNCNEST FUNCNEST GLOBIGNORE GROUPS histchars HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_NUMERIC LINENO LINES LINES MACHTYPE MAIL MAILCHECK MAILPATH MAPFILE MAPFILE OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS POSIXLY_CORRECT POSIXLY_CORRECT PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM READLINE_LINE READLINE_LINE READLINE_POINT READLINE_POINT REPLY SECONDS SHELL SHELL SHELLOPTS SHLVL TIMEFORMAT TIMEOUT TMPDIR TMPDIR UID
+ syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch
  syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop
+ syn keyword bashStatement	command compgen
 endif
 
 if exists("b:is_kornshell")
  syn cluster shCommandSubList add=kshSpecialVariables,kshStatement
  syn cluster shCaseList add=kshStatement
  syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV ERRNO FCEDIT FPATH HISTFILE HISTSIZE HOME IFS LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL TMOUT VISUAL
- syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep install killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail touch tput
+ syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail touch tput
+ syn keyword kshStatement command setgroups setsenv
 endif
 
 syn match   shSource	"^\.\s"
 syn match   shSource	"\s\.\s"
 "syn region  shColon	start="^\s*:" end="$" end="\s#"me=e-2 contains=@shColonList
-syn region  shColon	start="^\s*\zs:" end="$" end="\s#"me=e-2
+"syn region  shColon	start="^\s*\zs:" end="$" end="\s#"me=e-2
+syn match   shColon	'^\s*\zs:'
 
 " String And Character Constants: {{{1
 "================================
@@ -270,16 +315,17 @@
 if exists("b:is_bash")
  syn region  shExSingleQuote	matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial,shSpecial
  syn region  shExDoubleQuote	matchgroup=shQuote start=+\$"+ skip=+\\\\\|\\.\|\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,shSpecial
-else
+elseif !exists("g:sh_no_error")
  syn region  shExSingleQuote	matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial
  syn region  shExDoubleQuote	matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+	contains=shStringSpecial
 endif
 syn region  shSingleQuote	matchgroup=shQuote start=+'+ end=+'+		contains=@Spell
-syn region  shDoubleQuote	matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
+syn region  shDoubleQuote	matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
+"syn region  shDoubleQuote	matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
 syn match   shStringSpecial	"[^[:print:] \t]"	contained
 syn match   shStringSpecial	"\%(\\\\\)*\\[\\"'`$()#]"
-syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial
-syn match   shSpecial	"^\%(\\\\\)*\\[\\"'`$()#]"
+syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial,shComment
+syn match   shSpecial	"^\%(\\\\\)*\\[\\"'`$()#]"	nextgroup=shComment
 syn match   shMoreSpecial	"\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial contained
 
 " Comments: {{{1
@@ -288,68 +334,71 @@
 syn keyword	shTodo	contained		COMBAK FIXME TODO XXX
 syn match	shComment		"^\s*\zs#.*$"	contains=@shCommentGroup
 syn match	shComment		"\s\zs#.*$"	contains=@shCommentGroup
+syn match	shComment	contained	"#.*$"	contains=@shCommentGroup
 syn match	shQuickComment	contained	"#.*$"
 
 " Here Documents: {{{1
 " =========================================
 if version < 600
- syn region shHereDoc matchgroup=shRedir start="<<\s*\**END[a-zA-Z_0-9]*\**"  matchgroup=shRedir end="^END[a-zA-Z_0-9]*$" contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\**END[a-zA-Z_0-9]*\**" matchgroup=shRedir end="^\s*END[a-zA-Z_0-9]*$" contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<\s*\**EOF\**"	matchgroup=shRedir	end="^EOF$"	contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\**EOF\**" matchgroup=shRedir	end="^\s*EOF$"	contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<\s*\**\.\**"	matchgroup=shRedir	end="^\.$"	contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\**\.\**"	matchgroup=shRedir	end="^\s*\.$"	contains=@shDblQuoteList
-
-elseif (g:sh_fold_enabled % (s:sh_fold_heredoc * 2))/s:sh_fold_heredoc
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"	contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\"\z(\S*\)\""		matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*'\z(\S*\)'"		matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\z(\S*\)"		matchgroup=shRedir end="^\s*\z1\s*$"	contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\"\z(\S*\)\""		matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*'\z(\S*\)'"		matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*'\z(\S*\)'"		matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\z(\S*\)"		matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*'\z(\S*\)'"		matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir fold start="<<\\\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir01 start="<<\s*\**END[a-zA-Z_0-9]*\**" 		matchgroup=shRedir01 end="^END[a-zA-Z_0-9]*$"	contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir02 start="<<-\s*\**END[a-zA-Z_0-9]*\**"		matchgroup=shRedir02 end="^\s*END[a-zA-Z_0-9]*$"	contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir03 start="<<\s*\**EOF\**"		matchgroup=shRedir03	end="^EOF$"	contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir04 start="<<-\s*\**EOF\**"		matchgroup=shRedir04	end="^\s*EOF$"	contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir05 start="<<\s*\**\.\**"		matchgroup=shRedir05	end="^\.$"	contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir06 start="<<-\s*\**\.\**"		matchgroup=shRedir06	end="^\s*\.$"	contains=@shDblQuoteList
+
+elseif s:sh_fold_heredoc
+ syn region shHereDoc matchgroup=shRedir07 fold start="<<\s*\z([^ \t|]*\)"		matchgroup=shRedir07 end="^\z1\s*$"	contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir08 fold start="<<\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir08 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir09 fold start="<<\s*'\z([^ \t|]*\)'"		matchgroup=shRedir09 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir10 fold start="<<-\s*\z([^ \t|]*\)"		matchgroup=shRedir10 end="^\s*\z1\s*$"	contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir11 fold start="<<-\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir11 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir12 fold start="<<-\s*'\z([^ \t|]*\)'"		matchgroup=shRedir12 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir13 fold start="<<\s*\\\_$\_s*\z([^ \t|]*\)"	matchgroup=shRedir13 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir14 fold start="<<\s*\\\_$\_s*\"\z([^ \t|]*\)\""	matchgroup=shRedir14 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir15 fold start="<<-\s*\\\_$\_s*'\z([^ \t|]*\)'"	matchgroup=shRedir15 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir16 fold start="<<-\s*\\\_$\_s*\z([^ \t|]*\)"	matchgroup=shRedir16 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir17 fold start="<<-\s*\\\_$\_s*\"\z([^ \t|]*\)\""	matchgroup=shRedir17 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir18 fold start="<<\s*\\\_$\_s*'\z([^ \t|]*\)'"	matchgroup=shRedir18 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir19 fold start="<<\\\z([^ \t|]*\)"		matchgroup=shRedir19 end="^\z1\s*$"
 
 else
- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\=\z(\S*\)"	matchgroup=shRedir end="^\z1\s*$"    contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<\s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\z(\S*\)"		matchgroup=shRedir end="^\s*\z1\s*$" contains=@shDblQuoteList
- syn region shHereDoc matchgroup=shRedir start="<<-\s*'\z(\S*\)'"	matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\s*'\z(\S*\)'"	matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\z(\S*\)"	matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\z(\S*\)"	matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*'\z(\S*\)'"	matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*'\z(\S*\)'"	matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
- syn region shHereDoc matchgroup=shRedir start="<<\\\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir20 start="<<\s*\\\=\z([^ \t|]*\)"		matchgroup=shRedir20 end="^\z1\s*$"    contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir21 start="<<\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir21 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir22 start="<<-\s*\z([^ \t|]*\)"		matchgroup=shRedir22 end="^\s*\z1\s*$" contains=@shDblQuoteList
+ syn region shHereDoc matchgroup=shRedir23 start="<<-\s*'\z([^ \t|]*\)'"		matchgroup=shRedir23 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir24 start="<<\s*'\z([^ \t|]*\)'"		matchgroup=shRedir24 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir25 start="<<-\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir25 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir26 start="<<\s*\\\_$\_s*\z([^ \t|]*\)"		matchgroup=shRedir26 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir27 start="<<-\s*\\\_$\_s*\z([^ \t|]*\)"		matchgroup=shRedir27 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir28 start="<<-\s*\\\_$\_s*'\z([^ \t|]*\)'"	matchgroup=shRedir28 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir29 start="<<\s*\\\_$\_s*'\z([^ \t|]*\)'"	matchgroup=shRedir29 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir30 start="<<\s*\\\_$\_s*\"\z([^ \t|]*\)\""	matchgroup=shRedir30 end="^\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir31 start="<<-\s*\\\_$\_s*\"\z([^ \t|]*\)\""	matchgroup=shRedir31 end="^\s*\z1\s*$"
+ syn region shHereDoc matchgroup=shRedir32 start="<<\\\z([^ \t|]*\)"		matchgroup=shRedir32 end="^\z1\s*$"
 endif
 
 " Here Strings: {{{1
 " =============
-if exists("b:is_bash")
- syn match shRedir "<<<"
+" available for: bash; ksh (really should be ksh93 only) but not if its a posix
+if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("g:is_posix"))
+ syn match shRedir "<<<"	skipwhite	nextgroup=shCmdParenRegion
 endif
 
 " Identifiers: {{{1
 "=============
 syn match  shSetOption	"\s\zs[-+][a-zA-Z0-9]\+\>"	contained
 syn match  shVariable	"\<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze="	nextgroup=shSetIdentifier
-syn match  shSetIdentifier	"="		contained	nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote
+syn match  shSetIdentifier	"="		contained	nextgroup=shCmdParenRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote
+syn region shAtExpr	contained	start="@(" end=")" contains=@shIdList
 if exists("b:is_bash")
- syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$"	matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|=" contains=@shIdList
- syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$"			matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$"	matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|="	contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$"			matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+="	contains=@shIdList
 elseif exists("b:is_kornshell")
- syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
- syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$"				matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"	contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$"				matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"	contains=@shIdList
 else
- syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+ syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]"	contains=@shIdList
 endif
 
 " Functions: {{{1
@@ -358,15 +407,15 @@
 endif
 
 if exists("b:is_bash")
- if (g:sh_fold_enabled % (s:sh_fold_functions * 2))/s:sh_fold_functions
-  syn region shFunctionOne fold	matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{" end="}"	contains=@shFunctionList			skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
+ if s:sh_fold_functions
+  syn region shFunctionOne fold	matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{"	end="}"	contains=@shFunctionList			skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
   syn region shFunctionTwo fold	matchgroup=shFunction start="\h[-a-zA-Z_0-9]*\s*\%(()\)\=\_s*{"	end="}"	contains=shFunctionKey,@shFunctionList contained	skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
  else
   syn region shFunctionOne	matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{"	end="}"	contains=@shFunctionList
   syn region shFunctionTwo	matchgroup=shFunction start="\h[-a-zA-Z_0-9]*\s*\%(()\)\=\_s*{"	end="}"	contains=shFunctionKey,@shFunctionList contained
  endif
 else
- if (g:sh_fold_enabled % (s:sh_fold_functions * 2))/s:sh_fold_functions
+ if s:sh_fold_functions
   syn region shFunctionOne fold	matchgroup=shFunction start="^\s*\h\w*\s*()\_s*{" end="}"	contains=@shFunctionList			skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
   syn region shFunctionTwo fold	matchgroup=shFunction start="\h\w*\s*\%(()\)\=\_s*{"	end="}"	contains=shFunctionKey,@shFunctionList contained	skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
  else
@@ -377,9 +426,11 @@
 
 " Parameter Dereferencing: {{{1
 " ========================
-syn match  shDerefSimple	"\$\%(\h\w*\|\d\)"
+syn match  shDerefSimple	"\$\%(\k\+\|\d\)"
 syn region shDeref	matchgroup=PreProc start="\${" end="}"	contains=@shDerefList,shDerefVarArray
-syn match  shDerefWordError	"[^}$[]"	contained
+if !exists("g:sh_no_error")
+ syn match  shDerefWordError	"[^}$[]"	contained
+endif
 syn match  shDerefSimple	"\$[-#*@!?]"
 syn match  shDerefSimple	"\$\$"
 if exists("b:is_bash") || exists("b:is_kornshell")
@@ -391,12 +442,12 @@
 " ====================================
 if exists("b:is_bash")
  syn region shDeref	matchgroup=PreProc start="\${!" end="\*\=}"	contains=@shDerefList,shDerefOp
- syn match  shDerefVar	contained	"{\@<=!\w\+"		nextgroup=@shDerefVarList
+ syn match  shDerefVar	contained	"{\@<=!\k\+"		nextgroup=@shDerefVarList
 endif
 
 syn match  shDerefSpecial	contained	"{\@<=[-*@?0]"		nextgroup=shDerefOp,shDerefOpError
 syn match  shDerefSpecial	contained	"\({[#!]\)\@<=[[:alnum:]*@_]\+"	nextgroup=@shDerefVarList,shDerefOp
-syn match  shDerefVar	contained	"{\@<=\w\+"		nextgroup=@shDerefVarList
+syn match  shDerefVar	contained	"{\@<=\k\+"		nextgroup=@shDerefVarList
 
 " sh ksh bash : ${var[... ]...}  array reference: {{{1
 syn region  shDerefVarArray   contained	matchgroup=shDeref start="\[" end="]"	contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError
@@ -410,8 +461,14 @@
 "    ksh bash : ${parameter##pattern} remove large left  pattern
 "    ksh bash : ${parameter%pattern}  remove small right pattern
 "    ksh bash : ${parameter%%pattern} remove large right pattern
+"        bash : ${parameter^pattern}  Case modification
+"        bash : ${parameter^^pattern} Case modification
+"        bash : ${parameter,pattern}  Case modification
+"        bash : ${parameter,,pattern} Case modification
 syn cluster shDerefPatternList	contains=shDerefPattern,shDerefString
-syn match shDerefOpError	contained	":[[:punct:]]"
+if !exists("g:sh_no_error")
+ syn match shDerefOpError	contained	":[[:punct:]]"
+endif
 syn match  shDerefOp	contained	":\=[-=?]"	nextgroup=@shDerefPatternList
 syn match  shDerefOp	contained	":\=+"	nextgroup=@shDerefPatternList
 if exists("b:is_bash") || exists("b:is_kornshell")
@@ -421,6 +478,9 @@
  syn region shDerefPattern	contained	start="{" end="}"	contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern
  syn match  shDerefEscape	contained	'\%(\\\\\)*\\.'
 endif
+if exists("b:is_bash")
+ syn match  shDerefOp	contained	"[,^]\{1,2}"	nextgroup=@shDerefPatternList
+endif
 syn region shDerefString	contained	matchgroup=shDerefDelim start=+\%(\\\)\@<!'+ end=+'+		contains=shStringSpecial
 syn region shDerefString	contained	matchgroup=shDerefDelim start=+\%(\\\)\@<!"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial
 syn match  shDerefString	contained	"\\["']"	nextgroup=shDerefPattern
@@ -434,18 +494,21 @@
  " bash : ${parameter//pattern/string}
  " bash : ${parameter//pattern}
  syn match  shDerefPPS	contained	'/\{1,2}'	nextgroup=shDerefPPSleft
- syn region shDerefPPSleft	contained	start='.'	skip=@\%(\\\)\/@ matchgroup=shDerefOp end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList
- syn region shDerefPPSright	contained	start='.'	end='\ze}'	contains=@shCommandSubList
+ syn region shDerefPPSleft	contained	start='.'	skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp	end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList
+ syn region shDerefPPSright	contained	start='.'	skip=@\%(\\\\\)\+@		end='\ze}'	contains=@shCommandSubList
 endif
 
 " Arithmetic Parenthesized Expressions: {{{1
-syn region shParen matchgroup=shArithRegion start='(\ze[^(]' end=')' contains=@shArithParenList
+"syn region shParen matchgroup=shArithRegion start='[^$]\zs(\%(\ze[^(]\|$\)' end=')' contains=@shArithParenList
+syn region shParen matchgroup=shArithRegion start='\$\@!(\%(\ze[^(]\|$\)' end=')' contains=@shArithParenList
 
 " Useful sh Keywords: {{{1
 " ===================
 syn keyword shStatement break cd chdir continue eval exec exit kill newgrp pwd read readonly return shift test trap ulimit umask wait
 syn keyword shConditional contained elif else then
-syn keyword shCondError elif else then
+if !exists("g:sh_no_error")
+ syn keyword shCondError elif else then
+endif
 
 " Useful ksh Keywords: {{{1
 " ====================
@@ -489,6 +552,7 @@
 " Default Highlighting: {{{1
 " =====================
 hi def link shArithRegion	shShellVariables
+hi def link shAtExpr	shSetList
 hi def link shBeginHere	shRedir
 hi def link shCaseBar	shConditional
 hi def link shCaseCommandSub	shCommandSub
@@ -512,6 +576,7 @@
 hi def link shEcho	shString
 hi def link shEchoDelim	shOperator
 hi def link shEchoQuote	shString
+hi def link shForPP	shLoop
 hi def link shEmbeddedEcho	shString
 hi def link shEscape	shCommandSub
 hi def link shExDoubleQuote	shDoubleQuote
@@ -547,6 +612,7 @@
   hi def link bashStatement		shStatement
   hi def link shFunctionParen		Delimiter
   hi def link shFunctionDelim		Delimiter
+  hi def link shCharClass		shSpecial
 endif
 if exists("b:is_kornshell")
   hi def link kshSpecialVariables	shShellVariables
@@ -554,20 +620,22 @@
   hi def link shFunctionParen		Delimiter
 endif
 
-hi def link shCaseError		Error
-hi def link shCondError		Error
-hi def link shCurlyError		Error
-hi def link shDerefError		Error
-hi def link shDerefOpError		Error
-hi def link shDerefWordError		Error
-hi def link shDoError		Error
-hi def link shEsacError		Error
-hi def link shIfError		Error
-hi def link shInError		Error
-hi def link shParenError		Error
-hi def link shTestError		Error
-if exists("b:is_kornshell")
-  hi def link shDTestError		Error
+if !exists("g:sh_no_error")
+ hi def link shCaseError		Error
+ hi def link shCondError		Error
+ hi def link shCurlyError		Error
+ hi def link shDerefError		Error
+ hi def link shDerefOpError		Error
+ hi def link shDerefWordError		Error
+ hi def link shDoError		Error
+ hi def link shEsacError		Error
+ hi def link shIfError		Error
+ hi def link shInError		Error
+ hi def link shParenError		Error
+ hi def link shTestError		Error
+ if exists("b:is_kornshell")
+   hi def link shDTestError		Error
+ endif
 endif
 
 hi def link shArithmetic		Special
@@ -591,6 +659,38 @@
 hi def link shString		String
 hi def link shTodo		Todo
 hi def link shAlias		Identifier
+hi def link shRedir01		shRedir
+hi def link shRedir02		shRedir
+hi def link shRedir03		shRedir
+hi def link shRedir04		shRedir
+hi def link shRedir05		shRedir
+hi def link shRedir06		shRedir
+hi def link shRedir07		shRedir
+hi def link shRedir08		shRedir
+hi def link shRedir09		shRedir
+hi def link shRedir10		shRedir
+hi def link shRedir11		shRedir
+hi def link shRedir12		shRedir
+hi def link shRedir13		shRedir
+hi def link shRedir14		shRedir
+hi def link shRedir15		shRedir
+hi def link shRedir16		shRedir
+hi def link shRedir17		shRedir
+hi def link shRedir18		shRedir
+hi def link shRedir19		shRedir
+hi def link shRedir20		shRedir
+hi def link shRedir21		shRedir
+hi def link shRedir22		shRedir
+hi def link shRedir23		shRedir
+hi def link shRedir24		shRedir
+hi def link shRedir25		shRedir
+hi def link shRedir26		shRedir
+hi def link shRedir27		shRedir
+hi def link shRedir28		shRedir
+hi def link shRedir29		shRedir
+hi def link shRedir30		shRedir
+hi def link shRedir31		shRedir
+hi def link shRedir32		shRedir
 
 " Set Current Syntax: {{{1
 " ===================
diff -Naur vim73.orig/runtime/syntax/sisu.vim vim73/runtime/syntax/sisu.vim
--- vim73.orig/runtime/syntax/sisu.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/sisu.vim	2013-08-04 19:09:09.690613292 +0000
@@ -1,6 +1,8 @@
-"SiSU Vim syntax file
-"SiSU Maintainer: Ralph Amissah <ralph@amissah.com>
-"SiSU Markup:     SiSU (sisu-2.0.1, 2010-03-17)
+" SiSU Vim syntax file
+" SiSU Maintainer: Ralph Amissah <ralph@amissah.com>
+" SiSU Markup:     SiSU (sisu-4.0.9)
+" Last Change:     2013-02-22
+" URL (sisu-4.1.0): <http://git.sisudoc.org/?p=code/sisu.git;a=blob;f=data/sisu/conf/editor-syntax-etc/vim/syntax/sisu.vim;hb=HEAD>
 "(originally looked at Ruby Vim by Mirko Nasato)
 
 if version < 600
@@ -9,15 +11,18 @@
   finish
 else
 endif
+let s:cpo_save = &cpo
+set cpo&vim
 
-" Errors:
+"% "Errors:
 syn match sisu_error contains=sisu_link,sisu_error_wspace "<![^ei]\S\+!>"
 
-" Markers Identifiers:
+"% "Markers Identifiers:
 if !exists("sisu_no_identifiers")
   syn match   sisu_mark_endnote                                           "\~^"
-  syn match   sisu_break               contains=@NoSpell                  "<br>\|<br />"
-  syn match   sisu_control             contains=@NoSpell                  "<:p[bn]>"
+  syn match   sisu_break               contains=@NoSpell                  " \\\\\( \|$\)\|<br>\|<br />"
+  syn match   sisu_control             contains=@NoSpell                  "^\(-\\\\-\|=\\\\=\|-\.\.-\|<:p[bn]>\)\s*$"
+  syn match   sisu_control             contains=@NoSpell                  "^<:\(bo\|---\)>\s*$"
   syn match   sisu_marktail                                               "[~-]#"
   syn match   sisu_control                                                "\""
   syn match   sisu_underline                                              "\(^\| \)_[a-zA-Z0-9]\+_\([ .,]\|$\)"
@@ -28,14 +33,19 @@
   syn match   sisu_require             contains=@NoSpell                  "^<<\s*[a-zA-Z0-9^._-]\+\.ss[it]$"
   syn match   sisu_require             contains=@NoSpell                  "^<<{[a-zA-Z0-9^._-]\+\.ss[it]}$"
   syn match   sisu_structure                                              "^:A\~$"
-  syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|note\):\s" "group=sisu_header_content
-  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|translator\|illustrator\|photographer\|audio\|digitized_by\|prepared_by\):\s"
-  syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|audio\|digitization\|license\|all\):\s"                                         "access_rights license
-  syn match   sisu_sub_header_classify                                    "^\s\+:\(type\|subject\|topic_register\|keywords\|coverage\|relation\|format\|identifier\|isbn\|dewey\|loc\|pg\):\s"
-  syn match   sisu_sub_header_dates                                       "^\s\+:\(published\|available\|created\|issued\|valid\|modified\|added_to_site\|translated\|original_publication\):\s"
-  syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|institution\|nationality\|source\):\s"
-  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|italics\|bold\|skin\|stamp\|promo\|ad\|manpage\):\s"
-  syn match   sisu_sub_header_notes                                       "^\s\+:\(comment\|abstract\|description\|history\|prefix\|prefix_[ab]\):\s"
+
+"% "Document Sub Headers:
+  syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|lang_char\|note\):\s" "group=sisu_header_content
+  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|editor\|contributor\|illustrator\|photographer\|translator\|digitized_by\|prepared_by\|audio\|video\):\s"                               " &hon &institution
+  syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|preparation\|digitization\|audio\|video\|license\|all\):\s"                   " access_rights license
+  syn match   sisu_sub_header_classify                                    "^\s\+:\(topic_register\|keywords\|subject\|dewey\|loc\):\s"
+  syn match   sisu_sub_header_identifier                                  "^\s\+:\(oclc\|isbn\):\s"
+  syn match   sisu_sub_header_date                                        "^\s\+:\(added_to_site\|available\|created\|issued\|modified\|published\|valid\|translated\|original_publication\):\s"
+  syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|lang_char\|institution\|nationality\|source\):\s"
+  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|language\|italics\|bold\|emphasis\|substitute\|omit\|plaintext_wrap\|texpdf_font_mono\|texpdf_font\|stamp\|promo\|ad\|manpage\|home_button_text\|home_button_image\|cover_image\|footer\):\s"
+  syn match   sisu_sub_header_notes                                       "^\s\+:\(description\|abstract\|comment\|coverage\|relation\|source\|history\|type\|format\|prefix\|prefix_[ab]\|suffix\):\s"
+
+"% "semantic markers: (ignore)
   syn match   sisu_sem_marker                                             ";{\|};[a-z._]*[a-z]"
   syn match   sisu_sem_marker_block                                       "\([a-z][a-z._]*\|\):{\|}:[a-z._]*[a-z]"
   syn match   sisu_sem_ex_marker                                          ";\[\|\];[a-z._]*[a-z]"
@@ -46,80 +56,128 @@
   syn match   sisu_sem_ex_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker ";\[[^}].\{-}\];[a-z]\+"
 endif
 
-"URLs Numbers And ASCII Codes:
+"% "URLs Numbers And ASCII Codes:
 syn match   sisu_number                              "\<\(0x\x\+\|0b[01]\+\|0\o\+\|0\.\d\+\|0\|[1-9][\.0-9_]*\)\>"
 syn match   sisu_number                              "?\(\\M-\\C-\|\\c\|\\C-\|\\M-\)\=\(\\\o\{3}\|\\x\x\{2}\|\\\=\w\)"
 
-"Tuned Error: (is error if not already matched)
+"% "Tuned Error: (is error if not already matched)
 syn match sisu_error             contains=sisu_error "[\~/\*!_]{\|}[\~/\*!_]"
 syn match sisu_error             contains=sisu_error "<a href\|</a>]"
 
-"Simple Paired Enclosed Markup:
+"% "Simple Paired Enclosed Markup:
 "url/link
 syn region sisu_link contains=sisu_error,sisu_error_wspace matchgroup=sisu_action start="^<<\s*|[a-zA-Z0-9^._-]\+|@|[a-zA-Z0-9^._-]\+|"rs=s+2 end="$"
-"header
+
+"% "Document Header:
+" title
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_title matchgroup=sisu_header start="^[@]title:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" creator
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_creator matchgroup=sisu_header start="^[@]creator:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" dates
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_date matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" publisher
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" rights
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_rights matchgroup=sisu_header start="^[@]rights:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" classify document
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_classify matchgroup=sisu_header start="^[@]classify:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_dates matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" identifier document
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_identifier matchgroup=sisu_header start="^[@]identifier:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" original language (depreciated)
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_original matchgroup=sisu_header start="^[@]original:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_source matchgroup=sisu_header start="^[@]source:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" notes
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+" links of interest
 syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_linked,sisu_sub_header_links matchgroup=sisu_header start="^[@]links:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
-"headings
-syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$"
-"grouped text
-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table"
-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$"
-syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(alt\|group\|poem\){" end="^}\(alt\|group\|poem\)"
+" make, processing instructions
+syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+
+"% "Headings:
+syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$"
+
+"% "Block Group Text:
+" table
+syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table"
+" table
+syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$"
+" block, group, poem, alt
+syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(block\|group\|poem\|alt\){" end="^}\(block\|group\|poem\|alt\)"
+" code
 syn region sisu_content_alt contains=sisu_error matchgroup=sisu_contain start="^code{" end="^}code"
-"endnotes
-syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n"
-syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n"
-syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$"
-"links and images
-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|\.\./\)\S\+" oneline
-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline
-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline
-"some line operations
-syn region sisu_control contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_control start="\(\(^\| \)!_ \|<:b>\)" end="$"
-syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$"
+
+"% "Endnotes:
+" regular endnote or asterisk or plus sign endnote
+syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n"
+" numbered asterisk or plus sign endnote
+syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n"
+" endnote content marker (for binary content marking)
+syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$"
+
+"% "Links And Images:
+" image with url link (and possibly footnote of url)
+syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|:\|\.\.\/\|#\)\S\+" oneline
+" sisu outputs, short notation
+syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline
+" image
+syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline
+
+"% "Some Line Operations:
+" bold line
+syn region sisu_bold contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^!_ " end=" \\\\\|$"
+" indent and bullet paragraph
+syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$"
+" indent and bullet (bold start) paragraph
+syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\)!_\? " end=" \\\\\|$"
+" hanging indent paragraph [proposed]
+syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9] " end="$"
+" hanging indent (bold start/ definition) paragraph [proposed]
+syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9]!_\? " end=" \\\\\|$"
+" list numbering
 syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^\(#[ 1]\|_# \)" end="$"
-"font face curly brackets
+
+"% "Font Face Curly Brackets:
 "syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_sem start="\S\+:{" end="}:[^<>,.!?:; ]\+" oneline
+" book index:
 syn region sisu_index matchgroup=sisu_index_block start="^={" end="}"
-syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*"
-syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!"
-syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_"
-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/"
-syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+"
-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^"
-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="},"
+" emphasis:
+syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*"
+" bold:
+syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!"
+" underscore:
+syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_"
+" italics:
+syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/"
+" added:
+syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+"
+" superscript:
+syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^"
+" subscript:
+syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="},"
+" monospace:
+syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="#{" end="}#"
+" strikethrough:
 syn region sisu_strikeout contains=sisu_error matchgroup=sisu_fontface start="-{" end="}-"
-syn region sisu_html contains=sisu_error contains=sisu_strikeout matchgroup=sisu_contain start="<a href=\".\{-}\">" end="</a>" oneline
-"single words bold italicise etc. "workon
-syn region sisu_control contains=sisu_error matchgroup=sisu_control start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline
+
+"% "Single Words Bold Italicise Etc: (depreciated)
+syn region sisu_bold contains=sisu_error matchgroup=sisu_bold start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline
 syn region sisu_identifier contains=sisu_error matchgroup=sisu_content_alt start="\([ ]\|^\)/[^{ \|\n\\]"hs=e-1 end="/\[ \.\]" skip="[a-zA-Z0-9']" oneline
 "misc
 syn region sisu_identifier contains=sisu_error matchgroup=sisu_fontface start="\^[^ {\|\n\\]"rs=s+1 end="\^[ ,.;:'})\\\n]" skip="[a-zA-Z0-9']" oneline
 
-"Expensive Mode:
+"% "Expensive Mode:
 if !exists("sisu_no_expensive")
 else " not Expensive
   syn region  sisu_content_alt  matchgroup=sisu_control start="^\s*def\s" matchgroup=NONE end="[?!]\|\>" skip="\.\|\(::\)" oneline
 endif " Expensive?
 
-"Headers And Headings: (Document Instructions)
+"% "Headers And Headings: (Document Instructions)
 syn match sisu_control contains=sisu_error,sisu_error_wspace "4\~! \S\+"
 syn region  sisu_markpara contains=sisu_error,sisu_error_wspace start="^=begin" end="^=end.*$"
 
-"Errors:
+"% "Errors:
 syn match sisu_error_wspace contains=sisu_error_wspace "^\s\+[^:]"
 syn match sisu_error_wspace contains=sisu_error_wspace "\s\s\+"
-syn match sisu_error_wspace contains=sisu_error_wspace " \s*$"
+syn match sisu_error_wspace contains=sisu_error_wspace "\s\+$"
 syn match sisu_error contains=sisu_error_wspace "\t\+"
 syn match sisu_error contains=sisu_error,sisu_error_wspace "\([^ (][_\\]\||[^ (}]\)https\?:\S\+"
 syn match sisu_error contains=sisu_error "_\?https\?:\S\+[}><]"
@@ -140,37 +198,38 @@
 syn match sisu_error contains=sisu_error,sisu_match,sisu_strikeout,sisu_contain,sisu_content_alt,sisu_mark,sisu_break,sisu_number "<[a-zA-Z\/]\+>"
 syn match sisu_error  "/\?<\([biu]\)>[^(</\1>)]\{-}\n$"
 
-"Error Exceptions:
+"% "Error Exceptions:
 syn match sisu_control "\n$" "contains=ALL
-syn match sisu_control " //"
+"syn match sisu_control " //"
 syn match sisu_error   "%{"
 syn match sisu_error   "<br>_\?https\?:\S\+\|_\?https\?:\S\+<br>"
 syn match sisu_error   "[><]_\?https\?:\S\+\|_\?https\?:\S\+[><]"
 syn match sisu_comment "^%\{1,2\}.\+"
 
-"Definitions Default Highlighting:
+"% "Definitions Default Highlighting:
 hi def link sisu_normal                Normal
+hi def link sisu_bold                  Statement
 hi def link sisu_header                PreProc
 hi def link sisu_header_content        Normal
 hi def link sisu_sub_header_title      Statement
 hi def link sisu_sub_header_creator    Statement
+hi def link sisu_sub_header_date       Statement
+hi def link sisu_sub_header_publisher  Statement
 hi def link sisu_sub_header_rights     Statement
 hi def link sisu_sub_header_classify   Statement
-hi def link sisu_sub_header_dates      Statement
-hi def link sisu_sub_header_make       Statement
+hi def link sisu_sub_header_identifier Statement
+hi def link sisu_sub_header_original   Statement
 hi def link sisu_sub_header_links      Statement
-hi def link sisu_sub_header_publisher  Statement
 hi def link sisu_sub_header_notes      Statement
-hi def link sisu_sub_header_original   Statement
-hi def link sisu_sub_header_source     Statement
+hi def link sisu_sub_header_make       Statement
 hi def link sisu_heading               Title
 hi def link sisu_structure             Operator
 hi def link sisu_contain               Include
-hi def link sisu_mark_endnote          Include
+hi def link sisu_mark_endnote          Delimiter
 hi def link sisu_require               NonText
 hi def link sisu_link                  NonText
 hi def link sisu_linked                String
-hi def link sisu_fontface              Include
+hi def link sisu_fontface              Delimiter
 hi def link sisu_strikeout             DiffDelete
 hi def link sisu_content_alt           Special
 hi def link sisu_sem_content           SpecialKey
@@ -186,7 +245,7 @@
 hi def link sisu_index                 SpecialKey
 hi def link sisu_index_block           Visual
 hi def link sisu_content_endnote       Special
-hi def link sisu_control               Define
+hi def link sisu_control               Delimiter
 hi def link sisu_ocn                   Include
 hi def link sisu_number                Number
 hi def link sisu_identifier            Function
@@ -202,3 +261,5 @@
 hi def link sisu_error_wspace          Error
 hi def link sisu_error                 Error
 let b:current_syntax = "sisu"
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/slice.vim vim73/runtime/syntax/slice.vim
--- vim73.orig/runtime/syntax/slice.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/slice.vim	2013-08-04 19:09:09.693946616 +0000
@@ -20,6 +20,7 @@
 syn keyword sliceBoolean    false true
 
 " Include directives
+syn region  sliceIncluded    display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
 syn match   sliceIncluded   display contained "<[^>]*>"
 syn match   sliceInclude    display "^\s*#\s*include\>\s*["<]" contains=sliceIncluded
 
diff -Naur vim73.orig/runtime/syntax/smil.vim vim73/runtime/syntax/smil.vim
--- vim73.orig/runtime/syntax/smil.vim	2010-05-15 11:03:54.000000000 +0000
+++ vim73/runtime/syntax/smil.vim	2013-08-04 19:09:09.703946586 +0000
@@ -2,7 +2,7 @@
 " Language:	SMIL (Synchronized Multimedia Integration Language)
 " Maintainer:	Herve Foucher <Herve.Foucher@helio.org>
 " URL:		http://www.helio.org/vim/syntax/smil.vim
-" Last Change:	2003 May 11
+" Last Change:	2012 Feb 03 by Thilo Six
 
 " To learn more about SMIL, please refer to http://www.w3.org/AudioVideo/
 " and to http://www.helio.org/products/smil/tutorial/
@@ -15,6 +15,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " SMIL is case sensitive
 syn case match
 
@@ -151,4 +154,6 @@
   unlet main_syntax
 endif
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/snnspat.vim vim73/runtime/syntax/snnspat.vim
--- vim73.orig/runtime/syntax/snnspat.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/snnspat.vim	2013-08-04 19:09:09.710613232 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	SNNS pattern file
 " Maintainer:	Davide Alberani <alberanid@bigfoot.com>
-" Last Change:	28 Apr 2001
+" Last Change:	2012 Feb 03 by Thilo Six
 " Version:	0.2
 " URL:		http://digilander.iol.it/alberanid/vim/syntax/snnspat.vim
 "
@@ -14,6 +14,8 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
 
 " anything that isn't part of the header, a comment or a number
 " is wrong
@@ -65,4 +67,6 @@
 
 let b:current_syntax = "snnspat"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8 sw=2
diff -Naur vim73.orig/runtime/syntax/spice.vim vim73/runtime/syntax/spice.vim
--- vim73.orig/runtime/syntax/spice.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/spice.vim	2013-08-04 19:09:09.713946555 +0000
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:	Spice circuit simulator input netlist
 " Maintainer:	Noam Halevy <Noam.Halevy.motorola.com>
-" Last Change:	12/08/99
+" Last Change:	2012 Jun 01
+" 		(Dominique Pelle added @Spell)
 "
 " This is based on sh.vim by Lennart Schultz
 " but greatly simplified
@@ -19,8 +20,8 @@
 
 syn keyword	spiceTodo	contained TODO
 
-syn match spiceComment  "^ \=\*.*$"
-syn match spiceComment  "\$.*$"
+syn match spiceComment  "^ \=\*.*$" contains=@Spell
+syn match spiceComment  "\$.*$" contains=@Spell
 
 " Numbers, all with engineering suffixes and optional units
 "==========================================================
diff -Naur vim73.orig/runtime/syntax/spup.vim vim73/runtime/syntax/spup.vim
--- vim73.orig/runtime/syntax/spup.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/spup.vim	2013-08-04 19:09:09.717279879 +0000
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:     Speedup, plant simulator from AspenTech
 " Maintainer:   Stefan.Schwarzer <s.schwarzer@ndh.net>
-" URL:			http://www.ndh.net/home/sschwarzer/download/spup.vim
-" Last Change:  2003 May 11
+" URL:		http://www.ndh.net/home/sschwarzer/download/spup.vim
+" Last Change:  2012 Feb 03 by Thilo Six
 " Filename:     spup.vim
 
 " Bugs
@@ -25,6 +25,9 @@
     finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " don't hightlight several keywords like subsections
 "let strict_subsections = 1
 
@@ -43,7 +46,7 @@
 
 " Speedup SECTION regions
 syn case ignore
-syn region spupCdi		  matchgroup=spupSection start="^CDI"		 end="^\*\*\*\*" contains=spupCdiSubs,@spupOrdinary
+syn region spupCdi	  matchgroup=spupSection start="^CDI"	     end="^\*\*\*\*" contains=spupCdiSubs,@spupOrdinary
 syn region spupConditions matchgroup=spupSection start="^CONDITIONS" end="^\*\*\*\*" contains=spupConditionsSubs,@spupOrdinary,spupConditional,spupOperator,spupCode
 syn region spupDeclare    matchgroup=spupSection start="^DECLARE"    end="^\*\*\*\*" contains=spupDeclareSubs,@spupOrdinary,spupTypes,spupCode
 syn region spupEstimation matchgroup=spupSection start="^ESTIMATION" end="^\*\*\*\*" contains=spupEstimationSubs,@spupOrdinary
@@ -63,7 +66,7 @@
 syn region spupUnit       matchgroup=spupSection start="^UNIT"       end="^\*\*\*\*" contains=spupUnitSubs,@spupOrdinary
 
 " Subsections
-syn keyword spupCdiSubs		   INPUT FREE OUTPUT LINEARTIME MINNONZERO CALCULATE FILES SCALING contained
+syn keyword spupCdiSubs	       INPUT FREE OUTPUT LINEARTIME MINNONZERO CALCULATE FILES SCALING contained
 syn keyword spupDeclareSubs    TYPE STREAM contained
 syn keyword spupEstimationSubs ESTIMATE SSEXP DYNEXP RESULT contained
 syn keyword spupExternalSubs   TRANSMIT RECEIVE contained
@@ -183,7 +186,7 @@
 syn sync maxlines=500
 
 syn sync match spupSyncOperation  grouphere spupOperation  "^OPERATION"
-syn sync match spupSyncCdi		  grouphere spupCdi		   "^CDI"
+syn sync match spupSyncCdi	  grouphere spupCdi	   "^CDI"
 syn sync match spupSyncConditions grouphere spupConditions "^CONDITIONS"
 syn sync match spupSyncDeclare    grouphere spupDeclare    "^DECLARE"
 syn sync match spupSyncEstimation grouphere spupEstimation "^ESTIMATION"
@@ -207,71 +210,73 @@
 " For version 5.8 and later: only when an item doesn't have highlighting yet
 if version >= 508 || !exists("did_spup_syn_inits")
     if version < 508
-		let did_spup_syn_inits = 1
-		command -nargs=+ HiLink hi link <args>
-	else
-		command -nargs=+ HiLink hi def link <args>
+	let did_spup_syn_inits = 1
+	command -nargs=+ HiLink hi link <args>
+    else
+	command -nargs=+ HiLink hi def link <args>
     endif
 
-	HiLink spupCdi			spupSection
-	HiLink spupConditions	spupSection
-	HiLink spupDeclare		spupSection
-	HiLink spupEstimation	spupSection
-	HiLink spupExternal		spupSection
-	HiLink spupFlowsheet	spupSection
-	HiLink spupFunction		spupSection
-	HiLink spupGlobal		spupSection
-	HiLink spupHomotopy		spupSection
-	HiLink spupMacro		spupSection
-	HiLink spupModel		spupSection
-	HiLink spupOperation	spupSection
-	HiLink spupOptions		spupSection
-	HiLink spupProcedure	spupSection
-	HiLink spupProfiles		spupSection
-	HiLink spupReport		spupSection
-	HiLink spupTitle		spupConstant  " this is correct, truly ;)
-	HiLink spupUnit			spupSection
-
-	HiLink spupCdiSubs		  spupSubs
-	HiLink spupConditionsSubs spupSubs
-	HiLink spupDeclareSubs	  spupSubs
-	HiLink spupEstimationSubs spupSubs
-	HiLink spupExternalSubs   spupSubs
-	HiLink spupFlowsheetSubs  spupSubs
-	HiLink spupFunctionSubs   spupSubs
-	HiLink spupHomotopySubs   spupSubs
-	HiLink spupMacroSubs	  spupSubs
-	HiLink spupModelSubs	  spupSubs
-	HiLink spupOperationSubs  spupSubs
-	HiLink spupOptionsSubs	  spupSubs
-	HiLink spupProcedureSubs  spupSubs
-	HiLink spupReportSubs	  spupSubs
-	HiLink spupUnitSubs		  spupSubs
-
-	HiLink spupCode			   Normal
-	HiLink spupComment		   Comment
-	HiLink spupComment2		   spupComment
-	HiLink spupConditional	   Statement
-	HiLink spupConstant		   Constant
-	HiLink spupError		   Error
-	HiLink spupHelp			   Normal
-	HiLink spupIdentifier	   Identifier
-	HiLink spupNumber		   Constant
-	HiLink spupOperator		   Special
-	HiLink spupOpenBrace	   spupError
-	HiLink spupSection		   Statement
-	HiLink spupSpecial		   spupTextprocGeneric
-	HiLink spupStreams		   Type
-	HiLink spupString		   Constant
-	HiLink spupSubs			   Statement
-	HiLink spupSymbol		   Special
-	HiLink spupTextprocError   Normal
-	HiLink spupTextprocGeneric PreProc
-	HiLink spupTypes		   Type
+    HiLink spupCdi	    spupSection
+    HiLink spupConditions   spupSection
+    HiLink spupDeclare	    spupSection
+    HiLink spupEstimation   spupSection
+    HiLink spupExternal	    spupSection
+    HiLink spupFlowsheet    spupSection
+    HiLink spupFunction	    spupSection
+    HiLink spupGlobal	    spupSection
+    HiLink spupHomotopy	    spupSection
+    HiLink spupMacro	    spupSection
+    HiLink spupModel	    spupSection
+    HiLink spupOperation    spupSection
+    HiLink spupOptions	    spupSection
+    HiLink spupProcedure    spupSection
+    HiLink spupProfiles	    spupSection
+    HiLink spupReport	    spupSection
+    HiLink spupTitle	    spupConstant  " this is correct, truly ;)
+    HiLink spupUnit	    spupSection
+
+    HiLink spupCdiSubs	      spupSubs
+    HiLink spupConditionsSubs spupSubs
+    HiLink spupDeclareSubs    spupSubs
+    HiLink spupEstimationSubs spupSubs
+    HiLink spupExternalSubs   spupSubs
+    HiLink spupFlowsheetSubs  spupSubs
+    HiLink spupFunctionSubs   spupSubs
+    HiLink spupHomotopySubs   spupSubs
+    HiLink spupMacroSubs      spupSubs
+    HiLink spupModelSubs      spupSubs
+    HiLink spupOperationSubs  spupSubs
+    HiLink spupOptionsSubs    spupSubs
+    HiLink spupProcedureSubs  spupSubs
+    HiLink spupReportSubs     spupSubs
+    HiLink spupUnitSubs	      spupSubs
+
+    HiLink spupCode	       Normal
+    HiLink spupComment	       Comment
+    HiLink spupComment2	       spupComment
+    HiLink spupConditional     Statement
+    HiLink spupConstant	       Constant
+    HiLink spupError	       Error
+    HiLink spupHelp	       Normal
+    HiLink spupIdentifier      Identifier
+    HiLink spupNumber	       Constant
+    HiLink spupOperator	       Special
+    HiLink spupOpenBrace       spupError
+    HiLink spupSection	       Statement
+    HiLink spupSpecial	       spupTextprocGeneric
+    HiLink spupStreams	       Type
+    HiLink spupString	       Constant
+    HiLink spupSubs	       Statement
+    HiLink spupSymbol	       Special
+    HiLink spupTextprocError   Normal
+    HiLink spupTextprocGeneric PreProc
+    HiLink spupTypes	       Type
 
     delcommand HiLink
 endif
 
 let b:current_syntax = "spup"
 
-" vim:ts=4
+let &cpo = s:cpo_save
+unlet s:cpo_save
+" vim:ts=8
diff -Naur vim73.orig/runtime/syntax/sqlanywhere.vim vim73/runtime/syntax/sqlanywhere.vim
--- vim73.orig/runtime/syntax/sqlanywhere.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/sqlanywhere.vim	2013-08-04 19:09:09.720613202 +0000
@@ -1,11 +1,12 @@
-
 " Vim syntax file
 " Language:    SQL, Adaptive Server Anywhere
-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
-" Last Change: 2009 Mar 15
-" Version:     11.0.1
-
-" Description: Updated to Adaptive Server Anywhere 11.0.1
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2013 May 13
+" Version:     16.0.0
+
+" Description: Updated to Adaptive Server Anywhere 16.0.0
+"              Updated to Adaptive Server Anywhere 12.0.1 (including spatial data)
+"              Updated to Adaptive Server Anywhere 11.0.1
 "              Updated to Adaptive Server Anywhere 10.0.1
 "              Updated to Adaptive Server Anywhere  9.0.2
 "              Updated to Adaptive Server Anywhere  9.0.1
@@ -26,33 +27,34 @@
 syn keyword sqlSpecial  false null true
 
 " common functions
-syn keyword sqlFunction	 count sum avg min max debug_eng isnull
-syn keyword sqlFunction	 greater lesser argn string ymd todate
-syn keyword sqlFunction	 totimestamp date today now utc_now
-syn keyword sqlFunction	 number identity years months weeks days
-syn keyword sqlFunction	 hours minutes seconds second minute hour
-syn keyword sqlFunction	 day month year dow date_format substr
-syn keyword sqlFunction	 substring byte_substr length byte_length
-syn keyword sqlFunction	 datalength ifnull evaluate list
-syn keyword sqlFunction	 soundex similar difference like_start
-syn keyword sqlFunction	 like_end regexp_compile
-syn keyword sqlFunction	 regexp_compile_patindex remainder abs
-syn keyword sqlFunction	 graphical_plan plan explanation ulplan
-syn keyword sqlFunction	 graphical_ulplan long_ulplan
-syn keyword sqlFunction	 short_ulplan rewrite watcomsql
-syn keyword sqlFunction	 transactsql dialect estimate
-syn keyword sqlFunction	 estimate_source index_estimate
-syn keyword sqlFunction	 experience_estimate traceback wsql_state
-syn keyword sqlFunction	 lang_message dateadd datediff datepart
-syn keyword sqlFunction	 datename dayname monthname quarter
-syn keyword sqlFunction	 tsequal hextoint inttohex rand textptr
-syn keyword sqlFunction	 rowid grouping stddev variance rank
-syn keyword sqlFunction	 dense_rank density percent_rank user_name
-syn keyword sqlFunction	 user_id str stuff char_length nullif
-syn keyword sqlFunction	 sortkey compare ts_index_statistics
-syn keyword sqlFunction	 ts_table_statistics isdate isnumeric
-syn keyword sqlFunction	 get_identity lookup newid uuidtostr
-syn keyword sqlFunction	 strtouuid varexists
+syn keyword sqlFunction  abs argn avg bintohex bintostr
+syn keyword sqlFunction  byte_length byte_substr char_length
+syn keyword sqlFunction  compare count count_big datalength date
+syn keyword sqlFunction  date_format dateadd datediff datename
+syn keyword sqlFunction  datepart day dayname days debug_eng
+syn keyword sqlFunction  dense_rank density dialect difference
+syn keyword sqlFunction  dow estimate estimate_source evaluate
+syn keyword sqlFunction  experience_estimate explanation
+syn keyword sqlFunction  get_identity graphical_plan
+syn keyword sqlFunction  graphical_ulplan greater grouping
+syn keyword sqlFunction  hextobin hextoint hour hours identity
+syn keyword sqlFunction  ifnull index_estimate inttohex isdate
+syn keyword sqlFunction  isencrypted isnull isnumeric
+syn keyword sqlFunction  lang_message length lesser like_end
+syn keyword sqlFunction  like_start list long_ulplan lookup max
+syn keyword sqlFunction  min minute minutes month monthname
+syn keyword sqlFunction  months newid now nullif number
+syn keyword sqlFunction  percent_rank plan quarter rand rank
+syn keyword sqlFunction  regexp_compile regexp_compile_patindex
+syn keyword sqlFunction  remainder rewrite rowid second seconds
+syn keyword sqlFunction  short_ulplan similar sortkey soundex
+syn keyword sqlFunction  stddev stack_trace str string strtobin strtouuid stuff
+syn keyword sqlFunction  subpartition substr substring sum switchoffset sysdatetimeoffset
+syn keyword sqlFunction  textptr todate todatetimeoffset today totimestamp traceback transactsql
+syn keyword sqlFunction  ts_index_statistics ts_table_statistics
+syn keyword sqlFunction  tsequal ulplan user_id user_name utc_now
+syn keyword sqlFunction  uuidtostr varexists variance watcomsql
+syn keyword sqlFunction  weeks wsql_state year years ymd
 
 " 9.0.1 functions
 syn keyword sqlFunction	 acos asin atan atn2 cast ceiling convert cos cot
@@ -68,6 +70,9 @@
 syn keyword sqlFunction	 connection_extended_property text_handle_vector_match
 syn keyword sqlFunction	 read_client_file write_client_file
 
+" 12.0.1 functions
+syn keyword sqlFunction	 http_response_header
+
 " string functions
 syn keyword sqlFunction	 ascii char left ltrim repeat
 syn keyword sqlFunction	 space right rtrim trim lcase ucase
@@ -359,7 +364,7 @@
 
 " http functions
 syn keyword sqlFunction	 http_header http_variable
-syn keyword sqlFunction	 next_http_header next_http_variable
+syn keyword sqlFunction	 next_http_header next_http_response_header next_http_variable
 syn keyword sqlFunction	 sa_set_http_header sa_set_http_option
 syn keyword sqlFunction	 sa_http_variable_info sa_http_header_info
 
@@ -367,119 +372,244 @@
 syn keyword sqlFunction	 http_encode http_decode
 syn keyword sqlFunction	 html_encode html_decode
 
+" XML function support
+syn keyword sqlFunction	 openxml xmlelement xmlforest xmlgen xmlconcat xmlagg
+syn keyword sqlFunction	 xmlattributes
+
+" Spatial Compatibility Functions
+syn keyword sqlFunction  ST_BdMPolyFromText
+syn keyword sqlFunction  ST_BdMPolyFromWKB
+syn keyword sqlFunction  ST_BdPolyFromText
+syn keyword sqlFunction  ST_BdPolyFromWKB
+syn keyword sqlFunction  ST_CPolyFromText
+syn keyword sqlFunction  ST_CPolyFromWKB
+syn keyword sqlFunction  ST_CircularFromTxt
+syn keyword sqlFunction  ST_CircularFromWKB
+syn keyword sqlFunction  ST_CompoundFromTxt
+syn keyword sqlFunction  ST_CompoundFromWKB
+syn keyword sqlFunction  ST_GeomCollFromTxt
+syn keyword sqlFunction  ST_GeomCollFromWKB
+syn keyword sqlFunction  ST_GeomFromText
+syn keyword sqlFunction  ST_GeomFromWKB
+syn keyword sqlFunction  ST_LineFromText
+syn keyword sqlFunction  ST_LineFromWKB
+syn keyword sqlFunction  ST_MCurveFromText
+syn keyword sqlFunction  ST_MCurveFromWKB
+syn keyword sqlFunction  ST_MLineFromText
+syn keyword sqlFunction  ST_MLineFromWKB
+syn keyword sqlFunction  ST_MPointFromText
+syn keyword sqlFunction  ST_MPointFromWKB
+syn keyword sqlFunction  ST_MPolyFromText
+syn keyword sqlFunction  ST_MPolyFromWKB
+syn keyword sqlFunction  ST_MSurfaceFromTxt
+syn keyword sqlFunction  ST_MSurfaceFromWKB
+syn keyword sqlFunction  ST_OrderingEquals
+syn keyword sqlFunction  ST_PointFromText
+syn keyword sqlFunction  ST_PointFromWKB
+syn keyword sqlFunction  ST_PolyFromText
+syn keyword sqlFunction  ST_PolyFromWKB
+" Spatial Structural Methods
+syn keyword sqlFunction  ST_CoordDim
+syn keyword sqlFunction  ST_CurveN
+syn keyword sqlFunction  ST_Dimension
+syn keyword sqlFunction  ST_EndPoint
+syn keyword sqlFunction  ST_ExteriorRing
+syn keyword sqlFunction  ST_GeometryN
+syn keyword sqlFunction  ST_GeometryType
+syn keyword sqlFunction  ST_InteriorRingN
+syn keyword sqlFunction  ST_Is3D
+syn keyword sqlFunction  ST_IsClosed
+syn keyword sqlFunction  ST_IsEmpty
+syn keyword sqlFunction  ST_IsMeasured
+syn keyword sqlFunction  ST_IsRing
+syn keyword sqlFunction  ST_IsSimple
+syn keyword sqlFunction  ST_IsValid
+syn keyword sqlFunction  ST_NumCurves
+syn keyword sqlFunction  ST_NumGeometries
+syn keyword sqlFunction  ST_NumInteriorRing
+syn keyword sqlFunction  ST_NumPoints
+syn keyword sqlFunction  ST_PointN
+syn keyword sqlFunction  ST_StartPoint
+"Spatial Computation
+syn keyword sqlFunction  ST_Length
+syn keyword sqlFunction  ST_Area
+syn keyword sqlFunction  ST_Centroid
+syn keyword sqlFunction  ST_Area
+syn keyword sqlFunction  ST_Centroid
+syn keyword sqlFunction  ST_IsWorld
+syn keyword sqlFunction  ST_Perimeter
+syn keyword sqlFunction  ST_PointOnSurface
+syn keyword sqlFunction  ST_Distance
+" Spatial Input/Output
+syn keyword sqlFunction  ST_AsBinary
+syn keyword sqlFunction  ST_AsGML
+syn keyword sqlFunction  ST_AsGeoJSON
+syn keyword sqlFunction  ST_AsSVG
+syn keyword sqlFunction  ST_AsSVGAggr
+syn keyword sqlFunction  ST_AsText
+syn keyword sqlFunction  ST_AsWKB
+syn keyword sqlFunction  ST_AsWKT
+syn keyword sqlFunction  ST_AsXML
+syn keyword sqlFunction  ST_GeomFromBinary
+syn keyword sqlFunction  ST_GeomFromShape
+syn keyword sqlFunction  ST_GeomFromText
+syn keyword sqlFunction  ST_GeomFromWKB
+syn keyword sqlFunction  ST_GeomFromWKT
+syn keyword sqlFunction  ST_GeomFromXML
+" Spatial Cast Methods
+syn keyword sqlFunction  ST_CurvePolyToPoly
+syn keyword sqlFunction  ST_CurveToLine
+syn keyword sqlFunction  ST_ToCircular
+syn keyword sqlFunction  ST_ToCompound
+syn keyword sqlFunction  ST_ToCurve
+syn keyword sqlFunction  ST_ToCurvePoly
+syn keyword sqlFunction  ST_ToGeomColl
+syn keyword sqlFunction  ST_ToLineString
+syn keyword sqlFunction  ST_ToMultiCurve
+syn keyword sqlFunction  ST_ToMultiLine
+syn keyword sqlFunction  ST_ToMultiPoint
+syn keyword sqlFunction  ST_ToMultiPolygon
+syn keyword sqlFunction  ST_ToMultiSurface
+syn keyword sqlFunction  ST_ToPoint
+syn keyword sqlFunction  ST_ToPolygon
+syn keyword sqlFunction  ST_ToSurface
+
+" Array functions 16.x
+syn keyword sqlFunction	 array array_agg array_max_cardinality trim_array
+syn keyword sqlFunction	 error_line error_message error_procedure
+syn keyword sqlFunction	 error_sqlcode error_sqlstate error_stack_trace
+
+
 " keywords
-syn keyword sqlKeyword	 absolute accent action active add address aes_decrypt
-syn keyword sqlKeyword	 after aggregate algorithm allow_dup_row allowed
-syn keyword sqlKeyword	 alter and ansi_substring any as append apply asc ascii ase
-syn keyword sqlKeyword	 assign at atan2 atomic attach attended audit authorization
+syn keyword sqlKeyword	 absolute accent access account action active activate add address admin
+syn keyword sqlKeyword	 aes_decrypt after aggregate algorithm allow_dup_row allow allowed alter
+syn keyword sqlKeyword	 always and angular ansi_substring any as append apply
+syn keyword sqlKeyword	 arbiter array asc ascii ase
+syn keyword sqlKeyword	 assign at atan2 atomic attended
+syn keyword sqlKeyword	 audit auditing authentication authorization axis
 syn keyword sqlKeyword	 autoincrement autostop batch bcp before
 syn keyword sqlKeyword	 between bit_and bit_length bit_or bit_substr bit_xor
 syn keyword sqlKeyword	 blank blanks block
-syn keyword sqlKeyword	 both bottom unbounded break breaker bufferpool
+syn keyword sqlKeyword	 both bottom unbounded breaker bufferpool
 syn keyword sqlKeyword	 build bulk by byte bytes cache calibrate calibration
-syn keyword sqlKeyword	 cancel capability cascade cast
-syn keyword sqlKeyword	 catalog ceil changes char char_convert check checksum
-syn keyword sqlKeyword	 class classes client cmp
+syn keyword sqlKeyword	 cancel capability cardinality cascade cast
+syn keyword sqlKeyword	 catalog catch ceil change changes char char_convert
+syn keyword sqlKeyword	 check checkpointlog checksum class classes client cmp
 syn keyword sqlKeyword	 cluster clustered collation
 syn keyword sqlKeyword	 column columns
-syn keyword sqlKeyword	 command comment committed comparisons
+syn keyword sqlKeyword	 command comments committed commitid comparisons
 syn keyword sqlKeyword	 compatible component compressed compute computes
 syn keyword sqlKeyword	 concat configuration confirm conflict connection
 syn keyword sqlKeyword	 console consolidate consolidated
-syn keyword sqlKeyword	 constraint constraints content continue
-syn keyword sqlKeyword	 convert coordinator copy count count_set_bits
-syn keyword sqlKeyword	 crc createtime cross cube cume_dist
+syn keyword sqlKeyword	 constraint constraints content
+syn keyword sqlKeyword	 convert coordinate coordinator copy count count_set_bits
+syn keyword sqlKeyword	 crc createtime critical cross cube cume_dist
 syn keyword sqlKeyword	 current cursor data data database
-syn keyword sqlKeyword	 current_timestamp current_user
+syn keyword sqlKeyword	 current_timestamp current_user cycle
 syn keyword sqlKeyword	 databases datatype dba dbfile
 syn keyword sqlKeyword	 dbspace dbspaces dbspacename debug decoupled
 syn keyword sqlKeyword	 decrypted default defaults default_dbspace deferred
 syn keyword sqlKeyword	 definer definition
 syn keyword sqlKeyword	 delay deleting delimited dependencies desc
-syn keyword sqlKeyword	 description detach deterministic directory
-syn keyword sqlKeyword	 disable disabled distinct do domain download duplicate
-syn keyword sqlKeyword	 dsetpass dttm dynamic each editproc ejb
-syn keyword sqlKeyword	 else elseif empty enable encapsulated encrypted end
-syn keyword sqlKeyword	 encoding endif engine environment erase error escape escapes event
-syn keyword sqlKeyword	 event_parameter every except exception exclude excluded exclusive exec
+syn keyword sqlKeyword	 description deterministic directory
+syn keyword sqlKeyword	 disable disabled disallow distinct disksandbox disk_sandbox
+syn keyword sqlKeyword	 dn do domain download duplicate
+syn keyword sqlKeyword	 dsetpass dttm dynamic each earth editproc effective ejb
+syn keyword sqlKeyword	 elimination ellipsoid else elseif
+syn keyword sqlKeyword	 email empty enable encapsulated encrypted encryption end
+syn keyword sqlKeyword	 encoding endif engine environment erase error errors escape escapes event
+syn keyword sqlKeyword	 event_parameter every exception exclude excluded exclusive exec
 syn keyword sqlKeyword	 existing exists expanded expiry express exprtype extended_property
 syn keyword sqlKeyword	 external externlogin factor failover false
-syn keyword sqlKeyword	 fastfirstrow fieldproc file files filler
-syn keyword sqlKeyword	 fillfactor finish first first_keyword first_value
-syn keyword sqlKeyword	 following force foreign format forxml forxml_sep fp frame
-syn keyword sqlKeyword	 freepage french fresh full function gb get_bit go global
+syn keyword sqlKeyword	 fastfirstrow feature fieldproc file files filler
+syn keyword sqlKeyword	 fillfactor final finish first first_keyword first_value
+syn keyword sqlKeyword	 flattening
+syn keyword sqlKeyword	 following force foreign format forjson forxml forxml_sep fp frame
+syn keyword sqlKeyword	 free freepage french fresh full function
+syn keyword sqlKeyword	 gb generic get_bit go global grid
 syn keyword sqlKeyword	 group handler hash having header hexadecimal
 syn keyword sqlKeyword	 hidden high history hg hng hold holdlock host
 syn keyword sqlKeyword	 hours http_body http_session_timeout id identified identity ignore
 syn keyword sqlKeyword	 ignore_dup_key ignore_dup_row immediate
-syn keyword sqlKeyword	 in inactiv inactive inactivity included incremental
-syn keyword sqlKeyword	 index index_enabled index_lparen indexonly info
-syn keyword sqlKeyword	 inline inner inout insensitive inserting
-syn keyword sqlKeyword	 instead integrated
-syn keyword sqlKeyword	 internal intersection into introduced invoker iq is isolation
+syn keyword sqlKeyword	 in inactiv inactive inactivity included increment incremental
+syn keyword sqlKeyword	 index index_enabled index_lparen indexonly info information
+syn keyword sqlKeyword	 inheritance inline inner inout insensitive inserting
+syn keyword sqlKeyword	 instead
+syn keyword sqlKeyword	 internal intersection into introduced inverse invoker
+syn keyword sqlKeyword	 iq is isolation
 syn keyword sqlKeyword	 jar java java_location java_main_userid java_vm_options
-syn keyword sqlKeyword	 jconnect jdk join kb key keep kerberos language last
-syn keyword sqlKeyword	 last_keyword last_value lateral ld left len lf ln level like
+syn keyword sqlKeyword	 jconnect jdk join json kb key keys keep language last
+syn keyword sqlKeyword	 last_keyword last_value lateral latitude
+syn keyword sqlKeyword	 ld ldap left len linear lf ln level like
 syn keyword sqlKeyword	 limit local location log
-syn keyword sqlKeyword	 logging login logscan long low lru main manual mark
-syn keyword sqlKeyword	 match matched materialized max maximum mb membership
-syn keyword sqlKeyword	 merge metadata methods minimum minutes mirror mode modify monitor move mru
-syn keyword sqlKeyword	 multiplex name named national native natural new next no
-syn keyword sqlKeyword	 noholdlock nolock nonclustered none not
-syn keyword sqlKeyword	 notify null nullable_constant nulls object oem_string of off offline
-syn keyword sqlKeyword	 old on online only openstring optimization optimizer option
-syn keyword sqlKeyword	 or order others out outer over
+syn keyword sqlKeyword	 logging logical login logscan long longitude low lru ls
+syn keyword sqlKeyword	 main major manage manual mark master
+syn keyword sqlKeyword	 match matched materialized max maxvalue maximum mb measure median membership
+syn keyword sqlKeyword	 merge metadata methods migrate minimum minor minutes minvalue mirror
+syn keyword sqlKeyword	 mode modify monitor move mru multiplex
+syn keyword sqlKeyword	 name named namespaces national native natural new next nextval
+syn keyword sqlKeyword	 ngram no noholdlock nolock nonclustered none normal not
+syn keyword sqlKeyword	 notify null nullable_constant nulls
+syn keyword sqlKeyword	 object objects oem_string of off offline offset olap
+syn keyword sqlKeyword	 old on online only openstring operator
+syn keyword sqlKeyword	 optimization optimizer option
+syn keyword sqlKeyword	 or order ordinality organization others out outer over owner
 syn keyword sqlKeyword	 package packetsize padding page pages
-syn keyword sqlKeyword	 paglock parallel part partial partition partitions partner password path
-syn keyword sqlKeyword	 pctfree plan policy populate port postfilter preceding precision
-syn keyword sqlKeyword	 prefetch prefilter prefix preserve preview primary
-syn keyword sqlKeyword	 prior priority priqty private privileges procedure profile
+syn keyword sqlKeyword	 paglock parallel parameter parent part partial
+syn keyword sqlKeyword	 partition partitions partner password path pctfree
+syn keyword sqlKeyword	 permissions perms plan planar policy polygon populate port postfilter preceding
+syn keyword sqlKeyword	 precisionprefetch prefilter prefix preserve preview previous
+syn keyword sqlKeyword	 primary prior priority priqty private privilege privileges procedure profile profiling
 syn keyword sqlKeyword	 property_is_cumulative property_is_numeric public publication publish publisher
 syn keyword sqlKeyword	 quiesce quote quotes range readclientfile readcommitted reader readfile readonly
 syn keyword sqlKeyword	 readpast readuncommitted readwrite rebuild
 syn keyword sqlKeyword	 received recompile recover recursive references
-syn keyword sqlKeyword	 referencing refresh regex regexp regexp_substr relative relocate
-syn keyword sqlKeyword	 rename repeatable repeatableread
-syn keyword sqlKeyword	 replicate request_timeout required rereceive resend reserve reset
-syn keyword sqlKeyword	 resizing resolve resource respect
-syn keyword sqlKeyword	 restrict result retain
-syn keyword sqlKeyword	 returns reverse right role
-syn keyword sqlKeyword	 rollup root row row_number rowlock rows save
+syn keyword sqlKeyword	 referencing regex regexp regexp_substr relative relocate
+syn keyword sqlKeyword	 rename repeatable repeatableread replicate replication
+syn keyword sqlKeyword	 requests request_timeout required rereceive resend reserve reset
+syn keyword sqlKeyword	 resizing resolve resource respect restart
+syn keyword sqlKeyword	 restrict result retain retries
+syn keyword sqlKeyword	 returns reverse right role roles
+syn keyword sqlKeyword	 rollup root row row_number rowlock rows rowtype
 syn keyword sqlKeyword	 sa_index_hash sa_internal_fk_verify sa_internal_termbreak
 syn keyword sqlKeyword	 sa_order_preserving_hash sa_order_preserving_hash_big sa_order_preserving_hash_prefix
-syn keyword sqlKeyword	 schedule schema scope scripted scroll seconds secqty security
-syn keyword sqlKeyword	 send sensitive sent serializable
-syn keyword sqlKeyword	 server server session set_bit set_bits sets
-syn keyword sqlKeyword	 share simple since site size skip
-syn keyword sqlKeyword	 snapshot soapheader soap_header split some sorted_data
-syn keyword sqlKeyword	 sqlcode sqlid sqlflagger sqlstate sqrt square
-syn keyword sqlKeyword	 stacker stale statement statistics status stddev_pop stddev_samp
-syn keyword sqlKeyword	 stemmer stogroup stoplist store
+syn keyword sqlKeyword	 sa_file_free_pages sa_internal_type_from_catalog sa_internal_valid_hash
+syn keyword sqlKeyword	 sa_internal_validate_value sa_json_element
+syn keyword sqlKeyword	 scale schedule schema scope script scripted scroll search seconds secqty security
+syn keyword sqlKeyword	 semi send sensitive sent sequence serializable
+syn keyword sqlKeyword	 server severity session set_bit set_bits sets
+syn keyword sqlKeyword	 shapefile share side simple since site size skip
+syn keyword sqlKeyword	 snap snapshot soapheader soap_header
+syn keyword sqlKeyword	 spatial split some sorted_data
+syn keyword sqlKeyword	 sql sqlcode sqlid sqlflagger sqlstate sqrt square
+syn keyword sqlKeyword	 stacker stale state statement statistics status stddev_pop stddev_samp
+syn keyword sqlKeyword	 stemmer stogroup stoplist storage store
 syn keyword sqlKeyword	 strip stripesizekb striping subpages subscribe subscription
-syn keyword sqlKeyword	 subtransaction suser_id suser_name synchronization
-syn keyword sqlKeyword	 syntax_error table tablock
-syn keyword sqlKeyword	 tablockx tb temp template temporary term then
-syn keyword sqlKeyword	 ties timezone to to_char to_nchar top traced_plan tracing
-syn keyword sqlKeyword	 transfer transaction transactional tries true
-syn keyword sqlKeyword	 tsequal type tune uncommitted unconditionally
-syn keyword sqlKeyword	 unenforced unicode unique union unistr unknown unlimited unload
+syn keyword sqlKeyword	 subtransaction suser_id suser_name suspend synchronization
+syn keyword sqlKeyword	 syntax_error table tables tablock
+syn keyword sqlKeyword	 tablockx target tb temp template temporary term then ties
+syn keyword sqlKeyword	 timezone timeout tls to to_char to_nchar tolerance top
+syn keyword sqlKeyword	 trace traced_plan tracing
+syn keyword sqlKeyword	 transfer transform transaction transactional treat tries
+syn keyword sqlKeyword	 true try tsequal type tune uncommitted unconditionally
+syn keyword sqlKeyword	 unenforced unicode unique unistr unit unknown unlimited unload
 syn keyword sqlKeyword	 unpartition unquiesce updatetime updating updlock upgrade upload
-syn keyword sqlKeyword	 upper use user
+syn keyword sqlKeyword	 upper usage use user
 syn keyword sqlKeyword	 using utc utilities validproc
 syn keyword sqlKeyword	 value values varchar variable
-syn keyword sqlKeyword	 varying var_pop var_samp vcat verify versions view virtual wait
-syn keyword sqlKeyword	 warning wd web when where window with with_auto
+syn keyword sqlKeyword	 varying var_pop var_samp vcat verbosity
+syn keyword sqlKeyword	 verify versions view virtual wait
+syn keyword sqlKeyword	 warning wd web when where with with_auto
 syn keyword sqlKeyword	 with_auto with_cube with_rollup without
 syn keyword sqlKeyword	 with_lparen within word work workload write writefile
-syn keyword sqlKeyword	 writeclientfile writer writers writeserver xlock zeros
-" XML function support
-syn keyword sqlFunction	 openxml xmlelement xmlforest xmlgen xmlconcat xmlagg
-syn keyword sqlFunction	 xmlattributes
+syn keyword sqlKeyword	 writeclientfile writer writers writeserver xlock
+syn keyword sqlKeyword	 war xml zeros zone
+" XML
 syn keyword sqlKeyword	 raw auto elements explicit
 " HTTP support
 syn keyword sqlKeyword	 authorization secure url service next_soap_header
 " HTTP 9.0.2 new procedure keywords
-syn keyword sqlKeyword	 namespace certificate clientport proxy
+syn keyword sqlKeyword	 namespace certificate certificates clientport proxy trusted_certificates_file
 " OLAP support 9.0.0
 syn keyword sqlKeyword	 covar_pop covar_samp corr regr_slope regr_intercept
 syn keyword sqlKeyword	 regr_count regr_r2 regr_avgx regr_avgy
@@ -489,37 +619,123 @@
 syn keyword sqlKeyword	 character dec options proc reference
 syn keyword sqlKeyword	 subtrans tran syn keyword
 
+" Login Mode Options
+syn keyword sqlKeywordLogin	 standard integrated kerberos LDAPUA
+syn keyword sqlKeywordLogin	 cloudadmin mixed
+
+" Spatial Predicates
+syn keyword sqlKeyword   ST_Contains
+syn keyword sqlKeyword   ST_ContainsFilter
+syn keyword sqlKeyword   ST_CoveredBy
+syn keyword sqlKeyword   ST_CoveredByFilter
+syn keyword sqlKeyword   ST_Covers
+syn keyword sqlKeyword   ST_CoversFilter
+syn keyword sqlKeyword   ST_Crosses
+syn keyword sqlKeyword   ST_Disjoint
+syn keyword sqlKeyword   ST_Equals
+syn keyword sqlKeyword   ST_EqualsFilter
+syn keyword sqlKeyword   ST_Intersects
+syn keyword sqlKeyword   ST_IntersectsFilter
+syn keyword sqlKeyword   ST_IntersectsRect
+syn keyword sqlKeyword   ST_OrderingEquals
+syn keyword sqlKeyword   ST_Overlaps
+syn keyword sqlKeyword   ST_Relate
+syn keyword sqlKeyword   ST_Touches
+syn keyword sqlKeyword   ST_Within
+syn keyword sqlKeyword   ST_WithinFilter
+" Spatial Set operations
+syn keyword sqlKeyword   ST_Affine
+syn keyword sqlKeyword   ST_Boundary
+syn keyword sqlKeyword   ST_Buffer
+syn keyword sqlKeyword   ST_ConvexHull
+syn keyword sqlKeyword   ST_ConvexHullAggr
+syn keyword sqlKeyword   ST_Difference
+syn keyword sqlKeyword   ST_Intersection
+syn keyword sqlKeyword   ST_IntersectionAggr
+syn keyword sqlKeyword   ST_SymDifference
+syn keyword sqlKeyword   ST_Union
+syn keyword sqlKeyword   ST_UnionAggr
+" Spatial Bounds
+syn keyword sqlKeyword   ST_Envelope
+syn keyword sqlKeyword   ST_EnvelopeAggr
+syn keyword sqlKeyword   ST_Lat
+syn keyword sqlKeyword   ST_LatMax
+syn keyword sqlKeyword   ST_LatMin
+syn keyword sqlKeyword   ST_Long
+syn keyword sqlKeyword   ST_LongMax
+syn keyword sqlKeyword   ST_LongMin
+syn keyword sqlKeyword   ST_M
+syn keyword sqlKeyword   ST_MMax
+syn keyword sqlKeyword   ST_MMin
+syn keyword sqlKeyword   ST_Point
+syn keyword sqlKeyword   ST_X
+syn keyword sqlKeyword   ST_XMax
+syn keyword sqlKeyword   ST_XMin
+syn keyword sqlKeyword   ST_Y
+syn keyword sqlKeyword   ST_YMax
+syn keyword sqlKeyword   ST_YMin
+syn keyword sqlKeyword   ST_Z
+syn keyword sqlKeyword   ST_ZMax
+syn keyword sqlKeyword   ST_ZMin
+" Spatial Collection Aggregates
+syn keyword sqlKeyword   ST_GeomCollectionAggr
+syn keyword sqlKeyword   ST_LineStringAggr
+syn keyword sqlKeyword   ST_MultiCurveAggr
+syn keyword sqlKeyword   ST_MultiLineStringAggr
+syn keyword sqlKeyword   ST_MultiPointAggr
+syn keyword sqlKeyword   ST_MultiPolygonAggr
+syn keyword sqlKeyword   ST_MultiSurfaceAggr
+syn keyword sqlKeyword   ST_Perimeter
+syn keyword sqlKeyword   ST_PointOnSurface
+" Spatial SRS
+syn keyword sqlKeyword   ST_CompareWKT
+syn keyword sqlKeyword   ST_FormatWKT
+syn keyword sqlKeyword   ST_ParseWKT
+syn keyword sqlKeyword   ST_TransformGeom
+syn keyword sqlKeyword   ST_GeometryTypeFromBaseType
+syn keyword sqlKeyword   ST_SnapToGrid
+syn keyword sqlKeyword   ST_Transform
+syn keyword sqlKeyword   ST_SRID
+syn keyword sqlKeyword   ST_SRIDFromBaseType
+syn keyword sqlKeyword   ST_LoadConfigurationData
+" Spatial Indexes
+syn keyword sqlKeyword   ST_LinearHash
+syn keyword sqlKeyword   ST_LinearUnHash
 
 syn keyword sqlOperator	 in any some all between exists
 syn keyword sqlOperator	 like escape not is and or
-syn keyword sqlOperator  intersect minus
-syn keyword sqlOperator  prior distinct
+syn keyword sqlOperator  minus
+syn keyword sqlOperator  prior distinct unnest
 
-syn keyword sqlStatement allocate alter backup begin call case
-syn keyword sqlStatement checkpoint clear close commit configure connect
-syn keyword sqlStatement create deallocate declare delete describe
-syn keyword sqlStatement disconnect drop execute exit explain fetch
+syn keyword sqlStatement allocate alter attach backup begin break call case catch
+syn keyword sqlStatement checkpoint clear close comment commit configure connect
+syn keyword sqlStatement continue create deallocate declare delete describe
+syn keyword sqlStatement detach disconnect drop except execute exit explain fetch
 syn keyword sqlStatement for forward from get goto grant help if include
-syn keyword sqlStatement input insert install leave load lock loop
-syn keyword sqlStatement message open output parameter parameters passthrough
-syn keyword sqlStatement prepare print put raiserror read readtext release
+syn keyword sqlStatement input insert install intersect leave load lock loop
+syn keyword sqlStatement message open output parameters passthrough
+syn keyword sqlStatement prepare print put raiserror read readtext refresh release
 syn keyword sqlStatement remote remove reorganize resignal restore resume
-syn keyword sqlStatement return revoke rollback savepoint select
+syn keyword sqlStatement return revoke rollback save savepoint select
 syn keyword sqlStatement set setuser signal start stop synchronize
-syn keyword sqlStatement system trigger truncate unload update
-syn keyword sqlStatement validate waitfor whenever while writetext
+syn keyword sqlStatement system trigger truncate try union unload update
+syn keyword sqlStatement validate waitfor whenever while window writetext
 
 
-syn keyword sqlType	 char long varchar text
-syn keyword sqlType	 bigint decimal double float int integer numeric
+syn keyword sqlType	 char nchar long varchar nvarchar text ntext uniqueidentifierstr xml
+syn keyword sqlType	 bigint bit decimal double varbit
+syn keyword sqlType	 float int integer numeric
 syn keyword sqlType	 smallint tinyint real
 syn keyword sqlType	 money smallmoney
-syn keyword sqlType	 bit
-syn keyword sqlType	 date datetime smalldate time timestamp
-syn keyword sqlType	 binary image varbinary uniqueidentifier
-syn keyword sqlType	 xml unsigned
-" New types 10.0.0
-syn keyword sqlType	 varbit nchar nvarchar
+syn keyword sqlType	 date datetime datetimeoffset smalldatetime time timestamp
+syn keyword sqlType	 binary image varray varbinary uniqueidentifier
+syn keyword sqlType	 unsigned
+" Spatial types
+syn keyword sqlType	 st_geometry st_point st_curve st_surface st_geomcollection
+syn keyword sqlType	 st_linestring st_circularstring st_compoundcurve
+syn keyword sqlType	 st_curvepolygon st_polygon
+syn keyword sqlType	 st_multipoint st_multicurve st_multisurface
+syn keyword sqlType	 st_multilinestring st_multipolygon
 
 syn keyword sqlOption    Allow_nulls_by_default
 syn keyword sqlOption    Allow_read_client_file
@@ -533,8 +749,10 @@
 syn keyword sqlOption    Ansinull
 syn keyword sqlOption    Auditing
 syn keyword sqlOption    Auditing_options
+syn keyword sqlOption    Auto_commit_on_create_local_temp_index
 syn keyword sqlOption    Background_priority
 syn keyword sqlOption    Blocking
+syn keyword sqlOption    Blocking_others_timeout
 syn keyword sqlOption    Blocking_timeout
 syn keyword sqlOption    Chained
 syn keyword sqlOption    Checkpoint_time
@@ -551,23 +769,29 @@
 syn keyword sqlOption    Database_authentication
 syn keyword sqlOption    Date_format
 syn keyword sqlOption    Date_order
+syn keyword sqlOption    db_publisher
 syn keyword sqlOption    Debug_messages
 syn keyword sqlOption    Dedicated_task
 syn keyword sqlOption    Default_dbspace
 syn keyword sqlOption    Default_timestamp_increment
 syn keyword sqlOption    Delayed_commit_timeout
 syn keyword sqlOption    Delayed_commits
+syn keyword sqlOption    Divide_by_zero_error
 syn keyword sqlOption    Escape_character
 syn keyword sqlOption    Exclude_operators
 syn keyword sqlOption    Extended_join_syntax
+syn keyword sqlOption    Extern_login_credentials
 syn keyword sqlOption    Fire_triggers
 syn keyword sqlOption    First_day_of_week
 syn keyword sqlOption    For_xml_null_treatment
 syn keyword sqlOption    Force_view_creation
 syn keyword sqlOption    Global_database_id
 syn keyword sqlOption    Http_session_timeout
+syn keyword sqlOption    Http_connection_pool_basesize
+syn keyword sqlOption    Http_connection_pool_timeout
 syn keyword sqlOption    Integrated_server_name
 syn keyword sqlOption    Isolation_level
+syn keyword sqlOption    Java_class_path
 syn keyword sqlOption    Java_location
 syn keyword sqlOption    Java_main_userid
 syn keyword sqlOption    Java_vm_options
@@ -586,6 +810,7 @@
 syn keyword sqlOption    Max_statement_count
 syn keyword sqlOption    Max_temp_space
 syn keyword sqlOption    Min_password_length
+syn keyword sqlOption    Min_role_admins
 syn keyword sqlOption    Nearest_century
 syn keyword sqlOption    Non_keywords
 syn keyword sqlOption    Odbc_describe_binary_as_varbinary
@@ -603,6 +828,7 @@
 syn keyword sqlOption    Preserve_source_format
 syn keyword sqlOption    Prevent_article_pkey_update
 syn keyword sqlOption    Priority
+syn keyword sqlOption    Progress_messages
 syn keyword sqlOption    Query_mem_timeout
 syn keyword sqlOption    Quoted_identifier
 syn keyword sqlOption    Read_past_deleted
@@ -610,6 +836,7 @@
 syn keyword sqlOption    Remote_idle_timeout
 syn keyword sqlOption    Replicate_all
 syn keyword sqlOption    Request_timeout
+syn keyword sqlOption    Reserved_keywords
 syn keyword sqlOption    Return_date_time_as_string
 syn keyword sqlOption    Rollback_on_deadlock
 syn keyword sqlOption    Row_counts
@@ -619,6 +846,12 @@
 syn keyword sqlOption    Sql_flagger_error_level
 syn keyword sqlOption    Sql_flagger_warning_level
 syn keyword sqlOption    String_rtruncation
+syn keyword sqlOption    st_geometry_asbinary_format
+syn keyword sqlOption    st_geometry_astext_format
+syn keyword sqlOption    st_geometry_asxml_format
+syn keyword sqlOption    st_geometry_describe_type
+syn keyword sqlOption    st_geometry_interpolation
+syn keyword sqlOption    st_geometry_on_invalid
 syn keyword sqlOption    Subsume_row_locks
 syn keyword sqlOption    Suppress_tds_debugging
 syn keyword sqlOption    Synchronize_mirror_on_commit
@@ -627,6 +860,7 @@
 syn keyword sqlOption    Time_format
 syn keyword sqlOption    Time_zone_adjustment
 syn keyword sqlOption    Timestamp_format
+syn keyword sqlOption    Timestamp_with_time_zone_format
 syn keyword sqlOption    Truncate_timestamp_values
 syn keyword sqlOption    Tsql_outer_joins
 syn keyword sqlOption    Tsql_variables
@@ -634,9 +868,11 @@
 syn keyword sqlOption    Update_statistics
 syn keyword sqlOption    Upgrade_database_capability
 syn keyword sqlOption    User_estimates
+syn keyword sqlOption    Uuid_has_hyphens
 syn keyword sqlOption    Verify_password_function
 syn keyword sqlOption    Wait_for_commit
 syn keyword sqlOption    Webservice_namespace_host
+syn keyword sqlOption    Webservice_sessionid_name
 
 " Strings and characters:
 syn region sqlString		start=+"+    end=+"+ contains=@Spell
@@ -654,32 +890,18 @@
 syn sync ccomment sqlDashComment
 syn sync ccomment sqlSlashComment
 
-" 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_sql_syn_inits")
-    if version < 508
-        let did_sql_syn_inits = 1
-        command -nargs=+ HiLink hi link <args>
-    else
-        command -nargs=+ HiLink hi link <args>
-    endif
-
-    HiLink sqlDashComment	Comment
-    HiLink sqlSlashComment	Comment
-    HiLink sqlMultiComment	Comment
-    HiLink sqlNumber	        Number
-    HiLink sqlOperator	        Operator
-    HiLink sqlSpecial	        Special
-    HiLink sqlKeyword	        Keyword
-    HiLink sqlStatement	        Statement
-    HiLink sqlString	        String
-    HiLink sqlType	        Type
-    HiLink sqlFunction	        Function
-    HiLink sqlOption	        PreProc
-
-    delcommand HiLink
-endif
+hi def link sqlDashComment	Comment
+hi def link sqlSlashComment	Comment
+hi def link sqlMultiComment	Comment
+hi def link sqlNumber	        Number
+hi def link sqlOperator	        Operator
+hi def link sqlSpecial	        Special
+hi def link sqlKeyword	        Keyword
+hi def link sqlStatement	Statement
+hi def link sqlString	        String
+hi def link sqlType	        Type
+hi def link sqlFunction	        Function
+hi def link sqlOption	        PreProc
 
 let b:current_syntax = "sqlanywhere"
 
diff -Naur vim73.orig/runtime/syntax/sqlhana.vim vim73/runtime/syntax/sqlhana.vim
--- vim73.orig/runtime/syntax/sqlhana.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/sqlhana.vim	2013-08-04 19:09:09.723946525 +0000
@@ -0,0 +1,293 @@
+" Vim syntax file
+" Language:    SQL, SAP HANA In Memory Database
+" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+" Last Change: 2012 Oct 23
+" Version:     SP4 b (Q2 2012)
+" Homepage:    http://www.vim.org/scripts/script.php?script_id=4275
+
+" Description: Updated to SAP HANA SP4
+"
+" 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
+
+syn case ignore
+
+" The SQL reserved words, defined as keywords.
+" These were pulled from the following SQL reference:
+"     http://help.sap.com/hana/hana_sql_en.pdf
+" An easy approach is to copy all text from the PDF
+" into a Vim buffer.  The keywords are in UPPER case,
+" so you can run the following commands to be left with
+" mainly the UPPER case words:
+"   1.  Delete all words that do not begin with a Capital
+"       %s/\(\<[^A-Z]\w*\>\)//g
+"   2.  Remove all words where the 2nd letter is not a Capital
+"       %s/\(\<[A-Z][^A-Z]\w*\>\)//g
+"   3.  Remove all non-word (or space) characters
+"       %s/[^0-9A-Za-z_ ]*//g
+"   4.  Remove some known words
+"       %s/\<\(SAP\|HANA\|OK\|AG\|IBM\|DB2\|AIX\|POWER\d\+\|UNIX\)\>//g
+"   5.  Remove blank lines and trailing spaces
+"       %s/\s\+$//g
+"       %s/^\s\+//g
+"       %s/^$\n//g
+"   6.  Convert spaces to newlines remove single character
+"       %s/[ ]\+/\r/g
+"       %g/^\w$/d
+"   7.  Sort and remove duplicates
+"       :sort
+"       :Uniq
+"   8.  Use the WhatsMissing plugin against the sqlhana.vim file.
+"   9.  Generated a file of all UPPER cased words which should not
+"       be in the syntax file.  These items should be removed
+"       from the list in step 7.  You can use WhatsNotMissing
+"       between step 7 and this new file to weed out the words
+"       we know are not syntax related.
+"  10.  Use the WhatsMissingRemoveMatches to remove the words
+"       from step 9.
+
+syn keyword sqlSpecial  false null true
+
+" Supported Functions for Date/Time types
+syn keyword sqlFunction	 ADD_DAYS ADD_MONTHS ADD_SECONDS ADD_YEARS COALESCE
+syn keyword sqlFunction	 CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_UTCDATE
+syn keyword sqlFunction	 CURRENT_UTCTIME CURRENT_UTCTIMESTAMP
+syn keyword sqlFunction	 DAYNAME DAYOFMONTH DAYOFYEAR DAYS_BETWEEN EXTRACT
+syn keyword sqlFunction	 GREATEST HOUR IFNULL ISOWEEK LAST_DAY LEAST LOCALTOUTC
+syn keyword sqlFunction	 MINUTE MONTH MONTHNAME NEXT_DAY NOW QUARTER SECOND
+syn keyword sqlFunction	 SECONDS_BETWEEN UTCTOLOCAL WEEK WEEKDAY YEAR
+
+syn keyword sqlFunction	 TO_CHAR TO_DATE TO_DATS TO_NCHAR TO_TIME TO_TIMESTAMP UTCTOLOCAL
+
+" Aggregate
+syn keyword sqlFunction	 COUNT MIN MAX SUM AVG STDDEV VAR
+
+" Datatype conversion
+syn keyword sqlFunction	 CAST TO_ALPHANUM TO_BIGINT TO_BINARY TO_BLOB TO_CHAR TO_CLOB
+syn keyword sqlFunction	 TO_DATE TO_DATS TO_DECIMAL TO_DOUBLE TO_INT TO_INTEGER TO_NCHAR
+syn keyword sqlFunction	 TO_NCLOB TO_NVARCHAR TO_REAL TO_SECONDDATE TO_SMALLDECIMAL
+syn keyword sqlFunction	 TO_SMALLINT TO_TIME TO_TIMESTAMP TO_TINYINT TO_VARCHAR TO_VARBINARY
+
+" Number functions
+syn keyword sqlFunction	 ABS ACOS ASIN ATAN ATAN2 BINTOHEX BITAND CEIL COS COSH COT
+syn keyword sqlFunction	 EXP FLOOR GREATEST HEXTOBIN LEAST LN LOG MOD POWER ROUND
+syn keyword sqlFunction	 SIGN SIN SINH SQRT TAN TANH UMINUS
+
+" String functions
+syn keyword sqlFunction	 ASCII CHAR CONCAT LCASE LENGTH LOCATE LOWER LPAD LTRIM
+syn keyword sqlFunction	 NCHAR REPLACE RPAD RTRIM SUBSTR_AFTER SUBSTR_BEFORE
+syn keyword sqlFunction	 SUBSTRING TRIM UCASE UNICODE UPPER
+
+" Miscellaneous functions
+syn keyword sqlFunction	 COALESCE CURRENT_CONNECTION CURRENT_SCHEMA CURRENT_USER
+syn keyword sqlFunction	 GROUPING_ID IFNULL MAP NULLIF SESSION_CONTEXT SESSION_USER SYSUUIDSQL
+syn keyword sqlFunction	 GET_NUM_SERVERS
+
+
+" sp_ procedures
+" syn keyword sqlFunction  sp_addalias
+
+
+" Reserved keywords
+syn keyword sqlkeyword   ALL AS AT BEFORE
+syn keyword sqlkeyword   BEGIN BOTH BY
+syn keyword sqlkeyword   CONDITION
+syn keyword sqlkeyword   CURRVAL CURSOR DECLARE
+syn keyword sqlkeyword   DISTINCT DO ELSE ELSEIF ELSIF
+syn keyword sqlkeyword   END EXCEPTION EXEC
+syn keyword sqlkeyword   FOR FROM GROUP
+syn keyword sqlkeyword   HAVING IN
+syn keyword sqlkeyword   INOUT INTO IS
+syn keyword sqlkeyword   LEADING
+syn keyword sqlkeyword   LOOP MINUS NATURAL NEXTVAL
+syn keyword sqlkeyword   OF ON ORDER OUT
+syn keyword sqlkeyword   PRIOR RETURN RETURNS REVERSE
+syn keyword sqlkeyword   ROWID SELECT
+syn keyword sqlkeyword   SQL START STOP SYSDATE
+syn keyword sqlkeyword   SYSTIME SYSTIMESTAMP SYSUUID
+syn keyword sqlkeyword   TRAILING USING UTCDATE
+syn keyword sqlkeyword   UTCTIME UTCTIMESTAMP VALUES
+syn keyword sqlkeyword   WHILE
+syn keyword sqlkeyword   ANY SOME EXISTS ESCAPE
+
+" IF keywords
+syn keyword sqlkeyword	 IF
+
+" CASE keywords
+syn keyword sqlKeyword	 WHEN THEN
+
+" Syntax rules common to TEXT and SHORTTEXT keywords
+syn keyword sqlKeyword	 LANGUAGE DETECTION LINGUISTIC
+syn keyword sqlkeyword   MIME TYPE
+syn keyword sqlkeyword   EXACT WEIGHT FUZZY FUZZINESSTHRESHOLD SEARCH
+syn keyword sqlkeyword   PHRASE INDEX RATIO REBUILD
+syn keyword sqlkeyword   CONFIGURATION
+syn keyword sqlkeyword   SEARCH ONLY
+syn keyword sqlkeyword   FAST PREPROCESS
+syn keyword sqlkeyword   SYNC SYNCHRONOUS ASYNC ASYNCHRONOUS FLUSH QUEUE
+syn keyword sqlkeyword   EVERY AFTER MINUTES DOCUMENTS SUSPEND
+
+" Statement keywords (i.e. after ALTER or CREATE)
+syn keyword sqlkeyword   AUDIT POLICY
+syn keyword sqlkeyword   FULLTEXT
+syn keyword sqlkeyword   SEQUENCE RESTART
+syn keyword sqlkeyword   TABLE
+syn keyword sqlkeyword   PROCEDURE STATISTICS
+syn keyword sqlkeyword   SCHEMA
+syn keyword sqlkeyword   SYNONYM
+syn keyword sqlkeyword   VIEW
+syn keyword sqlkeyword   COLUMN
+syn keyword sqlkeyword   SYSTEM LICENSE
+syn keyword sqlkeyword   SESSION
+syn keyword sqlkeyword   CANCEL WORK
+syn keyword sqlkeyword   PLAN CACHE
+syn keyword sqlkeyword   LOGGING NOLOGGING RETENTION
+syn keyword sqlkeyword   RECONFIGURE SERVICE
+syn keyword sqlkeyword   RESET MONITORING
+syn keyword sqlkeyword   SAVE DURATION PERFTRACE FUNCTION_PROFILER
+syn keyword sqlkeyword   SAVEPOINT
+syn keyword sqlkeyword   USER
+syn keyword sqlkeyword   ROLE
+syn keyword sqlkeyword   ASC DESC
+syn keyword sqlkeyword   OWNED
+syn keyword sqlkeyword   DEPENDENCIES SCRAMBLE
+
+" Create sequence
+syn keyword sqlkeyword   INCREMENT MAXVALUE MINVALUE CYCLE
+
+" Create table
+syn keyword sqlkeyword   HISTORY GLOBAL LOCAL TEMPORARY
+
+" Create trigger
+syn keyword sqlkeyword   TRIGGER REFERENCING EACH DEFAULT
+syn keyword sqlkeyword   SIGNAL RESIGNAL MESSAGE_TEXT OLD NEW
+syn keyword sqlkeyword   EXIT HANDLER SQL_ERROR_CODE
+syn keyword sqlkeyword   TARGET CONDITION SIGNAL
+
+" Alter table
+syn keyword sqlkeyword   ADD DROP MODIFY GENERATED ALWAYS
+syn keyword sqlkeyword   UNIQUE BTREE CPBTREE PRIMARY KEY
+syn keyword sqlkeyword   CONSTRAINT PRELOAD NONE
+syn keyword sqlkeyword   ROW THREADS BATCH
+syn keyword sqlkeyword   MOVE PARTITION TO LOCATION PHYSICAL OTHERS
+syn keyword sqlkeyword   ROUNDROBIN PARTITIONS HASH RANGE VALUE
+syn keyword sqlkeyword   PERSISTENT DELTA AUTO AUTOMERGE
+
+" Create audit policy
+syn keyword sqlkeyword   AUDITING SUCCESSFUL UNSUCCESSFUL
+syn keyword sqlkeyword	 PRIVILEGE STRUCTURED CHANGE LEVEL
+syn keyword sqlkeyword	 EMERGENCY ALERT CRITICAL WARNING INFO
+
+" Privileges
+syn keyword sqlkeyword   DEBUG EXECUTE
+
+" Schema
+syn keyword sqlkeyword   CASCADE RESTRICT PARAMETERS SCAN
+
+" Traces
+syn keyword sqlkeyword   CLIENT CRASHDUMP EMERGENCYDUMP
+syn keyword sqlkeyword   INDEXSERVER NAMESERVER DAEMON
+syn keyword sqlkeyword   CLEAR REMOVE TRACES
+
+" Reclaim
+syn keyword sqlkeyword   RECLAIM DATA VOLUME VERSION SPACE DEFRAGMENT SPARSIFY
+
+" Join
+syn keyword sqlkeyword   INNER OUTER LEFT RIGHT FULL CROSS JOIN
+syn keyword sqlkeyword   GROUPING SETS ROLLUP CUBE
+syn keyword sqlkeyword   BEST LIMIT OFFSET
+syn keyword sqlkeyword   WITH SUBTOTAL BALANCE TOTAL
+syn keyword sqlkeyword   TEXT_FILTER FILL UP SORT MATCHES TOP
+syn keyword sqlkeyword   RESULT OVERVIEW PREFIX MULTIPLE RESULTSETS
+
+" Lock
+syn keyword sqlkeyword   EXCLUSIVE MODE NOWAIT
+
+" Transaction
+syn keyword sqlkeyword   TRANSACTION ISOLATION READ COMMITTED
+syn keyword sqlkeyword   REPEATABLE SERIALIZABLE WRITE
+
+" Saml
+syn keyword sqlkeyword   SAML ASSERTION PROVIDER SUBJECT ISSUER
+
+" User
+syn keyword sqlkeyword   PASSWORD IDENTIFIED EXTERNALLY ATTEMPTS ATTEMPTS
+syn keyword sqlkeyword	 ENABLE DISABLE OFF LIFETIME FORCE DEACTIVATE
+syn keyword sqlkeyword	 ACTIVATE IDENTITY KERBEROS
+
+" Grant
+syn keyword sqlkeyword   ADMIN BACKUP CATALOG SCENARIO INIFILE MONITOR
+syn keyword sqlkeyword   OPTIMIZER OPTION
+syn keyword sqlkeyword   RESOURCE STRUCTUREDPRIVILEGE TRACE
+
+" Import
+syn keyword sqlkeyword   CSV FILE CONTROL NO CHECK SKIP FIRST LIST
+syn keyword sqlkeyword	 RECORD DELIMITED FIELD OPTIONALLY ENCLOSED FORMAT
+
+" Roles
+syn keyword sqlkeyword   PUBLIC CONTENT_ADMIN MODELING MONITORING
+
+" Miscellaneous
+syn keyword sqlkeyword   APPLICATION BINARY IMMEDIATE COREFILE SECURITY DEFINER
+syn keyword sqlkeyword   DUMMY INVOKER MATERIALIZED MESSEGE_TEXT PARAMETER PARAMETERS
+syn keyword sqlkeyword   PART
+syn keyword sqlkeyword   CONSTANT SQLEXCEPTION SQLWARNING
+
+syn keyword sqlOperator  WHERE BETWEEN LIKE NULL CONTAINS
+syn keyword sqlOperator  AND OR NOT CASE
+syn keyword sqlOperator  UNION INTERSECT EXCEPT
+
+syn keyword sqlStatement ALTER CALL CALLS CREATE DROP RENAME TRUNCATE
+syn keyword sqlStatement DELETE INSERT UPDATE EXPLAIN
+syn keyword sqlStatement MERGE REPLACE UPSERT SELECT
+syn keyword sqlStatement SET UNSET LOAD UNLOAD
+syn keyword sqlStatement CONNECT DISCONNECT COMMIT LOCK ROLLBACK
+syn keyword sqlStatement GRANT REVOKE
+syn keyword sqlStatement EXPORT IMPORT
+
+
+syn keyword sqlType	 DATE TIME SECONDDATE TIMESTAMP TINYINT SMALLINT
+syn keyword sqlType	 INT INTEGER BIGINT SMALLDECIMAL DECIMAL
+syn keyword sqlType	 REAL DOUBLE FLOAT
+syn keyword sqlType	 VARCHAR NVARCHAR ALPHANUM SHORTTEXT VARBINARY
+syn keyword sqlType	 BLOB CLOB NCLOB TEXT DAYDATE
+
+syn keyword sqlOption    Webservice_namespace_host
+
+" Strings and characters:
+syn region sqlString		start=+"+    end=+"+ contains=@Spell
+syn region sqlString		start=+'+    end=+'+ contains=@Spell
+
+" Numbers:
+syn match sqlNumber		"-\=\<\d*\.\=[0-9_]\>"
+
+" Comments:
+syn region sqlDashComment	start=/--/ end=/$/ contains=@Spell
+syn region sqlSlashComment	start=/\/\// end=/$/ contains=@Spell
+syn region sqlMultiComment	start="/\*" end="\*/" contains=sqlMultiComment,@Spell
+syn cluster sqlComment	contains=sqlDashComment,sqlSlashComment,sqlMultiComment,@Spell
+syn sync ccomment sqlComment
+syn sync ccomment sqlDashComment
+syn sync ccomment sqlSlashComment
+
+hi def link sqlDashComment	Comment
+hi def link sqlSlashComment	Comment
+hi def link sqlMultiComment	Comment
+hi def link sqlNumber	        Number
+hi def link sqlOperator	        Operator
+hi def link sqlSpecial	        Special
+hi def link sqlKeyword	        Keyword
+hi def link sqlStatement	Statement
+hi def link sqlString	        String
+hi def link sqlType	        Type
+hi def link sqlFunction	        Function
+hi def link sqlOption	        PreProc
+
+let b:current_syntax = "sqlhana"
+
+" vim:sw=4:
diff -Naur vim73.orig/runtime/syntax/sqr.vim vim73/runtime/syntax/sqr.vim
--- vim73.orig/runtime/syntax/sqr.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/sqr.vim	2013-08-04 19:09:09.730613172 +0000
@@ -43,11 +43,11 @@
 syn keyword    sqrSection     end-footing end-heading end-procedure
 syn keyword    sqrSection     end-program end-report end-setup
 
-syn keyword    sqrParagraph   alter-color-map alter-conection
+syn keyword    sqrParagraph   alter-color-map alter-connection
 syn keyword    sqrParagraph   alter-locale alter-printer alter-report
 syn keyword    sqrParagraph   begin-document begin-execute begin-select
 syn keyword    sqrParagraph   begin-sql declare-chart declare-image
-syn keyword    sqrParagraph   declare-color-map declare-conection
+syn keyword    sqrParagraph   declare-color-map declare-connection
 syn keyword    sqrParagraph   declare-layout declare-printer
 syn keyword    sqrParagraph   declare-report declare-procedure
 syn keyword    sqrParagraph   declare-toc declare-variable end-declare
@@ -224,16 +224,16 @@
   " See also the sqrString section above for handling of ! characters
   " inside of strings.  (Those patterns override the ones below.)
   syn match	sqrComment	/!\@<!!\([^!=].*\|$\)/ contains=sqrTodo
-  "				  the ! can't be preceeded by another !,
+  "				  the ! can't be preceded by another !,
   "				  and must be followed by at least one
   "				  character other than ! or =, or immediately
   "				  by the end-of-line
   syn match	sqrComment	/^!=.*/ contains=sqrTodo
   syn match	sqrComment	/^!!.*/ contains=sqrTodo
   syn match	sqrError	/^\s\+\zs!=.*/
-  "				  it's an error to have "!=" preceeded by
+  "				  it's an error to have "!=" preceded by
   "				  just whitespace on the line ("!="
-  "				  preceeded by non-whitespace is treated
+  "				  preceded by non-whitespace is treated
   "				  as neither a comment nor an error, since
   "				  it is often correct, i.e.
   "				    if #count != 7
@@ -259,7 +259,7 @@
 
 " 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 hightlighting yet.
+" For version 5.8 and later, only when an item doesn't have highlighting yet.
 if version >= 508 || !exists("did_sqr_syn_inits")
   if version < 508
     let did_sqr_syn_inits = 1
diff -Naur vim73.orig/runtime/syntax/sshconfig.vim vim73/runtime/syntax/sshconfig.vim
--- vim73.orig/runtime/syntax/sshconfig.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/sshconfig.vim	2013-08-04 19:09:09.730613172 +0000
@@ -1,7 +1,10 @@
 " Vim syntax file
-" Language: OpenSSH client configuration file (ssh_config)
-" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2009-07-09
+" Language:	OpenSSH client configuration file (ssh_config)
+" Author:	David Necas (Yeti)
+" Maintainer:   Leonard Ehrenfried <leonard.ehrenfried@web.de>	
+" Last Change:	2012 Feb 24 
+" SSH Version:	5.9p1
+"
 
 " Setup
 if version >= 600
@@ -18,70 +21,162 @@
   set iskeyword=_,-,a-z,A-Z,48-57
 endif
 
-syn case ignore
+
+" case on
+syn case match
+
 
 " Comments
-syn match sshconfigComment "#.*$" contains=sshconfigTodo
-syn keyword sshconfigTodo TODO FIXME NOT contained
+syn match sshconfigComment "^#.*$" contains=sshconfigTodo
+syn match sshconfigComment "\s#.*$" contains=sshconfigTodo
+
+syn keyword sshconfigTodo TODO FIXME NOTE contained
+
 
 " Constants
 syn keyword sshconfigYesNo yes no ask
 syn keyword sshconfigYesNo any auto
-syn keyword sshconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
-syn keyword sshconfigCipher aes192-cbc aes256-cbc aes128-ctr aes256-ctr
-syn keyword sshconfigCipher arcfour arcfour128 arcfour256 cast128-cbc
+syn keyword sshconfigYesNo force autoask none
+
+syn keyword sshconfigCipher  3des blowfish
+syn keyword sshconfigCiphers aes128-cbc 3des-cbc blowfish blowfish-cbc cast128-cbc
+syn keyword sshconfigCiphers aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr
+syn keyword sshconfigCiphers arcfour arcfour128 arcfour256 cast128-cbc
+
 syn keyword sshconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
 syn keyword sshconfigMAC hmac-md5-96
-syn match sshconfigMAC "\<umac-64@openssh\.com\>"
+syn keyword sshconfigMAC hmac-sha2-256 hmac-sha2-256-96 hmac-sha2-512
+syn keyword sshconfigMAC hmac-sha2-512-96
+syn match   sshconfigMAC "\<umac-64@openssh\.com\>"
+
 syn keyword sshconfigHostKeyAlg ssh-rsa ssh-dss
-syn keyword sshconfigPreferredAuth hostbased publickey password
+syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp256-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp384-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp521-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ssh-rsa-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ssh-dss-cert-v01@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ssh-rsa-cert-v00@openssh\.com\>"
+syn match   sshconfigHostKeyAlg "\<ssh-dss-cert-v00@openssh\.com\>"
+syn keyword sshconfigHostKeyAlg ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521
+
+syn keyword sshconfigPreferredAuth hostbased publickey password gssapi-with-mic
 syn keyword sshconfigPreferredAuth keyboard-interactive
+
 syn keyword sshconfigLogLevel QUIET FATAL ERROR INFO VERBOSE
 syn keyword sshconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3
 syn keyword sshconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1
 syn keyword sshconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
-syn match sshconfigVar "%[rhpldun]\>"
+syn keyword sshconfigAddressFamily  inet inet6
+
+syn match   sshconfigIPQoS	"af1[1234]"
+syn match   sshconfigIPQoS	"af2[23]"
+syn match   sshconfigIPQoS	"af3[123]"
+syn match   sshconfigIPQoS	"af4[123]"
+syn match   sshconfigIPQoS	"cs[0-7]"
+syn keyword sshconfigIPQoS	ef lowdelay throughput reliability
+syn keyword sshconfigKbdInteractive bsdauth pam skey
+
+syn keyword sshconfigKexAlgo	ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
+syn keyword sshconfigKexAlgo	diffie-hellman-group-exchange-sha256
+syn keyword sshconfigKexAlgo	diffie-hellman-group-exchange-sha1
+syn keyword sshconfigKexAlgo	diffie-hellman-group14-sha1
+syn keyword sshconfigKexAlgo	diffie-hellman-group1-sha1
+
+syn keyword sshconfigTunnel	point-to-point ethernet
+
+syn match sshconfigVar "%[rhplLdun]\>"
 syn match sshconfigSpecial "[*?]"
 syn match sshconfigNumber "\d\+"
 syn match sshconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>"
 syn match sshconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>"
 syn match sshconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}[:/]\d\+\>"
+syn match sshconfigHostPort "\(Host \)\@<=.\+"
+syn match sshconfigHostPort "\(HostName \)\@<=.\+"
+
+" case off
+syn case ignore
+
 
 " Keywords
 syn keyword sshconfigHostSect Host
+
 syn keyword sshconfigKeyword AddressFamily
-syn keyword sshconfigKeyword BatchMode BindAddress
-syn keyword sshconfigKeyword ChallengeResponseAuthentication CheckHostIP
-syn keyword sshconfigKeyword Cipher Ciphers ClearAllForwardings
-syn keyword sshconfigKeyword Compression CompressionLevel ConnectTimeout
-syn keyword sshconfigKeyword ConnectionAttempts ControlMaster
-syn keyword sshconfigKeyword ControlPath DynamicForward
-syn keyword sshconfigKeyword EnableSSHKeysign EscapeChar ExitOnForwardFailure
-syn keyword sshconfigKeyword ForwardAgent ForwardX11
+syn keyword sshconfigKeyword BatchMode
+syn keyword sshconfigKeyword BindAddress
+syn keyword sshconfigKeyword ChallengeResponseAuthentication
+syn keyword sshconfigKeyword CheckHostIP
+syn keyword sshconfigKeyword Cipher
+syn keyword sshconfigKeyword Ciphers
+syn keyword sshconfigKeyword ClearAllForwardings
+syn keyword sshconfigKeyword Compression
+syn keyword sshconfigKeyword CompressionLevel
+syn keyword sshconfigKeyword ConnectTimeout
+syn keyword sshconfigKeyword ConnectionAttempts
+syn keyword sshconfigKeyword ControlMaster
+syn keyword sshconfigKeyword ControlPath
+syn keyword sshconfigKeyword ControlPersist
+syn keyword sshconfigKeyword DynamicForward
+syn keyword sshconfigKeyword EnableSSHKeysign
+syn keyword sshconfigKeyword EscapeChar
+syn keyword sshconfigKeyword ExitOnForwardFailure
+syn keyword sshconfigKeyword ForwardAgent
+syn keyword sshconfigKeyword ForwardX11
+syn keyword sshconfigKeyword ForwardX11Timeout
 syn keyword sshconfigKeyword ForwardX11Trusted
 syn keyword sshconfigKeyword GSSAPIAuthentication
-syn keyword sshconfigKeyword GSSAPIDelegateCredentials GatewayPorts
+syn keyword sshconfigKeyword GSSAPIClientIdentity
+syn keyword sshconfigKeyword GSSAPIDelegateCredentials
+syn keyword sshconfigKeyword GSSAPIKeyExchange
+syn keyword sshconfigKeyword GSSAPIRenewalForcesRekey
+syn keyword sshconfigKeyword GSSAPIServerIdentity
+syn keyword sshconfigKeyword GSSAPITrustDNS
+syn keyword sshconfigKeyword GSSAPITrustDns
+syn keyword sshconfigKeyword GatewayPorts
 syn keyword sshconfigKeyword GlobalKnownHostsFile
-syn keyword sshconfigKeyword HostKeyAlgorithms HashKnownHosts
-syn keyword sshconfigKeyword HostKeyAlias HostName HostbasedAuthentication
-syn keyword sshconfigKeyword IdentitiesOnly IdentityFile
-syn keyword sshconfigKeyword KbdInteractiveAuthentication KbdInteractiveDevices
-syn keyword sshconfigKeyword LocalCommand LocalForward LogLevel
+syn keyword sshconfigKeyword HashKnownHosts
+syn keyword sshconfigKeyword HostKeyAlgorithms
+syn keyword sshconfigKeyword HostKeyAlias
+syn keyword sshconfigKeyword HostName
+syn keyword sshconfigKeyword HostbasedAuthentication
+syn keyword sshconfigKeyword IPQoS
+syn keyword sshconfigKeyword IdentitiesOnly
+syn keyword sshconfigKeyword IdentityFile
+syn keyword sshconfigKeyword KbdInteractiveAuthentication
+syn keyword sshconfigKeyword KbdInteractiveDevices
+syn keyword sshconfigKeyword KexAlgorithms
+syn keyword sshconfigKeyword LocalCommand
+syn keyword sshconfigKeyword LocalForward
+syn keyword sshconfigKeyword LogLevel
 syn keyword sshconfigKeyword MACs
 syn keyword sshconfigKeyword NoHostAuthenticationForLocalhost
 syn keyword sshconfigKeyword NumberOfPasswordPrompts
-syn keyword sshconfigKeyword PasswordAuthentication PermitLocalCommand
-syn keyword sshconfigKeyword Port PreferredAuthentications Protocol
-syn keyword sshconfigKeyword ProxyCommand PubkeyAuthentication
+syn keyword sshconfigKeyword PKCS11Provider
+syn keyword sshconfigKeyword PasswordAuthentication
 syn keyword sshconfigKeyword PermitLocalCommand
-syn keyword sshconfigKeyword RSAAuthentication RemoteForward RekeyLimit
+syn keyword sshconfigKeyword Port
+syn keyword sshconfigKeyword PreferredAuthentications
+syn keyword sshconfigKeyword Protocol
+syn keyword sshconfigKeyword ProxyCommand
+syn keyword sshconfigKeyword PubkeyAuthentication
+syn keyword sshconfigKeyword RSAAuthentication
+syn keyword sshconfigKeyword RekeyLimit
+syn keyword sshconfigKeyword RemoteForward
+syn keyword sshconfigKeyword RequestTTY
 syn keyword sshconfigKeyword RhostsRSAAuthentication
-syn keyword sshconfigKeyword SendEnv ServerAliveCountMax ServerAliveInterval
-syn keyword sshconfigKeyword SmartcardDevice StrictHostKeyChecking
-syn keyword sshconfigKeyword Tunnel TunnelDevice
-syn keyword sshconfigKeyword TCPKeepAlive UsePrivilegedPort User
+syn keyword sshconfigKeyword SendEnv
+syn keyword sshconfigKeyword ServerAliveCountMax
+syn keyword sshconfigKeyword ServerAliveInterval
+syn keyword sshconfigKeyword SmartcardDevice
+syn keyword sshconfigKeyword StrictHostKeyChecking
+syn keyword sshconfigKeyword TCPKeepAlive
+syn keyword sshconfigKeyword Tunnel
+syn keyword sshconfigKeyword TunnelDevice
+syn keyword sshconfigKeyword UseBlacklistedKeys
+syn keyword sshconfigKeyword UsePrivilegedPort
+syn keyword sshconfigKeyword User
 syn keyword sshconfigKeyword UserKnownHostsFile
-syn keyword sshconfigKeyword VerifyHostKeyDNS VisualHostKey
+syn keyword sshconfigKeyword VerifyHostKeyDNS
+syn keyword sshconfigKeyword VisualHostKey
 syn keyword sshconfigKeyword XAuthLocation
 
 " Define the default highlighting
@@ -100,10 +195,16 @@
   HiLink sshconfigConstant       Constant
   HiLink sshconfigYesNo          sshconfigEnum
   HiLink sshconfigCipher         sshconfigEnum
+  HiLink sshconfigCiphers	 sshconfigEnum
   HiLink sshconfigMAC            sshconfigEnum
   HiLink sshconfigHostKeyAlg     sshconfigEnum
   HiLink sshconfigLogLevel       sshconfigEnum
   HiLink sshconfigSysLogFacility sshconfigEnum
+  HiLink sshconfigAddressFamily  sshconfigEnum
+  HiLink sshconfigIPQoS		 sshconfigEnum
+  HiLink sshconfigKbdInteractive sshconfigEnum
+  HiLink sshconfigKexAlgo	 sshconfigEnum
+  HiLink sshconfigTunnel	 sshconfigEnum
   HiLink sshconfigPreferredAuth  sshconfigEnum
   HiLink sshconfigVar            sshconfigEnum
   HiLink sshconfigEnum           Identifier
@@ -114,3 +215,5 @@
 endif
 
 let b:current_syntax = "sshconfig"
+
+" vim:set ts=8 sw=2 sts=2:
diff -Naur vim73.orig/runtime/syntax/sshdconfig.vim vim73/runtime/syntax/sshdconfig.vim
--- vim73.orig/runtime/syntax/sshdconfig.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/sshdconfig.vim	2013-08-04 19:09:09.733946495 +0000
@@ -1,7 +1,12 @@
 " Vim syntax file
-" Language: OpenSSH server configuration file (sshd_config)
-" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2009-07-09
+" Language:	OpenSSH server configuration file (sshd_config)
+" Maintainer:	David Necas (Yeti)
+" Maintainer:   Leonard Ehrenfried <leonard.ehrenfried@web.de>	
+" Modified By:	Thilo Six
+" Originally:	2009-07-09
+" Last Change:	2011 Oct 31 
+" SSH Version:	5.9p1
+"
 
 " Setup
 if version >= 600
@@ -18,27 +23,63 @@
   set iskeyword=_,-,a-z,A-Z,48-57
 endif
 
-syn case ignore
+
+" case on
+syn case match
+
 
 " Comments
-syn match sshdconfigComment "#.*$" contains=sshdconfigTodo
-syn keyword sshdconfigTodo TODO FIXME NOT contained
+syn match sshdconfigComment "^#.*$" contains=sshdconfigTodo
+syn match sshdconfigComment "\s#.*$" contains=sshdconfigTodo
+
+syn keyword sshdconfigTodo TODO FIXME NOTE contained
 
 " Constants
 syn keyword sshdconfigYesNo yes no none
+
 syn keyword sshdconfigAddressFamily any inet inet6
+
 syn keyword sshdconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
-syn keyword sshdconfigCipher aes192-cbc aes256-cbc aes128-ctr aes256-ctr
+syn keyword sshdconfigCipher aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr
 syn keyword sshdconfigCipher arcfour arcfour128 arcfour256 cast128-cbc
+
 syn keyword sshdconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
 syn keyword sshdconfigMAC hmac-md5-96
-syn match sshdconfigMAC "\<umac-64@openssh\.com\>"
+syn keyword sshdconfigMAC hmac-sha2-256 hmac-sha256-96 hmac-sha2-512
+syn keyword sshdconfigMAC hmac-sha2-512-96
+syn match   sshdconfigMAC "\<umac-64@openssh\.com\>"
+
 syn keyword sshdconfigRootLogin without-password forced-commands-only
+
 syn keyword sshdconfigLogLevel QUIET FATAL ERROR INFO VERBOSE
 syn keyword sshdconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3
 syn keyword sshdconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1
 syn keyword sshdconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+
+syn keyword sshdconfigCompression    delayed
+
+syn match   sshdconfigIPQoS	"af1[1234]"
+syn match   sshdconfigIPQoS	"af2[23]"
+syn match   sshdconfigIPQoS	"af3[123]"
+syn match   sshdconfigIPQoS	"af4[123]"
+syn match   sshdconfigIPQoS	"cs[0-7]"
+syn keyword sshdconfigIPQoS	ef lowdelay throughput reliability
+
+syn keyword sshdconfigKexAlgo	ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
+syn keyword sshdconfigKexAlgo	diffie-hellman-group-exchange-sha256
+syn keyword sshdconfigKexAlgo	diffie-hellman-group-exchange-sha1
+syn keyword sshdconfigKexAlgo	diffie-hellman-group14-sha1
+syn keyword sshdconfigKexAlgo	diffie-hellman-group1-sha1
+
+syn keyword sshdconfigTunnel	point-to-point ethernet
+
+syn keyword sshdconfigSubsystem internal-sftp
+
+syn match sshdconfigVar	    "%[hu]\>"
+syn match sshdconfigVar	    "%%"
+
 syn match sshdconfigSpecial "[*?]"
+
 syn match sshdconfigNumber "\d\+"
 syn match sshdconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>"
 syn match sshdconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>"
@@ -46,38 +87,93 @@
 syn match sshdconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}:\d\+\>"
 syn match sshdconfigTime "\<\(\d\+[sSmMhHdDwW]\)\+\>"
 
+
+" case off
+syn case ignore
+
+
 " Keywords
 syn keyword sshdconfigMatch Host User Group Address
-syn keyword sshdconfigKeyword AcceptEnv AddressFamily AllowAgentForwarding
-syn keyword sshdconfigKeyword AllowGroups AllowTcpForwarding
-syn keyword sshdconfigKeyword AllowUsers AuthorizedKeysFile
+
+syn keyword sshdconfigKeyword AcceptEnv
+syn keyword sshdconfigKeyword AddressFamily
+syn keyword sshdconfigKeyword AllowAgentForwarding
+syn keyword sshdconfigKeyword AllowGroups
+syn keyword sshdconfigKeyword AllowTcpForwarding
+syn keyword sshdconfigKeyword AllowUsers
+syn keyword sshdconfigKeyword AuthorizedKeysFile
+syn keyword sshdconfigKeyword AuthorizedPrincipalsFile
 syn keyword sshdconfigKeyword Banner
-syn keyword sshdconfigKeyword ChallengeResponseAuthentication ChrootDirectory
-syn keyword sshdconfigKeyword Ciphers ClientAliveCountMax
-syn keyword sshdconfigKeyword ClientAliveInterval Compression
-syn keyword sshdconfigKeyword DenyGroups DenyUsers
+syn keyword sshdconfigKeyword ChallengeResponseAuthentication
+syn keyword sshdconfigKeyword ChrootDirectory
+syn keyword sshdconfigKeyword Ciphers
+syn keyword sshdconfigKeyword ClientAliveCountMax
+syn keyword sshdconfigKeyword ClientAliveInterval
+syn keyword sshdconfigKeyword Compression
+syn keyword sshdconfigKeyword DebianBanner
+syn keyword sshdconfigKeyword DenyGroups
+syn keyword sshdconfigKeyword DenyUsers
 syn keyword sshdconfigKeyword ForceCommand
-syn keyword sshdconfigKeyword GatewayPorts GSSAPIAuthentication
+syn keyword sshdconfigKeyword GSSAPIAuthentication
 syn keyword sshdconfigKeyword GSSAPICleanupCredentials
-syn keyword sshdconfigKeyword HostbasedAuthentication HostKey
-syn keyword sshdconfigKeyword IgnoreRhosts IgnoreUserKnownHosts
-syn keyword sshdconfigKeyword KerberosAuthentication KerberosGetAFSToken
-syn keyword sshdconfigKeyword KerberosOrLocalPasswd KerberosTicketCleanup
+syn keyword sshdconfigKeyword GSSAPIKeyExchange
+syn keyword sshdconfigKeyword GSSAPIStoreCredentialsOnRekey
+syn keyword sshdconfigKeyword GSSAPIStrictAcceptorCheck
+syn keyword sshdconfigKeyword GatewayPorts
+syn keyword sshdconfigKeyword HostCertificate
+syn keyword sshdconfigKeyword HostKey
+syn keyword sshdconfigKeyword HostbasedAuthentication
+syn keyword sshdconfigKeyword HostbasedUsesNameFromPacketOnly
+syn keyword sshdconfigKeyword IPQoS
+syn keyword sshdconfigKeyword IgnoreRhosts
+syn keyword sshdconfigKeyword IgnoreUserKnownHosts
+syn keyword sshdconfigKeyword KbdInteractiveAuthentication
+syn keyword sshdconfigKeyword KerberosAuthentication
+syn keyword sshdconfigKeyword KerberosGetAFSToken
+syn keyword sshdconfigKeyword KerberosOrLocalPasswd
+syn keyword sshdconfigKeyword KerberosTicketCleanup
+syn keyword sshdconfigKeyword KexAlgorithms
 syn keyword sshdconfigKeyword KeyRegenerationInterval
-syn keyword sshdconfigKeyword ListenAddress LoginGraceTime LogLevel
-syn keyword sshdconfigKeyword MACs Match MaxAuthTries MaxSessions MaxStartups
-syn keyword sshdconfigKeyword PasswordAuthentication PermitEmptyPasswords
-syn keyword sshdconfigKeyword PermitRootLogin PermitOpen PermitTunnel
-syn keyword sshdconfigKeyword PermitUserEnvironment PidFile Port
-syn keyword sshdconfigKeyword PrintLastLog PrintMotd Protocol
+syn keyword sshdconfigKeyword ListenAddress
+syn keyword sshdconfigKeyword LogLevel
+syn keyword sshdconfigKeyword LoginGraceTime
+syn keyword sshdconfigKeyword MACs
+syn keyword sshdconfigKeyword Match
+syn keyword sshdconfigKeyword MaxAuthTries
+syn keyword sshdconfigKeyword MaxSessions
+syn keyword sshdconfigKeyword MaxStartups
+syn keyword sshdconfigKeyword PasswordAuthentication
+syn keyword sshdconfigKeyword PermitBlacklistedKeys
+syn keyword sshdconfigKeyword PermitEmptyPasswords
+syn keyword sshdconfigKeyword PermitOpen
+syn keyword sshdconfigKeyword PermitRootLogin
+syn keyword sshdconfigKeyword PermitTunnel
+syn keyword sshdconfigKeyword PermitUserEnvironment
+syn keyword sshdconfigKeyword PidFile
+syn keyword sshdconfigKeyword Port
+syn keyword sshdconfigKeyword PrintLastLog
+syn keyword sshdconfigKeyword PrintMotd
+syn keyword sshdconfigKeyword Protocol
 syn keyword sshdconfigKeyword PubkeyAuthentication
-syn keyword sshdconfigKeyword RhostsRSAAuthentication RSAAuthentication
-syn keyword sshdconfigKeyword ServerKeyBits ShowPatchLevel StrictModes
-syn keyword sshdconfigKeyword Subsystem SyslogFacility
+syn keyword sshdconfigKeyword RSAAuthentication
+syn keyword sshdconfigKeyword RevokedKeys
+syn keyword sshdconfigKeyword RhostsRSAAuthentication
+syn keyword sshdconfigKeyword ServerKeyBits
+syn keyword sshdconfigKeyword ShowPatchLevel
+syn keyword sshdconfigKeyword StrictModes
+syn keyword sshdconfigKeyword Subsystem
+syn keyword sshdconfigKeyword SyslogFacility
 syn keyword sshdconfigKeyword TCPKeepAlive
-syn keyword sshdconfigKeyword UseDNS UseLogin UsePAM UsePrivilegeSeparation
-syn keyword sshdconfigKeyword X11DisplayOffset X11Forwarding
-syn keyword sshdconfigKeyword X11UseLocalhost XAuthLocation
+syn keyword sshdconfigKeyword TrustedUserCAKeys
+syn keyword sshdconfigKeyword UseDNS
+syn keyword sshdconfigKeyword UseLogin
+syn keyword sshdconfigKeyword UsePAM
+syn keyword sshdconfigKeyword UsePrivilegeSeparation
+syn keyword sshdconfigKeyword X11DisplayOffset
+syn keyword sshdconfigKeyword X11Forwarding
+syn keyword sshdconfigKeyword X11UseLocalhost
+syn keyword sshdconfigKeyword XAuthLocation
+
 
 " Define the default highlighting
 if version >= 508 || !exists("did_sshdconfig_syntax_inits")
@@ -101,6 +197,12 @@
   HiLink sshdconfigRootLogin      sshdconfigEnum
   HiLink sshdconfigLogLevel       sshdconfigEnum
   HiLink sshdconfigSysLogFacility sshdconfigEnum
+  HiLink sshdconfigVar		  sshdconfigEnum
+  HiLink sshdconfigCompression    sshdconfigEnum
+  HiLink sshdconfigIPQoS	  sshdconfigEnum
+  HiLink sshdconfigKexAlgo	  sshdconfigEnum
+  HiLink sshdconfigTunnel	  sshdconfigEnum
+  HiLink sshdconfigSubsystem	  sshdconfigEnum
   HiLink sshdconfigEnum           Function
   HiLink sshdconfigSpecial        Special
   HiLink sshdconfigKeyword        Keyword
@@ -109,3 +211,5 @@
 endif
 
 let b:current_syntax = "sshdconfig"
+
+" vim:set ts=8 sw=2 sts=2:
diff -Naur vim73.orig/runtime/syntax/st.vim vim73/runtime/syntax/st.vim
--- vim73.orig/runtime/syntax/st.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/st.vim	2013-08-04 19:09:09.733946495 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Smalltalk
 " Maintainer:	Arndt Hesse <hesse@self.de>
-" Last Change:	2001 May 09
+" Last Change:	2012 Feb 12 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " some Smalltalk keywords and standard methods
 syn keyword	stKeyword	super self class true false new not
 syn keyword	stKeyword	notNil isNil inspect out nil
@@ -100,3 +103,6 @@
 endif
 
 let b:current_syntax = "st"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/sudoers.vim vim73/runtime/syntax/sudoers.vim
--- vim73.orig/runtime/syntax/sudoers.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/sudoers.vim	2013-08-04 19:09:09.740613142 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         sudoers(5) configuration files
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2007-08-02
+" Latest Revision:  2011-02-24
 
 if exists("b:current_syntax")
   finish
@@ -149,10 +149,86 @@
 
 " TODO: could also deal with special characters here
 syn match   sudoersBooleanParameter contained '!' nextgroup=sudoersBooleanParameter skipwhite skipnl
-syn keyword sudoersBooleanParameter contained long_opt_prompt ignore_dot mail_always mail_badpass mail_no_user mail_no_perms tty_tickets lecture authenticate root_sudo log_host log_year shell_noargs set_home always_set_home path_info preserve_groups fqdn insults requiretty env_editor rootpw runaspw targetpw set_logname stay_setuid env_reset use_loginclass nextgroup=sudoersParameterListComma skipwhite skipnl
-syn keyword sudoersIntegerParameter contained passwd_tries loglinelen timestamp_timeout passwd_timeout umask nextgroup=sudoersIntegerParameterEquals skipwhite skipnl
-syn keyword sudoersStringParameter  contained mailsub badpass_message timestampdir timestampowner passprompt runas_default syslog_goodpri syslog_badpri editor logfile syslog mailerpath mailerflags mailto exempt_group verifypw listpw nextgroup=sudoersStringParameterEquals skipwhite skipnl
-syn keyword sudoersListParameter    contained env_check env_delete env_keep nextgroup=sudoersListParameterEquals skipwhite skipnl
+syn keyword sudoersBooleanParameter contained skipwhite skipnl
+                                  \ always_set_home
+                                  \ authenticate
+                                  \ closefrom_override
+                                  \ env_editor
+                                  \ env_reset
+                                  \ fqdn
+                                  \ ignore_dot
+                                  \ ignore_local_sudoers
+                                  \ insults
+                                  \ log_host
+                                  \ log_year
+                                  \ long_otp_prompt
+                                  \ mail_always
+                                  \ mail_badpass
+                                  \ mail_no_host
+                                  \ mail_no_perms
+                                  \ mail_no_user
+                                  \ noexec
+                                  \ path_info
+                                  \ passprompt_override
+                                  \ preserve_groups
+                                  \ requiretty
+                                  \ root_sudo
+                                  \ rootpw
+                                  \ runaspw
+                                  \ set_home
+                                  \ set_logname
+                                  \ setenv
+                                  \ shell_noargs
+                                  \ stay_setuid
+                                  \ targetpw
+                                  \ tty_tickets
+                                  \ visiblepw
+
+syn keyword sudoersIntegerParameter contained
+                                  \ nextgroup=sudoersIntegerParameterEquals
+                                  \ skipwhite skipnl
+                                  \ closefrom
+                                  \ passwd_tries
+                                  \ loglinelen
+                                  \ passwd_timeout
+                                  \ timestamp_timeout
+                                  \ umask
+
+syn keyword sudoersStringParameter  contained
+                                  \ nextgroup=sudoersStringParameterEquals
+                                  \ skipwhite skipnl
+                                  \ badpass_message
+                                  \ editor
+                                  \ mailsub
+                                  \ noexec_file
+                                  \ passprompt
+                                  \ runas_default
+                                  \ syslog_badpri
+                                  \ syslog_goodpri
+                                  \ sudoers_locale
+                                  \ timestampdir
+                                  \ timestampowner
+                                  \ askpass
+                                  \ env_file
+                                  \ exempt_group
+                                  \ lecture
+                                  \ lecture_file
+                                  \ listpw
+                                  \ logfile
+                                  \ mailerflags
+                                  \ mailerpath
+                                  \ mailfrom
+                                  \ mailto
+                                  \ secure_path
+                                  \ syslog
+                                  \ verifypw
+
+syn keyword sudoersListParameter    contained
+                                  \ nextgroup=sudoersListParameterEquals
+                                  \ skipwhite skipnl
+                                  \ env_check
+                                  \ env_delete
+                                  \ env_keep
 
 syn match   sudoersParameterListComma contained ',' nextgroup=@sudoersParameter skipwhite skipnl
 
diff -Naur vim73.orig/runtime/syntax/svn.vim vim73/runtime/syntax/svn.vim
--- vim73.orig/runtime/syntax/svn.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/svn.vim	2013-08-04 19:09:09.740613142 +0000
@@ -1,14 +1,16 @@
 " Vim syntax file
 " Language:     Subversion (svn) commit file
-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
-" URL:          http://www.hlabs.spb.ru/vim/svn.vim
-" Revision:     $Id: svn.vim 683 2008-07-30 11:52:38Z hdima $
+" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
+" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/svn.vim
+" Last Change:  2012-07-21
 " Filenames:    svn-commit*.tmp
-" Version:      1.6
+" Version:      1.9
 
 " Contributors:
 "   Stefano Zacchiroli
 "   A. S. Budden
+"   Myk Taylor
+"   Ingo Karkat
 
 " For version 5.x: Clear all syntax items.
 " For version 6.x: Quit when a syntax file was already loaded.
@@ -18,11 +20,14 @@
   finish
 endif
 
-syn region svnRegion    start="^--.*--$" end="\%$" contains=ALL contains=@NoSpell
+syn region svnText      start="\%^" end="^--.*--$"me=s-1 contains=@Spell
+
+syn region svnRegion    start="^--.*--$" end="\%$" contains=ALL
 syn match svnRemoved    "^D    .*$" contained
-syn match svnAdded      "^A[ M]   .*$" contained
-syn match svnModified   "^M[ M]   .*$" contained
-syn match svnProperty   "^_M   .*$" contained
+syn match svnRenamed    "^R[ M][ U][ +] .*$" contained
+syn match svnAdded      "^A[ M][ U][ +] .*$" contained
+syn match svnModified   "^M[ M][ U]  .*$" contained
+syn match svnProperty   "^_M[ U]  .*$" contained
 
 " Synchronization.
 syn sync clear
@@ -44,6 +49,7 @@
   HiLink svnAdded       Identifier
   HiLink svnModified    Special
   HiLink svnProperty    Special
+  HiLink svnRenamed     Special
 
   delcommand HiLink
 endif
diff -Naur vim73.orig/runtime/syntax/synload.vim vim73/runtime/syntax/synload.vim
--- vim73.orig/runtime/syntax/synload.vim	2010-08-08 13:25:06.000000000 +0000
+++ vim73/runtime/syntax/synload.vim	2013-08-04 19:09:09.743946465 +0000
@@ -1,6 +1,6 @@
 " Vim syntax support file
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2010 Aug 08
+" Last Change:	2012 Sep 25
 
 " This file sets up for syntax highlighting.
 " It is loaded from "syntax.vim" and "manual.vim".
@@ -46,6 +46,8 @@
       echohl None
     endif
     let s = &filetype
+  elseif s == "OFF"
+    let s = ""
   endif
 
   if s != ""
@@ -59,7 +61,7 @@
 
 
 " Handle adding doxygen to other languages (C, C++, C#, IDL)
-au Syntax c,cpp,cs,idl
+au Syntax c,cpp,cs,idl,php
 	\ if (exists('b:load_doxygen_syntax') && b:load_doxygen_syntax)
 	\	|| (exists('g:load_doxygen_syntax') && g:load_doxygen_syntax)
 	\   | runtime! syntax/doxygen.vim
diff -Naur vim73.orig/runtime/syntax/sysctl.vim vim73/runtime/syntax/sysctl.vim
--- vim73.orig/runtime/syntax/sysctl.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/sysctl.vim	2013-08-04 19:09:09.747279789 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:         sysctl.conf(5) configuration file
 " Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2006-04-19
+" Latest Revision:  2011-05-02
 
 if exists("b:current_syntax")
   finish
@@ -13,7 +13,7 @@
 syn match   sysctlBegin   display '^'
                           \ nextgroup=sysctlToken,sysctlComment skipwhite
 
-syn match   sysctlToken   contained display '\S\+'
+syn match   sysctlToken   contained display '[^=]\+'
                           \ nextgroup=sysctlTokenEq skipwhite
 
 syn match   sysctlTokenEq contained display '=' nextgroup=sysctlValue skipwhite
diff -Naur vim73.orig/runtime/syntax/taskdata.vim vim73/runtime/syntax/taskdata.vim
--- vim73.orig/runtime/syntax/taskdata.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/taskdata.vim	2013-08-04 19:09:09.753946435 +0000
@@ -11,6 +11,8 @@
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Key Names for values.
 syn keyword taskdataKey		description due end entry imask mask parent
@@ -40,4 +42,7 @@
 
 let b:current_syntax = "taskdata"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:noexpandtab
diff -Naur vim73.orig/runtime/syntax/taskedit.vim vim73/runtime/syntax/taskedit.vim
--- vim73.orig/runtime/syntax/taskedit.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/taskedit.vim	2013-08-04 19:09:09.753946435 +0000
@@ -11,6 +11,8 @@
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn match taskeditHeading	"^\s*#\s*Name\s\+Editable details\s*$" contained
 syn match taskeditHeading	"^\s*#\s*-\+\s\+-\+\s*$" contained
@@ -32,4 +34,7 @@
 
 let b:current_syntax = "taskedit"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:noexpandtab
diff -Naur vim73.orig/runtime/syntax/tasm.vim vim73/runtime/syntax/tasm.vim
--- vim73.orig/runtime/syntax/tasm.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/tasm.vim	2013-08-04 19:09:09.757279758 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language: TASM: turbo assembler by Borland
 " Maintaner: FooLman of United Force <foolman@bigfoot.com>
-" Last change: 22 aug 2000
+" Last Change: 2012 Feb 03 by Thilo Six
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,6 +11,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn case ignore
 syn match tasmLabel "^[\ \t]*[@a-z_$][a-z0-9_$@]*\ *:"
 syn keyword tasmDirective ALIAS ALIGN ARG ASSUME %BIN CATSRT CODESEG
@@ -120,3 +123,6 @@
 endif
 
 let b:curret_syntax = "tasm"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/tex.vim vim73/runtime/syntax/tex.vim
--- vim73.orig/runtime/syntax/tex.vim	2010-08-13 11:58:36.000000000 +0000
+++ vim73/runtime/syntax/tex.vim	2013-08-04 19:09:09.763946405 +0000
@@ -1,9 +1,9 @@
 " Vim syntax file
 " Language:	TeX
-" Maintainer:	Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
-" Last Change:	Aug 12, 2010 
-" Version:	57
-" URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
+" Maintainer:	Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
+" Last Change:	Jun 24, 2013
+" Version:	79
+" URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
 "
 " Notes: {{{1
 "
@@ -37,6 +37,8 @@
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 scriptencoding utf-8
 
 " Define the default highlighting. {{{1
@@ -50,14 +52,29 @@
   command -nargs=+ HiLink hi def link <args>
  endif
 endif
-if exists("g:tex_tex") && !exists("g:tex_no_error")
- let g:tex_no_error= 1
+if exists("g:tex_no_error") && g:tex_no_error
+ let s:tex_no_error= 1
+endif
+
+" by default, enable all region-based highlighting
+let s:tex_fast= "bcmMprsSvV"
+if exists("g:tex_fast")
+ if type(g:tex_fast) != 1
+  " g:tex_fast exists and is not a string, so
+  " turn off all optional region-based highighting
+  let s:tex_fast= ""
+ else
+  let s:tex_fast= g:tex_fast
+ endif
+ let s:tex_no_error= 1
+else
+ let s:tex_fast= "bcmMprsSvV"
 endif
 
 " let user determine which classes of concealment will be supported
 "   a=accents/ligatures d=delimiters m=math symbols  g=Greek  s=superscripts/subscripts
 if !exists("g:tex_conceal")
- let s:tex_conceal= 'admgs'
+ let s:tex_conceal= 'abdmgsS'
 else
  let s:tex_conceal= g:tex_conceal
 endif
@@ -67,11 +84,11 @@
 "   g:tex_stylish to 1      (for    "*.sty" mode)
 "    or to           0 else (normal "*.tex" mode)
 " or on a buffer-by-buffer basis with b:tex_stylish
-let b:extfname=expand("%:e")
+let s:extfname=expand("%:e")
 if exists("g:tex_stylish")
  let b:tex_stylish= g:tex_stylish
 elseif !exists("b:tex_stylish")
- if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
+ if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
   let b:tex_stylish= 1
  else
   let b:tex_stylish= 0
@@ -89,30 +106,40 @@
  setl fdm=syntax
 endif
 
-" (La)TeX keywords: only use the letters a-zA-Z {{{1
+" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
 " but _ is the only one that causes problems.
-if version < 600
-  set isk-=_
-  if b:tex_stylish
-    set isk+=@
-  endif
+" One may override this iskeyword setting by providing
+" g:tex_isk
+if exists("g:tex_isk")
+ exe "setlocal isk=".g:tex_isk
 else
-  setlocal isk-=_
-  if b:tex_stylish
-    setlocal isk+=@
-  endif
+ setlocal isk=48-57,a-z,A-Z,192-255
+endif
+if b:tex_stylish
+  setlocal isk+=@-@
+endif
+if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
+ let g:tex_comment_nospell= 1
 endif
 
 " Clusters: {{{1
 " --------
-syn cluster texCmdGroup		contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSectionMarker,texSectionName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
-if !exists("g:tex_no_error")
+syn cluster texCmdGroup		contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
+if !exists("s:tex_no_error")
  syn cluster texCmdGroup	add=texMathError
 endif
 syn cluster texEnvGroup		contains=texMatcher,texMathDelim,texSpecialChar,texStatement
-syn cluster texFoldGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texSectionMarker,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract
-syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
-syn cluster texStyleGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
+syn cluster texFoldGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texNoSpell
+syn cluster texBoldGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell
+syn cluster texItalGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texItalBoldStyle,texNoSpell
+if !exists("g:tex_nospell") || !g:tex_nospell
+ syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
+ syn cluster texStyleGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
+else
+ syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
+ syn cluster texStyleGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
+endif
+syn cluster texPreambleMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
 syn cluster texRefGroup		contains=texMatcher,texComment,texDelimiter
 if !exists("tex_no_math")
  syn cluster texMathZones	contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
@@ -120,7 +147,7 @@
  syn cluster texMathDelimGroup	contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
  syn cluster texMathMatchGroup	contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone
  syn cluster texMathZoneGroup	contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
- if !exists("g:tex_no_error")
+ if !exists("s:tex_no_error")
   syn cluster texMathMatchGroup	add=texMathError
   syn cluster texMathZoneGroup	add=texMathError
  endif
@@ -141,22 +168,30 @@
 endif
 
 " Try to flag {} and () mismatches: {{{1
-if !exists("g:tex_no_error")
- syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup,texError
- syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup,texError
-else
- syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup
- syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup
+if s:tex_fast =~ 'm'
+  if !exists("s:tex_no_error")
+   syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup,texError
+   syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup,texError,@NoSpell
+  else
+   syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup
+   syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup
+  endif
+  if !exists("g:tex_nospell") || !g:tex_nospell
+   syn region texParen		start="("						end=")"		contains=@texMatchGroup,@Spell
+  else
+   syn region texParen		start="("						end=")"		contains=@texMatchGroup
+  endif
 endif
-syn region texParen		start="("						end=")"		contains=@texMatchGroup,@Spell
-if !exists("g:tex_no_error")
+if !exists("s:tex_no_error")
  syn match  texError		"[}\])]"
 endif
-if !exists("tex_no_math")
- if !exists("g:tex_no_error")
-  syn match  texMathError	"}"	contained
- endif
- syn region texMathMatcher	matchgroup=Delimiter start="{"  skip="\\\\\|\\}"  end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
+if s:tex_fast =~ 'M'
+  if !exists("tex_no_math")
+   if !exists("s:tex_no_error")
+    syn match  texMathError	"}"	contained
+   endif
+   syn region texMathMatcher	matchgroup=Delimiter	start="{"          skip="\\\\\|\\}"     end="}" end="%stopzone\>"	contained contains=@texMathMatchGroup
+  endif
 endif
 
 " TeX/LaTeX keywords: {{{1
@@ -166,7 +201,7 @@
   syn match texStatement	"\\[a-zA-Z@]\+"
 else
   syn match texStatement	"\\\a\+"
-  if !exists("g:tex_no_error")
+  if !exists("s:tex_no_error")
    syn match texError		"\\\a*@[a-zA-Z@]*"
   endif
 endif
@@ -174,9 +209,10 @@
 " TeX/LaTeX delimiters: {{{1
 syn match texDelimiter		"&"
 syn match texDelimiter		"\\\\"
+syn match texDelimiter		"[{}]"
 
 " Tex/Latex Options: {{{1
-syn match texOption	"[^\\]\zs#\d\+\|^#\d\+"
+syn match texOption		"[^\\]\zs#\d\+\|^#\d\+"
 
 " texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
 if b:tex_stylish
@@ -192,17 +228,21 @@
 syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
 
 " \begin{}/\end{} section markers: {{{1
-syn match  texSectionMarker	"\\begin\>\|\\end\>" nextgroup=texSectionName
-syn region texSectionName	matchgroup=Delimiter start="{" end="}"  contained	nextgroup=texSectionModifier	contains=texComment
-syn region texSectionModifier	matchgroup=Delimiter start="\[" end="]" contained	contains=texComment
+syn match  texBeginEnd		"\\begin\>\|\\end\>" nextgroup=texBeginEndName
+if s:tex_fast =~ 'm'
+  syn region texBeginEndName	matchgroup=Delimiter	start="{"		end="}"	contained	nextgroup=texBeginEndModifier	contains=texComment
+  syn region texBeginEndModifier	matchgroup=Delimiter	start="\["		end="]"	contained	contains=texComment,@NoSpell
+endif
 
 " \documentclass, \documentstyle, \usepackage: {{{1
-syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texSectionName,texDocTypeArgs
-syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texSectionName	contains=texComment
+syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texBeginEndName,texDocTypeArgs
+if s:tex_fast =~ 'm'
+  syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texBeginEndName	contains=texComment,@NoSpell
+endif
 
 " Preamble syntax-based folding support: {{{1
 if g:tex_fold_enabled && has("folding")
- syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texMatchGroup
+ syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texPreambleMatchGroup
 endif
 
 " TeX input: {{{1
@@ -210,7 +250,9 @@
 syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies,texInputFileOpt
 syn match texInputFile		"\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"		contains=texStatement,texInputCurlies,texInputFileOpt
 syn match texInputCurlies	"[{}]"								contained
-syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
+if s:tex_fast =~ 'm'
+ syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
+endif
 
 " Type Styles (LaTeX 2.09): {{{1
 syn match texTypeStyle		"\\rm\>"
@@ -223,8 +265,10 @@
 syn match texTypeStyle		"\\tt\>"
 
 " Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
-syn match texTypeStyle		"\\textbf\>"
-syn match texTypeStyle		"\\textit\>"
+if s:tex_conceal !~ 'b'
+ syn match texTypeStyle		"\\textbf\>"
+ syn match texTypeStyle		"\\textit\>"
+endif
 syn match texTypeStyle		"\\textmd\>"
 syn match texTypeStyle		"\\textrm\>"
 syn match texTypeStyle		"\\textsc\>"
@@ -274,32 +318,70 @@
 syn match texSpaceCodeChar    "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)"	contained
 
 " Sections, subsections, etc: {{{1
-if g:tex_fold_enabled && has("folding")
- syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup,@Spell
- syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup,@Spell
- syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup,@Spell
- syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup,@Spell
- syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
- syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
- syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup,@Spell
- syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup,@Spell
- syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup,@Spell
- syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup,@Spell
-else
- syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup,@Spell
- syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup,@Spell
- syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup,@Spell
- syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup,@Spell
- syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup,@Spell
- syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
- syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup,@Spell
- syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup,@Spell
- syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup,@Spell
- syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup,@Spell
+if s:tex_fast =~ 'p'
+  if !exists("g:tex_nospell") || !g:tex_nospell
+   if g:tex_fold_enabled && has("folding")
+    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup,@Spell
+    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup,@Spell
+    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup,@Spell
+    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup,@Spell
+    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
+    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup,@Spell
+    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup,@Spell
+    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup,@Spell
+    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup,@Spell
+   else
+    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup,@Spell
+    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup,@Spell
+    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup,@Spell
+    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup,@Spell
+    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup,@Spell
+    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup,@Spell
+    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup,@Spell
+    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup,@Spell
+    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup,@Spell
+   endif
+  else
+   if g:tex_fold_enabled && has("folding")
+    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup
+    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup
+    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup
+    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup
+    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup
+    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup
+    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup
+    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup
+    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup
+    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup
+   else
+    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup
+    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup
+    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup
+    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup
+    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup
+    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup
+    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup
+    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup
+    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup
+    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup
+   endif
+  endif
+endif
+
+" particular support for bold and italic {{{1
+if s:tex_fast =~ 'b'
+  if s:tex_conceal =~ 'b'
+   syn region texBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
+   syn region texBoldItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
+   syn region texItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
+   syn region texItalBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
+  endif
 endif
 
 " Bad Math (mismatched): {{{1
-if !exists("tex_no_math")
+if !exists("g:tex_no_math") && !exists("s:tex_no_error")
  syn match texBadMath		"\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
  syn match texBadMath		"\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
  syn match texBadMath		"\\[\])]"
@@ -320,17 +402,21 @@
     let foldcmd= ""
    endif
    exe "syn cluster texMathZones add=".grpname
-   exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
-   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
-   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+   if s:tex_fast =~ 'M'
+    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
+    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+   endif
    exe 'hi def link '.grpname.' texMath'
    if a:starform
     let grpname  = "texMathZone".a:sfx.'S'
     let syncname = "texSyncMathZone".a:sfx.'S'
     exe "syn cluster texMathZones add=".grpname
-    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
-    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
-    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+    if s:tex_fast =~ 'M'
+     exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
+     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+    endif
     exe 'hi def link '.grpname.' texMath'
    endif
  endfun
@@ -350,42 +436,85 @@
  call TexNewMathZone("L","xxalignat",0)
 
  " Inline Math Zones: {{{2
- if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
-  syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
-  syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
-  syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"		concealends contains=@texMathZoneGroup
-  syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	concealends keepend		contains=@texMathZoneGroup
- else
-  syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend contains=@texMathZoneGroup
-  syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend contains=@texMathZoneGroup
-  syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"	contains=@texMathZoneGroup
-  syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	keepend		contains=@texMathZoneGroup
+ if s:tex_fast =~ 'M'
+  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
+   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
+   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
+   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"		concealends contains=@texMathZoneGroup
+   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	concealends keepend		contains=@texMathZoneGroup
+  else
+   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend contains=@texMathZoneGroup
+   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend contains=@texMathZoneGroup
+   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"	contains=@texMathZoneGroup
+   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	keepend		contains=@texMathZoneGroup
+  endif
+  syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{"	matchgroup=texStatement end="}" end="%stopzone\>"	contains=@texMathZoneGroup
  endif
- syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{"	matchgroup=texStatement end="}" end="%stopzone\>"	contains=@texMathZoneGroup
 
  syn match texMathOper		"[_^=]" contained
 
  " Text Inside Math Zones: {{{2
- syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup,@Spell
+ if s:tex_fast =~ 'M'
+  if !exists("g:tex_nospell") || !g:tex_nospell
+   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup,@Spell
+  else
+   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup
+  endif
+ endif
 
  " \left..something.. and \right..something.. support: {{{2
  syn match   texMathDelimBad	contained		"\S"
  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
   syn match   texMathDelim	contained		"\\left\\{\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
   syn match   texMathDelim	contained		"\\right\\}\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
+  let s:texMathDelimList=[
+     \ ['<'            , '<'] ,
+     \ ['>'            , '>'] ,
+     \ ['('            , '('] ,
+     \ [')'            , ')'] ,
+     \ ['\['           , '['] ,
+     \ [']'            , ']'] ,
+     \ ['\\{'          , '{'] ,
+     \ ['\\}'          , '}'] ,
+     \ ['|'            , '|'] ,
+     \ ['\\|'          , '‖'] ,
+     \ ['\\backslash'  , '\'] ,
+     \ ['\\downarrow'  , '↓'] ,
+     \ ['\\Downarrow'  , '⇓'] ,
+     \ ['\\langle'     , '<'] ,
+     \ ['\\lbrace'     , '['] ,
+     \ ['\\lceil'      , '⌈'] ,
+     \ ['\\lfloor'     , '⌊'] ,
+     \ ['\\lgroup'     , '⌊'] ,
+     \ ['\\lmoustache' , '⎛'] ,
+     \ ['\\rangle'     , '>'] ,
+     \ ['\\rbrace'     , ']'] ,
+     \ ['\\rceil'      , '⌉'] ,
+     \ ['\\rfloor'     , '⌋'] ,
+     \ ['\\rgroup'     , '⌋'] ,
+     \ ['\\rmoustache' , '⎞'] ,
+     \ ['\\uparrow'    , '↑'] ,
+     \ ['\\Uparrow'    , '↑'] ,
+     \ ['\\updownarrow', '↕'] ,
+     \ ['\\Updownarrow', '⇕']]
+  syn match texMathDelim	'\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
+  for texmath in s:texMathDelimList
+   exe "syn match texMathDelim	'\\\\[bB]igg\\=[lr]\\=".texmath[0]."'	contained conceal cchar=".texmath[1]
+  endfor
+
  else
   syn match   texMathDelim	contained		"\\\(left\|right\)\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
+  syn match   texMathDelim	contained		"\\[bB]igg\=[lr]\=\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
+  syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
+  syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
+  syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
+  syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
+  syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
+  syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
+  syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
  endif
- syn match   texMathDelim	contained		"\\\([bB]igg\=[lr]\)\>"			skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
  syn match   texMathDelim	contained		"\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
  syn match   texMathDelim	contained		"\\lefteqn\>"
- syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
- syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
- syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
- syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
- syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
- syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
- syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
 endif
 
 " Special TeX characters  ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
@@ -400,6 +529,13 @@
  syn match texOnlyMath		"[_^]"
 endif
 syn match texSpecialChar	"\^\^[0-9a-f]\{2}\|\^\^\S"
+if s:tex_conceal !~ 'S'
+ syn match texSpecialChar	'\\glq\>'	contained conceal cchar=‚
+ syn match texSpecialChar	'\\grq\>'	contained conceal cchar=‘
+ syn match texSpecialChar	'\\glqq\>'	contained conceal cchar=„
+ syn match texSpecialChar	'\\grqq\>'	contained conceal cchar=“
+ syn match texSpecialChar	'\\hyp\>'	contained conceal cchar=-
+endif
 
 " Comments: {{{1
 "    Normal TeX LaTeX     :   %....
@@ -412,81 +548,85 @@
 syn case ignore
 syn keyword texTodo		contained		combak	fixme	todo	xxx
 syn case match
-if b:extfname == "dtx"
+if s:extfname == "dtx"
   syn match texComment		"\^\^A.*$"	contains=@texCommentGroup
   syn match texComment		"^%\+"		contains=@texCommentGroup
 else
   if g:tex_fold_enabled
    " allows syntax-folding of 2 or more contiguous comment lines
    " single-line comments are not folded
-   syn match  texComment	"%.*$"		contains=@texCommentGroup
-   syn region texComment	start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]' fold
+   syn match  texComment	"%.*$"			contains=@texCommentGroup
+   if s:tex_fast =~ 'c'
+    syn region texComment	start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]' fold
+    syn region texNoSpell	contained fold		matchgroup=texComment start="%\s*nospell\s*{"	end="%\s*nospell\s*}"	contains=@texFoldGroup,@NoSpell
+   endif
   else
-   syn match texComment		"%.*$"		contains=@texCommentGroup
+   syn match texComment		"%.*$"			contains=@texCommentGroup
+   if s:tex_fast =~ 'c'
+    syn region texNoSpell	contained		matchgroup=texComment start="%\s*nospell\s*{"	end="%\s*nospell\s*}"	contains=@texFoldGroup,@NoSpell
+   endif
   endif
 endif
 
 " Separate lines used for verb` and verb# so that the end conditions {{{1
 " will appropriately terminate.
 " If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
-if exists("g:tex_verbspell") && g:tex_verbspell
- syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
- " listings package:
- syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
- " moreverb package:
- syn region texZone		start="\\begin{verbatimtab}"		end="\\end{verbatimtab}\|%stopzone\>"	contains=@Spell
- syn region texZone		start="\\begin{verbatimwrite}"		end="\\end{verbatimwrite}\|%stopzone\>"	contains=@Spell
- syn region texZone		start="\\begin{boxedverbatim}"		end="\\end{boxedverbatim}\|%stopzone\>"	contains=@Spell
- if version < 600
-  syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"			contains=@Spell
-  syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"			contains=@Spell
- else
-   if b:tex_stylish
-    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"			contains=@Spell
+if s:tex_fast =~ 'v'
+  if exists("g:tex_verbspell") && g:tex_verbspell
+   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
+   " listings package:
+   syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
+   if version < 600
+    syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"			contains=@Spell
+    syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"			contains=@Spell
    else
-    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"			contains=@Spell
+     if b:tex_stylish
+      syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"			contains=@Spell
+     else
+      syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"			contains=@Spell
+     endif
    endif
- endif
-else
- syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"
- " listings package:
- syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"
- " moreverb package:
- syn region texZone		start="\\begin{verbatimtab}"		end="\\end{verbatimtab}\|%stopzone\>"
- syn region texZone		start="\\begin{verbatimwrite}"		end="\\end{verbatimwrite}\|%stopzone\>"
- syn region texZone		start="\\begin{boxedverbatim}"		end="\\end{boxedverbatim}\|%stopzone\>"
- if version < 600
-  syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"
-  syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"
- else
-   if b:tex_stylish
-     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
+  else
+   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"
+   if version < 600
+    syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"
+    syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"
    else
-     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
+     if b:tex_stylish
+       syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
+     else
+       syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
+     endif
    endif
- endif
+  endif
 endif
 
 " Tex Reference Zones: {{{1
-syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
-syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
-syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
-syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
-syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
-syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
+if s:tex_fast =~ 'r'
+  syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
+  syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
+  syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
+  syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
+  syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
+  syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
+  syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup,texRefZone	nextgroup=texRefOption,texCite
+  syn region texCite	contained	matchgroup=Delimiter start='{' end='}'		contains=@texRefGroup,texRefZone,texCite
+endif
 syn match  texRefZone		'\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
-syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup,texRefZone	nextgroup=texRefOption,texCite
-syn region texCite	contained	matchgroup=Delimiter start='{' end='}'		contains=@texRefGroup,texRefZone,texCite
 
 " Handle newcommand, newenvironment : {{{1
 syn match  texNewCmd				"\\newcommand\>"			nextgroup=texCmdName skipwhite skipnl
-syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
-syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
-syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
+if s:tex_fast =~ 'V'
+  syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
+  syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
+  syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
+endif
 syn match  texNewEnv				"\\newenvironment\>"			nextgroup=texEnvName skipwhite skipnl
-syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
-syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
-syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
+if s:tex_fast =~ 'V'
+  syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
+  syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
+  syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
+endif
 
 " Definitions/Commands: {{{1
 syn match texDefCmd				"\\def\>"				nextgroup=texDefName skipwhite skipnl
@@ -507,11 +647,15 @@
 syn match texString		"\(``\|''\|,,\)"
 
 " makeatletter -- makeatother sections
-if !exists("g:tex_no_error")
- syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
+if !exists("s:tex_no_error")
+ if s:tex_fast =~ 'S'
+  syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
+ endif
  syn match  texStyleStatement		"\\[a-zA-Z@]\+"	contained
- syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
- syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
+ if s:tex_fast =~ 'S'
+  syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
+  syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
+ endif
 endif
 
 " Conceal mode support (supports set cole=2) {{{1
@@ -521,30 +665,38 @@
  " (many of these symbols were contributed by Björn Winckler)
  if s:tex_conceal =~ 'm'
   let s:texMathList=[
+    \ ['|'		, '‖'],
+    \ ['aleph'		, 'ℵ'],
+    \ ['amalg'		, '∐'],
     \ ['angle'		, '∠'],
     \ ['approx'		, '≈'],
     \ ['ast'		, '∗'],
     \ ['asymp'		, '≍'],
     \ ['backepsilon'	, '∍'],
     \ ['backsimeq'	, '≃'],
+    \ ['backslash'	, '∖'],
     \ ['barwedge'	, '⊼'],
     \ ['because'	, '∵'],
     \ ['between'	, '≬'],
     \ ['bigcap'		, '∩'],
+    \ ['bigcirc'	, '○'],
     \ ['bigcup'		, '∪'],
     \ ['bigodot'	, '⊙'],
     \ ['bigoplus'	, '⊕'],
     \ ['bigotimes'	, '⊗'],
     \ ['bigsqcup'	, '⊔'],
     \ ['bigtriangledown', '∇'],
+    \ ['bigtriangleup'	, '∆'],
     \ ['bigvee'		, '⋁'],
     \ ['bigwedge'	, '⋀'],
     \ ['blacksquare'	, '∎'],
     \ ['bot'		, '⊥'],
+    \ ['bowtie'	        , '⋈'],
     \ ['boxdot'		, '⊡'],
     \ ['boxminus'	, '⊟'],
     \ ['boxplus'	, '⊞'],
     \ ['boxtimes'	, '⊠'],
+    \ ['bullet'	        , '•'],
     \ ['bumpeq'		, '≏'],
     \ ['Bumpeq'		, '≎'],
     \ ['cap'		, '∩'],
@@ -557,29 +709,36 @@
     \ ['circlearrowright', '↻'],
     \ ['circledast'	, '⊛'],
     \ ['circledcirc'	, '⊚'],
+    \ ['clubsuit'	, '♣'],
     \ ['complement'	, '∁'],
     \ ['cong'		, '≅'],
     \ ['coprod'		, '∐'],
+    \ ['copyright'	, '©'],
     \ ['cup'		, '∪'],
     \ ['Cup'		, '⋓'],
     \ ['curlyeqprec'	, '⋞'],
     \ ['curlyeqsucc'	, '⋟'],
     \ ['curlyvee'	, '⋎'],
     \ ['curlywedge'	, '⋏'],
+    \ ['dagger'	        , '†'],
     \ ['dashv'		, '⊣'],
+    \ ['ddagger'	, '‡'],
+    \ ['ddots'	        , '⋱'],
     \ ['diamond'	, '⋄'],
+    \ ['diamondsuit'	, '♢'],
     \ ['div'		, '÷'],
     \ ['doteq'		, '≐'],
     \ ['doteqdot'	, '≑'],
     \ ['dotplus'	, '∔'],
+    \ ['dots'		, '…'],
     \ ['dotsb'		, '⋯'],
     \ ['dotsc'		, '…'],
-    \ ['dots'		, '…'],
     \ ['dotsi'		, '⋯'],
     \ ['dotso'		, '…'],
     \ ['doublebarwedge'	, '⩞'],
     \ ['downarrow'	, '↓'],
     \ ['Downarrow'	, '⇓'],
+    \ ['ell'		, 'ℓ'],
     \ ['emptyset'	, '∅'],
     \ ['eqcirc'		, '≖'],
     \ ['eqsim'		, '≂'],
@@ -588,52 +747,67 @@
     \ ['equiv'		, '≡'],
     \ ['exists'		, '∃'],
     \ ['fallingdotseq'	, '≒'],
+    \ ['flat'		, '♭'],
     \ ['forall'		, '∀'],
+    \ ['frown'		, '⁔'],
     \ ['ge'		, '≥'],
     \ ['geq'		, '≥'],
     \ ['geqq'		, '≧'],
     \ ['gets'		, '←'],
+    \ ['gg'		, '⟫'],
     \ ['gneqq'		, '≩'],
     \ ['gtrdot'		, '⋗'],
     \ ['gtreqless'	, '⋛'],
     \ ['gtrless'	, '≷'],
     \ ['gtrsim'		, '≳'],
+    \ ['hbar'		, 'ℏ'],
+    \ ['heartsuit'	, '♡'],
     \ ['hookleftarrow'	, '↩'],
     \ ['hookrightarrow'	, '↪'],
     \ ['iiint'		, '∭'],
     \ ['iint'		, '∬'],
     \ ['Im'		, 'ℑ'],
+    \ ['imath'		, 'ɩ'],
     \ ['in'		, '∈'],
     \ ['infty'		, '∞'],
     \ ['int'		, '∫'],
     \ ['lceil'		, '⌈'],
     \ ['ldots'		, '…'],
     \ ['le'		, '≤'],
-    \ ['leftarrow'	, '⟵'],
-    \ ['Leftarrow'	, '⟸'],
-    \ ['leftarrowtail'	, '↢'],
+    \ ['leadsto'	, '↝'],
     \ ['left('		, '('],
     \ ['left\['		, '['],
     \ ['left\\{'	, '{'],
+    \ ['leftarrow'	, '⟵'],
+    \ ['Leftarrow'	, '⟸'],
+    \ ['leftarrowtail'	, '↢'],
+    \ ['leftharpoondown', '↽'],
+    \ ['leftharpoonup'	, '↼'],
+    \ ['leftrightarrow'	, '↔'],
     \ ['Leftrightarrow'	, '⇔'],
     \ ['leftrightsquigarrow', '↭'],
     \ ['leftthreetimes'	, '⋋'],
     \ ['leq'		, '≤'],
+    \ ['leq'		, '≤'],
     \ ['leqq'		, '≦'],
     \ ['lessdot'	, '⋖'],
     \ ['lesseqgtr'	, '⋚'],
     \ ['lesssim'	, '≲'],
     \ ['lfloor'		, '⌊'],
+    \ ['ll'		, '≪'],
+    \ ['lmoustache'     , '╭'],
     \ ['lneqq'		, '≨'],
     \ ['ltimes'		, '⋉'],
     \ ['mapsto'		, '↦'],
     \ ['measuredangle'	, '∡'],
     \ ['mid'		, '∣'],
+    \ ['models'		, '╞'],
     \ ['mp'		, '∓'],
     \ ['nabla'		, '∇'],
+    \ ['natural'	, '♮'],
     \ ['ncong'		, '≇'],
-    \ ['nearrow'	, '↗'],
     \ ['ne'		, '≠'],
+    \ ['nearrow'	, '↗'],
     \ ['neg'		, '¬'],
     \ ['neq'		, '≠'],
     \ ['nexists'	, '∄'],
@@ -669,35 +843,45 @@
     \ ['oslash'		, '⊘'],
     \ ['otimes'		, '⊗'],
     \ ['owns'		, '∋'],
+    \ ['P'	        , '¶'],
+    \ ['parallel'	, '║'],
     \ ['partial'	, '∂'],
     \ ['perp'		, '⊥'],
     \ ['pitchfork'	, '⋔'],
     \ ['pm'		, '±'],
-    \ ['precapprox'	, '⪷'],
     \ ['prec'		, '≺'],
+    \ ['precapprox'	, '⪷'],
     \ ['preccurlyeq'	, '≼'],
     \ ['preceq'		, '⪯'],
     \ ['precnapprox'	, '⪹'],
     \ ['precneqq'	, '⪵'],
     \ ['precsim'	, '≾'],
+    \ ['prime'		, '′'],
     \ ['prod'		, '∏'],
     \ ['propto'		, '∝'],
     \ ['rceil'		, '⌉'],
     \ ['Re'		, 'ℜ'],
     \ ['rfloor'		, '⌋'],
-    \ ['rightarrow'	, '⟶'],
-    \ ['Rightarrow'	, '⟹'],
-    \ ['rightarrowtail'	, '↣'],
     \ ['right)'		, ')'],
     \ ['right]'		, ']'],
     \ ['right\\}'	, '}'],
+    \ ['rightarrow'	, '⟶'],
+    \ ['Rightarrow'	, '⟹'],
+    \ ['rightarrowtail'	, '↣'],
+    \ ['rightleftharpoons', '⇌'],
     \ ['rightsquigarrow', '↝'],
     \ ['rightthreetimes', '⋌'],
     \ ['risingdotseq'	, '≓'],
+    \ ['rmoustache'     , '╮'],
     \ ['rtimes'		, '⋊'],
+    \ ['S'	        , '§'],
     \ ['searrow'	, '↘'],
     \ ['setminus'	, '∖'],
+    \ ['sharp'		, '♯'],
     \ ['sim'		, '∼'],
+    \ ['simeq'		, '⋍'],
+    \ ['smile'		, '‿'],
+    \ ['spadesuit'	, '♠'],
     \ ['sphericalangle'	, '∢'],
     \ ['sqcap'		, '⊓'],
     \ ['sqcup'		, '⊔'],
@@ -705,20 +889,22 @@
     \ ['sqsubseteq'	, '⊑'],
     \ ['sqsupset'	, '⊐'],
     \ ['sqsupseteq'	, '⊒'],
+    \ ['star'		, '✫'],
     \ ['subset'		, '⊂'],
     \ ['Subset'		, '⋐'],
     \ ['subseteq'	, '⊆'],
     \ ['subseteqq'	, '⫅'],
     \ ['subsetneq'	, '⊊'],
     \ ['subsetneqq'	, '⫋'],
-    \ ['succapprox'	, '⪸'],
     \ ['succ'		, '≻'],
+    \ ['succapprox'	, '⪸'],
     \ ['succcurlyeq'	, '≽'],
     \ ['succeq'		, '⪰'],
     \ ['succnapprox'	, '⪺'],
     \ ['succneqq'	, '⪶'],
     \ ['succsim'	, '≿'],
     \ ['sum'		, '∑'],
+    \ ['supset'		, '⊃'],
     \ ['Supset'		, '⋑'],
     \ ['supseteq'	, '⊇'],
     \ ['supseteqq'	, '⫆'],
@@ -730,6 +916,7 @@
     \ ['times'		, '×'],
     \ ['to'		, '→'],
     \ ['top'		, '⊤'],
+    \ ['triangle'	, '∆'],
     \ ['triangleleft'	, '⊲'],
     \ ['trianglelefteq'	, '⊴'],
     \ ['triangleq'	, '≜'],
@@ -747,13 +934,21 @@
     \ ['vDash'		, '⊨'],
     \ ['Vdash'		, '⊩'],
     \ ['vdots'		, '⋮'],
-    \ ['veebar'		, '⊻'],
     \ ['vee'		, '∨'],
+    \ ['veebar'		, '⊻'],
     \ ['Vvdash'		, '⊪'],
     \ ['wedge'		, '∧'],
+    \ ['wp'		, '℘'],
     \ ['wr'		, '≀']]
+"    \ ['jmath'		, 'X']
+"    \ ['uminus'	, 'X']
+"    \ ['uplus'		, 'X']
   for texmath in s:texMathList
-   exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
+   if texmath[0] =~ '\w$'
+    exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
+   else
+    exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
+   endif
   endfor
 
   if &ambw == "double"
@@ -763,6 +958,27 @@
    syn match texMathSymbol '\\gg\>'			contained conceal cchar=⟫
    syn match texMathSymbol '\\ll\>'			contained conceal cchar=⟪
   endif
+
+  syn match texMathSymbol '\\hat{a}' contained conceal cchar=â
+  syn match texMathSymbol '\\hat{A}' contained conceal cchar=Â
+  syn match texMathSymbol '\\hat{c}' contained conceal cchar=ĉ
+  syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ĉ
+  syn match texMathSymbol '\\hat{e}' contained conceal cchar=ê
+  syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ê
+  syn match texMathSymbol '\\hat{g}' contained conceal cchar=ĝ
+  syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ĝ
+  syn match texMathSymbol '\\hat{i}' contained conceal cchar=î
+  syn match texMathSymbol '\\hat{I}' contained conceal cchar=Î
+  syn match texMathSymbol '\\hat{o}' contained conceal cchar=ô
+  syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ô
+  syn match texMathSymbol '\\hat{s}' contained conceal cchar=ŝ
+  syn match texMathSymbol '\\hat{S}' contained conceal cchar=Ŝ
+  syn match texMathSymbol '\\hat{u}' contained conceal cchar=û
+  syn match texMathSymbol '\\hat{U}' contained conceal cchar=Û
+  syn match texMathSymbol '\\hat{w}' contained conceal cchar=ŵ
+  syn match texMathSymbol '\\hat{W}' contained conceal cchar=Ŵ
+  syn match texMathSymbol '\\hat{y}' contained conceal cchar=ŷ
+  syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Ŷ
  endif
 
  " Greek {{{2
@@ -814,8 +1030,10 @@
 
  " Superscripts/Subscripts {{{2
  if s:tex_conceal =~ 's'
-  syn region texSuperscript	matchgroup=Delimiter start='\^{'	end='}'	contained concealends contains=texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
-  syn region texSubscript	matchgroup=Delimiter start='_{'		end='}'	contained concealends contains=texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
+  if s:tex_fast =~ 's'
+   syn region texSuperscript	matchgroup=Delimiter start='\^{'	skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
+   syn region texSubscript	matchgroup=Delimiter start='_{'		skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
+  endif
   fun! s:SuperSub(group,leader,pat,cchar)
     exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
     exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
@@ -873,6 +1091,9 @@
   call s:SuperSub('texSuperscript','\^','T','ᵀ')
   call s:SuperSub('texSuperscript','\^','U','ᵁ')
   call s:SuperSub('texSuperscript','\^','W','ᵂ')
+  call s:SuperSub('texSuperscript','\^',',','︐')
+  call s:SuperSub('texSuperscript','\^',':','︓')
+  call s:SuperSub('texSuperscript','\^',';','︔')
   call s:SuperSub('texSuperscript','\^','+','⁺')
   call s:SuperSub('texSuperscript','\^','-','⁻')
   call s:SuperSub('texSuperscript','\^','<','˂')
@@ -897,6 +1118,7 @@
   call s:SuperSub('texSubscript','_','i','ᵢ')
   call s:SuperSub('texSubscript','_','o','ₒ')
   call s:SuperSub('texSubscript','_','u','ᵤ')
+  call s:SuperSub('texSubscript','_',',','︐')
   call s:SuperSub('texSubscript','_','+','₊')
   call s:SuperSub('texSubscript','_','-','₋')
   call s:SuperSub('texSubscript','_','/','ˏ')
@@ -939,18 +1161,23 @@
      endfor
    endfun
    "                  \`  \'  \^  \"  \~  \.  \c  \H  \k  \r  \u  \v
-   call s:Accents('a','à','á','â','ä','ã',' ',' ',' ','ą','å','ă','ă')
-   call s:Accents('A','À','Á','Â','Ä','Ã',' ',' ',' ','Ą','Å','Ă','Ă')
+   call s:Accents('a','à','á','â','ä','ã','ȧ',' ',' ','ą','å','ă','ă')
+   call s:Accents('A','À','Á','Â','Ä','Ã','Ȧ',' ',' ','Ą','Å','Ă','Ă')
    call s:Accents('c',' ','ć','ĉ',' ',' ','ċ','ç',' ',' ',' ',' ','č')
    call s:Accents('C',' ','Ć','Ĉ',' ',' ','Ċ','Ç',' ',' ',' ',' ','Č')
    call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ď')
    call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ď')
    call s:Accents('e','è','é','ê','ë','ẽ','ė','ȩ',' ','ę',' ','ĕ','ě')
    call s:Accents('E','È','É','Ê','Ë','Ẽ','Ė','Ȩ',' ','Ę',' ','Ĕ','Ě')
-   call s:Accents('g',' ',' ',' ',' ',' ','ġ','ģ',' ',' ',' ','ğ',' ')
-   call s:Accents('G',' ',' ',' ',' ',' ','Ġ','Ģ',' ',' ',' ','Ğ',' ')
+   call s:Accents('g',' ','ǵ','ĝ',' ',' ','ġ','ģ',' ',' ',' ','ğ',' ')
+   call s:Accents('G',' ','Ǵ','Ĝ',' ',' ','Ġ','Ģ',' ',' ',' ','Ğ',' ')
+   call s:Accents('h',' ',' ','ĥ',' ',' ',' ',' ',' ',' ',' ',' ','ȟ')
+   call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ȟ')
    call s:Accents('i','ì','í','î','ï','ĩ','į',' ',' ',' ',' ','ĭ',' ')
    call s:Accents('I','Ì','Í','Î','Ï','Ĩ','İ',' ',' ',' ',' ','Ĭ',' ')
+   call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','ǰ')
+   call s:Accents('k',' ',' ',' ',' ',' ',' ','ķ',' ',' ',' ',' ',' ')
+   call s:Accents('K',' ',' ',' ',' ',' ',' ','Ķ',' ',' ',' ',' ',' ')
    call s:Accents('l',' ','ĺ','ľ',' ',' ',' ','ļ',' ',' ',' ',' ','ľ')
    call s:Accents('L',' ','Ĺ','Ľ',' ',' ',' ','Ļ',' ',' ',' ',' ','Ľ')
    call s:Accents('n',' ','ń',' ',' ','ñ',' ','ņ',' ',' ',' ',' ','ň')
@@ -959,12 +1186,12 @@
    call s:Accents('O','Ò','Ó','Ô','Ö','Õ','Ȯ',' ','Ő','Ǫ',' ','Ŏ',' ')
    call s:Accents('r',' ','ŕ',' ',' ',' ',' ','ŗ',' ',' ',' ',' ','ř')
    call s:Accents('R',' ','Ŕ',' ',' ',' ',' ','Ŗ',' ',' ',' ',' ','Ř')
-   call s:Accents('s',' ','ś','ŝ',' ',' ',' ','ş',' ',' ',' ',' ','š')
+   call s:Accents('s',' ','ś','ŝ',' ',' ',' ','ş',' ','ȿ',' ',' ','š')
    call s:Accents('S',' ','Ś','Ŝ',' ',' ',' ','Ş',' ',' ',' ',' ','Š')
    call s:Accents('t',' ',' ',' ',' ',' ',' ','ţ',' ',' ',' ',' ','ť')
    call s:Accents('T',' ',' ',' ',' ',' ',' ','Ţ',' ',' ',' ',' ','Ť')
-   call s:Accents('u','ù','ú','û','ü','ũ',' ',' ','ű',' ','ů','ŭ',' ')
-   call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ',' ','Ű',' ','Ů','Ŭ',' ')
+   call s:Accents('u','ù','ú','û','ü','ũ',' ',' ','ű','ų','ů','ŭ','ǔ')
+   call s:Accents('U','Ù','Ú','Û','Ü','Ũ',' ',' ','Ű','Ų','Ů','Ŭ','Ǔ')
    call s:Accents('w',' ',' ','ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
    call s:Accents('W',' ',' ','Ŵ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
    call s:Accents('y','ỳ','ý','ŷ','ÿ','ỹ',' ',' ',' ',' ',' ',' ',' ')
@@ -1015,8 +1242,8 @@
 if did_tex_syntax_inits == 1
  let did_tex_syntax_inits= 2
   " TeX highlighting groups which should share similar highlighting
-  if !exists("g:tex_no_error")
-   if !exists("tex_no_math")
+  if !exists("s:tex_no_error")
+   if !exists("g:tex_no_math")
     HiLink texBadMath		texError
     HiLink texMathDelimBad	texError
     HiLink texMathError		texError
@@ -1027,6 +1254,10 @@
    HiLink texError		Error
   endif
 
+  hi texBoldStyle		gui=bold	cterm=bold
+  hi texItalStyle		gui=italic	cterm=italic
+  hi texBoldItalStyle		gui=bold,italic cterm=bold,italic
+  hi texItalBoldStyle		gui=bold,italic cterm=bold,italic
   HiLink texCite		texRefZone
   HiLink texDefCmd		texDef
   HiLink texDefName		texDef
@@ -1044,6 +1275,8 @@
    HiLink texGreek		texStatement
    HiLink texSuperscript	texStatement
    HiLink texSubscript		texStatement
+   HiLink texSuperscripts 	texSuperscript
+   HiLink texSubscripts 	texSubscript
    HiLink texMathSymbol		texStatement
    HiLink texMathZoneV		texMath
    HiLink texMathZoneW		texMath
@@ -1052,8 +1285,8 @@
    HiLink texMathZoneV		texMath
    HiLink texMathZoneZ		texMath
   endif
-  HiLink texSectionMarker	texCmdName
-  HiLink texSectionName		texSection
+  HiLink texBeginEnd		texCmdName
+  HiLink texBeginEndName	texSection
   HiLink texSpaceCode		texStatement
   HiLink texStyleStatement	texStatement
   HiLink texTypeSize		texType
@@ -1088,7 +1321,9 @@
   delcommand HiLink
 endif
 
-" Current Syntax: {{{1
-unlet b:extfname
+" Cleanup: {{{1
+unlet s:extfname
 let   b:current_syntax = "tex"
+let &cpo               = s:keepcpo
+unlet s:keepcpo
 " vim: ts=8 fdm=marker
diff -Naur vim73.orig/runtime/syntax/treetop.vim vim73/runtime/syntax/treetop.vim
--- vim73.orig/runtime/syntax/treetop.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/treetop.vim	2013-08-04 19:09:09.773946375 +0000
@@ -0,0 +1,110 @@
+" Vim syntax file
+" Language:         Treetop
+" Maintainer:       Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2011-03-14
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn keyword treetopTodo
+      \ contained
+      \ TODO
+      \ FIXME
+      \ XXX
+      \ NOTE
+
+syn match treetopComment
+                        \ '#.*'
+                        \ display
+                        \ contains=treetopTodo
+
+syn include @treetopRuby syntax/ruby.vim
+unlet b:current_syntax
+
+syn keyword treetopKeyword
+                         \ require
+                         \ end
+syn region  treetopKeyword
+                         \ matchgroup=treetopKeyword
+                         \ start='\<\%(grammar\|include\|module\)\>\ze\s'
+                         \ end='$'
+                         \ transparent
+                         \ oneline
+                         \ keepend
+                         \ contains=@treetopRuby
+syn keyword treetopKeyword
+                         \ rule
+                         \ nextgroup=treetopRuleName
+                         \ skipwhite skipnl
+
+syn match   treetopGrammarName
+                             \ '\u\w*'
+                             \ contained
+
+syn match   treetopRubyModuleName
+                                \ '\u\w*'
+                                \ contained
+
+syn match   treetopRuleName
+                          \ '\h\w*'
+                          \ contained
+
+syn region  treetopString
+                        \ matchgroup=treetopStringDelimiter
+                        \ start=+"+
+                        \ end=+"+
+syn region  treetopString
+                        \ matchgroup=treetopStringDelimiter
+                        \ start=+'+
+                        \ end=+'+
+
+syn region  treetopCharacterClass
+                                \ matchgroup=treetopCharacterClassDelimiter
+                                \ start=+\[+
+                                \ skip=+\\\]+
+                                \ end=+\]+
+
+syn region  treetopRubyBlock
+                           \ matchgroup=treetopRubyBlockDelimiter
+                           \ start=+{+
+                           \ end=+}+
+                           \ contains=@treetopRuby
+
+syn region  treetopSemanticPredicate
+                           \ matchgroup=treetopSemanticPredicateDelimiter
+                           \ start=+[!&]{+
+                           \ end=+}+
+                           \ contains=@treetopRuby
+
+syn region  treetopSubclassDeclaration
+                           \ matchgroup=treetopSubclassDeclarationDelimiter
+                           \ start=+<+
+                           \ end=+>+
+                           \ contains=@treetopRuby
+
+syn match   treetopEllipsis
+                          \ +''+
+
+hi def link treetopTodo                         Todo
+hi def link treetopComment                      Comment
+hi def link treetopKeyword                      Keyword
+hi def link treetopGrammarName                  Constant
+hi def link treetopRubyModuleName               Constant
+hi def link treetopRuleName                     Identifier
+hi def link treetopString                       String
+hi def link treetopStringDelimiter              treetopString
+hi def link treetopCharacterClass               treetopString
+hi def link treetopCharacterClassDelimiter      treetopCharacterClass
+hi def link treetopRubyBlockDelimiter           PreProc
+hi def link treetopSemanticPredicateDelimiter   PreProc
+hi def link treetopSubclassDeclarationDelimiter PreProc
+hi def link treetopEllipsis                     Special
+
+let b:current_syntax = 'treetop'
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
diff -Naur vim73.orig/runtime/syntax/tsalt.vim vim73/runtime/syntax/tsalt.vim
--- vim73.orig/runtime/syntax/tsalt.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/tsalt.vim	2013-08-04 19:09:09.777279698 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Telix (Modem Comm Program) SALT Script
 " Maintainer:	Sean M. McKee <mckee@misslink.net>
-" Last Change:	2001 May 09
+" Last Change:	2012 Feb 03 by Thilo Six
 " Version Info: @(#)tsalt.vim	1.5	97/12/16 08:11:15
 
 " For version 5.x: Clear all syntax items
@@ -12,6 +12,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " turn case matching off
 syn case ignore
 
@@ -211,4 +214,6 @@
 
 let b:current_syntax = "tsalt"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/tt2.vim vim73/runtime/syntax/tt2.vim
--- vim73.orig/runtime/syntax/tt2.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/tt2.vim	2013-08-04 19:09:09.780613022 +0000
@@ -0,0 +1,210 @@
+" Language:      TT2 (Perl Template Toolkit)
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Author:        Moriki, Atsushi <4woods+vim@gmail.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-05-12
+"
+" Instration:
+"   put tt2.vim and tt2html.vim in to your syntax diretory.
+"
+"   add below in your filetype.vim.
+"       au BufNewFile,BufRead *.tt2 setf tt2
+"           or
+"       au BufNewFile,BufRead *.tt2
+"           \ if ( getline(1) . getline(2) . getline(3) =~ '<\chtml' |
+"           \           && getline(1) . getline(2) . getline(3) !~ '<[%?]' ) |
+"           \   || getline(1) =~ '<!DOCTYPE HTML' |
+"           \   setf tt2html |
+"           \ else |
+"           \   setf tt2 |
+"           \ endif
+"
+"   define START_TAG, END_TAG
+"       "ASP"
+"       :let b:tt2_syn_tags = '<% %>'
+"       "PHP"
+"       :let b:tt2_syn_tags = '<? ?>'
+"       "TT2 and HTML"
+"       :let b:tt2_syn_tags = '\[% %] <!-- -->'
+"
+" Changes:
+"           0.1.3
+"               Changed fileformat from 'dos' to 'unix'
+"               Deleted 'echo' that print obstructive message
+"           0.1.2
+"               Added block comment syntax
+"               e.g. [%# COMMENT
+"                        COMMENT TOO %]
+"                    [%# IT'S SAFE %]  HERE IS OUTSIDE OF TT2 DIRECTIVE
+"                    [% # WRONG!! %]   HERE STILL BE COMMENT
+"           0.1.1
+"               Release
+"           0.1.0
+"               Internal
+"
+" License: follow Vim :help uganda
+"
+
+if !exists("b:tt2_syn_tags")
+    let b:tt2_syn_tags = '\[% %]'
+    "let b:tt2_syn_tags = '\[% %] \[\* \*]'
+endif
+
+if !exists("b:tt2_syn_inc_perl")
+    let b:tt2_syn_inc_perl = 1
+endif
+
+if exists("b:current_syntax")
+  finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+syn case match
+
+syn cluster tt2_top_cluster contains=tt2_perlcode,tt2_tag_region
+
+" TT2 TAG Region
+if exists("b:tt2_syn_tags")
+
+    let s:str = b:tt2_syn_tags . ' '
+    let s:str = substitute(s:str,'^ \+','','g')
+    let s:str = substitute(s:str,' \+',' ','g')
+
+    while stridx(s:str,' ') > 0
+
+        let s:st = strpart(s:str,0,stridx(s:str,' '))
+        let s:str = substitute(s:str,'[^ ]* ','',"")
+
+        let s:ed = strpart(s:str,0,stridx(s:str,' '))
+        let s:str = substitute(s:str,'[^ ]* ','',"")
+
+        exec 'syn region  tt2_tag_region '.
+                    \ 'matchgroup=tt2_tag '.
+                    \ 'start=+\(' . s:st .'\)[-]\=+ '.
+                    \ 'end=+[-]\=\(' . s:ed . '\)+ '.
+                    \ 'contains=@tt2_statement_cluster keepend extend'
+
+        exec 'syn region  tt2_commentblock_region '.
+                    \ 'matchgroup=tt2_tag '.
+                    \ 'start=+\(' . s:st .'\)[-]\=\(#\)\@=+ '.
+                    \ 'end=+[-]\=\(' . s:ed . '\)+ '.
+                    \ 'keepend extend'
+
+        "Include Perl syntax when 'PERL' 'RAWPERL' block
+        if b:tt2_syn_inc_perl
+            syn include @Perl $VIMRUNTIME/syntax/perl.vim
+            exec 'syn region tt2_perlcode '.
+                        \ 'start=+\(\(RAW\)\=PERL\s*[-]\=' . s:ed . '\(\n\)\=\)\@<=+ ' .
+                        \ 'end=+' . s:st . '[-]\=\s*END+me=s-1 contains=@Perl keepend'
+        endif
+
+        "echo 'TAGS ' . s:st . ' ' . s:ed
+        unlet s:st
+        unlet s:ed
+    endwhile
+
+else
+
+    syn region  tt2_tag_region
+                \ matchgroup=tt2_tag
+                \ start=+\(\[%\)[-]\=+
+                \ end=+[-]\=%\]+
+                \ contains=@tt2_statement_cluster keepend extend
+
+    syn region  tt2_commentblock_region
+                \ matchgroup=tt2_tag
+                \ start=+\(\[%\)[-]\=#+
+                \ end=+[-]\=%\]+
+                \ keepend extend
+
+    "Include Perl syntax when 'PERL' 'RAWPERL' block
+    if b:tt2_syn_inc_perl
+        syn include @Perl $VIMRUNTIME/syntax/perl.vim
+        syn region tt2_perlcode
+                    \ start=+\(\(RAW\)\=PERL\s*[-]\=%]\(\n\)\=\)\@<=+
+                    \ end=+\[%[-]\=\s*END+me=s-1
+                    \ contains=@Perl keepend
+    endif
+endif
+
+" Directive
+syn keyword tt2_directive contained
+            \ GET CALL SET DEFAULT DEBUG
+            \ LAST NEXT BREAK STOP BLOCK
+            \ IF IN UNLESS ELSIF FOR FOREACH WHILE SWITCH CASE
+            \ USE PLUGIN MACRO META
+            \ TRY FINAL RETURN LAST
+            \ CLEAR TO STEP AND OR NOT MOD DIV
+            \ ELSE PERL RAWPERL END
+syn match   tt2_directive +|+ contained
+syn keyword tt2_directive contained nextgroup=tt2_string_q,tt2_string_qq,tt2_blockname skipwhite skipempty
+            \ INSERT INCLUDE PROCESS WRAPPER FILTER
+            \ THROW CATCH
+syn keyword tt2_directive contained nextgroup=tt2_def_tag skipwhite skipempty
+            \ TAGS
+
+syn match   tt2_def_tag "\S\+\s\+\S\+\|\<\w\+\>" contained
+
+syn match   tt2_variable  +\I\w*+                           contained
+syn match   tt2_operator  "[+*/%:?-]"                       contained
+syn match   tt2_operator  "\<\(mod\|div\|or\|and\|not\)\>"  contained
+syn match   tt2_operator  "[!=<>]=\=\|&&\|||"               contained
+syn match   tt2_operator  "\(\s\)\@<=_\(\s\)\@="            contained
+syn match   tt2_operator  "=>\|,"                           contained
+syn match   tt2_deref     "\([[:alnum:]_)\]}]\s*\)\@<=\."   contained
+syn match   tt2_comment   +#.*$+                            contained extend
+syn match   tt2_func      +\<\I\w*\(\s*(\)\@=+              contained nextgroup=tt2_bracket_r skipempty skipwhite
+"
+syn region  tt2_bracket_r  start=+(+ end=+)+                contained contains=@tt2_statement_cluster keepend extend
+syn region  tt2_bracket_b start=+\[+ end=+]+                contained contains=@tt2_statement_cluster keepend extend
+syn region  tt2_bracket_b start=+{+  end=+}+                contained contains=@tt2_statement_cluster keepend extend
+
+syn region  tt2_string_qq start=+"+ end=+"+ skip=+\\"+      contained contains=tt2_ivariable keepend extend
+syn region  tt2_string_q  start=+'+ end=+'+ skip=+\\'+      contained keepend extend
+
+syn match   tt2_ivariable  +\$\I\w*\>\(\.\I\w*\>\)*+        contained
+syn match   tt2_ivariable  +\${\I\w*\>\(\.\I\w*\>\)*}+      contained
+
+syn match   tt2_number    "\d\+"        contained
+syn match   tt2_number    "\d\+\.\d\+"  contained
+syn match   tt2_number    "0x\x\+"      contained
+syn match   tt2_number    "0\o\+"       contained
+
+syn match   tt2_blockname "\f\+"                       contained                        nextgroup=tt2_blockname_joint skipwhite skipempty
+syn match   tt2_blockname "$\w\+"                      contained contains=tt2_ivariable nextgroup=tt2_blockname_joint skipwhite skipempty
+syn region  tt2_blockname start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable nextgroup=tt2_blockname_joint keepend skipwhite skipempty
+syn region  tt2_blockname start=+'+ end=+'+ skip=+\\'+ contained                        nextgroup=tt2_blockname_joint keepend skipwhite skipempty
+syn match   tt2_blockname_joint "+"                    contained                        nextgroup=tt2_blockname skipwhite skipempty
+
+syn cluster tt2_statement_cluster contains=tt2_directive,tt2_variable,tt2_operator,tt2_string_q,tt2_string_qq,tt2_deref,tt2_comment,tt2_func,tt2_bracket_b,tt2_bracket_r,tt2_number
+
+" Synchronizing
+syn sync minlines=50
+
+hi def link tt2_tag         Type
+hi def link tt2_tag_region  Type
+hi def link tt2_commentblock_region Comment
+hi def link tt2_directive   Statement
+hi def link tt2_variable    Identifier
+hi def link tt2_ivariable   Identifier
+hi def link tt2_operator    Statement
+hi def link tt2_string_qq   String
+hi def link tt2_string_q    String
+hi def link tt2_blockname   String
+hi def link tt2_comment     Comment
+hi def link tt2_func        Function
+hi def link tt2_number      Number
+
+if exists("b:tt2_syn_tags")
+    unlet b:tt2_syn_tags
+endif
+
+let b:current_syntax = "tt2"
+
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
+" vim:ts=4:sw=4
diff -Naur vim73.orig/runtime/syntax/tt2html.vim vim73/runtime/syntax/tt2html.vim
--- vim73.orig/runtime/syntax/tt2html.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/tt2html.vim	2013-08-04 19:09:09.780613022 +0000
@@ -0,0 +1,20 @@
+" Language:      TT2 embedded with HTML
+" Maintainer:    vim-perl <vim-perl@googlegroups.com>
+" Author:        Moriki, Atsushi <4woods+vim@gmail.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2010-07-21
+
+if exists("b:current_syntax")
+    finish
+endif
+
+runtime! syntax/html.vim
+unlet b:current_syntax
+
+runtime! syntax/tt2.vim
+unlet b:current_syntax
+
+syn cluster htmlPreProc add=@tt2_top_cluster
+
+let b:current_syntax = "tt2html"
diff -Naur vim73.orig/runtime/syntax/tt2js.vim vim73/runtime/syntax/tt2js.vim
--- vim73.orig/runtime/syntax/tt2js.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/tt2js.vim	2013-08-04 19:09:09.780613022 +0000
@@ -0,0 +1,20 @@
+" Language:      TT2 embedded with Javascript
+" Maintainer:    Andy Lester <andy@petdance.com>
+" Author:        Yates, Peter <pd.yates@gmail.com>
+" Homepage:      http://github.com/vim-perl/vim-perl
+" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
+" Last Change:   2013-04-10
+
+if exists("b:current_syntax")
+    finish
+endif
+
+runtime! syntax/javascript.vim
+unlet b:current_syntax
+
+runtime! syntax/tt2.vim
+unlet b:current_syntax
+
+syn cluster javascriptPreProc add=@tt2_top_cluster
+
+let b:current_syntax = "tt2js"
diff -Naur vim73.orig/runtime/syntax/uil.vim vim73/runtime/syntax/uil.vim
--- vim73.orig/runtime/syntax/uil.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/uil.vim	2013-08-04 19:09:09.787279668 +0000
@@ -1,10 +1,9 @@
 " Vim syntax file
 " Language:	Motif UIL (User Interface Language)
 " Maintainer:	Thomas Koehler <jean-luc@picard.franken.de>
-" Last Change:	2009 Dec 04
+" Last Change:	2013 May 23
 " URL:		http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/uil.vim
 
-
 " Quit when a syntax file was already loaded
 if version < 600
    syntax clear
@@ -21,22 +20,22 @@
 
 syn keyword uilTodo contained	TODO
 
-" String and Character contstants
+" String and Character constants
 " Highlight special characters (those which have a backslash) differently
 syn match   uilSpecial contained "\\\d\d\d\|\\."
-syn region  uilString		start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=uilSpecial
+syn region  uilString		start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=@Spell,uilSpecial
 syn match   uilCharacter	"'[^\\]'"
-syn region  uilString		start=+'+  skip=+\\\\\|\\"+  end=+'+  contains=uilSpecial
+syn region  uilString		start=+'+  skip=+\\\\\|\\'+  end=+'+  contains=@Spell,uilSpecial
 syn match   uilSpecialCharacter	"'\\.'"
-syn match   uilSpecialStatement	"Xm[^ =(){}]*"
+syn match   uilSpecialStatement	"Xm[^	 =(){}:;]*"
 syn match   uilSpecialFunction	"MrmNcreateCallback"
-syn match   uilRessource	"XmN[^ =(){}]*"
+syn match   uilRessource	"XmN[^	 =(){}:;]*"
 
 syn match  uilNumber		"-\=\<\d*\.\=\d\+\(e\=f\=\|[uU]\=[lL]\=\)\>"
-syn match  uilNumber		"0[xX][0-9a-fA-F]\+\>"
+syn match  uilNumber		"0[xX]\x\+\>"
 
-syn region uilComment		start="/\*"  end="\*/" contains=uilTodo
-syn match  uilComment		"!.*" contains=uilTodo
+syn region uilComment		start="/\*"  end="\*/" contains=@Spell,uilTodo
+syn match  uilComment		"!.*" contains=@Spell,uilTodo
 syn match  uilCommentError	"\*/"
 
 syn region uilPreCondit		start="^#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=uilComment,uilString,uilCharacter,uilNumber,uilCommentError
diff -Naur vim73.orig/runtime/syntax/upstart.vim vim73/runtime/syntax/upstart.vim
--- vim73.orig/runtime/syntax/upstart.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/upstart.vim	2013-08-04 19:09:09.790612992 +0000
@@ -0,0 +1,112 @@
+" Vim syntax file
+" Language:	Upstart job files
+" Maintainer:	Michael Biebl <biebl@debian.org>
+"		James Hunt <james.hunt@ubuntu.com>
+" Last Change:	2012 Jan 16
+" License:	The Vim license
+" Version:	0.4
+" Remark:	Syntax highlighting for Upstart (init(8)) job files.
+"
+" It is inspired by the initng syntax file and includes sh.vim to do the
+" highlighting of script blocks.
+
+if version < 600
+	syntax clear
+elseif exists("b:current_syntax")
+	finish
+endif
+
+let is_bash = 1
+syn include @Shell syntax/sh.vim
+
+syn case match
+
+" avoid need to use 'match' for most events
+setlocal iskeyword+=-
+
+syn match upstartComment /#.*$/ contains=upstartTodo
+syn keyword upstartTodo TODO FIXME contained
+
+syn region upstartString start=/"/ end=/"/ skip=/\\"/
+
+syn region upstartScript matchgroup=upstartStatement start="script" end="end script" contains=@upstartShellCluster
+
+syn cluster upstartShellCluster contains=@Shell
+
+" one argument
+syn keyword upstartStatement description author version instance expect
+syn keyword upstartStatement pid kill normal console env exit export
+syn keyword upstartStatement umask nice oom chroot chdir exec
+
+" two arguments
+syn keyword upstartStatement limit
+
+" one or more arguments (events)
+syn keyword upstartStatement emits
+
+syn keyword upstartStatement on start stop
+
+" flag, no parameter
+syn keyword upstartStatement respawn service instance manual debug task
+
+" prefix for exec or script 
+syn keyword upstartOption pre-start post-start pre-stop post-stop
+
+" option for kill
+syn keyword upstartOption timeout
+" option for oom
+syn keyword upstartOption never
+" options for console
+syn keyword upstartOption output owner
+" options for expect
+syn keyword upstartOption fork daemon
+" options for limit
+syn keyword upstartOption unlimited
+
+" 'options' for start/stop on
+syn keyword upstartOption and or
+
+" Upstart itself and associated utilities
+syn keyword upstartEvent runlevel
+syn keyword upstartEvent started
+syn keyword upstartEvent starting
+syn keyword upstartEvent startup
+syn keyword upstartEvent stopped
+syn keyword upstartEvent stopping
+syn keyword upstartEvent control-alt-delete
+syn keyword upstartEvent keyboard-request
+syn keyword upstartEvent power-status-changed
+
+" D-Bus
+syn keyword upstartEvent dbus-activation
+
+" Display Manager (ie gdm)
+syn keyword upstartEvent desktop-session-start
+syn keyword upstartEvent login-session-start
+
+" mountall
+syn keyword upstartEvent all-swaps
+syn keyword upstartEvent filesystem
+syn keyword upstartEvent mounted
+syn keyword upstartEvent mounting
+syn keyword upstartEvent local-filesystems
+syn keyword upstartEvent remote-filesystems
+syn keyword upstartEvent virtual-filesystems
+
+" SysV umountnfs.sh
+syn keyword upstartEvent mounted-remote-filesystems
+
+" upstart-udev-bridge and ifup/down
+syn match   upstartEvent /\<\i\{-1,}-device-\(added\|removed\|up\|down\)/
+
+" upstart-socket-bridge
+syn keyword upstartEvent socket
+
+hi def link upstartComment   Comment
+hi def link upstartTodo	     Todo
+hi def link upstartString    String
+hi def link upstartStatement Statement
+hi def link upstartOption    Type
+hi def link upstartEvent     Define
+
+let b:current_syntax = "upstart"
diff -Naur vim73.orig/runtime/syntax/upstreamdat.vim vim73/runtime/syntax/upstreamdat.vim
--- vim73.orig/runtime/syntax/upstreamdat.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/upstreamdat.vim	2013-08-04 19:09:09.790612992 +0000
@@ -0,0 +1,296 @@
+" Vim syntax file
+" Language:		Innovation Data Processing upstream.dat file
+" Maintainer:		Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:	2013-06-17
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+syn keyword upstreamdat_Parameter ACCEPTPCREMOTE 
+syn keyword upstreamdat_Parameter ACCEPTREMOTE 
+syn keyword upstreamdat_Parameter ACTION 
+syn keyword upstreamdat_Parameter ACTIVATEONENTRY 
+syn keyword upstreamdat_Parameter ARCHIVEBIT 
+syn keyword upstreamdat_Parameter ARCHIVEBIT 
+syn keyword upstreamdat_Parameter ASCTOEBC 
+syn keyword upstreamdat_Parameter ASRBACKUP 
+syn keyword upstreamdat_Parameter ATTENDED 
+syn keyword upstreamdat_Parameter AUTHORITATIVE 
+syn keyword upstreamdat_Parameter AUTHORITATIVERESTORE 
+syn keyword upstreamdat_Parameter AUTHORITATIVERESTORE 
+syn keyword upstreamdat_Parameter BACKUPPROFILE 
+syn keyword upstreamdat_Parameter BACKUPPROFILE2 
+syn keyword upstreamdat_Parameter BACKUPREPARSEFILES 
+syn keyword upstreamdat_Parameter BACKUPREPARSEFILES 
+syn keyword upstreamdat_Parameter BACKUPVERIFY 
+syn keyword upstreamdat_Parameter BLANKTRUNC 
+syn keyword upstreamdat_Parameter CALCDASDSIZE 
+syn keyword upstreamdat_Parameter CHANGEDIRATTRIBS 
+syn keyword upstreamdat_Parameter CHANGEDIRATTRIBS 
+syn keyword upstreamdat_Parameter COMPRESSLEVEL 
+syn keyword upstreamdat_Parameter CONTROLFILE 
+syn keyword upstreamdat_Parameter DASDOVERRIDE 
+syn keyword upstreamdat_Parameter DATELIMIT 
+syn keyword upstreamdat_Parameter DATELIMIT 
+syn keyword upstreamdat_Parameter DAYSOLD 
+syn keyword upstreamdat_Parameter DAYSOLD 
+syn keyword upstreamdat_Parameter DELETED 
+syn keyword upstreamdat_Parameter DELETED 
+syn keyword upstreamdat_Parameter DELETEPROMPTS 
+syn keyword upstreamdat_Parameter DELETEPROMPTS 
+syn keyword upstreamdat_Parameter DESTINATION 
+syn keyword upstreamdat_Parameter DESTINATION 
+syn keyword upstreamdat_Parameter DIRDELETE 
+syn keyword upstreamdat_Parameter DIRECTORVMC 
+syn keyword upstreamdat_Parameter DIRONLYRESTOREOK 
+syn keyword upstreamdat_Parameter DIRSONLY 
+syn keyword upstreamdat_Parameter DIRSONLY 
+syn keyword upstreamdat_Parameter DISASTERRECOVERY 
+syn keyword upstreamdat_Parameter DISPLAY 
+syn keyword upstreamdat_Parameter DRIVEALIAS 
+syn keyword upstreamdat_Parameter DRIVEALIAS 
+syn keyword upstreamdat_Parameter DUALCOPY 
+syn keyword upstreamdat_Parameter DUPDAYS 
+syn keyword upstreamdat_Parameter DUPLICATE 
+syn keyword upstreamdat_Parameter EBCTOASC 
+syn keyword upstreamdat_Parameter ENCRYPT 
+syn keyword upstreamdat_Parameter ENCRYPTLEVEL 
+syn keyword upstreamdat_Parameter EXCLUDELISTNAME 
+syn keyword upstreamdat_Parameter FAILBACKUPONERROR 
+syn keyword upstreamdat_Parameter FAILBACKUPONERROR 
+syn keyword upstreamdat_Parameter FAILIFNOFILES 
+syn keyword upstreamdat_Parameter FAILIFNOFILES 
+syn keyword upstreamdat_Parameter FAILIFSKIP 
+syn keyword upstreamdat_Parameter FAILJOB 
+syn keyword upstreamdat_Parameter FAILRESTOREONERROR 
+syn keyword upstreamdat_Parameter FAILRESTOREONERROR 
+syn keyword upstreamdat_Parameter FILEDATE 
+syn keyword upstreamdat_Parameter FILEDATE 
+syn keyword upstreamdat_Parameter FILEDELETE 
+syn keyword upstreamdat_Parameter FILEDELETE 
+syn keyword upstreamdat_Parameter FILES 
+syn keyword upstreamdat_Parameter FILES 
+syn keyword upstreamdat_Parameter FILESOPENFORUPDAT 
+syn keyword upstreamdat_Parameter FILESOPENFORUPDAT 
+syn keyword upstreamdat_Parameter FILETRANSFER 
+syn keyword upstreamdat_Parameter GETREMOTEFILES 
+syn keyword upstreamdat_Parameter HARDLINKDB 
+syn keyword upstreamdat_Parameter HARDLINKS 
+syn keyword upstreamdat_Parameter HARDLINKS 
+syn keyword upstreamdat_Parameter HIDDENFILES 
+syn keyword upstreamdat_Parameter HIDDENFILES 
+syn keyword upstreamdat_Parameter HOLDTAPE 
+syn keyword upstreamdat_Parameter HOLDUSERDIRS 
+syn keyword upstreamdat_Parameter HOSTFILENAME 
+syn keyword upstreamdat_Parameter HOSTRECORD 
+syn keyword upstreamdat_Parameter HOSTSORT 
+syn keyword upstreamdat_Parameter IGNOREPLUGINSFORRESTORE 
+syn keyword upstreamdat_Parameter INCRDB 
+syn keyword upstreamdat_Parameter INCRDBARCHIVEBIT 
+syn keyword upstreamdat_Parameter INCRDBDELETEDFILES 
+syn keyword upstreamdat_Parameter INCREMENTAL 
+syn keyword upstreamdat_Parameter INCREMENTAL 
+syn keyword upstreamdat_Parameter INQOPTIONS 
+syn keyword upstreamdat_Parameter INSTALLWIN2KAGENT 
+syn keyword upstreamdat_Parameter INSTALLWIN2KAGENT 
+syn keyword upstreamdat_Parameter JOBOPTIONS 
+syn keyword upstreamdat_Parameter JOBRETURNCODEMAP 
+syn keyword upstreamdat_Parameter JOBWAITTIMELIMIT 
+syn keyword upstreamdat_Parameter KEEPALIVE 
+syn keyword upstreamdat_Parameter LANINTERFACE 
+syn keyword upstreamdat_Parameter LANWSNAME 
+syn keyword upstreamdat_Parameter LANWSPASSWORD 
+syn keyword upstreamdat_Parameter LASTACCESS 
+syn keyword upstreamdat_Parameter LASTACCESS 
+syn keyword upstreamdat_Parameter LATESTDATE 
+syn keyword upstreamdat_Parameter LATESTDATE 
+syn keyword upstreamdat_Parameter LATESTTIME 
+syn keyword upstreamdat_Parameter LATESTTIME 
+syn keyword upstreamdat_Parameter LATESTVERSION 
+syn keyword upstreamdat_Parameter LINEBLOCK 
+syn keyword upstreamdat_Parameter LINETRUNC 
+syn keyword upstreamdat_Parameter LISTENFORREMOTE 
+syn keyword upstreamdat_Parameter LOCALBACKUP 
+syn keyword upstreamdat_Parameter LOCALBACKUPDIR 
+syn keyword upstreamdat_Parameter LOCALBACKUPMAX 
+syn keyword upstreamdat_Parameter LOCALBACKUPMAXFILESIZE 
+syn keyword upstreamdat_Parameter LOCALBACKUPMAXSIZE 
+syn keyword upstreamdat_Parameter LOCALEXCLUDEFILE 
+syn keyword upstreamdat_Parameter LOCALPARAMETERS 
+syn keyword upstreamdat_Parameter LOCALPASSWORD 
+syn keyword upstreamdat_Parameter LOCALRESTORE 
+syn keyword upstreamdat_Parameter LOCALUSER 
+syn keyword upstreamdat_Parameter LOFS 
+syn keyword upstreamdat_Parameter LOGNONFATAL 
+syn keyword upstreamdat_Parameter MAXBACKUPFILESFAIL 
+syn keyword upstreamdat_Parameter MAXBACKUPTIME 
+syn keyword upstreamdat_Parameter MAXDUPS 
+syn keyword upstreamdat_Parameter MAXFILENAMESIZE 
+syn keyword upstreamdat_Parameter MAXKFILESIZE 
+syn keyword upstreamdat_Parameter MAXLOGDAYS 
+syn keyword upstreamdat_Parameter MAXRESTOREFILESFAIL 
+syn keyword upstreamdat_Parameter MAXRESTORETIME 
+syn keyword upstreamdat_Parameter MAXRETRY 
+syn keyword upstreamdat_Parameter MAXRPTDAYS 
+syn keyword upstreamdat_Parameter MERGE 
+syn keyword upstreamdat_Parameter MIGRBITS 
+syn keyword upstreamdat_Parameter MIGRBITS 
+syn keyword upstreamdat_Parameter MINCOMPRESSSIZE 
+syn keyword upstreamdat_Parameter MINIMIZE 
+syn keyword upstreamdat_Parameter MODIFYFILE 
+syn keyword upstreamdat_Parameter MOUNTPOINTS 
+syn keyword upstreamdat_Parameter MOUNTPOINTS 
+syn keyword upstreamdat_Parameter NDS 
+syn keyword upstreamdat_Parameter NDS 
+syn keyword upstreamdat_Parameter NEWFILECOMPARE 
+syn keyword upstreamdat_Parameter NFSBELOW 
+syn keyword upstreamdat_Parameter NODATAOK 
+syn keyword upstreamdat_Parameter NODIRFORINCREMENTAL 
+syn keyword upstreamdat_Parameter NODIRFORINCREMENTAL 
+syn keyword upstreamdat_Parameter NONFILEDATABITMAP 
+syn keyword upstreamdat_Parameter NONFILEDATABITMAP 
+syn keyword upstreamdat_Parameter NOPOINTRESTORE 
+syn keyword upstreamdat_Parameter NOSPECINHERITANCE 
+syn keyword upstreamdat_Parameter NOTIFYEVENTS 
+syn keyword upstreamdat_Parameter NOTIFYFAILUREATTACHMENT 
+syn keyword upstreamdat_Parameter NOTIFYSUCCESSATTACHMENT 
+syn keyword upstreamdat_Parameter NOTIFYTARGETS 
+syn keyword upstreamdat_Parameter NOUIDGIDNAMES 
+syn keyword upstreamdat_Parameter NOUIDGIDNAMES 
+syn keyword upstreamdat_Parameter NOVELLMIGRATE 
+syn keyword upstreamdat_Parameter NOVELLMIGRATE 
+syn keyword upstreamdat_Parameter NOVELLMIGRATEADDEXT 
+syn keyword upstreamdat_Parameter NOVELLMIGRATEADDEXT 
+syn keyword upstreamdat_Parameter NOVELLPROFILE 
+syn keyword upstreamdat_Parameter NOVELLRECALL 
+syn keyword upstreamdat_Parameter NTFSADDPERMISSION 
+syn keyword upstreamdat_Parameter NTFSADDPERMISSION 
+syn keyword upstreamdat_Parameter NTREGRESTORE 
+syn keyword upstreamdat_Parameter OSTYPE 
+syn keyword upstreamdat_Parameter OUTPORT 
+syn keyword upstreamdat_Parameter PACKFLUSHAFTERFILE 
+syn keyword upstreamdat_Parameter PACKRECSIZE 
+syn keyword upstreamdat_Parameter PARAMETER 
+syn keyword upstreamdat_Parameter PASSWORD 
+syn keyword upstreamdat_Parameter PATHNAME 
+syn keyword upstreamdat_Parameter PATHNAME 
+syn keyword upstreamdat_Parameter PERFORMBITMAP 
+syn keyword upstreamdat_Parameter PERFORMNUMRECORDS 
+syn keyword upstreamdat_Parameter PERFORMRECORDSIZE 
+syn keyword upstreamdat_Parameter PLUGIN 
+syn keyword upstreamdat_Parameter PLUGIN 
+syn keyword upstreamdat_Parameter PLUGINPARAMETERS 
+syn keyword upstreamdat_Parameter PLUGINPARAMETERS 
+syn keyword upstreamdat_Parameter POSTJOB 
+syn keyword upstreamdat_Parameter PREJOB 
+syn keyword upstreamdat_Parameter PRTYCLASS 
+syn keyword upstreamdat_Parameter PRTYLEVEL 
+syn keyword upstreamdat_Parameter RECALLCLEANUP 
+syn keyword upstreamdat_Parameter RECALLOFFLINEFILES 
+syn keyword upstreamdat_Parameter RECALLOFFLINEFILES 
+syn keyword upstreamdat_Parameter RECORDSIZE 
+syn keyword upstreamdat_Parameter REMOTEADDR 
+syn keyword upstreamdat_Parameter REMOTEAPPLPREF 
+syn keyword upstreamdat_Parameter REMOTEAPPLRETRY 
+syn keyword upstreamdat_Parameter REMOTECONNECTTYPE 
+syn keyword upstreamdat_Parameter REMOTEFLAGS 
+syn keyword upstreamdat_Parameter REMOTEIPADAPTER 
+syn keyword upstreamdat_Parameter REMOTELOCALPARAMETERS 
+syn keyword upstreamdat_Parameter REMOTELOGMODE 
+syn keyword upstreamdat_Parameter REMOTELUNAME 
+syn keyword upstreamdat_Parameter REMOTEMAXRETRIES 
+syn keyword upstreamdat_Parameter REMOTEMODENAME 
+syn keyword upstreamdat_Parameter REMOTEPARAMETERFILE 
+syn keyword upstreamdat_Parameter REMOTEPORT 
+syn keyword upstreamdat_Parameter REMOTEREQUEST 
+syn keyword upstreamdat_Parameter REMOTERESTART 
+syn keyword upstreamdat_Parameter REMOTEROUTE 
+syn keyword upstreamdat_Parameter REMOTETARGETNAME 
+syn keyword upstreamdat_Parameter REMOTETCP 
+syn keyword upstreamdat_Parameter REMOTETIMEOUT 
+syn keyword upstreamdat_Parameter REMOTETMAXRETRY 
+syn keyword upstreamdat_Parameter REMOTETPN 
+syn keyword upstreamdat_Parameter REMOTEUSAPPL 
+syn keyword upstreamdat_Parameter REMOTEVERIFY 
+syn keyword upstreamdat_Parameter REMOTEWTOCOMP 
+syn keyword upstreamdat_Parameter REPORTNAME 
+syn keyword upstreamdat_Parameter REPORTOPTIONS 
+syn keyword upstreamdat_Parameter RESTARTLASTFILE 
+syn keyword upstreamdat_Parameter RESTART 
+syn keyword upstreamdat_Parameter RESTARTTYPE 
+syn keyword upstreamdat_Parameter RESTARTVERSIONDATE 
+syn keyword upstreamdat_Parameter RESTOREARCHIVEBIT 
+syn keyword upstreamdat_Parameter RESTORECHECKPOINT 
+syn keyword upstreamdat_Parameter RESTOREDATELIMIT 
+syn keyword upstreamdat_Parameter RESTOREDATELIMIT 
+syn keyword upstreamdat_Parameter RESTOREFILEFAIL 
+syn keyword upstreamdat_Parameter RESTOREMOUNTPOINTS 
+syn keyword upstreamdat_Parameter RESTOREMOUNTPOINTS 
+syn keyword upstreamdat_Parameter RESTORESEGMENTS 
+syn keyword upstreamdat_Parameter RESTORESEGMENTS 
+syn keyword upstreamdat_Parameter RESTORETODIFFFS 
+syn keyword upstreamdat_Parameter RETAIN 
+syn keyword upstreamdat_Parameter RETAIN 
+syn keyword upstreamdat_Parameter ROOTENTRY 
+syn keyword upstreamdat_Parameter ROOTENTRY 
+syn keyword upstreamdat_Parameter SAN 
+syn keyword upstreamdat_Parameter SCHEDULENAME 
+syn keyword upstreamdat_Parameter SEGMENTEDFILESIZE 
+syn keyword upstreamdat_Parameter SEGMENTEDFILESIZE 
+syn keyword upstreamdat_Parameter SEGMENTSIZE 
+syn keyword upstreamdat_Parameter SEGMENTSIZE 
+syn keyword upstreamdat_Parameter SENDHOSTDETAILS 
+syn keyword upstreamdat_Parameter SINGLEFS 
+syn keyword upstreamdat_Parameter SIZETRC 
+syn keyword upstreamdat_Parameter SKIP 
+syn keyword upstreamdat_Parameter SKIPBACKUPSCAN 
+syn keyword upstreamdat_Parameter SKIPOLD 
+syn keyword upstreamdat_Parameter SKIPOLD 
+syn keyword upstreamdat_Parameter SMSTARGETSERVICENAME 
+syn keyword upstreamdat_Parameter SMSTSA 
+syn keyword upstreamdat_Parameter SOLO 
+syn keyword upstreamdat_Parameter SORTBACKUP 
+syn keyword upstreamdat_Parameter SOSDISK 
+syn keyword upstreamdat_Parameter SOSDISK 
+syn keyword upstreamdat_Parameter SOSTIMESTAMP 
+syn keyword upstreamdat_Parameter SOSTIMESTAMP 
+syn keyword upstreamdat_Parameter SOSTIMESTAMPPATH 
+syn keyword upstreamdat_Parameter SOSTIMESTAMPPATH 
+syn keyword upstreamdat_Parameter SPECNUMBER 
+syn keyword upstreamdat_Parameter SPECNUMBER 
+syn keyword upstreamdat_Parameter SPECTYPE 
+syn keyword upstreamdat_Parameter SPECTYPE 
+syn keyword upstreamdat_Parameter STARTTIME 
+syn keyword upstreamdat_Parameter STORAGETYPE 
+syn keyword upstreamdat_Parameter SUBDIRECTORIES 
+syn keyword upstreamdat_Parameter SUBDIRECTORIES 
+syn keyword upstreamdat_Parameter SWITCHTOTAPEMB 
+syn keyword upstreamdat_Parameter TCPADDRESS 
+syn keyword upstreamdat_Parameter TCPTIMEOUT 
+syn keyword upstreamdat_Parameter TIMEOVERRIDE 
+syn keyword upstreamdat_Parameter TRACE 
+syn keyword upstreamdat_Parameter TRANSLATE 
+syn keyword upstreamdat_Parameter ULTRACOMP 
+syn keyword upstreamdat_Parameter ULTREG 
+syn keyword upstreamdat_Parameter ULTUPD 
+syn keyword upstreamdat_Parameter UNCMACHINEALIAS 
+syn keyword upstreamdat_Parameter UNCMACHINEALIAS 
+syn keyword upstreamdat_Parameter USEALEBRA 
+syn keyword upstreamdat_Parameter USECONTROLFILE 
+syn keyword upstreamdat_Parameter USEGID 
+syn keyword upstreamdat_Parameter USERID 
+syn keyword upstreamdat_Parameter USEUID 
+syn keyword upstreamdat_Parameter USNOUIDGIDERRORS 
+syn keyword upstreamdat_Parameter UTF8 
+syn keyword upstreamdat_Parameter VAULTNUMBER 
+syn keyword upstreamdat_Parameter VERSIONDATE 
+syn keyword upstreamdat_Parameter WRITESPARSE 
+syn keyword upstreamdat_Parameter XFERECORDSIZE 
+syn keyword upstreamdat_Parameter XFERRECSEP 
+syn keyword upstreamdat_Parameter XFERRECUSECR 
+
+hi def link upstreamdat_Parameter Type
+
+let b:current_syntax = "upstreamdat"
diff -Naur vim73.orig/runtime/syntax/upstreaminstalllog.vim vim73/runtime/syntax/upstreaminstalllog.vim
--- vim73.orig/runtime/syntax/upstreaminstalllog.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/upstreaminstalllog.vim	2013-08-04 19:09:09.790612992 +0000
@@ -0,0 +1,27 @@
+" Vim syntax file
+" Language:             Innovation Data Processing UPSTREAMInstall.log file
+" Maintainer:           Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:      2013-06-17
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Date:
+syn match upstreaminstalllog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/
+" Msg Types:
+syn match upstreaminstalllog_MsgD /Msg #MSI\d\{4,5}D/
+syn match upstreaminstalllog_MsgE /Msg #MSI\d\{4,5}E/
+syn match upstreaminstalllog_MsgI /Msg #MSI\d\{4,5}I/
+syn match upstreaminstalllog_MsgW /Msg #MSI\d\{4,5}W/
+" IP Address:
+syn match upstreaminstalllog_IPaddr / \d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+
+hi def link upstreaminstalllog_Date	Underlined
+hi def link upstreaminstalllog_MsgD	Type
+hi def link upstreaminstalllog_MsgE	Error
+hi def link upstreaminstalllog_MsgW	Constant
+hi def link upstreaminstalllog_IPaddr	Identifier
+
+let b:current_syntax = "upstreaminstalllog"
diff -Naur vim73.orig/runtime/syntax/upstreamlog.vim vim73/runtime/syntax/upstreamlog.vim
--- vim73.orig/runtime/syntax/upstreamlog.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/upstreamlog.vim	2013-08-04 19:09:09.793946315 +0000
@@ -0,0 +1,42 @@
+" Vim syntax file
+" Language:             Innovation Data Processing upstream.log file
+" Maintainer:           Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:      2013-06-17
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Date:
+syn match upstreamlog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/
+" Msg Types:
+syn match upstreamlog_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=upstreamlog_Process skipwhite
+syn match upstreamlog_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=upstreamlog_Process skipwhite
+syn match upstreamlog_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=upstreamlog_Process skipwhite
+syn match upstreamlog_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=upstreamlog_Process skipwhite
+" Processes:
+syn region upstreamlog_Process start="(" end=")" contained
+" IP Address:
+syn match upstreamlog_IPaddr / \d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+" Profile:
+syn region upstreamlog_Profile start="Profile name \zs" end="\"\S\{1,8}\""
+syn region upstreamlog_Profile start=" Profile: \zs" end="\S\{1,8}"
+syn region upstreamlog_Profile start="  Profile: \zs" end="\ze, "
+syn region upstreamlog_Profile start="Backup Profile: \zs" end="\ze Version date"
+syn region upstreamlog_Profile start="Full of \zs" end="\ze$"
+syn region upstreamlog_Profile start="Incr. of \zs" end="\ze$"
+" Target:
+syn region upstreamlog_Target start="Computer: \zs" end="\ze[\]\)]" 
+syn region upstreamlog_Target start="Computer name \zs" end="\ze," 
+
+hi def link upstreamlog_Date	Underlined
+hi def link upstreamlog_MsgD	Type
+hi def link upstreamlog_MsgE	Error
+hi def link upstreamlog_MsgW	Constant
+hi def link upstreamlog_Process	Statement
+hi def link upstreamlog_IPaddr	Identifier
+hi def link upstreamlog_Profile	Identifier
+hi def link upstreamlog_Target	Identifier
+
+let b:current_syntax = "upstreamlog"
diff -Naur vim73.orig/runtime/syntax/usserverlog.vim vim73/runtime/syntax/usserverlog.vim
--- vim73.orig/runtime/syntax/usserverlog.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/usserverlog.vim	2013-08-04 19:09:09.793946315 +0000
@@ -0,0 +1,48 @@
+" Vim syntax file
+" Language:             Innovation Data Processing usserver.log file
+" Maintainer:           Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:      2013-06-17
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Date:
+syn match usserver_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/
+" Msg Types:
+syn match usserver_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=usserver_Process skipwhite
+syn match usserver_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=usserver_Process skipwhite
+syn match usserver_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=usserver_Process skipwhite
+syn match usserver_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=usserver_Process skipwhite
+" Processes:
+syn region usserver_Process start="(" end=")" contained
+" IP Address:
+syn match usserver_IPaddr /\( \|(\)\zs\d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+" Profile:
+syn region usserver_Profile start="Profile name \zs" end="\"\S\{1,8}\""
+syn region usserver_Profile start=" Profile: \zs" end="\S\{1,8}"
+syn region usserver_Profile start=", profile: \zs" end="\S\{1,8}\ze,"
+syn region usserver_Profile start=" profile \zs" end="\S\{1,8}"
+syn region usserver_Profile start="  Profile: \zs" end="\ze, "
+syn region usserver_Profile start="Backup Profile: \zs" end="\ze Version date"
+syn region usserver_Profile start="Full of \zs" end="\ze$"
+syn region usserver_Profile start="Incr. of \zs" end="\ze$"
+syn region usserver_Profile start="Profile=\zs" end="\S\{1,8}\ze,"
+" Target:
+syn region usserver_Target start="Computer: \zs" end="\ze[\]\)]" 
+syn region usserver_Target start="Computer name \zs" end="\ze," 
+syn region usserver_Target start="Registration add request successful \zs" end="$"
+syn region usserver_Target start="request to registered name \zs" end=" "
+syn region usserver_Target start=", sending to \zs" end="$"
+
+hi def link usserver_Date	Underlined
+hi def link usserver_MsgD	Type
+hi def link usserver_MsgE	Error
+hi def link usserver_MsgW	Constant
+hi def link usserver_Process	Statement
+hi def link usserver_IPaddr	Identifier
+hi def link usserver_Profile	Identifier
+hi def link usserver_Target	Identifier
+
+let b:current_syntax = "usserver"
diff -Naur vim73.orig/runtime/syntax/usw2kagtlog.vim vim73/runtime/syntax/usw2kagtlog.vim
--- vim73.orig/runtime/syntax/usw2kagtlog.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/usw2kagtlog.vim	2013-08-04 19:09:09.793946315 +0000
@@ -0,0 +1,48 @@
+" Vim syntax file
+" Language:             Innovation Data Processing USW2KAgt.log file
+" Maintainer:           Rob Owens <rowens@fdrinnovation.com>
+" Latest Revision:      2013-06-17
+
+" Quit when a syntax file was already loaded
+if exists("b:current_syntax")
+  finish
+endif
+
+" Date:
+syn match usw2kagentlog_Date /\u\l\l \u\l\l\s\{1,2}\d\{1,2} \d\d:\d\d:\d\d \d\d\d\d/
+" Msg Types:
+syn match usw2kagentlog_MsgD /Msg #\(Agt\|PC\|Srv\)\d\{4,5}D/ nextgroup=usw2kagentlog_Process skipwhite
+syn match usw2kagentlog_MsgE /Msg #\(Agt\|PC\|Srv\)\d\{4,5}E/ nextgroup=usw2kagentlog_Process skipwhite
+syn match usw2kagentlog_MsgI /Msg #\(Agt\|PC\|Srv\)\d\{4,5}I/ nextgroup=usw2kagentlog_Process skipwhite
+syn match usw2kagentlog_MsgW /Msg #\(Agt\|PC\|Srv\)\d\{4,5}W/ nextgroup=usw2kagentlog_Process skipwhite
+" Processes:
+syn region usw2kagentlog_Process start="(" end=")" contained
+syn region usw2kagentlog_Process start="Starting the processing for a \zs\"" end="\ze client request"
+syn region usw2kagentlog_Process start="Ending the processing for a \zs\"" end="\ze client request"
+" IP Address:
+syn match usw2kagentlog_IPaddr / \d\{1,3}\.\d\{1,3}\.\d\{1,3}\.\d\{1,3}/
+" Profile:
+syn region usw2kagentlog_Profile start="Profile name \zs" end="\"\S\{1,8}\""
+syn region usw2kagentlog_Profile start=" Profile: \zs" end="\S\{1,8}"
+syn region usw2kagentlog_Profile start="  Profile: \zs" end="\ze, "
+syn region usw2kagentlog_Profile start="Backup Profile: \zs" end="\ze Version date"
+syn region usw2kagentlog_Profile start="Full of \zs" end="\ze$"
+syn region usw2kagentlog_Profile start="Incr. of \zs" end="\ze$"
+syn region usw2kagentlog_Profile start="profile name \zs\"" end="\""
+" Target:
+syn region usw2kagentlog_Target start="Computer: \zs" end="\ze[\]\)]" 
+syn region usw2kagentlog_Target start="Computer name \zs" end="\ze," 
+" Agent Keywords:
+syn keyword usw2kagentlog_Agentword opened closed
+
+hi def link usw2kagentlog_Date		Underlined
+hi def link usw2kagentlog_MsgD		Type
+hi def link usw2kagentlog_MsgE		Error
+hi def link usw2kagentlog_MsgW		Constant
+hi def link usw2kagentlog_Process	Statement
+hi def link usw2kagentlog_IPaddr	Identifier
+hi def link usw2kagentlog_Profile	Identifier
+hi def link usw2kagentlog_Target	Identifier
+hi def link usw2kagentlog_Agentword	Special
+
+let b:current_syntax = "usw2kagentlog"
diff -Naur vim73.orig/runtime/syntax/valgrind.vim vim73/runtime/syntax/valgrind.vim
--- vim73.orig/runtime/syntax/valgrind.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/valgrind.vim	2013-08-04 19:09:09.797279638 +0000
@@ -2,7 +2,7 @@
 " Language: Valgrind Memory Debugger Output
 " Maintainer: Roger Luethi <rl@hellgate.ch>
 " Program URL: http://devel-home.kde.org/~sewardj/
-" Last Change: 2002 Apr 07
+" Last Change: 2012 Apr 30
 "
 " Notes: mostly based on strace.vim and xml.vim
 
@@ -10,6 +10,8 @@
 if exists("b:current_syntax")
 	finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case match
 syn sync minlines=50
@@ -97,3 +99,6 @@
 hi def link valgrindSrc		Statement
 
 let b:current_syntax = "valgrind"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff -Naur vim73.orig/runtime/syntax/verilog.vim vim73/runtime/syntax/verilog.vim
--- vim73.orig/runtime/syntax/verilog.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/syntax/verilog.vim	2013-08-04 19:09:09.800612961 +0000
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Verilog
 " Maintainer:	Mun Johl <Mun.Johl@emulex.com>
-" Last Update:  Fri Oct 13 11:44:32 PDT 2006
+" Last Update:  Wed Jul 20 16:04:19 PDT 2011
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -11,11 +11,13 @@
    finish
 endif
 
-" Set the local value of the 'iskeyword' option
+" Set the local value of the 'iskeyword' option.
+" NOTE: '?' was added so that verilogNumber would be processed correctly when
+"       '?' is the last character of the number.
 if version >= 600
-   setlocal iskeyword=@,48-57,_,192-255
+   setlocal iskeyword=@,48-57,63,_,192-255
 else
-   set iskeyword=@,48-57,_,192-255
+   set iskeyword=@,48-57,63,_,192-255
 endif
 
 " A bunch of useful Verilog keywords
@@ -48,7 +50,7 @@
 syn keyword verilogConditional if else case casex casez default endcase
 syn keyword verilogRepeat      forever repeat while for
 
-syn keyword verilogTodo contained TODO
+syn keyword verilogTodo contained TODO FIXME
 
 syn match   verilogOperator "[&|~><!)(*#%@+/=?:;}{,.\^\-\[\]]"
 
@@ -113,17 +115,17 @@
    " The default highlighting.
    HiLink verilogCharacter       Character
    HiLink verilogConditional     Conditional
-   HiLink verilogRepeat		 Repeat
-   HiLink verilogString		 String
-   HiLink verilogTodo		 Todo
-   HiLink verilogComment	 Comment
-   HiLink verilogConstant	 Constant
-   HiLink verilogLabel		 Label
-   HiLink verilogNumber		 Number
-   HiLink verilogOperator	 Special
-   HiLink verilogStatement	 Statement
-   HiLink verilogGlobal		 Define
-   HiLink verilogDirective	 SpecialComment
+   HiLink verilogRepeat          Repeat
+   HiLink verilogString          String
+   HiLink verilogTodo            Todo
+   HiLink verilogComment         Comment
+   HiLink verilogConstant        Constant
+   HiLink verilogLabel           Label
+   HiLink verilogNumber          Number
+   HiLink verilogOperator        Special
+   HiLink verilogStatement       Statement
+   HiLink verilogGlobal          Define
+   HiLink verilogDirective       SpecialComment
    HiLink verilogEscape		 Special
 
    delcommand HiLink
diff -Naur vim73.orig/runtime/syntax/vhdl.vim vim73/runtime/syntax/vhdl.vim
--- vim73.orig/runtime/syntax/vhdl.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/vhdl.vim	2013-08-04 19:09:09.803946285 +0000
@@ -2,7 +2,8 @@
 " Language:	VHDL
 " Maintainer:	Czo <Olivier.Sirol@lip6.fr>
 " Credits:	Stephan Hegel <stephan.hegel@snc.siemens.com.cn>
-" $Id: vhdl.vim,v 1.1 2004/06/13 15:34:56 vimboss Exp $
+" Last Change:	2012 Jun 01
+" 		(Dominique Pelle added @Spell)
 
 " VHSIC Hardware Description Language
 " Very High Scale Integrated Circuit
@@ -15,6 +16,9 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " This is not VHDL. I use the C-Preprocessor cpp to generate different binaries
 " from one VHDL source file. Unfortunately there is no preprocessor for VHDL
 " available. If you don't like this, please remove the following lines.
@@ -53,11 +57,11 @@
 syn match   vhdlNone      "\<else\s\+if\>$"
 syn match   vhdlNone      "\<else\s\+if\>\s"
 
-" Predifined VHDL types
+" Predefined VHDL types
 syn keyword vhdlType bit bit_vector
 syn keyword vhdlType character boolean integer real time
 syn keyword vhdlType string severity_level
-" Predifined standard ieee VHDL types
+" Predefined standard ieee VHDL types
 syn keyword vhdlType positive natural signed unsigned
 syn keyword vhdlType line text
 syn keyword vhdlType std_logic std_logic_vector
@@ -125,7 +129,7 @@
 syn match  vhdlVector "O\"[0-7_]\+\""
 syn match  vhdlVector "X\"[0-9a-f_]\+\""
 syn match  vhdlCharacter "'.'"
-syn region vhdlString start=+"+  end=+"+
+syn region vhdlString start=+"+  end=+"+ contains=@Spell
 
 " floating numbers
 syn match vhdlNumber "-\=\<\d\+\.\d\+\(E[+\-]\=\d\+\)\>"
@@ -147,7 +151,7 @@
 syn match vhdlTime "\<\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
 syn match vhdlTime "\<\d\+\.\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
 
-syn match vhdlComment "--.*$"
+syn match vhdlComment "--.*$" contains=@Spell
 " syn match vhdlGlobal "[\'$#~!%@?\^\[\]{}\\]"
 
 " Define the default highlighting.
@@ -181,4 +185,6 @@
 
 let b:current_syntax = "vhdl"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8
diff -Naur vim73.orig/runtime/syntax/vim.vim vim73/runtime/syntax/vim.vim
--- vim73.orig/runtime/syntax/vim.vim	2010-08-04 20:21:21.000000000 +0000
+++ vim73/runtime/syntax/vim.vim	2013-08-04 19:09:09.810612931 +0000
@@ -1,14 +1,16 @@
 " Vim syntax file
 " Language:	Vim 7.3 script
 " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	August 04, 2010
-" Version:	7.3-04
+" Last Change:	Jul 05, 2013
+" Version:	7.3-26
 " Automatically generated keyword lists: {{{1
 
 " Quit when a syntax file was already loaded {{{2
 if exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " vimTodo: contains common special-notices for comments {{{2
 " Use the vimCommentGroup cluster to add your own.
@@ -16,31 +18,32 @@
 syn cluster vimCommentGroup	contains=vimTodo,@Spell
 
 " regular vim commands {{{2
-syn keyword vimCommand contained	abc[lear] argdo argu[ment] bel[owright] bN[ext] breakd[el] b[uffer] caddb[uffer] cb[uffer] cex[pr] cg[etfile] checkt[ime] cnew[er] col[der] con[tinue] cq[uit] delc[ommand] diffoff diffu[pdate] dr[op] echom[sg] em[enu] endt[ry] exi[t] fina[lly] fix[del] foldd[oopen] go[to] hid[e] ij[ump] isp[lit] k laddb[uffer] la[st] lch[dir] lex[pr] lgete[xpr] l[ist] lmak[e] lN[ext] loc[kmarks] lpf[ile] lt[ag] lv[imgrep] ma[rk] mk[exrc] mkv[imrc] mz[scheme] new noh[lsearch] on[ly] ped[it] popu prev[ious] prof[ile] pta[g] ptn[ext] pts[elect] py[thon] r[ead] redr[aw] ret[ab] rightb[elow] rundo san[dbox] sbf[irst] sbN[ext] scripte[ncoding] setg[lobal] sh[ell] sla[st] sme sni[ff] sor[t] spelli[nfo] sp[lit] startg[replace] st[op] sunme syncbind tabd[o] tabl[ast] tabN[ext] tabs tcld[o] th[row] tm[enu] tp[revious] tu undoj[oin] uns[ilent] vert[ical] vi[sual] wa[ll] winp[os] wp[revious] ws[verb] xa[ll] xmenu xnoremenu
-syn keyword vimCommand contained	abo[veleft] arge[dit] as[cii] bf[irst] bo[tright] breakl[ist] buffers cad[dexpr] cc cf[ile] c[hange] cla[st] cn[ext] colo[rscheme] cope[n] cr[ewind] d[elete] diffpatch dig[raphs] ds[earch] echon emenu* endw[hile] f[ile] fin[d] fo[ld] foldo[pen] gr[ep] his[tory] il[ist] iuna[bbrev] keepalt lad[dexpr] later lcl[ose] lf[ile] lg[etfile] ll lmapc[lear] lnf[ile] lockv[ar] lp[revious] lua lvimgrepa[dd] marks mks[ession] mod[e] nbc[lose] n[ext] nu[mber] o[pen] pe[rl] popu[p] p[rint] promptf[ind] ptf[irst] ptN[ext] pu[t] qa[ll] rec[over] redraws[tatus] retu[rn] rub[y] ru[ntime] sa[rgument] sbl[ast] sbp[revious] scrip[tnames] setl[ocal] sign sl[eep] smenu sno[magic] so[urce] spellr[epall] spr[evious] star[tinsert] stopi[nsert] sunmenu t tabe[dit] tabm[ove] tabo[nly] ta[g] tclf[ile] tj[ump] tn[ext] tr[ewind] tu[nmenu] undol[ist] up[date] vie[w] vmapc[lear] wh[ile] win[size] wq wundo x[it] XMLent xunme
-syn keyword vimCommand contained	al[l] argg[lobal] bad[d] bl[ast] bp[revious] br[ewind] bun[load] caddf[ile] ccl[ose] cfir[st] changes cl[ist] cN[ext] comc[lear] co[py] cuna[bbrev] delf[unction] diffpu[t] di[splay] dsp[lit] e[dit] endfo[r] ene[w] files fini[sh] foldc[lose] for grepa[dd] iabc[lear] imapc[lear] j[oin] keepj[umps] laddf[ile] lb[uffer] le[ft] lfir[st] lgr[ep] lla[st] lnew[er] lNf[ile] lol[der] lr[ewind] luado lw[indow] mat[ch] mksp[ell] m[ove] nb[key] N[ext] ol[dfiles] opt[ions] perld[o] pp[op] P[rint] promptr[epl] ptj[ump] ptp[revious] pw[d] q[uit] redi[r] reg[isters] rew[ind] rubyd[o] rv[iminfo] sav[eas] sbm[odified] sbr[ewind] se[t] sf[ind] sil[ent] sm[agic] sn[ext] snoreme spelld[ump] spellu[ndo] sre[wind] startr[eplace] sts[elect] sus[pend] tab tabf[ind] tabnew tabp[revious] tags te[aroff] tl[ast] tN[ext] try una[bbreviate] unh[ide] verb[ose] vim[grep] vne[w] winc[md] wn[ext] wqa[ll] wv[iminfo] xmapc[lear] XMLns xunmenu
-syn keyword vimCommand contained	arga[dd] argl[ocal] ba[ll] bm[odified] brea[k] bro[wse] bw[ipeout] cal[l] cd cgetb[uffer] chd[ir] clo[se] cnf[ile] comp[iler] cpf[ile] cw[indow] delm[arks] diffsplit dj[ump] earlier el[se] endf[unction] ex filetype fir[st] folddoc[losed] fu[nction] ha[rdcopy] if is[earch] ju[mps] kee[pmarks] lan[guage] lc[d] lefta[bove] lgetb[uffer] lgrepa[dd] lli[st] lne[xt] lo[adview] lop[en] ls luafile mak[e] menut[ranslate] mkvie[w] mzf[ile] nbs[tart] nmapc[lear] omapc[lear] pc[lose] po[p] pre[serve] profd[el] ps[earch] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red[o] res[ize] ri[ght] rubyf[ile] sal[l] sba[ll] sbn[ext] sb[uffer] setf[iletype] sfir[st] sim[alt] sm[ap] sN[ext] snoremenu spe[llgood] spellw[rong] sta[g] stj[ump] sun[hide] sv[iew] tabc[lose] tabfir[st] tabn[ext] tabr[ewind] tc[l] tf[irst] tm to[pleft] ts[elect] u[ndo] unlo[ckvar] ve[rsion] vimgrepa[dd] vs[plit] windo wN[ext] w[rite] X xme xnoreme y[ank]
-syn keyword vimCommand contained	argd[elete] ar[gs] bd[elete] bn[ext] breaka[dd] bufdo cabc[lear] cat[ch] ce[nter] cgete[xpr] che[ckpath] cmapc[lear] cNf[ile] conf[irm] cp[revious] debugg[reedy] diffg[et] diffthis dl[ist] echoe[rr] elsei[f] en[dif] 
-syn match   vimCommand contained	"\<z[-+^.=]"
+syn keyword vimCommand contained	a arga[dd] ar[gs] bar bn[ext] breaka[dd] bu bw[ipeout] caddf[ile] cd cgete[xpr] checkt[ime] cmdname cnf com con[tinue] cq[uit] cw[indow] delc[ommand] diffg[et] diffpu[t] dig[raphs] dr[op] earlier el[se] endfo[r] ene[w] filename fin[d] folddoc[losed] fu[nction] gui helpg[rep] ia in j[oin] kee[pmarks] laddf[ile] lb[uffer] le[ft] lgetb[uffer] l[ist] lN lNf lo[adview] lpf[ile] luado mak[e] menut[ranslate] mks[ession] mod[e] n new noautocmd on[ly] pc[lose] popu p[rint] promptr[epl] ptn pts[elect] py[thon] quote redi[r] res[ize] ru rv[iminfo] sbf[irst] sbr[ewind] scscope sfir[st] sim[alt] sme snoreme spe spellw[rong] star st[op] sunmenu syn ta tabf[ind] tabnew tabr[ewind] tcld[o] tj[ump] tN tp[revious] tu u[ndo] unlo[ckvar] verb[ose] vim[grep] vne[w] win wn[ext] w[rite] xa[ll] XMLent xunme
+syn keyword vimCommand contained	ab argd[elete] argu[ment] bd[elete] bN[ext] breakd[el] buf c cal[l] ce[nter] cg[etfile] cl cn cNf comc[lear] cope[n] cr[ewind] d d[elete] diffo diffsplit di[splay] ds[earch] ec elsei[f] endfun ex files fini[sh] foldd[oopen] g gvim helpt[ags] iabc[lear] index ju[mps] l lan lc[d] lefta[bove] lgete[xpr] ll lne lnf[ile] locale lp[revious] luafile Man mes mksp[ell] m[ove] N n[ext] noh[lsearch] o[pen] pe popu[p] P[rint] ps[earch] ptN pu[t] python3 r red[o] ret[ab] rub[y] sal[l] sbl[ast] sb[uffer] se[t] sh[ell] sl smenu snoremenu spelld[ump] sp[lit] start stopi[nsert] sus[pend] sync tab tabfir[st] tabn[ext] tabs tclf[ile] tl[ast] tn[ext] tr tu[nmenu] undoj[oin] uns[ilent] ve[rsion] vimgrepa[dd] vs[plit] winc[md] wN[ext] ws[verb] x[it] XMLns xunmenu
+syn keyword vimCommand contained	abc[lear] argdo as[cii] bel[owright] bo[tright] breakl[ist] bufdo cabc[lear] cat[ch] cex[pr] c[hange] cla[st] cN cnf[ile] comment co[py] cs de delf diffoff difft dj[ump] dsp[lit] echoe[rr] em[enu] endf[unction] exi[t] filet fir[st] foldo[pen] get h hi if intro k la lan[guage] lch[dir] let@ lg[etfile] lla[st] lnew[er] lNf[ile] loc[kmarks] lr[ewind] lv[imgrep] ma[rk] messages mkv mv nbc[lose] N[ext] nu[mber] opt[ions] ped[it] pp[op] pro pta[g] ptn[ext] pw[d] q re redr[aw] retu[rn] rubyd[o] san[dbox] sbm[odified] scrip setf[iletype] si sla[st] sn[ext] s@\n@\=\r" spe[llgood] spr[evious] startg[replace] sts[elect] sv[iew] syncbind tabc[lose] tabl[ast] tabN[ext] ta[g] te[aroff] tm tN[ext] tr[ewind] u undol[ist] up[date] vert[ical] vi[sual] w windo wp[revious] wundo xmapc[lear] xnoreme xwininfo
+syn keyword vimCommand contained	abo[veleft] arge[dit] au bf[irst] bp[revious] br[ewind] b[uffer] cad cb[uffer] cf[ile] changes cl[ist] cnew[er] cNf[ile] comp[iler] count cscope debug delf[unction] DiffOrig diffthis dl[ist] dwim echom[sg] emenu* en[dif] exu[sage] filetype fix[del] for go[to] ha[rdcopy] hid[e] ij[ump] is[earch] keepa lad la[st] lcl[ose] lex[pr] lgr[ep] lli[st] lne[xt] lo lockv[ar] ls lvimgrepa[dd] marks mk mkvie[w] mz nb[key] nkf o ownsyntax pe[rl] pr profd[el] ptf[irst] ptN[ext] py qa[ll] r[ead] redraws[tatus] rew[ind] rubyf[ile] sa[rgument] sbn[ext] scripte[ncoding] setg[lobal] sig sl[eep] sN[ext] so spelli[nfo] sre[wind] star[tinsert] sun[hide] sw[apname] synlist tabd[o] tabm[ove] tabo[nly] tags tf[irst] tm[enu] TOhtml try un unh[ide] v vi viu[sage] wa[ll] winp[os] wq wv[iminfo] xme xnoremenu y[ank]
+syn keyword vimCommand contained	al[l] argg[lobal] bad[d] bl[ast] br bro[wse] buffers caddb[uffer] cc cfir[st] chd[ir] clo[se] cn[ext] col[der] con cpf[ile] cstag debugg[reedy] delm[arks] diffp diffu[pdate] do e echon en endt[ry] f fin fo[ld] fu gr[ep] h[elp] his[tory] il[ist] isp[lit] keepalt laddb[uffer] lat lcs lf[ile] lgrepa[dd] lmak[e] lN[ext] loadk lol[der] lt[ag] lw[indow] mat[ch] mkdir mkv[imrc] mzf[ile] nbs[tart] nmapc[lear] ol[dfiles] p perld[o] pre[serve] prof[ile] ptj[ump] ptp[revious] py3 q[uit] rec[over] reg[isters] ri[ght] rundo sav[eas] sbN[ext] scrip[tnames] setl[ocal] sign sm[agic] sni[ff] sor[t] spellr[epall] st startr[eplace] sunme sy t tabe[dit] tabN tabp[revious] tc[l] th[row] tn to[pleft] ts[elect] una[bbreviate] unl ve vie[w] vmapc[lear] wh[ile] win[size] wqa[ll] x xmenu xterm errormsg
+syn keyword vimCommand contained	ar argl[ocal] ba[ll] bm[odified] brea[k] browseset bun[load] cad[dexpr] ccl[ose] cgetb[uffer] che[ckpath] cmapc[lear] cN[ext] colo[rscheme] conf[irm] cp[revious] cuna[bbrev] del di diffpatch dig doau ea e[dit] endf endw[hile] f[ile] fina[lly] foldc[lose] fun grepa[dd] helpf[ind] i imapc[lear] iuna[bbrev] keepj[umps] lad[dexpr] later lcscope lfir[st] lh[elpgrep] lmapc[lear] lnf loadkeymap lop[en] lua ma menut mk[exrc] mo mz[scheme] ne noa omapc[lear] P po[p] prev[ious] promptf[ind] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red Ren rightb[elow] ru[ntime] sba[ll] sbp[revious] scs sf[ind] sil[ent] sm[ap] sno[magic] so[urce] spellu[ndo] sta[g] stj[ump] 
+syn match   vimCommand contained	"\<z[-+^.=]\="
 
 " vimOptions are caught only when contained in a vimSet {{{2
-syn keyword vimOption contained	acd ambiwidth arabicshape autowriteall backupdir bdlay binary breakat bufhidden cd ci cinw co commentstring confirm cpoptions cscopetag csto cwh dg dip eadirection ek equalprg ex fdi fen fileencodings flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imi incsearch infercase isk keymap langmenu linespace loadplugins macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pm printdevice printoptions quoteescape restorescreen rnu rulerformat scr sect sft shellredir shm showmode sj smd spell splitbelow ssl stl sw sxq tabpagemax tags tbis terse thesaurus titleold toolbariconsize tsr ttyfast tx undofile ut verbosefile virtualedit wb wfw wildcharm winaltkeys winminwidth wmnu write
-syn keyword vimOption contained	ai ambw ari aw backupext beval biosk brk buflisted cdpath cin cinwords cocu compatible consk cpt cscopetagorder csverb debug dict dir eb enc errorbells expandtab fdl fenc fileformat fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatekey iminsert inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt revins ro runtimepath scroll sections sh shellslash shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile syn tabstop tagstack tbs textauto tildeop titlestring top ttimeout ttym uc undolevels vb vfile visualbell wc wh wildignore window winwidth wmw writeany
-syn keyword vimOption contained	akm anti arshape awa backupskip bex bioskey browsedir buftype cedit cindent clipboard cole complete conskey crb cscopeverbose cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformats fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imak ims indentexpr is isp keywordprg lazyredraw lispwords ls makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pexpr pmbfn printexpr pt readonly ri rs sb scrollbind secure shcf shelltemp shortname shq sm so spellfile spr st sts swapsync synmaxcol tag tal tenc textmode timeout tl tpm ttimeoutlen ttymouse udf undoreload vbs vi vop wcm whichwrap wildmenu winfixheight wiv wop writebackup
-syn keyword vimOption contained	al antialias autochdir background balloondelay bexpr bk bs casemap cf cink cmdheight colorcolumn completefunc copyindent cryptmethod cspc cul def diff display edcompatible endofline errorformat fcl fdm fex filetype fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imc imsearch indentkeys isf isprint km lbr list lsp makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pfn popt printfont pumheight redrawtime rightleft rtp sbo scrolljump sel shell shelltype showbreak si smartcase softtabstop spelllang sps sta su swb syntax tagbsearch tb term textwidth timeoutlen tm tr ttm ttyscroll udir updatecount vdir viewdir wa wd wi wildmode winfixwidth wiw wrap writedelay
-syn keyword vimOption contained	aleph ar autoindent backspace ballooneval bg bkc bsdir cb cfu cinkeys cmdwinheight columns completeopt cot cscopepathcomp csprg cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fillchars foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imcmdline inc indk isfname joinspaces kmp lcs listchars lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode ph preserveindent printheader pvh relativenumber rightleftcmd ru sbr scrolloff selection shellcmdflag shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf ta taglength tbi termbidi tf title to ts tty ttytype ul updatetime ve viewoptions wak weirdinvert wig wildoptions winheight wm wrapmargin ws
-syn keyword vimOption contained	allowrevins arab autoread backup balloonexpr bh bl bsk cc ch cino cmp com concealcursor cp cscopeprg csqf cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imd include inex isi js kp linebreak lm lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path pheader previewheight printmbcharset pvw remap rl ruf sc scrollopt selectmode shellpipe shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf tabline tagrelative tbidi termencoding tgst titlelen toolbar tsl ttybuiltin tw undodir ur verbose viminfo warn wfh wildchar wim winminheight wmh wrapscan ww
-syn keyword vimOption contained	altkeymap arabic autowrite backupcopy bdir bin bomb bt ccv charconvert cinoptions cms comments conceallevel cpo cscopequickfix cst cursorline dex digraph ead ei equalalways eventignore fde fdt fileencoding fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imdisable includeexpr inf isident key langmap lines lmap ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pi previewwindow printmbfont qe report rlc ruler scb scs sessionoptions shellquote shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws 
+syn keyword vimOption contained	acd ambiwidth arabicshape autowriteall backupdir bdlay binary breakat bufhidden cd ci cinw co commentstring confirm cpoptions cscoperelative csre cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imd include inex isi js kp linebreak lm lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path pheader previewheight printmbcharset pvw remap rl ruf sc scrollopt selectmode shellpipe shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf syntax taglength tbidi terse tildeop tl tpm ttimeoutlen ttymouse udf undoreload vbs vi vop wcm whichwrap wildignore winaltkeys winminwidth wmnu write
+syn keyword vimOption contained	ai ambw ari aw backupext beval biosk brk buflisted cdpath cin cinwords cocu compatible consk cpt cscopetag cst cursorline dex digraph ead ei equalalways eventignore fde fdt fileencoding fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imdisable includeexpr inf isident key langmap lines lmap ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pi previewwindow printmbfont qe report rlc ruler scb scs sessionoptions shellquote shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf ta tagrelative tbis textauto timeout tm tr ttm ttyscroll udir updatecount vdir viewdir wa wd wi wildignorecase window winwidth wmw writeany
+syn keyword vimOption contained	akm anti arshape awa backupskip bex bioskey browsedir buftype cedit cindent clipboard cole complete conskey crb cscopetagorder csto cwh dg dip eadirection ek equalprg ex fdi fen fileencodings flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imi incsearch infercase isk keymap langmenu linespace loadplugins macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pm printdevice printoptions quoteescape restorescreen rnu rulerformat scr sect sft shellredir shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws tabline tags tbs textmode timeoutlen to ts tty ttytype ul updatetime ve viewoptions wak weirdinvert wic wildmenu winfixheight wiv wop writebackup
+syn keyword vimOption contained	al antialias autochdir background balloondelay bexpr bk bs casemap cf cink cmdheight colorcolumn completefunc copyindent cryptmethod cscopeverbose csverb debug dict dir eb enc errorbells expandtab fdl fenc fileformat fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatekey iminsert inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt revins ro runtimepath scroll sections sh shellslash shm showmode sj smd spell splitbelow ssl stl sw sxe tabpagemax tagstack tenc textwidth title toolbar tsl ttybuiltin tw undodir ur verbose viminfo warn wfh wig wildmode winfixwidth wiw wrap writedelay
+syn keyword vimOption contained	aleph ar autoindent backspace ballooneval bg bkc bsdir cb cfu cinkeys cmdwinheight columns completeopt cot cscopepathcomp cspc cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformats fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imak ims indentexpr is isp keywordprg lazyredraw lispwords ls makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pexpr pmbfn printexpr pt readonly ri rs sb scrollbind secure shcf shelltemp shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tal term tf titlelen toolbariconsize tsr ttyfast tx undofile ut verbosefile virtualedit wb wfw wildchar wildoptions winheight wm wrapmargin ws
+syn keyword vimOption contained	allowrevins arab autoread backup balloonexpr bh bl bsk cc ch cino cmp com concealcursor cp cscopeprg csprg cul def diff display edcompatible endofline errorformat fcl fdm fex filetype fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imc imsearch indentkeys isf isprint km lbr list lsp makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pfn popt printfont pumheight redrawtime rightleft rtp sbo scrolljump sel shell shelltype shortname shq sm so spellfile spr st sts swapsync syn tag tb termbidi tgst titleold top ttimeout ttym uc undolevels vb vfile visualbell wc wh wildcharm wim winminheight wmh wrapscan ww
+syn keyword vimOption contained	altkeymap arabic autowrite backupcopy bdir bin bomb bt ccv charconvert cinoptions cms comments conceallevel cpo cscopequickfix csqf cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fillchars foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imcmdline inc indk isfname joinspaces kmp lcs listchars lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode ph preserveindent printheader pvh relativenumber rightleftcmd ru sbr scrolloff selection shellcmdflag shellxescape showbreak si smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tbi termencoding thesaurus titlestring 
 
 " vimOptions: These are the turn-off setting variants {{{2
-syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopetag nocsverb nocursorbind nodeco nodiff noeb noek noeol noerrorbells noet noexpandtab nofen nofkmap nogd noguipty nohidden nohkmap nohkp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowinfixheight nowiv nowrap nowrite nowritebackup
-syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopeverbose nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast novb nowa nowb nowfh nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
-syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocst nocul nocursorline nodg noea noedcompatible 
+syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopetag nocsverb nocursorbind nodeco nodiff noeb noek noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast novb nowa nowb nowfh nowildignorecase* * nowinfixheight nowiv nowrap nowrite nowritebackup
+syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopeverbose nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noerrorbells noet noexpandtab nofen nofkmap nogd noguipty nohidden nohkmap nohkp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
+syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocst nocul nocursorline nodg noea noedcompatible noeol 
 
 " vimOptions: These are the invertible variants {{{2
-syn keyword vimOption contained	invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscopetag invcsverb invcursorbind invdeco invdiff inveb invek inveol inverrorbells invet invexpandtab invfen invfkmap invgd invguipty invhidden invhkmap invhkp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invvisualbell invwarn invweirdinvert invwfw invwinfixheight invwiv invwrap invwrite invwritebackup
-syn keyword vimOption contained	invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopeverbose invcuc invcursorcolumn invdelcombine invdigraph inved invendofline invequalalways invesckeys invex invexrc invfk invfoldenable invgdefault invhid invhk invhkmapp invhls invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invvb invwa invwb invwfh invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
-syn keyword vimOption contained	invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcst invcul invcursorline invdg invea invedcompatible 
+syn keyword vimOption contained	invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscopetag invcsverb invcursorbind invdeco invdiff inveb invek invequalalways invesckeys invex invexrc invfk invfoldenable invgdefault invhid invhk invhkmapp invhls invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invvb invwa invwb invwfh invwildignorecase* * invwinfixheight invwiv invwrap invwrite invwritebackup
+syn keyword vimOption contained	invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopeverbose invcuc invcursorcolumn invdelcombine invdigraph inved invendofline inverrorbells invet invexpandtab invfen invfkmap invgd invguipty invhidden invhkmap invhkp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invvisualbell invwarn invweirdinvert invwfw invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
+syn keyword vimOption contained	invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcst invcul invcursorline invdg invea invedcompatible inveol 
 
 " termcap codes (which can also be set) {{{2
 syn keyword vimOption contained	t_AB t_al t_bc t_ce t_cl t_Co t_cs t_Cs t_CS t_CV t_da t_db t_dl t_DL t_EI t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI t_so t_sr t_te t_ti t_ts t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xs t_ZH t_ZR
@@ -59,7 +62,7 @@
 
 " AutoCmd Events {{{2
 syn case ignore
-syn keyword vimAutoEvent contained	BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
+syn keyword vimAutoEvent contained	BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
 
 " Highlight commonly used Groupnames {{{2
 syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo 
@@ -70,11 +73,11 @@
 syn case match
 
 " Function Names {{{2
-syn keyword vimFuncName contained	abs append argv atan2 bufexists bufname byte2line ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdtype getfperm getftype getmatches getqflist gettabvar getwinposy globpath haslocaldir histdel hlexists iconv input inputrestore insert items len line localtime map match matchdelete matchstr min mode nextnonblank pathshorten prevnonblank pumvisible readfile reltimestr remote_foreground remote_read remove repeat reverse search searchpair searchpos serverlist setcmdpos setloclist setpos setreg settabwinvar shellescape sin sort spellbadword split str2float strchars strftime string strpart strtrans submatch synconcealed synIDattr synstack tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree virtcol winbufnr winheight winnr winrestview winwidth
-syn keyword vimFuncName contained	acos argc asin browse buflisted bufnr byteidx changenr clearmatches complete_add copy count deepcopy diff_filler escape executable expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcmdline getcwd getfsize getline getpid getreg gettabwinvar getwinvar has hasmapto histget hlID indent inputdialog inputsave isdirectory join libcall line2byte log maparg matchadd matchend max mkdir mzeval nr2char pow printf range reltime remote_expr remote_peek remote_send rename resolve round searchdecl searchpairpos server2client setbufvar setline setmatches setqflist settabvar setwinvar simplify sinh soundfold spellsuggest sqrt str2nr strdisplaywidth stridx strlen strridx strwidth substitute synID synIDtrans system tabpagenr tagfiles tan tempname toupper trunc undofile values visualmode wincol winline winrestcmd winsaveview writefile
-syn keyword vimFuncName contained	add argidx atan browsedir bufloaded bufwinnr call char2nr col complete_check cos cscope_connection delete diff_hlID eval exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdpos getfontname getftime getloclist getpos getregtype getwinposx glob has_key histadd histnr hostname index inputlist inputsecret islocked keys libcallnr lispindent log10 mapcheck matcharg matchlist 
+syn keyword vimFuncName contained	abs and argidx atan browsedir bufloaded bufwinnr call char2nr col complete_check cos cscope_connection delete diff_hlID eval exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdpos getfontname getftime getloclist getpos getregtype getwinposx glob has_key histadd histnr hostname index inputlist inputsecret isdirectory join libcall line2byte log map match matchdelete matchstr mkdir nextnonblank pathshorten printf pyeval reltime remote_foreground remote_read remove repeat reverse search searchpair searchpos serverlist setcmdpos setloclist setpos setreg settabwinvar shellescape simplify sinh soundfold spellsuggest sqrt str2nr strdisplaywidth stridx strlen strridx strwidth substitute synID synIDtrans system tabpagenr tagfiles tan tempname toupper trunc undofile values visualmode wincol winline winrestcmd winsaveview writefile
+syn keyword vimFuncName contained	acos append argv atan2 bufexists bufname byte2line ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdtype getfperm getftype getmatches getqflist gettabvar getwinposy globpath haslocaldir histdel hlexists iconv input inputrestore insert islocked keys libcallnr lispindent log10 maparg matchadd matchend max mode nr2char pow pumvisible range reltimestr remote_peek remote_send rename resolve round searchdecl searchpairpos server2client setbufvar setline setmatches setqflist settabvar setwinvar shiftwidth sin sort spellbadword split str2float strchars strftime string strpart strtrans submatch synconcealed synIDattr synstack tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree virtcol winbufnr winheight winnr winrestview winwidth xor
+syn keyword vimFuncName contained	add argc asin browse buflisted bufnr byteidx changenr clearmatches complete_add copy count deepcopy diff_filler escape executable expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcmdline getcwd getfsize getline getpid getreg gettabwinvar getwinvar has hasmapto histget hlID indent inputdialog inputsave invert items len line localtime luaeval mapcheck matcharg matchlist min mzeval or prevnonblank py3eval readfile remote_expr 
 
-"--- syntax above generated by mkvimvim ---
+"--- syntax here and above generated by mkvimvim ---
 " Special Vim Highlighting (not automatic) {{{1
 
 " commands not picked up by the generator (due to non-standard format)
@@ -93,17 +96,17 @@
 
 " Numbers {{{2
 " =======
-syn match vimNumber	"\<\d\+\([lL]\|\.\d\+\)\="
-syn match vimNumber	"-\d\+\([lL]\|\.\d\+\)\="
+syn match vimNumber	"\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
+syn match vimNumber	"-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\="  skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
 syn match vimNumber	"\<0[xX]\x\+"
 syn match vimNumber	"#\x\{6}"
 
 " All vimCommands are contained by vimIsCommands. {{{2
 syn match vimCmdSep	"[:|]\+"	skipwhite nextgroup=vimAddress,vimAutoCmd,vimCommand,vimExtCmd,vimFilter,vimLet,vimMap,vimMark,vimSet,vimSyntax,vimUserCmd
 syn match vimIsCommand	"\<\h\w*\>"	contains=vimCommand
-syn match vimVar		"\<[bwglsav]:\K\k*\>"
-syn match vimVar        contained	"\<\K\k*\>"
-syn match vimFBVar      contained   "\<[bwglsav]:\K\k*\>"
+syn match vimVar        contained	"\<\h[a-zA-Z0-9#_]*\>"
+syn match vimVar		"\<[bwglsav]:\h[a-zA-Z0-9#_]*\>"
+syn match vimFBVar      contained   "\<[bwglsav]:\h[a-zA-Z0-9#_]*\>"
 syn keyword vimCommand  contained	in
 
 " Insertions And Appends: insert append {{{2
@@ -116,14 +119,14 @@
 " =======
 syn match   vimBehave	"\<be\%[have]\>" skipwhite nextgroup=vimBehaveModel,vimBehaveError
 syn keyword vimBehaveModel contained	mswin	xterm
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
  syn match   vimBehaveError contained	"[^ ]\+"
 endif
 
 " Filetypes {{{2
 " =========
 syn match   vimFiletype	"\<filet\%[ype]\(\s\+\I\i*\)*"	skipwhite contains=vimFTCmd,vimFTOption,vimFTError
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
  syn match   vimFTError  contained	"\I\i*"
 endif
 syn keyword vimFTCmd    contained	filet[ype]
@@ -131,41 +134,42 @@
 
 " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
 " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
-syn cluster vimAugroupList	contains=vimIsCommand,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
+syn cluster vimAugroupList	contains=vimIsCommand,vimCommand,vimUserCmd,vimExecute,vimNotFunc,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
 if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'a'
- syn region  vimAugroup	fold start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
+ syn region  vimAugroup	fold start="\<aug\%[roup]\>\s\+\h\w*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
 else
- syn region  vimAugroup	start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
+ syn region  vimAugroup	start="\<aug\%[roup]\>\s\+\h\w*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
 endif
 syn match   vimAugroup	"aug\%[roup]!" contains=vimAugroupKey
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
  syn match   vimAugroupError	"\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
 endif
 syn keyword vimAugroupKey contained	aug[roup]
 
 " Operators: {{{2
 " =========
-syn cluster	vimOperGroup	contains=vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
+" COMBAK: vimOperParen used to have "oneline"
+syn cluster	vimOperGroup	contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
 syn match	vimOper	"\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}"	skipwhite nextgroup=vimString,vimSpecFile
 syn match	vimOper	"||\|&&\|[-+.]"	skipwhite nextgroup=vimString,vimSpecFile
-syn region	vimOperParen 	oneline matchgroup=vimParenSep	start="(" end=")" contains=@vimOperGroup
-syn region	vimOperParen	oneline matchgroup=vimSep	start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
-if !exists("g:vimsyn_noerror")
+syn region	vimOperParen 	matchgroup=vimParenSep	start="(" end=")" contains=@vimOperGroup
+syn region	vimOperParen	matchgroup=vimSep	start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
  syn match	vimOperError	")"
 endif
 
 " Functions : Tag is provided for those who wish to highlight tagged functions {{{2
 " =========
 syn cluster	vimFuncList	contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
-syn cluster	vimFuncBodyList	contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUserCommand
+syn cluster	vimFuncBodyList	contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUnmap,vimUserCommand
 syn match	vimFunction	"\<fu\%[nction]!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*("	contains=@vimFuncList nextgroup=vimFuncBody
 
 if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'f'
  syn region	vimFuncBody  contained	fold start="\ze("	matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"		contains=@vimFuncBodyList
-else                                                                                                          
+else
  syn region	vimFuncBody  contained	start="\ze("	matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"		contains=@vimFuncBodyList
 endif
-syn match	vimFuncVar   contained	"a:\(\K\k*\|\d\+\)"
+syn match	vimFuncVar   contained	"a:\(\h\w*\|\d\+\)"
 syn match	vimFuncSID   contained	"\c<sid>\|\<s:"
 syn keyword	vimFuncKey   contained	fu[nction]
 syn match	vimFuncBlank contained	"\s\+"
@@ -194,14 +198,14 @@
 syn match	vimUserAttrb	contained	"-bang\=\>"	contains=vimOper,vimUserAttrbKey
 syn match	vimUserAttrb	contained	"-bar\>"	contains=vimOper,vimUserAttrbKey
 syn match	vimUserAttrb	contained	"-re\%[gister]\>"	contains=vimOper,vimUserAttrbKey
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
  syn match	vimUserCmdError	contained	"\S\+\>"
 endif
 syn case ignore
 syn keyword	vimUserAttrbKey   contained	bar	ban[g]	cou[nt]	ra[nge] com[plete]	n[args]	re[gister]
-syn keyword	vimUserAttrbCmplt contained	augroup buffer command dir environment event expression file function help highlight mapping menu option shellcmd something tag tag_listfiles var
+syn keyword	vimUserAttrbCmplt contained	augroup buffer color command compiler cscope dir environment event expression file file_in_path filetype function help highlight locale mapping menu option shellcmd sign syntax tag tag_listfiles var
 syn keyword	vimUserAttrbCmplt contained	custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
-syn match	vimUserAttrbCmpltFunc contained	",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%(#\u\w*\)\+\|\u\w*\)"hs=s+1 nextgroup=vimUserCmdError
+syn match	vimUserAttrbCmpltFunc contained	",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%(#\h\w*\)\+\|\h\w*\)"hs=s+1 nextgroup=vimUserCmdError
 
 syn case match
 syn match	vimUserAttrbCmplt contained	"custom,\u\w*"
@@ -241,7 +245,7 @@
 syn cluster	vimSubstList	contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
 syn cluster	vimSubstRepList	contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
 syn cluster	vimSubstList	add=vimCollection
-syn match	vimSubst	"\(:\+\s*\|^\s*\||\s*\)\<s\%[ubstitute][:[:alpha:]]\@!" nextgroup=vimSubstPat
+syn match	vimSubst	"\(:\+\s*\|^\s*\||\s*\)\<\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[:[:alpha:]]\@!" nextgroup=vimSubstPat
 syn match	vimSubst	"s\%[ubstitute][:#[:alpha:]]\@!"	nextgroup=vimSubstPat contained
 syn match	vimSubst	"/\zss\%[ubstitute]\ze/"	nextgroup=vimSubstPat
 syn match	vimSubst1       contained	"s\%[ubstitute]\>"	nextgroup=vimSubstPat
@@ -267,7 +271,7 @@
 syn match	vimMarkNumber	"[-+]\d\+"		nextgroup=vimSubst contained contains=vimOper
 syn match	vimPlainMark contained	"'[a-zA-Z0-9]"
 
-syn match	vimRegister	'[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":]'
+syn match	vimRegister	'[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
 syn match	vimRegister	'\<norm\s\+\zs"[a-zA-Z0-9]'
 syn match	vimRegister	'\<normal\s\+\zs"[a-zA-Z0-9]'
 syn match	vimRegister	'@"'
@@ -277,15 +281,15 @@
 syn match	vimAddress	"%\ze\a"	skipwhite nextgroup=vimString,vimSubst1
 
 syn match	vimFilter contained	"^!.\{-}\(|\|$\)"		contains=vimSpecFile
-syn match	vimFilter contained	"\A!.\{-}\(|\|$\)"ms=s+1	contains=vimSpecFile
+syn match	vimFilter contained	"\A!.\{-}\(|\|$\)"ms=s+1	contains=vimSpecFile,vimFunction,vimFuncName,vimOperParen
 
 " Complex repeats (:h complex-repeat) {{{2
-syn match	vimCmplxRepeat	'[^a-zA-Z_/\\()]q[0-9a-zA-Z"]'lc=1
-syn match	vimCmplxRepeat	'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\)'
+syn match	vimCmplxRepeat	'[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
+syn match	vimCmplxRepeat	'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
 
 " Set command and associated set-options (vimOptions) with comment {{{2
 syn region	vimSet		matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\." end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString,vimSetMod
-syn region	vimSetEqual	contained	start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation oneline
+syn region	vimSetEqual	contained	start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar oneline
 syn region	vimSetString	contained	start=+="+hs=s+1	skip=+\\\\\|\\"+  end=+"+	contains=vimCtrlChar
 syn match	vimSetSep	contained	"[,:]"
 syn match	vimSetMod	contained	"&vim\=\|[!&?<]\|all&"
@@ -318,13 +322,13 @@
 " ====
 syn match	vimMap		"\<map\>!\=\ze\s*[^(]" skipwhite nextgroup=vimMapMod,vimMapLhs
 syn keyword	vimMap		cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] smap snor[emap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
-syn keyword	vimMap		mapc[lear]
+syn keyword	vimMap		mapc[lear] smapc[lear]
 syn keyword	vimUnmap		cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] unm[ap] unm[ap] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
 syn match	vimMapLhs	contained	"\S\+"			contains=vimNotation,vimCtrlChar skipwhite nextgroup=vimMapRhs
 syn match	vimMapBang	contained	"!"			skipwhite nextgroup=vimMapMod,vimMapLhs
 syn match	vimMapMod	contained	"\c<\(buffer\|expr\|\(local\)\=leader\|plug\|script\|sid\|unique\|silent\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs
 syn match	vimMapRhs	contained	".*" contains=vimNotation,vimCtrlChar	skipnl nextgroup=vimMapRhsExtend
-syn match	vimMapRhsExtend	contained	"^\s*\\.*$"			contains=vimContinue
+syn match	vimMapRhsExtend	contained	"^\s*\\.*$"			contains=vimNotation,vimCtrlChar,vimContinue	skipnl nextgroup=vimMapRhsExtend
 syn case ignore
 syn keyword	vimMapModKey	contained	buffer	expr	leader	localleader	plug	script	sid	silent	unique
 syn case match
@@ -344,7 +348,7 @@
 " Angle-Bracket Notation (tnx to Michael Geddes) {{{2
 " ======================
 syn case ignore
-syn match	vimNotation	"\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|space\|k\=\(page\)\=\(\|down\|up\)\)>" contains=vimBracket
+syn match	vimNotation	"\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\(page\)\=\(\|down\|up\|k\d\>\)\)>" contains=vimBracket
 syn match	vimNotation	"\(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>"	contains=vimBracket
 syn match	vimNotation	"\(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>"		contains=vimBracket
 syn match	vimNotation	'\(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1			contains=vimBracket
@@ -356,13 +360,13 @@
 " User Function Highlighting {{{2
 " (following Gautam Iyer's suggestion)
 " ==========================
-syn match vimFunc		"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("		contains=vimFuncName,vimUserFunc,vimExecute
-syn match vimUserFunc contained	"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"	contains=vimNotation
+syn match vimFunc		"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("		contains=vimFuncName,vimUserFunc,vimExecute
+syn match vimUserFunc contained	"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"	contains=vimNotation
 syn match vimNotFunc	"\<if\>\|\<el\%[seif]\>\|\<return\>\|\<while\>"
 
 " Errors And Warnings: {{{2
 " ====================
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
  syn match	vimFunctionError	"\s\zs[a-z0-9]\i\{-}\ze\s*("			contained contains=vimFuncKey,vimFuncBlank
 " syn match	vimFunctionError	"\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)[0-9]\i\{-}\ze\s*("	contained contains=vimFuncKey,vimFuncBlank
  syn match	vimElseIfErr	"\<else\s\+if\>"
@@ -379,7 +383,7 @@
 syn match	vimGroupList	contained	"@\=[^ \t,]*"	contains=vimGroupSpecial,vimPatSep
 syn match	vimGroupList	contained	"@\=[^ \t,]*,"	nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep
 syn keyword	vimGroupSpecial	contained	ALL	ALLBUT	CONTAINED	TOP
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
  syn match	vimSynError	contained	"\i\+"
  syn match	vimSynError	contained	"\i\+="	nextgroup=vimGroupList
 endif
@@ -389,10 +393,11 @@
 
 syn match	vimSyntax	"\<sy\%[ntax]\>"	contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
 syn match	vimAuSyntax	contained	"\s+sy\%[ntax]"	contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
+syn cluster vimFuncBodyList add=vimSyntax
 
 " Syntax: case {{{2
 syn keyword	vimSynType	contained	case	skipwhite nextgroup=vimSynCase,vimSynCaseError
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
  syn match	vimSynCaseError	contained	"\i\+"
 endif
 syn keyword	vimSynCase	contained	ignore	match
@@ -402,28 +407,32 @@
 
 " Syntax: cluster {{{2
 syn keyword	vimSynType	contained	cluster	skipwhite nextgroup=vimClusterName
-syn region	vimClusterName	contained	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
+syn region	vimClusterName	contained	matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" matchgroup=vimSep end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
 syn match	vimGroupAdd	contained	"add="	nextgroup=vimGroupList
 syn match	vimGroupRem	contained	"remove="	nextgroup=vimGroupList
+syn cluster vimFuncBodyList add=vimSynType,vimGroupAdd,vimGroupRem
 
 " Syntax: include {{{2
 syn keyword	vimSynType	contained	include	skipwhite nextgroup=vimGroupList
+syn cluster vimFuncBodyList add=vimSynType
 
 " Syntax: keyword {{{2
 syn cluster	vimSynKeyGroup	contains=vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
 syn keyword	vimSynType	contained	keyword	skipwhite nextgroup=vimSynKeyRegion
-syn region	vimSynKeyRegion	contained oneline keepend	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
+syn region	vimSynKeyRegion	contained oneline keepend	matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
 syn match	vimSynKeyOpt	contained	"\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
+syn cluster vimFuncBodyList add=vimSynType
 
 " Syntax: match {{{2
 syn cluster	vimSynMtchGroup	contains=vimMtchComment,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation
 syn keyword	vimSynType	contained	match	skipwhite nextgroup=vimSynMatchRegion
-syn region	vimSynMatchRegion	contained keepend	matchgroup=vimGroupName start="\k\+" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup
+syn region	vimSynMatchRegion	contained keepend	matchgroup=vimGroupName start="\h\w*" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup
 syn match	vimSynMtchOpt	contained	"\<\(conceal\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
 if has("conceal")
- syn match	vimSynMtchOpt	contained	"\<cchar="	nextgroup=VimSynMtchCchar
+ syn match	vimSynMtchOpt	contained	"\<cchar="	nextgroup=vimSynMtchCchar
  syn match	vimSynMtchCchar	contained	"\S"
 endif
+syn cluster vimFuncBodyList add=vimSynMtchGroup
 
 " Syntax: off and on {{{2
 syn keyword	vimSynType	contained	enable	list	manual	off	on	reset
@@ -432,7 +441,7 @@
 syn cluster	vimSynRegPatGroup	contains=vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
 syn cluster	vimSynRegGroup	contains=vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
 syn keyword	vimSynType	contained	region	skipwhite nextgroup=vimSynRegion
-syn region	vimSynRegion	contained keepend	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" end="|\|$" contains=@vimSynRegGroup
+syn region	vimSynRegion	contained keepend	matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" end="|\|$" contains=@vimSynRegGroup
 syn match	vimSynRegOpt	contained	"\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
 syn match	vimSynReg	contained	"\(start\|skip\|end\)="he=e-1	nextgroup=vimSynRegPat
 syn match	vimSynMtchGrp	contained	"matchgroup="	nextgroup=vimGroup,vimHLGroup
@@ -444,11 +453,12 @@
 syn region	vimSynPatRange	contained	start="\["	skip="\\\\\|\\]"   end="]"
 syn match	vimSynNotPatRange	contained	"\\\\\|\\\["
 syn match	vimMtchComment	contained	'"[^"]\+$'
+syn cluster vimFuncBodyList add=vimSynType
 
 " Syntax: sync {{{2
 " ============
 syn keyword vimSynType	contained	sync	skipwhite	nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
  syn match	vimSyncError	contained	"\i\+"
 endif
 syn keyword	vimSyncC	contained	ccomment	clear	fromstart
@@ -457,9 +467,9 @@
 syn match	vimSyncLinebreak	contained	"\<linebreaks="	skipwhite	nextgroup=vimNumber
 syn keyword	vimSyncLinecont	contained	linecont	skipwhite	nextgroup=vimSynRegPat
 syn match	vimSyncLines	contained	"\(min\|max\)\=lines="	nextgroup=vimNumber
-syn match	vimSyncGroupName	contained	"\k\+"	skipwhite	nextgroup=vimSyncKey
+syn match	vimSyncGroupName	contained	"\h\w*"	skipwhite	nextgroup=vimSyncKey
 syn match	vimSyncKey	contained	"\<groupthere\|grouphere\>"	skipwhite nextgroup=vimSyncGroup
-syn match	vimSyncGroup	contained	"\k\+"	skipwhite	nextgroup=vimSynRegPat,vimSyncNone
+syn match	vimSyncGroup	contained	"\h\w*"	skipwhite	nextgroup=vimSynRegPat,vimSyncNone
 syn keyword	vimSyncNone	contained	NONE
 
 " Additional IsCommand, here by reasons of precedence {{{2
@@ -469,9 +479,12 @@
 " Highlighting {{{2
 " ============
 syn cluster	vimHighlightCluster		contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
+ syn match	vimHiCtermError	contained	"[^0-9]\i*"
+endif
 syn match	vimHighlight	"\<hi\%[ghlight]\>"	skipwhite nextgroup=vimHiBang,@vimHighlightCluster
 syn match	vimHiBang	contained	"!"	skipwhite nextgroup=@vimHighlightCluster
-       	
+
 syn match	vimHiGroup	contained	"\i\+"
 syn case ignore
 syn keyword	vimHiAttrib	contained	none bold inverse italic reverse standout underline undercurl
@@ -480,36 +493,36 @@
 syn match	vimHiAttribList	contained	"\i\+"	contains=vimHiAttrib
 syn match	vimHiAttribList	contained	"\i\+,"he=e-1	contains=vimHiAttrib nextgroup=vimHiAttribList
 syn case ignore
-syn keyword	vimHiCtermColor	contained	black blue brown cyan darkBlue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
+syn keyword	vimHiCtermColor	contained	black blue brown cyan darkblue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
+syn match	vimHiCtermColor	contained	"\<color\d\{1,3}\>"
 
 syn case match
 syn match	vimHiFontname	contained	"[a-zA-Z\-*]\+"
 syn match	vimHiGuiFontname	contained	"'[a-zA-Z\-* ]\+'"
 syn match	vimHiGuiRgb	contained	"#\x\{6}"
-if !exists("g:vimsyn_noerror")
- syn match	vimHiCtermError	contained	"[^0-9]\i*"
-endif
 
 " Highlighting: hi group key=arg ... {{{2
 syn cluster	vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
 syn region	vimHiKeyList	contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||"	contains=@vimHiCluster
-if !exists("g:vimsyn_noerror")
+if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
  syn match	vimHiKeyError	contained	"\i\+="he=e-1
 endif
 syn match	vimHiTerm	contained	"\cterm="he=e-1		nextgroup=vimHiAttribList
 syn match	vimHiStartStop	contained	"\c\(start\|stop\)="he=e-1	nextgroup=vimHiTermcap,vimOption
 syn match	vimHiCTerm	contained	"\ccterm="he=e-1		nextgroup=vimHiAttribList
-syn match	vimHiCtermFgBg	contained	"\ccterm[fb]g="he=e-1	nextgroup=vimNumber,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
+syn match	vimHiCtermFgBg	contained	"\ccterm[fb]g="he=e-1	nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
 syn match	vimHiGui	contained	"\cgui="he=e-1		nextgroup=vimHiAttribList
 syn match	vimHiGuiFont	contained	"\cfont="he=e-1		nextgroup=vimHiFontname
 syn match	vimHiGuiFgBg	contained	"\cgui\%([fb]g\|sp\)="he=e-1	nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
 syn match	vimHiTermcap	contained	"\S\+"		contains=vimNotation
+syn match	vimHiNmbr	contained	'\d\+'
 
 " Highlight: clear {{{2
 syn keyword	vimHiClear	contained	clear	nextgroup=vimHiGroup
 
 " Highlight: link {{{2
-syn region	vimHiLink	contained oneline matchgroup=vimCommand start="\<\(def\s\+\)\=link\>\|\<def\>" end="$"	contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
+syn region	vimHiLink	contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$"	contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
+syn cluster vimFuncBodyList add=vimHiLink
 
 " Control Characters {{{2
 " ==================
@@ -527,8 +540,8 @@
 " ====================
 syn match	vimSearch	'^\s*[/?].*'		contains=vimSearchDelim
 syn match	vimSearchDelim	'^\s*\zs[/?]\|[/?]$'	contained
-syn region	vimGlobal	matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/'
-syn region	vimGlobal	matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/'
+syn region	vimGlobal	matchgroup=Statement start='\<g\%[lobal]!\=/'  skip='\\.' end='/'	skipwhite nextgroup=vimSubst
+syn region	vimGlobal	matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/'	skipwhite nextgroup=vimSubst
 
 " Scripts  : perl,ruby : Benoit Cerrina {{{2
 " =======    python,tcl: Johannes Zellner
@@ -548,11 +561,16 @@
 endif
 
 " [-- lua --] {{{3
-let s:luapath= expand("<sfile>:p:h")."/lua.vim"
+let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
 if !filereadable(s:luapath)
- let s:luapath= globpath(&rtp,"syntax/lua.vim")
+ for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
+  if filereadable(fnameescape(s:luapath))
+   let s:luapath= fnameescape(s:luapath)
+   break
+  endif
+ endfor
 endif
-if (g:vimsyn_embed =~ 'p' && has("lua")) && filereadable(s:luapath)
+if (g:vimsyn_embed =~ 'l' && has("lua")) && filereadable(s:luapath)
  unlet! b:current_syntax
  exe "syn include @vimLuaScript ".s:luapath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'l'
@@ -570,9 +588,14 @@
 unlet s:luapath
 
 " [-- perl --] {{{3
-let s:perlpath= expand("<sfile>:p:h")."/perl.vim"
+let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
 if !filereadable(s:perlpath)
- let s:perlpath= globpath(&rtp,"syntax/perl.vim")
+ for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
+  if filereadable(fnameescape(s:perlpath))
+   let s:perlpath= fnameescape(s:perlpath)
+   break
+  endif
+ endfor
 endif
 if (g:vimsyn_embed =~ 'p' && has("perl")) && filereadable(s:perlpath)
  unlet! b:current_syntax
@@ -592,9 +615,14 @@
 unlet s:perlpath
 
 " [-- ruby --] {{{3
-let s:rubypath= expand("<sfile>:p:h")."/ruby.vim"
+let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
 if !filereadable(s:rubypath)
- let s:rubypath= globpath(&rtp,"syntax/ruby.vim")
+ for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
+  if filereadable(fnameescape(s:rubypath))
+   let s:rubypath= fnameescape(s:rubypath)
+   break
+  endif
+ endfor
 endif
 if (g:vimsyn_embed =~ 'r' && has("ruby")) && filereadable(s:rubypath)
  unlet! b:current_syntax
@@ -613,11 +641,16 @@
 unlet s:rubypath
 
 " [-- python --] {{{3
-let s:pythonpath= expand("<sfile>:p:h")."/python.vim"
+let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
 if !filereadable(s:pythonpath)
- let s:pythonpath= globpath(&rtp,"syntax/python.vim")
+ for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
+  if filereadable(fnameescape(s:pythonpath))
+   let s:pythonpath= fnameescape(s:pythonpath)
+   break
+  endif
+ endfor
 endif
-if (g:vimsyn_embed =~ 'P' && has("python")) && filereadable(s:pythonpath)
+if g:vimsyn_embed =~ 'P' && (has("python") || has("python3")) && filereadable(s:pythonpath)
  unlet! b:current_syntax
  exe "syn include @vimPythonScript ".s:pythonpath
  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'P'
@@ -642,9 +675,14 @@
  let s:trytcl= 1
 endif
 if s:trytcl
- let s:tclpath= expand("<sfile>:p:h")."/tcl.vim"
+ let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
  if !filereadable(s:tclpath)
-  let s:tclpath= globpath(&rtp,"syntax/tcl.vim")
+  for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
+   if filereadable(fnameescape(s:tclpath))
+    let s:tclpath= fnameescape(s:tclpath)
+    break
+   endif
+  endfor
  endif
  if (g:vimsyn_embed =~ 't' && has("tcl")) && filereadable(s:tclpath)
   unlet! b:current_syntax
@@ -669,9 +707,14 @@
 unlet s:trytcl
 
 " [-- mzscheme --] {{{3
-let s:mzschemepath= expand("<sfile>:p:h")."/scheme.vim"
+let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
 if !filereadable(s:mzschemepath)
- let s:mzschemepath= globpath(&rtp,"syntax/scheme.vim")
+ for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
+  if filereadable(fnameescape(s:mzschemepath))
+   let s:mzschemepath= fnameescape(s:mzschemepath)
+   break
+  endif
+ endfor
 endif
 if (g:vimsyn_embed =~ 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
  unlet! b:current_syntax
@@ -709,9 +752,6 @@
 " Highlighting Settings {{{2
 " ====================
 
-hi def link vimAuHighlight	vimHighlight
-hi def link vimSubst1	vimSubst
-hi def link vimBehaveModel	vimBehave
 
 if !exists("g:vimsyn_noerror")
  hi def link vimBehaveError	vimError
@@ -734,21 +774,44 @@
 hi def link vimAbb	vimCommand
 hi def link vimAddress	vimMark
 hi def link vimAugroupKey	vimCommand
+hi def link vimAuHighlight	vimHighlight
 hi def link vimAutoCmdOpt	vimOption
 hi def link vimAutoCmd	vimCommand
+hi def link vimAutoEvent	Type
 hi def link vimAutoSet	vimCommand
+hi def link vimBehaveModel	vimBehave
 hi def link vimBehave	vimCommand
+hi def link vimBracket	Delimiter
+hi def link vimCmplxRepeat	SpecialChar
+hi def link vimCommand	Statement
+hi def link vimComment	Comment
 hi def link vimCommentString	vimString
+hi def link vimCommentTitle	PreProc
 hi def link vimCondHL	vimCommand
+hi def link vimContinue	Special
+hi def link vimCtrlChar	SpecialChar
 hi def link vimEchoHLNone	vimGroup
 hi def link vimEchoHL	vimCommand
+hi def link vimElseIfErr	Error
 hi def link vimElseif	vimCondHL
+hi def link vimEnvvar	PreProc
+hi def link vimError	Error
+hi def link vimFBVar	vimVar
 hi def link vimFgBgAttrib	vimHiAttrib
+hi def link vimFold	Folded
 hi def link vimFTCmd	vimCommand
 hi def link vimFTOption	vimSynType
 hi def link vimFuncKey	vimCommand
+hi def link vimFuncName	Function
+hi def link vimFuncSID	Special
+hi def link vimFuncVar	Identifier
 hi def link vimGroupAdd	vimSynOption
+hi def link vimGroupName	vimGroup
 hi def link vimGroupRem	vimSynOption
+hi def link vimGroupSpecial	Special
+hi def link vimGroup	Type
+hi def link vimHiAttrib	PreProc
+hi def link vimHiClear	vimHighlight
 hi def link vimHiCtermFgBg	vimHiTerm
 hi def link vimHiCTerm	vimHiTerm
 hi def link vimHighlight	vimCommand
@@ -757,114 +820,103 @@
 hi def link vimHiGuiFont	vimHiTerm
 hi def link vimHiGuiRgb	vimNumber
 hi def link vimHiGui	vimHiTerm
+hi def link vimHiNmbr	Number
 hi def link vimHiStartStop	vimHiTerm
+hi def link vimHiTerm	Type
 hi def link vimHLGroup	vimGroup
+hi def link vimHLMod	PreProc
 hi def link vimInsert	vimString
 hi def link vimKeyCode	vimSpecFile
+hi def link vimKeyword	Statement
 hi def link vimLet	vimCommand
 hi def link vimLineComment	vimComment
 hi def link vimMapBang	vimCommand
 hi def link vimMapModKey	vimFuncSID
 hi def link vimMapMod	vimBracket
 hi def link vimMap	vimCommand
+hi def link vimMark	Number
 hi def link vimMarkNumber	vimNumber
 hi def link vimMenuMod	vimMapMod
 hi def link vimMenuNameMore	vimMenuName
+hi def link vimMenuName	PreProc
 hi def link vimMtchComment	vimComment
 hi def link vimNorm	vimCommand
+hi def link vimNotation	Special
 hi def link vimNotFunc	vimCommand
 hi def link vimNotPatSep	vimString
+hi def link vimNumber	Number
+hi def link vimOperError	Error
+hi def link vimOper	Operator
+hi def link vimOption	PreProc
+hi def link vimParenSep	Delimiter
 hi def link vimPatSepErr	vimPatSep
 hi def link vimPatSepR	vimPatSep
+hi def link vimPatSep	SpecialChar
 hi def link vimPatSepZone	vimString
 hi def link vimPatSepZ	vimPatSep
+hi def link vimPattern	Type
 hi def link vimPlainMark	vimMark
 hi def link vimPlainRegister	vimRegister
+hi def link vimRegister	SpecialChar
+hi def link vimScriptDelim	Comment
+hi def link vimSearchDelim	Statement
 hi def link vimSearch	vimString
+hi def link vimSep	Delimiter
 hi def link vimSetMod	vimOption
+hi def link vimSetSep	Statement
 hi def link vimSetString	vimString
+hi def link vimSpecFile	Identifier
 hi def link vimSpecFileMod	vimSpecFile
+hi def link vimSpecial	Type
+hi def link vimStatement	Statement
 hi def link vimStringCont	vimString
+hi def link vimString	String
+hi def link vimSubst1	vimSubst
+hi def link vimSubstDelim	Delimiter
+hi def link vimSubstFlags	Special
+hi def link vimSubstSubstr	SpecialChar
 hi def link vimSubstTwoBS	vimString
 hi def link vimSubst	vimCommand
+hi def link vimSynCaseError	Error
+hi def link vimSynCase	Type
+hi def link vimSyncC	Type
+hi def link vimSyncError	Error
 hi def link vimSyncGroupName	vimGroupName
 hi def link vimSyncGroup	vimGroupName
+hi def link vimSyncKey	Type
+hi def link vimSyncNone	Type
 hi def link vimSynContains	vimSynOption
+hi def link vimSynError	Error
 hi def link vimSynKeyContainedin	vimSynContains
 hi def link vimSynKeyOpt	vimSynOption
 hi def link vimSynMtchGrp	vimSynOption
 hi def link vimSynMtchOpt	vimSynOption
 hi def link vimSynNextgroup	vimSynOption
 hi def link vimSynNotPatRange	vimSynRegPat
+hi def link vimSynOption	Special
 hi def link vimSynPatRange	vimString
 hi def link vimSynRegOpt	vimSynOption
 hi def link vimSynRegPat	vimString
+hi def link vimSynReg	Type
 hi def link vimSyntax	vimCommand
 hi def link vimSynType	vimSpecial
+hi def link vimTodo	Todo
 hi def link vimUnmap	vimMap
+hi def link vimUserAttrbCmpltFunc	Special
 hi def link vimUserAttrbCmplt	vimSpecial
 hi def link vimUserAttrbKey	vimOption
 hi def link vimUserAttrb	vimSpecial
-hi def link vimUserCommand	vimCommand
-
-hi def link vimAutoEvent	Type
-hi def link vimBracket	Delimiter
-hi def link vimCmplxRepeat	SpecialChar
-hi def link vimCommand	Statement
-hi def link vimComment	Comment
-hi def link vimCommentTitle	PreProc
-hi def link vimContinue	Special
-hi def link vimCtrlChar	SpecialChar
-hi def link vimElseIfErr	Error
-hi def link vimEnvvar	PreProc
-hi def link vimError	Error
-hi def link vimFold	Folded
-hi def link vimFuncName	Function
-hi def link vimFuncSID	Special
-hi def link vimFuncVar	Identifier
-hi def link vimGroupSpecial	Special
-hi def link vimGroup	Type
-hi def link vimHiAttrib	PreProc
-hi def link vimHiTerm	Type
-hi def link vimHLMod	PreProc
-hi def link vimKeyword	Statement
-hi def link vimMark	Number
-hi def link vimMenuName	PreProc
-hi def link vimNotation	Special
-hi def link vimNumber	Number
-hi def link vimOperError	Error
-hi def link vimOper	Operator
-hi def link vimOption	PreProc
-hi def link vimParenSep	Delimiter
-hi def link vimPatSep	SpecialChar
-hi def link vimPattern	Type
-hi def link vimRegister	SpecialChar
-hi def link vimScriptDelim	Comment
-hi def link vimSearchDelim	Statement
-hi def link vimSep	Delimiter
-hi def link vimSetSep	Statement
-hi def link vimSpecFile	Identifier
-hi def link vimSpecial	Type
-hi def link vimStatement	Statement
-hi def link vimString	String
-hi def link vimSubstDelim	Delimiter
-hi def link vimSubstFlags	Special
-hi def link vimSubstSubstr	SpecialChar
-hi def link vimSynCaseError	Error
-hi def link vimSynCase	Type
-hi def link vimSyncC	Type
-hi def link vimSyncError	Error
-hi def link vimSyncKey	Type
-hi def link vimSyncNone	Type
-hi def link vimSynError	Error
-hi def link vimSynOption	Special
-hi def link vimSynReg	Type
-hi def link vimTodo	Todo
-hi def link vimUserAttrbCmpltFunc	Special
 hi def link vimUserCmdError	Error
+hi def link vimUserCommand	vimCommand
 hi def link vimUserFunc	Normal
+hi def link vimVar	Identifier
 hi def link vimWarn	WarningMsg
 
 " Current Syntax Variable: {{{2
 let b:current_syntax = "vim"
+
+" ---------------------------------------------------------------------
+" Cleanup: {{{1
+let &cpo = s:keepcpo
+unlet s:keepcpo
 " vim:ts=18  fdm=marker
diff -Naur vim73.orig/runtime/syntax/viminfo.vim vim73/runtime/syntax/viminfo.vim
--- vim73.orig/runtime/syntax/viminfo.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/viminfo.vim	2013-08-04 19:09:09.810612931 +0000
@@ -1,13 +1,16 @@
 " Vim syntax file
 " Language:	Vim .viminfo file
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last Change:	2005 Jun 20
+" Last Change:	2012 Feb 03
 
 " Quit when a (custom) syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 " The lines that are NOT recognized
 syn match viminfoError "^[^\t].*"
 
@@ -35,4 +38,7 @@
 
 let b:current_syntax = "viminfo"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
+
 " vim: ts=8 sw=2
diff -Naur vim73.orig/runtime/syntax/xdefaults.vim vim73/runtime/syntax/xdefaults.vim
--- vim73.orig/runtime/syntax/xdefaults.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/xdefaults.vim	2013-08-04 19:09:09.830612871 +0000
@@ -33,7 +33,7 @@
 
 
 " syn region  xdefaultsLabel   start=+^[^:]\{-}:+he=e-1 skip=+\\+ end="$"
-syn match   xdefaultsLabel   +[^:]\{-}:+he=e-1                       contains=xdefaultsPunct,xdefaultsSpecial,xdefaultsLineEnd
+syn match   xdefaultsLabel   +^[^:]\{-}:+he=e-1                       contains=xdefaultsPunct,xdefaultsSpecial,xdefaultsLineEnd
 syn region  xdefaultsValue   keepend start=+:+lc=1 skip=+\\+ end=+$+ contains=xdefaultsSpecial,xdefaultsLabel,xdefaultsLineEnd
 
 syn match   xdefaultsSpecial	contained +#override+
@@ -75,9 +75,9 @@
 syn region	xdefaultsIncluded	contained start=+"+ skip=+\\\\\|\\"+ end=+"+
 syn match	xdefaultsIncluded	contained "<[^>]*>"
 syn match	xdefaultsInclude	"^\s*#\s*include\>\s*["<]" contains=xdefaultsIncluded
-syn cluster	xdefaultsPreProcGroup	contains=xdefaultsPreProc,xdefaultsIncluded,xdefaultsInclude,xdefaultsDefine
-syn region	xdefaultsDefine		start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine
-syn region	xdefaultsPreProc	start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine
+syn cluster	xdefaultsPreProcGroup	contains=xdefaultsPreProc,xdefaultsIncluded,xdefaultsInclude,xdefaultsDefine,xdefaultsCppOut,xdefaultsCppOut2,xdefaultsCppSkip
+syn region	xdefaultsDefine		start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine,xdefaultsLabel,xdefaultsValue
+syn region	xdefaultsPreProc	start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine,xdefaultsLabel,xdefaultsValue
 
 
 
diff -Naur vim73.orig/runtime/syntax/xf86conf.vim vim73/runtime/syntax/xf86conf.vim
--- vim73.orig/runtime/syntax/xf86conf.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/xf86conf.vim	2013-08-04 19:09:09.830612871 +0000
@@ -1,8 +1,8 @@
 " Vim syntax file
 " This is a GENERATED FILE. Please always refer to source file at the URI below.
 " Language: XF86Config (XFree86 configuration file)
-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
-" Last Change: 2005 Jul 12
+" Former Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+" Last Change: 2010 Nov 01
 " URL: http://trific.ath.cx/Ftp/vim/syntax/xf86conf.vim
 " Required Vim Version: 6.0
 "
@@ -63,7 +63,7 @@
 
 " Sections and subsections
 if b:xf86conf_xfree86_version >= 4
-	syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError
+	syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\|InputClass\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError
 	syn region xf86confSectionModule matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Module\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionAny,xf86confComment,xf86confOption,xf86confKeyword
 	syn region xf86confSectionMonitor matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Monitor\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment,xf86confOption,xf86confKeyword
 	syn region xf86confSectionModes matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Modes\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment
@@ -165,7 +165,7 @@
 
 " Synchronization
 if b:xf86conf_xfree86_version >= 4
-	syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\)\""
+	syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\|InputClass\)\""
 	syn sync match xf86confSyncSectionModule grouphere xf86confSectionModule "^\s*Section\s\+\"Module\""
 	syn sync match xf86confSyncSectionModes groupthere xf86confSectionModes "^\s*Section\s\+\"Modes\""
 else
diff -Naur vim73.orig/runtime/syntax/xml.vim vim73/runtime/syntax/xml.vim
--- vim73.orig/runtime/syntax/xml.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/xml.vim	2013-08-04 19:09:09.837279518 +0000
@@ -3,7 +3,7 @@
 " Maintainer:	Johannes Zellner <johannes@zellner.org>
 "		Author and previous maintainer:
 "		Paul Siegmann <pauls@euronet.nl>
-" Last Change:	2009-07-13 21:26:55
+" Last Change:	2013 Jun 07
 " Filenames:	*.xml
 " $Id: xml.vim,v 1.3 2006/04/11 21:32:00 vimboss Exp $
 
@@ -81,7 +81,7 @@
 "      ^^^^^^^^^^^^^
 "
 syn match   xmlAttrib
-    \ +[-'"<]\@<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>\(['">]\@!\|$\)+
+    \ +[-'"<]\@1<!\<[a-zA-Z:_][-.0-9a-zA-Z:_]*\>\%(['">]\@!\|$\)+
     \ contained
     \ contains=xmlAttribPunct,@xmlAttribHook
     \ display
@@ -98,14 +98,14 @@
 "
 if exists("g:xml_namespace_transparent")
 syn match   xmlNamespace
-    \ +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+
+    \ +\(<\|</\)\@2<=[^ /!?<>"':]\+[:]\@=+
     \ contained
     \ contains=@xmlNamespaceHook
     \ transparent
     \ display
 else
 syn match   xmlNamespace
-    \ +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+
+    \ +\(<\|</\)\@2<=[^ /!?<>"':]\+[:]\@=+
     \ contained
     \ contains=@xmlNamespaceHook
     \ display
@@ -122,7 +122,7 @@
 "  ^^^
 "
 syn match   xmlTagName
-    \ +[<]\@<=[^ /!?<>"']\++
+    \ +<\@1<=[^ /!?<>"']\++
     \ contained
     \ contains=xmlNamespace,xmlAttribPunct,@xmlTagHook
     \ display
diff -Naur vim73.orig/runtime/syntax/xpm2.vim vim73/runtime/syntax/xpm2.vim
--- vim73.orig/runtime/syntax/xpm2.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/xpm2.vim	2013-08-04 19:09:09.840612841 +0000
@@ -1,7 +1,8 @@
 " Vim syntax file
 " Language:	X Pixmap v2
 " Maintainer:	Steve Wall (hitched97@velnet.com)
-" Last Change:	2008 May 28
+" Last Change:	2012 Jun 01
+" 		(Dominique Pelle added @Spell)
 " Version:	5.8
 "
 " Made from xpm.vim by Ronald Schild <rs@scutum.de>
@@ -14,9 +15,12 @@
   finish
 endif
 
+let s:cpo_save = &cpo
+set cpo&vim
+
 syn region  xpm2PixelString	start="^"  end="$"  contains=@xpm2Colors
 syn keyword xpm2Todo		TODO FIXME XXX  contained
-syn match   xpm2Comment		"\!.*$"  contains=xpm2Todo
+syn match   xpm2Comment		"\!.*$"  contains=@Spell,xpm2Todo
 
 
 if version < 508
@@ -159,4 +163,6 @@
 
 let b:current_syntax = "xpm2"
 
+let &cpo = s:cpo_save
+unlet s:cpo_save
 " vim: ts=8:sw=2:noet:
diff -Naur vim73.orig/runtime/syntax/xquery.vim vim73/runtime/syntax/xquery.vim
--- vim73.orig/runtime/syntax/xquery.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/xquery.vim	2013-08-04 19:09:09.843946164 +0000
@@ -1,10 +1,11 @@
 " Vim syntax file
 " Language:	XQuery
-" Author:	Jean-Marc Vanel <http://jmvanel.free.fr/>
+" Author: René Neumann <necoro@necoro.eu>
+" Author: Steve Spigarelli <http://spig.net/>
+" Original Author:	Jean-Marc Vanel <http://jmvanel.free.fr/>
 " Last Change:	mar jui 12 18:04:05 CEST 2005
 " Filenames:	*.xq
 " URL:		http://jmvanel.free.fr/vim/xquery.vim
-" $Id: xquery.vim,v 1.1 2005/07/18 21:44:56 vimboss Exp $
 
 " REFERENCES:
 "   [1] http://www.w3.org/TR/xquery/
@@ -14,22 +15,26 @@
     finish
 endif
 
+" - is allowed in keywords
+setlocal iskeyword+=-
+
 runtime syntax/xml.vim
 
 syn case match
 
 " From XQuery grammar:
-syn	keyword	xqueryStatement ancestor ancestor-or-self and as ascending at attribute base-uri by case cast castable child collation construction declare default descendant descendant-or-self descending div document element else empty encoding eq every except external following following-sibling for function ge greatest gt idiv if import in inherit-namespaces instance intersect is le least let lt mod module namespace ne no of or order ordered ordering parent preceding preceding-sibling preserve return satisfies schema self some stable strip then to treat typeswitch union unordered validate variable version where xmlspace xquery yes
+syn keyword xqStatement ancestor ancestor-or-self and as ascending at attribute base-uri boundary-space by case cast castable child collation construction declare default descendant descendant-or-self descending div document element else empty encoding eq every except external following following-sibling for function ge greatest gt idiv if import in inherit-namespaces instance intersect is le least let lt mod module namespace ne no of or order ordered ordering parent preceding preceding-sibling preserve return satisfies schema self some stable strip then to treat typeswitch union unordered validate variable version where xmlspace xquery yes
 
 " TODO contains clashes with vim keyword
-syn	keyword	xqueryFunction abs adjust-date-to-timezone adjust-date-to-timezone adjust-dateTime-to-timezone adjust-dateTime-to-timezone adjust-time-to-timezone adjust-time-to-timezone avg base-uri base-uri boolean ceiling codepoint-equal codepoints-to-string collection collection compare concat count current-date current-dateTime current-time data dateTime day-from-date day-from-dateTime days-from-duration deep-equal deep-equal default-collation distinct-values distinct-values doc doc-available document-uri empty ends-with ends-with error error error error escape-uri exactly-one exists false floor hours-from-dateTime hours-from-duration hours-from-time id id idref idref implicit-timezone in-scope-prefixes index-of index-of insert-before lang lang last local-name local-name local-name-from-QName lower-case matches matches max max min min minutes-from-dateTime minutes-from-duration minutes-from-time month-from-date month-from-dateTime months-from-duration name name namespace-uri namespace-uri namespace-uri-for-prefix namespace-uri-from-QName nilled node-name normalize-space normalize-space normalize-unicode normalize-unicode not number number one-or-more position prefix-from-QName QName remove replace replace resolve-QName resolve-uri resolve-uri reverse root root round round-half-to-even round-half-to-even seconds-from-dateTime seconds-from-duration seconds-from-time starts-with starts-with static-base-uri string string string-join string-length string-length string-to-codepoints subsequence subsequence substring substring substring-after substring-after substring-before substring-before sum sum timezone-from-date timezone-from-dateTime timezone-from-time tokenize tokenize trace translate true unordered upper-case year-from-date year-from-dateTime years-from-duration zero-or-one
+syn	keyword	xqFunction abs adjust-date-to-timezone adjust-date-to-timezone adjust-dateTime-to-timezone adjust-dateTime-to-timezone adjust-time-to-timezone adjust-time-to-timezone avg base-uri base-uri boolean ceiling codepoint-equal codepoints-to-string collection collection compare concat count current-date current-dateTime current-time data dateTime day-from-date day-from-dateTime days-from-duration deep-equal deep-equal default-collation distinct-values distinct-values doc doc-available document-uri empty ends-with ends-with error error error error escape-uri exactly-one exists false floor hours-from-dateTime hours-from-duration hours-from-time id id idref idref implicit-timezone in-scope-prefixes index-of index-of insert-before lang lang last local-name local-name local-name-from-QName lower-case matches matches max max min min minutes-from-dateTime minutes-from-duration minutes-from-time month-from-date month-from-dateTime months-from-duration name name namespace-uri namespace-uri namespace-uri-for-prefix namespace-uri-from-QName nilled node-name normalize-space normalize-space normalize-unicode normalize-unicode not number number one-or-more position prefix-from-QName QName remove replace replace resolve-QName resolve-uri resolve-uri reverse root root round round-half-to-even round-half-to-even seconds-from-dateTime seconds-from-duration seconds-from-time starts-with starts-with static-base-uri string string string-join string-length string-length string-to-codepoints subsequence subsequence substring substring substring-after substring-after substring-before substring-before sum sum timezone-from-date timezone-from-dateTime timezone-from-time tokenize tokenize trace translate true unordered upper-case year-from-date year-from-dateTime years-from-duration zero-or-one
+
+syn keyword xqOperator add-dayTimeDuration-to-date add-dayTimeDuration-to-dateTime add-dayTimeDuration-to-time add-dayTimeDurations add-yearMonthDuration-to-date add-yearMonthDuration-to-dateTime add-yearMonthDurations base64Binary-equal boolean-equal boolean-greater-than boolean-less-than concatenate date-equal date-greater-than date-less-than dateTime-equal dateTime-greater-than dateTime-less-than dayTimeDuration-equal dayTimeDuration-greater-than dayTimeDuration-less-than divide-dayTimeDuration divide-dayTimeDuration-by-dayTimeDuration divide-yearMonthDuration divide-yearMonthDuration-by-yearMonthDuration except gDay-equal gMonth-equal gMonthDay-equal gYear-equal gYearMonth-equal hexBinary-equal intersect is-same-node multiply-dayTimeDuration multiply-yearMonthDuration node-after node-before NOTATION-equal numeric-add numeric-divide numeric-equal numeric-greater-than numeric-integer-divide numeric-less-than numeric-mod numeric-multiply numeric-subtract numeric-unary-minus numeric-unary-plus QName-equal subtract-dates-yielding-dayTimeDuration subtract-dateTimes-yielding-dayTimeDuration subtract-dayTimeDuration-from-date subtract-dayTimeDuration-from-dateTime subtract-dayTimeDuration-from-time subtract-dayTimeDurations subtract-times subtract-yearMonthDuration-from-date subtract-yearMonthDuration-from-dateTime subtract-yearMonthDurations time-equal time-greater-than time-less-than to union yearMonthDuration-equal yearMonthDuration-greater-than yearMonthDuration-less-than
 
-syn	keyword	xqueryOperator add-dayTimeDuration-to-date add-dayTimeDuration-to-dateTime add-dayTimeDuration-to-time add-dayTimeDurations add-yearMonthDuration-to-date add-yearMonthDuration-to-dateTime add-yearMonthDurations base64Binary-equal boolean-equal boolean-greater-than boolean-less-than concatenate date-equal date-greater-than date-less-than dateTime-equal dateTime-greater-than dateTime-less-than dayTimeDuration-equal dayTimeDuration-greater-than dayTimeDuration-less-than divide-dayTimeDuration divide-dayTimeDuration-by-dayTimeDuration divide-yearMonthDuration divide-yearMonthDuration-by-yearMonthDuration except gDay-equal gMonth-equal gMonthDay-equal gYear-equal gYearMonth-equal hexBinary-equal intersect is-same-node multiply-dayTimeDuration multiply-yearMonthDuration node-after node-before NOTATION-equal numeric-add numeric-divide numeric-equal numeric-greater-than numeric-integer-divide numeric-less-than numeric-mod numeric-multiply numeric-subtract numeric-unary-minus numeric-unary-plus QName-equal subtract-dates-yielding-dayTimeDuration subtract-dateTimes-yielding-dayTimeDuration subtract-dayTimeDuration-from-date subtract-dayTimeDuration-from-dateTime subtract-dayTimeDuration-from-time subtract-dayTimeDurations subtract-times subtract-yearMonthDuration-from-date subtract-yearMonthDuration-from-dateTime subtract-yearMonthDurations time-equal time-greater-than time-less-than to union yearMonthDuration-equal yearMonthDuration-greater-than yearMonthDuration-less-than
+syn match xqType "xs:\(\|Datatype\|primitive\|string\|boolean\|float\|double\|decimal\|duration\|dateTime\|time\|date\|gYearMonth\|gYear\|gMonthDay\|gDay\|gMonth\|hexBinary\|base64Binary\|anyURI\|QName\|NOTATION\|\|normalizedString\|token\|language\|IDREFS\|ENTITIES\|NMTOKEN\|NMTOKENS\|Name\|NCName\|ID\|IDREF\|ENTITY\|integer\|nonPositiveInteger\|negativeInteger\|long\|int\|short\|byte\|nonNegativeInteger\|unsignedLong\|unsignedInt\|unsignedShort\|unsignedByte\|positiveInteger\)"
 
-syn	match	xqueryType "xs:\(\|Datatype\|primitive\|string\|boolean\|float\|double\|decimal\|duration\|dateTime\|time\|date\|gYearMonth\|gYear\|gMonthDay\|gDay\|gMonth\|hexBinary\|base64Binary\|anyURI\|QName\|NOTATION\|\|normalizedString\|token\|language\|IDREFS\|ENTITIES\|NMTOKEN\|NMTOKENS\|Name\|NCName\|ID\|IDREF\|ENTITY\|integer\|nonPositiveInteger\|negativeInteger\|long\|int\|short\|byte\|nonNegativeInteger\|unsignedLong\|unsignedInt\|unsignedShort\|unsignedByte\|positiveInteger\)"
 
 " From XPath grammar:
-syn	keyword	xqueryXPath some every in in satisfies if then else to div idiv mod union intersect except instance of treat castable cast eq ne lt le gt ge is child descendant attribute self descendant-or-self following-sibling following namespace parent ancestor preceding-sibling preceding ancestor-or-self void item node document-node text comment processing-instruction attribute schema-attribute schema-element
+syn keyword xqXPath some every in in satisfies if then else to div idiv mod union intersect except instance of treat castable cast eq ne lt le gt ge is child descendant attribute self descendant-or-self following-sibling following namespace parent ancestor preceding-sibling preceding ancestor-or-self void item node document-node text comment processing-instruction attribute schema-attribute schema-element
 
 " eXist extensions
 syn	match xqExist "&="
@@ -37,44 +42,41 @@
 " XQdoc
 syn	match	XQdoc contained "@\(param\|return\|author\)\>" 
 
-highlight def link	xqueryStatement	Statement
-highlight def link	xqueryFunction	Function
-highlight def link	xqueryOperator	Operator
-highlight def link	xqueryType		Type
-highlight def link	xqueryXPath		Operator
-highlight def link	XQdoc			Special
-highlight def link	xqExist			Operator
-
-
-"floating point number, with dot, optional exponent
-syn match	cFloat		"\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
-"floating point number, starting with a dot, optional exponent
-syn match	cFloat		"\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
-"floating point number, without dot, with exponent
-syn match	cFloat		"\d\+e[-+]\=\d\+[fl]\=\>"
-syn match	cNumber		"0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
-syn match	cNumber		 "\<\d\+\>"
-highlight def link	cNumber	Number
-highlight def link	cFloat	Number
-
-syn region	xqComment	start='(:' excludenl end=':)' contains=XQdoc
-highlight def link	xqComment	Comment
-" syntax match	xqVariable	"$\w\+"
-syntax match	xqVariable	+$\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>+
-highlight def link	xqVariable	Identifier
-
-" Redefine the default XML highlighting:
-highlight def link	xmlTag		Structure
-highlight def link	xmlTagName	Structure
-highlight def link	xmlEndTag	Structure
-
-syntax match	xqSeparator	",\|;"
-highlight link	xqSeparator	Operator
-
-syn region	xqCode	transparent contained start='{' excludenl end='}' contains=xmlRegionBis,xqComment,xqueryStatement,xmlString,xqSeparator,cNumber,xqVariable keepend extend
+" floating point number, with dot, optional exponent
+syn match xqFloat   "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+" floating point number, starting with a dot, optional exponent
+syn match xqFloat   "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+" floating point number, without dot, with exponent
+syn match xqFloat   "\d\+e[-+]\=\d\+[fl]\=\>"
+syn match xqNumber  "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+syn match xqNumber  "\<\d\+\>"
+
+syn region xqString  start=+\z(['"]\)+ skip=+\\.+ end=+\z1+
+syn region xqComment start='(:' excludenl end=':)' contains=XQdoc
+
+syn match xqVariable "$\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>"
+syn match xqSeparator ",\|;"
+syn region xqCode transparent contained start='{' excludenl end='}' contains=xqFunction,xqCode,xmlRegionBis,xqComment,xqStatement,xmlString,xqSeparator,xqNumber,xqVariable,xqString keepend extend
 
 syn region xmlRegionBis start=+<\z([^ /!?<>"']\+\)+ skip=+<!--\_.\{-}-->+ end=+</\z1\_\s\{-}>+ end=+/>+ fold contains=xmlTag,xmlEndTag,xmlCdata,xmlRegionBis,xmlComment,xmlEntity,xmlProcessing,xqCode keepend extend
 
-syn region	List	transparent start='(' excludenl end=')' contains=xqCode,xmlRegion,xqComment,xqSeparator,xqueryStatement,xqVariable,xqueryType  keepend extend
-
+hi def link xqNumber    Number
+hi def link xqFloat     Number
+hi def link xqString    String
+hi def link xqVariable  Identifier
+hi def link xqComment   Comment
+hi def link xqSeparator Operator
+hi def link xqStatement Statement
+hi def link xqFunction  Function
+hi def link xqOperator  Operator
+hi def link xqType      Type
+hi def link xqXPath     Operator
+hi def link XQdoc       Special
+hi def link xqExist     Operator
+
+" override the xml highlighting
+"hi link xmlTag      Structure
+"hi link xmlTagName  Structure
+"hi link xmlEndTag   Structure
 
+let b:current_syntax = "xquery"
diff -Naur vim73.orig/runtime/syntax/xs.vim vim73/runtime/syntax/xs.vim
--- vim73.orig/runtime/syntax/xs.vim	2010-05-15 11:03:56.000000000 +0000
+++ vim73/runtime/syntax/xs.vim	2013-08-04 19:09:09.847279488 +0000
@@ -1,38 +1,3277 @@
 " Vim syntax file
-" Language:     XS (Perl extension interface language)
-" Maintainer:   Andy Lester <andy@petdance.com>
-" URL:          http://github.com/petdance/vim-perl
-" Last Change:  2009-08-14
-
-" Quit when a syntax file was already loaded
-if exists("b:current_syntax")
-    finish
+" Language:    XS (Perl extension interface language)
+" Author:      Autogenerated from perl headers, on an original basis of Michael W. Dodge <sarge@pobox.com>
+" Maintainer:  vim-perl <vim-perl@googlegroups.com>
+" Previous:    Vincent Pit <perl@profvince.com>
+" Last Change: 2013-05-12
+
+" 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
 
 " Read the C syntax to start with
-runtime! syntax/c.vim
+if version < 600
+  source <sfile>:p:h/c.vim
+else
+  runtime! syntax/c.vim
+endif
+
+let xs_superseded = 1 " mark C functions superseded by Perl replacements
+let xs_not_core   = 1 " mark private core functions
+
+if exists("xs_superseded") && xs_superseded
+syn keyword xsSuperseded atof atol calloc clearerr exit fclose feof ferror
+syn keyword xsSuperseded fflush fgetc fgetpos fgets fopen fprintf fputc fputs
+syn keyword xsSuperseded fread free freopen fseek fsetpos fwrite getc getenv
+syn keyword xsSuperseded isalnum isalpha iscntrl isdigit isgraph islower
+syn keyword xsSuperseded isprint ispunct isspace isupper isxdigit malloc
+syn keyword xsSuperseded memcpy memmove memset printf putc rand realloc
+syn keyword xsSuperseded rewind setenv sprintf srand stderr stdin stdout
+syn keyword xsSuperseded strcat strcmp strcpy strdup strlen strncat strncmp
+syn keyword xsSuperseded strncpy strstr strtod strtol strtoul system tolower
+syn keyword xsSuperseded toupper ungetc
+endif
+if exists("xs_not_core") && xs_not_core
+syn keyword xsPrivate F0convert Perl__add_range_to_invlist
+syn keyword xsPrivate Perl__core_swash_init Perl__invlist_contents
+syn keyword xsPrivate Perl__invlist_intersection_maybe_complement_2nd
+syn keyword xsPrivate Perl__invlist_invert Perl__invlist_invert_prop
+syn keyword xsPrivate Perl__invlist_populate_swatch
+syn keyword xsPrivate Perl__invlist_union_maybe_complement_2nd
+syn keyword xsPrivate Perl__is_utf8__perl_idstart Perl__new_invlist
+syn keyword xsPrivate Perl__swash_inversion_hash Perl__swash_to_invlist
+syn keyword xsPrivate Perl__to_fold_latin1 Perl_av_reify Perl_emulate_cop_io
+syn keyword xsPrivate Perl_find_rundefsvoffset Perl_get_re_arg
+syn keyword xsPrivate Perl_is_utf8_X_L Perl_is_utf8_X_LV Perl_is_utf8_X_LVT
+syn keyword xsPrivate Perl_is_utf8_X_LV_LVT_V Perl_is_utf8_X_T
+syn keyword xsPrivate Perl_is_utf8_X_V Perl_is_utf8_X_begin
+syn keyword xsPrivate Perl_is_utf8_X_extend Perl_is_utf8_X_non_hangul
+syn keyword xsPrivate Perl_is_utf8_X_prepend Perl_is_utf8_char
+syn keyword xsPrivate Perl_new_warnings_bitfield Perl_op_clear
+syn keyword xsPrivate Perl_ptr_table_clear Perl_qerror Perl_reg_named_buff
+syn keyword xsPrivate Perl_reg_named_buff_iter Perl_reg_numbered_buff_fetch
+syn keyword xsPrivate Perl_reg_numbered_buff_length
+syn keyword xsPrivate Perl_reg_numbered_buff_store Perl_reg_qr_package
+syn keyword xsPrivate Perl_reg_temp_copy Perl_regprop Perl_report_uninit
+syn keyword xsPrivate Perl_sv_compile_2op Perl_sv_setsv_cow
+syn keyword xsPrivate Perl_try_amagic_bin Perl_try_amagic_un
+syn keyword xsPrivate Perl_utf8_to_uvchr Perl_utf8_to_uvuni
+syn keyword xsPrivate Perl_vivify_defelem Perl_yylex S_F0convert S_Slab_to_rw
+syn keyword xsPrivate S__append_range_to_invlist S__new_invlist_C_array
+syn keyword xsPrivate S_add_alternate S_add_data S_add_utf16_textfilter
+syn keyword xsPrivate S_adjust_stack_on_leave S_amagic_cmp
+syn keyword xsPrivate S_amagic_cmp_locale S_amagic_i_ncmp S_amagic_ncmp
+syn keyword xsPrivate S_anonymise_cv_maybe S_ao S_apply_attrs
+syn keyword xsPrivate S_apply_attrs_my S_assert_uft8_cache_coherent
+syn keyword xsPrivate S_bad_type_pv S_bad_type_sv S_bytes_to_uni
+syn keyword xsPrivate S_check_locale_boundary_crossing S_check_type_and_open
+syn keyword xsPrivate S_check_uni S_checkcomma S_checkposixcc S_ckwarn_common
+syn keyword xsPrivate S_cl_and S_cl_anything S_cl_init S_cl_is_anything
+syn keyword xsPrivate S_cl_or S_clear_placeholders S_closest_cop S_cop_free
+syn keyword xsPrivate S_core_regclass_swash S_cr_textfilter S_curmad S_curse
+syn keyword xsPrivate S_cv_dump S_deb_curcv S_deb_stack_n S_debprof
+syn keyword xsPrivate S_debug_start_match S_del_sv
+syn keyword xsPrivate S_deprecate_commaless_var_list S_destroy_matcher
+syn keyword xsPrivate S_div128 S_do_chomp S_do_delete_local S_do_oddball
+syn keyword xsPrivate S_do_smartmatch S_do_trans_complex
+syn keyword xsPrivate S_do_trans_complex_utf8 S_do_trans_count
+syn keyword xsPrivate S_do_trans_count_utf8 S_do_trans_simple
+syn keyword xsPrivate S_do_trans_simple_utf8 S_docatch S_doeval S_dofindlabel
+syn keyword xsPrivate S_doform S_dooneliner S_doopen_pm S_doparseform
+syn keyword xsPrivate S_dopoptoeval S_dopoptogiven S_dopoptolabel
+syn keyword xsPrivate S_dopoptoloop S_dopoptosub_at S_dopoptowhen
+syn keyword xsPrivate S_dump_exec_pos S_dump_trie S_dump_trie_interim_list
+syn keyword xsPrivate S_dump_trie_interim_table S_dumpuntil S_dup_attrlist
+syn keyword xsPrivate S_exec_failed S_expect_number S_filter_gets
+syn keyword xsPrivate S_finalize_op S_find_and_forget_pmops
+syn keyword xsPrivate S_find_array_subscript S_find_beginning S_find_byclass
+syn keyword xsPrivate S_find_hash_subscript S_find_in_my_stash
+syn keyword xsPrivate S_find_uninit_var S_first_symbol S_fold_constants
+syn keyword xsPrivate S_forbid_setid S_force_ident S_force_list S_force_next
+syn keyword xsPrivate S_force_strict_version S_force_version S_force_word
+syn keyword xsPrivate S_forget_pmop S_gen_constant_list S_get_aux_mg
+syn keyword xsPrivate S_get_num S_glob_2number S_glob_assign_glob
+syn keyword xsPrivate S_glob_assign_ref S_grok_bslash_c S_grok_bslash_o
+syn keyword xsPrivate S_group_end S_gv_ename S_gv_get_super_pkg
+syn keyword xsPrivate S_gv_init_svtype S_gv_magicalize_isa
+syn keyword xsPrivate S_gv_magicalize_overload S_hfreeentries S_hsplit
+syn keyword xsPrivate S_hv_auxinit S_hv_delete_common S_hv_free_ent_ret
+syn keyword xsPrivate S_hv_magic_check S_hv_notallowed S_incline S_incpush
+syn keyword xsPrivate S_incpush_if_exists S_incpush_use_sep S_ingroup
+syn keyword xsPrivate S_init_ids S_init_interp S_init_main_stash
+syn keyword xsPrivate S_init_perllib S_init_postdump_symbols
+syn keyword xsPrivate S_init_predump_symbols S_inplace_aassign
+syn keyword xsPrivate S_intuit_method S_intuit_more S_invlist_extend
+syn keyword xsPrivate S_invlist_iternext S_invlist_search
+syn keyword xsPrivate S_invoke_exception_hook S_is_an_int
+syn keyword xsPrivate S_is_handle_constructor S_is_list_assignment
+syn keyword xsPrivate S_is_utf8_char_slow S_is_utf8_common S_isa_lookup
+syn keyword xsPrivate S_join_exact S_listkids S_looks_like_bool
+syn keyword xsPrivate S_magic_methcall1 S_make_matcher S_make_trie
+syn keyword xsPrivate S_make_trie_failtable S_matcher_matches_sv
+syn keyword xsPrivate S_mayberelocate S_measure_struct S_mem_log_common
+syn keyword xsPrivate S_mess_alloc S_method_common S_minus_v S_missingterm
+syn keyword xsPrivate S_modkids S_more_sv S_mro_clean_isarev
+syn keyword xsPrivate S_mro_gather_and_rename S_mro_get_linear_isa_dfs
+syn keyword xsPrivate S_mul128 S_mulexp10 S_my_exit_jump S_my_kid S_need_utf8
+syn keyword xsPrivate S_newDEFSVOP S_newGIVWHENOP S_new_constant S_new_he
+syn keyword xsPrivate S_new_logop S_next_symbol S_nextchar
+syn keyword xsPrivate S_no_bareword_allowed S_no_fh_allowed S_no_op
+syn keyword xsPrivate S_not_a_number S_nuke_stacks S_num_overflow
+syn keyword xsPrivate S_open_script S_opt_scalarhv S_pack_rec
+syn keyword xsPrivate S_pad_alloc_name S_pad_check_dup S_pad_findlex
+syn keyword xsPrivate S_pad_reset S_parse_body S_path_is_absolute S_pidgone
+syn keyword xsPrivate S_pm_description S_pmtrans S_printbuf
+syn keyword xsPrivate S_process_special_blocks S_ptr_table_find S_put_byte
+syn keyword xsPrivate S_qsortsvu S_re_croak2 S_readpipe_override
+syn keyword xsPrivate S_ref_array_or_hash S_refcounted_he_value S_refkids
+syn keyword xsPrivate S_refto S_reg S_reg_check_named_buff_matched
+syn keyword xsPrivate S_reg_namedseq S_reg_node S_reg_recode S_reg_scan_name
+syn keyword xsPrivate S_reg_skipcomment S_reganode S_regatom S_regbranch
+syn keyword xsPrivate S_regclass S_regcppop S_regcppush S_regdump_extflags
+syn keyword xsPrivate S_reghop3 S_reghop4 S_reghopmaybe3 S_reginclass
+syn keyword xsPrivate S_reginsert S_regmatch S_regpiece S_regpposixcc
+syn keyword xsPrivate S_regrepeat S_regtail S_regtail_study S_regtry S_reguni
+syn keyword xsPrivate S_regwhite S_require_tie_mod S_restore_magic S_run_body
+syn keyword xsPrivate S_run_user_filter S_rxres_free S_rxres_restore
+syn keyword xsPrivate S_save_hek_flags S_save_lines S_save_magic
+syn keyword xsPrivate S_save_pushptri32ptr S_save_scalar_at S_scalar_mod_type
+syn keyword xsPrivate S_scalarboolean S_scalarkids S_scalarseq S_scan_commit
+syn keyword xsPrivate S_scan_const S_scan_formline S_scan_heredoc
+syn keyword xsPrivate S_scan_ident S_scan_inputsymbol S_scan_pat S_scan_str
+syn keyword xsPrivate S_scan_subst S_scan_trans S_scan_word S_search_const
+syn keyword xsPrivate S_sequence_num S_set_regclass_bit_fold
+syn keyword xsPrivate S_share_hek_flags S_simplify_sort S_skipspace
+syn keyword xsPrivate S_skipspace0 S_skipspace1 S_skipspace2 S_sortcv
+syn keyword xsPrivate S_sortcv_stacked S_sortcv_xsub
+syn keyword xsPrivate S_space_join_names_mortal S_start_force S_stdize_locale
+syn keyword xsPrivate S_strip_return S_study_chunk S_sublex_done
+syn keyword xsPrivate S_sublex_push S_sublex_start S_sv_2iuv_common
+syn keyword xsPrivate S_sv_2iuv_non_preserve S_sv_add_arena S_sv_dup_common
+syn keyword xsPrivate S_sv_dup_inc_multiple S_sv_exp_grow S_sv_i_ncmp
+syn keyword xsPrivate S_sv_ncmp S_sv_pos_b2u_midway S_sv_pos_u2b_cached
+syn keyword xsPrivate S_sv_pos_u2b_forwards S_sv_pos_u2b_midway
+syn keyword xsPrivate S_sv_release_COW S_swallow_bom S_swatch_get
+syn keyword xsPrivate S_to_byte_substr S_to_lower_latin1 S_to_utf8_substr
+syn keyword xsPrivate S_tokenize_use S_tokeq S_tokereport
+syn keyword xsPrivate S_too_few_arguments_pv S_too_few_arguments_sv
+syn keyword xsPrivate S_too_many_arguments_pv S_too_many_arguments_sv
+syn keyword xsPrivate S_uiv_2buf S_unpack_rec S_unreferenced_to_tmp_stack
+syn keyword xsPrivate S_unshare_hek_or_pvn S_unwind_handler_stack
+syn keyword xsPrivate S_update_debugger_info S_usage S_utf16_textfilter
+syn keyword xsPrivate S_utf8_mg_len_cache_update S_utf8_mg_pos_cache_update
+syn keyword xsPrivate S_validate_suid S_visit S_with_queued_errors
+syn keyword xsPrivate S_write_no_mem S_xmldump_attr S_yywarn Slab_to_rw
+syn keyword xsPrivate _add_range_to_invlist _append_range_to_invlist
+syn keyword xsPrivate _core_swash_init _invlist_array_init _invlist_contents
+syn keyword xsPrivate _invlist_intersection
+syn keyword xsPrivate _invlist_intersection_maybe_complement_2nd
+syn keyword xsPrivate _invlist_invert _invlist_invert_prop
+syn keyword xsPrivate _invlist_populate_swatch _invlist_subtract
+syn keyword xsPrivate _invlist_union _invlist_union_maybe_complement_2nd
+syn keyword xsPrivate _is_utf8__perl_idstart _new_invlist
+syn keyword xsPrivate _new_invlist_C_array _swash_inversion_hash
+syn keyword xsPrivate _swash_to_invlist _to_fold_latin1 add_alternate
+syn keyword xsPrivate add_cp_to_invlist add_data add_utf16_textfilter
+syn keyword xsPrivate adjust_stack_on_leave amagic_cmp amagic_cmp_locale
+syn keyword xsPrivate amagic_i_ncmp amagic_ncmp anonymise_cv_maybe ao
+syn keyword xsPrivate apply_attrs apply_attrs_my assert_uft8_cache_coherent
+syn keyword xsPrivate av_reify bad_type_pv bad_type_sv bytes_to_uni
+syn keyword xsPrivate check_locale_boundary_crossing check_type_and_open
+syn keyword xsPrivate check_uni checkcomma checkposixcc ckwarn_common cl_and
+syn keyword xsPrivate cl_anything cl_init cl_is_anything cl_or
+syn keyword xsPrivate clear_placeholders closest_cop cop_free
+syn keyword xsPrivate core_regclass_swash cr_textfilter curmad curse cv_dump
+syn keyword xsPrivate deb_curcv deb_stack_n debprof debug_start_match del_sv
+syn keyword xsPrivate deprecate_commaless_var_list destroy_matcher div128
+syn keyword xsPrivate do_aexec do_chomp do_delete_local do_exec do_oddball
+syn keyword xsPrivate do_smartmatch do_trans_complex do_trans_complex_utf8
+syn keyword xsPrivate do_trans_count do_trans_count_utf8 do_trans_simple
+syn keyword xsPrivate do_trans_simple_utf8 docatch doeval dofindlabel doform
+syn keyword xsPrivate dooneliner doopen_pm doparseform dopoptoeval
+syn keyword xsPrivate dopoptogiven dopoptolabel dopoptoloop dopoptosub_at
+syn keyword xsPrivate dopoptowhen dump_exec_pos dump_trie
+syn keyword xsPrivate dump_trie_interim_list dump_trie_interim_table
+syn keyword xsPrivate dumpuntil dup_attrlist exec_failed expect_number
+syn keyword xsPrivate filter_gets finalize_op find_and_forget_pmops
+syn keyword xsPrivate find_array_subscript find_beginning find_byclass
+syn keyword xsPrivate find_hash_subscript find_in_my_stash
+syn keyword xsPrivate find_rundefsvoffset find_uninit_var first_symbol
+syn keyword xsPrivate fold_constants forbid_setid force_ident force_list
+syn keyword xsPrivate force_next force_strict_version force_version
+syn keyword xsPrivate force_word gen_constant_list get_aux_mg
+syn keyword xsPrivate get_invlist_iter_addr get_invlist_len_addr
+syn keyword xsPrivate get_invlist_version_id_addr get_invlist_zero_addr
+syn keyword xsPrivate get_num glob_2number glob_assign_glob glob_assign_ref
+syn keyword xsPrivate grok_bslash_c grok_bslash_o group_end gv_ename
+syn keyword xsPrivate gv_get_super_pkg gv_init_svtype gv_magicalize_isa
+syn keyword xsPrivate gv_magicalize_overload hfreeentries hsplit hv_auxinit
+syn keyword xsPrivate hv_delete_common hv_free_ent_ret hv_magic_check
+syn keyword xsPrivate hv_notallowed incline incpush incpush_if_exists
+syn keyword xsPrivate incpush_use_sep ingroup init_ids init_interp
+syn keyword xsPrivate init_main_stash init_perllib init_postdump_symbols
+syn keyword xsPrivate init_predump_symbols inplace_aassign intuit_method
+syn keyword xsPrivate intuit_more invlist_array invlist_clone invlist_extend
+syn keyword xsPrivate invlist_iterinit invlist_iternext invlist_len
+syn keyword xsPrivate invlist_max invlist_search invlist_set_len invlist_trim
+syn keyword xsPrivate invoke_exception_hook is_an_int is_handle_constructor
+syn keyword xsPrivate is_list_assignment is_utf8_X_L is_utf8_X_LV
+syn keyword xsPrivate is_utf8_X_LVT is_utf8_X_LV_LVT_V is_utf8_X_T
+syn keyword xsPrivate is_utf8_X_V is_utf8_X_begin is_utf8_X_extend
+syn keyword xsPrivate is_utf8_X_non_hangul is_utf8_X_prepend is_utf8_char
+syn keyword xsPrivate is_utf8_char_slow is_utf8_common isa_lookup join_exact
+syn keyword xsPrivate listkids looks_like_bool magic_methcall1 make_matcher
+syn keyword xsPrivate make_trie make_trie_failtable matcher_matches_sv
+syn keyword xsPrivate mayberelocate measure_struct mem_log_common mess_alloc
+syn keyword xsPrivate method_common minus_v missingterm modkids more_sv
+syn keyword xsPrivate mro_clean_isarev mro_gather_and_rename
+syn keyword xsPrivate mro_get_linear_isa_dfs mul128 mulexp10 my_exit_jump
+syn keyword xsPrivate my_kid need_utf8 newDEFSVOP newGIVWHENOP new_he
+syn keyword xsPrivate new_logop next_symbol nextchar no_bareword_allowed
+syn keyword xsPrivate no_fh_allowed no_op not_a_number nuke_stacks
+syn keyword xsPrivate num_overflow op_clear open_script opt_scalarhv pack_rec
+syn keyword xsPrivate pad_alloc_name pad_check_dup pad_findlex pad_reset
+syn keyword xsPrivate parse_body path_is_absolute pidgone pm_description
+syn keyword xsPrivate pmtrans printbuf process_special_blocks ptr_table_clear
+syn keyword xsPrivate ptr_table_find put_byte qerror qsortsvu re_croak2
+syn keyword xsPrivate readpipe_override ref_array_or_hash refcounted_he_value
+syn keyword xsPrivate refkids refto reg reg_check_named_buff_matched
+syn keyword xsPrivate reg_named_buff reg_named_buff_iter reg_namedseq
+syn keyword xsPrivate reg_node reg_numbered_buff_fetch
+syn keyword xsPrivate reg_numbered_buff_length reg_numbered_buff_store
+syn keyword xsPrivate reg_qr_package reg_recode reg_scan_name reg_skipcomment
+syn keyword xsPrivate reg_temp_copy reganode regatom regbranch regclass
+syn keyword xsPrivate regcppop regcppush regcurly regdump_extflags reghop3
+syn keyword xsPrivate reghop4 reghopmaybe3 reginclass reginsert regmatch
+syn keyword xsPrivate regpiece regpposixcc regprop regrepeat regtail
+syn keyword xsPrivate regtail_study regtry reguni regwhite report_uninit
+syn keyword xsPrivate require_tie_mod restore_magic run_body run_user_filter
+syn keyword xsPrivate rxres_free rxres_restore save_hek_flags save_lines
+syn keyword xsPrivate save_magic save_pushptri32ptr save_scalar_at
+syn keyword xsPrivate scalar_mod_type scalarboolean scalarkids scalarseq
+syn keyword xsPrivate scan_commit scan_const scan_formline scan_heredoc
+syn keyword xsPrivate scan_ident scan_inputsymbol scan_pat scan_str
+syn keyword xsPrivate scan_subst scan_trans scan_word search_const
+syn keyword xsPrivate sequence_num set_regclass_bit set_regclass_bit_fold
+syn keyword xsPrivate share_hek_flags simplify_sort skipspace skipspace0
+syn keyword xsPrivate skipspace1 skipspace2 sortcv sortcv_stacked sortcv_xsub
+syn keyword xsPrivate space_join_names_mortal start_force stdize_locale
+syn keyword xsPrivate strip_return study_chunk sublex_done sublex_push
+syn keyword xsPrivate sublex_start sv_2iuv_common sv_2iuv_non_preserve
+syn keyword xsPrivate sv_add_arena sv_compile_2op sv_dup_common
+syn keyword xsPrivate sv_dup_inc_multiple sv_exp_grow sv_i_ncmp sv_ncmp
+syn keyword xsPrivate sv_pos_b2u_midway sv_pos_u2b_cached sv_pos_u2b_forwards
+syn keyword xsPrivate sv_pos_u2b_midway sv_release_COW sv_setsv_cow
+syn keyword xsPrivate swallow_bom swatch_get to_byte_substr to_lower_latin1
+syn keyword xsPrivate to_utf8_substr tokenize_use tokeq tokereport
+syn keyword xsPrivate too_few_arguments_pv too_few_arguments_sv
+syn keyword xsPrivate too_many_arguments_pv too_many_arguments_sv uiv_2buf
+syn keyword xsPrivate unpack_rec unreferenced_to_tmp_stack unshare_hek_or_pvn
+syn keyword xsPrivate unwind_handler_stack update_debugger_info usage
+syn keyword xsPrivate utf16_textfilter utf8_mg_len_cache_update
+syn keyword xsPrivate utf8_mg_pos_cache_update utf8_to_uvchr utf8_to_uvuni
+syn keyword xsPrivate visit vivify_defelem with_queued_errors write_no_mem
+syn keyword xsPrivate xmldump_attr yylex yywarn
+endif
+syn keyword xsType AMT AMTS ANY AV BHK BINOP BLOCK CHECKPOINT CLONE_PARAMS
+syn keyword xsType COP COPHH CV DB_Hash_t DB_Prefix_t DEBUG_t Direntry_t
+syn keyword xsType Fpos_t Free_t GP GV Gid_t Groups_t HE HEK HV I16 I32 I64
+syn keyword xsType I8 IO IV Int64 JMPENV LISTOP LOGOP LOOP MADPROP MAGIC MGS
+syn keyword xsType MGVTBL Malloc_t Mmap_t Mode_t NEXTTOKE NV Netdb_hlen_t
+syn keyword xsType Netdb_host_t Netdb_name_t Netdb_net_t OP OPCODE OP_4tree
+syn keyword xsType Off_t Optype PAD PADLIST PADOFFSET PADOP PERL_CONTEXT
+syn keyword xsType PERL_SI PMOP PTR_TBL_ENT_t PTR_TBL_t PVOP PerlIO
+syn keyword xsType PerlIO_funcs PerlIO_list_s PerlIO_list_t PerlIOl
+syn keyword xsType PerlInterpreter Pid_t Quad_t REGEXP Rand_seed_t SSize_t
+syn keyword xsType STRLEN STRUCT_SV SUBLEXINFO SV SVOP Select_fd_set_t
+syn keyword xsType Shmat_t Signal_t Sigsave_t Size_t Sock_size_t Stat_t TM64
+syn keyword xsType TOKEN Time64_T Time_t U16 U32 U64 U8 UNOP UV Uid_t Uquad_t
+syn keyword xsType XOP XPV XPVAV XPVBM XPVCV XPVFM XPVGV XPVHV XPVIO XPVIV
+syn keyword xsType XPVLV XPVMG XPVNV XPVUV Year _PerlIO _PerlIO_funcs
+syn keyword xsType _pMY_CXT _pTHX _reg_ac_data _reg_trie_data _reg_trie_state
+syn keyword xsType _reg_trie_trans _reg_trie_trans_list_elem _sublex_info
+syn keyword xsType _xhvnameu _xivu _xmgu _xnvu am_table am_table_short
+syn keyword xsType block_eval block_format block_givwhen block_hooks
+syn keyword xsType block_loop block_sub bool clone_params custom_op
+syn keyword xsType cv_flags_t expectation gccbug_semun line_t madprop magic
+syn keyword xsType mem_log_type mgvtbl mro_alg mro_meta my_cxt_t opcode p5rx
+syn keyword xsType pMY_CXT pMY_CXT_ pTHX pTHX_ padtidy_type perl_cond
+syn keyword xsType perl_debug_pad perl_key perl_memory_debug_header
+syn keyword xsType perl_mstats perl_mstats_t perl_mutex perl_os_thread
+syn keyword xsType perl_phase perl_vars perl_wait_queue pthread_addr_t
+syn keyword xsType ptr_tbl ptr_tbl_ent re_save_state refcounted_he
+syn keyword xsType reg_ac_data reg_data reg_substr_data reg_substr_datum
+syn keyword xsType reg_trie_data reg_trie_state reg_trie_trans
+syn keyword xsType reg_trie_trans_le regex_charset regnode regnode_1
+syn keyword xsType regnode_2 regnode_2L regnode_charclass
+syn keyword xsType regnode_charclass_class regnode_string semun shared_he
+syn keyword xsType svtype thread_intern ufuncs xpv xpvav xpvcv xpvfm xpvgv
+syn keyword xsType xpvhv xpvhv_aux xpvio xpviv xpvlv xpvmg xpvnv xpvuv
+syn keyword xsType yytokentype
+syn keyword xsString IVdf NVef NVff NVgf SVf SVf256 SVf32 SVf_ UVof UVuf UVxf
+syn keyword xsConstant CXt_BLOCK CXt_EVAL CXt_FORMAT CXt_GIVEN CXt_LOOP_FOR
+syn keyword xsConstant CXt_LOOP_LAZYIV CXt_LOOP_LAZYSV CXt_LOOP_PLAIN
+syn keyword xsConstant CXt_NULL CXt_SUB CXt_SUBST CXt_WHEN FALSE G_ARRAY
+syn keyword xsConstant G_DISCARD G_EVAL G_FAKINGEVAL G_KEEPERR G_METHOD
+syn keyword xsConstant G_NOARGS G_NODEBUG G_SCALAR G_UNDEF_FILL G_VOID G_WANT
+syn keyword xsConstant G_WARN_ALL_MASK G_WARN_ALL_OFF G_WARN_ALL_ON
+syn keyword xsConstant G_WARN_OFF G_WARN_ON G_WARN_ONCE G_WRITING_TO_STDERR
+syn keyword xsConstant OA_AVREF OA_BASEOP OA_BASEOP_OR_UNOP OA_BINOP
+syn keyword xsConstant OA_CLASS_MASK OA_COP OA_CVREF OA_DANGEROUS OA_DEFGV
+syn keyword xsConstant OA_FILEREF OA_FILESTATOP OA_FOLDCONST OA_HVREF OA_LIST
+syn keyword xsConstant OA_LISTOP OA_LOGOP OA_LOOP OA_LOOPEXOP OA_MARK
+syn keyword xsConstant OA_OPTIONAL OA_OTHERINT OA_PADOP OA_PMOP
+syn keyword xsConstant OA_PVOP_OR_SVOP OA_RETSCALAR OA_SCALAR OA_SCALARREF
+syn keyword xsConstant OA_SVOP OA_TARGET OA_TARGLEX OA_UNOP OP_AASSIGN OP_ABS
+syn keyword xsConstant OP_ACCEPT OP_ADD OP_AEACH OP_AELEM OP_AELEMFAST
+syn keyword xsConstant OP_AELEMFAST_LEX OP_AKEYS OP_ALARM OP_AND OP_ANDASSIGN
+syn keyword xsConstant OP_ANONCODE OP_ANONHASH OP_ANONLIST OP_ASLICE OP_ATAN2
+syn keyword xsConstant OP_AV2ARYLEN OP_AVALUES OP_BACKTICK OP_BIND OP_BINMODE
+syn keyword xsConstant OP_BIT_AND OP_BIT_OR OP_BIT_XOR OP_BLESS OP_BOOLKEYS
+syn keyword xsConstant OP_BREAK OP_CALLER OP_CHDIR OP_CHMOD OP_CHOMP OP_CHOP
+syn keyword xsConstant OP_CHOWN OP_CHR OP_CHROOT OP_CLOSE OP_CLOSEDIR
+syn keyword xsConstant OP_COMPLEMENT OP_CONCAT OP_COND_EXPR OP_CONNECT
+syn keyword xsConstant OP_CONST OP_CONTINUE OP_COREARGS OP_COS OP_CRYPT
+syn keyword xsConstant OP_CUSTOM OP_DBMCLOSE OP_DBMOPEN OP_DBSTATE OP_DEFINED
+syn keyword xsConstant OP_DELETE OP_DIE OP_DIVIDE OP_DOFILE OP_DOR
+syn keyword xsConstant OP_DORASSIGN OP_DUMP OP_EACH OP_EGRENT OP_EHOSTENT
+syn keyword xsConstant OP_ENETENT OP_ENTER OP_ENTEREVAL OP_ENTERGIVEN
+syn keyword xsConstant OP_ENTERITER OP_ENTERLOOP OP_ENTERSUB OP_ENTERTRY
+syn keyword xsConstant OP_ENTERWHEN OP_ENTERWRITE OP_EOF OP_EPROTOENT
+syn keyword xsConstant OP_EPWENT OP_EQ OP_ESERVENT OP_EXEC OP_EXISTS OP_EXIT
+syn keyword xsConstant OP_EXP OP_FC OP_FCNTL OP_FILENO OP_FLIP OP_FLOCK
+syn keyword xsConstant OP_FLOP OP_FORK OP_FORMLINE OP_FTATIME OP_FTBINARY
+syn keyword xsConstant OP_FTBLK OP_FTCHR OP_FTCTIME OP_FTDIR OP_FTEEXEC
+syn keyword xsConstant OP_FTEOWNED OP_FTEREAD OP_FTEWRITE OP_FTFILE OP_FTIS
+syn keyword xsConstant OP_FTLINK OP_FTMTIME OP_FTPIPE OP_FTREXEC OP_FTROWNED
+syn keyword xsConstant OP_FTRREAD OP_FTRWRITE OP_FTSGID OP_FTSIZE OP_FTSOCK
+syn keyword xsConstant OP_FTSUID OP_FTSVTX OP_FTTEXT OP_FTTTY OP_FTZERO OP_GE
+syn keyword xsConstant OP_GELEM OP_GETC OP_GETLOGIN OP_GETPEERNAME OP_GETPGRP
+syn keyword xsConstant OP_GETPPID OP_GETPRIORITY OP_GETSOCKNAME OP_GGRENT
+syn keyword xsConstant OP_GGRGID OP_GGRNAM OP_GHBYADDR OP_GHBYNAME
+syn keyword xsConstant OP_GHOSTENT OP_GLOB OP_GMTIME OP_GNBYADDR OP_GNBYNAME
+syn keyword xsConstant OP_GNETENT OP_GOTO OP_GPBYNAME OP_GPBYNUMBER
+syn keyword xsConstant OP_GPROTOENT OP_GPWENT OP_GPWNAM OP_GPWUID
+syn keyword xsConstant OP_GREPSTART OP_GREPWHILE OP_GSBYNAME OP_GSBYPORT
+syn keyword xsConstant OP_GSERVENT OP_GSOCKOPT OP_GT OP_GV OP_GVSV OP_HELEM
+syn keyword xsConstant OP_HEX OP_HINTSEVAL OP_HSLICE OP_INDEX OP_INT OP_IOCTL
+syn keyword xsConstant OP_ITER OP_I_ADD OP_I_DIVIDE OP_I_EQ OP_I_GE OP_I_GT
+syn keyword xsConstant OP_I_LE OP_I_LT OP_I_MODULO OP_I_MULTIPLY OP_I_NCMP
+syn keyword xsConstant OP_I_NE OP_I_NEGATE OP_I_POSTDEC OP_I_POSTINC
+syn keyword xsConstant OP_I_PREDEC OP_I_PREINC OP_I_SUBTRACT OP_JOIN OP_KEYS
+syn keyword xsConstant OP_KILL OP_LAST OP_LC OP_LCFIRST OP_LE OP_LEAVE
+syn keyword xsConstant OP_LEAVEEVAL OP_LEAVEGIVEN OP_LEAVELOOP OP_LEAVESUB
+syn keyword xsConstant OP_LEAVESUBLV OP_LEAVETRY OP_LEAVEWHEN OP_LEAVEWRITE
+syn keyword xsConstant OP_LEFT_SHIFT OP_LENGTH OP_LINESEQ OP_LINK OP_LIST
+syn keyword xsConstant OP_LISTEN OP_LOCALTIME OP_LOCK OP_LOG OP_LSLICE
+syn keyword xsConstant OP_LSTAT OP_LT OP_MAPSTART OP_MAPWHILE OP_MATCH
+syn keyword xsConstant OP_METHOD OP_METHOD_NAMED OP_MKDIR OP_MODULO OP_MSGCTL
+syn keyword xsConstant OP_MSGGET OP_MSGRCV OP_MSGSND OP_MULTIPLY OP_NCMP
+syn keyword xsConstant OP_NE OP_NEGATE OP_NEXT OP_NEXTSTATE OP_NOT OP_NULL
+syn keyword xsConstant OP_OCT OP_ONCE OP_OPEN OP_OPEN_DIR OP_OR OP_ORASSIGN
+syn keyword xsConstant OP_ORD OP_PACK OP_PADANY OP_PADAV OP_PADHV OP_PADSV
+syn keyword xsConstant OP_PIPE_OP OP_POP OP_POS OP_POSTDEC OP_POSTINC OP_POW
+syn keyword xsConstant OP_PREDEC OP_PREINC OP_PRINT OP_PROTOTYPE OP_PRTF
+syn keyword xsConstant OP_PUSH OP_PUSHMARK OP_PUSHRE OP_QR OP_QUOTEMETA
+syn keyword xsConstant OP_RAND OP_RANGE OP_RCATLINE OP_REACH OP_READ
+syn keyword xsConstant OP_READDIR OP_READLINE OP_READLINK OP_RECV OP_REDO
+syn keyword xsConstant OP_REF OP_REFGEN OP_REGCMAYBE OP_REGCOMP OP_REGCRESET
+syn keyword xsConstant OP_RENAME OP_REPEAT OP_REQUIRE OP_RESET OP_RETURN
+syn keyword xsConstant OP_REVERSE OP_REWINDDIR OP_RIGHT_SHIFT OP_RINDEX
+syn keyword xsConstant OP_RKEYS OP_RMDIR OP_RUNCV OP_RV2AV OP_RV2CV OP_RV2GV
+syn keyword xsConstant OP_RV2HV OP_RV2SV OP_RVALUES OP_SASSIGN OP_SAY
+syn keyword xsConstant OP_SCALAR OP_SCHOMP OP_SCHOP OP_SCMP OP_SCOPE OP_SEEK
+syn keyword xsConstant OP_SEEKDIR OP_SELECT OP_SEMCTL OP_SEMGET OP_SEMOP
+syn keyword xsConstant OP_SEND OP_SEQ OP_SETPGRP OP_SETPRIORITY OP_SGE
+syn keyword xsConstant OP_SGRENT OP_SGT OP_SHIFT OP_SHMCTL OP_SHMGET
+syn keyword xsConstant OP_SHMREAD OP_SHMWRITE OP_SHOSTENT OP_SHUTDOWN OP_SIN
+syn keyword xsConstant OP_SLE OP_SLEEP OP_SLT OP_SMARTMATCH OP_SNE OP_SNETENT
+syn keyword xsConstant OP_SOCKET OP_SOCKPAIR OP_SORT OP_SPLICE OP_SPLIT
+syn keyword xsConstant OP_SPRINTF OP_SPROTOENT OP_SPWENT OP_SQRT OP_SRAND
+syn keyword xsConstant OP_SREFGEN OP_SSELECT OP_SSERVENT OP_SSOCKOPT OP_STAT
+syn keyword xsConstant OP_STRINGIFY OP_STUB OP_STUDY OP_SUBST OP_SUBSTCONT
+syn keyword xsConstant OP_SUBSTR OP_SUBTRACT OP_SYMLINK OP_SYSCALL OP_SYSOPEN
+syn keyword xsConstant OP_SYSREAD OP_SYSSEEK OP_SYSTEM OP_SYSWRITE OP_TELL
+syn keyword xsConstant OP_TELLDIR OP_TIE OP_TIED OP_TIME OP_TMS OP_TRANS
+syn keyword xsConstant OP_TRANSR OP_TRUNCATE OP_UC OP_UCFIRST OP_UMASK
+syn keyword xsConstant OP_UNDEF OP_UNLINK OP_UNPACK OP_UNSHIFT OP_UNSTACK
+syn keyword xsConstant OP_UNTIE OP_UTIME OP_VALUES OP_VEC OP_WAIT OP_WAITPID
+syn keyword xsConstant OP_WANTARRAY OP_WARN OP_XOR OP_max OPf_KIDS OPf_KNOW
+syn keyword xsConstant OPf_LIST OPf_MOD OPf_PARENS OPf_REF OPf_SPECIAL
+syn keyword xsConstant OPf_STACKED OPf_WANT OPf_WANT_LIST OPf_WANT_SCALAR
+syn keyword xsConstant OPf_WANT_VOID OPpALLOW_FAKE OPpASSIGN_BACKWARDS
+syn keyword xsConstant OPpASSIGN_COMMON OPpASSIGN_CV_TO_GV OPpCONST_BARE
+syn keyword xsConstant OPpCONST_ENTERED OPpCONST_NOVER OPpCONST_SHORTCIRCUIT
+syn keyword xsConstant OPpCONST_STRICT OPpCONST_WARNING OPpCOREARGS_DEREF1
+syn keyword xsConstant OPpCOREARGS_DEREF2 OPpCOREARGS_PUSHMARK
+syn keyword xsConstant OPpCOREARGS_SCALARMOD OPpDEREF OPpDEREF_AV OPpDEREF_HV
+syn keyword xsConstant OPpDEREF_SV OPpDONT_INIT_GV OPpEARLY_CV
+syn keyword xsConstant OPpENTERSUB_AMPER OPpENTERSUB_DB OPpENTERSUB_HASTARG
+syn keyword xsConstant OPpENTERSUB_INARGS OPpENTERSUB_LVAL_MASK
+syn keyword xsConstant OPpENTERSUB_NOPAREN OPpEVAL_BYTES OPpEVAL_COPHH
+syn keyword xsConstant OPpEVAL_HAS_HH OPpEVAL_UNICODE OPpEXISTS_SUB
+syn keyword xsConstant OPpEXIT_VMSISH OPpFLIP_LINENUM OPpFT_ACCESS
+syn keyword xsConstant OPpFT_AFTER_t OPpFT_STACKED OPpFT_STACKING OPpGREP_LEX
+syn keyword xsConstant OPpHUSH_VMSISH OPpITER_DEF OPpITER_REVERSED
+syn keyword xsConstant OPpLIST_GUESSED OPpLVAL_DEFER OPpLVAL_INTRO
+syn keyword xsConstant OPpMAYBE_LVSUB OPpMAY_RETURN_CONSTANT OPpOFFBYONE
+syn keyword xsConstant OPpOPEN_IN_CRLF OPpOPEN_IN_RAW OPpOPEN_OUT_CRLF
+syn keyword xsConstant OPpOPEN_OUT_RAW OPpOUR_INTRO OPpPAD_STATE
+syn keyword xsConstant OPpPV_IS_UTF8 OPpREFCOUNTED OPpREPEAT_DOLIST
+syn keyword xsConstant OPpREVERSE_INPLACE OPpRUNTIME OPpSLICE OPpSORT_DESCEND
+syn keyword xsConstant OPpSORT_INPLACE OPpSORT_INTEGER OPpSORT_NUMERIC
+syn keyword xsConstant OPpSORT_QSORT OPpSORT_REVERSE OPpSORT_STABLE
+syn keyword xsConstant OPpSUBSTR_REPL_FIRST OPpTARGET_MY OPpTRANS_ALL
+syn keyword xsConstant OPpTRANS_COMPLEMENT OPpTRANS_DELETE OPpTRANS_FROM_UTF
+syn keyword xsConstant OPpTRANS_GROWS OPpTRANS_IDENTICAL OPpTRANS_SQUASH
+syn keyword xsConstant OPpTRANS_TO_UTF PERL_MAGIC_READONLY_ACCEPTABLE
+syn keyword xsConstant PERL_MAGIC_TYPE_IS_VALUE_MAGIC
+syn keyword xsConstant PERL_MAGIC_TYPE_READONLY_ACCEPTABLE
+syn keyword xsConstant PERL_MAGIC_UTF8_CACHESIZE PERL_MAGIC_VALUE_MAGIC
+syn keyword xsConstant PERL_MAGIC_VTABLE_MASK PERL_MAGIC_arylen
+syn keyword xsConstant PERL_MAGIC_arylen_p PERL_MAGIC_backref PERL_MAGIC_bm
+syn keyword xsConstant PERL_MAGIC_checkcall PERL_MAGIC_collxfrm
+syn keyword xsConstant PERL_MAGIC_dbfile PERL_MAGIC_dbline PERL_MAGIC_defelem
+syn keyword xsConstant PERL_MAGIC_env PERL_MAGIC_envelem PERL_MAGIC_ext
+syn keyword xsConstant PERL_MAGIC_fm PERL_MAGIC_hints PERL_MAGIC_hintselem
+syn keyword xsConstant PERL_MAGIC_isa PERL_MAGIC_isaelem PERL_MAGIC_nkeys
+syn keyword xsConstant PERL_MAGIC_overload PERL_MAGIC_overload_elem
+syn keyword xsConstant PERL_MAGIC_overload_table PERL_MAGIC_pos PERL_MAGIC_qr
+syn keyword xsConstant PERL_MAGIC_regdata PERL_MAGIC_regdatum
+syn keyword xsConstant PERL_MAGIC_regex_global PERL_MAGIC_rhash
+syn keyword xsConstant PERL_MAGIC_shared PERL_MAGIC_shared_scalar
+syn keyword xsConstant PERL_MAGIC_sig PERL_MAGIC_sigelem PERL_MAGIC_study
+syn keyword xsConstant PERL_MAGIC_substr PERL_MAGIC_sv PERL_MAGIC_symtab
+syn keyword xsConstant PERL_MAGIC_taint PERL_MAGIC_tied PERL_MAGIC_tiedelem
+syn keyword xsConstant PERL_MAGIC_tiedscalar PERL_MAGIC_utf8 PERL_MAGIC_uvar
+syn keyword xsConstant PERL_MAGIC_uvar_elem PERL_MAGIC_vec PERL_MAGIC_vstring
+syn keyword xsConstant REGEX_ASCII_MORE_RESTRICTED_CHARSET
+syn keyword xsConstant REGEX_ASCII_RESTRICTED_CHARSET REGEX_DEPENDS_CHARSET
+syn keyword xsConstant REGEX_LOCALE_CHARSET REGEX_UNICODE_CHARSET SVfARG
+syn keyword xsConstant SVf_AMAGIC SVf_BREAK SVf_FAKE SVf_IOK SVf_IVisUV
+syn keyword xsConstant SVf_NOK SVf_OK SVf_OOK SVf_POK SVf_READONLY SVf_ROK
+syn keyword xsConstant SVf_THINKFIRST SVf_UTF8 SVp_IOK SVp_NOK SVp_POK
+syn keyword xsConstant SVp_SCREAM SVpad_NAME SVpad_OUR SVpad_STATE
+syn keyword xsConstant SVpad_TYPED SVpav_REAL SVpav_REIFY SVpbm_TAIL
+syn keyword xsConstant SVpbm_VALID SVpgv_GP SVphv_CLONEABLE SVphv_HASKFLAGS
+syn keyword xsConstant SVphv_LAZYDEL SVphv_REHASH SVphv_SHAREKEYS
+syn keyword xsConstant SVprv_PCS_IMPORTED SVprv_WEAKREF SVs_GMG SVs_OBJECT
+syn keyword xsConstant SVs_PADMY SVs_PADSTALE SVs_PADTMP SVs_RMG SVs_SMG
+syn keyword xsConstant SVs_TEMP SVt_BIND SVt_IV SVt_LAST SVt_NULL SVt_NV
+syn keyword xsConstant SVt_PV SVt_PVAV SVt_PVBM SVt_PVCV SVt_PVFM SVt_PVGV
+syn keyword xsConstant SVt_PVHV SVt_PVIO SVt_PVIV SVt_PVLV SVt_PVMG SVt_PVNV
+syn keyword xsConstant SVt_REGEXP SVt_RV TRUE XATTRBLOCK XATTRTERM XBLOCK
+syn keyword xsConstant XOPERATOR XREF XSTATE XTERM XTERMBLOCK XTERMORDORDOR
+syn keyword xsConstant padtidy_FORMAT padtidy_SUB padtidy_SUBCLONE
+syn keyword xsException XCPT_CATCH XCPT_RETHROW XCPT_TRY_END XCPT_TRY_START
+syn keyword xsException dXCPT
+syn keyword xsKeyword ALIAS: BOOT: CASE: CLEANUP: CODE: C_ARGS: DISABLE
+syn keyword xsKeyword ENABLE FALLBACK: IN INCLUDE: INIT: INPUT: INTERFACE:
+syn keyword xsKeyword INTERFACE_MACRO: IN_OUT IN_OUTLIST MODULE NO_INIT:
+syn keyword xsKeyword NO_OUTPUT: OUT OUTLIST OUTPUT: OVERLOAD: PACKAGE
+syn keyword xsKeyword POSTCALL: PPCODE: PREFIX PREINIT: PROTOTYPE:
+syn keyword xsKeyword PROTOTYPES: REQUIRE: SCOPE: VERSIONCHECK: length
+syn keyword xsFunction GetVars Gv_AMupdate PerlIO_clearerr PerlIO_close
+syn keyword xsFunction PerlIO_eof PerlIO_error PerlIO_fileno PerlIO_fill
+syn keyword xsFunction PerlIO_flush PerlIO_get_base PerlIO_get_bufsiz
+syn keyword xsFunction PerlIO_get_cnt PerlIO_get_ptr PerlIO_read PerlIO_seek
+syn keyword xsFunction PerlIO_set_cnt PerlIO_set_ptrcnt PerlIO_setlinebuf
+syn keyword xsFunction PerlIO_stderr PerlIO_stdin PerlIO_stdout PerlIO_tell
+syn keyword xsFunction PerlIO_unread PerlIO_write Perl_GetVars
+syn keyword xsFunction Perl_Gv_AMupdate Perl_PerlIO_clearerr
+syn keyword xsFunction Perl_PerlIO_close Perl_PerlIO_context_layers
+syn keyword xsFunction Perl_PerlIO_eof Perl_PerlIO_error Perl_PerlIO_fileno
+syn keyword xsFunction Perl_PerlIO_fill Perl_PerlIO_flush
+syn keyword xsFunction Perl_PerlIO_get_base Perl_PerlIO_get_bufsiz
+syn keyword xsFunction Perl_PerlIO_get_cnt Perl_PerlIO_get_ptr
+syn keyword xsFunction Perl_PerlIO_read Perl_PerlIO_seek Perl_PerlIO_set_cnt
+syn keyword xsFunction Perl_PerlIO_set_ptrcnt Perl_PerlIO_setlinebuf
+syn keyword xsFunction Perl_PerlIO_stderr Perl_PerlIO_stdin
+syn keyword xsFunction Perl_PerlIO_stdout Perl_PerlIO_tell Perl_PerlIO_unread
+syn keyword xsFunction Perl_PerlIO_write Perl_Slab_Alloc Perl_Slab_Free
+syn keyword xsFunction Perl__is_utf8_quotemeta Perl__to_uni_fold_flags
+syn keyword xsFunction Perl__to_utf8_fold_flags Perl__to_utf8_lower_flags
+syn keyword xsFunction Perl__to_utf8_title_flags Perl__to_utf8_upper_flags
+syn keyword xsFunction Perl_amagic_call Perl_amagic_deref_call Perl_any_dup
+syn keyword xsFunction Perl_apply_attrs_string Perl_atfork_lock
+syn keyword xsFunction Perl_atfork_unlock Perl_av_arylen_p Perl_av_clear
+syn keyword xsFunction Perl_av_create_and_push Perl_av_create_and_unshift_one
+syn keyword xsFunction Perl_av_delete Perl_av_exists Perl_av_extend
+syn keyword xsFunction Perl_av_fetch Perl_av_fill Perl_av_iter_p Perl_av_len
+syn keyword xsFunction Perl_av_make Perl_av_pop Perl_av_push Perl_av_shift
+syn keyword xsFunction Perl_av_store Perl_av_undef Perl_av_unshift
+syn keyword xsFunction Perl_block_gimme Perl_blockhook_register
+syn keyword xsFunction Perl_bytes_cmp_utf8 Perl_bytes_from_utf8
+syn keyword xsFunction Perl_bytes_to_utf8 Perl_call_argv Perl_call_atexit
+syn keyword xsFunction Perl_call_list Perl_call_method Perl_call_pv
+syn keyword xsFunction Perl_call_sv Perl_caller_cx Perl_calloc Perl_cast_i32
+syn keyword xsFunction Perl_cast_iv Perl_cast_ulong Perl_cast_uv
+syn keyword xsFunction Perl_ck_entersub_args_list Perl_ck_entersub_args_proto
+syn keyword xsFunction Perl_ck_entersub_args_proto_or_list Perl_ck_warner
+syn keyword xsFunction Perl_ck_warner_d Perl_ckwarn Perl_ckwarn_d
+syn keyword xsFunction Perl_clone_params_del Perl_clone_params_new
+syn keyword xsFunction Perl_cop_fetch_label Perl_cop_store_label Perl_croak
+syn keyword xsFunction Perl_croak_no_modify Perl_croak_nocontext
+syn keyword xsFunction Perl_croak_sv Perl_croak_xs_usage Perl_csighandler
+syn keyword xsFunction Perl_custom_op_desc Perl_custom_op_name
+syn keyword xsFunction Perl_custom_op_register Perl_custom_op_xop
+syn keyword xsFunction Perl_cv_clone Perl_cv_const_sv
+syn keyword xsFunction Perl_cv_get_call_checker Perl_cv_set_call_checker
+syn keyword xsFunction Perl_cv_undef Perl_cx_dump Perl_cx_dup Perl_cxinc
+syn keyword xsFunction Perl_deb Perl_deb_nocontext Perl_debop
+syn keyword xsFunction Perl_debprofdump Perl_debstack Perl_debstackptrs
+syn keyword xsFunction Perl_delimcpy Perl_despatch_signals Perl_die
+syn keyword xsFunction Perl_die_nocontext Perl_die_sv Perl_dirp_dup
+syn keyword xsFunction Perl_do_aspawn Perl_do_binmode Perl_do_close
+syn keyword xsFunction Perl_do_gv_dump Perl_do_gvgv_dump Perl_do_hv_dump
+syn keyword xsFunction Perl_do_join Perl_do_magic_dump Perl_do_op_dump
+syn keyword xsFunction Perl_do_open9 Perl_do_openn Perl_do_pmop_dump
+syn keyword xsFunction Perl_do_spawn Perl_do_spawn_nowait Perl_do_sprintf
+syn keyword xsFunction Perl_do_sv_dump Perl_doing_taint Perl_doref
+syn keyword xsFunction Perl_dounwind Perl_dowantarray Perl_dump_all
+syn keyword xsFunction Perl_dump_eval Perl_dump_fds Perl_dump_form
+syn keyword xsFunction Perl_dump_indent Perl_dump_mstats Perl_dump_packsubs
+syn keyword xsFunction Perl_dump_sub Perl_dump_vindent Perl_eval_pv
+syn keyword xsFunction Perl_eval_sv Perl_fbm_compile Perl_fbm_instr
+syn keyword xsFunction Perl_filter_add Perl_filter_del Perl_filter_read
+syn keyword xsFunction Perl_find_runcv Perl_find_rundefsv Perl_foldEQ
+syn keyword xsFunction Perl_foldEQ_latin1 Perl_foldEQ_locale
+syn keyword xsFunction Perl_foldEQ_utf8_flags Perl_form Perl_form_nocontext
+syn keyword xsFunction Perl_fp_dup Perl_fprintf_nocontext
+syn keyword xsFunction Perl_free_global_struct Perl_free_tmps Perl_get_av
+syn keyword xsFunction Perl_get_context Perl_get_cv Perl_get_cvn_flags
+syn keyword xsFunction Perl_get_hv Perl_get_mstats Perl_get_op_descs
+syn keyword xsFunction Perl_get_op_names Perl_get_ppaddr Perl_get_sv
+syn keyword xsFunction Perl_get_vtbl Perl_getcwd_sv Perl_gp_dup Perl_gp_free
+syn keyword xsFunction Perl_gp_ref Perl_grok_bin Perl_grok_hex
+syn keyword xsFunction Perl_grok_number Perl_grok_numeric_radix Perl_grok_oct
+syn keyword xsFunction Perl_gv_add_by_type Perl_gv_autoload_pv
+syn keyword xsFunction Perl_gv_autoload_pvn Perl_gv_autoload_sv Perl_gv_check
+syn keyword xsFunction Perl_gv_const_sv Perl_gv_dump Perl_gv_efullname
+syn keyword xsFunction Perl_gv_efullname4 Perl_gv_fetchfile
+syn keyword xsFunction Perl_gv_fetchfile_flags Perl_gv_fetchmeth_pv
+syn keyword xsFunction Perl_gv_fetchmeth_pv_autoload Perl_gv_fetchmeth_pvn
+syn keyword xsFunction Perl_gv_fetchmeth_pvn_autoload Perl_gv_fetchmeth_sv
+syn keyword xsFunction Perl_gv_fetchmeth_sv_autoload
+syn keyword xsFunction Perl_gv_fetchmethod_autoload
+syn keyword xsFunction Perl_gv_fetchmethod_pv_flags
+syn keyword xsFunction Perl_gv_fetchmethod_pvn_flags
+syn keyword xsFunction Perl_gv_fetchmethod_sv_flags Perl_gv_fetchpv
+syn keyword xsFunction Perl_gv_fetchpvn_flags Perl_gv_fetchsv
+syn keyword xsFunction Perl_gv_fullname Perl_gv_fullname4 Perl_gv_handler
+syn keyword xsFunction Perl_gv_init_pv Perl_gv_init_pvn Perl_gv_init_sv
+syn keyword xsFunction Perl_gv_name_set Perl_gv_stashpv Perl_gv_stashpvn
+syn keyword xsFunction Perl_gv_stashsv Perl_he_dup Perl_hek_dup
+syn keyword xsFunction Perl_hv_assert Perl_hv_clear
+syn keyword xsFunction Perl_hv_clear_placeholders Perl_hv_common
+syn keyword xsFunction Perl_hv_common_key_len Perl_hv_copy_hints_hv
+syn keyword xsFunction Perl_hv_delayfree_ent Perl_hv_eiter_p
+syn keyword xsFunction Perl_hv_eiter_set Perl_hv_fill Perl_hv_free_ent
+syn keyword xsFunction Perl_hv_iterinit Perl_hv_iterkey Perl_hv_iterkeysv
+syn keyword xsFunction Perl_hv_iternext_flags Perl_hv_iternextsv
+syn keyword xsFunction Perl_hv_iterval Perl_hv_ksplit Perl_hv_name_set
+syn keyword xsFunction Perl_hv_placeholders_get Perl_hv_placeholders_p
+syn keyword xsFunction Perl_hv_placeholders_set Perl_hv_riter_p
+syn keyword xsFunction Perl_hv_riter_set Perl_hv_scalar
+syn keyword xsFunction Perl_init_global_struct Perl_init_i18nl10n
+syn keyword xsFunction Perl_init_i18nl14n Perl_init_stacks Perl_init_tm
+syn keyword xsFunction Perl_instr Perl_is_ascii_string Perl_is_lvalue_sub
+syn keyword xsFunction Perl_is_uni_alnum Perl_is_uni_alnum_lc
+syn keyword xsFunction Perl_is_uni_alpha Perl_is_uni_alpha_lc
+syn keyword xsFunction Perl_is_uni_ascii Perl_is_uni_ascii_lc
+syn keyword xsFunction Perl_is_uni_cntrl Perl_is_uni_cntrl_lc
+syn keyword xsFunction Perl_is_uni_digit Perl_is_uni_digit_lc
+syn keyword xsFunction Perl_is_uni_graph Perl_is_uni_graph_lc
+syn keyword xsFunction Perl_is_uni_idfirst Perl_is_uni_idfirst_lc
+syn keyword xsFunction Perl_is_uni_lower Perl_is_uni_lower_lc
+syn keyword xsFunction Perl_is_uni_print Perl_is_uni_print_lc
+syn keyword xsFunction Perl_is_uni_punct Perl_is_uni_punct_lc
+syn keyword xsFunction Perl_is_uni_space Perl_is_uni_space_lc
+syn keyword xsFunction Perl_is_uni_upper Perl_is_uni_upper_lc
+syn keyword xsFunction Perl_is_uni_xdigit Perl_is_uni_xdigit_lc
+syn keyword xsFunction Perl_is_utf8_alnum Perl_is_utf8_alpha
+syn keyword xsFunction Perl_is_utf8_ascii Perl_is_utf8_char_buf
+syn keyword xsFunction Perl_is_utf8_cntrl Perl_is_utf8_digit
+syn keyword xsFunction Perl_is_utf8_graph Perl_is_utf8_idcont
+syn keyword xsFunction Perl_is_utf8_idfirst Perl_is_utf8_lower
+syn keyword xsFunction Perl_is_utf8_mark Perl_is_utf8_perl_space
+syn keyword xsFunction Perl_is_utf8_perl_word Perl_is_utf8_posix_digit
+syn keyword xsFunction Perl_is_utf8_print Perl_is_utf8_punct
+syn keyword xsFunction Perl_is_utf8_space Perl_is_utf8_string
+syn keyword xsFunction Perl_is_utf8_string_loclen Perl_is_utf8_upper
+syn keyword xsFunction Perl_is_utf8_xdigit Perl_is_utf8_xidcont
+syn keyword xsFunction Perl_is_utf8_xidfirst Perl_leave_scope
+syn keyword xsFunction Perl_lex_bufutf8 Perl_lex_discard_to
+syn keyword xsFunction Perl_lex_grow_linestr Perl_lex_next_chunk
+syn keyword xsFunction Perl_lex_peek_unichar Perl_lex_read_space
+syn keyword xsFunction Perl_lex_read_to Perl_lex_read_unichar Perl_lex_start
+syn keyword xsFunction Perl_lex_stuff_pv Perl_lex_stuff_pvn Perl_lex_stuff_sv
+syn keyword xsFunction Perl_lex_unstuff Perl_load_module
+syn keyword xsFunction Perl_load_module_nocontext Perl_looks_like_number
+syn keyword xsFunction Perl_magic_dump Perl_malloc Perl_markstack_grow
+syn keyword xsFunction Perl_mess Perl_mess_nocontext Perl_mess_sv Perl_mfree
+syn keyword xsFunction Perl_mg_clear Perl_mg_copy Perl_mg_dup Perl_mg_find
+syn keyword xsFunction Perl_mg_findext Perl_mg_free Perl_mg_free_type
+syn keyword xsFunction Perl_mg_get Perl_mg_length Perl_mg_magical Perl_mg_set
+syn keyword xsFunction Perl_mg_size Perl_mini_mktime Perl_moreswitches
+syn keyword xsFunction Perl_mro_get_from_name Perl_mro_get_linear_isa
+syn keyword xsFunction Perl_mro_get_private_data Perl_mro_method_changed_in
+syn keyword xsFunction Perl_mro_register Perl_mro_set_mro
+syn keyword xsFunction Perl_mro_set_private_data Perl_my_atof Perl_my_atof2
+syn keyword xsFunction Perl_my_bcopy Perl_my_bzero Perl_my_chsize
+syn keyword xsFunction Perl_my_cxt_index Perl_my_cxt_init Perl_my_dirfd
+syn keyword xsFunction Perl_my_exit Perl_my_failure_exit Perl_my_fflush_all
+syn keyword xsFunction Perl_my_fork Perl_my_htonl Perl_my_memcmp
+syn keyword xsFunction Perl_my_memset Perl_my_ntohl Perl_my_pclose
+syn keyword xsFunction Perl_my_popen Perl_my_popen_list Perl_my_setenv
+syn keyword xsFunction Perl_my_snprintf Perl_my_socketpair Perl_my_sprintf
+syn keyword xsFunction Perl_my_strftime Perl_my_strlcat Perl_my_strlcpy
+syn keyword xsFunction Perl_my_swap Perl_my_vsnprintf Perl_newANONATTRSUB
+syn keyword xsFunction Perl_newANONHASH Perl_newANONLIST Perl_newANONSUB
+syn keyword xsFunction Perl_newASSIGNOP Perl_newATTRSUB Perl_newAVREF
+syn keyword xsFunction Perl_newBINOP Perl_newCONDOP Perl_newCONSTSUB
+syn keyword xsFunction Perl_newCONSTSUB_flags Perl_newCVREF Perl_newFORM
+syn keyword xsFunction Perl_newFOROP Perl_newGIVENOP Perl_newGVOP
+syn keyword xsFunction Perl_newGVREF Perl_newGVgen_flags Perl_newHVREF
+syn keyword xsFunction Perl_newHVhv Perl_newLISTOP Perl_newLOGOP
+syn keyword xsFunction Perl_newLOOPEX Perl_newLOOPOP Perl_newMYSUB
+syn keyword xsFunction Perl_newNULLLIST Perl_newOP Perl_newPADOP Perl_newPMOP
+syn keyword xsFunction Perl_newPROG Perl_newPVOP Perl_newRANGE Perl_newRV
+syn keyword xsFunction Perl_newRV_noinc Perl_newSLICEOP Perl_newSTATEOP
+syn keyword xsFunction Perl_newSV Perl_newSVOP Perl_newSVREF Perl_newSV_type
+syn keyword xsFunction Perl_newSVhek Perl_newSViv Perl_newSVnv Perl_newSVpv
+syn keyword xsFunction Perl_newSVpv_share Perl_newSVpvf
+syn keyword xsFunction Perl_newSVpvf_nocontext Perl_newSVpvn
+syn keyword xsFunction Perl_newSVpvn_flags Perl_newSVpvn_share Perl_newSVrv
+syn keyword xsFunction Perl_newSVsv Perl_newSVuv Perl_newUNOP Perl_newWHENOP
+syn keyword xsFunction Perl_newWHILEOP Perl_newXS Perl_newXS_flags
+syn keyword xsFunction Perl_new_collate Perl_new_ctype Perl_new_numeric
+syn keyword xsFunction Perl_new_stackinfo Perl_new_version Perl_ninstr
+syn keyword xsFunction Perl_nothreadhook Perl_op_append_elem
+syn keyword xsFunction Perl_op_append_list Perl_op_contextualize Perl_op_dump
+syn keyword xsFunction Perl_op_free Perl_op_linklist Perl_op_null
+syn keyword xsFunction Perl_op_prepend_elem Perl_op_refcnt_lock
+syn keyword xsFunction Perl_op_refcnt_unlock Perl_op_scope Perl_pack_cat
+syn keyword xsFunction Perl_packlist Perl_pad_add_anon Perl_pad_add_name_pv
+syn keyword xsFunction Perl_pad_add_name_pvn Perl_pad_add_name_sv
+syn keyword xsFunction Perl_pad_alloc Perl_pad_compname_type
+syn keyword xsFunction Perl_pad_findmy_pv Perl_pad_findmy_pvn
+syn keyword xsFunction Perl_pad_findmy_sv Perl_pad_new Perl_pad_setsv
+syn keyword xsFunction Perl_pad_sv Perl_pad_tidy Perl_parse_arithexpr
+syn keyword xsFunction Perl_parse_barestmt Perl_parse_block
+syn keyword xsFunction Perl_parse_fullexpr Perl_parse_fullstmt
+syn keyword xsFunction Perl_parse_label Perl_parse_listexpr
+syn keyword xsFunction Perl_parse_stmtseq Perl_parse_termexpr Perl_parser_dup
+syn keyword xsFunction Perl_pmop_dump Perl_pop_scope Perl_pregcomp
+syn keyword xsFunction Perl_pregexec Perl_pregfree Perl_pregfree2
+syn keyword xsFunction Perl_prescan_version Perl_printf_nocontext
+syn keyword xsFunction Perl_ptr_table_fetch Perl_ptr_table_free
+syn keyword xsFunction Perl_ptr_table_new Perl_ptr_table_split
+syn keyword xsFunction Perl_ptr_table_store Perl_push_scope Perl_pv_display
+syn keyword xsFunction Perl_pv_escape Perl_pv_pretty Perl_pv_uni_display
+syn keyword xsFunction Perl_re_compile Perl_re_dup_guts Perl_re_intuit_start
+syn keyword xsFunction Perl_re_intuit_string Perl_realloc Perl_reentrant_free
+syn keyword xsFunction Perl_reentrant_init Perl_reentrant_retry
+syn keyword xsFunction Perl_reentrant_size Perl_reg_named_buff_all
+syn keyword xsFunction Perl_reg_named_buff_exists Perl_reg_named_buff_fetch
+syn keyword xsFunction Perl_reg_named_buff_firstkey
+syn keyword xsFunction Perl_reg_named_buff_nextkey Perl_reg_named_buff_scalar
+syn keyword xsFunction Perl_regclass_swash Perl_regdump Perl_regdupe_internal
+syn keyword xsFunction Perl_regexec_flags Perl_regfree_internal
+syn keyword xsFunction Perl_reginitcolors Perl_regnext Perl_repeatcpy
+syn keyword xsFunction Perl_require_pv Perl_rninstr Perl_rsignal
+syn keyword xsFunction Perl_rsignal_state Perl_runops_debug
+syn keyword xsFunction Perl_runops_standard Perl_rv2cv_op_cv Perl_rvpv_dup
+syn keyword xsFunction Perl_safesyscalloc Perl_safesysfree Perl_safesysmalloc
+syn keyword xsFunction Perl_safesysrealloc Perl_save_I16 Perl_save_I32
+syn keyword xsFunction Perl_save_I8 Perl_save_adelete Perl_save_aelem_flags
+syn keyword xsFunction Perl_save_alloc Perl_save_aptr Perl_save_ary
+syn keyword xsFunction Perl_save_bool Perl_save_clearsv Perl_save_delete
+syn keyword xsFunction Perl_save_destructor Perl_save_destructor_x
+syn keyword xsFunction Perl_save_generic_pvref Perl_save_generic_svref
+syn keyword xsFunction Perl_save_gp Perl_save_hash Perl_save_hdelete
+syn keyword xsFunction Perl_save_helem_flags Perl_save_hints Perl_save_hptr
+syn keyword xsFunction Perl_save_int Perl_save_item Perl_save_iv
+syn keyword xsFunction Perl_save_list Perl_save_long Perl_save_nogv
+syn keyword xsFunction Perl_save_padsv_and_mortalize Perl_save_pptr
+syn keyword xsFunction Perl_save_pushi32ptr Perl_save_pushptr
+syn keyword xsFunction Perl_save_pushptrptr Perl_save_re_context
+syn keyword xsFunction Perl_save_scalar Perl_save_set_svflags
+syn keyword xsFunction Perl_save_shared_pvref Perl_save_sptr Perl_save_svref
+syn keyword xsFunction Perl_save_vptr Perl_savepv Perl_savepvn
+syn keyword xsFunction Perl_savesharedpv Perl_savesharedpvn
+syn keyword xsFunction Perl_savesharedsvpv Perl_savestack_grow
+syn keyword xsFunction Perl_savestack_grow_cnt Perl_savesvpv Perl_scan_bin
+syn keyword xsFunction Perl_scan_hex Perl_scan_num Perl_scan_oct
+syn keyword xsFunction Perl_scan_version Perl_scan_vstring Perl_screaminstr
+syn keyword xsFunction Perl_seed Perl_set_context Perl_set_numeric_local
+syn keyword xsFunction Perl_set_numeric_radix Perl_set_numeric_standard
+syn keyword xsFunction Perl_setdefout Perl_share_hek Perl_si_dup Perl_sortsv
+syn keyword xsFunction Perl_sortsv_flags Perl_ss_dup Perl_stack_grow
+syn keyword xsFunction Perl_start_subparse Perl_stashpv_hvname_match
+syn keyword xsFunction Perl_str_to_version Perl_sv_2bool_flags Perl_sv_2cv
+syn keyword xsFunction Perl_sv_2io Perl_sv_2iv_flags Perl_sv_2mortal
+syn keyword xsFunction Perl_sv_2nv_flags Perl_sv_2pv_flags Perl_sv_2pvbyte
+syn keyword xsFunction Perl_sv_2pvutf8 Perl_sv_2uv_flags Perl_sv_backoff
+syn keyword xsFunction Perl_sv_bless Perl_sv_cat_decode Perl_sv_catpv
+syn keyword xsFunction Perl_sv_catpv_flags Perl_sv_catpv_mg Perl_sv_catpvf
+syn keyword xsFunction Perl_sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
+syn keyword xsFunction Perl_sv_catpvf_nocontext Perl_sv_catpvn_flags
+syn keyword xsFunction Perl_sv_catsv_flags Perl_sv_chop Perl_sv_clear
+syn keyword xsFunction Perl_sv_cmp Perl_sv_cmp_flags Perl_sv_cmp_locale
+syn keyword xsFunction Perl_sv_cmp_locale_flags Perl_sv_collxfrm_flags
+syn keyword xsFunction Perl_sv_copypv Perl_sv_dec Perl_sv_dec_nomg
+syn keyword xsFunction Perl_sv_derived_from Perl_sv_derived_from_pv
+syn keyword xsFunction Perl_sv_derived_from_pvn Perl_sv_derived_from_sv
+syn keyword xsFunction Perl_sv_destroyable Perl_sv_does Perl_sv_does_pv
+syn keyword xsFunction Perl_sv_does_pvn Perl_sv_does_sv Perl_sv_dump
+syn keyword xsFunction Perl_sv_dup Perl_sv_dup_inc Perl_sv_eq_flags
+syn keyword xsFunction Perl_sv_force_normal_flags Perl_sv_free Perl_sv_gets
+syn keyword xsFunction Perl_sv_grow Perl_sv_inc Perl_sv_inc_nomg
+syn keyword xsFunction Perl_sv_insert_flags Perl_sv_isa Perl_sv_isobject
+syn keyword xsFunction Perl_sv_iv Perl_sv_len Perl_sv_len_utf8 Perl_sv_magic
+syn keyword xsFunction Perl_sv_magicext Perl_sv_mortalcopy Perl_sv_newmortal
+syn keyword xsFunction Perl_sv_newref Perl_sv_nosharing Perl_sv_nounlocking
+syn keyword xsFunction Perl_sv_nv Perl_sv_peek Perl_sv_pos_b2u
+syn keyword xsFunction Perl_sv_pos_u2b Perl_sv_pos_u2b_flags Perl_sv_pvbyten
+syn keyword xsFunction Perl_sv_pvbyten_force Perl_sv_pvn
+syn keyword xsFunction Perl_sv_pvn_force_flags Perl_sv_pvn_nomg
+syn keyword xsFunction Perl_sv_pvutf8n Perl_sv_pvutf8n_force
+syn keyword xsFunction Perl_sv_recode_to_utf8 Perl_sv_reftype Perl_sv_replace
+syn keyword xsFunction Perl_sv_report_used Perl_sv_reset Perl_sv_rvweaken
+syn keyword xsFunction Perl_sv_setiv Perl_sv_setiv_mg Perl_sv_setnv
+syn keyword xsFunction Perl_sv_setnv_mg Perl_sv_setpv Perl_sv_setpv_mg
+syn keyword xsFunction Perl_sv_setpvf Perl_sv_setpvf_mg
+syn keyword xsFunction Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_nocontext
+syn keyword xsFunction Perl_sv_setpviv Perl_sv_setpviv_mg Perl_sv_setpvn
+syn keyword xsFunction Perl_sv_setpvn_mg Perl_sv_setref_iv Perl_sv_setref_nv
+syn keyword xsFunction Perl_sv_setref_pv Perl_sv_setref_pvn Perl_sv_setref_uv
+syn keyword xsFunction Perl_sv_setsv_flags Perl_sv_setsv_mg Perl_sv_setuv
+syn keyword xsFunction Perl_sv_setuv_mg Perl_sv_tainted Perl_sv_true
+syn keyword xsFunction Perl_sv_uni_display Perl_sv_unmagic Perl_sv_unmagicext
+syn keyword xsFunction Perl_sv_unref_flags Perl_sv_untaint Perl_sv_upgrade
+syn keyword xsFunction Perl_sv_usepvn_flags Perl_sv_utf8_decode
+syn keyword xsFunction Perl_sv_utf8_downgrade Perl_sv_utf8_encode
+syn keyword xsFunction Perl_sv_utf8_upgrade_flags_grow Perl_sv_uv
+syn keyword xsFunction Perl_sv_vcatpvf Perl_sv_vcatpvf_mg Perl_sv_vcatpvfn
+syn keyword xsFunction Perl_sv_vsetpvf Perl_sv_vsetpvf_mg Perl_sv_vsetpvfn
+syn keyword xsFunction Perl_swash_fetch Perl_swash_init Perl_sys_init
+syn keyword xsFunction Perl_sys_init3 Perl_sys_intern_clear
+syn keyword xsFunction Perl_sys_intern_dup Perl_sys_intern_init Perl_sys_term
+syn keyword xsFunction Perl_taint_env Perl_taint_proper Perl_tmps_grow
+syn keyword xsFunction Perl_to_uni_lower Perl_to_uni_lower_lc
+syn keyword xsFunction Perl_to_uni_title Perl_to_uni_title_lc
+syn keyword xsFunction Perl_to_uni_upper Perl_to_uni_upper_lc
+syn keyword xsFunction Perl_to_utf8_case Perl_unlnk Perl_unpack_str
+syn keyword xsFunction Perl_unpackstring Perl_unsharepvn Perl_upg_version
+syn keyword xsFunction Perl_utf16_to_utf8 Perl_utf16_to_utf8_reversed
+syn keyword xsFunction Perl_utf8_distance Perl_utf8_hop Perl_utf8_length
+syn keyword xsFunction Perl_utf8_to_bytes Perl_utf8_to_uvchr_buf
+syn keyword xsFunction Perl_utf8_to_uvuni_buf Perl_utf8n_to_uvchr
+syn keyword xsFunction Perl_utf8n_to_uvuni Perl_uvchr_to_utf8
+syn keyword xsFunction Perl_uvchr_to_utf8_flags Perl_uvuni_to_utf8_flags
+syn keyword xsFunction Perl_valid_utf8_to_uvchr Perl_valid_utf8_to_uvuni
+syn keyword xsFunction Perl_vcmp Perl_vcroak Perl_vdeb Perl_vform
+syn keyword xsFunction Perl_vload_module Perl_vmess Perl_vnewSVpvf
+syn keyword xsFunction Perl_vnormal Perl_vnumify Perl_vstringify Perl_vverify
+syn keyword xsFunction Perl_vwarn Perl_vwarner Perl_warn Perl_warn_nocontext
+syn keyword xsFunction Perl_warn_sv Perl_warner Perl_warner_nocontext
+syn keyword xsFunction Perl_whichsig_pv Perl_whichsig_pvn Perl_whichsig_sv
+syn keyword xsFunction Perl_wrap_op_checker Slab_Alloc Slab_Free
+syn keyword xsFunction _is_utf8_quotemeta _to_uni_fold_flags
+syn keyword xsFunction _to_utf8_fold_flags _to_utf8_lower_flags
+syn keyword xsFunction _to_utf8_title_flags _to_utf8_upper_flags amagic_call
+syn keyword xsFunction amagic_deref_call any_dup apply_attrs_string
+syn keyword xsFunction atfork_lock atfork_unlock av_clear av_delete av_exists
+syn keyword xsFunction av_extend av_fetch av_fill av_len av_make av_pop
+syn keyword xsFunction av_push av_shift av_store av_undef av_unshift
+syn keyword xsFunction block_gimme bytes_cmp_utf8 bytes_from_utf8
+syn keyword xsFunction bytes_to_utf8 call_argv call_atexit call_list
+syn keyword xsFunction call_method call_pv call_sv caller_cx cast_i32 cast_iv
+syn keyword xsFunction cast_ulong cast_uv ck_entersub_args_list
+syn keyword xsFunction ck_entersub_args_proto ck_entersub_args_proto_or_list
+syn keyword xsFunction ck_warner ck_warner_d croak croak_no_modify
+syn keyword xsFunction croak_nocontext croak_sv croak_xs_usage csighandler
+syn keyword xsFunction custom_op_desc custom_op_name cv_clone cv_const_sv
+syn keyword xsFunction cv_get_call_checker cv_set_call_checker cv_undef
+syn keyword xsFunction cx_dump cx_dup cxinc deb deb_nocontext debop
+syn keyword xsFunction debprofdump debstack debstackptrs delimcpy
+syn keyword xsFunction despatch_signals die die_nocontext die_sv dirp_dup
+syn keyword xsFunction do_aspawn do_binmode do_close do_gv_dump do_gvgv_dump
+syn keyword xsFunction do_hv_dump do_join do_magic_dump do_op_dump do_open9
+syn keyword xsFunction do_openn do_pmop_dump do_spawn do_spawn_nowait
+syn keyword xsFunction do_sprintf do_sv_dump doing_taint doref dounwind
+syn keyword xsFunction dowantarray dump_all dump_eval dump_fds dump_form
+syn keyword xsFunction dump_indent dump_mstats dump_packsubs dump_sub
+syn keyword xsFunction dump_vindent eval_pv eval_sv fbm_compile fbm_instr
+syn keyword xsFunction filter_add filter_del filter_read find_runcv
+syn keyword xsFunction find_rundefsv foldEQ foldEQ_latin1 foldEQ_locale
+syn keyword xsFunction foldEQ_utf8_flags form form_nocontext fp_dup
+syn keyword xsFunction fprintf_nocontext free_global_struct free_tmps get_av
+syn keyword xsFunction get_context get_cv get_cvn_flags get_hv get_mstats
+syn keyword xsFunction get_op_descs get_op_names get_ppaddr get_sv get_vtbl
+syn keyword xsFunction getcwd_sv gp_dup gp_free gp_ref grok_bin grok_hex
+syn keyword xsFunction grok_number grok_numeric_radix grok_oct gv_add_by_type
+syn keyword xsFunction gv_autoload_pv gv_autoload_pvn gv_autoload_sv gv_check
+syn keyword xsFunction gv_const_sv gv_dump gv_efullname gv_efullname4
+syn keyword xsFunction gv_fetchfile gv_fetchfile_flags gv_fetchmeth_pv
+syn keyword xsFunction gv_fetchmeth_pv_autoload gv_fetchmeth_pvn
+syn keyword xsFunction gv_fetchmeth_pvn_autoload gv_fetchmeth_sv
+syn keyword xsFunction gv_fetchmeth_sv_autoload gv_fetchmethod_autoload
+syn keyword xsFunction gv_fetchmethod_pv_flags gv_fetchmethod_pvn_flags
+syn keyword xsFunction gv_fetchmethod_sv_flags gv_fetchpv gv_fetchpvn_flags
+syn keyword xsFunction gv_fetchsv gv_fullname gv_fullname4 gv_handler
+syn keyword xsFunction gv_init_pv gv_init_pvn gv_init_sv gv_name_set
+syn keyword xsFunction gv_stashpv gv_stashpvn gv_stashsv he_dup hek_dup
+syn keyword xsFunction hv_clear hv_clear_placeholders hv_common
+syn keyword xsFunction hv_common_key_len hv_copy_hints_hv hv_delayfree_ent
+syn keyword xsFunction hv_free_ent hv_iterinit hv_iterkey hv_iterkeysv
+syn keyword xsFunction hv_iternext_flags hv_iternextsv hv_iterval hv_ksplit
+syn keyword xsFunction hv_name_set hv_scalar init_global_struct init_i18nl10n
+syn keyword xsFunction init_i18nl14n init_stacks init_tm instr
+syn keyword xsFunction is_ascii_string is_lvalue_sub is_uni_alnum
+syn keyword xsFunction is_uni_alnum_lc is_uni_alpha is_uni_alpha_lc
+syn keyword xsFunction is_uni_ascii is_uni_ascii_lc is_uni_cntrl
+syn keyword xsFunction is_uni_cntrl_lc is_uni_digit is_uni_digit_lc
+syn keyword xsFunction is_uni_graph is_uni_graph_lc is_uni_idfirst
+syn keyword xsFunction is_uni_idfirst_lc is_uni_lower is_uni_lower_lc
+syn keyword xsFunction is_uni_print is_uni_print_lc is_uni_punct
+syn keyword xsFunction is_uni_punct_lc is_uni_space is_uni_space_lc
+syn keyword xsFunction is_uni_upper is_uni_upper_lc is_uni_xdigit
+syn keyword xsFunction is_uni_xdigit_lc is_utf8_alnum is_utf8_alpha
+syn keyword xsFunction is_utf8_ascii is_utf8_char_buf is_utf8_cntrl
+syn keyword xsFunction is_utf8_digit is_utf8_graph is_utf8_idcont
+syn keyword xsFunction is_utf8_idfirst is_utf8_lower is_utf8_mark
+syn keyword xsFunction is_utf8_perl_space is_utf8_perl_word
+syn keyword xsFunction is_utf8_posix_digit is_utf8_print is_utf8_punct
+syn keyword xsFunction is_utf8_space is_utf8_string is_utf8_string_loclen
+syn keyword xsFunction is_utf8_upper is_utf8_xdigit is_utf8_xidcont
+syn keyword xsFunction is_utf8_xidfirst leave_scope lex_bufutf8
+syn keyword xsFunction lex_discard_to lex_grow_linestr lex_next_chunk
+syn keyword xsFunction lex_peek_unichar lex_read_space lex_read_to
+syn keyword xsFunction lex_read_unichar lex_start lex_stuff_pv lex_stuff_pvn
+syn keyword xsFunction lex_stuff_sv lex_unstuff load_module
+syn keyword xsFunction load_module_nocontext looks_like_number magic_dump
+syn keyword xsFunction markstack_grow mess mess_nocontext mess_sv mg_clear
+syn keyword xsFunction mg_copy mg_dup mg_find mg_findext mg_free mg_free_type
+syn keyword xsFunction mg_get mg_length mg_magical mg_set mg_size mini_mktime
+syn keyword xsFunction moreswitches mro_get_linear_isa mro_method_changed_in
+syn keyword xsFunction my_atof my_atof2 my_bcopy my_bzero my_chsize my_dirfd
+syn keyword xsFunction my_exit my_failure_exit my_fflush_all my_fork my_htonl
+syn keyword xsFunction my_memcmp my_memset my_ntohl my_pclose my_popen
+syn keyword xsFunction my_popen_list my_setenv my_socketpair my_strftime
+syn keyword xsFunction my_swap newANONATTRSUB newANONHASH newANONLIST
+syn keyword xsFunction newANONSUB newASSIGNOP newATTRSUB newAVREF newBINOP
+syn keyword xsFunction newCONDOP newCONSTSUB newCONSTSUB_flags newCVREF
+syn keyword xsFunction newFORM newFOROP newGIVENOP newGVOP newGVREF
+syn keyword xsFunction newGVgen_flags newHVREF newHVhv newLISTOP newLOGOP
+syn keyword xsFunction newLOOPEX newLOOPOP newMYSUB newNULLLIST newOP
+syn keyword xsFunction newPADOP newPMOP newPROG newPVOP newRANGE newRV
+syn keyword xsFunction newRV_noinc newSLICEOP newSTATEOP newSV newSVOP
+syn keyword xsFunction newSVREF newSV_type newSVhek newSViv newSVnv newSVpv
+syn keyword xsFunction newSVpv_share newSVpvf newSVpvf_nocontext newSVpvn
+syn keyword xsFunction newSVpvn_flags newSVpvn_share newSVrv newSVsv newSVuv
+syn keyword xsFunction newUNOP newWHENOP newWHILEOP newXS newXS_flags
+syn keyword xsFunction new_collate new_ctype new_numeric new_stackinfo
+syn keyword xsFunction new_version ninstr nothreadhook op_append_elem
+syn keyword xsFunction op_append_list op_contextualize op_dump op_free
+syn keyword xsFunction op_linklist op_null op_prepend_elem op_refcnt_lock
+syn keyword xsFunction op_refcnt_unlock op_scope pack_cat packlist
+syn keyword xsFunction pad_add_anon pad_add_name_pv pad_add_name_pvn
+syn keyword xsFunction pad_add_name_sv pad_alloc pad_compname_type
+syn keyword xsFunction pad_findmy_pv pad_findmy_pvn pad_findmy_sv pad_new
+syn keyword xsFunction pad_setsv pad_sv pad_tidy parse_arithexpr
+syn keyword xsFunction parse_barestmt parse_block parse_fullexpr
+syn keyword xsFunction parse_fullstmt parse_label parse_listexpr
+syn keyword xsFunction parse_stmtseq parse_termexpr parser_dup pmop_dump
+syn keyword xsFunction pop_scope pregcomp pregexec pregfree pregfree2
+syn keyword xsFunction prescan_version printf_nocontext ptr_table_fetch
+syn keyword xsFunction ptr_table_free ptr_table_new ptr_table_split
+syn keyword xsFunction ptr_table_store push_scope pv_display pv_escape
+syn keyword xsFunction pv_pretty pv_uni_display re_compile re_dup_guts
+syn keyword xsFunction re_intuit_start re_intuit_string reentrant_free
+syn keyword xsFunction reentrant_init reentrant_retry reentrant_size
+syn keyword xsFunction reg_named_buff_all reg_named_buff_exists
+syn keyword xsFunction reg_named_buff_fetch reg_named_buff_firstkey
+syn keyword xsFunction reg_named_buff_nextkey reg_named_buff_scalar
+syn keyword xsFunction regclass_swash regdump regdupe_internal regexec_flags
+syn keyword xsFunction regfree_internal reginitcolors regnext repeatcpy
+syn keyword xsFunction require_pv rninstr rsignal rsignal_state runops_debug
+syn keyword xsFunction runops_standard rv2cv_op_cv rvpv_dup safesyscalloc
+syn keyword xsFunction safesysfree safesysmalloc safesysrealloc save_I16
+syn keyword xsFunction save_I32 save_I8 save_adelete save_aelem_flags
+syn keyword xsFunction save_alloc save_aptr save_ary save_bool save_clearsv
+syn keyword xsFunction save_delete save_destructor save_destructor_x
+syn keyword xsFunction save_generic_pvref save_generic_svref save_gp
+syn keyword xsFunction save_hash save_hdelete save_helem_flags save_hints
+syn keyword xsFunction save_hptr save_int save_item save_iv save_list
+syn keyword xsFunction save_long save_nogv save_padsv_and_mortalize save_pptr
+syn keyword xsFunction save_pushi32ptr save_pushptr save_pushptrptr
+syn keyword xsFunction save_re_context save_scalar save_set_svflags
+syn keyword xsFunction save_shared_pvref save_sptr save_svref save_vptr
+syn keyword xsFunction savepv savepvn savesharedpv savesharedpvn
+syn keyword xsFunction savesharedsvpv savestack_grow savestack_grow_cnt
+syn keyword xsFunction savesvpv scan_bin scan_hex scan_num scan_oct
+syn keyword xsFunction scan_version scan_vstring screaminstr seed set_context
+syn keyword xsFunction set_numeric_local set_numeric_radix
+syn keyword xsFunction set_numeric_standard setdefout share_hek si_dup sortsv
+syn keyword xsFunction sortsv_flags ss_dup stack_grow start_subparse
+syn keyword xsFunction stashpv_hvname_match str_to_version sv_2bool_flags
+syn keyword xsFunction sv_2cv sv_2io sv_2iv_flags sv_2mortal sv_2nv_flags
+syn keyword xsFunction sv_2pv_flags sv_2pvbyte sv_2pvutf8 sv_2uv_flags
+syn keyword xsFunction sv_backoff sv_bless sv_cat_decode sv_catpv
+syn keyword xsFunction sv_catpv_flags sv_catpv_mg sv_catpvf sv_catpvf_mg
+syn keyword xsFunction sv_catpvf_mg_nocontext sv_catpvf_nocontext
+syn keyword xsFunction sv_catpvn_flags sv_catsv_flags sv_chop sv_clear
+syn keyword xsFunction sv_cmp_flags sv_cmp_locale_flags sv_collxfrm_flags
+syn keyword xsFunction sv_copypv sv_dec sv_dec_nomg sv_derived_from
+syn keyword xsFunction sv_derived_from_pv sv_derived_from_pvn
+syn keyword xsFunction sv_derived_from_sv sv_destroyable sv_does sv_does_pv
+syn keyword xsFunction sv_does_pvn sv_does_sv sv_dump sv_dup sv_dup_inc
+syn keyword xsFunction sv_eq_flags sv_force_normal_flags sv_free sv_gets
+syn keyword xsFunction sv_grow sv_inc sv_inc_nomg sv_insert_flags sv_isa
+syn keyword xsFunction sv_isobject sv_iv sv_len sv_len_utf8 sv_magic
+syn keyword xsFunction sv_magicext sv_mortalcopy sv_newmortal sv_newref
+syn keyword xsFunction sv_nosharing sv_nounlocking sv_nv sv_peek sv_pos_b2u
+syn keyword xsFunction sv_pos_u2b sv_pos_u2b_flags sv_pvbyten
+syn keyword xsFunction sv_pvbyten_force sv_pvn sv_pvn_force_flags sv_pvn_nomg
+syn keyword xsFunction sv_pvutf8n sv_pvutf8n_force sv_recode_to_utf8
+syn keyword xsFunction sv_reftype sv_replace sv_report_used sv_reset
+syn keyword xsFunction sv_rvweaken sv_setiv sv_setiv_mg sv_setnv sv_setnv_mg
+syn keyword xsFunction sv_setpv sv_setpv_mg sv_setpvf sv_setpvf_mg
+syn keyword xsFunction sv_setpvf_mg_nocontext sv_setpvf_nocontext sv_setpviv
+syn keyword xsFunction sv_setpviv_mg sv_setpvn sv_setpvn_mg sv_setref_iv
+syn keyword xsFunction sv_setref_nv sv_setref_pv sv_setref_pvn sv_setref_uv
+syn keyword xsFunction sv_setsv_flags sv_setsv_mg sv_setuv sv_setuv_mg
+syn keyword xsFunction sv_tainted sv_true sv_uni_display sv_unmagic
+syn keyword xsFunction sv_unmagicext sv_unref_flags sv_untaint sv_upgrade
+syn keyword xsFunction sv_usepvn_flags sv_utf8_decode sv_utf8_downgrade
+syn keyword xsFunction sv_utf8_encode sv_utf8_upgrade_flags_grow sv_uv
+syn keyword xsFunction sv_vcatpvf sv_vcatpvf_mg sv_vcatpvfn sv_vsetpvf
+syn keyword xsFunction sv_vsetpvf_mg sv_vsetpvfn swash_fetch swash_init
+syn keyword xsFunction sys_intern_clear sys_intern_dup sys_intern_init
+syn keyword xsFunction taint_env taint_proper tmps_grow to_uni_lower
+syn keyword xsFunction to_uni_lower_lc to_uni_title to_uni_title_lc
+syn keyword xsFunction to_uni_upper to_uni_upper_lc to_utf8_case unlnk
+syn keyword xsFunction unpack_str unpackstring unsharepvn upg_version
+syn keyword xsFunction utf16_to_utf8 utf16_to_utf8_reversed utf8_distance
+syn keyword xsFunction utf8_hop utf8_length utf8_to_bytes utf8_to_uvchr_buf
+syn keyword xsFunction utf8_to_uvuni_buf utf8n_to_uvchr utf8n_to_uvuni
+syn keyword xsFunction uvchr_to_utf8 uvchr_to_utf8_flags uvuni_to_utf8_flags
+syn keyword xsFunction valid_utf8_to_uvchr valid_utf8_to_uvuni vcmp vcroak
+syn keyword xsFunction vdeb vform vload_module vmess vnewSVpvf vnormal
+syn keyword xsFunction vnumify vstringify vverify vwarn vwarner warn
+syn keyword xsFunction warn_nocontext warn_sv warner warner_nocontext
+syn keyword xsFunction whichsig_pv whichsig_pvn whichsig_sv wrap_op_checker
+syn keyword xsVariable MARK MY_CXT ORIGMARK PL_I PL_No PL_Vars PL_VarsPtr
+syn keyword xsVariable PL_Yes PL_a2e PL_bincompat_options PL_bitcount
+syn keyword xsVariable PL_block_type PL_bufend PL_bufptr PL_charclass
+syn keyword xsVariable PL_check PL_copline PL_core_reg_engine PL_cshname
+syn keyword xsVariable PL_curforce PL_e2a PL_e2utf PL_endwhite PL_error_count
+syn keyword xsVariable PL_expect PL_faketokens PL_fold PL_fold_latin1
+syn keyword xsVariable PL_fold_locale PL_force_link_funcs PL_freq
+syn keyword xsVariable PL_global_struct_size PL_hexdigit PL_in_my
+syn keyword xsVariable PL_in_my_stash PL_interp_size PL_interp_size_5_16_0
+syn keyword xsVariable PL_last_lop PL_last_lop_op PL_last_uni PL_lasttoke
+syn keyword xsVariable PL_latin1_lc PL_lex_allbrackets PL_lex_brackets
+syn keyword xsVariable PL_lex_brackstack PL_lex_casemods PL_lex_casestack
+syn keyword xsVariable PL_lex_defer PL_lex_dojoin PL_lex_expect
+syn keyword xsVariable PL_lex_fakeeof PL_lex_formbrack PL_lex_inpat
+syn keyword xsVariable PL_lex_inwhat PL_lex_op PL_lex_repl PL_lex_starts
+syn keyword xsVariable PL_lex_state PL_lex_stuff PL_linestart PL_linestr
+syn keyword xsVariable PL_magic_data PL_magic_vtable_names PL_memory_wrap
+syn keyword xsVariable PL_mod_latin1_uc PL_multi_close PL_multi_end
+syn keyword xsVariable PL_multi_open PL_multi_start PL_nexttoke PL_nexttype
+syn keyword xsVariable PL_nextval PL_nextwhite PL_no_aelem PL_no_dir_func
+syn keyword xsVariable PL_no_func PL_no_helem_sv PL_no_localize_ref PL_no_mem
+syn keyword xsVariable PL_no_modify PL_no_myglob PL_no_security
+syn keyword xsVariable PL_no_sock_func PL_no_symref PL_no_symref_sv
+syn keyword xsVariable PL_no_usym PL_no_wrongref PL_oldbufptr PL_oldoldbufptr
+syn keyword xsVariable PL_op_desc PL_op_name PL_opargs PL_pending_ident
+syn keyword xsVariable PL_phase_names PL_ppaddr PL_preambled
+syn keyword xsVariable PL_realtokenstart PL_reg_extflags_name PL_reg_name
+syn keyword xsVariable PL_regkind PL_revision PL_rsfp PL_rsfp_filters
+syn keyword xsVariable PL_runops_dbg PL_runops_std PL_sh_path PL_sig_name
+syn keyword xsVariable PL_sig_num PL_simple PL_simple_bitmask PL_skipwhite
+syn keyword xsVariable PL_sublex_info PL_subversion PL_thisclose PL_thismad
+syn keyword xsVariable PL_thisopen PL_thisstuff PL_thistoken PL_thiswhite
+syn keyword xsVariable PL_tokenbuf PL_utf2e PL_utf8skip PL_uudmap PL_uuemap
+syn keyword xsVariable PL_valid_types_IVX PL_valid_types_IV_set
+syn keyword xsVariable PL_valid_types_NVX PL_valid_types_NV_set
+syn keyword xsVariable PL_valid_types_PVX PL_valid_types_RV PL_varies
+syn keyword xsVariable PL_varies_bitmask PL_version PL_warn_nl PL_warn_nosemi
+syn keyword xsVariable PL_warn_reserved PL_warn_uninit PL_warn_uninit_sv
+syn keyword xsVariable RETVAL SP TARG _aMY_CXT _aTHX aMY_CXT aMY_CXT_ aTHX
+syn keyword xsVariable aTHX_ items
+syn keyword xsMacro ABORT ACCEPT ADDOP AHOCORASICK AHOCORASICKC
+syn keyword xsMacro ALLOC_THREAD_KEY ALNUM ALNUMA ALNUML ALNUMU AMG_CALLun
+syn keyword xsMacro AMG_CALLunary AMGf_assign AMGf_noleft AMGf_noright
+syn keyword xsMacro AMGf_numeric AMGf_set AMGf_unary AMGfallNEVER AMGfallNO
+syn keyword xsMacro AMGfallYES AMT_AMAGIC AMT_AMAGIC_off AMT_AMAGIC_on
+syn keyword xsMacro AMT_OVERLOADED AMT_OVERLOADED_off AMT_OVERLOADED_on
+syn keyword xsMacro AMTf_AMAGIC AMTf_OVERLOADED ANDAND ANDOP ANONSUB ANYOF
+syn keyword xsMacro ANYOFV ANYOF_ALNUM ANYOF_ALNUMC ANYOF_ALNUML ANYOF_ALPHA
+syn keyword xsMacro ANYOF_ASCII ANYOF_BIT ANYOF_BITMAP ANYOF_BITMAP_BYTE
+syn keyword xsMacro ANYOF_BITMAP_CLEAR ANYOF_BITMAP_CLEARALL ANYOF_BITMAP_SET
+syn keyword xsMacro ANYOF_BITMAP_SETALL ANYOF_BITMAP_SIZE ANYOF_BITMAP_TEST
+syn keyword xsMacro ANYOF_BITMAP_TESTALLSET ANYOF_BITMAP_ZERO ANYOF_BLANK
+syn keyword xsMacro ANYOF_CLASS ANYOF_CLASSBITMAP_SIZE ANYOF_CLASS_BYTE
+syn keyword xsMacro ANYOF_CLASS_CLEAR ANYOF_CLASS_SET ANYOF_CLASS_SETALL
+syn keyword xsMacro ANYOF_CLASS_SIZE ANYOF_CLASS_SKIP ANYOF_CLASS_TEST
+syn keyword xsMacro ANYOF_CLASS_TEST_ANY_SET ANYOF_CLASS_ZERO ANYOF_CNTRL
+syn keyword xsMacro ANYOF_DIGIT ANYOF_EOS ANYOF_FLAGS ANYOF_FLAGS_ALL
+syn keyword xsMacro ANYOF_FOLD_SHARP_S ANYOF_GRAPH ANYOF_HORIZWS ANYOF_INVERT
+syn keyword xsMacro ANYOF_IS_SYNTHETIC ANYOF_LARGE ANYOF_LOCALE
+syn keyword xsMacro ANYOF_LOC_NONBITMAP_FOLD ANYOF_LOWER ANYOF_MAX
+syn keyword xsMacro ANYOF_NALNUM ANYOF_NALNUMC ANYOF_NALNUML ANYOF_NALPHA
+syn keyword xsMacro ANYOF_NASCII ANYOF_NBLANK ANYOF_NCNTRL ANYOF_NDIGIT
+syn keyword xsMacro ANYOF_NGRAPH ANYOF_NHORIZWS ANYOF_NLOWER ANYOF_NONBITMAP
+syn keyword xsMacro ANYOF_NONBITMAP_EMPTY ANYOF_NONBITMAP_NON_UTF8
+syn keyword xsMacro ANYOF_NON_UTF8_LATIN1_ALL ANYOF_NPRINT ANYOF_NPSXSPC
+syn keyword xsMacro ANYOF_NPUNCT ANYOF_NSPACE ANYOF_NSPACEL ANYOF_NUPPER
+syn keyword xsMacro ANYOF_NVERTWS ANYOF_NXDIGIT ANYOF_PRINT ANYOF_PSXSPC
+syn keyword xsMacro ANYOF_PUNCT ANYOF_SIZE ANYOF_SKIP ANYOF_SPACE
+syn keyword xsMacro ANYOF_SPACEL ANYOF_UNICODE_ALL ANYOF_UPPER ANYOF_VERTWS
+syn keyword xsMacro ANYOF_XDIGIT ARCHLIB ARCHLIB_EXP ARCHNAME ARG ARG1
+syn keyword xsMacro ARG1_LOC ARG1_SET ARG2 ARG2L ARG2L_LOC ARG2L_SET ARG2_LOC
+syn keyword xsMacro ARG2_SET ARGTARG ARG_LOC ARG_SET ARG_VALUE ARG__SET ARROW
+syn keyword xsMacro ASCII_MORE_RESTRICT_PAT_MODS ASCII_RESTRICT_PAT_MOD
+syn keyword xsMacro ASCII_RESTRICT_PAT_MODS ASCII_TO_NATIVE ASCII_TO_NEED
+syn keyword xsMacro ASCTIME_R_PROTO ASSERT_CURPAD_ACTIVE ASSERT_CURPAD_LEGAL
+syn keyword xsMacro ASSIGNOP Atof Atol Atoul AvALLOC AvARRAY AvARYLEN AvFILL
+syn keyword xsMacro AvFILLp AvMAX AvREAL AvREALISH AvREAL_off AvREAL_on
+syn keyword xsMacro AvREAL_only AvREIFY AvREIFY_off AvREIFY_on AvREIFY_only
+syn keyword xsMacro BACK BADVERSION BASEOP BHKf_bhk_eval BHKf_bhk_post_end
+syn keyword xsMacro BHKf_bhk_pre_end BHKf_bhk_start BIN BIN_EXP BITANDOP
+syn keyword xsMacro BITMAP_BYTE BITMAP_TEST BITOROP BIT_BUCKET BIT_DIGITS BOL
+syn keyword xsMacro BOUND BOUNDA BOUNDL BOUNDU BRANCH BRANCHJ BRANCH_next
+syn keyword xsMacro BRANCH_next_fail BSD_GETPGRP BSD_SETPGRP BSDish BUFSIZ
+syn keyword xsMacro BYTEORDER BhkDISABLE BhkENABLE BhkENTRY BhkENTRY_set
+syn keyword xsMacro BhkFLAGS Bit BmFLAGS BmPREVIOUS BmRARE BmUSEFUL
+syn keyword xsMacro CALLREGCOMP CALLREGCOMP_ENG CALLREGDUPE CALLREGDUPE_PVT
+syn keyword xsMacro CALLREGEXEC CALLREGFREE CALLREGFREE_PVT
+syn keyword xsMacro CALLREG_INTUIT_START CALLREG_INTUIT_STRING
+syn keyword xsMacro CALLREG_NAMED_BUFF_ALL CALLREG_NAMED_BUFF_CLEAR
+syn keyword xsMacro CALLREG_NAMED_BUFF_COUNT CALLREG_NAMED_BUFF_DELETE
+syn keyword xsMacro CALLREG_NAMED_BUFF_EXISTS CALLREG_NAMED_BUFF_FETCH
+syn keyword xsMacro CALLREG_NAMED_BUFF_FIRSTKEY CALLREG_NAMED_BUFF_NEXTKEY
+syn keyword xsMacro CALLREG_NAMED_BUFF_SCALAR CALLREG_NAMED_BUFF_STORE
+syn keyword xsMacro CALLREG_NUMBUF_FETCH CALLREG_NUMBUF_LENGTH
+syn keyword xsMacro CALLREG_NUMBUF_STORE CALLREG_PACKAGE CALLRUNOPS
+syn keyword xsMacro CALL_BLOCK_HOOKS CALL_FPTR CANY CAN_COW_FLAGS
+syn keyword xsMacro CAN_COW_MASK CAN_PROTOTYPE CAN_VAPROTO
+syn keyword xsMacro CASE_STD_PMMOD_FLAGS_PARSE_SET CASTFLAGS CASTNEGFLOAT
+syn keyword xsMacro CAT2 CATCH_GET CATCH_SET CHARBITS CHARSET_PAT_MODS
+syn keyword xsMacro CHECK_MALLOC_TAINT CHECK_MALLOC_TOO_LATE_FOR
+syn keyword xsMacro CHECK_MALLOC_TOO_LATE_FOR_ CLEAR_ARGARRAY CLEAR_ERRSV
+syn keyword xsMacro CLONEf_CLONE_HOST CLONEf_COPY_STACKS CLONEf_JOIN_IN
+syn keyword xsMacro CLONEf_KEEP_PTR_TABLE CLOSE CLUMP CLUMP_2IV CLUMP_2UV
+syn keyword xsMacro COLONATTR COMMIT COMMIT_next COMMIT_next_fail
+syn keyword xsMacro COND_BROADCAST COND_DESTROY COND_INIT COND_SIGNAL
+syn keyword xsMacro COND_WAIT CONTINUE CONTINUE_PAT_MOD COPHH_KEY_UTF8
+syn keyword xsMacro COP_SEQ_RANGE_HIGH COP_SEQ_RANGE_LOW CPERLarg CPERLarg_
+syn keyword xsMacro CPERLscope CPPLAST CPPMINUS CPPRUN CPPSTDIN CRYPT_R_PROTO
+syn keyword xsMacro CSH CTERMID_R_PROTO CTIME_R_PROTO CTYPE256 CURLY CURLYM
+syn keyword xsMacro CURLYM_A CURLYM_A_fail CURLYM_B CURLYM_B_fail CURLYN
+syn keyword xsMacro CURLYX CURLYX_end CURLYX_end_fail CURLY_B_max
+syn keyword xsMacro CURLY_B_max_fail CURLY_B_min CURLY_B_min_fail
+syn keyword xsMacro CURLY_B_min_known CURLY_B_min_known_fail
+syn keyword xsMacro CURRENT_FEATURE_BUNDLE CURRENT_HINTS CUTGROUP
+syn keyword xsMacro CUTGROUP_next CUTGROUP_next_fail CVf_ANON CVf_AUTOLOAD
+syn keyword xsMacro CVf_BUILTIN_ATTRS CVf_CLONE CVf_CLONED CVf_CONST
+syn keyword xsMacro CVf_CVGV_RC CVf_DYNFILE CVf_ISXSUB CVf_LVALUE CVf_METHOD
+syn keyword xsMacro CVf_NODEBUG CVf_UNIQUE CVf_WEAKOUTSIDE CXINC CXTYPEMASK
+syn keyword xsMacro CX_CURPAD_SAVE CX_CURPAD_SV CXp_FOR_DEF CXp_HASARGS
+syn keyword xsMacro CXp_MULTICALL CXp_ONCE CXp_REAL CXp_TRYBLOCK C_ARRAY_END
+syn keyword xsMacro C_ARRAY_LENGTH C_FAC_POSIX CopFILE CopFILEAV CopFILEAVx
+syn keyword xsMacro CopFILEGV CopFILEGV_set CopFILESV CopFILE_free
+syn keyword xsMacro CopFILE_set CopFILE_setn CopHINTHASH_get CopHINTHASH_set
+syn keyword xsMacro CopHINTS_get CopHINTS_set CopLABEL CopLABEL_alloc
+syn keyword xsMacro CopLABEL_len CopLABEL_len_flags CopLINE CopLINE_dec
+syn keyword xsMacro CopLINE_inc CopLINE_set CopSTASH CopSTASHPV
+syn keyword xsMacro CopSTASHPV_set CopSTASH_eq CopSTASH_free CopSTASH_len
+syn keyword xsMacro CopSTASH_len_set CopSTASH_ne CopSTASH_set Copy CopyD Ctl
+syn keyword xsMacro CvANON CvANON_off CvANON_on CvAUTOLOAD CvAUTOLOAD_off
+syn keyword xsMacro CvAUTOLOAD_on CvCLONE CvCLONED CvCLONED_off CvCLONED_on
+syn keyword xsMacro CvCLONE_off CvCLONE_on CvCONST CvCONST_off CvCONST_on
+syn keyword xsMacro CvCVGV_RC CvCVGV_RC_off CvCVGV_RC_on CvDEPTH CvDYNFILE
+syn keyword xsMacro CvDYNFILE_off CvDYNFILE_on CvEVAL CvEVAL_off CvEVAL_on
+syn keyword xsMacro CvFILE CvFILEGV CvFILE_set_from_cop CvFLAGS CvGV CvGV_set
+syn keyword xsMacro CvISXSUB CvISXSUB_off CvISXSUB_on CvLVALUE CvLVALUE_off
+syn keyword xsMacro CvLVALUE_on CvMETHOD CvMETHOD_off CvMETHOD_on CvNODEBUG
+syn keyword xsMacro CvNODEBUG_off CvNODEBUG_on CvOUTSIDE CvOUTSIDE_SEQ
+syn keyword xsMacro CvPADLIST CvPROTO CvPROTOLEN CvROOT CvSPECIAL
+syn keyword xsMacro CvSPECIAL_off CvSPECIAL_on CvSTART CvSTASH CvSTASH_set
+syn keyword xsMacro CvUNIQUE CvUNIQUE_off CvUNIQUE_on CvWEAKOUTSIDE
+syn keyword xsMacro CvWEAKOUTSIDE_off CvWEAKOUTSIDE_on CvXSUB CvXSUBANY
+syn keyword xsMacro CxFOREACH CxFOREACHDEF CxHASARGS CxITERVAR
+syn keyword xsMacro CxITERVAR_PADSV CxLABEL CxLABEL_len CxLABEL_len_flags
+syn keyword xsMacro CxLVAL CxMULTICALL CxOLD_IN_EVAL CxOLD_OP_TYPE CxONCE
+syn keyword xsMacro CxPADLOOP CxREALEVAL CxTRYBLOCK CxTYPE CxTYPE_is_LOOP
+syn keyword xsMacro DBL_DIG DBL_MAX DBL_MIN DBM_ckFilter DBM_setFilter
+syn keyword xsMacro DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
+syn keyword xsMacro DB_VERSION_PATCH_CFG DEBUG_A DEBUG_A_FLAG DEBUG_A_TEST
+syn keyword xsMacro DEBUG_A_TEST_ DEBUG_B DEBUG_BUFFERS_r DEBUG_B_FLAG
+syn keyword xsMacro DEBUG_B_TEST DEBUG_B_TEST_ DEBUG_C DEBUG_COMPILE_r
+syn keyword xsMacro DEBUG_CX DEBUG_C_FLAG DEBUG_C_TEST DEBUG_C_TEST_ DEBUG_D
+syn keyword xsMacro DEBUG_DB_RECURSE_FLAG DEBUG_DUMP_r DEBUG_D_FLAG
+syn keyword xsMacro DEBUG_D_TEST DEBUG_D_TEST_ DEBUG_EXECUTE_r DEBUG_EXTRA_r
+syn keyword xsMacro DEBUG_FLAGS_r DEBUG_GPOS_r DEBUG_H DEBUG_H_FLAG
+syn keyword xsMacro DEBUG_H_TEST DEBUG_H_TEST_ DEBUG_INTUIT_r DEBUG_J_FLAG
+syn keyword xsMacro DEBUG_J_TEST DEBUG_J_TEST_ DEBUG_M DEBUG_MASK
+syn keyword xsMacro DEBUG_MATCH_r DEBUG_M_FLAG DEBUG_M_TEST DEBUG_M_TEST_
+syn keyword xsMacro DEBUG_OFFSETS_r DEBUG_OPTIMISE_MORE_r DEBUG_OPTIMISE_r
+syn keyword xsMacro DEBUG_P DEBUG_PARSE_r DEBUG_P_FLAG DEBUG_P_TEST
+syn keyword xsMacro DEBUG_P_TEST_ DEBUG_Pv DEBUG_Pv_TEST DEBUG_Pv_TEST_
+syn keyword xsMacro DEBUG_R DEBUG_R_FLAG DEBUG_R_TEST DEBUG_R_TEST_
+syn keyword xsMacro DEBUG_SCOPE DEBUG_STACK_r DEBUG_STATE_r DEBUG_T
+syn keyword xsMacro DEBUG_TOP_FLAG DEBUG_TRIE_COMPILE_MORE_r
+syn keyword xsMacro DEBUG_TRIE_COMPILE_r DEBUG_TRIE_EXECUTE_MORE_r
+syn keyword xsMacro DEBUG_TRIE_EXECUTE_r DEBUG_TRIE_r DEBUG_T_FLAG
+syn keyword xsMacro DEBUG_T_TEST DEBUG_T_TEST_ DEBUG_U DEBUG_U_FLAG
+syn keyword xsMacro DEBUG_U_TEST DEBUG_U_TEST_ DEBUG_Uv DEBUG_Uv_TEST
+syn keyword xsMacro DEBUG_Uv_TEST_ DEBUG_X DEBUG_X_FLAG DEBUG_X_TEST
+syn keyword xsMacro DEBUG_X_TEST_ DEBUG_Xv DEBUG_Xv_TEST DEBUG_Xv_TEST_
+syn keyword xsMacro DEBUG__ DEBUG_c DEBUG_c_FLAG DEBUG_c_TEST DEBUG_c_TEST_
+syn keyword xsMacro DEBUG_f DEBUG_f_FLAG DEBUG_f_TEST DEBUG_f_TEST_ DEBUG_l
+syn keyword xsMacro DEBUG_l_FLAG DEBUG_l_TEST DEBUG_l_TEST_ DEBUG_m
+syn keyword xsMacro DEBUG_m_FLAG DEBUG_m_TEST DEBUG_m_TEST_ DEBUG_o
+syn keyword xsMacro DEBUG_o_FLAG DEBUG_o_TEST DEBUG_o_TEST_ DEBUG_p
+syn keyword xsMacro DEBUG_p_FLAG DEBUG_p_TEST DEBUG_p_TEST_ DEBUG_q
+syn keyword xsMacro DEBUG_q_FLAG DEBUG_q_TEST DEBUG_q_TEST_ DEBUG_r
+syn keyword xsMacro DEBUG_r_FLAG DEBUG_r_TEST DEBUG_r_TEST_ DEBUG_s
+syn keyword xsMacro DEBUG_s_FLAG DEBUG_s_TEST DEBUG_s_TEST_ DEBUG_t_FLAG
+syn keyword xsMacro DEBUG_t_TEST DEBUG_t_TEST_ DEBUG_u DEBUG_u_FLAG
+syn keyword xsMacro DEBUG_u_TEST DEBUG_u_TEST_ DEBUG_v DEBUG_v_FLAG
+syn keyword xsMacro DEBUG_v_TEST DEBUG_v_TEST_ DEBUG_x DEBUG_x_FLAG
+syn keyword xsMacro DEBUG_x_TEST DEBUG_x_TEST_ DEFAULT DEFAULT_PAT_MOD
+syn keyword xsMacro DEFINEP DEFSV DEFSV_set DEPENDS_PAT_MOD DEPENDS_PAT_MODS
+syn keyword xsMacro DETACH DIE DIGIT DIGITA DIGITL DIR DM_ARRAY_ISA DM_DELAY
+syn keyword xsMacro DM_EGID DM_EUID DM_GID DM_RGID DM_RUID DM_UID DO DOINIT
+syn keyword xsMacro DOLSHARP DONT_DECLARE_STD DORDOR DOROP DOSISH DOTDOT
+syn keyword xsMacro DOUBLESIZE DO_UTF8 DPTR2FPTR DRAND48_R_PROTO DUP_WARNINGS
+syn keyword xsMacro Drand01 ELSE ELSIF EMBEDMYMALLOC END ENDGRENT_R_PROTO
+syn keyword xsMacro ENDHOSTENT_R_PROTO ENDLIKE ENDNETENT_R_PROTO
+syn keyword xsMacro ENDPROTOENT_R_PROTO ENDPWENT_R_PROTO ENDSERVENT_R_PROTO
+syn keyword xsMacro END_EXTERN_C ENTER ENTER_with_name ENTRY_PROBE ENUM_BOOL
+syn keyword xsMacro EOF EOL EOS EQOP ERRHV ERRSV EVAL EVAL_AB EVAL_AB_fail
+syn keyword xsMacro EVAL_INEVAL EVAL_INREQUIRE EVAL_KEEPERR EVAL_NULL
+syn keyword xsMacro EVAL_WARNONLY EXACT EXACTF EXACTFA EXACTFL EXACTFU
+syn keyword xsMacro EXACTFU_SS EXACTFU_TRICKYFOLD EXEC_ARGV_CAST EXEC_PAT_MOD
+syn keyword xsMacro EXEC_PAT_MODS EXPECT EXT EXTCONST EXTEND EXTEND_MORTAL
+syn keyword xsMacro EXTERN_C EXTPERLIO EXTRA_SIZE EXTRA_STEP_2ARGS EXT_MGVTBL
+syn keyword xsMacro EXT_PAT_MODS FAKE_BIT_BUCKET FAKE_DEFAULT_SIGNAL_HANDLERS
+syn keyword xsMacro FAKE_PERSISTENT_SIGNAL_HANDLERS FBMcf_TAIL
+syn keyword xsMacro FBMcf_TAIL_DOLLAR FBMcf_TAIL_DOLLARM FBMcf_TAIL_Z
+syn keyword xsMacro FBMcf_TAIL_z FBMrf_MULTILINE FCNTL_CAN_LOCK FD_CLR
+syn keyword xsMacro FD_ISSET FD_SET FD_ZERO FEATURE_ARYBASE_IS_ENABLED
+syn keyword xsMacro FEATURE_BUNDLE_510 FEATURE_BUNDLE_511 FEATURE_BUNDLE_515
+syn keyword xsMacro FEATURE_BUNDLE_CUSTOM FEATURE_BUNDLE_DEFAULT
+syn keyword xsMacro FEATURE_EVALBYTES_IS_ENABLED FEATURE_FC_IS_ENABLED
+syn keyword xsMacro FEATURE_IS_ENABLED FEATURE_SAY_IS_ENABLED
+syn keyword xsMacro FEATURE_STATE_IS_ENABLED FEATURE_SWITCH_IS_ENABLED
+syn keyword xsMacro FEATURE_UNICODE_IS_ENABLED FEATURE_UNIEVAL_IS_ENABLED
+syn keyword xsMacro FEATURE___SUB___IS_ENABLED FFLUSH_NULL FF_0DECIMAL
+syn keyword xsMacro FF_BLANK FF_CHECKCHOP FF_CHECKNL FF_CHOP FF_DECIMAL
+syn keyword xsMacro FF_END FF_FETCH FF_HALFSPACE FF_ITEM FF_LINEGLOB
+syn keyword xsMacro FF_LINEMARK FF_LINESNGL FF_LITERAL FF_MORE FF_NEWLINE
+syn keyword xsMacro FF_SKIP FF_SPACE FILE FILE_base FILE_bufsiz FILE_cnt
+syn keyword xsMacro FILE_ptr FILL_ADVANCE_NODE FILL_ADVANCE_NODE_ARG
+syn keyword xsMacro FILTER_DATA FILTER_ISREADER FILTER_READ FITS_IN_8_BITS
+syn keyword xsMacro FLAGS FLEXFILENAMES FOLDEQ_S1_ALREADY_FOLDED
+syn keyword xsMacro FOLDEQ_S2_ALREADY_FOLDED FOLDEQ_UTF8_LOCALE
+syn keyword xsMacro FOLDEQ_UTF8_NOMIX_ASCII FOLD_FLAGS_FULL FOLD_FLAGS_LOCALE
+syn keyword xsMacro FOR FORMAT FPTR2DPTR FREETMPS FREE_THREAD_KEY FSEEKSIZE
+syn keyword xsMacro FUNC FUNC0 FUNC0OP FUNC0SUB FUNC1 FUNCMETH FUNCTION__
+syn keyword xsMacro F_atan2_amg F_cos_amg F_exp_amg F_log_amg F_pow_amg
+syn keyword xsMacro F_sin_amg F_sqrt_amg Fflush FmLINES FreeOp Fstat
+syn keyword xsMacro GDBMNDBM_H_USES_PROTOTYPES GETATARGET GETGRENT_R_PROTO
+syn keyword xsMacro GETGRGID_R_PROTO GETGRNAM_R_PROTO GETHOSTBYADDR_R_PROTO
+syn keyword xsMacro GETHOSTBYNAME_R_PROTO GETHOSTENT_R_PROTO GETLOGIN_R_PROTO
+syn keyword xsMacro GETNETBYADDR_R_PROTO GETNETBYNAME_R_PROTO
+syn keyword xsMacro GETNETENT_R_PROTO GETPROTOBYNAME_R_PROTO
+syn keyword xsMacro GETPROTOBYNUMBER_R_PROTO GETPROTOENT_R_PROTO
+syn keyword xsMacro GETPWENT_R_PROTO GETPWNAM_R_PROTO GETPWUID_R_PROTO
+syn keyword xsMacro GETSERVBYNAME_R_PROTO GETSERVBYPORT_R_PROTO
+syn keyword xsMacro GETSERVENT_R_PROTO GETSPNAM_R_PROTO GETTARGET
+syn keyword xsMacro GETTARGETSTACKED GET_RE_DEBUG_FLAGS
+syn keyword xsMacro GET_RE_DEBUG_FLAGS_DECL GIMME GIMME_V GIVEN
+syn keyword xsMacro GLOBAL_PAT_MOD GMTIME_MAX GMTIME_MIN GMTIME_R
+syn keyword xsMacro GMTIME_R_PROTO GOSTART GOSUB GPOS GRAMBARESTMT GRAMBLOCK
+syn keyword xsMacro GRAMEXPR GRAMFULLSTMT GRAMPROG GRAMSTMTSEQ
+syn keyword xsMacro GREEK_CAPITAL_LETTER_MU GREEK_SMALL_LETTER_MU
+syn keyword xsMacro GROK_NUMERIC_RADIX GROUPP GRPASSWD GV_ADD GV_ADDINEVAL
+syn keyword xsMacro GV_ADDMG GV_ADDMULTI GV_ADDWARN GV_AUTOLOAD
+syn keyword xsMacro GV_AUTOLOAD_ISMETHOD GV_CROAK GV_NOADD_MASK
+syn keyword xsMacro GV_NOADD_NOINIT GV_NOEXPAND GV_NOINIT GV_NOTQUAL
+syn keyword xsMacro GV_NO_SVGMAGIC GVf_ASSUMECV GVf_IMPORTED GVf_IMPORTED_AV
+syn keyword xsMacro GVf_IMPORTED_CV GVf_IMPORTED_HV GVf_IMPORTED_SV GVf_INTRO
+syn keyword xsMacro GVf_IN_PAD GVf_MULTI Gconvert Gid_t_f Gid_t_sign
+syn keyword xsMacro Gid_t_size GvASSIGN_GENERATION GvASSIGN_GENERATION_set
+syn keyword xsMacro GvASSUMECV GvASSUMECV_off GvASSUMECV_on GvAV GvAVn GvCV
+syn keyword xsMacro GvCVGEN GvCV_set GvCVu GvEGV GvEGVx GvENAME GvENAMELEN
+syn keyword xsMacro GvENAMEUTF8 GvENAME_HEK GvESTASH GvFILE GvFILEGV
+syn keyword xsMacro GvFILE_HEK GvFLAGS GvFORM GvGP GvGP_set GvHV GvHVn
+syn keyword xsMacro GvIMPORTED GvIMPORTED_AV GvIMPORTED_AV_off
+syn keyword xsMacro GvIMPORTED_AV_on GvIMPORTED_CV GvIMPORTED_CV_off
+syn keyword xsMacro GvIMPORTED_CV_on GvIMPORTED_HV GvIMPORTED_HV_off
+syn keyword xsMacro GvIMPORTED_HV_on GvIMPORTED_SV GvIMPORTED_SV_off
+syn keyword xsMacro GvIMPORTED_SV_on GvIMPORTED_off GvIMPORTED_on GvINTRO
+syn keyword xsMacro GvINTRO_off GvINTRO_on GvIN_PAD GvIN_PAD_off GvIN_PAD_on
+syn keyword xsMacro GvIO GvIOn GvIOp GvLINE GvMULTI GvMULTI_off GvMULTI_on
+syn keyword xsMacro GvNAME GvNAMELEN GvNAMELEN_get GvNAMEUTF8 GvNAME_HEK
+syn keyword xsMacro GvNAME_get GvREFCNT GvSTASH GvSV GvSVn GvXPVGV Gv_AMG
+syn keyword xsMacro HASATTRIBUTE_DEPRECATED HASATTRIBUTE_FORMAT
+syn keyword xsMacro HASATTRIBUTE_MALLOC HASATTRIBUTE_NONNULL
+syn keyword xsMacro HASATTRIBUTE_NORETURN HASATTRIBUTE_PURE
+syn keyword xsMacro HASATTRIBUTE_UNUSED HASATTRIBUTE_WARN_UNUSED_RESULT
+syn keyword xsMacro HASCONST HASHBRACK HASVOLATILE HAS_64K_LIMIT HAS_ACCESS
+syn keyword xsMacro HAS_ALARM HAS_ATOLL HAS_BCMP HAS_BCOPY HAS_BOOL
+syn keyword xsMacro HAS_BUILTIN_CHOOSE_EXPR HAS_BUILTIN_EXPECT HAS_BZERO
+syn keyword xsMacro HAS_C99_VARIADIC_MACROS HAS_CHOWN HAS_CHROOT HAS_CLEARENV
+syn keyword xsMacro HAS_COPYSIGNL HAS_CRYPT HAS_CTERMID HAS_CUSERID
+syn keyword xsMacro HAS_DBL_DIG HAS_DBMINIT_PROTO HAS_DIFFTIME HAS_DIRFD
+syn keyword xsMacro HAS_DLERROR HAS_DRAND48_PROTO HAS_DUP2 HAS_EACCESS
+syn keyword xsMacro HAS_ENDGRENT HAS_ENDHOSTENT HAS_ENDNETENT HAS_ENDPROTOENT
+syn keyword xsMacro HAS_ENDPWENT HAS_ENDSERVENT HAS_FAST_STDIO HAS_FCHDIR
+syn keyword xsMacro HAS_FCHMOD HAS_FCHOWN HAS_FCNTL HAS_FD_SET HAS_FGETPOS
+syn keyword xsMacro HAS_FINITE HAS_FINITEL HAS_FLOCK HAS_FLOCK_PROTO HAS_FORK
+syn keyword xsMacro HAS_FPATHCONF HAS_FREXPL HAS_FSEEKO HAS_FSETPOS
+syn keyword xsMacro HAS_FSTATFS HAS_FSTATVFS HAS_FSYNC HAS_FTELLO HAS_FUTIMES
+syn keyword xsMacro HAS_GETADDRINFO HAS_GETCWD HAS_GETGRENT HAS_GETGROUPS
+syn keyword xsMacro HAS_GETHOSTBYADDR HAS_GETHOSTBYNAME HAS_GETHOSTENT
+syn keyword xsMacro HAS_GETHOSTNAME HAS_GETHOST_PROTOS HAS_GETITIMER
+syn keyword xsMacro HAS_GETLOGIN HAS_GETMNTENT HAS_GETNAMEINFO
+syn keyword xsMacro HAS_GETNETBYADDR HAS_GETNETBYNAME HAS_GETNETENT
+syn keyword xsMacro HAS_GETNET_PROTOS HAS_GETPAGESIZE HAS_GETPGID HAS_GETPGRP
+syn keyword xsMacro HAS_GETPPID HAS_GETPRIORITY HAS_GETPROTOBYNAME
+syn keyword xsMacro HAS_GETPROTOBYNUMBER HAS_GETPROTOENT HAS_GETPROTO_PROTOS
+syn keyword xsMacro HAS_GETPWENT HAS_GETSERVBYNAME HAS_GETSERVBYPORT
+syn keyword xsMacro HAS_GETSERVENT HAS_GETSERV_PROTOS HAS_GETSPNAM
+syn keyword xsMacro HAS_GETTIMEOFDAY HAS_GNULIBC HAS_GROUP HAS_HASMNTOPT
+syn keyword xsMacro HAS_HTOVL HAS_HTOVS HAS_ILOGBL HAS_INETNTOP HAS_INETPTON
+syn keyword xsMacro HAS_INET_ATON HAS_INT64_T HAS_IOCTL HAS_IPV6_MREQ
+syn keyword xsMacro HAS_ISASCII HAS_ISBLANK HAS_ISINF HAS_ISNAN HAS_ISNANL
+syn keyword xsMacro HAS_KILL HAS_KILLPG HAS_LCHOWN HAS_LDBL_DIG HAS_LINK
+syn keyword xsMacro HAS_LOCALECONV HAS_LOCKF HAS_LONG_DOUBLE HAS_LONG_LONG
+syn keyword xsMacro HAS_LSEEK_PROTO HAS_LSTAT HAS_MADVISE HAS_MBLEN
+syn keyword xsMacro HAS_MBSTOWCS HAS_MBTOWC HAS_MEMCHR HAS_MEMCMP HAS_MEMCPY
+syn keyword xsMacro HAS_MEMMOVE HAS_MEMSET HAS_MKDIR HAS_MKDTEMP HAS_MKFIFO
+syn keyword xsMacro HAS_MKSTEMP HAS_MKSTEMPS HAS_MKTIME HAS_MMAP HAS_MODFL
+syn keyword xsMacro HAS_MODFL_PROTO HAS_MPROTECT HAS_MSG HAS_MSG_CTRUNC
+syn keyword xsMacro HAS_MSG_DONTROUTE HAS_MSG_OOB HAS_MSG_PEEK HAS_MSG_PROXY
+syn keyword xsMacro HAS_MSYNC HAS_MUNMAP HAS_NICE HAS_NL_LANGINFO HAS_OPEN3
+syn keyword xsMacro HAS_PASSWD HAS_PATHCONF HAS_PAUSE HAS_PIPE HAS_POLL
+syn keyword xsMacro HAS_PRCTL HAS_PRCTL_SET_NAME HAS_PROCSELFEXE
+syn keyword xsMacro HAS_PTHREAD_ATTR_SETSCOPE
+syn keyword xsMacro HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP HAS_READDIR
+syn keyword xsMacro HAS_READLINK HAS_READV HAS_RECVMSG HAS_RENAME
+syn keyword xsMacro HAS_REWINDDIR HAS_RMDIR HAS_SANE_MEMCMP HAS_SBRK_PROTO
+syn keyword xsMacro HAS_SCALBNL HAS_SCHED_YIELD HAS_SCM_RIGHTS HAS_SEEKDIR
+syn keyword xsMacro HAS_SELECT HAS_SEM HAS_SENDMSG HAS_SETEGID HAS_SETEUID
+syn keyword xsMacro HAS_SETGRENT HAS_SETGROUPS HAS_SETHOSTENT HAS_SETITIMER
+syn keyword xsMacro HAS_SETLINEBUF HAS_SETLOCALE HAS_SETNETENT HAS_SETPGID
+syn keyword xsMacro HAS_SETPGRP HAS_SETPRIORITY HAS_SETPROTOENT HAS_SETPWENT
+syn keyword xsMacro HAS_SETREGID HAS_SETRESGID HAS_SETRESUID HAS_SETREUID
+syn keyword xsMacro HAS_SETSERVENT HAS_SETSID HAS_SETVBUF HAS_SHM
+syn keyword xsMacro HAS_SHMAT_PROTOTYPE HAS_SIGACTION HAS_SIGNBIT
+syn keyword xsMacro HAS_SIGPROCMASK HAS_SIGSETJMP HAS_SIN6_SCOPE_ID
+syn keyword xsMacro HAS_SNPRINTF HAS_SOCKADDR_IN6 HAS_SOCKATMARK
+syn keyword xsMacro HAS_SOCKATMARK_PROTO HAS_SOCKET HAS_SQRTL
+syn keyword xsMacro HAS_STATIC_INLINE HAS_STRCHR HAS_STRCOLL HAS_STRFTIME
+syn keyword xsMacro HAS_STRTOD HAS_STRTOL HAS_STRTOLD HAS_STRTOLL HAS_STRTOQ
+syn keyword xsMacro HAS_STRTOUL HAS_STRTOULL HAS_STRTOUQ HAS_STRUCT_CMSGHDR
+syn keyword xsMacro HAS_STRUCT_MSGHDR HAS_STRUCT_STATFS
+syn keyword xsMacro HAS_STRUCT_STATFS_F_FLAGS HAS_STRXFRM HAS_SYMLINK
+syn keyword xsMacro HAS_SYSCALL HAS_SYSCALL_PROTO HAS_SYSCONF HAS_SYSTEM
+syn keyword xsMacro HAS_SYS_ERRLIST HAS_TCGETPGRP HAS_TCSETPGRP HAS_TELLDIR
+syn keyword xsMacro HAS_TELLDIR_PROTO HAS_TIME HAS_TIMEGM HAS_TIMES
+syn keyword xsMacro HAS_TM_TM_GMTOFF HAS_TM_TM_ZONE HAS_TRUNCATE HAS_TZNAME
+syn keyword xsMacro HAS_UALARM HAS_UMASK HAS_UNAME HAS_UNSETENV HAS_USLEEP
+syn keyword xsMacro HAS_USLEEP_PROTO HAS_USTAT HAS_UTIME HAS_VPRINTF
+syn keyword xsMacro HAS_VSNPRINTF HAS_VTOHL HAS_VTOHS HAS_WAIT HAS_WAIT4
+syn keyword xsMacro HAS_WAITPID HAS_WCSTOMBS HAS_WCTOMB HAS_WRITEV
+syn keyword xsMacro HAVE_THREAD_INTERN HEK_BASESIZE HEK_FLAGS HEK_HASH
+syn keyword xsMacro HEK_KEY HEK_LEN HEK_REHASH HEK_REHASH_on HEK_UTF8
+syn keyword xsMacro HEK_UTF8_off HEK_UTF8_on HEK_WASUTF8 HEK_WASUTF8_off
+syn keyword xsMacro HEK_WASUTF8_on HEKf HEKf256 HEKfARG HE_SVSLOT HEf_SVKEY
+syn keyword xsMacro HINTS_REFCNT_INIT HINTS_REFCNT_LOCK HINTS_REFCNT_TERM
+syn keyword xsMacro HINTS_REFCNT_UNLOCK HINT_BLOCK_SCOPE HINT_BYTES
+syn keyword xsMacro HINT_EXPLICIT_STRICT_REFS HINT_EXPLICIT_STRICT_SUBS
+syn keyword xsMacro HINT_EXPLICIT_STRICT_VARS HINT_FEATURE_MASK
+syn keyword xsMacro HINT_FEATURE_SHIFT HINT_FILETEST_ACCESS HINT_INTEGER
+syn keyword xsMacro HINT_LEXICAL_IO_IN HINT_LEXICAL_IO_OUT HINT_LOCALE
+syn keyword xsMacro HINT_LOCALE_NOT_CHARS HINT_LOCALIZE_HH HINT_NEW_BINARY
+syn keyword xsMacro HINT_NEW_FLOAT HINT_NEW_INTEGER HINT_NEW_RE
+syn keyword xsMacro HINT_NEW_STRING HINT_NO_AMAGIC HINT_RE_EVAL HINT_RE_FLAGS
+syn keyword xsMacro HINT_RE_TAINT HINT_SORT_MERGESORT HINT_SORT_QUICKSORT
+syn keyword xsMacro HINT_SORT_SORT_BITS HINT_SORT_STABLE HINT_STRICT_REFS
+syn keyword xsMacro HINT_STRICT_SUBS HINT_STRICT_VARS HINT_UNI_8_BIT
+syn keyword xsMacro HINT_UTF8 HORIZWS HV_DELETE HV_DISABLE_UVAR_XKEY
+syn keyword xsMacro HV_FETCH_EMPTY_HE HV_FETCH_ISEXISTS HV_FETCH_ISSTORE
+syn keyword xsMacro HV_FETCH_JUST_SV HV_FETCH_LVALUE
+syn keyword xsMacro HV_ITERNEXT_WANTPLACEHOLDERS HV_NAME_SETALL
+syn keyword xsMacro HVhek_ENABLEHVKFLAGS HVhek_FREEKEY HVhek_KEYCANONICAL
+syn keyword xsMacro HVhek_MASK HVhek_PLACEHOLD HVhek_REHASH HVhek_UNSHARED
+syn keyword xsMacro HVhek_UTF8 HVhek_WASUTF8 HVrhek_IV HVrhek_PV
+syn keyword xsMacro HVrhek_PV_UTF8 HVrhek_UV HVrhek_delete HVrhek_typemask
+syn keyword xsMacro HVrhek_undef H_PERL HeHASH HeKEY HeKEY_hek HeKEY_sv
+syn keyword xsMacro HeKFLAGS HeKLEN HeKLEN_UTF8 HeKREHASH HeKUTF8 HeKWASUTF8
+syn keyword xsMacro HeNEXT HePV HeSVKEY HeSVKEY_force HeSVKEY_set HeUTF8
+syn keyword xsMacro HeVAL HvARRAY HvAUX HvEITER HvEITER_get HvEITER_set
+syn keyword xsMacro HvENAME HvENAMELEN HvENAMELEN_get HvENAMEUTF8 HvENAME_HEK
+syn keyword xsMacro HvENAME_HEK_NN HvENAME_get HvFILL HvHASKFLAGS
+syn keyword xsMacro HvHASKFLAGS_off HvHASKFLAGS_on HvKEYS HvLAZYDEL
+syn keyword xsMacro HvLAZYDEL_off HvLAZYDEL_on HvMAX HvMROMETA HvNAME
+syn keyword xsMacro HvNAMELEN HvNAMELEN_get HvNAMEUTF8 HvNAME_HEK
+syn keyword xsMacro HvNAME_HEK_NN HvNAME_get HvPLACEHOLDERS
+syn keyword xsMacro HvPLACEHOLDERS_get HvPLACEHOLDERS_set HvREHASH
+syn keyword xsMacro HvREHASH_off HvREHASH_on HvRITER HvRITER_get HvRITER_set
+syn keyword xsMacro HvSHAREKEYS HvSHAREKEYS_off HvSHAREKEYS_on HvTOTALKEYS
+syn keyword xsMacro HvUSEDKEYS I16SIZE I16TYPE I16_MAX I16_MIN I286 I32SIZE
+syn keyword xsMacro I32TYPE I32_MAX I32_MAX_P1 I32_MIN I64SIZE I64TYPE I8SIZE
+syn keyword xsMacro I8TYPE I8_TO_NATIVE IF IFMATCH IFMATCH_A IFMATCH_A_fail
+syn keyword xsMacro IFTHEN IGNORE_PAT_MOD INIT INIT_THREADS
+syn keyword xsMacro INIT_TRACK_MEMPOOL INSUBP INT2PTR INT32_MIN INT64_C
+syn keyword xsMacro INT64_MIN INTSIZE INT_64_T INT_PAT_MODS
+syn keyword xsMacro INVERSION_UNAFFECTED_FLAGS IN_BYTES IN_LOCALE
+syn keyword xsMacro IN_LOCALE_COMPILETIME IN_LOCALE_RUNTIME
+syn keyword xsMacro IN_PERL_COMPILETIME IN_PERL_RUNTIME IN_SOME_LOCALE_FORM
+syn keyword xsMacro IN_SOME_LOCALE_FORM_COMPILETIME
+syn keyword xsMacro IN_SOME_LOCALE_FORM_RUNTIME IN_UNI_8_BIT IOCPARM_LEN
+syn keyword xsMacro IOf_ARGV IOf_DIDTOP IOf_FAKE_DIRP IOf_FLUSH IOf_NOLINE
+syn keyword xsMacro IOf_START IOf_UNTAINT ISHISH IS_ANYOF_TRIE
+syn keyword xsMacro IS_NUMBER_GREATER_THAN_UV_MAX IS_NUMBER_INFINITY
+syn keyword xsMacro IS_NUMBER_IN_UV IS_NUMBER_NAN IS_NUMBER_NEG
+syn keyword xsMacro IS_NUMBER_NOT_INT IS_NUMERIC_RADIX IS_PADCONST IS_PADGV
+syn keyword xsMacro IS_TRIE_AC IS_UTF8_CHAR IS_UTF8_CHAR_1 IS_UTF8_CHAR_2
+syn keyword xsMacro IS_UTF8_CHAR_3 IS_UTF8_CHAR_3a IS_UTF8_CHAR_3b
+syn keyword xsMacro IS_UTF8_CHAR_3c IS_UTF8_CHAR_3d IS_UTF8_CHAR_4
+syn keyword xsMacro IS_UTF8_CHAR_4a IS_UTF8_CHAR_4b IS_UTF8_CHAR_4c
+syn keyword xsMacro IS_UTF8_CHAR_5 IS_UTF8_CHAR_5a IS_UTF8_CHAR_5b
+syn keyword xsMacro IS_UTF8_CHAR_FAST IVSIZE IVTYPE IV_DIG IV_MAX IV_MAX_P1
+syn keyword xsMacro IV_MIN I_32 I_ARPA_INET I_ASSERT I_CRYPT I_DBM I_DIRENT
+syn keyword xsMacro I_DLFCN I_FLOAT I_GDBM I_GDBMNDBM I_GRP I_INTTYPES
+syn keyword xsMacro I_LANGINFO I_LIMITS I_LOCALE I_MATH I_MNTENT I_NETDB
+syn keyword xsMacro I_NETINET_IN I_NETINET_TCP I_POLL I_PTHREAD I_PWD
+syn keyword xsMacro I_SHADOW I_STDARG I_STDBOOL I_STDDEF I_STDLIB I_STRING
+syn keyword xsMacro I_SYSLOG I_SYSUIO I_SYSUTSNAME I_SYS_DIR I_SYS_FILE
+syn keyword xsMacro I_SYS_IOCTL I_SYS_MOUNT I_SYS_PARAM I_SYS_POLL
+syn keyword xsMacro I_SYS_RESOURCE I_SYS_SELECT I_SYS_STAT I_SYS_STATFS
+syn keyword xsMacro I_SYS_STATVFS I_SYS_TIME I_SYS_TIMES I_SYS_TYPES I_SYS_UN
+syn keyword xsMacro I_SYS_VFS I_SYS_WAIT I_TERMIOS I_TIME I_UNISTD I_USTAT
+syn keyword xsMacro I_UTIME I_V I_VALUES IoANY IoBOTTOM_GV IoBOTTOM_NAME
+syn keyword xsMacro IoDIRP IoFLAGS IoFMT_GV IoFMT_NAME IoIFP IoLINES
+syn keyword xsMacro IoLINES_LEFT IoOFP IoPAGE IoPAGE_LEN IoTOP_GV IoTOP_NAME
+syn keyword xsMacro IoTYPE IoTYPE_APPEND IoTYPE_CLOSED IoTYPE_IMPLICIT
+syn keyword xsMacro IoTYPE_NUMERIC IoTYPE_PIPE IoTYPE_RDONLY IoTYPE_RDWR
+syn keyword xsMacro IoTYPE_SOCKET IoTYPE_STD IoTYPE_WRONLY IsSet
+syn keyword xsMacro JMPENV_BOOTSTRAP JMPENV_JUMP JMPENV_POP JMPENV_PUSH JOIN
+syn keyword xsMacro KEEPCOPY_PAT_MOD KEEPCOPY_PAT_MODS KEEPS KEEPS_next
+syn keyword xsMacro KEEPS_next_fail KEYWORD_PLUGIN_DECLINE
+syn keyword xsMacro KEYWORD_PLUGIN_EXPR KEYWORD_PLUGIN_STMT KEY_AUTOLOAD
+syn keyword xsMacro KEY_BEGIN KEY_CHECK KEY_CORE KEY_DESTROY KEY_END KEY_INIT
+syn keyword xsMacro KEY_NULL KEY_UNITCHECK KEY___DATA__ KEY___END__
+syn keyword xsMacro KEY___FILE__ KEY___LINE__ KEY___PACKAGE__ KEY___SUB__
+syn keyword xsMacro KEY_abs KEY_accept KEY_alarm KEY_and KEY_atan2 KEY_bind
+syn keyword xsMacro KEY_binmode KEY_bless KEY_break KEY_caller KEY_chdir
+syn keyword xsMacro KEY_chmod KEY_chomp KEY_chop KEY_chown KEY_chr KEY_chroot
+syn keyword xsMacro KEY_close KEY_closedir KEY_cmp KEY_connect KEY_continue
+syn keyword xsMacro KEY_cos KEY_crypt KEY_dbmclose KEY_dbmopen KEY_default
+syn keyword xsMacro KEY_defined KEY_delete KEY_die KEY_do KEY_dump KEY_each
+syn keyword xsMacro KEY_else KEY_elsif KEY_endgrent KEY_endhostent
+syn keyword xsMacro KEY_endnetent KEY_endprotoent KEY_endpwent KEY_endservent
+syn keyword xsMacro KEY_eof KEY_eq KEY_eval KEY_evalbytes KEY_exec KEY_exists
+syn keyword xsMacro KEY_exit KEY_exp KEY_fc KEY_fcntl KEY_fileno KEY_flock
+syn keyword xsMacro KEY_for KEY_foreach KEY_fork KEY_format KEY_formline
+syn keyword xsMacro KEY_ge KEY_getc KEY_getgrent KEY_getgrgid KEY_getgrnam
+syn keyword xsMacro KEY_gethostbyaddr KEY_gethostbyname KEY_gethostent
+syn keyword xsMacro KEY_getlogin KEY_getnetbyaddr KEY_getnetbyname
+syn keyword xsMacro KEY_getnetent KEY_getpeername KEY_getpgrp KEY_getppid
+syn keyword xsMacro KEY_getpriority KEY_getprotobyname KEY_getprotobynumber
+syn keyword xsMacro KEY_getprotoent KEY_getpwent KEY_getpwnam KEY_getpwuid
+syn keyword xsMacro KEY_getservbyname KEY_getservbyport KEY_getservent
+syn keyword xsMacro KEY_getsockname KEY_getsockopt KEY_given KEY_glob
+syn keyword xsMacro KEY_gmtime KEY_goto KEY_grep KEY_gt KEY_hex KEY_if
+syn keyword xsMacro KEY_index KEY_int KEY_ioctl KEY_join KEY_keys KEY_kill
+syn keyword xsMacro KEY_last KEY_lc KEY_lcfirst KEY_le KEY_length KEY_link
+syn keyword xsMacro KEY_listen KEY_local KEY_localtime KEY_lock KEY_log
+syn keyword xsMacro KEY_lstat KEY_lt KEY_m KEY_map KEY_mkdir KEY_msgctl
+syn keyword xsMacro KEY_msgget KEY_msgrcv KEY_msgsnd KEY_my KEY_ne KEY_next
+syn keyword xsMacro KEY_no KEY_not KEY_oct KEY_open KEY_opendir KEY_or
+syn keyword xsMacro KEY_ord KEY_our KEY_pack KEY_package KEY_pipe KEY_pop
+syn keyword xsMacro KEY_pos KEY_print KEY_printf KEY_prototype KEY_push KEY_q
+syn keyword xsMacro KEY_qq KEY_qr KEY_quotemeta KEY_qw KEY_qx KEY_rand
+syn keyword xsMacro KEY_read KEY_readdir KEY_readline KEY_readlink
+syn keyword xsMacro KEY_readpipe KEY_recv KEY_redo KEY_ref KEY_rename
+syn keyword xsMacro KEY_require KEY_reset KEY_return KEY_reverse
+syn keyword xsMacro KEY_rewinddir KEY_rindex KEY_rmdir KEY_s KEY_say
+syn keyword xsMacro KEY_scalar KEY_seek KEY_seekdir KEY_select KEY_semctl
+syn keyword xsMacro KEY_semget KEY_semop KEY_send KEY_setgrent KEY_sethostent
+syn keyword xsMacro KEY_setnetent KEY_setpgrp KEY_setpriority KEY_setprotoent
+syn keyword xsMacro KEY_setpwent KEY_setservent KEY_setsockopt KEY_shift
+syn keyword xsMacro KEY_shmctl KEY_shmget KEY_shmread KEY_shmwrite
+syn keyword xsMacro KEY_shutdown KEY_sin KEY_sleep KEY_socket KEY_socketpair
+syn keyword xsMacro KEY_sort KEY_splice KEY_split KEY_sprintf KEY_sqrt
+syn keyword xsMacro KEY_srand KEY_stat KEY_state KEY_study KEY_sub KEY_substr
+syn keyword xsMacro KEY_symlink KEY_syscall KEY_sysopen KEY_sysread
+syn keyword xsMacro KEY_sysseek KEY_system KEY_syswrite KEY_tell KEY_telldir
+syn keyword xsMacro KEY_tie KEY_tied KEY_time KEY_times KEY_tr KEY_truncate
+syn keyword xsMacro KEY_uc KEY_ucfirst KEY_umask KEY_undef KEY_unless
+syn keyword xsMacro KEY_unlink KEY_unpack KEY_unshift KEY_untie KEY_until
+syn keyword xsMacro KEY_use KEY_utime KEY_values KEY_vec KEY_wait KEY_waitpid
+syn keyword xsMacro KEY_wantarray KEY_warn KEY_when KEY_while KEY_write KEY_x
+syn keyword xsMacro KEY_xor KEY_y LABEL
+syn keyword xsMacro LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE
+syn keyword xsMacro LATIN_CAPITAL_LETTER_SHARP_S
+syn keyword xsMacro LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS
+syn keyword xsMacro LATIN_SMALL_LETTER_A_WITH_RING_ABOVE
+syn keyword xsMacro LATIN_SMALL_LETTER_SHARP_S
+syn keyword xsMacro LATIN_SMALL_LETTER_Y_WITH_DIAERESIS LDBL_DIG LEAVE
+syn keyword xsMacro LEAVESUB LEAVE_SCOPE LEAVE_with_name LEX_DONT_CLOSE_RSFP
+syn keyword xsMacro LEX_EVALBYTES LEX_IGNORE_UTF8_HINTS LEX_KEEP_PREVIOUS
+syn keyword xsMacro LEX_NOTPARSING LEX_START_COPIED LEX_START_FLAGS
+syn keyword xsMacro LEX_START_SAME_FILTER LEX_STUFF_UTF8 LIBERAL
+syn keyword xsMacro LIBM_LIB_VERSION LIB_INVARG LIKELY LINKLIST LNBREAK LOCAL
+syn keyword xsMacro LOCALE_PAT_MOD LOCALE_PAT_MODS LOCALTIME_MAX
+syn keyword xsMacro LOCALTIME_MIN LOCALTIME_R LOCALTIME_R_PROTO
+syn keyword xsMacro LOCAL_PATCH_COUNT LOCK_DOLLARZERO_MUTEX LOC_SED LOGICAL
+syn keyword xsMacro LONGJMP LONGLONGSIZE LONGSIZE LONG_DOUBLESIZE
+syn keyword xsMacro LONG_DOUBLE_EQUALS_DOUBLE LOOPEX LOOP_PAT_MODS LSEEKSIZE
+syn keyword xsMacro LSTOP LSTOPSUB LVRET L_R_TZSET LvFLAGS LvTARG LvTARGLEN
+syn keyword xsMacro LvTARGOFF LvTYPE MADPROP_IN_BASEOP MAD_NULL MAD_OP MAD_PV
+syn keyword xsMacro MAD_SV MALLOC_CHECK_TAINT MALLOC_CHECK_TAINT2
+syn keyword xsMacro MALLOC_CTL_H MALLOC_INIT MALLOC_OVERHEAD MALLOC_TERM
+syn keyword xsMacro MALLOC_TOO_LATE_FOR MARKPOINT MARKPOINT_next
+syn keyword xsMacro MARKPOINT_next_fail MASK MATCHOP MAXARG MAXO MAXPATHLEN
+syn keyword xsMacro MAXSYSFD MAX_CHARSET_NAME_LENGTH MAX_FEATURE_LEN
+syn keyword xsMacro MAX_PORTABLE_UTF8_TWO_BYTE
+syn keyword xsMacro MAX_RECURSE_EVAL_NOCHANGE_DEPTH MAYBE_DEREF_GV
+syn keyword xsMacro MAYBE_DEREF_GV_flags MAYBE_DEREF_GV_nomg MBOL
+syn keyword xsMacro MEMBER_TO_FPTR MEM_ALIGNBYTES MEM_LOG_ALLOC MEM_LOG_FREE
+syn keyword xsMacro MEM_LOG_REALLOC MEM_SIZE MEM_SIZE_MAX MEM_WRAP_CHECK
+syn keyword xsMacro MEM_WRAP_CHECK_ MEM_WRAP_CHECK_1 MEM_WRAP_CHECK_2 MEOL
+syn keyword xsMacro METHOD MEXTEND MGf_COPY MGf_DUP MGf_GSKIP MGf_LOCAL
+syn keyword xsMacro MGf_MINMATCH MGf_REFCOUNTED MGf_TAINTEDDIR MICRO_SIGN
+syn keyword xsMacro MINMOD MJD_OFFSET_DEBUG MRO_GET_PRIVATE_DATA MSPAGAIN
+syn keyword xsMacro MULOP MULTICALL MULTILINE_PAT_MOD MULTIPLICITY MUTABLE_AV
+syn keyword xsMacro MUTABLE_CV MUTABLE_GV MUTABLE_HV MUTABLE_IO MUTABLE_PTR
+syn keyword xsMacro MUTABLE_SV MUTEX_DESTROY MUTEX_INIT
+syn keyword xsMacro MUTEX_INIT_CALLS_MALLOC MUTEX_INIT_NEEDS_MUTEX_ZEROED
+syn keyword xsMacro MUTEX_LOCK MUTEX_UNLOCK MY MYSUB MYSWAP MY_CXT_CLONE
+syn keyword xsMacro MY_CXT_INDEX MY_CXT_INIT MY_CXT_INIT_ARG
+syn keyword xsMacro MY_CXT_INIT_INTERP M_PAT_MODS M_VOID MgPV MgPV_const
+syn keyword xsMacro MgPV_nolen_const MgTAINTEDDIR MgTAINTEDDIR_off
+syn keyword xsMacro MgTAINTEDDIR_on Mkdir Move MoveD NALNUM NALNUMA NALNUML
+syn keyword xsMacro NALNUMU NATIVE8_TO_UNI NATIVE_IS_INVARIANT
+syn keyword xsMacro NATIVE_TO_ASCII NATIVE_TO_I8 NATIVE_TO_NEED NATIVE_TO_UNI
+syn keyword xsMacro NATIVE_TO_UTF NBOUND NBOUNDA NBOUNDL NBOUNDU
+syn keyword xsMacro NDBM_H_USES_PROTOTYPES NDIGIT NDIGITA NDIGITL
+syn keyword xsMacro NEED_PTHREAD_INIT NEED_VA_COPY NEGATIVE_INDICES_VAR
+syn keyword xsMacro NETDB_R_OBSOLETE NEWSV NEXTOPER NEXT_LINE_CHAR NEXT_OFF
+syn keyword xsMacro NGROUPP NHORIZWS NOAMP NODE_ALIGN NODE_ALIGN_FILL
+syn keyword xsMacro NODE_STEP_B NODE_STEP_REGNODE NODE_SZ_STR NOLINE
+syn keyword xsMacro NONDESTRUCT_PAT_MOD NONDESTRUCT_PAT_MODS NOOP
+syn keyword xsMacro NORETURN_FUNCTION_END NORMAL NOTHING NOTOP NOT_IN_PAD
+syn keyword xsMacro NO_ENV_ARRAY_IN_MAIN NO_LOCALE
+syn keyword xsMacro NO_LOCALECONV_MON_THOUSANDS_SEP NREF NREFF NREFFA NREFFL
+syn keyword xsMacro NREFFU NSIG NSPACE NSPACEA NSPACEL NSPACEU NUM2PTR
+syn keyword xsMacro NVERTWS NVSIZE NVTYPE NV_DIG NV_EPSILON NV_INF
+syn keyword xsMacro NV_MANT_DIG NV_MAX NV_MAX_10_EXP NV_MIN NV_MIN_10_EXP
+syn keyword xsMacro NV_NAN NV_OVERFLOWS_INTEGERS_AT NV_PRESERVES_UV_BITS
+syn keyword xsMacro NV_WITHIN_IV NV_WITHIN_UV New NewOp NewOpSz Newc Newx
+syn keyword xsMacro Newxc Newxz Newz NofAMmeth Null Nullav Nullch Nullcv
+syn keyword xsMacro Nullfp Nullgv Nullhe Nullhek Nullhv Nullop Nullsv OASHIFT
+syn keyword xsMacro OCSHIFT ONCE_PAT_MOD ONCE_PAT_MODS OPEN OPERAND OPFAIL
+syn keyword xsMacro OPTIMIZED OP_BINARY OP_CHECK_MUTEX_INIT
+syn keyword xsMacro OP_CHECK_MUTEX_LOCK OP_CHECK_MUTEX_TERM
+syn keyword xsMacro OP_CHECK_MUTEX_UNLOCK OP_CLASS OP_DESC OP_GIMME
+syn keyword xsMacro OP_GIMME_REVERSE OP_IS_DIRHOP OP_IS_FILETEST
+syn keyword xsMacro OP_IS_FILETEST_ACCESS OP_IS_NUMCOMPARE OP_IS_SOCKET
+syn keyword xsMacro OP_LVALUE_NO_CROAK OP_MEM_TO_REG OP_NAME OP_REFCNT_INIT
+syn keyword xsMacro OP_REFCNT_LOCK OP_REFCNT_TERM OP_REFCNT_UNLOCK
+syn keyword xsMacro OP_REG_TO_MEM OROP OROR OSNAME OSVERS O_CREAT O_RDONLY
+syn keyword xsMacro O_RDWR O_TEXT O_WRONLY Off Off_t_size OpREFCNT_dec
+syn keyword xsMacro OpREFCNT_inc OpREFCNT_set OutCopFILE PAD_BASE_SV
+syn keyword xsMacro PAD_CLONE_VARS PAD_COMPNAME_FLAGS
+syn keyword xsMacro PAD_COMPNAME_FLAGS_isOUR PAD_COMPNAME_GEN
+syn keyword xsMacro PAD_COMPNAME_GEN_set PAD_COMPNAME_OURSTASH
+syn keyword xsMacro PAD_COMPNAME_PV PAD_COMPNAME_SV PAD_COMPNAME_TYPE
+syn keyword xsMacro PAD_FAKELEX_ANON PAD_FAKELEX_MULTI PAD_RESTORE_LOCAL
+syn keyword xsMacro PAD_SAVE_LOCAL PAD_SAVE_SETNULLPAD PAD_SETSV PAD_SET_CUR
+syn keyword xsMacro PAD_SET_CUR_NOSAVE PAD_SV PAD_SVl PARENT_FAKELEX_FLAGS
+syn keyword xsMacro PARENT_PAD_INDEX PARSE_OPTIONAL PATCHLEVEL PEG PERLDB_ALL
+syn keyword xsMacro PERLDB_GOTO PERLDB_INTER PERLDB_LINE PERLDB_NAMEANON
+syn keyword xsMacro PERLDB_NAMEEVAL PERLDB_NOOPT PERLDB_SAVESRC
+syn keyword xsMacro PERLDB_SAVESRC_INVALID PERLDB_SAVESRC_NOSUBS
+syn keyword xsMacro PERLDB_SINGLE PERLDB_SUB PERLDB_SUBLINE PERLDB_SUB_NN
+syn keyword xsMacro PERLDBf_GOTO PERLDBf_INTER PERLDBf_LINE PERLDBf_NAMEANON
+syn keyword xsMacro PERLDBf_NAMEEVAL PERLDBf_NONAME PERLDBf_NOOPT
+syn keyword xsMacro PERLDBf_SAVESRC PERLDBf_SAVESRC_INVALID
+syn keyword xsMacro PERLDBf_SAVESRC_NOSUBS PERLDBf_SINGLE PERLDBf_SUB
+syn keyword xsMacro PERLDBf_SUBLINE PERLIOBUF_DEFAULT_BUFSIZ PERLIO_DUP_CLONE
+syn keyword xsMacro PERLIO_DUP_FD PERLIO_FUNCS_CAST PERLIO_FUNCS_CONST
+syn keyword xsMacro PERLIO_FUNCS_DECL PERLIO_F_APPEND PERLIO_F_CANREAD
+syn keyword xsMacro PERLIO_F_CANWRITE PERLIO_F_CLEARED PERLIO_F_CRLF
+syn keyword xsMacro PERLIO_F_EOF PERLIO_F_ERROR PERLIO_F_FASTGETS
+syn keyword xsMacro PERLIO_F_LINEBUF PERLIO_F_NOTREG PERLIO_F_OPEN
+syn keyword xsMacro PERLIO_F_RDBUF PERLIO_F_TEMP PERLIO_F_TRUNCATE
+syn keyword xsMacro PERLIO_F_TTY PERLIO_F_UNBUF PERLIO_F_UTF8 PERLIO_F_WRBUF
+syn keyword xsMacro PERLIO_INIT PERLIO_IS_STDIO PERLIO_K_BUFFERED
+syn keyword xsMacro PERLIO_K_CANCRLF PERLIO_K_DESTRUCT PERLIO_K_DUMMY
+syn keyword xsMacro PERLIO_K_FASTGETS PERLIO_K_MULTIARG PERLIO_K_RAW
+syn keyword xsMacro PERLIO_K_UTF8 PERLIO_LAYERS PERLIO_NOT_STDIO
+syn keyword xsMacro PERLIO_STDTEXT PERLIO_TERM PERLIO_USING_CRLF
+syn keyword xsMacro PERLSI_DESTROY PERLSI_DIEHOOK PERLSI_MAGIC PERLSI_MAIN
+syn keyword xsMacro PERLSI_OVERLOAD PERLSI_REQUIRE PERLSI_SIGNAL PERLSI_SORT
+syn keyword xsMacro PERLSI_UNDEF PERLSI_UNKNOWN PERLSI_WARNHOOK PERL_ABS
+syn keyword xsMacro PERL_ALLOC_CHECK PERL_API_REVISION PERL_API_SUBVERSION
+syn keyword xsMacro PERL_API_VERSION PERL_API_VERSION_STRING
+syn keyword xsMacro PERL_ARENA_ROOTS_SIZE PERL_ARENA_SIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_ADD_ALTERNATE PERL_ARGS_ASSERT_ADD_DATA
+syn keyword xsMacro PERL_ARGS_ASSERT_ADD_UTF16_TEXTFILTER
+syn keyword xsMacro PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE
+syn keyword xsMacro PERL_ARGS_ASSERT_ALLOCMY PERL_ARGS_ASSERT_AMAGIC_CALL
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_CMP
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_CMP_LOCALE
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_I_NCMP
+syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_NCMP
+syn keyword xsMacro PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE
+syn keyword xsMacro PERL_ARGS_ASSERT_ANY_DUP PERL_ARGS_ASSERT_APPLY
+syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS
+syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS_MY
+syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS_STRING
+syn keyword xsMacro PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_ARYLEN_P PERL_ARGS_ASSERT_AV_CLEAR
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_DELETE PERL_ARGS_ASSERT_AV_EXISTS
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_EXTEND PERL_ARGS_ASSERT_AV_FETCH
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_FILL PERL_ARGS_ASSERT_AV_ITER_P
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_LEN PERL_ARGS_ASSERT_AV_MAKE
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_POP PERL_ARGS_ASSERT_AV_PUSH
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_REIFY PERL_ARGS_ASSERT_AV_SHIFT
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_STORE PERL_ARGS_ASSERT_AV_UNDEF
+syn keyword xsMacro PERL_ARGS_ASSERT_AV_UNSHIFT PERL_ARGS_ASSERT_BAD_TYPE_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_BAD_TYPE_SV PERL_ARGS_ASSERT_BIND_MATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER
+syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_CMP_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_FROM_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_TO_UNI
+syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_TO_UTF8 PERL_ARGS_ASSERT_CALL_ARGV
+syn keyword xsMacro PERL_ARGS_ASSERT_CALL_LIST PERL_ARGS_ASSERT_CALL_METHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_CALL_PV PERL_ARGS_ASSERT_CALL_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_CANDO PERL_ARGS_ASSERT_CHECKCOMMA
+syn keyword xsMacro PERL_ARGS_ASSERT_CHECKPOSIXCC
+syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING
+syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN
+syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_UTF8_PRINT
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ANONCODE PERL_ARGS_ASSERT_CK_BITOP
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_CHDIR PERL_ARGS_ASSERT_CK_CMP
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_CONCAT PERL_ARGS_ASSERT_CK_DEFINED
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_DELETE PERL_ARGS_ASSERT_CK_DIE
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_EACH
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_EOF PERL_ARGS_ASSERT_CK_EVAL
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_EXEC PERL_ARGS_ASSERT_CK_EXISTS
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_EXIT PERL_ARGS_ASSERT_CK_FTST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_FUN PERL_ARGS_ASSERT_CK_GLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_GREP PERL_ARGS_ASSERT_CK_INDEX
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_JOIN PERL_ARGS_ASSERT_CK_LENGTH
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_LFUN PERL_ARGS_ASSERT_CK_LISTIOB
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_MATCH PERL_ARGS_ASSERT_CK_METHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_NULL PERL_ARGS_ASSERT_CK_OPEN
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_READLINE PERL_ARGS_ASSERT_CK_REPEAT
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_REQUIRE PERL_ARGS_ASSERT_CK_RETURN
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_RFUN PERL_ARGS_ASSERT_CK_RVCONST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SASSIGN PERL_ARGS_ASSERT_CK_SELECT
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SHIFT PERL_ARGS_ASSERT_CK_SMARTMATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SORT PERL_ARGS_ASSERT_CK_SPAIR
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SPLIT PERL_ARGS_ASSERT_CK_SUBR
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_SUBSTR PERL_ARGS_ASSERT_CK_SVCONST
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_TELL PERL_ARGS_ASSERT_CK_TRUNC
+syn keyword xsMacro PERL_ARGS_ASSERT_CK_WARNER PERL_ARGS_ASSERT_CK_WARNER_D
+syn keyword xsMacro PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS
+syn keyword xsMacro PERL_ARGS_ASSERT_CLONE_PARAMS_DEL
+syn keyword xsMacro PERL_ARGS_ASSERT_CLONE_PARAMS_NEW
+syn keyword xsMacro PERL_ARGS_ASSERT_CLOSEST_COP PERL_ARGS_ASSERT_CL_AND
+syn keyword xsMacro PERL_ARGS_ASSERT_CL_ANYTHING PERL_ARGS_ASSERT_CL_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT_CL_IS_ANYTHING PERL_ARGS_ASSERT_CL_OR
+syn keyword xsMacro PERL_ARGS_ASSERT_COP_FETCH_LABEL
+syn keyword xsMacro PERL_ARGS_ASSERT_COP_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_COP_STORE_LABEL
+syn keyword xsMacro PERL_ARGS_ASSERT_CORESUB_OP
+syn keyword xsMacro PERL_ARGS_ASSERT_CORE_PROTOTYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_CORE_REGCLASS_SWASH
+syn keyword xsMacro PERL_ARGS_ASSERT_CROAK_SV PERL_ARGS_ASSERT_CROAK_XS_USAGE
+syn keyword xsMacro PERL_ARGS_ASSERT_CURSE PERL_ARGS_ASSERT_CUSTOM_OP_DESC
+syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_NAME
+syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER
+syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_XOP PERL_ARGS_ASSERT_CVGV_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_CVSTASH_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_CLONE PERL_ARGS_ASSERT_CV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER
+syn keyword xsMacro PERL_ARGS_ASSERT_CV_UNDEF PERL_ARGS_ASSERT_CX_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_CX_DUP PERL_ARGS_ASSERT_DEB
+syn keyword xsMacro PERL_ARGS_ASSERT_DEBOP PERL_ARGS_ASSERT_DEBPROF
+syn keyword xsMacro PERL_ARGS_ASSERT_DEBUG_START_MATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_DEB_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_DEB_STACK_N PERL_ARGS_ASSERT_DELIMCPY
+syn keyword xsMacro PERL_ARGS_ASSERT_DEL_SV PERL_ARGS_ASSERT_DESTROY_MATCHER
+syn keyword xsMacro PERL_ARGS_ASSERT_DIE_SV PERL_ARGS_ASSERT_DIE_UNWIND
+syn keyword xsMacro PERL_ARGS_ASSERT_DIRP_DUP PERL_ARGS_ASSERT_DIV128
+syn keyword xsMacro PERL_ARGS_ASSERT_DOFILE PERL_ARGS_ASSERT_DOFINDLABEL
+syn keyword xsMacro PERL_ARGS_ASSERT_DOFORM PERL_ARGS_ASSERT_DOONELINER
+syn keyword xsMacro PERL_ARGS_ASSERT_DOOPEN_PM PERL_ARGS_ASSERT_DOPARSEFORM
+syn keyword xsMacro PERL_ARGS_ASSERT_DOPOPTOLABEL
+syn keyword xsMacro PERL_ARGS_ASSERT_DOPOPTOSUB_AT PERL_ARGS_ASSERT_DOREF
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_AEXEC PERL_ARGS_ASSERT_DO_AEXEC5
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_ASPAWN PERL_ARGS_ASSERT_DO_BINMODE
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_CHOMP PERL_ARGS_ASSERT_DO_DUMP_PAD
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_EOF PERL_ARGS_ASSERT_DO_EXEC
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_EXEC3 PERL_ARGS_ASSERT_DO_GVGV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_GV_DUMP PERL_ARGS_ASSERT_DO_HV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_IPCCTL PERL_ARGS_ASSERT_DO_IPCGET
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_JOIN PERL_ARGS_ASSERT_DO_MAGIC_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_MSGRCV PERL_ARGS_ASSERT_DO_MSGSND
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_NCMP PERL_ARGS_ASSERT_DO_ODDBALL
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPEN PERL_ARGS_ASSERT_DO_OPEN9
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPENN PERL_ARGS_ASSERT_DO_OP_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_OP_XMLDUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_PMOP_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_PMOP_XMLDUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_PRINT PERL_ARGS_ASSERT_DO_SEMOP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_SHMIO PERL_ARGS_ASSERT_DO_SPAWN
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPAWN_NOWAIT
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPRINTF PERL_ARGS_ASSERT_DO_SV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_SYSSEEK PERL_ARGS_ASSERT_DO_TELL
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COMPLEX
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COUNT
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_SIMPLE
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_VECGET PERL_ARGS_ASSERT_DO_VECSET
+syn keyword xsMacro PERL_ARGS_ASSERT_DO_VOP PERL_ARGS_ASSERT_DUMPUNTIL
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_EXEC_POS PERL_ARGS_ASSERT_DUMP_FDS
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_FORM PERL_ARGS_ASSERT_DUMP_INDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_MSTATS
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_PACKSUBS
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_PACKSUBS_PERL
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_SUB PERL_ARGS_ASSERT_DUMP_SUB_PERL
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_SV_CHILD PERL_ARGS_ASSERT_DUMP_TRIE
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE
+syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_VINDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_DUP_ATTRLIST
+syn keyword xsMacro PERL_ARGS_ASSERT_EMULATE_COP_IO PERL_ARGS_ASSERT_EVAL_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_EVAL_SV PERL_ARGS_ASSERT_EXEC_FAILED
+syn keyword xsMacro PERL_ARGS_ASSERT_EXPECT_NUMBER PERL_ARGS_ASSERT_F0CONVERT
+syn keyword xsMacro PERL_ARGS_ASSERT_FBM_COMPILE PERL_ARGS_ASSERT_FBM_INSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_FEATURE_IS_ENABLED
+syn keyword xsMacro PERL_ARGS_ASSERT_FILTER_DEL PERL_ARGS_ASSERT_FILTER_GETS
+syn keyword xsMacro PERL_ARGS_ASSERT_FILTER_READ PERL_ARGS_ASSERT_FINALIZE_OP
+syn keyword xsMacro PERL_ARGS_ASSERT_FINALIZE_OPTREE
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_BEGINNING
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_BYCLASS
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_IN_MY_STASH
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_RUNDEFSV2
+syn keyword xsMacro PERL_ARGS_ASSERT_FIND_SCRIPT
+syn keyword xsMacro PERL_ARGS_ASSERT_FIRST_SYMBOL PERL_ARGS_ASSERT_FOLDEQ
+syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_LATIN1
+syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_LOCALE
+syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_UTF8_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_FOLD_CONSTANTS
+syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_IDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_STRICT_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_WORD PERL_ARGS_ASSERT_FORGET_PMOP
+syn keyword xsMacro PERL_ARGS_ASSERT_FORM PERL_ARGS_ASSERT_FORM_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_FP_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT
+syn keyword xsMacro PERL_ARGS_ASSERT_GETCWD_SV PERL_ARGS_ASSERT_GETENV_LEN
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_AUX_MG PERL_ARGS_ASSERT_GET_AV
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_CV PERL_ARGS_ASSERT_GET_CVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_DB_SUB
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_DEBUG_OPTS PERL_ARGS_ASSERT_GET_HV
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_LEN_ADDR
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_VERSION_ID_ADDR
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_ZERO_ADDR
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_MSTATS PERL_ARGS_ASSERT_GET_NUM
+syn keyword xsMacro PERL_ARGS_ASSERT_GET_SV PERL_ARGS_ASSERT_GLOB_2NUMBER
+syn keyword xsMacro PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_GLOB_ASSIGN_REF PERL_ARGS_ASSERT_GP_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_GROK_BIN PERL_ARGS_ASSERT_GROK_BSLASH_O
+syn keyword xsMacro PERL_ARGS_ASSERT_GROK_HEX PERL_ARGS_ASSERT_GROK_NUMBER
+syn keyword xsMacro PERL_ARGS_ASSERT_GROK_NUMERIC_RADIX
+syn keyword xsMacro PERL_ARGS_ASSERT_GROK_OCT PERL_ARGS_ASSERT_GROUP_END
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_AMUPDATE
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_SV PERL_ARGS_ASSERT_GV_CHECK
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_CONST_SV PERL_ARGS_ASSERT_GV_DUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME3
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME4 PERL_ARGS_ASSERT_GV_ENAME
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHFILE
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHPV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHSV PERL_ARGS_ASSERT_GV_FULLNAME
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FULLNAME3
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_FULLNAME4
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_GET_SUPER_PKG
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_PV PERL_ARGS_ASSERT_GV_INIT_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_SVTYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_MAGICALIZE_OVERLOAD
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_NAME_SET PERL_ARGS_ASSERT_GV_STASHPV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_STASHPVN PERL_ARGS_ASSERT_GV_STASHSV
+syn keyword xsMacro PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE
+syn keyword xsMacro PERL_ARGS_ASSERT_HEK_DUP PERL_ARGS_ASSERT_HE_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_HFREEENTRIES
+syn keyword xsMacro PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY PERL_ARGS_ASSERT_HSPLIT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ASSERT PERL_ARGS_ASSERT_HV_AUXINIT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_BACKREFERENCES_P
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_DELAYFREE_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_DELETE PERL_ARGS_ASSERT_HV_DELETE_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_EITER_P PERL_ARGS_ASSERT_HV_EITER_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ENAME_ADD
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ENAME_DELETE
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_EXISTS PERL_ARGS_ASSERT_HV_EXISTS_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_FETCH PERL_ARGS_ASSERT_HV_FETCH_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_FILL PERL_ARGS_ASSERT_HV_FREE_ENT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_FREE_ENT_RET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERINIT PERL_ARGS_ASSERT_HV_ITERKEY
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERKEYSV
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXTSV
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERVAL
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_KILL_BACKREFS
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_KSPLIT PERL_ARGS_ASSERT_HV_MAGIC
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_MAGIC_CHECK
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_NAME_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_NOTALLOWED
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_RITER_P PERL_ARGS_ASSERT_HV_RITER_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_HV_SCALAR PERL_ARGS_ASSERT_INCLINE
+syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH
+syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS
+syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH_USE_SEP
+syn keyword xsMacro PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS
+syn keyword xsMacro PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS
+syn keyword xsMacro PERL_ARGS_ASSERT_INIT_TM PERL_ARGS_ASSERT_INPLACE_AASSIGN
+syn keyword xsMacro PERL_ARGS_ASSERT_INSTR PERL_ARGS_ASSERT_INTUIT_METHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_INTUIT_MORE
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ARRAY
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_CLONE
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_EXTEND
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERINIT
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERNEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_LEN PERL_ARGS_ASSERT_INVLIST_MAX
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_SEARCH
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_SET_LEN
+syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_TRIM PERL_ARGS_ASSERT_IO_CLOSE
+syn keyword xsMacro PERL_ARGS_ASSERT_ISA_LOOKUP PERL_ARGS_ASSERT_IS_AN_INT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_ASCII_STRING
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALNUM
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALPHA
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ASCII
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR_SLOW
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CNTRL
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_COMMON
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_DIGIT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_GRAPH
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_IDCONT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_IDFIRST
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_LOWER
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_MARK
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PRINT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PUNCT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_SPACE
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING_LOCLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_UPPER
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XDIGIT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XIDCONT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_BEGIN
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_EXTEND
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_L
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LV
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LVT
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LV_LVT_V
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_NON_HANGUL
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_PREPEND
+syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_T PERL_ARGS_ASSERT_IS_UTF8_X_V
+syn keyword xsMacro PERL_ARGS_ASSERT_JMAYBE PERL_ARGS_ASSERT_JOIN_EXACT
+syn keyword xsMacro PERL_ARGS_ASSERT_KEYWORD
+syn keyword xsMacro PERL_ARGS_ASSERT_KEYWORD_PLUGIN_STANDARD
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_DISCARD_TO
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_READ_TO
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_LEX_UNSTUFF PERL_ARGS_ASSERT_LOAD_MODULE
+syn keyword xsMacro PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_LOCALIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL
+syn keyword xsMacro PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER PERL_ARGS_ASSERT_LOP
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARENV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARHINT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARHINTS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARISA
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARSIG
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_EXISTSPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_FREEOVRLD
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GET
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETARYLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETDEFELEM
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETNKEYS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETPOS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETSIG
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETSUBSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETTAINT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETUVAR
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETVEC
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_LEN
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHCALL
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHCALL1
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_NEXTPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SCALARPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SET
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETAMAGIC
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETARYLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDBLINE
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDEFELEM
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETENV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETHINT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETISA
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETMGLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETNKEYS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETPOS
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETREGEXP
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETSIG
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETSUBSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETTAINT
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETUTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETUVAR
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETVEC
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETVSTRING
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SIZEPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_WIPEPACK
+syn keyword xsMacro PERL_ARGS_ASSERT_MAKE_MATCHER PERL_ARGS_ASSERT_MAKE_TRIE
+syn keyword xsMacro PERL_ARGS_ASSERT_MAKE_TRIE_FAILTABLE
+syn keyword xsMacro PERL_ARGS_ASSERT_MALLOCED_SIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_MATCHER_MATCHES_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_MAYBERELOCATE
+syn keyword xsMacro PERL_ARGS_ASSERT_MEASURE_STRUCT
+syn keyword xsMacro PERL_ARGS_ASSERT_MEM_COLLXFRM
+syn keyword xsMacro PERL_ARGS_ASSERT_MEM_LOG_COMMON PERL_ARGS_ASSERT_MESS
+syn keyword xsMacro PERL_ARGS_ASSERT_MESS_NOCONTEXT PERL_ARGS_ASSERT_MESS_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_METHOD_COMMON PERL_ARGS_ASSERT_MG_CLEAR
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_COPY PERL_ARGS_ASSERT_MG_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_FREE PERL_ARGS_ASSERT_MG_FREE_TYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_GET PERL_ARGS_ASSERT_MG_LENGTH
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_LOCALIZE PERL_ARGS_ASSERT_MG_MAGICAL
+syn keyword xsMacro PERL_ARGS_ASSERT_MG_SET PERL_ARGS_ASSERT_MG_SIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_MINI_MKTIME
+syn keyword xsMacro PERL_ARGS_ASSERT_MORESWITCHES
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_CLEAN_ISAREV
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GATHER_AND_RENAME
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_FROM_NAME
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA_DFS
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_PRIVATE_DATA
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_ISA_CHANGED_IN
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_META_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_META_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_METHOD_CHANGED_IN
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_PACKAGE_MOVED
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_REGISTER
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_SET_MRO
+syn keyword xsMacro PERL_ARGS_ASSERT_MRO_SET_PRIVATE_DATA
+syn keyword xsMacro PERL_ARGS_ASSERT_MUL128
+syn keyword xsMacro PERL_ARGS_ASSERT_MUNGE_QWLIST_TO_PAREN_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_ATOF PERL_ARGS_ASSERT_MY_ATOF2
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_ATTRS PERL_ARGS_ASSERT_MY_BCOPY
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_BZERO PERL_ARGS_ASSERT_MY_CXT_INDEX
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_CXT_INIT PERL_ARGS_ASSERT_MY_KID
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_MEMCMP PERL_ARGS_ASSERT_MY_MEMSET
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_POPEN PERL_ARGS_ASSERT_MY_POPEN_LIST
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_SNPRINTF PERL_ARGS_ASSERT_MY_SPRINTF
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_STRFTIME PERL_ARGS_ASSERT_MY_SWABN
+syn keyword xsMacro PERL_ARGS_ASSERT_MY_VSNPRINTF PERL_ARGS_ASSERT_NEED_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWAVREF PERL_ARGS_ASSERT_NEWCONDOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWFOROP PERL_ARGS_ASSERT_NEWGIVENOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWGIVWHENOP PERL_ARGS_ASSERT_NEWGP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWGVGEN_FLAGS PERL_ARGS_ASSERT_NEWGVOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWHVREF PERL_ARGS_ASSERT_NEWLOGOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWLOOPEX PERL_ARGS_ASSERT_NEWMADSV
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWPADOP PERL_ARGS_ASSERT_NEWPROG
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWRANGE PERL_ARGS_ASSERT_NEWRV
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWRV_NOINC PERL_ARGS_ASSERT_NEWSVOP
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVREF PERL_ARGS_ASSERT_NEWSVRV
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWWHENOP PERL_ARGS_ASSERT_NEWXS
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_NEW_CONSTANT PERL_ARGS_ASSERT_NEW_CTYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_NEW_LOGOP PERL_ARGS_ASSERT_NEW_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_NEW_WARNINGS_BITFIELD
+syn keyword xsMacro PERL_ARGS_ASSERT_NEXTARGV PERL_ARGS_ASSERT_NEXTCHAR
+syn keyword xsMacro PERL_ARGS_ASSERT_NEXT_SYMBOL PERL_ARGS_ASSERT_NINSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_NOT_A_NUMBER
+syn keyword xsMacro PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED
+syn keyword xsMacro PERL_ARGS_ASSERT_NO_FH_ALLOWED PERL_ARGS_ASSERT_NO_OP
+syn keyword xsMacro PERL_ARGS_ASSERT_OOPSAV PERL_ARGS_ASSERT_OOPSHV
+syn keyword xsMacro PERL_ARGS_ASSERT_OPEN_SCRIPT
+syn keyword xsMacro PERL_ARGS_ASSERT_OPT_SCALARHV PERL_ARGS_ASSERT_OP_CLEAR
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_CONTEXTUALIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_DUMP PERL_ARGS_ASSERT_OP_INTEGERIZE
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_LINKLIST PERL_ARGS_ASSERT_OP_NULL
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_REFCNT_DEC
+syn keyword xsMacro PERL_ARGS_ASSERT_OP_STD_INIT PERL_ARGS_ASSERT_OP_XMLDUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_PACKAGE PERL_ARGS_ASSERT_PACKAGE_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_PACKLIST PERL_ARGS_ASSERT_PACK_CAT
+syn keyword xsMacro PERL_ARGS_ASSERT_PACK_REC PERL_ARGS_ASSERT_PADLIST_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_ANON
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ALLOC_NAME
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_CHECK_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDLEX
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FIXUP_INNER_ANONS
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_PEG PERL_ARGS_ASSERT_PAD_PUSH
+syn keyword xsMacro PERL_ARGS_ASSERT_PAD_SETSV PERL_ARGS_ASSERT_PARSER_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_PARSER_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS
+syn keyword xsMacro PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE
+syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_READ
+syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_UNREAD
+syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_WRITE
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_ALLOC_USING
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CLONE
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CLONE_USING
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CONSTRUCT
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_DESTRUCT PERL_ARGS_ASSERT_PERL_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_PERL_PARSE PERL_ARGS_ASSERT_PERL_RUN
+syn keyword xsMacro PERL_ARGS_ASSERT_PMRUNTIME PERL_ARGS_ASSERT_PMTRANS
+syn keyword xsMacro PERL_ARGS_ASSERT_PM_DESCRIPTION
+syn keyword xsMacro PERL_ARGS_ASSERT_POPULATE_ISA PERL_ARGS_ASSERT_PREGCOMP
+syn keyword xsMacro PERL_ARGS_ASSERT_PREGEXEC PERL_ARGS_ASSERT_PREGFREE2
+syn keyword xsMacro PERL_ARGS_ASSERT_PRESCAN_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_PRINTBUF
+syn keyword xsMacro PERL_ARGS_ASSERT_PRINTF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS
+syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_FETCH
+syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_FIND
+syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_SPLIT
+syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_STORE
+syn keyword xsMacro PERL_ARGS_ASSERT_PUT_BYTE PERL_ARGS_ASSERT_PV_DISPLAY
+syn keyword xsMacro PERL_ARGS_ASSERT_PV_ESCAPE PERL_ARGS_ASSERT_PV_PRETTY
+syn keyword xsMacro PERL_ARGS_ASSERT_PV_UNI_DISPLAY PERL_ARGS_ASSERT_QERROR
+syn keyword xsMacro PERL_ARGS_ASSERT_QSORTSVU
+syn keyword xsMacro PERL_ARGS_ASSERT_REENTRANT_RETRY
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE
+syn keyword xsMacro PERL_ARGS_ASSERT_REFTO PERL_ARGS_ASSERT_REG
+syn keyword xsMacro PERL_ARGS_ASSERT_REGANODE PERL_ARGS_ASSERT_REGATOM
+syn keyword xsMacro PERL_ARGS_ASSERT_REGBRANCH PERL_ARGS_ASSERT_REGCLASS
+syn keyword xsMacro PERL_ARGS_ASSERT_REGCLASS_SWASH PERL_ARGS_ASSERT_REGCPPOP
+syn keyword xsMacro PERL_ARGS_ASSERT_REGCURLY PERL_ARGS_ASSERT_REGDUMP
+syn keyword xsMacro PERL_ARGS_ASSERT_REGDUPE_INTERNAL
+syn keyword xsMacro PERL_ARGS_ASSERT_REGEXEC_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_REGFREE_INTERNAL
+syn keyword xsMacro PERL_ARGS_ASSERT_REGHOP3 PERL_ARGS_ASSERT_REGHOP4
+syn keyword xsMacro PERL_ARGS_ASSERT_REGHOPMAYBE3 PERL_ARGS_ASSERT_REGINCLASS
+syn keyword xsMacro PERL_ARGS_ASSERT_REGINSERT PERL_ARGS_ASSERT_REGMATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_REGPIECE PERL_ARGS_ASSERT_REGPPOSIXCC
+syn keyword xsMacro PERL_ARGS_ASSERT_REGPROP PERL_ARGS_ASSERT_REGREPEAT
+syn keyword xsMacro PERL_ARGS_ASSERT_REGTAIL PERL_ARGS_ASSERT_REGTAIL_STUDY
+syn keyword xsMacro PERL_ARGS_ASSERT_REGTRY PERL_ARGS_ASSERT_REGUNI
+syn keyword xsMacro PERL_ARGS_ASSERT_REGWHITE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_CHECK_NAMED_BUFF_MATCHED
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMEDSEQ
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_ALL
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_EXISTS
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_FIRSTKEY
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_ITER
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_SCALAR
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NODE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_FETCH
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_LENGTH
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_STORE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_QR_PACKAGE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_RECODE
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_SCAN_NAME
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_SKIPCOMMENT
+syn keyword xsMacro PERL_ARGS_ASSERT_REG_TEMP_COPY PERL_ARGS_ASSERT_REPEATCPY
+syn keyword xsMacro PERL_ARGS_ASSERT_REPORT_REDEFINED_CV
+syn keyword xsMacro PERL_ARGS_ASSERT_REQUIRE_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_REQUIRE_TIE_MOD
+syn keyword xsMacro PERL_ARGS_ASSERT_RE_COMPILE PERL_ARGS_ASSERT_RE_CROAK2
+syn keyword xsMacro PERL_ARGS_ASSERT_RE_DUP_GUTS
+syn keyword xsMacro PERL_ARGS_ASSERT_RE_INTUIT_START
+syn keyword xsMacro PERL_ARGS_ASSERT_RE_INTUIT_STRING
+syn keyword xsMacro PERL_ARGS_ASSERT_RNINSTR PERL_ARGS_ASSERT_RSIGNAL_SAVE
+syn keyword xsMacro PERL_ARGS_ASSERT_RUN_USER_FILTER
+syn keyword xsMacro PERL_ARGS_ASSERT_RV2CV_OP_CV PERL_ARGS_ASSERT_RVPV_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_RESTORE
+syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_SAVE PERL_ARGS_ASSERT_SAME_DIRENT
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVESHAREDSVPV PERL_ARGS_ASSERT_SAVESVPV
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_ADELETE
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_APTR PERL_ARGS_ASSERT_SAVE_ARY
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_BOOL PERL_ARGS_ASSERT_SAVE_CLEARSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_DELETE
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_DESTRUCTOR
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GENERIC_PVREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GENERIC_SVREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GP PERL_ARGS_ASSERT_SAVE_HASH
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HDELETE
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HEK_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HELEM_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HPTR PERL_ARGS_ASSERT_SAVE_I16
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_I32 PERL_ARGS_ASSERT_SAVE_I8
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_INT PERL_ARGS_ASSERT_SAVE_ITEM
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_IV PERL_ARGS_ASSERT_SAVE_LINES
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_LIST PERL_ARGS_ASSERT_SAVE_LONG
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_MAGIC
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_MORTALIZESV
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_NOGV PERL_ARGS_ASSERT_SAVE_PPTR
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SCALAR
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SCALAR_AT
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SET_SVFLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SHARED_PVREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SPTR PERL_ARGS_ASSERT_SAVE_SVREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_VPTR PERL_ARGS_ASSERT_SCALARBOOLEAN
+syn keyword xsMacro PERL_ARGS_ASSERT_SCALARVOID PERL_ARGS_ASSERT_SCAN_BIN
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_COMMIT PERL_ARGS_ASSERT_SCAN_CONST
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_FORMLINE
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_HEREDOC PERL_ARGS_ASSERT_SCAN_HEX
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_IDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_INPUTSYMBOL
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_NUM PERL_ARGS_ASSERT_SCAN_OCT
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_PAT PERL_ARGS_ASSERT_SCAN_STR
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_SUBST PERL_ARGS_ASSERT_SCAN_TRANS
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_VSTRING PERL_ARGS_ASSERT_SCAN_WORD
+syn keyword xsMacro PERL_ARGS_ASSERT_SCREAMINSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_SEARCH_CONST
+syn keyword xsMacro PERL_ARGS_ASSERT_SET_CONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SET_REGCLASS_BIT
+syn keyword xsMacro PERL_ARGS_ASSERT_SET_REGCLASS_BIT_FOLD
+syn keyword xsMacro PERL_ARGS_ASSERT_SHARE_HEK
+syn keyword xsMacro PERL_ARGS_ASSERT_SHARE_HEK_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SIMPLIFY_SORT PERL_ARGS_ASSERT_SI_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_SKIPSPACE PERL_ARGS_ASSERT_SKIPSPACE0
+syn keyword xsMacro PERL_ARGS_ASSERT_SKIPSPACE1 PERL_ARGS_ASSERT_SKIPSPACE2
+syn keyword xsMacro PERL_ARGS_ASSERT_SLAB_FREE PERL_ARGS_ASSERT_SLAB_TO_RW
+syn keyword xsMacro PERL_ARGS_ASSERT_SOFTREF2XV PERL_ARGS_ASSERT_SORTCV
+syn keyword xsMacro PERL_ARGS_ASSERT_SORTCV_STACKED
+syn keyword xsMacro PERL_ARGS_ASSERT_SORTCV_XSUB PERL_ARGS_ASSERT_SORTSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SORTSV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SPACE_JOIN_NAMES_MORTAL
+syn keyword xsMacro PERL_ARGS_ASSERT_SS_DUP PERL_ARGS_ASSERT_STACK_GROW
+syn keyword xsMacro PERL_ARGS_ASSERT_START_GLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_STASHPV_HVNAME_MATCH
+syn keyword xsMacro PERL_ARGS_ASSERT_STDIZE_LOCALE
+syn keyword xsMacro PERL_ARGS_ASSERT_STRIP_RETURN
+syn keyword xsMacro PERL_ARGS_ASSERT_STR_TO_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_STUDY_CHUNK
+syn keyword xsMacro PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2BOOL_FLAGS PERL_ARGS_ASSERT_SV_2CV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IO PERL_ARGS_ASSERT_SV_2IUV_COMMON
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2NUM PERL_ARGS_ASSERT_SV_2PVBYTE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVUTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PV_NOLEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_ADD_ARENA
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_ADD_BACKREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_BACKOFF PERL_ARGS_ASSERT_SV_BLESS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV PERL_ARGS_ASSERT_SV_CATPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV_MG PERL_ARGS_ASSERT_SV_CATSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATSV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATSV_MG PERL_ARGS_ASSERT_SV_CATXMLPV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATXMLPVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATXMLSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CAT_DECODE PERL_ARGS_ASSERT_SV_CHOP
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_CLEAR
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_COMPILE_2OP
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_COPYPV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DEL_BACKREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DOES PERL_ARGS_ASSERT_SV_DOES_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DOES_PVN PERL_ARGS_ASSERT_SV_DOES_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUMP PERL_ARGS_ASSERT_SV_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_COMMON
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_INC
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_EXP_GROW
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_FORCE_NORMAL
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_FREE2 PERL_ARGS_ASSERT_SV_GETS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_GROW PERL_ARGS_ASSERT_SV_INSERT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_INSERT_FLAGS PERL_ARGS_ASSERT_SV_ISA
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_IV PERL_ARGS_ASSERT_SV_I_NCMP
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_KILL_BACKREFS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_MAGIC PERL_ARGS_ASSERT_SV_MAGICEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_NCMP PERL_ARGS_ASSERT_SV_NV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_CACHED
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY PERL_ARGS_ASSERT_SV_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVBYTE PERL_ARGS_ASSERT_SV_PVBYTEN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE PERL_ARGS_ASSERT_SV_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_FORCE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_NOMG PERL_ARGS_ASSERT_SV_PVUTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVUTF8N
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_REF PERL_ARGS_ASSERT_SV_REFTYPE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_RELEASE_COW
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_REPLACE PERL_ARGS_ASSERT_SV_RESET
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_RVWEAKEN PERL_ARGS_ASSERT_SV_SETHEK
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETIV PERL_ARGS_ASSERT_SV_SETIV_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETNV PERL_ARGS_ASSERT_SV_SETNV_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPV PERL_ARGS_ASSERT_SV_SETPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVIV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVIV_MG PERL_ARGS_ASSERT_SV_SETPVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVN_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPV_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_IV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_NV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_UV PERL_ARGS_ASSERT_SV_SETSV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_COW
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_MG PERL_ARGS_ASSERT_SV_SETUV
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETUV_MG PERL_ARGS_ASSERT_SV_TAINT
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_TAINTED PERL_ARGS_ASSERT_SV_UNGLOB
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNI_DISPLAY
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNMAGIC
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNMAGICEXT PERL_ARGS_ASSERT_SV_UNREF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNREF_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNTAINT PERL_ARGS_ASSERT_SV_UPGRADE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_DECODE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_ENCODE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_UPGRADE
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_UV PERL_ARGS_ASSERT_SV_VCATPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVFN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVF_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_VSETPVF PERL_ARGS_ASSERT_SV_VSETPVFN
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_VSETPVF_MG
+syn keyword xsMacro PERL_ARGS_ASSERT_SV_XMLPEEK PERL_ARGS_ASSERT_SWALLOW_BOM
+syn keyword xsMacro PERL_ARGS_ASSERT_SWASH_FETCH PERL_ARGS_ASSERT_SWASH_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT_SWATCH_GET PERL_ARGS_ASSERT_SYS_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT_SYS_INIT3
+syn keyword xsMacro PERL_ARGS_ASSERT_SYS_INTERN_DUP
+syn keyword xsMacro PERL_ARGS_ASSERT_TAINT_PROPER
+syn keyword xsMacro PERL_ARGS_ASSERT_TIED_METHOD
+syn keyword xsMacro PERL_ARGS_ASSERT_TOKENIZE_USE PERL_ARGS_ASSERT_TOKEN_FREE
+syn keyword xsMacro PERL_ARGS_ASSERT_TOKEN_GETMAD PERL_ARGS_ASSERT_TOKEQ
+syn keyword xsMacro PERL_ARGS_ASSERT_TOKEREPORT
+syn keyword xsMacro PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_BYTE_SUBSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_LOWER
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_TITLE
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_UPPER
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_CASE
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_FOLD
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_LOWER
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_SUBSTR
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_TITLE
+syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_UPPER
+syn keyword xsMacro PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS
+syn keyword xsMacro PERL_ARGS_ASSERT_UIV_2BUF PERL_ARGS_ASSERT_UNLNK
+syn keyword xsMacro PERL_ARGS_ASSERT_UNPACKSTRING PERL_ARGS_ASSERT_UNPACK_REC
+syn keyword xsMacro PERL_ARGS_ASSERT_UNPACK_STR
+syn keyword xsMacro PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK
+syn keyword xsMacro PERL_ARGS_ASSERT_UPG_VERSION
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TEXTFILTER
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TO_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8N_TO_UVCHR
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8N_TO_UVUNI
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_DISTANCE PERL_ARGS_ASSERT_UTF8_HOP
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_LENGTH
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_BYTES
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVCHR
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVUNI
+syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF
+syn keyword xsMacro PERL_ARGS_ASSERT_UTILIZE PERL_ARGS_ASSERT_UVCHR_TO_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_UVCHR_TO_UTF8_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_UVUNI_TO_UTF8
+syn keyword xsMacro PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT_VALIDATE_SUID
+syn keyword xsMacro PERL_ARGS_ASSERT_VALID_UTF8_TO_UVCHR
+syn keyword xsMacro PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI
+syn keyword xsMacro PERL_ARGS_ASSERT_VCMP PERL_ARGS_ASSERT_VDEB
+syn keyword xsMacro PERL_ARGS_ASSERT_VFORM PERL_ARGS_ASSERT_VISIT
+syn keyword xsMacro PERL_ARGS_ASSERT_VIVIFY_DEFELEM
+syn keyword xsMacro PERL_ARGS_ASSERT_VIVIFY_REF PERL_ARGS_ASSERT_VLOAD_MODULE
+syn keyword xsMacro PERL_ARGS_ASSERT_VMESS PERL_ARGS_ASSERT_VNEWSVPVF
+syn keyword xsMacro PERL_ARGS_ASSERT_VNORMAL PERL_ARGS_ASSERT_VNUMIFY
+syn keyword xsMacro PERL_ARGS_ASSERT_VSTRINGIFY PERL_ARGS_ASSERT_VVERIFY
+syn keyword xsMacro PERL_ARGS_ASSERT_VWARN PERL_ARGS_ASSERT_VWARNER
+syn keyword xsMacro PERL_ARGS_ASSERT_WAIT4PID PERL_ARGS_ASSERT_WARN
+syn keyword xsMacro PERL_ARGS_ASSERT_WARNER PERL_ARGS_ASSERT_WARNER_NOCONTEXT
+syn keyword xsMacro PERL_ARGS_ASSERT_WARN_NOCONTEXT PERL_ARGS_ASSERT_WARN_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_WATCH PERL_ARGS_ASSERT_WHICHSIG_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_WHICHSIG_PVN
+syn keyword xsMacro PERL_ARGS_ASSERT_WHICHSIG_SV
+syn keyword xsMacro PERL_ARGS_ASSERT_WITH_QUEUED_ERRORS
+syn keyword xsMacro PERL_ARGS_ASSERT_WRAP_OP_CHECKER
+syn keyword xsMacro PERL_ARGS_ASSERT_WRITE_TO_STDERR
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_ATTR
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_FORM
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_INDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS_PERL
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_SUB
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_SUB_PERL
+syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_VINDENT
+syn keyword xsMacro PERL_ARGS_ASSERT_XS_APIVERSION_BOOTCHECK
+syn keyword xsMacro PERL_ARGS_ASSERT_XS_VERSION_BOOTCHECK
+syn keyword xsMacro PERL_ARGS_ASSERT_YYERROR PERL_ARGS_ASSERT_YYERROR_PV
+syn keyword xsMacro PERL_ARGS_ASSERT_YYERROR_PVN PERL_ARGS_ASSERT_YYWARN
+syn keyword xsMacro PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST
+syn keyword xsMacro PERL_ARGS_ASSERT__CORE_SWASH_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_CONTENTS
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INVERT
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INVERT_PROP
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_POPULATE_SWATCH
+syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND
+syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_QUOTEMETA
+syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8__PERL_IDSTART
+syn keyword xsMacro PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY
+syn keyword xsMacro PERL_ARGS_ASSERT__SWASH_INVERSION_HASH
+syn keyword xsMacro PERL_ARGS_ASSERT__SWASH_TO_INVLIST
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_FOLD_LATIN1
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS
+syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS PERL_ASYNC_CHECK
+syn keyword xsMacro PERL_BITFIELD16 PERL_BITFIELD32 PERL_BITFIELD8
+syn keyword xsMacro PERL_CALLCONV PERL_CHECK_INITED PERL_CKDEF PERL_DEB
+syn keyword xsMacro PERL_DEBUG PERL_DEBUG_PAD PERL_DEBUG_PAD_ZERO
+syn keyword xsMacro PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
+syn keyword xsMacro PERL_DONT_CREATE_GVSV
+syn keyword xsMacro PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS
+syn keyword xsMacro PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION
+syn keyword xsMacro PERL_ENABLE_POSITIVE_ASSERTION_STUDY
+syn keyword xsMacro PERL_ENABLE_TRIE_OPTIMISATION PERL_EXIT_DESTRUCT_END
+syn keyword xsMacro PERL_EXIT_EXPECTED PERL_EXPORT_C PERL_FILE_IS_ABSOLUTE
+syn keyword xsMacro PERL_FILTER_EXISTS PERL_FLUSHALL_FOR_CHILD PERL_FPU_INIT
+syn keyword xsMacro PERL_FPU_POST_EXEC PERL_FPU_PRE_EXEC PERL_FS_VERSION
+syn keyword xsMacro PERL_FS_VER_FMT PERL_GCC_BRACE_GROUPS_FORBIDDEN
+syn keyword xsMacro PERL_GET_CONTEXT PERL_GET_INTERP PERL_GET_THX
+syn keyword xsMacro PERL_GET_VARS PERL_GIT_UNPUSHED_COMMITS
+syn keyword xsMacro PERL_GLOBAL_STRUCT PERL_GPROF_MONCONTROL PERL_HASH
+syn keyword xsMacro PERL_HASH_INTERNAL PERL_HASH_INTERNAL_ PERL_HASH_SEED
+syn keyword xsMacro PERL_HV_ARRAY_ALLOC_BYTES PERL_IMPLICIT_CONTEXT
+syn keyword xsMacro PERL_INTERPRETER_SIZE_UPTO_MEMBER PERL_INT_MAX
+syn keyword xsMacro PERL_INT_MIN PERL_LOADMOD_DENY PERL_LOADMOD_IMPORT_OPS
+syn keyword xsMacro PERL_LOADMOD_NOIMPORT PERL_LONG_MAX PERL_LONG_MIN
+syn keyword xsMacro PERL_MALLOC_WRAP PERL_MG_UFUNC PERL_MY_SNPRINTF_GUARDED
+syn keyword xsMacro PERL_MY_VSNPRINTF_GUARDED PERL_NEED_MY_BETOH16
+syn keyword xsMacro PERL_NEED_MY_BETOH32 PERL_NEED_MY_BETOHI
+syn keyword xsMacro PERL_NEED_MY_BETOHL PERL_NEED_MY_BETOHS
+syn keyword xsMacro PERL_NEED_MY_HTOBE16 PERL_NEED_MY_HTOBE32
+syn keyword xsMacro PERL_NEED_MY_HTOBEI PERL_NEED_MY_HTOBEL
+syn keyword xsMacro PERL_NEED_MY_HTOBES PERL_NEED_MY_HTOLE16
+syn keyword xsMacro PERL_NEED_MY_HTOLE32 PERL_NEED_MY_HTOLEI
+syn keyword xsMacro PERL_NEED_MY_HTOLEL PERL_NEED_MY_HTOLES
+syn keyword xsMacro PERL_NEED_MY_LETOH16 PERL_NEED_MY_LETOH32
+syn keyword xsMacro PERL_NEED_MY_LETOHI PERL_NEED_MY_LETOHL
+syn keyword xsMacro PERL_NEED_MY_LETOHS PERL_NO_DEV_RANDOM PERL_OBJECT_THIS
+syn keyword xsMacro PERL_OBJECT_THIS_ PERL_PADSEQ_INTRO PERL_PATCHNUM
+syn keyword xsMacro PERL_PPADDR_INITED PERL_PPDEF PERL_PRESERVE_IVUV
+syn keyword xsMacro PERL_PRIeldbl PERL_PRIfldbl PERL_PRIgldbl
+syn keyword xsMacro PERL_PV_ESCAPE_ALL PERL_PV_ESCAPE_FIRSTCHAR
+syn keyword xsMacro PERL_PV_ESCAPE_NOBACKSLASH PERL_PV_ESCAPE_NOCLEAR
+syn keyword xsMacro PERL_PV_ESCAPE_NONASCII PERL_PV_ESCAPE_QUOTE
+syn keyword xsMacro PERL_PV_ESCAPE_RE PERL_PV_ESCAPE_UNI
+syn keyword xsMacro PERL_PV_ESCAPE_UNI_DETECT PERL_PV_PRETTY_DUMP
+syn keyword xsMacro PERL_PV_PRETTY_ELLIPSES PERL_PV_PRETTY_LTGT
+syn keyword xsMacro PERL_PV_PRETTY_NOCLEAR PERL_PV_PRETTY_QUOTE
+syn keyword xsMacro PERL_PV_PRETTY_REGPROP PERL_QUAD_MAX PERL_QUAD_MIN
+syn keyword xsMacro PERL_REENTR_API PERL_REGMATCH_SLAB_SLOTS PERL_REVISION
+syn keyword xsMacro PERL_SCAN_ALLOW_UNDERSCORES PERL_SCAN_DISALLOW_PREFIX
+syn keyword xsMacro PERL_SCAN_GREATER_THAN_UV_MAX PERL_SCAN_SILENT_ILLDIGIT
+syn keyword xsMacro PERL_SCAN_SILENT_NON_PORTABLE PERL_SCNfldbl
+syn keyword xsMacro PERL_SCRIPT_MODE PERL_SET_CONTEXT PERL_SET_INTERP
+syn keyword xsMacro PERL_SET_PHASE PERL_SET_THX PERL_SHORT_MAX PERL_SHORT_MIN
+syn keyword xsMacro PERL_SIGNALS_UNSAFE_FLAG PERL_STACK_OVERFLOW_CHECK
+syn keyword xsMacro PERL_STATIC_INLINE PERL_STRLEN_EXPAND_SHIFT
+syn keyword xsMacro PERL_STRLEN_ROUNDUP PERL_STRLEN_ROUNDUP_QUANTUM
+syn keyword xsMacro PERL_SUBVERSION PERL_SUB_DEPTH_WARN PERL_SYS_INIT
+syn keyword xsMacro PERL_SYS_INIT3 PERL_SYS_INIT3_BODY PERL_SYS_INIT_BODY
+syn keyword xsMacro PERL_SYS_TERM PERL_SYS_TERM_BODY PERL_TARGETARCH
+syn keyword xsMacro PERL_UCHAR_MAX PERL_UCHAR_MIN PERL_UINT_MAX PERL_UINT_MIN
+syn keyword xsMacro PERL_ULONG_MAX PERL_ULONG_MIN PERL_UNICODE_ALL_FLAGS
+syn keyword xsMacro PERL_UNICODE_ARGV PERL_UNICODE_ARGV_FLAG
+syn keyword xsMacro PERL_UNICODE_DEFAULT_FLAGS PERL_UNICODE_IN
+syn keyword xsMacro PERL_UNICODE_INOUT PERL_UNICODE_INOUT_FLAG
+syn keyword xsMacro PERL_UNICODE_IN_FLAG PERL_UNICODE_LOCALE
+syn keyword xsMacro PERL_UNICODE_LOCALE_FLAG PERL_UNICODE_MAX
+syn keyword xsMacro PERL_UNICODE_OUT PERL_UNICODE_OUT_FLAG PERL_UNICODE_STD
+syn keyword xsMacro PERL_UNICODE_STDERR PERL_UNICODE_STDERR_FLAG
+syn keyword xsMacro PERL_UNICODE_STDIN PERL_UNICODE_STDIN_FLAG
+syn keyword xsMacro PERL_UNICODE_STDOUT PERL_UNICODE_STDOUT_FLAG
+syn keyword xsMacro PERL_UNICODE_STD_FLAG PERL_UNICODE_UTF8CACHEASSERT
+syn keyword xsMacro PERL_UNICODE_UTF8CACHEASSERT_FLAG
+syn keyword xsMacro PERL_UNICODE_WIDESYSCALLS PERL_UNICODE_WIDESYSCALLS_FLAG
+syn keyword xsMacro PERL_UNUSED_ARG PERL_UNUSED_CONTEXT PERL_UNUSED_DECL
+syn keyword xsMacro PERL_UNUSED_VAR PERL_UQUAD_MAX PERL_UQUAD_MIN
+syn keyword xsMacro PERL_USES_PL_PIDSTATUS PERL_USE_GCC_BRACE_GROUPS
+syn keyword xsMacro PERL_USHORT_MAX PERL_USHORT_MIN PERL_VERSION
+syn keyword xsMacro PERL_VERSION_STRING PERL_WAIT_FOR_CHILDREN
+syn keyword xsMacro PERL_WARNHOOK_FATAL PERL_WRITE_MSG_TO_CONSOLE
+syn keyword xsMacro PERL_XS_EXPORT_C PHASE_CHANGE_PROBE PHOSTNAME
+syn keyword xsMacro PIPESOCK_MODE PIPE_OPEN_MODE PLUGEXPR PLUGSTMT PLUS
+syn keyword xsMacro PL_ASCII PL_AboveLatin1 PL_Argv PL_Cmd PL_DBcv PL_DBgv
+syn keyword xsMacro PL_DBline PL_DBsignal PL_DBsingle PL_DBsub PL_DBtrace
+syn keyword xsMacro PL_Dir PL_Env PL_Gappctx PL_Gcheck PL_Gcheck_mutex
+syn keyword xsMacro PL_Gcsighandlerp PL_Gcurinterp PL_Gdo_undump
+syn keyword xsMacro PL_Gdollarzero_mutex PL_Gfold_locale PL_Ghints_mutex
+syn keyword xsMacro PL_Gkeyword_plugin PL_Gmalloc_mutex PL_Gmmap_page_size
+syn keyword xsMacro PL_Gmy_ctx_mutex PL_Gmy_cxt_index PL_Gop_mutex PL_Gop_seq
+syn keyword xsMacro PL_Gop_sequence PL_Gperlio_debug_fd PL_Gperlio_fd_refcnt
+syn keyword xsMacro PL_Gperlio_fd_refcnt_size PL_Gperlio_mutex PL_Gppaddr
+syn keyword xsMacro PL_Gsh_path PL_Gsig_defaulting PL_Gsig_handlers_initted
+syn keyword xsMacro PL_Gsig_ignoring PL_Gsig_trapped PL_Gsigfpe_saved
+syn keyword xsMacro PL_Gsv_placeholder PL_Gthr_key PL_Gtimesbase
+syn keyword xsMacro PL_Guse_safe_putenv PL_Gveto_cleanup PL_Gwatch_pvx
+syn keyword xsMacro PL_L1Cased PL_L1PosixAlnum PL_L1PosixAlpha
+syn keyword xsMacro PL_L1PosixGraph PL_L1PosixLower PL_L1PosixPrint
+syn keyword xsMacro PL_L1PosixPunct PL_L1PosixUpper PL_L1PosixWord PL_LIO
+syn keyword xsMacro PL_Latin1 PL_Mem PL_MemParse PL_MemShared
+syn keyword xsMacro PL_OP_SLAB_ALLOC PL_OpPtr PL_OpSlab PL_OpSpace
+syn keyword xsMacro PL_PerlSpace PL_PosixAlnum PL_PosixAlpha PL_PosixBlank
+syn keyword xsMacro PL_PosixCntrl PL_PosixDigit PL_PosixGraph PL_PosixLower
+syn keyword xsMacro PL_PosixPrint PL_PosixPunct PL_PosixSpace PL_PosixUpper
+syn keyword xsMacro PL_PosixWord PL_PosixXDigit PL_Proc PL_Sock PL_StdIO
+syn keyword xsMacro PL_Sv PL_VertSpace PL_XPerlSpace PL_XPosixBlank
+syn keyword xsMacro PL_XPosixCntrl PL_XPosixSpace PL_XPosixXDigit PL_Xpv
+syn keyword xsMacro PL_amagic_generation PL_an PL_apiversion PL_appctx
+syn keyword xsMacro PL_argvgv PL_argvout_stack PL_argvoutgv PL_basetime
+syn keyword xsMacro PL_beginav PL_beginav_save PL_blockhooks PL_body_arenas
+syn keyword xsMacro PL_body_roots PL_bodytarget PL_bostr PL_breakable_sub_gen
+syn keyword xsMacro PL_check_mutex PL_checkav PL_checkav_save PL_chopset
+syn keyword xsMacro PL_clocktick PL_collation_ix PL_collation_name
+syn keyword xsMacro PL_collation_standard PL_collxfrm_base PL_collxfrm_mult
+syn keyword xsMacro PL_colors PL_colorset PL_compcv PL_compiling PL_comppad
+syn keyword xsMacro PL_comppad_name PL_comppad_name_fill
+syn keyword xsMacro PL_comppad_name_floor PL_cop_seqmax PL_cryptseen
+syn keyword xsMacro PL_cshlen PL_csighandlerp PL_curcop PL_curcopdb
+syn keyword xsMacro PL_curinterp PL_curpad PL_curpm PL_curstack
+syn keyword xsMacro PL_curstackinfo PL_curstash PL_curstname
+syn keyword xsMacro PL_custom_op_descs PL_custom_op_names PL_custom_ops
+syn keyword xsMacro PL_cv_has_eval PL_dbargs PL_debstash PL_debug
+syn keyword xsMacro PL_debug_pad PL_def_layerlist PL_defgv PL_defoutgv
+syn keyword xsMacro PL_defstash PL_delaymagic PL_delaymagic_egid
+syn keyword xsMacro PL_delaymagic_euid PL_delaymagic_gid PL_delaymagic_uid
+syn keyword xsMacro PL_destroyhook PL_diehook PL_dirty PL_do_undump
+syn keyword xsMacro PL_dollarzero_mutex PL_doswitches PL_dowarn PL_dumper_fd
+syn keyword xsMacro PL_dumpindent PL_e_script PL_efloatbuf PL_efloatsize
+syn keyword xsMacro PL_encoding PL_endav PL_envgv PL_errgv PL_errors
+syn keyword xsMacro PL_eval_root PL_eval_start PL_evalseq PL_exit_flags
+syn keyword xsMacro PL_exitlist PL_exitlistlen PL_fdpid PL_filemode
+syn keyword xsMacro PL_firstgv PL_forkprocess PL_formfeed PL_formtarget
+syn keyword xsMacro PL_generation PL_gensym PL_glob_index PL_globalstash
+syn keyword xsMacro PL_globhook PL_hash_seed PL_hintgv PL_hints
+syn keyword xsMacro PL_hints_mutex PL_hv_fetch_ent_mh PL_in_clean_all
+syn keyword xsMacro PL_in_clean_objs PL_in_eval PL_in_load_module PL_incgv
+syn keyword xsMacro PL_initav PL_inplace PL_isarev PL_keyword_plugin
+syn keyword xsMacro PL_known_layers PL_last_in_gv PL_last_swash_hv
+syn keyword xsMacro PL_last_swash_key PL_last_swash_klen PL_last_swash_slen
+syn keyword xsMacro PL_last_swash_tmps PL_lastfd PL_lastgotoprobe
+syn keyword xsMacro PL_laststatval PL_laststype PL_localizing PL_localpatches
+syn keyword xsMacro PL_lockhook PL_madskills PL_main_cv PL_main_root
+syn keyword xsMacro PL_main_start PL_mainstack PL_malloc_mutex PL_markstack
+syn keyword xsMacro PL_markstack_max PL_markstack_ptr PL_max_intro_pending
+syn keyword xsMacro PL_maxo PL_maxsysfd PL_memory_debug_header PL_mess_sv
+syn keyword xsMacro PL_min_intro_pending PL_minus_E PL_minus_F PL_minus_a
+syn keyword xsMacro PL_minus_c PL_minus_l PL_minus_n PL_minus_p
+syn keyword xsMacro PL_mmap_page_size PL_modcount PL_modglobal
+syn keyword xsMacro PL_my_ctx_mutex PL_my_cxt_index PL_my_cxt_keys
+syn keyword xsMacro PL_my_cxt_list PL_my_cxt_size PL_nomemok PL_nrs
+syn keyword xsMacro PL_numeric_local PL_numeric_name PL_numeric_radix_sv
+syn keyword xsMacro PL_numeric_standard PL_ofsgv PL_oldname PL_op PL_op_mask
+syn keyword xsMacro PL_op_mutex PL_op_seq PL_op_sequence PL_opfreehook
+syn keyword xsMacro PL_opsave PL_origalen PL_origargc PL_origargv
+syn keyword xsMacro PL_origenviron PL_origfilename PL_ors_sv PL_osname
+syn keyword xsMacro PL_pad_reset_pending PL_padix PL_padix_floor PL_parser
+syn keyword xsMacro PL_patchlevel PL_peepp PL_perl_destruct_level PL_perldb
+syn keyword xsMacro PL_perlio PL_perlio_debug_fd PL_perlio_fd_refcnt
+syn keyword xsMacro PL_perlio_fd_refcnt_size PL_perlio_mutex PL_phase
+syn keyword xsMacro PL_pidstatus PL_preambleav PL_profiledata PL_psig_name
+syn keyword xsMacro PL_psig_pend PL_psig_ptr PL_ptr_table PL_reentrant_buffer
+syn keyword xsMacro PL_reentrant_retint PL_reg_curpm PL_reg_eval_set
+syn keyword xsMacro PL_reg_flags PL_reg_leftiter PL_reg_magic
+syn keyword xsMacro PL_reg_match_utf8 PL_reg_maxiter PL_reg_oldcurpm
+syn keyword xsMacro PL_reg_oldpos PL_reg_oldsaved PL_reg_oldsavedlen
+syn keyword xsMacro PL_reg_poscache PL_reg_poscache_size PL_reg_start_tmp
+syn keyword xsMacro PL_reg_start_tmpl PL_reg_starttry PL_reg_state
+syn keyword xsMacro PL_regdummy PL_regeol PL_regex_pad PL_regex_padav
+syn keyword xsMacro PL_reginput PL_reginterp_cnt PL_registered_mros
+syn keyword xsMacro PL_reglastcloseparen PL_reglastparen PL_regmatch_slab
+syn keyword xsMacro PL_regmatch_state PL_regoffs PL_regsize PL_rehash_seed
+syn keyword xsMacro PL_rehash_seed_set PL_replgv PL_restartjmpenv
+syn keyword xsMacro PL_restartop PL_rpeepp PL_rs PL_runops PL_savebegin
+syn keyword xsMacro PL_savestack PL_savestack_ix PL_savestack_max
+syn keyword xsMacro PL_sawampersand PL_scopestack PL_scopestack_ix
+syn keyword xsMacro PL_scopestack_max PL_scopestack_name PL_secondgv
+syn keyword xsMacro PL_sharehook PL_sig_defaulting PL_sig_handlers_initted
+syn keyword xsMacro PL_sig_ignoring PL_sig_pending PL_sig_trapped
+syn keyword xsMacro PL_sigfpe_saved PL_sighandlerp PL_signalhook PL_signals
+syn keyword xsMacro PL_slab_count PL_slabs PL_sort_RealCmp PL_sortcop
+syn keyword xsMacro PL_sortstash PL_splitstr PL_srand_called PL_stack_base
+syn keyword xsMacro PL_stack_max PL_stack_sp PL_start_env PL_stashcache
+syn keyword xsMacro PL_statbuf PL_statcache PL_statgv PL_statname
+syn keyword xsMacro PL_statusvalue PL_statusvalue_posix PL_statusvalue_vms
+syn keyword xsMacro PL_stderrgv PL_stdingv PL_strtab PL_sub_generation
+syn keyword xsMacro PL_subline PL_subname PL_sv_arenaroot PL_sv_count
+syn keyword xsMacro PL_sv_no PL_sv_objcount PL_sv_placeholder PL_sv_root
+syn keyword xsMacro PL_sv_serial PL_sv_undef PL_sv_yes PL_sys_intern
+syn keyword xsMacro PL_taint_warn PL_tainted PL_tainting PL_thr_key
+syn keyword xsMacro PL_threadhook PL_timesbase PL_timesbuf PL_tmps_floor
+syn keyword xsMacro PL_tmps_ix PL_tmps_max PL_tmps_stack PL_top_env
+syn keyword xsMacro PL_toptarget PL_unicode PL_unitcheckav
+syn keyword xsMacro PL_unitcheckav_save PL_unlockhook PL_unsafe
+syn keyword xsMacro PL_use_safe_putenv PL_utf8_X_L PL_utf8_X_LV PL_utf8_X_LVT
+syn keyword xsMacro PL_utf8_X_LV_LVT_V PL_utf8_X_T PL_utf8_X_V
+syn keyword xsMacro PL_utf8_X_begin PL_utf8_X_extend PL_utf8_X_non_hangul
+syn keyword xsMacro PL_utf8_X_prepend PL_utf8_alnum PL_utf8_alpha
+syn keyword xsMacro PL_utf8_digit PL_utf8_foldable PL_utf8_foldclosures
+syn keyword xsMacro PL_utf8_graph PL_utf8_idcont PL_utf8_idstart
+syn keyword xsMacro PL_utf8_lower PL_utf8_mark PL_utf8_perl_idstart
+syn keyword xsMacro PL_utf8_print PL_utf8_punct PL_utf8_quotemeta
+syn keyword xsMacro PL_utf8_space PL_utf8_tofold PL_utf8_tolower
+syn keyword xsMacro PL_utf8_totitle PL_utf8_toupper PL_utf8_upper
+syn keyword xsMacro PL_utf8_xdigit PL_utf8_xidcont PL_utf8_xidstart
+syn keyword xsMacro PL_utf8cache PL_utf8locale PL_veto_cleanup PL_vtbl_amagic
+syn keyword xsMacro PL_vtbl_amagicelem PL_vtbl_arylen PL_vtbl_arylen_p
+syn keyword xsMacro PL_vtbl_backref PL_vtbl_bm PL_vtbl_collxfrm
+syn keyword xsMacro PL_vtbl_dbline PL_vtbl_defelem PL_vtbl_env
+syn keyword xsMacro PL_vtbl_envelem PL_vtbl_fm PL_vtbl_hints
+syn keyword xsMacro PL_vtbl_hintselem PL_vtbl_isa PL_vtbl_isaelem
+syn keyword xsMacro PL_vtbl_mglob PL_vtbl_nkeys PL_vtbl_ovrld PL_vtbl_pack
+syn keyword xsMacro PL_vtbl_packelem PL_vtbl_pos PL_vtbl_regdata
+syn keyword xsMacro PL_vtbl_regdatum PL_vtbl_regexp PL_vtbl_sigelem
+syn keyword xsMacro PL_vtbl_substr PL_vtbl_sv PL_vtbl_taint PL_vtbl_utf8
+syn keyword xsMacro PL_vtbl_uvar PL_vtbl_vec PL_vtbl_vstring PL_warnhook
+syn keyword xsMacro PL_watch_pvx PL_watchaddr PL_watchok PL_xmlfp PMFUNC
+syn keyword xsMacro PM_GETRE PM_SETRE PMf_BASE_SHIFT PMf_COMPILETIME
+syn keyword xsMacro PMf_CONST PMf_CONTINUE PMf_EVAL PMf_EXTENDED PMf_FOLD
+syn keyword xsMacro PMf_GLOBAL PMf_KEEP PMf_KEEPCOPY PMf_MAYBE_CONST
+syn keyword xsMacro PMf_MULTILINE PMf_NONDESTRUCT PMf_ONCE PMf_RETAINT
+syn keyword xsMacro PMf_SINGLELINE PMf_USED POPBLOCK POPEVAL POPFORMAT
+syn keyword xsMacro POPLOOP POPMARK POPSTACK POPSTACK_TO POPSUB POPSUBST
+syn keyword xsMacro POP_MULTICALL POP_SAVEARRAY POPi POPl POPn POPp POPpbytex
+syn keyword xsMacro POPpconstx POPpx POPq POPs POPu POPul POPuq POSTDEC
+syn keyword xsMacro POSTINC POWOP PP PREC_LOW PREDEC PREGf_CUTGROUP_SEEN
+syn keyword xsMacro PREGf_IMPLICIT PREGf_NAUGHTY PREGf_SKIP
+syn keyword xsMacro PREGf_VERBARG_SEEN PREINC PREVOPER PRINTF_FORMAT_NULL_OK
+syn keyword xsMacro PRIVATEREF PRIVLIB PRIVLIB_EXP PRIVSHIFT PROCSELFEXE_PATH
+syn keyword xsMacro PRUNE PSEUDO PTHREAD_ATFORK PTHREAD_ATTR_SETDETACHSTATE
+syn keyword xsMacro PTHREAD_CREATE PTHREAD_CREATE_JOINABLE
+syn keyword xsMacro PTHREAD_GETSPECIFIC PTHREAD_GETSPECIFIC_INT PTR2IV PTR2NV
+syn keyword xsMacro PTR2UV PTR2nat PTR2ul PTRSIZE PTRV PUSHBLOCK PUSHEVAL
+syn keyword xsMacro PUSHFORMAT PUSHGIVEN PUSHLOOP_FOR PUSHLOOP_PLAIN PUSHMARK
+syn keyword xsMacro PUSHSTACK PUSHSTACKi PUSHSUB PUSHSUBST PUSHSUB_BASE
+syn keyword xsMacro PUSHSUB_DB PUSHTARG PUSHWHEN PUSH_MULTICALL PUSHi
+syn keyword xsMacro PUSHmortal PUSHn PUSHp PUSHs PUSHu PUTBACK PWGECOS
+syn keyword xsMacro PWPASSWD Pause PeRl_CaTiFy PeRl_StGiFy PerlDir_chdir
+syn keyword xsMacro PerlDir_close PerlDir_mapA PerlDir_mapW PerlDir_mkdir
+syn keyword xsMacro PerlDir_open PerlDir_read PerlDir_rewind PerlDir_rmdir
+syn keyword xsMacro PerlDir_seek PerlDir_tell PerlEnv_ENVgetenv
+syn keyword xsMacro PerlEnv_ENVgetenv_len PerlEnv_clearenv
+syn keyword xsMacro PerlEnv_free_childdir PerlEnv_free_childenv
+syn keyword xsMacro PerlEnv_get_child_IO PerlEnv_get_childdir
+syn keyword xsMacro PerlEnv_get_childenv PerlEnv_getenv PerlEnv_getenv_len
+syn keyword xsMacro PerlEnv_lib_path PerlEnv_os_id PerlEnv_putenv
+syn keyword xsMacro PerlEnv_sitelib_path PerlEnv_uname PerlEnv_vendorlib_path
+syn keyword xsMacro PerlIOArg PerlIOBase PerlIONext PerlIOSelf PerlIOValid
+syn keyword xsMacro PerlIO_canset_cnt PerlIO_exportFILE PerlIO_fast_gets
+syn keyword xsMacro PerlIO_fdopen PerlIO_findFILE PerlIO_getc PerlIO_getname
+syn keyword xsMacro PerlIO_has_base PerlIO_has_cntptr PerlIO_importFILE
+syn keyword xsMacro PerlIO_isutf8 PerlIO_open PerlIO_printf PerlIO_putc
+syn keyword xsMacro PerlIO_puts PerlIO_releaseFILE PerlIO_reopen
+syn keyword xsMacro PerlIO_rewind PerlIO_sprintf PerlIO_stdoutf
+syn keyword xsMacro PerlIO_tmpfile PerlIO_ungetc PerlIO_vprintf
+syn keyword xsMacro PerlLIO_access PerlLIO_chmod PerlLIO_chown PerlLIO_chsize
+syn keyword xsMacro PerlLIO_close PerlLIO_dup PerlLIO_dup2 PerlLIO_flock
+syn keyword xsMacro PerlLIO_fstat PerlLIO_ioctl PerlLIO_isatty PerlLIO_link
+syn keyword xsMacro PerlLIO_lseek PerlLIO_lstat PerlLIO_mkstemp
+syn keyword xsMacro PerlLIO_mktemp PerlLIO_open PerlLIO_open3 PerlLIO_read
+syn keyword xsMacro PerlLIO_rename PerlLIO_setmode PerlLIO_stat
+syn keyword xsMacro PerlLIO_tmpnam PerlLIO_umask PerlLIO_unlink PerlLIO_utime
+syn keyword xsMacro PerlLIO_write PerlMemParse_calloc PerlMemParse_free
+syn keyword xsMacro PerlMemParse_free_lock PerlMemParse_get_lock
+syn keyword xsMacro PerlMemParse_is_locked PerlMemParse_malloc
+syn keyword xsMacro PerlMemParse_realloc PerlMemShared_calloc
+syn keyword xsMacro PerlMemShared_free PerlMemShared_free_lock
+syn keyword xsMacro PerlMemShared_get_lock PerlMemShared_is_locked
+syn keyword xsMacro PerlMemShared_malloc PerlMemShared_realloc PerlMem_calloc
+syn keyword xsMacro PerlMem_free PerlMem_free_lock PerlMem_get_lock
+syn keyword xsMacro PerlMem_is_locked PerlMem_malloc PerlMem_realloc
+syn keyword xsMacro PerlProc_DynaLoad PerlProc_GetOSError PerlProc__exit
+syn keyword xsMacro PerlProc_abort PerlProc_crypt PerlProc_execl
+syn keyword xsMacro PerlProc_execv PerlProc_execvp PerlProc_exit
+syn keyword xsMacro PerlProc_fork PerlProc_getegid PerlProc_geteuid
+syn keyword xsMacro PerlProc_getgid PerlProc_getlogin PerlProc_getpid
+syn keyword xsMacro PerlProc_gettimeofday PerlProc_getuid PerlProc_kill
+syn keyword xsMacro PerlProc_killpg PerlProc_lasthost PerlProc_longjmp
+syn keyword xsMacro PerlProc_pause PerlProc_pclose PerlProc_pipe
+syn keyword xsMacro PerlProc_popen PerlProc_popen_list PerlProc_setgid
+syn keyword xsMacro PerlProc_setjmp PerlProc_setuid PerlProc_signal
+syn keyword xsMacro PerlProc_sleep PerlProc_spawnvp PerlProc_times
+syn keyword xsMacro PerlProc_wait PerlProc_waitpid PerlSIO_canset_cnt
+syn keyword xsMacro PerlSIO_clearerr PerlSIO_fast_gets PerlSIO_fclose
+syn keyword xsMacro PerlSIO_fdopen PerlSIO_fdupopen PerlSIO_feof
+syn keyword xsMacro PerlSIO_ferror PerlSIO_fflush PerlSIO_fgetc
+syn keyword xsMacro PerlSIO_fgetpos PerlSIO_fgets PerlSIO_fileno
+syn keyword xsMacro PerlSIO_fopen PerlSIO_fputc PerlSIO_fputs PerlSIO_fread
+syn keyword xsMacro PerlSIO_freopen PerlSIO_fseek PerlSIO_fsetpos
+syn keyword xsMacro PerlSIO_ftell PerlSIO_fwrite PerlSIO_get_base
+syn keyword xsMacro PerlSIO_get_bufsiz PerlSIO_get_cnt PerlSIO_get_ptr
+syn keyword xsMacro PerlSIO_has_base PerlSIO_has_cntptr PerlSIO_init
+syn keyword xsMacro PerlSIO_printf PerlSIO_rewind PerlSIO_set_cnt
+syn keyword xsMacro PerlSIO_set_ptr PerlSIO_setbuf PerlSIO_setlinebuf
+syn keyword xsMacro PerlSIO_setvbuf PerlSIO_stderr PerlSIO_stdin
+syn keyword xsMacro PerlSIO_stdout PerlSIO_stdoutf PerlSIO_tmpfile
+syn keyword xsMacro PerlSIO_ungetc PerlSIO_vprintf PerlSock_accept
+syn keyword xsMacro PerlSock_bind PerlSock_closesocket PerlSock_connect
+syn keyword xsMacro PerlSock_endhostent PerlSock_endnetent
+syn keyword xsMacro PerlSock_endprotoent PerlSock_endservent
+syn keyword xsMacro PerlSock_gethostbyaddr PerlSock_gethostbyname
+syn keyword xsMacro PerlSock_gethostent PerlSock_gethostname
+syn keyword xsMacro PerlSock_getnetbyaddr PerlSock_getnetbyname
+syn keyword xsMacro PerlSock_getnetent PerlSock_getpeername
+syn keyword xsMacro PerlSock_getprotobyname PerlSock_getprotobynumber
+syn keyword xsMacro PerlSock_getprotoent PerlSock_getservbyname
+syn keyword xsMacro PerlSock_getservbyport PerlSock_getservent
+syn keyword xsMacro PerlSock_getsockname PerlSock_getsockopt PerlSock_htonl
+syn keyword xsMacro PerlSock_htons PerlSock_inet_addr PerlSock_inet_ntoa
+syn keyword xsMacro PerlSock_listen PerlSock_ntohl PerlSock_ntohs
+syn keyword xsMacro PerlSock_recv PerlSock_recvfrom PerlSock_select
+syn keyword xsMacro PerlSock_send PerlSock_sendto PerlSock_sethostent
+syn keyword xsMacro PerlSock_setnetent PerlSock_setprotoent
+syn keyword xsMacro PerlSock_setservent PerlSock_setsockopt PerlSock_shutdown
+syn keyword xsMacro PerlSock_socket PerlSock_socketpair Perl_assert
+syn keyword xsMacro Perl_atan2 Perl_atof Perl_atof2 Perl_ceil Perl_cos
+syn keyword xsMacro Perl_debug_log Perl_error_log Perl_exp Perl_floor
+syn keyword xsMacro Perl_fmod Perl_fp_class Perl_fp_class_denorm
+syn keyword xsMacro Perl_fp_class_inf Perl_fp_class_nan Perl_fp_class_ndenorm
+syn keyword xsMacro Perl_fp_class_ninf Perl_fp_class_nnorm Perl_fp_class_norm
+syn keyword xsMacro Perl_fp_class_nzero Perl_fp_class_pdenorm
+syn keyword xsMacro Perl_fp_class_pinf Perl_fp_class_pnorm
+syn keyword xsMacro Perl_fp_class_pzero Perl_fp_class_qnan Perl_fp_class_snan
+syn keyword xsMacro Perl_fp_class_zero Perl_frexp Perl_isfinite Perl_isinf
+syn keyword xsMacro Perl_isnan Perl_log Perl_malloc_good_size Perl_modf
+syn keyword xsMacro Perl_pow Perl_pp_accept Perl_pp_aelemfast_lex
+syn keyword xsMacro Perl_pp_andassign Perl_pp_avalues Perl_pp_bind
+syn keyword xsMacro Perl_pp_bit_xor Perl_pp_chmod Perl_pp_chomp
+syn keyword xsMacro Perl_pp_connect Perl_pp_cos Perl_pp_custom
+syn keyword xsMacro Perl_pp_dbmclose Perl_pp_dofile Perl_pp_dor
+syn keyword xsMacro Perl_pp_dorassign Perl_pp_dump Perl_pp_egrent
+syn keyword xsMacro Perl_pp_enetent Perl_pp_eprotoent Perl_pp_epwent
+syn keyword xsMacro Perl_pp_eservent Perl_pp_exp Perl_pp_fcntl
+syn keyword xsMacro Perl_pp_ftatime Perl_pp_ftbinary Perl_pp_ftblk
+syn keyword xsMacro Perl_pp_ftchr Perl_pp_ftctime Perl_pp_ftdir
+syn keyword xsMacro Perl_pp_fteexec Perl_pp_fteowned Perl_pp_fteread
+syn keyword xsMacro Perl_pp_ftewrite Perl_pp_ftfile Perl_pp_ftmtime
+syn keyword xsMacro Perl_pp_ftpipe Perl_pp_ftrexec Perl_pp_ftrwrite
+syn keyword xsMacro Perl_pp_ftsgid Perl_pp_ftsize Perl_pp_ftsock
+syn keyword xsMacro Perl_pp_ftsuid Perl_pp_ftsvtx Perl_pp_ftzero
+syn keyword xsMacro Perl_pp_getpeername Perl_pp_getsockname Perl_pp_ggrgid
+syn keyword xsMacro Perl_pp_ggrnam Perl_pp_ghbyaddr Perl_pp_ghbyname
+syn keyword xsMacro Perl_pp_gnbyaddr Perl_pp_gnbyname Perl_pp_gpbyname
+syn keyword xsMacro Perl_pp_gpbynumber Perl_pp_gpwnam Perl_pp_gpwuid
+syn keyword xsMacro Perl_pp_gsbyname Perl_pp_gsbyport Perl_pp_gsockopt
+syn keyword xsMacro Perl_pp_hex Perl_pp_i_postdec Perl_pp_i_postinc
+syn keyword xsMacro Perl_pp_i_predec Perl_pp_i_preinc Perl_pp_keys
+syn keyword xsMacro Perl_pp_kill Perl_pp_lcfirst Perl_pp_lineseq
+syn keyword xsMacro Perl_pp_listen Perl_pp_localtime Perl_pp_log
+syn keyword xsMacro Perl_pp_lstat Perl_pp_mapstart Perl_pp_msgctl
+syn keyword xsMacro Perl_pp_msgget Perl_pp_msgrcv Perl_pp_msgsnd
+syn keyword xsMacro Perl_pp_orassign Perl_pp_padany Perl_pp_pop
+syn keyword xsMacro Perl_pp_postdec Perl_pp_predec Perl_pp_reach Perl_pp_read
+syn keyword xsMacro Perl_pp_recv Perl_pp_regcmaybe Perl_pp_rindex
+syn keyword xsMacro Perl_pp_rv2hv Perl_pp_rvalues Perl_pp_say Perl_pp_scalar
+syn keyword xsMacro Perl_pp_schomp Perl_pp_scope Perl_pp_seek Perl_pp_semop
+syn keyword xsMacro Perl_pp_send Perl_pp_sge Perl_pp_sgrent Perl_pp_sgt
+syn keyword xsMacro Perl_pp_shmctl Perl_pp_shmget Perl_pp_shmread
+syn keyword xsMacro Perl_pp_shutdown Perl_pp_slt Perl_pp_snetent
+syn keyword xsMacro Perl_pp_socket Perl_pp_sprotoent Perl_pp_spwent
+syn keyword xsMacro Perl_pp_sqrt Perl_pp_sservent Perl_pp_ssockopt
+syn keyword xsMacro Perl_pp_symlink Perl_pp_transr Perl_pp_unlink
+syn keyword xsMacro Perl_pp_utime Perl_pp_values Perl_safesysmalloc_size
+syn keyword xsMacro Perl_sharepvn Perl_signbit Perl_sin Perl_sqrt
+syn keyword xsMacro Perl_va_copy PmopSTASH PmopSTASHPV PmopSTASHPV_set
+syn keyword xsMacro PmopSTASH_flags PmopSTASH_flags_set PmopSTASH_free
+syn keyword xsMacro PmopSTASH_set Poison PoisonFree PoisonNew PoisonWith
+syn keyword xsMacro QR_PAT_MODS QUADKIND QUAD_IS_INT QUAD_IS_INT64_T
+syn keyword xsMacro QUAD_IS_LONG QUAD_IS_LONG_LONG QUAD_IS___INT64 QWLIST
+syn keyword xsMacro RANDBITS RANDOM_R_PROTO RD_NODATA READDIR64_R_PROTO
+syn keyword xsMacro READDIR_R_PROTO REENTRANT_PROTO_B_B REENTRANT_PROTO_B_BI
+syn keyword xsMacro REENTRANT_PROTO_B_BW REENTRANT_PROTO_B_CCD
+syn keyword xsMacro REENTRANT_PROTO_B_CCS REENTRANT_PROTO_B_IBI
+syn keyword xsMacro REENTRANT_PROTO_B_IBW REENTRANT_PROTO_B_SB
+syn keyword xsMacro REENTRANT_PROTO_B_SBI REENTRANT_PROTO_I_BI
+syn keyword xsMacro REENTRANT_PROTO_I_BW REENTRANT_PROTO_I_CCSBWR
+syn keyword xsMacro REENTRANT_PROTO_I_CCSD REENTRANT_PROTO_I_CII
+syn keyword xsMacro REENTRANT_PROTO_I_CIISD REENTRANT_PROTO_I_CSBI
+syn keyword xsMacro REENTRANT_PROTO_I_CSBIR REENTRANT_PROTO_I_CSBWR
+syn keyword xsMacro REENTRANT_PROTO_I_CSBWRE REENTRANT_PROTO_I_CSD
+syn keyword xsMacro REENTRANT_PROTO_I_CWISBWRE REENTRANT_PROTO_I_CWISD
+syn keyword xsMacro REENTRANT_PROTO_I_D REENTRANT_PROTO_I_H
+syn keyword xsMacro REENTRANT_PROTO_I_IBI REENTRANT_PROTO_I_IBW
+syn keyword xsMacro REENTRANT_PROTO_I_ICBI REENTRANT_PROTO_I_ICSBWR
+syn keyword xsMacro REENTRANT_PROTO_I_ICSD REENTRANT_PROTO_I_ID
+syn keyword xsMacro REENTRANT_PROTO_I_IISD REENTRANT_PROTO_I_ISBWR
+syn keyword xsMacro REENTRANT_PROTO_I_ISD REENTRANT_PROTO_I_LISBI
+syn keyword xsMacro REENTRANT_PROTO_I_LISD REENTRANT_PROTO_I_LS
+syn keyword xsMacro REENTRANT_PROTO_I_SB REENTRANT_PROTO_I_SBI
+syn keyword xsMacro REENTRANT_PROTO_I_SBIE REENTRANT_PROTO_I_SBIH
+syn keyword xsMacro REENTRANT_PROTO_I_SBIR REENTRANT_PROTO_I_SBWR
+syn keyword xsMacro REENTRANT_PROTO_I_SBWRE REENTRANT_PROTO_I_SD
+syn keyword xsMacro REENTRANT_PROTO_I_ST REENTRANT_PROTO_I_St
+syn keyword xsMacro REENTRANT_PROTO_I_TISD REENTRANT_PROTO_I_TS
+syn keyword xsMacro REENTRANT_PROTO_I_TSBI REENTRANT_PROTO_I_TSBIR
+syn keyword xsMacro REENTRANT_PROTO_I_TSBWR REENTRANT_PROTO_I_TSR
+syn keyword xsMacro REENTRANT_PROTO_I_TsISBWRE REENTRANT_PROTO_I_UISBWRE
+syn keyword xsMacro REENTRANT_PROTO_I_iS REENTRANT_PROTO_I_lS
+syn keyword xsMacro REENTRANT_PROTO_I_uISBWRE REENTRANT_PROTO_S_CBI
+syn keyword xsMacro REENTRANT_PROTO_S_CCSBI REENTRANT_PROTO_S_CIISBIE
+syn keyword xsMacro REENTRANT_PROTO_S_CSBI REENTRANT_PROTO_S_CSBIE
+syn keyword xsMacro REENTRANT_PROTO_S_CWISBIE REENTRANT_PROTO_S_CWISBWIE
+syn keyword xsMacro REENTRANT_PROTO_S_ICSBI REENTRANT_PROTO_S_ISBI
+syn keyword xsMacro REENTRANT_PROTO_S_LISBI REENTRANT_PROTO_S_SBI
+syn keyword xsMacro REENTRANT_PROTO_S_SBIE REENTRANT_PROTO_S_SBW
+syn keyword xsMacro REENTRANT_PROTO_S_TISBI REENTRANT_PROTO_S_TSBI
+syn keyword xsMacro REENTRANT_PROTO_S_TSBIE REENTRANT_PROTO_S_TWISBIE
+syn keyword xsMacro REENTRANT_PROTO_V_D REENTRANT_PROTO_V_H
+syn keyword xsMacro REENTRANT_PROTO_V_ID REENTR_H REENTR_MEMZERO REF
+syn keyword xsMacro REFCOUNTED_HE_EXISTS REFCOUNTED_HE_KEY_UTF8 REFF REFFA
+syn keyword xsMacro REFFL REFFU REFGEN REF_HE_KEY REGMATCH_STATE_MAX
+syn keyword xsMacro REGNODE_MAX REGNODE_SIMPLE REGNODE_VARIES REG_ANY
+syn keyword xsMacro REG_INFTY REG_MAGIC REG_SEEN_CANY REG_SEEN_CUTGROUP
+syn keyword xsMacro REG_SEEN_EVAL REG_SEEN_EXACTF_SHARP_S REG_SEEN_GPOS
+syn keyword xsMacro REG_SEEN_LOOKBEHIND REG_SEEN_RECURSE
+syn keyword xsMacro REG_SEEN_RUN_ON_COMMENT REG_SEEN_SANY REG_SEEN_VERBARG
+syn keyword xsMacro REG_SEEN_ZERO_LEN REG_TOP_LEVEL_BRANCHES RELOP RENUM
+syn keyword xsMacro REQUIRE RESTORE_ERRNO RESTORE_NUMERIC_LOCAL
+syn keyword xsMacro RESTORE_NUMERIC_STANDARD RETPUSHNO RETPUSHUNDEF
+syn keyword xsMacro RETPUSHYES RETSETNO RETSETUNDEF RETSETYES RETURN RETURNOP
+syn keyword xsMacro RETURNX RETURN_PROBE REXEC_CHECKED REXEC_COPY_STR
+syn keyword xsMacro REXEC_IGNOREPOS REXEC_NOT_FIRST REXEC_SCREAM
+syn keyword xsMacro RE_DEBUG_COMPILE_DUMP RE_DEBUG_COMPILE_FLAGS
+syn keyword xsMacro RE_DEBUG_COMPILE_MASK RE_DEBUG_COMPILE_OPTIMISE
+syn keyword xsMacro RE_DEBUG_COMPILE_PARSE RE_DEBUG_COMPILE_TRIE
+syn keyword xsMacro RE_DEBUG_EXECUTE_INTUIT RE_DEBUG_EXECUTE_MASK
+syn keyword xsMacro RE_DEBUG_EXECUTE_MATCH RE_DEBUG_EXECUTE_TRIE
+syn keyword xsMacro RE_DEBUG_EXTRA_BUFFERS RE_DEBUG_EXTRA_GPOS
+syn keyword xsMacro RE_DEBUG_EXTRA_MASK RE_DEBUG_EXTRA_OFFDEBUG
+syn keyword xsMacro RE_DEBUG_EXTRA_OFFSETS RE_DEBUG_EXTRA_OPTIMISE
+syn keyword xsMacro RE_DEBUG_EXTRA_STACK RE_DEBUG_EXTRA_STATE
+syn keyword xsMacro RE_DEBUG_EXTRA_TRIE RE_DEBUG_FLAG RE_DEBUG_FLAGS
+syn keyword xsMacro RE_PV_COLOR_DECL RE_PV_QUOTED_DECL RE_SV_DUMPLEN
+syn keyword xsMacro RE_SV_ESCAPE RE_SV_TAIL RE_TRACK_PATTERN_OFFSETS
+syn keyword xsMacro RE_TRIE_MAXBUF_INIT RE_TRIE_MAXBUF_NAME RMS_DIR RMS_FAC
+syn keyword xsMacro RMS_FEX RMS_FNF RMS_IFI RMS_ISI RMS_PRV RUNOPS_DEFAULT
+syn keyword xsMacro RV2CVOPCV_MARK_EARLY RV2CVOPCV_RETURN_NAME_GV
+syn keyword xsMacro RX_ANCHORED_SUBSTR RX_ANCHORED_UTF8 RX_BUFF_IDX_FULLMATCH
+syn keyword xsMacro RX_BUFF_IDX_POSTMATCH RX_BUFF_IDX_PREMATCH
+syn keyword xsMacro RX_CHECK_SUBSTR RX_ENGINE RX_EXTFLAGS RX_FLOAT_SUBSTR
+syn keyword xsMacro RX_FLOAT_UTF8 RX_GOFS RX_HAS_CUTGROUP RX_LASTCLOSEPAREN
+syn keyword xsMacro RX_LASTPAREN RX_MATCH_COPIED RX_MATCH_COPIED_off
+syn keyword xsMacro RX_MATCH_COPIED_on RX_MATCH_COPIED_set RX_MATCH_COPY_FREE
+syn keyword xsMacro RX_MATCH_TAINTED RX_MATCH_TAINTED_off RX_MATCH_TAINTED_on
+syn keyword xsMacro RX_MATCH_TAINTED_set RX_MATCH_UTF8 RX_MATCH_UTF8_off
+syn keyword xsMacro RX_MATCH_UTF8_on RX_MATCH_UTF8_set RX_MINLEN RX_MINLENRET
+syn keyword xsMacro RX_NPARENS RX_OFFS RX_PRECOMP RX_PRECOMP_const RX_PRELEN
+syn keyword xsMacro RX_REFCNT RX_SAVED_COPY RX_SEEN_EVALS RX_SUBBEG RX_SUBLEN
+syn keyword xsMacro RX_UTF8 RX_WRAPLEN RX_WRAPPED RX_WRAPPED_const RXapif_ALL
+syn keyword xsMacro RXapif_CLEAR RXapif_DELETE RXapif_EXISTS RXapif_FETCH
+syn keyword xsMacro RXapif_FIRSTKEY RXapif_NEXTKEY RXapif_ONE RXapif_REGNAME
+syn keyword xsMacro RXapif_REGNAMES RXapif_REGNAMES_COUNT RXapif_SCALAR
+syn keyword xsMacro RXapif_STORE RXf_ANCH RXf_ANCH_BOL RXf_ANCH_GPOS
+syn keyword xsMacro RXf_ANCH_MBOL RXf_ANCH_SBOL RXf_ANCH_SINGLE
+syn keyword xsMacro RXf_BASE_SHIFT RXf_CANY_SEEN RXf_CHECK_ALL RXf_COPY_DONE
+syn keyword xsMacro RXf_EVAL_SEEN RXf_GPOS_CHECK RXf_GPOS_FLOAT RXf_GPOS_SEEN
+syn keyword xsMacro RXf_INTUIT_TAIL RXf_LOOKBEHIND_SEEN RXf_MATCH_UTF8
+syn keyword xsMacro RXf_NOSCAN RXf_NULL RXf_PMf_CHARSET RXf_PMf_COMPILETIME
+syn keyword xsMacro RXf_PMf_EXTENDED RXf_PMf_FOLD RXf_PMf_KEEPCOPY
+syn keyword xsMacro RXf_PMf_MULTILINE RXf_PMf_SINGLELINE RXf_PMf_STD_PMMOD
+syn keyword xsMacro RXf_PMf_STD_PMMOD_SHIFT RXf_SKIPWHITE RXf_SPLIT
+syn keyword xsMacro RXf_START_ONLY RXf_TAINTED RXf_TAINTED_SEEN
+syn keyword xsMacro RXf_USE_INTUIT RXf_USE_INTUIT_ML RXf_USE_INTUIT_NOML
+syn keyword xsMacro RXf_WHITE RXi_GET RXi_GET_DECL RXi_SET RXp_EXTFLAGS
+syn keyword xsMacro RXp_MATCH_COPIED RXp_MATCH_COPIED_off RXp_MATCH_COPIED_on
+syn keyword xsMacro RXp_MATCH_TAINTED RXp_MATCH_UTF8 RXp_PAREN_NAMES
+syn keyword xsMacro ReREFCNT_dec ReREFCNT_inc Renew Renewc RsPARA RsRECORD
+syn keyword xsMacro RsSIMPLE RsSNARF SAFE_TRIE_NODENUM SANY SAVEADELETE
+syn keyword xsMacro SAVEBOOL SAVECLEARSV SAVECOMPILEWARNINGS SAVECOMPPAD
+syn keyword xsMacro SAVECOPFILE SAVECOPFILE_FREE SAVECOPLINE SAVECOPSTASH
+syn keyword xsMacro SAVECOPSTASH_FREE SAVEDELETE SAVEDESTRUCTOR
+syn keyword xsMacro SAVEDESTRUCTOR_X SAVEFREECOPHH SAVEFREEOP SAVEFREEPV
+syn keyword xsMacro SAVEFREESV SAVEGENERICPV SAVEGENERICSV SAVEHDELETE
+syn keyword xsMacro SAVEHINTS SAVEI16 SAVEI32 SAVEI8 SAVEINT SAVEIV SAVELONG
+syn keyword xsMacro SAVEMORTALIZESV SAVEOP SAVEPADSVANDMORTALIZE SAVEPARSER
+syn keyword xsMacro SAVEPPTR SAVESETSVFLAGS SAVESHAREDPV SAVESPTR
+syn keyword xsMacro SAVESTACK_ALLOC_FOR_RE_SAVE_STATE SAVESTACK_CXPOS
+syn keyword xsMacro SAVESTACK_POS SAVESWITCHSTACK SAVETMPS SAVEVPTR
+syn keyword xsMacro SAVE_DEFSV SAVE_ERRNO SAVE_MASK SAVE_TIGHT_SHIFT
+syn keyword xsMacro SAVEf_KEEPOLDELEM SAVEf_SETMAGIC SAVEt_ADELETE
+syn keyword xsMacro SAVEt_AELEM SAVEt_ALLOC SAVEt_APTR SAVEt_AV SAVEt_BOOL
+syn keyword xsMacro SAVEt_CLEARSV SAVEt_COMPILE_WARNINGS SAVEt_COMPPAD
+syn keyword xsMacro SAVEt_DELETE SAVEt_DESTRUCTOR SAVEt_DESTRUCTOR_X
+syn keyword xsMacro SAVEt_FREECOPHH SAVEt_FREEOP SAVEt_FREEPV SAVEt_FREESV
+syn keyword xsMacro SAVEt_GENERIC_PVREF SAVEt_GENERIC_SVREF SAVEt_GP
+syn keyword xsMacro SAVEt_GVSV SAVEt_HELEM SAVEt_HINTS SAVEt_HPTR SAVEt_HV
+syn keyword xsMacro SAVEt_I16 SAVEt_I32 SAVEt_I32_SMALL SAVEt_I8 SAVEt_INT
+syn keyword xsMacro SAVEt_INT_SMALL SAVEt_ITEM SAVEt_IV SAVEt_LONG
+syn keyword xsMacro SAVEt_MORTALIZESV SAVEt_NSTAB SAVEt_OP
+syn keyword xsMacro SAVEt_PADSV_AND_MORTALIZE SAVEt_PARSER SAVEt_PPTR
+syn keyword xsMacro SAVEt_REGCONTEXT SAVEt_RE_STATE SAVEt_SAVESWITCHSTACK
+syn keyword xsMacro SAVEt_SET_SVFLAGS SAVEt_SHARED_PVREF SAVEt_SPTR
+syn keyword xsMacro SAVEt_STACK_CXPOS SAVEt_STACK_POS SAVEt_SV SAVEt_SVREF
+syn keyword xsMacro SAVEt_VPTR SBOL SCAN_DEF SCAN_REPL SCAN_TR SCHEDULE
+syn keyword xsMacro SCHED_YIELD SCOPE_SAVES_SIGNAL_MASK SEEK_CUR SEEK_END
+syn keyword xsMacro SEEK_SET SELECT_MIN_BITS SEOL SETERRNO SETGRENT_R_PROTO
+syn keyword xsMacro SETHOSTENT_R_PROTO SETLOCALE_R_PROTO SETNETENT_R_PROTO
+syn keyword xsMacro SETPROTOENT_R_PROTO SETPWENT_R_PROTO SETSERVENT_R_PROTO
+syn keyword xsMacro SETTARG SET_MARK_OFFSET SET_NUMERIC_LOCAL
+syn keyword xsMacro SET_NUMERIC_STANDARD SET_THR SET_THREAD_SELF SETi SETn
+syn keyword xsMacro SETp SETs SETsv SETsvUN SETu SHARP_S_SKIP SHIFTOP
+syn keyword xsMacro SHORTSIZE SH_PATH SIGABRT SIGILL SIG_NAME SIG_NUM
+syn keyword xsMacro SIG_SIZE SINGLE_PAT_MOD SITEARCH SITEARCH_EXP SITELIB
+syn keyword xsMacro SITELIB_EXP SITELIB_STEM SIZE_ALIGN SIZE_ONLY SKIP
+syn keyword xsMacro SKIP_next SKIP_next_fail SLOPPYDIVIDE SOCKET_OPEN_MODE
+syn keyword xsMacro SPACE SPACEA SPACEL SPACEU SPAGAIN SPRINTF_RETURNS_STRLEN
+syn keyword xsMacro SRAND48_R_PROTO SRANDOM_R_PROTO SSCHECK SSGROW SSNEW
+syn keyword xsMacro SSNEWa SSNEWat SSNEWt SSPOPBOOL SSPOPDPTR SSPOPDXPTR
+syn keyword xsMacro SSPOPINT SSPOPIV SSPOPLONG SSPOPPTR SSPOPUV SSPTR SSPTRt
+syn keyword xsMacro SSPUSHBOOL SSPUSHDPTR SSPUSHDXPTR SSPUSHINT SSPUSHIV
+syn keyword xsMacro SSPUSHLONG SSPUSHPTR SSPUSHUV SS_ACCVIO SS_DEVOFFLINE
+syn keyword xsMacro SS_IVCHAN SS_NORMAL ST STANDARD_C STAR STARTPERL
+syn keyword xsMacro START_EXTERN_C START_MY_CXT STATIC STATUS_ALL_FAILURE
+syn keyword xsMacro STATUS_ALL_SUCCESS STATUS_CURRENT STATUS_EXIT
+syn keyword xsMacro STATUS_EXIT_SET STATUS_NATIVE STATUS_NATIVE_CHILD_SET
+syn keyword xsMacro STATUS_UNIX STATUS_UNIX_EXIT_SET STATUS_UNIX_SET STDCHAR
+syn keyword xsMacro STDIO_PTR_LVALUE STDIO_PTR_LVAL_SETS_CNT
+syn keyword xsMacro STDIO_STREAM_ARRAY STD_PAT_MODS STD_PMMOD_FLAGS_CLEAR
+syn keyword xsMacro STMT_END STMT_START STORE_NUMERIC_LOCAL_SET_STANDARD
+syn keyword xsMacro STORE_NUMERIC_STANDARD_SET_LOCAL STRERROR_R_PROTO STRING
+syn keyword xsMacro STRINGIFY STRUCT_OFFSET STRUCT_SV STR_LEN STR_SZ
+syn keyword xsMacro STR_WITH_LEN ST_INO_SIGN ST_INO_SIZE SUB
+syn keyword xsMacro SUBST_TAINT_BOOLRET SUBST_TAINT_PAT SUBST_TAINT_REPL
+syn keyword xsMacro SUBST_TAINT_RETAINT SUBST_TAINT_STR SUBVERSION SUCCEED
+syn keyword xsMacro SUSPEND SVTYPEMASK SV_CATBYTES SV_CATUTF8
+syn keyword xsMacro SV_CHECK_THINKFIRST SV_CHECK_THINKFIRST_COW_DROP
+syn keyword xsMacro SV_CONST_RETURN SV_COW_DROP_PV SV_COW_OTHER_PVS
+syn keyword xsMacro SV_COW_SHARED_HASH_KEYS SV_DO_COW_SVSETSV
+syn keyword xsMacro SV_FORCE_UTF8_UPGRADE SV_GMAGIC SV_HAS_TRAILING_NUL
+syn keyword xsMacro SV_IMMEDIATE_UNREF SV_MUTABLE_RETURN SV_NOSTEAL
+syn keyword xsMacro SV_SAVED_COPY SV_SKIP_OVERLOAD SV_SMAGIC
+syn keyword xsMacro SV_UNDEF_RETURNS_NULL SV_UTF8_NO_ENCODING SVrepl_EVAL
+syn keyword xsMacro SVt_MASK SWITCHSTACK SYMBIAN SYSTEM_GMTIME_MAX
+syn keyword xsMacro SYSTEM_GMTIME_MIN SYSTEM_LOCALTIME_MAX
+syn keyword xsMacro SYSTEM_LOCALTIME_MIN S_IEXEC S_IFIFO S_IFMT S_IREAD
+syn keyword xsMacro S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISBLK
+syn keyword xsMacro S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISLNK S_ISREG S_ISSOCK
+syn keyword xsMacro S_ISUID S_IWGRP S_IWOTH S_IWRITE S_IWUSR S_IXGRP S_IXOTH
+syn keyword xsMacro S_IXUSR S_PAT_MODS Safefree Semctl Sigjmp_buf Siglongjmp
+syn keyword xsMacro Sigsetjmp Size_t_size StGiFy StashHANDLER Stat Strerror
+syn keyword xsMacro Strtol Strtoul StructCopy SvAMAGIC SvAMAGIC_off
+syn keyword xsMacro SvAMAGIC_on SvANY SvCANEXISTDELETE SvCOMPILED
+syn keyword xsMacro SvCOMPILED_off SvCOMPILED_on SvCUR SvCUR_set
+syn keyword xsMacro SvDESTROYABLE SvEND SvEND_set SvENDx SvEVALED
+syn keyword xsMacro SvEVALED_off SvEVALED_on SvFAKE SvFAKE_off SvFAKE_on
+syn keyword xsMacro SvFLAGS SvGAMAGIC SvGETMAGIC SvGMAGICAL SvGMAGICAL_off
+syn keyword xsMacro SvGMAGICAL_on SvGROW SvGROW_mutable SvIMMORTAL SvIOK
+syn keyword xsMacro SvIOK_UV SvIOK_notUV SvIOK_off SvIOK_on SvIOK_only
+syn keyword xsMacro SvIOK_only_UV SvIOKp SvIOKp_on SvIS_FREED SvIV SvIVX
+syn keyword xsMacro SvIVXx SvIV_nomg SvIV_please SvIV_please_nomg SvIV_set
+syn keyword xsMacro SvIVx SvIsCOW SvIsCOW_normal SvIsCOW_shared_hash SvIsUV
+syn keyword xsMacro SvIsUV_off SvIsUV_on SvLEN SvLEN_set SvLENx SvLOCK
+syn keyword xsMacro SvMAGIC SvMAGICAL SvMAGICAL_off SvMAGICAL_on SvMAGIC_set
+syn keyword xsMacro SvNIOK SvNIOK_off SvNIOKp SvNOK SvNOK_off SvNOK_on
+syn keyword xsMacro SvNOK_only SvNOKp SvNOKp_on SvNV SvNVX SvNVXx SvNV_nomg
+syn keyword xsMacro SvNV_set SvNVx SvOBJECT SvOBJECT_off SvOBJECT_on SvOK
+syn keyword xsMacro SvOK_off SvOK_off_exc_UV SvOKp SvOOK SvOOK_off
+syn keyword xsMacro SvOOK_offset SvOOK_on SvOURSTASH SvOURSTASH_set SvPADMY
+syn keyword xsMacro SvPADMY_on SvPADSTALE SvPADSTALE_off SvPADSTALE_on
+syn keyword xsMacro SvPADTMP SvPADTMP_off SvPADTMP_on SvPAD_OUR SvPAD_OUR_on
+syn keyword xsMacro SvPAD_STATE SvPAD_STATE_on SvPAD_TYPED SvPAD_TYPED_on
+syn keyword xsMacro SvPCS_IMPORTED SvPCS_IMPORTED_off SvPCS_IMPORTED_on
+syn keyword xsMacro SvPEEK SvPOK SvPOK_off SvPOK_on SvPOK_only
+syn keyword xsMacro SvPOK_only_UTF8 SvPOKp SvPOKp_on SvPV SvPVX SvPVX_const
+syn keyword xsMacro SvPVX_mutable SvPVXx SvPV_const SvPV_flags
+syn keyword xsMacro SvPV_flags_const SvPV_flags_const_nolen
+syn keyword xsMacro SvPV_flags_mutable SvPV_force SvPV_force_flags
+syn keyword xsMacro SvPV_force_flags_mutable SvPV_force_flags_nolen
+syn keyword xsMacro SvPV_force_mutable SvPV_force_nolen SvPV_force_nomg
+syn keyword xsMacro SvPV_force_nomg_nolen SvPV_free SvPV_mutable SvPV_nolen
+syn keyword xsMacro SvPV_nolen_const SvPV_nomg SvPV_nomg_const
+syn keyword xsMacro SvPV_nomg_const_nolen SvPV_nomg_nolen SvPV_renew SvPV_set
+syn keyword xsMacro SvPV_shrink_to_cur SvPVbyte SvPVbyte_force SvPVbyte_nolen
+syn keyword xsMacro SvPVbytex SvPVbytex_force SvPVbytex_nolen SvPVutf8
+syn keyword xsMacro SvPVutf8_force SvPVutf8_nolen SvPVutf8x SvPVutf8x_force
+syn keyword xsMacro SvPVx SvPVx_const SvPVx_force SvPVx_nolen
+syn keyword xsMacro SvPVx_nolen_const SvREADONLY SvREADONLY_off SvREADONLY_on
+syn keyword xsMacro SvREFCNT SvREFCNT_dec SvREFCNT_inc SvREFCNT_inc_NN
+syn keyword xsMacro SvREFCNT_inc_simple SvREFCNT_inc_simple_NN
+syn keyword xsMacro SvREFCNT_inc_simple_void SvREFCNT_inc_simple_void_NN
+syn keyword xsMacro SvREFCNT_inc_void SvREFCNT_inc_void_NN SvRELEASE_IVX
+syn keyword xsMacro SvRELEASE_IVX_ SvRMAGICAL SvRMAGICAL_off SvRMAGICAL_on
+syn keyword xsMacro SvROK SvROK_off SvROK_on SvRV SvRV_const SvRV_set SvRVx
+syn keyword xsMacro SvRX SvRXOK SvSCREAM SvSCREAM_off SvSCREAM_on SvSETMAGIC
+syn keyword xsMacro SvSHARE SvSHARED_HASH SvSHARED_HEK_FROM_PV SvSMAGICAL
+syn keyword xsMacro SvSMAGICAL_off SvSMAGICAL_on SvSTASH SvSTASH_set
+syn keyword xsMacro SvSetMagicSV SvSetMagicSV_nosteal SvSetSV SvSetSV_and
+syn keyword xsMacro SvSetSV_nosteal SvSetSV_nosteal_and SvTAIL SvTAIL_off
+syn keyword xsMacro SvTAIL_on SvTAINT SvTAINTED SvTAINTED_off SvTAINTED_on
+syn keyword xsMacro SvTEMP SvTEMP_off SvTEMP_on SvTHINKFIRST SvTIED_mg
+syn keyword xsMacro SvTIED_obj SvTRUE SvTRUE_nomg SvTRUEx SvTYPE SvUNLOCK
+syn keyword xsMacro SvUOK SvUPGRADE SvUTF8 SvUTF8_off SvUTF8_on SvUV SvUVX
+syn keyword xsMacro SvUVXx SvUV_nomg SvUV_set SvUVx SvVALID SvVALID_off
+syn keyword xsMacro SvVALID_on SvVOK SvVSTRING_mg SvWEAKREF SvWEAKREF_off
+syn keyword xsMacro SvWEAKREF_on Sv_Grow TAIL TAINT TAINT_ENV TAINT_IF
+syn keyword xsMacro TAINT_NOT TAINT_PROPER THING THR THREAD_CREATE
+syn keyword xsMacro THREAD_CREATE_NEEDS_STACK THREAD_POST_CREATE
+syn keyword xsMacro THREAD_RET_CAST THREAD_RET_TYPE
+syn keyword xsMacro TIED_METHOD_ARGUMENTS_ON_STACK
+syn keyword xsMacro TIED_METHOD_MORTALIZE_NOT_NEEDED TIED_METHOD_SAY
+syn keyword xsMacro TIME64_CONFIG_H TIME64_H TM TMPNAM_R_PROTO TOO_LATE_FOR
+syn keyword xsMacro TOO_LATE_FOR_ TOPBLOCK TOPMARK TOPi TOPl TOPm1s TOPn TOPp
+syn keyword xsMacro TOPp1s TOPpx TOPq TOPs TOPu TOPul TOPuq TRIE TRIEC
+syn keyword xsMacro TRIE_BITMAP TRIE_BITMAP_BYTE TRIE_BITMAP_CLEAR
+syn keyword xsMacro TRIE_BITMAP_SET TRIE_BITMAP_TEST TRIE_CHARCOUNT
+syn keyword xsMacro TRIE_NODEIDX TRIE_NODENUM TRIE_WORDS_OFFSET TRIE_next
+syn keyword xsMacro TRIE_next_fail TTYNAME_R_PROTO TWO_BYTE_UTF8_TO_UNI
+syn keyword xsMacro TYPE_CHARS TYPE_DIGITS Timeval U16SIZE U16TYPE U16_CONST
+syn keyword xsMacro U16_MAX U16_MIN U32SIZE U32TYPE U32_ALIGNMENT_REQUIRED
+syn keyword xsMacro U32_CONST U32_MAX U32_MAX_P1 U32_MAX_P1_HALF U32_MIN
+syn keyword xsMacro U64SIZE U64TYPE U64_CONST U8SIZE U8TYPE U8_MAX U8_MIN
+syn keyword xsMacro UCHARAT UINT32_MIN UINT64_C UINT64_MIN UMINUS UNDERBAR
+syn keyword xsMacro UNICODE_ALLOW_ANY UNICODE_ALLOW_SUPER
+syn keyword xsMacro UNICODE_ALLOW_SURROGATE UNICODE_BYTE_ORDER_MARK
+syn keyword xsMacro UNICODE_DISALLOW_FE_FF
+syn keyword xsMacro UNICODE_DISALLOW_ILLEGAL_INTERCHANGE
+syn keyword xsMacro UNICODE_DISALLOW_NONCHAR UNICODE_DISALLOW_SUPER
+syn keyword xsMacro UNICODE_DISALLOW_SURROGATE
+syn keyword xsMacro UNICODE_GREEK_CAPITAL_LETTER_SIGMA
+syn keyword xsMacro UNICODE_GREEK_SMALL_LETTER_FINAL_SIGMA
+syn keyword xsMacro UNICODE_GREEK_SMALL_LETTER_SIGMA
+syn keyword xsMacro UNICODE_IS_BYTE_ORDER_MARK UNICODE_IS_FE_FF
+syn keyword xsMacro UNICODE_IS_NONCHAR UNICODE_IS_REPLACEMENT
+syn keyword xsMacro UNICODE_IS_SUPER UNICODE_IS_SURROGATE UNICODE_LINE_SEPA_0
+syn keyword xsMacro UNICODE_LINE_SEPA_1 UNICODE_LINE_SEPA_2
+syn keyword xsMacro UNICODE_PARA_SEPA_0 UNICODE_PARA_SEPA_1
+syn keyword xsMacro UNICODE_PARA_SEPA_2 UNICODE_PAT_MOD UNICODE_PAT_MODS
+syn keyword xsMacro UNICODE_REPLACEMENT UNICODE_SURROGATE_FIRST
+syn keyword xsMacro UNICODE_SURROGATE_LAST UNICODE_WARN_FE_FF
+syn keyword xsMacro UNICODE_WARN_ILLEGAL_INTERCHANGE UNICODE_WARN_NONCHAR
+syn keyword xsMacro UNICODE_WARN_SUPER UNICODE_WARN_SURROGATE UNIOP UNIOPSUB
+syn keyword xsMacro UNISKIP UNI_DISPLAY_BACKSLASH UNI_DISPLAY_ISPRINT
+syn keyword xsMacro UNI_DISPLAY_QQ UNI_DISPLAY_REGEX UNI_IS_INVARIANT
+syn keyword xsMacro UNI_TO_NATIVE UNLESS UNLESSM UNLIKELY UNLINK
+syn keyword xsMacro UNLOCK_DOLLARZERO_MUTEX UNTIL USE USE_64_BIT_ALL
+syn keyword xsMacro USE_64_BIT_INT USE_64_BIT_RAWIO USE_64_BIT_STDIO
+syn keyword xsMacro USE_BSDPGRP USE_DYNAMIC_LOADING USE_ENVIRON_ARRAY
+syn keyword xsMacro USE_HASH_SEED USE_HEAP_INSTEAD_OF_STACK USE_LARGE_FILES
+syn keyword xsMacro USE_LEFT USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
+syn keyword xsMacro USE_LOCALE_NUMERIC USE_PERLIO USE_REENTRANT_API
+syn keyword xsMacro USE_SEMCTL_SEMID_DS USE_SEMCTL_SEMUN USE_STAT_BLOCKS
+syn keyword xsMacro USE_STAT_RDEV USE_STDIO USE_STDIO_BASE USE_STDIO_PTR
+syn keyword xsMacro USE_STRUCT_COPY USE_SYSTEM_GMTIME USE_SYSTEM_LOCALTIME
+syn keyword xsMacro USE_THREADS USE_TM64 USE_UTF8_IN_NAMES UTF8SKIP
+syn keyword xsMacro UTF8_ACCUMULATE UTF8_ALLOW_ANY UTF8_ALLOW_ANYUV
+syn keyword xsMacro UTF8_ALLOW_CONTINUATION UTF8_ALLOW_DEFAULT
+syn keyword xsMacro UTF8_ALLOW_EMPTY UTF8_ALLOW_FFFF UTF8_ALLOW_LONG
+syn keyword xsMacro UTF8_ALLOW_NON_CONTINUATION UTF8_ALLOW_SHORT
+syn keyword xsMacro UTF8_ALLOW_SURROGATE UTF8_CHECK_ONLY UTF8_DISALLOW_FE_FF
+syn keyword xsMacro UTF8_DISALLOW_ILLEGAL_INTERCHANGE UTF8_DISALLOW_NONCHAR
+syn keyword xsMacro UTF8_DISALLOW_SUPER UTF8_DISALLOW_SURROGATE
+syn keyword xsMacro UTF8_EIGHT_BIT_HI UTF8_EIGHT_BIT_LO
+syn keyword xsMacro UTF8_FIRST_PROBLEMATIC_CODE_POINT_FIRST_BYTE
+syn keyword xsMacro UTF8_IS_CONTINUATION UTF8_IS_CONTINUED
+syn keyword xsMacro UTF8_IS_DOWNGRADEABLE_START UTF8_IS_INVARIANT
+syn keyword xsMacro UTF8_IS_NONCHAR_
+syn keyword xsMacro UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC
+syn keyword xsMacro UTF8_IS_START UTF8_IS_SUPER UTF8_IS_SURROGATE
+syn keyword xsMacro UTF8_MAXBYTES UTF8_MAXBYTES_CASE UTF8_MAXLEN
+syn keyword xsMacro UTF8_MAX_FOLD_CHAR_EXPAND UTF8_QUAD_MAX UTF8_TWO_BYTE_HI
+syn keyword xsMacro UTF8_TWO_BYTE_HI_nocast UTF8_TWO_BYTE_LO
+syn keyword xsMacro UTF8_TWO_BYTE_LO_nocast UTF8_WARN_FE_FF
+syn keyword xsMacro UTF8_WARN_ILLEGAL_INTERCHANGE UTF8_WARN_NONCHAR
+syn keyword xsMacro UTF8_WARN_SUPER UTF8_WARN_SURROGATE
+syn keyword xsMacro UTF_ACCUMULATION_OVERFLOW_MASK UTF_ACCUMULATION_SHIFT
+syn keyword xsMacro UTF_CONTINUATION_MARK UTF_CONTINUATION_MASK
+syn keyword xsMacro UTF_START_MARK UTF_START_MASK UTF_TO_NATIVE UVSIZE UVTYPE
+syn keyword xsMacro UVXf UV_DIG UV_MAX UV_MAX_P1 UV_MAX_P1_HALF UV_MIN UVf
+syn keyword xsMacro U_32 U_I U_L U_S U_V Uid_t_f Uid_t_sign Uid_t_size
+syn keyword xsMacro VAL_EAGAIN VAL_O_NONBLOCK VDf VERB VERTWS VOIDFLAGS
+syn keyword xsMacro VOIDUSED VOL VTBL_amagic VTBL_amagicelem VTBL_arylen
+syn keyword xsMacro VTBL_bm VTBL_collxfrm VTBL_dbline VTBL_defelem VTBL_env
+syn keyword xsMacro VTBL_envelem VTBL_fm VTBL_glob VTBL_isa VTBL_isaelem
+syn keyword xsMacro VTBL_mglob VTBL_nkeys VTBL_pack VTBL_packelem VTBL_pos
+syn keyword xsMacro VTBL_regdata VTBL_regdatum VTBL_regexp VTBL_sigelem
+syn keyword xsMacro VTBL_substr VTBL_sv VTBL_taint VTBL_uvar VTBL_vec
+syn keyword xsMacro WARN_ALL WARN_ALLstring WARN_AMBIGUOUS WARN_BAREWORD
+syn keyword xsMacro WARN_CLOSED WARN_CLOSURE WARN_DEBUGGING WARN_DEPRECATED
+syn keyword xsMacro WARN_DIGIT WARN_EXEC WARN_EXITING WARN_GLOB
+syn keyword xsMacro WARN_ILLEGALPROTO WARN_IMPRECISION WARN_INPLACE
+syn keyword xsMacro WARN_INTERNAL WARN_IO WARN_LAYER WARN_MALLOC WARN_MISC
+syn keyword xsMacro WARN_NEWLINE WARN_NONCHAR WARN_NONEstring
+syn keyword xsMacro WARN_NON_UNICODE WARN_NUMERIC WARN_ONCE WARN_OVERFLOW
+syn keyword xsMacro WARN_PACK WARN_PARENTHESIS WARN_PIPE WARN_PORTABLE
+syn keyword xsMacro WARN_PRECEDENCE WARN_PRINTF WARN_PROTOTYPE WARN_QW
+syn keyword xsMacro WARN_RECURSION WARN_REDEFINE WARN_REGEXP WARN_RESERVED
+syn keyword xsMacro WARN_SEMICOLON WARN_SEVERE WARN_SIGNAL WARN_SUBSTR
+syn keyword xsMacro WARN_SURROGATE WARN_SYNTAX WARN_TAINT WARN_THREADS
+syn keyword xsMacro WARN_UNINITIALIZED WARN_UNOPENED WARN_UNPACK WARN_UNTIE
+syn keyword xsMacro WARN_UTF8 WARN_VOID WARNshift WARNsize WEXITSTATUS WHEN
+syn keyword xsMacro WHILE WHILEM WHILEM_A_max WHILEM_A_max_fail WHILEM_A_min
+syn keyword xsMacro WHILEM_A_min_fail WHILEM_A_pre WHILEM_A_pre_fail
+syn keyword xsMacro WHILEM_B_max WHILEM_B_max_fail WHILEM_B_min
+syn keyword xsMacro WHILEM_B_min_fail WIDEST_UTYPE WIFEXITED WIFSIGNALED
+syn keyword xsMacro WIFSTOPPED WIN32SCK_IS_STDSCK WNOHANG WORD WSTOPSIG
+syn keyword xsMacro WTERMSIG WUNTRACED XHvTOTALKEYS XOPd_xop_class
+syn keyword xsMacro XOPd_xop_desc XOPd_xop_name XOPd_xop_peep XOPf_xop_class
+syn keyword xsMacro XOPf_xop_desc XOPf_xop_name XOPf_xop_peep XPUSHTARG
+syn keyword xsMacro XPUSHi XPUSHmortal XPUSHn XPUSHp XPUSHs XPUSHu XPUSHundef
+syn keyword xsMacro XS XSANY XSINTERFACE_CVT XSINTERFACE_CVT_ANON
+syn keyword xsMacro XSINTERFACE_FUNC XSINTERFACE_FUNC_SET XSPROTO XSRETURN
+syn keyword xsMacro XSRETURN_EMPTY XSRETURN_IV XSRETURN_NO XSRETURN_NV
+syn keyword xsMacro XSRETURN_PV XSRETURN_PVN XSRETURN_UNDEF XSRETURN_UV
+syn keyword xsMacro XSRETURN_YES XST_mIV XST_mNO XST_mNV XST_mPV XST_mPVN
+syn keyword xsMacro XST_mUNDEF XST_mUV XST_mYES XS_APIVERSION_BOOTCHECK
+syn keyword xsMacro XS_DYNAMIC_FILENAME XS_EXTERNAL XS_INTERNAL
+syn keyword xsMacro XS_VERSION_BOOTCHECK XSprePUSH XTENDED_PAT_MOD XopDISABLE
+syn keyword xsMacro XopENABLE XopENTRY XopENTRY_set XopFLAGS YADAYADA YIELD
+syn keyword xsMacro YYEMPTY YYSTYPE_IS_DECLARED YYSTYPE_IS_TRIVIAL
+syn keyword xsMacro YYTOKENTYPE Zero ZeroD _ _CANNOT _CC_ALNUMC_A
+syn keyword xsMacro _CC_ALNUMC_L1 _CC_ALPHA_A _CC_ALPHA_L1 _CC_BLANK_A
+syn keyword xsMacro _CC_BLANK_L1 _CC_CHARNAME_CONT _CC_CNTRL_A _CC_CNTRL_L1
+syn keyword xsMacro _CC_DIGIT_A _CC_GRAPH_A _CC_GRAPH_L1 _CC_IDFIRST_A
+syn keyword xsMacro _CC_IDFIRST_L1 _CC_LOWER_A _CC_LOWER_L1
+syn keyword xsMacro _CC_NONLATIN1_FOLD _CC_OCTAL_A _CC_PRINT_A _CC_PRINT_L1
+syn keyword xsMacro _CC_PSXSPC_A _CC_PSXSPC_L1 _CC_PUNCT_A _CC_PUNCT_L1
+syn keyword xsMacro _CC_QUOTEMETA _CC_SPACE_A _CC_SPACE_L1 _CC_UPPER_A
+syn keyword xsMacro _CC_UPPER_L1 _CC_WORDCHAR_A _CC_WORDCHAR_L1 _CC_XDIGIT_A
+syn keyword xsMacro _CPERLarg _GNU_SOURCE
+syn keyword xsMacro _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C
+syn keyword xsMacro _INC_PERL_XSUB_H _PERLIOL_H _PERLIO_H _PERL_OBJECT_THIS
+syn keyword xsMacro _REGEXP_COMMON _RXf_PMf_CHARSET_SHIFT _RXf_PMf_SHIFT_NEXT
+syn keyword xsMacro _SOCKADDR_LEN _STDIO_H _STDIO_INCLUDED _V _XPVCV_COMMON
+syn keyword xsMacro _XPV_HEAD __Inc__IPerl___ __PATCHLEVEL_H_INCLUDED__
+syn keyword xsMacro __STDIO_LOADED __attribute__deprecated__
+syn keyword xsMacro __attribute__format__ __attribute__format__null_ok__
+syn keyword xsMacro __attribute__malloc__ __attribute__nonnull__
+syn keyword xsMacro __attribute__noreturn__ __attribute__pure__
+syn keyword xsMacro __attribute__unused__ __attribute__warn_unused_result__
+syn keyword xsMacro __filbuf __flsbuf __perlapi_h__ _config_h_ _exit _filbuf
+syn keyword xsMacro _flsbuf _isQUOTEMETA _stdopen _swab_16_ _swab_32_
+syn keyword xsMacro _swab_64_ aTHXo aTHXo_ aTHXx aTHXx_ abort accept access
+syn keyword xsMacro anchored_end_shift anchored_offset anchored_substr
+syn keyword xsMacro anchored_utf8 asctime assert assert_not_ROK
+syn keyword xsMacro assert_not_glob atoll bcmp bind blk_eval blk_format
+syn keyword xsMacro blk_gimme blk_givwhen blk_loop blk_oldcop blk_oldmarksp
+syn keyword xsMacro blk_oldpm blk_oldscopesp blk_oldsp blk_sub blk_u16 boolSV
+syn keyword xsMacro cBINOP cBINOPo cBINOPx cBOOL cCOP cCOPo cCOPx cGVOP_gv
+syn keyword xsMacro cGVOPo_gv cGVOPx_gv cLISTOP cLISTOPo cLISTOPx cLOGOP
+syn keyword xsMacro cLOGOPo cLOGOPx cLOOP cLOOPo cLOOPx cPADOP cPADOPo
+syn keyword xsMacro cPADOPx cPMOP cPMOPo cPMOPx cPVOP cPVOPo cPVOPx cSVOP
+syn keyword xsMacro cSVOP_sv cSVOPo cSVOPo_sv cSVOPx cSVOPx_sv cSVOPx_svp
+syn keyword xsMacro cUNOP cUNOPo cUNOPx chdir check_end_shift
+syn keyword xsMacro check_offset_max check_offset_min check_substr check_utf8
+syn keyword xsMacro child_offset_bits chmod chsize ckDEAD ckWARN ckWARN2
+syn keyword xsMacro ckWARN2_d ckWARN3 ckWARN3_d ckWARN4 ckWARN4_d ckWARN_d
+syn keyword xsMacro close closedir connect cop_hints_2hv cop_hints_fetch_pv
+syn keyword xsMacro cop_hints_fetch_pvn cop_hints_fetch_pvs
+syn keyword xsMacro cop_hints_fetch_sv cophh_2hv cophh_copy cophh_delete_pv
+syn keyword xsMacro cophh_delete_pvn cophh_delete_pvs cophh_delete_sv
+syn keyword xsMacro cophh_fetch_pv cophh_fetch_pvn cophh_fetch_pvs
+syn keyword xsMacro cophh_fetch_sv cophh_free cophh_new_empty cophh_store_pv
+syn keyword xsMacro cophh_store_pvn cophh_store_pvs cophh_store_sv crypt
+syn keyword xsMacro ctermid ctime cv_ckproto cx_type cxstack cxstack_ix
+syn keyword xsMacro cxstack_max dATARGET dAX dAXMARK dEXT dEXTCONST dITEMS
+syn keyword xsMacro dJMPENV dMARK dMULTICALL dMY_CXT dMY_CXT_INTERP
+syn keyword xsMacro dMY_CXT_SV dNOOP dORIGMARK dPOPPOPiirl dPOPPOPnnrl
+syn keyword xsMacro dPOPPOPssrl dPOPTOPiirl dPOPTOPiirl_nomg
+syn keyword xsMacro dPOPTOPiirl_ul_nomg dPOPTOPnnrl dPOPTOPnnrl_nomg
+syn keyword xsMacro dPOPTOPssrl dPOPXiirl dPOPXiirl_ul_nomg dPOPXnnrl
+syn keyword xsMacro dPOPXssrl dPOPiv dPOPnv dPOPnv_nomg dPOPqv dPOPss dPOPuqv
+syn keyword xsMacro dPOPuv dSAVEDERRNO dSAVE_ERRNO dSP dTARG dTARGET
+syn keyword xsMacro dTARGETSTACKED dTHR dTHX dTHXa dTHXo dTHXoa dTHXs dTHXx
+syn keyword xsMacro dTOPiv dTOPnv dTOPqv dTOPss dTOPuqv dTOPuv dUNDERBAR dVAR
+syn keyword xsMacro dXSARGS dXSFUNCTION dXSI32 dXSTARG dXSUB_SYS deprecate
+syn keyword xsMacro djSP do_open drand48 dup dup2 endgrent endhostent
+syn keyword xsMacro endnetent endprotoent endpwent endservent environ execl
+syn keyword xsMacro execv execvp fcntl fd_set fdopen fileno float_end_shift
+syn keyword xsMacro float_max_offset float_min_offset float_substr float_utf8
+syn keyword xsMacro flock flockfile foldEQ_utf8 frewind fscanf fstat ftell
+syn keyword xsMacro ftruncate ftrylockfile funlockfile fwrite1 generic_uni
+syn keyword xsMacro generic_utf8 get_cvs getc_unlocked getegid geteuid getgid
+syn keyword xsMacro getgrent getgrgid getgrnam gethostbyaddr gethostbyname
+syn keyword xsMacro gethostent gethostname getlogin getnetbyaddr getnetbyname
+syn keyword xsMacro getnetent getpeername getpid getprotobyname
+syn keyword xsMacro getprotobynumber getprotoent getpwent getpwnam getpwuid
+syn keyword xsMacro getservbyname getservbyport getservent getsockname
+syn keyword xsMacro getsockopt getspnam gettimeofday getuid getw gv_AVadd
+syn keyword xsMacro gv_HVadd gv_IOadd gv_SVadd gv_autoload4 gv_efullname3
+syn keyword xsMacro gv_fetchmeth gv_fetchmeth_autoload gv_fetchmethod
+syn keyword xsMacro gv_fetchmethod_flags gv_fetchpvn gv_fetchpvs
+syn keyword xsMacro gv_fetchsv_nomg gv_fullname3 gv_init gv_stashpvs htoni
+syn keyword xsMacro htonl htons htovl htovs hv_delete hv_delete_ent hv_exists
+syn keyword xsMacro hv_exists_ent hv_fetch hv_fetch_ent hv_fetchs hv_iternext
+syn keyword xsMacro hv_magic hv_store hv_store_ent hv_store_flags hv_stores
+syn keyword xsMacro hv_undef ibcmp ibcmp_locale ibcmp_utf8 inet_addr
+syn keyword xsMacro inet_ntoa init_os_extras init_thread_intern ioctl isALNUM
+syn keyword xsMacro isALNUMC isALNUMC_A isALNUMC_L1 isALNUMC_LC
+syn keyword xsMacro isALNUMC_LC_utf8 isALNUMU isALNUM_LC isALNUM_LC_utf8
+syn keyword xsMacro isALNUM_LC_uvchr isALNUM_lazy isALNUM_lazy_if isALNUM_uni
+syn keyword xsMacro isALNUM_utf8 isALPHA isALPHAU isALPHA_A isALPHA_L1
+syn keyword xsMacro isALPHA_LC isALPHA_LC_utf8 isALPHA_LC_uvchr isALPHA_uni
+syn keyword xsMacro isALPHA_utf8 isASCII isASCII_A isASCII_L1 isASCII_LC
+syn keyword xsMacro isASCII_uni isASCII_utf8 isBLANK isBLANK_A isBLANK_L1
+syn keyword xsMacro isBLANK_LC isBLANK_LC_uni isBLANK_LC_utf8 isBLANK_uni
+syn keyword xsMacro isBLANK_utf8 isCHARNAME_CONT isCNTRL isCNTRL_A isCNTRL_L1
+syn keyword xsMacro isCNTRL_LC isCNTRL_LC_utf8 isCNTRL_LC_uvchr isCNTRL_uni
+syn keyword xsMacro isCNTRL_utf8 isDIGIT isDIGIT_A isDIGIT_L1 isDIGIT_LC
+syn keyword xsMacro isDIGIT_LC_utf8 isDIGIT_LC_uvchr isDIGIT_uni isDIGIT_utf8
+syn keyword xsMacro isGRAPH isGRAPH_A isGRAPH_L1 isGRAPH_LC isGRAPH_LC_utf8
+syn keyword xsMacro isGRAPH_LC_uvchr isGRAPH_uni isGRAPH_utf8 isGV
+syn keyword xsMacro isGV_with_GP isGV_with_GP_off isGV_with_GP_on
+syn keyword xsMacro isIDCONT_utf8 isIDFIRST isIDFIRST_A isIDFIRST_L1
+syn keyword xsMacro isIDFIRST_LC isIDFIRST_LC_utf8 isIDFIRST_LC_uvchr
+syn keyword xsMacro isIDFIRST_lazy isIDFIRST_lazy_if isIDFIRST_uni
+syn keyword xsMacro isIDFIRST_utf8 isLEXWARN_off isLEXWARN_on isLOWER
+syn keyword xsMacro isLOWER_A isLOWER_L1 isLOWER_LC isLOWER_LC_utf8
+syn keyword xsMacro isLOWER_LC_uvchr isLOWER_uni isLOWER_utf8 isOCTAL
+syn keyword xsMacro isOCTAL_A isOCTAL_L1 isPRINT isPRINT_A isPRINT_L1
+syn keyword xsMacro isPRINT_LC isPRINT_LC_utf8 isPRINT_LC_uvchr isPRINT_uni
+syn keyword xsMacro isPRINT_utf8 isPSXSPC isPSXSPC_A isPSXSPC_L1 isPSXSPC_LC
+syn keyword xsMacro isPSXSPC_LC_uni isPSXSPC_LC_utf8 isPSXSPC_uni
+syn keyword xsMacro isPSXSPC_utf8 isPUNCT isPUNCT_A isPUNCT_L1 isPUNCT_LC
+syn keyword xsMacro isPUNCT_LC_utf8 isPUNCT_LC_uvchr isPUNCT_uni isPUNCT_utf8
+syn keyword xsMacro isSPACE isSPACE_A isSPACE_L1 isSPACE_LC isSPACE_LC_utf8
+syn keyword xsMacro isSPACE_LC_uvchr isSPACE_uni isSPACE_utf8 isUPPER
+syn keyword xsMacro isUPPER_A isUPPER_L1 isUPPER_LC isUPPER_LC_utf8
+syn keyword xsMacro isUPPER_LC_uvchr isUPPER_uni isUPPER_utf8 isWARN_ONCE
+syn keyword xsMacro isWARN_on isWARNf_on isWORDCHAR isWORDCHAR_A
+syn keyword xsMacro isWORDCHAR_L1 isXDIGIT isXDIGIT_A isXDIGIT_L1
+syn keyword xsMacro isXDIGIT_uni isXDIGIT_utf8 is_HORIZWS is_HORIZWS_cp
+syn keyword xsMacro is_HORIZWS_latin1 is_HORIZWS_latin1_safe is_HORIZWS_safe
+syn keyword xsMacro is_HORIZWS_utf8 is_HORIZWS_utf8_safe is_LAX_VERSION
+syn keyword xsMacro is_LNBREAK is_LNBREAK_latin1 is_LNBREAK_latin1_safe
+syn keyword xsMacro is_LNBREAK_safe is_LNBREAK_utf8 is_LNBREAK_utf8_safe
+syn keyword xsMacro is_STRICT_VERSION is_TRICKYFOLD is_TRICKYFOLD_cp
+syn keyword xsMacro is_TRICKYFOLD_safe is_VERTWS is_VERTWS_cp
+syn keyword xsMacro is_VERTWS_latin1 is_VERTWS_latin1_safe is_VERTWS_safe
+syn keyword xsMacro is_VERTWS_utf8 is_VERTWS_utf8_safe is_utf8_string_loc
+syn keyword xsMacro isatty kBINOP kCOP kGVOP_gv kLISTOP kLOGOP kLOOP kPADOP
+syn keyword xsMacro kPMOP kPVOP kSVOP kSVOP_sv kUNOP kill killpg
+syn keyword xsMacro lex_stuff_pvs link listen lockf longjmp lseek lstat
+syn keyword xsMacro mPUSHi mPUSHn mPUSHp mPUSHs mPUSHu mXPUSHi mXPUSHn
+syn keyword xsMacro mXPUSHp mXPUSHs mXPUSHu memEQ memEQs memNE memNEs memchr
+syn keyword xsMacro memcmp memzero mkdir mktemp my my_betoh16 my_betoh32
+syn keyword xsMacro my_betoh64 my_betohi my_betohl my_betohn my_betohs
+syn keyword xsMacro my_binmode my_htobe16 my_htobe32 my_htobe64 my_htobei
+syn keyword xsMacro my_htobel my_htoben my_htobes my_htole16 my_htole32
+syn keyword xsMacro my_htole64 my_htolei my_htolel my_htolen my_htoles
+syn keyword xsMacro my_letoh16 my_letoh32 my_letoh64 my_letohi my_letohl
+syn keyword xsMacro my_letohn my_letohs my_lstat my_snprintf my_sprintf
+syn keyword xsMacro my_stat my_strlcat my_strlcpy my_vsnprintf newAV newGVgen
+syn keyword xsMacro newHV newIO newRV_inc newSUB newSVpvn_utf8 newSVpvs
+syn keyword xsMacro newSVpvs_flags newSVpvs_share newXSproto ntohi ntohl
+syn keyword xsMacro ntohs opASSIGN op_getmad op_lvalue open opendir pTHX_1
+syn keyword xsMacro pTHX_2 pTHX_3 pTHX_4 pTHX_5 pTHX_6 pTHX_7 pTHX_8 pTHX_9
+syn keyword xsMacro pTHX_FORMAT pTHX_VALUE pTHX_VALUE_ pTHX__FORMAT
+syn keyword xsMacro pTHX__VALUE pTHX__VALUE_ pTHXo pTHXo_ pTHXx pTHXx_ pVAR
+syn keyword xsMacro pWARN_ALL pWARN_NONE pWARN_STD packWARN packWARN2
+syn keyword xsMacro packWARN3 packWARN4 pad_add_name_pvs pad_findmy_pvs
+syn keyword xsMacro pad_peg padadd_NO_DUP_CHECK padadd_OUR padadd_STATE
+syn keyword xsMacro padadd_UTF8_NAME padnew_CLONE padnew_SAVE padnew_SAVESUB
+syn keyword xsMacro panic_write2 pause pclose pipe popen prepare_SV_for_RV
+syn keyword xsMacro pthread_attr_init pthread_condattr_default pthread_create
+syn keyword xsMacro pthread_key_create pthread_keycreate
+syn keyword xsMacro pthread_mutexattr_default pthread_mutexattr_init
+syn keyword xsMacro pthread_mutexattr_settype putc_unlocked putenv putw
+syn keyword xsMacro random read readdir readdir64 recv recvfrom ref
+syn keyword xsMacro refcounted_he_fetch_pvs refcounted_he_new_pvs rename
+syn keyword xsMacro rewinddir rmdir sTHX safecalloc safefree safemalloc
+syn keyword xsMacro saferealloc save_aelem save_freeop save_freepv
+syn keyword xsMacro save_freesv save_helem save_mortalizesv save_op savepvs
+syn keyword xsMacro savesharedpvs sb_dstr sb_iters sb_m sb_maxiters
+syn keyword xsMacro sb_oldsave sb_orig sb_rflags sb_rx sb_rxres sb_rxtainted
+syn keyword xsMacro sb_s sb_strend sb_targ seedDrand01 seekdir select send
+syn keyword xsMacro sendto setbuf setgid setgrent sethostent setjmp
+syn keyword xsMacro setlinebuf setlocale setmode setnetent setprotoent
+syn keyword xsMacro setpwent setregid setreuid setservent setsockopt setuid
+syn keyword xsMacro setvbuf share_hek_hek sharepvn shutdown signal sleep
+syn keyword xsMacro socket socketpair specialWARN srand48 srandom stat
+syn keyword xsMacro stdoutf strEQ strGE strGT strLE strLT strNE strchr
+syn keyword xsMacro strerror stringify stringify_immed strnEQ strnNE strrchr
+syn keyword xsMacro strtoll strtoull sv_2bool sv_2iv sv_2nv sv_2pv
+syn keyword xsMacro sv_2pv_nolen sv_2pv_nomg sv_2pvbyte_nolen
+syn keyword xsMacro sv_2pvutf8_nolen sv_2uv sv_catpv_nomg sv_catpvn
+syn keyword xsMacro sv_catpvn_mg sv_catpvn_nomg sv_catpvn_utf8_upgrade
+syn keyword xsMacro sv_catpvs sv_catpvs_flags sv_catpvs_mg sv_catpvs_nomg
+syn keyword xsMacro sv_catsv sv_catsv_mg sv_catsv_nomg sv_catxmlpvs sv_cmp
+syn keyword xsMacro sv_cmp_locale sv_collxfrm sv_eq sv_force_normal sv_insert
+syn keyword xsMacro sv_nolocking sv_nounlocking sv_pv sv_pvbyte sv_pvn_force
+syn keyword xsMacro sv_pvn_force_nomg sv_pvutf8 sv_setpvs sv_setpvs_mg
+syn keyword xsMacro sv_setref_pvs sv_setsv sv_setsv_nomg sv_taint sv_unref
+syn keyword xsMacro sv_usepvn sv_usepvn_mg sv_utf8_upgrade
+syn keyword xsMacro sv_utf8_upgrade_flags sv_utf8_upgrade_nomg tTHX telldir
+syn keyword xsMacro times tmpfile tmpnam toCTRL toFOLD_uni toLOWER
+syn keyword xsMacro toLOWER_LATIN1 toLOWER_LC toLOWER_uni toLOWER_utf8
+syn keyword xsMacro toTITLE_uni toTITLE_utf8 toUPPER toUPPER_LATIN1_MOD
+syn keyword xsMacro toUPPER_LC toUPPER_uni toUPPER_utf8 to_uni_fold
+syn keyword xsMacro to_utf8_fold to_utf8_lower to_utf8_title to_utf8_upper
+syn keyword xsMacro truncate tryAMAGICbin_MG tryAMAGICunDEREF
+syn keyword xsMacro tryAMAGICunTARGET tryAMAGICun_MG ttyname umask uname
+syn keyword xsMacro unlink unpackWARN1 unpackWARN2 unpackWARN3 unpackWARN4
+syn keyword xsMacro utf8n_to_uvchr utime uvchr_to_utf8 uvuni_to_utf8 vTHX
+syn keyword xsMacro vfprintf vtohl vtohs wait want_vtbl_bm want_vtbl_fm
+syn keyword xsMacro what_TRICKYFOLD what_TRICKYFOLD_safe what_len_TRICKYFOLD
+syn keyword xsMacro what_len_TRICKYFOLD_safe whichsig write xio_any xio_dirp
+syn keyword xsMacro xiv_iv xuv_uv yystype
 
-" XS extentions
-" TODO: Figure out how to look for trailing '='.
-syn keyword xsKeyword   MODULE PACKAGE PREFIX
-syn keyword xsKeyword   OUTPUT: CODE: INIT: PREINIT: INPUT:
-syn keyword xsKeyword   PPCODE: REQUIRE: CLEANUP: BOOT:
-syn keyword xsKeyword   VERSIONCHECK: PROTOTYPES: PROTOTYPE:
-syn keyword xsKeyword   ALIAS: INCLUDE: CASE:
-" TODO: Figure out how to look for trailing '('.
-syn keyword xsMacro     SV EXTEND PUSHs
-syn keyword xsVariable  RETVAL NO_INIT
-"syn match xsCast       "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
-"syn match xsCast       "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
-
-" Define the default highlighting, but only when an item doesn't have highlighting yet
-command -nargs=+ HiLink hi def link <args>
-
-HiLink xsKeyword    Keyword
-HiLink xsMacro      Macro
-HiLink xsVariable   Identifier
+" 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_xs_syntax_inits")
+  if version < 508
+    let did_xs_syntax_inits = 1
+    command -nargs=+ HiLink hi link <args>
+  else
+    command -nargs=+ HiLink hi def link <args>
+  endif
 
-delcommand HiLink
+  HiLink xsPrivate    Error
+  HiLink xsSuperseded Error
+  HiLink xsType       Type
+  HiLink xsString     String
+  HiLink xsConstant   Constant
+  HiLink xsException  Exception
+  HiLink xsKeyword    Keyword
+  HiLink xsFunction   Function
+  HiLink xsVariable   Identifier
+  HiLink xsMacro      Macro
+
+  delcommand HiLink
+endif
 
 let b:current_syntax = "xs"
 
diff -Naur vim73.orig/runtime/syntax/yacc.vim vim73/runtime/syntax/yacc.vim
--- vim73.orig/runtime/syntax/yacc.vim	2010-08-02 15:40:18.000000000 +0000
+++ vim73/runtime/syntax/yacc.vim	2013-08-04 19:09:09.850612811 +0000
@@ -1,8 +1,8 @@
 " Vim syntax file
 " Language:	Yacc
-" Maintainer:	Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
-" Last Change:	Aug 2, 2010
-" Version:	8
+" Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
+" Last Change:	Nov 14, 2012
+" Version:	10
 " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
 "
 " Options: {{{1
@@ -20,37 +20,44 @@
 " ---------------------------------------------------------------------
 "  Folding Support {{{1
 if has("folding")
- com! -nargs=+ HiFold	<args> fold
+ com! -nargs=+ SynFold	<args> fold
 else
- com! -nargs=+ HiFold	<args>
+ com! -nargs=+ SynFold	<args>
 endif
 
 " ---------------------------------------------------------------------
 " Read the C syntax to start with {{{1
-if exists("g:yacc_uses_cpp")
- syn include @yaccCode	<sfile>:p:h/cpp.vim
-else
- syn include @yaccCode	<sfile>:p:h/c.vim
+" Read the C/C++ syntax to start with
+let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:yacc_uses_cpp")? "/cpp.vim" : "/c.vim"))
+if !filereadable(s:Cpath)
+ for s:Cpath in split(globpath(&rtp,(exists("g:yacc_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
+  if filereadable(fnameescape(s:Cpath))
+   let s:Cpath= fnameescape(s:Cpath)
+   break
+  endif
+ endfor
 endif
+exe "syn include @yaccCode ".s:Cpath
 
 " ---------------------------------------------------------------------
 "  Yacc Clusters: {{{1
-syn cluster yaccInitCluster	contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam
+syn cluster yaccInitCluster	contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption
 syn cluster yaccRulesCluster	contains=yaccNonterminal,yaccString
 
 " ---------------------------------------------------------------------
 "  Yacc Sections: {{{1
-HiFold syn	region	yaccInit	start='.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty contained
-HiFold syn	region	yaccInit2      start='\%^.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty
-HiFold syn	region	yaccHeader2	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty contained
-HiFold syn	region	yaccHeader	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty
-HiFold syn	region	yaccRules	matchgroup=yaccSectionSep	start='^%%$'		end='^%%$'me=e-2,re=e-2	contains=@yaccRulesCluster	nextgroup=yaccEndCode	skipwhite skipempty contained
-HiFold syn	region	yaccEndCode	matchgroup=yaccSectionSep	start='^%%$'		end='\%$'		contains=@yaccCode	contained
+SynFold syn	region	yaccInit	start='.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty contained
+SynFold syn	region	yaccInit2      start='\%^.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty
+SynFold syn	region	yaccHeader2	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty contained
+SynFold syn	region	yaccHeader	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty
+SynFold syn	region	yaccRules	matchgroup=yaccSectionSep	start='^%%$'		end='^%%$'me=e-2,re=e-2	contains=@yaccRulesCluster	nextgroup=yaccEndCode	skipwhite skipempty contained
+SynFold syn	region	yaccEndCode	matchgroup=yaccSectionSep	start='^%%$'		end='\%$'		contains=@yaccCode	contained
 
 " ---------------------------------------------------------------------
 " Yacc Commands: {{{1
 syn	match	yaccDefines	'^%define\s\+.*$'
-syn	match	yaccParseParam	'%parse-param\>'	skipwhite	nextgroup=yaccParseParamStr
+syn	match	yaccParseParam	'%\(parse\|lex\)-param\>'		skipwhite	nextgroup=yaccParseParamStr
+syn	match	yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>'
 syn	region	yaccParseParamStr	contained matchgroup=Delimiter	start='{'	end='}'	contains=cStructure
 
 syn	match	yaccDelim	"[:|]"	contained
@@ -62,11 +69,11 @@
 syn	keyword	yaccKeyActn	yyerrok yyclearin	contained
 
 syn	match	yaccUnionStart	"^%union"	skipwhite skipnl nextgroup=yaccUnion	contained
-HiFold syn	region	yaccUnion	matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode	contained
+SynFold syn	region	yaccUnion	matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode	contained
 syn	match	yaccBrkt	"[<>]"	contained
 syn	match	yaccType	"<[a-zA-Z_][a-zA-Z0-9_]*>"	contains=yaccBrkt	contained
 
-HiFold syn	region	yaccNonterminal	start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:"	matchgroup=yaccDelim end=";"	matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment	contained
+SynFold syn	region	yaccNonterminal	start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:"	matchgroup=yaccDelim end=";"	matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment	contained
 syn	region	yaccComment	start="/\*"	end="\*/"
 syn	match	yaccString	"'[^']*'"	contained
 
@@ -74,7 +81,8 @@
 " ---------------------------------------------------------------------
 " I'd really like to highlight just the outer {}.  Any suggestions??? {{{1
 syn	match	yaccCurlyError	"[{}]"
-HiFold syn	region	yaccAction	matchgroup=yaccCurly start="{" end="}" contains=@yaccCode	contained
+SynFold syn	region	yaccAction	matchgroup=yaccCurly start="{" end="}" 	contains=@yaccCode,yaccVar		contained
+syn	match	yaccVar	'\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+'	containedin=cParen,cPreProc,cMulti	contained
 
 " ---------------------------------------------------------------------
 " Yacc synchronization: {{{1
@@ -83,38 +91,30 @@
 " ---------------------------------------------------------------------
 " Define the default highlighting. {{{1
 if !exists("did_yacc_syn_inits")
-  command -nargs=+ HiLink hi def link <args>
-
-  " Internal yacc highlighting links {{{2
-  HiLink yaccBrkt	yaccStmt
-  HiLink yaccKey	yaccStmt
-  HiLink yaccOper	yaccStmt
-  HiLink yaccUnionStart	yaccKey
-
-  " External yacc highlighting links {{{2
-  HiLink yaccComment	Comment
-  HiLink yaccCurly	Delimiter
-  HiLink yaccCurlyError	Error
-  HiLink yaccDefines	cDefine
-  HiLink yaccParseParam	cDefine
-  HiLink yaccNonterminal	Function
-  HiLink yaccDelim	Delimiter
-  HiLink yaccKeyActn	Special
-  HiLink yaccSectionSep	Todo
-  HiLink yaccSep	Delimiter
-  HiLink yaccString	String
-  HiLink yaccStmt	Statement
-  HiLink yaccType	Type
-
-  " since Bram doesn't like my Delimiter :| {{{2
-  HiLink Delimiter	Type
-
-  delcommand HiLink
+  hi def link yaccBrkt	yaccStmt
+  hi def link yaccComment	Comment
+  hi def link yaccCurly	Delimiter
+  hi def link yaccCurlyError	Error
+  hi def link yaccDefines	cDefine
+  hi def link yaccDelim	Delimiter
+  hi def link yaccKeyActn	Special
+  hi def link yaccKey	yaccStmt
+  hi def link yaccNonterminal	Function
+  hi def link yaccOper	yaccStmt
+  hi def link yaccParseOption	cDefine
+  hi def link yaccParseParam	yaccParseOption
+  hi def link yaccSectionSep	Todo
+  hi def link yaccSep	Delimiter
+  hi def link yaccStmt	Statement
+  hi def link yaccString	String
+  hi def link yaccType	Type
+  hi def link yaccUnionStart	yaccKey
+  hi def link yaccVar	Special
 endif
 
 " ---------------------------------------------------------------------
 "  Cleanup: {{{1
-delcommand HiFold
+delcommand SynFold
 let b:current_syntax = "yacc"
 
 " ---------------------------------------------------------------------
diff -Naur vim73.orig/runtime/syntax/yaml.vim vim73/runtime/syntax/yaml.vim
--- vim73.orig/runtime/syntax/yaml.vim	2010-08-13 12:54:35.000000000 +0000
+++ vim73/runtime/syntax/yaml.vim	2013-08-04 19:09:09.853946134 +0000
@@ -1,86 +1,186 @@
 " Vim syntax file
-" Language:         YAML (YAML Ain't Markup Language)
-" Maintainer:       Nikolai Weibull <now@bitwi.se>
-" Latest Revision:  2010-08-12
+" Language:         YAML (YAML Ain't Markup Language) 1.2
+" Maintainer:       Nikolai Pavlov <zyx.vim@gmail.com>
+" First author:     Nikolai Weibull <now@bitwi.se>
+" Latest Revision:  2010-10-08
 
-if exists("b:current_syntax")
-  finish
+if exists('b:current_syntax')
+    finish
 endif
 
 let s:cpo_save = &cpo
 set cpo&vim
 
-syn keyword yamlTodo            contained TODO FIXME XXX NOTE
+let s:ns_char = '\%(\%([\n\r\uFEFF \t]\)\@!\p\)'
+let s:ns_word_char = '\%(\w\|-\)'
+let s:ns_uri_char  = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$,.!~*''()\[\]]\)'
+let s:ns_tag_char  = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$.~*''()]\)'
+let s:c_ns_anchor_char = '\%(\%([\n\r\uFEFF \t,\[\]{}]\)\@!\p\)'
+let s:c_indicator      = '[\-?:,\[\]{}#&*!|>''"%@`]'
+let s:c_flow_indicator = '[,\[\]{}]'
+
+let s:c_verbatim_tag = '!<'.s:ns_uri_char.'\+>'
+let s:c_named_tag_handle     = '!'.s:ns_word_char.'\+!'
+let s:c_secondary_tag_handle = '!!'
+let s:c_primary_tag_handle   = '!'
+let s:c_tag_handle = '\%('.s:c_named_tag_handle.
+            \         '\|'.s:c_secondary_tag_handle.
+            \         '\|'.s:c_primary_tag_handle.'\)'
+let s:c_ns_shorthand_tag = s:c_tag_handle . s:ns_tag_char.'\+'
+let s:c_non_specific_tag = '!'
+let s:c_ns_tag_property = s:c_verbatim_tag.
+            \        '\|'.s:c_ns_shorthand_tag.
+            \        '\|'.s:c_non_specific_tag
+
+let s:c_ns_anchor_name = s:c_ns_anchor_char.'\+'
+let s:c_ns_anchor_property =  '&'.s:c_ns_anchor_name
+let s:c_ns_alias_node      = '\*'.s:c_ns_anchor_name
+
+let s:ns_directive_name = s:ns_char.'\+'
+
+let s:ns_local_tag_prefix  = '!'.s:ns_uri_char.'*'
+let s:ns_global_tag_prefix = s:ns_tag_char.s:ns_uri_char.'*'
+let s:ns_tag_prefix = s:ns_local_tag_prefix.
+            \    '\|'.s:ns_global_tag_prefix
+
+let s:ns_plain_safe_out = s:ns_char
+let s:ns_plain_safe_in  = '\%('.s:c_flow_indicator.'\@!'.s:ns_char.'\)'
+
+let s:ns_plain_first_in  = '\%('.s:c_indicator.'\@!'.s:ns_char.'\|[?:\-]\%('.s:ns_plain_safe_in.'\)\@=\)'
+let s:ns_plain_first_out = '\%('.s:c_indicator.'\@!'.s:ns_char.'\|[?:\-]\%('.s:ns_plain_safe_out.'\)\@=\)'
+
+let s:ns_plain_char_in  = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_in.'\|[:#]\@!'.s:ns_plain_safe_in.'\)'
+let s:ns_plain_char_out = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_out.'\|[:#]\@!'.s:ns_plain_safe_out.'\)'
 
-syn region  yamlComment         display oneline start='\%(^\|\s\)#' end='$'
-                                \ contains=yamlTodo,@Spell
+let s:ns_plain_out = s:ns_plain_first_out . s:ns_plain_char_out.'*'
+let s:ns_plain_in  = s:ns_plain_first_in  . s:ns_plain_char_in.'*'
 
-syn match   yamlNodeProperty    '!\%(![^\\^%     ]\+\|[^!][^:/   ]*\)'
 
-syn match   yamlAnchor          '&.\+'
+syn keyword yamlTodo            contained TODO FIXME XXX NOTE
 
-syn match   yamlAlias           '\*.\+'
+syn region  yamlComment         display oneline start='\%\(^\|\s\)#' end='$'
+            \                   contains=yamlTodo
 
-syn match   yamlDelimiter       '[-,:]'
-syn match   yamlBlock           '[\[\]{}>|]'
-syn match   yamlOperator        '[?+-]'
-syn match   yamlKey             '\w\+\(\s\+\w\+\)*\ze\s*:'
-
-syn region  yamlString          matchgroup=yamlStringDelimiter
-                                \ start=+"+ skip=+\\"+ end=+"+
-                                \ contains=yamlEscape
-syn region  yamlString          matchgroup=yamlStringDelimiter
-                                \ start=+'+ skip=+''+ end=+'+
-                                \ contains=yamlSingleEscape
-syn match   yamlEscape          contained display +\\[\\"abefnrtv^0_ NLP]+
-syn match   yamlEscape          contained display '\\x\x\{2}'
-syn match   yamlEscape          contained display '\\u\x\{4}'
-syn match   yamlEscape          contained display '\\U\x\{8}'
-" TODO: how do we get 0x85, 0x2028, and 0x2029 into this?
-syn match   yamlEscape          display '\\\%(\r\n\|[\r\n]\)'
-syn match   yamlSingleEscape    contained +''+
-
-" TODO: sexagecimal and fixed (20:30.15 and 1,230.15)
-syn match   yamlNumber          display
-                                \ '\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
-syn match   yamlNumber          display '0\o\+'
-syn match   yamlNumber          display '0x\x\+'
-syn match   yamlNumber          display '([+-]\=[iI]nf)'
-syn match   yamlNumber          display '(NaN)'
-
-syn match   yamlConstant        '\<[~yn]\>'
-syn keyword yamlConstant        true True TRUE false False FALSE
-syn keyword yamlConstant        yes Yes on ON no No off OFF
-syn keyword yamlConstant        null Null NULL nil Nil NIL
-
-syn match   yamlTimestamp       '\d\d\d\d-\%(1[0-2]\|\d\)-\%(3[0-2]\|2\d\|1\d\|\d\)\%( \%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d [+-]\%([01]\d\|2[0-3]\):[0-5]\d\|t\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d[+-]\%([01]\d\|2[0-3]\):[0-5]\d\|T\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\dZ\)\='
-
-syn region  yamlDocumentHeader  start='---' end='$' contains=yamlDirective
-syn match   yamlDocumentEnd     '\.\.\.'
-
-syn match   yamlDirective       contained '%[^:]\+:.\+'
-
-hi def link yamlTodo            Todo
-hi def link yamlComment         Comment
-hi def link yamlDocumentHeader  PreProc
-hi def link yamlDocumentEnd     PreProc
-hi def link yamlDirective       Keyword
-hi def link yamlNodeProperty    Type
-hi def link yamlAnchor          Type
-hi def link yamlAlias           Type
-hi def link yamlDelimiter       Delimiter
-hi def link yamlBlock           Operator
-hi def link yamlOperator        Operator
-hi def link yamlKey             Identifier
-hi def link yamlString          String
-hi def link yamlStringDelimiter yamlString
-hi def link yamlEscape          SpecialChar
-hi def link yamlSingleEscape    SpecialChar
-hi def link yamlNumber          Number
-hi def link yamlConstant        Constant
-hi def link yamlTimestamp       Number
+execute 'syn region yamlDirective oneline start='.string('^\ze%'.s:ns_directive_name.'\s\+').' '.
+            \                            'end="$" '.
+            \                            'contains=yamlTAGDirective,'.
+            \                                     'yamlYAMLDirective,'.
+            \                                     'yamlReservedDirective '.
+            \                            'keepend'
+
+syn match yamlTAGDirective '%TAG\s\+' contained nextgroup=yamlTagHandle
+execute 'syn match yamlTagHandle contained nextgroup=yamlTagPrefix '.string(s:c_tag_handle.'\s\+')
+execute 'syn match yamlTagPrefix contained nextgroup=yamlComment ' . string(s:ns_tag_prefix)
+
+syn match yamlYAMLDirective '%YAML\s\+'  contained nextgroup=yamlYAMLVersion
+syn match yamlYAMLVersion   '\d\+\.\d\+' contained nextgroup=yamlComment
+
+execute 'syn match yamlReservedDirective contained nextgroup=yamlComment '.
+            \string('%\%(\%(TAG\|YAML\)\s\)\@!'.s:ns_directive_name)
+
+syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"'
+            \ contains=yamlEscape
+            \ nextgroup=yamlKeyValueDelimiter
+syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''"  end="'"
+            \ contains=yamlSingleEscape
+            \ nextgroup=yamlKeyValueDelimiter
+syn match  yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)'
+syn match  yamlSingleEscape contained "''"
+
+syn match yamlBlockScalarHeader contained '\s\+\zs[|>]\%([+-]\=[1-9]\|[1-9]\=[+-]\)\='
+
+syn cluster yamlFlow contains=yamlFlowString,yamlFlowMapping,yamlFlowCollection
+syn cluster yamlFlow      add=yamlFlowMappingKey,yamlFlowMappingMerge
+syn cluster yamlFlow      add=yamlConstant,yamlPlainScalar,yamlFloat
+syn cluster yamlFlow      add=yamlTimestamp,yamlInteger,yamlMappingKeyStart
+syn cluster yamlFlow      add=yamlComment
+syn region yamlFlowMapping    matchgroup=yamlFlowIndicator start='{' end='}' contains=@yamlFlow
+syn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' contains=@yamlFlow
+
+execute 'syn match yamlPlainScalar /'.s:ns_plain_out.'/'
+execute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/'
+
+syn match yamlMappingKeyStart '?\ze\s'
+syn match yamlMappingKeyStart '?' contained
+
+execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\ze\s*:/ contained '.
+            \'nextgroup=yamlKeyValueDelimiter'
+syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlKeyValueDelimiter
+
+syn match yamlBlockCollectionItemStart '^\s*\zs-\%(\s\+-\)*\s' nextgroup=yamlBlockMappingKey,yamlBlockMappingMerge
+execute 'syn match yamlBlockMappingKey /^\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ '.
+            \'nextgroup=yamlKeyValueDelimiter'
+execute 'syn match yamlBlockMappingKey /\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ contained '.
+            \'nextgroup=yamlKeyValueDelimiter'
+syn match yamlBlockMappingMerge /^\s*\zs<<\ze:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter
+syn match yamlBlockMappingMerge /<<\ze\s*:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter contained
+
+syn match   yamlKeyValueDelimiter /\s*:/ contained
+syn match   yamlKeyValueDelimiter /\s*:/ contained
+
+syn keyword yamlConstant true True TRUE false False FALSE
+syn keyword yamlConstant null Null NULL
+syn match   yamlConstant '\<\~\>'
+
+syn match   yamlTimestamp /\%([\[\]{}, \t]\@!\p\)\@<!\%(\d\{4}-\d\d\=-\d\d\=\%(\%([Tt]\|\s\+\)\%(\d\d\=\):\%(\d\d\):\%(\d\d\)\%(\.\%(\d*\)\)\=\%(\s*\%(Z\|[+-]\d\d\=\%(:\d\d\)\=\)\)\=\)\=\)\%([\[\]{}, \t]\@!\p\)\@!/
+
+syn match   yamlInteger /\%([\[\]{}, \t]\@!\p\)\@<!\%([+-]\=\%(0\%(b[0-1_]\+\|[0-7_]\+\|x[0-9a-fA-F_]\+\)\=\|\%([1-9][0-9_]*\%(:[0-5]\=\d\)\+\)\)\|[1-9][0-9_]*\)\%([\[\]{}, \t]\@!\p\)\@!/
+syn match   yamlFloat   /\%([\[\]{}, \t]\@!\p\)\@<!\%([+-]\=\%(\%(\d[0-9_]*\)\.[0-9_]*\%([eE][+-]\d\+\)\=\|\.[0-9_]\+\%([eE][-+][0-9]\+\)\=\|\d[0-9_]*\%(:[0-5]\=\d\)\+\.[0-9_]*\|\.\%(inf\|Inf\|INF\)\)\|\%(\.\%(nan\|NaN\|NAN\)\)\)\%([\[\]{}, \t]\@!\p\)\@!/
+
+execute 'syn match yamlNodeTag '.string(s:c_ns_tag_property)
+execute 'syn match yamlAnchor  '.string(s:c_ns_anchor_property)
+execute 'syn match yamlAlias   '.string(s:c_ns_alias_node)
+
+syn match yamlDocumentStart '^---\ze\%(\s\|$\)'
+syn match yamlDocumentEnd   '^\.\.\.\ze\%(\s\|$\)'
+
+hi def link yamlTodo                     Todo
+hi def link yamlComment                  Comment
+
+hi def link yamlDocumentStart            PreProc
+hi def link yamlDocumentEnd              PreProc
+
+hi def link yamlDirectiveName            Keyword
+
+hi def link yamlTAGDirective             yamlDirectiveName
+hi def link yamlTagHandle                String
+hi def link yamlTagPrefix                String
+
+hi def link yamlYAMLDirective            yamlDirectiveName
+hi def link yamlReservedDirective        Error
+hi def link yamlYAMLVersion              Number
+
+hi def link yamlString                   String
+hi def link yamlFlowString               yamlString
+hi def link yamlFlowStringDelimiter      yamlString
+hi def link yamlEscape                   SpecialChar
+hi def link yamlSingleEscape             SpecialChar
+
+hi def link yamlBlockCollectionItemStart Label
+hi def link yamlBlockMappingKey          Identifier
+hi def link yamlBlockMappingMerge        Special
+
+hi def link yamlFlowMappingKey           Identifier
+hi def link yamlFlowMappingMerge         Special
+
+hi def link yamlMappingKeyStart          Special
+hi def link yamlFlowIndicator            Special
+hi def link yamlKeyValueDelimiter        Special
+
+hi def link yamlConstant                 Constant
+
+hi def link yamlAnchor                   Type
+hi def link yamlAlias                    Type
+hi def link yamlNodeTag                  Type
+
+hi def link yamlInteger                  Number
+hi def link yamlFloat                    Float
+hi def link yamlTimestamp                Number
 
 let b:current_syntax = "yaml"
 
+unlet s:ns_word_char s:ns_uri_char s:c_verbatim_tag s:c_named_tag_handle s:c_secondary_tag_handle s:c_primary_tag_handle s:c_tag_handle s:ns_tag_char s:c_ns_shorthand_tag s:c_non_specific_tag s:c_ns_tag_property s:c_ns_anchor_char s:c_ns_anchor_name s:c_ns_anchor_property s:c_ns_alias_node s:ns_char s:ns_directive_name s:ns_local_tag_prefix s:ns_global_tag_prefix s:ns_tag_prefix s:c_indicator s:ns_plain_safe_out s:c_flow_indicator s:ns_plain_safe_in s:ns_plain_first_in s:ns_plain_first_out s:ns_plain_char_in s:ns_plain_char_out s:ns_plain_out s:ns_plain_in
+
 let &cpo = s:cpo_save
 unlet s:cpo_save
+
diff -Naur vim73.orig/runtime/syntax/zimbu.vim vim73/runtime/syntax/zimbu.vim
--- vim73.orig/runtime/syntax/zimbu.vim	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/syntax/zimbu.vim	2013-08-04 19:09:09.853946134 +0000
@@ -0,0 +1,130 @@
+" Vim syntax file
+" Language:	Zimbu
+" Maintainer:	Bram Moolenaar
+" Last Change:	2012 Jun 01
+
+if exists("b:current_syntax")
+  finish
+endif
+
+syn include @Ccode syntax/c.vim
+
+syn keyword zimbuTodo		TODO FIXME XXX contained
+syn match   zimbuNoBar          "|" contained
+syn match   zimbuParam  	"|[^| ]\+|" contained contains=zimbuNoBar
+syn match   zimbuComment	"#.*$" contains=zimbuTodo,zimbuParam,@Spell
+
+syn match   zimbuChar	"'\\\=.'"
+
+syn keyword zimbuBasicType	bool status
+syn keyword zimbuBasicType	int1 int2 int3 int4 int5 int6 int7
+syn keyword zimbuBasicType	int9 int10 int11 int12 int13 int14 int15
+syn keyword zimbuBasicType	int int8 int16 int32 int64 bigInt
+syn keyword zimbuBasicType	nat nat8 byte nat16 nat32 nat64 bigNat
+syn keyword zimbuBasicType	nat1 nat2 nat3 nat4 nat5 nat6 nat7
+syn keyword zimbuBasicType	nat9 nat10 nat11 nat12 nat13 nat14 nat15
+syn keyword zimbuBasicType	float float32 float64 float80 float128
+syn keyword zimbuBasicType	fixed1 fixed2 fixed3 fixed4 fixed5 fixed6
+syn keyword zimbuBasicType	fixed7 fixed8 fixed9 fixed10 fixed11 fixed12
+syn keyword zimbuBasicType	fixed13 fixed14 fixed15
+
+syn keyword zimbuCompType	string stringval cstring varstring
+syn keyword zimbuCompType	bytes varbytes
+syn keyword zimbuCompType	tuple array list dict multiDict set multiSet
+syn keyword zimbuCompType	complex complex32 complex64 complex80 complex128
+syn keyword zimbuCompType	proc func def thread evalThread lock cond pipe
+
+syn keyword zimbuType   VAR ANY USE GET
+syn match zimbuType	"IO.File"
+syn match zimbuType	"IO.Stat"
+
+syn keyword zimbuStatement IF ELSE ELSEIF WHILE REPEAT FOR IN TO STEP
+syn keyword zimbuStatement DO UNTIL SWITCH WITH
+syn keyword zimbuStatement TRY CATCH FINALLY
+syn keyword zimbuStatement GENERATE_IF GENERATE_ELSE GENERATE_ELSEIF
+syn keyword zimbuStatement CASE DEFAULT FINAL ABSTRACT VIRTUAL DEFINE REPLACE
+syn keyword zimbuStatement IMPLEMENTS EXTENDS PARENT LOCAL
+syn keyword zimbuStatement PART ALIAS CONNECT WRAP
+syn keyword zimbuStatement BREAK CONTINUE PROCEED
+syn keyword zimbuStatement RETURN EXIT THROW
+syn keyword zimbuStatement IMPORT AS OPTIONS MAIN
+syn keyword zimbuStatement INTERFACE MODULE ENUM BITS SHARED
+syn match zimbuStatement "\<\(FUNC\|PROC\|DEF\)\>"
+syn match zimbuStatement "\<CLASS\>"
+syn match zimbuStatement "}"
+
+syn match zimbuAttribute "@backtrace=no\>"
+syn match zimbuAttribute "@backtrace=yes\>"
+syn match zimbuAttribute "@abstract\>"
+syn match zimbuAttribute "@earlyInit\>"
+syn match zimbuAttribute "@default\>"
+syn match zimbuAttribute "@define\>"
+syn match zimbuAttribute "@replace\>"
+syn match zimbuAttribute "@final\>"
+
+syn match zimbuAttribute "@private\>"
+syn match zimbuAttribute "@protected\>"
+syn match zimbuAttribute "@public\>"
+syn match zimbuAttribute "@file\>"
+syn match zimbuAttribute "@directory\>"
+syn match zimbuAttribute "@read=private\>"
+syn match zimbuAttribute "@read=protected\>"
+syn match zimbuAttribute "@read=public\>"
+syn match zimbuAttribute "@read=file\>"
+syn match zimbuAttribute "@read=directory\>"
+syn match zimbuAttribute "@items=private\>"
+syn match zimbuAttribute "@items=protected\>"
+syn match zimbuAttribute "@items=public\>"
+syn match zimbuAttribute "@items=file\>"
+syn match zimbuAttribute "@items=directory\>"
+
+syn keyword zimbuMethod NEW EQUAL COPY COMPARE SIZE GET SET
+
+syn keyword zimbuOperator IS ISNOT ISA ISNOTA
+
+syn keyword zimbuModule  ARG CHECK E IO PROTO SYS HTTP ZC ZWT TIME THREAD
+
+syn match zimbuString  +"\([^"\\]\|\\.\)*\("\|$\)+
+syn match zimbuString  +R"\([^"]\|""\)*\("\|$\)+
+syn region zimbuString  start=+'''+ end=+'''+
+
+syn keyword zimbuFixed  TRUE FALSE NIL THIS THISTYPE FAIL OK
+syn keyword zimbuError  NULL
+
+" trailing whitespace
+syn match   zimbuSpaceError   display excludenl "\S\s\+$"ms=s+1
+" mixed tabs and spaces
+syn match   zimbuSpaceError   display " \+\t"
+syn match   zimbuSpaceError   display "\t\+ "
+
+syn match zimbuUses contained "uses([a-zA-Z_ ,]*)"
+syn match zimbuBlockComment contained " #.*"
+
+syn region zimbuCregion matchgroup=zimbuCblock start="^>>>" end="^<<<.*" contains=@Ccode,zimbuUses,zimbuBlockComment keepend
+
+syn sync minlines=2000
+
+hi def link zimbuBasicType	Type
+hi def link zimbuCompType	Type
+hi def link zimbuType		Type
+hi def link zimbuStatement	Statement
+hi def link zimbuOperator	Statement
+hi def link zimbuMethod		PreProc
+hi def link zimbuModule		PreProc
+hi def link zimbuUses		PreProc
+hi def link zimbuAttribute	PreProc
+hi def link zimbuString		Constant
+hi def link zimbuChar		Constant
+hi def link zimbuFixed		Constant
+hi def link zimbuComment	Comment
+hi def link zimbuBlockComment	Comment
+hi def link zimbuCblock		Comment
+hi def link zimbuTodo		Todo
+hi def link zimbuParam		Constant
+hi def link zimbuNoBar		Ignore
+hi def link zimbuSpaceError	Error
+hi def link zimbuError		Error
+
+let b:current_syntax = "zimbu"
+
+" vim: ts=8
diff -Naur vim73.orig/runtime/tools/ccfilter_README.txt vim73/runtime/tools/ccfilter_README.txt
--- vim73.orig/runtime/tools/ccfilter_README.txt	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/tools/ccfilter_README.txt	2013-08-04 19:09:09.873946074 +0000
@@ -11,7 +11,7 @@
     cc -D_IRIX    ccfilter.c -o ccfilter
     cc -D_SOLARIS ccfilter.c -o ccfilter
     cc -D_HPUX    ccfilter.c -o ccfilter
-You can then copy ccfilter to it's target destination (i.e: /usr/local/bin).
+You can then copy ccfilter to its target destination (i.e: /usr/local/bin).
 The man page ccfilter.1 has to be copied to somewhere in your MANPATH,
 under a man1 directory (i.e: /usr/local/man/man1).
 
diff -Naur vim73.orig/runtime/tools/efm_perl.pl vim73/runtime/tools/efm_perl.pl
--- vim73.orig/runtime/tools/efm_perl.pl	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/tools/efm_perl.pl	2013-08-04 19:09:09.877279398 +0000
@@ -3,7 +3,7 @@
 # vimparse.pl - Reformats the error messages of the Perl interpreter for use
 # with the quickfix mode of Vim
 #
-# Copyright () 2001 by Jrg Ziefle <joerg.ziefle@gmx.de>
+# Copyright (c) 2001 by Joerg Ziefle <joerg.ziefle@gmx.de>
 # You may use and distribute this software under the same terms as Perl itself.
 #
 # Usage: put one of the two configurations below in your ~/.vimrc (without the
diff -Naur vim73.orig/runtime/tools/vim_vs_net.cmd vim73/runtime/tools/vim_vs_net.cmd
--- vim73.orig/runtime/tools/vim_vs_net.cmd	2010-05-15 11:04:00.000000000 +0000
+++ vim73/runtime/tools/vim_vs_net.cmd	2013-08-04 19:09:09.887279368 +0000
@@ -7,12 +7,12 @@
 @rem      Arguments - +$(CurLine) $(ItemPath)
 @rem      Init Dir  - Empty
 @rem
-@rem Coutesy of Brian Sturk
+@rem Courtesy of Brian Sturk
 @rem
 @rem --remote-silent +%1 is a command +954, move ahead 954 lines
 @rem --remote-silent %2 full path to file
 @rem In Vim
-@rem    :h --remote-silent for mor details
+@rem    :h --remote-silent for more details
 @rem
 @rem --servername VS_NET
 @rem This will create a new instance of vim called VS_NET.  So if you
diff -Naur vim73.orig/runtime/tutor/Makefile vim73/runtime/tutor/Makefile
--- vim73.orig/runtime/tutor/Makefile	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/Makefile	2013-08-04 19:09:09.893946014 +0000
@@ -6,7 +6,7 @@
 # Similarly for Russian and Korean
 
 all: tutor.utf-8 \
-	tutor.bj \
+	tutor.bar \
 	tutor.ca.utf-8 \
 	tutor.de.utf-8 \
 	tutor.el tutor.el.cp737 \
@@ -18,6 +18,7 @@
 	tutor.it.utf-8 \
 	tutor.ja.sjis tutor.ja.euc \
 	tutor.ko.euc \
+	tutor.nl \
 	tutor.no.utf-8 \
 	tutor.nb \
 	tutor.nb.utf-8 \
@@ -28,8 +29,8 @@
 tutor.utf-8: tutor
 	iconv -f ISO-8859-1 -t UTF-8 tutor > tutor.utf-8
 
-tutor.bj: tutor.bj.utf-8
-	iconv -f UTF-8 -t ISO-8859-1 tutor.bj.utf-8 > tutor.bj
+tutor.bar: tutor.bar.utf-8
+	iconv -f UTF-8 -t ISO-8859-1 tutor.bar.utf-8 > tutor.bar
 
 tutor.ca.utf-8: tutor.ca
 	iconv -f ISO-8859-1 -t UTF-8 tutor.ca > tutor.ca.utf-8
@@ -73,6 +74,9 @@
 tutor.ko.euc: tutor.ko.utf-8
 	iconv -f UTF-8 -t EUC-KR tutor.ko.utf-8 > tutor.ko.euc
 
+tutor.nl: tutor.nl.utf-8
+	iconv -f UTF-8 -t ISO-8859-1 tutor.nl.utf-8 > tutor.nl
+
 tutor.no.utf-8: tutor.no
 	iconv -f ISO-8859-1 -t UTF-8 tutor.no > tutor.no.utf-8
 
diff -Naur vim73.orig/runtime/tutor/tutor vim73/runtime/tutor/tutor
--- vim73.orig/runtime/tutor/tutor	2010-07-27 21:01:53.000000000 +0000
+++ vim73/runtime/tutor/tutor	2013-08-04 19:09:09.900612661 +0000
@@ -658,7 +658,7 @@
   4. Type  w TEST  , where TEST is a filename that does not exist yet.  Verify
      that you see  :'<,'>w TEST  before you press <ENTER>.
 
-  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  !ls
+  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  :!ls
      to see it.  Do not remove it yet!  We will use it in the next lesson.
 
 NOTE:  Pressing  v  starts Visual selection.  You can move the cursor around
diff -Naur vim73.orig/runtime/tutor/tutor.bar vim73/runtime/tutor/tutor.bar
--- vim73.orig/runtime/tutor/tutor.bar	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/tutor/tutor.bar	2013-08-04 19:09:09.900612661 +0000
@@ -0,0 +1,981 @@
+===============================================================================
+=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7    =
+===============================================================================
+
+   Dyr Wimm ist ayn gro mchtigs Blat, ds was mit aynn Wsn Befelh aufwartt; z
+   vil,  d myn s allsand  in aynn Schainer  wie dnn daader  unterbrng.  Der
+   Schainer ist yso aufbaut,  d yr halt netty die Befelh allsand bringt, wost
+   brauchst, dst mit iem fr s Eerste wirklich bbs anfangen kanst.
+   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; ds haisst,
+   wennst di nit groo mit n Prbln und Tftln aufhaltst.
+
+   OBACHT:
+   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort ndern.  Dsswgn
+   machst eyn n Bstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
+   ds Gwort daader mit n Befelh  "vimtutor bar"  ausherlaassn, ist s ee schoon
+   ayn Aamum.
+   Mir kan s  nit oft gnueg  sagn,  d  der Schainer daader  istig  gan n ebn
+   ghoert.  Also muesst schoon aau die Befelh +ausfern, wennst ys gscheid ler-
+   nen willst. Mit n Lsn yllain ist s +nit taan!
+
+   Ietz schaust grad non, d dein Fststlltastn nit druckt ist; und aft geest
+   glei aynmaal mit dyr j-Tastn abwrts (yso laaufft ds nmlich),  hinst dst
+   de gantze Letzn 1.1 auf n Bildschirm haast.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.1: MIT N MRKL UMAYNANDFARN
+
+** Dyrmitst mit n Mrkl umaynandkimmst, druck  h, j, k und l  wie unt zaigt. **
+            ^            Ayn slsbrugg:
+            k            De Tastn  h  ist winster und +geet aau gan winster.
+   < h             l >   S  l  leit zesm und richtt si gan zesm.
+            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
+            v            Mit n  k  kimmst gan n KOPF.            
+  1. Ietz ruedertst ainfach mit n Mrkl auf n Bildschirm umaynand,  hinst dst
+     di sicher felst.
+  2. Halt d Abhin-Tastn  (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
+     kimmst gan dyr naehstn Letzn.
+     
+  3. Wie gsait, ietz bewgst di also mit derer Tastn gan dyr Letzn 1.2.
+
+Non bbs: Allweil, wenn dyr niemer ganz wol ist, wasst bbenn druckt haast, aft
+          zipfst  <ESC>  ; naacher bist wider ganz gwon in dyr Befelhs-Artweis.
+
+      
+          Nbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
+          hjkl  seind z haissn s Wimm-Urgstain;  und de "Hrtn" seind ganz dyr-
+          fr, d myn bei +dene bleibt. Prblt s ainfach aus!
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 1.2: NN WIMM AUSSCHALTTN
+
+
+  ALSO, EE WENNST BBS VON DAA UNT AUSFERST,  LIS LIEBER ZEERST DE GANTZE LET-
+  ZN!
+
+  1. Druck d <ESC>-Tastn, dyrmitst aau gwi in dyr Befelhs-Artweis bist.
+  
+  2. Demmlt  :q!<EIN>  .
+     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst bbenn  gndert
+     haast.
+
+  3. Balst nn Eingib seghst, gib d Faudung ein,  wo di zo dnn Schainer brun-
+     gen haat, also   vimtutor bar<EIN>  .
+
+  4. Also, wenn ietz allsse sitzt, naacherd ferst d Schritt 1 hinst 3 aus, mit
+     wasst ys Blat verlaasst und aft wider einhinkimmst.
+
+Anmrkung: Mit  :q!<EIN>  verwirffst allss, wasst gndert older enther gschribn
+           haast. In aynn ttlych Letznen lernst acht, wiest ds allss in ayner
+           Dautticht speichertst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 1.3: GWORT BARECHTN - LSCHN 
+
+         
+         ** Druck  x  , dyrmitst ds Zaichen unter n Mrkl lschst. **
+
+  1. Bewg di mit n Mrkl auf de mit  --->  angmrkte Zeil unt.
+
+  2. Zo n Faeler Verbssern  farst mit n Mrkl  netty  auf ds Zaichen,  ds wo
+     glscht ghoert.
+
+  3. Druck de Tastn  x  , dst ds berflssige Zaichen lschst.
+
+  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst d dyr Saz stimmt.
+
+---> De Kkuue sprangg bber nn Maanad.
+
+  5. Wenn ietz de Zeil verbssert ist, geest gan dyr Letzn 1.4. weiter.
+
+Und ganz wichtig:  Dyrweilst dnn Schainer durcharechtst,  versuech nit bbenn,
+                   allss auswendig z lernen;  nn, lern ainfach mit n Anwenddn!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.4: GWORT BARECHTN - EINFEGN
+
+
+                  **  Druck  i  , dyrmitst bbs einfegst. **
+
+  1. Bewg nn Mrkl zo dyr eerstn untignen Zeil, wo mit  --->  angeet.
+
+  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewg nn Mrkl  auf ds
+     eerste Zaichen NAACH derer Stll, daa wo s Gwort eingfegt werdn sollt.
+
+  3. Druck  i  und gib ds ein, was abgeet.
+
+  4. Wenn ieweils ayn Faeler verweitert ist, aft druck   <ESC>  ; dyrmit kimmst
+     gan dyr Befelhsartweis zrugg.
+     So, und ietz tuest ainfach yso weiter, hinst d dyr Saz stimmt.
+
+---> Daader gt dd bbs b.
+---> Daader geet diend bbs ab.
+
+  5. Balst mainst,  dst ys Gwort-Einfegn kanst, aft geest gan dyr Letzn 1.5.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.5: GWORT BARECHTN - ANFEGN
+
+
+                      ** Druck  A  gan n Gwort Anfegn. **
+
+  1. Gee mit n Mrkl gan dyr eerstn untignen Zeil, wo ayn  --->  dyrvor haat.
+     Daa ist s gleich, wo gnaun dyr Mrkl in derer Zeil steet.  
+
+  2. Demmlt  A  und gib de entsprchetn Ergntzungen ein.
+
+  3. Wennst mit n Anfegn frtig bist, aft druckst  <ESC>  , dst wider eyn de
+     Befelhsartweis zruggkimmst.
+
+  4. So,  und ietz geest aft non gan dyr zwaittn mit  --->  angmrktn Zeil; und
+     daadl machst ys netty yso.
+
+---> In derer Zeil gee  
+     In derer Zeil geet ayn Weeng ayn Gwort ab.
+---> Aau daader stee
+     Aau daader steet bbs Unvollstndigs. 
+
+  5. Wennst s Anfegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 1.6: AYN DAUTTICHT BARECHTN
+
+
+     ** Mit  :wq  speichertst ayn Dautticht und verlaasst nn Wimm ganz. **
+
+  !! OBACHT:  Ee wennst mit dnn alln daa unt weitertuest, lis zeerst de gantze
+     Letzn durch!!
+
+  1. Verlaa also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
+
+  2. Gib d Faudung eyn n Eingib ein:  vim Schainer<EIN>  . 'vim' ruefft s Blat
+     auf,  und  'Schainer'  haisst de Dautticht,  wost barechtn willst.  Dyrmit
+     haast also ayn Dautticht, d wost barechtn kanst.
+
+  3. Ietz  fegst bbs ein older lschst bbs,  wiest ys in de vorignen Letznen
+     glernt haast.
+
+  4. Speichert de gnderte Dautticht und verlaa nn Wimm mit  :wq<EIN>  .
+
+  5. Schmei nn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
+
+  6. Aft dst  de obignen Schritt glsn und kppt haast,  kanst ys durchfern.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 1
+
+
+  1. Dyr Mrkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
+              h (winst)     j (ab)        k (auf)       l (zes)
+
+  2. Um nn Wimm umbb n Eingib aus z ginnen, demmlt:  vim DAUTTICHT<EIN>  .
+
+  3. Willst nn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
+                <ESC>  und  :q!<EIN>  .
+     Gan n Verlaassn und Speichern aber zipfst  <ESC>  und  :wq<EIN>  .
+
+  4. Willst ds Zaichen lschn, daa wo dyr Mrkl drauf ist, demmltst  x  .
+
+  5. Willst bbs vor n Mrkl eingbn, zipfst  i  und drafter  <ESC>  .
+     Mechst ys aber eyn s Zeilnend anhinhngen, benutzt ys   A  .
+     Und ainfach naach n Mrkl fegst ys mit  a  ein.
+
+Anmrkung:  Druckst  <ESC>  ,  kimmst eyn de Befelhsartweis zrugg older brichst
+            ayn Faudung ab, d wo dyr schiefgangen ist.
+
+     Ietz tue mit dyr Letzn 2 weiter.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 2.1.: LSHFAUDUNGEN
+
+
+                 ** Demmlt  dw  , dyrmitst ayn Wort lschst. **
+
+  1. Druck  <ESC>  ,  dyrmit s aau gwi ist,  dst in dyr Befelhsartweis bist.
+
+  2. Bewg nn Mrkl zo dyr mit  --->  angmrktn Zeil unt.
+
+  3. Und daa geest ietz auf n Anfang von aynn Wort, ds wo glscht ghoert.
+
+  4. Zipf  dw  , dst ds gantze Wort lschst.
+
+  Nbnbei:  Dyr Buechstabn  d  erscheint auf dyr lsstn Zeil  von n Bildschirm,
+            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, d bbs kimmt, al-
+            so  daader ayn  w  .  Seghst  freilich  bbs Anderts  wie ayn  d  ,
+            naacherd haast  bbs Falschs  demmlt.  Druck aft  <ESC>  und prblt
+            s non aynmaal.
+---> Ayn ttlych Wrter lustig ghoernd nit Fisper eyn dnn Saz einhin.
+
+  5. fert  d Schritt  3 und 4,  hinst d  dyr Saz psst,  und gee aft gan dyr
+     Letzn 2.2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 2.2.: NON MEERER LSHFAUDUNGEN
+
+
+            ** Gib  d$  ein, dst hinst eyn s Zeilnend lschst. **
+
+  1. Druck  <ESC>  , dyrmitst aau gwi in dyr Befelhsartweis bist.
+
+  2. Bewg nn Mrkl hinst eyn de mit  --->  angmrkte Zeil untn.
+
+  3. Gee mit n Mrkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
+
+  4. Zipf  d$  , dst hinst eyn s End von dyr Zeil lschst.
+  
+---> bber haat s End von dyr Zeil doplt eingbn. doplt eingbn.
+
+
+  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 2.3: PFEMERER UND WOLENDER
+
+
+  Vil Faudungen,   wo s Gwort ndernd, stznd si aus aynn Pfemerer und aynn Wo-
+  lend zamm. Bal i also bbs lschn will, schreib i ainsting  d  und aft s "Wo-
+  lend", ds haisst also, "wolend", "wohin" d i will - older was i halt gnaun
+  lschn will.
+
+
+
+
+
+
+  Daader also, was i wie lschn kan:
+     w  -  hinst eyn n Anfang von n naehstn Wort AANE dnn sein eersts Zaichen.
+     e  -  gan n End von n ietzundn Wort MIT dnn seinn lsstn Zaichen.
+     $  -  zo n End von dyr Zeil MIT derer irn lsstn Zaichen.
+
+  Also lscht de Tastnfolg  de  allss umbb n Mrkl hinst eyn s Wortend.
+Anmrkung:   Gib i grad  ds zwaitte Zaichen  yllain ein,  ruckt halt dyr Mrkl
+             entsprchet weiter.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Letzn 2.4: MIT AYNN ZLER D WOLENDER FERN
+
+
+ ** Gib i ayn Zal vor aynn Wolend ein, werd ds Sel entsprchet oft gangen. **
+
+  1. Bewg nn Mrkl gan n Anfang von dyr Zeil mit  --->  dyrvor unt.
+
+  2. Zipf  2w  , dst mit n Mrkl zwai Wrter weitergeest.
+
+  3. Zipf  3e  , dst mit n Mrkl auf s End von n drittn Wort kimmst.
+
+  4. Zipf  0  (aynn Nuller), dst eyn n Anfang von dyr Zeil hinkimmst.
+
+  5. Widerhol d Schritt 2 und 3 mit verschaidne Zler.
+
+  ---> Ds ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
+
+  6. Gee weiter gan dyr Letzn 2.5.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 2.5: DURCH AYNN ZLER GLEI MEERER LSCHN
+
+
+        ** Ayn Zal vor aynn Pfemerer fert dnn entsprchet oft aus. **
+
+  Also, i mecht lschn,  und zwaar bbs Bestimmts,  und ds so und so oft:  Daa
+  dyrzue benutz i aynn Zler:
+                              d  Zler  Wolend (also nn Bewgungsschrit)
+
+  1. Bewg nn Mrkl zo n eerstn Wort in GROOSSBUECHSTABN in dyr mit  --->  an-
+     gmrktn Zeil.
+
+  2. Demmlt  d2w  , dyrmitst de ganz groogschribnen Wrter lschst.
+
+  3. fert  d Schritt 1 und 2  mit dnn entsprchetn Zler,  dyrmitst de drauf-
+     folgetn  ganz grogschribnen Wrter  mit ayner ainzignen Faudung  lschst:
+
+
+--->  D ABC DE Zeil FGHI JK LMN OP mit Wrter ist Q RS TUV ietz berichtigt.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          Letzn 2.6: ARECHTN AUF ZEILN
+
+
+               ** Zipf  dd  , um ayn gantze Zeil z lschn. **
+
+  Weil s gro oft vrkimmt,  d myn gantze Zeiln lscht,  kaamend schoon d Ent-
+  wickler von n Urwimm daa drauf,  d myn ainfach  dd  gan dnn Zwk schreibt.
+
+
+  1. Bewg nn Mrkl gan dyr zwaittn Zeil in n untignen "Gedicht".
+  2. Zipf  dd  ,  um d Zeil z lschn.
+  3. Ietz bewgst di gan dyr viertn Zeil.
+  4. Zipf  2dd  , um zwo Zeiln zo n Lschn.
+
+--->  1)  Roosn seind root;
+--->  2)  Drunter ist s Koot.
+--->  3)  Veigerln seind blau.
+--->  4)  Umgrabn tuet s d Sau.
+--->  5)  D Ur sait de Zeit,
+--->  6)  Sait, d s mi freut,
+--->  7)  Dirndl, dein Gschau.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Letzn 2.7: RUGGGNGIG MACHEN (RUGGLN) 
+
+
+             ** Zipf  u  , dyrmitst de lsstn Faudungen ruggltst **
+             ** older   U  , um ayn gantze Zeil widerherzstlln. **
+
+  1. Bewg nn Mrkl gan dyr mit  --->  angmrktn Zeil unt und gee dyrmit auf n
+     eerstn Faeler.
+  2. Zipf  x  , dst ds eerste z vile Zaichen lschst.
+  3. Ietz demmlt  u  , dyrmitst de lsste Faudung ruggltst.
+  4. Ietz behb  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
+  5. Aft gibst ayn  U  (groo) ein,  dst de Zeil wider yso hinbringst,  wie s
+     gwsn ist.
+  6. So,  und ietz  demmltst  so oft  u  , hinst dst s  U  und de andern Fau-
+     dungen rugggngig gmacht haast.
+  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst dst  allsand Be-
+     felh widerhergstllt, z haissn allsse rugg-grugglt haast  (also d Rugggn-
+     gigmachungen rugggngig gmacht).
+---> Beerichtig d Faeller voon dehrer Zeiil  und sttll s mitt n Ruggruggln wi-
+     der her.
+  8. Die Faudungen seind gro wichtig; s helffend ainn nrrisch weiter.
+     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 2
+
+
+  1. Um von n Mrkl aus hinst eyn s naehste Wort zo n Lschn, zipf:  dw
+  2. Um umbb n Mrkl hinst eyn s End von dyr Zeil zo n Lschn, demmlt  d$
+  3. Dyrmitst ayn gantze Zeil lschst, gib ein:  dd
+  4. Mechst ayn Bewgung, ayn "Wolend", fters,  stll de entsprchete Zal dyr-
+     vor:  3dw  older aau:  d3w
+  5. Dyr Pfueg fr ayn nderungsfaudung lautt yso:
+               Pfemerer   [Zal]   Bewgungsschrit (Wolend)
+     Und ds haisst:
+      Dyr PFEMERER gibt an, WAS taan ghoert, bbenn   d   =  lschn (delete).
+      [ZAL] - Ayn Zal KAN myn angbn, wenn myn halt ayn Wolend fter habn will.
+      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  bbenn
+      auf aynn Wortanfang (  w  ), s End von dyr Zeil (  $  ) und so weiter.
+
+  6. Dst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
+
+  7. Um bbs Vorigs wider z ruggln, gib ein:                u (klain also)
+     Um allsand nderungen in ayner Zeil z ruggln, haast:   U (also groo)
+     Um "rugg-z-ruggln", also allss wider herzstlln, zipf:  <STRG>r   
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 3.1: ANFEGN (put) 
+
+
+     ** Zipf  p  , dyrmitst bbs gnetty Glschts naach n Mrkl anfegst. **
+
+  1. Bewg nn Mrkl gan dyr eerstn untignen Zeil mit  --->  dyrvor.
+
+  2. Zipf  dd  ,  um sele Zeil z lschn und dyrmit in ayner Wimm-Osn zo n Spei-
+     chern.
+
+  3. Bewg nn Mrkl gan dyr Zeil c),  BER derer, daa wo de glschte Zeil ein-
+     hinkemmen sollt.
+
+  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast d Zeil unter derer
+     mit n Mrkl drinn.
+  5. fert  d Schritt 2 hinst 4,  hinst dst  allsand Zeiln  yso naachynaynand
+     haast, wie s hinghoernd.
+
+---> d) Kanst du ds aau?
+---> b) Veigerln seind blau.
+---> c) Bedachtn kan myn lernen.
+---> a) Roosn seind root.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Letzn 3.2: ERSTZN (replace)
+
+
+      ** Zipf  rx  , um ds Zaichen unter n Mrkl durch  x  z erstzn. **
+
+  1. Bewg nn Mrkl zo dyr eerstn untignen Zeil mit  --->  dyrvor.
+
+  2. Bewg nn Mrkl, hinst d yr auf n eerstn Faeler steet.
+
+  3. Zipf  r  und drafter ds Zaichen, wo dyrfr daa hinghoert.
+
+  4. Widerhol d Schritt 2 und 3,  hinst dst de eerste Zeil  gmae dyr zwaittn
+     berichtigt haast:
+--->  Wie d Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
+--->  Wie d Zeil eingbn wurd, wurdnd ainige falsche Tastnen zipft!
+
+  5. Ietz tue mit dyr Letzn 3.3 weiter.
+
+Anmrkung: Vergi nit drauf, dst mit n Anwenddn lernen solltst und nit bbenn
+           mit n Auswendiglernen!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          Letzn 3.3: NDERN (change)
+
+
+              ** Um hinst eyn s Wortend z ndern, zipf  ce  . **
+
+  1. Gee mit n Mrkl auf de eerste mit  --->  angmrkte Zeil.
+
+  2. Ietz farst netty auf s  "s"  von Wstwr hin.
+
+  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  rter  .
+
+  4. Druck  <ESC>  und bewg nn Mrkl zo n naehstn Zaichen, wo gndert ghoert.
+
+  5. fert  d Schritt 3 und 4,  hinst d  dyr eerste Saz  wie dyr zwaitte ist.
+
+---> Ainige Wstwr von derer Zlww ghhnnd mit n ndern-Pfemerer gaauu.
+---> Ainige Wrter von derer Zeil ghoernd mit n ndern-Pfemerer gndert.
+
+ce  lscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  Letzn 3.4.: NON MEERER NDERUNGEN PFELFS  c
+
+
+   ** D Lshfaudung  c  arechtt mit de nmlichnen Wolender wie d mit  d  **
+
+  1. Dyr nder-Pfemerer arechtt anleich wie d Lshfaudung mit   d  ,  und zwaar
+     yso:
+         c    [Zal]   Bewgungsschrit (Wolend)
+
+  2. D Wolender seind  de gleichn,  bbenn  w  fr Wort und  $  fr s Zeilnend.
+
+
+  3. Bewg di zo dyr eerstn untignen Zeil mit  --->  .
+
+  4. Ietz geest auf dnn eerstn Faeler.
+
+  5. Zipf  c$  , gib nn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
+     <ESC>.
+---> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
+---> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
+
+Denk allweil dran,  dst iederzeit  mit dyr Ruggtastn Faeler ausbssern kanst.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 3
+
+
+  1. Um ayn  vorher glschts Gwort  anzfegn,  zipf  p  .  Daa dyrmit  werd ds
+     gantze Gwort  NAACH n Mrkl  angfegt.  Wenn s ayn gantze Zeil  gwsn ist,
+     werd d sel als de Zeil unterhalb n Mrkl eingfegt.
+
+  2. Um ds Zaichen  unter n Mrkl,  also wo dyr Mrkl ist,  z erstzn, zipf  r
+     und aft ds Zaichen, wost daadl habn willst.
+
+  3. Dyr nderungspfemerer ( c = change) laasst ainn umbb n Mrkl hinst eyn s
+     End von n Wolend ndern. Zipf  ce  , dyrmitst umbb n Mrkl hinst eyn s End
+     von n Wort ndertst, und  c$  hinst eyn s End von dyr Zeil.
+
+  4. Fr d nderung lautt dyr Pfueg:
+
+     c   [Zal]   Wolend
+
+Ietz tue mit dyr naehstn Letzn weiter.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 4.1: MRKLSTLLUNG UND DAUTTICHTDARSTAND
+
+** Demmlt <STRG>g, dst nn Befand und Darstand von dyr Dautticht anzaigst. **
+  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
+
+Anmrkung: Lis d gantze Letzn daader durch, ee wennst iewign bbs unternimmst!
+
+  1. Druck  <STRG>g  .  Auf ds hin erscheint auf derer Seitt ganz unt ayn Dar-
+     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
+     Mrk dyr de Zeilnnummer fr n Schrit 3.
+
+Anmrkung:  Mglicherweis  seghst aau nn Mrklbefand  in n zesmen untern Bild-
+            schirmgg. Aft ist s "Lindl" (ruler) eingstllt;  meerer ber ds
+            laasst dyr dyr Befelh   :help 'ruler'   ausher.
+  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
+     gg  gibst ein, dst gan n Anfang von dyr Dautticht aufhinkimmst.
+
+  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
+     Ds bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest ds eerste
+     Maal  <STRG>g  gadruckst.
+
+  4. Wennst di sicher gnueg felst, aft fer d Schritt 1 hinst 3 aus.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
+               
+
+  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
+
+  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Ds sel wie aau dyr
+     Mrkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
+
+  2. Ietz zipf  Faeeler<EIN>  . Netty um ds 'Faeeler' willst ietz suechen.
+
+  3. Willst um gnaun dnn Ausdruk weitersuechen, zipf ainfach  n  (wie next).
+     Willst hinzrugg suechen, aft gibst  N  ein.
+
+  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
+
+  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, nimm  <STRG>o , und ds
+     fter,  wennst weiter zrugg willst. Mit  <STRG>i  widerum kimmst vorwrts.
+
+--->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
+
+Anmrkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
+            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wr auf aus.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 4.3: DE GGNKLAMMERN FINDDN
+
+
+   ** Zipf  %  , um de entsprchete Klammer  )  ,  ]  older  }  z finddn. **
+
+  1. Stz nn Mrkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
+     in dyr untignen Zeil, wo mit  --->  angmrkt ist.
+
+  2. Ietzet zipf s Zaichen  %  .
+
+  3. Dyr Mrkl geet ietz auf de pssete schliessete Klammer.
+
+  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr ffneretn Klammer zrugg.
+
+  5. Stz nn Mrkl auf ayn anderne Klammer von   ({[]})   und prblt   %  aus.
+
+---> Ds ( ist  bloo ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
+
+Anmrkung:  Um d Mglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
+            Spaichgwort verzweiflt ayn faelete Ggnklammer suechst!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 4.4: D ERSTZUNGSFAUDUNG (substitute)
+
+
+        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Erstzn. **
+
+  1. Gee mit n Mrkl zo dyr unt steehetn mit  --->  angmrktn Zeil.
+
+  2. Zipf  :s/dee/de <EIN>  . Der Befelh erstzt alsnan grad ds +eerste "dee",
+     wo vrkimmt.
+
+  3. Ietz prblt s mit  :s/dee/de/g  . Ds zuestzliche  g  ("Pflok"  nennt myn
+     bbs Slchers) bewirkt, d allss, was dyrmit kennzaichnet ist,  innerhalb
+     von dyr ainn Zeil erstzt werd.
+
+---> Dee schoenste Zeit, d myn dee Blemln anschaut, ist dee schoene Lan-
+     gesszeit.
+  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n ndern,  zipf
+     :#,#s/alt/neu/g  ,  wobei # ieweils fr de eerste und lsste Zeil von dnn
+     Pfraich steet.
+     :%s/alt/neu/g  zipfst, dst d Vrkemmen in dyr gantzn Dautticht ndertst.
+        Mit  :%s/alt/neu/gc  finddst allsand Vrkemmen in dyr gsamtn Dautticht;
+     daa werst aber zeerst non gfraagt, obst ys erstzn willst older nity.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 4
+                        
+  1. <STRG>g   zaigt dnn ietzundn Dauttichtbefand  und nn Darstand dyrvon an.
+           G   bringt di an s End von dyr Dautticht.
+      <Zal>G   bringt di gan dyr entsprchetn Zeilnnummer.
+     <Zal>gg   geet +grad yso.
+          gg   bringt di zo dyr eerstn Zeil.
+  2. D Eingaab von  /  mit aynn Ausdruk suecht VRSHLING um dnn Ausdruk.
+     Gibst  ?  und aynn Suechbegrif ein, suecht s um dnn RSHLING.
+     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
+     gsuecht. Mit  N  geet s umkeerter weiter.
+     <STRG>o  bringt di zo lterne Befndd zrugg,  <STRG>i  zo neuerne.
+
+  3. D Eingaab von  % , wenn dyr Mrkl auf ainer von dene Klammern steet:   ({[
+     )]}  , bringt di zo dyr Ggnklammer.
+
+  4. Um ds eerste Vrkemmen von  "alt"  in ayner Zeil durch  "neu"  z erstzn,
+     zipf  :s/alt/neu  .
+     Um allsand in ayner Zeil z erstzn, zipf  :s/alt/neu/g  .
+     Mechst allss in zwo Zeiln erstzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
+     Mechst allss in dyr gantzn Dautticht erstzn, gib ein:  :%s/alt/neu/g    .
+     Willst ayn ieds Maal bstaetln, hng 'c' wie confirm hint anhin.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFERN 
+            
+
+   ** Willst ayn Gffaudung ausfern, gib ainfach d sel naach  :!  ein. **
+ 
+  1. Zipf  dnn bekanntn Befelh   :  ,  dyrmitst  mit n Mrkl  auf n Bildschirm
+     ganz abhin kimmst. Draufhin kanst aynn gwonen Gfbefelh eingbn.
+
+  2. Zeerst  kimmt aber non ayn Ruefzaichen   !  .  Und ietzet haast d Mglich-
+     keit, ayn beliebige ausserige Gffaudung auszfern.
+
+  3. Als Beispil zipf   :!ls<EIN>  ;  und schoon haast ayn Auflistung von deinn
+     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wrst.  Geet   ls
+     aus iewign aynn Grund nit, aft prblt s mit  :!dir<EIN>  .
+
+Also non aynmaal: Mit dnn Angang kan ayn iede beliebige ausserige Faudung aus-
+                  gfert werdn, aau mit Auerwerdd.
+
+Und wolgmrkt:    Alle Befelh,  wo mit  :  angeend,  messend mit  <EIN>  bst-
+                  tigt werdn. Ds dyrsagn myr frba +niemer.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+           Letzn 5.2: NON MEERER DRBER, WIE MYN DAUTTICHTN SCHREIBT
+
+
+     ** Um bbs Gnderts neu z speichern, zipf  :w NEUER_DAUTTICHTNAM  . **
+
+  1. Zipf  :!dir   older  :!ls  ,  dst dyr ayn Auflistung von deinn Verzaich-
+     niss ausherlaasst. Dst drafter  <EIN>  eingbn muesst, waisst ee schoon.
+
+  2. Suech dyr aynn Dauttichtnam aus, dnn wo s non nit geit, bbenn  POCH  .
+
+  3. Ietz demmlt:  :w POCH  (also mit POCH als dnn neuen Dauttichtnam).
+
+  4. Ds speichert ietz de gantze Dautticht, also nn Wimmschainer,  unter dnn
+     Nam POCH. Ds kanst leicht berpreffen, indem dst ainfach  :!ls   older
+     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
+
+Anmrkung:  Stigst ietz aus n Wimm aus und gnnst n aft wider mit   vim POCH  ,
+            naacherd wr d Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
+            wiest n gspeichert haast.
+
+  5. Ietz verweitert d Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
+     beziehungsweis bei aynn Unixgebu mit   :!rm POCH   .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
+
+** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
+
+  1. Ruck nn Mrkl auf netty d Zeil daader.
+
+  2. Demmlt  v  und gee mit n Mrkl  auf dnn fmftn Auflistungspunt untet.  Du
+     seghst glei, d s Gwort vrherghbt erscheint.
+
+  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
+
+  4. Zipf  w POCH  , wobei s dnn Dauttichtnam POCH  non nit geit.  Vergwi di,
+     dst ds  :'<,'>w POCH  aau +seghst, ee wennst  <EIN>  druckst.
+
+  5. Dyr Wimm schreibt de ausgwaltn Zeiln eyn de Dautticht POCH einhin.  Benutz
+     :!dir  older  :!ls  ,  dst ds berpreffst. Lsh s fein nit bbenn! Mir
+     brauchend s nmlich fr de naehste Letzn.
+
+Anmrkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mrkl um-
+            aynandfarn,  um d Auswal  z verndern.  Drafter kan myn mit yn aynn
+            Pfemerer mit dnn Gwort bbs machen.  Zo n Beispil lscht   d   ds
+            Gwort.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+               Letzn 5.4: EINLSN UND ZAMMENFERN VON DAUTTICHTN   
+
+
+    ** Um nn Inhalt von ayner Dautticht einzlsn, zipf  :r DAUTTICHTNAM  **
+
+  1. Stz nn Mrkl ber d Zeil daader.
+
+OBACHT:  Aft dst nn Schrit 2  ausgfert haast,  seghst auf aynmaal  bbs aus
+         dyr Letzn 5.3.  Bewg di naacherd wider abwrts, dyrmitst d Letzn wi-
+         derfinddst.
+  2. Ietz  lis  dein Dautticht  POCH ein,  indem dst d Faudung   :r POCH aus-
+     ferst,  wobei wie gsait POCH  fr dnn  von dir  ausgsuechtn Dauttichtnam
+     steet. De einglsne Dautticht werd unterhalb dyr Mrklzeil eingfegt.
+
+  3. Um zo n berpreffen,  ob de Dautticht  aau gwi einglsn ist,  gee zrugg;
+     und du seghst,  d s ietz zwo Ausfrtigungen  von dyr Letzn 5.3. geit,  s
+     Urniss und de eingfegte Dauttichtfassung.
+
+Anmrkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlsn.  Zo n Bei-
+            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und fegt s
+            unterhalb n Mrkl ein.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 5
+
+
+  1. :!FAUDUNG  fert aynn ausserignen Befelh aus.
+
+      Daader ayn ttlych gwnddte Beispiler:
+      (Fenstl)              (Unix - Linux)
+      :!dir                 :!ls                - listt s Verzaichniss auf.
+      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
+
+  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dnn besagtn Nam.
+
+  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
+     Dautticht mit seln Nam.
+
+  4. :r DAUTTICHTNAM  ladt sele Dautticht  und fegt s  unterhalb n Mrklbefand
+     ein.
+
+  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und fegt s  unterhalb n
+     Mrklbefand ein.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 6.1: ZEIL FFNEN (open)
+
+
+       ** Zipf  o  , um ayn Zeil unterhalb n Mrkl z ffnen und eyn d **
+                        ** Einfegartweis z kemmen. **
+
+  1. Bewg nn Mrkl zo dyr eerstn mit  --->  angmrktn Zeil unt.
+
+  2. Zipf  o  (klain),  um ayn Zeil UNTERHALB n Mrkl z ffnen und mit dyr Ein-
+     fegartweis weiterztuen.
+
+  3. Ietzet zipf ayn Weeng bbs  und druck  <ESC>  , um d Einfegartweis z ver-
+     laassn.
+---> Mit  o  werd dyr Mrkl in dyr Einfegartweis auf de offene Zeil gstzt.
+
+  4. Um ayn Zeil  OBERHALB n Mrkl aufzmachen,  gib ainfach ayn groosss O statt
+     yn aynn klainen ein. Versuech ds auf dyr untignen Zeil.
+
+---> ffnet ayn Zeil ber derer daader mit  O  ,  wenn dyr Mrkl auf derer Zeil
+     ist.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 6.2: GWORT ANFEGN (append)
+
+
+                ** Zipf  a  , um bbs NAACH n Mrkl einzfegn. **
+
+  1. Bewg nn Mrkl gan n Anfang von dyr eerstn ebungszeil mit  --->  unt.
+
+  2. Druck  e  , hinst d dyr Mrkl an n End von  Zei  steet.
+
+  3. Zipf ayn klains  a  , um bbs NAACH n Mrkl anzfegn.
+
+  4. Vergntz ds Wort  wie in dyr Zeil drunter.  Druck  <ESC>  , um d Schreib-
+     Artweis z verlaassn.
+
+  5. Bewg di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
+     4.
+
+---> D Ze biett ayn Glgn , ayn Gwort in ayner Zeil anzf.
+---> D Zeil biett ayn Glgnet, ayn Gwort in ayner Zeil anzfegn.
+
+Anmrkung:   a  ,  i  und  A  bringend ainn gleichermaan eyn d Einfegartweis;
+             dyr ainzige Unterschaid ist, WO mit n Einfegn angfangt werd.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSTZN (replace)
+
+
+ ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z erstzn. **
+
+  1. Bewg nn Mrkl zo dyr eerstn untignen, mit  --->  angmrktn Zeil.
+     Gee mit n Mrkl gan n Anfang von n eerstn  xxx  .
+
+  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
+     yso d de sel s xxx erstzt.
+
+  3. Druck  <ESC>  ,  um d Erstzungsartweis z verlaassn.  Du gspannst, d dyr
+     Rest von dyr Zeil unverndert bleibt.
+
+  4. fert die Schritt, um ds berblibne xxx z erstzn.
+
+---> S Zunddn von 123 zo xxx ergibt xxx.
+---> S Zunddn von 123 zo 456 ergibt 579.
+
+Anmrkung: D Erstzungsartweis ist wie d Einfegartweis,  aber ayn ieds eindem-
+           mlte Zaichen lscht ayn vorhanddns.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 6.4: GWORT AAMEN UND EINFEGN
+
+ ** Benutz nn Pfemerer  y  , um bbs z aamen, und  p  , um bbs einzfegn. **
+
+  1. Gee zo dyr mit  --->  angmrktn Zeil unt  und stz nn Mrkl  hinter "a)".
+
+  2. Ginn d Sichtisch-Artweis mit   v   und bewg nn Mrkl gnaun vor "eerste".
+  
+  3. Zipf  y  , um dnn vrherghbtn Tail z aamen.
+
+  4. Bewg nn Mrkl gan n End von dyr naehstn Zeil:  j$
+
+  5. Demmlt  p  , um ds Gwort einzfegn, und aft:  a zwaitte <ESC>  .
+
+  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln, aam s mittls  y  , be-
+     wg di gan n End von dyr naehstn Zeil mit  j$   und feg s Gwort dortn mit
+     p  an.
+
+--->  a) ds ist dyr eerste Eintrag.
+      b)
+Anmrkung:   Du kanst   y   aau als Pfemerer verwenddn;   yw  zo n Beispil aamt
+             hinst eyn n naehstn Wortanfang (aane dnn selber).
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 6.5: SCHALTTER STZN
+
+** Stz aynn Schaltter yso,  d ayn Suech older Erstzung Groo- und Klain- **
+                            ** schreibung bergeet. **
+                            
+  1. Suech um 'bergee", indem dst   /bergee   eingibst.
+     Widerhol d Suech ayn ttlych Maal, indem dst de Tastn  n  druckst.
+
+  2. Stz de Zwisl - nn Schaltter - 'ic' (ignore case), indem dst  :set ic
+     eingibst.
+  3. Ietz suech wider um 'bergee' und tue aau wider mit  n  weiter.  Daa fallt
+     dyr auf, d ietz bbenn aau  bergee  und  BERGEE  hergeet.
+
+  4. Stz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
+
+  5. Widerhol d Suech und bobacht, was ietz gschieght:   /bergee <EIN>
+
+  6. Dst groo und klain wider gwon unterscheidst, zipf:   :set noic
+
+Anmrkung:  Mechst de Trffer niemer vrherghbt seghn,  gib ein:   :nohlsearch
+Anmrkung:  Sollt klain/groo bei ayner ainzignen Suech wurst sein,  benutz  \c
+            in n Suechausdruk:   /bergee\c <EIN>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 6
+
+  1. Zipf  o  , um ayn Zeil  UNTERHALB  n Mrkl z ffnen und d Einfegartweis z
+                ginnen.
+     Zipf  O  , um ayn Zeil OBERHALB n Mrkl z ffnen.
+
+  2. Zipf  a  , um NAACH n Mrkl ayn Gwort einzfegn.
+     Zipf  A  , um ayn Gwort naach n Zeilnend anzfegn.
+
+  3. D Faudung  e  bringt di gan n End von aynn Wort.
+
+  4. Dyr Pfemerer  y  (yank) aamt bbs,  p  (put) fegt ds ein.
+
+  5. Ayn groosss  R  geet eyn d Erstzungsartweis, hinst d myn  <ESC> druckt.
+
+  6. D Eingaab von ":set xxx"  stzt de Zwisl "xxx".  Ayn ttlych Zwisln seind:
+     'ic' 'ignorecase'   Groo/klain wurst bei ayner Suech
+     'is' 'incsearch'    Zaig aau schoon ayn Tailberainstimmung
+     'hls' 'hlsearch'    Hb allsand pssetn Ausdrck vrher
+     Dyr Schaltternam kan in dyr Kurz- older Langform angbn werdn.
+
+  7. Stll yn ayner Zwisl "no" voran, dst ys abschalttst:   :set noic
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
+
+
+           ** Nutz ds einbaute Hilfgebu, de "Betribsanlaittung". **
+
+  Eyn n Wimm  ist ayn ausferliche "Gebrauchsanweisung"  einbaut.  Fr s Eerste
+  prblt ainfach ains von dene dreu aus:
+    - Druck d <HILF>-Tastn, wennst bbenn aine haast.
+    - Druck de Tastn <F1>, fallsst ys haast.
+    - Zipf   :help <EIN>
+
+  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie ds mit dyr Hilf geet.
+  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
+  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
+
+  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem dst yn dyr Faudung
+  :help  aynn Auerwerd naachstllst und istig  <EIN>  nit vergisst. Prblt ds:
+
+     :help w
+     :help c_CTRL-D
+     :help insert-index
+     :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 7.2: ERSTLL AYN GIN-SCHRIPF
+
+
+              ** Mutz nn Wimm mit de einbautn Faehigkeitn auf. **
+
+  Dyr Wimm besitzt ayn Wsn Schftungen,  wo ber n Urwimm aushingeend, aber de
+  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
+  ausherholst, erstllst ayn "vimrc"-Dautticht.
+
+  1. Lg ayn "vimrc"-Dautticht an;  ds geet  ie naach Betribsgebu  verschidn:
+     :e ~/.vimrc     fr s Unix
+     :e $VIM/_vimrc  bei n Fenstl
+
+  2. Ietz lis nn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
+     :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Speichert de Dautticht mit:
+     :w
+
+  4. Bei n naehstn Gin von n Wimm  ist aft d Fegnussvrherhbung zuegschalttn.
+     Du kanst dyr allss  eyn d Dautticht  einhinschreibn,  wasst bstndig habn
+     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              Letzn 7.3: VERGNTZN
+
+
+            ** Befelhszeilnvergntzung mit  <STRG>d  und  <TAB>  **
+
+  1. Vergwi di, d dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
+
+  2. Schaug naach, wlcherne Dauttichtn d s in n Verzaichniss geit:   :!ls
+     older   :!dir
+  3. Zipf nn Anfang von ayner Faudung:   :e
+
+  4. Druck  <STRG>d  , und dyr Wimm zaigt ayn Listn von Faudungen, wo mit   "e"
+     angeend.
+  5. Druck  <TAB>  , und dyr Wimm vervollstndigt nn Faudungsnam zo   ":edit".
+
+  6. Feg  ayn Laerzaichen  und nn Anfang  von ayner  besteehetn Dautticht an:
+     :edit DAU
+
+  7. Druck  <TAB>  . Dyr Wimm vergntzt nn Nam, ds haisst, wenn yr aindeuttig
+     ist.
+Anmrkung:  D Vergntzung  geit s fr aynn Hauffen Faudungen.  Versuech ainfach
+            <STRG>d  und  <TAB>  . Bsunders ntzlich ist ds bei   :help  .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 7
+
+
+  1. Zipf  :help  oder druck  <F1>  oder  <HILF> , um ayn Hilffenster z ffnen.
+
+  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
+
+  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
+
+  4. Zipf  :q  , um s Hilffenster z schliessn.
+
+  5. Erstll ayn vimrc-Ginschripf  zuer Sicherung von deine Mtzneinstllungen.
+
+  6. Druck  <STRG>d  , aft dst naach   :   ayn Faudung  angfangt haast,  dyr-
+     mitst mgliche Vergntzungen anzaigt kriegst.
+     Druck  <TAB>  fr ain Vervollstndigung yllain.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Ds wr ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
+  und bndignen berblik  ber s Blat WIMM z lifern,  netty vil gnueg,  d myn
+  fr s Eerste  wirklich bbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
+  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
+  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual
+
+  Zo n Weiterlsn und Weiterlernen wr ds Buech daader zo n Empfelhen:
+    Vim - Vi Improved - von n OUALLINE Steve
+    Verlaag: New Riders
+  Ds ist ds eerste Buech, wo ganz yn n Wimm gwidmt ist, netty ds Grechte fr
+  Anfnger. Es haat ayn Wsn Beispiler und aau Bilder drinn.
+  See http://iccf-holland.org/click5.html
+
+  Ds folgete Buech  ist schoon lter und meerer  ber n Urwimm  als wie ber n
+  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
+  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
+  3897211262
+  In dnn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
+  De sxte Ausgaab enthaltt aau schoon bbs ber n Wimm.
+  Als ietzunde Bezugniss fr d Fassung 7  und ayn pfrenge Einferung  dient ds
+  folgete Buech:
+    vim ge-packt  von n WOBST Reinhard
+    mitp-Verlaag, Buechlaittzal 978-3-8266-1781-2
+  Trotz dyr recht pfrengen Darstllung  ist s durch seine viln ntzlichnen Bei-
+  spiler aau fr Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
+  seind zesig zo n Kriegn; see   http://iccf-holland.org/click5.html
+
+  Verfasst habnd dnn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
+  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwrff, wo
+  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
+  zuer Verfegung gstllt haat. Gundpost:   bware@mines.colorado.edu
+  Fr n Wimm haat n dyr MOOLENAAR Bram barechtt.
+  De bairische berstzung  stammt von n HELL Sepp 2009,  ayn Weeng berarechtt
+  2011. Sein Gundpostbrcht ist   sturmibund@t-online.de
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.bar.utf-8 vim73/runtime/tutor/tutor.bar.utf-8
--- vim73.orig/runtime/tutor/tutor.bar.utf-8	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/tutor/tutor.bar.utf-8	2013-08-04 19:09:09.903945984 +0000
@@ -0,0 +1,981 @@
+===============================================================================
+=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7    =
+===============================================================================
+
+   Dyr Wimm ist ayn gro mächtigs Blat, dös was mit aynn Wösn Befelh aufwartt; z
+   vil,  däß myn s allsand  in aynn Schainer  wie dönn daader  unterbräng.  Der
+   Schainer ist yso aufbaut,  däß yr halt netty die Befelh allsand bringt, wost
+   brauchst, däßst mit iem für s Eerste wirklich öbbs anfangen kanst.
+   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; dös haisst,
+   wennst di nit grooß mit n Pröbln und Tüftln aufhaltst.
+
+   OBACHT:
+   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort öndern.  Dösswögn
+   machst eyn n Böstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
+   dös Gwort daader mit n Befelh  "vimtutor bar"  ausherlaassn, ist s ee schoon
+   ayn Aamum.
+   Mir kan s  nit oft gnueg  sagn,  däß  der Schainer daader  istig  gan n Üebn
+   ghoert.  Also muesst schoon aau die Befelh +ausfüern, wennst ys gscheid ler-
+   nen willst. Mit n Lösn yllain ist s +nit taan!
+
+   Ietz schaust grad non, däß dein Föststölltastn nit druckt ist; und aft geest
+   glei aynmaal mit dyr j-Tastn abwärts (yso laaufft dös nömlich),  hinst däßst
+   de gantze Letzn 1.1 auf n Bildschirm haast.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.1: MIT N MÖRKL UMAYNANDFARN
+
+** Dyrmitst mit n Mörkl umaynandkimmst, druck  h, j, k und l  wie unt zaigt. **
+            ^            Ayn Öslsbrugg:
+            k            De Tastn  h  ist winster und +geet aau gan winster.
+   < h             l >   S  l  leit zesm und richtt si gan zesm.
+            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
+            v            Mit n  k  kimmst gan n KOPF.            
+  1. Ietz ruedertst ainfach mit n Mörkl auf n Bildschirm umaynand,  hinst däßst
+     di sicher füelst.
+  2. Halt d Abhin-Tastn  (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
+     kimmst gan dyr naehstn Letzn.
+     
+  3. Wie gsait, ietz bewögst di also mit derer Tastn gan dyr Letzn 1.2.
+
+Non öbbs: Allweil, wenn dyr niemer ganz wol ist, wasst öbbenn druckt haast, aft
+          zipfst  <ESC>  ; naacher bist wider ganz gwon in dyr Befelhs-Artweis.
+
+      
+          Nöbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
+          hjkl  seind z haissn s Wimm-Urgstain;  und de "Hörtn" seind ganz dyr-
+          für, däß myn bei +dene bleibt. Pröblt s ainfach aus!
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 1.2: ÖNN WIMM AUSSCHALTTN
+
+
+  ALSO, EE WENNST ÖBBS VON DAA UNT AUSFÜERST,  LIS LIEBER ZEERST DE GANTZE LET-
+  ZN!
+
+  1. Druck d <ESC>-Tastn, dyrmitst aau gwiß in dyr Befelhs-Artweis bist.
+  
+  2. Demmlt  :q!<EIN>  .
+     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst öbbenn  göndert
+     haast.
+
+  3. Balst önn Eingib seghst, gib dö Faudung ein,  wo di zo dönn Schainer brun-
+     gen haat, also   vimtutor bar<EIN>  .
+
+  4. Also, wenn ietz allsse sitzt, naacherd füerst d Schritt 1 hinst 3 aus, mit
+     wasst ys Blat verlaasst und aft wider einhinkimmst.
+
+Anmörkung: Mit  :q!<EIN>  verwirffst allss, wasst göndert older enther gschribn
+           haast. In aynn Öttlych Letznen lernst acht, wiest dös allss in ayner
+           Dautticht speichertst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 1.3: GWORT BARECHTN - LÖSCHN 
+
+         
+         ** Druck  x  , dyrmitst dös Zaichen unter n Mörkl löschst. **
+
+  1. Bewög di mit n Mörkl auf de mit  --->  angmörkte Zeil unt.
+
+  2. Zo n Faeler Verbössern  farst mit n Mörkl  netty  auf dös Zaichen,  dös wo
+     glöscht ghoert.
+
+  3. Druck de Tastn  x  , däßst dös überflüssige Zaichen löschst.
+
+  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst däß dyr Saz stimmt.
+
+---> De Kkuue sprangg übber nn Maanad.
+
+  5. Wenn ietz de Zeil verbössert ist, geest gan dyr Letzn 1.4. weiter.
+
+Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit öbbenn,
+                   allss auswendig z lernen;  nän, lern ainfach mit n Anwenddn!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.4: GWORT BARECHTN - EINFÜEGN
+
+
+                  **  Druck  i  , dyrmitst öbbs einfüegst. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil, wo mit  --->  angeet.
+
+  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewög önn Mörkl  auf dös
+     eerste Zaichen NAACH derer Stöll, daa wo s Gwort eingfüegt werdn sollt.
+
+  3. Druck  i  und gib dös ein, was abgeet.
+
+  4. Wenn ieweils ayn Faeler verweitert ist, aft druck   <ESC>  ; dyrmit kimmst
+     gan dyr Befelhsartweis zrugg.
+     So, und ietz tuest ainfach yso weiter, hinst däß dyr Saz stimmt.
+
+---> Daader gt dd öbbs b.
+---> Daader geet diend öbbs ab.
+
+  5. Balst mainst,  däßst ys Gwort-Einfüegn kanst, aft geest gan dyr Letzn 1.5.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 1.5: GWORT BARECHTN - ANFÜEGN
+
+
+                      ** Druck  A  gan n Gwort Anfüegn. **
+
+  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn  --->  dyrvor haat.
+     Daa ist s gleich, wo gnaun dyr Mörkl in derer Zeil steet.  
+
+  2. Demmlt  A  und gib de entspröchetn Ergöntzungen ein.
+
+  3. Wennst mit n Anfüegn förtig bist, aft druckst  <ESC>  , däßst wider eyn de
+     Befelhsartweis zruggkimmst.
+
+  4. So,  und ietz geest aft non gan dyr zwaittn mit  --->  angmörktn Zeil; und
+     daadl machst ys netty yso.
+
+---> In derer Zeil gee  
+     In derer Zeil geet ayn Weeng ayn Gwort ab.
+---> Aau daader stee
+     Aau daader steet öbbs Unvollstöndigs. 
+
+  5. Wennst s Anfüegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 1.6: AYN DAUTTICHT BARECHTN
+
+
+     ** Mit  :wq  speichertst ayn Dautticht und verlaasst önn Wimm ganz. **
+
+  !! OBACHT:  Ee wennst mit dönn alln daa unt weitertuest, lis zeerst de gantze
+     Letzn durch!!
+
+  1. Verlaaß also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
+
+  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer<EIN>  . 'vim' ruefft s Blat
+     auf,  und  'Schainer'  haisst de Dautticht,  wost barechtn willst.  Dyrmit
+     haast also ayn Dautticht, dö wost barechtn kanst.
+
+  3. Ietz  füegst öbbs ein older löschst öbbs,  wiest ys in de vorignen Letznen
+     glernt haast.
+
+  4. Speichert de gönderte Dautticht und verlaaß önn Wimm mit  :wq<EIN>  .
+
+  5. Schmeiß önn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
+
+  6. Aft däßst  de obignen Schritt glösn und käppt haast,  kanst ys durchfüern.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 1
+
+
+  1. Dyr Mörkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
+              h (winst)     j (ab)        k (auf)       l (zes)
+
+  2. Um önn Wimm umbb n Eingib aus z ginnen, demmlt:  vim DAUTTICHT<EIN>  .
+
+  3. Willst önn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
+                <ESC>  und  :q!<EIN>  .
+     Gan n Verlaassn und Speichern aber zipfst  <ESC>  und  :wq<EIN>  .
+
+  4. Willst dös Zaichen löschn, daa wo dyr Mörkl drauf ist, demmltst  x  .
+
+  5. Willst öbbs vor n Mörkl eingöbn, zipfst  i  und drafter  <ESC>  .
+     Mechst ys aber eyn s Zeilnend anhinhöngen, benutzt ys   A  .
+     Und ainfach naach n Mörkl füegst ys mit  a  ein.
+
+Anmörkung:  Druckst  <ESC>  ,  kimmst eyn de Befelhsartweis zrugg older brichst
+            ayn Faudung ab, dö wo dyr schiefgangen ist.
+
+     Ietz tue mit dyr Letzn 2 weiter.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 2.1.: LÖSHFAUDUNGEN
+
+
+                 ** Demmlt  dw  , dyrmitst ayn Wort löschst. **
+
+  1. Druck  <ESC>  ,  dyrmit s aau gwiß ist,  däßst in dyr Befelhsartweis bist.
+
+  2. Bewög önn Mörkl zo dyr mit  --->  angmörktn Zeil unt.
+
+  3. Und daa geest ietz auf n Anfang von aynn Wort, dös wo glöscht ghoert.
+
+  4. Zipf  dw  , däßst dös gantze Wort löschst.
+
+  Nöbnbei:  Dyr Buechstabn  d  erscheint auf dyr lösstn Zeil  von n Bildschirm,
+            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, däß öbbs kimmt, al-
+            so  daader ayn  w  .  Seghst  freilich  öbbs Anderts  wie ayn  d  ,
+            naacherd haast  öbbs Falschs  demmlt.  Druck aft  <ESC>  und pröblt
+            s non aynmaal.
+---> Ayn Öttlych Wörter lustig ghoernd nit Fisper eyn dönn Saz einhin.
+
+  5. Äfert  d Schritt  3 und 4,  hinst däß  dyr Saz pässt,  und gee aft gan dyr
+     Letzn 2.2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 2.2.: NON MEERER LÖSHFAUDUNGEN
+
+
+            ** Gib  d$  ein, däßst hinst eyn s Zeilnend löschst. **
+
+  1. Druck  <ESC>  , dyrmitst aau gwiß in dyr Befelhsartweis bist.
+
+  2. Bewög önn Mörkl hinst eyn de mit  --->  angmörkte Zeil untn.
+
+  3. Gee mit n Mörkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
+
+  4. Zipf  d$  , däßst hinst eyn s End von dyr Zeil löschst.
+  
+---> Öbber haat s End von dyr Zeil doplt eingöbn. doplt eingöbn.
+
+
+  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 2.3: PFEMERER UND WOLENDER
+
+
+  Vil Faudungen,   wo s Gwort öndernd, sötznd si aus aynn Pfemerer und aynn Wo-
+  lend zamm. Bal i also öbbs löschn will, schreib i ainsting  d  und aft s "Wo-
+  lend", dös haisst also, "wolend", "wohin" däß i will - older was i halt gnaun
+  löschn will.
+
+
+
+
+
+
+  Daader also, was i wie löschn kan:
+     w  -  hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
+     e  -  gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
+     $  -  zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
+
+  Also löscht de Tastnfolg  de  allss umbb n Mörkl hinst eyn s Wortend.
+Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mörkl
+             entspröchet weiter.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Letzn 2.4: MIT AYNN ZÖLER D WOLENDER ÄFERN
+
+
+ ** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel entspröchet oft gangen. **
+
+  1. Bewög önn Mörkl gan n Anfang von dyr Zeil mit  --->  dyrvor unt.
+
+  2. Zipf  2w  , däßst mit n Mörkl zwai Wörter weitergeest.
+
+  3. Zipf  3e  , däßst mit n Mörkl auf s End von n drittn Wort kimmst.
+
+  4. Zipf  0  (aynn Nuller), däßst eyn n Anfang von dyr Zeil hinkimmst.
+
+  5. Widerhol d Schritt 2 und 3 mit verschaidne Zöler.
+
+  ---> Dös ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
+
+  6. Gee weiter gan dyr Letzn 2.5.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 2.5: DURCH AYNN ZÖLER GLEI MEERER LÖSCHN
+
+
+        ** Ayn Zal vor aynn Pfemerer füert dönn entspröchet oft aus. **
+
+  Also, i mecht löschn,  und zwaar öbbs Bestimmts,  und dös so und so oft:  Daa
+  dyrzue benutz i aynn Zöler:
+                              d  Zöler  Wolend (also önn Bewögungsschrit)
+
+  1. Bewög önn Mörkl zo n eerstn Wort in GROOSSBUECHSTABN in dyr mit  --->  an-
+     gmörktn Zeil.
+
+  2. Demmlt  d2w  , dyrmitst de ganz grooßgschribnen Wörter löschst.
+
+  3. Äfert  d Schritt 1 und 2  mit dönn entspröchetn Zöler,  dyrmitst de drauf-
+     folgetn  ganz großgschribnen Wörter  mit ayner ainzignen Faudung  löschst:
+
+
+--->  Dö ABC DE Zeil FGHI JK LMN OP mit Wörter ist Q RS TUV ietz berichtigt.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          Letzn 2.6: ARECHTN AUF ZEILN
+
+
+               ** Zipf  dd  , um ayn gantze Zeil z löschn. **
+
+  Weil s gro oft vürkimmt,  däß myn gantze Zeiln löscht,  kaamend schoon d Ent-
+  wickler von n Urwimm daa drauf,  däß myn ainfach  dd  gan dönn Zwök schreibt.
+
+
+  1. Bewög önn Mörkl gan dyr zwaittn Zeil in n untignen "Gedicht".
+  2. Zipf  dd  ,  um dö Zeil z löschn.
+  3. Ietz bewögst di gan dyr viertn Zeil.
+  4. Zipf  2dd  , um zwo Zeiln zo n Löschn.
+
+--->  1)  Roosn seind root;
+--->  2)  Drunter ist s Koot.
+--->  3)  Veigerln seind blau.
+--->  4)  Umgrabn tuet s d Sau.
+--->  5)  D Ur sait de Zeit,
+--->  6)  Sait, däß s mi freut,
+--->  7)  Dirndl, dein Gschau.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                     Letzn 2.7: RUGGGÖNGIG MACHEN (RUGGLN) 
+
+
+             ** Zipf  u  , dyrmitst de lösstn Faudungen ruggltst **
+             ** older   U  , um ayn gantze Zeil widerherzstölln. **
+
+  1. Bewög önn Mörkl gan dyr mit  --->  angmörktn Zeil unt und gee dyrmit auf n
+     eerstn Faeler.
+  2. Zipf  x  , däßst dös eerste z vile Zaichen löschst.
+  3. Ietz demmlt  u  , dyrmitst de lösste Faudung ruggltst.
+  4. Ietz behöb  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
+  5. Aft gibst ayn  U  (grooß) ein,  däßst de Zeil wider yso hinbringst,  wie s
+     gwösn ist.
+  6. So,  und ietz  demmltst  so oft  u  , hinst däßst s  U  und de andern Fau-
+     dungen rugggöngig gmacht haast.
+  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst däßst  allsand Be-
+     felh widerhergstöllt, z haissn allsse rugg-grugglt haast  (also d Rugggön-
+     gigmachungen rugggöngig gmacht).
+---> Beerichtig d Faeller voon dehrer Zeiil  und sttöll s mitt n Ruggruggln wi-
+     der her.
+  8. Die Faudungen seind gro wichtig; sö helffend ainn närrisch weiter.
+     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 2
+
+
+  1. Um von n Mörkl aus hinst eyn s naehste Wort zo n Löschn, zipf:  dw
+  2. Um umbb n Mörkl hinst eyn s End von dyr Zeil zo n Löschn, demmlt  d$
+  3. Dyrmitst ayn gantze Zeil löschst, gib ein:  dd
+  4. Mechst ayn Bewögung, ayn "Wolend", öfters,  stöll de entspröchete Zal dyr-
+     vor:  3dw  older aau:  d3w
+  5. Dyr Pfueg für ayn Önderungsfaudung lautt yso:
+               Pfemerer   [Zal]   Bewögungsschrit (Wolend)
+     Und dös haisst:
+      Dyr PFEMERER gibt an, WAS taan ghoert, öbbenn   d   =  löschn (»delete«).
+      [ZAL] - Ayn Zal KAN myn angöbn, wenn myn halt ayn Wolend öfter habn will.
+      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  öbbenn
+      auf aynn Wortanfang (  w  ), s End von dyr Zeil (  $  ) und so weiter.
+
+  6. Däßst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
+
+  7. Um öbbs Vorigs wider z ruggln, gib ein:                u (klain also)
+     Um allsand Önderungen in ayner Zeil z ruggln, haast:   U (also grooß)
+     Um "rugg-z-ruggln", also allss wider herzstölln, zipf:  <STRG>r   
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 3.1: ANFÜEGN (»put«) 
+
+
+     ** Zipf  p  , dyrmitst öbbs gnetty Glöschts naach n Mörkl anfüegst. **
+
+  1. Bewög önn Mörkl gan dyr eerstn untignen Zeil mit  --->  dyrvor.
+
+  2. Zipf  dd  ,  um sele Zeil z löschn und dyrmit in ayner Wimm-Osn zo n Spei-
+     chern.
+
+  3. Bewög önn Mörkl gan dyr Zeil c),  ÜBER derer, daa wo de glöschte Zeil ein-
+     hinkemmen sollt.
+
+  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast dö Zeil unter derer
+     mit n Mörkl drinn.
+  5. Äfert  d Schritt 2 hinst 4,  hinst däßst  allsand Zeiln  yso naachynaynand
+     haast, wie s hinghoernd.
+
+---> d) Kanst du dös aau?
+---> b) Veigerln seind blau.
+---> c) Bedachtn kan myn lernen.
+---> a) Roosn seind root.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         Letzn 3.2: ERSÖTZN (»replace«)
+
+
+      ** Zipf  rx  , um dös Zaichen unter n Mörkl durch  x  z ersötzn. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil mit  --->  dyrvor.
+
+  2. Bewög önn Mörkl, hinst däß yr auf n eerstn Faeler steet.
+
+  3. Zipf  r  und drafter dös Zaichen, wo dyrfür daa hinghoert.
+
+  4. Widerhol d Schritt 2 und 3,  hinst däßst de eerste Zeil  gmaeß dyr zwaittn
+     berichtigt haast:
+--->  Wie dö Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
+--->  Wie dö Zeil eingöbn wurd, wurdnd ainige falsche Tastnen zipft!
+
+  5. Ietz tue mit dyr Letzn 3.3 weiter.
+
+Anmörkung: Vergiß nit drauf, däßst mit n Anwenddn lernen solltst und nit öbbenn
+           mit n Auswendiglernen!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                          Letzn 3.3: ÖNDERN (»change«)
+
+
+              ** Um hinst eyn s Wortend z öndern, zipf  ce  . **
+
+  1. Gee mit n Mörkl auf de eerste mit  --->  angmörkte Zeil.
+
+  2. Ietz farst netty auf s  "s"  von Wstwr hin.
+
+  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  örter  .
+
+  4. Druck  <ESC>  und bewög önn Mörkl zo n naehstn Zaichen, wo göndert ghoert.
+
+  5. Äfert  d Schritt 3 und 4,  hinst däß  dyr eerste Saz  wie dyr zwaitte ist.
+
+---> Ainige Wstwr von derer Zlww ghhnnd mit n Öndern-Pfemerer gaauu.
+---> Ainige Wörter von derer Zeil ghoernd mit n Öndern-Pfemerer göndert.
+
+ce  löscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                  Letzn 3.4.: NON MEERER ÖNDERUNGEN PFELFS  c
+
+
+   ** D Löshfaudung  c  arechtt mit de nömlichnen Wolender wie dö mit  d  **
+
+  1. Dyr Önder-Pfemerer arechtt anleich wie d Löshfaudung mit   d  ,  und zwaar
+     yso:
+         c    [Zal]   Bewögungsschrit (Wolend)
+
+  2. D Wolender seind  de gleichn,  öbbenn  w  für Wort und  $  für s Zeilnend.
+
+
+  3. Bewög di zo dyr eerstn untignen Zeil mit  --->  .
+
+  4. Ietz geest auf dönn eerstn Faeler.
+
+  5. Zipf  c$  , gib önn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
+     <ESC>.
+---> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
+---> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
+
+Denk allweil dran,  däßst iederzeit  mit dyr Ruggtastn Faeler ausbössern kanst.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 3
+
+
+  1. Um ayn  vorher glöschts Gwort  anzfüegn,  zipf  p  .  Daa dyrmit  werd dös
+     gantze Gwort  NAACH n Mörkl  angfüegt.  Wenn s ayn gantze Zeil  gwösn ist,
+     werd dö sel als de Zeil unterhalb n Mörkl eingfüegt.
+
+  2. Um dös Zaichen  unter n Mörkl,  also wo dyr Mörkl ist,  z ersötzn, zipf  r
+     und aft dös Zaichen, wost daadl habn willst.
+
+  3. Dyr Önderungspfemerer ( c = »change«) laasst ainn umbb n Mörkl hinst eyn s
+     End von n Wolend öndern. Zipf  ce  , dyrmitst umbb n Mörkl hinst eyn s End
+     von n Wort öndertst, und  c$  hinst eyn s End von dyr Zeil.
+
+  4. Für d Önderung lautt dyr Pfueg:
+
+     c   [Zal]   Wolend
+
+Ietz tue mit dyr naehstn Letzn weiter.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 4.1: MÖRKLSTÖLLUNG UND DAUTTICHTDARSTAND
+
+** Demmlt <STRG>g, däßst önn Befand und Darstand von dyr Dautticht anzaigst. **
+  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
+
+Anmörkung: Lis dö gantze Letzn daader durch, ee wennst iewign öbbs unternimmst!
+
+  1. Druck  <STRG>g  .  Auf dös hin erscheint auf derer Seitt ganz unt ayn Dar-
+     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
+     Mörk dyr de Zeilnnummer für n Schrit 3.
+
+Anmörkung:  Müglicherweis  seghst aau önn Mörklbefand  in n zesmen untern Bild-
+            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt;  meerer über dös
+            laasst dyr dyr Befelh   :help 'ruler'   ausher.
+  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
+     gg  gibst ein, däßst gan n Anfang von dyr Dautticht aufhinkimmst.
+
+  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
+     Dös bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dös eerste
+     Maal  <STRG>g  gadruckst.
+
+  4. Wennst di sicher gnueg füelst, aft füer d Schritt 1 hinst 3 aus.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
+               
+
+  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
+
+  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Dös sel wie aau dyr
+     Mörkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
+
+  2. Ietz zipf  Faeeler<EIN>  . Netty um dös 'Faeeler' willst ietz suechen.
+
+  3. Willst um gnaun dönn Ausdruk weitersuechen, zipf ainfach  n  (wie »next«).
+     Willst hinzrugg suechen, aft gibst  N  ein.
+
+  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
+
+  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, nimm  <STRG>o , und dös
+     öfter,  wennst weiter zrugg willst. Mit  <STRG>i  widerum kimmst vorwärts.
+
+--->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
+
+Anmörkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
+            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wär auf aus.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 4.3: DE GÖGNKLAMMERN FINDDN
+
+
+   ** Zipf  %  , um de entspröchete Klammer  )  ,  ]  older  }  z finddn. **
+
+  1. Sötz önn Mörkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
+     in dyr untignen Zeil, wo mit  --->  angmörkt ist.
+
+  2. Ietzet zipf s Zaichen  %  .
+
+  3. Dyr Mörkl geet ietz auf de pässete schliessete Klammer.
+
+  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr öffneretn Klammer zrugg.
+
+  5. Sötz önn Mörkl auf ayn anderne Klammer von   ({[]})   und pröblt   %  aus.
+
+---> Dös ( ist  blooß ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
+
+Anmörkung:  Um dö Müglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
+            Spaichgwort verzweiflt ayn faelete Gögnklammer suechst!
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                 Letzn 4.4: D ERSÖTZUNGSFAUDUNG (»substitute«)
+
+
+        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Ersötzn. **
+
+  1. Gee mit n Mörkl zo dyr unt steehetn mit  --->  angmörktn Zeil.
+
+  2. Zipf  :s/dee/de <EIN>  . Der Befelh ersötzt alsnan grad dös +eerste "dee",
+     wo vürkimmt.
+
+  3. Ietz pröblt s mit  :s/dee/de/g  . Dös zuesötzliche  g  ("Pflok"  nennt myn
+     öbbs Sölchers) bewirkt, däß allss, was dyrmit kennzaichnet ist,  innerhalb
+     von dyr ainn Zeil ersötzt werd.
+
+---> Dee schoenste Zeit, däß myn dee Blüemln anschaut, ist dee schoene Lan-
+     gesszeit.
+  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n Öndern,  zipf
+     :#,#s/alt/neu/g  ,  wobei # ieweils für de eerste und lösste Zeil von dönn
+     Pfraich steet.
+     :%s/alt/neu/g  zipfst, däßst d Vürkemmen in dyr gantzn Dautticht öndertst.
+        Mit  :%s/alt/neu/gc  finddst allsand Vürkemmen in dyr gsamtn Dautticht;
+     daa werst aber zeerst non gfraagt, obst ys ersötzn willst older nity.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 4
+                        
+  1. <STRG>g   zaigt dönn ietzundn Dauttichtbefand  und önn Darstand dyrvon an.
+           G   bringt di an s End von dyr Dautticht.
+      <Zal>G   bringt di gan dyr entspröchetn Zeilnnummer.
+     <Zal>gg   geet +grad yso.
+          gg   bringt di zo dyr eerstn Zeil.
+  2. D Eingaab von  /  mit aynn Ausdruk suecht VÜRSHLING um dönn Ausdruk.
+     Gibst  ?  und aynn Suechbegrif ein, suecht s um dönn ÄRSHLING.
+     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
+     gsuecht. Mit  N  geet s umkeerter weiter.
+     <STRG>o  bringt di zo ölterne Befändd zrugg,  <STRG>i  zo neuerne.
+
+  3. D Eingaab von  % , wenn dyr Mörkl auf ainer von dene Klammern steet:   ({[
+     )]}  , bringt di zo dyr Gögnklammer.
+
+  4. Um dös eerste Vürkemmen von  "alt"  in ayner Zeil durch  "neu"  z ersötzn,
+     zipf  :s/alt/neu  .
+     Um allsand in ayner Zeil z ersötzn, zipf  :s/alt/neu/g  .
+     Mechst allss in zwo Zeiln ersötzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
+     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:  :%s/alt/neu/g    .
+     Willst ayn ieds Maal bstaetln, höng 'c' wie »confirm« hint anhin.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÜERN 
+            
+
+   ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach  :!  ein. **
+ 
+  1. Zipf  dönn bekanntn Befelh   :  ,  dyrmitst  mit n Mörkl  auf n Bildschirm
+     ganz abhin kimmst. Draufhin kanst aynn gwonen Gfäßbefelh eingöbn.
+
+  2. Zeerst  kimmt aber non ayn Ruefzaichen   !  .  Und ietzet haast d Müglich-
+     keit, ayn beliebige ausserige Gfäßfaudung auszfüern.
+
+  3. Als Beispil zipf   :!ls<EIN>  ;  und schoon haast ayn Auflistung von deinn
+     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wärst.  Geet   ls
+     aus iewign aynn Grund nit, aft pröblt s mit  :!dir<EIN>  .
+
+Also non aynmaal: Mit dönn Angang kan ayn iede beliebige ausserige Faudung aus-
+                  gfüert werdn, aau mit Auerwerdd.
+
+Und wolgmörkt:    Alle Befelh,  wo mit  :  angeend,  müessend mit  <EIN>  bstö-
+                  tigt werdn. Dös dyrsagn myr fürbaß +niemer.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+           Letzn 5.2: NON MEERER DRÜBER, WIE MYN DAUTTICHTN SCHREIBT
+
+
+     ** Um öbbs Gönderts neu z speichern, zipf  :w NEUER_DAUTTICHTNAM  . **
+
+  1. Zipf  :!dir   older  :!ls  ,  däßst dyr ayn Auflistung von deinn Verzaich-
+     niss ausherlaasst. Däßst drafter  <EIN>  eingöbn muesst, waisst ee schoon.
+
+  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, öbbenn  POCH  .
+
+  3. Ietz demmlt:  :w POCH  (also mit POCH als dönn neuen Dauttichtnam).
+
+  4. Dös speichert ietz de gantze Dautticht, also önn Wimmschainer,  unter dönn
+     Nam POCH. Dös kanst leicht überprüeffen, indem däßst ainfach  :!ls   older
+     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
+
+Anmörkung:  Stigst ietz aus n Wimm aus und gännst n aft wider mit   vim POCH  ,
+            naacherd wär dö Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
+            wiest n gspeichert haast.
+
+  5. Ietz verweitert dö Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
+     beziehungsweis bei aynn Unixgebäu mit   :!rm POCH   .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
+
+** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
+
+  1. Ruck önn Mörkl auf netty dö Zeil daader.
+
+  2. Demmlt  v  und gee mit n Mörkl  auf dönn fümftn Auflistungspunt untet.  Du
+     seghst glei, däß s Gwort vürherghöbt erscheint.
+
+  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
+
+  4. Zipf  w POCH  , wobei s dönn Dauttichtnam POCH  non nit geit.  Vergwiß di,
+     däßst dös  :'<,'>w POCH  aau +seghst, ee wennst  <EIN>  druckst.
+
+  5. Dyr Wimm schreibt de ausgwaltn Zeiln eyn de Dautticht POCH einhin.  Benutz
+     :!dir  older  :!ls  ,  däßst dös überprüeffst. Lösh s fein nit öbbenn! Mir
+     brauchend s nömlich für de naehste Letzn.
+
+Anmörkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mörkl um-
+            aynandfarn,  um d Auswal  z veröndern.  Drafter kan myn mit yn aynn
+            Pfemerer mit dönn Gwort öbbs machen.  Zo n Beispil löscht   d   dös
+            Gwort.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+               Letzn 5.4: EINLÖSN UND ZAMMENFÜERN VON DAUTTICHTN   
+
+
+    ** Um önn Inhalt von ayner Dautticht einzlösn, zipf  :r DAUTTICHTNAM  **
+
+  1. Sötz önn Mörkl über dö Zeil daader.
+
+OBACHT:  Aft däßst önn Schrit 2  ausgfüert haast,  seghst auf aynmaal  öbbs aus
+         dyr Letzn 5.3.  Bewög di naacherd wider abwärts, dyrmitst dö Letzn wi-
+         derfinddst.
+  2. Ietz  lis  dein Dautticht  POCH ein,  indem däßst d Faudung   :r POCH aus-
+     füerst,  wobei wie gsait POCH  für dönn  von dir  ausgsuechtn Dauttichtnam
+     steet. De einglösne Dautticht werd unterhalb dyr Mörklzeil eingfüegt.
+
+  3. Um zo n Überprüeffen,  ob de Dautticht  aau gwiß einglösn ist,  gee zrugg;
+     und du seghst,  däß s ietz zwo Ausförtigungen  von dyr Letzn 5.3. geit,  s
+     Urniss und de eingfüegte Dauttichtfassung.
+
+Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei-
+            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und füegt s
+            unterhalb n Mörkl ein.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 5
+
+
+  1. :!FAUDUNG  füert aynn ausserignen Befelh aus.
+
+      Daader ayn Öttlych gwänddte Beispiler:
+      (Fenstl)              (Unix - Linux)
+      :!dir                 :!ls                - listt s Verzaichniss auf.
+      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
+
+  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dönn besagtn Nam.
+
+  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
+     Dautticht mit seln Nam.
+
+  4. :r DAUTTICHTNAM  ladt sele Dautticht  und füegt s  unterhalb n Mörklbefand
+     ein.
+
+  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und füegt s  unterhalb n
+     Mörklbefand ein.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                        Letzn 6.1: ZEIL ÖFFNEN (»open«)
+
+
+       ** Zipf  o  , um ayn Zeil unterhalb n Mörkl z öffnen und eyn d **
+                        ** Einfüegartweis z kemmen. **
+
+  1. Bewög önn Mörkl zo dyr eerstn mit  --->  angmörktn Zeil unt.
+
+  2. Zipf  o  (klain),  um ayn Zeil UNTERHALB n Mörkl z öffnen und mit dyr Ein-
+     füegartweis weiterztuen.
+
+  3. Ietzet zipf ayn Weeng öbbs  und druck  <ESC>  , um d Einfüegartweis z ver-
+     laassn.
+---> Mit  o  werd dyr Mörkl in dyr Einfüegartweis auf de offene Zeil gsötzt.
+
+  4. Um ayn Zeil  OBERHALB n Mörkl aufzmachen,  gib ainfach ayn groosss O statt
+     yn aynn klainen ein. Versuech dös auf dyr untignen Zeil.
+
+---> Öffnet ayn Zeil über derer daader mit  O  ,  wenn dyr Mörkl auf derer Zeil
+     ist.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 6.2: GWORT ANFÜEGN (»append«)
+
+
+                ** Zipf  a  , um öbbs NAACH n Mörkl einzfüegn. **
+
+  1. Bewög önn Mörkl gan n Anfang von dyr eerstn Üebungszeil mit  --->  unt.
+
+  2. Druck  e  , hinst däß dyr Mörkl an n End von  Zei  steet.
+
+  3. Zipf ayn klains  a  , um öbbs NAACH n Mörkl anzfüegn.
+
+  4. Vergöntz dös Wort  wie in dyr Zeil drunter.  Druck  <ESC>  , um d Schreib-
+     Artweis z verlaassn.
+
+  5. Bewög di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
+     4.
+
+---> Dö Ze biett ayn Glögn , ayn Gwort in ayner Zeil anzfü.
+---> Dö Zeil biett ayn Glögnet, ayn Gwort in ayner Zeil anzfüegn.
+
+Anmörkung:   a  ,  i  und  A  bringend ainn gleichermaaßn eyn d Einfüegartweis;
+             dyr ainzige Unterschaid ist, WO mit n Einfüegn angfangt werd.
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSÖTZN (»replace«)
+
+
+ ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersötzn. **
+
+  1. Bewög önn Mörkl zo dyr eerstn untignen, mit  --->  angmörktn Zeil.
+     Gee mit n Mörkl gan n Anfang von n eerstn  xxx  .
+
+  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
+     yso däß de sel s xxx ersötzt.
+
+  3. Druck  <ESC>  ,  um d Ersötzungsartweis z verlaassn.  Du gspannst, däß dyr
+     Rest von dyr Zeil unveröndert bleibt.
+
+  4. Äfert die Schritt, um dös überblibne xxx z ersötzn.
+
+---> S Zunddn von 123 zo xxx ergibt xxx.
+---> S Zunddn von 123 zo 456 ergibt 579.
+
+Anmörkung: D Ersötzungsartweis ist wie d Einfüegartweis,  aber ayn ieds eindem-
+           mlte Zaichen löscht ayn vorhanddns.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 6.4: GWORT AAMEN UND EINFÜEGN
+
+ ** Benutz önn Pfemerer  y  , um öbbs z aamen, und  p  , um öbbs einzfüegn. **
+
+  1. Gee zo dyr mit  --->  angmörktn Zeil unt  und sötz önn Mörkl  hinter "a)".
+
+  2. Ginn d Sichtisch-Artweis mit   v   und bewög önn Mörkl gnaun vor "eerste".
+  
+  3. Zipf  y  , um dönn vürherghöbtn Tail z aamen.
+
+  4. Bewög önn Mörkl gan n End von dyr naehstn Zeil:  j$
+
+  5. Demmlt  p  , um dös Gwort einzfüegn, und aft:  a zwaitte <ESC>  .
+
+  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln, aam s mittls  y  , be-
+     wög di gan n End von dyr naehstn Zeil mit  j$   und füeg s Gwort dortn mit
+     p  an.
+
+--->  a) dös ist dyr eerste Eintrag.
+      b)
+Anmörkung:   Du kanst   y   aau als Pfemerer verwenddn;   yw  zo n Beispil aamt
+             hinst eyn n naehstn Wortanfang (aane dönn selber).
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                           Letzn 6.5: SCHALTTER SÖTZN
+
+** Sötz aynn Schaltter yso,  däß ayn Suech older Ersötzung Grooß- und Klain- **
+                            ** schreibung übergeet. **
+                            
+  1. Suech um 'übergee", indem däßst   /übergee   eingibst.
+     Widerhol d Suech ayn Öttlych Maal, indem däßst de Tastn  n  druckst.
+
+  2. Sötz de Zwisl - önn Schaltter - 'ic' (»ignore case«), indem däßst  :set ic
+     eingibst.
+  3. Ietz suech wider um 'übergee' und tue aau wider mit  n  weiter.  Daa fallt
+     dyr auf, däß ietz öbbenn aau  Übergee  und  ÜBERGEE  hergeet.
+
+  4. Sötz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
+
+  5. Widerhol d Suech und bobacht, was ietz gschieght:   /übergee <EIN>
+
+  6. Däßst grooß und klain wider gwon unterscheidst, zipf:   :set noic
+
+Anmörkung:  Mechst de Tröffer niemer vürherghöbt seghn,  gib ein:   :nohlsearch
+Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \c
+            in n Suechausdruk:   /übergee\c <EIN>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 6
+
+  1. Zipf  o  , um ayn Zeil  UNTERHALB  n Mörkl z öffnen und d Einfüegartweis z
+                ginnen.
+     Zipf  O  , um ayn Zeil OBERHALB n Mörkl z öffnen.
+
+  2. Zipf  a  , um NAACH n Mörkl ayn Gwort einzfüegn.
+     Zipf  A  , um ayn Gwort naach n Zeilnend anzfüegn.
+
+  3. D Faudung  e  bringt di gan n End von aynn Wort.
+
+  4. Dyr Pfemerer  y  (»yank«) aamt öbbs,  p  (»put«) füegt dös ein.
+
+  5. Ayn groosss  R  geet eyn d Ersötzungsartweis, hinst däß myn  <ESC> druckt.
+
+  6. D Eingaab von ":set xxx"  sötzt de Zwisl "xxx".  Ayn Öttlych Zwisln seind:
+     'ic' 'ignorecase'   Grooß/klain wurst bei ayner Suech
+     'is' 'incsearch'    Zaig aau schoon ayn Tailüberainstimmung
+     'hls' 'hlsearch'    Höb allsand pässetn Ausdrück vürher
+     Dyr Schaltternam kan in dyr Kurz- older Langform angöbn werdn.
+
+  7. Stöll yn ayner Zwisl "no" voran, däßst ys abschalttst:   :set noic
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
+
+
+           ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung". **
+
+  Eyn n Wimm  ist ayn ausfüerliche "Gebrauchsanweisung"  einbaut.  Für s Eerste
+  pröblt ainfach ains von dene dreu aus:
+    - Druck d <HILF>-Tastn, wennst öbbenn aine haast.
+    - Druck de Tastn <F1>, fallsst ys haast.
+    - Zipf   :help <EIN>
+
+  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie dös mit dyr Hilf geet.
+  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
+  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
+
+  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem däßst yn dyr Faudung
+  :help  aynn Auerwerd naachstöllst und istig  <EIN>  nit vergisst. Pröblt dös:
+
+     :help w
+     :help c_CTRL-D
+     :help insert-index
+     :help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                       Letzn 7.2: ERSTÖLL AYN GIN-SCHRIPF
+
+
+              ** Mutz önn Wimm mit de einbautn Faehigkeitn auf. **
+
+  Dyr Wimm besitzt ayn Wösn Schäftungen,  wo über n Urwimm aushingeend, aber de
+  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
+  ausherholst, erstöllst ayn "vimrc"-Dautticht.
+
+  1. Lög ayn "vimrc"-Dautticht an;  dös geet  ie naach Betribsgebäu  verschidn:
+     :e ~/.vimrc     für s Unix
+     :e $VIM/_vimrc  bei n Fenstl
+
+  2. Ietz lis önn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
+     :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Speichert de Dautticht mit:
+     :w
+
+  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung zuegschalttn.
+     Du kanst dyr allss  eyn dö Dautticht  einhinschreibn,  wasst bständig habn
+     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                              Letzn 7.3: VERGÖNTZN
+
+
+            ** Befelhszeilnvergöntzung mit  <STRG>d  und  <TAB>  **
+
+  1. Vergwiß di, däß dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
+
+  2. Schaug naach, wölcherne Dauttichtn däß s in n Verzaichniss geit:   :!ls
+     older   :!dir
+  3. Zipf önn Anfang von ayner Faudung:   :e
+
+  4. Druck  <STRG>d  , und dyr Wimm zaigt ayn Listn von Faudungen, wo mit   "e"
+     angeend.
+  5. Druck  <TAB>  , und dyr Wimm vervollstöndigt önn Faudungsnam zo   ":edit".
+
+  6. Füeg  ayn Laerzaichen  und önn Anfang  von ayner  besteehetn Dautticht an:
+     :edit DAU
+
+  7. Druck  <TAB>  . Dyr Wimm vergöntzt önn Nam, dös haisst, wenn yr aindeuttig
+     ist.
+Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfach
+            <STRG>d  und  <TAB>  . Bsunders nützlich ist dös bei   :help  .
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                         ZAMMENFASSUNG VON DYR LETZN 7
+
+
+  1. Zipf  :help  oder druck  <F1>  oder  <HILF> , um ayn Hilffenster z öffnen.
+
+  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
+
+  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
+
+  4. Zipf  :q  , um s Hilffenster z schliessn.
+
+  5. Erstöll ayn vimrc-Ginschripf  zuer Sicherung von deine Mötzneinstöllungen.
+
+  6. Druck  <STRG>d  , aft däßst naach   :   ayn Faudung  angfangt haast,  dyr-
+     mitst mügliche Vergöntzungen anzaigt kriegst.
+     Druck  <TAB>  für ain Vervollstöndigung yllain.
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  Dös wär ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
+  und bündignen Überblik  über s Blat WIMM z lifern,  netty vil gnueg,  däß myn
+  für s Eerste  wirklich öbbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
+  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
+  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual
+
+  Zo n Weiterlösn und Weiterlernen wör dös Buech daader zo n Empfelhen:
+    Vim - Vi Improved - von n OUALLINE Steve
+    Verlaag: New Riders
+  Dös ist dös eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dös Grechte für
+  Anfönger. Es haat ayn Wösn Beispiler und aau Bilder drinn.
+  See http://iccf-holland.org/click5.html
+
+  Dös folgete Buech  ist schoon ölter und meerer  über n Urwimm  als wie über n
+  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
+  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
+  3897211262
+  In dönn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
+  De söxte Ausgaab enthaltt aau schoon öbbs über n Wimm.
+  Als ietzunde Bezugniss für d Fassung 7  und ayn pfrenge Einfüerung  dient dös
+  folgete Buech:
+    vim ge-packt  von n WOBST Reinhard
+    mitp-Verlaag, Buechlaittzal 978-3-8266-1781-2
+  Trotz dyr recht pfrengen Darstöllung  ist s durch seine viln nützlichnen Bei-
+  spiler aau für Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
+  seind zesig zo n Kriegn; see   http://iccf-holland.org/click5.html
+
+  Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
+  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo
+  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
+  zuer Verfüegung gstöllt haat. Gundpost:   bware@mines.colorado.edu
+  Für n Wimm haat n dyr MOOLENAAR Bram barechtt.
+  De bairische Übersötzung  stammt von n HELL Sepp 2009,  ayn Weeng überarechtt
+  2011. Sein Gundpostbrächt ist   sturmibund@t-online.de
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.bj vim73/runtime/tutor/tutor.bj
--- vim73.orig/runtime/tutor/tutor.bj	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.bj	1970-01-01 00:00:00.000000000 +0000
@@ -1,987 +0,0 @@
-===============================================================================
-=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7D   =
-===============================================================================
-
-   Dyr Wimm ist ayn gro mchtigs Blat, ds was mit aynn Wsn Befelh aufwartt; z
-   vil,  d myn s allsand  in aynn Schainer  wie dnn daader  unterbrng.  Der
-   Schainer ist yso aufbaut,  d yr halt netty die Befelh allsand bringt, wost
-   brauchst, dst mit iem fr s Eerste wirklich bbs anfangen kanst.
-   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; ds haisst,
-   wennst di nit groo mit n Prbln und Tftln aufhaltst.
-
-   OBACHT:
-   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort ndern.  Dsswgn
-   machst eyn n Bstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
-   ds Gwort daader  mit n Befelh "vimtutor bj"  ausherlaassn,  ist s ee schoon
-   ayn Aamum.
-   Mir kan s  nit oft gnueg  sagn,  d  der Schainer daader  istig  gan n ebn
-   ghoert.  Also muesst schoon aau die Befelh ausfern,  wennst ys gscheid ler-
-   nen willst. Mit n Lsn yllain ist s +nit taan!
-
-   Ietz schaust grad non, d dein Fststlltastn nit druckt ist; und aft geest
-   glei aynmaal mit dyr j-Tastn abwrts (yso laaufft ds nmlich),  hinst dst
-   de gantze Letzn 1.1 auf n Bildschirm haast.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 1.1: MIT N MRKL UMAYNANDFARN
-
-**  Dyrmitst mit n Mrkl umaynandkimmst, druck h, j, k und l wie unt zaigt.  **
-            ^            Ayn slsbrugg:
-            k            De Tastn  h  ist winster und +geet aau gan winster.
-   < h             l >   S  l  leit zesm und richtt si gan zesm.
-            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
-            v            Mit n  k  kimmst gan n KOPF.            
-  1. Ietz ruedertst ainfach mit n Mrkl auf n Bildschirm umaynand,  hinst dst
-     di sicher felst.
-  2. Halt  d Abhin-Tastn (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
-     kimmst gan dyr naehstn Letzn.
-     
-  3. Wie gsait, ietz bewgst di also mit derer Tastn gan dyr Letzn 1.2.
-
-Non bbs: Allweil, wenn dyr niemer ganz wol ist, wasst bbenn druckt haast, aft
-          zipfst  <ESC>;  naacherd bist wider ganz gwon in dyr Befelhs-Artweis.
-
-      
-          Nbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
-          hjkl  seind z haissn s Wimm-Urgstain;  und de "Hrtn" seind ganz dyr-
-          fr, d myn bei +dene bleibt. Prblt s ainfach aus!
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        Letzn 1.2: NN WIMM AUSSCHALTTN
-
-
-  ALSO, EE WENNST BBS VON DAA UNT AUSFERST,  LIS LIEBER ZEERST DE GANTZE LET-
-  ZN!
-
-  1. Druck d <ESC>-Tastn, dyrmitst aau gwi in dyr Befelhs-Artweis bist.
-  
-  2. Demmlt  :q! <EIN>.
-     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst bbenn  gndert
-     haast.
-
-  3. Balst nn Eingib seghst, gib d Faudung ein,  wo di zo dnn Schainer brun-
-     gen haat, also    vimtutor bj <EIN>.
-
-  4. Also, wenn ietz allsse sitzt, naacherd ferst d Schritt 1 hinst 3 aus, mit
-     wasst ys Blat verlaasst und aft wider einhinkimmst.
-
-Anmrkung: Mit  :q! <EIN> verwirffst allss, wasst gndert older enther gschribn
-           haast. In aynn ttlych Letznen lernst acht, wiest ds allss in ayner
-           Dautticht speichertst.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 1.3: GWORT BARECHTN - LSCHN 
-
-         
-         ** Druck  x  , dyrmitst ds Zaichen unter n Mrkl lschst. **
-
-  1. Bewg di mit n Mrkl auf de mit  ---> angmrkte Zeil unt.
-
-  2. Zo n Faeler Verbssern  farst mit n Mrkl  netty  auf ds Zaichen,  ds wo
-     glscht ghoert.
-
-  3. Druck de Tastn  x  , dst ds berflssige Zaichen lschst.
-
-  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst d dyr Saz stimmt.
-
----> De Kkuue sprangg bber nn Maanad.
-
-  5. Wenn ietz de Zeil verbssert ist, geest gan dyr Letzn 1.4. weiter.
-
-Und ganz wichtig:  Dyrweilst dnn Schainer durcharechtst,  versuech nit bbenn,
-                   allss auswendig z lernen;  nn, lern ainfach mit n Anwenddn!
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 1.4: GWORT BARECHTN - EINFEGN
-
-
-                  **  Druck  i  , dyrmitst bbs einfegst. **
-
-  1. Bewg nn Mrkl zo dyr eerstn untignen Zeil, wo mit ---> angeet.
-
-  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewg nn Mrkl  auf ds
-     eerste Zaichen NAACH derer Stll, daa wo s Gwort eingfegt werdn sollt.
-
-  3. Druck  i  und gib ds ein, was abgeet.
-
-  4. Wenn ieweils ayn Faeler verweitert ist, aft druck <ESC>; und dyrmit kimmst
-     gan dyr Befelhsartweis zrugg.
-     So, und ietz tuest ainfach yso weiter, hinst d dyr Saz stimmt.
-
----> Daader gt dd bbs b.
----> Daader geet diend bbs ab.
-
-  5. Balst mainst,  dst ys Gwort-Einfegn kanst, aft geest gan dyr Letzn 1.5.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 1.5: GWORT BARECHTN - ANFEGN
-
-
-                      ** Druck  A  gan n Gwort Anfegn. **
-
-  1. Gee mit n Mrkl gan dyr eerstn untignen Zeil, wo ayn ---> dyrvor haat.
-     Daa ist s gleich, wo gnaun dyr Mrkl in derer Zeil steet.  
-
-  2. Demmlt  A  und gib de entsprchetn Ergntzungen ein.
-
-  3. Wennst  mit n Anfegn frtig bist,  aft druckst <ESC>,  dst wider eyn de
-     Befelhsartweis zruggkimmst.
-
-  4. So,  und ietz geest aft non gan dyr zwaittn  mit ---> angmrktn Zeil;  und
-     daadl machst ys netty yso.
-
----> In derer Zeil gee  
-     In derer Zeil geet ayn Weeng ayn Gwort ab.
----> Aau daader stee
-     Aau daader steet bbs Unvollstndigs. 
-
-  5. Wennst s Anfegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 1.6: AYN DAUTTICHT BARECHTN
-
-
-     ** Mit  :wq  speichertst ayn Dautticht und verlaasst nn Wimm ganz. **
-
-  !! OBACHT:  Ee wennst mit dnn alln daa unt weitertuest, lis zeerst de gantze
-     Letzn durch!!
-
-  1. Verlaa also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
-
-  2. Gib d Faudung eyn n Eingib ein:  vim Schainer <EIN> . 'vim' ruefft s Blat
-     auf,  und 'Schainer'  haisst de Dautticht,  wost barechtn  willst.  Dyrmit
-     haast also ayn Dautticht, d wost barechtn kanst.
-
-  3. Ietz  fegst bbs ein older lschst bbs,  wiest ys in de vorignen Letznen
-     glernt haast.
-
-  4. Speichert de gnderte Dautticht und verlaa nn Wimm mit  :wq  <EIN>  .
-
-  5. Schmei nn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
-
-  6. Aft dst  de obignen Schritt glsn und kppt haast,  kanst ys durchfern.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 1
-
-
-  1. Dyr Mrkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
-              h (winst)     j (ab)        k (auf)       l (zes)
-
-  2. Um nn Wimm umbb n Eingib aus z ginnen, demmlt: vim DAUTTICHT <EIN> .
-
-  3. Willst nn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
-                <ESC>  :q!  <EIN> .
-     Gan n Verlaassn und Speichern aber zipfst <ESC>  :wq  <EIN>.
-
-  4. Willst ds Zaichen lschn, daa wo dyr Mrkl drauf ist, demmltst  x  .
-
-  5. Willst bbs vor n Mrkl eingbn, zipfst  i  und drafter  <ESC>  .
-     Mechst ys aber eyn s Zeilnend anhinhngen, benutzt ys   A  .
-     Und ainfach naach n Mrkl fegst ys mit  a  ein  .
-
-Anmrkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
-            Faudung ab, d wo dyr schiefgangen ist.
-
-     Ietz tue mit dyr Letzn 2 weiter.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                           Letzn 2.1.: LSHFAUDUNGEN
-
-
-                 ** Demmlt  dw  , dyrmitst ayn Wort lschst **
-
-  1. Druck  <ESC>, dyrmit s aau gwi ist, dst in dyr Befelhsartweis bist.
-
-  2. Bewg nn Mrkl zo dyr mit ---> angmrktn Zeil unt.
-
-  3. Und daa geest ietz auf n Anfang von aynn Wort, ds wo glscht ghoert.
-
-  4. Zipf  dw  , dst ds gantze Wort lschst.
-
-  Nbnbei:  Dyr Buechstabn  d  erscheint auf dyr lsstn Zeil  von n Bildschirm,
-            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, d bbs kimmt, al-
-            so  daader ayn  w  .  Seghst  freilich  bbs Anderts  wie ayn  d  ,
-            naacherd haast  bbs Falschs  demmlt.  Druck aft  <ESC>  und prblt
-            s non aynmaal.
----> Ayn ttlych Wrter lustig ghoernd nit Fisper eyn dnn Saz einhin.
-
-  5. fert  d Schritt  3 und 4,  hinst d  dyr Saz psst,  und gee aft gan dyr
-     Letzn 2.2.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 2.2.: NON MEERER LSHFAUDUNGEN
-
-
-            ** Gib  d$  ein, dst hinst eyn s Zeilnend lschst. **
-
-  1. Druck <ESC> , dyrmitst aau gwi in dyr Befelhsartweis bist.
-
-  2. Bewg nn Mrkl hinst eyn de mit ---> angmrkte Zeil untn.
-
-  3. Gee mit n Mrkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
-
-  4. Zipf  d$  , dst hinst eyn s End von dyr Zeil lschst.
-  
----> bber haat s End von dyr Zeil doplt eingbn. doplt eingbn.
-
-
-  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
-
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        Letzn 2.3: PFEMERER UND WOLENDER
-
-
-  Vil Faudungen,   wo s Gwort ndernd, stznd si aus aynn Pfemerer und aynn Wo-
-  lend zamm. Bal i also bbs lschn will, schreib i ainsting  d  und aft s "Wo-
-  lend", ds haisst also, "wolend", "wohin" d i will - older was i halt gnaun
-  lschn will.
-
-
-
-
-
-
-  Daader also, was i wie lschn kan:
-    w - hinst eyn n Anfang von n naehstn Wort AANE dnn sein eersts Zaichen.
-    e - gan n End von n ietzundn Wort MIT dnn seinn lsstn Zaichen.
-    $ - zo n End von dyr Zeil MIT derer irn lsstn Zaichen.
-
-  Also lscht de Tastnfolg  de  umbb n Mrkl hinst eyn s Wortend.
-Anmrkung:   Gib i grad  ds zwaitte Zaichen  yllain ein,  ruckt halt dyr Mrkl
-             entsprchet weiter.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                   Letzn 2.4: MIT AYNN ZLER D WOLENDER FERN
-
-
-      ** Gib i ayn Zal vor aynn Wolend ein, werd ds Sel halt widerholt. **
-
-  1. Bewg nn Mrkl gan n Anfang von dyr Zeil mit ---> dyrvor unt.
-
-  2. Zipf  2w  , dst mit n Mrkl zwai Wrter weitergeest.
-
-  3. Zipf  3e  , dst mit n Mrkl auf s End von n drittn Wort kimmst.
-
-  4. Zipf  0  (aynn Nuller), dst eyn n Anfang von dyr Zeil hinkimmst.
-
-  5. Widerhol d Schritt 2 und 3 mit verschaidne Zler.
-
-  ---> Ds ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
-
-  6. Gee weiter gan dyr Letzn 2.5.
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                 Letzn 2.5: DURCH AYNN ZLER GLEI MEERER LSCHN
-
-
-              ** Ayn Zal vor aynn Pfemerer fert dnn um seln Werd. **
-
-  Also, i mecht lschn,  und zwaar bbs Bestimmts,  und ds so und so oft:  Daa
-  dyrzue benutz i aynn Zler:
-                              d  Zler  Wolend (also nn Bewgungsschrit)
-
-  1. Bewg nn Mrkl  gan n eerstn Wort in GROOSSBUECHSTABN in dyr mit ---> an-
-     gmrktn Zeil.
-
-  2. Demmlt  d2w  , dyrmitst de ganz groogschribnen Wrter lschst.
-
-  3. fert  d Schritt 1 und 2  mit dnn entsprchetn Zler,  dyrmitst de drauf-
-     folgetn  ganz grogschribnen Wrter  mit ayner ainzignen Faudung  lschst:
-
-
---->  D ABC DE Zeil FGHI JK LMN OP mit Wrter ist Q RS TUV ietz berichtigt.
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                          Letzn 2.6: ARECHTN AUF ZEILN
-
-
-               ** Zipf  dd  , um ayn gantze Zeil z lschn. **
-
-  Weil s gro oft vrkimmt,  d myn gantze Zeiln lscht,  kaamend schoon d Ent-
-  wickler von n Urwimm daa drauf,  d myn ainfach  dd  gan dnn Zwk schreibt.
-
-
-  1. Bewg nn Mrkl gan dyr zwaittn Zeil in n untignen "Gedicht".
-  2. Zipf  dd  ,  um d Zeil z lschn.
-  3. Ietz bewgst di gan dyr viertn Zeil.
-  4. Zipf  2dd  , um zwo Zeiln zo n Lschn.
-
---->  1)  Roosn seind root;
---->  2)  Drunter ist s Koot.
---->  3)  Veigerln seind blau.
---->  4)  Umgrabn tuet s d Sau.
---->  5)  D Ur sait de Zeit,
---->  6)  Sait, d s mi freut,
---->  7)  Dirndl, dein Gschau.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                     Letzn 2.7: RUGGGNGIG MACHEN (RUGGLN) 
-
-
-             ** Zipf  u  , dyrmitst de lsstn Faudungen ruggltst **
-              ** older  U  , um ayn gantze Zeil widerherzstlln. **
-
-  1. Bewg nn Mrkl  gan dyr mit ---> angmrktn Zeil unt  und gee dyrmit auf n
-     eerstn Faeler.
-  2. Zipf  x  , dst ds eerste z vile Zaichen lschst.
-  3. Ietz demmlt  u  , dyrmitst de lsste Faudung ruggltst.
-  4. Ietz behb  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
-  5. Aft gibst ayn  U  (groo) ein,  dst de Zeil wider yso hinbringst,  wie s
-     gwsn ist.
-  6. So,  und ietz  demmltst  so oft  u  , hinst dst s  U  und de andern Fau-
-     dungen rugggngig gmacht haast.
-  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst dst  allsand Be-
-     felh widerhergstllt, z haissn allsse rugg-grugglt haast  (also d Rugggn-
-     gigmachungen rugggngig gmacht).
----> Beerichtig d Faeller voon dehrer Zeiil  und sttll s mitt n Ruggruggln wi-
-     der her.
-  8. Die Faudungen seind gro wichtig; s helffend ainn nrrisch weiter.
-     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 2
-
-
-  1. Um von n Mrkl aus hinst eyn s naehste Wort zo n Lschn, zipf:  dw
-  2. Um umbb n Mrkl hinst eyn s End von dyr Zeil zo n Lschn, demmlt  d$
-  3. Dyrmitst ayn gantze Zeil lschst, gib ein:  dd
-  4. Mechst ayn Bewgung, ayn "Wolend", fters,  stll de entsprchete Zal dyr-
-     vor:  3dw  older aau:  d3w
-  5. Dyr Pfueg fr ayn nderungsfaudung lautt yso:
-               Pfemerer   [Zal]   Bewgungsschrit (Wolend)
-     Und ds haisst:
-      Dyr PFEMERER gibt an, WAS taan ghoert, bbenn   d   =  lschn (delete).
-      [ZAL] - Ayn Zal KAN myn angbn, wenn myn halt ayn Wolend fter habn will.
-      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  bbenn
-      auf ayn Wort (  w  ), s End von dyr Zeil (  $  ) und so weiter.
-
-  6. Dst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
-
-  7. Um bbs Vorigs wider z ruggln, gib ein:                u (klain also)
-     Um allsand nderungen in ayner Zeil z ruggln, haast:   U (also groo)
-     Um "rugg-z-ruggln", also allss wider herzstlln, zipf: <STRG>r   
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                           Letzn 3.1: ANFEGN (put) 
-
-
-     ** Zipf  p  , dyrmitst bbs gnetty Glschts naach n Mrkl anfegst. **
-
-  1. Bewg nn Mrkl gan dyr eerstn untignen Zeil mit   --->   dyrvor.
-
-  2. Zipf  dd  , um sele Zeil z lschn  und dyrmit  in aynn Wimm-"Roster"  zo n
-     speichern.
-
-  3. Bewg nn Mrkl gan dyr Zeil c),  BER derer, daa wo de glschte Zeil ein-
-     hinkemmen sollt.
-
-  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast d Zeil unter derer
-     mit n Mrkl drinn.
-  5. fert  d Schritt 2 hinst 4,  hinst dst  allsand Zeiln  yso naachynaynand
-     haast, wie s hinghoernd.
-
----> d) Kanst du ds aau?
----> b) Veigerln seind blau.
----> c) Bedachtn kan myn lernen.
----> a) Roosn seind root.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         Letzn 3.2: ERSTZN (replace)
-
-
-      ** Zipf  rx  , um ds Zaichen unter n Mrkl durch  x  z erstzn. **
-
-  1. Bewg nn Mrkl zo dyr eerstn untignen Zeil mit   --->   dyrvor.
-
-  2. Bewg nn Mrkl, hinst d yr auf n eerstn Faeler steet.
-
-  3. Zipf  r  und drafter ds Zaichen, wo dyrfr daa hinghoert.
-
-  4. Widerhol d Schritt 2 und 3,  hinst dst de eerste Zeil  gmae dyr zwaittn
-     berichtigt haast:
---->  Wie d Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
---->  Wie d Zeil eingbn wurd, wurdnd ainige falsche Tastnen zipft!
-
-  5. Ietz tue mit dyr Letzn 3.3 weiter.
-
-Anmrkung: Vergi nit drauf, dst mit n Anwenddn lernen solltst und nit bbenn
-           mit n Auswendiglernen!
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                          Letzn 3.3: NDERN (change)
-
-
-              ** Um hinst eyn s Wortend z ndern, zipf  ce  . **
-
-  1. Gee mit n Mrkl auf de eerste mit ---> angmrkte Zeil.
-
-  2. Ietz farst netty auf s  "s"  von Wstwr hin.
-
-  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  rter  .
-
-  4. Druck <ESC> und bewg nn Mrkl gan n naehstn Zaichen,  wo gndert ghoert.
-
-  5. fert  d Schritt 3 und 4,  hinst d  dyr eerste Saz  wie dyr zwaitte ist.
-
----> Ainige Wstwr von derer Zlww ghhnnd mit n ndern-Pfemerer gaauu.
----> Ainige Wrter von derer Zeil ghoernd mit n ndern-Pfemerer gndert.
-
-ce  lscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                  Letzn 3.4.: NON MEERER NDERUNGEN PFELFS  c
-
-
-   ** D Lshfaudung  c  arechtt mit de nmlichnen Wolender wie d mit  d  **
-
-  1. Dyr nder-Pfemerer arechtt anleich wie d Lshfaudung mit   d  ,  und zwaar
-     yso:
-         c    [Zal]   Bewgungsschritt (Wolend)
-
-  2. D Wolender  seind  de gleichn,  bbenn  w  fr Wort und  $ fr s Zeilnend.
-
-
-  3. Bewg di zo dyr eerstn untignen Zeil mit ---> .
-
-  4. Ietz geest auf dnn eerstn Faeler.
-
-  5. Zipf  c$  , gib nn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
-     <ESC>.
----> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
----> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
-
-Denk allweil dran,  dst iederzeit  mit dyr Ruggtastn Faeler ausbssern kanst.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 3
-
-
-  1. Um ayn  vorher glschts Gwort  anzfegn,  zipf  p  .  Daa dyrmit  werd ds
-     gantze Gwort  NAACH n Mrkl  angfegt.  Wenn s ayn gantze Zeil  gwsn ist,
-     werd d sel als de Zeil unterhalb n Mrkl eingfegt.
-
-  2. Um ds Zaichen  unter n Mrkl,  also wo dyr Mrkl ist,  z erstzn, zipf  r
-     und aft ds Zaichen, wost daadl habn willst.
-
-  3. Dyr nderungspfemerer ( c = change) laasst ainn umbb n Mrkl hinst eyn s
-     End von n Wolend ndern. Zipf  ce  , dyrmitst umbb n Mrkl hinst eyn s End
-     von n Wort ndertst, und  c$  hinst eyn s End von dyr Zeil.
-
-  4. Fr d nderung lautt dyr Pfueg:
-
-     c   [Zal]   Wolend
-
-Ietz tue mit dyr naehstn Letzn weiter.
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                 Letzn 4.1: MRKLSTLLUNG UND DAUTTICHTDARSTAND
-
-** Demmlt <STRG>g, dst nn Befand und Darstand von dyr Dautticht anzaigst. **
-  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
-
-Anmrkung: Lis d gantze Letzn daader durch, ee wennst iewign bbs unternimmst!
-
-  1. Druck  <STRG>g  .  Auf ds hin erscheint auf derer Seitt ganz unt ayn Dar-
-     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
-     Mrk dyr de Zeilnnummer fr n Schrit 3.
-
-Anmrkung:  Mglicherweis  seghst aau nn Mrklbefand  in n zesmen untern Bild-
-            schirmgg. Aft ist s "Lindl" (ruler) eingstllt; schau dyrzue mit
-            n Befelh   :help 'ruler'   naach.
-  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
-     gg  gibst ein, dst gan n Anfang von dyr Dautticht aufhinkimmst.
-
-  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
-     Ds bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest ds eerste
-     Maal <STRG>g gadruckst.
-
-  4. Wennst di sicher gnueg felst, aft fer d Schritt 1 hinst 3 aus.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
-               
-
-  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
-
-  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Ds sel wie aau dyr
-     Mrkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
-
-  2. Ietz zipf 'Faeeler' <EIN>. Netty um ds 'Faeeler' willst ietz suechen.
-
-  3. Willst um gnaun dnn Ausdruk weitersuechen, zipf ainfach  n  (wie next).
-     Willst hinzrugg suechen, aft gibst  N  ein.
-
-  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
-
-  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, druck <STRG>o,  und ds
-     fter,  wennst weiter zrugg willst.  Mit <STRG>i widerum  kimmst vorwrts.
-
---->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
-
-Anmrkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
-            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wr auf aus.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 4.3: DE GGNKLAMMERN FINDDN
-
-
-   ** Zipf  %  , um de entsprchete Klammer  )  ,  ]  older  }  z finddn. **
-
-  1. Stz nn Mrkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
-     in dyr untignen Zeil, wo mit ---> angmrkt ist.
-
-  2. Ietzet zipf s Zaichen  %  .
-
-  3. Dyr Mrkl geet ietz auf de pssete schliessete Klammer.
-
-  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr ffneretn Klammer zrugg.
-
-  5. Stz nn Mrkl auf ayn anderne Klammer von   ({[]})   und prblt   %  aus.
-
----> Ds ( ist  bloo ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
-
-Anmrkung:  Um d Mglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
-            Spaichgwort verzweiflt ayn faelete Ggnklammer suechst!
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                 Letzn 4.4: D ERSTZUNGSFAUDUNG (substitute)
-
-
-        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Erstzn. **
-
-  1. Gee mit n Mrkl zo dyr unt steehetn mit ---> angmrktn Zeil.
-
-  2. Zipf  :s/dee/de <EIN>  . Der Befelh erstzt alsnan grad ds +eerste "dee",
-     wo vrkimmt.
-
-  3. Ietz prblt s mit  :s/dee/de/g  . Ds zuestzliche  g  ("Pflok"  nennt myn
-     bbs Slchers) bewirkt, d allss, was dyrmit kennzaichnet ist,  innerhalb
-     von dyr ainn Zeil erstzt werd.
-
----> Dee schoenste Zeit, d myn dee Blemln anschaut, ist dee schoene Lan-
-     gesszeit.
-  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n ndern,  zipf
-     :#,#s/alt/neu/g  ,  wobei # ieweils fr de eerste und lsste Zeil von dnn
-     Pfraich steet.
-     :%s/alt/neu/g  zipfst, dst d Vrkemmen in dyr gantzn Dautticht ndertst.
-        Mit  :%s/alt/neu/gc  finddst allsand Vrkemmen in dyr gsamtn Dautticht;
-     daa werst aber zeerst non gfraagt, obst ys erstzn willst older nity.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 4
-                        
-  1. <STRG>g   zaigt dnn ietzundn Dauttichtbefand  und nn Darstand dyrvon an.
-           G  bringt di an s End von dyr Dautticht.
-     <Zal> G  bringt di gan dyr entsprchetn Zeilnnummer.
-          gg  bringt di zo dyr eerstn Zeil.
-          
-  2. D Eingaab von  /  mit aynn Ausdruk suecht VRSHLING um dnn Ausdruk.
-     Gibst  ?  und aynn Suechbegrif ein, suecht s um dnn RSHLING.
-     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
-     gsuecht. Mit  N geet s umkeerter weiter.
-     <STRG>o bringt di zo lterne Befndd zrugg, <STRG>i zo neuerne.
-
-  3. D Eingaab von  % , wenn dyr Mrkl auf ainer von dene Klammern steet:   ({[
-     )]}  , bringt di zo dyr Ggnklammer.
-
-  4. Um ds eerste Vrkemmen  von "alt"  in ayner Zeil  durch "neu"  z erstzn,
-     zipf   :s/alt/neu   .
-     Um allsand in ayner Zeil z erstzn, zipf   :s/alt/neu/g   .
-     Mechst allss in zwo Zeiln erstzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
-     Mechst allss in dyr gantzn Dautticht erstzn, gib ein:   :%s/alt/neu/g   .
-     Willst ayn ieds Maal bstaetln, hng 'c' wie confirm hint anhin.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFERN 
-            
-
-  ** Willst ayn Gffaudung ausfern, gib ainfach d sel naach   :!   ein. **
- 
-  1. Zipf  dnn bekanntn Befelh   :  ,  dyrmitst  mit n Mrkl  auf n Bildschirm
-     ganz abhin kimmst. Draufhin kanst aynn gwonen Gfbefelh eingbn.
-
-  2. Zeerst  kimmt aber non ayn Ruefzaichen   !   .  Und ietz haast de Mglich-
-     keit, ayn beliebige ausserige Gffaudung auszfern.
-
-  3. Als Beispil zipf   :!ls <EIN>  ; und schoon haast ayn Auflistung von deinn
-     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wrst.  Geet   ls
-     aus iewign aynn Grund nit, aft prblt s mit  :!dir <EIN>  .
-
-Also non aynmaal: Mit dnn Angang kan ayn iede beliebige ausserige Faudung aus-
-                  gfert werdn, aau mit Auerwerdd.
-
-Und wolgmrkt:    Allsand Befelh, wo mit  :  angeend,  messend mit <EIN> bst-
-                  tigt werdn. Ds dyrsagn myr vrba niemer.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-           Letzn 5.2: NON MEERER DRBER, WIE MYN DAUTTICHTN SCHREIBT
-
-
-      ** Um bbs Gnderts neu z speichern, zipf :w NEUER_DAUTTICHTNAM. **
-
-  1. Zipf  :!dir   older  :!ls  ,  dst dyr ayn Auflistung von deinn Verzaich-
-     niss ausherlaasst.  Dst dyrnaach <EIN> eingbn muesst, waisst ee schoon.
-
-  2. Suech dyr aynn Dauttichtnam aus, dnn wo s non nit geit, bbenn POCH.
-
-  3. Ietz demmlt:  :w POCH   (also mit POCH als dnn neuen Dauttichtnam).
-
-  4. Ds speichert ietz de gantze Dautticht, also nn Wimmschainer,  unter dnn
-     Nam POCH. Ds kanst leicht berpreffen, indem dst ainfach  :!ls   older
-     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
-
-Anmrkung:  Stigst ietz aus n Wimm aus und gnnst n aft wider mit   vim POCH  ,
-            naacherd wr d Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
-            wiest n gspeichert haast.
-
-  5. Ietz verweitert d Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
-     beziehungsweis bei aynn Ainslgebu mit   :!rm POCH   .
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
-
-** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
-
-  1. Ruck nn Mrkl auf netty d Zeil daader.
-
-  2. Demmlt  v  und gee mit n Mrkl  auf dnn fmftn Auflistungspunt untet.  Du
-     seghst glei, d s Gwort vrherghbt erscheint.
-
-  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
-
-  4. Zipf  w POCH  , wobei s dnn Dauttichtnam POCH  non nit geit.  Vergwi di,
-     dst ds  :'<,'>w POCH aau +seghst, ee wennst <EIN> druckst.
-
-  5. Dyr Wimm schreibt de ausgwaltn Zeil  eyn de Dautticht POCH einhin.  Benutz
-     :!dir  older  :!ls  ,  dst ds berpreffst. Lsh s fein nit bbenn! Mir
-     brauchend s nmlich fr de naehste Letzn.
-
-Anmrkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mrkl um-
-            aynandfarn,  um d Auswal  z verndern.  Drafter kan myn mit yn aynn
-            Pfemerer  mit dnn Gwort  bbs machen.  Zo n Beispil lscht  d  ds
-            Gwort.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-               Letzn 5.4: EINLSN UND ZAMMENFERN VON DAUTTICHTN   
-
-
-    ** Um nn Inhalt von ayner Dautticht einzlsn, zipf  :r DAUTTICHTNAM  **
-
-  1. Stz nn Mrkl ber d Zeil daader.
-
-OBACHT:  Aft dst nn Schrit 2  ausgfert haast,  seghst auf aynmaal  bbs aus
-         dyr Letzn 5.3.  Bewg di naacherd wider abwrts, dyrmitst d Letzn wi-
-         derfinddst.
-  2. Ietz  lis  dein Dautticht  POCH ein,  indem dst d Faudung   :r POCH aus-
-     ferst,  wobei wie gsait POCH  fr dnn  von dir  ausgsuechtn Dauttichtnam
-     steet. De einglsne Dautticht werd unterhalb dyr Mrklzeil eingfegt.
-
-  3. Um zo n berpreffen,  ob de Dautticht  aau gwi einglsn ist,  gee zrugg;
-     und du seghst,  d s ietz zwo Ausfrtigungen  von dyr Letzn 5.3. geit,  s
-     Urniss und de eingfegte Dauttichtfassung.
-
-Anmrkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlsn.  Zo n Bei-
-            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und fegt s
-            unterhalb n Mrkl ein.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 5
-
-
-  1. :!FAUDUNG fert aynn ausserignen Befelh aus.
-
-      Daader ayn ttlych gwnddte Beispiler:
-      (Fenstl)              (Ainsl - Leinsl)
-      :!dir                 :!ls                - listt s Verzaichniss auf.
-      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
-
-  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dnn besagtn Nam.
-
-  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
-     Dautticht mit seln Nam.
-
-  4. :r DAUTTICHTNAM  ladt sele Dautticht  und fegt s  unterhalb n Mrklbefand
-     ein.
-
-  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und fegt s  unterhalb n
-     Mrklbefand ein.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        Letzn 6.1: ZEIL FFNEN (open)
-
-
-        ** Zipf o, um ayn Zeil unterhalb n Mrkl z ffnen und eyn d **
-                        ** Einfegartweis z kemmen. **
-
-  1. Bewg nn Mrkl zo dyr eerstn mit ---> angmrktn Zeil unt.
-
-  2. Zipf o (klain),  um ayn Zeil  UNTERHALB n Mrkl z ffnen  und mit dyr Ein-
-     fegartweis weiterztuen.
-
-  3. Ietz zipf ayn Weeng ayn Gwort und druck <ESC>,  um d Einfegartweis z ver-
-     laassn.
----> Mit  o  werd dyr Mrkl auf de offene Zeil in dyr Einfegartweis gstzt.
-
-  4. Um ayn Zeil OBERHALB n Mrkl aufzmachen,  gib ainfach aynn groosss O statt
-     yn aynn klainen ein. Versuech ds auf dyr untignen Zeil.
-
----> ffnet ayn Zeil ber derer daader mit  O  ,  wenn dyr Mrkl auf derer Zeil
-     ist.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 6.2: GWORT ANFEGN (append)
-
-
-                ** Zipf  a  , um bbs NAACH n Mrkl einzfegn. **
-
-  1. Bewg nn Mrkl gan n Anfang von dyr eerstn ebungszeil mit ---> unt.
-
-  2. Druck  e  , hinst d dyr Mrkl an n End von  Zei  steet.
-
-  3. Zipf ayn klains  a  , um bbs NAACH n Mrkl anzfegn.
-
-  4. Vergntz ds Wort wie in dyr Zeil drunter.  Druck <ESC>, um d Schreib-Art-
-     weis z verlaassn.
-
-  5. Bewg di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
-     4.
-
----> D Ze biett ayn Glgn , ayn Gwort in ayner Zeil anzf.
----> D Zeil biett ayn Glgnet, ayn Gwort in ayner Zeil anzfegn.
-
-Anmrkung:   a  ,  i  und  A  bringend ainn gleichermaan eyn d Einfegartweis;
-             dyr ainzige Unterschaid ist, WO mit n Einfegn angfangt werd.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSTZN (replace)
-
-
- ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z erstzn. **
-
-  1. Bewg nn Mrkl zo dyr eerstn untignen, mit ---> angmrktn Zeil.
-     Gee mit n Mrkl gan n Anfang von n eerstn  xxx  .
-
-  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
-     yso d de sel s xxx erstzt.
-
-  3. Druck <ESC> ,  um d Erstzungsartweis  z verlaassn.  Du gspannst,  d dyr
-     Rest von dyr Zeil unverndert bleibt.
-
-  4. fert die Schritt, um ds berblibne xxx z erstzn.
-
----> S Zunddn von 123 zo xxx ergibt xxx.
----> S Zunddn von 123 zo 456 ergibt 579.
-
-Anmrkung: D Erstzungsartweis ist wie d Einfegartweis,  aber ayn ieds eindem-
-           mlte Zaichen lscht ayn vorhanddns.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 6.4: GWORT AAMEN UND EINFEGN
-
- ** Benutz nn Pfemerer  y  , um bbs z aamen, und  p  , um bbs einzfegn. **
-
-  1. Gee zo dyr mit  --->  angmrktn Zeil unt  und stz nn Mrkl  hinter "a)".
-
-  2. Ginn d Sichtisch-Artweis mit   v   und bewg nn Mrkl gnaun vor "eerste".
-  
-  3. Zipf  y  , um dnn vrherghbtn Tail z aamen.
-
-  4. Bewg nn Mrkl gan n End von dyr naehstn Zeil:  j$
-
-  5. Demmlt  p  , um ds Gwort einzfegn, und aft:  a zwaitte <ESC>  .
-
-  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln,  aam s pfelfs  y,  be-
-     wg di gan n End von dyr naehstn Zeil mit  j$   und feg s Gwort dortn mit
-     p  an.
-
---->  a) ds ist dyr eerste Eintrag.
-      b)
-
-Anmrkung: Du kanst  y  aau als Pfemerer verwenddn;  yw  aamt ain Wort.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                           Letzn 6.5: SCHALTTER STZN
-
-** Stz aynn Schaltter yso,  d ayn Suech older Erstzung Groo- und Klain- **
-                            ** schreibung bergeet. **
-                            
-  1. Suech um 'bergee", indem dst   /bergee   eingibst.
-     Widerhol d Suech ayn ttlych Maal, indem dst de Tastn  n  druckst.
-
-  2. Stz de Zwisl - nn Schaltter - 'ic' (ignore case), indem dst  :set ic
-     eingibst.
-  3. Ietz suech wider um 'bergee' und tue aau wider mit  n  weiter.  Daa fallt
-     dyr auf, d ietz bbenn aau  bergee  und  BERGEE  hergeet.
-
-  4. Stz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
-
-  5. Widerhol d Suech und bobacht, was ietz gschieght:   /bergee <EIN>
-
-  6. Dst groo und klain wider gwon unterscheidst, zipf:   :set noic
-
-Anmrkung:  Mechst de Trffer niemer vrherghbt seghn,  gib ein:   :nohlsearch
-Anmrkung:  Sollt klain/groo bei ayner ainzignen Suech wurst sein,  benutz  \c
-            in n Suechausdruk:   /bergee\c <EIN>
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 6
-
-  1. Zipf  o  ,  um ayn Zeil  UNTERHALB n Mrkl z ffnen und d Einfegartweis z
-                 ginnen.
-     Zipf  O  ,  um ayn Zeil OBERHALB n Mrkl z ffnen.
-
-  2. Zipf  a  ,  um NAACH n Mrkl ayn Gwort einzfegn.
-     Zipf  A  ,  um ayn Gwort naach n Zeilnend anzfegn.
-
-  3. D Faudung  e  bringt di gan n End von aynn Wort.
-
-  4. Dyr Pfemerer  y  (yank) aamt bbs,  p  (put) fegt ds ein.
-
-  5. Ayn groosss  R  geet eyn d Erstzungsartweis,  hinst d myn <ESC> druckt.
-
-  6. D Eingaab von ":set xxx"  stzt de Zwisl "xxx".  Ayn ttlych Zwisln seind:
-     'ic' 'ignorecase'   Groo/klain wurst bei ayner Suech
-     'is' 'incsearch'    Zaig aau schoon ayn Tailberainstimmung
-     'hls' 'hlsearch'    Hb allsand pssetn Ausdrck vrher
-     Dyr Schaltternam kan in dyr Kurz- older Langform angbn werdn.
-
-  7. Stll yn ayner Zwisl "no" voran, dst ys abschalttst:   :set noic
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
-
-
-            ** Nutz ds einbaute Hilfgebu, de "Betribsanlaittung" **
-
-  Eyn n Wimm  ist ayn ausferliche "Gebrauchsanweisung"  einbaut.  Fr s Eerste
-  prblt ainfach ains von dene dreu aus:
-    - Druck d <HILF>-Tastn, wennst bbenn aine haast.
-    - Druck de Tastn <F1>, fallsst ys haast.
-    - Zipf   :help <EIN>
-
-  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie ds mit dyr Hilf geet.
-  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
-  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
-
-  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem dst yn dyr Faudung
-  :help   aynn Auerwerd naachstllst und istig <EIN> nit vergisst.  Prblt ds:
-
-     :help w
-     :help c_CTRL-D
-     :help insert-index
-     :help user-manual
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 7.2: ERSTLL AYN GIN-SCHRIPF
-
-
-            ** Mutz nn Wimm mit de einbautn Faehigkeitn auf **
-
-  Dyr Wimm besitzt ayn Wsn Schftungen,  wo ber n Urwimm aushingeend, aber de
-  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
-  ausherholst, erstllst ayn "vimrc"-Dautticht.
-
-  1. Lg ayn "vimrc"-Dautticht an;  ds geet  ie naach Betribsgebu  verschidn:
-     :e ~/.vimrc     fr s Ainsl
-     :e $VIM/_vimrc  bei n Fenstl
-
-  2. Ietz lis nn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
-     :r $VIMRUNTIME/vimrc_example.vim
-
-  3. Speichert de Dautticht mit:
-     :w
-
-  4. Bei n naehstn Gin von n Wimm  ist aft d Fegnussvrherhbung  zuegschaltt.
-     Du kanst dyr allss  eyn d Dautticht  einhinschreibn,  wasst bstndig habn
-     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                              Letzn 7.3: VERGNTZN
-
-
-               ** Befelhszeilnvergntzung mit <STRG>d und <TAB> **
-
-  1. Vergwi di, d dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
-
-  2. Schaug naach, wlcherne Dauttichtn d s in n Verzaichniss geit:   :!ls
-     older   :!dir
-  3. Zipf nn Anfang von ayner Faudung:   :e
-
-  4. Druck  <STRG>d  ,  und dyr Wimm zaigt ayn Listn von Faudungen,  wo mit "e"
-     angeend.
-  5. Druck  <TAB>  ,  und dyr Wimm vervollstndigt  nn Faudungsnam zo ":edit".
-
-  6. Feg  ayn Laerzaichen  und nn Anfang  von ayner  besteehetn Dautticht an:
-     :edit DAU
-
-  7. Druck <TAB>.  Dyr Wimm vergntzt nn Nam,  ds haisst,  wenn yr aindeuttig
-     ist.
-Anmrkung:  D Vergntzung  geit s fr aynn Hauffen Faudungen.  Versuech ainfach
-           <STRG>d  und  <TAB>.  Bsunders ntzlich ist ds bei   :help  .
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 7
-
-
-  1. Zipf  :help   older druck <F1> older <HILF>,  um ayn Hilffenster z ffnen.
-
-  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
-
-  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
-
-  4. Zipf  :q  , um s Hilffenster z schliessn.
-
-  5. Erstll ayn vimrc-Ginschripf  zuer Sicherung von deine Mtzneinstllungen.
-
-  6. Druck <STRG>d, aft dst naach  :  mit ayner Faudung angfangt haast,  dyr-
-     mitst mgliche Vergntzungen anzaigt kriegst.
-     Druck <TAB> fr ain Vervollstndigung yllain.
-
-
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  Ds wr ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
-  und bndignen berblik ber s Blat  WIMM z lifern,  netty vil gnueg,  d myn
-  fr s Eerste  wirklich bbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
-  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
-  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual   .
-
-  Zo n Weiterlsn und Weiterlernen wr ds Buech daader zo n Empfelhen:
-    Vim - Vi Improved - von n OUALLINE Steve
-    Verlaag: New Riders
-  Ds ist ds eerste Buech, wo ganz yn n Wimm gwidmt ist, netty ds Grechte fr
-  Anfnger. Es haat ayn Wsn Beispiler und aau Bilder drinn.
-  See http://iccf-holland.org/click5.html
-
-  Ds folgete Buech  ist schoon lter und meerer  ber n Urwimm  als wie ber n
-  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
-  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
-  3897211262
-  In dnn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
-  De sxte Ausgaab enthaltt aau schoon bbs ber n Wimm.
-  Als ietzunde Bezugniss  fr d Fassung  6.2  und ayn pfrenge Einferung  dient
-  ds folgete Buech:
-    vim ge-packt  von n WOBST Reinhard
-    mitp-Verlaag, Buechlaittzal 3-8266-1425-9
-  Trotz dyr recht pfrengen Darstllung  ist s durch seine viln ntzlichnen Bei-
-  spiler aau fr Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
-  seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
-
-  Verfasst habnd dnn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
-  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwrff, wo
-  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
-  zuer Verfegung gstllt haat. Gundpost: bware@mines.colorado.edu.
-  Fr n Wimm haat n dyr MOOLENAAR Bram barechtt.
-  De bairische berstzung stammt von n HELL Sepp 2009. Sein Gundpostbrcht ist
-  sturmibund@t-online.de 
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  
-
- 
-
-
-
diff -Naur vim73.orig/runtime/tutor/tutor.bj.utf-8 vim73/runtime/tutor/tutor.bj.utf-8
--- vim73.orig/runtime/tutor/tutor.bj.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.bj.utf-8	1970-01-01 00:00:00.000000000 +0000
@@ -1,987 +0,0 @@
-===============================================================================
-=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7D   =
-===============================================================================
-
-   Dyr Wimm ist ayn gro mächtigs Blat, dös was mit aynn Wösn Befelh aufwartt; z
-   vil,  däß myn s allsand  in aynn Schainer  wie dönn daader  unterbräng.  Der
-   Schainer ist yso aufbaut,  däß yr halt netty die Befelh allsand bringt, wost
-   brauchst, däßst mit iem für s Eerste wirklich öbbs anfangen kanst.
-   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; dös haisst,
-   wennst di nit grooß mit n Pröbln und Tüftln aufhaltst.
-
-   OBACHT:
-   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort öndern.  Dösswögn
-   machst eyn n Böstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
-   dös Gwort daader  mit n Befelh "vimtutor bj"  ausherlaassn,  ist s ee schoon
-   ayn Aamum.
-   Mir kan s  nit oft gnueg  sagn,  däß  der Schainer daader  istig  gan n Üebn
-   ghoert.  Also muesst schoon aau die Befelh ausfüern,  wennst ys gscheid ler-
-   nen willst. Mit n Lösn yllain ist s +nit taan!
-
-   Ietz schaust grad non, däß dein Föststölltastn nit druckt ist; und aft geest
-   glei aynmaal mit dyr j-Tastn abwärts (yso laaufft dös nömlich),  hinst däßst
-   de gantze Letzn 1.1 auf n Bildschirm haast.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 1.1: MIT N MÖRKL UMAYNANDFARN
-
-**  Dyrmitst mit n Mörkl umaynandkimmst, druck h, j, k und l wie unt zaigt.  **
-            ^            Ayn Öslsbrugg:
-            k            De Tastn  h  ist winster und +geet aau gan winster.
-   < h             l >   S  l  leit zesm und richtt si gan zesm.
-            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
-            v            Mit n  k  kimmst gan n KOPF.            
-  1. Ietz ruedertst ainfach mit n Mörkl auf n Bildschirm umaynand,  hinst däßst
-     di sicher füelst.
-  2. Halt  d Abhin-Tastn (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
-     kimmst gan dyr naehstn Letzn.
-     
-  3. Wie gsait, ietz bewögst di also mit derer Tastn gan dyr Letzn 1.2.
-
-Non öbbs: Allweil, wenn dyr niemer ganz wol ist, wasst öbbenn druckt haast, aft
-          zipfst  <ESC>;  naacherd bist wider ganz gwon in dyr Befelhs-Artweis.
-
-      
-          Nöbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
-          hjkl  seind z haissn s Wimm-Urgstain;  und de "Hörtn" seind ganz dyr-
-          für, däß myn bei +dene bleibt. Pröblt s ainfach aus!
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        Letzn 1.2: ÖNN WIMM AUSSCHALTTN
-
-
-  ALSO, EE WENNST ÖBBS VON DAA UNT AUSFÜERST,  LIS LIEBER ZEERST DE GANTZE LET-
-  ZN!
-
-  1. Druck d <ESC>-Tastn, dyrmitst aau gwiß in dyr Befelhs-Artweis bist.
-  
-  2. Demmlt  :q! <EIN>.
-     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst öbbenn  göndert
-     haast.
-
-  3. Balst önn Eingib seghst, gib dö Faudung ein,  wo di zo dönn Schainer brun-
-     gen haat, also    vimtutor bj <EIN>.
-
-  4. Also, wenn ietz allsse sitzt, naacherd füerst d Schritt 1 hinst 3 aus, mit
-     wasst ys Blat verlaasst und aft wider einhinkimmst.
-
-Anmörkung: Mit  :q! <EIN> verwirffst allss, wasst göndert older enther gschribn
-           haast. In aynn Öttlych Letznen lernst acht, wiest dös allss in ayner
-           Dautticht speichertst.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 1.3: GWORT BARECHTN - LÖSCHN 
-
-         
-         ** Druck  x  , dyrmitst dös Zaichen unter n Mörkl löschst. **
-
-  1. Bewög di mit n Mörkl auf de mit  ---> angmörkte Zeil unt.
-
-  2. Zo n Faeler Verbössern  farst mit n Mörkl  netty  auf dös Zaichen,  dös wo
-     glöscht ghoert.
-
-  3. Druck de Tastn  x  , däßst dös überflüssige Zaichen löschst.
-
-  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst däß dyr Saz stimmt.
-
----> De Kkuue sprangg übber nn Maanad.
-
-  5. Wenn ietz de Zeil verbössert ist, geest gan dyr Letzn 1.4. weiter.
-
-Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit öbbenn,
-                   allss auswendig z lernen;  nän, lern ainfach mit n Anwenddn!
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 1.4: GWORT BARECHTN - EINFÜEGN
-
-
-                  **  Druck  i  , dyrmitst öbbs einfüegst. **
-
-  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil, wo mit ---> angeet.
-
-  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewög önn Mörkl  auf dös
-     eerste Zaichen NAACH derer Stöll, daa wo s Gwort eingfüegt werdn sollt.
-
-  3. Druck  i  und gib dös ein, was abgeet.
-
-  4. Wenn ieweils ayn Faeler verweitert ist, aft druck <ESC>; und dyrmit kimmst
-     gan dyr Befelhsartweis zrugg.
-     So, und ietz tuest ainfach yso weiter, hinst däß dyr Saz stimmt.
-
----> Daader gt dd öbbs b.
----> Daader geet diend öbbs ab.
-
-  5. Balst mainst,  däßst ys Gwort-Einfüegn kanst, aft geest gan dyr Letzn 1.5.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 1.5: GWORT BARECHTN - ANFÜEGN
-
-
-                      ** Druck  A  gan n Gwort Anfüegn. **
-
-  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn ---> dyrvor haat.
-     Daa ist s gleich, wo gnaun dyr Mörkl in derer Zeil steet.  
-
-  2. Demmlt  A  und gib de entspröchetn Ergöntzungen ein.
-
-  3. Wennst  mit n Anfüegn förtig bist,  aft druckst <ESC>,  däßst wider eyn de
-     Befelhsartweis zruggkimmst.
-
-  4. So,  und ietz geest aft non gan dyr zwaittn  mit ---> angmörktn Zeil;  und
-     daadl machst ys netty yso.
-
----> In derer Zeil gee  
-     In derer Zeil geet ayn Weeng ayn Gwort ab.
----> Aau daader stee
-     Aau daader steet öbbs Unvollstöndigs. 
-
-  5. Wennst s Anfüegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 1.6: AYN DAUTTICHT BARECHTN
-
-
-     ** Mit  :wq  speichertst ayn Dautticht und verlaasst önn Wimm ganz. **
-
-  !! OBACHT:  Ee wennst mit dönn alln daa unt weitertuest, lis zeerst de gantze
-     Letzn durch!!
-
-  1. Verlaaß also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
-
-  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer <EIN> . 'vim' ruefft s Blat
-     auf,  und 'Schainer'  haisst de Dautticht,  wost barechtn  willst.  Dyrmit
-     haast also ayn Dautticht, dö wost barechtn kanst.
-
-  3. Ietz  füegst öbbs ein older löschst öbbs,  wiest ys in de vorignen Letznen
-     glernt haast.
-
-  4. Speichert de gönderte Dautticht und verlaaß önn Wimm mit  :wq  <EIN>  .
-
-  5. Schmeiß önn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
-
-  6. Aft däßst  de obignen Schritt glösn und käppt haast,  kanst ys durchfüern.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 1
-
-
-  1. Dyr Mörkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
-              h (winst)     j (ab)        k (auf)       l (zes)
-
-  2. Um önn Wimm umbb n Eingib aus z ginnen, demmlt: vim DAUTTICHT <EIN> .
-
-  3. Willst önn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
-                <ESC>  :q!  <EIN> .
-     Gan n Verlaassn und Speichern aber zipfst <ESC>  :wq  <EIN>.
-
-  4. Willst dös Zaichen löschn, daa wo dyr Mörkl drauf ist, demmltst  x  .
-
-  5. Willst öbbs vor n Mörkl eingöbn, zipfst  i  und drafter  <ESC>  .
-     Mechst ys aber eyn s Zeilnend anhinhöngen, benutzt ys   A  .
-     Und ainfach naach n Mörkl füegst ys mit  a  ein  .
-
-Anmörkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
-            Faudung ab, dö wo dyr schiefgangen ist.
-
-     Ietz tue mit dyr Letzn 2 weiter.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                           Letzn 2.1.: LÖSHFAUDUNGEN
-
-
-                 ** Demmlt  dw  , dyrmitst ayn Wort löschst **
-
-  1. Druck  <ESC>, dyrmit s aau gwiß ist, däßst in dyr Befelhsartweis bist.
-
-  2. Bewög önn Mörkl zo dyr mit ---> angmörktn Zeil unt.
-
-  3. Und daa geest ietz auf n Anfang von aynn Wort, dös wo glöscht ghoert.
-
-  4. Zipf  dw  , däßst dös gantze Wort löschst.
-
-  Nöbnbei:  Dyr Buechstabn  d  erscheint auf dyr lösstn Zeil  von n Bildschirm,
-            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, däß öbbs kimmt, al-
-            so  daader ayn  w  .  Seghst  freilich  öbbs Anderts  wie ayn  d  ,
-            naacherd haast  öbbs Falschs  demmlt.  Druck aft  <ESC>  und pröblt
-            s non aynmaal.
----> Ayn Öttlych Wörter lustig ghoernd nit Fisper eyn dönn Saz einhin.
-
-  5. Äfert  d Schritt  3 und 4,  hinst däß  dyr Saz pässt,  und gee aft gan dyr
-     Letzn 2.2.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 2.2.: NON MEERER LÖSHFAUDUNGEN
-
-
-            ** Gib  d$  ein, däßst hinst eyn s Zeilnend löschst. **
-
-  1. Druck <ESC> , dyrmitst aau gwiß in dyr Befelhsartweis bist.
-
-  2. Bewög önn Mörkl hinst eyn de mit ---> angmörkte Zeil untn.
-
-  3. Gee mit n Mörkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
-
-  4. Zipf  d$  , däßst hinst eyn s End von dyr Zeil löschst.
-  
----> Öbber haat s End von dyr Zeil doplt eingöbn. doplt eingöbn.
-
-
-  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
-
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        Letzn 2.3: PFEMERER UND WOLENDER
-
-
-  Vil Faudungen,   wo s Gwort öndernd, sötznd si aus aynn Pfemerer und aynn Wo-
-  lend zamm. Bal i also öbbs löschn will, schreib i ainsting  d  und aft s "Wo-
-  lend", dös haisst also, "wolend", "wohin" däß i will - older was i halt gnaun
-  löschn will.
-
-
-
-
-
-
-  Daader also, was i wie löschn kan:
-    w - hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
-    e - gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
-    $ - zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
-
-  Also löscht de Tastnfolg  de  umbb n Mörkl hinst eyn s Wortend.
-Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mörkl
-             entspröchet weiter.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                   Letzn 2.4: MIT AYNN ZÖLER D WOLENDER ÄFERN
-
-
-      ** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel halt widerholt. **
-
-  1. Bewög önn Mörkl gan n Anfang von dyr Zeil mit ---> dyrvor unt.
-
-  2. Zipf  2w  , däßst mit n Mörkl zwai Wörter weitergeest.
-
-  3. Zipf  3e  , däßst mit n Mörkl auf s End von n drittn Wort kimmst.
-
-  4. Zipf  0  (aynn Nuller), däßst eyn n Anfang von dyr Zeil hinkimmst.
-
-  5. Widerhol d Schritt 2 und 3 mit verschaidne Zöler.
-
-  ---> Dös ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
-
-  6. Gee weiter gan dyr Letzn 2.5.
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                 Letzn 2.5: DURCH AYNN ZÖLER GLEI MEERER LÖSCHN
-
-
-              ** Ayn Zal vor aynn Pfemerer äfert dönn um seln Werd. **
-
-  Also, i mecht löschn,  und zwaar öbbs Bestimmts,  und dös so und so oft:  Daa
-  dyrzue benutz i aynn Zöler:
-                              d  Zöler  Wolend (also önn Bewögungsschrit)
-
-  1. Bewög önn Mörkl  gan n eerstn Wort in GROOSSBUECHSTABN in dyr mit ---> an-
-     gmörktn Zeil.
-
-  2. Demmlt  d2w  , dyrmitst de ganz grooßgschribnen Wörter löschst.
-
-  3. Äfert  d Schritt 1 und 2  mit dönn entspröchetn Zöler,  dyrmitst de drauf-
-     folgetn  ganz großgschribnen Wörter  mit ayner ainzignen Faudung  löschst:
-
-
---->  Dö ABC DE Zeil FGHI JK LMN OP mit Wörter ist Q RS TUV ietz berichtigt.
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                          Letzn 2.6: ARECHTN AUF ZEILN
-
-
-               ** Zipf  dd  , um ayn gantze Zeil z löschn. **
-
-  Weil s gro oft vürkimmt,  däß myn gantze Zeiln löscht,  kaamend schoon d Ent-
-  wickler von n Urwimm daa drauf,  däß myn ainfach  dd  gan dönn Zwök schreibt.
-
-
-  1. Bewög önn Mörkl gan dyr zwaittn Zeil in n untignen "Gedicht".
-  2. Zipf  dd  ,  um dö Zeil z löschn.
-  3. Ietz bewögst di gan dyr viertn Zeil.
-  4. Zipf  2dd  , um zwo Zeiln zo n Löschn.
-
---->  1)  Roosn seind root;
---->  2)  Drunter ist s Koot.
---->  3)  Veigerln seind blau.
---->  4)  Umgrabn tuet s d Sau.
---->  5)  D Ur sait de Zeit,
---->  6)  Sait, däß s mi freut,
---->  7)  Dirndl, dein Gschau.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                     Letzn 2.7: RUGGGÖNGIG MACHEN (RUGGLN) 
-
-
-             ** Zipf  u  , dyrmitst de lösstn Faudungen ruggltst **
-              ** older  U  , um ayn gantze Zeil widerherzstölln. **
-
-  1. Bewög önn Mörkl  gan dyr mit ---> angmörktn Zeil unt  und gee dyrmit auf n
-     eerstn Faeler.
-  2. Zipf  x  , däßst dös eerste z vile Zaichen löschst.
-  3. Ietz demmlt  u  , dyrmitst de lösste Faudung ruggltst.
-  4. Ietz behöb  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
-  5. Aft gibst ayn  U  (grooß) ein,  däßst de Zeil wider yso hinbringst,  wie s
-     gwösn ist.
-  6. So,  und ietz  demmltst  so oft  u  , hinst däßst s  U  und de andern Fau-
-     dungen rugggöngig gmacht haast.
-  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst däßst  allsand Be-
-     felh widerhergstöllt, z haissn allsse rugg-grugglt haast  (also d Rugggön-
-     gigmachungen rugggöngig gmacht).
----> Beerichtig d Faeller voon dehrer Zeiil  und sttöll s mitt n Ruggruggln wi-
-     der her.
-  8. Die Faudungen seind gro wichtig; sö helffend ainn närrisch weiter.
-     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 2
-
-
-  1. Um von n Mörkl aus hinst eyn s naehste Wort zo n Löschn, zipf:  dw
-  2. Um umbb n Mörkl hinst eyn s End von dyr Zeil zo n Löschn, demmlt  d$
-  3. Dyrmitst ayn gantze Zeil löschst, gib ein:  dd
-  4. Mechst ayn Bewögung, ayn "Wolend", öfters,  stöll de entspröchete Zal dyr-
-     vor:  3dw  older aau:  d3w
-  5. Dyr Pfueg für ayn Önderungsfaudung lautt yso:
-               Pfemerer   [Zal]   Bewögungsschrit (Wolend)
-     Und dös haisst:
-      Dyr PFEMERER gibt an, WAS taan ghoert, öbbenn   d   =  löschn (»delete«).
-      [ZAL] - Ayn Zal KAN myn angöbn, wenn myn halt ayn Wolend öfter habn will.
-      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  öbbenn
-      auf ayn Wort (  w  ), s End von dyr Zeil (  $  ) und so weiter.
-
-  6. Däßst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
-
-  7. Um öbbs Vorigs wider z ruggln, gib ein:                u (klain also)
-     Um allsand Önderungen in ayner Zeil z ruggln, haast:   U (also grooß)
-     Um "rugg-z-ruggln", also allss wider herzstölln, zipf: <STRG>r   
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                           Letzn 3.1: ANFÜEGN (»put«) 
-
-
-     ** Zipf  p  , dyrmitst öbbs gnetty Glöschts naach n Mörkl anfüegst. **
-
-  1. Bewög önn Mörkl gan dyr eerstn untignen Zeil mit   --->   dyrvor.
-
-  2. Zipf  dd  , um sele Zeil z löschn  und dyrmit  in aynn Wimm-"Roster"  zo n
-     speichern.
-
-  3. Bewög önn Mörkl gan dyr Zeil c),  ÜBER derer, daa wo de glöschte Zeil ein-
-     hinkemmen sollt.
-
-  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast dö Zeil unter derer
-     mit n Mörkl drinn.
-  5. Äfert  d Schritt 2 hinst 4,  hinst däßst  allsand Zeiln  yso naachynaynand
-     haast, wie s hinghoernd.
-
----> d) Kanst du dös aau?
----> b) Veigerln seind blau.
----> c) Bedachtn kan myn lernen.
----> a) Roosn seind root.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         Letzn 3.2: ERSÖTZN (»replace«)
-
-
-      ** Zipf  rx  , um dös Zaichen unter n Mörkl durch  x  z ersötzn. **
-
-  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil mit   --->   dyrvor.
-
-  2. Bewög önn Mörkl, hinst däß yr auf n eerstn Faeler steet.
-
-  3. Zipf  r  und drafter dös Zaichen, wo dyrfür daa hinghoert.
-
-  4. Widerhol d Schritt 2 und 3,  hinst däßst de eerste Zeil  gmaeß dyr zwaittn
-     berichtigt haast:
---->  Wie dö Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
---->  Wie dö Zeil eingöbn wurd, wurdnd ainige falsche Tastnen zipft!
-
-  5. Ietz tue mit dyr Letzn 3.3 weiter.
-
-Anmörkung: Vergiß nit drauf, däßst mit n Anwenddn lernen solltst und nit öbbenn
-           mit n Auswendiglernen!
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                          Letzn 3.3: ÖNDERN (»change«)
-
-
-              ** Um hinst eyn s Wortend z öndern, zipf  ce  . **
-
-  1. Gee mit n Mörkl auf de eerste mit ---> angmörkte Zeil.
-
-  2. Ietz farst netty auf s  "s"  von Wstwr hin.
-
-  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  örter  .
-
-  4. Druck <ESC> und bewög önn Mörkl gan n naehstn Zaichen,  wo göndert ghoert.
-
-  5. Äfert  d Schritt 3 und 4,  hinst däß  dyr eerste Saz  wie dyr zwaitte ist.
-
----> Ainige Wstwr von derer Zlww ghhnnd mit n Öndern-Pfemerer gaauu.
----> Ainige Wörter von derer Zeil ghoernd mit n Öndern-Pfemerer göndert.
-
-ce  löscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                  Letzn 3.4.: NON MEERER ÖNDERUNGEN PFELFS  c
-
-
-   ** D Löshfaudung  c  arechtt mit de nömlichnen Wolender wie dö mit  d  **
-
-  1. Dyr Önder-Pfemerer arechtt anleich wie d Löshfaudung mit   d  ,  und zwaar
-     yso:
-         c    [Zal]   Bewögungsschritt (Wolend)
-
-  2. D Wolender  seind  de gleichn,  öbbenn  w  für Wort und  $ für s Zeilnend.
-
-
-  3. Bewög di zo dyr eerstn untignen Zeil mit ---> .
-
-  4. Ietz geest auf dönn eerstn Faeler.
-
-  5. Zipf  c$  , gib önn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
-     <ESC>.
----> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
----> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
-
-Denk allweil dran,  däßst iederzeit  mit dyr Ruggtastn Faeler ausbössern kanst.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 3
-
-
-  1. Um ayn  vorher glöschts Gwort  anzfüegn,  zipf  p  .  Daa dyrmit  werd dös
-     gantze Gwort  NAACH n Mörkl  angfüegt.  Wenn s ayn gantze Zeil  gwösn ist,
-     werd dö sel als de Zeil unterhalb n Mörkl eingfüegt.
-
-  2. Um dös Zaichen  unter n Mörkl,  also wo dyr Mörkl ist,  z ersötzn, zipf  r
-     und aft dös Zaichen, wost daadl habn willst.
-
-  3. Dyr Önderungspfemerer ( c = »change«) laasst ainn umbb n Mörkl hinst eyn s
-     End von n Wolend öndern. Zipf  ce  , dyrmitst umbb n Mörkl hinst eyn s End
-     von n Wort öndertst, und  c$  hinst eyn s End von dyr Zeil.
-
-  4. Für d Önderung lautt dyr Pfueg:
-
-     c   [Zal]   Wolend
-
-Ietz tue mit dyr naehstn Letzn weiter.
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                 Letzn 4.1: MÖRKLSTÖLLUNG UND DAUTTICHTDARSTAND
-
-** Demmlt <STRG>g, däßst önn Befand und Darstand von dyr Dautticht anzaigst. **
-  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
-
-Anmörkung: Lis dö gantze Letzn daader durch, ee wennst iewign öbbs unternimmst!
-
-  1. Druck  <STRG>g  .  Auf dös hin erscheint auf derer Seitt ganz unt ayn Dar-
-     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
-     Mörk dyr de Zeilnnummer für n Schrit 3.
-
-Anmörkung:  Müglicherweis  seghst aau önn Mörklbefand  in n zesmen untern Bild-
-            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt; schau dyrzue mit
-            n Befelh   :help 'ruler'   naach.
-  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
-     gg  gibst ein, däßst gan n Anfang von dyr Dautticht aufhinkimmst.
-
-  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
-     Dös bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dös eerste
-     Maal <STRG>g gadruckst.
-
-  4. Wennst di sicher gnueg füelst, aft füer d Schritt 1 hinst 3 aus.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
-               
-
-  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
-
-  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Dös sel wie aau dyr
-     Mörkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
-
-  2. Ietz zipf 'Faeeler' <EIN>. Netty um dös 'Faeeler' willst ietz suechen.
-
-  3. Willst um gnaun dönn Ausdruk weitersuechen, zipf ainfach  n  (wie »next«).
-     Willst hinzrugg suechen, aft gibst  N  ein.
-
-  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
-
-  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, druck <STRG>o,  und dös
-     öfter,  wennst weiter zrugg willst.  Mit <STRG>i widerum  kimmst vorwärts.
-
---->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
-
-Anmörkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
-            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wär auf aus.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 4.3: DE GÖGNKLAMMERN FINDDN
-
-
-   ** Zipf  %  , um de entspröchete Klammer  )  ,  ]  older  }  z finddn. **
-
-  1. Sötz önn Mörkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
-     in dyr untignen Zeil, wo mit ---> angmörkt ist.
-
-  2. Ietzet zipf s Zaichen  %  .
-
-  3. Dyr Mörkl geet ietz auf de pässete schliessete Klammer.
-
-  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr öffneretn Klammer zrugg.
-
-  5. Sötz önn Mörkl auf ayn anderne Klammer von   ({[]})   und pröblt   %  aus.
-
----> Dös ( ist  blooß ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
-
-Anmörkung:  Um dö Müglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
-            Spaichgwort verzweiflt ayn faelete Gögnklammer suechst!
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                 Letzn 4.4: D ERSÖTZUNGSFAUDUNG (»substitute«)
-
-
-        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Ersötzn. **
-
-  1. Gee mit n Mörkl zo dyr unt steehetn mit ---> angmörktn Zeil.
-
-  2. Zipf  :s/dee/de <EIN>  . Der Befelh ersötzt alsnan grad dös +eerste "dee",
-     wo vürkimmt.
-
-  3. Ietz pröblt s mit  :s/dee/de/g  . Dös zuesötzliche  g  ("Pflok"  nennt myn
-     öbbs Sölchers) bewirkt, däß allss, was dyrmit kennzaichnet ist,  innerhalb
-     von dyr ainn Zeil ersötzt werd.
-
----> Dee schoenste Zeit, däß myn dee Blüemln anschaut, ist dee schoene Lan-
-     gesszeit.
-  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n Öndern,  zipf
-     :#,#s/alt/neu/g  ,  wobei # ieweils für de eerste und lösste Zeil von dönn
-     Pfraich steet.
-     :%s/alt/neu/g  zipfst, däßst d Vürkemmen in dyr gantzn Dautticht öndertst.
-        Mit  :%s/alt/neu/gc  finddst allsand Vürkemmen in dyr gsamtn Dautticht;
-     daa werst aber zeerst non gfraagt, obst ys ersötzn willst older nity.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 4
-                        
-  1. <STRG>g   zaigt dönn ietzundn Dauttichtbefand  und önn Darstand dyrvon an.
-           G  bringt di an s End von dyr Dautticht.
-     <Zal> G  bringt di gan dyr entspröchetn Zeilnnummer.
-          gg  bringt di zo dyr eerstn Zeil.
-          
-  2. D Eingaab von  /  mit aynn Ausdruk suecht VÜRSHLING um dönn Ausdruk.
-     Gibst  ?  und aynn Suechbegrif ein, suecht s um dönn ÄRSHLING.
-     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
-     gsuecht. Mit  N geet s umkeerter weiter.
-     <STRG>o bringt di zo ölterne Befändd zrugg, <STRG>i zo neuerne.
-
-  3. D Eingaab von  % , wenn dyr Mörkl auf ainer von dene Klammern steet:   ({[
-     )]}  , bringt di zo dyr Gögnklammer.
-
-  4. Um dös eerste Vürkemmen  von "alt"  in ayner Zeil  durch "neu"  z ersötzn,
-     zipf   :s/alt/neu   .
-     Um allsand in ayner Zeil z ersötzn, zipf   :s/alt/neu/g   .
-     Mechst allss in zwo Zeiln ersötzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
-     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:   :%s/alt/neu/g   .
-     Willst ayn ieds Maal bstaetln, höng 'c' wie »confirm« hint anhin.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÜERN 
-            
-
-  ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach   :!   ein. **
- 
-  1. Zipf  dönn bekanntn Befelh   :  ,  dyrmitst  mit n Mörkl  auf n Bildschirm
-     ganz abhin kimmst. Draufhin kanst aynn gwonen Gfäßbefelh eingöbn.
-
-  2. Zeerst  kimmt aber non ayn Ruefzaichen   !   .  Und ietz haast de Müglich-
-     keit, ayn beliebige ausserige Gfäßfaudung auszfüern.
-
-  3. Als Beispil zipf   :!ls <EIN>  ; und schoon haast ayn Auflistung von deinn
-     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wärst.  Geet   ls
-     aus iewign aynn Grund nit, aft pröblt s mit  :!dir <EIN>  .
-
-Also non aynmaal: Mit dönn Angang kan ayn iede beliebige ausserige Faudung aus-
-                  gfüert werdn, aau mit Auerwerdd.
-
-Und wolgmörkt:    Allsand Befelh, wo mit  :  angeend,  müessend mit <EIN> bstö-
-                  tigt werdn. Dös dyrsagn myr vürbaß niemer.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-           Letzn 5.2: NON MEERER DRÜBER, WIE MYN DAUTTICHTN SCHREIBT
-
-
-      ** Um öbbs Gönderts neu z speichern, zipf :w NEUER_DAUTTICHTNAM. **
-
-  1. Zipf  :!dir   older  :!ls  ,  däßst dyr ayn Auflistung von deinn Verzaich-
-     niss ausherlaasst.  Däßst dyrnaach <EIN> eingöbn muesst, waisst ee schoon.
-
-  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, öbbenn POCH.
-
-  3. Ietz demmlt:  :w POCH   (also mit POCH als dönn neuen Dauttichtnam).
-
-  4. Dös speichert ietz de gantze Dautticht, also önn Wimmschainer,  unter dönn
-     Nam POCH. Dös kanst leicht überprüeffen, indem däßst ainfach  :!ls   older
-     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
-
-Anmörkung:  Stigst ietz aus n Wimm aus und gännst n aft wider mit   vim POCH  ,
-            naacherd wär dö Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
-            wiest n gspeichert haast.
-
-  5. Ietz verweitert dö Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
-     beziehungsweis bei aynn Ainslgebäu mit   :!rm POCH   .
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
-
-** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
-
-  1. Ruck önn Mörkl auf netty dö Zeil daader.
-
-  2. Demmlt  v  und gee mit n Mörkl  auf dönn fümftn Auflistungspunt untet.  Du
-     seghst glei, däß s Gwort vürherghöbt erscheint.
-
-  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
-
-  4. Zipf  w POCH  , wobei s dönn Dauttichtnam POCH  non nit geit.  Vergwiß di,
-     däßst dös  :'<,'>w POCH aau +seghst, ee wennst <EIN> druckst.
-
-  5. Dyr Wimm schreibt de ausgwaltn Zeil  eyn de Dautticht POCH einhin.  Benutz
-     :!dir  older  :!ls  ,  däßst dös überprüeffst. Lösh s fein nit öbbenn! Mir
-     brauchend s nömlich für de naehste Letzn.
-
-Anmörkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mörkl um-
-            aynandfarn,  um d Auswal  z veröndern.  Drafter kan myn mit yn aynn
-            Pfemerer  mit dönn Gwort  öbbs machen.  Zo n Beispil löscht  d  dös
-            Gwort.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-               Letzn 5.4: EINLÖSN UND ZAMMENFÜERN VON DAUTTICHTN   
-
-
-    ** Um önn Inhalt von ayner Dautticht einzlösn, zipf  :r DAUTTICHTNAM  **
-
-  1. Sötz önn Mörkl über dö Zeil daader.
-
-OBACHT:  Aft däßst önn Schrit 2  ausgfüert haast,  seghst auf aynmaal  öbbs aus
-         dyr Letzn 5.3.  Bewög di naacherd wider abwärts, dyrmitst dö Letzn wi-
-         derfinddst.
-  2. Ietz  lis  dein Dautticht  POCH ein,  indem däßst d Faudung   :r POCH aus-
-     füerst,  wobei wie gsait POCH  für dönn  von dir  ausgsuechtn Dauttichtnam
-     steet. De einglösne Dautticht werd unterhalb dyr Mörklzeil eingfüegt.
-
-  3. Um zo n Überprüeffen,  ob de Dautticht  aau gwiß einglösn ist,  gee zrugg;
-     und du seghst,  däß s ietz zwo Ausförtigungen  von dyr Letzn 5.3. geit,  s
-     Urniss und de eingfüegte Dauttichtfassung.
-
-Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei-
-            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und füegt s
-            unterhalb n Mörkl ein.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 5
-
-
-  1. :!FAUDUNG füert aynn ausserignen Befelh aus.
-
-      Daader ayn Öttlych gwänddte Beispiler:
-      (Fenstl)              (Ainsl - Leinsl)
-      :!dir                 :!ls                - listt s Verzaichniss auf.
-      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
-
-  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dönn besagtn Nam.
-
-  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
-     Dautticht mit seln Nam.
-
-  4. :r DAUTTICHTNAM  ladt sele Dautticht  und füegt s  unterhalb n Mörklbefand
-     ein.
-
-  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und füegt s  unterhalb n
-     Mörklbefand ein.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                        Letzn 6.1: ZEIL ÖFFNEN (»open«)
-
-
-        ** Zipf o, um ayn Zeil unterhalb n Mörkl z öffnen und eyn d **
-                        ** Einfüegartweis z kemmen. **
-
-  1. Bewög önn Mörkl zo dyr eerstn mit ---> angmörktn Zeil unt.
-
-  2. Zipf o (klain),  um ayn Zeil  UNTERHALB n Mörkl z öffnen  und mit dyr Ein-
-     füegartweis weiterztuen.
-
-  3. Ietz zipf ayn Weeng ayn Gwort und druck <ESC>,  um d Einfüegartweis z ver-
-     laassn.
----> Mit  o  werd dyr Mörkl auf de offene Zeil in dyr Einfüegartweis gsötzt.
-
-  4. Um ayn Zeil OBERHALB n Mörkl aufzmachen,  gib ainfach aynn groosss O statt
-     yn aynn klainen ein. Versuech dös auf dyr untignen Zeil.
-
----> Öffnet ayn Zeil über derer daader mit  O  ,  wenn dyr Mörkl auf derer Zeil
-     ist.
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 6.2: GWORT ANFÜEGN (»append«)
-
-
-                ** Zipf  a  , um öbbs NAACH n Mörkl einzfüegn. **
-
-  1. Bewög önn Mörkl gan n Anfang von dyr eerstn Üebungszeil mit ---> unt.
-
-  2. Druck  e  , hinst däß dyr Mörkl an n End von  Zei  steet.
-
-  3. Zipf ayn klains  a  , um öbbs NAACH n Mörkl anzfüegn.
-
-  4. Vergöntz dös Wort wie in dyr Zeil drunter.  Druck <ESC>, um d Schreib-Art-
-     weis z verlaassn.
-
-  5. Bewög di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
-     4.
-
----> Dö Ze biett ayn Glögn , ayn Gwort in ayner Zeil anzfü.
----> Dö Zeil biett ayn Glögnet, ayn Gwort in ayner Zeil anzfüegn.
-
-Anmörkung:   a  ,  i  und  A  bringend ainn gleichermaaßn eyn d Einfüegartweis;
-             dyr ainzige Unterschaid ist, WO mit n Einfüegn angfangt werd.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSÖTZN (»replace«)
-
-
- ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersötzn. **
-
-  1. Bewög önn Mörkl zo dyr eerstn untignen, mit ---> angmörktn Zeil.
-     Gee mit n Mörkl gan n Anfang von n eerstn  xxx  .
-
-  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
-     yso däß de sel s xxx ersötzt.
-
-  3. Druck <ESC> ,  um d Ersötzungsartweis  z verlaassn.  Du gspannst,  däß dyr
-     Rest von dyr Zeil unveröndert bleibt.
-
-  4. Äfert die Schritt, um dös überblibne xxx z ersötzn.
-
----> S Zunddn von 123 zo xxx ergibt xxx.
----> S Zunddn von 123 zo 456 ergibt 579.
-
-Anmörkung: D Ersötzungsartweis ist wie d Einfüegartweis,  aber ayn ieds eindem-
-           mlte Zaichen löscht ayn vorhanddns.
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 6.4: GWORT AAMEN UND EINFÜEGN
-
- ** Benutz önn Pfemerer  y  , um öbbs z aamen, und  p  , um öbbs einzfüegn. **
-
-  1. Gee zo dyr mit  --->  angmörktn Zeil unt  und sötz önn Mörkl  hinter "a)".
-
-  2. Ginn d Sichtisch-Artweis mit   v   und bewög önn Mörkl gnaun vor "eerste".
-  
-  3. Zipf  y  , um dönn vürherghöbtn Tail z aamen.
-
-  4. Bewög önn Mörkl gan n End von dyr naehstn Zeil:  j$
-
-  5. Demmlt  p  , um dös Gwort einzfüegn, und aft:  a zwaitte <ESC>  .
-
-  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln,  aam s pfelfs  y,  be-
-     wög di gan n End von dyr naehstn Zeil mit  j$   und füeg s Gwort dortn mit
-     p  an.
-
---->  a) dös ist dyr eerste Eintrag.
-      b)
-
-Anmörkung: Du kanst  y  aau als Pfemerer verwenddn;  yw  aamt ain Wort.
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                           Letzn 6.5: SCHALTTER SÖTZN
-
-** Sötz aynn Schaltter yso,  däß ayn Suech older Ersötzung Grooß- und Klain- **
-                            ** schreibung übergeet. **
-                            
-  1. Suech um 'übergee", indem däßst   /übergee   eingibst.
-     Widerhol d Suech ayn Öttlych Maal, indem däßst de Tastn  n  druckst.
-
-  2. Sötz de Zwisl - önn Schaltter - 'ic' (»ignore case«), indem däßst  :set ic
-     eingibst.
-  3. Ietz suech wider um 'übergee' und tue aau wider mit  n  weiter.  Daa fallt
-     dyr auf, däß ietz öbbenn aau  Übergee  und  ÜBERGEE  hergeet.
-
-  4. Sötz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
-
-  5. Widerhol d Suech und bobacht, was ietz gschieght:   /übergee <EIN>
-
-  6. Däßst grooß und klain wider gwon unterscheidst, zipf:   :set noic
-
-Anmörkung:  Mechst de Tröffer niemer vürherghöbt seghn,  gib ein:   :nohlsearch
-Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \c
-            in n Suechausdruk:   /übergee\c <EIN>
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 6
-
-  1. Zipf  o  ,  um ayn Zeil  UNTERHALB n Mörkl z öffnen und d Einfüegartweis z
-                 ginnen.
-     Zipf  O  ,  um ayn Zeil OBERHALB n Mörkl z öffnen.
-
-  2. Zipf  a  ,  um NAACH n Mörkl ayn Gwort einzfüegn.
-     Zipf  A  ,  um ayn Gwort naach n Zeilnend anzfüegn.
-
-  3. D Faudung  e  bringt di gan n End von aynn Wort.
-
-  4. Dyr Pfemerer  y  (»yank«) aamt öbbs,  p  (»put«) füegt dös ein.
-
-  5. Ayn groosss  R  geet eyn d Ersötzungsartweis,  hinst däß myn <ESC> druckt.
-
-  6. D Eingaab von ":set xxx"  sötzt de Zwisl "xxx".  Ayn Öttlych Zwisln seind:
-     'ic' 'ignorecase'   Grooß/klain wurst bei ayner Suech
-     'is' 'incsearch'    Zaig aau schoon ayn Tailüberainstimmung
-     'hls' 'hlsearch'    Höb allsand pässetn Ausdrück vürher
-     Dyr Schaltternam kan in dyr Kurz- older Langform angöbn werdn.
-
-  7. Stöll yn ayner Zwisl "no" voran, däßst ys abschalttst:   :set noic
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
-
-
-            ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung" **
-
-  Eyn n Wimm  ist ayn ausfüerliche "Gebrauchsanweisung"  einbaut.  Für s Eerste
-  pröblt ainfach ains von dene dreu aus:
-    - Druck d <HILF>-Tastn, wennst öbbenn aine haast.
-    - Druck de Tastn <F1>, fallsst ys haast.
-    - Zipf   :help <EIN>
-
-  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie dös mit dyr Hilf geet.
-  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
-  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
-
-  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem däßst yn dyr Faudung
-  :help   aynn Auerwerd naachstöllst und istig <EIN> nit vergisst.  Pröblt dös:
-
-     :help w
-     :help c_CTRL-D
-     :help insert-index
-     :help user-manual
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                       Letzn 7.2: ERSTÖLL AYN GIN-SCHRIPF
-
-
-            ** Mutz önn Wimm mit de einbautn Faehigkeitn auf **
-
-  Dyr Wimm besitzt ayn Wösn Schäftungen,  wo über n Urwimm aushingeend, aber de
-  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
-  ausherholst, erstöllst ayn "vimrc"-Dautticht.
-
-  1. Lög ayn "vimrc"-Dautticht an;  dös geet  ie naach Betribsgebäu  verschidn:
-     :e ~/.vimrc     für s Ainsl
-     :e $VIM/_vimrc  bei n Fenstl
-
-  2. Ietz lis önn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
-     :r $VIMRUNTIME/vimrc_example.vim
-
-  3. Speichert de Dautticht mit:
-     :w
-
-  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung  zuegschaltt.
-     Du kanst dyr allss  eyn dö Dautticht  einhinschreibn,  wasst bständig habn
-     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                              Letzn 7.3: VERGÖNTZN
-
-
-               ** Befelhszeilnvergöntzung mit <STRG>d und <TAB> **
-
-  1. Vergwiß di, däß dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
-
-  2. Schaug naach, wölcherne Dauttichtn däß s in n Verzaichniss geit:   :!ls
-     older   :!dir
-  3. Zipf önn Anfang von ayner Faudung:   :e
-
-  4. Druck  <STRG>d  ,  und dyr Wimm zaigt ayn Listn von Faudungen,  wo mit "e"
-     angeend.
-  5. Druck  <TAB>  ,  und dyr Wimm vervollstöndigt  önn Faudungsnam zo ":edit".
-
-  6. Füeg  ayn Laerzaichen  und önn Anfang  von ayner  besteehetn Dautticht an:
-     :edit DAU
-
-  7. Druck <TAB>.  Dyr Wimm vergöntzt önn Nam,  dös haisst,  wenn yr aindeuttig
-     ist.
-Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfach
-           <STRG>d  und  <TAB>.  Bsunders nützlich ist dös bei   :help  .
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-                         ZAMMENFASSUNG VON DYR LETZN 7
-
-
-  1. Zipf  :help   older druck <F1> older <HILF>,  um ayn Hilffenster z öffnen.
-
-  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
-
-  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
-
-  4. Zipf  :q  , um s Hilffenster z schliessn.
-
-  5. Erstöll ayn vimrc-Ginschripf  zuer Sicherung von deine Mötzneinstöllungen.
-
-  6. Druck <STRG>d, aft däßst naach  :  mit ayner Faudung angfangt haast,  dyr-
-     mitst mügliche Vergöntzungen anzaigt kriegst.
-     Druck <TAB> für ain Vervollstöndigung yllain.
-
-
-
-
-
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-  Dös wär ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
-  und bündignen Überblik über s Blat  WIMM z lifern,  netty vil gnueg,  däß myn
-  für s Eerste  wirklich öbbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
-  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
-  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual   .
-
-  Zo n Weiterlösn und Weiterlernen wör dös Buech daader zo n Empfelhen:
-    Vim - Vi Improved - von n OUALLINE Steve
-    Verlaag: New Riders
-  Dös ist dös eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dös Grechte für
-  Anfönger. Es haat ayn Wösn Beispiler und aau Bilder drinn.
-  See http://iccf-holland.org/click5.html
-
-  Dös folgete Buech  ist schoon ölter und meerer  über n Urwimm  als wie über n
-  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
-  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
-  3897211262
-  In dönn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
-  De söxte Ausgaab enthaltt aau schoon öbbs über n Wimm.
-  Als ietzunde Bezugniss  für d Fassung  6.2  und ayn pfrenge Einfüerung  dient
-  dös folgete Buech:
-    vim ge-packt  von n WOBST Reinhard
-    mitp-Verlaag, Buechlaittzal 3-8266-1425-9
-  Trotz dyr recht pfrengen Darstöllung  ist s durch seine viln nützlichnen Bei-
-  spiler aau für Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
-  seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
-
-  Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
-  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo
-  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
-  zuer Verfüegung gstöllt haat. Gundpost: bware@mines.colorado.edu.
-  Für n Wimm haat n dyr MOOLENAAR Bram barechtt.
-  De bairische Übersötzung stammt von n HELL Sepp 2009. Sein Gundpostbrächt ist
-  sturmibund@t-online.de 
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-  
-
- 
-
-
-
diff -Naur vim73.orig/runtime/tutor/tutor.de vim73/runtime/tutor/tutor.de
--- vim73.orig/runtime/tutor/tutor.de	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.de	2013-08-04 19:09:09.913945954 +0000
@@ -374,7 +374,7 @@
 
   1. Bewege den Cursor zur ersten unten stehenden mit ---> markierten Zeile.
 
-  2. Tippe  dd  , um die Zeile zu lschen und sie in eimem Vim-Register zu
+  2. Tippe  dd  , um die Zeile zu lschen und sie in einem Vim-Register zu
      speichern.
 
   3. Bewege den Cursor zur Zeile c), BER derjenigen, wo die gelschte Zeile
diff -Naur vim73.orig/runtime/tutor/tutor.de.utf-8 vim73/runtime/tutor/tutor.de.utf-8
--- vim73.orig/runtime/tutor/tutor.de.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.de.utf-8	2013-08-04 19:09:09.913945954 +0000
@@ -374,7 +374,7 @@
 
   1. Bewege den Cursor zur ersten unten stehenden mit ---> markierten Zeile.
 
-  2. Tippe  dd  , um die Zeile zu löschen und sie in eimem Vim-Register zu
+  2. Tippe  dd  , um die Zeile zu löschen und sie in einem Vim-Register zu
      speichern.
 
   3. Bewege den Cursor zur Zeile c), ÜBER derjenigen, wo die gelöschte Zeile
diff -Naur vim73.orig/runtime/tutor/tutor.eo vim73/runtime/tutor/tutor.eo
--- vim73.orig/runtime/tutor/tutor.eo	2010-06-12 06:58:09.000000000 +0000
+++ vim73/runtime/tutor/tutor.eo	2013-08-04 19:09:09.920612601 +0000
@@ -1,5 +1,5 @@
 ==============================================================================
-=  B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.7.eo.3 =
+=  B o n v e n o n   al   la   I n s t r u i l o  de  V I M  -  Versio 1.7   =
 ==============================================================================
 
    Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili
@@ -108,7 +108,7 @@
      reimo. Ripetu la paojn 2 is 4 por korekti la frazon.
 
 ---> Mank en i linio.
----> Mankas tekston en i tiu linio.
+---> Mankas teksto en i tiu linio.
 
   5. Kiam vi sentas vin komforta pri enmeto de teksto, moviu al la
      leciono 1.5.
@@ -160,7 +160,7 @@
 
   4. Konservu la dosieron kun anoj kaj eliru el Vim per:  :wq  <Enenklavo>
 
-  5. Se vi eliris la instruilon vimtutor en pao 1, restartu la intruilon
+  5. Se vi eliris la instruilon vimtutor en pao 1, restartigu la intruilon
      vimtutor kaj moviu suben al la sekvanta resumo.
 
   6. Post kiam vi legis la suprajn paojn, kaj komprenis ilin: faru ilin.
@@ -640,12 +640,12 @@
   1. Tajpu  !dir  a  !ls  por akiri liston de via dosierujo.
      Vi jam scias, ke vi devas tajpi <Enenklavo> post tio.
 
-  2. Elektu dosieron, kiu ne jam ekzistas, kiel ekzemple TESTO.
+  2. Elektu dosieron, kiu ankora ne ekzistas, kiel ekzemple TESTO.
 
   3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
 
   4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
-     Por kontroli tion, tajpu   :!dir   a   !ls   denove por vidigi vian
+     Por kontroli tion, tajpu   :!dir   a   :!ls   denove por vidigi vian
      dosierujon.
 
 RIMARKO: Se vi volus eliri el Vim kaj restartigi in denove per  vim TESTO,
@@ -669,7 +669,7 @@
 
   3. Premu la  :  signon.  e la fino de la ekrano  :'<,'>  aperos.
 
-  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ne jam ekzistas.
+  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ankora ne ekzistas.
      Kontrolu, ke vi vidas  :'<,'>w TESTO  anta premi <Enenklavo>.
 
   5. Vim konservos la apartigitajn liniojn al la dosiero TESTO.  Uzu  :dir
@@ -984,8 +984,8 @@
 
   Modifita por Vim de Bram Moolenaar.
 
-  Tradukita en Esperanto de Dominique Pell, 2008-04-01
+  Esperantigita fare de Dominique Pell, 2008-04-01
   Retpoto: dominique.pelle@gmail.com
-  Lasta ano: 2010-05-23
+  Lasta ano: 2011-11-27
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.eo.utf-8 vim73/runtime/tutor/tutor.eo.utf-8
--- vim73.orig/runtime/tutor/tutor.eo.utf-8	2010-05-23 08:18:05.000000000 +0000
+++ vim73/runtime/tutor/tutor.eo.utf-8	2013-08-04 19:09:09.923945924 +0000
@@ -1,5 +1,5 @@
 ==============================================================================
-=  B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.7.eo.3 =
+=  B o n v e n o n   al   la   I n s t r u i l o  de  V I M  -  Versio 1.7   =
 ==============================================================================
 
    Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili
@@ -108,7 +108,7 @@
      reĝimo. Ripetu la paŝojn 2 ĝis 4 por korekti la frazon.
 
 ---> Mank en ĉi linio.
----> Mankas tekston en ĉi tiu linio.
+---> Mankas teksto en ĉi tiu linio.
 
   5. Kiam vi sentas vin komforta pri enmeto de teksto, moviĝu al la
      leciono 1.5.
@@ -160,7 +160,7 @@
 
   4. Konservu la dosieron kun ŝanĝoj kaj eliru el Vim per:  :wq  <Enenklavo>
 
-  5. Se vi eliris la instruilon vimtutor en paŝo 1, restartu la intruilon
+  5. Se vi eliris la instruilon vimtutor en paŝo 1, restartigu la intruilon
      vimtutor kaj moviĝu suben al la sekvanta resumo.
 
   6. Post kiam vi legis la suprajn paŝojn, kaj komprenis ilin: faru ilin.
@@ -640,12 +640,12 @@
   1. Tajpu  !dir  aŭ  !ls  por akiri liston de via dosierujo.
      Vi jam scias, ke vi devas tajpi <Enenklavo> post tio.
 
-  2. Elektu dosieron, kiu ne jam ekzistas, kiel ekzemple TESTO.
+  2. Elektu dosieron, kiu ankoraŭ ne ekzistas, kiel ekzemple TESTO.
 
   3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
 
   4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
-     Por kontroli tion, tajpu   :!dir   aŭ   !ls   denove por vidigi vian
+     Por kontroli tion, tajpu   :!dir   aŭ   :!ls   denove por vidigi vian
      dosierujon.
 
 RIMARKO: Se vi volus eliri el Vim kaj restartigi ĝin denove per  vim TESTO,
@@ -669,7 +669,7 @@
 
   3. Premu la  :  signon.  Ĉe la fino de la ekrano  :'<,'>  aperos.
 
-  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ne jam ekzistas.
+  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ankoraŭ ne ekzistas.
      Kontrolu, ke vi vidas  :'<,'>w TESTO  antaŭ premi <Enenklavo>.
 
   5. Vim konservos la apartigitajn liniojn al la dosiero TESTO.  Uzu  :dir
@@ -984,8 +984,8 @@
 
   Modifita por Vim de Bram Moolenaar.
 
-  Tradukita en Esperanto de Dominique Pellé, 2008-04-01
+  Esperantigita fare de Dominique Pellé, 2008-04-01
   Retpoŝto: dominique.pelle@gmail.com
-  Lasta ŝanĝo: 2010-05-23
+  Lasta ŝanĝo: 2011-11-27
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.fr vim73/runtime/tutor/tutor.fr
--- vim73.orig/runtime/tutor/tutor.fr	2010-05-23 08:17:46.000000000 +0000
+++ vim73/runtime/tutor/tutor.fr	2013-08-04 19:09:09.927279247 +0000
@@ -1,5 +1,5 @@
 ===============================================================================
-= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.7.fr.2 =
+=    B i e n v e n u e  dans  l e  T u t o r i e l  de  V I M  -  Version 1.7 =
 ===============================================================================
 
      Vim est un diteur trs puissant qui a trop de commandes pour pouvoir
@@ -67,7 +67,7 @@
   4. Si vous avez mmoris ces tapes et tes confiant, effectuez les tapes
      1  3 pour sortir puis rentrer dans l'diteur.
 
-NOTE :  :q! <Entre> annule tous les changements que vous avez fait. Dans
+NOTE :  :q! <Entre> annule tous les changements que vous avez faits. Dans
          quelques leons, vous apprendrez  enregistrer les changements.
 
   5. Dplacez le curseur  la Leon 1.3.
@@ -260,7 +260,7 @@
 
   Une courte liste de mouvements :
     w - jusqu'au dbut du prochain mot, en EXCLUANT son premier caractre.
-    e - jusqu' la fin du mot courant, en EXCLUANT son denier caractre.
+    e - jusqu' la fin du mot courant, en EXCLUANT son dernier caractre.
     $ - jusqu' la fin de la ligne, en INCLUANT son dernier caractre.
 
   Ainsi, taper  de  va effacer depuis le curseur jusqu' la fin du mot.
@@ -299,7 +299,7 @@
 
   Outre la combinaison de l'oprateur d'effacement avec un dplacement
   mentionn ci-dessus, vous pouvez insrer un nombre (quantificateur)
-  pour effacez encore plus :
+  pour effacer encore plus :
        d   nombre   dplacement
 
   1. Dplacez le curseur vers le premier mot en MAJUSCULES dans la ligne
@@ -451,7 +451,7 @@
   3. Tapez  ce  et corrigez le mot (dans notre cas, tapez  'igne'.)
 
   4. Appuyez <chap> et placez-vous sur le prochain caractre qui doit
-     tre chang).
+     tre chang.
 
   5. Rptez les tapes 3 et 4 jusqu' ce que la premire phrase soit
      identique  la seconde.
@@ -560,7 +560,7 @@
 ---> erreur ne s'crit pas "errreuur" ; errreuur est une erreur.
 
 NOTE : Quand la recherche atteint la fin du fichier, elle reprend au dbut
-       sauf si l'option 'wrapscan' est dactive.
+       sauf si l'option 'wrapscan' est dsactive.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -704,10 +704,10 @@
   3. Appuyez  :  . En bas de l'cran  :'<,'> va apparatre.
 
   4. Tapez   w TEST  , o TEST est un nom de fichier qui n'existe pas.
-     Vrifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur Entre.
+     Vrifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur <Entre>.
 
   5. Vim va enregistrer les lignes slectionnes dans le fichier TEST.
-     Utilisez  :!dir  ou  !ls pour le voir. Ne l'effacez pas encore !
+     Utilisez  :!dir  ou  :!ls pour le voir. Ne l'effacez pas encore !
      Nous allons l'utiliser dans la leon suivante.
 
 NOTE : L'appui de  v  dmarre la slection Visuelle. Vous pouvez dplacer le
@@ -725,7 +725,7 @@
   1. Placez le curseur juste au-dessus de cette ligne.
 
 NOTE :  Aprs avoir excut l'tape 2 vous verrez du texte de la Leon 5.3.
-        Puis dplacez vous vers le bas pour voir cette leon  nouveau.
+        Puis dplacez-vous vers le bas pour voir cette leon  nouveau.
 
   2. Maintenant rcuprez votre fichier TEST en utilisant la commande  :r TEST
      o TEST est le nom de votre fichier.
@@ -853,8 +853,8 @@
 
   5. Tapez  p  pour coller le texte. Puis tapez :  un second <chap> .
 
-  6. Utilisez le mode Visuel pour slectionner "lment", copiez le avec  y  ,
-     dplacez vous  la fin de la ligne suivant avec  j$  et collez le texte
+  6. Utilisez le mode Visuel pour slectionner "lment", copiez-le avec  y  ,
+     dplacez-vous  la fin de la ligne suivant avec  j$  et collez le texte
       cet endroit avec  p .
 
 --->  a) ceci est le premier lment.
@@ -1012,8 +1012,8 @@
   Ceci conclut le Tutoriel Vim. Le but tait de vous donner un bref aperu de
   l'diteur Vim, juste assez pour vous permettre d'utiliser l'diteur
   relativement facilement. Il est loin d'tre complet, vu que Vim a beaucoup
-  beaucoup plus de commandes. Un Manuel de l'utilisateur est disponible en
-  anglais :  :help user-manual .
+  plus de commandes. Un Manuel de l'utilisateur est disponible en anglais :
+    :help user-manual
 
   Pour continuer  dcouvrir et  apprendre Vim, il existe un livre traduit en
   franais. Il parle plus de Vi que de Vim, mais pourra vous tre utile.
@@ -1030,9 +1030,9 @@
   Universit d'tat du Colorado. E-mail : bware@mines.colorado.edu.
 
   Modifi pour Vim par Bram Moolenar.
-  Traduit en Franais par Adrien Beau, en avril 2001.
+  Traduit en franais par Adrien Beau, en avril 2001.
   Dernires mises  jour par Dominique Pell.
 
   E-mail :      dominique.pelle@gmail.com
-  Last Change : 2010 May 23
+  Last Change : 2013 May 10
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.fr.utf-8 vim73/runtime/tutor/tutor.fr.utf-8
--- vim73.orig/runtime/tutor/tutor.fr.utf-8	2010-07-25 15:43:50.000000000 +0000
+++ vim73/runtime/tutor/tutor.fr.utf-8	2013-08-04 19:09:09.930612571 +0000
@@ -1,5 +1,5 @@
 ===============================================================================
-= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.7.fr.2 =
+=    B i e n v e n u e  dans  l e  T u t o r i e l  de  V I M  -  Version 1.7 =
 ===============================================================================
 
      Vim est un éditeur très puissant qui a trop de commandes pour pouvoir
@@ -67,7 +67,7 @@
   4. Si vous avez mémorisé ces étapes et êtes confiant, effectuez les étapes
      1 à 3 pour sortir puis rentrer dans l'éditeur.
 
-NOTE :  :q! <Entrée> annule tous les changements que vous avez fait. Dans
+NOTE :  :q! <Entrée> annule tous les changements que vous avez faits. Dans
          quelques leçons, vous apprendrez à enregistrer les changements.
 
   5. Déplacez le curseur à la Leçon 1.3.
@@ -260,7 +260,7 @@
 
   Une courte liste de mouvements :
     w - jusqu'au début du prochain mot, en EXCLUANT son premier caractère.
-    e - jusqu'à la fin du mot courant, en EXCLUANT son denier caractère.
+    e - jusqu'à la fin du mot courant, en EXCLUANT son dernier caractère.
     $ - jusqu'à la fin de la ligne, en INCLUANT son dernier caractère.
 
   Ainsi, taper  de  va effacer depuis le curseur jusqu'à la fin du mot.
@@ -299,7 +299,7 @@
 
   Outre la combinaison de l'opérateur d'effacement avec un déplacement
   mentionné ci-dessus, vous pouvez insérer un nombre (quantificateur)
-  pour effacez encore plus :
+  pour effacer encore plus :
        d   nombre   déplacement
 
   1. Déplacez le curseur vers le premier mot en MAJUSCULES dans la ligne
@@ -451,7 +451,7 @@
   3. Tapez  ce  et corrigez le mot (dans notre cas, tapez  'igne'.)
 
   4. Appuyez <Échap> et placez-vous sur le prochain caractère qui doit
-     être changé).
+     être changé.
 
   5. Répétez les étapes 3 et 4 jusqu'à ce que la première phrase soit
      identique à la seconde.
@@ -560,7 +560,7 @@
 ---> erreur ne s'écrit pas "errreuur" ; errreuur est une erreur.
 
 NOTE : Quand la recherche atteint la fin du fichier, elle reprend au début
-       sauf si l'option 'wrapscan' est déactivée.
+       sauf si l'option 'wrapscan' est désactivée.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -704,10 +704,10 @@
   3. Appuyez  :  . En bas de l'écran  :'<,'> va apparaître.
 
   4. Tapez   w TEST  , où TEST est un nom de fichier qui n'existe pas.
-     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur Entrée.
+     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur <Entrée>.
 
   5. Vim va enregistrer les lignes sélectionnées dans le fichier TEST.
-     Utilisez  :!dir  ou  !ls pour le voir. Ne l'effacez pas encore !
+     Utilisez  :!dir  ou  :!ls pour le voir. Ne l'effacez pas encore !
      Nous allons l'utiliser dans la leçon suivante.
 
 NOTE : L'appui de  v  démarre la sélection Visuelle. Vous pouvez déplacer le
@@ -725,7 +725,7 @@
   1. Placez le curseur juste au-dessus de cette ligne.
 
 NOTE :  Après avoir exécuté l'étape 2 vous verrez du texte de la Leçon 5.3.
-        Puis déplacez vous vers le bas pour voir cette leçon à nouveau.
+        Puis déplacez-vous vers le bas pour voir cette leçon à nouveau.
 
   2. Maintenant récupérez votre fichier TEST en utilisant la commande  :r TEST
      où TEST est le nom de votre fichier.
@@ -853,8 +853,8 @@
 
   5. Tapez  p  pour coller le texte. Puis tapez :  un second <Échap> .
 
-  6. Utilisez le mode Visuel pour sélectionner "élément", copiez le avec  y  ,
-     déplacez vous à la fin de la ligne suivant avec  j$  et collez le texte
+  6. Utilisez le mode Visuel pour sélectionner "élément", copiez-le avec  y  ,
+     déplacez-vous à la fin de la ligne suivant avec  j$  et collez le texte
      à cet endroit avec  p .
 
 --->  a) ceci est le premier élément.
@@ -1012,8 +1012,8 @@
   Ceci conclut le Tutoriel Vim. Le but était de vous donner un bref aperçu de
   l'éditeur Vim, juste assez pour vous permettre d'utiliser l'éditeur
   relativement facilement. Il est loin d'être complet, vu que Vim a beaucoup
-  beaucoup plus de commandes. Un Manuel de l'utilisateur est disponible en
-  anglais :  :help user-manual .
+  plus de commandes. Un Manuel de l'utilisateur est disponible en anglais :
+    :help user-manual
 
   Pour continuer à découvrir et à apprendre Vim, il existe un livre traduit en
   français. Il parle plus de Vi que de Vim, mais pourra vous être utile.
@@ -1030,9 +1030,9 @@
   Université d'État du Colorado. E-mail : bware@mines.colorado.edu.
 
   Modifié pour Vim par Bram Moolenar.
-  Traduit en Français par Adrien Beau, en avril 2001.
+  Traduit en français par Adrien Beau, en avril 2001.
   Dernières mises à jour par Dominique Pellé.
 
   E-mail :      dominique.pelle@gmail.com
-  Last Change : 2010 May 23
+  Last Change : 2013 May 10
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.hr vim73/runtime/tutor/tutor.hr
--- vim73.orig/runtime/tutor/tutor.hr	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.hr	2013-08-04 19:09:09.930612571 +0000
@@ -659,7 +659,7 @@
      Provjerite da zaista pie  :'<,'>w TEST
      prije nego to pritisnite <ENTER>.
 
-  5. Vim e spremiti oznaeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
+  5. Vim e spremiti oznaeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
      Nemojte je jo brisati!  Koristiti e te je u sljedeoj lekciji.
 
 NAPOMENA:  Tipka  v  zapoinje Vizualno oznaavanje.  Moete pomicati kursor
diff -Naur vim73.orig/runtime/tutor/tutor.hr.cp1250 vim73/runtime/tutor/tutor.hr.cp1250
--- vim73.orig/runtime/tutor/tutor.hr.cp1250	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.hr.cp1250	2013-08-04 19:09:09.933945894 +0000
@@ -659,7 +659,7 @@
      Provjerite da zaista pie  :'<,'>w TEST
      prije nego to pritisnite <ENTER>.
 
-  5. Vim e spremiti oznaeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
+  5. Vim e spremiti oznaeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
      Nemojte je jo brisati!  Koristiti e te je u sljedeoj lekciji.
 
 NAPOMENA:  Tipka  v  zapoinje Vizualno oznaavanje.  Moete pomicati kursor
diff -Naur vim73.orig/runtime/tutor/tutor.hr.utf-8 vim73/runtime/tutor/tutor.hr.utf-8
--- vim73.orig/runtime/tutor/tutor.hr.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.hr.utf-8	2013-08-04 19:09:09.933945894 +0000
@@ -659,7 +659,7 @@
      Provjerite da zaista piše  :'<,'>w TEST
      prije nego što pritisnite <ENTER>.
 
-  5. Vim će spremiti označeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
+  5. Vim će spremiti označeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
      Nemojte je još brisati!  Koristiti će te je u sljedećoj lekciji.
 
 NAPOMENA:  Tipka  v  započinje Vizualno označavanje.  Možete pomicati kursor
diff -Naur vim73.orig/runtime/tutor/tutor.hu vim73/runtime/tutor/tutor.hu
--- vim73.orig/runtime/tutor/tutor.hu	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.hu	2013-08-04 19:09:09.937279217 +0000
@@ -2,16 +2,16 @@
 ==  d v  z  l j  k   a   V I M - o k t a t  b a n  -    1.5-s  verzi  ==
 ===============================================================================
 
-     A Vim egy nagyon hatkony szerkeszt, amelnyek rengeteg utastsa
+     A Vim egy nagyon hatkony szerkeszt, amelynek rengeteg utastsa
      van, tl sok, hogy egy ilyen oktatban (tutorban), mint az itteni
      mindet elmagyarzzuk. Ez az oktat arra trekszik, hogy annyit
      elmagyarzzon, amennyi elg, hogy knnyedn hasznljuk a Vim-et, az
      ltalnos cl szvegszerkesztt.
 
      A feladatok megoldshoz 25-30 perc szksges attl fggen,
-     mennyit tltnk a kisrletezssel.
+     mennyit tltnk a ksrletezssel.
 
-     A leckben szerepl utastsok mdostani fogjk a szvegek.
+     A leckben szerepl utastsok mdostani fogjk a szveget.
      Ksztsen msolatot errl a fjlrl, ha gyakorolni akar.
      (Ha "vimtutor"-ral indtotta, akkor ez mr egy msolat.)
 
@@ -81,7 +81,7 @@
   2. A hibk kijavtshoz mozgassa a kurzort amg a trlend karakter
      fl nem r.
 
-  3. Nyomja meg az  x  gombot, hogy trlje a nemkvnt karaktert.
+  3. Nyomja meg az  x  gombot, hogy trlje a nem kvnt karaktert.
 
   4. Ismtelje a 2, 3, 4-es lpseket, hogy kijavtsa a mondatot.
 
@@ -172,7 +172,7 @@
 
   3. Mozgassa a kurzort a helyes sor vgre (az els . UTN)!
 
-  4. d$  begpelsveltrlje a sor vgt!
+  4. d$  begpelsvel trlje a sor vgt!
 
 ---> Valaki a sor vgt ktszer gpelte be. ktszer gpelte be.
 
@@ -184,30 +184,30 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     2.3.  lecke: UTASTSOKRL S OBJEKTUMOKRL
+		     2.3.  lecke: UTASTSOKRL S MOZGSOKRL
 
 
   A  d  (delete=trls) utasts formja a kvetkez:
 
-	 [szm]   d	objektum	   VAGY	     d	 [szm] objektum
+	 [szm]   d	mozgs	   VAGY	     d	 [szm] mozgs
   Ahol:
     szm - hnyszor hajtdjon vgre a parancs (elhagyhat, alaprtk=1).
     d - a trls (delete) utasts.
-    objektum - amin a parancsnak teljeslnie kell (albb listzva).
+    mozgs - amin a parancsnak teljeslnie kell (albb listzva).
 
-  Objektumok rvid listja:
+  Mozgsok rvid listja:
     w - a kurzortl a sz vgig, belertve a szkzt.
     e - a kurzortl a sz vgig, NEM belertve a szkzt.
     $ - a kurzortl a sor vgig.
 
-MEGJ:  Vllalkozbbak kedvrt, csupn az objektum begpelsvel parancs nlkl
-       a kurzor oda kerl, amit az objektumlista megad.
+MEGJ:  Csupn a mozgs begpelsvel (parancs nlkl)
+       a kurzor mozgs ltal megadott helyre kerl.
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		2.4.  lecke: EGY KIVTEL A  'PARANCSOBJEKTUM' ALL
+		2.4.  lecke: EGSZ SOROK FELDOLGOZSA
 
 
 	       ** dd bersval trlheti az egsz sort. **
@@ -217,8 +217,8 @@
 
   1. Mozgassa a kurzort az albbi kifejezsek msodik sorra!
   2. dd begpelsvel trlje a sort!
-  3. Menjen a 4. (eredetileg 5.) sorra!
-  4. 2dd   (ugyebr szm-utasts-objektum) begpelsvel trljn kt sort!
+  3. Menjen a 3. (eredetileg 4.) sorra!
+  4. 2dd   (ugyebr szm-utasts-mozgs) begpelsvel trljn kt sort!
 
       1)  Alv szegek a jghideg homokban,
       2)  - kezdi a klt -
@@ -238,9 +238,9 @@
   1. Menjnk az albbi ---> kezdet sor els hibjra!
   2. x  lenyomsval trlje az els felesleges karaktert!
   3. u megnyomsval vonja vissza az utolsnak vgrehajtott utastst!
-  4. Msodjra javtson ki minden hibt a sorben az x utastssal!
+  4. Msodjra javtson ki minden hibt a sorban az x utastssal!
   5. Most nagy  U  -val lltsa vissza a sor eredeti llapott!
-  6. Nyomja meg az u gombot prszor, hogy az U s sz elz utastsokat
+  6. Nyomja meg az u gombot prszor, hogy az U s az azt megelz utastsokat
      visszalltsa!
   7. CTRL-R (CTRL gomb lenyomsa mellett ssn R-t) prszor csinlja jra a
      visszavont parancsokat (redo)!
@@ -263,11 +263,11 @@
 
   4. Egy utasts alakja norml mdban:
 
-       [szm]   utasts   objektum   VAGY   utasts	[szm] objektum
+       [szm]   utasts   mozgs   VAGY   utasts	[szm] mozgs
      ahol:
        szm - hnyszor ismteljk a parancsot
        utasts - mit tegynk, pl. d  a trlskor
-       objektum - mire hasson az utasts, pldul w (sz=word),
+       mozgs - mire hasson az utasts, pldul w (sz=word),
 		$ (a sor vgig), stb.
 
   5. Az elz tett visszavonsa (undo):	     u	 (kis u)
@@ -278,11 +278,11 @@
 		3.1.  lecke: A BEILLESZTS (PUT) PARANCS
 
 
-  ** p  letsvel az utolsnak trltet a kurzor utn illeszhetjk. **
+  ** p  letsvel az utolsnak trltet a kurzor utn illeszthetjk. **
 
   1. Mozgassuk a kurzort az albbi sorok els sorra.
 
-  2. dd letsvel trljk a sort s eltroldik a Vim pufferben.
+  2. dd letsvel trljk a sort s eltroldik a Vim pufferben.
 
   3. Mozgassuk a kurzort azeltt a  sor ELTTI sorba, ahov mozgatni
      szeretnnk a trlt sort.
@@ -350,13 +350,13 @@
 		       3.4.  lecke: TBBFLE VLTOZTATS c-VEL
 
 
- ** A c utasts hasznlhat ugyanazokkal az objektumokkal mint a trls **
+ ** A c utasts hasznlhat ugyanazokkal az mozgsokkal mint a trls **
 
   1. A change utasts a trlssel azonosan viselkedik.  A forma:
 
-       [szm]   c   objektum	   OR	    c	[szm]   objektum
+       [szm]   c   mozgs	   OR	    c	[szm]   mozgs
 
-  2. Az objektumok is azonosak, pl.   w (sz), $ (sorvg), stb.
+  2. A mozgsok is azonosak, pl.   w (sz), $ (sorvg), stb.
 
   3. Mozgassuk a kurzort az els ---> kezdet sorra!
 
@@ -374,18 +374,18 @@
 
 
   1. A mr trlt sort beillesztshez nyomjunk p-t. Ez a trlt szveget
-     a kurzor UTN helyezi (ha sor kerlt trlsre, a kurzor allatti sorba).
+     a kurzor UTN helyezi (ha sor kerlt trlsre, a kurzor alatti sorba).
 
   2. A kurzor alatti karakter trshoz az r-et s azt a karaktert
      nyomjuk, amellyel az eredetit fell szeretnnk rni.
 
-  3. A vltoztats (c) utasts a karaktertl az objektum vgig
-     vltoztatja meg az objektumot. Pldul a cw a kurzortl a sz vgig,
+  3. A vltoztats (c) utasts a karaktertl az mozgs vgig
+     vltoztatja meg az mozgst. Pldul a cw a kurzortl a sz vgig,
      a c$ a sor vgig.
 
   4. A vltoztats formtuma:
 
-	 [szm]   c	objektum	VAGY	c   [szm]   objektum
+	 [szm]   c	mozgs	VAGY	c   [szm]   mozgs
 
 Ugorjunk a kvetkez leckre!
 
@@ -428,7 +428,7 @@
   3. A kifejezs jabb keresshez ssk le egyszeren:  n .
      A kifejezs ellenkez irnyban trtn keresshez ezt ssk be: Shift-N .
 
-  4. Ha visszafel szeretne keresni, akkor ? kell a ! helyett.
+  4. Ha visszafel szeretne keresni, akkor ? kell a / helyett.
 
 ---> "hiibaa" nem a helyes mdja a hiba lersnak; a hiibaa egy hiba.
 
@@ -462,7 +462,7 @@
 		  4.4.  lecke: A HIBK KIJAVTSNAK EGY MDJA
 
 
-    ** :s/j/rgi/g begpelsvel az 'j'-ra cserljk a 'rgi'-t. **
+    ** :s/rgi/j/g begpelsvel az 'j'-ra cserljk a 'rgi'-t. **
 
   1. Menjnk a ---> kezdet sorra!
 
@@ -579,7 +579,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   5.4.  lecke: RETRIEVING AND MERGING FILES
+		   5.4.  lecke: FJLOK VISSZALLTSA S SSZEFZSE
 
 
        ** Egy fjl tartalmnak beillesztshez rja   :r FJLNV **
@@ -592,11 +592,11 @@
        keresse meg ismt ezt a leckt.
 
   3. Most szrja be a TESZT nev fjlt a   :r TESZT   paranccsal, ahol
-     TESZT az n fjljnak a neve.
+     TESZT az n fjljnak a neve.
 
 MEGJ:  A fjl, amit beillesztett a kurzora alatt helyezkedik el.
 
-  4. Hogy ellenrizzk, hogy a fjlt tnyleg beillsztettk, menjen
+  4. Hogy ellenrizzk, hogy a fjlt tnyleg beillesztettk, menjen
      vissza, s nzze meg, hogy ktszer szerepel az 5.3. lecke! Az eredeti
      mellett a fjlbl bemsolt is ott van.
 
@@ -616,11 +616,11 @@
   2.  :w FJLNV  kirja a jelenlegi Vim-fjlt a lemezre FJNV nven.
 
   3.  :#,#w FJLNV  kirja a kt sorszm (#) kztti sorokat FJLNV-be
-      Msik lehetsg, hogy a kezdsornl Ctrl-v-t nyom lemegy az utols
+      Msik lehetsg, hogy a kezdsornl Shift-v-t nyom lemegy az utols
       sorra, majd ezt ti be  :w FJLNV
 
   4.  :r FJLNV  beolvassa a FJLNV fjlt s behelyezi a jelenlegi fjlba
-      a kurzorpozici utni sorba.
+      a kurzorpozci utni sorba.
 
 
 
@@ -629,7 +629,7 @@
 		   6.1.  lecke: A MEGNYITS (OPEN) PARANCS
 
 
-** o  bersval nyithat egy j sort a kurzor alatt s vlthat beszr mdba **
+** o  bersval nyit egy j sort a kurzor alatt s beszr mdba vlt **
 
   1. Mozgassuk a kurzort a ---> kezdet sorra.
 
@@ -641,7 +641,7 @@
 
 ---> Az o lenyomsa utn a kurzor a kvetkez sor elejn ll beszr mdban.
 
-  4. A kurzor FELETTI for megnyitshoz egyzseren a nagy O bett rjon
+  4. A kurzor FELETTI sor megnyitshoz egyszeren nagy O bett rjon
 kicsi helyett. Prblja ki a kvetkez soron!
 Nyisson egy j sort efelett Shift-O megnyomsval, mialatt a kurzor
 ezen a soron ll.
@@ -654,16 +654,16 @@
 			6.2.  lecke: AZ APPEND PARANCS
 
 
-	 ** a  lenyomsval a kuror UTN szrhatunk szveget. **
+	 ** a  lenyomsval a kurzor UTN szrhatunk szveget. **
 
   1. Mozgassuk a kurzort a kvetkez ---> kezdet sor vgre gy,
-     hogy norml mdban  $  r be.
+     hogy  norml  mdban  $-t  r be.
 
-  2. a  (kicsi) letsvel szveget szrhat be AMG a karakter mg,
+  2. Kis "a" letsvel szveget szrhat be AMG a karakter mg,
      amelyen a kurzor ll.
-     (A nagy  A  az egsz sor vgre rja a szveget.)
+     (A nagy "A" az egsz sor vgre rja a szveget.)
 
-Megj: A Vimben a sor legvgre is lehet llni, azonba ez eldjben
+Megj: A Vimben a sor legvgre is lehet llni, azonban ez eldjben
       a Vi-ban nem lehetsges, ezrt abban az a nlkl elg krlmnyes
       a sor vghez szveget rni.
 
@@ -687,13 +687,13 @@
   2. Helyezze a kurzort az els sz elejre amely eltr a msodik
      ---> kezdet sor tartalmtl (a 'az utolsval' rsztl).
 
-  3. Nyomjon R karaktert s rja t a szveg maradkt az els sorban
+  3. Nyomjon R karaktert s rja t a szveg maradkt az els sorban
      gy, hogy a  kt sor egyez legyen.
 
 ---> Az els sort tegye azonoss az utolsval: hasznlja a gombokat.
 ---> Az els sort tegye azonoss a msodikkal: rjon R-t s az j szveget.
 
-  4. Jegyezzk meg, ha <ESC>-et nyomok, akkor a vltozatlanuk hagyott
+  4. Jegyezzk meg, ha <ESC>-et nyomok, akkor a vltozatlanul hagyott
      szvegek vltozatlanok maradnak.
 
 
@@ -826,5 +826,5 @@
 
   A Vimhez idomtotta Bram Moolenaar.
 
-  Magyartotta: Horvth rpd <horvath.arpad@roik.bmf.hu>, 2006-2008
+  Magyartotta: Horvth rpd <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
 
diff -Naur vim73.orig/runtime/tutor/tutor.hu.cp1250 vim73/runtime/tutor/tutor.hu.cp1250
--- vim73.orig/runtime/tutor/tutor.hu.cp1250	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.hu.cp1250	2013-08-04 19:09:09.937279217 +0000
@@ -2,16 +2,16 @@
 ==  d v  z  l j  k   a   V I M - o k t a t  b a n  -    1.5-s  verzi  ==
 ===============================================================================
 
-     A Vim egy nagyon hatkony szerkeszt, amelnyek rengeteg utastsa
+     A Vim egy nagyon hatkony szerkeszt, amelynek rengeteg utastsa
      van, tl sok, hogy egy ilyen oktatban (tutorban), mint az itteni
      mindet elmagyarzzuk. Ez az oktat arra trekszik, hogy annyit
      elmagyarzzon, amennyi elg, hogy knnyedn hasznljuk a Vim-et, az
      ltalnos cl szvegszerkesztt.
 
      A feladatok megoldshoz 25-30 perc szksges attl fggen,
-     mennyit tltnk a kisrletezssel.
+     mennyit tltnk a ksrletezssel.
 
-     A leckben szerepl utastsok mdostani fogjk a szvegek.
+     A leckben szerepl utastsok mdostani fogjk a szveget.
      Ksztsen msolatot errl a fjlrl, ha gyakorolni akar.
      (Ha "vimtutor"-ral indtotta, akkor ez mr egy msolat.)
 
@@ -81,7 +81,7 @@
   2. A hibk kijavtshoz mozgassa a kurzort amg a trlend karakter
      fl nem r.
 
-  3. Nyomja meg az  x  gombot, hogy trlje a nemkvnt karaktert.
+  3. Nyomja meg az  x  gombot, hogy trlje a nem kvnt karaktert.
 
   4. Ismtelje a 2, 3, 4-es lpseket, hogy kijavtsa a mondatot.
 
@@ -172,7 +172,7 @@
 
   3. Mozgassa a kurzort a helyes sor vgre (az els . UTN)!
 
-  4. d$  begpelsveltrlje a sor vgt!
+  4. d$  begpelsvel trlje a sor vgt!
 
 ---> Valaki a sor vgt ktszer gpelte be. ktszer gpelte be.
 
@@ -184,30 +184,30 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     2.3.  lecke: UTASTSOKRL S OBJEKTUMOKRL
+		     2.3.  lecke: UTASTSOKRL S MOZGSOKRL
 
 
   A  d  (delete=trls) utasts formja a kvetkez:
 
-	 [szm]   d	objektum	   VAGY	     d	 [szm] objektum
+	 [szm]   d	mozgs	   VAGY	     d	 [szm] mozgs
   Ahol:
     szm - hnyszor hajtdjon vgre a parancs (elhagyhat, alaprtk=1).
     d - a trls (delete) utasts.
-    objektum - amin a parancsnak teljeslnie kell (albb listzva).
+    mozgs - amin a parancsnak teljeslnie kell (albb listzva).
 
-  Objektumok rvid listja:
+  Mozgsok rvid listja:
     w - a kurzortl a sz vgig, belertve a szkzt.
     e - a kurzortl a sz vgig, NEM belertve a szkzt.
     $ - a kurzortl a sor vgig.
 
-MEGJ:  Vllalkozbbak kedvrt, csupn az objektum begpelsvel parancs nlkl
-       a kurzor oda kerl, amit az objektumlista megad.
+MEGJ:  Csupn a mozgs begpelsvel (parancs nlkl)
+       a kurzor mozgs ltal megadott helyre kerl.
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		2.4.  lecke: EGY KIVTEL A  'PARANCSOBJEKTUM' ALL
+		2.4.  lecke: EGSZ SOROK FELDOLGOZSA
 
 
 	       ** dd bersval trlheti az egsz sort. **
@@ -217,8 +217,8 @@
 
   1. Mozgassa a kurzort az albbi kifejezsek msodik sorra!
   2. dd begpelsvel trlje a sort!
-  3. Menjen a 4. (eredetileg 5.) sorra!
-  4. 2dd   (ugyebr szm-utasts-objektum) begpelsvel trljn kt sort!
+  3. Menjen a 3. (eredetileg 4.) sorra!
+  4. 2dd   (ugyebr szm-utasts-mozgs) begpelsvel trljn kt sort!
 
       1)  Alv szegek a jghideg homokban,
       2)  - kezdi a klt -
@@ -238,9 +238,9 @@
   1. Menjnk az albbi ---> kezdet sor els hibjra!
   2. x  lenyomsval trlje az els felesleges karaktert!
   3. u megnyomsval vonja vissza az utolsnak vgrehajtott utastst!
-  4. Msodjra javtson ki minden hibt a sorben az x utastssal!
+  4. Msodjra javtson ki minden hibt a sorban az x utastssal!
   5. Most nagy  U  -val lltsa vissza a sor eredeti llapott!
-  6. Nyomja meg az u gombot prszor, hogy az U s sz elz utastsokat
+  6. Nyomja meg az u gombot prszor, hogy az U s az azt megelz utastsokat
      visszalltsa!
   7. CTRL-R (CTRL gomb lenyomsa mellett ssn R-t) prszor csinlja jra a
      visszavont parancsokat (redo)!
@@ -263,11 +263,11 @@
 
   4. Egy utasts alakja norml mdban:
 
-       [szm]   utasts   objektum   VAGY   utasts	[szm] objektum
+       [szm]   utasts   mozgs   VAGY   utasts	[szm] mozgs
      ahol:
        szm - hnyszor ismteljk a parancsot
        utasts - mit tegynk, pl. d  a trlskor
-       objektum - mire hasson az utasts, pldul w (sz=word),
+       mozgs - mire hasson az utasts, pldul w (sz=word),
 		$ (a sor vgig), stb.
 
   5. Az elz tett visszavonsa (undo):	     u	 (kis u)
@@ -278,11 +278,11 @@
 		3.1.  lecke: A BEILLESZTS (PUT) PARANCS
 
 
-  ** p  letsvel az utolsnak trltet a kurzor utn illeszhetjk. **
+  ** p  letsvel az utolsnak trltet a kurzor utn illeszthetjk. **
 
   1. Mozgassuk a kurzort az albbi sorok els sorra.
 
-  2. dd letsvel trljk a sort s eltroldik a Vim pufferben.
+  2. dd letsvel trljk a sort s eltroldik a Vim pufferben.
 
   3. Mozgassuk a kurzort azeltt a  sor ELTTI sorba, ahov mozgatni
      szeretnnk a trlt sort.
@@ -350,13 +350,13 @@
 		       3.4.  lecke: TBBFLE VLTOZTATS c-VEL
 
 
- ** A c utasts hasznlhat ugyanazokkal az objektumokkal mint a trls **
+ ** A c utasts hasznlhat ugyanazokkal az mozgsokkal mint a trls **
 
   1. A change utasts a trlssel azonosan viselkedik.  A forma:
 
-       [szm]   c   objektum	   OR	    c	[szm]   objektum
+       [szm]   c   mozgs	   OR	    c	[szm]   mozgs
 
-  2. Az objektumok is azonosak, pl.   w (sz), $ (sorvg), stb.
+  2. A mozgsok is azonosak, pl.   w (sz), $ (sorvg), stb.
 
   3. Mozgassuk a kurzort az els ---> kezdet sorra!
 
@@ -374,18 +374,18 @@
 
 
   1. A mr trlt sort beillesztshez nyomjunk p-t. Ez a trlt szveget
-     a kurzor UTN helyezi (ha sor kerlt trlsre, a kurzor allatti sorba).
+     a kurzor UTN helyezi (ha sor kerlt trlsre, a kurzor alatti sorba).
 
   2. A kurzor alatti karakter trshoz az r-et s azt a karaktert
      nyomjuk, amellyel az eredetit fell szeretnnk rni.
 
-  3. A vltoztats (c) utasts a karaktertl az objektum vgig
-     vltoztatja meg az objektumot. Pldul a cw a kurzortl a sz vgig,
+  3. A vltoztats (c) utasts a karaktertl az mozgs vgig
+     vltoztatja meg az mozgst. Pldul a cw a kurzortl a sz vgig,
      a c$ a sor vgig.
 
   4. A vltoztats formtuma:
 
-	 [szm]   c	objektum	VAGY	c   [szm]   objektum
+	 [szm]   c	mozgs	VAGY	c   [szm]   mozgs
 
 Ugorjunk a kvetkez leckre!
 
@@ -428,7 +428,7 @@
   3. A kifejezs jabb keresshez ssk le egyszeren:  n .
      A kifejezs ellenkez irnyban trtn keresshez ezt ssk be: Shift-N .
 
-  4. Ha visszafel szeretne keresni, akkor ? kell a ! helyett.
+  4. Ha visszafel szeretne keresni, akkor ? kell a / helyett.
 
 ---> "hiibaa" nem a helyes mdja a hiba lersnak; a hiibaa egy hiba.
 
@@ -462,7 +462,7 @@
 		  4.4.  lecke: A HIBK KIJAVTSNAK EGY MDJA
 
 
-    ** :s/j/rgi/g begpelsvel az 'j'-ra cserljk a 'rgi'-t. **
+    ** :s/rgi/j/g begpelsvel az 'j'-ra cserljk a 'rgi'-t. **
 
   1. Menjnk a ---> kezdet sorra!
 
@@ -579,7 +579,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   5.4.  lecke: RETRIEVING AND MERGING FILES
+		   5.4.  lecke: FJLOK VISSZALLTSA S SSZEFZSE
 
 
        ** Egy fjl tartalmnak beillesztshez rja   :r FJLNV **
@@ -592,11 +592,11 @@
        keresse meg ismt ezt a leckt.
 
   3. Most szrja be a TESZT nev fjlt a   :r TESZT   paranccsal, ahol
-     TESZT az n fjljnak a neve.
+     TESZT az n fjljnak a neve.
 
 MEGJ:  A fjl, amit beillesztett a kurzora alatt helyezkedik el.
 
-  4. Hogy ellenrizzk, hogy a fjlt tnyleg beillsztettk, menjen
+  4. Hogy ellenrizzk, hogy a fjlt tnyleg beillesztettk, menjen
      vissza, s nzze meg, hogy ktszer szerepel az 5.3. lecke! Az eredeti
      mellett a fjlbl bemsolt is ott van.
 
@@ -616,11 +616,11 @@
   2.  :w FJLNV  kirja a jelenlegi Vim-fjlt a lemezre FJNV nven.
 
   3.  :#,#w FJLNV  kirja a kt sorszm (#) kztti sorokat FJLNV-be
-      Msik lehetsg, hogy a kezdsornl Ctrl-v-t nyom lemegy az utols
+      Msik lehetsg, hogy a kezdsornl Shift-v-t nyom lemegy az utols
       sorra, majd ezt ti be  :w FJLNV
 
   4.  :r FJLNV  beolvassa a FJLNV fjlt s behelyezi a jelenlegi fjlba
-      a kurzorpozici utni sorba.
+      a kurzorpozci utni sorba.
 
 
 
@@ -629,7 +629,7 @@
 		   6.1.  lecke: A MEGNYITS (OPEN) PARANCS
 
 
-** o  bersval nyithat egy j sort a kurzor alatt s vlthat beszr mdba **
+** o  bersval nyit egy j sort a kurzor alatt s beszr mdba vlt **
 
   1. Mozgassuk a kurzort a ---> kezdet sorra.
 
@@ -641,7 +641,7 @@
 
 ---> Az o lenyomsa utn a kurzor a kvetkez sor elejn ll beszr mdban.
 
-  4. A kurzor FELETTI for megnyitshoz egyzseren a nagy O bett rjon
+  4. A kurzor FELETTI sor megnyitshoz egyszeren nagy O bett rjon
 kicsi helyett. Prblja ki a kvetkez soron!
 Nyisson egy j sort efelett Shift-O megnyomsval, mialatt a kurzor
 ezen a soron ll.
@@ -654,16 +654,16 @@
 			6.2.  lecke: AZ APPEND PARANCS
 
 
-	 ** a  lenyomsval a kuror UTN szrhatunk szveget. **
+	 ** a  lenyomsval a kurzor UTN szrhatunk szveget. **
 
   1. Mozgassuk a kurzort a kvetkez ---> kezdet sor vgre gy,
-     hogy norml mdban  $  r be.
+     hogy  norml  mdban  $-t  r be.
 
-  2. a  (kicsi) letsvel szveget szrhat be AMG a karakter mg,
+  2. Kis "a" letsvel szveget szrhat be AMG a karakter mg,
      amelyen a kurzor ll.
-     (A nagy  A  az egsz sor vgre rja a szveget.)
+     (A nagy "A" az egsz sor vgre rja a szveget.)
 
-Megj: A Vimben a sor legvgre is lehet llni, azonba ez eldjben
+Megj: A Vimben a sor legvgre is lehet llni, azonban ez eldjben
       a Vi-ban nem lehetsges, ezrt abban az a nlkl elg krlmnyes
       a sor vghez szveget rni.
 
@@ -687,13 +687,13 @@
   2. Helyezze a kurzort az els sz elejre amely eltr a msodik
      ---> kezdet sor tartalmtl (a 'az utolsval' rsztl).
 
-  3. Nyomjon R karaktert s rja t a szveg maradkt az els sorban
+  3. Nyomjon R karaktert s rja t a szveg maradkt az els sorban
      gy, hogy a  kt sor egyez legyen.
 
 ---> Az els sort tegye azonoss az utolsval: hasznlja a gombokat.
 ---> Az els sort tegye azonoss a msodikkal: rjon R-t s az j szveget.
 
-  4. Jegyezzk meg, ha <ESC>-et nyomok, akkor a vltozatlanuk hagyott
+  4. Jegyezzk meg, ha <ESC>-et nyomok, akkor a vltozatlanul hagyott
      szvegek vltozatlanok maradnak.
 
 
@@ -826,5 +826,5 @@
 
   A Vimhez idomtotta Bram Moolenaar.
 
-  Magyartotta: Horvth rpd <horvath.arpad@roik.bmf.hu>, 2006-2008
+  Magyartotta: Horvth rpd <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
 
diff -Naur vim73.orig/runtime/tutor/tutor.hu.utf-8 vim73/runtime/tutor/tutor.hu.utf-8
--- vim73.orig/runtime/tutor/tutor.hu.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.hu.utf-8	2013-08-04 19:09:09.940612540 +0000
@@ -2,16 +2,16 @@
 == Ü d v ö z ö l j ü k   a   V I M - o k t a t ó b a n  -    1.5-ös  verzió  ==
 ===============================================================================
 
-     A Vim egy nagyon hatékony szerkesztő, amelnyek rengeteg utasítása
+     A Vim egy nagyon hatékony szerkesztő, amelynek rengeteg utasítása
      van, túl sok, hogy egy ilyen oktatóban (tutorban), mint az itteni
      mindet elmagyarázzuk. Ez az oktató arra törekszik, hogy annyit
      elmagyarázzon, amennyi elég, hogy könnyedén használjuk a Vim-et, az
      általános célú szövegszerkesztőt.
 
      A feladatok megoldásához 25-30 perc szükséges attól függően,
-     mennyit töltünk a kisérletezéssel.
+     mennyit töltünk a kísérletezéssel.
 
-     A leckében szereplő utasítások módosítani fogják a szövegek.
+     A leckében szereplő utasítások módosítani fogják a szöveget.
      Készítsen másolatot erről a fájlról, ha gyakorolni akar.
      (Ha "vimtutor"-ral indította, akkor ez már egy másolat.)
 
@@ -81,7 +81,7 @@
   2. A hibák kijavításához mozgassa a kurzort amíg a törlendő karakter
      fölé nem ér.
 
-  3. Nyomja meg az  x  gombot, hogy törölje a nemkívánt karaktert.
+  3. Nyomja meg az  x  gombot, hogy törölje a nem kívánt karaktert.
 
   4. Ismételje a 2, 3, 4-es lépéseket, hogy kijavítsa a mondatot.
 
@@ -172,7 +172,7 @@
 
   3. Mozgassa a kurzort a helyes sor végére (az első . UTÁN)!
 
-  4. d$  begépeléséveltörölje a sor végét!
+  4. d$  begépelésével törölje a sor végét!
 
 ---> Valaki a sor végét kétszer gépelte be. kétszer gépelte be.
 
@@ -184,30 +184,30 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     2.3.  lecke: UTASÍTÁSOKRÓL ÉS OBJEKTUMOKRÓL
+		     2.3.  lecke: UTASÍTÁSOKRÓL ÉS MOZGÁSOKRÓL
 
 
   A  d  (delete=törlés) utasítás formája a következő:
 
-	 [szám]   d	objektum	   VAGY	     d	 [szám] objektum
+	 [szám]   d	mozgás	   VAGY	     d	 [szám] mozgás
   Ahol:
     szám - hányszor hajtódjon végre a parancs (elhagyható, alapérték=1).
     d - a törlés (delete) utasítás.
-    objektum - amin a parancsnak teljesülnie kell (alább listázva).
+    mozgás - amin a parancsnak teljesülnie kell (alább listázva).
 
-  Objektumok rövid listája:
+  Mozgások rövid listája:
     w - a kurzortól a szó végéig, beleértve a szóközt.
     e - a kurzortól a szó végéig, NEM beleértve a szóközt.
     $ - a kurzortól a sor végéig.
 
-MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs nélkül
-       a kurzor oda kerül, amit az objektumlista megad.
+MEGJ:  Csupán a mozgás begépelésével (parancs nélkül)
+       a kurzor mozgás által megadott helyre kerül.
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		2.4.  lecke: EGY KIVÉTEL A  'PARANCSOBJEKTUM' ALÓL
+		2.4.  lecke: EGÉSZ SOROK FELDOLGOZÁSA
 
 
 	       ** dd beírásával törölheti az egész sort. **
@@ -217,8 +217,8 @@
 
   1. Mozgassa a kurzort az alábbi kifejezések második sorára!
   2. dd begépelésével törölje a sort!
-  3. Menjen a 4. (eredetileg 5.) sorra!
-  4. 2dd   (ugyebár szám-utasítás-objektum) begépelésével töröljön két sort!
+  3. Menjen a 3. (eredetileg 4.) sorra!
+  4. 2dd   (ugyebár szám-utasítás-mozgás) begépelésével töröljön két sort!
 
       1)  Alvó szegek a jéghideg homokban,
       2)  - kezdi a költő -
@@ -238,9 +238,9 @@
   1. Menjünk az alábbi ---> kezdetű sor első hibájára!
   2. x  lenyomásával törölje az első felesleges karaktert!
   3. u megnyomásával vonja vissza az utolsónak végrehajtott utasítást!
-  4. Másodjára javítson ki minden hibát a sorben az x utasítással!
+  4. Másodjára javítson ki minden hibát a sorban az x utasítással!
   5. Most nagy  U  -val állítsa vissza a sor eredeti állapotát!
-  6. Nyomja meg az u gombot párszor, hogy az U és sz előző utasításokat
+  6. Nyomja meg az u gombot párszor, hogy az U és az azt megelőző utasításokat
      visszaállítsa!
   7. CTRL-R (CTRL gomb lenyomása mellett üssön R-t) párszor csinálja újra a
      visszavont parancsokat (redo)!
@@ -263,11 +263,11 @@
 
   4. Egy utasítás alakja normál módban:
 
-       [szám]   utasítás   objektum   VAGY   utasítás	[szám] objektum
+       [szám]   utasítás   mozgás   VAGY   utasítás	[szám] mozgás
      ahol:
        szám - hányszor ismételjük a parancsot
        utasítás - mit tegyünk, pl. d  a törléskor
-       objektum - mire hasson az utasítás, például w (szó=word),
+       mozgás - mire hasson az utasítás, például w (szó=word),
 		$ (a sor végéig), stb.
 
   5. Az előző tett visszavonása (undo):	     u	 (kis u)
@@ -278,11 +278,11 @@
 		3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
 
 
-  ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
+  ** p  leütésével az utolsónak töröltet a kurzor után illeszthetjük. **
 
   1. Mozgassuk a kurzort az alábbi sorok első sorára.
 
-  2. dd leütésével töröljük a sort és eltérolódik a Vim pufferében.
+  2. dd leütésével töröljük a sort és eltárolódik a Vim pufferében.
 
   3. Mozgassuk a kurzort azelőtt a  sor ELŐTTI sorba, ahová mozgatni
      szeretnénk a törölt sort.
@@ -350,13 +350,13 @@
 		       3.4.  lecke: TÖBBFÉLE VÁLTOZTATÁS c-VEL
 
 
- ** A c utasítás használható ugyanazokkal az objektumokkal mint a törlés **
+ ** A c utasítás használható ugyanazokkal az mozgásokkal mint a törlés **
 
   1. A change utasítás a törléssel azonosan viselkedik.  A forma:
 
-       [szám]   c   objektum	   OR	    c	[szám]   objektum
+       [szám]   c   mozgás	   OR	    c	[szám]   mozgás
 
-  2. Az objektumok is azonosak, pl.   w (szó), $ (sorvég), stb.
+  2. A mozgások is azonosak, pl.   w (szó), $ (sorvég), stb.
 
   3. Mozgassuk a kurzort az első ---> kezdetű sorra!
 
@@ -374,18 +374,18 @@
 
 
   1. A már törölt sort beillesztéséhez nyomjunk p-t. Ez a törölt szöveget
-     a kurzor UTÁN helyezi (ha sor került törlésre, a kurzor allatti sorba).
+     a kurzor UTÁN helyezi (ha sor került törlésre, a kurzor alatti sorba).
 
   2. A kurzor alatti karakter átírásához az r-et és azt a karaktert
      nyomjuk, amellyel az eredetit felül szeretnénk írni.
 
-  3. A változtatás (c) utasítás a karaktertől az objektum végéig
-     változtatja meg az objektumot. Például a cw a kurzortól a szó végéig,
+  3. A változtatás (c) utasítás a karaktertől az mozgás végéig
+     változtatja meg az mozgást. Például a cw a kurzortól a szó végéig,
      a c$ a sor végéig.
 
   4. A változtatás formátuma:
 
-	 [szám]   c	objektum	VAGY	c   [szám]   objektum
+	 [szám]   c	mozgás	VAGY	c   [szám]   mozgás
 
 Ugorjunk a következő leckére!
 
@@ -428,7 +428,7 @@
   3. A kifejezés újabb kereséséhez üssük le egyszerűen:  n .
      A kifejezés ellenkező irányban történő kereséséhez ezt üssük be: Shift-N .
 
-  4. Ha visszafelé szeretne keresni, akkor ? kell a ! helyett.
+  4. Ha visszafelé szeretne keresni, akkor ? kell a / helyett.
 
 ---> "hiibaa" nem a helyes módja a hiba leírásának; a hiibaa egy hiba.
 
@@ -462,7 +462,7 @@
 		  4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
 
 
-    ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
+    ** :s/régi/új/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
 
   1. Menjünk a ---> kezdetű sorra!
 
@@ -579,7 +579,7 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   5.4.  lecke: RETRIEVING AND MERGING FILES
+		   5.4.  lecke: FÁJLOK VISSZAÁLLÍTÁSA ÉS ÖSSZEFŰZÉSE
 
 
        ** Egy fájl tartalmának beillesztéséhez írja   :r FÁJLNÉV **
@@ -592,11 +592,11 @@
        keresse meg ismét ezt a leckét.
 
   3. Most szúrja be a TESZT nevű fájlt a   :r TESZT   paranccsal, ahol
-     TESZT az Ön fájljénak a neve.
+     TESZT az Ön fájljának a neve.
 
 MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
 
-  4. Hogy ellenőrizzük, hogy a fájlt tényleg beillsztettük, menjen
+  4. Hogy ellenőrizzük, hogy a fájlt tényleg beillesztettük, menjen
      vissza, és nézze meg, hogy kétszer szerepel az 5.3. lecke! Az eredeti
      mellett a fájlból bemásolt is ott van.
 
@@ -616,11 +616,11 @@
   2.  :w FÁJLNÉV  kiírja a jelenlegi Vim-fájlt a lemezre FÁJNÉV néven.
 
   3.  :#,#w FÁJLNÉV  kiírja a két sorszám (#) közötti sorokat FÁJLNÉV-be
-      Másik lehetőség, hogy a kezdősornál Ctrl-v-t nyom lemegy az utolsó
+      Másik lehetőség, hogy a kezdősornál Shift-v-t nyom lemegy az utolsó
       sorra, majd ezt üti be  :w FÁJLNÉV
 
   4.  :r FÁJLNÉV  beolvassa a FÁJLNÉV fájlt és behelyezi a jelenlegi fájlba
-      a kurzorpozició utáni sorba.
+      a kurzorpozíció utáni sorba.
 
 
 
@@ -629,7 +629,7 @@
 		   6.1.  lecke: A MEGNYITÁS (OPEN) PARANCS
 
 
-** o  beírásával nyithat egy új sort a kurzor alatt és válthat beszúró módba **
+** o  beírásával nyit egy új sort a kurzor alatt és beszúró módba vált **
 
   1. Mozgassuk a kurzort a ---> kezdetű sorra.
 
@@ -641,7 +641,7 @@
 
 ---> Az o lenyomása után a kurzor a következő sor elején áll beszúró módban.
 
-  4. A kurzor FELETTI for megnyitásához egyzserűen a nagy O betűt írjon
+  4. A kurzor FELETTI sor megnyitásához egyszerűen nagy O betűt írjon
 kicsi helyett. Próbálja ki a következő soron!
 Nyisson egy új sort efelett Shift-O megnyomásával, mialatt a kurzor
 ezen a soron áll.
@@ -654,16 +654,16 @@
 			6.2.  lecke: AZ APPEND PARANCS
 
 
-	 ** a  lenyomásával a kuror UTÁN szúrhatunk szöveget. **
+	 ** a  lenyomásával a kurzor UTÁN szúrhatunk szöveget. **
 
   1. Mozgassuk a kurzort a következő ---> kezdetű sor végére úgy,
-     hogy normál módban  $  ír be.
+     hogy  normál  módban  $-t  ír be.
 
-  2. a  (kicsi) leütésével szöveget szúrhat be AMöGÉ a karakter mögé,
+  2. Kis "a" leütésével szöveget szúrhat be AMÖGÉ a karakter mögé,
      amelyen a kurzor áll.
-     (A nagy  A  az egész sor végére írja a szöveget.)
+     (A nagy "A" az egész sor végére írja a szöveget.)
 
-Megj: A Vimben a sor legvégére is lehet állni, azonba ez elődjében
+Megj: A Vimben a sor legvégére is lehet állni, azonban ez elődjében
       a Vi-ban nem lehetséges, ezért abban az a nélkül elég körülményes
       a sor végéhez szöveget írni.
 
@@ -687,13 +687,13 @@
   2. Helyezze a kurzort az első szó elejére amely eltér a második
      ---> kezdetű sor tartalmától (a 'az utolsóval' résztől).
 
-  3. Nyomjon R karaktert és írja ét a szöveg maradékát az első sorban
+  3. Nyomjon R karaktert és írja át a szöveg maradékát az első sorban
      úgy, hogy a  két sor egyező legyen.
 
 ---> Az első sort tegye azonossá az utolsóval: használja a gombokat.
 ---> Az első sort tegye azonossá a másodikkal: írjon R-t és az új szöveget.
 
-  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
+  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanul hagyott
      szövegek változatlanok maradnak.
 
 
@@ -826,5 +826,5 @@
 
   A Vimhez idomította Bram Moolenaar.
 
-  Magyarította: Horváth Árpád <horvath.arpad@roik.bmf.hu>, 2006-2008
+  Magyarította: Horváth Árpád <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
 
diff -Naur vim73.orig/runtime/tutor/tutor.ja.euc vim73/runtime/tutor/tutor.ja.euc
--- vim73.orig/runtime/tutor/tutor.ja.euc	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.ja.euc	2013-08-04 19:09:09.947279187 +0000
@@ -38,10 +38,10 @@
 
   3. ؤΥȤäơå1.2 ˰ưޤ礦
 
-Note: 򥿥פƤ뤫Ƚʤʤä顢<ESC>򲡤ƥΡޥ⡼ɤˤ
+NOTE: 򥿥פƤ뤫Ƚʤʤä顢<ESC>򲡤ƥΡޥ⡼ɤˤ
       ޤ줫Ϥ褦ȤƤޥɤϤޤ礦
 
-Note: 륭ǤưǤޤ hjkl ˰ٴƤޤСϤ뤫
+NOTE: 륭ǤưǤޤ hjkl ˰ٴƤޤСϤ뤫
       ®ư뤳ȤǤǤ礦ޥ!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -109,7 +109,7 @@
 --->  ˤ ­ʤ ƥ 롣
 --->   ˤ Ĥ ­ʤ ƥ  롣
 
-  5. ˡ狼ä鲼Υå1򸫤ޤ礦
+  5. ˡ狼äå 1.5 ؿʤߤޤ礦
 
 
 
@@ -117,7 +117,7 @@
 		     å 1.5: ƥԽ - ɲ
 
 
-		 ** ƥɲäˤ A 򲡤ޤ礦 **
+		 ** ƥȤɲäˤ A 򲡤ޤ礦 **
 
   1. ʲ ---> ȼ줿ǽιԤ˥ưޤ礦
      뤬ʸˤäƤ⤫ޤޤ
@@ -126,8 +126,8 @@
 
   3. ƥȤɲä顢 <ESC> 򲡤ƥΡޥ⡼ɤޤ礦
 
-  4. 2ܤ ---> ȼ줿ذưƥå 2  3 ֤ʸˡ
-     ޤ礦
+  4. 2ܤ ---> ȼ줿ذưƥå 2  3 򷫤֤ʸˡ
+     ޤ礦
 
 ---> ˤϴְäƥȤ
      ˤϴְäƥȤޤ
@@ -145,7 +145,8 @@
   !! NOTE: ʲΥƥåפ¹ԤˡޤΤɤǤ!!
 
   1. å 1.2 Ǥä褦 :q! 򥿥פơΥ塼ȥꥢλ
-     ޤ
+     ޤ뤤ϡ̤üϤǰʲƤԤäƤ⤫ޤ
+     ޤ
 
   2. ץץȤǤΥޥɤ򥿥פޤ:  vim tutor <ENTER>
      'vim' Vim ǥư륳ޥɡ'tutor' Խե
@@ -155,7 +156,8 @@
 
   4. ѹե¸ޤ:  :wq  <ENTER>
 
-  5. vimtutor ٵưʲؿʤߤޤ礦
+  5. ƥå 1  vimtutuor λ vimtutor ٵưʲ
+     ؿʤߤޤ礦
 
   6. ʾΥƥåפɤ򤷤Ǥ¹Ԥޤ礦
   
@@ -215,7 +217,7 @@
 
   2. ʲ ---> ȼ줿Ԥ˥ưޤ礦
 
-  3. ʸإưޤ礦(ǽ . θǤ)
+  3. ʸإưޤ礦(ǽ  θǤ)
 
   4. ޤǺΤ d$ ȥפޤ礦
 
@@ -232,7 +234,7 @@
 		     å 2.3: ڥ졼ȥ⡼
 
 
-  ¿Υޥɤϥڥ졼ȥ⡼󤫤ƥȤѹäޤ
+  ¿Υޥɤϥڥ졼ȥ⡼󤫤ƥȤѹäޤ
   ޥ d Υڥ졼ϼͤˤʤäƤޤ:
 
   	d   ⡼
@@ -259,13 +261,13 @@
 
   1. ʲ ---> ȼ줿ԤƬ˥ưޤ
 
-  2. 2dw 򥿥פñ2ʬưޤ
+  2. 2w 򥿥פñ2ʬ˰ưޤ
 
   3. 3e 򥿥פ3ܤñνü˰ưޤ
 
   4. 0 ()򥿥פƹƬ˰ưޤ
 
-  5. ƥå 2  3 㤦ͤȻȤäƷ֤ޤ
+  5. ƥå 2  3 㤦ͤȤäƷ֤ޤ
 
 ---> This is just a line with words you can move around in.
 
@@ -286,7 +288,7 @@
 
   1. ---> ȼ줿ԤιƬʬ˥ưޤ礦
 
-  2. UPPER CASE ñ2Ĥ 2dw ȥפƺޤ
+  2. UPPER CASE ñ2Ĥ d2w ȥפƺޤ
 
   3. UPPER CASE ȤϢ³ñ1ĤΥޥɤȰۤʤ륫Ȥꤷ
      ƥå 1  2 򷫤֤ޤ
@@ -326,8 +328,8 @@
 
   ** ǸΥޥɤäˤ u 򲡤ޤU ϹΤμäǤ **
 
-  1. ʲ ---> ȼ줿Ԥ˥ưǽδְ㤤˥
-     ưޤ礦
+  1. ʲ ---> ȼ줿Ԥ˥ưǽδְ㤤˥
+     ưޤ礦
   2. x 򥿥פƤʤƬʸޤ礦
   3. u 򥿥פƺǸ˼¹Ԥޥɤäޤ礦
   4. ٤ϡx ѤƸƽޤ礦
@@ -406,7 +408,7 @@
 --->  ιϤ͡οͤϴĤä򲡤⤷!
 --->  ιԤϤˡοͤϴĤְä򲡤ޤ!
 
-  5. å 3.2 ؿʤߤޤ礦
+  5. å 3.3 ؿʤߤޤ礦
 
 NOTE: ºݤ˻ޤ礦褷ƳФˤϤʤȡ
 
@@ -428,8 +430,8 @@
 
   5. ǽιԤιԤͤˤʤޤǥƥå 3  4 򷫤֤ޤ
 
----> This lubw has a few wptfd that mrrf changing usf the change command.
----> This line has a few words that need changing using the change command.
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
 
 cw ñѹǤʤԤ뤳Ȥդޤ礦
 
@@ -494,7 +496,7 @@
      ˹ֹФƤޤ礦
 
 NOTE:  ̤α˥ΰ֤ɽƤ뤫⤷ޤ󡣤
-       'ruler' ץ(å6)ꤹ뤳Ȥɽޤ
+       'ruler' ץ(:help 'ruler' 򻲾)ꤹ뤳Ȥɽޤ
 
   2. ǲԤ˰ư뤿 G 򥿥פޤ礦
      եƬ˰ưˤ gg ȥפޤ礦
@@ -523,8 +525,8 @@
   5. ξˤ CTRL-O (Ctrl 򲡤³ʤ o ʸ)򥿥פ
      ޤˤϤ򷫤֤ޤCTRL-I Ǥ
 
-Note: "errroor"  error ȥڥ뤬㤤ޤ;  errroor Ϥ error Ǥ
-Note: եνãȡץ 'wrapscan' ꤵƤ
+--->  "errroor"  error ȥڥ뤬㤤ޤ;  errroor Ϥ error Ǥ
+NOTE: եνãȡץ 'wrapscan' ꤵƤ
       ϡեƬ鸡³Ԥޤ
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -541,7 +543,7 @@
 
   4. ǽγ̤˰ưˤ % ȥפޤ礦
 
-  5. ¾ (,),[,],{ or } ǥư% 򤷤Ƥ뤫ǧޤ礦
+  5. ¾ (,),[,],{  } ǥư% 򤷤Ƥ뤫ǧޤ礦
 
 ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
 
@@ -612,10 +614,10 @@
      ץץȤΤ褦˥ǥ쥯ȥΰɽϤǤ
      ⤷ ls ưʤʤ :!dir Ѥޤ礦
 
-Note:  ˡˤäƤ륳ޥɤ¹Ԥ뤳ȤǤޤ
+NOTE:  ˡˤäƤ륳ޥɤ¹Ԥ뤳ȤǤޤ
        Ϳޤ
 
-Note:  Ƥ : ޥɤ <ENTER> 򲡤ƽλʤФʤޤ
+NOTE:  Ƥ : ޥɤ <ENTER> 򲡤ƽλʤФʤޤ
        ʹߤǤϤΤȤ˸ڤޤ
 
 
@@ -633,9 +635,9 @@
   3. Ǥ :w TEST ȥפޤ礦 (TEST ϡե̾Ǥ)
 
   4. ˤեΤ TEST Ȥ̾¸ޤ
-     ⤦ :!dir ⤷ !ls ȥפƳǧƤߤޤ礦
+     ⤦ :!dir ⤷ :!ls ȥפƳǧƤߤޤ礦
 
-Note:  Vim λե̾ TEST ȶ˵ưȡ¸
+NOTE:  Vim λե̾ TEST ȶ˵ưȡ¸
      塼ȥꥢʣǤ夬ϤǤ
 
   5. ˡΤ褦˥פƥեäޤ礦(MS-DOS):  :!del TEST
@@ -655,8 +657,8 @@
 
   3. ʸ : 򲡤ȡ̤κǲ :'<,'> ޤ
 
-  4. w TEST (TESET ¸ߤʤե̾)򥿥פޤ
-     Enter 򲡤 :'<,'>w TEST ȤʤäƤ뤳ȤǧƲ
+  4. w TEST (TEST ¸ߤʤե̾)򥿥פޤ
+     <ENTER> 򲡤 :'<,'>w TEST ȤʤäƤ뤳ȤǧƲ
 
   5. Vim  TEST Ȥե򤵤줿Ԥ񤭹Ǥ礦
      !dir ⤷ !ls Ǥǧޤ
@@ -747,7 +749,7 @@
 
   3. θ˥ƥȤɲä뤿 a (ʸ) 򥿥פޤ
 
-  4. βιԤΤΤ褦ñ˴ޤ⡼ɤȴ٤ <ESC> ˲
+  4. βιԤΤ褦ñ˴ޤ⡼ɤȴ٤ <ESC> 
      ޤ
 
   5. e ȤäƼԴñذưƥå 3  4 򷫤֤ޤ
@@ -755,7 +757,7 @@
 ---> This li will allow you to pract appendi text to a line.
 ---> This line will allow you to practice appending text to a line.
 
-Note: a, i  A Ʊ⡼ɤذܤޤʸ֤ۤʤ
+NOTE: a, i  A Ʊ⡼ɤذܤޤʸ֤ۤʤ
       ޤ
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -772,7 +774,7 @@
   3. ִ⡼ɤȴˤ <ESC> 򲡤ޤԤλĤ꤬ѹƤʤޤޤ
      ʤ뤳ȤդƤ
 
-  5. Ĥä xxx 򥹥ƥåפ򷫤ִ֤ޤ礦
+  4. Ĥä xxx 򥹥ƥåפ򷫤ִ֤ޤ礦
 
 ---> Adding 123 to xxx gives you xxx.
 ---> Adding 123 to 456 gives you 579.
@@ -803,7 +805,7 @@
 --->  a) this is the first item.
       b)
 
-  Note: ñ1 yank Τ y 򥪥ڥ졼Ȥ yw Ȥ뤳Ȥޤ
+  NOTE: ñ1 yank Τ y 򥪥ڥ졼Ȥ yw Ȥ뤳Ȥޤ
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		       å 6.5: ץ
 
@@ -824,8 +826,8 @@
 
   6. ʸʸζ̵̤ˤˤϼͤϤޤ:  :set noic
 
-Note: ޥåζĴɽˤϼͤϤޤ: :nohlsearch
-Note: 1Ĥθޥɤʸʸζ̤᤿ʤСե졼 \c
+NOTE: ޥåζĴɽˤϼͤϤޤ: :nohlsearch
+NOTE: 1Ĥθޥɤʸʸζ̤᤿ʤСե졼 \c
       Ѥޤ:  /ignore\c  <ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 				å 6 
@@ -869,16 +871,16 @@
   ":help" ޥɤ˰Ϳ뤳Ȥˤꡢ̾Υإפ򸫤Ĥ뤳
   ǤޤƤߤޤ礦(<ENTER> 򥿥פ˺ʤ褦):
 
-  :help w
-  :help c_<T
-  :help insert-index
-  :help user-manual
+	:help w
+	:help c_CTRL-D
+	:help insert-index
+	:help user-manual
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		      å 7.2: ưץȤκ
 
 			 ** Vim ħȯ **
 
-  Vim ˤ Vi ¿ħƧޤƤޤΤۤȤɤϽ֤ˤ
+  Vim ˤ Vi ¿ħƧޤƤޤΤۤȤɤϽ֤ˤ
   ԲĤȤʤäƤޤ¿ħȤϤˤ "vimrc" ե
   ޤ
 
@@ -947,7 +949,7 @@
   ˤ Vim Υ塼ȥꥢ򽪤ޤǥñˡ⽼ʬ
   ȤȤǤ褦ˤȡVim λĳǰΤߤ褦Ȥޤ
   Vim ˤϤ¿ΥޥɤꡢƤ뤳ȤϤǤޤ
-  ʹߤϥ桼ޥ˥奢򻲾Ȥ: "help :user-manual"
+  ʹߤϥ桼ޥ˥奢򻲾Ȥ: ":help user-manual"
 
   ʸγؽΤˡܤޤ
 	Vim - Vi Improved - by Steve Oualline
diff -Naur vim73.orig/runtime/tutor/tutor.ja.sjis vim73/runtime/tutor/tutor.ja.sjis
--- vim73.orig/runtime/tutor/tutor.ja.sjis	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.ja.sjis	2013-08-04 19:09:09.947279187 +0000
@@ -38,10 +38,10 @@
 
   3. ւ̃L[gāAbX1.2 Ɉړ܂傤B
 
-Note: ^CvĂ邩ȂȂA<ESC>ăm[}[hɂ
+NOTE: ^CvĂ邩ȂȂA<ESC>ăm[}[hɂ
       ܂Bꂩ͂悤ƂĂR}hē͂܂傤B
 
-Note: J[\L[łړł܂B hjkl ɈxĂ܂΁A͂邩
+NOTE: J[\L[łړł܂B hjkl ɈxĂ܂΁A͂邩
       ɑړ邱Ƃłł傤B}W!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -109,7 +109,7 @@
 --->  ɂ Ȃ eLXg B
 --->  s ɂ  Ȃ eLXg  B
 
-  5. }̕@킩牺̃bX1̗v܂傤B
+  5. }̕@킩烌bX 1.5 ֐i݂܂傤B
 
 
 
@@ -117,7 +117,7 @@
 		     bX 1.5: eLXgҏW - ǉ
 
 
-		 ** eLXgǉɂ A ܂傤 **
+		 ** eLXgǉɂ A ܂傤 **
 
   1. ȉ ---> Ǝꂽŏ̍sɃJ[\ړ܂傤B
      J[\̕ɂĂ܂܂B
@@ -126,8 +126,8 @@
 
   3. eLXgǉIA <ESC> ăm[}[hɖ߂܂傤B
 
-  4. 2sڂ ---> ƎꂽꏊֈړAXebv 2  3 JԂĕ@
-     C܂傤B
+  4. 2sڂ ---> ƎꂽꏊֈړAXebv 2  3 JԂĕ@
+     C܂傤B
 
 ---> ɂ͊ԈeLXg
      ɂ͊ԈeLXg܂B
@@ -145,7 +145,8 @@
   !! NOTE: ȉ̃XebvsOɁA܂Ŝǂł!!
 
   1. bX 1.2 ł悤 :q! ^CvāÃ`[gAI
-     ܂B
+     ܂B邢́Aʂ̒[ꍇ͂ňȉ̓esĂ܂
+     ܂B
 
   2. VFvvgł̃R}h^Cv܂:  vim tutor <ENTER>
      'vim' Vim GfB^NR}hA'tutor' ͕ҏWt@C
@@ -155,7 +156,8 @@
 
   4. ύXt@Cɕۑ܂:  :wq  <ENTER>
 
-  5. vimtutor ēxNAȉ̗v֐i݂܂傤B
+  5. Xebv 1  vimtutuor Iꍇ vimtutor ēxNAȉ
+     v֐i݂܂傤B
 
   6. ȏ̃Xebvǂŗłs܂傤B
   
@@ -215,7 +217,7 @@
 
   2. ȉ ---> ƎꂽsɃJ[\ړ܂傤B
 
-  3. ̖փJ[\ړ܂傤(ŏ . ̌ł)B
+  3. ̖փJ[\ړ܂傤(ŏ B ̌ł)B
 
   4. s܂ō폜̂ d$ ƃ^Cv܂傤B
 
@@ -232,7 +234,7 @@
 		     bX 2.3: Iy[^ƃ[V
 
 
-  ̃R}h̓Iy[^ƃ[VeLXgɕύX܂B
+  ̃R}h̓Iy[^ƃ[VeLXgɕύX܂B
   폜R}h d ̃Iy[^͎̗lɂȂĂ܂:
 
   	d   [V
@@ -259,13 +261,13 @@
 
   1. ȉ ---> Ǝꂽs̐擪ɃJ[\ړ܂B
 
-  2. 2dw ^CvĒP2ړ܂B
+  2. 2w ^CvĒP2OɈړ܂B
 
   3. 3e ^Cv3ڂ̒P̏I[Ɉړ܂B
 
   4. 0 ([)^CvčsɈړ܂B
 
-  5. Xebv 2  3 ႤlƎgČJԂ܂B
+  5. Xebv 2  3 ႤlgČJԂ܂B
 
 ---> This is just a line with words you can move around in.
 
@@ -286,7 +288,7 @@
 
   1. ---> Ǝꂽs̍sɃJ[\ړ܂傤B
 
-  2. UPPER CASE ̒P2 2dw ƃ^Cvč폜܂B
+  2. UPPER CASE ̒P2 d2w ƃ^Cvč폜܂B
 
   3. UPPER CASE ƂAPA1̃R}hƈقȂJEgw肵A
      Xebv 1  2 JԂ܂B
@@ -326,8 +328,8 @@
 
   ** Ō̃R}hɂ u ܂BU ͍sŜ̎łB **
 
-  1. ȉ ---> ƎꂽsɃJ[\ړAŏ̊ԈႢɃJ[\
-     ړ܂傤B
+  1. ȉ ---> ƎꂽsɃJ[\ړAŏ̊ԈႢɃJ[\
+     ړ܂傤B
   2. x ^CvĂȂ擪̕폜܂傤B
   3. Au ^CvčŌɎsR}h܂傤B
   4. x́Ax gpČSďC܂傤B
@@ -406,7 +408,7 @@
 --->  ̍l͂ˁA̐l͊L[!
 --->  ̍s͂ɁA̐l͊ԈL[܂!
 
-  5. AbX 3.2 ֐i݂܂傤B
+  5. AbX 3.3 ֐i݂܂傤B
 
 NOTE: ۂɎ܂傤BĊo邾ɂ͂ȂƁB
 
@@ -428,8 +430,8 @@
 
   5. ŏ̍s̍s̗lɂȂ܂ŃXebv 3  4 JԂ܂B
 
----> This lubw has a few wptfd that mrrf changing usf the change command.
----> This line has a few words that need changing using the change command.
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
 
 cw ͒PύX邾łȂA}s邱Ƃɒӂ܂傤B
 
@@ -494,7 +496,7 @@
      ɍsԍoĂ܂傤B
 
 NOTE:  ʂ̉EɃJ[\̈ʒu\Ă邩܂B
-       'ruler' IvV(bX6Ő)ݒ肷邱Ƃŕ\܂B
+       'ruler' IvV(:help 'ruler' Q)ݒ肷邱Ƃŕ\܂B
 
   2. ŉsɈړ邽߂ G ^Cv܂傤B
      t@C̐擪Ɉړɂ gg ƃ^Cv܂傤B
@@ -523,8 +525,8 @@
   5. ̏ꏊɖ߂ɂ CTRL-O (Ctrl Ȃ o ^Cv)^Cv
      ܂Bɖ߂ɂ͂JԂ܂BCTRL-I ͑OłB
 
-Note: "errroor"  error ƃXyႢ܂;  errroor ͂ error łB
-Note: t@C̏IɒBƁAIvV 'wrapscan' ݒ肳Ă
+--->  "errroor"  error ƃXyႢ܂;  errroor ͂ error łB
+NOTE: t@C̏IɒBƁAIvV 'wrapscan' ݒ肳Ă
       ꍇ́At@C̐擪猟𑱍s܂B
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -541,7 +543,7 @@
 
   4. ŏ̊ʂɈړɂ % ƃ^Cv܂傤B
 
-  5.  (,),[,],{ or } ŃJ[\ړA% Ă邩mF܂傤B
+  5.  (,),[,],{  } ŃJ[\ړA% Ă邩mF܂傤B
 
 ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
 
@@ -612,10 +614,10 @@
      VFvvĝ悤ɃfBNg̈ꗗ\͂łB
       ls ȂȂ :!dir gp܂傤B
 
-Note:  ̕@ɂĂR}hs邱Ƃł܂B
+NOTE:  ̕@ɂĂR}hs邱Ƃł܂B
        ^܂B
 
-Note:  SĂ : R}h <ENTER> ďIȂ΂Ȃ܂B
+NOTE:  SĂ : R}h <ENTER> ďIȂ΂Ȃ܂B
        ȍ~ł͂̂ƂɌy܂B
 
 
@@ -633,9 +635,9 @@
   3. ł :w TEST ƃ^Cv܂傤 (TEST ́AI񂾃t@Cł)B
 
   4. ɂt@CŜ TEST ƂOŕۑ܂B
-     x :!dir  !ls ƃ^CvĊmFĂ݂܂傤B
+     x :!dir  :!ls ƃ^CvĊmFĂ݂܂傤B
 
-Note:  Vim IAt@C TEST ƋɋNƁAۑ
+NOTE:  Vim IAt@C TEST ƋɋNƁAۑ
      `[gA̕łオ͂łB
 
   5. ɁÂ悤Ƀ^Cvăt@C܂傤(MS-DOS):  :!del TEST
@@ -655,8 +657,8 @@
 
   3.  : ƁAʂ̍ŉ :'<,'> ܂B
 
-  4. w TEST (TESET ݂͑Ȃt@C)^Cv܂B
-     Enter O :'<,'>w TEST ƂȂĂ邱ƂmFĉB
+  4. w TEST (TEST ݂͑Ȃt@C)^Cv܂B
+     <ENTER> O :'<,'>w TEST ƂȂĂ邱ƂmFĉB
 
   5. Vim  TEST Ƃt@CɑIꂽsނł傤B
      !dir  !ls łmF܂B
@@ -747,7 +749,7 @@
 
   3. J[\̌ɃeLXgǉ邽߂ a () ^Cv܂B
 
-  4. ̉̍ŝ̂悤ȒPɊ܂B}[h𔲂ׂ <ESC> ɉ
+  4. ̉̍ŝ悤ȒPɊ܂B}[h𔲂ׂ <ESC> 
      ܂B
 
   5. e gĎ̕sSȒPֈړAXebv 3  4 JԂ܂B
@@ -755,7 +757,7 @@
 ---> This li will allow you to pract appendi text to a line.
 ---> This line will allow you to practice appending text to a line.
 
-Note: a, i  A ͓}[hֈڂ܂A}ʒuقȂ
+NOTE: a, i  A ͓}[hֈڂ܂A}ʒuقȂ
       ܂B
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -772,7 +774,7 @@
   3. u[h𔲂ɂ <ESC> ܂Bs̎c肪ύXĂȂ܂܂
      Ȃ邱ƂɒӂĂB
 
-  5. c xxx XebvJԂĒu܂傤B
+  4. c xxx XebvJԂĒu܂傤B
 
 ---> Adding 123 to xxx gives you xxx.
 ---> Adding 123 to 456 gives you 579.
@@ -803,7 +805,7 @@
 --->  a) this is the first item.
       b)
 
-  Note: P1 yank ̂ y Iy[^Ƃ yw Ƃ邱Ƃo܂B
+  NOTE: P1 yank ̂ y Iy[^Ƃ yw Ƃ邱Ƃo܂B
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		       bX 6.5: IvV̐ݒ
 
@@ -824,8 +826,8 @@
 
   6. 啶̋ʂ𖳌ɂɂ͎̗lɓ͂܂:  :set noic
 
-Note: }b`̋\߂ɂ͎̗lɓ͂܂: :nohlsearch
-Note: 1̌R}h啶̋ʂ߂Ȃ΁At[Y \c
+NOTE: }b`̋\߂ɂ͎̗lɓ͂܂: :nohlsearch
+NOTE: 1̌R}h啶̋ʂ߂Ȃ΁At[Y \c
       gp܂:  /ignore\c  <ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 				bX 6 v
@@ -869,16 +871,16 @@
   ":help" R}hɈ^邱ƂɂA薼̃wv邱
   ł܂BĂ݂܂傤(<ENTER> ^CvYȂ悤):
 
-  :help w
-  :help c_<T
-  :help insert-index
-  :help user-manual
+	:help w
+	:help c_CTRL-D
+	:help insert-index
+	:help user-manual
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		      bX 7.2: NXNvg̍쐬
 
 			 ** Vim ̓𔭊 **
 
-  Vim ɂ Vi ̓𓥂܂Ă܂ÂقƂǂ͏Ԃɂ
+  Vim ɂ Vi ̓𓥂܂Ă܂ÂقƂǂ͏Ԃɂ
   gpsƂȂĂ܂B葽̓g͂߂ɂ "vimrc" t@C
   쐬܂B
 
@@ -947,7 +949,7 @@
   ɂ Vim ̃`[gAI܂BGfB^ȒPɁA[
   gƂł悤ɂƁAVim ̎TO̗v_݂̂`悤Ƃ܂B
   Vim ɂ͂ɑ̃R}hAőSĂ邱Ƃ͂ł܂B
-  ȍ~̓[U}jAQƂ: "help :user-manual"
+  ȍ~̓[U}jAQƂ: ":help user-manual"
 
   Ȍ̊wK̂߂ɁA̖{𐄑E܂B
 	Vim - Vi Improved - by Steve Oualline
diff -Naur vim73.orig/runtime/tutor/tutor.ja.utf-8 vim73/runtime/tutor/tutor.ja.utf-8
--- vim73.orig/runtime/tutor/tutor.ja.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.ja.utf-8	2013-08-04 19:09:09.950612510 +0000
@@ -38,10 +38,10 @@
 
   3. 下へのキーを使って、レッスン1.2 に移動しましょう。
 
-Note: 何をタイプしているか判らなくなったら、<ESC>を押してノーマルモードにし
+NOTE: 何をタイプしているか判らなくなったら、<ESC>を押してノーマルモードにし
       ます。それから入力しようとしていたコマンドを再入力しましょう。
 
-Note: カーソルキーでも移動できます。しかし hjkl に一度慣れてしまえば、はるか
+NOTE: カーソルキーでも移動できます。しかし hjkl に一度慣れてしまえば、はるか
       に速く移動することができるでしょう。いやマジで!
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -109,7 +109,7 @@
 ---> この には 足りない テキスト ある。
 ---> この 行 には 幾つか 足りない テキスト が ある。
 
-  5. 挿入の方法がわかったら下のレッスン1の要約を見ましょう。
+  5. 挿入の方法がわかったらレッスン 1.5 へ進みましょう。
 
 
 
@@ -117,7 +117,7 @@
 		     レッスン 1.5: テキスト編集 - 追加
 
 
-		 ** テキスト追加するには A を押しましょう **
+		 ** テキストを追加するには A を押しましょう **
 
   1. 以下の ---> と示された最初の行にカーソルを移動しましょう。
      カーソルがその文字上にあってもかまいません。
@@ -126,8 +126,8 @@
 
   3. テキストを追加し終えたら、 <ESC> を押してノーマルモードに戻りましょう。
 
-  4. 2行目の ---> と示された場所へ移動し、ステップ 2 から 3 繰り返して文法を
-     修正しましょう。
+  4. 2行目の ---> と示された場所へ移動し、ステップ 2 から 3 を繰り返して文法
+     を修正しましょう。
 
 ---> ここには間違ったテキストがあり
      ここには間違ったテキストがあります。
@@ -145,7 +145,8 @@
   !! NOTE: 以下のステップを実行する前に、まず全体を読んでください!!
 
   1. レッスン 1.2 でやったように :q! をタイプして、このチュートリアルを終了
-     します。
+     します。あるいは、別の端末がある場合はそこで以下の内容を行ってもかまい
+     ません。
 
   2. シェルプロンプトでこのコマンドをタイプします:  vim tutor <ENTER>
      'vim'が Vim エディタを起動するコマンド、'tutor' は編集したいファイルの
@@ -155,7 +156,8 @@
 
   4. 変更をファイルに保存します:  :wq  <ENTER>
 
-  5. vimtutor を再度起動し、以下の要約へ進みましょう。
+  5. ステップ 1 で vimtutuor を終了した場合は vimtutor を再度起動し、以下の
+     要約へ進みましょう。
 
   6. 以上のステップを読んで理解した上でこれを実行しましょう。
   
@@ -215,7 +217,7 @@
 
   2. 以下の ---> と示された行にカーソルを移動しましょう。
 
-  3. 正しい文の末尾へカーソルを移動しましょう(最初の . の後です)。
+  3. 正しい文の末尾へカーソルを移動しましょう(最初の 。 の後です)。
 
   4. 行末まで削除するのに d$ とタイプしましょう。
 
@@ -232,7 +234,7 @@
 		     レッスン 2.3: オペレータとモーション
 
 
-  多くのコマンドはオペレータとモーションからテキストに変更を加ます。
+  多くのコマンドはオペレータとモーションからテキストに変更を加えます。
   削除コマンド d のオペレータは次の様になっています:
 
   	d   モーション
@@ -259,13 +261,13 @@
 
   1. 以下の ---> と示された行の先頭にカーソルを移動します。
 
-  2. 2dw をタイプして単語2つ分移動します。
+  2. 2w をタイプして単語2つ分前に移動します。
 
   3. 3e をタイプして3つ目の単語の終端に移動します。
 
   4. 0 (ゼロ)をタイプして行頭に移動します。
 
-  5. ステップ 2 と 3 を違う数値と使って繰り返します。
+  5. ステップ 2 と 3 を違う数値を使って繰り返します。
 
 ---> This is just a line with words you can move around in.
 
@@ -286,7 +288,7 @@
 
   1. ---> と示された行の行頭部分にカーソルを移動しましょう。
 
-  2. UPPER CASE の単語2つを 2dw とタイプして削除します。
+  2. UPPER CASE の単語2つを d2w とタイプして削除します。
 
   3. UPPER CASE という連続した単語を、1つのコマンドと異なるカウントを指定し、
      ステップ 1 と 2 を繰り返します。
@@ -326,8 +328,8 @@
 
   ** 最後のコマンドを取り消すには u を押します。U は行全体の取消です。 **
 
-  1. 以下の ---> と示された行にカーソルを移動し、最初の間違いにカーソ
-     ルを移動しましょう。
+  1. 以下の ---> と示された行にカーソルを移動し、最初の間違いにカーソル
+     を移動しましょう。
   2. x をタイプしていらない先頭の文字を削除しましょう。
   3. さぁ、u をタイプして最後に実行したコマンドを取り消しましょう。
   4. 今度は、x を使用して誤りを全て修正しましょう。
@@ -406,7 +408,7 @@
 --->  この合を人力した時ね、その人は幾つか問違ったキーを押しもした!
 --->  この行を入力した時に、その人は幾つか間違ったキーを押しました!
 
-  5. さぁ、レッスン 3.2 へ進みましょう。
+  5. さぁ、レッスン 3.3 へ進みましょう。
 
 NOTE: 実際に試しましょう。決して覚えるだけにはしないこと。
 
@@ -428,8 +430,8 @@
 
   5. 最初の行が次の行の様になるまでステップ 3 と 4 を繰り返します。
 
----> This lubw has a few wptfd that mrrf changing usf the change command.
----> This line has a few words that need changing using the change command.
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
 
 cw は単語を変更するだけでなく、挿入も行えることに注意しましょう。
 
@@ -494,7 +496,7 @@
      に行番号を覚えておきましょう。
 
 NOTE:  画面の右下隅にカーソルの位置が表示されているかもしれません。これは
-       'ruler' オプション(レッスン6で説明)を設定することで表示されます。
+       'ruler' オプション(:help 'ruler' を参照)を設定することで表示されます。
 
   2. 最下行に移動するために G をタイプしましょう。
      ファイルの先頭に移動するには gg とタイプしましょう。
@@ -523,8 +525,8 @@
   5. 元の場所に戻るには CTRL-O (Ctrl を押し続けながら o 文字タイプ)をタイプし
      ます。さらに戻るにはこれを繰り返します。CTRL-I は前方向です。
 
-Note: "errroor" は error とスペルが違います;  errroor はいわゆる error です。
-Note: 検索がファイルの終わりに達すると、オプション 'wrapscan' が設定されている
+--->  "errroor" は error とスペルが違います;  errroor はいわゆる error です。
+NOTE: 検索がファイルの終わりに達すると、オプション 'wrapscan' が設定されている
       場合は、ファイルの先頭から検索を続行します。
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -541,7 +543,7 @@
 
   4. 最初の括弧に移動するには % とタイプしましょう。
 
-  5. 他の (,),[,],{ or } でカーソルを移動し、% が何をしているか確認しましょう。
+  5. 他の (,),[,],{ や } でカーソルを移動し、% が何をしているか確認しましょう。
 
 ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
 
@@ -612,10 +614,10 @@
      シェルプロンプトのようにディレクトリの一覧が表示されるはずです。
      もしくは ls が動かないならば :!dir を使用しましょう。
 
-Note:  この方法によってあらゆるコマンドが実行することができます。もちろん引数
+NOTE:  この方法によってあらゆるコマンドが実行することができます。もちろん引数
        も与えられます。
 
-Note:  全ての : コマンドは <ENTER> を押して終了しなければなりません。
+NOTE:  全ての : コマンドは <ENTER> を押して終了しなければなりません。
        以降ではこのことに言及しません。
 
 
@@ -633,9 +635,9 @@
   3. では :w TEST とタイプしましょう (TEST は、選んだファイル名です)。
 
   4. これによりファイル全体が TEST という名前で保存されます。
-     もう一度 :!dir もしくは !ls とタイプして確認してみましょう。
+     もう一度 :!dir もしくは :!ls とタイプして確認してみましょう。
 
-Note: ここで Vim を終了し、ファイル名 TEST と共に起動すると、保存した時の
+NOTE: ここで Vim を終了し、ファイル名 TEST と共に起動すると、保存した時の
      チュートリアルの複製ができ上がるはずです。
 
   5. さらに、次のようにタイプしてファイルを消しましょう(MS-DOS):  :!del TEST
@@ -655,8 +657,8 @@
 
   3. 文字 : を押すと、画面の最下部に :'<,'> が現れます。
 
-  4. w TEST (TESET は存在しないファイル名)をタイプします。
-     Enter を押す前に :'<,'>w TEST となっていることを確認して下さい。
+  4. w TEST (TEST は存在しないファイル名)をタイプします。
+     <ENTER> を押す前に :'<,'>w TEST となっていることを確認して下さい。
 
   5. Vim は TEST というファイルに選択された行を書き込むでしょう。
      !dir もしくは !ls でそれを確認します。
@@ -747,7 +749,7 @@
 
   3. カーソルの後ろにテキストを追加するために a (小文字) をタイプします。
 
-  4. その下の行ののような単語に完成させます。挿入モードを抜ける為に <ESC> に押
+  4. その下の行のような単語に完成させます。挿入モードを抜ける為に <ESC> を押
      します。
 
   5. e を使って次の不完全な単語へ移動し、ステップ 3 と 4 を繰り返します。
@@ -755,7 +757,7 @@
 ---> This li will allow you to pract appendi text to a line.
 ---> This line will allow you to practice appending text to a line.
 
-Note: a, i と A は同じ挿入モードへ移りますが、文字が挿入される位置だけが異なり
+NOTE: a, i と A は同じ挿入モードへ移りますが、文字が挿入される位置だけが異なり
       ます。
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -772,7 +774,7 @@
   3. 置換モードを抜けるには <ESC> を押します。行の残りが変更されていないままに
      なることに注意してください。
 
-  5. 残った xxx をステップを繰り返して置換しましょう。
+  4. 残った xxx をステップを繰り返して置換しましょう。
 
 ---> Adding 123 to xxx gives you xxx.
 ---> Adding 123 to 456 gives you 579.
@@ -803,7 +805,7 @@
 --->  a) this is the first item.
       b)
 
-  Note: 単語を1つ yank するのに y をオペレータとして yw とすることも出来ます。
+  NOTE: 単語を1つ yank するのに y をオペレータとして yw とすることも出来ます。
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		       レッスン 6.5: オプションの設定
 
@@ -824,8 +826,8 @@
 
   6. 大文字小文字の区別を無効にするには次の様に入力します:  :set noic
 
-Note: マッチの強調表示をやめるには次の様に入力します: :nohlsearch
-Note: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、フレーズに \c
+NOTE: マッチの強調表示をやめるには次の様に入力します: :nohlsearch
+NOTE: 1つの検索コマンドだけ大文字小文字の区別をやめたいならば、フレーズに \c
       を使用します:  /ignore\c  <ENTER>
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 				レッスン 6 要約
@@ -869,16 +871,16 @@
   ":help" コマンドに引数を与えることにより、あらゆる題名のヘルプを見つけること
   ができます。これらを試してみましょう(<ENTER> をタイプし忘れないように):
 
-  :help w
-  :help c_<T
-  :help insert-index
-  :help user-manual
+	:help w
+	:help c_CTRL-D
+	:help insert-index
+	:help user-manual
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 		      レッスン 7.2: 起動スクリプトの作成
 
 			 ** Vim の特徴を発揮する **
 
-  Vim には Vi よりも多くの特徴を踏まえていまが、そのほとんどは初期状態にて
+  Vim には Vi よりも多くの特徴を踏まえていますが、そのほとんどは初期状態にて
   使用不可となっています。より多くの特徴を使いはじめるには "vimrc" ファイル
   を作成します。
 
@@ -947,7 +949,7 @@
   これにて Vim のチュートリアルを終わります。エディタを簡単に、しかも充分に
   使うことができるようにと、Vim の持つ概念の要点のみを伝えようとしました。
   Vim にはさらに多くのコマンドがあり、ここで全てを説明することはできません。
-  以降はユーザマニュアルを参照ください: "help :user-manual"
+  以降はユーザマニュアルを参照ください: ":help user-manual"
 
   これ以後の学習のために、次の本を推薦します。
 	Vim - Vi Improved - by Steve Oualline
diff -Naur vim73.orig/runtime/tutor/tutor.ko.euc vim73/runtime/tutor/tutor.ko.euc
--- vim73.orig/runtime/tutor/tutor.ko.euc	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.ko.euc	2013-08-04 19:09:09.950612510 +0000
@@ -551,7 +551,7 @@
 
         **  Ϻθ Ϸ,  :#,# w FILENAME  Ͻʽÿ. **
 
-  1. ٽ ѹ,  :!dir  ̳  !ls  ԷϿ 丮  ޾ƿ 
+  1. ٽ ѹ,  :!dir  ̳  :!ls  ԷϿ 丮  ޾ƿ 
      TEST   ̸ մϴ.
 
   2. Ŀ   ó ű , Ctrl-g  ԷϿ   ٹȣ
diff -Naur vim73.orig/runtime/tutor/tutor.ko.utf-8 vim73/runtime/tutor/tutor.ko.utf-8
--- vim73.orig/runtime/tutor/tutor.ko.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.ko.utf-8	2013-08-04 19:09:09.953945834 +0000
@@ -551,7 +551,7 @@
 
         ** 파일의 일부를 저장하려면,  :#,# w FILENAME  하십시오. **
 
-  1. 다시 한번,  :!dir  이나  !ls 를 입력하여 디렉토리의 목록을 받아온 후
+  1. 다시 한번,  :!dir  이나  :!ls 를 입력하여 디렉토리의 목록을 받아온 후
      TEST 같은 적합한 이름을 선택합니다.
 
   2. 커서를 이 페이지의 처음으로 옮긴 후, Ctrl-g 를 입력하여 그 줄의 줄번호를
diff -Naur vim73.orig/runtime/tutor/tutor.nb vim73/runtime/tutor/tutor.nb
--- vim73.orig/runtime/tutor/tutor.nb	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.nb	2013-08-04 19:09:09.953945834 +0000
@@ -658,7 +658,7 @@
   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
      at du ser	:'<,'>w TEST  fr du trykker Enter.
 
-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
      for  se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
 
 MERK: Ved  trykke  v  startes visuelt valg. Du kan flytte markren rundt for
diff -Naur vim73.orig/runtime/tutor/tutor.nb.utf-8 vim73/runtime/tutor/tutor.nb.utf-8
--- vim73.orig/runtime/tutor/tutor.nb.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.nb.utf-8	2013-08-04 19:09:09.957279157 +0000
@@ -658,7 +658,7 @@
   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
      at du ser	:'<,'>w TEST  før du trykker Enter.
 
-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
      for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
 
 MERK: Ved å trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
diff -Naur vim73.orig/runtime/tutor/tutor.nl vim73/runtime/tutor/tutor.nl
--- vim73.orig/runtime/tutor/tutor.nl	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/tutor/tutor.nl	2013-08-04 19:09:09.957279157 +0000
@@ -0,0 +1,950 @@
+  ==========================================================================
+  =    W e l k o m   b i j   d e   V I M   l e s s e n   -   Versie 1.7    =
+  ==========================================================================
+
+  Vim is een krachtige editor met veel commando's, te veel om uit te leggen
+  in lessen zoals deze. Deze lessen zijn bedoeld om voldoende commando's te
+  behandelen om je in staat te stellen met Vim te werken als een editor voor
+  algemeen gebruik.
+
+  Deze lessen zullen 25 tot 30 minuten in beslag nemen, afhankelijk van de
+  tijd die wordt besteed aan het uitproberen van de commando's.
+
+  LET OP:
+  Door de commando's in deze lessen verandert de tekst. Maak een kopie van
+  dit bestand om mee te oefenen (als je "vimtutor" uitvoerde, is dit al een
+  kopie).
+
+  Deze lessen zijn bedoeld om al doende te leren. Dat betekent dat je de
+  commando's moet uitvoeren om ze goed te leren kennen. Als je de tekst
+  alleen maar doorleest, zal je de commando's niet leren!
+
+  Zorg ervoor dat de <Caps Lock> toets NIET is ingedrukt en druk vaak genoeg
+  op de j-toets om de cursor zo te bewegen dat les 1.1 volledig op het
+  scherm staat.
+
+  LET OP: In deze lessen worden omwille van de duidelijkheid vaak spaties
+  gebruikt binnen een commando (bv. "40 G" of "operator [getal] beweging").
+  Tik deze spaties echter NIET. Ze verstoren de werking.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.1:  VERPLAATS DE CURSOR
+
+  ** De cursor wordt verplaatst met de toetsen h, j, k, l zoals aangegeven. **
+          ^
+          k       Hint:  De h is de meest linkse en beweegt naar links.
+      < h   l >          De l is de meest rechtse en beweegt naar rechts.
+          j              De j lijkt op een pijl naar beneden.
+          v
+
+  1. Beweeg de cursor over het scherm om er vertrouwd mee te raken.
+
+  2. Druk de omlaag-toets (j) tot hij repeteert.
+     Nu weet je hoe je de volgende les bereikt.
+
+  3. Gebruik de omlaag-toets om naar les 1.2 te gaan.
+
+  OPMERKING: Als je twijfelt aan wat je tikte, druk <ESC> om in de opdracht-
+             modus te komen. Tik daarna het commando dat bedoeld wordt.
+
+  OPMERKING: Pijltjes-toetsen werken ook. Met de hjkl-toetsen kan je sneller
+             rondbewegen, als je er eenmaal aan gewend bent. Echt waar!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.2: VIM AFSLUITEN
+
+      !! LET OP: Lees deze les goed door voordat je iets uitvoert!!
+
+  1. Druk de <ESC> toets (om zeker in de opdrachtmodus te zitten).
+
+  2. Tik   :q! <ENTER>
+     Hiermee wordt de editor afgesloten. Alle veranderingen gaan VERLOREN.
+
+  3. Nu zie je de shell-prompt. Tik het commando waarmee je deze lessen
+     hebt opgeroepen. Dat is normaal gesproken:  vimtutor <ENTER>
+
+  4. Als je deze stappen goed hebt doorgelezen, voer dan de stappen 1 tot 3
+     uit om de editor te verlaten en weer op te starten.
+
+  LET OP: :q! <ENTER> verwerpt alle veranderingen die je aanbracht. Een paar
+          lessen verder zal je leren hoe veranderingen worden opgeslagen in
+          een bestand.
+
+  5. Beweeg de cursor omlaag naar les 1.3.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.3: TEKST BEWERKEN - WISSEN
+
+          ** Tik  x  om het teken onder de cursor te wissen. **
+
+  1. Ga met de cursor naar de regel verderop met --->.
+
+  2. Zet de cursor op een teken dat moet worden gewist om een fout te
+     herstellen.
+
+  3. Tik  x  om het ongewenste teken te wissen.
+
+  4. Herhaal deze stappen tot de regel goed is.
+
+  ---> Vi kkent eenn opdracccchtmodus en een invooegmmmmodus.
+
+  5. Nu de regel gecorrigeerd is kan je naar les 1.4 gaan.
+
+  LET OP: Probeer de lessen niet uit je hoofd te leren. Leer al doende.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.4: TEKST BEWERKEN - INVOEGEN
+
+              ** Tik  i  ('insert') om tekst in te voegen. **
+
+  1. Ga met de cursor naar de eerste regel verderop met --->.
+
+  2. Maak de eerste regel gelijk aan de tweede. Zet daarvoor de cursor op
+     de plaats waar tekst moet worden ingevoegd.
+
+  3. Tik  i  en daarna de nodige aanvullingen.
+
+  4. Tik <ESC> na elke herstelde fout om terug te keren in de opdrachtmodus.
+     Herhaal de stappen 2 tot 4 om de zin te verbeteren.
+
+  ---> Aan regel ontekt wat .
+  ---> Aan deze regel ontbreekt wat tekst.
+
+  5. Ga naar les 1.5 als je gewend bent aan het invoegen van tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.5: TEKST BEWERKEN - TOEVOEGEN
+
+             ** Tik  A  ('append') om tekst toe te voegen. **
+
+  1. Ga met de cursor naar de eerste regel verderop met --->.
+     Het maakt niet uit waar de cursor in deze regel staat.
+
+  2. Tik hoofdletter  A  en tik de nodige aanvullingen.
+
+  3. Tik <ESC> nadat de tekst is aangevuld. Zo keer je terug in de
+     opdrachtmodus.
+
+  4. Ga naar de tweede regel verderop met ---> en herhaal stap 2 en 3
+     om deze zin te corrigeren.
+
+  ---> Er ontbreekt wat tekst aan de
+       Er ontbreekt wat tekst aan deze regel.
+  ---> Hier ontbreekt ook w
+       Hier ontbreekt ook wat tekst.
+
+  5. Ga naar les 1.6 als je vertrouwd bent geraakt aan het toevoegen
+     van tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.6: EEN BESTAND EDITTEN
+
+    ** Gebruik  :wq  om een bestand op te slaan en de editor te verlaten. **
+
+  !! LET OP: Lees deze les helemaal door voordat je een van de volgende
+             stappen uitvoert!!
+
+  1. Verlaat deze les zoals je in les 1.2 deed:  :q!
+     Of gebruik een andere terminal als je daar de beschikking over hebt. Doe
+     daar het volgende.
+
+  2. Tik het volgende commando na de shell-prompt:  vim les <ENTER>
+     'vim' (vaak ook 'vi') is het commando om de Vim-editor te starten,
+     'les' is de naam van het bestand, dat je gaat bewerken. Kies een andere
+     naam als er al een bestand 'les' bestaat, dat niet veranderd mag worden.
+
+  3. Voeg naar eigen keus tekst toe, zoals je geleerd hebt in eerdere lessen.
+
+  4. Sla het bestand met de wijzigingen op en verlaat Vim met  :wq <ENTER>
+
+  5. Herstart vimtutor als je deze bij stap 1 hebt verlaten en ga verder met
+     de volgende samenvatting.
+
+  6. Voer deze stappen uit nadat je ze hebt gelezen en begrepen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 1
+
+  1. De cursor wordt bewogen met de pijltjestoetsen of de hjkl-toetsen.
+       h (links)   j (omlaag)  k (omhoog)  l (rechts)
+
+  2. Start Vim van de shell-prompt. Tik:  vim BESTANDSNAAM <ENTER>
+
+  3. Sluit Vim af met  <ESC> :q! <ENTER>  om de veranderingen weg te gooien.
+               OF tik  <ESC> :wq <ENTER>  om de veranderingen te bewaren.
+
+  4. Wis het teken onder de cursor met:  x
+
+  5. Invoegen of toevoegen van tekst, tik:
+     i  en daarna de in te voegen tekst  <ESC>   voeg in vanaf de cursor
+     A  en daarna de toe te voegen tekst  <ESC>  voeg toe achter de regel
+
+  OPMERKING: Met <ESC> kom je terug in opdrachtmodus en wordt een ongewenst
+             of gedeeltelijk uitgevoerd commando afgebroken.
+
+  Ga nu verder met les 2.1.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.1: WIS-COMMANDO'S
+
+       ** Tik  dw  ('delete word') om een woord te wissen. **
+
+  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
+
+  2. Ga naar de regel hieronder, die met ---> begint.
+
+  3. Ga met de cursor naar het begin van een woord dat moet worden gewist.
+
+  4. Met het tikken van  dw  verdwijnt het woord.
+
+  OPMERKING: De letter  d  verschijnt op de laatste regel van het scherm
+             zodra je hem tikt. Vim is aan het wachten tot je de  w  tikt.
+             Als je een ander teken dan  d  ziet, heb je iets verkeerds
+             getikt. Druk op <ESC> en begin opnieuw.
+
+  NOG EEN OPMERKING: Dit werkt alleen als de optie 'showcmd' is ingeschakeld.
+                     Dat gebeurt met  :set showcmd <ENTER>
+
+  ---> Er zijn een het paar ggg woorden, die niet in deze len zin thuishoren.
+
+  5. Herhaal de stappen 3 en 4 tot de zin goed is en ga naar les 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.2: MEER WIS-COMMANDO'S
+
+        ** Tik  d$  om te wissen tot het einde van de regel. **
+
+  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
+
+  2. Ga naar de regel hieronder, die met ---> begint.
+
+  3. Ga met de cursor naar het einde van de correcte regel (NA de eerste  . ).
+
+  4. Tik  d$  om te wissen tot het einde van de regel.
+
+  ---> Iemand heeft het einde van deze regel dubbel getikt. dubbel getikt.
+
+  5. Ga naar les 2.3 voor uitleg.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.3: OVER OPERATOREN EN BEWEGINGEN
+
+  Veel commando's die de tekst veranderen, bestaan uit een operator en een
+  beweging. De samenstelling van een wis-commando met de operator  d  is:
+    d  beweging
+
+  Daarbij is:
+    d        - de wis-operator
+    beweging - het bereik waarop de operator werkt (zie het lijstje hieronder)
+
+  Een korte lijst van bewegingen vanaf de cursor:
+    w - tot het begin van het volgende woord, ZONDER het eerste teken daarvan.
+    e - tot het einde van het huidige woord, INCLUSIEF het laatste teken.
+    $ - tot het einde van de regel, INCLUSIEF het laatste teken.
+
+  Het tikken van  de  wist tekst vanaf de cursor tot het eind van het woord.
+
+  OPMERKING: Het intikken van alleen maar de beweging, zonder een operator,
+             in de opdrachtmodus beweegt de cursor (respectievelijk naar het
+             volgende woord, naar het eind van het huidige woord en naar het
+             eind van de regel).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.4: GEBRUIK VAN EEN TELLER BIJ EEN BEWEGING
+
+   ** Een getal voor een beweging herhaalt het zoveel keer. **
+
+  1. Ga naar de regel hieronder, die met ---> begint.
+
+  2. Tik  2w  zodat de cursor twee woorden vooruit gaat.
+
+  3. Tik  3e  zodat de cursor naar het einde van het derde woord gaat.
+
+  4. Tik  0  (nul) om naar het begin van de regel te gaan.
+
+  5. Herhaal de stappen 2 en 3 met andere getallen.
+
+  ---> Dit is een regel met woorden waarin je heen en weer kan bewegen.
+
+  6. Ga verder met les 2.5.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.5: GEBRUIK EEN TELLER OM MEER TE WISSEN
+
+  ** Een getal met een operator zorgt dat deze zoveel keer wordt herhaald. **
+
+  Bij de combinatie van wis-operator en beweging kan je voor de beweging een
+  teller zetten om meer te wissen:
+         d  [teller]  beweging
+
+  1. Ga naar het eerste woord in HOOFDLETTERS in de regel na --->.
+
+  2. Met  d2w  worden twee woorden (in dit voorbeeld in hoofdletters) gewist.
+
+  3. Herhaal de stappen 1 en 2 met verschillende tellers om de verschillende
+     woorden in hoofdletters met n commando te wissen.
+
+  ---> deze ABC DE regel FGHI JK LMN OP is QZ RS ontdaan van rommel.
+
+  OPMERKING: De teller kan ook aan het begin staan: d2w en 2dw werken allebei.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.6: BEWERKING VAN HELE REGELS
+
+               ** Tik  dd  om een hele regel te wissen. **
+
+  Omdat het wissen van een hele regel vaak voorkomt, besloten de ontwerpers
+  van Vi dat met het tikken van  dd  simpelweg een hele regel gewist wordt.
+
+  1. Ga met de cursor naar de tweede regel van de zinnetjes hieronder.
+
+  2. Tik  dd  om de regel te wissen.
+
+  3. Ga nu naar de vierde regel.
+
+  4. Tik  2dd  om twee regels te wissen.
+
+  --->  1)  Rozen zijn rood.
+  --->  2)  Modder is leuk.
+  --->  3)  Viooltjes zijn blauw.
+  --->  4)  Ik heb een auto.
+  --->  5)  De klok slaat de tijd.
+  --->  6)  Suiker is zoet.
+  --->  7)  En dat ben jij ook.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.7: HET COMMANDO HERSTEL
+
+  ** u  maakt het laatste commando ongedaan,  U  herstelt een hele regel. **
+
+  1. Ga met de cursor naar de regel hieronder met ---> en zet hem
+     op de eerste fout.
+
+  2. Tik  x  om het eerste ongewenste teken te wissen.
+
+  3. Tik nu  u  en maak daarmee het vorige commando ongedaan.
+
+  4. Herstel nu alle fouten in de regel met het  x  commando.
+
+  5. Tik een hoofdletter  U  om de regel in z'n oorspronkelijke staat terug
+     te brengen.
+
+  6. Tik nu een paar keer  u  en herstel daarmee de  U  en eerdere commando's.
+
+  7. Tik nu een paar keer CTRL-R (Ctrl-toets ingedrukt houden en R tikken) en
+     voer daarmee de commando's opnieuw uit: 'redo' oftewel 'undo de undo's'. 
+
+  ---> Heerstel de fouten inn deeze regel en brenng ze weer terugg met undo.
+
+  8. Dit zijn heel nuttige commando's. Ga verder met samenvatting van les 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 2
+
+  1. Wis van de cursor tot het volgende woord met    dw
+
+  2. Wis van de cursor tot het eind van de regel met d$
+
+  3. Wis de hele regel met                           dd
+
+  4. Herhaal een beweging door er een getal voor te zetten:  2w
+
+  5. De opbouw van een wijzigingscommando is:
+       operator  [getal]  beweging
+     daarbij is:
+       operator - wat er moet gebeuren, bijvoorbeeld  d  om te wissen
+       [getal]  - een (niet-verplichte) teller om 'beweging' te herhalen
+       beweging - een beweging door de te wijzigen tekst zoals w (woord)
+                  of $ (tot het einde van de regel) enz.
+
+  6. Ga naar het begin van de regel met nul:  0
+
+  7. Undo de voorgaande actie met              u (kleine letter)
+     Undo alle veranderingen in een regel met  U (hoofdletter)
+     Undo de undo's met                        CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.1: HET COMMANDO PLAK
+
+  ** Tik  p  ('put') en plak daarmee zojuist gewiste tekst na te cursor. **
+
+  1. Ga met de cursor naar de eerste regel met ---> hierna.
+
+  2. Wis de regel met  dd  en bewaar hem zodoende in een Vim-register.
+
+  3. Ga naar de c-regel, waar de gewiste regel ONDER moet komen.
+
+  4. Tik  p  om de regel terug te zetten onder de regel met de cursor.
+
+  5. Herhaal de stappen 2 tot 4 om de regels in de goede volgorde te zetten.
+
+---> d) Krijg je het ook onder de knie?
+---> b) Viooltjes zijn blauw,
+---> c) Begrip is te leren,
+---> a) Rozen zijn rood,
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.2: HET COMMANDO VERVANG
+
+  ** Tik rx ('replace') om het teken onder de cursor te vervangen door x. **
+
+  1. Ga naar de eerste regel hieronder met --->.
+
+  2. Zet de cursor op de eerste fout.
+
+  3. Tik  r  en dan het teken dat er hoort te staan.
+
+  4. Herhaal de stappen 2 en 3 tot de eerste regel gelijk is aan de tweede.
+
+  --->  Bij het tokken van dezf hegel heeft iemamd verklerde letters getikt.
+  --->  Bij het tikken van deze regel heeft iemand verkeerde letters getikt.
+
+  5. Ga nu naar les 3.3.
+
+  LET OP: Door het te doen, leer je beter dan door het uit je hoofd te leren.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.3: HET COMMANDO VERANDER
+
+     ** Tik  ce  om te veranderen tot het einde van een woord. **
+
+  1. Ga met de cursor naar de eerste regel hieronder met --->.
+
+  2. Zet de cursor op de  u  van ruch.
+
+  3. Tik  ce  en de juiste letters (in dit geval "egel").
+
+  4. Druk <ESC> en ga naar het volgende teken dat moet worden veranderd.
+
+  5. Herhaal de stappen 3 en 4 tot de eerste regel gelijk is aan de tweede.
+
+  ---> In deze ruch staan een paar weedrim die veranderd moud worden.
+  ---> In deze regel staan een paar woorden die veranderd moeten worden.
+
+  LET OP: Met  ce  wordt (het laatste deel van) een woord gewist en kom je
+          in de invoegmodus.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.4: MEER VERANDERINGEN MET c
+
+  1. Het commando verander ('change') werkt op dezelfde manier als wis. De
+     opbouw is:
+         c  [teller]  beweging
+
+  2. De bewegingen zijn hetzelfde, zoals  w  (woord) en  $  (einde regel).
+
+  3. Ga naar de eerste regel hieronder met --->.
+
+  4. Zet de cursor op de eerste fout.
+
+  5. Tik  c$  en tik de rest van de regel zodat hij gelijk wordt aan de
+     tweede en sluit af met <ESC>.
+
+  ---> Het einde van deze regel moet precies zo worden als de tweede regel.
+  ---> Het einde van deze regel moet gecorrigeerd worden met het commando c$.
+
+  OPMERKING: Je kan de toets <BACKSPACE> gebruiken om tikfouten te herstellen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 3 
+
+  1. Tik  p  om tekst terug te plakken, die zojuist is gewist. Dit zet de
+     gewiste tekst ACHTER de cursor (als een hele regel is gewist komt deze
+     op de regel ONDER de cursor.
+
+  2. Het teken waarop de cursor staat wordt vervangen met  r  gevolgd door
+     het teken dat je daar wilt hebben.
+
+  3. Het commando 'verander' stelt je in staat om tekst te veranderen vanaf
+     de cursor tot waar de 'beweging' je brengt. Dat wil zeggen: tik  ce  om
+     te veranderen vanaf de cursor tot het einde van het woord,  c$  om te
+     veranderen tot het einde van de regel.
+
+  4. De opbouw van het commando verander is:
+         c  [teller]  beweging
+
+  Ga nu naar de volgende les.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.1: PLAATS VAN DE CURSOR EN STATUS VAN HET BESTAND
+
+  ** CTRL-G laat zien waar (regelnummer) je je bevindt en wat de status van
+     het bestand is. Met [nummer] G  ga je naar een bepaalde regel. **
+
+  LET OP: Lees de hele les voordat je een stap uitvoert!!
+
+  1. Hou de Ctrl-toets ingedrukt en tik  g . Dit noemen we CTRL-G.
+     Onderaan de pagina verschijnt een boodschap met de bestandsnaam en de
+     positie in het bestand. Onthou het regelnummer voor stap 3.
+
+  OPMERKING: Als de optie 'ruler' aan staat, wordt de positie van de cursor
+             (regelnummer, kolom) steeds in de rechter-onderhoek van het
+             scherm vermeld. In dit geval vermeldt CTRL-G geen regelnummer.
+             CTRL-G geeft ook de status aan, namelijk of de tekst veranderd
+             is ('modified') sinds het de laatste keer is opgeslagen.  
+
+  2. Tik hoofdletter  G  om naar het einde van het bestand te gaan.
+     Tik  gg  om naar het begin van het bestand te gaan.
+
+  3. Tik het regelnummer waar je bij stap 1 was en daarna  G . Dit brengt je
+     terug naar de regel waar je was toen je de eerste keer CTRL-G tikte.
+
+  4. Voer de stappen 1 tot 3 uit als je dit goed hebt gelezen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.2: HET COMMANDO ZOEKEN
+
+  ** Met  /ZOEK  wordt naar de zoekterm (n of meer woorden) gezocht. **
+
+  1. Tik in de opdrachtmodus het teken  / . Je ziet dat het met de cursor
+     aan de onderkant van het scherm verschijnt, zoals bij het :-commando.
+
+  2. Tik nu 'ffouut' <ENTER>. Dit is het woord waarnaar gezocht wordt.
+
+  3. Tik  n  om verder te zoeken met dezelfde zoekterm.
+     Zoek met  N  met dezelfde zoekterm in de tegenovergestelde richting.
+
+  4. Zoek in achterwaartse richting met ?zoekterm in plaats van  / .
+
+  5. Keer terug naar de vorige hit met CTRL-O (hou Ctrl-toets ingedrukt en
+     tik letter o). Herhaal om verder terug te gaan. CTRL-I gaat vooruit.
+
+  ---> "ffouut" is niet de juiste spelling van fout, ffouut is een fout.
+
+  OPMERKING: Als zoeken het einde van het bestand bereikt, wordt vanaf het
+             begin doorgezocht, tenzij de optie 'wrapscan' is uitgeschakeld.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.3: GA NAAR CORRESPONDERENDE HAAKJES
+
+            ** Tik  %  om naar corresponderende ), ] of } te gaan. **
+
+  1. Zet de cursor op een (, [ of { in de regel hieronder met --->.
+
+  2. Tik dan het teken  % .
+
+  3. De cursor gaan naar het overeenkomstige haakje.
+
+  4. Met opnieuw  %  gaat de cursor terug naar het eerste haakje.
+
+  5. Plaats de cursor op een ander haakje en bekijk wat  %  doet.
+
+  ---> Dit ( is een testregel met  ('s, ['s ] en {'s } erin. ))
+
+  OPMERKING: Dit is nuttig bij het debuggen van een programma waarin haakjes
+             niet corresponderen. Met de optie 'showmatch' wordt ook
+             aangegeven of haakjes corresponderen, maar de cursor wordt niet
+             (blijvend) verplaatst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.4: HET VERVANG COMMANDO
+
+      ** Tik  :s/oud/nieuw/g  om 'oud' door 'nieuw' te vervangen. **
+
+  1. Ga met de cursor naar de regel hieronder met --->.
+
+  2. Tik  :s/dee/de <ENTER>. Zoals je ziet, vervangt ('substitute') dit
+     commando alleen de eerste "dee" in de regel.
+
+  3. Tik nu  :s/dee/de/g . Met de g-vlag ('global') wordt elke "dee" in de
+     regel vervangen.
+
+  ---> dee beste tijd om dee bloemen te zien is in dee lente.
+
+  4. Om in (een deel van) een tekst elk 'oud' te vervangen door 'nieuw':
+     tik   :#,#s/oud/nieuw/g   waar #,# de regelnummers zijn die het gebied
+                               begrenzen waarin wordt vervangen.
+     tik   :%s/oud/nieuw/g     om alles te vervangen in het hele bestand.
+     tik   :%s/oud/nieuw/gc    om elke 'oud' in het hele bestand te vinden
+                               en te vragen of er vervangen moet worden.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 4
+
+  1. CTRL-G   laat positie in het bestand zien en de status van het bestand.
+     G        verplaatst je naar het einde van het bestand.
+     nummer G verplaatst je naar regelnummer.
+     gg       verplaatst je naar de eerste regel.
+
+  2. Met  /  en een zoekterm wordt VOORWAARTS gezocht naar de term.
+     Met  ?  en een zoekterm wordt ACHTERWAARTS gezocht naar de term.
+     Tik  n  na een zoekopdracht om de volgende hit te vinden,
+     of tik  N  om in de andere richting te zoeken.
+     CTRL-O  brengt je naar eerdere hit,  CTRL-I naar nieuwere.
+
+  3. Tik  %  terwijl de cursor op een haakje ([{}]) staat, om naar het
+     corresponderende haakje te gaan.
+
+  4. :s/oud/nieuw      vervangt het eerste 'oud' in een regel door 'nieuw'.
+     :s/oud/nieuw/g    vervangt elk 'oud' in een regel door 'nieuw'.
+     :#,#s/oud/nieuw/g vervangt elk 'oud' door 'nieuw' tussen de regelnummers.
+     :%s/oud/nieuw/g    vervangt elk 'oud' door 'nieuw' in het hele bestand.
+     Voeg  c  toe (:%s/oud/nieuw/gc) om elke keer om bevestiging
+     ('confirmation') te vragen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.1: HOE EEN EXTERN COMMANDO WORDT UITGEVOERD
+
+     ** Tik  :!  gevolgd door een extern commando om dat uit te voeren. **
+
+  1. Tik het commando  :  waarmee de cursor op de onderste regel van het
+     scherm komt te staan. Nu kan je een opdracht geven via de commando-regel.
+
+  2. Tik een  !  (uitroepteken). Dit stelt je in staat om elk shell-commando
+     uit te voeren.
+
+  3. Tik bijvoorbeeld  ls  na het uitroepteken en daarna <ENTER>. Hiermee
+     krijg je de inhoud van je map te zien, net alsof je de opdracht gaf
+     vanaf de shell-prompt. Probeer  :!dir  als het niet werkt.
+
+  OPMERKING: Elk extern commando kan op deze manier uitgevoerd worden, ook
+             met argumenten.
+
+  OPMERKING: Alle commando's na  :  moeten worden afgesloten met <ENTER>.
+             Vanaf nu zullen we dat niet meer altijd vermelden.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.2: MEER OVER HET OPSLAAN VAN BESTANDEN
+
+     ** Tik :w BESTANDSNAAM om de tekst mt veranderingen op te slaan. **
+
+  1. Tik  :!dir  of  :!ls  om de inhoud van je map te tonen. Je weet
+     inmiddels dat je daarna een <ENTER> moet tikken.
+
+  2. Kies een bestandsnaam die nog niet bestaat, bijvoorbeeld TEST.
+
+  3. Tik nu:  :w TEST  (als je de naam TEST hebt gekozen).
+
+  4. Hierdoor wordt het hele bestand (de VIM lessen) opgeslagen onder de
+     naam TEST. Tik weer  :!dir  of  :!ls  om dit te controleren.
+
+  OPMERKING: Als je Vim zou verlaten en opnieuw zou starten met  vim TEST  is
+             het bestand een exacte kopie van de lessen, zoals je ze opsloeg.
+
+  5. Wis het bestand nu met de opdracht (MS-DOS)  :!del TEST
+                                       of (Unix)  :!rm TEST
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.3: EEN DEEL VAN DE TEKST OPSLAAN
+
+     ** Sla een deel van het bestand op met  v beweging :w BESTANDSNAAM **
+
+  1. Ga naar deze regel.
+
+  2. Tik  v  en ga met de cursor naar stap 5 hieronder. Je ziet dat de
+     tekst oplicht.
+
+  3. Tik  : . Onderaan het scherm zal  :'<,'>  verschijnen.
+
+  4. Tik  w TEST  , waar TEST een bestandsnaam is, die nog niet bestaat.
+     Controleer dat je  :'<,'>w TEST  ziet staan voordat je <ENTER> tikt.
+
+  5. Vim slaat nu de geselecteerde regels op in het bestand TEST. Met
+     :!dir  of  !ls  kan je dat zien. Wis het nog niet! We zullen het in
+     de volgende les gebruiken.
+
+  OPMERKING: Het tikken van  v  zet zichtbare modus ('visual selection') aan.
+             Je kan de cursor rondbewegen om de selectie groter of kleiner
+             te maken. Vervolgens kan je een commando gebruiken om iets met
+             de tekst te doen. Met  d  bijvoorbeeld wis je de tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.4: OPHALEN EN SAMENVOEGEN VAN BESTANDEN
+
+     ** Tik  :r BESTANDSNAAM om de inhoud van een bestand in te voegen. **
+
+  1. Zet de cursor precies boven deze regel.
+
+  OPMERKING: Na het uitvoeren van stap 2 zie je tekst van les 5.3. Scrol
+             daarna naar beneden om deze les weer te zien.
+
+  2. Haal nu het bestand TEST op met het commando  :r TEST .
+     Het bestand dat je ophaalt komt onder de regel waarin de cursor staat.
+
+  3. Controleer dat er een bestand is opgehaald. Ga met de cursor omhoog.
+     Dan zie je de tekst van les 5.3 dubbel, het origineel en de versie uit
+     het bestand.
+
+  OPMERKING: Je kan ook de uitvoer van een extern commando inlezen. Om een
+             voorbeeld te geven:  :r !ls  leest de uitvoer van het commando
+             ls en zet dat onder de regel waarin de cursor staat.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 5
+
+  1. :!COMMANDO  voert een extern commando uit.
+     Enkele bruikbare voorbeelden zijn:
+        (MS-DOS)         (Unix)
+         :!dir            :!ls          - laat de inhoud van een map zien
+         :!del BESTAND    :!rm BESTAND  - wist bestand BESTAND
+
+  2. :w BESTANDSNAAM  schrijft het huidige Vim-bestand naar disk met de
+     naam BESTANDSNAAM.
+
+  3. v beweging :w BESTANDSNAAM  laat je in zichtbare modus een fragment
+     selecteren, dat wordt opgeslagen in het bestand BESTANDSNAAM.
+
+  4. :r BESTANDSNAAM  haalt het bestand BESTANDSNAAM op en voegt het onder
+     de cursor-positie in de tekst in.
+
+  5. :r !dir  leest de uitvoer van het externe commando dir en zet het onder
+     de cursor-positie.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.1: HET COMMANDO OPEN
+
+     ** Tik  o  om een regel onder de cursor te openen in invoegmodus. **
+
+  1. Ga naar de eerste regel beneden met --->.
+
+  2. Tik de kleine letter  o  en open daarmee een regel ONDER de cursor en
+     ga naar de invoegmodus.
+
+  3. Tik wat tekst in en sluit af met <ESC> om de invoegmodus te verlaten.
+
+  ---> Als je  o  tikt, komt de cursor in een nieuwe regel in invoegmodus.
+
+  4. Om een regel BOVEN de cursor te openen, moet je gewoon een hoofdletter
+     O  tikken in plaats van een kleine letter. Probeer dat vanaf de volgende
+     regel.
+
+  ---> Open een regel hierboven. Tik een O terwijl de cursor hier staat.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.2: HET COMMANDO TOEVOEGEN
+
+        ** Tik  a  om tekst toe te voegen ACHTER de cursor. **
+
+  1. Ga naar het begin van de regel beneden met --->.
+ 
+  2. Tik  e  tot de cursor op het einde van  "ste"  staat.
+
+  3. Tik een (kleine letter)  a  ('append') om toe te voegen ACHTER de cursor.
+
+  4. Vul het woord aan zoals in de volgende regel. Druk <ESC> om de
+     invoegmodus te verlaten.
+
+  5. Ga met  e  naar het einde van het volgende onvolledige woord en herhaal
+     de stappen 3 en 4.
+
+  ---> Deze regel ste je in staat om te oef in het toevo van tekst. 
+       Deze regel stelt je in staat om te oefenen in het toevoegen van tekst. 
+
+  OPMERKING: a, i en A openen allemaal dezelfde invoegmodus, het enige
+             verschil is waar tekens worden ingevoegd.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.3: VERVANGEN OP EEN ANDERE MANIER
+
+      ** Tik een hoofdletter  R  om meer dan n teken te vervangen. **
+
+  1. Ga naar de eerste regel beneden met --->. Ga met de cursor naar het
+     begin van de eerste  "xxx" .
+
+  2. Tik nu  R  en daarna het getal eronder in de tweede regel, zodat  xxx
+     wordt vervangen.
+
+  3. Druk <ESC> om de vervangmodus te verlaten. Je ziet dat de rest van de
+     regel ongewijzigd blijft.
+
+  4. Herhaal de stappen om de overgebleven  xxx  te vervangen.
+
+  ---> Optellen van 123 en xxx geeft je xxx.
+  ---> Optellen van 123 en 456 geeft je 579.
+
+  OPMERKING: Vervangmodus lijkt op invoegmodus, maar elk teken dat je tikt,
+             vervangt een bestaand teken.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.4: TEKST KOPIREN EN PLAKKEN
+
+        ** Gebruik  y  om tekst te kopiren en  p  om te plakken. **
+
+  1. Ga naar de regel beneden met ---> en zet de cursor achter "a)".
+
+  2. Zet zichtbare modus aan met  v  en zet de cursor juist voor "eerste".
+
+  3. Tik  y  ('yank') om de opgelichte tekst ("dit is het") te kopiren.
+
+  4. Ga met  j$  met de cursor naar het einde van de volgende regel.
+
+  5. Plak de gekopieerde tekst met  p  en tik  a tweede <ESC>.
+
+  6. Selecteer in zichtbare modus "onderdeel", kopieer het met  y  en
+     ga met  j$  naar het einde van de tweede regel. Plak de tekst daar
+     met  p .
+
+  --->  a) dit is het eerste onderdeel
+        b)
+
+  OPMERKING: Je kan  y  ook als operator gebruiken;  yw  kopieert een woord,
+             yy  een hele regel.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.5: OPTIES GEBRUIKEN
+
+     ** Gebruik een optie voor al dan niet hoofdlettergevoelig zoeken. **
+
+  1. Zoek naar 'hoofdlettergevoelig' met  /hoofdlettergevoelig <ENTER>
+     Herhaal het zoeken enkele keren door  n  te tikken.
+ 
+  2. Schakel de optie 'ic' ('ignore case', niet-hoofdlettergevoelig) in
+     met  :set ic
+
+  3. Zoek met  n  opnieuw naar 'hoofdlettergevoelig'. Je ziet dat
+     Hoofdlettergevoelig en HOOFDLETTERGEVOELIG nu ook gevonden worden.
+
+  4. Schakel de opties 'hlsearch' (treffers oplichten) en 'incsearch' (toon
+     gedeeltelijke treffers bij intikken) in met  :set hls is
+
+  5. Tik weer /hoofdlettergevoelig <ENTER> en kijk wat er gebeurt.
+
+  6. Schakel 'hoofdlettergevoelig' weer in met  :set noic
+
+  OPMERKING: Schakel het oplichten van treffers uit met  :nohlsearch
+
+  OPMERKING: Om bij een enkel zoek-commando de hoofdlettergevoeligheid om
+             te draaien kan  \c  worden gebruikt na de zoekterm:
+             /hoofdlettergevoelig\c <ENTER>.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 6
+
+  1. Tik  o  om een regel te openen ONDER de cursor en invoegmodus te starten.
+     Tik  O  om een regel te openen BOVEN de cursor.
+
+  2. Tik  a  om tekst toe te voegen NA de cursor.
+     Tik  A  om tekst toe te voegen aan het einde van de regel.
+
+  3. Het commando  e  beweegt de cursor naar het einde van een woord.
+
+  4. De operator  y  yankt (kopieert) tekst,  p  zet het terug (plakt).
+
+  5. Met hoofdletter  R  wordt de vervangmodus geopend, met <ESC> afgesloten.
+
+  6. Met  :set xxx  wordt optie 'xxx' ingeschakeld. Opties zijn bijvoorbeeld:
+       ic   ignorecase  geen verschil hoofdletters/kleine letters bij zoeken
+       is   incsearch   toon gedeeltelijke treffers tijdens intikken zoekterm 
+       hls  hlsearch    laat alle treffers oplichten
+     Je kan zowel de lange als de korte naam van een optie gebruiken.
+  
+  7. Zet 'no' voor de naam om een optie uit te schakelen:  :set noic
+     schakelt 'ic' uit.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.1: HULP INROEPEN
+
+           ** Het gebruik van ingebouwde hulp. **
+
+  Vim heeft een uitgebreid ingebouwd hulpsysteem. Probeer, om te beginnen,
+  n van deze drie:
+    - druk de <HELP> toets (als je die hebt)
+    - druk de <F1> toets (als je die hebt)
+    - tik  :help <ENTER>
+
+  Lees de tekst in het help-venster om te leren hoe 'help' werkt.
+  Tik  CTRL-W CTRL-W  om van het ene venster naar het andere te gaan.
+  Met  :q <ENTER>  wordt het help-venster gesloten.
+
+  Je kan hulp vinden over nagenoeg elk onderwerp door een argument aan het
+  commando  :help  toe te voegen. Probeer deze (en vergeet <ENTER> niet):
+    :help w
+    :help c_CTRL-D
+    :help insert-index
+    :help user-manual
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.2: SCHRIJF EEN CONFIGURATIEBESTAND
+
+                    ** Mogelijkheden van Vim uitbreiden. **
+
+  Vim kent veel meer mogelijkheden dan Vi, maar de meeste zijn standaard
+  uitgeschakeld. Om meer functies te gebruiken moet je een 'vimrc'-bestand
+  schrijven.
+
+  1. Bewerk het bestand 'vimrc'. Hoe dat moet hangt af van je systeem:
+      :e ~/.vimrc		voor Unix
+      :e $VIM/_vimrc		voor MS-Windows
+
+  2. Lees de inhoud van het voorbeeld-bestand:
+      :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Sla het bestand op met  :w
+
+  De volgende keer dat je Vim start wordt 'syntaxiskleuring' gebruiken.
+  Je kan al je voorkeursinstellingen toevoegen aan dit 'vimrc'-bestand.
+  Tik  :help vimrc-intro  voor meer informatie.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.3: AANVULLEN
+
+      ** Aanvullen van de 'command line' met CTRL-D en <TAB>. **
+
+  1. Zorg dat Vim niet in 'compatible mode' is met  :set nocp
+
+  2. Kijk welke bestanden zich in de map bevinden met  :!ls  of  :!dir
+
+  3. Tik het begin van een commando:  :e
+
+  4. Met  CTRL-D  toont Vim een lijst commando's, die met "e" beginnen.
+
+  5. Druk enkele keren <TAB>. Vim laat aanvullingen zien, zoals ":edit",
+     dat we hier gebruiken.
+
+  6. Voeg een spatie toe en de eerste letter(s) van een bestaande
+     bestandsnaam:  :edit BESTAND
+
+  7. Druk <TAB>. Vim vult de naam aan (als hij uniek is).
+
+  OPMERKING: Aanvullen werkt bij tal van commando's. Probeer gewoon CTRL-D
+             en <TAB>. Het is bijzonder nuttig bij  :help .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 7
+
+  1. Tik  :help  of druk <F1> of <Help>  om een help-venster te openen.
+
+  2. Tik  :help CMD  voor hulp over  CMD .
+
+  3. Tik  CTRL-W CTRL-W  om naar een ander venster te gaan.
+
+  4. Tik  :q  om het help-venster te sluiten.
+
+  5. Maak een bestand met de naam 'vimrc' voor je voorkeursinstellingen.
+
+  6. Druk CTRL-D tijdens het intikken van een :-commando om mogelijke
+     aanvullingen te zien. Druk <TAB> om aanvullen te gebruiken.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Hiermee komen de Vim-lessen tot een einde. Ze waren bedoeld om een kort
+  overzicht te geven van de Vim-editor, juist voldoende om de editor
+  redelijk makkelijk te gebruiken. Deze lessen zijn verre van volledig. Vim
+  kent veel meer commando's. Lees hierna de handleiding voor gebruikers:
+  ":help user-manual".
+
+  Voor verdere studie wordt aanbevolen:
+      Vim - Vi Improved - door Steve Oualline
+      Uitgever: New Riders
+  Dit is het eerste boek dat geheel aan Vim is gewijd. Speciaal geschikt
+  voor beginners. Met veel voorbeelden en afbeeldingen.
+  Zie http://iccf-holland.org/click5.html
+
+  Het volgende boek is ouder en gaat meer over Vi dan Vim, maar het wordt
+  toch aanbevolen:
+      Learning the Vi Editor - door Linda Lamb
+      Uitgever: O'Reilly & Associates Inc.
+  Het is een goed boek om nagenoeg alles te weten te komen dat je met Vi
+  zou willen doen. De zesde en vooral de nieuwe zevende druk (onder de
+  titel Learning the Vi and Vim Editors door Arnold Robbins, Elbert Hannah
+  & Linda Lamb) bevat ook informatie over Vim.
+
+  Deze lessen zijn geschreven door Michael C. Pierce en Robert K. Ware,
+  Colorado School of Mines met gebruikmaking van ideen van Charles Smith
+  van de Colorado State University. E-mail: bware@mines.colorado.edu.
+
+  Aangepast voor Vim door Bram Moolenaar.
+
+  Nederlandse vertaling door Rob Bishoff, april 2012
+  e-mail: rob.bishoff@hccnet.nl)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.nl.utf-8 vim73/runtime/tutor/tutor.nl.utf-8
--- vim73.orig/runtime/tutor/tutor.nl.utf-8	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/tutor/tutor.nl.utf-8	2013-08-04 19:09:09.960612480 +0000
@@ -0,0 +1,950 @@
+  ==========================================================================
+  =    W e l k o m   b i j   d e   V I M   l e s s e n   -   Versie 1.7    =
+  ==========================================================================
+
+  Vim is een krachtige editor met veel commando's, te veel om uit te leggen
+  in lessen zoals deze. Deze lessen zijn bedoeld om voldoende commando's te
+  behandelen om je in staat te stellen met Vim te werken als een editor voor
+  algemeen gebruik.
+
+  Deze lessen zullen 25 tot 30 minuten in beslag nemen, afhankelijk van de
+  tijd die wordt besteed aan het uitproberen van de commando's.
+
+  LET OP:
+  Door de commando's in deze lessen verandert de tekst. Maak een kopie van
+  dit bestand om mee te oefenen (als je "vimtutor" uitvoerde, is dit al een
+  kopie).
+
+  Deze lessen zijn bedoeld om al doende te leren. Dat betekent dat je de
+  commando's moet uitvoeren om ze goed te leren kennen. Als je de tekst
+  alleen maar doorleest, zal je de commando's niet leren!
+
+  Zorg ervoor dat de <Caps Lock> toets NIET is ingedrukt en druk vaak genoeg
+  op de j-toets om de cursor zo te bewegen dat les 1.1 volledig op het
+  scherm staat.
+
+  LET OP: In deze lessen worden omwille van de duidelijkheid vaak spaties
+  gebruikt binnen een commando (bv. "40 G" of "operator [getal] beweging").
+  Tik deze spaties echter NIET. Ze verstoren de werking.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.1:  VERPLAATS DE CURSOR
+
+  ** De cursor wordt verplaatst met de toetsen h, j, k, l zoals aangegeven. **
+          ^
+          k       Hint:  De h is de meest linkse en beweegt naar links.
+      < h   l >          De l is de meest rechtse en beweegt naar rechts.
+          j              De j lijkt op een pijl naar beneden.
+          v
+
+  1. Beweeg de cursor over het scherm om er vertrouwd mee te raken.
+
+  2. Druk de omlaag-toets (j) tot hij repeteert.
+     Nu weet je hoe je de volgende les bereikt.
+
+  3. Gebruik de omlaag-toets om naar les 1.2 te gaan.
+
+  OPMERKING: Als je twijfelt aan wat je tikte, druk <ESC> om in de opdracht-
+             modus te komen. Tik daarna het commando dat bedoeld wordt.
+
+  OPMERKING: Pijltjes-toetsen werken ook. Met de hjkl-toetsen kan je sneller
+             rondbewegen, als je er eenmaal aan gewend bent. Echt waar!
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.2: VIM AFSLUITEN
+
+      !! LET OP: Lees deze les goed door voordat je iets uitvoert!!
+
+  1. Druk de <ESC> toets (om zeker in de opdrachtmodus te zitten).
+
+  2. Tik   :q! <ENTER>
+     Hiermee wordt de editor afgesloten. Alle veranderingen gaan VERLOREN.
+
+  3. Nu zie je de shell-prompt. Tik het commando waarmee je deze lessen
+     hebt opgeroepen. Dat is normaal gesproken:  vimtutor <ENTER>
+
+  4. Als je deze stappen goed hebt doorgelezen, voer dan de stappen 1 tot 3
+     uit om de editor te verlaten en weer op te starten.
+
+  LET OP: :q! <ENTER> verwerpt alle veranderingen die je aanbracht. Een paar
+          lessen verder zal je leren hoe veranderingen worden opgeslagen in
+          een bestand.
+
+  5. Beweeg de cursor omlaag naar les 1.3.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.3: TEKST BEWERKEN - WISSEN
+
+          ** Tik  x  om het teken onder de cursor te wissen. **
+
+  1. Ga met de cursor naar de regel verderop met --->.
+
+  2. Zet de cursor op een teken dat moet worden gewist om een fout te
+     herstellen.
+
+  3. Tik  x  om het ongewenste teken te wissen.
+
+  4. Herhaal deze stappen tot de regel goed is.
+
+  ---> Vi kkent eenn opdracccchtmodus en een invooegmmmmodus.
+
+  5. Nu de regel gecorrigeerd is kan je naar les 1.4 gaan.
+
+  LET OP: Probeer de lessen niet uit je hoofd te leren. Leer al doende.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.4: TEKST BEWERKEN - INVOEGEN
+
+              ** Tik  i  ('insert') om tekst in te voegen. **
+
+  1. Ga met de cursor naar de eerste regel verderop met --->.
+
+  2. Maak de eerste regel gelijk aan de tweede. Zet daarvoor de cursor op
+     de plaats waar tekst moet worden ingevoegd.
+
+  3. Tik  i  en daarna de nodige aanvullingen.
+
+  4. Tik <ESC> na elke herstelde fout om terug te keren in de opdrachtmodus.
+     Herhaal de stappen 2 tot 4 om de zin te verbeteren.
+
+  ---> Aan regel ontekt wat .
+  ---> Aan deze regel ontbreekt wat tekst.
+
+  5. Ga naar les 1.5 als je gewend bent aan het invoegen van tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.5: TEKST BEWERKEN - TOEVOEGEN
+
+             ** Tik  A  ('append') om tekst toe te voegen. **
+
+  1. Ga met de cursor naar de eerste regel verderop met --->.
+     Het maakt niet uit waar de cursor in deze regel staat.
+
+  2. Tik hoofdletter  A  en tik de nodige aanvullingen.
+
+  3. Tik <ESC> nadat de tekst is aangevuld. Zo keer je terug in de
+     opdrachtmodus.
+
+  4. Ga naar de tweede regel verderop met ---> en herhaal stap 2 en 3
+     om deze zin te corrigeren.
+
+  ---> Er ontbreekt wat tekst aan de
+       Er ontbreekt wat tekst aan deze regel.
+  ---> Hier ontbreekt ook w
+       Hier ontbreekt ook wat tekst.
+
+  5. Ga naar les 1.6 als je vertrouwd bent geraakt aan het toevoegen
+     van tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 1.6: EEN BESTAND EDITTEN
+
+    ** Gebruik  :wq  om een bestand op te slaan en de editor te verlaten. **
+
+  !! LET OP: Lees deze les helemaal door voordat je een van de volgende
+             stappen uitvoert!!
+
+  1. Verlaat deze les zoals je in les 1.2 deed:  :q!
+     Of gebruik een andere terminal als je daar de beschikking over hebt. Doe
+     daar het volgende.
+
+  2. Tik het volgende commando na de shell-prompt:  vim les <ENTER>
+     'vim' (vaak ook 'vi') is het commando om de Vim-editor te starten,
+     'les' is de naam van het bestand, dat je gaat bewerken. Kies een andere
+     naam als er al een bestand 'les' bestaat, dat niet veranderd mag worden.
+
+  3. Voeg naar eigen keus tekst toe, zoals je geleerd hebt in eerdere lessen.
+
+  4. Sla het bestand met de wijzigingen op en verlaat Vim met  :wq <ENTER>
+
+  5. Herstart vimtutor als je deze bij stap 1 hebt verlaten en ga verder met
+     de volgende samenvatting.
+
+  6. Voer deze stappen uit nadat je ze hebt gelezen en begrepen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 1
+
+  1. De cursor wordt bewogen met de pijltjestoetsen of de hjkl-toetsen.
+       h (links)   j (omlaag)  k (omhoog)  l (rechts)
+
+  2. Start Vim van de shell-prompt. Tik:  vim BESTANDSNAAM <ENTER>
+
+  3. Sluit Vim af met  <ESC> :q! <ENTER>  om de veranderingen weg te gooien.
+               OF tik  <ESC> :wq <ENTER>  om de veranderingen te bewaren.
+
+  4. Wis het teken onder de cursor met:  x
+
+  5. Invoegen of toevoegen van tekst, tik:
+     i  en daarna de in te voegen tekst  <ESC>   voeg in vanaf de cursor
+     A  en daarna de toe te voegen tekst  <ESC>  voeg toe achter de regel
+
+  OPMERKING: Met <ESC> kom je terug in opdrachtmodus en wordt een ongewenst
+             of gedeeltelijk uitgevoerd commando afgebroken.
+
+  Ga nu verder met les 2.1.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.1: WIS-COMMANDO'S
+
+       ** Tik  dw  ('delete word') om een woord te wissen. **
+
+  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
+
+  2. Ga naar de regel hieronder, die met ---> begint.
+
+  3. Ga met de cursor naar het begin van een woord dat moet worden gewist.
+
+  4. Met het tikken van  dw  verdwijnt het woord.
+
+  OPMERKING: De letter  d  verschijnt op de laatste regel van het scherm
+             zodra je hem tikt. Vim is aan het wachten tot je de  w  tikt.
+             Als je een ander teken dan  d  ziet, heb je iets verkeerds
+             getikt. Druk op <ESC> en begin opnieuw.
+
+  NOG EEN OPMERKING: Dit werkt alleen als de optie 'showcmd' is ingeschakeld.
+                     Dat gebeurt met  :set showcmd <ENTER>
+
+  ---> Er zijn een het paar ggg woorden, die niet in deze len zin thuishoren.
+
+  5. Herhaal de stappen 3 en 4 tot de zin goed is en ga naar les 2.2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.2: MEER WIS-COMMANDO'S
+
+        ** Tik  d$  om te wissen tot het einde van de regel. **
+
+  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
+
+  2. Ga naar de regel hieronder, die met ---> begint.
+
+  3. Ga met de cursor naar het einde van de correcte regel (NA de eerste  . ).
+
+  4. Tik  d$  om te wissen tot het einde van de regel.
+
+  ---> Iemand heeft het einde van deze regel dubbel getikt. dubbel getikt.
+
+  5. Ga naar les 2.3 voor uitleg.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.3: OVER OPERATOREN EN BEWEGINGEN
+
+  Veel commando's die de tekst veranderen, bestaan uit een operator en een
+  beweging. De samenstelling van een wis-commando met de operator  d  is:
+    d  beweging
+
+  Daarbij is:
+    d        - de wis-operator
+    beweging - het bereik waarop de operator werkt (zie het lijstje hieronder)
+
+  Een korte lijst van bewegingen vanaf de cursor:
+    w - tot het begin van het volgende woord, ZONDER het eerste teken daarvan.
+    e - tot het einde van het huidige woord, INCLUSIEF het laatste teken.
+    $ - tot het einde van de regel, INCLUSIEF het laatste teken.
+
+  Het tikken van  de  wist tekst vanaf de cursor tot het eind van het woord.
+
+  OPMERKING: Het intikken van alleen maar de beweging, zonder een operator,
+             in de opdrachtmodus beweegt de cursor (respectievelijk naar het
+             volgende woord, naar het eind van het huidige woord en naar het
+             eind van de regel).
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.4: GEBRUIK VAN EEN TELLER BIJ EEN BEWEGING
+
+   ** Een getal voor een beweging herhaalt het zoveel keer. **
+
+  1. Ga naar de regel hieronder, die met ---> begint.
+
+  2. Tik  2w  zodat de cursor twee woorden vooruit gaat.
+
+  3. Tik  3e  zodat de cursor naar het einde van het derde woord gaat.
+
+  4. Tik  0  (nul) om naar het begin van de regel te gaan.
+
+  5. Herhaal de stappen 2 en 3 met andere getallen.
+
+  ---> Dit is een regel met woorden waarin je heen en weer kan bewegen.
+
+  6. Ga verder met les 2.5.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.5: GEBRUIK EEN TELLER OM MEER TE WISSEN
+
+  ** Een getal met een operator zorgt dat deze zoveel keer wordt herhaald. **
+
+  Bij de combinatie van wis-operator en beweging kan je voor de beweging een
+  teller zetten om meer te wissen:
+         d  [teller]  beweging
+
+  1. Ga naar het eerste woord in HOOFDLETTERS in de regel na --->.
+
+  2. Met  d2w  worden twee woorden (in dit voorbeeld in hoofdletters) gewist.
+
+  3. Herhaal de stappen 1 en 2 met verschillende tellers om de verschillende
+     woorden in hoofdletters met één commando te wissen.
+
+  ---> deze ABC DE regel FGHI JK LMN OP is QZ RS ontdaan van rommel.
+
+  OPMERKING: De teller kan ook aan het begin staan: d2w en 2dw werken allebei.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.6: BEWERKING VAN HELE REGELS
+
+               ** Tik  dd  om een hele regel te wissen. **
+
+  Omdat het wissen van een hele regel vaak voorkomt, besloten de ontwerpers
+  van Vi dat met het tikken van  dd  simpelweg een hele regel gewist wordt.
+
+  1. Ga met de cursor naar de tweede regel van de zinnetjes hieronder.
+
+  2. Tik  dd  om de regel te wissen.
+
+  3. Ga nu naar de vierde regel.
+
+  4. Tik  2dd  om twee regels te wissen.
+
+  --->  1)  Rozen zijn rood.
+  --->  2)  Modder is leuk.
+  --->  3)  Viooltjes zijn blauw.
+  --->  4)  Ik heb een auto.
+  --->  5)  De klok slaat de tijd.
+  --->  6)  Suiker is zoet.
+  --->  7)  En dat ben jij ook.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 2.7: HET COMMANDO HERSTEL
+
+  ** u  maakt het laatste commando ongedaan,  U  herstelt een hele regel. **
+
+  1. Ga met de cursor naar de regel hieronder met ---> en zet hem
+     op de eerste fout.
+
+  2. Tik  x  om het eerste ongewenste teken te wissen.
+
+  3. Tik nu  u  en maak daarmee het vorige commando ongedaan.
+
+  4. Herstel nu alle fouten in de regel met het  x  commando.
+
+  5. Tik een hoofdletter  U  om de regel in z'n oorspronkelijke staat terug
+     te brengen.
+
+  6. Tik nu een paar keer  u  en herstel daarmee de  U  en eerdere commando's.
+
+  7. Tik nu een paar keer CTRL-R (Ctrl-toets ingedrukt houden en R tikken) en
+     voer daarmee de commando's opnieuw uit: 'redo' oftewel 'undo de undo's'. 
+
+  ---> Heerstel de fouten inn deeze regel en brenng ze weer terugg met undo.
+
+  8. Dit zijn heel nuttige commando's. Ga verder met samenvatting van les 2.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 2
+
+  1. Wis van de cursor tot het volgende woord met    dw
+
+  2. Wis van de cursor tot het eind van de regel met d$
+
+  3. Wis de hele regel met                           dd
+
+  4. Herhaal een beweging door er een getal voor te zetten:  2w
+
+  5. De opbouw van een wijzigingscommando is:
+       operator  [getal]  beweging
+     daarbij is:
+       operator - wat er moet gebeuren, bijvoorbeeld  d  om te wissen
+       [getal]  - een (niet-verplichte) teller om 'beweging' te herhalen
+       beweging - een beweging door de te wijzigen tekst zoals w (woord)
+                  of $ (tot het einde van de regel) enz.
+
+  6. Ga naar het begin van de regel met nul:  0
+
+  7. Undo de voorgaande actie met              u (kleine letter)
+     Undo alle veranderingen in een regel met  U (hoofdletter)
+     Undo de undo's met                        CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.1: HET COMMANDO PLAK
+
+  ** Tik  p  ('put') en plak daarmee zojuist gewiste tekst na te cursor. **
+
+  1. Ga met de cursor naar de eerste regel met ---> hierna.
+
+  2. Wis de regel met  dd  en bewaar hem zodoende in een Vim-register.
+
+  3. Ga naar de c-regel, waar de gewiste regel ONDER moet komen.
+
+  4. Tik  p  om de regel terug te zetten onder de regel met de cursor.
+
+  5. Herhaal de stappen 2 tot 4 om de regels in de goede volgorde te zetten.
+
+---> d) Krijg je het ook onder de knie?
+---> b) Viooltjes zijn blauw,
+---> c) Begrip is te leren,
+---> a) Rozen zijn rood,
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.2: HET COMMANDO VERVANG
+
+  ** Tik rx ('replace') om het teken onder de cursor te vervangen door x. **
+
+  1. Ga naar de eerste regel hieronder met --->.
+
+  2. Zet de cursor op de eerste fout.
+
+  3. Tik  r  en dan het teken dat er hoort te staan.
+
+  4. Herhaal de stappen 2 en 3 tot de eerste regel gelijk is aan de tweede.
+
+  --->  Bij het tokken van dezf hegel heeft iemamd verklerde letters getikt.
+  --->  Bij het tikken van deze regel heeft iemand verkeerde letters getikt.
+
+  5. Ga nu naar les 3.3.
+
+  LET OP: Door het te doen, leer je beter dan door het uit je hoofd te leren.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.3: HET COMMANDO VERANDER
+
+     ** Tik  ce  om te veranderen tot het einde van een woord. **
+
+  1. Ga met de cursor naar de eerste regel hieronder met --->.
+
+  2. Zet de cursor op de  u  van ruch.
+
+  3. Tik  ce  en de juiste letters (in dit geval "egel").
+
+  4. Druk <ESC> en ga naar het volgende teken dat moet worden veranderd.
+
+  5. Herhaal de stappen 3 en 4 tot de eerste regel gelijk is aan de tweede.
+
+  ---> In deze ruch staan een paar weedrim die veranderd moud worden.
+  ---> In deze regel staan een paar woorden die veranderd moeten worden.
+
+  LET OP: Met  ce  wordt (het laatste deel van) een woord gewist en kom je
+          in de invoegmodus.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 3.4: MEER VERANDERINGEN MET c
+
+  1. Het commando verander ('change') werkt op dezelfde manier als wis. De
+     opbouw is:
+         c  [teller]  beweging
+
+  2. De bewegingen zijn hetzelfde, zoals  w  (woord) en  $  (einde regel).
+
+  3. Ga naar de eerste regel hieronder met --->.
+
+  4. Zet de cursor op de eerste fout.
+
+  5. Tik  c$  en tik de rest van de regel zodat hij gelijk wordt aan de
+     tweede en sluit af met <ESC>.
+
+  ---> Het einde van deze regel moet precies zo worden als de tweede regel.
+  ---> Het einde van deze regel moet gecorrigeerd worden met het commando c$.
+
+  OPMERKING: Je kan de toets <BACKSPACE> gebruiken om tikfouten te herstellen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 3 
+
+  1. Tik  p  om tekst terug te plakken, die zojuist is gewist. Dit zet de
+     gewiste tekst ACHTER de cursor (als een hele regel is gewist komt deze
+     op de regel ONDER de cursor.
+
+  2. Het teken waarop de cursor staat wordt vervangen met  r  gevolgd door
+     het teken dat je daar wilt hebben.
+
+  3. Het commando 'verander' stelt je in staat om tekst te veranderen vanaf
+     de cursor tot waar de 'beweging' je brengt. Dat wil zeggen: tik  ce  om
+     te veranderen vanaf de cursor tot het einde van het woord,  c$  om te
+     veranderen tot het einde van de regel.
+
+  4. De opbouw van het commando verander is:
+         c  [teller]  beweging
+
+  Ga nu naar de volgende les.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.1: PLAATS VAN DE CURSOR EN STATUS VAN HET BESTAND
+
+  ** CTRL-G laat zien waar (regelnummer) je je bevindt en wat de status van
+     het bestand is. Met [nummer] G  ga je naar een bepaalde regel. **
+
+  LET OP: Lees de hele les voordat je een stap uitvoert!!
+
+  1. Hou de Ctrl-toets ingedrukt en tik  g . Dit noemen we CTRL-G.
+     Onderaan de pagina verschijnt een boodschap met de bestandsnaam en de
+     positie in het bestand. Onthou het regelnummer voor stap 3.
+
+  OPMERKING: Als de optie 'ruler' aan staat, wordt de positie van de cursor
+             (regelnummer, kolom) steeds in de rechter-onderhoek van het
+             scherm vermeld. In dit geval vermeldt CTRL-G geen regelnummer.
+             CTRL-G geeft ook de status aan, namelijk of de tekst veranderd
+             is ('modified') sinds het de laatste keer is opgeslagen.  
+
+  2. Tik hoofdletter  G  om naar het einde van het bestand te gaan.
+     Tik  gg  om naar het begin van het bestand te gaan.
+
+  3. Tik het regelnummer waar je bij stap 1 was en daarna  G . Dit brengt je
+     terug naar de regel waar je was toen je de eerste keer CTRL-G tikte.
+
+  4. Voer de stappen 1 tot 3 uit als je dit goed hebt gelezen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.2: HET COMMANDO ZOEKEN
+
+  ** Met  /ZOEK  wordt naar de zoekterm (één of meer woorden) gezocht. **
+
+  1. Tik in de opdrachtmodus het teken  / . Je ziet dat het met de cursor
+     aan de onderkant van het scherm verschijnt, zoals bij het :-commando.
+
+  2. Tik nu 'ffouut' <ENTER>. Dit is het woord waarnaar gezocht wordt.
+
+  3. Tik  n  om verder te zoeken met dezelfde zoekterm.
+     Zoek met  N  met dezelfde zoekterm in de tegenovergestelde richting.
+
+  4. Zoek in achterwaartse richting met ?zoekterm in plaats van  / .
+
+  5. Keer terug naar de vorige hit met CTRL-O (hou Ctrl-toets ingedrukt en
+     tik letter o). Herhaal om verder terug te gaan. CTRL-I gaat vooruit.
+
+  ---> "ffouut" is niet de juiste spelling van fout, ffouut is een fout.
+
+  OPMERKING: Als zoeken het einde van het bestand bereikt, wordt vanaf het
+             begin doorgezocht, tenzij de optie 'wrapscan' is uitgeschakeld.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.3: GA NAAR CORRESPONDERENDE HAAKJES
+
+            ** Tik  %  om naar corresponderende ), ] of } te gaan. **
+
+  1. Zet de cursor op een (, [ of { in de regel hieronder met --->.
+
+  2. Tik dan het teken  % .
+
+  3. De cursor gaan naar het overeenkomstige haakje.
+
+  4. Met opnieuw  %  gaat de cursor terug naar het eerste haakje.
+
+  5. Plaats de cursor op een ander haakje en bekijk wat  %  doet.
+
+  ---> Dit ( is een testregel met  ('s, ['s ] en {'s } erin. ))
+
+  OPMERKING: Dit is nuttig bij het debuggen van een programma waarin haakjes
+             niet corresponderen. Met de optie 'showmatch' wordt ook
+             aangegeven of haakjes corresponderen, maar de cursor wordt niet
+             (blijvend) verplaatst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 4.4: HET VERVANG COMMANDO
+
+      ** Tik  :s/oud/nieuw/g  om 'oud' door 'nieuw' te vervangen. **
+
+  1. Ga met de cursor naar de regel hieronder met --->.
+
+  2. Tik  :s/dee/de <ENTER>. Zoals je ziet, vervangt ('substitute') dit
+     commando alleen de eerste "dee" in de regel.
+
+  3. Tik nu  :s/dee/de/g . Met de g-vlag ('global') wordt elke "dee" in de
+     regel vervangen.
+
+  ---> dee beste tijd om dee bloemen te zien is in dee lente.
+
+  4. Om in (een deel van) een tekst elk 'oud' te vervangen door 'nieuw':
+     tik   :#,#s/oud/nieuw/g   waar #,# de regelnummers zijn die het gebied
+                               begrenzen waarin wordt vervangen.
+     tik   :%s/oud/nieuw/g     om alles te vervangen in het hele bestand.
+     tik   :%s/oud/nieuw/gc    om elke 'oud' in het hele bestand te vinden
+                               en te vragen of er vervangen moet worden.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 4
+
+  1. CTRL-G   laat positie in het bestand zien en de status van het bestand.
+     G        verplaatst je naar het einde van het bestand.
+     nummer G verplaatst je naar regelnummer.
+     gg       verplaatst je naar de eerste regel.
+
+  2. Met  /  en een zoekterm wordt VOORWAARTS gezocht naar de term.
+     Met  ?  en een zoekterm wordt ACHTERWAARTS gezocht naar de term.
+     Tik  n  na een zoekopdracht om de volgende hit te vinden,
+     of tik  N  om in de andere richting te zoeken.
+     CTRL-O  brengt je naar eerdere hit,  CTRL-I naar nieuwere.
+
+  3. Tik  %  terwijl de cursor op een haakje ([{}]) staat, om naar het
+     corresponderende haakje te gaan.
+
+  4. :s/oud/nieuw      vervangt het eerste 'oud' in een regel door 'nieuw'.
+     :s/oud/nieuw/g    vervangt elk 'oud' in een regel door 'nieuw'.
+     :#,#s/oud/nieuw/g vervangt elk 'oud' door 'nieuw' tussen de regelnummers.
+     :%s/oud/nieuw/g    vervangt elk 'oud' door 'nieuw' in het hele bestand.
+     Voeg  c  toe (:%s/oud/nieuw/gc) om elke keer om bevestiging
+     ('confirmation') te vragen.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.1: HOE EEN EXTERN COMMANDO WORDT UITGEVOERD
+
+     ** Tik  :!  gevolgd door een extern commando om dat uit te voeren. **
+
+  1. Tik het commando  :  waarmee de cursor op de onderste regel van het
+     scherm komt te staan. Nu kan je een opdracht geven via de commando-regel.
+
+  2. Tik een  !  (uitroepteken). Dit stelt je in staat om elk shell-commando
+     uit te voeren.
+
+  3. Tik bijvoorbeeld  ls  na het uitroepteken en daarna <ENTER>. Hiermee
+     krijg je de inhoud van je map te zien, net alsof je de opdracht gaf
+     vanaf de shell-prompt. Probeer  :!dir  als het niet werkt.
+
+  OPMERKING: Elk extern commando kan op deze manier uitgevoerd worden, ook
+             met argumenten.
+
+  OPMERKING: Alle commando's na  :  moeten worden afgesloten met <ENTER>.
+             Vanaf nu zullen we dat niet meer altijd vermelden.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.2: MEER OVER HET OPSLAAN VAN BESTANDEN
+
+     ** Tik :w BESTANDSNAAM om de tekst mèt veranderingen op te slaan. **
+
+  1. Tik  :!dir  of  :!ls  om de inhoud van je map te tonen. Je weet
+     inmiddels dat je daarna een <ENTER> moet tikken.
+
+  2. Kies een bestandsnaam die nog niet bestaat, bijvoorbeeld TEST.
+
+  3. Tik nu:  :w TEST  (als je de naam TEST hebt gekozen).
+
+  4. Hierdoor wordt het hele bestand (de VIM lessen) opgeslagen onder de
+     naam TEST. Tik weer  :!dir  of  :!ls  om dit te controleren.
+
+  OPMERKING: Als je Vim zou verlaten en opnieuw zou starten met  vim TEST  is
+             het bestand een exacte kopie van de lessen, zoals je ze opsloeg.
+
+  5. Wis het bestand nu met de opdracht (MS-DOS)  :!del TEST
+                                       of (Unix)  :!rm TEST
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.3: EEN DEEL VAN DE TEKST OPSLAAN
+
+     ** Sla een deel van het bestand op met  v beweging :w BESTANDSNAAM **
+
+  1. Ga naar deze regel.
+
+  2. Tik  v  en ga met de cursor naar stap 5 hieronder. Je ziet dat de
+     tekst oplicht.
+
+  3. Tik  : . Onderaan het scherm zal  :'<,'>  verschijnen.
+
+  4. Tik  w TEST  , waar TEST een bestandsnaam is, die nog niet bestaat.
+     Controleer dat je  :'<,'>w TEST  ziet staan voordat je <ENTER> tikt.
+
+  5. Vim slaat nu de geselecteerde regels op in het bestand TEST. Met
+     :!dir  of  !ls  kan je dat zien. Wis het nog niet! We zullen het in
+     de volgende les gebruiken.
+
+  OPMERKING: Het tikken van  v  zet zichtbare modus ('visual selection') aan.
+             Je kan de cursor rondbewegen om de selectie groter of kleiner
+             te maken. Vervolgens kan je een commando gebruiken om iets met
+             de tekst te doen. Met  d  bijvoorbeeld wis je de tekst.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 5.4: OPHALEN EN SAMENVOEGEN VAN BESTANDEN
+
+     ** Tik  :r BESTANDSNAAM om de inhoud van een bestand in te voegen. **
+
+  1. Zet de cursor precies boven deze regel.
+
+  OPMERKING: Na het uitvoeren van stap 2 zie je tekst van les 5.3. Scrol
+             daarna naar beneden om deze les weer te zien.
+
+  2. Haal nu het bestand TEST op met het commando  :r TEST .
+     Het bestand dat je ophaalt komt onder de regel waarin de cursor staat.
+
+  3. Controleer dat er een bestand is opgehaald. Ga met de cursor omhoog.
+     Dan zie je de tekst van les 5.3 dubbel, het origineel en de versie uit
+     het bestand.
+
+  OPMERKING: Je kan ook de uitvoer van een extern commando inlezen. Om een
+             voorbeeld te geven:  :r !ls  leest de uitvoer van het commando
+             ls en zet dat onder de regel waarin de cursor staat.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 5
+
+  1. :!COMMANDO  voert een extern commando uit.
+     Enkele bruikbare voorbeelden zijn:
+        (MS-DOS)         (Unix)
+         :!dir            :!ls          - laat de inhoud van een map zien
+         :!del BESTAND    :!rm BESTAND  - wist bestand BESTAND
+
+  2. :w BESTANDSNAAM  schrijft het huidige Vim-bestand naar disk met de
+     naam BESTANDSNAAM.
+
+  3. v beweging :w BESTANDSNAAM  laat je in zichtbare modus een fragment
+     selecteren, dat wordt opgeslagen in het bestand BESTANDSNAAM.
+
+  4. :r BESTANDSNAAM  haalt het bestand BESTANDSNAAM op en voegt het onder
+     de cursor-positie in de tekst in.
+
+  5. :r !dir  leest de uitvoer van het externe commando dir en zet het onder
+     de cursor-positie.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.1: HET COMMANDO OPEN
+
+     ** Tik  o  om een regel onder de cursor te openen in invoegmodus. **
+
+  1. Ga naar de eerste regel beneden met --->.
+
+  2. Tik de kleine letter  o  en open daarmee een regel ONDER de cursor en
+     ga naar de invoegmodus.
+
+  3. Tik wat tekst in en sluit af met <ESC> om de invoegmodus te verlaten.
+
+  ---> Als je  o  tikt, komt de cursor in een nieuwe regel in invoegmodus.
+
+  4. Om een regel BOVEN de cursor te openen, moet je gewoon een hoofdletter
+     O  tikken in plaats van een kleine letter. Probeer dat vanaf de volgende
+     regel.
+
+  ---> Open een regel hierboven. Tik een O terwijl de cursor hier staat.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.2: HET COMMANDO TOEVOEGEN
+
+        ** Tik  a  om tekst toe te voegen ACHTER de cursor. **
+
+  1. Ga naar het begin van de regel beneden met --->.
+ 
+  2. Tik  e  tot de cursor op het einde van  "ste"  staat.
+
+  3. Tik een (kleine letter)  a  ('append') om toe te voegen ACHTER de cursor.
+
+  4. Vul het woord aan zoals in de volgende regel. Druk <ESC> om de
+     invoegmodus te verlaten.
+
+  5. Ga met  e  naar het einde van het volgende onvolledige woord en herhaal
+     de stappen 3 en 4.
+
+  ---> Deze regel ste je in staat om te oef in het toevo van tekst. 
+       Deze regel stelt je in staat om te oefenen in het toevoegen van tekst. 
+
+  OPMERKING: a, i en A openen allemaal dezelfde invoegmodus, het enige
+             verschil is waar tekens worden ingevoegd.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.3: VERVANGEN OP EEN ANDERE MANIER
+
+      ** Tik een hoofdletter  R  om meer dan één teken te vervangen. **
+
+  1. Ga naar de eerste regel beneden met --->. Ga met de cursor naar het
+     begin van de eerste  "xxx" .
+
+  2. Tik nu  R  en daarna het getal eronder in de tweede regel, zodat  xxx
+     wordt vervangen.
+
+  3. Druk <ESC> om de vervangmodus te verlaten. Je ziet dat de rest van de
+     regel ongewijzigd blijft.
+
+  4. Herhaal de stappen om de overgebleven  xxx  te vervangen.
+
+  ---> Optellen van 123 en xxx geeft je xxx.
+  ---> Optellen van 123 en 456 geeft je 579.
+
+  OPMERKING: Vervangmodus lijkt op invoegmodus, maar elk teken dat je tikt,
+             vervangt een bestaand teken.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.4: TEKST KOPIËREN EN PLAKKEN
+
+        ** Gebruik  y  om tekst te kopiëren en  p  om te plakken. **
+
+  1. Ga naar de regel beneden met ---> en zet de cursor achter "a)".
+
+  2. Zet zichtbare modus aan met  v  en zet de cursor juist voor "eerste".
+
+  3. Tik  y  ('yank') om de opgelichte tekst ("dit is het") te kopiëren.
+
+  4. Ga met  j$  met de cursor naar het einde van de volgende regel.
+
+  5. Plak de gekopieerde tekst met  p  en tik  a tweede <ESC>.
+
+  6. Selecteer in zichtbare modus "onderdeel", kopieer het met  y  en
+     ga met  j$  naar het einde van de tweede regel. Plak de tekst daar
+     met  p .
+
+  --->  a) dit is het eerste onderdeel
+        b)
+
+  OPMERKING: Je kan  y  ook als operator gebruiken;  yw  kopieert een woord,
+             yy  een hele regel.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 6.5: OPTIES GEBRUIKEN
+
+     ** Gebruik een optie voor al dan niet hoofdlettergevoelig zoeken. **
+
+  1. Zoek naar 'hoofdlettergevoelig' met  /hoofdlettergevoelig <ENTER>
+     Herhaal het zoeken enkele keren door  n  te tikken.
+ 
+  2. Schakel de optie 'ic' ('ignore case', niet-hoofdlettergevoelig) in
+     met  :set ic
+
+  3. Zoek met  n  opnieuw naar 'hoofdlettergevoelig'. Je ziet dat
+     Hoofdlettergevoelig en HOOFDLETTERGEVOELIG nu ook gevonden worden.
+
+  4. Schakel de opties 'hlsearch' (treffers oplichten) en 'incsearch' (toon
+     gedeeltelijke treffers bij intikken) in met  :set hls is
+
+  5. Tik weer /hoofdlettergevoelig <ENTER> en kijk wat er gebeurt.
+
+  6. Schakel 'hoofdlettergevoelig' weer in met  :set noic
+
+  OPMERKING: Schakel het oplichten van treffers uit met  :nohlsearch
+
+  OPMERKING: Om bij een enkel zoek-commando de hoofdlettergevoeligheid om
+             te draaien kan  \c  worden gebruikt na de zoekterm:
+             /hoofdlettergevoelig\c <ENTER>.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 6
+
+  1. Tik  o  om een regel te openen ONDER de cursor en invoegmodus te starten.
+     Tik  O  om een regel te openen BOVEN de cursor.
+
+  2. Tik  a  om tekst toe te voegen NA de cursor.
+     Tik  A  om tekst toe te voegen aan het einde van de regel.
+
+  3. Het commando  e  beweegt de cursor naar het einde van een woord.
+
+  4. De operator  y  yankt (kopieert) tekst,  p  zet het terug (plakt).
+
+  5. Met hoofdletter  R  wordt de vervangmodus geopend, met <ESC> afgesloten.
+
+  6. Met  :set xxx  wordt optie 'xxx' ingeschakeld. Opties zijn bijvoorbeeld:
+       ic   ignorecase  geen verschil hoofdletters/kleine letters bij zoeken
+       is   incsearch   toon gedeeltelijke treffers tijdens intikken zoekterm 
+       hls  hlsearch    laat alle treffers oplichten
+     Je kan zowel de lange als de korte naam van een optie gebruiken.
+  
+  7. Zet 'no' voor de naam om een optie uit te schakelen:  :set noic
+     schakelt 'ic' uit.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.1: HULP INROEPEN
+
+           ** Het gebruik van ingebouwde hulp. **
+
+  Vim heeft een uitgebreid ingebouwd hulpsysteem. Probeer, om te beginnen,
+  één van deze drie:
+    - druk de <HELP> toets (als je die hebt)
+    - druk de <F1> toets (als je die hebt)
+    - tik  :help <ENTER>
+
+  Lees de tekst in het help-venster om te leren hoe 'help' werkt.
+  Tik  CTRL-W CTRL-W  om van het ene venster naar het andere te gaan.
+  Met  :q <ENTER>  wordt het help-venster gesloten.
+
+  Je kan hulp vinden over nagenoeg elk onderwerp door een argument aan het
+  commando  :help  toe te voegen. Probeer deze (en vergeet <ENTER> niet):
+    :help w
+    :help c_CTRL-D
+    :help insert-index
+    :help user-manual
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.2: SCHRIJF EEN CONFIGURATIEBESTAND
+
+                    ** Mogelijkheden van Vim uitbreiden. **
+
+  Vim kent veel meer mogelijkheden dan Vi, maar de meeste zijn standaard
+  uitgeschakeld. Om meer functies te gebruiken moet je een 'vimrc'-bestand
+  schrijven.
+
+  1. Bewerk het bestand 'vimrc'. Hoe dat moet hangt af van je systeem:
+      :e ~/.vimrc		voor Unix
+      :e $VIM/_vimrc		voor MS-Windows
+
+  2. Lees de inhoud van het voorbeeld-bestand:
+      :r $VIMRUNTIME/vimrc_example.vim
+
+  3. Sla het bestand op met  :w
+
+  De volgende keer dat je Vim start wordt 'syntaxiskleuring' gebruiken.
+  Je kan al je voorkeursinstellingen toevoegen aan dit 'vimrc'-bestand.
+  Tik  :help vimrc-intro  voor meer informatie.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   Les 7.3: AANVULLEN
+
+      ** Aanvullen van de 'command line' met CTRL-D en <TAB>. **
+
+  1. Zorg dat Vim niet in 'compatible mode' is met  :set nocp
+
+  2. Kijk welke bestanden zich in de map bevinden met  :!ls  of  :!dir
+
+  3. Tik het begin van een commando:  :e
+
+  4. Met  CTRL-D  toont Vim een lijst commando's, die met "e" beginnen.
+
+  5. Druk enkele keren <TAB>. Vim laat aanvullingen zien, zoals ":edit",
+     dat we hier gebruiken.
+
+  6. Voeg een spatie toe en de eerste letter(s) van een bestaande
+     bestandsnaam:  :edit BESTAND
+
+  7. Druk <TAB>. Vim vult de naam aan (als hij uniek is).
+
+  OPMERKING: Aanvullen werkt bij tal van commando's. Probeer gewoon CTRL-D
+             en <TAB>. Het is bijzonder nuttig bij  :help .
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+                   SAMENVATTING Les 7
+
+  1. Tik  :help  of druk <F1> of <Help>  om een help-venster te openen.
+
+  2. Tik  :help CMD  voor hulp over  CMD .
+
+  3. Tik  CTRL-W CTRL-W  om naar een ander venster te gaan.
+
+  4. Tik  :q  om het help-venster te sluiten.
+
+  5. Maak een bestand met de naam 'vimrc' voor je voorkeursinstellingen.
+
+  6. Druk CTRL-D tijdens het intikken van een :-commando om mogelijke
+     aanvullingen te zien. Druk <TAB> om aanvullen te gebruiken.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  Hiermee komen de Vim-lessen tot een einde. Ze waren bedoeld om een kort
+  overzicht te geven van de Vim-editor, juist voldoende om de editor
+  redelijk makkelijk te gebruiken. Deze lessen zijn verre van volledig. Vim
+  kent veel meer commando's. Lees hierna de handleiding voor gebruikers:
+  ":help user-manual".
+
+  Voor verdere studie wordt aanbevolen:
+      Vim - Vi Improved - door Steve Oualline
+      Uitgever: New Riders
+  Dit is het eerste boek dat geheel aan Vim is gewijd. Speciaal geschikt
+  voor beginners. Met veel voorbeelden en afbeeldingen.
+  Zie http://iccf-holland.org/click5.html
+
+  Het volgende boek is ouder en gaat meer over Vi dan Vim, maar het wordt
+  toch aanbevolen:
+      Learning the Vi Editor - door Linda Lamb
+      Uitgever: O'Reilly & Associates Inc.
+  Het is een goed boek om nagenoeg alles te weten te komen dat je met Vi
+  zou willen doen. De zesde en vooral de nieuwe zevende druk (onder de
+  titel Learning the Vi and Vim Editors door Arnold Robbins, Elbert Hannah
+  & Linda Lamb) bevat ook informatie over Vim.
+
+  Deze lessen zijn geschreven door Michael C. Pierce en Robert K. Ware,
+  Colorado School of Mines met gebruikmaking van ideeën van Charles Smith
+  van de Colorado State University. E-mail: bware@mines.colorado.edu.
+
+  Aangepast voor Vim door Bram Moolenaar.
+
+  Nederlandse vertaling door Rob Bishoff, april 2012
+  e-mail: rob.bishoff@hccnet.nl)
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.no vim73/runtime/tutor/tutor.no
--- vim73.orig/runtime/tutor/tutor.no	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.no	2013-08-04 19:09:09.960612480 +0000
@@ -658,7 +658,7 @@
   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
      at du ser	:'<,'>w TEST  fr du trykker Enter.
 
-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
      for  se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
 
 MERK: Ved  trykke  v  startes visuelt valg. Du kan flytte markren rundt for
diff -Naur vim73.orig/runtime/tutor/tutor.no.utf-8 vim73/runtime/tutor/tutor.no.utf-8
--- vim73.orig/runtime/tutor/tutor.no.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.no.utf-8	2013-08-04 19:09:09.963945804 +0000
@@ -658,7 +658,7 @@
   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
      at du ser	:'<,'>w TEST  før du trykker Enter.
 
-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
+  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
      for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
 
 MERK: Ved å trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
diff -Naur vim73.orig/runtime/tutor/tutor.sk vim73/runtime/tutor/tutor.sk
--- vim73.orig/runtime/tutor/tutor.sk	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.sk	2013-08-04 19:09:09.980612420 +0000
@@ -671,7 +671,7 @@
   4. Nap w TEST  , kde TEST je meno sboru, ktor zatial neexistuje.
      Skontroluj, e vid  :'<,'>w TEST  predtm ne stla Enter.
 
-  5. Vim zape oznaen riadky do sboru TEST. Poui :!dir  alebo  !ls
+  5. Vim zape oznaen riadky do sboru TEST. Poui :!dir  alebo  :!ls
      pre overenie. Zatial ho ete nema! Pouijeme ho v alej lekcii.
 
 POZNMKA: Stlaenm klvesy  v  sa spust vizulne oznaovanie.
diff -Naur vim73.orig/runtime/tutor/tutor.sk.cp1250 vim73/runtime/tutor/tutor.sk.cp1250
--- vim73.orig/runtime/tutor/tutor.sk.cp1250	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.sk.cp1250	2013-08-04 19:09:09.980612420 +0000
@@ -671,7 +671,7 @@
   4. Nap w TEST  , kde TEST je meno sboru, ktor zatial neexistuje.
      Skontroluj, e vid  :'<,'>w TEST  predtm ne stla Enter.
 
-  5. Vim zape oznaen riadky do sboru TEST. Poui :!dir  alebo  !ls
+  5. Vim zape oznaen riadky do sboru TEST. Poui :!dir  alebo  :!ls
      pre overenie. Zatial ho ete nema! Pouijeme ho v alej lekcii.
 
 POZNMKA: Stlaenm klvesy  v  sa spust vizulne oznaovanie.
diff -Naur vim73.orig/runtime/tutor/tutor.sk.utf-8 vim73/runtime/tutor/tutor.sk.utf-8
--- vim73.orig/runtime/tutor/tutor.sk.utf-8	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.sk.utf-8	2013-08-04 19:09:09.983945743 +0000
@@ -671,7 +671,7 @@
   4. Napíš w TEST  , kde TEST je meno súboru, ktorý zatial neexistuje.
      Skontroluj, e vidíš  :'<,'>w TEST  predtým než stlačíš Enter.
 
-  5. Vim zapíše označené riadky do súboru TEST. Použi :!dir  alebo  !ls
+  5. Vim zapíše označené riadky do súboru TEST. Použi :!dir  alebo  :!ls
      pre overenie. Zatial ho ešte nemaž! Použijeme ho v ďalšej lekcii.
 
 POZNÁMKA: Stlačením klávesy  v  sa spustí vizuálne označovanie.
diff -Naur vim73.orig/runtime/tutor/tutor.utf-8 vim73/runtime/tutor/tutor.utf-8
--- vim73.orig/runtime/tutor/tutor.utf-8	2010-08-01 17:09:53.000000000 +0000
+++ vim73/runtime/tutor/tutor.utf-8	2013-08-04 19:09:09.990612390 +0000
@@ -658,7 +658,7 @@
   4. Type  w TEST  , where TEST is a filename that does not exist yet.  Verify
      that you see  :'<,'>w TEST  before you press <ENTER>.
 
-  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  !ls
+  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  :!ls
      to see it.  Do not remove it yet!  We will use it in the next lesson.
 
 NOTE:  Pressing  v  starts Visual selection.  You can move the cursor around
diff -Naur vim73.orig/runtime/tutor/tutor.vim vim73/runtime/tutor/tutor.vim
--- vim73.orig/runtime/tutor/tutor.vim	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.vim	2013-08-04 19:09:09.993945713 +0000
@@ -1,7 +1,7 @@
 " Vim tutor support file
 " Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
 " Maintainer: Bram Moolenaar
-" Last Change:	2008 Jul 21
+" Last Change:	2012 Sep 21
 
 " This Vim script is used for detecting if a translation of the
 " tutor file exist, i.e., a tutor.xx file, where xx is the language.
@@ -72,14 +72,20 @@
   endif
 endif
 
-" The Chinese tutor is available in two encodings, guess which one to use
+" The Chinese tutor is available in three encodings, guess which one to use
 " This segment is from the above lines and modified by
 " Mendel L Chan <beos@turbolinux.com.cn> for Chinese vim tutorial
+" When 'encoding' is utf-8, choose between China (simplified) and Taiwan
+" (traditional) based on the language, suggested by Alick Zhao.
 if s:ext =~? '\.zh'
   if &enc =~ 'big5\|cp950'
     let s:ext = ".zh.big5"
   elseif &enc != 'utf-8'
     let s:ext = ".zh.euc"
+  elseif s:ext =~? 'zh_tw' || (exists("s:lang") && s:lang =~? 'zh_tw')
+    let s:ext = ".zh_tw"
+  else
+    let s:ext = ".zh_cn"
   endif
 endif
 
diff -Naur vim73.orig/runtime/tutor/tutor.zh.euc vim73/runtime/tutor/tutor.zh.euc
--- vim73.orig/runtime/tutor/tutor.zh.euc	2010-05-15 11:04:02.000000000 +0000
+++ vim73/runtime/tutor/tutor.zh.euc	2013-08-04 19:09:09.997279037 +0000
@@ -1,30 +1,32 @@
 ===============================================================================
-=           ӭ              V I M             汾 1.5      =
+=           ӭ              V I M              汾 1.7       =
 ===============================================================================
-     vim һкܶĹܷǳǿı༭ƪڱ̵̳
+
+     Vim һкܶĹܷǳǿı༭ƪڱ̵̳
      Ͳϸˡ̵̳ĿǽһЩҪĻպ
-     Щܹ׽vimһͨõܱ༭ʹˡ
+     Щܹ׵ؽ Vim һͨñ༭ʹˡ
 
      ɱ̵̳ݴԼҪ25-30ӣȡѵʱ䡣
 
+     ע⣺
      ÿһڵıġƼƱĵһȻڸ
      ѵ(ͨ"vimtutor"̵̳ģôľѾǸ)
 
-     мһñ̵̳˼·ʹнѧϰġҲ˵Ҫͨ
+     мһ㣺̵̳˼·ʹнѧϰġҲ˵Ҫͨ
      ִѧϰǱȷ÷ֻĶô
      ܿЩģ
 
      ˣȷShift-Lock(Сд)ûа£Ȼ󰴼
-     ĸ j 㹻Ĵƶֱ꣬һڵܹȫĻ
+     ĸ j 㹻ƶֱ꣬һڵܹȫĻ
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			һһڡƶ
+			һһڣƶ
 
 
-    Ҫƶ꣬˵ֱ hjkl  
+	     ** Ҫƶ꣬˵ֱ hjkl  **
 
 	     ^
-	     k		    ʾ h ļλߣÿΰ¾ͻƶ
+	     k		    ʾ h ļλߣÿΰ¾ͻƶ
        < h	 l >		   l ļλұߣÿΰ¾ͻƶ
 	     j			   j һ֧˷µļͷ
 	     v
@@ -35,43 +37,38 @@
 
 ---> ӦѾѧƶһɡ
 
-  3. ʹмƶڶ
+  3. ʹмƶһڶڡ
 
-ʾȷµĸ밴<ESC>ص(Normal)ģʽ
+ʾȷµĸ밴<ESC>ص(Normal)ģʽ
       ȻٴδӼҪ
 
-ʾùӦҲġʹhjklϰܹ֮
-      ĻĴƶˡ
+ʾӦҲġʹhjklϰܹ֮
+      ĻĴƶꡣ
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			һڶڡVIMĽ˳
-
+			һڶڣVIMĽ˳
 
-  !! رʾþĶһڵݣȻִ
 
-  1. 밴<ESC>(Ϊȷģʽ)
+  !! رʾĶһڵݣȻִ
 
-  2. Ȼ			:q! <س>
+  1. <ESC>(Ϊȷģʽ)
 
----> ַʽ˳༭ᱣ༭ĸĶ
-     뱣˳
-				:wq  <س>
+  2. Ȼ룺			:q! <س>
+     ַʽ˳༭ᶪ༭ĸĶ
 
-  3. ʾܹص̵̳Ǿǡ
+  3. ʾܹص̵̳Ǿǣ
+     vimtutor <س>
 
-		vimtutor <س>
+  4. ѾμסЩĻӲ1ִе3˳Ȼ
+     ٴν༭
 
-     ͨҲַʽ
+ʾ :q! <س> ᶪκθĶ֮ѧαĶļ
 
-		vim tutor <س>
+  5. Ƶһڡ
 
---->  'vim' ʾvim༭ 'tutor'׼Ҫ༭ļ
-
-  4. ѾμסЩĻӲ1ִе3˳Ȼ
-     ٴν༭ŽƶһǵĽ̳̽⡣
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			һڡı༭֮ɾ
+			һڣı༭֮ɾ
 
 
    ** (Normal)ģʽ£԰ x ɾλõַ**
@@ -86,89 +83,130 @@
 
 ---> The ccow jumpedd ovverr thhe mooon.
 
-  5. ˣѾˣһǵһĽڡ
+  5. ˣѾˣǵһĽڡ
 
-رʾ̳ʱҪǿм䡣סһʹѧϰ
+رʾ̳ʱҪǿм䡣סһ㣺ʹѧϰ
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     һĽڡı༭֮
+		     һĽڣı༭֮
 
 
 	 ** ģʽ£԰ i ı**
 
   1. 뽫ƶ ---> ĵһС
 
-  2. ΪʹõһͬڵڶУ뽫ıһַ׼
+  2. ΪʹõһͬڵڶУ뽫ıһ׼ַ
      λá
 
   3. Ȼ i Ҫıַ
 
-  4. ıϣ밴 <ESC> ģʽ
+  4. ÿϺ밴 <ESC> ģʽ
      ظ24Աӡ
 
 ---> There is text misng this .
 ---> There is some text missing from this line.
 
-  5. ıѾ⣬ĶСᡣ
+  5. ıѾ⣬Ķĵһڡ
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			       һС
+		     һڣı༭֮
 
 
-  1. ĻıеƶȿüͷҲʹ hjkl ĸ
-	 h ()	j ()       k ()	    l ()
+			**  A ı **
+
+  1. ƶ굽һ ---> һС
+     һеĸַϲҪ
+
+  2.  A Ҫݡ
+
+  3. ıϺ󣬰 <ESC> صģʽ
+
+  4. ƶ굽ڶ ---> һСظ2Ͳ3Ըӡ
+
+---> There is some text missing from th
+     There is some text missing from this line.
+---> There is also some text miss
+     There is also some text missing here.
+
+  5. ıеʱѧϰһڡ
 
-  2. vim༭(ʾ)vim ļ <س>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     һڣ༭ļ
+
+		    ** ʹ :wq Աļ˳ **
+
+  رʾִ²֮ǰȶСڣ
+
+  1. ڵһڶ˳̳̣ :q!
+     ߣԷһնˣִ²
+
+  2.  shell ʾ vim tutor <س>
+     'vim' Vim ༭'tutor'ϣ༭ļ֡
+     ʹһԸĶļ
+
+  3. ʹǰĽ̳ѧɾı
+
+  4. Ķļ˳ VimЩ :wq  <س>
 
-  3. ˳vim༭޸ġ
+  5. ڲ1Ѿ˳ vimtutor vimtutor ƶСһڡ
 
-	<ESC>   :q!	 <س>
+  6. Ķϲ裬Ūǵ壬Ȼʵнϰ
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       һС
+
+
+  1. ĻıеƶȿüͷҲʹ hjkl ĸ
+	 h ()	j ()       k ()	    l ()
 
-     ޸ġ
+  2.  Vim ༭(ʾ)룺vim ļ <س>
 
-	<ESC>   :wq	 <س>
+  3. ˳ Vim ༭ <ESC>   :q!   <س> иĶ
+                       <ESC>   :wq   <س> Ķ
 
-  4. ģʽɾλõַ밴 x
+  4. ģʽɾλõַ밴 x
 
-  5. ģʽҪڹλÿʼı밴
+  5. ı룺
 
-	 i     Ҫı	<ESC>
+	 i   ı   <ESC>		ڹǰı
+	 A   ı   <ESC>             һкı
 
-رʾð <ESC> صģʽȡһ߲
+رʾ <ESC> صģʽ߳һ򲿷
 
 
 ˣһ˽ڶݡ
 
 
+
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			ڶһڡɾ
+			ڶһڣɾ
 
 
-	    **  dw Դӹ괦ɾһ/ʵĩβ**
+	    **  dw Դӹ괦ɾһʵĩβ**
 
   1. 밴 <ESC> ȷģʽ
 
   2. 뽫ƶ ---> һС
 
-  3. 뽫׼ҪɾĵʵĿʼ
+  3. 뽫׼Ҫɾĵʵʼ
 
   4.  dw ɾõʡ
 
-  رʾ dw ͬʱĻһС
-  밴 <ESC> ȡȻ
+  رʾʱĸ d ͬʱĻһСVim ڵȴ
+  ĸ wǳ d ַǱˣ밴 <ESC> 
+  Ȼ
 
 ---> There are a some words fun that don't belong paper in this sentence.
 
-  5. ظ34ֱϡżڶڶݡ
-
+  5. ظ3Ͳ4ֱϡżڶڶݡ
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      ڶڶڡɾ
+		      ڶڶڣɾ
 
 
 		   **  d$ ӵǰɾĩ**
@@ -191,58 +229,102 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     ڶڡùͶ
+		     ڶڣͶ
 
 
-  ɾ d ĸʽ¡
+  ııһһɡ
+  ʹɾ d ɾĸʽ£
 
-	 [number]   d	object	         d	 [number]   object
+	d   motion
 
-  ¡
-    number - ִĴ(ѡȱʡΪ 1 )
-    d - ɾ
-    object - ҪĶ(ؽ)
+  У
+    d      - ɾ
+    motion - Ĳ(г)
 
-  һ̵Ķб
-    w - ӵǰ굱ǰλֱ/ĩβո
-    e - ӵǰ굱ǰλֱ/ĩβ ** ո
+  һ̵Ķб
+    w - ӵǰ굱ǰλֱһʼĵһַ
+    e - ӵǰ굱ǰλֱĩβһַ
     $ - ӵǰ굱ǰλֱǰĩ
 
-رʾ
-    ̽ߣģʽӦļʹ
+   de ӵǰλɾĩβ
+
+رʾ
+    ̽ߣģʽӦļʹò
     ƶĶбһ
 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     ڶĽڣʹüָ
+
+
+             ** ڶǰֻʹظôΡ **
+
+  1. ƶ굽 ---> һеĿʼ
+
+  2.  2w ʹǰƶʡ
+
+  3.  3e ʹǰƶʵĩβ
+
+  4.  0 () ƶ굽ס
+
+  5. ظ2Ͳ3Բͬ֡
+
+---> This is just a line with words you can move around in.
+
+  6. ѧϰڶڡ
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       ڶڣʹüɾ
+
+
+	       ** ʹòʱֿʹظôΡ **
+
+  ѾᵽɾͶϣж֮ǰһ
+  ɾࣺ
+	 d   number()   motion
+
+  1. ƶ굽 ---> һеһдĸϡ
+
+  2.  d2w ɾдĸʡ
+
+  3. ظ1Ͳ2ʹòͬʹһɾȫڵĴдĸ
+     
+
+--->  this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
+
+
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		ڶĽڡö
+			    ڶڣ
 
 
-	       **  dd ɾһǰС **
+		     **  dd ɾһǰС **
 
-  ɾĸƵȣVIM ߾ҪɾҪͬһ
+  ɾĸƵȣVi ߾ҪɾҪͬһ
    d Ϳɾڵˡ
 
   1. 뽫ƶĶ̾еĵڶС
   2.  dd ɾС
   3. ȻƶС
-  4.  2dd (ǵǰ潲 number-command-object ) ɾС
+  4.  2dd ɾС
 
-      1)  Roses are red,
-      2)  Mud is fun,
-      3)  Violets are blue,
-      4)  I have a car,
-      5)  Clocks tell time,
-      6)  Sugar is sweet
-      7)  And so are you.
+--->  1)  Roses are red,
+--->  2)  Mud is fun,
+--->  3)  Violets are blue,
+--->  4)  I have a car,
+--->  5)  Clocks tell time,
+--->  6)  Sugar is sweet
+--->  7)  And so are you.
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 ڶڡó
+			   ڶ߽ڣ
 
 
-	 **  u ִе U С**
+	**  u ִе U е޸ġ **
 
   1. 뽫ƶ ---> һУڵһ
      
@@ -251,8 +333,8 @@
   4. Ҫʹ x ед
   5. һд U ָеԭʼ״̬
   6. Ŷ u Գ U Լǰ
-  7. Ȼ CTRL-R (Ȱ CTRL ſ R ) 
-     ִлָҲǳ
+  7. Ȼ CTRL-R (Ȱ CTRL ſŰ R )
+     Ҳǳ
 
 ---> Fiix the errors oon thhis line and reeplace them witth undo.
 
@@ -265,105 +347,105 @@
 			       ڶС
 
 
-  1. ӵǰɾ/ĩβdw
-
-  2. ӵǰɾǰĩβd$
-
-  3. ɾУdd
+  1. ӵǰɾһʣ룺dw
+  2. ӵǰɾǰĩβ룺d$
+  3. ɾУ룺dd
 
-  4. ģʽһĸʽǡ
+  4. ظһǰһ֣2w
+  5. ģʽ޸ĸʽǣ
+               operator   [number]   motion
+     У
+       operator - Ҫ飬 d ɾ
+       [number] - Ըӵ֣ظĴ
+       motion   - ıϵƶ w (word)
+		  $ ĩȵȡ
 
-       [number]   command   object          command	[number]   object
-     ǡ
-       number - ִеĴ
-       command - Ҫ飬 d ɾ
-       object - ҪĶ󣬱 w /ʣ$ ĩȵȡ
-		$ (to the end of line), etc.
+  6. ƶ굽ף밴00
 
-  5. ǰĲu (Сдu)
-     һĸĶU (дU)
-     ǰĳָǰĲCTRL-R
+  7. ǰĲ룺u (Сдu)
+     һĸĶ룺U (дU)
+     ǰĳָǰĲ룺CTRL-R
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 һڡ
+			   һڣ
 
 
-	       **  p һɾ֮ **
+		**  p һɾ֮ **
 
-  1. 뽫ƶʾС
+  1. 뽫ƶһ ---> һС
 
-  2.  dd ɾὫб浽vimĻС
+  2.  dd ɾὫб浽 Vim һĴС
 
-  3. Žƶ׼λõϷסϷŶ
+  3. Žƶ c) һУ׼λõϷסϷŶ
 
-  4. Ȼģʽ(<ESC>) p ճ롣
+  4. Ȼģʽ(<ESC>) p ճ롣
 
   5. ظ24еõȷλϡ
 
-     d) Can you learn too?
-     b) Violets are blue,
-     c) Intelligence is learned,
-     a) Roses are red,
+---> d) Can you learn too?
+---> b) Violets are blue,
+---> c) Intelligence is learned,
+---> a) Roses are red,
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       ڶڡ滻
+			   ڶڣ滻
 
 
 	  **  r һַ滻λõַ**
 
   1. 뽫ƶ ---> ĵһС
 
-  2. ƶ굽һʵλá
+  2. ƶ굽һλá
 
-  3.  r ܽ滻ˡ
+  3.  r Ҫ滻ɵַܽ滻ˡ
 
   4. ظ2Ͳ3ֱһѾ޸ϡ
 
 --->  Whan this lime was tuoed in, someone presswd some wrojg keys!
 --->  When this line was typed in, someone pressed some wrong keys!
 
-  5. ȻǼѧУڡ
+  5. ȻǼѧϰڡ
 
-رʾмҪʹѧϰڼѧϰ
+رʾмҪʹѧϰڼѧϰ
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			ڡø
+			ڣ
 
 
-	   ** Ҫıһ/ʵĲֻȫ cw **
+		 ** Ҫııֱһʵĩβ ce **
 
   1. 뽫ƶ ---> ĵһС
 
   2. Űѹڵ lubw ĸ u λ
 
-  3. Ȼ cw Ϳõ(ڱ ine )
+  3. Ȼ cw Լȷĵ(ڱ ine )
 
   4.  <ESC> Ȼ궨λһһ׼ĵĸ
 
   5. ظ3Ͳ4ֱһȫͬڶӡ
 
----> This lubw has a few wptfd that mrrf changing usf the change command.
----> This line has a few words that need changing using the change command.
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
 
-ʾע cw 滻һʣҲı״̬ˡ
+ʾע ce ɾһʣҲģʽˡ
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       Ľڡʹcָ
+		       Ľڣʹcĸ
 
 
-	     ** ָʹͬɾʹõĶ**
+	   ** ɾʹõͬĶʹá **
 
-  1. ָĹʽɾһµġʽǡ
+  1. Ĺʽɾһµġʽǣ
 
-       [number]   c   object	   	    c	[number]   object
+         c    [number]   motion
 
-  2. Ҳһģ w /ʣ$ĩȵȡ
+  2. (motion)Ҳһģ w ʣ$ĩȵȡ
 
   3. 뽫ƶ ---> ĵһС
 
@@ -377,55 +459,56 @@
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			       С
+				  С
 
 
-  1. ҪѾɾıݣСдĸ pòԽɾ
+  1. ҪѾɾıݣ밴Сдĸ p òԽɾ
      ıڹ֮һɾһУôн
      ڵǰеһС
 
   2. Ҫ滻λõַСд r Ҫ滻ԭλַ
      ɡ
 
-  3. ıָĶ󣬴ӵǰλֱĩβ
-      cw 滻ǰ굽ʵĩβݣ c$ 滻
+  3. ıӵǰλֱָʾλмı
+      ce 滻ǰ굽ʵĩβݣ c$ 滻
      ǰ굽ĩݡ
 
-  4. ĸʽǡ
+  4. ĸʽǣ
 
-	 [number]   c	object	      	c   [number]   object
+	 c   [number]   motion
 
-Ǽѧϰһ
+Ǽѧϰһ
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		     Ľһڡöλļ״̬
+		     Ľһڣλļ״̬
 
+  **  CTRL-G ʾǰ༭ļеǰλԼļ״̬Ϣ
+     д G ֱתļеĳһָС**
 
-  **  CTRL-g ʾǰ༭ļеǰλԼļ״̬Ϣ
-      SHIFT-G ֱתļеĳһָС**
+  ʾмҪͨݣ֮ſִ²!!!
 
-  ʾмҪͨݣ֮ſִ²!!!
+  1.  CTRL ſȻ g ǳΪ CTRL-G
+     ῴҳײһ״̬ϢУʾǵǰ༭ļ
+     ļйλáסкţڲ3õ
 
-  1.  CTRL ſȻ g Ȼͻῴҳײһ״̬
-     ϢУʾǵǰ༭ļļס3кš
+ʾҲĻ½ǿλã 'ruler' ѡʱ
+      (μ :help 'ruler')
 
-  2.  SHIFT-G ʹõǰֱתļһС
-
-  3. ͣкţȻ SHIFT-GͿԷصһΰ
-     CTRL-g ʱڵкˡעкʱкǲĻʾ
-     ġ
-
-  4. Ը⣬Լִв1
+  2. д G ʹõǰֱתļһС
+      gg ʹõǰֱתļһС
 
+  3. ͣкţȻд GͿԷصһΰ
+     CTRL-G ʱڵˡ
 
+  4. ûĻִв13Ĳϰ
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			Ľڶڡ
+			Ľڶڣ
 
 
-     **  / ԼβַڵǰļвҸַ**
+     **  / һַڵǰļвҸַ**
 
   1. ģʽ / ַʱע⵽ַ͹궼Ļ
       : һġ
@@ -433,23 +516,22 @@
   2.  errroor <س>ǸerrroorҪҵַ
 
   3. ҪͬһεַֻҪ n Ҫ෴ͬһε
-      Shift-N ɡ
+     д N ɡ
 
   4. ַʹ ?  / С
 
----> When the search reaches the end of the file it will continue at the start.
-
-  "errroor" is not the way to spell error;  errroor is an error.
-
-  ʾѾļĩβһԶļͷҡ
-
+  5. Ҫص֮ǰλð CTRL-O (ס Ctrl ͬʱĸ o)ظ
+     ˸ಽCTRL-I תµλá
 
+--->  "errroor" is not the way to spell error;  errroor is an error.
+ʾѾļĩβһԶļͷң
+      'wrapscan' ѡλ
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   ĽڡŵĲ
+		   ĽڣŵĲ
 
 
-	      **  % ԲԵ )]}**
+	      **  % ԲԵ )]}**
 
   1. ѹڱ --> һеκһ ([  { 
 
@@ -459,17 +541,17 @@
 
   4. ٴΰ % ͿԵĵһŴ
 
----> This ( is a test line with ('s, ['s ] and {'s } in it. ))
-
-ʾڳʱҲԵǺõġ
+  5. ƶ굽һ ()[]{  }  % 鿴Ϊ
 
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
 
 
+ʾڳʱҲԵǺõġ
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      ĽĽڡķ֮һ
+		      ĽĽڣ滻
 
 
 		**  :s/old/new/g 滻 old Ϊ new**
@@ -479,46 +561,48 @@
   2.  :s/thee/the <س> עֻıеĵһƥ
      
 
-  3.  :s/thee/the/g	滻ȫеƥ䴮
-
----> the best time to see thee flowers is in thee spring.
-
-  4. Ҫ滻ֵ֮ÿƥ䴮 :#,#s/old/new/g (#,#
-     ек) :%s/old/new/g 滻ļеÿƥ䴮
-
+  3.  :s/thee/the/g	滻ȫеƥ䴮е "thee" ᱻ
+     ı䡣
 
+---> thee best time to see thee flowers is in thee spring.
 
+  4. Ҫ滻ֵ֮ÿƥ䴮
+        :#,#s/old/new/g    #,# 滻
+                              βекš
+        :%s/old/new/g     滻ļеÿƥ䴮
+        :%s/old/new/gc    ҵļеÿƥ䴮Ҷÿƥ䴮
+                              ʾǷ滻
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 			       ĽС
 
 
-  1. Ctrl-g ʾǰλúļ״̬ϢShift-G ڽ
-     תļһСһкȻ Shift-G ǽƶ
-     ŴС
-
-  2.  / Ȼһַڵǰ༭ĵҸַ
-     ʺ ? Ȼһַڵǰ༭ĵǰҸ
-     һβ֮ n ظһεͬһϲ
-     һַڣ߰ Shift-N ෴¸ַڡ
+  1. CTRL-G ʾǰλúļ״̬Ϣ
+     G ڽתļһС
+     һкȻд G ǽƶкŴС
+     gg ڽתļһС
+
+  2.  / Ȼһַڵǰ༭ĵҸַ
+      ? Ȼһַڵǰ༭ĵзҸַ
+     һβ֮ n ظһεͬһϲ
+     һƥַڣ߰д N ෴һƥַڡ
+     CTRL-O תؽϾɵλãCTRL-I µλá
 
-  3. 굱ǰλ()[]{} % ԽƶԵ
-     ϡ
+  3. 굱ǰλ()[]{} % ὫƶԵϡ
 
   4. һ滻ͷһַ old Ϊµַ new  :s/old/new
      һ滻еַ old Ϊµַ new  :s/old/new/g
      滻еַ old Ϊµַ new  :#,#s/old/new/g
      ļ滻еַ old Ϊµַ new  :%s/old/new/g
-     ȫ滻ʱѯûȷÿ滻 c ѡ :%s/old/new/gc
-
+     ȫ滻ʱѯûȷÿ滻 c ־        :%s/old/new/gc
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		彲һڡ VIM ִⲿķ
+		彲һڣ VIM ִⲿķ
 
 
-	   **  :! Ȼһⲿִиⲿ**
+	   **  :! Ȼһⲿִиⲿ**
 
-  1. Ϥ : ù굽ĻײͿˡ
+  1. Ϥ : ʹƶĻײͿһˡ
 
   2. ̾ ! ִַⲿ shell ˡ
 
@@ -526,15 +610,17 @@
      ݣͬʾ ls Ľһ !ls û
      ã :!dir 
 
----> ʾ еⲿַʽִС
+ʾеⲿַʽִУвЩ
+
+ʾе :  <س> ӽԺǾͲᵽһ
+      ˡ
 
----> ʾ е :  <س> ա
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		      彲ڶڡùڱļĸϢ
+		      彲ڶڣڱļĸϢ
 
 
 	     ** ҪļĸĶ浽ļУ :w FILENAME **
@@ -542,60 +628,63 @@
   1.  :!dir  :!ls ֪ǰĿ¼ݡӦ֪󻹵
      <س> ɡ
 
-  2. ѡһδļ TEST 
+  2. ѡһδõļ TEST
 
   3.  :w TEST  (˴ TEST ѡļ)
 
-  4.  TEST Ϊļļ (VIM ̳)Ϊȷȷ棬
-     ٴ :!dir 鿴Ŀ¼бݡ
+  4.  TEST Ϊļļ (Vim ̳)Ϊ֤һ㣬
+     ٴ :!dir  :!ls 鿴Ŀ¼бݡ
 
----> ע˳ VIM Ȼļ TEST Ϊ룬ôļ
+ע⣺˳ Vim Ȼ vim TEST ٴ Vimôļ
      Ӧͬʱļȫһġ
 
-  5. ͨ :!rm TEST ɾ TEST ļˡ
-
+  5. ɾ TEST ļˡ MS-DOS £룺   :!del TEST
+                                  Unix £룺     :!rm TEST
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    彲ڡһѡԵı
+		    彲ڣһѡԵı
 
 
-		** ҪļĲݣ :#,# w FILENAME **
+	    ** ҪļĲݣ v motion :w FILENAME **
 
-  1. ִһ :!dir  :!ls ֪ǰĿ¼ݣȻѡһʵ
-     ļ TEST 
+  1. ƶ굽С
 
-  2. ŽƶҳˣȻ CTRL-g ҵекš
-     кŶ
+  2. Ű v ƶĿϡע⵽֮ıˡ
 
-  3. Űѹƶҳ׶ˣٰһ CTRL-g ҲкŶ
+  3. Ȼ : ַĻײ :'<,'> 
 
-  4. Ϊֻµĳ֣ :#,# w TEST  #,# 
-     Ҫסк(к,׶к) TEST ѡļ
-
-  5.  :!dir ȷļǷȷ档ȱɾ
+  4.  w TEST TEST һδʹõļȷ
+     :'<,'>w TEST ֮ <س> 
 
+  5. ʱ Vim ѡед뵽 TEST ļȥʹ :!dir  :!ls
+     ȷļȷ档ȱɾһлõ
 
+ʾ v ʹ Vim ģʽѡȡĴƶʹѡȡ
+      Сʹһѡıв磬 d ɾ
+      ѡеıݡ
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		   彲Ľڡȡͺϲļ
+		   彲Ľڣȡͺϲļ
 
 
        ** Ҫǰļвļݣ :r FILENAME **
 
-  1.  :!dir ȷǰ洴 TEST ļڡ
+  1. ѹƶһС
 
-  2. Ȼ󽫹ƶǰҳĶˡ
+رʾִв2֮彲ڵ֣ʱƶ
+          ٴοݡ
 
-رʾ ִв3֮彲ڣʱƶص
+  2. ͨ :r TEST ǰ洴Ϊ TEST ļȡ
+     ȡļӹλôʼ롣
 
-  3. ͨ :r TEST ǰ洴Ϊ TEST ļȡ
+  3. ΪȷļѾȡɹƶصԭλþͿעݵ
+     彲ڵݣһԭʼݣһļĸ
 
-رʾȡļӹλôʼ롣
+ʾԶȡⲿ磬 :r !ls Զȡ ls 
+      ڹ档
 
-  4. ΪȷļѾȡɹƶصԭλþͿעݵ
-     彲ڣһԭһļĸ
 
 
 
@@ -605,237 +694,293 @@
 
   1. :!command ִһⲿ command
 
-     뿴һЩʵӡ
-	  :!dir  -  ʾǰĿ¼ݡ
-	  :!rm FILENAME  -	ɾΪ FILENAME ļ
+     뿴һЩʵӣ
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  ʾǰĿ¼ݡ
+	  :!del FILENAME   :!rm FILENAME   -  ɾΪ FILENAME ļ
 
   2. :w FILENAME  ɽǰ VIM ڱ༭ļ浽Ϊ FILENAME 
      С
 
-  3. :#,#w FILENAME ɽǰ༭ļ #  # еݱ浽ļ
+  3. v motion :w FILENAME ɽǰ༭ļпģʽѡеݱ浽ļ
      FILENAME С
 
   4. :r FILENAME ȡļ FILENAME 뵽ǰļĹλ
      档
 
-
-
-
-
+  5. :r !dir Զȡ dir õǰļĹλú档
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			 һڡô
+			 һڣ
 
 
 	 **  o ڹ·µһвģʽ**
 
   1. 뽫ƶ ---> һС
 
-  2. Сд o ڹ *·* µһвģʽ
+  2. Сд o ڹ *·* µһУʹ
+     ģʽ
 
-  3. ȻƱ ---> в <ESC> ˳ģʽģʽ
+  3. ȻһЩ֣֮ <ESC> ˳ģʽģʽ
 
 ---> After typing  o  the cursor is placed on the open line in Insert mode.
 
   4. Ϊڹ *Ϸ* µһУֻҪд O Сд o
-     Ϳˡвһ°ɡ괦ڸʱ Shift-O
-     ڸϷ¿һС
-
-Open up a line above this by typing Shift-O while the cursor is on this line.
+     Ϳˡвһ°ɡ
 
+---> Open up a line above this by typing O while the cursor is on this line.
 
 
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			ڶڡù
+			ڶڣ
 
 
 		     **  a ڹ֮ı **
 
-  1. ģʽͨ $ ƶ ---> ĵһ
-     ĩβ
+  1. ģʽ½ƶ ---> ĵһеס
+
+  2.  e ֱλ li ĩβ
 
-  2. Сд a ڹ֮ıˡд A ֱ
-     ĩı
+  3. Сд a ڹ֮ıˡ
 
-ʾд A Ĳĩı i궨λ
-      һַı<ESC> ظģʽͷҼƶԼ
-      x ɾǰλַȵ෱ӵĲ
+  4. ʲһе֮ <ESC> ˳ģʽص
+     ģʽ
 
-  3. ֮һоͿԲˡעıģʽǻ
-     ȫһµģֻıλöλвͬˡ
+  5. ʹ e ƶ굽һĵʣظ3Ͳ4
 
----> This line will allow you to practice
----> This line will allow you to practice appending text to the end of a line.
+---> This li will allow you to pract appendi text to a line.
+---> This line will allow you to practice appending text to a line.
 
+ʾai  A ģʽΩһַλá
 
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		    ڡһûİ汾
+		    ڣһûİ汾
 
 
 		      ** д R 滻ַ**
 
-  1. 뽫ƶ ---> ĵһС
-
-  2. ƶ굽һвͬڱ ---> ĵڶеĵһʵĿʼ
-      last 
+  1. 뽫ƶ ---> ĵһСƶ굽һ xxx 
+     ʼλá
 
-  3. Ȼд R ʼѵһеĲͬڵڶеʣַһ룬
+  2. Ȼд R ʼѵһеĲͬڵڶеʣַһ룬
      ȫ滻ԭеַʹõһȫͬڶˡ
 
----> To make the first line the same as the last on this page use the keys.
----> To make the first line the same as the second, type R and the new text.
+  3. Ű <ESC> ˳滻ģʽصģʽע⵽δ滻ı
+     Ȼԭ״
 
-  4. ע <ESC> ˳ûģʽظģʽδ滻ı
-     Ȼԭ״
+  4. ظϲ裬ʣ xxx Ҳ滻
 
+---> Adding 123 to xxx gives you xxx.
+---> Adding 123 to 456 gives you 579.
 
+ʾ滻ģʽģʽƣÿַɾһеַ
 
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  Ľڣճı
 
 
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			    Ľڡѡ
+		 ** ʹò y ıʹ p ճı **
 
+  1. λ ---> һУƶ "a)" ֮
 
-		  ** ÿʹһ滻ɺԴСдѡ **
+  2. ʹ v ģʽƶ굽 "first" ǰ档
 
+  3.  y Գ()ı
 
-  1. Ҫҵ ignore ģʽ /ignore ҪظҸôʣ
-     ظ n 
+  4. Ȼƶ굽һеĩβj$
 
-  2. Ȼ ic ѡ(icӢĺԴСдIgnore Caseĸд)
-     
-	:set ic
+  5.  p Է(ճ)˵ıȻ룺a second <ESC>
 
-  3. ڿͨ n ٴβҵ ignoreظҿظ n 
+  6. ʹÿģʽѡ " item." y ƣ j$ ƶһĩβ
+      p ıճ
 
-  4. Ȼ hlsearch  incsearch ѡݡ
-     :set hls is
+--->  a) this is the first item.
+      b)
 
-  5. ڿٴʲôЧ
-     /ignore
+  ʾ԰ y ʹã yw һʡ
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-			       С
+			    ڣѡ
 
 
-  1. Сд o ڹ·µһв¿ף
-     ģʽ
-     д O ڹϷµһв¿ף
-     ģʽ
+		  ** ÿʹһ滻ɺԴСдѡ **
 
-  2. Сд a ڹλ֮ı
-     д A ڹеĩ֮ı
+  1. Ҫҵ ignore ģʽ /ignore <س>
+     ҪظҸôʣظ n 
+
+  2. Ȼ ic ѡ(Ignore CaseԴСд)룺 :set ic
+
+  3. ڿͨ n ٴβҵ ignoreע⵽ Ignore  IGNORE 
+     Ҳҵˡ
 
-  3. д R 滻ģʽֱ <ESC> ˳滻ģʽ
-     ģʽ
+  4. Ȼ hlsearch  incsearch ѡ룺 :set hls is
 
-  4.  :set xxx  xxx ѡ
+  5. ڿٴʲôЧ /ignore <س>
 
+  6. ҪúԴСд룺 :set noic
+
+ʾҪƳƥĸʾ룺  :nohlsearch
+ʾҪһβʱĸСдʹ \c
+      /ignore\c <س>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       С
 
+  1. Сд o ڹ·µһвģʽ
+     д O ڹϷµһС
 
+  2. Сд a ڹλ֮ı
+     д A ڹеĩ֮ı
 
+  3. e ʹƶĩβ
 
+  4.  y ıp ճǰƵı
 
+  5. д R 滻ģʽֱ <ESC> صģʽ
 
+  6.  :set xxx  xxx ѡһЩõѡ£
+  	'ic' 'ignorecase'	ʱĸСд
+	'is' 'incsearch'	Ҷʱʾƥ
+	'hls' 'hlsearch'	ʾеƥ
+     ѡ汾Ҳ԰汾
 
+  7. ѡǰ no Թرѡ  :set noic
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       ߽߰
+			  ߽һڣȡϢ
+
 
 		      ** ʹ߰ϵͳ **
 
   Vim ӵһϸȫ߰ϵͳҪðϵͳѡַ
-  ֮һ
+  ֮һ
 	-  <HELP>  (еĻ)
 	-  <F1>  (еĻ)
 	- 	:help <س>
 
+  Ķе˽ιġ
+   CTRL-W CTRL-W   ʹڴ֮ת
    :q <س> Թرհڡ
 
   ṩһȷĲ":help"ҵڸİ
-  ²(ɱ˰سŶ:)
+  ²(ɱ˰سŶ)
+
+	:help w
+	:help c_CTRL-D
+	:help insert-index
+	:help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  ߽ڶڣű
+
 
-	  :help w <س>
-	  :help c_<T <س>
-	  :help insert-index <س>
-	  :help user-manual <س>
+			  **  Vim  **
 
+  Vim ĹҪ Vi ö࣬д󲿷ֶûȱʡáΪʹø
+  ԣôһ vimrc ļ
 
+  1. ʼ༭ vimrc ļȡʹõĲϵͳ
+        :edit ~/.vimrc		 Unix ϵͳʹõ
+        :edit $VIM/_vimrc	 MS-Windows ϵͳʹõ
 
+  2. Ŷȡ vimrc ʾļݣ
+        :r $VIMRUNTIME/vimrc_example.vim
+
+  3. ļΪ
+        :write
+
+  ´ Vim ʱ༭ͻ﷨Ĺܡ
+  ԰ϲĸӵ vimrc ļС
+  Ҫ˽Ϣ :help vimrc-intro
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-		       ڰ˽ôһű
+			    ߽ڣȫ
 
-			  ** vimĹ **
 
-  VimĹҪviö࣬󲿷ֹܶûȱʡΪ
-  ܣôһvimrcļ
+	      ** ʹ CTRL-D  <TAB> Խвȫ **
 
-  1. ʼ༭vimrcļȡʹõĲϵͳ
+  1. ȷ Vim ԼģʽУ :set nocp
 
-     :edit ~/.vimrc		Unixϵͳʹõ
-     :edit $VIM/_vimrc		Windowsϵͳʹõ
+  2. 鿴һµǰĿ¼ѾЩļ룺 :!ls     :!dir
 
-  2. ŵvimrcļ
+  3. һĿ¼ʼ֣룺 :e
 
-     :read $VIMRUNTIME/vimrc_example.vim
+  4. Ű CTRL-D Vim ʾ e ʼб
 
-  3. ļΪ
+  5. Ȼ <TAB> Vim ᲹȫΪ :edit 
 
-     :write
+  6. һոԼһļļʼ֣磺 :edit FIL
 
-  ´vimʱ򣬱༭ͻ﷨ĹܡԼϲ
-  ӵvimrcļС
+  7. Ű <TAB> Vim Ჹȫļ(Ωһƥ)
+
+ʾȫЧֻ賢԰ CTRL-D  <TAB>
+       :help ǳá
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+				  ߽С
 
-  vim ̵̳˽ֻ̳Ϊ˼ؽһvim༭
-  ѧʹñ༭ˡӹɣvimкܶܶ̳
-  ܵĻԶءҪͨĻŬŶһĶ
-  vimֲᣬʹõǡ
-	:help user-manual
 
-  Ϊ˸һĲοѧϰⱾֵƼ
+  1.  :help ߰ <F1>  <Help> Դ򿪰ڡ
 
-	Vim - Vi Improved - ߡSteve Oualline
-	New Riders
+  2.  :help cmd ҵ cmd İ
 
-  ǵһȫvim鼮ڳѧرáлдʵ
-  ͼʾ֪飬 http://iccf-holland.org/click5.html
+  3.  CTRL-W CTRL-W  ʹڴ֮ת
 
-  ⱾȽ˶ҪvivimҲֵƼ
+  4.  :q Թرհ
 
-	Learning the Vi Editor - ߡLinda Lamb
-	O'Reilly & Associates Inc.
+  5. Դһ vimrc űļƫõá
 
-  һ飬ܹͨ˽⵽ȫviܹ顣ĵ
-  汾ҲһЩvimϢ
+  6.  : ʱ CTRL-D Բ鿴ܵĲȫ
+      <TAB> ʹһȫ
 
-  ̳Calorado School of MineseMichael C. PierceRobert K.
-  Ware дģColorado State UniversityCharles Smithṩ
-  ܶഴ⡣ͨŵַǡ
 
-	bware@mines.colorado.edu
 
-  ̳Bram MoolenaarרΪvim޶
 
 
 
-  ߸ԡ
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  vim ̵̳˾ͽˡֻ̳Ϊ˼ؽһ Vim ༭
+  ʹ༭ˡӹɣvimкܶܶ̳
+  ܵľĲúԶҪͨĻŬŶһĶ
+  Vim ûֲᣬʹõǣ :help user-manual
+
+  ⱾֵƼڸһĶѧϰ
+	Vim - Vi Improved - ߣSteve Oualline
+	磺New Riders
+  ǵһȫ Vim 鼮ڳѧرáадʵ
+  ͼʾ
+  ֪飬 http://iccf-holland.org/click5.html
+
+  ⱾȽ˶ݸǹ Vi  VimҲֵƼ
+	Learning the Vi Editor - ߣLinda Lamb
+	磺O'Reilly & Associates Inc.
+  һ飬ܹͨ˽⵽κҪʹ Vi 顣
+  ĵ汾ҲһЩ Vim Ϣ
+
+  ̳ Calorado School of Mines  Michael C. Pierce 
+  Robert K. Ware дģкܶഴ Colorado State University 
+  Charles Smith ṩߵĵǣbware@mines.colorado.edu
+
+  ̳ Bram Moolenaar רΪ Vim ޶
+
+  ߸ԣ
   ===========
       Ľ̷̳֮Ϊ̩ <beos@turbolinux.com.cn>
-      һϵַlinuxrat@gnuchina.org
+      һϵַlinuxrat@gnuchina.org
 
       Ľ̳ǴӼĽ̷̳ʹ Debian GNU/Linux ĿС
       ڹдĺת  autoconvert תɵģת
       ĽһЩϸڵĸĶ
 
-  ¼
+  ¼
   =========
+      20121001  <alick9188@gmail.com>
+       vimtutor  1.5  1.7
+
       20020830 ̩ <beos@turbolinux.com.cn>
       л RMS@SMTH ָദ
 
diff -Naur vim73.orig/runtime/tutor/tutor.zh_cn.utf-8 vim73/runtime/tutor/tutor.zh_cn.utf-8
--- vim73.orig/runtime/tutor/tutor.zh_cn.utf-8	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/tutor/tutor.zh_cn.utf-8	2013-08-04 19:09:10.000612360 +0000
@@ -0,0 +1,996 @@
+===============================================================================
+=      欢     迎     阅     读   《 V I M  教  程 》   ——      版本 1.7       =
+===============================================================================
+
+     Vim 是一个具有很多命令的功能非常强大的编辑器。限于篇幅，在本教程当中
+     就不详细介绍了。本教程的设计目标是讲述一些必要的基本命令，而掌握好这
+     些命令，您就能够很容易地将 Vim 当作一个通用编辑器来使用了。
+
+     完成本教程的内容大约需要25-30分钟，取决于您训练的时间。
+
+     注意：
+     每一节的命令操作将会更改本文。推荐您复制本文的一个副本，然后在副本上
+     进行训练(如果您是通过"vimtutor"来启动教程的，那么本文就已经是副本了)。
+
+     切记一点：本教程的设计思路是在使用中进行学习的。也就是说，您需要通过
+     执行命令来学习它们本身的正确用法。如果您只是阅读而不操作，那么您可能
+     会很快遗忘这些命令的！
+
+     好了，现在请确定您的Shift-Lock(大小写锁定键)还没有按下，然后按键盘上
+     的字母键 j 足够多次来移动光标，直到第一节的内容能够完全充满屏幕。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第一讲第一节：移动光标
+
+
+	     ** 要移动光标，请依照说明分别按下 h、j、k、l 键。 **
+
+	     ^
+	     k		    提示： h 的键位于左边，每次按下就会向左移动。
+       < h	 l >		   l 的键位于右边，每次按下就会向右移动。
+	     j			   j 键看起来很象一支尖端方向朝下的箭头。
+	     v
+
+  1. 请随意在屏幕内移动光标，直至您觉得舒服为止。
+
+  2. 按下下行键(j)，直到出现光标重复下行。
+
+---> 现在您应该已经学会如何移动到下一讲吧。
+
+  3. 现在请使用下行键，将光标移动到第一讲第二节。
+
+提示：如果您不敢确定您所按下的字母，请按下<ESC>键回到正常(Normal)模式。
+      然后再次从键盘输入您想要的命令。
+
+提示：光标键应当也能正常工作的。但是使用hjkl键，在习惯之后您就能够更快
+      地在屏幕内四处移动光标。真的是这样！
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第一讲第二节：VIM的进入和退出
+
+
+  !! 特别提示：敬请阅读本一节的完整内容，然后再执行以下所讲解的命令。
+
+  1. 按<ESC>键(这是为了确保您处在正常模式)。
+
+  2. 然后输入：			:q! <回车>
+     这种方式的退出编辑器会丢弃您进入编辑器以来所做的改动。
+
+  3. 如果您看到了命令行提示符，请输入能够带您回到本教程的命令，那就是：
+     vimtutor <回车>
+
+  4. 如果您自信已经牢牢记住了这些步骤的话，请从步骤1执行到步骤3退出，然
+     后再次进入编辑器。
+
+提示： :q! <回车> 会丢弃您所做的任何改动。几讲之后您将学会如何保存改动到文件。
+
+  5. 将光标下移到第一讲第三节。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第一讲第三节：文本编辑之删除
+
+
+   ** 在正常(Normal)模式下，可以按下 x 键来删除光标所在位置的字符。**
+
+  1. 请将光标移动到本节中下面标记有 ---> 的那一行。
+
+  2. 为了修正输入错误，请将光标移至准备删除的字符的位置处。
+
+  3. 然后按下 x 键将错误字符删除掉。
+
+  4. 重复步骤2到步骤4，直到句子修正为止。
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+  5. 好了，该行已经修正了，下面是第一讲第四节。
+
+特别提示：在浏览本教程时，不要强行记忆。记住一点：在使用中学习。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第一讲第四节：文本编辑之插入
+
+
+	 ** 在正常模式下，可以按下 i 键来插入文本。**
+
+  1. 请将光标移动到本节中下面标记有 ---> 的第一行。
+
+  2. 为了使得第一行内容雷同于第二行，请将光标移至文本第一个准备插入字符
+     的位置。
+
+  3. 然后按下 i 键，接着输入必要的文本字符。
+
+  4. 每个错误修正完毕后，请按下 <ESC> 键返回正常模式。
+     重复步骤2至步骤4以便修正句子。
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+  5. 如果您对文本插入操作已经很满意，请接着阅读下面的第一讲第五节。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第一讲第五节：文本编辑之添加
+
+
+			** 按 A 键以添加文本。 **
+
+  1. 移动光标到下面第一个标记有 ---> 的一行。
+     光标放在那一行的哪个字符上并不重要。
+
+  2. 按 A 键输入必要的添加内容。
+
+  3. 文本添加完毕后，按 <ESC> 键回到正常模式。
+
+  4. 移动光标到下面第二个标记有 ---> 的一行。重复步骤2和步骤3以改正这个句子。
+
+---> There is some text missing from th
+     There is some text missing from this line.
+---> There is also some text miss
+     There is also some text missing here.
+
+  5. 当您对添加文本操作感到满意时，请继续学习第一讲第六节。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第一讲第六节：编辑文件
+
+		    ** 使用 :wq 以保存文件并退出。 **
+
+  特别提示：在执行以下步骤之前，请先读完整个小节！
+
+  1. 如您在第一讲第二节中所做的那样退出本教程： :q!
+     或者，如果您可以访问另一个终端，请在那里执行以下操作。
+
+  2. 在 shell 的提示符下输入命令： vim tutor <回车>
+     'vim'是启动 Vim 编辑器的命令，'tutor'是您希望编辑的文件的名字。
+     请使用一个可以改动的文件。
+
+  3. 使用您在前面的教程中学到的命令插入删除文本。
+
+  4. 保存改动过的文件并退出 Vim，按这些键： :wq  <回车>
+
+  5. 如果您在步骤1中已经退出 vimtutor，请重启 vimtutor 移动到下面的小结一节。
+
+  6. 阅读完以上步骤，弄懂它们的意义，然后在实践中进行练习。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第一讲小结
+
+
+  1. 光标在屏幕文本中的移动既可以用箭头键，也可以使用 hjkl 字母键。
+	 h (左移)	j (下行)       k (上行)	    l (右移)
+
+  2. 欲进入 Vim 编辑器(从命令行提示符)，请输入：vim 文件名 <回车>
+
+  3. 欲退出 Vim 编辑器，请输入 <ESC>   :q!   <回车> 放弃所有改动。
+                      或者输入 <ESC>   :wq   <回车> 保存改动。
+
+  4. 在正常模式下删除光标所在位置的字符，请按： x
+
+  5. 欲插入或添加文本，请输入：
+
+	 i   输入欲插入文本   <ESC>		在光标前插入文本
+	 A   输入欲添加文本   <ESC>             在一行后添加文本
+
+特别提示：按下 <ESC> 键会带您回到正常模式或者撤消一个不想输入或部分完整
+的命令。
+
+好了，第一讲到此结束。下面接下来继续第二讲的内容。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第二讲第一节：删除类命令
+
+
+	    ** 输入 dw 可以从光标处删除至一个单词的末尾。**
+
+  1. 请按下 <ESC> 键确保您处于正常模式。
+
+  2. 请将光标移动到本节中下面标记有 ---> 的那一行。
+
+  3. 请将光标移至准备要删除的单词的起始处。
+
+  4. 接着输入 dw 删除掉该单词。
+
+  特别提示：当您输入时，字母 d 会同时出现在屏幕的最后一行。Vim 在等待您输入
+  字母 w。如果您看到的是除 d 外的其他字符，那表明您按错了；请按下 <ESC> 键，
+  然后重新再来。
+
+---> There are a some words fun that don't belong paper in this sentence.
+
+  5. 重复步骤3和步骤4，直至句子修正完毕。接着继续第二讲第二节内容。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      第二讲第二节：更多删除类命令
+
+
+		   ** 输入 d$ 从当前光标删除到行末。**
+
+  1. 请按下 <ESC> 键确保您处于正常模式。
+
+  2. 请将光标移动到本节中下面标记有 ---> 的那一行。
+
+  3. 请将光标移动到该行的尾部(也就是在第一个点号‘.’后面)。
+
+  4. 然后输入 d$ 从光标处删至当前行尾部。
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+
+  5. 请继续学习第二讲第三节就知道是怎么回事了。
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第二讲第三节：关于命令和对象
+
+
+  许多改变文本的命令都由一个操作符和一个动作构成。
+  使用删除操作符 d 的删除命令的格式如下：
+
+	d   motion
+
+  其中：
+    d      - 删除操作符。
+    motion - 操作符的操作对象(在下面列出)。
+
+  一个简短的动作列表：
+    w - 从当前光标当前位置直到下一个单词起始处，不包括它的第一个字符。
+    e - 从当前光标当前位置直到单词末尾，包括最后一个字符。
+    $ - 从当前光标当前位置直到当前行末。
+
+  因此输入 de 会从当前光标位置删除到单词末尾。
+
+特别提示：
+    对于勇于探索者，请在正常模式下面仅按代表相应动作的键而不使用操作符，您
+    将看到光标的移动正如上面的对象列表所代表的一样。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第二讲第四节：使用计数指定动作
+
+
+             ** 在动作前输入数字会使它重复那么多次。 **
+
+  1. 移动光标到下面标记有 ---> 的一行的开始。
+
+  2. 输入 2w 使光标向前移动两个单词。
+
+  3. 输入 3e 使光标向前移动到第三个单词的末尾。
+
+  4. 输入 0 (数字零) 移动光标到行首。
+
+  5. 重复步骤2和步骤3，尝试不同的数字。
+
+---> This is just a line with words you can move around in.
+
+  6. 请继续学习第二讲第五节。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       第二讲第五节：使用计数以删除更多
+
+
+	       ** 使用操作符时输入数字可以使它重复那么多次。 **
+
+  上面已经提到过删除操作符和动作的组合，您可以在组合中动作之前插入一个数字以
+  删除更多：
+	 d   number(数字)   motion
+
+  1. 移动光标到下面标记有 ---> 的一行中第一个大写字母单词上。
+
+  2. 输入 d2w 以删除两个大写字母单词。
+
+  3. 重复步骤1和步骤2，使用不同的数字使得用一个命令就能删除全部相邻的大写字母
+     单词
+
+--->  this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    第二讲第六节：操作整行
+
+
+		     ** 输入 dd 可以删除整一个当前行。 **
+
+  鉴于整行删除的高频度，Vi 的设计者决定要简化整行删除操作，您仅需要在同一行上
+  击打两次 d 就可以删除掉光标所在的整行了。
+
+  1. 请将光标移动到本节中下面的短句段落中的第二行。
+  2. 输入 dd 删除该行。
+  3. 然后移动到第四行。
+  4. 接着输入 2dd 删除两行。
+
+--->  1)  Roses are red,
+--->  2)  Mud is fun,
+--->  3)  Violets are blue,
+--->  4)  I have a car,
+--->  5)  Clocks tell time,
+--->  6)  Sugar is sweet
+--->  7)  And so are you.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   第二讲第七节：撤消类命令
+
+
+	** 输入 u 来撤消最后执行的命令，输入 U 来撤消对整行的修改。 **
+
+  1. 请将光标移动到本节中下面标记有 ---> 的那一行，并将其置于第一个错误
+     处。
+  2. 输入 x 删除第一个不想保留的字母。
+  3. 然后输入 u 撤消最后执行的(一次)命令。
+  4. 这次要使用 x 修正本行的所有错误。
+  5. 现在输入一个大写的 U ，恢复到该行的原始状态。
+  6. 接着多次输入 u 以撤消 U 以及更前的命令。
+  7. 然后多次输入 CTRL-R (先按下 CTRL 键不放开，接着按 R 键)，这样就
+     可以重做被撤消的命令，也就是撤消掉撤消命令。
+
+---> Fiix the errors oon thhis line and reeplace them witth undo.
+
+  8. 这些都是非常有用的命令。下面是第二讲的小结了。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第二讲小结
+
+
+  1. 欲从当前光标删除至下一个单词，请输入：dw
+  2. 欲从当前光标删除至当前行末尾，请输入：d$
+  3. 欲删除整行，请输入：dd
+
+  4. 欲重复一个动作，请在它前面加上一个数字：2w
+  5. 在正常模式下修改命令的格式是：
+               operator   [number]   motion
+     其中：
+       operator - 操作符，代表要做的事情，比如 d 代表删除
+       [number] - 可以附加的数字，代表动作重复的次数
+       motion   - 动作，代表在所操作的文本上的移动，例如 w 代表单词(word)，
+		  $ 代表行末等等。
+
+  6. 欲移动光标到行首，请按数字0键：0
+
+  7. 欲撤消以前的操作，请输入：u (小写的u)
+     欲撤消在一行中所做的改动，请输入：U (大写的U)
+     欲撤消以前的撤消命令，恢复以前的操作结果，请输入：CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   第三讲第一节：置入类命令
+
+
+		** 输入 p 将最后一次删除的内容置入光标之后。 **
+
+  1. 请将光标移动到本节中下面第一个标记有 ---> 的一行。
+
+  2. 输入 dd 将该行删除，这样会将该行保存到 Vim 的一个寄存器中。
+
+  3. 接着将光标移动到 c) 一行，即准备置入的位置的上方。记住：是上方哦。
+
+  4. 然后在正常模式下(<ESC>键进入)输入 p 将该行粘贴置入。
+
+  5. 重复步骤2至步骤4，将所有的行依序放置到正确的位置上。
+
+---> d) Can you learn too?
+---> b) Violets are blue,
+---> c) Intelligence is learned,
+---> a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			   第三讲第二节：替换类命令
+
+
+	  ** 输入 r 和一个字符替换光标所在位置的字符。**
+
+  1. 请将光标移动到本节中下面标记有 ---> 的第一行。
+
+  2. 请移动光标到第一个出错的位置。
+
+  3. 接着输入 r 和要替换成的字符，这样就能将错误替换掉了。
+
+  4. 重复步骤2和步骤3，直到第一行已经修改完毕。
+
+--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
+--->  When this line was typed in, someone pressed some wrong keys!
+
+  5. 然后我们继续学习第三讲第三节。
+
+特别提示：切记您要在使用中学习，而不是在记忆中学习。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第三讲第三节：更改类命令
+
+
+		 ** 要改变文本直到一个单词的末尾，请输入 ce **
+
+  1. 请将光标移动到本节中下面标记有 ---> 的第一行。
+
+  2. 接着把光标放在单词 lubw 的字母 u 的位置那里。
+
+  3. 然后输入 cw 以及正确的单词(在本例中是输入 ine )。
+
+  4. 最后按 <ESC> 键，然后光标定位到下一个错误第一个准备更改的字母处。
+
+  5. 重复步骤3和步骤4，直到第一个句子完全雷同第二个句子。
+
+---> This lubw has a few wptfd that mrrf changing usf the change operator.
+---> This line has a few words that need changing using the change operator.
+
+提示：请注意 ce 命令不仅仅是删除了一个单词，它也让您进入插入模式了。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       第三讲第四节：使用c更改更多
+
+
+	   ** 更改类操作符可以与删除中使用的同样的动作配合使用。 **
+
+  1. 更改类操作符的工作方式跟删除类是一致的。操作格式是：
+
+         c    [number]   motion
+
+  2. 动作参数(motion)也是一样的，比如 w 代表单词，$代表行末等等。
+
+  3. 请将光标移动到本节中下面标记有 ---> 的第一行。
+
+  4. 接着将光标移动到第一个错误处。
+
+  5. 然后输入 c$ 使得该行剩下的部分更正得同第二行一样。最后按 <ESC> 键。
+
+---> The end of this line needs some help to make it like the second.
+---> The end of this line needs to be corrected using the  c$  command.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+				  第三讲小结
+
+
+  1. 要重新置入已经删除的文本内容，请按小写字母 p 键。该操作可以将已删除
+     的文本内容置于光标之后。如果最后一次删除的是一个整行，那么该行将置
+     于当前光标所在行的下一行。
+
+  2. 要替换光标所在位置的字符，请输入小写的 r 和要替换掉原位置字符的新字
+     符即可。
+
+  3. 更改类命令允许您改变从当前光标所在位置直到动作指示的位置中间的文本。
+     比如输入 ce 可以替换当前光标到单词的末尾的内容；输入 c$ 可以替换当
+     前光标到行末的内容。
+
+  4. 更改类命令的格式是：
+
+	 c   [number]   motion
+
+现在我们继续学习下一讲。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第四讲第一节：定位及文件状态
+
+  ** 输入 CTRL-G 显示当前编辑文件中当前光标所在行位置以及文件状态信息。
+     输入大写 G 则直接跳转到文件中的某一指定行。**
+
+  提示：切记要先通读本节内容，之后才可以执行以下步骤!!!
+
+  1. 按下 CTRL 键不放开然后按 g 键。我们称这个键组合为 CTRL-G。
+     您会看到页面最底部出现一个状态信息行，显示的内容是当前编辑的文件名
+     和文件中光标位置。请记住行号，它会在步骤3中用到。
+
+提示：您也许会在屏幕的右下角看到光标位置，这会在 'ruler' 选项设置时发生
+      (参见 :help 'ruler')
+
+  2. 输入大写 G 可以使得当前光标直接跳转到文件最后一行。
+     输入 gg 可以使得当前光标直接跳转到文件第一行。
+
+  3. 输入您曾停留的行号，然后输入大写 G。这样就可以返回到您第一次按下
+     CTRL-G 时所在的行了。
+
+  4. 如果您觉得没问题的话，请执行步骤1至步骤3的操作进行练习。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第四讲第二节：搜索类命令
+
+
+     ** 输入 / 加上一个字符串可以用以在当前文件中查找该字符串。**
+
+  1. 在正常模式下输入 / 字符。您此时会注意到该字符和光标都会出现在屏幕底
+     部，这跟 : 命令是一样的。
+
+  2. 接着输入 errroor <回车>。那个errroor就是您要查找的字符串。
+
+  3. 要查找同上一次的字符串，只需要按 n 键。要向相反方向查找同上一次的字
+     符串，请输入大写 N 即可。
+
+  4. 如果您想逆向查找字符串，请使用 ? 代替 / 进行。
+
+  5. 要回到您之前的位置按 CTRL-O (按住 Ctrl 键不放同时按下字母 o)。重复按可以
+     回退更多步。CTRL-I 会跳转到较新的位置。
+
+--->  "errroor" is not the way to spell error;  errroor is an error.
+提示：如果查找已经到达文件末尾，查找会自动从文件头部继续查找，除非
+      'wrapscan' 选项被复位。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   第四讲第三节：配对括号的查找
+
+
+	      ** 输入 % 可以查找配对的括号 )、]、}。**
+
+  1. 把光标放在本节下面标记有 --> 那一行中的任何一个 (、[ 或 { 处。
+
+  2. 接着按 % 字符。
+
+  3. 此时光标的位置应当是在配对的括号处。
+
+  4. 再次按 % 就可以跳回配对的第一个括号处。
+
+  5. 移动光标到另一个 (、)、[、]、{ 或 } 处，按 % 查看其所作所为。
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+
+提示：在程序调试时，这个功能用来查找不配对的括号是很有用的。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      第四讲第四节：替换命令
+
+
+		** 输入 :s/old/new/g 可以替换 old 为 new。**
+
+  1. 请将光标移动到本节中下面标记有 ---> 的那一行。
+
+  2. 输入 :s/thee/the <回车> 。请注意该命令只改变光标所在行的第一个匹配
+     串。
+
+  3. 输入 :s/thee/the/g	则是替换全行的匹配串，该行中所有的 "thee" 都会被
+     改变。
+
+---> thee best time to see thee flowers is in thee spring.
+
+  4. 要替换两行之间出现的每个匹配串，请
+     输入   :#,#s/old/new/g   其中 #,# 代表的是替换操作的若干行中
+                              首尾两行的行号。
+     输入   :%s/old/new/g     则是替换整个文件中的每个匹配串。
+     输入   :%s/old/new/gc    会找到整个文件中的每个匹配串，并且对每个匹配串
+                              提示是否进行替换。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第四讲小结
+
+
+  1. CTRL-G 用于显示当前光标所在位置和文件状态信息。
+     G 用于将光标跳转至文件最后一行。
+     先敲入一个行号然后输入大写 G 则是将光标移动至该行号代表的行。
+     gg 用于将光标跳转至文件第一行。
+
+  2. 输入 / 然后紧随一个字符串是在当前所编辑的文档中正向查找该字符串。
+     输入 ? 然后紧随一个字符串则是在当前所编辑的文档中反向查找该字符串。
+     完成一次查找之后按 n 键是重复上一次的命令，可在同一方向上查
+     找下一个匹配字符串所在；或者按大写 N 向相反方向查找下一匹配字符串所在。
+     CTRL-O 带您跳转回较旧的位置，CTRL-I 则带您到较新的位置。
+
+  3. 如果光标当前位置是括号(、)、[、]、{、}，按 % 会将光标移动到配对的括号上。
+
+  4. 在一行内替换头一个字符串 old 为新的字符串 new，请输入  :s/old/new
+     在一行内替换所有的字符串 old 为新的字符串 new，请输入  :s/old/new/g
+     在两行内替换所有的字符串 old 为新的字符串 new，请输入  :#,#s/old/new/g
+     在文件内替换所有的字符串 old 为新的字符串 new，请输入  :%s/old/new/g
+     进行全文替换时询问用户确认每个替换需添加 c 标志        :%s/old/new/gc
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		第五讲第一节：在 VIM 内执行外部命令的方法
+
+
+	   ** 输入 :! 然后紧接着输入一个外部命令可以执行该外部命令。**
+
+  1. 按下我们所熟悉的 : 命令使光标移动到屏幕底部。这样您就可以输入一行命令了。
+
+  2. 接着输入感叹号 ! 这个字符，这样就允许您执行外部的 shell 命令了。
+
+  3. 我们以 ls 命令为例。输入 !ls <回车> 。该命令就会列举出您当前目录的
+     内容，就如同您在命令行提示符下输入 ls 命令的结果一样。如果 !ls 没起
+     作用，您可以试试 :!dir 看看。
+
+提示：所有的外部命令都可以以这种方式执行，包括带命令行参数的那些。
+
+提示：所有的 : 命令都必须以敲 <回车> 键结束。从今以后我们就不会总是提到这一点
+      了。
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      第五讲第二节：关于保存文件的更多信息
+
+
+	     ** 要将对文件的改动保存到文件中，请输入 :w FILENAME 。**
+
+  1. 输入 :!dir 或者 :!ls 获知当前目录的内容。您应当已知道最后还得敲
+     <回车> 吧。
+
+  2. 选择一个未被用到的文件名，比如 TEST。
+
+  3. 接着输入 :w TEST  (此处 TEST 是您所选择的文件名。)
+
+  4. 该命令会以 TEST 为文件名保存整个文件 (Vim 教程)。为了验证这一点，
+     请再次输入 :!dir 或 :!ls 查看您的目录列表内容。
+
+请注意：如果您退出 Vim 然后在以命令 vim TEST 再次启动 Vim，那么该文件内
+     容应该同您保存时的文件内容是完全一样的。
+
+  5. 现在您可以删除 TEST 文件了。在 MS-DOS 下，请输入：   :!del TEST
+                                 在 Unix 下，请输入：     :!rm TEST
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    第五讲第三节：一个具有选择性的保存命令
+
+
+	    ** 要保存文件的部分内容，请输入 v motion :w FILENAME **
+
+  1. 移动光标到本行。
+
+  2. 接着按 v 键，将光标移动至下面第五个条目上。您会注意到之间的文本被高亮了。
+
+  3. 然后按 : 字符。您将看到屏幕底部会出现 :'<,'> 。
+
+  4. 现在请输入 w TEST，其中 TEST 是一个未被使用的文件名。确认您看到了
+     :'<,'>w TEST 之后按 <回车> 键。
+
+  5. 这时 Vim 会把选中的行写入到以 TEST 命名的文件中去。使用 :!dir 或 :!ls
+     确认文件被正确保存。这次先别删除它！我们在下一讲中会用到它。
+
+提示：按 v 键使 Vim 进入可视模式进行选取。您可以四处移动光标使选取区域变大或
+      变小。接着您可以使用一个操作符对选中文本进行操作。例如，按 d 键会删除
+      选中的文本内容。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   第五讲第四节：提取和合并文件
+
+
+       ** 要向当前文件中插入另外的文件的内容，请输入 :r FILENAME **
+
+  1. 请把光标移动到本行上面一行。
+
+特别提示：执行步骤2之后您将看到第五讲第三节的文字，请届时往下移动
+          以再次看到本讲内容。
+
+  2. 接着通过命令 :r TEST 将前面创建的名为 TEST 的文件提取进来。
+     您所提取进来的文件将从光标所在位置处开始置入。
+
+  3. 为了确认文件已经提取成功，移动光标回到原来的位置就可以注意有两份第
+     五讲第三节的内容，一份是原始内容，另外一份是来自文件的副本。
+
+提示：您还可以读取外部命令的输出。例如， :r !ls 可以读取 ls 命令的输出，并
+      把它放置在光标下面。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第五讲小结
+
+
+  1. :!command 用于执行一个外部命令 command。
+
+     请看一些实际例子：
+	 (MS-DOS)	  (Unix)
+	  :!dir		   :!ls		   -  用于显示当前目录的内容。
+	  :!del FILENAME   :!rm FILENAME   -  用于删除名为 FILENAME 的文件。
+
+  2. :w FILENAME  可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文
+     件中。
+
+  3. v motion :w FILENAME 可将当前编辑文件中可视模式下选中的内容保存到文件
+     FILENAME 中。
+
+  4. :r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置
+     后面。
+
+  5. :r !dir 可以读取 dir 命令的输出并将其放置到当前文件的光标位置后面。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 第六讲第一节：打开类命令
+
+
+	 ** 输入 o 将在光标的下方打开新的一行并进入插入模式。**
+
+  1. 请将光标移动到本节中下面标记有 ---> 的那一行。
+
+  2. 接着输入小写的 o 在光标 *下方* 打开新的一行，这个命令会使您
+     进入插入模式。
+
+  3. 然后输入一些文字，之后按 <ESC> 键退出插入模式而进入正常模式。
+
+---> After typing  o  the cursor is placed on the open line in Insert mode.
+
+  4. 为了在光标 *上方* 打开新的一行，只需要输入大写的 O 而不是小写的 o
+     就可以了。请在下行测试一下吧。
+
+---> Open up a line above this by typing O while the cursor is on this line.
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第六讲第二节：附加类命令
+
+
+		     ** 输入 a 将可在光标之后插入文本。 **
+
+  1. 请在正常模式下将光标移动到本节中下面标记有 ---> 的第一行的行首。
+
+  2. 接着输入 e 直到光标位于 li 的末尾。
+
+  3. 输入小写的 a 则可在光标之后插入文本了。
+
+  4. 将单词补充完整，就像下一行中的那样。之后按 <ESC> 键退出插入模式回到
+     正常模式。
+
+  5. 使用 e 移动光标到下一步不完整的单词，重复步骤3和步骤4。
+
+---> This li will allow you to pract appendi text to a line.
+---> This line will allow you to practice appending text to a line.
+
+提示：a、i 和 A 都会带您进入插入模式，惟一的区别在于字符插入的位置。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    第六讲第三节：另外一个置换类命令的版本
+
+
+		      ** 输入大写的 R 可连续替换多个字符。**
+
+  1. 请将光标移动到本节中下面标记有 ---> 的第一行。移动光标到第一个 xxx 的
+     起始位置。
+
+  2. 然后输入大写的 R 开始把第一行中的不同于第二行的剩余字符逐一输入，就
+     可以全部替换掉原有的字符而使得第一行完全雷同第二行了。
+
+  3. 接着按 <ESC> 键退出替换模式回到正常模式。您可以注意到尚未替换的文本
+     仍然保持原状。
+
+  4. 重复以上步骤，将剩余的 xxx 也替换掉。
+
+---> Adding 123 to xxx gives you xxx.
+---> Adding 123 to 456 gives you 579.
+
+提示：替换模式与插入模式相似，不过每个输入的字符都会删除一个已有的字符。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  第六讲第四节：复制粘贴文本
+
+
+		 ** 使用操作符 y 复制文本，使用 p 粘贴文本 **
+
+  1. 定位到下面标记有 ---> 的一行，将光标移动到 "a)" 之后。
+
+  2. 接着使用 v 进入可视模式，移动光标到 "first" 的前面。
+
+  3. 现在输入 y 以抽出(复制)高亮的文本。
+
+  4. 然后移动光标到下一行的末尾：j$
+
+  5. 接着输入 p 以放置(粘贴)复制了的文本。然后输入：a second <ESC>。
+
+  6. 使用可视模式选中 " item."，用 y 复制，再用 j$ 将光标移动到下一行末尾，
+     用 p 将文本粘贴到那里。
+
+--->  a) this is the first item.
+      b)
+
+  提示：您还可以把 y 当作操作符来使用；例如 yw 可以用来复制一个单词。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    第六讲第五节：设置类命令的选项
+
+
+		  ** 设置可使查找或者替换可忽略大小写的选项 **
+
+  1. 要查找单词 ignore 可在正常模式下输入 /ignore <回车>。
+     要重复查找该词，可以重复按 n 键。
+
+  2. 然后设置 ic 选项(Ignore Case，忽略大小写)，请输入： :set ic
+
+  3. 现在可以通过键入 n 键再次查找单词 ignore。注意到 Ignore 和 IGNORE 现在
+     也被找到了。
+
+  4. 然后设置 hlsearch 和 incsearch 这两个选项，请输入： :set hls is
+
+  5. 现在可以再次输入查找命令，看看会有什么效果： /ignore <回车>
+
+  6. 要禁用忽略大小写，请输入： :set noic
+
+提示：要移除匹配项的高亮显示，请输入：  :nohlsearch
+提示：如果您想要仅在一次查找时忽略字母大小写，您可以使用 \c：
+      /ignore\c <回车>
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第六讲小结
+
+  1. 输入小写的 o 可以在光标下方打开新的一行并进入插入模式。
+     输入大写的 O 可以在光标上方打开新的一行。
+
+  2. 输入小写的 a 可以在光标所在位置之后插入文本。
+     输入大写的 A 可以在光标所在行的行末之后插入文本。
+
+  3. e 命令可以使光标移动到单词末尾。
+
+  4. 操作符 y 复制文本，p 粘贴先前复制的文本。
+
+  5. 输入大写的 R 将进入替换模式，直至按 <ESC> 键回到正常模式。
+
+  6. 输入 :set xxx 可以设置 xxx 选项。一些有用的选项如下：
+  	'ic' 'ignorecase'	查找时忽略字母大小写
+	'is' 'incsearch'	查找短语时显示部分匹配
+	'hls' 'hlsearch'	高亮显示所有的匹配短语
+     选项名可以用完整版本，也可以用缩略版本。
+
+  7. 在选项前加上 no 可以关闭选项：  :set noic
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  第七讲第一节：获取帮助信息
+
+
+		      ** 使用在线帮助系统 **
+
+  Vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统，请选择如下三种方
+  法之一：
+	- 按下 <HELP> 键 (如果键盘上有的话)
+	- 按下 <F1> 键 (如果键盘上有的话)
+	- 输入	:help <回车>
+
+  请阅读帮助窗口中的文字以了解帮助是如何工作的。
+  输入 CTRL-W CTRL-W   可以使您在窗口之间跳转。
+  输入 :q <回车> 可以关闭帮助窗口。
+
+  提供一个正确的参数给":help"命令，您可以找到关于该主题的帮助。请试验以
+  下参数(可别忘了按回车键哦)：
+
+	:help w
+	:help c_CTRL-D
+	:help insert-index
+	:help user-manual
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			  第七讲第二节：创建启动脚本
+
+
+			  ** 启用 Vim 的特性 **
+
+  Vim 的功能特性要比 Vi 多得多，但其中大部分都没有缺省启用。为了使用更多的
+  特性，您得创建一个 vimrc 文件。
+
+  1. 开始编辑 vimrc 文件，具体命令取决于您所使用的操作系统：
+        :edit ~/.vimrc		这是 Unix 系统所使用的命令
+        :edit $VIM/_vimrc	这是 MS-Windows 系统所使用的命令
+
+  2. 接着读取 vimrc 示例文件的内容：
+        :r $VIMRUNTIME/vimrc_example.vim
+
+  3. 保存文件，命令为：
+        :write
+
+  下次您启动 Vim 时，编辑器就会有了语法高亮的功能。
+  您可以把您喜欢的各种设置添加到这个 vimrc 文件中。
+  要了解更多信息请输入 :help vimrc-intro
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    第七讲第三节：补全功能
+
+
+	      ** 使用 CTRL-D 和 <TAB> 可以进行命令行补全 **
+
+  1. 请确保 Vim 不是在以兼容模式运行： :set nocp
+
+  2. 查看一下当前目录下已经存在哪些文件，输入： :!ls   或者  :!dir
+
+  3. 现在输入一个目录的起始部分，例如输入： :e
+
+  4. 接着按 CTRL-D 键，Vim 会显示以 e 开始的命令的列表。
+
+  5. 然后按 <TAB> 键，Vim 会补全命令为 :edit 。
+
+  6. 现在添加一个空格，以及一个已有文件的文件名的起始部分，例如： :edit FIL
+
+  7. 接着按 <TAB> 键，Vim 会补全文件名(如果它是惟一匹配的)。
+
+提示：补全对于许多命令都有效。您只需尝试按 CTRL-D 和 <TAB>。
+      它对于 :help 命令非常有用。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+				  第七讲小结
+
+
+  1. 输入 :help 或者按 <F1> 键或 <Help> 键可以打开帮助窗口。
+
+  2. 输入 :help cmd 可以找到关于 cmd 命令的帮助。
+
+  3. 输入 CTRL-W CTRL-W  可以使您在窗口之间跳转。
+
+  4. 输入 :q 以关闭帮助窗口
+
+  5. 您可以创建一个 vimrc 启动脚本文件用来保存您偏好的设置。
+
+  6. 当输入 : 命令时，按 CTRL-D 可以查看可能的补全结果。
+     按 <TAB> 可以使用一个补全。
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  vim 教程到此就结束了。本教程只是为了简明地介绍一下 Vim 编辑器，但已足以让您
+  很容易使用这个编辑器了。毋庸质疑，vim还有很多很多的命令，本教程所介
+  绍的距离完整的差得很远。所以您要精通的话，还望继续努力哦。下一步您可以阅读
+  Vim 的用户手册，使用的命令是： :help user-manual
+
+  下面这本书值得推荐用于更进一步的阅读和学习：
+	Vim - Vi Improved - 作者：Steve Oualline
+	出版社：New Riders
+  这是第一本完全讲解 Vim 的书籍。它对于初学者特别有用。其中包含有大量实例
+  和图示。
+  欲知详情，请访问 http://iccf-holland.org/click5.html
+
+  以下这本书比较老了而且内容更多是关于 Vi 而非 Vim，但是也值得推荐：
+	Learning the Vi Editor - 作者：Linda Lamb
+	出版社：O'Reilly & Associates Inc.
+  这是一本不错的书，通过它您几乎能够了解到任何您想要使用 Vi 做的事情。
+  此书的第六个版本也包含了一些关于 Vim 的信息。
+
+  本教程是由来自 Calorado School of Mines 的 Michael C. Pierce 和
+  Robert K. Ware 所编写的，其中很多创意由来自 Colorado State University 的
+  Charles Smith 提供。编者的电子邮箱是：bware@mines.colorado.edu
+
+  本教程已由 Bram Moolenaar 专为 Vim 进行修订。
+
+  译制者附言：
+  ===========
+      简体中文教程翻译版之译制者为梁昌泰 <beos@turbolinux.com.cn>，还有
+      另外一个联系地址：linuxrat@gnuchina.org。
+
+      繁体中文教程是从简体中文教程翻译版使用 Debian GNU/Linux 中文项目小
+      组的于广辉先生编写的中文汉字转码器  autoconvert 转换而成的，并对转
+      换的结果做了一些细节的改动。
+
+  变更记录：
+  =========
+      2012年10月01日 赵涛 <alick9188@gmail.com>
+      将 vimtutor 中译版从 1.5 升级到 1.7。
+
+      2002年08月30日 梁昌泰 <beos@turbolinux.com.cn>
+      感谢 RMS@SMTH 的指正，将多处错误修正。
+
+      2002年04月22日 梁昌泰 <linuxrat@gnuchina.org>
+      感谢 xuandong@sh163.net 的指正，将两处错别字修正。
+
+      2002年03月18日 梁昌泰 <linuxrat@gnuchina.org>
+      根据Bram Molenaar先生在2002年03月16日的来信要求，将vimtutor1.4中译
+      版升级到vimtutor1.5。
+
+      2001年11月15日 梁昌泰 <linuxrat@gnuchina.org>
+      将vimtutor1.4中译版提交给Bram Molenaar和Sven Guckes。
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/tutor/tutor.zh_tw.utf-8 vim73/runtime/tutor/tutor.zh_tw.utf-8
--- vim73.orig/runtime/tutor/tutor.zh_tw.utf-8	1970-01-01 00:00:00.000000000 +0000
+++ vim73/runtime/tutor/tutor.zh_tw.utf-8	2013-08-04 19:09:10.000612360 +0000
@@ -0,0 +1,852 @@
+===============================================================================
+=      歡     迎     閱     讀   《 V I M  教  程 》   ──     版本 1.5      =
+===============================================================================
+     vim 是一個具有很多命令的功能非常強大的編輯器。限于篇幅，在本教程當中
+     不就詳細介紹了。本教程的設計目標是講述一些必要的基本命令，而掌握好這
+     些命令，您就能夠很容易將vim當作一個通用的萬能編輯器來使用了。
+
+     完成本教程的內容大約需要25-30分鐘，取決于您訓練的時間。
+
+     每一節的命令操作將會更改本文。推薦您復制本文的一個副本，然後在副本上
+     進行訓練(如果您是通過"vimtutor"來啟動教程的，那麼本文就已經是副本了)。
+
+     切記一點︰本教程的設計思路是在使用中進行學習的。也就是說，您需要通過
+     執行命令來學習它們本身的正確用法。如果您只是閱讀而不操作，那麼您可能
+     會很快遺忘這些命令的！
+
+     好了，現在請確定您的Shift-Lock(大小寫鎖定鍵)還沒有按下，然後按鍵盤上
+     的字母鍵 j 足夠多的次數來移動光標，直到第一節的內容能夠完全充滿屏幕。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第一講第一節︰移動光標
+
+
+   ※※ 要移動光標，請依照說明分別按下 h、j、k、l 鍵。 ※※
+
+	     ^
+	     k		    提示︰ h 的鍵位于左邊，每次按下就會向左移動。
+       < h	 l >		   l 的鍵位于右邊，每次按下就會向右移動。
+	     j			   j 鍵看起來很象一支尖端方向朝下的箭頭。
+	     v
+
+  1. 請隨意在屏幕內移動光標，直至您覺得舒服為止。
+
+  2. 按下下行鍵(j)，直到出現光標重復下行。
+
+---> 現在您應該已經學會如何移動到下一講吧。
+
+  3. 現在請使用下行鍵，將光標移動到第二講。
+
+提示︰如果您不敢確定您所按下的字母，請按下<ESC>鍵回到正常(Normal)模式。
+      然後再次從鍵盤輸入您想要的命令。
+
+提示︰光標鍵應當也能正常工作的。但是使用hjkl鍵，在習慣之後您就能夠快速
+      地在屏幕內四處移動光標了。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第一講第二節︰VIM的進入和退出
+
+
+  !! 特別提示︰敬請閱讀完整本一節的內容，然後才能執行以下所講解的命令。
+
+  1. 請按<ESC>鍵(這是為了確保您處在正常模式)。
+
+  2. 然後輸入︰			:q! <回車>
+
+---> 這種方式的退出編輯器絕不會保存您進入編輯器以來所做的改動。
+     如果您想保存更改再退出，請輸入︰
+				:wq  <回車>
+
+  3. 如果您看到了命令行提示符，請輸入能夠帶您回到本教程的命令，那就是︰
+
+		vimtutor <回車>
+
+     通常情況下您也可以用這種方式︰
+
+		vim tutor <回車>
+
+---> 這裡的 'vim' 表示進入vim編輯器，而 'tutor'則是您準備要編輯的文件。
+
+  4. 如果您自信已經牢牢記住了這些步驟的話，請從步驟1執行到步驟3退出，然
+     後再次進入編輯器。接著將光標移動到第一講第三節來繼續我們的教程講解。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第一講第三節︰文本編輯之刪除
+
+
+   ** 在正常(Normal)模式下，可以按下 x 鍵來刪除光標所在位置的字符。**
+
+  1. 請將光標移動到本節中下面標記有 ---> 的那一行。
+
+  2. 為了修正輸入錯誤，請將光標移至準備刪除的字符的位置處。
+
+  3. 然後按下 x 鍵將錯誤字符刪除掉。
+
+  4. 重復步驟2到步驟4，直到句子修正為止。
+
+---> The ccow jumpedd ovverr thhe mooon.
+
+  5. 好了，該行已經修正了，下一節內容是第一講第四節。
+
+特別提示︰在您瀏覽本教程時，不要強行記憶。記住一點︰在使用中學習。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第一講第四節︰文本編輯之插入
+
+
+	 ** 在正常模式下，可以按下 i 鍵來插入文本。**
+
+  1. 請將光標移動到本節中下面標記有 ---> 的第一行。
+
+  2. 為了使得第一行內容雷同于第二行，請將光標移至文本第一個字符準備插入
+     的位置。
+
+  3. 然後按下 i 鍵，接著輸入必要的文本字符。
+
+  4. 所有文本都修正完畢，請按下 <ESC> 鍵返回正常模式。
+     重復步驟2至步驟4以便修正句子。
+
+---> There is text misng this .
+---> There is some text missing from this line.
+
+  5. 如果您對文本插入操作已經很滿意，請接著閱讀下面的小結。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第一講小結
+
+
+  1. 光標在屏幕文本中的移動既可以用箭頭鍵，也可以使用 hjkl 字母鍵。
+	 h (左移)	j (下行)       k (上行)	    l (右移)
+
+  2. 欲進入vim編輯器(從命令行提示符)，請輸入︰vim 文件名 <回車>
+
+  3. 欲退出vim編輯器，請輸入以下命令放棄所有修改︰
+
+	<ESC>   :q!	 <回車>
+
+     或者輸入以下命令保存所有修改︰
+
+	<ESC>   :wq	 <回車>
+
+  4. 在正常模式下刪除光標所在位置的字符，請按︰ x
+
+  5. 在正常模式下要在光標所在位置開始插入文本，請按︰
+
+	 i     輸入必要文本	<ESC>
+
+特別提示︰按下 <ESC> 鍵會帶您回到正常模式或者取消一個不期望或者部分完成
+的命令。
+
+好了，第一講到此結束。下面接下來繼續第二講的內容。
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第二講第一節︰刪除類命令
+
+
+	    ** 輸入 dw 可以從光標處刪除至一個單字/單詞的末尾。**
+
+  1. 請按下 <ESC> 鍵確保您處于正常模式。
+
+  2. 請將光標移動到本節中下面標記有 ---> 的那一行。
+
+  3. 請將光標移至準備要刪除的單詞的開始。
+
+  4. 接著輸入 dw 刪除掉該單詞。
+
+  特別提示︰您所輸入的 dw 會在您輸入的同時出現在屏幕的最後一行。如果您輸
+  入有誤，請按下 <ESC> 鍵取消，然後重新再來。
+
+---> There are a some words fun that don't belong paper in this sentence.
+
+  5. 重復步驟3至步驟4，直至句子修正完畢。接著繼續第二講第二節內容。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      第二講第二節︰其他刪除類命令
+
+
+		   ** 輸入 d$ 從當前光標刪除到行末。**
+
+  1. 請按下 <ESC> 鍵確保您處于正常模式。
+
+  2. 請將光標移動到本節中下面標記有 ---> 的那一行。
+
+  3. 請將光標移動到該行的尾部(也就是在第一個點號‘.’後面)。
+
+  4. 然後輸入 d$ 從光標處刪至當前行尾部。
+
+---> Somebody typed the end of this line twice. end of this line twice.
+
+
+  5. 請繼續學習第二講第三節就知道是怎麼回事了。
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第二講第三節︰關于命令和對象
+
+
+  刪除命令 d 的格式如下︰
+
+	 [number]   d	object	    或者     d	 [number]   object
+
+  其意如下︰
+    number - 代表執行命令的次數(可選項，缺省設置為 1 )。
+    d - 代表刪除。
+    object - 代表命令所要操作的對象(下面有相關介紹)。
+
+  一個簡短的對象列表︰
+    w - 從當前光標當前位置直到單字/單詞末尾，包括空格。
+    e - 從當前光標當前位置直到單字/單詞末尾，但是 *不* 包括空格。
+    $ - 從當前光標當前位置直到當前行末。
+
+特別提示︰
+    對于勇于探索者，請在正常模式下面僅按代表相應對象的鍵而不使用命令，則
+    將看到光標的移動正如上面的對象列表所代表的一樣。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		第二講第四節︰對象命令的特殊情況
+
+
+	       ** 輸入 dd 可以刪除整一個當前行。 **
+
+  鑒于整行刪除的高頻度，VIM 的設計者決定要簡化整行刪除，僅需要在同一行上
+  擊打兩次 d 就可以刪除掉光標所在的整行了。
+
+  1. 請將光標移動到本節中下面的短句段落中的第二行。
+  2. 輸入 dd 刪除該行。
+  3. 然後移動到第四行。
+  4. 接著輸入 2dd (還記得前面講過的 number-command-object 嗎？) 刪除兩行。
+
+      1)  Roses are red,
+      2)  Mud is fun,
+      3)  Violets are blue,
+      4)  I have a car,
+      5)  Clocks tell time,
+      6)  Sugar is sweet
+      7)  And so are you.
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 第二講第五節︰撤消類命令
+
+
+	 ** 輸入 u 來撤消最後執行的命令，輸入 U 來修正整行。**
+
+  1. 請將光標移動到本節中下面標記有 ---> 的那一行，並將其置于第一個錯誤
+     處。
+  2. 輸入 x 刪除第一個不想保留的字母。
+  3. 然後輸入 u 撤消最後執行的(一次)命令。
+  4. 這次要使用 x 修正本行的所有錯誤。
+  5. 現在輸入一個大寫的 U ，恢復到該行的原始狀態。
+  6. 接著多次輸入 u 以撤消 U 以及更前的命令。
+  7. 然後多次輸入 CTRL-R (先按下 CTRL 鍵不放開，接著輸入 R 鍵) ，這樣就
+     可以執行恢復命令，也就是撤消掉撤消命令。
+
+---> Fiix the errors oon thhis line and reeplace them witth undo.
+
+  8. 這些都是非常有用的命令。下面是第二講的小結了。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第二講小結
+
+
+  1. 欲從當前光標刪除至單字/單詞末尾，請輸入︰dw
+
+  2. 欲從當前光標刪除至當前行末尾，請輸入︰d$
+
+  3. 欲刪除整行，請輸入︰dd
+
+  4. 在正常模式下一個命令的格式是︰
+
+       [number]   command   object     或者     command	[number]   object
+     其意是︰
+       number - 代表的是命令執行的次數
+       command - 代表要做的事情，比如 d 代表刪除
+       object - 代表要操作的對象，比如 w 代表單字/單詞，$ 代表到行末等等。
+		$ (to the end of line), etc.
+
+  5. 欲撤消以前的操作，請輸入︰u (小寫的u)
+     欲撤消在一行中所做的改動，請輸入︰U (大寫的U)
+     欲撤消以前的撤消命令，恢復以前的操作結果，請輸入︰CTRL-R
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 第三講第一節︰置入類命令
+
+
+	       ** 輸入 p 將最後一次刪除的內容置入光標之後 **
+
+  1. 請將光標移動到本節中下面示范段落的首行。
+
+  2. 輸入 dd 將該行刪除，這樣會將該行保存到vim的緩沖區中。
+
+  3. 接著將光標移動到準備置入的位置的上方。記住︰是上方哦。
+
+  4. 然後在正常模式下(<ESC>鍵進入)，輸入 p 將該行粘貼置入。
+
+  5. 重復步驟2至步驟4，將所有的行依序放置到正確的位置上。
+
+     d) Can you learn too?
+     b) Violets are blue,
+     c) Intelligence is learned,
+     a) Roses are red,
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       第三講第二節︰替換類命令
+
+
+	  ** 輸入 r 和一個字符替換光標所在位置的字符。**
+
+  1. 請將光標移動到本節中下面標記有 ---> 的第一行。
+
+  2. 請移動光標到第一個錯誤的適當位置。
+
+  3. 接著輸入 r ，這樣就能將錯誤替換掉了。
+
+  4. 重復步驟2和步驟3，直到第一行已經修改完畢。
+
+--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
+--->  When this line was typed in, someone pressed some wrong keys!
+
+  5. 然後我們繼續學校第三講第三節。
+
+特別提示︰切記您要在使用中學習，而不是在記憶中學習。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第三講第三節︰更改類命令
+
+
+	   ** 要改變一個單字/單詞的部分或者全部，請輸入 cw **
+
+  1. 請將光標移動到本節中下面標記有 ---> 的第一行。
+
+  2. 接著把光標放在單詞 lubw 的字母 u 的位置那裡。
+
+  3. 然後輸入 cw 就可以修正該單詞了(在本例這裡是輸入 ine 。)
+
+  4. 最後按 <ESC> 鍵，然後光標定位到下一個錯誤第一個準備更改的字母處。
+
+  5. 重復步驟3和步驟4，直到第一個句子完全雷同第二個句子。
+
+---> This lubw has a few wptfd that mrrf changing usf the change command.
+---> This line has a few words that need changing using the change command.
+
+提示︰請注意 cw 命令不僅僅是替換了一個單詞，也讓您進入文本插入狀態了。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       第三講第四節︰使用c指令的其他更改類命令
+
+
+	     ** 更改類指令可以使用同刪除類命令所使用的對象參數。**
+
+  1. 更改類指令的工作方式跟刪除類命令是一致的。操作格式是︰
+
+       [number]   c   object	   或者	    c	[number]   object
+
+  2. 對象參數也是一樣的，比如 w 代表單字/單詞，$代表行末等等。
+
+  3. 請將光標移動到本節中下面標記有 ---> 的第一行。
+
+  4. 接著將光標移動到第一個錯誤處。
+
+  5. 然後輸入 c$ 使得該行剩下的部分更正得同第二行一樣。最後按 <ESC> 鍵。
+
+---> The end of this line needs some help to make it like the second.
+---> The end of this line needs to be corrected using the  c$  command.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第三講小結
+
+
+  1. 要重新置入已經刪除的文本內容，請輸入小寫字母 p。該操作可以將已刪除
+     的文本內容置于光標之後。如果最後一次刪除的是一個整行，那麼該行將置
+     于當前光標所在行的下一行。
+
+  2. 要替換光標所在位置的字符，請輸入小寫的 r 和要替換掉原位置字符的新字
+     符即可。
+
+  3. 更改類命令允許您改變指定的對象，從當前光標所在位置直到對象的末尾。
+     比如輸入 cw 可以替換當前光標到單詞的末尾的內容；輸入 c$ 可以替換當
+     前光標到行末的內容。
+
+  4. 更改類命令的格式是︰
+
+	 [number]   c	object	      或者	c   [number]   object
+
+下面我們繼續學習下一講。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		     第四講第一節︰定位及文件狀態
+
+
+  ** 輸入 CTRL-g 顯示當前編輯文件中當前光標所在行位置以及文件狀態信息。
+     輸入 SHIFT-G 則直接跳轉到文件中的某一指定行。**
+
+  提示︰切記要先通讀本節內容，之後才可以執行以下步驟!!!
+
+  1. 按下 CTRL 鍵不放開然後按 g 鍵。然後就會看到頁面最底部出現一個狀態信
+     息行，顯示的內容是當前編輯的文件名和文件的總行數。請記住步驟3的行號。
+
+  2. 按下 SHIFT-G 鍵可以使得當前光標直接跳轉到文件最後一行。
+
+  3. 輸入您曾停留的行號，然後按下 SHIFT-G。這樣就可以返回到您第一次按下
+     CTRL-g 時所在的行好了。注意︰輸入行號時，行號是不會在屏幕上顯示出來
+     的。
+
+  4. 如果願意，您可以繼續執行步驟1至步驟三。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第四講第二節︰搜索類命令
+
+
+     ** 輸入 / 以及尾隨的字符串可以用以在當前文件中查找該字符串。**
+
+  1. 在正常模式下輸入 / 字符。您此時會注意到該字符和光標都會出現在屏幕底
+     部，這跟 : 命令是一樣的。
+
+  2. 接著輸入 errroor <回車>。那個errroor就是您要查找的字符串。
+
+  3. 要查找同上一次的字符串，只需要按 n 鍵。要向相反方向查找同上一次的字
+     符串，請輸入 Shift-N 即可。
+
+  4. 如果您想逆向查找字符串，請使用 ? 代替 / 進行。
+
+---> When the search reaches the end of the file it will continue at the start.
+
+  "errroor" is not the way to spell error;  errroor is an error.
+
+  提示︰如果查找已經到達文件末尾，查找會自動從文件頭部繼續查找。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   第四講第三節︰配對括號的查找
+
+
+	      ** 按 % 可以查找配對的括號 )、]、}。**
+
+  1. 把光標放在本節下面標記有 --> 那一行中的任何一個 (、[ 或 { 處。
+
+  2. 接著按 % 字符。
+
+  3. 此時光標的位置應當是在配對的括號處。
+
+  4. 再次按 % 就可以跳回配對的第一個括號處。
+
+---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+
+提示︰在程序調試時，這個功能用來查找不配對的括號是很有用的。
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      第四講第四節︰修正錯誤的方法之一
+
+
+		** 輸入 :s/old/new/g 可以替換 old 為 new。**
+
+  1. 請將光標移動到本節中下面標記有 ---> 的那一行。
+
+  2. 輸入 :s/thee/the <回車> 。請注意該命令只改變光標所在行的第一個匹配
+     串。
+
+  3. 輸入 :s/thee/the/g	則是替換全行的匹配串。
+
+---> the best time to see thee flowers is in thee spring.
+
+  4. 要替換兩行之間出現的每個匹配串，請輸入 :#,#s/old/new/g (#,#代表的是
+     兩行的行號)。輸入 :%s/old/new/g 則是替換整個文件中的每個匹配串。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第四講小結
+
+
+  1. Ctrl-g 用于顯示當前光標所在位置和文件狀態信息。Shift-G 用于將光標跳
+     轉至文件最後一行。先敲入一個行號然後按 Shift-G 則是將光標移動至該行
+     號代表的行。
+
+  2. 輸入 / 然後緊隨一個字符串是則是在當前所編輯的文檔中向後查找該字符串。
+     輸入問號 ? 然後緊隨一個字符串是則是在當前所編輯的文檔中向前查找該字
+     符串。完成一次查找之後按 n 鍵則是重復上一次的命令，可在同一方向上查
+     找下一個字符串所在；或者按 Shift-N 向相反方向查找下該字符串所在。
+
+  3. 如果光標當前位置是括號(、)、[、]、{、}，按 % 可以將光標移動到配對的
+     括號上。
+
+  4. 在一行內替換頭一個字符串 old 為新的字符串 new，請輸入  :s/old/new
+     在一行內替換所有的字符串 old 為新的字符串 new，請輸入  :s/old/new/g
+     在兩行內替換所有的字符串 old 為新的字符串 new，請輸入  :#,#s/old/new/g
+     在文件內替換所有的字符串 old 為新的字符串 new，請輸入  :%s/old/new/g
+     進行全文替換時詢問用戶確認每個替換需添加 c 選項，請輸入 :%s/old/new/gc
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		第五講第一節︰在 VIM 內執行外部命令的方法
+
+
+	   ** 輸入 :! 然後緊隨著輸入一個外部命令可以執行該外部命令。**
+
+  1. 按下我們所熟悉的 : 命令設置光標到屏幕底部。這樣就可以讓您輸入命令了。
+
+  2. 接著輸入感嘆號 ! 這個字符，這樣就允許您執行外部的 shell 命令了。
+
+  3. 我們以 ls 命令為例。輸入 !ls <回車> 。該命令就會列舉出您當前目錄的
+     內容，就如同您在命令行提示符下輸入 ls 命令的結果一樣。如果 !ls 沒起
+     作用，您可以試試 :!dir 看看。
+
+---> 提示︰ 所有的外部命令都可以以這種方式執行。
+
+---> 提示︰ 所有的 : 命令都必須以 <回車> 告終。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      第五講第二節︰關于保存文件的更多信息
+
+
+	     ** 要將對文件的改動保存到文件中，請輸入 :w FILENAME **
+
+  1. 輸入 :!dir 或者 :!ls 獲知當前目錄的內容。您應當已知道最後還得敲
+     <回車> 吧。
+
+  2. 選擇一個尚未存在文件名，比如 TEST 。
+
+  3. 接著輸入 :w TEST  (此處 TEST 是您所選擇的文件名。)
+
+  4. 該命令會以 TEST 為文件名保存整個文件 (VIM 教程)。為了確保正確保存，
+     請再次輸入 :!dir 查看您的目錄列表內容。
+
+---> 請注意︰如果您退出 VIM 然後在以文件名 TEST 為參數進入，那麼該文件內
+     容應該同您保存時的文件內容是完全一樣的。
+
+  5. 現在您可以通過輸入 :!rm TEST 來刪除 TEST 文件了。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    第五講第三節︰一個具有選擇性的保存命令
+
+
+		** 要保存文件的部分內容，請輸入 :#,# w FILENAME **
+
+  1. 再來執行一次 :!dir 或者 :!ls 獲知當前目錄的內容，然後選擇一個合適的
+     不重名的文件名，比如 TEST 。
+
+  2. 接著將光標移動至本頁的最頂端，然後按 CTRL-g 找到該行的行號。別忘了
+     行號哦。
+
+  3. 接著把光標移動至本頁的最底端，再按一次 CTRL-g 。也別忘了這個行好哦。
+
+  4. 為了只保存文章的某個部分，請輸入 :#,# w TEST 。這裡的 #,# 就是上面
+     要求您記住的行號(頂端行號,底端行號)，而 TEST 就是選定的文件名。
+
+  5. 最後，用 :!dir 確認文件是否正確保存。但是這次先別刪除掉。
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		   第五講第四節︰提取和合並文件
+
+
+       ** 要向當前文件中插入另外的文件的內容，請輸入 :r FILENAME **
+
+  1. 請鍵入 :!dir 確認您前面創建的 TEST 文件還在。
+
+  2. 然後將光標移動至當前頁面的頂端。
+
+特別提示︰ 執行步驟3之後您將看到第五講第三節，請屆時再往下移動回到這裡來。
+
+  3. 接著通過 :r TEST 將前面創建的名為 TEST 的文件提取進來。
+
+特別提示︰您所提取進來的文件將從光標所在位置處開始置入。
+
+  4. 為了確認文件已經提取成功，移動光標回到原來的位置就可以注意有兩份第
+     五講第三節，一份是原本，另外一份是來自文件的副本。
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第五講小結
+
+
+  1. :!command 用于執行一個外部命令 command。
+
+     請看一些實際例子︰
+	 :!dir		-  用于顯示當前目錄的內容。
+	 :!rm FILENAME	-  用于刪除名為 FILENAME 的文件。
+
+  2. :w FILENAME  可將當前 VIM 中正在編輯的文件保存到名為 FILENAME
+     的文件中。
+
+  3. :#,#w FILENAME 可將當前編輯文件第 # 行至第 # 行的內容保存到文件
+     FILENAME 中。
+
+  4. :r FILENAME 可提取磁盤文件 FILENAME 並將其插入到當前文件的光標位置
+     後面。
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			 第六講第一節︰打開類命令
+
+
+	 ** 輸入 o 將在光標的下方打開新的一行並進入插入模式。**
+
+  1. 請將光標移動到本節中下面標記有 ---> 的那一行。
+
+  2. 接著輸入小寫的 o 在光標 *下方* 打開新的一行並進入插入模式。
+
+  3. 然後復制標記有 ---> 的行並按 <ESC> 鍵退出插入模式而進入正常模式。
+
+---> After typing  o  the cursor is placed on the open line in Insert mode.
+
+  4. 為了在光標 *上方* 打開新的一行，只需要輸入大寫的 O 而不是小寫的 o
+     就可以了。請在下行測試一下吧。當光標處在在該行上時，按 Shift-O可以
+     在該行上方新開一行。
+
+Open up a line above this by typing Shift-O while the cursor is on this line.
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			第六講第二節︰光標後插入類命令
+
+
+		     ** 輸入 a 將可在光標之後插入文本。 **
+
+  1. 請在正常模式下通過輸入 $ 將光標移動到本節中下面標記有 ---> 的第一行
+     的末尾。
+
+  2. 接著輸入小寫的 a 則可在光標之後插入文本了。大寫的 A 則可以直接在行
+     末插入文本。
+
+提示︰輸入大寫 A 的操作方法可以在行末插入文本，避免了輸入 i，光標定位到
+      最後一個字符，輸入的文本，<ESC> 回復正常模式，箭頭右鍵移動光標以及
+      x 刪除當前光標所在位置字符等等諸多繁雜的操作。
+
+  3. 操作之後第一行就可以補充完整了。請注意光標後插入文本與插入模式是基
+     本完全一致的，只是文本插入的位置定位稍有不同罷了。
+
+---> This line will allow you to practice
+---> This line will allow you to practice appending text to the end of a line.
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		    第六講第三節︰另外一個置換類命令的版本
+
+
+		      ** 輸入大寫的 R 可連續替換多個字符。**
+
+  1. 請將光標移動到本節中下面標記有 ---> 的第一行。
+
+  2. 移動光標到第一行中不同于標有 ---> 的第二行的第一個單詞的開始，即單
+     詞 last 處。
+
+  3. 然後輸入大寫的 R 開始把第一行中的不同于第二行的剩余字符逐一輸入，就
+     可以全部替換掉原有的字符而使得第一行完全雷同第二行了。
+
+---> To make the first line the same as the last on this page use the keys.
+---> To make the first line the same as the second, type R and the new text.
+
+  4. 請注意︰如果您按 <ESC> 退出置換模式回復正常模式，尚未替換的文本將仍
+     然保持原狀。
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			    第六講第四節︰設置類命令的選項
+
+
+		  ** 設置可使查找或者替換可忽略大小寫的選項 **
+
+
+  1. 要查找單詞 ignore 可在正常模式下輸入 /ignore 。要重復查找該詞，可以
+     重復按 n 鍵。
+
+  2. 然後設置 ic 選項(ic就是英文忽略大小寫Ignore Case的首字母縮寫詞)，即
+     輸入︰
+	:set ic
+
+  3. 現在可以通過鍵入 n 鍵再次查找單詞 ignore。重復查找可以重復鍵入 n 鍵。
+
+  4. 然後設置 hlsearch 和 incsearch 這兩個選項，輸入以下內容︰
+     :set hls is
+
+  5. 現在可以再次輸入查找命令，看看會有什麼效果︰
+     /ignore
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+			       第六講小結
+
+
+  1. 輸入小寫的 o 可以在光標下方打開新的一行並將光標置于新開的行首，進入
+     插入模式。
+     輸入大寫的 O 可以在光標上方打開新的一行並將光標置于新開的行首，進入
+     插入模式。
+
+  2. 輸入小寫的 a 可以在光標所在位置之後插入文本。
+     輸入大寫的 A 可以在光標所在行的行末之後插入文本。
+
+  3. 輸入大寫的 R 將進入替換模式，直至按 <ESC> 鍵退出替換模式而進入正常
+     模式。
+
+  4. 輸入 :set xxx 可以設置 xxx 選項。
+
+
+
+
+
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		       第七講︰在線幫助命令
+
+		      ** 使用在線幫助系統 **
+
+  Vim 擁有一個細致全面的在線幫助系統。要啟動該幫助系統，請選擇如下三種方
+  法之一︰
+	- 按下 <HELP> 鍵 (如果鍵盤上有的話)
+	- 按下 <F1> 鍵 (如果鍵盤上有的話)
+	- 輸入	:help <回車>
+
+  輸入 :q <回車> 可以關閉幫助窗口。
+
+  提供一個正確的參數給":help"命令，您可以找到關于該主題的幫助。請試驗以
+  下參數(可別忘了按回車鍵哦。:)︰
+
+	  :help w <回車>
+	  :help c_<T <回車>
+	  :help insert-index <回車>
+	  :help user-manual <回車>
+
+
+
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+		      第八講︰創建一個啟動腳本
+
+			 ** 啟用vim的功能 **
+
+  Vim的功能特性要比vi多得多，但大部分功能都沒有缺省激活。為了啟動更多的
+  功能，您得創建一個vimrc文件。
+
+  1. 開始編輯vimrc文件，這取決于您所使用的操作系統︰
+
+     :edit ~/.vimrc		這是Unix系統所使用的命令
+     :edit $VIM/_vimrc		這是Windows系統所使用的命令
+
+  2. 接著導入vimrc范例文件︰
+
+     :read $VIMRUNTIME/vimrc_example.vim
+
+  3. 保存文件，命令為︰
+
+     :write
+
+  在下次您啟動vim的時候，編輯器就會有了語法高亮的功能。您可以繼續把您喜
+  歡的其它功能設置添加到這個vimrc文件中。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+  vim 教程到此結束。本教程只是為了簡明地介紹一下vim編輯器，但已足以讓您
+  很容易學會使用本編輯器了。毋庸質疑，vim還有很多很多的命令，本教程所介
+  紹的還差得遠著呢。所以您要精通的話，還望繼續努力哦。下一步您可以閱讀
+  vim手冊，使用的命令是︰
+	:help user-manual
+
+  為了更進一步的參考和學習，以下這本書值得推薦︰
+
+	Vim - Vi Improved - 作者︰Steve Oualline
+	出版社︰New Riders
+
+  這是第一本完全講解vim的書籍。對于初學者特別有用。其中還包含有大量實例
+  和圖示。欲知詳情，請訪問 http://iccf-holland.org/click5.html
+
+  以下這本書比較老了而且內容主要是vi而不是vim，但是也值得推薦︰
+
+	Learning the Vi Editor - 作者︰Linda Lamb
+	出版社︰O'Reilly & Associates Inc.
+
+  這是一本不錯的書，通過它您幾乎能夠了解到全部vi能夠做到的事情。此書的第
+  六個版本也包含了一些關于vim的信息。
+
+  本教程是由來自Calorado School of Minese的Michael C. Pierce、Robert K.
+  Ware 所編寫的，其中來自Colorado State University的Charles Smith提供了
+  很多創意。編者通信地址是︰
+
+	bware@mines.colorado.edu
+
+  本教程已由Bram Moolenaar專為vim進行修訂。
+
+
+
+  譯制者附言︰
+  ===========
+      簡體中文教程翻譯版之譯制者為梁昌泰 <beos@turbolinux.com.cn>，還有
+      另外一個聯系地址︰linuxrat@gnuchina.org。
+
+      繁體中文教程是從簡體中文教程翻譯版使用 Debian GNU/Linux 中文項目小
+      組的于廣輝先生編寫的中文漢字轉碼器  autoconvert 轉換而成的，並對轉
+      換的結果做了一些細節的改動。
+
+  變更記錄︰
+  =========
+      2002年08月30日 梁昌泰 <beos@turbolinux.com.cn>
+      感謝 RMS@SMTH 的指正，將多處錯誤修正。
+
+      2002年04月22日 梁昌泰 <linuxrat@gnuchina.org>
+      感謝 xuandong@sh163.net 的指正，將兩處錯別字修正。
+
+      2002年03月18日 梁昌泰 <linuxrat@gnuchina.org>
+      根據Bram Molenaar先生在2002年03月16日的來信要求，將vimtutor1.4中譯
+      版升級到vimtutor1.5。
+
+      2001年11月15日 梁昌泰 <linuxrat@gnuchina.org>
+      將vimtutor1.4中譯版提交給Bram Molenaar和Sven Guckes。
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff -Naur vim73.orig/runtime/vimrc_example.vim vim73/runtime/vimrc_example.vim
--- vim73.orig/runtime/vimrc_example.vim	2010-05-15 11:03:57.000000000 +0000
+++ vim73/runtime/vimrc_example.vim	2013-08-04 19:09:10.017278977 +0000
@@ -1,7 +1,7 @@
 " An example for a vimrc file.
 "
 " Maintainer:	Bram Moolenaar <Bram@vim.org>
-" Last change:	2008 Dec 17
+" Last change:	2011 Apr 15
 "
 " To use it, copy it to
 "     for Unix and OS/2:  ~/.vimrc
@@ -91,6 +91,6 @@
 " file it was loaded from, thus the changes you made.
 " Only define it when not defined already.
 if !exists(":DiffOrig")
-  command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
+  command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
 		  \ | wincmd p | diffthis
 endif
diff -Naur vim73.orig/src/GvimExt/Make_cyg.mak vim73/src/GvimExt/Make_cyg.mak
--- vim73.orig/src/GvimExt/Make_cyg.mak	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/GvimExt/Make_cyg.mak	2013-08-04 19:09:10.020612300 +0000
@@ -0,0 +1,77 @@
+# Project: gvimext
+# Generates gvimext.dll with gcc.
+# To be used with Cygwin.
+#
+# Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
+# Now it is allocated dymanically by the linker by evaluating all DLLs
+# already loaded in memory. The binary image contains as well information
+# for automatic pseudo-rebasing, if needed by the system. ALV 2004-02-29
+
+# If cross-compiling set this to yes, else set it to no
+CROSS = no
+#CROSS = yes
+# For the old MinGW 2.95 (the one you get e.g. with debian woody)
+# set the following variable to yes and check if the executables are
+# really named that way.
+# If you have a newer MinGW or you are using cygwin set it to no and
+# check also the executables
+MINGWOLD = no
+
+# Link against the shared versions of libgcc/libstdc++ by default.  Set
+# STATIC_STDCPLUS to "yes" to link against static versions instead.
+STATIC_STDCPLUS=no
+#STATIC_STDCPLUS=yes
+
+# Note: -static-libstdc++ is not available until gcc 4.5.x.
+LDFLAGS += -shared
+ifeq (yes, $(STATIC_STDCPLUS))
+LDFLAGS += -static-libgcc -static-libstdc++
+endif
+
+ifeq ($(CROSS),yes)
+DEL = rm
+ifeq ($(MINGWOLD),yes)
+CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
+else
+CXXFLAGS := -O2 -mno-cygwin
+endif
+else
+CXXFLAGS := -O2 -mno-cygwin
+ifneq (sh.exe, $(SHELL))
+DEL = rm
+else
+DEL = del
+endif
+endif
+CXX := $(CROSS_COMPILE)g++
+WINDRES := $(CROSS_COMPILE)windres
+WINDRES_CXX = $(CXX)
+WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
+LIBS :=  -luuid
+RES  := gvimext.res
+DEFFILE = gvimext_ming.def
+OBJ  := gvimext.o
+
+DLL  := gvimext.dll
+
+.PHONY: all all-before all-after clean clean-custom
+
+all: all-before $(DLL) all-after
+
+$(DLL): $(OBJ) $(RES) $(DEFFILE)
+	$(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
+		-Wl,--enable-auto-image-base \
+		-Wl,--enable-auto-import \
+		-Wl,--whole-archive \
+			$^ \
+		-Wl,--no-whole-archive \
+			$(LIBS)
+
+gvimext.o: gvimext.cpp
+	$(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
+
+$(RES): gvimext_ming.rc
+	$(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
+
+clean: clean-custom
+	-$(DEL)  $(OBJ) $(RES) $(DLL)
diff -Naur vim73.orig/src/GvimExt/Make_ming.mak vim73/src/GvimExt/Make_ming.mak
--- vim73.orig/src/GvimExt/Make_ming.mak	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/GvimExt/Make_ming.mak	2013-08-04 19:09:10.023945623 +0000
@@ -1,6 +1,6 @@
 # Project: gvimext
 # Generates gvimext.dll with gcc.
-# Can be used for Cygwin and MingW (MingW ignores -mno-cygwin)
+# To be used with MingW.
 #
 # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
 # Now it is allocated dymanically by the linker by evaluating all DLLs
@@ -17,15 +17,26 @@
 # check also the executables
 MINGWOLD = no
 
+# Link against the shared versions of libgcc/libstdc++ by default.  Set
+# STATIC_STDCPLUS to "yes" to link against static versions instead.
+STATIC_STDCPLUS=no
+#STATIC_STDCPLUS=yes
+
+# Note: -static-libstdc++ is not available until gcc 4.5.x.
+LDFLAGS += -shared
+ifeq (yes, $(STATIC_STDCPLUS))
+LDFLAGS += -static-libgcc -static-libstdc++
+endif
+
 ifeq ($(CROSS),yes)
 DEL = rm
 ifeq ($(MINGWOLD),yes)
-CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
+CXXFLAGS := -O2 -fvtable-thunks
 else
-CXXFLAGS := -O2 -mno-cygwin
+CXXFLAGS := -O2
 endif
 else
-CXXFLAGS := -O2 -mno-cygwin
+CXXFLAGS := -O2
 ifneq (sh.exe, $(SHELL))
 DEL = rm
 else
@@ -34,6 +45,8 @@
 endif
 CXX := $(CROSS_COMPILE)g++
 WINDRES := $(CROSS_COMPILE)windres
+WINDRES_CXX = $(CXX)
+WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
 LIBS :=  -luuid
 RES  := gvimext.res
 DEFFILE = gvimext_ming.def
@@ -46,7 +59,7 @@
 all: all-before $(DLL) all-after
 
 $(DLL): $(OBJ) $(RES) $(DEFFILE)
-	$(CXX) -shared $(CXXFLAGS) -s -o $@ \
+	$(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
 		-Wl,--enable-auto-image-base \
 		-Wl,--enable-auto-import \
 		-Wl,--whole-archive \
@@ -58,8 +71,7 @@
 	$(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
 
 $(RES): gvimext_ming.rc
-	$(WINDRES) --input-format=rc --output-format=coff -DMING $? -o $@
+	$(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
 
 clean: clean-custom
 	-$(DEL)  $(OBJ) $(RES) $(DLL)
-
diff -Naur vim73.orig/src/GvimExt/Makefile vim73/src/GvimExt/Makefile
--- vim73.orig/src/GvimExt/Makefile	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/GvimExt/Makefile	2013-08-04 19:09:10.023945623 +0000
@@ -10,7 +10,11 @@
 NODEBUG = 1
 !endif
 
-!include <win32.mak>
+!ifdef SDK_INCLUDE_DIR
+!include $(SDK_INCLUDE_DIR)\Win32.mak
+!else
+!include <Win32.mak>
+!endif
 
 all: gvimext.dll
 
diff -Naur vim73.orig/src/GvimExt/gvimext.cpp vim73/src/GvimExt/gvimext.cpp
--- vim73.orig/src/GvimExt/gvimext.cpp	2010-07-10 17:21:34.000000000 +0000
+++ vim73/src/GvimExt/gvimext.cpp	2013-08-04 19:09:10.027278946 +0000
@@ -142,6 +142,7 @@
 static int dyn_libintl_init(char *dir);
 static void dyn_libintl_end(void);
 
+static wchar_t *oldenv = NULL;
 static HINSTANCE hLibintlDLL = 0;
 static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
 static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
@@ -339,8 +340,10 @@
 inc_cRefThisDLL()
 {
 #ifdef FEAT_GETTEXT
-    if (g_cRefThisDll == 0)
+    if (g_cRefThisDll == 0) {
 	dyn_gettext_load();
+	oldenv = GetEnvironmentStringsW();
+    }
 #endif
     InterlockedIncrement((LPLONG)&g_cRefThisDll);
 }
@@ -349,8 +352,13 @@
 dec_cRefThisDLL()
 {
 #ifdef FEAT_GETTEXT
-    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0)
+    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0) {
 	dyn_gettext_free();
+	if (oldenv != NULL) {
+	    FreeEnvironmentStringsW(oldenv);
+	    oldenv = NULL;
+	}
+    }
 #else
     InterlockedDecrement((LPLONG)&g_cRefThisDll);
 #endif
@@ -519,7 +527,7 @@
 //
 //  PARAMETERS:
 //    pIDFolder - Specifies the parent folder
-//    pDataObj  - Spefifies the set of items selected in that folder.
+//    pDataObj  - Specifies the set of items selected in that folder.
 //    hRegKey   - Specifies the type of the focused item in the selection.
 //
 //  RETURN VALUE:
@@ -586,8 +594,23 @@
 
     // Initialize m_cntOfHWnd to 0
     m_cntOfHWnd = 0;
-    // Retrieve all the vim instances
-    EnumWindows(EnumWindowsProc, (LPARAM)this);
+
+    HKEY keyhandle;
+    bool showExisting = true;
+
+    // Check whether "Edit with existing Vim" entries are disabled.
+    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
+				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
+    {
+	if (RegQueryValueEx(keyhandle, "DisableEditWithExisting", 0, NULL,
+						 NULL, NULL) == ERROR_SUCCESS)
+	    showExisting = false;
+	RegCloseKey(keyhandle);
+    }
+
+    // Retrieve all the vim instances, unless disabled.
+    if (showExisting)
+	EnumWindows(EnumWindowsProc, (LPARAM)this);
 
     if (cbFiles > 1)
     {
@@ -890,8 +913,8 @@
 			NULL,		// Process handle not inheritable.
 			NULL,		// Thread handle not inheritable.
 			FALSE,		// Set handle inheritance to FALSE.
-			0,		// No creation flags.
-			NULL,		// Use parent's environment block.
+			oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
+			oldenv,		// Use unmodified environment block.
 			NULL,		// Use parent's starting directory.
 			&si,		// Pointer to STARTUPINFO structure.
 			&pi)		// Pointer to PROCESS_INFORMATION structure.
@@ -972,8 +995,8 @@
 		NULL,		// Process handle not inheritable.
 		NULL,		// Thread handle not inheritable.
 		FALSE,		// Set handle inheritance to FALSE.
-		0,		// No creation flags.
-		NULL,		// Use parent's environment block.
+		oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
+		oldenv,		// Use unmodified environment block.
 		NULL,		// Use parent's starting directory.
 		&si,		// Pointer to STARTUPINFO structure.
 		&pi)		// Pointer to PROCESS_INFORMATION structure.
diff -Naur vim73.orig/src/GvimExt/gvimext.def vim73/src/GvimExt/gvimext.def
--- vim73.orig/src/GvimExt/gvimext.def	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/GvimExt/gvimext.def	2013-08-04 19:09:10.027278946 +0000
@@ -1,7 +1,7 @@
 ;gvimdef.def : Declares the module parameters for the DLL.
 
 LIBRARY      gvimext
-DESCRIPTION  'Vim Shell Extension'
+; DESCRIPTION  'Vim Shell Extension'
 
 EXPORTS
     DllCanUnloadNow private
diff -Naur vim73.orig/src/GvimExt/gvimext_ming.def vim73/src/GvimExt/gvimext_ming.def
--- vim73.orig/src/GvimExt/gvimext_ming.def	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/GvimExt/gvimext_ming.def	2013-08-04 19:09:10.033945593 +0000
@@ -3,7 +3,7 @@
 ;Hence this is the same file as gvimext.def with private removed
 
 LIBRARY      gvimext
-DESCRIPTION  'Vim Shell Extension build with MinGW'
+; DESCRIPTION  'Vim Shell Extension build with MinGW'
 
 EXPORTS
     DllCanUnloadNow = DllCanUnloadNow@0
diff -Naur vim73.orig/src/INSTALL vim73/src/INSTALL
--- vim73.orig/src/INSTALL	2010-06-26 04:04:51.000000000 +0000
+++ vim73/src/INSTALL	2013-08-04 19:09:10.037278916 +0000
@@ -6,9 +6,8 @@
 Contents:
 1. Generic
 2. Unix
-3. RISC OS
-4. OS/2 (with EMX 0.9b)
-5. Atari MiNT
+3. OS/2 (with EMX 0.9b)
+4. Atari MiNT
 
 See INSTALLami.txt              for Amiga
 See INSTALLmac.txt              for Macintosh
@@ -174,25 +173,7 @@
 	./configure --without-local-dir
 
 
-3. RISC OS
-=============
-
-Much file renaming is needed before you can compile anything.
-You'll need UnixLib to link against, GCC and GNU make.
-
-I suggest you get the RISC OS binary distribution, which includes the
-Templates file and the loader.
-
-Try here: http://www.ecs.soton.ac.uk/~tal197
-
-Do
-    :help riscos
-
-within the editor for more information, or read the
-../runtime/doc/os_risc.txt help file.
-
-
-4. OS/2
+3. OS/2
 =======
 
 Summary:
@@ -237,7 +218,7 @@
 Check ../runtime/doc/os_os2.txt for additional info on running Vim.
 
 
-5. Atari MiNT
+4. Atari MiNT
 =============
 
 [NOTE: this is quite old, it might not work anymore]
diff -Naur vim73.orig/src/INSTALLpc.txt vim73/src/INSTALLpc.txt
--- vim73.orig/src/INSTALLpc.txt	2010-05-24 12:58:06.000000000 +0000
+++ vim73/src/INSTALLpc.txt	2013-08-04 19:09:10.040612240 +0000
@@ -11,9 +11,9 @@
 this, then you will get the default behavior as is documented, which should
 be fine for most people.
 
-With the exception of the last two sections (Windows 3.1 and MS-DOS),
-this document assumes that you are building Vim for Win32
-(Windows NT/2000/XP/2003/Vista and Windows 95/98/Me)
+With the exception of two sections (Windows 3.1 and MS-DOS), this document
+assumes that you are building Vim for Win32 or later.
+(Windows 95/98/Me/NT/2000/XP/2003/Vista/7)
 
 
 Contents:
@@ -27,9 +27,13 @@
 8. Windows 3.1
 9. MS-DOS
 
+10. Installing after building from sources
+
+
 The currently preferred method is using the free Visual C++ Toolkit 2008
-|msvc-2008-express|.  If you need the executable to run on Windows 98 or ME,
-use the 2003 one |msvc-2003-toolkit|.
+|msvc-2008-express|, the produced binary runs on most MS-Windows systems.  If
+you need the executable to run on Windows 98 or ME, use the 2003 one
+|msvc-2003-toolkit|.
 
 
 1. Microsoft Visual C++
@@ -41,6 +45,10 @@
 Building with Visual Studio (VS 98, VS .NET, VS .NET 2003, VS 2005, and VS 2008)
 is straightforward. (These instructions should also work for VS 4 and VS 5.)
 
+Using VS C++ 2008 Express is recommended, the binaries build with that run on
+nearly all platforms.  Binaries from later versions may not run on Windows 95
+or XP.
+
 To build Vim from the command line with MSVC, use Make_mvc.mak.
 Visual Studio installed a batch file called vcvars32.bat, which you must
 run to set up paths for nmake and MSVC.
@@ -168,6 +176,10 @@
 To set the environment execute the msvc2008.bat script.  You can then build
 Vim with Make_mvc.mak.
 
+For building 64 bit binaries you also need to install the SDK:
+"Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1"
+You don't need the examples and documentation.
+
 
 Visual C++ 2010 Express Edition       *msvc-2010-express*
 -------------------------------
@@ -176,7 +188,7 @@
     http://www.microsoft.com/express/vc/Default.aspx
 This includes the IDE and the debugger.
 
-To set the environment execute the msvc2008.bat script.  You can then build
+To set the environment execute the msvc2010.bat script.  You can then build
 Vim with Make_mvc.mak.
 
 
@@ -235,6 +247,12 @@
 found at
     http://www.upx.org/
 
+As of 2011, UPX still does not support compressing 64-bit EXE's; if you have
+built a 64-bit vim then an alternative to UPX is 'MPRESS'. MPRESS can be found
+at:
+    http://www.matcode.com/mpress.htm
+
+
 ADDITION: NLS support with MinGW
 
 (by Eduardo F. Amatria <eferna1@platea.pntic.mec.es>)
@@ -286,10 +304,12 @@
 6. Building with Python support
 ===============================
 
-(written by Ron Aaron: <ronaharon@yahoo.com>)
+For building with MSVC 2008 the "Windows Installer" from www.python.org
+works fine.
+
+(rest written by Ron Aaron: <ronaharon@yahoo.com>)
 
-This has been tested with the mingw32 compiler, and the ActiveState
-ActivePython:
+Building with the mingw32 compiler, and the ActiveState ActivePython:
     http://www.ActiveState.com/Products/ActivePython/
 
 After installing the ActivePython, you will have to create a 'mingw32'
@@ -406,5 +426,61 @@
 NOTE: multi-byte support is broken in the Borland libraries, not everything
 will work properly!  Esp. handling multi-byte file names.
 
-If you get all kinds of strange error messages when compiling, try adding
-changing the file format from "unix" to "dos".
+If you get all kinds of strange error messages when compiling, try changing
+the file format from "unix" to "dos".
+
+
+10. Installing after building from sources
+==========================================
+
+[provided by Michael Soyka]
+
+After you've built the Vim binaries as described above, you're ready to
+install Vim on your system.  However, if you've obtained the Vim sources
+using Mercurial or by downloading them as a unix tar file, you must first 
+create a "vim73" directory.  If you instead downloaded the sources as
+zip files, you can skip this setup as the zip archives already have the
+correct directory structure.  
+
+  A.  Create a Vim "runtime" subdirectory named "vim73"
+  -----------------------------------------------------
+  If you obtained your Vim sources as zip files, you can skip this step.  
+  Otherwise, continue reading.
+
+  Go to the directory that contains the Vim "src" and "runtime"
+  directories and create a new subdirectory named "vim73".  
+  
+  Copy the "runtime" files into "vim73":
+     copy runtime\* vim73
+
+  B.  Copy the new binaries into the "vim73" directory
+  ----------------------------------------------------
+  Regardless of how you installed the Vim sources, you need to copy the
+  new binaries you created above into "vim73":
+
+     copy src\*.exe vim73
+     copy src\GvimExt\gvimext.dll vim73
+     copy src\xxd\xxd.exe vim73
+
+  C.  Move the "vim73" directory into the Vim installation subdirectory
+  ---------------------------------------------------------------------
+  Move the "vim73" subdirectory into the subdirectory where you want Vim
+  to be installed.  Typically, this subdirectory will be named "vim".  
+  If you already have a "vim73" subdirectory in "vim", delete it first
+  by running its uninstal.exe program.  
+
+  D.  Install Vim
+  ---------------
+  "cd" to your Vim installation subdirectory "vim\vim73" and run the
+  "install.exe" program.  It will ask you a number of questions about
+  how you would like to have your Vim setup.  Among these are:
+  - You can tell it to write a "_vimrc" file with your preferences in the
+    parent directory.
+  - It can also install an "Edit with Vim" entry in the Windows Explorer
+    popup menu.
+  - You can have it create batch files, so that you can run Vim from the
+    console or in a shell.  You can select one of the directories in your
+    PATH or add the directory to PATH using the Windows Control Panel.  
+  - Create entries for Vim on the desktop and in the Start menu.
+
+Happy Vimming!
diff -Naur vim73.orig/src/INSTALLvms.txt vim73/src/INSTALLvms.txt
--- vim73.orig/src/INSTALLvms.txt	2010-08-01 12:36:08.000000000 +0000
+++ vim73/src/INSTALLvms.txt	2013-08-04 19:09:10.043945563 +0000
@@ -330,7 +330,7 @@
      Also VMS_JACKETS.EXE from OpenVMS Porting Library.
 
      Please note, that GTK uses /name=(as_is,short)/float=ieee/ieee=denorm
-     complier directives that is not compatible with "standard" VMS usage,
+     compiler directives that is not compatible with "standard" VMS usage,
      therefore other external features might fail as PERL, PYTHON and TCL
      support.
 
diff -Naur vim73.orig/src/Make_bc5.mak vim73/src/Make_bc5.mak
--- vim73.orig/src/Make_bc5.mak	2010-07-17 15:28:51.000000000 +0000
+++ vim73/src/Make_bc5.mak	2013-08-04 19:09:10.047278886 +0000
@@ -694,7 +694,7 @@
 
 !if ($(OSTYPE)==WIN32)
 vimobj = $(vimobj) \
-	$(OBJDIR)\os_win32.obj $(OBJDIR)\os_mswin.obj
+	$(OBJDIR)\os_win32.obj $(OBJDIR)\os_mswin.obj $(OBJDIR)\winclip.obj
 !elif ($(OSTYPE)==DOS16)
 vimobj = $(vimobj) \
 	$(OBJDIR)\os_msdos.obj
@@ -1006,10 +1006,10 @@
 	$(PERL)\bin\perl.exe $(PERL)\lib\ExtUtils\xsubpp -prototypes -typemap \
 	    $(PERL)\lib\ExtUtils\typemap if_perl.xs > $@
 
-$(OBJDIR)\if_python.obj: if_python.c python.lib
+$(OBJDIR)\if_python.obj: if_python.c if_py_both.h python.lib
 	$(CC) -I$(PYTHON)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python.c
 
-$(OBJDIR)\if_python3.obj: if_python3.c python3.lib
+$(OBJDIR)\if_python3.obj: if_python3.c if_py_both.h python3.lib
 	$(CC) -I$(PYTHON3)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python3.c
 
 $(OBJDIR)\if_ruby.obj: if_ruby.c ruby.lib
diff -Naur vim73.orig/src/Make_cyg.mak vim73/src/Make_cyg.mak
--- vim73.orig/src/Make_cyg.mak	2010-08-02 19:09:22.000000000 +0000
+++ vim73/src/Make_cyg.mak	2013-08-04 19:09:10.047278886 +0000
@@ -1,6 +1,6 @@
 #
 # Makefile for VIM on Win32, using Cygnus gcc
-# Last updated by Dan Sharp.  Last Change: 2010 Feb 24
+# Last updated by Dan Sharp.  Last Change: 2013 Apr 22
 #
 # Also read INSTALLpc.txt!
 #
@@ -21,12 +21,17 @@
 #   TCL_VER	define to version of TCL being used (83)
 #   DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (yes)
 # RUBY		define to path to Ruby dir to get Ruby support (not defined)
-#   RUBY_VER	define to version of Ruby being used (16)
+#   RUBY_VER		define to version of Ruby being used (16)
+#   RUBY_VER_LONG	same, but in format with dot. (1.6)
+#	    You must set RUBY_VER_LONG when changing RUBY_VER.
+#	    You must set RUBY_API_VER version to RUBY_VER_LONG.
+#	    Don't set ruby API version to RUBY_VER like 191.
 #   DYNAMIC_RUBY no or yes: use yes to load the Ruby DLL dynamically (yes)
 # MZSCHEME	define to path to MzScheme dir to get MZSCHEME support (not defined)
 #   MZSCHEME_VER      define to version of MzScheme being used (209_000)
 #   DYNAMIC_MZSCHEME  no or yes: use yes to load the MzScheme DLLs dynamically (yes)
 #   MZSCHEME_DLLS     path to MzScheme DLLs (libmzgc and libmzsch), for "static" build.
+#   MZSCHEME_USE_RACKET  define to use "racket" instead of "mzsch".
 # LUA	define to path to Lua dir to get Lua support (not defined)
 #   LUA_VER	    define to version of Lua being used (51)
 #   DYNAMIC_LUA  no or yes: use yes to load the Lua DLL dynamically (yes)
@@ -42,12 +47,12 @@
 #               (i386)
 # USEDLL	no or yes: set to yes to use the Runtime library DLL (no)
 #		For USEDLL=yes the cygwin1.dll is required to run Vim.
-#		"no" does not work with latest version of Cygwin, use
-#		Make_ming.mak instead.  Or set CC to gcc-3 and add
+#		For "no" the mingw-gcc-g++ package or the mingw64-i686-gcc-g++
+#		package is required to compile Vim.  Or set CC to gcc-3 and add
 #		-L/lib/w32api to EXTRA_LIBS.
 # POSTSCRIPT	no or yes: set to yes for PostScript printing (no)
 # FEATURES	TINY, SMALL, NORMAL, BIG or HUGE (BIG)
-# WINVER	Lowest Win32 version to support.  (0x0400)
+# WINVER	Lowest Win32 version to support.  (0x0500)
 # CSCOPE	no or yes: to include cscope interface support (yes)
 # OPTIMIZE	SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
 # NETBEANS	no or yes: to include netbeans interface support (yes when GUI
@@ -84,7 +89,7 @@
 endif
 
 ifndef WINVER
-WINVER = 0x0400
+WINVER = 0x0500
 endif
 
 ifndef CSCOPE
@@ -101,17 +106,35 @@
 OPTIMIZE = MAXSPEED
 endif
 
+
+# Link against the shared version of libstdc++ by default.  Set
+# STATIC_STDCPLUS to "yes" to link against static version instead.
+ifndef STATIC_STDCPLUS
+STATIC_STDCPLUS=no
+endif
+
 ### See feature.h for a list of optionals.
 ### Any other defines can be included here.
 
 DEFINES = -DWIN32 -DHAVE_PATHDEF -DFEAT_$(FEATURES) \
 	  -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER)
+ifeq ($(ARCH),x86-64)
+DEFINES+=-DMS_WIN64
+endif
 INCLUDES = -march=$(ARCH) -Iproto
 
 #>>>>> name of the compiler and linker, name of lib directory
-CROSS_COMPILE =
+ifeq (yes, $(USEDLL))
+# CROSS_COMPILE is used for the gvimext DLL.
+CROSS_COMPILE = i686-pc-mingw32-
 CC = gcc
 RC = windres
+else
+# i686-pc-mingw32-gcc, i686-w64-mingw32-gcc or gcc-3 can be used.
+CROSS_COMPILE = i686-pc-mingw32-
+CC = $(CROSS_COMPILE)gcc
+RC = $(CROSS_COMPILE)windres
+endif
 
 ##############################
 # DYNAMIC_PERL=yes and no both work
@@ -188,36 +211,61 @@
 ##############################
 ifdef RUBY
 
+ifndef DYNAMIC_RUBY
+DYNAMIC_RUBY=yes
+endif
+#  Set default value
 ifndef RUBY_VER
-RUBY_VER=16
+RUBY_VER = 16
 endif
-
 ifndef RUBY_VER_LONG
-RUBY_VER_LONG=1.6
+RUBY_VER_LONG = 1.6
 endif
-
-ifndef DYNAMIC_RUBY
-DYNAMIC_RUBY = yes
+ifndef RUBY_API_VER
+RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
 endif
 
-ifeq ($(RUBY_VER), 16)
 ifndef RUBY_PLATFORM
+ifeq ($(RUBY_VER), 16)
 RUBY_PLATFORM = i586-mswin32
-endif
-ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
-endif
 else
-ifndef RUBY_PLATFORM
+ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
+RUBY_PLATFORM = i386-mingw32
+else
+ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
+RUBY_PLATFORM = x64-mingw32
+else
 RUBY_PLATFORM = i386-mswin32
 endif
+endif
+endif
+endif
+
 ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+ifeq ($(RUBY_VER), 16)
+RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
+else
+ifeq ($(ARCH),x86-64)
+RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
+else
+RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+endif
 endif
 endif
 
+ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
+RUBY_19_OR_LATER = 1
+endif
+
 DEFINES += -DFEAT_RUBY
+ifneq ($(findstring w64-mingw32,$(CC)),)
+# A workaround for mingw-w64
+DEFINES += -DHAVE_STRUCT_TIMESPEC -DHAVE_STRUCT_TIMEZONE
+endif
 INCLUDES += -I$(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+ifdef RUBY_19_OR_LATER
+INCLUDES += -I$(RUBY)/include/ruby-$(RUBY_VER_LONG) -I$(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+endif
 EXTRA_OBJS += $(OUTDIR)/if_ruby.o
 
 ifeq (yes, $(DYNAMIC_RUBY))
@@ -254,16 +302,22 @@
 MZSCHEME_GENERATE_BASE=no
 endif
 
+ifndef MZSCHEME_USE_RACKET
+MZSCHEME_MAIN_LIB=mzsch
+else
+MZSCHEME_MAIN_LIB=racket
+endif
+
 ifeq (yes, $(DYNAMIC_MZSCHEME))
-DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
 else
 ifndef MZSCHEME_DLLS
 MZSCHEME_DLLS = $(MZSCHEME)
 endif
 ifeq (yes,$(MZSCHEME_PRECISE_GC))
-MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER)
+MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
 else
-MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
 endif
 EXTRA_LIBS += -L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)/lib $(MZSCHEME_LIB)
 endif
@@ -442,7 +496,12 @@
 ifeq (yes, $(OLE))
 DEFINES += -DFEAT_OLE
 EXTRA_OBJS += $(OUTDIR)/if_ole.o
-EXTRA_LIBS += -loleaut32 -lstdc++
+EXTRA_LIBS += -loleaut32
+ifeq (yes, $(STATIC_STDCPLUS))
+EXTRA_LIBS += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+else
+EXTRA_LIBS += -lstdc++
+endif
 endif
 
 ##############################
@@ -499,6 +558,7 @@
 	$(OUTDIR)/option.o \
 	$(OUTDIR)/os_win32.o \
 	$(OUTDIR)/os_mswin.o \
+	$(OUTDIR)/winclip.o \
 	$(OUTDIR)/pathdef.o \
 	$(OUTDIR)/popupmnu.o \
 	$(OUTDIR)/quickfix.o \
@@ -529,7 +589,7 @@
 	$(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
 
 GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
-	$(MAKE) -C GvimExt -f Make_ming.mak CROSS_COMPILE=$(CROSS_COMPILE)
+	$(MAKE) -C GvimExt -f Make_cyg.mak CROSS_COMPILE=$(CROSS_COMPILE)
 
 vimrun.exe: vimrun.c
 	$(CC) $(CFLAGS) -o vimrun.exe vimrun.c  $(LIBS)
@@ -558,7 +618,7 @@
 endif
 	-$(DEL) pathdef.c
 	$(MAKE) -C xxd -f Make_cyg.mak clean
-	$(MAKE) -C GvimExt -f Make_ming.mak clean
+	$(MAKE) -C GvimExt -f Make_cyg.mak clean
 
 distclean: clean
 	-$(DEL) obj$(DIRSLASH)*.o
@@ -582,16 +642,19 @@
 $(OUTDIR)/ex_eval.o:	ex_eval.c $(INCL) ex_cmds.h
 	$(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
 
+$(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
+	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+
 $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
 	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
 
 $(OUTDIR)/if_ole.o:	if_ole.cpp $(INCL)
 	$(CC) -c $(CFLAGS) if_ole.cpp -o $(OUTDIR)/if_ole.o
 
-$(OUTDIR)/if_python.o : if_python.c $(INCL)
+$(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
 	$(CC) -c $(CFLAGS) -I$(PYTHON)/include $< -o $@
 
-$(OUTDIR)/if_python3.o : if_python3.c $(INCL)
+$(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
 	$(CC) -c $(CFLAGS) -I$(PYTHON3)/include $< -o $@
 
 if_perl.c: if_perl.xs typemap
@@ -612,6 +675,9 @@
 $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_DEP)
 	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
 
+$(OUTDIR)/regexp.o:		regexp.c regexp_nfa.c $(INCL)
+	$(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
+
 $(OUTDIR)/if_mzsch.o:	if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
 	$(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
 
diff -Naur vim73.orig/src/Make_ivc.mak vim73/src/Make_ivc.mak
--- vim73.orig/src/Make_ivc.mak	2010-06-07 20:49:30.000000000 +0000
+++ vim73/src/Make_ivc.mak	2013-08-04 19:09:10.053945533 +0000
@@ -241,6 +241,7 @@
 	"$(INTDIR)/ops.obj" \
 	"$(INTDIR)/option.obj" \
 	"$(INTDIR)/os_mswin.obj" \
+	"$(INTDIR)/winclip.obj" \
 	"$(INTDIR)/os_win32.obj" \
 	"$(INTDIR)/popupmnu.obj" \
 	"$(INTDIR)/quickfix.obj" \
@@ -600,6 +601,10 @@
 # End Source File
 # Begin Source File
 
+SOURCE=.\winclip.c
+# End Source File
+# Begin Source File
+
 SOURCE=.\os_win32.c
 # End Source File
 # Begin Source File
diff -Naur vim73.orig/src/Make_ming.mak vim73/src/Make_ming.mak
--- vim73.orig/src/Make_ming.mak	2010-08-02 19:09:43.000000000 +0000
+++ vim73/src/Make_ming.mak	2013-08-04 19:09:10.057278856 +0000
@@ -1,25 +1,28 @@
-# Makefile for VIM on Win32, using 'EGCS/mingw32 1.1.2'.
+# Makefile for VIM on Win32
+#
 # Info at http://www.mingw.org
-# Also requires 'GNU make 3.77', which you can get through a link
-# to 'JanJaap's page from the above page.
+# Alternative x86 and 64-builds: http://mingw-w64.sourceforge.net
+# Also requires GNU make, which you can download from the same sites.
 # Get missing libraries from http://gnuwin32.sf.net.
 #
 # Tested on Win32 NT 4 and Win95.
 #
-# To make everything, just 'make -f Make_ming.mak'
-# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'
-# After a run, you can 'make -f Make_ming.mak clean' to clean up
+# To make everything, just 'make -f Make_ming.mak'.
+# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'.
+# After a run, you can 'make -f Make_ming.mak clean' to clean up.
 #
 # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
 # it's just run out of memory or something.  Run again, and it will continue
 # with 'xxd'.
 #
-# "make upx" makes *compressed* versions of the GUI and console EXEs, using the
-# excellent UPX compressor:
+# "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
+# using the excellent UPX compressor:
 #     http://upx.sourceforge.net/
+# "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
+#     http://www.matcode.com/mpress.htm
 #
-# Maintained by Ron Aaron <ronaharon@yahoo.com>
-# updated 2003 Jan 20
+# Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
+# Updated 2012 Sep 5.
 
 #>>>>> choose options:
 # set to yes for a debug build
@@ -29,33 +32,42 @@
 # set to yes to make gvim, no for vim
 GUI=yes
 # FEATURES=[TINY | SMALL  | NORMAL | BIG | HUGE]
-# set to TINY to make minimal version (few features)
+# Set to TINY to make minimal version (few features).
 FEATURES=BIG
-# set to one of i386, i486, i586, i686 as the minimum target processor
+# Set to one of i386, i486, i586, i686 as the minimum target processor.
+# For amd64/x64 architecture set ARCH=x86-64 .
 ARCH=i386
-# set to yes to cross-compile from unix; no=native Windows
+# Set to yes to cross-compile from unix; no=native Windows.
 CROSS=no
-# set to path to iconv.h and libiconv.a to enable using 'iconv.dll'
+# Set to path to iconv.h and libiconv.a to enable using 'iconv.dll'.
 #ICONV="."
 ICONV=yes
 GETTEXT=yes
-# set to yes to include multibyte support
+# Set to yes to include multibyte support.
 MBYTE=yes
-# set to yes to include IME support
+# Set to yes to include IME support.
 IME=yes
 DYNAMIC_IME=yes
-# set to yes to enable writing a postscript file with :hardcopy
+# Set to yes to enable writing a postscript file with :hardcopy.
 POSTSCRIPT=no
-# set to yes to enable OLE support
+# Set to yes to enable OLE support.
 OLE=no
-# Set the default $(WINVER) to make it work with pre-Win2k
-WINVER = 0x0400
-# Set to yes to enable Cscope support
+# Set the default $(WINVER) to make it work with pre-Win2k.
+ifndef WINVER
+WINVER = 0x0500
+endif
+# Set to yes to enable Cscope support.
 CSCOPE=yes
-# Set to yes to enable Netbeans support
+# Set to yes to enable Netbeans support.
 NETBEANS=$(GUI)
 
 
+# Link against the shared version of libstdc++ by default.  Set
+# STATIC_STDCPLUS to "yes" to link against static version instead.
+ifndef STATIC_STDCPLUS
+STATIC_STDCPLUS=no
+endif
+
 # If the user doesn't want gettext, undefine it.
 ifeq (no, $(GETTEXT))
 GETTEXT=
@@ -81,7 +93,7 @@
 
 # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
 # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
-# uncomment the following, but I can't build a static versin with them, ?-(|
+# uncomment the following, but I can't build a static version with them, ?-(|
 #GETTEXT=c:/gettext-0.10.37-20010430
 #STATIC_GETTEXT=USE_STATIC_GETTEXT
 #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
@@ -102,6 +114,13 @@
 # on NT, it's here:
 PERLLIB=$(PERL)/lib
 PERLLIBS=$(PERLLIB)/Core
+XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
+XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPPTRY)'")
+ifeq "$(XSUBPP_EXISTS)" ""
+XSUBPP=perl $(XSUBPPTRY)
+else
+XSUBPP=xsubpp
+endif
 endif
 
 # uncomment 'LUA' if you want a Lua-enabled version
@@ -141,11 +160,17 @@
 MZSCHEME_GENERATE_BASE=no
 endif
 
+ifndef MZSCHEME_USE_RACKET
+MZSCHEME_MAIN_LIB=mzsch
+else
+MZSCHEME_MAIN_LIB=racket
+endif
+
 ifeq (no,$(DYNAMIC_MZSCHEME))
 ifeq (yes,$(MZSCHEME_PRECISE_GC))
-MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER)
+MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
 else
-MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
 endif
 # the modern MinGW can dynamically link to dlls directly.
 # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll
@@ -237,7 +262,9 @@
 #	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
 #	  RUBY_VER=[Ruby version, eg 16, 17] (default is 16)
 #	  RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.6)
-#	    You must set RUBY_VER_LONG when change RUBY_VER.
+#	    You must set RUBY_VER_LONG when changing RUBY_VER.
+#	    You must set RUBY_API_VER version to RUBY_VER_LONG.
+#	    Don't set ruby API version to RUBY_VER like 191.
 #RUBY=c:/ruby
 ifdef RUBY
 ifndef DYNAMIC_RUBY
@@ -250,6 +277,9 @@
 ifndef RUBY_VER_LONG
 RUBY_VER_LONG = 1.6
 endif
+ifndef RUBY_API_VER
+RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
+endif
 
 ifndef RUBY_PLATFORM
 ifeq ($(RUBY_VER), 16)
@@ -258,20 +288,35 @@
 ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
 RUBY_PLATFORM = i386-mingw32
 else
+ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
+RUBY_PLATFORM = x64-mingw32
+else
 RUBY_PLATFORM = i386-mswin32
 endif
 endif
 endif
+endif
 
 ifndef RUBY_INSTALL_NAME
 ifeq ($(RUBY_VER), 16)
-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
 else
-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+ifeq ($(ARCH),x86-64)
+RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
+else
+RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+endif
 endif
 endif
 
-RUBYINC =-I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
+RUBY_19_OR_LATER = 1
+endif
+
+RUBYINC = -I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+ifdef RUBY_19_OR_LATER
+RUBYINC += -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
+endif
 ifeq (no, $(DYNAMIC_RUBY))
 RUBYLIB = -L$(RUBY)/lib -l$(RUBY_INSTALL_NAME)
 endif
@@ -283,6 +328,9 @@
 DEF_GUI=-DFEAT_GUI_W32 -DFEAT_CLIPBOARD
 DEFINES=-DWIN32 -DWINVER=$(WINVER) -D_WIN32_WINNT=$(WINVER) \
 	-DHAVE_PATHDEF -DFEAT_$(FEATURES)
+ifeq ($(ARCH),x86-64)
+DEFINES+=-DMS_WIN64
+endif
 ifeq ($(CROSS),yes)
 # cross-compiler prefix:
 CROSS_COMPILE = i586-pc-mingw32msvc-
@@ -304,11 +352,13 @@
 endif
 CC := $(CROSS_COMPILE)gcc
 WINDRES := $(CROSS_COMPILE)windres
+WINDRES_CC = $(CC)
 
 #>>>>> end of choices
 ###########################################################################
 
 CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
+WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
 
 ifdef GETTEXT
 DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
@@ -343,7 +393,10 @@
 ifdef MZSCHEME
 CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
 ifeq (yes, $(DYNAMIC_MZSCHEME))
-CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+endif
+ifeq (yes, "$(MZSCHEME_DEBUG)")
+CFLAGS += -DMZSCHEME_FORCE_GC
 endif
 endif
 
@@ -401,11 +454,32 @@
 endif
 endif
 
-ifdef XPM
 # Only allow XPM for a GUI build.
 ifeq (yes, $(GUI))
-CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include
+
+ifndef XPM
+ifeq ($(ARCH),i386)
+XPM = xpm/x86
+endif
+ifeq ($(ARCH),i486)
+XPM = xpm/x86
+endif
+ifeq ($(ARCH),i586)
+XPM = xpm/x86
+endif
+ifeq ($(ARCH),i686)
+XPM = xpm/x86
+endif
+ifeq ($(ARCH),x86-64)
+XPM = xpm/x64
+endif
+endif
+ifdef XPM
+ifneq ($(XPM),no)
+CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include -I $(XPM)/../include
+endif
 endif
+
 endif
 
 ifeq ($(DEBUG),yes)
@@ -460,6 +534,7 @@
 	$(OUTDIR)/option.o \
 	$(OUTDIR)/os_win32.o \
 	$(OUTDIR)/os_mswin.o \
+	$(OUTDIR)/winclip.o \
 	$(OUTDIR)/pathdef.o \
 	$(OUTDIR)/popupmnu.o \
 	$(OUTDIR)/quickfix.o \
@@ -535,10 +610,10 @@
 DEFINES += $(DEF_GUI)
 OBJ += $(GUIOBJ)
 LFLAGS += -mwindows
-OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
+OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
 else
 TARGET := vim$(DEBUG_SUFFIX).exe
-OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
+OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
 endif
 
 ifdef GETTEXT
@@ -571,8 +646,13 @@
 endif
 
 ifeq (yes, $(OLE))
-LIB += -loleaut32 -lstdc++
+LIB += -loleaut32
 OBJ += $(OUTDIR)/if_ole.o
+ifeq (yes, $(STATIC_STDCPLUS))
+LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
+else
+LIB += -lstdc++
+endif
 endif
 
 ifeq (yes, $(MBYTE))
@@ -614,8 +694,12 @@
 	upx gvim.exe
 	upx vim.exe
 
+mpress: exes
+	mpress gvim.exe
+	mpress vim.exe
+
 xxd/xxd.exe: xxd/xxd.c
-	$(MAKE) -C xxd -f Make_cyg.mak CC=$(CC)
+	$(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
 
 GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
 	$(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
@@ -633,27 +717,25 @@
 	-$(DEL) mzscheme_base.c
 endif
 	$(MAKE) -C GvimExt -f Make_ming.mak clean
-	$(MAKE) -C xxd -f Make_cyg.mak clean
+	$(MAKE) -C xxd -f Make_ming.mak clean
 
 ###########################################################################
 INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
 	structs.h regexp.h option.h ex_cmds.h proto.h globals.h farsi.h \
 	gui.h
 
-$(OUTDIR)/if_python.o : if_python.c $(INCL)
+$(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
 	$(CC) -c $(CFLAGS) $(PYTHONINC) -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\" $< -o $@
 
-$(OUTDIR)/if_python3.o : if_python3.c $(INCL)
+$(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
 	$(CC) -c $(CFLAGS) $(PYTHON3INC) -DDYNAMIC_PYTHON3_DLL=\"PYTHON$(PYTHON3_VER).dll\" $< -o $@
 
 $(OUTDIR)/%.o : %.c $(INCL)
 	$(CC) -c $(CFLAGS) $< -o $@
 
-$(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
-	$(WINDRES) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
-
-$(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
-	$(WINDRES) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
+$(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
+	$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
+	    --input-format=rc --output-format=coff -i vim.rc -o $@
 
 $(OUTDIR):
 	$(MKDIR) $(OUTDIR)
@@ -664,6 +746,9 @@
 $(OUTDIR)/ex_eval.o:	ex_eval.c $(INCL) ex_cmds.h
 	$(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
 
+$(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
+	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
+
 $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
 	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
 
@@ -677,12 +762,15 @@
 endif
 
 if_perl.c: if_perl.xs typemap
-	perl $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
+	$(XSUBPP) -prototypes -typemap \
 	     $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
 
 $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
 	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
 
+$(OUTDIR)/regexp.o:		regexp.c regexp_nfa.c $(INCL)
+	$(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
+
 $(OUTDIR)/if_mzsch.o:	if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
 	$(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
 
diff -Naur vim73.orig/src/Make_mvc.mak vim73/src/Make_mvc.mak
--- vim73.orig/src/Make_mvc.mak	2010-07-18 19:24:20.000000000 +0000
+++ vim73/src/Make_mvc.mak	2013-08-04 19:09:10.060612180 +0000
@@ -1,7 +1,7 @@
 # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me)
 # and Win64, using the Microsoft Visual C++ compilers. Known to work with
 # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005),
-# VC9 (VS2008), and VC10 (VS2010).
+# VC9 (VS2008), VC10 (VS2010) and VC11 (VS2012)
 #
 # To build using other Windows compilers, see INSTALLpc.txt
 #
@@ -15,9 +15,12 @@
 # This will build the console version of Vim with no additional interfaces.
 # To add features, define any of the following:
 #
+# 	For MSVC 11 you need to specify where the Win32.mak file is, e.g.:
+# 	   SDK_INCLUDE_DIR="C:\Program Files\Microsoft SDKs\Windows\v7.1\Include"
+#
 #	!!!!  After changing features do "nmake clean" first  !!!!
 #
-#       Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
+#	Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
 #
 #	GUI interface: GUI=yes (default is no)
 #
@@ -63,6 +66,8 @@
 #	  RUBY_VER=[Ruby version, eg 16, 17] (default is 18)
 #	  RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.8)
 #	    You must set RUBY_VER_LONG when change RUBY_VER.
+#	    You must set RUBY_API_VER to RUBY_VER_LONG.
+#	    Don't set ruby API version to RUBY_VER like 191.
 #
 #	Tcl interface:
 #	  TCL=[Path to Tcl directory]
@@ -82,18 +87,20 @@
 #	  GETTEXT=[yes or no]  (default is yes)
 #	See http://sourceforge.net/projects/gettext/
 #
-#       PostScript printing: POSTSCRIPT=yes (default is no)
+#	PostScript printing: POSTSCRIPT=yes (default is no)
 #
-#       Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
+#	Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
 #
-#       XPM Image Support: XPM=[path to XPM directory]
+#	XPM Image Support: XPM=[path to XPM directory]
+#	Default is "xpm", using the files included in the distribution.
+#	Use "no" to disable this feature.
 #
-#       Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
+#	Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
 #
-#       Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
-#       i386)
+#	Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
+#	i386)
 #
-#       Version Support: WINVER=[0x0400, 0x0500] (default is 0x0400)
+#	Version Support: WINVER=[0x0400, 0x0500] (default is 0x0400)
 #
 #	Debug version: DEBUG=yes
 #	Mapfile: MAP=[no, yes or lines] (default is yes)
@@ -101,10 +108,12 @@
 #	  yes:   Write a normal mapfile.
 #	  lines: Write a mapfile with line numbers (only for VC6 and later)
 #
-#       Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
-#       doesn't work)
+#	Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
+#	doesn't work)
+#
+#	Visual C Version: MSVCVER=m.n (default derived from nmake if undefined)
 #
-#       Visual C Version: MSVCVER=m.n (default derived from nmake if undefined)
+#	Static Code Analysis: ANALYZE=yes (works with VS2012 only)
 #
 # You can combine any of these interfaces
 #
@@ -209,6 +218,7 @@
 # We're on Windows 95
 CPU = i386
 !endif # !PROCESSOR_ARCHITECTURE
+OBJDIR = $(OBJDIR)$(CPU)
 
 # Build a retail version by default
 
@@ -222,7 +232,12 @@
 
 # Get all sorts of useful, standard macros from the Platform SDK.
 
+!ifdef SDK_INCLUDE_DIR
+!include $(SDK_INCLUDE_DIR)\Win32.mak
+!else
 !include <Win32.mak>
+!endif
+
 
 # Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
 WP64CHECK = /Wp64
@@ -277,13 +292,23 @@
 NETBEANS_LIB	= WSock32.lib
 !endif
 
-!ifdef XPM
+!ifndef XPM
+# XPM is not set, use the included xpm files, depending on the architecture.
+!if "$(CPU)" == "AMD64"
+XPM = xpm\x64
+!elseif "$(CPU)" == "i386"
+XPM = xpm\x86
+!else
+XPM = no
+!endif
+!endif
+!if "$(XPM)" != "no"
 # XPM - Include support for XPM signs
-# you can get xpm.lib from http://iamphet.nm.ru/xpm or create it yourself
+# See the xpm directory for more information.
 XPM_OBJ   = $(OBJDIR)/xpm_w32.obj
 XPM_DEFS  = -DFEAT_XPM_W32
 XPM_LIB   = $(XPM)\lib\libXpm.lib
-XPM_INC	  = -I $(XPM)\include
+XPM_INC	  = -I $(XPM)\include -I $(XPM)\..\include
 !endif
 !endif
 
@@ -350,6 +375,10 @@
 MSVCVER = 6.0
 CPU = ix86
 !endif
+!if "$(_NMAKE_VER)" == "6.00.9782.0"
+MSVCVER = 6.0
+CPU = ix86
+!endif
 !if "$(_NMAKE_VER)" == "7.00.9466"
 MSVCVER = 7.0
 !endif
@@ -380,12 +409,21 @@
 !if "$(_NMAKE_VER)" == "10.00.30319.01"
 MSVCVER = 10.0
 !endif
-!if "$(_NMAKE_VER)" == "9.00.30729.01"
-MSVCVER = 9.0
+!if "$(_NMAKE_VER)" == "10.00.40219.01"
+MSVCVER = 10.0
+!endif
+!if "$(_NMAKE_VER)" == "11.00.50727.1"
+MSVCVER = 11.0
+!endif
+!if "$(_NMAKE_VER)" == "11.00.51106.1"
+MSVCVER = 11.0
+!endif
+!if "$(_NMAKE_VER)" == "11.00.60315.1"
+MSVCVER = 11.0
 !endif
 !endif
 
-# Abort bulding VIM if version of VC is unrecognised.
+# Abort building VIM if version of VC is unrecognised.
 !ifndef MSVCVER
 !message *** ERROR
 !message Cannot determine Visual C version being used.  If you are using the
@@ -397,7 +435,7 @@
 !endif
 
 # Convert processor ID to MVC-compatible number
-!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0")
+!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0") && ("$(MSVCVER)" != "11.0")
 !if "$(CPUNR)" == "i386"
 CPUARG = /G3
 !elseif "$(CPUNR)" == "i486"
@@ -412,8 +450,8 @@
 CPUARG =
 !endif
 !else
-# VC8/9 only allows specifying SSE architecture
-!if "$(CPUNR)" == "pentium4"
+# VC8/9/10 only allows specifying SSE architecture but only for 32bit
+!if "$(ASSEMBLY_ARCHITECTURE)" == "x86" && "$(CPUNR)" == "pentium4"
 CPUARG = /arch:SSE2
 !endif
 !endif
@@ -431,7 +469,7 @@
 OPTFLAG = /Ox
 !endif
 
-!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
+!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
 # Use link time code generation if not worried about size
 !if "$(OPTIMIZE)" != "SPACE"
 OPTFLAG = $(OPTFLAG) /GL
@@ -443,6 +481,11 @@
 CFLAGS=$(CFLAGS) $(WP64CHECK)
 !endif
 
+# Static code analysis generally available starting with VS2012
+!if ("$(ANALYZE)" == "yes") && ("$(MSVCVER)" == "11.0")
+CFLAGS=$(CFLAGS) /analyze
+!endif
+
 CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
 RCFLAGS = $(rcflags) $(rcvars) -DNDEBUG
 ! ifdef USE_MSVCRT
@@ -510,6 +553,7 @@
 	$(OUTDIR)\ops.obj \
 	$(OUTDIR)\option.obj \
 	$(OUTDIR)\os_mswin.obj \
+	$(OUTDIR)\winclip.obj \
 	$(OUTDIR)\os_win32.obj \
 	$(OUTDIR)\pathdef.obj \
 	$(OUTDIR)\popupmnu.obj \
@@ -619,7 +663,7 @@
 		-DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
 TCL_OBJ	= $(OUTDIR)\if_tcl.obj
 TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
-TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
+TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
 !else
 CFLAGS  = $(CFLAGS) -DFEAT_TCL
 TCL_OBJ	= $(OUTDIR)\if_tcl.obj
@@ -705,12 +749,18 @@
 MZSCHEME_VER = 205_000
 !endif
 CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I $(MZSCHEME)\include
-!if EXIST("$(MZSCHEME)\collects\scheme\base.ss")
-# for MzScheme 4.x we need to include byte code for basic Scheme stuff
+!if EXIST("$(MZSCHEME)\collects\scheme\base.ss") \
+	|| EXIST("$(MZSCHEME)\collects\scheme\base.rkt") 
+# for MzScheme >= 4 we need to include byte code for basic Scheme stuff
 MZSCHEME_EXTRA_DEP = mzscheme_base.c
 CFLAGS = $(CFLAGS) -DINCLUDE_MZSCHEME_BASE
 !endif
-!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib") \
+!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib")
+MZSCHEME_MAIN_LIB=mzsch
+!else
+MZSCHEME_MAIN_LIB=racket
+!endif
+!if EXIST("$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib") \
 	&& !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib")
 !message Building with Precise GC
 MZSCHEME_PRECISE_GC = yes
@@ -722,7 +772,7 @@
 !endif
 !message MzScheme DLLs will be loaded dynamically
 CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME \
-		-DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" \
+		-DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" \
 		-DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
 !else
 !if "$(MZSCHEME_DEBUG)" == "yes"
@@ -730,13 +780,15 @@
 !endif
 !if "$(MZSCHEME_PRECISE_GC)" == "yes"
 # Precise GC does not use separate dll
-MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
+MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
 !else
 MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib \
-		$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
+		$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
 !endif
 !endif
 MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
+# increase stack size
+MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
 !endif
 
 # Perl interface
@@ -782,6 +834,11 @@
 PERL_INC = /I $(PERL_INCDIR)
 PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
 XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
+!if exist($(XSUBPP))
+XSUBPP = $(PERL_EXE) $(XSUBPP)
+!else
+XSUBPP = xsubpp
+!endif
 XSUBPP_TYPEMAP = $(PERL)\lib\ExtUtils\typemap
 
 !endif
@@ -797,28 +854,31 @@
 !ifndef RUBY_VER_LONG
 RUBY_VER_LONG = 1.8
 !endif
+!ifndef RUBY_API_VER
+RUBY_API_VER = $(RUBY_VER_LONG:.=)
+!endif
 
 !if $(RUBY_VER) >= 18
 !ifndef RUBY_PLATFORM
 RUBY_PLATFORM = i386-mswin32
 !endif
 !ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
+RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
 !endif
 !else
 !ifndef RUBY_PLATFORM
 RUBY_PLATFORM = i586-mswin32
 !endif
 !ifndef RUBY_INSTALL_NAME
-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
 !endif
 !endif # $(RUBY_VER) >= 18
 
 !message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
 CFLAGS = $(CFLAGS) -DFEAT_RUBY
 RUBY_OBJ = $(OUTDIR)\if_ruby.obj
-!if $(RUBY_VER) >= 190
-RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)"
+!if $(RUBY_VER) >= 19
+RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
 !else
 RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
 !endif
@@ -880,7 +940,7 @@
 
 # Report link time code generation progress if used. 
 !ifdef NODEBUG
-!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
+!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
 !if "$(OPTIMIZE)" != "SPACE"
 LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
 !endif
@@ -1038,7 +1098,7 @@
 	$(CC) $(CFLAGS) $(LUA_INC) if_lua.c
 
 if_perl.c : if_perl.xs typemap
-	$(PERL_EXE) $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+	$(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
 		-typemap typemap if_perl.xs > if_perl.c
 
 $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c  $(INCL)
@@ -1047,16 +1107,16 @@
 $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c  $(INCL)
 	$(CC) $(CFLAGS) $(PERL_INC) if_perlsfio.c
 
-$(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c  $(INCL) $(MZSCHEME_EXTRA_DEP)
+$(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c if_mzsch.h $(INCL) $(MZSCHEME_EXTRA_DEP)
 	$(CC) $(CFLAGS) if_mzsch.c \
 		-DMZSCHEME_COLLECTS=\"$(MZSCHEME:\=\\)\\collects\"
 mzscheme_base.c:
 	$(MZSCHEME)\mzc --c-mods mzscheme_base.c ++lib scheme/base
 
-$(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c  $(INCL)
+$(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c if_py_both.h $(INCL)
 	$(CC) $(CFLAGS) $(PYTHON_INC) if_python.c
 
-$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c  $(INCL)
+$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c if_py_both.h $(INCL)
 	$(CC) $(CFLAGS) $(PYTHON3_INC) if_python3.c
 
 $(OUTDIR)/if_ole.obj: $(OUTDIR) if_ole.cpp  $(INCL) if_ole.h
@@ -1100,6 +1160,8 @@
 
 $(OUTDIR)/os_mswin.obj:	$(OUTDIR) os_mswin.c  $(INCL)
 
+$(OUTDIR)/winclip.obj:	$(OUTDIR) winclip.c  $(INCL)
+
 $(OUTDIR)/os_win32.obj:	$(OUTDIR) os_win32.c  $(INCL) os_win32.h
 
 $(OUTDIR)/os_w32exe.obj:	$(OUTDIR) os_w32exe.c  $(INCL)
@@ -1111,7 +1173,7 @@
 
 $(OUTDIR)/quickfix.obj:	$(OUTDIR) quickfix.c  $(INCL)
 
-$(OUTDIR)/regexp.obj:	$(OUTDIR) regexp.c  $(INCL)
+$(OUTDIR)/regexp.obj:	$(OUTDIR) regexp.c regexp_nfa.c  $(INCL)
 
 $(OUTDIR)/screen.obj:	$(OUTDIR) screen.c  $(INCL)
 
@@ -1156,6 +1218,10 @@
 E0_CFLAGS = $(CFLAGS:\=\\)
 E_CFLAGS = $(E0_CFLAGS:"=\")
 # ") stop the string
+# $LINKARGS2 may contain backslashes and double quotes, escape them both.
+E0_LINKARGS2 = $(LINKARGS2:\=\\)
+E_LINKARGS2 = $(E0_LINKARGS2:"=\")
+# ") stop the string
 
 $(PATHDEF_SRC): auto
 	@echo creating $(PATHDEF_SRC)
@@ -1164,7 +1230,7 @@
 	@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
 	@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
 	@echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
-	@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(LINKARGS2:\=\\)"; >> $(PATHDEF_SRC)
+	@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
 	@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
 	@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
 
@@ -1203,6 +1269,7 @@
 	proto/ops.pro \
 	proto/option.pro \
 	proto/os_mswin.pro \
+	proto/winclip.pro \
 	proto/os_win32.pro \
 	proto/popupmnu.pro \
 	proto/quickfix.pro \
diff -Naur vim73.orig/src/Make_ro.mak vim73/src/Make_ro.mak
--- vim73.orig/src/Make_ro.mak	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/Make_ro.mak	1970-01-01 00:00:00.000000000 +0000
@@ -1,135 +0,0 @@
-#
-# Makefile for Vim on RISC OS - Andy Wingate
-#
-
-GCC         = gcc -mthrowback
-CFLAGS     = -DRISCOS -DFEAT_GUI
-CC         = $(GCC) $(CFLAGS) -O2
-# -DUP_BC_PC_EXTERN for term.c needed as BC defined in termlib.c and term.c
-
-TERMFLAG   = -DUP_BC_PC_EXTERN
-
-ASMFLAGS   = -throwback -objasm -gcc
-
-OBJS =  o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2  \
-	o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar \
-	o.hardcopy o.hashtab o.main o.mark o.mbyte  \
-	o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move     \
-	o.normal o.ops o.option o.popupmnu o.quickfix o.regexp o.screen \
-	o.search   \
-	o.spell o.syntax o.tag o.term o.termlib o.ui o.undo o.version	\
-	o.window o.os_riscos o.swis o.gui o.gui_riscos
-
-Vim: $(OBJS)
-	$(GCC) -o Vim $(OBJS)
-
-install: Vim
-	squeeze -v Vim @.!Vim.Vim
-
-clean:	
-	create o.!fake! 0
-	wipe o.* ~cf
-	remove Vim
-
-o.swis: s.swis
-	as $(ASMFLAGS) -o o.swis s.swis
-
-# Rules for object files
-
-o.%:	c.%
-	$(CC) -c $< -o $@
-
-o.buffer:	c.buffer
-
-o.charset:	c.charset
-
-o.digraph:	c.digraph
-
-o.diff:		c.diff
-
-o.edit:		c.edit
-
-o.eval:		c.eval
-
-o.ex_cmds:	c.ex_cmds
-
-o.ex_cmds2:	c.ex_cmds2
-
-o.ex_docmd:	c.ex_docmd
-
-o.ex_eval:	c.ex_eval
-
-o.ex_getln:	c.ex_getln
-
-o.fileio:	c.fileio
-
-o.fold:		c.fold
-
-o.getchar:	c.getchar
-
-o.hardcopy:	c.hardcopy
-
-o.hashtab:	c.hashtab
-
-o.gui:		c.gui
-
-o.gui_riscos:	c.gui_riscos
-
-o.main:		c.main
-
-o.mark:		c.mark
-
-o.mbyte:	c.mbyte
-
-o.memfile:	c.memfile
-
-o.memline:	c.memline
-
-o.menu:		c.menu
-
-o.message:	c.message
-
-o.misc1:	c.misc1
-
-o.misc2:	c.misc2
-
-o.move:		c.move
-
-o.normal:	c.normal
-
-o.ops:		c.ops
-
-o.option:	c.option
-
-o.os_riscos:	c.os_riscos
-
-o.pty:		c.pty
-
-o.popupmnu:	c.popupmnu
-
-o.quickfix:	c.quickfix
-
-o.regexp:	c.regexp
-
-o.screen:	c.screen
-
-o.search:	c.search
-
-o.spell:	c.spell
-
-o.syntax:	c.syntax
-
-o.tag:		c.tag
-
-o.term:		c.term
-	$(CC) $(TERMFLAG) -c c.term -o o.term
-
-o.termlib:	c.termlib
-
-o.ui:		c.ui
-
-o.undo:		c.undo
-
-o.version:	c.version
-
-o.window:	c.window
diff -Naur vim73.orig/src/Make_sas.mak vim73/src/Make_sas.mak
--- vim73.orig/src/Make_sas.mak	2010-05-18 18:33:25.000000000 +0000
+++ vim73/src/Make_sas.mak	2013-08-04 19:09:10.063945503 +0000
@@ -251,7 +251,7 @@
 
 # generate GlobalSymbolTable, which speeds up the compile time.
 #
-# A preprocessing stage is used to work arounda bug in the GST generator, in
+# A preprocessing stage is used to work around a bug in the GST generator, in
 # that it does not handle nested makefiles properly in this stage.
 # Ignore error message for not producing any code (105).
 $(GST): scoptions vim.h keymap.h macros.h ascii.h term.h structs.h
@@ -283,7 +283,7 @@
 .c.pro:
 	$(CC) $(CFLAGS) GPFILE=proto/$*.pro $(PROPT) $*.c
 
-# dependancies
+# dependencies
 blowfish.o:		blowfish.c
 proto/blowfish.pro:	blowfish.c
 buffer.o:		buffer.c
diff -Naur vim73.orig/src/Make_vms.mms vim73/src/Make_vms.mms
--- vim73.orig/src/Make_vms.mms	2010-07-30 15:14:10.000000000 +0000
+++ vim73/src/Make_vms.mms	2013-08-04 19:09:10.067278826 +0000
@@ -34,7 +34,7 @@
 # SMALL  - Few features enabled, as basic as possible
 # NORMAL - A default selection of features enabled
 # BIG    - Many features enabled, as rich as possible. (default)
-# HUGE   - All possible featues enabled.
+# HUGE   - All possible features enabled.
 # Please select one of these alternatives above.
 MODEL = HUGE
 
@@ -55,7 +55,7 @@
 # Comment out if you want the compiler version with :ver command.
 # NOTE: This part can make some complications if you're using some
 # predefined symbols/flags for your compiler. If does, just leave behind
-# the comment varialbe CCVER.
+# the comment variable CCVER.
 CCVER = YES
 
 # Uncomment if want a debug version. Resulting executable is DVIM.EXE
diff -Naur vim73.orig/src/Make_w16.mak vim73/src/Make_w16.mak
--- vim73.orig/src/Make_w16.mak	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/Make_w16.mak	2013-08-04 19:09:10.067278826 +0000
@@ -4,7 +4,7 @@
 # *************************************************************
 # * WARNING!
 # * This was originally produced by the IDE, but has since been
-# * modifed to make it work properly. Adjust with care!
+# * modified to make it work properly. Adjust with care!
 # * In particular, leave LinkerLocalOptsAtW16_gvim16dexe alone
 # * unless you are a guru.
 # *************************************************************
@@ -107,6 +107,7 @@
    $(INTDIR)\os_win16.obj\
    $(INTDIR)\os_msdos.obj\
    $(INTDIR)\os_mswin.obj\
+   $(INTDIR)\winclip.obj\
    $(INTDIR)\popupmnu.obj\
    $(INTDIR)\quickfix.obj\
    $(INTDIR)\regexp.obj\
diff -Naur vim73.orig/src/Makefile vim73/src/Makefile
--- vim73.orig/src/Makefile	2010-08-15 12:56:15.000000000 +0000
+++ vim73/src/Makefile	2013-08-04 19:09:10.080612119 +0000
@@ -29,7 +29,7 @@
 #	- Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
 #	  want to disable using X11 libraries.	This speeds up starting Vim,
 #	  but the window title will not be set and the X11 selection can not
-#	  used.
+#	  be used.
 #	- Uncomment the line "CONF_OPT_XSMP = --disable-xsmp" if you have the
 #	  X11 Session Management Protocol (XSMP) library (libSM) but do not
 #	  want to use it.
@@ -200,7 +200,7 @@
 #Solaris 2.5 (sun4m)  cc (SC4.0)     +X11R6 +GUI (CDE)	4.6b (E) Andrew Large
 #Solaris 2.5	      cc	     +X11 +GUI Athena	4.2  (9) Sonia Heimann
 #Solaris 2.5	      gcc 2.5.6      +X11 Motif		5.0m (R) Ant. Colombo
-#Solaris 2.6	      gcc 2.8.1      ncursus		5.3  (G) Larry W. Virden
+#Solaris 2.6	      gcc 2.8.1      ncurses		5.3  (G) Larry W. Virden
 #Solaris with -lthread					5.5  (W) K. Nagano
 #Solaris	      gcc				     (b) Riccardo
 #SunOS 4.1.x			     +X11 -GUI		5.1b (J) Bram Moolenaar
@@ -231,8 +231,8 @@
 # (D)  Uncomment lines below for QNX
 # (E)  You might want to use termlib instead of termcap, see below.
 # (F)  See below for instructions.
-# (G)  Using ncursus version 4.2 has reported to cause a crash.  Use the
-#      Sun cursus library instead.
+# (G)  Using ncurses version 4.2 has reported to cause a crash.  Use the
+#      Sun curses library instead.
 # (H)  See line for EXTRA_LIBS below.
 # (I)  SINIX-N 5.42 and 5.43 need some EXTRA_LIBS.  Also for Reliant-Unix.
 # (J)  If you get undefined symbols, see below for a solution.
@@ -283,12 +283,13 @@
 
 ######################## auto/config.mk ######################## {{{1
 # At this position auto/config.mk is included. When starting from the
-# distribution it is almost empty. After running auto/configure it contains
-# settings that have been discovered for your system. Settings below this
-# include override settings in auto/config.mk!
-
-# Note: if auto/config.mk is lost somehow (e.g., because configure was
-# interrupted), create an empty auto/config.mk file and do "make config".
+# toplevel Makefile it is almost empty. After running auto/configure it
+# contains settings that have been discovered for your system. Settings below
+# this include override settings in auto/config.mk!
+
+# Note: If make fails because auto/config.mk does not exist (it is not
+# included in the repository), do:
+#    cp config.mk.dist auto/config.mk
 
 # (X) How to include auto/config.mk depends on the version of "make" you have,
 #     if the current choice doesn't work, try the other one.
@@ -372,6 +373,11 @@
 #CONF_OPT_DARWIN = --with-mac-arch=ppc
 #CONF_OPT_DARWIN = --with-mac-arch=both
 
+# Uncomment the next line to fail if one of the requested language interfaces
+# cannot be configured.  Without this Vim will be build anyway, without
+# the failing interfaces.
+#CONF_OPT_FAIL = --enable-fail-if-missing
+
 # LUA
 # Uncomment one of these when you want to include the Lua interface.
 # First one is for static linking, second one for dynamic loading.
@@ -396,7 +402,7 @@
 # to the command line.	If you see strange flags during compilation, check in
 # auto/config.mk where they come from.  If it's PERL_CFLAGS, try commenting
 # the next line.
-# When you get an error for a missing "perl.exp" file, try creating an emtpy
+# When you get an error for a missing "perl.exp" file, try creating an empty
 # one: "touch perl.exp".
 # This requires at least "small" features, "tiny" doesn't work.
 #CONF_OPT_PERL = --enable-perlinterp
@@ -404,6 +410,7 @@
 
 # PYTHON
 # Uncomment this when you want to include the Python interface.
+# Requires small features or better, fails with tiny features.
 # NOTE: This may cause threading to be enabled, which has side effects (such
 # as using different libraries and debugging becomes more difficult).
 # NOTE: Using this together with Perl may cause a crash in initialization.
@@ -414,12 +421,16 @@
 # However, this may still cause problems, such as "import termios" failing.
 # Build two separate versions of Vim in that case.
 #CONF_OPT_PYTHON = --enable-pythoninterp
+#CONF_OPT_PYTHON = --enable-pythoninterp=dynamic
 #CONF_OPT_PYTHON3 = --enable-python3interp
+#CONF_OPT_PYTHON3 = --enable-python3interp=dynamic
 
 # RUBY
 # Uncomment this when you want to include the Ruby interface.
+# First one for static linking, second one for loading when used.
 # Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu).
 #CONF_OPT_RUBY = --enable-rubyinterp
+#CONF_OPT_RUBY = --enable-rubyinterp=dynamic
 #CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1
 
 # TCL
@@ -444,7 +455,7 @@
 
 # MULTIBYTE - To edit multi-byte characters.
 # Uncomment this when you want to edit a multibyte language.
-# It's automatically enabled with big features or IME support.
+# It's automatically enabled with normal features, GTK or IME support.
 # Note: Compile on a machine where setlocale() actually works, otherwise the
 # configure tests may fail.
 #CONF_OPT_MULTIBYTE = --enable-multibyte
@@ -556,8 +567,8 @@
 #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
 
 # Use this with GCC to check for mistakes, unused arguments, etc.
-#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1 -DU_DEBUG
-#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG
+#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
+#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DU_DEBUG
 #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
 #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
 
@@ -589,8 +600,9 @@
 
 # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof.
 # Might not work with GUI or Perl.
-# For unknown reasons adding "-lc" fixes a linking problem with GCC.  That's
-# probably a bug in the "-pg" implementation.
+# For unknown reasons adding "-lc" fixes a linking problem with some versions
+# of GCC.  That's probably a bug in the "-pg" implementation.
+# After running Vim see the profile result with: gprof vim gmon.out | vim -
 # Need to recompile everything after changing this: "make clean" "make".
 #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING
 #PROFILE_LIBS = -pg
@@ -601,8 +613,8 @@
 # Configuration is in the .ccmalloc or ~/.ccmalloc file.
 # Doesn't work very well, since memory linked to from global variables
 # (in libraries) is also marked as leaked memory.
-#PROFILE_CFLAGS = -DEXITFREE
-#PROFILE_LIBS = -lccmalloc
+#LEAK_CFLAGS = -DEXITFREE
+#LEAK_LIBS = -lccmalloc
 
 #####################################################
 ###  Specific systems, check if yours is listed!  ### {{{
@@ -724,12 +736,6 @@
 ### USL for Unix Systems Laboratories (SYSV 4.2)
 #EXTRA_DEFS = -DUSL
 
-### RISCos on MIPS without X11
-#EXTRA_DEFS = -DMIPS
-
-### RISCos on MIPS with X11
-#EXTRA_LIBS = -lsun
-
 ### (6)  A/UX 3.1.1 with gcc (Jim Jagielski)
 #CC= gcc -D_POSIX_SOURCE
 #CFLAGS= -O2
@@ -870,6 +876,10 @@
 #CFLAGS = -O -Qtarget=m88110compat
 #EXTRA_LIBS = -lgen
 
+# The value of QUOTESED comes from auto/config.mk.
+# Uncomment the next line to use the default value.
+# QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
+
 ##################### end of system specific lines ################### }}}
 
 ### Names of the programs and targets  {{{1
@@ -1047,8 +1057,9 @@
 INSTALL_DATA	= cp
 INSTALL_DATA_R	= cp -r
 
-### Program to run on installed binary
+### Program to run on installed binary.  Use the second one to disable strip.
 #STRIP = strip
+#STRIP = /bin/true
 
 ### Permissions for binaries  {{{1
 BINMOD = 755
@@ -1284,7 +1295,7 @@
 ### prototype headers are ignored due to -DPROTO, system
 ### headers #include <...> are ignored if we use the -MM option, as
 ### e.g. provided by gcc-cpp.
-### Include FEAT_GUI to get gependency on gui.h
+### Include FEAT_GUI to get dependency on gui.h
 ### Need to change "-I /<path>" to "-isystem /<path>" for GCC 3.x.
 CPP_DEPEND = $(CC) -I$(srcdir) -M$(CPP_MM) \
 		`echo "$(DEPEND_CFLAGS)" $(DEPEND_CFLAGS_FILTER)`
@@ -1321,20 +1332,22 @@
 .SUFFIXES: .c .o .pro
 
 PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
-POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(RUBY_CFLAGS) $(EXTRA_DEFS)
+POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS)
 
-ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
+ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(LEAK_CFLAGS) $(POST_DEFS)
 
 # Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together
 # with "-E".
 OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
 
-LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
+LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
 
 LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
 
 DEPEND_CFLAGS = -DPROTO -DDEPEND -DFEAT_GUI $(LINT_CFLAGS)
 
+# Note: MZSCHEME_LIBS must come before LIBS, because LIBS adds -lm which is
+# needed by racket.
 ALL_LIB_DIRS = $(GUI_LIBS_DIR) $(X_LIBS_DIR)
 ALL_LIBS = \
 	   $(GUI_LIBS1) \
@@ -1343,16 +1356,17 @@
 	   $(X_PRE_LIBS) \
 	   $(X_LIBS) \
 	   $(X_EXTRA_LIBS) \
+	   $(MZSCHEME_LIBS) \
 	   $(LIBS) \
 	   $(EXTRA_LIBS) \
 	   $(LUA_LIBS) \
-	   $(MZSCHEME_LIBS) \
 	   $(PERL_LIBS) \
 	   $(PYTHON_LIBS) \
 	   $(PYTHON3_LIBS) \
 	   $(TCL_LIBS) \
 	   $(RUBY_LIBS) \
-	   $(PROFILE_LIBS)
+	   $(PROFILE_LIBS) \
+	   $(LEAK_LIBS)
 
 # abbreviations
 DEST_BIN = $(DESTDIR)$(BINDIR)
@@ -1474,8 +1488,15 @@
 	    if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \
 	    gui_beval.c workshop.c wsdebug.c integration.c netbeans.c
 
+# Unittest files
+MEMFILE_TEST_SRC = memfile_test.c
+MEMFILE_TEST_TARGET = memfile_test$(EXEEXT)
+
+UNITTEST_SRC = $(MEMFILE_TEST_SRC)
+UNITTEST_TARGETS = $(MEMFILE_TEST_TARGET)
+
 # All sources, also the ones that are not configured
-ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(EXTRA_SRC)
+ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
 
 # Which files to check with lint.  Select one of these three lines.  ALL_SRC
 # checks more, but may not work well for checking a GUI that wasn't configured.
@@ -1486,7 +1507,7 @@
 #LINT_SRC = $(ALL_SRC)
 #LINT_SRC = $(BASIC_SRC)
 
-OBJ = \
+OBJ_COMMON = \
 	objects/buffer.o \
 	objects/blowfish.o \
 	objects/charset.o \
@@ -1507,10 +1528,8 @@
 	$(HANGULIN_OBJ) \
 	objects/if_cscope.o \
 	objects/if_xcmdsrv.o \
-	objects/main.o \
 	objects/mark.o \
-	objects/memfile.o \
-	objects/memline.o \
+        objects/memline.o \
 	objects/menu.o \
 	objects/message.o \
 	objects/misc1.o \
@@ -1535,6 +1554,7 @@
 	objects/term.o \
 	objects/ui.o \
 	objects/undo.o \
+	objects/version.o \
 	objects/window.o \
 	$(GUI_OBJ) \
 	$(LUA_OBJ) \
@@ -1549,6 +1569,13 @@
 	$(NETBEANS_OBJ) \
 	$(WSDEBUG_OBJ)
 
+OBJ = $(OBJ_COMMON) \
+	objects/main.o \
+	objects/memfile.o
+
+MEMFILE_TEST_OBJ = $(OBJ_COMMON) \
+        objects/memfile_test.o
+
 PRO_AUTO = \
 	blowfish.pro \
 	buffer.pro \
@@ -1612,7 +1639,7 @@
 RSRC_DIR = os_mac_rsrc
 
 PRO_MANUAL = os_amiga.pro os_msdos.pro os_win16.pro os_win32.pro \
-	os_mswin.pro os_beos.pro os_vms.pro os_riscos.pro $(PERL_PRO)
+	os_mswin.pro winclip.pro os_beos.pro os_vms.pro $(PERL_PRO)
 
 # Default target is making the executable and tools
 all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
@@ -1629,11 +1656,17 @@
 # sure configure is run when it's needed.
 #
 config auto/config.mk: auto/configure config.mk.in config.h.in
+	if test -f auto/config.cache && \
+	    grep '^ac_cv_env_CFLAGS_value=' auto/config.cache > /dev/null && \
+	    ! grep -x -F 'ac_cv_env_CFLAGS_value=$(CFLAGS)' auto/config.cache > /dev/null; then \
+		rm auto/config.cache; \
+	fi
 	GUI_INC_LOC="$(GUI_INC_LOC)" GUI_LIB_LOC="$(GUI_LIB_LOC)" \
 		CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
 		LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
 		./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
-		$(CONF_OPT_DARWIN) $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
+		$(CONF_OPT_DARWIN) $(CONF_OPT_FAIL) \
+		$(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
 		$(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
 		$(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
 		$(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
@@ -1690,15 +1723,16 @@
 
 
 # Link the target for normal use or debugging.
-# A shell script is used to try linking without unneccesary libraries.
+# A shell script is used to try linking without unnecessary libraries.
 $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
 	$(CCC) version.c -o objects/version.o
 	@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
-		-o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \
-		MAKE="$(MAKE)" sh $(srcdir)/link.sh
+		-o $(VIMTARGET) $(OBJ) $(ALL_LIBS)" \
+		MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
+		sh $(srcdir)/link.sh
 
 xxd/xxd$(EXEEXT): xxd/xxd.c
-	cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
+	cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
 		$(MAKE) -f Makefile
 
 # Build the language specific files if they were unpacked.
@@ -1727,10 +1761,11 @@
 # Filter out arguments that cproto doesn't support.
 # Don't pass "-pthread" to cproto, it sees it as a list of individual flags.
 # Don't pass "-fstack-protector" to cproto, for the same reason.
+# Don't pass "-g" to cproto.
 # The -E"gcc -E" argument must be separate to avoid problems with shell
 # quoting.
 CPROTO = cproto $(PROTO_FLAGS) -DPROTO \
-	 `echo '$(LINT_CFLAGS)' | sed -e 's/-pthread//g' -e 's/-fstack-protector//g'`
+	 `echo '$(LINT_CFLAGS)' | sed -e 's/-pthread//g' -e 's/-fstack-protector//g' -e 's/\ -g\ / /g'`
 
 ### Would be nice if this would work for "normal" make.
 ### Currently it only works for (Free)BSD make.
@@ -1763,6 +1798,10 @@
 	$(CPROTO) -DWIN16 -DWIN32 -UHAVE_CONFIG_H $< > proto/$@
 	echo "/* vim: set ft=c : */" >> proto/$@
 
+winclip.pro: winclip.c
+	$(CPROTO) -DWIN16 -DWIN32 -UHAVE_CONFIG_H $< > proto/$@
+	echo "/* vim: set ft=c : */" >> proto/$@
+
 os_beos.pro: os_beos.c
 	$(CPROTO) -D__BEOS__ -UHAVE_CONFIG_H $< > proto/$@
 	echo "/* vim: set ft=c : */" >> proto/$@
@@ -1804,8 +1843,8 @@
 #
 # This will produce a lot of garbage on your screen, including a few error
 # messages.  Don't worry about that.
-# If there is a real error, there will be a difference between "test.out" and
-# a "test99.ok" file.
+# If there is a real error, there will be a difference between "testXX.out" and
+# a "testXX.ok" file.
 # If everything is alright, the final message will be "ALL DONE".  If not you
 # get "TEST FAILURE".
 #
@@ -1818,6 +1857,28 @@
 		ln -s $(VIMTARGET) vim; \
 	fi
 	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG)
+	$(MAKE) -f Makefile unittest
+
+unittesttargets:
+	$(MAKE) -f Makefile $(UNITTEST_TARGETS)
+
+unittest unittests: $(UNITTEST_TARGETS)
+	@for t in $(UNITTEST_TARGETS); do \
+		./$$t || exit 1; echo $$t passed; \
+	done
+
+# Run individual test, assuming that Vim was already compiled.
+test1 test2 test3 test4 test5 test6 test7 test8 test9 \
+	test10 test11 test12 test13 test14 test15 test16 test17 test18 test19 \
+	test20 test21 test22 test23 test24 test25 test26 test27 test28 test29 \
+	test30 test31 test32 test33 test34 test35 test36 test37 test38 test39 \
+	test40 test41 test42 test43 test44 test45 test46 test47 test48 test49 \
+	test50 test51 test52 test53 test54 test55 test56 test57 test58 test59 \
+	test60 test61 test62 test63 test64 test65 test66 test67 test68 test69 \
+	test70 test71 test72 test73 test74 test75 test76 test77 test78 test79 \
+	test80 test81 test82 test83 test84 test85 test86 test87 test88 test89 \
+	test90 test91 test92 test93 test94 test95 test96 test97 test98 test99:
+	cd testdir; rm $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTARGET)
 
 testclean:
 	cd testdir; $(MAKE) -f Makefile clean
@@ -1825,6 +1886,17 @@
 		cd $(PODIR); $(MAKE) checkclean; \
 	fi
 
+# Unittests
+# It's build just like Vim to satisfy all dependencies.
+$(MEMFILE_TEST_TARGET): auto/config.mk objects $(MEMFILE_TEST_OBJ)
+	$(CCC) version.c -o objects/version.o
+	@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
+		-o $(MEMFILE_TEST_TARGET) $(MEMFILE_TEST_OBJ) $(ALL_LIBS)" \
+		MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
+		sh $(srcdir)/link.sh
+
+# install targets
+
 install: $(GUI_INSTALL)
 
 install_normal: installvim installtools $(INSTALL_LANGS) install-icons
@@ -2245,7 +2317,7 @@
 	-rm -rf $(DEST_COMP)
 	-rm -f $(DEST_PRINT)/*.ps
 	-rmdir $(DEST_HELP) $(DEST_PRINT) $(DEST_COL) $(DEST_SYN) $(DEST_IND)
-	-rm -rf $(DEST_FTP)/*.vim $(DEST_FTP)/README.txt
+	-rm -rf $(DEST_FTP)/*.vim $(DEST_FTP)/README.txt $(DEST_FTP)/logtalk.dict
 	-rm -f $(DEST_AUTO)/*.vim $(DEST_AUTO)/README.txt $(DEST_AUTO)/xml/*.vim
 	-rm -f $(DEST_PLUG)/*.vim $(DEST_PLUG)/README.txt
 	-rmdir $(DEST_FTP) $(DEST_AUTO)/xml $(DEST_AUTO) $(DEST_PLUG) $(DEST_RT)
@@ -2258,6 +2330,7 @@
 	-rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o
 	-rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c
 	-rm -f conftest* *~ auto/link.sed
+	-rm -f $(UNITTEST_TARGETS)
 	-rm -f runtime pixmaps
 	-rm -rf $(APPDIR)
 	-rm -rf mzscheme_base.c
@@ -2291,6 +2364,7 @@
 				 ../../testdir/vimrc.unix \
 				 ../../testdir/*.in \
 				 ../../testdir/*.vim \
+				 ../../testdir/test83-tags? \
 				 ../../testdir/*.ok .
 
 # Link needed for doing "make install" in a shadow directory.
@@ -2367,7 +2441,6 @@
 auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
 	CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
 
-QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
 auto/pathdef.c: Makefile auto/config.mk
 	-@echo creating $@
 	-@echo '/* pathdef.c */' > $@
@@ -2512,19 +2585,11 @@
 objects/if_perlsfio.o: if_perlsfio.c
 	$(CCC) $(PERL_CFLAGS) -o $@ if_perlsfio.c
 
-objects/py_config.o: $(PYTHON_CONFDIR)/config.c
-	$(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/config.c \
-		-I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
-
 objects/py_getpath.o: $(PYTHON_CONFDIR)/getpath.c
 	$(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/getpath.c \
 		-I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN \
 		$(PYTHON_GETPATH_CFLAGS)
 
-objects/py3_config.o: $(PYTHON3_CONFDIR)/config.c
-	$(CCC) $(PYTHON3_CFLAGS) -o $@ $(PYTHON3_CONFDIR)/config.c \
-		-I$(PYTHON3_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
-
 objects/if_python.o: if_python.c if_py_both.h
 	$(CCC) $(PYTHON_CFLAGS) $(PYTHON_CFLAGS_EXTRA) -o $@ if_python.c
 
@@ -2532,7 +2597,7 @@
 	$(CCC) $(PYTHON3_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) -o $@ if_python3.c
 
 objects/if_ruby.o: if_ruby.c
-	$(CCC) -o $@ if_ruby.c
+	$(CCC) $(RUBY_CFLAGS) -o $@ if_ruby.c
 
 objects/if_sniff.o: if_sniff.c
 	$(CCC) -o $@ if_sniff.c
@@ -2552,6 +2617,9 @@
 objects/memfile.o: memfile.c
 	$(CCC) -o $@ memfile.c
 
+objects/memfile_test.o: memfile_test.c
+	$(CCC) -o $@ memfile_test.c
+
 objects/memline.o: memline.c
 	$(CCC) -o $@ memline.c
 
@@ -2597,6 +2665,12 @@
 objects/os_unix.o: os_unix.c
 	$(CCC) -o $@ os_unix.c
 
+objects/os_mswin.o: os_mswin.c
+	$(CCC) -o $@ os_mswin.c
+
+objects/winclip.o: winclip.c
+	$(CCC) -o $@ winclip.c
+
 objects/pathdef.o: auto/pathdef.c
 	$(CCC) -o $@ auto/pathdef.c
 
@@ -2609,7 +2683,7 @@
 objects/quickfix.o: quickfix.c
 	$(CCC) -o $@ quickfix.c
 
-objects/regexp.o: regexp.c
+objects/regexp.o: regexp.c regexp_nfa.c
 	$(CCC) -o $@ regexp.c
 
 objects/screen.o: screen.c
@@ -2724,9 +2798,9 @@
 	mv gui_mac.rsrc.rsrcfork $(RESDIR)/$(VIMNAME).rsrc
 
 # po/Make_osx.pl says something about generating a Mac message file
-# for Ukrananian.  Would somebody using Mac OS X in Ukranian
+# for Ukrainian.  Would somebody using Mac OS X in Ukrainian
 # *really* be upset that Carbon Vim was not localised in
-# Ukranian?
+# Ukrainian?
 #
 #bundle-language: bundle-dir po/Make_osx.pl
 #	cd po && perl Make_osx.pl --outdir ../$(RESDIR) $(MULTILANG)
@@ -2886,7 +2960,7 @@
 objects/regexp.o: regexp.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
- arabic.h
+ arabic.h regexp_nfa.c
 objects/screen.o: screen.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
@@ -3009,6 +3083,10 @@
 objects/pty.o: pty.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
  keymap.h term.h macros.h option.h structs.h regexp.h gui.h gui_beval.h \
  proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h arabic.h
+objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \
+ structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h \
+ proto.h globals.h farsi.h arabic.h farsi.c arabic.c memfile.c
 objects/hangulin.o: hangulin.c vim.h auto/config.h feature.h os_unix.h \
  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
@@ -3041,7 +3119,7 @@
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
  arabic.h
-objects/if_ruby.o: if_ruby.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+objects/if_ruby.o: if_ruby.c auto/config.h vim.h feature.h os_unix.h auto/osdef.h \
  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
  arabic.h version.h
diff -Naur vim73.orig/src/VisVim/Commands.cpp vim73/src/VisVim/Commands.cpp
--- vim73.orig/src/VisVim/Commands.cpp	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/VisVim/Commands.cpp	2013-08-04 19:09:10.083945443 +0000
@@ -549,7 +549,7 @@
 	if (g_bNewTabs)
 	{
 		sprintf(VimCmd, ":tab drop ");
-		s = VimCmd + 11;
+		s = VimCmd + 10;
 	}
 	else
 	{
@@ -557,8 +557,7 @@
 		s = VimCmd + 6;
 	}
 	sprintf(FileNameTmp, "%S", (char *)FileName);
-	for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
-									  ++p)
+	for (p = FileNameTmp; *p != '\0' && s < VimCmd + MAX_OLE_STR - 4; ++p)
 		if (*p == '\\')
 			*s++ = '/';
 		else
diff -Naur vim73.orig/src/VisVim/OleAut.cpp vim73/src/VisVim/OleAut.cpp
--- vim73.orig/src/VisVim/OleAut.cpp	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/VisVim/OleAut.cpp	2013-08-04 19:09:10.087278766 +0000
@@ -654,7 +654,7 @@
 	}
 
 	char Buf[256];
-	sprintf (Buf, "An OLE error occured:\r\nCode = %s\r\nResult = %lx.",
+	sprintf (Buf, "An OLE error occurred:\r\nCode = %s\r\nResult = %lx.",
 		 (char*) ErrName, m_hResult);
 	MessageBox (NULL, Buf, "OLE Error", MB_OK);
 }
diff -Naur vim73.orig/src/VisVim/README_VisVim.txt vim73/src/VisVim/README_VisVim.txt
--- vim73.orig/src/VisVim/README_VisVim.txt	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/VisVim/README_VisVim.txt	2013-08-04 19:09:10.090612089 +0000
@@ -17,12 +17,16 @@
 VisVim is based upon VisEmacs by Christopher Payne
 (Copyright (C) Christopher Payne 1997).
 
-Author: Heiko Erhardt <Heiko.Erhardt@munich.netsurf.de>
+Author: Heiko Erhardt <heiko.erhardt@gmx.net>
 Based upon: VisEmacs by Christopher Payne <payneca@sagian.com>
 Version: 1.0
 Created: 23 Oct 1997
 Date: 23 Oct 1997
 
+VisVim was originally GNU GPL licensed, as stated below.  On March 21 2012
+Heiko Erhardt declared this work to be relicensed under the Vim license, as
+stated in ../../runtime/doc/uganda.txt (or ":help uganda" in Vim).
+
 VisVim is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2, or (at your option)
@@ -216,7 +220,7 @@
 		 2. Close Visual Studio.
 		 3. Delete VisVim.dll or move it somewhere it can't be found.
 		 4. Run Visual Studio.
-		 5. Tools -> Cursomize ->Add-ins and Macro-Files.
+		 5. Tools -> Customize ->Add-ins and Macro-Files.
 		 6. A message appears:
 		    ".../VisVim.dll" "This add-in no longer exists.  It will
 		    no longer be displayed."
@@ -278,7 +282,7 @@
   occasionally still seems to happen, but it's more stable now).
   (Vince Negri)
 - Added support for the new CTRL-\ CTRL-N command of Vim 5.4a.
-  This prevents Vim from beeping when a VisVim command is executed an Vim is
+  This prevents Vim from beeping when a VisVim command is executed and Vim is
   not in insert mode.
 
 
@@ -294,7 +298,7 @@
 P8  Execute :tag command in Vim for word under cursor in DevStudio
 
 P7  Controlling the Visual Studio Debugger from inside Vim
-    See message above. Also a 'Debug' highligh group and a
+    See message above. Also a 'Debug' highlight group and a
     command to highlight a certain line would be necessary.
 
 P6  Provide an option to open the current file in VisVim in
@@ -318,5 +322,5 @@
 Have fun!
 
 Heiko Erhardt
-Heiko.Erhardt@munich.netsurf.de
+heiko.erhardt@gmx.net
 
diff -Naur vim73.orig/src/arabic.c vim73/src/arabic.c
--- vim73.orig/src/arabic.c	2010-05-15 11:04:09.000000000 +0000
+++ vim73/src/arabic.c	2013-08-04 19:09:10.107278706 +0000
@@ -1066,7 +1066,7 @@
 
     if (curr_c != c && ccp != NULL)
     {
-	char_u buf[MB_MAXBYTES];
+	char_u buf[MB_MAXBYTES + 1];
 
 	/* Update the first byte of the character. */
 	(*mb_char2bytes)(curr_c, buf);
diff -Naur vim73.orig/src/ascii.h vim73/src/ascii.h
--- vim73.orig/src/ascii.h	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/ascii.h	2013-08-04 19:09:10.110612029 +0000
@@ -123,7 +123,7 @@
 #define DCS		0x90	/* Device Control String */
 #define STERM		0x9c	/* String Terminator */
 
-#define POUND		''
+#define POUND		0xB1
 
 #define CTRL_F_STR	"\056"
 #define CTRL_H_STR	"\026"
@@ -183,11 +183,6 @@
 # define PATHSEP	psepc
 # define PATHSEPSTR	pseps
 #else
-# ifdef RISCOS
-#  define PATHSEP	'.'
-#  define PATHSEPSTR	"."
-# else
-#  define PATHSEP	'/'
-#  define PATHSEPSTR	"/"
-# endif
+# define PATHSEP	'/'
+# define PATHSEPSTR	"/"
 #endif
diff -Naur vim73.orig/src/auto/config.mk vim73/src/auto/config.mk
--- vim73.orig/src/auto/config.mk	2010-08-15 13:02:25.000000000 +0000
+++ vim73/src/auto/config.mk	1970-01-01 00:00:00.000000000 +0000
@@ -1,5 +0,0 @@
-the first targets to make vim are: scratch config myself
-srcdir = .
-VIMNAME = vim
-EXNAME = ex
-VIEWNAME = view
diff -Naur vim73.orig/src/auto/configure vim73/src/auto/configure
--- vim73.orig/src/auto/configure	2010-08-13 14:17:15.000000000 +0000
+++ vim73/src/auto/configure	2013-08-04 19:09:10.130611969 +0000
@@ -593,6 +593,7 @@
 
 ac_subst_vars='LTLIBOBJS
 LIBOBJS
+LINK_AS_NEEDED
 DEPEND_CFLAGS_FILTER
 MAKEMO
 MSGFMT
@@ -740,6 +741,7 @@
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_fail_if_missing
 enable_darwin
 with_mac_arch
 with_developer_dir
@@ -1417,6 +1419,8 @@
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-fail-if-missing    Fail if dependencies on additional features
+     specified on the command line are missing.
   --disable-darwin        Disable Darwin (Mac OS X) support.
   --disable-selinux	  Don't check for SELinux support.
   --disable-xsmp          Disable XSMP session management
@@ -1427,7 +1431,7 @@
   --enable-pythoninterp=OPTS   Include Python interpreter. default=no OPTS=no/yes/dynamic
   --enable-python3interp=OPTS   Include Python3 interpreter. default=no OPTS=no/yes/dynamic
   --enable-tclinterp      Include Tcl interpreter.
-  --enable-rubyinterp     Include Ruby interpreter.
+  --enable-rubyinterp=OPTS     Include Ruby interpreter.  default=no OPTS=no/yes/dynamic
   --enable-cscope         Include cscope interface.
   --enable-workshop       Include Sun Visual Workshop support.
   --disable-netbeans      Disable NetBeans integration support.
@@ -3948,6 +3952,19 @@
 fi
 
 
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing argument" >&5
+$as_echo_n "checking --enable-fail-if-missing argument... " >&6; }
+# Check whether --enable-fail_if_missing was given.
+if test "${enable_fail_if_missing+set}" = set; then :
+  enableval=$enable_fail_if_missing; fail_if_missing="yes"
+else
+  fail_if_missing="no"
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $fail_if_missing" >&5
+$as_echo "$fail_if_missing" >&6; }
+
 if test -z "$CFLAGS"; then
   CFLAGS="-O"
   test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
@@ -4409,15 +4426,18 @@
 		  echo ""
 		  echo "------------------------------------------"
 		  echo " On z/OS Unix, the environment variable"
-		  echo " __CC_${ccn}MODE must be set to \"1\"!"
+		  echo " _CC_${ccn}MODE must be set to \"1\"!"
 		  echo " Do:"
 		  echo "    export _CC_${ccn}MODE=1"
 		  echo " and then call configure again."
 		  echo "------------------------------------------"
 		  exit 1
 		fi
-		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
-                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+		# Set CFLAGS for configure process.
+		# This will be reset later for config.mk.
+		# Use haltonmsg to force error for missing H files.
+		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
+		LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
 		;;
@@ -4628,15 +4648,7 @@
 
   LUA_INC=
   if test "X$vi_cv_path_lua_pfx" != "X"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
-$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
-    if test -f $vi_cv_path_lua_pfx/include/lua.h; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-    else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-            # Extract the first word of "lua", so it can be a program name with args.
+        # Extract the first word of "lua", so it can be a program name with args.
 set dummy lua; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
@@ -4676,8 +4688,8 @@
 fi
 
 
-      if test "X$vi_cv_path_lua" != "X"; then
-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
+    if test "X$vi_cv_path_lua" != "X"; then
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
 $as_echo_n "checking Lua version... " >&6; }
 if test "${vi_cv_version_lua+set}" = set; then :
   $as_echo_n "(cached) " >&6
@@ -4686,23 +4698,31 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_lua" >&5
 $as_echo "$vi_cv_version_lua" >&6; }
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
+$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
+    if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
 $as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua... " >&6; }
-        if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+      if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-          LUA_INC=/lua$vi_cv_version_lua
-        else
-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+        LUA_INC=/lua$vi_cv_version_lua
+      else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-          vi_cv_path_lua_pfx=
-        fi
+        vi_cv_path_lua_pfx=
       fi
     fi
   fi
 
   if test "X$vi_cv_path_lua_pfx" != "X"; then
-    if test "X$vi_cv_version_lua" != "X"; then
+    if test "X$LUA_INC" != "X"; then
             LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
     else
       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
@@ -4714,18 +4734,37 @@
     $as_echo "#define FEAT_LUA 1" >>confdefs.h
 
     if test "$enable_luainterp" = "dynamic"; then
-                  for i in 0 1 2 3 4 5 6 7 8 9; do
-	if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
-	  LUA_SONAME=".$i"
-	  break
+      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
+	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
+      else
+	multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
+	if test "X$multiarch" != "X"; then
+	  lib_multiarch="lib/${multiarch}"
 	fi
-      done
+			for subdir in "${lib_multiarch}" lib64 lib; do
+	  if test -z "$subdir"; then
+	    continue
+	  fi
+	  for sover in "${vi_cv_version_lua}.so" "-${vi_cv_version_lua}.so" ".so.${vi_cv_version_lua}"; do
+	    for i in .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 ""; do
+	      if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${sover}$i"; then
+		sover2="$i"
+		break 3
+	      fi
+	    done
+	  done
+	done
+	vi_cv_dll_name_lua="liblua${sover}$sover2"
+      fi
       $as_echo "#define DYNAMIC_LUA 1" >>confdefs.h
 
       LUA_LIBS=""
-      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
+    as_fn_error "could not configure lua" "$LINENO" 5
+  fi
 
 
 
@@ -4862,16 +4901,36 @@
       else
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
-$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
-	if test -f /usr/include/plt/scheme.h; then
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket" >&5
+$as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket... " >&6; }
+	if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
 	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-	  SCHEME_INC=/usr/include/plt
+	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
 	else
 	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-	  vi_cv_path_mzscheme_pfx=
+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
+$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
+	  if test -f /usr/include/plt/scheme.h; then
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	    SCHEME_INC=/usr/include/plt
+	  else
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/racket/" >&5
+$as_echo_n "checking if scheme.h can be found in /usr/include/racket/... " >&6; }
+	    if test -f /usr/include/racket/scheme.h; then
+	      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+	      SCHEME_INC=/usr/include/racket
+	    else
+	      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+	      vi_cv_path_mzscheme_pfx=
+	    fi
+	  fi
 	fi
       fi
     fi
@@ -4879,16 +4938,27 @@
 
   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
     if test "x$MACOSX" = "xyes"; then
-      MZSCHEME_LIBS="-framework PLT_MzScheme"
+      MZSCHEME_LIBS="-framework Racket"
+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
     else
             if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
 	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
+	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
       else
         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
       fi
@@ -4899,16 +4969,53 @@
 	MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib"
       fi
     fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for racket collects directory" >&5
+$as_echo_n "checking for racket collects directory... " >&6; }
     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
-      SCHEME_COLLECTS=lib/plt/
+      SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
+    else
+      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
+	SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
+      else
+	if test -d $vi_cv_path_mzscheme_pfx/share/racket/collects; then
+	  SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
+	else
+	  if test -d $vi_cv_path_mzscheme_pfx/collects; then
+	    SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
+	  fi
+	fi
+      fi
     fi
-    if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
-            MZSCHEME_EXTRA="mzscheme_base.c"
-      MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
+    if test "X$SCHEME_COLLECTS" != "X" ; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${SCHEME_COLLECTS}" >&5
+$as_echo "${SCHEME_COLLECTS}" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+$as_echo "not found" >&6; }
+    fi
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mzscheme_base.c" >&5
+$as_echo_n "checking for mzscheme_base.c... " >&6; }
+    if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+      MZSCHEME_EXTRA="mzscheme_base.c"
+    else
+      if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
+	MZSCHEME_EXTRA="mzscheme_base.c"
+      fi
+    fi
+    if test "X$MZSCHEME_EXTRA" != "X" ; then
+            MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: needed" >&5
+$as_echo "needed" >&6; }
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: not needed" >&5
+$as_echo "not needed" >&6; }
     fi
+
     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
-      -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'"
+      -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
     MZSCHEME_SRC="if_mzsch.c"
     MZSCHEME_OBJ="objects/if_mzsch.o"
     MZSCHEME_PRO="if_mzsch.pro"
@@ -5026,6 +5133,7 @@
       ldflags_save=$LDFLAGS
       CFLAGS="$CFLAGS $perlcppflags"
       LIBS="$LIBS $perllibs"
+      perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
       LDFLAGS="$perlldflags $LDFLAGS"
       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -5055,7 +5163,9 @@
 	  	  PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[^ ]*//'`
 	fi
 	if test "X$perlldflags" != "X"; then
-	  LDFLAGS="$perlldflags $LDFLAGS"
+	  if test "X`echo \"$LDFLAGS\" | grep -F -e \"$perlldflags\"`" = "X"; then
+	    LDFLAGS="$perlldflags $LDFLAGS"
+	  fi
 	fi
 	PERL_LIBS=$perllibs
 	PERL_SRC="auto/if_perl.c if_perlsfio.c"
@@ -5099,6 +5209,10 @@
       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
+    as_fn_error "could not configure perl" "$LINENO" 5
+  fi
 fi
 
 
@@ -5119,8 +5233,10 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_pythoninterp" >&5
 $as_echo "$enable_pythoninterp" >&6; }
 if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
-    # Extract the first word of "python", so it can be a program name with args.
-set dummy python; ac_word=$2
+    for ac_prog in python2 python
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_path_vi_cv_path_python+set}" = set; then :
@@ -5159,6 +5275,9 @@
 fi
 
 
+  test -n "$vi_cv_path_python" && break
+done
+
   if test "X$vi_cv_path_python" != "X"; then
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
@@ -5173,10 +5292,10 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python_version" >&5
 $as_echo "$vi_cv_var_python_version" >&6; }
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 1.4 or better" >&5
-$as_echo_n "checking Python is 1.4 or better... " >&6; }
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 2.3 or better" >&5
+$as_echo_n "checking Python is 2.3 or better... " >&6; }
     if ${vi_cv_path_python} -c \
-	"import sys; sys.exit(${vi_cv_var_python_version} < 1.4)"
+	"import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
     then
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yep" >&5
 $as_echo "yep" >&6; }
@@ -5231,14 +5350,19 @@
 else
 
 	vi_cv_path_python_conf=
-	for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
-	  for subdir in lib64 lib share; do
-	    d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
-	    if test -d "$d" && test -f "$d/config.c"; then
-	      vi_cv_path_python_conf="$d"
-	    fi
+	d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
+	if test -d "$d" && test -f "$d/config.c"; then
+	  vi_cv_path_python_conf="$d"
+	else
+	  for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
+	    for subdir in lib64 lib share; do
+	      d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
+	      if test -d "$d" && test -f "$d/config.c"; then
+		vi_cv_path_python_conf="$d"
+	      fi
+	    done
 	  done
-	done
+	fi
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python_conf" >&5
@@ -5263,6 +5387,7 @@
 	@echo "python_LIBS='$(LIBS)'"
 	@echo "python_SYSLIBS='$(SYSLIBS)'"
 	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
+	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
 	@echo "python_INSTSONAME='$(INSTSONAME)'"
 eof
 	    	    eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
@@ -5283,22 +5408,21 @@
 fi
 
 
+	if test "X$python_DLLLIBRARY" != "X"; then
+	  python_INSTSONAME="$python_DLLLIBRARY"
+	fi
 	PYTHON_LIBS="${vi_cv_path_python_plibs}"
 	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
+	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
 	else
-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
+	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
 	fi
 	PYTHON_SRC="if_python.c"
-		if test "x$MACOSX" = "xyes"; then
-	  PYTHON_OBJ="objects/if_python.o"
-	else
-	  PYTHON_OBJ="objects/if_python.o objects/py_config.o"
-	fi
+	PYTHON_OBJ="objects/if_python.o"
 	if test "${vi_cv_var_python_version}" = "1.4"; then
 	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
 	fi
-	PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
+    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
 
 								{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
 $as_echo_n "checking if -pthread should be used... " >&6; }
@@ -5310,6 +5434,9 @@
 	    threadsafe_flag="-D_THREAD_SAFE"
 	    thread_lib="-pthread"
 	  fi
+	  if test "`(uname) 2>/dev/null`" = SunOS; then
+	    threadsafe_flag="-pthreads"
+	  fi
 	fi
 	libs_save_old=$LIBS
 	if test -n "$threadsafe_flag"; then
@@ -5381,13 +5508,16 @@
 	  PYTHON_LIBS=
 	  PYTHON_CFLAGS=
 	fi
-
       fi
     else
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: too old" >&5
 $as_echo "too old" >&6; }
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
+    as_fn_error "could not configure python" "$LINENO" 5
+  fi
 fi
 
 
@@ -5410,8 +5540,10 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_python3interp" >&5
 $as_echo "$enable_python3interp" >&6; }
 if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
-    # Extract the first word of "python3", so it can be a program name with args.
-set dummy python3; ac_word=$2
+    for ac_prog in python3 python
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if test "${ac_cv_path_vi_cv_path_python3+set}" = set; then :
@@ -5450,6 +5582,9 @@
 fi
 
 
+  test -n "$vi_cv_path_python3" && break
+done
+
   if test "X$vi_cv_path_python3" != "X"; then
 
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
@@ -5464,38 +5599,63 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_version" >&5
 $as_echo "$vi_cv_var_python3_version" >&6; }
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 3.0 or better" >&5
+$as_echo_n "checking Python is 3.0 or better... " >&6; }
+    if ${vi_cv_path_python3} -c \
+      "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
+    then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yep" >&5
+$as_echo "yep" >&6; }
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's abiflags" >&5
+$as_echo_n "checking Python's abiflags... " >&6; }
+if test "${vi_cv_var_python3_abiflags+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+
+       vi_cv_var_python3_abiflags=
+       if ${vi_cv_path_python3} -c \
+           "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
+       then
+         vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
+           "import sys; print(sys.abiflags)"`
+       fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_abiflags" >&5
+$as_echo "$vi_cv_var_python3_abiflags" >&6; }
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
 $as_echo_n "checking Python's install prefix... " >&6; }
 if test "${vi_cv_path_python3_pfx+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
    vi_cv_path_python3_pfx=`
-     ${vi_cv_path_python3} -c \
-     "import sys; print(sys.prefix)"`
+       ${vi_cv_path_python3} -c \
+       "import sys; print(sys.prefix)"`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_pfx" >&5
 $as_echo "$vi_cv_path_python3_pfx" >&6; }
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's execution prefix" >&5
 $as_echo_n "checking Python's execution prefix... " >&6; }
 if test "${vi_cv_path_python3_epfx+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
    vi_cv_path_python3_epfx=`
-     ${vi_cv_path_python3} -c \
-     "import sys; print(sys.exec_prefix)"`
+       ${vi_cv_path_python3} -c \
+       "import sys; print(sys.exec_prefix)"`
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_epfx" >&5
 $as_echo "$vi_cv_path_python3_epfx" >&6; }
 
 
-    if test "${vi_cv_path_python3path+set}" = set; then :
+      if test "${vi_cv_path_python3path+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
    vi_cv_path_python3path=`
-     unset PYTHONPATH;
-     ${vi_cv_path_python3} -c \
-     "import sys, string; print(':'.join(sys.path))"`
+       unset PYTHONPATH;
+       ${vi_cv_path_python3} -c \
+       "import sys, string; print(':'.join(sys.path))"`
 fi
 
 
@@ -5507,87 +5667,98 @@
 fi
 
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's configuration directory" >&5
 $as_echo_n "checking Python's configuration directory... " >&6; }
 if test "${vi_cv_path_python3_conf+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
 
-     vi_cv_path_python3_conf=
-     for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
-       for subdir in lib64 lib share; do
-         d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
-         if test -d "$d" && test -f "$d/config.c"; then
-           vi_cv_path_python3_conf="$d"
-         fi
-       done
-     done
+       vi_cv_path_python3_conf=
+       config_dir="config"
+       if test "${vi_cv_var_python3_abiflags}" != ""; then
+         config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+       fi
+       d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
+       if test -d "$d" && test -f "$d/config.c"; then
+         vi_cv_path_python3_conf="$d"
+       else
+         for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+	   for subdir in lib64 lib share; do
+	     d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
+	     if test -d "$d" && test -f "$d/config.c"; then
+	       vi_cv_path_python3_conf="$d"
+	     fi
+	   done
+         done
+       fi
 
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_conf" >&5
 $as_echo "$vi_cv_path_python3_conf" >&6; }
 
-    PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
+      PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
 
-    if test "X$PYTHON3_CONFDIR" = "X"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't find it!" >&5
+      if test "X$PYTHON3_CONFDIR" = "X"; then
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: can't find it!" >&5
 $as_echo "can't find it!" >&6; }
-    else
+      else
 
-                  if test "${vi_cv_path_python3_plibs+set}" = set; then :
+                        if test "${vi_cv_path_python3_plibs+set}" = set; then :
   $as_echo_n "(cached) " >&6
 else
 
-          pwd=`pwd`
-          tmp_mkf="$pwd/config-PyMake$$"
-          cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
+            pwd=`pwd`
+            tmp_mkf="$pwd/config-PyMake$$"
+            cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
 __:
 	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
 	@echo "python3_LIBS='$(LIBS)'"
 	@echo "python3_SYSLIBS='$(SYSLIBS)'"
-	@echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
+	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
 	@echo "python3_INSTSONAME='$(INSTSONAME)'"
 eof
-                    eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
-          rm -f -- "${tmp_mkf}"
-          vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
-          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
-                    vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
-          vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+                        eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+            rm -f -- "${tmp_mkf}"
+	    vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+            vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+                        vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+            vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
 
 fi
 
 
-      PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
-      if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}"
-      else
-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
-      fi
-      PYTHON3_SRC="if_python3.c"
-            if test "x$MACOSX" = "xyes"; then
+        if test "X$python3_DLLLIBRARY" != "X"; then
+	  python3_INSTSONAME="$python3_DLLLIBRARY"
+        fi
+        PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+        if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+        else
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+        fi
+        PYTHON3_SRC="if_python3.c"
         PYTHON3_OBJ="objects/if_python3.o"
-      else
-        PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
-      fi
 
-                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+                                                                { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
 $as_echo_n "checking if -pthread should be used... " >&6; }
-      threadsafe_flag=
-      thread_lib=
-            if test "`(uname) 2>/dev/null`" != Darwin; then
-        test "$GCC" = yes && threadsafe_flag="-pthread"
-        if test "`(uname) 2>/dev/null`" = FreeBSD; then
-          threadsafe_flag="-D_THREAD_SAFE"
-          thread_lib="-pthread"
+        threadsafe_flag=
+        thread_lib=
+                if test "`(uname) 2>/dev/null`" != Darwin; then
+          test "$GCC" = yes && threadsafe_flag="-pthread"
+          if test "`(uname) 2>/dev/null`" = FreeBSD; then
+            threadsafe_flag="-D_THREAD_SAFE"
+            thread_lib="-pthread"
+          fi
+          if test "`(uname) 2>/dev/null`" = SunOS; then
+            threadsafe_flag="-pthreads"
+          fi
         fi
-      fi
-      libs_save_old=$LIBS
-      if test -n "$threadsafe_flag"; then
-        cflags_save=$CFLAGS
-        CFLAGS="$CFLAGS $threadsafe_flag"
-        LIBS="$LIBS $thread_lib"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        libs_save_old=$LIBS
+        if test -n "$threadsafe_flag"; then
+          cflags_save=$CFLAGS
+          CFLAGS="$CFLAGS $threadsafe_flag"
+          LIBS="$LIBS $thread_lib"
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -5608,19 +5779,19 @@
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-        CFLAGS=$cflags_save
-      else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+          CFLAGS=$cflags_save
+        else
+          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-      fi
+        fi
 
-                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compile and link flags for Python 3 are sane" >&5
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if compile and link flags for Python 3 are sane" >&5
 $as_echo_n "checking if compile and link flags for Python 3 are sane... " >&6; }
-      cflags_save=$CFLAGS
-      libs_save=$LIBS
-      CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
-      LIBS="$LIBS $PYTHON3_LIBS"
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+        cflags_save=$CFLAGS
+        libs_save=$LIBS
+        CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+        LIBS="$LIBS $PYTHON3_LIBS"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -5640,20 +5811,27 @@
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-      CFLAGS=$cflags_save
-      LIBS=$libs_save
-      if test "$python3_ok" = yes; then
-        $as_echo "#define FEAT_PYTHON3 1" >>confdefs.h
+        CFLAGS=$cflags_save
+        LIBS=$libs_save
+        if test "$python3_ok" = yes; then
+          $as_echo "#define FEAT_PYTHON3 1" >>confdefs.h
 
-      else
-        LIBS=$libs_save_old
-        PYTHON3_SRC=
-        PYTHON3_OBJ=
-        PYTHON3_LIBS=
-        PYTHON3_CFLAGS=
+        else
+          LIBS=$libs_save_old
+          PYTHON3_SRC=
+          PYTHON3_OBJ=
+          PYTHON3_LIBS=
+          PYTHON3_CFLAGS=
+        fi
       fi
+    else
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: too old" >&5
+$as_echo "too old" >&6; }
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
+    as_fn_error "could not configure python3" "$LINENO" 5
+  fi
 fi
 
 
@@ -5667,12 +5845,12 @@
 
   $as_echo "#define DYNAMIC_PYTHON3 1" >>confdefs.h
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL" >&5
-$as_echo_n "checking whether we can do without RTLD_GLOBAL... " >&6; }
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python" >&5
+$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python... " >&6; }
   cflags_save=$CFLAGS
-  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
   ldflags_save=$LDFLAGS
-  LDFLAGS="$LDFLAGS -ldl"
+    LDFLAGS="-ldl $LDFLAGS"
   if test "$cross_compiling" = yes; then :
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -5686,18 +5864,20 @@
     /* If this program fails, then RTLD_GLOBAL is needed.
      * RTLD_GLOBAL will be used and then it is not possible to
      * have both python versions enabled in the same vim instance.
-     * Only the first pyhton version used will be switched on.
+     * Only the first python version used will be switched on.
      */
 
-    int no_rtl_global_needed_for(char *python_instsoname)
+    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
     {
       int needed = 0;
       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
       if (pylib != 0)
       {
+          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
           void (*init)(void) = dlsym(pylib, "Py_Initialize");
           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
           void (*final)(void) = dlsym(pylib, "Py_Finalize");
+          (*pfx)(prefix);
           (*init)();
           needed = (*simple)("import termios") == -1;
           (*final)();
@@ -5709,7 +5889,7 @@
     int main(int argc, char** argv)
     {
       int not_needed = 0;
-      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
+      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
             not_needed = 1;
       return !not_needed;
     }
@@ -5726,8 +5906,76 @@
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
+
+  CFLAGS=$cflags_save
+  LDFLAGS=$ldflags_save
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python3" >&5
+$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python3... " >&6; }
+  cflags_save=$CFLAGS
+  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+  ldflags_save=$LDFLAGS
+    LDFLAGS="-ldl $LDFLAGS"
+  if test "$cross_compiling" = yes; then :
+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error "cannot run test program while cross compiling
+See \`config.log' for more details." "$LINENO" 5; }
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+    #include <dlfcn.h>
+    #include <wchar.h>
+    /* If this program fails, then RTLD_GLOBAL is needed.
+     * RTLD_GLOBAL will be used and then it is not possible to
+     * have both python versions enabled in the same vim instance.
+     * Only the first python version used will be switched on.
+     */
+
+    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
+    {
+      int needed = 0;
+      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
+      if (pylib != 0)
+      {
+          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
+          void (*init)(void) = dlsym(pylib, "Py_Initialize");
+          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
+          void (*final)(void) = dlsym(pylib, "Py_Finalize");
+          (*pfx)(prefix);
+          (*init)();
+          needed = (*simple)("import termios") == -1;
+          (*final)();
+          dlclose(pylib);
+      }
+      return !needed;
+    }
+
+    int main(int argc, char** argv)
+    {
+      int not_needed = 0;
+      if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
+            not_needed = 1;
+      return !not_needed;
+    }
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; };$as_echo "#define PY3_NO_RTLD_GLOBAL 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
   CFLAGS=$cflags_save
   LDFLAGS=$ldflags_save
+
   PYTHON_SRC="if_python.c"
   PYTHON_OBJ="objects/if_python.o"
   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
@@ -6085,6 +6333,9 @@
 $as_echo "too old; need Tcl version 8.0 or later" >&6; }
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
+    as_fn_error "could not configure Tcl" "$LINENO" 5
+  fi
 fi
 
 
@@ -6103,20 +6354,20 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
 $as_echo "$enable_rubyinterp" >&6; }
-if test "$enable_rubyinterp" = "yes"; then
+if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
 $as_echo_n "checking --with-ruby-command argument... " >&6; }
 
+
 # Check whether --with-ruby-command was given.
 if test "${with_ruby_command+set}" = set; then :
-  withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+  withval=$with_ruby_command; RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
 $as_echo "$RUBY_CMD" >&6; }
 else
   RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
 $as_echo "defaulting to $RUBY_CMD" >&6; }
 fi
 
-
   # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
 set dummy $RUBY_CMD; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -6163,45 +6414,52 @@
     if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5
 $as_echo "OK" >&6; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby rbconfig" >&5
+$as_echo_n "checking Ruby rbconfig... " >&6; }
+      ruby_rbconfig="RbConfig"
+      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
+	ruby_rbconfig="Config"
+      fi
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ruby_rbconfig" >&5
+$as_echo "$ruby_rbconfig" >&6; }
       { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby header files" >&5
 $as_echo_n "checking Ruby header files... " >&6; }
-      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null`
+      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG['rubyhdrdir'] || $ruby_rbconfig::CONFIG['archdir'] || \\$hdrdir" 2>/dev/null`
       if test "X$rubyhdrdir" != "X"; then
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5
 $as_echo "$rubyhdrdir" >&6; }
 	RUBY_CFLAGS="-I$rubyhdrdir"
-        rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'`
+        rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['arch']"`
         if test -d "$rubyhdrdir/$rubyarch"; then
           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
         fi
-        rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'`
+        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['ruby_version'].gsub(/\./, '')[0,2]"`
         RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
-	rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'`
+	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LIBS']"`
 	if test "X$rubylibs" != "X"; then
 	  RUBY_LIBS="$rubylibs"
 	fi
-	librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
-	if test -f "$rubyhdrdir/$librubyarg"; then
-	  librubyarg="$rubyhdrdir/$librubyarg"
-	else
-	  rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
-	  if test -f "$rubylibdir/$librubyarg"; then
-	    librubyarg="$rubylibdir/$librubyarg"
-	  elif test "$librubyarg" = "libruby.a"; then
-	    	    librubyarg="-lruby"
-	  else
-	    librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
-	  fi
+	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBYARG'])"`
+	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBY_A'])"`
+	rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['libdir'])"`
+	if test -f "$rubylibdir/$librubya"; then
+	  librubyarg="$librubyarg"
+	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+	elif test "$librubyarg" = "libruby.a"; then
+	  	  librubyarg="-lruby"
+	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
 	fi
 
 	if test "X$librubyarg" != "X"; then
 	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
 	fi
-	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'`
+	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"`
 	if test "X$rubyldflags" != "X"; then
 	  	  	  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
 	  if test "X$rubyldflags" != "X"; then
-	    LDFLAGS="$rubyldflags $LDFLAGS"
+	    if test "X`echo \"$LDFLAGS\" | grep -F -e \"$rubyldflags\"`" = "X"; then
+	      LDFLAGS="$rubyldflags $LDFLAGS"
+	    fi
 	  fi
 	fi
 	RUBY_SRC="if_ruby.c"
@@ -6209,6 +6467,13 @@
 	RUBY_PRO="if_ruby.pro"
 	$as_echo "#define FEAT_RUBY 1" >>confdefs.h
 
+	if test "$enable_rubyinterp" = "dynamic"; then
+	  libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG['LIBRUBY_SO']"`
+	  $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
+
+	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+	  RUBY_LIBS=
+	fi
       else
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found; disabling Ruby" >&5
 $as_echo "not found; disabling Ruby" >&6; }
@@ -6218,6 +6483,10 @@
 $as_echo "too old; need Ruby version 1.6.0 or later" >&6; }
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
+    as_fn_error "could not configure Ruby" "$LINENO" 5
+  fi
 fi
 
 
@@ -7422,7 +7691,11 @@
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if X11 header files implicitly declare return values" >&5
 $as_echo_n "checking if X11 header files implicitly declare return values... " >&6; }
     cflags_save=$CFLAGS
-    CFLAGS="$CFLAGS $X_CFLAGS -Werror"
+        if test "$GCC" = yes; then
+      CFLAGS="$CFLAGS $X_CFLAGS -Werror"
+    else
+      CFLAGS="$CFLAGS $X_CFLAGS"
+    fi
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #include <X11/Xlib.h>
@@ -8078,9 +8351,9 @@
 
         GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
 
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for location of Motif GUI libs" >&5
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking for location of Motif GUI libs" >&5
 $as_echo_n "checking for location of Motif GUI libs... " >&6; }
-    gui_libs="`echo $x_libraries|sed 's%/^/^/*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
+    gui_libs="`echo $x_libraries|sed 's%/^/^/*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
     GUI_LIB_LOC=
     for try in $gui_libs; do
       for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
@@ -8090,7 +8363,9 @@
       done
     done
     if test -n "$GUI_LIB_LOC"; then
-            if test "$GUI_LIB_LOC" = /usr/lib; then
+            if test "$GUI_LIB_LOC" = /usr/lib \
+	   -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
+	   -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
 	GUI_LIB_LOC=
 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: in default path" >&5
 $as_echo "in default path" >&6; }
@@ -8528,8 +8803,13 @@
 if test -z "$SKIP_MOTIF"; then
   cppflags_save=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
-		   Xm/UnhighlightT.h Xm/Notebook.h
+  if test "$zOSUnix" = "yes"; then
+	xmheader="Xm/Xm.h"
+  else
+	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
+	   Xm/UnhighlightT.h Xm/Notebook.h"
+  fi
+  for ac_header in $xmheader
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
 ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -8544,7 +8824,7 @@
 done
 
 
-  if test $ac_cv_header_Xm_XpmP_h = yes; then
+  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmAttributes_21 in Xm/XpmP.h" >&5
 $as_echo_n "checking for XpmAttributes_21 in Xm/XpmP.h... " >&6; }
     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -8616,6 +8896,27 @@
 
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CYGWIN environment" >&5
+$as_echo_n "checking for CYGWIN environment... " >&6; }
+case `uname` in
+    CYGWIN*)    CYGWIN=yes; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CYGWIN clipboard support" >&5
+$as_echo_n "checking for CYGWIN clipboard support... " >&6; }
+                if test "x$with_x" = "xno" ; then
+                  OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+                  $as_echo "#define FEAT_CYGWIN_WIN32_CLIPBOARD 1" >>confdefs.h
+
+                else
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - using X11" >&5
+$as_echo "no - using X11" >&6; }
+                fi ;;
+
+    *)          CYGWIN=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; };;
+esac
 
 if test "$enable_hangulinput" = "yes"; then
   if test "x$GUITYPE" = "xNONE"; then
@@ -9768,9 +10069,9 @@
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: empty: automatic terminal library selection" >&5
 $as_echo "empty: automatic terminal library selection" >&6; }
-              case "`uname -s 2>/dev/null`" in
-	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
-	*)	tlibs="ncurses termlib termcap curses";;
+                case "`uname -s 2>/dev/null`" in
+	OSF1|SCO_SV)	tlibs="tinfo ncurses curses termlib termcap";;
+	*)	tlibs="tinfo ncurses termlib termcap curses";;
   esac
   for libname in $tlibs; do
     as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
@@ -10329,7 +10630,7 @@
 _ACEOF
 
   if test "x$vim_cv_tty_mode" = "x" ; then
-    as_fn_error "It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (propably 0620)" "$LINENO" 5
+    as_fn_error "It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)" "$LINENO" 5
   else
     $as_echo "#define PTYMODE 0620" >>confdefs.h
 
@@ -10462,7 +10763,7 @@
 fi
 
 for ac_func in bcmp fchdir fchown fsync getcwd getpseudotty \
-	getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
 	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
 	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
 	sigvec strcasecmp strerror strftime stricmp strncasecmp \
@@ -11159,7 +11460,47 @@
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5
+$as_echo_n "checking for acl_get in -lsec... " >&6; }
+if test "${ac_cv_lib_sec_acl_get+set}" = set; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsec  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char acl_get ();
+int
+main ()
+{
+return acl_get ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_sec_acl_get=yes
+else
+  ac_cv_lib_sec_acl_get=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5
+$as_echo "$ac_cv_lib_sec_acl_get" >&6; }
+if test "x$ac_cv_lib_sec_acl_get" = x""yes; then :
+  LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
 $as_echo_n "checking for Solaris ACL support... " >&6; }
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -11186,6 +11527,8 @@
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
+fi
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AIX ACL support" >&5
 $as_echo_n "checking for AIX ACL support... " >&6; }
@@ -11461,7 +11804,7 @@
 main ()
 {
 	struct sysinfo sinfo;
- 	sinfo.mem_unit = 1;
+	sinfo.mem_unit = 1;
 
   ;
   return 0;
@@ -11642,7 +11985,8 @@
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
 $as_echo_n "checking uint32_t is 32 bits... " >&6; }
 if test "$cross_compiling" = yes; then :
-  as_fn_error "could not compile program using uint32_t." "$LINENO" 5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check uint32_t when cross-compiling." >&5
+$as_echo "$as_me: WARNING: cannot check uint32_t when cross-compiling." >&2;}
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -11915,6 +12259,10 @@
 test -f tags && mv tags tags.save
 if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
   TAGPRG="ctags -I INIT+ --fields=+S"
+elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+  TAGPRG="exctags -I INIT+ --fields=+S"
+elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
 else
   TAGPRG="ctags"
   (eval etags	   /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
@@ -12326,6 +12674,10 @@
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
   fi
+        if test "x$features" = "xtiny"; then
+    OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
+    OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
+  fi
 fi
 if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
   LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
@@ -12344,10 +12696,10 @@
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
   fi
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
 $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
   if test "$gccmajor" -gt "3"; then
-    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
+    CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
   else
@@ -12357,6 +12709,28 @@
 fi
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5
+$as_echo_n "checking linker --as-needed support... " >&6; }
+LINK_AS_NEEDED=
+# Check if linker supports --as-needed and --no-as-needed options
+if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
+  LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
+  LINK_AS_NEEDED=yes
+fi
+if test "$LINK_AS_NEEDED" = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+# IBM z/OS reset CFLAGS for config.mk
+if test "$zOSUnix" = "yes"; then
+	CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
+fi
+
 ac_config_files="$ac_config_files auto/config.mk:config.mk.in"
 
 cat >confcache <<\_ACEOF
diff -Naur vim73.orig/src/bigvim.bat vim73/src/bigvim.bat
--- vim73.orig/src/bigvim.bat	2010-07-18 19:22:17.000000000 +0000
+++ vim73/src/bigvim.bat	2013-08-04 19:09:10.133945292 +0000
@@ -1,3 +1,5 @@
 :: command to build big Vim with OLE, Perl, Python, Ruby and Tcl
-nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl512 DYNAMIC_PERL=yes PERL_VER=512 PYTHON=e:\python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=e:\python31 DYNAMIC_PYTHON3=yes PYTHON3_VER=31 RUBY=e:\ruby191 DYNAMIC_RUBY=yes RUBY_VER=191 RUBY_VER_LONG=1.9.1 TCL=e:\tcl DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes XPM=e:\xpm
+SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\"
+SET TOOLDIR=E:\
+%VCDIR%nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=19 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
 
diff -Naur vim73.orig/src/bigvim64.bat vim73/src/bigvim64.bat
--- vim73.orig/src/bigvim64.bat	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/bigvim64.bat	2013-08-04 19:09:10.133945292 +0000
@@ -0,0 +1,7 @@
+:: command to build big Vim 64 bit with OLE, Perl, Python, Ruby and Tcl
+:: First run: %VCDIR%\vcvarsall.bat x86_amd64
+:: Ruby and Tcl are excluded, doesn't seem to work.
+SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\"
+SET TOOLDIR=E:\
+%VCDIR%\bin\nmake -f Make_mvc.mak CPU=AMD64 GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32  %1 IME=yes CSCOPE=yes
+
diff -Naur vim73.orig/src/blowfish.c vim73/src/blowfish.c
--- vim73.orig/src/blowfish.c	2010-07-14 14:45:39.000000000 +0000
+++ vim73/src/blowfish.c	2013-08-04 19:09:10.137278616 +0000
@@ -413,6 +413,7 @@
     int    salt_len;
 {
     int      i, j, keypos = 0;
+    unsigned u;
     UINT32_T val, data_l, data_r;
     char_u   *key;
     int      keylen;
@@ -432,8 +433,8 @@
     }
     for (i = 0; i < keylen; i++)
     {
-	sscanf((char *)&key[i * 2], "%2x", &j);
-	key[i] = j;
+	sscanf((char *)&key[i * 2], "%2x", &u);
+	key[i] = u;
     }
 
     mch_memmove(sbx, sbi, 4 * 4 * 256);
diff -Naur vim73.orig/src/buffer.c vim73/src/buffer.c
--- vim73.orig/src/buffer.c	2010-08-13 09:14:35.000000000 +0000
+++ vim73/src/buffer.c	2013-08-04 19:09:10.140611939 +0000
@@ -57,13 +57,15 @@
 
 #if defined(FEAT_SIGNS)
 static void insert_sign __ARGS((buf_T *buf, signlist_T *prev, signlist_T *next, int id, linenr_T lnum, int typenr));
-static void buf_delete_signs __ARGS((buf_T *buf));
 #endif
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
 static char *msg_loclist = N_("[Location List]");
 static char *msg_qflist = N_("[Quickfix List]");
 #endif
+#ifdef FEAT_AUTOCMD
+static char *e_auabort = N_("E855: Autocommands caused command to abort");
+#endif
 
 /*
  * Open current buffer, that is: open the memfile and read the file into
@@ -80,6 +82,9 @@
 #ifdef FEAT_AUTOCMD
     buf_T	*old_curbuf;
 #endif
+#ifdef FEAT_SYN_HL
+    long	old_tw = curbuf->b_p_tw;
+#endif
 
     /*
      * The 'readonly' flag is only set when BF_NEVERLOADED is being reset.
@@ -96,7 +101,7 @@
 	 * There MUST be a memfile, otherwise we can't do anything
 	 * If we can't create one for the current buffer, take another buffer
 	 */
-	close_buffer(NULL, curbuf, 0);
+	close_buffer(NULL, curbuf, 0, FALSE);
 	for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
 	    if (curbuf->b_ml.ml_mfp != NULL)
 		break;
@@ -111,6 +116,10 @@
 	}
 	EMSG(_("E83: Cannot allocate buffer, using other one..."));
 	enter_buffer(curbuf);
+#ifdef FEAT_SYN_HL
+	if (old_tw != curbuf->b_p_tw)
+	    check_colorcolumn(curwin);
+#endif
 	return FAIL;
     }
 
@@ -316,12 +325,17 @@
  * get a new buffer very soon!
  *
  * The 'bufhidden' option can force freeing and deleting.
+ *
+ * When "abort_if_last" is TRUE then do not close the buffer if autocommands
+ * cause there to be only one window with this buffer.  e.g. when ":quit" is
+ * supposed to close the window but autocommands close all other windows.
  */
     void
-close_buffer(win, buf, action)
+close_buffer(win, buf, action, abort_if_last)
     win_T	*win;		/* if not NULL, set b_last_cursor */
     buf_T	*buf;
     int		action;
+    int		abort_if_last UNUSED;
 {
 #ifdef FEAT_AUTOCMD
     int		is_curbuf;
@@ -369,19 +383,35 @@
     /* When the buffer is no longer in a window, trigger BufWinLeave */
     if (buf->b_nwindows == 1)
     {
+	buf->b_closing = TRUE;
 	apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
 								  FALSE, buf);
-	if (!buf_valid(buf))	    /* autocommands may delete the buffer */
+	if (!buf_valid(buf))
+	{
+	    /* Autocommands deleted the buffer. */
+aucmd_abort:
+	    EMSG(_(e_auabort));
 	    return;
+	}
+	buf->b_closing = FALSE;
+	if (abort_if_last && one_window())
+	    /* Autocommands made this the only window. */
+	    goto aucmd_abort;
 
 	/* When the buffer becomes hidden, but is not unloaded, trigger
 	 * BufHidden */
 	if (!unload_buf)
 	{
+	    buf->b_closing = TRUE;
 	    apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
 								  FALSE, buf);
-	    if (!buf_valid(buf))	/* autocmds may delete the buffer */
-		return;
+	    if (!buf_valid(buf))
+		/* Autocommands deleted the buffer. */
+		goto aucmd_abort;
+	    buf->b_closing = FALSE;
+	    if (abort_if_last && one_window())
+		/* Autocommands made this the only window. */
+		goto aucmd_abort;
 	}
 # ifdef FEAT_EVAL
 	if (aborting())	    /* autocmds may abort script processing */
@@ -416,6 +446,14 @@
 #endif
 
     buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
+    if (
+#ifdef FEAT_WINDOWS
+	win_valid(win) &&
+#else
+	win != NULL &&
+#endif
+			  win->w_buffer == buf)
+	win->w_buffer = NULL;  /* make sure we don't use the buffer now */
 
 #ifdef FEAT_AUTOCMD
     /* Autocommands may have deleted the buffer. */
@@ -527,6 +565,7 @@
 #ifdef FEAT_AUTOCMD
     int		is_curbuf = (buf == curbuf);
 
+    buf->b_closing = TRUE;
     apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
     if (!buf_valid(buf))	    /* autocommands may delete the buffer */
 	return;
@@ -543,6 +582,7 @@
 	if (!buf_valid(buf))	    /* autocommands may delete the buffer */
 	    return;
     }
+    buf->b_closing = FALSE;
 # ifdef FEAT_EVAL
     if (aborting())	    /* autocmds may abort script processing */
 	return;
@@ -560,6 +600,11 @@
 #ifdef FEAT_DIFF
     diff_buf_delete(buf);	    /* Can't use 'diff' for unloaded buffer. */
 #endif
+#ifdef FEAT_SYN_HL
+    /* Remove any ownsyntax, unless exiting. */
+    if (firstwin != NULL && curwin->w_buffer == buf)
+	reset_synblock(curwin);
+#endif
 
 #ifdef FEAT_FOLDING
     /* No folds in an empty buffer. */
@@ -603,6 +648,9 @@
     buf_T	*buf;
 {
     free_buffer_stuff(buf, TRUE);
+#ifdef FEAT_EVAL
+    unref_var_dict(buf->b_vars);
+#endif
 #ifdef FEAT_LUA
     lua_buffer_free(buf);
 #endif
@@ -639,10 +687,13 @@
     {
 	clear_wininfo(buf);		/* including window-local options */
 	free_buf_options(buf, TRUE);
+#ifdef FEAT_SPELL
+	ga_clear(&buf->b_s.b_langp);
+#endif
     }
 #ifdef FEAT_EVAL
-    vars_clear(&buf->b_vars.dv_hashtab); /* free all internal variables */
-    hash_init(&buf->b_vars.dv_hashtab);
+    vars_clear(&buf->b_vars->dv_hashtab); /* free all internal variables */
+    hash_init(&buf->b_vars->dv_hashtab);
 #endif
 #ifdef FEAT_USR_CMDS
     uc_clear(&buf->b_ucmds);		/* clear local user commands */
@@ -661,9 +712,6 @@
     vim_free(buf->b_start_fenc);
     buf->b_start_fenc = NULL;
 #endif
-#ifdef FEAT_SPELL
-    ga_clear(&buf->b_s.b_langp);
-#endif
 }
 
 /*
@@ -748,6 +796,9 @@
 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
     cleanup_T	cs;
 # endif
+#ifdef FEAT_SYN_HL
+    long	old_tw = curbuf->b_p_tw;
+#endif
 
     if (swap_exists_action == SEA_QUIT)
     {
@@ -762,11 +813,17 @@
 	 * open a new, empty buffer. */
 	swap_exists_action = SEA_NONE;	/* don't want it again */
 	swap_exists_did_quit = TRUE;
-	close_buffer(curwin, curbuf, DOBUF_UNLOAD);
+	close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
 	if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
 	    old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
 	if (old_curbuf != NULL)
+	{
 	    enter_buffer(old_curbuf);
+#ifdef FEAT_SYN_HL
+	    if (old_tw != curbuf->b_p_tw)
+		check_colorcolumn(curwin);
+#endif
+	}
 	/* If "old_curbuf" is NULL we are in big trouble here... */
 
 # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
@@ -874,7 +931,8 @@
 		if (!VIM_ISDIGIT(*arg))
 		{
 		    p = skiptowhite_esc(arg);
-		    bnr = buflist_findpat(arg, p, command == DOBUF_WIPE, FALSE);
+		    bnr = buflist_findpat(arg, p, command == DOBUF_WIPE,
+								FALSE, FALSE);
 		    if (bnr < 0)	    /* failed */
 			break;
 		    arg = p;
@@ -926,6 +984,10 @@
 
     return errormsg;
 }
+#endif /* FEAT_LISTCMDS */
+
+#if defined(FEAT_LISTCMDS) || defined(FEAT_PYTHON) \
+	|| defined(FEAT_PYTHON3) || defined(PROTO)
 
 /*
  * Implementation of the commands for the buffer list.
@@ -1109,7 +1171,7 @@
 	     * if the buffer still exists.
 	     */
 	    if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
-		close_buffer(NULL, buf, action);
+		close_buffer(NULL, buf, action, FALSE);
 	    return retval;
 	}
 
@@ -1120,6 +1182,9 @@
 	 * a window with this buffer.
 	 */
 	while (buf == curbuf
+# ifdef FEAT_AUTOCMD
+		   && !(curwin->w_closing || curwin->w_buffer->b_closing)
+# endif
 		   && (firstwin != lastwin || first_tabpage->tp_next != NULL))
 	    win_close(curwin, FALSE);
 #endif
@@ -1133,7 +1198,7 @@
 	    close_windows(buf, FALSE);
 #endif
 	    if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
-		close_buffer(NULL, buf, action);
+		close_buffer(NULL, buf, action, FALSE);
 	    return OK;
 	}
 
@@ -1288,9 +1353,12 @@
     /* Go to the other buffer. */
     set_curbuf(buf, action);
 
-#if defined(FEAT_LISTCMDS) && defined(FEAT_SCROLLBIND)
+#if defined(FEAT_LISTCMDS) \
+	&& (defined(FEAT_SCROLLBIND) || defined(FEAT_CURSORBIND))
     if (action == DOBUF_SPLIT)
-	curwin->w_p_scb = FALSE;	/* reset 'scrollbind' */
+    {
+	RESET_BINDING(curwin);	/* reset 'scrollbind' and 'cursorbind' */
+    }
 #endif
 
 #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
@@ -1300,8 +1368,7 @@
 
     return OK;
 }
-
-#endif /* FEAT_LISTCMDS */
+#endif
 
 /*
  * Set current buffer to "buf".  Executes autocommands and closes current
@@ -1320,6 +1387,9 @@
     buf_T	*prevbuf;
     int		unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
 						     || action == DOBUF_WIPE);
+#ifdef FEAT_SYN_HL
+    long	old_tw = curbuf->b_p_tw;
+#endif
 
     setpcmark();
     if (!cmdmod.keepalt)
@@ -1343,6 +1413,10 @@
 # endif
 #endif
     {
+#ifdef FEAT_SYN_HL
+	if (prevbuf == curwin->w_buffer)
+	    reset_synblock(curwin);
+#endif
 #ifdef FEAT_WINDOWS
 	if (unload)
 	    close_windows(prevbuf, FALSE);
@@ -1353,29 +1427,48 @@
 	if (buf_valid(prevbuf))
 #endif
 	{
+#ifdef FEAT_WINDOWS
+	    win_T  *previouswin = curwin;
+#endif
 	    if (prevbuf == curbuf)
 		u_sync(FALSE);
 	    close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
 		    unload ? action : (action == DOBUF_GOTO
 			&& !P_HID(prevbuf)
-			&& !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0);
+			&& !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
+#ifdef FEAT_WINDOWS
+	    if (curwin != previouswin && win_valid(previouswin))
+	      /* autocommands changed curwin, Grr! */
+	      curwin = previouswin;
+#endif
 	}
     }
 #ifdef FEAT_AUTOCMD
     /* An autocommand may have deleted "buf", already entered it (e.g., when
-     * it did ":bunload") or aborted the script processing! */
+     * it did ":bunload") or aborted the script processing!
+     * If curwin->w_buffer is null, enter_buffer() will make it valid again */
+    if ((buf_valid(buf) && buf != curbuf
 # ifdef FEAT_EVAL
-    if (buf_valid(buf) && buf != curbuf && !aborting())
-# else
-    if (buf_valid(buf) && buf != curbuf)
+	    && !aborting()
 # endif
+# ifdef FEAT_WINDOWS
+	 ) || curwin->w_buffer == NULL
+# endif
+       )
 #endif
+    {
 	enter_buffer(buf);
+#ifdef FEAT_SYN_HL
+	if (old_tw != curbuf->b_p_tw)
+	    check_colorcolumn(curwin);
+#endif
+    }
 }
 
 /*
  * Enter a new current buffer.
- * Old curbuf must have been abandoned already!
+ * Old curbuf must have been abandoned already!  This also means "curbuf" may
+ * be pointing to freed memory.
  */
     void
 enter_buffer(buf)
@@ -1392,10 +1485,6 @@
     foldUpdateAll(curwin);	/* update folds (later). */
 #endif
 
-#ifdef FEAT_SYN_HL
-    reset_synblock(curwin);
-    curwin->w_s = &(buf->b_s);
-#endif
     /* Get the buffer in the current window. */
     curwin->w_buffer = buf;
     curbuf = buf;
@@ -1406,6 +1495,10 @@
 	diff_buf_add(curbuf);
 #endif
 
+#ifdef FEAT_SYN_HL
+    curwin->w_s = &(buf->b_s);
+#endif
+
     /* Cursor on first line by default. */
     curwin->w_cursor.lnum = 1;
     curwin->w_cursor.col = 0;
@@ -1607,6 +1700,17 @@
 	    vim_free(ffname);
 	    return NULL;
 	}
+#ifdef FEAT_EVAL
+	/* init b: variables */
+	buf->b_vars = dict_alloc();
+	if (buf->b_vars == NULL)
+	{
+	    vim_free(ffname);
+	    vim_free(buf);
+	    return NULL;
+	}
+	init_var_dict(buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
+#endif
     }
 
     if (ffname != NULL)
@@ -1642,6 +1746,11 @@
 #endif
 	/* buf->b_nwindows = 0; why was this here? */
 	free_buffer_stuff(buf, FALSE);	/* delete local variables et al. */
+
+	/* Init the options. */
+	buf->b_p_initialized = FALSE;
+	buf_copy_options(buf, BCO_ENTER);
+
 #ifdef FEAT_KEYMAP
 	/* need to reload lmaps and set b:keymap_name */
 	curbuf->b_kmap_state |= KEYMAP_INIT;
@@ -1686,9 +1795,6 @@
     buf->b_wininfo->wi_fpos.lnum = lnum;
     buf->b_wininfo->wi_win = curwin;
 
-#ifdef FEAT_EVAL
-    init_var_dict(&buf->b_vars, &buf->b_bufvar);    /* init b: variables */
-#endif
 #ifdef FEAT_SYN_HL
     hash_init(&buf->b_s.b_keywtab);
     hash_init(&buf->b_s.b_keywtab_ic);
@@ -1795,7 +1901,7 @@
 #ifdef FEAT_SPELL
     clear_string_option(&buf->b_s.b_p_spc);
     clear_string_option(&buf->b_s.b_p_spf);
-    vim_free(buf->b_s.b_cap_prog);
+    vim_regfree(buf->b_s.b_cap_prog);
     buf->b_s.b_cap_prog = NULL;
     clear_string_option(&buf->b_s.b_p_spl);
 #endif
@@ -1805,9 +1911,6 @@
 #ifdef FEAT_AUTOCMD
     clear_string_option(&buf->b_p_ft);
 #endif
-#ifdef FEAT_OSFILETYPE
-    clear_string_option(&buf->b_p_oft);
-#endif
 #ifdef FEAT_CINDENT
     clear_string_option(&buf->b_p_cink);
     clear_string_option(&buf->b_p_cino);
@@ -1905,7 +2008,7 @@
 	 * "buf" if one exists */
 	if (swb_flags & SWB_USEOPEN)
 	    wp = buf_jump_open_win(buf);
-	/* If 'switchbuf' contians "usetab": jump to first window in any tab
+	/* If 'switchbuf' contains "usetab": jump to first window in any tab
 	 * page containing "buf" if one exists */
 	if (wp == NULL && (swb_flags & SWB_USETAB))
 	    wp = buf_jump_open_tab(buf);
@@ -1917,9 +2020,7 @@
 		tabpage_new();
 	    else if (win_split(0, 0) == FAIL)	/* Open in a new window */
 		return FAIL;
-# ifdef FEAT_SCROLLBIND
-	    curwin->w_p_scb = FALSE;
-# endif
+	    RESET_BINDING(curwin);
 	}
     }
 #endif
@@ -2042,18 +2143,20 @@
     return NULL;
 }
 
-#if defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL) || defined(PROTO)
+#if defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL) \
+	|| defined(PROTO)
 /*
  * Find file in buffer list by a regexp pattern.
  * Return fnum of the found buffer.
  * Return < 0 for error.
  */
     int
-buflist_findpat(pattern, pattern_end, unlisted, diffmode)
+buflist_findpat(pattern, pattern_end, unlisted, diffmode, curtab_only)
     char_u	*pattern;
     char_u	*pattern_end;	/* pointer to first char after pattern */
     int		unlisted;	/* find unlisted buffers */
     int		diffmode UNUSED; /* find diff-mode buffers only */
+    int		curtab_only;	/* find buffers in current tab only */
 {
     buf_T	*buf;
     regprog_T	*prog;
@@ -2121,6 +2224,23 @@
 #endif
 			    && buflist_match(prog, buf) != NULL)
 		    {
+			if (curtab_only)
+			{
+			    /* Ignore the match if the buffer is not open in
+			     * the current tab. */
+#ifdef FEAT_WINDOWS
+			    win_T	*wp;
+
+			    for (wp = firstwin; wp != NULL; wp = wp->w_next)
+				if (wp->w_buffer == buf)
+				    break;
+			    if (wp == NULL)
+				continue;
+#else
+			    if (curwin->w_buffer != buf)
+				continue;
+#endif
+			}
 			if (match >= 0)		/* already found a match */
 			{
 			    match = -2;
@@ -2129,7 +2249,7 @@
 			match = buf->b_fnum;	/* remember first match */
 		    }
 
-		vim_free(prog);
+		vim_regfree(prog);
 		if (match >= 0)			/* found one match */
 		    break;
 	    }
@@ -2238,14 +2358,14 @@
 		*file = (char_u **)alloc((unsigned)(count * sizeof(char_u *)));
 		if (*file == NULL)
 		{
-		    vim_free(prog);
+		    vim_regfree(prog);
 		    if (patc != pat)
 			vim_free(patc);
 		    return FAIL;
 		}
 	    }
 	}
-	vim_free(prog);
+	vim_regfree(prog);
 	if (count)		/* match(es) found, break here */
 	    break;
     }
@@ -2294,12 +2414,7 @@
     if (name != NULL)
     {
 	regmatch.regprog = prog;
-#ifdef CASE_INSENSITIVE_FILENAME
-	regmatch.rm_ic = TRUE;		/* Always ignore case */
-#else
-	regmatch.rm_ic = FALSE;		/* Never ignore case */
-#endif
-
+	regmatch.rm_ic = p_fic;	/* ignore case when 'fileignorecase' is set */
 	if (vim_regexec(&regmatch, name, (colnr_T)0))
 	    match = name;
 	else
@@ -2526,6 +2641,9 @@
     if (p_fdls >= 0)
 	curwin->w_p_fdl = p_fdls;
 #endif
+#ifdef FEAT_SYN_HL
+    check_colorcolumn(curwin);
+#endif
 }
 
 /*
@@ -2576,7 +2694,7 @@
 	    continue;
 	msg_putchar('\n');
 	if (buf_spname(buf) != NULL)
-	    STRCPY(NameBuff, buf_spname(buf));
+	    vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
 	else
 	    home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
 
@@ -2690,7 +2808,8 @@
 		vim_free(ffname);
 		return FAIL;
 	    }
-	    close_buffer(NULL, obuf, DOBUF_WIPE); /* delete from the list */
+	    /* delete from the list */
+	    close_buffer(NULL, obuf, DOBUF_WIPE, FALSE);
 	}
 	sfname = vim_strsave(sfname);
 	if (ffname == NULL || sfname == NULL)
@@ -2998,7 +3117,7 @@
 
     *p++ = '"';
     if (buf_spname(curbuf) != NULL)
-	STRCPY(p, buf_spname(curbuf));
+	vim_strncpy(p, buf_spname(curbuf), IOSIZE - (p - buffer) - 1);
     else
     {
 	if (!fullname && curbuf->b_fname != NULL)
@@ -3023,7 +3142,7 @@
 #endif
 					? _("[New file]") : "",
 	    (curbuf->b_flags & BF_READERR) ? _("[Read errors]") : "",
-	    curbuf->b_p_ro ? (shortmess(SHM_RO) ? "[RO]"
+	    curbuf->b_p_ro ? (shortmess(SHM_RO) ? _("[RO]")
 						      : _("[readonly]")) : "",
 	    (curbufIsChanged() || (curbuf->b_flags & BF_WRITE_MASK)
 							  || curbuf->b_p_ro) ?
@@ -3174,12 +3293,15 @@
 	{
 	    /* format: "fname + (path) (1 of 2) - VIM" */
 
+#define SPACE_FOR_FNAME (IOSIZE - 100)
+#define SPACE_FOR_DIR   (IOSIZE - 20)
+#define SPACE_FOR_ARGNR (IOSIZE - 10)  /* at least room for " - VIM" */
 	    if (curbuf->b_fname == NULL)
-		STRCPY(buf, _("[No Name]"));
+		vim_strncpy(buf, (char_u *)_("[No Name]"), SPACE_FOR_FNAME);
 	    else
 	    {
 		p = transstr(gettail(curbuf->b_fname));
-		vim_strncpy(buf, p, IOSIZE - 100);
+		vim_strncpy(buf, p, SPACE_FOR_FNAME);
 		vim_free(p);
 	    }
 
@@ -3203,7 +3325,7 @@
 		buf[off++] = ' ';
 		buf[off++] = '(';
 		home_replace(curbuf, curbuf->b_ffname,
-					       buf + off, IOSIZE - off, TRUE);
+					buf + off, SPACE_FOR_DIR - off, TRUE);
 #ifdef BACKSLASH_IN_FILENAME
 		/* avoid "c:/name" to be reduced to "c" */
 		if (isalpha(buf[off]) && buf[off + 1] == ':')
@@ -3214,24 +3336,34 @@
 		if (p == buf + off)
 		    /* must be a help buffer */
 		    vim_strncpy(buf + off, (char_u *)_("help"),
-						  (size_t)(IOSIZE - off - 1));
+					   (size_t)(SPACE_FOR_DIR - off - 1));
 		else
 		    *p = NUL;
 
-		/* translate unprintable chars */
-		p = transstr(buf + off);
-		vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1));
-		vim_free(p);
+		/* Translate unprintable chars and concatenate.  Keep some
+		 * room for the server name.  When there is no room (very long
+		 * file name) use (...). */
+		if (off < SPACE_FOR_DIR)
+		{
+		    p = transstr(buf + off);
+		    vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off));
+		    vim_free(p);
+		}
+		else
+		{
+		    vim_strncpy(buf + off, (char_u *)"...",
+					     (size_t)(SPACE_FOR_ARGNR - off));
+		}
 		STRCAT(buf, ")");
 	    }
 
-	    append_arg_number(curwin, buf, IOSIZE, FALSE);
+	    append_arg_number(curwin, buf, SPACE_FOR_ARGNR, FALSE);
 
 #if defined(FEAT_CLIENTSERVER)
 	    if (serverName != NULL)
 	    {
 		STRCAT(buf, " - ");
-		STRCAT(buf, serverName);
+		vim_strcat(buf, serverName, IOSIZE);
 	    }
 	    else
 #endif
@@ -3240,9 +3372,8 @@
 	    if (maxlen > 0)
 	    {
 		/* make it shorter by removing a bit in the middle */
-		len = vim_strsize(buf);
-		if (len > maxlen)
-		    trunc_string(buf, buf, maxlen);
+		if (vim_strsize(buf) > maxlen)
+		    trunc_string(buf, buf, maxlen, IOSIZE);
 	    }
 	}
     }
@@ -3278,7 +3409,7 @@
 	else
 	{
 	    if (buf_spname(curbuf) != NULL)
-		i_name = (char_u *)buf_spname(curbuf);
+		i_name = buf_spname(curbuf);
 	    else		    /* use file name only in icon */
 		i_name = gettail(curbuf->b_ffname);
 	    *i_str = NUL;
@@ -3363,7 +3494,8 @@
  * or truncated if too long, fillchar is used for all whitespace.
  */
     int
-build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab)
+build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar,
+						      maxwidth, hltab, tabtab)
     win_T	*wp;
     char_u	*out;		/* buffer to write into != NameBuff */
     size_t	outlen;		/* length of out[] */
@@ -3377,7 +3509,7 @@
     char_u	*p;
     char_u	*s;
     char_u	*t;
-    char_u	*linecont;
+    int		byteval;
 #ifdef FEAT_EVAL
     win_T	*o_curwin;
     buf_T	*o_curbuf;
@@ -3444,12 +3576,21 @@
 	fillchar = '-';
 #endif
 
-    /*
-     * Get line & check if empty (cursorpos will show "0-1").
-     * If inversion is possible we use it. Else '=' characters are used.
-     */
-    linecont = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE);
-    empty_line = (*linecont == NUL);
+    /* Get line & check if empty (cursorpos will show "0-1").  Note that
+     * p will become invalid when getting another buffer line. */
+    p = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE);
+    empty_line = (*p == NUL);
+
+    /* Get the byte value now, in case we need it below. This is more
+     * efficient than making a copy of the line. */
+    if (wp->w_cursor.col > (colnr_T)STRLEN(p))
+	byteval = 0;
+    else
+#ifdef FEAT_MBYTE
+	byteval = (*mb_ptr2char)(p + wp->w_cursor.col);
+#else
+	byteval = p[wp->w_cursor.col];
+#endif
 
     groupdepth = 0;
     p = out;
@@ -3458,6 +3599,18 @@
     prevchar_isitem = FALSE;
     for (s = usefmt; *s; )
     {
+	if (curitem == STL_MAX_ITEM)
+	{
+	    /* There are too many items.  Add the error code to the statusline
+	     * to give the user a hint about what went wrong. */
+	    if (p + 6 < out + outlen)
+	    {
+		mch_memmove(p, " E541", (size_t)5);
+		p += 5;
+	    }
+	    break;
+	}
+
 	if (*s != NUL && *s != '%')
 	    prevchar_isflag = prevchar_isitem = FALSE;
 
@@ -3473,6 +3626,8 @@
 	 * Handle one '%' item.
 	 */
 	s++;
+	if (*s == NUL)  /* ignore trailing % */
+	    break;
 	if (*s == '%')
 	{
 	    if (p + 1 >= out + outlen)
@@ -3679,7 +3834,7 @@
 	case STL_FILENAME:
 	    fillable = FALSE;	/* don't change ' ' to fillchar */
 	    if (buf_spname(wp->w_buffer) != NULL)
-		STRCPY(NameBuff, buf_spname(wp->w_buffer));
+		vim_strncpy(NameBuff, buf_spname(wp->w_buffer), MAXPATHL - 1);
 	    else
 	    {
 		t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname
@@ -3813,16 +3968,7 @@
 	case STL_BYTEVAL_X:
 	    base = 'X';
 	case STL_BYTEVAL:
-	    if (wp->w_cursor.col > (colnr_T)STRLEN(linecont))
-		num = 0;
-	    else
-	    {
-#ifdef FEAT_MBYTE
-		num = (*mb_ptr2char)(linecont + wp->w_cursor.col);
-#else
-		num = linecont[wp->w_cursor.col];
-#endif
-	    }
+	    num = byteval;
 	    if (num == NL)
 		num = 0;
 	    else if (num == CAR && get_fileformat(wp->w_buffer) == EOL_MAC)
@@ -3833,7 +3979,7 @@
 	case STL_ROFLAG_ALT:
 	    itemisflag = TRUE;
 	    if (wp->w_buffer->b_p_ro)
-		str = (char_u *)((opt == STL_ROFLAG_ALT) ? ",RO" : "[RO]");
+		str = (char_u *)((opt == STL_ROFLAG_ALT) ? ",RO" : _("[RO]"));
 	    break;
 
 	case STL_HELPFLAG:
@@ -4355,7 +4501,12 @@
 {
     int		i;
     win_T	*wp, *wpnext;
-    char_u	*opened;	/* array of flags for which args are open */
+    char_u	*opened;	/* Array of weight for which args are open:
+				 *  0: not opened
+				 *  1: opened in other tab
+				 *  2: opened in curtab
+				 *  3: opened in curtab and curwin
+				 */
     int		opened_len;	/* length of opened[] */
     int		use_firstwin = FALSE;	/* use first window for arglist */
     int		split_ret = OK;
@@ -4364,6 +4515,8 @@
     buf_T	*buf;
     tabpage_T	*tpnext;
     int		had_tab = cmdmod.tab;
+    win_T	*old_curwin, *last_curwin;
+    tabpage_T	*old_curtab, *last_curtab;
     win_T	*new_curwin = NULL;
     tabpage_T	*new_curtab = NULL;
 
@@ -4380,6 +4533,15 @@
     if (opened == NULL)
 	return;
 
+    /* Autocommands may do anything to the argument list.  Make sure it's not
+     * freed while we are working here by "locking" it.  We still have to
+     * watch out for its size to be changed. */
+    alist = curwin->w_alist;
+    ++alist->al_refcount;
+
+    old_curwin = curwin;
+    old_curtab = curtab;
+
 #ifdef FEAT_GUI
     need_mouse_correct = TRUE;
 #endif
@@ -4392,7 +4554,7 @@
      * When the ":tab" modifier was used do this for all tab pages.
      */
     if (had_tab > 0)
-	goto_tabpage_tp(first_tabpage);
+	goto_tabpage_tp(first_tabpage, TRUE, TRUE);
     for (;;)
     {
 	tpnext = curtab->tp_next;
@@ -4401,36 +4563,51 @@
 	    wpnext = wp->w_next;
 	    buf = wp->w_buffer;
 	    if (buf->b_ffname == NULL
-		    || buf->b_nwindows > 1
+		    || (!keep_tabs && buf->b_nwindows > 1)
 #ifdef FEAT_VERTSPLIT
 		    || wp->w_width != Columns
 #endif
 		    )
-		i = ARGCOUNT;
+		i = opened_len;
 	    else
 	    {
 		/* check if the buffer in this window is in the arglist */
-		for (i = 0; i < ARGCOUNT; ++i)
+		for (i = 0; i < opened_len; ++i)
 		{
-		    if (ARGLIST[i].ae_fnum == buf->b_fnum
-			    || fullpathcmp(alist_name(&ARGLIST[i]),
-					      buf->b_ffname, TRUE) & FPC_SAME)
+		    if (i < alist->al_ga.ga_len
+			    && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
+				|| fullpathcmp(alist_name(&AARGLIST(alist)[i]),
+					      buf->b_ffname, TRUE) & FPC_SAME))
 		    {
-			if (i < opened_len)
+			int weight = 1;
+
+			if (old_curtab == curtab)
 			{
-			    opened[i] = TRUE;
+			    ++weight;
+			    if (old_curwin == wp)
+				++weight;
+			}
+
+			if (weight > (int)opened[i])
+			{
+			    opened[i] = (char_u)weight;
 			    if (i == 0)
 			    {
+				if (new_curwin != NULL)
+				    new_curwin->w_arg_idx = opened_len;
 				new_curwin = wp;
 				new_curtab = curtab;
 			    }
 			}
-			if (wp->w_alist != curwin->w_alist)
+			else if (keep_tabs)
+			    i = opened_len;
+
+			if (wp->w_alist != alist)
 			{
 			    /* Use the current argument list for all windows
 			     * containing a file from it. */
 			    alist_unlink(wp->w_alist);
-			    wp->w_alist = curwin->w_alist;
+			    wp->w_alist = alist;
 			    ++wp->w_alist->al_refcount;
 			}
 			break;
@@ -4439,7 +4616,7 @@
 	    }
 	    wp->w_arg_idx = i;
 
-	    if (i == ARGCOUNT && !keep_tabs)	/* close this window */
+	    if (i == opened_len && !keep_tabs)/* close this window */
 	    {
 		if (P_HID(buf) || forceit || buf->b_nwindows > 1
 							|| !bufIsChanged(buf))
@@ -4461,7 +4638,8 @@
 		    }
 #ifdef FEAT_WINDOWS
 		    /* don't close last window */
-		    if (firstwin == lastwin && first_tabpage->tp_next == NULL)
+		    if (firstwin == lastwin
+			    && (first_tabpage->tp_next == NULL || !had_tab))
 #endif
 			use_firstwin = TRUE;
 #ifdef FEAT_WINDOWS
@@ -4488,27 +4666,23 @@
 	if (!valid_tabpage(tpnext))
 	    tpnext = first_tabpage;	/* start all over...*/
 # endif
-	goto_tabpage_tp(tpnext);
+	goto_tabpage_tp(tpnext, TRUE, TRUE);
     }
 
     /*
      * Open a window for files in the argument list that don't have one.
      * ARGCOUNT may change while doing this, because of autocommands.
      */
-    if (count > ARGCOUNT || count <= 0)
-	count = ARGCOUNT;
-
-    /* Autocommands may do anything to the argument list.  Make sure it's not
-     * freed while we are working here by "locking" it.  We still have to
-     * watch out for its size to be changed. */
-    alist = curwin->w_alist;
-    ++alist->al_refcount;
+    if (count > opened_len || count <= 0)
+	count = opened_len;
 
 #ifdef FEAT_AUTOCMD
     /* Don't execute Win/Buf Enter/Leave autocommands here. */
     ++autocmd_no_enter;
     ++autocmd_no_leave;
 #endif
+    last_curwin = curwin;
+    last_curtab = curtab;
     win_enter(lastwin, FALSE);
 #ifdef FEAT_WINDOWS
     /* ":drop all" should re-use an empty window to avoid "--remote-tab"
@@ -4518,11 +4692,11 @@
 	use_firstwin = TRUE;
 #endif
 
-    for (i = 0; i < count && i < alist->al_ga.ga_len && !got_int; ++i)
+    for (i = 0; i < count && i < opened_len && !got_int; ++i)
     {
 	if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
 	    arg_had_last = TRUE;
-	if (i < opened_len && opened[i])
+	if (opened[i] > 0)
 	{
 	    /* Move the already present window to below the current window */
 	    if (curwin->w_arg_idx != i)
@@ -4531,7 +4705,13 @@
 		{
 		    if (wpnext->w_arg_idx == i)
 		    {
-			win_move_after(wpnext, curwin);
+			if (keep_tabs)
+			{
+			    new_curwin = wpnext;
+			    new_curtab = curtab;
+			}
+			else
+			    win_move_after(wpnext, curwin);
 			break;
 		    }
 		}
@@ -4586,9 +4766,17 @@
 #ifdef FEAT_AUTOCMD
     --autocmd_no_enter;
 #endif
+    /* restore last referenced tabpage's curwin */
+    if (last_curtab != new_curtab)
+    {
+	if (valid_tabpage(last_curtab))
+	    goto_tabpage_tp(last_curtab, TRUE, TRUE);
+	if (win_valid(last_curwin))
+	    win_enter(last_curwin, FALSE);
+    }
     /* to window with first arg */
     if (valid_tabpage(new_curtab))
-	goto_tabpage_tp(new_curtab);
+	goto_tabpage_tp(new_curtab, TRUE, TRUE);
     if (win_valid(new_curwin))
 	win_enter(new_curwin, FALSE);
 
@@ -4640,7 +4828,7 @@
      */
 #ifdef FEAT_WINDOWS
     if (had_tab > 0)
-	goto_tabpage_tp(first_tabpage);
+	goto_tabpage_tp(first_tabpage, TRUE, TRUE);
     for (;;)
     {
 #endif
@@ -4658,7 +4846,11 @@
 #ifdef FEAT_WINDOWS
 		    || (had_tab > 0 && wp != firstwin)
 #endif
-		    ) && firstwin != lastwin)
+		    ) && firstwin != lastwin
+#ifdef FEAT_AUTOCMD
+		    && !(wp->w_closing || wp->w_buffer->b_closing)
+#endif
+		    )
 	    {
 		win_close(wp, FALSE);
 #ifdef FEAT_AUTOCMD
@@ -4676,7 +4868,7 @@
 	/* Without the ":tab" modifier only do the current tab page. */
 	if (had_tab == 0 || tpnext == NULL)
 	    break;
-	goto_tabpage_tp(tpnext);
+	goto_tabpage_tp(tpnext, TRUE, TRUE);
     }
 #endif
 
@@ -4904,7 +5096,8 @@
 	    if ((prev != -1 && STRNCMP(s, "ex:", (size_t)3) == 0)
 		    || STRNCMP(s, "vi:", (size_t)3) == 0)
 		break;
-	    if (STRNCMP(s, "vim", 3) == 0)
+	    /* Accept both "vim" and "Vim". */
+	    if ((s[0] == 'v' || s[0] == 'V') && s[1] == 'i' && s[2] == 'm')
 	    {
 		if (s[3] == '<' || s[3] == '=' || s[3] == '>')
 		    e = s + 4;
@@ -4912,6 +5105,8 @@
 		    e = s + 3;
 		vers = getdigits(&e);
 		if (*e == ':'
+			&& (s[0] != 'V'
+				  || STRNCMP(skipwhite(e + 1), "set", 3) == 0)
 			&& (s[3] == ':'
 			    || (VIM_VERSION_100 >= vers && isdigit(s[3]))
 			    || (VIM_VERSION_100 < vers && s[3] == '<')
@@ -5111,7 +5306,7 @@
  * Return special buffer name.
  * Returns NULL when the buffer has a normal file name.
  */
-    char *
+    char_u *
 buf_spname(buf)
     buf_T	*buf;
 {
@@ -5130,9 +5325,9 @@
 		goto win_found;
 win_found:
 	if (win != NULL && win->w_llist_ref != NULL)
-	    return _(msg_loclist);
+	    return (char_u *)_(msg_loclist);
 	else
-	    return _(msg_qflist);
+	    return (char_u *)_(msg_qflist);
     }
 #endif
 #ifdef FEAT_QUICKFIX
@@ -5141,12 +5336,12 @@
     if (bt_nofile(buf))
     {
 	if (buf->b_sfname != NULL)
-	    return (char *)buf->b_sfname;
-	return _("[Scratch]");
+	    return buf->b_sfname;
+	return (char_u *)_("[Scratch]");
     }
 #endif
     if (buf->b_fname == NULL)
-	return _("[No Name]");
+	return (char_u *)_("[No Name]");
     return NULL;
 }
 
@@ -5417,7 +5612,7 @@
 /*
  * Delete signs in buffer "buf".
  */
-    static void
+    void
 buf_delete_signs(buf)
     buf_T	*buf;
 {
@@ -5465,7 +5660,7 @@
 	buf = firstbuf;
     else
 	buf = rbuf;
-    while (buf != NULL)
+    while (buf != NULL && !got_int)
     {
 	if (buf->b_signlist != NULL)
 	{
@@ -5473,7 +5668,7 @@
 	    MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
 	    msg_putchar('\n');
 	}
-	for (p = buf->b_signlist; p != NULL; p = p->next)
+	for (p = buf->b_signlist; p != NULL && !got_int; p = p->next)
 	{
 	    vim_snprintf(lbuf, BUFSIZ, _("    line=%ld  id=%d  name=%s"),
 			   (long)p->lnum, p->id, sign_typenr2name(p->typenr));
@@ -5606,7 +5801,7 @@
     if (!aucmd)		    /* Don't trigger BufDelete autocommands here. */
 	block_autocmds();
 #endif
-    close_buffer(NULL, buf, DOBUF_WIPE);
+    close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
 #ifdef FEAT_AUTOCMD
     if (!aucmd)
 	unblock_autocmds();
diff -Naur vim73.orig/src/charset.c vim73/src/charset.c
--- vim73.orig/src/charset.c	2010-08-12 18:16:04.000000000 +0000
+++ vim73/src/charset.c	2013-08-04 19:09:10.143945262 +0000
@@ -284,7 +284,12 @@
 		}
 		++c;
 	    }
+
+	    c = *p;
 	    p = skip_to_option_part(p);
+	    if (c == ',' && *p == NUL)
+		/* Trailing comma is not allowed. */
+		return FAIL;
 	}
     }
     chartab_initialized = TRUE;
@@ -463,41 +468,42 @@
 	    if (enc_utf8)
 	    {
 		int	c = utf_ptr2char(STR_PTR(i));
-		int	ol = utf_ptr2len(STR_PTR(i));
+		int	olen = utf_ptr2len(STR_PTR(i));
 		int	lc = utf_tolower(c);
 
 		/* Only replace the character when it is not an invalid
 		 * sequence (ASCII character or more than one byte) and
 		 * utf_tolower() doesn't return the original character. */
-		if ((c < 0x80 || ol > 1) && c != lc)
+		if ((c < 0x80 || olen > 1) && c != lc)
 		{
-		    int	    nl = utf_char2len(lc);
+		    int	    nlen = utf_char2len(lc);
 
 		    /* If the byte length changes need to shift the following
 		     * characters forward or backward. */
-		    if (ol != nl)
+		    if (olen != nlen)
 		    {
-			if (nl > ol)
+			if (nlen > olen)
 			{
-			    if (buf == NULL ? ga_grow(&ga, nl - ol + 1) == FAIL
-						    : len + nl - ol >= buflen)
+			    if (buf == NULL
+				    ? ga_grow(&ga, nlen - olen + 1) == FAIL
+				    : len + nlen - olen >= buflen)
 			    {
 				/* out of memory, keep old char */
 				lc = c;
-				nl = ol;
+				nlen = olen;
 			    }
 			}
-			if (ol != nl)
+			if (olen != nlen)
 			{
 			    if (buf == NULL)
 			    {
-				STRMOVE(GA_PTR(i) + nl, GA_PTR(i) + ol);
-				ga.ga_len += nl - ol;
+				STRMOVE(GA_PTR(i) + nlen, GA_PTR(i) + olen);
+				ga.ga_len += nlen - olen;
 			    }
 			    else
 			    {
-				STRMOVE(buf + i + nl, buf + i + ol);
-				len += nl - ol;
+				STRMOVE(buf + i + nlen, buf + i + olen);
+				len += nlen - olen;
 			    }
 			}
 		    }
@@ -763,7 +769,7 @@
 }
 
 /*
- * Return the number of characters string "s" will take on the screen,
+ * Return the number of character cells string "s" will take on the screen,
  * counting TABs as two characters: "^I".
  */
     int
@@ -774,8 +780,8 @@
 }
 
 /*
- * Return the number of characters string "s[len]" will take on the screen,
- * counting TABs as two characters: "^I".
+ * Return the number of character cells string "s[len]" will take on the
+ * screen, counting TABs as two characters: "^I".
  */
     int
 vim_strnsize(s, len)
@@ -904,6 +910,14 @@
 vim_iswordc(c)
     int c;
 {
+    return vim_iswordc_buf(c, curbuf);
+}
+
+    int
+vim_iswordc_buf(c, buf)
+    int		c;
+    buf_T	*buf;
+{
 #ifdef FEAT_MBYTE
     if (c >= 0x100)
     {
@@ -913,7 +927,7 @@
 	    return utf_class(c) >= 2;
     }
 #endif
-    return (c > 0 && c < 0x100 && GET_CHARTAB(curbuf, c) != 0);
+    return (c > 0 && c < 0x100 && GET_CHARTAB(buf, c) != 0);
 }
 
 /*
@@ -930,19 +944,17 @@
     return GET_CHARTAB(curbuf, *p) != 0;
 }
 
-#if defined(FEAT_SYN_HL) || defined(PROTO)
     int
-vim_iswordc_buf(p, buf)
+vim_iswordp_buf(p, buf)
     char_u	*p;
     buf_T	*buf;
 {
-# ifdef FEAT_MBYTE
+#ifdef FEAT_MBYTE
     if (has_mbyte && MB_BYTE2LEN(*p) > 1)
 	return mb_get_class(p) >= 2;
-# endif
+#endif
     return (GET_CHARTAB(buf, *p) != 0);
 }
-#endif
 
 /*
  * return TRUE if 'c' is a valid file-name character
@@ -1601,10 +1613,9 @@
 #define LATIN1LOWER 'l'
 #define LATIN1UPPER 'U'
 
-/*                                                                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]%_'abcdefghijklmnopqrstuvwxyz{|}~                                   */
 static char_u latin1flags[257] = "                                                                 UUUUUUUUUUUUUUUUUUUUUUUUUU      llllllllllllllllllllllllll                                                                     UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
-static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~";
-static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
+static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\xff";
+static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
 
     int
 vim_islower(c)
@@ -1829,7 +1840,7 @@
 			hex = 0;	/* can't be octal */
 			break;
 		    }
-		    if (ptr[n] > '0')
+		    if (ptr[n] >= '0')
 			hex = '0';	/* assume octal */
 		}
 	    }
diff -Naur vim73.orig/src/config.h.in vim73/src/config.h.in
--- vim73.orig/src/config.h.in	2010-08-13 13:45:27.000000000 +0000
+++ vim73/src/config.h.in	2013-08-04 19:09:10.147278586 +0000
@@ -161,6 +161,7 @@
 #undef HAVE_FSYNC
 #undef HAVE_GETCWD
 #undef HAVE_GETPSEUDOTTY
+#undef HAVE_GETPWENT
 #undef HAVE_GETPWNAM
 #undef HAVE_GETPWUID
 #undef HAVE_GETRLIMIT
@@ -346,9 +347,15 @@
 /* Define if dynamic python does not require RTLD_GLOBAL */
 #undef PY_NO_RTLD_GLOBAL
 
+/* Define if dynamic python3 does not require RTLD_GLOBAL */
+#undef PY3_NO_RTLD_GLOBAL
+
 /* Define if you want to include the Ruby interpreter. */
 #undef FEAT_RUBY
 
+/* Define for linking via dlopen() or LoadLibrary() */
+#undef DYNAMIC_RUBY
+
 /* Define if you want to include the Tcl interpreter. */
 #undef FEAT_TCL
 
@@ -357,6 +364,7 @@
 
 /* Define if you want to add support for ACL */
 #undef HAVE_POSIX_ACL
+#undef HAVE_SOLARIS_ZFS_ACL
 #undef HAVE_SOLARIS_ACL
 #undef HAVE_AIX_ACL
 
@@ -431,3 +439,6 @@
 
 /* Define if fcntl()'s F_SETFD command knows about FD_CLOEXEC */
 #undef HAVE_FD_CLOEXEC
+
+/* Define if you want Cygwin to use the WIN32 clipboard, not compatible with X11*/
+#undef FEAT_CYGWIN_WIN32_CLIPBOARD
diff -Naur vim73.orig/src/config.mk.in vim73/src/config.mk.in
--- vim73.orig/src/config.mk.in	2010-07-17 15:28:51.000000000 +0000
+++ vim73/src/config.mk.in	2013-08-04 19:09:10.150611909 +0000
@@ -30,6 +30,7 @@
 CPP		= @CPP@
 CPP_MM		= @CPP_MM@
 DEPEND_CFLAGS_FILTER = @DEPEND_CFLAGS_FILTER@
+LINK_AS_NEEDED	= @LINK_AS_NEEDED@
 X_CFLAGS	= @X_CFLAGS@
 X_LIBS_DIR	= @X_LIBS@
 X_PRE_LIBS	= @X_PRE_LIBS@
diff -Naur vim73.orig/src/configure.in vim73/src/configure.in
--- vim73.orig/src/configure.in	2010-08-13 14:15:17.000000000 +0000
+++ vim73/src/configure.in	2013-08-04 19:09:10.157278556 +0000
@@ -28,6 +28,16 @@
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
 
+dnl Check for the flag that fails if stuff are missing.
+
+AC_MSG_CHECKING(--enable-fail-if-missing argument)
+AC_ARG_ENABLE(fail_if_missing,
+	[  --enable-fail-if-missing    Fail if dependencies on additional features
+     specified on the command line are missing.], 
+	[fail_if_missing="yes"],
+	[fail_if_missing="no"])
+AC_MSG_RESULT($fail_if_missing)
+
 dnl Set default value for CFLAGS if none is defined or it's empty
 if test -z "$CFLAGS"; then
   CFLAGS="-O"
@@ -296,7 +306,7 @@
 AC_SUBST(line_break)
 
 if test "$cf_cv_ebcdic" = "yes"; then
-dnl If we have EBCDIC we most likley have z/OS Unix, let's test it!
+dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
 AC_MSG_CHECKING(for z/OS Unix)
 case `uname` in
     OS/390)	zOSUnix="yes";
@@ -319,15 +329,18 @@
 		  echo ""
 		  echo "------------------------------------------"
 		  echo " On z/OS Unix, the environment variable"
-		  echo " __CC_${ccn}MODE must be set to \"1\"!"
+		  echo " _CC_${ccn}MODE must be set to \"1\"!"
 		  echo " Do:"
 		  echo "    export _CC_${ccn}MODE=1"
 		  echo " and then call configure again."
 		  echo "------------------------------------------"
 		  exit 1
 		fi
-		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
-                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+		# Set CFLAGS for configure process.
+		# This will be reset later for config.mk.
+		# Use haltonmsg to force error for missing H files.
+		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
+		LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
 		AC_MSG_RESULT(yes)
 		;;
     *)		zOSUnix="no";
@@ -442,31 +455,31 @@
 
   LUA_INC=
   if test "X$vi_cv_path_lua_pfx" != "X"; then
+    dnl -- try to find Lua executable
+    AC_PATH_PROG(vi_cv_path_lua, lua)
+    if test "X$vi_cv_path_lua" != "X"; then
+      dnl -- find Lua version
+      AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
+      [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
+    fi
     AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
     if test -f $vi_cv_path_lua_pfx/include/lua.h; then
       AC_MSG_RESULT(yes)
     else
       AC_MSG_RESULT(no)
-      dnl -- try to find Lua executable
-      AC_PATH_PROG(vi_cv_path_lua, lua)
-      if test "X$vi_cv_path_lua" != "X"; then
-        dnl -- find Lua version
-        AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
-        [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
-        AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
-        if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
-          AC_MSG_RESULT(yes)
-          LUA_INC=/lua$vi_cv_version_lua
-        else
-          AC_MSG_RESULT(no)
-          vi_cv_path_lua_pfx=
-        fi
+      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
+      if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+        AC_MSG_RESULT(yes)
+        LUA_INC=/lua$vi_cv_version_lua
+      else
+        AC_MSG_RESULT(no)
+        vi_cv_path_lua_pfx=
       fi
     fi
   fi
 
   if test "X$vi_cv_path_lua_pfx" != "X"; then
-    if test "X$vi_cv_version_lua" != "X"; then
+    if test "X$LUA_INC" != "X"; then
       dnl Test alternate location using version
       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
     else
@@ -478,19 +491,38 @@
     LUA_PRO="if_lua.pro"
     AC_DEFINE(FEAT_LUA)
     if test "$enable_luainterp" = "dynamic"; then
-      dnl Determine the SONAME for the current version, but fallback to
-      dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found.
-      for i in 0 1 2 3 4 5 6 7 8 9; do
-	if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
-	  LUA_SONAME=".$i"
-	  break
-	fi
-      done
+      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
+	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
+      else
+	multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
+	if test "X$multiarch" != "X"; then
+	  lib_multiarch="lib/${multiarch}"
+	fi
+	dnl Determine the sover for the current version, but fallback to
+	dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
+	for subdir in "${lib_multiarch}" lib64 lib; do
+	  if test -z "$subdir"; then
+	    continue
+	  fi
+	  for sover in "${vi_cv_version_lua}.so" "-${vi_cv_version_lua}.so" ".so.${vi_cv_version_lua}"; do
+	    for i in .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 ""; do
+	      if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${sover}$i"; then
+		sover2="$i"
+		break 3
+	      fi
+	    done
+	  done
+	done
+	vi_cv_dll_name_lua="liblua${sover}$sover2"
+      fi
       AC_DEFINE(DYNAMIC_LUA)
       LUA_LIBS=""
-      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
+      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
+    AC_MSG_ERROR([could not configure lua])
+  fi
   AC_SUBST(LUA_SRC)
   AC_SUBST(LUA_OBJ)
   AC_SUBST(LUA_PRO)
@@ -568,13 +600,27 @@
 	SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
       else
 	AC_MSG_RESULT(no)
-	AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
-	if test -f /usr/include/plt/scheme.h; then
+	AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
+	if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
 	  AC_MSG_RESULT(yes)
-	  SCHEME_INC=/usr/include/plt
+	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
 	else
 	  AC_MSG_RESULT(no)
-	  vi_cv_path_mzscheme_pfx=
+	  AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
+	  if test -f /usr/include/plt/scheme.h; then
+	    AC_MSG_RESULT(yes)
+	    SCHEME_INC=/usr/include/plt
+	  else
+	    AC_MSG_RESULT(no)
+	    AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
+	    if test -f /usr/include/racket/scheme.h; then
+	      AC_MSG_RESULT(yes)
+	      SCHEME_INC=/usr/include/racket
+	    else
+	      AC_MSG_RESULT(no)
+	      vi_cv_path_mzscheme_pfx=
+	    fi
+	  fi
 	fi
       fi
     fi
@@ -582,17 +628,28 @@
 
   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
     if test "x$MACOSX" = "xyes"; then
-      MZSCHEME_LIBS="-framework PLT_MzScheme"
+      MZSCHEME_LIBS="-framework Racket"
+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
     else
       dnl Using shared objects
       if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
 	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
+	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
       else
         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
       fi
@@ -605,17 +662,48 @@
 	MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib"
       fi
     fi
+
+    AC_MSG_CHECKING(for racket collects directory)
     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
-      SCHEME_COLLECTS=lib/plt/
+      SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
+    else
+      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
+	SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
+      else
+	if test -d $vi_cv_path_mzscheme_pfx/share/racket/collects; then
+	  SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
+	else
+	  if test -d $vi_cv_path_mzscheme_pfx/collects; then
+	    SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
+	  fi
+	fi
+      fi
     fi
-    if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
-      dnl need to generate bytecode for MzScheme base
+    if test "X$SCHEME_COLLECTS" != "X" ; then
+      AC_MSG_RESULT(${SCHEME_COLLECTS})
+    else
+      AC_MSG_RESULT(not found)
+    fi
+
+    AC_MSG_CHECKING(for mzscheme_base.c)
+    if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
       MZSCHEME_EXTRA="mzscheme_base.c"
+    else
+      if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
+	MZSCHEME_EXTRA="mzscheme_base.c"
+      fi
+    fi
+    if test "X$MZSCHEME_EXTRA" != "X" ; then
+      dnl need to generate bytecode for MzScheme base
       MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
+      AC_MSG_RESULT(needed)
+    else
+      AC_MSG_RESULT(not needed)
     fi
+
     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
-      -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'"
+      -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
     MZSCHEME_SRC="if_mzsch.c"
     MZSCHEME_OBJ="objects/if_mzsch.o"
     MZSCHEME_PRO="if_mzsch.pro"
@@ -688,6 +776,7 @@
       ldflags_save=$LDFLAGS
       CFLAGS="$CFLAGS $perlcppflags"
       LIBS="$LIBS $perllibs"
+      perlldflags=`echo "$perlldflags" | sed -e 's/^ *//g'`
       LDFLAGS="$perlldflags $LDFLAGS"
       AC_TRY_LINK(,[ ],
 	     AC_MSG_RESULT(yes); perl_ok=yes,
@@ -701,7 +790,9 @@
 	  PERL_CFLAGS=`echo "$perlcppflags" | sed -e 's/-pipe //' -e 's/-W[[^ ]]*//'`
 	fi
 	if test "X$perlldflags" != "X"; then
-	  LDFLAGS="$perlldflags $LDFLAGS"
+	  if test "X`echo \"$LDFLAGS\" | grep -F -e \"$perlldflags\"`" = "X"; then
+	    LDFLAGS="$perlldflags $LDFLAGS"
+	  fi
 	fi
 	PERL_LIBS=$perllibs
 	PERL_SRC="auto/if_perl.c if_perlsfio.c"
@@ -747,6 +838,10 @@
       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
+    AC_MSG_ERROR([could not configure perl])
+  fi
 fi
 AC_SUBST(shrpenv)
 AC_SUBST(PERL_SRC)
@@ -762,7 +857,7 @@
 AC_MSG_RESULT($enable_pythoninterp)
 if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
   dnl -- find the python executable
-  AC_PATH_PROG(vi_cv_path_python, python)
+  AC_PATH_PROGS(vi_cv_path_python, python2 python)
   if test "X$vi_cv_path_python" != "X"; then
 
     dnl -- get its version number
@@ -771,10 +866,10 @@
 	    ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
     ]])
 
-    dnl -- it must be at least version 1.4
-    AC_MSG_CHECKING(Python is 1.4 or better)
+    dnl -- it must be at least version 2.3
+    AC_MSG_CHECKING(Python is 2.3 or better)
     if ${vi_cv_path_python} -c \
-	"import sys; sys.exit(${vi_cv_var_python_version} < 1.4)"
+	"import sys; sys.exit(${vi_cv_var_python_version} < 2.3)"
     then
       AC_MSG_RESULT(yep)
 
@@ -807,14 +902,19 @@
       AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
       [
 	vi_cv_path_python_conf=
-	for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
-	  for subdir in lib64 lib share; do
-	    d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
-	    if test -d "$d" && test -f "$d/config.c"; then
-	      vi_cv_path_python_conf="$d"
-	    fi
+	d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
+	if test -d "$d" && test -f "$d/config.c"; then
+	  vi_cv_path_python_conf="$d"
+	else
+	  for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
+	    for subdir in lib64 lib share; do
+	      d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
+	      if test -d "$d" && test -f "$d/config.c"; then
+		vi_cv_path_python_conf="$d"
+	      fi
+	    done
 	  done
-	done
+	fi
       ])
 
       PYTHON_CONFDIR="${vi_cv_path_python_conf}"
@@ -835,6 +935,7 @@
 	@echo "python_LIBS='$(LIBS)'"
 	@echo "python_SYSLIBS='$(SYSLIBS)'"
 	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
+	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
 	@echo "python_INSTSONAME='$(INSTSONAME)'"
 eof
 	    dnl -- delete the lines from make about Entering/Leaving directory
@@ -855,23 +956,21 @@
 	    fi
 	])
 
+	if test "X$python_DLLLIBRARY" != "X"; then
+	  python_INSTSONAME="$python_DLLLIBRARY"
+	fi
 	PYTHON_LIBS="${vi_cv_path_python_plibs}"
 	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
+	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
 	else
-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
+	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME='\"${vi_cv_path_python_pfx}\"'"
 	fi
 	PYTHON_SRC="if_python.c"
-	dnl For Mac OSX 10.2 config.o is included in the Python library.
-	if test "x$MACOSX" = "xyes"; then
-	  PYTHON_OBJ="objects/if_python.o"
-	else
-	  PYTHON_OBJ="objects/if_python.o objects/py_config.o"
-	fi
+	PYTHON_OBJ="objects/if_python.o"
 	if test "${vi_cv_var_python_version}" = "1.4"; then
 	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
 	fi
-	PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
+    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
 
 	dnl On FreeBSD linking with "-pthread" is required to use threads.
 	dnl _THREAD_SAFE must be used for compiling then.
@@ -890,6 +989,9 @@
 	    threadsafe_flag="-D_THREAD_SAFE"
 	    thread_lib="-pthread"
 	  fi
+	  if test "`(uname) 2>/dev/null`" = SunOS; then
+	    threadsafe_flag="-pthreads"
+	  fi
 	fi
 	libs_save_old=$LIBS
 	if test -n "$threadsafe_flag"; then
@@ -926,12 +1028,15 @@
 	  PYTHON_LIBS=
 	  PYTHON_CFLAGS=
 	fi
-
       fi
     else
       AC_MSG_RESULT(too old)
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
+    AC_MSG_ERROR([could not configure python])
+  fi
 fi
 
 AC_SUBST(PYTHON_CONFDIR)
@@ -949,7 +1054,7 @@
 AC_MSG_RESULT($enable_python3interp)
 if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
   dnl -- find the python3 executable
-  AC_PATH_PROG(vi_cv_path_python3, python3)
+  AC_PATH_PROGS(vi_cv_path_python3, python3 python)
   if test "X$vi_cv_path_python3" != "X"; then
 
     dnl -- get its version number
@@ -958,144 +1063,178 @@
           ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
     ]])
 
-    dnl -- find where python3 thinks it was installed
-    AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
-    [ vi_cv_path_python3_pfx=`
-     ${vi_cv_path_python3} -c \
-     "import sys; print(sys.prefix)"` ])
-
-    dnl -- and where it thinks it runs
-    AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
-    [ vi_cv_path_python3_epfx=`
-     ${vi_cv_path_python3} -c \
-     "import sys; print(sys.exec_prefix)"` ])
-
-    dnl -- python3's internal library path
-
-    AC_CACHE_VAL(vi_cv_path_python3path,
-    [ vi_cv_path_python3path=`
-     unset PYTHONPATH;
-     ${vi_cv_path_python3} -c \
-     "import sys, string; print(':'.join(sys.path))"` ])
-
-    dnl -- where the Python implementation library archives are
-
-    AC_ARG_WITH(python3-config-dir,
-     [  --with-python3-config-dir=PATH  Python's config directory],
-     [ vi_cv_path_python3_conf="${withval}" ] )
-
-    AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
-    [
-     vi_cv_path_python3_conf=
-     for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
-       for subdir in lib64 lib share; do
-         d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
-         if test -d "$d" && test -f "$d/config.c"; then
-           vi_cv_path_python3_conf="$d"
-         fi
-       done
-     done
-    ])
-
-    PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
-
-    if test "X$PYTHON3_CONFDIR" = "X"; then
-      AC_MSG_RESULT([can't find it!])
-    else
+    dnl -- it must be at least version 3
+    AC_MSG_CHECKING(Python is 3.0 or better)
+    if ${vi_cv_path_python3} -c \
+      "import sys; sys.exit(${vi_cv_var_python3_version} < 3.0)"
+    then
+      AC_MSG_RESULT(yep)
 
-      dnl -- we need to examine Python's config/Makefile too
-      dnl    see what the interpreter is built from
-      AC_CACHE_VAL(vi_cv_path_python3_plibs,
+      dnl -- get abiflags for python 3.2 or higher (PEP 3149)
+      AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
       [
-          pwd=`pwd`
-          tmp_mkf="$pwd/config-PyMake$$"
-          cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
+       vi_cv_var_python3_abiflags=
+       if ${vi_cv_path_python3} -c \
+           "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
+       then
+         vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \    
+           "import sys; print(sys.abiflags)"`
+       fi ])
+  
+      dnl -- find where python3 thinks it was installed
+      AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
+      [ vi_cv_path_python3_pfx=`
+       ${vi_cv_path_python3} -c \
+       "import sys; print(sys.prefix)"` ])
+  
+      dnl -- and where it thinks it runs
+      AC_CACHE_CHECK(Python's execution prefix,vi_cv_path_python3_epfx,
+      [ vi_cv_path_python3_epfx=`
+       ${vi_cv_path_python3} -c \
+       "import sys; print(sys.exec_prefix)"` ])
+  
+      dnl -- python3's internal library path
+  
+      AC_CACHE_VAL(vi_cv_path_python3path,
+      [ vi_cv_path_python3path=`
+       unset PYTHONPATH;
+       ${vi_cv_path_python3} -c \
+       "import sys, string; print(':'.join(sys.path))"` ])
+  
+      dnl -- where the Python implementation library archives are
+  
+      AC_ARG_WITH(python3-config-dir,
+       [  --with-python3-config-dir=PATH  Python's config directory],
+       [ vi_cv_path_python3_conf="${withval}" ] )
+  
+      AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
+      [
+       vi_cv_path_python3_conf=
+       config_dir="config"
+       if test "${vi_cv_var_python3_abiflags}" != ""; then
+         config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+       fi
+       d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
+       if test -d "$d" && test -f "$d/config.c"; then
+         vi_cv_path_python3_conf="$d"
+       else
+         for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+	   for subdir in lib64 lib share; do
+	     d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
+	     if test -d "$d" && test -f "$d/config.c"; then
+	       vi_cv_path_python3_conf="$d"
+	     fi
+	   done
+         done
+       fi
+      ])
+  
+      PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
+  
+      if test "X$PYTHON3_CONFDIR" = "X"; then
+        AC_MSG_RESULT([can't find it!])
+      else
+  
+        dnl -- we need to examine Python's config/Makefile too
+        dnl    see what the interpreter is built from
+        AC_CACHE_VAL(vi_cv_path_python3_plibs,
+        [
+            pwd=`pwd`
+            tmp_mkf="$pwd/config-PyMake$$"
+            cat -- "${PYTHON3_CONFDIR}/Makefile" - <<'eof' >"${tmp_mkf}"
 __:
 	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
 	@echo "python3_LIBS='$(LIBS)'"
 	@echo "python3_SYSLIBS='$(SYSLIBS)'"
-	@echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
+	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
 	@echo "python3_INSTSONAME='$(INSTSONAME)'"
 eof
-          dnl -- delete the lines from make about Entering/Leaving directory
-          eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
-          rm -f -- "${tmp_mkf}"
-          vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
-          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
-          dnl remove -ltermcap, it can conflict with an earlier -lncurses
-          vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
-          vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
-      ])
-
-      PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
-      if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}"
-      else
-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
-      fi
-      PYTHON3_SRC="if_python3.c"
-      dnl For Mac OSX 10.2 config.o is included in the Python library.
-      if test "x$MACOSX" = "xyes"; then
+            dnl -- delete the lines from make about Entering/Leaving directory
+            eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+            rm -f -- "${tmp_mkf}"
+	    vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
+            vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+            dnl remove -ltermcap, it can conflict with an earlier -lncurses
+            vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+            vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+        ])
+  
+        if test "X$python3_DLLLIBRARY" != "X"; then
+	  python3_INSTSONAME="$python3_DLLLIBRARY"
+        fi
+        PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+        if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+        else
+          PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME='L\"${vi_cv_path_python3_pfx}\"'"
+        fi
+        PYTHON3_SRC="if_python3.c"
         PYTHON3_OBJ="objects/if_python3.o"
-      else
-        PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
-      fi
-
-      dnl On FreeBSD linking with "-pthread" is required to use threads.
-      dnl _THREAD_SAFE must be used for compiling then.
-      dnl The "-pthread" is added to $LIBS, so that the following check for
-      dnl sigaltstack() will look in libc_r (it's there in libc!).
-      dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS.  GCC
-      dnl will then define target-specific defines, e.g., -D_REENTRANT.
-      dnl Don't do this for Mac OSX, -pthread will generate a warning.
-      AC_MSG_CHECKING([if -pthread should be used])
-      threadsafe_flag=
-      thread_lib=
-      dnl if test "x$MACOSX" != "xyes"; then
-      if test "`(uname) 2>/dev/null`" != Darwin; then
-        test "$GCC" = yes && threadsafe_flag="-pthread"
-        if test "`(uname) 2>/dev/null`" = FreeBSD; then
-          threadsafe_flag="-D_THREAD_SAFE"
-          thread_lib="-pthread"
+  
+        dnl On FreeBSD linking with "-pthread" is required to use threads.
+        dnl _THREAD_SAFE must be used for compiling then.
+        dnl The "-pthread" is added to $LIBS, so that the following check for
+        dnl sigaltstack() will look in libc_r (it's there in libc!).
+        dnl Otherwise, when using GCC, try adding -pthread to $CFLAGS.  GCC
+        dnl will then define target-specific defines, e.g., -D_REENTRANT.
+        dnl Don't do this for Mac OSX, -pthread will generate a warning.
+        AC_MSG_CHECKING([if -pthread should be used])
+        threadsafe_flag=
+        thread_lib=
+        dnl if test "x$MACOSX" != "xyes"; then
+        if test "`(uname) 2>/dev/null`" != Darwin; then
+          test "$GCC" = yes && threadsafe_flag="-pthread"
+          if test "`(uname) 2>/dev/null`" = FreeBSD; then
+            threadsafe_flag="-D_THREAD_SAFE"
+            thread_lib="-pthread"
+          fi
+          if test "`(uname) 2>/dev/null`" = SunOS; then
+            threadsafe_flag="-pthreads"
+          fi
         fi
-      fi
-      libs_save_old=$LIBS
-      if test -n "$threadsafe_flag"; then
+        libs_save_old=$LIBS
+        if test -n "$threadsafe_flag"; then
+          cflags_save=$CFLAGS
+          CFLAGS="$CFLAGS $threadsafe_flag"
+          LIBS="$LIBS $thread_lib"
+          AC_TRY_LINK(,[ ],
+             AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
+             AC_MSG_RESULT(no); LIBS=$libs_save_old
+             )
+          CFLAGS=$cflags_save
+        else
+          AC_MSG_RESULT(no)
+        fi
+  
+        dnl check that compiling a simple program still works with the flags
+        dnl added for Python.
+        AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
         cflags_save=$CFLAGS
-        CFLAGS="$CFLAGS $threadsafe_flag"
-        LIBS="$LIBS $thread_lib"
+        libs_save=$LIBS
+        CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+        LIBS="$LIBS $PYTHON3_LIBS"
         AC_TRY_LINK(,[ ],
-           AC_MSG_RESULT(yes); PYTHON3_CFLAGS="$PYTHON3_CFLAGS $threadsafe_flag",
-           AC_MSG_RESULT(no); LIBS=$libs_save_old
-           )
+               AC_MSG_RESULT(yes); python3_ok=yes,
+               AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
         CFLAGS=$cflags_save
-      else
-        AC_MSG_RESULT(no)
-      fi
-
-      dnl check that compiling a simple program still works with the flags
-      dnl added for Python.
-      AC_MSG_CHECKING([if compile and link flags for Python 3 are sane])
-      cflags_save=$CFLAGS
-      libs_save=$LIBS
-      CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
-      LIBS="$LIBS $PYTHON3_LIBS"
-      AC_TRY_LINK(,[ ],
-             AC_MSG_RESULT(yes); python3_ok=yes,
-             AC_MSG_RESULT(no: PYTHON3 DISABLED); python3_ok=no)
-      CFLAGS=$cflags_save
-      LIBS=$libs_save
-      if test "$python3_ok" = yes; then
-        AC_DEFINE(FEAT_PYTHON3)
-      else
-        LIBS=$libs_save_old
-        PYTHON3_SRC=
-        PYTHON3_OBJ=
-        PYTHON3_LIBS=
-        PYTHON3_CFLAGS=
+        LIBS=$libs_save
+        if test "$python3_ok" = yes; then
+          AC_DEFINE(FEAT_PYTHON3)
+        else
+          LIBS=$libs_save_old
+          PYTHON3_SRC=
+          PYTHON3_OBJ=
+          PYTHON3_LIBS=
+          PYTHON3_CFLAGS=
+        fi
       fi
+    else
+      AC_MSG_RESULT(too old)
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a "$python3_ok" != "yes"; then
+    AC_MSG_ERROR([could not configure python3])
+  fi
 fi
 
 AC_SUBST(PYTHON3_CONFDIR)
@@ -1109,28 +1248,31 @@
 if test "$python_ok" = yes && test "$python3_ok" = yes; then
   AC_DEFINE(DYNAMIC_PYTHON)
   AC_DEFINE(DYNAMIC_PYTHON3)
-  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL)
+  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
   cflags_save=$CFLAGS
-  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
   ldflags_save=$LDFLAGS
-  LDFLAGS="$LDFLAGS -ldl"
+  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+  LDFLAGS="-ldl $LDFLAGS"
   AC_RUN_IFELSE([
     #include <dlfcn.h>
     /* If this program fails, then RTLD_GLOBAL is needed.
      * RTLD_GLOBAL will be used and then it is not possible to
      * have both python versions enabled in the same vim instance.
-     * Only the first pyhton version used will be switched on.
+     * Only the first python version used will be switched on.
      */
 
-    int no_rtl_global_needed_for(char *python_instsoname)
+    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
     {
       int needed = 0;
       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
       if (pylib != 0)
       {
+          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
           void (*init)(void) = dlsym(pylib, "Py_Initialize");
           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
           void (*final)(void) = dlsym(pylib, "Py_Finalize");
+          (*pfx)(prefix);
           (*init)();
           needed = (*simple)("import termios") == -1;
           (*final)();
@@ -1142,13 +1284,61 @@
     int main(int argc, char** argv)
     {
       int not_needed = 0;
-      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
+      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
             not_needed = 1;
       return !not_needed;
     }],
     [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
+
   CFLAGS=$cflags_save
   LDFLAGS=$ldflags_save
+
+  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
+  cflags_save=$CFLAGS
+  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
+  ldflags_save=$LDFLAGS
+  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
+  LDFLAGS="-ldl $LDFLAGS"
+  AC_RUN_IFELSE([
+    #include <dlfcn.h>
+    #include <wchar.h>
+    /* If this program fails, then RTLD_GLOBAL is needed.
+     * RTLD_GLOBAL will be used and then it is not possible to
+     * have both python versions enabled in the same vim instance.
+     * Only the first python version used will be switched on.
+     */
+
+    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
+    {
+      int needed = 0;
+      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
+      if (pylib != 0)
+      {
+          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
+          void (*init)(void) = dlsym(pylib, "Py_Initialize");
+          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
+          void (*final)(void) = dlsym(pylib, "Py_Finalize");
+          (*pfx)(prefix);
+          (*init)();
+          needed = (*simple)("import termios") == -1;
+          (*final)();
+          dlclose(pylib);
+      }
+      return !needed;
+    }
+
+    int main(int argc, char** argv)
+    {
+      int not_needed = 0;
+      if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
+            not_needed = 1;
+      return !not_needed;
+    }],
+    [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
+
+  CFLAGS=$cflags_save
+  LDFLAGS=$ldflags_save
+
   PYTHON_SRC="if_python.c"
   PYTHON_OBJ="objects/if_python.o"
   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
@@ -1290,6 +1480,9 @@
       AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
     fi
   fi
+  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
+    AC_MSG_ERROR([could not configure Tcl])
+  fi
 fi
 AC_SUBST(TCL_SRC)
 AC_SUBST(TCL_OBJ)
@@ -1299,67 +1492,78 @@
 
 AC_MSG_CHECKING(--enable-rubyinterp argument)
 AC_ARG_ENABLE(rubyinterp,
-	[  --enable-rubyinterp     Include Ruby interpreter.], ,
+	[  --enable-rubyinterp[=OPTS]     Include Ruby interpreter.  [default=no] [OPTS=no/yes/dynamic]], ,
 	[enable_rubyinterp="no"])
 AC_MSG_RESULT($enable_rubyinterp)
-if test "$enable_rubyinterp" = "yes"; then
+if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
   AC_MSG_CHECKING(--with-ruby-command argument)
+  AC_SUBST(vi_cv_path_ruby)
   AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
-	RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
+	RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
 	RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
-  AC_SUBST(vi_cv_path_ruby)
   AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
   if test "X$vi_cv_path_ruby" != "X"; then
     AC_MSG_CHECKING(Ruby version)
     if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
       AC_MSG_RESULT(OK)
+      AC_MSG_CHECKING(Ruby rbconfig)
+      ruby_rbconfig="RbConfig"
+      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
+	ruby_rbconfig="Config"
+      fi
+      AC_MSG_RESULT($ruby_rbconfig)
       AC_MSG_CHECKING(Ruby header files)
-      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null`
+      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG[['rubyhdrdir']] || $ruby_rbconfig::CONFIG[['archdir']] || \\$hdrdir" 2>/dev/null`
       if test "X$rubyhdrdir" != "X"; then
 	AC_MSG_RESULT($rubyhdrdir)
 	RUBY_CFLAGS="-I$rubyhdrdir"
-        rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'`
+        rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['arch']]"`
         if test -d "$rubyhdrdir/$rubyarch"; then
           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
         fi
-        rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'`
+        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
         RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
-	rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'`
+	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
 	if test "X$rubylibs" != "X"; then
 	  RUBY_LIBS="$rubylibs"
 	fi
-	librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
-	if test -f "$rubyhdrdir/$librubyarg"; then
-	  librubyarg="$rubyhdrdir/$librubyarg"
-	else
-	  rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
-	  if test -f "$rubylibdir/$librubyarg"; then
-	    librubyarg="$rubylibdir/$librubyarg"
-	  elif test "$librubyarg" = "libruby.a"; then
-	    dnl required on Mac OS 10.3 where libruby.a doesn't exist
-	    librubyarg="-lruby"
-	  else
-	    librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
-	  fi
+	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
+	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
+	rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
+	if test -f "$rubylibdir/$librubya"; then
+	  librubyarg="$librubyarg"
+	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+	elif test "$librubyarg" = "libruby.a"; then
+	  dnl required on Mac OS 10.3 where libruby.a doesn't exist
+	  librubyarg="-lruby"
+	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
 	fi
 
 	if test "X$librubyarg" != "X"; then
 	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
 	fi
-	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'`
+	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
 	if test "X$rubyldflags" != "X"; then
 	  dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
 	  dnl be included if requested by passing --with-mac-arch to
 	  dnl configure, so strip these flags first (if present)
 	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
 	  if test "X$rubyldflags" != "X"; then
-	    LDFLAGS="$rubyldflags $LDFLAGS"
+	    if test "X`echo \"$LDFLAGS\" | grep -F -e \"$rubyldflags\"`" = "X"; then
+	      LDFLAGS="$rubyldflags $LDFLAGS"
+	    fi
 	  fi
 	fi
 	RUBY_SRC="if_ruby.c"
 	RUBY_OBJ="objects/if_ruby.o"
 	RUBY_PRO="if_ruby.pro"
 	AC_DEFINE(FEAT_RUBY)
+	if test "$enable_rubyinterp" = "dynamic"; then
+	  libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
+	  AC_DEFINE(DYNAMIC_RUBY)
+	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
+	  RUBY_LIBS=
+	fi
       else
 	AC_MSG_RESULT(not found; disabling Ruby)
       fi
@@ -1367,6 +1571,10 @@
       AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
     fi
   fi
+
+  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
+    AC_MSG_ERROR([could not configure Ruby])
+  fi
 fi
 AC_SUBST(RUBY_SRC)
 AC_SUBST(RUBY_OBJ)
@@ -1576,7 +1784,12 @@
     dnl Check that the X11 header files don't use implicit declarations
     AC_MSG_CHECKING(if X11 header files implicitly declare return values)
     cflags_save=$CFLAGS
-    CFLAGS="$CFLAGS $X_CFLAGS -Werror"
+    dnl -Werror is GCC only, others like Solaris Studio might not like it
+    if test "$GCC" = yes; then
+      CFLAGS="$CFLAGS $X_CFLAGS -Werror"
+    else
+      CFLAGS="$CFLAGS $X_CFLAGS"
+    fi
     AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
 	AC_MSG_RESULT(no),
 	CFLAGS="$CFLAGS -Wno-implicit-int"
@@ -2069,8 +2282,10 @@
     dnl Remove "-L" from before $GUI_LIB_LOC if it's there
     GUI_LIB_LOC="`echo $GUI_LIB_LOC|sed 's%-L%%g'`"
 
+    dnl Ubuntu has libXm.so in /usr/lib/i386-linux-gnu and elsewhere.  The
+    dnl linker will figure out which one to use, we only check if one exists.
     AC_MSG_CHECKING(for location of Motif GUI libs)
-    gui_libs="`echo $x_libraries|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
+    gui_libs="`echo $x_libraries|sed 's%/[^/][^/]*$%%'` `echo "$gui_XXX" | sed s/XXX/lib/g` /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu `echo "$GUI_INC_LOC" | sed s/include/lib/` $GUI_LIB_LOC"
     GUI_LIB_LOC=
     for try in $gui_libs; do
       for libtry in "$try"/libXm.a "$try"/libXm.so* "$try"/libXm.sl "$try"/libXm.dylib; do
@@ -2081,7 +2296,9 @@
     done
     if test -n "$GUI_LIB_LOC"; then
       dnl Remove /usr/lib, it causes trouble on some systems
-      if test "$GUI_LIB_LOC" = /usr/lib; then
+      if test "$GUI_LIB_LOC" = /usr/lib \
+	   -o "$GUI_LIB_LOC" = /usr/lib/i386-linux-gnu \
+	   -o "$GUI_LIB_LOC" = /usr/lib/x86_64-linux-gnu; then
 	GUI_LIB_LOC=
 	AC_MSG_RESULT(in default path)
       else
@@ -2248,10 +2465,15 @@
 if test -z "$SKIP_MOTIF"; then
   cppflags_save=$CPPFLAGS
   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
-  AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
-		   Xm/UnhighlightT.h Xm/Notebook.h)
+  if test "$zOSUnix" = "yes"; then
+	xmheader="Xm/Xm.h"
+  else
+	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
+	   Xm/UnhighlightT.h Xm/Notebook.h"  
+  fi    
+  AC_CHECK_HEADERS($xmheader)
 
-  if test $ac_cv_header_Xm_XpmP_h = yes; then
+  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
     dnl Solaris uses XpmAttributes_21, very annoying.
     AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
     AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
@@ -2303,6 +2525,21 @@
 dnl end of GUI-checking
 dnl ---------------------------------------------------------------------------
 
+dnl Check for Cygwin, which needs an extra source file if not using X11
+AC_MSG_CHECKING(for CYGWIN environment)
+case `uname` in
+    CYGWIN*)    CYGWIN=yes; AC_MSG_RESULT(yes)
+                AC_MSG_CHECKING(for CYGWIN clipboard support)
+                if test "x$with_x" = "xno" ; then
+                  OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
+                  AC_MSG_RESULT(yes)
+                  AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
+                else
+                  AC_MSG_RESULT(no - using X11)
+                fi ;;
+
+    *)          CYGWIN=no; AC_MSG_RESULT(no);;
+esac
 
 dnl Only really enable hangul input when GUI and XFONTSET are available
 if test "$enable_hangulinput" = "yes"; then
@@ -2529,13 +2766,14 @@
   AC_MSG_RESULT([empty: automatic terminal library selection])
   dnl  On HP-UX 10.10 termcap or termlib should be used instead of
   dnl  curses, because curses is much slower.
-  dnl  Newer versions of ncurses are preferred over anything.
+  dnl  Newer versions of ncurses are preferred over anything, except
+  dnl  when tinfo has been split off, it contains all we need.
   dnl  Older versions of ncurses have bugs, get a new one!
   dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
   dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
   case "`uname -s 2>/dev/null`" in
-	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
-	*)	tlibs="ncurses termlib termcap curses";;
+	OSF1|SCO_SV)	tlibs="tinfo ncurses curses termlib termcap";;
+	*)	tlibs="tinfo ncurses termlib termcap curses";;
   esac
   for libname in $tlibs; do
     AC_CHECK_LIB(${libname}, tgetent,,)
@@ -2801,7 +3039,7 @@
 if test "x$vim_cv_tty_group" != "xworld" ; then
   AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
   if test "x$vim_cv_tty_mode" = "x" ; then
-    AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (propably 0620)])
+    AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)])
   else
     AC_DEFINE(PTYMODE, 0620)
   fi
@@ -2865,7 +3103,7 @@
 dnl Check for functions in one big call, to reduce the size of configure.
 dnl Can only be used for functions that do not require any include.
 AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
-	getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
 	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
 	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
 	sigvec strcasecmp strerror strftime stricmp strncasecmp \
@@ -2975,6 +3213,7 @@
 
 dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
 dnl when -lacl works, also try to use -lattr (required for Debian).
+dnl On Solaris, use the acl_get/set functions in libsec, if present.
 AC_MSG_CHECKING(--disable-acl argument)
 AC_ARG_ENABLE(acl,
 	[  --disable-acl           Don't check for ACL support.],
@@ -2997,6 +3236,7 @@
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
 	AC_MSG_RESULT(no))
 
+AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
 AC_MSG_CHECKING(for Solaris ACL support)
 AC_TRY_LINK([
 #ifdef HAVE_SYS_ACL_H
@@ -3004,7 +3244,7 @@
 #endif], [acl("foo", GETACLCNT, 0, NULL);
 	],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
-	AC_MSG_RESULT(no))
+	AC_MSG_RESULT(no)))
 
 AC_MSG_CHECKING(for AIX ACL support)
 AC_TRY_LINK([
@@ -3143,7 +3383,7 @@
 [#include <sys/types.h>
 #include <sys/sysinfo.h>],
 [	struct sysinfo sinfo;
- 	sinfo.mem_unit = 1;
+	sinfo.mem_unit = 1;
 	],
 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SYSINFO_MEM_UNIT),
 	AC_MSG_RESULT(no))
@@ -3180,7 +3420,7 @@
 }],
 AC_MSG_RESULT(ok),
 AC_MSG_ERROR([WRONG!  uint32_t not defined correctly.]),
-AC_MSG_ERROR([could not compile program using uint32_t.]))
+AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
 
 dnl Check for memmove() before bcopy(), makes memmove() be used when both are
 dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
@@ -3280,7 +3520,7 @@
 AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
 
 dnl Check how we can run ctags.  Default to "ctags" when nothing works.
-dnl --version for Exuberant ctags (preferred)
+dnl Use --version to detect Exuberant ctags (preferred)
 dnl       Add --fields=+S to get function signatures for omni completion.
 dnl -t for typedefs (many ctags have this)
 dnl -s for static functions (Elvis ctags only?)
@@ -3290,6 +3530,10 @@
 test -f tags && mv tags tags.save
 if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
   TAGPRG="ctags -I INIT+ --fields=+S"
+elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+  TAGPRG="exctags -I INIT+ --fields=+S"
+elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
 else
   TAGPRG="ctags"
   (eval etags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
@@ -3454,6 +3698,13 @@
   else
     AC_MSG_RESULT(no)
   fi
+  dnl As mentioned above, tiny build implies os_macosx.m isn't needed.  
+  dnl Exclude it from OS_EXTRA_SRC so that linker won't complain about
+  dnl missing Objective-C symbols.
+  if test "x$features" = "xtiny"; then
+    OS_EXTRA_SRC=`echo "$OS_EXTRA_SRC" | sed -e 's+os_macosx.m++'`
+    OS_EXTRA_OBJ=`echo "$OS_EXTRA_OBJ" | sed -e 's+objects/os_macosx.o++'`
+  fi
 fi
 if test "x$MACARCH" = "xboth" && test "x$GUITYPE" = "xCARBONGUI"; then
   LDFLAGS="$LDFLAGS -isysroot $DEVELOPER_DIR/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc"
@@ -3477,9 +3728,10 @@
   dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
   dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
   dnl Also remove duplicate _FORTIFY_SOURCE arguments.
+  dnl And undefine it first to avoid a warning.
   AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
   if test "$gccmajor" -gt "3"; then
-    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
+    CFLAGS=`echo "$CFLAGS" | sed -e 's/ *-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/ *-D_FORTIFY_SOURCE=.//g' -e 's/ *-U_FORTIFY_SOURCE//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
     AC_MSG_RESULT(yes)
   else
     AC_MSG_RESULT(no)
@@ -3487,6 +3739,28 @@
 fi
 AC_SUBST(DEPEND_CFLAGS_FILTER)
 
+dnl link.sh tries to avoid overlinking in a hackish way.
+dnl At least GNU ld supports --as-needed which provides the same functionality
+dnl at linker level. Let's use it.
+AC_MSG_CHECKING(linker --as-needed support)
+LINK_AS_NEEDED=
+# Check if linker supports --as-needed and --no-as-needed options
+if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
+  LDFLAGS=`echo "$LDFLAGS" | sed -e 's/ *-Wl,--as-needed//g' | sed -e 's/$/ -Wl,--as-needed/'`
+  LINK_AS_NEEDED=yes
+fi
+if test "$LINK_AS_NEEDED" = yes; then
+  AC_MSG_RESULT(yes)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST(LINK_AS_NEEDED)
+
+# IBM z/OS reset CFLAGS for config.mk
+if test "$zOSUnix" = "yes"; then
+	CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
+fi
+
 dnl write output files
 AC_OUTPUT(auto/config.mk:config.mk.in)
 
diff -Naur vim73.orig/src/dehqx.py vim73/src/dehqx.py
--- vim73.orig/src/dehqx.py	2010-05-15 11:04:12.000000000 +0000
+++ vim73/src/dehqx.py	2013-08-04 19:09:10.157278556 +0000
@@ -1,7 +1,10 @@
 # Python script to get both the data and resource fork from a BinHex encoded
 # file.
-# Author: Taro Muraoka
-# Last Change: 2003 Oct 25
+# Author: MURAOKA Taro <koron.kaoriya@gmail.com>
+# Last Change: 2012 Jun 29
+#
+# Copyright (C) 2003,12 MURAOKA Taro <koron.kaoriya@gmail.com>
+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
 
 import sys
 import binhex
diff -Naur vim73.orig/src/diff.c vim73/src/diff.c
--- vim73.orig/src/diff.c	2010-07-31 13:35:21.000000000 +0000
+++ vim73/src/diff.c	2013-08-04 19:09:10.160611879 +0000
@@ -615,11 +615,13 @@
 #endif
 	    /* A change may have made filler lines invalid, need to take care
 	     * of that for other windows. */
-	    if (wp != curwin && wp->w_topfill > 0)
+	    n = diff_check(wp, wp->w_topline);
+	    if ((wp != curwin && wp->w_topfill > 0) || n > 0)
 	    {
-		n = diff_check(wp, wp->w_topline);
 		if (wp->w_topfill > n)
 		    wp->w_topfill = (n < 0 ? 0 : n);
+		else if (n > 0 && n > wp->w_topfill)
+		    wp->w_topfill = n;
 	    }
 	}
 }
@@ -783,6 +785,15 @@
 	goto theend;
     }
 
+    /* :diffupdate! */
+    if (eap != NULL && eap->forceit)
+	for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
+	{
+	    buf = curtab->tp_diffbuf[idx_new];
+	    if (buf_valid(buf))
+		buf_check_timestamp(buf, FALSE);
+	}
+
     /* Write the first buffer to a tempfile. */
     buf = curtab->tp_diffbuf[idx_orig];
     if (diff_write(buf, tmp_orig) == FAIL)
@@ -1099,7 +1110,7 @@
 }
 
 /*
- * Set options to show difs for the current window.
+ * Set options to show diffs for the current window.
  */
     void
 ex_diffthis(eap)
@@ -1127,19 +1138,36 @@
 # endif
 
     wp->w_p_diff = TRUE;
+
+    /* Use 'scrollbind' and 'cursorbind' when available */
+#ifdef FEAT_SCROLLBIND
+    if (!wp->w_p_diff_saved)
+	wp->w_p_scb_save = wp->w_p_scb;
+    wp->w_p_scb = TRUE;
+#endif
 #ifdef FEAT_CURSORBIND
-    /* Use cursorbind if it's available */
+    if (!wp->w_p_diff_saved)
+	wp->w_p_crb_save = wp->w_p_crb;
     wp->w_p_crb = TRUE;
 #endif
-    wp->w_p_scb = TRUE;
+    if (!wp->w_p_diff_saved)
+	wp->w_p_wrap_save = wp->w_p_wrap;
     wp->w_p_wrap = FALSE;
 # ifdef FEAT_FOLDING
     curwin = wp;
     curbuf = curwin->w_buffer;
+    if (!wp->w_p_diff_saved)
+	wp->w_p_fdm_save = vim_strsave(wp->w_p_fdm);
     set_string_option_direct((char_u *)"fdm", -1, (char_u *)"diff",
 						       OPT_LOCAL|OPT_FREE, 0);
     curwin = old_curwin;
     curbuf = curwin->w_buffer;
+    if (!wp->w_p_diff_saved)
+    {
+	wp->w_p_fdc_save = wp->w_p_fdc;
+	wp->w_p_fen_save = wp->w_p_fen;
+	wp->w_p_fdl_save = wp->w_p_fdl;
+    }
     wp->w_p_fdc = diff_foldcolumn;
     wp->w_p_fen = TRUE;
     wp->w_p_fdl = 0;
@@ -1151,6 +1179,8 @@
     if (vim_strchr(p_sbo, 'h') == NULL)
 	do_cmdline_cmd((char_u *)"set sbo+=hor");
 #endif
+    /* Saved the current values, to be restored in ex_diffoff(). */
+    wp->w_p_diff_saved = TRUE;
 
     if (addbuf)
 	diff_buf_add(wp->w_buffer);
@@ -1175,28 +1205,48 @@
     {
 	if (wp == curwin || (eap->forceit && wp->w_p_diff))
 	{
-	    /* Set 'diff', 'scrollbind' off and 'wrap' on. */
+	    /* Set 'diff', 'scrollbind' off and 'wrap' on. If option values
+	     * were saved in diff_win_options() restore them. */
 	    wp->w_p_diff = FALSE;
+
+#ifdef FEAT_SCROLLBIND
+	    if (wp->w_p_scb)
+		wp->w_p_scb = wp->w_p_diff_saved ? wp->w_p_scb_save : FALSE;
+#endif
 #ifdef FEAT_CURSORBIND
-	    wp->w_p_crb = FALSE;
+	    if (wp->w_p_crb)
+		wp->w_p_crb = wp->w_p_diff_saved ? wp->w_p_crb_save : FALSE;
 #endif
-	    wp->w_p_scb = FALSE;
-	    wp->w_p_wrap = TRUE;
+	    if (!wp->w_p_wrap)
+		wp->w_p_wrap = wp->w_p_diff_saved ? wp->w_p_wrap_save : TRUE;
 #ifdef FEAT_FOLDING
 	    curwin = wp;
 	    curbuf = curwin->w_buffer;
-	    set_string_option_direct((char_u *)"fdm", -1,
+	    if (wp->w_p_diff_saved)
+	    {
+		free_string_option(wp->w_p_fdm);
+		wp->w_p_fdm = wp->w_p_fdm_save;
+		wp->w_p_fdm_save = empty_option;
+	    }
+	    else
+		set_string_option_direct((char_u *)"fdm", -1,
 				   (char_u *)"manual", OPT_LOCAL|OPT_FREE, 0);
 	    curwin = old_curwin;
 	    curbuf = curwin->w_buffer;
-	    wp->w_p_fdc = 0;
-	    wp->w_p_fen = FALSE;
-	    wp->w_p_fdl = 0;
+	    if (wp->w_p_fdc == diff_foldcolumn)
+		wp->w_p_fdc = wp->w_p_diff_saved ? wp->w_p_fdc_save : 0;
+	    if (wp->w_p_fen)
+		wp->w_p_fen = wp->w_p_diff_saved ? wp->w_p_fen_save : FALSE;
+	    if (wp->w_p_fdl == 0 && wp->w_p_diff_saved)
+		wp->w_p_fdl = wp->w_p_fdl_save;
 	    foldUpdateAll(wp);
 	    /* make sure topline is not halfway a fold */
 	    changed_window_setting_win(wp);
 #endif
+	    /* Note: 'sbo' is not restored, it's a global option. */
 	    diff_buf_adjust(wp);
+
+	    wp->w_p_diff_saved = FALSE;
 	}
 #ifdef FEAT_SCROLLBIND
 	diffwin |= wp->w_p_diff;
@@ -2142,7 +2192,7 @@
 	    i = atol((char *)eap->arg);
 	else
 	{
-	    i = buflist_findpat(eap->arg, p, FALSE, TRUE);
+	    i = buflist_findpat(eap->arg, p, FALSE, TRUE, FALSE);
 	    if (i < 0)
 		return;		/* error message already given */
 	}
diff -Naur vim73.orig/src/digraph.c vim73/src/digraph.c
--- vim73.orig/src/digraph.c	2010-05-15 11:04:09.000000000 +0000
+++ vim73/src/digraph.c	2013-08-04 19:09:10.163945202 +0000
@@ -2080,13 +2080,13 @@
 /*
  * Lookup the pair "char1", "char2" in the digraph tables.
  * If no match, return "char2".
- * If "meta" is TRUE and "char1" is a space, return "char2" | 0x80.
+ * If "meta_char" is TRUE and "char1" is a space, return "char2" | 0x80.
  */
     static int
-getexactdigraph(char1, char2, meta)
+getexactdigraph(char1, char2, meta_char)
     int		char1;
     int		char2;
-    int		meta;
+    int		meta_char;
 {
     int		i;
     int		retval = 0;
@@ -2159,7 +2159,7 @@
 
     if (retval == 0)		/* digraph deleted or not found */
     {
-	if (char1 == ' ' && meta)	/* <space> <char> --> meta-char */
+	if (char1 == ' ' && meta_char)	/* <space> <char> --> meta-char */
 	    return (char2 | 0x80);
 	return char2;
     }
@@ -2171,16 +2171,16 @@
  * Allow for both char1-char2 and char2-char1
  */
     int
-getdigraph(char1, char2, meta)
+getdigraph(char1, char2, meta_char)
     int	char1;
     int	char2;
-    int	meta;
+    int	meta_char;
 {
     int	    retval;
 
-    if (((retval = getexactdigraph(char1, char2, meta)) == char2)
+    if (((retval = getexactdigraph(char1, char2, meta_char)) == char2)
 	    && (char1 != char2)
-	    && ((retval = getexactdigraph(char2, char1, meta)) == char1))
+	    && ((retval = getexactdigraph(char2, char1, meta_char)) == char1))
 	return char2;
     return retval;
 }
diff -Naur vim73.orig/src/dosinst.c vim73/src/dosinst.c
--- vim73.orig/src/dosinst.c	2010-08-08 12:47:36.000000000 +0000
+++ vim73/src/dosinst.c	2013-08-04 19:09:10.167278525 +0000
@@ -375,7 +375,7 @@
 
     /* First get $VIMRUNTIME.  If it's set, remove the tail. */
     vim = getenv("VIMRUNTIME");
-    if (vim != NULL && *vim != 0)
+    if (vim != NULL && *vim != 0 && strlen(vim) < BUFSIZE)
     {
 	strcpy(buf, vim);
 	remove_tail(buf);
@@ -1609,7 +1609,7 @@
 
 /*
  * Only add the choice for the open-with menu entry when gvim.exe was found
- * and and regedit.exe exist.
+ * and regedit.exe exist.
  */
     static void
 init_openwith_choice(void)
diff -Naur vim73.orig/src/edit.c vim73/src/edit.c
--- vim73.orig/src/edit.c	2010-08-08 12:55:05.000000000 +0000
+++ vim73/src/edit.c	2013-08-04 19:09:10.180611819 +0000
@@ -58,6 +58,10 @@
 };
 
 static char e_hitend[] = N_("Hit end of paragraph");
+#ifdef FEAT_COMPL_FUNC
+static char e_complwin[] = N_("E839: Completion function changed window");
+static char e_compldel[] = N_("E840: Completion function deleted text");
+#endif
 
 /*
  * Structure used to store one match for insert completion.
@@ -131,6 +135,8 @@
 static int	  compl_cont_mode = 0;
 static expand_T	  compl_xp;
 
+static int	  compl_opt_refresh_always = FALSE;
+
 static void ins_ctrl_x __ARGS((void));
 static int  has_compl_option __ARGS((int dict_opt));
 static int  ins_compl_accept_char __ARGS((int c));
@@ -149,16 +155,19 @@
 static void ins_compl_free __ARGS((void));
 static void ins_compl_clear __ARGS((void));
 static int  ins_compl_bs __ARGS((void));
+static int  ins_compl_need_restart __ARGS((void));
 static void ins_compl_new_leader __ARGS((void));
 static void ins_compl_addleader __ARGS((int c));
-static int ins_compl_len __ARGS((void));
+static int  ins_compl_len __ARGS((void));
 static void ins_compl_restart __ARGS((void));
 static void ins_compl_set_original_text __ARGS((char_u *str));
 static void ins_compl_addfrommatch __ARGS((void));
 static int  ins_compl_prep __ARGS((int c));
+static void ins_compl_fixRedoBufForLeader __ARGS((char_u *ptr_arg));
 static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
 #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
 static void ins_compl_add_list __ARGS((list_T *list));
+static void ins_compl_add_dict __ARGS((dict_T *dict));
 #endif
 static int  ins_compl_get_exp __ARGS((pos_T *ini));
 static void ins_compl_delete __ARGS((void));
@@ -244,12 +253,14 @@
 #ifdef FEAT_DIGRAPHS
 static int  ins_digraph __ARGS((void));
 #endif
-static int  ins_copychar __ARGS((linenr_T lnum));
 static int  ins_ctrl_ey __ARGS((int tc));
 #ifdef FEAT_SMARTINDENT
 static void ins_try_si __ARGS((int c));
 #endif
 static colnr_T get_nolist_virtcol __ARGS((void));
+#ifdef FEAT_AUTOCMD
+static char_u *do_insert_char_pre __ARGS((int c));
+#endif
 
 static colnr_T	Insstart_textlen;	/* length of line when insert started */
 static colnr_T	Insstart_blank_vcol;	/* vcol for first inserted blank */
@@ -361,6 +372,8 @@
      */
     if (cmdchar != 'r' && cmdchar != 'v')
     {
+	pos_T   save_cursor = curwin->w_cursor;
+
 # ifdef FEAT_EVAL
 	if (cmdchar == 'R')
 	    ptr = (char_u *)"r";
@@ -369,8 +382,29 @@
 	else
 	    ptr = (char_u *)"i";
 	set_vim_var_string(VV_INSERTMODE, ptr, 1);
+	set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
 # endif
 	apply_autocmds(EVENT_INSERTENTER, NULL, NULL, FALSE, curbuf);
+
+	/* Make sure the cursor didn't move.  Do call check_cursor_col() in
+	 * case the text was modified.  Since Insert mode was not started yet
+	 * a call to check_cursor_col() may move the cursor, especially with
+	 * the "A" command, thus set State to avoid that. Also check that the
+	 * line number is still valid (lines may have been deleted).
+	 * Do not restore if v:char was set to a non-empty string. */
+	if (!equalpos(curwin->w_cursor, save_cursor)
+# ifdef FEAT_EVAL
+		&& *get_vim_var_str(VV_CHAR) == NUL
+# endif
+		&& save_cursor.lnum <= curbuf->b_ml.ml_line_count)
+	{
+	    int save_state = State;
+
+	    curwin->w_cursor = save_cursor;
+	    State = INSERT;
+	    check_cursor_col();
+	    State = save_state;
+	}
     }
 #endif
 
@@ -775,7 +809,20 @@
 		 * completion: Add to "compl_leader". */
 		if (ins_compl_accept_char(c))
 		{
-		    ins_compl_addleader(c);
+#ifdef FEAT_AUTOCMD
+		    /* Trigger InsertCharPre. */
+		    char_u *str = do_insert_char_pre(c);
+		    char_u *p;
+
+		    if (str != NULL)
+		    {
+			for (p = str; *p != NUL; mb_ptr_adv(p))
+			    ins_compl_addleader(PTR2CHAR(p));
+			vim_free(str);
+		    }
+		    else
+#endif
+			ins_compl_addleader(c);
 		    continue;
 		}
 
@@ -1377,10 +1424,42 @@
 		goto do_intr;
 #endif
 
+normalchar:
 	    /*
-	     * Insert a nomal character.
+	     * Insert a normal character.
 	     */
-normalchar:
+#ifdef FEAT_AUTOCMD
+	    if (!p_paste)
+	    {
+		/* Trigger InsertCharPre. */
+		char_u *str = do_insert_char_pre(c);
+		char_u *p;
+
+		if (str != NULL)
+		{
+		    if (*str != NUL && stop_arrow() != FAIL)
+		    {
+			/* Insert the new value of v:char literally. */
+			for (p = str; *p != NUL; mb_ptr_adv(p))
+			{
+			    c = PTR2CHAR(p);
+			    if (c == CAR || c == K_KENTER || c == NL)
+				ins_eol(c);
+			    else
+				ins_char(c);
+			}
+			AppendToRedobuffLit(str, -1);
+		    }
+		    vim_free(str);
+		    c = NUL;
+		}
+
+		/* If the new value is already inserted or an empty string
+		 * then don't insert any character. */
+		if (c == NUL)
+		    break;
+	    }
+#endif
 #ifdef FEAT_SMARTINDENT
 	    /* Try to perform smart-indenting. */
 	    ins_try_si(c);
@@ -1398,13 +1477,16 @@
 		    Insstart_blank_vcol = get_nolist_virtcol();
 	    }
 
-	    if (vim_iswordc(c) || !echeck_abbr(
+	    /* Insert a normal character and check for abbreviations on a
+	     * special character.  Let CTRL-] expand abbreviations without
+	     * inserting it. */
+	    if (vim_iswordc(c) || (!echeck_abbr(
 #ifdef FEAT_MBYTE
 			/* Add ABBR_OFF for characters above 0x100, this is
 			 * what check_abbr() expects. */
 			(has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
 #endif
-			c))
+		       c) && c != Ctrl_RSB))
 	    {
 		insert_special(c, FALSE, FALSE);
 #ifdef FEAT_RIGHTLEFT
@@ -1519,6 +1601,21 @@
 	    last_cursormoved = curwin->w_cursor;
 	}
 #endif
+#ifdef FEAT_AUTOCMD
+	/* Trigger TextChangedI if b_changedtick differs. */
+	if (!ready && has_textchangedI()
+		&& last_changedtick != curbuf->b_changedtick
+# ifdef FEAT_INS_EXPAND
+		&& !pum_visible()
+# endif
+		)
+	{
+	    if (last_changedtick_buf == curbuf)
+		apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
+	    last_changedtick_buf = curbuf;
+	    last_changedtick = curbuf->b_changedtick;
+	}
+#endif
 	if (must_redraw)
 	    update_screen(0);
 	else if (clear_cmdline || redraw_cmdline)
@@ -1549,12 +1646,16 @@
 ins_ctrl_v()
 {
     int		c;
+    int		did_putchar = FALSE;
 
     /* may need to redraw when no more chars available now */
     ins_redraw(FALSE);
 
     if (redrawing() && !char_avail())
+    {
 	edit_putchar('^', TRUE);
+	did_putchar = TRUE;
+    }
     AppendToRedobuff((char_u *)CTRL_V_STR);	/* CTRL-V */
 
 #ifdef FEAT_CMDL_INFO
@@ -1562,8 +1663,10 @@
 #endif
 
     c = get_literal();
-    edit_unputchar();  /* when line fits in 'columns' the '^' is at the start
-			  of the next line and will not be redrawn */
+    if (did_putchar)
+	/* when the line fits in 'columns' the '^' is at the start of the next
+	 * line and will not removed by the redraw */
+	edit_unputchar();
 #ifdef FEAT_CMDL_INFO
     clear_showcmd();
 #endif
@@ -1583,11 +1686,7 @@
 #define PC_STATUS_RIGHT	1	/* right halve of double-wide char */
 #define PC_STATUS_LEFT	2	/* left halve of double-wide char */
 #define PC_STATUS_SET	3	/* pc_bytes was filled */
-#ifdef FEAT_MBYTE
 static char_u pc_bytes[MB_MAXBYTES + 1]; /* saved bytes */
-#else
-static char_u pc_bytes[2];		/* saved bytes */
-#endif
 static int  pc_attr;
 static int  pc_row;
 static int  pc_col;
@@ -1713,9 +1812,9 @@
     static void
 undisplay_dollar()
 {
-    if (dollar_vcol)
+    if (dollar_vcol >= 0)
     {
-	dollar_vcol = 0;
+	dollar_vcol = -1;
 	redrawWinline(curwin->w_cursor.lnum, FALSE);
     }
 }
@@ -2133,7 +2232,7 @@
 		    || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
 		    || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
 		    || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
-		    || c == Ctrl_S || c == 's');
+		    || c == Ctrl_S || c == Ctrl_K || c == 's');
 	case CTRL_X_SCROLL:
 	    return (c == Ctrl_Y || c == Ctrl_E);
 	case CTRL_X_WHOLE_LINE:
@@ -2658,6 +2757,7 @@
     if (stop_arrow() == FAIL)
 	return;
 
+    compl_direction = FORWARD;
     if (startcol > curwin->w_cursor.col)
 	startcol = curwin->w_cursor.col;
     compl_col = startcol;
@@ -3034,7 +3134,7 @@
 
 theend:
     p_scs = save_p_scs;
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
     vim_free(buf);
 }
 
@@ -3295,7 +3395,7 @@
     /* Deleted more than what was used to find matches or didn't finish
      * finding all matches: need to look for matches all over again. */
     if (curwin->w_cursor.col <= compl_col + compl_length
-						     || compl_was_interrupted)
+						  || ins_compl_need_restart())
 	ins_compl_restart();
 
     vim_free(compl_leader);
@@ -3303,12 +3403,29 @@
     if (compl_leader != NULL)
     {
 	ins_compl_new_leader();
+	if (compl_shown_match != NULL)
+	    /* Make sure current match is not a hidden item. */
+	    compl_curr_match = compl_shown_match;
 	return NUL;
     }
     return K_BS;
 }
 
 /*
+ * Return TRUE when we need to find matches again, ins_compl_restart() is to
+ * be called.
+ */
+    static int
+ins_compl_need_restart()
+{
+    /* Return TRUE if we didn't complete finding matches or when the
+     * 'completefunc' returned "always" in the "refresh" dictionary item. */
+    return compl_was_interrupted
+	|| ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
+						  && compl_opt_refresh_always);
+}
+
+/*
  * Called after changing "compl_leader".
  * Show the popup menu with a different set of matches.
  * May also search for matches again if the previous search was interrupted.
@@ -3350,6 +3467,7 @@
     }
 
     compl_enter_selects = !compl_used_match;
+    compl_shown_match = compl_curr_match = compl_first_match;
 
     /* Show the popup menu with a different set of matches. */
     ins_compl_show_pum();
@@ -3391,20 +3509,32 @@
 	(*mb_char2bytes)(c, buf);
 	buf[cc] = NUL;
 	ins_char_bytes(buf, cc);
+	if (compl_opt_refresh_always)
+	    AppendToRedobuff(buf);
     }
     else
 #endif
+    {
 	ins_char(c);
+	if (compl_opt_refresh_always)
+	    AppendCharToRedobuff(c);
+    }
 
     /* If we didn't complete finding matches we must search again. */
-    if (compl_was_interrupted)
+    if (ins_compl_need_restart())
 	ins_compl_restart();
 
-    vim_free(compl_leader);
-    compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+    /* When 'always' is set, don't reset compl_leader. While completing,
+     * cursor doesn't point original position, changing compl_leader would
+     * break redo. */
+    if (!compl_opt_refresh_always)
+    {
+	vim_free(compl_leader);
+	compl_leader = vim_strnsave(ml_get_curline() + compl_col,
 				     (int)(curwin->w_cursor.col - compl_col));
-    if (compl_leader != NULL)
-	ins_compl_new_leader();
+	if (compl_leader != NULL)
+	    ins_compl_new_leader();
+    }
 }
 
 /*
@@ -3480,11 +3610,7 @@
 	    return;
     }
     p += len;
-#ifdef FEAT_MBYTE
-    c = mb_ptr2char(p);
-#else
-    c = *p;
-#endif
+    c = PTR2CHAR(p);
     ins_compl_addleader(c);
 }
 
@@ -3653,9 +3779,6 @@
 	     * memory that was used, and make sure we can redo the insert. */
 	    if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
 	    {
-		char_u	*p;
-		int	temp = 0;
-
 		/*
 		 * If any of the original typed text has been changed, eg when
 		 * ignorecase is set, we must add back-spaces to the redo
@@ -3666,25 +3789,9 @@
 		 */
 		if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
 		    ptr = compl_curr_match->cp_str;
-		else if (compl_leader != NULL)
-		    ptr = compl_leader;
 		else
-		    ptr = compl_orig_text;
-		if (compl_orig_text != NULL)
-		{
-		    p = compl_orig_text;
-		    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
-								       ++temp)
-			;
-#ifdef FEAT_MBYTE
-		    if (temp > 0)
-			temp -= (*mb_head_off)(compl_orig_text, p + temp);
-#endif
-		    for (p += temp; *p != NUL; mb_ptr_adv(p))
-			AppendCharToRedobuff(K_BS);
-		}
-		if (ptr != NULL)
-		    AppendToRedobuffLit(ptr + temp, -1);
+		    ptr = NULL;
+		ins_compl_fixRedoBufForLeader(ptr);
 	    }
 
 #ifdef FEAT_CINDENT
@@ -3759,8 +3866,19 @@
 	    if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
 		do_c_expr_indent();
 #endif
+#ifdef FEAT_AUTOCMD
+	    /* Trigger the CompleteDone event to give scripts a chance to act
+	     * upon the completion. */
+	    apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
+#endif
 	}
     }
+#ifdef FEAT_AUTOCMD
+    else if (ctrl_x_mode == CTRL_X_LOCAL_MSG)
+	/* Trigger the CompleteDone event to give scripts a chance to act
+	 * upon the (possibly failed) completion. */
+	apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
+#endif
 
     /* reset continue_* if we left expansion-mode, if we stay they'll be
      * (re)set properly in ins_complete() */
@@ -3774,6 +3892,44 @@
 }
 
 /*
+ * Fix the redo buffer for the completion leader replacing some of the typed
+ * text.  This inserts backspaces and appends the changed text.
+ * "ptr" is the known leader text or NUL.
+ */
+    static void
+ins_compl_fixRedoBufForLeader(ptr_arg)
+    char_u *ptr_arg;
+{
+    int	    len;
+    char_u  *p;
+    char_u  *ptr = ptr_arg;
+
+    if (ptr == NULL)
+    {
+	if (compl_leader != NULL)
+	    ptr = compl_leader;
+	else
+	    return;  /* nothing to do */
+    }
+    if (compl_orig_text != NULL)
+    {
+	p = compl_orig_text;
+	for (len = 0; p[len] != NUL && p[len] == ptr[len]; ++len)
+	    ;
+#ifdef FEAT_MBYTE
+	if (len > 0)
+	    len -= (*mb_head_off)(p, p + len);
+#endif
+	for (p += len; *p != NUL; mb_ptr_adv(p))
+	    AppendCharToRedobuff(K_BS);
+    }
+    else
+	len = 0;
+    if (ptr != NULL)
+	AppendToRedobuffLit(ptr + len, -1);
+}
+
+/*
  * Loops through the list of windows, loaded-buffers or non-loaded-buffers
  * (depending on flag) starting from buf and looking for a non-scanned
  * buffer (other than curbuf).	curbuf is special, if it is called with
@@ -3829,10 +3985,14 @@
     int		type;	    /* CTRL_X_OMNI or CTRL_X_FUNCTION */
     char_u	*base;
 {
-    list_T      *matchlist;
+    list_T      *matchlist = NULL;
+    dict_T	*matchdict = NULL;
     char_u	*args[2];
     char_u	*funcname;
     pos_T	pos;
+    win_T	*curwin_save;
+    buf_T	*curbuf_save;
+    typval_T	rettv;
 
     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
     if (*funcname == NUL)
@@ -3843,13 +4003,50 @@
     args[1] = base;
 
     pos = curwin->w_cursor;
-    matchlist = call_func_retlist(funcname, 2, args, FALSE);
+    curwin_save = curwin;
+    curbuf_save = curbuf;
+
+    /* Call a function, which returns a list or dict. */
+    if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK)
+    {
+	switch (rettv.v_type)
+	{
+	    case VAR_LIST:
+		matchlist = rettv.vval.v_list;
+		break;
+	    case VAR_DICT:
+		matchdict = rettv.vval.v_dict;
+		break;
+	    default:
+		/* TODO: Give error message? */
+		clear_tv(&rettv);
+		break;
+	}
+    }
+
+    if (curwin_save != curwin || curbuf_save != curbuf)
+    {
+	EMSG(_(e_complwin));
+	goto theend;
+    }
     curwin->w_cursor = pos;	/* restore the cursor position */
-    if (matchlist == NULL)
-	return;
+    check_cursor();
+    if (!equalpos(curwin->w_cursor, pos))
+    {
+	EMSG(_(e_compldel));
+	goto theend;
+    }
 
-    ins_compl_add_list(matchlist);
-    list_unref(matchlist);
+    if (matchlist != NULL)
+	ins_compl_add_list(matchlist);
+    else if (matchdict != NULL)
+	ins_compl_add_dict(matchdict);
+
+theend:
+    if (matchdict != NULL)
+	dict_unref(matchdict);
+    if (matchlist != NULL)
+	list_unref(matchlist);
 }
 #endif /* FEAT_COMPL_FUNC */
 
@@ -3876,6 +4073,33 @@
 }
 
 /*
+ * Add completions from a dict.
+ */
+    static void
+ins_compl_add_dict(dict)
+    dict_T	*dict;
+{
+    dictitem_T	*di_refresh;
+    dictitem_T	*di_words;
+
+    /* Check for optional "refresh" item. */
+    compl_opt_refresh_always = FALSE;
+    di_refresh = dict_find(dict, (char_u *)"refresh", 7);
+    if (di_refresh != NULL && di_refresh->di_tv.v_type == VAR_STRING)
+    {
+	char_u	*v = di_refresh->di_tv.vval.v_string;
+
+	if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
+	    compl_opt_refresh_always = TRUE;
+    }
+
+    /* Add completions from a "words" list. */
+    di_words = dict_find(dict, (char_u *)"words", 5);
+    if (di_words != NULL && di_words->di_tv.v_type == VAR_LIST)
+	ins_compl_add_list(di_words->di_tv.vval.v_list);
+}
+
+/*
  * Add a match to the list of matches from a typeval_T.
  * If the given string is already in the list of completions, then return
  * NOTDONE, otherwise add it to the list and return OK.  If there is an error,
@@ -3889,6 +4113,7 @@
     char_u	*word;
     int		icase = FALSE;
     int		adup = FALSE;
+    int		aempty = FALSE;
     char_u	*(cptext[CPT_COUNT]);
 
     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
@@ -3906,13 +4131,15 @@
 	    icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
 	if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
 	    adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
+	if (get_dict_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
+	    aempty = get_dict_number(tv->vval.v_dict, (char_u *)"empty");
     }
     else
     {
 	word = get_tv_string_chk(tv);
 	vim_memset(cptext, 0, sizeof(cptext));
     }
-    if (word == NULL || *word == NUL)
+    if (word == NULL || (!aempty && *word == NUL))
 	return FAIL;
     return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
 }
@@ -4015,8 +4242,8 @@
 			ins_buf->b_fname == NULL
 			    ? buf_spname(ins_buf)
 			    : ins_buf->b_sfname == NULL
-				? (char *)ins_buf->b_fname
-				: (char *)ins_buf->b_sfname);
+				? ins_buf->b_fname
+				: ins_buf->b_sfname);
 		(void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
 	    }
 	    else if (*e_cpt == NUL)
@@ -4118,13 +4345,7 @@
 
 		/* May change home directory back to "~". */
 		tilde_replace(compl_pattern, num_matches, matches);
-		ins_compl_add_matches(num_matches, matches,
-#ifdef CASE_INSENSITIVE_FILENAME
-			TRUE
-#else
-			FALSE
-#endif
-			);
+		ins_compl_add_matches(num_matches, matches, p_fic || p_wic);
 	    }
 	    break;
 
@@ -4403,6 +4624,11 @@
     int	    found_end = FALSE;
     int	    advance;
 
+    /* When user complete function return -1 for findstart which is next
+     * time of 'always', compl_shown_match become NULL. */
+    if (compl_shown_match == NULL)
+	return -1;
+
     if (compl_leader != NULL
 			&& (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
     {
@@ -4994,6 +5220,8 @@
 	    int		col;
 	    char_u	*funcname;
 	    pos_T	pos;
+	    win_T	*curwin_save;
+	    buf_T	*curbuf_save;
 
 	    /* Call 'completefunc' or 'omnifunc' and get pattern length as a
 	     * string */
@@ -5009,8 +5237,40 @@
 	    args[0] = (char_u *)"1";
 	    args[1] = NULL;
 	    pos = curwin->w_cursor;
+	    curwin_save = curwin;
+	    curbuf_save = curbuf;
 	    col = call_func_retnr(funcname, 2, args, FALSE);
+	    if (curwin_save != curwin || curbuf_save != curbuf)
+	    {
+		EMSG(_(e_complwin));
+		return FAIL;
+	    }
 	    curwin->w_cursor = pos;	/* restore the cursor position */
+	    check_cursor();
+	    if (!equalpos(curwin->w_cursor, pos))
+	    {
+		EMSG(_(e_compldel));
+		return FAIL;
+	    }
+
+	    /* Return value -2 means the user complete function wants to
+	     * cancel the complete without an error.
+	     * Return value -3 does the same as -2 and leaves CTRL-X mode.*/
+	    if (col == -2)
+		return FAIL;
+	    if (col == -3)
+	    {
+		ctrl_x_mode = 0;
+		edit_submode = NULL;
+		msg_clr_cmdline();
+		return FAIL;
+	    }
+
+	    /*
+	     * Reset extended parameters of completion, when start new
+	     * completion.
+	     */
+	    compl_opt_refresh_always = FALSE;
 
 	    if (col < 0)
 		col = curs_col;
@@ -5089,6 +5349,10 @@
 	else
 	    edit_submode = (char_u *)_(CTRL_X_MSG(ctrl_x_mode));
 
+	/* If any of the original typed text has been changed we need to fix
+	 * the redo buffer. */
+	ins_compl_fixRedoBufForLeader(NULL);
+
 	/* Always add completion for the original text. */
 	vim_free(compl_orig_text);
 	compl_orig_text = vim_strnsave(line + compl_col, compl_length);
@@ -5249,7 +5513,7 @@
 				compl_curr_match->cp_number);
 		edit_submode_extra = match_ref;
 		edit_submode_highl = HLF_R;
-		if (dollar_vcol)
+		if (dollar_vcol >= 0)
 		    curs_columns(FALSE);
 	    }
 	}
@@ -5558,6 +5822,16 @@
 # define WHITECHAR(cc) vim_iswhite(cc)
 #endif
 
+/*
+ * "flags": INSCHAR_FORMAT - force formatting
+ *	    INSCHAR_CTRLV  - char typed just after CTRL-V
+ *	    INSCHAR_NO_FEX - don't use 'formatexpr'
+ *
+ *   NOTE: passes the flags value straight through to internal_format() which,
+ *	   beside INSCHAR_FORMAT (above), is also looking for these:
+ *	    INSCHAR_DO_COM   - format comments
+ *	    INSCHAR_COM_LIST - format comments with num list or 2nd line indent
+ */
     void
 insertchar(c, flags, second_indent)
     int		c;			/* character to insert or NUL */
@@ -5636,7 +5910,7 @@
 	 * Need to remove existing (middle) comment leader and insert end
 	 * comment leader.  First, check what comment leader we can find.
 	 */
-	i = get_leader_len(line = ml_get_curline(), &p, FALSE);
+	i = get_leader_len(line = ml_get_curline(), &p, FALSE, TRUE);
 	if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL)	/* Just checking */
 	{
 	    /* Skip middle-comment string */
@@ -5691,6 +5965,8 @@
      * Don't do this when 'cindent' or 'indentexpr' is set, because we might
      * need to re-indent at a ':', or any other character (but not what
      * 'paste' is set)..
+     * Don't do this when there an InsertCharPre autocommand is defined,
+     * because we need to fire the event for every character.
      */
 #ifdef USE_ON_FLY_SCROLL
     dont_scroll = FALSE;		/* allow scrolling here */
@@ -5708,6 +5984,9 @@
 #ifdef FEAT_RIGHTLEFT
 	    && !p_ri
 #endif
+#ifdef FEAT_AUTOCMD
+	    && !has_insertcharpre()
+#endif
 	       )
     {
 #define INPUT_BUFLEN 100
@@ -5795,6 +6074,9 @@
 
 /*
  * Format text at the current insert position.
+ *
+ * If the INSCHAR_COM_LIST flag is present, then the value of second_indent
+ * will be the comment leader length sent to open_line().
  */
     static void
 internal_format(textwidth, second_indent, flags, format_only, c)
@@ -5869,7 +6151,7 @@
 
 	/* Don't break until after the comment leader */
 	if (do_comments)
-	    leader_len = get_leader_len(ml_get_curline(), NULL, FALSE);
+	    leader_len = get_leader_len(ml_get_curline(), NULL, FALSE, TRUE);
 	else
 	    leader_len = 0;
 
@@ -5902,6 +6184,7 @@
 	 * Stop at first entered white when 'formatoptions' has 'v'
 	 */
 	while ((!fo_ins_blank && !has_format_option(FO_INS_VI))
+		    || (flags & INSCHAR_FORMAT)
 		    || curwin->w_cursor.lnum != Insstart.lnum
 		    || curwin->w_cursor.col >= Insstart.col)
 	{
@@ -6072,23 +6355,59 @@
 		+ (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
 #ifdef FEAT_COMMENTS
 		+ (do_comments ? OPENLINE_DO_COM : 0)
+		+ ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0)
 #endif
-		, old_indent);
-	old_indent = 0;
+		, ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent));
+	if (!(flags & INSCHAR_COM_LIST))
+	    old_indent = 0;
 
 	replace_offset = 0;
 	if (first_line)
 	{
-	    if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
-		second_indent = get_number_indent(curwin->w_cursor.lnum -1);
-	    if (second_indent >= 0)
+	    if (!(flags & INSCHAR_COM_LIST))
 	    {
+		/*
+		 * This section is for auto-wrap of numeric lists.  When not
+		 * in insert mode (i.e. format_lines()), the INSCHAR_COM_LIST
+		 * flag will be set and open_line() will handle it (as seen
+		 * above).  The code here (and in get_number_indent()) will
+		 * recognize comments if needed...
+		 */
+		if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
+		    second_indent =
+				 get_number_indent(curwin->w_cursor.lnum - 1);
+		if (second_indent >= 0)
+		{
 #ifdef FEAT_VREPLACE
-		if (State & VREPLACE_FLAG)
-		    change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
-		else
+		    if (State & VREPLACE_FLAG)
+			change_indent(INDENT_SET, second_indent,
+							    FALSE, NUL, TRUE);
+		    else
 #endif
-		    (void)set_indent(second_indent, SIN_CHANGED);
+#ifdef FEAT_COMMENTS
+			if (leader_len > 0 && second_indent - leader_len > 0)
+		    {
+			int i;
+			int padding = second_indent - leader_len;
+
+			/* We started at the first_line of a numbered list
+			 * that has a comment.  the open_line() function has
+			 * inserted the proper comment leader and positioned
+			 * the cursor at the end of the split line.  Now we
+			 * add the additional whitespace needed after the
+			 * comment leader for the numbered list.  */
+			for (i = 0; i < padding; i++)
+			    ins_str((char_u *)" ");
+			changed_bytes(curwin->w_cursor.lnum, leader_len);
+		    }
+		    else
+		    {
+#endif
+			(void)set_indent(second_indent, SIN_CHANGED);
+#ifdef FEAT_COMMENTS
+		    }
+#endif
+		}
 	    }
 	    first_line = FALSE;
 	}
@@ -6194,7 +6513,7 @@
     /* With the 'c' flag in 'formatoptions' and 't' missing: only format
      * comments. */
     if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
-				     && get_leader_len(old, NULL, FALSE) == 0)
+				     && get_leader_len(old, NULL, FALSE, TRUE) == 0)
 	return;
 #endif
 
@@ -6598,11 +6917,7 @@
     char_u	*s;
 
     vim_free(last_insert);
-#ifdef FEAT_MBYTE
     last_insert = alloc(MB_MAXBYTES * 3 + 5);
-#else
-    last_insert = alloc(6);
-#endif
     if (last_insert != NULL)
     {
 	s = last_insert;
@@ -6640,7 +6955,7 @@
     char_u	*s;
 {
 #ifdef FEAT_MBYTE
-    char_u	temp[MB_MAXBYTES];
+    char_u	temp[MB_MAXBYTES + 1];
     int		i;
     int		len;
 
@@ -6856,7 +7171,7 @@
 	    /*
 	     * Count each sequence of folded lines as one logical line.
 	     */
-	    /* go to the the start of the current fold */
+	    /* go to the start of the current fold */
 	    (void)hasFolding(lnum, &lnum, NULL);
 
 	    while (n--)
@@ -6907,7 +7222,7 @@
 	(void)hasFolding(lnum, NULL, &lnum);
 #endif
 	/* This fails if the cursor is already in the last line or would move
-	 * beyound the last line and '-' is in 'cpoptions' */
+	 * beyond the last line and '-' is in 'cpoptions' */
 	if (lnum >= curbuf->b_ml.ml_line_count
 		|| (lnum + n > curbuf->b_ml.ml_line_count
 		    && vim_strchr(p_cpo, CPO_MINUS) != NULL))
@@ -7202,7 +7517,7 @@
     int		cc;
 {
     int		n;
-    char_u	buf[MB_MAXBYTES];
+    char_u	buf[MB_MAXBYTES + 1];
     int		i;
     int		c;
 
@@ -7409,7 +7724,7 @@
 /*
  * return TRUE if 'cinkeys' contains the key "keytyped",
  * when == '*':	    Only if key is preceded with '*'	(indent before insert)
- * when == '!':	    Only if key is prededed with '!'	(don't insert)
+ * when == '!':	    Only if key is preceded with '!'	(don't insert)
  * when == ' ':	    Only if key is not preceded with '*'(indent afterwards)
  *
  * "keytyped" can have a few special values:
@@ -7812,16 +8127,18 @@
     --no_mapping;
 
 #ifdef FEAT_EVAL
-    /*
-     * Don't call u_sync() while getting the expression,
-     * evaluating it or giving an error message for it!
-     */
+    /* Don't call u_sync() while typing the expression or giving an error
+     * message for it. Only call it explicitly. */
     ++no_u_sync;
     if (regname == '=')
     {
 # ifdef USE_IM_CONTROL
 	int	im_on = im_get_status();
 # endif
+	/* Sync undo when evaluating the expression calls setline() or
+	 * append(), so that it can be undone separately. */
+	u_sync_once = 2;
+
 	regname = get_expr_register();
 # ifdef USE_IM_CONTROL
 	/* Restore the Input Method. */
@@ -7861,6 +8178,9 @@
 #ifdef FEAT_EVAL
     }
     --no_u_sync;
+    if (u_sync_once == 1)
+	ins_need_undo = TRUE;
+    u_sync_once = 0;
 #endif
 #ifdef FEAT_CMDL_INFO
     clear_showcmd();
@@ -8235,7 +8555,7 @@
 #endif
 
 /*
- * <Insert> key in Insert mode: toggle insert/remplace mode.
+ * <Insert> key in Insert mode: toggle insert/replace mode.
  */
     static void
 ins_insert(replaceState)
@@ -8352,7 +8672,7 @@
     {
 	temp = curwin->w_cursor.col;
 	if (!can_bs(BS_EOL)		/* only if "eol" included */
-		|| do_join(2, FALSE, TRUE) == FAIL)
+		|| do_join(2, FALSE, TRUE, FALSE) == FAIL)
 	    vim_beep();
 	else
 	    curwin->w_cursor.col = temp;
@@ -8533,7 +8853,7 @@
 			ptr[len - 1] = NUL;
 		}
 
-		(void)do_join(2, FALSE, FALSE);
+		(void)do_join(2, FALSE, FALSE, FALSE);
 		if (temp == NUL && gchar_cursor() != NUL)
 		    inc_cursor();
 	    }
@@ -8612,7 +8932,7 @@
 	 */
 	if (	   mode == BACKSPACE_CHAR
 		&& ((p_sta && in_indent)
-		    || (curbuf->b_p_sts != 0
+		    || (get_sts_value() != 0
 			&& curwin->w_cursor.col > 0
 			&& (*(ml_get_cursor() - 1) == TAB
 			    || (*(ml_get_cursor() - 1) == ' '
@@ -8626,9 +8946,9 @@
 
 	    *inserted_space_p = FALSE;
 	    if (p_sta && in_indent)
-		ts = curbuf->b_p_sw;
+		ts = (int)get_sw_value();
 	    else
-		ts = curbuf->b_p_sts;
+		ts = (int)get_sts_value();
 	    /* Compute the virtual column where we want to be.  Since
 	     * 'showbreak' may get in the way, need to get the last column of
 	     * the previous character. */
@@ -8768,7 +9088,7 @@
      * We can emulate the vi behaviour by pretending there is a dollar
      * displayed even when there isn't.
      *  --pkv Sun Jan 19 01:56:40 EST 2003 */
-    if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0)
+    if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == -1)
 	dollar_vcol = curwin->w_virtcol;
 
 #ifdef FEAT_FOLDING
@@ -8845,9 +9165,8 @@
 
     tpos = curwin->w_cursor;
 
-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
-    /* Currently the mouse coordinates are only known in the GUI. */
-    if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
+# ifdef FEAT_WINDOWS
+    if (mouse_row >= 0 && mouse_col >= 0)
     {
 	int row, col;
 
@@ -8897,7 +9216,7 @@
 # endif
     }
 
-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
+# ifdef FEAT_WINDOWS
     curwin->w_redr_status = TRUE;
 
     curwin = old_curwin;
@@ -9316,8 +9635,8 @@
      * When nothing special, insert TAB like a normal character
      */
     if (!curbuf->b_p_et
-	    && !(p_sta && ind && curbuf->b_p_ts != curbuf->b_p_sw)
-	    && curbuf->b_p_sts == 0)
+	    && !(p_sta && ind && curbuf->b_p_ts != get_sw_value())
+	    && get_sts_value() == 0)
 	return TRUE;
 
     if (stop_arrow() == FAIL)
@@ -9332,9 +9651,9 @@
     AppendToRedobuff((char_u *)"\t");
 
     if (p_sta && ind)		/* insert tab in indent, use 'shiftwidth' */
-	temp = (int)curbuf->b_p_sw;
-    else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */
-	temp = (int)curbuf->b_p_sts;
+	temp = (int)get_sw_value();
+    else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */
+	temp = (int)get_sts_value();
     else			/* otherwise use 'tabstop' */
 	temp = (int)curbuf->b_p_ts;
     temp -= get_nolist_virtcol() % temp;
@@ -9362,7 +9681,7 @@
     /*
      * When 'expandtab' not set: Replace spaces by TABs where possible.
      */
-    if (!curbuf->b_p_et && (curbuf->b_p_sts || (p_sta && ind)))
+    if (!curbuf->b_p_et && (get_sts_value() || (p_sta && ind)))
     {
 	char_u		*ptr;
 #ifdef FEAT_VREPLACE
@@ -9598,6 +9917,7 @@
 {
     int	    c;
     int	    cc;
+    int	    did_putchar = FALSE;
 
     pc_status = PC_STATUS_UNSET;
     if (redrawing() && !char_avail())
@@ -9606,6 +9926,7 @@
 	ins_redraw(FALSE);
 
 	edit_putchar('?', TRUE);
+	did_putchar = TRUE;
 #ifdef FEAT_CMDL_INFO
 	add_to_showcmd_c(Ctrl_K);
 #endif
@@ -9622,8 +9943,10 @@
     c = plain_vgetc();
     --no_mapping;
     --allow_keys;
-    edit_unputchar();  /* when line fits in 'columns' the '?' is at the start
-			  of the next line and will not be redrawn */
+    if (did_putchar)
+	/* when the line fits in 'columns' the '?' is at the start of the next
+	 * line and will not be removed by the redraw */
+	edit_unputchar();
 
     if (IS_SPECIAL(c) || mod_mask)	    /* special key */
     {
@@ -9635,6 +9958,7 @@
     }
     if (c != ESC)
     {
+	did_putchar = FALSE;
 	if (redrawing() && !char_avail())
 	{
 	    /* may need to redraw when no more chars available now */
@@ -9642,11 +9966,9 @@
 
 	    if (char2cells(c) == 1)
 	    {
-		/* first remove the '?', otherwise it's restored when typing
-		 * an ESC next */
-		edit_unputchar();
 		ins_redraw(FALSE);
 		edit_putchar(c, TRUE);
+		did_putchar = TRUE;
 	    }
 #ifdef FEAT_CMDL_INFO
 	    add_to_showcmd_c(c);
@@ -9657,8 +9979,10 @@
 	cc = plain_vgetc();
 	--no_mapping;
 	--allow_keys;
-	edit_unputchar();  /* when line fits in 'columns' the '?' is at the
-			      start of the next line and will not be redrawn */
+	if (did_putchar)
+	    /* when the line fits in 'columns' the '?' is at the start of the
+	     * next line and will not be removed by a redraw */
+	    edit_unputchar();
 	if (cc != ESC)
 	{
 	    AppendToRedobuff((char_u *)CTRL_V_STR);
@@ -9680,7 +10004,7 @@
  * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
  * Returns the char to be inserted, or NUL if none found.
  */
-    static int
+    int
 ins_copychar(lnum)
     linenr_T	lnum;
 {
@@ -9870,3 +10194,52 @@
     validate_virtcol();
     return curwin->w_virtcol;
 }
+
+#ifdef FEAT_AUTOCMD
+/*
+ * Handle the InsertCharPre autocommand.
+ * "c" is the character that was typed.
+ * Return a pointer to allocated memory with the replacement string.
+ * Return NULL to continue inserting "c".
+ */
+    static char_u *
+do_insert_char_pre(c)
+    int c;
+{
+    char_u	*res;
+    char_u	buf[MB_MAXBYTES + 1];
+
+    /* Return quickly when there is nothing to do. */
+    if (!has_insertcharpre())
+	return NULL;
+
+#ifdef FEAT_MBYTE
+    if (has_mbyte)
+	buf[(*mb_char2bytes)(c, buf)] = NUL;
+    else
+#endif
+    {
+	buf[0] = c;
+	buf[1] = NUL;
+    }
+
+    /* Lock the text to avoid weird things from happening. */
+    ++textlock;
+    set_vim_var_string(VV_CHAR, buf, -1);  /* set v:char */
+
+    res = NULL;
+    if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
+    {
+	/* Get the value of v:char.  It may be empty or more than one
+	 * character.  Only use it when changed, otherwise continue with the
+	 * original character to avoid breaking autoindent. */
+	if (STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
+	    res = vim_strsave(get_vim_var_str(VV_CHAR));
+    }
+
+    set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
+    --textlock;
+
+    return res;
+}
+#endif
diff -Naur vim73.orig/src/eval.c vim73/src/eval.c
--- vim73.orig/src/eval.c	2010-08-09 20:12:14.000000000 +0000
+++ vim73/src/eval.c	2013-08-04 19:09:10.203945082 +0000
@@ -10,9 +10,6 @@
 /*
  * eval.c: Expression evaluation.
  */
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for mch_open(), must be before vim.h */
-#endif
 
 #include "vim.h"
 
@@ -115,13 +112,11 @@
 static char *e_letwrong = N_("E734: Wrong variable type for %s=");
 static char *e_nofunc = N_("E130: Unknown function: %s");
 static char *e_illvar = N_("E461: Illegal variable name: %s");
+#ifdef FEAT_FLOAT
+static char *e_float_as_string = N_("E806: using Float as a String");
+#endif
 
-/*
- * All user-defined global variables are stored in dictionary "globvardict".
- * "globvars_var" is the variable that is used for "g:".
- */
-static dict_T		globvardict;
-static dictitem_T	globvars_var;
+static dictitem_T	globvars_var;		/* variable used for g: */
 #define globvarht globvardict.dv_hashtab
 
 /*
@@ -355,13 +350,14 @@
     {VV_NAME("swapname",	 VAR_STRING), VV_RO},
     {VV_NAME("swapchoice",	 VAR_STRING), 0},
     {VV_NAME("swapcommand",	 VAR_STRING), VV_RO},
-    {VV_NAME("char",		 VAR_STRING), VV_RO},
+    {VV_NAME("char",		 VAR_STRING), 0},
     {VV_NAME("mouse_win",	 VAR_NUMBER), 0},
     {VV_NAME("mouse_lnum",	 VAR_NUMBER), 0},
     {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
     {VV_NAME("operator",	 VAR_STRING), VV_RO},
     {VV_NAME("searchforward",	 VAR_NUMBER), 0},
     {VV_NAME("oldfiles",	 VAR_LIST), 0},
+    {VV_NAME("windowid",	 VAR_NUMBER), VV_RO},
 };
 
 /* shorthand */
@@ -372,19 +368,11 @@
 #define vv_list		vv_di.di_tv.vval.v_list
 #define vv_tv		vv_di.di_tv
 
-/*
- * The v: variables are stored in dictionary "vimvardict".
- * "vimvars_var" is the variable that is used for the "l:" scope.
- */
-static dict_T		vimvardict;
-static dictitem_T	vimvars_var;
+static dictitem_T	vimvars_var;		/* variable used for v: */
 #define vimvarht  vimvardict.dv_hashtab
 
 static void prepare_vimvar __ARGS((int idx, typval_T *save_tv));
 static void restore_vimvar __ARGS((int idx, typval_T *save_tv));
-#if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
-static int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
-#endif
 static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
 static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
 static char_u *skip_var_one __ARGS((char_u *arg));
@@ -405,8 +393,6 @@
 static void clear_lval __ARGS((lval_T *lp));
 static void set_var_lval __ARGS((lval_T *lp, char_u *endp, typval_T *rettv, int copy, char_u *op));
 static int tv_op __ARGS((typval_T *tv1, typval_T *tv2, char_u  *op));
-static void list_add_watch __ARGS((list_T *l, listwatch_T *lw));
-static void list_rem_watch __ARGS((list_T *l, listwatch_T *lwrem));
 static void list_fix_watch __ARGS((list_T *l, listitem_T *item));
 static void ex_unletlock __ARGS((exarg_T *eap, char_u *argstart, int deep));
 static int do_unlet_var __ARGS((lval_T *lp, char_u *name_end, int forceit));
@@ -429,32 +415,21 @@
 static int get_lit_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static int get_list_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
 static int rettv_list_alloc __ARGS((typval_T *rettv));
-static listitem_T *listitem_alloc __ARGS((void));
-static void listitem_free __ARGS((listitem_T *item));
-static void listitem_remove __ARGS((list_T *l, listitem_T *item));
 static long list_len __ARGS((list_T *l));
-static int list_equal __ARGS((list_T *l1, list_T *l2, int ic));
-static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic));
-static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic));
-static listitem_T *list_find __ARGS((list_T *l, long n));
+static int list_equal __ARGS((list_T *l1, list_T *l2, int ic, int recursive));
+static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic, int recursive));
+static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic, int recursive));
 static long list_find_nr __ARGS((list_T *l, long idx, int *errorp));
 static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
-static void list_append __ARGS((list_T *l, listitem_T *item));
 static int list_append_number __ARGS((list_T *l, varnumber_T n));
-static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
 static int list_extend __ARGS((list_T	*l1, list_T *l2, listitem_T *bef));
 static int list_concat __ARGS((list_T *l1, list_T *l2, typval_T *tv));
 static list_T *list_copy __ARGS((list_T *orig, int deep, int copyID));
-static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
 static char_u *list2string __ARGS((typval_T *tv, int copyID));
+static int list_join_inner __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo_style, int copyID, garray_T *join_gap));
 static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
 static int free_unref_items __ARGS((int copyID));
-static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
-static void set_ref_in_list __ARGS((list_T *l, int copyID));
-static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
 static int rettv_dict_alloc __ARGS((typval_T *rettv));
-static void dict_unref __ARGS((dict_T *d));
-static void dict_free __ARGS((dict_T *d, int recurse));
 static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
 static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
 static dict_T *dict_copy __ARGS((dict_T *orig, int deep, int copyID));
@@ -480,6 +455,7 @@
 static void f_acos __ARGS((typval_T *argvars, typval_T *rettv));
 #endif
 static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_and __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
@@ -608,6 +584,7 @@
 static void f_inputsave __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_inputsecret __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_insert __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_invert __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_isdirectory __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
@@ -625,6 +602,9 @@
 static void f_log __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_log10 __ARGS((typval_T *argvars, typval_T *rettv));
 #endif
+#ifdef FEAT_LUA
+static void f_luaeval __ARGS((typval_T *argvars, typval_T *rettv));
+#endif
 static void f_map __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
@@ -646,6 +626,7 @@
 #endif
 static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_nr2char __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_or __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_pathshorten __ARGS((typval_T *argvars, typval_T *rettv));
 #ifdef FEAT_FLOAT
 static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
@@ -653,6 +634,12 @@
 static void f_prevnonblank __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_printf __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_pumvisible __ARGS((typval_T *argvars, typval_T *rettv));
+#ifdef FEAT_PYTHON3
+static void f_py3eval __ARGS((typval_T *argvars, typval_T *rettv));
+#endif
+#ifdef FEAT_PYTHON
+static void f_pyeval __ARGS((typval_T *argvars, typval_T *rettv));
+#endif
 static void f_range __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_readfile __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_reltime __ARGS((typval_T *argvars, typval_T *rettv));
@@ -670,6 +657,10 @@
 #ifdef FEAT_FLOAT
 static void f_round __ARGS((typval_T *argvars, typval_T *rettv));
 #endif
+static void f_screenattr __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_screenchar __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_screencol __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_screenrow __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_search __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_searchdecl __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_searchpair __ARGS((typval_T *argvars, typval_T *rettv));
@@ -688,7 +679,11 @@
 static void f_settabvar __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
+#ifdef FEAT_CRYPT
+static void f_sha256 __ARGS((typval_T *argvars, typval_T *rettv));
+#endif /* FEAT_CRYPT */
 static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_shiftwidth __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv));
 #ifdef FEAT_FLOAT
 static void f_sin __ARGS((typval_T *argvars, typval_T *rettv));
@@ -747,6 +742,7 @@
 static void f_values __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_virtcol __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_visualmode __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_wildmenumode __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_winbufnr __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_wincol __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_winheight __ARGS((typval_T *argvars, typval_T *rettv));
@@ -757,6 +753,7 @@
 static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
 static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
+static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
 
 static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
 static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
@@ -782,7 +779,7 @@
 static char_u *get_tv_string_buf __ARGS((typval_T *varp, char_u *buf));
 static char_u *get_tv_string_buf_chk __ARGS((typval_T *varp, char_u *buf));
 static dictitem_T *find_var __ARGS((char_u *name, hashtab_T **htp));
-static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, char_u *varname, int writing));
+static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, int htname, char_u *varname, int writing));
 static hashtab_T *find_var_ht __ARGS((char_u *name, char_u **varname));
 static void vars_clear_ext __ARGS((hashtab_T *ht, int free_val));
 static void delete_var __ARGS((hashtab_T *ht, hashitem_T *hi));
@@ -791,6 +788,8 @@
 static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
 static int var_check_ro __ARGS((int flags, char_u *name));
 static int var_check_fixed __ARGS((int flags, char_u *name));
+static int var_check_func_name __ARGS((char_u *name, int new_var));
+static int valid_varname __ARGS((char_u *varname));
 static int tv_check_lock __ARGS((int lock, char_u *name));
 static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
 static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
@@ -820,8 +819,6 @@
 static char_u *autoload_name __ARGS((char_u *name));
 static void cat_func_name __ARGS((char_u *buf, ufunc_T *fp));
 static void func_free __ARGS((ufunc_T *fp));
-static void func_unref __ARGS((char_u *name));
-static void func_ref __ARGS((char_u *name));
 static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict));
 static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
 static void free_funccal __ARGS((funccall_T *fc, int free_val));
@@ -838,10 +835,6 @@
 static void sortFunctions __ARGS(());
 #endif
 
-
-/* Character used as separated in autoload function/variable names. */
-#define AUTOLOAD_CHAR '#'
-
 /*
  * Initialize the global and v: variables.
  */
@@ -851,8 +844,9 @@
     int		    i;
     struct vimvar   *p;
 
-    init_var_dict(&globvardict, &globvars_var);
-    init_var_dict(&vimvardict, &vimvars_var);
+    init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
+    init_var_dict(&vimvardict, &vimvars_var, VAR_SCOPE);
+    vimvardict.dv_lock = VAR_FIXED;
     hash_init(&compat_hashtab);
     hash_init(&func_hashtab);
 
@@ -875,10 +869,11 @@
 	    hash_add(&compat_hashtab, p->vv_di.di_key);
     }
     set_vim_var_nr(VV_SEARCHFORWARD, 1L);
+    set_reg_var(0);  /* default for v:register is not 0 but '"' */
 
 #ifdef EBCDIC
     /*
-     * Sort the function table, to enable binary sort.
+     * Sort the function table, to enable binary search.
      */
     sortFunctions();
 #endif
@@ -910,6 +905,9 @@
     hash_clear(&compat_hashtab);
 
     free_scriptnames();
+# if defined(FEAT_CMDL_COMPL)
+    free_locales();
+# endif
 
     /* global variables */
     vars_clear(&globvarht);
@@ -1355,7 +1353,11 @@
 	{
 	    ga_init2(&ga, (int)sizeof(char), 80);
 	    if (tv.vval.v_list != NULL)
+	    {
 		list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0);
+		if (tv.vval.v_list->lv_len > 0)
+		    ga_append(&ga, NL);
+	    }
 	    ga_append(&ga, NUL);
 	    retval = (char_u *)ga.ga_data;
 	}
@@ -1549,20 +1551,19 @@
 }
 
 
-#if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
-	|| defined(FEAT_COMPL_FUNC) || defined(PROTO)
 /*
  * Call some vimL function and return the result in "*rettv".
  * Uses argv[argc] for the function arguments.  Only Number and String
  * arguments are currently supported.
  * Returns OK or FAIL.
  */
-    static int
-call_vim_function(func, argc, argv, safe, rettv)
+    int
+call_vim_function(func, argc, argv, safe, str_arg_only, rettv)
     char_u      *func;
     int		argc;
     char_u      **argv;
     int		safe;		/* use the sandbox */
+    int		str_arg_only;	/* all arguments are strings */
     typval_T	*rettv;
 {
     typval_T	*argvars;
@@ -1587,8 +1588,11 @@
 	    continue;
 	}
 
-	/* Recognize a number argument, the others must be strings. */
-	vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
+	if (str_arg_only)
+	    len = 0;
+	else
+	    /* Recognize a number argument, the others must be strings. */
+	    vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
 	if (len != 0 && len == (int)STRLEN(argv[i]))
 	{
 	    argvars[i].v_type = VAR_NUMBER;
@@ -1624,51 +1628,54 @@
     return ret;
 }
 
-# if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
 /*
- * Call vimL function "func" and return the result as a string.
- * Returns NULL when calling the function fails.
+ * Call vimL function "func" and return the result as a number.
+ * Returns -1 when calling the function fails.
  * Uses argv[argc] for the function arguments.
  */
-    void *
-call_func_retstr(func, argc, argv, safe)
+    long
+call_func_retnr(func, argc, argv, safe)
     char_u      *func;
     int		argc;
     char_u      **argv;
     int		safe;		/* use the sandbox */
 {
     typval_T	rettv;
-    char_u	*retval;
+    long	retval;
 
-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
-	return NULL;
+    /* All arguments are passed as strings, no conversion to number. */
+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+	return -1;
 
-    retval = vim_strsave(get_tv_string(&rettv));
+    retval = get_tv_number_chk(&rettv, NULL);
     clear_tv(&rettv);
     return retval;
 }
-# endif
 
-# if defined(FEAT_COMPL_FUNC) || defined(PROTO)
+#if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
+	|| defined(FEAT_COMPL_FUNC) || defined(PROTO)
+
+# if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
 /*
- * Call vimL function "func" and return the result as a number.
- * Returns -1 when calling the function fails.
+ * Call vimL function "func" and return the result as a string.
+ * Returns NULL when calling the function fails.
  * Uses argv[argc] for the function arguments.
  */
-    long
-call_func_retnr(func, argc, argv, safe)
+    void *
+call_func_retstr(func, argc, argv, safe)
     char_u      *func;
     int		argc;
     char_u      **argv;
     int		safe;		/* use the sandbox */
 {
     typval_T	rettv;
-    long	retval;
+    char_u	*retval;
 
-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
-	return -1;
+    /* All arguments are passed as strings, no conversion to number. */
+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+	return NULL;
 
-    retval = get_tv_number_chk(&rettv, NULL);
+    retval = vim_strsave(get_tv_string(&rettv));
     clear_tv(&rettv);
     return retval;
 }
@@ -1688,7 +1695,8 @@
 {
     typval_T	rettv;
 
-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+    /* All arguments are passed as strings, no conversion to number. */
+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
 	return NULL;
 
     if (rettv.v_type != VAR_LIST)
@@ -1701,7 +1709,6 @@
 }
 #endif
 
-
 /*
  * Save the current function call pointer, and set it to NULL.
  * Used when executing autocommands and for ":source".
@@ -2111,7 +2118,7 @@
 {
     char_u	numbuf[NUMBUFLEN];
 
-    list_hashtable_vars(&curbuf->b_vars.dv_hashtab, (char_u *)"b:",
+    list_hashtable_vars(&curbuf->b_vars->dv_hashtab, (char_u *)"b:",
 								 TRUE, first);
 
     sprintf((char *)numbuf, "%ld", (long)curbuf->b_changedtick);
@@ -2126,7 +2133,7 @@
 list_win_vars(first)
     int *first;
 {
-    list_hashtable_vars(&curwin->w_vars.dv_hashtab,
+    list_hashtable_vars(&curwin->w_vars->dv_hashtab,
 						 (char_u *)"w:", TRUE, first);
 }
 
@@ -2138,7 +2145,7 @@
 list_tab_vars(first)
     int *first;
 {
-    list_hashtable_vars(&curtab->tp_vars.dv_hashtab,
+    list_hashtable_vars(&curtab->tp_vars->dv_hashtab,
 						 (char_u *)"t:", TRUE, first);
 }
 #endif
@@ -2325,7 +2332,7 @@
 	    else if (endchars != NULL
 			     && vim_strchr(endchars, *skipwhite(arg)) == NULL)
 		EMSG(_(e_letunexp));
-	    else
+	    else if (!check_secure())
 	    {
 		c1 = name[len];
 		name[len] = NUL;
@@ -2718,8 +2725,41 @@
 	    lp->ll_list = NULL;
 	    lp->ll_dict = lp->ll_tv->vval.v_dict;
 	    lp->ll_di = dict_find(lp->ll_dict, key, len);
+
+	    /* When assigning to a scope dictionary check that a function and
+	     * variable name is valid (only variable name unless it is l: or
+	     * g: dictionary). Disallow overwriting a builtin function. */
+	    if (rettv != NULL && lp->ll_dict->dv_scope != 0)
+	    {
+		int prevval;
+		int wrong;
+
+		if (len != -1)
+		{
+		    prevval = key[len];
+		    key[len] = NUL;
+		}
+		else
+		    prevval = 0; /* avoid compiler warning */
+		wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
+			       && rettv->v_type == VAR_FUNC
+			       && var_check_func_name(key, lp->ll_di == NULL))
+			|| !valid_varname(key);
+		if (len != -1)
+		    key[len] = prevval;
+		if (wrong)
+		    return NULL;
+	    }
+
 	    if (lp->ll_di == NULL)
 	    {
+		/* Can't add "v:" variable. */
+		if (lp->ll_dict == &vimvardict)
+		{
+		    EMSG2(_(e_illvar), name);
+		    return NULL;
+		}
+
 		/* Key does not exist in dict: may need to add it. */
 		if (*p == '[' || *p == '.' || unlet)
 		{
@@ -2739,6 +2779,10 @@
 		    p = NULL;
 		break;
 	    }
+	    /* existing variable, need to check if it can be changed */
+	    else if (var_check_ro(lp->ll_di->di_flags, name))
+		return NULL;
+
 	    if (len == -1)
 		clear_tv(&var1);
 	    lp->ll_tv = &lp->ll_di->di_tv;
@@ -2770,6 +2814,8 @@
 	    {
 		if (lp->ll_range && !lp->ll_empty2)
 		    clear_tv(&var2);
+		if (!quiet)
+		    EMSGN(_(e_listidx), lp->ll_n1);
 		return NULL;
 	    }
 
@@ -2787,7 +2833,11 @@
 		{
 		    ni = list_find(lp->ll_list, lp->ll_n2);
 		    if (ni == NULL)
+		    {
+			if (!quiet)
+			    EMSGN(_(e_listidx), lp->ll_n2);
 			return NULL;
+		    }
 		    lp->ll_n2 = list_idx_of_item(lp->ll_list, ni);
 		}
 
@@ -2795,7 +2845,11 @@
 		if (lp->ll_n1 < 0)
 		    lp->ll_n1 = list_idx_of_item(lp->ll_list, lp->ll_li);
 		if (lp->ll_n2 < lp->ll_n1)
+		{
+		    if (!quiet)
+			EMSGN(_(e_listidx), lp->ll_n2);
 		    return NULL;
+		}
 	    }
 
 	    lp->ll_tv = &lp->ll_li->li_tv;
@@ -3051,7 +3105,7 @@
 /*
  * Add a watcher to a list.
  */
-    static void
+    void
 list_add_watch(l, lw)
     list_T	*l;
     listwatch_T	*lw;
@@ -3064,7 +3118,7 @@
  * Remove a watcher from a list.
  * No warning when it isn't found...
  */
-    static void
+    void
 list_rem_watch(l, lwrem)
     list_T	*l;
     listwatch_T	*lwrem;
@@ -3174,7 +3228,7 @@
     void	*fi_void;
     char_u	*arg;
 {
-    forinfo_T    *fi = (forinfo_T *)fi_void;
+    forinfo_T	*fi = (forinfo_T *)fi_void;
     int		result;
     listitem_T	*item;
 
@@ -3337,6 +3391,18 @@
     int		failed = FALSE;
     funcdict_T	fudi;
 
+    if (eap->skip)
+    {
+	/* trans_function_name() doesn't work well when skipping, use eval0()
+	 * instead to skip to any following command, e.g. for:
+	 *   :if 0 | call dict.foo().bar() | endif  */
+	++emsg_skip;
+	if (eval0(eap->arg, &rettv, &eap->nextcmd, FALSE) != FAIL)
+	    clear_tv(&rettv);
+	--emsg_skip;
+	return;
+    }
+
     tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
     if (fudi.fd_newkey != NULL)
     {
@@ -3386,6 +3452,9 @@
 	{
 	    curwin->w_cursor.lnum = lnum;
 	    curwin->w_cursor.col = 0;
+#ifdef FEAT_VIRTUALEDIT
+	    curwin->w_cursor.coladd = 0;
+#endif
 	}
 	arg = startarg;
 	if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
@@ -3868,7 +3937,7 @@
     }
 
     /* b: variables */
-    ht = &curbuf->b_vars.dv_hashtab;
+    ht = &curbuf->b_vars->dv_hashtab;
     if (bdone < ht->ht_used)
     {
 	if (bdone++ == 0)
@@ -3886,7 +3955,7 @@
     }
 
     /* w: variables */
-    ht = &curwin->w_vars.dv_hashtab;
+    ht = &curwin->w_vars->dv_hashtab;
     if (wdone < ht->ht_used)
     {
 	if (wdone++ == 0)
@@ -3900,7 +3969,7 @@
 
 #ifdef FEAT_WINDOWS
     /* t: variables */
-    ht = &curtab->tp_vars.dv_hashtab;
+    ht = &curtab->tp_vars->dv_hashtab;
     if (tdone < ht->ht_used)
     {
 	if (tdone++ == 0)
@@ -4349,7 +4418,8 @@
 		else
 		{
 		    /* Compare two Lists for being equal or unequal. */
-		    n1 = list_equal(rettv->vval.v_list, var2.vval.v_list, ic);
+		    n1 = list_equal(rettv->vval.v_list, var2.vval.v_list,
+								   ic, FALSE);
 		    if (type == TYPE_NEQUAL)
 			n1 = !n1;
 		}
@@ -4378,7 +4448,8 @@
 		else
 		{
 		    /* Compare two Dictionaries for being equal or unequal. */
-		    n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict, ic);
+		    n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict,
+								   ic, FALSE);
 		    if (type == TYPE_NEQUAL)
 			n1 = !n1;
 		}
@@ -4496,7 +4567,7 @@
 			    if (regmatch.regprog != NULL)
 			    {
 				n1 = vim_regexec_nl(&regmatch, s1, (colnr_T)0);
-				vim_free(regmatch.regprog);
+				vim_regfree(regmatch.regprog);
 				if (type == TYPE_NOMATCH)
 				    n1 = !n1;
 			    }
@@ -5082,6 +5153,16 @@
 		ret = get_func_tv(s, len, rettv, arg,
 			  curwin->w_cursor.lnum, curwin->w_cursor.lnum,
 			  &len, evaluate, NULL);
+
+		/* If evaluate is FALSE rettv->v_type was not set in
+		 * get_func_tv, but it's needed in handle_subscript() to parse
+		 * what follows. So set it here. */
+		if (rettv->v_type == VAR_UNKNOWN && !evaluate && **arg == '(')
+		{
+		    rettv->vval.v_string = vim_strsave((char_u *)"");
+		    rettv->v_type = VAR_FUNC;
+		}
+
 		/* Stop the expression evaluation when immediately
 		 * aborting on error, or when an interrupt occurred or
 		 * an exception was thrown but not caught. */
@@ -5097,9 +5178,7 @@
 	    else
 		ret = OK;
 	}
-
-	if (alias != NULL)
-	    vim_free(alias);
+	vim_free(alias);
     }
 
     *arg = skipwhite(*arg);
@@ -5192,16 +5271,20 @@
     char_u	*s;
     char_u	*key = NULL;
 
-    if (rettv->v_type == VAR_FUNC
-#ifdef FEAT_FLOAT
-	    || rettv->v_type == VAR_FLOAT
-#endif
-	    )
+    if (rettv->v_type == VAR_FUNC)
     {
 	if (verbose)
 	    EMSG(_("E695: Cannot index a Funcref"));
 	return FAIL;
     }
+#ifdef FEAT_FLOAT
+    else if (rettv->v_type == VAR_FLOAT)
+    {
+	if (verbose)
+	    EMSG(_(e_float_as_string));
+	return FAIL;
+    }
+#endif
 
     if (**arg == '.')
     {
@@ -5868,7 +5951,7 @@
 /*
  * Allocate a list item.
  */
-    static listitem_T *
+    listitem_T *
 listitem_alloc()
 {
     return (listitem_T *)alloc(sizeof(listitem_T));
@@ -5877,7 +5960,7 @@
 /*
  * Free a list item.  Also clears the value.  Does not notify watchers.
  */
-    static void
+    void
 listitem_free(item)
     listitem_T *item;
 {
@@ -5888,7 +5971,7 @@
 /*
  * Remove a list item from a List and free it.  Also clears the value.
  */
-    static void
+    void
 listitem_remove(l, item)
     list_T  *l;
     listitem_T *item;
@@ -5913,10 +5996,11 @@
  * Return TRUE when two lists have exactly the same values.
  */
     static int
-list_equal(l1, l2, ic)
+list_equal(l1, l2, ic, recursive)
     list_T	*l1;
     list_T	*l2;
     int		ic;	/* ignore case for strings */
+    int		recursive;  /* TRUE when used recursively */
 {
     listitem_T	*item1, *item2;
 
@@ -5930,7 +6014,7 @@
     for (item1 = l1->lv_first, item2 = l2->lv_first;
 	    item1 != NULL && item2 != NULL;
 			       item1 = item1->li_next, item2 = item2->li_next)
-	if (!tv_equal(&item1->li_tv, &item2->li_tv, ic))
+	if (!tv_equal(&item1->li_tv, &item2->li_tv, ic, recursive))
 	    return FALSE;
     return item1 == NULL && item2 == NULL;
 }
@@ -5952,10 +6036,11 @@
  * Return TRUE when two dictionaries have exactly the same key/values.
  */
     static int
-dict_equal(d1, d2, ic)
+dict_equal(d1, d2, ic, recursive)
     dict_T	*d1;
     dict_T	*d2;
     int		ic;	/* ignore case for strings */
+    int		recursive; /* TRUE when used recursively */
 {
     hashitem_T	*hi;
     dictitem_T	*item2;
@@ -5976,7 +6061,7 @@
 	    item2 = dict_find(d2, hi->hi_key, -1);
 	    if (item2 == NULL)
 		return FALSE;
-	    if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic))
+	    if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic, recursive))
 		return FALSE;
 	    --todo;
 	}
@@ -5984,41 +6069,54 @@
     return TRUE;
 }
 
+static int tv_equal_recurse_limit;
+
 /*
  * Return TRUE if "tv1" and "tv2" have the same value.
  * Compares the items just like "==" would compare them, but strings and
  * numbers are different.  Floats and numbers are also different.
  */
     static int
-tv_equal(tv1, tv2, ic)
+tv_equal(tv1, tv2, ic, recursive)
     typval_T *tv1;
     typval_T *tv2;
-    int	    ic;	    /* ignore case */
+    int	     ic;	    /* ignore case */
+    int	     recursive;	    /* TRUE when used recursively */
 {
     char_u	buf1[NUMBUFLEN], buf2[NUMBUFLEN];
     char_u	*s1, *s2;
-    static int  recursive = 0;	    /* cach recursive loops */
+    static int  recursive_cnt = 0;	    /* catch recursive loops */
     int		r;
 
     if (tv1->v_type != tv2->v_type)
 	return FALSE;
+
     /* Catch lists and dicts that have an endless loop by limiting
-     * recursiveness to 1000.  We guess they are equal then. */
-    if (recursive >= 1000)
+     * recursiveness to a limit.  We guess they are equal then.
+     * A fixed limit has the problem of still taking an awful long time.
+     * Reduce the limit every time running into it. That should work fine for
+     * deeply linked structures that are not recursively linked and catch
+     * recursiveness quickly. */
+    if (!recursive)
+	tv_equal_recurse_limit = 1000;
+    if (recursive_cnt >= tv_equal_recurse_limit)
+    {
+	--tv_equal_recurse_limit;
 	return TRUE;
+    }
 
     switch (tv1->v_type)
     {
 	case VAR_LIST:
-	    ++recursive;
-	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
-	    --recursive;
+	    ++recursive_cnt;
+	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic, TRUE);
+	    --recursive_cnt;
 	    return r;
 
 	case VAR_DICT:
-	    ++recursive;
-	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
-	    --recursive;
+	    ++recursive_cnt;
+	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, TRUE);
+	    --recursive_cnt;
 	    return r;
 
 	case VAR_FUNC:
@@ -6049,7 +6147,7 @@
  * A negative index is counted from the end; -1 is the last item.
  * Returns NULL when "n" is out of range.
  */
-    static listitem_T *
+    listitem_T *
 list_find(l, n)
     list_T	*l;
     long	n;
@@ -6191,7 +6289,7 @@
 /*
  * Append item "item" to the end of list "l".
  */
-    static void
+    void
 list_append(l, item)
     list_T	*l;
     listitem_T	*item;
@@ -6304,7 +6402,7 @@
  * If "item" is NULL append at the end.
  * Return FAIL when out of memory.
  */
-    static int
+    int
 list_insert_tv(l, tv, item)
     list_T	*l;
     typval_T	*tv;
@@ -6449,7 +6547,7 @@
  * Remove items "item" to "item2" from list "l".
  * Does not free the listitem or the value!
  */
-    static void
+    void
 list_remove(l, item, item2)
     list_T	*l;
     listitem_T	*item;
@@ -6502,47 +6600,119 @@
     return (char_u *)ga.ga_data;
 }
 
-/*
- * Join list "l" into a string in "*gap", using separator "sep".
- * When "echo" is TRUE use String as echoed, otherwise as inside a List.
- * Return FAIL or OK.
- */
+typedef struct join_S {
+    char_u	*s;
+    char_u	*tofree;
+} join_T;
+
     static int
-list_join(gap, l, sep, echo, copyID)
-    garray_T	*gap;
+list_join_inner(gap, l, sep, echo_style, copyID, join_gap)
+    garray_T	*gap;		/* to store the result in */
     list_T	*l;
     char_u	*sep;
-    int		echo;
+    int		echo_style;
     int		copyID;
+    garray_T	*join_gap;	/* to keep each list item string */
 {
+    int		i;
+    join_T	*p;
+    int		len;
+    int		sumlen = 0;
     int		first = TRUE;
     char_u	*tofree;
     char_u	numbuf[NUMBUFLEN];
     listitem_T	*item;
     char_u	*s;
 
+    /* Stringify each item in the list. */
     for (item = l->lv_first; item != NULL && !got_int; item = item->li_next)
     {
-	if (first)
-	    first = FALSE;
-	else
-	    ga_concat(gap, sep);
-
-	if (echo)
+	if (echo_style)
 	    s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
 	else
 	    s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
-	if (s != NULL)
-	    ga_concat(gap, s);
-	vim_free(tofree);
 	if (s == NULL)
 	    return FAIL;
+
+	len = (int)STRLEN(s);
+	sumlen += len;
+
+	ga_grow(join_gap, 1);
+	p = ((join_T *)join_gap->ga_data) + (join_gap->ga_len++);
+	if (tofree != NULL || s != numbuf)
+	{
+	    p->s = s;
+	    p->tofree = tofree;
+	}
+	else
+	{
+	    p->s = vim_strnsave(s, len);
+	    p->tofree = p->s;
+	}
+
+	line_breakcheck();
+    }
+
+    /* Allocate result buffer with its total size, avoid re-allocation and
+     * multiple copy operations.  Add 2 for a tailing ']' and NUL. */
+    if (join_gap->ga_len >= 2)
+	sumlen += (int)STRLEN(sep) * (join_gap->ga_len - 1);
+    if (ga_grow(gap, sumlen + 2) == FAIL)
+	return FAIL;
+
+    for (i = 0; i < join_gap->ga_len && !got_int; ++i)
+    {
+	if (first)
+	    first = FALSE;
+	else
+	    ga_concat(gap, sep);
+	p = ((join_T *)join_gap->ga_data) + i;
+
+	if (p->s != NULL)
+	    ga_concat(gap, p->s);
 	line_breakcheck();
     }
+
     return OK;
 }
 
 /*
+ * Join list "l" into a string in "*gap", using separator "sep".
+ * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
+ * Return FAIL or OK.
+ */
+    static int
+list_join(gap, l, sep, echo_style, copyID)
+    garray_T	*gap;
+    list_T	*l;
+    char_u	*sep;
+    int		echo_style;
+    int		copyID;
+{
+    garray_T	join_ga;
+    int		retval;
+    join_T	*p;
+    int		i;
+
+    ga_init2(&join_ga, (int)sizeof(join_T), l->lv_len);
+    retval = list_join_inner(gap, l, sep, echo_style, copyID, &join_ga);
+
+    /* Dispose each item in join_ga. */
+    if (join_ga.ga_data != NULL)
+    {
+	p = (join_T *)join_ga.ga_data;
+	for (i = 0; i < join_ga.ga_len; ++i)
+	{
+	    vim_free(p->tofree);
+	    ++p;
+	}
+	ga_clear(&join_ga);
+    }
+
+    return retval;
+}
+
+/*
  * Garbage collection for lists and dictionaries.
  *
  * We use reference counts to be able to free most items right away when they
@@ -6610,16 +6780,20 @@
 
     /* buffer-local variables */
     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
-	set_ref_in_ht(&buf->b_vars.dv_hashtab, copyID);
+	set_ref_in_item(&buf->b_bufvar.di_tv, copyID);
 
     /* window-local variables */
     FOR_ALL_TAB_WINDOWS(tp, wp)
-	set_ref_in_ht(&wp->w_vars.dv_hashtab, copyID);
+	set_ref_in_item(&wp->w_winvar.di_tv, copyID);
+#ifdef FEAT_AUTOCMD
+    if (aucmd_win != NULL)
+	set_ref_in_item(&aucmd_win->w_winvar.di_tv, copyID);
+#endif
 
 #ifdef FEAT_WINDOWS
     /* tabpage-local variables */
     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
-	set_ref_in_ht(&tp->tp_vars.dv_hashtab, copyID);
+	set_ref_in_item(&tp->tp_winvar.di_tv, copyID);
 #endif
 
     /* global variables */
@@ -6635,6 +6809,18 @@
     /* v: vars */
     set_ref_in_ht(&vimvarht, copyID);
 
+#ifdef FEAT_LUA
+    set_ref_in_lua(copyID);
+#endif
+
+#ifdef FEAT_PYTHON
+    set_ref_in_python(copyID);
+#endif
+
+#ifdef FEAT_PYTHON3
+    set_ref_in_python3(copyID);
+#endif
+
     /*
      * 2. Free lists and dictionaries that are not referenced.
      */
@@ -6720,7 +6906,7 @@
 /*
  * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
  */
-    static void
+    void
 set_ref_in_ht(ht, copyID)
     hashtab_T	*ht;
     int		copyID;
@@ -6740,7 +6926,7 @@
 /*
  * Mark all lists and dicts referenced through list "l" with "copyID".
  */
-    static void
+    void
 set_ref_in_list(l, copyID)
     list_T	*l;
     int		copyID;
@@ -6754,7 +6940,7 @@
 /*
  * Mark all lists and dicts referenced through typval "tv" with "copyID".
  */
-    static void
+    void
 set_ref_in_item(tv, copyID)
     typval_T	*tv;
     int		copyID;
@@ -6798,7 +6984,7 @@
     d = (dict_T *)alloc(sizeof(dict_T));
     if (d != NULL)
     {
-	/* Add the list to the list of dicts for garbage collection. */
+	/* Add the dict to the list of dicts for garbage collection. */
 	if (first_dict != NULL)
 	    first_dict->dv_used_prev = d;
 	d->dv_used_next = first_dict;
@@ -6807,6 +6993,7 @@
 
 	hash_init(&d->dv_hashtab);
 	d->dv_lock = 0;
+	d->dv_scope = 0;
 	d->dv_refcount = 0;
 	d->dv_copyID = 0;
     }
@@ -6837,7 +7024,7 @@
  * Unreference a Dictionary: decrement the reference count and free it when it
  * becomes zero.
  */
-    static void
+    void
 dict_unref(d)
     dict_T *d;
 {
@@ -6849,7 +7036,7 @@
  * Free a Dictionary, including all items it contains.
  * Ignores the reference count.
  */
-    static void
+    void
 dict_free(d, recurse)
     dict_T  *d;
     int	    recurse;	/* Free Lists and Dictionaries recursively. */
@@ -7075,7 +7262,7 @@
 }
 
 /*
- * Add a list  entry to dictionary "d".
+ * Add a list entry to dictionary "d".
  * Returns FAIL when out of memory and when key already exists.
  */
     int
@@ -7097,6 +7284,7 @@
 	dictitem_free(item);
 	return FAIL;
     }
+    ++list->lv_refcount;
     return OK;
 }
 
@@ -7649,6 +7837,7 @@
     {"acos",		1, 1, f_acos},	/* WJMc */
 #endif
     {"add",		2, 2, f_add},
+    {"and",		2, 2, f_and},
     {"append",		2, 2, f_append},
     {"argc",		0, 0, f_argc},
     {"argidx",		0, 0, f_argidx},
@@ -7676,7 +7865,7 @@
     {"ceil",		1, 1, f_ceil},
 #endif
     {"changenr",	0, 0, f_changenr},
-    {"char2nr",		1, 1, f_char2nr},
+    {"char2nr",		1, 2, f_char2nr},
     {"cindent",		1, 1, f_cindent},
     {"clearmatches",	0, 0, f_clearmatches},
     {"col",		1, 1, f_col},
@@ -7708,7 +7897,7 @@
 #ifdef FEAT_FLOAT
     {"exp",		1, 1, f_exp},
 #endif
-    {"expand",		1, 2, f_expand},
+    {"expand",		1, 3, f_expand},
     {"extend",		2, 3, f_extend},
     {"feedkeys",	1, 2, f_feedkeys},
     {"file_readable",	1, 1, f_filereadable},	/* obsolete */
@@ -7734,7 +7923,7 @@
     {"garbagecollect",	0, 1, f_garbagecollect},
     {"get",		2, 3, f_get},
     {"getbufline",	2, 3, f_getbufline},
-    {"getbufvar",	2, 2, f_getbufvar},
+    {"getbufvar",	2, 3, f_getbufvar},
     {"getchar",		0, 1, f_getchar},
     {"getcharmod",	0, 0, f_getcharmod},
     {"getcmdline",	0, 0, f_getcmdline},
@@ -7754,12 +7943,12 @@
     {"getqflist",	0, 0, f_getqflist},
     {"getreg",		0, 2, f_getreg},
     {"getregtype",	0, 1, f_getregtype},
-    {"gettabvar",	2, 2, f_gettabvar},
-    {"gettabwinvar",	3, 3, f_gettabwinvar},
+    {"gettabvar",	2, 3, f_gettabvar},
+    {"gettabwinvar",	3, 4, f_gettabwinvar},
     {"getwinposx",	0, 0, f_getwinposx},
     {"getwinposy",	0, 0, f_getwinposy},
-    {"getwinvar",	2, 2, f_getwinvar},
-    {"glob",		1, 2, f_glob},
+    {"getwinvar",	2, 3, f_getwinvar},
+    {"glob",		1, 3, f_glob},
     {"globpath",	2, 3, f_globpath},
     {"has",		1, 1, f_has},
     {"has_key",		2, 2, f_has_key},
@@ -7784,6 +7973,7 @@
     {"inputsave",	0, 0, f_inputsave},
     {"inputsecret",	1, 2, f_inputsecret},
     {"insert",		2, 3, f_insert},
+    {"invert",		1, 1, f_invert},
     {"isdirectory",	1, 1, f_isdirectory},
     {"islocked",	1, 1, f_islocked},
     {"items",		1, 1, f_items},
@@ -7801,8 +7991,11 @@
     {"log",		1, 1, f_log},
     {"log10",		1, 1, f_log10},
 #endif
+#ifdef FEAT_LUA
+    {"luaeval",         1, 2, f_luaeval},
+#endif
     {"map",		2, 2, f_map},
-    {"maparg",		1, 3, f_maparg},
+    {"maparg",		1, 4, f_maparg},
     {"mapcheck",	1, 3, f_mapcheck},
     {"match",		2, 4, f_match},
     {"matchadd",	2, 4, f_matchadd},
@@ -7821,7 +8014,8 @@
     {"mzeval",		1, 1, f_mzeval},
 #endif
     {"nextnonblank",	1, 1, f_nextnonblank},
-    {"nr2char",		1, 1, f_nr2char},
+    {"nr2char",		1, 2, f_nr2char},
+    {"or",		2, 2, f_or},
     {"pathshorten",	1, 1, f_pathshorten},
 #ifdef FEAT_FLOAT
     {"pow",		2, 2, f_pow},
@@ -7829,6 +8023,12 @@
     {"prevnonblank",	1, 1, f_prevnonblank},
     {"printf",		2, 19, f_printf},
     {"pumvisible",	0, 0, f_pumvisible},
+#ifdef FEAT_PYTHON3
+    {"py3eval",		1, 1, f_py3eval},
+#endif
+#ifdef FEAT_PYTHON
+    {"pyeval",		1, 1, f_pyeval},
+#endif
     {"range",		1, 3, f_range},
     {"readfile",	1, 3, f_readfile},
     {"reltime",		0, 2, f_reltime},
@@ -7846,6 +8046,10 @@
 #ifdef FEAT_FLOAT
     {"round",		1, 1, f_round},
 #endif
+    {"screenattr",	2, 2, f_screenattr},
+    {"screenchar",	2, 2, f_screenchar},
+    {"screencol",	0, 0, f_screencol},
+    {"screenrow",	0, 0, f_screenrow},
     {"search",		1, 4, f_search},
     {"searchdecl",	1, 3, f_searchdecl},
     {"searchpair",	3, 7, f_searchpair},
@@ -7864,13 +8068,17 @@
     {"settabvar",	3, 3, f_settabvar},
     {"settabwinvar",	4, 4, f_settabwinvar},
     {"setwinvar",	3, 3, f_setwinvar},
+#ifdef FEAT_CRYPT
+    {"sha256",		1, 1, f_sha256},
+#endif
     {"shellescape",	1, 2, f_shellescape},
+    {"shiftwidth",	0, 0, f_shiftwidth},
     {"simplify",	1, 1, f_simplify},
 #ifdef FEAT_FLOAT
     {"sin",		1, 1, f_sin},
     {"sinh",		1, 1, f_sinh},
 #endif
-    {"sort",		1, 2, f_sort},
+    {"sort",		1, 3, f_sort},
     {"soundfold",	1, 1, f_soundfold},
     {"spellbadword",	0, 1, f_spellbadword},
     {"spellsuggest",	1, 3, f_spellsuggest},
@@ -7923,6 +8131,7 @@
     {"values",		1, 1, f_values},
     {"virtcol",		1, 1, f_virtcol},
     {"visualmode",	0, 1, f_visualmode},
+    {"wildmenumode",	0, 0, f_wildmenumode},
     {"winbufnr",	1, 1, f_winbufnr},
     {"wincol",		0, 0, f_wincol},
     {"winheight",	1, 1, f_winheight},
@@ -7933,6 +8142,7 @@
     {"winsaveview",	0, 0, f_winsaveview},
     {"winwidth",	1, 1, f_winwidth},
     {"writefile",	2, 3, f_writefile},
+    {"xor",		2, 2, f_xor},
 };
 
 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
@@ -8150,7 +8360,7 @@
 
 /*
  * Call a function with its resolved parameters
- * Return OK when the function can't be called,  FAIL otherwise.
+ * Return FAIL when the function can't be called,  OK otherwise.
  * Also returns OK when an error was encountered while executing the function.
  */
     static int
@@ -8497,7 +8707,7 @@
     if (argvars[0].v_type == VAR_LIST)
     {
 	if ((l = argvars[0].vval.v_list) != NULL
-		&& !tv_check_lock(l->lv_lock, (char_u *)"add()")
+		&& !tv_check_lock(l->lv_lock, (char_u *)_("add() argument"))
 		&& list_append_tv(l, &argvars[1]) == OK)
 	    copy_tv(&argvars[0], rettv);
     }
@@ -8506,6 +8716,18 @@
 }
 
 /*
+ * "and(expr, expr)" function
+ */
+    static void
+f_and(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
+					& get_tv_number_chk(&argvars[1], NULL);
+}
+
+/*
  * "append(lnum, string/list)" function
  */
     static void
@@ -8520,6 +8742,14 @@
     typval_T	*tv;
     long	added = 0;
 
+    /* When coming here from Insert mode, sync undo, so that this can be
+     * undone separately from what was previously inserted. */
+    if (u_sync_once == 2)
+    {
+	u_sync_once = 1; /* notify that u_sync() was called */
+	u_sync(TRUE);
+    }
+
     lnum = get_tv_lnum(argvars);
     if (lnum >= 0
 	    && lnum <= curbuf->b_ml.ml_line_count
@@ -8796,14 +9026,15 @@
     rettv->vval.v_number = (buf != NULL && buf->b_ml.ml_mfp != NULL);
 }
 
-static buf_T *get_buf_tv __ARGS((typval_T *tv));
+static buf_T *get_buf_tv __ARGS((typval_T *tv, int curtab_only));
 
 /*
  * Get buffer by number or pattern.
  */
     static buf_T *
-get_buf_tv(tv)
+get_buf_tv(tv, curtab_only)
     typval_T	*tv;
+    int		curtab_only;
 {
     char_u	*name = tv->vval.v_string;
     int		save_magic;
@@ -8826,7 +9057,7 @@
     p_cpo = (char_u *)"";
 
     buf = buflist_findnr(buflist_findpat(name, name + STRLEN(name),
-								TRUE, FALSE));
+						    TRUE, FALSE, curtab_only));
 
     p_magic = save_magic;
     p_cpo = save_cpo;
@@ -8850,7 +9081,7 @@
 
     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
     rettv->v_type = VAR_STRING;
     if (buf != NULL && buf->b_fname != NULL)
 	rettv->vval.v_string = vim_strsave(buf->b_fname);
@@ -8873,7 +9104,7 @@
 
     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
     --emsg_off;
 
     /* If the buffer isn't found and the second argument is not zero create a
@@ -8908,7 +9139,7 @@
 
     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], TRUE);
 #ifdef FEAT_WINDOWS
     for (wp = firstwin; wp; wp = wp->w_next)
     {
@@ -8980,33 +9211,68 @@
 #endif
 }
 
-/*
- * "call(func, arglist)" function
- */
-    static void
-f_call(argvars, rettv)
-    typval_T	*argvars;
+    int
+func_call(name, args, selfdict, rettv)
+    char_u	*name;
+    typval_T	*args;
+    dict_T	*selfdict;
     typval_T	*rettv;
 {
-    char_u	*func;
+    listitem_T	*item;
     typval_T	argv[MAX_FUNC_ARGS + 1];
     int		argc = 0;
-    listitem_T	*item;
     int		dummy;
-    dict_T	*selfdict = NULL;
+    int		r = 0;
 
-    if (argvars[1].v_type != VAR_LIST)
+    for (item = args->vval.v_list->lv_first; item != NULL;
+							 item = item->li_next)
     {
-	EMSG(_(e_listreq));
-	return;
+	if (argc == MAX_FUNC_ARGS)
+	{
+	    EMSG(_("E699: Too many arguments"));
+	    break;
+	}
+	/* Make a copy of each argument.  This is needed to be able to set
+	 * v_lock to VAR_FIXED in the copy without changing the original list.
+	 */
+	copy_tv(&item->li_tv, &argv[argc++]);
     }
-    if (argvars[1].vval.v_list == NULL)
-	return;
 
-    if (argvars[0].v_type == VAR_FUNC)
-	func = argvars[0].vval.v_string;
-    else
-	func = get_tv_string(&argvars[0]);
+    if (item == NULL)
+	r = call_func(name, (int)STRLEN(name), rettv, argc, argv,
+				 curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+						      &dummy, TRUE, selfdict);
+
+    /* Free the arguments. */
+    while (argc > 0)
+	clear_tv(&argv[--argc]);
+
+    return r;
+}
+
+/*
+ * "call(func, arglist)" function
+ */
+    static void
+f_call(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    char_u	*func;
+    dict_T	*selfdict = NULL;
+
+    if (argvars[1].v_type != VAR_LIST)
+    {
+	EMSG(_(e_listreq));
+	return;
+    }
+    if (argvars[1].vval.v_list == NULL)
+	return;
+
+    if (argvars[0].v_type == VAR_FUNC)
+	func = argvars[0].vval.v_string;
+    else
+	func = get_tv_string(&argvars[0]);
     if (*func == NUL)
 	return;		/* type error or empty name */
 
@@ -9020,28 +9286,7 @@
 	selfdict = argvars[2].vval.v_dict;
     }
 
-    for (item = argvars[1].vval.v_list->lv_first; item != NULL;
-							 item = item->li_next)
-    {
-	if (argc == MAX_FUNC_ARGS)
-	{
-	    EMSG(_("E699: Too many arguments"));
-	    break;
-	}
-	/* Make a copy of each argument.  This is needed to be able to set
-	 * v_lock to VAR_FIXED in the copy without changing the original list.
-	 */
-	copy_tv(&item->li_tv, &argv[argc++]);
-    }
-
-    if (item == NULL)
-	(void)call_func(func, (int)STRLEN(func), rettv, argc, argv,
-				 curwin->w_cursor.lnum, curwin->w_cursor.lnum,
-						      &dummy, TRUE, selfdict);
-
-    /* Free the arguments. */
-    while (argc > 0)
-	clear_tv(&argv[--argc]);
+    (void)func_call(func, &argvars[1], selfdict, rettv);
 }
 
 #ifdef FEAT_FLOAT
@@ -9084,7 +9329,17 @@
 {
 #ifdef FEAT_MBYTE
     if (has_mbyte)
-	rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
+    {
+	int	utf8 = 0;
+
+	if (argvars[1].v_type != VAR_UNKNOWN)
+	    utf8 = get_tv_number_chk(&argvars[1], NULL);
+
+	if (utf8)
+	    rettv->vval.v_number = (*utf_ptr2char)(get_tv_string(&argvars[0]));
+	else
+	    rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
+    }
     else
 #endif
     rettv->vval.v_number = get_tv_string(&argvars[0])[0];
@@ -9095,7 +9350,7 @@
  */
     static void
 f_cindent(argvars, rettv)
-    typval_T	*argvars;
+    typval_T	*argvars UNUSED;
     typval_T	*rettv;
 {
 #ifdef FEAT_CINDENT
@@ -9298,7 +9553,7 @@
 
     if (!error)
 	rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
-								   def, NULL);
+							    def, NULL, FALSE);
 #endif
 }
 
@@ -9389,7 +9644,7 @@
 	    }
 
 	    for ( ; li != NULL; li = li->li_next)
-		if (tv_equal(&li->li_tv, &argvars[1], ic))
+		if (tv_equal(&li->li_tv, &argvars[1], ic, FALSE))
 		    ++n;
 	}
     }
@@ -9416,7 +9671,7 @@
 		if (!HASHITEM_EMPTY(hi))
 		{
 		    --todo;
-		    if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic))
+		    if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic, FALSE))
 			++n;
 		}
 	    }
@@ -9857,17 +10112,36 @@
     char_u	*s;
     int		len;
     char_u	*errormsg;
-    int		flags = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
+    int		options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
     expand_T	xpc;
     int		error = FALSE;
+    char_u	*result;
 
     rettv->v_type = VAR_STRING;
+    if (argvars[1].v_type != VAR_UNKNOWN
+	    && argvars[2].v_type != VAR_UNKNOWN
+	    && get_tv_number_chk(&argvars[2], &error)
+	    && !error)
+    {
+	rettv->v_type = VAR_LIST;
+	rettv->vval.v_list = NULL;
+    }
+
     s = get_tv_string(&argvars[0]);
     if (*s == '%' || *s == '#' || *s == '<')
     {
 	++emsg_off;
-	rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL);
+	result = eval_vars(s, s, &len, NULL, &errormsg, NULL);
 	--emsg_off;
+	if (rettv->v_type == VAR_LIST)
+	{
+	    if (rettv_list_alloc(rettv) != FAIL && result != NULL)
+		list_append_string(rettv->vval.v_list, result, -1);
+	    else
+		vim_free(result);
+	}
+	else
+	    rettv->vval.v_string = result;
     }
     else
     {
@@ -9875,12 +10149,25 @@
 	 * for 'wildignore' and don't put matches for 'suffixes' at the end. */
 	if (argvars[1].v_type != VAR_UNKNOWN
 				    && get_tv_number_chk(&argvars[1], &error))
-	    flags |= WILD_KEEP_ALL;
+	    options |= WILD_KEEP_ALL;
 	if (!error)
 	{
 	    ExpandInit(&xpc);
 	    xpc.xp_context = EXPAND_FILES;
-	    rettv->vval.v_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
+	    if (p_wic)
+		options += WILD_ICASE;
+	    if (rettv->v_type == VAR_STRING)
+		rettv->vval.v_string = ExpandOne(&xpc, s, NULL,
+							   options, WILD_ALL);
+	    else if (rettv_list_alloc(rettv) != FAIL)
+	    {
+		int i;
+
+		ExpandOne(&xpc, s, NULL, options, WILD_ALL_KEEP);
+		for (i = 0; i < xpc.xp_numfiles; i++)
+		    list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
+		ExpandCleanup(&xpc);
+	    }
 	}
 	else
 	    rettv->vval.v_string = NULL;
@@ -9888,6 +10175,62 @@
 }
 
 /*
+ * Go over all entries in "d2" and add them to "d1".
+ * When "action" is "error" then a duplicate key is an error.
+ * When "action" is "force" then a duplicate key is overwritten.
+ * Otherwise duplicate keys are ignored ("action" is "keep").
+ */
+    void
+dict_extend(d1, d2, action)
+    dict_T	*d1;
+    dict_T	*d2;
+    char_u	*action;
+{
+    dictitem_T	*di1;
+    hashitem_T	*hi2;
+    int		todo;
+
+    todo = (int)d2->dv_hashtab.ht_used;
+    for (hi2 = d2->dv_hashtab.ht_array; todo > 0; ++hi2)
+    {
+	if (!HASHITEM_EMPTY(hi2))
+	{
+	    --todo;
+	    di1 = dict_find(d1, hi2->hi_key, -1);
+	    if (d1->dv_scope != 0)
+	    {
+		/* Disallow replacing a builtin function in l: and g:.
+		 * Check the key to be valid when adding to any
+		 * scope. */
+		if (d1->dv_scope == VAR_DEF_SCOPE
+			&& HI2DI(hi2)->di_tv.v_type == VAR_FUNC
+			&& var_check_func_name(hi2->hi_key,
+							 di1 == NULL))
+		    break;
+		if (!valid_varname(hi2->hi_key))
+		    break;
+	    }
+	    if (di1 == NULL)
+	    {
+		di1 = dictitem_copy(HI2DI(hi2));
+		if (di1 != NULL && dict_add(d1, di1) == FAIL)
+		    dictitem_free(di1);
+	    }
+	    else if (*action == 'e')
+	    {
+		EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
+		break;
+	    }
+	    else if (*action == 'f' && HI2DI(hi2) != di1)
+	    {
+		clear_tv(&di1->di_tv);
+		copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
+	    }
+	}
+    }
+}
+
+/*
  * "extend(list, list [, idx])" function
  * "extend(dict, dict [, action])" function
  */
@@ -9896,6 +10239,8 @@
     typval_T	*argvars;
     typval_T	*rettv;
 {
+    char      *arg_errmsg = N_("extend() argument");
+
     if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
     {
 	list_T		*l1, *l2;
@@ -9905,7 +10250,7 @@
 
 	l1 = argvars[0].vval.v_list;
 	l2 = argvars[1].vval.v_list;
-	if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)"extend()")
+	if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)_(arg_errmsg))
 		&& l2 != NULL)
 	{
 	    if (argvars[2].v_type != VAR_UNKNOWN)
@@ -9935,16 +10280,13 @@
     }
     else if (argvars[0].v_type == VAR_DICT && argvars[1].v_type == VAR_DICT)
     {
-	dict_T		*d1, *d2;
-	dictitem_T	*di1;
-	char_u		*action;
-	int		i;
-	hashitem_T	*hi2;
-	int		todo;
+	dict_T	*d1, *d2;
+	char_u	*action;
+	int	i;
 
 	d1 = argvars[0].vval.v_dict;
 	d2 = argvars[1].vval.v_dict;
-	if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)"extend()")
+	if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)_(arg_errmsg))
 		&& d2 != NULL)
 	{
 	    /* Check the third argument. */
@@ -9967,33 +10309,7 @@
 	    else
 		action = (char_u *)"force";
 
-	    /* Go over all entries in the second dict and add them to the
-	     * first dict. */
-	    todo = (int)d2->dv_hashtab.ht_used;
-	    for (hi2 = d2->dv_hashtab.ht_array; todo > 0; ++hi2)
-	    {
-		if (!HASHITEM_EMPTY(hi2))
-		{
-		    --todo;
-		    di1 = dict_find(d1, hi2->hi_key, -1);
-		    if (di1 == NULL)
-		    {
-			di1 = dictitem_copy(HI2DI(hi2));
-			if (di1 != NULL && dict_add(d1, di1) == FAIL)
-			    dictitem_free(di1);
-		    }
-		    else if (*action == 'e')
-		    {
-			EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
-			break;
-		    }
-		    else if (*action == 'f')
-		    {
-			clear_tv(&di1->di_tv);
-			copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
-		    }
-		}
-	    }
+	    dict_extend(d1, d2, action);
 
 	    copy_tv(&argvars[0], rettv);
 	}
@@ -10097,9 +10413,9 @@
 
     static void
 findfilendir(argvars, rettv, find_what)
-    typval_T	*argvars;
+    typval_T	*argvars UNUSED;
     typval_T	*rettv;
-    int		find_what;
+    int		find_what UNUSED;
 {
 #ifdef FEAT_SEARCHPATH
     char_u	*fname;
@@ -10140,7 +10456,7 @@
     {
 	do
 	{
-	    if (rettv->v_type == VAR_STRING)
+	    if (rettv->v_type == VAR_STRING || rettv->v_type == VAR_LIST)
 		vim_free(fresult);
 	    fresult = find_file_in_path_option(first ? fname : NULL,
 					       first ? (int)STRLEN(fname) : 0,
@@ -10186,20 +10502,22 @@
     typval_T	save_key;
     int		rem;
     int		todo;
-    char_u	*ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
+    char_u	*ermsg = (char_u *)(map ? "map()" : "filter()");
+    char	*arg_errmsg = (map ? N_("map() argument")
+				   : N_("filter() argument"));
     int		save_did_emsg;
     int		idx = 0;
 
     if (argvars[0].v_type == VAR_LIST)
     {
 	if ((l = argvars[0].vval.v_list) == NULL
-		|| (map && tv_check_lock(l->lv_lock, ermsg)))
+		|| tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
 	    return;
     }
     else if (argvars[0].v_type == VAR_DICT)
     {
 	if ((d = argvars[0].vval.v_dict) == NULL
-		|| (map && tv_check_lock(d->dv_lock, ermsg)))
+		|| tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
 	    return;
     }
     else
@@ -10236,7 +10554,8 @@
 		{
 		    --todo;
 		    di = HI2DI(hi);
-		    if (tv_check_lock(di->di_tv.v_lock, ermsg))
+		    if (tv_check_lock(di->di_tv.v_lock,
+						     (char_u *)_(arg_errmsg)))
 			break;
 		    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
 		    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
@@ -10255,7 +10574,7 @@
 
 	    for (li = l->lv_first; li != NULL; li = nli)
 	    {
-		if (tv_check_lock(li->li_tv.v_lock, ermsg))
+		if (tv_check_lock(li->li_tv.v_lock, (char_u *)_(arg_errmsg)))
 		    break;
 		nli = li->li_next;
 		vimvars[VV_KEY].vv_nr = idx;
@@ -10466,9 +10785,9 @@
  */
     static void
 foldclosed_both(argvars, rettv, end)
-    typval_T	*argvars;
+    typval_T	*argvars UNUSED;
     typval_T	*rettv;
-    int		end;
+    int		end UNUSED;
 {
 #ifdef FEAT_FOLDING
     linenr_T	lnum;
@@ -10517,8 +10836,8 @@
  */
     static void
 f_foldlevel(argvars, rettv)
-    typval_T	*argvars;
-    typval_T	*rettv;
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv UNUSED;
 {
 #ifdef FEAT_FOLDING
     linenr_T	lnum;
@@ -10667,7 +10986,26 @@
 	EMSG2(_("E700: Unknown function: %s"), s);
     else
     {
-	rettv->vval.v_string = vim_strsave(s);
+	if (STRNCMP(s, "s:", 2) == 0 || STRNCMP(s, "<SID>", 5) == 0)
+	{
+	    char	sid_buf[25];
+	    int		off = *s == 's' ? 2 : 5;
+
+	    /* Expand s: and <SID> into <SNR>nr_, so that the function can
+	     * also be called from another script. Using trans_function_name()
+	     * would also work, but some plugins depend on the name being
+	     * printable text. */
+	    sprintf(sid_buf, "<SNR>%ld_", (long)current_SID);
+	    rettv->vval.v_string =
+			    alloc((int)(STRLEN(sid_buf) + STRLEN(s + off) + 1));
+	    if (rettv->vval.v_string != NULL)
+	    {
+		STRCPY(rettv->vval.v_string, sid_buf);
+		STRCAT(rettv->vval.v_string, s + off);
+	    }
+	}
+	else
+	    rettv->vval.v_string = vim_strsave(s);
 	rettv->v_type = VAR_FUNC;
     }
 }
@@ -10798,7 +11136,7 @@
 
     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
     --emsg_off;
 
     lnum = get_tv_lnum_buf(&argvars[1], buf);
@@ -10822,11 +11160,12 @@
     buf_T	*save_curbuf;
     char_u	*varname;
     dictitem_T	*v;
+    int		done = FALSE;
 
     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
     varname = get_tv_string_chk(&argvars[1]);
     ++emsg_off;
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
 
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
@@ -10838,24 +11177,37 @@
 	curbuf = buf;
 
 	if (*varname == '&')	/* buffer-local-option */
-	    get_option_tv(&varname, rettv, TRUE);
+	{
+	    if (get_option_tv(&varname, rettv, TRUE) == OK)
+		done = TRUE;
+	}
+	else if (STRCMP(varname, "changedtick") == 0)
+	{
+	    rettv->v_type = VAR_NUMBER;
+	    rettv->vval.v_number = curbuf->b_changedtick;
+	    done = TRUE;
+	}
 	else
 	{
-	    if (*varname == NUL)
-		/* let getbufvar({nr}, "") return the "b:" dictionary.  The
-		 * scope prefix before the NUL byte is required by
-		 * find_var_in_ht(). */
-		varname = (char_u *)"b:" + 2;
-	    /* look up the variable */
-	    v = find_var_in_ht(&curbuf->b_vars.dv_hashtab, varname, FALSE);
+	    /* Look up the variable. */
+	    /* Let getbufvar({nr}, "") return the "b:" dictionary. */
+	    v = find_var_in_ht(&curbuf->b_vars->dv_hashtab,
+							 'b', varname, FALSE);
 	    if (v != NULL)
+	    {
 		copy_tv(&v->di_tv, rettv);
+		done = TRUE;
+	    }
 	}
 
 	/* restore previous notion of curbuf */
 	curbuf = save_curbuf;
     }
 
+    if (!done && argvars[2].v_type != VAR_UNKNOWN)
+	/* use the default value */
+	copy_tv(&argvars[2], rettv);
+
     --emsg_off;
 }
 
@@ -10930,27 +11282,7 @@
 	rettv->vval.v_string = vim_strsave(temp);
 
 #ifdef FEAT_MOUSE
-	if (n == K_LEFTMOUSE
-		|| n == K_LEFTMOUSE_NM
-		|| n == K_LEFTDRAG
-		|| n == K_LEFTRELEASE
-		|| n == K_LEFTRELEASE_NM
-		|| n == K_MIDDLEMOUSE
-		|| n == K_MIDDLEDRAG
-		|| n == K_MIDDLERELEASE
-		|| n == K_RIGHTMOUSE
-		|| n == K_RIGHTDRAG
-		|| n == K_RIGHTRELEASE
-		|| n == K_X1MOUSE
-		|| n == K_X1DRAG
-		|| n == K_X1RELEASE
-		|| n == K_X2MOUSE
-		|| n == K_X2DRAG
-		|| n == K_X2RELEASE
-		|| n == K_MOUSELEFT
-		|| n == K_MOUSERIGHT
-		|| n == K_MOUSEDOWN
-		|| n == K_MOUSEUP)
+	if (is_mouse_key(n))
 	{
 	    int		row = mouse_row;
 	    int		col = mouse_col;
@@ -11039,18 +11371,22 @@
     typval_T	*argvars UNUSED;
     typval_T	*rettv;
 {
-    char_u	cwd[MAXPATHL];
+    char_u	*cwd;
 
     rettv->v_type = VAR_STRING;
-    if (mch_dirname(cwd, MAXPATHL) == FAIL)
-	rettv->vval.v_string = NULL;
-    else
+    rettv->vval.v_string = NULL;
+    cwd = alloc(MAXPATHL);
+    if (cwd != NULL)
     {
-	rettv->vval.v_string = vim_strsave(cwd);
+	if (mch_dirname(cwd, MAXPATHL) != FAIL)
+	{
+	    rettv->vval.v_string = vim_strsave(cwd);
 #ifdef BACKSLASH_IN_FILENAME
-	if (rettv->vval.v_string != NULL)
-	    slash_adjust(rettv->vval.v_string);
+	    if (rettv->vval.v_string != NULL)
+		slash_adjust(rettv->vval.v_string);
 #endif
+	}
+	vim_free(cwd);
     }
 }
 
@@ -11289,7 +11625,7 @@
     static void
 f_getmatches(argvars, rettv)
     typval_T	*argvars UNUSED;
-    typval_T	*rettv;
+    typval_T	*rettv UNUSED;
 {
 #ifdef FEAT_SEARCH_EXTRA
     dict_T	*dict;
@@ -11477,6 +11813,7 @@
     tabpage_T	*tp;
     dictitem_T	*v;
     char_u	*varname;
+    int		done = FALSE;
 
     rettv->v_type = VAR_STRING;
     rettv->vval.v_string = NULL;
@@ -11486,10 +11823,16 @@
     if (tp != NULL && varname != NULL)
     {
 	/* look up the variable */
-	v = find_var_in_ht(&tp->tp_vars.dv_hashtab, varname, FALSE);
+	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE);
 	if (v != NULL)
+	{
 	    copy_tv(&v->di_tv, rettv);
+	    done = TRUE;
+	}
     }
+
+    if (!done && argvars[2].v_type != VAR_UNKNOWN)
+	copy_tv(&argvars[2], rettv);
 }
 
 /*
@@ -11549,7 +11892,7 @@
     static win_T *
 find_win_by_nr(vp, tp)
     typval_T	*vp;
-    tabpage_T	*tp;	    /* NULL for current tab page */
+    tabpage_T	*tp UNUSED;	/* NULL for current tab page */
 {
 #ifdef FEAT_WINDOWS
     win_T	*wp;
@@ -11599,7 +11942,9 @@
     win_T	*win, *oldcurwin;
     char_u	*varname;
     dictitem_T	*v;
-    tabpage_T	*tp;
+    tabpage_T	*tp = NULL;
+    tabpage_T	*oldtabpage;
+    int		done = FALSE;
 
 #ifdef FEAT_WINDOWS
     if (off == 1)
@@ -11616,32 +11961,35 @@
 
     if (win != NULL && varname != NULL)
     {
-	/* Set curwin to be our win, temporarily.  Also set curbuf, so
-	 * that we can get buffer-local options. */
-	oldcurwin = curwin;
-	curwin = win;
-	curbuf = win->w_buffer;
+	/* Set curwin to be our win, temporarily.  Also set the tabpage,
+	 * otherwise the window is not valid. */
+	switch_win(&oldcurwin, &oldtabpage, win, tp, TRUE);
 
 	if (*varname == '&')	/* window-local-option */
-	    get_option_tv(&varname, rettv, 1);
+	{
+	    if (get_option_tv(&varname, rettv, 1) == OK)
+		done = TRUE;
+	}
 	else
 	{
-	    if (*varname == NUL)
-		/* let getwinvar({nr}, "") return the "w:" dictionary.  The
-		 * scope prefix before the NUL byte is required by
-		 * find_var_in_ht(). */
-		varname = (char_u *)"w:" + 2;
-	    /* look up the variable */
-	    v = find_var_in_ht(&win->w_vars.dv_hashtab, varname, FALSE);
+	    /* Look up the variable. */
+	    /* Let getwinvar({nr}, "") return the "w:" dictionary. */
+	    v = find_var_in_ht(&win->w_vars->dv_hashtab, 'w', varname, FALSE);
 	    if (v != NULL)
+	    {
 		copy_tv(&v->di_tv, rettv);
+		done = TRUE;
+	    }
 	}
 
 	/* restore previous notion of curwin */
-	curwin = oldcurwin;
-	curbuf = curwin->w_buffer;
+	restore_win(oldcurwin, oldtabpage, TRUE);
     }
 
+    if (!done && argvars[off + 2].v_type != VAR_UNKNOWN)
+	/* use the default return value */
+	copy_tv(&argvars[off + 2], rettv);
+
     --emsg_off;
 }
 
@@ -11653,22 +12001,44 @@
     typval_T	*argvars;
     typval_T	*rettv;
 {
-    int		flags = WILD_SILENT|WILD_USE_NL;
+    int		options = WILD_SILENT|WILD_USE_NL;
     expand_T	xpc;
     int		error = FALSE;
 
     /* When the optional second argument is non-zero, don't remove matches
-    * for 'wildignore' and don't put matches for 'suffixes' at the end. */
-    if (argvars[1].v_type != VAR_UNKNOWN
-				&& get_tv_number_chk(&argvars[1], &error))
-	flags |= WILD_KEEP_ALL;
+     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
     rettv->v_type = VAR_STRING;
+    if (argvars[1].v_type != VAR_UNKNOWN)
+    {
+	if (get_tv_number_chk(&argvars[1], &error))
+	    options |= WILD_KEEP_ALL;
+	if (argvars[2].v_type != VAR_UNKNOWN
+				    && get_tv_number_chk(&argvars[2], &error))
+	{
+	    rettv->v_type = VAR_LIST;
+	    rettv->vval.v_list = NULL;
+	}
+    }
     if (!error)
     {
 	ExpandInit(&xpc);
 	xpc.xp_context = EXPAND_FILES;
-	rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
-						       NULL, flags, WILD_ALL);
+	if (p_wic)
+	    options += WILD_ICASE;
+	if (rettv->v_type == VAR_STRING)
+	    rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+						     NULL, options, WILD_ALL);
+	else if (rettv_list_alloc(rettv) != FAIL)
+	{
+	  int i;
+
+	  ExpandOne(&xpc, get_tv_string(&argvars[0]),
+						NULL, options, WILD_ALL_KEEP);
+	  for (i = 0; i < xpc.xp_numfiles; i++)
+	      list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
+
+	  ExpandCleanup(&xpc);
+	}
     }
     else
 	rettv->vval.v_string = NULL;
@@ -11741,9 +12111,6 @@
 #ifdef __QNX__
 	"qnx",
 #endif
-#ifdef RISCOS
-	"riscos",
-#endif
 #ifdef UNIX
 	"unix",
 #endif
@@ -11786,6 +12153,11 @@
 	"all_builtin_terms",
 # endif
 #endif
+#if defined(FEAT_BROWSE) && (defined(USE_FILE_CHOOSER) \
+	|| defined(FEAT_GUI_W32) \
+	|| defined(FEAT_GUI_MOTIF))
+	"browsefilter",
+#endif
 #ifdef FEAT_BYTEOFF
 	"byte_offset",
 #endif
@@ -11856,7 +12228,7 @@
 #ifdef FEAT_SEARCHPATH
 	"file_in_path",
 #endif
-#if defined(UNIX) && !defined(USE_SYSTEM)
+#ifdef FEAT_FILTERPIPE
 	"filterpipe",
 #endif
 #ifdef FEAT_FIND_ID
@@ -11978,9 +12350,15 @@
 # ifdef FEAT_MOUSE_PTERM
 	"mouse_pterm",
 # endif
+# ifdef FEAT_MOUSE_SGR
+	"mouse_sgr",
+# endif
 # ifdef FEAT_SYSMOUSE
 	"mouse_sysmouse",
 # endif
+# ifdef FEAT_MOUSE_URXVT
+	"mouse_urxvt",
+# endif
 # ifdef FEAT_MOUSE_XTERM
 	"mouse_xterm",
 # endif
@@ -12002,9 +12380,6 @@
 #ifdef FEAT_OLE
 	"ole",
 #endif
-#ifdef FEAT_OSFILETYPE
-	"osfiletype",
-#endif
 #ifdef FEAT_PATH_EXTRA
 	"path_extra",
 #endif
@@ -12116,6 +12491,9 @@
 #ifdef FEAT_TOOLBAR
 	"toolbar",
 #endif
+#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+	"unnamedplus",
+#endif
 #ifdef FEAT_USR_CMDS
 	"user-commands",    /* was accidentally included in 5.4 */
 	"user_commands",
@@ -12159,6 +12537,9 @@
 #ifdef FEAT_XFONTSET
 	"xfontset",
 #endif
+#ifdef FEAT_XPM_W32
+	"xpm_w32",
+#endif
 #ifdef USE_XSMP
 	"xsmp",
 #endif
@@ -12572,7 +12953,7 @@
 	}
 
 	for ( ; item != NULL; item = item->li_next, ++idx)
-	    if (tv_equal(&item->li_tv, &argvars[1], ic))
+	    if (tv_equal(&item->li_tv, &argvars[1], ic, FALSE))
 	    {
 		rettv->vval.v_number = idx;
 		break;
@@ -12648,6 +13029,7 @@
 		int	xp_namelen;
 		long	argt;
 
+		/* input() with a third argument: completion */
 		rettv->vval.v_string = NULL;
 
 		xp_name = get_tv_string_buf_chk(&argvars[2], buf);
@@ -12666,6 +13048,11 @@
 	    rettv->vval.v_string =
 		getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
 				  xp_type, xp_arg);
+	if (inputdialog && rettv->vval.v_string == NULL
+		&& argvars[1].v_type != VAR_UNKNOWN
+		&& argvars[2].v_type != VAR_UNKNOWN)
+	    rettv->vval.v_string = vim_strsave(get_tv_string_buf(
+							   &argvars[2], buf));
 
 	vim_free(xp_arg);
 
@@ -12712,7 +13099,7 @@
 	    IObuff[0] = NUL;
 	if (message != NULL && defstr != NULL
 		&& do_dialog(VIM_QUESTION, NULL, message,
-				(char_u *)_("&OK\n&Cancel"), 1, IObuff) == 1)
+			  (char_u *)_("&OK\n&Cancel"), 1, IObuff, FALSE) == 1)
 	    rettv->vval.v_string = vim_strsave(IObuff);
 	else
 	{
@@ -12850,7 +13237,7 @@
     if (argvars[0].v_type != VAR_LIST)
 	EMSG2(_(e_listarg), "insert()");
     else if ((l = argvars[0].vval.v_list) != NULL
-	    && !tv_check_lock(l->lv_lock, (char_u *)"insert()"))
+	    && !tv_check_lock(l->lv_lock, (char_u *)_("insert() argument")))
     {
 	if (argvars[2].v_type != VAR_UNKNOWN)
 	    before = get_tv_number_chk(&argvars[2], &error);
@@ -12877,6 +13264,17 @@
 }
 
 /*
+ * "invert(expr)" function
+ */
+    static void
+f_invert(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
+}
+
+/*
  * "isdirectory()" function
  */
     static void
@@ -13245,7 +13643,7 @@
  */
     static void
 f_lispindent(argvars, rettv)
-    typval_T	*argvars;
+    typval_T	*argvars UNUSED;
     typval_T	*rettv;
 {
 #ifdef FEAT_LISP
@@ -13290,8 +13688,10 @@
     char_u	*keys_buf = NULL;
     char_u	*rhs;
     int		mode;
-    garray_T	ga;
     int		abbr = FALSE;
+    int		get_dict = FALSE;
+    mapblock_T	*mp;
+    int		buffer_local;
 
     /* return empty string for failure */
     rettv->v_type = VAR_STRING;
@@ -13305,7 +13705,11 @@
     {
 	which = get_tv_string_buf_chk(&argvars[1], buf);
 	if (argvars[2].v_type != VAR_UNKNOWN)
+	{
 	    abbr = get_tv_number(&argvars[2]);
+	    if (argvars[3].v_type != VAR_UNKNOWN)
+		get_dict = get_tv_number(&argvars[3]);
+	}
     }
     else
 	which = (char_u *)"";
@@ -13315,19 +13719,35 @@
     mode = get_map_mode(&which, 0);
 
     keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, FALSE);
-    rhs = check_map(keys, mode, exact, FALSE, abbr);
+    rhs = check_map(keys, mode, exact, FALSE, abbr, &mp, &buffer_local);
     vim_free(keys_buf);
-    if (rhs != NULL)
-    {
-	ga_init(&ga);
-	ga.ga_itemsize = 1;
-	ga.ga_growsize = 40;
 
-	while (*rhs != NUL)
-	    ga_concat(&ga, str2special(&rhs, FALSE));
+    if (!get_dict)
+    {
+	/* Return a string. */
+	if (rhs != NULL)
+	    rettv->vval.v_string = str2special_save(rhs, FALSE);
+
+    }
+    else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
+    {
+	/* Return a dictionary. */
+	char_u	    *lhs = str2special_save(mp->m_keys, TRUE);
+	char_u	    *mapmode = map_mode_to_chars(mp->m_mode);
+	dict_T	    *dict = rettv->vval.v_dict;
+
+	dict_add_nr_str(dict, "lhs",	 0L, lhs);
+	dict_add_nr_str(dict, "rhs",     0L, mp->m_orig_str);
+	dict_add_nr_str(dict, "noremap", mp->m_noremap ? 1L : 0L , NULL);
+	dict_add_nr_str(dict, "expr",    mp->m_expr    ? 1L : 0L, NULL);
+	dict_add_nr_str(dict, "silent",  mp->m_silent  ? 1L : 0L, NULL);
+	dict_add_nr_str(dict, "sid",     (long)mp->m_script_ID, NULL);
+	dict_add_nr_str(dict, "buffer",  (long)buffer_local, NULL);
+	dict_add_nr_str(dict, "nowait",  mp->m_nowait  ? 1L : 0L, NULL);
+	dict_add_nr_str(dict, "mode",    0L, mapmode);
 
-	ga_append(&ga, NUL);
-	rettv->vval.v_string = (char_u *)ga.ga_data;
+	vim_free(lhs);
+	vim_free(mapmode);
     }
 }
 
@@ -13367,6 +13787,23 @@
 }
 #endif
 
+#ifdef FEAT_LUA
+/*
+ * "luaeval()" function
+ */
+    static void
+f_luaeval(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    char_u	*str;
+    char_u	buf[NUMBUFLEN];
+
+    str = get_tv_string_buf(&argvars[0], buf);
+    do_luaeval(str, argvars + 1, rettv);
+}
+#endif
+
 /*
  * "map()" function
  */
@@ -13577,7 +14014,7 @@
 		rettv->vval.v_number += (varnumber_T)(str - expr);
 	    }
 	}
-	vim_free(regmatch.regprog);
+	vim_regfree(regmatch.regprog);
     }
 
 theend:
@@ -13601,8 +14038,8 @@
  */
     static void
 f_matchadd(argvars, rettv)
-    typval_T	*argvars;
-    typval_T	*rettv;
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv UNUSED;
 {
 #ifdef FEAT_SEARCH_EXTRA
     char_u	buf[NUMBUFLEN];
@@ -13639,7 +14076,7 @@
  */
     static void
 f_matcharg(argvars, rettv)
-    typval_T	*argvars;
+    typval_T	*argvars UNUSED;
     typval_T	*rettv;
 {
     if (rettv_list_alloc(rettv) == OK)
@@ -13671,8 +14108,8 @@
  */
     static void
 f_matchdelete(argvars, rettv)
-    typval_T	*argvars;
-    typval_T	*rettv;
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv UNUSED;
 {
 #ifdef FEAT_SEARCH_EXTRA
     rettv->vval.v_number = match_delete(curwin,
@@ -13942,7 +14379,7 @@
     rettv->v_type = VAR_STRING;
 }
 
-#ifdef FEAT_MZSCHEME
+#if defined(FEAT_MZSCHEME) || defined(PROTO)
 /*
  * "mzeval()" function
  */
@@ -13957,6 +14394,22 @@
     str = get_tv_string_buf(&argvars[0], buf);
     do_mzeval(str, rettv);
 }
+
+    void
+mzscheme_call_vim(name, args, rettv)
+    char_u	*name;
+    typval_T	*args;
+    typval_T	*rettv;
+{
+    typval_T argvars[3];
+
+    argvars[0].v_type = VAR_STRING;
+    argvars[0].vval.v_string = name;
+    copy_tv(args, &argvars[1]);
+    argvars[2].v_type = VAR_UNKNOWN;
+    f_call(argvars, rettv);
+    clear_tv(&argvars[1]);
+}
 #endif
 
 /*
@@ -13994,7 +14447,16 @@
 
 #ifdef FEAT_MBYTE
     if (has_mbyte)
-	buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+    {
+	int	utf8 = 0;
+
+	if (argvars[1].v_type != VAR_UNKNOWN)
+	    utf8 = get_tv_number_chk(&argvars[1], NULL);
+	if (utf8)
+	    buf[(*utf_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+	else
+	    buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
+    }
     else
 #endif
     {
@@ -14006,6 +14468,18 @@
 }
 
 /*
+ * "or(expr, expr)" function
+ */
+    static void
+f_or(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
+					| get_tv_number_chk(&argvars[1], NULL);
+}
+
+/*
  * "pathshorten()" function
  */
     static void
@@ -14125,6 +14599,40 @@
 #endif
 }
 
+#ifdef FEAT_PYTHON3
+/*
+ * "py3eval()" function
+ */
+    static void
+f_py3eval(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    char_u	*str;
+    char_u	buf[NUMBUFLEN];
+
+    str = get_tv_string_buf(&argvars[0], buf);
+    do_py3eval(str, rettv);
+}
+#endif
+
+#ifdef FEAT_PYTHON
+/*
+ * "pyeval()" function
+ */
+    static void
+f_pyeval(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    char_u	*str;
+    char_u	buf[NUMBUFLEN];
+
+    str = get_tv_string_buf(&argvars[0], buf);
+    do_pyeval(str, rettv);
+}
+#endif
+
 /*
  * "range()" function
  */
@@ -14177,22 +14685,19 @@
     typval_T	*rettv;
 {
     int		binary = FALSE;
+    int		failed = FALSE;
     char_u	*fname;
     FILE	*fd;
-    listitem_T	*li;
-#define FREAD_SIZE 200	    /* optimized for text lines */
-    char_u	buf[FREAD_SIZE];
-    int		readlen;    /* size of last fread() */
-    int		buflen;	    /* nr of valid chars in buf[] */
-    int		filtd;	    /* how much in buf[] was NUL -> '\n' filtered */
-    int		tolist;	    /* first byte in buf[] still to be put in list */
-    int		chop;	    /* how many CR to chop off */
-    char_u	*prev = NULL;	/* previously read bytes, if any */
-    int		prevlen = 0;    /* length of "prev" if not NULL */
-    char_u	*s;
-    int		len;
-    long	maxline = MAXLNUM;
-    long	cnt = 0;
+    char_u	buf[(IOSIZE/256)*256];	/* rounded to avoid odd + 1 */
+    int		io_size = sizeof(buf);
+    int		readlen;		/* size of last fread() */
+    char_u	*prev	 = NULL;	/* previously read bytes, if any */
+    long	prevlen  = 0;		/* length of data in prev */
+    long	prevsize = 0;		/* size of prev buffer */
+    long	maxline  = MAXLNUM;
+    long	cnt	 = 0;
+    char_u	*p;			/* position in buf */
+    char_u	*start;			/* start of current line */
 
     if (argvars[1].v_type != VAR_UNKNOWN)
     {
@@ -14214,49 +14719,61 @@
 	return;
     }
 
-    filtd = 0;
     while (cnt < maxline || maxline < 0)
     {
-	readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd, fd);
-	buflen = filtd + readlen;
-	tolist = 0;
-	for ( ; filtd < buflen || readlen <= 0; ++filtd)
-	{
-	    if (buf[filtd] == '\n' || readlen <= 0)
-	    {
-		/* Only when in binary mode add an empty list item when the
-		 * last line ends in a '\n'. */
-		if (!binary && readlen == 0 && filtd == 0)
-		    break;
+	readlen = (int)fread(buf, 1, io_size, fd);
 
-		/* Found end-of-line or end-of-file: add a text line to the
-		 * list. */
-		chop = 0;
-		if (!binary)
-		    while (filtd - chop - 1 >= tolist
-					  && buf[filtd - chop - 1] == '\r')
-			++chop;
-		len = filtd - tolist - chop;
-		if (prev == NULL)
-		    s = vim_strnsave(buf + tolist, len);
+	/* This for loop processes what was read, but is also entered at end
+	 * of file so that either:
+	 * - an incomplete line gets written
+	 * - a "binary" file gets an empty line at the end if it ends in a
+	 *   newline.  */
+	for (p = buf, start = buf;
+		p < buf + readlen || (readlen <= 0 && (prevlen > 0 || binary));
+		++p)
+	{
+	    if (*p == '\n' || readlen <= 0)
+	    {
+		listitem_T  *li;
+		char_u	    *s	= NULL;
+		long_u	    len = p - start;
+
+		/* Finished a line.  Remove CRs before NL. */
+		if (readlen > 0 && !binary)
+		{
+		    while (len > 0 && start[len - 1] == '\r')
+			--len;
+		    /* removal may cross back to the "prev" string */
+		    if (len == 0)
+			while (prevlen > 0 && prev[prevlen - 1] == '\r')
+			    --prevlen;
+		}
+		if (prevlen == 0)
+		    s = vim_strnsave(start, (int)len);
 		else
 		{
-		    s = alloc((unsigned)(prevlen + len + 1));
-		    if (s != NULL)
+		    /* Change "prev" buffer to be the right size.  This way
+		     * the bytes are only copied once, and very long lines are
+		     * allocated only once.  */
+		    if ((s = vim_realloc(prev, prevlen + len + 1)) != NULL)
 		    {
-			mch_memmove(s, prev, prevlen);
-			vim_free(prev);
-			prev = NULL;
-			mch_memmove(s + prevlen, buf + tolist, len);
+			mch_memmove(s + prevlen, start, len);
 			s[prevlen + len] = NUL;
+			prev = NULL; /* the list will own the string */
+			prevlen = prevsize = 0;
 		    }
 		}
-		tolist = filtd + 1;
+		if (s == NULL)
+		{
+		    do_outofmem_msg((long_u) prevlen + len + 1);
+		    failed = TRUE;
+		    break;
+		}
 
-		li = listitem_alloc();
-		if (li == NULL)
+		if ((li = listitem_alloc()) == NULL)
 		{
 		    vim_free(s);
+		    failed = TRUE;
 		    break;
 		}
 		li->li_tv.v_type = VAR_STRING;
@@ -14264,71 +14781,111 @@
 		li->li_tv.vval.v_string = s;
 		list_append(rettv->vval.v_list, li);
 
-		if (++cnt >= maxline && maxline >= 0)
-		    break;
-		if (readlen <= 0)
+		start = p + 1; /* step over newline */
+		if ((++cnt >= maxline && maxline >= 0) || readlen <= 0)
 		    break;
 	    }
-	    else if (buf[filtd] == NUL)
-		buf[filtd] = '\n';
+	    else if (*p == NUL)
+		*p = '\n';
 #ifdef FEAT_MBYTE
-	    else if (buf[filtd] == 0xef
-		    && enc_utf8
-		    && filtd + 2 < buflen
-		    && !binary
-		    && buf[filtd + 1] == 0xbb
-		    && buf[filtd + 2] == 0xbf)
-	    {
-		/* remove utf-8 byte order mark */
-		mch_memmove(buf + filtd, buf + filtd + 3, buflen - filtd - 3);
-		--filtd;
-		buflen -= 3;
+	    /* Check for utf8 "bom"; U+FEFF is encoded as EF BB BF.  Do this
+	     * when finding the BF and check the previous two bytes. */
+	    else if (*p == 0xbf && enc_utf8 && !binary)
+	    {
+		/* Find the two bytes before the 0xbf.	If p is at buf, or buf
+		 * + 1, these may be in the "prev" string. */
+		char_u back1 = p >= buf + 1 ? p[-1]
+				     : prevlen >= 1 ? prev[prevlen - 1] : NUL;
+		char_u back2 = p >= buf + 2 ? p[-2]
+			  : p == buf + 1 && prevlen >= 1 ? prev[prevlen - 1]
+			  : prevlen >= 2 ? prev[prevlen - 2] : NUL;
+
+		if (back2 == 0xef && back1 == 0xbb)
+		{
+		    char_u *dest = p - 2;
+
+		    /* Usually a BOM is at the beginning of a file, and so at
+		     * the beginning of a line; then we can just step over it.
+		     */
+		    if (start == dest)
+			start = p + 1;
+		    else
+		    {
+			/* have to shuffle buf to close gap */
+			int adjust_prevlen = 0;
+
+			if (dest < buf)
+			{
+			    adjust_prevlen = (int)(buf - dest); /* must be 1 or 2 */
+			    dest = buf;
+			}
+			if (readlen > p - buf + 1)
+			    mch_memmove(dest, p + 1, readlen - (p - buf) - 1);
+			readlen -= 3 - adjust_prevlen;
+			prevlen -= adjust_prevlen;
+			p = dest - 1;
+		    }
+		}
 	    }
 #endif
-	}
-	if (readlen <= 0)
-	    break;
+	} /* for */
 
-	if (tolist == 0)
+	if (failed || (cnt >= maxline && maxline >= 0) || readlen <= 0)
+	    break;
+	if (start < p)
 	{
-	    /* "buf" is full, need to move text to an allocated buffer */
-	    if (prev == NULL)
+	    /* There's part of a line in buf, store it in "prev". */
+	    if (p - start + prevlen >= prevsize)
 	    {
-		prev = vim_strnsave(buf, buflen);
-		prevlen = buflen;
-	    }
-	    else
-	    {
-		s = alloc((unsigned)(prevlen + buflen));
-		if (s != NULL)
+		/* need bigger "prev" buffer */
+		char_u *newprev;
+
+		/* A common use case is ordinary text files and "prev" gets a
+		 * fragment of a line, so the first allocation is made
+		 * small, to avoid repeatedly 'allocing' large and
+		 * 'reallocing' small. */
+		if (prevsize == 0)
+		    prevsize = (long)(p - start);
+		else
+		{
+		    long grow50pc = (prevsize * 3) / 2;
+		    long growmin  = (long)((p - start) * 2 + prevlen);
+		    prevsize = grow50pc > growmin ? grow50pc : growmin;
+		}
+		newprev = prev == NULL ? alloc(prevsize)
+						: vim_realloc(prev, prevsize);
+		if (newprev == NULL)
 		{
-		    mch_memmove(s, prev, prevlen);
-		    mch_memmove(s + prevlen, buf, buflen);
-		    vim_free(prev);
-		    prev = s;
-		    prevlen += buflen;
+		    do_outofmem_msg((long_u)prevsize);
+		    failed = TRUE;
+		    break;
 		}
+		prev = newprev;
 	    }
-	    filtd = 0;
+	    /* Add the line part to end of "prev". */
+	    mch_memmove(prev + prevlen, start, p - start);
+	    prevlen += (long)(p - start);
 	}
-	else
-	{
-	    mch_memmove(buf, buf + tolist, buflen - tolist);
-	    filtd -= tolist;
-	}
-    }
+    } /* while */
 
     /*
      * For a negative line count use only the lines at the end of the file,
      * free the rest.
      */
-    if (maxline < 0)
+    if (!failed && maxline < 0)
 	while (cnt > -maxline)
 	{
 	    listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
 	    --cnt;
 	}
 
+    if (failed)
+    {
+	list_free(rettv->vval.v_list, TRUE);
+	/* readfile doc says an empty list is returned on error */
+	rettv->vval.v_list = list_alloc();
+    }
+
     vim_free(prev);
     fclose(fd);
 }
@@ -14369,8 +14926,8 @@
  */
     static void
 f_reltime(argvars, rettv)
-    typval_T	*argvars;
-    typval_T	*rettv;
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv UNUSED;
 {
 #ifdef FEAT_RELTIME
     proftime_T	res;
@@ -14418,7 +14975,7 @@
  */
     static void
 f_reltimestr(argvars, rettv)
-    typval_T	*argvars;
+    typval_T	*argvars UNUSED;
     typval_T	*rettv;
 {
 #ifdef FEAT_RELTIME
@@ -14691,13 +15248,14 @@
     char_u	*key;
     dict_T	*d;
     dictitem_T	*di;
+    char	*arg_errmsg = N_("remove() argument");
 
     if (argvars[0].v_type == VAR_DICT)
     {
 	if (argvars[2].v_type != VAR_UNKNOWN)
 	    EMSG2(_(e_toomanyarg), "remove()");
 	else if ((d = argvars[0].vval.v_dict) != NULL
-		&& !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
+		&& !tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
 	{
 	    key = get_tv_string_chk(&argvars[1]);
 	    if (key != NULL)
@@ -14717,7 +15275,7 @@
     else if (argvars[0].v_type != VAR_LIST)
 	EMSG2(_(e_listdictarg), "remove()");
     else if ((l = argvars[0].vval.v_list) != NULL
-	    && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
+	    && !tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
     {
 	int	    error = FALSE;
 
@@ -14847,6 +15405,9 @@
     typval_T	*rettv;
 {
     char_u	*p;
+#ifdef HAVE_READLINK
+    char_u	*buf = NULL;
+#endif
 
     p = get_tv_string(&argvars[0]);
 #ifdef FEAT_SHORTCUT
@@ -14862,7 +15423,6 @@
 #else
 # ifdef HAVE_READLINK
     {
-	char_u	buf[MAXPATHL + 1];
 	char_u	*cpy;
 	int	len;
 	char_u	*remain = NULL;
@@ -14879,7 +15439,10 @@
 
 	len = STRLEN(p);
 	if (len > 0 && after_pathsep(p, p + len))
+	{
 	    has_trailing_pathsep = TRUE;
+	    p[len - 1] = NUL; /* the trailing slash breaks readlink() */
+	}
 
 	q = getnextcomp(p);
 	if (*q != NUL)
@@ -14890,6 +15453,10 @@
 	    q[-1] = NUL;
 	}
 
+	buf = alloc(MAXPATHL + 1);
+	if (buf == NULL)
+	    goto fail;
+
 	for (;;)
 	{
 	    for (;;)
@@ -15033,6 +15600,7 @@
 
 #ifdef HAVE_READLINK
 fail:
+    vim_free(buf);
 #endif
     rettv->v_type = VAR_STRING;
 }
@@ -15051,7 +15619,7 @@
     if (argvars[0].v_type != VAR_LIST)
 	EMSG2(_(e_listarg), "reverse()");
     else if ((l = argvars[0].vval.v_list) != NULL
-	    && !tv_check_lock(l->lv_lock, (char_u *)"reverse()"))
+	    && !tv_check_lock(l->lv_lock, (char_u *)_("reverse() argument")))
     {
 	li = l->lv_last;
 	l->lv_first = l->lv_last = NULL;
@@ -15225,36 +15793,123 @@
 	check_cursor();
     }
 
-    /* If 'n' flag is used: restore cursor position. */
-    if (flags & SP_NOMOVE)
-	curwin->w_cursor = save_cursor;
+    /* If 'n' flag is used: restore cursor position. */
+    if (flags & SP_NOMOVE)
+	curwin->w_cursor = save_cursor;
+    else
+	curwin->w_set_curswant = TRUE;
+theend:
+    p_ws = save_p_ws;
+
+    return retval;
+}
+
+#ifdef FEAT_FLOAT
+
+/*
+ * round() is not in C90, use ceil() or floor() instead.
+ */
+    float_T
+vim_round(f)
+    float_T f;
+{
+    return f > 0 ? floor(f + 0.5) : ceil(f - 0.5);
+}
+
+/*
+ * "round({float})" function
+ */
+    static void
+f_round(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    float_T	f;
+
+    rettv->v_type = VAR_FLOAT;
+    if (get_float_arg(argvars, &f) == OK)
+	rettv->vval.v_float = vim_round(f);
+    else
+	rettv->vval.v_float = 0.0;
+}
+#endif
+
+/*
+ * "screenattr()" function
+ */
+    static void
+f_screenattr(argvars, rettv)
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv;
+{
+    int		row;
+    int		col;
+    int		c;
+
+    row = get_tv_number_chk(&argvars[0], NULL) - 1;
+    col = get_tv_number_chk(&argvars[1], NULL) - 1;
+    if (row < 0 || row >= screen_Rows
+	    || col < 0 || col >= screen_Columns)
+	c = -1;
     else
-	curwin->w_set_curswant = TRUE;
-theend:
-    p_ws = save_p_ws;
-
-    return retval;
+	c = ScreenAttrs[LineOffset[row] + col];
+    rettv->vval.v_number = c;
 }
 
-#ifdef FEAT_FLOAT
 /*
- * "round({float})" function
+ * "screenchar()" function
  */
     static void
-f_round(argvars, rettv)
-    typval_T	*argvars;
+f_screenchar(argvars, rettv)
+    typval_T	*argvars UNUSED;
     typval_T	*rettv;
 {
-    float_T	f;
+    int		row;
+    int		col;
+    int		off;
+    int		c;
 
-    rettv->v_type = VAR_FLOAT;
-    if (get_float_arg(argvars, &f) == OK)
-	/* round() is not in C90, use ceil() or floor() instead. */
-	rettv->vval.v_float = f > 0 ? floor(f + 0.5) : ceil(f - 0.5);
+    row = get_tv_number_chk(&argvars[0], NULL) - 1;
+    col = get_tv_number_chk(&argvars[1], NULL) - 1;
+    if (row < 0 || row >= screen_Rows
+	    || col < 0 || col >= screen_Columns)
+	c = -1;
     else
-	rettv->vval.v_float = 0.0;
-}
+    {
+	off = LineOffset[row] + col;
+#ifdef FEAT_MBYTE
+	if (enc_utf8 && ScreenLinesUC[off] != 0)
+	    c = ScreenLinesUC[off];
+	else
 #endif
+	    c = ScreenLines[off];
+    }
+    rettv->vval.v_number = c;
+}
+
+/*
+ * "screencol()" function
+ *
+ * First column is 1 to be consistent with virtcol().
+ */
+    static void
+f_screencol(argvars, rettv)
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv;
+{
+    rettv->vval.v_number = screen_screencol() + 1;
+}
+
+/*
+ * "screenrow()" function
+ */
+    static void
+f_screenrow(argvars, rettv)
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv;
+{
+    rettv->vval.v_number = screen_screenrow() + 1;
+}
 
 /*
  * "search()" function
@@ -15428,7 +16083,7 @@
     int		flags;	    /* SP_SETPCMARK and other SP_ values */
     pos_T	*match_pos;
     linenr_T	lnum_stop;  /* stop at this line if not zero */
-    long	time_limit; /* stop after this many msec */
+    long	time_limit UNUSED; /* stop after this many msec */
 {
     char_u	*save_cpo;
     char_u	*pat, *pat2 = NULL, *pat3 = NULL;
@@ -15671,7 +16326,7 @@
 	return;
     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
     varname = get_tv_string_chk(&argvars[1]);
-    buf = get_buf_tv(&argvars[0]);
+    buf = get_buf_tv(&argvars[0], FALSE);
     varp = &argvars[2];
 
     if (buf != NULL && varname != NULL && varp != NULL)
@@ -15761,6 +16416,15 @@
 	rettv->vval.v_number = 1;	/* FAIL */
 	if (line == NULL || lnum < 1 || lnum > curbuf->b_ml.ml_line_count + 1)
 	    break;
+
+	/* When coming here from Insert mode, sync undo, so that this can be
+	 * undone separately from what was previously inserted. */
+	if (u_sync_once == 2)
+	{
+	    u_sync_once = 1; /* notify that u_sync() was called */
+	    u_sync(TRUE);
+	}
+
 	if (lnum <= curbuf->b_ml.ml_line_count)
 	{
 	    /* existing line, replace it */
@@ -15824,7 +16488,8 @@
 		action = *act;
 	}
 
-	if (l != NULL && set_errorlist(wp, l, action, NULL) == OK)
+	if (l != NULL && set_errorlist(wp, l, action,
+	       (char_u *)(wp == NULL ? "setqflist()" : "setloclist()")) == OK)
 	    rettv->vval.v_number = 0;
     }
 #endif
@@ -15852,8 +16517,8 @@
  */
     static void
 f_setmatches(argvars, rettv)
-    typval_T	*argvars;
-    typval_T	*rettv;
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv UNUSED;
 {
 #ifdef FEAT_SEARCH_EXTRA
     list_T	*l;
@@ -16039,24 +16704,34 @@
     typval_T	*argvars;
     typval_T	*rettv;
 {
+#ifdef FEAT_WINDOWS
     tabpage_T	*save_curtab;
+    tabpage_T	*tp;
+#endif
     char_u	*varname, *tabvarname;
     typval_T	*varp;
-    tabpage_T	*tp;
 
     rettv->vval.v_number = 0;
 
     if (check_restricted() || check_secure())
 	return;
 
+#ifdef FEAT_WINDOWS
     tp = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+#endif
     varname = get_tv_string_chk(&argvars[1]);
     varp = &argvars[2];
 
-    if (tp != NULL && varname != NULL && varp != NULL)
+    if (varname != NULL && varp != NULL
+#ifdef FEAT_WINDOWS
+	    && tp != NULL
+#endif
+	    )
     {
+#ifdef FEAT_WINDOWS
 	save_curtab = curtab;
-	goto_tabpage_tp(tp);
+	goto_tabpage_tp(tp, FALSE, FALSE);
+#endif
 
 	tabvarname = alloc((unsigned)STRLEN(varname) + 3);
 	if (tabvarname != NULL)
@@ -16067,9 +16742,11 @@
 	    vim_free(tabvarname);
 	}
 
+#ifdef FEAT_WINDOWS
 	/* Restore current tabpage */
 	if (valid_tabpage(save_curtab))
-	    goto_tabpage_tp(save_curtab);
+	    goto_tabpage_tp(save_curtab, FALSE, FALSE);
+#endif
     }
 }
 
@@ -16098,6 +16775,7 @@
 /*
  * "setwinvar()" and "settabwinvar()" functions
  */
+
     static void
 setwinvar(argvars, rettv, off)
     typval_T	*argvars;
@@ -16112,7 +16790,7 @@
     char_u	*varname, *winvarname;
     typval_T	*varp;
     char_u	nbuf[NUMBUFLEN];
-    tabpage_T	*tp;
+    tabpage_T	*tp = NULL;
 
     if (check_restricted() || check_secure())
 	return;
@@ -16130,14 +16808,8 @@
     if (win != NULL && varname != NULL && varp != NULL)
     {
 #ifdef FEAT_WINDOWS
-	/* set curwin to be our win, temporarily */
-	save_curwin = curwin;
-	save_curtab = curtab;
-	goto_tabpage_tp(tp);
-	if (!win_valid(win))
+	if (switch_win(&save_curwin, &save_curtab, win, tp, TRUE) == FAIL)
 	    return;
-	curwin = win;
-	curbuf = curwin->w_buffer;
 #endif
 
 	if (*varname == '&')
@@ -16165,19 +16837,29 @@
 	}
 
 #ifdef FEAT_WINDOWS
-	/* Restore current tabpage and window, if still valid (autocomands can
-	 * make them invalid). */
-	if (valid_tabpage(save_curtab))
-	    goto_tabpage_tp(save_curtab);
-	if (win_valid(save_curwin))
-	{
-	    curwin = save_curwin;
-	    curbuf = curwin->w_buffer;
-	}
+	restore_win(save_curwin, save_curtab, TRUE);
 #endif
     }
 }
 
+#ifdef FEAT_CRYPT
+/*
+ * "sha256({string})" function
+ */
+    static void
+f_sha256(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    char_u	*p;
+
+    p = get_tv_string(&argvars[0]);
+    rettv->vval.v_string = vim_strsave(
+				    sha256_bytes(p, (int)STRLEN(p), NULL, 0));
+    rettv->v_type = VAR_STRING;
+}
+#endif /* FEAT_CRYPT */
+
 /*
  * "shellescape({string})" function
  */
@@ -16192,6 +16874,17 @@
 }
 
 /*
+ * shiftwidth() function
+ */
+    static void
+f_shiftwidth(argvars, rettv)
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv;
+{
+    rettv->vval.v_number = get_sw_value();
+}
+
+/*
  * "simplify()" function
  */
     static void
@@ -16256,6 +16949,7 @@
 
 static int	item_compare_ic;
 static char_u	*item_compare_func;
+static dict_T	*item_compare_selfdict;
 static int	item_compare_func_err;
 #define ITEM_COMPARE_FAIL 999
 
@@ -16315,7 +17009,8 @@
 
     rettv.v_type = VAR_UNKNOWN;		/* clear_tv() uses this */
     res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
-				 &rettv, 2, argv, 0L, 0L, &dummy, TRUE, NULL);
+				 &rettv, 2, argv, 0L, 0L, &dummy, TRUE,
+				 item_compare_selfdict);
     clear_tv(&argv[0]);
     clear_tv(&argv[1]);
 
@@ -16348,7 +17043,8 @@
     else
     {
 	l = argvars[0].vval.v_list;
-	if (l == NULL || tv_check_lock(l->lv_lock, (char_u *)"sort()"))
+	if (l == NULL || tv_check_lock(l->lv_lock,
+					     (char_u *)_("sort() argument")))
 	    return;
 	rettv->vval.v_list = l;
 	rettv->v_type = VAR_LIST;
@@ -16360,8 +17056,10 @@
 
 	item_compare_ic = FALSE;
 	item_compare_func = NULL;
+	item_compare_selfdict = NULL;
 	if (argvars[1].v_type != VAR_UNKNOWN)
 	{
+	    /* optional second argument: {func} */
 	    if (argvars[1].v_type == VAR_FUNC)
 		item_compare_func = argvars[1].vval.v_string;
 	    else
@@ -16376,6 +17074,17 @@
 		else
 		    item_compare_func = get_tv_string(&argvars[1]);
 	    }
+
+	    if (argvars[2].v_type != VAR_UNKNOWN)
+	    {
+		/* optional third argument: {dict} */
+		if (argvars[2].v_type != VAR_DICT)
+		{
+		    EMSG(_(e_dictreq));
+		    return;
+		}
+		item_compare_selfdict = argvars[2].vval.v_dict;
+	    }
 	}
 
 	/* Make an array with each entry pointing to an item in the List. */
@@ -16622,7 +17331,7 @@
 	    str = regmatch.endp[0];
 	}
 
-	vim_free(regmatch.regprog);
+	vim_regfree(regmatch.regprog);
     }
 
     p_cpo = save_cpo;
@@ -17512,18 +18221,22 @@
     typval_T	*argvars UNUSED;
     typval_T	*rettv;
 {
-    char_u	fname[MAXPATHL + 1];
+    char_u	*fname;
     tagname_T	tn;
     int		first;
 
     if (rettv_list_alloc(rettv) == FAIL)
 	return;
+    fname = alloc(MAXPATHL);
+    if (fname == NULL)
+	return;
 
     for (first = TRUE; ; first = FALSE)
 	if (get_tagfname(&tn, first, fname) == FAIL
 		|| list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
 	    break;
     tagname_free(&tn);
+    vim_free(fname);
 }
 
 /*
@@ -17711,7 +18424,7 @@
     typval_T	*argvars;
     typval_T	*rettv;
 {
-    char_u	*instr;
+    char_u	*in_str;
     char_u	*fromstr;
     char_u	*tostr;
     char_u	*p;
@@ -17728,7 +18441,7 @@
     char_u	buf2[NUMBUFLEN];
     garray_T	ga;
 
-    instr = get_tv_string(&argvars[0]);
+    in_str = get_tv_string(&argvars[0]);
     fromstr = get_tv_string_buf_chk(&argvars[1], buf);
     tostr = get_tv_string_buf_chk(&argvars[2], buf2);
 
@@ -17754,19 +18467,19 @@
 	}
 
     /* fromstr and tostr have to contain the same number of chars */
-    while (*instr != NUL)
+    while (*in_str != NUL)
     {
 #ifdef FEAT_MBYTE
 	if (has_mbyte)
 	{
-	    inlen = (*mb_ptr2len)(instr);
-	    cpstr = instr;
+	    inlen = (*mb_ptr2len)(in_str);
+	    cpstr = in_str;
 	    cplen = inlen;
 	    idx = 0;
 	    for (p = fromstr; *p != NUL; p += fromlen)
 	    {
 		fromlen = (*mb_ptr2len)(p);
-		if (fromlen == inlen && STRNCMP(instr, p, inlen) == 0)
+		if (fromlen == inlen && STRNCMP(in_str, p, inlen) == 0)
 		{
 		    for (p = tostr; *p != NUL; p += tolen)
 		    {
@@ -17785,11 +18498,11 @@
 		++idx;
 	    }
 
-	    if (first && cpstr == instr)
+	    if (first && cpstr == in_str)
 	    {
 		/* Check that fromstr and tostr have the same number of
 		 * (multi-byte) characters.  Done only once when a character
-		 * of instr doesn't appear in fromstr. */
+		 * of in_str doesn't appear in fromstr. */
 		first = FALSE;
 		for (p = tostr; *p != NUL; p += tolen)
 		{
@@ -17804,18 +18517,18 @@
 	    mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
 	    ga.ga_len += cplen;
 
-	    instr += inlen;
+	    in_str += inlen;
 	}
 	else
 #endif
 	{
 	    /* When not using multi-byte chars we can do it faster. */
-	    p = vim_strchr(fromstr, *instr);
+	    p = vim_strchr(fromstr, *in_str);
 	    if (p != NULL)
 		ga_append(&ga, tostr[p - fromstr]);
 	    else
-		ga_append(&ga, *instr);
-	    ++instr;
+		ga_append(&ga, *in_str);
+	    ++in_str;
 	}
     }
 
@@ -17876,17 +18589,27 @@
  */
     static void
 f_undofile(argvars, rettv)
-    typval_T	*argvars;
+    typval_T	*argvars UNUSED;
     typval_T	*rettv;
 {
     rettv->v_type = VAR_STRING;
 #ifdef FEAT_PERSISTENT_UNDO
     {
-	char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
+	char_u *fname = get_tv_string(&argvars[0]);
 
-	if (ffname != NULL)
-	    rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
-	vim_free(ffname);
+	if (*fname == NUL)
+	{
+	    /* If there is no file name there will be no undo file. */
+	    rettv->vval.v_string = NULL;
+	}
+	else
+	{
+	    char_u *ffname = FullName_save(fname, FALSE);
+
+	    if (ffname != NULL)
+		rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
+	    vim_free(ffname);
+	}
     }
 #else
     rettv->vval.v_string = NULL;
@@ -17980,6 +18703,20 @@
 }
 
 /*
+ * "wildmenumode()" function
+ */
+    static void
+f_wildmenumode(argvars, rettv)
+    typval_T	*argvars UNUSED;
+    typval_T	*rettv UNUSED;
+{
+#ifdef FEAT_WILDMENU
+    if (wild_menu_showing)
+	rettv->vval.v_number = 1;
+#endif
+}
+
+/*
  * "winbufnr(nr)" function
  */
     static void
@@ -18118,9 +18855,11 @@
 	curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
 
 	check_cursor();
-	changed_cline_bef_curs();
-	invalidate_botline();
-	redraw_later(VALID);
+	win_new_height(curwin, curwin->w_height);
+# ifdef FEAT_VERTSPLIT
+	win_new_width(curwin, W_WIDTH(curwin));
+# endif
+	changed_window_setting();
 
 	if (curwin->w_topline == 0)
 	    curwin->w_topline = 1;
@@ -18258,6 +18997,19 @@
 }
 
 /*
+ * "xor(expr, expr)" function
+ */
+    static void
+f_xor(argvars, rettv)
+    typval_T	*argvars;
+    typval_T	*rettv;
+{
+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
+					^ get_tv_number_chk(&argvars[1], NULL);
+}
+
+
+/*
  * Translate a String variable into a position.
  * Returns NULL when there is an error.
  */
@@ -18331,7 +19083,7 @@
 #endif
     if (name[0] == '\'')			/* mark */
     {
-	pp = getmark_fnum(name[1], FALSE, fnum);
+	pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum);
 	if (pp == NULL || pp == (pos_T *)-1 || pp->lnum <= 0)
 	    return NULL;
 	return pp;
@@ -18768,11 +19520,7 @@
 set_vim_var_char(c)
     int c;
 {
-#ifdef FEAT_MBYTE
-    char_u	buf[MB_MAXBYTES];
-#else
-    char_u	buf[2];
-#endif
+    char_u	buf[MB_MAXBYTES + 1];
 
 #ifdef FEAT_MBYTE
     if (has_mbyte)
@@ -19376,7 +20124,7 @@
 	    break;
 #ifdef FEAT_FLOAT
 	case VAR_FLOAT:
-	    EMSG(_("E806: using Float as a String"));
+	    EMSG(_(e_float_as_string));
 	    break;
 #endif
 	case VAR_STRING:
@@ -19410,16 +20158,17 @@
 	*htp = ht;
     if (ht == NULL)
 	return NULL;
-    return find_var_in_ht(ht, varname, htp != NULL);
+    return find_var_in_ht(ht, *name, varname, htp != NULL);
 }
 
 /*
- * Find variable "varname" in hashtab "ht".
+ * Find variable "varname" in hashtab "ht" with name "htname".
  * Returns NULL if not found.
  */
     static dictitem_T *
-find_var_in_ht(ht, varname, writing)
+find_var_in_ht(ht, htname, varname, writing)
     hashtab_T	*ht;
+    int		htname;
     char_u	*varname;
     int		writing;
 {
@@ -19428,7 +20177,7 @@
     if (*varname == NUL)
     {
 	/* Must be something like "s:", otherwise "ht" would be NULL. */
-	switch (varname[-2])
+	switch (htname)
 	{
 	    case 's': return &SCRIPT_SV(current_SID)->sv_var;
 	    case 'g': return &globvars_var;
@@ -19453,9 +20202,14 @@
 	 * worked find the variable again.  Don't auto-load a script if it was
 	 * loaded already, otherwise it would be loaded every time when
 	 * checking if a function name is a Funcref variable. */
-	if (ht == &globvarht && !writing
-			    && script_autoload(varname, FALSE) && !aborting())
+	if (ht == &globvarht && !writing)
+	{
+	    /* Note: script_autoload() may make "hi" invalid. It must either
+	     * be obtained again or not used. */
+	    if (!script_autoload(varname, FALSE) || aborting())
+		return NULL;
 	    hi = hash_find(ht, varname);
+	}
 	if (HASHITEM_EMPTY(hi))
 	    return NULL;
     }
@@ -19498,12 +20252,12 @@
 			       || vim_strchr(name + 2, AUTOLOAD_CHAR) != NULL)
 	return NULL;
     if (*name == 'b')				/* buffer variable */
-	return &curbuf->b_vars.dv_hashtab;
+	return &curbuf->b_vars->dv_hashtab;
     if (*name == 'w')				/* window variable */
-	return &curwin->w_vars.dv_hashtab;
+	return &curwin->w_vars->dv_hashtab;
 #ifdef FEAT_WINDOWS
     if (*name == 't')				/* tab page variable */
-	return &curtab->tp_vars.dv_hashtab;
+	return &curtab->tp_vars->dv_hashtab;
 #endif
     if (*name == 'v')				/* v: variable */
 	return &vimvarht;
@@ -19564,7 +20318,7 @@
 	{
 	    sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
 		(scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
-	    init_var_dict(&sv->sv_dict, &sv->sv_var);
+	    init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
 	    ++ga_scripts.ga_len;
 	}
     }
@@ -19575,11 +20329,14 @@
  * point to it.
  */
     void
-init_var_dict(dict, dict_var)
+init_var_dict(dict, dict_var, scope)
     dict_T	*dict;
     dictitem_T	*dict_var;
+    int		scope;
 {
     hash_init(&dict->dv_hashtab);
+    dict->dv_lock = 0;
+    dict->dv_scope = scope;
     dict->dv_refcount = DO_NOT_FREE_CNT;
     dict->dv_copyID = 0;
     dict_var->di_tv.vval.v_dict = dict;
@@ -19590,6 +20347,19 @@
 }
 
 /*
+ * Unreference a dictionary initialized by init_var_dict().
+ */
+    void
+unref_var_dict(dict)
+    dict_T	*dict;
+{
+    /* Now the dict needs to be freed if no one else is using it, go back to
+     * normal reference counting. */
+    dict->dv_refcount -= DO_NOT_FREE_CNT - 1;
+    dict_unref(dict);
+}
+
+/*
  * Clean up a list of internal variables.
  * Frees all allocated variables and the value they contain.
  * Clears hashtab "ht", does not free it.
@@ -19730,7 +20500,6 @@
     dictitem_T	*v;
     char_u	*varname;
     hashtab_T	*ht;
-    char_u	*p;
 
     ht = find_var_ht(name, &varname);
     if (ht == NULL || *varname == NUL)
@@ -19738,27 +20507,10 @@
 	EMSG2(_(e_illvar), name);
 	return;
     }
-    v = find_var_in_ht(ht, varname, TRUE);
+    v = find_var_in_ht(ht, 0, varname, TRUE);
 
-    if (tv->v_type == VAR_FUNC)
-    {
-	if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
-		&& !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
-							 ? name[2] : name[0]))
-	{
-	    EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name);
-	    return;
-	}
-	/* Don't allow hiding a function.  When "v" is not NULL we migth be
-	 * assigning another function to the same var, the type is checked
-	 * below. */
-	if (v == NULL && function_exists(name))
-	{
-	    EMSG2(_("E705: Variable name conflicts with existing function: %s"),
-									name);
-	    return;
-	}
-    }
+    if (tv->v_type == VAR_FUNC && var_check_func_name(name, v == NULL))
+	return;
 
     if (v != NULL)
     {
@@ -19824,13 +20576,8 @@
 	}
 
 	/* Make sure the variable name is valid. */
-	for (p = varname; *p != NUL; ++p)
-	    if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
-						       && *p != AUTOLOAD_CHAR)
-	    {
-		EMSG2(_(e_illvar), varname);
-		return;
-	    }
+	if (!valid_varname(varname))
+	    return;
 
 	v = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T)
 							  + STRLEN(varname)));
@@ -19895,6 +20642,55 @@
 }
 
 /*
+ * Check if a funcref is assigned to a valid variable name.
+ * Return TRUE and give an error if not.
+ */
+    static int
+var_check_func_name(name, new_var)
+    char_u *name;    /* points to start of variable name */
+    int    new_var;  /* TRUE when creating the variable */
+{
+    if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
+	    && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
+						     ? name[2] : name[0]))
+    {
+	EMSG2(_("E704: Funcref variable name must start with a capital: %s"),
+									name);
+	return TRUE;
+    }
+    /* Don't allow hiding a function.  When "v" is not NULL we might be
+     * assigning another function to the same var, the type is checked
+     * below. */
+    if (new_var && function_exists(name))
+    {
+	EMSG2(_("E705: Variable name conflicts with existing function: %s"),
+								    name);
+	return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Check if a variable name is valid.
+ * Return FALSE and give an error if not.
+ */
+    static int
+valid_varname(varname)
+    char_u *varname;
+{
+    char_u *p;
+
+    for (p = varname; *p != NUL; ++p)
+	if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
+						   && *p != AUTOLOAD_CHAR)
+	{
+	    EMSG2(_(e_illvar), varname);
+	    return FALSE;
+	}
+    return TRUE;
+}
+
+/*
  * Return TRUE if typeval "tv" is set to be locked (immutable).
  * Also give an error message, using "name".
  */
@@ -20099,7 +20895,13 @@
 		/* Call msg_start() after eval1(), evaluating the expression
 		 * may cause a message to appear. */
 		if (eap->cmdidx == CMD_echo)
+		{
+		    /* Mark the saved text as finishing the line, so that what
+		     * follows is displayed on a new line when scrolling back
+		     * at the more prompt. */
+		    msg_sb_eol();
 		    msg_start();
+		}
 	    }
 	    else if (eap->cmdidx == CMD_echo)
 		msg_puts_attr((char_u *)" ", echo_attr);
@@ -20302,9 +21104,11 @@
     exarg_T	*eap;
 {
     char_u	*theline;
+    int		i;
     int		j;
     int		c;
     int		saved_did_emsg;
+    int		saved_wait_return = need_wait_return;
     char_u	*name = NULL;
     char_u	*p;
     char_u	*arg;
@@ -20380,7 +21184,7 @@
 			    list_func_head(fp, FALSE);
 		    }
 		}
-		vim_free(regmatch.regprog);
+		vim_regfree(regmatch.regprog);
 	    }
 	}
 	if (*p == '/')
@@ -20515,6 +21319,9 @@
 	    if (arg[j] != NUL)
 		emsg_funcname((char *)e_invarg2, arg);
 	}
+	/* Disallow using the g: dict. */
+	if (fudi.fd_dict != NULL && fudi.fd_dict->dv_scope == VAR_DEF_SCOPE)
+	    EMSG(_("E862: Cannot use g: here"));
     }
 
     /*
@@ -20548,6 +21355,15 @@
 	    arg = vim_strsave(arg);
 	    if (arg == NULL)
 		goto erret;
+
+	    /* Check for duplicate argument name. */
+	    for (i = 0; i < newargs.ga_len; ++i)
+		if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
+		{
+		    EMSG2(_("E853: Duplicate argument name: %s"), arg);
+		    goto erret;
+		}
+
 	    ((char_u **)(newargs.ga_data))[newargs.ga_len] = arg;
 	    *p = c;
 	    newargs.ga_len++;
@@ -20623,7 +21439,11 @@
     nesting = 0;
     for (;;)
     {
-	msg_scroll = TRUE;
+	if (KeyTyped)
+	{
+	    msg_scroll = TRUE;
+	    saved_wait_return = FALSE;
+	}
 	need_wait_return = FALSE;
 	sourcing_lnum_off = sourcing_lnum;
 
@@ -20726,6 +21546,8 @@
 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
 			|| (p[0] == 't' && p[1] == 'c'
 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'l'))
+			|| (p[0] == 'l' && p[1] == 'u' && p[2] == 'a'
+				    && !ASCII_ISALPHA(p[3]))
 			|| (p[0] == 'r' && p[1] == 'u' && p[2] == 'b'
 				    && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
 			|| (p[0] == 'm' && p[1] == 'z'
@@ -20932,6 +21754,7 @@
     vim_free(fudi.fd_newkey);
     vim_free(name);
     did_emsg |= saved_did_emsg;
+    need_wait_return |= saved_wait_return;
 }
 
 /*
@@ -21190,6 +22013,12 @@
 	MSG_PUTS("...");
     }
     msg_putchar(')');
+    if (fp->uf_flags & FC_ABORT)
+	MSG_PUTS(" abort");
+    if (fp->uf_flags & FC_RANGE)
+	MSG_PUTS(" range");
+    if (fp->uf_flags & FC_DICT)
+	MSG_PUTS(" dict");
     msg_clr_eos();
     if (p_verbose > 0)
 	last_set_msg(fp->uf_script_ID);
@@ -21229,6 +22058,15 @@
 }
 #endif
 
+    int
+translated_function_exists(name)
+    char_u	*name;
+{
+    if (builtin_function(name))
+	return find_internal_func(name) >= 0;
+    return find_func(name) != NULL;
+}
+
 /*
  * Return TRUE if a function "name" exists.
  */
@@ -21246,16 +22084,29 @@
     /* Only accept "funcname", "funcname ", "funcname (..." and
      * "funcname(...", not "funcname!...". */
     if (p != NULL && (*nm == NUL || *nm == '('))
-    {
-	if (builtin_function(p))
-	    n = (find_internal_func(p) >= 0);
-	else
-	    n = (find_func(p) != NULL);
-    }
+	n = translated_function_exists(p);
     vim_free(p);
     return n;
 }
 
+    char_u *
+get_expanded_name(name, check)
+    char_u	*name;
+    int		check;
+{
+    char_u	*nm = name;
+    char_u	*p;
+
+    p = trans_function_name(&nm, FALSE, TFN_INT|TFN_QUIET, NULL);
+
+    if (p != NULL && *nm == NUL)
+	if (!check || translated_function_exists(p))
+	    return p;
+
+    vim_free(p);
+    return NULL;
+}
+
 /*
  * Return TRUE if "name" looks like a builtin function name: starts with a
  * lower case letter and doesn't contain a ':' or AUTOLOAD_CHAR.
@@ -21562,6 +22413,9 @@
 	    ++hi;
 	fp = HI2UF(hi);
 
+	if (fp->uf_flags & FC_DICT)
+	    return (char_u *)""; /* don't show dict functions */
+
 	if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
 	    return fp->uf_name;	/* prevents overflow */
 
@@ -21689,7 +22543,7 @@
  * Unreference a Function: decrement the reference count and free it when it
  * becomes zero.  Only for numbered functions.
  */
-    static void
+    void
 func_unref(name)
     char_u	*name;
 {
@@ -21713,7 +22567,7 @@
 /*
  * Count a reference to a Function.
  */
-    static void
+    void
 func_ref(name)
     char_u	*name;
 {
@@ -21792,7 +22646,7 @@
     /*
      * Init l: variables.
      */
-    init_var_dict(&fc->l_vars, &fc->l_vars_var);
+    init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
     if (selfdict != NULL)
     {
 	/* Set l:self to "selfdict".  Use "name" to avoid a warning from
@@ -21813,7 +22667,7 @@
      * Set a:0 to "argcount".
      * Set a:000 to a list with room for the "..." arguments.
      */
-    init_var_dict(&fc->l_avars, &fc->l_avars_var);
+    init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
     add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
 				(varnumber_T)(argcount - fp->uf_args.ga_len));
     /* Use "name" to avoid a warning from some compiler that checks the
@@ -21921,8 +22775,12 @@
 			s = tv2string(&argvars[i], &tofree, numbuf2, 0);
 			if (s != NULL)
 			{
-			    trunc_string(s, buf, MSG_BUF_CLEN);
-			    msg_puts(buf);
+			    if (vim_strsize(s) > MSG_BUF_CLEN)
+			    {
+				trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
+				s = buf;
+			    }
+			    msg_puts(s);
 			    vim_free(tofree);
 			}
 		    }
@@ -22010,8 +22868,12 @@
 	    s = tv2string(fc->rettv, &tofree, numbuf2, 0);
 	    if (s != NULL)
 	    {
-		trunc_string(s, buf, MSG_BUF_CLEN);
-		smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
+		if (vim_strsize(s) > MSG_BUF_CLEN)
+		{
+		    trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
+		    s = buf;
+		}
+		smsg((char_u *)_("%s returning %s"), sourcing_name, s);
 		vim_free(tofree);
 	    }
 	}
@@ -22519,18 +23381,21 @@
 	if (tab != NULL)
 	{
 	    *tab++ = '\0';	/* isolate the variable name */
-	    if (*tab == 'S')	/* string var */
-		type = VAR_STRING;
+	    switch (*tab)
+	    {
+		case 'S': type = VAR_STRING; break;
 #ifdef FEAT_FLOAT
-	    else if (*tab == 'F')
-		type = VAR_FLOAT;
+		case 'F': type = VAR_FLOAT; break;
 #endif
+		case 'D': type = VAR_DICT; break;
+		case 'L': type = VAR_LIST; break;
+	    }
 
 	    tab = vim_strchr(tab, '\t');
 	    if (tab != NULL)
 	    {
 		tv.v_type = type;
-		if (type == VAR_STRING)
+		if (type == VAR_STRING || type == VAR_DICT || type == VAR_LIST)
 		    tv.vval.v_string = viminfo_readstring(virp,
 				       (int)(tab - virp->vir_line + 1), TRUE);
 #ifdef FEAT_FLOAT
@@ -22539,9 +23404,28 @@
 #endif
 		else
 		    tv.vval.v_number = atol((char *)tab + 1);
+		if (type == VAR_DICT || type == VAR_LIST)
+		{
+		    typval_T *etv = eval_expr(tv.vval.v_string, NULL);
+
+		    if (etv == NULL)
+			/* Failed to parse back the dict or list, use it as a
+			 * string. */
+			tv.v_type = VAR_STRING;
+		    else
+		    {
+			vim_free(tv.vval.v_string);
+			tv = *etv;
+			vim_free(etv);
+		    }
+		}
+
 		set_var(virp->vir_line + 1, &tv, FALSE);
-		if (type == VAR_STRING)
+
+		if (tv.v_type == VAR_STRING)
 		    vim_free(tv.vval.v_string);
+		else if (tv.v_type == VAR_DICT || tv.v_type == VAR_LIST)
+		    clear_tv(&tv);
 	    }
 	}
     }
@@ -22583,8 +23467,10 @@
 		    case VAR_STRING: s = "STR"; break;
 		    case VAR_NUMBER: s = "NUM"; break;
 #ifdef FEAT_FLOAT
-		    case VAR_FLOAT: s = "FLO"; break;
+		    case VAR_FLOAT:  s = "FLO"; break;
 #endif
+		    case VAR_DICT:   s = "DIC"; break;
+		    case VAR_LIST:   s = "LIS"; break;
 		    default: continue;
 		}
 		fprintf(fp, "!%s\t%s\t", this_var->di_key, s);
@@ -22656,7 +23542,7 @@
 		    f = -f;
 		    sign = '-';
 		}
-		if ((fprintf(fd, "let %s = %c&%f",
+		if ((fprintf(fd, "let %s = %c%f",
 					       this_var->di_key, sign, f) < 0)
 			|| put_eol(fd) == FAIL)
 		    return FAIL;
@@ -23019,6 +23905,7 @@
     int		c;
     int		has_fullname = 0;
 #ifdef WIN3264
+    char_u	*fname_start = *fnamep;
     int		has_shortname = 0;
 #endif
 
@@ -23072,6 +23959,27 @@
 		return -1;
 	}
 
+#ifdef WIN3264
+# if _WIN32_WINNT >= 0x0500
+	if (vim_strchr(*fnamep, '~') != NULL)
+	{
+	    /* Expand 8.3 filename to full path.  Needed to make sure the same
+	     * file does not have two different names.
+	     * Note: problem does not occur if _WIN32_WINNT < 0x0500. */
+	    p = alloc(_MAX_PATH + 1);
+	    if (p != NULL)
+	    {
+		if (GetLongPathName(*fnamep, p, MAXPATHL))
+		{
+		    vim_free(*bufp);
+		    *bufp = *fnamep = p;
+		}
+		else
+		    vim_free(p);
+	    }
+	}
+# endif
+#endif
 	/* Append a path separator to a directory. */
 	if (mch_isdir(*fnamep))
 	{
@@ -23193,24 +24101,25 @@
     }
 
 #ifdef WIN3264
-    /* Check shortname after we have done 'heads' and before we do 'tails'
+    /*
+     * Handle ":8" after we have done 'heads' and before we do 'tails'.
      */
     if (has_shortname)
     {
-	pbuf = NULL;
-	/* Copy the string if it is shortened by :h */
-	if (*fnamelen < (int)STRLEN(*fnamep))
+	/* Copy the string if it is shortened by :h and when it wasn't copied
+	 * yet, because we are going to change it in place.  Avoids changing
+	 * the buffer name for "%:8". */
+	if (*fnamelen < (int)STRLEN(*fnamep) || *fnamep == fname_start)
 	{
 	    p = vim_strnsave(*fnamep, *fnamelen);
-	    if (p == 0)
+	    if (p == NULL)
 		return -1;
 	    vim_free(*bufp);
 	    *bufp = *fnamep = p;
 	}
 
 	/* Split into two implementations - makes it easier.  First is where
-	 * there isn't a full name already, second is where there is.
-	 */
+	 * there isn't a full name already, second is where there is. */
 	if (!has_fullname && !vim_isAbsName(*fnamep))
 	{
 	    if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
@@ -23218,18 +24127,16 @@
 	}
 	else
 	{
-	    int		l;
+	    int		l = *fnamelen;
 
-	    /* Simple case, already have the full-name
+	    /* Simple case, already have the full-name.
 	     * Nearly always shorter, so try first time. */
-	    l = *fnamelen;
 	    if (get_short_pathname(fnamep, bufp, &l) == FAIL)
 		return -1;
 
 	    if (l == 0)
 	    {
-		/* Couldn't find the filename.. search the paths.
-		 */
+		/* Couldn't find the filename, search the paths. */
 		l = *fnamelen;
 		if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
 		    return -1;
@@ -23435,7 +24342,7 @@
 	if (ga.ga_data != NULL)
 	    STRCPY((char *)ga.ga_data + ga.ga_len, tail);
 
-	vim_free(regmatch.regprog);
+	vim_regfree(regmatch.regprog);
     }
 
     ret = vim_strsave(ga.ga_data == NULL ? str : (char_u *)ga.ga_data);
diff -Naur vim73.orig/src/ex_cmds.c vim73/src/ex_cmds.c
--- vim73.orig/src/ex_cmds.c	2010-08-13 09:14:35.000000000 +0000
+++ vim73/src/ex_cmds.c	2013-08-04 19:09:10.213945052 +0000
@@ -11,10 +11,6 @@
  * ex_cmds.c: some functions for command line commands
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for mch_open(), must be before vim.h */
-#endif
-
 #include "vim.h"
 #include "version.h"
 
@@ -29,7 +25,6 @@
 static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
 #endif
 
-static int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
 static int check_readonly __ARGS((int *forceit, buf_T *buf));
 #ifdef FEAT_AUTOCMD
 static void delbuf_msg __ARGS((char_u *name));
@@ -323,7 +318,8 @@
     /* When sorting numbers "start_col_nr" is the number, not the column
      * number. */
     if (sort_nr)
-	result = l1.start_col_nr - l2.start_col_nr;
+	result = l1.start_col_nr == l2.start_col_nr ? 0
+				 : l1.start_col_nr > l2.start_col_nr ? 1 : -1;
     else
     {
 	/* We need to copy one line into "sortbuf1", because there is no
@@ -419,8 +415,15 @@
 	    }
 	    *s = NUL;
 	    /* Use last search pattern if sort pattern is empty. */
-	    if (s == p + 1 && last_search_pat() != NULL)
+	    if (s == p + 1)
+	    {
+		if (last_search_pat() == NULL)
+		{
+		    EMSG(_(e_noprevre));
+		    goto sortend;
+		}
 		regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
+	    }
 	    else
 		regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC);
 	    if (regmatch.regprog == NULL)
@@ -482,7 +485,7 @@
 	     * of the match, by temporarily terminating the string there */
 	    s2 = s + end_col;
 	    c = *s2;
-	    (*s2) = 0;
+	    *s2 = NUL;
 	    /* Sorting on number: Store the number itself. */
 	    p = s + start_col;
 	    if (sort_hex)
@@ -491,9 +494,13 @@
 		s = skiptodigit(p);
 	    if (s > p && s[-1] == '-')
 		--s;  /* include preceding negative sign */
-	    vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
-					&nrs[lnum - eap->line1].start_col_nr, NULL);
-	    (*s2) = c;
+	    if (*s == NUL)
+		/* empty line should sort before any number */
+		nrs[lnum - eap->line1].start_col_nr = -MAXLNUM;
+	    else
+		vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
+				  &nrs[lnum - eap->line1].start_col_nr, NULL);
+	    *s2 = c;
 	}
 	else
 	{
@@ -564,7 +571,7 @@
     vim_free(nrs);
     vim_free(sortbuf1);
     vim_free(sortbuf2);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
     if (got_int)
 	EMSG(_(e_interr));
 }
@@ -777,6 +784,7 @@
      */
     last_line = curbuf->b_ml.ml_line_count;
     mark_adjust(line1, line2, last_line - line2, 0L);
+    changed_lines(last_line - num_lines + 1, 0, last_line + 1, num_lines);
     if (dest >= line2)
     {
 	mark_adjust(line2 + 1, dest, -num_lines, 0L);
@@ -792,6 +800,7 @@
     curbuf->b_op_start.col = curbuf->b_op_end.col = 0;
     mark_adjust(last_line - num_lines + 1, last_line,
 					     -(last_line - dest - extra), 0L);
+    changed_lines(last_line - num_lines + 1, 0, last_line + 1, -extra);
 
     /*
      * Now we delete the original text -- webb
@@ -819,7 +828,13 @@
 	curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
 
     if (line1 < dest)
-	changed_lines(line1, 0, dest + num_lines + 1, 0L);
+    {
+	dest += num_lines + 1;
+	last_line = curbuf->b_ml.ml_line_count;
+	if (dest > last_line + 1)
+	    dest = last_line + 1;
+	changed_lines(line1, 0, dest, 0L);
+    }
     else
 	changed_lines(dest + 1, 0, line1 + num_lines, 0L);
 
@@ -898,9 +913,6 @@
  * Handle the ":!cmd" command.	Also for ":r !cmd" and ":w !cmd"
  * Bangs in the argument are replaced with the previously entered command.
  * Remember the argument.
- *
- * RISCOS: Bangs only replaced when followed by a space, since many
- * pathnames contain one.
  */
     void
 do_bang(addr_count, eap, forceit, do_in, do_out)
@@ -979,11 +991,7 @@
 	trailarg = NULL;
 	while (*p)
 	{
-	    if (*p == '!'
-#ifdef RISCOS
-			&& (p[1] == ' ' || p[1] == NUL)
-#endif
-					)
+	    if (*p == '!')
 	    {
 		if (p > newcmd && p[-1] == '\\')
 		    STRMOVE(p - 1, p);
@@ -1113,7 +1121,7 @@
     if (do_out)
 	shell_flags |= SHELL_DOOUT;
 
-#if !defined(USE_SYSTEM) && defined(UNIX)
+#ifdef FEAT_FILTERPIPE
     if (!do_in && do_out && !p_stmp)
     {
 	/* Use a pipe to fetch stdout of the command, do not use a temp file. */
@@ -1577,14 +1585,8 @@
 	    if (p != NULL)
 		*p = NUL;
 	}
-# ifdef RISCOS
-	STRCAT(buf, " { < ");	/* Use RISC OS notation for input. */
-	STRCAT(buf, itmp);
-	STRCAT(buf, " } ");
-# else
 	STRCAT(buf, " <");	/* " < " causes problems on Amiga */
 	STRCAT(buf, itmp);
-# endif
 	if (*p_shq == NUL)
 	{
 	    p = vim_strchr(cmd, '|');
@@ -1633,16 +1635,9 @@
     else
 	vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
 #ifdef FEAT_QUICKFIX
-# ifndef RISCOS
-		opt != p_sp ? " %s%s" :
-# endif
 		" %s %s",
 #else
-# ifndef RISCOS
 		" %s%s",	/* " > %s" causes problems on Amiga */
-# else
-		" %s %s",	/* But is needed for 'shellpipe' and RISC OS */
-# endif
 #endif
 		(char *)opt, (char *)fname);
 }
@@ -1727,11 +1722,11 @@
 }
 
 /*
- * write_viminfo() -- Write the viminfo file.  The old one is read in first so
- * that effectively a merge of current info and old info is done.  This allows
- * multiple vims to run simultaneously, without losing any marks etc.  If
- * forceit is TRUE, then the old file is not read in, and only internal info is
- * written to the file. -- webb
+ * Write the viminfo file.  The old one is read in first so that effectively a
+ * merge of current info and old info is done.  This allows multiple vims to
+ * run simultaneously, without losing any marks etc.
+ * If "forceit" is TRUE, then the old file is not read in, and only internal
+ * info is written to the file.
  */
     void
 write_viminfo(file, forceit)
@@ -1843,11 +1838,7 @@
 #ifdef VMS
 				    (char_u *)"-tmp",
 #else
-# ifdef RISCOS
-				    (char_u *)"/tmp",
-# else
 				    (char_u *)".tmp",
-# endif
 #endif
 				    FALSE);
 	    if (tempname == NULL)		/* out of memory */
@@ -2056,6 +2047,7 @@
     int		count = 0;
     int		eof = FALSE;
     vir_T	vir;
+    int		merge = FALSE;
 
     if ((vir.vir_line = alloc(LSIZE)) == NULL)
 	return;
@@ -2067,9 +2059,12 @@
     if (fp_in != NULL)
     {
 	if (flags & VIF_WANT_INFO)
+	{
 	    eof = read_viminfo_up_to_marks(&vir,
 					 flags & VIF_FORCEIT, fp_out != NULL);
-	else
+	    merge = TRUE;
+	}
+	else if (flags != 0)
 	    /* Skip info, find start of marks */
 	    while (!(eof = viminfo_readline(&vir))
 		    && vir.vir_line[0] != '>')
@@ -2088,7 +2083,7 @@
 	write_viminfo_search_pattern(fp_out);
 	write_viminfo_sub_string(fp_out);
 #ifdef FEAT_CMDHIST
-	write_viminfo_history(fp_out);
+	write_viminfo_history(fp_out, merge);
 #endif
 	write_viminfo_registers(fp_out);
 #ifdef FEAT_EVAL
@@ -2124,7 +2119,7 @@
     buf_T	*buf;
 
 #ifdef FEAT_CMDHIST
-    prepare_viminfo_history(forceit ? 9999 : 0);
+    prepare_viminfo_history(forceit ? 9999 : 0, writing);
 #endif
     eof = viminfo_readline(virp);
     while (!eof && virp->vir_line[0] != '>')
@@ -2172,7 +2167,7 @@
 	    case '=':
 	    case '@':
 #ifdef FEAT_CMDHIST
-		eof = read_viminfo_history(virp);
+		eof = read_viminfo_history(virp, writing);
 #else
 		eof = viminfo_readline(virp);
 #endif
@@ -2193,7 +2188,8 @@
 
 #ifdef FEAT_CMDHIST
     /* Finish reading history items. */
-    finish_viminfo_history();
+    if (!writing)
+	finish_viminfo_history();
 #endif
 
     /* Change file names to buffer numbers for fmarks. */
@@ -2424,6 +2420,59 @@
     info_message = FALSE;
 }
 
+    int
+rename_buffer(new_fname)
+    char_u	*new_fname;
+{
+    char_u	*fname, *sfname, *xfname;
+    buf_T	*buf;
+
+#ifdef FEAT_AUTOCMD
+    buf = curbuf;
+    apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
+    /* buffer changed, don't change name now */
+    if (buf != curbuf)
+	return FAIL;
+# ifdef FEAT_EVAL
+    if (aborting())	    /* autocmds may abort script processing */
+	return FAIL;
+# endif
+#endif
+    /*
+     * The name of the current buffer will be changed.
+     * A new (unlisted) buffer entry needs to be made to hold the old file
+     * name, which will become the alternate file name.
+     * But don't set the alternate file name if the buffer didn't have a
+     * name.
+     */
+    fname = curbuf->b_ffname;
+    sfname = curbuf->b_sfname;
+    xfname = curbuf->b_fname;
+    curbuf->b_ffname = NULL;
+    curbuf->b_sfname = NULL;
+    if (setfname(curbuf, new_fname, NULL, TRUE) == FAIL)
+    {
+	curbuf->b_ffname = fname;
+	curbuf->b_sfname = sfname;
+	return FAIL;
+    }
+    curbuf->b_flags |= BF_NOTEDITED;
+    if (xfname != NULL && *xfname != NUL)
+    {
+	buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0);
+	if (buf != NULL && !cmdmod.keepalt)
+	    curwin->w_alt_fnum = buf->b_fnum;
+    }
+    vim_free(fname);
+    vim_free(sfname);
+#ifdef FEAT_AUTOCMD
+    apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
+#endif
+    /* Change directories when the 'acd' option is set. */
+    DO_AUTOCHDIR
+    return OK;
+}
+
 /*
  * ":file[!] [fname]".
  */
@@ -2431,9 +2480,6 @@
 ex_file(eap)
     exarg_T	*eap;
 {
-    char_u	*fname, *sfname, *xfname;
-    buf_T	*buf;
-
     /* ":0file" removes the file name.  Check for illegal uses ":3file",
      * "0file name", etc. */
     if (eap->addr_count > 0
@@ -2447,49 +2493,8 @@
 
     if (*eap->arg != NUL || eap->addr_count == 1)
     {
-#ifdef FEAT_AUTOCMD
-	buf = curbuf;
-	apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
-	/* buffer changed, don't change name now */
-	if (buf != curbuf)
-	    return;
-# ifdef FEAT_EVAL
-	if (aborting())	    /* autocmds may abort script processing */
-	    return;
-# endif
-#endif
-	/*
-	 * The name of the current buffer will be changed.
-	 * A new (unlisted) buffer entry needs to be made to hold the old file
-	 * name, which will become the alternate file name.
-	 * But don't set the alternate file name if the buffer didn't have a
-	 * name.
-	 */
-	fname = curbuf->b_ffname;
-	sfname = curbuf->b_sfname;
-	xfname = curbuf->b_fname;
-	curbuf->b_ffname = NULL;
-	curbuf->b_sfname = NULL;
-	if (setfname(curbuf, eap->arg, NULL, TRUE) == FAIL)
-	{
-	    curbuf->b_ffname = fname;
-	    curbuf->b_sfname = sfname;
+	if (rename_buffer(eap->arg) == FAIL)
 	    return;
-	}
-	curbuf->b_flags |= BF_NOTEDITED;
-	if (xfname != NULL && *xfname != NUL)
-	{
-	    buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0);
-	    if (buf != NULL && !cmdmod.keepalt)
-		curwin->w_alt_fnum = buf->b_fnum;
-	}
-	vim_free(fname);
-	vim_free(sfname);
-#ifdef FEAT_AUTOCMD
-	apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
-#endif
-	/* Change directories when the 'acd' option is set. */
-	DO_AUTOCHDIR
     }
     /* print full file name if :cd used */
     fileinfo(FALSE, FALSE, eap->forceit);
@@ -2700,6 +2705,10 @@
 									TRUE);
 		do_modelines(0);
 	    }
+
+	    /* Autocommands may have changed buffer names, esp. when
+	     * 'autochdir' is set. */
+	    fname = curbuf->b_sfname;
 #endif
 	}
 
@@ -2735,7 +2744,7 @@
  * May set eap->forceit if a dialog says it's OK to overwrite.
  * Return OK if it's OK, FAIL if it is not.
  */
-    static int
+    int
 check_overwrite(eap, buf, fname, ffname, other)
     exarg_T	*eap;
     buf_T	*buf;
@@ -2772,7 +2781,7 @@
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
 	    if (p_confirm || cmdmod.confirm)
 	    {
-		char_u	buff[IOSIZE];
+		char_u	buff[DIALOG_MSG_SIZE];
 
 		dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
 		if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
@@ -2790,7 +2799,7 @@
 	/* For ":w! filename" check that no swap file exists for "filename". */
 	if (other && !emsg_silent)
 	{
-	    char_u	dir[MAXPATHL];
+	    char_u	*dir;
 	    char_u	*p;
 	    int		r;
 	    char_u	*swapname;
@@ -2801,20 +2810,29 @@
 	     * Use 'shortname' of the current buffer, since there is no buffer
 	     * for the written file. */
 	    if (*p_dir == NUL)
+	    {
+		dir = alloc(5);
+		if (dir == NULL)
+		    return FAIL;
 		STRCPY(dir, ".");
+	    }
 	    else
 	    {
+		dir = alloc(MAXPATHL);
+		if (dir == NULL)
+		    return FAIL;
 		p = p_dir;
 		copy_option_part(&p, dir, MAXPATHL, ",");
 	    }
 	    swapname = makeswapname(fname, ffname, curbuf, dir);
+	    vim_free(dir);
 	    r = vim_fexists(swapname);
 	    if (r)
 	    {
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
 		if (p_confirm || cmdmod.confirm)
 		{
-		    char_u	buff[IOSIZE];
+		    char_u	buff[DIALOG_MSG_SIZE];
 
 		    dialog_msg(buff,
 			    _("Swap file \"%s\" exists, overwrite anyway?"),
@@ -2964,7 +2982,7 @@
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
 	if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
 	{
-	    char_u	buff[IOSIZE];
+	    char_u	buff[DIALOG_MSG_SIZE];
 
 	    if (buf->b_p_ro)
 		dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
@@ -3391,9 +3409,16 @@
 		/* close the link to the current buffer */
 		u_sync(FALSE);
 		close_buffer(oldwin, curbuf,
-				      (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
+			       (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE);
 
 #ifdef FEAT_AUTOCMD
+		/* Autocommands may open a new window and leave oldwin open
+		 * which leads to crashes since the above call sets
+		 * oldwin->w_buffer to NULL. */
+		if (curwin != oldwin && oldwin != aucmd_win
+			     && win_valid(oldwin) && oldwin->w_buffer == NULL)
+		    win_close(oldwin, FALSE);
+
 # ifdef FEAT_EVAL
 		if (aborting())	    /* autocmds may abort script processing */
 		{
@@ -3418,7 +3443,7 @@
 		     * and re-attach to buffer, perhaps.
 		     */
 		    if (curwin->w_s == &(curwin->w_buffer->b_s))
-			    curwin->w_s = &(buf->b_s);
+			curwin->w_s = &(buf->b_s);
 #endif
 		    curwin->w_buffer = buf;
 		    curbuf = buf;
@@ -3498,9 +3523,7 @@
 	curbuf->b_p_bin = FALSE;	/* reset 'bin' before reading file */
 	curwin->w_p_nu = 0;		/* no line numbers */
 	curwin->w_p_rnu = 0;		/* no relative line numbers */
-#ifdef FEAT_SCROLLBIND
-	curwin->w_p_scb = FALSE;	/* no scroll binding */
-#endif
+	RESET_BINDING(curwin);		/* no scroll or cursor binding */
 #ifdef FEAT_ARABIC
 	curwin->w_p_arab = FALSE;	/* no arabic mode */
 #endif
@@ -3631,10 +3654,6 @@
      */
     check_arg_idx(curwin);
 
-#ifdef FEAT_SYN_HL
-    reset_synblock(curwin);	    /* remove any ownsyntax */
-#endif
-
 #ifdef FEAT_AUTOCMD
     if (!auto_buf)
 #endif
@@ -4109,8 +4128,8 @@
     switch (*kind)
     {
 	case '-':
-	    start = lnum - bigness * (linenr_T)(x - kind);
-	    end = start + bigness;
+	    start = lnum - bigness * (linenr_T)(x - kind) + 1;
+	    end = start + bigness - 1;
 	    curs = end;
 	    break;
 
@@ -4268,6 +4287,9 @@
     int		endcolumn = FALSE;	/* cursor in last column when done */
     pos_T	old_cursor = curwin->w_cursor;
     int		start_nsubs;
+#ifdef FEAT_EVAL
+    int         save_ma = 0;
+#endif
 
     cmd = eap->arg;
     if (!global_busy)
@@ -4637,7 +4659,15 @@
 			 * for a match in this line again. */
 			skip_match = TRUE;
 		    else
-			++matchcol; /* search for a match at next column */
+		    {
+			 /* search for a match at next column */
+#ifdef FEAT_MBYTE
+			if (has_mbyte)
+			    matchcol += mb_ptr2len(sub_firstline + matchcol);
+			else
+#endif
+			    ++matchcol;
+		    }
 		    goto skip;
 		}
 
@@ -4664,7 +4694,12 @@
 		    }
 		    sub_nsubs++;
 		    did_sub = TRUE;
-		    goto skip;
+#ifdef FEAT_EVAL
+		    /* Skip the substitution, unless an expression is used,
+		     * then it is evaluated in the sandbox. */
+		    if (!(sub[0] == '\\' && sub[1] == '='))
+#endif
+			goto skip;
 		}
 
 		if (do_ask)
@@ -4715,6 +4750,8 @@
 			}
 			else
 			{
+			    char_u *orig_line = NULL;
+			    int    len_change = 0;
 #ifdef FEAT_FOLDING
 			    int save_p_fen = curwin->w_p_fen;
 
@@ -4725,9 +4762,43 @@
 			    temp = RedrawingDisabled;
 			    RedrawingDisabled = 0;
 
+			    if (new_start != NULL)
+			    {
+				/* There already was a substitution, we would
+				 * like to show this to the user.  We cannot
+				 * really update the line, it would change
+				 * what matches.  Temporarily replace the line
+				 * and change it back afterwards. */
+				orig_line = vim_strsave(ml_get(lnum));
+				if (orig_line != NULL)
+				{
+				    char_u *new_line = concat_str(new_start,
+						     sub_firstline + copycol);
+
+				    if (new_line == NULL)
+				    {
+					vim_free(orig_line);
+					orig_line = NULL;
+				    }
+				    else
+				    {
+					/* Position the cursor relative to the
+					 * end of the line, the previous
+					 * substitute may have inserted or
+					 * deleted characters before the
+					 * cursor. */
+					len_change = (int)STRLEN(new_line)
+						     - (int)STRLEN(orig_line);
+					curwin->w_cursor.col += len_change;
+					ml_replace(lnum, new_line, FALSE);
+				    }
+				}
+			    }
+
 			    search_match_lines = regmatch.endpos[0].lnum
 						  - regmatch.startpos[0].lnum;
-			    search_match_endcol = regmatch.endpos[0].col;
+			    search_match_endcol = regmatch.endpos[0].col
+								 + len_change;
 			    highlight_match = TRUE;
 
 			    update_topline();
@@ -4769,6 +4840,10 @@
 			    msg_didout = FALSE;	/* don't scroll up */
 			    msg_col = 0;
 			    gotocmdline(TRUE);
+
+			    /* restore the line */
+			    if (orig_line != NULL)
+				ml_replace(lnum, orig_line, FALSE);
 			}
 
 			need_wait_return = FALSE; /* no hit-return prompt */
@@ -4826,7 +4901,7 @@
 			goto skip;
 		    }
 		    if (got_quit)
-			break;
+			goto skip;
 		}
 
 		/* Move the cursor to the start of the match, so that we can
@@ -4836,10 +4911,27 @@
 		/*
 		 * 3. substitute the string.
 		 */
+#ifdef FEAT_EVAL
+		if (do_count)
+		{
+		    /* prevent accidentally changing the buffer by a function */
+		    save_ma = curbuf->b_p_ma;
+		    curbuf->b_p_ma = FALSE;
+		    sandbox++;
+		}
+#endif
 		/* get length of substitution part */
 		sublen = vim_regsub_multi(&regmatch,
 				    sub_firstlnum - regmatch.startpos[0].lnum,
 				    sub, sub_firstline, FALSE, p_magic, TRUE);
+#ifdef FEAT_EVAL
+		if (do_count)
+		{
+		    curbuf->b_p_ma = save_ma;
+		    sandbox--;
+		    goto skip;
+		}
+#endif
 
 		/* When the match included the "$" of the last line it may
 		 * go beyond the last line of the buffer. */
@@ -5016,14 +5108,10 @@
 		 * The check for nmatch_tl is needed for when multi-line
 		 * matching must replace the lines before trying to do another
 		 * match, otherwise "\@<=" won't work.
-		 * When asking the user we like to show the already replaced
-		 * text, but don't do it when "\<@=" or "\<@!" is used, it
-		 * changes what matches.
 		 * When the match starts below where we start searching also
 		 * need to replace the line first (using \zs after \n).
 		 */
 		if (lastone
-			|| (do_ask && !re_lookbehind(regmatch.regprog))
 			|| nmatch_tl > 0
 			|| (nmatch = vim_regexec_multi(&regmatch, curwin,
 							curbuf, sub_firstlnum,
@@ -5146,10 +5234,13 @@
 
 	if (!global_busy)
 	{
-	    if (endcolumn)
-		coladvance((colnr_T)MAXCOL);
-	    else
-		beginline(BL_WHITE | BL_FIX);
+	    if (!do_ask)  /* when interactive leave cursor on the match */
+	    {
+		if (endcolumn)
+		    coladvance((colnr_T)MAXCOL);
+		else
+		    beginline(BL_WHITE | BL_FIX);
+	    }
 	    if (!do_sub_msg(do_count) && do_ask)
 		MSG("");
 	}
@@ -5168,7 +5259,13 @@
 	    EMSG2(_(e_patnotf2), get_search_pat());
     }
 
-    vim_free(regmatch.regprog);
+#ifdef FEAT_FOLDING
+    if (do_ask && hasAnyFolding(curwin))
+	/* Cursor position may require updating */
+	changed_window_setting();
+#endif
+
+    vim_regfree(regmatch.regprog);
 }
 
 /*
@@ -5232,7 +5329,7 @@
  * is assumed to be 'p' if missing.
  *
  * This is implemented in two passes: first we scan the file for the pattern and
- * set a mark for each line that (not) matches. secondly we execute the command
+ * set a mark for each line that (not) matches. Secondly we execute the command
  * for each line that has a mark. This is required because after deleting
  * lines we do not know where to search for the next match.
  */
@@ -5337,13 +5434,13 @@
 	if (type == 'v')
 	    smsg((char_u *)_("Pattern found in every line: %s"), pat);
 	else
-	    smsg((char_u *)_(e_patnotf2), pat);
+	    smsg((char_u *)_("Pattern not found: %s"), pat);
     }
     else
 	global_exe(cmd);
 
     ml_clearmarked();	   /* clear rest of the marks */
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 }
 
 /*
@@ -5353,8 +5450,9 @@
 global_exe(cmd)
     char_u	*cmd;
 {
-    linenr_T	old_lcount;	/* b_ml.ml_line_count before the command */
-    linenr_T	lnum;		/* line number according to old situation */
+    linenr_T old_lcount;	/* b_ml.ml_line_count before the command */
+    buf_T    *old_buf = curbuf;	/* remember what buffer we started in */
+    linenr_T lnum;		/* line number according to old situation */
 
     /*
      * Set current position only once for a global command.
@@ -5398,8 +5496,10 @@
 	msg_didout = FALSE;
 
     /* If substitutes done, report number of substitutes, otherwise report
-     * number of extra or deleted lines. */
-    if (!do_sub_msg(FALSE))
+     * number of extra or deleted lines.
+     * Don't report extra or deleted lines in the edge case where the buffer
+     * we are in after execution is different from the buffer we started in. */
+    if (!do_sub_msg(FALSE) && curbuf == old_buf)
 	msgmore(curbuf->b_ml.ml_line_count - old_lcount);
 }
 
@@ -5409,7 +5509,7 @@
     vir_T	*virp;
     int		force;
 {
-    if (old_sub != NULL && force)
+    if (force)
 	vim_free(old_sub);
     if (force || old_sub == NULL)
 	old_sub = viminfo_readstring(virp, 1, TRUE);
@@ -5471,9 +5571,8 @@
 		return FALSE;
 	    curwin->w_p_pvw = TRUE;
 	    curwin->w_p_wfh = TRUE;
-# ifdef FEAT_SCROLLBIND
-	    curwin->w_p_scb = FALSE;	    /* don't take over 'scrollbind' */
-# endif
+	    RESET_BINDING(curwin);	    /* don't take over 'scrollbind'
+					       and 'cursorbind' */
 # ifdef FEAT_DIFF
 	    curwin->w_p_diff = FALSE;	    /* no 'diff' */
 # endif
@@ -5514,6 +5613,9 @@
     int		len;
     char_u	*lang;
 #endif
+#ifdef FEAT_FOLDING
+    int		old_KeyTyped = KeyTyped;
+#endif
 
     if (eap != NULL)
     {
@@ -5533,7 +5635,7 @@
 	}
 	arg = eap->arg;
 
-	if (eap->forceit && *arg == NUL)
+	if (eap->forceit && *arg == NUL && !curbuf->b_help)
 	{
 	    EMSG(_("E478: Don't panic!"));
 	    return;
@@ -5677,6 +5779,12 @@
     if (!p_im)
 	restart_edit = 0;	    /* don't want insert mode in help file */
 
+#ifdef FEAT_FOLDING
+    /* Restore KeyTyped, setting 'filetype=help' may reset it.
+     * It is needed for do_tag top open folds under the cursor. */
+    KeyTyped = old_KeyTyped;
+#endif
+
     if (tag != NULL)
 	do_tag(tag, DT_HELP, 1, FALSE, TRUE);
 
@@ -5806,14 +5914,14 @@
     int		i;
     static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
 			       "/*", "/\\*", "\"*", "**",
-			       "/\\(\\)",
+			       "cpo-*", "/\\(\\)",
 			       "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
 			       "/\\?", "/\\z(\\)", "\\=", ":s\\=",
 			       "[count]", "[quotex]", "[range]",
 			       "[pattern]", "\\|", "\\%$"};
     static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
 			       "/star", "/\\\\star", "quotestar", "starstar",
-			       "/\\\\(\\\\)",
+			       "cpo-star", "/\\\\(\\\\)",
 			       "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
 			       "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
 			       "\\[count]", "\\[quotex]", "\\[range]",
@@ -5853,9 +5961,14 @@
 	}
 	else
 	{
-	  /* replace "[:...:]" with "\[:...:]"; "[+...]" with "\[++...]" */
-	    if (arg[0] == '[' && (arg[1] == ':'
-					 || (arg[1] == '+' && arg[2] == '+')))
+	  /* Replace:
+	   * "[:...:]" with "\[:...:]"
+	   * "[++...]" with "\[++...]"
+	   * "\{" with "\\{"
+	   */
+	    if ((arg[0] == '[' && (arg[1] == ':'
+			 || (arg[1] == '+' && arg[2] == '+')))
+		    || (arg[0] == '\\' && arg[1] == '{'))
 	      *d++ = '\\';
 
 	  for (s = arg; *s; ++s)
@@ -5946,6 +6059,29 @@
 		break;
 	  }
 	  *d = NUL;
+
+	  if (*IObuff == '`')
+	  {
+	      if (d > IObuff + 2 && d[-1] == '`')
+	      {
+		  /* remove the backticks from `command` */
+		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
+		  d[-2] = NUL;
+	      }
+	      else if (d > IObuff + 3 && d[-2] == '`' && d[-1] == ',')
+	      {
+		  /* remove the backticks and comma from `command`, */
+		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
+		  d[-3] = NUL;
+	      }
+	      else if (d > IObuff + 4 && d[-3] == '`'
+					     && d[-2] == '\\' && d[-1] == '.')
+	      {
+		  /* remove the backticks and dot from `command`\. */
+		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
+		  d[-4] = NUL;
+	      }
+	  }
 	}
     }
 
@@ -5979,6 +6115,7 @@
     char_u	*line;
     int		in_example = FALSE;
     int		len;
+    char_u	*fname;
     char_u	*p;
     char_u	*rt;
     int		mustfree;
@@ -6025,124 +6162,187 @@
     }
 
     /*
-     * In the "help.txt" file, add the locally added help files.
-     * This uses the very first line in the help file.
+     * In the "help.txt" and "help.abx" file, add the locally added help
+     * files.  This uses the very first line in the help file.
      */
-    if (fnamecmp(gettail(curbuf->b_fname), "help.txt") == 0)
+    fname = gettail(curbuf->b_fname);
+    if (fnamecmp(fname, "help.txt") == 0
+#ifdef FEAT_MULTI_LANG
+	|| (fnamencmp(fname, "help.", 5) == 0
+	    && ASCII_ISALPHA(fname[5])
+	    && ASCII_ISALPHA(fname[6])
+	    && TOLOWER_ASC(fname[7]) == 'x'
+	    && fname[8] == NUL)
+#endif
+	)
     {
 	for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
 	{
 	    line = ml_get_buf(curbuf, lnum, FALSE);
-	    if (strstr((char *)line, "*local-additions*") != NULL)
-	    {
-		/* Go through all directories in 'runtimepath', skipping
-		 * $VIMRUNTIME. */
-		p = p_rtp;
-		while (*p != NUL)
-		{
-		    copy_option_part(&p, NameBuff, MAXPATHL, ",");
-		    mustfree = FALSE;
-		    rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
-		    if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
-		    {
-			int	fcount;
-			char_u	**fnames;
-			FILE	*fd;
-			char_u	*s;
-			int	fi;
+	    if (strstr((char *)line, "*local-additions*") == NULL)
+		continue;
+
+	    /* Go through all directories in 'runtimepath', skipping
+	     * $VIMRUNTIME. */
+	    p = p_rtp;
+	    while (*p != NUL)
+	    {
+		copy_option_part(&p, NameBuff, MAXPATHL, ",");
+		mustfree = FALSE;
+		rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
+		if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
+		{
+		    int		fcount;
+		    char_u	**fnames;
+		    FILE	*fd;
+		    char_u	*s;
+		    int		fi;
 #ifdef FEAT_MBYTE
-			vimconv_T	vc;
-			char_u		*cp;
+		    vimconv_T	vc;
+		    char_u	*cp;
 #endif
 
-			/* Find all "doc/ *.txt" files in this directory. */
-			add_pathsep(NameBuff);
-			STRCAT(NameBuff, "doc/*.txt");
-			if (gen_expand_wildcards(1, &NameBuff, &fcount,
-					     &fnames, EW_FILE|EW_SILENT) == OK
-				&& fcount > 0)
+		    /* Find all "doc/ *.txt" files in this directory. */
+		    add_pathsep(NameBuff);
+#ifdef FEAT_MULTI_LANG
+		    STRCAT(NameBuff, "doc/*.??[tx]");
+#else
+		    STRCAT(NameBuff, "doc/*.txt");
+#endif
+		    if (gen_expand_wildcards(1, &NameBuff, &fcount,
+					 &fnames, EW_FILE|EW_SILENT) == OK
+			    && fcount > 0)
+		    {
+#ifdef FEAT_MULTI_LANG
+			int	i1;
+			int	i2;
+			char_u	*f1;
+			char_u	*f2;
+			char_u	*t1;
+			char_u	*e1;
+			char_u	*e2;
+
+			/* If foo.abx is found use it instead of foo.txt in
+			 * the same directory. */
+			for (i1 = 0; i1 < fcount; ++i1)
 			{
-			    for (fi = 0; fi < fcount; ++fi)
+			    for (i2 = 0; i2 < fcount; ++i2)
 			    {
-				fd = mch_fopen((char *)fnames[fi], "r");
-				if (fd != NULL)
+				if (i1 == i2)
+				    continue;
+				if (fnames[i1] == NULL || fnames[i2] == NULL)
+				    continue;
+				f1 = fnames[i1];
+				f2 = fnames[i2];
+				t1 = gettail(f1);
+				if (fnamencmp(f1, f2, t1 - f1) != 0)
+				    continue;
+				e1 = vim_strrchr(t1, '.');
+				e2 = vim_strrchr(gettail(f2), '.');
+				if (e1 == NUL || e2 == NUL)
+				    continue;
+				if (fnamecmp(e1, ".txt") != 0
+				    && fnamecmp(e1, fname + 4) != 0)
 				{
-				    vim_fgets(IObuff, IOSIZE, fd);
-				    if (IObuff[0] == '*'
-					    && (s = vim_strchr(IObuff + 1, '*'))
-								      != NULL)
-				    {
-#ifdef FEAT_MBYTE
-					int	this_utf = MAYBE;
+				    /* Not .txt and not .abx, remove it. */
+				    vim_free(fnames[i1]);
+				    fnames[i1] = NULL;
+				    continue;
+				}
+				if (fnamencmp(f1, f2, e1 - f1) != 0)
+				    continue;
+				if (fnamecmp(e1, ".txt") == 0
+				    && fnamecmp(e2, fname + 4) == 0)
+				{
+				    /* use .abx instead of .txt */
+				    vim_free(fnames[i1]);
+				    fnames[i1] = NULL;
+				}
+			    }
+			}
 #endif
-					/* Change tag definition to a
-					 * reference and remove <CR>/<NL>. */
-					IObuff[0] = '|';
-					*s = '|';
-					while (*s != NUL)
-					{
-					    if (*s == '\r' || *s == '\n')
-						*s = NUL;
+			for (fi = 0; fi < fcount; ++fi)
+			{
+			    if (fnames[fi] == NULL)
+				continue;
+			    fd = mch_fopen((char *)fnames[fi], "r");
+			    if (fd != NULL)
+			    {
+				vim_fgets(IObuff, IOSIZE, fd);
+				if (IObuff[0] == '*'
+					&& (s = vim_strchr(IObuff + 1, '*'))
+								  != NULL)
+				{
 #ifdef FEAT_MBYTE
-					    /* The text is utf-8 when a byte
-					     * above 127 is found and no
-					     * illegal byte sequence is found.
-					     */
-					    if (*s >= 0x80 && this_utf != FALSE)
-					    {
-						int	l;
-
-						this_utf = TRUE;
-						l = utf_ptr2len(s);
-						if (l == 1)
-						    this_utf = FALSE;
-						s += l - 1;
-					    }
+				    int	this_utf = MAYBE;
 #endif
-					    ++s;
-					}
+				    /* Change tag definition to a
+				     * reference and remove <CR>/<NL>. */
+				    IObuff[0] = '|';
+				    *s = '|';
+				    while (*s != NUL)
+				    {
+					if (*s == '\r' || *s == '\n')
+					    *s = NUL;
 #ifdef FEAT_MBYTE
-					/* The help file is latin1 or utf-8;
-					 * conversion to the current
-					 * 'encoding' may be required. */
-					vc.vc_type = CONV_NONE;
-					convert_setup(&vc, (char_u *)(
-						    this_utf == TRUE ? "utf-8"
-							  : "latin1"), p_enc);
-					if (vc.vc_type == CONV_NONE)
-					    /* No conversion needed. */
-					    cp = IObuff;
-					else
+					/* The text is utf-8 when a byte
+					 * above 127 is found and no
+					 * illegal byte sequence is found.
+					 */
+					if (*s >= 0x80 && this_utf != FALSE)
 					{
-					    /* Do the conversion.  If it fails
-					     * use the unconverted text. */
-					    cp = string_convert(&vc, IObuff,
-									NULL);
-					    if (cp == NULL)
-						cp = IObuff;
+					    int	l;
+
+					    this_utf = TRUE;
+					    l = utf_ptr2len(s);
+					    if (l == 1)
+						this_utf = FALSE;
+					    s += l - 1;
 					}
-					convert_setup(&vc, NULL, NULL);
+#endif
+					++s;
+				    }
+#ifdef FEAT_MBYTE
+				    /* The help file is latin1 or utf-8;
+				     * conversion to the current
+				     * 'encoding' may be required. */
+				    vc.vc_type = CONV_NONE;
+				    convert_setup(&vc, (char_u *)(
+						this_utf == TRUE ? "utf-8"
+						      : "latin1"), p_enc);
+				    if (vc.vc_type == CONV_NONE)
+					/* No conversion needed. */
+					cp = IObuff;
+				    else
+				    {
+					/* Do the conversion.  If it fails
+					 * use the unconverted text. */
+					cp = string_convert(&vc, IObuff,
+								    NULL);
+					if (cp == NULL)
+					    cp = IObuff;
+				    }
+				    convert_setup(&vc, NULL, NULL);
 
-					ml_append(lnum, cp, (colnr_T)0, FALSE);
-					if (cp != IObuff)
-					    vim_free(cp);
+				    ml_append(lnum, cp, (colnr_T)0, FALSE);
+				    if (cp != IObuff)
+					vim_free(cp);
 #else
-					ml_append(lnum, IObuff, (colnr_T)0,
-								       FALSE);
+				    ml_append(lnum, IObuff, (colnr_T)0,
+								   FALSE);
 #endif
-					++lnum;
-				    }
-				    fclose(fd);
+				    ++lnum;
 				}
+				fclose(fd);
 			    }
-			    FreeWild(fcount, fnames);
 			}
+			FreeWild(fcount, fnames);
 		    }
-		    if (mustfree)
-			vim_free(rt);
 		}
-		break;
+		if (mustfree)
+		    vim_free(rt);
 	    }
+	    break;
 	}
     }
 }
@@ -6209,10 +6409,10 @@
     }
 
 #ifdef FEAT_MULTI_LANG
-    /* Get a list of all files in the directory. */
+    /* Get a list of all files in the help directory and in subdirectories. */
     STRCPY(NameBuff, dirname);
     add_pathsep(NameBuff);
-    STRCAT(NameBuff, "*");
+    STRCAT(NameBuff, "**");
     if (gen_expand_wildcards(1, &NameBuff, &filecount, &files,
 						    EW_FILE|EW_SILENT) == FAIL
 	    || filecount == 0)
@@ -6301,8 +6501,8 @@
 helptags_one(dir, ext, tagfname, add_help_tags)
     char_u	*dir;		/* doc directory */
     char_u	*ext;		/* suffix, ".txt", ".itx", ".frx", etc. */
-    char_u	*tagfname;      /* "tags" for English, "tags-fr" for French. */
-    int		add_help_tags;  /* add "help-tags" tag */
+    char_u	*tagfname;	/* "tags" for English, "tags-fr" for French. */
+    int		add_help_tags;	/* add "help-tags" tag */
 {
     FILE	*fd_tags;
     FILE	*fd;
@@ -6314,6 +6514,7 @@
     char_u	*s;
     int		i;
     char_u	*fname;
+    int		dirlen;
 # ifdef FEAT_MBYTE
     int		utf8 = MAYBE;
     int		this_utf8;
@@ -6324,9 +6525,9 @@
     /*
      * Find all *.txt files.
      */
+    dirlen = (int)STRLEN(dir);
     STRCPY(NameBuff, dir);
-    add_pathsep(NameBuff);
-    STRCAT(NameBuff, "*");
+    STRCAT(NameBuff, "/**/*");
     STRCAT(NameBuff, ext);
     if (gen_expand_wildcards(1, &NameBuff, &filecount, &files,
 						    EW_FILE|EW_SILENT) == FAIL
@@ -6387,7 +6588,7 @@
 	    EMSG2(_("E153: Unable to open %s for reading"), files[fi]);
 	    continue;
 	}
-	fname = gettail(files[fi]);
+	fname = files[fi] + dirlen + 1;
 
 # ifdef FEAT_MBYTE
 	firstline = TRUE;
@@ -6430,7 +6631,10 @@
 	    p1 = vim_strchr(IObuff, '*');	/* find first '*' */
 	    while (p1 != NULL)
 	    {
-		p2 = vim_strchr(p1 + 1, '*');	/* find second '*' */
+		/* Use vim_strbyte() instead of vim_strchr() so that when
+		 * 'encoding' is dbcs it still works, don't find '*' in the
+		 * second byte. */
+		p2 = vim_strbyte(p1 + 1, '*');	/* find second '*' */
 		if (p2 != NULL && p2 > p1 + 1)	/* skip "*" and "**" */
 		{
 		    for (s = p1 + 1; s < p2; ++s)
@@ -6559,8 +6763,7 @@
 struct sign
 {
     sign_T	*sn_next;	/* next sign in list */
-    int		sn_typenr;	/* type number of sign (negative if not equal
-				   to name) */
+    int		sn_typenr;	/* type number of sign */
     char_u	*sn_name;	/* name of sign */
     char_u	*sn_icon;	/* name of pixmap */
 #ifdef FEAT_SIGN_ICONS
@@ -6572,7 +6775,7 @@
 };
 
 static sign_T	*first_sign = NULL;
-static int	last_sign_typenr = MAX_TYPENR;	/* is decremented */
+static int	next_sign_typenr = 1;
 
 static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd));
 static void sign_list_defined __ARGS((sign_T *sp));
@@ -6647,16 +6850,21 @@
 	if (idx == SIGNCMD_LIST && *arg == NUL)
 	{
 	    /* ":sign list": list all defined signs */
-	    for (sp = first_sign; sp != NULL; sp = sp->sn_next)
+	    for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
 		sign_list_defined(sp);
 	}
 	else if (*arg == NUL)
 	    EMSG(_("E156: Missing sign name"));
 	else
 	{
+	    /* Isolate the sign name.  If it's a number skip leading zeroes,
+	     * so that "099" and "99" are the same sign.  But keep "0". */
 	    p = skiptowhite(arg);
 	    if (*p != NUL)
 		*p++ = NUL;
+	    while (arg[0] == '0' && arg[1] != NUL)
+		++arg;
+
 	    sp_prev = NULL;
 	    for (sp = first_sign; sp != NULL; sp = sp->sn_next)
 	    {
@@ -6669,46 +6877,52 @@
 		/* ":sign define {name} ...": define a sign */
 		if (sp == NULL)
 		{
+		    sign_T	*lp;
+		    int		start = next_sign_typenr;
+
 		    /* Allocate a new sign. */
 		    sp = (sign_T *)alloc_clear((unsigned)sizeof(sign_T));
 		    if (sp == NULL)
 			return;
-		    if (sp_prev == NULL)
-			first_sign = sp;
-		    else
-			sp_prev->sn_next = sp;
-		    sp->sn_name = vim_strnsave(arg, (int)(p - arg));
 
-		    /* If the name is a number use that for the typenr,
-		     * otherwise use a negative number. */
-		    if (VIM_ISDIGIT(*arg))
-			sp->sn_typenr = atoi((char *)arg);
-		    else
+		    /* Check that next_sign_typenr is not already being used.
+		     * This only happens after wrapping around.  Hopefully
+		     * another one got deleted and we can use its number. */
+		    for (lp = first_sign; lp != NULL; )
 		    {
-			sign_T	*lp;
-			int	start = last_sign_typenr;
-
-			for (lp = first_sign; lp != NULL; lp = lp->sn_next)
+			if (lp->sn_typenr == next_sign_typenr)
 			{
-			    if (lp->sn_typenr == last_sign_typenr)
+			    ++next_sign_typenr;
+			    if (next_sign_typenr == MAX_TYPENR)
+				next_sign_typenr = 1;
+			    if (next_sign_typenr == start)
 			    {
-				--last_sign_typenr;
-				if (last_sign_typenr == 0)
-				    last_sign_typenr = MAX_TYPENR;
-				if (last_sign_typenr == start)
-				{
-				    EMSG(_("E612: Too many signs defined"));
-				    return;
-				}
-				lp = first_sign;
-				continue;
+				vim_free(sp);
+				EMSG(_("E612: Too many signs defined"));
+				return;
 			    }
+			    lp = first_sign;  /* start all over */
+			    continue;
 			}
+			lp = lp->sn_next;
+		    }
+
+		    sp->sn_typenr = next_sign_typenr;
+		    if (++next_sign_typenr == MAX_TYPENR)
+			next_sign_typenr = 1; /* wrap around */
 
-			sp->sn_typenr = last_sign_typenr--;
-			if (last_sign_typenr == 0)
-			    last_sign_typenr = MAX_TYPENR; /* wrap around */
+		    sp->sn_name = vim_strsave(arg);
+		    if (sp->sn_name == NULL)  /* out of memory */
+		    {
+			vim_free(sp);
+			return;
 		    }
+
+		    /* add the new sign to the list of signs */
+		    if (sp_prev == NULL)
+			first_sign = sp;
+		    else
+			sp_prev->sn_next = sp;
 		}
 
 		/* set values for a defined sign. */
@@ -6879,6 +7093,16 @@
 		lnum = atoi((char *)arg);
 		arg = skiptowhite(arg);
 	    }
+	    else if (STRNCMP(arg, "*", 1) == 0 && idx == SIGNCMD_UNPLACE)
+	    {
+		if (id != -1)
+		{
+		    EMSG(_(e_invarg));
+		    return;
+		}
+		id = -2;
+		arg = skiptowhite(arg + 1);
+	    }
 	    else if (STRNCMP(arg, "name=", 5) == 0)
 	    {
 		arg += 5;
@@ -6886,6 +7110,8 @@
 		arg = skiptowhite(arg);
 		if (*arg != NUL)
 		    *arg++ = NUL;
+		while (sign_name[0] == '0' && sign_name[1] != NUL)
+		    ++sign_name;
 	    }
 	    else if (STRNCMP(arg, "file=", 5) == 0)
 	    {
@@ -6913,7 +7139,7 @@
 	{
 	    EMSG2(_("E158: Invalid buffer name: %s"), arg);
 	}
-	else if (id <= 0)
+	else if (id <= 0 && !(idx == SIGNCMD_UNPLACE && id == -2))
 	{
 	    if (lnum >= 0 || sign_name != NULL)
 		EMSG(_(e_invarg));
@@ -6954,11 +7180,17 @@
 	}
 	else if (idx == SIGNCMD_UNPLACE)
 	{
-	    /* ":sign unplace {id} file={fname}" */
 	    if (lnum >= 0 || sign_name != NULL)
 		EMSG(_(e_invarg));
+	    else if (id == -2)
+	    {
+		/* ":sign unplace * file={fname}" */
+		redraw_buf_later(buf, NOT_VALID);
+		buf_delete_signs(buf);
+	    }
 	    else
 	    {
+		/* ":sign unplace {id} file={fname}" */
 		lnum = buf_delsign(buf, id);
 		update_debug_sign(buf, lnum);
 	    }
diff -Naur vim73.orig/src/ex_cmds.h vim73/src/ex_cmds.h
--- vim73.orig/src/ex_cmds.h	2010-07-21 13:48:02.000000000 +0000
+++ vim73/src/ex_cmds.h	2013-08-04 19:09:10.217278375 +0000
@@ -102,7 +102,7 @@
 EX(CMD_aboveleft,	"aboveleft",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM),
 EX(CMD_all,		"all",		ex_all,
-			RANGE|NOTADR|COUNT|TRLBAR),
+			BANG|RANGE|NOTADR|COUNT|TRLBAR),
 EX(CMD_amenu,		"amenu",	ex_menu,
 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
 EX(CMD_anoremenu,	"anoremenu",	ex_menu,
@@ -304,7 +304,7 @@
 EX(CMD_display,		"display",	ex_display,
 			EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
 EX(CMD_diffupdate,	"diffupdate",	ex_diffupdate,
-			TRLBAR),
+			BANG|TRLBAR),
 EX(CMD_diffget,		"diffget",	ex_diffgetput,
 			RANGE|EXTRA|TRLBAR|MODIFY),
 EX(CMD_diffoff,		"diffoff",	ex_diffoff,
@@ -662,7 +662,7 @@
 EX(CMD_nunmenu,		"nunmenu",	ex_menu,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
 EX(CMD_open,		"open",		ex_open,
-			RANGE|EXTRA),
+			RANGE|BANG|EXTRA),
 EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
 			BANG|TRLBAR|SBOXOK|CMDWIN),
 EX(CMD_omap,		"omap",		ex_map,
@@ -739,10 +739,14 @@
 			TRLBAR|CMDWIN),
 EX(CMD_python,		"python",	ex_python,
 			RANGE|EXTRA|NEEDARG|CMDWIN),
+EX(CMD_pydo,		"pydo",		ex_pydo,
+			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
 EX(CMD_pyfile,		"pyfile",	ex_pyfile,
 			RANGE|FILE1|NEEDARG|CMDWIN),
 EX(CMD_py3,		"py3",		ex_py3,
 			RANGE|EXTRA|NEEDARG|CMDWIN),
+EX(CMD_py3do,		"py3do",	ex_py3do,
+			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
 EX(CMD_python3,		"python3",	ex_py3,
 			RANGE|EXTRA|NEEDARG|CMDWIN),
 EX(CMD_py3file,		"py3file",	ex_py3file,
@@ -788,7 +792,7 @@
 EX(CMD_rubyfile,	"rubyfile",	ex_rubyfile,
 			RANGE|FILE1|NEEDARG|CMDWIN),
 EX(CMD_rundo,		"rundo",	ex_rundo,
-			NEEDARG|EXTRA|XFILE),
+			NEEDARG|FILE1),
 EX(CMD_rviminfo,	"rviminfo",	ex_viminfo,
 			BANG|FILE1|TRLBAR|CMDWIN),
 EX(CMD_substitute,	"substitute",	do_sub,
@@ -798,7 +802,7 @@
 EX(CMD_sargument,	"sargument",	ex_argument,
 			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
 EX(CMD_sall,		"sall",		ex_all,
-			RANGE|NOTADR|COUNT|TRLBAR),
+			BANG|RANGE|NOTADR|COUNT|TRLBAR),
 EX(CMD_sandbox,		"sandbox",	ex_wrongmodifier,
 			NEEDARG|EXTRA|NOTRLCOM),
 EX(CMD_saveas,		"saveas",	ex_write,
@@ -832,9 +836,9 @@
 EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
 			TRLBAR|EXTRA|NEEDARG|CMDWIN),
 EX(CMD_setglobal,	"setglobal",	ex_set,
-			TRLBAR|EXTRA|CMDWIN),
+			TRLBAR|EXTRA|CMDWIN|SBOXOK),
 EX(CMD_setlocal,	"setlocal",	ex_set,
-			TRLBAR|EXTRA|CMDWIN),
+			TRLBAR|EXTRA|CMDWIN|SBOXOK),
 EX(CMD_sfind,		"sfind",	ex_splitview,
 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
 EX(CMD_sfirst,		"sfirst",	ex_rewind,
@@ -921,6 +925,8 @@
 			TRLBAR|CMDWIN),
 EX(CMD_syntax,		"syntax",	ex_syntax,
 			EXTRA|NOTRLCOM|CMDWIN),
+EX(CMD_syntime,		"syntime",	ex_syntime,
+			NEEDARG|WORD1|TRLBAR|CMDWIN),
 EX(CMD_syncbind,	"syncbind",	ex_syncbind,
 			TRLBAR),
 EX(CMD_t,		"t",		ex_copymove,
@@ -944,7 +950,7 @@
 EX(CMD_tabfirst,	"tabfirst",	ex_tabnext,
 			TRLBAR),
 EX(CMD_tabmove,		"tabmove",	ex_tabmove,
-			RANGE|NOTADR|ZEROR|COUNT|TRLBAR|ZEROR),
+			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR),
 EX(CMD_tablast,		"tablast",	ex_tabnext,
 			TRLBAR),
 EX(CMD_tabnext,		"tabnext",	ex_tabnext,
@@ -1078,7 +1084,7 @@
 EX(CMD_wsverb,		"wsverb",	ex_wsverb,
 			EXTRA|NOTADR|NEEDARG),
 EX(CMD_wundo,		"wundo",	ex_wundo,
-			BANG|NEEDARG|EXTRA|XFILE),
+			BANG|NEEDARG|FILE1),
 EX(CMD_wviminfo,	"wviminfo",	ex_viminfo,
 			BANG|FILE1|TRLBAR|CMDWIN),
 EX(CMD_xit,		"xit",		ex_exit,
diff -Naur vim73.orig/src/ex_cmds2.c vim73/src/ex_cmds2.c
--- vim73.orig/src/ex_cmds2.c	2010-07-27 19:43:38.000000000 +0000
+++ vim73/src/ex_cmds2.c	2013-08-04 19:09:10.220611698 +0000
@@ -11,10 +11,6 @@
  * ex_cmds2.c: some more functions for command line commands
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for mch_open(), must be before vim.h */
-#endif
-
 #include "vim.h"
 #include "version.h"
 
@@ -504,18 +500,10 @@
 	/* Expand the file name in the same way as do_source().  This means
 	 * doing it twice, so that $DIR/file gets expanded when $DIR is
 	 * "~/dir". */
-#ifdef RISCOS
-	q = mch_munge_fname(p);
-#else
 	q = expand_env_save(p);
-#endif
 	if (q == NULL)
 	    return FAIL;
-#ifdef RISCOS
-	p = mch_munge_fname(q);
-#else
 	p = expand_env_save(q);
-#endif
 	vim_free(q);
 	if (p == NULL)
 	    return FAIL;
@@ -608,10 +596,15 @@
     garray_T	*gap;
 
     gap = &dbg_breakp;
-#ifdef FEAT_PROFILE
     if (eap->cmdidx == CMD_profdel)
+    {
+#ifdef FEAT_PROFILE
 	gap = &prof_ga;
+#else
+	ex_ni(eap);
+	return;
 #endif
+    }
 
     if (vim_isdigit(*eap->arg))
     {
@@ -659,7 +652,7 @@
 	while (gap->ga_len > 0)
 	{
 	    vim_free(DEBUGGY(gap, todel).dbg_name);
-	    vim_free(DEBUGGY(gap, todel).dbg_prog);
+	    vim_regfree(DEBUGGY(gap, todel).dbg_prog);
 	    --gap->ga_len;
 	    if (todel < gap->ga_len)
 		mch_memmove(&DEBUGGY(gap, todel), &DEBUGGY(gap, todel + 1),
@@ -694,10 +687,12 @@
 	for (i = 0; i < dbg_breakp.ga_len; ++i)
 	{
 	    bp = &BREAKP(i);
+	    if (bp->dbg_type == DBG_FILE)
+		home_replace(NULL, bp->dbg_name, NameBuff, MAXPATHL, TRUE);
 	    smsg((char_u *)_("%3d  %s %s  line %ld"),
 		    bp->dbg_nr,
 		    bp->dbg_type == DBG_FUNC ? "func" : "file",
-		    bp->dbg_name,
+		    bp->dbg_type == DBG_FUNC ? bp->dbg_name : NameBuff,
 		    (long)bp->dbg_lnum);
 	}
 }
@@ -963,6 +958,36 @@
 
 # endif  /* FEAT_PROFILE || FEAT_RELTIME */
 
+#if defined(FEAT_SYN_HL) && defined(FEAT_RELTIME) && defined(FEAT_FLOAT)
+# if defined(HAVE_MATH_H)
+#  include <math.h>
+# endif
+
+/*
+ * Divide the time "tm" by "count" and store in "tm2".
+ */
+    void
+profile_divide(tm, count, tm2)
+    proftime_T  *tm;
+    proftime_T  *tm2;
+    int		count;
+{
+    if (count == 0)
+	profile_zero(tm2);
+    else
+    {
+# ifdef WIN3264
+	tm2->QuadPart = tm->QuadPart / count;
+# else
+	double usec = (tm->tv_sec * 1000000.0 + tm->tv_usec) / count;
+
+	tm2->tv_sec = floor(usec / 1000000.0);
+	tm2->tv_usec = vim_round(usec - (tm2->tv_sec * 1000000.0));
+# endif
+    }
+}
+#endif
+
 # if defined(FEAT_PROFILE) || defined(PROTO)
 /*
  * Functions for profiling.
@@ -1055,7 +1080,7 @@
  */
     int
 profile_cmp(tm1, tm2)
-    proftime_T *tm1, *tm2;
+    const proftime_T *tm1, *tm2;
 {
 # ifdef WIN3264
     return (int)(tm2->QuadPart - tm1->QuadPart);
@@ -1119,7 +1144,7 @@
 static enum
 {
     PEXP_SUBCMD,	/* expand :profile sub-commands */
-    PEXP_FUNC,		/* expand :profile func {funcname} */
+    PEXP_FUNC		/* expand :profile func {funcname} */
 } pexpand_what;
 
 static char *pexpand_cmds[] = {
@@ -1488,7 +1513,7 @@
 #endif
 
 /*
- * Ask the user what to do when abondoning a changed buffer.
+ * Ask the user what to do when abandoning a changed buffer.
  * Must check 'write' option first!
  */
     void
@@ -1496,9 +1521,10 @@
     buf_T	*buf;
     int		checkall;	/* may abandon all changed buffers */
 {
-    char_u	buff[IOSIZE];
+    char_u	buff[DIALOG_MSG_SIZE];
     int		ret;
     buf_T	*buf2;
+    exarg_T     ea;
 
     dialog_msg(buff, _("Save changes to \"%s\"?"),
 			(buf->b_fname != NULL) ?
@@ -1508,13 +1534,19 @@
     else
 	ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
 
+    /* Init ea pseudo-structure, this is needed for the check_overwrite()
+     * function. */
+    ea.append = ea.forceit = FALSE;
+
     if (ret == VIM_YES)
     {
 #ifdef FEAT_BROWSE
 	/* May get file name, when there is none */
 	browse_save_fname(buf);
 #endif
-	if (buf->b_fname != NULL)   /* didn't hit Cancel */
+	if (buf->b_fname != NULL && check_overwrite(&ea, buf,
+				    buf->b_fname, buf->b_ffname, FALSE) == OK)
+	    /* didn't hit Cancel */
 	    (void)buf_write_all(buf, FALSE);
     }
     else if (ret == VIM_NO)
@@ -1542,7 +1574,9 @@
 		/* May get file name, when there is none */
 		browse_save_fname(buf2);
 #endif
-		if (buf2->b_fname != NULL)   /* didn't hit Cancel */
+		if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
+				  buf2->b_fname, buf2->b_ffname, FALSE) == OK)
+		    /* didn't hit Cancel */
 		    (void)buf_write_all(buf2, FALSE);
 #ifdef FEAT_AUTOCMD
 		/* an autocommand may have deleted the buffer */
@@ -1579,6 +1613,26 @@
 		|| forceit);
 }
 
+static void add_bufnum __ARGS((int *bufnrs, int *bufnump, int nr));
+
+/*
+ * Add a buffer number to "bufnrs", unless it's already there.
+ */
+    static void
+add_bufnum(bufnrs, bufnump, nr)
+    int	    *bufnrs;
+    int	    *bufnump;
+    int	    nr;
+{
+    int i;
+
+    for (i = 0; i < *bufnump; ++i)
+	if (bufnrs[i] == nr)
+	    return;
+    bufnrs[*bufnump] = nr;
+    *bufnump = *bufnump + 1;
+}
+
 /*
  * Return TRUE if any buffer was changed and cannot be abandoned.
  * That changed buffer becomes the current buffer.
@@ -1587,32 +1641,64 @@
 check_changed_any(hidden)
     int		hidden;		/* Only check hidden buffers */
 {
+    int		ret = FALSE;
     buf_T	*buf;
     int		save;
+    int		i;
+    int		bufnum = 0;
+    int		bufcount = 0;
+    int		*bufnrs;
 #ifdef FEAT_WINDOWS
+    tabpage_T   *tp;
     win_T	*wp;
 #endif
 
-    for (;;)
+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+	++bufcount;
+
+    if (bufcount == 0)
+	return FALSE;
+
+    bufnrs = (int *)alloc(sizeof(int) * bufcount);
+    if (bufnrs == NULL)
+	return FALSE;
+
+    /* curbuf */
+    bufnrs[bufnum++] = curbuf->b_fnum;
+#ifdef FEAT_WINDOWS
+    /* buf in curtab */
+    FOR_ALL_WINDOWS(wp)
+	if (wp->w_buffer != curbuf)
+	    add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
+
+    /* buf in other tab */
+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+	if (tp != curtab)
+	    for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+		add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
+#endif
+    /* any other buf */
+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+	add_bufnum(bufnrs, &bufnum, buf->b_fnum);
+
+    for (i = 0; i < bufnum; ++i)
     {
-	/* check curbuf first: if it was changed we can't abandon it */
-	if (!hidden && curbufIsChanged())
-	    buf = curbuf;
-	else
+	buf = buflist_findnr(bufnrs[i]);
+	if (buf == NULL)
+	    continue;
+	if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
 	{
-	    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
-		if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
-		    break;
+	    /* Try auto-writing the buffer.  If this fails but the buffer no
+	    * longer exists it's not changed, that's OK. */
+	    if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+		break;	    /* didn't save - still changes */
 	}
-	if (buf == NULL)    /* No buffers changed */
-	    return FALSE;
-
-	/* Try auto-writing the buffer.  If this fails but the buffer no
-	 * longer exists it's not changed, that's OK. */
-	if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
-	    break;	    /* didn't save - still changes */
     }
 
+    if (i >= bufnum)
+	goto theend;
+
+    ret = TRUE;
     exiting = FALSE;
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
     /*
@@ -1632,8 +1718,7 @@
 	    msg_didout = FALSE;
 	}
 	if (EMSG2(_("E162: No write since last change for buffer \"%s\""),
-		    buf_spname(buf) != NULL ? (char_u *)buf_spname(buf) :
-		    buf->b_fname))
+		    buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname))
 	{
 	    save = no_wait_return;
 	    no_wait_return = FALSE;
@@ -1645,24 +1730,29 @@
 #ifdef FEAT_WINDOWS
     /* Try to find a window that contains the buffer. */
     if (buf != curbuf)
-	for (wp = firstwin; wp != NULL; wp = wp->w_next)
+	FOR_ALL_TAB_WINDOWS(tp, wp)
 	    if (wp->w_buffer == buf)
 	    {
-		win_goto(wp);
+		goto_tabpage_win(tp, wp);
 # ifdef FEAT_AUTOCMD
 		/* Paranoia: did autocms wipe out the buffer with changes? */
 		if (!buf_valid(buf))
-		    return TRUE;
+		{
+		    goto theend;
+		}
 # endif
-		break;
+		goto buf_found;
 	    }
+buf_found:
 #endif
 
     /* Open the changed buffer in the current window. */
     if (buf != curbuf)
 	set_curbuf(buf, DOBUF_GOTO);
 
-    return TRUE;
+theend:
+    vim_free(bufnrs);
+    return ret;
 }
 
 /*
@@ -1789,22 +1879,28 @@
 #if defined(FEAT_QUICKFIX) || defined(FEAT_SYN_HL) || defined(PROTO)
 /*
  * Parse a list of arguments (file names), expand them and return in
- * "fnames[fcountp]".
+ * "fnames[fcountp]".  When "wig" is TRUE, removes files matching 'wildignore'.
  * Return FAIL or OK.
  */
     int
-get_arglist_exp(str, fcountp, fnamesp)
+get_arglist_exp(str, fcountp, fnamesp, wig)
     char_u	*str;
     int		*fcountp;
     char_u	***fnamesp;
+    int		wig;
 {
     garray_T	ga;
     int		i;
 
     if (get_arglist(&ga, str) == FAIL)
 	return FAIL;
-    i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
-				       fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+    if (wig == TRUE)
+	i = expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
+					fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+    else
+	i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
+					fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+
     ga_clear(&ga);
     return i;
 }
@@ -1860,11 +1956,7 @@
 	 * Delete the items: use each item as a regexp and find a match in the
 	 * argument list.
 	 */
-#ifdef CASE_INSENSITIVE_FILENAME
-	regmatch.rm_ic = TRUE;		/* Always ignore case */
-#else
-	regmatch.rm_ic = FALSE;		/* Never ignore case */
-#endif
+	regmatch.rm_ic = p_fic;	/* ignore case when 'fileignorecase' is set */
 	for (i = 0; i < new_ga.ga_len && !got_int; ++i)
 	{
 	    p = ((char_u **)new_ga.ga_data)[i];
@@ -1893,7 +1985,7 @@
 		    --match;
 		}
 
-	    vim_free(regmatch.regprog);
+	    vim_regfree(regmatch.regprog);
 	    vim_free(p);
 	    if (!didone)
 		EMSG2(_(e_nomatch2), ((char_u **)new_ga.ga_data)[i]);
@@ -1949,7 +2041,7 @@
 }
 
 /*
- * Return TRUE if window "win" is editing then file at the current argument
+ * Return TRUE if window "win" is editing the file at the current argument
  * index.
  */
     static int
@@ -2165,9 +2257,7 @@
 	{
 	    if (win_split(0, 0) == FAIL)
 		return;
-# ifdef FEAT_SCROLLBIND
-	    curwin->w_p_scb = FALSE;
-# endif
+	    RESET_BINDING(curwin);
 	}
 	else
 #endif
@@ -2422,7 +2512,7 @@
 		/* go to window "tp" */
 		if (!valid_tabpage(tp))
 		    break;
-		goto_tabpage_tp(tp);
+		goto_tabpage_tp(tp, TRUE, TRUE);
 		tp = tp->tp_next;
 	    }
 #endif
@@ -2647,6 +2737,10 @@
  * When "all" is TRUE repeat for all matches, otherwise only the first one is
  * used.
  * Returns OK when at least one match found, FAIL otherwise.
+ *
+ * If "name" is NULL calls callback for each entry in runtimepath. Cookie is 
+ * passed by reference in this case, setting it to NULL indicates that callback 
+ * has done its job.
  */
     int
 do_in_runtimepath(name, all, callback, cookie)
@@ -2678,7 +2772,7 @@
     buf = alloc(MAXPATHL);
     if (buf != NULL && rtp_copy != NULL)
     {
-	if (p_verbose > 1)
+	if (p_verbose > 1 && name != NULL)
 	{
 	    verbose_enter();
 	    smsg((char_u *)_("Searching for \"%s\" in \"%s\""),
@@ -2692,7 +2786,13 @@
 	{
 	    /* Copy the path from 'runtimepath' to buf[]. */
 	    copy_option_part(&rtp, buf, MAXPATHL, ",");
-	    if (STRLEN(buf) + STRLEN(name) + 2 < MAXPATHL)
+	    if (name == NULL)
+	    {
+		(*callback)(buf, (void *) &cookie);
+		if (!did_one)
+		    did_one = (cookie == NULL);
+	    }
+	    else if (STRLEN(buf) + STRLEN(name) + 2 < MAXPATHL)
 	    {
 		add_pathsep(buf);
 		tail = buf + STRLEN(buf);
@@ -2731,7 +2831,7 @@
     }
     vim_free(buf);
     vim_free(rtp_copy);
-    if (p_verbose > 0 && !did_one)
+    if (p_verbose > 0 && !did_one && name != NULL)
     {
 	verbose_enter();
 	smsg((char_u *)_("not found in 'runtimepath': \"%s\""), name);
@@ -2791,7 +2891,7 @@
 	EMSG(_(e_argreq));
 
     else if (eap != NULL && eap->forceit)
-	/* ":source!": read Normal mdoe commands
+	/* ":source!": read Normal mode commands
 	 * Need to execute the commands directly.  This is required at least
 	 * for:
 	 * - ":g" command busy
@@ -2946,11 +3046,7 @@
     proftime_T		    wait_start;
 #endif
 
-#ifdef RISCOS
-    p = mch_munge_fname(fname);
-#else
     p = expand_env_save(fname);
-#endif
     if (p == NULL)
 	return retval;
     fname_exp = fix_fname(p);
@@ -3286,7 +3382,11 @@
 
     for (i = 1; i <= script_items.ga_len && !got_int; ++i)
 	if (SCRIPT_ITEM(i).sn_name != NULL)
-	    smsg((char_u *)"%3d: %s", i, SCRIPT_ITEM(i).sn_name);
+	{
+	    home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+						    NameBuff, MAXPATHL, TRUE);
+	    smsg((char_u *)"%3d: %s", i, NameBuff);
+	}
 }
 
 # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
@@ -3412,7 +3512,7 @@
 {
     struct source_cookie *sp = (struct source_cookie *)cookie;
     char_u		*line;
-    char_u		*p, *s;
+    char_u		*p;
 
 #ifdef FEAT_EVAL
     /* If breakpoints have been added/deleted need to check for it. */
@@ -3451,28 +3551,49 @@
     {
 	/* compensate for the one line read-ahead */
 	--sourcing_lnum;
-	for (;;)
-	{
-	    sp->nextline = get_one_sourceline(sp);
-	    if (sp->nextline == NULL)
-		break;
-	    p = skipwhite(sp->nextline);
-	    if (*p != '\\')
-		break;
-	    s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
-	    if (s == NULL)	/* out of memory */
-		break;
-	    STRCPY(s, line);
-	    STRCAT(s, p + 1);
+
+	/* Get the next line and concatenate it when it starts with a
+	 * backslash. We always need to read the next line, keep it in
+	 * sp->nextline. */
+	sp->nextline = get_one_sourceline(sp);
+	if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
+	{
+	    garray_T    ga;
+
+	    ga_init2(&ga, (int)sizeof(char_u), 400);
+	    ga_concat(&ga, line);
+	    ga_concat(&ga, p + 1);
+	    for (;;)
+	    {
+		vim_free(sp->nextline);
+		sp->nextline = get_one_sourceline(sp);
+		if (sp->nextline == NULL)
+		    break;
+		p = skipwhite(sp->nextline);
+		if (*p != '\\')
+		    break;
+		/* Adjust the growsize to the current length to speed up
+		 * concatenating many lines. */
+		if (ga.ga_len > 400)
+		{
+		    if (ga.ga_len > 8000)
+			ga.ga_growsize = 8000;
+		    else
+			ga.ga_growsize = ga.ga_len;
+		}
+		ga_concat(&ga, p + 1);
+	    }
+	    ga_append(&ga, NUL);
 	    vim_free(line);
-	    line = s;
-	    vim_free(sp->nextline);
+	    line = ga.ga_data;
 	}
     }
 
 #ifdef FEAT_MBYTE
     if (line != NULL && sp->conv.vc_type != CONV_NONE)
     {
+	char_u	*s;
+
 	/* Convert the encoding of the script line. */
 	s = string_convert(&sp->conv, line, NULL);
 	if (s != NULL)
@@ -4140,6 +4261,9 @@
 		if (what == LC_ALL)
 		{
 		    vim_setenv((char_u *)"LANG", name);
+
+		    /* Clear $LANGUAGE because GNU gettext uses it. */
+		    vim_setenv((char_u *)"LANGUAGE", (char_u *)"");
 # ifdef WIN32
 		    /* Apparently MS-Windows printf() may cause a crash when
 		     * we give it 8-bit text while it's expecting text in the
@@ -4166,11 +4290,90 @@
 	    /* Set v:lang, v:lc_time and v:ctype to the final result. */
 	    set_lang_var();
 # endif
+# ifdef FEAT_TITLE
+	    maketitle();
+# endif
 	}
     }
 }
 
 # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+
+static char_u	**locales = NULL;	/* Array of all available locales */
+static int	did_init_locales = FALSE;
+
+static void init_locales __ARGS((void));
+static char_u **find_locales __ARGS((void));
+
+/*
+ * Lazy initialization of all available locales.
+ */
+    static void
+init_locales()
+{
+    if (!did_init_locales)
+    {
+	did_init_locales = TRUE;
+	locales = find_locales();
+    }
+}
+
+/* Return an array of strings for all available locales + NULL for the
+ * last element.  Return NULL in case of error. */
+    static char_u **
+find_locales()
+{
+    garray_T	locales_ga;
+    char_u	*loc;
+
+    /* Find all available locales by running command "locale -a".  If this
+     * doesn't work we won't have completion. */
+    char_u *locale_a = get_cmd_output((char_u *)"locale -a",
+							NULL, SHELL_SILENT);
+    if (locale_a == NULL)
+	return NULL;
+    ga_init2(&locales_ga, sizeof(char_u *), 20);
+
+    /* Transform locale_a string where each locale is separated by "\n"
+     * into an array of locale strings. */
+    loc = (char_u *)strtok((char *)locale_a, "\n");
+
+    while (loc != NULL)
+    {
+	if (ga_grow(&locales_ga, 1) == FAIL)
+	    break;
+	loc = vim_strsave(loc);
+	if (loc == NULL)
+	    break;
+
+	((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
+	loc = (char_u *)strtok(NULL, "\n");
+    }
+    vim_free(locale_a);
+    if (ga_grow(&locales_ga, 1) == FAIL)
+    {
+	ga_clear(&locales_ga);
+	return NULL;
+    }
+    ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
+    return (char_u **)locales_ga.ga_data;
+}
+
+#  if defined(EXITFREE) || defined(PROTO)
+    void
+free_locales()
+{
+    int			i;
+    if (locales != NULL)
+    {
+	for (i = 0; locales[i] != NULL; i++)
+	    vim_free(locales[i]);
+	vim_free(locales);
+	locales = NULL;
+    }
+}
+#  endif
+
 /*
  * Function given to ExpandGeneric() to obtain the possible arguments of the
  * ":language" command.
@@ -4186,7 +4389,25 @@
 	return (char_u *)"ctype";
     if (idx == 2)
 	return (char_u *)"time";
-    return NULL;
+
+    init_locales();
+    if (locales == NULL)
+	return NULL;
+    return locales[idx - 3];
+}
+
+/*
+ * Function given to ExpandGeneric() to obtain the available locales.
+ */
+    char_u *
+get_locales(xp, idx)
+    expand_T	*xp UNUSED;
+    int		idx;
+{
+    init_locales();
+    if (locales == NULL)
+	return NULL;
+    return locales[idx];
 }
 # endif
 
diff -Naur vim73.orig/src/ex_docmd.c vim73/src/ex_docmd.c
--- vim73.orig/src/ex_docmd.c	2010-08-07 14:59:47.000000000 +0000
+++ vim73/src/ex_docmd.c	2013-08-04 19:09:10.233944992 +0000
@@ -61,6 +61,7 @@
 static char_u	*do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
 static int	if_level = 0;		/* depth in :if */
 #endif
+static void	append_command __ARGS((char_u *cmd));
 static char_u	*find_command __ARGS((exarg_T *eap, int *full));
 
 static void	ex_abbreviate __ARGS((exarg_T *eap));
@@ -241,6 +242,9 @@
 # define ex_syntax		ex_ni
 # define ex_ownsyntax		ex_ni
 #endif
+#if !defined(FEAT_SYN_HL) || !defined(FEAT_PROFILE)
+# define ex_syntime		ex_ni
+#endif
 #ifndef FEAT_SPELL
 # define ex_spell		ex_ni
 # define ex_mkspell		ex_ni
@@ -267,10 +271,12 @@
 #endif
 #ifndef FEAT_PYTHON
 # define ex_python		ex_script_ni
+# define ex_pydo		ex_ni
 # define ex_pyfile		ex_ni
 #endif
 #ifndef FEAT_PYTHON3
 # define ex_py3			ex_script_ni
+# define ex_py3do		ex_ni
 # define ex_py3file		ex_ni
 #endif
 #ifndef FEAT_TCL
@@ -370,11 +376,9 @@
 # define ex_endif		ex_ni
 # define ex_else		ex_ni
 # define ex_while		ex_ni
-# define ex_for			ex_ni
 # define ex_continue		ex_ni
 # define ex_break		ex_ni
 # define ex_endwhile		ex_ni
-# define ex_endfor		ex_ni
 # define ex_throw		ex_ni
 # define ex_try			ex_ni
 # define ex_catch		ex_ni
@@ -733,7 +737,7 @@
  * do_cmdline(): execute one Ex command line
  *
  * 1. Execute "cmdline" when it is not NULL.
- *    If "cmdline" is NULL, or more lines are needed, getline() is used.
+ *    If "cmdline" is NULL, or more lines are needed, fgetline() is used.
  * 2. Split up in parts separated with '|'.
  *
  * This function can be called recursively!
@@ -741,7 +745,7 @@
  * flags:
  * DOCMD_VERBOSE  - The command will be included in the error message.
  * DOCMD_NOWAIT   - Don't call wait_return() and friends.
- * DOCMD_REPEAT   - Repeat execution until getline() returns NULL.
+ * DOCMD_REPEAT   - Repeat execution until fgetline() returns NULL.
  * DOCMD_KEYTYPED - Don't reset KeyTyped.
  * DOCMD_EXCRESET - Reset the exception environment (used for debugging).
  * DOCMD_KEEPLINE - Store first typed line (for repeating with ".").
@@ -749,15 +753,15 @@
  * return FAIL if cmdline could not be executed, OK otherwise
  */
     int
-do_cmdline(cmdline, getline, cookie, flags)
+do_cmdline(cmdline, fgetline, cookie, flags)
     char_u	*cmdline;
-    char_u	*(*getline) __ARGS((int, void *, int));
-    void	*cookie;		/* argument for getline() */
+    char_u	*(*fgetline) __ARGS((int, void *, int));
+    void	*cookie;		/* argument for fgetline() */
     int		flags;
 {
     char_u	*next_cmdline;		/* next cmd to execute */
     char_u	*cmdline_copy = NULL;	/* copy of cmd line */
-    int		used_getline = FALSE;	/* used "getline" to obtain command */
+    int		used_getline = FALSE;	/* used "fgetline" to obtain command */
     static int	recursive = 0;		/* recursive depth */
     int		msg_didout_before_start = 0;
     int		count = 0;		/* line number count */
@@ -775,14 +779,14 @@
     struct msglist	**saved_msg_list = NULL;
     struct msglist	*private_msg_list;
 
-    /* "getline" and "cookie" passed to do_one_cmd() */
+    /* "fgetline" and "cookie" passed to do_one_cmd() */
     char_u	*(*cmd_getline) __ARGS((int, void *, int));
     void	*cmd_cookie;
     struct loop_cookie cmd_loop_cookie;
     void	*real_cookie;
     int		getline_is_func;
 #else
-# define cmd_getline getline
+# define cmd_getline fgetline
 # define cmd_cookie cookie
 #endif
     static int	call_depth = 0;		/* recursiveness */
@@ -822,10 +826,10 @@
     cstack.cs_lflags = 0;
     ga_init2(&lines_ga, (int)sizeof(wcmd_T), 10);
 
-    real_cookie = getline_cookie(getline, cookie);
+    real_cookie = getline_cookie(fgetline, cookie);
 
     /* Inside a function use a higher nesting level. */
-    getline_is_func = getline_equal(getline, cookie, get_func_line);
+    getline_is_func = getline_equal(fgetline, cookie, get_func_line);
     if (getline_is_func && ex_nesting_level == func_level(real_cookie))
 	++ex_nesting_level;
 
@@ -837,7 +841,7 @@
 	breakpoint = func_breakpoint(real_cookie);
 	dbg_tick = func_dbg_tick(real_cookie);
     }
-    else if (getline_equal(getline, cookie, getsourceline))
+    else if (getline_equal(fgetline, cookie, getsourceline))
     {
 	fname = sourcing_name;
 	breakpoint = source_breakpoint(real_cookie);
@@ -881,7 +885,8 @@
      * KeyTyped is only set when calling vgetc().  Reset it here when not
      * calling vgetc() (sourced command lines).
      */
-    if (!(flags & DOCMD_KEYTYPED) && !getline_equal(getline, cookie, getexline))
+    if (!(flags & DOCMD_KEYTYPED)
+			       && !getline_equal(fgetline, cookie, getexline))
 	KeyTyped = FALSE;
 
     /*
@@ -894,7 +899,7 @@
     do
     {
 #ifdef FEAT_EVAL
-	getline_is_func = getline_equal(getline, cookie, get_func_line);
+	getline_is_func = getline_equal(fgetline, cookie, get_func_line);
 #endif
 
 	/* stop skipping cmds for an error msg after all endif/while/for */
@@ -909,7 +914,7 @@
 
 	/*
 	 * 1. If repeating a line in a loop, get a line from lines_ga.
-	 * 2. If no line given: Get an allocated line with getline().
+	 * 2. If no line given: Get an allocated line with fgetline().
 	 * 3. If a line is given: Make a copy, so we can mess with it.
 	 */
 
@@ -938,12 +943,12 @@
 	    }
 #ifdef FEAT_PROFILE
 	    else if (do_profiling == PROF_YES
-			     && getline_equal(getline, cookie, getsourceline))
+			    && getline_equal(fgetline, cookie, getsourceline))
 		script_line_end();
 #endif
 
 	    /* Check if a sourced file hit a ":finish" command. */
-	    if (source_finished(getline, cookie))
+	    if (source_finished(fgetline, cookie))
 	    {
 		retval = FAIL;
 		break;
@@ -954,7 +959,7 @@
 						   && *dbg_tick != debug_tick)
 	    {
 		*breakpoint = dbg_find_breakpoint(
-				getline_equal(getline, cookie, getsourceline),
+				getline_equal(fgetline, cookie, getsourceline),
 							fname, sourcing_lnum);
 		*dbg_tick = debug_tick;
 	    }
@@ -969,7 +974,7 @@
 		dbg_breakpoint(fname, sourcing_lnum);
 		/* Find next breakpoint. */
 		*breakpoint = dbg_find_breakpoint(
-				getline_equal(getline, cookie, getsourceline),
+			       getline_equal(fgetline, cookie, getsourceline),
 							fname, sourcing_lnum);
 		*dbg_tick = debug_tick;
 	    }
@@ -978,7 +983,7 @@
 	    {
 		if (getline_is_func)
 		    func_line_start(real_cookie);
-		else if (getline_equal(getline, cookie, getsourceline))
+		else if (getline_equal(fgetline, cookie, getsourceline))
 		    script_line_start();
 	    }
 # endif
@@ -987,7 +992,7 @@
 	if (cstack.cs_looplevel > 0)
 	{
 	    /* Inside a while/for loop we need to store the lines and use them
-	     * again.  Pass a different "getline" function to do_one_cmd()
+	     * again.  Pass a different "fgetline" function to do_one_cmd()
 	     * below, so that it stores lines in or reads them from
 	     * "lines_ga".  Makes it possible to define a function inside a
 	     * while/for loop. */
@@ -995,27 +1000,27 @@
 	    cmd_cookie = (void *)&cmd_loop_cookie;
 	    cmd_loop_cookie.lines_gap = &lines_ga;
 	    cmd_loop_cookie.current_line = current_line;
-	    cmd_loop_cookie.getline = getline;
+	    cmd_loop_cookie.getline = fgetline;
 	    cmd_loop_cookie.cookie = cookie;
 	    cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
 	}
 	else
 	{
-	    cmd_getline = getline;
+	    cmd_getline = fgetline;
 	    cmd_cookie = cookie;
 	}
 #endif
 
-	/* 2. If no line given, get an allocated line with getline(). */
+	/* 2. If no line given, get an allocated line with fgetline(). */
 	if (next_cmdline == NULL)
 	{
 	    /*
 	     * Need to set msg_didout for the first line after an ":if",
 	     * otherwise the ":if" will be overwritten.
 	     */
-	    if (count == 1 && getline_equal(getline, cookie, getexline))
+	    if (count == 1 && getline_equal(fgetline, cookie, getexline))
 		msg_didout = TRUE;
-	    if (getline == NULL || (next_cmdline = getline(':', cookie,
+	    if (fgetline == NULL || (next_cmdline = fgetline(':', cookie,
 #ifdef FEAT_EVAL
 		    cstack.cs_idx < 0 ? 0 : (cstack.cs_idx + 1) * 2
 #else
@@ -1093,7 +1098,7 @@
 		msg_didany = FALSE; /* no output yet */
 		msg_start();
 		msg_scroll = TRUE;  /* put messages below each other */
-		++no_wait_return;   /* dont wait for return until finished */
+		++no_wait_return;   /* don't wait for return until finished */
 		++RedrawingDisabled;
 		did_inc = TRUE;
 	    }
@@ -1142,7 +1147,7 @@
 	     * If the command was typed, remember it for the ':' register.
 	     * Do this AFTER executing the command to make :@: work.
 	     */
-	    if (getline_equal(getline, cookie, getexline)
+	    if (getline_equal(fgetline, cookie, getexline)
 						  && new_last_cmdline != NULL)
 	    {
 		vim_free(last_cmdline);
@@ -1163,7 +1168,7 @@
 #ifdef FEAT_EVAL
 	/* reset did_emsg for a function that is not aborted by an error */
 	if (did_emsg && !force_abort
-		&& getline_equal(getline, cookie, get_func_line)
+		&& getline_equal(fgetline, cookie, get_func_line)
 					      && !func_has_abort(real_cookie))
 	    did_emsg = FALSE;
 
@@ -1202,7 +1207,7 @@
 		    if (breakpoint != NULL)
 		    {
 			*breakpoint = dbg_find_breakpoint(
-				getline_equal(getline, cookie, getsourceline),
+			       getline_equal(fgetline, cookie, getsourceline),
 									fname,
 			   ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
 			*dbg_tick = debug_tick;
@@ -1295,9 +1300,16 @@
 		&& cstack.cs_trylevel == 0
 #endif
 	    )
-	    && !(did_emsg && used_getline
-			  && (getline_equal(getline, cookie, getexmodeline)
-				|| getline_equal(getline, cookie, getexline)))
+	    && !(did_emsg
+#ifdef FEAT_EVAL
+		/* Keep going when inside try/catch, so that the error can be
+		 * deal with, except when it is a syntax error, it may cause
+		 * the :endtry to be missed. */
+		&& (cstack.cs_trylevel == 0 || did_emsg_syntax)
+#endif
+		&& used_getline
+			    && (getline_equal(fgetline, cookie, getexmodeline)
+			       || getline_equal(fgetline, cookie, getexline)))
 	    && (next_cmdline != NULL
 #ifdef FEAT_EVAL
 			|| cstack.cs_idx >= 0
@@ -1305,6 +1317,7 @@
 			|| (flags & DOCMD_REPEAT)));
 
     vim_free(cmdline_copy);
+    did_emsg_syntax = FALSE;
 #ifdef FEAT_EVAL
     free_cmdlines(&lines_ga);
     ga_clear(&lines_ga);
@@ -1316,9 +1329,9 @@
 	 * unclosed conditional.
 	 */
 	if (!got_int && !did_throw
-		&& ((getline_equal(getline, cookie, getsourceline)
-			&& !source_finished(getline, cookie))
-		    || (getline_equal(getline, cookie, get_func_line)
+		&& ((getline_equal(fgetline, cookie, getsourceline)
+			&& !source_finished(fgetline, cookie))
+		    || (getline_equal(fgetline, cookie, get_func_line)
 					    && !func_has_ended(real_cookie))))
 	{
 	    if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY)
@@ -1354,7 +1367,7 @@
     /* If a missing ":endtry", ":endwhile", ":endfor", or ":endif" or a memory
      * lack was reported above and the error message is to be converted to an
      * exception, do this now after rewinding the cstack. */
-    do_errthrow(&cstack, getline_equal(getline, cookie, get_func_line)
+    do_errthrow(&cstack, getline_equal(fgetline, cookie, get_func_line)
 				  ? (char_u *)"endfunction" : (char_u *)NULL);
 
     if (trylevel == 0)
@@ -1449,9 +1462,9 @@
      */
     if (did_throw)
 	need_rethrow = TRUE;
-    if ((getline_equal(getline, cookie, getsourceline)
+    if ((getline_equal(fgetline, cookie, getsourceline)
 		&& ex_nesting_level > source_level(real_cookie))
-	    || (getline_equal(getline, cookie, get_func_line)
+	    || (getline_equal(fgetline, cookie, get_func_line)
 		&& ex_nesting_level > func_level(real_cookie) + 1))
     {
 	if (!did_throw)
@@ -1460,16 +1473,16 @@
     else
     {
 	/* When leaving a function, reduce nesting level. */
-	if (getline_equal(getline, cookie, get_func_line))
+	if (getline_equal(fgetline, cookie, get_func_line))
 	    --ex_nesting_level;
 	/*
 	 * Go to debug mode when returning from a function in which we are
 	 * single-stepping.
 	 */
-	if ((getline_equal(getline, cookie, getsourceline)
-		    || getline_equal(getline, cookie, get_func_line))
+	if ((getline_equal(fgetline, cookie, getsourceline)
+		    || getline_equal(fgetline, cookie, get_func_line))
 		&& ex_nesting_level + 1 <= debug_break_level)
-	    do_debug(getline_equal(getline, cookie, getsourceline)
+	    do_debug(getline_equal(fgetline, cookie, getsourceline)
 		    ? (char_u *)_("End of sourced file")
 		    : (char_u *)_("End of function"));
     }
@@ -1520,7 +1533,9 @@
 	}
     }
 
-#ifndef FEAT_EVAL
+#ifdef FEAT_EVAL
+    did_endif = FALSE;  /* in case do_cmdline used recursively */
+#else
     /*
      * Reset if_level, in case a sourced script file contains more ":if" than
      * ":endif" (could be ":if x | foo | endif").
@@ -1719,12 +1734,16 @@
     ++ex_nesting_level;
 #endif
 
-	/* when not editing the last file :q has to be typed twice */
+    /* When the last file has not been edited :q has to be typed twice. */
     if (quitmore
 #ifdef FEAT_EVAL
 	    /* avoid that a function call in 'statusline' does this */
 	    && !getline_equal(fgetline, cookie, get_func_line)
 #endif
+#ifdef FEAT_AUTOCMD
+	    /* avoid that an autocommand, e.g. QuitPre, does this */
+	    && !getline_equal(fgetline, cookie, getnextac)
+#endif
 	    )
 	--quitmore;
 
@@ -2135,11 +2154,9 @@
 	{
 	    STRCPY(IObuff, _("E492: Not an editor command"));
 	    if (!sourcing)
-	    {
-		STRCAT(IObuff, ": ");
-		STRNCAT(IObuff, *cmdlinep, 40);
-	    }
+		append_command(*cmdlinep);
 	    errormsg = IObuff;
+	    did_emsg_syntax = TRUE;
 	}
 	goto doend;
     }
@@ -2423,25 +2440,39 @@
     if (       (ea.argt & REGSTR)
 	    && *ea.arg != NUL
 #ifdef FEAT_USR_CMDS
-	    && valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
-						   && USER_CMDIDX(ea.cmdidx)))
 	    /* Do not allow register = for user commands */
 	    && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
-#else
-	    && valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
 #endif
 	    && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
     {
-	ea.regname = *ea.arg++;
-#ifdef FEAT_EVAL
-	/* for '=' register: accept the rest of the line as an expression */
-	if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+#ifndef FEAT_CLIPBOARD
+	/* check these explicitly for a more specific error message */
+	if (*ea.arg == '*' || *ea.arg == '+')
 	{
-	    set_expr_line(vim_strsave(ea.arg));
-	    ea.arg += STRLEN(ea.arg);
+	    errormsg = (char_u *)_(e_invalidreg);
+	    goto doend;
 	}
 #endif
-	ea.arg = skipwhite(ea.arg);
+	if (
+#ifdef FEAT_USR_CMDS
+	    valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+						   && USER_CMDIDX(ea.cmdidx)))
+#else
+	    valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+#endif
+	   )
+	{
+	    ea.regname = *ea.arg++;
+#ifdef FEAT_EVAL
+	    /* for '=' register: accept the rest of the line as an expression */
+	    if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
+	    {
+		set_expr_line(vim_strsave(ea.arg));
+		ea.arg += STRLEN(ea.arg);
+	    }
+#endif
+	    ea.arg = skipwhite(ea.arg);
+	}
     }
 
     /*
@@ -2580,6 +2611,7 @@
 	    case CMD_unlet:
 	    case CMD_verbose:
 	    case CMD_vertical:
+	    case CMD_wincmd:
 				break;
 
 	    default:		goto doend;
@@ -2618,7 +2650,8 @@
 	    while (p > ea.arg && vim_iswhite(p[-1]))
 		--p;
 	}
-	ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & BUFUNL) != 0, FALSE);
+	ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & BUFUNL) != 0,
+								FALSE, FALSE);
 	if (ea.line2 < 0)	    /* failed */
 	    goto doend;
 	ea.addr_count = 1;
@@ -2692,8 +2725,7 @@
 		STRCPY(IObuff, errormsg);
 		errormsg = IObuff;
 	    }
-	    STRCAT(errormsg, ": ");
-	    STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
+	    append_command(*cmdlinep);
 	}
 	emsg(errormsg);
     }
@@ -2781,6 +2813,42 @@
 }
 
 /*
+ * Append "cmd" to the error message in IObuff.
+ * Takes care of limiting the length and handling 0xa0, which would be
+ * invisible otherwise.
+ */
+    static void
+append_command(cmd)
+    char_u *cmd;
+{
+    char_u *s = cmd;
+    char_u *d;
+
+    STRCAT(IObuff, ": ");
+    d = IObuff + STRLEN(IObuff);
+    while (*s != NUL && d - IObuff < IOSIZE - 7)
+    {
+	if (
+#ifdef FEAT_MBYTE
+		enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) :
+#endif
+		*s == 0xa0)
+	{
+	    s +=
+#ifdef FEAT_MBYTE
+		enc_utf8 ? 2 :
+#endif
+		1;
+	    STRCPY(d, "<a0>");
+	    d += 4;
+	}
+	else
+	    MB_COPY_CHAR(s, d);
+    }
+    *d = NUL;
+}
+
+/*
  * Find an Ex command by its name, either built-in or user.
  * Start of the name can be found at eap->cmd.
  * Returns pointer to char after the command name.
@@ -2871,8 +2939,10 @@
 	    }
 
 #ifdef FEAT_USR_CMDS
-	/* Look for a user defined command as a last resort */
-	if (eap->cmdidx == CMD_SIZE && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
+	/* Look for a user defined command as a last resort.  Let ":Print" be
+	 * overruled by a user defined command. */
+	if ((eap->cmdidx == CMD_SIZE || eap->cmdidx == CMD_Print)
+		&& *eap->cmd >= 'A' && *eap->cmd <= 'Z')
 	{
 	    /* User defined commands may contain digits. */
 	    while (ASCII_ISALNUM(*p))
@@ -3050,7 +3120,7 @@
 	for (j = 0; p[j] != NUL; ++j)
 	    if (p[j] != cmdmods[i].name[j])
 		break;
-	if (!isalpha(p[j]) && j >= cmdmods[i].minlen
+	if (!ASCII_ISALPHA(p[j]) && j >= cmdmods[i].minlen
 					&& (p == cmd || cmdmods[i].has_count))
 	    return j + (int)(p - cmd);
     }
@@ -3182,6 +3252,9 @@
 	/* check for non-alpha command */
 	if (p == cmd && vim_strchr((char_u *)"@*!=><&~#", *p) != NULL)
 	    ++p;
+	/* for python 3.x: ":py3*" commands completion */
+	if (cmd[0] == 'p' && cmd[1] == 'y' && p == cmd + 2 && *p == '3')
+	    ++p;
 	len = (int)(p - cmd);
 
 	if (len == 0)
@@ -3341,12 +3414,23 @@
 	return NULL;
 
     /* Find start of last argument (argument just before cursor): */
-    p = buff + STRLEN(buff);
-    while (p != arg && *p != ' ' && *p != TAB)
-	p--;
-    if (*p == ' ' || *p == TAB)
-	p++;
+    p = buff;
     xp->xp_pattern = p;
+    len = (int)STRLEN(buff);
+    while (*p && p < buff + len)
+    {
+	if (*p == ' ' || *p == TAB)
+	{
+	    /* argument starts after a space */
+	    xp->xp_pattern = ++p;
+	}
+	else
+	{
+	    if (*p == '\\' && *(p + 1) != NUL)
+		++p; /* skip over escaped character */
+	    mb_ptr_adv(p);
+	}
+    }
 
     if (ea.argt & XFILE)
     {
@@ -3455,6 +3539,23 @@
 #endif
 	    }
 	}
+#if defined(FEAT_CMDL_COMPL)
+	/* Check for user names */
+	if (*xp->xp_pattern == '~')
+	{
+	    for (p = xp->xp_pattern + 1; *p != NUL && *p != '/'; ++p)
+		;
+	    /* Complete ~user only if it partially matches a user name.
+	     * A full match ~user<Tab> will be replaced by user's home
+	     * directory i.e. something like ~user<Tab> -> /home/user/ */
+	    if (*p == NUL && p > xp->xp_pattern + 1
+				       && match_user(xp->xp_pattern + 1) == 1)
+	    {
+		xp->xp_context = EXPAND_USER;
+		++xp->xp_pattern;
+	    }
+	}
+#endif
     }
 
 /*
@@ -3465,7 +3566,8 @@
 	case CMD_find:
 	case CMD_sfind:
 	case CMD_tabfind:
-	    xp->xp_context = EXPAND_FILES_IN_PATH;
+	    if (xp->xp_context == EXPAND_FILES)
+		xp->xp_context = EXPAND_FILES_IN_PATH;
 	    break;
 	case CMD_cd:
 	case CMD_chdir:
@@ -3501,6 +3603,7 @@
 	case CMD_sandbox:
 	case CMD_silent:
 	case CMD_tab:
+	case CMD_tabdo:
 	case CMD_topleft:
 	case CMD_verbose:
 	case CMD_vertical:
@@ -3771,8 +3874,17 @@
 		    if (compl == EXPAND_MAPPINGS)
 			return set_context_in_map_cmd(xp, (char_u *)"map",
 					 arg, forceit, FALSE, FALSE, CMD_map);
-		    while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
-			arg = xp->xp_pattern + 1;
+		    /* Find start of last argument. */
+		    p = arg;
+		    while (*p)
+		    {
+			if (*p == ' ')
+			    /* argument starts after a space */
+			    arg = p + 1;
+			else if (*p == '\\' && *(p + 1) != NUL)
+			    ++p; /* skip over escaped character */
+			mb_ptr_adv(p);
+		    }
 		    xp->xp_pattern = arg;
 		}
 		xp->xp_context = compl;
@@ -3786,6 +3898,8 @@
 	case CMD_imap:	    case CMD_inoremap:
 	case CMD_cmap:	    case CMD_cnoremap:
 	case CMD_lmap:	    case CMD_lnoremap:
+	case CMD_smap:	    case CMD_snoremap:
+	case CMD_xmap:	    case CMD_xnoremap:
 	    return set_context_in_map_cmd(xp, cmd, arg, forceit,
 						     FALSE, FALSE, ea.cmdidx);
 	case CMD_unmap:
@@ -3795,6 +3909,8 @@
 	case CMD_iunmap:
 	case CMD_cunmap:
 	case CMD_lunmap:
+	case CMD_sunmap:
+	case CMD_xunmap:
 	    return set_context_in_map_cmd(xp, cmd, arg, forceit,
 						      FALSE, TRUE, ea.cmdidx);
 	case CMD_abbreviate:	case CMD_noreabbrev:
@@ -3843,13 +3959,24 @@
 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
 	case CMD_language:
-	    if (*skiptowhite(arg) == NUL)
+	    p = skiptowhite(arg);
+	    if (*p == NUL)
 	    {
 		xp->xp_context = EXPAND_LANGUAGE;
 		xp->xp_pattern = arg;
 	    }
 	    else
-		xp->xp_context = EXPAND_NOTHING;
+	    {
+		if ( STRNCMP(arg, "messages", p - arg) == 0
+		  || STRNCMP(arg, "ctype", p - arg) == 0
+		  || STRNCMP(arg, "time", p - arg) == 0)
+		{
+		    xp->xp_context = EXPAND_LOCALES;
+		    xp->xp_pattern = skipwhite(p);
+		}
+		else
+		    xp->xp_context = EXPAND_NOTHING;
+	    }
 	    break;
 #endif
 #if defined(FEAT_PROFILE)
@@ -3859,8 +3986,22 @@
 #endif
 	case CMD_behave:
 	    xp->xp_context = EXPAND_BEHAVE;
+	    xp->xp_pattern = arg;
 	    break;
 
+#if defined(FEAT_CMDHIST)
+	case CMD_history:
+	    xp->xp_context = EXPAND_HISTORY;
+	    xp->xp_pattern = arg;
+	    break;
+#endif
+#if defined(FEAT_PROFILE)
+	case CMD_syntime:
+	    xp->xp_context = EXPAND_SYNTIME;
+	    xp->xp_pattern = arg;
+	    break;
+#endif
+
 #endif /* FEAT_CMDL_COMPL */
 
 	default:
@@ -4520,12 +4661,14 @@
 		else /* n == 2 */
 		{
 		    expand_T	xpc;
+		    int		options = WILD_LIST_NOTFOUND|WILD_ADD_SLASH;
 
 		    ExpandInit(&xpc);
 		    xpc.xp_context = EXPAND_FILES;
+		    if (p_wic)
+			options += WILD_ICASE;
 		    p = ExpandOne(&xpc, eap->arg, NULL,
-					    WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
-						   WILD_EXPAND_FREE);
+						   options, WILD_EXPAND_FREE);
 		    if (p == NULL)
 			return FAIL;
 		}
@@ -4777,12 +4920,10 @@
 #ifdef FEAT_MBYTE
     else if (STRNCMP(arg, "enc", 3) == 0)
     {
-	arg += 3;
-	pp = &eap->force_enc;
-    }
-    else if (STRNCMP(arg, "encoding", 8) == 0)
-    {
-	arg += 8;
+	if (STRNCMP(arg, "encoding", 8) == 0)
+	    arg += 8;
+	else
+	    arg += 3;
 	pp = &eap->force_enc;
     }
     else if (STRNCMP(arg, "bad", 3) == 0)
@@ -4894,7 +5035,7 @@
     map_clear(eap->cmd, eap->arg, TRUE, TRUE);
 }
 
-#ifdef FEAT_AUTOCMD
+#if defined(FEAT_AUTOCMD) || defined(PROTO)
     static void
 ex_autocmd(eap)
     exarg_T	*eap;
@@ -4921,8 +5062,12 @@
 ex_doautocmd(eap)
     exarg_T	*eap;
 {
-    (void)do_doautocmd(eap->arg, TRUE);
-    do_modelines(0);
+    char_u	*arg = eap->arg;
+    int		call_do_modelines = check_nomodeline(&arg);
+
+    (void)do_doautocmd(arg, TRUE);
+    if (call_do_modelines)  /* Only when there is no <nomodeline>. */
+	do_modelines(0);
 }
 #endif
 
@@ -5087,12 +5232,14 @@
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
 	    if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
 	    {
-		char_u	buff[IOSIZE];
+		char_u	buff[DIALOG_MSG_SIZE];
 
 		if (n == 1)
-		    STRCPY(buff, _("1 more file to edit.  Quit anyway?"));
+		    vim_strncpy(buff,
+			    (char_u *)_("1 more file to edit.  Quit anyway?"),
+							 DIALOG_MSG_SIZE - 1);
 		else
-		    vim_snprintf((char *)buff, IOSIZE,
+		    vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
 			      _("%d more files to edit.  Quit anyway?"), n);
 		if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
 		    return OK;
@@ -5250,7 +5397,9 @@
 #endif
     return FAIL;
 }
+#endif
 
+#if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
 /*
  * List of names for completion for ":command" with the EXPAND_ flag.
  * Must be alphabetical for completion.
@@ -5262,8 +5411,11 @@
 } command_complete[] =
 {
     {EXPAND_AUGROUP, "augroup"},
+    {EXPAND_BEHAVE, "behave"},
     {EXPAND_BUFFERS, "buffer"},
+    {EXPAND_COLORS, "color"},
     {EXPAND_COMMANDS, "command"},
+    {EXPAND_COMPILER, "compiler"},
 #if defined(FEAT_CSCOPE)
     {EXPAND_CSCOPE, "cscope"},
 #endif
@@ -5276,13 +5428,24 @@
     {EXPAND_EVENTS, "event"},
     {EXPAND_EXPRESSION, "expression"},
     {EXPAND_FILES, "file"},
+    {EXPAND_FILES_IN_PATH, "file_in_path"},
     {EXPAND_FILETYPE, "filetype"},
     {EXPAND_FUNCTIONS, "function"},
     {EXPAND_HELP, "help"},
     {EXPAND_HIGHLIGHT, "highlight"},
+#if defined(FEAT_CMDHIST)
+    {EXPAND_HISTORY, "history"},
+#endif
+#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+    {EXPAND_LOCALES, "locale"},
+#endif
     {EXPAND_MAPPINGS, "mapping"},
     {EXPAND_MENUS, "menu"},
     {EXPAND_OWNSYNTAX, "syntax"},
+#if defined(FEAT_PROFILE)
+    {EXPAND_SYNTIME, "syntime"},
+#endif
     {EXPAND_SETTINGS, "option"},
     {EXPAND_SHELLCMD, "shellcmd"},
 #if defined(FEAT_SIGNS)
@@ -5290,10 +5453,13 @@
 #endif
     {EXPAND_TAGS, "tag"},
     {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
+    {EXPAND_USER, "user"},
     {EXPAND_USER_VARS, "var"},
     {0, NULL}
 };
+#endif
 
+#if defined(FEAT_USR_CMDS) || defined(PROTO)
     static void
 uc_list(name, name_len)
     char_u	*name;
@@ -5587,6 +5753,7 @@
     int	    compl = EXPAND_NOTHING;
     char_u  *compl_arg = NULL;
     int	    has_attr = (eap->arg[0] == '-');
+    int	    name_len;
 
     p = eap->arg;
 
@@ -5612,6 +5779,7 @@
 	return;
     }
     end = p;
+    name_len = (int)(end - name);
 
     /* If there is nothing after the name, and no attributes were specified,
      * we are listing commands
@@ -5626,6 +5794,13 @@
 	EMSG(_("E183: User defined commands must start with an uppercase letter"));
 	return;
     }
+    else if ((name_len == 1 && *name == 'X')
+	  || (name_len <= 4
+		  && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
+    {
+	EMSG(_("E841: Reserved name, cannot be used for user defined command"));
+	return;
+    }
     else
 	uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
 								eap->forceit);
@@ -5750,8 +5925,14 @@
 	}
 	else
 	{
+#ifdef FEAT_MBYTE
+	    int charlen = (*mb_ptr2len)(p);
+	    len += charlen;
+	    p += charlen;
+#else
 	    ++len;
 	    ++p;
+#endif
 	}
     }
 
@@ -5794,7 +5975,7 @@
 	}
 	else
 	{
-	    *q++ = *p++;
+	    MB_COPY_CHAR(p, q);
 	}
     }
     *q++ = '"';
@@ -5888,7 +6069,14 @@
 	    result = STRLEN(eap->arg) + 2;
 	    for (p = eap->arg; *p; ++p)
 	    {
-		if (*p == '\\' || *p == '"')
+#ifdef  FEAT_MBYTE
+		if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
+		    /* DBCS can contain \ in a trail byte, skip the
+		     * double-byte character. */
+		    ++p;
+		else
+#endif
+		     if (*p == '\\' || *p == '"')
 		    ++result;
 	    }
 
@@ -5897,7 +6085,14 @@
 		*buf++ = '"';
 		for (p = eap->arg; *p; ++p)
 		{
-		    if (*p == '\\' || *p == '"')
+#ifdef  FEAT_MBYTE
+		    if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
+			/* DBCS can contain \ in a trail byte, copy the
+			 * double-byte character to avoid escaping. */
+			*buf++ = *p++;
+		    else
+#endif
+			 if (*p == '\\' || *p == '"')
 			*buf++ = '\\';
 		    *buf++ = *p;
 		}
@@ -6039,15 +6234,17 @@
 		end = vim_strchr(start + 1, '>');
 	    if (buf != NULL)
 	    {
-		ksp = vim_strchr(p, K_SPECIAL);
-		if (ksp != NULL && (start == NULL || ksp < start || end == NULL)
+		for (ksp = p; *ksp != NUL && *ksp != K_SPECIAL; ++ksp)
+		    ;
+		if (*ksp == K_SPECIAL
+			&& (start == NULL || ksp < start || end == NULL)
 			&& ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
 # ifdef FEAT_GUI
 			    || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
 # endif
 			    ))
 		{
-		    /* K_SPECIAL han been put in the buffer as K_SPECIAL
+		    /* K_SPECIAL has been put in the buffer as K_SPECIAL
 		     * KS_SPECIAL KE_FILLER, like for mappings, but
 		     * do_cmdline() doesn't handle that, so convert it back.
 		     * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
@@ -6207,10 +6404,12 @@
     int		vallen;
     int		*complp;
     long	*argt;
-    char_u	**compl_arg;
+    char_u	**compl_arg UNUSED;
 {
     char_u	*arg = NULL;
+# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
     size_t	arglen = 0;
+# endif
     int		i;
     int		valend = vallen;
 
@@ -6220,7 +6419,9 @@
 	if (value[i] == ',')
 	{
 	    arg = &value[i + 1];
+# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
 	    arglen = vallen - i - 1;
+# endif
 	    valend = i;
 	    break;
 	}
@@ -6302,7 +6503,7 @@
 #endif
     }
     else if (load_colors(eap->arg) == FAIL)
-	EMSG2(_("E185: Cannot find color scheme %s"), eap->arg);
+	EMSG2(_("E185: Cannot find color scheme '%s'"), eap->arg);
 }
 
     static void
@@ -6347,7 +6548,10 @@
 	return;
     }
 #ifdef FEAT_AUTOCMD
-    if (curbuf_locked())
+    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+    /* Refuse to quit when locked or when the buffer in the last window is
+     * being closed (can only happen in autocommands). */
+    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
 	return;
 #endif
 
@@ -6419,7 +6623,10 @@
 	return;
     }
 #ifdef FEAT_AUTOCMD
-    if (curbuf_locked())
+    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+    /* Refuse to quit when locked or when the buffer in the last window is
+     * being closed (can only happen in autocommands). */
+    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
 	return;
 #endif
 
@@ -6439,7 +6646,7 @@
 {
 # ifdef FEAT_CMDWIN
     if (cmdwin_type != 0)
-	cmdwin_result = K_IGNORE;
+	cmdwin_result = Ctrl_C;
     else
 # endif
 	if (!text_locked()
@@ -6755,7 +6962,10 @@
 	return;
     }
 #ifdef FEAT_AUTOCMD
-    if (curbuf_locked())
+    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
+    /* Refuse to quit when locked or when the buffer in the last window is
+     * being closed (can only happen in autocommands). */
+    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
 	return;
 #endif
 
@@ -6897,9 +7107,7 @@
 # ifdef FEAT_WINDOWS
 	if (win_split(0, 0) == FAIL)
 	    return;
-#  ifdef FEAT_SCROLLBIND
-	curwin->w_p_scb = FALSE;
-#  endif
+	RESET_BINDING(curwin);
 
 	/* When splitting the window, create a new alist.  Otherwise the
 	 * existing one is overwritten. */
@@ -7026,7 +7234,7 @@
 	old_arg_count = GARGCOUNT;
 	if (expand_wildcards(old_arg_count, old_arg_files,
 		    &new_arg_file_count, &new_arg_files,
-		    EW_FILE|EW_NOTFOUND|EW_ADDSLASH) == OK
+		    EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
 		&& new_arg_file_count > 0)
 	{
 	    alist_set(&global_alist, new_arg_file_count, new_arg_files,
@@ -7299,7 +7507,9 @@
 		|| cmdmod.browse
 #  endif
 	   )
-	    curwin->w_p_scb = FALSE;
+	{
+	    RESET_BINDING(curwin);
+	}
 	else
 	    do_check_scrollbind(FALSE);
 # endif
@@ -7364,7 +7574,42 @@
 ex_tabmove(eap)
     exarg_T	*eap;
 {
-    tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2);
+    int tab_number = 9999;
+
+    if (eap->arg && *eap->arg != NUL)
+    {
+	char_u *p = eap->arg;
+	int    relative = 0; /* argument +N/-N means: move N places to the
+			      * right/left relative to the current position. */
+
+	if (*eap->arg == '-')
+	{
+	    relative = -1;
+	    p = eap->arg + 1;
+	}
+	else if (*eap->arg == '+')
+	{
+	    relative = 1;
+	    p = eap->arg + 1;
+	}
+	else
+	    p = eap->arg;
+
+	if (p == skipdigits(p))
+	{
+	    /* No numbers as argument. */
+	    eap->errmsg = e_invarg;
+	    return;
+	}
+
+	tab_number = getdigits(&p);
+	if (relative != 0)
+	    tab_number = tab_number * relative + tabpage_index(curtab) - 1;;
+    }
+    else if (eap->addr_count != 0)
+	tab_number = eap->line2;
+
+    tabpage_move(tab_number);
 }
 
 /*
@@ -7400,7 +7645,7 @@
 	    msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
 	    msg_putchar(' ');
 	    if (buf_spname(wp->w_buffer) != NULL)
-		STRCPY(IObuff, buf_spname(wp->w_buffer));
+		vim_strncpy(IObuff, buf_spname(wp->w_buffer), IOSIZE - 1);
 	    else
 		home_replace(wp->w_buffer, wp->w_buffer->b_fname,
 							IObuff, IOSIZE, TRUE);
@@ -7535,7 +7780,7 @@
 		curwin->w_cursor.col = (colnr_T)(regmatch.startp[0] - p);
 	    else
 		EMSG(_(e_nomatch));
-	    vim_free(regmatch.regprog);
+	    vim_regfree(regmatch.regprog);
 	}
 	/* Move to the NUL, ignore any other arguments. */
 	eap->arg += STRLEN(eap->arg);
@@ -7953,6 +8198,37 @@
 }
 #endif
 
+/*
+ * Deal with the side effects of changing the current directory.
+ * When "local" is TRUE then this was after an ":lcd" command.
+ */
+    void
+post_chdir(local)
+    int		local;
+{
+    vim_free(curwin->w_localdir);
+    if (local)
+    {
+	/* If still in global directory, need to remember current
+	 * directory as global directory. */
+	if (globaldir == NULL && prev_dir != NULL)
+	    globaldir = vim_strsave(prev_dir);
+	/* Remember this local directory for the window. */
+	if (mch_dirname(NameBuff, MAXPATHL) == OK)
+	    curwin->w_localdir = vim_strsave(NameBuff);
+    }
+    else
+    {
+	/* We are now in the global directory, no need to remember its
+	 * name. */
+	vim_free(globaldir);
+	globaldir = NULL;
+	curwin->w_localdir = NULL;
+    }
+
+    shorten_fnames(TRUE);
+}
+
 
 /*
  * ":cd", ":lcd", ":chdir" and ":lchdir".
@@ -8024,27 +8300,7 @@
 	    EMSG(_(e_failed));
 	else
 	{
-	    vim_free(curwin->w_localdir);
-	    if (eap->cmdidx == CMD_lcd || eap->cmdidx == CMD_lchdir)
-	    {
-		/* If still in global directory, need to remember current
-		 * directory as global directory. */
-		if (globaldir == NULL && prev_dir != NULL)
-		    globaldir = vim_strsave(prev_dir);
-		/* Remember this local directory for the window. */
-		if (mch_dirname(NameBuff, MAXPATHL) == OK)
-		    curwin->w_localdir = vim_strsave(NameBuff);
-	    }
-	    else
-	    {
-		/* We are now in the global directory, no need to remember its
-		 * name. */
-		vim_free(globaldir);
-		globaldir = NULL;
-		curwin->w_localdir = NULL;
-	    }
-
-	    shorten_fnames(TRUE);
+	    post_chdir(eap->cmdidx == CMD_lcd || eap->cmdidx == CMD_lchdir);
 
 	    /* Echo the new current directory if the command was typed. */
 	    if (KeyTyped || p_verbose >= 5)
@@ -8122,6 +8378,12 @@
     {
 	ui_delay(msec - done > 1000L ? 1000L : msec - done, TRUE);
 	ui_breakcheck();
+#ifdef FEAT_NETBEANS_INTG
+	/* Process the netbeans messages that may have been received in the
+	 * call to ui_breakcheck() when the GUI is in use. This may occur when
+	 * running a test case. */
+	netbeans_parse_messages();
+#endif
     }
 }
 
@@ -8193,7 +8455,7 @@
     p = skipwhite(p);
     if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
 	EMSG(_(e_invarg));
-    else
+    else if (!eap->skip)
     {
 	/* Pass flags on for ":vertical wincmd ]". */
 	postponed_split_flags = cmdmod.split;
@@ -8307,11 +8569,13 @@
 	    break;
 
 	default:    /* CMD_rshift or CMD_lshift */
-	    if ((eap->cmdidx == CMD_rshift)
+	    if (
 #ifdef FEAT_RIGHTLEFT
-				    ^ curwin->w_p_rl
+		(eap->cmdidx == CMD_rshift) ^ curwin->w_p_rl
+#else
+		eap->cmdidx == CMD_rshift
 #endif
-						    )
+						)
 		oa.op_type = OP_RSHIFT;
 	    else
 		oa.op_type = OP_LSHIFT;
@@ -8428,7 +8692,7 @@
 	}
 	++eap->line2;
     }
-    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE);
+    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE);
     beginline(BL_WHITE | BL_FIX);
     ex_may_print(eap);
 }
@@ -8907,35 +9171,42 @@
 		failed = TRUE;
 	    if (eap->cmdidx == CMD_mksession)
 	    {
-		char_u dirnow[MAXPATHL];	/* current directory */
+		char_u *dirnow;	 /* current directory */
 
-		/*
-		 * Change to session file's dir.
-		 */
-		if (mch_dirname(dirnow, MAXPATHL) == FAIL
-					    || mch_chdir((char *)dirnow) != 0)
-		    *dirnow = NUL;
-		if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
-		{
-		    if (vim_chdirfile(fname) == OK)
-			shorten_fnames(TRUE);
-		}
-		else if (*dirnow != NUL
-			&& (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+		dirnow = alloc(MAXPATHL);
+		if (dirnow == NULL)
+		    failed = TRUE;
+		else
 		{
-		    if (mch_chdir((char *)globaldir) == 0)
-			shorten_fnames(TRUE);
-		}
+		    /*
+		     * Change to session file's dir.
+		     */
+		    if (mch_dirname(dirnow, MAXPATHL) == FAIL
+					    || mch_chdir((char *)dirnow) != 0)
+			*dirnow = NUL;
+		    if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
+		    {
+			if (vim_chdirfile(fname) == OK)
+			    shorten_fnames(TRUE);
+		    }
+		    else if (*dirnow != NUL
+			   && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
+		    {
+			if (mch_chdir((char *)globaldir) == 0)
+			    shorten_fnames(TRUE);
+		    }
 
-		failed |= (makeopens(fd, dirnow) == FAIL);
+		    failed |= (makeopens(fd, dirnow) == FAIL);
 
-		/* restore original dir */
-		if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
+		    /* restore original dir */
+		    if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
 			|| ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
-		{
-		    if (mch_chdir((char *)dirnow) != 0)
-			EMSG(_(e_prev_dir));
-		    shorten_fnames(TRUE);
+		    {
+			if (mch_chdir((char *)dirnow) != 0)
+			    EMSG(_(e_prev_dir));
+			shorten_fnames(TRUE);
+		    }
+		    vim_free(dirnow);
 		}
 	    }
 	    else
@@ -8966,10 +9237,15 @@
 	else if (eap->cmdidx == CMD_mksession)
 	{
 	    /* successful session write - set this_session var */
-	    char_u	tbuf[MAXPATHL];
+	    char_u	*tbuf;
 
-	    if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
-		set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+	    tbuf = alloc(MAXPATHL);
+	    if (tbuf != NULL)
+	    {
+		if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
+		    set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
+		vim_free(tbuf);
+	    }
 	}
 #endif
 #ifdef MKSESSION_NL
@@ -9295,7 +9571,7 @@
 								  && !got_int)
     {
 	update_topline_cursor();
-	normal_cmd(&oa, FALSE);	/* execute a Normal mode cmd */
+	normal_cmd(&oa, TRUE);	/* execute a Normal mode cmd */
     }
 }
 #endif
@@ -9393,7 +9669,7 @@
 ex_ptag(eap)
     exarg_T	*eap;
 {
-    g_do_tagpreview = p_pvh;
+    g_do_tagpreview = p_pvh;  /* will be reset to 0 in ex_tag_cmd() */
     ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
 }
 
@@ -9525,17 +9801,23 @@
 #define SPEC_CFILE  4
 		    "<sfile>",		/* ":so" file name */
 #define SPEC_SFILE  5
+		    "<slnum>",		/* ":so" file line number */
+#define SPEC_SLNUM  6
 #ifdef FEAT_AUTOCMD
 		    "<afile>",		/* autocommand file name */
-# define SPEC_AFILE 6
+# define SPEC_AFILE 7
 		    "<abuf>",		/* autocommand buffer number */
-# define SPEC_ABUF  7
+# define SPEC_ABUF  8
 		    "<amatch>",		/* autocommand match name */
-# define SPEC_AMATCH 8
+# define SPEC_AMATCH 9
 #endif
 #ifdef FEAT_CLIENTSERVER
 		    "<client>"
-# define SPEC_CLIENT 9
+# ifdef FEAT_AUTOCMD
+#  define SPEC_CLIENT 10
+# else
+#  define SPEC_CLIENT 7
+# endif
 #endif
     };
 
@@ -9560,6 +9842,7 @@
  *	  '<cWORD>' to WORD under the cursor
  *	  '<cfile>' to path name under the cursor
  *	  '<sfile>' to sourced file name
+ *	  '<slnum>' to sourced file line number
  *	  '<afile>' to file name for autocommand
  *	  '<abuf>'  to buffer number for autocommand
  *	  '<amatch>' to matching name for autocommand
@@ -9591,10 +9874,7 @@
 #ifdef FEAT_MODIFY_FNAME
     int		skip_mod = FALSE;
 #endif
-
-#if defined(FEAT_AUTOCMD) || defined(FEAT_CLIENTSERVER)
     char_u	strbuf[30];
-#endif
 
     *errormsg = NULL;
     if (escaped != NULL)
@@ -9653,14 +9933,7 @@
 		    valid = 0;	    /* Must have ":p:h" to be valid */
 		}
 		else
-#ifdef RISCOS
-		    /* Always use the full path for RISC OS if possible. */
-		    result = curbuf->b_ffname;
-		    if (result == NULL)
-			result = curbuf->b_fname;
-#else
 		    result = curbuf->b_fname;
-#endif
 		break;
 
 	case SPEC_HASH:		/* '#' or "#99": alternate file */
@@ -9783,6 +10056,15 @@
 		    return NULL;
 		}
 		break;
+	case SPEC_SLNUM:	/* line in file for ":so" command */
+		if (sourcing_name == NULL || sourcing_lnum == 0)
+		{
+		    *errormsg = (char_u *)_("E842: no line number to use for \"<slnum>\"");
+		    return NULL;
+		}
+		sprintf((char *)strbuf, "%ld", (long)sourcing_lnum);
+		result = strbuf;
+		break;
 #if defined(FEAT_CLIENTSERVER)
 	case SPEC_CLIENT:	/* Source of last submitted input */
 		sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
@@ -9796,11 +10078,7 @@
 	if (src[*usedlen] == '<')	/* remove the file name extension */
 	{
 	    ++*usedlen;
-#ifdef RISCOS
-	    if ((s = vim_strrchr(result, '/')) != NULL && s >= gettail(result))
-#else
 	    if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
-#endif
 		resultlen = (int)(s - result);
 	}
 #ifdef FEAT_MODIFY_FNAME
@@ -10593,24 +10871,24 @@
 	    {
 		if (fprintf(fd,
 			  "let s:c = %ld - ((%ld * winwidth(0) + %ld) / %ld)",
-			    (long)wp->w_cursor.col,
-			    (long)(wp->w_cursor.col - wp->w_leftcol),
+			    (long)wp->w_virtcol + 1,
+			    (long)(wp->w_virtcol - wp->w_leftcol),
 			    (long)wp->w_width / 2, (long)wp->w_width) < 0
 			|| put_eol(fd) == FAIL
 			|| put_line(fd, "if s:c > 0") == FAIL
 			|| fprintf(fd,
-			    "  exe 'normal! 0' . s:c . 'lzs' . (%ld - s:c) . 'l'",
-			    (long)wp->w_cursor.col) < 0
+			    "  exe 'normal! ' . s:c . '|zs' . %ld . '|'",
+			    (long)wp->w_virtcol + 1) < 0
 			|| put_eol(fd) == FAIL
 			|| put_line(fd, "else") == FAIL
-			|| fprintf(fd, "  normal! 0%dl", wp->w_cursor.col) < 0
+			|| fprintf(fd, "  normal! 0%d|", wp->w_virtcol + 1) < 0
 			|| put_eol(fd) == FAIL
 			|| put_line(fd, "endif") == FAIL)
 		    return FAIL;
 	    }
 	    else
 	    {
-		if (fprintf(fd, "normal! 0%dl", wp->w_cursor.col) < 0
+		if (fprintf(fd, "normal! 0%d|", wp->w_virtcol + 1) < 0
 			|| put_eol(fd) == FAIL)
 		    return FAIL;
 	    }
@@ -10645,7 +10923,7 @@
     unsigned	*flagp;
 {
     int		i;
-    char_u	buf[MAXPATHL];
+    char_u	*buf = NULL;
     char_u	*s;
 
     if (gap->ga_len == 0)
@@ -10660,11 +10938,19 @@
 	{
 	    if (fullname)
 	    {
-		(void)vim_FullName(s, buf, MAXPATHL, FALSE);
-		s = buf;
+		buf = alloc(MAXPATHL);
+		if (buf != NULL)
+		{
+		    (void)vim_FullName(s, buf, MAXPATHL, FALSE);
+		    s = buf;
+		}
 	    }
 	    if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
+	    {
+		vim_free(buf);
 		return FAIL;
+	    }
+	    vim_free(buf);
 	}
     }
     return put_eol(fd);
@@ -10707,7 +10993,7 @@
  * Write a file name to the session file.
  * Takes care of the "slash" option in 'sessionoptions' and escapes special
  * characters.
- * Returns FAIL if writing fails.
+ * Returns FAIL if writing fails or out of memory.
  */
     static int
 ses_put_fname(fd, name, flagp)
@@ -10716,49 +11002,32 @@
     unsigned	*flagp;
 {
     char_u	*sname;
+    char_u	*p;
     int		retval = OK;
-    int		c;
 
     sname = home_replace_save(NULL, name);
-    if (sname != NULL)
-	name = sname;
-    while (*name != NUL)
-    {
-#ifdef FEAT_MBYTE
-	{
-	    int l;
+    if (sname == NULL)
+	return FAIL;
 
-	    if (has_mbyte && (l = (*mb_ptr2len)(name)) > 1)
-	    {
-		/* copy a multibyte char */
-		while (--l >= 0)
-		{
-		    if (putc(*name, fd) != *name)
-			retval = FAIL;
-		    ++name;
-		}
-		continue;
-	    }
-	}
-#endif
-	c = *name++;
-	if (c == '\\' && (*flagp & SSOP_SLASH))
-	    /* change a backslash to a forward slash */
-	    c = '/';
-	else if ((vim_strchr(escape_chars, c) != NULL
-#ifdef BACKSLASH_IN_FILENAME
-		    && c != '\\'
-#endif
-		 ) || c == '#' || c == '%')
-	{
-	    /* escape a special character with a backslash */
-	    if (putc('\\', fd) != '\\')
-		retval = FAIL;
-	}
-	if (putc(c, fd) != c)
-	    retval = FAIL;
+    if (*flagp & SSOP_SLASH)
+    {
+	/* change all backslashes to forward slashes */
+	for (p = sname; *p != NUL; mb_ptr_adv(p))
+	    if (*p == '\\')
+		*p = '/';
     }
+
+    /* escape special characters */
+    p = vim_strsave_fnameescape(sname, FALSE);
     vim_free(sname);
+    if (p == NULL)
+	return FAIL;
+
+    /* write the result */
+    if (fputs((char *)p, fd) < 0)
+	retval = FAIL;
+
+    vim_free(p);
     return retval;
 }
 
@@ -10826,8 +11095,7 @@
 	    else if (vim_ispathsep(*p))
 	    {
 		*s++ = '=';
-#if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(RISCOS) \
-	|| defined(VMS)
+#if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS)
 		if (*p == ':')
 		    *s++ = '-';
 		else
@@ -10910,7 +11178,7 @@
 
 #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
 /*
- * Make a dialog message in "buff[IOSIZE]".
+ * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
  * "format" must contain "%s".
  */
     void
@@ -10921,7 +11189,7 @@
 {
     if (fname == NULL)
 	fname = (char_u *)_("Untitled");
-    vim_snprintf((char *)buff, IOSIZE, format, fname);
+    vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
 }
 #endif
 
diff -Naur vim73.orig/src/ex_eval.c vim73/src/ex_eval.c
--- vim73.orig/src/ex_eval.c	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/ex_eval.c	2013-08-04 19:09:10.233944992 +0000
@@ -44,7 +44,7 @@
  * executed.  Otherwise, errors and/or interrupts are converted into catchable
  * exceptions (did_throw additionally set), which terminate the script only if
  * not caught.  For user exceptions, only did_throw is set.  (Note: got_int can
- * be set asyncronously afterwards by a SIGINT, so did_throw && got_int is not
+ * be set asynchronously afterwards by a SIGINT, so did_throw && got_int is not
  * a reliant test that the exception currently being thrown is an interrupt
  * exception.  Similarly, did_emsg can be set afterwards on an error in an
  * (unskipped) conditional command inside an inactive conditional, so did_throw
@@ -1576,7 +1576,7 @@
 		    caught = vim_regexec_nl(&regmatch, current_exception->value,
 			    (colnr_T)0);
 		    got_int |= prev_got_int;
-		    vim_free(regmatch.regprog);
+		    vim_regfree(regmatch.regprog);
 		}
 	    }
 	}
@@ -2091,11 +2091,11 @@
  * Values used for "searched_cond" are (CSF_WHILE | CSF_FOR) or CSF_TRY or 0,
  * the latter meaning the innermost try conditional not in its finally clause.
  * "inclusive" tells whether the conditional searched for should be made
- * inactive itself (a try conditional not in its finally claused possibly find
+ * inactive itself (a try conditional not in its finally clause possibly find
  * before is always made inactive).  If "inclusive" is TRUE and
  * "searched_cond" is CSF_TRY|CSF_SILENT, the saved former value of
  * "emsg_silent", if reset when the try conditional finally reached was
- * entered, is restored (unsed by ex_endtry()).  This is normally done only
+ * entered, is restored (used by ex_endtry()).  This is normally done only
  * when such a try conditional is left.
  */
     int
diff -Naur vim73.orig/src/ex_getln.c vim73/src/ex_getln.c
--- vim73.orig/src/ex_getln.c	2010-08-14 15:25:45.000000000 +0000
+++ vim73/src/ex_getln.c	2013-08-04 19:09:10.243944962 +0000
@@ -25,7 +25,7 @@
     int		cmdlen;		/* number of chars in command line */
     int		cmdpos;		/* current cursor position */
     int		cmdspos;	/* cursor column on screen */
-    int		cmdfirstc;	/* ':', '/', '?', '=' or NUL */
+    int		cmdfirstc;	/* ':', '/', '?', '=', '>' or NUL */
     int		cmdindent;	/* number of spaces before cmdline */
     char_u	*cmdprompt;	/* message in front of cmdline */
     int		cmdattr;	/* attributes for prompt */
@@ -56,6 +56,7 @@
 typedef struct hist_entry
 {
     int		hisnum;		/* identifying number */
+    int		viminfo;	/* when TRUE hisstr comes from viminfo */
     char_u	*hisstr;	/* actual entry, separator char after the NUL */
 } histentry_T;
 
@@ -67,7 +68,7 @@
 
 static int	hist_char2type __ARGS((int c));
 
-static int	in_history __ARGS((int, char_u *, int));
+static int	in_history __ARGS((int, char_u *, int, int, int));
 # ifdef FEAT_EVAL
 static int	calc_hist_idx __ARGS((int histype, int num));
 # endif
@@ -102,7 +103,7 @@
 static void	redrawcmdprompt __ARGS((void));
 static void	cursorcmd __ARGS((void));
 static int	ccheck_abbr __ARGS((int));
-static int	nextwild __ARGS((expand_T *xp, int type, int options));
+static int	nextwild __ARGS((expand_T *xp, int type, int options, int escape));
 static void	escape_fname __ARGS((char_u **pp));
 static int	showmatches __ARGS((expand_T *xp, int wildmenu));
 static void	set_expand_context __ARGS((expand_T *xp));
@@ -110,17 +111,31 @@
 static int	expand_showtail __ARGS((expand_T *xp));
 #ifdef FEAT_CMDL_COMPL
 static int	expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
-static int	ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
+static int	ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
+# ifdef FEAT_CMDHIST
+static char_u	*get_history_arg __ARGS((expand_T *xp, int idx));
+# endif
 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
 static int	ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
 static int	ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
 # endif
 #endif
+#ifdef FEAT_CMDHIST
+static void	clear_hist_entry __ARGS((histentry_T *hisptr));
+#endif
 
 #ifdef FEAT_CMDWIN
 static int	ex_window __ARGS((void));
 #endif
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+static int
+#ifdef __BORLANDC__
+_RTLENTRYF
+#endif
+sort_func_compare __ARGS((const void *s1, const void *s2));
+#endif
+
 /*
  * getcmdline() - accept a command line starting with firstc.
  *
@@ -637,7 +652,11 @@
 		}
 		else if (ccline.cmdpos > i)
 		    cmdline_del(i);
+
+		/* Now complete in the new directory. Set KeyTyped in case the
+		 * Up key came from a mapping. */
 		c = p_wc;
+		KeyTyped = TRUE;
 	    }
 	}
 
@@ -652,9 +671,10 @@
 	    c = plain_vgetc();
 	    --no_mapping;
 	    --allow_keys;
-	    /* CTRL-\ e doesn't work when obtaining an expression. */
-	    if (c != Ctrl_N && c != Ctrl_G
-				     && (c != 'e' || ccline.cmdfirstc == '='))
+	    /* CTRL-\ e doesn't work when obtaining an expression, unless it
+	     * is in a mapping. */
+	    if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
+				    || (ccline.cmdfirstc == '=' && KeyTyped)))
 	    {
 		vungetc(c);
 		c = Ctrl_BSL;
@@ -688,28 +708,35 @@
 		    p = get_expr_line();
 		    --textlock;
 		    restore_cmdline(&save_ccline);
-		    len = (int)STRLEN(p);
 
-		    if (p != NULL && realloc_cmdbuff(len + 1) == OK)
+		    if (p != NULL)
 		    {
-			ccline.cmdlen = len;
-			STRCPY(ccline.cmdbuff, p);
-			vim_free(p);
-
-			/* Restore the cursor or use the position set with
-			 * set_cmdline_pos(). */
-			if (new_cmdpos > ccline.cmdlen)
-			    ccline.cmdpos = ccline.cmdlen;
-			else
-			    ccline.cmdpos = new_cmdpos;
-
-			KeyTyped = FALSE;	/* Don't do p_wc completion. */
-			redrawcmd();
-			goto cmdline_changed;
+			len = (int)STRLEN(p);
+			if (realloc_cmdbuff(len + 1) == OK)
+			{
+			    ccline.cmdlen = len;
+			    STRCPY(ccline.cmdbuff, p);
+			    vim_free(p);
+
+			    /* Restore the cursor or use the position set with
+			     * set_cmdline_pos(). */
+			    if (new_cmdpos > ccline.cmdlen)
+				ccline.cmdpos = ccline.cmdlen;
+			    else
+				ccline.cmdpos = new_cmdpos;
+
+			    KeyTyped = FALSE;	/* Don't do p_wc completion. */
+			    redrawcmd();
+			    goto cmdline_changed;
+			}
 		    }
 		}
 		beep_flush();
-		c = ESC;
+		got_int = FALSE;	/* don't abandon the command line */
+		did_emsg = FALSE;
+		emsg_on_display = FALSE;
+		redrawcmd();
+		goto cmdline_not_changed;
 	    }
 #endif
 	    else
@@ -787,9 +814,11 @@
 		    did_wild_list = TRUE;
 		}
 		if (wim_flags[wim_index] & WIM_LONGEST)
-		    res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
+		    res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
+							       firstc != '@');
 		else if (wim_flags[wim_index] & WIM_FULL)
-		    res = nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP);
+		    res = nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
+							       firstc != '@');
 		else
 		    res = OK;	    /* don't insert 'wildchar' now */
 	    }
@@ -800,9 +829,11 @@
 		/* if 'wildmode' first contains "longest", get longest
 		 * common part */
 		if (wim_flags[0] & WIM_LONGEST)
-		    res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
+		    res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
+							       firstc != '@');
 		else
-		    res = nextwild(&xpc, WILD_EXPAND_KEEP, WILD_NO_BEEP);
+		    res = nextwild(&xpc, WILD_EXPAND_KEEP, WILD_NO_BEEP,
+							       firstc != '@');
 
 		/* if interrupted while completing, behave like it failed */
 		if (got_int)
@@ -837,7 +868,8 @@
 			    int p_wmnu_save = p_wmnu;
 			    p_wmnu = 0;
 #endif
-			    nextwild(&xpc, WILD_PREV, 0); /* remove match */
+			    /* remove match */
+			    nextwild(&xpc, WILD_PREV, 0, firstc != '@');
 #ifdef FEAT_WILDMENU
 			    p_wmnu = p_wmnu_save;
 #endif
@@ -851,9 +883,11 @@
 			redrawcmd();
 			did_wild_list = TRUE;
 			if (wim_flags[wim_index] & WIM_LONGEST)
-			    nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
+			    nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
+							       firstc != '@');
 			else if (wim_flags[wim_index] & WIM_FULL)
-			    nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP);
+			    nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
+							       firstc != '@');
 		    }
 		    else
 			vim_beep();
@@ -876,9 +910,9 @@
 	/* <S-Tab> goes to last match, in a clumsy way */
 	if (c == K_S_TAB && KeyTyped)
 	{
-	    if (nextwild(&xpc, WILD_EXPAND_KEEP, 0) == OK
-		    && nextwild(&xpc, WILD_PREV, 0) == OK
-		    && nextwild(&xpc, WILD_PREV, 0) == OK)
+	    if (nextwild(&xpc, WILD_EXPAND_KEEP, 0, firstc != '@') == OK
+		    && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK
+		    && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK)
 		goto cmdline_changed;
 	}
 
@@ -1395,7 +1429,7 @@
 		goto cmdline_not_changed;
 
 	case Ctrl_A:	    /* all matches */
-		if (nextwild(&xpc, WILD_ALL, 0) == FAIL)
+		if (nextwild(&xpc, WILD_ALL, 0, firstc != '@') == FAIL)
 		    break;
 		goto cmdline_changed;
 
@@ -1431,7 +1465,7 @@
 #endif
 
 		/* completion: longest common part */
-		if (nextwild(&xpc, WILD_LONGEST, 0) == FAIL)
+		if (nextwild(&xpc, WILD_LONGEST, 0, firstc != '@') == FAIL)
 		    break;
 		goto cmdline_changed;
 
@@ -1439,8 +1473,8 @@
 	case Ctrl_P:	    /* previous match */
 		if (xpc.xp_numfiles > 0)
 		{
-		    if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT, 0)
-								      == FAIL)
+		    if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT,
+						    0, firstc != '@') == FAIL)
 			break;
 		    goto cmdline_changed;
 		}
@@ -1666,13 +1700,13 @@
 	 * We come here if we have a normal character.
 	 */
 
-	if (do_abbr && (IS_SPECIAL(c) || !vim_iswordc(c)) && ccheck_abbr(
+	if (do_abbr && (IS_SPECIAL(c) || !vim_iswordc(c)) && (ccheck_abbr(
 #ifdef FEAT_MBYTE
 			/* Add ABBR_OFF for characters above 0x100, this is
 			 * what check_abbr() expects. */
 			(has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
 #endif
-									c))
+							 c) || c == Ctrl_RSB))
 	    goto cmdline_changed;
 
 	/*
@@ -1833,8 +1867,11 @@
 # endif
 		)
 	    /* Always redraw the whole command line to fix shaping and
-	     * right-left typing.  Not efficient, but it works. */
-	    redrawcmd();
+	     * right-left typing.  Not efficient, but it works.
+	     * Do it only when there are no characters left to read
+	     * to avoid useless intermediate redraws. */
+	    if (vpeekc() == NUL)
+		redrawcmd();
 #endif
     }
 
@@ -1962,8 +1999,12 @@
 # endif
     s = getcmdline(firstc, 1L, 0);
     restore_cmdline(&save_ccline);
-    /* Restore msg_col, the prompt from input() may have changed it. */
-    msg_col = msg_col_save;
+    /* Restore msg_col, the prompt from input() may have changed it.
+     * But only if called recursively and the commandline is therefore being
+     * restored to an old one; if not, the input() prompt stays on the screen,
+     * so we need its modified msg_col left intact. */
+    if (ccline.cmdbuff != NULL)
+	msg_col = msg_col_save;
 
     return s;
 }
@@ -2239,10 +2280,12 @@
 
 	    if (c1 == Ctrl_T)
 	    {
+		long        sw = get_sw_value();
+
 		p = (char_u *)line_ga.ga_data;
 		p[line_ga.ga_len] = NUL;
 		indent = get_indent_str(p, 8);
-		indent += curbuf->b_p_sw - indent % curbuf->b_p_sw;
+		indent += sw - indent % sw;
 add_indent:
 		while (get_indent_str(p, 8) < indent)
 		{
@@ -2294,7 +2337,7 @@
 		    p[line_ga.ga_len] = NUL;
 		    indent = get_indent_str(p, 8);
 		    --indent;
-		    indent -= indent % curbuf->b_p_sw;
+		    indent -= indent % get_sw_value();
 		}
 		while (get_indent_str(p, 8) > indent)
 		{
@@ -2342,15 +2385,31 @@
 	windgoto(msg_row, msg_col);
 	pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
 
-	/* we are done when a NL is entered, but not when it comes after a
-	 * backslash */
-	if (line_ga.ga_len > 0 && pend[-1] == '\n'
-		&& (line_ga.ga_len <= 1 || pend[-2] != '\\'))
-	{
-	    --line_ga.ga_len;
-	    --pend;
-	    *pend = NUL;
-	    break;
+	/* We are done when a NL is entered, but not when it comes after an
+	 * odd number of backslashes, that results in a NUL. */
+	if (line_ga.ga_len > 0 && pend[-1] == '\n')
+	{
+	    int bcount = 0;
+
+	    while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\')
+		++bcount;
+
+	    if (bcount > 0)
+	    {
+		/* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
+		 * "\NL", etc. */
+		line_ga.ga_len -= (bcount + 1) / 2;
+		pend -= (bcount + 1) / 2;
+		pend[-1] = '\n';
+	    }
+
+	    if ((bcount & 1) == 0)
+	    {
+		--line_ga.ga_len;
+		--pend;
+		*pend = NUL;
+		break;
+	    }
 	}
     }
 
@@ -2719,6 +2778,11 @@
     msg_no_more = TRUE;
     if (ccline.cmdlen == ccline.cmdpos)
 	msg_putchar(' ');
+#ifdef FEAT_MBYTE
+    else if (has_mbyte)
+	draw_cmdline(ccline.cmdpos,
+			       (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
+#endif
     else
 	draw_cmdline(ccline.cmdpos, 1);
     msg_no_more = FALSE;
@@ -2843,6 +2907,7 @@
 	{
 	    msg_no_more = TRUE;
 	    i = cmdline_row;
+	    cursorcmd();
 	    draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
 	    /* Avoid clearing the rest of the line too often. */
 	    if (cmdline_row != i || ccline.overstrike)
@@ -3023,7 +3088,7 @@
 	    int	    len;
 
 	    /* Locate start of last word in the cmd buffer. */
-	    for (w = ccline.cmdbuff + ccline.cmdlen; w > ccline.cmdbuff; )
+	    for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; )
 	    {
 #ifdef FEAT_MBYTE
 		if (has_mbyte)
@@ -3041,7 +3106,7 @@
 		    --w;
 		}
 	    }
-	    len = (int)((ccline.cmdbuff + ccline.cmdlen) - w);
+	    len = (int)((ccline.cmdbuff + ccline.cmdpos) - w);
 	    if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
 		p += len;
 	}
@@ -3082,7 +3147,8 @@
 	    else
 #endif
 		c = *s++;
-	    if (cv == Ctrl_V || c == ESC || c == Ctrl_C || c == CAR || c == NL
+	    if (cv == Ctrl_V || c == ESC || c == Ctrl_C
+		    || c == CAR || c == NL || c == Ctrl_L
 #ifdef UNIX
 		    || c == intr_char
 #endif
@@ -3258,6 +3324,24 @@
     return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
 }
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+    static int
+#ifdef __BORLANDC__
+_RTLENTRYF
+#endif
+sort_func_compare(s1, s2)
+    const void *s1;
+    const void *s2;
+{
+    char_u *p1 = *(char_u **)s1;
+    char_u *p2 = *(char_u **)s2;
+
+    if (*p1 != '<' && *p2 == '<') return -1;
+    if (*p1 == '<' && *p2 != '<') return 1;
+    return STRCMP(p1, p2);
+}
+#endif
+
 /*
  * Return FAIL if this is not an appropriate context in which to do
  * completion of anything, return OK if it is (even if there are no matches).
@@ -3265,10 +3349,11 @@
  * normal character (instead of being expanded).  This allows :s/^I^D etc.
  */
     static int
-nextwild(xp, type, options)
+nextwild(xp, type, options, escape)
     expand_T	*xp;
     int		type;
     int		options;	/* extra options for ExpandOne() */
+    int		escape;		/* if TRUE, escape the returned matches */
 {
     int		i, j;
     char_u	*p1;
@@ -3316,10 +3401,16 @@
 	    p2 = NULL;
 	else
 	{
+	    int use_options = options |
+		    WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT;
+	    if (escape)
+		use_options |= WILD_ESCAPE;
+
+	    if (p_wic)
+		use_options += WILD_ICASE;
 	    p2 = ExpandOne(xp, p1,
 			 vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len),
-		    WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE
-							      |options, type);
+							   use_options, type);
 	    vim_free(p1);
 	    /* longest match: make sure it is not shorter, happens with :help */
 	    if (p2 != NULL && type == WILD_LONGEST)
@@ -3396,6 +3487,7 @@
  * mode = WILD_PREV:	    use previous match in multiple match, wrap to first
  * mode = WILD_ALL:	    return all matches concatenated
  * mode = WILD_LONGEST:	    return longest matched part
+ * mode = WILD_ALL_KEEP:    get all matches, keep matches
  *
  * options = WILD_LIST_NOTFOUND:    list entries without a match
  * options = WILD_HOME_REPLACE:	    do home_replace() for buffer names
@@ -3405,6 +3497,7 @@
  * options = WILD_KEEP_ALL:	    don't remove 'wildignore' entries
  * options = WILD_SILENT:	    don't print warning messages
  * options = WILD_ESCAPE:	    put backslash before special chars
+ * options = WILD_ICASE:	    ignore case for files
  *
  * The variables xp->xp_context and xp->xp_backslash must have been set!
  */
@@ -3518,7 +3611,8 @@
 	    /*
 	     * Check for matching suffixes in file names.
 	     */
-	    if (mode != WILD_ALL && mode != WILD_LONGEST)
+	    if (mode != WILD_ALL && mode != WILD_ALL_KEEP
+						      && mode != WILD_LONGEST)
 	    {
 		if (xp->xp_numfiles)
 		    non_suf_match = xp->xp_numfiles;
@@ -3563,19 +3657,16 @@
 	{
 	    for (i = 0; i < xp->xp_numfiles; ++i)
 	    {
-#ifdef CASE_INSENSITIVE_FILENAME
-		if (xp->xp_context == EXPAND_DIRECTORIES
+		if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES
 			|| xp->xp_context == EXPAND_FILES
 			|| xp->xp_context == EXPAND_SHELLCMD
-			|| xp->xp_context == EXPAND_BUFFERS)
+			|| xp->xp_context == EXPAND_BUFFERS))
 		{
 		    if (TOLOWER_LOC(xp->xp_files[i][len]) !=
 					    TOLOWER_LOC(xp->xp_files[0][len]))
 			break;
 		}
-		else
-#endif
-		     if (xp->xp_files[i][len] != xp->xp_files[0][len])
+		else if (xp->xp_files[i][len] != xp->xp_files[0][len])
 		    break;
 	    }
 	    if (i < xp->xp_numfiles)
@@ -3638,6 +3729,7 @@
 #if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
     xp->xp_arg = NULL;
 #endif
+    xp->xp_line = NULL;
 }
 
 /*
@@ -3674,6 +3766,7 @@
     if (options & WILD_ESCAPE)
     {
 	if (xp->xp_context == EXPAND_FILES
+		|| xp->xp_context == EXPAND_FILES_IN_PATH
 		|| xp->xp_context == EXPAND_SHELLCMD
 		|| xp->xp_context == EXPAND_BUFFERS
 		|| xp->xp_context == EXPAND_DIRECTORIES)
@@ -4256,6 +4349,7 @@
  *  EXPAND_EXPRESSION	    Complete internal or user defined function/variable
  *			    names in expressions, eg :while s^I
  *  EXPAND_ENV_VARS	    Complete environment variable names
+ *  EXPAND_USER		    Complete user names
  */
     static void
 set_expand_context(xp)
@@ -4315,6 +4409,11 @@
 	while (nextcomm != NULL)
 	    nextcomm = set_one_cmd_context(xp, nextcomm);
 
+    /* Store the string here so that call_user_expand_func() can get to them
+     * easily. */
+    xp->xp_line = str;
+    xp->xp_col = col;
+
     str[col] = old_char;
 }
 
@@ -4338,6 +4437,7 @@
     char_u	***matches;	/* return: array of pointers to matches */
 {
     char_u	*file_str = NULL;
+    int		options = WILD_ADD_SLASH|WILD_SILENT;
 
     if (xp->xp_context == EXPAND_UNSUCCESSFUL)
     {
@@ -4356,9 +4456,11 @@
     if (file_str == NULL)
 	return EXPAND_UNSUCCESSFUL;
 
+    if (p_wic)
+	options += WILD_ICASE;
+
     /* find all files that match the description */
-    if (ExpandFromContext(xp, file_str, matchcount, matches,
-					  WILD_ADD_SLASH|WILD_SILENT) == FAIL)
+    if (ExpandFromContext(xp, file_str, matchcount, matches, options) == FAIL)
     {
 	*matchcount = 0;
 	*matches = NULL;
@@ -4410,7 +4512,7 @@
     char_u	*pat;
     int		*num_file;
     char_u	***file;
-    int		options;
+    int		options;  /* EW_ flags */
 {
 #ifdef FEAT_CMDL_COMPL
     regmatch_T	regmatch;
@@ -4464,6 +4566,9 @@
 	    flags |= (EW_FILE | EW_PATH);
 	else
 	    flags = (flags | EW_DIR) & ~EW_FILE;
+	if (options & WILD_ICASE)
+	    flags |= EW_ICASE;
+
 	/* Expand wildcards, supporting %:h and the like. */
 	ret = expand_wildcards_eval(&pat, num_file, file, flags);
 	if (free_pat)
@@ -4501,13 +4606,25 @@
 	    || xp->xp_context == EXPAND_TAGS_LISTFILES)
 	return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
     if (xp->xp_context == EXPAND_COLORS)
-	return ExpandRTDir(pat, num_file, file, "colors");
+    {
+	char *directories[] = {"colors", NULL};
+	return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_COMPILER)
-	return ExpandRTDir(pat, num_file, file, "compiler");
+    {
+	char *directories[] = {"compiler", NULL};
+	return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_OWNSYNTAX)
-	return ExpandRTDir(pat, num_file, file, "syntax");
+    {
+	char *directories[] = {"syntax", NULL};
+	return ExpandRTDir(pat, num_file, file, directories);
+    }
     if (xp->xp_context == EXPAND_FILETYPE)
-	return ExpandRTDir(pat, num_file, file, "{syntax,indent,ftplugin}");
+    {
+	char *directories[] = {"syntax", "indent", "ftplugin", NULL};
+	return ExpandRTDir(pat, num_file, file, directories);
+    }
 # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
     if (xp->xp_context == EXPAND_USER_LIST)
 	return ExpandUserList(xp, num_file, file);
@@ -4536,48 +4653,57 @@
 	    int		context;
 	    char_u	*((*func)__ARGS((expand_T *, int)));
 	    int		ic;
+	    int		escaped;
 	} tab[] =
 	{
-	    {EXPAND_COMMANDS, get_command_name, FALSE},
-	    {EXPAND_BEHAVE, get_behave_arg, TRUE},
+	    {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
+	    {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
+#ifdef FEAT_CMDHIST
+	    {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
+#endif
 #ifdef FEAT_USR_CMDS
-	    {EXPAND_USER_COMMANDS, get_user_commands, FALSE},
-	    {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE},
-	    {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE},
-	    {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE},
+	    {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
+	    {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
+	    {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
+	    {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
 #endif
 #ifdef FEAT_EVAL
-	    {EXPAND_USER_VARS, get_user_var_name, FALSE},
-	    {EXPAND_FUNCTIONS, get_function_name, FALSE},
-	    {EXPAND_USER_FUNC, get_user_func_name, FALSE},
-	    {EXPAND_EXPRESSION, get_expr_name, FALSE},
+	    {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
+	    {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
+	    {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
+	    {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
 #endif
 #ifdef FEAT_MENU
-	    {EXPAND_MENUS, get_menu_name, FALSE},
-	    {EXPAND_MENUNAMES, get_menu_names, FALSE},
+	    {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
+	    {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
 #endif
 #ifdef FEAT_SYN_HL
-	    {EXPAND_SYNTAX, get_syntax_name, TRUE},
+	    {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
+#endif
+#ifdef FEAT_PROFILE
+	    {EXPAND_SYNTIME, get_syntime_arg, TRUE, TRUE},
 #endif
-	    {EXPAND_HIGHLIGHT, get_highlight_name, TRUE},
+	    {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
 #ifdef FEAT_AUTOCMD
-	    {EXPAND_EVENTS, get_event_name, TRUE},
-	    {EXPAND_AUGROUP, get_augroup_name, TRUE},
+	    {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
+	    {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
 #endif
 #ifdef FEAT_CSCOPE
-	    {EXPAND_CSCOPE, get_cscope_name, TRUE},
+	    {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
 #endif
 #ifdef FEAT_SIGNS
-	    {EXPAND_SIGN, get_sign_name, TRUE},
+	    {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
 #endif
 #ifdef FEAT_PROFILE
-	    {EXPAND_PROFILE, get_profile_name, TRUE},
+	    {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
 #endif
 #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
-	    {EXPAND_LANGUAGE, get_lang_arg, TRUE},
+	    {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
+	    {EXPAND_LOCALES, get_locales, TRUE, FALSE},
 #endif
-	    {EXPAND_ENV_VARS, get_env_name, TRUE},
+	    {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
+	    {EXPAND_USER, get_users, TRUE, FALSE},
 	};
 	int	i;
 
@@ -4591,12 +4717,13 @@
 	    {
 		if (tab[i].ic)
 		    regmatch.rm_ic = TRUE;
-		ret = ExpandGeneric(xp, &regmatch, num_file, file, tab[i].func);
+		ret = ExpandGeneric(xp, &regmatch, num_file, file,
+						tab[i].func, tab[i].escaped);
 		break;
 	    }
     }
 
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 
     return ret;
 #endif /* FEAT_CMDL_COMPL */
@@ -4613,13 +4740,14 @@
  * Returns OK when no problems encountered, FAIL for error (out of memory).
  */
     int
-ExpandGeneric(xp, regmatch, num_file, file, func)
+ExpandGeneric(xp, regmatch, num_file, file, func, escaped)
     expand_T	*xp;
     regmatch_T	*regmatch;
     int		*num_file;
     char_u	***file;
     char_u	*((*func)__ARGS((expand_T *, int)));
 					  /* returns a string from the list */
+    int		escaped;
 {
     int		i;
     int		count = 0;
@@ -4644,7 +4772,10 @@
 	    {
 		if (round)
 		{
-		    str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+		    if (escaped)
+			str = vim_strsave_escaped(str, (char_u *)" \t\\.");
+		    else
+			str = vim_strsave(str);
 		    (*file)[count] = str;
 #ifdef FEAT_MENU
 		    if (func == get_menu_names && str != NULL)
@@ -4676,7 +4807,16 @@
 
     /* Sort the results.  Keep menu's in the specified order. */
     if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
-	sort_strings(*file, *num_file);
+    {
+	if (xp->xp_context == EXPAND_EXPRESSION
+		|| xp->xp_context == EXPAND_FUNCTIONS
+		|| xp->xp_context == EXPAND_USER_FUNC)
+	    /* <SNR> functions should be sorted to the end. */
+	    qsort((void *)*file, (size_t)*num_file, sizeof(char_u *),
+							   sort_func_compare);
+	else
+	    sort_strings(*file, *num_file);
+    }
 
 #ifdef FEAT_CMDL_COMPL
     /* Reset the variables used for special highlight names expansion, so that
@@ -4728,7 +4868,11 @@
 			    || (pat[1] == '.' && vim_ispathsep(pat[2])))))
 	path = (char_u *)".";
     else
+    {
 	path = vim_getenv((char_u *)"PATH", &mustfree);
+	if (path == NULL)
+	    path = (char_u *)"";
+    }
 
     /*
      * Go over all directories in $PATH.  Expand matches in that directory and
@@ -4807,34 +4951,27 @@
     int		*num_file;
     char_u	***file;
 {
-    char_u	keep;
+    int		keep = 0;
     char_u	num[50];
     char_u	*args[3];
     int		save_current_SID = current_SID;
     void	*ret;
     struct cmdline_info	    save_ccline;
 
-    if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0')
+    if (xp->xp_arg == NULL || xp->xp_arg[0] == '\0' || xp->xp_line == NULL)
 	return NULL;
     *num_file = 0;
     *file = NULL;
 
-    if (ccline.cmdbuff == NULL)
-    {
-	/* Completion from Insert mode, pass fake arguments. */
-	keep = 0;
-	sprintf((char *)num, "%d", (int)STRLEN(xp->xp_pattern));
-	args[1] = xp->xp_pattern;
-    }
-    else
+    if (ccline.cmdbuff != NULL)
     {
-	/* Completion on the command line, pass real arguments. */
 	keep = ccline.cmdbuff[ccline.cmdlen];
 	ccline.cmdbuff[ccline.cmdlen] = 0;
-	sprintf((char *)num, "%d", ccline.cmdpos);
-	args[1] = ccline.cmdbuff;
     }
+
     args[0] = vim_strnsave(xp->xp_pattern, xp->xp_pattern_len);
+    args[1] = xp->xp_line;
+    sprintf((char *)num, "%d", xp->xp_col);
     args[2] = num;
 
     /* Save the cmdline, we don't know what the function may do. */
@@ -4949,57 +5086,68 @@
 /*
  * Expand color scheme, compiler or filetype names:
  * 'runtimepath'/{dirnames}/{pat}.vim
- * dirnames may contain one directory (ex: "colorscheme") or can be a glob
- * expression matching multiple directories (ex: "{syntax,ftplugin,indent}").
+ * "dirnames" is an array with one or more directory names.
  */
     static int
 ExpandRTDir(pat, num_file, file, dirnames)
     char_u	*pat;
     int		*num_file;
     char_u	***file;
-    char	*dirnames;
+    char	*dirnames[];
 {
-    char_u	*all;
+    char_u	*matches;
     char_u	*s;
     char_u	*e;
     garray_T	ga;
+    int		i;
+    int		pat_len;
 
     *num_file = 0;
     *file = NULL;
-    s = alloc((unsigned)(STRLEN(pat) + STRLEN(dirnames) + 7));
-    if (s == NULL)
-	return FAIL;
-    sprintf((char *)s, "%s/%s*.vim", dirnames, pat);
-    all = globpath(p_rtp, s, 0);
-    vim_free(s);
-    if (all == NULL)
-	return FAIL;
+    pat_len = (int)STRLEN(pat);
+    ga_init2(&ga, (int)sizeof(char *), 10);
 
-    ga_init2(&ga, (int)sizeof(char *), 3);
-    for (s = all; *s != NUL; s = e)
+    for (i = 0; dirnames[i] != NULL; ++i)
     {
-	e = vim_strchr(s, '\n');
-	if (e == NULL)
-	    e = s + STRLEN(s);
-	if (ga_grow(&ga, 1) == FAIL)
-	    break;
-	if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+	s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7));
+	if (s == NULL)
 	{
-	    for (s = e - 4; s > all; mb_ptr_back(all, s))
-		if (*s == '\n' || vim_ispathsep(*s))
-		    break;
-	    ++s;
-	    ((char_u **)ga.ga_data)[ga.ga_len] =
+	    ga_clear_strings(&ga);
+	    return FAIL;
+	}
+	sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
+	matches = globpath(p_rtp, s, 0);
+	vim_free(s);
+	if (matches == NULL)
+	    continue;
+
+	for (s = matches; *s != NUL; s = e)
+	{
+	    e = vim_strchr(s, '\n');
+	    if (e == NULL)
+		e = s + STRLEN(s);
+	    if (ga_grow(&ga, 1) == FAIL)
+		break;
+	    if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
+	    {
+		for (s = e - 4; s > matches; mb_ptr_back(matches, s))
+		    if (*s == '\n' || vim_ispathsep(*s))
+			break;
+		++s;
+		((char_u **)ga.ga_data)[ga.ga_len] =
 					    vim_strnsave(s, (int)(e - s - 4));
-	    ++ga.ga_len;
+		++ga.ga_len;
+	    }
+	    if (*e != NUL)
+		++e;
 	}
-	if (*e != NUL)
-	    ++e;
+	vim_free(matches);
     }
-    vim_free(all);
+    if (ga.ga_len == 0)
+	return FAIL;
 
     /* Sort and remove duplicates which can happen when specifying multiple
-     * directories in dirnames such as "{syntax,ftplugin,indent}". */
+     * directories in dirnames. */
     remove_duplicates(&ga);
 
     *file = ga.ga_data;
@@ -5127,6 +5275,34 @@
     NULL
 };
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+/*
+ * Function given to ExpandGeneric() to obtain the possible first
+ * arguments of the ":history command.
+ */
+    static char_u *
+get_history_arg(xp, idx)
+    expand_T	*xp UNUSED;
+    int		idx;
+{
+    static char_u compl[2] = { NUL, NUL };
+    char *short_names = ":=@>?/";
+    int short_names_count = (int)STRLEN(short_names);
+    int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
+
+    if (idx < short_names_count)
+    {
+	compl[0] = (char_u)short_names[idx];
+	return compl;
+    }
+    if (idx < short_names_count + history_name_count)
+	return (char_u *)history_names[idx - short_names_count];
+    if (idx == short_names_count + history_name_count)
+	return (char_u *)"all";
+    return NULL;
+}
+#endif
+
 /*
  * init_history() - Initialize the command line history.
  * Also used to re-allocate the history when the size changes.
@@ -5173,10 +5349,7 @@
 		if (hisidx[type] < 0)		/* there are no entries yet */
 		{
 		    for (i = 0; i < newlen; ++i)
-		    {
-			temp[i].hisnum = 0;
-			temp[i].hisstr = NULL;
-		    }
+			clear_hist_entry(&temp[i]);
 		}
 		else if (newlen > hislen)	/* array becomes bigger */
 		{
@@ -5184,10 +5357,7 @@
 			temp[i] = history[type][i];
 		    j = i;
 		    for ( ; i <= newlen - (hislen - hisidx[type]); ++i)
-		    {
-			temp[i].hisnum = 0;
-			temp[i].hisstr = NULL;
-		    }
+			clear_hist_entry(&temp[i]);
 		    for ( ; j < hislen; ++i, ++j)
 			temp[i] = history[type][j];
 		}
@@ -5215,18 +5385,30 @@
     }
 }
 
+    static void
+clear_hist_entry(hisptr)
+    histentry_T	*hisptr;
+{
+    hisptr->hisnum = 0;
+    hisptr->viminfo = FALSE;
+    hisptr->hisstr = NULL;
+}
+
 /*
  * Check if command line 'str' is already in history.
  * If 'move_to_front' is TRUE, matching entry is moved to end of history.
  */
     static int
-in_history(type, str, move_to_front)
+in_history(type, str, move_to_front, sep, writing)
     int	    type;
     char_u  *str;
     int	    move_to_front;	/* Move the entry to the front if it exists */
+    int	    sep;
+    int	    writing;		/* ignore entries read from viminfo */
 {
     int	    i;
     int	    last_i = -1;
+    char_u  *p;
 
     if (hisidx[type] < 0)
 	return FALSE;
@@ -5235,7 +5417,13 @@
     {
 	if (history[type][i].hisstr == NULL)
 	    return FALSE;
-	if (STRCMP(str, history[type][i].hisstr) == 0)
+
+	/* For search history, check that the separator character matches as
+	 * well. */
+	p = history[type][i].hisstr;
+	if (STRCMP(str, p) == 0
+		&& !(writing && history[type][i].viminfo)
+		&& (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
 	{
 	    if (!move_to_front)
 		return TRUE;
@@ -5256,8 +5444,9 @@
 	    history[type][last_i] = history[type][i];
 	    last_i = i;
 	}
-	history[type][i].hisstr = str;
 	history[type][i].hisnum = ++hisnum[type];
+	history[type][i].viminfo = FALSE;
+	history[type][i].hisstr = str;
 	return TRUE;
     }
     return FALSE;
@@ -5321,15 +5510,14 @@
 	    /* Current line is from the same mapping, remove it */
 	    hisptr = &history[HIST_SEARCH][hisidx[HIST_SEARCH]];
 	    vim_free(hisptr->hisstr);
-	    hisptr->hisstr = NULL;
-	    hisptr->hisnum = 0;
+	    clear_hist_entry(hisptr);
 	    --hisnum[histype];
 	    if (--hisidx[HIST_SEARCH] < 0)
 		hisidx[HIST_SEARCH] = hislen - 1;
 	}
 	last_maptick = -1;
     }
-    if (!in_history(histype, new_entry, TRUE))
+    if (!in_history(histype, new_entry, TRUE, sep, FALSE))
     {
 	if (++hisidx[histype] == hislen)
 	    hisidx[histype] = 0;
@@ -5343,6 +5531,7 @@
 	    hisptr->hisstr[len + 1] = sep;
 
 	hisptr->hisnum = ++hisnum[histype];
+	hisptr->viminfo = FALSE;
 	if (histype == HIST_SEARCH && in_map)
 	    last_maptick = maptick;
     }
@@ -5532,8 +5721,7 @@
 	for (i = hislen; i--;)
 	{
 	    vim_free(hisptr->hisstr);
-	    hisptr->hisnum = 0;
-	    hisptr++->hisstr = NULL;
+	    clear_hist_entry(hisptr);
 	}
 	hisidx[histype] = -1;	/* mark history as cleared */
 	hisnum[histype] = 0;	/* reset identifier counter */
@@ -5578,16 +5766,14 @@
 	    {
 		found = TRUE;
 		vim_free(hisptr->hisstr);
-		hisptr->hisstr = NULL;
-		hisptr->hisnum = 0;
+		clear_hist_entry(hisptr);
 	    }
 	    else
 	    {
 		if (i != last)
 		{
 		    history[histype][last] = *hisptr;
-		    hisptr->hisstr = NULL;
-		    hisptr->hisnum = 0;
+		    clear_hist_entry(hisptr);
 		}
 		if (--last < 0)
 		    last += hislen;
@@ -5598,7 +5784,7 @@
 	if (history[histype][idx].hisstr == NULL)
 	    hisidx[histype] = -1;
     }
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
     return found;
 }
 
@@ -5631,8 +5817,7 @@
 	history[histype][i] = history[histype][j];
 	i = j;
     }
-    history[histype][i].hisstr = NULL;
-    history[histype][i].hisnum = 0;
+    clear_hist_entry(&history[histype][i]);
     if (--i < 0)
 	i += hislen;
     hisidx[histype] = i;
@@ -5803,7 +5988,7 @@
 							      hist[i].hisnum);
 		    if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
 			trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
-							   (int)Columns - 10);
+			     (int)Columns - 10, IOSIZE - (int)STRLEN(IObuff));
 		    else
 			STRCAT(IObuff, hist[i].hisstr);
 		    msg_outtrans(IObuff);
@@ -5817,6 +6002,9 @@
 #endif
 
 #if (defined(FEAT_VIMINFO) && defined(FEAT_CMDHIST)) || defined(PROTO)
+/*
+ * Buffers for history read from a viminfo file.  Only valid while reading.
+ */
 static char_u **viminfo_history[HIST_COUNT] = {NULL, NULL, NULL, NULL};
 static int	viminfo_hisidx[HIST_COUNT] = {0, 0, 0, 0};
 static int	viminfo_hislen[HIST_COUNT] = {0, 0, 0, 0};
@@ -5851,8 +6039,9 @@
  * This allocates history arrays to store the read history lines.
  */
     void
-prepare_viminfo_history(asklen)
+prepare_viminfo_history(asklen, writing)
     int	    asklen;
+    int	    writing;
 {
     int	    i;
     int	    num;
@@ -5860,18 +6049,17 @@
     int	    len;
 
     init_history();
-    viminfo_add_at_front = (asklen != 0);
+    viminfo_add_at_front = (asklen != 0 && !writing);
     if (asklen > hislen)
 	asklen = hislen;
 
     for (type = 0; type < HIST_COUNT; ++type)
     {
-	/*
-	 * Count the number of empty spaces in the history list.  If there are
-	 * more spaces available than we request, then fill them up.
-	 */
+	/* Count the number of empty spaces in the history list.  Entries read
+	 * from viminfo previously are also considered empty.  If there are
+	 * more spaces available than we request, then fill them up. */
 	for (i = 0, num = 0; i < hislen; i++)
-	    if (history[type][i].hisstr == NULL)
+	    if (history[type][i].hisstr == NULL || history[type][i].viminfo)
 		num++;
 	len = asklen;
 	if (num > len)
@@ -5893,8 +6081,9 @@
  * new.
  */
     int
-read_viminfo_history(virp)
+read_viminfo_history(virp, writing)
     vir_T	*virp;
+    int		writing;
 {
     int		type;
     long_u	len;
@@ -5907,8 +6096,10 @@
 	val = viminfo_readstring(virp, 1, TRUE);
 	if (val != NULL && *val != NUL)
 	{
+	    int sep = (*val == ' ' ? NUL : *val);
+
 	    if (!in_history(type, val + (type == HIST_SEARCH),
-							viminfo_add_at_front))
+					  viminfo_add_at_front, sep, writing))
 	    {
 		/* Need to re-allocate to append the separator byte. */
 		len = STRLEN(val);
@@ -5920,7 +6111,7 @@
 			/* Search entry: Move the separator from the first
 			 * column to after the NUL. */
 			mch_memmove(p, val + 1, (size_t)len);
-			p[len] = (*val == ' ' ? NUL : *val);
+			p[len] = sep;
 		    }
 		    else
 		    {
@@ -5938,6 +6129,9 @@
     return viminfo_readline(virp);
 }
 
+/*
+ * Finish reading history lines from viminfo.  Not used when writing viminfo.
+ */
     void
 finish_viminfo_history()
 {
@@ -5948,7 +6142,7 @@
     for (type = 0; type < HIST_COUNT; ++type)
     {
 	if (history[type] == NULL)
-	    return;
+	    continue;
 	idx = hisidx[type] + viminfo_hisidx[type];
 	if (idx >= hislen)
 	    idx -= hislen;
@@ -5962,7 +6156,8 @@
 		hisidx[type] = hislen - 1;
 	    do
 	    {
-		if (history[type][idx].hisstr != NULL)
+		if (history[type][idx].hisstr != NULL
+						|| history[type][idx].viminfo)
 		    break;
 		if (++idx == hislen)
 		    idx = 0;
@@ -5974,6 +6169,7 @@
 	{
 	    vim_free(history[type][idx].hisstr);
 	    history[type][idx].hisstr = viminfo_history[type][i];
+	    history[type][idx].viminfo = TRUE;
 	    if (--idx < 0)
 		idx = hislen - 1;
 	}
@@ -5986,18 +6182,27 @@
 	}
 	vim_free(viminfo_history[type]);
 	viminfo_history[type] = NULL;
+	viminfo_hisidx[type] = 0;
     }
 }
 
+/*
+ * Write history to viminfo file in "fp".
+ * When "merge" is TRUE merge history lines with a previously read viminfo
+ * file, data is in viminfo_history[].
+ * When "merge" is FALSE just write all history lines.  Used for ":wviminfo!".
+ */
     void
-write_viminfo_history(fp)
+write_viminfo_history(fp, merge)
     FILE    *fp;
+    int	    merge;
 {
     int	    i;
     int	    type;
     int	    num_saved;
     char_u  *p;
     int	    c;
+    int     round;
 
     init_history();
     if (hislen == 0)
@@ -6016,26 +6221,67 @@
 					_("Input Line"));
 	if (num_saved > hislen)
 	    num_saved = hislen;
-	i = hisidx[type];
-	if (i >= 0)
-	    while (num_saved--)
-	    {
-		p = history[type][i].hisstr;
-		if (p != NULL)
-		{
-		    fputc(hist_type2char(type, TRUE), fp);
-		    /* For the search history: put the separator in the second
-		     * column; use a space if there isn't one. */
-		    if (type == HIST_SEARCH)
+
+	/*
+	 * Merge typed and viminfo history:
+	 * round 1: history of typed commands.
+	 * round 2: history from recently read viminfo.
+	 */
+	for (round = 1; round <= 2; ++round)
+	{
+	    if (round == 1)
+		/* start at newest entry, somewhere in the list */
+		i = hisidx[type];
+	    else if (viminfo_hisidx[type] > 0)
+		/* start at newest entry, first in the list */
+		i = 0;
+	    else
+		/* empty list */
+		i = -1;
+	    if (i >= 0)
+		while (num_saved > 0
+			&& !(round == 2 && i >= viminfo_hisidx[type]))
+		{
+		    p = round == 1 ? history[type][i].hisstr
+				   : viminfo_history[type] == NULL ? NULL
+						   : viminfo_history[type][i];
+		    if (p != NULL && (round == 2
+				       || !merge
+				       || !history[type][i].viminfo))
+		    {
+			--num_saved;
+			fputc(hist_type2char(type, TRUE), fp);
+			/* For the search history: put the separator in the
+			 * second column; use a space if there isn't one. */
+			if (type == HIST_SEARCH)
+			{
+			    c = p[STRLEN(p) + 1];
+			    putc(c == NUL ? ' ' : c, fp);
+			}
+			viminfo_writestring(fp, p);
+		    }
+		    if (round == 1)
+		    {
+			/* Decrement index, loop around and stop when back at
+			 * the start. */
+			if (--i < 0)
+			    i = hislen - 1;
+			if (i == hisidx[type])
+			    break;
+		    }
+		    else
 		    {
-			c = p[STRLEN(p) + 1];
-			putc(c == NUL ? ' ' : c, fp);
+			/* Increment index. Stop at the end in the while. */
+			++i;
 		    }
-		    viminfo_writestring(fp, p);
 		}
-		if (--i < 0)
-		    i = hislen - 1;
-	    }
+	}
+	for (i = 0; i < viminfo_hisidx[type]; ++i)
+	    if (viminfo_history[type] != NULL)
+		vim_free(viminfo_history[type][i]);
+	vim_free(viminfo_history[type]);
+	viminfo_history[type] = NULL;
+	viminfo_hisidx[type] = 0;
     }
 }
 #endif /* FEAT_VIMINFO */
@@ -6147,9 +6393,7 @@
     curwin->w_p_rl = cmdmsg_rl;
     cmdmsg_rl = FALSE;
 # endif
-# ifdef FEAT_SCROLLBIND
-    curwin->w_p_scb = FALSE;
-# endif
+    RESET_BINDING(curwin);
 
 # ifdef FEAT_AUTOCMD
     /* Do execute autocommands for setting the filetype (load syntax). */
@@ -6287,6 +6531,12 @@
 	    ccline.cmdbuff = vim_strsave((char_u *)"qa");
 	    cmdwin_result = CAR;
 	}
+	else if (cmdwin_result == Ctrl_C)
+	{
+	    /* :q or :close, don't execute any command
+	     * and don't modify the cmd window. */
+	    ccline.cmdbuff = NULL;
+	}
 	else
 	    ccline.cmdbuff = vim_strsave(ml_get_curline());
 	if (ccline.cmdbuff == NULL)
@@ -6317,7 +6567,7 @@
 	/* win_close() may have already wiped the buffer when 'bh' is
 	 * set to 'wipe' */
 	if (buf_valid(bp))
-	    close_buffer(NULL, bp, DOBUF_WIPE);
+	    close_buffer(NULL, bp, DOBUF_WIPE, FALSE);
 
 	/* Restore window sizes. */
 	win_size_restore(&winsizes);
diff -Naur vim73.orig/src/farsi.c vim73/src/farsi.c
--- vim73.orig/src/farsi.c	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/farsi.c	2013-08-04 19:09:10.243944962 +0000
@@ -1813,7 +1813,7 @@
 		ptr[i] = toF_leading(ptr[i]);
 		++i;
 
-		while(canF_Rjoin(ptr[i]) && (i < llen))
+		while (canF_Rjoin(ptr[i]) && i < llen)
 		{
 		    ptr[i] = toF_Rjoin(ptr[i]);
 		    if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
@@ -1841,7 +1841,7 @@
 }
 
 /*
- * Convert the Farsi VIM into Farsi 3342 standad.
+ * Convert the Farsi VIM into Farsi 3342 standard.
  */
     void
 conv_to_pstd()
diff -Naur vim73.orig/src/feature.h vim73/src/feature.h
--- vim73.orig/src/feature.h	2010-07-27 19:45:42.000000000 +0000
+++ vim73/src/feature.h	2013-08-04 19:09:10.247278285 +0000
@@ -392,6 +392,13 @@
 #endif
 
 /*
+ * +python and +python3 require FEAT_EVAL.
+ */
+#if !defined(FEAT_EVAL) && (defined(FEAT_PYTHON3) || defined(FEAT_PYTHON))
+# define FEAT_EVAL
+#endif
+
+/*
  * +profile		Profiling for functions and scripts.
  */
 #if defined(FEAT_HUGE) \
@@ -506,15 +513,6 @@
 #endif
 
 /*
- * +osfiletype		filetype checking in autocommand patterns.
- *			Only on systems that support filetypes (RISC OS).
- */
-#if 0
-# define FEAT_OSFILETYPE
-# define DFLT_OFT "Text"
-#endif
-
-/*
  * +viminfo		reading/writing the viminfo file. Takes about 8Kbyte
  *			of code.
  * VIMINFO_FILE		Location of user .viminfo file (should start with $).
@@ -640,7 +638,7 @@
  * Disabled for EBCDIC:
  * Multibyte support doesn't work on z/OS Unix currently.
  */
-#if (defined(FEAT_BIG) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
+#if (defined(FEAT_NORMAL) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
 	&& !defined(FEAT_MBYTE) && !defined(WIN16) \
 	&& SIZEOF_INT >= 4 && !defined(EBCDIC)
 # define FEAT_MBYTE
@@ -801,6 +799,15 @@
 #endif
 
 /*
+ * On some systems, when we compile with the GUI, we always use it.  On Mac
+ * there is no terminal version, and on Windows we can't figure out how to
+ * fork one off with :gui.
+ */
+#if defined(FEAT_GUI_MSWIN) || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_UNIX))
+# define ALWAYS_USE_GUI
+#endif
+
+/*
  * +dialog_gui		Use GUI dialog.
  * +dialog_con		May use Console dialog.
  *			When none of these defined there is no dialog support.
@@ -829,6 +836,9 @@
 	 || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MSWIN) \
 	 || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
 # define FEAT_GUI_TEXTDIALOG
+# ifndef ALWAYS_USE_GUI
+#  define FEAT_CON_DIALOG
+# endif
 #endif
 
 /* Mac specific thing: Codewarrior interface. */
@@ -997,7 +1007,7 @@
 
 /*
  * MODIFIED_BY		Name of who modified Vim.  Required when distributing
- *			a modifed version of Vim.
+ *			a modified version of Vim.
  *			Also from the "--with-modified-by" configure argument.
  */
 /* #define MODIFIED_BY "John Doe" */
@@ -1047,8 +1057,10 @@
  * +mouse_gpm		Unix only: Include code for Linux console mouse
  *			handling.
  * +mouse_pterm		PTerm mouse support for QNX
+ * +mouse_sgr		Unix only: Include code for for SGR-styled mouse.
  * +mouse_sysmouse	Unix only: Include code for FreeBSD and DragonFly
  *			console mouse handling.
+ * +mouse_urxvt		Unix only: Include code for for urxvt mosue handling.
  * +mouse		Any mouse support (any of the above enabled).
  */
 /* OS/2 and Amiga console have no mouse support */
@@ -1062,6 +1074,12 @@
 # ifdef FEAT_BIG
 #  define FEAT_MOUSE_DEC
 # endif
+# ifdef FEAT_BIG
+#  define FEAT_MOUSE_URXVT
+# endif
+# ifdef FEAT_BIG
+#  define FEAT_MOUSE_SGR
+# endif
 # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
 #  define DOS_MOUSE
 # endif
@@ -1070,6 +1088,13 @@
 # endif
 #endif
 
+/*
+ * Note: Only one of the following may be defined:
+ * FEAT_MOUSE_GPM
+ * FEAT_SYSMOUSE
+ * FEAT_MOUSE_JSB
+ * FEAT_MOUSE_PTERM
+ */
 #if defined(FEAT_NORMAL) && defined(HAVE_GPM)
 # define FEAT_MOUSE_GPM
 #endif
@@ -1077,13 +1102,29 @@
 #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
 # define FEAT_SYSMOUSE
 #endif
+
+/* urxvt is a small variation of mouse_xterm, and shares its code */
+#if defined(FEAT_MOUSE_URXVT) && !defined(FEAT_MOUSE_XTERM)
+# define FEAT_MOUSE_XTERM
+#endif
+
+/* sgr is a small variation of mouse_xterm, and shares its code */
+#if defined(FEAT_MOUSE_SGR) && !defined(FEAT_MOUSE_XTERM)
+# define FEAT_MOUSE_XTERM
+#endif
+
 /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
 #if !defined(FEAT_MOUSE_TTY) \
 	&& (defined(FEAT_MOUSE_XTERM) \
-	    || defined(FEAT_MOUSE_NET) || defined(FEAT_MOUSE_DEC) \
-	    || defined(DOS_MOUSE) || defined(FEAT_MOUSE_GPM) \
-	    || defined(FEAT_MOUSE_JSB) || defined(FEAT_MOUSE_PTERM) \
-	    || defined(FEAT_SYSMOUSE))
+	    || defined(FEAT_MOUSE_NET) \
+	    || defined(FEAT_MOUSE_DEC) \
+	    || defined(DOS_MOUSE) \
+	    || defined(FEAT_MOUSE_GPM) \
+	    || defined(FEAT_MOUSE_JSB) \
+	    || defined(FEAT_MOUSE_PTERM) \
+	    || defined(FEAT_SYSMOUSE) \
+	    || defined(FEAT_MOUSE_URXVT) \
+	    || defined(FEAT_MOUSE_SGR))
 # define FEAT_MOUSE_TTY		/* include non-GUI mouse support */
 #endif
 #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
@@ -1095,6 +1136,11 @@
  * +xterm_clipboard	Unix only: Include code for handling the clipboard
  *			in an xterm like in the GUI.
  */
+
+#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+# define FEAT_CLIPBOARD
+#endif
+
 #ifdef FEAT_GUI
 # ifndef FEAT_CLIPBOARD
 #  define FEAT_CLIPBOARD
@@ -1312,3 +1358,11 @@
 #ifdef FEAT_NORMAL
 # define FEAT_PERSISTENT_UNDO
 #endif
+
+/*
+ * +filterpipe
+ */
+#if (defined(UNIX) && !defined(USE_SYSTEM)) \
+	    || (defined(WIN3264) && defined(FEAT_GUI_W32))
+# define FEAT_FILTERPIPE
+#endif
diff -Naur vim73.orig/src/fileio.c vim73/src/fileio.c
--- vim73.orig/src/fileio.c	2010-08-14 12:20:54.000000000 +0000
+++ vim73/src/fileio.c	2013-08-04 19:09:10.257278255 +0000
@@ -11,14 +11,6 @@
  * fileio.c: read from and write to a file
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for lseek(), must be before vim.h */
-#endif
-
-#if defined __EMX__
-# include "vimio.h"	/* for mktemp(), CJW 1997-12-03 */
-#endif
-
 #include "vim.h"
 
 #if defined(__TANDEM) || defined(__MINT__)
@@ -258,6 +250,7 @@
 #ifdef FEAT_CRYPT
     char_u	*cryptkey = NULL;
     int		did_ask_for_key = FALSE;
+    int		crypt_method_used;
 #endif
 #ifdef FEAT_PERSISTENT_UNDO
     context_sha256_T sha_ctx;
@@ -325,7 +318,7 @@
     int		using_b_fname;
 #endif
 
-    write_no_eol_lnum = 0;	/* in case it was set by the previous read */
+    curbuf->b_no_eol_lnum = 0;	/* in case it was set by the previous read */
 
     /*
      * If there is no file name yet, use the one for the read file.
@@ -511,18 +504,11 @@
 
     if (newfile && !read_stdin && !read_buffer)
     {
-	/* Remember time of file.
-	 * For RISCOS, also remember the filetype.
-	 */
+	/* Remember time of file. */
 	if (mch_stat((char *)fname, &st) >= 0)
 	{
 	    buf_store_time(curbuf, &st, fname);
 	    curbuf->b_mtime_read = curbuf->b_mtime;
-
-#if defined(RISCOS) && defined(FEAT_OSFILETYPE)
-	    /* Read the filetype into the buffer local filetype option. */
-	    mch_read_filetype(fname);
-#endif
 #ifdef UNIX
 	    /*
 	     * Use the protection bits of the original file for the swap file.
@@ -564,7 +550,6 @@
 
 /*
  * for UNIX: check readonly with perm and mch_access()
- * for RISCOS: same as Unix, otherwise file gets re-datestamped!
  * for MSDOS and Amiga: check readonly by trying to open the file for writing
  */
     file_readonly = FALSE;
@@ -918,7 +903,7 @@
 	    {
 		/* Read the first line (and a bit more).  Immediately rewind to
 		 * the start of the file.  If the read() fails "len" is -1. */
-		len = vim_read(fd, firstline, 80);
+		len = read_eintr(fd, firstline, 80);
 		lseek(fd, (off_t)0L, SEEK_SET);
 		for (p = firstline; p < firstline + len; ++p)
 		    if (*p >= 0x80)
@@ -1373,7 +1358,7 @@
 		    /*
 		     * Read bytes from the file.
 		     */
-		    size = vim_read(fd, ptr, size);
+		    size = read_eintr(fd, ptr, size);
 		}
 
 		if (size <= 0)
@@ -1395,6 +1380,8 @@
 # endif
 			   )
 			{
+			    if (can_retry)
+				goto rewind_retry;
 			    if (conv_error == 0)
 				conv_error = curbuf->b_ml.ml_line_count
 								- linecnt + 1;
@@ -2297,6 +2284,7 @@
 	save_file_ff(curbuf);		/* remember the current file format */
 
 #ifdef FEAT_CRYPT
+    crypt_method_used = use_crypt_method;
     if (cryptkey != NULL)
     {
 	crypt_pop_state();
@@ -2491,7 +2479,10 @@
 #ifdef FEAT_CRYPT
 	    if (cryptkey != NULL)
 	    {
-		STRCAT(IObuff, _("[crypted]"));
+		if (crypt_method_used == 1)
+		    STRCAT(IObuff, _("[blowfish]"));
+		else
+		    STRCAT(IObuff, _("[crypted]"));
 		c = TRUE;
 	    }
 #endif
@@ -2607,10 +2598,11 @@
 
     /*
      * Trick: We remember if the last line of the read didn't have
-     * an eol for when writing it again.  This is required for
+     * an eol even when 'binary' is off, for when writing it again with
+     * 'binary' on.  This is required for
      * ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work.
      */
-    write_no_eol_lnum = read_no_eol_lnum;
+    curbuf->b_no_eol_lnum = read_no_eol_lnum;
 
     /* When reloading a buffer put the cursor at the first line that is
      * different. */
@@ -2658,10 +2650,10 @@
 							    FALSE, NULL, eap);
 	if (msg_scrolled == n)
 	    msg_scroll = m;
-#ifdef FEAT_EVAL
+# ifdef FEAT_EVAL
 	if (aborting())	    /* autocmds may abort script processing */
 	    return FAIL;
-#endif
+# endif
     }
 #endif
 
@@ -3202,6 +3194,9 @@
     int		    write_undo_file = FALSE;
     context_sha256_T sha_ctx;
 #endif
+#ifdef FEAT_CRYPT
+    int		    crypt_method_used;
+#endif
 
     if (fname == NULL || *fname == NUL)	/* safety check */
 	return FAIL;
@@ -3284,7 +3279,7 @@
 	overwriting = FALSE;
 
     if (exiting)
-	settmode(TMODE_COOK);	    /* when exiting allow typahead now */
+	settmode(TMODE_COOK);	    /* when exiting allow typeahead now */
 
     ++no_wait_return;		    /* don't wait for return yet */
 
@@ -3308,7 +3303,7 @@
 	int		empty_memline = (buf->b_ml.ml_mfp == NULL);
 
 	/*
-	 * Apply PRE aucocommands.
+	 * Apply PRE autocommands.
 	 * Set curbuf to the buffer to be written.
 	 * Careful: The autocommands may call buf_write() recursively!
 	 */
@@ -3345,8 +3340,22 @@
 	}
 	else if (reset_changed && whole)
 	{
-	    if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
-					 sfname, sfname, FALSE, curbuf, eap)))
+	    int was_changed = curbufIsChanged();
+
+	    did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
+					  sfname, sfname, FALSE, curbuf, eap);
+	    if (did_cmd)
+	    {
+		if (was_changed && !curbufIsChanged())
+		{
+		    /* Written everything correctly and BufWriteCmd has reset
+		     * 'modified': Correct the undo information so that an
+		     * undo now sets 'modified'. */
+		    u_unchanged(curbuf);
+		    u_update_save_nr(curbuf);
+		}
+	    }
+	    else
 	    {
 #ifdef FEAT_QUICKFIX
 		if (overwriting && bt_nofile(curbuf))
@@ -3771,12 +3780,12 @@
 	    }
 	}
 
-# ifdef UNIX
 	/*
 	 * Break symlinks and/or hardlinks if we've been asked to.
 	 */
 	if ((bkc_flags & BKC_BREAKSYMLINK) || (bkc_flags & BKC_BREAKHARDLINK))
 	{
+# ifdef UNIX
 	    int	lstat_res;
 
 	    lstat_res = mch_lstat((char *)fname, &st);
@@ -3792,20 +3801,24 @@
 		    && st_old.st_nlink > 1
 		    && (lstat_res != 0 || st.st_ino == st_old.st_ino))
 		backup_copy = FALSE;
+# else
+#  if defined(WIN32)
+	    /* Symlinks. */
+	    if ((bkc_flags & BKC_BREAKSYMLINK) && mch_is_symbolic_link(fname))
+		backup_copy = FALSE;
+
+	    /* Hardlinks. */
+	    if ((bkc_flags & BKC_BREAKHARDLINK) && mch_is_hard_link(fname))
+		backup_copy = FALSE;
+#  endif
+# endif
 	}
-#endif
 
 #endif
 
 	/* make sure we have a valid backup extension to use */
 	if (*p_bex == NUL)
-	{
-#ifdef RISCOS
-	    backup_ext = (char_u *)"/bak";
-#else
 	    backup_ext = (char_u *)".bak";
-#endif
-	}
 	else
 	    backup_ext = p_bex;
 
@@ -4000,7 +4013,7 @@
 #ifdef HAS_BW_FLAGS
 			write_info.bw_flags = FIO_NOCONVERT;
 #endif
-			while ((write_info.bw_len = vim_read(fd, copybuf,
+			while ((write_info.bw_len = read_eintr(fd, copybuf,
 								BUFSIZE)) > 0)
 			{
 			    if (buf_write_bytes(&write_info) == FAIL)
@@ -4568,7 +4581,7 @@
 	if (end == 0
 		|| (lnum == end
 		    && write_bin
-		    && (lnum == write_no_eol_lnum
+		    && (lnum == buf->b_no_eol_lnum
 			|| (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol))))
 	{
 	    ++lnum;			/* written the line, count it */
@@ -4719,11 +4732,6 @@
 #endif
     if (perm >= 0)		/* set perm. of new file same as old file */
 	(void)mch_setperm(wfname, perm);
-#ifdef RISCOS
-    if (!append && !filtering)
-	/* Set the filetype after writing the file. */
-	mch_set_filetype(wfname, buf->b_p_oft);
-#endif
 #ifdef HAVE_ACL
     /* Probably need to set the ACL before changing the user (can't set the
      * ACL on a file the user doesn't own). */
@@ -4731,6 +4739,7 @@
 	mch_set_acl(wfname, acl);
 #endif
 #ifdef FEAT_CRYPT
+    crypt_method_used = use_crypt_method;
     if (wb_flags & FIO_ENCRYPTED)
 	crypt_pop_state();
 #endif
@@ -4813,7 +4822,7 @@
 #ifdef HAS_BW_FLAGS
 			write_info.bw_flags = FIO_NOCONVERT;
 #endif
-			while ((write_info.bw_len = vim_read(fd, smallbuf,
+			while ((write_info.bw_len = read_eintr(fd, smallbuf,
 						      SMBUFSIZE)) > 0)
 			    if (buf_write_bytes(&write_info) == FAIL)
 				break;
@@ -4885,7 +4894,10 @@
 #ifdef FEAT_CRYPT
 	if (wb_flags & FIO_ENCRYPTED)
 	{
-	    STRCAT(IObuff, _("[crypted]"));
+	    if (crypt_method_used == 1)
+		STRCAT(IObuff, _("[blowfish]"));
+	    else
+		STRCAT(IObuff, _("[crypted]"));
 	    c = TRUE;
 	}
 #endif
@@ -5094,7 +5106,7 @@
     {
 	aco_save_T	aco;
 
-	write_no_eol_lnum = 0;	/* in case it was set by the previous read */
+	curbuf->b_no_eol_lnum = 0;  /* in case it was set by the previous read */
 
 	/*
 	 * Apply POST autocommands.
@@ -5330,7 +5342,7 @@
 
 /*
  * Call write() to write a number of bytes to the file.
- * Also handles encryption and 'encoding' conversion.
+ * Handles encryption and 'encoding' conversion.
  *
  * Return FAIL for failure, OK otherwise.
  */
@@ -5702,16 +5714,8 @@
 	crypt_encode(buf, len, buf);
 #endif
 
-    /* Repeat the write(), it may be interrupted by a signal. */
-    while (len > 0)
-    {
-	wlen = vim_write(ip->bw_fd, buf, len);
-	if (wlen <= 0)		    /* error! */
-	    return FAIL;
-	len -= wlen;
-	buf += wlen;
-    }
-    return OK;
+    wlen = write_eintr(ip->bw_fd, buf, len);
+    return (wlen < len) ? FAIL : OK;
 }
 
 #ifdef FEAT_MBYTE
@@ -6024,15 +6028,19 @@
 shorten_fname1(full_path)
     char_u	*full_path;
 {
-    char_u	dirname[MAXPATHL];
+    char_u	*dirname;
     char_u	*p = full_path;
 
+    dirname = alloc(MAXPATHL);
+    if (dirname == NULL)
+	return full_path;
     if (mch_dirname(dirname, MAXPATHL) == OK)
     {
 	p = shorten_fname(full_path, dirname);
 	if (p == NULL || *p == NUL)
 	    p = full_path;
     }
+    vim_free(dirname);
     return p;
 }
 #endif
@@ -6259,19 +6267,17 @@
      */
     for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
     {
-#ifndef RISCOS
 	if (*ext == '.'
-# ifdef USE_LONG_FNAME
+#ifdef USE_LONG_FNAME
 		    && (!USE_LONG_FNAME || shortname)
-# else
-#  ifndef SHORT_FNAME
+#else
+# ifndef SHORT_FNAME
 		    && shortname
-#  endif
 # endif
+#endif
 								)
 	    if (*ptr == '.')	/* replace '.' by '_' */
 		*ptr = '_';
-#endif
 	if (vim_ispathsep(*ptr))
 	{
 	    ++ptr;
@@ -6306,23 +6312,14 @@
 	if (fname == NULL || *fname == NUL
 				   || vim_ispathsep(fname[STRLEN(fname) - 1]))
 	{
-#ifdef RISCOS
-	    if (*ext == '/')
-#else
 	    if (*ext == '.')
-#endif
 		*s++ = '_';
 	}
 	/*
 	 * If the extension starts with '.', truncate the base name at 8
 	 * characters
 	 */
-#ifdef RISCOS
-	/* We normally use '/', but swap files are '_' */
-	else if (*ext == '/' || *ext == '_')
-#else
 	else if (*ext == '.')
-#endif
 	{
 	    if ((size_t)(s - ptr) > (size_t)8)
 	    {
@@ -6334,13 +6331,8 @@
 	 * If the extension doesn't start with '.', and the file name
 	 * doesn't have an extension yet, append a '.'
 	 */
-#ifdef RISCOS
-	else if ((e = vim_strchr(ptr, '/')) == NULL)
-	    *s++ = '/';
-#else
 	else if ((e = vim_strchr(ptr, '.')) == NULL)
 	    *s++ = '.';
-#endif
 	/*
 	 * If the extension doesn't start with '.', and there already is an
 	 * extension, it may need to be truncated
@@ -6368,23 +6360,14 @@
     /*
      * Prepend the dot.
      */
-    if (prepend_dot && !shortname && *(e = gettail(retval)) !=
-#ifdef RISCOS
-	    '/'
-#else
-	    '.'
-#endif
+    if (prepend_dot && !shortname && *(e = gettail(retval)) != '.'
 #ifdef USE_LONG_FNAME
 	    && USE_LONG_FNAME
 #endif
 				)
     {
 	STRMOVE(e + 1, e);
-#ifdef RISCOS
-	*e = '/';
-#else
 	*e = '.';
-#endif
     }
 #endif
 
@@ -6514,9 +6497,7 @@
 #ifdef HAVE_ACL
     vim_acl_T	acl;		/* ACL from original file */
 #endif
-#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
     int		use_tmp_file = FALSE;
-#endif
 
     /*
      * When the names are identical, there is nothing to do.  When they refer
@@ -6525,11 +6506,9 @@
      */
     if (fnamecmp(from, to) == 0)
     {
-#ifdef CASE_INSENSITIVE_FILENAME
-	if (STRCMP(gettail(from), gettail(to)) != 0)
+	if (p_fic && STRCMP(gettail(from), gettail(to)) != 0)
 	    use_tmp_file = TRUE;
 	else
-#endif
 	    return 0;
     }
 
@@ -6552,8 +6531,22 @@
 	    use_tmp_file = TRUE;
     }
 #endif
+#ifdef WIN3264
+    {
+	BY_HANDLE_FILE_INFORMATION info1, info2;
+
+	/* It's possible for the source and destination to be the same file.
+	 * In that case go through a temp file name.  This makes rename("foo",
+	 * "./foo") a no-op (in a complicated way). */
+	if (win32_fileinfo(from, &info1) == FILEINFO_OK
+		&& win32_fileinfo(to, &info2) == FILEINFO_OK
+		&& info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
+		&& info1.nFileIndexHigh == info2.nFileIndexHigh
+		&& info1.nFileIndexLow == info2.nFileIndexLow)
+	    use_tmp_file = TRUE;
+    }
+#endif
 
-#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
     if (use_tmp_file)
     {
 	char	tempname[MAXPATHL + 1];
@@ -6586,7 +6579,6 @@
 	}
 	return -1;
     }
-#endif
 
     /*
      * Delete the "to" file, this is required on some systems to make the
@@ -6662,8 +6654,8 @@
 	return -1;
     }
 
-    while ((n = vim_read(fd_in, buffer, BUFSIZE)) > 0)
-	if (vim_write(fd_out, buffer, n) != n)
+    while ((n = read_eintr(fd_in, buffer, BUFSIZE)) > 0)
+	if (write_eintr(fd_out, buffer, n) != n)
 	{
 	    errmsg = _("E208: Error writing to \"%s\"");
 	    break;
@@ -7024,7 +7016,7 @@
 		    STRCAT(tbuf, mesg2);
 		}
 		if (do_dialog(VIM_WARNING, (char_u *)_("Warning"), tbuf,
-				(char_u *)_("&OK\n&Load File"), 1, NULL) == 2)
+			  (char_u *)_("&OK\n&Load File"), 1, NULL, TRUE) == 2)
 		    reload = TRUE;
 	    }
 	    else
@@ -7074,8 +7066,23 @@
     }
 
     if (reload)
+    {
 	/* Reload the buffer. */
 	buf_reload(buf, orig_mode);
+#ifdef FEAT_PERSISTENT_UNDO
+	if (buf->b_p_udf && buf->b_ffname != NULL)
+	{
+	    char_u	    hash[UNDO_HASH_SIZE];
+	    buf_T	    *save_curbuf = curbuf;
+
+	    /* Any existing undo file is unusable, write it now. */
+	    curbuf = buf;
+	    u_compute_hash(hash);
+	    u_write_undo(NULL, FALSE, buf, hash);
+	    curbuf = save_curbuf;
+	}
+#endif
+    }
 
 #ifdef FEAT_AUTOCMD
     /* Trigger FileChangedShell when the file was changed in any way. */
@@ -7242,6 +7249,9 @@
 	 * reset it, might have had a read error. */
 	if (orig_mode == curbuf->b_orig_mode)
 	    curbuf->b_p_ro |= old_ro;
+
+	/* Modelines must override settings done by autocommands. */
+	do_modelines(0);
     }
 
     /* restore curwin/curbuf and a few other things */
@@ -7272,8 +7282,8 @@
 write_lnum_adjust(offset)
     linenr_T	offset;
 {
-    if (write_no_eol_lnum != 0)		/* only if there is a missing eol */
-	write_no_eol_lnum += offset;
+    if (curbuf->b_no_eol_lnum != 0)	/* only if there is a missing eol */
+	curbuf->b_no_eol_lnum += offset;
 }
 
 #if defined(TEMPDIRNAMES) || defined(PROTO)
@@ -7475,7 +7485,10 @@
 
     STRCPY(itmp, "");
     if (GetTempPath(_MAX_PATH, szTempFile) == 0)
-	szTempFile[0] = NUL;	/* GetTempPath() failed, use current dir */
+    {
+	szTempFile[0] = '.';	/* GetTempPath() failed, use current dir */
+	szTempFile[1] = NUL;
+    }
     strcpy(buf4, "VIM");
     buf4[2] = extra_char;   /* make it "VIa", "VIb", etc. */
     if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
@@ -7496,8 +7509,11 @@
 # else /* WIN3264 */
 
 #  ifdef USE_TMPNAM
+    char_u	*p;
+
     /* tmpnam() will make its own name */
-    if (*tmpnam((char *)itmp) == NUL)
+    p = tmpnam((char *)itmp);
+    if (p == NULL || *p == NUL)
 	return NULL;
 #  else
     char_u	*p;
@@ -7608,16 +7624,16 @@
 
 typedef struct AutoPat
 {
-    int		    group;		/* group ID */
     char_u	    *pat;		/* pattern as typed (NULL when pattern
 					   has been removed) */
-    int		    patlen;		/* strlen() of pat */
     regprog_T	    *reg_prog;		/* compiled regprog for pattern */
-    char	    allow_dirs;		/* Pattern may match whole path */
-    char	    last;		/* last pattern for apply_autocmds() */
     AutoCmd	    *cmds;		/* list of commands to do */
     struct AutoPat  *next;		/* next AutoPat in AutoPat list */
+    int		    group;		/* group ID */
+    int		    patlen;		/* strlen() of pat */
     int		    buflocal_nr;	/* !=0 for buffer-local AutoPat */
+    char	    allow_dirs;		/* Pattern may match whole path */
+    char	    last;		/* last pattern for apply_autocmds() */
 } AutoPat;
 
 static struct event_name
@@ -7651,6 +7667,7 @@
     {"CmdwinEnter",	EVENT_CMDWINENTER},
     {"CmdwinLeave",	EVENT_CMDWINLEAVE},
     {"ColorScheme",	EVENT_COLORSCHEME},
+    {"CompleteDone",	EVENT_COMPLETEDONE},
     {"CursorHold",	EVENT_CURSORHOLD},
     {"CursorHoldI",	EVENT_CURSORHOLDI},
     {"CursorMoved",	EVENT_CURSORMOVED},
@@ -7682,9 +7699,11 @@
     {"InsertChange",	EVENT_INSERTCHANGE},
     {"InsertEnter",	EVENT_INSERTENTER},
     {"InsertLeave",	EVENT_INSERTLEAVE},
+    {"InsertCharPre",	EVENT_INSERTCHARPRE},
     {"MenuPopup",	EVENT_MENUPOPUP},
     {"QuickFixCmdPost",	EVENT_QUICKFIXCMDPOST},
     {"QuickFixCmdPre",	EVENT_QUICKFIXCMDPRE},
+    {"QuitPre",		EVENT_QUITPRE},
     {"RemoteReply",	EVENT_REMOTEREPLY},
     {"SessionLoadPost",	EVENT_SESSIONLOADPOST},
     {"ShellCmdPost",	EVENT_SHELLCMDPOST},
@@ -7700,6 +7719,8 @@
     {"TabLeave",	EVENT_TABLEAVE},
     {"TermChanged",	EVENT_TERMCHANGED},
     {"TermResponse",	EVENT_TERMRESPONSE},
+    {"TextChanged",	EVENT_TEXTCHANGED},
+    {"TextChangedI",	EVENT_TEXTCHANGEDI},
     {"User",		EVENT_USER},
     {"VimEnter",	EVENT_VIMENTER},
     {"VimLeave",	EVENT_VIMLEAVE},
@@ -7764,7 +7785,6 @@
 static int event_ignored __ARGS((event_T event));
 static int au_get_grouparg __ARGS((char_u **argp));
 static int do_autocmd_event __ARGS((event_T event, char_u *pat, int nested, char_u *cmd, int forceit, int group));
-static char_u *getnextac __ARGS((int c, void *cookie, int indent));
 static int apply_autocmds_group __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap));
 static void auto_next_pat __ARGS((AutoPatCmd *apc, int stop_at_last));
 
@@ -7911,7 +7931,7 @@
 	    if (ap->pat == NULL)
 	    {
 		*prev_ap = ap->next;
-		vim_free(ap->reg_prog);
+		vim_regfree(ap->reg_prog);
 		vim_free(ap);
 	    }
 	    else
@@ -8744,6 +8764,8 @@
     int		retval;
     aco_save_T	aco;
     buf_T	*buf;
+    char_u	*arg = eap->arg;
+    int		call_do_modelines = check_nomodeline(&arg);
 
     /*
      * This is a bit tricky: For some commands curwin->w_buffer needs to be
@@ -8760,11 +8782,15 @@
 	    aucmd_prepbuf(&aco, buf);
 
 	    /* execute the autocommands for this buffer */
-	    retval = do_doautocmd(eap->arg, FALSE);
+	    retval = do_doautocmd(arg, FALSE);
 
-	    /* Execute the modeline settings, but don't set window-local
-	     * options if we are using the current window for another buffer. */
-	    do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
+	    if (call_do_modelines)
+	    {
+		/* Execute the modeline settings, but don't set window-local
+		 * options if we are using the current window for another
+		 * buffer. */
+		do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
+	    }
 
 	    /* restore the current window */
 	    aucmd_restbuf(&aco);
@@ -8779,6 +8805,23 @@
 }
 
 /*
+ * Check *argp for <nomodeline>.  When it is present return FALSE, otherwise
+ * return TRUE and advance *argp to after it.
+ * Thus return TRUE when do_modelines() should be called.
+ */
+    int
+check_nomodeline(argp)
+    char_u **argp;
+{
+    if (STRNCMP(*argp, "<nomodeline>", 12) == 0)
+    {
+	*argp = skipwhite(*argp + 12);
+	return FALSE;
+    }
+    return TRUE;
+}
+
+/*
  * Prepare for executing autocommands for (hidden) buffer "buf".
  * Search for a visible window containing the current buffer.  If there isn't
  * one then use "aucmd_win".
@@ -8833,7 +8876,7 @@
     else
     {
 	/* There is no window for "buf", use "aucmd_win".  To minimize the side
-	 * effects, insert it in a the current tab page.
+	 * effects, insert it in the current tab page.
 	 * Anything related to a window (e.g., setting folds) may have
 	 * unexpected results. */
 	aco->use_aucmd_win = TRUE;
@@ -8901,12 +8944,13 @@
 		if (wp == aucmd_win)
 		{
 		    if (tp != curtab)
-			goto_tabpage_tp(tp);
+			goto_tabpage_tp(tp, TRUE, TRUE);
 		    win_goto(aucmd_win);
-		    break;
+		    goto win_found;
 		}
 	    }
 	}
+win_found:
 
 	/* Remove the window and frame from the tree of frames. */
 	(void)winframe_remove(curwin, &dummy, NULL);
@@ -8923,8 +8967,8 @@
 	    /* Hmm, original window disappeared.  Just use the first one. */
 	    curwin = firstwin;
 # ifdef FEAT_EVAL
-	vars_clear(&aucmd_win->w_vars.dv_hashtab);  /* free all w: variables */
-	hash_init(&aucmd_win->w_vars.dv_hashtab);   /* re-use the hashtab */
+	vars_clear(&aucmd_win->w_vars->dv_hashtab);  /* free all w: variables */
+	hash_init(&aucmd_win->w_vars->dv_hashtab);   /* re-use the hashtab */
 # endif
 #else
 	curwin = aco->save_curwin;
@@ -8965,6 +9009,10 @@
 		    && buf_valid(aco->new_curbuf)
 		    && aco->new_curbuf->b_ml.ml_mfp != NULL)
 	    {
+# if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
+		if (curwin->w_s == &curbuf->b_s)
+		    curwin->w_s = &aco->new_curbuf->b_s;
+# endif
 		--curbuf->b_nwindows;
 		curbuf = aco->new_curbuf;
 		curwin->w_buffer = curbuf;
@@ -9063,7 +9111,10 @@
 {
     int		state;
 
-    if (!did_cursorhold && has_cursorhold() && !Recording
+    if (!did_cursorhold
+	    && has_cursorhold()
+	    && !Recording
+	    && typebuf.tb_len == 0
 #ifdef FEAT_INS_EXPAND
 	    && !ins_compl_active()
 #endif
@@ -9094,6 +9145,33 @@
     return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
 }
 
+/*
+ * Return TRUE when there is a TextChanged autocommand defined.
+ */
+    int
+has_textchanged()
+{
+    return (first_autopat[(int)EVENT_TEXTCHANGED] != NULL);
+}
+
+/*
+ * Return TRUE when there is a TextChangedI autocommand defined.
+ */
+    int
+has_textchangedI()
+{
+    return (first_autopat[(int)EVENT_TEXTCHANGEDI] != NULL);
+}
+
+/*
+ * Return TRUE when there is an InsertCharPre autocommand defined.
+ */
+    int
+has_insertcharpre()
+{
+    return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL);
+}
+
     static int
 apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
     event_T	event;
@@ -9494,6 +9572,12 @@
 # endif
 }
 
+    int
+is_autocmd_blocked()
+{
+    return autocmd_blocked != 0;
+}
+
 /*
  * Find next autocommand pattern that matches.
  */
@@ -9563,7 +9647,7 @@
  * Called by do_cmdline() to get the next line for ":if".
  * Returns allocated string, or NULL for end of autocommands.
  */
-    static char_u *
+    char_u *
 getnextac(c, cookie, indent)
     int	    c UNUSED;
     void    *cookie;
@@ -9935,11 +10019,7 @@
     int		match = FALSE;
 #endif
 
-#ifdef CASE_INSENSITIVE_FILENAME
-    regmatch.rm_ic = TRUE;		/* Always ignore case */
-#else
-    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
-#endif
+    regmatch.rm_ic = p_fic; /* ignore case if 'fileignorecase' is set */
 #ifdef FEAT_OSFILETYPE
     if (*pattern == '<')
     {
@@ -9954,6 +10034,8 @@
 	    if ((c == ';' || c == '>') && match == FALSE)
 	    {
 		*pattern = NUL;	    /* Terminate the string */
+		/* TODO: match with 'filetype' of buffer that "fname" comes
+		 * from. */
 		match = mch_check_filetype(fname, type_start);
 		*pattern = c;	    /* Restore the terminator */
 		type_start = pattern + 1;
@@ -10004,7 +10086,7 @@
 	result = TRUE;
 
     if (prog == NULL)
-	vim_free(regmatch.regprog);
+	vim_regfree(regmatch.regprog);
     return result;
 }
 #endif
@@ -10181,19 +10263,11 @@
 		    ++p;
 		break;
 	    case '.':
-#ifdef RISCOS
-		if (allow_dirs != NULL)
-		     *allow_dirs = TRUE;
-		/* FALLTHROUGH */
-#endif
 	    case '~':
 		reg_pat[i++] = '\\';
 		reg_pat[i++] = *p;
 		break;
 	    case '?':
-#ifdef RISCOS
-	    case '#':
-#endif
 		reg_pat[i++] = '.';
 		break;
 	    case '\\':
@@ -10227,7 +10301,10 @@
 		 * foo\,bar -> foo,bar
 		 * foo\ bar -> foo bar
 		 * Don't unescape \, * and others that are also special in a
-		 * regexp. */
+		 * regexp.
+		 * An escaped { must be unescaped since we use magic not
+		 * verymagic.
+		 */
 		if (*++p == '?'
 #ifdef BACKSLASH_IN_FILENAME
 			&& no_bslash
@@ -10235,7 +10312,8 @@
 			)
 		    reg_pat[i++] = '?';
 		else
-		    if (*p == ',' || *p == '%' || *p == '#' || *p == ' ')
+		    if (*p == ',' || *p == '%' || *p == '#'
+						    || *p == ' ' || *p == '{')
 			reg_pat[i++] = *p;
 		    else
 		    {
@@ -10304,3 +10382,55 @@
     }
     return reg_pat;
 }
+
+#if defined(EINTR) || defined(PROTO)
+/*
+ * Version of read() that retries when interrupted by EINTR (possibly
+ * by a SIGWINCH).
+ */
+    long
+read_eintr(fd, buf, bufsize)
+    int	    fd;
+    void    *buf;
+    size_t  bufsize;
+{
+    long ret;
+
+    for (;;)
+    {
+	ret = vim_read(fd, buf, bufsize);
+	if (ret >= 0 || errno != EINTR)
+	    break;
+    }
+    return ret;
+}
+
+/*
+ * Version of write() that retries when interrupted by EINTR (possibly
+ * by a SIGWINCH).
+ */
+    long
+write_eintr(fd, buf, bufsize)
+    int	    fd;
+    void    *buf;
+    size_t  bufsize;
+{
+    long    ret = 0;
+    long    wlen;
+
+    /* Repeat the write() so long it didn't fail, other than being interrupted
+     * by a signal. */
+    while (ret < (long)bufsize)
+    {
+	wlen = vim_write(fd, (char *)buf + ret, bufsize - ret);
+	if (wlen < 0)
+	{
+	    if (errno != EINTR)
+		break;
+	}
+	else
+	    ret += wlen;
+    }
+    return ret;
+}
+#endif
diff -Naur vim73.orig/src/fold.c vim73/src/fold.c
--- vim73.orig/src/fold.c	2010-06-22 04:20:24.000000000 +0000
+++ vim73/src/fold.c	2013-08-04 19:09:10.260611578 +0000
@@ -1033,10 +1033,10 @@
  * Init the fold info in a new window.
  */
     void
-foldInitWin(newwin)
-    win_T	*newwin;
+foldInitWin(new_win)
+    win_T	*new_win;
 {
-    ga_init2(&newwin->w_folds, (int)sizeof(fold_T), 10);
+    ga_init2(&new_win->w_folds, (int)sizeof(fold_T), 10);
 }
 
 /* find_wl_entry() {{{2 */
@@ -1469,11 +1469,14 @@
     }
     else
     {
-	/* move nested folds one level up, to overwrite the fold that is
+	/* Move nested folds one level up, to overwrite the fold that is
 	 * deleted. */
 	moved = fp->fd_nested.ga_len;
 	if (ga_grow(gap, (int)(moved - 1)) == OK)
 	{
+	    /* Get "fp" again, the array may have been reallocated. */
+	    fp = (fold_T *)gap->ga_data + idx;
+
 	    /* adjust fd_top and fd_flags for the moved folds */
 	    nfp = (fold_T *)fp->fd_nested.ga_data;
 	    for (i = 0; i < moved; ++i)
@@ -1486,9 +1489,9 @@
 	    }
 
 	    /* move the existing folds down to make room */
-	    if (idx < gap->ga_len)
+	    if (idx + 1 < gap->ga_len)
 		mch_memmove(fp + moved, fp + 1,
-					sizeof(fold_T) * (gap->ga_len - idx));
+				  sizeof(fold_T) * (gap->ga_len - (idx + 1)));
 	    /* move the contained folds one level up */
 	    mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
 	    vim_free(nfp);
@@ -1927,8 +1930,22 @@
     char_u	*buf;
 {
     char_u	*text = NULL;
-
 #ifdef FEAT_EVAL
+     /* an error occurred when evaluating 'fdt' setting */
+    static int	    got_fdt_error = FALSE;
+    int		    save_did_emsg = did_emsg;
+    static win_T    *last_wp = NULL;
+    static linenr_T last_lnum = 0;
+
+    if (last_wp != wp || last_wp == NULL
+					|| last_lnum > lnum || last_lnum == 0)
+	/* window changed, try evaluating foldtext setting once again */
+	got_fdt_error = FALSE;
+
+    if (!got_fdt_error)
+	/* a previous error should not abort evaluating 'foldexpr' */
+	did_emsg = FALSE;
+
     if (*wp->w_p_fdt != NUL)
     {
 	char_u	dashes[MAX_LEVEL + 2];
@@ -1949,19 +1966,32 @@
 	dashes[level] = NUL;
 	set_vim_var_string(VV_FOLDDASHES, dashes, -1);
 	set_vim_var_nr(VV_FOLDLEVEL, (long)level);
-	save_curwin = curwin;
-	curwin = wp;
-	curbuf = wp->w_buffer;
 
-	++emsg_off;
-	text = eval_to_string_safe(wp->w_p_fdt, NULL,
+	/* skip evaluating foldtext on errors */
+	if (!got_fdt_error)
+	{
+	    save_curwin = curwin;
+	    curwin = wp;
+	    curbuf = wp->w_buffer;
+
+	    ++emsg_silent; /* handle exceptions, but don't display errors */
+	    text = eval_to_string_safe(wp->w_p_fdt, NULL,
 			 was_set_insecurely((char_u *)"foldtext", OPT_LOCAL));
-	--emsg_off;
+	    --emsg_silent;
+
+	    if (text == NULL || did_emsg)
+		got_fdt_error = TRUE;
 
-	curwin = save_curwin;
-	curbuf = curwin->w_buffer;
+	    curwin = save_curwin;
+	    curbuf = curwin->w_buffer;
+	}
+	last_lnum = lnum;
+	last_wp   = wp;
 	set_vim_var_string(VV_FOLDDASHES, NULL, -1);
 
+	if (!did_emsg && save_did_emsg)
+	    did_emsg = save_did_emsg;
+
 	if (text != NULL)
 	{
 	    /* Replace unprintable characters, if there are any.  But
@@ -3022,7 +3052,7 @@
 	    flp->lvl = -1;
     }
     else
-	flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw;
+	flp->lvl = get_indent_buf(buf, lnum) / get_sw_value();
     if (flp->lvl > flp->wp->w_p_fdn)
     {
 	flp->lvl = flp->wp->w_p_fdn;
@@ -3289,7 +3319,8 @@
 /* put_folds() {{{2 */
 #if defined(FEAT_SESSION) || defined(PROTO)
 static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
-static int put_foldopen_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+static int put_foldopen_recurse __ARGS((FILE *fd, win_T *wp, garray_T *gap, linenr_T off));
+static int put_fold_open_close __ARGS((FILE *fd, fold_T *fp, linenr_T off));
 
 /*
  * Write commands to "fd" to restore the manual folds in window "wp".
@@ -3309,7 +3340,7 @@
 
     /* If some folds are manually opened/closed, need to restore that. */
     if (wp->w_fold_manual)
-	return put_foldopen_recurse(fd, &wp->w_folds, (linenr_T)0);
+	return put_foldopen_recurse(fd, wp, &wp->w_folds, (linenr_T)0);
 
     return OK;
 }
@@ -3349,12 +3380,14 @@
  * Returns FAIL when writing failed.
  */
     static int
-put_foldopen_recurse(fd, gap, off)
+put_foldopen_recurse(fd, wp, gap, off)
     FILE	*fd;
+    win_T	*wp;
     garray_T	*gap;
     linenr_T	off;
 {
     int		i;
+    int		level;
     fold_T	*fp;
 
     fp = (fold_T *)gap->ga_data;
@@ -3364,27 +3397,60 @@
 	{
 	    if (fp->fd_nested.ga_len > 0)
 	    {
-		/* open/close nested folds while this fold is open */
+		/* open nested folds while this fold is open */
 		if (fprintf(fd, "%ld", fp->fd_top + off) < 0
 			|| put_eol(fd) == FAIL
-			|| put_line(fd, "normal zo") == FAIL)
+			|| put_line(fd, "normal! zo") == FAIL)
 		    return FAIL;
-		if (put_foldopen_recurse(fd, &fp->fd_nested, off + fp->fd_top)
+		if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
+							     off + fp->fd_top)
 			== FAIL)
 		    return FAIL;
+		/* close the parent when needed */
+		if (fp->fd_flags == FD_CLOSED)
+		{
+		    if (put_fold_open_close(fd, fp, off) == FAIL)
+			return FAIL;
+		}
+	    }
+	    else
+	    {
+		/* Open or close the leaf according to the window foldlevel.
+		 * Do not close a leaf that is already closed, as it will close
+		 * the parent. */
+		level = foldLevelWin(wp, off + fp->fd_top);
+		if ((fp->fd_flags == FD_CLOSED && wp->w_p_fdl >= level)
+			|| (fp->fd_flags != FD_CLOSED && wp->w_p_fdl < level))
+		if (put_fold_open_close(fd, fp, off) == FAIL)
+		    return FAIL;
 	    }
-	    if (fprintf(fd, "%ld", fp->fd_top + off) < 0
-		    || put_eol(fd) == FAIL
-		    || fprintf(fd, "normal z%c",
-				    fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
-		    || put_eol(fd) == FAIL)
-		return FAIL;
 	}
 	++fp;
     }
 
     return OK;
 }
+
+/* put_fold_open_close() {{{2 */
+/*
+ * Write the open or close command to "fd".
+ * Returns FAIL when writing failed.
+ */
+    static int
+put_fold_open_close(fd, fp, off)
+    FILE	*fd;
+    fold_T	*fp;
+    linenr_T	off;
+{
+    if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+	    || put_eol(fd) == FAIL
+	    || fprintf(fd, "normal! z%c",
+			   fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+	    || put_eol(fd) == FAIL)
+	return FAIL;
+
+    return OK;
+}
 #endif /* FEAT_SESSION */
 
 /* }}}1 */
diff -Naur vim73.orig/src/getchar.c vim73/src/getchar.c
--- vim73.orig/src/getchar.c	2010-08-08 13:00:33.000000000 +0000
+++ vim73/src/getchar.c	2013-08-04 19:09:10.267278225 +0000
@@ -418,12 +418,12 @@
 
 /*
  * Remove the contents of the stuff buffer and the mapped characters in the
- * typeahead buffer (used in case of an error).  If 'typeahead' is true,
+ * typeahead buffer (used in case of an error).  If "flush_typeahead" is true,
  * flush all typeahead characters (used when interrupted by a CTRL-C).
  */
     void
-flush_buffers(typeahead)
-    int typeahead;
+flush_buffers(flush_typeahead)
+    int flush_typeahead;
 {
     init_typebuf();
 
@@ -431,7 +431,7 @@
     while (read_stuff(TRUE) != NUL)
 	;
 
-    if (typeahead)	    /* remove all typeahead */
+    if (flush_typeahead)	    /* remove all typeahead */
     {
 	/*
 	 * We have to get all characters, because we may delete the first part
@@ -444,7 +444,7 @@
 	typebuf.tb_off = MAXMAPLEN;
 	typebuf.tb_len = 0;
     }
-    else		    /* remove mapped characters only */
+    else		    /* remove mapped characters at the start only */
     {
 	typebuf.tb_off += typebuf.tb_maplen;
 	typebuf.tb_len -= typebuf.tb_maplen;
@@ -470,6 +470,24 @@
     }
 }
 
+/*
+ * Discard the contents of the redo buffer and restore the previous redo
+ * buffer.
+ */
+    void
+CancelRedo()
+{
+    if (!block_redo)
+    {
+	free_buff(&redobuff);
+	redobuff = old_redobuff;
+	old_redobuff.bh_first.b_next = NULL;
+	start_stuff();
+	while (read_stuff(TRUE) != NUL)
+	    ;
+    }
+}
+
 #if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Save redobuff and old_redobuff to save_redobuff and save_old_redobuff.
@@ -635,11 +653,14 @@
 /*
  * Stuff "s" into the stuff buffer, leaving special key codes unmodified and
  * escaping other K_SPECIAL and CSI bytes.
+ * Change CR, LF and ESC into a space.
  */
     void
 stuffReadbuffSpec(s)
     char_u	*s;
 {
+    int c;
+
     while (*s != NUL)
     {
 	if (*s == K_SPECIAL && s[1] != NUL && s[2] != NUL)
@@ -649,11 +670,16 @@
 	    s += 3;
 	}
 	else
+	{
 #ifdef FEAT_MBYTE
-	    stuffcharReadbuff(mb_ptr2char_adv(&s));
+	    c = mb_ptr2char_adv(&s);
 #else
-	    stuffcharReadbuff(*s++);
+	    c = *s++;
 #endif
+	    if (c == CAR || c == NL || c == ESC)
+		c = ' ';
+	    stuffcharReadbuff(c);
+	}
     }
 }
 #endif
@@ -683,9 +709,9 @@
  * Read a character from the redo buffer.  Translates K_SPECIAL, CSI and
  * multibyte characters.
  * The redo buffer is left as it is.
- * if init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
- * otherwise
- * if old is TRUE, use old_redobuff instead of redobuff
+ * If init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
+ * otherwise.
+ * If old is TRUE, use old_redobuff instead of redobuff.
  */
     static int
 read_redo(init, old_redo)
@@ -697,7 +723,7 @@
     int				c;
 #ifdef FEAT_MBYTE
     int				n;
-    char_u			buf[MB_MAXBYTES];
+    char_u			buf[MB_MAXBYTES + 1];
     int				i;
 #endif
 
@@ -1046,7 +1072,7 @@
     int	    c;
 {
 #ifdef FEAT_MBYTE
-    char_u	buf[MB_MAXBYTES];
+    char_u	buf[MB_MAXBYTES + 1];
 #else
     char_u	buf[4];
 #endif
@@ -1311,6 +1337,10 @@
 
 static int old_char = -1;	/* character put back by vungetc() */
 static int old_mod_mask;	/* mod_mask for ungotten character */
+#ifdef FEAT_MOUSE
+static int old_mouse_row;	/* mouse_row related to old_char */
+static int old_mouse_col;	/* mouse_col related to old_char */
+#endif
 
 #if defined(FEAT_EVAL) || defined(FEAT_EX_EXTRA) || defined(PROTO)
 
@@ -1506,9 +1536,6 @@
     }
 }
 
-#define KL_PART_KEY -1		/* keylen value for incomplete key-code */
-#define KL_PART_MAP -2		/* keylen value for incomplete mapping */
-
 /*
  * Get the next input character.
  * Can return a special key or a multi-byte character.
@@ -1524,7 +1551,7 @@
     int		c, c2;
 #ifdef FEAT_MBYTE
     int		n;
-    char_u	buf[MB_MAXBYTES];
+    char_u	buf[MB_MAXBYTES + 1];
     int		i;
 #endif
 
@@ -1544,6 +1571,10 @@
 	c = old_char;
 	old_char = -1;
 	mod_mask = old_mod_mask;
+#ifdef FEAT_MOUSE
+	mouse_row = old_mouse_row;
+	mouse_col = old_mouse_col;
+#endif
     }
     else
     {
@@ -1854,6 +1885,10 @@
 {
     old_char = c;
     old_mod_mask = mod_mask;
+#ifdef FEAT_MOUSE
+    old_mouse_row = mouse_row;
+    old_mouse_col = mouse_col;
+#endif
 }
 
 /*
@@ -2072,6 +2107,7 @@
 			mp2 = maphash[MAP_HASH(local_State, c1)];
 			if (mp == NULL)
 			{
+			    /* There are no buffer-local mappings. */
 			    mp = mp2;
 			    mp2 = NULL;
 			}
@@ -2168,10 +2204,11 @@
 
 				    if (keylen > typebuf.tb_len)
 				    {
-					if (!timedout)
+					if (!timedout && !(mp_match != NULL
+						       && mp_match->m_nowait))
 					{
 					    /* break at a partly match */
-					    keylen = KL_PART_MAP;
+					    keylen = KEYLEN_PART_MAP;
 					    break;
 					}
 				    }
@@ -2192,7 +2229,7 @@
 
 			/* If no partly match found, use the longest full
 			 * match. */
-			if (keylen != KL_PART_MAP)
+			if (keylen != KEYLEN_PART_MAP)
 			{
 			    mp = mp_match;
 			    keylen = mp_match_len;
@@ -2230,7 +2267,7 @@
 			}
 			/* Need more chars for partly match. */
 			if (mlen == typebuf.tb_len)
-			    keylen = KL_PART_KEY;
+			    keylen = KEYLEN_PART_KEY;
 			else if (max_mlen < mlen)
 			    /* no match, may have to check for termcode at
 			     * next character */
@@ -2238,7 +2275,7 @@
 		    }
 
 		    if ((mp == NULL || max_mlen >= mp_match_len)
-						     && keylen != KL_PART_MAP)
+						 && keylen != KEYLEN_PART_MAP)
 		    {
 			int	save_keylen = keylen;
 
@@ -2259,13 +2296,14 @@
 						   typebuf.tb_off] == RM_YES))
 				&& !timedout)
 			{
-			    keylen = check_termcode(max_mlen + 1, NULL, 0);
+			    keylen = check_termcode(max_mlen + 1,
+							       NULL, 0, NULL);
 
 			    /* If no termcode matched but 'pastetoggle'
 			     * matched partially it's like an incomplete key
 			     * sequence. */
-			    if (keylen == 0 && save_keylen == KL_PART_KEY)
-				keylen = KL_PART_KEY;
+			    if (keylen == 0 && save_keylen == KEYLEN_PART_KEY)
+				keylen = KEYLEN_PART_KEY;
 
 			    /*
 			     * When getting a partial match, but the last
@@ -2302,7 +2340,7 @@
 				    continue;
 				}
 				if (*s == NUL)	    /* need more characters */
-				    keylen = KL_PART_KEY;
+				    keylen = KEYLEN_PART_KEY;
 			    }
 			    if (keylen >= 0)
 #endif
@@ -2339,7 +2377,8 @@
 			if (keylen > 0)	    /* full matching terminal code */
 			{
 #if defined(FEAT_GUI) && defined(FEAT_MENU)
-			    if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
+			    if (typebuf.tb_len >= 2
+				&& typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
 					 && typebuf.tb_buf[typebuf.tb_off + 1]
 								   == KS_MENU)
 			    {
@@ -2381,7 +2420,7 @@
 			/* Partial match: get some more characters.  When a
 			 * matching mapping was found use that one. */
 			if (mp == NULL || keylen < 0)
-			    keylen = KL_PART_KEY;
+			    keylen = KEYLEN_PART_KEY;
 			else
 			    keylen = mp_match_len;
 		    }
@@ -2454,27 +2493,18 @@
 
 			/*
 			 * Handle ":map <expr>": evaluate the {rhs} as an
-			 * expression.  Save and restore the typeahead so that
-			 * getchar() can be used.  Also save and restore the
-			 * command line for "normal :".
+			 * expression.  Also save and restore the command line
+			 * for "normal :".
 			 */
 			if (mp->m_expr)
 			{
-			    tasave_T	tabuf;
 			    int		save_vgetc_busy = vgetc_busy;
 
-			    save_typeahead(&tabuf);
-			    if (tabuf.typebuf_valid)
-			    {
-				vgetc_busy = 0;
-				save_m_keys = vim_strsave(mp->m_keys);
-				save_m_str = vim_strsave(mp->m_str);
-				s = eval_map_expr(save_m_str, NUL);
-				vgetc_busy = save_vgetc_busy;
-			    }
-			    else
-				s = NULL;
-			    restore_typeahead(&tabuf);
+			    vgetc_busy = 0;
+			    save_m_keys = vim_strsave(mp->m_keys);
+			    save_m_str = vim_strsave(mp->m_str);
+			    s = eval_map_expr(save_m_str, NUL);
+			    vgetc_busy = save_vgetc_busy;
 			}
 			else
 #endif
@@ -2553,7 +2583,8 @@
 #endif
 			&& typebuf.tb_maplen == 0
 			&& (State & INSERT)
-			&& (p_timeout || (keylen == KL_PART_KEY && p_ttimeout))
+			&& (p_timeout
+			    || (keylen == KEYLEN_PART_KEY && p_ttimeout))
 			&& (c = inchar(typebuf.tb_buf + typebuf.tb_off
 						     + typebuf.tb_len, 3, 25L,
 						 typebuf.tb_change_cnt)) == 0)
@@ -2711,8 +2742,11 @@
 		 * are still available.  But when those available characters
 		 * are part of a mapping, and we are going to do a blocking
 		 * wait here.  Need to update the screen to display the
-		 * changed text so far. */
-		if ((State & INSERT) && advance && must_redraw != 0)
+		 * changed text so far. Also for when 'lazyredraw' is set and
+		 * redrawing was postponed because there was something in the
+		 * input buffer (e.g., termresponse). */
+		if (((State & INSERT) != 0 || p_lz) && (State & CMDLINE) == 0
+			  && advance && must_redraw != 0 && !need_wait_return)
 		{
 		    update_screen(0);
 		    setcursor(); /* put cursor back where it belongs */
@@ -2783,9 +2817,9 @@
 			    ? 0
 			    : ((typebuf.tb_len == 0
 				    || !(p_timeout || (p_ttimeout
-						   && keylen == KL_PART_KEY)))
+					       && keylen == KEYLEN_PART_KEY)))
 				    ? -1L
-				    : ((keylen == KL_PART_KEY && p_ttm >= 0)
+				    : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
 					    ? p_ttm
 					    : p_tm)), typebuf.tb_change_cnt);
 
@@ -2799,7 +2833,8 @@
 			edit_unputchar();
 		    if (State & CMDLINE)
 			unputcmdline();
-		    setcursor();	/* put cursor back where it belongs */
+		    else
+			setcursor();	/* put cursor back where it belongs */
 		}
 
 		if (c < 0)
@@ -3162,12 +3197,14 @@
     mapblock_T	**abbr_table;
     mapblock_T	**map_table;
     int		unique = FALSE;
+    int		nowait = FALSE;
     int		silent = FALSE;
     int		special = FALSE;
 #ifdef FEAT_EVAL
     int		expr = FALSE;
 #endif
     int		noremap;
+    char_u      *orig_rhs;
 
     keys = arg;
     map_table = maphash;
@@ -3179,7 +3216,8 @@
     else
 	noremap = REMAP_YES;
 
-    /* Accept <buffer>, <silent>, <expr> <script> and <unique> in any order. */
+    /* Accept <buffer>, <nowait>, <silent>, <expr> <script> and <unique> in
+     * any order. */
     for (;;)
     {
 #ifdef FEAT_LOCALMAP
@@ -3196,6 +3234,16 @@
 #endif
 
 	/*
+	 * Check for "<nowait>": don't wait for more characters.
+	 */
+	if (STRNCMP(keys, "<nowait>", 8) == 0)
+	{
+	    keys = skipwhite(keys + 8);
+	    nowait = TRUE;
+	    continue;
+	}
+
+	/*
 	 * Check for "<silent>": don't echo commands.
 	 */
 	if (STRNCMP(keys, "<silent>", 8) == 0)
@@ -3251,9 +3299,9 @@
     validate_maphash();
 
     /*
-     * find end of keys and skip CTRL-Vs (and backslashes) in it
+     * Find end of keys and skip CTRL-Vs (and backslashes) in it.
      * Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
-     * with :unmap white space is included in the keys, no argument possible
+     * with :unmap white space is included in the keys, no argument possible.
      */
     p = keys;
     do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
@@ -3266,6 +3314,7 @@
     }
     if (*p != NUL)
 	*p++ = NUL;
+
     p = skipwhite(p);
     rhs = p;
     hasarg = (*rhs != NUL);
@@ -3288,6 +3337,7 @@
      */
     if (haskey)
 	keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special);
+    orig_rhs = rhs;
     if (hasarg)
     {
 	if (STRICMP(rhs, "<nop>") == 0)	    /* "<Nop>" means nothing */
@@ -3298,7 +3348,7 @@
 
 #ifdef FEAT_FKMAP
     /*
-     * when in right-to-left mode and alternate keymap option set,
+     * When in right-to-left mode and alternate keymap option set,
      * reverse the character flow in the rhs in Farsi.
      */
     if (p_altkeymap && curwin->w_p_rl)
@@ -3556,7 +3606,10 @@
 				}
 				vim_free(mp->m_str);
 				mp->m_str = newstr;
+				vim_free(mp->m_orig_str);
+				mp->m_orig_str = vim_strsave(orig_rhs);
 				mp->m_noremap = noremap;
+				mp->m_nowait = nowait;
 				mp->m_silent = silent;
 				mp->m_mode = mode;
 #ifdef FEAT_EVAL
@@ -3633,16 +3686,19 @@
 
     mp->m_keys = vim_strsave(keys);
     mp->m_str = vim_strsave(rhs);
+    mp->m_orig_str = vim_strsave(orig_rhs);
     if (mp->m_keys == NULL || mp->m_str == NULL)
     {
 	vim_free(mp->m_keys);
 	vim_free(mp->m_str);
+	vim_free(mp->m_orig_str);
 	vim_free(mp);
 	retval = 4;	/* no mem */
 	goto theend;
     }
     mp->m_keylen = (int)STRLEN(mp->m_keys);
     mp->m_noremap = noremap;
+    mp->m_nowait = nowait;
     mp->m_silent = silent;
     mp->m_mode = mode;
 #ifdef FEAT_EVAL
@@ -3682,6 +3738,7 @@
     mp = *mpp;
     vim_free(mp->m_keys);
     vim_free(mp->m_str);
+    vim_free(mp->m_orig_str);
     *mpp = mp->m_next;
     vim_free(mp);
 }
@@ -3851,12 +3908,57 @@
     }
 }
 
+/*
+ * Return characters to represent the map mode in an allocated string.
+ * Returns NULL when out of memory.
+ */
+    char_u *
+map_mode_to_chars(mode)
+    int mode;
+{
+    garray_T    mapmode;
+
+    ga_init2(&mapmode, 1, 7);
+
+    if ((mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
+	ga_append(&mapmode, '!');			/* :map! */
+    else if (mode & INSERT)
+	ga_append(&mapmode, 'i');			/* :imap */
+    else if (mode & LANGMAP)
+	ga_append(&mapmode, 'l');			/* :lmap */
+    else if (mode & CMDLINE)
+	ga_append(&mapmode, 'c');			/* :cmap */
+    else if ((mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
+				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
+	ga_append(&mapmode, ' ');			/* :map */
+    else
+    {
+	if (mode & NORMAL)
+	    ga_append(&mapmode, 'n');			/* :nmap */
+	if (mode & OP_PENDING)
+	    ga_append(&mapmode, 'o');			/* :omap */
+	if ((mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
+	    ga_append(&mapmode, 'v');			/* :vmap */
+	else
+	{
+	    if (mode & VISUAL)
+		ga_append(&mapmode, 'x');		/* :xmap */
+	    if (mode & SELECTMODE)
+		ga_append(&mapmode, 's');		/* :smap */
+	}
+    }
+
+    ga_append(&mapmode, NUL);
+    return (char_u *)mapmode.ga_data;
+}
+
     static void
 showmap(mp, local)
     mapblock_T	*mp;
     int		local;	    /* TRUE for buffer-local map */
 {
-    int len = 1;
+    int		len = 1;
+    char_u	*mapchars;
 
     if (msg_didout || msg_silent != 0)
     {
@@ -3864,49 +3966,15 @@
 	if (got_int)	    /* 'q' typed at MORE prompt */
 	    return;
     }
-    if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
-	msg_putchar('!');			/* :map! */
-    else if (mp->m_mode & INSERT)
-	msg_putchar('i');			/* :imap */
-    else if (mp->m_mode & LANGMAP)
-	msg_putchar('l');			/* :lmap */
-    else if (mp->m_mode & CMDLINE)
-	msg_putchar('c');			/* :cmap */
-    else if ((mp->m_mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
-				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
-	msg_putchar(' ');			/* :map */
-    else
+
+    mapchars = map_mode_to_chars(mp->m_mode);
+    if (mapchars != NULL)
     {
-	len = 0;
-	if (mp->m_mode & NORMAL)
-	{
-	    msg_putchar('n');		/* :nmap */
-	    ++len;
-	}
-	if (mp->m_mode & OP_PENDING)
-	{
-	    msg_putchar('o');		/* :omap */
-	    ++len;
-	}
-	if ((mp->m_mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
-	{
-	    msg_putchar('v');		/* :vmap */
-	    ++len;
-	}
-	else
-	{
-	    if (mp->m_mode & VISUAL)
-	    {
-		msg_putchar('x');		/* :xmap */
-		++len;
-	    }
-	    if (mp->m_mode & SELECTMODE)
-	    {
-		msg_putchar('s');		/* :smap */
-		++len;
-	    }
-	}
+	msg_puts(mapchars);
+	len = (int)STRLEN(mapchars);
+	vim_free(mapchars);
     }
+
     while (++len <= 3)
 	msg_putchar(' ');
 
@@ -3931,12 +3999,21 @@
 	msg_putchar(' ');
 
     /* Use FALSE below if we only want things like <Up> to show up as such on
-     * the rhs, and not M-x etc, TRUE gets both -- webb
-     */
+     * the rhs, and not M-x etc, TRUE gets both -- webb */
     if (*mp->m_str == NUL)
 	msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
     else
-	msg_outtrans_special(mp->m_str, FALSE);
+    {
+	/* Remove escaping of CSI, because "m_str" is in a format to be used
+	 * as typeahead. */
+	char_u *s = vim_strsave(mp->m_str);
+	if (s != NULL)
+	{
+	    vim_unescape_csi(s);
+	    msg_outtrans_special(s, FALSE);
+	    vim_free(s);
+	}
+    }
 #ifdef FEAT_EVAL
     if (p_verbose > 0)
 	last_set_msg(mp->m_script_ID);
@@ -4100,6 +4177,11 @@
 		arg = skipwhite(arg + 8);
 		continue;
 	    }
+	    if (STRNCMP(arg, "<nowait>", 8) == 0)
+	    {
+		arg = skipwhite(arg + 8);
+		continue;
+	    }
 	    if (STRNCMP(arg, "<silent>", 8) == 0)
 	    {
 		arg = skipwhite(arg + 8);
@@ -4156,7 +4238,7 @@
     {
 	count = 0;
 
-	for (i = 0; i < 5; ++i)
+	for (i = 0; i < 6; ++i)
 	{
 	    if (i == 0)
 		p = (char_u *)"<silent>";
@@ -4172,6 +4254,8 @@
 	    else if (i == 4 && !expand_buffer)
 		p = (char_u *)"<buffer>";
 #endif
+	    else if (i == 5)
+		p = (char_u *)"<nowait>";
 	    else
 		continue;
 
@@ -4287,11 +4371,7 @@
     int		scol;		/* starting column of the abbr. */
     int		j;
     char_u	*s;
-#ifdef FEAT_MBYTE
     char_u	tb[MB_MAXBYTES + 4];
-#else
-    char_u	tb[4];
-#endif
     mapblock_T	*mp;
 #ifdef FEAT_LOCALMAP
     mapblock_T	*mp2;
@@ -4304,8 +4384,9 @@
 
     if (typebuf.tb_no_abbr_cnt)	/* abbrev. are not recursive */
 	return FALSE;
-    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0)
-	/* no remapping implies no abbreviation */
+
+    /* no remapping implies no abbreviation, except for CTRL-] */
+    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0 && c != Ctrl_RSB)
 	return FALSE;
 
     /*
@@ -4478,12 +4559,25 @@
 {
     char_u	*res;
     char_u	*p;
+    char_u	*expr;
     char_u	*save_cmd;
     pos_T	save_cursor;
+    int		save_msg_col;
+    int		save_msg_row;
+
+    /* Remove escaping of CSI, because "str" is in a format to be used as
+     * typeahead. */
+    expr = vim_strsave(str);
+    if (expr == NULL)
+	return NULL;
+    vim_unescape_csi(expr);
 
     save_cmd = save_cmdline_alloc();
     if (save_cmd == NULL)
+    {
+	vim_free(expr);
 	return NULL;
+    }
 
     /* Forbid changing text or using ":normal" to avoid most of the bad side
      * effects.  Also restore the cursor position. */
@@ -4493,16 +4587,23 @@
 #endif
     set_vim_var_char(c);  /* set v:char to the typed character */
     save_cursor = curwin->w_cursor;
-    p = eval_to_string(str, NULL, FALSE);
+    save_msg_col = msg_col;
+    save_msg_row = msg_row;
+    p = eval_to_string(expr, NULL, FALSE);
     --textlock;
 #ifdef FEAT_EX_EXTRA
     --ex_normal_lock;
 #endif
     curwin->w_cursor = save_cursor;
+    msg_col = save_msg_col;
+    msg_row = save_msg_row;
 
     restore_cmdline_alloc(save_cmd);
+    vim_free(expr);
+
     if (p == NULL)
 	return NULL;
+    /* Escape CSI in the result to be able to use the string as typeahead. */
     res = vim_strsave_escape_csi(p);
     vim_free(p);
 
@@ -4538,9 +4639,21 @@
 	    }
 	    else
 	    {
+#ifdef FEAT_MBYTE
+		int len  = mb_char2len(PTR2CHAR(s));
+		int len2 = mb_ptr2len(s);
+#endif
 		/* Add character, possibly multi-byte to destination, escaping
 		 * CSI and K_SPECIAL. */
 		d = add_char2buf(PTR2CHAR(s), d);
+#ifdef FEAT_MBYTE
+		while (len < len2)
+		{
+		    /* add following combining char */
+		    d = add_char2buf(PTR2CHAR(s + len), d);
+		    len += mb_char2len(PTR2CHAR(s + len));
+		}
+#endif
 		mb_ptr_adv(s);
 	    }
 	}
@@ -4755,6 +4868,8 @@
 			return FAIL;
 		    if (buf != NULL && fputs(" <buffer>", fd) < 0)
 			return FAIL;
+		    if (mp->m_nowait && fputs(" <nowait>", fd) < 0)
+			return FAIL;
 		    if (mp->m_silent && fputs(" <silent>", fd) < 0)
 			return FAIL;
 #ifdef FEAT_EVAL
@@ -4995,19 +5110,21 @@
     sourcing_name = save_name;
 }
 
-#ifdef FEAT_EVAL
+#if defined(FEAT_EVAL) || defined(PROTO)
 /*
- * Check the string "keys" against the lhs of all mappings
- * Return pointer to rhs of mapping (mapblock->m_str)
- * NULL otherwise
+ * Check the string "keys" against the lhs of all mappings.
+ * Return pointer to rhs of mapping (mapblock->m_str).
+ * NULL when no mapping found.
  */
     char_u *
-check_map(keys, mode, exact, ign_mod, abbr)
+check_map(keys, mode, exact, ign_mod, abbr, mp_ptr, local_ptr)
     char_u	*keys;
     int		mode;
     int		exact;		/* require exact match */
     int		ign_mod;	/* ignore preceding modifier */
     int		abbr;		/* do abbreviations */
+    mapblock_T	**mp_ptr;	/* return: pointer to mapblock or NULL */
+    int		*local_ptr;	/* return: buffer-local mapping or NULL */
 {
     int		hash;
     int		len, minlen;
@@ -5062,7 +5179,17 @@
 			    minlen = mp->m_keylen - 3;
 		    }
 		    if (STRNCMP(s, keys, minlen) == 0)
+		    {
+			if (mp_ptr != NULL)
+			    *mp_ptr = mp;
+			if (local_ptr != NULL)
+#ifdef FEAT_LOCALMAP
+			    *local_ptr = local;
+#else
+			    *local_ptr = 0;
+#endif
 			return mp->m_str;
+		    }
 		}
 	    }
 	}
diff -Naur vim73.orig/src/glbl_ime.cpp vim73/src/glbl_ime.cpp
--- vim73.orig/src/glbl_ime.cpp	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/glbl_ime.cpp	2013-08-04 19:09:10.267278225 +0000
@@ -156,7 +156,7 @@
 }
 
 /*
- * Set position of IME compotision window.
+ * Set position of IME composition window.
  *
  * You have to call this before starting composition.  If once composition
  * started, this can take no effect until that composition have finished.  So
diff -Naur vim73.orig/src/globals.h vim73/src/globals.h
--- vim73.orig/src/globals.h	2010-07-23 19:20:45.000000000 +0000
+++ vim73/src/globals.h	2013-08-04 19:09:10.273944871 +0000
@@ -113,9 +113,9 @@
  * When '$' is included in 'cpoptions' option set:
  * When a change command is given that deletes only part of a line, a dollar
  * is put at the end of the changed text. dollar_vcol is set to the virtual
- * column of this '$'.
+ * column of this '$'.  -1 is used to indicate no $ is being displayed.
  */
-EXTERN colnr_T	dollar_vcol INIT(= 0);
+EXTERN colnr_T	dollar_vcol INIT(= -1);
 
 #ifdef FEAT_INS_EXPAND
 /*
@@ -180,9 +180,13 @@
 EXTERN int	emsg_severe INIT(= FALSE);   /* use message of next of several
 					       emsg() calls for throw */
 EXTERN int	did_endif INIT(= FALSE);    /* just had ":endif" */
+EXTERN dict_T	vimvardict;		    /* Dictionary with v: variables */
+EXTERN dict_T	globvardict;		    /* Dictionary with g: variables */
 #endif
 EXTERN int	did_emsg;		    /* set by emsg() when the message
 					       is displayed or thrown */
+EXTERN int	did_emsg_syntax;	    /* did_emsg set because of a
+					       syntax error */
 EXTERN int	called_emsg;		    /* always set by emsg() */
 EXTERN int	ex_exitval INIT(= 0);	    /* exit value for ex mode */
 EXTERN int	emsg_on_display INIT(= FALSE);	/* there is an error message */
@@ -510,9 +514,15 @@
 EXTERN VimClipboard clip_plus;	/* CLIPBOARD selection in X11 */
 # else
 #  define clip_plus clip_star	/* there is only one clipboard */
+#  define ONE_CLIPBOARD
 # endif
-EXTERN int	clip_unnamed INIT(= FALSE);
-EXTERN int	clip_autoselect INIT(= FALSE);
+
+# define CLIP_UNNAMED      1
+# define CLIP_UNNAMED_PLUS 2
+EXTERN int	clip_unnamed INIT(= 0); /* above two values or'ed */
+
+EXTERN int	clip_autoselect_star INIT(= FALSE);
+EXTERN int	clip_autoselect_plus INIT(= FALSE);
 EXTERN int	clip_autoselectml INIT(= FALSE);
 EXTERN int	clip_html INIT(= FALSE);
 EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
@@ -530,6 +540,10 @@
 EXTERN win_T	*prevwin INIT(= NULL);	/* previous window */
 # define W_NEXT(wp) ((wp)->w_next)
 # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
+/*
+ * When using this macro "break" only breaks out of the inner loop. Use "goto"
+ * to break out of the tabpage loop.
+ */
 # define FOR_ALL_TAB_WINDOWS(tp, wp) \
     for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \
 	for ((wp) = ((tp) == curtab) \
@@ -728,9 +742,9 @@
 #endif
 
 EXTERN pos_T	saved_cursor		/* w_cursor before formatting text. */
-# ifdef DO_INIT
+#ifdef DO_INIT
 	= INIT_POS_T(0, 0, 0)
-# endif
+#endif
 	;
 
 /*
@@ -790,7 +804,7 @@
 EXTERN int	enc_unicode INIT(= 0);	/* 2: UCS-2 or UTF-16, 4: UCS-4 */
 EXTERN int	enc_utf8 INIT(= FALSE);		/* UTF-8 encoded Unicode */
 EXTERN int	enc_latin1like INIT(= TRUE);	/* 'encoding' is latin1 comp. */
-# ifdef WIN3264
+# if defined(WIN3264) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
 /* Codepage nr of 'encoding'.  Negative means it's not been set yet, zero
  * means 'encoding' is not a valid codepage. */
 EXTERN int	enc_codepage INIT(= -1);
@@ -798,9 +812,9 @@
 # endif
 EXTERN int	has_mbyte INIT(= 0);		/* any multi-byte encoding */
 
-#if defined(WIN3264) && defined(FEAT_MBYTE)
+# if defined(WIN3264) && defined(FEAT_MBYTE)
 EXTERN int	wide_WindowProc INIT(= FALSE);	/* use wide WindowProc() */
-#endif
+# endif
 
 /*
  * To speed up BYTELEN() we fill a table with the byte lengths whenever
@@ -902,6 +916,10 @@
 EXTERN int allow_keys INIT(= FALSE);	/* allow key codes when no_mapping
 					 * is set */
 EXTERN int no_u_sync INIT(= 0);		/* Don't call u_sync() */
+#ifdef FEAT_EVAL
+EXTERN int u_sync_once INIT(= 0);	/* Call u_sync() once when evaluating
+					   an expression. */
+#endif
 
 EXTERN int restart_edit INIT(= 0);	/* call edit when next cmd finished */
 EXTERN int arrow_used;			/* Normally FALSE, set to TRUE after
@@ -1045,17 +1063,15 @@
 EXTERN int	autocmd_bufnr INIT(= 0);     /* fnum for <abuf> on cmdline */
 EXTERN char_u	*autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
 EXTERN int	did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
-EXTERN pos_T	last_cursormoved	    /* for CursorMoved event */
+EXTERN pos_T	last_cursormoved	      /* for CursorMoved event */
 # ifdef DO_INIT
 			= INIT_POS_T(0, 0, 0)
 # endif
 			;
+EXTERN int	last_changedtick INIT(= 0);   /* for TextChanged event */
+EXTERN buf_T	*last_changedtick_buf INIT(= NULL);
 #endif
 
-EXTERN linenr_T	write_no_eol_lnum INIT(= 0); /* non-zero lnum when last line
-						of next binary write should
-						not have an end-of-line */
-
 #ifdef FEAT_WINDOWS
 EXTERN int	postponed_split INIT(= 0);  /* for CTRL-W CTRL-] command */
 EXTERN int	postponed_split_flags INIT(= 0);  /* args for win_split() */
@@ -1094,8 +1110,8 @@
 EXTERN int  save_p_ls INIT(= -1);	/* Save 'laststatus' setting */
 EXTERN int  save_p_wmh INIT(= -1);	/* Save 'winminheight' setting */
 EXTERN int  wild_menu_showing INIT(= 0);
-#define WM_SHOWN	1		/* wildmenu showing */
-#define WM_SCROLLED	2		/* wildmenu showing with scroll */
+# define WM_SHOWN	1		/* wildmenu showing */
+# define WM_SCROLLED	2		/* wildmenu showing with scroll */
 #endif
 
 #ifdef MSWIN
@@ -1305,9 +1321,9 @@
 EXTERN Atom	commProperty INIT(= None);
 EXTERN char_u	*serverDelayedStartName INIT(= NULL);
 # else
-# ifdef PROTO
+#  ifdef PROTO
 typedef int HWND;
-# endif
+#  endif
 EXTERN HWND	clientWindow INIT(= 0);
 # endif
 #endif
@@ -1512,7 +1528,7 @@
 EXTERN char_u e_sandbox[]	INIT(= N_("E48: Not allowed in sandbox"));
 #endif
 EXTERN char_u e_secure[]	INIT(= N_("E523: Not allowed here"));
-#if defined(AMIGA) || defined(MACOS) || defined(MSWIN) || defined(RISCOS) \
+#if defined(AMIGA) || defined(MACOS) || defined(MSWIN)  \
 	|| defined(UNIX) || defined(VMS) || defined(OS2)
 EXTERN char_u e_screenmode[]	INIT(= N_("E359: Screen mode setting not supported"));
 #endif
@@ -1560,6 +1576,9 @@
 	(defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
 EXTERN char_u e_notset[]	INIT(= N_("E764: Option '%s' is not set"));
 #endif
+#ifndef FEAT_CLIPBOARD
+EXTERN char_u e_invalidreg[]    INIT(= N_("E850: Invalid register name"));
+#endif
 
 #ifdef MACOS_X_UNIX
 EXTERN short disallow_gui	INIT(= FALSE);
diff -Naur vim73.orig/src/gui.c vim73/src/gui.c
--- vim73.orig/src/gui.c	2010-08-08 13:01:18.000000000 +0000
+++ vim73/src/gui.c	2013-08-04 19:09:10.280611518 +0000
@@ -37,6 +37,23 @@
 static void gui_set_bg_color __ARGS((char_u *name));
 static win_T *xy2win __ARGS((int x, int y));
 
+#if defined(UNIX) && !defined(MACOS_X) && !defined(__APPLE__)
+# define MAY_FORK
+static void gui_do_fork __ARGS((void));
+
+static int gui_read_child_pipe __ARGS((int fd));
+
+/* Return values for gui_read_child_pipe */
+enum {
+    GUI_CHILD_IO_ERROR,
+    GUI_CHILD_OK,
+    GUI_CHILD_FAILED
+};
+
+#endif /* MAY_FORK */
+
+static void gui_attempt_start __ARGS((void));
+
 static int can_update_cursor = TRUE; /* can display the cursor */
 
 /*
@@ -59,42 +76,53 @@
 gui_start()
 {
     char_u	*old_term;
-#if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X)
-# define MAY_FORK
-    int		dofork = TRUE;
-#endif
     static int	recursive = 0;
 
     old_term = vim_strsave(T_NAME);
 
-    /*
-     * Set_termname() will call gui_init() to start the GUI.
-     * Set the "starting" flag, to indicate that the GUI will start.
-     *
-     * We don't want to open the GUI shell until after we've read .gvimrc,
-     * otherwise we don't know what font we will use, and hence we don't know
-     * what size the shell should be.  So if there are errors in the .gvimrc
-     * file, they will have to go to the terminal: Set full_screen to FALSE.
-     * full_screen will be set to TRUE again by a successful termcapinit().
-     */
     settmode(TMODE_COOK);		/* stop RAW mode */
     if (full_screen)
 	cursor_on();			/* needed for ":gui" in .vimrc */
-    gui.starting = TRUE;
     full_screen = FALSE;
 
-#ifdef MAY_FORK
-    if (!gui.dofork || vim_strchr(p_go, GO_FORG) || recursive)
-	dofork = FALSE;
-#endif
     ++recursive;
 
-    termcapinit((char_u *)"builtin_gui");
-    gui.starting = recursive - 1;
+#ifdef MAY_FORK
+    /*
+     * Quit the current process and continue in the child.
+     * Makes "gvim file" disconnect from the shell it was started in.
+     * Don't do this when Vim was started with "-f" or the 'f' flag is present
+     * in 'guioptions'.
+     */
+    if (gui.dofork && !vim_strchr(p_go, GO_FORG) && recursive <= 1)
+    {
+	gui_do_fork();
+    }
+    else
+#endif
+    {
+#ifdef FEAT_GUI_GTK
+	/* If there is 'f' in 'guioptions' and specify -g argument,
+	 * gui_mch_init_check() was not called yet.  */
+	if (gui_mch_init_check() != OK)
+	    exit(1);
+#endif
+	gui_attempt_start();
+    }
 
     if (!gui.in_use)			/* failed to start GUI */
     {
-	termcapinit(old_term);		/* back to old term settings */
+	/* Back to old term settings
+	 *
+	 * FIXME: If we got here because a child process failed and flagged to
+	 * the parent to resume, and X11 is enabled with FEAT_TITLE, this will
+	 * hit an X11 I/O error and do a longjmp(), leaving recursive
+	 * permanently set to 1. This is probably not as big a problem as it
+	 * sounds, because gui_mch_init() in both gui_x11.c and gui_gtk_x11.c
+	 * return "OK" unconditionally, so it would be very difficult to
+	 * actually hit this case.
+	 */
+	termcapinit(old_term);
 	settmode(TMODE_RAW);		/* restart RAW mode */
 #ifdef FEAT_TITLE
 	set_title_defaults();		/* set 'title' and 'icon' again */
@@ -103,101 +131,216 @@
 
     vim_free(old_term);
 
+#ifdef FEAT_AUTOCMD
+    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
+     * the GUIFailed event. */
+    gui_mch_update();
+    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
+						   NULL, NULL, FALSE, curbuf);
+#endif
+    --recursive;
+}
+
+/*
+ * Set_termname() will call gui_init() to start the GUI.
+ * Set the "starting" flag, to indicate that the GUI will start.
+ *
+ * We don't want to open the GUI shell until after we've read .gvimrc,
+ * otherwise we don't know what font we will use, and hence we don't know
+ * what size the shell should be.  So if there are errors in the .gvimrc
+ * file, they will have to go to the terminal: Set full_screen to FALSE.
+ * full_screen will be set to TRUE again by a successful termcapinit().
+ */
+    static void
+gui_attempt_start()
+{
+    static int recursive = 0;
+
+    ++recursive;
+    gui.starting = TRUE;
+
+#ifdef FEAT_GUI_GTK
+    gui.event_time = GDK_CURRENT_TIME;
+#endif
+
+    termcapinit((char_u *)"builtin_gui");
+    gui.starting = recursive - 1;
+
 #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
     if (gui.in_use)
+    {
+# ifdef FEAT_EVAL
+	Window	x11_window;
+	Display	*x11_display;
+
+	if (gui_get_x11_windis(&x11_window, &x11_display) == OK)
+	    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
+# endif
+
 	/* Display error messages in a dialog now. */
 	display_errors();
+    }
 #endif
+    --recursive;
+}
 
-#if defined(MAY_FORK) && !defined(__QNXNTO__)
-    /*
-     * Quit the current process and continue in the child.
-     * Makes "gvim file" disconnect from the shell it was started in.
-     * Don't do this when Vim was started with "-f" or the 'f' flag is present
-     * in 'guioptions'.
-     */
-    if (gui.in_use && dofork)
+#ifdef MAY_FORK
+
+/* for waitpid() */
+# if defined(HAVE_SYS_WAIT_H) || defined(HAVE_UNION_WAIT)
+#  include <sys/wait.h>
+# endif
+
+/*
+ * Create a new process, by forking. In the child, start the GUI, and in
+ * the parent, exit.
+ *
+ * If something goes wrong, this will return with gui.in_use still set
+ * to FALSE, in which case the caller should continue execution without
+ * the GUI.
+ *
+ * If the child fails to start the GUI, then the child will exit and the
+ * parent will return. If the child succeeds, then the parent will exit
+ * and the child will return.
+ */
+    static void
+gui_do_fork()
+{
+    int		pipefd[2];	/* pipe between parent and child */
+    int		pipe_error;
+    int		status;
+    int		exit_status;
+    pid_t	pid = -1;
+
+    /* Setup a pipe between the child and the parent, so that the parent
+     * knows when the child has done the setsid() call and is allowed to
+     * exit. */
+    pipe_error = (pipe(pipefd) < 0);
+    pid = fork();
+    if (pid < 0)	    /* Fork error */
     {
-	int	pipefd[2];	/* pipe between parent and child */
-	int	pipe_error;
-	char	dummy;
-	pid_t	pid = -1;
-
-	/* Setup a pipe between the child and the parent, so that the parent
-	 * knows when the child has done the setsid() call and is allowed to
-	 * exit. */
-	pipe_error = (pipe(pipefd) < 0);
-	pid = fork();
-	if (pid > 0)	    /* Parent */
-	{
-	    /* Give the child some time to do the setsid(), otherwise the
-	     * exit() may kill the child too (when starting gvim from inside a
-	     * gvim). */
-	    if (pipe_error)
-		ui_delay(300L, TRUE);
-	    else
+	EMSG(_("E851: Failed to create a new process for the GUI"));
+	return;
+    }
+    else if (pid > 0)	    /* Parent */
+    {
+	/* Give the child some time to do the setsid(), otherwise the
+	 * exit() may kill the child too (when starting gvim from inside a
+	 * gvim). */
+	if (!pipe_error)
+	{
+	    /* The read returns when the child closes the pipe (or when
+	     * the child dies for some reason). */
+	    close(pipefd[1]);
+	    status = gui_read_child_pipe(pipefd[0]);
+	    if (status == GUI_CHILD_FAILED)
+	    {
+		/* The child failed to start the GUI, so the caller must
+		 * continue. There may be more error information written
+		 * to stderr by the child. */
+# ifdef __NeXT__
+		wait4(pid, &exit_status, 0, (struct rusage *)0);
+# else
+		waitpid(pid, &exit_status, 0);
+# endif
+		EMSG(_("E852: The child process failed to start the GUI"));
+		return;
+	    }
+	    else if (status == GUI_CHILD_IO_ERROR)
 	    {
-		/* The read returns when the child closes the pipe (or when
-		 * the child dies for some reason). */
-		close(pipefd[1]);
-		ignored = (int)read(pipefd[0], &dummy, (size_t)1);
-		close(pipefd[0]);
+		pipe_error = TRUE;
 	    }
+	    /* else GUI_CHILD_OK: parent exit */
+	}
 
-	    /* When swapping screens we may need to go to the next line, e.g.,
-	     * after a hit-enter prompt and using ":gui". */
-	    if (newline_on_exit)
-		mch_errmsg("\r\n");
+	if (pipe_error)
+	    ui_delay(300L, TRUE);
 
-	    /*
-	     * The parent must skip the normal exit() processing, the child
-	     * will do it.  For example, GTK messes up signals when exiting.
-	     */
-	    _exit(0);
-	}
+	/* When swapping screens we may need to go to the next line, e.g.,
+	 * after a hit-enter prompt and using ":gui". */
+	if (newline_on_exit)
+	    mch_errmsg("\r\n");
 
-# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
 	/*
-	 * Change our process group.  On some systems/shells a CTRL-C in the
-	 * shell where Vim was started would otherwise kill gvim!
+	 * The parent must skip the normal exit() processing, the child
+	 * will do it.  For example, GTK messes up signals when exiting.
 	 */
-	if (pid == 0)	    /* child */
+	_exit(0);
+    }
+    /* Child */
+
+#ifdef FEAT_GUI_GTK
+    /* Call gtk_init_check() here after fork(). See gui_init_check(). */
+    if (gui_mch_init_check() != OK)
+	exit(1);
+#endif
+
+# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+    /*
+     * Change our process group.  On some systems/shells a CTRL-C in the
+     * shell where Vim was started would otherwise kill gvim!
+     */
 #  if defined(HAVE_SETSID)
-	    (void)setsid();
+    (void)setsid();
 #  else
-	    (void)setpgid(0, 0);
+    (void)setpgid(0, 0);
 #  endif
 # endif
-	if (!pipe_error)
-	{
-	    close(pipefd[0]);
-	    close(pipefd[1]);
-	}
+    if (!pipe_error)
+	close(pipefd[0]);
 
 # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
-	/* Tell the session manager our new PID */
-	gui_mch_forked();
+    /* Tell the session manager our new PID */
+    gui_mch_forked();
 # endif
+
+    /* Try to start the GUI */
+    gui_attempt_start();
+
+    /* Notify the parent */
+    if (!pipe_error)
+    {
+	if (gui.in_use)
+	    write_eintr(pipefd[1], "ok", 3);
+	else
+	    write_eintr(pipefd[1], "fail", 5);
+	close(pipefd[1]);
     }
-#else
-# if defined(__QNXNTO__)
-    if (gui.in_use && dofork)
-	procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
-		PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
-# endif
-#endif
 
-#ifdef FEAT_AUTOCMD
-    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
-     * the GUIFailed event. */
-    gui_mch_update();
-    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
-						   NULL, NULL, FALSE, curbuf);
-#endif
+    /* If we failed to start the GUI, exit now. */
+    if (!gui.in_use)
+	exit(1);
+}
 
-    --recursive;
+/*
+ * Read from a pipe assumed to be connected to the child process (this
+ * function is called from the parent).
+ * Return GUI_CHILD_OK if the child successfully started the GUI,
+ * GUY_CHILD_FAILED if the child failed, or GUI_CHILD_IO_ERROR if there was
+ * some other error.
+ *
+ * The file descriptor will be closed before the function returns.
+ */
+    static int
+gui_read_child_pipe(int fd)
+{
+    long	bytes_read;
+#define READ_BUFFER_SIZE 10
+    char	buffer[READ_BUFFER_SIZE];
+
+    bytes_read = read_eintr(fd, buffer, READ_BUFFER_SIZE - 1);
+#undef READ_BUFFER_SIZE
+    close(fd);
+    if (bytes_read < 0)
+	return GUI_CHILD_IO_ERROR;
+    buffer[bytes_read] = NUL;
+    if (strcmp(buffer, "ok") == 0)
+	return GUI_CHILD_OK;
+    return GUI_CHILD_FAILED;
 }
 
+#endif /* MAY_FORK */
+
 /*
  * Call this when vim starts up, whether or not the GUI is started
  */
@@ -260,6 +403,14 @@
     gui.fontset = NOFONTSET;
 # endif
 #endif
+#ifdef FEAT_MBYTE
+    gui.wide_font = NOFONT;
+# ifndef FEAT_GUI_GTK
+    gui.wide_bold_font = NOFONT;
+    gui.wide_ital_font = NOFONT;
+    gui.wide_boldital_font = NOFONT;
+# endif
+#endif
 
 #ifdef FEAT_MENU
 # ifndef FEAT_GUI_GTK
@@ -291,7 +442,17 @@
 #ifdef ALWAYS_USE_GUI
     result = OK;
 #else
+# ifdef FEAT_GUI_GTK
+    /*
+     * Note: Don't call gtk_init_check() before fork, it will be called after
+     * the fork. When calling it before fork, it make vim hang for a while.
+     * See gui_do_fork().
+     * Use a simpler check if the GUI window can probably be opened.
+     */
+    result = gui.dofork ? gui_mch_early_init_check() : gui_mch_init_check();
+# else
     result = gui_mch_init_check();
+# endif
 #endif
     return result;
 }
@@ -387,10 +548,14 @@
 		 && do_source((char_u *)USR_GVIMRC_FILE2, TRUE,
 							  DOSO_GVIMRC) == FAIL
 #endif
+#ifdef USR_GVIMRC_FILE3
+		 && do_source((char_u *)USR_GVIMRC_FILE3, TRUE,
+							  DOSO_GVIMRC) == FAIL
+#endif
 				)
 	    {
-#ifdef USR_GVIMRC_FILE3
-		(void)do_source((char_u *)USR_GVIMRC_FILE3, TRUE, DOSO_GVIMRC);
+#ifdef USR_GVIMRC_FILE4
+		(void)do_source((char_u *)USR_GVIMRC_FILE4, TRUE, DOSO_GVIMRC);
 #endif
 	    }
 
@@ -433,6 +598,10 @@
 			&& fullpathcmp((char_u *)USR_GVIMRC_FILE3,
 				     (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME
 #endif
+#ifdef USR_GVIMRC_FILE4
+			&& fullpathcmp((char_u *)USR_GVIMRC_FILE4,
+				     (char_u *)GVIMRC_FILE, FALSE) != FPC_SAME
+#endif
 			)
 		    do_source((char_u *)GVIMRC_FILE, TRUE, DOSO_GVIMRC);
 
@@ -623,11 +792,9 @@
 gui_exit(rc)
     int		rc;
 {
-#ifndef __BEOS__
     /* don't free the fonts, it leads to a BUS error
      * richard@whitequeen.com Jul 99 */
     free_highlight_fonts();
-#endif
     gui.in_use = FALSE;
     gui_mch_exit(rc);
 }
@@ -668,7 +835,7 @@
 #endif
 
 /*
- * Set the font.  "font_list" is a a comma separated list of font names.  The
+ * Set the font.  "font_list" is a comma separated list of font names.  The
  * first font name that works is used.  If none is found, use the default
  * font.
  * If "fontset" is TRUE, the "font_list" is used as one name for the fontset.
@@ -747,13 +914,7 @@
 # endif
 	    gui_mch_set_font(gui.norm_font);
 #endif
-	gui_set_shellsize(FALSE,
-#ifdef MSWIN
-		TRUE
-#else
-		FALSE
-#endif
-		, RESIZE_BOTH);
+	gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
     }
 
     return ret;
@@ -839,7 +1000,7 @@
     }
 
     gui_mch_free_font(gui.wide_font);
-#ifdef FEAT_GUI_GTK
+# ifdef FEAT_GUI_GTK
     /* Avoid unnecessary overhead if 'guifontwide' is equal to 'guifont'. */
     if (font != NOFONT && gui.norm_font != NOFONT
 			 && pango_font_description_equal(font, gui.norm_font))
@@ -848,8 +1009,16 @@
 	gui_mch_free_font(font);
     }
     else
-#endif
+# endif
 	gui.wide_font = font;
+# ifdef FEAT_GUI_MSWIN
+    gui_mch_wide_font_changed();
+# else
+    /*
+     * TODO: setup wide_bold_font, wide_ital_font and wide_boldital_font to
+     * support those fonts for 'guifontwide'.
+     */
+# endif
     return OK;
 }
 #endif
@@ -1392,7 +1561,7 @@
     if (!gui.shell_created)
 	return;
 
-#ifdef MSWIN
+#if defined(MSWIN) || defined(FEAT_GUI_GTK)
     /* If not setting to a user specified size and maximized, calculate the
      * number of characters that fit in the maximized window. */
     if (!mustset && gui_mch_maximized())
@@ -1451,6 +1620,7 @@
 	    un_maximize = FALSE;
 #endif
     }
+    limit_screen_size();
     gui.num_cols = Columns;
     gui.num_rows = Rows;
 
@@ -2017,6 +2187,9 @@
     guicolor_T	sp_color;
 #if !defined(MSWIN16_FASTTEXT) && !defined(FEAT_GUI_GTK)
     GuiFont	font = NOFONT;
+# ifdef FEAT_MBYTE
+    GuiFont	wide_font = NOFONT;
+# endif
 # ifdef FEAT_XFONTSET
     GuiFontset	fontset = NOFONTSET;
 # endif
@@ -2106,6 +2279,23 @@
 	}
 	else
 	    font = gui.norm_font;
+
+# ifdef FEAT_MBYTE
+	/*
+	 * Choose correct wide_font by font.  wide_font should be set with font
+	 * at same time in above block.  But it will make many "ifdef" nasty
+	 * blocks.  So we do it here.
+	 */
+	if (font == gui.boldital_font && gui.wide_boldital_font)
+	    wide_font = gui.wide_boldital_font;
+	else if (font == gui.bold_font && gui.wide_bold_font)
+	    wide_font = gui.wide_bold_font;
+	else if (font == gui.ital_font && gui.wide_ital_font)
+	    wide_font = gui.wide_ital_font;
+	else if (font == gui.norm_font && gui.wide_font)
+	    wide_font = gui.wide_font;
+# endif
+
     }
 # ifdef FEAT_XFONTSET
     if (fontset != NOFONTSET)
@@ -2146,7 +2336,7 @@
 
     if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
     {
-#if defined(AMIGA) || defined(RISCOS)
+#if defined(AMIGA)
 	gui_mch_set_colors(bg_color, fg_color);
 #else
 	gui_mch_set_fg_color(bg_color);
@@ -2155,7 +2345,7 @@
     }
     else
     {
-#if defined(AMIGA) || defined(RISCOS)
+#if defined(AMIGA)
 	gui_mch_set_colors(fg_color, bg_color);
 #else
 	gui_mch_set_fg_color(fg_color);
@@ -2183,7 +2373,7 @@
     if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
 	return FAIL;
 
-#if defined(RISCOS) || defined(FEAT_GUI_GTK)
+#if defined(FEAT_GUI_GTK)
     /* If there's no italic font, then fake it.
      * For GTK2, we don't need a different font for italic style. */
     if (hl_mask_todo & HL_ITALIC)
@@ -2221,14 +2411,16 @@
     {
 	int	start;		/* index of bytes to be drawn */
 	int	cells;		/* cellwidth of bytes to be drawn */
-	int	thislen;	/* length of bytes to be drawin */
+	int	thislen;	/* length of bytes to be drawn */
 	int	cn;		/* cellwidth of current char */
 	int	i;		/* index of current char */
 	int	c;		/* current char value */
 	int	cl;		/* byte length of current char */
 	int	comping;	/* current char is composing */
 	int	scol = col;	/* screen column */
-	int	dowide;		/* use 'guifontwide' */
+	int	curr_wide;	/* use 'guifontwide' */
+	int	prev_wide = FALSE;
+	int	wide_changed;
 
 	/* Break the string at a composing character, it has to be drawn on
 	 * top of the previous character. */
@@ -2242,10 +2434,10 @@
 #  ifdef FEAT_XFONTSET
 		    && fontset == NOFONTSET
 #  endif
-		    && gui.wide_font != NOFONT)
-		dowide = TRUE;
+		    && wide_font != NOFONT)
+		curr_wide = TRUE;
 	    else
-		dowide = FALSE;
+		curr_wide = FALSE;
 	    comping = utf_iscomposing(c);
 	    if (!comping)	/* count cells from non-composing chars */
 		cells += cn;
@@ -2253,9 +2445,11 @@
 	    if (cl == 0)	/* hit end of string */
 		len = i + cl;	/* len must be wrong "cannot happen" */
 
-	    /* print the string so far if it's the last character or there is
+	    wide_changed = curr_wide != prev_wide;
+
+	    /* Print the string so far if it's the last character or there is
 	     * a composing character. */
-	    if (i + cl >= len || (comping && i > start) || dowide
+	    if (i + cl >= len || (comping && i > start) || wide_changed
 #  if defined(FEAT_GUI_X11)
 		    || (cn > 1
 #   ifdef FEAT_XFONTSET
@@ -2267,25 +2461,28 @@
 #  endif
 	       )
 	    {
-		if (comping || dowide)
+		if (comping || wide_changed)
 		    thislen = i - start;
 		else
 		    thislen = i - start + cl;
 		if (thislen > 0)
 		{
+		    if (prev_wide)
+			gui_mch_set_font(wide_font);
 		    gui_mch_draw_string(gui.row, scol, s + start, thislen,
 								  draw_flags);
+		    if (prev_wide)
+			gui_mch_set_font(font);
 		    start += thislen;
 		}
 		scol += cells;
 		cells = 0;
-		if (dowide)
+		/* Adjust to not draw a character which width is changed
+		 * against with last one. */
+		if (wide_changed && !comping)
 		{
-		    gui_mch_set_font(gui.wide_font);
-		    gui_mch_draw_string(gui.row, scol - cn,
-						   s + start, cl, draw_flags);
-		    gui_mch_set_font(font);
-		    start += cl;
+		    scol -= cn;
+		    cl = 0;
 		}
 
 #  if defined(FEAT_GUI_X11)
@@ -2295,7 +2492,7 @@
 #   ifdef FEAT_XFONTSET
 			&& fontset == NOFONTSET
 #   endif
-			&& !dowide)
+			&& !wide_changed)
 		    gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ",
 							       1, draw_flags);
 #  endif
@@ -2313,6 +2510,7 @@
 #  endif
 		start = i + cl;
 	    }
+	    prev_wide = curr_wide;
 	}
 	/* The stuff below assumes "len" is the length in screen columns. */
 	len = scol - col;
@@ -2352,7 +2550,7 @@
     if (draw_sign)
 	/* Draw the sign on top of the spaces. */
 	gui_mch_drawsign(gui.row, col, gui.highlight_mask);
-# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_MOTIF) \
+# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_X11) \
 	|| defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32))
     if (multi_sign)
 	netbeans_draw_multisign_indicator(gui.row);
@@ -2975,26 +3173,11 @@
 	    did_clip = TRUE;
 	}
 	/* Allow the left button to start the selection */
-	else if (button ==
-# ifdef RISCOS
-		/* Only start a drag on a drag event. Otherwise
-		 * we don't get a release event. */
-		    MOUSE_DRAG
-# else
-		    MOUSE_LEFT
-# endif
-				)
-	{
-	    clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
-	    did_clip = TRUE;
-	}
-# ifdef RISCOS
 	else if (button == MOUSE_LEFT)
 	{
-	    clip_clear_selection();
+	    clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
 	    did_clip = TRUE;
 	}
-# endif
 
 	/* Always allow pasting */
 	if (button != MOUSE_MIDDLE)
@@ -3008,7 +3191,7 @@
     }
 
     if (clip_star.state != SELECT_CLEARED && !did_clip)
-	clip_clear_selection();
+	clip_clear_selection(&clip_star);
 #endif
 
     /* Don't put events in the input queue now. */
@@ -3738,7 +3921,7 @@
 	gui.dragged_sb = SBAR_NONE;
 #ifdef FEAT_GUI_GTK
 	/* Keep the "dragged_wp" value until after the scrolling, for when the
-	 * moust button is released.  GTK2 doesn't send the button-up event. */
+	 * mouse button is released.  GTK2 doesn't send the button-up event. */
 	gui.dragged_wp = NULL;
 #endif
     }
@@ -4893,7 +5076,7 @@
 		if (STRLEN(p) > 2000)
 		    STRCPY(p + 2000 - 14, "...(truncated)");
 		(void)do_dialog(VIM_ERROR, (char_u *)_("Error"),
-					      p, (char_u *)_("&Ok"), 1, NULL);
+				       p, (char_u *)_("&Ok"), 1, NULL, FALSE);
 		break;
 	    }
 	ga_clear(&error_ga);
@@ -5171,7 +5354,7 @@
 	    }
 	    else
 		MSG(_("No match at cursor, finding next"));
-	    vim_free(regmatch.regprog);
+	    vim_regfree(regmatch.regprog);
 	}
     }
 
diff -Naur vim73.orig/src/gui.h vim73/src/gui.h
--- vim73.orig/src/gui.h	2010-07-17 19:40:58.000000000 +0000
+++ vim73/src/gui.h	2013-08-04 19:09:10.280611518 +0000
@@ -52,10 +52,6 @@
 # include <SegLoad.h>*/
 #endif
 
-#ifdef RISCOS
-# include "gui_riscos.h"
-#endif
-
 #ifdef FEAT_GUI_PHOTON
 # include <Ph.h>
 # include <Pt.h>
@@ -63,15 +59,6 @@
 #endif
 
 /*
- * On some systems, when we compile with the GUI, we always use it.  On Mac
- * there is no terminal version, and on Windows we can't figure out how to
- * fork one off with :gui.
- */
-#if defined(FEAT_GUI_MSWIN) || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_UNIX))
-# define ALWAYS_USE_GUI
-#endif
-
-/*
  * On some systems scrolling needs to be done right away instead of in the
  * main loop.
  */
@@ -151,7 +138,7 @@
 #define DRAW_BOLD		0x02	/* draw bold text */
 #define DRAW_UNDERL		0x04	/* draw underline text */
 #define DRAW_UNDERC		0x08	/* draw undercurl text */
-#if defined(RISCOS) || defined(FEAT_GUI_GTK)
+#if defined(FEAT_GUI_GTK)
 # define DRAW_ITALIC		0x10	/* draw italic text */
 #endif
 #define DRAW_CURSOR		0x20	/* drawing block cursor (win32) */
@@ -219,9 +206,6 @@
 #ifdef FEAT_GUI_MAC
     ControlHandle id;		/* A handle to the scrollbar */
 #endif
-#ifdef RISCOS
-    int		id;		/* Window handle of scrollbar window */
-#endif
 #ifdef FEAT_GUI_PHOTON
     PtWidget_t	*id;
 #endif
@@ -327,7 +311,12 @@
 # endif
 #endif
 #ifdef FEAT_MBYTE
-    GuiFont	wide_font;	    /* 'guifontwide' font */
+    GuiFont	wide_font;	    /* Normal 'guifontwide' font */
+# ifndef FEAT_GUI_GTK
+    GuiFont	wide_bold_font;	    /* Bold 'guifontwide' font */
+    GuiFont	wide_ital_font;	    /* Italic 'guifontwide' font */
+    GuiFont	wide_boldital_font; /* Bold-Italic 'guifontwide' font */
+# endif
 #endif
 #ifdef FEAT_XFONTSET
     GuiFontset	fontset;	    /* set of fonts for multi-byte chars */
@@ -408,6 +397,8 @@
     GtkAccelGroup *accel_group;
     GtkWidget	*filedlg;	    /* file selection dialog */
     char_u	*browse_fname;	    /* file name from filedlg */
+
+    guint32	event_time;
 #endif	/* FEAT_GUI_GTK */
 
 #if defined(FEAT_GUI_TABLINE) \
@@ -450,14 +441,6 @@
     int		visibility;	    /* Is window partially/fully obscured? */
 #endif
 
-#ifdef RISCOS
-    int		window_handle;
-    char_u	*window_title;
-    int		window_title_size;
-    int		fg_colour;		/* in 0xBBGGRR format */
-    int		bg_colour;
-#endif
-
 #ifdef FEAT_GUI_PHOTON
     PtWidget_t	*vimWindow;		/* PtWindow */
     PtWidget_t	*vimTextArea;		/* PtRaw */
diff -Naur vim73.orig/src/gui_at_fs.c vim73/src/gui_at_fs.c
--- vim73.orig/src/gui_at_fs.c	2010-06-06 20:26:08.000000000 +0000
+++ vim73/src/gui_at_fs.c	2013-08-04 19:09:10.283944841 +0000
@@ -2591,7 +2591,7 @@
 		(XtCallbackProc)SFvFloatSliderMovedCallback,
 		(XtPointer)(long_u)n);
 	XtAddCallback(selFileVScrolls[n], XtNscrollProc,
-		(XtCallbackProc)SFvAreaSelectedCallback, (XtPointer)n);
+		(XtCallbackProc)SFvAreaSelectedCallback, (XtPointer)(long_u)n);
 
 	selFileHScrolls[n] = XtVaCreateManagedWidget("selFileHScroll",
 #ifdef FEAT_GUI_NEXTAW
@@ -2616,7 +2616,7 @@
 		(XtCallbackProc)SFhSliderMovedCallback,
 		(XtPointer)(long_u)n);
 	XtAddCallback(selFileHScrolls[n], XtNscrollProc,
-		(XtCallbackProc)SFhAreaSelectedCallback, (XtPointer)n);
+		(XtCallbackProc)SFhAreaSelectedCallback, (XtPointer)(long_u)n);
     }
 
     selFileOK = XtVaCreateManagedWidget("selFileOK",
diff -Naur vim73.orig/src/gui_athena.c vim73/src/gui_athena.c
--- vim73.orig/src/gui_athena.c	2010-08-08 13:01:39.000000000 +0000
+++ vim73/src/gui_athena.c	2013-08-04 19:09:10.287278165 +0000
@@ -519,7 +519,7 @@
 	    &color[TOP_SHADOW].pixel,
 	    &color[HIGHLIGHT].pixel);
 
-    /* Setup the color subsititution table */
+    /* Setup the color substitution table */
     attrs.valuemask = XpmColorSymbols;
     attrs.colorsymbols = color;
     attrs.numsymbols = 5;
@@ -2117,13 +2117,14 @@
 }
 
     int
-gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield)
+gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
     int		type UNUSED;
     char_u	*title;
     char_u	*message;
     char_u	*buttons;
     int		dfltbutton UNUSED;
     char_u	*textfield;
+    int		ex_cmd UNUSED;
 {
     char_u		*buts;
     char_u		*p, *next;
diff -Naur vim73.orig/src/gui_beval.c vim73/src/gui_beval.c
--- vim73.orig/src/gui_beval.c	2010-06-25 02:59:43.000000000 +0000
+++ vim73/src/gui_beval.c	2013-08-04 19:09:10.290611488 +0000
@@ -359,7 +359,7 @@
 			}
 		    }
 
-		    col = vcol2col(wp, lnum, col) - 1;
+		    col = vcol2col(wp, lnum, col);
 
 		    if (VIsual_active
 			    && wp->w_buffer == curwin->w_buffer
@@ -377,8 +377,10 @@
 			    return FAIL;
 
 			lbuf = ml_get_buf(curwin->w_buffer, VIsual.lnum, FALSE);
-			lbuf = vim_strnsave(lbuf + spos->col,
-				     epos->col - spos->col + (*p_sel != 'e'));
+			len = epos->col - spos->col;
+			if (*p_sel != 'e')
+			    len += MB_PTR2LEN(lbuf + epos->col);
+			lbuf = vim_strnsave(lbuf + spos->col, len);
 			lnum = spos->lnum;
 			col = spos->col;
 		    }
@@ -724,7 +726,7 @@
     BalloonEval	*beval;
     XEvent	*event;
 {
-    Position	distance;	    /* a measure of how much the ponter moved */
+    Position	distance;	    /* a measure of how much the pointer moved */
     Position	delta;		    /* used to compute distance */
 
     switch (event->type)
diff -Naur vim73.orig/src/gui_gtk.c vim73/src/gui_gtk.c
--- vim73.orig/src/gui_gtk.c	2010-07-20 11:15:22.000000000 +0000
+++ vim73/src/gui_gtk.c	2013-08-04 19:09:10.293944811 +0000
@@ -90,6 +90,13 @@
 static void entry_activate_cb(GtkWidget *widget, gpointer data);
 static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
 static void find_replace_cb(GtkWidget *widget, gpointer data);
+#if defined(FEAT_BROWSE) || defined(PROTO)
+static void recent_func_log_func(
+	const gchar *log_domain,
+	GLogLevelFlags log_level,
+	const gchar *message,
+	gpointer user_data);
+#endif
 
 #if defined(FEAT_TOOLBAR)
 /*
@@ -606,6 +613,17 @@
     void
 gui_mch_destroy_menu(vimmenu_T *menu)
 {
+    /* Don't let gtk_container_remove automatically destroy menu->id. */
+    if (menu->id != NULL)
+	g_object_ref(menu->id);
+
+    /* Workaround for a spurious gtk warning in Ubuntu: "Trying to remove
+     * a child that doesn't believe we're it's parent."
+     * Remove widget from gui.menubar before destroying it. */
+    if (menu->id != NULL && gui.menubar != NULL
+			    && gtk_widget_get_parent(menu->id) == gui.menubar)
+	gtk_container_remove(GTK_CONTAINER(gui.menubar), menu->id);
+
 # ifdef FEAT_TOOLBAR
     if (menu->parent != NULL && menu_is_toolbar(menu->parent->name))
     {
@@ -625,6 +643,8 @@
 	    gtk_widget_destroy(menu->id);
     }
 
+    if (menu->id != NULL)
+	g_object_unref(menu->id);
     menu->submenu_id = NULL;
     menu->id = NULL;
 }
@@ -772,9 +792,6 @@
 /*
  * Implementation of the file selector related stuff
  */
-#if GTK_CHECK_VERSION(2,4,0)
-# define USE_FILE_CHOOSER
-#endif
 
 #ifndef USE_FILE_CHOOSER
     static void
@@ -833,12 +850,14 @@
 	       char_u *dflt,
 	       char_u *ext UNUSED,
 	       char_u *initdir,
-	       char_u *filter UNUSED)
+	       char_u *filter)
 {
 #ifdef USE_FILE_CHOOSER
     GtkWidget		*fc;
 #endif
     char_u		dirbuf[MAXPATHL];
+    guint		log_handler;
+    const gchar		*domain = "Gtk";
 
     title = CONVERT_TO_UTF8(title);
 
@@ -853,6 +872,11 @@
     /* If our pointer is currently hidden, then we should show it. */
     gui_mch_mousehide(FALSE);
 
+    /* Hack: The GTK file dialog warns when it can't access a new file, this
+     * makes it shut up. http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
+    log_handler = g_log_set_handler(domain, G_LOG_LEVEL_WARNING,
+						  recent_func_log_func, NULL);
+
 #ifdef USE_FILE_CHOOSER
     /* We create the dialog each time, so that the button text can be "Open"
      * or "Save" according to the action. */
@@ -865,6 +889,46 @@
 	    NULL);
     gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
 						       (const gchar *)dirbuf);
+
+    if (filter != NULL && *filter != NUL)
+    {
+	int     i = 0;
+	char_u  *patt;
+	char_u  *p = filter;
+	GtkFileFilter	*gfilter;
+
+	gfilter = gtk_file_filter_new();
+	patt = alloc(STRLEN(filter));
+	while (p != NULL && *p != NUL)
+	{
+	    if (*p == '\n' || *p == ';' || *p == '\t')
+	    {
+		STRNCPY(patt, filter, i);
+		patt[i] = '\0';
+		if (*p == '\t')
+		    gtk_file_filter_set_name(gfilter, (gchar *)patt);
+		else
+		{
+		    gtk_file_filter_add_pattern(gfilter, (gchar *)patt);
+		    if (*p == '\n')
+		    {
+			gtk_file_chooser_add_filter((GtkFileChooser *)fc,
+								     gfilter);
+			if (*(p + 1) != NUL)
+			    gfilter = gtk_file_filter_new();
+		    }
+		}
+		filter = ++p;
+		i = 0;
+	    }
+	    else
+	    {
+		p++;
+		i++;
+	    }
+	}
+	vim_free(patt);
+    }
     if (saving && dflt != NULL && *dflt != NUL)
 	gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), (char *)dflt);
 
@@ -916,6 +980,7 @@
     gtk_widget_show(gui.filedlg);
     gtk_main();
 #endif
+    g_log_remove_handler(domain, log_handler);
 
     CONVERT_TO_UTF8_FREE(title);
     if (gui.browse_fname == NULL)
@@ -1268,7 +1333,8 @@
 	       char_u	*message,   /* message text */
 	       char_u	*buttons,   /* names of buttons */
 	       int	def_but,    /* default button */
-	       char_u	*textfield) /* text for textfield or NULL */
+	       char_u	*textfield, /* text for textfield or NULL */
+	       int	ex_cmd UNUSED)
 {
     GtkWidget	*dialog;
     GtkWidget	*entry = NULL;
@@ -1287,6 +1353,9 @@
 	entry = gtk_entry_new();
 	gtk_widget_show(entry);
 
+	/* Make Enter work like pressing OK. */
+	gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
+
 	text = CONVERT_TO_UTF8(textfield);
 	gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);
 	CONVERT_TO_UTF8_FREE(text);
@@ -1387,7 +1456,7 @@
     gtk_menu_popup(GTK_MENU(menu->submenu_id),
 		   NULL, NULL,
 		   (GtkMenuPositionFunc)NULL, NULL,
-		   3U, (guint32)GDK_CURRENT_TIME);
+		   3U, gui.event_time);
 }
 
 /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
@@ -1795,7 +1864,6 @@
     char_u		*repl_text;
     gboolean		direction_down;
     SharedFindReplace	*sfr;
-    int			rc;
 
     flags = (int)(long)data;	    /* avoid a lint warning here */
 
@@ -1821,7 +1889,7 @@
 
     repl_text = CONVERT_FROM_UTF8(repl_text);
     find_text = CONVERT_FROM_UTF8(find_text);
-    rc = gui_do_findrepl(flags, find_text, repl_text, direction_down);
+    gui_do_findrepl(flags, find_text, repl_text, direction_down);
     CONVERT_FROM_UTF8_FREE(repl_text);
     CONVERT_FROM_UTF8_FREE(find_text);
 }
@@ -1879,3 +1947,15 @@
      * backwards compatibility anyway. */
     do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
 }
+
+#if defined(FEAT_BROWSE) || defined(PROTO)
+    static void
+recent_func_log_func(const gchar *log_domain UNUSED,
+		     GLogLevelFlags log_level UNUSED,
+		     const gchar *message UNUSED,
+		     gpointer user_data UNUSED)
+{
+    /* We just want to suppress the warnings. */
+    /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
+}
+#endif
diff -Naur vim73.orig/src/gui_gtk_x11.c vim73/src/gui_gtk_x11.c
--- vim73.orig/src/gui_gtk_x11.c	2010-08-15 11:52:15.000000000 +0000
+++ vim73/src/gui_gtk_x11.c	2013-08-04 19:09:10.303944781 +0000
@@ -86,7 +86,6 @@
 
 #ifdef HAVE_X11_SUNKEYSYM_H
 # include <X11/Sunkeysym.h>
-static guint32 clipboard_event_time = CurrentTime;
 #endif
 
 /*
@@ -933,7 +932,7 @@
     guint	state;
     char_u	*s, *d;
 
-    clipboard_event_time = event->time;
+    gui.event_time = event->time;
     key_sym = event->keyval;
     state = event->state;
 
@@ -1128,7 +1127,7 @@
 		  GdkEventKey *event,
 		  gpointer data UNUSED)
 {
-    clipboard_event_time = event->time;
+    gui.event_time = event->time;
     /*
      * GTK+ 2 input methods may do fancy stuff on key release events too.
      * With the default IM for instance, you can enter any UCS code point
@@ -1172,7 +1171,7 @@
     char_u	    *tmpbuf = NULL;
     guchar	    *tmpbuf_utf8 = NULL;
     int		    len;
-    int		    motion_type;
+    int		    motion_type = MAUTO;
 
     if (data->selection == clip_plus.gtk_sel_atom)
 	cbd = &clip_plus;
@@ -1181,7 +1180,6 @@
 
     text = (char_u *)data->data;
     len  = data->length;
-    motion_type = MCHAR;
 
     if (text == NULL || len <= 0)
     {
@@ -1259,7 +1257,7 @@
 	}
     }
 
-    /* Chop off any traiing NUL bytes.  OpenOffice sends these. */
+    /* Chop off any trailing NUL bytes.  OpenOffice sends these. */
     while (len > 0 && text[len - 1] == NUL)
 	--len;
 
@@ -1416,7 +1414,29 @@
 }
 
 /*
- * Check if the GUI can be started.  Called before gvimrc is sourced.
+ * Check if the GUI can be started.  Called before gvimrc is sourced and
+ * before fork().
+ * Return OK or FAIL.
+ */
+    int
+gui_mch_early_init_check(void)
+{
+    char_u *p;
+
+    /* Guess that when $DISPLAY isn't set the GUI can't start. */
+    p = mch_getenv((char_u *)"DISPLAY");
+    if (p == NULL || *p == NUL)
+    {
+	gui.dying = TRUE;
+	EMSG(_((char *)e_opendisp));
+	return FAIL;
+    }
+    return OK;
+}
+
+/*
+ * Check if the GUI can be started.  Called before gvimrc is sourced but after
+ * fork().
  * Return OK or FAIL.
  */
     int
@@ -1427,6 +1447,11 @@
 	using_gnome = 1;
 #endif
 
+    /* This defaults to argv[0], but we want it to match the name of the
+     * shipped gvim.desktop so that Vim's windows can be associated with this
+     * file. */
+    g_set_prgname("gvim");
+
     /* Don't use gtk_init() or gnome_init(), it exits on failure. */
     if (!gtk_init_check(&gui_argc, &gui_argv))
     {
@@ -1622,7 +1647,7 @@
     int x, y;
     int_u vim_modifiers;
 
-    clipboard_event_time = event->time;
+    gui.event_time = event->time;
 
     /* Make sure we have focus now we've been selected */
     if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
@@ -1733,7 +1758,7 @@
     int x, y;
     int_u vim_modifiers;
 
-    clipboard_event_time = event->time;
+    gui.event_time = event->time;
 
     /* Remove any motion "machine gun" timers used for automatic further
        extension of allocation areas if outside of the applications window
@@ -3052,7 +3077,7 @@
 
     for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
     {
-	/* OpenOffice tries to use TARGET_HTML and fails when it doesn't
+	/* OpenOffice tries to use TARGET_HTML and fails when we don't
 	 * return something, instead of trying another target. Therefore only
 	 * offer TARGET_HTML when it works. */
 	if (!clip_html && selection_targets[i].info == TARGET_HTML)
@@ -3083,7 +3108,7 @@
 
     for (i = 0; i < (int)N_DND_TARGETS; ++i)
     {
-	if (!clip_html && selection_targets[i].info == TARGET_HTML)
+	if (!clip_html && dnd_targets[i].info == TARGET_HTML)
 	    n_targets--;
 	else
 	    targets[j++] = dnd_targets[i];
@@ -3093,7 +3118,7 @@
     gtk_drag_dest_set(gui.drawarea,
 		      GTK_DEST_DEFAULT_ALL,
 		      targets, n_targets,
-		      GDK_ACTION_COPY);
+		      GDK_ACTION_COPY | GDK_ACTION_MOVE);
 }
 
 /*
@@ -3110,8 +3135,16 @@
      * exits on failure, but that's a non-issue because we already called
      * gtk_init_check() in gui_mch_init_check(). */
     if (using_gnome)
+    {
 	gnome_program_init(VIMPACKAGE, VIM_VERSION_SHORT,
 			   LIBGNOMEUI_MODULE, gui_argc, gui_argv, NULL);
+# if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
+	/* Make sure strtod() uses a decimal point, not a comma. Gnome init
+	 * may change it. */
+	if (setlocale(LC_NUMERIC, NULL) != (char *) "C")
+	   setlocale(LC_NUMERIC, "C");
+# endif
+    }
 #endif
     vim_free(gui_argv);
     gui_argv = NULL;
@@ -3665,6 +3698,7 @@
 		p_window = h - 1;
 	    Rows = h;
 	}
+	limit_screen_size();
 
 	pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width);
 	pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height);
@@ -3902,6 +3936,21 @@
 }
 
 /*
+ * Called when the font changed while the window is maximized.  Compute the
+ * new Rows and Columns.  This is like resizing the window.
+ */
+    void
+gui_mch_newfont()
+{
+    int w, h;
+
+    gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
+    w -= get_menu_tool_width();
+    h -= get_menu_tool_height();
+    gui_resize_shell(w, h);
+}
+
+/*
  * Set the windows size.
  */
     void
@@ -4411,14 +4460,9 @@
 
     if (gui_mch_maximized())
     {
-	int w, h;
-
 	/* Update lines and columns in accordance with the new font, keep the
 	 * window maximized. */
-	gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
-	w -= get_menu_tool_width();
-	h -= get_menu_tool_height();
-	gui_resize_shell(w, h);
+	gui_mch_newfont();
     }
     else
     {
@@ -5126,8 +5170,7 @@
     return FAIL;
 }
 
-#if defined(FEAT_TITLE) \
-	|| defined(PROTO)
+#if defined(FEAT_TITLE) || defined(FEAT_EVAL) || defined(PROTO)
 /*
  * Return the text window-id and display.  Only required for X-based GUI's
  */
@@ -5419,7 +5462,7 @@
 	}
 
 #if defined(FEAT_NETBEANS_INTG)
-	/* Process the queued netbeans messages. */
+	/* Process any queued netbeans messages. */
 	netbeans_parse_messages();
 #endif
 
@@ -5637,12 +5680,8 @@
     void
 clip_mch_lose_selection(VimClipboard *cbd UNUSED)
 {
-    /* WEIRD: when using NULL to actually disown the selection, we lose the
-     * selection the first time we own it. */
-    /*
-    gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, (guint32)GDK_CURRENT_TIME);
+    gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, gui.event_time);
     gui_mch_update();
-     */
 }
 
 /*
@@ -5654,7 +5693,7 @@
     int success;
 
     success = gtk_selection_owner_set(gui.drawarea, cbd->gtk_sel_atom,
-				      clipboard_event_time);
+				      gui.event_time);
     gui_mch_update();
     return (success) ? OK : FAIL;
 }
@@ -5668,6 +5707,12 @@
 {
 }
 
+    int
+clip_gtk_owner_exists(VimClipboard *cbd)
+{
+    return gdk_selection_owner_get(cbd->gtk_sel_atom) != NULL;
+}
+
 
 #if defined(FEAT_MENU) || defined(PROTO)
 /*
diff -Naur vim73.orig/src/gui_mac.c vim73/src/gui_mac.c
--- vim73.orig/src/gui_mac.c	2010-08-14 19:39:54.000000000 +0000
+++ vim73/src/gui_mac.c	2013-08-04 19:09:10.310611428 +0000
@@ -41,7 +41,7 @@
 #define USE_AEVENT		/* Enable AEVENT */
 #undef USE_OFFSETED_WINDOW	/* Debugging feature: start Vim window OFFSETed */
 
-/* Compile as CodeWarior External Editor */
+/* Compile as CodeWarrior External Editor */
 #if defined(FEAT_CW_EDITOR) && !defined(USE_AEVENT)
 # define USE_AEVENT /* Need Apple Event Support */
 #endif
@@ -1478,9 +1478,9 @@
 /*
  *  gui_mac_get_menu_item_index
  *
- *  Returns the index inside the menu wher
+ *  Returns the index inside the menu where
  */
-    short /* Shoulde we return MenuItemIndex? */
+    short /* Should we return MenuItemIndex? */
 gui_mac_get_menu_item_index(vimmenu_T *pMenu)
 {
     short	index;
@@ -1693,7 +1693,7 @@
 
     if (theControl != NUL)
     {
-	/* We hit a scollbar */
+	/* We hit a scrollbar */
 
 	if (thePortion != kControlIndicatorPart)
 	{
@@ -1823,7 +1823,7 @@
 	p.h += gui.scrollbar_width;
     if (gui.which_scrollbars[SBAR_RIGHT])
 	p.h += gui.scrollbar_width;
-    /* ideal height is as heigh as we can get */
+    /* ideal height is as high as we can get */
     p.v = 15 * 1024;
 
     thePart = IsWindowInStandardState(whichWindow, &p, &r)
@@ -1840,7 +1840,7 @@
 	p.v -= gui.scrollbar_height;
     p.v -= p.v % gui.char_height;
     p.v += 2 * gui.border_width;
-    if (gui.which_scrollbars[SBAR_BOTTOM]);
+    if (gui.which_scrollbars[SBAR_BOTTOM])
 	p.v += gui.scrollbar_height;
 
     ZoomWindowIdeal(whichWindow, thePart, &p);
@@ -2630,7 +2630,7 @@
     {
 	/* Handle the menu CntxMenuID, CntxMenuItem */
 	/* The submenu can be handle directly by gui_mac_handle_menu */
-	/* But what about the current menu, is the meny changed by ContextualMenuSelect */
+	/* But what about the current menu, is the many changed by ContextualMenuSelect */
 	gui_mac_handle_menu((CntxMenuID << 16) + CntxMenuItem);
     }
     else if (CntxMenuID == kCMShowHelpSelected)
@@ -3216,7 +3216,7 @@
 {
     /* TODO:
      * This proc is called when Normal is set to a value
-     * so what msut be done? I don't know
+     * so what must be done? I don't know
      */
 }
 
@@ -3303,7 +3303,6 @@
     *x = bounds.left;
     *y = bounds.top;
     return OK;
-    return FAIL;
 }
 
 /*
@@ -4481,7 +4480,7 @@
 	 * event arrives.  No need to check for input_buf_full because we are
 	 * returning as soon as it contains a single char.
 	 */
-	/* TODO: reduce wtime accordinly???  */
+	/* TODO: reduce wtime accordingly???  */
 	if (wtime > -1)
 	    sleeppyTick = 60 * wtime / 1000;
 	else
@@ -4671,7 +4670,7 @@
     if (flavor)
 	type = **textOfClip;
     else
-	type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
+	type = MAUTO;
 
     tempclip = lalloc(scrapSize + 1, TRUE);
     mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
@@ -5357,7 +5356,7 @@
     char_u *initdir,
     char_u *filter)
 {
-    /* TODO: Add Ammon's safety checl (Dany) */
+    /* TODO: Add Ammon's safety check (Dany) */
     NavReplyRecord	reply;
     char_u		*fname = NULL;
     char_u		**fnames = NULL;
@@ -5583,7 +5582,8 @@
     char_u	*message,
     char_u	*buttons,
     int		dfltbutton,
-    char_u	*textfield)
+    char_u	*textfield,
+    int		ex_cmd)
 {
     Handle	buttonDITL;
     Handle	iconDITL;
@@ -5704,7 +5704,7 @@
 
 	/* Resize the button to fit its name */
 	width = StringWidth(name) + 2 * dfltButtonEdge;
-	/* Limite the size of any button to an acceptable value. */
+	/* Limit the size of any button to an acceptable value. */
 	/* TODO: Should be based on the message width */
 	if (width > maxButtonWidth)
 	    width = maxButtonWidth;
@@ -5723,13 +5723,13 @@
     iconDITL = GetResource('DITL', 131);
     switch (type)
     {
-	case VIM_GENERIC:  useIcon = kNoteIcon;
-	case VIM_ERROR:    useIcon = kStopIcon;
-	case VIM_WARNING:  useIcon = kCautionIcon;
-	case VIM_INFO:     useIcon = kNoteIcon;
-	case VIM_QUESTION: useIcon = kNoteIcon;
-	default:      useIcon = kStopIcon;
-    };
+	case VIM_GENERIC:
+	case VIM_INFO:
+	case VIM_QUESTION: useIcon = kNoteIcon; break;
+	case VIM_WARNING:  useIcon = kCautionIcon; break;
+	case VIM_ERROR:    useIcon = kStopIcon; break;
+	default:	   useIcon = kStopIcon;
+    }
     AppendDITL(theDialog, iconDITL, overlayDITL);
     ReleaseResource(iconDITL);
     GetDialogItem(theDialog, iconItm.idx, &itemType, &itemHandle, &box);
@@ -5887,12 +5887,12 @@
     /* Free the modal filterProc */
     DisposeRoutineDescriptor(dialogUPP);
 
-    /* Get ride of th edialog (free memory) */
+    /* Get ride of the dialog (free memory) */
     DisposeDialog(theDialog);
 
     return itemHit;
 /*
- * Usefull thing which could be used
+ * Useful thing which could be used
  * SetDialogTimeout(): Auto click a button after timeout
  * SetDialogTracksCursor() : Get the I-beam cursor over input box
  * MoveDialogItem():	    Probably better than SetDialogItem
@@ -5967,9 +5967,9 @@
 	/* New way */
 
 	/*
-	 * Get first devoice with one button.
-	 * This will probably be the standad mouse
-	 * startat head of cursor dev list
+	 * Get first device with one button.
+	 * This will probably be the standard mouse
+	 * start at head of cursor dev list
 	 *
 	 */
 
@@ -6100,7 +6100,7 @@
 #endif
 
 /*
- * Transfered from os_mac.c for MacOS X using os_unix.c prep work
+ * Transferred from os_mac.c for MacOS X using os_unix.c prep work
  */
 
     int
@@ -6151,7 +6151,7 @@
 }
 
 /*
- * Convert a FSSpec to a fuill path
+ * Convert a FSSpec to a full path
  */
 
 char_u *FullPathFromFSSpec_save(FSSpec file)
@@ -6215,8 +6215,8 @@
 
 #ifdef USE_UNIXFILENAME
     /*
-     * The function used here are available in Carbon, but
-     * do nothing une MacOS 8 and 9
+     * The functions used here are available in Carbon, but do nothing on
+     * MacOS 8 and 9.
      */
     if (error == fnfErr)
     {
@@ -6543,8 +6543,8 @@
 static ControlRef dataBrowser = NULL;
 
 // when the tabline is hidden, vim doesn't call update_tabline(). When
-// the tabline is shown again, show_tabline() is called before upate_tabline(),
-// and because of this, the tab labels and vims internal tabs are out of sync
+// the tabline is shown again, show_tabline() is called before update_tabline(),
+// and because of this, the tab labels and vim's internal tabs are out of sync
 // for a very short time. to prevent inconsistent state, we store the labels
 // of the tabs, not pointers to the tabs (which are invalid for a short time).
 static CFStringRef *tabLabels = NULL;
@@ -6578,7 +6578,7 @@
 
     // assert(property == kTabsColumn); // why is this violated??
 
-    // changeValue is true if we have a modifieable list and data was changed.
+    // changeValue is true if we have a modifiable list and data was changed.
     // In our case, it's always false.
     // (that is: if (changeValue) updateInternalData(); else return
     // internalData();
diff -Naur vim73.orig/src/gui_motif.c vim73/src/gui_motif.c
--- vim73.orig/src/gui_motif.c	2010-08-08 13:04:15.000000000 +0000
+++ vim73/src/gui_motif.c	2013-08-04 19:09:10.313944751 +0000
@@ -1344,7 +1344,7 @@
 	else
 	{
 	    /* Without shadows one can't sense whatever the button has been
-	     * pressed or not! However we wan't to save a bit of space...
+	     * pressed or not! However we want to save a bit of space...
 	     * Need the highlightThickness to see the focus.
 	     */
 	    XtSetArg(args[n], XmNhighlightThickness, 1); n++;
@@ -2549,13 +2549,14 @@
 #endif
 
     int
-gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield)
+gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield, ex_cmd)
     int		type UNUSED;
     char_u	*title;
     char_u	*message;
     char_u	*button_names;
     int		dfltbutton;
     char_u	*textfield;		/* buffer of size IOSIZE */
+    int		ex_cmd UNUSED;
 {
     char_u		*buts;
     char_u		*p, *next;
@@ -3204,7 +3205,7 @@
 # ifdef FEAT_FOOTER
 /*
  * The next toolbar enter/leave callbacks should really do balloon help.  But
- * I have to use footer help for backwards compatability.  Hopefully both will
+ * I have to use footer help for backwards compatibility.  Hopefully both will
  * get implemented and the user will have a choice.
  */
     static void
@@ -3652,7 +3653,7 @@
     static void
 set_label(w, label)
     Widget w;
-    char_u *label;
+    char *label;
 {
     XmString	str;
     char_u	*p, *next;
@@ -3661,7 +3662,7 @@
     if (!w)
 	return;
 
-    p = vim_strsave(label);
+    p = vim_strsave((char_u *)label);
     if (p == NULL)
 	return;
     for (next = p; *next; ++next)
diff -Naur vim73.orig/src/gui_photon.c vim73/src/gui_photon.c
--- vim73.orig/src/gui_photon.c	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/gui_photon.c	2013-08-04 19:09:10.317278074 +0000
@@ -13,8 +13,11 @@
 
 #include "vim.h"
 
-#ifdef FEAT_TOOLBAR
-# include <photon/PxImage.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# ifdef FEAT_TOOLBAR
+#  include <photon/PxImage.h>
+# endif
 #endif
 
 #if !defined(__QNX__)
@@ -32,9 +35,9 @@
 #endif
 
 #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
-#define RGB(r,g,b) PgRGB(r,g,b)
+#define RGB(r, g, b) PgRGB(r, g, b)
 
-#define EVENT_BUFFER_SIZE sizeof( PhEvent_t ) + 1000
+#define EVENT_BUFFER_SIZE sizeof(PhEvent_t) + 1000
 
 /* Some defines for gui_mch_mousehide() */
 #define MOUSE_HIDE		TRUE
@@ -58,7 +61,7 @@
 static PhPoint_t    gui_ph_raw_offset;
 static PtWidget_t   *gui_ph_timer_cursor;   /* handle cursor blinking */
 static PtWidget_t   *gui_ph_timer_timeout;  /* used in gui_mch_wait_for_chars */
-static short	    is_timeout;		    /* Has the timeout occured? */
+static short	    is_timeout;		    /* Has the timeout occurred? */
 
 /*
  * This is set inside the mouse callback for a right mouse
@@ -206,53 +209,53 @@
 static PtCallbackF_t gui_ph_handle_menu_unrealized;
 
 #ifdef USE_PANEL_GROUP
-static void gui_ph_get_panelgroup_margins( short*, short*, short*, short* );
+static void gui_ph_get_panelgroup_margins(short*, short*, short*, short*);
 #endif
 
 #ifdef FEAT_TOOLBAR
-static PhImage_t *gui_ph_toolbar_find_icon( vimmenu_T *menu );
+static PhImage_t *gui_ph_toolbar_find_icon(vimmenu_T *menu);
 #endif
 
-static void gui_ph_draw_start( void );
-static void gui_ph_draw_end( void );
+static void gui_ph_draw_start(void);
+static void gui_ph_draw_end(void);
 
 /* Set the text for the balloon */
-static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
+static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
 			     PtWidget_t *widget,
 			     int position,
 			     char *text,
 			     char *font,
 			     PgColor_t fill_color,
-			     PgColor_t text_color );
+			     PgColor_t text_color);
 
 /****************************************************************************/
 
-static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
+static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
 			     PtWidget_t *widget,
 			     int position,
 			     char *text,
 			     char *font,
 			     PgColor_t fill_color,
-			     PgColor_t text_color )
+			     PgColor_t text_color)
 {
     PtArg_t arg;
     vimmenu_T *menu;
     char_u  *tooltip;
 
-    PtSetArg( &arg, Pt_ARG_POINTER, &menu, 0 );
-    PtGetResources( widget, 1, &arg );
+    PtSetArg(&arg, Pt_ARG_POINTER, &menu, 0);
+    PtGetResources(widget, 1, &arg);
 
     /* Override the text and position */
 
     tooltip = text;
-    if( menu != NULL )
+    if (menu != NULL)
     {
 	int index = MENU_INDEX_TIP;
-	if( menu->strings[ index ] != NULL )
+	if (menu->strings[ index ] != NULL)
 	    tooltip = menu->strings[ index ];
     }
 
-    return( PtInflateBalloon(
+    return PtInflateBalloon(
 	    window,
 	    widget,
 	    /* Don't put the balloon at the bottom,
@@ -261,25 +264,25 @@
 	    tooltip,
 	    font,
 	    fill_color,
-	    text_color ) );
+	    text_color);
 }
 
     static void
-gui_ph_resize_container( void )
+gui_ph_resize_container(void)
 {
     PhArea_t area;
 
-    PtWidgetArea( gui.vimWindow, &area );
-    PtWidgetPos ( gui.vimContainer, &area.pos );
+    PtWidgetArea(gui.vimWindow, &area);
+    PtWidgetPos (gui.vimContainer, &area.pos);
 
-    PtSetResource( gui.vimContainer, Pt_ARG_AREA, &area, 0 );
+    PtSetResource(gui.vimContainer, Pt_ARG_AREA, &area, 0);
 }
 
     static int
 gui_ph_handle_menu_resize(
 	PtWidget_t *widget,
 	void *other,
-	PtCallbackInfo_t *info )
+	PtCallbackInfo_t *info)
 {
     PtContainerCallback_t *sizes = info->cbdata;
     PtWidget_t		*container;
@@ -291,7 +294,7 @@
     /* Because vim treats the toolbar and menubar separately,
      * and here they're lumped together into a PtToolbarGroup,
      * we only need either menu_height or toolbar_height set at once */
-    if( gui.menu_is_active )
+    if (gui.menu_is_active)
     {
 	gui.menu_height = height;
 	gui.toolbar_height = 0;
@@ -310,16 +313,16 @@
     container = gui.vimContainer;
 #endif
 
-    PtSetResource( container, Pt_ARG_POS, &below_menu, 0 );
+    PtSetResource(container, Pt_ARG_POS, &below_menu, 0);
 
     gui_ph_resize_container();
 
 #ifdef USE_PANEL_GROUP
     gui_ph_get_panelgroup_margins(
 	    &pg_margin_top, &pg_margin_bottom,
-	    &pg_margin_left, &pg_margin_right );
+	    &pg_margin_left, &pg_margin_right);
 #endif
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /*
@@ -330,23 +333,23 @@
 gui_ph_handle_timer_cursor(
 	PtWidget_t *widget,
 	void *data,
-	PtCallbackInfo_t *info )
+	PtCallbackInfo_t *info)
 {
-    if( blink_state == BLINK_ON )
+    if (blink_state == BLINK_ON)
     {
 	gui_undraw_cursor();
 	blink_state = BLINK_OFF;
-	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-		blink_offtime, 0 );
+	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+		blink_offtime, 0);
     }
     else
     {
 	gui_update_cursor(TRUE, FALSE);
 	blink_state = BLINK_ON;
-	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-		blink_ontime, 0 );
+	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+		blink_ontime, 0);
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
@@ -354,25 +357,25 @@
 {
     is_timeout = TRUE;
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_handle_window_cb( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_window_cb(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PhWindowEvent_t *we = info->cbdata;
     ushort_t *width, *height;
 
-    switch( we->event_f ) {
+    switch (we->event_f) {
 	case Ph_WM_CLOSE:
 	    gui_shell_closed();
 	    break;
 
 	case Ph_WM_FOCUS:
 	    /* Just in case it's hidden and needs to be shown */
-	    gui_mch_mousehide( MOUSE_SHOW );
+	    gui_mch_mousehide(MOUSE_SHOW);
 
-	    if( we->event_state == Ph_WM_EVSTATE_FOCUS )
+	    if (we->event_state == Ph_WM_EVSTATE_FOCUS)
 	    {
 		gui_focus_change(TRUE);
 		gui_mch_start_blink();
@@ -385,28 +388,28 @@
 	    break;
 
 	case Ph_WM_RESIZE:
-	    PtGetResource( gui.vimWindow, Pt_ARG_WIDTH, &width, 0 );
-	    PtGetResource( gui.vimWindow, Pt_ARG_HEIGHT, &height, 0 );
+	    PtGetResource(gui.vimWindow, Pt_ARG_WIDTH, &width, 0);
+	    PtGetResource(gui.vimWindow, Pt_ARG_HEIGHT, &height, 0);
 #ifdef USE_PANEL_GROUP
 	    width  -= (pg_margin_left + pg_margin_right);
 	    height -= (pg_margin_top + pg_margin_bottom);
 #endif
-	    gui_resize_shell( *width, *height );
-	    gui_set_shellsize( FALSE, FALSE, RESIZE_BOTH );
+	    gui_resize_shell(*width, *height);
+	    gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
 	    is_ignore_draw = FALSE;
-	    PtEndFlux( gui.vimContainer );
-	    PtContainerRelease( gui.vimContainer );
+	    PtEndFlux(gui.vimContainer);
+	    PtContainerRelease(gui.vimContainer);
 	    break;
 
 	default:
 	    break;
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_handle_scrollbar( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_scrollbar(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PtScrollbarCallback_t *scroll;
     scrollbar_T *sb;
@@ -415,10 +418,10 @@
     scroll = info->cbdata;
 
     sb = (scrollbar_T *) data;
-    if( sb != NULL )
+    if (sb != NULL)
     {
 	value = scroll->position;
-	switch( scroll->action )
+	switch (scroll->action)
 	{
 	    case Pt_SCROLL_DRAGGED:
 		dragging = TRUE;
@@ -426,107 +429,107 @@
 
 	    case Pt_SCROLL_SET:
 		/* FIXME: return straight away here? */
-		return( Pt_CONTINUE );
+		return Pt_CONTINUE;
 		break;
 	}
 
 	gui_drag_scrollbar(sb, value, dragging);
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_handle_keyboard( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PhKeyEvent_t    *key;
     unsigned char   string[6];
     int		    len, i;
     int		    ch, modifiers;
 
-    key = PhGetData( info->event );
+    key = PhGetData(info->event);
 
     ch = modifiers = len = 0;
 
-    if( p_mh )
-	gui_mch_mousehide( MOUSE_HIDE );
+    if (p_mh)
+	gui_mch_mousehide(MOUSE_HIDE);
 
     /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
-    if( key->key_flags & Pk_KF_Compose )
+    if (key->key_flags & Pk_KF_Compose)
     {
-	return( Pt_CONTINUE );
+	return Pt_CONTINUE;
     }
 
-    if( (key->key_flags & Pk_KF_Cap_Valid) &&
-	    PkIsKeyDown( key->key_flags ) )
+    if ((key->key_flags & Pk_KF_Cap_Valid) &&
+	    PkIsKeyDown(key->key_flags))
     {
 #ifdef FEAT_MENU
 	/*
 	 * Only show the menu if the Alt key is down, and the Shift & Ctrl
 	 * keys aren't down, as well as the other conditions
 	 */
-	if( ( ( key->key_mods & Pk_KM_Alt ) &&
-		    !( key->key_mods & Pk_KM_Shift ) &&
-		    !( key->key_mods & Pk_KM_Ctrl ) ) &&
+	if (((key->key_mods & Pk_KM_Alt) &&
+		    !(key->key_mods & Pk_KM_Shift) &&
+		    !(key->key_mods & Pk_KM_Ctrl)) &&
 	    gui.menu_is_active &&
-	    ( *p_wak == 'y' ||
-	      ( *p_wak == 'm' &&
-		gui_is_menu_shortcut( key->key_cap ) ) ) )
+	    (*p_wak == 'y' ||
+	      (*p_wak == 'm' &&
+		gui_is_menu_shortcut(key->key_cap))))
 	{
 	    /* Fallthrough and let photon look for the hotkey */
-	    return( Pt_CONTINUE );
+	    return Pt_CONTINUE;
 	}
 #endif
 
-	for( i = 0; special_keys[i].key_sym != 0; i++ )
+	for (i = 0; special_keys[i].key_sym != 0; i++)
 	{
-	    if( special_keys[i].key_sym == key->key_cap )
+	    if (special_keys[i].key_sym == key->key_cap)
 	    {
 		len = 0;
-		if( special_keys[i].vim_code1 == NUL )
+		if (special_keys[i].vim_code1 == NUL)
 		    ch = special_keys[i].vim_code0;
 		else
 		{
 		    /* Detect if a keypad number key has been pressed
 		     * and change the key if Num Lock is on */
-		    if( key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
-			    && ( key->key_mods & Pk_KM_Num_Lock ) )
+		    if (key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
+			    && (key->key_mods & Pk_KM_Num_Lock))
 		    {
 			/* FIXME: For now, just map the key to a ascii value
 			 * (see <photon/PkKeyDef.h>) */
 			ch = key->key_cap - 0xf080;
 		    }
 		    else
-			ch = TO_SPECIAL( special_keys[i].vim_code0,
-				special_keys[i].vim_code1 );
+			ch = TO_SPECIAL(special_keys[i].vim_code0,
+				special_keys[i].vim_code1);
 		}
 		break;
 	    }
 	}
 
-	if( key->key_mods & Pk_KM_Ctrl )
+	if (key->key_mods & Pk_KM_Ctrl)
 	    modifiers |= MOD_MASK_CTRL;
-	if( key->key_mods & Pk_KM_Alt )
+	if (key->key_mods & Pk_KM_Alt)
 	    modifiers |= MOD_MASK_ALT;
-	if( key->key_mods & Pk_KM_Shift )
+	if (key->key_mods & Pk_KM_Shift)
 	    modifiers |= MOD_MASK_SHIFT;
 
 	/* Is this not a special key? */
-	if( special_keys[i].key_sym == 0 )
+	if (special_keys[i].key_sym == 0)
 	{
-	    ch = PhTo8859_1( key );
-	    if( ch == -1
+	    ch = PhTo8859_1(key);
+	    if (ch == -1
 #ifdef FEAT_MBYTE
-		|| ( enc_utf8 && ch > 127 )
+		|| (enc_utf8 && ch > 127)
 #endif
 		)
 	    {
 #ifdef FEAT_MBYTE
-		len = PhKeyToMb( string, key );
-		if( len > 0 )
+		len = PhKeyToMb(string, key);
+		if (len > 0)
 		{
 		    static char buf[6];
 		    int src_taken, dst_made;
-		    if( enc_utf8 != TRUE )
+		    if (enc_utf8 != TRUE)
 		    {
 			PxTranslateFromUTF(
 				charset_translate,
@@ -535,70 +538,70 @@
 				&src_taken,
 				buf,
 				6,
-				&dst_made );
+				&dst_made);
 
-			add_to_input_buf( buf, dst_made );
+			add_to_input_buf(buf, dst_made);
 		    }
 		    else
 		    {
-			add_to_input_buf( string, len );
+			add_to_input_buf(string, len);
 		    }
 
-		    return( Pt_CONSUME );
+		    return Pt_CONSUME;
 		}
 		len = 0;
 #endif
 		ch = key->key_cap;
-		if( ch < 0xff )
+		if (ch < 0xff)
 		{
 		    /* FIXME: is this the right thing to do? */
-		    if( modifiers & MOD_MASK_CTRL )
+		    if (modifiers & MOD_MASK_CTRL)
 		    {
 			modifiers &= ~MOD_MASK_CTRL;
 
-			if( ( ch >= 'a'  &&  ch <= 'z' ) ||
+			if ((ch >= 'a' && ch <= 'z') ||
 				ch == '[' ||
 				ch == ']' ||
-				ch == '\\' )
-			    ch = Ctrl_chr( ch );
-			else if( ch == '2' )
+				ch == '\\')
+			    ch = Ctrl_chr(ch);
+			else if (ch == '2')
 			    ch = NUL;
-			else if( ch == '6' )
+			else if (ch == '6')
 			    ch = 0x1e;
-			else if( ch == '-' )
+			else if (ch == '-')
 			    ch = 0x1f;
 			else
 			    modifiers |= MOD_MASK_CTRL;
 		    }
 
-		    if( modifiers & MOD_MASK_ALT )
+		    if (modifiers & MOD_MASK_ALT)
 		    {
-			ch = Meta( ch );
+			ch = Meta(ch);
 			modifiers &= ~MOD_MASK_ALT;
 		    }
 		}
 		else
 		{
-		    return( Pt_CONTINUE );
+		    return Pt_CONTINUE;
 		}
 	    }
 	    else
 		modifiers &= ~MOD_MASK_SHIFT;
 	}
 
-	ch = simplify_key( ch, &modifiers );
-	if( modifiers )
+	ch = simplify_key(ch, &modifiers);
+	if (modifiers)
 	{
 	    string[ len++ ] = CSI;
 	    string[ len++ ] = KS_MODIFIER;
 	    string[ len++ ] = modifiers;
 	}
 
-	if( IS_SPECIAL( ch ) )
+	if (IS_SPECIAL(ch))
 	{
 	    string[ len++ ] = CSI;
-	    string[ len++ ] = K_SECOND( ch );
-	    string[ len++ ] = K_THIRD( ch );
+	    string[ len++ ] = K_SECOND(ch);
+	    string[ len++ ] = K_THIRD(ch);
 	}
 	else
 	{
@@ -619,28 +622,28 @@
 	    string[ len++ ] = KE_CSI;
 	}
 
-	if( len > 0 )
+	if (len > 0)
 	{
-	    add_to_input_buf( string, len );
-	    return( Pt_CONSUME );
+	    add_to_input_buf(string, len);
+	    return Pt_CONSUME;
 	}
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_mouse(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PhPointerEvent_t *pointer;
     PhRect_t	     *pos;
     int		     button = 0, repeated_click, modifiers = 0x0;
     short	     mouse_x, mouse_y;
 
-    pointer = PhGetData( info->event );
-    pos = PhGetRects( info->event );
+    pointer = PhGetData(info->event);
+    pos = PhGetRects(info->event);
 
-    gui_mch_mousehide( MOUSE_SHOW );
+    gui_mch_mousehide(MOUSE_SHOW);
 
     /*
      * Coordinates need to be relative to the base window,
@@ -649,27 +652,27 @@
     mouse_x = pos->ul.x + gui.border_width;
     mouse_y = pos->ul.y + gui.border_width;
 
-    if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
+    if (info->event->type == Ph_EV_PTR_MOTION_NOBUTTON)
     {
-	gui_mouse_moved( mouse_x, mouse_y );
-	return( Pt_CONTINUE );
+	gui_mouse_moved(mouse_x, mouse_y);
+	return Pt_CONTINUE;
     }
 
-    if( pointer->key_mods & Pk_KM_Shift )
+    if (pointer->key_mods & Pk_KM_Shift)
 	modifiers |= MOUSE_SHIFT;
-    if( pointer->key_mods & Pk_KM_Ctrl )
+    if (pointer->key_mods & Pk_KM_Ctrl)
 	modifiers |= MOUSE_CTRL;
-    if( pointer->key_mods & Pk_KM_Alt )
+    if (pointer->key_mods & Pk_KM_Alt)
 	modifiers |= MOUSE_ALT;
 
     /*
      * FIXME More than one button may be involved, but for
      * now just deal with one
      */
-    if( pointer->buttons & Ph_BUTTON_SELECT )
+    if (pointer->buttons & Ph_BUTTON_SELECT)
 	button = MOUSE_LEFT;
 
-    if( pointer->buttons & Ph_BUTTON_MENU )
+    if (pointer->buttons & Ph_BUTTON_MENU)
     {
 	button = MOUSE_RIGHT;
 	/* Need the absolute coordinates for the popup menu */
@@ -677,65 +680,65 @@
 	abs_mouse.y = pointer->pos.y;
     }
 
-    if( pointer->buttons & Ph_BUTTON_ADJUST )
+    if (pointer->buttons & Ph_BUTTON_ADJUST)
 	button = MOUSE_MIDDLE;
 
     /* Catch a real release (not phantom or other releases */
-    if( info->event->type == Ph_EV_BUT_RELEASE )
+    if (info->event->type == Ph_EV_BUT_RELEASE)
 	button = MOUSE_RELEASE;
 
-    if( info->event->type & Ph_EV_PTR_MOTION_BUTTON )
+    if (info->event->type & Ph_EV_PTR_MOTION_BUTTON)
 	button = MOUSE_DRAG;
 
 #if 0
     /* Vim doesn't use button repeats */
-    if( info->event->type & Ph_EV_BUT_REPEAT )
+    if (info->event->type & Ph_EV_BUT_REPEAT)
 	button = MOUSE_DRAG;
 #endif
 
     /* Don't do anything if it is one of the phantom mouse release events */
-    if( ( button != MOUSE_RELEASE ) ||
-	    ( info->event->subtype == Ph_EV_RELEASE_REAL ) )
+    if ((button != MOUSE_RELEASE) ||
+	    (info->event->subtype == Ph_EV_RELEASE_REAL))
     {
 	repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
 
-	gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
+	gui_send_mouse_event(button , mouse_x, mouse_y, repeated_click, modifiers);
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /* Handle a focus change of the PtRaw widget */
     static int
-gui_ph_handle_focus( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_focus(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
-    if( info->reason == Pt_CB_LOST_FOCUS )
+    if (info->reason == Pt_CB_LOST_FOCUS)
     {
-	PtRemoveEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
-		gui_ph_handle_mouse, NULL );
+	PtRemoveEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+		gui_ph_handle_mouse, NULL);
 
-	gui_mch_mousehide( MOUSE_SHOW );
+	gui_mch_mousehide(MOUSE_SHOW);
     }
     else
     {
-	PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
-		gui_ph_handle_mouse, NULL );
+	PtAddEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+		gui_ph_handle_mouse, NULL);
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static void
-gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
+gui_ph_handle_raw_draw(PtWidget_t *widget, PhTile_t *damage)
 {
     PhRect_t	*r;
     PhPoint_t	offset;
     PhPoint_t	translation;
 
-    if( is_ignore_draw == TRUE )
+    if (is_ignore_draw == TRUE)
 	return;
 
-    PtSuperClassDraw( PtBasic, widget, damage );
-    PgGetTranslation( &translation );
+    PtSuperClassDraw(PtBasic, widget, damage);
+    PgGetTranslation(&translation);
     PgClearTranslation();
 
 #if 0
@@ -750,21 +753,21 @@
     out_flush();
 #endif
 
-    PtWidgetOffset( widget, &offset );
-    PhTranslatePoint( &offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+    PtWidgetOffset(widget, &offset);
+    PhTranslatePoint(&offset, PtWidgetPos(gui.vimTextArea, NULL));
 
 #if 1
     /* Redraw individual damage regions */
-    if( damage->next != NULL )
+    if (damage->next != NULL)
 	damage = damage->next;
 
-    while( damage != NULL )
+    while (damage != NULL)
     {
 	r = &damage->rect;
 	gui_redraw(
 		r->ul.x - offset.x, r->ul.y - offset.y,
 		r->lr.x - r->ul.x + 1,
-		r->lr.y - r->ul.y + 1 );
+		r->lr.y - r->ul.y + 1);
 	damage = damage->next;
     }
 #else
@@ -773,39 +776,39 @@
     gui_redraw(
 	    r->ul.x - offset.x, r->ul.y - offset.y,
 	    r->lr.x - r->ul.x + 1,
-	    r->lr.y - r->ul.y + 1 );
+	    r->lr.y - r->ul.y + 1);
 #endif
 
-    PgSetTranslation( &translation, 0 );
+    PgSetTranslation(&translation, 0);
 }
 
     static int
 gui_ph_handle_pulldown_menu(
 	PtWidget_t *widget,
 	void *data,
-	PtCallbackInfo_t *info )
+	PtCallbackInfo_t *info)
 {
-    if( data != NULL )
+    if (data != NULL)
     {
 	vimmenu_T *menu = (vimmenu_T *) data;
 
-	PtPositionMenu( menu->submenu_id, NULL );
-	PtRealizeWidget( menu->submenu_id );
+	PtPositionMenu(menu->submenu_id, NULL);
+	PtRealizeWidget(menu->submenu_id);
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /* This is used for pulldown/popup menus and also toolbar buttons */
     static int
-gui_ph_handle_menu( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_handle_menu(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
-    if( data != NULL )
+    if (data != NULL)
     {
 	vimmenu_T *menu = (vimmenu_T *) data;
-	gui_menu_cb( menu );
+	gui_menu_cb(menu);
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /* Stop focus from disappearing into the menubar... */
@@ -813,20 +816,20 @@
 gui_ph_handle_menu_unrealized(
 	PtWidget_t *widget,
 	void *data,
-	PtCallbackInfo_t *info )
+	PtCallbackInfo_t *info)
 {
-    PtGiveFocus( gui.vimTextArea, NULL );
-    return( Pt_CONTINUE );
+    PtGiveFocus(gui.vimTextArea, NULL);
+    return Pt_CONTINUE;
 }
 
     static int
 gui_ph_handle_window_open(
 	PtWidget_t *widget,
 	void *data,
-	PtCallbackInfo_t *info )
+	PtCallbackInfo_t *info)
 {
-    gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
-    return( Pt_CONTINUE );
+    gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
+    return Pt_CONTINUE;
 }
 
 /****************************************************************************/
@@ -836,74 +839,74 @@
 
 /* TODO: Set a clipping rect? */
     static void
-gui_ph_draw_start( void )
+gui_ph_draw_start(void)
 {
     PhGC_t *gc;
 
     gc = PgGetGC();
-    PgSetRegion( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) );
-    PgClearClippingsCx( gc );
-    PgClearTranslationCx( gc );
+    PgSetRegion(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)));
+    PgClearClippingsCx(gc);
+    PgClearTranslationCx(gc);
 
-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
 
-    PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
+    PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
 }
 
     static void
-gui_ph_draw_end( void )
+gui_ph_draw_end(void)
 {
     gui_ph_raw_offset.x = -gui_ph_raw_offset.x;
     gui_ph_raw_offset.y = -gui_ph_raw_offset.y;
-    PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
+    PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
 }
 
 #ifdef USE_PANEL_GROUP
     static vimmenu_T *
-gui_ph_find_buffer_item( char_u *name )
+gui_ph_find_buffer_item(char_u *name)
 {
     vimmenu_T *top_level = root_menu;
     vimmenu_T *items = NULL;
 
-    while( top_level != NULL &&
-	    ( STRCMP( top_level->dname, "Buffers" ) != 0 ) )
+    while (top_level != NULL &&
+	    (STRCMP(top_level->dname, "Buffers") != 0))
 	top_level = top_level->next;
 
-    if( top_level != NULL )
+    if (top_level != NULL)
     {
 	items = top_level->children;
 
-	while( items != NULL &&
-		( STRCMP( items->dname, name ) != 0 ) )
+	while (items != NULL &&
+		(STRCMP(items->dname, name) != 0))
 	    items = items->next;
     }
-    return( items );
+    return items;
 }
 
     static void
-gui_ph_pg_set_buffer_num( int_u buf_num )
+gui_ph_pg_set_buffer_num(int_u buf_num)
 {
     int i;
     char search[16];
     char *mark;
 
-    if( gui.vimTextArea == NULL || buf_num == 0 )
+    if (gui.vimTextArea == NULL || buf_num == 0)
 	return;
 
     search[0] = '(';
-    ultoa( buf_num, &search[1], 10 );
-    STRCAT( search, ")" );
+    ultoa(buf_num, &search[1], 10);
+    STRCAT(search, ")");
 
-    for( i = 0; i < num_panels; i++ )
+    for (i = 0; i < num_panels; i++)
     {
 	/* find the last "(" in the panel title and see if the buffer
 	 * number in the title matches the one we're looking for */
-	mark = STRRCHR( panel_titles[ i ], '(' );
-	if( mark != NULL && STRCMP( mark, search ) == 0 )
+	mark = STRRCHR(panel_titles[ i ], '(');
+	if (mark != NULL && STRCMP(mark, search) == 0)
 	{
-	    PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
-		    i, 0 );
+	    PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
+		    i, 0);
 	}
     }
 }
@@ -912,22 +915,22 @@
 gui_ph_handle_pg_change(
 	PtWidget_t *widget,
 	void *data,
-	PtCallbackInfo_t *info )
+	PtCallbackInfo_t *info)
 {
     vimmenu_T *menu;
     PtPanelGroupCallback_t *panel;
 
-    if( info->event != NULL )
+    if (info->event != NULL)
     {
 	panel = info->cbdata;
-	if( panel->new_panel != NULL )
+	if (panel->new_panel != NULL)
 	{
-	    menu = gui_ph_find_buffer_item( panel->new_panel );
-	    if( menu )
-		gui_menu_cb( menu );
+	    menu = gui_ph_find_buffer_item(panel->new_panel);
+	    if (menu)
+		gui_menu_cb(menu);
 	}
     }
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
     static void
@@ -935,17 +938,17 @@
 	short *top,
 	short *bottom,
 	short *left,
-	short *right )
+	short *right)
 {
     unsigned short abs_raw_x, abs_raw_y, abs_panel_x, abs_panel_y;
     const unsigned short *margin_top, *margin_bottom;
     const unsigned short *margin_left, *margin_right;
 
-    PtGetAbsPosition( gui.vimTextArea, &abs_raw_x, &abs_raw_y );
-    PtGetAbsPosition( gui.vimPanelGroup, &abs_panel_x, &abs_panel_y );
+    PtGetAbsPosition(gui.vimTextArea, &abs_raw_x, &abs_raw_y);
+    PtGetAbsPosition(gui.vimPanelGroup, &abs_panel_x, &abs_panel_y);
 
-    PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0 );
-    PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0 );
+    PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0);
+    PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0);
 
     abs_raw_x -= abs_panel_x;
     abs_raw_y -= abs_panel_y;
@@ -959,85 +962,85 @@
 
 /* Used for the tabs for PtPanelGroup */
     static int
-gui_ph_is_buffer_item( vimmenu_T *menu, vimmenu_T *parent )
+gui_ph_is_buffer_item(vimmenu_T *menu, vimmenu_T *parent)
 {
     char *mark;
 
-    if( STRCMP( parent->dname, "Buffers" ) == 0 )
+    if (STRCMP(parent->dname, "Buffers") == 0)
     {
 	/* Look for '(' digits ')' */
-	mark = vim_strchr( menu->dname, '(' );
-	if( mark != NULL )
+	mark = vim_strchr(menu->dname, '(');
+	if (mark != NULL)
 	{
 	    mark++;
-	    while( isdigit( *mark ) )
+	    while (isdigit(*mark))
 		mark++;
 
-	    if( *mark == ')' )
-		return( TRUE);
+	    if (*mark == ')')
+		return TRUE;
 	}
     }
-    return( FALSE );
+    return FALSE;
 }
 
     static void
-gui_ph_pg_add_buffer(char *name )
+gui_ph_pg_add_buffer(char *name)
 {
     char **new_titles = NULL;
 
-    new_titles = (char **) alloc( ( num_panels + 1 ) * sizeof( char ** ) );
-    if( new_titles != NULL )
+    new_titles = (char **) alloc((num_panels + 1) * sizeof(char **));
+    if (new_titles != NULL)
     {
-	if( num_panels > 0 )
-	    memcpy( new_titles, panel_titles, num_panels * sizeof( char ** ) );
+	if (num_panels > 0)
+	    memcpy(new_titles, panel_titles, num_panels * sizeof(char **));
 
 	new_titles[ num_panels++ ] = name;
 
-	PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
-		num_panels );
+	PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+		num_panels);
 
-	vim_free( panel_titles );
+	vim_free(panel_titles);
 	panel_titles = new_titles;
     }
 }
 
     static void
-gui_ph_pg_remove_buffer( char *name )
+gui_ph_pg_remove_buffer(char *name)
 {
     int i;
     char **new_titles = NULL;
 
     /* If there is only 1 panel, we just use the temporary place holder */
-    if( num_panels > 1 )
+    if (num_panels > 1)
     {
-	new_titles = (char **) alloc( ( num_panels - 1 ) * sizeof( char ** ) );
-	if( new_titles != NULL )
+	new_titles = (char **) alloc((num_panels - 1) * sizeof(char **));
+	if (new_titles != NULL)
 	{
 	    char **s = new_titles;
 	    /* Copy all the titles except the one we're removing */
-	    for( i = 0; i < num_panels; i++ )
+	    for (i = 0; i < num_panels; i++)
 	    {
-		if( STRCMP( panel_titles[ i ], name ) != 0 )
+		if (STRCMP(panel_titles[ i ], name) != 0)
 		{
 		    *s++ = panel_titles[ i ];
 		}
 	    }
 	    num_panels--;
 
-	    PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
-		    num_panels );
+	    PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+		    num_panels);
 
-	    vim_free( panel_titles );
+	    vim_free(panel_titles);
 	    panel_titles = new_titles;
 	}
     }
     else
     {
 	num_panels--;
-	PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
-		1 );
+	PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
+		1);
 
-	vim_free( panel_titles );
+	vim_free(panel_titles);
 	panel_titles = NULL;
     }
 }
@@ -1047,38 +1050,38 @@
 gui_ph_handle_buffer_remove(
 	PtWidget_t *widget,
 	void *data,
-	PtCallbackInfo_t *info )
+	PtCallbackInfo_t *info)
 {
     vimmenu_T *menu;
 
-    if( data != NULL )
+    if (data != NULL)
     {
 	menu = (vimmenu_T *) data;
-	gui_ph_pg_remove_buffer( menu->dname );
+	gui_ph_pg_remove_buffer(menu->dname);
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 #endif
 
     static int
-gui_ph_pane_resize( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_pane_resize(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
-    if( PtWidgetIsRealized( widget ) )
+    if (PtWidgetIsRealized(widget))
     {
 	is_ignore_draw = TRUE;
-	PtStartFlux( gui.vimContainer );
-	PtContainerHold( gui.vimContainer );
+	PtStartFlux(gui.vimContainer);
+	PtContainerHold(gui.vimContainer);
     }
 
-    return( Pt_CONTINUE );
+    return Pt_CONTINUE;
 }
 
 /****************************************************************************/
 
 #ifdef FEAT_MBYTE
     void
-gui_ph_encoding_changed( int new_encoding )
+gui_ph_encoding_changed(int new_encoding)
 {
     /* Default encoding is latin1 */
     char *charset = "latin1";
@@ -1094,13 +1097,13 @@
 	{ DBCS_CHS, "gb" }
     };
 
-    for( i = 0; i < ARRAY_LENGTH( charsets ); i++ )
+    for (i = 0; i < ARRAY_LENGTH(charsets); i++)
     {
-	if( new_encoding == charsets[ i ].encoding )
+	if (new_encoding == charsets[ i ].encoding)
 	    charset = charsets[ i ].name;
     }
 
-    charset_translate = PxTranslateSet( charset_translate, charset );
+    charset_translate = PxTranslateSet(charset_translate, charset);
 }
 #endif
 
@@ -1112,7 +1115,7 @@
     int	    *argc;
     char    **argv;
 {
-    PtInit( NULL );
+    PtInit(NULL);
 }
 
     int
@@ -1124,90 +1127,90 @@
     PhDim_t	window_size = {100, 100}; /* Arbitrary values */
     PhPoint_t	pos = {0, 0};
 
-    gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
-    if( gui.event_buffer == NULL )
-	return( FAIL );
+    gui.event_buffer = (PhEvent_t *) alloc(EVENT_BUFFER_SIZE);
+    if (gui.event_buffer == NULL)
+	return FAIL;
 
     /* Get a translation so we can convert from ISO Latin-1 to UTF */
-    charset_translate = PxTranslateSet( NULL, "latin1" );
+    charset_translate = PxTranslateSet(NULL, "latin1");
 
     /* The +2 is for the 1 pixel dark line on each side */
     gui.border_offset = gui.border_width = GUI_PH_MARGIN + 2;
 
     /* Handle close events ourselves */
-    PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE );
-    PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
-	    Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS );
-    PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
-    gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
-    if( gui.vimWindow == NULL )
-	return( FAIL );
-
-    PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
-    PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
-	    gui_ph_handle_window_open, NULL );
+    PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE);
+    PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
+	    Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS);
+    PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
+    gui.vimWindow = PtCreateWidget(PtWindow, NULL, n, args);
+    if (gui.vimWindow == NULL)
+	return FAIL;
+
+    PtAddCallback(gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL);
+    PtAddCallback(gui.vimWindow, Pt_CB_WINDOW_OPENING,
+	    gui_ph_handle_window_open, NULL);
 
     n = 0;
-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED );
-    PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_POS, &pos, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED);
+    PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_POS, &pos, 0);
 
 #ifdef USE_PANEL_GROUP
-    /* Put in a temprary place holder title */
-    PtSetArg( &args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1 );
+    /* Put in a temporary place holder title */
+    PtSetArg(&args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1);
 
-    gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
-    if( gui.vimPanelGroup == NULL )
-	return( FAIL );
+    gui.vimPanelGroup = PtCreateWidget(PtPanelGroup, gui.vimWindow, n, args);
+    if (gui.vimPanelGroup == NULL)
+	return FAIL;
 
-    PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
-	    gui_ph_handle_pg_change, NULL );
+    PtAddCallback(gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+	    gui_ph_handle_pg_change, NULL);
 #else
     /* Turn off all edge decorations */
-    PtSetArg( &args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL );
-    PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT );
-
-    gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
-    if( gui.vimContainer == NULL )
-	return( FAIL );
+    PtSetArg(&args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL);
+    PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT);
+
+    gui.vimContainer = PtCreateWidget(PtPane, gui.vimWindow, n, args);
+    if (gui.vimContainer == NULL)
+	return FAIL;
 
-    PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
+    PtAddCallback(gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL);
 #endif
 
     /* Size for the text area is set in gui_mch_set_text_area_pos */
     n = 0;
 
-    PtSetArg( &args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1 );
-    PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1);
+    PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0);
     /*
      * Using focus render also causes the whole widget to be redrawn
      * whenever it changes focus, which is very annoying :p
      */
-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
-	    Pt_GETS_FOCUS | Pt_HIGHLIGHTED );
+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
+	    Pt_GETS_FOCUS | Pt_HIGHLIGHTED);
 #ifndef FEAT_MOUSESHAPE
-    PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0);
 #endif
 
-    gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
-    if( gui.vimTextArea == NULL)
-	return( FAIL );
+    gui.vimTextArea = PtCreateWidget(PtRaw, Pt_DFLT_PARENT, n, args);
+    if (gui.vimTextArea == NULL)
+	return FAIL;
 
     /* TODO: use PtAddEventHandlers instead? */
     /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
-    PtAddEventHandler( gui.vimTextArea,
+    PtAddEventHandler(gui.vimTextArea,
 	    Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_PTR_MOTION_BUTTON,
-	    gui_ph_handle_mouse, NULL );
-    PtAddEventHandler( gui.vimTextArea, Ph_EV_KEY,
-	    gui_ph_handle_keyboard, NULL );
-    PtAddCallback( gui.vimTextArea, Pt_CB_GOT_FOCUS,
-	    gui_ph_handle_focus, NULL );
-    PtAddCallback( gui.vimTextArea, Pt_CB_LOST_FOCUS,
-	    gui_ph_handle_focus, NULL );
+	    gui_ph_handle_mouse, NULL);
+    PtAddEventHandler(gui.vimTextArea, Ph_EV_KEY,
+	    gui_ph_handle_keyboard, NULL);
+    PtAddCallback(gui.vimTextArea, Pt_CB_GOT_FOCUS,
+	    gui_ph_handle_focus, NULL);
+    PtAddCallback(gui.vimTextArea, Pt_CB_LOST_FOCUS,
+	    gui_ph_handle_focus, NULL);
 
     /*
      * Now that the text area widget has been created, set up the colours,
@@ -1218,62 +1221,62 @@
      * Create the two timers, not as accurate as using the kernel timer
      * functions, but good enough
      */
-    gui_ph_timer_cursor  = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
-    if( gui_ph_timer_cursor == NULL )
-	return( FAIL );
-
-    gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
-    if( gui_ph_timer_timeout == NULL )
-	return( FAIL );
+    gui_ph_timer_cursor  = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
+    if (gui_ph_timer_cursor == NULL)
+	return FAIL;
+
+    gui_ph_timer_timeout = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
+    if (gui_ph_timer_timeout == NULL)
+	return FAIL;
 
-    PtAddCallback( gui_ph_timer_cursor,  Pt_CB_TIMER_ACTIVATE,
+    PtAddCallback(gui_ph_timer_cursor,  Pt_CB_TIMER_ACTIVATE,
 	    gui_ph_handle_timer_cursor, NULL);
-    PtAddCallback( gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
+    PtAddCallback(gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
 	    gui_ph_handle_timer_timeout, NULL);
 
 #ifdef FEAT_MENU
     n = 0;
-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
-	    Pt_IS_ANCHORED );
-    gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
-	    n, args );
-    if( gui.vimToolBarGroup == NULL )
-	return( FAIL );
+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
+	    Pt_IS_ANCHORED);
+    gui.vimToolBarGroup = PtCreateWidget(PtToolbarGroup, gui.vimWindow,
+	    n, args);
+    if (gui.vimToolBarGroup == NULL)
+	return FAIL;
 
-    PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
-	    gui_ph_handle_menu_resize, NULL );
+    PtAddCallback(gui.vimToolBarGroup, Pt_CB_RESIZE,
+	    gui_ph_handle_menu_resize, NULL);
 
     n = 0;
     flags = 0;
-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
-    if( ! vim_strchr( p_go, GO_MENUS ) )
+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+    if (! vim_strchr(p_go, GO_MENUS))
     {
 	flags |= Pt_DELAY_REALIZE;
-	PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags );
+	PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags);
     }
-    gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
-    if( gui.vimMenuBar == NULL )
-	return( FAIL );
+    gui.vimMenuBar = PtCreateWidget(PtMenuBar, gui.vimToolBarGroup, n, args);
+    if (gui.vimMenuBar == NULL)
+	return FAIL;
 
 # ifdef FEAT_TOOLBAR
     n = 0;
 
-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
-	    Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED );
-    PtSetArg( &args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
-	    Pt_RESIZE_Y_AS_REQUIRED );
-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+	    Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED);
+    PtSetArg(&args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
+	    Pt_RESIZE_Y_AS_REQUIRED);
+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
 
     flags = Pt_GETS_FOCUS;
-    if( ! vim_strchr( p_go, GO_TOOLBAR ) )
+    if (! vim_strchr(p_go, GO_TOOLBAR))
 	flags |= Pt_DELAY_REALIZE;
 
-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags );
+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags);
 
-    gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
-    if( gui.vimToolBar == NULL )
-	return( FAIL );
+    gui.vimToolBar = PtCreateWidget(PtToolbar, gui.vimToolBarGroup, n, args);
+    if (gui.vimToolBar == NULL)
+	return FAIL;
 
     /*
      * Size for the toolbar is fetched in gui_mch_show_toolbar, after
@@ -1284,13 +1287,13 @@
 
 #endif
 
-    return( OK );
+    return OK;
 }
 
     int
 gui_mch_init_check(void)
 {
-    return( (is_photon_available == TRUE) ? OK : FAIL );
+    return (is_photon_available == TRUE) ? OK : FAIL;
 }
 
     int
@@ -1310,20 +1313,20 @@
     if (gui_win_x != -1 && gui_win_y != -1)
 	gui_mch_set_winpos(gui_win_x, gui_win_y);
 
-    return( (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL );
+    return (PtRealizeWidget(gui.vimWindow) == 0) ? OK : FAIL;
 }
 
     void
 gui_mch_exit(int rc)
 {
-    PtDestroyWidget( gui.vimWindow );
+    PtDestroyWidget(gui.vimWindow);
 
-    PxTranslateSet( charset_translate, NULL );
+    PxTranslateSet(charset_translate, NULL);
 
-    vim_free( gui.event_buffer );
+    vim_free(gui.event_buffer);
 
 #ifdef USE_PANEL_GROUPS
-    vim_free( panel_titles );
+    vim_free(panel_titles);
 #endif
 }
 
@@ -1333,10 +1336,10 @@
 /* When no events are available, photon will call this function, working is
  * set to FALSE, and the gui_mch_update loop will exit. */
     static int
-exit_gui_mch_update( void *data )
+exit_gui_mch_update(void *data)
 {
     *(int *)data = FALSE;
-    return( Pt_END );
+    return Pt_END;
 }
 
     void
@@ -1344,8 +1347,8 @@
 {
     int working = TRUE;
 
-    PtAppAddWorkProc( NULL, exit_gui_mch_update, &working );
-    while( ( working == TRUE ) && !vim_is_input_buf_full())
+    PtAppAddWorkProc(NULL, exit_gui_mch_update, &working);
+    while ((working == TRUE) && !vim_is_input_buf_full())
     {
 	PtProcessEvent();
     }
@@ -1356,23 +1359,23 @@
 {
     is_timeout = FALSE;
 
-    if( wtime > 0 )
-	PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0 );
+    if (wtime > 0)
+	PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0);
 
-    while( 1 )
+    while (1)
     {
 	PtProcessEvent();
-	if( input_available() )
+	if (input_available())
 	{
-	    PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
-	    return( OK );
+	    PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0);
+	    return OK;
 	}
-	else if( is_timeout == TRUE )
-	    return( FAIL );
+	else if (is_timeout == TRUE)
+	    return FAIL;
     }
 }
 
-#if defined( FEAT_BROWSE ) || defined( PROTO )
+#if defined(FEAT_BROWSE) || defined(PROTO)
 /*
  * Put up a file requester.
  * Returns the selected name in allocated memory, or NULL for Cancel.
@@ -1398,12 +1401,12 @@
     char_u  *open_text = NULL;
 
     flags = 0;
-    memset( &file, 0, sizeof( file ) );
+    memset(&file, 0, sizeof(file));
 
-    default_path = alloc( MAXPATHL + 1 + NAME_MAX + 1 );
-    if( default_path != NULL )
+    default_path = alloc(MAXPATHL + 1 + NAME_MAX + 1);
+    if (default_path != NULL)
     {
-	if( saving == TRUE )
+	if (saving == TRUE)
 	{
 	    /* Don't need Pt_FSR_CONFIRM_EXISTING, vim will ask anyway */
 	    flags |= Pt_FSR_NO_FCHECK;
@@ -1411,23 +1414,23 @@
 	}
 
 	/* combine the directory and filename into a single path */
-	if( initdir == NULL || *initdir == NUL )
+	if (initdir == NULL || *initdir == NUL)
 	{
-	    mch_dirname( default_path, MAXPATHL );
+	    mch_dirname(default_path, MAXPATHL);
 	    initdir = default_path;
 	}
 	else
 	{
-	    STRCPY( default_path, initdir );
+	    STRCPY(default_path, initdir);
 	    initdir = default_path;
 	}
 
-	if( default_name != NULL )
+	if (default_name != NULL)
 	{
-	    if( default_path[ STRLEN( default_path ) - 1 ] != '/' )
-		STRCAT( default_path, "/" );
+	    if (default_path[ STRLEN(default_path) - 1 ] != '/')
+		STRCAT(default_path, "/");
 
-	    STRCAT( default_path, default_name );
+	    STRCAT(default_path, default_name);
 	}
 
 	/* TODO: add a filter? */
@@ -1441,58 +1444,58 @@
 		NULL,
 		NULL,
 		&file,
-		flags );
+		flags);
 
-	vim_free( default_path );
+	vim_free(default_path);
 
-	if( file.ret == Pt_FSDIALOG_BTN1 )
-	    return( vim_strsave( file.path ) );
+	if (file.ret == Pt_FSDIALOG_BTN1)
+	    return vim_strsave(file.path);
     }
-    return( NULL );
+    return NULL;
 }
 #endif
 
-#if defined( FEAT_GUI_DIALOG ) || defined( PROTO )
+#if defined(FEAT_GUI_DIALOG) || defined(PROTO)
 static PtWidget_t *gui_ph_dialog_text = NULL;
 
     static int
-gui_ph_dialog_close( int button, void *data )
+gui_ph_dialog_close(int button, void *data)
 {
     PtModalCtrl_t *modal_ctrl = data;
     char_u *dialog_text, *vim_text;
 
-    if( gui_ph_dialog_text != NULL )
+    if (gui_ph_dialog_text != NULL)
     {
-	PtGetResource( gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0 );
-	PtGetResource( gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0 );
-	STRNCPY( vim_text, dialog_text, IOSIZE - 1 );
+	PtGetResource(gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0);
+	PtGetResource(gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0);
+	STRNCPY(vim_text, dialog_text, IOSIZE - 1);
     }
 
-    PtModalUnblock( modal_ctrl, (void *) button );
+    PtModalUnblock(modal_ctrl, (void *) button);
 
-    return( Pt_TRUE );
+    return Pt_TRUE;
 }
 
     static int
-gui_ph_dialog_text_enter( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_dialog_text_enter(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
-    if( info->reason_subtype == Pt_EDIT_ACTIVATE )
-	gui_ph_dialog_close( 1, data );
-    return( Pt_CONTINUE );
+    if (info->reason_subtype == Pt_EDIT_ACTIVATE)
+	gui_ph_dialog_close(1, data);
+    return Pt_CONTINUE;
 }
 
     static int
-gui_ph_dialog_esc( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
+gui_ph_dialog_esc(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
 {
     PhKeyEvent_t *key;
 
-    key = PhGetData( info->event );
-    if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
+    key = PhGetData(info->event);
+    if ((key->key_flags & Pk_KF_Cap_Valid) && (key->key_cap == Pk_Escape))
     {
-	gui_ph_dialog_close( 0, data );
-	return( Pt_CONSUME );
+	gui_ph_dialog_close(0, data);
+	return Pt_CONSUME;
     }
-    return( Pt_PROCESS );
+    return Pt_PROCESS;
 }
 
     int
@@ -1502,7 +1505,8 @@
 	char_u	*message,
 	char_u	*buttons,
 	int	default_button,
-	char_u	*textfield)
+	char_u	*textfield,
+	int	ex_cmd)
 {
     char_u	*str;
     char_u	**button_array;
@@ -1517,40 +1521,40 @@
 
     button_count = len = i = 0;
 
-    if( buttons == NULL || *buttons == NUL )
-	return( -1 );
+    if (buttons == NULL || *buttons == NUL)
+	return -1;
 
     /* There is one less separator than buttons, so bump up the button count */
     button_count = 1;
 
-    /* Count string length and number of seperators */
-    for( str = buttons; *str; str++ )
+    /* Count string length and number of separators */
+    for (str = buttons; *str; str++)
     {
 	len++;
-	if( *str == DLG_BUTTON_SEP )
+	if (*str == DLG_BUTTON_SEP)
 	    button_count++;
     }
 
-    if ( title == NULL )
+    if (title == NULL)
 	title = "Vim";
 
-    buttons_copy = alloc( len + 1 );
-    button_array = (char_u **) alloc( button_count * sizeof( char_u * ) );
-    if( buttons_copy != NULL && button_array != NULL )
+    buttons_copy = alloc(len + 1);
+    button_array = (char_u **) alloc(button_count * sizeof(char_u *));
+    if (buttons_copy != NULL && button_array != NULL)
     {
-	STRCPY( buttons_copy, buttons );
+	STRCPY(buttons_copy, buttons);
 
 	/*
 	 * Convert DLG_BUTTON_SEP into NUL's and fill in
 	 * button_array with the pointer to each NUL terminated string
 	 */
 	str = buttons_copy;
-	for( i = 0; i < button_count; i++ )
+	for (i = 0; i < button_count; i++)
 	{
 	    button_array[ i ] = str;
-	    for( ; *str; str++ )
+	    for (; *str; str++)
 	    {
-		if( *str == DLG_BUTTON_SEP )
+		if (*str == DLG_BUTTON_SEP)
 		{
 		    *str++ = NUL;
 		    break;
@@ -1564,7 +1568,7 @@
 		NULL,
 		message, NULL,
 		button_count, (const char **) button_array, NULL,
-		default_button, 0, Pt_MODAL );
+		default_button, 0, Pt_MODAL);
 #else
 	/* Writing the dialog ourselves lets us add extra features, like
 	 * trapping the escape key and returning 0 to vim */
@@ -1575,32 +1579,32 @@
 	    PtModalCtrl_t modal_ctrl;
 	    PtDialogInfo_t di;
 
-	    memset( &di, 0, sizeof( di ) );
-	    memset( &modal_ctrl, 0, sizeof( modal_ctrl ) );
+	    memset(&di, 0, sizeof(di));
+	    memset(&modal_ctrl, 0, sizeof(modal_ctrl));
 
 	    n = 0;
-	    PtSetArg( &args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0 );
-	    PtSetArg( &args[n++], Pt_ARG_WIDTH, 350, 0 );
-	    PtSetArg( &args[n++], Pt_ARG_GROUP_ORIENTATION,
-		    Pt_GROUP_VERTICAL, 0 );
-	    PtSetArg( &args[n++], Pt_ARG_GROUP_FLAGS,
-		    Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL );
-	    PtSetArg( &args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE );
-	    pane = PtCreateWidget( PtGroup, NULL, n, args );
+	    PtSetArg(&args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0);
+	    PtSetArg(&args[n++], Pt_ARG_WIDTH, 350, 0);
+	    PtSetArg(&args[n++], Pt_ARG_GROUP_ORIENTATION,
+		    Pt_GROUP_VERTICAL, 0);
+	    PtSetArg(&args[n++], Pt_ARG_GROUP_FLAGS,
+		    Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL);
+	    PtSetArg(&args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE);
+	    pane = PtCreateWidget(PtGroup, NULL, n, args);
 
 	    n = 0;
-	    PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, message, 0 );
-	    PtCreateWidget( PtLabel, pane, n, args );
+	    PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, message, 0);
+	    PtCreateWidget(PtLabel, pane, n, args);
 
-	    if( textfield != NULL )
+	    if (textfield != NULL)
 	    {
 		n = 0;
-		PtSetArg( &args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0 );
-		PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, textfield, 0 );
-		PtSetArg( &args[n++], Pt_ARG_POINTER, textfield, 0 );
-		gui_ph_dialog_text = PtCreateWidget( PtText, pane, n, args );
-		PtAddCallback( gui_ph_dialog_text, Pt_CB_ACTIVATE,
-			gui_ph_dialog_text_enter, &modal_ctrl );
+		PtSetArg(&args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0);
+		PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, textfield, 0);
+		PtSetArg(&args[n++], Pt_ARG_POINTER, textfield, 0);
+		gui_ph_dialog_text = PtCreateWidget(PtText, pane, n, args);
+		PtAddCallback(gui_ph_dialog_text, Pt_CB_ACTIVATE,
+			gui_ph_dialog_text_enter, &modal_ctrl);
 	    }
 
 	    di.parent = gui.vimWindow;
@@ -1615,28 +1619,28 @@
 	    di.callback = gui_ph_dialog_close;
 	    di.data = &modal_ctrl;
 
-	    dialog = PtCreateDialog( &di );
-	    PtAddFilterCallback( dialog, Ph_EV_KEY,
-		    gui_ph_dialog_esc, &modal_ctrl );
+	    dialog = PtCreateDialog(&di);
+	    PtAddFilterCallback(dialog, Ph_EV_KEY,
+		    gui_ph_dialog_esc, &modal_ctrl);
 
-	    if( gui_ph_dialog_text != NULL )
-		PtGiveFocus( gui_ph_dialog_text, NULL );
+	    if (gui_ph_dialog_text != NULL)
+		PtGiveFocus(gui_ph_dialog_text, NULL);
 
 	    /* Open dialog, block the vim window and wait for the dialog to close */
-	    PtRealizeWidget( dialog );
-	    PtMakeModal( dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR );
-	    dialog_result = (int) PtModalBlock( &modal_ctrl, 0 );
+	    PtRealizeWidget(dialog);
+	    PtMakeModal(dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR);
+	    dialog_result = (int) PtModalBlock(&modal_ctrl, 0);
 
-	    PtDestroyWidget( dialog );
+	    PtDestroyWidget(dialog);
 	    gui_ph_dialog_text = NULL;
 	}
 #endif
     }
 
-    vim_free( button_array );
-    vim_free( buttons_copy );
+    vim_free(button_array);
+    vim_free(buttons_copy);
 
-    return( dialog_result );
+    return dialog_result;
 }
 #endif
 /****************************************************************************/
@@ -1647,12 +1651,12 @@
 {
     PhPoint_t *pos;
 
-    pos = PtWidgetPos( gui.vimWindow, NULL );
+    pos = PtWidgetPos(gui.vimWindow, NULL);
 
     *x = pos->x;
     *y = pos->y;
 
-    return( OK );
+    return OK;
 }
 
     void
@@ -1660,7 +1664,7 @@
 {
     PhPoint_t pos = { x, y };
 
-    PtSetResource( gui.vimWindow, Pt_ARG_POS, &pos, 0 );
+    PtSetResource(gui.vimWindow, Pt_ARG_POS, &pos, 0);
 }
 
     void
@@ -1676,10 +1680,10 @@
     window_size.h += pg_margin_top + pg_margin_bottom;
 #endif
 
-    PtSetResource( gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0 );
-    PtSetResource( gui.vimWindow, Pt_ARG_DIM, &window_size, 0 );
+    PtSetResource(gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0);
+    PtSetResource(gui.vimWindow, Pt_ARG_DIM, &window_size, 0);
 
-    if( ! PtWidgetIsRealized( gui.vimWindow ) )
+    if (! PtWidgetIsRealized(gui.vimWindow))
 	gui_ph_resize_container();
 }
 
@@ -1692,8 +1696,8 @@
 {
     PhRect_t console;
 
-    PhWindowQueryVisible( Ph_QUERY_WORKSPACE, 0,
-	    PhInputGroup( NULL ), &console );
+    PhWindowQueryVisible(Ph_QUERY_WORKSPACE, 0,
+	    PhInputGroup(NULL), &console);
 
     *screen_w = console.lr.x - console.ul.x + 1;
     *screen_h = console.lr.y - console.ul.y + 1;
@@ -1704,11 +1708,11 @@
 {
     PhWindowEvent_t event;
 
-    memset( &event, 0, sizeof (event) );
+    memset(&event, 0, sizeof (event));
     event.event_f = Ph_WM_HIDE;
     event.event_state = Ph_WM_EVSTATE_HIDE;
-    event.rid = PtWidgetRid( gui.vimWindow );
-    PtForwardWindowEvent( &event );
+    event.rid = PtWidgetRid(gui.vimWindow);
+    PtForwardWindowEvent(&event);
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
@@ -1720,11 +1724,11 @@
 {
     PhWindowEvent_t event;
 
-    memset( &event, 0, sizeof (event) );
+    memset(&event, 0, sizeof (event));
     event.event_f = Ph_WM_TOFRONT;
     event.event_state = Ph_WM_EVSTATE_FFRONT;
-    event.rid = PtWidgetRid( gui.vimWindow );
-    PtForwardWindowEvent( &event );
+    event.rid = PtWidgetRid(gui.vimWindow);
+    PtForwardWindowEvent(&event);
 }
 #endif
 
@@ -1732,9 +1736,9 @@
 gui_mch_settitle(char_u *title,	char_u *icon)
 {
 #ifdef USE_PANEL_GROUP
-    gui_ph_pg_set_buffer_num( curwin->w_buffer->b_fnum );
+    gui_ph_pg_set_buffer_num(curwin->w_buffer->b_fnum);
 #endif
-    PtSetResource( gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0 );
+    PtSetResource(gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0);
     /* Not sure what to do with the icon text, set balloon text somehow? */
 }
 
@@ -1747,10 +1751,10 @@
     int	    n = 0;
     PtArg_t args[3];
 
-    PtSetArg( &args[ n++ ], Pt_ARG_MAXIMUM, max, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0 );
-    PtSetArg( &args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0 );
-    PtSetResources( sb->id, n, args );
+    PtSetArg(&args[ n++ ], Pt_ARG_MAXIMUM, max, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0);
+    PtSetResources(sb->id, n, args);
 }
 
     void
@@ -1758,7 +1762,7 @@
 {
     PhArea_t area = {{ x, y }, { w, h }};
 
-    PtSetResource( sb->id, Pt_ARG_AREA, &area, 0 );
+    PtSetResource(sb->id, Pt_ARG_AREA, &area, 0);
 }
 
     void
@@ -1774,12 +1778,12 @@
      *
      * Also, don't let the scrollbar get focus
      */
-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
-	    Pt_DELAY_REALIZE | Pt_GETS_FOCUS );
-    PtSetArg( &args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
+	    Pt_DELAY_REALIZE | Pt_GETS_FOCUS);
+    PtSetArg(&args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
 #if 0
     /* Don't need this anchoring for the scrollbars */
-    if( orient == SBAR_HORIZ )
+    if (orient == SBAR_HORIZ)
     {
 	anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM |
 	    Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT;
@@ -1787,40 +1791,40 @@
     else
     {
 	anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM | Pt_TOP_ANCHORED_TOP;
-	if( sb->wp != NULL )
+	if (sb->wp != NULL)
 	{
-	    if( sb == &sb->wp->w_scrollbars[ SBAR_LEFT ] )
+	    if (sb == &sb->wp->w_scrollbars[ SBAR_LEFT ])
 		anchor_flags |= Pt_LEFT_ANCHORED_LEFT;
 	    else
 		anchor_flags |= Pt_RIGHT_ANCHORED_RIGHT;
 	}
     }
-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED );
+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED);
 #endif
-    PtSetArg( &args[ n++ ], Pt_ARG_ORIENTATION,
-	    (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_ORIENTATION,
+	    (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0);
 #ifdef USE_PANEL_GROUP
-    sb->id = PtCreateWidget( PtScrollbar, gui.vimPanelGroup, n, args );
+    sb->id = PtCreateWidget(PtScrollbar, gui.vimPanelGroup, n, args);
 #else
-    sb->id = PtCreateWidget( PtScrollbar, gui.vimContainer, n, args );
+    sb->id = PtCreateWidget(PtScrollbar, gui.vimContainer, n, args);
 #endif
 
-    PtAddCallback( sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb );
+    PtAddCallback(sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb);
 }
 
     void
 gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
 {
-    if( flag != 0 )
-	PtRealizeWidget( sb->id );
+    if (flag != 0)
+	PtRealizeWidget(sb->id);
     else
-	PtUnrealizeWidget( sb->id );
+	PtUnrealizeWidget(sb->id);
 }
 
     void
 gui_mch_destroy_scrollbar(scrollbar_T *sb)
 {
-    PtDestroyWidget( sb->id );
+    PtDestroyWidget(sb->id);
     sb->id = NULL;
 }
 
@@ -1865,8 +1869,8 @@
 	return;
 
     if (shape == MSHAPE_HIDE || gui.pointer_hidden)
-	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
-		0 );
+	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
+		0);
     else
     {
 	if (shape >= MSHAPE_NUMBERED)
@@ -1874,7 +1878,7 @@
 	else
 	    id = mshape_ids[shape];
 
-	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id,	0 );
+	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id,	0);
     }
     if (shape != MSHAPE_HIDE)
 	last_shape = shape;
@@ -1884,19 +1888,19 @@
     void
 gui_mch_mousehide(int hide)
 {
-    if( gui.pointer_hidden != hide )
+    if (gui.pointer_hidden != hide)
     {
 	gui.pointer_hidden = hide;
 #ifdef FEAT_MOUSESHAPE
-	if( hide )
-	    PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
-		    Ph_CURSOR_NONE, 0 );
+	if (hide)
+	    PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+		    Ph_CURSOR_NONE, 0);
 	else
-	    mch_set_mouse_shape( last_shape );
+	    mch_set_mouse_shape(last_shape);
 #else
-	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
-		( hide == MOUSE_SHOW ) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
-		0 );
+	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+		(hide == MOUSE_SHOW) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
+		0);
 #endif
     }
 }
@@ -1909,8 +1913,8 @@
 
     /* FIXME: does this return the correct position,
      * with respect to the border? */
-    PhQueryCursor( PhInputGroup( NULL ), &info );
-    PtGetAbsPosition( gui.vimTextArea , &ix, &iy );
+    PhQueryCursor(PhInputGroup(NULL), &info);
+    PtGetAbsPosition(gui.vimTextArea , &ix, &iy);
 
     *x = info.pos.x - ix;
     *y = info.pos.y - iy;
@@ -1921,9 +1925,9 @@
 {
     short abs_x, abs_y;
 
-    PtGetAbsPosition( gui.vimTextArea, &abs_x, &abs_y );
+    PtGetAbsPosition(gui.vimTextArea, &abs_x, &abs_y);
     /* Add the border offset? */
-    PhMoveCursorAbs( PhInputGroup( NULL ), abs_x + x, abs_y + y );
+    PhMoveCursorAbs(PhInputGroup(NULL), abs_x + x, abs_y + y);
 }
 
 /****************************************************************************/
@@ -1951,34 +1955,34 @@
     color_diff = gui_get_lightness(gui_ph_mouse_color)
 					  - gui_get_lightness(gui.back_pixel);
 
-    if( abs( color_diff ) < 64 )
+    if (abs(color_diff) < 64)
     {
 	short r, g, b;
 	/* not a great algorithm... */
-	r = PgRedValue( gui_ph_mouse_color ) ^ 255;
-	g = PgGreenValue( gui_ph_mouse_color ) ^ 255;
-	b = PgBlueValue( gui_ph_mouse_color ) ^ 255;
+	r = PgRedValue(gui_ph_mouse_color) ^ 255;
+	g = PgGreenValue(gui_ph_mouse_color) ^ 255;
+	b = PgBlueValue(gui_ph_mouse_color) ^ 255;
 
 #ifndef FEAT_MOUSESHAPE
-	gui_ph_mouse_color = PgRGB( r, g, b );
-	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
-		gui_ph_mouse_color, 0 );
+	gui_ph_mouse_color = PgRGB(r, g, b);
+	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
+		gui_ph_mouse_color, 0);
 #endif
     }
 #endif
 
-    PtSetResource( gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0 );
+    PtSetResource(gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0);
 }
 
     static int
 hex_digit(int c)
 {
     if (VIM_ISDIGIT(c))
-	return( c - '0' );
+	return c - '0';
     c = TOLOWER_ASC(c);
     if (c >= 'a' && c <= 'f')
-	return( c - 'a' + 10 );
-    return( -1000 );
+	return c - 'a' + 10;
+    return -1000;
 }
 
 
@@ -2006,8 +2010,8 @@
     static GuiColourTable table[] =
     {
 	{"Black",	    RGB(0x00, 0x00, 0x00)},
-	{"DarkGray",	    RGB(0x80, 0x80, 0x80)},
-	{"DarkGrey",	    RGB(0x80, 0x80, 0x80)},
+	{"DarkGray",	    RGB(0xA9, 0xA9, 0xA9)},
+	{"DarkGrey",	    RGB(0xA9, 0xA9, 0xA9)},
 	{"Gray",	    RGB(0xC0, 0xC0, 0xC0)},
 	{"Grey",	    RGB(0xC0, 0xC0, 0xC0)},
 	{"LightGray",	    RGB(0xD3, 0xD3, 0xD3)},
@@ -2036,19 +2040,19 @@
 	{"LightRed",	    RGB(0xFF, 0xA0, 0xA0)},
 	{"DarkBlue",	    RGB(0x00, 0x00, 0x80)},
 	{"Blue",	    RGB(0x00, 0x00, 0xFF)},
-	{"LightBlue",	    RGB(0xA0, 0xA0, 0xFF)},
+	{"LightBlue",	    RGB(0xAD, 0xD8, 0xE6)},
 	{"DarkGreen",	    RGB(0x00, 0x80, 0x00)},
 	{"Green",	    RGB(0x00, 0xFF, 0x00)},
-	{"LightGreen",	    RGB(0xA0, 0xFF, 0xA0)},
+	{"LightGreen",	    RGB(0x90, 0xEE, 0x90)},
 	{"DarkCyan",	    RGB(0x00, 0x80, 0x80)},
 	{"Cyan",	    RGB(0x00, 0xFF, 0xFF)},
-	{"LightCyan",	    RGB(0xA0, 0xFF, 0xFF)},
+	{"LightCyan",	    RGB(0xE0, 0xFF, 0xFF)},
 	{"DarkMagenta",	    RGB(0x80, 0x00, 0x80)},
 	{"Magenta",	    RGB(0xFF, 0x00, 0xFF)},
 	{"LightMagenta",    RGB(0xFF, 0xA0, 0xFF)},
 	{"Brown",	    RGB(0x80, 0x40, 0x40)},
 	{"Yellow",	    RGB(0xFF, 0xFF, 0x00)},
-	{"LightYellow",	    RGB(0xFF, 0xFF, 0xA0)},
+	{"LightYellow",	    RGB(0xFF, 0xFF, 0xE0)},
 	{"SeaGreen",	    RGB(0x2E, 0x8B, 0x57)},
 	{"Orange",	    RGB(0xFF, 0xA5, 0x00)},
 	{"Purple",	    RGB(0xA0, 0x20, 0xF0)},
@@ -2057,20 +2061,20 @@
     };
 
     /* is name #rrggbb format? */
-    if( name[0] == '#' && STRLEN( name ) == 7 )
+    if (name[0] == '#' && STRLEN(name) == 7)
     {
-	r = hex_digit( name[1] ) * 16 + hex_digit( name[2] );
-	g = hex_digit( name[3] ) * 16 + hex_digit( name[4] );
-	b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
-	if( r < 0 || g < 0 || b < 0 )
+	r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
+	g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
+	b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
+	if (r < 0 || g < 0 || b < 0)
 	    return INVALCOLOR;
-	return( RGB( r, g, b ) );
+	return RGB(r, g, b);
     }
 
-    for( i = 0; i < ARRAY_LENGTH( table ); i++ )
+    for (i = 0; i < ARRAY_LENGTH(table); i++)
     {
-	if( STRICMP( name, table[i].name ) == 0 )
-	    return( table[i].colour );
+	if (STRICMP(name, table[i].name) == 0)
+	    return table[i].colour;
     }
 
     /*
@@ -2114,7 +2118,7 @@
 	    if (STRICMP(color, name) == 0)
 	    {
 		fclose(fd);
-		return( (guicolor_T) RGB(r,g,b) );
+		return (guicolor_T)RGB(r, g, b);
 	    }
 	}
 
@@ -2128,13 +2132,13 @@
     void
 gui_mch_set_fg_color(guicolor_T color)
 {
-    PgSetTextColor( color );
+    PgSetTextColor(color);
 }
 
     void
 gui_mch_set_bg_color(guicolor_T color)
 {
-    PgSetFillColor( color );
+    PgSetFillColor(color);
 }
 
     void
@@ -2147,21 +2151,21 @@
 {
     PhRect_t rect;
 
-    rect.ul.x = FILL_X( col );
-    rect.ul.y = FILL_Y( row );
+    rect.ul.x = FILL_X(col);
+    rect.ul.y = FILL_Y(row);
 
     /* FIXME: This has an off by one pixel problem */
     rect.lr.x = rect.ul.x + nc * gui.char_width;
     rect.lr.y = rect.ul.y + nr * gui.char_height;
-    if( nc > 0 )
+    if (nc > 0)
 	rect.lr.x -= 1;
-    if( nr > 0 )
+    if (nr > 0)
 	rect.lr.y -= 1;
 
     DRAW_START;
-    PgSetDrawMode( Pg_DrawModeDSTINVERT );
-    PgDrawRect( &rect, Pg_DRAW_FILL );
-    PgSetDrawMode( Pg_DrawModeSRCCOPY );
+    PgSetDrawMode(Pg_DrawModeDSTINVERT);
+    PgDrawRect(&rect, Pg_DRAW_FILL);
+    PgSetDrawMode(Pg_DrawModeSRCCOPY);
     DRAW_END;
 }
 
@@ -2169,13 +2173,13 @@
 gui_mch_clear_block(int row1, int col1, int row2, int col2)
 {
     PhRect_t block = {
-	{ FILL_X( col1 ), FILL_Y( row1 ) },
-	{ FILL_X( col2 + 1 ) - 1, FILL_Y( row2 + 1 ) - 1}
+	{ FILL_X(col1), FILL_Y(row1) },
+	{ FILL_X(col2 + 1) - 1, FILL_Y(row2 + 1) - 1}
     };
 
     DRAW_START;
-    gui_mch_set_bg_color( gui.back_pixel );
-    PgDrawRect( &block, Pg_DRAW_FILL );
+    gui_mch_set_bg_color(gui.back_pixel);
+    PgDrawRect(&block, Pg_DRAW_FILL);
     DRAW_END;
 }
 
@@ -2188,12 +2192,12 @@
 	    Rows * gui.char_height + gui.border_width - 1 }
     };
 
-    if( is_ignore_draw == TRUE )
+    if (is_ignore_draw == TRUE)
 	return;
 
     DRAW_START;
-    gui_mch_set_bg_color( gui.back_pixel );
-    PgDrawRect( &text_rect, Pg_DRAW_FILL );
+    gui_mch_set_bg_color(gui.back_pixel);
+    PgDrawRect(&text_rect, Pg_DRAW_FILL);
     DRAW_END;
 }
 
@@ -2203,28 +2207,28 @@
     PhRect_t    rect;
     PhPoint_t   delta;
 
-    rect.ul.x = FILL_X( gui.scroll_region_left );
-    rect.ul.y = FILL_Y( row + num_lines );
+    rect.ul.x = FILL_X(gui.scroll_region_left);
+    rect.ul.y = FILL_Y(row + num_lines);
 
-    rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
-    rect.lr.y = FILL_Y( gui.scroll_region_bot + 1) - 1;
+    rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
+    rect.lr.y = FILL_Y(gui.scroll_region_bot + 1) - 1;
 
-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
-    PhTranslateRect( &rect, &gui_ph_raw_offset );
+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+    PhTranslateRect(&rect, &gui_ph_raw_offset);
 
     delta.x = 0;
     delta.y = -num_lines * gui.char_height;
 
     PgFlush();
 
-    PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ), &rect, &delta );
+    PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)), &rect, &delta);
 
     gui_clear_block(
 	gui.scroll_region_bot - num_lines + 1,
 	gui.scroll_region_left,
 	gui.scroll_region_bot,
-	gui.scroll_region_right );
+	gui.scroll_region_right);
 }
 
     void
@@ -2233,25 +2237,25 @@
     PhRect_t    rect;
     PhPoint_t   delta;
 
-    rect.ul.x = FILL_X( gui.scroll_region_left );
-    rect.ul.y = FILL_Y( row );
+    rect.ul.x = FILL_X(gui.scroll_region_left);
+    rect.ul.y = FILL_Y(row);
 
-    rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
-    rect.lr.y = FILL_Y( gui.scroll_region_bot - num_lines + 1 ) - 1;
+    rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
+    rect.lr.y = FILL_Y(gui.scroll_region_bot - num_lines + 1) - 1;
 
-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
-    PhTranslateRect( &rect, &gui_ph_raw_offset );
+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+    PhTranslateRect(&rect, &gui_ph_raw_offset);
 
     delta.x = 0;
     delta.y = num_lines * gui.char_height;
 
     PgFlush();
 
-    PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) , &rect, &delta );
+    PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)) , &rect, &delta);
 
-    gui_clear_block( row, gui.scroll_region_left,
-	    row + num_lines - 1, gui.scroll_region_right );
+    gui_clear_block(row, gui.scroll_region_left,
+	    row + num_lines - 1, gui.scroll_region_right);
 }
 
     void
@@ -2260,37 +2264,37 @@
     static char *utf8_buffer = NULL;
     static int	utf8_len = 0;
 
-    PhPoint_t	pos = { TEXT_X( col ), TEXT_Y( row ) };
+    PhPoint_t	pos = { TEXT_X(col), TEXT_Y(row) };
     PhRect_t	rect;
 
-    if( is_ignore_draw == TRUE )
+    if (is_ignore_draw == TRUE)
 	return;
 
     DRAW_START;
 
-    if( !( flags & DRAW_TRANSP ) )
+    if (!(flags & DRAW_TRANSP))
     {
 	PgDrawIRect(
-		FILL_X( col ), FILL_Y( row ),
-		FILL_X( col + len ) - 1, FILL_Y( row + 1 ) - 1,
-		Pg_DRAW_FILL );
+		FILL_X(col), FILL_Y(row),
+		FILL_X(col + len) - 1, FILL_Y(row + 1) - 1,
+		Pg_DRAW_FILL);
     }
 
-    if( flags & DRAW_UNDERL )
-	PgSetUnderline( gui.norm_pixel, Pg_TRANSPARENT, 0 );
+    if (flags & DRAW_UNDERL)
+	PgSetUnderline(gui.norm_pixel, Pg_TRANSPARENT, 0);
 
-    if( charset_translate != NULL
+    if (charset_translate != NULL
 #ifdef FEAT_MBYTE
 	    && enc_utf8 == 0
 #endif
-	    )
+	   )
     {
 	int src_taken, dst_made;
 
 	/* Use a static buffer to avoid large amounts of de/allocations */
-	if( utf8_len < len )
+	if (utf8_len < len)
 	{
-	    utf8_buffer = realloc( utf8_buffer, len * MB_LEN_MAX );
+	    utf8_buffer = realloc(utf8_buffer, len * MB_LEN_MAX);
 	    utf8_len = len;
 	}
 
@@ -2301,36 +2305,36 @@
 		&src_taken,
 		utf8_buffer,
 		utf8_len,
-		&dst_made );
+		&dst_made);
 	s = utf8_buffer;
 	len = dst_made;
     }
 
-    PgDrawText( s, len, &pos, 0 );
+    PgDrawText(s, len, &pos, 0);
 
-    if( flags & DRAW_BOLD )
+    if (flags & DRAW_BOLD)
     {
 	/* FIXME: try and only calculate these values once... */
-	rect.ul.x = FILL_X( col ) + 1;
-	rect.ul.y = FILL_Y( row );
-	rect.lr.x = FILL_X( col + len ) - 1;
-	rect.lr.y = FILL_Y( row + 1) - 1;
-	/* PgSetUserClip( NULL ) causes the scrollbar to not redraw... */
+	rect.ul.x = FILL_X(col) + 1;
+	rect.ul.y = FILL_Y(row);
+	rect.lr.x = FILL_X(col + len) - 1;
+	rect.lr.y = FILL_Y(row + 1) - 1;
+	/* PgSetUserClip(NULL) causes the scrollbar to not redraw... */
 #if 0
 	pos.x++;
 
-	PgSetUserClip( &rect );
-	PgDrawText( s, len, &pos, 0 );
-	PgSetUserClip( NULL );
+	PgSetUserClip(&rect);
+	PgDrawText(s, len, &pos, 0);
+	PgSetUserClip(NULL);
 #else
-	rect.lr.y -= ( p_linespace + 1 ) / 2;
+	rect.lr.y -= (p_linespace + 1) / 2;
 	/* XXX: DrawTextArea doesn't work with phditto */
-	PgDrawTextArea( s, len, &rect, Pg_TEXT_BOTTOM );
+	PgDrawTextArea(s, len, &rect, Pg_TEXT_BOTTOM);
 #endif
     }
 
-    if( flags & DRAW_UNDERL )
-	PgSetUnderline( Pg_TRANSPARENT, Pg_TRANSPARENT, 0 );
+    if (flags & DRAW_UNDERL)
+	PgSetUnderline(Pg_TRANSPARENT, Pg_TRANSPARENT, 0);
 
     DRAW_END;
 }
@@ -2345,14 +2349,14 @@
 
     /* FIXME: Double width characters */
 
-    r.ul.x = FILL_X( gui.col );
-    r.ul.y = FILL_Y( gui.row );
+    r.ul.x = FILL_X(gui.col);
+    r.ul.y = FILL_Y(gui.row);
     r.lr.x = r.ul.x + gui.char_width - 1;
     r.lr.y = r.ul.y + gui.char_height - 1;
 
     DRAW_START;
-    PgSetStrokeColor( color );
-    PgDrawRect( &r, Pg_DRAW_STROKE );
+    PgSetStrokeColor(color);
+    PgDrawRect(&r, Pg_DRAW_STROKE);
     DRAW_END;
 }
 
@@ -2361,14 +2365,14 @@
 {
     PhRect_t r;
 
-    r.ul.x = FILL_X( gui.col );
-    r.ul.y = FILL_Y( gui.row ) + gui.char_height - h;
+    r.ul.x = FILL_X(gui.col);
+    r.ul.y = FILL_Y(gui.row) + gui.char_height - h;
     r.lr.x = r.ul.x + w - 1;
     r.lr.y = r.ul.y + h - 1;
 
     DRAW_START;
-    gui_mch_set_bg_color( color );
-    PgDrawRect( &r, Pg_DRAW_FILL );
+    gui_mch_set_bg_color(color);
+    PgDrawRect(&r, Pg_DRAW_FILL);
     DRAW_END;
 }
 
@@ -2384,10 +2388,10 @@
 gui_mch_start_blink(void)
 {
     /* Only turn on the timer on if none of the times are zero */
-    if( blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
+    if (blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
     {
-	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-		blink_waittime, 0 );
+	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+		blink_waittime, 0);
 	blink_state = BLINK_ON;
 	gui_update_cursor(TRUE, FALSE);
     }
@@ -2396,9 +2400,9 @@
     void
 gui_mch_stop_blink(void)
 {
-    PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0 );
+    PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0);
 
-    if( blink_state == BLINK_OFF )
+    if (blink_state == BLINK_OFF)
 	gui_update_cursor(TRUE, FALSE);
 
     blink_state = BLINK_NONE;
@@ -2416,15 +2420,15 @@
     void
 gui_mch_flash(int msec)
 {
-    PgSetFillXORColor( Pg_BLACK, Pg_WHITE );
-    PgSetDrawMode( Pg_DRAWMODE_XOR );
+    PgSetFillXORColor(Pg_BLACK, Pg_WHITE);
+    PgSetDrawMode(Pg_DRAWMODE_XOR);
     gui_mch_clear_all();
     gui_mch_flush();
 
-    ui_delay( (long) msec, TRUE );
+    ui_delay((long) msec, TRUE);
 
     gui_mch_clear_all();
-    PgSetDrawMode( Pg_DRAWMODE_OPAQUE );
+    PgSetDrawMode(Pg_DRAWMODE_OPAQUE);
     gui_mch_flush();
 }
 
@@ -2439,7 +2443,7 @@
 {
     PhArea_t area = {{x, y}, {w, h}};
 
-    PtSetResource( gui.vimTextArea, Pt_ARG_AREA, &area, 0 );
+    PtSetResource(gui.vimTextArea, Pt_ARG_AREA, &area, 0);
 }
 
     int
@@ -2450,8 +2454,8 @@
     for (i = 0; special_keys[i].key_sym != 0; i++)
 	if (name[0] == special_keys[i].vim_code0 &&
 		 name[1] == special_keys[i].vim_code1)
-	    return( OK );
-    return( FAIL );
+	    return OK;
+    return FAIL;
 }
 
 /****************************************************************************/
@@ -2495,23 +2499,23 @@
 };
 
 static PhImage_t *
-gui_ph_toolbar_load_icon( char_u *iconfile )
+gui_ph_toolbar_load_icon(char_u *iconfile)
 {
     static PhImage_t external_icon;
     PhImage_t *temp_phi = NULL;
 
-    temp_phi = PxLoadImage( iconfile, NULL );
-    if( temp_phi != NULL )
+    temp_phi = PxLoadImage(iconfile, NULL);
+    if (temp_phi != NULL)
     {
 	/* The label widget will free the image/palette/etc. for us when
 	 * it's destroyed */
 	temp_phi->flags |= Ph_RELEASE_IMAGE_ALL;
-	memcpy( &external_icon, temp_phi, sizeof( external_icon ) );
-	free( temp_phi );
+	memcpy(&external_icon, temp_phi, sizeof(external_icon));
+	free(temp_phi);
 
 	temp_phi = &external_icon;
     }
-    return( temp_phi );
+    return temp_phi;
 }
 
 /*
@@ -2522,45 +2526,45 @@
  * PhImage_t are copied, and the original PhImage_t aren't needed anymore).
  */
 static PhImage_t *
-gui_ph_toolbar_find_icon( vimmenu_T *menu )
+gui_ph_toolbar_find_icon(vimmenu_T *menu)
 {
     char_u full_pathname[ MAXPATHL + 1 ];
     PhImage_t *icon = NULL;
 
-    if( menu->icon_builtin == FALSE )
+    if (menu->icon_builtin == FALSE)
     {
-	if( menu->iconfile != NULL )
+	if (menu->iconfile != NULL)
 	    /* TODO: use gui_find_iconfile() */
-	    icon = gui_ph_toolbar_load_icon( menu->iconfile );
+	    icon = gui_ph_toolbar_load_icon(menu->iconfile);
 
 	/* TODO: Restrict loading to just .png? Search for any format? */
-	if( ( icon == NULL ) &&
-	    ( ( gui_find_bitmap( menu->name, full_pathname, "gif" ) == OK ) ||
-	      ( gui_find_bitmap( menu->name, full_pathname, "png" ) == OK ) ) )
-	    icon = gui_ph_toolbar_load_icon( full_pathname );
+	if ((icon == NULL) &&
+	    ((gui_find_bitmap(menu->name, full_pathname, "gif") == OK) ||
+	      (gui_find_bitmap(menu->name, full_pathname, "png") == OK)))
+	    icon = gui_ph_toolbar_load_icon(full_pathname);
 
-	if( icon != NULL )
-	    return( icon );
+	if (icon != NULL)
+	    return icon;
     }
 
-    if( menu->iconidx >= 0 &&
-	    ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
+    if (menu->iconidx >= 0 &&
+	    (menu->iconidx < ARRAY_LENGTH(gui_ph_toolbar_images)))
     {
-	return( gui_ph_toolbar_images[ menu->iconidx ] );
+	return gui_ph_toolbar_images[menu->iconidx];
     }
 
-    return( NULL );
+    return NULL;
 }
 #endif
 
-#if defined( FEAT_MENU ) || defined( PROTO )
+#if defined(FEAT_MENU) || defined(PROTO)
     void
 gui_mch_enable_menu(int flag)
 {
-    if( flag != 0 )
-	PtRealizeWidget( gui.vimMenuBar );
+    if (flag != 0)
+	PtRealizeWidget(gui.vimMenuBar);
     else
-	PtUnrealizeWidget( gui.vimMenuBar );
+	PtUnrealizeWidget(gui.vimMenuBar);
 }
 
     void
@@ -2571,30 +2575,30 @@
 
 /* Change the position of a menu button in the parent */
     static void
-gui_ph_position_menu( PtWidget_t *widget, int priority )
+gui_ph_position_menu(PtWidget_t *widget, int priority)
 {
     PtWidget_t	*traverse;
     vimmenu_T	*menu;
 
-    traverse = PtWidgetChildBack( PtWidgetParent( widget ) );
+    traverse = PtWidgetChildBack(PtWidgetParent(widget));
 
     /* Iterate through the list of widgets in traverse, until
      * we find the position we want to insert our widget into */
     /* TODO: traverse from front to back, possible speedup? */
-    while( traverse != NULL )
+    while (traverse != NULL)
     {
-	PtGetResource( traverse, Pt_ARG_POINTER, &menu, 0 );
+	PtGetResource(traverse, Pt_ARG_POINTER, &menu, 0);
 
-	if( menu != NULL &&
+	if (menu != NULL &&
 		priority < menu->priority &&
-		widget != traverse )
+		widget != traverse)
 	{
 	    /* Insert the widget before the current traverse widget */
-	    PtWidgetInsert( widget, traverse, 1 );
+	    PtWidgetInsert(widget, traverse, 1);
 	    return;
 	}
 
-	traverse = PtWidgetBrotherInFront( traverse );
+	traverse = PtWidgetBrotherInFront(traverse);
     }
 }
 
@@ -2610,11 +2614,11 @@
 
     menu->submenu_id = menu->id = NULL;
 
-    if( menu_is_menubar( menu->name ) )
+    if (menu_is_menubar(menu->name))
     {
 
-	accel_key = vim_strchr( menu->name, '&' );
-	if( accel_key != NULL )
+	accel_key = vim_strchr(menu->name, '&');
+	if (accel_key != NULL)
 	{
 	    mnemonic_str[0] = accel_key[1];
 	    mnemonic_str[1] = NUL;
@@ -2622,51 +2626,51 @@
 
 	/* Create the menu button */
 	n = 0;
-	PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
-	PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
-	if( accel_key != NULL )
-	    PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0 );
-	PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
+	PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+	PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
+	if (accel_key != NULL)
+	    PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0);
+	PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
 
-	if( parent != NULL )
-	    PtSetArg( &args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0 );
+	if (parent != NULL)
+	    PtSetArg(&args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0);
 
-	menu->id = PtCreateWidget( PtMenuButton,
+	menu->id = PtCreateWidget(PtMenuButton,
 		(parent == NULL) ? gui.vimMenuBar : parent->submenu_id,
-		n, args );
+		n, args);
 
-	PtAddCallback( menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu );
+	PtAddCallback(menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu);
 
 	/* Create the actual menu */
 	n = 0;
-	if( parent != NULL )
-	    PtSetArg( &args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD );
+	if (parent != NULL)
+	    PtSetArg(&args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD);
 
-	menu->submenu_id = PtCreateWidget( PtMenu, menu->id, n, args );
+	menu->submenu_id = PtCreateWidget(PtMenu, menu->id, n, args);
 
-	if( parent == NULL )
+	if (parent == NULL)
 	{
-	    PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
-		    gui_ph_handle_menu_unrealized, menu );
+	    PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
+		    gui_ph_handle_menu_unrealized, menu);
 
-	    if( menu->mnemonic != 0 )
+	    if (menu->mnemonic != 0)
 	    {
-		PtAddHotkeyHandler( gui.vimWindow, tolower( menu->mnemonic ),
-			Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu );
+		PtAddHotkeyHandler(gui.vimWindow, tolower(menu->mnemonic),
+			Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu);
 	    }
 	}
 
-	gui_ph_position_menu( menu->id, menu->priority );
+	gui_ph_position_menu(menu->id, menu->priority);
 
 	/* Redraw menubar here instead of gui_mch_draw_menubar */
-	if( gui.menu_is_active )
-	    PtRealizeWidget( menu->id );
+	if (gui.menu_is_active)
+	    PtRealizeWidget(menu->id);
     }
-    else if( menu_is_popup( menu->name ) )
+    else if (menu_is_popup(menu->name))
     {
-	menu->submenu_id = PtCreateWidget( PtMenu, gui.vimWindow, 0, NULL );
-	PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
-		gui_ph_handle_menu_unrealized, menu );
+	menu->submenu_id = PtCreateWidget(PtMenu, gui.vimWindow, 0, NULL);
+	PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
+		gui_ph_handle_menu_unrealized, menu);
     }
 }
 
@@ -2680,104 +2684,104 @@
     PtArg_t args[13];
 
     n = 0;
-    PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
+    PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
 
 #ifdef FEAT_TOOLBAR
-    if( menu_is_toolbar( parent->name ) )
+    if (menu_is_toolbar(parent->name))
     {
-	if( menu_is_separator( menu->name ) )
+	if (menu_is_separator(menu->name))
 	{
-	    PtSetArg( &args[ n++ ], Pt_ARG_SEP_FLAGS,
-		    Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION );
-	    PtSetArg( &args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0 );
-	    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
-		    Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM );
-	    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, 2, 0 );
-	    menu->id = PtCreateWidget( PtSeparator, gui.vimToolBar, n, args );
+	    PtSetArg(&args[ n++ ], Pt_ARG_SEP_FLAGS,
+		    Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION);
+	    PtSetArg(&args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0);
+	    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+		    Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM);
+	    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, 2, 0);
+	    menu->id = PtCreateWidget(PtSeparator, gui.vimToolBar, n, args);
 	}
 	else
 	{
-	    if( strstr( (const char *) p_toolbar, "text" ) != NULL )
+	    if (strstr((const char *) p_toolbar, "text") != NULL)
 	    {
-		PtSetArg( &args[ n++ ], Pt_ARG_BALLOON_POSITION,
-			Pt_BALLOON_BOTTOM, 0 );
-		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
-		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0 );
+		PtSetArg(&args[ n++ ], Pt_ARG_BALLOON_POSITION,
+			Pt_BALLOON_BOTTOM, 0);
+		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0);
 	    }
-	    if( ( strstr( (const char *) p_toolbar, "icons" ) != NULL ) &&
-		    ( gui_ph_toolbar_images != NULL ) )
+	    if ((strstr((const char *) p_toolbar, "icons") != NULL) &&
+		    (gui_ph_toolbar_images != NULL))
 	    {
-		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_IMAGE,
-			gui_ph_toolbar_find_icon( menu ), 0 );
-		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0 );
-		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0 );
+		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_IMAGE,
+			gui_ph_toolbar_find_icon(menu), 0);
+		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0);
+		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0);
 	    }
-	    if( strstr( (const char *) p_toolbar, "tooltips" ) != NULL )
+	    if (strstr((const char *) p_toolbar, "tooltips") != NULL)
 	    {
-		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_BALLOON,
-			gui_ph_show_tooltip, 0 );
-		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_FLAGS,
-			Pt_TRUE, Pt_SHOW_BALLOON );
+		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_BALLOON,
+			gui_ph_show_tooltip, 0);
+		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_FLAGS,
+			Pt_TRUE, Pt_SHOW_BALLOON);
 	    }
-	    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0 );
-	    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0 );
-	    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
-		    Pt_HIGHLIGHTED | Pt_GETS_FOCUS );
-	    PtSetArg( &args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 );
-	    menu->id = PtCreateWidget( PtButton, gui.vimToolBar, n, args );
+	    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0);
+	    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0);
+	    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
+		    Pt_HIGHLIGHTED | Pt_GETS_FOCUS);
+	    PtSetArg(&args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0);
+	    menu->id = PtCreateWidget(PtButton, gui.vimToolBar, n, args);
 
-	    PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
+	    PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
 	}
 	/* Update toolbar if it's open */
-	if( PtWidgetIsRealized( gui.vimToolBar ) )
-	    PtRealizeWidget( menu->id );
+	if (PtWidgetIsRealized(gui.vimToolBar))
+	    PtRealizeWidget(menu->id);
     }
     else
 #endif
-	if( menu_is_separator( menu->name ) )
+	if (menu_is_separator(menu->name))
     {
-	menu->id = PtCreateWidget( PtSeparator, parent->submenu_id, n, args );
+	menu->id = PtCreateWidget(PtSeparator, parent->submenu_id, n, args);
     }
     else
     {
-	accel_key = vim_strchr( menu->name, '&' );
-	if( accel_key != NULL )
+	accel_key = vim_strchr(menu->name, '&');
+	if (accel_key != NULL)
 	{
 	    mnemonic_str[0] = accel_key[1];
 	    mnemonic_str[1] = NUL;
 	}
 
-	PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
-	if( accel_key != NULL )
-	    PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
-		    0 );
+	PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
+	if (accel_key != NULL)
+	    PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
+		    0);
 
-	PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
+	PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
 
-	menu->id = PtCreateWidget( PtMenuButton, parent->submenu_id, n, args );
+	menu->id = PtCreateWidget(PtMenuButton, parent->submenu_id, n, args);
 
-	PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
+	PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
 
 #ifdef USE_PANEL_GROUP
-	if( gui_ph_is_buffer_item( menu, parent ) == TRUE )
+	if (gui_ph_is_buffer_item(menu, parent) == TRUE)
 	{
-	    PtAddCallback( menu->id, Pt_CB_DESTROYED,
-		    gui_ph_handle_buffer_remove, menu );
-	    gui_ph_pg_add_buffer( menu->dname );
+	    PtAddCallback(menu->id, Pt_CB_DESTROYED,
+		    gui_ph_handle_buffer_remove, menu);
+	    gui_ph_pg_add_buffer(menu->dname);
 	}
 #endif
     }
 
-    gui_ph_position_menu( menu->id, menu->priority );
+    gui_ph_position_menu(menu->id, menu->priority);
 }
 
     void
 gui_mch_destroy_menu(vimmenu_T *menu)
 {
-    if( menu->submenu_id != NULL )
-	PtDestroyWidget( menu->submenu_id );
-    if( menu->id != NULL )
-	PtDestroyWidget( menu->id );
+    if (menu->submenu_id != NULL)
+	PtDestroyWidget(menu->submenu_id);
+    if (menu->id != NULL)
+	PtDestroyWidget(menu->id);
 
     menu->submenu_id = NULL;
     menu->id = NULL;
@@ -2788,12 +2792,12 @@
 {
     long    flags, mask, fields;
 
-    if( menu->id == NULL )
+    if (menu->id == NULL)
 	return;
 
-    flags = PtWidgetFlags( menu->id );
-    if( PtWidgetIsClass( menu->id, PtMenuButton ) &&
-	    PtWidgetIsClass( PtWidgetParent( menu->id ), PtMenu ) )
+    flags = PtWidgetFlags(menu->id);
+    if (PtWidgetIsClass(menu->id, PtMenuButton) &&
+	    PtWidgetIsClass(PtWidgetParent(menu->id), PtMenu))
     {
 	fields = Pt_FALSE;
 	mask = Pt_SELECTABLE | Pt_HIGHLIGHTED;
@@ -2804,11 +2808,11 @@
 	mask = Pt_BLOCKED | Pt_GHOST;
     }
 
-    if( ! grey )
+    if (! grey)
 	fields = ~fields;
 
-    PtSetResource( menu->id, Pt_ARG_FLAGS, fields,
-	    mask );
+    PtSetResource(menu->id, Pt_ARG_FLAGS, fields,
+	    mask);
 }
 
     void
@@ -2829,8 +2833,8 @@
     void
 gui_mch_show_popupmenu(vimmenu_T *menu)
 {
-    PtSetResource( menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0 );
-    PtRealizeWidget( menu->submenu_id );
+    PtSetResource(menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0);
+    PtRealizeWidget(menu->submenu_id);
 }
 
     void
@@ -2841,14 +2845,14 @@
 
 #endif
 
-#if defined( FEAT_TOOLBAR ) || defined( PROTO )
+#if defined(FEAT_TOOLBAR) || defined(PROTO)
     void
 gui_mch_show_toolbar(int showit)
 {
-    if( showit )
-	PtRealizeWidget( gui.vimToolBar );
+    if (showit)
+	PtRealizeWidget(gui.vimToolBar);
     else
-	PtUnrealizeWidget( gui.vimToolBar );
+	PtUnrealizeWidget(gui.vimToolBar);
 }
 #endif
 
@@ -2869,36 +2873,36 @@
     FontQueryInfo   info;
     int_u	    style;
 
-    font_tag = alloc( MAX_FONT_TAG );
-    if( font_tag != NULL )
+    font_tag = alloc(MAX_FONT_TAG);
+    if (font_tag != NULL)
     {
-	if( PfGenerateFontName( font_name, font_flags, font_size,
-		    font_tag ) != NULL )
+	if (PfGenerateFontName(font_name, font_flags, font_size,
+		    font_tag) != NULL)
 	{
 	    /* Enforce some limits on the font used */
 	    style = PHFONT_INFO_FIXED;
 
-	    if( enforce & PF_STYLE_BOLD )
+	    if (enforce & PF_STYLE_BOLD)
 		style |= PHFONT_INFO_BOLD;
-	    if( enforce & PF_STYLE_ANTIALIAS )
+	    if (enforce & PF_STYLE_ANTIALIAS)
 		style |= PHFONT_INFO_ALIAS;
-	    if( enforce & PF_STYLE_ITALIC )
+	    if (enforce & PF_STYLE_ITALIC)
 		style |= PHFONT_INFO_ITALIC;
 
-	    PfQueryFontInfo( font_tag, &info );
+	    PfQueryFontInfo(font_tag, &info);
 
-	    if( info.size == 0 )
+	    if (info.size == 0)
 		font_size = 0;
 
 	    /* Make sure font size matches, and that the font style
 	     * at least has the bits we're checking for */
-	    if( font_size == info.size &&
-		    style == (info.style & style) )
-		return( (GuiFont) font_tag );
+	    if (font_size == info.size &&
+		    style == (info.style & style))
+		return (GuiFont)font_tag;
 	}
-	vim_free( font_tag );
+	vim_free(font_tag);
     }
-    return( NULL );
+    return NULL;
 }
 
 /*
@@ -2918,34 +2922,34 @@
 	char_u *vim_font,
 	char_u **font_name,
 	int_u *font_flags,
-	int_u *font_size )
+	int_u *font_size)
 {
     char_u  *mark;
     int_u   name_len, size;
 
-    mark = vim_strchr( vim_font, ':' );
-    if( mark == NULL )
-	name_len = STRLEN( vim_font );
+    mark = vim_strchr(vim_font, ':');
+    if (mark == NULL)
+	name_len = STRLEN(vim_font);
     else
-	name_len = (int_u) ( mark - vim_font );
+	name_len = (int_u) (mark - vim_font);
 
-    *font_name = vim_strnsave( vim_font, name_len );
-    if( *font_name != NULL )
+    *font_name = vim_strnsave(vim_font, name_len);
+    if (*font_name != NULL)
     {
-	if( mark != NULL )
+	if (mark != NULL)
 	{
-	    while( *mark != NUL && *mark++ == ':')
+	    while (*mark != NUL && *mark++ == ':')
 	    {
-		switch( tolower( *mark++ ) )
+		switch (tolower(*mark++))
 		{
 		    case 'a': *font_flags |= PF_STYLE_ANTIALIAS; break;
 		    case 'b': *font_flags |= PF_STYLE_BOLD; break;
 		    case 'i': *font_flags |= PF_STYLE_ITALIC; break;
 
 		    case 's':
-			size = getdigits( &mark );
+			size = getdigits(&mark);
 			/* Restrict the size to some vague limits */
-			if( size < 1 || size > 100 )
+			if (size < 1 || size > 100)
 			    size = 8;
 
 			*font_size = size;
@@ -2956,9 +2960,9 @@
 		}
 	    }
 	}
-	return( TRUE );
+	return TRUE;
     }
-    return( FALSE );
+    return FALSE;
 }
 
     int
@@ -2972,60 +2976,60 @@
     FontQueryInfo info;
     PhRect_t extent;
 
-    if( vim_font_name == NULL )
+    if (vim_font_name == NULL)
     {
 	/* Default font */
 	vim_font_name = "PC Terminal";
     }
 
-    if( STRCMP( vim_font_name, "*" ) == 0 )
+    if (STRCMP(vim_font_name, "*") == 0)
     {
-	font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
-		"pcterm12", -1, PHFONT_FIXED, NULL );
+	font_tag = PtFontSelection(gui.vimWindow, NULL, NULL,
+		"pcterm12", -1, PHFONT_FIXED, NULL);
 
-	if( font_tag == NULL )
-	    return( FAIL );
+	if (font_tag == NULL)
+	    return FAIL;
 
-	gui_mch_free_font( gui.norm_font );
+	gui_mch_free_font(gui.norm_font);
 	gui.norm_font = font_tag;
 
-	PfQueryFontInfo( font_tag, &info );
-	font_name = vim_strsave( info.font );
+	PfQueryFontInfo(font_tag, &info);
+	font_name = vim_strsave(info.font);
     }
     else
     {
-	if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
-		    &font_size ) == FALSE )
-	    return( FAIL );
+	if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
+		    &font_size) == FALSE)
+	    return FAIL;
 
-	font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
-	if( font_tag == NULL )
+	font_tag = gui_ph_get_font(font_name, font_flags, font_size, 0);
+	if (font_tag == NULL)
 	{
-	    vim_free( font_name );
-	    return( FAIL );
+	    vim_free(font_name);
+	    return FAIL;
 	}
 
-	gui_mch_free_font( gui.norm_font );
+	gui_mch_free_font(gui.norm_font);
 	gui.norm_font = font_tag;
     }
 
-    gui_mch_free_font( gui.bold_font );
-    gui.bold_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_BOLD,
-	    font_size, PF_STYLE_BOLD );
-
-    gui_mch_free_font( gui.ital_font );
-    gui.ital_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_ITALIC,
-	    font_size, PF_STYLE_ITALIC );
+    gui_mch_free_font(gui.bold_font);
+    gui.bold_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_BOLD,
+	    font_size, PF_STYLE_BOLD);
+
+    gui_mch_free_font(gui.ital_font);
+    gui.ital_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_ITALIC,
+	    font_size, PF_STYLE_ITALIC);
 
     /* This extent was brought to you by the letter 'g' */
-    PfExtentText( &extent, NULL, font_tag, "g", 1 );
+    PfExtentText(&extent, NULL, font_tag, "g", 1);
 
     gui.char_width = extent.lr.x - extent.ul.x + 1;
     gui.char_height = (- extent.ul.y) + extent.lr.y + 1;
     gui.char_ascent = - extent.ul.y;
 
-    vim_free( font_name );
-    return( OK );
+    vim_free(font_name);
+    return OK;
 }
 
 /*
@@ -3036,12 +3040,12 @@
 {
     FontQueryInfo info;
 
-    PfQueryFontInfo( gui.norm_font, &info );
+    PfQueryFontInfo(gui.norm_font, &info);
 
     gui.char_height = - info.ascender + info.descender + p_linespace;
     gui.char_ascent = - info.ascender + p_linespace / 2;
 
-    return( OK );
+    return OK;
 }
 
     GuiFont
@@ -3052,20 +3056,20 @@
     int_u   font_size = 12;
     int_u   font_flags = 0;
 
-    if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
-		&font_size ) != FALSE )
+    if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
+		&font_size) != FALSE)
     {
-	font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
-	vim_free( font_name );
+	font_tag = gui_ph_get_font(font_name, font_flags, font_size, -1);
+	vim_free(font_name);
 
-	if( font_tag != NULL )
-	    return( (GuiFont) font_tag );
+	if (font_tag != NULL)
+	    return (GuiFont)font_tag;
     }
 
-    if( report_error )
-	EMSG2(e_font, vim_font_name );
+    if (report_error)
+	EMSG2(e_font, vim_font_name);
 
-    return( FAIL );
+    return FAIL;
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
@@ -3087,12 +3091,12 @@
     void
 gui_mch_set_font(GuiFont font)
 {
-    PgSetFont( font );
+    PgSetFont(font);
 }
 
     void
 gui_mch_free_font(GuiFont font)
 {
-    vim_free( font );
+    vim_free(font);
 }
 
diff -Naur vim73.orig/src/gui_riscos.c vim73/src/gui_riscos.c
--- vim73.orig/src/gui_riscos.c	2010-05-15 11:04:09.000000000 +0000
+++ vim73/src/gui_riscos.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,3558 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved	by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- * See README.txt for an overview of the Vim source code.
- */
-
-#include "vim.h"
-#include <string.h>
-
-/*
- * gui_riscos.c
- *
- * Thomas Leonard <tal197@ecs.soton.ac.uk>
- * Updated by Andy Wingate <andy@sparse.net>
- */
-
-extern int time_of_last_poll;
-
-int task_handle = 0;		/* Zero means we are not yet a Wimp task */
-int child_handle = 0;		/* Task handle of our child process (zero if none). */
-int *wimp_menu = (int *) -1;	/* Pointer to a Wimp menu structure (or -1) */
-int save_window = -1;		/* Save As window handle */
-
-int *redraw_block = NULL;	/* NULL means not in a redraw loop. */
-int ro_return_early = FALSE;	/* Break out of gui_mch_wait_for_chars() */
-
-int leaf_ref = 0;		/* Wimp message number - send via Wimp$Scrap */
-char_u *leaf_name = NULL;	/* Leaf name from DataSave */
-
-int default_columns = 120;	/* These values are used if the --rows and --columns */
-int default_rows = 32;		/* options aren't used on startup. */
-
-#define DRAG_FALSE	    0
-#define DRAG_SELECTION	    1
-#define DRAG_RESIZE_WINDOW  2
-int ro_dragging = DRAG_FALSE;
-int drag_button;
-int drag_modifiers;
-int drag_x_offset;
-int drag_y_offset;
-
-int nested_wimp = FALSE;	/* Bool - can we use the new wimp? */
-
-int changed_mode = FALSE;
-int x_eigen_factor;
-int y_eigen_factor;
-
-/* If ro_current_font is non-zero then use the outline font with that handle,
- * otherwise, if zap_redraw is TRUE then use ZapRedraw, otherwise use the
- * system font.
- *
- * If zap_redraw is TRUE then zap_file[] contains valid Zap font file
- * pointers (or NULLs).
- */
-int ro_current_font = 0;	/* 0 is system font, or ZapRedraw */
-int font_x_offset   = 0;	/* Where to position each char in its box */
-int font_y_offset   = 0;
-
-int zap_redraw	    = FALSE;
-int double_height   = FALSE;	/* Plot each line twice? */
-
-#define grgb(r,g,b) ((b<<16) + (g<<8) + (r))
-#define UNUSED_COLOUR (gui.back_pixel)
-
-#define RO_LOAD_CLIPBOARD -2	/* Internal handle for DataSave message. */
-
-/* Changes by John Kortink, 22-23 July 1998
- *
- * Stuff to make redraw a lot faster. Almost all of it is right here below,
- * elsewhere changes are marked with 'JK230798'. Apart from a small change in
- * 'gui.c' all changes are limited to this file, 'gui_riscos.c'. The change in
- * 'gui.c' is to make Vim stop being 'smart' not redrawing characters that are
- * 'already there' (i.e. from the previous line, by coincidence). This caused a
- * lot more calls to the redraw code, which we want to avoid because a few nice
- * big strings at a time is a lot faster than a truckload of small ones. ('Dear
- * Bram ...').
- */
-
-/* The ZapRedraw structure */
-
-static struct
-{
-    int		r_flags;
-    int		r_minx;
-    int		r_miny;
-    int		r_maxx;
-    int		r_maxy;
-    int		r_screen;
-    int		r_bpl;
-    int		r_bpp;
-    int		r_charw;
-    int		r_charh;
-    char	*r_caddr;
-    int		r_cbpl;
-    int		r_cbpc;
-    int		r_linesp;
-    int		r_data;
-    int		r_scrollx;
-    int		r_scrolly;
-    int		*r_palette;
-    int		r_for;
-    int		r_bac;
-    char	*r_workarea;
-    int		r_magx;
-    int		r_magy;
-    int		r_xsize;
-    int		r_ysize;
-    int		r_mode;
-}
-zap_redraw_block;
-
-/* Other globals */
-
-static int	zap_redraw_initialised = FALSE;
-static int	zap_redraw_update_colours;
-static int	zap_redraw_colours[2];
-static int	zap_redraw_palette[16];
-
-/* Holds the current Zap font file(s).
- * The font is recreated from this block on a mode change.
- * When using zap, element ZAP_NORMAL is always valid, but
- * the others can be NULL.
- */
-
-#define ZAP_NORMAL  0
-#define ZAP_BOLD    1
-#define ZAP_ITALIC  2
-#define ZAP_BITALIC 3
-#define ZAP_STYLES  4
-
-/* Zap font file format data */
-static char	*zap_file[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
-
-/* r_caddr format for current mode */
-static char	*zap_caddr[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
-
-static void ro_remove_menu(int *menu);
-
-/*
- * Initialise all the ZapRedraw stuff.
- * Call this when changing font and after each mode change.
- * zap_redraw_bitmap must contain a valid Zap font file (possibly
- * created from the system font).
- *
- * Return FAIL to revert to system font (if we can't use ZapRedraw).
- */
-    int
-ro_zap_redraw_initialise()
-{
-    int	    bytes_per_bitmap_char;
-    int	    first, last;
-    int	    i;
-
-    /* Can't have initialisers for struct members :-(, ok, this way then ... */
-    if (!zap_redraw_initialised)
-    {
-	zap_redraw_block.r_workarea = NULL;
-	zap_redraw_initialised = TRUE;
-    }
-
-    /* We redraw in DSA mode */
-    zap_redraw_block.r_flags = 0x0;
-
-    /* Let ZapRedraw get the screen address for us */
-    zap_redraw_block.r_screen = 0;
-
-    /* Read the font width and height from the font file header.
-     * Assume that all styles are the same size.
-     * ZAP_NORMAL is always present.
-     */
-    zap_redraw_block.r_charw = ((int *) zap_file[ZAP_NORMAL])[2];
-    zap_redraw_block.r_charh = ((int *) zap_file[ZAP_NORMAL])[3];
-
-    /* We have no linespacing */
-    zap_redraw_block.r_linesp = 0;
-
-    /* Fix foreground = colour 1 */
-    zap_redraw_block.r_for = 1;
-
-    /* Fix background = colour 0 */
-    zap_redraw_block.r_bac = 0;
-
-    /* Colour mask buffer */
-    zap_redraw_block.r_palette = zap_redraw_palette;
-
-    /* Allocate local workspace (for the few calls following here) */
-    if (zap_redraw_block.r_workarea != NULL)
-	free(zap_redraw_block.r_workarea);
-    zap_redraw_block.r_workarea = (char*) malloc(128);
-    if (!zap_redraw_block.r_workarea)
-	return FAIL;	/* Out of memory */
-
-    /* Fill in VDU variables */
-    if (xswi(ZapRedraw_ReadVduVars, 0, &zap_redraw_block) & v_flag)
-	return FAIL;	    /* Can't find ZapRedraw module - use VDU instead */
-
-    /* Determine cbpl and cbpc */
-    swi(ZapRedraw_CachedCharSize, zap_redraw_block.r_bpp, 0,
-	zap_redraw_block.r_charw, zap_redraw_block.r_charh);
-    zap_redraw_block.r_cbpl = r2;
-    zap_redraw_block.r_cbpc = r3;
-
-    /* Allocate general workspace (for the calls outside) */
-    if (zap_redraw_block.r_workarea != NULL)
-	free(zap_redraw_block.r_workarea);
-    zap_redraw_block.r_workarea = (char*) malloc(128 + zap_redraw_block.r_cbpl);
-    if (!zap_redraw_block.r_workarea)
-	return FAIL;	/* Out of memory */
-
-    /* Now convert the 1 bpp character data ready for the current mode */
-
-    bytes_per_bitmap_char = (zap_redraw_block.r_charw * zap_redraw_block.r_charh + 7) / 8;
-
-    /* Convert the fonts from 1bpp to a format suitable for the
-     * current mode.
-     */
-    for (i = 0; i < ZAP_STYLES; i++)
-    {
-	first = ((int *) zap_file[i])[4];
-	last  = ((int *) zap_file[i])[5];
-
-	if (last > 255)
-	    last = 255;	/* Don't convert cursors (overwrites memory!) */
-
-	/* Allocate the font cache */
-	vim_free(zap_caddr[i]);
-	if (zap_file[i])
-	    zap_caddr[i] = (char*) malloc(zap_redraw_block.r_cbpc * 256);
-	else
-	    zap_caddr[i] = NULL;    /* No file for this style */
-
-	if (zap_caddr[i])
-	{
-	    zap_redraw_block.r_caddr = zap_caddr[i];
-
-	    swi(ZapRedraw_ConvertBitmap, 0, &zap_redraw_block,
-		    first, last,		/* Range of characters to convert */
-		    zap_file[i] + 0x20	/* Addr of first char provided by font */
-		    - first * bytes_per_bitmap_char);
-	}
-    }
-
-    if (!zap_caddr[ZAP_NORMAL])
-    {
-	zap_redraw = FALSE;	/* Out of memory */
-	return FAIL;
-    }
-
-    /* Next time we need them, we have to update the colour masks */
-    zap_redraw_update_colours = TRUE;
-
-    return OK;
-}
-
-/*
- * Redraw a string at OS coordinates <x,y> (top-left, x inclusive, y exclusive).
- * Graphics clip window is window[0..3] as in R1+28..40 of Wimp_RedrawWindow.
- * Returns (possibly modified) flags.
- */
-    int
-ro_zap_redraw_draw_string(x, y, string, length, flags, clip)
-    int	    x;
-    int	    y;
-    char    *string;
-    int	    length;
-    int	    flags;	/* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL, DRAW_ITALIC */
-    int	    *clip;
-{
-    char redraw_data[1024];
-    int clip_minx;
-    int clip_miny;
-    int clip_maxx;
-    int clip_maxy;
-    int os_xshift = zap_redraw_block.r_magx;
-    int os_yshift = zap_redraw_block.r_magy;
-
-    if (flags & DRAW_TRANSP)
-	return flags;	/* We don't do transparent plotting yet. */
-
-    if (flags & DRAW_BOLD)
-    {
-	if (flags & DRAW_ITALIC && zap_caddr[ZAP_BITALIC])
-	    zap_redraw_block.r_caddr = zap_caddr[ZAP_BITALIC];
-	else
-	    zap_redraw_block.r_caddr = zap_caddr[ZAP_BOLD];
-    }
-    else
-    {
-	if (flags & DRAW_ITALIC)
-	    zap_redraw_block.r_caddr = zap_caddr[ZAP_ITALIC];
-	else
-	    zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
-    }
-    if (!zap_redraw_block.r_caddr)
-    {
-	zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
-	flags |= DRAW_UNDERL;	    /* Style missing - we can always underline */
-    }
-
-    /* Set the vertical scaling flag */
-    if (double_height)
-	zap_redraw_block.r_flags = 1 << 1;
-    else
-	zap_redraw_block.r_flags = 0;
-
-    /* Update the colour masks (if needed) */
-    if (zap_redraw_update_colours)
-    {
-	swi(ZapRedraw_CreatePalette, 2,
-		&zap_redraw_block,
-		zap_redraw_colours,
-		zap_redraw_block.r_palette, 2);
-	zap_redraw_update_colours = FALSE;
-    }
-
-    /* Target rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
-    zap_redraw_block.r_minx = x >> os_xshift;					/* inclusive */
-    zap_redraw_block.r_miny = zap_redraw_block.r_ysize - (y >> os_yshift);	/* inclusive */
-    zap_redraw_block.r_maxx = (x + length * gui.char_width) >> os_xshift;	/* exclusive */
-    zap_redraw_block.r_maxy = zap_redraw_block.r_ysize - ((y - gui.char_height) >> os_yshift);
-										/* exclusive */
-
-    /* Clip rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
-    clip_minx = clip[0] >> os_xshift;					/* inclusive */
-    clip_miny = zap_redraw_block.r_ysize - (clip[3] >> os_yshift);	/* inclusive */
-    clip_maxx = clip[2] >> os_xshift;					/* exclusive */
-    clip_maxy = zap_redraw_block.r_ysize - (clip[1] >> os_yshift);	/* exclusive */
-
-    /* Clip target rectangle against the current graphics window */
-    if (zap_redraw_block.r_minx < clip_minx)
-    {
-	zap_redraw_block.r_scrollx = clip_minx - zap_redraw_block.r_minx;
-	zap_redraw_block.r_minx = clip_minx;
-    }
-    else
-	zap_redraw_block.r_scrollx = 0;
-    if (zap_redraw_block.r_miny < clip_miny)
-    {
-	zap_redraw_block.r_scrolly = clip_miny - zap_redraw_block.r_miny;
-	zap_redraw_block.r_miny = clip_miny;
-    }
-    else
-	zap_redraw_block.r_scrolly = 0;
-    if (zap_redraw_block.r_maxx > clip_maxx)
-	zap_redraw_block.r_maxx = clip_maxx;
-    if (zap_redraw_block.r_maxy > clip_maxy)
-	zap_redraw_block.r_maxy = clip_maxy;
-
-    /* Fill in the character data structure */
-    if (length > (sizeof(redraw_data) - 2 * 4 - 2))
-	length = sizeof(redraw_data) - 2 * 4 - 2;
-    ((int*) redraw_data)[0] = 2 * 4;
-    ((int*) redraw_data)[1] = 0;
-    strncpy(redraw_data + 2 * 4, string, length);
-    redraw_data[2 * 4 + length + 0] = '\0';
-    redraw_data[2 * 4 + length + 1] = '\x2';
-    zap_redraw_block.r_data = (int) redraw_data;
-
-    /* Perform the draw */
-    swi(ZapRedraw_RedrawArea, 0, &zap_redraw_block);
-
-    return flags;
-}
-
-/*
- * Okay that was it from me, back to Thomas ...
- */
-
-/*
- * Parse the GUI related command-line arguments.  Any arguments used are
- * deleted from argv, and *argc is decremented accordingly.  This is called
- * when vim is started, whether or not the GUI has been started.
- */
-    void
-gui_mch_prepare(int *argc, char **argv)
-{
-    int	    arg = 1;
-
-    while (arg < *argc - 1)
-    {
-	if (strcmp(argv[arg], "--rows") == 0 || strcmp(argv[arg], "--columns") == 0)
-	{
-	    int	    value;
-
-	    value = atoi(argv[arg + 1]);
-
-	    if (argv[arg][2] == 'r')
-		default_rows = value;
-	    else
-		default_columns = value;
-
-	    /* Delete argument from argv[]. (hope this is read/write!) */
-
-	    *argc -= 2;
-	    if (*argc > arg)
-	    mch_memmove(&argv[arg], &argv[arg + 2], (*argc - arg)
-		    * sizeof(char *));
-	}
-	else
-	    arg++;
-    }
-}
-
-/* Fatal error on initialisation - report it and die. */
-    void
-ro_die(error)
-    char_u *error;	/* RISC OS error block */
-{
-    swi(Wimp_ReportError, error, 5, "GVim");
-    exit(EXIT_FAILURE);
-}
-
-/* Find the sizes of the window tools:
- *
- * Create a test window.
- * Find inner and outer sizes.
- * Find the difference.
- * Delete window.
- *
- * While we're here, find the eigen values too.
- */
-    void
-ro_measure_tools()
-{
-    int block[10];
-    int vdu[] = { 4, 5, -1};
-    int test_window[] =
-	{
-	    -100, -100,		/* Visible area : min X,Y */
-	    -50, -50,		/*		  max X,Y */
-	    0,   0,		/* Scroll offsets */
-	    -1,			/* Window in front */
-	    0xd0800150,		/* Window flags */
-	    0xff070207,		/* Colours */
-	    0x000c0103,		/* More colours */
-	    0, -0x4000,		/* Workarea extent */
-	    0x4000, 0,		/* max X,Y */
-	    0x00000000,		/* No title */
-	    0 << 12,		/* No workarea button type */
-	    1,			/* Wimp sprite area */
-	    0x00010001,		/* Minimum width, height */
-	    0, 0, 0,		/* Title data (none) */
-	    0			/* No icons */
-	};
-    int inner_max_x, inner_min_y;
-
-    swi(Wimp_CreateWindow, 0, test_window);
-
-    block[0] = r0;
-    /* Open the window (and read state).
-     * GetWindowOutline needs it too if the wimp isn't nested.
-     */
-    swi(Wimp_OpenWindow, 0, block);
-    inner_max_x = block[3];
-    inner_min_y = block[2];
-
-    swi(Wimp_GetWindowOutline, 0, block);
-
-    gui.scrollbar_width = block[3] - inner_max_x;
-    gui.scrollbar_height = inner_min_y - block[2];
-
-    swi(Wimp_DeleteWindow, 0, block);
-
-    /* Read the size of one pixel. */
-    swi(OS_ReadVduVariables, vdu, vdu);
-    x_eigen_factor = vdu[0];
-    y_eigen_factor = vdu[1];
-}
-
-/* Load a template from the current templates file.
- * Create the window and return its handle.
- */
-    int
-ro_load_template(str_name, title, title_size)
-    char_u  *str_name;      /* Identifier of window in file (max 12 chars)   */
-    char_u  **title;	    /* If not NULL then return pointer to title here */
-    int     *title_size;    /* If not NULL then return the title length here */
-{
-    int     *window;
-    char    *data;
-    int     name[4];
-
-    strcpy( (char *) name, str_name);
-
-    /* Find how big we must make the buffers */
-
-    if (xswi(Wimp_LoadTemplate, 0, 0, 0, 0, -1, name, 0) & v_flag)
-	ro_die( (char *) r0);
-
-    window = malloc(r1);	/* Don't print text messages from alloc() */
-    data = malloc(r2);
-    if (window == NULL || data == NULL)
-	ro_die("\0\0\0\0Out of memory - Can't load templates");
-
-    /* Load the template into the buffers */
-
-    swi(Wimp_LoadTemplate, 0,
-				window,		/* Temp block */
-				data,		/* Icon data */
-				data + r2 + 1,	/* End of icon data */
-				-1,		/* No fonts */
-				name, 0);	/* First match */
-    if (r6 == 0)
-	ro_die("\0\0\0\0Can't find window in Templates file");
-
-    /* Create the window */
-
-    if (xswi(Wimp_CreateWindow, 0, window) & v_flag)
-	ro_die( (char *) r0);
-
-    if (title)
-	*title = (char_u *) window[18];
-    if (title_size)
-	*title_size = window[20];
-
-    free(window);	/* Free temp block */
-    return r0;		/* Return the window handle */
-}
-
-/*
- * Check if the GUI can be started.  Called before gvimrc is sourced.
- * Return OK or FAIL.
- */
-    int
-gui_mch_init_check()
-{
-    return OK;		/* TODO: GUI can always be started? */
-}
-
-/*
- * Initialise the RISC OS GUI.
- * Create all the windows.
- * Returns OK for success, FAIL when the GUI can't be started.
- */
-    int
-gui_mch_init()
-{
-    int     messages[] = {
-	    1, 2, 3, 4,	/* DataSave, DataSaveAck, DataLoad, DataLoadAck */
-	    8,		/* PreQuit */
-	    0xf,	/* ClaimEntity (for clipboard) */
-	    0x10,	/* DataRequest (for clipboard) */
-	    0x400c1,	/* Mode change */
-	    0x400c3,	/* TaskCloseDown */
-	    0x400c9,	/* MenusDeleted */
-	    0x808c1,	/* TW_Output */
-	    0x808c2,    /* TW_Ego */
-	    0x808c3,	/* TW_Morio */
-	    0x808c4,	/* TW_Morite */
-	    0};		/* End-of-list. */
-
-
-    /* There may have been some errors reported in the
-     * command window before we get here. Wait if so.
-     */
-    swi(Wimp_ReadSysInfo, 3);
-    if (r0 == 0)
-	swi(Wimp_CommandWindow, 0);	/* Window opened - close with prompt */
-
-    if (xswi(Wimp_Initialise, 310, 0x4b534154, "GVim", messages) & v_flag)
-	return FAIL;
-    nested_wimp = r0 >= 397;
-    task_handle = r1;
-
-    /* Load the templates. */
-
-    if (xswi(Wimp_OpenTemplate, 0, "Vim:Templates") & v_flag)
-	ro_die( (char *) r0);
-
-    gui.window_handle = ro_load_template("editor",
-	    &gui.window_title,
-	    &gui.window_title_size);
-
-    save_window = ro_load_template("save", NULL, NULL);
-
-    swi(Wimp_CloseTemplate);
-
-    /* Set default foreground and background colours. */
-
-    gui.norm_pixel = gui.def_norm_pixel;
-    gui.back_pixel = gui.def_back_pixel;
-
-    /* Get the colours from the "Normal" and "Menu" group (set in syntax.c or
-     * in a vimrc file) */
-
-    set_normal_colors();
-
-    /*
-     * Check that none of the colors are the same as the background color
-     */
-
-    gui_check_colors();
-
-    /* Get the colours for the highlight groups (gui_check_colors() might have
-     * changed them) */
-
-    highlight_gui_started();		/* re-init colours and fonts */
-
-    /* Set geometry based on values read on initialisation. */
-
-    gui.num_cols = Columns = default_columns;
-    gui.num_rows = Rows    = default_rows;
-
-    /* Get some information about our environment. */
-
-    ro_measure_tools();
-
-    return OK;
-}
-
-/*
- * Called when the foreground or background colour has been changed.
- */
-    void
-gui_mch_new_colors()
-{
-}
-
-/*
- * Open the GUI window which was created by a call to gui_mch_init().
- */
-    int
-gui_mch_open(void)
-{
-    int block[10];
-
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-    block[7] = -1;		    /* Open at the top of the stack */
-    swi(Wimp_OpenWindow, 0, block);
-
-    /* Give the new window the input focus */
-    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
-
-    if (gui_win_x != -1 && gui_win_y != -1)
-	gui_mch_set_winpos(gui_win_x, gui_win_y);
-
-    return OK;
-}
-
-    void
-gui_mch_exit(int rc)
-{
-    int	    block[64];
-
-    /* Close window. Stops us from getting troublesome events
-     * if we take a while to die.
-     */
-    block[0] = gui.window_handle;
-    swi(Wimp_CloseWindow, 0, block);
-
-    if (child_handle)
-    {
-	/* We still have a sub-task running - kill it */
-	block[0] = 20;
-	block[3] = 0;
-	block[4] = 0;	    /* Quit */
-	if ((xswi(Wimp_SendMessage, 17, block, child_handle) & v_flag) == 0)
-	{
-	    /* Idle until child dies. */
-	    while (child_handle)
-	    {
-		process_event(wimp_poll(1, block), block);
-	    }
-	}
-    }
-
-    exit(rc);
-}
-
-/*
- * Get the position of the top left corner of the window.
- */
-    int
-gui_mch_get_winpos(int *x, int *y)
-{
-    /* TODO */
-    return FAIL;
-}
-
-/*
- * Set the position of the top left corner of the window to the given
- * coordinates.
- */
-    void
-gui_mch_set_winpos(int x, int y)
-{
-    /* TODO */
-}
-
-    void
-gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
-    int width;		/* In OS units */
-    int height;
-    int min_width;	/* Smallest permissible window size (ignored) */
-    int min_height;
-    int base_width;	/* Space for scroll bars, etc */
-    int base_height;
-    int direction;
-{
-    int s_width, s_height;
-    int block[] = {
-	gui.window_handle,
-	0,
-	-height + 1,
-	width,
-	1};
-
-    gui_mch_get_screen_dimensions(&s_width, &s_height);
-    s_width -= base_width;
-    s_height -= base_height;		    /* Underestimate - ignores titlebar */
-
-    swi(Wimp_GetWindowState, 0, block);
-    block[3]  = block[1] + width;
-    block[2]  = block[4] - height;
-    if (block[3] > s_width)
-    {
-	block[3] = s_width;
-	block[1] = block[3] - width;
-    }
-    if (block[2] < gui.scrollbar_height)
-    {
-	block[2] = gui.scrollbar_height;
-	block[4] = block[2] + height;
-    }
-    swi(Wimp_OpenWindow, 0, block);
-    swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
-}
-
-    void
-gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
-{
-    int block[] = {4, 5, 11, 12, -1};
-
-    swi(OS_ReadVduVariables, block, block);
-    *screen_w = (block[2] + 1) << block[0];
-    *screen_h = (block[3] + 1) << block[1];
-}
-
-/* Take a font name with options and return a font handle, or
- * zero for failure.
- * Replace extension with 'Bold' or 'Italic' depending on modifiers.
- */
-    int
-ro_get_font(fullname, weight)
-    char_u	*fullname;
-    int		weight;		/* Initial weights:
-				 * BIT	    MEANING
-				 * 0	    bold
-				 * 1	    italic
-				 */
-{
-    char_u	*arg;
-    char_u	font[41];
-    int		width = -1;
-    int		height = -1;
-    int		name_len;
-    int		i;
-    char_u	c;
-
-    for (i = 0; i < 39;)
-    {
-	c = fullname[i];
-	if (c == ':' || c == NUL || c == '.')
-	    break;
-	font[i++] = c;
-    }
-
-    /* find the first modifier, NULL if none */
-    arg = strchr(fullname + i, ':');
-
-    while (arg)
-    {
-	switch (*++arg)
-	{
-	    case 'h':
-		height = strtol(arg + 1, (char **) &arg, 10);
-		break;
-	    case 'w':
-		width = strtol(arg + 1, (char **) &arg, 10);
-		break;
-	    case 'b':
-		weight |= 1;
-		break;
-	    case 'i':
-		weight |= 2;
-		break;
-	    default:
-		return 0;
-	}
-	arg = strchr(arg, ':');
-    }
-
-    if ((weight & 1) && i < 35)
-    {
-	/* Bold goes instead of given suffix */
-	strncpy(font + i, ".Bold", 5);
-	i += 5;
-    }
-    else
-    {
-	/* Copy rest of name unless we are using Bold */
-	while (i < 39)
-	{
-	    c = fullname[i];
-	    if (c == ':' || c == NUL)
-		break;
-	    font[i++] = c;
-	}
-    }
-    if ((weight & 2) && i < 32)
-    {
-	strncpy(font + i, ".Oblique", 8);
-	i += 8;
-    }
-
-    font[i] = 0;
-
-    if (height < 1 && width < 1)
-	height = width = 10;	/* Default to 10pt */
-    else if (height < 1)
-	height = width;
-    else if (width < 1)
-	width = height;
-
-    if (xswi(Font_FindFont, 0, font, width << 4, height << 4, 0, 0) & v_flag)
-	return NOFONT;		/* Can't find font */
-
-    return r0;
-}
-
-/* Load a file into allocated memory and check it is valid.
- * Return a pointer to the allocated block on success.
- */
-    char    *
-zap_load_file(name, style)
-    char_u  *name;	    /* Name of directory containing styles */
-    char_u  *style;	    /* Name of style within directory */
-{
-    char_u  fname[256];
-    char_u  *file;
-
-    if (strlen(name) + strlen(style) > 254)
-	return NULL;	    /* Names too long */
-
-    sprintf(fname, "%s.%s", name, style);
-
-    /* Load the named font in 1bpp format. */
-    if (xswi(OS_File, 13, fname, 0, 0, "VimFonts:") & v_flag || r0 != 1)
-	return NULL;	    /* Error reading file info, or not a file */
-
-    /* Allocate enough memory to load the whole file */
-    file = (char *) alloc(r4);
-    if (!file)
-	return NULL;	/* Out of memory */
-
-    if (xswi(OS_File, 12, fname, file, 0, "VimFonts:") & v_flag)
-	return NULL;	/* Unable to load file */
-
-    if (strncmp(file, "ZapFont\015", 8) == 0)
-	return file;	/* Loaded OK! */
-
-    vim_free(file);
-    return NULL;	/* Not a valid font file */
-}
-
-/* Load and convert the named font.
- * If name is NULL or a null string then convert the system font.
- * Return OK on success; FAIL and we revert to using the VDU drivers.
- *
- * 'name' is the name of a directory.
- * Tries to load 'name.0', 'name.B', 'name.I' and 'name.IB'.
- */
-    int
-zap_load_font(name)
-    char_u  *name;
-{
-    int	    i;
-
-    /* Free the existing font files, if any */
-    for (i = 0; i < ZAP_STYLES; i++)
-    {
-	vim_free(zap_file[i]);
-	zap_file[i] = NULL;
-    }
-
-    if (name && *name == '!')
-    {
-	name++;
-	double_height = TRUE;
-    }
-    else
-	double_height = FALSE;
-
-    if (name && *name)
-    {
-	zap_file[ZAP_NORMAL]	= zap_load_file(name, "0");
-	if (!zap_file[ZAP_NORMAL])
-	    return FAIL;	/* Can't load the 'normal' style - error */
-
-	zap_file[ZAP_BOLD]	= zap_load_file(name, "B");
-	zap_file[ZAP_ITALIC]	= zap_load_file(name, "I");
-	zap_file[ZAP_BITALIC]	= zap_load_file(name, "IB");
-    }
-    else
-    {
-	int	*header;
-	char	workarea[16];
-	char	*old_wa;
-
-	/* Allocate memory for system font (8 x 8 x 256 bits, plus header) */
-	header = (int *) alloc(0x20 + 8 * 256);
-	if (header == NULL)
-	    return FAIL;
-	zap_file[ZAP_NORMAL] = (char *) header;
-
-	/* Store details about the system font */
-	header[2] = 8;	    /* Width */
-	header[3] = 8;	    /* Height */
-	header[4] = 0;	    /* First char */
-	header[5] = 255;    /* Last char */
-	header[6] = header[7] = 0;  /* Reserved */
-
-	/* Get system font bitmap */
-	old_wa = zap_redraw_block.r_workarea;
-	zap_redraw_block.r_workarea = workarea;
-	swi(ZapRedraw_ReadSystemChars, zap_file[ZAP_NORMAL] + 0x20, &zap_redraw_block);
-	zap_redraw_block.r_workarea = old_wa;
-    }
-
-    return ro_zap_redraw_initialise();
-}
-
-/*
- * Initialise vim to use the font with the given name.
- * Return FAIL if the font could not be loaded, OK otherwise.
- */
-    int
-gui_mch_init_font(char_u *font_name, int fontset)
-{
-    int	    new_handle	= 0;	    /* Use the system font by default */
-
-    if (font_name[0] == '!')
-    {
-	/* Select a ZapRedraw font */
-	if (zap_load_font(font_name + 1))
-	    zap_redraw = TRUE;
-	else
-	{
-	    EMSG2(_("E610: Can't load Zap font '%s'"), font_name);
-	    font_name = "System";   /* Error - use system font */
-	    zap_redraw = FALSE;
-	}
-    }
-    else
-    {
-	zap_redraw = FALSE;
-
-	if (font_name)
-	{
-	    /* Extract any extra details about the font */
-	    new_handle = ro_get_font(font_name, 0);
-	    if (!new_handle)
-		return FAIL;
-	}
-	else
-	    font_name = "System";
-    }
-
-    /* Free the previous font, if any */
-    gui_mch_free_font(gui.norm_font);
-    gui.norm_font = new_handle;
-    gui.char_ascent = 0;
-
-    if (new_handle)
-    {
-	/* Read details about the chosen font */
-	swi(Font_ReadInfo, new_handle);
-
-	gui.char_width	= r3 - r1;
-	gui.char_height = r4 - r2;
-
-	font_x_offset = -r1;	/* Where to position each char in its box */
-	font_y_offset = -r4;
-
-	/* Try to load other fonts for bold, italic, and bold-italic */
-	gui_mch_free_font(gui.bold_font);
-	gui.bold_font = ro_get_font(font_name, 1);
-	gui_mch_free_font(gui.ital_font);
-	gui.ital_font = ro_get_font(font_name, 2);
-	gui_mch_free_font(gui.boldital_font);
-	gui.boldital_font = ro_get_font(font_name, 3);
-    }
-    else
-    {
-	/* Use the system font or ZapRedraw. */
-	if (zap_redraw)
-	{
-	    gui.char_width	= zap_redraw_block.r_charw << zap_redraw_block.r_magx;
-	    gui.char_height	= zap_redraw_block.r_charh << zap_redraw_block.r_magy;
-	    if (double_height)
-		gui.char_height <<= 1;
-	}
-	else
-	{
-	    gui.char_width	= 16;
-	    gui.char_height	= 32;
-	}
-
-	gui_mch_free_font(gui.bold_font);
-	gui.bold_font = 0;
-	gui_mch_free_font(gui.ital_font);
-	gui.ital_font = 0;
-	gui_mch_free_font(gui.boldital_font);
-	gui.boldital_font = 0;
-    }
-    hl_set_font_name(font_name);
-
-    must_redraw = CLEAR;
-    return OK;
-}
-
-/*
- * Adjust gui.char_height (after 'linespace' was changed).
- */
-    int
-gui_mch_adjust_charheight()
-{
-    return FAIL;
-}
-
-/*
- * Get a font structure for highlighting.
- */
-    GuiFont
-gui_mch_get_font(name, giveErrorIfMissing)
-    char_u	*name;
-    int		giveErrorIfMissing;
-{
-    int		handle;
-
-    if (!name)
-	return NOFONT;		/* System font if no name */
-
-    handle = ro_get_font(name, 0);
-    if (!handle)
-    {
-	if (giveErrorIfMissing)
-	    EMSG2(_("E611: Can't use font %s"), name);
-	return NOFONT;
-    }
-
-    return handle;
-}
-
-#if defined(FEAT_EVAL) || defined(PROTO)
-/*
- * Return the name of font "font" in allocated memory.
- * Don't know how to get the actual name, thus use the provided name.
- */
-    char_u *
-gui_mch_get_fontname(font, name)
-    GuiFont font;
-    char_u  *name;
-{
-    if (name == NULL)
-	return NULL;
-    return vim_strsave(name);
-}
-#endif
-
-/*
- * Set the current text font.
- */
-    void
-gui_mch_set_font(GuiFont font)
-{
-    ro_current_font = font;
-
-    if (font)
-    {
-	/* Not the system font or ZapRedraw font - select it */
-	swi(Font_SetFont, font);
-    }
-}
-
-/*
- * If a font is not going to be used, free its structure.
- */
-    void
-gui_mch_free_font(GuiFont font)
-{
-    if (font)
-	swi(Font_LoseFont, font);
-}
-
-/*
- * Return the Pixel value (colour) for the given colour name.
- * Return INVALCOLOR for error.
- * NB: I've changed Green for now, since it looked really sick
- */
-    guicolor_T
-gui_mch_get_color(char_u *name)
-{
-    int		i;
-    struct colour
-    {
-	char_u		*name;
-	guicolor_T	value;
-    } colours[] =
-    {
-	{ "Red",		grgb(255,	0,	0)	},
-	{ "LightRed",		grgb(255,	0,	0)	},
-	{ "DarkRed",		grgb(139,	0,	0)	},
-
-	{ "Green",		grgb(50,	200,	50)	},
-	{ "LightGreen",		grgb(144,	238,	144)	},
-	{ "DarkGreen",		grgb(0,		100,	0)	},
-	{ "SeaGreen",		grgb(46,	139,	87)	},
-
-	{ "Blue",		grgb(0,		0,	255)	},
-	{ "LightBlue",		grgb(173,	216,	230)	},
-	{ "DarkBlue",		grgb(0,		0,	139)	},
-	{ "SlateBlue",		grgb(160,	90,	205)	},
-
-	{ "Cyan",		grgb(0,		255,	255)	},
-	{ "LightCyan",		grgb(224,	255,	255)	},
-	{ "DarkCyan",		grgb(0,		139,	139)	},
-
-	{ "Magenta",		grgb(255,	0,	255)	},
-	{ "LightMagenta",	grgb(255,	224,	255)	},
-	{ "DarkMagenta",	grgb(139,	0,	139)	},
-
-	{ "Yellow",		grgb(255,	255,	0)	},
-	{ "LightYellow",	grgb(255,	255,	224)	},
-	{ "DarkYellow",		grgb(139,	139,	0)	},
-	{ "Brown",		grgb(165,	42,	42)	},
-
-	{ "Gray",		grgb(190,	190,	190)	},
-	{ "Grey",		grgb(190,	190,	190)	},
-	{ "LightGray",		grgb(211,	211,	211)	},
-	{ "LightGrey",		grgb(211,	211,	211)	},
-	{ "DarkGray",		grgb(169,	169,	169)	},
-	{ "DarkGrey",		grgb(169,	169,	169)	},
-	{ "Gray10",		grgb(26,	26,	26)	},
-	{ "Grey10",		grgb(26,	26,	26)	},
-	{ "Gray20",		grgb(51,	51,	51)	},
-	{ "Grey20",		grgb(51,	51,	51)	},
-	{ "Gray30",		grgb(77,	77,	77)	},
-	{ "Grey30",		grgb(77,	77,	77)	},
-	{ "Gray40",		grgb(102,	102,	102)	},
-	{ "Grey40",		grgb(102,	102,	102)	},
-	{ "Gray50",		grgb(127,	127,	127)	},
-	{ "Grey50",		grgb(127,	127,	127)	},
-	{ "Gray60",		grgb(153,	153,	153)	},
-	{ "Grey60",		grgb(153,	153,	153)	},
-	{ "Gray70",		grgb(179,	179,	179)	},
-	{ "Grey70",		grgb(179,	179,	179)	},
-	{ "Gray80",		grgb(204,	204,	204)	},
-	{ "Grey80",		grgb(204,	204,	204)	},
-	{ "Gray90",		grgb(229,	229,	229)	},
-	{ "Grey90",		grgb(229,	229,	229)	},
-
-	{ "Black",		grgb(0,		0,	0)	},
-	{ "White",		grgb(255,	255,	255)	},
-
-	{ "Orange",		grgb(255,	165,	0)	},
-	{ "Purple",		grgb(160,	32,	240)	},
-	{ "Violet",		grgb(238,	130,	238)	},
-	{NULL, 0}
-    };
-
-    if (name[0] == '#')
-    {
-	char	    *end;
-	int	    c;
-
-	c = strtol(name + 1, &end, 16);
-	return (guicolor_T) ((c >> 16) & 0xff) | (c & 0xff00) | ((c & 0xff) << 16);
-    }
-
-    for (i = 0; colours[i].name != NULL; i++)
-    {
-	if (STRICMP(name, colours[i].name) == 0)
-	    return colours[i].value;
-    }
-    if (strnicmp(name, "grey", 4) == 0 || strnicmp(name, "gray", 4) == 0)
-    {
-	int level = (255 * atoi(name + 4)) / 100;
-	return (guicolor_T) grgb(level, level, level);
-    }
-    return INVALCOLOR;
-}
-
-/*
- * Set the current text colours.
- * If we are using fonts then set the antialiasing colours too.
- */
-    void
-gui_mch_set_colors(guicolor_T fg, guicolor_T bg)
-{
-    zap_redraw_colours[0] = bg << 8;	/* JK230798, register new background colour */
-    zap_redraw_colours[1] = fg << 8;	/* JK230798, register new foreground colour */
-    zap_redraw_update_colours = TRUE;	/* JK230798, need update of colour masks */
-
-    swi(ColourTrans_ReturnGCOL, fg << 8);
-    gui.fg_colour = r0;
-    swi(ColourTrans_ReturnGCOL, bg << 8);
-    gui.bg_colour = r0;
-
-    if (ro_current_font)
-	swi(ColourTrans_SetFontColours, 0, bg << 8, fg << 8, 14);
-}
-
-    void
-ro_draw_string(x, y, s, len, flags, clip)
-    int	    x;		/* Top-left coord to plot at (x incl, y excl) */
-    int	    y;		/* (screen coords) */
-    char_u  *s;		/* String to plot */
-    int	    len;	/* Length of string */
-    int	    flags;	/* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL */
-    int*    clip;	/* JK230798, added clip window */
-{
-    if (ro_current_font)
-    {
-	int	fx;
-	int	flen = len;	/* Preserve for underline */
-
-	/* Use the Font manager to paint the string.
-	 * Must do one char at a time to get monospacing.
-	 */
-
-	if (flags & DRAW_ITALIC && !gui.ital_font)
-	    flags |= DRAW_UNDERL;	/* No italic - underline instead */
-
-	if ((flags & DRAW_TRANSP) == 0)
-	{
-	    swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
-	    swi(OS_Plot, 4, x, y - gui.char_height);
-	    swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
-	}
-
-	fx = x + font_x_offset;
-	while (flen--)
-	{
-	    swi(Font_Paint, 0, s++, 0x90, fx, y + font_y_offset, 0, 0, 1);
-	    fx += gui.char_width;
-	}
-    }
-    else
-    {
-	if (zap_redraw)
-	{
-	    /* Using fast Zap redraw. */
-	    flags = ro_zap_redraw_draw_string(x, y, s, len, flags, clip);
-	}
-	else
-	{
-	    /* Using the system font */
-	    if (flags & DRAW_ITALIC)
-		flags |= DRAW_UNDERL;
-
-	    if ((flags & DRAW_TRANSP) == 0)
-	    {
-		swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
-		swi(OS_Plot, 4, x, y - gui.char_height);
-		swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
-	    }
-	    swi(OS_Plot, 4,			/* Move the drawing cursor */
-		    x,
-		    y - 1);
-	    swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
-	    swi(OS_WriteN, s, len);
-
-	    if (flags & DRAW_BOLD)
-	    {
-		swi(OS_Plot, 4, x + (1 << x_eigen_factor), y - 1);
-		swi(OS_WriteN, s, len);
-	    }
-	}
-    }
-
-    if (flags & DRAW_UNDERL)
-    {
-	if (ro_current_font || zap_redraw)
-	    swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
-	/* Underlined is the same with all plotting methods */
-	swi(OS_Plot, 4, x, y - gui.char_height);
-	swi(OS_Plot, 1, gui.char_width * len, 0);
-    }
-}
-
-    void
-gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
-{
-    int x, y;		/* Workarea x,y */
-    x = col * gui.char_width;
-    y = -row * gui.char_height;
-
-    if (redraw_block)
-    {
-	ro_draw_string(x + redraw_block[1], y + redraw_block[4],
-			s, len, flags, &redraw_block[7]);	/* JK230798, added clip window */
-    }
-    else
-    {
-	int block[44];
-	block[0] = gui.window_handle;
-	block[1] = x;
-	block[2] = y - gui.char_height;
-	block[3] = (col + len) * gui.char_width;
-	block[4] = y;
-	swi(Wimp_UpdateWindow, 0, block);
-	while (r0)
-	{
-	    ro_draw_string(x + block[1], y + block[4],
-			s, len, flags, &block[7]);	/* JK230798, added clip window */
-	    swi(Wimp_GetRectangle, 0, block);
-	}
-    }
-}
-
-/*
- * Return OK if the key with the termcap name "name" is supported.
- */
-    int
-gui_mch_haskey(char_u *name)
-{
-    return FAIL;
-}
-
-    void
-gui_mch_beep(void)
-{
-    swi(OS_WriteI + 7);
-}
-
-/*
- * Visual bell.
- */
-    void
-gui_mch_flash(int msec)
-{
-    /* TODO */
-}
-
-
-/*
- * Plot a solid rectangle using the given plot action and colour.
- * Coordinates are inclusive and window-relative.
- */
-    void
-plot_rectangle(plot, colour, minx, miny, maxx, maxy)
-    int plot;		/* OS_Plot action */
-    int colour;
-    int minx;
-    int miny;
-    int maxx;
-    int maxy;
-{
-    if (redraw_block)
-    {
-	swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
-	swi(OS_Plot, 4, minx + redraw_block[1], miny + redraw_block[4]);
-	swi(OS_Plot, plot, maxx + redraw_block[1], maxy + redraw_block[4]);
-    }
-    else
-    {
-	int block[44];
-	block[0] = gui.window_handle;
-	block[1] = minx;
-	block[2] = miny;
-	block[3] = maxx + 1;
-	block[4] = maxy + 1;
-	swi(Wimp_UpdateWindow, 0, block);
-	while (r0)
-	{
-	    swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
-	    swi(OS_Plot, 4, minx + block[1], miny + block[4]);
-	    swi(OS_Plot, plot, maxx + block[1], maxy + block[4]);
-	    swi(Wimp_GetRectangle, 0, block);
-	}
-    }
-}
-
-/*
- * Invert a rectangle from row r, column c, for nr rows and nc columns.
- */
-    void
-gui_mch_invert_rectangle(int r, int c, int nr, int nc)
-{
-    plot_rectangle(96 + 6, 0, FILL_X(c), -FILL_Y(r + nr), FILL_X(c + nc), -FILL_Y(r));
-}
-
-/*
- * Iconify the GUI window.
- */
-    void
-gui_mch_iconify(void)
-{
-}
-
-#if defined(FEAT_EVAL) || defined(PROTO)
-/*
- * Bring the Vim window to the foreground.
- */
-    void
-gui_mch_set_foreground()
-{
-    /* TODO */
-}
-#endif
-
-/* Draw a hollow rectangle relative to the current
- * graphics cursor position, with the given width
- * and height. Start position is top-left.
- */
-    void
-draw_hollow(w, h)
-    int	w;
-    int	h;
-{
-    swi(OS_Plot, 1, w - 1, 0);
-    swi(OS_Plot, 1, 0, 1 - h);
-    swi(OS_Plot, 1, 1 - w, 0);
-    swi(OS_Plot, 1, 0, h - 1);
-}
-
-/*
- * Draw a cursor without focus.
- */
-    void
-gui_mch_draw_hollow_cursor(guicolor_T colour)
-{
-    int x = FILL_X(gui.cursor_col);	/* Window relative, top-left */
-    int y = -FILL_Y(gui.cursor_row);
-    if (redraw_block == NULL)
-    {
-	int block[11];
-
-	block[0] = gui.window_handle;
-	block[1] = x;
-	block[2] = y - gui.char_height;
-	block[3] = x + gui.char_width;
-	block[4] = y;
-	swi(Wimp_UpdateWindow, 0, block);
-	while (r0)
-	{
-	    swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
-
-	    swi(OS_Plot, 4, x + block[1], y + block[4] - 1);
-	    draw_hollow(gui.char_width, gui.char_height);
-
-	    swi(Wimp_GetRectangle, 0, block);
-	}
-    }
-    else
-    {
-	swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
-
-	swi(OS_Plot, 4, x + redraw_block[1], y + redraw_block[4] - 1);
-	draw_hollow(gui.char_width, gui.char_height);
-    }
-}
-
-/*
- * Draw part of a cursor, "w" pixels wide, and "h" pixels high, using
- * color "color".
- */
-    void
-gui_mch_draw_part_cursor(w, h, colour)
-    int w;
-    int h;
-    guicolor_T colour;
-{
-    int x = FILL_X(gui.cursor_col);
-    int y = -FILL_Y(gui.cursor_row);
-    swi(ColourTrans_ReturnGCOL, colour << 8);
-    plot_rectangle(96 + 5, r0, x, y - h, x + w - 1, y - 1);
-}
-
-/*
- * Catch up with any queued events.  This may put keyboard input into the
- * input buffer, call resize call-backs, trigger timers etc.
- * If there is nothing in the event queue(& no timers pending), then we return
- * immediately (well, after a Wimp_Poll).
- */
-    void
-gui_mch_update(void)
-{
-    int block[64];
-    int reason;
-
-    swi(OS_ReadMonotonicTime);
-    if ((r0 - time_of_last_poll) < 50)
-	return;			    /* Don't return too often */
-
-    reason = wimp_poll(0, block);
-    if (reason)
-	process_event(reason, block);
-    ro_return_early = FALSE;		/* We're returning anyway. */
-}
-
-    void
-redraw_window(block)
-    int *block;
-{
-    int x, y;			/* Vim workarea coords */
-    int width, height;
-    int blank_col;
-
-    swi(ColourTrans_ReturnGCOL, UNUSED_COLOUR << 8, 0, 0, 1<<7, 0);
-    blank_col = r0;
-
-    swi(Wimp_RedrawWindow, 0, block);
-    redraw_block = block;
-    while (r0)
-    {
-	x = block[7] - block[1];
-	y = block[4] - block[10];
-	width  = block[9]  - block[7];
-	height = block[10] - block[8];
-
-	if (height + y > Rows * gui.char_height)
-	{
-	    /* Blank everything off the bottom. */
-	    plot_rectangle(96 + 5, blank_col,
-				0, block[8] - block[4],
-				block[9] - block[1], -FILL_Y(Rows) - 1);
-	    height = Rows * gui.char_height;
-	}
-	if (width + x> Columns * gui.char_width)
-	{
-	    /* Blank everything off to the right. */
-	    plot_rectangle(96 + 5, blank_col,
-				FILL_X(Columns), block[8] - block[4],
-				block[9] - block[1], 0);
-	    width = Columns * gui.char_width;
-	}
-	gui_redraw(x , y, width, height);
-	swi(Wimp_GetRectangle, 0, block);
-    }
-    redraw_block = NULL;
-}
-
-/* Check if we have modified data.
- * If we do then ack the message to stop the shutdown.
- * Otherwise, ignore the message.
- */
-    void
-ro_prequit(block)
-    int	    *block;
-{
-    if (!ro_ok_to_quit())
-    {
-	/* Not OK to quit - stop shutdown */
-	block[3] = block[2];
-	swi(Wimp_SendMessage, 19, block, block[1]);
-    }
-    /* Do nothing. We may get a Message_Quit later. */
-}
-
-/* If there is unsaved data then ask the user if they mind losing it.
- * Return TRUE if we can quit without saving, FALSE to halt the
- * shutdown.
- */
-    int
-ro_ok_to_quit()
-{
-    int	    old_confirm = cmdmod.confirm;
-
-    cmdmod.confirm = FALSE;	    /* Use our own, single tasking, box */
-
-    if (check_changed_any(FALSE))
-    {
-	swi(Wimp_ReportError,
-		"\0\0\0\0Vim contains unsaved data - quit anyway?",
-		0x17,
-		"Vim");
-	cmdmod.confirm = old_confirm;
-	if (r1 != 1)
-	    return FALSE;
-    }
-    cmdmod.confirm = old_confirm;
-    return TRUE;
-}
-
-/* Quit without checking for unsaved data. */
-    void
-ro_quit()
-{
-    exiting = TRUE;
-    getout(0);
-
-    exiting = FALSE;		    /* probably can't get here */
-    setcursor();		    /* position cursor */
-    out_flush();
-}
-
-/* Insent the given vim special code into the input buffer */
-    void
-ro_press(a, b, modifier)
-    char a;
-    char b;
-    int modifier;	/* %<Ctrl><Shift> 0000 0000 */
-{
-    char_u buf[6];
-    int	    vim_mod;
-    int	    key;
-
-
-    /* Convert RISC OS modifier to Vim modifier. */
-    vim_mod = ((modifier & 0x10) ? MOD_MASK_SHIFT : 0)
-	       | ((modifier & 0x20) ? MOD_MASK_CTRL : 0);
-    key = simplify_key(TERMCAP2KEY(a, b), &vim_mod);
-
-    buf[3] = CSI;
-    buf[4] = KEY2TERMCAP0(key);
-    buf[5] = KEY2TERMCAP1(key);
-    if (vim_mod)
-    {
-	buf[0] = CSI;
-	buf[1] = KS_MODIFIER;
-	buf[2] = vim_mod;
-	add_to_input_buf(buf, 6);
-    }
-    else
-	add_to_input_buf(buf + 3, 3);
-}
-
-/* Take a wimp key code and insert the vim equivalent
- * into vim's input buffer.
- * CTRL-C also sets got_int.
- */
-    void
-ro_insert_key(code)
-    char_u *code;		/* Wimp_ProcessKey code (4 bytes) */
-{
-    char a = code[0];
-    char b = code[1];
-    int base, modifier;
-
-    if (a == 3 && ctrl_c_interrupts)
-	got_int = TRUE;
-
-    /* Is it a normal key? */
-    if (a > 31 && a < 127)
-    {
-	add_to_input_buf(code, 1);
-	return;
-    }
-
-    /* We should pass any unrecognised keys on, but
-     * for now just pass on F12 combinations.
-     */
-    switch (b)
-    {
-	case 0:
-	    /* Home and Delete are the only special cases */
-	    switch (a)
-	    {
-		case 0x1e:
-		    ro_press('k','h', 0);	/* Home */
-		    return;
-		case 0x7f:
-		    ro_press('k','D', 0);	/* Delete */
-		    return;
-		case CSI:
-		    {
-			/* Turn CSI into K_CSI.  Untested! */
-			char_u string[3] = {CSI, KS_EXTRA, KE_CSI};
-
-			add_to_input_buf(string, 3);
-			return;
-		    }
-		default:
-		    add_to_input_buf(code, 1);
-		    return;
-	    }
-	case 1:
-	    if ((a & 0xcf) == 0xcc)
-	    {
-		/* F12 pressed - pass it on (quick hack) */
-		swi(Wimp_ProcessKey, a | 0x100);
-		return;
-	    }
-	    base = a & 0xcf;
-	    modifier = a & 0x30;
-	    switch (base)
-	    {
-		case 0x8a:	/* Tab */
-		    add_to_input_buf("\011", 1);
-		    return;
-		case 0x8b:	/* Copy (End) */
-		    return ro_press('@', '7', modifier);
-		case 0x8c:	/* Left */
-		    return ro_press('k', 'l', modifier);
-		case 0x8d:	/* Right */
-		    return ro_press('k', 'r', modifier);
-		case 0x8e:	/* Down */
-		    if (modifier & 0x10)
-			return ro_press('k', 'N', modifier ^ 0x10);
-		    else
-			return ro_press('k', 'd', modifier);
-		case 0x8f:	/* Up */
-		    if (modifier & 0x10)
-			return ro_press('k', 'P', modifier ^ 0x10);
-		    else
-			return ro_press('k', 'u', modifier);
-		case 0xca:	/* F10 */
-		    return ro_press('k', ';', modifier);
-		case 0xcb:	/* F11 */
-		    return ro_press('F', '1', modifier);
-		case 0xcd:	/* Insert */
-		    return ro_press('k', 'I', modifier);
-		default:
-		    if (base > 0x80 && base < 0x18a)
-		    {
-			/* One of the other function keys */
-			return ro_press('k', '0' + (base & 15), modifier);
-		    }
-	    }
-    }
-}
-
-/* Process a mouse event. */
-    void
-ro_mouse(block)
-    int *block;
-{
-    int x, y, button, vim_button;
-    int modifiers = 0;
-    int min_x, min_y;		/* Visible area of editor window */
-    int max_x, max_y;
-
-    if (block[3] != gui.window_handle || ro_dragging)
-	return;			/* Not our window or ignoring clicks*/
-
-    x = block[0];		/* Click position - screen coords */
-    y = block[1];
-    button = block[2];
-
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-    min_x = block[1];
-    min_y = block[2];
-    max_x = block[3];
-    max_y = block[4];
-
-    if (block[3] - x < gui.scrollbar_width)
-    {
-	/* Click in that blank area under the scrollbars */
-
-	if (button & 0x444)
-	{
-	    int	    front_block[10];
-	    /* Dragging with Select - bring window to front first */
-	    front_block[0] = gui.window_handle;
-	    swi(Wimp_GetWindowState, 0, front_block);
-	    front_block[7] = -1;
-	    ro_open_main(front_block);
-	}
-
-	block[0] = gui.window_handle;
-	block[1] = 7;			/* Drag point */
-	block[2] = block[4] = 0;	/* Coords of point. */
-	block[3] = block[5] = 0;
-	drag_x_offset = max_x - x;
-	drag_y_offset = min_y - y;
-
-	/* Parent box. */
-	block[6] = min_x +
-			gui.scrollbar_width * 2 +
-			MIN_COLUMNS * gui.char_width;
-	block[7] = 0;
-	gui_mch_get_screen_dimensions(&block[8], &block[9]);
-	block[9] = max_y -
-			4 * gui.char_height -
-			gui.scrollbar_height;
-
-	swi(Wimp_DragBox, 0, block);
-	ro_dragging = DRAG_RESIZE_WINDOW;
-	drag_button = vim_button;
-	drag_modifiers = modifiers;
-	return;
-    }
-
-    if (button & 0x111)
-	vim_button = MOUSE_RIGHT;
-    else if (button & 0x222)
-	vim_button = MOUSE_MIDDLE;
-    else
-	vim_button = MOUSE_LEFT;
-
-    swi(OS_Byte, 121, 0x80);
-    if (r1 == 0xff)
-	modifiers |= MOUSE_SHIFT;
-    swi(OS_Byte, 121, 0x81);
-    if (r1 == 0xff)
-	modifiers |= MOUSE_CTRL;
-    swi(OS_Byte, 121, 0x82);
-    if (r1 == 0xff)
-	modifiers |= MOUSE_ALT;
-
-    if (button == 2)
-    {
-	/* Menu click:
-	 * If shift was pressed then do the paste action.
-	 * If not, then open the pop-up menu.
-	 */
-	modifiers ^= MOUSE_SHIFT;
-	if (modifiers && MOUSE_SHIFT)
-	{
-	    vimmenu_T	main;
-	    /* Shift was NOT pressed - show menu */
-	    main.dname = (char_u *) "Vim";
-	    main.children = root_menu;
-	    gui_mch_show_popupmenu(&main);
-	    return;
-	}
-    }
-
-    /* Gain the input focus */
-    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
-
-    if (button & 0xf0)
-    {
-	/* Drag operation:
-	 *
-	 * Tell the Wimp to start a drag.
-	 * Monitor null events.
-	 */
-	block[1] = 7;			/* Drag a point. */
-	block[2] = block[4] = x;	/* Coords of point. */
-	block[3] = block[5] = y;
-	block[6] = 0;			/* Coords of bounding box. */
-	block[7] = 0;
-	gui_mch_get_screen_dimensions(&block[8], &block[9]);
-
-	drag_x_offset = drag_y_offset = 0;
-
-	swi(Wimp_DragBox, 0, block);
-	ro_dragging = DRAG_SELECTION;
-	drag_button = vim_button;
-	drag_modifiers = modifiers;
-
-	vim_button |= MOUSE_DRAG;
-    }
-
-    gui_send_mouse_event(
-		vim_button,
-		x - min_x,
-		max_y - y,
-		button & 0xf ? TRUE : FALSE,	/* dclick */
-		modifiers);
-}
-
-    void
-ro_continue_drag(block)
-    int *block;			/* Just used as scrap. */
-{
-    int x, y;
-
-    /* Get screen coords of pointer. */
-    swi(Wimp_GetPointerInfo, 0, block);
-    x = block[0] + drag_x_offset;
-    y = block[1] + drag_y_offset;
-
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-
-    if (ro_dragging == DRAG_RESIZE_WINDOW)
-    {
-	/* Resizeing the main window. */
-	block[2] = y;
-	block[3] = x;
-	ro_open_main(block);
-    }
-    else
-    {
-	/* Selecting some text. */
-	gui_send_mouse_event(
-	    drag_button | MOUSE_DRAG,	/* Always report the same button */
-	    x - block[1],
-	    block[4] - y,
-	    FALSE,			/* Not a double click. */
-	    drag_modifiers);
-    }
-}
-
-/* User has released all mouse buttons, marking the end of a drag. */
-    void
-ro_drag_finished(block)
-    int *block;
-{
-    int x;
-    int y;
-    int width, height;
-
-    /* I don't trust the box returned by Wimp_Poll; look at the pointer
-     * ourselves.
-     */
-    swi(Wimp_GetPointerInfo, 0, block);
-    x = block[0] + drag_x_offset;
-    y = block[1] + drag_y_offset;
-
-    if (ro_dragging == DRAG_RESIZE_WINDOW)
-    {
-	block[0] = gui.window_handle;
-	swi(Wimp_GetWindowState, 0, block);
-	block[2] = y;
-	block[3] = x;
-	ro_open_main(block);
-
-	width = (block[3] - block[1]);
-	height = (block[4] - block[2]);
-
-	swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
-	gui_resize_shell(width, height);
-    }
-    else
-    {
-	block[0] = gui.window_handle;
-	swi(Wimp_GetWindowState, 0, block);
-	gui_send_mouse_event(
-		MOUSE_RELEASE,
-		x - block[1],
-		block[4] - y,
-		FALSE,			/* not a double click */
-		drag_modifiers);
-    }
-    ro_dragging = DRAG_FALSE;
-}
-
-/* Load the file/pathname given in block into a [new] buffer.
- *
- * Modifier	Action
- *
- * None		:confirm e <file>
- * Ctrl		:sp <file>
- * Shift	<file>
- *
- * Insert into typebuf, at the start.
- * If loading from !Scrap then use saved leafname instead, and
- * delete the scrap file. Also, ignore shift key.
- *
- * NB: Doesn't send DataLoadAck (other app might delete temp file?).
- */
-    void
-ro_dataload(block)
-    int	    *block;
-{
-    char_u  new_path[MAXPATHL];
-    char_u  *path = ((char_u *) block) + 44;
-    int	    scrap = FALSE;
-
-    if (block[3] == leaf_ref && leaf_name)
-	scrap = TRUE;
-
-    switch (get_real_state() & 0xff)
-    {
-	case INSERT:
-	case CMDLINE:
-	case CMDLINE+LANGMAP:
-	    /* For insert mode we can only insert the pathname (currently)
-	     * Make sure Shift is pressed.
-	     */
-	    swi(OS_Byte, 121, 0x80);	    /* Is Shift pressed? */
-	    if (r1 == 0xff)
-	    {
-		ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
-		ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
-		ro_return_early = TRUE;		    /* Return even though nothing was typed. */
-	    }
-	    else
-		swi(Wimp_ReportError,
-			"\0\0\0\0Sorry, you can only load text in normal mode", 5, "Vim");
-	    break;
-
-	case NORMAL:
-	    ro_return_early = TRUE;	    /* Return even though nothing was typed. */
-
-	    if (scrap)			    /* Remove <Wimp$Scrap>. Later. */
-		ins_typebuf(":!~remove <Wimp$Scrap>\r", REMAP_NONE, 0, TRUE, FALSE);
-
-	    /* Insert {:sp ,:confirm e }[+f\ <leaf> ]<file><CR> */
-	    ins_typebuf("\r", REMAP_NONE, 0, TRUE, FALSE);
-	    ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
-	    ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
-
-	    if (scrap)
-	    {
-		/* Loading via !Scrap - change pathname to stored leafname */
-		ins_typebuf(leaf_name, REMAP_NONE, 0, TRUE, FALSE);
-		ins_typebuf(" +f\\ ", REMAP_NONE, 0, TRUE, FALSE);
-		leaf_ref = 0;
-		vim_free(leaf_name);
-		leaf_name = NULL;
-	    }
-
-	    swi(OS_Byte, 121, 0x81);	    /* Is Ctrl pressed? */
-	    if (r1 == 0xff)
-		/* Yes, split window */
-		ins_typebuf(":sp", REMAP_NONE, 0, TRUE, FALSE);
-	    else
-		ins_typebuf(":confirm e", REMAP_NONE, 0, TRUE, FALSE);
-	    break;
-
-	default:
-	    swi(Wimp_ReportError, "\0\0\0\0You can only load text in normal mode.", 5, "Vim");
-    }
-    /* Send DataSaveAck so other program doesn't think we died
-     * and delete <Wimp$Scrap>.
-     */
-    block[3] = block[2];
-    block[4] = 4;
-    swi(Wimp_SendMessage, 17, block, block[1]);
-}
-
-    void
-ro_datasave(block)
-    int	    *block;
-{
-    char_u *path = ((char_u *) block) + 44;
-
-    /* Preserve the name given so we can use it, not <Wimp$Scrap> */
-    if (leaf_name)
-	vim_free(leaf_name);
-    leaf_name = vim_strsave(path);
-
-    block[9] = -1;	    /* File is unsafe. */
-    strcpy(path, "<Wimp$Scrap>");
-    block[0] = 60;
-    block[3] = block[2];
-    block[4] = 2;
-    swi(Wimp_SendMessage, 17, block, block[1]);
-
-    leaf_ref = block[2];
-}
-
-    void
-ro_message(block)
-    int *block;
-{
-    char_u	*buffer;
-    long_u	len;
-
-    if (block[1] == task_handle)
-	return;			    /* Don't talk to ourself! */
-    switch (block[4])
-    {
-	case 0:		/* Quit. */
-	    if (block[4] == 0)
-		ro_quit();
-	    break;
-	case 1:	/* DataSave */
-	    ro_datasave(block);
-	    break;
-	case 2:		/* DataSaveAck. */
-	    if (clip_convert_selection(&buffer, &len, &clip_star) == -1)
-		return;
-
-	    /* Save the clipboard contents to a file. */
-	    swi(OS_File, 10, ((char_u *) block) + 44, 0xfff, 0, buffer, buffer + len);
-
-	    /* Ack with DataLoad message. */
-	    block[3] = block[2];
-	    block[4] = 3;
-	    block[9] = len;
-	    swi(Wimp_SendMessage, 17, block, block[1]);
-
-	    vim_free(buffer);
-	    break;
-	case 3:		/* DataLoad */
-	    ro_dataload(block);
-	    break;
-	case 8:		/* PreQuit */
-	    ro_prequit(block);
-	    break;
-	case 0xf:	/* Lose clipboard. */
-	    if (block[5] & 4)
-	    {
-		clip_free_selection(&clip_star);
-		clip_star.owned = FALSE;
-	    }
-	    break;
-	case 0x10:	/* DataRequest (clip_star) */
-	    if (clip_star.owned)
-	    {
-		int rows;
-
-		/* Tell other program that we have the clipboard. */
-		block[0] = 52;
-		block[3] = block[2];	    /* Copy myref to yourref. */
-		block[4] = 1;		    /* DataSave message. */
-		/* Create an estimate for the size (larger or same as true
-		 * value) */
-		rows = clip_star.end.lnum - clip_star.start.lnum;
-		if (rows < 0)
-		    rows = -rows;
-		block[9] = (rows + 1) * Columns + 1; /* Add one for possible
-							final newline. */
-		block[10] = 0xfff;	    /* Clipboard is text. */
-		strcpy( ((char_u *) block) + 44, "VimClip");
-		swi(Wimp_SendMessage, 17, block, block[1]);
-	    }
-	    break;
-	case 0x400c1:	/* Mode change */
-	    changed_mode = TRUE;		/* Flag - update on next OpenWindow */
-	    if (zap_redraw)
-	    {
-		/* JK230798, re-initialise ZapRedraw stuff */
-		if (ro_zap_redraw_initialise() == FAIL)
-		    zap_redraw = FALSE;
-	    }
-	    break;
-	case 0x400c3:	/* TaskCloseDown */
-	    if (block[1] == child_handle)
-		child_handle = 0;
-	    break;
-    }
-}
-
-/*
- * Converts a scrollbar's window handle into a scrollbar pointer.
- * NULL on failure.
- */
-    scrollbar_T *
-ro_find_sbar(id)
-    int		id;
-{
-    win_T	*wp;
-
-    if (gui.bottom_sbar.id == id)
-	return &gui.bottom_sbar;
-    FOR_ALL_WINDOWS(wp)
-    {
-	if (wp->w_scrollbars[SBAR_LEFT].id == id)
-	    return &wp->w_scrollbars[SBAR_LEFT];
-	if (wp->w_scrollbars[SBAR_RIGHT].id == id)
-	    return &wp->w_scrollbars[SBAR_RIGHT];
-    }
-    return NULL;
-}
-
-    void
-scroll_to(line, sb)
-    int sb;	/* Scrollbar number */
-    int line;
-{
-    char_u code[8];
-
-    /* Don't put events in the input queue now. */
-    if (hold_gui_events)
-	return;
-
-    /* Send a scroll event:
-     *
-     * A scrollbar event is CSI (NOT K_SPECIAL), KS_VER_SCROLLBAR,
-     * KE_FILLER followed by:
-     * one byte representing the scrollbar number, and then four bytes
-     * representing a long_u which is the new value of the scrollbar.
-     */
-    code[0] = CSI;
-    code[1] = KS_VER_SCROLLBAR;
-    code[2] = KE_FILLER;
-    code[3] = sb;
-    code[4] = line >> 24;
-    code[5] = line >> 16;
-    code[6] = line >> 8;
-    code[7] = line;
-    add_to_input_buf(code, 8);
-}
-
-    void
-h_scroll_to(col)
-    int col;
-{
-    char_u code[8];
-
-    /* Don't put events in the input queue now. */
-    if (hold_gui_events)
-	return;
-
-    /* Send a scroll event:
-     *
-     * A scrollbar event is CSI (NOT K_SPECIAL)
-     *
-     * A horizontal scrollbar event is K_SPECIAL, KS_HOR_SCROLLBAR,
-     * KE_FILLER followed by four bytes representing a long_u which is the
-     * new value of the scrollbar.
-     */
-    code[0] = CSI;
-    code[1] = KS_HOR_SCROLLBAR;
-    code[2] = KE_FILLER;
-    code[4] = col >> 24;
-    code[5] = col >> 16;
-    code[6] = col >> 8;
-    code[7] = col;
-    add_to_input_buf(code, 8);
-}
-
-    void
-ro_scroll(block)
-    int		*block;
-{
-    scrollbar_T	*sb;
-    int		offset;
-    win_T	*wp;
-
-    /* Block is ready for Wimp_OpenWindow, and also contains:
-     *
-     * +32 = scroll X direction (-2 .. +2)
-     * +36 = scroll Y direction (-2 .. +2)
-     */
-
-    sb = ro_find_sbar(block[0]);
-    if (!sb)
-	return;		/* Window not found (error). */
-
-    wp = sb-> wp;
-
-    if (wp == NULL)
-    {
-	/* Horizontal bar. */
-	offset = block[8];
-	if (offset == -2)
-	    offset = (block[1] - block[3]) / gui.char_width;
-	else if (offset == 2)
-	    offset = (block[3] - block[1]) / gui.char_width;
-
-	block[5] += offset * gui.char_width;
-
-	gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
-
-	swi(Wimp_OpenWindow, 0, block);
-    }
-    else
-    {
-	offset = -block[9];
-	if (offset == -2)
-	    offset = -(wp -> w_height - 1);
-	else if (offset == 2)
-	    offset = wp -> w_height - 1;
-
-	/* Possibly we should reposition the scrollbar?
-	 * Vim seems to update the bar anyway...
-	 */
-	gui_drag_scrollbar(sb, offset - (block[6] / gui.char_height), FALSE);
-    }
-}
-
-/* Move a window by a given offset. Used to simulate the function of the
- * nested wimp.
- */
-    void
-ro_move_child(window, x, y, pos_wanted, pos_got)
-    int	window;
-    int x,y;		/* offset to move by */
-    int	pos_wanted, pos_got;
-{
-    int	block[10];
-
-    block[0] = window;
-    swi(Wimp_GetWindowState, 0, block);
-    block[1] += x;
-    block[2] += y;
-    block[3] += x;
-    block[4] += y;
-    if (pos_wanted == -1)
-	block[7] = -1;
-    else if (pos_wanted == -2)
-	block[7] = pos_got;
-    swi(Wimp_OpenWindow, 0, block);
-}
-
-/* Open the main window. Also updates scrollbars if we are not
- * using the nested Wimp.
- * If we have just changed mode then re-read all values.
- */
-    void
-ro_open_main(block)
-    int	    *block;
-{
-    int	    toggle_size;
-
-    /* Find out if the user clicked on the toggle size icon. */
-    block[20] = block[0];
-    swi(Wimp_GetWindowState, 0, block + 20);
-    toggle_size = block[28] & (1 << 19);
-
-    if (nested_wimp)
-    {
-	swi(Wimp_OpenWindow, 0, block);
-    }
-    else
-    {
-	int	old[10];
-	int	x_offset, y_offset;	    /* Move children same as parent. */
-	int	pos_wanted, pos_got;
-	int	left_bar  = gui.which_scrollbars[SBAR_LEFT];
-	int	right_bar = gui.which_scrollbars[SBAR_RIGHT];
-	win_T	*wp;
-
-	/* Three cases to think about:
-	 * 1) Move to top. Open each window at the top.
-	 * 2) Same stack position. Open each with same position.
-	 * 3) Open at bottom. Open children with parent's new position.
-	 */
-
-	old[0] = block[0];
-	swi(Wimp_GetWindowState, 0, old);
-	pos_wanted = block[7];
-	swi(Wimp_OpenWindow, 0, block);
-	/* Block updated by OpenWindow? I don't think so! */
-	swi(Wimp_GetWindowState, 0, block);
-	pos_got = block[7];
-
-	x_offset = block[1] - old[1];
-	y_offset = block[4] - old[4];
-	if (x_offset || y_offset || pos_wanted == -1 || pos_wanted == -2)
-	{
-	    /* If parent has moved, re-open all the child windows. */
-	    FOR_ALL_WINDOWS(wp)
-	    {
-		/* Reopen scrollbars for this window. */
-		if (left_bar)
-		    ro_move_child(wp -> w_scrollbars[SBAR_LEFT].id,
-				x_offset, y_offset,
-				pos_wanted, pos_got);
-		if (right_bar)
-		    ro_move_child(wp -> w_scrollbars[SBAR_RIGHT].id,
-				x_offset, y_offset,
-				pos_wanted, pos_got);
-	    }
-	}
-    }
-    if (changed_mode || toggle_size)
-    {
-	int	width, height;
-
-	if (changed_mode)
-	    ro_measure_tools();
-	block[0] = gui.window_handle;
-	swi(Wimp_GetWindowState, 0, block);
-
-	width = block[3] - block[1];
-	height = block[4] - block[2];
-	swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
-	gui_resize_shell(width, height);
-	changed_mode = FALSE;
-    }
-}
-
-    void
-ro_open_window(block)
-    int		*block;
-{
-    int		pos;
-    scrollbar_T *sb;
-
-    if (block[0] == gui.window_handle)
-	ro_open_main(block);
-    else
-    {
-	swi(Wimp_OpenWindow, 0, block);
-	if (block[0] != gui.window_handle)
-	{
-	    sb = ro_find_sbar(block[0]);
-	    if (sb)
-	    {
-		if (sb-> wp != NULL)
-		    gui_drag_scrollbar(sb, -block[6] / gui.char_height, FALSE);
-		else
-		    gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
-	    }
-	}
-    }
-}
-
-    void
-ro_menu_selection(block)
-    int		*block;
-{
-    int		*item = wimp_menu + 7;
-    vimmenu_T	*menu;
-    /* wimp_menu points to a wimp menu structure */
-
-    for (;;)
-    {
-	while (block[0]--)
-	    item += 6;
-	if (block[1] == -1)
-	    break;
-	item = ((int *) item[1]) + 7;
-	block++;
-    }
-    /* item points to the wimp menu item structure chosen */
-    menu = (vimmenu_T *) item[5];
-
-    swi(Wimp_GetPointerInfo, 0, block);
-    if (block[2] == 1)
-	/* Adjust used - keep menu open */
-	swi(Wimp_CreateMenu, 0, wimp_menu);
-
-    if (menu-> cb)
-	menu-> cb(menu);
-}
-
-    void
-ro_open_parent()
-{
-    int head;
-    char_u *i = curbuf-> b_ffname;
-    char_u  buffer[256];
-
-    head = 0;
-    for (; *i; i++)
-    {
-	if (*i == '.')
-	    head = i - curbuf-> b_ffname;
-    }
-
-    /* Append head chars to buffer */
-    if (head < 240 && curbuf-> b_ffname && head)
-    {
-	strcpy(buffer, "%filer_opendir ");
-	strncpy(buffer + 15, curbuf-> b_ffname, head);
-	buffer[15 + head] = '\0';
-	swi(OS_CLI, buffer);
-    }
-}
-
-    void
-process_event(event, block)
-    int event;
-    int *block;
-{
-    switch (event)
-    {
-	case 0:		/* Nothing - update drag state. */
-	    if (ro_dragging)
-		ro_continue_drag(block);
-	    break;
-	case 1:		/* Redraw window. */
-	    redraw_window(block);
-	    break;
-	case 2:		/* Open window. */
-	    ro_open_window(block);
-	    break;
-	case 3:		/* Close window. */
-	    swi(Wimp_GetPointerInfo, 0, block + 1);
-	    if (block[3] == 1)
-		ro_open_parent();
-	    else
-		if (ro_ok_to_quit())
-		    ro_quit();
-	    break;
-	case 6:		/* Mouse click. */
-	    ro_mouse(block);
-	    break;
-	case 7:		/* Finished drag. */
-	    ro_drag_finished(block);
-	    break;
-	case 8:		/* Key pressed. */
-	    ro_insert_key((char_u *) &block[6]);
-	    break;
-	case 9:
-	    ro_menu_selection(block);
-	    break;
-	case 10:	/* Scroll request. */
-	    ro_scroll(block);
-	    break;
-	case 11:	/* Lose caret. */
-	    if (block[0] == gui.window_handle)
-		gui_focus_change(FALSE);
-	    break;
-	case 12:	/* Gain caret. */
-	    if (block[0] == gui.window_handle)
-		gui_focus_change(TRUE);
-	    break;
-	case 17:	/* User message. */
-	case 18:	/* User message recorded. */
-	    ro_message(block);
-	    break;
-    }
-}
-
-/*
- * GUI input routine called by gui_wait_for_chars().  Waits for a character
- * from the keyboard.
- *  wtime == -1	    Wait forever.
- *  wtime == 0	    This should never happen.
- *  wtime > 0	    Wait wtime milliseconds for a character.
- * Returns OK if a character was found to be available within the given time,
- * or FAIL otherwise.
- */
-    int
-gui_mch_wait_for_chars(long wtime)
-{
-    int block[64];
-    int	reason;
-    int start_time = -1;
-    int ctime = wtime / 10;	/* delay in cs */
-
-    if (wtime != -1)
-    {
-	swi(OS_ReadMonotonicTime);
-	start_time = r0;
-    }
-
-    for (;;)
-    {
-	if (ro_dragging)
-	    reason = wimp_poll(0, block);	/* Always return immediately */
-	else if (wtime == -1)
-	    reason = wimp_poll(1, block);
-	else
-	    reason = wimp_pollidle(0, block, start_time + ctime);
-
-	process_event(reason, block);
-
-	if (input_available() || ro_return_early)
-	{
-	    ro_return_early = FALSE;
-	    return OK;	    /* There is something to process (key / menu event) */
-	}
-
-	if (wtime != -1)
-	{
-	    swi(OS_ReadMonotonicTime);
-	    if (r0 - start_time > ctime)
-		return FAIL;	/* We've been waiting too long - return failure */
-	}
-    }
-}
-
-/* Flush any output to the screen */
-    void
-gui_mch_flush(void)
-{
-}
-
-/*
- * Clear a rectangular region of the screen from text pos(row1, col1) to
- * (row2, col2) inclusive.
- */
-    void
-gui_mch_clear_block(int row1, int col1, int row2, int col2)
-{
-    swi(ColourTrans_ReturnGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
-    plot_rectangle(96 + 5, r0,
-			FILL_X(col1), -FILL_Y(row2 + 1),
-			FILL_X(col2 + 1), -FILL_Y(row1));
-}
-
-    void
-gui_mch_clear_all(void)
-{
-    if (redraw_block)
-    {
-	swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
-	swi(OS_WriteI + 16);
-    }
-    else
-    {
-	int block[44];
-	block[0] = gui.window_handle;
-	block[1] = 0;
-	block[2] = -gui.num_rows * gui.char_height;
-	block[3] = gui.num_cols * gui.char_width;
-	block[4] = 0;
-	swi(Wimp_UpdateWindow, 0, block);
-	while (r0)
-	{
-	    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
-	    swi(OS_WriteI + 16);
-	    swi(Wimp_GetRectangle, 0, block);
-	}
-    }
-}
-
-/*
- * Delete the given number of lines from the given row, scrolling up any
- * text further down within the scroll region.
- */
-    void
-gui_mch_delete_lines(int row, int num_lines)
-{
-    int top_from = -row - num_lines;
-    int bot_from = -gui.scroll_region_bot - 1;
-    int bot_to   = bot_from + num_lines;
-
-    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
-
-    /* Changed without checking! */
-    swi(Wimp_BlockCopy, gui.window_handle,
-			    gui.scroll_region_left * gui.char_width,
-			    bot_from * gui.char_height,
-			    (gui.scroll_region_right - gui.scroll_region_left
-							+ 1) * gui.char_width,
-			    top_from * gui.char_height,
-
-			    gui.scroll_region_left * gui.char_width,
-			    bot_to * gui.char_height);
-
-    gui_clear_block(gui.scroll_region_bot - num_lines + 1,
-						       gui.scroll_region_left,
-	gui.scroll_region_bot, gui.scroll_region_right);
-}
-
-/*
- * Insert the given number of lines before the given row, scrolling down any
- * following text within the scroll region.
- */
-    void
-gui_mch_insert_lines(int row, int num_lines)
-{
-    int top_from = -row;
-    int bot_to   = -gui.scroll_region_bot - 1;
-    int bot_from = bot_to + num_lines;
-
-    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
-
-    swi(Wimp_BlockCopy, gui.window_handle,
-			    gui.scroll_region_left * gui.char_width,
-			    bot_from * gui.char_height,
-			    (gui.scroll_region_right - gui.scroll_region_left
-							+ 1) * gui.char_width,
-			    top_from * gui.char_height,
-
-			    gui.scroll_region_left * gui.char_width,
-			    bot_to * gui.char_height);
-
-    gui_clear_block(row, gui.scroll_region_left,
-				row + num_lines - 1, gui.scroll_region_right);
-}
-
-/* Put selection in clipboard buffer.
- * Should we become the new owner?
- */
-    void
-clip_mch_request_selection(VimClipboard *cbd)
-{
-    int		block[64];	/* Will be used in Wimp_Poll. */
-    int		reason;
-    char_u	*buffer;
-    long_u	length;
-
-    block[0] = 48;			/* Size of block. */
-    block[3] = 0;			/* Orinial message. */
-    block[4] = 0x10;			/* Data request. */
-    block[5] = gui.window_handle;
-    block[6] = RO_LOAD_CLIPBOARD;	/* Internal handle. */
-    block[7] = block[8] = 0;		/* (x,y) not used. */
-    block[9] = 4;
-    block[10] = 0xfff;	    /* We want text files if possible, I think. */
-    block[11] = -1;	    /* End of list. */
-    swi(Wimp_SendMessage, 17, block, 0);    /* Broadcast request. */
-
-    /* OK, we've sent the request. Poll until we get a null poll (failure) or
-     * we load the clipboard.
-     * If we receive a DataSave event with icon handle = -2 then put it on the
-     * clipboard. RISC OS should ensure that key events will not be delivered
-     * until the clipboard operation completes (unless the owner starts idling
-     * - we can't wait forever!).
-     */
-    for (;;)
-    {
-	reason = wimp_poll(0, block);
-	if (reason == 0)
-	    return;	    /* Failed to get clipboard. */
-	if ((reason == 17 || reason == 18) &&
-		block[4] == 1 && block[6] == RO_LOAD_CLIPBOARD)
-	    break;	    /* Got it - stop waiting. */
-	process_event(reason, block);
-	if (ro_return_early)
-	    return;
-    }
-    /* Tell owner to save data in <Wimp$Scrap>. */
-    block[0] = 60;
-    block[3] = block[2];   /* Copy myref -> yourref */
-    block[4] = 2;	    /* DataSaveAck. */
-    block[9] = -1;	    /* Data is unsafe. */
-    strcpy( ((char_u *) block) + 44, "<Wimp$Scrap>");
-    swi(Wimp_SendMessage, 17, block, block[1]);
-
-    /* Wait again for reply. */
-    for (;;)
-    {
-	reason = wimp_poll(0, block);
-	if (reason == 0)
-	    return;	/* Other program has given up! */
-	if ((reason == 17 || reason == 18) && block[4] == 3 && block[6] == RO_LOAD_CLIPBOARD)
-	    break;	/* Clipboard data saved to <Wimp$Scrap> */
-	process_event(reason, block);
-	if (ro_return_early)
-	    return;
-    }
-
-    /* <Wimp$Scrap> contains clipboard - load it. */
-    if (xswi(OS_File, 17, "<Wimp$Scrap>") & v_flag)
-	return;		/* Error! */
-    if (r0 != 1 && r0 != 3)
-	return;
-    length = r4;
-
-    buffer = lalloc(length, TRUE);  /* Claim memory (and report errors). */
-    if (buffer == NULL)
-	return;
-
-    if (xswi(OS_File, 16, "<Wimp$Scrap>", buffer, 0) & v_flag)
-	return;
-
-    clip_yank_selection(MCHAR, buffer, length, cbd);
-
-    vim_free(buffer);
-
-    swi(OS_FSControl, 27, "<Wimp$Scrap>", 0, 0);    /* Delete temp file. */
-
-    block[4] = 4;		    /* Send DataLoadAck. */
-    block[3] = block[2];	    /* Copy myref -> yourref. */
-    swi(Wimp_SendMessage, 17, block, block[1]);
-}
-
-/* Not sure what this means under RISC OS. */
-    void
-clip_mch_lose_selection(VimClipboard *cbd)
-{
-}
-
-/* Tell everyone that we now own the clipboard.
- * Return OK if our claim is accepted (always, under RISC OS)
- */
-    int
-clip_mch_own_selection(VimClipboard *cbd)
-{
-    int block[6];
-    block[0] = 24;	/* Length of block.  */
-    block[3] = 0;	/* Original message. */
-    block[4] = 0xf;	/* ClaimEntity. */
-    block[5] = 0x4;	/* Claim clipboard only. */
-    swi(Wimp_SendMessage, 17, block, 0);
-    return OK;
-}
-
-/*
- * Send the current selection to the clipboard.  Do nothing for X because we
- * will fill in the selection only when requested by another app. Sounds good
- * for RISC OS too.
- */
-    void
-clip_mch_set_selection(VimClipboard *cbd)
-{
-    clip_get_selection(cbd);
-}
-
-/*
- * Make a menu either grey or not grey.
- */
-    void
-gui_mch_menu_grey(vimmenu_T *menu, int grey)
-{
-    menu-> greyed_out = grey;
-}
-
-/*
- * Make menu item hidden or not hidden
- */
-    void
-gui_mch_menu_hidden(vimmenu_T *menu, int hidden)
-{
-    menu-> hidden = hidden;
-}
-
-/*
- * This is called after setting all the menus to grey/hidden or not.
- */
-    void
-gui_mch_draw_menubar(void)
-{
-    swi(Wimp_CreateMenu, 0, -1);
-    if (wimp_menu != (int *) -1)
-    {
-	ro_remove_menu(wimp_menu);
-	wimp_menu = (int *) -1;
-    }
-}
-
-/* Add or remove a scrollbar. Note that this is only called when
- * the scrollbar state is changing.
- * The scroll bar window has already been created.
- * We can't do anything except remove the scroll bar
- * until we know what size to use.
- */
-    void
-gui_mch_enable_scrollbar(sb, flag)
-    scrollbar_T	*sb;
-    int		flag;
-{
-    if (!flag)
-	swi(Wimp_CloseWindow, 0, & (sb->id) );
-    return;
-}
-
-    void
-gui_mch_set_blinking(long waittime, long on, long off)
-{
-}
-
-/*
- * Stop the cursor blinking.  Show the cursor if it wasn't shown.
- */
-    void
-gui_mch_stop_blink(void)
-{
-}
-
-/*
- * Start the cursor blinking.  If it was already blinking, this restarts the
- * waiting time and shows the cursor.
- */
-    void
-gui_mch_start_blink(void)
-{
-}
-
-/*
- * Return the RGB value of a pixel as a long.
- */
-    long_u
-gui_mch_get_rgb(guicolor_T pixel)
-{
-    return (long_u)pixel;
-}
-
-    void
-gui_mch_set_text_area_pos(int x, int y, int w, int h)
-{
-}
-
-    void
-gui_mch_enable_menu(int flag)
-{
-}
-
-    void
-gui_mch_set_menu_pos(int x, int y, int w, int h)
-{
-}
-
-    void
-gui_mch_add_menu(vimmenu_T *menu, int idx)
-{
-}
-
-    void
-gui_mch_add_menu_item(vimmenu_T *menu, int idx)
-{
-}
-
-    void
-gui_mch_new_menu_colors(void)
-{
-}
-
-    void
-gui_mch_destroy_menu(vimmenu_T *menu)
-{
-}
-
-/* Size of buffer has changed.
- * Add one to max since gui.c subtracts one more than it should!
- */
-    void
-gui_mch_set_scrollbar_thumb(sb, val, size, max)
-    scrollbar_T	*sb;
-    long	val;
-    long	size;
-    long	max;
-{
-    int		block[10], width, height;
-
-    width = (max + 1) * gui.char_width;
-    height = (max + 1 + W_STATUS_HEIGHT(sb->wp)) * gui.char_height;
-
-    block[0] = block[3] = 0;
-    block[1] = -height + (1 << y_eigen_factor);
-    block[2] = width;
-
-    swi(Wimp_SetExtent, sb -> id, block);
-
-    block[0] = sb -> id;
-    swi(Wimp_GetWindowState, 0, block);
-    block[5] = val * gui.char_width;
-    block[6] = -val * gui.char_height;
-    swi(Wimp_OpenWindow, 0, block, 0x4b534154,
-			gui.window_handle,	/* Parent window handle. */
-			(CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
-			(CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
-			(CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
-			(CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
-			(CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
-			(CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
-			);
-}
-
-/* Set the position of the scrollbar within the editor
- * window. Note that, for vertical scrollbars, x and w
- * are ignored. For horizontal bars y and h are ignored.
- */
-    void
-gui_mch_set_scrollbar_pos(sb, x, y, w, h)
-    scrollbar_T *sb;
-    int		x;		/* Horizontal sb position */
-    int		y;		/* Top of scroll bar */
-    int		w;		/* Width */
-    int		h;		/* Height */
-{
-    int		block[24];
-    int		px1, py1;	/* Parent window min coords */
-    int		px2, py2;	/* Parent window max coords */
-
-    /* Find where the parent window is. */
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-    px1 = block[1];
-    py1 = block[2];
-    px2 = block[3];
-    py2 = block[4];
-
-    block[0] = sb -> id;
-
-    /* Find out how big the scroll window is at the moment. */
-    swi(Wimp_GetWindowInfo, 0, ((char_u *)block) + 1);
-
-    if (block[13] < w || block[12] > -h)
-    {
-	/* Current window is too small! */
-	if (block[12] > -h)
-	    block[12] = -h;
-	if (block[13] < w)
-	    block[13] = w;
-	swi(Wimp_SetExtent, block[0], block + 11);
-    }
-
-    /* This works better on the nested_wimp. */
-    if (sb-> wp)
-    {
-	/* This is a vertical scrollbar. */
-	block[1] = block[3] = px2 - gui.scrollbar_width + (1 << x_eigen_factor);
-	block[2] = 1 + py2 - (y + h) + (1 << y_eigen_factor);
-	block[4] = 1 + py2 - y;
-    }
-    else
-    {
-	/* This is a horizontal scrollbar. */
-	block[2] = block[4] = py1 + gui.scrollbar_height;
-	block[1] = px1;
-	block[3] = px2 - gui.scrollbar_width;
-    }
-
-    block[5] = 0;
-    block[6] = 0;
-    block[7] = -1;
-
-    swi(Wimp_OpenWindow, 0, block, 0x4b534154,
-	    gui.window_handle,	/* Parent window handle. */
-	    (CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
-	    (CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
-	    (CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
-	    (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
-	    (CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
-	    (CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
-       );
-}
-
-/* Create a window with no workarea to place inside editor window.
- * (what happens without the nested wimp?)
- * Data for scrollbar is invalid.
- */
-    void
-gui_mch_create_scrollbar(sb, orient)
-    scrollbar_T *sb;
-    int		orient;	/* orient is SBAR_HORIZ or SBAR_VERT */
-{
-    int bar[] =
-	{
-	    0,   0,		/* Visible area : min X,Y */
-	    100, 100,		/*		  max X,Y */
-	    0,   0,		/* Scroll offsets */
-	    -1,			/* Window in front */
-	    0x80800150 | (orient == SBAR_HORIZ ? (1 << 30) : (1 << 28)),
-	    0xff070207,		/* Colours */
-	    0x000c0103,		/* More colours */
-	    0, -0x4000,		/* Workarea extent */
-	    0x4000, 0,		/* max X,Y */
-	    0x00000000,		/* No title */
-	    0 << 12,		/* No workarea button type */
-	    1,			/* Wimp sprite area */
-	    0x00010001,		/* Minimum width, height */
-	    0, 0, 0,		/* Title data (none) */
-	    0			/* No icons */
-	};
-    swi(Wimp_CreateWindow, 0, bar);
-    sb -> id = r0;
-}
-
-#if defined(FEAT_WINDOWS) || defined(PROTO)
-    void
-gui_mch_destroy_scrollbar(scrollbar_T *sb)
-{
-    swi(Wimp_DeleteWindow, 0, & (sb->id));
-    sb -> id = -1;
-}
-#endif
-
-    void
-gui_mch_set_scrollbar_colors(scrollbar_T *sb)
-{
-    /* Always use default RO colour scheme. */
-}
-
-/*
- * Get current mouse coordinates in text window.
- * Note: (0,0) is the bottom left corner, positive y is UP.
- */
-    void
-gui_mch_getmouse(x, y)
-    int *x;
-    int *y;
-{
-    int left;
-    int top;
-    int block[10];
-
-    block[0] = gui.window_handle;
-    swi(Wimp_GetWindowState, 0, block);
-    left = block[1];
-    top = block[4];
-
-    swi(Wimp_GetPointerInfo, 0, block);
-    *x = block[0] - left;
-    *y = top - block[1];
-}
-
-/* MouseTo(x, y) */
-    void
-gui_mch_setmouse(x, y)
-    int		x;
-    int		y;
-{
-}
-
-    void
-gui_mch_toggle_tearoffs(enable)
-    int		enable;
-{
-    /* no tearoff menus */
-}
-
-/* Redraw a window's title.
- * For the nested wimp we use the new 'redraw-title-bar' reason code.
- * For older wimps we mark the area of the screen where the title bar
- * is as invalid.
- */
-    void
-ro_redraw_title(window)
-    int window;
-{
-    if (nested_wimp)
-    {
-	swi(Wimp_ForceRedraw, window, 0x4b534154, 3);
-    }
-    else
-    {
-	int block[10];
-	int miny;
-
-	block[0] = window;
-	swi(Wimp_GetWindowState, 0, block);
-	miny = block[4];
-	swi(Wimp_GetWindowOutline, 0, block);
-	swi(Wimp_ForceRedraw, -1,
-			block[1], miny,
-			block[3], block[4]);
-    }
-}
-
-/* Turn a vimmenu_T structure into a wimp menu structure.
- * -1 if resulting menu is empty.
- * Only the children and dname items in the root menu are used.
- */
-    int *
-ro_build_menu(menu)
-    vimmenu_T	*menu;
-{
-    int		*wimp_menu;
-    int		width = 4;
-    int		w;
-    int		size = 28;
-    vimmenu_T	*item;
-    int		*wimp_item;
-
-    /* Find out how big the menu is so we can allocate memory for it */
-    for (item = menu-> children; item; item = item-> next)
-    {
-	if (item-> hidden == FALSE && !menu_is_separator(item->name))
-	    size += 24;
-    }
-
-    if (size <= 28)
-	return (int *) -1;		/* No children - shouldn't happen */
-
-    wimp_menu = (int *) alloc(size);
-
-    wimp_menu[0] = (int) menu-> dname;
-    wimp_menu[1] = -1;
-    wimp_menu[2] = 0;
-    wimp_menu[3] = 0x00070207;
-    wimp_menu[5] = 44;
-    wimp_menu[6] = 0;
-
-    wimp_item = wimp_menu + 7;
-
-    for (item = menu-> children; item; item = item-> next)
-    {
-	if (menu_is_separator(item-> name))
-	{
-	    /* This menu entry is actually a separator. If it is not the first
-	     * menu entry then mark the previous menu item as needing a dotted
-	     * line after it.
-	     */
-	    if (wimp_item > wimp_menu + 7)
-		wimp_item[-6] |= 0x2;
-	}
-	else if (item-> hidden == FALSE)
-	{
-	    wimp_item[0] = 0;
-	    wimp_item[1] = item-> children ? (int) ro_build_menu(item) : -1;
-	    wimp_item[2] = 0x07009131 | (item-> greyed_out << 22);
-	    wimp_item[3] = (int) item-> dname;
-	    wimp_item[4] = -1;
-	    wimp_item[5] = (int) item;  /* Stuff the menu address in this unused space */
-
-	    w = strlen(item-> dname) + 1;
-	    if (w > width)
-		width = w;
-	    wimp_item += 6;
-	}
-    }
-
-    wimp_menu[4] = (width + 2) * 16;
-    wimp_menu[7]  |= 0x100;	    /* Menu title is indirected */
-    wimp_item[-6] |= 0x080;	    /* Last entry in menu */
-    return wimp_menu;
-}
-
-    static void
-ro_remove_menu(menu)
-    int	    *menu;
-{
-    int	    *item = menu + 7;
-
-    if (menu == NULL || menu == (int *) -1)
-	return;
-
-    for (;;)
-    {
-	if (item[1] != -1)
-	    ro_remove_menu((int *) item[1]);	/* Remove sub-menu */
-	if (item[0] & 0x80)
-	    break;			/* This was the last entry */
-	item += 6;
-    }
-    vim_free(menu);
-}
-
-    void
-gui_mch_show_popupmenu(menu)
-    vimmenu_T	*menu;
-{
-    int		block[10];
-
-    /* Remove the existing menu, if any */
-    if (wimp_menu != (int *) -1)
-    {
-	swi(Wimp_CreateMenu, 0, -1);
-	ro_remove_menu(wimp_menu);
-	wimp_menu = (int *) -1;
-    }
-
-    wimp_menu = ro_build_menu(menu);
-    if (wimp_menu != (int *) -1)
-    {
-	swi(Wimp_GetPointerInfo, 0, block);
-	swi(Wimp_CreateMenu, 0, wimp_menu, block[0] - 64, block[1] + 64);
-    }
-}
-
-/* Run a command using the TaskWindow module.
- * If SHELL_FILTER is set then output is not echoed to the screen,
- * If it is not set, then \r is not sent to the output file.
- */
-    int
-gui_mch_call_shell(cmd, options)
-    char_u  *cmd;
-    int	    options;	/* SHELL_FILTER if called by do_filter() */
-			/* SHELL_COOKED if term needs cooked mode */
-{
-    char_u  task_cmd[256];	/* Contains *TaskWindow command. */
-    int	    block[64];
-    int	    reason;
-    char_u  *out;
-    char_u  c;
-    int	    old_msg_col;
-    char_u  *out_redir;
-    int	    length;
-    FILE    *out_file = NULL;
-
-    out_redir = strstr(cmd, " > ");
-    if (out_redir == NULL)
-	length = strlen(cmd);	/* No redirection. */
-    else
-    {
-	length = out_redir - cmd;
-	out_file = fopen(out_redir + 3, "wb");
-	if (out_file == NULL)
-	    smsg("WARNING : Can't open file %s for writing\n", out_redir + 3);
-    }
-
-    if (length > 180)
-    {
-	if (out_file)
-	    fclose(out_file);
-	return FAIL;		/* Command too long. */
-    }
-
-    strcpy(task_cmd, "TaskWindow \"");
-    strncpy(task_cmd + 12, cmd, length);
-    sprintf(task_cmd + 12 + length,
-	    "\" -task &%08x -ctrl -quit -name \"Vim command\"",
-	    task_handle);
-
-    if (options & SHELL_COOKED)
-	settmode(TMODE_COOK);
-
-    if (xswi(Wimp_StartTask, task_cmd) & v_flag)
-    {
-	/* Failed to even start a new task (out of memory?) */
-	settmode(TMODE_RAW);
-	if (out_file)
-	    fclose(out_file);
-	return FAIL;
-    }
-
-    /* Wait for the child process to initialise. */
-    child_handle = 0;
-    while (!child_handle)
-    {
-	reason = wimp_poll(0, block);
-	if ((reason == 17 || reason == 18) && block[4] == 0x808c2)
-	    child_handle = block[1];
-	else
-	    process_event(reason, block);
-    }
-
-    /* Block until finished */
-    while (child_handle)
-    {
-	reason = wimp_poll(1, block);
-	if (reason == 3 || (reason == 8 && block[6] == 3))
-	{
-	    /* Close window request or CTRL-C - kill child task. */
-	    block[0] = 20;
-	    block[3] = 0;
-	    block[4] = 0x808c4;	    /* Morite */
-	    swi(Wimp_SendMessage, 17, block, child_handle);
-	    MSG_PUTS(_("\nSending message to terminate child process.\n"));
-	    continue;
-	}
-	else if (reason == 8)
-	{
-	    block[0] = 28;
-	    block[3] = 0;
-	    block[4] = 0x808c0;	    /* Input */
-	    block[5] = 1;
-	    /* Block[6] is OK as it is! */
-	    swi(Wimp_SendMessage, 17, block, child_handle);
-	    continue;
-	}
-	else if (reason == 17 || reason == 18)
-	{
-	    if (block[4] == 0x808c1)
-	    {
-		/* Ack message. */
-		block[3] = block[2];
-		swi(Wimp_SendMessage, 19, block, block[1]);
-		out = (char_u *)block + 24;
-		old_msg_col = msg_col;
-		while (block[5]--)
-		{
-		    c = *out++;
-		    if (out_file && (c != '\r' || (options & SHELL_FILTER)))
-			fputc(c, out_file);
-		    if ((options & SHELL_FILTER) == 0)
-		    {
-			if (c == 127)
-			    msg_puts("\b \b");
-			else if (c > 31)
-			    msg_putchar(c);
-			else if (c == 10)
-			{
-			    lines_left = 8;	/* Don't do More prompt! */
-			    msg_putchar(10);
-			}
-		    }
-		}
-		/* Flush output to the screen. */
-		windgoto(msg_row, msg_col);
-		out_flush();
-		continue;
-	    }
-	}
-	process_event(reason, block);
-    }
-    msg_putchar('\n');
-    settmode(TMODE_RAW);
-    if (out_file)
-	fclose(out_file);
-    return OK;
-}
-
-/* Like strsave(), but stops at any control char */
-    char_u *
-wimp_strsave(str)
-    char    *str;
-{
-    int	    strlen = 0;
-    char_u  *retval;
-    while (str[strlen] > 31)
-	strlen++;
-    retval = alloc(strlen + 1);
-    if (retval)
-    {
-	memcpy(retval, str, strlen);
-	retval[strlen] = '\0';
-    }
-    return retval;
-}
-
-/* If we are saving then pop up a standard RISC OS save box.
- * Otherwise, open a directory viewer on the given directory (and return NULL)
- * The string we return will be freed later.
- */
-    char_u *
-gui_mch_browse(saving, title, dflt, ext, initdir, filter)
-    int		saving;		/* write action */
-    char_u	*title;		/* title for the window */
-    char_u	*dflt;		/* default file name */
-    char_u	*ext;		/* extension added */
-    char_u	*initdir;	/* initial directory, NULL for current dir */
-    char_u	*filter;	/* file name filter */
-{
-    char command[256];
-    int length;
-
-    if (saving)
-    {
-	int	block[64];
-	int	reason;
-	int	done_save = FALSE;
-	char_u	*retval = NULL;
-	char_u  *sprname;
-	char_u	*fname;
-	int	dragging_icon = FALSE;
-	int	filetype;
-
-	if (!dflt)
-	    dflt = "TextFile";
-
-	block[0] = save_window;
-	block[1] = 0;
-	swi(Wimp_GetIconState, 0, block);
-	sprname = ((char_u *) block[7]);
-	block[1] = 1;
-	swi(Wimp_GetIconState, 0, block);
-	fname = ((char *) block[7]);
-	strncpy(fname, dflt, 255);
-
-	if (xswi(OS_FSControl, 31, curbuf->b_p_oft) & v_flag)
-	{
-	    filetype = 0xfff;
-	    strcpy(sprname + 5, "xxx");
-	}
-	else
-	{
-	    filetype = r2;
-	    sprintf(sprname + 5, "%03x", filetype);
-	}
-
-	/* Open the save box */
-
-	swi(Wimp_GetPointerInfo, 0, block);
-	swi(Wimp_CreateMenu, 0, save_window, block[0] - 64, block[1] + 64);
-	swi(Wimp_SetCaretPosition, save_window, 1, 0, 0, -1, -1);
-
-	while (!done_save)
-	{
-	    reason = wimp_poll(1, block);
-	    switch (reason)
-	    {
-		case 1:
-		    redraw_window(block);
-		    break;
-		case 2:
-		    if (block[0] == save_window)
-			swi(Wimp_OpenWindow, 0, block);
-		    else
-			ro_open_window(block);
-		    break;
-		case 3:
-		    done_save = TRUE;
-		    break;
-		case 6:
-		    if (block[3] != save_window)
-			done_save = TRUE;
-		    else
-		    {
-			int drag_box[4];
-			int min_x, max_y;
-
-			switch (block[4])
-			{
-			    case    0: /* Start drag */
-				block[0] = save_window;
-				swi(Wimp_GetWindowState, 0, block);
-				min_x = block[1];
-				max_y = block[4];
-				block[1] = 0;
-				swi(Wimp_GetIconState, 0, block);
-				drag_box[0] = block[2] + min_x;
-				drag_box[1] = block[3] + max_y;
-				drag_box[2] = block[4] + min_x;
-				drag_box[3] = block[5] + max_y;
-
-				swi(DragASprite_Start,
-					0x45,
-					1,
-					sprname,
-					drag_box);
-				dragging_icon = TRUE;
-				break;
-			    case    2: /* OK */
-				retval = wimp_strsave(fname);
-				done_save = TRUE;
-				break;
-			    case    3: /* Cancel */
-				done_save = TRUE;
-				break;
-			}
-		    }
-		    break;
-		case 7:
-		    if (dragging_icon)
-		    {
-			int len = 0;
-
-			dragging_icon = FALSE;
-			swi(Wimp_GetPointerInfo, 0, block);
-			block[5] = block[3];
-			block[6] = block[4];
-			block[7] = block[0];
-			block[8] = block[1];
-			block[9] = 0;		/* Don't know the size */
-			block[10] = filetype;
-
-			while (fname[len] > 31)
-			{
-			    if (fname[len] == '.')
-			    {
-				fname += len + 1;
-				len = 0;
-			    }
-			    else
-				len++;
-			}
-			if (len > 211)
-			    len = 211;
-
-			memcpy(((char_u *) block) + 44, fname, len);
-			((char_u *)block)[44 + len] = '\0';
-
-			block[0] = (len + 48) & 0xfc;
-			block[3] = 0;
-			block[4] = 1;	    /* DataSave */
-
-			swi(Wimp_SendMessage, 17, block, block[5], block[6]);
-		    }
-		    else
-			ro_drag_finished(block);
-		    break;
-		case 8:
-		    if (block[6] == 13)
-		    {
-			retval = wimp_strsave(fname);
-			done_save = TRUE;
-		    }
-		    else if (block[6] == 0x1b)
-			done_save = TRUE;
-		    else
-			swi(Wimp_ProcessKey, block[6]);
-		    break;
-		case 17:
-		case 18:
-		    if (block[4] == 2 && block[9] != -1)
-		    {
-			/* DataSaveAck from dragging icon. */
-			retval = wimp_strsave(((char_u *) block) + 44);
-			done_save = TRUE;
-		    }
-		    else if (block[4] == 0x400c9)
-		    {
-			/* MenusDeleted */
-			done_save = TRUE;
-		    }
-		    else
-			ro_message(block);
-		    break;
-	    }
-	}
-	block[0] = save_window;
-	swi(Wimp_CloseWindow, 0, block);
-	swi(Wimp_GetCaretPosition, 0, block);
-	if (block[0] == -1)
-	    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
-
-	return retval;
-    }
-    else if (initdir)
-    {
-	/* Open a directory viewer */
-	length = strlen(initdir);
-
-	if (length > 240)
-	    return NULL;	/* Path too long! */
-
-	length = sprintf(command, "Filer_OpenDir %s", initdir);
-	while (command[length - 1] == '.')
-	    length--;
-	command[length] = '\0';
-	swi(OS_CLI, command);
-    }
-    return NULL;
-}
diff -Naur vim73.orig/src/gui_riscos.h vim73/src/gui_riscos.h
--- vim73.orig/src/gui_riscos.h	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/gui_riscos.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,32 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved	by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- */
-
-#define FEAT_BROWSE
-
-#define TASK 0x4b534154
-
-/* Nested wimp flags: */
-#define CHILD_FIX_TO_WORKAREA	0
-#define CHILD_FIX_TO_LEFT	1
-#define CHILD_FIX_TO_BOTTOM	1
-#define CHILD_FIX_TO_RIGHT	2
-#define CHILD_FIX_TO_TOP	2
-
-#define CHILD_SELF_SCROLL	0
-#define CHILD_PARENT_SCROLL	1
-
-#define CHILD_LEFT		16
-#define CHILD_BOTTOM		18
-#define CHILD_RIGHT		20
-#define CHILD_TOP		22
-#define CHILD_SCROLL_X		24
-#define CHILD_SCROLL_Y		26
-
-int wimp_poll(int mask, int *block);
-int wimp_poll_idle(int mask, int *block, int end_time);
-void ro_open_main(int *block);
diff -Naur vim73.orig/src/gui_w16.c vim73/src/gui_w16.c
--- vim73.orig/src/gui_w16.c	2010-07-18 13:03:38.000000000 +0000
+++ vim73/src/gui_w16.c	2013-08-04 19:09:10.320611398 +0000
@@ -21,6 +21,12 @@
  *
  */
 
+/* Win16 doesn't use the "W" methods. */
+#define pDispatchMessage DispatchMessage
+#define pGetMessage GetMessage
+#define pIsDialogMessage IsDialogMessage
+#define pPeekMessage PeekMessage
+
 /*
  * Include the common stuff for MS-Windows GUI.
  */
@@ -505,7 +511,7 @@
     workarea_rect.right = GetSystemMetrics(SM_CXSCREEN);
     workarea_rect.bottom = GetSystemMetrics(SM_CYFULLSCREEN);
 
-    /* get current posision of our window */
+    /* get current position of our window */
     wndpl.length = sizeof(WINDOWPLACEMENT);
     GetWindowPlacement(s_hwnd, &wndpl);
     if (wndpl.showCmd == SW_SHOWNORMAL)
@@ -1098,7 +1104,8 @@
     char_u	*message,
     char_u	*buttons,
     int		 dfltbutton,
-    char_u	*textfield)
+    char_u	*textfield,
+    int		ex_cmd)
 {
     FARPROC	dp;
     LPWORD	p, pnumitems;
@@ -1154,7 +1161,7 @@
 	return -1;
 
     /*
-     * make a copy of 'buttons' to fiddle with it.  complier grizzles because
+     * make a copy of 'buttons' to fiddle with it.  compiler grizzles because
      * vim_strsave() doesn't take a const arg (why not?), so cast away the
      * const.
      */
@@ -1514,7 +1521,12 @@
 
 
 #if defined(FEAT_TOOLBAR) || defined(PROTO)
-#include "gui_w3~1.h"
+
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include "gui_w3~1.h"
+#endif
+
 /*
  * Create the toolbar, initially unpopulated.
  *  (just like the menu, there are no defaults, it's all
diff -Naur vim73.orig/src/gui_w32.c vim73/src/gui_w32.c
--- vim73.orig/src/gui_w32.c	2010-08-08 13:05:26.000000000 +0000
+++ vim73/src/gui_w32.c	2013-08-04 19:09:10.323944721 +0000
@@ -198,11 +198,17 @@
 static UINT_PTR	    BevalTimerId = 0;
 static DWORD	    LastActivity = 0;
 
+
+/* cproto fails on missing include files */
+#ifndef PROTO
+
 /*
  * excerpts from headers since this may not be presented
  * in the extremely old compilers
  */
-#include <pshpack1.h>
+# include <pshpack1.h>
+
+#endif
 
 typedef struct _DllVersionInfo
 {
@@ -213,7 +219,9 @@
     DWORD dwPlatformID;
 } DLLVERSIONINFO;
 
-#include <poppack.h>
+#ifndef PROTO
+# include <poppack.h>
+#endif
 
 typedef struct tagTOOLINFOA_NEW
 {
@@ -289,13 +297,13 @@
 
 #ifdef FEAT_MENU
 static UINT	s_menu_id = 100;
+#endif
 
 /*
  * Use the system font for dialogs and tear-off menus.  Remove this line to
  * use DLG_FONT_NAME.
  */
-# define USE_SYSMENU_FONT
-#endif
+#define USE_SYSMENU_FONT
 
 #define VIM_NAME	"vim"
 #define VIM_CLASS	"Vim"
@@ -798,7 +806,7 @@
 		if (pt.y < rect.top)
 		{
 		    show_tabline_popup_menu();
-		    return 0;
+		    return 0L;
 		}
 	    }
 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
@@ -828,7 +836,10 @@
 
     case WM_ENDSESSION:
 	if (wParam)	/* system only really goes down when wParam is TRUE */
+	{
 	    _OnEndSession();
+	    return 0L;
+	}
 	break;
 
     case WM_CHAR:
@@ -866,7 +877,7 @@
 	 * are received, mouse pointer remains hidden. */
 	return MyWindowProc(hwnd, uMsg, wParam, lParam);
 #else
-	return 0;
+	return 0L;
 #endif
 
     case WM_SIZING:	/* HANDLE_MSG doesn't seem to handle this one */
@@ -874,7 +885,7 @@
 
     case WM_MOUSEWHEEL:
 	_OnMouseWheel(hwnd, HIWORD(wParam));
-	break;
+	return 0L;
 
 	/* Notification for change in SystemParametersInfo() */
     case WM_SETTINGCHANGE:
@@ -987,13 +998,19 @@
 	    case TCN_SELCHANGE:
 		if (gui_mch_showing_tabline()
 				  && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
+		{
 		    send_tabline_event(TabCtrl_GetCurSel(s_tabhwnd) + 1);
+		    return 0L;
+		}
 		break;
 
 	    case NM_RCLICK:
 		if (gui_mch_showing_tabline()
 			&& ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
+		{
 		    show_tabline_popup_menu();
+		    return 0L;
+		}
 		break;
 # endif
 	    default:
@@ -1037,6 +1054,7 @@
 		out_flush();
 		did_menu_tip = TRUE;
 	    }
+	    return 0L;
 	}
 	break;
 #endif
@@ -1079,18 +1097,19 @@
     case WM_IME_NOTIFY:
 	if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
-	break;
+	return 1L;
+
     case WM_IME_COMPOSITION:
 	if (!_OnImeComposition(hwnd, wParam, lParam))
 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
-	break;
+	return 1L;
 #endif
 
     default:
 	if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0)
 	{   /* handle MSH_MOUSEWHEEL messages for Intellimouse */
 	    _OnMouseWheel(hwnd, HIWORD(wParam));
-	    break;
+	    return 0L;
 	}
 #ifdef MSWIN_FIND_REPLACE
 	else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
@@ -1101,7 +1120,7 @@
 	return MyWindowProc(hwnd, uMsg, wParam, lParam);
     }
 
-    return 1;
+    return DefWindowProc(hwnd, uMsg, wParam, lParam);
 }
 
 /*
@@ -1239,7 +1258,7 @@
 
 #ifdef FEAT_NETBEANS_INTG
     {
-	/* stolen from gui_x11.x */
+	/* stolen from gui_x11.c */
 	int arg;
 
 	for (arg = 1; arg < *argc; arg++)
@@ -1260,7 +1279,7 @@
 
     /* try and load the user32.dll library and get the entry points for
      * multi-monitor-support. */
-    if ((user32_lib = LoadLibrary("User32.dll")) != NULL)
+    if ((user32_lib = vimLoadLib("User32.dll")) != NULL)
     {
 	pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib,
 							 "MonitorFromWindow");
@@ -1270,6 +1289,25 @@
 	pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib,
 							  "GetMonitorInfoA");
     }
+
+#ifdef FEAT_MBYTE
+    /* If the OS is Windows NT, use wide functions;
+     * this enables common dialogs input unicode from IME. */
+    if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
+    {
+	pDispatchMessage = DispatchMessageW;
+	pGetMessage = GetMessageW;
+	pIsDialogMessage = IsDialogMessageW;
+	pPeekMessage = PeekMessageW;
+    }
+    else
+    {
+	pDispatchMessage = DispatchMessageA;
+	pGetMessage = GetMessageA;
+	pIsDialogMessage = IsDialogMessageA;
+	pPeekMessage = PeekMessageA;
+    }
+#endif
 }
 
 /*
@@ -1379,7 +1417,8 @@
 	    s_hwnd = CreateWindowEx(
 		WS_EX_MDICHILD,
 		szVimWndClass, "Vim MSWindows GUI",
-		WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS | 0xC000,
+		WS_OVERLAPPEDWINDOW | WS_CHILD
+				 | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0xC000,
 		gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
 		gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
 		100,				/* Any value will do */
@@ -1410,7 +1449,8 @@
 	 * titlebar, it will be reparented below. */
 	s_hwnd = CreateWindow(
 		szVimWndClass, "Vim MSWindows GUI",
-		win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP,
+		(win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP)
+					  | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
 		gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
 		gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
 		100,				/* Any value will do */
@@ -1573,6 +1613,15 @@
 # endif
 #endif
 
+#ifdef FEAT_EVAL
+# ifndef HandleToLong
+/* HandleToLong() only exists in compilers that can do 64 bit builds */
+#  define HandleToLong(h) ((long)(h))
+# endif
+    /* set the v:windowid variable */
+    set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
+#endif
+
 theend:
     /* Display any pending error messages */
     display_errors();
@@ -1620,16 +1669,14 @@
 {
     RECT	workarea_rect;
     int		win_width, win_height;
-    int		win_xpos, win_ypos;
     WINDOWPLACEMENT wndpl;
-    int		workarea_left;
 
     /* Try to keep window completely on screen. */
     /* Get position of the screen work area.  This is the part that is not
      * used by the taskbar or appbars. */
     get_work_area(&workarea_rect);
 
-    /* Get current posision of our window.  Note that the .left and .top are
+    /* Get current position of our window.  Note that the .left and .top are
      * relative to the work area.  */
     wndpl.length = sizeof(WINDOWPLACEMENT);
     GetWindowPlacement(s_hwnd, &wndpl);
@@ -1644,9 +1691,6 @@
 	GetWindowPlacement(s_hwnd, &wndpl);
     }
 
-    win_xpos = wndpl.rcNormalPosition.left;
-    win_ypos = wndpl.rcNormalPosition.top;
-
     /* compute the size of the outside of the window */
     win_width = width + GetSystemMetrics(SM_CXFRAME) * 2;
     win_height = height + GetSystemMetrics(SM_CYFRAME) * 2
@@ -1656,36 +1700,32 @@
 #endif
 			;
 
-    /* There is an inconsistency when using two monitors and Vim is on the
-     * second (right) one: win_xpos will be the offset from the workarea of
-     * the left monitor.  While with one monitor it's the offset from the
-     * workarea (including a possible taskbar on the left).  Detect the second
-     * monitor by checking for the left offset to be quite big. */
-    if (workarea_rect.left > 300)
-	workarea_left = 0;
-    else
-	workarea_left = workarea_rect.left;
+    /* The following should take care of keeping Vim on the same monitor, no
+     * matter if the secondary monitor is left or right of the primary
+     * monitor. */
+    wndpl.rcNormalPosition.right = wndpl.rcNormalPosition.left + win_width;
+    wndpl.rcNormalPosition.bottom = wndpl.rcNormalPosition.top + win_height;
 
-    /* If the window is going off the screen, move it on to the screen.
-     * win_xpos and win_ypos are relative to the workarea. */
+    /* If the window is going off the screen, move it on to the screen. */
     if ((direction & RESIZE_HOR)
-	    && workarea_left + win_xpos + win_width > workarea_rect.right)
-	win_xpos = workarea_rect.right - win_width - workarea_left;
+	    && wndpl.rcNormalPosition.right > workarea_rect.right)
+	OffsetRect(&wndpl.rcNormalPosition,
+		workarea_rect.right - wndpl.rcNormalPosition.right, 0);
 
-    if ((direction & RESIZE_HOR) && win_xpos < 0)
-	win_xpos = 0;
+    if ((direction & RESIZE_HOR)
+	    && wndpl.rcNormalPosition.left < workarea_rect.left)
+	OffsetRect(&wndpl.rcNormalPosition,
+		workarea_rect.left - wndpl.rcNormalPosition.left, 0);
 
     if ((direction & RESIZE_VERT)
-	  && workarea_rect.top + win_ypos + win_height > workarea_rect.bottom)
-	win_ypos = workarea_rect.bottom - win_height - workarea_rect.top;
-
-    if ((direction & RESIZE_VERT) && win_ypos < 0)
-	win_ypos = 0;
+	    && wndpl.rcNormalPosition.bottom > workarea_rect.bottom)
+	OffsetRect(&wndpl.rcNormalPosition,
+		0, workarea_rect.bottom - wndpl.rcNormalPosition.bottom);
 
-    wndpl.rcNormalPosition.left = win_xpos;
-    wndpl.rcNormalPosition.right = win_xpos + win_width;
-    wndpl.rcNormalPosition.top = win_ypos;
-    wndpl.rcNormalPosition.bottom = win_ypos + win_height;
+    if ((direction & RESIZE_VERT)
+	    && wndpl.rcNormalPosition.top < workarea_rect.top)
+	OffsetRect(&wndpl.rcNormalPosition,
+		0, workarea_rect.top - wndpl.rcNormalPosition.top);
 
     /* set window position - we should use SetWindowPlacement rather than
      * SetWindowPos as the MSDN docs say the coord systems returned by
@@ -3000,7 +3040,8 @@
     char_u	*message,
     char_u	*buttons,
     int		 dfltbutton,
-    char_u	*textfield)
+    char_u	*textfield,
+    int		ex_cmd)
 {
     WORD	*p, *pdlgtemplate, *pnumitems;
     DWORD	*dwp;
@@ -3059,7 +3100,7 @@
 	return -1;
 
     /*
-     * make a copy of 'buttons' to fiddle with it.  complier grizzles because
+     * make a copy of 'buttons' to fiddle with it.  compiler grizzles because
      * vim_strsave() doesn't take a const arg (why not?), so cast away the
      * const.
      */
@@ -3175,7 +3216,7 @@
 	    if (l == 1 && vim_iswhite(*pend)
 					&& textWidth > maxDialogWidth * 3 / 4)
 		last_white = pend;
-	    textWidth += GetTextWidth(hdc, pend, l);
+	    textWidth += GetTextWidthEnc(hdc, pend, l);
 	    if (textWidth >= maxDialogWidth)
 	    {
 		/* Line will wrap. */
@@ -3241,7 +3282,7 @@
 	    pend = vim_strchr(pstart, DLG_BUTTON_SEP);
 	    if (pend == NULL)
 		pend = pstart + STRLEN(pstart);	// Last button name.
-	    textWidth = GetTextWidth(hdc, pstart, (int)(pend - pstart));
+	    textWidth = GetTextWidthEnc(hdc, pstart, (int)(pend - pstart));
 	    if (textWidth < minButtonWidth)
 		textWidth = minButtonWidth;
 	    textWidth += dlgPaddingX;	    /* Padding within button */
@@ -3266,7 +3307,7 @@
 	    pend = vim_strchr(pstart, DLG_BUTTON_SEP);
 	    if (pend == NULL)
 		pend = pstart + STRLEN(pstart);	// Last button name.
-	    textWidth = GetTextWidth(hdc, pstart, (int)(pend - pstart));
+	    textWidth = GetTextWidthEnc(hdc, pstart, (int)(pend - pstart));
 	    textWidth += dlgPaddingX;		/* Padding within button */
 	    textWidth += DLG_VERT_PADDING_X * 2; /* Padding around button */
 	    if (textWidth > dlgwidth)
@@ -4122,7 +4163,11 @@
 	 * didn't exist or wasn't specified, try the menu name
 	 */
 	if (hbitmap == NULL
-		&& (gui_find_bitmap(menu->name, fname, "bmp") == OK))
+		&& (gui_find_bitmap(
+#ifdef FEAT_MULTI_LANG
+			    menu->en_dname != NULL ? menu->en_dname :
+#endif
+					menu->dname, fname, "bmp") == OK))
 	    hbitmap = LoadImage(
 		    NULL,
 		    fname,
@@ -4188,7 +4233,7 @@
     static void
 dyn_imm_load(void)
 {
-    hLibImm = LoadLibrary("imm32.dll");
+    hLibImm = vimLoadLib("imm32.dll");
     if (hLibImm == NULL)
 	return;
 
@@ -4350,7 +4395,7 @@
     }
 
     sign.hImage = NULL;
-    ext = signfile + STRLEN(signfile) - 4; /* get extention */
+    ext = signfile + STRLEN(signfile) - 4; /* get extension */
     if (ext > signfile)
     {
 	int do_load = 1;
diff -Naur vim73.orig/src/gui_w48.c vim73/src/gui_w48.c
--- vim73.orig/src/gui_w48.c	2010-07-27 19:46:04.000000000 +0000
+++ vim73/src/gui_w48.c	2013-08-04 19:09:10.330611368 +0000
@@ -25,6 +25,10 @@
 #ifdef DEBUG
 # include <tchar.h>
 #endif
+
+/* cproto fails on missing include files */
+#ifndef PROTO
+
 #ifndef __MINGW32__
 # include <shellapi.h>
 #endif
@@ -44,6 +48,8 @@
 # include "glbl_ime.h"
 #endif
 
+#endif /* PROTO */
+
 #ifdef FEAT_MENU
 # define MENUHINTS		/* show menu hints in command line */
 #endif
@@ -317,10 +323,15 @@
 
 /*
  * For control IME.
+ *
+ * These LOGFONT used for IME.
  */
 #ifdef FEAT_MBYTE
 # ifdef USE_IM_CONTROL
+/* holds LOGFONT for 'guifontwide' if available, otherwise 'guifont' */
 static LOGFONT norm_logfont;
+/* holds LOGFONT for 'guifont' always. */
+static LOGFONT sub_logfont;
 # endif
 #endif
 
@@ -328,6 +339,10 @@
 static LRESULT _OnImeNotify(HWND hWnd, DWORD dwCommand, DWORD dwData);
 #endif
 
+#if defined(FEAT_MBYTE) && defined(WIN3264)
+static char_u *convert_filter(char_u *s);
+#endif
+
 #ifdef DEBUG_PRINT_ERROR
 /*
  * Print out the last Windows error message
@@ -390,7 +405,7 @@
     KillTimer(NULL, idEvent);
 
     /* Eat spurious WM_TIMER messages */
-    while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+    while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
 	;
 
     if (blink_state == BLINK_ON)
@@ -418,7 +433,7 @@
     {
 	KillTimer(NULL, blink_timer);
 	/* Eat spurious WM_TIMER messages */
-	while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+	while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
 	    ;
 	blink_timer = 0;
     }
@@ -476,7 +491,7 @@
     s_timed_out = TRUE;
 
     /* Eat spurious WM_TIMER messages */
-    while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+    while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
 	;
     if (idEvent == s_wait_timer)
 	s_wait_timer = 0;
@@ -1207,7 +1222,7 @@
 
     /* When side scroll bar is unshown, the size of window will change.
      * then, the text area move left or right. thus client rect should be
-     * forcely redraw. (Yasuhiro Matsumoto) */
+     * forcedly redrawn. (Yasuhiro Matsumoto) */
     if (oldx != x || oldy != y)
     {
 	InvalidateRect(s_hwnd, NULL, FALSE);
@@ -1411,12 +1426,12 @@
     static guicolor_tTable table[] =
     {
 	{"Black",		RGB(0x00, 0x00, 0x00)},
-	{"DarkGray",		RGB(0x80, 0x80, 0x80)},
-	{"DarkGrey",		RGB(0x80, 0x80, 0x80)},
+	{"DarkGray",		RGB(0xA9, 0xA9, 0xA9)},
+	{"DarkGrey",		RGB(0xA9, 0xA9, 0xA9)},
 	{"Gray",		RGB(0xC0, 0xC0, 0xC0)},
 	{"Grey",		RGB(0xC0, 0xC0, 0xC0)},
-	{"LightGray",		RGB(0xE0, 0xE0, 0xE0)},
-	{"LightGrey",		RGB(0xE0, 0xE0, 0xE0)},
+	{"LightGray",		RGB(0xD3, 0xD3, 0xD3)},
+	{"LightGrey",		RGB(0xD3, 0xD3, 0xD3)},
 	{"Gray10",		RGB(0x1A, 0x1A, 0x1A)},
 	{"Grey10",		RGB(0x1A, 0x1A, 0x1A)},
 	{"Gray20",		RGB(0x33, 0x33, 0x33)},
@@ -1441,19 +1456,19 @@
 	{"LightRed",		RGB(0xFF, 0xA0, 0xA0)},
 	{"DarkBlue",		RGB(0x00, 0x00, 0x80)},
 	{"Blue",		RGB(0x00, 0x00, 0xFF)},
-	{"LightBlue",		RGB(0xA0, 0xA0, 0xFF)},
+	{"LightBlue",		RGB(0xAD, 0xD8, 0xE6)},
 	{"DarkGreen",		RGB(0x00, 0x80, 0x00)},
 	{"Green",		RGB(0x00, 0xFF, 0x00)},
-	{"LightGreen",		RGB(0xA0, 0xFF, 0xA0)},
+	{"LightGreen",		RGB(0x90, 0xEE, 0x90)},
 	{"DarkCyan",		RGB(0x00, 0x80, 0x80)},
 	{"Cyan",		RGB(0x00, 0xFF, 0xFF)},
-	{"LightCyan",		RGB(0xA0, 0xFF, 0xFF)},
+	{"LightCyan",		RGB(0xE0, 0xFF, 0xFF)},
 	{"DarkMagenta",		RGB(0x80, 0x00, 0x80)},
 	{"Magenta",		RGB(0xFF, 0x00, 0xFF)},
 	{"LightMagenta",	RGB(0xFF, 0xA0, 0xFF)},
 	{"Brown",		RGB(0x80, 0x40, 0x40)},
 	{"Yellow",		RGB(0xFF, 0xFF, 0x00)},
-	{"LightYellow",		RGB(0xFF, 0xFF, 0xA0)},
+	{"LightYellow",		RGB(0xFF, 0xFF, 0xE0)},
 	{"DarkYellow",		RGB(0xBB, 0xBB, 0x00)},
 	{"SeaGreen",		RGB(0x2E, 0x8B, 0x57)},
 	{"Orange",		RGB(0xFF, 0xA5, 0x00)},
@@ -1707,7 +1722,7 @@
     static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
 #endif
 
-    GetMessage(&msg, NULL, 0, 0);
+    pGetMessage(&msg, NULL, 0, 0);
 
 #ifdef FEAT_OLE
     /* Look after OLE Automation commands */
@@ -1718,7 +1733,7 @@
 	{
 	    /* Message can't be ours, forward it.  Fixes problem with Ultramon
 	     * 3.0.4 */
-	    DispatchMessage(&msg);
+	    pDispatchMessage(&msg);
 	}
 	else
 	{
@@ -1749,14 +1764,14 @@
     if (msg.message == WM_USER)
     {
 	MyTranslateMessage(&msg);
-	DispatchMessage(&msg);
+	pDispatchMessage(&msg);
 	return;
     }
 #endif
 
 #ifdef MSWIN_FIND_REPLACE
     /* Don't process messages used by the dialog */
-    if (s_findrep_hwnd != NULL && IsDialogMessage(s_findrep_hwnd, &msg))
+    if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg))
     {
 	HandleMouseHide(msg.message, msg.lParam);
 	return;
@@ -1810,7 +1825,8 @@
 		 * mapped we want to use the mapping instead. */
 		if (vk == VK_F10
 			&& gui.menu_is_active
-			&& check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
+			&& check_map(k10, State, FALSE, TRUE, FALSE,
+							  NULL, NULL) == NULL)
 		    break;
 #endif
 		if (GetKeyState(VK_SHIFT) & 0x8000)
@@ -1924,9 +1940,10 @@
     /* Check for <F10>: Default effect is to select the menu.  When <F10> is
      * mapped we need to stop it here to avoid strange effects (e.g., for the
      * key-up event) */
-    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
+    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
+							  NULL, NULL) == NULL)
 #endif
-	DispatchMessage(&msg);
+	pDispatchMessage(&msg);
 }
 
 /*
@@ -1941,7 +1958,7 @@
     MSG	    msg;
 
     if (!s_busy_processing)
-	while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
+	while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
 						  && !vim_is_input_buf_full())
 	    process_message();
 }
@@ -2017,7 +2034,7 @@
 		KillTimer(NULL, s_wait_timer);
 
 		/* Eat spurious WM_TIMER messages */
-		while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+		while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
 		    ;
 		s_wait_timer = 0;
 	    }
@@ -2440,7 +2457,6 @@
     TCITEM	tie;
     int		nr = 0;
     int		curtabidx = 0;
-    RECT	rc;
 #ifdef FEAT_MBYTE
     static int	use_unicode = FALSE;
     int		uu;
@@ -2467,13 +2483,16 @@
     tie.mask = TCIF_TEXT;
     tie.iImage = -1;
 
+    /* Disable redraw for tab updates to eliminate O(N^2) draws. */
+    SendMessage(s_tabhwnd, WM_SETREDRAW, (WPARAM)FALSE, 0);
+
     /* Add a label for each tab page.  They all contain the same text area. */
     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr)
     {
 	if (tp == curtab)
 	    curtabidx = nr;
 
-	if (!TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
+	if (nr >= TabCtrl_GetItemCount(s_tabhwnd))
 	{
 	    /* Add the tab */
 	    tie.pszText = "-Empty-";
@@ -2507,11 +2526,16 @@
     }
 
     /* Remove any old labels. */
-    while (TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
+    while (nr < TabCtrl_GetItemCount(s_tabhwnd))
 	TabCtrl_DeleteItem(s_tabhwnd, nr);
 
     if (TabCtrl_GetCurSel(s_tabhwnd) != curtabidx)
 	TabCtrl_SetCurSel(s_tabhwnd, curtabidx);
+
+    /* Re-enable redraw and redraw. */
+    SendMessage(s_tabhwnd, WM_SETREDRAW, (WPARAM)TRUE, 0);
+    RedrawWindow(s_tabhwnd, NULL, NULL,
+		    RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
 }
 
 /*
@@ -3071,6 +3095,74 @@
     return res;
 }
 
+
+#ifdef FEAT_MBYTE_IME
+/*
+ * Set correct LOGFONT to IME.  Use 'guifontwide' if available, otherwise use
+ * 'guifont'
+ */
+    static void
+update_im_font()
+{
+    LOGFONT	lf_wide;
+
+    if (p_guifontwide != NULL && *p_guifontwide != NUL
+	    && gui.wide_font != NOFONT
+	    && GetObject((HFONT)gui.wide_font, sizeof(lf_wide), &lf_wide))
+	norm_logfont = lf_wide;
+    else
+	norm_logfont = sub_logfont;
+    im_set_font(&norm_logfont);
+}
+#endif
+
+#ifdef FEAT_MBYTE
+/*
+ * Handler of gui.wide_font (p_guifontwide) changed notification.
+ */
+    void
+gui_mch_wide_font_changed()
+{
+# ifndef MSWIN16_FASTTEXT
+    LOGFONT lf;
+# endif
+
+# ifdef FEAT_MBYTE_IME
+    update_im_font();
+# endif
+
+# ifndef MSWIN16_FASTTEXT
+    gui_mch_free_font(gui.wide_ital_font);
+    gui.wide_ital_font = NOFONT;
+    gui_mch_free_font(gui.wide_bold_font);
+    gui.wide_bold_font = NOFONT;
+    gui_mch_free_font(gui.wide_boldital_font);
+    gui.wide_boldital_font = NOFONT;
+
+    if (gui.wide_font
+	&& GetObject((HFONT)gui.wide_font, sizeof(lf), &lf))
+    {
+	if (!lf.lfItalic)
+	{
+	    lf.lfItalic = TRUE;
+	    gui.wide_ital_font = get_font_handle(&lf);
+	    lf.lfItalic = FALSE;
+	}
+	if (lf.lfWeight < FW_BOLD)
+	{
+	    lf.lfWeight = FW_BOLD;
+	    gui.wide_bold_font = get_font_handle(&lf);
+	    if (!lf.lfItalic)
+	    {
+		lf.lfItalic = TRUE;
+		gui.wide_boldital_font = get_font_handle(&lf);
+	    }
+	}
+    }
+# endif
+}
+#endif
+
 /*
  * Initialise vim to use the font with the given name.
  * Return FAIL if the font could not be loaded, OK otherwise.
@@ -3093,9 +3185,10 @@
 	font_name = lf.lfFaceName;
 #if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)
     norm_logfont = lf;
+    sub_logfont = lf;
 #endif
 #ifdef FEAT_MBYTE_IME
-    im_set_font(&lf);
+    update_im_font();
 #endif
     gui_mch_free_font(gui.norm_font);
     gui.norm_font = font;
@@ -3206,27 +3299,27 @@
  * misc2.c! */
 static LPCSTR mshape_idcs[] =
 {
-    MAKEINTRESOURCE(IDC_ARROW),		/* arrow */
-    MAKEINTRESOURCE(0),			/* blank */
-    MAKEINTRESOURCE(IDC_IBEAM),		/* beam */
-    MAKEINTRESOURCE(IDC_SIZENS),	/* updown */
-    MAKEINTRESOURCE(IDC_SIZENS),	/* udsizing */
-    MAKEINTRESOURCE(IDC_SIZEWE),	/* leftright */
-    MAKEINTRESOURCE(IDC_SIZEWE),	/* lrsizing */
-    MAKEINTRESOURCE(IDC_WAIT),		/* busy */
+    IDC_ARROW,			/* arrow */
+    MAKEINTRESOURCE(0),		/* blank */
+    IDC_IBEAM,			/* beam */
+    IDC_SIZENS,			/* updown */
+    IDC_SIZENS,			/* udsizing */
+    IDC_SIZEWE,			/* leftright */
+    IDC_SIZEWE,			/* lrsizing */
+    IDC_WAIT,			/* busy */
 #ifdef WIN3264
-    MAKEINTRESOURCE(IDC_NO),		/* no */
+    IDC_NO,			/* no */
 #else
-    MAKEINTRESOURCE(IDC_ICON),		/* no */
+    IDC_ICON,			/* no */
 #endif
-    MAKEINTRESOURCE(IDC_ARROW),		/* crosshair */
-    MAKEINTRESOURCE(IDC_ARROW),		/* hand1 */
-    MAKEINTRESOURCE(IDC_ARROW),		/* hand2 */
-    MAKEINTRESOURCE(IDC_ARROW),		/* pencil */
-    MAKEINTRESOURCE(IDC_ARROW),		/* question */
-    MAKEINTRESOURCE(IDC_ARROW),		/* right-arrow */
-    MAKEINTRESOURCE(IDC_UPARROW),	/* up-arrow */
-    MAKEINTRESOURCE(IDC_ARROW)		/* last one */
+    IDC_ARROW,			/* crosshair */
+    IDC_ARROW,			/* hand1 */
+    IDC_ARROW,			/* hand2 */
+    IDC_ARROW,			/* pencil */
+    IDC_ARROW,			/* question */
+    IDC_ARROW,			/* right-arrow */
+    IDC_UPARROW,		/* up-arrow */
+    IDC_ARROW			/* last one */
 };
 
     void
@@ -3239,7 +3332,7 @@
     else
     {
 	if (shape >= MSHAPE_NUMBERED)
-	    idc = MAKEINTRESOURCE(IDC_ARROW);
+	    idc = IDC_ARROW;
 	else
 	    idc = mshape_idcs[shape];
 #ifdef SetClassLongPtr
@@ -3273,28 +3366,21 @@
 
 # if defined(FEAT_MBYTE) && defined(WIN3264)
 /*
- * Wide version of convert_filter().  Keep in sync!
+ * Wide version of convert_filter().
  */
     static WCHAR *
 convert_filterW(char_u *s)
 {
-    WCHAR	*res;
-    unsigned	s_len = (unsigned)STRLEN(s);
-    unsigned	i;
+    char_u *tmp;
+    int len;
+    WCHAR *res;
 
-    res = (WCHAR *)alloc((s_len + 3) * sizeof(WCHAR));
-    if (res != NULL)
-    {
-	for (i = 0; i < s_len; ++i)
-	    if (s[i] == '\t' || s[i] == '\n')
-		res[i] = '\0';
-	    else
-		res[i] = s[i];
-	res[s_len] = NUL;
-	/* Add two extra NULs to make sure it's properly terminated. */
-	res[s_len + 1] = NUL;
-	res[s_len + 2] = NUL;
-    }
+    tmp = convert_filter(s);
+    if (tmp == NULL)
+	return NULL;
+    len = (int)STRLEN(s) + 3;
+    res = enc_to_utf16(tmp, &len);
+    vim_free(tmp);
     return res;
 }
 
diff -Naur vim73.orig/src/gui_x11.c vim73/src/gui_x11.c
--- vim73.orig/src/gui_x11.c	2010-08-08 13:05:45.000000000 +0000
+++ vim73/src/gui_x11.c	2013-08-04 19:09:10.330611368 +0000
@@ -1431,6 +1431,7 @@
 		p_window = h - 1;
 	    Rows = h;
 	}
+	limit_screen_size();
 	/*
 	 * Set the (x,y) position of the main window only if specified in the
 	 * users geometry, so we get good defaults when they don't. This needs
@@ -2197,12 +2198,12 @@
 	if (	   xfs[i]->max_bounds.width != 2 * min_width
 		&& xfs[i]->max_bounds.width != min_width)
 	{
-	    EMSG2(_("E253: Fontset name: %s\n"), base_name);
-	    EMSG2(_("Font0: %s\n"), font_name[min_font_idx]);
-	    EMSG2(_("Font1: %s\n"), font_name[i]);
-	    EMSGN(_("Font%ld width is not twice that of font0\n"), i);
-	    EMSGN(_("Font0 width: %ld\n"), xfs[min_font_idx]->max_bounds.width);
-	    EMSGN(_("Font1 width: %ld\n\n"), xfs[i]->max_bounds.width);
+	    EMSG2(_("E253: Fontset name: %s"), base_name);
+	    EMSG2(_("Font0: %s"), font_name[min_font_idx]);
+	    EMSG2(_("Font1: %s"), font_name[i]);
+	    EMSGN(_("Font%ld width is not twice that of font0"), i);
+	    EMSGN(_("Font0 width: %ld"), xfs[min_font_idx]->max_bounds.width);
+	    EMSGN(_("Font1 width: %ld"), xfs[i]->max_bounds.width);
 	    return FAIL;
 	}
     }
@@ -2895,6 +2896,11 @@
 	    focus = gui.in_focus;
 	}
 
+#if defined(FEAT_NETBEANS_INTG)
+	/* Process any queued netbeans messages. */
+	netbeans_parse_messages();
+#endif
+
 	/*
 	 * Don't use gui_mch_update() because then we will spin-lock until a
 	 * char arrives, instead we use XtAppProcessEvent() to hang until an
diff -Naur vim73.orig/src/gui_xmdlg.c vim73/src/gui_xmdlg.c
--- vim73.orig/src/gui_xmdlg.c	2010-06-26 03:53:50.000000000 +0000
+++ vim73/src/gui_xmdlg.c	2013-08-04 19:09:10.333944691 +0000
@@ -688,7 +688,7 @@
 	    do_dialog(VIM_ERROR,
 		    (char_u *)_("Error"),
 		    (char_u *)_("Invalid font specification"),
-		    (char_u *)_("&Dismiss"), 1, NULL);
+		    (char_u *)_("&Dismiss"), 1, NULL, FALSE);
 
 	return True;
     }
@@ -807,7 +807,7 @@
 	do_dialog(VIM_ERROR,
 		(char_u *)_("Error"),
 		(char_u *)_("Invalid font specification"),
-		(char_u *)_("&Dismiss"), 1, NULL);
+		(char_u *)_("&Dismiss"), 1, NULL, FALSE);
 	XFreeFontNames(name);
     }
     else
diff -Naur vim73.orig/src/gui_xmebw.c vim73/src/gui_xmebw.c
--- vim73.orig/src/gui_xmebw.c	2010-07-14 14:48:14.000000000 +0000
+++ vim73/src/gui_xmebw.c	2013-08-04 19:09:10.337278014 +0000
@@ -345,7 +345,7 @@
 	    &eb->primitive.top_shadow_color,
 	    &eb->primitive.highlight_color);
 
-    /* Setup color subsititution table. */
+    /* Setup color substitution table. */
     color[0].pixel = eb->core.background_pixel;
     color[1].pixel = eb->core.background_pixel;
     color[2].pixel = eb->core.background_pixel;
@@ -375,11 +375,8 @@
 
     XGetGeometry(dpy, pix, &root, &x, &y, &width, &height, &border, &depth);
 
-    if (eb->enhancedbutton.label_location == (int)XmTOP
-	    || eb->enhancedbutton.label_location == (int)XmBOTTOM)
-	shift = eb->primitive.shadow_thickness / 2;
-    else
-	shift = eb->primitive.shadow_thickness / 2;
+    /* TODO: does the shift depend on label_location somehow? */
+    shift = eb->primitive.shadow_thickness / 2;
 
     if (shift < 1)
 	shift = 1;
@@ -922,8 +919,8 @@
     }
 
     /*
-     * Plase note that we manipulate the width only in case of push buttons not
-     * used in the context of a menu pane.
+     * Please note that we manipulate the width only in case of push buttons
+     * not used in the context of a menu pane.
      */
     if (Lab_IsMenupane(newtb))
     {
@@ -1009,7 +1006,7 @@
 	XmString str;
 	set_pixmap(eb);
 
-	/* FIXME: this is not the perfect way to deal with menues, which do not
+	/* FIXME: this is not the perfect way to deal with menus, which do not
 	 * have any string set right now.  */
 	str = XmStringCreateLocalized("");
 	XtVaSetValues((Widget) eb, XmNlabelString, str, NULL);
diff -Naur vim73.orig/src/gui_xmebwp.h vim73/src/gui_xmebwp.h
--- vim73.orig/src/gui_xmebwp.h	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/gui_xmebwp.h	2013-08-04 19:09:10.340611338 +0000
@@ -26,7 +26,7 @@
 
 
 /*
- * EnahncedButton class structure.
+ * EnhancedButton class structure.
  */
 typedef struct _XmEnhancedButtonClassPart
 {
@@ -49,7 +49,7 @@
 extern XmEnhancedButtonClassRec xmEnhancedButtonClassRec;
 
 /*
- * EnahncedButton instance record.
+ * EnhancedButton instance record.
  */
 typedef struct _XmEnhancedButtonPart
 {
diff -Naur vim73.orig/src/hardcopy.c vim73/src/hardcopy.c
--- vim73.orig/src/hardcopy.c	2010-07-31 14:10:59.000000000 +0000
+++ vim73/src/hardcopy.c	2013-08-04 19:09:10.347277984 +0000
@@ -1759,18 +1759,25 @@
     char	*name;
     struct prt_ps_resource_S *resource;
 {
-    char_u	buffer[MAXPATHL + 1];
+    char_u	*buffer;
+    int		retval;
 
-    STRCPY(resource->name, name);
+    buffer = alloc(MAXPATHL + 1);
+    if (buffer == NULL)
+	return FALSE;
+
+    vim_strncpy(resource->name, (char_u *)name, 63);
     /* Look for named resource file in runtimepath */
     STRCPY(buffer, "print");
     add_pathsep(buffer);
-    STRCAT(buffer, name);
-    STRCAT(buffer, ".ps");
+    vim_strcat(buffer, (char_u *)name, MAXPATHL);
+    vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
     resource->filename[0] = NUL;
-    return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+    retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,
 							   resource->filename)
 	    && resource->filename[0] != NUL);
+    vim_free(buffer);
+    return retval;
 }
 
 /* PS CR and LF characters have platform independent values */
@@ -2179,7 +2186,7 @@
     if (num_copies > 1)
     {
 	prt_write_string(" numcopies(");
-	/* Note: no space wanted so dont use prt_write_int() */
+	/* Note: no space wanted so don't use prt_write_int() */
 	sprintf((char *)prt_line_buffer, "%d", num_copies);
 	prt_write_file(prt_line_buffer);
 	prt_write_string(")");
@@ -2848,15 +2855,33 @@
     double      right;
     double      top;
     double      bottom;
-    struct prt_ps_resource_S res_prolog;
-    struct prt_ps_resource_S res_encoding;
+    struct prt_ps_resource_S *res_prolog;
+    struct prt_ps_resource_S *res_encoding;
     char	buffer[256];
     char_u      *p_encoding;
     char_u	*p;
 #ifdef FEAT_MBYTE
-    struct prt_ps_resource_S res_cidfont;
-    struct prt_ps_resource_S res_cmap;
+    struct prt_ps_resource_S *res_cidfont;
+    struct prt_ps_resource_S *res_cmap;
 #endif
+    int		retval = FALSE;
+
+    res_prolog = (struct prt_ps_resource_S *)
+				      alloc(sizeof(struct prt_ps_resource_S));
+    res_encoding = (struct prt_ps_resource_S *)
+				      alloc(sizeof(struct prt_ps_resource_S));
+#ifdef FEAT_MBYTE
+    res_cidfont = (struct prt_ps_resource_S *)
+				      alloc(sizeof(struct prt_ps_resource_S));
+    res_cmap = (struct prt_ps_resource_S *)
+				      alloc(sizeof(struct prt_ps_resource_S));
+#endif
+    if (res_prolog == NULL || res_encoding == NULL
+#ifdef FEAT_MBYTE
+	    || res_cidfont == NULL || res_cmap == NULL
+#endif
+       )
+	goto theend;
 
     /*
      * PS DSC Header comments - no PS code!
@@ -2932,27 +2957,27 @@
 #endif
 
     /* Search for external resources VIM supplies */
-    if (!prt_find_resource("prolog", &res_prolog))
+    if (!prt_find_resource("prolog", res_prolog))
     {
 	EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
 	return FALSE;
     }
-    if (!prt_open_resource(&res_prolog))
+    if (!prt_open_resource(res_prolog))
 	return FALSE;
-    if (!prt_check_resource(&res_prolog, PRT_PROLOG_VERSION))
+    if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
 	return FALSE;
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
 	/* Look for required version of multi-byte printing procset */
-	if (!prt_find_resource("cidfont", &res_cidfont))
+	if (!prt_find_resource("cidfont", res_cidfont))
 	{
 	    EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
 	    return FALSE;
 	}
-	if (!prt_open_resource(&res_cidfont))
+	if (!prt_open_resource(res_cidfont))
 	    return FALSE;
-	if (!prt_check_resource(&res_cidfont, PRT_CID_PROLOG_VERSION))
+	if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
 	    return FALSE;
     }
 #endif
@@ -2968,7 +2993,7 @@
 #endif
 	p_encoding = enc_skip(p_penc);
 	if (*p_encoding == NUL
-		|| !prt_find_resource((char *)p_encoding, &res_encoding))
+		|| !prt_find_resource((char *)p_encoding, res_encoding))
 	{
 	    /* 'printencoding' not set or not supported - find alternate */
 #ifdef FEAT_MBYTE
@@ -2977,13 +3002,13 @@
 	    p_encoding = enc_skip(p_enc);
 	    props = enc_canon_props(p_encoding);
 	    if (!(props & ENC_8BIT)
-		    || !prt_find_resource((char *)p_encoding, &res_encoding))
+		    || !prt_find_resource((char *)p_encoding, res_encoding))
 		/* 8-bit 'encoding' is not supported */
 #endif
 		{
 		/* Use latin1 as default printing encoding */
 		p_encoding = (char_u *)"latin1";
-		if (!prt_find_resource((char *)p_encoding, &res_encoding))
+		if (!prt_find_resource((char *)p_encoding, res_encoding))
 		{
 		    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
 			    p_encoding);
@@ -2991,7 +3016,7 @@
 		}
 	    }
 	}
-	if (!prt_open_resource(&res_encoding))
+	if (!prt_open_resource(res_encoding))
 	    return FALSE;
 	/* For the moment there are no checks on encoding resource files to
 	 * perform */
@@ -3005,13 +3030,13 @@
 	if (prt_use_courier)
 	{
 	    /* Include ASCII range encoding vector */
-	    if (!prt_find_resource(prt_ascii_encoding, &res_encoding))
+	    if (!prt_find_resource(prt_ascii_encoding, res_encoding))
 	    {
 		EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
 							  prt_ascii_encoding);
 		return FALSE;
 	    }
-	    if (!prt_open_resource(&res_encoding))
+	    if (!prt_open_resource(res_encoding))
 		return FALSE;
 	    /* For the moment there are no checks on encoding resource files to
 	     * perform */
@@ -3034,44 +3059,44 @@
     if (prt_out_mbyte && prt_custom_cmap)
     {
 	/* Find user supplied CMap */
-	if (!prt_find_resource(prt_cmap, &res_cmap))
+	if (!prt_find_resource(prt_cmap, res_cmap))
 	{
 	    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
 								    prt_cmap);
 	    return FALSE;
 	}
-	if (!prt_open_resource(&res_cmap))
+	if (!prt_open_resource(res_cmap))
 	    return FALSE;
     }
 #endif
 
     /* List resources supplied */
-    STRCPY(buffer, res_prolog.title);
+    STRCPY(buffer, res_prolog->title);
     STRCAT(buffer, " ");
-    STRCAT(buffer, res_prolog.version);
+    STRCAT(buffer, res_prolog->version);
     prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
-	STRCPY(buffer, res_cidfont.title);
+	STRCPY(buffer, res_cidfont->title);
 	STRCAT(buffer, " ");
-	STRCAT(buffer, res_cidfont.version);
+	STRCAT(buffer, res_cidfont->version);
 	prt_dsc_resources(NULL, "procset", buffer);
 
 	if (prt_custom_cmap)
 	{
-	    STRCPY(buffer, res_cmap.title);
+	    STRCPY(buffer, res_cmap->title);
 	    STRCAT(buffer, " ");
-	    STRCAT(buffer, res_cmap.version);
+	    STRCAT(buffer, res_cmap->version);
 	    prt_dsc_resources(NULL, "cmap", buffer);
 	}
     }
     if (!prt_out_mbyte || prt_use_courier)
 #endif
     {
-	STRCPY(buffer, res_encoding.title);
+	STRCPY(buffer, res_encoding->title);
 	STRCAT(buffer, " ");
-	STRCAT(buffer, res_encoding.version);
+	STRCAT(buffer, res_encoding->version);
 	prt_dsc_resources(NULL, "encoding", buffer);
     }
     prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
@@ -3114,15 +3139,15 @@
     prt_dsc_noarg("BeginProlog");
 
     /* Add required procsets - NOTE: order is important! */
-    if (!prt_add_resource(&res_prolog))
+    if (!prt_add_resource(res_prolog))
 	return FALSE;
 #ifdef FEAT_MBYTE
     if (prt_out_mbyte)
     {
 	/* Add CID font procset, and any user supplied CMap */
-	if (!prt_add_resource(&res_cidfont))
+	if (!prt_add_resource(res_cidfont))
 	    return FALSE;
-	if (prt_custom_cmap && !prt_add_resource(&res_cmap))
+	if (prt_custom_cmap && !prt_add_resource(res_cmap))
 	    return FALSE;
     }
 #endif
@@ -3132,7 +3157,7 @@
 #endif
 	/* There will be only one Roman font encoding to be included in the PS
 	 * file. */
-	if (!prt_add_resource(&res_encoding))
+	if (!prt_add_resource(res_encoding))
 	    return FALSE;
 
     prt_dsc_noarg("EndProlog");
@@ -3248,7 +3273,17 @@
     prt_dsc_noarg("EndSetup");
 
     /* Fail if any problems writing out to the PS file */
-    return !prt_file_error;
+    retval = !prt_file_error;
+
+theend:
+    vim_free(res_prolog);
+    vim_free(res_encoding);
+#ifdef FEAT_MBYTE
+    vim_free(res_cidfont);
+    vim_free(res_cmap);
+#endif
+
+    return retval;
 }
 
     void
diff -Naur vim73.orig/src/hashtab.c vim73/src/hashtab.c
--- vim73.orig/src/hashtab.c	2010-08-08 13:06:42.000000000 +0000
+++ vim73/src/hashtab.c	2013-08-04 19:09:10.347277984 +0000
@@ -138,7 +138,7 @@
     hash_T	perturb;
     hashitem_T	*freeitem;
     hashitem_T	*hi;
-    int		idx;
+    unsigned	idx;
 
 #ifdef HT_DEBUG
     ++hash_count_lookup;
@@ -150,7 +150,7 @@
      * - skip over a removed item
      * - return if the item matches
      */
-    idx = (int)(hash & ht->ht_mask);
+    idx = (unsigned)(hash & ht->ht_mask);
     hi = &ht->ht_array[idx];
 
     if (hi->hi_key == NULL)
@@ -176,7 +176,7 @@
 #ifdef HT_DEBUG
 	++hash_count_perturb;	    /* count a "miss" for hashtab lookup */
 #endif
-	idx = (int)((idx << 2) + idx + perturb + 1);
+	idx = (unsigned)((idx << 2U) + idx + perturb + 1U);
 	hi = &ht->ht_array[idx & ht->ht_mask];
 	if (hi->hi_key == NULL)
 	    return freeitem == NULL ? hi : freeitem;
@@ -342,7 +342,7 @@
     hashitem_T	temparray[HT_INIT_SIZE];
     hashitem_T	*oldarray, *newarray;
     hashitem_T	*olditem, *newitem;
-    int		newi;
+    unsigned	newi;
     int		todo;
     long_u	oldsize, newsize;
     long_u	minsize;
@@ -448,13 +448,13 @@
 	     * the algorithm to find an item in hash_lookup().  But we only
 	     * need to search for a NULL key, thus it's simpler.
 	     */
-	    newi = (int)(olditem->hi_hash & newmask);
+	    newi = (unsigned)(olditem->hi_hash & newmask);
 	    newitem = &newarray[newi];
 
 	    if (newitem->hi_key != NULL)
 		for (perturb = olditem->hi_hash; ; perturb >>= PERTURB_SHIFT)
 		{
-		    newi = (int)((newi << 2) + newi + perturb + 1);
+		    newi = (unsigned)((newi << 2U) + newi + perturb + 1U);
 		    newitem = &newarray[newi & newmask];
 		    if (newitem->hi_key == NULL)
 			break;
diff -Naur vim73.orig/src/if_cscope.c vim73/src/if_cscope.c
--- vim73.orig/src/if_cscope.c	2010-07-25 14:32:31.000000000 +0000
+++ vim73/src/if_cscope.c	2013-08-04 19:09:10.350611307 +0000
@@ -13,16 +13,10 @@
 
 #if defined(FEAT_CSCOPE) || defined(PROTO)
 
-#include <string.h>
-#include <errno.h>
-#include <assert.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #if defined(UNIX)
 # include <sys/wait.h>
-#else
-    /* not UNIX, must be WIN32 */
-# include "vimio.h"
 #endif
 #include "if_cscope.h"
 
@@ -545,12 +539,27 @@
     char	*fname2 = NULL;
     char	*ppath = NULL;
     int		i;
+#ifdef FEAT_MODIFY_FNAME
+    int		len;
+    int		usedlen = 0;
+    char_u	*fbuf = NULL;
+#endif
 
     /* get the filename (arg1), expand it, and try to stat it */
     if ((fname = (char *)alloc(MAXPATHL + 1)) == NULL)
 	goto add_err;
 
     expand_env((char_u *)arg1, (char_u *)fname, MAXPATHL);
+#ifdef FEAT_MODIFY_FNAME
+    len = (int)STRLEN(fname);
+    fbuf = (char_u *)fname;
+    (void)modify_fname((char_u *)":p", &usedlen,
+					      (char_u **)&fname, &fbuf, &len);
+    if (fname == NULL)
+	goto add_err;
+    fname = (char *)vim_strnsave((char_u *)fname, len);
+    vim_free(fbuf);
+#endif
     ret = stat(fname, &statbuf);
     if (ret < 0)
     {
@@ -988,6 +997,15 @@
 	vim_free(ppath);
 
 #if defined(UNIX)
+# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+	/* Change our process group to avoid cscope receiving SIGWINCH. */
+#  if defined(HAVE_SETSID)
+	(void)setsid();
+#  else
+	if (setpgid(0, 0) == -1)
+	    PERROR(_("cs_create_connection setpgid failed"));
+#  endif
+# endif
 	if (execl("/bin/sh", "sh", "-c", cmd, (char *)NULL) == -1)
 	    PERROR(_("cs_create_connection exec failed"));
 
@@ -1198,9 +1216,8 @@
     if (nummatches == NULL)
 	return FALSE;
 
-    /* send query to all open connections, then count the total number
-     * of matches so we can alloc matchesp all in one swell foop
-     */
+    /* Send query to all open connections, then count the total number
+     * of matches so we can alloc all in one swell foop. */
     for (i = 0; i < csinfo_size; i++)
 	nummatches[i] = 0;
     totmatches = 0;
@@ -1274,9 +1291,7 @@
 		{
 		    win_split(postponed_split > 0 ? postponed_split : 0,
 						       postponed_split_flags);
-#  ifdef FEAT_SCROLLBIND
-		    curwin->w_p_scb = FALSE;
-#  endif
+		    RESET_BINDING(curwin);
 		    postponed_split = 0;
 		}
 # endif
@@ -1353,7 +1368,7 @@
 		       "       g: Find this definition\n"
 		       "       i: Find files #including this file\n"
 		       "       s: Find this C symbol\n"
-		       "       t: Find assignments to\n"));
+		       "       t: Find this text string\n"));
 
 	cmdp++;
     }
@@ -1420,17 +1435,15 @@
 {
     short	i, j;
 #ifndef UNIX
-    HANDLE	hFile;
     BY_HANDLE_FILE_INFORMATION bhfi;
 
-    vim_memset(&bhfi, 0, sizeof(bhfi));
     /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
     if (!mch_windows95())
     {
-	hFile = CreateFile(fname, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
-						 FILE_ATTRIBUTE_NORMAL, NULL);
-	if (hFile == INVALID_HANDLE_VALUE)
+	switch (win32_fileinfo(fname, &bhfi))
 	{
+	case FILEINFO_ENC_FAIL:		/* enc_to_utf16() failed */
+	case FILEINFO_READ_FAIL:	/* CreateFile() failed */
 	    if (p_csverbose)
 	    {
 		char *cant_msg = _("E625: cannot open cscope database: %s");
@@ -1446,15 +1459,12 @@
 		    (void)EMSG2(cant_msg, fname);
 	    }
 	    return -1;
-	}
-	if (!GetFileInformationByHandle(hFile, &bhfi))
-	{
-	    CloseHandle(hFile);
+
+	case FILEINFO_INFO_FAIL:    /* GetFileInformationByHandle() failed */
 	    if (p_csverbose)
 		(void)EMSG(_("E626: cannot get cscope database information"));
 	    return -1;
 	}
-	CloseHandle(hFile);
     }
 #endif
 
@@ -1664,7 +1674,7 @@
 /*
  * PRIVATE: cs_make_vim_style_matches
  *
- * convert the cscope output into into a ctags style entry (as might be found
+ * convert the cscope output into a ctags style entry (as might be found
  * in a ctags tags file).  there's one catch though: cscope doesn't tell you
  * the type of the tag you are looking for.  for example, in Darren Hiebert's
  * ctags (the one that comes with vim), #define's use a line number to find the
@@ -2474,52 +2484,73 @@
 /*
  * PRIVATE: cs_resolve_file
  *
- * construct the full pathname to a file found in the cscope database.
+ * Construct the full pathname to a file found in the cscope database.
  * (Prepends ppath, if there is one and if it's not already prepended,
  * otherwise just uses the name found.)
  *
- * we need to prepend the prefix because on some cscope's (e.g., the one that
+ * We need to prepend the prefix because on some cscope's (e.g., the one that
  * ships with Solaris 2.6), the output never has the prefix prepended.
- * contrast this with my development system (Digital Unix), which does.
+ * Contrast this with my development system (Digital Unix), which does.
  */
     static char *
 cs_resolve_file(i, name)
-    int i;
+    int  i;
     char *name;
 {
-    char *fullname;
-    int len;
+    char	*fullname;
+    int		len;
+    char_u	*csdir = NULL;
 
     /*
-     * ppath is freed when we destroy the cscope connection.
-     * fullname is freed after cs_make_vim_style_matches, after it's been
-     * copied into the tag buffer used by vim
+     * Ppath is freed when we destroy the cscope connection.
+     * Fullname is freed after cs_make_vim_style_matches, after it's been
+     * copied into the tag buffer used by Vim.
      */
     len = (int)(strlen(name) + 2);
     if (csinfo[i].ppath != NULL)
 	len += (int)strlen(csinfo[i].ppath);
+    else if (p_csre && csinfo[i].fname != NULL)
+    {
+	/* If 'cscoperelative' is set and ppath is not set, use cscope.out
+	 * path in path resolution. */
+	csdir = alloc(MAXPATHL);
+	if (csdir != NULL)
+	{
+	    vim_strncpy(csdir, (char_u *)csinfo[i].fname,
+		                       gettail((char_u *)csinfo[i].fname)
+						 - (char_u *)csinfo[i].fname);
+	    len += (int)STRLEN(csdir);
+	}
+    }
 
-    if ((fullname = (char *)alloc(len)) == NULL)
-	return NULL;
-
-    /*
-     * note/example: this won't work if the cscope output already starts
+    /* Note/example: this won't work if the cscope output already starts
      * "../.." and the prefix path is also "../..".  if something like this
-     * happens, you are screwed up and need to fix how you're using cscope.
-     */
-    if (csinfo[i].ppath != NULL &&
-	(strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0) &&
-	(name[0] != '/')
+     * happens, you are screwed up and need to fix how you're using cscope. */
+    if (csinfo[i].ppath != NULL
+	    && (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0)
+	    && (name[0] != '/')
 #ifdef WIN32
-	&& name[0] != '\\' && name[1] != ':'
+	    && name[0] != '\\' && name[1] != ':'
 #endif
-	)
-	(void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
+       )
+    {
+	if ((fullname = (char *)alloc(len)) != NULL)
+	    (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
+    }
+    else if (csdir != NULL && csinfo[i].fname != NULL && *csdir != NUL)
+    {
+	/* Check for csdir to be non empty to avoid empty path concatenated to
+	 * cscope output. */
+	fullname = (char *)concat_fnames(csdir, (char_u *)name, TRUE);
+    }
     else
-	(void)sprintf(fullname, "%s", name);
+    {
+	fullname = (char *)vim_strsave((char_u *)name);
+    }
 
+    vim_free(csdir);
     return fullname;
-} /* cs_resolve_file */
+}
 
 
 /*
diff -Naur vim73.orig/src/if_lua.c vim73/src/if_lua.c
--- vim73.orig/src/if_lua.c	2010-08-12 20:12:04.000000000 +0000
+++ vim73/src/if_lua.c	2013-08-04 19:09:10.353944631 +0000
@@ -1,4 +1,4 @@
-/* vi:set ts=8 sts=4 sw=4:
+/* vi:set ts=8 sts=4 sw=4 noet:
  *
  * VIM - Vi IMproved	by Bram Moolenaar
  *
@@ -9,12 +9,11 @@
  * See README.txt for an overview of the Vim source code.
  */
 
-#include <stdio.h>
-#include <string.h>
+#include "vim.h"
+
 #include <lua.h>
 #include <lualib.h>
 #include <lauxlib.h>
-#include "vim.h"
 
 /* Only do the following when the feature is enabled.  Needed for "make
  * depend". */
@@ -22,15 +21,33 @@
 
 #define LUAVIM_CHUNKNAME "vim chunk"
 #define LUAVIM_NAME "vim"
+#define LUAVIM_EVALNAME "luaeval"
+#define LUAVIM_EVALHEADER "local _A=select(1,...) return "
 
 typedef buf_T *luaV_Buffer;
 typedef win_T *luaV_Window;
+typedef dict_T *luaV_Dict;
+typedef list_T *luaV_List;
 typedef void (*msgfunc_T)(char_u *);
 
+static const char LUAVIM_DICT[] = "dict";
+static const char LUAVIM_LIST[] = "list";
 static const char LUAVIM_BUFFER[] = "buffer";
 static const char LUAVIM_WINDOW[] = "window";
 static const char LUAVIM_FREE[] = "luaV_free";
+static const char LUAVIM_LUAEVAL[] = "luaV_luaeval";
+static const char LUAVIM_SETREF[] = "luaV_setref";
 
+/* most functions are closures with a cache table as first upvalue;
+ * get/setudata manage references to vim userdata in cache table through
+ * object pointers (light userdata) */
+#define luaV_getudata(L, v) \
+    lua_pushlightuserdata((L), (void *) (v)); \
+    lua_rawget((L), lua_upvalueindex(1))
+#define luaV_setudata(L, v) \
+    lua_pushlightuserdata((L), (void *) (v)); \
+    lua_pushvalue((L), -2); \
+    lua_rawset((L), lua_upvalueindex(1))
 #define luaV_getfield(L, s) \
     lua_pushlightuserdata((L), (void *)(s)); \
     lua_rawget((L), LUA_REGISTRYINDEX)
@@ -39,6 +56,15 @@
 #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg)
 #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg)
 
+static luaV_List *luaV_pushlist (lua_State *L, list_T *lis);
+static luaV_Dict *luaV_pushdict (lua_State *L, dict_T *dic);
+
+#if LUA_VERSION_NUM <= 501
+#define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n)
+#define luaL_typeerror luaL_typerror
+#else
+#define luaV_openlib luaL_setfuncs
+#endif
 
 #ifdef DYNAMIC_LUA
 
@@ -49,38 +75,61 @@
 # define symbol_from_dll dlsym
 # define close_dll dlclose
 #else
-# define load_dll LoadLibrary
+# define load_dll vimLoadLib
 # define symbol_from_dll GetProcAddress
 # define close_dll FreeLibrary
 #endif
 
 /* lauxlib */
+#if LUA_VERSION_NUM <= 501
 #define luaL_register dll_luaL_register
+#define luaL_prepbuffer dll_luaL_prepbuffer
+#define luaL_openlib dll_luaL_openlib
 #define luaL_typerror dll_luaL_typerror
+#define luaL_loadfile dll_luaL_loadfile
+#define luaL_loadbuffer dll_luaL_loadbuffer
+#else
+#define luaL_prepbuffsize dll_luaL_prepbuffsize
+#define luaL_setfuncs dll_luaL_setfuncs
+#define luaL_loadfilex dll_luaL_loadfilex
+#define luaL_loadbufferx dll_luaL_loadbufferx
+#define luaL_argerror dll_luaL_argerror
+#endif
+#define luaL_checkany dll_luaL_checkany
 #define luaL_checklstring dll_luaL_checklstring
 #define luaL_checkinteger dll_luaL_checkinteger
 #define luaL_optinteger dll_luaL_optinteger
 #define luaL_checktype dll_luaL_checktype
 #define luaL_error dll_luaL_error
-#define luaL_loadfile dll_luaL_loadfile
-#define luaL_loadbuffer dll_luaL_loadbuffer
 #define luaL_newstate dll_luaL_newstate
 #define luaL_buffinit dll_luaL_buffinit
-#define luaL_prepbuffer dll_luaL_prepbuffer
 #define luaL_addlstring dll_luaL_addlstring
 #define luaL_pushresult dll_luaL_pushresult
 /* lua */
+#if LUA_VERSION_NUM <= 501
+#define lua_tonumber dll_lua_tonumber
+#define lua_tointeger dll_lua_tointeger
+#define lua_call dll_lua_call
+#define lua_pcall dll_lua_pcall
+#else
+#define lua_tonumberx dll_lua_tonumberx
+#define lua_tointegerx dll_lua_tointegerx
+#define lua_callk dll_lua_callk
+#define lua_pcallk dll_lua_pcallk
+#define lua_getglobal dll_lua_getglobal
+#define lua_setglobal dll_lua_setglobal
+#endif
+#define lua_typename dll_lua_typename
 #define lua_close dll_lua_close
 #define lua_gettop dll_lua_gettop
 #define lua_settop dll_lua_settop
 #define lua_pushvalue dll_lua_pushvalue
 #define lua_replace dll_lua_replace
+#define lua_remove dll_lua_remove
 #define lua_isnumber dll_lua_isnumber
 #define lua_isstring dll_lua_isstring
 #define lua_type dll_lua_type
 #define lua_rawequal dll_lua_rawequal
-#define lua_tonumber dll_lua_tonumber
-#define lua_tointeger dll_lua_tointeger
 #define lua_toboolean dll_lua_toboolean
 #define lua_tolstring dll_lua_tolstring
 #define lua_touserdata dll_lua_touserdata
@@ -95,6 +144,7 @@
 #define lua_pushlightuserdata dll_lua_pushlightuserdata
 #define lua_getfield dll_lua_getfield
 #define lua_rawget dll_lua_rawget
+#define lua_rawgeti dll_lua_rawgeti
 #define lua_createtable dll_lua_createtable
 #define lua_newuserdata dll_lua_newuserdata
 #define lua_getmetatable dll_lua_getmetatable
@@ -102,8 +152,7 @@
 #define lua_rawset dll_lua_rawset
 #define lua_rawseti dll_lua_rawseti
 #define lua_setmetatable dll_lua_setmetatable
-#define lua_call dll_lua_call
-#define lua_pcall dll_lua_pcall
+#define lua_next dll_lua_next
 /* libs */
 #define luaopen_base dll_luaopen_base
 #define luaopen_table dll_luaopen_table
@@ -116,32 +165,57 @@
 #define luaL_openlibs dll_luaL_openlibs
 
 /* lauxlib */
+#if LUA_VERSION_NUM <= 501
 void (*dll_luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l);
+char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
+void (*dll_luaL_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup);
 int (*dll_luaL_typerror) (lua_State *L, int narg, const char *tname);
+int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
+int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
+#else
+char *(*dll_luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
+void (*dll_luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
+int (*dll_luaL_loadfilex) (lua_State *L, const char *filename, const char *mode);
+int (*dll_luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
+int (*dll_luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
+#endif
+void (*dll_luaL_checkany) (lua_State *L, int narg);
 const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
 lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
 lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
 void (*dll_luaL_checktype) (lua_State *L, int narg, int t);
 int (*dll_luaL_error) (lua_State *L, const char *fmt, ...);
-int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
-int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
 lua_State *(*dll_luaL_newstate) (void);
 void (*dll_luaL_buffinit) (lua_State *L, luaL_Buffer *B);
-char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
 void (*dll_luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
 void (*dll_luaL_pushresult) (luaL_Buffer *B);
 /* lua */
+#if LUA_VERSION_NUM <= 501
+lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
+lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
+void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
+int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
+#else
+lua_Number (*dll_lua_tonumberx) (lua_State *L, int idx, int *isnum);
+lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
+void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
+	lua_CFunction k);
+int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
+	int ctx, lua_CFunction k);
+void (*dll_lua_getglobal) (lua_State *L, const char *var);
+void (*dll_lua_setglobal) (lua_State *L, const char *var);
+#endif
+const char *(*dll_lua_typename) (lua_State *L, int tp);
 void       (*dll_lua_close) (lua_State *L);
 int (*dll_lua_gettop) (lua_State *L);
 void (*dll_lua_settop) (lua_State *L, int idx);
 void (*dll_lua_pushvalue) (lua_State *L, int idx);
 void (*dll_lua_replace) (lua_State *L, int idx);
+void (*dll_lua_remove) (lua_State *L, int idx);
 int (*dll_lua_isnumber) (lua_State *L, int idx);
 int (*dll_lua_isstring) (lua_State *L, int idx);
 int (*dll_lua_type) (lua_State *L, int idx);
 int (*dll_lua_rawequal) (lua_State *L, int idx1, int idx2);
-lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
-lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
 int (*dll_lua_toboolean) (lua_State *L, int idx);
 const char *(*dll_lua_tolstring) (lua_State *L, int idx, size_t *len);
 void *(*dll_lua_touserdata) (lua_State *L, int idx);
@@ -156,6 +230,7 @@
 void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
 void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
 void (*dll_lua_rawget) (lua_State *L, int idx);
+void (*dll_lua_rawgeti) (lua_State *L, int idx, int n);
 void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
 void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
 int (*dll_lua_getmetatable) (lua_State *L, int objindex);
@@ -163,8 +238,7 @@
 void (*dll_lua_rawset) (lua_State *L, int idx);
 void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
 int (*dll_lua_setmetatable) (lua_State *L, int objindex);
-void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
-int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
+int (*dll_lua_next) (lua_State *L, int idx);
 /* libs */
 int (*dll_luaopen_base) (lua_State *L);
 int (*dll_luaopen_table) (lua_State *L);
@@ -184,32 +258,55 @@
 
 static const luaV_Reg luaV_dll[] = {
     /* lauxlib */
+#if LUA_VERSION_NUM <= 501
     {"luaL_register", (luaV_function) &dll_luaL_register},
+    {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
+    {"luaL_openlib", (luaV_function) &dll_luaL_openlib},
     {"luaL_typerror", (luaV_function) &dll_luaL_typerror},
+    {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
+    {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
+#else
+    {"luaL_prepbuffsize", (luaV_function) &dll_luaL_prepbuffsize},
+    {"luaL_setfuncs", (luaV_function) &dll_luaL_setfuncs},
+    {"luaL_loadfilex", (luaV_function) &dll_luaL_loadfilex},
+    {"luaL_loadbufferx", (luaV_function) &dll_luaL_loadbufferx},
+    {"luaL_argerror", (luaV_function) &dll_luaL_argerror},
+#endif
+    {"luaL_checkany", (luaV_function) &dll_luaL_checkany},
     {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
     {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
     {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
     {"luaL_checktype", (luaV_function) &dll_luaL_checktype},
     {"luaL_error", (luaV_function) &dll_luaL_error},
-    {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
-    {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
     {"luaL_newstate", (luaV_function) &dll_luaL_newstate},
     {"luaL_buffinit", (luaV_function) &dll_luaL_buffinit},
-    {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
     {"luaL_addlstring", (luaV_function) &dll_luaL_addlstring},
     {"luaL_pushresult", (luaV_function) &dll_luaL_pushresult},
     /* lua */
+#if LUA_VERSION_NUM <= 501
+    {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
+    {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
+    {"lua_call", (luaV_function) &dll_lua_call},
+    {"lua_pcall", (luaV_function) &dll_lua_pcall},
+#else
+    {"lua_tonumberx", (luaV_function) &dll_lua_tonumberx},
+    {"lua_tointegerx", (luaV_function) &dll_lua_tointegerx},
+    {"lua_callk", (luaV_function) &dll_lua_callk},
+    {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
+    {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
+    {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
+#endif
+    {"lua_typename", (luaV_function) &dll_lua_typename},
     {"lua_close", (luaV_function) &dll_lua_close},
     {"lua_gettop", (luaV_function) &dll_lua_gettop},
     {"lua_settop", (luaV_function) &dll_lua_settop},
     {"lua_pushvalue", (luaV_function) &dll_lua_pushvalue},
     {"lua_replace", (luaV_function) &dll_lua_replace},
+    {"lua_remove", (luaV_function) &dll_lua_remove},
     {"lua_isnumber", (luaV_function) &dll_lua_isnumber},
     {"lua_isstring", (luaV_function) &dll_lua_isstring},
     {"lua_type", (luaV_function) &dll_lua_type},
     {"lua_rawequal", (luaV_function) &dll_lua_rawequal},
-    {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
-    {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
     {"lua_toboolean", (luaV_function) &dll_lua_toboolean},
     {"lua_tolstring", (luaV_function) &dll_lua_tolstring},
     {"lua_touserdata", (luaV_function) &dll_lua_touserdata},
@@ -224,6 +321,7 @@
     {"lua_pushlightuserdata", (luaV_function) &dll_lua_pushlightuserdata},
     {"lua_getfield", (luaV_function) &dll_lua_getfield},
     {"lua_rawget", (luaV_function) &dll_lua_rawget},
+    {"lua_rawgeti", (luaV_function) &dll_lua_rawgeti},
     {"lua_createtable", (luaV_function) &dll_lua_createtable},
     {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
     {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
@@ -231,8 +329,7 @@
     {"lua_rawset", (luaV_function) &dll_lua_rawset},
     {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
     {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
-    {"lua_call", (luaV_function) &dll_lua_call},
-    {"lua_pcall", (luaV_function) &dll_lua_pcall},
+    {"lua_next", (luaV_function) &dll_lua_next},
     /* libs */
     {"luaopen_base", (luaV_function) &dll_luaopen_base},
     {"luaopen_table", (luaV_function) &dll_luaopen_table},
@@ -292,6 +389,16 @@
 
 #endif /* DYNAMIC_LUA */
 
+#if LUA_VERSION_NUM > 501
+    static int
+luaL_typeerror (lua_State *L, int narg, const char *tname)
+{
+    const char *msg = lua_pushfstring(L, "%s expected, got %s",
+	    tname, luaL_typename(L, narg));
+    return luaL_argerror(L, narg, msg);
+}
+#endif
+
 
 /* =======   Internal   ======= */
 
@@ -325,21 +432,40 @@
 }
 
     static void *
+luaV_checkcache(lua_State *L, void *p)
+{
+    luaV_getudata(L, p);
+    if (lua_isnil(L, -1)) luaL_error(L, "invalid object");
+    lua_pop(L, 1);
+    return p;
+}
+
+#define luaV_unbox(L,luatyp,ud) (*((luatyp *) lua_touserdata((L),(ud))))
+
+#define luaV_checkvalid(L,luatyp,ud) \
+    luaV_checkcache((L), (void *) luaV_unbox((L),luatyp,(ud)))
+
+    static void *
 luaV_checkudata(lua_State *L, int ud, const char *tname)
 {
     void *p = luaV_toudata(L, ud, tname);
-    if (p == NULL) luaL_typerror(L, ud, tname);
+    if (p == NULL) luaL_typeerror(L, ud, tname);
     return p;
 }
 
     static void
 luaV_pushtypval(lua_State *L, typval_T *tv)
 {
-    if (tv == NULL) luaL_error(L, "null type");
+    if (tv == NULL)
+    {
+	lua_pushnil(L);
+	return;
+    }
     switch (tv->v_type)
     {
 	case VAR_STRING:
-	    lua_pushstring(L, (char *) tv->vval.v_string);
+	    lua_pushstring(L, tv->vval.v_string == NULL
+					    ? "" : (char *)tv->vval.v_string);
 	    break;
 	case VAR_NUMBER:
 	    lua_pushinteger(L, (int) tv->vval.v_number);
@@ -349,68 +475,70 @@
 	    lua_pushnumber(L, (lua_Number) tv->vval.v_float);
 	    break;
 #endif
-	case VAR_LIST: {
-	    list_T *l = tv->vval.v_list;
+	case VAR_LIST:
+	    luaV_pushlist(L, tv->vval.v_list);
+	    break;
+	case VAR_DICT:
+	    luaV_pushdict(L, tv->vval.v_dict);
+	    break;
+	default:
+	    lua_pushnil(L);
+    }
+}
 
-	    if (l != NULL)
+/* converts lua value at 'pos' to typval 'tv' */
+    static void
+luaV_totypval (lua_State *L, int pos, typval_T *tv)
+{
+    switch(lua_type(L, pos)) {
+	case LUA_TBOOLEAN:
+	    tv->v_type = VAR_NUMBER;
+	    tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos);
+	    break;
+	case LUA_TSTRING:
+	    tv->v_type = VAR_STRING;
+	    tv->vval.v_string = vim_strsave((char_u *) lua_tostring(L, pos));
+	    break;
+	case LUA_TNUMBER:
+#ifdef FEAT_FLOAT
+	    tv->v_type = VAR_FLOAT;
+	    tv->vval.v_float = (float_T) lua_tonumber(L, pos);
+#else
+	    tv->v_type = VAR_NUMBER;
+	    tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos);
+#endif
+	    break;
+	case LUA_TUSERDATA: {
+	    void *p = lua_touserdata(L, pos);
+	    if (lua_getmetatable(L, pos)) /* has metatable? */
 	    {
-		/* check cache */
-		lua_pushlightuserdata(L, (void *) l);
-		lua_rawget(L, LUA_ENVIRONINDEX);
-		if (lua_isnil(L, -1)) /* not interned? */
+		/* check list */
+		luaV_getfield(L, LUAVIM_LIST);
+		if (lua_rawequal(L, -1, -2))
 		{
-		    listitem_T *li;
-		    int n = 0;
-		    lua_pop(L, 1); /* nil */
-		    lua_newtable(L);
-		    lua_pushlightuserdata(L, (void *) l);
-		    lua_pushvalue(L, -2);
-		    lua_rawset(L, LUA_ENVIRONINDEX);
-		    for (li = l->lv_first; li != NULL; li = li->li_next)
-		    {
-			luaV_pushtypval(L, &li->li_tv);
-			lua_rawseti(L, -2, ++n);
-		    }
+		    tv->v_type = VAR_LIST;
+		    tv->vval.v_list = *((luaV_List *) p);
+		    ++tv->vval.v_list->lv_refcount;
+		    lua_pop(L, 2); /* MTs */
+		    return;
 		}
-	    }
-	    else lua_pushnil(L);
-	    break;
-		       }
-	case VAR_DICT: {
-	    dict_T *d = tv->vval.v_dict;
-
-	    if (d != NULL)
-	    {
-		/* check cache */
-		lua_pushlightuserdata(L, (void *) d);
-		lua_rawget(L, LUA_ENVIRONINDEX);
-		if (lua_isnil(L, -1)) /* not interned? */
+		/* check dict */
+		luaV_getfield(L, LUAVIM_DICT);
+		if (lua_rawequal(L, -1, -3))
 		{
-		    hashtab_T *ht = &d->dv_hashtab;
-		    hashitem_T *hi;
-		    int n = ht->ht_used; /* remaining items */
-		    lua_pop(L, 1); /* nil */
-		    lua_newtable(L);
-		    lua_pushlightuserdata(L, (void *) d);
-		    lua_pushvalue(L, -2);
-		    lua_rawset(L, LUA_ENVIRONINDEX);
-		    for (hi = ht->ht_array; n > 0; hi++)
-		    {
-			if (!HASHITEM_EMPTY(hi))
-			{
-			    dictitem_T *di = dict_lookup(hi);
-			    luaV_pushtypval(L, &di->di_tv);
-			    lua_setfield(L, -2, (char *) hi->hi_key);
-			    n--;
-			}
-		    }
+		    tv->v_type = VAR_DICT;
+		    tv->vval.v_dict = *((luaV_Dict *) p);
+		    ++tv->vval.v_dict->dv_refcount;
+		    lua_pop(L, 3); /* MTs */
+		    return;
 		}
+		lua_pop(L, 3); /* MTs */
 	    }
-	    else lua_pushnil(L);
 	    break;
 	}
 	default:
-	    luaL_error(L, "invalid type");
+	    tv->v_type = VAR_NUMBER;
+	    tv->vval.v_number = 0;
     }
 }
 
@@ -479,89 +607,366 @@
     lua_pop(L, 2); /* original and modified strings */
 }
 
+#define luaV_newtype(typ,tname,luatyp,luatname) \
+	static luatyp * \
+    luaV_new##tname (lua_State *L, typ *obj) \
+    { \
+	luatyp *o = (luatyp *) lua_newuserdata(L, sizeof(luatyp)); \
+	*o = obj; \
+	luaV_setudata(L, obj); /* cache[obj] = udata */ \
+	luaV_getfield(L, luatname); \
+	lua_setmetatable(L, -2); \
+	return o; \
+    }
+
+#define luaV_pushtype(typ,tname,luatyp) \
+	static luatyp * \
+    luaV_push##tname (lua_State *L, typ *obj) \
+    { \
+	luatyp *o = NULL; \
+	if (obj == NULL) \
+	    lua_pushnil(L); \
+	else { \
+	    luaV_getudata(L, obj); \
+	    if (lua_isnil(L, -1)) /* not interned? */ \
+	    { \
+		lua_pop(L, 1); \
+		o = luaV_new##tname(L, obj); \
+	    } \
+	    else \
+		o = (luatyp *) lua_touserdata(L, -1); \
+	} \
+	return o; \
+    }
+
+#define luaV_type_tostring(tname,luatname) \
+	static int \
+    luaV_##tname##_tostring (lua_State *L) \
+    { \
+	lua_pushfstring(L, "%s: %p", luatname, lua_touserdata(L, 1)); \
+	return 1; \
+    }
+
+/* =======   List type   ======= */
+
+    static luaV_List *
+luaV_newlist (lua_State *L, list_T *lis)
+{
+    luaV_List *l = (luaV_List *) lua_newuserdata(L, sizeof(luaV_List));
+    *l = lis;
+    lis->lv_refcount++; /* reference in Lua */
+    luaV_setudata(L, lis); /* cache[lis] = udata */
+    luaV_getfield(L, LUAVIM_LIST);
+    lua_setmetatable(L, -2);
+    return l;
+}
+
+luaV_pushtype(list_T, list, luaV_List)
+luaV_type_tostring(list, LUAVIM_LIST)
 
-/* =======   Buffer type   ======= */
+    static int
+luaV_list_len (lua_State *L)
+{
+    list_T *l = luaV_unbox(L, luaV_List, 1);
+    lua_pushinteger(L, (l == NULL) ? 0 : (int) l->lv_len);
+    return 1;
+}
 
-    static luaV_Buffer *
-luaV_newbuffer(lua_State *L, buf_T *buf)
+    static int
+luaV_list_iter (lua_State *L)
 {
-    luaV_Buffer *b = (luaV_Buffer *) lua_newuserdata(L, sizeof(luaV_Buffer));
-    *b = buf;
-    lua_pushlightuserdata(L, (void *) buf);
-    lua_pushvalue(L, -2);
-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[buf] = udata */
-    /* to avoid GC, store as key in env */
-    lua_pushvalue(L, -1);
-    lua_pushboolean(L, 1);
-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
-    /* set metatable */
-    luaV_getfield(L, LUAVIM_BUFFER);
-    lua_setmetatable(L, -2);
-    return b;
+    listitem_T *li = (listitem_T *) lua_touserdata(L, lua_upvalueindex(2));
+    if (li == NULL) return 0;
+    luaV_pushtypval(L, &li->li_tv);
+    lua_pushlightuserdata(L, (void *) li->li_next);
+    lua_replace(L, lua_upvalueindex(2));
+    return 1;
 }
 
-    static luaV_Buffer *
-luaV_pushbuffer (lua_State *L, buf_T *buf)
+    static int
+luaV_list_call (lua_State *L)
 {
-    luaV_Buffer *b = NULL;
-    if (buf == NULL)
-	lua_pushnil(L);
-    else {
-	lua_pushlightuserdata(L, (void *) buf);
-	lua_rawget(L, LUA_ENVIRONINDEX);
-	if (lua_isnil(L, -1)) /* not interned? */
+    list_T *l = luaV_unbox(L, luaV_List, 1);
+    lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
+    lua_pushlightuserdata(L, (void *) l->lv_first);
+    lua_pushcclosure(L, luaV_list_iter, 2);
+    return 1;
+}
+
+    static int
+luaV_list_index (lua_State *L)
+{
+    list_T *l = luaV_unbox(L, luaV_List, 1);
+    if (lua_isnumber(L, 2)) /* list item? */
+    {
+	listitem_T *li = list_find(l, (long) luaL_checkinteger(L, 2));
+	if (li == NULL)
+	    lua_pushnil(L);
+	else
+	    luaV_pushtypval(L, &li->li_tv);
+    }
+    else if (lua_isstring(L, 2)) /* method? */
+    {
+	const char *s = lua_tostring(L, 2);
+	if (strncmp(s, "add", 3) == 0
+		|| strncmp(s, "insert", 6) == 0)
 	{
-	    lua_pop(L, 1);
-	    b = luaV_newbuffer(L, buf);
+	    lua_getmetatable(L, 1);
+	    lua_getfield(L, -1, s);
 	}
 	else
-	    b = (luaV_Buffer *) lua_touserdata(L, -1);
+	    lua_pushnil(L);
     }
-    return b;
+    else
+	lua_pushnil(L);
+    return 1;
 }
 
-/* Buffer metamethods */
+    static int
+luaV_list_newindex (lua_State *L)
+{
+    list_T *l = luaV_unbox(L, luaV_List, 1);
+    long n = (long) luaL_checkinteger(L, 2);
+    listitem_T *li;
+    if (l->lv_lock)
+	luaL_error(L, "list is locked");
+    li = list_find(l, n);
+    if (li == NULL) return 0;
+    if (lua_isnil(L, 3)) /* remove? */
+    {
+	list_remove(l, li, li);
+	clear_tv(&li->li_tv);
+	vim_free(li);
+    }
+    else
+    {
+	typval_T v;
+	luaV_totypval(L, 3, &v);
+	clear_tv(&li->li_tv);
+	copy_tv(&v, &li->li_tv);
+	clear_tv(&v);
+    }
+    return 0;
+}
 
     static int
-luaV_buffer_tostring(lua_State *L)
+luaV_list_add (lua_State *L)
 {
-    lua_pushfstring(L, "%s: %p", LUAVIM_BUFFER, lua_touserdata(L, 1));
+    luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
+    list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
+    typval_T v;
+    if (l->lv_lock)
+	luaL_error(L, "list is locked");
+    lua_settop(L, 2);
+    luaV_totypval(L, 2, &v);
+    if (list_append_tv(l, &v) == FAIL)
+    {
+	clear_tv(&v);
+	luaL_error(L, "Failed to add item to list");
+    }
+    clear_tv(&v);
+    lua_settop(L, 1);
+    return 1;
+}
+
+    static int
+luaV_list_insert (lua_State *L)
+{
+    luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
+    list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
+    long pos = luaL_optlong(L, 3, 0);
+    listitem_T *li = NULL;
+    typval_T v;
+    if (l->lv_lock)
+	luaL_error(L, "list is locked");
+    if (pos < l->lv_len)
+    {
+	li = list_find(l, pos);
+	if (li == NULL)
+	    luaL_error(L, "invalid position");
+    }
+    lua_settop(L, 2);
+    luaV_totypval(L, 2, &v);
+    if (list_insert_tv(l, &v, li) == FAIL)
+    {
+	clear_tv(&v);
+	luaL_error(L, "Failed to add item to list");
+    }
+    clear_tv(&v);
+    lua_settop(L, 1);
     return 1;
 }
 
+static const luaL_Reg luaV_List_mt[] = {
+    {"__tostring", luaV_list_tostring},
+    {"__len", luaV_list_len},
+    {"__call", luaV_list_call},
+    {"__index", luaV_list_index},
+    {"__newindex", luaV_list_newindex},
+    {"add", luaV_list_add},
+    {"insert", luaV_list_insert},
+    {NULL, NULL}
+};
+
+
+/* =======   Dict type   ======= */
+
+    static luaV_Dict *
+luaV_newdict (lua_State *L, dict_T *dic)
+{
+    luaV_Dict *d = (luaV_Dict *) lua_newuserdata(L, sizeof(luaV_Dict));
+    *d = dic;
+    dic->dv_refcount++; /* reference in Lua */
+    luaV_setudata(L, dic); /* cache[dic] = udata */
+    luaV_getfield(L, LUAVIM_DICT);
+    lua_setmetatable(L, -2);
+    return d;
+}
+
+luaV_pushtype(dict_T, dict, luaV_Dict)
+luaV_type_tostring(dict, LUAVIM_DICT)
+
+    static int
+luaV_dict_len (lua_State *L)
+{
+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+    lua_pushinteger(L, (d == NULL) ? 0 : (int) d->dv_hashtab.ht_used);
+    return 1;
+}
+
+    static int
+luaV_dict_iter (lua_State *L UNUSED)
+{
+#ifdef FEAT_EVAL
+    hashitem_T *hi = (hashitem_T *) lua_touserdata(L, lua_upvalueindex(2));
+    int n = lua_tointeger(L, lua_upvalueindex(3));
+    dictitem_T *di;
+    if (n <= 0) return 0;
+    while (HASHITEM_EMPTY(hi)) hi++;
+    di = dict_lookup(hi);
+    lua_pushstring(L, (char *) hi->hi_key);
+    luaV_pushtypval(L, &di->di_tv);
+    lua_pushlightuserdata(L, (void *) (hi + 1));
+    lua_replace(L, lua_upvalueindex(2));
+    lua_pushinteger(L, n - 1);
+    lua_replace(L, lua_upvalueindex(3));
+    return 2;
+#else
+    return 0;
+#endif
+}
+
+    static int
+luaV_dict_call (lua_State *L)
+{
+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+    hashtab_T *ht = &d->dv_hashtab;
+    lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
+    lua_pushlightuserdata(L, (void *) ht->ht_array);
+    lua_pushinteger(L, ht->ht_used); /* # remaining items */
+    lua_pushcclosure(L, luaV_dict_iter, 3);
+    return 1;
+}
+
+    static int
+luaV_dict_index (lua_State *L)
+{
+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+    char_u *key = (char_u *) luaL_checkstring(L, 2);
+    dictitem_T *di = dict_find(d, key, -1);
+    if (di == NULL)
+	lua_pushnil(L);
+    else
+	luaV_pushtypval(L, &di->di_tv);
+    return 1;
+}
+
+    static int
+luaV_dict_newindex (lua_State *L)
+{
+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
+    char_u *key = (char_u *) luaL_checkstring(L, 2);
+    dictitem_T *di;
+    if (d->dv_lock)
+	luaL_error(L, "dict is locked");
+    di = dict_find(d, key, -1);
+    if (di == NULL) /* non-existing key? */
+    {
+	if (lua_isnil(L, 3)) return 0;
+	di = dictitem_alloc(key);
+	if (di == NULL) return 0;
+	if (dict_add(d, di) == FAIL)
+	{
+		vim_free(di);
+		return 0;
+	}
+    }
+    else
+	clear_tv(&di->di_tv);
+    if (lua_isnil(L, 3)) /* remove? */
+    {
+	hashitem_T *hi = hash_find(&d->dv_hashtab, di->di_key);
+	hash_remove(&d->dv_hashtab, hi);
+	dictitem_free(di);
+    }
+    else {
+	typval_T v;
+	luaV_totypval(L, 3, &v);
+	copy_tv(&v, &di->di_tv);
+	clear_tv(&v);
+    }
+    return 0;
+}
+
+static const luaL_Reg luaV_Dict_mt[] = {
+    {"__tostring", luaV_dict_tostring},
+    {"__len", luaV_dict_len},
+    {"__call", luaV_dict_call},
+    {"__index", luaV_dict_index},
+    {"__newindex", luaV_dict_newindex},
+    {NULL, NULL}
+};
+
+
+/* =======   Buffer type   ======= */
+
+luaV_newtype(buf_T, buffer, luaV_Buffer, LUAVIM_BUFFER)
+luaV_pushtype(buf_T, buffer, luaV_Buffer)
+luaV_type_tostring(buffer, LUAVIM_BUFFER)
+
     static int
 luaV_buffer_len(lua_State *L)
 {
-    luaV_Buffer *b = lua_touserdata(L, 1);
-    lua_pushinteger(L, (*b)->b_ml.ml_line_count);
+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+    lua_pushinteger(L, b->b_ml.ml_line_count);
     return 1;
 }
 
     static int
 luaV_buffer_call(lua_State *L)
 {
-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
     lua_settop(L, 1);
-    set_curbuf(*b, DOBUF_SPLIT);
+    set_curbuf(b, DOBUF_SPLIT);
     return 1;
 }
 
     static int
 luaV_buffer_index(lua_State *L)
 {
-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
     linenr_T n = (linenr_T) lua_tointeger(L, 2);
-    if (n > 0 && n <= (*b)->b_ml.ml_line_count)
-	luaV_pushline(L, *b, n);
+    if (n > 0 && n <= b->b_ml.ml_line_count)
+	luaV_pushline(L, b, n);
     else if (lua_isstring(L, 2))
     {
 	const char *s = lua_tostring(L, 2);
 	if (strncmp(s, "name", 4) == 0)
-	    lua_pushstring(L, (char *) (*b)->b_sfname);
+	    lua_pushstring(L, (char *) b->b_sfname);
 	else if (strncmp(s, "fname", 5) == 0)
-	    lua_pushstring(L, (char *) (*b)->b_ffname);
+	    lua_pushstring(L, (char *) b->b_ffname);
 	else if (strncmp(s, "number", 6) == 0)
-	    lua_pushinteger(L, (*b)->b_fnum);
+	    lua_pushinteger(L, b->b_fnum);
 	/* methods */
 	else if (strncmp(s,   "insert", 6) == 0
 		|| strncmp(s, "next", 4) == 0
@@ -582,17 +987,17 @@
     static int
 luaV_buffer_newindex(lua_State *L)
 {
-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
     linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
 #ifdef HAVE_SANDBOX
     luaV_checksandbox(L);
 #endif
-    if (n < 1 || n > (*b)->b_ml.ml_line_count)
+    if (n < 1 || n > b->b_ml.ml_line_count)
 	luaL_error(L, "invalid line number");
     if (lua_isnil(L, 3)) /* delete line */
     {
 	buf_T *buf = curbuf;
-	curbuf = *b;
+	curbuf = b;
 	if (u_savedel(n, 1L) == FAIL)
 	{
 	    curbuf = buf;
@@ -605,7 +1010,7 @@
 	}
 	else {
 	    deleted_lines_mark(n, 1L);
-	    if (*b == curwin->w_buffer) /* fix cursor in current window? */
+	    if (b == curwin->w_buffer) /* fix cursor in current window? */
 	    {
 		if (curwin->w_cursor.lnum >= n)
 		{
@@ -625,7 +1030,7 @@
     else if (lua_isstring(L, 3)) /* update line */
     {
 	buf_T *buf = curbuf;
-	curbuf = *b;
+	curbuf = b;
 	if (u_savesub(n) == FAIL)
 	{
 	    curbuf = buf;
@@ -638,7 +1043,7 @@
 	}
 	else changed_bytes(n, 0);
 	curbuf = buf;
-	if (*b == curwin->w_buffer)
+	if (b == curwin->w_buffer)
 	    check_cursor_col();
     }
     else
@@ -649,8 +1054,9 @@
     static int
 luaV_buffer_insert(lua_State *L)
 {
-    luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-    linenr_T last = (*b)->b_ml.ml_line_count;
+    luaV_Buffer *lb = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+    buf_T *b = (buf_T *) luaV_checkcache(L, (void *) *lb);
+    linenr_T last = b->b_ml.ml_line_count;
     linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
     buf_T *buf;
     luaL_checktype(L, 2, LUA_TSTRING);
@@ -662,7 +1068,7 @@
     if (n > last) n = last;
     /* insert */
     buf = curbuf;
-    curbuf = *b;
+    curbuf = b;
     if (u_save(n, n + 1) == FAIL)
     {
 	curbuf = buf;
@@ -684,7 +1090,8 @@
 luaV_buffer_next(lua_State *L)
 {
     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-    luaV_pushbuffer(L, (*b)->b_next);
+    buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
+    luaV_pushbuffer(L, buf->b_next);
     return 1;
 }
 
@@ -692,7 +1099,8 @@
 luaV_buffer_previous(lua_State *L)
 {
     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-    luaV_pushbuffer(L, (*b)->b_prev);
+    buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
+    luaV_pushbuffer(L, buf->b_prev);
     return 1;
 }
 
@@ -700,8 +1108,7 @@
 luaV_buffer_isvalid(lua_State *L)
 {
     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-    lua_pushlightuserdata(L, (void *) (*b));
-    lua_rawget(L, LUA_ENVIRONINDEX);
+    luaV_getudata(L, *b);
     lua_pushboolean(L, !lua_isnil(L, -1));
     return 1;
 }
@@ -722,78 +1129,36 @@
 
 /* =======   Window type   ======= */
 
-    static luaV_Window *
-luaV_newwindow(lua_State *L, win_T *win)
-{
-    luaV_Window *w = (luaV_Window *) lua_newuserdata(L, sizeof(luaV_Window));
-    *w = win;
-    lua_pushlightuserdata(L, (void *) win);
-    lua_pushvalue(L, -2);
-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[win] = udata */
-    /* to avoid GC, store as key in env */
-    lua_pushvalue(L, -1);
-    lua_pushboolean(L, 1);
-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
-    /* set metatable */
-    luaV_getfield(L, LUAVIM_WINDOW);
-    lua_setmetatable(L, -2);
-    return w;
-}
-
-    static luaV_Window *
-luaV_pushwindow(lua_State *L, win_T *win)
-{
-    luaV_Window *w = NULL;
-    if (win == NULL)
-	lua_pushnil(L);
-    else {
-	lua_pushlightuserdata(L, (void *) win);
-	lua_rawget(L, LUA_ENVIRONINDEX);
-	if (lua_isnil(L, -1)) /* not interned? */
-	{
-	    lua_pop(L, 1);
-	    w = luaV_newwindow(L, win);
-	}
-	else w = (luaV_Window *) lua_touserdata(L, -1);
-    }
-    return w;
-}
-
-/* Window metamethods */
-
-    static int
-luaV_window_tostring(lua_State *L)
-{
-    lua_pushfstring(L, "%s: %p", LUAVIM_WINDOW, lua_touserdata(L, 1));
-    return 1;
-}
+luaV_newtype(win_T, window, luaV_Window, LUAVIM_WINDOW)
+luaV_pushtype(win_T, window, luaV_Window)
+luaV_type_tostring(window, LUAVIM_WINDOW)
 
     static int
 luaV_window_call(lua_State *L)
 {
-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
     lua_settop(L, 1);
-    win_goto(*w);
+    win_goto(w);
     return 1;
 }
 
     static int
 luaV_window_index(lua_State *L)
 {
-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
     const char *s = luaL_checkstring(L, 2);
     if (strncmp(s, "buffer", 6) == 0)
-	luaV_pushbuffer(L, (*w)->w_buffer);
+	luaV_pushbuffer(L, w->w_buffer);
     else if (strncmp(s, "line", 4) == 0)
-	lua_pushinteger(L, (*w)->w_cursor.lnum);
+	lua_pushinteger(L, w->w_cursor.lnum);
     else if (strncmp(s, "col", 3) == 0)
-	lua_pushinteger(L, (*w)->w_cursor.col + 1);
+	lua_pushinteger(L, w->w_cursor.col + 1);
 #ifdef FEAT_VERTSPLIT
     else if (strncmp(s, "width", 5) == 0)
-	lua_pushinteger(L, W_WIDTH((*w)));
+	lua_pushinteger(L, W_WIDTH(w));
 #endif
     else if (strncmp(s, "height", 6) == 0)
-	lua_pushinteger(L, (*w)->w_height);
+	lua_pushinteger(L, w->w_height);
     /* methods */
     else if (strncmp(s,   "next", 4) == 0
 	    || strncmp(s, "previous", 8) == 0
@@ -810,7 +1175,7 @@
     static int
 luaV_window_newindex (lua_State *L)
 {
-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
     const char *s = luaL_checkstring(L, 2);
     int v = luaL_checkinteger(L, 3);
     if (strncmp(s, "line", 4) == 0)
@@ -818,9 +1183,9 @@
 #ifdef HAVE_SANDBOX
 	luaV_checksandbox(L);
 #endif
-	if (v < 1 || v > (*w)->w_buffer->b_ml.ml_line_count)
+	if (v < 1 || v > w->w_buffer->b_ml.ml_line_count)
 	    luaL_error(L, "line out of range");
-	(*w)->w_cursor.lnum = v;
+	w->w_cursor.lnum = v;
 	update_screen(VALID);
     }
     else if (strncmp(s, "col", 3) == 0)
@@ -828,7 +1193,7 @@
 #ifdef HAVE_SANDBOX
 	luaV_checksandbox(L);
 #endif
-	(*w)->w_cursor.col = v - 1;
+	w->w_cursor.col = v - 1;
 	update_screen(VALID);
     }
 #ifdef FEAT_VERTSPLIT
@@ -838,7 +1203,7 @@
 #ifdef FEAT_GUI
 	need_mouse_correct = TRUE;
 #endif
-	curwin = *w;
+	curwin = w;
 	win_setwidth(v);
 	curwin = win;
     }
@@ -849,7 +1214,7 @@
 #ifdef FEAT_GUI
 	need_mouse_correct = TRUE;
 #endif
-	curwin = *w;
+	curwin = w;
 	win_setheight(v);
 	curwin = win;
     }
@@ -862,7 +1227,8 @@
 luaV_window_next(lua_State *L)
 {
     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
-    luaV_pushwindow(L, (*w)->w_next);
+    win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
+    luaV_pushwindow(L, win->w_next);
     return 1;
 }
 
@@ -870,7 +1236,8 @@
 luaV_window_previous(lua_State *L)
 {
     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
-    luaV_pushwindow(L, (*w)->w_prev);
+    win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
+    luaV_pushwindow(L, win->w_prev);
     return 1;
 }
 
@@ -878,8 +1245,7 @@
 luaV_window_isvalid(lua_State *L)
 {
     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
-    lua_pushlightuserdata(L, (void *) (*w));
-    lua_rawget(L, LUA_ENVIRONINDEX);
+    luaV_getudata(L, *w);
     lua_pushboolean(L, !lua_isnil(L, -1));
     return 1;
 }
@@ -925,6 +1291,31 @@
 }
 
     static int
+luaV_debug(lua_State *L)
+{
+    lua_settop(L, 0);
+    lua_getglobal(L, "vim");
+    lua_getfield(L, -1, "eval");
+    lua_remove(L, -2); /* vim.eval at position 1 */
+    for (;;)
+    {
+	const char *input;
+	size_t l;
+	lua_pushvalue(L, 1); /* vim.eval */
+	lua_pushliteral(L, "input('lua_debug> ')");
+	lua_call(L, 1, 1); /* return string */
+	input = lua_tolstring(L, -1, &l);
+	if (l == 0 || strcmp(input, "cont") == 0)
+	    return 0;
+	msg_putchar('\n'); /* avoid outputting on input line */
+	if (luaL_loadbuffer(L, input, l, "=(debug command)")
+		|| lua_pcall(L, 0, 0, 0))
+	    luaV_emsg(L);
+	lua_settop(L, 1); /* remove eventual returns, but keep vim.eval */
+    }
+}
+
+    static int
 luaV_command(lua_State *L)
 {
     do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
@@ -938,6 +1329,7 @@
     typval_T *tv = eval_expr((char_u *) luaL_checkstring(L, 1), NULL);
     if (tv == NULL) luaL_error(L, "invalid expression");
     luaV_pushtypval(L, tv);
+    free_tv(tv);
     return 1;
 }
 
@@ -956,6 +1348,28 @@
 }
 
     static int
+luaV_list(lua_State *L)
+{
+    list_T *l = list_alloc();
+    if (l == NULL)
+	lua_pushnil(L);
+    else
+	luaV_newlist(L, l);
+    return 1;
+}
+
+    static int
+luaV_dict(lua_State *L)
+{
+    dict_T *d = dict_alloc();
+    if (d == NULL)
+	lua_pushnil(L);
+    else
+	luaV_newdict(L, d);
+    return 1;
+}
+
+    static int
 luaV_buffer(lua_State *L)
 {
     buf_T *buf;
@@ -981,15 +1395,10 @@
 		    break;
 	    }
 	}
-	if (buf == NULL) /* not found? */
-	    lua_pushnil(L);
-	else
-	    luaV_pushbuffer(L, buf);
     }
-    else {
+    else
 	buf = (lua_toboolean(L, 1)) ? firstbuf : curbuf; /* first buffer? */
-	luaV_pushbuffer(L, buf);
-    }
+    luaV_pushbuffer(L, buf);
     return 1;
 }
 
@@ -1002,59 +1411,62 @@
 	int n = lua_tointeger(L, 1);
 	for (win = firstwin; win != NULL; win = win->w_next, n--)
 	    if (n == 1) break;
-	if (win == NULL) /* not found? */
-	    lua_pushnil(L);
-	else
-	    luaV_pushwindow(L, win);
     }
-    else {
+    else
 	win = (lua_toboolean(L, 1)) ? firstwin : curwin; /* first window? */
-	luaV_pushwindow(L, win);
-    }
+    luaV_pushwindow(L, win);
     return 1;
 }
 
     static int
 luaV_open(lua_State *L)
 {
-    luaV_Buffer *b;
     char_u *s = NULL;
 #ifdef HAVE_SANDBOX
     luaV_checksandbox(L);
 #endif
     if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
-    b = luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
-    return 1;
-}
-
-    static int
-luaV_isbuffer(lua_State *L)
-{
-    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_BUFFER) != NULL);
+    luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
     return 1;
 }
 
     static int
-luaV_iswindow(lua_State *L)
+luaV_type(lua_State *L)
 {
-    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_WINDOW) != NULL);
-    return 1;
-}
-
-/* for freeing buffer and window objects; lightuserdata as arg */
-    static int
-luaV_free(lua_State *L)
-{
-    lua_pushvalue(L, 1); /* lightudata */
-    lua_rawget(L, LUA_ENVIRONINDEX);
-    if (!lua_isnil(L, -1))
+    luaL_checkany(L, 1);
+    if (lua_type(L, 1) == LUA_TUSERDATA) /* check vim udata? */
     {
-	lua_pushnil(L);
-	lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = nil */
-	lua_pushnil(L);
-	lua_rawset(L, LUA_ENVIRONINDEX); /* env[lightudata] = nil */
+	lua_settop(L, 1);
+	if (lua_getmetatable(L, 1))
+	{
+	    luaV_getfield(L, LUAVIM_LIST);
+	    if (lua_rawequal(L, -1, 2))
+	    {
+		lua_pushstring(L, "list");
+		return 1;
+	    }
+	    luaV_getfield(L, LUAVIM_DICT);
+	    if (lua_rawequal(L, -1, 2))
+	    {
+		lua_pushstring(L, "dict");
+		return 1;
+	    }
+	    luaV_getfield(L, LUAVIM_BUFFER);
+	    if (lua_rawequal(L, -1, 2))
+	    {
+		lua_pushstring(L, "buffer");
+		return 1;
+	    }
+	    luaV_getfield(L, LUAVIM_WINDOW);
+	    if (lua_rawequal(L, -1, 2))
+	    {
+		lua_pushstring(L, "window");
+		return 1;
+	    }
+	}
     }
-    return 0;
+    lua_pushstring(L, luaL_typename(L, 1)); /* fallback */
+    return 1;
 }
 
 static const luaL_Reg luaV_module[] = {
@@ -1062,37 +1474,128 @@
     {"eval", luaV_eval},
     {"beep", luaV_beep},
     {"line", luaV_line},
+    {"list", luaV_list},
+    {"dict", luaV_dict},
     {"buffer", luaV_buffer},
     {"window", luaV_window},
     {"open", luaV_open},
-    {"isbuffer", luaV_isbuffer},
-    {"iswindow", luaV_iswindow},
+    {"type", luaV_type},
     {NULL, NULL}
 };
 
+/* for freeing list, dict, buffer and window objects; lightuserdata as arg */
+    static int
+luaV_free(lua_State *L)
+{
+    lua_pushnil(L);
+    luaV_setudata(L, lua_touserdata(L, 1));
+    return 0;
+}
+
+    static int
+luaV_luaeval (lua_State *L)
+{
+    luaL_Buffer b;
+    size_t l;
+    const char *str = lua_tolstring(L, 1, &l);
+    typval_T *arg = (typval_T *) lua_touserdata(L, 2);
+    typval_T *rettv = (typval_T *) lua_touserdata(L, 3);
+    luaL_buffinit(L, &b);
+    luaL_addlstring(&b, LUAVIM_EVALHEADER, sizeof(LUAVIM_EVALHEADER) - 1);
+    luaL_addlstring(&b, str, l);
+    luaL_pushresult(&b);
+    str = lua_tolstring(L, -1, &l);
+    if (luaL_loadbuffer(L, str, l, LUAVIM_EVALNAME)) /* compile error? */
+    {
+	luaV_emsg(L);
+	return 0;
+    }
+    luaV_pushtypval(L, arg);
+    if (lua_pcall(L, 1, 1, 0)) /* running error? */
+    {
+	luaV_emsg(L);
+	return 0;
+    }
+    luaV_totypval(L, -1, rettv);
+    return 0;
+}
+
+    static int
+luaV_setref (lua_State *L)
+{
+    int copyID = lua_tointeger(L, 1);
+    typval_T tv;
+    luaV_getfield(L, LUAVIM_LIST);
+    luaV_getfield(L, LUAVIM_DICT);
+    lua_pushnil(L);
+    while (lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
+    {
+	lua_getmetatable(L, -1);
+	if (lua_rawequal(L, -1, 2)) /* list? */
+	{
+	    tv.v_type = VAR_LIST;
+	    tv.vval.v_list = (list_T *) lua_touserdata(L, 4); /* key */
+	}
+	else if (lua_rawequal(L, -1, 3)) /* dict? */
+	{
+	    tv.v_type = VAR_DICT;
+	    tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
+	}
+	lua_pop(L, 2); /* metatable and value */
+	set_ref_in_item(&tv, copyID);
+    }
+    return 0;
+}
+
     static int
 luaopen_vim(lua_State *L)
 {
-    /* set environment */
+    /* set cache table */
     lua_newtable(L);
     lua_newtable(L);
-    lua_pushliteral(L, "v");
+    lua_pushstring(L, "v");
     lua_setfield(L, -2, "__mode");
-    lua_setmetatable(L, -2);
-    lua_replace(L, LUA_ENVIRONINDEX);
+    lua_setmetatable(L, -2); /* cache is weak-valued */
     /* print */
     lua_pushcfunction(L, luaV_print);
     lua_setglobal(L, "print");
+    /* debug.debug */
+    lua_getglobal(L, "debug");
+    lua_pushcfunction(L, luaV_debug);
+    lua_setfield(L, -2, "debug");
+    lua_pop(L, 1);
     /* free */
     lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
-    lua_pushcfunction(L, luaV_free);
+    lua_pushvalue(L, 1); /* cache table */
+    lua_pushcclosure(L, luaV_free, 1);
+    lua_rawset(L, LUA_REGISTRYINDEX);
+    /* luaeval */
+    lua_pushlightuserdata(L, (void *) LUAVIM_LUAEVAL);
+    lua_pushvalue(L, 1); /* cache table */
+    lua_pushcclosure(L, luaV_luaeval, 1);
+    lua_rawset(L, LUA_REGISTRYINDEX);
+    /* setref */
+    lua_pushlightuserdata(L, (void *) LUAVIM_SETREF);
+    lua_pushvalue(L, 1); /* cache table */
+    lua_pushcclosure(L, luaV_setref, 1);
     lua_rawset(L, LUA_REGISTRYINDEX);
     /* register */
+    luaV_newmetatable(L, LUAVIM_LIST);
+    lua_pushvalue(L, 1);
+    luaV_openlib(L, luaV_List_mt, 1);
+    luaV_newmetatable(L, LUAVIM_DICT);
+    lua_pushvalue(L, 1);
+    luaV_openlib(L, luaV_Dict_mt, 1);
     luaV_newmetatable(L, LUAVIM_BUFFER);
-    luaL_register(L, NULL, luaV_Buffer_mt);
+    lua_pushvalue(L, 1); /* cache table */
+    luaV_openlib(L, luaV_Buffer_mt, 1);
     luaV_newmetatable(L, LUAVIM_WINDOW);
-    luaL_register(L, NULL, luaV_Window_mt);
-    luaL_register(L, LUAVIM_NAME, luaV_module);
+    lua_pushvalue(L, 1); /* cache table */
+    luaV_openlib(L, luaV_Window_mt, 1);
+    lua_newtable(L); /* vim table */
+    lua_pushvalue(L, 1); /* cache table */
+    luaV_openlib(L, luaV_module, 1);
+    lua_setglobal(L, LUAVIM_NAME);
     return 0;
 }
 
@@ -1123,7 +1626,7 @@
 static lua_State *L = NULL;
 
     static int
-lua_is_open(void)
+lua_isopen(void)
 {
     return L != NULL;
 }
@@ -1131,7 +1634,7 @@
     static int
 lua_init(void)
 {
-    if (L == NULL)
+    if (!lua_isopen())
     {
 #ifdef DYNAMIC_LUA
 	if (!lua_enabled(TRUE))
@@ -1148,7 +1651,7 @@
     void
 lua_end(void)
 {
-    if (L != NULL)
+    if (lua_isopen())
     {
 	lua_close(L);
 	L = NULL;
@@ -1191,7 +1694,7 @@
     }
     luaV_setrange(L, eap->line1, eap->line2);
     luaL_buffinit(L, &b);
-    luaL_addlstring(&b, "return function(line) ", 22); /* header */
+    luaL_addlstring(&b, "return function(line, linenr) ", 30); /* header */
     luaL_addlstring(&b, s, strlen(s));
     luaL_addlstring(&b, " end", 4); /* footer */
     luaL_pushresult(&b);
@@ -1208,7 +1711,8 @@
     {
 	lua_pushvalue(L, -1); /* function */
 	luaV_pushline(L, curbuf, l); /* current line as arg */
-	if (lua_pcall(L, 1, 1, 0))
+	lua_pushinteger(L, l); /* current line number as arg */
+	if (lua_pcall(L, 2, 1, 0))
 	{
 	    luaV_emsg(L);
 	    break;
@@ -1242,23 +1746,36 @@
     }
 }
 
-/* buffer */
+#define luaV_freetype(typ,tname) \
+	void \
+    lua_##tname##_free(typ *o) \
+    { \
+	if (!lua_isopen()) return; \
+	luaV_getfield(L, LUAVIM_FREE); \
+	lua_pushlightuserdata(L, (void *) o); \
+	lua_call(L, 1, 0); \
+    }
+
+luaV_freetype(buf_T, buffer)
+luaV_freetype(win_T, window)
+
     void
-lua_buffer_free(buf_T *buf)
+do_luaeval (char_u *str, typval_T *arg, typval_T *rettv)
 {
-    if (!lua_is_open()) return;
-    luaV_getfield(L, LUAVIM_FREE);
-    lua_pushlightuserdata(L, (void *) buf);
-    lua_call(L, 1, 0);
+    lua_init();
+    luaV_getfield(L, LUAVIM_LUAEVAL);
+    lua_pushstring(L, (char *) str);
+    lua_pushlightuserdata(L, (void *) arg);
+    lua_pushlightuserdata(L, (void *) rettv);
+    lua_call(L, 3, 0);
 }
 
-/* window */
     void
-lua_window_free(win_T *win)
+set_ref_in_lua (int copyID)
 {
-    if (!lua_is_open()) return;
-    luaV_getfield(L, LUAVIM_FREE);
-    lua_pushlightuserdata(L, (void *) win);
+    if (!lua_isopen()) return;
+    luaV_getfield(L, LUAVIM_SETREF);
+    lua_pushinteger(L, copyID);
     lua_call(L, 1, 0);
 }
 
diff -Naur vim73.orig/src/if_mzsch.c vim73/src/if_mzsch.c
--- vim73.orig/src/if_mzsch.c	2010-06-26 03:56:17.000000000 +0000
+++ vim73/src/if_mzsch.c	2013-08-04 19:09:10.360611277 +0000
@@ -1,11 +1,9 @@
 /* vi:set ts=8 sts=4 sw=4:
  *
  * MzScheme interface by Sergey Khorev <sergey.khorev@gmail.com>
- * Original work by Brent Fulgham <bfulgham@debian.org>
+ * Based on work by Brent Fulgham <bfulgham@debian.org>
  * (Based on lots of help from Matthew Flatt)
  *
- * TODO Convert byte-strings to char strings?
- *
  * This consists of six parts:
  * 1. MzScheme interpreter main program
  * 2. Routines that handle the external interface between MzScheme and
@@ -31,8 +29,6 @@
  * depend". */
 #if defined(FEAT_MZSCHEME) || defined(PROTO)
 
-#include <assert.h>
-
 /* Base data structures */
 #define SCHEME_VIMBUFFERP(obj)  SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type)
 #define SCHEME_VIMWINDOWP(obj)  SAME_TYPE(SCHEME_TYPE(obj), mz_window_type)
@@ -144,7 +140,12 @@
 static int do_mzscheme_command(exarg_T *, void *, Scheme_Closed_Prim *what);
 static void startup_mzscheme(void);
 static char *string_to_line(Scheme_Object *obj);
-static void do_output(char *mesg, long len);
+#if MZSCHEME_VERSION_MAJOR >= 500
+# define OUTPUT_LEN_TYPE intptr_t
+#else
+# define OUTPUT_LEN_TYPE long
+#endif
+static void do_output(char *mesg, OUTPUT_LEN_TYPE len);
 static void do_printf(char *format, ...);
 static void do_flush(void);
 static Scheme_Object *_apply_thunk_catch_exceptions(
@@ -168,10 +169,13 @@
 static int mzscheme_env_main(Scheme_Env *env, int argc, char **argv);
 static int mzscheme_init(void);
 #ifdef FEAT_EVAL
-static Scheme_Object *vim_to_mzscheme(typval_T *vim_value, int depth,
+static Scheme_Object *vim_to_mzscheme(typval_T *vim_value);
+static Scheme_Object *vim_to_mzscheme_impl(typval_T *vim_value, int depth,
 	Scheme_Hash_Table *visited);
-static int mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
+static int mzscheme_to_vim(Scheme_Object *obj, typval_T *tv);
+static int mzscheme_to_vim_impl(Scheme_Object *obj, typval_T *tv, int depth,
 	Scheme_Hash_Table *visited);
+static Scheme_Object *vim_funcref(void *data, int argc, Scheme_Object **argv);
 #endif
 
 #ifdef MZ_PRECISE_GC
@@ -185,6 +189,13 @@
 }
 static int buffer_fixup_proc(void *obj)
 {
+    /* apparently not needed as the object will be uncollectable while
+     * the buffer is alive
+     */
+    /*
+    vim_mz_buffer* buf = (vim_mz_buffer*) obj;
+    buf->buf->b_mzscheme_ref = GC_fixup_self(obj);
+    */
     return buffer_size_proc(obj);
 }
 static int window_size_proc(void *obj UNUSED)
@@ -197,12 +208,26 @@
 }
 static int window_fixup_proc(void *obj)
 {
+    /* apparently not needed as the object will be uncollectable while
+     * the window is alive
+     */
+    /*
+    vim_mz_window* win = (vim_mz_window*) obj;
+    win->win->w_mzscheme_ref = GC_fixup_self(obj);
+    */
     return window_size_proc(obj);
 }
+/* with precise GC, w_mzscheme_ref and b_mzscheme_ref are immobile boxes
+ * containing pointers to a window/buffer
+ * with conservative GC these are simply pointers*/
+# define WINDOW_REF(win) *(vim_mz_window **)((win)->w_mzscheme_ref)
+# define BUFFER_REF(buf) *(vim_mz_buffer **)((buf)->b_mzscheme_ref)
+#else
+# define WINDOW_REF(win) (vim_mz_window *)((win)->w_mzscheme_ref)
+# define BUFFER_REF(buf) (vim_mz_buffer *)((buf)->b_mzscheme_ref)
 #endif
 
 #ifdef DYNAMIC_MZSCHEME
-
 static Scheme_Object *dll_scheme_eof;
 static Scheme_Object *dll_scheme_false;
 static Scheme_Object *dll_scheme_void;
@@ -321,6 +346,7 @@
     (Scheme_Object *s);
 static Scheme_Object *(*dll_scheme_char_string_to_path)
     (Scheme_Object *s);
+static void *(*dll_scheme_set_collects_path)(Scheme_Object *p);
 # endif
 static Scheme_Hash_Table *(*dll_scheme_make_hash_table)(int type);
 static void (*dll_scheme_hash_set)(Scheme_Hash_Table *table,
@@ -380,11 +406,11 @@
 # endif
 # define scheme_gc_ptr_ok dll_scheme_gc_ptr_ok
 # if MZSCHEME_VERSION_MAJOR < 299
-#  define scheme_get_sized_string_output dll_scheme_get_sized_string_output
+#  define scheme_get_sized_byte_string_output dll_scheme_get_sized_string_output
 # else
 #  define scheme_get_sized_byte_string_output \
     dll_scheme_get_sized_byte_string_output
-# define scheme_get_param dll_scheme_get_param
+#  define scheme_get_param dll_scheme_get_param
 # endif
 # define scheme_intern_symbol dll_scheme_intern_symbol
 # define scheme_lookup_global dll_scheme_lookup_global
@@ -393,8 +419,8 @@
 # define scheme_make_pair dll_scheme_make_pair
 # define scheme_make_prim_w_arity dll_scheme_make_prim_w_arity
 # if MZSCHEME_VERSION_MAJOR < 299
-#  define scheme_make_string dll_scheme_make_string
-#  define scheme_make_string_output_port dll_scheme_make_string_output_port
+#  define scheme_make_byte_string dll_scheme_make_string
+#  define scheme_make_byte_string_output_port dll_scheme_make_string_output_port
 # else
 #  define scheme_make_byte_string dll_scheme_make_byte_string
 #  define scheme_make_byte_string_output_port \
@@ -423,6 +449,7 @@
     dll_scheme_char_string_to_byte_string
 #  define scheme_char_string_to_path \
     dll_scheme_char_string_to_path
+#  define scheme_set_collects_path dll_scheme_set_collects_path
 # endif
 # define scheme_make_hash_table dll_scheme_make_hash_table
 # define scheme_hash_set dll_scheme_hash_set
@@ -531,6 +558,7 @@
     {"scheme_char_string_to_byte_string",
 	(void **)&dll_scheme_char_string_to_byte_string},
     {"scheme_char_string_to_path", (void **)&dll_scheme_char_string_to_path},
+    {"scheme_set_collects_path", (void **)&dll_scheme_set_collects_path},
 # endif
     {"scheme_make_hash_table", (void **)&dll_scheme_make_hash_table},
     {"scheme_hash_set", (void **)&dll_scheme_hash_set},
@@ -556,20 +584,20 @@
 
     if (hMzGC && hMzSch)
 	return OK;
-    hMzSch = LoadLibrary(sch_dll);
-    hMzGC = LoadLibrary(gc_dll);
+    hMzSch = vimLoadLib(sch_dll);
+    hMzGC = vimLoadLib(gc_dll);
 
-    if (!hMzSch)
+    if (!hMzGC)
     {
 	if (verbose)
-	    EMSG2(_(e_loadlib), sch_dll);
+	    EMSG2(_(e_loadlib), gc_dll);
 	return FAIL;
     }
 
-    if (!hMzGC)
+    if (!hMzSch)
     {
 	if (verbose)
-	    EMSG2(_(e_loadlib), gc_dll);
+	    EMSG2(_(e_loadlib), sch_dll);
 	return FAIL;
     }
 
@@ -627,11 +655,40 @@
 }
 #endif /* DYNAMIC_MZSCHEME */
 
+#if MZSCHEME_VERSION_MAJOR < 299
+# define GUARANTEED_STRING_ARG(proc, num) GUARANTEE_STRING(proc, num)
+#else
+    static Scheme_Object *
+guaranteed_byte_string_arg(char *proc, int num, int argc, Scheme_Object **argv)
+{
+    if (SCHEME_BYTE_STRINGP(argv[num]))
+    {
+	return argv[num];
+    }
+    else if (SCHEME_CHAR_STRINGP(argv[num]))
+    {
+	Scheme_Object *tmp = NULL;
+	MZ_GC_DECL_REG(2);
+	MZ_GC_VAR_IN_REG(0, argv[num]);
+	MZ_GC_VAR_IN_REG(1, tmp);
+	MZ_GC_REG();
+	tmp = scheme_char_string_to_byte_string(argv[num]);
+	MZ_GC_UNREG();
+	return tmp;
+    }
+    else
+	scheme_wrong_type(proc, "string", num, argc, argv);
+    /* unreachable */
+    return scheme_void;
+}
+# define GUARANTEED_STRING_ARG(proc, num) guaranteed_byte_string_arg(proc, num, argc, argv)
+#endif
+
 /* need to put it here for dynamic stuff to work */
 #if defined(INCLUDE_MZSCHEME_BASE)
 # include "mzscheme_base.c"
 #elif MZSCHEME_VERSION_MAJOR >= 400
-# error MzScheme 4.x must include mzscheme_base.c, for MinGW32 you need to define MZSCHEME_GENERATE_BASE=yes
+# error MzScheme >=4 must include mzscheme_base.c, for MinGW32 you need to define MZSCHEME_GENERATE_BASE=yes
 #endif
 
 /*
@@ -794,65 +851,80 @@
 #endif
 }
 
-    void
-mzscheme_main(void)
+#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
+static __declspec(thread) void *tls_space;
+#endif
+
+/*
+ * Since version 4.x precise GC requires trampolined startup.
+ * Futures and places in version 5.x need it too.
+ */
+#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 \
+    || MZSCHEME_VERSION_MAJOR >= 500 && (defined(MZ_USE_FUTURES) || defined(MZ_USE_PLACES))
+# ifdef DYNAMIC_MZSCHEME
+#  error Precise GC v.4+ or Racket with futures/places do not support dynamic MzScheme
+# endif
+# define TRAMPOLINED_MZVIM_STARTUP
+#endif
+
+    int
+mzscheme_main(int argc, char** argv)
 {
-#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
-    /* use trampoline for precise GC in MzScheme >= 4.x */
-    scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
+#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
+    scheme_register_tls_space(&tls_space, 0);
+#endif
+#ifdef TRAMPOLINED_MZVIM_STARTUP
+    return scheme_main_setup(TRUE, mzscheme_env_main, argc, argv);
 #else
-    mzscheme_env_main(NULL, 0, NULL);
+    return mzscheme_env_main(NULL, argc, argv);
 #endif
 }
 
     static int
-mzscheme_env_main(Scheme_Env *env, int argc UNUSED, char **argv UNUSED)
+mzscheme_env_main(Scheme_Env *env, int argc, char **argv)
 {
-    /* neither argument nor return values are used */
-#ifdef MZ_PRECISE_GC
-# if MZSCHEME_VERSION_MAJOR < 400
-    /*
-     * Starting from version 4.x, embedding applications must use
-     * scheme_main_setup/scheme_main_stack_setup trampolines
-     * rather than setting stack base directly with scheme_set_stack_base
-     */
+    int vim_main_result;
+#ifdef TRAMPOLINED_MZVIM_STARTUP
+    /* Scheme has created the environment for us */
+    environment = env;
+#else
+# ifdef MZ_PRECISE_GC
     Scheme_Object   *dummy = NULL;
     MZ_GC_DECL_REG(1);
     MZ_GC_VAR_IN_REG(0, dummy);
 
     stack_base = &__gc_var_stack__;
 # else
-    /* environment has been created by us by Scheme */
-    environment = env;
-# endif
-    /*
-     * In 4.x, all activities must be performed inside trampoline
-     * so we are forced to initialise GC immediately
-     * This can be postponed in 3.x but I see no point in implementing
-     * a feature which will work in older versions only.
-     * One would better use conservative GC if he needs dynamic MzScheme
-     */
-    mzscheme_init();
-#else
     int dummy = 0;
     stack_base = (void *)&dummy;
+# endif
 #endif
-    main_loop(FALSE, FALSE);
-#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400
+
+    /* mzscheme_main is called as a trampoline from main.
+     * We trampoline into vim_main2
+     * Passing argc, argv through from mzscheme_main
+     */
+    vim_main_result = vim_main2(argc, argv);
+#if !defined(TRAMPOLINED_MZVIM_STARTUP) && defined(MZ_PRECISE_GC)
     /* releasing dummy */
     MZ_GC_REG();
     MZ_GC_UNREG();
 #endif
-    return 0;
+    return vim_main_result;
 }
 
     static void
 startup_mzscheme(void)
 {
-#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
+#ifndef TRAMPOLINED_MZVIM_STARTUP
     scheme_set_stack_base(stack_base, 1);
 #endif
 
+#ifndef TRAMPOLINED_MZVIM_STARTUP
+    /* in newer versions of precise GC the initial env has been created */
+    environment = scheme_basic_env();
+#endif
+
     MZ_REGISTER_STATIC(environment);
     MZ_REGISTER_STATIC(curout);
     MZ_REGISTER_STATIC(curerr);
@@ -861,10 +933,6 @@
     MZ_REGISTER_STATIC(exn_message);
     MZ_REGISTER_STATIC(vim_exn);
 
-#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
-    /* in newer versions of precise GC the initial env has been created */
-    environment = scheme_basic_env();
-#endif
     MZ_GC_CHECK();
 
 #ifdef INCLUDE_MZSCHEME_BASE
@@ -897,10 +965,32 @@
 #ifdef MZSCHEME_COLLECTS
     /* setup 'current-library-collection-paths' parameter */
 # if MZSCHEME_VERSION_MAJOR >= 299
+#  ifdef MACOS
     {
 	Scheme_Object	*coll_byte_string = NULL;
 	Scheme_Object	*coll_char_string = NULL;
 	Scheme_Object	*coll_path = NULL;
+
+	MZ_GC_DECL_REG(3);
+	MZ_GC_VAR_IN_REG(0, coll_byte_string);
+	MZ_GC_VAR_IN_REG(1, coll_char_string);
+	MZ_GC_VAR_IN_REG(2, coll_path);
+	MZ_GC_REG();
+	coll_byte_string = scheme_make_byte_string(MZSCHEME_COLLECTS);
+	MZ_GC_CHECK();
+	coll_char_string = scheme_byte_string_to_char_string(coll_byte_string);
+	MZ_GC_CHECK();
+	coll_path = scheme_char_string_to_path(coll_char_string);
+	MZ_GC_CHECK();
+	scheme_set_collects_path(coll_path);
+	MZ_GC_CHECK();
+	MZ_GC_UNREG();
+    }
+#  else
+   {
+	Scheme_Object	*coll_byte_string = NULL;
+	Scheme_Object	*coll_char_string = NULL;
+	Scheme_Object	*coll_path = NULL;
 	Scheme_Object	*coll_pair = NULL;
 	Scheme_Config	*config = NULL;
 
@@ -919,12 +1009,13 @@
 	MZ_GC_CHECK();
 	coll_pair = scheme_make_pair(coll_path, scheme_null);
 	MZ_GC_CHECK();
-	config = scheme_config;
+	config = scheme_current_config();
 	MZ_GC_CHECK();
 	scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair);
 	MZ_GC_CHECK();
 	MZ_GC_UNREG();
     }
+#  endif
 # else
     {
 	Scheme_Object	*coll_string = NULL;
@@ -936,11 +1027,11 @@
 	MZ_GC_VAR_IN_REG(1, coll_pair);
 	MZ_GC_VAR_IN_REG(2, config);
 	MZ_GC_REG();
-	coll_string = scheme_make_string(MZSCHEME_COLLECTS);
+	coll_string = scheme_make_byte_string(MZSCHEME_COLLECTS);
 	MZ_GC_CHECK();
 	coll_pair = scheme_make_pair(coll_string, scheme_null);
 	MZ_GC_CHECK();
-	config = scheme_config;
+	config = scheme_current_config();
 	MZ_GC_CHECK();
 	scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair);
 	MZ_GC_CHECK();
@@ -983,7 +1074,7 @@
 	    MZ_GC_VAR_IN_REG(3, guard);
 	    MZ_GC_VAR_IN_REG(4, config);
 	    MZ_GC_REG();
-	    config = scheme_config;
+	    config = scheme_current_config();
 	    MZ_GC_CHECK();
 	    args[0] = scheme_get_param(config, MZCONFIG_SECURITY_GUARD);
 	    MZ_GC_CHECK();
@@ -1047,12 +1138,12 @@
 	MZ_GC_DECL_REG(1);
 	MZ_GC_VAR_IN_REG(0, config);
 	MZ_GC_REG();
-	config = scheme_config;
+	config = scheme_current_config();
 	MZ_GC_CHECK();
 	/* recreate ports each call effectively clearing these ones */
-	curout = scheme_make_string_output_port();
+	curout = scheme_make_byte_string_output_port();
 	MZ_GC_CHECK();
-	curerr = scheme_make_string_output_port();
+	curerr = scheme_make_byte_string_output_port();
 	MZ_GC_CHECK();
 	scheme_set_param(config, MZCONFIG_OUTPUT_PORT, curout);
 	MZ_GC_CHECK();
@@ -1141,13 +1232,21 @@
 {
     if (buf->b_mzscheme_ref)
     {
-	vim_mz_buffer *bp;
+	vim_mz_buffer *bp = NULL;
+	MZ_GC_DECL_REG(1);
+	MZ_GC_VAR_IN_REG(0, bp);
+	MZ_GC_REG();
 
-	bp = buf->b_mzscheme_ref;
+	bp = BUFFER_REF(buf);
 	bp->buf = INVALID_BUFFER_VALUE;
-	buf->b_mzscheme_ref = NULL;
+#ifndef MZ_PRECISE_GC
 	scheme_gc_ptr_ok(bp);
+#else
+	scheme_free_immobile_box(buf->b_mzscheme_ref);
+#endif
+	buf->b_mzscheme_ref = NULL;
 	MZ_GC_CHECK();
+	MZ_GC_UNREG();
     }
 }
 
@@ -1159,12 +1258,20 @@
 {
     if (win->w_mzscheme_ref)
     {
-	vim_mz_window *wp;
-	wp = win->w_mzscheme_ref;
+	vim_mz_window *wp = NULL;
+	MZ_GC_DECL_REG(1);
+	MZ_GC_VAR_IN_REG(0, wp);
+	MZ_GC_REG();
+	wp = WINDOW_REF(win);
 	wp->win = INVALID_WINDOW_VALUE;
-	win->w_mzscheme_ref = NULL;
+#ifndef MZ_PRECISE_GC
 	scheme_gc_ptr_ok(wp);
+#else
+	scheme_free_immobile_box(win->w_mzscheme_ref);
+#endif
+	win->w_mzscheme_ref = NULL;
 	MZ_GC_CHECK();
+	MZ_GC_UNREG();
     }
 }
 
@@ -1341,8 +1448,9 @@
 }
 
     static void
-do_output(char *mesg, long len UNUSED)
+do_output(char *mesg, OUTPUT_LEN_TYPE len UNUSED)
 {
+    /* TODO: use len, the string may not be NUL terminated */
     do_intrnl_output(mesg, 0);
 }
 
@@ -1362,9 +1470,9 @@
 do_flush(void)
 {
     char *buff;
-    long length;
+    OUTPUT_LEN_TYPE length;
 
-    buff = scheme_get_sized_string_output(curerr, &length);
+    buff = scheme_get_sized_byte_string_output(curerr, &length);
     MZ_GC_CHECK();
     if (length)
     {
@@ -1372,7 +1480,7 @@
 	return;
     }
 
-    buff = scheme_get_sized_string_output(curout, &length);
+    buff = scheme_get_sized_byte_string_output(curout, &length);
     MZ_GC_CHECK();
     if (length)
 	do_output(buff, length);
@@ -1389,42 +1497,43 @@
 vim_command(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim	*prim = (Vim_Prim *)data;
-    char	*cmd = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
+    Scheme_Object *cmd = NULL;
+    MZ_GC_DECL_REG(1);
+    MZ_GC_VAR_IN_REG(0, cmd);
+    MZ_GC_REG();
+    cmd = GUARANTEED_STRING_ARG(prim->name, 0);
 
     /* may be use do_cmdline_cmd? */
-    do_cmdline((char_u *)cmd, NULL, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
+    do_cmdline(BYTE_STRING_VALUE(cmd), NULL, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
     update_screen(VALID);
 
+    MZ_GC_UNREG();
     raise_if_error();
     return scheme_void;
 }
 
 /* (eval {expr-string}) */
     static Scheme_Object *
-vim_eval(void *data, int argc, Scheme_Object **argv)
+vim_eval(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
 {
 #ifdef FEAT_EVAL
     Vim_Prim		*prim = (Vim_Prim *)data;
-    char		*expr;
-    Scheme_Object	*result;
-    /* hash table to store visited values to avoid infinite loops */
-    Scheme_Hash_Table	*visited = NULL;
+    Scheme_Object	*result = NULL;
     typval_T		*vim_result;
-
-    MZ_GC_DECL_REG(1);
-    MZ_GC_VAR_IN_REG(0, visited);
+    Scheme_Object *expr = NULL;
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, result);
+    MZ_GC_VAR_IN_REG(1, expr);
     MZ_GC_REG();
+    expr = GUARANTEED_STRING_ARG(prim->name, 0);
 
-    visited = scheme_make_hash_table(SCHEME_hash_ptr);
-    MZ_GC_CHECK();
-
-    expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
-    vim_result = eval_expr((char_u *)expr, NULL);
+    vim_result = eval_expr(BYTE_STRING_VALUE(expr), NULL);
 
     if (vim_result == NULL)
 	raise_vim_exn(_("invalid expression"));
 
-    result = vim_to_mzscheme(vim_result, 1, visited);
+    result = vim_to_mzscheme(vim_result);
+    MZ_GC_CHECK();
     free_tv(vim_result);
 
     MZ_GC_UNREG();
@@ -1465,16 +1574,21 @@
 get_option(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim	    *prim = (Vim_Prim *)data;
-    char_u	    *name;
     long	    value;
     char	    *strval;
     int		    rc;
-    Scheme_Object   *rval;
+    Scheme_Object   *rval = NULL;
+    Scheme_Object   *name = NULL;
     int		    opt_flags = 0;
     buf_T	    *save_curb = curbuf;
     win_T	    *save_curw = curwin;
 
-    name = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, rval);
+    MZ_GC_VAR_IN_REG(1, name);
+    MZ_GC_REG();
+
+    name = GUARANTEED_STRING_ARG(prim->name, 0);
 
     if (argc > 1)
     {
@@ -1504,23 +1618,27 @@
 	    scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv);
     }
 
-    rc = get_option_value(name, &value, (char_u **)&strval, opt_flags);
+    rc = get_option_value(BYTE_STRING_VALUE(name), &value, (char_u **)&strval, opt_flags);
     curbuf = save_curb;
     curwin = save_curw;
 
     switch (rc)
     {
     case 1:
+	MZ_GC_UNREG();
 	return scheme_make_integer_value(value);
     case 0:
-	rval = scheme_make_string(strval);
+	rval = scheme_make_byte_string(strval);
 	MZ_GC_CHECK();
 	vim_free(strval);
+	MZ_GC_UNREG();
 	return rval;
     case -1:
     case -2:
+	MZ_GC_UNREG();
 	raise_vim_exn(_("hidden option"));
     case -3:
+	MZ_GC_UNREG();
 	raise_vim_exn(_("unknown option"));
     }
     /* unreachable */
@@ -1531,13 +1649,18 @@
     static Scheme_Object *
 set_option(void *data, int argc, Scheme_Object **argv)
 {
-    char_u	*cmd;
+    char_u	*command = NULL;
     int		opt_flags = 0;
     buf_T	*save_curb = curbuf;
     win_T	*save_curw = curwin;
     Vim_Prim	*prim = (Vim_Prim *)data;
+    Scheme_Object *cmd = NULL;
+
+    MZ_GC_DECL_REG(1);
+    MZ_GC_VAR_IN_REG(0, cmd);
+    MZ_GC_REG();
+    cmd = GUARANTEED_STRING_ARG(prim->name, 0);
 
-    GUARANTEE_STRING(prim->name, 0);
     if (argc > 1)
     {
 	if (M_global == NULL)
@@ -1566,9 +1689,10 @@
     }
 
     /* do_set can modify cmd, make copy */
-    cmd = vim_strsave((char_u *)SCHEME_STR_VAL(argv[0]));
-    do_set(cmd, opt_flags);
-    vim_free(cmd);
+    command = vim_strsave(BYTE_STRING_VALUE(cmd));
+    MZ_GC_UNREG();
+    do_set(command, opt_flags);
+    vim_free(command);
     update_screen(NOT_VALID);
     curbuf = save_curb;
     curwin = save_curw;
@@ -1593,10 +1717,12 @@
     static Scheme_Object *
 get_window_count(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
 {
-    win_T   *w;
     int	    n = 0;
+#ifdef FEAT_WINDOWS
+    win_T   *w;
 
     for (w = firstwin; w != NULL; w = w->w_next)
+#endif
 	++n;
     return scheme_make_integer(n);
 }
@@ -1608,12 +1734,14 @@
     Vim_Prim	    *prim = (Vim_Prim *)data;
     vim_mz_buffer   *buf;
     Scheme_Object   *list;
-    win_T	    *w;
+    win_T	    *w = firstwin;
 
     buf = get_buffer_arg(prim->name, 0, argc, argv);
     list = scheme_null;
 
-    for (w = firstwin; w != NULL; w = w->w_next)
+#ifdef FEAT_WINDOWS
+    for ( ; w != NULL; w = w->w_next)
+#endif
 	if (w->w_buffer == buf->buf)
 	{
 	    list = scheme_make_pair(window_new(w), list);
@@ -1630,7 +1758,6 @@
 
     MZ_GC_DECL_REG(1);
     MZ_GC_VAR_IN_REG(0, self);
-    MZ_GC_REG();
 
     /* We need to handle deletion of windows underneath us.
      * If we add a "w_mzscheme_ref" field to the win_T structure,
@@ -1641,30 +1768,38 @@
      * object, and reject them if the win_T *field is invalid.
      */
     if (win->w_mzscheme_ref != NULL)
-	return win->w_mzscheme_ref;
+	return (Scheme_Object *)WINDOW_REF(win);
 
-    self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window));
+    MZ_GC_REG();
+    self = scheme_malloc_fail_ok(scheme_malloc_tagged, sizeof(vim_mz_window));
     vim_memset(self, 0, sizeof(vim_mz_window));
+#ifndef MZ_PRECISE_GC
     scheme_dont_gc_ptr(self);	/* because win isn't visible to GC */
+#else
+    win->w_mzscheme_ref = scheme_malloc_immobile_box(NULL);
+#endif
+    MZ_GC_CHECK();
+    WINDOW_REF(win) = self;
     MZ_GC_CHECK();
-    win->w_mzscheme_ref = self;
     self->win = win;
     self->so.type = mz_window_type;
 
     MZ_GC_UNREG();
-    return (Scheme_Object *)(self);
+    return (Scheme_Object *)self;
 }
 
 /* (get-win-num [window]) */
     static Scheme_Object *
-get_window_num(void *data, int argc, Scheme_Object **argv)
+get_window_num(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
 {
+    int		nr = 1;
+#ifdef FEAT_WINDOWS
     Vim_Prim	*prim = (Vim_Prim *)data;
     win_T	*win = get_window_arg(prim->name, 0, argc, argv)->win;
-    int		nr = 1;
     win_T	*wp;
 
     for (wp = firstwin; wp != win; wp = wp->w_next)
+#endif
 	++nr;
 
     return scheme_make_integer(nr);
@@ -1675,14 +1810,16 @@
 get_window_by_num(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim	*prim = (Vim_Prim *)data;
-    win_T	*win;
+    win_T	*win = firstwin;
     int		fnum;
 
     fnum = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0));
     if (fnum < 1)
 	scheme_signal_error(_("window index is out of range"));
 
-    for (win = firstwin; win != NULL; win = win->w_next, --fnum)
+#ifdef FEAT_WINDOWS
+    for ( ; win != NULL; win = win->w_next, --fnum)
+#endif
 	if (fnum == 1)	    /* to be 1-based */
 	    return window_new(win);
 
@@ -1828,22 +1965,31 @@
 mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv)
 {
     Vim_Prim	    *prim = (Vim_Prim *)data;
-    char_u	    *fname;
     int		    num = 0;
-    Scheme_Object   *onum;
+    Scheme_Object   *onum = NULL;
+    Scheme_Object   *buf = NULL;
+    Scheme_Object   *fname;
+
+    MZ_GC_DECL_REG(3);
+    MZ_GC_VAR_IN_REG(0, onum);
+    MZ_GC_VAR_IN_REG(1, buf);
+    MZ_GC_VAR_IN_REG(2, fname);
+    MZ_GC_REG();
+    fname = GUARANTEED_STRING_ARG(prim->name, 0);
 
 #ifdef HAVE_SANDBOX
     sandbox_check();
 #endif
-    fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
     /* TODO make open existing file */
-    num = buflist_add(fname, BLN_LISTED | BLN_CURBUF);
+    num = buflist_add(BYTE_STRING_VALUE(fname), BLN_LISTED | BLN_CURBUF);
 
     if (num == 0)
 	raise_vim_exn(_("couldn't open buffer"));
 
     onum = scheme_make_integer(num);
-    return get_buffer_by_num(data, 1, &onum);
+    buf = get_buffer_by_num(data, 1, &onum);
+    MZ_GC_UNREG();
+    return buf;
 }
 
 /* (get-buff-by-num {buffernum}) */
@@ -1869,23 +2015,34 @@
 {
     Vim_Prim	*prim = (Vim_Prim *)data;
     buf_T	*buf;
-    char_u	*fname;
+    Scheme_Object *buffer = NULL;
+    Scheme_Object *fname = NULL;
 
-    fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, buffer);
+    MZ_GC_VAR_IN_REG(1, fname);
+    MZ_GC_REG();
+    fname = GUARANTEED_STRING_ARG(prim->name, 0);
+    buffer = scheme_false;
 
     for (buf = firstbuf; buf; buf = buf->b_next)
+    {
 	if (buf->b_ffname == NULL || buf->b_sfname == NULL)
 	    /* empty string */
 	{
-	    if (fname[0] == NUL)
-		return buffer_new(buf);
+	    if (BYTE_STRING_VALUE(fname)[0] == NUL)
+		buffer = buffer_new(buf);
 	}
-	else if (!fnamecmp(buf->b_ffname, fname)
-		|| !fnamecmp(buf->b_sfname, fname))
+	else if (!fnamecmp(buf->b_ffname, BYTE_STRING_VALUE(fname))
+		|| !fnamecmp(buf->b_sfname, BYTE_STRING_VALUE(fname)))
+	{
 	    /* either short or long filename matches */
-	    return buffer_new(buf);
+	    buffer = buffer_new(buf);
+	}
+    }
 
-    return scheme_false;
+    MZ_GC_UNREG();
+    return buffer;
 }
 
 /* (get-next-buff [buffer]) */
@@ -1942,7 +2099,7 @@
     Vim_Prim	    *prim = (Vim_Prim *)data;
     vim_mz_buffer   *buf = get_buffer_arg(prim->name, 0, argc, argv);
 
-    return scheme_make_string((char *)buf->buf->b_ffname);
+    return scheme_make_byte_string((char *)buf->buf->b_ffname);
 }
 
 /* (curr-buff) */
@@ -1959,25 +2116,30 @@
 
     MZ_GC_DECL_REG(1);
     MZ_GC_VAR_IN_REG(0, self);
-    MZ_GC_REG();
 
     /* We need to handle deletion of buffers underneath us.
      * If we add a "b_mzscheme_ref" field to the buf_T structure,
      * then we can get at it in buf_freeall() in vim.
      */
     if (buf->b_mzscheme_ref)
-	return buf->b_mzscheme_ref;
+	return (Scheme_Object *)BUFFER_REF(buf);
 
-    self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer));
+    MZ_GC_REG();
+    self = scheme_malloc_fail_ok(scheme_malloc_tagged, sizeof(vim_mz_buffer));
     vim_memset(self, 0, sizeof(vim_mz_buffer));
-    scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */
+#ifndef MZ_PRECISE_GC
+    scheme_dont_gc_ptr(self);	/* because buf isn't visible to GC */
+#else
+    buf->b_mzscheme_ref = scheme_malloc_immobile_box(NULL);
+#endif
+    MZ_GC_CHECK();
+    BUFFER_REF(buf) = self;
     MZ_GC_CHECK();
-    buf->b_mzscheme_ref = self;
     self->buf = buf;
     self->so.type = mz_buffer_type;
 
     MZ_GC_UNREG();
-    return (Scheme_Object *)(self);
+    return (Scheme_Object *)self;
 }
 
 /*
@@ -2014,7 +2176,7 @@
     line = ml_get_buf(buf->buf, (linenr_T)linenr, FALSE);
 
     raise_if_error();
-    return scheme_make_string((char *)line);
+    return scheme_make_byte_string((char *)line);
 }
 
 
@@ -2057,7 +2219,7 @@
 
     for (i = n; i >= 0; --i)
     {
-	Scheme_Object *str = scheme_make_string(
+	Scheme_Object *str = scheme_make_byte_string(
 		       (char *)ml_get_buf(buf->buf, (linenr_T)(lo+i), FALSE));
 	raise_if_error();
 
@@ -2289,8 +2451,8 @@
 	    MZ_GC_VAR_IN_REG(1, rest);
 	    MZ_GC_REG();
 
-	    array = (char **)alloc(new_len * sizeof(char *));
-	    vim_memset(array, 0, new_len * sizeof(char *));
+	    array = (char **)alloc((new_len+1)* sizeof(char *));
+	    vim_memset(array, 0, (new_len+1) * sizeof(char *));
 
 	    rest = line_list;
 	    for (i = 0; i < new_len; ++i)
@@ -2472,8 +2634,8 @@
 	MZ_GC_VAR_IN_REG(1, rest);
 	MZ_GC_REG();
 
-	array = (char **)alloc(size * sizeof(char *));
-	vim_memset(array, 0, size * sizeof(char *));
+	array = (char **)alloc((size+1) * sizeof(char *));
+	vim_memset(array, 0, (size+1) * sizeof(char *));
 
 	rest = list;
 	for (i = 0; i < size; ++i)
@@ -2580,7 +2742,7 @@
 {
     char	*scheme_str = NULL;
     char	*vim_str = NULL;
-    long	len;
+    OUTPUT_LEN_TYPE	len;
     int		i;
 
     scheme_str = scheme_display_to_string(obj, &len);
@@ -2616,13 +2778,35 @@
  * Convert Vim value into MzScheme, adopted from if_python.c
  */
     static Scheme_Object *
-vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
+vim_to_mzscheme(typval_T *vim_value)
+{
+    Scheme_Object	*result = NULL;
+    /* hash table to store visited values to avoid infinite loops */
+    Scheme_Hash_Table	*visited = NULL;
+
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, result);
+    MZ_GC_VAR_IN_REG(1, visited);
+    MZ_GC_REG();
+
+    visited = scheme_make_hash_table(SCHEME_hash_ptr);
+    MZ_GC_CHECK();
+
+    result = vim_to_mzscheme_impl(vim_value, 1, visited);
+
+    MZ_GC_UNREG();
+    return result;
+}
+
+    static Scheme_Object *
+vim_to_mzscheme_impl(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
 {
     Scheme_Object   *result = NULL;
     int		    new_value = TRUE;
 
-    MZ_GC_DECL_REG(1);
+    MZ_GC_DECL_REG(2);
     MZ_GC_VAR_IN_REG(0, result);
+    MZ_GC_VAR_IN_REG(1, visited);
     MZ_GC_REG();
 
     /* Avoid infinite recursion */
@@ -2641,7 +2825,7 @@
 	new_value = FALSE;
     else if (vim_value->v_type == VAR_STRING)
     {
-	result = scheme_make_string((char *)vim_value->vval.v_string);
+	result = scheme_make_byte_string((char *)vim_value->vval.v_string);
 	MZ_GC_CHECK();
     }
     else if (vim_value->v_type == VAR_NUMBER)
@@ -2672,14 +2856,14 @@
 	    MZ_GC_REG();
 
 	    curr = list->lv_last;
-	    obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited);
+	    obj = vim_to_mzscheme_impl(&curr->li_tv, depth + 1, visited);
 	    result = scheme_make_pair(obj, scheme_null);
 	    MZ_GC_CHECK();
 
 	    while (curr != list->lv_first)
 	    {
 		curr = curr->li_prev;
-		obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited);
+		obj = vim_to_mzscheme_impl(&curr->li_tv, depth + 1, visited);
 		result = scheme_make_pair(obj, result);
 		MZ_GC_CHECK();
 	    }
@@ -2712,8 +2896,8 @@
 		    --todo;
 
 		    di = dict_lookup(hi);
-		    obj = vim_to_mzscheme(&di->di_tv, depth + 1, visited);
-		    key = scheme_make_string((char *)hi->hi_key);
+		    obj = vim_to_mzscheme_impl(&di->di_tv, depth + 1, visited);
+		    key = scheme_make_byte_string((char *)hi->hi_key);
 		    MZ_GC_CHECK();
 		    scheme_hash_set((Scheme_Hash_Table *)result, key, obj);
 		    MZ_GC_CHECK();
@@ -2722,6 +2906,22 @@
 	}
 	MZ_GC_UNREG();
     }
+    else if (vim_value->v_type == VAR_FUNC)
+    {
+	Scheme_Object *funcname = NULL;
+
+	MZ_GC_DECL_REG(1);
+	MZ_GC_VAR_IN_REG(0, funcname);
+	MZ_GC_REG();
+
+	funcname = scheme_make_byte_string((char *)vim_value->vval.v_string);
+	MZ_GC_CHECK();
+	result = scheme_make_closed_prim_w_arity(vim_funcref, funcname,
+		(const char *)BYTE_STRING_VALUE(funcname), 0, -1);
+	MZ_GC_CHECK();
+
+	MZ_GC_UNREG();
+    }
     else
     {
 	result = scheme_void;
@@ -2737,11 +2937,42 @@
 }
 
     static int
-mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
+mzscheme_to_vim(Scheme_Object *obj, typval_T *tv)
+{
+    int i, status;
+    Scheme_Hash_Table	*visited = NULL;
+
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, obj);
+    MZ_GC_VAR_IN_REG(1, visited);
+    MZ_GC_REG();
+
+    visited = scheme_make_hash_table(SCHEME_hash_ptr);
+    MZ_GC_CHECK();
+
+    status = mzscheme_to_vim_impl(obj, tv, 1, visited);
+    for (i = 0; i < visited->size; ++i)
+    {
+	/* free up remembered objects */
+	if (visited->vals[i] != NULL)
+	    free_tv((typval_T *)visited->vals[i]);
+    }
+
+    MZ_GC_UNREG();
+    return status;
+}
+    static int
+mzscheme_to_vim_impl(Scheme_Object *obj, typval_T *tv, int depth,
 	Scheme_Hash_Table *visited)
 {
     int		status = OK;
     typval_T	*found;
+
+    MZ_GC_DECL_REG(2);
+    MZ_GC_VAR_IN_REG(0, obj);
+    MZ_GC_VAR_IN_REG(1, visited);
+    MZ_GC_REG();
+
     MZ_GC_CHECK();
     if (depth > 100) /* limit the deepest recursion level */
     {
@@ -2775,11 +3006,25 @@
 	tv->vval.v_float = SCHEME_DBL_VAL(obj);
     }
 # endif
-    else if (SCHEME_STRINGP(obj))
+    else if (SCHEME_BYTE_STRINGP(obj))
     {
 	tv->v_type = VAR_STRING;
-	tv->vval.v_string = vim_strsave((char_u *)SCHEME_STR_VAL(obj));
+	tv->vval.v_string = vim_strsave(BYTE_STRING_VALUE(obj));
     }
+# if MZSCHEME_VERSION_MAJOR >= 299
+    else if (SCHEME_CHAR_STRINGP(obj))
+    {
+	Scheme_Object *tmp = NULL;
+	MZ_GC_DECL_REG(1);
+	MZ_GC_VAR_IN_REG(0, tmp);
+	MZ_GC_REG();
+
+	tmp = scheme_char_string_to_byte_string(obj);
+	tv->v_type = VAR_STRING;
+	tv->vval.v_string = vim_strsave(BYTE_STRING_VALUE(tmp));
+	MZ_GC_UNREG();
+    }
+#endif
     else if (SCHEME_VECTORP(obj) || SCHEME_NULLP(obj)
 	    || SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj))
     {
@@ -2808,7 +3053,7 @@
 		status = FAIL;
 	    else
 	    {
-		/* add the value in advance to allow handling of self-referencial
+		/* add the value in advance to allow handling of self-referential
 		 * data structures */
 		typval_T    *visited_tv = (typval_T *)alloc(sizeof(typval_T));
 		copy_tv(tv, visited_tv);
@@ -2819,7 +3064,7 @@
 		    for (i = 0; i < SCHEME_VEC_SIZE(obj); ++i)
 		    {
 			cval = SCHEME_VEC_ELS(obj)[i];
-			status = mzscheme_to_vim(cval, v, depth + 1, visited);
+			status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
 			if (status == FAIL)
 			    break;
 			status = list_append_tv(list, v);
@@ -2835,7 +3080,7 @@
 			    curr = SCHEME_CDR(curr))
 		    {
 			cval = SCHEME_CAR(curr);
-			status = mzscheme_to_vim(cval, v, depth + 1, visited);
+			status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
 			if (status == FAIL)
 			    break;
 			status = list_append_tv(list, v);
@@ -2843,11 +3088,11 @@
 			if (status == FAIL)
 			    break;
 		    }
-		    /* impoper list not terminated with null
+		    /* improper list not terminated with null
 		     * need to handle the last element */
 		    if (status == OK && !SCHEME_NULLP(curr))
 		    {
-			status = mzscheme_to_vim(cval, v, depth + 1, visited);
+			status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
 			if (status == OK)
 			{
 			    status = list_append_tv(list, v);
@@ -2891,11 +3136,11 @@
 	    {
 		if (((Scheme_Hash_Table *) obj)->vals[i] != NULL)
 		{
-		    /* generate item for `diplay'ed Scheme key */
+		    /* generate item for `display'ed Scheme key */
 		    dictitem_T  *item = dictitem_alloc((char_u *)string_to_line(
 				((Scheme_Hash_Table *) obj)->keys[i]));
 		    /* convert Scheme val to Vim and add it to the dict */
-		    if (mzscheme_to_vim(((Scheme_Hash_Table *) obj)->vals[i],
+		    if (mzscheme_to_vim_impl(((Scheme_Hash_Table *) obj)->vals[i],
 				    &item->di_tv, depth + 1, visited) == FAIL
 			    || dict_add(dict, item) == FAIL)
 		    {
@@ -2915,19 +3160,76 @@
 	tv->v_type = VAR_STRING;
 	tv->vval.v_string = (char_u *)string_to_line(obj);
     }
+    MZ_GC_UNREG();
     return status;
 }
 
+/* Scheme prim procedure wrapping Vim funcref */
+    static Scheme_Object *
+vim_funcref(void *name, int argc, Scheme_Object **argv)
+{
+    int i;
+    typval_T args;
+    int status = OK;
+    Scheme_Object *result = NULL;
+    list_T *list = list_alloc();
+
+    MZ_GC_DECL_REG(1);
+    MZ_GC_VAR_IN_REG(0, result);
+    MZ_GC_REG();
+
+    result = scheme_void;
+    if (list == NULL)
+	status = FAIL;
+    else
+    {
+	args.v_type = VAR_LIST;
+	args.vval.v_list = list;
+	++list->lv_refcount;
+	for (i = 0; status == OK && i < argc; ++i)
+	{
+	    typval_T *v = (typval_T *)alloc(sizeof(typval_T));
+	    if (v == NULL)
+		status = FAIL;
+	    else
+	    {
+		status = mzscheme_to_vim(argv[i], v);
+		if (status == OK)
+		{
+		    status = list_append_tv(list, v);
+		    clear_tv(v);
+		}
+		vim_free(v);
+	    }
+	}
+	if (status == OK)
+	{
+	    typval_T ret;
+	    ret.v_type = VAR_UNKNOWN;
+
+	    mzscheme_call_vim(BYTE_STRING_VALUE((Scheme_Object *)name), &args, &ret);
+	    MZ_GC_CHECK();
+	    result = vim_to_mzscheme(&ret);
+	    clear_tv(&ret);
+	    MZ_GC_CHECK();
+	}
+    }
+    clear_tv(&args);
+    MZ_GC_UNREG();
+    if (status != OK)
+	raise_vim_exn(_("error converting Scheme values to Vim"));
+    else
+	raise_if_error();
+    return result;
+}
+
     void
 do_mzeval(char_u *str, typval_T *rettv)
 {
-    int i;
     Scheme_Object	*ret = NULL;
-    Scheme_Hash_Table	*visited = NULL;
 
-    MZ_GC_DECL_REG(2);
+    MZ_GC_DECL_REG(1);
     MZ_GC_VAR_IN_REG(0, ret);
-    MZ_GC_VAR_IN_REG(0, visited);
     MZ_GC_REG();
 
     if (mzscheme_init())
@@ -2937,20 +3239,8 @@
     }
 
     MZ_GC_CHECK();
-    visited = scheme_make_hash_table(SCHEME_hash_ptr);
-    MZ_GC_CHECK();
-
     if (eval_with_exn_handling(str, do_eval, &ret) == OK)
-	mzscheme_to_vim(ret, rettv, 1, visited);
-
-    for (i = 0; i < visited->size; ++i)
-    {
-	/* free up remembered objects */
-	if (visited->vals[i] != NULL)
-	{
-	    free_tv((typval_T *)visited->vals[i]);
-	}
-    }
+	mzscheme_to_vim(ret, rettv);
 
     MZ_GC_UNREG();
 }
@@ -3006,7 +3296,6 @@
 	MZ_GC_REG();
 
 	tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc);
-	assert(nc <= 5);
 	mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *));
 	MZ_GC_CHECK();
 
@@ -3034,37 +3323,41 @@
     char	    *fmt = _("Vim error: ~a");
     Scheme_Object   *argv[2] = {NULL, NULL};
     Scheme_Object   *exn = NULL;
+    Scheme_Object   *byte_string = NULL;
 
-    MZ_GC_DECL_REG(4);
+    MZ_GC_DECL_REG(5);
     MZ_GC_ARRAY_VAR_IN_REG(0, argv, 2);
     MZ_GC_VAR_IN_REG(3, exn);
+    MZ_GC_VAR_IN_REG(4, byte_string);
     MZ_GC_REG();
 
     if (add_info != NULL)
     {
 	char		*c_string = NULL;
-	Scheme_Object	*byte_string = NULL;
 	Scheme_Object   *info = NULL;
 
 	MZ_GC_DECL_REG(3);
 	MZ_GC_VAR_IN_REG(0, c_string);
-	MZ_GC_VAR_IN_REG(1, byte_string);
 	MZ_GC_VAR_IN_REG(2, info);
 	MZ_GC_REG();
 
-	info = scheme_make_string(add_info);
+	info = scheme_make_byte_string(add_info);
 	MZ_GC_CHECK();
-	c_string = scheme_format(fmt, STRLEN(fmt), 1, &info, NULL);
+	c_string = scheme_format_utf8(fmt, STRLEN(fmt), 1, &info, NULL);
 	MZ_GC_CHECK();
-	byte_string = scheme_make_string(c_string);
+	byte_string = scheme_make_byte_string(c_string);
 	MZ_GC_CHECK();
 	argv[0] = scheme_byte_string_to_char_string(byte_string);
-	MZ_GC_CHECK();
 	SCHEME_SET_IMMUTABLE(argv[0]);
 	MZ_GC_UNREG();
     }
     else
-	argv[0] = scheme_make_string(_("Vim error"));
+    {
+	byte_string = scheme_make_byte_string(_("Vim error"));
+	MZ_GC_CHECK();
+	argv[0] = scheme_byte_string_to_char_string(byte_string);
+	MZ_GC_CHECK();
+    }
     MZ_GC_CHECK();
 
 #if MZSCHEME_VERSION_MAJOR < 360
@@ -3255,7 +3548,7 @@
     if (curbuf->b_mzscheme_ref == NULL)
 	return (vim_mz_buffer *)buffer_new(curbuf);
     else
-	return (vim_mz_buffer *)curbuf->b_mzscheme_ref;
+	return BUFFER_REF(curbuf);
 }
 
 /* return MzScheme wrapper for curwin */
@@ -3265,7 +3558,7 @@
     if (curwin->w_mzscheme_ref == NULL)
 	return (vim_mz_window *)window_new(curwin);
     else
-	return (vim_mz_window *)curwin->w_mzscheme_ref;
+	return WINDOW_REF(curwin);
 }
 
     static void
diff -Naur vim73.orig/src/if_mzsch.h vim73/src/if_mzsch.h
--- vim73.orig/src/if_mzsch.h	2010-07-17 19:41:09.000000000 +0000
+++ vim73/src/if_mzsch.h	2013-08-04 19:09:10.360611277 +0000
@@ -7,6 +7,7 @@
 #ifdef __MINGW32__
 /* Hack to engage Cygwin-specific settings */
 # define __CYGWIN32__
+# include <stdint.h>
 #endif
 
 /* #ifdef needed for "make depend" */
@@ -20,31 +21,24 @@
 #endif
 
 #if MZSCHEME_VERSION_MAJOR >= 299
-/* macros to be compatible with 20x versions */
-# define scheme_config scheme_current_config()
-# define scheme_make_string scheme_make_byte_string
-# define scheme_make_string_output_port scheme_make_byte_string_output_port
-# define scheme_get_sized_string_output scheme_get_sized_byte_string_output
-# define scheme_write_string scheme_write_byte_string
-# define scheme_make_sized_string scheme_make_sized_byte_string
-
 # define SCHEME_STRINGP(obj) (SCHEME_BYTE_STRINGP(obj) || SCHEME_CHAR_STRINGP(obj))
-# define SCHEME_STR_VAL(obj) SCHEME_BYTE_STR_VAL(   \
-		(SCHEME_BYTE_STRINGP(obj) ? obj : scheme_char_string_to_byte_string(obj)))
-# define GUARANTEE_STRING(fname, argnum) GUARANTEE_TYPE(fname, argnum, SCHEME_STRINGP, "string")
-
-# ifdef scheme_format
-#  undef scheme_format
+# define BYTE_STRING_VALUE(obj) ((char_u *)SCHEME_BYTE_STR_VAL(obj))
+#else
+/* macros for compatibility with older versions */
+# define scheme_current_config() scheme_config
+# define scheme_make_sized_byte_string scheme_make_sized_string
+# define scheme_format_utf8 scheme_format
+# ifndef DYNAMIC_MZSCHEME
+/* for dynamic MzScheme there will be separate definitions in if_mzsch.c */
+#  define scheme_get_sized_byte_string_output scheme_get_sized_string_output
+#  define scheme_make_byte_string scheme_make_string
+#  define scheme_make_byte_string_output_port scheme_make_string_output_port
 # endif
-# define scheme_format scheme_format_utf8
 
-# define SCHEME_GET_BYTE_STRING(obj) (SCHEME_BYTE_STRINGP(obj) ? obj :   \
-	scheme_char_string_to_byte_string(obj))
-#else
-# define SCHEME_GET_BYTE_STRING(obj) (obj)
 # define SCHEME_BYTE_STRLEN_VAL SCHEME_STRLEN_VAL
-# define SCHEME_BYTE_STR_VAL SCHEME_STR_VAL
+# define BYTE_STRING_VALUE(obj) ((char_u *)SCHEME_STR_VAL(obj))
 # define scheme_byte_string_to_char_string(obj) (obj)
+# define SCHEME_BYTE_STRINGP SCHEME_STRINGP
 #endif
 
 /* Precise GC macros */
diff -Naur vim73.orig/src/if_ole.cpp vim73/src/if_ole.cpp
--- vim73.orig/src/if_ole.cpp	2010-08-02 20:12:11.000000000 +0000
+++ vim73/src/if_ole.cpp	2013-08-04 19:09:10.360611277 +0000
@@ -645,7 +645,7 @@
     CoTaskMemFree(wGUID);
 }
 
-// Delete a key and all of its descendents
+// Delete a key and all of its descendants
 static void RecursiveDeleteKey(HKEY hKeyParent, const char *child)
 {
     // Open the child
@@ -655,7 +655,7 @@
     if (result != ERROR_SUCCESS)
 	return;
 
-    // Enumerate all of the decendents of this child
+    // Enumerate all of the descendants of this child
     FILETIME time;
     char buffer[1024];
     DWORD size = 1024;
@@ -663,7 +663,7 @@
     while (RegEnumKeyEx(hKeyChild, 0, buffer, &size, NULL,
 			NULL, NULL, &time) == S_OK)
     {
-	// Delete the decendents of this child
+	// Delete the descendants of this child
 	RecursiveDeleteKey(hKeyChild, buffer);
 	size = 256;
     }
diff -Naur vim73.orig/src/if_ole.h vim73/src/if_ole.h
--- vim73.orig/src/if_ole.h	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/if_ole.h	2013-08-04 19:09:10.363944601 +0000
@@ -46,8 +46,11 @@
 /* header files for imported files */
 #include "oaidl.h"
 
-void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
-void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+#ifndef __MIDL_user_allocate_free_DEFINED__
+#define __MIDL_user_allocate_free_DEFINED__
+    void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+    void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+#endif
 
 #ifndef __IVim_INTERFACE_DEFINED__
 #define __IVim_INTERFACE_DEFINED__
diff -Naur vim73.orig/src/if_perl.xs vim73/src/if_perl.xs
--- vim73.orig/src/if_perl.xs	2010-07-22 09:33:37.000000000 +0000
+++ vim73/src/if_perl.xs	2013-08-04 19:09:10.367277924 +0000
@@ -67,6 +67,10 @@
 # define PERL5101_OR_LATER
 #endif
 
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 18)
+# define PERL5180_OR_LATER
+#endif
+
 #ifndef pTHX
 #    define pTHX void
 #    define pTHX_
@@ -76,6 +80,12 @@
 # define EXTERN_C
 #endif
 
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14) && defined(_MSC_VER)
+/* Using PL_errgv to get the error message after perl_eval_sv() causes a crash
+ * with MSVC and Perl version 5.14. */
+# define AVOID_PL_ERRGV
+#endif
+
 /* Compatibility hacks over */
 
 static PerlInterpreter *perl_interp = NULL;
@@ -106,7 +116,7 @@
 #define close_dll dlclose
 #else
 #define PERL_PROC FARPROC
-#define load_dll LoadLibrary
+#define load_dll vimLoadLib
 #define symbol_from_dll GetProcAddress
 #define close_dll FreeLibrary
 #endif
@@ -121,9 +131,11 @@
 # define perl_free dll_perl_free
 # define Perl_get_context dll_Perl_get_context
 # define Perl_croak dll_Perl_croak
+# ifndef PERL5180_OR_LATER
 # ifdef PERL5101_OR_LATER
 #  define Perl_croak_xs_usage dll_Perl_croak_xs_usage
 # endif
+# endif
 # ifndef PROTO
 #  define Perl_croak_nocontext dll_Perl_croak_nocontext
 #  define Perl_call_argv dll_Perl_call_argv
@@ -147,7 +159,12 @@
 # define Perl_save_int dll_Perl_save_int
 # define Perl_stack_grow dll_Perl_stack_grow
 # define Perl_set_context dll_Perl_set_context
+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+# define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
+# define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
+# else
 # define Perl_sv_2bool dll_Perl_sv_2bool
+# endif
 # define Perl_sv_2iv dll_Perl_sv_2iv
 # define Perl_sv_2mortal dll_Perl_sv_2mortal
 # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -214,6 +231,9 @@
 # define Perl_call_list dll_Perl_call_list
 # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
 # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+#  define PL_thr_key *dll_PL_thr_key
+# endif
 
 /*
  * Declare HANDLE for perl.dll and function pointers.
@@ -228,9 +248,11 @@
 static int (*perl_parse)(PerlInterpreter*, XSINIT_t, int, char**, char**);
 static void* (*Perl_get_context)(void);
 static void (*Perl_croak)(pTHX_ const char*, ...);
+#ifndef PERL5180_OR_LATER
 #ifdef PERL5101_OR_LATER
 static void (*Perl_croak_xs_usage)(pTHX_ const CV *const, const char *const params);
 #endif
+#endif
 static void (*Perl_croak_nocontext)(const char*, ...);
 static I32 (*Perl_dowantarray)(pTHX);
 static void (*Perl_free_tmps)(pTHX);
@@ -252,7 +274,12 @@
 static void (*Perl_save_int)(pTHX_ int*);
 static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
 static SV** (*Perl_set_context)(void*);
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+static bool (*Perl_sv_2bool_flags)(pTHX_ SV*, I32);
+static void (*Perl_xs_apiversion_bootcheck)(pTHX_ SV *module, const char *api_p, STRLEN api_len);
+#else
 static bool (*Perl_sv_2bool)(pTHX_ SV*);
+#endif
 static IV (*Perl_sv_2iv)(pTHX_ SV*);
 static SV* (*Perl_sv_2mortal)(pTHX_ SV*);
 #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -299,6 +326,9 @@
 static void (*Perl_sv_free2)(pTHX_ SV*);
 static void (*Perl_sys_init)(int* argc, char*** argv);
 static void (*Perl_sys_term)(void);
+static void (*Perl_call_list)(pTHX_ I32, AV*);
+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+# else
 static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
 static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
 static SV*** (*Perl_Istack_base_ptr)(register PerlInterpreter*);
@@ -310,16 +340,20 @@
 static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*);
 static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*);
 static OP** (*Perl_Iop_ptr)(register PerlInterpreter*);
-static void (*Perl_call_list)(pTHX_ I32, AV*);
 static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*);
 static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*);
+# endif
 #endif
 
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+static perl_key* dll_PL_thr_key;
+#else
 static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
 static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
 static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*);
-static void (*boot_DynaLoader)_((pTHX_ CV*));
 static perl_key* (*Perl_Gthr_key_ptr)_((pTHX));
+#endif
+static void (*boot_DynaLoader)_((pTHX_ CV*));
 
 /*
  * Table of name to function pointer of perl.
@@ -336,9 +370,11 @@
     {"perl_parse", (PERL_PROC*)&perl_parse},
     {"Perl_get_context", (PERL_PROC*)&Perl_get_context},
     {"Perl_croak", (PERL_PROC*)&Perl_croak},
+#ifndef PERL5180_OR_LATER
 #ifdef PERL5101_OR_LATER
     {"Perl_croak_xs_usage", (PERL_PROC*)&Perl_croak_xs_usage},
 #endif
+#endif
     {"Perl_croak_nocontext", (PERL_PROC*)&Perl_croak_nocontext},
     {"Perl_dowantarray", (PERL_PROC*)&Perl_dowantarray},
     {"Perl_free_tmps", (PERL_PROC*)&Perl_free_tmps},
@@ -360,7 +396,12 @@
     {"Perl_save_int", (PERL_PROC*)&Perl_save_int},
     {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
     {"Perl_set_context", (PERL_PROC*)&Perl_set_context},
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+    {"Perl_sv_2bool_flags", (PERL_PROC*)&Perl_sv_2bool_flags},
+    {"Perl_xs_apiversion_bootcheck",(PERL_PROC*)&Perl_xs_apiversion_bootcheck},
+#else
     {"Perl_sv_2bool", (PERL_PROC*)&Perl_sv_2bool},
+#endif
     {"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv},
     {"Perl_sv_2mortal", (PERL_PROC*)&Perl_sv_2mortal},
 #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
@@ -407,6 +448,9 @@
     {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
     {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
     {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
+    {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+# else
     {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
     {"Perl_Istack_max_ptr", (PERL_PROC*)&Perl_Istack_max_ptr},
     {"Perl_Istack_base_ptr", (PERL_PROC*)&Perl_Istack_base_ptr},
@@ -418,15 +462,19 @@
     {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
     {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
     {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
-    {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
     {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
     {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
+# endif
 #endif
+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
+    {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key},
+#else
     {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
     {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
     {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
-    {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
     {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
+#endif
+    {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
     {"", NULL},
 };
 
@@ -562,9 +610,9 @@
  */
     char_u *
 eval_to_string(arg, nextcmd, dolist)
-    char_u	*arg;
-    char_u	**nextcmd;
-    int		dolist;
+    char_u	*arg UNUSED;
+    char_u	**nextcmd UNUSED;
+    int		dolist UNUSED;
 {
     return NULL;
 }
@@ -590,7 +638,7 @@
     if (ptr->w_perl_private == NULL)
     {
 	ptr->w_perl_private = newSV(0);
-	sv_setiv(ptr->w_perl_private, (IV)ptr);
+	sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
     }
     else
 	SvREFCNT_inc(ptr->w_perl_private);
@@ -608,7 +656,7 @@
     if (ptr->b_perl_private == NULL)
     {
 	ptr->b_perl_private = newSV(0);
-	sv_setiv(ptr->b_perl_private, (IV)ptr);
+	sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
     }
     else
 	SvREFCNT_inc(ptr->b_perl_private);
@@ -619,7 +667,7 @@
 
 /*
  * perl_win_free
- *	Remove all refences to the window to be destroyed
+ *	Remove all references to the window to be destroyed
  */
     void
 perl_win_free(wp)
@@ -755,7 +803,7 @@
 #ifdef HAVE_SANDBOX
     if (sandbox)
     {
-	safe = perl_get_sv( "VIM::safe", FALSE );
+	safe = perl_get_sv("VIM::safe", FALSE);
 # ifndef MAKE_TEST  /* avoid a warning for unreachable code */
 	if (safe == NULL || !SvTRUE(safe))
 	    EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
@@ -775,7 +823,11 @@
 
     SvREFCNT_dec(sv);
 
+#ifdef AVOID_PL_ERRGV
+    err = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
     err = SvPV(GvSV(PL_errgv), length);
+#endif
 
     FREETMPS;
     LEAVE;
@@ -845,7 +897,11 @@
     sv_catpvn(sv, "}", 1);
     perl_eval_sv(sv, G_DISCARD | G_NOARGS);
     SvREFCNT_dec(sv);
+#ifdef AVOID_PL_ERRGV
+    str = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
     str = SvPV(GvSV(PL_errgv), length);
+#endif
     if (length)
 	goto err;
 
@@ -859,7 +915,11 @@
 	sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
 	PUSHMARK(sp);
 	perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
+#ifdef AVOID_PL_ERRGV
+	str = SvPV(perl_get_sv("@", GV_ADD), length);
+#else
 	str = SvPV(GvSV(PL_errgv), length);
+#endif
 	if (length)
 	    break;
 	SPAGAIN;
@@ -892,24 +952,6 @@
 win_T *win_find_nr(int n) { return curwin; }
 #endif
 
-XS(XS_VIM_Msg);
-XS(XS_VIM_SetOption);
-XS(XS_VIM_DoCommand);
-XS(XS_VIM_Eval);
-XS(XS_VIM_Buffers);
-XS(XS_VIM_Windows);
-XS(XS_VIWIN_DESTROY);
-XS(XS_VIWIN_Buffer);
-XS(XS_VIWIN_SetHeight);
-XS(XS_VIWIN_Cursor);
-XS(XS_VIBUF_DESTROY);
-XS(XS_VIBUF_Name);
-XS(XS_VIBUF_Number);
-XS(XS_VIBUF_Count);
-XS(XS_VIBUF_Get);
-XS(XS_VIBUF_Set);
-XS(XS_VIBUF_Delete);
-XS(XS_VIBUF_Append);
 XS(boot_VIM);
 
     static void
@@ -1016,7 +1058,7 @@
 	{
 	    SV *sv = ST(i);
 	    if (SvIOK(sv))
-		b = SvIV(ST(i));
+		b = (int) SvIV(ST(i));
 	    else
 	    {
 		char_u *pat;
@@ -1024,7 +1066,7 @@
 
 		pat = (char_u *)SvPV(sv, len);
 		++emsg_off;
-		b = buflist_findpat(pat, pat+len, FALSE, FALSE);
+		b = buflist_findpat(pat, pat+len, FALSE, FALSE, FALSE);
 		--emsg_off;
 	    }
 
@@ -1059,7 +1101,7 @@
     {
 	for (i = 0; i < items; i++)
 	{
-	    w = SvIV(ST(i));
+	    w = (int) SvIV(ST(i));
 	    vimwin = win_find_nr(w);
 	    if (vimwin)
 		XPUSHs(newWINrv(newSV(0), vimwin));
@@ -1108,7 +1150,7 @@
     VIWIN win
 
     PPCODE:
-    if(items == 1)
+    if (items == 1)
     {
       EXTEND(sp, 2);
       if (!win_valid(win))
@@ -1116,14 +1158,14 @@
       PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
       PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
     }
-    else if(items == 3)
+    else if (items == 3)
     {
       int lnum, col;
 
       if (!win_valid(win))
 	  win = curwin;
-      lnum = SvIV(ST(1));
-      col = SvIV(ST(2));
+      lnum = (int) SvIV(ST(1));
+      col = (int) SvIV(ST(2));
       win->w_cursor.lnum = lnum;
       win->w_cursor.col = col;
       check_cursor();		    /* put cursor on an existing line */
@@ -1184,7 +1226,7 @@
     {
 	for (i = 1; i < items; i++)
 	{
-	    lnum = SvIV(ST(i));
+	    lnum = (long) SvIV(ST(i));
 	    if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
 	    {
 		line = ml_get_buf(vimbuf, lnum, FALSE);
@@ -1207,7 +1249,7 @@
 	if (items < 3)
 	    croak("Usage: VIBUF::Set(vimbuf, lnum, @lines)");
 
-	lnum = SvIV(ST(1));
+	lnum = (long) SvIV(ST(1));
 	for(i = 2; i < items; i++, lnum++)
 	{
 	    line = SvPV(ST(i),PL_na);
@@ -1242,16 +1284,16 @@
     {
 	if (items == 2)
 	{
-	    lnum = SvIV(ST(1));
+	    lnum = (long) SvIV(ST(1));
 	    count = 1;
 	}
 	else if (items == 3)
 	{
-	    lnum = SvIV(ST(1));
-	    count = 1 + SvIV(ST(2)) - lnum;
-	    if(count == 0)
+	    lnum = (long) SvIV(ST(1));
+	    count = (long) 1 + SvIV(ST(2)) - lnum;
+	    if (count == 0)
 		count = 1;
-	    if(count < 0)
+	    if (count < 0)
 	    {
 		lnum -= count;
 		count = -count;
@@ -1299,7 +1341,7 @@
 	if (items < 3)
 	    croak("Usage: VIBUF::Append(vimbuf, lnum, @lines)");
 
-	lnum = SvIV(ST(1));
+	lnum = (long) SvIV(ST(1));
 	for (i = 2; i < items; i++, lnum++)
 	{
 	    line = SvPV(ST(i),PL_na);
diff -Naur vim73.orig/src/if_py_both.h vim73/src/if_py_both.h
--- vim73.orig/src/if_py_both.h	2010-08-08 11:06:29.000000000 +0000
+++ vim73/src/if_py_both.h	2013-08-04 19:09:10.373944571 +0000
@@ -1,4 +1,4 @@
-/* vi:set ts=8 sts=4 sw=4:
+/* vi:set ts=8 sts=4 sw=4 noet:
  *
  * VIM - Vi IMproved	by Bram Moolenaar
  *
@@ -7,11 +7,85 @@
  * See README.txt for an overview of the Vim source code.
  */
 /*
- * Python extensions by Paul Moore, David Leonard, Roland Puntaier.
+ * Python extensions by Paul Moore, David Leonard, Roland Puntaier, Nikolay
+ * Pavlov.
  *
  * Common code for if_python.c and if_python3.c.
  */
 
+static char_u e_py_systemexit[]	= "E880: Can't handle SystemExit of %s exception in vim";
+
+#if PY_VERSION_HEX < 0x02050000
+typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
+#endif
+
+#ifdef FEAT_MBYTE
+# define ENC_OPT ((char *)p_enc)
+#else
+# define ENC_OPT "latin1"
+#endif
+#define DOPY_FUNC "_vim_pydo"
+
+static const char *vim_special_path = "_vim_path_";
+
+#define PyErr_SET_STRING(exc, str) PyErr_SetString(exc, _(str))
+#define PyErr_SetVim(str) PyErr_SetString(VimError, str)
+#define PyErr_SET_VIM(str) PyErr_SET_STRING(VimError, str)
+#define PyErr_FORMAT(exc, str, tail) PyErr_Format(exc, _(str), tail)
+#define PyErr_VIM_FORMAT(str, tail) PyErr_FORMAT(VimError, str, tail)
+
+#define Py_TYPE_NAME(obj) (obj->ob_type->tp_name == NULL \
+	? "(NULL)" \
+	: obj->ob_type->tp_name)
+
+#define RAISE_NO_EMPTY_KEYS PyErr_SET_STRING(PyExc_ValueError, \
+					    N_("empty keys are not allowed"))
+#define RAISE_LOCKED_DICTIONARY PyErr_SET_VIM(N_("dictionary is locked"))
+#define RAISE_LOCKED_LIST PyErr_SET_VIM(N_("list is locked"))
+#define RAISE_UNDO_FAIL PyErr_SET_VIM(N_("cannot save undo information"))
+#define RAISE_DELETE_LINE_FAIL PyErr_SET_VIM(N_("cannot delete line"))
+#define RAISE_INSERT_LINE_FAIL PyErr_SET_VIM(N_("cannot insert line"))
+#define RAISE_REPLACE_LINE_FAIL PyErr_SET_VIM(N_("cannot replace line"))
+#define RAISE_KEY_ADD_FAIL(key) \
+    PyErr_VIM_FORMAT(N_("failed to add key '%s' to dictionary"), key)
+#define RAISE_INVALID_INDEX_TYPE(idx) \
+    PyErr_FORMAT(PyExc_TypeError, N_("index must be int or slice, not %s"), \
+	    Py_TYPE_NAME(idx));
+
+#define INVALID_BUFFER_VALUE ((buf_T *)(-1))
+#define INVALID_WINDOW_VALUE ((win_T *)(-1))
+#define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1))
+
+typedef void (*rangeinitializer)(void *);
+typedef void (*runner)(const char *, void *
+#ifdef PY_CAN_RECURSE
+	, PyGILState_STATE *
+#endif
+	);
+
+static int ConvertFromPyObject(PyObject *, typval_T *);
+static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
+static int ConvertFromPyMapping(PyObject *, typval_T *);
+static PyObject *WindowNew(win_T *, tabpage_T *);
+static PyObject *BufferNew (buf_T *);
+static PyObject *LineToString(const char *);
+
+static PyInt RangeStart;
+static PyInt RangeEnd;
+
+static PyObject *globals;
+
+static PyObject *py_chdir;
+static PyObject *py_fchdir;
+static PyObject *py_getcwd;
+static PyObject *vim_module;
+static PyObject *vim_special_path_object;
+
+static PyObject *py_find_module;
+static PyObject *py_load_module;
+
+static PyObject *VimError;
+
 /*
  * obtain a lock on the Vim data structures
  */
@@ -28,146 +102,265 @@
 {
 }
 
-/* Output object definition
+/*
+ * The "todecref" argument holds a pointer to PyObject * that must be
+ * DECREF'ed after returned char_u * is no longer needed or NULL if all what
+ * was needed to generate returned value is object.
+ *
+ * Use Py_XDECREF to decrement reference count.
  */
+    static char_u *
+StringToChars(PyObject *obj, PyObject **todecref)
+{
+    char_u	*str;
 
-static PyObject *OutputWrite(PyObject *, PyObject *);
-static PyObject *OutputWritelines(PyObject *, PyObject *);
+    if (PyBytes_Check(obj))
+    {
 
-typedef void (*writefn)(char_u *);
-static void writer(writefn fn, char_u *str, PyInt n);
+	if (PyBytes_AsStringAndSize(obj, (char **) &str, NULL) == -1
+		|| str == NULL)
+	    return NULL;
 
-typedef struct
-{
-    PyObject_HEAD
-    long softspace;
-    long error;
-} OutputObject;
+	*todecref = NULL;
+    }
+    else if (PyUnicode_Check(obj))
+    {
+	PyObject	*bytes;
 
-static struct PyMethodDef OutputMethods[] = {
-    /* name,	    function,		calling,    documentation */
-    {"write",	    OutputWrite,	1,	    "" },
-    {"writelines",  OutputWritelines,	1,	    "" },
-    { NULL,	    NULL,		0,	    NULL }
-};
+	if (!(bytes = PyUnicode_AsEncodedString(obj, ENC_OPT, NULL)))
+	    return NULL;
 
-#define PyErr_SetVim(str) PyErr_SetString(VimError, str)
+	if(PyBytes_AsStringAndSize(bytes, (char **) &str, NULL) == -1
+		|| str == NULL)
+	{
+	    Py_DECREF(bytes);
+	    return NULL;
+	}
 
-/*************/
+	*todecref = bytes;
+    }
+    else
+    {
+#if PY_MAJOR_VERSION < 3
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("expected str() or unicode() instance, but got %s"),
+		Py_TYPE_NAME(obj));
+#else
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("expected bytes() or str() instance, but got %s"),
+		Py_TYPE_NAME(obj));
+#endif
+	return NULL;
+    }
 
-/* Output buffer management
- */
+    return (char_u *) str;
+}
 
-    static PyObject *
-OutputWrite(PyObject *self, PyObject *args)
+#define NUMBER_LONG     1
+#define NUMBER_INT      2
+#define NUMBER_NATURAL  4
+#define NUMBER_UNSIGNED 8
+
+    static int
+NumberToLong(PyObject *obj, long *result, int flags)
 {
-    int len;
-    char *str;
-    int error = ((OutputObject *)(self))->error;
+#if PY_MAJOR_VERSION < 3
+    if (PyInt_Check(obj))
+    {
+	*result = PyInt_AsLong(obj);
+	if (PyErr_Occurred())
+	    return -1;
+    }
+    else
+#endif
+    if (PyLong_Check(obj))
+    {
+	*result = PyLong_AsLong(obj);
+	if (PyErr_Occurred())
+	    return -1;
+    }
+    else if (PyNumber_Check(obj))
+    {
+	PyObject	*num;
 
-    if (!PyArg_ParseTuple(args, "s#", &str, &len))
-	return NULL;
+	if (!(num = PyNumber_Long(obj)))
+	    return -1;
 
-    Py_BEGIN_ALLOW_THREADS
-    Python_Lock_Vim();
-    writer((writefn)(error ? emsg : msg), (char_u *)str, len);
-    Python_Release_Vim();
-    Py_END_ALLOW_THREADS
+	*result = PyLong_AsLong(num);
 
-    Py_INCREF(Py_None);
-    return Py_None;
+	Py_DECREF(num);
+
+	if (PyErr_Occurred())
+	    return -1;
+    }
+    else
+    {
+#if PY_MAJOR_VERSION < 3
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("expected int(), long() or something supporting "
+		   "coercing to long(), but got %s"),
+		Py_TYPE_NAME(obj));
+#else
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("expected int() or something supporting coercing to int(), "
+		   "but got %s"),
+		Py_TYPE_NAME(obj));
+#endif
+	return -1;
+    }
+
+    if (flags & NUMBER_INT)
+    {
+	if (*result > INT_MAX)
+	{
+	    PyErr_SET_STRING(PyExc_OverflowError,
+		    N_("value is too large to fit into C int type"));
+	    return -1;
+	}
+	else if (*result < INT_MIN)
+	{
+	    PyErr_SET_STRING(PyExc_OverflowError,
+		    N_("value is too small to fit into C int type"));
+	    return -1;
+	}
+    }
+
+    if (flags & NUMBER_NATURAL)
+    {
+	if (*result <= 0)
+	{
+	    PyErr_SET_STRING(PyExc_ValueError,
+		    N_("number must be greater then zero"));
+	    return -1;
+	}
+    }
+    else if (flags & NUMBER_UNSIGNED)
+    {
+	if (*result < 0)
+	{
+	    PyErr_SET_STRING(PyExc_ValueError,
+		    N_("number must be greater or equal to zero"));
+	    return -1;
+	}
+    }
+
+    return 0;
 }
 
-    static PyObject *
-OutputWritelines(PyObject *self, PyObject *args)
+    static int
+add_string(PyObject *list, char *s)
 {
-    PyInt n;
-    PyInt i;
-    PyObject *list;
-    int error = ((OutputObject *)(self))->error;
+    PyObject	*string;
 
-    if (!PyArg_ParseTuple(args, "O", &list))
-	return NULL;
-    Py_INCREF(list);
+    if (!(string = PyString_FromString(s)))
+	return -1;
 
-    if (!PyList_Check(list)) {
-	PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
-	Py_DECREF(list);
-	return NULL;
+    if (PyList_Append(list, string))
+    {
+	Py_DECREF(string);
+	return -1;
     }
 
-    n = PyList_Size(list);
+    Py_DECREF(string);
+    return 0;
+}
+
+    static PyObject *
+ObjectDir(PyObject *self, char **attributes)
+{
+    PyMethodDef	*method;
+    char	**attr;
+    PyObject	*ret;
 
-    for (i = 0; i < n; ++i)
-    {
-	PyObject *line = PyList_GetItem(list, i);
-	char *str;
-	PyInt len;
+    if (!(ret = PyList_New(0)))
+	return NULL;
 
-	if (!PyArg_Parse(line, "s#", &str, &len)) {
-	    PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
-	    Py_DECREF(list);
+    if (self)
+	for (method = self->ob_type->tp_methods ; method->ml_name != NULL ; ++method)
+	    if (add_string(ret, (char *)method->ml_name))
+	    {
+		Py_DECREF(ret);
+		return NULL;
+	    }
+
+    for (attr = attributes ; *attr ; ++attr)
+	if (add_string(ret, *attr))
+	{
+	    Py_DECREF(ret);
 	    return NULL;
 	}
 
-	Py_BEGIN_ALLOW_THREADS
-	Python_Lock_Vim();
-	writer((writefn)(error ? emsg : msg), (char_u *)str, len);
-	Python_Release_Vim();
-	Py_END_ALLOW_THREADS
+#if PY_MAJOR_VERSION < 3
+    if (add_string(ret, "__members__"))
+    {
+	Py_DECREF(ret);
+	return NULL;
     }
+#endif
 
-    Py_DECREF(list);
-    Py_INCREF(Py_None);
-    return Py_None;
+    return ret;
 }
 
-static char_u *buffer = NULL;
-static PyInt buffer_len = 0;
-static PyInt buffer_size = 0;
+/* Output buffer management
+ */
 
-static writefn old_fn = NULL;
+/* Function to write a line, points to either msg() or emsg(). */
+typedef void (*writefn)(char_u *);
 
-    static void
-buffer_ensure(PyInt n)
+static PyTypeObject OutputType;
+
+typedef struct
 {
-    PyInt new_size;
-    char_u *new_buffer;
+    PyObject_HEAD
+    long softspace;
+    long error;
+} OutputObject;
 
-    if (n < buffer_size)
-	return;
+static char *OutputAttrs[] = {
+    "softspace",
+    NULL
+};
 
-    new_size = buffer_size;
-    while (new_size < n)
-	new_size += 80;
+    static PyObject *
+OutputDir(PyObject *self)
+{
+    return ObjectDir(self, OutputAttrs);
+}
 
-    if (new_size != buffer_size)
+    static int
+OutputSetattr(OutputObject *self, char *name, PyObject *valObject)
+{
+    if (valObject == NULL)
     {
-	new_buffer = alloc((unsigned)new_size);
-	if (new_buffer == NULL)
-	    return;
-
-	if (buffer)
-	{
-	    memcpy(new_buffer, buffer, buffer_len);
-	    vim_free(buffer);
-	}
+	PyErr_SET_STRING(PyExc_AttributeError,
+		N_("can't delete OutputObject attributes"));
+	return -1;
+    }
 
-	buffer = new_buffer;
-	buffer_size = new_size;
+    if (strcmp(name, "softspace") == 0)
+    {
+	if (NumberToLong(valObject, &(self->softspace), NUMBER_UNSIGNED))
+	    return -1;
+	return 0;
     }
+
+    PyErr_FORMAT(PyExc_AttributeError, N_("invalid attribute: %s"), name);
+    return -1;
 }
 
+/* Buffer IO, we write one whole line at a time. */
+static garray_T io_ga = {0, 0, 1, 80, NULL};
+static writefn old_fn = NULL;
+
     static void
 PythonIO_Flush(void)
 {
-    if (old_fn && buffer_len)
+    if (old_fn != NULL && io_ga.ga_len > 0)
     {
-	buffer[buffer_len] = 0;
-	old_fn(buffer);
+	((char_u *)io_ga.ga_data)[io_ga.ga_len] = NUL;
+	old_fn((char_u *)io_ga.ga_data);
     }
-
-    buffer_len = 0;
+    io_ga.ga_len = 0;
 }
 
     static void
@@ -175,35 +368,114 @@
 {
     char_u *ptr;
 
-    if (fn != old_fn && old_fn != NULL)
+    /* Flush when switching output function. */
+    if (fn != old_fn)
 	PythonIO_Flush();
-
     old_fn = fn;
 
+    /* Write each NL separated line.  Text after the last NL is kept for
+     * writing later. */
     while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
     {
 	PyInt len = ptr - str;
 
-	buffer_ensure(buffer_len + len + 1);
+	if (ga_grow(&io_ga, (int)(len + 1)) == FAIL)
+	    break;
 
-	memcpy(buffer + buffer_len, str, len);
-	buffer_len += len;
-	buffer[buffer_len] = 0;
-	fn(buffer);
+	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)len);
+	((char *)io_ga.ga_data)[io_ga.ga_len + len] = NUL;
+	fn((char_u *)io_ga.ga_data);
 	str = ptr + 1;
 	n -= len + 1;
-	buffer_len = 0;
+	io_ga.ga_len = 0;
+    }
+
+    /* Put the remaining text into io_ga for later printing. */
+    if (n > 0 && ga_grow(&io_ga, (int)(n + 1)) == OK)
+    {
+	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)n);
+	io_ga.ga_len += (int)n;
+    }
+}
+
+    static int
+write_output(OutputObject *self, PyObject *string)
+{
+    Py_ssize_t	len = 0;
+    char	*str = NULL;
+    int		error = self->error;
+
+    if (!PyArg_Parse(string, "et#", ENC_OPT, &str, &len))
+	return -1;
+
+    Py_BEGIN_ALLOW_THREADS
+    Python_Lock_Vim();
+    writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+    Python_Release_Vim();
+    Py_END_ALLOW_THREADS
+    PyMem_Free(str);
+
+    return 0;
+}
+
+    static PyObject *
+OutputWrite(OutputObject *self, PyObject *string)
+{
+    if (write_output(self, string))
+	return NULL;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+    static PyObject *
+OutputWritelines(OutputObject *self, PyObject *seq)
+{
+    PyObject	*iterator;
+    PyObject	*item;
+
+    if (!(iterator = PyObject_GetIter(seq)))
+	return NULL;
+
+    while ((item = PyIter_Next(iterator)))
+    {
+	if (write_output(self, item))
+	{
+	    Py_DECREF(iterator);
+	    Py_DECREF(item);
+	    return NULL;
+	}
+	Py_DECREF(item);
     }
 
-    /* Put the remaining text into the buffer for later printing */
-    buffer_ensure(buffer_len + n + 1);
-    memcpy(buffer + buffer_len, str, n);
-    buffer_len += n;
+    Py_DECREF(iterator);
+
+    /* Iterator may have finished due to an exception */
+    if (PyErr_Occurred())
+	return NULL;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+    static PyObject *
+OutputFlush(PyObject *self UNUSED)
+{
+    /* do nothing */
+    Py_INCREF(Py_None);
+    return Py_None;
 }
 
 /***************/
 
-static PyTypeObject OutputType;
+static struct PyMethodDef OutputMethods[] = {
+    /* name,	    function,				calling,	doc */
+    {"write",	    (PyCFunction)OutputWrite,		METH_O,		""},
+    {"writelines",  (PyCFunction)OutputWritelines,	METH_O,		""},
+    {"flush",	    (PyCFunction)OutputFlush,		METH_NOARGS,	""},
+    {"__dir__",	    (PyCFunction)OutputDir,		METH_NOARGS,	""},
+    { NULL,	    NULL,				0,		NULL}
+};
 
 static OutputObject Output =
 {
@@ -222,8 +494,10 @@
     static int
 PythonIO_Init_io(void)
 {
-    PySys_SetObject("stdout", (PyObject *)(void *)&Output);
-    PySys_SetObject("stderr", (PyObject *)(void *)&Error);
+    if (PySys_SetObject("stdout", (PyObject *)(void *)&Output))
+	return -1;
+    if (PySys_SetObject("stderr", (PyObject *)(void *)&Error))
+	return -1;
 
     if (PyErr_Occurred())
     {
@@ -234,61 +508,121 @@
     return 0;
 }
 
+typedef struct
+{
+    PyObject_HEAD
+    PyObject	*module;
+} LoaderObject;
+static PyTypeObject LoaderType;
 
-static PyObject *VimError;
+    static void
+LoaderDestructor(LoaderObject *self)
+{
+    Py_DECREF(self->module);
+    DESTRUCTOR_FINISH(self);
+}
+
+    static PyObject *
+LoaderLoadModule(LoaderObject *self, PyObject *args UNUSED)
+{
+    PyObject	*ret = self->module;
+
+    Py_INCREF(ret);
+    return ret;
+}
+
+static struct PyMethodDef LoaderMethods[] = {
+    /* name,	    function,				calling,	doc */
+    {"load_module", (PyCFunction)LoaderLoadModule,	METH_VARARGS,	""},
+    { NULL,	    NULL,				0,		NULL}
+};
 
 /* Check to see whether a Vim error has been reported, or a keyboard
  * interrupt has been detected.
  */
+
+    static void
+VimTryStart(void)
+{
+    ++trylevel;
+}
+
     static int
-VimErrorCheck(void)
+VimTryEnd(void)
 {
+    --trylevel;
+    /* Without this it stops processing all subsequent VimL commands and
+     * generates strange error messages if I e.g. try calling Test() in a
+     * cycle */
+    did_emsg = FALSE;
+    /* Keyboard interrupt should be preferred over anything else */
     if (got_int)
     {
+	did_throw = got_int = FALSE;
 	PyErr_SetNone(PyExc_KeyboardInterrupt);
-	return 1;
+	return -1;
     }
-    else if (did_emsg && !PyErr_Occurred())
+    else if (!did_throw)
+	return (PyErr_Occurred() ? -1 : 0);
+    /* Python exception is preferred over vim one; unlikely to occur though */
+    else if (PyErr_Occurred())
     {
-	PyErr_SetNone(VimError);
-	return 1;
+	did_throw = FALSE;
+	return -1;
+    }
+    /* Finally transform VimL exception to python one */
+    else
+    {
+	PyErr_SetVim((char *)current_exception->value);
+	discard_current_exception();
+	return -1;
     }
+}
 
+    static int
+VimCheckInterrupt(void)
+{
+    if (got_int)
+    {
+	PyErr_SetNone(PyExc_KeyboardInterrupt);
+	return 1;
+    }
     return 0;
 }
 
 /* Vim module - Implementation
  */
+
     static PyObject *
-VimCommand(PyObject *self UNUSED, PyObject *args)
+VimCommand(PyObject *self UNUSED, PyObject *string)
 {
-    char *cmd;
-    PyObject *result;
+    char_u	*cmd;
+    PyObject	*ret;
+    PyObject	*todecref;
 
-    if (!PyArg_ParseTuple(args, "s", &cmd))
+    if (!(cmd = StringToChars(string, &todecref)))
 	return NULL;
 
-    PyErr_Clear();
-
     Py_BEGIN_ALLOW_THREADS
     Python_Lock_Vim();
 
-    do_cmdline_cmd((char_u *)cmd);
+    VimTryStart();
+    do_cmdline_cmd(cmd);
     update_screen(VALID);
 
     Python_Release_Vim();
     Py_END_ALLOW_THREADS
 
-    if (VimErrorCheck())
-	result = NULL;
+    if (VimTryEnd())
+	ret = NULL;
     else
-	result = Py_None;
+	ret = Py_None;
 
-    Py_XINCREF(result);
-    return result;
+    Py_XINCREF(ret);
+    Py_XDECREF(todecref);
+    return ret;
 }
 
-#ifdef FEAT_EVAL
 /*
  * Function to translate a typval_T into a PyObject; this will recursively
  * translate lists/dictionaries into their Python equivalents.
@@ -297,47 +631,46 @@
  * you call VimToPython.
  */
     static PyObject *
-VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
+VimToPython(typval_T *our_tv, int depth, PyObject *lookup_dict)
 {
-    PyObject	*result;
+    PyObject	*ret;
     PyObject	*newObj;
-    char	ptrBuf[NUMBUFLEN];
+    char	ptrBuf[sizeof(void *) * 2 + 3];
 
     /* Avoid infinite recursion */
     if (depth > 100)
     {
 	Py_INCREF(Py_None);
-	result = Py_None;
-	return result;
+	ret = Py_None;
+	return ret;
     }
 
-    /* Check if we run into a recursive loop.  The item must be in lookupDict
+    /* Check if we run into a recursive loop.  The item must be in lookup_dict
      * then and we can use it again. */
     if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL)
 	    || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL))
     {
-	sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U,
-		our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list
-					   : (long_u)our_tv->vval.v_dict);
-	result = PyDict_GetItemString(lookupDict, ptrBuf);
-	if (result != NULL)
+	sprintf(ptrBuf, "%p",
+		our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
+					   : (void *)our_tv->vval.v_dict);
+
+	if ((ret = PyDict_GetItemString(lookup_dict, ptrBuf)))
 	{
-	    Py_INCREF(result);
-	    return result;
+	    Py_INCREF(ret);
+	    return ret;
 	}
     }
 
     if (our_tv->v_type == VAR_STRING)
-    {
-	result = Py_BuildValue("s", our_tv->vval.v_string);
-    }
+	ret = PyString_FromString(our_tv->vval.v_string == NULL
+					? "" : (char *)our_tv->vval.v_string);
     else if (our_tv->v_type == VAR_NUMBER)
     {
 	char buf[NUMBUFLEN];
 
 	/* For backwards compatibility numbers are stored as strings. */
 	sprintf(buf, "%ld", (long)our_tv->vval.v_number);
-	result = Py_BuildValue("s", buf);
+	ret = PyString_FromString((char *)buf);
     }
 # ifdef FEAT_FLOAT
     else if (our_tv->v_type == VAR_FLOAT)
@@ -345,7 +678,7 @@
 	char buf[NUMBUFLEN];
 
 	sprintf(buf, "%f", our_tv->vval.v_float);
-	result = Py_BuildValue("s", buf);
+	ret = PyString_FromString((char *)buf);
     }
 # endif
     else if (our_tv->v_type == VAR_LIST)
@@ -353,43 +686,70 @@
 	list_T		*list = our_tv->vval.v_list;
 	listitem_T	*curr;
 
-	result = PyList_New(0);
+	if (list == NULL)
+	    return NULL;
+
+	if (!(ret = PyList_New(0)))
+	    return NULL;
 
-	if (list != NULL)
+	if (PyDict_SetItemString(lookup_dict, ptrBuf, ret))
 	{
-	    PyDict_SetItemString(lookupDict, ptrBuf, result);
+	    Py_DECREF(ret);
+	    return NULL;
+	}
 
-	    for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
+	for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
+	{
+	    if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookup_dict)))
+	    {
+		Py_DECREF(ret);
+		return NULL;
+	    }
+	    if (PyList_Append(ret, newObj))
 	    {
-		newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict);
-		PyList_Append(result, newObj);
 		Py_DECREF(newObj);
+		Py_DECREF(ret);
+		return NULL;
 	    }
+	    Py_DECREF(newObj);
 	}
     }
     else if (our_tv->v_type == VAR_DICT)
     {
-	result = PyDict_New();
 
-	if (our_tv->vval.v_dict != NULL)
-	{
-	    hashtab_T	*ht = &our_tv->vval.v_dict->dv_hashtab;
-	    long_u	todo = ht->ht_used;
-	    hashitem_T	*hi;
-	    dictitem_T	*di;
+	hashtab_T	*ht = &our_tv->vval.v_dict->dv_hashtab;
+	long_u	todo = ht->ht_used;
+	hashitem_T	*hi;
+	dictitem_T	*di;
+	if (our_tv->vval.v_dict == NULL)
+	    return NULL;
 
-	    PyDict_SetItemString(lookupDict, ptrBuf, result);
+	if (!(ret = PyDict_New()))
+	    return NULL;
+
+	if (PyDict_SetItemString(lookup_dict, ptrBuf, ret))
+	{
+	    Py_DECREF(ret);
+	    return NULL;
+	}
 
-	    for (hi = ht->ht_array; todo > 0; ++hi)
+	for (hi = ht->ht_array; todo > 0; ++hi)
+	{
+	    if (!HASHITEM_EMPTY(hi))
 	    {
-		if (!HASHITEM_EMPTY(hi))
-		{
-		    --todo;
+		--todo;
 
-		    di = dict_lookup(hi);
-		    newObj = VimToPython(&di->di_tv, depth + 1, lookupDict);
-		    PyDict_SetItemString(result, (char *)hi->hi_key, newObj);
+		di = dict_lookup(hi);
+		if (!(newObj = VimToPython(&di->di_tv, depth + 1, lookup_dict)))
+		{
+		    Py_DECREF(ret);
+		    return NULL;
+		}
+		if (PyDict_SetItemString(ret, (char *)hi->hi_key, newObj))
+		{
+		    Py_DECREF(ret);
 		    Py_DECREF(newObj);
+		    return NULL;
 		}
 	    }
 	}
@@ -397,43 +757,55 @@
     else
     {
 	Py_INCREF(Py_None);
-	result = Py_None;
+	ret = Py_None;
     }
 
-    return result;
+    return ret;
 }
-#endif
 
     static PyObject *
-VimEval(PyObject *self UNUSED, PyObject *args UNUSED)
+VimEval(PyObject *self UNUSED, PyObject *args)
 {
-#ifdef FEAT_EVAL
-    char	*expr;
+    char_u	*expr;
     typval_T	*our_tv;
-    PyObject	*result;
-    PyObject    *lookup_dict;
+    PyObject	*string;
+    PyObject	*todecref;
+    PyObject	*ret;
+    PyObject	*lookup_dict;
 
-    if (!PyArg_ParseTuple(args, "s", &expr))
+    if (!PyArg_ParseTuple(args, "O", &string))
+	return NULL;
+
+    if (!(expr = StringToChars(string, &todecref)))
 	return NULL;
 
     Py_BEGIN_ALLOW_THREADS
     Python_Lock_Vim();
-    our_tv = eval_expr((char_u *)expr, NULL);
-
+    VimTryStart();
+    our_tv = eval_expr(expr, NULL);
     Python_Release_Vim();
     Py_END_ALLOW_THREADS
 
+    Py_XDECREF(todecref);
+
+    if (VimTryEnd())
+	return NULL;
+
     if (our_tv == NULL)
     {
-	PyErr_SetVim(_("invalid expression"));
+	PyErr_SET_VIM(N_("invalid expression"));
 	return NULL;
     }
 
     /* Convert the Vim type into a Python type.  Create a dictionary that's
      * used to check for recursive loops. */
-    lookup_dict = PyDict_New();
-    result = VimToPython(our_tv, 1, lookup_dict);
-    Py_DECREF(lookup_dict);
+    if (!(lookup_dict = PyDict_New()))
+	ret = NULL;
+    else
+    {
+	ret = VimToPython(our_tv, 1, lookup_dict);
+	Py_DECREF(lookup_dict);
+    }
 
 
     Py_BEGIN_ALLOW_THREADS
@@ -442,908 +814,5298 @@
     Python_Release_Vim();
     Py_END_ALLOW_THREADS
 
-    return result;
-#else
-    PyErr_SetVim(_("expressions disabled at compile time"));
-    return NULL;
-#endif
+    return ret;
 }
 
-/*
- * Vim module - Definitions
- */
-
-static struct PyMethodDef VimMethods[] = {
-    /* name,	     function,		calling,    documentation */
-    {"command",	     VimCommand,	1,	    "Execute a Vim ex-mode command" },
-    {"eval",	     VimEval,		1,	    "Evaluate an expression using Vim evaluator" },
-    { NULL,	     NULL,		0,	    NULL }
-};
+static PyObject *ConvertToPyObject(typval_T *);
 
-typedef struct
+    static PyObject *
+VimEvalPy(PyObject *self UNUSED, PyObject *string)
 {
-    PyObject_HEAD
-    buf_T *buf;
-}
-BufferObject;
+    typval_T	*our_tv;
+    PyObject	*ret;
+    char_u	*expr;
+    PyObject	*todecref;
 
-#define INVALID_BUFFER_VALUE ((buf_T *)(-1))
+    if (!(expr = StringToChars(string, &todecref)))
+	return NULL;
 
-/*
- * Buffer list object - Implementation
- */
+    Py_BEGIN_ALLOW_THREADS
+    Python_Lock_Vim();
+    VimTryStart();
+    our_tv = eval_expr(expr, NULL);
+    Python_Release_Vim();
+    Py_END_ALLOW_THREADS
 
-    static PyInt
-BufListLength(PyObject *self UNUSED)
-{
-    buf_T	*b = firstbuf;
-    PyInt	n = 0;
+    Py_XDECREF(todecref);
 
-    while (b)
+    if (VimTryEnd())
+	return NULL;
+
+    if (our_tv == NULL)
     {
-	++n;
-	b = b->b_next;
+	PyErr_SET_VIM(N_("invalid expression"));
+	return NULL;
     }
 
-    return n;
+    ret = ConvertToPyObject(our_tv);
+    Py_BEGIN_ALLOW_THREADS
+    Python_Lock_Vim();
+    free_tv(our_tv);
+    Python_Release_Vim();
+    Py_END_ALLOW_THREADS
+
+    return ret;
 }
 
     static PyObject *
-BufListItem(PyObject *self UNUSED, PyInt n)
+VimStrwidth(PyObject *self UNUSED, PyObject *string)
 {
-    buf_T *b;
+    char_u	*str;
+    PyObject	*todecref;
+    int		len;
 
-    for (b = firstbuf; b; b = b->b_next, --n)
-    {
-	if (n == 0)
-	    return BufferNew(b);
-    }
+    if (!(str = StringToChars(string, &todecref)))
+	return NULL;
 
-    PyErr_SetString(PyExc_IndexError, _("no such buffer"));
-    return NULL;
+#ifdef FEAT_MBYTE
+    len = mb_string2cells(str, (int)STRLEN(str));
+#else
+    len = STRLEN(str);
+#endif
+
+    Py_XDECREF(todecref);
+
+    return PyLong_FromLong(len);
 }
 
-typedef struct
+    static PyObject *
+_VimChdir(PyObject *_chdir, PyObject *args, PyObject *kwargs)
 {
-    PyObject_HEAD
-    win_T	*win;
-} WindowObject;
+    PyObject	*ret;
+    PyObject	*newwd;
+    PyObject	*todecref;
+    char_u	*new_dir;
 
-#define INVALID_WINDOW_VALUE ((win_T *)(-1))
+    if (_chdir == NULL)
+	return NULL;
+    if (!(ret = PyObject_Call(_chdir, args, kwargs)))
+	return NULL;
 
-    static int
-CheckWindow(WindowObject *this)
-{
-    if (this->win == INVALID_WINDOW_VALUE)
+    if (!(newwd = PyObject_CallFunctionObjArgs(py_getcwd, NULL)))
     {
-	PyErr_SetVim(_("attempt to refer to deleted window"));
-	return -1;
+	Py_DECREF(ret);
+	return NULL;
     }
 
-    return 0;
-}
+    if (!(new_dir = StringToChars(newwd, &todecref)))
+    {
+	Py_DECREF(ret);
+	Py_DECREF(newwd);
+	return NULL;
+    }
 
-static int WindowSetattr(PyObject *, char *, PyObject *);
-static PyObject *WindowRepr(PyObject *);
+    VimTryStart();
 
-    static int
-WindowSetattr(PyObject *self, char *name, PyObject *val)
-{
-    WindowObject *this = (WindowObject *)(self);
+    if (vim_chdir(new_dir))
+    {
+	Py_DECREF(ret);
+	Py_DECREF(newwd);
+	Py_XDECREF(todecref);
 
-    if (CheckWindow(this))
-	return -1;
+	if (VimTryEnd())
+	    return NULL;
 
-    if (strcmp(name, "buffer") == 0)
-    {
-	PyErr_SetString(PyExc_TypeError, _("readonly attribute"));
-	return -1;
+	PyErr_SET_VIM(N_("failed to change directory"));
+	return NULL;
     }
-    else if (strcmp(name, "cursor") == 0)
-    {
-	long lnum;
-	long col;
-	long len;
-
-	if (!PyArg_Parse(val, "(ll)", &lnum, &col))
-	    return -1;
 
-	if (lnum <= 0 || lnum > this->win->w_buffer->b_ml.ml_line_count)
-	{
-	    PyErr_SetVim(_("cursor position outside buffer"));
-	    return -1;
-	}
+    Py_DECREF(newwd);
+    Py_XDECREF(todecref);
 
-	/* Check for keyboard interrupts */
-	if (VimErrorCheck())
-	    return -1;
+    post_chdir(FALSE);
 
-	/* When column is out of range silently correct it. */
-	len = (long)STRLEN(ml_get_buf(this->win->w_buffer, lnum, FALSE));
-	if (col > len)
-	    col = len;
+    if (VimTryEnd())
+    {
+	Py_DECREF(ret);
+	return NULL;
+    }
 
-	this->win->w_cursor.lnum = lnum;
-	this->win->w_cursor.col = col;
-#ifdef FEAT_VIRTUALEDIT
-	this->win->w_cursor.coladd = 0;
-#endif
-	update_screen(VALID);
+    return ret;
+}
 
-	return 0;
-    }
-    else if (strcmp(name, "height") == 0)
-    {
-	int	height;
-	win_T	*savewin;
+    static PyObject *
+VimChdir(PyObject *self UNUSED, PyObject *args, PyObject *kwargs)
+{
+    return _VimChdir(py_chdir, args, kwargs);
+}
 
-	if (!PyArg_Parse(val, "i", &height))
-	    return -1;
+    static PyObject *
+VimFchdir(PyObject *self UNUSED, PyObject *args, PyObject *kwargs)
+{
+    return _VimChdir(py_fchdir, args, kwargs);
+}
 
-#ifdef FEAT_GUI
-	need_mouse_correct = TRUE;
-#endif
-	savewin = curwin;
-	curwin = this->win;
-	win_setheight(height);
-	curwin = savewin;
+typedef struct {
+    PyObject	*callable;
+    PyObject	*result;
+} map_rtp_data;
 
-	/* Check for keyboard interrupts */
-	if (VimErrorCheck())
-	    return -1;
+    static void
+map_rtp_callback(char_u *path, void *_data)
+{
+    void	**data = (void **) _data;
+    PyObject	*pathObject;
+    map_rtp_data	*mr_data = *((map_rtp_data **) data);
 
-	return 0;
-    }
-#ifdef FEAT_VERTSPLIT
-    else if (strcmp(name, "width") == 0)
+    if (!(pathObject = PyString_FromString((char *)path)))
     {
-	int	width;
-	win_T	*savewin;
-
-	if (!PyArg_Parse(val, "i", &width))
-	    return -1;
+	*data = NULL;
+	return;
+    }
 
-#ifdef FEAT_GUI
-	need_mouse_correct = TRUE;
-#endif
-	savewin = curwin;
-	curwin = this->win;
-	win_setwidth(width);
-	curwin = savewin;
+    mr_data->result = PyObject_CallFunctionObjArgs(mr_data->callable,
+						   pathObject, NULL);
 
-	/* Check for keyboard interrupts */
-	if (VimErrorCheck())
-	    return -1;
+    Py_DECREF(pathObject);
 
-	return 0;
-    }
-#endif
+    if (!mr_data->result || mr_data->result != Py_None)
+	*data = NULL;
     else
     {
-	PyErr_SetString(PyExc_AttributeError, name);
-	return -1;
+	Py_DECREF(mr_data->result);
+	mr_data->result = NULL;
     }
 }
 
     static PyObject *
-WindowRepr(PyObject *self)
+VimForeachRTP(PyObject *self UNUSED, PyObject *callable)
 {
-    static char repr[100];
-    WindowObject *this = (WindowObject *)(self);
+    map_rtp_data	data;
 
-    if (this->win == INVALID_WINDOW_VALUE)
-    {
-	vim_snprintf(repr, 100, _("<window object (deleted) at %p>"), (self));
-	return PyString_FromString(repr);
-    }
-    else
-    {
-	int	i = 0;
-	win_T	*w;
+    data.callable = callable;
+    data.result = NULL;
 
-	for (w = firstwin; w != NULL && w != this->win; w = W_NEXT(w))
-	    ++i;
+    do_in_runtimepath(NULL, FALSE, &map_rtp_callback, &data);
 
-	if (w == NULL)
-	    vim_snprintf(repr, 100, _("<window object (unknown) at %p>"),
-								      (self));
+    if (data.result == NULL)
+    {
+	if (PyErr_Occurred())
+	    return NULL;
 	else
-	    vim_snprintf(repr, 100, _("<window %d>"), i);
-
-	return PyString_FromString(repr);
+	{
+	    Py_INCREF(Py_None);
+	    return Py_None;
+	}
     }
+    return data.result;
 }
 
 /*
- * Window list object - Implementation
+ * _vim_runtimepath_ special path implementation.
  */
-    static PyInt
-WinListLength(PyObject *self UNUSED)
+
+    static void
+map_finder_callback(char_u *path, void *_data)
 {
-    win_T	*w = firstwin;
-    PyInt	n = 0;
+    void	**data = (void **) _data;
+    PyObject	*list = *((PyObject **) data);
+    PyObject	*pathObject1, *pathObject2;
+    char	*pathbuf;
+    size_t	pathlen;
 
-    while (w != NULL)
+    pathlen = STRLEN(path);
+
+#if PY_MAJOR_VERSION < 3
+# define PY_MAIN_DIR_STRING "python2"
+#else
+# define PY_MAIN_DIR_STRING "python3"
+#endif
+#define PY_ALTERNATE_DIR_STRING "pythonx"
+
+#define PYTHONX_STRING_LENGTH 7 /* STRLEN("pythonx") */
+    if (!(pathbuf = PyMem_New(char,
+		    pathlen + STRLEN(PATHSEPSTR) + PYTHONX_STRING_LENGTH + 1)))
     {
-	++n;
-	w = W_NEXT(w);
+	PyErr_NoMemory();
+	*data = NULL;
+	return;
     }
 
-    return n;
+    mch_memmove(pathbuf, path, pathlen + 1);
+    add_pathsep((char_u *) pathbuf);
+
+    pathlen = STRLEN(pathbuf);
+    mch_memmove(pathbuf + pathlen, PY_MAIN_DIR_STRING,
+	    PYTHONX_STRING_LENGTH + 1);
+
+    if (!(pathObject1 = PyString_FromString(pathbuf)))
+    {
+	*data = NULL;
+	PyMem_Free(pathbuf);
+	return;
+    }
+
+    mch_memmove(pathbuf + pathlen, PY_ALTERNATE_DIR_STRING,
+	    PYTHONX_STRING_LENGTH + 1);
+
+    if (!(pathObject2 = PyString_FromString(pathbuf)))
+    {
+	Py_DECREF(pathObject1);
+	PyMem_Free(pathbuf);
+	*data = NULL;
+	return;
+    }
+
+    PyMem_Free(pathbuf);
+
+    if (PyList_Append(list, pathObject1)
+	    || PyList_Append(list, pathObject2))
+	*data = NULL;
+
+    Py_DECREF(pathObject1);
+    Py_DECREF(pathObject2);
 }
 
     static PyObject *
-WinListItem(PyObject *self UNUSED, PyInt n)
+Vim_GetPaths(PyObject *self UNUSED)
 {
-    win_T *w;
+    PyObject	*ret;
 
-    for (w = firstwin; w != NULL; w = W_NEXT(w), --n)
-	if (n == 0)
-	    return WindowNew(w);
+    if (!(ret = PyList_New(0)))
+	return NULL;
 
-    PyErr_SetString(PyExc_IndexError, _("no such window"));
-    return NULL;
+    do_in_runtimepath(NULL, FALSE, &map_finder_callback, ret);
+
+    if (PyErr_Occurred())
+    {
+	Py_DECREF(ret);
+	return NULL;
+    }
+
+    return ret;
 }
 
-/* Convert a Python string into a Vim line.
- *
- * The result is in allocated memory. All internal nulls are replaced by
- * newline characters. It is an error for the string to contain newline
- * characters.
- *
- * On errors, the Python exception data is set, and NULL is returned.
- */
-    static char *
-StringToLine(PyObject *obj)
+    static PyObject *
+call_load_module(char *name, int len, PyObject *find_module_result)
 {
-    const char *str;
-    char *save;
-    PyInt len;
-    PyInt i;
-    char *p;
+    PyObject	*fd, *pathname, *description;
 
-    if (obj == NULL || !PyString_Check(obj))
+    if (!PyTuple_Check(find_module_result))
     {
-	PyErr_BadArgument();
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("expected 3-tuple as imp.find_module() result, but got %s"),
+		Py_TYPE_NAME(find_module_result));
 	return NULL;
     }
-
-    str = PyString_AsString(obj);
-    len = PyString_Size(obj);
-
-    /*
-     * Error checking: String must not contain newlines, as we
-     * are replacing a single line, and we must replace it with
-     * a single line.
-     * A trailing newline is removed, so that append(f.readlines()) works.
-     */
-    p = memchr(str, '\n', len);
-    if (p != NULL)
+    if (PyTuple_GET_SIZE(find_module_result) != 3)
     {
-	if (p == str + len - 1)
-	    --len;
-	else
-	{
-	    PyErr_SetVim(_("string cannot contain newlines"));
-	    return NULL;
-	}
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("expected 3-tuple as imp.find_module() result, but got "
+		   "tuple of size %d"),
+		(int) PyTuple_GET_SIZE(find_module_result));
+	return NULL;
     }
 
-    /* Create a copy of the string, with internal nulls replaced by
-     * newline characters, as is the vim convention.
-     */
-    save = (char *)alloc((unsigned)(len+1));
-    if (save == NULL)
+    if (!(fd = PyTuple_GET_ITEM(find_module_result, 0))
+	    || !(pathname = PyTuple_GET_ITEM(find_module_result, 1))
+	    || !(description = PyTuple_GET_ITEM(find_module_result, 2)))
     {
-	PyErr_NoMemory();
+	PyErr_SET_STRING(PyExc_RuntimeError,
+		N_("internal error: imp.find_module returned tuple with NULL"));
 	return NULL;
     }
 
-    for (i = 0; i < len; ++i)
-    {
-	if (str[i] == '\0')
-	    save[i] = '\n';
-	else
-	    save[i] = str[i];
-    }
-
-    save[i] = '\0';
-
-    return save;
-}
-
-/* Get a line from the specified buffer. The line number is
- * in Vim format (1-based). The line is returned as a Python
- * string object.
- */
-    static PyObject *
-GetBufferLine(buf_T *buf, PyInt n)
-{
-    return LineToString((char *)ml_get_buf(buf, (linenr_T)n, FALSE));
+    return PyObject_CallFunction(py_load_module,
+	    "s#OOO", name, len, fd, pathname, description);
 }
 
-
-/* Get a list of lines from the specified buffer. The line numbers
- * are in Vim format (1-based). The range is from lo up to, but not
- * including, hi. The list is returned as a Python list of string objects.
- */
     static PyObject *
-GetBufferLineList(buf_T *buf, PyInt lo, PyInt hi)
+find_module(char *fullname, char *tail, PyObject *new_path)
 {
-    PyInt i;
-    PyInt n = hi - lo;
-    PyObject *list = PyList_New(n);
-
-    if (list == NULL)
-	return NULL;
+    PyObject	*find_module_result;
+    PyObject	*module;
+    char	*dot;
 
-    for (i = 0; i < n; ++i)
+    if ((dot = (char *)vim_strchr((char_u *) tail, '.')))
     {
-	PyObject *str = LineToString((char *)ml_get_buf(buf, (linenr_T)(lo+i), FALSE));
+	/*
+	 * There is a dot in the name: call find_module recursively without the
+	 * first component
+	 */
+	PyObject	*newest_path;
+	int		partlen = (int) (dot - 1 - tail);
 
-	/* Error check - was the Python string creation OK? */
-	if (str == NULL)
+	if (!(find_module_result = PyObject_CallFunction(py_find_module,
+			"s#O", tail, partlen, new_path)))
+	    return NULL;
+
+	if (!(module = call_load_module(
+			fullname,
+			((int) (tail - fullname)) + partlen,
+			find_module_result)))
 	{
-	    Py_DECREF(list);
+	    Py_DECREF(find_module_result);
 	    return NULL;
 	}
 
-	/* Set the list item */
-	if (PyList_SetItem(list, i, str))
+	Py_DECREF(find_module_result);
+
+	if (!(newest_path = PyObject_GetAttrString(module, "__path__")))
 	{
-	    Py_DECREF(str);
-	    Py_DECREF(list);
+	    Py_DECREF(module);
 	    return NULL;
 	}
-    }
 
-    /* The ownership of the Python list is passed to the caller (ie,
-     * the caller should Py_DECREF() the object when it is finished
-     * with it).
-     */
+	Py_DECREF(module);
 
-    return list;
-}
+	module = find_module(fullname, dot + 1, newest_path);
 
-/*
- * Check if deleting lines made the cursor position invalid.
- * Changed the lines from "lo" to "hi" and added "extra" lines (negative if
- * deleted).
- */
-    static void
-py_fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra)
-{
-    if (curwin->w_cursor.lnum >= lo)
+	Py_DECREF(newest_path);
+
+	return module;
+    }
+    else
     {
-	/* Adjust the cursor position if it's in/after the changed
-	 * lines. */
-	if (curwin->w_cursor.lnum >= hi)
-	{
-	    curwin->w_cursor.lnum += extra;
-	    check_cursor_col();
-	}
-	else if (extra < 0)
+	if (!(find_module_result = PyObject_CallFunction(py_find_module,
+			"sO", tail, new_path)))
+	    return NULL;
+
+	if (!(module = call_load_module(
+			fullname,
+			(int)STRLEN(fullname),
+			find_module_result)))
 	{
-	    curwin->w_cursor.lnum = lo;
-	    check_cursor();
+	    Py_DECREF(find_module_result);
+	    return NULL;
 	}
-	else
-	    check_cursor_col();
-	changed_cline_bef_curs();
+
+	Py_DECREF(find_module_result);
+
+	return module;
     }
-    invalidate_botline();
 }
 
-/* Replace a line in the specified buffer. The line number is
- * in Vim format (1-based). The replacement line is given as
- * a Python string object. The object is checked for validity
- * and correct format. Errors are returned as a value of FAIL.
- * The return value is OK on success.
- * If OK is returned and len_change is not NULL, *len_change
- * is set to the change in the buffer length.
- */
-    static int
-SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
+    static PyObject *
+FinderFindModule(PyObject *self, PyObject *args)
 {
-    /* First of all, we check the thpe of the supplied Python object.
-     * There are three cases:
-     *	  1. NULL, or None - this is a deletion.
-     *	  2. A string	   - this is a replacement.
-     *	  3. Anything else - this is an error.
-     */
-    if (line == Py_None || line == NULL)
-    {
-	buf_T *savebuf = curbuf;
+    char	*fullname;
+    PyObject	*module;
+    PyObject	*new_path;
+    LoaderObject	*loader;
 
-	PyErr_Clear();
-	curbuf = buf;
+    if (!PyArg_ParseTuple(args, "s", &fullname))
+	return NULL;
 
-	if (u_savedel((linenr_T)n, 1L) == FAIL)
-	    PyErr_SetVim(_("cannot save undo information"));
-	else if (ml_delete((linenr_T)n, FALSE) == FAIL)
-	    PyErr_SetVim(_("cannot delete line"));
-	else
+    if (!(new_path = Vim_GetPaths(self)))
+	return NULL;
+
+    module = find_module(fullname, fullname, new_path);
+
+    Py_DECREF(new_path);
+
+    if (!module)
+    {
+	if (PyErr_Occurred())
 	{
-	    if (buf == curwin->w_buffer)
-		py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
-	    deleted_lines_mark((linenr_T)n, 1L);
+	    if (PyErr_ExceptionMatches(PyExc_ImportError))
+		PyErr_Clear();
+	    else
+		return NULL;
 	}
 
-	curbuf = savebuf;
+	Py_INCREF(Py_None);
+	return Py_None;
+    }
 
-	if (PyErr_Occurred() || VimErrorCheck())
-	    return FAIL;
+    if (!(loader = PyObject_NEW(LoaderObject, &LoaderType)))
+    {
+	Py_DECREF(module);
+	return NULL;
+    }
 
-	if (len_change)
-	    *len_change = -1;
+    loader->module = module;
 
-	return OK;
-    }
-    else if (PyString_Check(line))
+    return (PyObject *) loader;
+}
+
+    static PyObject *
+VimPathHook(PyObject *self UNUSED, PyObject *args)
+{
+    char	*path;
+
+    if (PyArg_ParseTuple(args, "s", &path)
+	    && STRCMP(path, vim_special_path) == 0)
     {
-	char *save = StringToLine(line);
-	buf_T *savebuf = curbuf;
+	Py_INCREF(vim_module);
+	return vim_module;
+    }
 
-	if (save == NULL)
-	    return FAIL;
+    PyErr_Clear();
+    PyErr_SetNone(PyExc_ImportError);
+    return NULL;
+}
 
-	/* We do not need to free "save" if ml_replace() consumes it. */
-	PyErr_Clear();
-	curbuf = buf;
+/*
+ * Vim module - Definitions
+ */
 
-	if (u_savesub((linenr_T)n) == FAIL)
-	{
-	    PyErr_SetVim(_("cannot save undo information"));
-	    vim_free(save);
-	}
-	else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
-	{
-	    PyErr_SetVim(_("cannot replace line"));
-	    vim_free(save);
-	}
-	else
-	    changed_bytes((linenr_T)n, 0);
+static struct PyMethodDef VimMethods[] = {
+    /* name,	    function,			calling,			documentation */
+    {"command",	    VimCommand,			METH_O,				"Execute a Vim ex-mode command" },
+    {"eval",	    VimEval,			METH_VARARGS,			"Evaluate an expression using Vim evaluator" },
+    {"bindeval",    VimEvalPy,			METH_O,				"Like eval(), but returns objects attached to vim ones"},
+    {"strwidth",    VimStrwidth,		METH_O,				"Screen string width, counts <Tab> as having width 1"},
+    {"chdir",	    (PyCFunction)VimChdir,	METH_VARARGS|METH_KEYWORDS,	"Change directory"},
+    {"fchdir",	    (PyCFunction)VimFchdir,	METH_VARARGS|METH_KEYWORDS,	"Change directory"},
+    {"foreach_rtp", VimForeachRTP,		METH_O,				"Call given callable for each path in &rtp"},
+    {"find_module", FinderFindModule,		METH_VARARGS,			"Internal use only, returns loader object for any input it receives"},
+    {"path_hook",   VimPathHook,		METH_VARARGS,			"Hook function to install in sys.path_hooks"},
+    {"_get_paths",  (PyCFunction)Vim_GetPaths,	METH_NOARGS,			"Get &rtp-based additions to sys.path"},
+    { NULL,	    NULL,			0,				NULL}
+};
 
-	curbuf = savebuf;
+/*
+ * Generic iterator object
+ */
 
-	/* Check that the cursor is not beyond the end of the line now. */
-	if (buf == curwin->w_buffer)
-	    check_cursor_col();
+static PyTypeObject IterType;
 
-	if (PyErr_Occurred() || VimErrorCheck())
-	    return FAIL;
+typedef PyObject *(*nextfun)(void **);
+typedef void (*destructorfun)(void *);
+typedef int (*traversefun)(void *, visitproc, void *);
+typedef int (*clearfun)(void **);
+
+/* Main purpose of this object is removing the need for do python
+ * initialization (i.e. PyType_Ready and setting type attributes) for a big
+ * bunch of objects. */
 
-	if (len_change)
-	    *len_change = 0;
+typedef struct
+{
+    PyObject_HEAD
+    void *cur;
+    nextfun next;
+    destructorfun destruct;
+    traversefun traverse;
+    clearfun clear;
+} IterObject;
 
-	return OK;
-    }
-    else
-    {
-	PyErr_BadArgument();
-	return FAIL;
-    }
+    static PyObject *
+IterNew(void *start, destructorfun destruct, nextfun next, traversefun traverse,
+	clearfun clear)
+{
+    IterObject *self;
+
+    self = PyObject_GC_New(IterObject, &IterType);
+    self->cur = start;
+    self->next = next;
+    self->destruct = destruct;
+    self->traverse = traverse;
+    self->clear = clear;
+
+    return (PyObject *)(self);
 }
 
+    static void
+IterDestructor(IterObject *self)
+{
+    PyObject_GC_UnTrack((void *)(self));
+    self->destruct(self->cur);
+    PyObject_GC_Del((void *)(self));
+}
 
-/* Insert a number of lines into the specified buffer after the specifed line.
- * The line number is in Vim format (1-based). The lines to be inserted are
- * given as a Python list of string objects or as a single string. The lines
- * to be added are checked for validity and correct format. Errors are
- * returned as a value of FAIL.  The return value is OK on success.
- * If OK is returned and len_change is not NULL, *len_change
- * is set to the change in the buffer length.
- */
     static int
-InsertBufferLines(buf_T *buf, PyInt n, PyObject *lines, PyInt *len_change)
+IterTraverse(IterObject *self, visitproc visit, void *arg)
 {
-    /* First of all, we check the type of the supplied Python object.
-     * It must be a string or a list, or the call is in error.
-     */
-    if (PyString_Check(lines))
-    {
-	char	*str = StringToLine(lines);
-	buf_T	*savebuf;
-
-	if (str == NULL)
-	    return FAIL;
+    if (self->traverse != NULL)
+	return self->traverse(self->cur, visit, arg);
+    else
+	return 0;
+}
 
-	savebuf = curbuf;
+/* Mac OSX defines clear() somewhere. */
+#ifdef clear
+# undef clear
+#endif
 
-	PyErr_Clear();
-	curbuf = buf;
+    static int
+IterClear(IterObject *self)
+{
+    if (self->clear != NULL)
+	return self->clear(&self->cur);
+    else
+	return 0;
+}
 
-	if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL)
-	    PyErr_SetVim(_("cannot save undo information"));
-	else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL)
-	    PyErr_SetVim(_("cannot insert line"));
-	else
-	    appended_lines_mark((linenr_T)n, 1L);
+    static PyObject *
+IterNext(IterObject *self)
+{
+    return self->next(&self->cur);
+}
 
-	vim_free(str);
-	curbuf = savebuf;
-	update_screen(VALID);
+    static PyObject *
+IterIter(PyObject *self)
+{
+    Py_INCREF(self);
+    return self;
+}
 
-	if (PyErr_Occurred() || VimErrorCheck())
-	    return FAIL;
+typedef struct pylinkedlist_S {
+    struct pylinkedlist_S	*pll_next;
+    struct pylinkedlist_S	*pll_prev;
+    PyObject			*pll_obj;
+} pylinkedlist_T;
 
-	if (len_change)
-	    *len_change = 1;
+static pylinkedlist_T *lastdict = NULL;
+static pylinkedlist_T *lastlist = NULL;
 
-	return OK;
-    }
-    else if (PyList_Check(lines))
+    static void
+pyll_remove(pylinkedlist_T *ref, pylinkedlist_T **last)
+{
+    if (ref->pll_prev == NULL)
     {
-	PyInt	i;
-	PyInt	size = PyList_Size(lines);
-	char	**array;
-	buf_T	*savebuf;
-
-	array = (char **)alloc((unsigned)(size * sizeof(char *)));
-	if (array == NULL)
+	if (ref->pll_next == NULL)
 	{
-	    PyErr_NoMemory();
-	    return FAIL;
+	    *last = NULL;
+	    return;
 	}
+    }
+    else
+	ref->pll_prev->pll_next = ref->pll_next;
 
-	for (i = 0; i < size; ++i)
-	{
-	    PyObject *line = PyList_GetItem(lines, i);
-	    array[i] = StringToLine(line);
+    if (ref->pll_next == NULL)
+	*last = ref->pll_prev;
+    else
+	ref->pll_next->pll_prev = ref->pll_prev;
+}
 
-	    if (array[i] == NULL)
-	    {
-		while (i)
-		    vim_free(array[--i]);
-		vim_free(array);
-		return FAIL;
-	    }
-	}
+    static void
+pyll_add(PyObject *self, pylinkedlist_T *ref, pylinkedlist_T **last)
+{
+    if (*last == NULL)
+	ref->pll_prev = NULL;
+    else
+    {
+	(*last)->pll_next = ref;
+	ref->pll_prev = *last;
+    }
+    ref->pll_next = NULL;
+    ref->pll_obj = self;
+    *last = ref;
+}
 
-	savebuf = curbuf;
+static PyTypeObject DictionaryType;
 
-	PyErr_Clear();
-	curbuf = buf;
+typedef struct
+{
+    PyObject_HEAD
+    dict_T	*dict;
+    pylinkedlist_T	ref;
+} DictionaryObject;
 
-	if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL)
-	    PyErr_SetVim(_("cannot save undo information"));
-	else
-	{
-	    for (i = 0; i < size; ++i)
-	    {
-		if (ml_append((linenr_T)(n + i),
-					(char_u *)array[i], 0, FALSE) == FAIL)
-		{
-		    PyErr_SetVim(_("cannot insert line"));
+static PyObject *DictionaryUpdate(DictionaryObject *, PyObject *, PyObject *);
+
+#define NEW_DICTIONARY(dict) DictionaryNew(&DictionaryType, dict)
+
+    static PyObject *
+DictionaryNew(PyTypeObject *subtype, dict_T *dict)
+{
+    DictionaryObject	*self;
+
+    self = (DictionaryObject *) subtype->tp_alloc(subtype, 0);
+    if (self == NULL)
+	return NULL;
+    self->dict = dict;
+    ++dict->dv_refcount;
+
+    pyll_add((PyObject *)(self), &self->ref, &lastdict);
+
+    return (PyObject *)(self);
+}
+
+    static dict_T *
+py_dict_alloc(void)
+{
+    dict_T	*ret;
+
+    if (!(ret = dict_alloc()))
+    {
+	PyErr_NoMemory();
+	return NULL;
+    }
+    ++ret->dv_refcount;
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
+{
+    DictionaryObject	*self;
+    dict_T	*dict;
+
+    if (!(dict = py_dict_alloc()))
+	return NULL;
+
+    self = (DictionaryObject *) DictionaryNew(subtype, dict);
+
+    --dict->dv_refcount;
+
+    if (kwargs || PyTuple_Size(args))
+    {
+	PyObject	*tmp;
+	if (!(tmp = DictionaryUpdate(self, args, kwargs)))
+	{
+	    Py_DECREF(self);
+	    return NULL;
+	}
+
+	Py_DECREF(tmp);
+    }
+
+    return (PyObject *)(self);
+}
+
+    static void
+DictionaryDestructor(DictionaryObject *self)
+{
+    pyll_remove(&self->ref, &lastdict);
+    dict_unref(self->dict);
+
+    DESTRUCTOR_FINISH(self);
+}
+
+static char *DictionaryAttrs[] = {
+    "locked", "scope",
+    NULL
+};
+
+    static PyObject *
+DictionaryDir(PyObject *self)
+{
+    return ObjectDir(self, DictionaryAttrs);
+}
+
+    static int
+DictionarySetattr(DictionaryObject *self, char *name, PyObject *valObject)
+{
+    if (valObject == NULL)
+    {
+	PyErr_SET_STRING(PyExc_AttributeError,
+		N_("cannot delete vim.Dictionary attributes"));
+	return -1;
+    }
+
+    if (strcmp(name, "locked") == 0)
+    {
+	if (self->dict->dv_lock == VAR_FIXED)
+	{
+	    PyErr_SET_STRING(PyExc_TypeError,
+		    N_("cannot modify fixed dictionary"));
+	    return -1;
+	}
+	else
+	{
+	    int		istrue = PyObject_IsTrue(valObject);
+	    if (istrue == -1)
+		return -1;
+	    else if (istrue)
+		self->dict->dv_lock = VAR_LOCKED;
+	    else
+		self->dict->dv_lock = 0;
+	}
+	return 0;
+    }
+    else
+    {
+	PyErr_FORMAT(PyExc_AttributeError, N_("cannot set attribute %s"), name);
+	return -1;
+    }
+}
+
+    static PyInt
+DictionaryLength(DictionaryObject *self)
+{
+    return ((PyInt) (self->dict->dv_hashtab.ht_used));
+}
+
+#define DICT_FLAG_HAS_DEFAULT	0x01
+#define DICT_FLAG_POP		0x02
+#define DICT_FLAG_NONE_DEFAULT	0x04
+#define DICT_FLAG_RETURN_BOOL	0x08 /* Incompatible with DICT_FLAG_POP */
+#define DICT_FLAG_RETURN_PAIR	0x10
+
+    static PyObject *
+_DictionaryItem(DictionaryObject *self, PyObject *args, int flags)
+{
+    PyObject	*keyObject;
+    PyObject	*defObject = ((flags & DICT_FLAG_NONE_DEFAULT)? Py_None : NULL);
+    PyObject	*ret;
+    char_u	*key;
+    dictitem_T	*di;
+    dict_T	*dict = self->dict;
+    hashitem_T	*hi;
+    PyObject	*todecref;
+
+    if (flags & DICT_FLAG_HAS_DEFAULT)
+    {
+	if (!PyArg_ParseTuple(args, "O|O", &keyObject, &defObject))
+	    return NULL;
+    }
+    else
+	keyObject = args;
+
+    if (flags & DICT_FLAG_RETURN_BOOL)
+	defObject = Py_False;
+
+    if (!(key = StringToChars(keyObject, &todecref)))
+	return NULL;
+
+    if (*key == NUL)
+    {
+	RAISE_NO_EMPTY_KEYS;
+	Py_XDECREF(todecref);
+	return NULL;
+    }
+
+    hi = hash_find(&dict->dv_hashtab, key);
+
+    Py_XDECREF(todecref);
+
+    if (HASHITEM_EMPTY(hi))
+    {
+	if (defObject)
+	{
+	    Py_INCREF(defObject);
+	    return defObject;
+	}
+	else
+	{
+	    PyErr_SetObject(PyExc_KeyError, keyObject);
+	    return NULL;
+	}
+    }
+    else if (flags & DICT_FLAG_RETURN_BOOL)
+    {
+	Py_INCREF(Py_True);
+	return Py_True;
+    }
+
+    di = dict_lookup(hi);
+
+    if (!(ret = ConvertToPyObject(&di->di_tv)))
+	return NULL;
+
+    if (flags & DICT_FLAG_POP)
+    {
+	if (dict->dv_lock)
+	{
+	    RAISE_LOCKED_DICTIONARY;
+	    Py_DECREF(ret);
+	    return NULL;
+	}
+
+	hash_remove(&dict->dv_hashtab, hi);
+	dictitem_free(di);
+    }
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryItem(DictionaryObject *self, PyObject *keyObject)
+{
+    return _DictionaryItem(self, keyObject, 0);
+}
+
+    static int
+DictionaryContains(DictionaryObject *self, PyObject *keyObject)
+{
+    PyObject	*rObj = _DictionaryItem(self, keyObject, DICT_FLAG_RETURN_BOOL);
+    int		ret;
+
+    ret = (rObj == Py_True);
+
+    Py_DECREF(rObj);
+
+    return ret;
+}
+
+typedef struct
+{
+    hashitem_T	*ht_array;
+    long_u	ht_used;
+    hashtab_T	*ht;
+    hashitem_T	*hi;
+    long_u	todo;
+} dictiterinfo_T;
+
+    static PyObject *
+DictionaryIterNext(dictiterinfo_T **dii)
+{
+    PyObject	*ret;
+
+    if (!(*dii)->todo)
+	return NULL;
+
+    if ((*dii)->ht->ht_array != (*dii)->ht_array ||
+	    (*dii)->ht->ht_used != (*dii)->ht_used)
+    {
+	PyErr_SET_STRING(PyExc_RuntimeError,
+		N_("hashtab changed during iteration"));
+	return NULL;
+    }
+
+    while (((*dii)->todo) && HASHITEM_EMPTY((*dii)->hi))
+	++((*dii)->hi);
+
+    --((*dii)->todo);
+
+    if (!(ret = PyBytes_FromString((char *)(*dii)->hi->hi_key)))
+	return NULL;
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryIter(DictionaryObject *self)
+{
+    dictiterinfo_T	*dii;
+    hashtab_T		*ht;
+
+    if (!(dii = PyMem_New(dictiterinfo_T, 1)))
+    {
+	PyErr_NoMemory();
+	return NULL;
+    }
+
+    ht = &self->dict->dv_hashtab;
+    dii->ht_array = ht->ht_array;
+    dii->ht_used = ht->ht_used;
+    dii->ht = ht;
+    dii->hi = dii->ht_array;
+    dii->todo = dii->ht_used;
+
+    return IterNew(dii,
+	    (destructorfun) PyMem_Free, (nextfun) DictionaryIterNext,
+	    NULL, NULL);
+}
+
+    static PyInt
+DictionaryAssItem(
+	DictionaryObject *self, PyObject *keyObject, PyObject *valObject)
+{
+    char_u	*key;
+    typval_T	tv;
+    dict_T	*dict = self->dict;
+    dictitem_T	*di;
+    PyObject	*todecref;
+
+    if (dict->dv_lock)
+    {
+	RAISE_LOCKED_DICTIONARY;
+	return -1;
+    }
+
+    if (!(key = StringToChars(keyObject, &todecref)))
+	return -1;
+
+    if (*key == NUL)
+    {
+	RAISE_NO_EMPTY_KEYS;
+	Py_XDECREF(todecref);
+	return -1;
+    }
+
+    di = dict_find(dict, key, -1);
+
+    if (valObject == NULL)
+    {
+	hashitem_T	*hi;
+
+	if (di == NULL)
+	{
+	    Py_XDECREF(todecref);
+	    PyErr_SetObject(PyExc_KeyError, keyObject);
+	    return -1;
+	}
+	hi = hash_find(&dict->dv_hashtab, di->di_key);
+	hash_remove(&dict->dv_hashtab, hi);
+	dictitem_free(di);
+	Py_XDECREF(todecref);
+	return 0;
+    }
+
+    if (ConvertFromPyObject(valObject, &tv) == -1)
+    {
+	Py_XDECREF(todecref);
+	return -1;
+    }
+
+    if (di == NULL)
+    {
+	if (!(di = dictitem_alloc(key)))
+	{
+	    Py_XDECREF(todecref);
+	    PyErr_NoMemory();
+	    return -1;
+	}
+	di->di_tv.v_lock = 0;
+	di->di_tv.v_type = VAR_UNKNOWN;
+
+	if (dict_add(dict, di) == FAIL)
+	{
+	    vim_free(di);
+	    dictitem_free(di);
+	    RAISE_KEY_ADD_FAIL(key);
+	    Py_XDECREF(todecref);
+	    return -1;
+	}
+    }
+    else
+	clear_tv(&di->di_tv);
+
+    Py_XDECREF(todecref);
+
+    copy_tv(&tv, &di->di_tv);
+    clear_tv(&tv);
+    return 0;
+}
+
+typedef PyObject *(*hi_to_py)(hashitem_T *);
+
+    static PyObject *
+DictionaryListObjects(DictionaryObject *self, hi_to_py hiconvert)
+{
+    dict_T	*dict = self->dict;
+    long_u	todo = dict->dv_hashtab.ht_used;
+    Py_ssize_t	i = 0;
+    PyObject	*ret;
+    hashitem_T	*hi;
+    PyObject	*newObj;
+
+    ret = PyList_New(todo);
+    for (hi = dict->dv_hashtab.ht_array; todo > 0; ++hi)
+    {
+	if (!HASHITEM_EMPTY(hi))
+	{
+	    if (!(newObj = hiconvert(hi)))
+	    {
+		Py_DECREF(ret);
+		return NULL;
+	    }
+	    PyList_SET_ITEM(ret, i, newObj);
+	    --todo;
+	    ++i;
+	}
+    }
+    return ret;
+}
+
+    static PyObject *
+dict_key(hashitem_T *hi)
+{
+    return PyBytes_FromString((char *)(hi->hi_key));
+}
+
+    static PyObject *
+DictionaryListKeys(DictionaryObject *self)
+{
+    return DictionaryListObjects(self, dict_key);
+}
+
+    static PyObject *
+dict_val(hashitem_T *hi)
+{
+    dictitem_T	*di;
+
+    di = dict_lookup(hi);
+    return ConvertToPyObject(&di->di_tv);
+}
+
+    static PyObject *
+DictionaryListValues(DictionaryObject *self)
+{
+    return DictionaryListObjects(self, dict_val);
+}
+
+    static PyObject *
+dict_item(hashitem_T *hi)
+{
+    PyObject	*keyObject;
+    PyObject	*valObject;
+    PyObject	*ret;
+
+    if (!(keyObject = dict_key(hi)))
+	return NULL;
+
+    if (!(valObject = dict_val(hi)))
+    {
+	Py_DECREF(keyObject);
+	return NULL;
+    }
+
+    ret = Py_BuildValue("(OO)", keyObject, valObject);
+
+    Py_DECREF(keyObject);
+    Py_DECREF(valObject);
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryListItems(DictionaryObject *self)
+{
+    return DictionaryListObjects(self, dict_item);
+}
+
+    static PyObject *
+DictionaryUpdate(DictionaryObject *self, PyObject *args, PyObject *kwargs)
+{
+    dict_T	*dict = self->dict;
+
+    if (dict->dv_lock)
+    {
+	RAISE_LOCKED_DICTIONARY;
+	return NULL;
+    }
+
+    if (kwargs)
+    {
+	typval_T	tv;
+
+	if (ConvertFromPyMapping(kwargs, &tv) == -1)
+	    return NULL;
+
+	VimTryStart();
+	dict_extend(self->dict, tv.vval.v_dict, (char_u *) "force");
+	clear_tv(&tv);
+	if (VimTryEnd())
+	    return NULL;
+    }
+    else
+    {
+	PyObject	*obj;
+
+	if (!PyArg_ParseTuple(args, "O", &obj))
+	    return NULL;
+
+	if (PyObject_HasAttrString(obj, "keys"))
+	    return DictionaryUpdate(self, NULL, obj);
+	else
+	{
+	    PyObject	*iterator;
+	    PyObject	*item;
+
+	    if (!(iterator = PyObject_GetIter(obj)))
+		return NULL;
+
+	    while ((item = PyIter_Next(iterator)))
+	    {
+		PyObject	*fast;
+		PyObject	*keyObject;
+		PyObject	*valObject;
+		PyObject	*todecref;
+		char_u		*key;
+		dictitem_T	*di;
+
+		if (!(fast = PySequence_Fast(item, "")))
+		{
+		    Py_DECREF(iterator);
+		    Py_DECREF(item);
+		    return NULL;
+		}
+
+		Py_DECREF(item);
+
+		if (PySequence_Fast_GET_SIZE(fast) != 2)
+		{
+		    Py_DECREF(iterator);
+		    Py_DECREF(fast);
+		    PyErr_FORMAT(PyExc_ValueError,
+			    N_("expected sequence element of size 2, "
+			    "but got sequence of size %d"),
+			    (int) PySequence_Fast_GET_SIZE(fast));
+		    return NULL;
+		}
+
+		keyObject = PySequence_Fast_GET_ITEM(fast, 0);
+
+		if (!(key = StringToChars(keyObject, &todecref)))
+		{
+		    Py_DECREF(iterator);
+		    Py_DECREF(fast);
+		    return NULL;
+		}
+
+		di = dictitem_alloc(key);
+
+		Py_XDECREF(todecref);
+
+		if (di == NULL)
+		{
+		    Py_DECREF(fast);
+		    Py_DECREF(iterator);
+		    PyErr_NoMemory();
+		    return NULL;
+		}
+		di->di_tv.v_lock = 0;
+		di->di_tv.v_type = VAR_UNKNOWN;
+
+		valObject = PySequence_Fast_GET_ITEM(fast, 1);
+
+		if (ConvertFromPyObject(valObject, &di->di_tv) == -1)
+		{
+		    Py_DECREF(iterator);
+		    Py_DECREF(fast);
+		    dictitem_free(di);
+		    return NULL;
+		}
+
+		Py_DECREF(fast);
+
+		if (dict_add(dict, di) == FAIL)
+		{
+		    RAISE_KEY_ADD_FAIL(di->di_key);
+		    Py_DECREF(iterator);
+		    dictitem_free(di);
+		    return NULL;
+		}
+	    }
+
+	    Py_DECREF(iterator);
+
+	    /* Iterator may have finished due to an exception */
+	    if (PyErr_Occurred())
+		return NULL;
+	}
+    }
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+    static PyObject *
+DictionaryGet(DictionaryObject *self, PyObject *args)
+{
+    return _DictionaryItem(self, args,
+			    DICT_FLAG_HAS_DEFAULT|DICT_FLAG_NONE_DEFAULT);
+}
+
+    static PyObject *
+DictionaryPop(DictionaryObject *self, PyObject *args)
+{
+    return _DictionaryItem(self, args, DICT_FLAG_HAS_DEFAULT|DICT_FLAG_POP);
+}
+
+    static PyObject *
+DictionaryPopItem(DictionaryObject *self)
+{
+    hashitem_T	*hi;
+    PyObject	*ret;
+    PyObject	*valObject;
+    dictitem_T	*di;
+
+    if (self->dict->dv_hashtab.ht_used == 0)
+    {
+	PyErr_SetNone(PyExc_KeyError);
+	return NULL;
+    }
+
+    hi = self->dict->dv_hashtab.ht_array;
+    while (HASHITEM_EMPTY(hi))
+	++hi;
+
+    di = dict_lookup(hi);
+
+    if (!(valObject = ConvertToPyObject(&di->di_tv)))
+	return NULL;
+
+    if (!(ret = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, valObject)))
+    {
+	Py_DECREF(valObject);
+	return NULL;
+    }
+
+    hash_remove(&self->dict->dv_hashtab, hi);
+    dictitem_free(di);
+
+    return ret;
+}
+
+    static PyObject *
+DictionaryHasKey(DictionaryObject *self, PyObject *keyObject)
+{
+    return _DictionaryItem(self, keyObject, DICT_FLAG_RETURN_BOOL);
+}
+
+static PySequenceMethods DictionaryAsSeq = {
+    0,					/* sq_length */
+    0,					/* sq_concat */
+    0,					/* sq_repeat */
+    0,					/* sq_item */
+    0,					/* sq_slice */
+    0,					/* sq_ass_item */
+    0,					/* sq_ass_slice */
+    (objobjproc) DictionaryContains,	/* sq_contains */
+    0,					/* sq_inplace_concat */
+    0,					/* sq_inplace_repeat */
+};
+
+static PyMappingMethods DictionaryAsMapping = {
+    (lenfunc)       DictionaryLength,
+    (binaryfunc)    DictionaryItem,
+    (objobjargproc) DictionaryAssItem,
+};
+
+static struct PyMethodDef DictionaryMethods[] = {
+    {"keys",	(PyCFunction)DictionaryListKeys,	METH_NOARGS,	""},
+    {"values",	(PyCFunction)DictionaryListValues,	METH_NOARGS,	""},
+    {"items",	(PyCFunction)DictionaryListItems,	METH_NOARGS,	""},
+    {"update",	(PyCFunction)DictionaryUpdate,		METH_VARARGS|METH_KEYWORDS, ""},
+    {"get",	(PyCFunction)DictionaryGet,		METH_VARARGS,	""},
+    {"pop",	(PyCFunction)DictionaryPop,		METH_VARARGS,	""},
+    {"popitem",	(PyCFunction)DictionaryPopItem,		METH_NOARGS,	""},
+    {"has_key",	(PyCFunction)DictionaryHasKey,		METH_O,		""},
+    {"__dir__",	(PyCFunction)DictionaryDir,		METH_NOARGS,	""},
+    { NULL,	NULL,					0,		NULL}
+};
+
+static PyTypeObject ListType;
+static PySequenceMethods ListAsSeq;
+static PyMappingMethods ListAsMapping;
+
+typedef struct
+{
+    PyObject_HEAD
+    list_T	*list;
+    pylinkedlist_T	ref;
+} ListObject;
+
+#define NEW_LIST(list) ListNew(&ListType, list)
+
+    static PyObject *
+ListNew(PyTypeObject *subtype, list_T *list)
+{
+    ListObject	*self;
+
+    self = (ListObject *) subtype->tp_alloc(subtype, 0);
+    if (self == NULL)
+	return NULL;
+    self->list = list;
+    ++list->lv_refcount;
+
+    pyll_add((PyObject *)(self), &self->ref, &lastlist);
+
+    return (PyObject *)(self);
+}
+
+    static list_T *
+py_list_alloc()
+{
+    list_T	*ret;
+
+    if (!(ret = list_alloc()))
+    {
+	PyErr_NoMemory();
+	return NULL;
+    }
+    ++ret->lv_refcount;
+
+    return ret;
+}
+
+    static int
+list_py_concat(list_T *l, PyObject *obj, PyObject *lookup_dict)
+{
+    PyObject	*iterator;
+    PyObject	*item;
+    listitem_T	*li;
+
+    if (!(iterator = PyObject_GetIter(obj)))
+	return -1;
+
+    while ((item = PyIter_Next(iterator)))
+    {
+	if (!(li = listitem_alloc()))
+	{
+	    PyErr_NoMemory();
+	    Py_DECREF(item);
+	    Py_DECREF(iterator);
+	    return -1;
+	}
+	li->li_tv.v_lock = 0;
+	li->li_tv.v_type = VAR_UNKNOWN;
+
+	if (_ConvertFromPyObject(item, &li->li_tv, lookup_dict) == -1)
+	{
+	    Py_DECREF(item);
+	    Py_DECREF(iterator);
+	    listitem_free(li);
+	    return -1;
+	}
+
+	Py_DECREF(item);
+
+	list_append(l, li);
+    }
+
+    Py_DECREF(iterator);
+
+    /* Iterator may have finished due to an exception */
+    if (PyErr_Occurred())
+	return -1;
+
+    return 0;
+}
+
+    static PyObject *
+ListConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
+{
+    list_T	*list;
+    PyObject	*obj = NULL;
+
+    if (kwargs)
+    {
+	PyErr_SET_STRING(PyExc_TypeError,
+		N_("list constructor does not accept keyword arguments"));
+	return NULL;
+    }
+
+    if (!PyArg_ParseTuple(args, "|O", &obj))
+	return NULL;
+
+    if (!(list = py_list_alloc()))
+	return NULL;
+
+    if (obj)
+    {
+	PyObject	*lookup_dict;
+
+	if (!(lookup_dict = PyDict_New()))
+	{
+	    list_unref(list);
+	    return NULL;
+	}
+
+	if (list_py_concat(list, obj, lookup_dict) == -1)
+	{
+	    Py_DECREF(lookup_dict);
+	    list_unref(list);
+	    return NULL;
+	}
+
+	Py_DECREF(lookup_dict);
+    }
+
+    return ListNew(subtype, list);
+}
+
+    static void
+ListDestructor(ListObject *self)
+{
+    pyll_remove(&self->ref, &lastlist);
+    list_unref(self->list);
+
+    DESTRUCTOR_FINISH(self);
+}
+
+    static PyInt
+ListLength(ListObject *self)
+{
+    return ((PyInt) (self->list->lv_len));
+}
+
+    static PyObject *
+ListItem(ListObject *self, Py_ssize_t index)
+{
+    listitem_T	*li;
+
+    if (index >= ListLength(self))
+    {
+	PyErr_SET_STRING(PyExc_IndexError, N_("list index out of range"));
+	return NULL;
+    }
+    li = list_find(self->list, (long) index);
+    if (li == NULL)
+    {
+	/* No more suitable format specifications in python-2.3 */
+	PyErr_VIM_FORMAT(N_("internal error: failed to get vim list item %d"),
+		(int) index);
+	return NULL;
+    }
+    return ConvertToPyObject(&li->li_tv);
+}
+
+#define PROC_RANGE \
+    if (last < 0) {\
+	if (last < -size) \
+	    last = 0; \
+	else \
+	    last += size; \
+    } \
+    if (first < 0) \
+	first = 0; \
+    if (first > size) \
+	first = size; \
+    if (last > size) \
+	last = size;
+
+    static PyObject *
+ListSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last)
+{
+    PyInt	i;
+    PyInt	size = ListLength(self);
+    PyInt	n;
+    PyObject	*list;
+    int		reversed = 0;
+
+    PROC_RANGE
+    if (first >= last)
+	first = last;
+
+    n = last-first;
+    list = PyList_New(n);
+    if (list == NULL)
+	return NULL;
+
+    for (i = 0; i < n; ++i)
+    {
+	PyObject	*item = ListItem(self, first + i);
+	if (item == NULL)
+	{
+	    Py_DECREF(list);
+	    return NULL;
+	}
+
+	PyList_SET_ITEM(list, ((reversed)?(n-i-1):(i)), item);
+    }
+
+    return list;
+}
+
+typedef struct
+{
+    listwatch_T	lw;
+    list_T	*list;
+} listiterinfo_T;
+
+    static void
+ListIterDestruct(listiterinfo_T *lii)
+{
+    list_rem_watch(lii->list, &lii->lw);
+    PyMem_Free(lii);
+}
+
+    static PyObject *
+ListIterNext(listiterinfo_T **lii)
+{
+    PyObject	*ret;
+
+    if (!((*lii)->lw.lw_item))
+	return NULL;
+
+    if (!(ret = ConvertToPyObject(&((*lii)->lw.lw_item->li_tv))))
+	return NULL;
+
+    (*lii)->lw.lw_item = (*lii)->lw.lw_item->li_next;
+
+    return ret;
+}
+
+    static PyObject *
+ListIter(ListObject *self)
+{
+    listiterinfo_T	*lii;
+    list_T	*l = self->list;
+
+    if (!(lii = PyMem_New(listiterinfo_T, 1)))
+    {
+	PyErr_NoMemory();
+	return NULL;
+    }
+
+    list_add_watch(l, &lii->lw);
+    lii->lw.lw_item = l->lv_first;
+    lii->list = l;
+
+    return IterNew(lii,
+	    (destructorfun) ListIterDestruct, (nextfun) ListIterNext,
+	    NULL, NULL);
+}
+
+    static int
+ListAssItem(ListObject *self, Py_ssize_t index, PyObject *obj)
+{
+    typval_T	tv;
+    list_T	*l = self->list;
+    listitem_T	*li;
+    Py_ssize_t	length = ListLength(self);
+
+    if (l->lv_lock)
+    {
+	RAISE_LOCKED_LIST;
+	return -1;
+    }
+    if (index > length || (index == length && obj == NULL))
+    {
+	PyErr_SET_STRING(PyExc_IndexError, N_("list index out of range"));
+	return -1;
+    }
+
+    if (obj == NULL)
+    {
+	li = list_find(l, (long) index);
+	list_remove(l, li, li);
+	clear_tv(&li->li_tv);
+	vim_free(li);
+	return 0;
+    }
+
+    if (ConvertFromPyObject(obj, &tv) == -1)
+	return -1;
+
+    if (index == length)
+    {
+	if (list_append_tv(l, &tv) == FAIL)
+	{
+	    clear_tv(&tv);
+	    PyErr_SET_VIM(N_("failed to add item to list"));
+	    return -1;
+	}
+    }
+    else
+    {
+	li = list_find(l, (long) index);
+	clear_tv(&li->li_tv);
+	copy_tv(&tv, &li->li_tv);
+	clear_tv(&tv);
+    }
+    return 0;
+}
+
+    static int
+ListAssSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj)
+{
+    PyInt	size = ListLength(self);
+    PyObject	*iterator;
+    PyObject	*item;
+    listitem_T	*li;
+    listitem_T	*next;
+    typval_T	v;
+    list_T	*l = self->list;
+    PyInt	i;
+
+    if (l->lv_lock)
+    {
+	RAISE_LOCKED_LIST;
+	return -1;
+    }
+
+    PROC_RANGE
+
+    if (first == size)
+	li = NULL;
+    else
+    {
+	li = list_find(l, (long) first);
+	if (li == NULL)
+	{
+	    PyErr_VIM_FORMAT(N_("internal error: no vim list item %d"),
+		    (int)first);
+	    return -1;
+	}
+	if (last > first)
+	{
+	    i = last - first;
+	    while (i-- && li != NULL)
+	    {
+		next = li->li_next;
+		listitem_remove(l, li);
+		li = next;
+	    }
+	}
+    }
+
+    if (obj == NULL)
+	return 0;
+
+    if (!(iterator = PyObject_GetIter(obj)))
+	return -1;
+
+    while ((item = PyIter_Next(iterator)))
+    {
+	if (ConvertFromPyObject(item, &v) == -1)
+	{
+	    Py_DECREF(iterator);
+	    Py_DECREF(item);
+	    return -1;
+	}
+	Py_DECREF(item);
+	if (list_insert_tv(l, &v, li) == FAIL)
+	{
+	    clear_tv(&v);
+	    PyErr_SET_VIM(N_("internal error: failed to add item to list"));
+	    return -1;
+	}
+	clear_tv(&v);
+    }
+    Py_DECREF(iterator);
+
+    if (PyErr_Occurred())
+	return -1;
+
+    return 0;
+}
+
+    static PyObject *
+ListConcatInPlace(ListObject *self, PyObject *obj)
+{
+    list_T	*l = self->list;
+    PyObject	*lookup_dict;
+
+    if (l->lv_lock)
+    {
+	RAISE_LOCKED_LIST;
+	return NULL;
+    }
+
+    if (!(lookup_dict = PyDict_New()))
+	return NULL;
+
+    if (list_py_concat(l, obj, lookup_dict) == -1)
+    {
+	Py_DECREF(lookup_dict);
+	return NULL;
+    }
+    Py_DECREF(lookup_dict);
+
+    Py_INCREF(self);
+    return (PyObject *)(self);
+}
+
+static char *ListAttrs[] = {
+    "locked",
+    NULL
+};
+
+    static PyObject *
+ListDir(PyObject *self)
+{
+    return ObjectDir(self, ListAttrs);
+}
+
+    static int
+ListSetattr(ListObject *self, char *name, PyObject *valObject)
+{
+    if (valObject == NULL)
+    {
+	PyErr_SET_STRING(PyExc_AttributeError,
+		N_("cannot delete vim.List attributes"));
+	return -1;
+    }
+
+    if (strcmp(name, "locked") == 0)
+    {
+	if (self->list->lv_lock == VAR_FIXED)
+	{
+	    PyErr_SET_STRING(PyExc_TypeError, N_("cannot modify fixed list"));
+	    return -1;
+	}
+	else
+	{
+	    int		istrue = PyObject_IsTrue(valObject);
+	    if (istrue == -1)
+		return -1;
+	    else if (istrue)
+		self->list->lv_lock = VAR_LOCKED;
+	    else
+		self->list->lv_lock = 0;
+	}
+	return 0;
+    }
+    else
+    {
+	PyErr_FORMAT(PyExc_AttributeError, N_("cannot set attribute %s"), name);
+	return -1;
+    }
+}
+
+static struct PyMethodDef ListMethods[] = {
+    {"extend",	(PyCFunction)ListConcatInPlace,	METH_O,		""},
+    {"__dir__",	(PyCFunction)ListDir,		METH_NOARGS,	""},
+    { NULL,	NULL,				0,		NULL}
+};
+
+typedef struct
+{
+    PyObject_HEAD
+    char_u	*name;
+} FunctionObject;
+
+static PyTypeObject FunctionType;
+
+#define NEW_FUNCTION(name) FunctionNew(&FunctionType, name)
+
+    static PyObject *
+FunctionNew(PyTypeObject *subtype, char_u *name)
+{
+    FunctionObject	*self;
+
+    self = (FunctionObject *) subtype->tp_alloc(subtype, 0);
+
+    if (self == NULL)
+	return NULL;
+
+    if (isdigit(*name))
+    {
+	if (!translated_function_exists(name))
+	{
+	    PyErr_FORMAT(PyExc_ValueError,
+		    N_("unnamed function %s does not exist"), name);
+	    return NULL;
+	}
+	self->name = vim_strsave(name);
+	func_ref(self->name);
+    }
+    else
+	if ((self->name = get_expanded_name(name,
+				    vim_strchr(name, AUTOLOAD_CHAR) == NULL))
+		== NULL)
+	{
+	    PyErr_FORMAT(PyExc_ValueError,
+		    N_("function %s does not exist"), name);
+	    return NULL;
+	}
+
+    return (PyObject *)(self);
+}
+
+    static PyObject *
+FunctionConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
+{
+    PyObject	*self;
+    char_u	*name;
+
+    if (kwargs)
+    {
+	PyErr_SET_STRING(PyExc_TypeError,
+		N_("function constructor does not accept keyword arguments"));
+	return NULL;
+    }
+
+    if (!PyArg_ParseTuple(args, "et", "ascii", &name))
+	return NULL;
+
+    self = FunctionNew(subtype, name);
+
+    PyMem_Free(name);
+
+    return self;
+}
+
+    static void
+FunctionDestructor(FunctionObject *self)
+{
+    func_unref(self->name);
+    vim_free(self->name);
+
+    DESTRUCTOR_FINISH(self);
+}
+
+static char *FunctionAttrs[] = {
+    "softspace",
+    NULL
+};
+
+    static PyObject *
+FunctionDir(PyObject *self)
+{
+    return ObjectDir(self, FunctionAttrs);
+}
+
+    static PyObject *
+FunctionCall(FunctionObject *self, PyObject *argsObject, PyObject *kwargs)
+{
+    char_u	*name = self->name;
+    typval_T	args;
+    typval_T	selfdicttv;
+    typval_T	rettv;
+    dict_T	*selfdict = NULL;
+    PyObject	*selfdictObject;
+    PyObject	*ret;
+    int		error;
+
+    if (ConvertFromPyObject(argsObject, &args) == -1)
+	return NULL;
+
+    if (kwargs != NULL)
+    {
+	selfdictObject = PyDict_GetItemString(kwargs, "self");
+	if (selfdictObject != NULL)
+	{
+	    if (ConvertFromPyMapping(selfdictObject, &selfdicttv) == -1)
+	    {
+		clear_tv(&args);
+		return NULL;
+	    }
+	    selfdict = selfdicttv.vval.v_dict;
+	}
+    }
+
+    Py_BEGIN_ALLOW_THREADS
+    Python_Lock_Vim();
+
+    VimTryStart();
+    error = func_call(name, &args, selfdict, &rettv);
+
+    Python_Release_Vim();
+    Py_END_ALLOW_THREADS
+
+    if (VimTryEnd())
+	ret = NULL;
+    else if (error != OK)
+    {
+	ret = NULL;
+	PyErr_VIM_FORMAT(N_("failed to run function %s"), (char *)name);
+    }
+    else
+	ret = ConvertToPyObject(&rettv);
+
+    clear_tv(&args);
+    clear_tv(&rettv);
+    if (selfdict != NULL)
+	clear_tv(&selfdicttv);
+
+    return ret;
+}
+
+    static PyObject *
+FunctionRepr(FunctionObject *self)
+{
+#ifdef Py_TRACE_REFS
+    /* For unknown reason self->name may be NULL after calling
+     * Finalize */
+    return PyString_FromFormat("<vim.Function '%s'>",
+	    (self->name == NULL ? "<NULL>" : (char *)self->name));
+#else
+    return PyString_FromFormat("<vim.Function '%s'>", (char *)self->name);
+#endif
+}
+
+static struct PyMethodDef FunctionMethods[] = {
+    {"__dir__",	(PyCFunction)FunctionDir,   METH_NOARGS,		""},
+    { NULL,	NULL,			0,				NULL}
+};
+
+/*
+ * Options object
+ */
+
+static PyTypeObject OptionsType;
+
+typedef int (*checkfun)(void *);
+
+typedef struct
+{
+    PyObject_HEAD
+    int opt_type;
+    void *from;
+    checkfun Check;
+    PyObject *fromObj;
+} OptionsObject;
+
+    static int
+dummy_check(void *arg UNUSED)
+{
+    return 0;
+}
+
+    static PyObject *
+OptionsNew(int opt_type, void *from, checkfun Check, PyObject *fromObj)
+{
+    OptionsObject	*self;
+
+    self = PyObject_GC_New(OptionsObject, &OptionsType);
+    if (self == NULL)
+	return NULL;
+
+    self->opt_type = opt_type;
+    self->from = from;
+    self->Check = Check;
+    self->fromObj = fromObj;
+    if (fromObj)
+	Py_INCREF(fromObj);
+
+    return (PyObject *)(self);
+}
+
+    static void
+OptionsDestructor(OptionsObject *self)
+{
+    PyObject_GC_UnTrack((void *)(self));
+    Py_XDECREF(self->fromObj);
+    PyObject_GC_Del((void *)(self));
+}
+
+    static int
+OptionsTraverse(OptionsObject *self, visitproc visit, void *arg)
+{
+    Py_VISIT(self->fromObj);
+    return 0;
+}
+
+    static int
+OptionsClear(OptionsObject *self)
+{
+    Py_CLEAR(self->fromObj);
+    return 0;
+}
+
+    static PyObject *
+OptionsItem(OptionsObject *self, PyObject *keyObject)
+{
+    char_u	*key;
+    int		flags;
+    long	numval;
+    char_u	*stringval;
+    PyObject	*todecref;
+
+    if (self->Check(self->from))
+	return NULL;
+
+    if (!(key = StringToChars(keyObject, &todecref)))
+	return NULL;
+
+    if (*key == NUL)
+    {
+	RAISE_NO_EMPTY_KEYS;
+	Py_XDECREF(todecref);
+	return NULL;
+    }
+
+    flags = get_option_value_strict(key, &numval, &stringval,
+				    self->opt_type, self->from);
+
+    Py_XDECREF(todecref);
+
+    if (flags == 0)
+    {
+	PyErr_SetObject(PyExc_KeyError, keyObject);
+	return NULL;
+    }
+
+    if (flags & SOPT_UNSET)
+    {
+	Py_INCREF(Py_None);
+	return Py_None;
+    }
+    else if (flags & SOPT_BOOL)
+    {
+	PyObject	*ret;
+	ret = numval ? Py_True : Py_False;
+	Py_INCREF(ret);
+	return ret;
+    }
+    else if (flags & SOPT_NUM)
+	return PyInt_FromLong(numval);
+    else if (flags & SOPT_STRING)
+    {
+	if (stringval)
+	{
+	    PyObject	*ret = PyBytes_FromString((char *)stringval);
+	    vim_free(stringval);
+	    return ret;
+	}
+	else
+	{
+	    PyErr_SET_STRING(PyExc_RuntimeError,
+		    N_("unable to get option value"));
+	    return NULL;
+	}
+    }
+    else
+    {
+	PyErr_SET_VIM(N_("internal error: unknown option type"));
+	return NULL;
+    }
+}
+
+    static int
+set_option_value_err(char_u *key, int numval, char_u *stringval, int opt_flags)
+{
+    char_u	*errmsg;
+
+    if ((errmsg = set_option_value(key, numval, stringval, opt_flags)))
+    {
+	if (VimTryEnd())
+	    return FAIL;
+	PyErr_SetVim((char *)errmsg);
+	return FAIL;
+    }
+    return OK;
+}
+
+    static int
+set_option_value_for(
+	char_u *key,
+	int numval,
+	char_u *stringval,
+	int opt_flags,
+	int opt_type,
+	void *from)
+{
+    win_T	*save_curwin = NULL;
+    tabpage_T	*save_curtab = NULL;
+    buf_T	*save_curbuf = NULL;
+    int		set_ret = 0;
+
+    VimTryStart();
+    switch (opt_type)
+    {
+	case SREQ_WIN:
+	    if (switch_win(&save_curwin, &save_curtab, (win_T *)from,
+			      win_find_tabpage((win_T *)from), FALSE) == FAIL)
+	    {
+		if (VimTryEnd())
+		    return -1;
+		PyErr_SET_VIM(N_("problem while switching windows"));
+		return -1;
+	    }
+	    set_ret = set_option_value_err(key, numval, stringval, opt_flags);
+	    restore_win(save_curwin, save_curtab, TRUE);
+	    break;
+	case SREQ_BUF:
+	    switch_buffer(&save_curbuf, (buf_T *)from);
+	    set_ret = set_option_value_err(key, numval, stringval, opt_flags);
+	    restore_buffer(save_curbuf);
+	    break;
+	case SREQ_GLOBAL:
+	    set_ret = set_option_value_err(key, numval, stringval, opt_flags);
+	    break;
+    }
+    if (set_ret == FAIL)
+	return -1;
+    return VimTryEnd();
+}
+
+    static int
+OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject)
+{
+    char_u	*key;
+    int		flags;
+    int		opt_flags;
+    int		ret = 0;
+    PyObject	*todecref;
+
+    if (self->Check(self->from))
+	return -1;
+
+    if (!(key = StringToChars(keyObject, &todecref)))
+	return -1;
+
+    if (*key == NUL)
+    {
+	RAISE_NO_EMPTY_KEYS;
+	Py_XDECREF(todecref);
+	return -1;
+    }
+
+    flags = get_option_value_strict(key, NULL, NULL,
+				    self->opt_type, self->from);
+
+    if (flags == 0)
+    {
+	PyErr_SetObject(PyExc_KeyError, keyObject);
+	Py_XDECREF(todecref);
+	return -1;
+    }
+
+    if (valObject == NULL)
+    {
+	if (self->opt_type == SREQ_GLOBAL)
+	{
+	    PyErr_FORMAT(PyExc_ValueError,
+		    N_("unable to unset global option %s"), key);
+	    Py_XDECREF(todecref);
+	    return -1;
+	}
+	else if (!(flags & SOPT_GLOBAL))
+	{
+	    PyErr_FORMAT(PyExc_ValueError,
+		    N_("unable to unset option %s "
+		       "which does not have global value"), key);
+	    Py_XDECREF(todecref);
+	    return -1;
+	}
+	else
+	{
+	    unset_global_local_option(key, self->from);
+	    Py_XDECREF(todecref);
+	    return 0;
+	}
+    }
+
+    opt_flags = (self->opt_type ? OPT_LOCAL : OPT_GLOBAL);
+
+    if (flags & SOPT_BOOL)
+    {
+	int	istrue = PyObject_IsTrue(valObject);
+
+	if (istrue == -1)
+	    ret = -1;
+	else
+	    ret = set_option_value_for(key, istrue, NULL,
+				    opt_flags, self->opt_type, self->from);
+    }
+    else if (flags & SOPT_NUM)
+    {
+	long	val;
+
+	if (NumberToLong(valObject, &val, NUMBER_INT))
+	{
+	    Py_XDECREF(todecref);
+	    return -1;
+	}
+
+	ret = set_option_value_for(key, (int) val, NULL, opt_flags,
+				self->opt_type, self->from);
+    }
+    else
+    {
+	char_u		*val;
+	PyObject	*todecref;
+
+	if ((val = StringToChars(valObject, &todecref)))
+	    ret = set_option_value_for(key, 0, val, opt_flags,
+				    self->opt_type, self->from);
+	else
+	    ret = -1;
+    }
+
+    Py_XDECREF(todecref);
+
+    return ret;
+}
+
+static PyMappingMethods OptionsAsMapping = {
+    (lenfunc)       NULL,
+    (binaryfunc)    OptionsItem,
+    (objobjargproc) OptionsAssItem,
+};
+
+/* Tabpage object
+ */
+
+typedef struct
+{
+    PyObject_HEAD
+    tabpage_T	*tab;
+} TabPageObject;
+
+static PyObject *WinListNew(TabPageObject *tabObject);
+
+static PyTypeObject TabPageType;
+
+    static int
+CheckTabPage(TabPageObject *self)
+{
+    if (self->tab == INVALID_TABPAGE_VALUE)
+    {
+	PyErr_SET_VIM(N_("attempt to refer to deleted tab page"));
+	return -1;
+    }
+
+    return 0;
+}
+
+    static PyObject *
+TabPageNew(tabpage_T *tab)
+{
+    TabPageObject *self;
+
+    if (TAB_PYTHON_REF(tab))
+    {
+	self = TAB_PYTHON_REF(tab);
+	Py_INCREF(self);
+    }
+    else
+    {
+	self = PyObject_NEW(TabPageObject, &TabPageType);
+	if (self == NULL)
+	    return NULL;
+	self->tab = tab;
+	TAB_PYTHON_REF(tab) = self;
+    }
+
+    return (PyObject *)(self);
+}
+
+    static void
+TabPageDestructor(TabPageObject *self)
+{
+    if (self->tab && self->tab != INVALID_TABPAGE_VALUE)
+	TAB_PYTHON_REF(self->tab) = NULL;
+
+    DESTRUCTOR_FINISH(self);
+}
+
+static char *TabPageAttrs[] = {
+    "windows", "number", "vars", "window", "valid",
+    NULL
+};
+
+    static PyObject *
+TabPageDir(PyObject *self)
+{
+    return ObjectDir(self, TabPageAttrs);
+}
+
+    static PyObject *
+TabPageAttrValid(TabPageObject *self, char *name)
+{
+    PyObject	*ret;
+
+    if (strcmp(name, "valid") != 0)
+	return NULL;
+
+    ret = ((self->tab == INVALID_TABPAGE_VALUE) ? Py_False : Py_True);
+    Py_INCREF(ret);
+    return ret;
+}
+
+    static PyObject *
+TabPageAttr(TabPageObject *self, char *name)
+{
+    if (strcmp(name, "windows") == 0)
+	return WinListNew(self);
+    else if (strcmp(name, "number") == 0)
+	return PyLong_FromLong((long) get_tab_number(self->tab));
+    else if (strcmp(name, "vars") == 0)
+	return NEW_DICTIONARY(self->tab->tp_vars);
+    else if (strcmp(name, "window") == 0)
+    {
+	/* For current tab window.c does not bother to set or update tp_curwin
+	 */
+	if (self->tab == curtab)
+	    return WindowNew(curwin, curtab);
+	else
+	    return WindowNew(self->tab->tp_curwin, self->tab);
+    }
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, TabPageAttrs);
+    return NULL;
+}
+
+    static PyObject *
+TabPageRepr(TabPageObject *self)
+{
+    if (self->tab == INVALID_TABPAGE_VALUE)
+	return PyString_FromFormat("<tabpage object (deleted) at %p>", (self));
+    else
+    {
+	int	t = get_tab_number(self->tab);
+
+	if (t == 0)
+	    return PyString_FromFormat("<tabpage object (unknown) at %p>",
+					(self));
+	else
+	    return PyString_FromFormat("<tabpage %d>", t - 1);
+    }
+}
+
+static struct PyMethodDef TabPageMethods[] = {
+    /* name,	    function,			calling,	documentation */
+    {"__dir__",	    (PyCFunction)TabPageDir,	METH_NOARGS,	""},
+    { NULL,	    NULL,			0,		NULL}
+};
+
+/*
+ * Window list object
+ */
+
+static PyTypeObject TabListType;
+static PySequenceMethods TabListAsSeq;
+
+typedef struct
+{
+    PyObject_HEAD
+} TabListObject;
+
+    static PyInt
+TabListLength(PyObject *self UNUSED)
+{
+    tabpage_T	*tp = first_tabpage;
+    PyInt	n = 0;
+
+    while (tp != NULL)
+    {
+	++n;
+	tp = tp->tp_next;
+    }
+
+    return n;
+}
+
+    static PyObject *
+TabListItem(PyObject *self UNUSED, PyInt n)
+{
+    tabpage_T	*tp;
+
+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, --n)
+	if (n == 0)
+	    return TabPageNew(tp);
+
+    PyErr_SET_STRING(PyExc_IndexError, N_("no such tab page"));
+    return NULL;
+}
+
+/*
+ * Window object
+ */
+
+typedef struct
+{
+    PyObject_HEAD
+    win_T	*win;
+    TabPageObject	*tabObject;
+} WindowObject;
+
+static PyTypeObject WindowType;
+
+    static int
+CheckWindow(WindowObject *self)
+{
+    if (self->win == INVALID_WINDOW_VALUE)
+    {
+	PyErr_SET_VIM(N_("attempt to refer to deleted window"));
+	return -1;
+    }
+
+    return 0;
+}
+
+    static PyObject *
+WindowNew(win_T *win, tabpage_T *tab)
+{
+    /* We need to handle deletion of windows underneath us.
+     * If we add a "w_python*_ref" field to the win_T structure,
+     * then we can get at it in win_free() in vim. We then
+     * need to create only ONE Python object per window - if
+     * we try to create a second, just INCREF the existing one
+     * and return it. The (single) Python object referring to
+     * the window is stored in "w_python*_ref".
+     * On a win_free() we set the Python object's win_T* field
+     * to an invalid value. We trap all uses of a window
+     * object, and reject them if the win_T* field is invalid.
+     *
+     * Python2 and Python3 get different fields and different objects:
+     * w_python_ref and w_python3_ref fields respectively.
+     */
+
+    WindowObject *self;
+
+    if (WIN_PYTHON_REF(win))
+    {
+	self = WIN_PYTHON_REF(win);
+	Py_INCREF(self);
+    }
+    else
+    {
+	self = PyObject_GC_New(WindowObject, &WindowType);
+	if (self == NULL)
+	    return NULL;
+	self->win = win;
+	WIN_PYTHON_REF(win) = self;
+    }
+
+    self->tabObject = ((TabPageObject *)(TabPageNew(tab)));
+
+    return (PyObject *)(self);
+}
+
+    static void
+WindowDestructor(WindowObject *self)
+{
+    PyObject_GC_UnTrack((void *)(self));
+    if (self->win && self->win != INVALID_WINDOW_VALUE)
+	WIN_PYTHON_REF(self->win) = NULL;
+     Py_XDECREF(((PyObject *)(self->tabObject)));
+    PyObject_GC_Del((void *)(self));
+}
+
+    static int
+WindowTraverse(WindowObject *self, visitproc visit, void *arg)
+{
+    Py_VISIT(((PyObject *)(self->tabObject)));
+    return 0;
+}
+
+    static int
+WindowClear(WindowObject *self)
+{
+    Py_CLEAR(self->tabObject);
+    return 0;
+}
+
+    static win_T *
+get_firstwin(TabPageObject *tabObject)
+{
+    if (tabObject)
+    {
+	if (CheckTabPage(tabObject))
+	    return NULL;
+	/* For current tab window.c does not bother to set or update tp_firstwin
+	 */
+	else if (tabObject->tab == curtab)
+	    return firstwin;
+	else
+	    return tabObject->tab->tp_firstwin;
+    }
+    else
+	return firstwin;
+}
+static char *WindowAttrs[] = {
+    "buffer", "cursor", "height", "vars", "options", "number", "row", "col",
+    "tabpage", "valid",
+    NULL
+};
+
+    static PyObject *
+WindowDir(PyObject *self)
+{
+    return ObjectDir(self, WindowAttrs);
+}
+
+    static PyObject *
+WindowAttrValid(WindowObject *self, char *name)
+{
+    PyObject	*ret;
+
+    if (strcmp(name, "valid") != 0)
+	return NULL;
+
+    ret = ((self->win == INVALID_WINDOW_VALUE) ? Py_False : Py_True);
+    Py_INCREF(ret);
+    return ret;
+}
+
+    static PyObject *
+WindowAttr(WindowObject *self, char *name)
+{
+    if (strcmp(name, "buffer") == 0)
+	return (PyObject *)BufferNew(self->win->w_buffer);
+    else if (strcmp(name, "cursor") == 0)
+    {
+	pos_T *pos = &self->win->w_cursor;
+
+	return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
+    }
+    else if (strcmp(name, "height") == 0)
+	return PyLong_FromLong((long)(self->win->w_height));
+#ifdef FEAT_WINDOWS
+    else if (strcmp(name, "row") == 0)
+	return PyLong_FromLong((long)(self->win->w_winrow));
+#endif
+#ifdef FEAT_VERTSPLIT
+    else if (strcmp(name, "width") == 0)
+	return PyLong_FromLong((long)(W_WIDTH(self->win)));
+    else if (strcmp(name, "col") == 0)
+	return PyLong_FromLong((long)(W_WINCOL(self->win)));
+#endif
+    else if (strcmp(name, "vars") == 0)
+	return NEW_DICTIONARY(self->win->w_vars);
+    else if (strcmp(name, "options") == 0)
+	return OptionsNew(SREQ_WIN, self->win, (checkfun) CheckWindow,
+			(PyObject *) self);
+    else if (strcmp(name, "number") == 0)
+    {
+	if (CheckTabPage(self->tabObject))
+	    return NULL;
+	return PyLong_FromLong((long)
+		get_win_number(self->win, get_firstwin(self->tabObject)));
+    }
+    else if (strcmp(name, "tabpage") == 0)
+    {
+	Py_INCREF(self->tabObject);
+	return (PyObject *)(self->tabObject);
+    }
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, WindowAttrs);
+    else
+	return NULL;
+}
+
+    static int
+WindowSetattr(WindowObject *self, char *name, PyObject *valObject)
+{
+    if (CheckWindow(self))
+	return -1;
+
+    if (strcmp(name, "buffer") == 0)
+    {
+	PyErr_SET_STRING(PyExc_TypeError, N_("readonly attribute: buffer"));
+	return -1;
+    }
+    else if (strcmp(name, "cursor") == 0)
+    {
+	long lnum;
+	long col;
+
+	if (!PyArg_Parse(valObject, "(ll)", &lnum, &col))
+	    return -1;
+
+	if (lnum <= 0 || lnum > self->win->w_buffer->b_ml.ml_line_count)
+	{
+	    PyErr_SET_VIM(N_("cursor position outside buffer"));
+	    return -1;
+	}
+
+	/* Check for keyboard interrupts */
+	if (VimCheckInterrupt())
+	    return -1;
+
+	self->win->w_cursor.lnum = lnum;
+	self->win->w_cursor.col = col;
+#ifdef FEAT_VIRTUALEDIT
+	self->win->w_cursor.coladd = 0;
+#endif
+	/* When column is out of range silently correct it. */
+	check_cursor_col_win(self->win);
+
+	update_screen(VALID);
+	return 0;
+    }
+    else if (strcmp(name, "height") == 0)
+    {
+	long	height;
+	win_T	*savewin;
+
+	if (NumberToLong(valObject, &height, NUMBER_INT|NUMBER_UNSIGNED))
+	    return -1;
+
+#ifdef FEAT_GUI
+	need_mouse_correct = TRUE;
+#endif
+	savewin = curwin;
+	curwin = self->win;
+
+	VimTryStart();
+	win_setheight((int) height);
+	curwin = savewin;
+	if (VimTryEnd())
+	    return -1;
+
+	return 0;
+    }
+#ifdef FEAT_VERTSPLIT
+    else if (strcmp(name, "width") == 0)
+    {
+	long	width;
+	win_T	*savewin;
+
+	if (NumberToLong(valObject, &width, NUMBER_INT|NUMBER_UNSIGNED))
+	    return -1;
+
+#ifdef FEAT_GUI
+	need_mouse_correct = TRUE;
+#endif
+	savewin = curwin;
+	curwin = self->win;
+
+	VimTryStart();
+	win_setwidth((int) width);
+	curwin = savewin;
+	if (VimTryEnd())
+	    return -1;
+
+	return 0;
+    }
+#endif
+    else
+    {
+	PyErr_SetString(PyExc_AttributeError, name);
+	return -1;
+    }
+}
+
+    static PyObject *
+WindowRepr(WindowObject *self)
+{
+    if (self->win == INVALID_WINDOW_VALUE)
+	return PyString_FromFormat("<window object (deleted) at %p>", (self));
+    else
+    {
+	int	w = get_win_number(self->win, firstwin);
+
+	if (w == 0)
+	    return PyString_FromFormat("<window object (unknown) at %p>",
+								      (self));
+	else
+	    return PyString_FromFormat("<window %d>", w - 1);
+    }
+}
+
+static struct PyMethodDef WindowMethods[] = {
+    /* name,	    function,			calling,	documentation */
+    {"__dir__",	    (PyCFunction)WindowDir,	METH_NOARGS,	""},
+    { NULL,	    NULL,			0,		NULL}
+};
+
+/*
+ * Window list object
+ */
+
+static PyTypeObject WinListType;
+static PySequenceMethods WinListAsSeq;
+
+typedef struct
+{
+    PyObject_HEAD
+    TabPageObject	*tabObject;
+} WinListObject;
+
+    static PyObject *
+WinListNew(TabPageObject *tabObject)
+{
+    WinListObject	*self;
+
+    self = PyObject_NEW(WinListObject, &WinListType);
+    self->tabObject = tabObject;
+    Py_INCREF(tabObject);
+
+    return (PyObject *)(self);
+}
+
+    static void
+WinListDestructor(WinListObject *self)
+{
+    TabPageObject	*tabObject = self->tabObject;
+
+    if (tabObject)
+    {
+	Py_DECREF((PyObject *)(tabObject));
+    }
+
+    DESTRUCTOR_FINISH(self);
+}
+
+    static PyInt
+WinListLength(WinListObject *self)
+{
+    win_T	*w;
+    PyInt	n = 0;
+
+    if (!(w = get_firstwin(self->tabObject)))
+	return -1;
+
+    while (w != NULL)
+    {
+	++n;
+	w = W_NEXT(w);
+    }
+
+    return n;
+}
+
+    static PyObject *
+WinListItem(WinListObject *self, PyInt n)
+{
+    win_T *w;
+
+    if (!(w = get_firstwin(self->tabObject)))
+	return NULL;
+
+    for (; w != NULL; w = W_NEXT(w), --n)
+	if (n == 0)
+	    return WindowNew(w, self->tabObject? self->tabObject->tab: curtab);
+
+    PyErr_SET_STRING(PyExc_IndexError, N_("no such window"));
+    return NULL;
+}
+
+/* Convert a Python string into a Vim line.
+ *
+ * The result is in allocated memory. All internal nulls are replaced by
+ * newline characters. It is an error for the string to contain newline
+ * characters.
+ *
+ * On errors, the Python exception data is set, and NULL is returned.
+ */
+    static char *
+StringToLine(PyObject *obj)
+{
+    char	*str;
+    char	*save;
+    PyObject	*bytes = NULL;
+    Py_ssize_t	len = 0;
+    PyInt	i;
+    char	*p;
+
+    if (PyBytes_Check(obj))
+    {
+	if (PyBytes_AsStringAndSize(obj, &str, &len) == -1
+		|| str == NULL)
+	    return NULL;
+    }
+    else if (PyUnicode_Check(obj))
+    {
+	if (!(bytes = PyUnicode_AsEncodedString(obj, ENC_OPT, NULL)))
+	    return NULL;
+
+	if (PyBytes_AsStringAndSize(bytes, &str, &len) == -1
+		|| str == NULL)
+	{
+	    Py_DECREF(bytes);
+	    return NULL;
+	}
+    }
+    else
+    {
+#if PY_MAJOR_VERSION < 3
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("expected str() or unicode() instance, but got %s"),
+		Py_TYPE_NAME(obj));
+#else
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("expected bytes() or str() instance, but got %s"),
+		Py_TYPE_NAME(obj));
+#endif
+	return NULL;
+    }
+
+    /*
+     * Error checking: String must not contain newlines, as we
+     * are replacing a single line, and we must replace it with
+     * a single line.
+     * A trailing newline is removed, so that append(f.readlines()) works.
+     */
+    p = memchr(str, '\n', len);
+    if (p != NULL)
+    {
+	if (p == str + len - 1)
+	    --len;
+	else
+	{
+	    PyErr_SET_VIM(N_("string cannot contain newlines"));
+	    Py_XDECREF(bytes);
+	    return NULL;
+	}
+    }
+
+    /* Create a copy of the string, with internal nulls replaced by
+     * newline characters, as is the vim convention.
+     */
+    save = (char *)alloc((unsigned)(len+1));
+    if (save == NULL)
+    {
+	PyErr_NoMemory();
+	Py_XDECREF(bytes);
+	return NULL;
+    }
+
+    for (i = 0; i < len; ++i)
+    {
+	if (str[i] == '\0')
+	    save[i] = '\n';
+	else
+	    save[i] = str[i];
+    }
+
+    save[i] = '\0';
+    Py_XDECREF(bytes);  /* Python 2 does nothing here */
+
+    return save;
+}
+
+/* Get a line from the specified buffer. The line number is
+ * in Vim format (1-based). The line is returned as a Python
+ * string object.
+ */
+    static PyObject *
+GetBufferLine(buf_T *buf, PyInt n)
+{
+    return LineToString((char *)ml_get_buf(buf, (linenr_T)n, FALSE));
+}
+
+
+/* Get a list of lines from the specified buffer. The line numbers
+ * are in Vim format (1-based). The range is from lo up to, but not
+ * including, hi. The list is returned as a Python list of string objects.
+ */
+    static PyObject *
+GetBufferLineList(buf_T *buf, PyInt lo, PyInt hi)
+{
+    PyInt	i;
+    PyInt	n = hi - lo;
+    PyObject	*list = PyList_New(n);
+
+    if (list == NULL)
+	return NULL;
+
+    for (i = 0; i < n; ++i)
+    {
+	PyObject	*string = LineToString(
+		(char *)ml_get_buf(buf, (linenr_T)(lo+i), FALSE));
+
+	/* Error check - was the Python string creation OK? */
+	if (string == NULL)
+	{
+	    Py_DECREF(list);
+	    return NULL;
+	}
+
+	PyList_SET_ITEM(list, i, string);
+    }
+
+    /* The ownership of the Python list is passed to the caller (ie,
+     * the caller should Py_DECREF() the object when it is finished
+     * with it).
+     */
+
+    return list;
+}
+
+/*
+ * Check if deleting lines made the cursor position invalid.
+ * Changed the lines from "lo" to "hi" and added "extra" lines (negative if
+ * deleted).
+ */
+    static void
+py_fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra)
+{
+    if (curwin->w_cursor.lnum >= lo)
+    {
+	/* Adjust the cursor position if it's in/after the changed
+	 * lines. */
+	if (curwin->w_cursor.lnum >= hi)
+	{
+	    curwin->w_cursor.lnum += extra;
+	    check_cursor_col();
+	}
+	else if (extra < 0)
+	{
+	    curwin->w_cursor.lnum = lo;
+	    check_cursor();
+	}
+	else
+	    check_cursor_col();
+	changed_cline_bef_curs();
+    }
+    invalidate_botline();
+}
+
+/*
+ * Replace a line in the specified buffer. The line number is
+ * in Vim format (1-based). The replacement line is given as
+ * a Python string object. The object is checked for validity
+ * and correct format. Errors are returned as a value of FAIL.
+ * The return value is OK on success.
+ * If OK is returned and len_change is not NULL, *len_change
+ * is set to the change in the buffer length.
+ */
+    static int
+SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
+{
+    /* First of all, we check the type of the supplied Python object.
+     * There are three cases:
+     *	  1. NULL, or None - this is a deletion.
+     *	  2. A string	   - this is a replacement.
+     *	  3. Anything else - this is an error.
+     */
+    if (line == Py_None || line == NULL)
+    {
+	buf_T	*savebuf;
+
+	PyErr_Clear();
+	switch_buffer(&savebuf, buf);
+
+	VimTryStart();
+
+	if (u_savedel((linenr_T)n, 1L) == FAIL)
+	    RAISE_UNDO_FAIL;
+	else if (ml_delete((linenr_T)n, FALSE) == FAIL)
+	    RAISE_DELETE_LINE_FAIL;
+	else
+	{
+	    if (buf == savebuf)
+		py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
+	    deleted_lines_mark((linenr_T)n, 1L);
+	}
+
+	restore_buffer(savebuf);
+
+	if (VimTryEnd())
+	    return FAIL;
+
+	if (len_change)
+	    *len_change = -1;
+
+	return OK;
+    }
+    else if (PyBytes_Check(line) || PyUnicode_Check(line))
+    {
+	char	*save = StringToLine(line);
+	buf_T	*savebuf;
+
+	if (save == NULL)
+	    return FAIL;
+
+	VimTryStart();
+
+	/* We do not need to free "save" if ml_replace() consumes it. */
+	PyErr_Clear();
+	switch_buffer(&savebuf, buf);
+
+	if (u_savesub((linenr_T)n) == FAIL)
+	{
+	    RAISE_UNDO_FAIL;
+	    vim_free(save);
+	}
+	else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
+	{
+	    RAISE_REPLACE_LINE_FAIL;
+	    vim_free(save);
+	}
+	else
+	    changed_bytes((linenr_T)n, 0);
+
+	restore_buffer(savebuf);
+
+	/* Check that the cursor is not beyond the end of the line now. */
+	if (buf == savebuf)
+	    check_cursor_col();
+
+	if (VimTryEnd())
+	    return FAIL;
+
+	if (len_change)
+	    *len_change = 0;
+
+	return OK;
+    }
+    else
+    {
+	PyErr_BadArgument();
+	return FAIL;
+    }
+}
+
+/* Replace a range of lines in the specified buffer. The line numbers are in
+ * Vim format (1-based). The range is from lo up to, but not including, hi.
+ * The replacement lines are given as a Python list of string objects. The
+ * list is checked for validity and correct format. Errors are returned as a
+ * value of FAIL.  The return value is OK on success.
+ * If OK is returned and len_change is not NULL, *len_change
+ * is set to the change in the buffer length.
+ */
+    static int
+SetBufferLineList(
+	buf_T *buf,
+	PyInt lo,
+	PyInt hi,
+	PyObject *list,
+	PyInt *len_change)
+{
+    /* First of all, we check the type of the supplied Python object.
+     * There are three cases:
+     *	  1. NULL, or None - this is a deletion.
+     *	  2. A list	   - this is a replacement.
+     *	  3. Anything else - this is an error.
+     */
+    if (list == Py_None || list == NULL)
+    {
+	PyInt	i;
+	PyInt	n = (int)(hi - lo);
+	buf_T	*savebuf;
+
+	PyErr_Clear();
+	VimTryStart();
+	switch_buffer(&savebuf, buf);
+
+	if (u_savedel((linenr_T)lo, (long)n) == FAIL)
+	    RAISE_UNDO_FAIL;
+	else
+	{
+	    for (i = 0; i < n; ++i)
+	    {
+		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+		{
+		    RAISE_DELETE_LINE_FAIL;
+		    break;
+		}
+	    }
+	    if (buf == savebuf)
+		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
+	    deleted_lines_mark((linenr_T)lo, (long)i);
+	}
+
+	restore_buffer(savebuf);
+
+	if (VimTryEnd())
+	    return FAIL;
+
+	if (len_change)
+	    *len_change = -n;
+
+	return OK;
+    }
+    else if (PyList_Check(list))
+    {
+	PyInt	i;
+	PyInt	new_len = PyList_Size(list);
+	PyInt	old_len = hi - lo;
+	PyInt	extra = 0;	/* lines added to text, can be negative */
+	char	**array;
+	buf_T	*savebuf;
+
+	if (new_len == 0)	/* avoid allocating zero bytes */
+	    array = NULL;
+	else
+	{
+	    array = PyMem_New(char *, new_len);
+	    if (array == NULL)
+	    {
+		PyErr_NoMemory();
+		return FAIL;
+	    }
+	}
+
+	for (i = 0; i < new_len; ++i)
+	{
+	    PyObject *line;
+
+	    if (!(line = PyList_GetItem(list, i)) ||
+		!(array[i] = StringToLine(line)))
+	    {
+		while (i)
+		    vim_free(array[--i]);
+		PyMem_Free(array);
+		return FAIL;
+	    }
+	}
+
+	VimTryStart();
+	PyErr_Clear();
+
+	/* START of region without "return".  Must call restore_buffer()! */
+	switch_buffer(&savebuf, buf);
+
+	if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
+	    RAISE_UNDO_FAIL;
+
+	/* If the size of the range is reducing (ie, new_len < old_len) we
+	 * need to delete some old_len. We do this at the start, by
+	 * repeatedly deleting line "lo".
+	 */
+	if (!PyErr_Occurred())
+	{
+	    for (i = 0; i < old_len - new_len; ++i)
+		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+		{
+		    RAISE_DELETE_LINE_FAIL;
+		    break;
+		}
+	    extra -= i;
+	}
+
+	/* For as long as possible, replace the existing old_len with the
+	 * new old_len. This is a more efficient operation, as it requires
+	 * less memory allocation and freeing.
+	 */
+	if (!PyErr_Occurred())
+	{
+	    for (i = 0; i < old_len && i < new_len; ++i)
+		if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
+								      == FAIL)
+		{
+		    RAISE_REPLACE_LINE_FAIL;
+		    break;
+		}
+	}
+	else
+	    i = 0;
+
+	/* Now we may need to insert the remaining new old_len. If we do, we
+	 * must free the strings as we finish with them (we can't pass the
+	 * responsibility to vim in this case).
+	 */
+	if (!PyErr_Occurred())
+	{
+	    while (i < new_len)
+	    {
+		if (ml_append((linenr_T)(lo + i - 1),
+					(char_u *)array[i], 0, FALSE) == FAIL)
+		{
+		    RAISE_INSERT_LINE_FAIL;
+		    break;
+		}
+		vim_free(array[i]);
+		++i;
+		++extra;
+	    }
+	}
+
+	/* Free any left-over old_len, as a result of an error */
+	while (i < new_len)
+	{
+	    vim_free(array[i]);
+	    ++i;
+	}
+
+	/* Free the array of old_len. All of its contents have now
+	 * been dealt with (either freed, or the responsibility passed
+	 * to vim.
+	 */
+	PyMem_Free(array);
+
+	/* Adjust marks. Invalidate any which lie in the
+	 * changed range, and move any in the remainder of the buffer.
+	 */
+	mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
+						  (long)MAXLNUM, (long)extra);
+	changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
+
+	if (buf == savebuf)
+	    py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
+
+	/* END of region without "return". */
+	restore_buffer(savebuf);
+
+	if (VimTryEnd())
+	    return FAIL;
+
+	if (len_change)
+	    *len_change = new_len - old_len;
+
+	return OK;
+    }
+    else
+    {
+	PyErr_BadArgument();
+	return FAIL;
+    }
+}
+
+/* Insert a number of lines into the specified buffer after the specified line.
+ * The line number is in Vim format (1-based). The lines to be inserted are
+ * given as a Python list of string objects or as a single string. The lines
+ * to be added are checked for validity and correct format. Errors are
+ * returned as a value of FAIL.  The return value is OK on success.
+ * If OK is returned and len_change is not NULL, *len_change
+ * is set to the change in the buffer length.
+ */
+    static int
+InsertBufferLines(buf_T *buf, PyInt n, PyObject *lines, PyInt *len_change)
+{
+    /* First of all, we check the type of the supplied Python object.
+     * It must be a string or a list, or the call is in error.
+     */
+    if (PyBytes_Check(lines) || PyUnicode_Check(lines))
+    {
+	char	*str = StringToLine(lines);
+	buf_T	*savebuf;
+
+	if (str == NULL)
+	    return FAIL;
+
+	PyErr_Clear();
+	VimTryStart();
+	switch_buffer(&savebuf, buf);
+
+	if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL)
+	    RAISE_UNDO_FAIL;
+	else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL)
+	    RAISE_INSERT_LINE_FAIL;
+	else
+	    appended_lines_mark((linenr_T)n, 1L);
+
+	vim_free(str);
+	restore_buffer(savebuf);
+	update_screen(VALID);
+
+	if (VimTryEnd())
+	    return FAIL;
+
+	if (len_change)
+	    *len_change = 1;
+
+	return OK;
+    }
+    else if (PyList_Check(lines))
+    {
+	PyInt	i;
+	PyInt	size = PyList_Size(lines);
+	char	**array;
+	buf_T	*savebuf;
+
+	array = PyMem_New(char *, size);
+	if (array == NULL)
+	{
+	    PyErr_NoMemory();
+	    return FAIL;
+	}
+
+	for (i = 0; i < size; ++i)
+	{
+	    PyObject *line;
+
+	    if (!(line = PyList_GetItem(lines, i)) ||
+		!(array[i] = StringToLine(line)))
+	    {
+		while (i)
+		    vim_free(array[--i]);
+		PyMem_Free(array);
+		return FAIL;
+	    }
+	}
+
+	PyErr_Clear();
+	VimTryStart();
+	switch_buffer(&savebuf, buf);
+
+	if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL)
+	    RAISE_UNDO_FAIL;
+	else
+	{
+	    for (i = 0; i < size; ++i)
+	    {
+		if (ml_append((linenr_T)(n + i),
+					(char_u *)array[i], 0, FALSE) == FAIL)
+		{
+		    RAISE_INSERT_LINE_FAIL;
 
 		    /* Free the rest of the lines */
 		    while (i < size)
 			vim_free(array[i++]);
 
-		    break;
-		}
-		vim_free(array[i]);
+		    break;
+		}
+		vim_free(array[i]);
+	    }
+	    if (i > 0)
+		appended_lines_mark((linenr_T)n, (long)i);
+	}
+
+	/* Free the array of lines. All of its contents have now
+	 * been freed.
+	 */
+	PyMem_Free(array);
+
+	restore_buffer(savebuf);
+	update_screen(VALID);
+
+	if (VimTryEnd())
+	    return FAIL;
+
+	if (len_change)
+	    *len_change = size;
+
+	return OK;
+    }
+    else
+    {
+	PyErr_BadArgument();
+	return FAIL;
+    }
+}
+
+/*
+ * Common routines for buffers and line ranges
+ * -------------------------------------------
+ */
+
+typedef struct
+{
+    PyObject_HEAD
+    buf_T *buf;
+} BufferObject;
+
+    static int
+CheckBuffer(BufferObject *self)
+{
+    if (self->buf == INVALID_BUFFER_VALUE)
+    {
+	PyErr_SET_VIM(N_("attempt to refer to deleted buffer"));
+	return -1;
+    }
+
+    return 0;
+}
+
+    static PyObject *
+RBItem(BufferObject *self, PyInt n, PyInt start, PyInt end)
+{
+    if (CheckBuffer(self))
+	return NULL;
+
+    if (end == -1)
+	end = self->buf->b_ml.ml_line_count;
+
+    if (n < 0)
+	n += end - start + 1;
+
+    if (n < 0 || n > end - start)
+    {
+	PyErr_SET_STRING(PyExc_IndexError, N_("line number out of range"));
+	return NULL;
+    }
+
+    return GetBufferLine(self->buf, n+start);
+}
+
+    static PyObject *
+RBSlice(BufferObject *self, PyInt lo, PyInt hi, PyInt start, PyInt end)
+{
+    PyInt size;
+
+    if (CheckBuffer(self))
+	return NULL;
+
+    if (end == -1)
+	end = self->buf->b_ml.ml_line_count;
+
+    size = end - start + 1;
+
+    if (lo < 0)
+	lo = 0;
+    else if (lo > size)
+	lo = size;
+    if (hi < 0)
+	hi = 0;
+    if (hi < lo)
+	hi = lo;
+    else if (hi > size)
+	hi = size;
+
+    return GetBufferLineList(self->buf, lo+start, hi+start);
+}
+
+    static PyInt
+RBAsItem(
+	BufferObject *self,
+	PyInt n,
+	PyObject *valObject,
+	PyInt start,
+	PyInt end,
+	PyInt *new_end)
+{
+    PyInt len_change;
+
+    if (CheckBuffer(self))
+	return -1;
+
+    if (end == -1)
+	end = self->buf->b_ml.ml_line_count;
+
+    if (n < 0)
+	n += end - start + 1;
+
+    if (n < 0 || n > end - start)
+    {
+	PyErr_SET_STRING(PyExc_IndexError, N_("line number out of range"));
+	return -1;
+    }
+
+    if (SetBufferLine(self->buf, n+start, valObject, &len_change) == FAIL)
+	return -1;
+
+    if (new_end)
+	*new_end = end + len_change;
+
+    return 0;
+}
+
+    static PyInt
+RBAsSlice(
+	BufferObject *self,
+	PyInt lo,
+	PyInt hi,
+	PyObject *valObject,
+	PyInt start,
+	PyInt end,
+	PyInt *new_end)
+{
+    PyInt size;
+    PyInt len_change;
+
+    /* Self must be a valid buffer */
+    if (CheckBuffer(self))
+	return -1;
+
+    if (end == -1)
+	end = self->buf->b_ml.ml_line_count;
+
+    /* Sort out the slice range */
+    size = end - start + 1;
+
+    if (lo < 0)
+	lo = 0;
+    else if (lo > size)
+	lo = size;
+    if (hi < 0)
+	hi = 0;
+    if (hi < lo)
+	hi = lo;
+    else if (hi > size)
+	hi = size;
+
+    if (SetBufferLineList(self->buf, lo + start, hi + start,
+						valObject, &len_change) == FAIL)
+	return -1;
+
+    if (new_end)
+	*new_end = end + len_change;
+
+    return 0;
+}
+
+
+    static PyObject *
+RBAppend(
+	BufferObject *self,
+	PyObject *args,
+	PyInt start,
+	PyInt end,
+	PyInt *new_end)
+{
+    PyObject *lines;
+    PyInt len_change;
+    PyInt max;
+    PyInt n;
+
+    if (CheckBuffer(self))
+	return NULL;
+
+    if (end == -1)
+	end = self->buf->b_ml.ml_line_count;
+
+    max = n = end - start + 1;
+
+    if (!PyArg_ParseTuple(args, "O|n", &lines, &n))
+	return NULL;
+
+    if (n < 0 || n > max)
+    {
+	PyErr_SET_STRING(PyExc_IndexError, N_("line number out of range"));
+	return NULL;
+    }
+
+    if (InsertBufferLines(self->buf, n + start - 1, lines, &len_change) == FAIL)
+	return NULL;
+
+    if (new_end)
+	*new_end = end + len_change;
+
+    Py_INCREF(Py_None);
+    return Py_None;
+}
+
+/* Range object
+ */
+
+static PyTypeObject RangeType;
+static PySequenceMethods RangeAsSeq;
+static PyMappingMethods RangeAsMapping;
+
+typedef struct
+{
+    PyObject_HEAD
+    BufferObject *buf;
+    PyInt start;
+    PyInt end;
+} RangeObject;
+
+    static PyObject *
+RangeNew(buf_T *buf, PyInt start, PyInt end)
+{
+    BufferObject *bufr;
+    RangeObject *self;
+    self = PyObject_GC_New(RangeObject, &RangeType);
+    if (self == NULL)
+	return NULL;
+
+    bufr = (BufferObject *)BufferNew(buf);
+    if (bufr == NULL)
+    {
+	Py_DECREF(self);
+	return NULL;
+    }
+    Py_INCREF(bufr);
+
+    self->buf = bufr;
+    self->start = start;
+    self->end = end;
+
+    return (PyObject *)(self);
+}
+
+    static void
+RangeDestructor(RangeObject *self)
+{
+    PyObject_GC_UnTrack((void *)(self));
+    Py_XDECREF(self->buf);
+    PyObject_GC_Del((void *)(self));
+}
+
+    static int
+RangeTraverse(RangeObject *self, visitproc visit, void *arg)
+{
+    Py_VISIT(((PyObject *)(self->buf)));
+    return 0;
+}
+
+    static int
+RangeClear(RangeObject *self)
+{
+    Py_CLEAR(self->buf);
+    return 0;
+}
+
+    static PyInt
+RangeLength(RangeObject *self)
+{
+    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
+    if (CheckBuffer(self->buf))
+	return -1; /* ??? */
+
+    return (self->end - self->start + 1);
+}
+
+    static PyObject *
+RangeItem(RangeObject *self, PyInt n)
+{
+    return RBItem(self->buf, n, self->start, self->end);
+}
+
+    static PyObject *
+RangeSlice(RangeObject *self, PyInt lo, PyInt hi)
+{
+    return RBSlice(self->buf, lo, hi, self->start, self->end);
+}
+
+static char *RangeAttrs[] = {
+    "start", "end",
+    NULL
+};
+
+    static PyObject *
+RangeDir(PyObject *self)
+{
+    return ObjectDir(self, RangeAttrs);
+}
+
+    static PyObject *
+RangeAppend(RangeObject *self, PyObject *args)
+{
+    return RBAppend(self->buf, args, self->start, self->end, &self->end);
+}
+
+    static PyObject *
+RangeRepr(RangeObject *self)
+{
+    if (self->buf->buf == INVALID_BUFFER_VALUE)
+	return PyString_FromFormat("<range object (for deleted buffer) at %p>",
+				    (self));
+    else
+    {
+	char *name = (char *)self->buf->buf->b_fname;
+
+	if (name == NULL)
+	    name = "";
+
+	return PyString_FromFormat("<range %s (%d:%d)>",
+				    name, (int)self->start, (int)self->end);
+    }
+}
+
+static struct PyMethodDef RangeMethods[] = {
+    /* name,	function,			calling,	documentation */
+    {"append",	(PyCFunction)RangeAppend,	METH_VARARGS,	"Append data to the Vim range" },
+    {"__dir__",	(PyCFunction)RangeDir,		METH_NOARGS,	""},
+    { NULL,	NULL,				0,		NULL}
+};
+
+static PyTypeObject BufferType;
+static PySequenceMethods BufferAsSeq;
+static PyMappingMethods BufferAsMapping;
+
+    static PyObject *
+BufferNew(buf_T *buf)
+{
+    /* We need to handle deletion of buffers underneath us.
+     * If we add a "b_python*_ref" field to the buf_T structure,
+     * then we can get at it in buf_freeall() in vim. We then
+     * need to create only ONE Python object per buffer - if
+     * we try to create a second, just INCREF the existing one
+     * and return it. The (single) Python object referring to
+     * the buffer is stored in "b_python*_ref".
+     * Question: what to do on a buf_freeall(). We'll probably
+     * have to either delete the Python object (DECREF it to
+     * zero - a bad idea, as it leaves dangling refs!) or
+     * set the buf_T * value to an invalid value (-1?), which
+     * means we need checks in all access functions... Bah.
+     *
+     * Python2 and Python3 get different fields and different objects:
+     * b_python_ref and b_python3_ref fields respectively.
+     */
+
+    BufferObject *self;
+
+    if (BUF_PYTHON_REF(buf) != NULL)
+    {
+	self = BUF_PYTHON_REF(buf);
+	Py_INCREF(self);
+    }
+    else
+    {
+	self = PyObject_NEW(BufferObject, &BufferType);
+	if (self == NULL)
+	    return NULL;
+	self->buf = buf;
+	BUF_PYTHON_REF(buf) = self;
+    }
+
+    return (PyObject *)(self);
+}
+
+    static void
+BufferDestructor(BufferObject *self)
+{
+    if (self->buf && self->buf != INVALID_BUFFER_VALUE)
+	BUF_PYTHON_REF(self->buf) = NULL;
+
+    DESTRUCTOR_FINISH(self);
+}
+
+    static PyInt
+BufferLength(BufferObject *self)
+{
+    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
+    if (CheckBuffer(self))
+	return -1; /* ??? */
+
+    return (PyInt)(self->buf->b_ml.ml_line_count);
+}
+
+    static PyObject *
+BufferItem(BufferObject *self, PyInt n)
+{
+    return RBItem(self, n, 1, -1);
+}
+
+    static PyObject *
+BufferSlice(BufferObject *self, PyInt lo, PyInt hi)
+{
+    return RBSlice(self, lo, hi, 1, -1);
+}
+
+static char *BufferAttrs[] = {
+    "name", "number", "vars", "options", "valid",
+    NULL
+};
+
+    static PyObject *
+BufferDir(PyObject *self)
+{
+    return ObjectDir(self, BufferAttrs);
+}
+
+    static PyObject *
+BufferAttrValid(BufferObject *self, char *name)
+{
+    PyObject	*ret;
+
+    if (strcmp(name, "valid") != 0)
+	return NULL;
+
+    ret = ((self->buf == INVALID_BUFFER_VALUE) ? Py_False : Py_True);
+    Py_INCREF(ret);
+    return ret;
+}
+
+    static PyObject *
+BufferAttr(BufferObject *self, char *name)
+{
+    if (strcmp(name, "name") == 0)
+	return PyString_FromString((self->buf->b_ffname == NULL
+				    ? "" : (char *)self->buf->b_ffname));
+    else if (strcmp(name, "number") == 0)
+	return Py_BuildValue(Py_ssize_t_fmt, self->buf->b_fnum);
+    else if (strcmp(name, "vars") == 0)
+	return NEW_DICTIONARY(self->buf->b_vars);
+    else if (strcmp(name, "options") == 0)
+	return OptionsNew(SREQ_BUF, self->buf, (checkfun) CheckBuffer,
+			(PyObject *) self);
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, BufferAttrs);
+    else
+	return NULL;
+}
+
+    static int
+BufferSetattr(BufferObject *self, char *name, PyObject *valObject)
+{
+    if (CheckBuffer(self))
+	return -1;
+
+    if (strcmp(name, "name") == 0)
+    {
+	char_u		*val;
+	aco_save_T	aco;
+	int		ren_ret;
+	PyObject	*todecref;
+
+	if (!(val = StringToChars(valObject, &todecref)))
+	    return -1;
+
+	VimTryStart();
+	/* Using aucmd_*: autocommands will be executed by rename_buffer */
+	aucmd_prepbuf(&aco, self->buf);
+	ren_ret = rename_buffer(val);
+	aucmd_restbuf(&aco);
+	Py_XDECREF(todecref);
+	if (VimTryEnd())
+	    return -1;
+
+	if (ren_ret == FAIL)
+	{
+	    PyErr_SET_VIM(N_("failed to rename buffer"));
+	    return -1;
+	}
+	return 0;
+    }
+    else
+    {
+	PyErr_SetString(PyExc_AttributeError, name);
+	return -1;
+    }
+}
+
+    static PyObject *
+BufferAppend(BufferObject *self, PyObject *args)
+{
+    return RBAppend(self, args, 1, -1, NULL);
+}
+
+    static PyObject *
+BufferMark(BufferObject *self, PyObject *pmarkObject)
+{
+    pos_T	*posp;
+    char_u	*pmark;
+    char_u	mark;
+    buf_T	*savebuf;
+    PyObject	*todecref;
+
+    if (CheckBuffer(self))
+	return NULL;
+
+    if (!(pmark = StringToChars(pmarkObject, &todecref)))
+	return NULL;
+
+    if (pmark[0] == '\0' || pmark[1] != '\0')
+    {
+	PyErr_SET_STRING(PyExc_ValueError,
+		N_("mark name must be a single character"));
+	Py_XDECREF(todecref);
+	return NULL;
+    }
+
+    mark = *pmark;
+
+    Py_XDECREF(todecref);
+
+    VimTryStart();
+    switch_buffer(&savebuf, self->buf);
+    posp = getmark(mark, FALSE);
+    restore_buffer(savebuf);
+    if (VimTryEnd())
+	return NULL;
+
+    if (posp == NULL)
+    {
+	PyErr_SET_VIM(N_("invalid mark name"));
+	return NULL;
+    }
+
+    if (posp->lnum <= 0)
+    {
+	/* Or raise an error? */
+	Py_INCREF(Py_None);
+	return Py_None;
+    }
+
+    return Py_BuildValue("(ll)", (long)(posp->lnum), (long)(posp->col));
+}
+
+    static PyObject *
+BufferRange(BufferObject *self, PyObject *args)
+{
+    PyInt start;
+    PyInt end;
+
+    if (CheckBuffer(self))
+	return NULL;
+
+    if (!PyArg_ParseTuple(args, "nn", &start, &end))
+	return NULL;
+
+    return RangeNew(self->buf, start, end);
+}
+
+    static PyObject *
+BufferRepr(BufferObject *self)
+{
+    if (self->buf == INVALID_BUFFER_VALUE)
+	return PyString_FromFormat("<buffer object (deleted) at %p>", self);
+    else
+    {
+	char	*name = (char *)self->buf->b_fname;
+
+	if (name == NULL)
+	    name = "";
+
+	return PyString_FromFormat("<buffer %s>", name);
+    }
+}
+
+static struct PyMethodDef BufferMethods[] = {
+    /* name,	    function,			calling,	documentation */
+    {"append",	    (PyCFunction)BufferAppend,	METH_VARARGS,	"Append data to Vim buffer" },
+    {"mark",	    (PyCFunction)BufferMark,	METH_O,		"Return (row,col) representing position of named mark" },
+    {"range",	    (PyCFunction)BufferRange,	METH_VARARGS,	"Return a range object which represents the part of the given buffer between line numbers s and e" },
+    {"__dir__",	    (PyCFunction)BufferDir,	METH_NOARGS,	""},
+    { NULL,	    NULL,			0,		NULL}
+};
+
+/*
+ * Buffer list object - Implementation
+ */
+
+static PyTypeObject BufMapType;
+
+typedef struct
+{
+    PyObject_HEAD
+} BufMapObject;
+
+    static PyInt
+BufMapLength(PyObject *self UNUSED)
+{
+    buf_T	*b = firstbuf;
+    PyInt	n = 0;
+
+    while (b)
+    {
+	++n;
+	b = b->b_next;
+    }
+
+    return n;
+}
+
+    static PyObject *
+BufMapItem(PyObject *self UNUSED, PyObject *keyObject)
+{
+    buf_T	*b;
+    long	bnr;
+
+    if (NumberToLong(keyObject, &bnr, NUMBER_INT|NUMBER_NATURAL))
+	return NULL;
+
+    b = buflist_findnr((int) bnr);
+
+    if (b)
+	return BufferNew(b);
+    else
+    {
+	PyErr_SetObject(PyExc_KeyError, keyObject);
+	return NULL;
+    }
+}
+
+    static void
+BufMapIterDestruct(PyObject *buffer)
+{
+    /* Iteration was stopped before all buffers were processed */
+    if (buffer)
+    {
+	Py_DECREF(buffer);
+    }
+}
+
+    static int
+BufMapIterTraverse(PyObject *buffer, visitproc visit, void *arg)
+{
+    if (buffer)
+	Py_VISIT(buffer);
+    return 0;
+}
+
+    static int
+BufMapIterClear(PyObject **buffer)
+{
+    if (*buffer)
+	Py_CLEAR(*buffer);
+    return 0;
+}
+
+    static PyObject *
+BufMapIterNext(PyObject **buffer)
+{
+    PyObject	*next;
+    PyObject	*ret;
+
+    if (!*buffer)
+	return NULL;
+
+    ret = *buffer;
+
+    if (CheckBuffer((BufferObject *)(ret)))
+    {
+	*buffer = NULL;
+	return NULL;
+    }
+
+    if (!((BufferObject *)(ret))->buf->b_next)
+	next = NULL;
+    else if (!(next = BufferNew(((BufferObject *)(ret))->buf->b_next)))
+	return NULL;
+    *buffer = next;
+    /* Do not increment reference: we no longer hold it (decref), but whoever
+     * on other side will hold (incref). Decref+incref = nothing. */
+    return ret;
+}
+
+    static PyObject *
+BufMapIter(PyObject *self UNUSED)
+{
+    PyObject *buffer;
+
+    buffer = BufferNew(firstbuf);
+    return IterNew(buffer,
+	    (destructorfun) BufMapIterDestruct, (nextfun) BufMapIterNext,
+	    (traversefun) BufMapIterTraverse, (clearfun) BufMapIterClear);
+}
+
+static PyMappingMethods BufMapAsMapping = {
+    (lenfunc)       BufMapLength,
+    (binaryfunc)    BufMapItem,
+    (objobjargproc) 0,
+};
+
+/* Current items object
+ */
+
+static char *CurrentAttrs[] = {
+    "buffer", "window", "line", "range", "tabpage",
+    NULL
+};
+
+    static PyObject *
+CurrentDir(PyObject *self)
+{
+    return ObjectDir(self, CurrentAttrs);
+}
+
+    static PyObject *
+CurrentGetattr(PyObject *self UNUSED, char *name)
+{
+    if (strcmp(name, "buffer") == 0)
+	return (PyObject *)BufferNew(curbuf);
+    else if (strcmp(name, "window") == 0)
+	return (PyObject *)WindowNew(curwin, curtab);
+    else if (strcmp(name, "tabpage") == 0)
+	return (PyObject *)TabPageNew(curtab);
+    else if (strcmp(name, "line") == 0)
+	return GetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum);
+    else if (strcmp(name, "range") == 0)
+	return RangeNew(curbuf, RangeStart, RangeEnd);
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, CurrentAttrs);
+    else
+#if PY_MAJOR_VERSION < 3
+	return Py_FindMethod(WindowMethods, self, name);
+#else
+	return NULL;
+#endif
+}
+
+    static int
+CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *valObject)
+{
+    if (strcmp(name, "line") == 0)
+    {
+	if (SetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum, valObject,
+			  NULL) == FAIL)
+	    return -1;
+
+	return 0;
+    }
+    else if (strcmp(name, "buffer") == 0)
+    {
+	int count;
+
+	if (valObject->ob_type != &BufferType)
+	{
+	    PyErr_FORMAT(PyExc_TypeError,
+		    N_("expected vim.Buffer object, but got %s"),
+		    Py_TYPE_NAME(valObject));
+	    return -1;
+	}
+
+	if (CheckBuffer((BufferObject *)(valObject)))
+	    return -1;
+	count = ((BufferObject *)(valObject))->buf->b_fnum;
+
+	VimTryStart();
+	if (do_buffer(DOBUF_GOTO, DOBUF_FIRST, FORWARD, count, 0) == FAIL)
+	{
+	    if (VimTryEnd())
+		return -1;
+	    PyErr_VIM_FORMAT(N_("failed to switch to buffer %d"), count);
+	    return -1;
+	}
+
+	return VimTryEnd();
+    }
+    else if (strcmp(name, "window") == 0)
+    {
+	int count;
+
+	if (valObject->ob_type != &WindowType)
+	{
+	    PyErr_FORMAT(PyExc_TypeError,
+		    N_("expected vim.Window object, but got %s"),
+		    Py_TYPE_NAME(valObject));
+	    return -1;
+	}
+
+	if (CheckWindow((WindowObject *)(valObject)))
+	    return -1;
+	count = get_win_number(((WindowObject *)(valObject))->win, firstwin);
+
+	if (!count)
+	{
+	    PyErr_SET_STRING(PyExc_ValueError,
+		    N_("failed to find window in the current tab page"));
+	    return -1;
+	}
+
+	VimTryStart();
+	win_goto(((WindowObject *)(valObject))->win);
+	if (((WindowObject *)(valObject))->win != curwin)
+	{
+	    if (VimTryEnd())
+		return -1;
+	    PyErr_SET_STRING(PyExc_RuntimeError,
+		    N_("did not switch to the specified window"));
+	    return -1;
+	}
+
+	return VimTryEnd();
+    }
+    else if (strcmp(name, "tabpage") == 0)
+    {
+	if (valObject->ob_type != &TabPageType)
+	{
+	    PyErr_FORMAT(PyExc_TypeError,
+		    N_("expected vim.TabPage object, but got %s"),
+		    Py_TYPE_NAME(valObject));
+	    return -1;
+	}
+
+	if (CheckTabPage((TabPageObject *)(valObject)))
+	    return -1;
+
+	VimTryStart();
+	goto_tabpage_tp(((TabPageObject *)(valObject))->tab, TRUE, TRUE);
+	if (((TabPageObject *)(valObject))->tab != curtab)
+	{
+	    if (VimTryEnd())
+		return -1;
+	    PyErr_SET_STRING(PyExc_RuntimeError,
+		    N_("did not switch to the specified tab page"));
+	    return -1;
+	}
+
+	return VimTryEnd();
+    }
+    else
+    {
+	PyErr_SetString(PyExc_AttributeError, name);
+	return -1;
+    }
+}
+
+static struct PyMethodDef CurrentMethods[] = {
+    /* name,	    function,			calling,	documentation */
+    {"__dir__",	    (PyCFunction)CurrentDir,	METH_NOARGS,	""},
+    { NULL,	    NULL,			0,		NULL}
+};
+
+    static void
+init_range_cmd(exarg_T *eap)
+{
+    RangeStart = eap->line1;
+    RangeEnd = eap->line2;
+}
+
+    static void
+init_range_eval(typval_T *rettv UNUSED)
+{
+    RangeStart = (PyInt) curwin->w_cursor.lnum;
+    RangeEnd = RangeStart;
+}
+
+    static void
+run_cmd(const char *cmd, void *arg UNUSED
+#ifdef PY_CAN_RECURSE
+	, PyGILState_STATE *pygilstate UNUSED
+#endif
+	)
+{
+    PyObject	*run_ret;
+    run_ret = PyRun_String((char *)cmd, Py_file_input, globals, globals);
+    if (run_ret != NULL)
+    {
+	Py_DECREF(run_ret);
+    }
+    else if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemExit))
+    {
+	EMSG2(_(e_py_systemexit), "python");
+	PyErr_Clear();
+    }
+    else
+	PyErr_PrintEx(1);
+}
+
+static const char	*code_hdr = "def " DOPY_FUNC "(line, linenr):\n ";
+static int		code_hdr_len = 30;
+
+    static void
+run_do(const char *cmd, void *arg UNUSED
+#ifdef PY_CAN_RECURSE
+	, PyGILState_STATE *pygilstate
+#endif
+	)
+{
+    PyInt	lnum;
+    size_t	len;
+    char	*code;
+    int		status;
+    PyObject	*pyfunc, *pymain;
+    PyObject	*run_ret;
+
+    if (u_save((linenr_T)RangeStart - 1, (linenr_T)RangeEnd + 1) != OK)
+    {
+	EMSG(_("cannot save undo information"));
+	return;
+    }
+
+    len = code_hdr_len + STRLEN(cmd);
+    code = PyMem_New(char, len + 1);
+    memcpy(code, code_hdr, code_hdr_len);
+    STRCPY(code + code_hdr_len, cmd);
+    run_ret = PyRun_String(code, Py_file_input, globals, globals);
+    status = -1;
+    if (run_ret != NULL)
+    {
+	status = 0;
+	Py_DECREF(run_ret);
+    }
+    else if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemExit))
+    {
+	PyMem_Free(code);
+	EMSG2(_(e_py_systemexit), "python");
+	PyErr_Clear();
+	return;
+    }
+    else
+	PyErr_PrintEx(1);
+
+    PyMem_Free(code);
+
+    if (status)
+    {
+	EMSG(_("failed to run the code"));
+	return;
+    }
+
+    status = 0;
+    pymain = PyImport_AddModule("__main__");
+    pyfunc = PyObject_GetAttrString(pymain, DOPY_FUNC);
+#ifdef PY_CAN_RECURSE
+    PyGILState_Release(*pygilstate);
+#endif
+
+    for (lnum = RangeStart; lnum <= RangeEnd; ++lnum)
+    {
+	PyObject	*line;
+	PyObject	*linenr;
+	PyObject	*ret;
+
+#ifdef PY_CAN_RECURSE
+	*pygilstate = PyGILState_Ensure();
+#endif
+	if (!(line = GetBufferLine(curbuf, lnum)))
+	    goto err;
+	if (!(linenr = PyInt_FromLong((long) lnum)))
+	{
+	    Py_DECREF(line);
+	    goto err;
+	}
+	ret = PyObject_CallFunctionObjArgs(pyfunc, line, linenr, NULL);
+	Py_DECREF(line);
+	Py_DECREF(linenr);
+	if (!ret)
+	    goto err;
+
+	if (ret != Py_None)
+	    if (SetBufferLine(curbuf, lnum, ret, NULL) == FAIL)
+		goto err;
+
+	Py_XDECREF(ret);
+	PythonIO_Flush();
+#ifdef PY_CAN_RECURSE
+	PyGILState_Release(*pygilstate);
+#endif
+    }
+    goto out;
+err:
+#ifdef PY_CAN_RECURSE
+    *pygilstate = PyGILState_Ensure();
+#endif
+    PyErr_PrintEx(0);
+    PythonIO_Flush();
+    status = 1;
+out:
+#ifdef PY_CAN_RECURSE
+    if (!status)
+	*pygilstate = PyGILState_Ensure();
+#endif
+    Py_DECREF(pyfunc);
+    PyObject_SetAttrString(pymain, DOPY_FUNC, NULL);
+    if (status)
+	return;
+    check_cursor();
+    update_curbuf(NOT_VALID);
+}
+
+    static void
+run_eval(const char *cmd, typval_T *rettv
+#ifdef PY_CAN_RECURSE
+	, PyGILState_STATE *pygilstate UNUSED
+#endif
+	)
+{
+    PyObject	*run_ret;
+
+    run_ret = PyRun_String((char *)cmd, Py_eval_input, globals, globals);
+    if (run_ret == NULL)
+    {
+	if (PyErr_Occurred() && PyErr_ExceptionMatches(PyExc_SystemExit))
+	{
+	    EMSG2(_(e_py_systemexit), "python");
+	    PyErr_Clear();
+	}
+	else
+	{
+	    if (PyErr_Occurred() && !msg_silent)
+		PyErr_PrintEx(0);
+	    EMSG(_("E858: Eval did not return a valid python object"));
+	}
+    }
+    else
+    {
+	if (ConvertFromPyObject(run_ret, rettv) == -1)
+	    EMSG(_("E859: Failed to convert returned python object to vim value"));
+	Py_DECREF(run_ret);
+    }
+    PyErr_Clear();
+}
+
+    static void
+set_ref_in_py(const int copyID)
+{
+    pylinkedlist_T	*cur;
+    dict_T	*dd;
+    list_T	*ll;
+
+    if (lastdict != NULL)
+	for(cur = lastdict ; cur != NULL ; cur = cur->pll_prev)
+	{
+	    dd = ((DictionaryObject *) (cur->pll_obj))->dict;
+	    if (dd->dv_copyID != copyID)
+	    {
+		dd->dv_copyID = copyID;
+		set_ref_in_ht(&dd->dv_hashtab, copyID);
 	    }
-	    if (i > 0)
-		appended_lines_mark((linenr_T)n, (long)i);
 	}
 
-	/* Free the array of lines. All of its contents have now
-	 * been freed.
-	 */
-	vim_free(array);
+    if (lastlist != NULL)
+	for(cur = lastlist ; cur != NULL ; cur = cur->pll_prev)
+	{
+	    ll = ((ListObject *) (cur->pll_obj))->list;
+	    if (ll->lv_copyID != copyID)
+	    {
+		ll->lv_copyID = copyID;
+		set_ref_in_list(ll, copyID);
+	    }
+	}
+}
 
-	curbuf = savebuf;
-	update_screen(VALID);
+    static int
+set_string_copy(char_u *str, typval_T *tv)
+{
+    tv->vval.v_string = vim_strsave(str);
+    if (tv->vval.v_string == NULL)
+    {
+	PyErr_NoMemory();
+	return -1;
+    }
+    return 0;
+}
 
-	if (PyErr_Occurred() || VimErrorCheck())
-	    return FAIL;
+    static int
+pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+{
+    dict_T	*dict;
+    char_u	*key;
+    dictitem_T	*di;
+    PyObject	*keyObject;
+    PyObject	*valObject;
+    Py_ssize_t	iter = 0;
 
-	if (len_change)
-	    *len_change = size;
+    if (!(dict = py_dict_alloc()))
+	return -1;
 
-	return OK;
+    tv->v_type = VAR_DICT;
+    tv->vval.v_dict = dict;
+
+    while (PyDict_Next(obj, &iter, &keyObject, &valObject))
+    {
+	PyObject	*todecref = NULL;
+
+	if (keyObject == NULL || valObject == NULL)
+	{
+	    dict_unref(dict);
+	    return -1;
+	}
+
+	if (!(key = StringToChars(keyObject, &todecref)))
+	{
+	    dict_unref(dict);
+	    return -1;
+	}
+
+	if (*key == NUL)
+	{
+	    dict_unref(dict);
+	    Py_XDECREF(todecref);
+	    RAISE_NO_EMPTY_KEYS;
+	    return -1;
+	}
+
+	di = dictitem_alloc(key);
+
+	Py_XDECREF(todecref);
+
+	if (di == NULL)
+	{
+	    PyErr_NoMemory();
+	    dict_unref(dict);
+	    return -1;
+	}
+	di->di_tv.v_lock = 0;
+
+	if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
+	{
+	    vim_free(di);
+	    dict_unref(dict);
+	    return -1;
+	}
+
+	if (dict_add(dict, di) == FAIL)
+	{
+	    RAISE_KEY_ADD_FAIL(di->di_key);
+	    clear_tv(&di->di_tv);
+	    vim_free(di);
+	    dict_unref(dict);
+	    return -1;
+	}
+    }
+
+    --dict->dv_refcount;
+    return 0;
+}
+
+    static int
+pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+{
+    dict_T	*dict;
+    char_u	*key;
+    dictitem_T	*di;
+    PyObject	*list;
+    PyObject	*iterator;
+    PyObject	*keyObject;
+    PyObject	*valObject;
+
+    if (!(dict = py_dict_alloc()))
+	return -1;
+
+    tv->v_type = VAR_DICT;
+    tv->vval.v_dict = dict;
+
+    if (!(list = PyMapping_Keys(obj)))
+    {
+	dict_unref(dict);
+	return -1;
+    }
+
+    if (!(iterator = PyObject_GetIter(list)))
+    {
+	dict_unref(dict);
+	Py_DECREF(list);
+	return -1;
+    }
+    Py_DECREF(list);
+
+    while ((keyObject = PyIter_Next(iterator)))
+    {
+	PyObject	*todecref;
+
+	if (!(key = StringToChars(keyObject, &todecref)))
+	{
+	    Py_DECREF(keyObject);
+	    Py_DECREF(iterator);
+	    dict_unref(dict);
+	    return -1;
+	}
+
+	if (*key == NUL)
+	{
+	    Py_DECREF(keyObject);
+	    Py_DECREF(iterator);
+	    Py_XDECREF(todecref);
+	    dict_unref(dict);
+	    RAISE_NO_EMPTY_KEYS;
+	    return -1;
+	}
+
+	if (!(valObject = PyObject_GetItem(obj, keyObject)))
+	{
+	    Py_DECREF(keyObject);
+	    Py_DECREF(iterator);
+	    Py_XDECREF(todecref);
+	    dict_unref(dict);
+	    return -1;
+	}
+
+	di = dictitem_alloc(key);
+
+	Py_DECREF(keyObject);
+	Py_XDECREF(todecref);
+
+	if (di == NULL)
+	{
+	    Py_DECREF(iterator);
+	    Py_DECREF(valObject);
+	    dict_unref(dict);
+	    PyErr_NoMemory();
+	    return -1;
+	}
+	di->di_tv.v_lock = 0;
+
+	if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
+	{
+	    Py_DECREF(iterator);
+	    Py_DECREF(valObject);
+	    vim_free(di);
+	    dict_unref(dict);
+	    return -1;
+	}
+
+	Py_DECREF(valObject);
+
+	if (dict_add(dict, di) == FAIL)
+	{
+	    RAISE_KEY_ADD_FAIL(di->di_key);
+	    Py_DECREF(iterator);
+	    dictitem_free(di);
+	    dict_unref(dict);
+	    return -1;
+	}
+    }
+    Py_DECREF(iterator);
+    --dict->dv_refcount;
+    return 0;
+}
+
+    static int
+pyseq_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+{
+    list_T	*l;
+
+    if (!(l = py_list_alloc()))
+	return -1;
+
+    tv->v_type = VAR_LIST;
+    tv->vval.v_list = l;
+
+    if (list_py_concat(l, obj, lookup_dict) == -1)
+    {
+	list_unref(l);
+	return -1;
+    }
+
+    --l->lv_refcount;
+    return 0;
+}
+
+typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
+
+    static int
+convert_dl(PyObject *obj, typval_T *tv,
+				    pytotvfunc py_to_tv, PyObject *lookup_dict)
+{
+    PyObject	*capsule;
+    char	hexBuf[sizeof(void *) * 2 + 3];
+
+    sprintf(hexBuf, "%p", obj);
+
+# ifdef PY_USE_CAPSULE
+    capsule = PyDict_GetItemString(lookup_dict, hexBuf);
+# else
+    capsule = (PyObject *)PyDict_GetItemString(lookup_dict, hexBuf);
+# endif
+    if (capsule == NULL)
+    {
+# ifdef PY_USE_CAPSULE
+	capsule = PyCapsule_New(tv, NULL, NULL);
+# else
+	capsule = PyCObject_FromVoidPtr(tv, NULL);
+# endif
+	if (PyDict_SetItemString(lookup_dict, hexBuf, capsule))
+	{
+	    Py_DECREF(capsule);
+	    tv->v_type = VAR_UNKNOWN;
+	    return -1;
+	}
+
+	Py_DECREF(capsule);
+
+	if (py_to_tv(obj, tv, lookup_dict) == -1)
+	{
+	    tv->v_type = VAR_UNKNOWN;
+	    return -1;
+	}
+	/* As we are not using copy_tv which increments reference count we must
+	 * do it ourself. */
+	switch(tv->v_type)
+	{
+	    case VAR_DICT: ++tv->vval.v_dict->dv_refcount; break;
+	    case VAR_LIST: ++tv->vval.v_list->lv_refcount; break;
+	}
+    }
+    else
+    {
+	typval_T	*v;
+
+# ifdef PY_USE_CAPSULE
+	v = PyCapsule_GetPointer(capsule, NULL);
+# else
+	v = PyCObject_AsVoidPtr(capsule);
+# endif
+	copy_tv(v, tv);
+    }
+    return 0;
+}
+
+    static int
+ConvertFromPyMapping(PyObject *obj, typval_T *tv)
+{
+    PyObject	*lookup_dict;
+    int		ret;
+
+    if (!(lookup_dict = PyDict_New()))
+	return -1;
+
+    if (PyType_IsSubtype(obj->ob_type, &DictionaryType))
+    {
+	tv->v_type = VAR_DICT;
+	tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
+	++tv->vval.v_dict->dv_refcount;
+	ret = 0;
+    }
+    else if (PyDict_Check(obj))
+	ret = convert_dl(obj, tv, pydict_to_tv, lookup_dict);
+    else if (PyMapping_Check(obj))
+	ret = convert_dl(obj, tv, pymap_to_tv, lookup_dict);
+    else
+    {
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("unable to convert %s to vim dictionary"),
+		Py_TYPE_NAME(obj));
+	ret = -1;
+    }
+    Py_DECREF(lookup_dict);
+    return ret;
+}
+
+    static int
+ConvertFromPyObject(PyObject *obj, typval_T *tv)
+{
+    PyObject	*lookup_dict;
+    int		ret;
+
+    if (!(lookup_dict = PyDict_New()))
+	return -1;
+    ret = _ConvertFromPyObject(obj, tv, lookup_dict);
+    Py_DECREF(lookup_dict);
+    return ret;
+}
+
+    static int
+_ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+{
+    if (PyType_IsSubtype(obj->ob_type, &DictionaryType))
+    {
+	tv->v_type = VAR_DICT;
+	tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
+	++tv->vval.v_dict->dv_refcount;
+    }
+    else if (PyType_IsSubtype(obj->ob_type, &ListType))
+    {
+	tv->v_type = VAR_LIST;
+	tv->vval.v_list = (((ListObject *)(obj))->list);
+	++tv->vval.v_list->lv_refcount;
+    }
+    else if (PyType_IsSubtype(obj->ob_type, &FunctionType))
+    {
+	if (set_string_copy(((FunctionObject *) (obj))->name, tv) == -1)
+	    return -1;
+
+	tv->v_type = VAR_FUNC;
+	func_ref(tv->vval.v_string);
+    }
+    else if (PyBytes_Check(obj))
+    {
+	char_u	*str;
+
+	if (PyBytes_AsStringAndSize(obj, (char **) &str, NULL) == -1)
+	    return -1;
+	if (str == NULL)
+	    return -1;
+
+	if (set_string_copy(str, tv) == -1)
+	    return -1;
+
+	tv->v_type = VAR_STRING;
+    }
+    else if (PyUnicode_Check(obj))
+    {
+	PyObject	*bytes;
+	char_u	*str;
+
+	bytes = PyUnicode_AsEncodedString(obj, ENC_OPT, NULL);
+	if (bytes == NULL)
+	    return -1;
+
+	if(PyBytes_AsStringAndSize(bytes, (char **) &str, NULL) == -1)
+	    return -1;
+	if (str == NULL)
+	    return -1;
+
+	if (set_string_copy(str, tv))
+	{
+	    Py_XDECREF(bytes);
+	    return -1;
+	}
+	Py_XDECREF(bytes);
+
+	tv->v_type = VAR_STRING;
+    }
+#if PY_MAJOR_VERSION < 3
+    else if (PyInt_Check(obj))
+    {
+	tv->v_type = VAR_NUMBER;
+	tv->vval.v_number = (varnumber_T) PyInt_AsLong(obj);
+	if (PyErr_Occurred())
+	    return -1;
+    }
+#endif
+    else if (PyLong_Check(obj))
+    {
+	tv->v_type = VAR_NUMBER;
+	tv->vval.v_number = (varnumber_T) PyLong_AsLong(obj);
+	if (PyErr_Occurred())
+	    return -1;
     }
-    else
+    else if (PyDict_Check(obj))
+	return convert_dl(obj, tv, pydict_to_tv, lookup_dict);
+#ifdef FEAT_FLOAT
+    else if (PyFloat_Check(obj))
     {
-	PyErr_BadArgument();
-	return FAIL;
+	tv->v_type = VAR_FLOAT;
+	tv->vval.v_float = (float_T) PyFloat_AsDouble(obj);
     }
-}
+#endif
+    else if (PyObject_HasAttrString(obj, "keys"))
+	return convert_dl(obj, tv, pymap_to_tv, lookup_dict);
+    /* PyObject_GetIter can create built-in iterator for any sequence object */
+    else if (PyIter_Check(obj) || PySequence_Check(obj))
+	return convert_dl(obj, tv, pyseq_to_tv, lookup_dict);
+    else if (PyMapping_Check(obj))
+	return convert_dl(obj, tv, pymap_to_tv, lookup_dict);
+    else if (PyNumber_Check(obj))
+    {
+	PyObject	*num;
 
-/*
- * Common routines for buffers and line ranges
- * -------------------------------------------
- */
+	if (!(num = PyNumber_Long(obj)))
+	    return -1;
 
-    static int
-CheckBuffer(BufferObject *this)
-{
-    if (this->buf == INVALID_BUFFER_VALUE)
+	tv->v_type = VAR_NUMBER;
+	tv->vval.v_number = (varnumber_T) PyLong_AsLong(num);
+
+	Py_DECREF(num);
+    }
+    else
     {
-	PyErr_SetVim(_("attempt to refer to deleted buffer"));
+	PyErr_FORMAT(PyExc_TypeError,
+		N_("unable to convert %s to vim structure"),
+		Py_TYPE_NAME(obj));
 	return -1;
     }
-
     return 0;
 }
 
     static PyObject *
-RBItem(BufferObject *self, PyInt n, PyInt start, PyInt end)
+ConvertToPyObject(typval_T *tv)
 {
-    if (CheckBuffer(self))
-	return NULL;
-
-    if (n < 0 || n > end - start)
+    if (tv == NULL)
     {
-	PyErr_SetString(PyExc_IndexError, _("line number out of range"));
+	PyErr_SET_VIM(N_("internal error: NULL reference passed"));
 	return NULL;
     }
-
-    return GetBufferLine(self->buf, n+start);
+    switch (tv->v_type)
+    {
+	case VAR_STRING:
+	    return PyBytes_FromString(tv->vval.v_string == NULL
+					    ? "" : (char *)tv->vval.v_string);
+	case VAR_NUMBER:
+	    return PyLong_FromLong((long) tv->vval.v_number);
+#ifdef FEAT_FLOAT
+	case VAR_FLOAT:
+	    return PyFloat_FromDouble((double) tv->vval.v_float);
+#endif
+	case VAR_LIST:
+	    return NEW_LIST(tv->vval.v_list);
+	case VAR_DICT:
+	    return NEW_DICTIONARY(tv->vval.v_dict);
+	case VAR_FUNC:
+	    return NEW_FUNCTION(tv->vval.v_string == NULL
+					  ? (char_u *)"" : tv->vval.v_string);
+	case VAR_UNKNOWN:
+	    Py_INCREF(Py_None);
+	    return Py_None;
+	default:
+	    PyErr_SET_VIM(N_("internal error: invalid value type"));
+	    return NULL;
+    }
 }
 
-    static PyObject *
-RBSlice(BufferObject *self, PyInt lo, PyInt hi, PyInt start, PyInt end)
+typedef struct
 {
-    PyInt size;
+    PyObject_HEAD
+} CurrentObject;
+static PyTypeObject CurrentType;
 
-    if (CheckBuffer(self))
-	return NULL;
+    static void
+init_structs(void)
+{
+    vim_memset(&OutputType, 0, sizeof(OutputType));
+    OutputType.tp_name = "vim.message";
+    OutputType.tp_basicsize = sizeof(OutputObject);
+    OutputType.tp_flags = Py_TPFLAGS_DEFAULT;
+    OutputType.tp_doc = "vim message object";
+    OutputType.tp_methods = OutputMethods;
+#if PY_MAJOR_VERSION >= 3
+    OutputType.tp_getattro = (getattrofunc)OutputGetattro;
+    OutputType.tp_setattro = (setattrofunc)OutputSetattro;
+    OutputType.tp_alloc = call_PyType_GenericAlloc;
+    OutputType.tp_new = call_PyType_GenericNew;
+    OutputType.tp_free = call_PyObject_Free;
+#else
+    OutputType.tp_getattr = (getattrfunc)OutputGetattr;
+    OutputType.tp_setattr = (setattrfunc)OutputSetattr;
+#endif
 
-    size = end - start + 1;
+    vim_memset(&IterType, 0, sizeof(IterType));
+    IterType.tp_name = "vim.iter";
+    IterType.tp_basicsize = sizeof(IterObject);
+    IterType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
+    IterType.tp_doc = "generic iterator object";
+    IterType.tp_iter = (getiterfunc)IterIter;
+    IterType.tp_iternext = (iternextfunc)IterNext;
+    IterType.tp_dealloc = (destructor)IterDestructor;
+    IterType.tp_traverse = (traverseproc)IterTraverse;
+    IterType.tp_clear = (inquiry)IterClear;
+
+    vim_memset(&BufferType, 0, sizeof(BufferType));
+    BufferType.tp_name = "vim.buffer";
+    BufferType.tp_basicsize = sizeof(BufferType);
+    BufferType.tp_dealloc = (destructor)BufferDestructor;
+    BufferType.tp_repr = (reprfunc)BufferRepr;
+    BufferType.tp_as_sequence = &BufferAsSeq;
+    BufferType.tp_as_mapping = &BufferAsMapping;
+    BufferType.tp_flags = Py_TPFLAGS_DEFAULT;
+    BufferType.tp_doc = "vim buffer object";
+    BufferType.tp_methods = BufferMethods;
+#if PY_MAJOR_VERSION >= 3
+    BufferType.tp_getattro = (getattrofunc)BufferGetattro;
+    BufferType.tp_setattro = (setattrofunc)BufferSetattro;
+    BufferType.tp_alloc = call_PyType_GenericAlloc;
+    BufferType.tp_new = call_PyType_GenericNew;
+    BufferType.tp_free = call_PyObject_Free;
+#else
+    BufferType.tp_getattr = (getattrfunc)BufferGetattr;
+    BufferType.tp_setattr = (setattrfunc)BufferSetattr;
+#endif
 
-    if (lo < 0)
-	lo = 0;
-    else if (lo > size)
-	lo = size;
-    if (hi < 0)
-	hi = 0;
-    if (hi < lo)
-	hi = lo;
-    else if (hi > size)
-	hi = size;
+    vim_memset(&WindowType, 0, sizeof(WindowType));
+    WindowType.tp_name = "vim.window";
+    WindowType.tp_basicsize = sizeof(WindowObject);
+    WindowType.tp_dealloc = (destructor)WindowDestructor;
+    WindowType.tp_repr = (reprfunc)WindowRepr;
+    WindowType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
+    WindowType.tp_doc = "vim Window object";
+    WindowType.tp_methods = WindowMethods;
+    WindowType.tp_traverse = (traverseproc)WindowTraverse;
+    WindowType.tp_clear = (inquiry)WindowClear;
+#if PY_MAJOR_VERSION >= 3
+    WindowType.tp_getattro = (getattrofunc)WindowGetattro;
+    WindowType.tp_setattro = (setattrofunc)WindowSetattro;
+    WindowType.tp_alloc = call_PyType_GenericAlloc;
+    WindowType.tp_new = call_PyType_GenericNew;
+    WindowType.tp_free = call_PyObject_Free;
+#else
+    WindowType.tp_getattr = (getattrfunc)WindowGetattr;
+    WindowType.tp_setattr = (setattrfunc)WindowSetattr;
+#endif
 
-    return GetBufferLineList(self->buf, lo+start, hi+start);
-}
+    vim_memset(&TabPageType, 0, sizeof(TabPageType));
+    TabPageType.tp_name = "vim.tabpage";
+    TabPageType.tp_basicsize = sizeof(TabPageObject);
+    TabPageType.tp_dealloc = (destructor)TabPageDestructor;
+    TabPageType.tp_repr = (reprfunc)TabPageRepr;
+    TabPageType.tp_flags = Py_TPFLAGS_DEFAULT;
+    TabPageType.tp_doc = "vim tab page object";
+    TabPageType.tp_methods = TabPageMethods;
+#if PY_MAJOR_VERSION >= 3
+    TabPageType.tp_getattro = (getattrofunc)TabPageGetattro;
+    TabPageType.tp_alloc = call_PyType_GenericAlloc;
+    TabPageType.tp_new = call_PyType_GenericNew;
+    TabPageType.tp_free = call_PyObject_Free;
+#else
+    TabPageType.tp_getattr = (getattrfunc)TabPageGetattr;
+#endif
 
-    static PyInt
-RBAsItem(BufferObject *self, PyInt n, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
-{
-    PyInt len_change;
+    vim_memset(&BufMapType, 0, sizeof(BufMapType));
+    BufMapType.tp_name = "vim.bufferlist";
+    BufMapType.tp_basicsize = sizeof(BufMapObject);
+    BufMapType.tp_as_mapping = &BufMapAsMapping;
+    BufMapType.tp_flags = Py_TPFLAGS_DEFAULT;
+    BufMapType.tp_iter = BufMapIter;
+    BufferType.tp_doc = "vim buffer list";
+
+    vim_memset(&WinListType, 0, sizeof(WinListType));
+    WinListType.tp_name = "vim.windowlist";
+    WinListType.tp_basicsize = sizeof(WinListType);
+    WinListType.tp_as_sequence = &WinListAsSeq;
+    WinListType.tp_flags = Py_TPFLAGS_DEFAULT;
+    WinListType.tp_doc = "vim window list";
+    WinListType.tp_dealloc = (destructor)WinListDestructor;
+
+    vim_memset(&TabListType, 0, sizeof(TabListType));
+    TabListType.tp_name = "vim.tabpagelist";
+    TabListType.tp_basicsize = sizeof(TabListType);
+    TabListType.tp_as_sequence = &TabListAsSeq;
+    TabListType.tp_flags = Py_TPFLAGS_DEFAULT;
+    TabListType.tp_doc = "vim tab page list";
+
+    vim_memset(&RangeType, 0, sizeof(RangeType));
+    RangeType.tp_name = "vim.range";
+    RangeType.tp_basicsize = sizeof(RangeObject);
+    RangeType.tp_dealloc = (destructor)RangeDestructor;
+    RangeType.tp_repr = (reprfunc)RangeRepr;
+    RangeType.tp_as_sequence = &RangeAsSeq;
+    RangeType.tp_as_mapping = &RangeAsMapping;
+    RangeType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
+    RangeType.tp_doc = "vim Range object";
+    RangeType.tp_methods = RangeMethods;
+    RangeType.tp_traverse = (traverseproc)RangeTraverse;
+    RangeType.tp_clear = (inquiry)RangeClear;
+#if PY_MAJOR_VERSION >= 3
+    RangeType.tp_getattro = (getattrofunc)RangeGetattro;
+    RangeType.tp_alloc = call_PyType_GenericAlloc;
+    RangeType.tp_new = call_PyType_GenericNew;
+    RangeType.tp_free = call_PyObject_Free;
+#else
+    RangeType.tp_getattr = (getattrfunc)RangeGetattr;
+#endif
 
-    if (CheckBuffer(self))
-	return -1;
+    vim_memset(&CurrentType, 0, sizeof(CurrentType));
+    CurrentType.tp_name = "vim.currentdata";
+    CurrentType.tp_basicsize = sizeof(CurrentObject);
+    CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
+    CurrentType.tp_doc = "vim current object";
+    CurrentType.tp_methods = CurrentMethods;
+#if PY_MAJOR_VERSION >= 3
+    CurrentType.tp_getattro = (getattrofunc)CurrentGetattro;
+    CurrentType.tp_setattro = (setattrofunc)CurrentSetattro;
+#else
+    CurrentType.tp_getattr = (getattrfunc)CurrentGetattr;
+    CurrentType.tp_setattr = (setattrfunc)CurrentSetattr;
+#endif
 
-    if (n < 0 || n > end - start)
-    {
-	PyErr_SetString(PyExc_IndexError, _("line number out of range"));
-	return -1;
-    }
+    vim_memset(&DictionaryType, 0, sizeof(DictionaryType));
+    DictionaryType.tp_name = "vim.dictionary";
+    DictionaryType.tp_basicsize = sizeof(DictionaryObject);
+    DictionaryType.tp_dealloc = (destructor)DictionaryDestructor;
+    DictionaryType.tp_as_sequence = &DictionaryAsSeq;
+    DictionaryType.tp_as_mapping = &DictionaryAsMapping;
+    DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
+    DictionaryType.tp_doc = "dictionary pushing modifications to vim structure";
+    DictionaryType.tp_methods = DictionaryMethods;
+    DictionaryType.tp_iter = (getiterfunc)DictionaryIter;
+    DictionaryType.tp_new = (newfunc)DictionaryConstructor;
+    DictionaryType.tp_alloc = (allocfunc)PyType_GenericAlloc;
+#if PY_MAJOR_VERSION >= 3
+    DictionaryType.tp_getattro = (getattrofunc)DictionaryGetattro;
+    DictionaryType.tp_setattro = (setattrofunc)DictionarySetattro;
+#else
+    DictionaryType.tp_getattr = (getattrfunc)DictionaryGetattr;
+    DictionaryType.tp_setattr = (setattrfunc)DictionarySetattr;
+#endif
 
-    if (SetBufferLine(self->buf, n+start, val, &len_change) == FAIL)
-	return -1;
+    vim_memset(&ListType, 0, sizeof(ListType));
+    ListType.tp_name = "vim.list";
+    ListType.tp_dealloc = (destructor)ListDestructor;
+    ListType.tp_basicsize = sizeof(ListObject);
+    ListType.tp_as_sequence = &ListAsSeq;
+    ListType.tp_as_mapping = &ListAsMapping;
+    ListType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
+    ListType.tp_doc = "list pushing modifications to vim structure";
+    ListType.tp_methods = ListMethods;
+    ListType.tp_iter = (getiterfunc)ListIter;
+    ListType.tp_new = (newfunc)ListConstructor;
+    ListType.tp_alloc = (allocfunc)PyType_GenericAlloc;
+#if PY_MAJOR_VERSION >= 3
+    ListType.tp_getattro = (getattrofunc)ListGetattro;
+    ListType.tp_setattro = (setattrofunc)ListSetattro;
+#else
+    ListType.tp_getattr = (getattrfunc)ListGetattr;
+    ListType.tp_setattr = (setattrfunc)ListSetattr;
+#endif
 
-    if (new_end)
-	*new_end = end + len_change;
+    vim_memset(&FunctionType, 0, sizeof(FunctionType));
+    FunctionType.tp_name = "vim.function";
+    FunctionType.tp_basicsize = sizeof(FunctionObject);
+    FunctionType.tp_dealloc = (destructor)FunctionDestructor;
+    FunctionType.tp_call = (ternaryfunc)FunctionCall;
+    FunctionType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
+    FunctionType.tp_doc = "object that calls vim function";
+    FunctionType.tp_methods = FunctionMethods;
+    FunctionType.tp_repr = (reprfunc)FunctionRepr;
+    FunctionType.tp_new = (newfunc)FunctionConstructor;
+    FunctionType.tp_alloc = (allocfunc)PyType_GenericAlloc;
+#if PY_MAJOR_VERSION >= 3
+    FunctionType.tp_getattro = (getattrofunc)FunctionGetattro;
+#else
+    FunctionType.tp_getattr = (getattrfunc)FunctionGetattr;
+#endif
 
-    return 0;
+    vim_memset(&OptionsType, 0, sizeof(OptionsType));
+    OptionsType.tp_name = "vim.options";
+    OptionsType.tp_basicsize = sizeof(OptionsObject);
+    OptionsType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
+    OptionsType.tp_doc = "object for manipulating options";
+    OptionsType.tp_as_mapping = &OptionsAsMapping;
+    OptionsType.tp_dealloc = (destructor)OptionsDestructor;
+    OptionsType.tp_traverse = (traverseproc)OptionsTraverse;
+    OptionsType.tp_clear = (inquiry)OptionsClear;
+
+    vim_memset(&LoaderType, 0, sizeof(LoaderType));
+    LoaderType.tp_name = "vim.Loader";
+    LoaderType.tp_basicsize = sizeof(LoaderObject);
+    LoaderType.tp_flags = Py_TPFLAGS_DEFAULT;
+    LoaderType.tp_doc = "vim message object";
+    LoaderType.tp_methods = LoaderMethods;
+    LoaderType.tp_dealloc = (destructor)LoaderDestructor;
+
+#if PY_MAJOR_VERSION >= 3
+    vim_memset(&vimmodule, 0, sizeof(vimmodule));
+    vimmodule.m_name = "vim";
+    vimmodule.m_doc = "Vim Python interface\n";
+    vimmodule.m_size = -1;
+    vimmodule.m_methods = VimMethods;
+#endif
 }
 
+#define PYTYPE_READY(type) \
+    if (PyType_Ready(&type)) \
+	return -1;
 
-    static PyObject *
-RBAppend(BufferObject *self, PyObject *args, PyInt start, PyInt end, PyInt *new_end)
+    static int
+init_types()
 {
-    PyObject *lines;
-    PyInt len_change;
-    PyInt max;
-    PyInt n;
-
-    if (CheckBuffer(self))
-	return NULL;
-
-    max = n = end - start + 1;
-
-    if (!PyArg_ParseTuple(args, "O|n", &lines, &n))
-	return NULL;
-
-    if (n < 0 || n > max)
-    {
-	PyErr_SetString(PyExc_ValueError, _("line number out of range"));
-	return NULL;
-    }
-
-    if (InsertBufferLines(self->buf, n + start - 1, lines, &len_change) == FAIL)
-	return NULL;
-
-    if (new_end)
-	*new_end = end + len_change;
-
-    Py_INCREF(Py_None);
-    return Py_None;
+    PYTYPE_READY(IterType);
+    PYTYPE_READY(BufferType);
+    PYTYPE_READY(RangeType);
+    PYTYPE_READY(WindowType);
+    PYTYPE_READY(TabPageType);
+    PYTYPE_READY(BufMapType);
+    PYTYPE_READY(WinListType);
+    PYTYPE_READY(TabListType);
+    PYTYPE_READY(CurrentType);
+    PYTYPE_READY(DictionaryType);
+    PYTYPE_READY(ListType);
+    PYTYPE_READY(FunctionType);
+    PYTYPE_READY(OptionsType);
+    PYTYPE_READY(OutputType);
+    PYTYPE_READY(LoaderType);
+    return 0;
 }
 
-
-/* Buffer object - Definitions
- */
-
-typedef struct
+    static int
+init_sys_path(void)
 {
-    PyObject_HEAD
-    BufferObject *buf;
-    PyInt start;
-    PyInt end;
-} RangeObject;
+    PyObject	*path;
+    PyObject	*path_hook;
+    PyObject	*path_hooks;
 
-    static PyObject *
-RangeNew(buf_T *buf, PyInt start, PyInt end)
-{
-    BufferObject *bufr;
-    RangeObject *self;
-    self = PyObject_NEW(RangeObject, &RangeType);
-    if (self == NULL)
-	return NULL;
+    if (!(path_hook = PyObject_GetAttrString(vim_module, "path_hook")))
+	return -1;
 
-    bufr = (BufferObject *)BufferNew(buf);
-    if (bufr == NULL)
+    if (!(path_hooks = PySys_GetObject("path_hooks")))
     {
-	Py_DECREF(self);
-	return NULL;
+	PyErr_Clear();
+	path_hooks = PyList_New(1);
+	PyList_SET_ITEM(path_hooks, 0, path_hook);
+	if (PySys_SetObject("path_hooks", path_hooks))
+	{
+	    Py_DECREF(path_hooks);
+	    return -1;
+	}
+	Py_DECREF(path_hooks);
+    }
+    else if (PyList_Check(path_hooks))
+    {
+	if (PyList_Append(path_hooks, path_hook))
+	{
+	    Py_DECREF(path_hook);
+	    return -1;
+	}
+	Py_DECREF(path_hook);
+    }
+    else
+    {
+	VimTryStart();
+	EMSG(_("Failed to set path hook: sys.path_hooks is not a list\n"
+	       "You should now do the following:\n"
+	       "- append vim.path_hook to sys.path_hooks\n"
+	       "- append vim.VIM_SPECIAL_PATH to sys.path\n"));
+	VimTryEnd(); /* Discard the error */
+	Py_DECREF(path_hook);
+	return 0;
     }
-    Py_INCREF(bufr);
 
-    self->buf = bufr;
-    self->start = start;
-    self->end = end;
+    if (!(path = PySys_GetObject("path")))
+    {
+	PyErr_Clear();
+	path = PyList_New(1);
+	Py_INCREF(vim_special_path_object);
+	PyList_SET_ITEM(path, 0, vim_special_path_object);
+	if (PySys_SetObject("path", path))
+	{
+	    Py_DECREF(path);
+	    return -1;
+	}
+	Py_DECREF(path);
+    }
+    else if (PyList_Check(path))
+    {
+	if (PyList_Append(path, vim_special_path_object))
+	    return -1;
+    }
+    else
+    {
+	VimTryStart();
+	EMSG(_("Failed to set path: sys.path is not a list\n"
+	       "You should now append vim.VIM_SPECIAL_PATH to sys.path"));
+	VimTryEnd(); /* Discard the error */
+    }
 
-    return (PyObject *)(self);
+    return 0;
 }
 
-    static PyObject *
-BufferAppend(PyObject *self, PyObject *args)
+static BufMapObject TheBufferMap =
 {
-    return RBAppend((BufferObject *)(self), args, 1,
-		    (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-		    NULL);
-}
+    PyObject_HEAD_INIT(&BufMapType)
+};
 
-    static PyObject *
-BufferMark(PyObject *self, PyObject *args)
+static WinListObject TheWindowList =
 {
-    pos_T	*posp;
-    char	*pmark;
-    char	mark;
-    buf_T	*curbuf_save;
+    PyObject_HEAD_INIT(&WinListType)
+    NULL
+};
 
-    if (CheckBuffer((BufferObject *)(self)))
-	return NULL;
+static CurrentObject TheCurrent =
+{
+    PyObject_HEAD_INIT(&CurrentType)
+};
 
-    if (!PyArg_ParseTuple(args, "s", &pmark))
-	return NULL;
-    mark = *pmark;
+static TabListObject TheTabPageList =
+{
+    PyObject_HEAD_INIT(&TabListType)
+};
 
-    curbuf_save = curbuf;
-    curbuf = ((BufferObject *)(self))->buf;
-    posp = getmark(mark, FALSE);
-    curbuf = curbuf_save;
+static struct numeric_constant {
+    char	*name;
+    int		val;
+} numeric_constants[] = {
+    {"VAR_LOCKED",	VAR_LOCKED},
+    {"VAR_FIXED",	VAR_FIXED},
+    {"VAR_SCOPE",	VAR_SCOPE},
+    {"VAR_DEF_SCOPE",	VAR_DEF_SCOPE},
+};
 
-    if (posp == NULL)
-    {
-	PyErr_SetVim(_("invalid mark name"));
-	return NULL;
-    }
+static struct object_constant {
+    char	*name;
+    PyObject	*valObject;
+} object_constants[] = {
+    {"buffers",  (PyObject *)(void *)&TheBufferMap},
+    {"windows",  (PyObject *)(void *)&TheWindowList},
+    {"tabpages", (PyObject *)(void *)&TheTabPageList},
+    {"current",  (PyObject *)(void *)&TheCurrent},
+
+    {"Buffer",     (PyObject *)&BufferType},
+    {"Range",      (PyObject *)&RangeType},
+    {"Window",     (PyObject *)&WindowType},
+    {"TabPage",    (PyObject *)&TabPageType},
+    {"Dictionary", (PyObject *)&DictionaryType},
+    {"List",       (PyObject *)&ListType},
+    {"Function",   (PyObject *)&FunctionType},
+    {"Options",    (PyObject *)&OptionsType},
+    {"_Loader",    (PyObject *)&LoaderType},
+};
 
-    /* Ckeck for keyboard interrupt */
-    if (VimErrorCheck())
-	return NULL;
+#define ADD_OBJECT(m, name, obj) \
+    if (PyModule_AddObject(m, name, obj)) \
+	return -1;
 
-    if (posp->lnum <= 0)
-    {
-	/* Or raise an error? */
-	Py_INCREF(Py_None);
-	return Py_None;
+#define ADD_CHECKED_OBJECT(m, name, obj) \
+    { \
+	PyObject	*valObject = obj; \
+	if (!valObject) \
+	    return -1; \
+	ADD_OBJECT(m, name, valObject); \
     }
 
-    return Py_BuildValue("(ll)", (long)(posp->lnum), (long)(posp->col));
-}
-
-    static PyObject *
-BufferRange(PyObject *self, PyObject *args)
+    static int
+populate_module(PyObject *m)
 {
-    PyInt start;
-    PyInt end;
+    int		i;
+    PyObject	*other_module;
+    PyObject	*attr;
+    PyObject	*imp;
 
-    if (CheckBuffer((BufferObject *)(self)))
-	return NULL;
-
-    if (!PyArg_ParseTuple(args, "nn", &start, &end))
-	return NULL;
+    for (i = 0; i < (int)(sizeof(numeric_constants)
+					   / sizeof(struct numeric_constant));
+	    ++i)
+	ADD_CHECKED_OBJECT(m, numeric_constants[i].name,
+		PyInt_FromLong(numeric_constants[i].val));
 
-    return RangeNew(((BufferObject *)(self))->buf, start, end);
-}
+    for (i = 0; i < (int)(sizeof(object_constants)
+					    / sizeof(struct object_constant));
+	    ++i)
+    {
+	PyObject	*valObject;
 
-static struct PyMethodDef BufferMethods[] = {
-    /* name,	    function,		calling,    documentation */
-    {"append",	    BufferAppend,	1,	    "Append data to Vim buffer" },
-    {"mark",	    BufferMark,		1,	    "Return (row,col) representing position of named mark" },
-    {"range",	    BufferRange,	1,	    "Return a range object which represents the part of the given buffer between line numbers s and e" },
-    { NULL,	    NULL,		0,	    NULL }
-};
+	valObject = object_constants[i].valObject;
+	Py_INCREF(valObject);
+	ADD_OBJECT(m, object_constants[i].name, valObject);
+    }
 
-    static PyObject *
-RangeAppend(PyObject *self, PyObject *args)
-{
-    return RBAppend(((RangeObject *)(self))->buf, args,
-		    ((RangeObject *)(self))->start,
-		    ((RangeObject *)(self))->end,
-		    &((RangeObject *)(self))->end);
-}
+    if (!(VimError = PyErr_NewException("vim.error", NULL, NULL)))
+	return -1;
+    ADD_OBJECT(m, "error", VimError);
 
-    static PyInt
-RangeLength(PyObject *self)
-{
-    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
-    if (CheckBuffer(((RangeObject *)(self))->buf))
-	return -1; /* ??? */
+    ADD_CHECKED_OBJECT(m, "vars",  NEW_DICTIONARY(&globvardict));
+    ADD_CHECKED_OBJECT(m, "vvars", NEW_DICTIONARY(&vimvardict));
+    ADD_CHECKED_OBJECT(m, "options",
+	    OptionsNew(SREQ_GLOBAL, NULL, dummy_check, NULL));
 
-    return (((RangeObject *)(self))->end - ((RangeObject *)(self))->start + 1);
-}
+    if (!(other_module = PyImport_ImportModule("os")))
+	return -1;
+    ADD_OBJECT(m, "os", other_module);
 
-    static PyObject *
-RangeItem(PyObject *self, PyInt n)
-{
-    return RBItem(((RangeObject *)(self))->buf, n,
-		  ((RangeObject *)(self))->start,
-		  ((RangeObject *)(self))->end);
-}
+    if (!(py_getcwd = PyObject_GetAttrString(other_module, "getcwd")))
+	return -1;
+    ADD_OBJECT(m, "_getcwd", py_getcwd)
 
-    static PyObject *
-RangeRepr(PyObject *self)
-{
-    static char repr[100];
-    RangeObject *this = (RangeObject *)(self);
+    if (!(py_chdir = PyObject_GetAttrString(other_module, "chdir")))
+	return -1;
+    ADD_OBJECT(m, "_chdir", py_chdir);
+    if (!(attr = PyObject_GetAttrString(m, "chdir")))
+	return -1;
+    if (PyObject_SetAttrString(other_module, "chdir", attr))
+    {
+	Py_DECREF(attr);
+	return -1;
+    }
+    Py_DECREF(attr);
 
-    if (this->buf->buf == INVALID_BUFFER_VALUE)
+    if ((py_fchdir = PyObject_GetAttrString(other_module, "fchdir")))
     {
-	vim_snprintf(repr, 100, "<range object (for deleted buffer) at %p>",
-								      (self));
-	return PyString_FromString(repr);
+	ADD_OBJECT(m, "_fchdir", py_fchdir);
+	if (!(attr = PyObject_GetAttrString(m, "fchdir")))
+	    return -1;
+	if (PyObject_SetAttrString(other_module, "fchdir", attr))
+	{
+	    Py_DECREF(attr);
+	    return -1;
+	}
+	Py_DECREF(attr);
     }
     else
-    {
-	char *name = (char *)this->buf->buf->b_fname;
-	int len;
+	PyErr_Clear();
 
-	if (name == NULL)
-	    name = "";
-	len = (int)strlen(name);
+    if (!(vim_special_path_object = PyString_FromString(vim_special_path)))
+	return -1;
 
-	if (len > 45)
-	    name = name + (45 - len);
+    ADD_OBJECT(m, "VIM_SPECIAL_PATH", vim_special_path_object);
 
-	vim_snprintf(repr, 100, "<range %s%s (%d:%d)>",
-		len > 45 ? "..." : "", name,
-		this->start, this->end);
+    if (!(imp = PyImport_ImportModule("imp")))
+	return -1;
 
-	return PyString_FromString(repr);
+    if (!(py_find_module = PyObject_GetAttrString(imp, "find_module")))
+    {
+	Py_DECREF(imp);
+	return -1;
     }
-}
 
-    static PyObject *
-RangeSlice(PyObject *self, PyInt lo, PyInt hi)
-{
-    return RBSlice(((RangeObject *)(self))->buf, lo, hi,
-		   ((RangeObject *)(self))->start,
-		   ((RangeObject *)(self))->end);
-}
+    if (!(py_load_module = PyObject_GetAttrString(imp, "load_module")))
+    {
+	Py_DECREF(py_find_module);
+	Py_DECREF(imp);
+	return -1;
+    }
 
-/*
- * Line range object - Definitions
- */
+    Py_DECREF(imp);
 
-static struct PyMethodDef RangeMethods[] = {
-    /* name,	    function,		calling,    documentation */
-    {"append",	    RangeAppend,	1,	    "Append data to the Vim range" },
-    { NULL,	    NULL,		0,	    NULL }
-};
+    ADD_OBJECT(m, "_find_module", py_find_module);
+    ADD_OBJECT(m, "_load_module", py_load_module);
 
+    return 0;
+}
diff -Naur vim73.orig/src/if_python.c vim73/src/if_python.c
--- vim73.orig/src/if_python.c	2010-08-13 13:59:41.000000000 +0000
+++ vim73/src/if_python.c	2013-08-04 19:09:10.380611217 +0000
@@ -1,4 +1,4 @@
-/* vi:set ts=8 sts=4 sw=4:
+/* vi:set ts=8 sts=4 sw=4 noet:
  *
  * VIM - Vi IMproved	by Bram Moolenaar
  *
@@ -21,6 +21,15 @@
 
 #include <limits.h>
 
+/* uncomment this if used with the debug version of python.
+ * Checked on 2.7.4. */
+/* #define Py_DEBUG */
+/* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting
+ */
+/* uncomment this if used with the debug version of python, but without its
+ * allocator */
+/* #define Py_DEBUG_NO_PYMALLOC */
+
 /* Python.h defines _POSIX_THREADS itself (if needed) */
 #ifdef _POSIX_THREADS
 # undef _POSIX_THREADS
@@ -47,6 +56,11 @@
 #define PY_SSIZE_T_CLEAN
 
 #include <Python.h>
+
+#if !defined(PY_VERSION_HEX) || PY_VERSION_HEX < 0x02050000
+# undef PY_SSIZE_T_CLEAN
+#endif
+
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
 # include "macglue.h"
 # include <CodeFragments.h>
@@ -54,7 +68,9 @@
 #undef main /* Defined in python.h - aargh */
 #undef HAVE_FCNTL_H /* Clash with os_win32.h */
 
-static void init_structs(void);
+#define PyBytes_FromString      PyString_FromString
+#define PyBytes_Check           PyString_Check
+#define PyBytes_AsStringAndSize PyString_AsStringAndSize
 
 #if !defined(FEAT_PYTHON) && defined(PROTO)
 /* Use this to be able to generate prototypes without python being used. */
@@ -65,6 +81,10 @@
 # define PySequenceMethods Py_ssize_t
 #endif
 
+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+# define PY_USE_CAPSULE
+#endif
+
 #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
 # define PyInt Py_ssize_t
 # define PyInquiry lenfunc
@@ -75,6 +95,7 @@
 # define Py_ssize_t_fmt "n"
 #else
 # define PyInt int
+# define lenfunc inquiry
 # define PyInquiry inquiry
 # define PyIntArgFunc intargfunc
 # define PyIntIntArgFunc intintargfunc
@@ -82,6 +103,7 @@
 # define PyIntIntObjArgProc intintobjargproc
 # define Py_ssize_t_fmt "i"
 #endif
+#define Py_bytes_fmt "s"
 
 /* Parser flags */
 #define single_input	256
@@ -102,7 +124,7 @@
 #  include <dlfcn.h>
 #  define FARPROC void*
 #  define HINSTANCE void*
-#  ifdef PY_NO_RTLD_GLOBAL
+#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
 #   define load_dll(n) dlopen((n), RTLD_LAZY)
 #  else
 #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
@@ -110,7 +132,7 @@
 #  define close_dll dlclose
 #  define symbol_from_dll dlsym
 # else
-#  define load_dll LoadLibrary
+#  define load_dll vimLoadLib
 #  define close_dll FreeLibrary
 #  define symbol_from_dll GetProcAddress
 # endif
@@ -118,24 +140,34 @@
 /* This makes if_python.c compile without warnings against Python 2.5
  * on Win32 and Win64. */
 # undef PyRun_SimpleString
+# undef PyRun_String
 # undef PyArg_Parse
 # undef PyArg_ParseTuple
 # undef Py_BuildValue
 # undef Py_InitModule4
 # undef Py_InitModule4_64
+# undef PyObject_CallMethod
+# undef PyObject_CallFunction
 
 /*
  * Wrapper defines
  */
 # define PyArg_Parse dll_PyArg_Parse
 # define PyArg_ParseTuple dll_PyArg_ParseTuple
+# define PyMem_Free dll_PyMem_Free
+# define PyMem_Malloc dll_PyMem_Malloc
 # define PyDict_SetItemString dll_PyDict_SetItemString
 # define PyErr_BadArgument dll_PyErr_BadArgument
+# define PyErr_NewException dll_PyErr_NewException
 # define PyErr_Clear dll_PyErr_Clear
+# define PyErr_Format dll_PyErr_Format
+# define PyErr_PrintEx dll_PyErr_PrintEx
 # define PyErr_NoMemory dll_PyErr_NoMemory
 # define PyErr_Occurred dll_PyErr_Occurred
 # define PyErr_SetNone dll_PyErr_SetNone
 # define PyErr_SetString dll_PyErr_SetString
+# define PyErr_SetObject dll_PyErr_SetObject
+# define PyErr_ExceptionMatches dll_PyErr_ExceptionMatches
 # define PyEval_InitThreads dll_PyEval_InitThreads
 # define PyEval_RestoreThread dll_PyEval_RestoreThread
 # define PyEval_SaveThread dll_PyEval_SaveThread
@@ -145,41 +177,121 @@
 # endif
 # define PyInt_AsLong dll_PyInt_AsLong
 # define PyInt_FromLong dll_PyInt_FromLong
+# define PyLong_AsLong dll_PyLong_AsLong
+# define PyLong_FromLong dll_PyLong_FromLong
+# define PyBool_Type (*dll_PyBool_Type)
 # define PyInt_Type (*dll_PyInt_Type)
+# define PyLong_Type (*dll_PyLong_Type)
 # define PyList_GetItem dll_PyList_GetItem
 # define PyList_Append dll_PyList_Append
+# define PyList_Insert dll_PyList_Insert
 # define PyList_New dll_PyList_New
 # define PyList_SetItem dll_PyList_SetItem
 # define PyList_Size dll_PyList_Size
 # define PyList_Type (*dll_PyList_Type)
+# define PySequence_Check dll_PySequence_Check
+# define PySequence_Size dll_PySequence_Size
+# define PySequence_GetItem dll_PySequence_GetItem
+# define PySequence_Fast dll_PySequence_Fast
+# define PyTuple_Size dll_PyTuple_Size
+# define PyTuple_GetItem dll_PyTuple_GetItem
+# define PyTuple_Type (*dll_PyTuple_Type)
 # define PyImport_ImportModule dll_PyImport_ImportModule
 # define PyDict_New dll_PyDict_New
 # define PyDict_GetItemString dll_PyDict_GetItemString
+# define PyDict_Next dll_PyDict_Next
+# define PyDict_Type (*dll_PyDict_Type)
+# ifdef PyMapping_Keys
+#  define PY_NO_MAPPING_KEYS
+# else
+#  define PyMapping_Keys dll_PyMapping_Keys
+# endif
+# define PyObject_GetItem dll_PyObject_GetItem
+# define PyObject_CallMethod dll_PyObject_CallMethod
+# define PyMapping_Check dll_PyMapping_Check
+# define PyIter_Next dll_PyIter_Next
 # define PyModule_GetDict dll_PyModule_GetDict
+# define PyModule_AddObject dll_PyModule_AddObject
 # define PyRun_SimpleString dll_PyRun_SimpleString
+# define PyRun_String dll_PyRun_String
+# define PyObject_GetAttrString dll_PyObject_GetAttrString
+# define PyObject_HasAttrString dll_PyObject_HasAttrString
+# define PyObject_SetAttrString dll_PyObject_SetAttrString
+# define PyObject_CallFunctionObjArgs dll_PyObject_CallFunctionObjArgs
+# define PyObject_CallFunction dll_PyObject_CallFunction
+# define PyObject_Call dll_PyObject_Call
+# define PyObject_Repr dll_PyObject_Repr
 # define PyString_AsString dll_PyString_AsString
+# define PyString_AsStringAndSize dll_PyString_AsStringAndSize
 # define PyString_FromString dll_PyString_FromString
+# define PyString_FromFormat dll_PyString_FromFormat
 # define PyString_FromStringAndSize dll_PyString_FromStringAndSize
 # define PyString_Size dll_PyString_Size
 # define PyString_Type (*dll_PyString_Type)
+# define PyUnicode_Type (*dll_PyUnicode_Type)
+# undef PyUnicode_AsEncodedString
+# define PyUnicode_AsEncodedString py_PyUnicode_AsEncodedString
+# define PyFloat_AsDouble dll_PyFloat_AsDouble
+# define PyFloat_FromDouble dll_PyFloat_FromDouble
+# define PyFloat_Type (*dll_PyFloat_Type)
+# define PyNumber_Check dll_PyNumber_Check
+# define PyNumber_Long dll_PyNumber_Long
+# define PyImport_AddModule (*dll_PyImport_AddModule)
 # define PySys_SetObject dll_PySys_SetObject
+# define PySys_GetObject dll_PySys_GetObject
 # define PySys_SetArgv dll_PySys_SetArgv
 # define PyType_Type (*dll_PyType_Type)
+# define PyType_Ready (*dll_PyType_Ready)
+# define PyType_GenericAlloc dll_PyType_GenericAlloc
 # define Py_BuildValue dll_Py_BuildValue
 # define Py_FindMethod dll_Py_FindMethod
 # define Py_InitModule4 dll_Py_InitModule4
+# define Py_SetPythonHome dll_Py_SetPythonHome
 # define Py_Initialize dll_Py_Initialize
 # define Py_Finalize dll_Py_Finalize
 # define Py_IsInitialized dll_Py_IsInitialized
 # define _PyObject_New dll__PyObject_New
+# define _PyObject_GC_New dll__PyObject_GC_New
+# ifdef PyObject_GC_Del
+#  define Py_underscore_GC
+#  define _PyObject_GC_Del dll__PyObject_GC_Del
+#  define _PyObject_GC_UnTrack dll__PyObject_GC_UnTrack
+# else
+#  define PyObject_GC_Del dll_PyObject_GC_Del
+#  define PyObject_GC_UnTrack dll_PyObject_GC_UnTrack
+# endif
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+#  define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
+# endif
 # define _Py_NoneStruct (*dll__Py_NoneStruct)
+# define _Py_ZeroStruct (*dll__Py_ZeroStruct)
+# define _Py_TrueStruct (*dll__Py_TrueStruct)
 # define PyObject_Init dll__PyObject_Init
+# define PyObject_GetIter dll_PyObject_GetIter
+# define PyObject_IsTrue dll_PyObject_IsTrue
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
 #  define PyType_IsSubtype dll_PyType_IsSubtype
+#  ifdef Py_DEBUG
+#   define _Py_NegativeRefcount dll__Py_NegativeRefcount
+#   define _Py_RefTotal (*dll__Py_RefTotal)
+#   define _Py_Dealloc dll__Py_Dealloc
+#  endif
 # endif
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
-#  define PyObject_Malloc dll_PyObject_Malloc
-#  define PyObject_Free dll_PyObject_Free
+#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+#   define _PyObject_DebugMalloc dll__PyObject_DebugMalloc
+#   define _PyObject_DebugFree dll__PyObject_DebugFree
+#  else
+#   define PyObject_Malloc dll_PyObject_Malloc
+#   define PyObject_Free dll_PyObject_Free
+#  endif
+# endif
+# ifdef PY_USE_CAPSULE
+#  define PyCapsule_New dll_PyCapsule_New
+#  define PyCapsule_GetPointer dll_PyCapsule_GetPointer
+# else
+#  define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
+#  define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
 # endif
 
 /*
@@ -187,57 +299,140 @@
  */
 static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
 static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
+static int(*dll_PyMem_Free)(void *);
+static void* (*dll_PyMem_Malloc)(size_t);
 static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
 static int(*dll_PyErr_BadArgument)(void);
+static PyObject *(*dll_PyErr_NewException)(char *, PyObject *, PyObject *);
 static void(*dll_PyErr_Clear)(void);
+static PyObject*(*dll_PyErr_Format)(PyObject *, const char *, ...);
+static void(*dll_PyErr_PrintEx)(int);
 static PyObject*(*dll_PyErr_NoMemory)(void);
 static PyObject*(*dll_PyErr_Occurred)(void);
 static void(*dll_PyErr_SetNone)(PyObject *);
 static void(*dll_PyErr_SetString)(PyObject *, const char *);
+static void(*dll_PyErr_SetObject)(PyObject *, PyObject *);
+static int(*dll_PyErr_ExceptionMatches)(PyObject *);
 static void(*dll_PyEval_InitThreads)(void);
 static void(*dll_PyEval_RestoreThread)(PyThreadState *);
 static PyThreadState*(*dll_PyEval_SaveThread)(void);
 # ifdef PY_CAN_RECURSE
 static PyGILState_STATE	(*dll_PyGILState_Ensure)(void);
 static void (*dll_PyGILState_Release)(PyGILState_STATE);
-#endif
+# endif
 static long(*dll_PyInt_AsLong)(PyObject *);
 static PyObject*(*dll_PyInt_FromLong)(long);
+static long(*dll_PyLong_AsLong)(PyObject *);
+static PyObject*(*dll_PyLong_FromLong)(long);
+static PyTypeObject* dll_PyBool_Type;
 static PyTypeObject* dll_PyInt_Type;
+static PyTypeObject* dll_PyLong_Type;
 static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
-static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *);
+static int(*dll_PyList_Append)(PyObject *, PyObject *);
+static int(*dll_PyList_Insert)(PyObject *, PyInt, PyObject *);
 static PyObject*(*dll_PyList_New)(PyInt size);
 static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
 static PyInt(*dll_PyList_Size)(PyObject *);
 static PyTypeObject* dll_PyList_Type;
+static int (*dll_PySequence_Check)(PyObject *);
+static PyInt(*dll_PySequence_Size)(PyObject *);
+static PyObject*(*dll_PySequence_GetItem)(PyObject *, PyInt);
+static PyObject*(*dll_PySequence_Fast)(PyObject *, const char *);
+static PyInt(*dll_PyTuple_Size)(PyObject *);
+static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt);
+static PyTypeObject* dll_PyTuple_Type;
 static PyObject*(*dll_PyImport_ImportModule)(const char *);
 static PyObject*(*dll_PyDict_New)(void);
 static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
+static int (*dll_PyDict_Next)(PyObject *, PyInt *, PyObject **, PyObject **);
+static PyTypeObject* dll_PyDict_Type;
+# ifndef PY_NO_MAPPING_KEYS
+static PyObject* (*dll_PyMapping_Keys)(PyObject *);
+# endif
+static PyObject* (*dll_PyObject_GetItem)(PyObject *, PyObject *);
+static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *);
+static int (*dll_PyMapping_Check)(PyObject *);
+static PyObject* (*dll_PyIter_Next)(PyObject *);
 static PyObject*(*dll_PyModule_GetDict)(PyObject *);
+static int(*dll_PyModule_AddObject)(PyObject *, const char *, PyObject *);
 static int(*dll_PyRun_SimpleString)(char *);
+static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *);
+static PyObject* (*dll_PyObject_GetAttrString)(PyObject *, const char *);
+static int (*dll_PyObject_HasAttrString)(PyObject *, const char *);
+static PyObject* (*dll_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
+static PyObject* (*dll_PyObject_CallFunctionObjArgs)(PyObject *, ...);
+static PyObject* (*dll_PyObject_CallFunction)(PyObject *, char *, ...);
+static PyObject* (*dll_PyObject_Call)(PyObject *, PyObject *, PyObject *);
+static PyObject* (*dll_PyObject_Repr)(PyObject *);
 static char*(*dll_PyString_AsString)(PyObject *);
+static int(*dll_PyString_AsStringAndSize)(PyObject *, char **, PyInt *);
 static PyObject*(*dll_PyString_FromString)(const char *);
+static PyObject*(*dll_PyString_FromFormat)(const char *, ...);
 static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt);
 static PyInt(*dll_PyString_Size)(PyObject *);
 static PyTypeObject* dll_PyString_Type;
+static PyTypeObject* dll_PyUnicode_Type;
+static PyObject *(*py_PyUnicode_AsEncodedString)(PyObject *, char *, char *);
+static double(*dll_PyFloat_AsDouble)(PyObject *);
+static PyObject*(*dll_PyFloat_FromDouble)(double);
+static PyTypeObject* dll_PyFloat_Type;
+static int(*dll_PyNumber_Check)(PyObject *);
+static PyObject*(*dll_PyNumber_Long)(PyObject *);
 static int(*dll_PySys_SetObject)(char *, PyObject *);
+static PyObject *(*dll_PySys_GetObject)(char *);
 static int(*dll_PySys_SetArgv)(int, char **);
 static PyTypeObject* dll_PyType_Type;
+static int (*dll_PyType_Ready)(PyTypeObject *type);
+static PyObject* (*dll_PyType_GenericAlloc)(PyTypeObject *type, PyInt nitems);
 static PyObject*(*dll_Py_BuildValue)(char *, ...);
 static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
 static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
+static PyObject*(*dll_PyImport_AddModule)(char *);
+static void(*dll_Py_SetPythonHome)(char *home);
 static void(*dll_Py_Initialize)(void);
 static void(*dll_Py_Finalize)(void);
 static int(*dll_Py_IsInitialized)(void);
 static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
+static PyObject*(*dll__PyObject_GC_New)(PyTypeObject *);
+# ifdef Py_underscore_GC
+static void(*dll__PyObject_GC_Del)(void *);
+static void(*dll__PyObject_GC_UnTrack)(void *);
+# else
+static void(*dll_PyObject_GC_Del)(void *);
+static void(*dll_PyObject_GC_UnTrack)(void *);
+# endif
 static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
+static PyObject* (*dll_PyObject_GetIter)(PyObject *);
+static int (*dll_PyObject_IsTrue)(PyObject *);
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+static iternextfunc dll__PyObject_NextNotImplemented;
+# endif
 static PyObject* dll__Py_NoneStruct;
+static PyObject* _Py_ZeroStruct;
+static PyObject* dll__Py_TrueStruct;
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
 static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
+#  ifdef Py_DEBUG
+static void (*dll__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
+static PyInt* dll__Py_RefTotal;
+static void (*dll__Py_Dealloc)(PyObject *obj);
+#  endif
 # endif
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
+#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+static void (*dll__PyObject_DebugFree)(void*);
+static void* (*dll__PyObject_DebugMalloc)(size_t);
+#  else
 static void* (*dll_PyObject_Malloc)(size_t);
 static void (*dll_PyObject_Free)(void*);
+#  endif
+# endif
+# ifdef PY_USE_CAPSULE
+static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
+# else
+static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
+static void* (*dll_PyCObject_AsVoidPtr)(PyObject *);
 # endif
 
 static HINSTANCE hinstPython = 0; /* Instance of python.dll */
@@ -245,15 +440,25 @@
 /* Imported exception objects */
 static PyObject *imp_PyExc_AttributeError;
 static PyObject *imp_PyExc_IndexError;
+static PyObject *imp_PyExc_KeyError;
 static PyObject *imp_PyExc_KeyboardInterrupt;
 static PyObject *imp_PyExc_TypeError;
 static PyObject *imp_PyExc_ValueError;
+static PyObject *imp_PyExc_SystemExit;
+static PyObject *imp_PyExc_RuntimeError;
+static PyObject *imp_PyExc_ImportError;
+static PyObject *imp_PyExc_OverflowError;
 
 # define PyExc_AttributeError imp_PyExc_AttributeError
 # define PyExc_IndexError imp_PyExc_IndexError
+# define PyExc_KeyError imp_PyExc_KeyError
 # define PyExc_KeyboardInterrupt imp_PyExc_KeyboardInterrupt
 # define PyExc_TypeError imp_PyExc_TypeError
 # define PyExc_ValueError imp_PyExc_ValueError
+# define PyExc_SystemExit imp_PyExc_SystemExit
+# define PyExc_RuntimeError imp_PyExc_RuntimeError
+# define PyExc_ImportError imp_PyExc_ImportError
+# define PyExc_OverflowError imp_PyExc_OverflowError
 
 /*
  * Table of name to function pointer of python.
@@ -265,15 +470,29 @@
     PYTHON_PROC *ptr;
 } python_funcname_table[] =
 {
+#ifndef PY_SSIZE_T_CLEAN
     {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
     {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
+    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+#else
+    {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse},
+    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
+    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue},
+#endif
+    {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
+    {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
     {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
     {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
+    {"PyErr_NewException", (PYTHON_PROC*)&dll_PyErr_NewException},
     {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
+    {"PyErr_Format", (PYTHON_PROC*)&dll_PyErr_Format},
+    {"PyErr_PrintEx", (PYTHON_PROC*)&dll_PyErr_PrintEx},
     {"PyErr_NoMemory", (PYTHON_PROC*)&dll_PyErr_NoMemory},
     {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred},
     {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone},
     {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString},
+    {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject},
+    {"PyErr_ExceptionMatches", (PYTHON_PROC*)&dll_PyErr_ExceptionMatches},
     {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads},
     {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread},
     {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread},
@@ -283,45 +502,128 @@
 # endif
     {"PyInt_AsLong", (PYTHON_PROC*)&dll_PyInt_AsLong},
     {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong},
+    {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong},
+    {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong},
+    {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type},
     {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type},
+    {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
     {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
     {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append},
+    {"PyList_Insert", (PYTHON_PROC*)&dll_PyList_Insert},
     {"PyList_New", (PYTHON_PROC*)&dll_PyList_New},
     {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem},
     {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size},
     {"PyList_Type", (PYTHON_PROC*)&dll_PyList_Type},
+    {"PySequence_Size", (PYTHON_PROC*)&dll_PySequence_Size},
+    {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check},
+    {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem},
+    {"PySequence_Fast", (PYTHON_PROC*)&dll_PySequence_Fast},
+    {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem},
+    {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size},
+    {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type},
     {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule},
     {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString},
+    {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
     {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New},
+    {"PyDict_Type", (PYTHON_PROC*)&dll_PyDict_Type},
+# ifndef PY_NO_MAPPING_KEYS
+    {"PyMapping_Keys", (PYTHON_PROC*)&dll_PyMapping_Keys},
+# endif
+    {"PyObject_GetItem", (PYTHON_PROC*)&dll_PyObject_GetItem},
+    {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod},
+    {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check},
+    {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next},
     {"PyModule_GetDict", (PYTHON_PROC*)&dll_PyModule_GetDict},
+    {"PyModule_AddObject", (PYTHON_PROC*)&dll_PyModule_AddObject},
     {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString},
+    {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String},
+    {"PyObject_GetAttrString", (PYTHON_PROC*)&dll_PyObject_GetAttrString},
+    {"PyObject_HasAttrString", (PYTHON_PROC*)&dll_PyObject_HasAttrString},
+    {"PyObject_SetAttrString", (PYTHON_PROC*)&dll_PyObject_SetAttrString},
+    {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&dll_PyObject_CallFunctionObjArgs},
+    {"PyObject_CallFunction", (PYTHON_PROC*)&dll_PyObject_CallFunction},
+    {"PyObject_Call", (PYTHON_PROC*)&dll_PyObject_Call},
+    {"PyObject_Repr", (PYTHON_PROC*)&dll_PyObject_Repr},
     {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString},
+    {"PyString_AsStringAndSize", (PYTHON_PROC*)&dll_PyString_AsStringAndSize},
     {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString},
+    {"PyString_FromFormat", (PYTHON_PROC*)&dll_PyString_FromFormat},
     {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize},
     {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size},
     {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type},
+    {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type},
+    {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type},
+    {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble},
+    {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble},
+    {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule},
+    {"PyNumber_Check", (PYTHON_PROC*)&dll_PyNumber_Check},
+    {"PyNumber_Long", (PYTHON_PROC*)&dll_PyNumber_Long},
     {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject},
+    {"PySys_GetObject", (PYTHON_PROC*)&dll_PySys_GetObject},
     {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
     {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
-    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
+    {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
+    {"PyType_GenericAlloc", (PYTHON_PROC*)&dll_PyType_GenericAlloc},
     {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
-# if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
-    {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
-# else
-    {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
-# endif
+    {"Py_SetPythonHome", (PYTHON_PROC*)&dll_Py_SetPythonHome},
     {"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize},
     {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize},
     {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
     {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
+    {"_PyObject_GC_New", (PYTHON_PROC*)&dll__PyObject_GC_New},
+# ifdef Py_underscore_GC
+    {"_PyObject_GC_Del", (PYTHON_PROC*)&dll__PyObject_GC_Del},
+    {"_PyObject_GC_UnTrack", (PYTHON_PROC*)&dll__PyObject_GC_UnTrack},
+# else
+    {"PyObject_GC_Del", (PYTHON_PROC*)&dll_PyObject_GC_Del},
+    {"PyObject_GC_UnTrack", (PYTHON_PROC*)&dll_PyObject_GC_UnTrack},
+# endif
     {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
+    {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter},
+    {"PyObject_IsTrue", (PYTHON_PROC*)&dll_PyObject_IsTrue},
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
+    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
+# endif
     {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
+    {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct},
+    {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct},
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+#  ifdef Py_DEBUG
+    {"_Py_NegativeRefcount", (PYTHON_PROC*)&dll__Py_NegativeRefcount},
+    {"_Py_RefTotal", (PYTHON_PROC*)&dll__Py_RefTotal},
+    {"_Py_Dealloc", (PYTHON_PROC*)&dll__Py_Dealloc},
+#  endif
     {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
 # endif
 # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
+#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+    {"_PyObject_DebugFree", (PYTHON_PROC*)&dll__PyObject_DebugFree},
+    {"_PyObject_DebugMalloc", (PYTHON_PROC*)&dll__PyObject_DebugMalloc},
+#  else
     {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc},
     {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free},
+#  endif
+# endif
+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
+	&& SIZEOF_SIZE_T != SIZEOF_INT
+#  ifdef Py_DEBUG
+    {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+#  else
+    {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+#  endif
+# else
+#  ifdef Py_DEBUG
+    {"Py_InitModule4TraceRefs", (PYTHON_PROC*)&dll_Py_InitModule4},
+#  else
+    {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
+#  endif
+# endif
+# ifdef PY_USE_CAPSULE
+    {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New},
+    {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer},
+# else
+    {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
+    {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
 # endif
     {"", NULL},
 };
@@ -348,14 +650,16 @@
 python_runtime_link_init(char *libname, int verbose)
 {
     int i;
+    void *ucs_as_encoded_string;
 
-#if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON3)
+#if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON3)
     /* Can't have Python and Python3 loaded at the same time.
      * It cause a crash, because RTLD_GLOBAL is needed for
      * standard C extension libraries of one or both python versions. */
     if (python3_loaded())
     {
-	EMSG(_("E836: This Vim cannot execute :python after using :py3"));
+	if (verbose)
+	    EMSG(_("E836: This Vim cannot execute :python after using :py3"));
 	return FAIL;
     }
 #endif
@@ -382,6 +686,25 @@
 	    return FAIL;
 	}
     }
+
+    /* Load unicode functions separately as only the ucs2 or the ucs4 functions
+     * will be present in the library. */
+    ucs_as_encoded_string = symbol_from_dll(hinstPython,
+					     "PyUnicodeUCS2_AsEncodedString");
+    if (ucs_as_encoded_string == NULL)
+	ucs_as_encoded_string = symbol_from_dll(hinstPython,
+					     "PyUnicodeUCS4_AsEncodedString");
+    if (ucs_as_encoded_string != NULL)
+	py_PyUnicode_AsEncodedString = ucs_as_encoded_string;
+    else
+    {
+	close_dll(hinstPython);
+	hinstPython = 0;
+	if (verbose)
+	    EMSG2(_(e_loadfunc), "PyUnicode_UCSX_*");
+	return FAIL;
+    }
+
     return OK;
 }
 
@@ -406,23 +729,71 @@
     PyObject *exdict = PyModule_GetDict(exmod);
     imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError");
     imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError");
+    imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError");
     imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
     imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
     imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
+    imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit");
+    imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
+    imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError");
+    imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError");
     Py_XINCREF(imp_PyExc_AttributeError);
     Py_XINCREF(imp_PyExc_IndexError);
+    Py_XINCREF(imp_PyExc_KeyError);
     Py_XINCREF(imp_PyExc_KeyboardInterrupt);
     Py_XINCREF(imp_PyExc_TypeError);
     Py_XINCREF(imp_PyExc_ValueError);
+    Py_XINCREF(imp_PyExc_SystemExit);
+    Py_XINCREF(imp_PyExc_RuntimeError);
+    Py_XINCREF(imp_PyExc_ImportError);
+    Py_XINCREF(imp_PyExc_OverflowError);
     Py_XDECREF(exmod);
 }
 #endif /* DYNAMIC_PYTHON */
 
-static PyObject *BufferNew (buf_T *);
-static PyObject *WindowNew(win_T *);
-static PyObject *LineToString(const char *);
+static int initialised = 0;
+#define PYINITIALISED initialised
+
+#define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self);
 
-static PyTypeObject RangeType;
+#define WIN_PYTHON_REF(win) win->w_python_ref
+#define BUF_PYTHON_REF(buf) buf->b_python_ref
+#define TAB_PYTHON_REF(tab) tab->tp_python_ref
+
+static PyObject *OutputGetattr(PyObject *, char *);
+static PyObject *BufferGetattr(PyObject *, char *);
+static PyObject *WindowGetattr(PyObject *, char *);
+static PyObject *TabPageGetattr(PyObject *, char *);
+static PyObject *RangeGetattr(PyObject *, char *);
+static PyObject *DictionaryGetattr(PyObject *, char*);
+static PyObject *ListGetattr(PyObject *, char *);
+static PyObject *FunctionGetattr(PyObject *, char *);
+
+#ifndef Py_VISIT
+# define Py_VISIT(obj) visit(obj, arg)
+#endif
+#ifndef Py_CLEAR
+# define Py_CLEAR(obj) \
+    { \
+	Py_XDECREF(obj); \
+	obj = NULL; \
+    }
+#endif
+
+#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+    static void *
+py_memsave(void *p, size_t len)
+{
+    void	*r;
+
+    if (!(r = PyMem_Malloc(len)))
+	return NULL;
+    mch_memmove(r, p, len);
+    return r;
+}
+
+# define PY_STRSAVE(s) ((char_u *) py_memsave(s, STRLEN(s) + 1))
+#endif
 
 /*
  * Include the code shared with if_python3.c
@@ -434,35 +805,19 @@
  * Internal function prototypes.
  */
 
-static PyInt RangeStart;
-static PyInt RangeEnd;
-
-static void PythonIO_Flush(void);
-static int PythonIO_Init(void);
 static int PythonMod_Init(void);
 
-/* Utility functions for the vim/python interface
- * ----------------------------------------------
- */
-
-static int SetBufferLineList(buf_T *, PyInt, PyInt, PyObject *, PyInt *);
-
 
 /******************************************************
  * 1. Python interpreter main program.
  */
 
-static int initialised = 0;
-
 #if PYTHON_API_VERSION < 1007 /* Python 1.4 */
 typedef PyObject PyThreadState;
 #endif
 
-#ifdef PY_CAN_RECURSE
-static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
-#else
+#ifndef PY_CAN_RECURSE
 static PyThreadState *saved_python_thread = NULL;
-#endif
 
 /*
  * Suspend a thread of the Python interpreter, other threads are allowed to
@@ -471,11 +826,7 @@
     static void
 Python_SaveThread(void)
 {
-#ifdef PY_CAN_RECURSE
-    PyGILState_Release(pygilstate);
-#else
     saved_python_thread = PyEval_SaveThread();
-#endif
 }
 
 /*
@@ -485,13 +836,10 @@
     static void
 Python_RestoreThread(void)
 {
-#ifdef PY_CAN_RECURSE
-    pygilstate = PyGILState_Ensure();
-#else
     PyEval_RestoreThread(saved_python_thread);
     saved_python_thread = NULL;
-#endif
 }
+#endif
 
     void
 python_end()
@@ -507,14 +855,22 @@
 #ifdef DYNAMIC_PYTHON
     if (hinstPython && Py_IsInitialized())
     {
+# ifdef PY_CAN_RECURSE
+	PyGILState_Ensure();
+# else
 	Python_RestoreThread();	    /* enter python */
+# endif
 	Py_Finalize();
     }
     end_dynamic_python();
 #else
     if (Py_IsInitialized())
     {
+# ifdef PY_CAN_RECURSE
+	PyGILState_Ensure();
+# else
 	Python_RestoreThread();	    /* enter python */
+# endif
 	Py_Finalize();
     }
 #endif
@@ -543,6 +899,10 @@
 	}
 #endif
 
+#ifdef PYTHON_HOME
+	Py_SetPythonHome(PYTHON_HOME);
+#endif
+
 	init_structs();
 
 #if !defined(MACOS) || defined(MACOS_X_UNIX)
@@ -550,27 +910,40 @@
 #else
 	PyMac_Initialize();
 #endif
-	/* initialise threads */
+	/* Initialise threads, and below save the state using
+	 * PyEval_SaveThread.  Without the call to PyEval_SaveThread, thread
+	 * specific state (such as the system trace hook), will be lost
+	 * between invocations of Python code. */
 	PyEval_InitThreads();
-
 #ifdef DYNAMIC_PYTHON
 	get_exceptions();
 #endif
 
-	if (PythonIO_Init())
+	if (PythonIO_Init_io())
 	    goto fail;
 
 	if (PythonMod_Init())
 	    goto fail;
 
+	globals = PyModule_GetDict(PyImport_AddModule("__main__"));
+
 	/* Remove the element from sys.path that was added because of our
 	 * argv[0] value in PythonMod_Init().  Previously we used an empty
-	 * string, but dependinding on the OS we then get an empty entry or
+	 * string, but depending on the OS we then get an empty entry or
 	 * the current directory in sys.path. */
 	PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
 
-	/* the first python thread is vim's, release the lock */
-	Python_SaveThread();
+	/* lock is created and acquired in PyEval_InitThreads() and thread
+	 * state is created in Py_Initialize()
+	 * there _PyGILState_NoteThreadState() also sets gilcounter to 1
+	 * (python must have threads enabled!)
+	 * so the following does both: unlock GIL and save thread state in TLS
+	 * without deleting thread state
+	 */
+#ifndef PY_CAN_RECURSE
+	saved_python_thread =
+#endif
+	    PyEval_SaveThread();
 
 	initialised = 1;
     }
@@ -580,7 +953,7 @@
 fail:
     /* We call PythonIO_Flush() here to print any Python errors.
      * This is OK, as it is possible to call this function even
-     * if PythonIO_Init() has not completed successfully (it will
+     * if PythonIO_Init_io() has not completed successfully (it will
      * not do anything in this case).
      */
     PythonIO_Flush();
@@ -591,7 +964,7 @@
  * External interface
  */
     static void
-DoPythonCommand(exarg_T *eap, const char *cmd)
+DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
 {
 #ifndef PY_CAN_RECURSE
     static int		recursive = 0;
@@ -602,6 +975,9 @@
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
     char		*saved_locale;
 #endif
+#ifdef PY_CAN_RECURSE
+    PyGILState_STATE	pygilstate;
+#endif
 
 #ifndef PY_CAN_RECURSE
     if (recursive)
@@ -621,8 +997,8 @@
     if (Python_Init())
 	goto theend;
 
-    RangeStart = eap->line1;
-    RangeEnd = eap->line2;
+    init_range(arg);
+
     Python_Release_Vim();	    /* leave vim */
 
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
@@ -633,22 +1009,34 @@
     else
     {
 	/* Need to make a copy, value may change when setting new locale. */
-	saved_locale = (char *)vim_strsave((char_u *)saved_locale);
+	saved_locale = (char *) PY_STRSAVE(saved_locale);
 	(void)setlocale(LC_NUMERIC, "C");
     }
 #endif
 
+#ifdef PY_CAN_RECURSE
+    pygilstate = PyGILState_Ensure();
+#else
     Python_RestoreThread();	    /* enter python */
+#endif
 
-    PyRun_SimpleString((char *)(cmd));
+    run((char *) cmd, arg
+#ifdef PY_CAN_RECURSE
+	    , &pygilstate
+#endif
+	    );
 
+#ifdef PY_CAN_RECURSE
+    PyGILState_Release(pygilstate);
+#else
     Python_SaveThread();	    /* leave python */
+#endif
 
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
     if (saved_locale != NULL)
     {
 	(void)setlocale(LC_NUMERIC, saved_locale);
-	vim_free(saved_locale);
+	PyMem_Free(saved_locale);
     }
 #endif
 
@@ -662,7 +1050,7 @@
 #ifndef PY_CAN_RECURSE
     --recursive;
 #endif
-    return;	    /* keeps lint happy */
+    return;
 }
 
 /*
@@ -676,10 +1064,10 @@
     script = script_get(eap, eap->arg);
     if (!eap->skip)
     {
-	if (script == NULL)
-	    DoPythonCommand(eap, (char *)eap->arg);
-	else
-	    DoPythonCommand(eap, (char *)script);
+	DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script,
+		(rangeinitializer) init_range_cmd,
+		(runner) run_cmd,
+		(void *) eap);
     }
     vim_free(script);
 }
@@ -725,7 +1113,19 @@
     *p++ = '\0';
 
     /* Execute the file */
-    DoPythonCommand(eap, buffer);
+    DoPyCommand(buffer,
+	    (rangeinitializer) init_range_cmd,
+	    (runner) run_cmd,
+	    (void *) eap);
+}
+
+    void
+ex_pydo(exarg_T *eap)
+{
+    DoPyCommand((char *)eap->arg,
+	    (rangeinitializer) init_range_cmd,
+	    (runner)run_do,
+	    (void *)eap);
 }
 
 /******************************************************
@@ -740,44 +1140,12 @@
 {
     if (strcmp(name, "softspace") == 0)
 	return PyInt_FromLong(((OutputObject *)(self))->softspace);
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, OutputAttrs);
 
     return Py_FindMethod(OutputMethods, self, name);
 }
 
-    static int
-OutputSetattr(PyObject *self, char *name, PyObject *val)
-{
-    if (val == NULL) {
-	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
-	return -1;
-    }
-
-    if (strcmp(name, "softspace") == 0)
-    {
-	if (!PyInt_Check(val)) {
-	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
-	    return -1;
-	}
-
-	((OutputObject *)(self))->softspace = PyInt_AsLong(val);
-	return 0;
-    }
-
-    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
-    return -1;
-}
-
-/***************/
-
-    static int
-PythonIO_Init(void)
-{
-    /* Fixups... */
-    OutputType.ob_type = &PyType_Type;
-
-    return PythonIO_Init_io();
-}
-
 /******************************************************
  * 3. Implementation of the Vim module for Python
  */
@@ -788,22 +1156,12 @@
 
 #define WindowType_Check(obj) ((obj)->ob_type == &WindowType)
 
-static void WindowDestructor(PyObject *);
-static PyObject *WindowGetattr(PyObject *, char *);
-
 /* Buffer type - Implementation functions
  * --------------------------------------
  */
 
 #define BufferType_Check(obj) ((obj)->ob_type == &BufferType)
 
-static void BufferDestructor(PyObject *);
-static PyObject *BufferGetattr(PyObject *, char *);
-static PyObject *BufferRepr(PyObject *);
-
-static PyInt BufferLength(PyObject *);
-static PyObject *BufferItem(PyObject *, PyInt);
-static PyObject *BufferSlice(PyObject *, PyInt, PyInt);
 static PyInt BufferAssItem(PyObject *, PyInt, PyObject *);
 static PyInt BufferAssSlice(PyObject *, PyInt, PyInt, PyObject *);
 
@@ -820,239 +1178,72 @@
  * -----------------------------------------------
  */
 
-static PyObject *CurrentGetattr(PyObject *, char *);
-static int CurrentSetattr(PyObject *, char *, PyObject *);
-
-/* Common routines for buffers and line ranges
- * -------------------------------------------
- */
-
-    static PyInt
-RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
-{
-    PyInt size;
-    PyInt len_change;
-
-    /* Self must be a valid buffer */
-    if (CheckBuffer(self))
-	return -1;
-
-    /* Sort out the slice range */
-    size = end - start + 1;
-
-    if (lo < 0)
-	lo = 0;
-    else if (lo > size)
-	lo = size;
-    if (hi < 0)
-	hi = 0;
-    if (hi < lo)
-	hi = lo;
-    else if (hi > size)
-	hi = size;
-
-    if (SetBufferLineList(self->buf, lo + start, hi + start,
-						    val, &len_change) == FAIL)
-	return -1;
-
-    if (new_end)
-	*new_end = end + len_change;
-
-    return 0;
-}
-
 static PySequenceMethods BufferAsSeq = {
     (PyInquiry)		BufferLength,	    /* sq_length,    len(x)   */
-    (binaryfunc)	0, /* BufferConcat, */	     /* sq_concat,    x+y      */
-    (PyIntArgFunc)	0, /* BufferRepeat, */	     /* sq_repeat,    x*n      */
+    (binaryfunc)	0,		    /* BufferConcat, sq_concat, x+y */
+    (PyIntArgFunc)	0,		    /* BufferRepeat, sq_repeat, x*n */
     (PyIntArgFunc)	BufferItem,	    /* sq_item,      x[i]     */
     (PyIntIntArgFunc)	BufferSlice,	    /* sq_slice,     x[i:j]   */
     (PyIntObjArgProc)	BufferAssItem,	    /* sq_ass_item,  x[i]=v   */
-    (PyIntIntObjArgProc)	BufferAssSlice,     /* sq_ass_slice, x[i:j]=v */
-};
-
-static PyTypeObject BufferType = {
-    PyObject_HEAD_INIT(0)
+    (PyIntIntObjArgProc) BufferAssSlice,    /* sq_ass_slice, x[i:j]=v */
+    (objobjproc)	0,
+    (binaryfunc)	0,
     0,
-    "buffer",
-    sizeof(BufferObject),
-    0,
-
-    (destructor)    BufferDestructor,	/* tp_dealloc,	refcount==0  */
-    (printfunc)     0,			/* tp_print,	print x      */
-    (getattrfunc)   BufferGetattr,	/* tp_getattr,	x.attr	     */
-    (setattrfunc)   0,			/* tp_setattr,	x.attr=v     */
-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
-    (reprfunc)	    BufferRepr,		/* tp_repr,	`x`, print x */
-
-    0,		    /* as number */
-    &BufferAsSeq,   /* as sequence */
-    0,		    /* as mapping */
-
-    (hashfunc) 0,			/* tp_hash, dict(x) */
-    (ternaryfunc) 0,			/* tp_call, x()     */
-    (reprfunc) 0,			/* tp_str,  str(x)  */
 };
 
 /* Buffer object - Implementation
  */
 
     static PyObject *
-BufferNew(buf_T *buf)
-{
-    /* We need to handle deletion of buffers underneath us.
-     * If we add a "b_python_ref" field to the buf_T structure,
-     * then we can get at it in buf_freeall() in vim. We then
-     * need to create only ONE Python object per buffer - if
-     * we try to create a second, just INCREF the existing one
-     * and return it. The (single) Python object referring to
-     * the buffer is stored in "b_python_ref".
-     * Question: what to do on a buf_freeall(). We'll probably
-     * have to either delete the Python object (DECREF it to
-     * zero - a bad idea, as it leaves dangling refs!) or
-     * set the buf_T * value to an invalid value (-1?), which
-     * means we need checks in all access functions... Bah.
-     */
-
-    BufferObject *self;
-
-    if (buf->b_python_ref != NULL)
-    {
-	self = buf->b_python_ref;
-	Py_INCREF(self);
-    }
-    else
-    {
-	self = PyObject_NEW(BufferObject, &BufferType);
-	if (self == NULL)
-	    return NULL;
-	self->buf = buf;
-	buf->b_python_ref = self;
-    }
-
-    return (PyObject *)(self);
-}
-
-    static void
-BufferDestructor(PyObject *self)
-{
-    BufferObject *this = (BufferObject *)(self);
-
-    if (this->buf && this->buf != INVALID_BUFFER_VALUE)
-	this->buf->b_python_ref = NULL;
-
-    Py_DECREF(self);
-}
-
-    static PyObject *
 BufferGetattr(PyObject *self, char *name)
 {
-    BufferObject *this = (BufferObject *)(self);
+    PyObject *r;
+
+    if ((r = BufferAttrValid((BufferObject *)(self), name)))
+	return r;
 
-    if (CheckBuffer(this))
+    if (CheckBuffer((BufferObject *)(self)))
 	return NULL;
 
-    if (strcmp(name, "name") == 0)
-	return Py_BuildValue("s", this->buf->b_ffname);
-    else if (strcmp(name, "number") == 0)
-	return Py_BuildValue(Py_ssize_t_fmt, this->buf->b_fnum);
-    else if (strcmp(name,"__members__") == 0)
-	return Py_BuildValue("[ss]", "name", "number");
+    r = BufferAttr((BufferObject *)(self), name);
+    if (r || PyErr_Occurred())
+	return r;
     else
 	return Py_FindMethod(BufferMethods, self, name);
 }
 
-    static PyObject *
-BufferRepr(PyObject *self)
-{
-    static char repr[100];
-    BufferObject *this = (BufferObject *)(self);
-
-    if (this->buf == INVALID_BUFFER_VALUE)
-    {
-	vim_snprintf(repr, 100, _("<buffer object (deleted) at %p>"), (self));
-	return PyString_FromString(repr);
-    }
-    else
-    {
-	char *name = (char *)this->buf->b_fname;
-	PyInt len;
-
-	if (name == NULL)
-	    name = "";
-	len = strlen(name);
-
-	if (len > 35)
-	    name = name + (35 - len);
-
-	vim_snprintf(repr, 100, "<buffer %s%s>", len > 35 ? "..." : "", name);
-
-	return PyString_FromString(repr);
-    }
-}
-
 /******************/
 
     static PyInt
-BufferLength(PyObject *self)
-{
-    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
-    if (CheckBuffer((BufferObject *)(self)))
-	return -1; /* ??? */
-
-    return (((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
-
-    static PyObject *
-BufferItem(PyObject *self, PyInt n)
-{
-    return RBItem((BufferObject *)(self), n, 1,
-		  (int)((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
-
-    static PyObject *
-BufferSlice(PyObject *self, PyInt lo, PyInt hi)
-{
-    return RBSlice((BufferObject *)(self), lo, hi, 1,
-		   (int)((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
-
-    static PyInt
 BufferAssItem(PyObject *self, PyInt n, PyObject *val)
 {
-    return RBAsItem((BufferObject *)(self), n, val, 1,
-		     (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-		     NULL);
+    return RBAsItem((BufferObject *)(self), n, val, 1, -1, NULL);
 }
 
     static PyInt
 BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
 {
-    return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
-		      (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-		      NULL);
+    return RBAsSlice((BufferObject *)(self), lo, hi, val, 1, -1, NULL);
 }
 
 static PySequenceMethods RangeAsSeq = {
-    (PyInquiry)		RangeLength,	    /* sq_length,    len(x)   */
-    (binaryfunc)	0, /* RangeConcat, */	     /* sq_concat,    x+y      */
-    (PyIntArgFunc)	0, /* RangeRepeat, */	     /* sq_repeat,    x*n      */
-    (PyIntArgFunc)	RangeItem,	    /* sq_item,      x[i]     */
-    (PyIntIntArgFunc)	RangeSlice,	    /* sq_slice,     x[i:j]   */
-    (PyIntObjArgProc)	RangeAssItem,	    /* sq_ass_item,  x[i]=v   */
-    (PyIntIntObjArgProc)	RangeAssSlice,	    /* sq_ass_slice, x[i:j]=v */
+    (PyInquiry)		RangeLength,	      /* sq_length,    len(x)   */
+    (binaryfunc)	0, /* RangeConcat, */ /* sq_concat,    x+y      */
+    (PyIntArgFunc)	0, /* RangeRepeat, */ /* sq_repeat,    x*n      */
+    (PyIntArgFunc)	RangeItem,	      /* sq_item,      x[i]     */
+    (PyIntIntArgFunc)	RangeSlice,	      /* sq_slice,     x[i:j]   */
+    (PyIntObjArgProc)	RangeAssItem,	      /* sq_ass_item,  x[i]=v   */
+    (PyIntIntObjArgProc) RangeAssSlice,	      /* sq_ass_slice, x[i:j]=v */
+    (objobjproc)	0,
+#if PY_MAJOR_VERSION >= 2
+    (binaryfunc)	0,
+    0,
+#endif
 };
 
 /* Line range object - Implementation
  */
 
-    static void
-RangeDestructor(PyObject *self)
-{
-    Py_DECREF(((RangeObject *)(self))->buf);
-    Py_DECREF(self);
-}
-
     static PyObject *
 RangeGetattr(PyObject *self, char *name)
 {
@@ -1060,6 +1251,8 @@
 	return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->start - 1);
     else if (strcmp(name, "end") == 0)
 	return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->end - 1);
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, RangeAttrs);
     else
 	return Py_FindMethod(RangeMethods, self, name);
 }
@@ -1078,283 +1271,101 @@
     static PyInt
 RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
 {
-    return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val,
+    return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
 		      ((RangeObject *)(self))->start,
 		      ((RangeObject *)(self))->end,
 		      &((RangeObject *)(self))->end);
 }
 
-/* Buffer list object - Definitions
- */
-
-typedef struct
-{
-    PyObject_HEAD
-} BufListObject;
-
-static PySequenceMethods BufListAsSeq = {
-    (PyInquiry)		BufListLength,	    /* sq_length,    len(x)   */
-    (binaryfunc)	0,		    /* sq_concat,    x+y      */
-    (PyIntArgFunc)	0,		    /* sq_repeat,    x*n      */
-    (PyIntArgFunc)	BufListItem,	    /* sq_item,      x[i]     */
-    (PyIntIntArgFunc)	0,		    /* sq_slice,     x[i:j]   */
-    (PyIntObjArgProc)	0,		    /* sq_ass_item,  x[i]=v   */
-    (PyIntIntObjArgProc)	0,		    /* sq_ass_slice, x[i:j]=v */
-};
-
-static PyTypeObject BufListType = {
-    PyObject_HEAD_INIT(0)
-    0,
-    "buffer list",
-    sizeof(BufListObject),
-    0,
-
-    (destructor)    0,			/* tp_dealloc,	refcount==0  */
-    (printfunc)     0,			/* tp_print,	print x      */
-    (getattrfunc)   0,			/* tp_getattr,	x.attr	     */
-    (setattrfunc)   0,			/* tp_setattr,	x.attr=v     */
-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
-    (reprfunc)	    0,			/* tp_repr,	`x`, print x */
-
-    0,		    /* as number */
-    &BufListAsSeq,  /* as sequence */
-    0,		    /* as mapping */
-
-    (hashfunc) 0,			/* tp_hash, dict(x) */
-    (ternaryfunc) 0,			/* tp_call, x()     */
-    (reprfunc) 0,			/* tp_str,  str(x)  */
-};
-
-/* Window object - Definitions
- */
-
-static struct PyMethodDef WindowMethods[] = {
-    /* name,	    function,		calling,    documentation */
-    { NULL,	    NULL,		0,	    NULL }
-};
-
-static PyTypeObject WindowType = {
-    PyObject_HEAD_INIT(0)
-    0,
-    "window",
-    sizeof(WindowObject),
-    0,
-
-    (destructor)    WindowDestructor,	/* tp_dealloc,	refcount==0  */
-    (printfunc)     0,			/* tp_print,	print x      */
-    (getattrfunc)   WindowGetattr,	/* tp_getattr,	x.attr	     */
-    (setattrfunc)   WindowSetattr,	/* tp_setattr,	x.attr=v     */
-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
-    (reprfunc)	    WindowRepr,		/* tp_repr,	`x`, print x */
-
-    0,		    /* as number */
-    0,		    /* as sequence */
-    0,		    /* as mapping */
-
-    (hashfunc) 0,			/* tp_hash, dict(x) */
-    (ternaryfunc) 0,			/* tp_call, x()     */
-    (reprfunc) 0,			/* tp_str,  str(x)  */
-};
-
-/* Window object - Implementation
+/* TabPage object - Implementation
  */
 
     static PyObject *
-WindowNew(win_T *win)
+TabPageGetattr(PyObject *self, char *name)
 {
-    /* We need to handle deletion of windows underneath us.
-     * If we add a "w_python_ref" field to the win_T structure,
-     * then we can get at it in win_free() in vim. We then
-     * need to create only ONE Python object per window - if
-     * we try to create a second, just INCREF the existing one
-     * and return it. The (single) Python object referring to
-     * the window is stored in "w_python_ref".
-     * On a win_free() we set the Python object's win_T* field
-     * to an invalid value. We trap all uses of a window
-     * object, and reject them if the win_T* field is invalid.
-     */
+    PyObject *r;
 
-    WindowObject *self;
+    if ((r = TabPageAttrValid((TabPageObject *)(self), name)))
+	return r;
 
-    if (win->w_python_ref)
-    {
-	self = win->w_python_ref;
-	Py_INCREF(self);
-    }
-    else
-    {
-	self = PyObject_NEW(WindowObject, &WindowType);
-	if (self == NULL)
-	    return NULL;
-	self->win = win;
-	win->w_python_ref = self;
-    }
+    if (CheckTabPage((TabPageObject *)(self)))
+	return NULL;
 
-    return (PyObject *)(self);
+    r = TabPageAttr((TabPageObject *)(self), name);
+    if (r || PyErr_Occurred())
+	return r;
+    else
+	return Py_FindMethod(TabPageMethods, self, name);
 }
 
-    static void
-WindowDestructor(PyObject *self)
-{
-    WindowObject *this = (WindowObject *)(self);
-
-    if (this->win && this->win != INVALID_WINDOW_VALUE)
-	this->win->w_python_ref = NULL;
-
-    Py_DECREF(self);
-}
+/* Window object - Implementation
+ */
 
     static PyObject *
 WindowGetattr(PyObject *self, char *name)
 {
-    WindowObject *this = (WindowObject *)(self);
+    PyObject *r;
 
-    if (CheckWindow(this))
-	return NULL;
+    if ((r = WindowAttrValid((WindowObject *)(self), name)))
+	return r;
 
-    if (strcmp(name, "buffer") == 0)
-	return (PyObject *)BufferNew(this->win->w_buffer);
-    else if (strcmp(name, "cursor") == 0)
-    {
-	pos_T *pos = &this->win->w_cursor;
+    if (CheckWindow((WindowObject *)(self)))
+	return NULL;
 
-	return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
-    }
-    else if (strcmp(name, "height") == 0)
-	return Py_BuildValue("l", (long)(this->win->w_height));
-#ifdef FEAT_VERTSPLIT
-    else if (strcmp(name, "width") == 0)
-	return Py_BuildValue("l", (long)(W_WIDTH(this->win)));
-#endif
-    else if (strcmp(name,"__members__") == 0)
-	return Py_BuildValue("[sss]", "buffer", "cursor", "height");
+    r = WindowAttr((WindowObject *)(self), name);
+    if (r || PyErr_Occurred())
+	return r;
     else
 	return Py_FindMethod(WindowMethods, self, name);
 }
 
-/* Window list object - Definitions
+/* Tab page list object - Definitions
  */
 
-typedef struct
-{
-    PyObject_HEAD
-}
-WinListObject;
-
-static PySequenceMethods WinListAsSeq = {
-    (PyInquiry)		WinListLength,	    /* sq_length,    len(x)   */
+static PySequenceMethods TabListAsSeq = {
+    (PyInquiry)		TabListLength,	    /* sq_length,    len(x)   */
     (binaryfunc)	0,		    /* sq_concat,    x+y      */
     (PyIntArgFunc)	0,		    /* sq_repeat,    x*n      */
-    (PyIntArgFunc)	WinListItem,	    /* sq_item,      x[i]     */
+    (PyIntArgFunc)	TabListItem,	    /* sq_item,      x[i]     */
     (PyIntIntArgFunc)	0,		    /* sq_slice,     x[i:j]   */
     (PyIntObjArgProc)	0,		    /* sq_ass_item,  x[i]=v   */
-    (PyIntIntObjArgProc)	0,		    /* sq_ass_slice, x[i:j]=v */
-};
-
-static PyTypeObject WinListType = {
-    PyObject_HEAD_INIT(0)
+    (PyIntIntObjArgProc) 0,		    /* sq_ass_slice, x[i:j]=v */
+    (objobjproc)	0,
+#if PY_MAJOR_VERSION >= 2
+    (binaryfunc)	0,
     0,
-    "window list",
-    sizeof(WinListObject),
-    0,
-
-    (destructor)    0,			/* tp_dealloc,	refcount==0  */
-    (printfunc)     0,			/* tp_print,	print x      */
-    (getattrfunc)   0,			/* tp_getattr,	x.attr	     */
-    (setattrfunc)   0,			/* tp_setattr,	x.attr=v     */
-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
-    (reprfunc)	    0,			/* tp_repr,	`x`, print x */
-
-    0,		    /* as number */
-    &WinListAsSeq,  /* as sequence */
-    0,		    /* as mapping */
-
-    (hashfunc) 0,			/* tp_hash, dict(x) */
-    (ternaryfunc) 0,			/* tp_call, x()     */
-    (reprfunc) 0,			/* tp_str,  str(x)  */
+#endif
 };
 
-/* Current items object - Definitions
+/* Window list object - Definitions
  */
 
-typedef struct
-{
-    PyObject_HEAD
-} CurrentObject;
-
-static PyTypeObject CurrentType = {
-    PyObject_HEAD_INIT(0)
-    0,
-    "current data",
-    sizeof(CurrentObject),
+static PySequenceMethods WinListAsSeq = {
+    (PyInquiry)		WinListLength,	    /* sq_length,    len(x)   */
+    (binaryfunc)	0,		    /* sq_concat,    x+y      */
+    (PyIntArgFunc)	0,		    /* sq_repeat,    x*n      */
+    (PyIntArgFunc)	WinListItem,	    /* sq_item,      x[i]     */
+    (PyIntIntArgFunc)	0,		    /* sq_slice,     x[i:j]   */
+    (PyIntObjArgProc)	0,		    /* sq_ass_item,  x[i]=v   */
+    (PyIntIntObjArgProc) 0,		    /* sq_ass_slice, x[i:j]=v */
+    (objobjproc)	0,
+#if PY_MAJOR_VERSION >= 2
+    (binaryfunc)	0,
     0,
-
-    (destructor)    0,			/* tp_dealloc,	refcount==0  */
-    (printfunc)     0,			/* tp_print,	print x      */
-    (getattrfunc)   CurrentGetattr,	/* tp_getattr,	x.attr	     */
-    (setattrfunc)   CurrentSetattr,	/* tp_setattr,	x.attr=v     */
-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
-    (reprfunc)	    0,			/* tp_repr,	`x`, print x */
-
-    0,		    /* as number */
-    0,		    /* as sequence */
-    0,		    /* as mapping */
-
-    (hashfunc) 0,			/* tp_hash, dict(x) */
-    (ternaryfunc) 0,			/* tp_call, x()     */
-    (reprfunc) 0,			/* tp_str,  str(x)  */
+#endif
 };
 
-/* Current items object - Implementation
- */
-    static PyObject *
-CurrentGetattr(PyObject *self UNUSED, char *name)
-{
-    if (strcmp(name, "buffer") == 0)
-	return (PyObject *)BufferNew(curbuf);
-    else if (strcmp(name, "window") == 0)
-	return (PyObject *)WindowNew(curwin);
-    else if (strcmp(name, "line") == 0)
-	return GetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum);
-    else if (strcmp(name, "range") == 0)
-	return RangeNew(curbuf, RangeStart, RangeEnd);
-    else if (strcmp(name,"__members__") == 0)
-	return Py_BuildValue("[ssss]", "buffer", "window", "line", "range");
-    else
-    {
-	PyErr_SetString(PyExc_AttributeError, name);
-	return NULL;
-    }
-}
-
-    static int
-CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *value)
-{
-    if (strcmp(name, "line") == 0)
-    {
-	if (SetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum, value, NULL) == FAIL)
-	    return -1;
-
-	return 0;
-    }
-    else
-    {
-	PyErr_SetString(PyExc_AttributeError, name);
-	return -1;
-    }
-}
-
 /* External interface
  */
 
     void
 python_buffer_free(buf_T *buf)
 {
-    if (buf->b_python_ref != NULL)
+    if (BUF_PYTHON_REF(buf) != NULL)
     {
-	BufferObject *bp = buf->b_python_ref;
+	BufferObject *bp = BUF_PYTHON_REF(buf);
 	bp->buf = INVALID_BUFFER_VALUE;
-	buf->b_python_ref = NULL;
+	BUF_PYTHON_REF(buf) = NULL;
     }
 }
 
@@ -1362,60 +1373,45 @@
     void
 python_window_free(win_T *win)
 {
-    if (win->w_python_ref != NULL)
+    if (WIN_PYTHON_REF(win) != NULL)
     {
-	WindowObject *wp = win->w_python_ref;
+	WindowObject *wp = WIN_PYTHON_REF(win);
 	wp->win = INVALID_WINDOW_VALUE;
-	win->w_python_ref = NULL;
+	WIN_PYTHON_REF(win) = NULL;
     }
 }
-#endif
-
-static BufListObject TheBufferList =
-{
-    PyObject_HEAD_INIT(&BufListType)
-};
-
-static WinListObject TheWindowList =
-{
-    PyObject_HEAD_INIT(&WinListType)
-};
 
-static CurrentObject TheCurrent =
+    void
+python_tabpage_free(tabpage_T *tab)
 {
-    PyObject_HEAD_INIT(&CurrentType)
-};
+    if (TAB_PYTHON_REF(tab) != NULL)
+    {
+	TabPageObject *tp = TAB_PYTHON_REF(tab);
+	tp->tab = INVALID_TABPAGE_VALUE;
+	TAB_PYTHON_REF(tab) = NULL;
+    }
+}
+#endif
 
     static int
 PythonMod_Init(void)
 {
-    PyObject *mod;
-    PyObject *dict;
     /* The special value is removed from sys.path in Python_Init(). */
-    static char *(argv[2]) = {"/must>not&exist/foo", NULL};
+    static char	*(argv[2]) = {"/must>not&exist/foo", NULL};
 
-    /* Fixups... */
-    BufferType.ob_type = &PyType_Type;
-    RangeType.ob_type = &PyType_Type;
-    WindowType.ob_type = &PyType_Type;
-    BufListType.ob_type = &PyType_Type;
-    WinListType.ob_type = &PyType_Type;
-    CurrentType.ob_type = &PyType_Type;
+    if (init_types())
+	return -1;
 
     /* Set sys.argv[] to avoid a crash in warn(). */
     PySys_SetArgv(1, argv);
 
-    mod = Py_InitModule4("vim", VimMethods, (char *)NULL, (PyObject *)NULL, PYTHON_API_VERSION);
-    dict = PyModule_GetDict(mod);
-
-    VimError = Py_BuildValue("s", "vim.error");
+    vim_module = Py_InitModule4("vim", VimMethods, (char *)NULL,
+				(PyObject *)NULL, PYTHON_API_VERSION);
 
-    PyDict_SetItemString(dict, "error", VimError);
-    PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList);
-    PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
-    PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
+    if (populate_module(vim_module))
+	return -1;
 
-    if (PyErr_Occurred())
+    if (init_sys_path())
 	return -1;
 
     return 0;
@@ -1425,194 +1421,6 @@
  * 4. Utility functions for handling the interface between Vim and Python.
  */
 
-/* Replace a range of lines in the specified buffer. The line numbers are in
- * Vim format (1-based). The range is from lo up to, but not including, hi.
- * The replacement lines are given as a Python list of string objects. The
- * list is checked for validity and correct format. Errors are returned as a
- * value of FAIL.  The return value is OK on success.
- * If OK is returned and len_change is not NULL, *len_change
- * is set to the change in the buffer length.
- */
-    static int
-SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
-{
-    /* First of all, we check the thpe of the supplied Python object.
-     * There are three cases:
-     *	  1. NULL, or None - this is a deletion.
-     *	  2. A list	   - this is a replacement.
-     *	  3. Anything else - this is an error.
-     */
-    if (list == Py_None || list == NULL)
-    {
-	PyInt	i;
-	PyInt	n = (int)(hi - lo);
-	buf_T	*savebuf = curbuf;
-
-	PyErr_Clear();
-	curbuf = buf;
-
-	if (u_savedel((linenr_T)lo, (long)n) == FAIL)
-	    PyErr_SetVim(_("cannot save undo information"));
-	else
-	{
-	    for (i = 0; i < n; ++i)
-	    {
-		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
-		{
-		    PyErr_SetVim(_("cannot delete line"));
-		    break;
-		}
-	    }
-	    if (buf == curwin->w_buffer)
-		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
-	    deleted_lines_mark((linenr_T)lo, (long)i);
-	}
-
-	curbuf = savebuf;
-
-	if (PyErr_Occurred() || VimErrorCheck())
-	    return FAIL;
-
-	if (len_change)
-	    *len_change = -n;
-
-	return OK;
-    }
-    else if (PyList_Check(list))
-    {
-	PyInt	i;
-	PyInt	new_len = PyList_Size(list);
-	PyInt	old_len = hi - lo;
-	PyInt	extra = 0;	/* lines added to text, can be negative */
-	char	**array;
-	buf_T	*savebuf;
-
-	if (new_len == 0)	/* avoid allocating zero bytes */
-	    array = NULL;
-	else
-	{
-	    array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
-	    if (array == NULL)
-	    {
-		PyErr_NoMemory();
-		return FAIL;
-	    }
-	}
-
-	for (i = 0; i < new_len; ++i)
-	{
-	    PyObject *line = PyList_GetItem(list, i);
-
-	    array[i] = StringToLine(line);
-	    if (array[i] == NULL)
-	    {
-		while (i)
-		    vim_free(array[--i]);
-		vim_free(array);
-		return FAIL;
-	    }
-	}
-
-	savebuf = curbuf;
-
-	PyErr_Clear();
-	curbuf = buf;
-
-	if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
-	    PyErr_SetVim(_("cannot save undo information"));
-
-	/* If the size of the range is reducing (ie, new_len < old_len) we
-	 * need to delete some old_len. We do this at the start, by
-	 * repeatedly deleting line "lo".
-	 */
-	if (!PyErr_Occurred())
-	{
-	    for (i = 0; i < old_len - new_len; ++i)
-		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
-		{
-		    PyErr_SetVim(_("cannot delete line"));
-		    break;
-		}
-	    extra -= i;
-	}
-
-	/* For as long as possible, replace the existing old_len with the
-	 * new old_len. This is a more efficient operation, as it requires
-	 * less memory allocation and freeing.
-	 */
-	if (!PyErr_Occurred())
-	{
-	    for (i = 0; i < old_len && i < new_len; ++i)
-		if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
-								      == FAIL)
-		{
-		    PyErr_SetVim(_("cannot replace line"));
-		    break;
-		}
-	}
-	else
-	    i = 0;
-
-	/* Now we may need to insert the remaining new old_len. If we do, we
-	 * must free the strings as we finish with them (we can't pass the
-	 * responsibility to vim in this case).
-	 */
-	if (!PyErr_Occurred())
-	{
-	    while (i < new_len)
-	    {
-		if (ml_append((linenr_T)(lo + i - 1),
-					(char_u *)array[i], 0, FALSE) == FAIL)
-		{
-		    PyErr_SetVim(_("cannot insert line"));
-		    break;
-		}
-		vim_free(array[i]);
-		++i;
-		++extra;
-	    }
-	}
-
-	/* Free any left-over old_len, as a result of an error */
-	while (i < new_len)
-	{
-	    vim_free(array[i]);
-	    ++i;
-	}
-
-	/* Free the array of old_len. All of its contents have now
-	 * been dealt with (either freed, or the responsibility passed
-	 * to vim.
-	 */
-	vim_free(array);
-
-	/* Adjust marks. Invalidate any which lie in the
-	 * changed range, and move any in the remainder of the buffer.
-	 */
-	mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
-						  (long)MAXLNUM, (long)extra);
-	changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
-
-	if (buf == curwin->w_buffer)
-	    py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
-
-	curbuf = savebuf;
-
-	if (PyErr_Occurred() || VimErrorCheck())
-	    return FAIL;
-
-	if (len_change)
-	    *len_change = new_len - old_len;
-
-	return OK;
-    }
-    else
-    {
-	PyErr_BadArgument();
-	return FAIL;
-    }
-}
-
 /* Convert a Vim line into a Python string.
  * All internal newlines are replaced by null characters.
  *
@@ -1649,6 +1457,78 @@
     return result;
 }
 
+    static PyObject *
+DictionaryGetattr(PyObject *self, char *name)
+{
+    DictionaryObject	*this = ((DictionaryObject *) (self));
+
+    if (strcmp(name, "locked") == 0)
+	return PyInt_FromLong(this->dict->dv_lock);
+    else if (strcmp(name, "scope") == 0)
+	return PyInt_FromLong(this->dict->dv_scope);
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, DictionaryAttrs);
+
+    return Py_FindMethod(DictionaryMethods, self, name);
+}
+
+static PySequenceMethods ListAsSeq = {
+    (PyInquiry)			ListLength,
+    (binaryfunc)		0,
+    (PyIntArgFunc)		0,
+    (PyIntArgFunc)		ListItem,
+    (PyIntIntArgFunc)		ListSlice,
+    (PyIntObjArgProc)		ListAssItem,
+    (PyIntIntObjArgProc)	ListAssSlice,
+    (objobjproc)		0,
+#if PY_MAJOR_VERSION >= 2
+    (binaryfunc)		ListConcatInPlace,
+    0,
+#endif
+};
+
+    static PyObject *
+ListGetattr(PyObject *self, char *name)
+{
+    if (strcmp(name, "locked") == 0)
+	return PyInt_FromLong(((ListObject *)(self))->list->lv_lock);
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, ListAttrs);
+
+    return Py_FindMethod(ListMethods, self, name);
+}
+
+    static PyObject *
+FunctionGetattr(PyObject *self, char *name)
+{
+    FunctionObject	*this = (FunctionObject *)(self);
+
+    if (strcmp(name, "name") == 0)
+	return PyString_FromString((char *)(this->name));
+    else if (strcmp(name, "__members__") == 0)
+	return ObjectDir(NULL, FunctionAttrs);
+    else
+	return Py_FindMethod(FunctionMethods, self, name);
+}
+
+    void
+do_pyeval (char_u *str, typval_T *rettv)
+{
+    DoPyCommand((char *) str,
+	    (rangeinitializer) init_range_eval,
+	    (runner) run_eval,
+	    (void *) rettv);
+    switch(rettv->v_type)
+    {
+	case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
+	case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
+	case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
+	case VAR_UNKNOWN:
+	    rettv->v_type = VAR_NUMBER;
+	    rettv->vval.v_number = 0;
+	    break;
+    }
+}
 
 /* Don't generate a prototype for the next function, it generates an error on
  * newer Python versions. */
@@ -1661,20 +1541,8 @@
 }
 #endif /* Python 1.4 */
 
-    static void
-init_structs(void)
+    void
+set_ref_in_python (int copyID)
 {
-    vim_memset(&OutputType, 0, sizeof(OutputType));
-    OutputType.tp_name = "message";
-    OutputType.tp_basicsize = sizeof(OutputObject);
-    OutputType.tp_getattr = OutputGetattr;
-    OutputType.tp_setattr = OutputSetattr;
-
-    vim_memset(&RangeType, 0, sizeof(RangeType));
-    RangeType.tp_name = "range";
-    RangeType.tp_basicsize = sizeof(RangeObject);
-    RangeType.tp_dealloc = RangeDestructor;
-    RangeType.tp_getattr = RangeGetattr;
-    RangeType.tp_repr = RangeRepr;
-    RangeType.tp_as_sequence = &RangeAsSeq;
+    set_ref_in_py(copyID);
 }
diff -Naur vim73.orig/src/if_python3.c vim73/src/if_python3.c
--- vim73.orig/src/if_python3.c	2010-08-13 13:59:40.000000000 +0000
+++ vim73/src/if_python3.c	2013-08-04 19:09:10.383944541 +0000
@@ -22,8 +22,13 @@
  * Adaptations to support both python3.x and python2.x
  */
 
-// uncomment this if used with the debug version of python
-// #define Py_DEBUG
+/* uncomment this if used with the debug version of python */
+/* #define Py_DEBUG */
+/* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting
+ */
+/* uncomment this if used with the debug version of python, but without its
+ * allocator */
+/* #define Py_DEBUG_NO_PYMALLOC */
 
 #include "vim.h"
 
@@ -42,8 +47,6 @@
 # undef _DEBUG
 #endif
 
-#define PY_SSIZE_T_CLEAN
-
 #ifdef F_BLANK
 # undef F_BLANK
 #endif
@@ -58,7 +61,10 @@
 # undef _XOPEN_SOURCE	/* pyconfig.h defines it as well. */
 #endif
 
+#define PY_SSIZE_T_CLEAN
+
 #include <Python.h>
+
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
 # include "macglue.h"
 # include <CodeFragments.h>
@@ -66,21 +72,37 @@
 #undef main /* Defined in python.h - aargh */
 #undef HAVE_FCNTL_H /* Clash with os_win32.h */
 
-static void init_structs(void);
+/* The "surrogateescape" error handler is new in Python 3.1 */
+#if PY_VERSION_HEX >= 0x030100f0
+# define CODEC_ERROR_HANDLER "surrogateescape"
+#else
+# define CODEC_ERROR_HANDLER NULL
+#endif
+
+/* Python 3 does not support CObjects, always use Capsules */
+#define PY_USE_CAPSULE
 
 #define PyInt Py_ssize_t
-#define PyString_Check(obj) PyUnicode_Check(obj)
-#define PyString_AsString(obj) _PyUnicode_AsString(obj)
-#define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
+#ifndef PyString_Check
+# define PyString_Check(obj) PyUnicode_Check(obj)
+#endif
 #define PyString_FromString(repr) PyUnicode_FromString(repr)
+#define PyString_FromFormat PyUnicode_FromFormat
+#ifndef PyInt_Check
+# define PyInt_Check(obj) PyLong_Check(obj)
+#endif
+#define PyInt_FromLong(i) PyLong_FromLong(i)
+#define PyInt_AsLong(obj) PyLong_AsLong(obj)
+#define Py_ssize_t_fmt "n"
+#define Py_bytes_fmt "y"
 
-#if defined(DYNAMIC_PYTHON3)
+#if defined(DYNAMIC_PYTHON3) || defined(PROTO)
 
 # ifndef WIN3264
 #  include <dlfcn.h>
 #  define FARPROC void*
 #  define HINSTANCE void*
-#  ifdef PY_NO_RTLD_GLOBAL
+#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
 #   define load_dll(n) dlopen((n), RTLD_LAZY)
 #  else
 #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
@@ -88,7 +110,7 @@
 #  define close_dll dlclose
 #  define symbol_from_dll dlsym
 # else
-#  define load_dll LoadLibrary
+#  define load_dll vimLoadLib
 #  define close_dll FreeLibrary
 #  define symbol_from_dll GetProcAddress
 # endif
@@ -99,13 +121,19 @@
 # define PyArg_Parse py3_PyArg_Parse
 # undef PyArg_ParseTuple
 # define PyArg_ParseTuple py3_PyArg_ParseTuple
+# define PyMem_Free py3_PyMem_Free
+# define PyMem_Malloc py3_PyMem_Malloc
 # define PyDict_SetItemString py3_PyDict_SetItemString
 # define PyErr_BadArgument py3_PyErr_BadArgument
 # define PyErr_Clear py3_PyErr_Clear
+# define PyErr_Format py3_PyErr_Format
+# define PyErr_PrintEx py3_PyErr_PrintEx
 # define PyErr_NoMemory py3_PyErr_NoMemory
 # define PyErr_Occurred py3_PyErr_Occurred
 # define PyErr_SetNone py3_PyErr_SetNone
 # define PyErr_SetString py3_PyErr_SetString
+# define PyErr_SetObject py3_PyErr_SetObject
+# define PyErr_ExceptionMatches py3_PyErr_ExceptionMatches
 # define PyEval_InitThreads py3_PyEval_InitThreads
 # define PyEval_RestoreThread py3_PyEval_RestoreThread
 # define PyEval_SaveThread py3_PyEval_SaveThread
@@ -115,51 +143,125 @@
 # define PyLong_FromLong py3_PyLong_FromLong
 # define PyList_GetItem py3_PyList_GetItem
 # define PyList_Append py3_PyList_Append
+# define PyList_Insert py3_PyList_Insert
 # define PyList_New py3_PyList_New
 # define PyList_SetItem py3_PyList_SetItem
 # define PyList_Size py3_PyList_Size
+# define PySequence_Check py3_PySequence_Check
+# define PySequence_Size py3_PySequence_Size
+# define PySequence_GetItem py3_PySequence_GetItem
+# define PySequence_Fast py3_PySequence_Fast
+# define PyTuple_Size py3_PyTuple_Size
+# define PyTuple_GetItem py3_PyTuple_GetItem
 # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx
 # define PyImport_ImportModule py3_PyImport_ImportModule
 # define PyObject_Init py3__PyObject_Init
 # define PyDict_New py3_PyDict_New
 # define PyDict_GetItemString py3_PyDict_GetItemString
+# define PyDict_Next py3_PyDict_Next
+# define PyMapping_Check py3_PyMapping_Check
+# ifndef PyMapping_Keys
+#  define PyMapping_Keys py3_PyMapping_Keys
+# endif
+# define PyIter_Next py3_PyIter_Next
+# define PyObject_GetIter py3_PyObject_GetIter
+# define PyObject_Repr py3_PyObject_Repr
+# define PyObject_GetItem py3_PyObject_GetItem
+# define PyObject_IsTrue py3_PyObject_IsTrue
 # define PyModule_GetDict py3_PyModule_GetDict
 #undef PyRun_SimpleString
 # define PyRun_SimpleString py3_PyRun_SimpleString
+#undef PyRun_String
+# define PyRun_String py3_PyRun_String
+# define PyObject_GetAttrString py3_PyObject_GetAttrString
+# define PyObject_HasAttrString py3_PyObject_HasAttrString
+# define PyObject_SetAttrString py3_PyObject_SetAttrString
+# define PyObject_CallFunctionObjArgs py3_PyObject_CallFunctionObjArgs
+# define _PyObject_CallFunction_SizeT py3__PyObject_CallFunction_SizeT
+# define PyObject_Call py3_PyObject_Call
+# define PyEval_GetLocals py3_PyEval_GetLocals
+# define PyEval_GetGlobals py3_PyEval_GetGlobals
 # define PySys_SetObject py3_PySys_SetObject
+# define PySys_GetObject py3_PySys_GetObject
 # define PySys_SetArgv py3_PySys_SetArgv
-# define PyType_Type (*py3_PyType_Type)
 # define PyType_Ready py3_PyType_Ready
 #undef Py_BuildValue
 # define Py_BuildValue py3_Py_BuildValue
+# define Py_SetPythonHome py3_Py_SetPythonHome
 # define Py_Initialize py3_Py_Initialize
 # define Py_Finalize py3_Py_Finalize
 # define Py_IsInitialized py3_Py_IsInitialized
 # define _Py_NoneStruct (*py3__Py_NoneStruct)
+# define _Py_FalseStruct (*py3__Py_FalseStruct)
+# define _Py_TrueStruct (*py3__Py_TrueStruct)
+# define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented)
 # define PyModule_AddObject py3_PyModule_AddObject
 # define PyImport_AppendInittab py3_PyImport_AppendInittab
-# define _PyUnicode_AsString py3__PyUnicode_AsString
+# define PyImport_AddModule py3_PyImport_AddModule
+# if PY_VERSION_HEX >= 0x030300f0
+#  undef _PyUnicode_AsString
+#  define _PyUnicode_AsString py3_PyUnicode_AsUTF8
+# else
+#  define _PyUnicode_AsString py3__PyUnicode_AsString
+# endif
+# undef PyUnicode_AsEncodedString
+# define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
+# undef PyBytes_AsString
+# define PyBytes_AsString py3_PyBytes_AsString
+# ifndef PyBytes_AsStringAndSize
+#  define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize
+# endif
+# undef PyBytes_FromString
+# define PyBytes_FromString py3_PyBytes_FromString
+# define PyFloat_FromDouble py3_PyFloat_FromDouble
+# define PyFloat_AsDouble py3_PyFloat_AsDouble
 # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
+# define PyType_Type (*py3_PyType_Type)
 # define PySlice_Type (*py3_PySlice_Type)
+# define PyFloat_Type (*py3_PyFloat_Type)
+# define PyNumber_Check (*py3_PyNumber_Check)
+# define PyNumber_Long (*py3_PyNumber_Long)
+# define PyBool_Type (*py3_PyBool_Type)
+# define PyErr_NewException py3_PyErr_NewException
 # ifdef Py_DEBUG
 #  define _Py_NegativeRefcount py3__Py_NegativeRefcount
 #  define _Py_RefTotal (*py3__Py_RefTotal)
 #  define _Py_Dealloc py3__Py_Dealloc
+#  define PyModule_Create2TraceRefs py3_PyModule_Create2TraceRefs
+# else
+#  define PyModule_Create2 py3_PyModule_Create2
+# endif
+# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
 #  define _PyObject_DebugMalloc py3__PyObject_DebugMalloc
 #  define _PyObject_DebugFree py3__PyObject_DebugFree
 # else
 #  define PyObject_Malloc py3_PyObject_Malloc
 #  define PyObject_Free py3_PyObject_Free
 # endif
+# define _PyObject_GC_New py3__PyObject_GC_New
+# define PyObject_GC_Del py3_PyObject_GC_Del
+# define PyObject_GC_UnTrack py3_PyObject_GC_UnTrack
 # define PyType_GenericAlloc py3_PyType_GenericAlloc
 # define PyType_GenericNew py3_PyType_GenericNew
-# define PyModule_Create2 py3_PyModule_Create2
 # undef PyUnicode_FromString
 # define PyUnicode_FromString py3_PyUnicode_FromString
-# undef PyUnicode_FromStringAndSize
-# define PyUnicode_FromStringAndSize py3_PyUnicode_FromStringAndSize
+# ifndef PyUnicode_FromFormat
+#  define PyUnicode_FromFormat py3_PyUnicode_FromFormat
+# else
+#  define Py_UNICODE_USE_UCS_FUNCTIONS
+#  ifdef Py_UNICODE_WIDE
+#   define PyUnicodeUCS4_FromFormat py3_PyUnicodeUCS4_FromFormat
+#  else
+#   define PyUnicodeUCS2_FromFormat py3_PyUnicodeUCS2_FromFormat
+#  endif
+# endif
+# undef PyUnicode_Decode
+# define PyUnicode_Decode py3_PyUnicode_Decode
+# define PyType_IsSubtype py3_PyType_IsSubtype
+# define PyCapsule_New py3_PyCapsule_New
+# define PyCapsule_GetPointer py3_PyCapsule_GetPointer
 
-# ifdef Py_DEBUG
+# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
 #  undef PyObject_NEW
 #  define PyObject_NEW(type, typeobj) \
 ( (type *) PyObject_Init( \
@@ -170,34 +272,72 @@
  * Pointers for dynamic link
  */
 static int (*py3_PySys_SetArgv)(int, wchar_t **);
+static void (*py3_Py_SetPythonHome)(wchar_t *home);
 static void (*py3_Py_Initialize)(void);
 static PyObject* (*py3_PyList_New)(Py_ssize_t size);
 static PyGILState_STATE (*py3_PyGILState_Ensure)(void);
 static void (*py3_PyGILState_Release)(PyGILState_STATE);
 static int (*py3_PySys_SetObject)(char *, PyObject *);
-static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+static PyObject* (*py3_PySys_GetObject)(char *);
+static int (*py3_PyList_Append)(PyObject *, PyObject *);
+static int (*py3_PyList_Insert)(PyObject *, int, PyObject *);
 static Py_ssize_t (*py3_PyList_Size)(PyObject *);
-static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
+static int (*py3_PySequence_Check)(PyObject *);
+static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
+static PyObject* (*py3_PySequence_GetItem)(PyObject *, Py_ssize_t);
+static PyObject* (*py3_PySequence_Fast)(PyObject *, const char *);
+static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
+static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
+static int (*py3_PyMapping_Check)(PyObject *);
+static PyObject* (*py3_PyMapping_Keys)(PyObject *);
+static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
 		     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
 static PyObject* (*py3_PyErr_NoMemory)(void);
 static void (*py3_Py_Finalize)(void);
 static void (*py3_PyErr_SetString)(PyObject *, const char *);
+static void (*py3_PyErr_SetObject)(PyObject *, PyObject *);
+static int (*py3_PyErr_ExceptionMatches)(PyObject *);
 static int (*py3_PyRun_SimpleString)(char *);
+static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
+static PyObject* (*py3_PyObject_GetAttrString)(PyObject *, const char *);
+static int (*py3_PyObject_HasAttrString)(PyObject *, const char *);
+static PyObject* (*py3_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
+static PyObject* (*py3_PyObject_CallFunctionObjArgs)(PyObject *, ...);
+static PyObject* (*py3__PyObject_CallFunction_SizeT)(PyObject *, char *, ...);
+static PyObject* (*py3_PyObject_Call)(PyObject *, PyObject *, PyObject *);
+static PyObject* (*py3_PyEval_GetGlobals)();
+static PyObject* (*py3_PyEval_GetLocals)();
 static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
 static PyObject* (*py3_PyImport_ImportModule)(const char *);
+static PyObject* (*py3_PyImport_AddModule)(const char *);
 static int (*py3_PyErr_BadArgument)(void);
-static PyTypeObject* py3_PyType_Type;
 static PyObject* (*py3_PyErr_Occurred)(void);
 static PyObject* (*py3_PyModule_GetDict)(PyObject *);
 static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *);
 static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *);
+static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
 static PyObject* (*py3_PyLong_FromLong)(long);
 static PyObject* (*py3_PyDict_New)(void);
+static PyObject* (*py3_PyIter_Next)(PyObject *);
+static PyObject* (*py3_PyObject_GetIter)(PyObject *);
+static PyObject* (*py3_PyObject_Repr)(PyObject *);
+static PyObject* (*py3_PyObject_GetItem)(PyObject *, PyObject *);
+static int (*py3_PyObject_IsTrue)(PyObject *);
 static PyObject* (*py3_Py_BuildValue)(char *, ...);
 static int (*py3_PyType_Ready)(PyTypeObject *type);
 static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
 static PyObject* (*py3_PyUnicode_FromString)(const char *u);
-static PyObject* (*py3_PyUnicode_FromStringAndSize)(const char *u, Py_ssize_t size);
+# ifndef Py_UNICODE_USE_UCS_FUNCTIONS
+static PyObject* (*py3_PyUnicode_FromFormat)(const char *u, ...);
+# else
+#  ifdef Py_UNICODE_WIDE
+static PyObject* (*py3_PyUnicodeUCS4_FromFormat)(const char *u, ...);
+#  else
+static PyObject* (*py3_PyUnicodeUCS2_FromFormat)(const char *u, ...);
+#  endif
+# endif
+static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size,
+	const char *encoding, const char *errors);
 static long (*py3_PyLong_AsLong)(PyObject *);
 static void (*py3_PyErr_SetNone)(PyObject *);
 static void (*py3_PyEval_InitThreads)(void);
@@ -205,43 +345,86 @@
 static PyThreadState*(*py3_PyEval_SaveThread)(void);
 static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
 static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
+static int (*py3_PyMem_Free)(void *);
+static void* (*py3_PyMem_Malloc)(size_t);
 static int (*py3_Py_IsInitialized)(void);
 static void (*py3_PyErr_Clear)(void);
+static PyObject* (*py3_PyErr_Format)(PyObject *, const char *, ...);
+static void (*py3_PyErr_PrintEx)(int);
 static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
+static iternextfunc py3__PyObject_NextNotImplemented;
 static PyObject* py3__Py_NoneStruct;
+static PyObject* py3__Py_FalseStruct;
+static PyObject* py3__Py_TrueStruct;
 static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
 static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
+# if PY_VERSION_HEX >= 0x030300f0
+static char* (*py3_PyUnicode_AsUTF8)(PyObject *unicode);
+# else
 static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
+# endif
+static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
+static char* (*py3_PyBytes_AsString)(PyObject *bytes);
+static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, Py_ssize_t *length);
+static PyObject* (*py3_PyBytes_FromString)(char *str);
+static PyObject* (*py3_PyFloat_FromDouble)(double num);
+static double (*py3_PyFloat_AsDouble)(PyObject *);
 static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
-static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
 static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
 static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
+static PyTypeObject* py3_PyType_Type;
 static PyTypeObject* py3_PySlice_Type;
+static PyTypeObject* py3_PyFloat_Type;
+static PyTypeObject* py3_PyBool_Type;
+static int (*py3_PyNumber_Check)(PyObject *);
+static PyObject* (*py3_PyNumber_Long)(PyObject *);
+static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
+static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
+static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
 # ifdef Py_DEBUG
-    static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
-    static Py_ssize_t* py3__Py_RefTotal;
-    static void (*py3__Py_Dealloc)(PyObject *obj);
-    static void (*py3__PyObject_DebugFree)(void*);
-    static void* (*py3__PyObject_DebugMalloc)(size_t);
+static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
+static Py_ssize_t* py3__Py_RefTotal;
+static void (*py3__Py_Dealloc)(PyObject *obj);
+static PyObject* (*py3_PyModule_Create2TraceRefs)(struct PyModuleDef* module, int module_api_version);
+# else
+static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
+# endif
+# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+static void (*py3__PyObject_DebugFree)(void*);
+static void* (*py3__PyObject_DebugMalloc)(size_t);
 # else
-    static void (*py3_PyObject_Free)(void*);
-    static void* (*py3_PyObject_Malloc)(size_t);
+static void (*py3_PyObject_Free)(void*);
+static void* (*py3_PyObject_Malloc)(size_t);
 # endif
+static PyObject*(*py3__PyObject_GC_New)(PyTypeObject *);
+static void(*py3_PyObject_GC_Del)(void *);
+static void(*py3_PyObject_GC_UnTrack)(void *);
+static int (*py3_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
 
 static HINSTANCE hinstPy3 = 0; /* Instance of python.dll */
 
 /* Imported exception objects */
 static PyObject *p3imp_PyExc_AttributeError;
 static PyObject *p3imp_PyExc_IndexError;
+static PyObject *p3imp_PyExc_KeyError;
 static PyObject *p3imp_PyExc_KeyboardInterrupt;
 static PyObject *p3imp_PyExc_TypeError;
 static PyObject *p3imp_PyExc_ValueError;
+static PyObject *p3imp_PyExc_SystemExit;
+static PyObject *p3imp_PyExc_RuntimeError;
+static PyObject *p3imp_PyExc_ImportError;
+static PyObject *p3imp_PyExc_OverflowError;
 
 # define PyExc_AttributeError p3imp_PyExc_AttributeError
 # define PyExc_IndexError p3imp_PyExc_IndexError
+# define PyExc_KeyError p3imp_PyExc_KeyError
 # define PyExc_KeyboardInterrupt p3imp_PyExc_KeyboardInterrupt
 # define PyExc_TypeError p3imp_PyExc_TypeError
 # define PyExc_ValueError p3imp_PyExc_ValueError
+# define PyExc_SystemExit p3imp_PyExc_SystemExit
+# define PyExc_RuntimeError p3imp_PyExc_RuntimeError
+# define PyExc_ImportError p3imp_PyExc_ImportError
+# define PyExc_OverflowError p3imp_PyExc_OverflowError
 
 /*
  * Table of name to function pointer of python.
@@ -254,30 +437,60 @@
 } py3_funcname_table[] =
 {
     {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv},
+    {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
     {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
-    {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue},
+    {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
+    {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
     {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
     {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
     {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
     {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject},
+    {"PySys_GetObject", (PYTHON_PROC*)&py3_PySys_GetObject},
     {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append},
+    {"PyList_Insert", (PYTHON_PROC*)&py3_PyList_Insert},
     {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size},
+    {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check},
+    {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size},
+    {"PySequence_GetItem", (PYTHON_PROC*)&py3_PySequence_GetItem},
+    {"PySequence_Fast", (PYTHON_PROC*)&py3_PySequence_Fast},
+    {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size},
+    {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem},
     {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx},
     {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
     {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
     {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
+    {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject},
+    {"PyErr_ExceptionMatches", (PYTHON_PROC*)&py3_PyErr_ExceptionMatches},
     {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
+    {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
+    {"PyObject_GetAttrString", (PYTHON_PROC*)&py3_PyObject_GetAttrString},
+    {"PyObject_HasAttrString", (PYTHON_PROC*)&py3_PyObject_HasAttrString},
+    {"PyObject_SetAttrString", (PYTHON_PROC*)&py3_PyObject_SetAttrString},
+    {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&py3_PyObject_CallFunctionObjArgs},
+    {"_PyObject_CallFunction_SizeT", (PYTHON_PROC*)&py3__PyObject_CallFunction_SizeT},
+    {"PyObject_Call", (PYTHON_PROC*)&py3_PyObject_Call},
+    {"PyEval_GetGlobals", (PYTHON_PROC*)&py3_PyEval_GetGlobals},
+    {"PyEval_GetLocals", (PYTHON_PROC*)&py3_PyEval_GetLocals},
     {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem},
     {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule},
+    {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule},
     {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument},
-    {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
     {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred},
     {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict},
     {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem},
     {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString},
+    {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
+    {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
+    {"PyMapping_Keys", (PYTHON_PROC*)&py3_PyMapping_Keys},
+    {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
+    {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
+    {"PyObject_Repr", (PYTHON_PROC*)&py3_PyObject_Repr},
+    {"PyObject_GetItem", (PYTHON_PROC*)&py3_PyObject_GetItem},
+    {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue},
     {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
     {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
-    {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
     {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
     {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString},
     {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong},
@@ -285,30 +498,68 @@
     {"PyEval_InitThreads", (PYTHON_PROC*)&py3_PyEval_InitThreads},
     {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread},
     {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
-    {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse},
-    {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+    {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&py3_PyArg_Parse},
     {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
+    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented},
     {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
+    {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct},
+    {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct},
     {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
+    {"PyErr_Format", (PYTHON_PROC*)&py3_PyErr_Format},
+    {"PyErr_PrintEx", (PYTHON_PROC*)&py3_PyErr_PrintEx},
     {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
     {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
     {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
+# if PY_VERSION_HEX >= 0x030300f0
+    {"PyUnicode_AsUTF8", (PYTHON_PROC*)&py3_PyUnicode_AsUTF8},
+# else
     {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
+# endif
+# ifndef Py_UNICODE_USE_UCS_FUNCTIONS
+    {"PyUnicode_FromFormat", (PYTHON_PROC*)&py3_PyUnicode_FromFormat},
+# else
+#  ifdef Py_UNICODE_WIDE
+    {"PyUnicodeUCS4_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS4_FromFormat},
+#  else
+    {"PyUnicodeUCS2_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS2_FromFormat},
+#  endif
+# endif
+    {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
+    {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize},
+    {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString},
+    {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
+    {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble},
     {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
-    {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
     {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
     {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
+    {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
     {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
+    {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
+    {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type},
+    {"PyNumber_Check", (PYTHON_PROC*)&py3_PyNumber_Check},
+    {"PyNumber_Long", (PYTHON_PROC*)&py3_PyNumber_Long},
+    {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
 # ifdef Py_DEBUG
     {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
     {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
     {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc},
+    {"PyModule_Create2TraceRefs", (PYTHON_PROC*)&py3_PyModule_Create2TraceRefs},
+# else
+    {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
+# endif
+# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
     {"_PyObject_DebugFree", (PYTHON_PROC*)&py3__PyObject_DebugFree},
     {"_PyObject_DebugMalloc", (PYTHON_PROC*)&py3__PyObject_DebugMalloc},
 # else
     {"PyObject_Malloc", (PYTHON_PROC*)&py3_PyObject_Malloc},
     {"PyObject_Free", (PYTHON_PROC*)&py3_PyObject_Free},
 # endif
+    {"_PyObject_GC_New", (PYTHON_PROC*)&py3__PyObject_GC_New},
+    {"PyObject_GC_Del", (PYTHON_PROC*)&py3_PyObject_GC_Del},
+    {"PyObject_GC_UnTrack", (PYTHON_PROC*)&py3_PyObject_GC_UnTrack},
+    {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype},
+    {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New},
+    {"PyCapsule_GetPointer", (PYTHON_PROC*)&py3_PyCapsule_GetPointer},
     {"", NULL},
 };
 
@@ -334,15 +585,16 @@
 py3_runtime_link_init(char *libname, int verbose)
 {
     int i;
-    void *ucs_from_string, *ucs_from_string_and_size;
+    void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string;
 
-# if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON)
+# if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
     /* Can't have Python and Python3 loaded at the same time.
      * It cause a crash, because RTLD_GLOBAL is needed for
      * standard C extension libraries of one or both python versions. */
     if (python_loaded())
     {
-	EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
+	if (verbose)
+	    EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
 	return FAIL;
     }
 # endif
@@ -373,20 +625,32 @@
 
     /* Load unicode functions separately as only the ucs2 or the ucs4 functions
      * will be present in the library. */
+# if PY_VERSION_HEX >= 0x030300f0
+    ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicode_FromString");
+    ucs_decode = symbol_from_dll(hinstPy3, "PyUnicode_Decode");
+    ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+	    "PyUnicode_AsEncodedString");
+# else
     ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
-    ucs_from_string_and_size = symbol_from_dll(hinstPy3,
-	    "PyUnicodeUCS2_FromStringAndSize");
-    if (!ucs_from_string || !ucs_from_string_and_size)
+    ucs_decode = symbol_from_dll(hinstPy3,
+	    "PyUnicodeUCS2_Decode");
+    ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+	    "PyUnicodeUCS2_AsEncodedString");
+    if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string)
     {
 	ucs_from_string = symbol_from_dll(hinstPy3,
 		"PyUnicodeUCS4_FromString");
-	ucs_from_string_and_size = symbol_from_dll(hinstPy3,
-		"PyUnicodeUCS4_FromStringAndSize");
+	ucs_decode = symbol_from_dll(hinstPy3,
+		"PyUnicodeUCS4_Decode");
+	ucs_as_encoded_string = symbol_from_dll(hinstPy3,
+		"PyUnicodeUCS4_AsEncodedString");
     }
-    if (ucs_from_string && ucs_from_string_and_size)
+# endif
+    if (ucs_from_string && ucs_decode && ucs_as_encoded_string)
     {
 	py3_PyUnicode_FromString = ucs_from_string;
-	py3_PyUnicode_FromStringAndSize = ucs_from_string_and_size;
+	py3_PyUnicode_Decode = ucs_decode;
+	py3_PyUnicode_AsEncodedString = ucs_as_encoded_string;
     }
     else
     {
@@ -422,33 +686,42 @@
     PyObject *exdict = PyModule_GetDict(exmod);
     p3imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError");
     p3imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError");
+    p3imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError");
     p3imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
     p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
     p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
+    p3imp_PyExc_SystemExit = PyDict_GetItemString(exdict, "SystemExit");
+    p3imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
+    p3imp_PyExc_ImportError = PyDict_GetItemString(exdict, "ImportError");
+    p3imp_PyExc_OverflowError = PyDict_GetItemString(exdict, "OverflowError");
     Py_XINCREF(p3imp_PyExc_AttributeError);
     Py_XINCREF(p3imp_PyExc_IndexError);
+    Py_XINCREF(p3imp_PyExc_KeyError);
     Py_XINCREF(p3imp_PyExc_KeyboardInterrupt);
     Py_XINCREF(p3imp_PyExc_TypeError);
     Py_XINCREF(p3imp_PyExc_ValueError);
+    Py_XINCREF(p3imp_PyExc_SystemExit);
+    Py_XINCREF(p3imp_PyExc_RuntimeError);
+    Py_XINCREF(p3imp_PyExc_ImportError);
+    Py_XINCREF(p3imp_PyExc_OverflowError);
     Py_XDECREF(exmod);
 }
 #endif /* DYNAMIC_PYTHON3 */
 
-static PyObject *BufferNew (buf_T *);
-static PyObject *WindowNew(win_T *);
-static PyObject *LineToString(const char *);
+static int py3initialised = 0;
 
-static PyTypeObject RangeType;
+#define PYINITIALISED py3initialised
 
-/*
- * Include the code shared with if_python.c
- */
-#include "if_py_both.h"
+#define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self)
+
+#define WIN_PYTHON_REF(win) win->w_python3_ref
+#define BUF_PYTHON_REF(buf) buf->b_python3_ref
+#define TAB_PYTHON_REF(tab) tab->tp_python3_ref
 
     static void
 call_PyObject_Free(void *p)
 {
-#ifdef Py_DEBUG
+#if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
     _PyObject_DebugFree(p);
 #else
     PyObject_Free(p);
@@ -467,24 +740,49 @@
     return PyType_GenericAlloc(type,nitems);
 }
 
-/******************************************************
- * Internal function prototypes.
+static PyObject *OutputGetattro(PyObject *, PyObject *);
+static int OutputSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *BufferGetattro(PyObject *, PyObject *);
+static int BufferSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *TabPageGetattro(PyObject *, PyObject *);
+static PyObject *WindowGetattro(PyObject *, PyObject *);
+static int WindowSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *RangeGetattro(PyObject *, PyObject *);
+static PyObject *CurrentGetattro(PyObject *, PyObject *);
+static int CurrentSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *DictionaryGetattro(PyObject *, PyObject *);
+static int DictionarySetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *ListGetattro(PyObject *, PyObject *);
+static int ListSetattro(PyObject *, PyObject *, PyObject *);
+static PyObject *FunctionGetattro(PyObject *, PyObject *);
+
+static PyObject *VimPathHook(PyObject *, PyObject *);
+
+static struct PyModuleDef vimmodule;
+
+#define PY_CAN_RECURSE
+
+/*
+ * Include the code shared with if_python.c
  */
+#include "if_py_both.h"
 
-static Py_ssize_t RangeStart;
-static Py_ssize_t RangeEnd;
+#define GET_ATTR_STRING(name, nameobj) \
+    char	*name = ""; \
+    if (PyUnicode_Check(nameobj)) \
+	name = _PyUnicode_AsString(nameobj)
 
-static int PythonIO_Init(void);
-static void PythonIO_Fini(void);
-PyMODINIT_FUNC Py3Init_vim(void);
+#define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
 
 /******************************************************
- * 1. Python interpreter main program.
+ * Internal function prototypes.
  */
 
-static int py3initialised = 0;
+static PyObject *Py3Init_vim(void);
 
-static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
+/******************************************************
+ * 1. Python interpreter main program.
+ */
 
     void
 python3_end()
@@ -503,9 +801,8 @@
     if (Py_IsInitialized())
     {
 	// acquire lock before finalizing
-	pygilstate = PyGILState_Ensure();
+	PyGILState_Ensure();
 
-	PythonIO_Fini();
 	Py_Finalize();
     }
 
@@ -539,37 +836,49 @@
 
 	init_structs();
 
-	/* initialise threads */
-	PyEval_InitThreads();
+
+#ifdef PYTHON3_HOME
+	Py_SetPythonHome(PYTHON3_HOME);
+#endif
+
+	PyImport_AppendInittab("vim", Py3Init_vim);
 
 #if !defined(MACOS) || defined(MACOS_X_UNIX)
 	Py_Initialize();
 #else
 	PyMac_Initialize();
 #endif
-
+	/* Initialise threads, and below save the state using
+	 * PyEval_SaveThread.  Without the call to PyEval_SaveThread, thread
+	 * specific state (such as the system trace hook), will be lost
+	 * between invocations of Python code. */
+	PyEval_InitThreads();
 #ifdef DYNAMIC_PYTHON3
 	get_py3_exceptions();
 #endif
 
-	if (PythonIO_Init())
+	if (PythonIO_Init_io())
 	    goto fail;
 
-	PyImport_AppendInittab("vim", Py3Init_vim);
+	globals = PyModule_GetDict(PyImport_AddModule("__main__"));
 
 	/* Remove the element from sys.path that was added because of our
 	 * argv[0] value in Py3Init_vim().  Previously we used an empty
-	 * string, but dependinding on the OS we then get an empty entry or
-	 * the current directory in sys.path. */
-	PyRun_SimpleString("import sys; sys.path = list(filter(lambda x: x != '/must>not&exist', sys.path))");
-
-	// lock is created and acquired in PyEval_InitThreads() and thread
-	// state is created in Py_Initialize()
-	// there _PyGILState_NoteThreadState() also sets gilcounter to 1
-	// (python must have threads enabled!)
-	// so the following does both: unlock GIL and save thread state in TLS
-	// without deleting thread state
-	PyGILState_Release(pygilstate);
+	 * string, but depending on the OS we then get an empty entry or
+	 * the current directory in sys.path.
+	 * Only after vim has been imported, the element does exist in
+	 * sys.path.
+	 */
+	PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
+
+	/* lock is created and acquired in PyEval_InitThreads() and thread
+	 * state is created in Py_Initialize()
+	 * there _PyGILState_NoteThreadState() also sets gilcounter to 1
+	 * (python must have threads enabled!)
+	 * so the following does both: unlock GIL and save thread state in TLS
+	 * without deleting thread state
+	 */
+	PyEval_SaveThread();
 
 	py3initialised = 1;
     }
@@ -579,7 +888,7 @@
 fail:
     /* We call PythonIO_Flush() here to print any Python errors.
      * This is OK, as it is possible to call this function even
-     * if PythonIO_Init() has not completed successfully (it will
+     * if PythonIO_Init_io() has not completed successfully (it will
      * not do anything in this case).
      */
     PythonIO_Flush();
@@ -590,7 +899,7 @@
  * External interface
  */
     static void
-DoPy3Command(exarg_T *eap, const char *cmd)
+DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
 {
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
     GrafPtr		oldPort;
@@ -598,6 +907,9 @@
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
     char		*saved_locale;
 #endif
+    PyObject		*cmdstr;
+    PyObject		*cmdbytes;
+    PyGILState_STATE	pygilstate;
 
 #if defined(MACOS) && !defined(MACOS_X_UNIX)
     GetPort(&oldPort);
@@ -608,8 +920,8 @@
     if (Python3_Init())
 	goto theend;
 
-    RangeStart = eap->line1;
-    RangeEnd = eap->line2;
+    init_range(arg);
+
     Python_Release_Vim();	    /* leave vim */
 
 #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
@@ -627,7 +939,15 @@
 
     pygilstate = PyGILState_Ensure();
 
-    PyRun_SimpleString((char *)(cmd));
+    /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
+     * SyntaxError (unicode error). */
+    cmdstr = PyUnicode_Decode(cmd, strlen(cmd),
+					(char *)ENC_OPT, CODEC_ERROR_HANDLER);
+    cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
+    Py_XDECREF(cmdstr);
+
+    run(PyBytes_AsString(cmdbytes), arg, &pygilstate);
+    Py_XDECREF(cmdbytes);
 
     PyGILState_Release(pygilstate);
 
@@ -660,10 +980,10 @@
     script = script_get(eap, eap->arg);
     if (!eap->skip)
     {
-	if (script == NULL)
-	    DoPy3Command(eap, (char *)eap->arg);
-	else
-	    DoPy3Command(eap, (char *)script);
+	DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script,
+		(rangeinitializer) init_range_cmd,
+		(runner) run_cmd,
+		(void *) eap);
     }
     vim_free(script);
 }
@@ -686,7 +1006,10 @@
      * different options under Windows, meaning that stdio pointers aren't
      * compatible between the two. Yuk.
      *
-     * construct: exec(compile(open('a_filename').read(), 'a_filename', 'exec'))
+     * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec'))
+     *
+     * Using bytes so that Python can detect the source encoding as it normally
+     * does. The doc does not say "compile" accept bytes, though.
      *
      * We need to escape any backslashes or single quotes in the file name, so that
      * Python won't mangle the file name.
@@ -709,8 +1032,8 @@
 	    return;
 	if (i==0)
 	{
-	    strcpy(p,"').read(),'");
-	    p += 11;
+	    strcpy(p,"','rb').read(),'");
+	    p += 16;
 	}
 	else
 	{
@@ -721,7 +1044,19 @@
 
 
     /* Execute the file */
-    DoPy3Command(eap, buffer);
+    DoPyCommand(buffer,
+	    (rangeinitializer) init_range_cmd,
+	    (runner) run_cmd,
+	    (void *) eap);
+}
+
+    void
+ex_py3do(exarg_T *eap)
+{
+    DoPyCommand((char *)eap->arg,
+	    (rangeinitializer)init_range_cmd,
+	    (runner)run_do,
+	    (void *)eap);
 }
 
 /******************************************************
@@ -734,9 +1069,7 @@
     static PyObject *
 OutputGetattro(PyObject *self, PyObject *nameobj)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-	name = _PyUnicode_AsString(nameobj);
+    GET_ATTR_STRING(name, nameobj);
 
     if (strcmp(name, "softspace") == 0)
 	return PyLong_FromLong(((OutputObject *)(self))->softspace);
@@ -747,44 +1080,9 @@
     static int
 OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-	name = _PyUnicode_AsString(nameobj);
+    GET_ATTR_STRING(name, nameobj);
 
-    if (val == NULL) {
-	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
-	return -1;
-    }
-
-    if (strcmp(name, "softspace") == 0)
-    {
-	if (!PyLong_Check(val)) {
-	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
-	    return -1;
-	}
-
-	((OutputObject *)(self))->softspace = PyLong_AsLong(val);
-	return 0;
-    }
-
-    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
-    return -1;
-}
-
-/***************/
-
-    static int
-PythonIO_Init(void)
-{
-    PyType_Ready(&OutputType);
-    return PythonIO_Init_io();
-}
-
-    static void
-PythonIO_Fini(void)
-{
-    PySys_SetObject("stdout", NULL);
-    PySys_SetObject("stderr", NULL);
+    return OutputSetattr((OutputObject *)(self), name, val);
 }
 
 /******************************************************
@@ -803,11 +1101,8 @@
 
 #define BufferType_Check(obj) ((obj)->ob_base.ob_type == &BufferType)
 
-static Py_ssize_t BufferLength(PyObject *);
-static PyObject *BufferItem(PyObject *, Py_ssize_t);
-static Py_ssize_t BufferAsItem(PyObject *, Py_ssize_t, PyObject *);
-static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
-
+static PyObject* BufferSubscript(PyObject *self, PyObject *idx);
+static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
 
 /* Line range type - Implementation functions
  * --------------------------------------
@@ -815,8 +1110,9 @@
 
 #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
 
-static PyObject* RangeSubscript(PyObject *self, PyObject* idx);
+static PyObject* RangeSubscript(PyObject *self, PyObject *idx);
 static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *);
+static Py_ssize_t RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
 
 /* Current objects type - Implementation functions
  * -----------------------------------------------
@@ -828,174 +1124,114 @@
     (ssizeargfunc)	0,		    /* sq_repeat,    x*n      */
     (ssizeargfunc)	BufferItem,	    /* sq_item,      x[i]     */
     0,					    /* was_sq_slice,	 x[i:j]   */
-    (ssizeobjargproc)	BufferAsItem,	    /* sq_ass_item,  x[i]=v   */
+    0,					    /* sq_ass_item,  x[i]=v   */
     0,					    /* sq_ass_slice, x[i:j]=v */
     0,					    /* sq_contains */
     0,					    /* sq_inplace_concat */
     0,					    /* sq_inplace_repeat */
 };
 
-PyMappingMethods BufferAsMapping = {
+static PyMappingMethods BufferAsMapping = {
     /* mp_length	*/ (lenfunc)BufferLength,
     /* mp_subscript     */ (binaryfunc)BufferSubscript,
-    /* mp_ass_subscript */ (objobjargproc)0,
+    /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript,
 };
 
 
-/* Buffer object - Definitions
+/* Buffer object
  */
 
-static PyTypeObject BufferType;
-
     static PyObject *
-BufferNew(buf_T *buf)
-{
-    /* We need to handle deletion of buffers underneath us.
-     * If we add a "b_python3_ref" field to the buf_T structure,
-     * then we can get at it in buf_freeall() in vim. We then
-     * need to create only ONE Python object per buffer - if
-     * we try to create a second, just INCREF the existing one
-     * and return it. The (single) Python object referring to
-     * the buffer is stored in "b_python3_ref".
-     * Question: what to do on a buf_freeall(). We'll probably
-     * have to either delete the Python object (DECREF it to
-     * zero - a bad idea, as it leaves dangling refs!) or
-     * set the buf_T * value to an invalid value (-1?), which
-     * means we need checks in all access functions... Bah.
-     */
-
-    BufferObject *self;
-
-    if (buf->b_python3_ref != NULL)
-    {
-	self = buf->b_python3_ref;
-	Py_INCREF(self);
-    }
-    else
-    {
-	self = PyObject_NEW(BufferObject, &BufferType);
-	buf->b_python3_ref = self;
-	if (self == NULL)
-	    return NULL;
-	self->buf = buf;
-    }
-
-    return (PyObject *)(self);
-}
-
-    static void
-BufferDestructor(PyObject *self)
+BufferGetattro(PyObject *self, PyObject *nameobj)
 {
-    BufferObject *this = (BufferObject *)(self);
-
-    if (this->buf && this->buf != INVALID_BUFFER_VALUE)
-	this->buf->b_python3_ref = NULL;
-}
+    PyObject *r;
 
-    static PyObject *
-BufferGetattro(PyObject *self, PyObject*nameobj)
-{
-    BufferObject *this = (BufferObject *)(self);
+    GET_ATTR_STRING(name, nameobj);
 
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-	name = _PyUnicode_AsString(nameobj);
+    if ((r = BufferAttrValid((BufferObject *)(self), name)))
+	return r;
 
-    if (CheckBuffer(this))
+    if (CheckBuffer((BufferObject *)(self)))
 	return NULL;
 
-    if (strcmp(name, "name") == 0)
-	return Py_BuildValue("s", this->buf->b_ffname);
-    else if (strcmp(name, "number") == 0)
-	return Py_BuildValue("n", this->buf->b_fnum);
-    else if (strcmp(name,"__members__") == 0)
-	return Py_BuildValue("[ss]", "name", "number");
+    r = BufferAttr((BufferObject *)(self), name);
+    if (r || PyErr_Occurred())
+	return r;
     else
 	return PyObject_GenericGetAttr(self, nameobj);
 }
 
-    static PyObject *
-BufferRepr(PyObject *self)
+    static int
+BufferSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
 {
-    static char repr[100];
-    BufferObject *this = (BufferObject *)(self);
-
-    if (this->buf == INVALID_BUFFER_VALUE)
-    {
-	vim_snprintf(repr, 100, _("<buffer object (deleted) at %p>"), (self));
-	return PyUnicode_FromString(repr);
-    }
-    else
-    {
-	char *name = (char *)this->buf->b_fname;
-	Py_ssize_t len;
-
-	if (name == NULL)
-	    name = "";
-	len = strlen(name);
-
-	if (len > 35)
-	    name = name + (35 - len);
+    GET_ATTR_STRING(name, nameobj);
 
-	vim_snprintf(repr, 100, "<buffer %s%s>", len > 35 ? "..." : "", name);
-
-	return PyUnicode_FromString(repr);
-    }
+    return BufferSetattr((BufferObject *)(self), name, val);
 }
 
 /******************/
 
-    static Py_ssize_t
-BufferLength(PyObject *self)
-{
-    if (CheckBuffer((BufferObject *)(self)))
-	return -1;
-
-    return (Py_ssize_t)(((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
-
     static PyObject *
-BufferItem(PyObject *self, Py_ssize_t n)
+BufferSubscript(PyObject *self, PyObject* idx)
 {
-    return RBItem((BufferObject *)(self), n, 1,
-	       (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
+    if (PyLong_Check(idx))
+    {
+	long _idx = PyLong_AsLong(idx);
+	return BufferItem((BufferObject *)(self), _idx);
+    } else if (PySlice_Check(idx))
+    {
+	Py_ssize_t start, stop, step, slicelen;
 
-    static PyObject *
-BufferSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi)
-{
-    return RBSlice((BufferObject *)(self), lo, hi, 1,
-	       (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
-}
+	if (CheckBuffer((BufferObject *) self))
+	    return NULL;
 
-    static Py_ssize_t
-BufferAsItem(PyObject *self, Py_ssize_t n, PyObject *val)
-{
-    return RBAsItem((BufferObject *)(self), n, val, 1,
-		(Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-		NULL);
+	if (PySlice_GetIndicesEx((PyObject *)idx,
+	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+	      &start, &stop,
+	      &step, &slicelen) < 0)
+	{
+	    return NULL;
+	}
+	return BufferSlice((BufferObject *)(self), start, stop);
+    }
+    else
+    {
+	RAISE_INVALID_INDEX_TYPE(idx);
+	return NULL;
+    }
 }
 
-
-    static PyObject *
-BufferSubscript(PyObject *self, PyObject* idx)
+    static Py_ssize_t
+BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
 {
-    if (PyLong_Check(idx)) {
-	long _idx = PyLong_AsLong(idx);
-	return BufferItem(self,_idx);
-    } else if (PySlice_Check(idx)) {
+    if (PyLong_Check(idx))
+    {
+	long n = PyLong_AsLong(idx);
+	return RBAsItem((BufferObject *)(self), n, val, 1,
+		    (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+		    NULL);
+    } else if (PySlice_Check(idx))
+    {
 	Py_ssize_t start, stop, step, slicelen;
 
-	if (PySlice_GetIndicesEx((PySliceObject *)idx,
-	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
+	if (CheckBuffer((BufferObject *) self))
+	    return -1;
+
+	if (PySlice_GetIndicesEx((PyObject *)idx,
+	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
 	      &start, &stop,
-	      &step, &slicelen) < 0) {
-	    return NULL;
+	      &step, &slicelen) < 0)
+	{
+	    return -1;
 	}
-	return BufferSlice(self,start,stop+1);
-    } else {
-	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
-	return NULL;
+	return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
+			  (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+			  NULL);
+    }
+    else
+    {
+	RAISE_INVALID_INDEX_TYPE(idx);
+	return -1;
     }
 }
 
@@ -1012,27 +1248,19 @@
     0,					 /* sq_inplace_repeat */
 };
 
-PyMappingMethods RangeAsMapping = {
+static PyMappingMethods RangeAsMapping = {
     /* mp_length	*/ (lenfunc)RangeLength,
     /* mp_subscript     */ (binaryfunc)RangeSubscript,
-    /* mp_ass_subscript */ (objobjargproc)0,
+    /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript,
 };
 
 /* Line range object - Implementation
  */
 
-    static void
-RangeDestructor(PyObject *self)
-{
-    Py_DECREF(((RangeObject *)(self))->buf);
-}
-
     static PyObject *
 RangeGetattro(PyObject *self, PyObject *nameobj)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-	name = _PyUnicode_AsString(nameobj);
+    GET_ATTR_STRING(name, nameobj);
 
     if (strcmp(name, "start") == 0)
 	return Py_BuildValue("n", ((RangeObject *)(self))->start - 1);
@@ -1053,136 +1281,111 @@
 		    &((RangeObject *)(self))->end);
 }
 
+    static Py_ssize_t
+RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val)
+{
+    return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
+		    ((RangeObject *)(self))->start,
+		    ((RangeObject *)(self))->end,
+		    &((RangeObject *)(self))->end);
+}
+
     static PyObject *
 RangeSubscript(PyObject *self, PyObject* idx)
 {
-    if (PyLong_Check(idx)) {
+    if (PyLong_Check(idx))
+    {
 	long _idx = PyLong_AsLong(idx);
-	return RangeItem(self,_idx);
-    } else if (PySlice_Check(idx)) {
+	return RangeItem((RangeObject *)(self), _idx);
+    } else if (PySlice_Check(idx))
+    {
 	Py_ssize_t start, stop, step, slicelen;
 
-	if (PySlice_GetIndicesEx((PySliceObject *)idx,
+	if (PySlice_GetIndicesEx((PyObject *)idx,
 		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
 		&start, &stop,
-		&step, &slicelen) < 0) {
+		&step, &slicelen) < 0)
+	{
 	    return NULL;
 	}
-	return RangeSlice(self,start,stop+1);
-    } else {
-	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+	return RangeSlice((RangeObject *)(self), start, stop);
+    }
+    else
+    {
+	RAISE_INVALID_INDEX_TYPE(idx);
 	return NULL;
     }
 }
 
-/* Buffer list object - Definitions
- */
-
-typedef struct
+    static Py_ssize_t
+RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
 {
-    PyObject_HEAD
-} BufListObject;
-
-static PySequenceMethods BufListAsSeq = {
-    (lenfunc)		BufListLength,	    /* sq_length,    len(x)   */
-    (binaryfunc)	0,		    /* sq_concat,    x+y      */
-    (ssizeargfunc)	0,		    /* sq_repeat,    x*n      */
-    (ssizeargfunc)	BufListItem,	    /* sq_item,      x[i]     */
-    0,					    /* was_sq_slice,	 x[i:j]   */
-    (ssizeobjargproc)	0,		    /* sq_as_item,  x[i]=v   */
-    0,					    /* sq_ass_slice, x[i:j]=v */
-    0,					    /* sq_contains */
-    0,					    /* sq_inplace_concat */
-    0,					    /* sq_inplace_repeat */
-};
-
-static PyTypeObject BufListType;
-
-/* Window object - Definitions
- */
-
-static struct PyMethodDef WindowMethods[] = {
-    /* name,	    function,		calling,    documentation */
-    { NULL,	    NULL,		0,	    NULL }
-};
+    if (PyLong_Check(idx))
+    {
+	long n = PyLong_AsLong(idx);
+	return RangeAsItem(self, n, val);
+    } else if (PySlice_Check(idx))
+    {
+	Py_ssize_t start, stop, step, slicelen;
 
-static PyTypeObject WindowType;
+	if (PySlice_GetIndicesEx((PyObject *)idx,
+		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+		&start, &stop,
+		&step, &slicelen) < 0)
+	{
+	    return -1;
+	}
+	return RangeAsSlice(self, start, stop, val);
+    }
+    else
+    {
+	RAISE_INVALID_INDEX_TYPE(idx);
+	return -1;
+    }
+}
 
-/* Window object - Implementation
+/* TabPage object - Implementation
  */
 
     static PyObject *
-WindowNew(win_T *win)
+TabPageGetattro(PyObject *self, PyObject *nameobj)
 {
-    /* We need to handle deletion of windows underneath us.
-     * If we add a "w_python3_ref" field to the win_T structure,
-     * then we can get at it in win_free() in vim. We then
-     * need to create only ONE Python object per window - if
-     * we try to create a second, just INCREF the existing one
-     * and return it. The (single) Python object referring to
-     * the window is stored in "w_python3_ref".
-     * On a win_free() we set the Python object's win_T* field
-     * to an invalid value. We trap all uses of a window
-     * object, and reject them if the win_T* field is invalid.
-     */
+    PyObject *r;
 
-    WindowObject *self;
+    GET_ATTR_STRING(name, nameobj);
 
-    if (win->w_python3_ref)
-    {
-	self = win->w_python3_ref;
-	Py_INCREF(self);
-    }
-    else
-    {
-	self = PyObject_NEW(WindowObject, &WindowType);
-	if (self == NULL)
-	    return NULL;
-	self->win = win;
-	win->w_python3_ref = self;
-    }
+    if ((r = TabPageAttrValid((TabPageObject *)(self), name)))
+	return r;
 
-    return (PyObject *)(self);
-}
-
-    static void
-WindowDestructor(PyObject *self)
-{
-    WindowObject *this = (WindowObject *)(self);
+    if (CheckTabPage((TabPageObject *)(self)))
+	return NULL;
 
-    if (this->win && this->win != INVALID_WINDOW_VALUE)
-	this->win->w_python3_ref = NULL;
+    r = TabPageAttr((TabPageObject *)(self), name);
+    if (r || PyErr_Occurred())
+	return r;
+    else
+	return PyObject_GenericGetAttr(self, nameobj);
 }
 
+/* Window object - Implementation
+ */
+
     static PyObject *
 WindowGetattro(PyObject *self, PyObject *nameobj)
 {
-    WindowObject *this = (WindowObject *)(self);
+    PyObject *r;
 
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-	name = _PyUnicode_AsString(nameobj);
+    GET_ATTR_STRING(name, nameobj);
 
+    if ((r = WindowAttrValid((WindowObject *)(self), name)))
+	return r;
 
-    if (CheckWindow(this))
+    if (CheckWindow((WindowObject *)(self)))
 	return NULL;
 
-    if (strcmp(name, "buffer") == 0)
-	return (PyObject *)BufferNew(this->win->w_buffer);
-    else if (strcmp(name, "cursor") == 0)
-    {
-	pos_T *pos = &this->win->w_cursor;
-
-	return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
-    }
-    else if (strcmp(name, "height") == 0)
-	return Py_BuildValue("l", (long)(this->win->w_height));
-#ifdef FEAT_VERTSPLIT
-    else if (strcmp(name, "width") == 0)
-	return Py_BuildValue("l", (long)(W_WIDTH(this->win)));
-#endif
-    else if (strcmp(name,"__members__") == 0)
-	return Py_BuildValue("[sss]", "buffer", "cursor", "height");
+    r = WindowAttr((WindowObject *)(self), name);
+    if (r || PyErr_Occurred())
+	return r;
     else
 	return PyObject_GenericGetAttr(self, nameobj);
 }
@@ -1190,22 +1393,29 @@
     static int
 WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
 {
-    char *name = "";
+    GET_ATTR_STRING(name, nameobj);
 
-    if (PyUnicode_Check(nameobj))
-	name = _PyUnicode_AsString(nameobj);
-
-    return WindowSetattr(self, name, val);
+    return WindowSetattr((WindowObject *)(self), name, val);
 }
 
-/* Window list object - Definitions
+/* Tab page list object - Definitions
  */
 
-typedef struct
-{
-    PyObject_HEAD
-}
-WinListObject;
+static PySequenceMethods TabListAsSeq = {
+    (lenfunc)	     TabListLength,	    /* sq_length,    len(x)   */
+    (binaryfunc)     0,			    /* sq_concat,    x+y      */
+    (ssizeargfunc)   0,			    /* sq_repeat,    x*n      */
+    (ssizeargfunc)   TabListItem,	    /* sq_item,      x[i]     */
+    0,					    /* sq_slice,     x[i:j]   */
+    (ssizeobjargproc)0,			    /* sq_as_item,  x[i]=v   */
+    0,					    /* sq_ass_slice, x[i:j]=v */
+    0,					    /* sq_contains */
+    0,					    /* sq_inplace_concat */
+    0,					    /* sq_inplace_repeat */
+};
+
+/* Window list object - Definitions
+ */
 
 static PySequenceMethods WinListAsSeq = {
     (lenfunc)	     WinListLength,	    /* sq_length,    len(x)   */
@@ -1220,76 +1430,168 @@
     0,					    /* sq_inplace_repeat */
 };
 
-static PyTypeObject WinListType;
+/* Current items object - Implementation
+ */
+    static PyObject *
+CurrentGetattro(PyObject *self, PyObject *nameobj)
+{
+    PyObject	*r;
+    GET_ATTR_STRING(name, nameobj);
+    if (!(r = CurrentGetattr(self, name)))
+	return PyObject_GenericGetAttr(self, nameobj);
+    return r;
+}
 
-/* Current items object - Definitions
+    static int
+CurrentSetattro(PyObject *self, PyObject *nameobj, PyObject *value)
+{
+    GET_ATTR_STRING(name, nameobj);
+    return CurrentSetattr(self, name, value);
+}
+
+/* Dictionary object - Definitions
  */
 
-typedef struct
+    static PyObject *
+DictionaryGetattro(PyObject *self, PyObject *nameobj)
 {
-    PyObject_HEAD
-} CurrentObject;
+    DictionaryObject	*this = ((DictionaryObject *) (self));
 
-static PyTypeObject CurrentType;
+    GET_ATTR_STRING(name, nameobj);
 
-/* Current items object - Implementation
+    if (strcmp(name, "locked") == 0)
+	return PyLong_FromLong(this->dict->dv_lock);
+    else if (strcmp(name, "scope") == 0)
+	return PyLong_FromLong(this->dict->dv_scope);
+
+    return PyObject_GenericGetAttr(self, nameobj);
+}
+
+    static int
+DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+{
+    GET_ATTR_STRING(name, nameobj);
+    return DictionarySetattr((DictionaryObject *)(self), name, val);
+}
+
+/* List object - Definitions
  */
+
+static PySequenceMethods ListAsSeq = {
+    (lenfunc)		ListLength,	 /* sq_length,	  len(x)   */
+    (binaryfunc)	0,		 /* RangeConcat, sq_concat,  x+y   */
+    (ssizeargfunc)	0,		 /* RangeRepeat, sq_repeat,  x*n   */
+    (ssizeargfunc)	ListItem,	 /* sq_item,	  x[i]	   */
+    (void *)		0,		 /* was_sq_slice,     x[i:j]   */
+    (ssizeobjargproc)	ListAssItem,	 /* sq_as_item,  x[i]=v   */
+    (void *)		0,		 /* was_sq_ass_slice, x[i:j]=v */
+    0,					 /* sq_contains */
+    (binaryfunc)	ListConcatInPlace,/* sq_inplace_concat */
+    0,					 /* sq_inplace_repeat */
+};
+
+static PyObject *ListSubscript(PyObject *, PyObject *);
+static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
+
+static PyMappingMethods ListAsMapping = {
+    /* mp_length	*/ (lenfunc) ListLength,
+    /* mp_subscript     */ (binaryfunc) ListSubscript,
+    /* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
+};
+
     static PyObject *
-CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj)
+ListSubscript(PyObject *self, PyObject* idx)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-	name = _PyUnicode_AsString(nameobj);
-
-    if (strcmp(name, "buffer") == 0)
-	return (PyObject *)BufferNew(curbuf);
-    else if (strcmp(name, "window") == 0)
-	return (PyObject *)WindowNew(curwin);
-    else if (strcmp(name, "line") == 0)
-	return GetBufferLine(curbuf, (Py_ssize_t)curwin->w_cursor.lnum);
-    else if (strcmp(name, "range") == 0)
-	return RangeNew(curbuf, RangeStart, RangeEnd);
-    else if (strcmp(name,"__members__") == 0)
-	return Py_BuildValue("[ssss]", "buffer", "window", "line", "range");
+    if (PyLong_Check(idx))
+    {
+	long _idx = PyLong_AsLong(idx);
+	return ListItem((ListObject *)(self), _idx);
+    }
+    else if (PySlice_Check(idx))
+    {
+	Py_ssize_t start, stop, step, slicelen;
+
+	if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
+				 &start, &stop, &step, &slicelen) < 0)
+	    return NULL;
+	return ListSlice((ListObject *)(self), start, stop);
+    }
     else
     {
-	PyErr_SetString(PyExc_AttributeError, name);
+	RAISE_INVALID_INDEX_TYPE(idx);
 	return NULL;
     }
 }
 
-    static int
-CurrentSetattro(PyObject *self UNUSED, PyObject *nameobj, PyObject *value)
+    static Py_ssize_t
+ListAsSubscript(PyObject *self, PyObject *idx, PyObject *obj)
 {
-    char *name = "";
-    if (PyUnicode_Check(nameobj))
-	name = _PyUnicode_AsString(nameobj);
-
-    if (strcmp(name, "line") == 0)
+    if (PyLong_Check(idx))
     {
-	if (SetBufferLine(curbuf, (Py_ssize_t)curwin->w_cursor.lnum, value, NULL) == FAIL)
-	    return -1;
+	long _idx = PyLong_AsLong(idx);
+	return ListAssItem((ListObject *)(self), _idx, obj);
+    }
+    else if (PySlice_Check(idx))
+    {
+	Py_ssize_t start, stop, step, slicelen;
 
-	return 0;
+	if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
+				 &start, &stop, &step, &slicelen) < 0)
+	    return -1;
+	return ListAssSlice((ListObject *)(self), start, stop, obj);
     }
     else
     {
-	PyErr_SetString(PyExc_AttributeError, name);
+	RAISE_INVALID_INDEX_TYPE(idx);
 	return -1;
     }
 }
 
+    static PyObject *
+ListGetattro(PyObject *self, PyObject *nameobj)
+{
+    GET_ATTR_STRING(name, nameobj);
+
+    if (strcmp(name, "locked") == 0)
+	return PyLong_FromLong(((ListObject *) (self))->list->lv_lock);
+
+    return PyObject_GenericGetAttr(self, nameobj);
+}
+
+    static int
+ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+{
+    GET_ATTR_STRING(name, nameobj);
+    return ListSetattr((ListObject *)(self), name, val);
+}
+
+/* Function object - Definitions
+ */
+
+    static PyObject *
+FunctionGetattro(PyObject *self, PyObject *nameobj)
+{
+    FunctionObject	*this = (FunctionObject *)(self);
+
+    GET_ATTR_STRING(name, nameobj);
+
+    if (strcmp(name, "name") == 0)
+	return PyUnicode_FromString((char *)(this->name));
+
+    return PyObject_GenericGetAttr(self, nameobj);
+}
+
 /* External interface
  */
 
     void
 python3_buffer_free(buf_T *buf)
 {
-    if (buf->b_python3_ref != NULL)
+    if (BUF_PYTHON_REF(buf) != NULL)
     {
-	BufferObject *bp = buf->b_python3_ref;
+	BufferObject *bp = BUF_PYTHON_REF(buf);
 	bp->buf = INVALID_BUFFER_VALUE;
-	buf->b_python3_ref = NULL;
+	BUF_PYTHON_REF(buf) = NULL;
     }
 }
 
@@ -1297,69 +1599,49 @@
     void
 python3_window_free(win_T *win)
 {
-    if (win->w_python3_ref != NULL)
+    if (WIN_PYTHON_REF(win) != NULL)
     {
-	WindowObject *wp = win->w_python3_ref;
+	WindowObject *wp = WIN_PYTHON_REF(win);
 	wp->win = INVALID_WINDOW_VALUE;
-	win->w_python3_ref = NULL;
+	WIN_PYTHON_REF(win) = NULL;
     }
 }
-#endif
-
-static BufListObject TheBufferList =
-{
-    PyObject_HEAD_INIT(&BufListType)
-};
-
-static WinListObject TheWindowList =
-{
-    PyObject_HEAD_INIT(&WinListType)
-};
 
-static CurrentObject TheCurrent =
+    void
+python3_tabpage_free(tabpage_T *tab)
 {
-    PyObject_HEAD_INIT(&CurrentType)
-};
-
-PyDoc_STRVAR(vim_module_doc,"vim python interface\n");
-
-static struct PyModuleDef vimmodule;
+    if (TAB_PYTHON_REF(tab) != NULL)
+    {
+	TabPageObject *tp = TAB_PYTHON_REF(tab);
+	tp->tab = INVALID_TABPAGE_VALUE;
+	TAB_PYTHON_REF(tab) = NULL;
+    }
+}
+#endif
 
-#ifndef PROTO
-PyMODINIT_FUNC Py3Init_vim(void)
+    static PyObject *
+Py3Init_vim(void)
 {
-    PyObject *mod;
     /* The special value is removed from sys.path in Python3_Init(). */
     static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL};
 
-    PyType_Ready(&BufferType);
-    PyType_Ready(&RangeType);
-    PyType_Ready(&WindowType);
-    PyType_Ready(&BufListType);
-    PyType_Ready(&WinListType);
-    PyType_Ready(&CurrentType);
+    if (init_types())
+	return NULL;
 
     /* Set sys.argv[] to avoid a crash in warn(). */
     PySys_SetArgv(1, argv);
 
-    mod = PyModule_Create(&vimmodule);
-
-    VimError = Py_BuildValue("s", "vim.error");
+    if ((vim_module = PyModule_Create(&vimmodule)) == NULL)
+	return NULL;
 
-    PyModule_AddObject(mod, "error", VimError);
-    Py_INCREF((PyObject *)(void *)&TheBufferList);
-    PyModule_AddObject(mod, "buffers", (PyObject *)(void *)&TheBufferList);
-    Py_INCREF((PyObject *)(void *)&TheCurrent);
-    PyModule_AddObject(mod, "current", (PyObject *)(void *)&TheCurrent);
-    Py_INCREF((PyObject *)(void *)&TheWindowList);
-    PyModule_AddObject(mod, "windows", (PyObject *)(void *)&TheWindowList);
+    if (populate_module(vim_module))
+	return NULL;
 
-    if (PyErr_Occurred())
+    if (init_sys_path())
 	return NULL;
 
-    return mod;
+    return vim_module;
 }
-#endif
 
 /*************************************************************************
  * 4. Utility functions for handling the interface between Vim and Python.
@@ -1397,96 +1679,33 @@
     }
     *p = '\0';
 
-    result = PyUnicode_FromStringAndSize(tmp, len);
+    result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
 
     vim_free(tmp);
     return result;
 }
 
-    static void
-init_structs(void)
+    void
+do_py3eval (char_u *str, typval_T *rettv)
+{
+    DoPyCommand((char *) str,
+	    (rangeinitializer) init_range_eval,
+	    (runner) run_eval,
+	    (void *) rettv);
+    switch(rettv->v_type)
+    {
+	case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
+	case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
+	case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
+	case VAR_UNKNOWN:
+	    rettv->v_type = VAR_NUMBER;
+	    rettv->vval.v_number = 0;
+	    break;
+    }
+}
+
+    void
+set_ref_in_python3 (int copyID)
 {
-    vim_memset(&OutputType, 0, sizeof(OutputType));
-    OutputType.tp_name = "vim.message";
-    OutputType.tp_basicsize = sizeof(OutputObject);
-    OutputType.tp_getattro = OutputGetattro;
-    OutputType.tp_setattro = OutputSetattro;
-    OutputType.tp_flags = Py_TPFLAGS_DEFAULT;
-    OutputType.tp_doc = "vim message object";
-    OutputType.tp_methods = OutputMethods;
-    OutputType.tp_alloc = call_PyType_GenericAlloc;
-    OutputType.tp_new = call_PyType_GenericNew;
-    OutputType.tp_free = call_PyObject_Free;
-
-    vim_memset(&BufferType, 0, sizeof(BufferType));
-    BufferType.tp_name = "vim.buffer";
-    BufferType.tp_basicsize = sizeof(BufferType);
-    BufferType.tp_dealloc = BufferDestructor;
-    BufferType.tp_repr = BufferRepr;
-    BufferType.tp_as_sequence = &BufferAsSeq;
-    BufferType.tp_as_mapping = &BufferAsMapping;
-    BufferType.tp_getattro = BufferGetattro;
-    BufferType.tp_flags = Py_TPFLAGS_DEFAULT;
-    BufferType.tp_doc = "vim buffer object";
-    BufferType.tp_methods = BufferMethods;
-    BufferType.tp_alloc = call_PyType_GenericAlloc;
-    BufferType.tp_new = call_PyType_GenericNew;
-    BufferType.tp_free = call_PyObject_Free;
-
-    vim_memset(&WindowType, 0, sizeof(WindowType));
-    WindowType.tp_name = "vim.window";
-    WindowType.tp_basicsize = sizeof(WindowObject);
-    WindowType.tp_dealloc = WindowDestructor;
-    WindowType.tp_repr = WindowRepr;
-    WindowType.tp_getattro = WindowGetattro;
-    WindowType.tp_setattro = WindowSetattro;
-    WindowType.tp_flags = Py_TPFLAGS_DEFAULT;
-    WindowType.tp_doc = "vim Window object";
-    WindowType.tp_methods = WindowMethods;
-    WindowType.tp_alloc = call_PyType_GenericAlloc;
-    WindowType.tp_new = call_PyType_GenericNew;
-    WindowType.tp_free = call_PyObject_Free;
-
-    vim_memset(&BufListType, 0, sizeof(BufListType));
-    BufListType.tp_name = "vim.bufferlist";
-    BufListType.tp_basicsize = sizeof(BufListObject);
-    BufListType.tp_as_sequence = &BufListAsSeq;
-    BufListType.tp_flags = Py_TPFLAGS_DEFAULT;
-    BufferType.tp_doc = "vim buffer list";
-
-    vim_memset(&WinListType, 0, sizeof(WinListType));
-    WinListType.tp_name = "vim.windowlist";
-    WinListType.tp_basicsize = sizeof(WinListType);
-    WinListType.tp_as_sequence = &WinListAsSeq;
-    WinListType.tp_flags = Py_TPFLAGS_DEFAULT;
-    WinListType.tp_doc = "vim window list";
-
-    vim_memset(&RangeType, 0, sizeof(RangeType));
-    RangeType.tp_name = "vim.range";
-    RangeType.tp_basicsize = sizeof(RangeObject);
-    RangeType.tp_dealloc = RangeDestructor;
-    RangeType.tp_repr = RangeRepr;
-    RangeType.tp_as_sequence = &RangeAsSeq;
-    RangeType.tp_as_mapping = &RangeAsMapping;
-    RangeType.tp_getattro = RangeGetattro;
-    RangeType.tp_flags = Py_TPFLAGS_DEFAULT;
-    RangeType.tp_doc = "vim Range object";
-    RangeType.tp_methods = RangeMethods;
-    RangeType.tp_alloc = call_PyType_GenericAlloc;
-    RangeType.tp_new = call_PyType_GenericNew;
-    RangeType.tp_free = call_PyObject_Free;
-
-    vim_memset(&CurrentType, 0, sizeof(CurrentType));
-    CurrentType.tp_name = "vim.currentdata";
-    CurrentType.tp_basicsize = sizeof(CurrentObject);
-    CurrentType.tp_getattro = CurrentGetattro;
-    CurrentType.tp_setattro = CurrentSetattro;
-    CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
-    CurrentType.tp_doc = "vim current object";
-
-    vim_memset(&vimmodule, 0, sizeof(vimmodule));
-    vimmodule.m_name = "vim";
-    vimmodule.m_doc = vim_module_doc;
-    vimmodule.m_size = -1;
-    vimmodule.m_methods = VimMethods;
+    set_ref_in_py(copyID);
 }
diff -Naur vim73.orig/src/if_ruby.c vim73/src/if_ruby.c
--- vim73.orig/src/if_ruby.c	2010-06-30 19:33:12.000000000 +0000
+++ vim73/src/if_ruby.c	2013-08-04 19:09:10.387277864 +0000
@@ -4,12 +4,17 @@
  *
  * Ruby interface by Shugo Maeda
  *   with improvements by SegPhault (Ryan Paul)
+ *   with improvements by Jon Maken
  *
  * Do ":help uganda"  in Vim to read copying and usage conditions.
  * Do ":help credits" in Vim to see a list of people who contributed.
  * See README.txt for an overview of the Vim source code.
  */
 
+#ifdef HAVE_CONFIG_H
+# include "auto/config.h"
+#endif
+
 #include <stdio.h>
 #include <string.h>
 
@@ -26,14 +31,17 @@
 # define RUBYEXTERN extern
 #endif
 
+#ifdef DYNAMIC_RUBY
 /*
  * This is tricky.  In ruby.h there is (inline) function rb_class_of()
  * definition.  This function use these variables.  But we want function to
  * use dll_* variables.
  */
-#ifdef DYNAMIC_RUBY
 # define rb_cFalseClass		(*dll_rb_cFalseClass)
 # define rb_cFixnum		(*dll_rb_cFixnum)
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
+#  define rb_cFloat		(*dll_rb_cFloat)
+# endif
 # define rb_cNilClass		(*dll_rb_cNilClass)
 # define rb_cSymbol		(*dll_rb_cSymbol)
 # define rb_cTrueClass		(*dll_rb_cTrueClass)
@@ -46,8 +54,23 @@
  */
 #  define RUBY_EXPORT
 # endif
+
+#if !(defined(WIN32) || defined(_WIN64))
+# include <dlfcn.h>
+# define HINSTANCE void*
+# define RUBY_PROC void*
+# define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
+# define symbol_from_dll dlsym
+# define close_dll dlclose
+#else
+# define RUBY_PROC FARPROC
+# define load_dll vimLoadLib
+# define symbol_from_dll GetProcAddress
+# define close_dll FreeLibrary
 #endif
 
+#endif  /* ifdef DYNAMIC_RUBY */
+
 /* suggested by Ariya Mizutani */
 #if (_MSC_VER == 1200)
 # undef _WIN32_WINNT
@@ -65,11 +88,20 @@
 # define rb_int2big rb_int2big_stub
 #endif
 
+#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+	&& SIZEOF_INT < SIZEOF_LONG
+/* Ruby 2.0 defines a number of static functions which use rb_fix2int and
+ * rb_num2int if SIZEOF_INT < SIZEOF_LONG (64bit) */
+# define rb_fix2int rb_fix2int_stub
+# define rb_num2int rb_num2int_stub
+#endif
+
 #include <ruby.h>
 #ifdef RUBY19_OR_LATER
 # include <ruby/encoding.h>
 #endif
 
+#undef off_t	/* ruby defines off_t as _int64, Mingw uses long */
 #undef EXTERN
 #undef _
 
@@ -81,7 +113,7 @@
 #endif
 
 /*
- * Backward compatiblity for Ruby 1.8 and earlier.
+ * Backward compatibility for Ruby 1.8 and earlier.
  * Ruby 1.9 does not provide STR2CSTR, instead StringValuePtr is provided.
  * Ruby 1.9 does not provide RXXX(s)->len and RXXX(s)->ptr, instead
  * RXXX_LEN(s) and RXXX_PTR(s) are provided.
@@ -112,6 +144,7 @@
 #endif
 
 static int ruby_initialized = 0;
+static void *ruby_stack_start;
 static VALUE objtbl;
 
 static VALUE mVIM;
@@ -125,84 +158,116 @@
 static void ruby_io_init(void);
 static void ruby_vim_init(void);
 
-#if defined(DYNAMIC_RUBY) || defined(PROTO)
-#ifdef PROTO
-# define HINSTANCE int		/* for generating prototypes */
+#if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+# if defined(__ia64) && !defined(ruby_init_stack)
+#  define ruby_init_stack(addr) ruby_init_stack((addr), rb_ia64_bsp())
+# endif
 #endif
 
+#if defined(DYNAMIC_RUBY) || defined(PROTO)
+# ifdef PROTO
+#  define HINSTANCE int		/* for generating prototypes */
+# endif
+
 /*
  * Wrapper defines
  */
-#define rb_assoc_new			dll_rb_assoc_new
-#define rb_cObject			(*dll_rb_cObject)
-#define rb_check_type			dll_rb_check_type
-#define rb_class_path			dll_rb_class_path
-#define rb_data_object_alloc		dll_rb_data_object_alloc
-#define rb_define_class_under		dll_rb_define_class_under
-#define rb_define_const			dll_rb_define_const
-#define rb_define_global_function	dll_rb_define_global_function
-#define rb_define_method		dll_rb_define_method
-#define rb_define_module		dll_rb_define_module
-#define rb_define_module_function	dll_rb_define_module_function
-#define rb_define_singleton_method	dll_rb_define_singleton_method
-#define rb_define_virtual_variable	dll_rb_define_virtual_variable
-#define rb_stdout			(*dll_rb_stdout)
-#define rb_eArgError			(*dll_rb_eArgError)
-#define rb_eIndexError			(*dll_rb_eIndexError)
-#define rb_eRuntimeError		(*dll_rb_eRuntimeError)
-#define rb_eStandardError		(*dll_rb_eStandardError)
-#define rb_eval_string_protect		dll_rb_eval_string_protect
-#define rb_global_variable		dll_rb_global_variable
-#define rb_hash_aset			dll_rb_hash_aset
-#define rb_hash_new			dll_rb_hash_new
-#define rb_inspect			dll_rb_inspect
-#define rb_int2inum			dll_rb_int2inum
-#define rb_lastline_get			dll_rb_lastline_get
-#define rb_lastline_set			dll_rb_lastline_set
-#define rb_load_protect			dll_rb_load_protect
-#define rb_num2long			dll_rb_num2long
-#define rb_num2ulong			dll_rb_num2ulong
-#define rb_obj_alloc			dll_rb_obj_alloc
-#define rb_obj_as_string		dll_rb_obj_as_string
-#define rb_obj_id			dll_rb_obj_id
-#define rb_raise			dll_rb_raise
-#define rb_str2cstr			dll_rb_str2cstr
-#define rb_str_cat			dll_rb_str_cat
-#define rb_str_concat			dll_rb_str_concat
-#define rb_str_new			dll_rb_str_new
-#ifdef rb_str_new2
+# define rb_assoc_new			dll_rb_assoc_new
+# define rb_cObject			(*dll_rb_cObject)
+# define rb_check_type			dll_rb_check_type
+# define rb_class_path			dll_rb_class_path
+# define rb_data_object_alloc		dll_rb_data_object_alloc
+# define rb_define_class_under		dll_rb_define_class_under
+# define rb_define_const			dll_rb_define_const
+# define rb_define_global_function	dll_rb_define_global_function
+# define rb_define_method		dll_rb_define_method
+# define rb_define_module		dll_rb_define_module
+# define rb_define_module_function	dll_rb_define_module_function
+# define rb_define_singleton_method	dll_rb_define_singleton_method
+# define rb_define_virtual_variable	dll_rb_define_virtual_variable
+# define rb_stdout			(*dll_rb_stdout)
+# define rb_eArgError			(*dll_rb_eArgError)
+# define rb_eIndexError			(*dll_rb_eIndexError)
+# define rb_eRuntimeError		(*dll_rb_eRuntimeError)
+# define rb_eStandardError		(*dll_rb_eStandardError)
+# define rb_eval_string_protect		dll_rb_eval_string_protect
+# define rb_global_variable		dll_rb_global_variable
+# define rb_hash_aset			dll_rb_hash_aset
+# define rb_hash_new			dll_rb_hash_new
+# define rb_inspect			dll_rb_inspect
+# define rb_int2inum			dll_rb_int2inum
+# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+#  define rb_fix2int			dll_rb_fix2int
+#  define rb_num2int			dll_rb_num2int
+#  define rb_num2uint			dll_rb_num2uint
+# endif
+# define rb_lastline_get			dll_rb_lastline_get
+# define rb_lastline_set			dll_rb_lastline_set
+# define rb_load_protect			dll_rb_load_protect
+# ifndef RUBY19_OR_LATER
+#  define rb_num2long			dll_rb_num2long
+# endif
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 19
+#  define rb_num2ulong			dll_rb_num2ulong
+# endif
+# define rb_obj_alloc			dll_rb_obj_alloc
+# define rb_obj_as_string		dll_rb_obj_as_string
+# define rb_obj_id			dll_rb_obj_id
+# define rb_raise			dll_rb_raise
+# define rb_str_cat			dll_rb_str_cat
+# define rb_str_concat			dll_rb_str_concat
+# define rb_str_new			dll_rb_str_new
+# ifdef rb_str_new2
 /* Ruby may #define rb_str_new2 to use rb_str_new_cstr. */
-# define need_rb_str_new_cstr 1
-# define rb_str_new_cstr		dll_rb_str_new_cstr
-#else
-# define rb_str_new2			dll_rb_str_new2
-#endif
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-# define rb_string_value_ptr		dll_rb_string_value_ptr
-# define rb_float_new			dll_rb_float_new
-# define rb_ary_new			dll_rb_ary_new
-# define rb_ary_push			dll_rb_ary_push
-#endif
-#ifdef RUBY19_OR_LATER
-# define rb_errinfo			dll_rb_errinfo
-#else
-# define ruby_errinfo			(*dll_ruby_errinfo)
-#endif
-#define ruby_init			dll_ruby_init
-#define ruby_init_loadpath		dll_ruby_init_loadpath
-#define NtInitialize			dll_NtInitialize
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-# define rb_w32_snprintf		dll_rb_w32_snprintf
-#endif
+#  define need_rb_str_new_cstr 1
+/* Ruby's headers #define rb_str_new_cstr to make use of GCC's
+ * __builtin_constant_p extension. */
+#  undef rb_str_new_cstr
+#  define rb_str_new_cstr		dll_rb_str_new_cstr
+# else
+#  define rb_str_new2			dll_rb_str_new2
+# endif
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#  define rb_string_value		dll_rb_string_value
+#  define rb_string_value_ptr		dll_rb_string_value_ptr
+#  define rb_float_new			dll_rb_float_new
+#  define rb_ary_new			dll_rb_ary_new
+#  define rb_ary_push			dll_rb_ary_push
+#  if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+#   ifdef __ia64
+#    define rb_ia64_bsp			dll_rb_ia64_bsp
+#    undef ruby_init_stack
+#    define ruby_init_stack(addr)	dll_ruby_init_stack((addr), rb_ia64_bsp())
+#   else
+#    define ruby_init_stack		dll_ruby_init_stack
+#   endif
+#  endif
+# else
+#  define rb_str2cstr			dll_rb_str2cstr
+# endif
+# ifdef RUBY19_OR_LATER
+#  define rb_errinfo			dll_rb_errinfo
+# else
+#  define ruby_errinfo			(*dll_ruby_errinfo)
+# endif
+# define ruby_init			dll_ruby_init
+# define ruby_init_loadpath		dll_ruby_init_loadpath
+# ifdef WIN3264
+#  define NtInitialize			dll_NtInitialize
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#   define rb_w32_snprintf		dll_rb_w32_snprintf
+#  endif
+# endif
 
-#ifdef RUBY19_OR_LATER
-# define ruby_script			dll_ruby_script
-# define rb_enc_find_index		dll_rb_enc_find_index
-# define rb_enc_find			dll_rb_enc_find
-# define rb_enc_str_new			dll_rb_enc_str_new
-# define rb_sprintf			dll_rb_sprintf
-# define ruby_init_stack		dll_ruby_init_stack
-#endif
+# ifdef RUBY19_OR_LATER
+#  define ruby_script			dll_ruby_script
+#  define rb_enc_find_index		dll_rb_enc_find_index
+#  define rb_enc_find			dll_rb_enc_find
+#  define rb_enc_str_new			dll_rb_enc_str_new
+#  define rb_sprintf			dll_rb_sprintf
+#  define rb_require			dll_rb_require
+#  define ruby_process_options		dll_ruby_process_options
+# endif
 
 /*
  * Pointers for dynamic link
@@ -210,6 +275,9 @@
 static VALUE (*dll_rb_assoc_new) (VALUE, VALUE);
 VALUE *dll_rb_cFalseClass;
 VALUE *dll_rb_cFixnum;
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
+VALUE *dll_rb_cFloat;
+# endif
 VALUE *dll_rb_cNilClass;
 static VALUE *dll_rb_cObject;
 VALUE *dll_rb_cSymbol;
@@ -236,7 +304,11 @@
 static VALUE (*dll_rb_hash_new) (void);
 static VALUE (*dll_rb_inspect) (VALUE);
 static VALUE (*dll_rb_int2inum) (long);
-static VALUE (*dll_rb_int2inum) (long);
+# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+static long (*dll_rb_fix2int) (VALUE);
+static long (*dll_rb_num2int) (VALUE);
+static unsigned long (*dll_rb_num2uint) (VALUE);
+# endif
 static VALUE (*dll_rb_lastline_get) (void);
 static void (*dll_rb_lastline_set) (VALUE);
 static void (*dll_rb_load_protect) (VALUE, int, int*);
@@ -246,47 +318,62 @@
 static VALUE (*dll_rb_obj_as_string) (VALUE);
 static VALUE (*dll_rb_obj_id) (VALUE);
 static void (*dll_rb_raise) (VALUE, const char*, ...);
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+static VALUE (*dll_rb_string_value) (volatile VALUE*);
+# else
 static char *(*dll_rb_str2cstr) (VALUE,int*);
+# endif
 static VALUE (*dll_rb_str_cat) (VALUE, const char*, long);
 static VALUE (*dll_rb_str_concat) (VALUE, VALUE);
 static VALUE (*dll_rb_str_new) (const char*, long);
-#ifdef need_rb_str_new_cstr
+# ifdef need_rb_str_new_cstr
 /* Ruby may #define rb_str_new2 to use rb_str_new_cstr. */
 static VALUE (*dll_rb_str_new_cstr) (const char*);
-#else
+# else
 static VALUE (*dll_rb_str_new2) (const char*);
-#endif
-#ifdef RUBY19_OR_LATER
+# endif
+# ifdef RUBY19_OR_LATER
 static VALUE (*dll_rb_errinfo) (void);
-#else
+# else
 static VALUE *dll_ruby_errinfo;
-#endif
+# endif
 static void (*dll_ruby_init) (void);
 static void (*dll_ruby_init_loadpath) (void);
+# ifdef WIN3264
 static void (*dll_NtInitialize) (int*, char***);
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
+#  endif
+# endif
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
 static char * (*dll_rb_string_value_ptr) (volatile VALUE*);
 static VALUE (*dll_rb_float_new) (double);
 static VALUE (*dll_rb_ary_new) (void);
 static VALUE (*dll_rb_ary_push) (VALUE, VALUE);
-#endif
-#ifdef RUBY19_OR_LATER
+#  if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+#   ifdef __ia64
+static void * (*dll_rb_ia64_bsp) (void);
+static void (*dll_ruby_init_stack)(VALUE*, void*);
+#   else
+static void (*dll_ruby_init_stack)(VALUE*);
+#   endif
+#  endif
+# endif
+# ifdef RUBY19_OR_LATER
 static VALUE (*dll_rb_int2big)(SIGNED_VALUE);
-#endif
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
-#endif
+# endif
 
-#ifdef RUBY19_OR_LATER
+# ifdef RUBY19_OR_LATER
 static void (*dll_ruby_script) (const char*);
 static int (*dll_rb_enc_find_index) (const char*);
 static rb_encoding* (*dll_rb_enc_find) (const char*);
 static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
 static VALUE (*dll_rb_sprintf) (const char*, ...);
-static void (*ruby_init_stack)(VALUE*);
-#endif
+static VALUE (*dll_rb_require) (const char*);
+static void* (*ruby_process_options)(int, char**);
+# endif
 
-#ifdef RUBY19_OR_LATER
+# if defined(RUBY19_OR_LATER) && !defined(PROTO)
 SIGNED_VALUE rb_num2long_stub(VALUE x)
 {
     return dll_rb_num2long(x);
@@ -295,14 +382,35 @@
 {
     return dll_rb_int2big(x);
 }
-#endif
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
+	&& SIZEOF_INT < SIZEOF_LONG
+long rb_fix2int_stub(VALUE x)
+{
+    return dll_rb_fix2int(x);
+}
+long rb_num2int_stub(VALUE x)
+{
+    return dll_rb_num2int(x);
+}
+#  endif
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
+VALUE
+rb_float_new_in_heap(double d)
+{
+    return dll_rb_float_new(d);
+}
+VALUE rb_num2ulong(VALUE x)
+{
+    return (long)RSHIFT((SIGNED_VALUE)(x),1);
+}
+#  endif
+# endif
 
-static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */
+static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
 
 /*
  * Table of name to function pointer of ruby.
  */
-#define RUBY_PROC FARPROC
 static struct
 {
     char *name;
@@ -312,6 +420,9 @@
     {"rb_assoc_new", (RUBY_PROC*)&dll_rb_assoc_new},
     {"rb_cFalseClass", (RUBY_PROC*)&dll_rb_cFalseClass},
     {"rb_cFixnum", (RUBY_PROC*)&dll_rb_cFixnum},
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
+    {"rb_cFloat", (RUBY_PROC*)&dll_rb_cFloat},
+# endif
     {"rb_cNilClass", (RUBY_PROC*)&dll_rb_cNilClass},
     {"rb_cObject", (RUBY_PROC*)&dll_rb_cObject},
     {"rb_cSymbol", (RUBY_PROC*)&dll_rb_cSymbol},
@@ -338,6 +449,11 @@
     {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
     {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
     {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
+# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
+    {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
+    {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
+    {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
+# endif
     {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get},
     {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set},
     {"rb_load_protect", (RUBY_PROC*)&dll_rb_load_protect},
@@ -347,47 +463,64 @@
     {"rb_obj_as_string", (RUBY_PROC*)&dll_rb_obj_as_string},
     {"rb_obj_id", (RUBY_PROC*)&dll_rb_obj_id},
     {"rb_raise", (RUBY_PROC*)&dll_rb_raise},
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+    {"rb_string_value", (RUBY_PROC*)&dll_rb_string_value},
+# else
     {"rb_str2cstr", (RUBY_PROC*)&dll_rb_str2cstr},
+# endif
     {"rb_str_cat", (RUBY_PROC*)&dll_rb_str_cat},
     {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat},
     {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new},
-#ifdef need_rb_str_new_cstr
+# ifdef need_rb_str_new_cstr
     {"rb_str_new_cstr", (RUBY_PROC*)&dll_rb_str_new_cstr},
-#else
+# else
     {"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2},
-#endif
-#ifdef RUBY19_OR_LATER
+# endif
+# ifdef RUBY19_OR_LATER
     {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo},
-#else
+# else
     {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo},
-#endif
+# endif
     {"ruby_init", (RUBY_PROC*)&dll_ruby_init},
     {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
+# ifdef WIN3264
     {
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
     "NtInitialize",
-#else
+#  else
     "ruby_sysinit",
-#endif
+#  endif
 			(RUBY_PROC*)&dll_NtInitialize},
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
     {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
-#endif
-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+#  endif
+# endif
+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
     {"rb_string_value_ptr", (RUBY_PROC*)&dll_rb_string_value_ptr},
+#  if DYNAMIC_RUBY_VER <= 19
     {"rb_float_new", (RUBY_PROC*)&dll_rb_float_new},
+#  else
+    {"rb_float_new_in_heap", (RUBY_PROC*)&dll_rb_float_new},
+#  endif
     {"rb_ary_new", (RUBY_PROC*)&dll_rb_ary_new},
     {"rb_ary_push", (RUBY_PROC*)&dll_rb_ary_push},
-#endif
-#ifdef RUBY19_OR_LATER
+# endif
+# ifdef RUBY19_OR_LATER
     {"rb_int2big", (RUBY_PROC*)&dll_rb_int2big},
     {"ruby_script", (RUBY_PROC*)&dll_ruby_script},
     {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index},
     {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
     {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
     {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
+    {"rb_require", (RUBY_PROC*)&dll_rb_require},
+    {"ruby_process_options", (RUBY_PROC*)&dll_ruby_process_options},
+# endif
+# if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+#  ifdef __ia64
+    {"rb_ia64_bsp", (RUBY_PROC*)&dll_rb_ia64_bsp},
+#  endif
     {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
-#endif
+# endif
     {"", NULL},
 };
 
@@ -399,8 +532,8 @@
 {
     if (hinstRuby)
     {
-	FreeLibrary(hinstRuby);
-	hinstRuby = 0;
+	close_dll(hinstRuby);
+	hinstRuby = NULL;
     }
 }
 
@@ -416,7 +549,7 @@
 
     if (hinstRuby)
 	return OK;
-    hinstRuby = LoadLibrary(libname);
+    hinstRuby = load_dll(libname);
     if (!hinstRuby)
     {
 	if (verbose)
@@ -426,11 +559,11 @@
 
     for (i = 0; ruby_funcname_table[i].ptr; ++i)
     {
-	if (!(*ruby_funcname_table[i].ptr = GetProcAddress(hinstRuby,
+	if (!(*ruby_funcname_table[i].ptr = symbol_from_dll(hinstRuby,
 			ruby_funcname_table[i].name)))
 	{
-	    FreeLibrary(hinstRuby);
-	    hinstRuby = 0;
+	    close_dll(hinstRuby);
+	    hinstRuby = NULL;
 	    if (verbose)
 		EMSG2(_(e_loadfunc), ruby_funcname_table[i].name);
 	    return FAIL;
@@ -539,9 +672,9 @@
 	if (u_save(eap->line1 - 1, eap->line2 + 1) != OK)
 	    return;
 	for (i = eap->line1; i <= eap->line2; i++) {
-	    VALUE line, oldline;
+	    VALUE line;
 
-	    line = oldline = vim_str2rb_enc_str((char *)ml_get(i));
+	    line = vim_str2rb_enc_str((char *)ml_get(i));
 	    rb_lastline_set(line);
 	    eval_enc_string_protect((char *) eap->arg, &state);
 	    if (state) {
@@ -610,19 +743,22 @@
 	    NtInitialize(&argc, &argv);
 #endif
 	    {
-#ifdef RUBY19_OR_LATER
-		RUBY_INIT_STACK;
+#if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
+		ruby_init_stack(ruby_stack_start);
 #endif
 		ruby_init();
 	    }
 #ifdef RUBY19_OR_LATER
+	    {
+		int dummy_argc = 2;
+		char *dummy_argv[] = {"vim-ruby", "-e0"};
+		ruby_process_options(dummy_argc, dummy_argv);
+	    }
 	    ruby_script("vim-ruby");
-#endif
+#else
 	    ruby_init_loadpath();
-	    ruby_io_init();
-#ifdef RUBY19_OR_LATER
-	    rb_enc_find_index("encdb");
 #endif
+	    ruby_io_init();
 	    ruby_vim_init();
 	    ruby_initialized = 1;
 #ifdef DYNAMIC_RUBY
@@ -711,11 +847,19 @@
     char *buff, *p;
 
     str = rb_obj_as_string(str);
-    buff = ALLOCA_N(char, RSTRING_LEN(str));
-    strcpy(buff, RSTRING_PTR(str));
-    p = strchr(buff, '\n');
-    if (p) *p = '\0';
-    MSG(buff);
+    if (RSTRING_LEN(str) > 0)
+    {
+	/* Only do this when the string isn't empty, alloc(0) causes trouble. */
+	buff = ALLOCA_N(char, RSTRING_LEN(str));
+	strcpy(buff, RSTRING_PTR(str));
+	p = strchr(buff, '\n');
+	if (p) *p = '\0';
+	MSG(buff);
+    }
+    else
+    {
+	MSG("");
+    }
     return Qnil;
 }
 
@@ -906,15 +1050,9 @@
 
 static VALUE get_buffer_line(buf_T *buf, linenr_T n)
 {
-    if (n > 0 && n <= buf->b_ml.ml_line_count)
-    {
-	char *line = (char *)ml_get_buf(buf, n, FALSE);
-	return line ? vim_str2rb_enc_str(line) : Qnil;
-    }
-    rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
-#ifndef __GNUC__
-    return Qnil; /* For stop warning */
-#endif
+    if (n <= 0 || n > buf->b_ml.ml_line_count)
+	rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
+    return vim_str2rb_enc_str((char *)ml_get_buf(buf, n, FALSE));
 }
 
 static VALUE buffer_aref(VALUE self, VALUE num)
@@ -953,9 +1091,6 @@
     else
     {
 	rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
-#ifndef __GNUC__
-	return Qnil; /* For stop warning */
-#endif
     }
     return str;
 }
@@ -1010,7 +1145,8 @@
     long	n = NUM2LONG(num);
     aco_save_T	aco;
 
-    if (line == NULL) {
+    if (line == NULL)
+    {
 	rb_raise(rb_eIndexError, "NULL line");
     }
     else if (n >= 0 && n <= buf->b_ml.ml_line_count)
@@ -1034,7 +1170,8 @@
 
 	update_curbuf(NOT_VALID);
     }
-    else {
+    else
+    {
 	rb_raise(rb_eIndexError, "line number %ld out of range", n);
     }
     return str;
@@ -1145,21 +1282,21 @@
     return height;
 }
 
-static VALUE window_width(VALUE self)
+static VALUE window_width(VALUE self UNUSED)
 {
-    win_T *win = get_win(self);
-
-    return INT2NUM(win->w_width);
+    return INT2NUM(W_WIDTH(get_win(self)));
 }
 
-static VALUE window_set_width(VALUE self, VALUE width)
+static VALUE window_set_width(VALUE self UNUSED, VALUE width)
 {
+#ifdef FEAT_VERTSPLIT
     win_T *win = get_win(self);
     win_T *savewin = curwin;
 
     curwin = win;
     win_setwidth(NUM2INT(width));
     curwin = savewin;
+#endif
     return width;
 }
 
@@ -1187,6 +1324,11 @@
     return Qnil;
 }
 
+static VALUE f_nop(VALUE self UNUSED)
+{
+    return Qnil;
+}
+
 static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED)
 {
     int i;
@@ -1208,6 +1350,7 @@
 
     rb_stdout = rb_obj_alloc(rb_cObject);
     rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
+    rb_define_singleton_method(rb_stdout, "flush", f_nop, 0);
     rb_define_global_function("p", f_p, -1);
 }
 
@@ -1217,7 +1360,7 @@
     rb_global_variable(&objtbl);
 
     /* The Vim module used to be called "VIM", but "Vim" is better.  Make an
-     * alias "VIM" for backwards compatiblity. */
+     * alias "VIM" for backwards compatibility. */
     mVIM = rb_define_module("Vim");
     rb_define_const(rb_cObject, "VIM", mVIM);
     rb_define_const(mVIM, "VERSION_MAJOR", INT2NUM(VIM_VERSION_MAJOR));
@@ -1273,3 +1416,9 @@
     rb_define_virtual_variable("$curbuf", buffer_s_current, 0);
     rb_define_virtual_variable("$curwin", window_s_current, 0);
 }
+
+void vim_ruby_init(void *stack_start)
+{
+    /* should get machine stack start address early in main function */
+    ruby_stack_start = stack_start;
+}
diff -Naur vim73.orig/src/if_sniff.c vim73/src/if_sniff.c
--- vim73.orig/src/if_sniff.c	2010-05-15 11:04:06.000000000 +0000
+++ vim73/src/if_sniff.c	2013-08-04 19:09:10.387277864 +0000
@@ -9,7 +9,6 @@
 
 #ifdef WIN32
 # include <stdio.h>
-# include "vimio.h"
 # include <process.h>
 # include <string.h>
 # include <assert.h>
@@ -450,7 +449,7 @@
     if (!sniff_cmd)
     {
 	struct sn_cmd_list *list = sniff_cmd_ext;
-	while(list)
+	while (list)
 	{
 	    if (!strcmp(cmd, list->sniff_cmd->cmd_name))
 	    {
@@ -480,7 +479,7 @@
 	/* unescape message text */
 	char *p = msg;
 	char *end = p+strlen(msg);
-	while(*p)
+	while (*p)
 	{
 	    if (*p == '\\')
 		mch_memmove(p,p+1,end-p);
@@ -490,7 +489,7 @@
 	SNIFF_TRACE1("request def = %s\n",def);
 	SNIFF_TRACE1("request msg = %s\n",msg);
 
-	while(list && list->next_cmd)
+	while (list && list->next_cmd)
 	    list = list->next_cmd;
 	if (!list)
 	    sniff_cmd_ext = cmd_node;
@@ -629,7 +628,7 @@
 	    gui_mch_wait_for_chars(0L);
 #endif
 #ifdef WIN32
-	while(sniffBufStart != NULL)
+	while (sniffBufStart != NULL)
 	{
 	    struct sniffBufNode *node = sniffBufStart;
 	    sniffBufStart = sniffBufStart->next;
@@ -790,7 +789,7 @@
     command   = buffer[0];
     arguments = &buffer[1];
     token = strtok(arguments, sniff_rq_sep);
-    while(argc <3)
+    while (argc <3)
     {
 	if (token)
 	{
@@ -926,7 +925,7 @@
 	default :
 	    break;
     }
-    while(argc)
+    while (argc)
 	vim_free(argv[--argc]);
 }
 
diff -Naur vim73.orig/src/if_tcl.c vim73/src/if_tcl.c
--- vim73.orig/src/if_tcl.c	2010-08-08 13:07:25.000000000 +0000
+++ vim73/src/if_tcl.c	2013-08-04 19:09:10.390611187 +0000
@@ -74,18 +74,18 @@
 #endif
 
 #include <tcl.h>
-#include <errno.h>
 #include <string.h>
 
 typedef struct
 {
     Tcl_Interp *interp;
+    int exitvalue;
     int range_start, range_end;
     int lbase;
     char *curbuf, *curwin;
 } tcl_info;
 
-static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
+static tcl_info tclinfo = { NULL, 0, 0, 0, 0, NULL, NULL };
 
 #define VAR_RANGE1	"::vim::range(start)"
 #define VAR_RANGE2	"::vim::range(begin)"
@@ -280,16 +280,19 @@
  ****************************************************************************/
 
 /*
- * Replace standard "exit" and "catch" commands.
+ * Replace standard "exit" command.
  *
- * This is a design flaw in Tcl -  the standard "exit" command just calls
- * exit() and kills the application.  It should return TCL_EXIT to the
- * app, which then decides if it wants to terminate or not.  In our case,
- * we just delete the Tcl interpreter (and create a new one with the next
- * :tcl command).
+ * Delete the Tcl interpreter; a new one will be created with the next
+ * :tcl command). The exit code is saved (and retrieved in tclexit()).
+ * Since Tcl's exit is never expected to return and this replacement
+ * does, then (except for a trivial case) additional Tcl commands will
+ * be run. Since the interpreter is now marked as deleted, an error
+ * will be returned -- typically "attempt to call eval in deleted
+ * interpreter". Hopefully, at this point, checks for TCL_ERROR take
+ * place and control percolates back up to Vim -- but with this new error
+ * string in the interpreter's result value. Therefore it would be
+ * useless for this routine to return the exit code via Tcl_SetResult().
  */
-#define TCL_EXIT	5
-
     static int
 exitcmd(dummy, interp, objc, objv)
     ClientData dummy UNUSED;
@@ -306,47 +309,12 @@
 		break;
 	    /* FALLTHROUGH */
 	case 1:
-	    Tcl_SetObjResult(interp, Tcl_NewIntObj(value));
-	    return TCL_EXIT;
-	default:
-	    Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
-    }
-    return TCL_ERROR;
-}
+	    tclinfo.exitvalue = value;
 
-    static int
-catchcmd(dummy, interp, objc, objv)
-    ClientData	dummy UNUSED;
-    Tcl_Interp	*interp;
-    int		objc;
-    Tcl_Obj	*CONST objv[];
-{
-    char    *varname = NULL;
-    int	    result;
-
-    switch (objc)
-    {
-	case 3:
-	    varname = Tcl_GetStringFromObj(objv[2], NULL);
-	    /* fallthrough */
-	case 2:
-	    Tcl_ResetResult(interp);
-	    Tcl_AllowExceptions(interp);
-	    result = Tcl_EvalObj(interp, objv[1]);
-	    if (result == TCL_EXIT)
-		return result;
-	    if (varname)
-	    {
-		if (Tcl_SetVar(interp, varname, Tcl_GetStringResult(interp), 0) == NULL)
-		{
-		    Tcl_SetResult(interp, "couldn't save command result in variable", TCL_STATIC);
-		    return TCL_ERROR;
-		}
-	    }
-	    Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
-	    return TCL_OK;
+	    Tcl_DeleteInterp(interp);
+	    break;
 	default:
-	    Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
+	    Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
     }
     return TCL_ERROR;
 }
@@ -373,6 +341,7 @@
 /*
  *  "::vim::buffer list" - create a list of buffer commands.
  *  "::vim::buffer {N}" - create buffer command for buffer N.
+ *  "::vim::buffer exists {N}" - test if buffer N exists.
  *  "::vim::buffer new" - create a new buffer (not implemented)
  */
     static int
@@ -1664,7 +1633,7 @@
 static Tcl_ChannelType channel_type =
 {
     "vimmessage",	/* typeName */
-    NULL,		/* version */
+    TCL_CHANNEL_VERSION_2, /* version */
     channel_close,	/* closeProc */
     channel_input,	/* inputProc */
     channel_output,	/* outputProc */
@@ -1679,6 +1648,8 @@
     NULL,		/* flushProc */
     NULL,		/* handlerProc */
 #endif
+/* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
+ * set above */
 #ifdef TCL_CHANNEL_VERSION_3
     NULL,		/* wideSeekProc */
 #endif
@@ -1742,7 +1713,9 @@
 	Tcl_Interp *interp;
 	static Tcl_Channel ch1, ch2;
 
-	/* replace stdout and stderr */
+	/* Create replacement channels for stdout and stderr; this has to be
+	 * done each time an interpreter is created since the channels are closed
+	 * when the interpreter is deleted */
 	ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
 	ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
 	Tcl_SetStdChannel(ch1, TCL_STDOUT);
@@ -1762,15 +1735,18 @@
 #endif
 
 	Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
+#ifdef WIN3264
+	Tcl_SetChannelOption(interp, ch1, "-translation", "lf");
+#endif
 	Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
+#ifdef WIN3264
+	Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
+#endif
 
-	/* replace some standard Tcl commands */
+	/* replace standard Tcl exit command */
 	Tcl_DeleteCommand(interp, "exit");
 	Tcl_CreateObjCommand(interp, "exit", exitcmd,
 	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
-	Tcl_DeleteCommand(interp, "catch");
-	Tcl_CreateObjCommand(interp, "catch", catchcmd,
-	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
 
 	/* new commands, in ::vim namespace */
 	Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
@@ -1822,6 +1798,8 @@
 	tclinfo.range_end = row2tcl(eap->line2);
 	tclupdatevars();
     }
+
+    tclinfo.exitvalue = 0;
     return OK;
 }
 
@@ -1885,30 +1863,23 @@
 {
     int newerr = OK;
 
-    if (error == TCL_EXIT )
+    if (Tcl_InterpDeleted(tclinfo.interp)     /* True if we intercepted Tcl's exit command */
+#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+	|| Tcl_LimitExceeded(tclinfo.interp)  /* True if the interpreter cannot continue */
+#endif
+	)
     {
-	int retval;
 	char buf[50];
-	Tcl_Obj *robj;
 
-	robj = Tcl_GetObjResult(tclinfo.interp);
-	if( Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK )
+	sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
+	tclerrmsg(buf);
+	if (tclinfo.exitvalue == 0)
 	{
-	    EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
-	    newerr = FAIL;
+	    did_emsg = 0;
+	    newerr = OK;
 	}
 	else
-	{
-	    sprintf(buf, _("E572: exit code %d"), retval);
-	    tclerrmsg(buf);
-	    if (retval == 0 )
-	    {
-		did_emsg = 0;
-		newerr = OK;
-	    }
-	    else
-		newerr = FAIL;
-	}
+	    newerr = FAIL;
 
 	tcldelthisinterp();
     }
@@ -2022,7 +1993,12 @@
 	Tcl_SetVar(tclinfo.interp, var_line, line, 0);
 	Tcl_AllowExceptions(tclinfo.interp);
 	err = Tcl_Eval(tclinfo.interp, script);
-	if (err != TCL_OK)
+	if (err != TCL_OK
+	    || Tcl_InterpDeleted(tclinfo.interp)
+#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
+	    || Tcl_LimitExceeded(tclinfo.interp)
+#endif
+	   )
 	    break;
 	line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
 	if (line)
diff -Naur vim73.orig/src/if_xcmdsrv.c vim73/src/if_xcmdsrv.c
--- vim73.orig/src/if_xcmdsrv.c	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/if_xcmdsrv.c	2013-08-04 19:09:10.393944510 +0000
@@ -572,61 +572,55 @@
 {
     time_t	    start;
     time_t	    now;
-    time_t	    lastChk = 0;
     XEvent	    event;
-    XPropertyEvent *e = (XPropertyEvent *)&event;
-#   define SEND_MSEC_POLL 50
+
+#define UI_MSEC_DELAY 50
+#define SEND_MSEC_POLL 500
+#ifndef HAVE_SELECT
+    struct pollfd   fds;
+
+    fds.fd = ConnectionNumber(dpy);
+    fds.events = POLLIN;
+#else
+    fd_set	    fds;
+    struct timeval  tv;
+
+    tv.tv_sec = 0;
+    tv.tv_usec =  SEND_MSEC_POLL * 1000;
+    FD_ZERO(&fds);
+    FD_SET(ConnectionNumber(dpy), &fds);
+#endif
 
     time(&start);
-    while (endCond(endData) == 0)
+    while (TRUE)
     {
+	while (XCheckWindowEvent(dpy, commWindow, PropertyChangeMask, &event))
+	    serverEventProc(dpy, &event);
+
+	if (endCond(endData) != 0)
+	    break;
+	if (!WindowValid(dpy, w))
+	    break;
 	time(&now);
 	if (seconds >= 0 && (now - start) >= seconds)
 	    break;
-	if (now != lastChk)
-	{
-	    lastChk = now;
-	    if (!WindowValid(dpy, w))
-		break;
-	    /*
-	     * Sometimes the PropertyChange event doesn't come.
-	     * This can be seen in eg: vim -c 'echo remote_expr("gvim", "3+2")'
-	     */
-	    serverEventProc(dpy, NULL);
-	}
+
+	/* Just look out for the answer without calling back into Vim */
 	if (localLoop)
 	{
-	    /* Just look out for the answer without calling back into Vim */
 #ifndef HAVE_SELECT
-	    struct pollfd   fds;
-
-	    fds.fd = ConnectionNumber(dpy);
-	    fds.events = POLLIN;
 	    if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
 		break;
 #else
-	    fd_set	    fds;
-	    struct timeval  tv;
-
-	    tv.tv_sec = 0;
-	    tv.tv_usec =  SEND_MSEC_POLL * 1000;
-	    FD_ZERO(&fds);
-	    FD_SET(ConnectionNumber(dpy), &fds);
-	    if (select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &tv) < 0)
+	    if (select(FD_SETSIZE, &fds, NULL, NULL, &tv) < 0)
 		break;
 #endif
-	    while (XEventsQueued(dpy, QueuedAfterReading) > 0)
-	    {
-		XNextEvent(dpy, &event);
-		if (event.type == PropertyNotify && e->window == commWindow)
-		    serverEventProc(dpy, &event);
-	    }
 	}
 	else
 	{
 	    if (got_int)
 		break;
-	    ui_delay((long)SEND_MSEC_POLL, TRUE);
+	    ui_delay((long)UI_MSEC_DELAY, TRUE);
 	    ui_breakcheck();
 	}
     }
@@ -655,7 +649,6 @@
 	if (SendInit(dpy) < 0)
 	    return NULL;
     }
-    ga_init2(&ga, 1, 100);
 
     /*
      * Read the registry property.
@@ -1198,9 +1191,8 @@
 	if ((*p == 'c' || *p == 'k') && (p[1] == 0))
 	{
 	    Window	resWindow;
-	    char_u	*name, *script, *serial, *end, *res;
+	    char_u	*name, *script, *serial, *end;
 	    Bool	asKeys = *p == 'k';
-	    garray_T	reply;
 	    char_u	*enc;
 
 	    /*
@@ -1256,50 +1248,52 @@
 	    if (script == NULL || name == NULL)
 		continue;
 
-	    /*
-	     * Initialize the result property, so that we're ready at any
-	     * time if we need to return an error.
-	     */
-	    if (resWindow != None)
-	    {
-		ga_init2(&reply, 1, 100);
+            if (serverName != NULL && STRICMP(name, serverName) == 0)
+            {
+                script = serverConvert(enc, script, &tofree);
+                if (asKeys)
+                    server_to_input_buf(script);
+                else
+                {
+                    char_u      *res;
+
+                    res = eval_client_expr_to_string(script);
+		    if (resWindow != None)
+		    {
+			garray_T    reply;
+
+			/* Initialize the result property. */
+			ga_init2(&reply, 1, 100);
 #ifdef FEAT_MBYTE
-		ga_grow(&reply, 50 + STRLEN(p_enc));
-		sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
+			ga_grow(&reply, 50 + STRLEN(p_enc));
+			sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
 						   0, 0, p_enc, 0, serial, 0);
-		reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
+			reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
 #else
-		ga_grow(&reply, 50);
-		sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0);
-		reply.ga_len = 10 + STRLEN(serial);
+			ga_grow(&reply, 50);
+			sprintf(reply.ga_data, "%cr%c-s %s%c-r ",
+							     0, 0, serial, 0);
+			reply.ga_len = 10 + STRLEN(serial);
 #endif
-	    }
-	    res = NULL;
-	    if (serverName != NULL && STRICMP(name, serverName) == 0)
-	    {
-		script = serverConvert(enc, script, &tofree);
-		if (asKeys)
-		    server_to_input_buf(script);
-		else
-		    res = eval_client_expr_to_string(script);
-		vim_free(tofree);
-	    }
-	    if (resWindow != None)
-	    {
-		if (res != NULL)
-		    ga_concat(&reply, res);
-		else if (asKeys == 0)
-		{
-		    ga_concat(&reply, (char_u *)_(e_invexprmsg));
-		    ga_append(&reply, 0);
-		    ga_concat(&reply, (char_u *)"-c 1");
-		}
-		ga_append(&reply, NUL);
-		(void)AppendPropCarefully(dpy, resWindow, commProperty,
-					   reply.ga_data, reply.ga_len);
-		ga_clear(&reply);
-	    }
-	    vim_free(res);
+
+			/* Evaluate the expression and return the result. */
+			if (res != NULL)
+			    ga_concat(&reply, res);
+			else
+			{
+			    ga_concat(&reply, (char_u *)_(e_invexprmsg));
+			    ga_append(&reply, 0);
+			    ga_concat(&reply, (char_u *)"-c 1");
+			}
+			ga_append(&reply, NUL);
+			(void)AppendPropCarefully(dpy, resWindow, commProperty,
+						 reply.ga_data, reply.ga_len);
+			ga_clear(&reply);
+		    }
+                    vim_free(res);
+                }
+                vim_free(tofree);
+            }
 	}
 	else if (*p == 'r' && p[1] == 0)
 	{
diff -Naur vim73.orig/src/integration.c vim73/src/integration.c
--- vim73.orig/src/integration.c	2010-08-08 13:09:21.000000000 +0000
+++ vim73/src/integration.c	2013-08-04 19:09:10.400611157 +0000
@@ -33,7 +33,6 @@
 #include <sys/un.h>
 #endif
 
-#include <errno.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/param.h>
diff -Naur vim73.orig/src/keymap.h vim73/src/keymap.h
--- vim73.orig/src/keymap.h	2010-07-25 13:14:04.000000000 +0000
+++ vim73/src/keymap.h	2013-08-04 19:09:10.403944480 +0000
@@ -92,13 +92,13 @@
  */
 #define KS_TEAROFF		244
 
-/* used for JSB term mouse */
+/* Used for JSB term mouse. */
 #define KS_JSBTERM_MOUSE	243
 
-/* used a termcap entry that produces a normal character */
+/* Used a termcap entry that produces a normal character. */
 #define KS_KEY			242
 
-/* Used for the qnx pterm mouse */
+/* Used for the qnx pterm mouse. */
 #define KS_PTERM_MOUSE		241
 
 /* Used for click in a tab pages label. */
@@ -107,6 +107,12 @@
 /* Used for menu in a tab pages line. */
 #define KS_TABMENU		239
 
+/* Used for the urxvt mouse. */
+#define KS_URXVT_MOUSE		238
+
+/* Used for the sgr mouse. */
+#define KS_SGR_MOUSE		237
+
 /*
  * Filler used after KS_SPECIAL and others
  */
@@ -408,6 +414,8 @@
 #define K_DEC_MOUSE	TERMCAP2KEY(KS_DEC_MOUSE, KE_FILLER)
 #define K_JSBTERM_MOUSE	TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
 #define K_PTERM_MOUSE	TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
+#define K_URXVT_MOUSE	TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
+#define K_SGR_MOUSE	TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
 
 #define K_SELECT	TERMCAP2KEY(KS_SELECT, KE_FILLER)
 #define K_TEAROFF	TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
diff -Naur vim73.orig/src/link.sh vim73/src/link.sh
--- vim73.orig/src/link.sh	2010-07-21 19:43:29.000000000 +0000
+++ vim73/src/link.sh	2013-08-04 19:09:10.403944480 +0000
@@ -5,7 +5,7 @@
 # libraries when they exist, but this doesn't mean they are needed for Vim.
 #
 #      Author: Bram Moolenaar
-# Last change: 2006 Sep 26
+# Last change: 2010 Nov 03
 #     License: Public domain
 #
 # Warning: This fails miserably if the linker doesn't return an error code!
@@ -16,11 +16,23 @@
 echo "$LINK " >link.cmd
 exit_value=0
 
+if test "$LINK_AS_NEEDED" = yes; then
+  echo "link.sh: \$LINK_AS_NEEDED set to 'yes': invoking linker directly."
+  cat link.cmd
+  if sh link.cmd; then
+    exit_value=0
+    echo "link.sh: Linked fine"
+  else
+    exit_value=$?
+    echo "link.sh: Linking failed"
+  fi
+else
+  if test -f auto/link.sed; then
+
 #
 # If auto/link.sed already exists, use it.  We assume a previous run of
 # link.sh has found the correct set of libraries.
 #
-if test -f auto/link.sed; then
   echo "link.sh: The file 'auto/link.sed' exists, which is going to be used now."
   echo "link.sh: If linking fails, try deleting the auto/link.sed file."
   echo "link.sh: If this fails too, try creating an empty auto/link.sed file."
@@ -124,6 +136,8 @@
   fi
 fi
 
+fi
+
 #
 # cleanup
 #
diff -Naur vim73.orig/src/macros.h vim73/src/macros.h
--- vim73.orig/src/macros.h	2010-07-17 19:41:21.000000000 +0000
+++ vim73/src/macros.h	2013-08-04 19:09:10.407277804 +0000
@@ -99,6 +99,11 @@
 # define MB_TOUPPER(c)	TOUPPER_LOC(c)
 #endif
 
+/* Use our own isdigit() replacement, because on MS-Windows isdigit() returns
+ * non-zero for superscript 1.  Also avoids that isdigit() crashes for numbers
+ * below 0 and above 255.  */
+#define VIM_ISDIGIT(c) ((unsigned)(c) - '0' < 10)
+
 /* Like isalpha() but reject non-ASCII characters.  Can't be used with a
  * special key (negative value). */
 #ifdef EBCDIC
@@ -107,18 +112,12 @@
 # define ASCII_ISLOWER(c) islower(c)
 # define ASCII_ISUPPER(c) isupper(c)
 #else
-# define ASCII_ISALPHA(c) ((c) < 0x7f && isalpha(c))
-# define ASCII_ISALNUM(c) ((c) < 0x7f && isalnum(c))
-# define ASCII_ISLOWER(c) ((c) < 0x7f && islower(c))
-# define ASCII_ISUPPER(c) ((c) < 0x7f && isupper(c))
+# define ASCII_ISLOWER(c) ((unsigned)(c) - 'a' < 26)
+# define ASCII_ISUPPER(c) ((unsigned)(c) - 'A' < 26)
+# define ASCII_ISALPHA(c) (ASCII_ISUPPER(c) || ASCII_ISLOWER(c))
+# define ASCII_ISALNUM(c) (ASCII_ISALPHA(c) || VIM_ISDIGIT(c))
 #endif
 
-/* Use our own isdigit() replacement, because on MS-Windows isdigit() returns
- * non-zero for superscript 1.  Also avoids that isdigit() crashes for numbers
- * below 0 and above 255.  For complicated arguments and in/decrement use
- * vim_isdigit() instead. */
-#define VIM_ISDIGIT(c) ((c) >= '0' && (c) <= '9')
-
 /* macro version of chartab().
  * Only works with values 0-255!
  * Doesn't work for UTF-8 mode with chars >= 0x80. */
@@ -259,6 +258,8 @@
  * PTR2CHAR(): get character from pointer.
  */
 #ifdef FEAT_MBYTE
+/* Get the length of the character p points to */
+# define MB_PTR2LEN(p)		(has_mbyte ? (*mb_ptr2len)(p) : 1)
 /* Advance multi-byte pointer, skip over composing chars. */
 # define mb_ptr_adv(p)	    p += has_mbyte ? (*mb_ptr2len)(p) : 1
 /* Advance multi-byte pointer, do not skip over composing chars. */
@@ -270,13 +271,16 @@
 
 # define MB_COPY_CHAR(f, t) if (has_mbyte) mb_copy_char(&f, &t); else *t++ = *f++
 # define MB_CHARLEN(p)	    (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
+# define MB_CHAR2LEN(c)	    (has_mbyte ? mb_char2len(c) : 1)
 # define PTR2CHAR(p)	    (has_mbyte ? mb_ptr2char(p) : (int)*(p))
 #else
+# define MB_PTR2LEN(p)		1
 # define mb_ptr_adv(p)		++p
 # define mb_cptr_adv(p)		++p
 # define mb_ptr_back(s, p)	--p
 # define MB_COPY_CHAR(f, t)	*t++ = *f++
 # define MB_CHARLEN(p)		STRLEN(p)
+# define MB_CHAR2LEN(c)		1
 # define PTR2CHAR(p)		((int)*(p))
 #endif
 
@@ -285,3 +289,17 @@
 #else
 # define DO_AUTOCHDIR
 #endif
+
+#if defined(FEAT_SCROLLBIND) && defined(FEAT_CURSORBIND)
+# define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE; (wp)->w_p_crb = FALSE
+#else
+# if defined(FEAT_SCROLLBIND)
+#  define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE
+# else
+#  if defined(FEAT_CURSORBIND)
+#   define RESET_BINDING(wp)  (wp)->w_p_crb = FALSE
+#  else
+#   define RESET_BINDING(wp)
+#  endif
+# endif
+#endif
diff -Naur vim73.orig/src/main.aap vim73/src/main.aap
--- vim73.orig/src/main.aap	2010-07-14 20:41:01.000000000 +0000
+++ vim73/src/main.aap	2013-08-04 19:09:10.407277804 +0000
@@ -1213,9 +1213,9 @@
     :move gui_mac.rsrc.rsrcfork $(RESDIR)/$(VIMNAME).rsrc
 
 # po/Make_osx.pl says something about generating a Mac message file
-# for Ukrananian.  Would somebody using Mac OS X in Ukranian
+# for Ukrainian.  Would somebody using Mac OS X in Ukrainian
 # *really* be upset that Carbon Vim was not localised in
-# Ukranian?
+# Ukrainian?
 #
 #bundle-language: bundle-dir po/Make_osx.pl
 #	cd po && perl Make_osx.pl --outdir ../$(RESDIR) $(MULTILANG)
diff -Naur vim73.orig/src/main.c vim73/src/main.c
--- vim73.orig/src/main.c	2010-08-08 13:09:55.000000000 +0000
+++ vim73/src/main.c	2013-08-04 19:09:10.413944450 +0000
@@ -7,10 +7,6 @@
  * See README.txt for an overview of the Vim source code.
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"		/* for close() and dup() */
-#endif
-
 #define EXTERN
 #include "vim.h"
 
@@ -96,37 +92,39 @@
 #define EDIT_TAG    3	    /* tag name argument given, use tagname */
 #define EDIT_QF	    4	    /* start in quickfix mode */
 
-#if defined(UNIX) || defined(VMS)
+#if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
 static int file_owned __ARGS((char *fname));
 #endif
 static void mainerr __ARGS((int, char_u *));
+#ifndef NO_VIM_MAIN
 static void main_msg __ARGS((char *s));
 static void usage __ARGS((void));
 static int get_number_arg __ARGS((char_u *p, int *idx, int def));
-#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+# if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
 static void init_locale __ARGS((void));
-#endif
+# endif
 static void parse_command_name __ARGS((mparm_T *parmp));
 static void early_arg_scan __ARGS((mparm_T *parmp));
 static void command_line_scan __ARGS((mparm_T *parmp));
 static void check_tty __ARGS((mparm_T *parmp));
 static void read_stdin __ARGS((void));
 static void create_windows __ARGS((mparm_T *parmp));
-#ifdef FEAT_WINDOWS
+# ifdef FEAT_WINDOWS
 static void edit_buffers __ARGS((mparm_T *parmp));
-#endif
+# endif
 static void exe_pre_commands __ARGS((mparm_T *parmp));
 static void exe_commands __ARGS((mparm_T *parmp));
 static void source_startup_scripts __ARGS((mparm_T *parmp));
 static void main_start_gui __ARGS((void));
-#if defined(HAS_SWAP_EXISTS_ACTION)
+# if defined(HAS_SWAP_EXISTS_ACTION)
 static void check_swap_exists_action __ARGS((void));
-#endif
-#ifdef FEAT_CLIENTSERVER
+# endif
+# if defined(FEAT_CLIENTSERVER) || defined(PROTO)
 static void exec_on_server __ARGS((mparm_T *parmp));
 static void prepare_server __ARGS((mparm_T *parmp));
 static void cmdsrv_main __ARGS((int *argc, char **argv, char_u *serverName_arg, char_u **serverStr));
 static char_u *serverMakeName __ARGS((char_u *arg, char *cmd));
+# endif
 #endif
 
 
@@ -149,7 +147,8 @@
 #define ME_INVALID_ARG		5
 };
 
-#ifndef PROTO	    /* don't want a prototype for main() */
+#ifndef PROTO		/* don't want a prototype for main() */
+#ifndef NO_VIM_MAIN	/* skip this for unittests */
     int
 # ifdef VIMDLL
 _export
@@ -193,6 +192,13 @@
     params.window_count = -1;
 #endif
 
+#ifdef FEAT_RUBY
+    {
+	int ruby_stack_start;
+	vim_ruby_init((void *)&ruby_stack_start);
+    }
+#endif
+
 #ifdef FEAT_TCL
     vim_tcl_init(params.argv[0]);
 #endif
@@ -555,6 +561,43 @@
     debug_break_level = params.use_debug_break_level;
 #endif
 
+#ifdef FEAT_MZSCHEME
+    /*
+     * Newer version of MzScheme (Racket) require earlier (trampolined)
+     * initialisation via scheme_main_setup.
+     * Implement this by initialising it as early as possible
+     * and splitting off remaining Vim main into vim_main2
+     */
+    {
+	/* Pack up preprocessed command line arguments.
+	 * It is safe because Scheme does not access argc/argv. */
+	char *args[2];
+	args[0] = (char *)fname;
+	args[1] = (char *)&params;
+	return mzscheme_main(2, args);
+    }
+}
+#endif
+#endif /* NO_VIM_MAIN */
+
+/* vim_main2() needs to be produced when FEAT_MZSCHEME is defined even when
+ * NO_VIM_MAIN is defined. */
+#ifdef FEAT_MZSCHEME
+    int
+vim_main2(int argc UNUSED, char **argv UNUSED)
+{
+# ifndef NO_VIM_MAIN
+    char_u	*fname = (char_u *)argv[0];
+    mparm_T	params;
+
+    memcpy(&params, argv[1], sizeof(params));
+# else
+    return 0;
+}
+# endif
+#endif
+
+#ifndef NO_VIM_MAIN
     /* Execute --cmd arguments. */
     exe_pre_commands(&params);
 
@@ -768,6 +811,9 @@
 
     starttermcap();	    /* start termcap if not done by wait_return() */
     TIME_MSG("start termcap");
+#if defined(FEAT_TERMRESPONSE) && defined(FEAT_MBYTE)
+    may_req_ambiguous_character_width();
+#endif
 
 #ifdef FEAT_MOUSE
     setmouse();				/* may start using the mouse */
@@ -904,6 +950,18 @@
     TIME_MSG("VimEnter autocommands");
 #endif
 
+#if defined(FEAT_EVAL) && defined(FEAT_CLIPBOARD)
+    /* Adjust default register name for "unnamed" in 'clipboard'. Can only be
+     * done after the clipboard is available and all initial commands that may
+     * modify the 'clipboard' setting have run; i.e. just before entering the
+     * main loop. */
+    {
+	int default_regname = 0;
+	adjust_clip_reg(&default_regname);
+	set_reg_var(default_regname);
+    }
+#endif
+
 #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
     /* When a startup script or session file setup for diff'ing and
      * scrollbind, sync the scrollbind now. */
@@ -940,7 +998,7 @@
     if (netbeansArg != NULL && strncmp("-nb", netbeansArg, 3) == 0)
     {
 # ifdef FEAT_GUI
-#  if !defined(FEAT_GUI_MOTIF) && !defined(FEAT_GUI_GTK)  \
+#  if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
 		&& !defined(FEAT_GUI_W32)
 	if (gui.in_use)
 	{
@@ -958,17 +1016,12 @@
 
     /*
      * Call the main command loop.  This never returns.
-     * For embedded MzScheme the main_loop will be called by Scheme
-     * for proper stack tracking
-     */
-#ifndef FEAT_MZSCHEME
+    */
     main_loop(FALSE, FALSE);
-#else
-    mzscheme_main();
-#endif
 
     return 0;
 }
+#endif /* NO_VIM_MAIN */
 #endif /* PROTO */
 
 /*
@@ -1009,6 +1062,7 @@
 	skip_redraw = FALSE;
 	RedrawingDisabled = 0;
 	no_wait_return = 0;
+	vgetc_busy = 0;
 # ifdef FEAT_EVAL
 	emsg_skip = 0;
 # endif
@@ -1121,6 +1175,19 @@
 	    }
 #endif
 
+#ifdef FEAT_AUTOCMD
+	    /* Trigger TextChanged if b_changedtick differs. */
+	    if (!finish_op && has_textchanged()
+		    && last_changedtick != curbuf->b_changedtick)
+	    {
+		if (last_changedtick_buf == curbuf)
+		    apply_autocmds(EVENT_TEXTCHANGED, NULL, NULL,
+							       FALSE, curbuf);
+		last_changedtick_buf = curbuf;
+		last_changedtick = curbuf->b_changedtick;
+	    }
+#endif
+
 #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
 	    /* Scroll-binding for diff mode may have been postponed until
 	     * here.  Avoids doing it for every change. */
@@ -1202,7 +1269,9 @@
 			|| conceal_cursor_line(curwin)
 			|| need_cursor_line_redraw))
 	    {
-		if (conceal_old_cursor_line != conceal_new_cursor_line)
+		if (conceal_old_cursor_line != conceal_new_cursor_line
+			&& conceal_old_cursor_line
+						<= curbuf->b_ml.ml_line_count)
 		    update_single_line(curwin, conceal_old_cursor_line);
 		update_single_line(curwin, conceal_new_cursor_line);
 		curwin->w_valid &= ~VALID_CROW;
@@ -1330,12 +1399,15 @@
 	    for (wp = (tp == curtab)
 		    ? firstwin : tp->tp_firstwin; wp != NULL; wp = wp->w_next)
 	    {
+		if (wp->w_buffer == NULL)
+		    /* Autocmd must have close the buffer already, skip. */
+		    continue;
 		buf = wp->w_buffer;
 		if (buf->b_changedtick != -1)
 		{
 		    apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname,
 						    buf->b_fname, FALSE, buf);
-		    buf->b_changedtick = -1;    /* note that we did it already */
+		    buf->b_changedtick = -1;  /* note that we did it already */
 		    /* start all over, autocommands may mess up the lists */
 		    next_tp = first_tabpage;
 		    break;
@@ -1432,6 +1504,7 @@
     mch_exit(exitval);
 }
 
+#ifndef NO_VIM_MAIN
 /*
  * Get a (optional) count for a Vim argument.
  */
@@ -2335,7 +2408,7 @@
 	     * Look for evidence of non-Cygwin paths before we bother.
 	     * This is only for when using the Unix files.
 	     */
-	    if (strpbrk(p, "\\:") != NULL && !path_with_url(p))
+	    if (vim_strpbrk(p, "\\:") != NULL && !path_with_url(p))
 	    {
 		char posix_path[PATH_MAX];
 
@@ -2345,7 +2418,7 @@
 		cygwin_conv_to_posix_path(p, posix_path);
 # endif
 		vim_free(p);
-		p = vim_strsave(posix_path);
+		p = vim_strsave((char_u *)posix_path);
 		if (p == NULL)
 		    mch_exit(2);
 	    }
@@ -2743,7 +2816,25 @@
 # ifdef FEAT_AUTOCMD
     --autocmd_no_enter;
 # endif
-    win_enter(firstwin, FALSE);		/* back to first window */
+#if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+    /*
+     * Avoid making a preview window the current window.
+     */
+    if (firstwin->w_p_pvw)
+    {
+       win_T   *win;
+
+       for (win = firstwin; win != NULL; win = win->w_next)
+           if (!win->w_p_pvw)
+           {
+               firstwin = win;
+               break;
+           }
+    }
+#endif
+    /* make the first window the current window */
+    win_enter(firstwin, FALSE);
+
 # ifdef FEAT_AUTOCMD
     --autocmd_no_leave;
 # endif
@@ -2908,6 +2999,10 @@
 		&& do_source((char_u *)USR_VIMRC_FILE3, TRUE,
 							   DOSO_VIMRC) == FAIL
 #endif
+#ifdef USR_VIMRC_FILE4
+		&& do_source((char_u *)USR_VIMRC_FILE4, TRUE,
+							   DOSO_VIMRC) == FAIL
+#endif
 		&& process_env((char_u *)"EXINIT", FALSE) == FAIL
 		&& do_source((char_u *)USR_EXRC_FILE, FALSE, DOSO_NONE) == FAIL)
 	    {
@@ -2996,6 +3091,8 @@
 #endif
 }
 
+#endif  /* NO_VIM_MAIN */
+
 /*
  * Get an environment variable, and execute it as Ex commands.
  * Returns FAIL if the environment variable was not executed, OK otherwise.
@@ -3035,7 +3132,7 @@
     return FAIL;
 }
 
-#if defined(UNIX) || defined(VMS)
+#if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
 /*
  * Return TRUE if we are certain the user owns the file "fname".
  * Used for ".vimrc" and ".exrc".
@@ -3093,6 +3190,7 @@
     mainerr(ME_ARG_MISSING, str);
 }
 
+#ifndef NO_VIM_MAIN
 /*
  * print a message with three spaces prepended and '\n' appended.
  */
@@ -3155,6 +3253,7 @@
 #endif
     main_msg(_("-v\t\t\tVi mode (like \"vi\")"));
     main_msg(_("-e\t\t\tEx mode (like \"ex\")"));
+    main_msg(_("-E\t\t\tImproved Ex mode"));
     main_msg(_("-s\t\t\tSilent (batch) mode (only for \"ex\")"));
 #ifdef FEAT_DIFF
     main_msg(_("-d\t\t\tDiff mode (like \"vimdiff\")"));
@@ -3270,11 +3369,6 @@
     main_msg(_("+reverse\t\tDon't use reverse video (also: +rv)"));
     main_msg(_("-xrm <resource>\tSet the specified resource"));
 #endif /* FEAT_GUI_X11 */
-#if defined(FEAT_GUI) && defined(RISCOS)
-    mch_msg(_("\nArguments recognised by gvim (RISC OS version):\n"));
-    main_msg(_("--columns <number>\tInitial width of window in columns"));
-    main_msg(_("--rows <number>\tInitial height of window in rows"));
-#endif
 #ifdef FEAT_GUI_GTK
     mch_msg(_("\nArguments recognised by gvim (GTK+ version):\n"));
     main_msg(_("-font <font>\t\tUse <font> for normal text (also: -fn)"));
@@ -3283,6 +3377,7 @@
     main_msg(_("-display <display>\tRun vim on <display> (also: --display)"));
     main_msg(_("--role <role>\tSet a unique role to identify the main window"));
     main_msg(_("--socketid <xid>\tOpen Vim inside another GTK widget"));
+    main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
 #endif
 #ifdef FEAT_GUI_W32
     main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
@@ -3292,7 +3387,10 @@
 #ifdef FEAT_GUI_GNOME
     /* Gnome gives extra messages for --help if we continue, but not for -h. */
     if (gui.starting)
+    {
 	mch_msg("\n");
+	gui.dofork = FALSE;
+    }
     else
 #endif
 	mch_exit(0);
@@ -3313,6 +3411,8 @@
 }
 #endif
 
+#endif
+
 #if defined(STARTUPTIME) || defined(PROTO)
 static void time_diff __ARGS((struct timeval *then, struct timeval *now));
 
@@ -3422,7 +3522,7 @@
 
 #endif
 
-#if defined(FEAT_CLIENTSERVER) || defined(PROTO)
+#if (defined(FEAT_CLIENTSERVER) && !defined(NO_VIM_MAIN)) || defined(PROTO)
 
 /*
  * Common code for the X command server and the Win32 command server.
@@ -3806,7 +3906,7 @@
     int		i;
     char_u	*inicmd = NULL;
     char_u	*p;
-    char_u	cwd[MAXPATHL];
+    char_u	*cwd;
 
     if (filec > 0 && filev[0][0] == '+')
     {
@@ -3817,15 +3917,25 @@
     /* Check if we have at least one argument. */
     if (filec <= 0)
 	mainerr_arg_missing((char_u *)filev[-1]);
+
+    /* Temporarily cd to the current directory to handle relative file names. */
+    cwd = alloc(MAXPATHL);
+    if (cwd == NULL)
+	return NULL;
     if (mch_dirname(cwd, MAXPATHL) != OK)
+    {
+	vim_free(cwd);
 	return NULL;
-    if ((p = vim_strsave_escaped_ext(cwd,
+    }
+    p = vim_strsave_escaped_ext(cwd,
 #ifdef BACKSLASH_IN_FILENAME
 		    "",  /* rem_backslash() will tell what chars to escape */
 #else
 		    PATH_ESC_CHARS,
 #endif
-		    '\\', TRUE)) == NULL)
+		    '\\', TRUE);
+    vim_free(cwd);
+    if (p == NULL)
 	return NULL;
     ga_init2(&ga, 1, 100);
     ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
@@ -3858,13 +3968,20 @@
 	ga_concat(&ga, p);
 	vim_free(p);
     }
+    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
+
     /* The :drop commands goes to Insert mode when 'insertmode' is set, use
      * CTRL-\ CTRL-N again. */
-    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
-    ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd -");
+    ga_concat(&ga, (char_u *)"<C-\\><C-N>");
+
+    /* Switch back to the correct current directory (prior to temporary path
+     * switch) unless 'autochdir' is set, in which case it will already be
+     * correct after the :drop command. */
+    ga_concat(&ga, (char_u *)":if !exists('+acd')||!&acd|cd -|endif<CR>");
+
     if (sendReply)
-	ga_concat(&ga, (char_u *)"<CR>:call SetupRemoteReplies()");
-    ga_concat(&ga, (char_u *)"<CR>:");
+	ga_concat(&ga, (char_u *)":call SetupRemoteReplies()<CR>");
+    ga_concat(&ga, (char_u *)":");
     if (inicmd != NULL)
     {
 	/* Can't use <CR> after "inicmd", because an "startinsert" would cause
@@ -3881,6 +3998,32 @@
 }
 
 /*
+ * Make our basic server name: use the specified "arg" if given, otherwise use
+ * the tail of the command "cmd" we were started with.
+ * Return the name in allocated memory.  This doesn't include a serial number.
+ */
+    static char_u *
+serverMakeName(arg, cmd)
+    char_u	*arg;
+    char	*cmd;
+{
+    char_u *p;
+
+    if (arg != NULL && *arg != NUL)
+	p = vim_strsave_up(arg);
+    else
+    {
+	p = vim_strsave_up(gettail((char_u *)cmd));
+	/* Remove .exe or .bat from the name. */
+	if (p != NULL && vim_strchr(p, '.') != NULL)
+	    *vim_strchr(p, '.') = NUL;
+    }
+    return p;
+}
+#endif /* FEAT_CLIENTSERVER */
+
+#if defined(FEAT_CLIENTSERVER) || defined(PROTO)
+/*
  * Replace termcodes such as <CR> and insert as key presses if there is room.
  */
     void
@@ -3924,8 +4067,6 @@
 
 /*
  * Evaluate an expression that the client sent to a string.
- * Handles disabling error messages and disables debugging, otherwise Vim
- * hangs, waiting for "cont" to be typed.
  */
     char_u *
 eval_client_expr_to_string(expr)
@@ -3935,15 +4076,21 @@
     int		save_dbl = debug_break_level;
     int		save_ro = redir_off;
 
+     /* Disable debugging, otherwise Vim hangs, waiting for "cont" to be
+      * typed. */
     debug_break_level = -1;
     redir_off = 0;
-    ++emsg_skip;
+    /* Do not display error message, otherwise Vim hangs, waiting for "cont"
+     * to be typed.  Do generate errors so that try/catch works. */
+    ++emsg_silent;
 
     res = eval_to_string(expr, NULL, TRUE);
 
     debug_break_level = save_dbl;
     redir_off = save_ro;
-    --emsg_skip;
+    --emsg_silent;
+    if (emsg_silent < 0)
+	emsg_silent = 0;
 
     /* A client can tell us to redraw, but not to display the cursor, so do
      * that here. */
@@ -3991,32 +4138,7 @@
 # endif
     return res;
 }
-
-
-/*
- * Make our basic server name: use the specified "arg" if given, otherwise use
- * the tail of the command "cmd" we were started with.
- * Return the name in allocated memory.  This doesn't include a serial number.
- */
-    static char_u *
-serverMakeName(arg, cmd)
-    char_u	*arg;
-    char	*cmd;
-{
-    char_u *p;
-
-    if (arg != NULL && *arg != NUL)
-	p = vim_strsave_up(arg);
-    else
-    {
-	p = vim_strsave_up(gettail((char_u *)cmd));
-	/* Remove .exe or .bat from the name. */
-	if (p != NULL && vim_strchr(p, '.') != NULL)
-	    *vim_strchr(p, '.') = NUL;
-    }
-    return p;
-}
-#endif /* FEAT_CLIENTSERVER */
+#endif
 
 /*
  * When FEAT_FKMAP is defined, also compile the Farsi source code.
diff -Naur vim73.orig/src/mark.c vim73/src/mark.c
--- vim73.orig/src/mark.c	2010-08-13 09:14:35.000000000 +0000
+++ vim73/src/mark.c	2013-08-04 19:09:10.417277774 +0000
@@ -98,6 +98,19 @@
 	return OK;
     }
 
+#ifdef FEAT_VISUAL
+    if (c == '<')
+    {
+	curbuf->b_visual.vi_start = *pos;
+	return OK;
+    }
+    if (c == '>')
+    {
+	curbuf->b_visual.vi_end = *pos;
+	return OK;
+    }
+#endif
+
 #ifndef EBCDIC
     if (c > 'z')	    /* some islower() and isupper() cannot handle
 				characters above 127 */
@@ -291,7 +304,7 @@
 #endif
 
 /*
- * Find mark "c".
+ * Find mark "c" in buffer pointed to by "buf".
  * If "changefile" is TRUE it's allowed to edit another file for '0, 'A, etc.
  * If "fnum" is not NULL store the fnum there for '0, 'A etc., don't edit
  * another file.
@@ -302,15 +315,25 @@
  * - -1 if mark is in other file and jumped there (only if changefile is TRUE)
  */
     pos_T *
+getmark_buf(buf, c, changefile)
+    buf_T	*buf;
+    int		c;
+    int		changefile;
+{
+    return getmark_buf_fnum(buf, c, changefile, NULL);
+}
+
+    pos_T *
 getmark(c, changefile)
     int		c;
     int		changefile;
 {
-    return getmark_fnum(c, changefile, NULL);
+    return getmark_buf_fnum(curbuf, c, changefile, NULL);
 }
 
     pos_T *
-getmark_fnum(c, changefile, fnum)
+getmark_buf_fnum(buf, c, changefile, fnum)
+    buf_T	*buf;
     int		c;
     int		changefile;
     int		*fnum;
@@ -338,15 +361,15 @@
 	posp = &pos_copy;		/*   w_pcmark may be changed soon */
     }
     else if (c == '"')			/* to pos when leaving buffer */
-	posp = &(curbuf->b_last_cursor);
+	posp = &(buf->b_last_cursor);
     else if (c == '^')			/* to where Insert mode stopped */
-	posp = &(curbuf->b_last_insert);
+	posp = &(buf->b_last_insert);
     else if (c == '.')			/* to where last change was made */
-	posp = &(curbuf->b_last_change);
+	posp = &(buf->b_last_change);
     else if (c == '[')			/* to start of previous operator */
-	posp = &(curbuf->b_op_start);
+	posp = &(buf->b_op_start);
     else if (c == ']')			/* to end of previous operator */
-	posp = &(curbuf->b_op_end);
+	posp = &(buf->b_op_end);
     else if (c == '{' || c == '}')	/* to previous/next paragraph */
     {
 	pos_T	pos;
@@ -382,8 +405,8 @@
 #ifdef FEAT_VISUAL
     else if (c == '<' || c == '>')	/* start/end of visual area */
     {
-	startp = &curbuf->b_visual.vi_start;
-	endp = &curbuf->b_visual.vi_end;
+	startp = &buf->b_visual.vi_start;
+	endp = &buf->b_visual.vi_end;
 	if ((c == '<') == lt(*startp, *endp))
 	    posp = startp;
 	else
@@ -391,7 +414,7 @@
 	/*
 	 * For Visual line mode, set mark at begin or end of line
 	 */
-	if (curbuf->b_visual.vi_mode == 'V')
+	if (buf->b_visual.vi_mode == 'V')
 	{
 	    pos_copy = *posp;
 	    posp = &pos_copy;
@@ -407,7 +430,7 @@
 #endif
     else if (ASCII_ISLOWER(c))		/* normal named mark */
     {
-	posp = &(curbuf->b_namedm[c - 'a']);
+	posp = &(buf->b_namedm[c - 'a']);
     }
     else if (ASCII_ISUPPER(c) || VIM_ISDIGIT(c))	/* named file mark */
     {
@@ -422,7 +445,7 @@
 
 	if (fnum != NULL)
 	    *fnum = namedfm[c].fmark.fnum;
-	else if (namedfm[c].fmark.fnum != curbuf->b_fnum)
+	else if (namedfm[c].fmark.fnum != buf->b_fnum)
 	{
 	    /* mark is in another file */
 	    posp = &pos_copy;
@@ -1024,6 +1047,7 @@
 #ifdef FEAT_WINDOWS
     tabpage_T	*tab;
 #endif
+    static pos_T initpos = INIT_POS_T(1, 0, 0);
 
     if (line2 < line1 && amount_after == 0L)	    /* nothing to do */
 	return;
@@ -1049,6 +1073,11 @@
 	/* last change position */
 	one_adjust(&(curbuf->b_last_change.lnum));
 
+	/* last cursor position, if it was set */
+	if (!equalpos(curbuf->b_last_cursor, initpos))
+	    one_adjust(&(curbuf->b_last_cursor.lnum));
+
+
 #ifdef FEAT_JUMPLIST
 	/* list of change positions */
 	for (i = 0; i < curbuf->b_changelistlen; ++i)
@@ -1750,7 +1779,10 @@
 	    {
 		if (line[1] != NUL)
 		{
-		    sscanf((char *)line + 2, "%ld %u", &pos.lnum, &pos.col);
+		    unsigned u;
+
+		    sscanf((char *)line + 2, "%ld %u", &pos.lnum, &u);
+		    pos.col = u;
 		    switch (line[1])
 		    {
 			case '"': curbuf->b_last_cursor = pos; break;
diff -Naur vim73.orig/src/mbyte.c vim73/src/mbyte.c
--- vim73.orig/src/mbyte.c	2010-07-18 13:05:44.000000000 +0000
+++ vim73/src/mbyte.c	2013-08-04 19:09:10.423944420 +0000
@@ -132,6 +132,7 @@
 static int dbcs_char2cells __ARGS((int c));
 static int dbcs_ptr2cells_len __ARGS((char_u *p, int size));
 static int dbcs_ptr2char __ARGS((char_u *p));
+static int utf_safe_read_char_adv __ARGS((char_u **s, size_t *n));
 
 /*
  * Lookup table to quickly get the length in bytes of a UTF-8 character from
@@ -612,7 +613,7 @@
     enc_dbcs = enc_dbcs_new;
     has_mbyte = (enc_dbcs != 0 || enc_utf8);
 
-#ifdef WIN3264
+#if defined(WIN3264) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
     enc_codepage = encname2codepage(p_enc);
     enc_latin9 = (STRCMP(p_enc, "iso-8859-15") == 0);
 #endif
@@ -707,7 +708,7 @@
 	     */
 	    n = (i & 0x80) ? 2 : 1;
 # else
-	    char buf[MB_MAXBYTES];
+	    char buf[MB_MAXBYTES + 1];
 # ifdef X_LOCALE
 #  ifndef mblen
 #   define mblen _Xmblen
@@ -837,6 +838,27 @@
 }
 
 /*
+ * Remove all BOM from "s" by moving remaining text.
+ */
+    void
+remove_bom(s)
+    char_u *s;
+{
+    if (enc_utf8)
+    {
+	char_u *p = s;
+
+	while ((p = vim_strbyte(p, 0xef)) != NULL)
+	{
+	    if (p[1] == 0xbb && p[2] == 0xbf)
+		STRMOVE(p, p + 3);
+	    else
+		++p;
+	}
+    }
+}
+
+/*
  * Get class of pointer:
  * 0 for blank or NUL
  * 1 for punctuation
@@ -847,11 +869,19 @@
 mb_get_class(p)
     char_u	*p;
 {
+    return mb_get_class_buf(p, curbuf);
+}
+
+    int
+mb_get_class_buf(p, buf)
+    char_u	*p;
+    buf_T	*buf;
+{
     if (MB_BYTE2LEN(p[0]) == 1)
     {
 	if (p[0] == NUL || vim_iswhite(p[0]))
 	    return 0;
-	if (vim_iswordc(p[0]))
+	if (vim_iswordc_buf(p[0], buf))
 	    return 2;
 	return 1;
     }
@@ -873,7 +903,7 @@
 {
     switch (enc_dbcs)
     {
-	/* please add classfy routine for your language in here */
+	/* please add classify routine for your language in here */
 
 	case DBCS_JPNU:	/* ? */
 	case DBCS_JPN:
@@ -973,7 +1003,7 @@
 		 * 26 : Box Drawings
 		 * 27 : Unit Symbols
 		 * 28 : Circled/Parenthesized Letter
-		 * 29 : Hirigana/Katakana
+		 * 29 : Hiragana/Katakana
 		 * 30 : Cyrillic Letter
 		 */
 
@@ -1024,7 +1054,7 @@
 			    return 28;
 		    case 0xAA:
 		    case 0xAB:
-			/* Hirigana/Katakana */
+			/* Hiragana/Katakana */
 			return 29;
 		    case 0xAC:
 			/* Cyrillic Letter */
@@ -1701,6 +1731,66 @@
 }
 
 /*
+ * Convert a UTF-8 byte sequence to a wide character.
+ * String is assumed to be terminated by NUL or after "n" bytes, whichever
+ * comes first.
+ * The function is safe in the sense that it never accesses memory beyond the
+ * first "n" bytes of "s".
+ *
+ * On success, returns decoded codepoint, advances "s" to the beginning of
+ * next character and decreases "n" accordingly.
+ *
+ * If end of string was reached, returns 0 and, if "n" > 0, advances "s" past
+ * NUL byte.
+ *
+ * If byte sequence is illegal or incomplete, returns -1 and does not advance
+ * "s".
+ */
+    static int
+utf_safe_read_char_adv(s, n)
+    char_u      **s;
+    size_t      *n;
+{
+    int		c, k;
+
+    if (*n == 0) /* end of buffer */
+	return 0;
+
+    k = utf8len_tab_zero[**s];
+
+    if (k == 1)
+    {
+	/* ASCII character or NUL */
+	(*n)--;
+	return *(*s)++;
+    }
+
+    if ((size_t)k <= *n)
+    {
+	/* We have a multibyte sequence and it isn't truncated by buffer
+	 * limits so utf_ptr2char() is safe to use. Or the first byte is
+	 * illegal (k=0), and it's also safe to use utf_ptr2char(). */
+	c = utf_ptr2char(*s);
+
+	/* On failure, utf_ptr2char() returns the first byte, so here we
+	 * check equality with the first byte. The only non-ASCII character
+	 * which equals the first byte of its own UTF-8 representation is
+	 * U+00C3 (UTF-8: 0xC3 0x83), so need to check that special case too.
+	 * It's safe even if n=1, else we would have k=2 > n. */
+	if (c != (int)(**s) || (c == 0xC3 && (*s)[1] == 0x83))
+	{
+	    /* byte sequence was successfully decoded */
+	    *s += k;
+	    *n -= k;
+	    return c;
+	}
+    }
+
+    /* byte sequence is incomplete or illegal */
+    return -1;
+}
+
+/*
  * Get character at **pp and advance *pp to the next character.
  * Note: composing characters are skipped!
  */
@@ -1871,7 +1961,7 @@
 /*
  * Convert the character at screen position "off" to a sequence of bytes.
  * Includes the composing characters.
- * "buf" must at least have the length MB_MAXBYTES.
+ * "buf" must at least have the length MB_MAXBYTES + 1.
  * Only to be used when ScreenLinesUC[off] != 0.
  * Returns the produced number of bytes.
  */
@@ -2667,7 +2757,8 @@
 	{0x10400,0x10427,1,40}
 };
 
-static int utf_convert(int a, convertStruct table[], int tableSize);
+static int utf_convert __ARGS((int a, convertStruct table[], int tableSize));
+static int utf_strnicmp __ARGS((char_u *s1, char_u *s2, size_t n1, size_t n2));
 
 /*
  * Generic conversion function for case operations.
@@ -2681,19 +2772,22 @@
     int			tableSize;
 {
     int start, mid, end; /* indices into table */
+    int entries = tableSize / sizeof(convertStruct);
 
     start = 0;
-    end = tableSize / sizeof(convertStruct);
+    end = entries;
     while (start < end)
     {
 	/* need to search further */
-	mid = (end + start) /2;
+	mid = (end + start) / 2;
 	if (table[mid].rangeEnd < a)
 	    start = mid + 1;
 	else
 	    end = mid;
     }
-    if (table[start].rangeStart <= a && a <= table[start].rangeEnd
+    if (start < entries
+	    && table[start].rangeStart <= a
+	    && a <= table[start].rangeEnd
 	    && (a - table[start].rangeStart) % table[start].step == 0)
 	return (a + table[start].offset);
     else
@@ -2708,7 +2802,7 @@
 utf_fold(a)
     int		a;
 {
-    return utf_convert(a, foldCase, sizeof(foldCase));
+    return utf_convert(a, foldCase, (int)sizeof(foldCase));
 }
 
 static convertStruct toLower[] =
@@ -2863,7 +2957,7 @@
 {
 	{0x61,0x7a,1,-32},
 	{0xb5,0xb5,-1,743},
-	{0xe0,0xf6,1,-32},
+	{0xe0,0xf6,1,-32},  /* 0xdf (German sharp s) is not upper-cased */
 	{0xf8,0xfe,1,-32},
 	{0xff,0xff,-1,121},
 	{0x101,0x12f,2,-1},
@@ -3036,14 +3130,15 @@
 	return TOUPPER_LOC(a);
 
     /* For any other characters use the above mapping table. */
-    return utf_convert(a, toUpper, sizeof(toUpper));
+    return utf_convert(a, toUpper, (int)sizeof(toUpper));
 }
 
     int
 utf_islower(a)
     int		a;
 {
-    return (utf_toupper(a) != a);
+    /* German sharp s is lower case but has no upper case equivalent. */
+    return (utf_toupper(a) != a) || a == 0xdf;
 }
 
 /*
@@ -3069,7 +3164,7 @@
 	return TOLOWER_LOC(a);
 
     /* For any other characters use the above mapping table. */
-    return utf_convert(a, toLower, sizeof(toLower));
+    return utf_convert(a, toLower, (int)sizeof(toLower));
 }
 
     int
@@ -3079,9 +3174,83 @@
     return (utf_tolower(a) != a);
 }
 
+    static int
+utf_strnicmp(s1, s2, n1, n2)
+    char_u      *s1, *s2;
+    size_t      n1, n2;
+{
+    int		c1, c2, cdiff;
+    char_u	buffer[6];
+
+    for (;;)
+    {
+	c1 = utf_safe_read_char_adv(&s1, &n1);
+	c2 = utf_safe_read_char_adv(&s2, &n2);
+
+	if (c1 <= 0 || c2 <= 0)
+	    break;
+
+	if (c1 == c2)
+	    continue;
+
+	cdiff = utf_fold(c1) - utf_fold(c2);
+	if (cdiff != 0)
+	    return cdiff;
+    }
+
+    /* some string ended or has an incomplete/illegal character sequence */
+
+    if (c1 == 0 || c2 == 0)
+    {
+	/* some string ended. shorter string is smaller */
+	if (c1 == 0 && c2 == 0)
+	    return 0;
+	return c1 == 0 ? -1 : 1;
+    }
+
+    /* Continue with bytewise comparison to produce some result that
+     * would make comparison operations involving this function transitive.
+     *
+     * If only one string had an error, comparison should be made with
+     * folded version of the other string. In this case it is enough
+     * to fold just one character to determine the result of comparison. */
+
+    if (c1 != -1 && c2 == -1)
+    {
+	n1 = utf_char2bytes(utf_fold(c1), buffer);
+	s1 = buffer;
+    }
+    else if (c2 != -1 && c1 == -1)
+    {
+	n2 = utf_char2bytes(utf_fold(c2), buffer);
+	s2 = buffer;
+    }
+
+    while (n1 > 0 && n2 > 0 && *s1 != NUL && *s2 != NUL)
+    {
+	cdiff = (int)(*s1) - (int)(*s2);
+	if (cdiff != 0)
+	    return cdiff;
+
+	s1++;
+	s2++;
+	n1--;
+	n2--;
+    }
+
+    if (n1 > 0 && *s1 == NUL)
+	n1 = 0;
+    if (n2 > 0 && *s2 == NUL)
+	n2 = 0;
+
+    if (n1 == 0 && n2 == 0)
+	return 0;
+    return n1 == 0 ? -1 : 1;
+}
+
 /*
  * Version of strnicmp() that handles multi-byte characters.
- * Needed for Big5, Sjift-JIS and UTF-8 encoding.  Other DBCS encodings can
+ * Needed for Big5, Shift-JIS and UTF-8 encoding.  Other DBCS encodings can
  * probably use strnicmp(), because there are no ASCII characters in the
  * second byte.
  * Returns zero if s1 and s2 are equal (ignoring case), the difference between
@@ -3092,46 +3261,21 @@
     char_u	*s1, *s2;
     size_t	nn;
 {
-    int		i, j, l;
+    int		i, l;
     int		cdiff;
-    int		incomplete = FALSE;
     int		n = (int)nn;
 
-    for (i = 0; i < n; i += l)
+    if (enc_utf8)
     {
-	if (s1[i] == NUL && s2[i] == NUL)   /* both strings end */
-	    return 0;
-	if (enc_utf8)
-	{
-	    l = utf_byte2len(s1[i]);
-	    if (l > n - i)
-	    {
-		l = n - i;		    /* incomplete character */
-		incomplete = TRUE;
-	    }
-	    /* Check directly first, it's faster. */
-	    for (j = 0; j < l; ++j)
-	    {
-		if (s1[i + j] != s2[i + j])
-		    break;
-		if (s1[i + j] == 0)
-		    /* Both stings have the same bytes but are incomplete or
-		     * have illegal bytes, accept them as equal. */
-		    l = j;
-	    }
-	    if (j < l)
-	    {
-		/* If one of the two characters is incomplete return -1. */
-		if (incomplete || i + utf_byte2len(s2[i]) > n)
-		    return -1;
-		cdiff = utf_fold(utf_ptr2char(s1 + i))
-					     - utf_fold(utf_ptr2char(s2 + i));
-		if (cdiff != 0)
-		    return cdiff;
-	    }
-	}
-	else
+	return utf_strnicmp(s1, s2, nn, nn);
+    }
+    else
+    {
+	for (i = 0; i < n; i += l)
 	{
+	    if (s1[i] == NUL && s2[i] == NUL)	/* both strings end */
+		return 0;
+
 	    l = (*mb_ptr2len)(s1 + i);
 	    if (l <= 1)
 	    {
@@ -3560,7 +3704,7 @@
     void
 mb_adjust_cursor()
 {
-    mb_adjustpos(&curwin->w_cursor);
+    mb_adjustpos(curbuf, &curwin->w_cursor);
 }
 
 /*
@@ -3568,7 +3712,8 @@
  * If it points to a tail byte it's moved backwards to the head byte.
  */
     void
-mb_adjustpos(lp)
+mb_adjustpos(buf, lp)
+    buf_T	*buf;
     pos_T	*lp;
 {
     char_u	*p;
@@ -3579,7 +3724,7 @@
 #endif
 	    )
     {
-	p = ml_get(lp->lnum);
+	p = ml_get_buf(buf, lp->lnum, FALSE);
 	lp->col -= (*mb_head_off)(p, p + lp->col);
 #ifdef FEAT_VIRTUALEDIT
 	/* Reset "coladd" when the cursor would be on the right half of a
@@ -3656,13 +3801,15 @@
 mb_unescape(pp)
     char_u **pp;
 {
-    static char_u	buf[MB_MAXBYTES + 1];
-    int			n, m = 0;
+    static char_u	buf[6];
+    int			n;
+    int			m = 0;
     char_u		*str = *pp;
 
     /* Must translate K_SPECIAL KS_SPECIAL KE_FILLER to K_SPECIAL and CSI
-     * KS_EXTRA KE_CSI to CSI. */
-    for (n = 0; str[n] != NUL && m <= MB_MAXBYTES; ++n)
+     * KS_EXTRA KE_CSI to CSI.
+     * Maximum length of a utf-8 character is 4 bytes. */
+    for (n = 0; str[n] != NUL && m < 4; ++n)
     {
 	if (str[n] == K_SPECIAL
 		&& str[n + 1] == KS_SPECIAL
@@ -3699,6 +3846,10 @@
 	    *pp = str + n + 1;
 	    return buf;
 	}
+
+	/* Bail out quickly for ASCII. */
+	if (buf[0] < 128)
+	    break;
     }
     return NULL;
 }
@@ -3938,7 +4089,7 @@
     return enc_canonize((char_u *)buf);
 }
 
-#if defined(WIN3264) || defined(PROTO)
+#if defined(WIN3264) || defined(PROTO) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
 /*
  * Convert an encoding name to an MS-Windows codepage.
  * Returns zero if no codepage can be figured out.
@@ -3957,7 +4108,7 @@
 	p += 6;
 
     if (p[0] == 'c' && p[1] == 'p')
-	cp = atoi(p + 2);
+	cp = atoi((char *)p + 2);
     else if ((idx = enc_canon_search(p)) >= 0)
 	cp = enc_canon_table[idx].codepage;
     else
@@ -4126,7 +4277,7 @@
 	done = to - (char *)result;
     }
 
-    if (resultlenp != NULL)
+    if (resultlenp != NULL && result != NULL)
 	*resultlenp = (int)(to - (char *)result);
     return result;
 }
@@ -4151,6 +4302,47 @@
 #  endif
 
 /*
+ * Get the address of 'funcname' which is imported by 'hInst' DLL.
+ */
+    static void *
+get_iconv_import_func(HINSTANCE hInst, const char *funcname)
+{
+    PBYTE			pImage = (PBYTE)hInst;
+    PIMAGE_DOS_HEADER		pDOS = (PIMAGE_DOS_HEADER)hInst;
+    PIMAGE_NT_HEADERS		pPE;
+    PIMAGE_IMPORT_DESCRIPTOR	pImpDesc;
+    PIMAGE_THUNK_DATA		pIAT;	    /* Import Address Table */
+    PIMAGE_THUNK_DATA		pINT;	    /* Import Name Table */
+    PIMAGE_IMPORT_BY_NAME	pImpName;
+
+    if (pDOS->e_magic != IMAGE_DOS_SIGNATURE)
+	return NULL;
+    pPE = (PIMAGE_NT_HEADERS)(pImage + pDOS->e_lfanew);
+    if (pPE->Signature != IMAGE_NT_SIGNATURE)
+	return NULL;
+    pImpDesc = (PIMAGE_IMPORT_DESCRIPTOR)(pImage
+	    + pPE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
+							    .VirtualAddress);
+    for (; pImpDesc->FirstThunk; ++pImpDesc)
+    {
+	if (!pImpDesc->OriginalFirstThunk)
+	    continue;
+	pIAT = (PIMAGE_THUNK_DATA)(pImage + pImpDesc->FirstThunk);
+	pINT = (PIMAGE_THUNK_DATA)(pImage + pImpDesc->OriginalFirstThunk);
+	for (; pIAT->u1.Function; ++pIAT, ++pINT)
+	{
+	    if (IMAGE_SNAP_BY_ORDINAL(pINT->u1.Ordinal))
+		continue;
+	    pImpName = (PIMAGE_IMPORT_BY_NAME)(pImage
+					+ (UINT_PTR)(pINT->u1.AddressOfData));
+	    if (strcmp(pImpName->Name, funcname) == 0)
+		return (void *)pIAT->u1.Function;
+	}
+    }
+    return NULL;
+}
+
+/*
  * Try opening the iconv.dll and return TRUE if iconv() can be used.
  */
     int
@@ -4159,11 +4351,11 @@
 {
     if (hIconvDLL != 0 && hMsvcrtDLL != 0)
 	return TRUE;
-    hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL);
+    hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL);
     if (hIconvDLL == 0)		/* sometimes it's called libiconv.dll */
-	hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL_ALT);
+	hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT);
     if (hIconvDLL != 0)
-	hMsvcrtDLL = LoadLibrary(DYNAMIC_MSVCRT_DLL);
+	hMsvcrtDLL = vimLoadLib(DYNAMIC_MSVCRT_DLL);
     if (hIconvDLL == 0 || hMsvcrtDLL == 0)
     {
 	/* Only give the message when 'verbose' is set, otherwise it might be
@@ -4183,7 +4375,9 @@
     iconv_open	= (void *)GetProcAddress(hIconvDLL, "libiconv_open");
     iconv_close	= (void *)GetProcAddress(hIconvDLL, "libiconv_close");
     iconvctl	= (void *)GetProcAddress(hIconvDLL, "libiconvctl");
-    iconv_errno	= (void *)GetProcAddress(hMsvcrtDLL, "_errno");
+    iconv_errno	= get_iconv_import_func(hIconvDLL, "_errno");
+    if (iconv_errno == NULL)
+	iconv_errno = (void *)GetProcAddress(hMsvcrtDLL, "_errno");
     if (iconv == NULL || iconv_open == NULL || iconv_close == NULL
 	    || iconvctl == NULL || iconv_errno == NULL)
     {
@@ -4253,7 +4447,7 @@
 {
     int was_active;
 
-    was_active = !!im_is_active;
+    was_active = !!im_get_status();
     im_is_active = (active && !p_imdisable);
 
     if (im_is_active != was_active)
@@ -4368,7 +4562,8 @@
     vgetc_busy = TRUE;
     showmode();
     vgetc_busy = old_vgetc_busy;
-    setcursor();
+    if ((State & NORMAL) || (State & INSERT))
+	setcursor();
     out_flush();
 }
 
@@ -4404,7 +4599,7 @@
     }
 
     /* The thing which setting "preedit_start_col" to MAXCOL means that
-     * "preedit_start_col" will be set forcely when calling
+     * "preedit_start_col" will be set forcedly when calling
      * preedit_changed_cb() next time.
      * "preedit_start_col" should not reset with MAXCOL on this part. Vim
      * is simulating the preediting by using add_to_input_str(). when
@@ -4876,44 +5071,28 @@
 {
     if (xic != NULL)
     {
-	/*
-	 * The third-party imhangul module (and maybe others too) ignores
-	 * gtk_im_context_reset() or at least doesn't reset the active state.
-	 * Thus sending imactivatekey would turn it off if it was on before,
-	 * which is clearly not what we want.  Fortunately we can work around
-	 * that for imhangul by sending GDK_Escape, but I don't know if it
-	 * works with all IM modules that support an activation key :/
-	 *
-	 * An alternative approach would be to destroy the IM context and
-	 * recreate it.  But that means loading/unloading the IM module on
-	 * every mode switch, which causes a quite noticeable delay even on
-	 * my rather fast box...
-	 * *
-	 * Moreover, there are some XIM which cannot respond to
-	 * im_synthesize_keypress(). we hope that they reset by
-	 * xim_shutdown().
-	 */
-	if (im_activatekey_keyval != GDK_VoidSymbol && im_is_active)
-	    im_synthesize_keypress(GDK_Escape, 0U);
-
 	gtk_im_context_reset(xic);
 
-	/*
-	 * HACK for Ami: This sequence of function calls makes Ami handle
-	 * the IM reset graciously, without breaking loads of other stuff.
-	 * It seems to force English mode as well, which is exactly what we
-	 * want because it makes the Ami status display work reliably.
-	 */
-	gtk_im_context_set_use_preedit(xic, FALSE);
-
 	if (p_imdisable)
 	    im_shutdown();
 	else
 	{
-	    gtk_im_context_set_use_preedit(xic, TRUE);
 	    xim_set_focus(gui.in_focus);
 
-	    if (im_activatekey_keyval != GDK_VoidSymbol)
+#  ifdef FEAT_EVAL
+	    if (p_imaf[0] != NUL)
+	    {
+		char_u *argv[1];
+
+		if (im_is_active)
+		    argv[0] = (char_u *)"1";
+		else
+		    argv[0] = (char_u *)"0";
+		(void)call_func_retnr(p_imaf, 1, argv, FALSE);
+	    }
+	    else
+#  endif
+		if (im_activatekey_keyval != GDK_VoidSymbol)
 	    {
 		if (im_is_active)
 		{
@@ -5058,6 +5237,10 @@
 		/* We had a keypad key, and XIM tried to thieve it */
 		return FALSE;
 
+	    /* This is supposed to fix a problem with iBus, that space
+	     * characters don't work in input mode. */
+	    xim_expected_char = NUL;
+
 	    /* Normal processing */
 	    return imresult;
 	}
@@ -5069,6 +5252,26 @@
     int
 im_get_status(void)
 {
+#  ifdef FEAT_EVAL
+    if (p_imsf[0] != NUL)
+    {
+	int is_active;
+
+	/* FIXME: Don't execute user function in unsafe situation. */
+	if (exiting
+#   ifdef FEAT_AUTOCMD
+		|| is_autocmd_blocked()
+#   endif
+		)
+	    return FALSE;
+	/* FIXME: :py print 'xxx' is shown duplicate result.
+	 * Use silent to avoid it. */
+	++msg_silent;
+	is_active = call_func_retnr(p_imsf, 0, NULL, FALSE);
+	--msg_silent;
+	return (is_active > 0);
+    }
+#  endif
     return im_is_active;
 }
 
@@ -5167,16 +5370,16 @@
     void
 xim_set_preedit()
 {
-    if (xic == NULL)
-	return;
-
-    xim_set_focus(TRUE);
-
     XVaNestedList attr_list;
     XRectangle spot_area;
     XPoint over_spot;
     int line_space;
 
+    if (xic == NULL)
+	return;
+
+    xim_set_focus(TRUE);
+
     if (!xim_has_focus)
     {
 	/* hide XIM cursor */
@@ -5554,12 +5757,12 @@
     void
 xim_set_status_area()
 {
-    if (xic == NULL)
-	return;
-
     XVaNestedList preedit_list = 0, status_list = 0, list = 0;
     XRectangle pre_area, status_area;
 
+    if (xic == NULL)
+	return;
+
     if (input_style & XIMStatusArea)
     {
 	if (input_style & XIMPreeditArea)
@@ -6057,8 +6260,23 @@
 	    if (vcp->vc_cpfrom == 0)
 		tmp_len = utf8_to_utf16(ptr, len, NULL, NULL);
 	    else
-		tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
-							      ptr, len, 0, 0);
+	    {
+		tmp_len = MultiByteToWideChar(vcp->vc_cpfrom,
+					unconvlenp ? MB_ERR_INVALID_CHARS : 0,
+					ptr, len, 0, 0);
+		if (tmp_len == 0
+			&& GetLastError() == ERROR_NO_UNICODE_TRANSLATION)
+		{
+		    if (lenp != NULL)
+			*lenp = 0;
+		    if (unconvlenp != NULL)
+			*unconvlenp = len;
+		    retval = alloc(1);
+		    if (retval)
+			retval[0] = NUL;
+		    return retval;
+		}
+	    }
 	    tmp = (short_u *)alloc(sizeof(short_u) * tmp_len);
 	    if (tmp == NULL)
 		break;
diff -Naur vim73.orig/src/memfile.c vim73/src/memfile.c
--- vim73.orig/src/memfile.c	2010-06-21 02:59:57.000000000 +0000
+++ vim73/src/memfile.c	2013-08-04 19:09:10.423944420 +0000
@@ -32,10 +32,6 @@
  * file is opened.
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for lseek(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 /*
@@ -88,6 +84,13 @@
 static int  mf_write_block __ARGS((memfile_T *mfp, bhdr_T *hp, off_t offset, unsigned size));
 static int  mf_trans_add __ARGS((memfile_T *, bhdr_T *));
 static void mf_do_open __ARGS((memfile_T *, char_u *, int));
+static void mf_hash_init __ARGS((mf_hashtab_T *));
+static void mf_hash_free __ARGS((mf_hashtab_T *));
+static void mf_hash_free_all __ARGS((mf_hashtab_T *));
+static mf_hashitem_T *mf_hash_find __ARGS((mf_hashtab_T *, blocknr_T));
+static void mf_hash_add_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
+static void mf_hash_rem_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
+static int mf_hash_grow __ARGS((mf_hashtab_T *));
 
 /*
  * The functions for using a memfile:
@@ -123,9 +126,8 @@
     int		flags;
 {
     memfile_T		*mfp;
-    int			i;
     off_t		size;
-#if defined(STATFS) && defined(UNIX) && !defined(__QNX__)
+#if defined(STATFS) && defined(UNIX) && !defined(__QNX__) && !defined(__minix)
 # define USE_FSTATFS
     struct STATFS	stf;
 #endif
@@ -156,11 +158,8 @@
     mfp->mf_used_last = NULL;
     mfp->mf_dirty = FALSE;
     mfp->mf_used_count = 0;
-    for (i = 0; i < MEMHASHSIZE; ++i)
-    {
-	mfp->mf_hash[i] = NULL;		/* hash lists are empty */
-	mfp->mf_trans[i] = NULL;	/* trans lists are empty */
-    }
+    mf_hash_init(&mfp->mf_hash);
+    mf_hash_init(&mfp->mf_trans);
     mfp->mf_page_size = MEMFILE_PAGE_SIZE;
 #ifdef FEAT_CRYPT
     mfp->mf_old_key = NULL;
@@ -246,8 +245,6 @@
     int		del_file;
 {
     bhdr_T	*hp, *nextp;
-    NR_TRANS	*tp, *tpnext;
-    int		i;
 
     if (mfp == NULL)		    /* safety check */
 	return;
@@ -267,12 +264,8 @@
     }
     while (mfp->mf_free_first != NULL)	    /* free entries in free list */
 	vim_free(mf_rem_free(mfp));
-    for (i = 0; i < MEMHASHSIZE; ++i)	    /* free entries in trans lists */
-	for (tp = mfp->mf_trans[i]; tp != NULL; tp = tpnext)
-	{
-	    tpnext = tp->nt_next;
-	    vim_free(tp);
-	}
+    mf_hash_free(&mfp->mf_hash);
+    mf_hash_free_all(&mfp->mf_trans);	    /* free hashtable and its items */
     vim_free(mfp->mf_fname);
     vim_free(mfp->mf_ffname);
     vim_free(mfp);
@@ -635,7 +628,7 @@
 	 * sync from the system itself).
 	 */
 #  if defined(__EMX__)
-   error "Dont use fsync with EMX! Read emxdoc.doc or emxfix01.doc for info."
+   error "Don't use fsync with EMX! Read emxdoc.doc or emxfix01.doc for info."
 #  endif
 	if (STRCMP(p_sws, "fsync") == 0)
 	{
@@ -747,16 +740,7 @@
     memfile_T	*mfp;
     bhdr_T	*hp;
 {
-    bhdr_T	*hhp;
-    int		hash;
-
-    hash = MEMHASH(hp->bh_bnum);
-    hhp = mfp->mf_hash[hash];
-    hp->bh_hash_next = hhp;
-    hp->bh_hash_prev = NULL;
-    if (hhp != NULL)
-	hhp->bh_hash_prev = hp;
-    mfp->mf_hash[hash] = hp;
+    mf_hash_add_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
 }
 
 /*
@@ -767,13 +751,7 @@
     memfile_T	*mfp;
     bhdr_T	*hp;
 {
-    if (hp->bh_hash_prev == NULL)
-	mfp->mf_hash[MEMHASH(hp->bh_bnum)] = hp->bh_hash_next;
-    else
-	hp->bh_hash_prev->bh_hash_next = hp->bh_hash_next;
-
-    if (hp->bh_hash_next)
-	hp->bh_hash_next->bh_hash_prev = hp->bh_hash_prev;
+    mf_hash_rem_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
 }
 
 /*
@@ -784,12 +762,7 @@
     memfile_T	*mfp;
     blocknr_T	nr;
 {
-    bhdr_T	*hp;
-
-    for (hp = mfp->mf_hash[MEMHASH(nr)]; hp != NULL; hp = hp->bh_hash_next)
-	if (hp->bh_bnum == nr)
-	    break;
-    return hp;
+    return (bhdr_T *)mf_hash_find(&mfp->mf_hash, nr);
 }
 
 /*
@@ -1049,7 +1022,7 @@
 	PERROR(_("E294: Seek error in swap file read"));
 	return FAIL;
     }
-    if ((unsigned)vim_read(mfp->mf_fd, hp->bh_data, size) != size)
+    if ((unsigned)read_eintr(mfp->mf_fd, hp->bh_data, size) != size)
     {
 	PERROR(_("E295: Read error in swap file"));
 	return FAIL;
@@ -1102,7 +1075,7 @@
 	if (nr > mfp->mf_infile_count)		/* beyond end of file */
 	{
 	    nr = mfp->mf_infile_count;
-	    hp2 = mf_find_hash(mfp, nr);	/* NULL catched below */
+	    hp2 = mf_find_hash(mfp, nr);	/* NULL caught below */
 	}
 	else
 	    hp2 = hp;
@@ -1168,7 +1141,7 @@
     }
 #endif
 
-    if ((unsigned)vim_write(mfp->mf_fd, data, size) != size)
+    if ((unsigned)write_eintr(mfp->mf_fd, data, size) != size)
 	result = FAIL;
 
 #ifdef FEAT_CRYPT
@@ -1191,7 +1164,6 @@
 {
     bhdr_T	*freep;
     blocknr_T	new_bnum;
-    int		hash;
     NR_TRANS	*np;
     int		page_count;
 
@@ -1212,7 +1184,7 @@
     {
 	new_bnum = freep->bh_bnum;
 	/*
-	 * If the page count of the free block was larger, recude it.
+	 * If the page count of the free block was larger, reduce it.
 	 * If the page count matches, remove the block from the free list
 	 */
 	if (freep->bh_page_count > page_count)
@@ -1239,12 +1211,8 @@
     hp->bh_bnum = new_bnum;
     mf_ins_hash(mfp, hp);		    /* insert in new hash list */
 
-    hash = MEMHASH(np->nt_old_bnum);	    /* insert in trans list */
-    np->nt_next = mfp->mf_trans[hash];
-    mfp->mf_trans[hash] = np;
-    if (np->nt_next != NULL)
-	np->nt_next->nt_prev = np;
-    np->nt_prev = NULL;
+    /* Insert "np" into "mf_trans" hashtable with key "np->nt_old_bnum" */
+    mf_hash_add_item(&mfp->mf_trans, (mf_hashitem_T *)np);
 
     return OK;
 }
@@ -1259,25 +1227,20 @@
     memfile_T	*mfp;
     blocknr_T	old_nr;
 {
-    int		hash;
     NR_TRANS	*np;
     blocknr_T	new_bnum;
 
-    hash = MEMHASH(old_nr);
-    for (np = mfp->mf_trans[hash]; np != NULL; np = np->nt_next)
-	if (np->nt_old_bnum == old_nr)
-	    break;
+    np = (NR_TRANS *)mf_hash_find(&mfp->mf_trans, old_nr);
+
     if (np == NULL)		/* not found */
 	return old_nr;
 
     mfp->mf_neg_count--;
     new_bnum = np->nt_new_bnum;
-    if (np->nt_prev != NULL)		/* remove entry from the trans list */
-	np->nt_prev->nt_next = np->nt_next;
-    else
-	mfp->mf_trans[hash] = np->nt_next;
-    if (np->nt_next != NULL)
-	np->nt_next->nt_prev = np->nt_prev;
+
+    /* remove entry from the trans list */
+    mf_hash_rem_item(&mfp->mf_trans, (mf_hashitem_T *)np);
+
     vim_free(np);
 
     return new_bnum;
@@ -1344,9 +1307,9 @@
      * fname cannot be NameBuff, because it must have been allocated.
      */
     mf_set_ffname(mfp);
-#if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+#if defined(MSDOS) || defined(MSWIN)
     /*
-     * A ":!cd e:xxx" may change the directory without us knowning, use the
+     * A ":!cd e:xxx" may change the directory without us knowing, use the
      * full pathname always.  Careful: This frees fname!
      */
     mf_fullname(mfp);
@@ -1401,3 +1364,207 @@
 	mch_hide(mfp->mf_fname);    /* try setting the 'hidden' flag */
     }
 }
+
+/*
+ * Implementation of mf_hashtab_T follows.
+ */
+
+/*
+ * The number of buckets in the hashtable is increased by a factor of
+ * MHT_GROWTH_FACTOR when the average number of items per bucket
+ * exceeds 2 ^ MHT_LOG_LOAD_FACTOR.
+ */
+#define MHT_LOG_LOAD_FACTOR 6
+#define MHT_GROWTH_FACTOR   2   /* must be a power of two */
+
+/*
+ * Initialize an empty hash table.
+ */
+    static void
+mf_hash_init(mht)
+    mf_hashtab_T *mht;
+{
+    vim_memset(mht, 0, sizeof(mf_hashtab_T));
+    mht->mht_buckets = mht->mht_small_buckets;
+    mht->mht_mask = MHT_INIT_SIZE - 1;
+}
+
+/*
+ * Free the array of a hash table.  Does not free the items it contains!
+ * The hash table must not be used again without another mf_hash_init() call.
+ */
+    static void
+mf_hash_free(mht)
+    mf_hashtab_T *mht;
+{
+    if (mht->mht_buckets != mht->mht_small_buckets)
+	vim_free(mht->mht_buckets);
+}
+
+/*
+ * Free the array of a hash table and all the items it contains.
+ */
+    static void
+mf_hash_free_all(mht)
+    mf_hashtab_T    *mht;
+{
+    long_u	    idx;
+    mf_hashitem_T   *mhi;
+    mf_hashitem_T   *next;
+
+    for (idx = 0; idx <= mht->mht_mask; idx++)
+	for (mhi = mht->mht_buckets[idx]; mhi != NULL; mhi = next)
+	{
+	    next = mhi->mhi_next;
+	    vim_free(mhi);
+	}
+
+    mf_hash_free(mht);
+}
+
+/*
+ * Find "key" in hashtable "mht".
+ * Returns a pointer to a mf_hashitem_T or NULL if the item was not found.
+ */
+    static mf_hashitem_T *
+mf_hash_find(mht, key)
+    mf_hashtab_T    *mht;
+    blocknr_T	    key;
+{
+    mf_hashitem_T   *mhi;
+
+    mhi = mht->mht_buckets[key & mht->mht_mask];
+    while (mhi != NULL && mhi->mhi_key != key)
+	mhi = mhi->mhi_next;
+
+    return mhi;
+}
+
+/*
+ * Add item "mhi" to hashtable "mht".
+ * "mhi" must not be NULL.
+ */
+    static void
+mf_hash_add_item(mht, mhi)
+    mf_hashtab_T    *mht;
+    mf_hashitem_T   *mhi;
+{
+    long_u	    idx;
+
+    idx = mhi->mhi_key & mht->mht_mask;
+    mhi->mhi_next = mht->mht_buckets[idx];
+    mhi->mhi_prev = NULL;
+    if (mhi->mhi_next != NULL)
+	mhi->mhi_next->mhi_prev = mhi;
+    mht->mht_buckets[idx] = mhi;
+
+    mht->mht_count++;
+
+    /*
+     * Grow hashtable when we have more thank 2^MHT_LOG_LOAD_FACTOR
+     * items per bucket on average
+     */
+    if (mht->mht_fixed == 0
+	&& (mht->mht_count >> MHT_LOG_LOAD_FACTOR) > mht->mht_mask)
+    {
+	if (mf_hash_grow(mht) == FAIL)
+	{
+	    /* stop trying to grow after first failure to allocate memory */
+	    mht->mht_fixed = 1;
+	}
+    }
+}
+
+/*
+ * Remove item "mhi" from hashtable "mht".
+ * "mhi" must not be NULL and must have been inserted into "mht".
+ */
+    static void
+mf_hash_rem_item(mht, mhi)
+    mf_hashtab_T    *mht;
+    mf_hashitem_T   *mhi;
+{
+    if (mhi->mhi_prev == NULL)
+	mht->mht_buckets[mhi->mhi_key & mht->mht_mask] = mhi->mhi_next;
+    else
+	mhi->mhi_prev->mhi_next = mhi->mhi_next;
+
+    if (mhi->mhi_next != NULL)
+	mhi->mhi_next->mhi_prev = mhi->mhi_prev;
+
+    mht->mht_count--;
+
+    /* We could shrink the table here, but it typically takes little memory,
+     * so why bother?  */
+}
+
+/*
+ * Increase number of buckets in the hashtable by MHT_GROWTH_FACTOR and
+ * rehash items.
+ * Returns FAIL when out of memory.
+ */
+    static int
+mf_hash_grow(mht)
+    mf_hashtab_T    *mht;
+{
+    long_u	    i, j;
+    int		    shift;
+    mf_hashitem_T   *mhi;
+    mf_hashitem_T   *tails[MHT_GROWTH_FACTOR];
+    mf_hashitem_T   **buckets;
+    size_t	    size;
+
+    size = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR * sizeof(void *);
+    buckets = (mf_hashitem_T **)lalloc_clear(size, FALSE);
+    if (buckets == NULL)
+	return FAIL;
+
+    shift = 0;
+    while ((mht->mht_mask >> shift) != 0)
+	shift++;
+
+    for (i = 0; i <= mht->mht_mask; i++)
+    {
+	/*
+	 * Traverse the items in the i-th original bucket and move them into
+	 * MHT_GROWTH_FACTOR new buckets, preserving their relative order
+	 * within each new bucket.  Preserving the order is important because
+	 * mf_get() tries to keep most recently used items at the front of
+	 * each bucket.
+	 *
+	 * Here we strongly rely on the fact the hashes are computed modulo
+	 * a power of two.
+	 */
+
+	vim_memset(tails, 0, sizeof(tails));
+
+	for (mhi = mht->mht_buckets[i]; mhi != NULL; mhi = mhi->mhi_next)
+	{
+	    j = (mhi->mhi_key >> shift) & (MHT_GROWTH_FACTOR - 1);
+	    if (tails[j] == NULL)
+	    {
+		buckets[i + (j << shift)] = mhi;
+		tails[j] = mhi;
+		mhi->mhi_prev = NULL;
+	    }
+	    else
+	    {
+		tails[j]->mhi_next = mhi;
+		mhi->mhi_prev = tails[j];
+		tails[j] = mhi;
+	    }
+	}
+
+	for (j = 0; j < MHT_GROWTH_FACTOR; j++)
+	    if (tails[j] != NULL)
+		tails[j]->mhi_next = NULL;
+    }
+
+    if (mht->mht_buckets != mht->mht_small_buckets)
+	vim_free(mht->mht_buckets);
+
+    mht->mht_buckets = buckets;
+    mht->mht_mask = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR - 1;
+
+    return OK;
+}
diff -Naur vim73.orig/src/memfile_test.c vim73/src/memfile_test.c
--- vim73.orig/src/memfile_test.c	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/memfile_test.c	2013-08-04 19:09:10.427277744 +0000
@@ -0,0 +1,145 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved	by Bram Moolenaar
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ * See README.txt for an overview of the Vim source code.
+ */
+
+/*
+ * memfile_test.c: Unittests for memfile.c
+ * Mostly by Ivan Krasilnikov.
+ */
+
+#undef NDEBUG
+#include <assert.h>
+
+/* Must include main.c because it contains much more than just main() */
+#define NO_VIM_MAIN
+#include "main.c"
+
+/* This file has to be included because the tested functions are static */
+#include "memfile.c"
+
+#define index_to_key(i) ((i) ^ 15167)
+#define TEST_COUNT 50000
+
+static void test_mf_hash __ARGS((void));
+
+/*
+ * Test mf_hash_*() functions.
+ */
+    static void
+test_mf_hash()
+{
+    mf_hashtab_T   ht;
+    mf_hashitem_T  *item;
+    blocknr_T      key;
+    long_u	   i;
+    long_u	   num_buckets;
+
+    mf_hash_init(&ht);
+
+    /* insert some items and check invariants */
+    for (i = 0; i < TEST_COUNT; i++)
+    {
+	assert(ht.mht_count == i);
+
+	/* check that number of buckets is a power of 2 */
+	num_buckets = ht.mht_mask + 1;
+	assert(num_buckets > 0 && (num_buckets & (num_buckets - 1)) == 0);
+
+	/* check load factor */
+	assert(ht.mht_count <= (num_buckets << MHT_LOG_LOAD_FACTOR));
+
+	if (i < (MHT_INIT_SIZE << MHT_LOG_LOAD_FACTOR))
+	{
+	    /* first expansion shouldn't have occurred yet */
+	    assert(num_buckets == MHT_INIT_SIZE);
+	    assert(ht.mht_buckets == ht.mht_small_buckets);
+	}
+	else
+	{
+	    assert(num_buckets > MHT_INIT_SIZE);
+	    assert(ht.mht_buckets != ht.mht_small_buckets);
+	}
+
+	key = index_to_key(i);
+	assert(mf_hash_find(&ht, key) == NULL);
+
+	/* allocate and add new item */
+	item = (mf_hashitem_T *)lalloc_clear(sizeof(mf_hashtab_T), FALSE);
+	assert(item != NULL);
+	item->mhi_key = key;
+	mf_hash_add_item(&ht, item);
+
+	assert(mf_hash_find(&ht, key) == item);
+
+	if (ht.mht_mask + 1 != num_buckets)
+	{
+	    /* hash table was expanded */
+	    assert(ht.mht_mask + 1 == num_buckets * MHT_GROWTH_FACTOR);
+	    assert(i + 1 == (num_buckets << MHT_LOG_LOAD_FACTOR));
+	}
+    }
+
+    /* check presence of inserted items */
+    for (i = 0; i < TEST_COUNT; i++)
+    {
+	key = index_to_key(i);
+	item = mf_hash_find(&ht, key);
+	assert(item != NULL);
+	assert(item->mhi_key == key);
+    }
+
+    /* delete some items */
+    for (i = 0; i < TEST_COUNT; i++)
+    {
+	if (i % 100 < 70)
+	{
+	    key = index_to_key(i);
+	    item = mf_hash_find(&ht, key);
+	    assert(item != NULL);
+	    assert(item->mhi_key == key);
+
+	    mf_hash_rem_item(&ht, item);
+	    assert(mf_hash_find(&ht, key) == NULL);
+
+	    mf_hash_add_item(&ht, item);
+	    assert(mf_hash_find(&ht, key) == item);
+
+	    mf_hash_rem_item(&ht, item);
+	    assert(mf_hash_find(&ht, key) == NULL);
+
+	    vim_free(item);
+	}
+    }
+
+    /* check again */
+    for (i = 0; i < TEST_COUNT; i++)
+    {
+	key = index_to_key(i);
+	item = mf_hash_find(&ht, key);
+
+	if (i % 100 < 70)
+	{
+	    assert(item == NULL);
+	}
+	else
+	{
+	    assert(item != NULL);
+	    assert(item->mhi_key == key);
+	}
+    }
+
+    /* free hash table and all remaining items */
+    mf_hash_free_all(&ht);
+}
+
+    int
+main()
+{
+    test_mf_hash();
+    return 0;
+}
diff -Naur vim73.orig/src/memline.c vim73/src/memline.c
--- vim73.orig/src/memline.c	2010-08-08 13:11:46.000000000 +0000
+++ vim73/src/memline.c	2013-08-04 19:09:10.430611067 +0000
@@ -42,10 +42,6 @@
  *  mf_get().
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for mch_open(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 #ifndef UNIX		/* it's in os_unix.h for Unix */
@@ -56,10 +52,6 @@
 # include <proto/dos.h>	    /* for Open() and Close() */
 #endif
 
-#ifdef HAVE_ERRNO_H
-# include <errno.h>
-#endif
-
 typedef struct block0		ZERO_BL;    /* contents of the first block */
 typedef struct pointer_block	PTR_BL;	    /* contents of a pointer block */
 typedef struct data_block	DATA_BL;    /* contents of a data block */
@@ -582,6 +574,9 @@
 	    idx = ip->ip_index + 1;	    /* go to next index */
 	    page_count = 1;
 	}
+
+	if (error > 0)
+	    EMSG(_("E843: Error while updating swap file crypt"));
     }
 
     mfp->mf_old_key = NULL;
@@ -626,6 +621,8 @@
 	    break;
 	fname = findswapname(buf, &dirp, mfp->mf_fname);
 						    /* alloc's fname */
+	if (dirp == NULL)	    /* out of memory */
+	    break;
 	if (fname == NULL)	    /* no file name found for this dir */
 	    continue;
 
@@ -749,11 +746,13 @@
 	 * and creating it, another Vim creates the file.  In that case the
 	 * creation will fail and we will use another directory. */
 	fname = findswapname(buf, &dirp, NULL); /* allocates fname */
+	if (dirp == NULL)
+	    break;  /* out of memory */
 	if (fname == NULL)
 	    continue;
 	if (mf_open_file(mfp, fname) == OK)	/* consumes fname! */
 	{
-#if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
+#if defined(MSDOS) || defined(MSWIN)
 	    /*
 	     * set full pathname for swap file now, because a ":!cd dir" may
 	     * change directory without us knowing it.
@@ -781,9 +780,7 @@
 	need_wait_return = TRUE;	/* call wait_return later */
 	++no_wait_return;
 	(void)EMSG2(_("E303: Unable to open swap file for \"%s\", recovery impossible"),
-		    buf_spname(buf) != NULL
-			? (char_u *)buf_spname(buf)
-			: buf->b_fname);
+		    buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname);
 	--no_wait_return;
     }
 
@@ -938,7 +935,7 @@
 	b0p->b0_fname[0] = NUL;
     else
     {
-#if defined(MSDOS) || defined(MSWIN) || defined(AMIGA) || defined(RISCOS)
+#if defined(MSDOS) || defined(MSWIN) || defined(AMIGA)
 	/* Systems that cannot translate "~user" back into a path: copy the
 	 * file name unmodified.  Do use slashes instead of backslashes for
 	 * portability. */
@@ -1108,7 +1105,7 @@
 	fname = (char_u *)"";
     len = (int)STRLEN(fname);
     if (len >= 4 &&
-#if defined(VMS) || defined(RISCOS)
+#if defined(VMS)
 	    STRNICMP(fname + len - 4, "_s" , 2)
 #else
 	    STRNICMP(fname + len - 4, ".s" , 2)
@@ -1316,7 +1313,7 @@
     smsg((char_u *)_("Using swap file \"%s\""), NameBuff);
 
     if (buf_spname(curbuf) != NULL)
-	STRCPY(NameBuff, buf_spname(curbuf));
+	vim_strncpy(NameBuff, buf_spname(curbuf), MAXPATHL - 1);
     else
 	home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE);
     smsg((char_u *)_("Original file \"%s\""), NameBuff);
@@ -1512,6 +1509,7 @@
 		    bnum = pp->pb_pointer[idx].pe_bnum;
 		    line_count = pp->pb_pointer[idx].pe_line_count;
 		    page_count = pp->pb_pointer[idx].pe_page_count;
+		    idx = 0;
 		    continue;
 		}
 	    }
@@ -1778,11 +1776,7 @@
 #ifdef VMS
 		names[0] = vim_strsave((char_u *)"*_sw%");
 #else
-# ifdef RISCOS
-		names[0] = vim_strsave((char_u *)"*_sw#");
-# else
 		names[0] = vim_strsave((char_u *)"*.sw?");
-# endif
 #endif
 #if defined(UNIX) || defined(WIN3264)
 		/* For Unix names starting with a dot are special.  MS-Windows
@@ -1809,11 +1803,7 @@
 #ifdef VMS
 		names[0] = concat_fnames(dir_name, (char_u *)"*_sw%", TRUE);
 #else
-# ifdef RISCOS
-		names[0] = concat_fnames(dir_name, (char_u *)"*_sw#", TRUE);
-# else
 		names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
-# endif
 #endif
 #if defined(UNIX) || defined(WIN3264)
 		/* For Unix names starting with a dot are special.  MS-Windows
@@ -1882,7 +1872,7 @@
 	    char_u	    *swapname;
 
 	    swapname = modname(fname_res,
-#if defined(VMS) || defined(RISCOS)
+#if defined(VMS)
 			       (char_u *)"_swp", FALSE
 #else
 			       (char_u *)".swp", TRUE
@@ -2059,7 +2049,7 @@
     fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
     if (fd >= 0)
     {
-	if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
+	if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
 	{
 	    if (STRNCMP(b0.b0_version, "VIM 3.0", 7) == 0)
 	    {
@@ -2181,11 +2171,7 @@
 #ifdef VMS
     names[num_names] = concat_fnames(path, (char_u *)"_sw%", FALSE);
 #else
-# ifdef RISCOS
-    names[num_names] = concat_fnames(path, (char_u *)"_sw#", FALSE);
-# else
     names[num_names] = concat_fnames(path, (char_u *)".sw?", FALSE);
-# endif
 #endif
     if (names[num_names] == NULL)
 	goto end;
@@ -2212,11 +2198,7 @@
 #ifdef VMS
     names[num_names] = modname(path, (char_u *)"_sw%", FALSE);
 #else
-# ifdef RISCOS
-    names[num_names] = modname(path, (char_u *)"_sw#", FALSE);
-# else
     names[num_names] = modname(path, (char_u *)".sw?", FALSE);
-# endif
 #endif
     if (names[num_names] == NULL)
 	goto end;
@@ -2384,7 +2366,7 @@
  * Make a copy of the line if necessary.
  */
 /*
- * get a pointer to a (read-only copy of a) line
+ * Return a pointer to a (read-only copy of a) line.
  *
  * On failure an error message is given and IObuff is returned (to avoid
  * having to check for error everywhere).
@@ -2397,7 +2379,7 @@
 }
 
 /*
- * ml_get_pos: get pointer to position 'pos'
+ * Return pointer to position "pos".
  */
     char_u *
 ml_get_pos(pos)
@@ -2407,7 +2389,7 @@
 }
 
 /*
- * ml_get_curline: get pointer to cursor line.
+ * Return pointer to cursor line.
  */
     char_u *
 ml_get_curline()
@@ -2416,7 +2398,7 @@
 }
 
 /*
- * ml_get_cursor: get pointer to cursor position
+ * Return pointer to cursor position.
  */
     char_u *
 ml_get_cursor()
@@ -2426,7 +2408,7 @@
 }
 
 /*
- * get a pointer to a line in a specific buffer
+ * Return a pointer to a line in a specific buffer
  *
  * "will_change": if TRUE mark the buffer dirty (chars in the line will be
  * changed)
@@ -3159,7 +3141,7 @@
 	   )
 	    set_keep_msg((char_u *)_(no_lines_msg), 0);
 
-	/* FEAT_BYTEOFF already handled in there, dont worry 'bout it below */
+	/* FEAT_BYTEOFF already handled in there, don't worry 'bout it below */
 	i = ml_replace((linenr_T)1, (char_u *)"", TRUE);
 	buf->b_ml.ml_flags |= ML_EMPTY;
 
@@ -3210,7 +3192,8 @@
 	mf_free(mfp, hp);	/* free the data block */
 	buf->b_ml.ml_locked = NULL;
 
-	for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; --stack_idx)
+	for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0;
+								  --stack_idx)
 	{
 	    buf->b_ml.ml_stack_top = 0;	    /* stack is invalid when failing */
 	    ip = &(buf->b_ml.ml_stack[stack_idx]);
@@ -3961,14 +3944,9 @@
 #else
 	    (buf->b_p_sn || buf->b_shortname),
 #endif
-#ifdef RISCOS
-	    /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
-	    ffname,
-#else
 	    fname_res,
-#endif
 	    (char_u *)
-#if defined(VMS) || defined(RISCOS)
+#if defined(VMS)
 	    "_swp",
 #else
 	    ".swp",
@@ -4076,9 +4054,9 @@
     }
     /* Some of these messages are long to allow translation to
      * other languages. */
-    MSG_PUTS(_("\n(1) Another program may be editing the same file.\n    If this is the case, be careful not to end up with two\n    different instances of the same file when making changes.\n"));
-    MSG_PUTS(_("    Quit, or continue with caution.\n"));
-    MSG_PUTS(_("\n(2) An edit session for this file crashed.\n"));
+    MSG_PUTS(_("\n(1) Another program may be editing the same file.  If this is the case,\n    be careful not to end up with two different instances of the same\n    file when making changes."));
+    MSG_PUTS(_("  Quit, or continue with caution.\n"));
+    MSG_PUTS(_("(2) An edit session for this file crashed.\n"));
     MSG_PUTS(_("    If this is the case, use \":recover\" or \"vim -r "));
     msg_outtrans(buf->b_fname);
     MSG_PUTS(_("\"\n    to recover the changes (see \":help recovery\").\n"));
@@ -4138,6 +4116,7 @@
  *
  * Several names are tried to find one that does not exist
  * Returns the name in allocated memory or NULL.
+ * When out of memory "dirp" is set to NULL.
  *
  * Note: If BASENAMELEN is not correct, you will get error messages for
  *	 not being able to open the swap or undo file
@@ -4181,7 +4160,9 @@
      * First allocate some memory to put the directory name in.
      */
     dir_name = alloc((unsigned)STRLEN(*dirp) + 1);
-    if (dir_name != NULL)
+    if (dir_name == NULL)
+	*dirp = NULL;
+    else
 	(void)copy_option_part(dirp, dir_name, 31000, ",");
 
     /*
@@ -4389,7 +4370,7 @@
 		fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
 		if (fd >= 0)
 		{
-		    if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
+		    if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
 		    {
 			/*
 			 * If the swapfile has the same directory as the
@@ -4432,14 +4413,6 @@
 		    }
 		    close(fd);
 		}
-#ifdef RISCOS
-		else
-		    /* Can't open swap file, though it does exist.
-		     * Assume that the user is editing two files with
-		     * the same name in different directories. No error.
-		     */
-		    differ = TRUE;
-#endif
 
 		/* give the ATTENTION message when there is an old swap file
 		 * for the current file, and the buffer was not recovered. */
@@ -4521,7 +4494,7 @@
 				    process_still_running
 					? (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Quit\n&Abort") :
 # endif
-					(char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL);
+					(char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL, FALSE);
 
 # if defined(UNIX) || defined(__EMX__) || defined(VMS)
 			if (process_still_running && choice >= 4)
diff -Naur vim73.orig/src/menu.c vim73/src/menu.c
--- vim73.orig/src/menu.c	2010-07-14 14:49:01.000000000 +0000
+++ vim73/src/menu.c	2013-08-04 19:09:10.433944390 +0000
@@ -1394,7 +1394,8 @@
     int		idx;
 {
     static vimmenu_T	*menu = NULL;
-    static char_u	tbuffer[256]; /*hack*/
+#define TBUFFER_LEN 256
+    static char_u	tbuffer[TBUFFER_LEN]; /*hack*/
     char_u		*str;
 #ifdef FEAT_MULTI_LANG
     static  int		should_advance = FALSE;
@@ -1428,11 +1429,11 @@
 	{
 #ifdef FEAT_MULTI_LANG
 	    if (should_advance)
-		STRCPY(tbuffer, menu->en_dname);
+		vim_strncpy(tbuffer, menu->en_dname, TBUFFER_LEN - 2);
 	    else
 	    {
 #endif
-		STRCPY(tbuffer, menu->dname);
+		vim_strncpy(tbuffer, menu->dname,  TBUFFER_LEN - 2);
 #ifdef FEAT_MULTI_LANG
 		if (menu->en_dname == NULL)
 		    should_advance = TRUE;
@@ -1512,8 +1513,8 @@
 {
 #ifdef FEAT_MULTI_LANG
     if (menu->en_name != NULL
-	    && (menu_namecmp(name,menu->en_name)
-		|| menu_namecmp(name,menu->en_dname)))
+	    && (menu_namecmp(name, menu->en_name)
+		|| menu_namecmp(name, menu->en_dname)))
 	return TRUE;
 #endif
     return menu_namecmp(name, menu->name) || menu_namecmp(name, menu->dname);
@@ -2342,7 +2343,7 @@
 
 	while (menu != NULL)
 	{
-	    if (STRCMP(name, menu->name) == 0 || STRCMP(name, menu->dname) == 0)
+	    if (menu_name_equal(name, menu))
 	    {
 		if (menu->children == NULL)
 		{
diff -Naur vim73.orig/src/message.c vim73/src/message.c
--- vim73.orig/src/message.c	2010-08-04 18:10:02.000000000 +0000
+++ vim73/src/message.c	2013-08-04 19:09:10.440611037 +0000
@@ -39,7 +39,6 @@
 static void msg_screen_putchar __ARGS((int c, int attr));
 static int  msg_check_screen __ARGS((void));
 static void redir_write __ARGS((char_u *s, int maxlen));
-static void verbose_write __ARGS((char_u *s, int maxlen));
 #ifdef FEAT_CON_DIALOG
 static char_u *msg_show_console_dialog __ARGS((char_u *message, char_u *buttons, int dfltbutton));
 static int	confirm_msg_used = FALSE;	/* displaying confirm_msg */
@@ -58,6 +57,9 @@
 static struct msg_hist *last_msg_hist = NULL;
 static int msg_hist_len = 0;
 
+static FILE *verbose_fd = NULL;
+static int  verbose_did_open = FALSE;
+
 /*
  * When writing messages to the screen, there are many different situations.
  * A number of variables is used to remember the current state:
@@ -83,7 +85,7 @@
  *		    need_wait_return to be set.  This is a hack to make ":ts"
  *		    work without an extra prompt.
  * lines_left	    Number of lines available for messages before the
- *		    more-prompt is to be given.
+ *		    more-prompt is to be given.  -1 when not set.
  * need_wait_return TRUE when the hit-return prompt is needed.
  *		    Reset: After giving the hit-return prompt, when the user
  *		    has answered some other prompt.
@@ -220,15 +222,16 @@
 	    if (enc_utf8)
 		/* may have up to 18 bytes per cell (6 per char, up to two
 		 * composing chars) */
-		buf = alloc((room + 2) * 18);
+		len = (room + 2) * 18;
 	    else if (enc_dbcs == DBCS_JPNU)
 		/* may have up to 2 bytes per cell for euc-jp */
-		buf = alloc((room + 2) * 2);
+		len = (room + 2) * 2;
 	    else
 #endif
-		buf = alloc(room + 2);
+		len = room + 2;
+	    buf = alloc(len);
 	    if (buf != NULL)
-		trunc_string(s, buf, room);
+		trunc_string(s, buf, room, len);
 	}
     }
     return buf;
@@ -239,10 +242,11 @@
  * "s" and "buf" may be equal.
  */
     void
-trunc_string(s, buf, room)
+trunc_string(s, buf, room, buflen)
     char_u	*s;
     char_u	*buf;
     int		room;
+    int		buflen;
 {
     int		half;
     int		len;
@@ -255,7 +259,7 @@
     len = 0;
 
     /* First part: Start of the string. */
-    for (e = 0; len < half; ++e)
+    for (e = 0; len < half && e < buflen; ++e)
     {
 	if (s[e] == NUL)
 	{
@@ -272,7 +276,8 @@
 	if (has_mbyte)
 	    for (n = (*mb_ptr2len)(s + e); --n > 0; )
 	    {
-		++e;
+		if (++e == buflen)
+		    break;
 		buf[e] = s[e];
 	    }
 #endif
@@ -317,8 +322,19 @@
     }
 
     /* Set the middle and copy the last part. */
-    mch_memmove(buf + e, "...", (size_t)3);
-    STRMOVE(buf + e + 3, s + i);
+    if (e + 3 < buflen)
+    {
+	mch_memmove(buf + e, "...", (size_t)3);
+	len = (int)STRLEN(s + i) + 1;
+	if (len >= buflen - e - 3)
+	    len = buflen - e - 3 - 1;
+	mch_memmove(buf + e + 3, s + i, len);
+	buf[e + 3 + len - 1] = NUL;
+    }
+    else
+    {
+	buf[e - 1] = NUL;  /* make sure it is truncated */
+    }
 }
 
 /*
@@ -569,6 +585,10 @@
     int		severe;
 #endif
 
+    /* Skip this if not giving error messages at the moment. */
+    if (emsg_not_now())
+	return TRUE;
+
     called_emsg = TRUE;
     ex_exitval = 1;
 
@@ -581,10 +601,6 @@
     emsg_severe = FALSE;
 #endif
 
-    /* Skip this if not giving error messages at the moment. */
-    if (emsg_not_now())
-	return TRUE;
-
     if (!emsg_off || vim_strchr(p_debug, 't') != NULL)
     {
 #ifdef FEAT_EVAL
@@ -853,6 +869,7 @@
     cmdline_row = msg_row;
     msg_col = 0;
     msg_clr_eos();
+    lines_left = -1;
 }
 #endif
 
@@ -879,16 +896,17 @@
     if (msg_silent != 0)
 	return;
 
-/*
- * With the global command (and some others) we only need one return at the
- * end. Adjust cmdline_row to avoid the next message overwriting the last one.
- * When inside vgetc(), we can't wait for a typed character at all.
- */
+    /*
+     * When inside vgetc(), we can't wait for a typed character at all.
+     * With the global command (and some others) we only need one return at
+     * the end. Adjust cmdline_row to avoid the next message overwriting the
+     * last one.
+     */
     if (vgetc_busy > 0)
 	return;
+    need_wait_return = TRUE;
     if (no_wait_return)
     {
-	need_wait_return = TRUE;
 	if (!exmode_active)
 	    cmdline_row = msg_row;
 	return;
@@ -921,6 +939,12 @@
 #ifdef USE_ON_FLY_SCROLL
 	dont_scroll = TRUE;		/* disallow scrolling here */
 #endif
+	/* Avoid the sequence that the user types ":" at the hit-return prompt
+	 * to start an Ex command, but the file-changed dialog gets in the
+	 * way. */
+	if (need_check_timestamps)
+	    check_timestamps(FALSE);
+
 	hit_return_msg();
 
 	do
@@ -958,10 +982,22 @@
 	     */
 	    if (p_more && !p_cp)
 	    {
-		if (c == 'b' || c == 'k' || c == 'u' || c == 'g' || c == K_UP)
+		if (c == 'b' || c == 'k' || c == 'u' || c == 'g'
+						|| c == K_UP || c == K_PAGEUP)
 		{
-		    /* scroll back to show older messages */
-		    do_more_prompt(c);
+		    if (msg_scrolled > Rows)
+			/* scroll back to show older messages */
+			do_more_prompt(c);
+		    else
+		    {
+			msg_didout = FALSE;
+			c = K_IGNORE;
+			msg_col =
+#ifdef FEAT_RIGHTLEFT
+			    cmdmsg_rl ? Columns - 1 :
+#endif
+			    0;
+		    }
 		    if (quit_more)
 		    {
 			c = CAR;		/* just pretend CR was hit */
@@ -975,7 +1011,8 @@
 		    }
 		}
 		else if (msg_scrolled > Rows - 2
-			 && (c == 'j' || c == K_DOWN || c == 'd' || c == 'f'))
+			 && (c == 'j' || c == 'd' || c == 'f'
+					   || c == K_DOWN || c == K_PAGEDOWN))
 		    c = K_IGNORE;
 	    }
 	} while ((had_got_int && c == Ctrl_C)
@@ -1477,6 +1514,27 @@
     return retval;
 }
 
+#if defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * Return the lhs or rhs of a mapping, with the key codes turned into printable
+ * strings, in an allocated string.
+ */
+    char_u *
+str2special_save(str, is_lhs)
+    char_u  *str;
+    int	    is_lhs;  /* TRUE for lhs, FALSE for rhs */
+{
+    garray_T	ga;
+    char_u	*p = str;
+
+    ga_init2(&ga, 1, 40);
+    while (*p != NUL)
+	ga_concat(&ga, str2special(&p, is_lhs));
+    ga_append(&ga, NUL);
+    return (char_u *)ga.ga_data;
+}
+#endif
+
 /*
  * Return the printable string for the key codes at "*sp".
  * Used for translating the lhs or rhs of a mapping to printable chars.
@@ -1519,22 +1577,33 @@
 	{
 	    c = TO_SPECIAL(str[1], str[2]);
 	    str += 2;
-	    if (c == K_ZERO)	/* display <Nul> as ^@ */
+	    if (c == KS_ZERO)	/* display <Nul> as ^@ or <Nul> */
 		c = NUL;
 	}
 	if (IS_SPECIAL(c) || modifiers)	/* special key */
 	    special = TRUE;
     }
-    *sp = str + 1;
 
 #ifdef FEAT_MBYTE
-    /* For multi-byte characters check for an illegal byte. */
-    if (has_mbyte && MB_BYTE2LEN(*str) > (*mb_ptr2len)(str))
+    if (has_mbyte && !IS_SPECIAL(c))
     {
-	transchar_nonprint(buf, c);
-	return buf;
+	int len = (*mb_ptr2len)(str);
+
+	/* For multi-byte characters check for an illegal byte. */
+	if (has_mbyte && MB_BYTE2LEN(*str) > len)
+	{
+	    transchar_nonprint(buf, c);
+	    *sp = str + 1;
+	    return buf;
+	}
+	/* Since 'special' is TRUE the multi-byte character 'c' will be
+	 * processed by get_special_key_name() */
+	c = (*mb_ptr2char)(str);
+	*sp = str + len;
     }
+    else
 #endif
+	*sp = str + 1;
 
     /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
      * Use <Space> only for lhs of a mapping. */
@@ -1616,8 +1685,16 @@
 	else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
 	{
 	    col += (*mb_ptr2cells)(s);
-	    mch_memmove(buf, s, (size_t)l);
-	    buf[l] = NUL;
+	    if (lcs_nbsp != NUL && list && mb_ptr2char(s) == 160)
+	    {
+		mb_char2bytes(lcs_nbsp, buf);
+		buf[(*mb_ptr2len)(buf)] = NUL;
+	    }
+	    else
+	    {
+		mch_memmove(buf, s, (size_t)l);
+		buf[l] = NUL;
+	    }
 	    msg_puts(buf);
 	    s += l;
 	    continue;
@@ -1643,6 +1720,11 @@
 		    attr = hl_attr(HLF_8);
 		}
 	    }
+	    else if (c == 160 && list && lcs_nbsp != NUL)
+	    {
+		c = lcs_nbsp;
+		attr = hl_attr(HLF_8);
+	    }
 	    else if (c == NUL && list && lcs_eol != NUL)
 	    {
 		p_extra = (char_u *)"";
@@ -2285,6 +2367,16 @@
 }
 
 /*
+ * Mark the last message chunk as finishing the line.
+ */
+    void
+msg_sb_eol()
+{
+    if (last_msgchunk != NULL)
+	last_msgchunk->sb_eol = TRUE;
+}
+
+/*
  * Display a screen line from previously displayed text at row "row".
  * Returns a pointer to the text for the next line (can be NULL).
  */
@@ -2438,7 +2530,7 @@
 #ifdef FEAT_CON_DIALOG
     int		retval = FALSE;
 #endif
-    int		scroll;
+    int		toscroll;
     msgchunk_T	*mp_last = NULL;
     msgchunk_T	*mp;
     int		i;
@@ -2489,49 +2581,49 @@
 	}
 #endif
 
-	scroll = 0;
+	toscroll = 0;
 	switch (c)
 	{
 	case BS:		/* scroll one line back */
 	case K_BS:
 	case 'k':
 	case K_UP:
-	    scroll = -1;
+	    toscroll = -1;
 	    break;
 
 	case CAR:		/* one extra line */
 	case NL:
 	case 'j':
 	case K_DOWN:
-	    scroll = 1;
+	    toscroll = 1;
 	    break;
 
 	case 'u':		/* Up half a page */
-	    scroll = -(Rows / 2);
+	    toscroll = -(Rows / 2);
 	    break;
 
 	case 'd':		/* Down half a page */
-	    scroll = Rows / 2;
+	    toscroll = Rows / 2;
 	    break;
 
 	case 'b':		/* one page back */
 	case K_PAGEUP:
-	    scroll = -(Rows - 1);
+	    toscroll = -(Rows - 1);
 	    break;
 
 	case ' ':		/* one extra page */
 	case 'f':
 	case K_PAGEDOWN:
 	case K_LEFTMOUSE:
-	    scroll = Rows - 1;
+	    toscroll = Rows - 1;
 	    break;
 
 	case 'g':		/* all the way back to the start */
-	    scroll = -999999;
+	    toscroll = -999999;
 	    break;
 
 	case 'G':		/* all the way to the end */
-	    scroll = 999999;
+	    toscroll = 999999;
 	    lines_left = 999999;
 	    break;
 
@@ -2584,9 +2676,9 @@
 	    continue;
 	}
 
-	if (scroll != 0)
+	if (toscroll != 0)
 	{
-	    if (scroll < 0)
+	    if (toscroll < 0)
 	    {
 		/* go to start of last line */
 		if (mp_last == NULL)
@@ -2604,7 +2696,7 @@
 		if (mp != NULL && mp->sb_prev != NULL)
 		{
 		    /* Find line to be displayed at top. */
-		    for (i = 0; i > scroll; --i)
+		    for (i = 0; i > toscroll; --i)
 		    {
 			if (mp == NULL || mp->sb_prev == NULL)
 			    break;
@@ -2615,7 +2707,7 @@
 			    mp_last = msg_sb_start(mp_last->sb_prev);
 		    }
 
-		    if (scroll == -1 && screen_ins_lines(0, 0, 1,
+		    if (toscroll == -1 && screen_ins_lines(0, 0, 1,
 						       (int)Rows, NULL) == OK)
 		    {
 			/* display line at top */
@@ -2631,13 +2723,13 @@
 			    ++msg_scrolled;
 			}
 		    }
-		    scroll = 0;
+		    toscroll = 0;
 		}
 	    }
 	    else
 	    {
 		/* First display any text that we scrolled back. */
-		while (scroll > 0 && mp_last != NULL)
+		while (toscroll > 0 && mp_last != NULL)
 		{
 		    /* scroll up, display line at bottom */
 		    msg_scroll_up();
@@ -2645,11 +2737,11 @@
 		    screen_fill((int)Rows - 2, (int)Rows - 1, 0,
 						   (int)Columns, ' ', ' ', 0);
 		    mp_last = disp_sb_line((int)Rows - 2, mp_last);
-		    --scroll;
+		    --toscroll;
 		}
 	    }
 
-	    if (scroll <= 0)
+	    if (toscroll <= 0)
 	    {
 		/* displayed the requested text, more prompt again */
 		screen_fill((int)Rows - 1, (int)Rows, 0,
@@ -2659,7 +2751,7 @@
 	    }
 
 	    /* display more text, return to caller */
-	    lines_left = scroll;
+	    lines_left = toscroll;
 	}
 
 	break;
@@ -3019,12 +3111,9 @@
     if (redir_off)
 	return;
 
-    /*
-     * If 'verbosefile' is set write message in that file.
-     * Must come before the rest because of updating "msg_col".
-     */
-    if (*p_vfile != NUL)
-	verbose_write(s, maxlen);
+    /* If 'verbosefile' is set prepare for writing in that file. */
+    if (*p_vfile != NUL && verbose_fd == NULL)
+	verbose_open();
 
     if (redirecting())
     {
@@ -3038,9 +3127,12 @@
 		    write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
 		else if (redir_vname)
 		    var_redir_str((char_u *)" ", -1);
-		else if (redir_fd)
+		else
 #endif
+		    if (redir_fd != NULL)
 		    fputs(" ", redir_fd);
+		if (verbose_fd != NULL)
+		    fputs(" ", verbose_fd);
 		++cur_col;
 	    }
 	}
@@ -3052,13 +3144,16 @@
 	    var_redir_str(s, maxlen);
 #endif
 
-	/* Adjust the current column */
+	/* Write and adjust the current column. */
 	while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
 	{
 #ifdef FEAT_EVAL
-	    if (!redir_reg && !redir_vname && redir_fd != NULL)
+	    if (!redir_reg && !redir_vname)
 #endif
-		putc(*s, redir_fd);
+		if (redir_fd != NULL)
+		    putc(*s, redir_fd);
+	    if (verbose_fd != NULL)
+		putc(*s, verbose_fd);
 	    if (*s == '\r' || *s == '\n')
 		cur_col = 0;
 	    else if (*s == '\t')
@@ -3076,7 +3171,7 @@
     int
 redirecting()
 {
-    return redir_fd != NULL
+    return redir_fd != NULL || *p_vfile != NUL
 #ifdef FEAT_EVAL
 			  || redir_reg || redir_vname
 #endif
@@ -3134,9 +3229,6 @@
 	cmdline_row = msg_row;
 }
 
-static FILE *verbose_fd = NULL;
-static int  verbose_did_open = FALSE;
-
 /*
  * Called when 'verbosefile' is set: stop writing to the file.
  */
@@ -3174,49 +3266,6 @@
 }
 
 /*
- * Write a string to 'verbosefile'.
- * When "maxlen" is -1 write the whole string, otherwise up to "maxlen" bytes.
- */
-    static void
-verbose_write(str, maxlen)
-    char_u	*str;
-    int		maxlen;
-{
-    char_u	*s = str;
-    static int	cur_col = 0;
-
-    /* Open the file when called the first time. */
-    if (verbose_fd == NULL)
-	verbose_open();
-
-    if (verbose_fd != NULL)
-    {
-	/* If the string doesn't start with CR or NL, go to msg_col */
-	if (*s != '\n' && *s != '\r')
-	{
-	    while (cur_col < msg_col)
-	    {
-		fputs(" ", verbose_fd);
-		++cur_col;
-	    }
-	}
-
-	/* Adjust the current column */
-	while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
-	{
-	    putc(*s, verbose_fd);
-	    if (*s == '\r' || *s == '\n')
-		cur_col = 0;
-	    else if (*s == '\t')
-		cur_col += (8 - cur_col % 8);
-	    else
-		++cur_col;
-	    ++s;
-	}
-    }
-}
-
-/*
  * Give a warning message (for searching).
  * Use 'w' highlighting and may repeat the message after redrawing
  */
@@ -3294,7 +3343,7 @@
  * different letter.
  */
     int
-do_dialog(type, title, message, buttons, dfltbutton, textfield)
+do_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
     int		type UNUSED;
     char_u	*title UNUSED;
     char_u	*message;
@@ -3302,6 +3351,8 @@
     int		dfltbutton;
     char_u	*textfield UNUSED;	/* IObuff for inputdialog(), NULL
 					   otherwise */
+    int		ex_cmd;	    /* when TRUE pressing : accepts default and starts
+			       Ex command */
 {
     int		oldState;
     int		retval = 0;
@@ -3320,7 +3371,7 @@
     if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL)
     {
 	c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
-								   textfield);
+							   textfield, ex_cmd);
 	/* avoid a hit-enter prompt without clearing the cmdline */
 	need_wait_return = FALSE;
 	emsg_on_display = FALSE;
@@ -3367,6 +3418,13 @@
 	    default:		/* Could be a hotkey? */
 		if (c < 0)	/* special keys are ignored here */
 		    continue;
+		if (c == ':' && ex_cmd)
+		{
+		    retval = dfltbutton;
+		    ins_char_typebuf(':');
+		    break;
+		}
+
 		/* Make the character lowercase, as chars in "hotkeys" are. */
 		c = MB_TOLOWER(c);
 		retval = 1;
@@ -3640,7 +3698,7 @@
     if (do_dialog(type,
 		title == NULL ? (char_u *)_("Question") : title,
 		message,
-		(char_u *)_("&Yes\n&No"), dflt, NULL) == 1)
+		(char_u *)_("&Yes\n&No"), dflt, NULL, FALSE) == 1)
 	return VIM_YES;
     return VIM_NO;
 }
@@ -3655,7 +3713,7 @@
     switch (do_dialog(type,
 		title == NULL ? (char_u *)_("Question") : title,
 		message,
-		(char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL))
+		(char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL, FALSE))
     {
 	case 1: return VIM_YES;
 	case 2: return VIM_NO;
@@ -3674,7 +3732,7 @@
 		title == NULL ? (char_u *)"Question" : title,
 		message,
 		(char_u *)_("&Yes\n&No\nSave &All\n&Discard All\n&Cancel"),
-								  dflt, NULL))
+							   dflt, NULL, FALSE))
     {
 	case 1: return VIM_YES;
 	case 2: return VIM_NO;
@@ -4251,6 +4309,7 @@
 	    case '%':
 	    case 'c':
 	    case 's':
+	    case 'S':
 		length_modifier = '\0';
 		str_arg_l = 1;
 		switch (fmt_spec)
@@ -4279,6 +4338,7 @@
 		    }
 
 		case 's':
+		case 'S':
 		    str_arg =
 #ifndef HAVE_STDARG_H
 				(char *)get_a_arg(arg_idx);
@@ -4315,6 +4375,24 @@
 			str_arg_l = (q == NULL) ? precision
 						      : (size_t)(q - str_arg);
 		    }
+#ifdef FEAT_MBYTE
+		    if (fmt_spec == 'S')
+		    {
+			if (min_field_width != 0)
+			    min_field_width += STRLEN(str_arg)
+				     - mb_string2cells((char_u *)str_arg, -1);
+			if (precision)
+			{
+			    char_u *p1 = (char_u *)str_arg;
+			    size_t i;
+
+			    for (i = 0; i < precision && *p1; i++)
+				p1 += mb_ptr2len(p1);
+
+			    str_arg_l = precision = p1 - (char_u *)str_arg;
+			}
+		    }
+#endif
 		    break;
 
 		default:
diff -Naur vim73.orig/src/misc1.c vim73/src/misc1.c
--- vim73.orig/src/misc1.c	2010-08-15 11:24:05.000000000 +0000
+++ vim73/src/misc1.c	2013-08-04 19:09:10.447277683 +0000
@@ -16,8 +16,16 @@
 
 static char_u *vim_version_dir __ARGS((char_u *vimdir));
 static char_u *remove_tail __ARGS((char_u *p, char_u *pend, char_u *name));
+#if defined(FEAT_CMDL_COMPL)
+static void init_users __ARGS((void));
+#endif
 static int copy_indent __ARGS((int size, char_u	*src));
 
+/* All user names (for ~user completion as done by shell). */
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+static garray_T	ga_users;
+#endif
+
 /*
  * Count the size (in window cells) of the indent in the current line.
  */
@@ -363,7 +371,7 @@
 
 	/* Fill to next tabstop with a tab, if possible */
 	tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
-	if (todo >= tab_pad)
+	if (todo >= tab_pad && !curbuf->b_p_et)
 	{
 	    todo -= tab_pad;
 	    ++ind_len;
@@ -372,7 +380,7 @@
 	}
 
 	/* Add tabs required for indent */
-	while (todo >= (int)curbuf->b_p_ts)
+	while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et)
 	{
 	    todo -= (int)curbuf->b_p_ts;
 	    ++ind_len;
@@ -423,26 +431,35 @@
 {
     colnr_T	col;
     pos_T	pos;
-    regmmatch_T	regmatch;
+
+    regmatch_T	regmatch;
+    int		lead_len = 0;	/* length of comment leader */
 
     if (lnum > curbuf->b_ml.ml_line_count)
 	return -1;
     pos.lnum = 0;
+
+#ifdef FEAT_COMMENTS
+    /* In format_lines() (i.e. not insert mode), fo+=q is needed too...  */
+    if ((State & INSERT) || has_format_option(FO_Q_COMS))
+	lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
+#endif
     regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
     if (regmatch.regprog != NULL)
     {
-	regmatch.rmm_ic = FALSE;
-	regmatch.rmm_maxcol = 0;
-	if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
-							    (colnr_T)0, NULL))
+	regmatch.rm_ic = FALSE;
+
+	/* vim_regexec() expects a pointer to a line.  This lets us
+	 * start matching for the flp beyond any comment leader...  */
+	if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
 	{
-	    pos.lnum = regmatch.endpos[0].lnum + lnum;
-	    pos.col = regmatch.endpos[0].col;
+	    pos.lnum = lnum;
+	    pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
 #ifdef FEAT_VIRTUALEDIT
 	    pos.coladd = 0;
 #endif
 	}
-	vim_free(regmatch.regprog);
+	vim_regfree(regmatch.regprog);
     }
 
     if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
@@ -502,14 +519,18 @@
  *	    OPENLINE_DO_COM	format comments
  *	    OPENLINE_KEEPTRAIL	keep trailing spaces
  *	    OPENLINE_MARKFIX	adjust mark positions after the line break
+ *	    OPENLINE_COM_LIST	format comments with list or 2nd line indent
+ *
+ * "second_line_indent": indent for after ^^D in Insert mode or if flag
+ *			  OPENLINE_COM_LIST
  *
  * Return TRUE for success, FALSE for failure
  */
     int
-open_line(dir, flags, old_indent)
+open_line(dir, flags, second_line_indent)
     int		dir;		/* FORWARD or BACKWARD */
     int		flags;
-    int		old_indent;	/* indent for after ^^D in Insert mode */
+    int		second_line_indent;
 {
     char_u	*saved_line;		/* copy of the original line */
     char_u	*next_line = NULL;	/* copy of the next line */
@@ -650,8 +671,8 @@
 	 * count white space on current line
 	 */
 	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
-	if (newindent == 0)
-	    newindent = old_indent;	/* for ^^D command in insert mode */
+	if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
+	    newindent = second_line_indent; /* for ^^D command in insert mode */
 
 #ifdef FEAT_SMARTINDENT
 	/*
@@ -671,7 +692,7 @@
 	    ptr = saved_line;
 # ifdef FEAT_COMMENTS
 	    if (flags & OPENLINE_DO_COM)
-		lead_len = get_leader_len(ptr, NULL, FALSE);
+		lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
 	    else
 		lead_len = 0;
 # endif
@@ -693,7 +714,7 @@
 		}
 # ifdef FEAT_COMMENTS
 		if (flags & OPENLINE_DO_COM)
-		    lead_len = get_leader_len(ptr, NULL, FALSE);
+		    lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
 		else
 		    lead_len = 0;
 		if (lead_len > 0)
@@ -836,7 +857,7 @@
      */
     end_comment_pending = NUL;
     if (flags & OPENLINE_DO_COM)
-	lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD);
+	lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD, TRUE);
     else
 	lead_len = 0;
     if (lead_len > 0)
@@ -1007,9 +1028,9 @@
 	}
 	if (lead_len)
 	{
-	    /* allocate buffer (may concatenate p_exta later) */
-	    leader = alloc(lead_len + lead_repl_len + extra_space +
-							      extra_len + 1);
+	    /* allocate buffer (may concatenate p_extra later) */
+	    leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
+		     + (second_line_indent > 0 ? second_line_indent : 0) + 1);
 	    allocated = leader;		    /* remember to free it later */
 
 	    if (leader == NULL)
@@ -1304,6 +1325,22 @@
     /* concatenate leader and p_extra, if there is a leader */
     if (lead_len)
     {
+	if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
+	{
+	    int i;
+	    int padding = second_line_indent
+					  - (newindent + (int)STRLEN(leader));
+
+	    /* Here whitespace is inserted after the comment char.
+	     * Below, set_indent(newindent, SIN_INSERT) will insert the
+	     * whitespace needed before the comment char. */
+	    for (i = 0; i < padding; i++)
+	    {
+		STRCAT(leader, " ");
+		less_cols--;
+		newcol++;
+	    }
+	}
 	STRCAT(leader, p_extra);
 	p_extra = leader;
 	did_ai = TRUE;	    /* So truncating blanks works with comments */
@@ -1360,9 +1397,11 @@
 #ifdef FEAT_SMARTINDENT
 	if (did_si)
 	{
+	    int        sw = (int)get_sw_value();
+
 	    if (p_sr)
-		newindent -= newindent % (int)curbuf->b_p_sw;
-	    newindent += (int)curbuf->b_p_sw;
+		newindent -= newindent % sw;
+	    newindent += sw;
 	}
 #endif
 	/* Copy the indent */
@@ -1548,28 +1587,35 @@
  * When "flags" is not NULL, it is set to point to the flags of the recognized
  * comment leader.
  * "backward" must be true for the "O" command.
+ * If "include_space" is set, include trailing whitespace while calculating the
+ * length.
  */
     int
-get_leader_len(line, flags, backward)
+get_leader_len(line, flags, backward, include_space)
     char_u	*line;
     char_u	**flags;
     int		backward;
+    int		include_space;
 {
     int		i, j;
+    int		result;
     int		got_com = FALSE;
     int		found_one;
     char_u	part_buf[COM_MAX_LEN];	/* buffer for one option part */
     char_u	*string;		/* pointer to comment string */
     char_u	*list;
+    int		middle_match_len = 0;
+    char_u	*prev_list;
+    char_u	*saved_flags = NULL;
 
-    i = 0;
+    result = i = 0;
     while (vim_iswhite(line[i]))    /* leading white space is ignored */
 	++i;
 
     /*
      * Repeat to match several nested comment strings.
      */
-    while (line[i])
+    while (line[i] != NUL)
     {
 	/*
 	 * scan through the 'comments' option for a match
@@ -1577,29 +1623,161 @@
 	found_one = FALSE;
 	for (list = curbuf->b_p_com; *list; )
 	{
-	    /*
-	     * Get one option part into part_buf[].  Advance list to next one.
-	     * put string at start of string.
-	     */
-	    if (!got_com && flags != NULL)  /* remember where flags started */
-		*flags = list;
+	    /* Get one option part into part_buf[].  Advance "list" to next
+	     * one.  Put "string" at start of string.  */
+	    if (!got_com && flags != NULL)
+		*flags = list;	    /* remember where flags started */
+	    prev_list = list;
 	    (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
 	    string = vim_strchr(part_buf, ':');
 	    if (string == NULL)	    /* missing ':', ignore this part */
 		continue;
 	    *string++ = NUL;	    /* isolate flags from string */
 
-	    /*
-	     * When already found a nested comment, only accept further
-	     * nested comments.
-	     */
+	    /* If we found a middle match previously, use that match when this
+	     * is not a middle or end. */
+	    if (middle_match_len != 0
+		    && vim_strchr(part_buf, COM_MIDDLE) == NULL
+		    && vim_strchr(part_buf, COM_END) == NULL)
+		break;
+
+	    /* When we already found a nested comment, only accept further
+	     * nested comments. */
 	    if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
 		continue;
 
-	    /* When 'O' flag used don't use for "O" command */
+	    /* When 'O' flag present and using "O" command skip this one. */
 	    if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
 		continue;
 
+	    /* Line contents and string must match.
+	     * When string starts with white space, must have some white space
+	     * (but the amount does not need to match, there might be a mix of
+	     * TABs and spaces). */
+	    if (vim_iswhite(string[0]))
+	    {
+		if (i == 0 || !vim_iswhite(line[i - 1]))
+		    continue;  /* missing white space */
+		while (vim_iswhite(string[0]))
+		    ++string;
+	    }
+	    for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+		;
+	    if (string[j] != NUL)
+		continue;  /* string doesn't match */
+
+	    /* When 'b' flag used, there must be white space or an
+	     * end-of-line after the string in the line. */
+	    if (vim_strchr(part_buf, COM_BLANK) != NULL
+			   && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+		continue;
+
+	    /* We have found a match, stop searching unless this is a middle
+	     * comment. The middle comment can be a substring of the end
+	     * comment in which case it's better to return the length of the
+	     * end comment and its flags.  Thus we keep searching with middle
+	     * and end matches and use an end match if it matches better. */
+	    if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
+	    {
+		if (middle_match_len == 0)
+		{
+		    middle_match_len = j;
+		    saved_flags = prev_list;
+		}
+		continue;
+	    }
+	    if (middle_match_len != 0 && j > middle_match_len)
+		/* Use this match instead of the middle match, since it's a
+		 * longer thus better match. */
+		middle_match_len = 0;
+
+	    if (middle_match_len == 0)
+		i += j;
+	    found_one = TRUE;
+	    break;
+	}
+
+	if (middle_match_len != 0)
+	{
+	    /* Use the previously found middle match after failing to find a
+	     * match with an end. */
+	    if (!got_com && flags != NULL)
+		*flags = saved_flags;
+	    i += middle_match_len;
+	    found_one = TRUE;
+	}
+
+	/* No match found, stop scanning. */
+	if (!found_one)
+	    break;
+
+	result = i;
+
+	/* Include any trailing white space. */
+	while (vim_iswhite(line[i]))
+	    ++i;
+
+	if (include_space)
+	    result = i;
+
+	/* If this comment doesn't nest, stop here. */
+	got_com = TRUE;
+	if (vim_strchr(part_buf, COM_NEST) == NULL)
+	    break;
+    }
+    return result;
+}
+
+/*
+ * Return the offset at which the last comment in line starts. If there is no
+ * comment in the whole line, -1 is returned.
+ *
+ * When "flags" is not null, it is set to point to the flags describing the
+ * recognized comment leader.
+ */
+    int
+get_last_leader_offset(line, flags)
+    char_u	*line;
+    char_u	**flags;
+{
+    int		result = -1;
+    int		i, j;
+    int		lower_check_bound = 0;
+    char_u	*string;
+    char_u	*com_leader;
+    char_u	*com_flags;
+    char_u	*list;
+    int		found_one;
+    char_u	part_buf[COM_MAX_LEN];	/* buffer for one option part */
+
+    /*
+     * Repeat to match several nested comment strings.
+     */
+    i = (int)STRLEN(line);
+    while (--i >= lower_check_bound)
+    {
+	/*
+	 * scan through the 'comments' option for a match
+	 */
+	found_one = FALSE;
+	for (list = curbuf->b_p_com; *list; )
+	{
+	    char_u *flags_save = list;
+
+	    /*
+	     * Get one option part into part_buf[].  Advance list to next one.
+	     * put string at start of string.
+	     */
+	    (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+	    string = vim_strchr(part_buf, ':');
+	    if (string == NULL)	/* If everything is fine, this cannot actually
+				 * happen. */
+	    {
+		continue;
+	    }
+	    *string++ = NUL;	/* Isolate flags from string. */
+	    com_leader = string;
+
 	    /*
 	     * Line contents and string must match.
 	     * When string starts with white space, must have some white space
@@ -1614,7 +1792,7 @@
 		    ++string;
 	    }
 	    for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
-		;
+		/* do nothing */;
 	    if (string[j] != NUL)
 		continue;
 
@@ -1623,37 +1801,77 @@
 	     * end-of-line after the string in the line.
 	     */
 	    if (vim_strchr(part_buf, COM_BLANK) != NULL
-			   && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+		    && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
+	    {
 		continue;
+	    }
 
 	    /*
 	     * We have found a match, stop searching.
 	     */
-	    i += j;
-	    got_com = TRUE;
 	    found_one = TRUE;
+
+	    if (flags)
+		*flags = flags_save;
+	    com_flags = flags_save;
+
 	    break;
 	}
 
-	/*
-	 * No match found, stop scanning.
-	 */
-	if (!found_one)
-	    break;
+	if (found_one)
+	{
+	    char_u  part_buf2[COM_MAX_LEN];	/* buffer for one option part */
+	    int     len1, len2, off;
 
-	/*
-	 * Include any trailing white space.
-	 */
-	while (vim_iswhite(line[i]))
-	    ++i;
+	    result = i;
+	    /*
+	     * If this comment nests, continue searching.
+	     */
+	    if (vim_strchr(part_buf, COM_NEST) != NULL)
+		continue;
 
-	/*
-	 * If this comment doesn't nest, stop here.
-	 */
-	if (vim_strchr(part_buf, COM_NEST) == NULL)
-	    break;
+	    lower_check_bound = i;
+
+	    /* Let's verify whether the comment leader found is a substring
+	     * of other comment leaders. If it is, let's adjust the
+	     * lower_check_bound so that we make sure that we have determined
+	     * the comment leader correctly.
+	     */
+
+	    while (vim_iswhite(*com_leader))
+		++com_leader;
+	    len1 = (int)STRLEN(com_leader);
+
+	    for (list = curbuf->b_p_com; *list; )
+	    {
+		char_u *flags_save = list;
+
+		(void)copy_option_part(&list, part_buf2, COM_MAX_LEN, ",");
+		if (flags_save == com_flags)
+		    continue;
+		string = vim_strchr(part_buf2, ':');
+		++string;
+		while (vim_iswhite(*string))
+		    ++string;
+		len2 = (int)STRLEN(string);
+		if (len2 == 0)
+		    continue;
+
+		/* Now we have to verify whether string ends with a substring
+		 * beginning the com_leader. */
+		for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2;)
+		{
+		    --off;
+		    if (!STRNCMP(string + off, com_leader, len2 - off))
+		    {
+			if (i - off < lower_check_bound)
+			    lower_check_bound = i - off;
+		    }
+		}
+	    }
+	}
     }
-    return (got_com ? i : 0);
+    return result;
 }
 #endif
 
@@ -1907,7 +2125,7 @@
     int		c;
 {
 #if defined(FEAT_MBYTE) || defined(PROTO)
-    char_u	buf[MB_MAXBYTES];
+    char_u	buf[MB_MAXBYTES + 1];
     int		n;
 
     n = (*mb_char2bytes)(c, buf);
@@ -2073,14 +2291,18 @@
      */
     if (p_sm && (State & INSERT)
 	    && msg_silent == 0
-#ifdef FEAT_MBYTE
-	    && charlen == 1
-#endif
 #ifdef FEAT_INS_EXPAND
 	    && !ins_compl_active()
 #endif
        )
-	showmatch(c);
+    {
+#ifdef FEAT_MBYTE
+	if (has_mbyte)
+	    showmatch(mb_ptr2char(buf));
+	else
+#endif
+	    showmatch(c);
+    }
 
 #ifdef FEAT_RIGHTLEFT
     if (!p_ri || (State & REPLACE_FLAG))
@@ -2919,7 +3141,7 @@
     buf_T	*buf;
     int		ff;	/* also reset 'fileformat' */
 {
-    if (buf->b_changed || (ff && file_ff_differs(buf)))
+    if (buf->b_changed || (ff && file_ff_differs(buf, FALSE)))
     {
 	buf->b_changed = 0;
 	ml_setflags(buf);
@@ -3069,6 +3291,38 @@
     return r;
 }
 
+#if defined(FEAT_MOUSE) || defined(PROTO)
+/*
+ * Return TRUE if "c" is a mouse key.
+ */
+    int
+is_mouse_key(c)
+    int c;
+{
+    return c == K_LEFTMOUSE
+	|| c == K_LEFTMOUSE_NM
+	|| c == K_LEFTDRAG
+	|| c == K_LEFTRELEASE
+	|| c == K_LEFTRELEASE_NM
+	|| c == K_MIDDLEMOUSE
+	|| c == K_MIDDLEDRAG
+	|| c == K_MIDDLERELEASE
+	|| c == K_RIGHTMOUSE
+	|| c == K_RIGHTDRAG
+	|| c == K_RIGHTRELEASE
+	|| c == K_MOUSEDOWN
+	|| c == K_MOUSEUP
+	|| c == K_MOUSELEFT
+	|| c == K_MOUSERIGHT
+	|| c == K_X1MOUSE
+	|| c == K_X1DRAG
+	|| c == K_X1RELEASE
+	|| c == K_X2MOUSE
+	|| c == K_X2DRAG
+	|| c == K_X2RELEASE;
+}
+#endif
+
 /*
  * Get a key stroke directly from the user.
  * Ignores mouse clicks and scrollbar events, except a click for the left
@@ -3080,8 +3334,9 @@
     int
 get_keystroke()
 {
-#define CBUFLEN 151
-    char_u	buf[CBUFLEN];
+    char_u	*buf = NULL;
+    int		buflen = 150;
+    int		maxlen;
     int		len = 0;
     int		n;
     int		save_mapped_ctrl_c = mapped_ctrl_c;
@@ -3093,12 +3348,29 @@
 	cursor_on();
 	out_flush();
 
+	/* Leave some room for check_termcode() to insert a key code into (max
+	 * 5 chars plus NUL).  And fix_input_buffer() can triple the number of
+	 * bytes. */
+	maxlen = (buflen - 6 - len) / 3;
+	if (buf == NULL)
+	    buf = alloc(buflen);
+	else if (maxlen < 10)
+	{
+	    /* Need some more space. This might happen when receiving a long
+	     * escape sequence. */
+	    buflen += 100;
+	    buf = vim_realloc(buf, buflen);
+	    maxlen = (buflen - 6 - len) / 3;
+	}
+	if (buf == NULL)
+	{
+	    do_outofmem_msg((long_u)buflen);
+	    return ESC;  /* panic! */
+	}
+
 	/* First time: blocking wait.  Second time: wait up to 100ms for a
-	 * terminal code to complete.  Leave some room for check_termcode() to
-	 * insert a key code into (max 5 chars plus NUL).  And
-	 * fix_input_buffer() can triple the number of bytes. */
-	n = ui_inchar(buf + len, (CBUFLEN - 6 - len) / 3,
-						    len == 0 ? -1L : 100L, 0);
+	 * terminal code to complete. */
+	n = ui_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
 	if (n > 0)
 	{
 	    /* Replace zero and CSI by a special key code. */
@@ -3110,14 +3382,23 @@
 	    ++waited;	    /* keep track of the waiting time */
 
 	/* Incomplete termcode and not timed out yet: get more characters */
-	if ((n = check_termcode(1, buf, len)) < 0
+	if ((n = check_termcode(1, buf, buflen, &len)) < 0
 	       && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
 	    continue;
 
-	/* found a termcode: adjust length */
-	if (n > 0)
+	if (n == KEYLEN_REMOVED)  /* key code removed */
+	{
+	    if (must_redraw != 0 && !need_wait_return && (State & CMDLINE) == 0)
+	    {
+		/* Redrawing was postponed, do it now. */
+		update_screen(0);
+		setcursor(); /* put cursor back where it belongs */
+	    }
+	    continue;
+	}
+	if (n > 0)		/* found a termcode: adjust length */
 	    len = n;
-	if (len == 0)	    /* nothing typed yet */
+	if (len == 0)		/* nothing typed yet */
 	    continue;
 
 	/* Handle modifier and/or special key code. */
@@ -3128,30 +3409,11 @@
 	    if (buf[1] == KS_MODIFIER
 		    || n == K_IGNORE
 #ifdef FEAT_MOUSE
-		    || n == K_LEFTMOUSE_NM
-		    || n == K_LEFTDRAG
-		    || n == K_LEFTRELEASE
-		    || n == K_LEFTRELEASE_NM
-		    || n == K_MIDDLEMOUSE
-		    || n == K_MIDDLEDRAG
-		    || n == K_MIDDLERELEASE
-		    || n == K_RIGHTMOUSE
-		    || n == K_RIGHTDRAG
-		    || n == K_RIGHTRELEASE
-		    || n == K_MOUSEDOWN
-		    || n == K_MOUSEUP
-		    || n == K_MOUSELEFT
-		    || n == K_MOUSERIGHT
-		    || n == K_X1MOUSE
-		    || n == K_X1DRAG
-		    || n == K_X1RELEASE
-		    || n == K_X2MOUSE
-		    || n == K_X2DRAG
-		    || n == K_X2RELEASE
-# ifdef FEAT_GUI
+		    || (is_mouse_key(n) && n != K_LEFTMOUSE)
+#endif
+#ifdef FEAT_GUI
 		    || n == K_VER_SCROLLBAR
 		    || n == K_HOR_SCROLLBAR
-# endif
 #endif
 	       )
 	    {
@@ -3169,7 +3431,7 @@
 	{
 	    if (MB_BYTE2LEN(n) > len)
 		continue;	/* more bytes to get */
-	    buf[len >= CBUFLEN ? CBUFLEN - 1 : len] = NUL;
+	    buf[len >= buflen ? buflen - 1 : len] = NUL;
 	    n = (*mb_ptr2char)(buf);
 	}
 #endif
@@ -3179,6 +3441,7 @@
 #endif
 	break;
     }
+    vim_free(buf);
 
     mapped_ctrl_c = save_mapped_ctrl_c;
     return n;
@@ -3323,19 +3586,23 @@
 	if (pn == 1)
 	{
 	    if (n > 0)
-		STRCPY(msg_buf, _("1 more line"));
+		vim_strncpy(msg_buf, (char_u *)_("1 more line"),
+							     MSG_BUF_LEN - 1);
 	    else
-		STRCPY(msg_buf, _("1 line less"));
+		vim_strncpy(msg_buf, (char_u *)_("1 line less"),
+							     MSG_BUF_LEN - 1);
 	}
 	else
 	{
 	    if (n > 0)
-		sprintf((char *)msg_buf, _("%ld more lines"), pn);
+		vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+						     _("%ld more lines"), pn);
 	    else
-		sprintf((char *)msg_buf, _("%ld fewer lines"), pn);
+		vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
+						    _("%ld fewer lines"), pn);
 	}
 	if (got_int)
-	    STRCAT(msg_buf, _(" (Interrupted)"));
+	    vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
 	if (msg(msg_buf))
 	{
 	    set_keep_msg(msg_buf, 0);
@@ -3492,7 +3759,7 @@
     if (enc_utf8 && var != NULL)
     {
 	int	len;
-	char_u  *pp;
+	char_u  *pp = NULL;
 
 	/* Convert from active codepage to UTF-8.  Other conversions are
 	 * not done, because they would fail for non-ASCII characters. */
@@ -3540,6 +3807,14 @@
 {
     vim_free(homedir);
 }
+
+# ifdef FEAT_CMDL_COMPL
+    void
+free_users()
+{
+    ga_clear_strings(&ga_users);
+}
+# endif
 #endif
 
 /*
@@ -3859,11 +4134,13 @@
  * Vim's version of getenv().
  * Special handling of $HOME, $VIM and $VIMRUNTIME.
  * Also does ACP to 'enc' conversion for Win32.
+ * "mustfree" is set to TRUE when returned is allocated, it must be
+ * initialized to FALSE by the caller.
  */
     char_u *
 vim_getenv(name, mustfree)
     char_u	*name;
-    int		*mustfree;	/* set to TRUE when returned is allocated */
+    int		*mustfree;
 {
     char_u	*p;
     char_u	*pend;
@@ -3885,7 +4162,7 @@
 	if (enc_utf8)
 	{
 	    int	    len;
-	    char_u  *pp;
+	    char_u  *pp = NULL;
 
 	    /* Convert from active codepage to UTF-8.  Other conversions are
 	     * not done, because they would fail for non-ASCII characters. */
@@ -3929,7 +4206,7 @@
 	    if (enc_utf8)
 	    {
 		int	len;
-		char_u  *pp;
+		char_u  *pp = NULL;
 
 		/* Convert from active codepage to UTF-8.  Other conversions
 		 * are not done, because they would fail for non-ASCII
@@ -3937,7 +4214,7 @@
 		acp_to_enc(p, (int)STRLEN(p), &pp, &len);
 		if (pp != NULL)
 		{
-		    if (mustfree)
+		    if (*mustfree)
 			vim_free(p);
 		    p = pp;
 		    *mustfree = TRUE;
@@ -4074,17 +4351,6 @@
 	{
 	    vim_setenv((char_u *)"VIMRUNTIME", p);
 	    didset_vimruntime = TRUE;
-#ifdef FEAT_GETTEXT
-	    {
-		char_u	*buf = concat_str(p, (char_u *)"/lang");
-
-		if (buf != NULL)
-		{
-		    bindtextdomain(VIMPACKAGE, (char *)buf);
-		    vim_free(buf);
-		}
-	    }
-#endif
 	}
 	else
 	{
@@ -4162,6 +4428,22 @@
 	putenv((char *)envbuf);
     }
 #endif
+#ifdef FEAT_GETTEXT
+    /*
+     * When setting $VIMRUNTIME adjust the directory to find message
+     * translations to $VIMRUNTIME/lang.
+     */
+    if (*val != NUL && STRICMP(name, "VIMRUNTIME") == 0)
+    {
+	char_u	*buf = concat_str(val, (char_u *)"/lang");
+
+	if (buf != NULL)
+	{
+	    bindtextdomain(VIMPACKAGE, (char *)buf);
+	    vim_free(buf);
+	}
+    }
+#endif
 }
 
 #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
@@ -4202,6 +4484,81 @@
     return name;
 # endif
 }
+
+/*
+ * Find all user names for user completion.
+ * Done only once and then cached.
+ */
+    static void
+init_users()
+{
+    static int	lazy_init_done = FALSE;
+
+    if (lazy_init_done)
+	return;
+
+    lazy_init_done = TRUE;
+    ga_init2(&ga_users, sizeof(char_u *), 20);
+
+# if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H)
+    {
+	char_u*		user;
+	struct passwd*	pw;
+
+	setpwent();
+	while ((pw = getpwent()) != NULL)
+	    /* pw->pw_name shouldn't be NULL but just in case... */
+	    if (pw->pw_name != NULL)
+	    {
+		if (ga_grow(&ga_users, 1) == FAIL)
+		    break;
+		user = vim_strsave((char_u*)pw->pw_name);
+		if (user == NULL)
+		    break;
+		((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
+	    }
+	endpwent();
+    }
+# endif
+}
+
+/*
+ * Function given to ExpandGeneric() to obtain an user names.
+ */
+    char_u*
+get_users(xp, idx)
+    expand_T	*xp UNUSED;
+    int		idx;
+{
+    init_users();
+    if (idx < ga_users.ga_len)
+	return ((char_u **)ga_users.ga_data)[idx];
+    return NULL;
+}
+
+/*
+ * Check whether name matches a user name. Return:
+ * 0 if name does not match any user name.
+ * 1 if name partially matches the beginning of a user name.
+ * 2 is name fully matches a user name.
+ */
+int match_user(name)
+    char_u* name;
+{
+    int i;
+    int n = (int)STRLEN(name);
+    int result = 0;
+
+    init_users();
+    for (i = 0; i < ga_users.ga_len; i++)
+    {
+	if (STRCMP(((char_u **)ga_users.ga_data)[i], name) == 0)
+	    return 2; /* full match */
+	if (STRNCMP(((char_u **)ga_users.ga_data)[i], name, n) == 0)
+	    result = 1; /* partial match */
+    }
+    return result;
+}
 #endif
 
 /*
@@ -4220,7 +4577,7 @@
 {
     size_t	dirlen = 0, envlen = 0;
     size_t	len;
-    char_u	*homedir_env;
+    char_u	*homedir_env, *homedir_env_orig;
     char_u	*p;
 
     if (src == NULL)
@@ -4246,13 +4603,31 @@
 	dirlen = STRLEN(homedir);
 
 #ifdef VMS
-    homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
+    homedir_env_orig = homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
 #else
-    homedir_env = mch_getenv((char_u *)"HOME");
+    homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME");
 #endif
-
+    /* Empty is the same as not set. */
     if (homedir_env != NULL && *homedir_env == NUL)
 	homedir_env = NULL;
+
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL)
+    if (homedir_env != NULL && vim_strchr(homedir_env, '~') != NULL)
+    {
+	int	usedlen = 0;
+	int	flen;
+	char_u	*fbuf = NULL;
+
+	flen = (int)STRLEN(homedir_env);
+	(void)modify_fname((char_u *)":p", &usedlen,
+						  &homedir_env, &fbuf, &flen);
+	flen = (int)STRLEN(homedir_env);
+	if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
+	    /* Remove the trailing / that is added to a directory. */
+	    homedir_env[flen - 1] = NUL;
+    }
+#endif
+
     if (homedir_env != NULL)
 	envlen = STRLEN(homedir_env);
 
@@ -4306,6 +4681,9 @@
     /* if (dstlen == 0) out of space, what to do??? */
 
     *dst = NUL;
+
+    if (homedir_env != homedir_env_orig)
+	vim_free(homedir_env);
 }
 
 /*
@@ -4549,25 +4927,21 @@
 vim_ispathsep(c)
     int c;
 {
-#ifdef RISCOS
-    return (c == '.' || c == ':');
-#else
-# ifdef UNIX
+#ifdef UNIX
     return (c == '/');	    /* UNIX has ':' inside file names */
-# else
-#  ifdef BACKSLASH_IN_FILENAME
+#else
+# ifdef BACKSLASH_IN_FILENAME
     return (c == ':' || c == '/' || c == '\\');
-#  else
-#   ifdef VMS
+# else
+#  ifdef VMS
     /* server"user passwd"::device:[full.path.name]fname.extension;version" */
     return (c == ':' || c == '[' || c == ']' || c == '/'
 	    || c == '<' || c == '>' || c == '"' );
-#   else		/* Amiga */
+#  else
     return (c == ':' || c == '/');
-#   endif /* VMS */
-#  endif
+#  endif /* VMS */
 # endif
-#endif /* RISC OS */
+#endif
 }
 
 #if defined(FEAT_SEARCHPATH) || defined(PROTO)
@@ -4656,16 +5030,21 @@
     return retval;
 }
 
-#if (defined(CASE_INSENSITIVE_FILENAME) && defined(BACKSLASH_IN_FILENAME)) \
-	|| defined(PROTO)
 /*
- * Versions of fnamecmp() and fnamencmp() that handle '/' and '\' equally.
+ * Versions of fnamecmp() and fnamencmp() that handle '/' and '\' equally
+ * and deal with 'fileignorecase'.
  */
     int
 vim_fnamecmp(x, y)
     char_u	*x, *y;
 {
+#ifdef BACKSLASH_IN_FILENAME
     return vim_fnamencmp(x, y, MAXPATHL);
+#else
+    if (p_fic)
+	return MB_STRICMP(x, y);
+    return STRCMP(x, y);
+#endif
 }
 
     int
@@ -4673,21 +5052,34 @@
     char_u	*x, *y;
     size_t	len;
 {
-    while (len > 0 && *x && *y)
-    {
-	if (TOLOWER_LOC(*x) != TOLOWER_LOC(*y)
-		&& !(*x == '/' && *y == '\\')
-		&& !(*x == '\\' && *y == '/'))
+#ifdef BACKSLASH_IN_FILENAME
+    char_u	*px = x;
+    char_u	*py = y;
+    int		cx = NUL;
+    int		cy = NUL;
+
+    while (len > 0)
+    {
+	cx = PTR2CHAR(px);
+	cy = PTR2CHAR(py);
+	if (cx == NUL || cy == NUL
+	    || ((p_fic ? MB_TOLOWER(cx) != MB_TOLOWER(cy) : cx != cy)
+		&& !(cx == '/' && cy == '\\')
+		&& !(cx == '\\' && cy == '/')))
 	    break;
-	++x;
-	++y;
-	--len;
+	len -= MB_PTR2LEN(px);
+	px += MB_PTR2LEN(px);
+	py += MB_PTR2LEN(py);
     }
     if (len == 0)
 	return 0;
-    return (*x - *y);
-}
+    return (cx - cy);
+#else
+    if (p_fic)
+	return MB_STRNICMP(x, y, len);
+    return STRNCMP(x, y, len);
 #endif
+}
 
 /*
  * Concatenate file names fname1 and fname2 into allocated memory.
@@ -4752,8 +5144,8 @@
     char_u  *
 FullName_save(fname, force)
     char_u	*fname;
-    int		force;	    /* force expansion, even when it already looks
-			       like a full path name */
+    int		force;		/* force expansion, even when it already looks
+				 * like a full path name */
 {
     char_u	*buf;
     char_u	*new_fname = NULL;
@@ -4907,22 +5299,25 @@
 static int	cin_islinecomment __ARGS((char_u *));
 static int	cin_isterminated __ARGS((char_u *, int, int));
 static int	cin_isinit __ARGS((void));
-static int	cin_isfuncdecl __ARGS((char_u **, linenr_T));
+static int	cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T, int, int));
 static int	cin_isif __ARGS((char_u *));
 static int	cin_iselse __ARGS((char_u *));
 static int	cin_isdo __ARGS((char_u *));
 static int	cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
+static int	cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset));
 static int	cin_iswhileofdo_end __ARGS((int terminated, int	ind_maxparen, int ind_maxcomment));
 static int	cin_isbreak __ARGS((char_u *));
 static int	cin_is_cpp_baseclass __ARGS((colnr_T *col));
 static int	get_baseclass_amount __ARGS((int col, int ind_maxparen, int ind_maxcomment, int ind_cpp_baseclass));
 static int	cin_ends_in __ARGS((char_u *, char_u *, char_u *));
+static int	cin_starts_with __ARGS((char_u *s, char *word));
 static int	cin_skip2pos __ARGS((pos_T *trypos));
 static pos_T	*find_start_brace __ARGS((int));
 static pos_T	*find_match_paren __ARGS((int, int));
 static int	corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos));
 static int	find_last_paren __ARGS((char_u *l, int start, int end));
 static int	find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment));
+static int	cin_is_cpp_namespace __ARGS((char_u *));
 
 static int	ind_hash_comment = 0;   /* # starts a comment */
 
@@ -4968,7 +5363,7 @@
 }
 
 /*
- * Return TRUE if there there is no code at *s.  White space and comments are
+ * Return TRUE if there is no code at *s.  White space and comments are
  * not considered code.
  */
     static int
@@ -5087,21 +5482,40 @@
 }
 
 /*
- * Recognize structure initialization and enumerations.
- * Q&D-Implementation:
- * check for "=" at end or "[typedef] enum" at beginning of line.
+ * Recognize structure initialization and enumerations:
+ * "[typedef] [static|public|protected|private] enum"
+ * "[typedef] [static|public|protected|private] = {"
  */
     static int
 cin_isinit(void)
 {
     char_u	*s;
+    static char *skip[] = {"static", "public", "protected", "private"};
 
     s = cin_skipcomment(ml_get_curline());
 
-    if (STRNCMP(s, "typedef", 7) == 0 && !vim_isIDc(s[7]))
+    if (cin_starts_with(s, "typedef"))
 	s = cin_skipcomment(s + 7);
 
-    if (STRNCMP(s, "enum", 4) == 0 && !vim_isIDc(s[4]))
+    for (;;)
+    {
+	int i, l;
+
+	for (i = 0; i < (int)(sizeof(skip) / sizeof(char *)); ++i)
+	{
+	    l = (int)strlen(skip[i]);
+	    if (cin_starts_with(s, skip[i]))
+	    {
+		s = cin_skipcomment(s + l);
+		l = 0;
+		break;
+	    }
+	}
+	if (l != 0)
+	    break;
+    }
+
+    if (cin_starts_with(s, "enum"))
 	return TRUE;
 
     if (cin_ends_in(s, (char_u *)"=", (char_u *)"{"))
@@ -5119,7 +5533,7 @@
     int strict; /* Allow relaxed check of case statement for JS */
 {
     s = cin_skipcomment(s);
-    if (STRNCMP(s, "case", 4) == 0 && !vim_isIDc(s[4]))
+    if (cin_starts_with(s, "case"))
     {
 	for (s += 4; *s; ++s)
 	{
@@ -5185,6 +5599,50 @@
     return (*(s = cin_skipcomment(s + i)) == ':' && s[1] != ':');
 }
 
+/* Maximum number of lines to search back for a "namespace" line. */
+#define FIND_NAMESPACE_LIM 20
+
+/*
+ * Recognize a "namespace" scope declaration.
+ */
+    static int
+cin_is_cpp_namespace(s)
+    char_u	*s;
+{
+    char_u	*p;
+    int		has_name = FALSE;
+
+    s = cin_skipcomment(s);
+    if (STRNCMP(s, "namespace", 9) == 0 && (s[9] == NUL || !vim_iswordc(s[9])))
+    {
+	p = cin_skipcomment(skipwhite(s + 9));
+	while (*p != NUL)
+	{
+	    if (vim_iswhite(*p))
+	    {
+		has_name = TRUE; /* found end of a name */
+		p = cin_skipcomment(skipwhite(p));
+	    }
+	    else if (*p == '{')
+	    {
+		break;
+	    }
+	    else if (vim_iswordc(*p))
+	    {
+		if (has_name)
+		    return FALSE; /* word character after skipping past name */
+		++p;
+	    }
+	    else
+	    {
+		return FALSE;
+	    }
+	}
+	return TRUE;
+    }
+    return FALSE;
+}
+
 /*
  * Return a pointer to the first non-empty non-comment character after a ':'.
  * Return NULL if not found.
@@ -5383,8 +5841,7 @@
 cin_ispreproc(s)
     char_u *s;
 {
-    s = skipwhite(s);
-    if (*s == '#')
+    if (*skipwhite(s) == '#')
 	return TRUE;
     return FALSE;
 }
@@ -5444,8 +5901,11 @@
 }
 
 /*
- * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
+ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
+ * '}'.
  * Don't consider "} else" a terminated line.
+ * If a line begins with an "else", only consider it terminated if no unmatched
+ * opening braces follow (handle "else { foo();" correctly).
  * Return the character terminating the line (ending char's have precedence if
  * both apply in order to determine initializations).
  */
@@ -5455,21 +5915,35 @@
     int		incl_open;	/* include '{' at the end as terminator */
     int		incl_comma;	/* recognize a trailing comma */
 {
-    char_u found_start = 0;
+    char_u	found_start = 0;
+    unsigned	n_open = 0;
+    int		is_else = FALSE;
 
     s = cin_skipcomment(s);
 
     if (*s == '{' || (*s == '}' && !cin_iselse(s)))
 	found_start = *s;
 
+    if (!found_start)
+	is_else = cin_iselse(s);
+
     while (*s)
     {
 	/* skip over comments, "" strings and 'c'haracters */
 	s = skip_string(cin_skipcomment(s));
-	if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
-						 || (incl_comma && *s == ','))
+	if (*s == '}' && n_open > 0)
+	    --n_open;
+	if ((!is_else || n_open == 0)
+		&& (*s == ';' || *s == '}' || (incl_comma && *s == ','))
 		&& cin_nocode(s + 1))
 	    return *s;
+	else if (*s == '{')
+	{
+	    if (incl_open && cin_nocode(s + 1))
+		return *s;
+	    else
+		++n_open;
+	}
 
 	if (*s)
 	    s++;
@@ -5485,21 +5959,41 @@
  * "sp" points to a string with the line.  When looking at other lines it must
  * be restored to the line.  When it's NULL fetch lines here.
  * "lnum" is where we start looking.
+ * "min_lnum" is the line before which we will not be looking.
  */
     static int
-cin_isfuncdecl(sp, first_lnum)
+cin_isfuncdecl(sp, first_lnum, min_lnum, ind_maxparen, ind_maxcomment)
     char_u	**sp;
     linenr_T	first_lnum;
+    linenr_T	min_lnum;
+    int		ind_maxparen;
+    int		ind_maxcomment;
 {
     char_u	*s;
     linenr_T	lnum = first_lnum;
     int		retval = FALSE;
+    pos_T	*trypos;
+    int		just_started = TRUE;
 
     if (sp == NULL)
 	s = ml_get(lnum);
     else
 	s = *sp;
 
+    if (find_last_paren(s, '(', ')')
+	&& (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL)
+    {
+	lnum = trypos->lnum;
+	if (lnum < min_lnum)
+	    return FALSE;
+
+	s = ml_get(lnum);
+    }
+
+    /* Ignore line starting with #. */
+    if (cin_ispreproc(s))
+	return FALSE;
+
     while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
     {
 	if (cin_iscomment(s))	/* ignore comments */
@@ -5525,18 +6019,38 @@
 		retval = TRUE;
 	    goto done;
 	}
-	if (*s == ',' && cin_nocode(s + 1))
+	if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s))
 	{
-	    /* ',' at the end: continue looking in the next line */
+	    int comma = (*s == ',');
+
+	    /* ',' at the end: continue looking in the next line.
+	     * At the end: check for ',' in the next line, for this style:
+	     * func(arg1
+	     *       , arg2) */
+	    for (;;)
+	    {
+		if (lnum >= curbuf->b_ml.ml_line_count)
+		    break;
+		s = ml_get(++lnum);
+		if (!cin_ispreproc(s))
+		    break;
+	    }
 	    if (lnum >= curbuf->b_ml.ml_line_count)
 		break;
-
-	    s = ml_get(++lnum);
+	    /* Require a comma at end of the line or a comma or ')' at the
+	     * start of next line. */
+	    s = skipwhite(s);
+	    if (!just_started && (!comma && *s != ',' && *s != ')'))
+		break;
+	    just_started = FALSE;
 	}
 	else if (cin_iscomment(s))	/* ignore comments */
 	    s = cin_skipcomment(s);
 	else
+	{
 	    ++s;
+	    just_started = FALSE;
+	}
     }
 
 done:
@@ -5587,7 +6101,7 @@
     p = cin_skipcomment(p);
     if (*p == '}')		/* accept "} while (cond);" */
 	p = cin_skipcomment(p + 1);
-    if (STRNCMP(p, "while", 5) == 0 && !vim_isIDc(p[5]))
+    if (cin_starts_with(p, "while"))
     {
 	cursor_save = curwin->w_cursor;
 	curwin->w_cursor.lnum = lnum;
@@ -5607,6 +6121,52 @@
 }
 
 /*
+ * Check whether in "p" there is an "if", "for" or "while" before "*poffset".
+ * Return 0 if there is none.
+ * Otherwise return !0 and update "*poffset" to point to the place where the
+ * string was found.
+ */
+    static int
+cin_is_if_for_while_before_offset(line, poffset)
+    char_u *line;
+    int    *poffset;
+{
+    int offset = *poffset;
+
+    if (offset-- < 2)
+	return 0;
+    while (offset > 2 && vim_iswhite(line[offset]))
+	--offset;
+
+    offset -= 1;
+    if (!STRNCMP(line + offset, "if", 2))
+	goto probablyFound;
+
+    if (offset >= 1)
+    {
+	offset -= 1;
+	if (!STRNCMP(line + offset, "for", 3))
+	    goto probablyFound;
+
+	if (offset >= 2)
+	{
+	    offset -= 2;
+	    if (!STRNCMP(line + offset, "while", 5))
+		goto probablyFound;
+	}
+    }
+    return 0;
+
+probablyFound:
+    if (!offset || !vim_isIDc(line[offset - 1]))
+    {
+	*poffset = offset;
+	return 1;
+    }
+    return 0;
+}
+
+/*
  * Return TRUE if we are at the end of a do-while.
  *    do
  *       nothing;
@@ -5648,7 +6208,7 @@
 		    s = cin_skipcomment(ml_get(trypos->lnum));
 		    if (*s == '}')		/* accept "} while (cond);" */
 			s = cin_skipcomment(s + 1);
-		    if (STRNCMP(s, "while", 5) == 0 && !vim_isIDc(s[5]))
+		    if (cin_starts_with(s, "while"))
 		    {
 			curwin->w_cursor.lnum = trypos->lnum;
 			return TRUE;
@@ -5754,7 +6314,9 @@
 		continue;
 	}
 
-	if (s[0] == ':')
+	if (s[0] == '"')
+	    s = skip_string(s) + 1;
+	else if (s[0] == ':')
 	{
 	    if (s[1] == ':')
 	    {
@@ -5896,6 +6458,19 @@
 }
 
 /*
+ * Return TRUE when "s" starts with "word" and then a non-ID character.
+ */
+    static int
+cin_starts_with(s, word)
+    char_u *s;
+    char *word;
+{
+    int l = (int)STRLEN(word);
+
+    return (STRNCMP(s, word, l) == 0 && !vim_isIDc(s[l]));
+}
+
+/*
  * Skip strings, chars and comments until at or past "trypos".
  * Return the column found.
  */
@@ -5958,7 +6533,7 @@
 
 /*
  * Find the matching '(', failing if it is in a comment.
- * Return NULL of no match found.
+ * Return NULL if no match found.
  */
     static pos_T *
 find_match_paren(ind_maxparen, ind_maxcomment)	    /* XXX */
@@ -6008,7 +6583,7 @@
 
 /*
  * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
- * line "l".
+ * line "l".  "l" must point to the start of the line.
  */
     static int
 find_last_paren(l, start, end)
@@ -6021,7 +6596,7 @@
 
     curwin->w_cursor.col = 0;		    /* default is start of line */
 
-    for (i = 0; l[i]; i++)
+    for (i = 0; l[i] != NUL; i++)
     {
 	i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
 	i = (int)(skip_string(l + i) - l);    /* ignore parens in quotes */
@@ -6044,11 +6619,14 @@
     int
 get_c_indent()
 {
+    int sw = (int)get_sw_value();
+
     /*
      * spaces from a block's opening brace the prevailing indent for that
      * block should be
      */
-    int ind_level = curbuf->b_p_sw;
+
+    int ind_level = sw;
 
     /*
      * spaces from the edge of the line an open brace that's at the end of a
@@ -6095,12 +6673,12 @@
     /*
      * spaces from the switch() indent a "case xx" label should be located
      */
-    int ind_case = curbuf->b_p_sw;
+    int ind_case = sw;
 
     /*
      * spaces from the "case xx:" code after a switch() should be located
      */
-    int ind_case_code = curbuf->b_p_sw;
+    int ind_case_code = sw;
 
     /*
      * lineup break at end of case in switch() with case label
@@ -6111,45 +6689,45 @@
      * spaces from the class declaration indent a scope declaration label
      * should be located
      */
-    int ind_scopedecl = curbuf->b_p_sw;
+    int ind_scopedecl = sw;
 
     /*
      * spaces from the scope declaration label code should be located
      */
-    int ind_scopedecl_code = curbuf->b_p_sw;
+    int ind_scopedecl_code = sw;
 
     /*
      * amount K&R-style parameters should be indented
      */
-    int ind_param = curbuf->b_p_sw;
+    int ind_param = sw;
 
     /*
      * amount a function type spec should be indented
      */
-    int ind_func_type = curbuf->b_p_sw;
+    int ind_func_type = sw;
 
     /*
      * amount a cpp base class declaration or constructor initialization
      * should be indented
      */
-    int ind_cpp_baseclass = curbuf->b_p_sw;
+    int ind_cpp_baseclass = sw;
 
     /*
      * additional spaces beyond the prevailing indent a continuation line
      * should be located
      */
-    int ind_continuation = curbuf->b_p_sw;
+    int ind_continuation = sw;
 
     /*
      * spaces from the indent of the line with an unclosed parentheses
      */
-    int ind_unclosed = curbuf->b_p_sw * 2;
+    int ind_unclosed = sw * 2;
 
     /*
      * spaces from the indent of the line with an unclosed parentheses, which
      * itself is also unclosed
      */
-    int ind_unclosed2 = curbuf->b_p_sw;
+    int ind_unclosed2 = sw;
 
     /*
      * suppress ignoring spaces from the indent of a line starting with an
@@ -6222,6 +6800,17 @@
      */
     int ind_keep_case_label = 0;
 
+    /*
+     * handle C++ namespace
+     */
+    int ind_cpp_namespace = 0;
+
+    /*
+     * handle continuation lines containing conditions of if(), for() and
+     * while()
+     */
+    int ind_if_for_while = 0;
+
     pos_T	cur_curpos;
     int		amount;
     int		scope_amount;
@@ -6257,19 +6846,23 @@
     int		whilelevel;
     linenr_T	lnum;
     char_u	*options;
+    char_u	*digits;
     int		fraction = 0;	    /* init for GCC */
     int		divider;
     int		n;
     int		iscase;
     int		lookfor_break;
+    int		lookfor_cpp_namespace = FALSE;
     int		cont_amount = 0;    /* amount for continuation line */
     int		original_line_islabel;
+    int		added_to_amount = 0;
 
     for (options = curbuf->b_p_cino; *options; )
     {
 	l = options++;
 	if (*options == '-')
 	    ++options;
+	digits = options;	    /* remember where the digits start */
 	n = getdigits(&options);
 	divider = 0;
 	if (*options == '.')	    /* ".5s" means a fraction */
@@ -6286,13 +6879,13 @@
 	}
 	if (*options == 's')	    /* "2s" means two times 'shiftwidth' */
 	{
-	    if (n == 0 && fraction == 0)
-		n = curbuf->b_p_sw;	/* just "s" is one 'shiftwidth' */
+	    if (options == digits)
+		n = sw;	/* just "s" is one 'shiftwidth' */
 	    else
 	    {
-		n *= curbuf->b_p_sw;
+		n *= sw;
 		if (divider)
-		    n += (curbuf->b_p_sw * fraction + divider / 2) / divider;
+		    n += (sw * fraction + divider / 2) / divider;
 	    }
 	    ++options;
 	}
@@ -6335,6 +6928,8 @@
 	    case 'J': ind_js = n; break;
 	    case 'l': ind_keep_case_label = n; break;
 	    case '#': ind_hash_comment = n; break;
+	    case 'N': ind_cpp_namespace = n; break;
+	    case 'k': ind_if_for_while = n; break;
 	}
 	if (*options == ',')
 	    ++options;
@@ -6424,6 +7019,8 @@
 	/* find how indented the line beginning the comment is */
 	getvcol(curwin, trypos, &col, NULL, NULL);
 	amount = col;
+	*lead_start = NUL;
+	*lead_middle = NUL;
 
 	p = curbuf->b_p_com;
 	while (*p != NUL)
@@ -6636,6 +7233,33 @@
 	if (amount == -1)
 	{
 	    int	    ignore_paren_col = 0;
+	    int	    is_if_for_while = 0;
+
+	    if (ind_if_for_while)
+	    {
+		/* Look for the outermost opening parenthesis on this line
+		 * and check whether it belongs to an "if", "for" or "while". */
+
+		pos_T	    cursor_save = curwin->w_cursor;
+		pos_T	    outermost;
+		char_u	    *line;
+
+		trypos = &our_paren_pos;
+		do {
+		    outermost = *trypos;
+		    curwin->w_cursor.lnum = outermost.lnum;
+		    curwin->w_cursor.col = outermost.col;
+
+		    trypos = find_match_paren(ind_maxparen, ind_maxcomment);
+		} while (trypos && trypos->lnum == outermost.lnum);
+
+		curwin->w_cursor = cursor_save;
+
+		line = ml_get(outermost.lnum);
+
+		is_if_for_while =
+		    cin_is_if_for_while_before_offset(line, &outermost.col);
+	    }
 
 	    amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
 	    look = skipwhite(look);
@@ -6660,7 +7284,7 @@
 		curwin->w_cursor.lnum = save_lnum;
 		look = ml_get(our_paren_pos.lnum) + look_col;
 	    }
-	    if (theline[0] == ')' || ind_unclosed == 0
+	    if (theline[0] == ')' || (ind_unclosed == 0 && is_if_for_while == 0)
 		    || (!ind_unclosed_noignore && *look == '('
 						    && ignore_paren_col == 0))
 	    {
@@ -6731,7 +7355,8 @@
 	    {
 		/* Line up with the start of the matching paren line. */
 	    }
-	    else if (ind_unclosed == 0 || (!ind_unclosed_noignore
+	    else if ((ind_unclosed == 0 && is_if_for_while == 0)
+		     || (!ind_unclosed_noignore
 				    && *look == '(' && ignore_paren_col == 0))
 	    {
 		if (cur_amount != MAXCOL)
@@ -6764,11 +7389,15 @@
 		{
 		    curwin->w_cursor.lnum = our_paren_pos.lnum;
 		    curwin->w_cursor.col = col;
-		    if ((trypos = find_match_paren(ind_maxparen,
-						     ind_maxcomment)) != NULL)
+		    if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
 			amount += ind_unclosed2;
 		    else
-			amount += ind_unclosed;
+		    {
+			if (is_if_for_while)
+			    amount += ind_if_for_while;
+			else
+			    amount += ind_unclosed;
+		    }
 		}
 		/*
 		 * For a line starting with ')' use the minimum of the two
@@ -6838,7 +7467,7 @@
 	     *			ldfd) {
 	     *		    }
 	     */
-	    if ((ind_keep_case_label
+	    if (ind_js || (ind_keep_case_label
 			   && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
 		amount = get_indent();
 	    else
@@ -6901,11 +7530,24 @@
 	    if (start_brace == BRACE_IN_COL0)	    /* '{' is in column 0 */
 	    {
 		amount = ind_open_left_imag;
+		lookfor_cpp_namespace = TRUE;
+	    }
+	    else if (start_brace == BRACE_AT_START &&
+		    lookfor_cpp_namespace)	  /* '{' is at start */
+	    {
+
+		lookfor_cpp_namespace = TRUE;
 	    }
 	    else
 	    {
 		if (start_brace == BRACE_AT_END)    /* '{' is at end of line */
+		{
 		    amount += ind_open_imag;
+
+		    l = skipwhite(ml_get_curline());
+		    if (cin_is_cpp_namespace(l))
+			amount += ind_cpp_namespace;
+		}
 		else
 		{
 		    /* Compensate for adding ind_open_extra later. */
@@ -7014,7 +7656,8 @@
 			 * (it's a variable declaration).
 			 */
 			if (start_brace != BRACE_IN_COL0
-				|| !cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+				|| !cin_isfuncdecl(&l, curwin->w_cursor.lnum,
+					     0, ind_maxparen, ind_maxcomment))
 			{
 			    /* if the line is terminated with another ','
 			     * it is a continued variable initialization.
@@ -7076,12 +7719,59 @@
 			else
 			    amount += ind_continuation;
 		    }
-		    else if (lookfor != LOOKFOR_TERM
-					  && lookfor != LOOKFOR_CPP_BASECLASS)
+		    else
 		    {
-			amount = scope_amount;
-			if (theline[0] == '{')
-			    amount += ind_open_extra;
+			if (lookfor != LOOKFOR_TERM
+					  && lookfor != LOOKFOR_CPP_BASECLASS)
+			{
+			    amount = scope_amount;
+			    if (theline[0] == '{')
+			    {
+				amount += ind_open_extra;
+				added_to_amount = ind_open_extra;
+			    }
+			}
+
+			if (lookfor_cpp_namespace)
+			{
+			    /*
+			     * Looking for C++ namespace, need to look further
+			     * back.
+			     */
+			    if (curwin->w_cursor.lnum == ourscope)
+				continue;
+
+			    if (curwin->w_cursor.lnum == 0
+				    || curwin->w_cursor.lnum
+					      < ourscope - FIND_NAMESPACE_LIM)
+				break;
+
+			    l = ml_get_curline();
+
+			    /* If we're in a comment now, skip to the start of
+			     * the comment. */
+			    trypos = find_start_comment(ind_maxcomment);
+			    if (trypos != NULL)
+			    {
+				curwin->w_cursor.lnum = trypos->lnum + 1;
+				curwin->w_cursor.col = 0;
+				continue;
+			    }
+
+			    /* Skip preprocessor directives and blank lines. */
+			    if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
+				continue;
+
+			    /* Finally the actual check for "namespace". */
+			    if (cin_is_cpp_namespace(l))
+			    {
+				amount += ind_cpp_namespace - added_to_amount;
+				break;
+			    }
+
+			    if (cin_nocode(l))
+				continue;
+			}
 		    }
 		    break;
 		}
@@ -7466,17 +8156,25 @@
 
 			/*
 			 * When searching for a terminated line, don't use the
-			 * one between the "if" and the "else".
+			 * one between the "if" and the matching "else".
 			 * Need to use the scope of this "else".  XXX
 			 * If whilelevel != 0 continue looking for a "do {".
 			 */
-			if (cin_iselse(l)
-				&& whilelevel == 0
-				&& ((trypos = find_start_brace(ind_maxcomment))
-								    == NULL
+			if (cin_iselse(l) && whilelevel == 0)
+			{
+			    /* If we're looking at "} else", let's make sure we
+			     * find the opening brace of the enclosing scope,
+			     * not the one from "if () {". */
+			    if (*l == '}')
+				curwin->w_cursor.col =
+					  (colnr_T)(l - ml_get_curline()) + 1;
+
+			    if ((trypos = find_start_brace(ind_maxcomment))
+								       == NULL
 				    || find_match(LOOKFOR_IF, trypos->lnum,
-					ind_maxparen, ind_maxcomment) == FAIL))
-			    break;
+					ind_maxparen, ind_maxcomment) == FAIL)
+				break;
+			}
 		    }
 
 		    /*
@@ -7757,8 +8455,8 @@
 			 * If we're at the end of a block, skip to the start of
 			 * that block.
 			 */
-			curwin->w_cursor.col = 0;
-			if (*cin_skipcomment(l) == '}'
+			l = ml_get_curline();
+			if (find_last_paren(l, '{', '}')
 				&& (trypos = find_start_brace(ind_maxcomment))
 							    != NULL) /* XXX */
 			{
@@ -7820,7 +8518,9 @@
 		&& vim_strchr(theline, '}') == NULL
 		&& !cin_ends_in(theline, (char_u *)":", NULL)
 		&& !cin_ends_in(theline, (char_u *)",", NULL)
-		&& cin_isfuncdecl(NULL, cur_curpos.lnum + 1)
+		&& cin_isfuncdecl(NULL, cur_curpos.lnum + 1,
+				  cur_curpos.lnum + 1,
+				  ind_maxparen, ind_maxcomment)
 		&& !cin_isterminated(theline, FALSE, TRUE))
 	{
 	    amount = ind_func_type;
@@ -7926,7 +8626,8 @@
 		 * If the line looks like a function declaration, and we're
 		 * not in a comment, put it the left margin.
 		 */
-		if (cin_isfuncdecl(NULL, cur_curpos.lnum))  /* XXX */
+		if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0,
+				   ind_maxparen, ind_maxcomment))  /* XXX */
 		    break;
 		l = ml_get_curline();
 
@@ -7947,11 +8648,35 @@
 		    break;
 
 		/*
+		 * Find a line only has a semicolon that belongs to a previous
+		 * line ending in '}', e.g. before an #endif.  Don't increase
+		 * indent then.
+		 */
+		if (*(look = skipwhite(l)) == ';' && cin_nocode(look + 1))
+		{
+		    pos_T curpos_save = curwin->w_cursor;
+
+		    while (curwin->w_cursor.lnum > 1)
+		    {
+			look = ml_get(--curwin->w_cursor.lnum);
+			if (!(cin_nocode(look) || cin_ispreproc_cont(
+					      &look, &curwin->w_cursor.lnum)))
+			    break;
+		    }
+		    if (curwin->w_cursor.lnum > 0
+				    && cin_ends_in(look, (char_u *)"}", NULL))
+			break;
+
+		    curwin->w_cursor = curpos_save;
+		}
+
+		/*
 		 * If the PREVIOUS line is a function declaration, the current
 		 * line (and the ones that follow) needs to be indented as
 		 * parameters.
 		 */
-		if (cin_isfuncdecl(&l, curwin->w_cursor.lnum))
+		if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0,
+				   ind_maxparen, ind_maxcomment))
 		{
 		    amount = ind_param;
 		    break;
@@ -8149,12 +8874,18 @@
 get_expr_indent()
 {
     int		indent;
-    pos_T	pos;
+    pos_T	save_pos;
+    colnr_T	save_curswant;
+    int		save_set_curswant;
     int		save_State;
     int		use_sandbox = was_set_insecurely((char_u *)"indentexpr",
 								   OPT_LOCAL);
 
-    pos = curwin->w_cursor;
+    /* Save and restore cursor position and curswant, in case it was changed
+     * via :normal commands */
+    save_pos = curwin->w_cursor;
+    save_curswant = curwin->w_curswant;
+    save_set_curswant = curwin->w_set_curswant;
     set_vim_var_nr(VV_LNUM, curwin->w_cursor.lnum);
     if (use_sandbox)
 	++sandbox;
@@ -8169,7 +8900,9 @@
      * command. */
     save_State = State;
     State = INSERT;
-    curwin->w_cursor = pos;
+    curwin->w_cursor = save_pos;
+    curwin->w_curswant = save_curswant;
+    curwin->w_set_curswant = save_set_curswant;
     check_cursor();
     State = save_State;
 
@@ -8856,11 +9589,15 @@
     }
 
     /* compile the regexp into a program */
+    if (flags & (EW_NOERROR | EW_NOTWILD))
+	++emsg_silent;
     regmatch.rm_ic = TRUE;		/* Always ignore case */
     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+    if (flags & (EW_NOERROR | EW_NOTWILD))
+	--emsg_silent;
     vim_free(pat);
 
-    if (regmatch.regprog == NULL)
+    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
     {
 	vim_free(buf);
 	return 0;
@@ -8928,7 +9665,10 @@
 	 * all entries found with "matchname". */
 	if ((p[0] != '.' || starts_with_dot)
 		&& (matchname == NULL
-		    || vim_regexec(&regmatch, p, (colnr_T)0)))
+		  || (regmatch.regprog != NULL
+				     && vim_regexec(&regmatch, p, (colnr_T)0))
+		  || ((flags & EW_NOTWILD)
+		     && fnamencmp(path + (s - buf), p, e - s) == 0)))
 	{
 #ifdef WIN3264
 	    STRCPY(s, p);
@@ -9015,7 +9755,7 @@
 # endif
 #endif
     vim_free(buf);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
     vim_free(matchname);
 
     matches = gap->ga_len - start_len;
@@ -9096,6 +9836,7 @@
 
     /*
      * Find the first part in the path name that contains a wildcard.
+     * When EW_ICASE is set every letter is considered to be a wildcard.
      * Copy it into "buf", including the preceding characters.
      */
     p = buf;
@@ -9115,7 +9856,9 @@
 	    s = p + 1;
 	}
 	else if (path_end >= path + wildoff
-			 && vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
+			 && (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
+			     || (!p_fic && (flags & EW_ICASE)
+					     && isalpha(PTR2CHAR(path_end)))))
 	    e = p;
 #ifdef FEAT_MBYTE
 	if (has_mbyte)
@@ -9132,7 +9875,7 @@
     e = p;
     *e = NUL;
 
-    /* now we have one wildcard component between "s" and "e" */
+    /* Now we have one wildcard component between "s" and "e". */
     /* Remove backslashes between "wildoff" and the start of the wildcard
      * component. */
     for (p = buf + wildoff; p < s; ++p)
@@ -9158,15 +9901,18 @@
     }
 
     /* compile the regexp into a program */
-#ifdef CASE_INSENSITIVE_FILENAME
-    regmatch.rm_ic = TRUE;		/* Behave like Terminal.app */
-#else
-    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
-#endif
+    if (flags & EW_ICASE)
+	regmatch.rm_ic = TRUE;		/* 'wildignorecase' set */
+    else
+	regmatch.rm_ic = p_fic;	/* ignore case when 'fileignorecase' is set */
+    if (flags & (EW_NOERROR | EW_NOTWILD))
+	++emsg_silent;
     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
+    if (flags & (EW_NOERROR | EW_NOTWILD))
+	--emsg_silent;
     vim_free(pat);
 
-    if (regmatch.regprog == NULL)
+    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
     {
 	vim_free(buf);
 	return 0;
@@ -9196,7 +9942,10 @@
 	    if (dp == NULL)
 		break;
 	    if ((dp->d_name[0] != '.' || starts_with_dot)
-		    && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
+		 && ((regmatch.regprog != NULL && vim_regexec(&regmatch,
+					     (char_u *)dp->d_name, (colnr_T)0))
+		   || ((flags & EW_NOTWILD)
+		     && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
 	    {
 		STRCPY(s, dp->d_name);
 		len = STRLEN(buf);
@@ -9248,7 +9997,7 @@
     }
 
     vim_free(buf);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 
     matches = gap->ga_len - start_len;
     if (matches > 0)
@@ -9317,7 +10066,8 @@
 	    continue;  /* it's different when it's shorter */
 
 	rival = other_paths[j] + other_path_len - candidate_len;
-	if (fnamecmp(maybe_unique, rival) == 0)
+	if (fnamecmp(maybe_unique, rival) == 0
+		&& (rival == other_paths[j] || vim_ispathsep(*(rival - 1))))
 	    return FALSE;  /* match */
     }
 
@@ -9389,6 +10139,15 @@
 
 	if (ga_grow(gap, 1) == FAIL)
 	    break;
+
+# if defined(MSWIN) || defined(MSDOS)
+	/* Avoid the path ending in a backslash, it fails when a comma is
+	 * appended. */
+	len = (int)STRLEN(buf);
+	if (buf[len - 1] == '\\')
+	    buf[len - 1] = '/';
+# endif
+
 	p = vim_strsave(buf);
 	if (p == NULL)
 	    break;
@@ -9603,7 +10362,7 @@
 	vim_free(in_curdir);
     }
     ga_clear_strings(&path_ga);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 
     if (sort_again)
 	remove_duplicates(gap);
@@ -9642,7 +10401,7 @@
     if (paths == NULL)
 	return 0;
 
-    files = globpath(paths, pattern, 0);
+    files = globpath(paths, pattern, (flags & EW_ICASE) ? WILD_ICASE : 0);
     vim_free(paths);
     if (files == NULL)
 	return 0;
@@ -9698,6 +10457,54 @@
 }
 #endif
 
+static int has_env_var __ARGS((char_u *p));
+
+/*
+ * Return TRUE if "p" contains what looks like an environment variable.
+ * Allowing for escaping.
+ */
+    static int
+has_env_var(p)
+    char_u *p;
+{
+    for ( ; *p; mb_ptr_adv(p))
+    {
+	if (*p == '\\' && p[1] != NUL)
+	    ++p;
+	else if (vim_strchr((char_u *)
+#if defined(MSDOS) || defined(MSWIN) || defined(OS2)
+				    "$%"
+#else
+				    "$"
+#endif
+					, *p) != NULL)
+	    return TRUE;
+    }
+    return FALSE;
+}
+
+#ifdef SPECIAL_WILDCHAR
+static int has_special_wildchar __ARGS((char_u *p));
+
+/*
+ * Return TRUE if "p" contains a special wildcard character.
+ * Allowing for escaping.
+ */
+    static int
+has_special_wildchar(p)
+    char_u  *p;
+{
+    for ( ; *p; mb_ptr_adv(p))
+    {
+	if (*p == '\\' && p[1] != NUL)
+	    ++p;
+	else if (vim_strchr((char_u *)SPECIAL_WILDCHAR, *p) != NULL)
+	    return TRUE;
+    }
+    return FALSE;
+}
+#endif
+
 /*
  * Generic wildcard expansion code.
  *
@@ -9748,7 +10555,7 @@
      */
     for (i = 0; i < num_pat; i++)
     {
-	if (vim_strpbrk(pat[i], (char_u *)SPECIAL_WILDCHAR) != NULL
+	if (has_special_wildchar(pat[i])
 # ifdef VIM_BACKTICK
 		&& !(vim_backtick(pat[i]) && pat[i][1] == '=')
 # endif
@@ -9778,7 +10585,7 @@
 	    /*
 	     * First expand environment variables, "~/" and "~user/".
 	     */
-	    if (vim_strchr(p, '$') != NULL || *p == '~')
+	    if (has_env_var(p) || *p == '~')
 	    {
 		p = expand_env_save_opt(p, TRUE);
 		if (p == NULL)
@@ -9789,7 +10596,7 @@
 		 * variable, use the shell to do that.  Discard previously
 		 * found file names and start all over again.
 		 */
-		else if (vim_strchr(p, '$') != NULL || *p == '~')
+		else if (has_env_var(p) || *p == '~')
 		{
 		    vim_free(p);
 		    ga_clear_strings(&ga);
diff -Naur vim73.orig/src/misc2.c vim73/src/misc2.c
--- vim73.orig/src/misc2.c	2010-08-13 09:14:35.000000000 +0000
+++ vim73/src/misc2.c	2013-08-04 19:09:10.453944330 +0000
@@ -200,7 +200,6 @@
 	}
 #endif
 
-	idx = -1;
 	ptr = line;
 	while (col <= wcol && *ptr != NUL)
 	{
@@ -334,7 +333,7 @@
 #ifdef FEAT_MBYTE
     /* prevent from moving onto a trail byte */
     if (has_mbyte)
-	mb_adjustpos(pos);
+	mb_adjustpos(curbuf, pos);
 #endif
 
     if (col < wcol)
@@ -545,16 +544,26 @@
     void
 check_cursor_col()
 {
+    check_cursor_col_win(curwin);
+}
+
+/*
+ * Make sure win->w_cursor.col is valid.
+ */
+    void
+check_cursor_col_win(win)
+    win_T *win;
+{
     colnr_T len;
 #ifdef FEAT_VIRTUALEDIT
-    colnr_T oldcol = curwin->w_cursor.col;
-    colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd;
+    colnr_T oldcol = win->w_cursor.col;
+    colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd;
 #endif
 
-    len = (colnr_T)STRLEN(ml_get_curline());
+    len = (colnr_T)STRLEN(ml_get_buf(win->w_buffer, win->w_cursor.lnum, FALSE));
     if (len == 0)
-	curwin->w_cursor.col = 0;
-    else if (curwin->w_cursor.col >= len)
+	win->w_cursor.col = 0;
+    else if (win->w_cursor.col >= len)
     {
 	/* Allow cursor past end-of-line when:
 	 * - in Insert mode or restarting Insert mode
@@ -568,33 +577,33 @@
 		|| (ve_flags & VE_ONEMORE)
 #endif
 		|| virtual_active())
-	    curwin->w_cursor.col = len;
+	    win->w_cursor.col = len;
 	else
 	{
-	    curwin->w_cursor.col = len - 1;
+	    win->w_cursor.col = len - 1;
 #ifdef FEAT_MBYTE
-	    /* prevent cursor from moving on the trail byte */
+	    /* Move the cursor to the head byte. */
 	    if (has_mbyte)
-		mb_adjust_cursor();
+		mb_adjustpos(win->w_buffer, &win->w_cursor);
 #endif
 	}
     }
-    else if (curwin->w_cursor.col < 0)
-	curwin->w_cursor.col = 0;
+    else if (win->w_cursor.col < 0)
+	win->w_cursor.col = 0;
 
 #ifdef FEAT_VIRTUALEDIT
     /* If virtual editing is on, we can leave the cursor on the old position,
      * only we must set it to virtual.  But don't do it when at the end of the
      * line. */
     if (oldcol == MAXCOL)
-	curwin->w_cursor.coladd = 0;
+	win->w_cursor.coladd = 0;
     else if (ve_flags == VE_ALL)
     {
-	if (oldcoladd > curwin->w_cursor.col)
-	    curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col;
+	if (oldcoladd > win->w_cursor.col)
+	    win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
 	else
 	    /* avoid weird number when there is a miscalculation or overflow */
-	    curwin->w_cursor.coladd = 0;
+	    win->w_cursor.coladd = 0;
     }
 #endif
 }
@@ -806,6 +815,7 @@
 #else
 # define KEEP_ROOM (2 * 8192L)
 #endif
+#define KEEP_ROOM_KB (KEEP_ROOM / 1024L)
 
 /*
  * Note: if unsigned is 16 bits we can only allocate up to 64K with alloc().
@@ -931,7 +941,7 @@
 	    allocated = 0;
 # endif
 	    /* 3. check for available memory: call mch_avail_mem() */
-	    if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
+	    if (mch_avail_mem(TRUE) < KEEP_ROOM_KB && !releasing)
 	    {
 		free((char *)p);	/* System is low... no go! */
 		p = NULL;
@@ -1003,8 +1013,12 @@
     {
 	/* Don't hide this message */
 	emsg_silent = 0;
-	EMSGN(_("E342: Out of memory!  (allocating %lu bytes)"), size);
+
+	/* Must come first to avoid coming back here when printing the error
+	 * message fails, e.g. when setting v:errmsg. */
 	did_outofmem_msg = TRUE;
+
+	EMSGN(_("E342: Out of memory!  (allocating %lu bytes)"), size);
     }
 }
 
@@ -1096,6 +1110,9 @@
     free_all_marks();
     alist_clear(&global_alist);
     free_homedir();
+# if defined(FEAT_CMDL_COMPL)
+    free_users();
+# endif
     free_search_patterns();
     free_old_sub();
     free_last_insert();
@@ -1117,7 +1134,7 @@
     /* Free some global vars. */
     vim_free(username);
 # ifdef FEAT_CLIPBOARD
-    vim_free(clip_exclude_prog);
+    vim_regfree(clip_exclude_prog);
 # endif
     vim_free(last_cmdline);
 # ifdef FEAT_CMDHIST
@@ -1160,7 +1177,7 @@
     for (buf = firstbuf; buf != NULL; )
     {
 	nextbuf = buf->b_next;
-	close_buffer(NULL, buf, DOBUF_WIPE);
+	close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
 	if (buf_valid(buf))
 	    buf = nextbuf;	/* didn't work, try next one */
 	else
@@ -1223,7 +1240,7 @@
 #endif
 
 /*
- * copy a string into newly allocated memory
+ * Copy "string" into newly allocated memory.
  */
     char_u *
 vim_strsave(string)
@@ -1239,6 +1256,12 @@
     return p;
 }
 
+/*
+ * Copy up to "len" bytes of "string" into newly allocated memory and
+ * terminate with a NUL.
+ * The allocated memory always has size "len + 1", also when "string" is
+ * shorter.
+ */
     char_u *
 vim_strnsave(string, len)
     char_u	*string;
@@ -1540,7 +1563,7 @@
 	    if (enc_utf8)
 	    {
 		int	c, uc;
-		int	nl;
+		int	newl;
 		char_u	*s;
 
 		c = utf_ptr2char(p);
@@ -1549,21 +1572,21 @@
 		/* Reallocate string when byte count changes.  This is rare,
 		 * thus it's OK to do another malloc()/free(). */
 		l = utf_ptr2len(p);
-		nl = utf_char2len(uc);
-		if (nl != l)
+		newl = utf_char2len(uc);
+		if (newl != l)
 		{
-		    s = alloc((unsigned)STRLEN(res) + 1 + nl - l);
+		    s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
 		    if (s == NULL)
 			break;
 		    mch_memmove(s, res, p - res);
-		    STRCPY(s + (p - res) + nl, p + l);
+		    STRCPY(s + (p - res) + newl, p + l);
 		    p = s + (p - res);
 		    vim_free(res);
 		    res = s;
 		}
 
 		utf_char2bytes(uc, p);
-		p += nl;
+		p += newl;
 	    }
 	    else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
 		p += l;		/* skip multi-byte character */
@@ -1642,6 +1665,28 @@
 }
 
 /*
+ * Like strcat(), but make sure the result fits in "tosize" bytes and is
+ * always NUL terminated.
+ */
+    void
+vim_strcat(to, from, tosize)
+    char_u	*to;
+    char_u	*from;
+    size_t	tosize;
+{
+    size_t tolen = STRLEN(to);
+    size_t fromlen = STRLEN(from);
+
+    if (tolen + fromlen + 1 > tosize)
+    {
+	mch_memmove(to + tolen, from, tosize - tolen - 1);
+	to[tosize - 1] = NUL;
+    }
+    else
+	STRCPY(to + tolen, from);
+}
+
+/*
  * Isolate one part of a string option where parts are separated with
  * "sep_chars".
  * The part is copied into "buf[maxlen]".
@@ -2023,24 +2068,22 @@
     garray_T	*gap;
     int		n;
 {
-    size_t	len;
+    size_t	old_len;
+    size_t	new_len;
     char_u	*pp;
 
     if (gap->ga_maxlen - gap->ga_len < n)
     {
 	if (n < gap->ga_growsize)
 	    n = gap->ga_growsize;
-	len = gap->ga_itemsize * (gap->ga_len + n);
-	pp = alloc_clear((unsigned)len);
+	new_len = gap->ga_itemsize * (gap->ga_len + n);
+	pp = (gap->ga_data == NULL)
+	      ? alloc((unsigned)new_len) : vim_realloc(gap->ga_data, new_len);
 	if (pp == NULL)
 	    return FAIL;
+	old_len = gap->ga_itemsize * gap->ga_maxlen;
+	vim_memset(pp + old_len, 0, new_len - old_len);
 	gap->ga_maxlen = gap->ga_len + n;
-	if (gap->ga_data != NULL)
-	{
-	    mch_memmove(pp, gap->ga_data,
-				      (size_t)(gap->ga_itemsize * gap->ga_len));
-	    vim_free(gap->ga_data);
-	}
 	gap->ga_data = pp;
     }
     return OK;
@@ -2109,6 +2152,25 @@
     }
 }
 
+#if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
+/*
+ * Append the text in "gap" below the cursor line and clear "gap".
+ */
+    void
+append_ga_line(gap)
+    garray_T	*gap;
+{
+    /* Remove trailing CR. */
+    if (gap->ga_len > 0
+	    && !curbuf->b_p_bin
+	    && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
+	--gap->ga_len;
+    ga_append(gap, NUL);
+    ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
+    gap->ga_len = 0;
+}
+#endif
+
 /************************************************************************
  * functions that use lookup tables for various things, generally to do with
  * special key codes.
@@ -2356,10 +2418,24 @@
     {'<',		(char_u *)"lt"},
 
     {K_MOUSE,		(char_u *)"Mouse"},
+#ifdef FEAT_MOUSE_NET
     {K_NETTERM_MOUSE,	(char_u *)"NetMouse"},
+#endif
+#ifdef FEAT_MOUSE_DEC
     {K_DEC_MOUSE,	(char_u *)"DecMouse"},
+#endif
+#ifdef FEAT_MOUSE_JSB
     {K_JSBTERM_MOUSE,	(char_u *)"JsbMouse"},
+#endif
+#ifdef FEAT_MOUSE_PTERM
     {K_PTERM_MOUSE,	(char_u *)"PtermMouse"},
+#endif
+#ifdef FEAT_MOUSE_URXVT
+    {K_URXVT_MOUSE,	(char_u *)"UrxvtMouse"},
+#endif
+#ifdef FEAT_MOUSE_SGR
+    {K_SGR_MOUSE,	(char_u *)"SgrMouse"},
+#endif
     {K_LEFTMOUSE,	(char_u *)"LeftMouse"},
     {K_LEFTMOUSE_NM,	(char_u *)"LeftMouseNM"},
     {K_LEFTDRAG,	(char_u *)"LeftDrag"},
@@ -2698,6 +2774,7 @@
     int		bit;
     int		key;
     unsigned long n;
+    int		l;
 
     src = *srcp;
     if (src[0] != '<')
@@ -2710,26 +2787,32 @@
 	if (*bp == '-')
 	{
 	    last_dash = bp;
-	    if (bp[1] != NUL && bp[2] == '>')
-		++bp;	/* anything accepted, like <C-?> */
+	    if (bp[1] != NUL)
+	    {
+#ifdef FEAT_MBYTE
+		if (has_mbyte)
+		    l = mb_ptr2len(bp + 1);
+		else
+#endif
+		    l = 1;
+		if (bp[l + 1] == '>')
+		    bp += l;	/* anything accepted, like <C-?> */
+	    }
 	}
 	if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
 	    bp += 3;	/* skip t_xx, xx may be '-' or '>' */
+	else if (STRNICMP(bp, "char-", 5) == 0)
+	{
+	    vim_str2nr(bp + 5, NULL, &l, TRUE, TRUE, NULL, NULL);
+	    bp += l + 5;
+	    break;
+	}
     }
 
     if (*bp == '>')	/* found matching '>' */
     {
 	end_of_name = bp + 1;
 
-	if (STRNICMP(src + 1, "char-", 5) == 0 && VIM_ISDIGIT(src[6]))
-	{
-	    /* <Char-123> or <Char-033> or <Char-0x33> */
-	    vim_str2nr(src + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
-	    *modp = 0;
-	    *srcp = end_of_name;
-	    return (int)n;
-	}
-
 	/* Which modifiers are given? */
 	modifiers = 0x0;
 	for (bp = src + 1; bp < last_dash; bp++)
@@ -2748,16 +2831,32 @@
 	 */
 	if (bp >= last_dash)
 	{
-	    /*
-	     * Modifier with single letter, or special key name.
-	     */
-	    if (modifiers != 0 && last_dash[2] == '>')
-		key = last_dash[1];
+	    if (STRNICMP(last_dash + 1, "char-", 5) == 0
+						 && VIM_ISDIGIT(last_dash[6]))
+	    {
+		/* <Char-123> or <Char-033> or <Char-0x33> */
+		vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+		key = (int)n;
+	    }
 	    else
 	    {
-		key = get_special_key_code(last_dash + 1);
-		if (!keep_x_key)
-		    key = handle_x_keys(key);
+		/*
+		 * Modifier with single letter, or special key name.
+		 */
+#ifdef FEAT_MBYTE
+		if (has_mbyte)
+		    l = mb_ptr2len(last_dash + 1);
+		else
+#endif
+		    l = 1;
+		if (modifiers != 0 && last_dash[l + 1] == '>')
+		    key = PTR2CHAR(last_dash + 1);
+		else
+		{
+		    key = get_special_key_code(last_dash + 1);
+		    if (!keep_x_key)
+			key = handle_x_keys(key);
+		}
 	    }
 
 	    /*
@@ -2808,7 +2907,7 @@
     int	modifiers = *modp;
 
 #ifdef MACOS
-    /* Command-key really special, No fancynest */
+    /* Command-key really special, no fancynest */
     if (!(modifiers & MOD_MASK_CMD))
 #endif
     if ((modifiers & MOD_MASK_SHIFT) && ASCII_ISALPHA(key))
@@ -2835,7 +2934,7 @@
 	    key = K_ZERO;
     }
 #ifdef MACOS
-    /* Command-key really special, No fancynest */
+    /* Command-key really special, no fancynest */
     if (!(modifiers & MOD_MASK_CMD))
 #endif
     if ((modifiers & MOD_MASK_ALT) && key < 0x80
@@ -3131,17 +3230,31 @@
 	    retval = mch_call_shell(cmd, opt);
 	else
 	{
-	    ncmd = alloc((unsigned)(STRLEN(cmd) + STRLEN(p_sxq) * 2 + 1));
+	    char_u *ecmd = cmd;
+
+	    if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0)
+	    {
+		ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
+		if (ecmd == NULL)
+		    ecmd = cmd;
+	    }
+	    ncmd = alloc((unsigned)(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1));
 	    if (ncmd != NULL)
 	    {
 		STRCPY(ncmd, p_sxq);
-		STRCAT(ncmd, cmd);
-		STRCAT(ncmd, p_sxq);
+		STRCAT(ncmd, ecmd);
+		/* When 'shellxquote' is ( append ).
+		 * When 'shellxquote' is "( append )". */
+		STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
+			   : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""
+			   : p_sxq);
 		retval = mch_call_shell(ncmd, opt);
 		vim_free(ncmd);
 	    }
 	    else
 		retval = -1;
+	    if (ecmd != cmd)
+		vim_free(ecmd);
 	}
 #ifdef FEAT_GUI
 	--hold_gui_events;
@@ -3191,7 +3304,7 @@
 #if defined(FEAT_MBYTE) || defined(PROTO)
 /*
  * Return TRUE if "p" points to just after a path separator.
- * Take care of multi-byte characters.
+ * Takes care of multi-byte characters.
  * "b" must point to the start of the file name
  */
     int
@@ -3199,7 +3312,7 @@
     char_u	*b;
     char_u	*p;
 {
-    return vim_ispathsep(p[-1])
+    return p > b && vim_ispathsep(p[-1])
 			     && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
 }
 #endif
@@ -3747,7 +3860,7 @@
     ush temp; \
  \
     temp = (ush)keys[2] | 2; \
-    t = (int)(((unsigned)(temp * (temp ^ 1)) >> 8) & 0xff); \
+    t = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff); \
 }
 
 /*
@@ -3889,7 +4002,7 @@
 	    ush temp;
 
 	    temp = (ush)keys[2] | 2;
-	    temp = (int)(((unsigned)(temp * (temp ^ 1)) >> 8) & 0xff);
+	    temp = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff);
 	    UPDATE_KEYS_ZIP(*p ^= temp);
 	}
     else
@@ -4210,6 +4323,8 @@
 static int ff_path_in_stoplist __ARGS((char_u *, int, char_u **));
 #endif
 
+static char_u e_pathtoolong[] = N_("E854: path too long for completion");
+
 #if 0
 /*
  * if someone likes findfirst/findnext, here are the functions
@@ -4506,6 +4621,11 @@
 	len = 0;
 	while (*wc_part != NUL)
 	{
+	    if (len + 5 >= MAXPATHL)
+	    {
+		EMSG(_(e_pathtoolong));
+		break;
+	    }
 	    if (STRNCMP(wc_part, "**", 2) == 0)
 	    {
 		ff_expand_buffer[len++] = *wc_part++;
@@ -4551,10 +4671,67 @@
     }
 
     /* create an absolute path */
+    if (STRLEN(search_ctx->ffsc_start_dir)
+			  + STRLEN(search_ctx->ffsc_fix_path) + 3 >= MAXPATHL)
+    {
+	EMSG(_(e_pathtoolong));
+	goto error_return;
+    }
     STRCPY(ff_expand_buffer, search_ctx->ffsc_start_dir);
     add_pathsep(ff_expand_buffer);
-    STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
-    add_pathsep(ff_expand_buffer);
+    {
+	int    eb_len = (int)STRLEN(ff_expand_buffer);
+	char_u *buf = alloc(eb_len
+				+ (int)STRLEN(search_ctx->ffsc_fix_path) + 1);
+
+	STRCPY(buf, ff_expand_buffer);
+	STRCPY(buf + eb_len, search_ctx->ffsc_fix_path);
+	if (mch_isdir(buf))
+	{
+	    STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
+	    add_pathsep(ff_expand_buffer);
+	}
+#ifdef FEAT_PATH_EXTRA
+	else
+	{
+	    char_u *p =  gettail(search_ctx->ffsc_fix_path);
+	    char_u *wc_path = NUL;
+	    char_u *temp = NUL;
+	    int    len = 0;
+
+	    if (p > search_ctx->ffsc_fix_path)
+	    {
+		len = (int)(p - search_ctx->ffsc_fix_path) - 1;
+		STRNCAT(ff_expand_buffer, search_ctx->ffsc_fix_path, len);
+		add_pathsep(ff_expand_buffer);
+	    }
+	    else
+		len = (int)STRLEN(search_ctx->ffsc_fix_path);
+
+	    if (search_ctx->ffsc_wc_path != NULL)
+	    {
+		wc_path = vim_strsave(search_ctx->ffsc_wc_path);
+		temp = alloc((int)(STRLEN(search_ctx->ffsc_wc_path)
+				 + (STRLEN(search_ctx->ffsc_fix_path)) - len));
+	    }
+
+	    if (temp == NULL || wc_path == NULL)
+	    {
+		vim_free(buf);
+		vim_free(temp);
+		vim_free(wc_path);
+		goto error_return;
+	    }
+
+	    STRCPY(temp, search_ctx->ffsc_fix_path + len);
+	    STRCAT(temp, search_ctx->ffsc_wc_path);
+	    vim_free(search_ctx->ffsc_wc_path);
+	    vim_free(wc_path);
+	    search_ctx->ffsc_wc_path = temp;
+	}
+#endif
+	vim_free(buf);
+    }
 
     sptr = ff_create_stack_element(ff_expand_buffer,
 #ifdef FEAT_PATH_EXTRA
@@ -4597,9 +4774,8 @@
     {
 	if (r_ptr[0] == '\\' && r_ptr[1] == ';')
 	{
-	    /* overwrite the escape char,
-	     * use STRLEN(r_ptr) to move the trailing '\0'
-	     */
+	    /* Overwrite the escape char,
+	     * use STRLEN(r_ptr) to move the trailing '\0'. */
 	    STRMOVE(r_ptr, r_ptr + 1);
 	    r_ptr++;
 	}
@@ -4858,10 +5034,13 @@
 			stackp->ffs_filearray_size = 0;
 		}
 		else
+		    /* Add EW_NOTWILD because the expanded path may contain
+		     * wildcard characters that are to be taken literally.
+		     * This is a bit of a hack. */
 		    expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
 			    &stackp->ffs_filearray_size,
 			    &stackp->ffs_filearray,
-			    EW_DIR|EW_ADDSLASH|EW_SILENT);
+			    EW_DIR|EW_ADDSLASH|EW_SILENT|EW_NOTWILD);
 
 		stackp->ffs_filearray_cur = 0;
 		stackp->ffs_stage = 0;
@@ -4880,8 +5059,8 @@
 #endif
 		{
 		    /*
-		     * we don't have further wildcards to expand, so we have to
-		     * check for the final file now
+		     * We don't have further wildcards to expand, so we have to
+		     * check for the final file now.
 		     */
 		    for (i = stackp->ffs_filearray_cur;
 					  i < stackp->ffs_filearray_size; ++i)
@@ -5224,6 +5403,8 @@
     char_u	*s2;
 {
     int		i;
+    int		prev1 = NUL;
+    int		prev2 = NUL;
 
     if (s1 == s2)
 	return TRUE;
@@ -5234,22 +5415,16 @@
     if (STRLEN(s1) != STRLEN(s2))
 	return FAIL;
 
-    for (i = 0; s1[i] != NUL && s2[i] != NUL; i++)
+    for (i = 0; s1[i] != NUL && s2[i] != NUL; i += MB_PTR2LEN(s1 + i))
     {
-	if (s1[i] != s2[i]
-#ifdef CASE_INSENSITIVE_FILENAME
-		&& TOUPPER_LOC(s1[i]) != TOUPPER_LOC(s2[i])
-#endif
-		)
-	{
-	    if (i >= 2)
-		if (s1[i-1] == '*' && s1[i-2] == '*')
-		    continue;
-		else
-		    return FAIL;
-	    else
-		return FAIL;
-	}
+	int c1 = PTR2CHAR(s1 + i);
+	int c2 = PTR2CHAR(s2 + i);
+
+	if ((p_fic ? MB_TOLOWER(c1) != MB_TOLOWER(c2) : c1 != c2)
+		&& (prev1 != '*' || prev2 != '*'))
+	    return FAIL;
+	prev2 = prev1;
+	prev1 = c1;
     }
     return TRUE;
 }
@@ -5975,57 +6150,59 @@
     int maxlen;
 {
     int		i;
+    int		c1, c2;
     const char	*s = NULL;
 
-    for (i = 0; maxlen < 0 || i < maxlen; ++i)
+    for (i = 0; maxlen < 0 || i < maxlen; i += MB_PTR2LEN((char_u *)p + i))
     {
+	c1 = PTR2CHAR((char_u *)p + i);
+	c2 = PTR2CHAR((char_u *)q + i);
+
 	/* End of "p": check if "q" also ends or just has a slash. */
-	if (p[i] == NUL)
+	if (c1 == NUL)
 	{
-	    if (q[i] == NUL)  /* full match */
+	    if (c2 == NUL)  /* full match */
 		return 0;
 	    s = q;
 	    break;
 	}
 
 	/* End of "q": check if "p" just has a slash. */
-	if (q[i] == NUL)
+	if (c2 == NUL)
 	{
 	    s = p;
 	    break;
 	}
 
-	if (
-#ifdef CASE_INSENSITIVE_FILENAME
-		TOUPPER_LOC(p[i]) != TOUPPER_LOC(q[i])
-#else
-		p[i] != q[i]
-#endif
+	if ((p_fic ? MB_TOUPPER(c1) != MB_TOUPPER(c2) : c1 != c2)
 #ifdef BACKSLASH_IN_FILENAME
 		/* consider '/' and '\\' to be equal */
-		&& !((p[i] == '/' && q[i] == '\\')
-		    || (p[i] == '\\' && q[i] == '/'))
+		&& !((c1 == '/' && c2 == '\\')
+		    || (c1 == '\\' && c2 == '/'))
 #endif
 		)
 	{
-	    if (vim_ispathsep(p[i]))
+	    if (vim_ispathsep(c1))
 		return -1;
-	    if (vim_ispathsep(q[i]))
+	    if (vim_ispathsep(c2))
 		return 1;
-	    return ((char_u *)p)[i] - ((char_u *)q)[i];	    /* no match */
+	    return p_fic ? MB_TOUPPER(c1) - MB_TOUPPER(c2)
+		    : c1 - c2;  /* no match */
 	}
     }
     if (s == NULL)	/* "i" ran into "maxlen" */
 	return 0;
 
+    c1 = PTR2CHAR((char_u *)s + i);
+    c2 = PTR2CHAR((char_u *)s + i + MB_PTR2LEN((char_u *)s + i));
     /* ignore a trailing slash, but not "//" or ":/" */
-    if (s[i + 1] == NUL
+    if (c2 == NUL
 	    && i > 0
 	    && !after_pathsep((char_u *)s, (char_u *)s + i)
 #ifdef BACKSLASH_IN_FILENAME
-	    && (s[i] == '/' || s[i] == '\\')
+	    && (c1 == '/' || c1 == '\\')
 #else
-	    && s[i] == '/'
+	    && c1 == '/'
 #endif
        )
 	return 0;   /* match with trailing slash */
@@ -6443,3 +6620,23 @@
 #endif
 
 #endif
+
+#if (defined(FEAT_MBYTE) && defined(FEAT_QUICKFIX)) \
+	|| defined(FEAT_SPELL) || defined(PROTO)
+/*
+ * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
+ * When "s" is NULL FALSE is returned.
+ */
+    int
+has_non_ascii(s)
+    char_u	*s;
+{
+    char_u	*p;
+
+    if (s != NULL)
+	for (p = s; *p != NUL; ++p)
+	    if (*p >= 128)
+		return TRUE;
+    return FALSE;
+}
+#endif
diff -Naur vim73.orig/src/move.c vim73/src/move.c
--- vim73.orig/src/move.c	2010-08-08 13:12:31.000000000 +0000
+++ vim73/src/move.c	2013-08-04 19:09:10.460610977 +0000
@@ -362,7 +362,7 @@
 #endif
 	    )
     {
-	dollar_vcol = 0;
+	dollar_vcol = -1;
 	if (curwin->w_skipcol != 0)
 	{
 	    curwin->w_skipcol = 0;
@@ -926,8 +926,8 @@
  * Also updates curwin->w_leftcol.
  */
     void
-curs_columns(scroll)
-    int		scroll;		/* when TRUE, may scroll horizontally */
+curs_columns(may_scroll)
+    int		may_scroll;	/* when TRUE, may scroll horizontally */
 {
     int		diff;
     int		extra;		/* offset for first screen line */
@@ -966,7 +966,7 @@
 
     /* remove '$' from change command when cursor moves onto it */
     if (startcol > dollar_vcol)
-	dollar_vcol = 0;
+	dollar_vcol = -1;
 
     extra = curwin_col_off();
     curwin->w_wcol = curwin->w_virtcol + extra;
@@ -1014,7 +1014,7 @@
     /* No line wrapping: compute curwin->w_leftcol if scrolling is on and line
      * is not folded.
      * If scrolling is off, curwin->w_leftcol is assumed to be 0 */
-    else if (scroll
+    else if (may_scroll
 #ifdef FEAT_FOLDING
 	    && !curwin->w_cline_folded
 #endif
@@ -2576,7 +2576,7 @@
     else
 	topline_back(lp);
     h2 = lp->height;
-    if (h2 + h1 > min_height)
+    if (h2 == MAXCOL || h2 + h1 > min_height)
     {
 	*lp = loff0;	/* no overlap */
 	return;
@@ -2588,7 +2588,7 @@
     else
 	topline_back(lp);
     h3 = lp->height;
-    if (h3 + h2 > min_height)
+    if (h3 == MAXCOL || h3 + h2 > min_height)
     {
 	*lp = loff0;	/* no overlap */
 	return;
@@ -2600,7 +2600,7 @@
     else
 	topline_back(lp);
     h4 = lp->height;
-    if (h4 + h3 + h2 > min_height || h3 + h2 + h1 > min_height)
+    if (h4 == MAXCOL || h4 + h3 + h2 > min_height || h3 + h2 + h1 > min_height)
 	*lp = loff1;	/* 1 line overlap */
     else
 	*lp = loff2;	/* 2 lines overlap */
@@ -2843,9 +2843,15 @@
 do_check_cursorbind()
 {
     linenr_T	line = curwin->w_cursor.lnum;
-    colnr_T	col =  curwin->w_cursor.col;
+    colnr_T	col = curwin->w_cursor.col;
+# ifdef FEAT_VIRTUALEDIT
+    colnr_T	coladd = curwin->w_cursor.coladd;
+# endif
+    colnr_T	curswant = curwin->w_curswant;
+    int		set_curswant = curwin->w_set_curswant;
     win_T	*old_curwin = curwin;
     buf_T	*old_curbuf = curbuf;
+    int		restart_edit_save;
 # ifdef FEAT_VISUAL
     int		old_VIsual_select = VIsual_select;
     int		old_VIsual_active = VIsual_active;
@@ -2874,17 +2880,28 @@
 # endif
 		curwin->w_cursor.lnum = line;
 	    curwin->w_cursor.col = col;
+# ifdef FEAT_VIRTUALEDIT
+	    curwin->w_cursor.coladd = coladd;
+# endif
+	    curwin->w_curswant = curswant;
+	    curwin->w_set_curswant = set_curswant;
 
-	    /* Make sure the cursor is in a valid position. */
+	    /* Make sure the cursor is in a valid position.  Temporarily set
+	     * "restart_edit" to allow the cursor to be beyond the EOL. */
+	    restart_edit_save = restart_edit;
+	    restart_edit = TRUE;
 	    check_cursor();
+	    restart_edit = restart_edit_save;
 # ifdef FEAT_MBYTE
 	    /* Correct cursor for multi-byte character. */
 	    if (has_mbyte)
 		mb_adjust_cursor();
 # endif
-
 	    redraw_later(VALID);
-	    update_topline();
+
+	    /* Only scroll when 'scrollbind' hasn't done this. */
+	    if (!curwin->w_p_scb)
+		update_topline();
 # ifdef FEAT_WINDOWS
 	    curwin->w_redr_status = TRUE;
 # endif
diff -Naur vim73.orig/src/msvc2008.bat vim73/src/msvc2008.bat
--- vim73.orig/src/msvc2008.bat	2010-05-15 11:04:12.000000000 +0000
+++ vim73/src/msvc2008.bat	2013-08-04 19:09:10.460610977 +0000
@@ -4,4 +4,4 @@
 rem See INSTALLpc.txt for information.
 @echo on
 
-call "%VS90COMNTOOLS%%vsvars32.bat"
+call "%VS90COMNTOOLS%vsvars32.bat"
diff -Naur vim73.orig/src/msvc2010.bat vim73/src/msvc2010.bat
--- vim73.orig/src/msvc2010.bat	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/msvc2010.bat	2013-08-04 19:09:10.460610977 +0000
@@ -0,0 +1,7 @@
+@echo off
+rem To be used on MS-Windows for Visual C++ 2010 Express Edition
+rem   aka Microsoft Visual Studio 10.0.
+rem See INSTALLpc.txt for information.
+@echo on
+
+call "%VS100COMNTOOLS%vsvars32.bat"
diff -Naur vim73.orig/src/nbdebug.c vim73/src/nbdebug.c
--- vim73.orig/src/nbdebug.c	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/nbdebug.c	2013-08-04 19:09:10.463944300 +0000
@@ -17,7 +17,7 @@
  * debugging startup problems because gvim will be started automatically from
  * netbeans and cannot be run directly from a debugger. The only way to debug
  * a gvim started by netbeans is by attaching a debugger to it. Without this
- * tool all starup code will have completed before you can get the pid and
+ * tool all startup code will have completed before you can get the pid and
  * attach.
  *
  * The second tool is a log tool.
diff -Naur vim73.orig/src/netbeans.c vim73/src/netbeans.c
--- vim73.orig/src/netbeans.c	2010-08-09 20:48:09.000000000 +0000
+++ vim73/src/netbeans.c	2013-08-04 19:09:10.470610947 +0000
@@ -14,12 +14,15 @@
  * which are *between* characters, whereas vim uses line number
  * and column number which are *on* characters.
  * See ":help netbeans-protocol" for explanation.
+ *
+ * The Netbeans messages are received and queued in the gui event loop, or in
+ * the select loop when Vim runs in a terminal. These messages are processed
+ * by netbeans_parse_messages() which is invoked in the idle loop when Vim is
+ * waiting for user input. The function netbeans_parse_messages() is also
+ * called from the ":sleep" command, to allow the execution of test cases that
+ * may not invoke the idle loop.
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for mch_open(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 #if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
@@ -87,7 +90,7 @@
 static void nb_init_graphics __ARGS((void));
 static void coloncmd __ARGS((char *cmd, ...));
 static void nb_set_curbuf __ARGS((buf_T *buf));
-#ifdef FEAT_GUI_MOTIF
+#ifdef FEAT_GUI_X11
 static void messageFromNetbeans __ARGS((XtPointer, int *, XtInputId *));
 #endif
 #ifdef FEAT_GUI_GTK
@@ -112,7 +115,7 @@
 static NBSOCK nbsock = -1;		/* socket fd for Netbeans connection */
 #define NETBEANS_OPEN (nbsock != -1)
 
-#ifdef FEAT_GUI_MOTIF
+#ifdef FEAT_GUI_X11
 static XtInputId inputHandler = (XtInputId)NULL;  /* Cookie for input */
 #endif
 #ifdef FEAT_GUI_GTK
@@ -135,15 +138,13 @@
 static int needupdate = 0;
 static int inAtomic = 0;
 
+/*
+ * Close the socket and remove the input handlers.
+ */
     static void
-netbeans_close(void)
+nb_close_socket(void)
 {
-    if (!NETBEANS_OPEN)
-	return;
-
-    netbeans_send_disconnect();
-
-#ifdef FEAT_GUI_MOTIF
+#ifdef FEAT_GUI_X11
     if (inputHandler != (XtInputId)NULL)
     {
 	XtRemoveInput(inputHandler);
@@ -167,13 +168,27 @@
 # endif
 #endif
 
+    sock_close(nbsock);
+    nbsock = -1;
+}
+
+/*
+ * Close the connection and cleanup.
+ * May be called when nb_close_socket() was called earlier.
+ */
+    static void
+netbeans_close(void)
+{
+    if (NETBEANS_OPEN)
+    {
+	netbeans_send_disconnect();
+	nb_close_socket();
+    }
+
 #ifdef FEAT_BEVAL
     bevalServers &= ~BEVAL_NETBEANS;
 #endif
 
-    sock_close(nbsock);
-    nbsock = -1;
-
     needupdate = 0;
     inAtomic = 0;
     nb_free();
@@ -183,6 +198,7 @@
     changed_window_setting();
     update_screen(CLEAR);
     setcursor();
+    cursor_on();
     out_flush();
 #ifdef FEAT_GUI
     if (gui.in_use)
@@ -311,14 +327,9 @@
     server.sin_port = htons(port);
     if ((host = gethostbyname(hostname)) == NULL)
     {
-	if (mch_access(hostname, R_OK) >= 0)
-	{
-	    /* DEBUG: input file */
-	    sd = mch_open(hostname, O_RDONLY, 0);
-	    goto theend;
-	}
 	nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
 	PERROR("gethostbyname() in netbeans_connect()");
+	sock_close(sd);
 	goto theend;
     }
     memcpy((char *)&server.sin_addr, host->h_addr, host->h_length);
@@ -368,15 +379,12 @@
 							 || (errno == EINTR)))
 		{
 		    nbdebug(("retrying...\n"));
-		    sleep(5);
-		    if (!doabort)
+		    mch_delay(3000L, TRUE);
+		    ui_breakcheck();
+		    if (got_int)
 		    {
-			ui_breakcheck();
-			if (got_int)
-			{
-			    errno = EINTR;
-			    break;
-			}
+			errno = EINTR;
+			break;
 		    }
 		    if (connect(sd, (struct sockaddr *)&server,
 							 sizeof(server)) == 0)
@@ -391,6 +399,7 @@
 		    /* Get here when the server can't be found. */
 		    nbdebug(("Cannot connect to Netbeans #2\n"));
 		    PERROR(_("Cannot connect to Netbeans #2"));
+		    sock_close(sd);
 		    if (doabort)
 			getout(1);
 		    goto theend;
@@ -401,6 +410,7 @@
 	{
 	    nbdebug(("Cannot connect to Netbeans\n"));
 	    PERROR(_("Cannot connect to Netbeans"));
+	    sock_close(sd);
 	    if (doabort)
 		getout(1);
 	    goto theend;
@@ -433,7 +443,7 @@
     FILE *fp;
     char_u buf[BUFSIZ];
     char_u *lp;
-    char_u *nl;
+    char_u *nlp;
 #ifdef UNIX
     struct stat	st;
 
@@ -462,8 +472,8 @@
     /* Read the file. There should be one of each parameter */
     while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
     {
-	if ((nl = vim_strchr(lp, '\n')) != NULL)
-	    *nl = 0;	    /* strip off the trailing newline */
+	if ((nlp = vim_strchr(lp, '\n')) != NULL)
+	    *nlp = 0;	    /* strip off the trailing newline */
 
 	if (STRNCMP(lp, "host=", 5) == 0)
 	{
@@ -631,9 +641,7 @@
 {
     char_u	*p;
     queue_T	*node;
-
-    if (!NETBEANS_OPEN)
-	return;
+    int		own_node;
 
     while (head.next != NULL && head.next != &head)
     {
@@ -672,20 +680,25 @@
 	    *p++ = NUL;
 	    if (*p == NUL)
 	    {
+		own_node = TRUE;
 		head.next = node->next;
 		node->next->prev = node->prev;
 	    }
+	    else
+		own_node = FALSE;
 
 	    /* now, parse and execute the commands */
 	    nb_parse_cmd(node->buffer);
 
-	    if (*p == NUL)
+	    if (own_node)
 	    {
 		/* buffer finished, dispose of the node and buffer */
 		vim_free(node->buffer);
 		vim_free(node);
 	    }
-	    else
+	    /* Check that "head" wasn't changed under our fingers, e.g. when a
+	     * DETACH command was handled. */
+	    else if (head.next == node)
 	    {
 		/* more follows, move to the start */
 		STRMOVE(node->buffer, p);
@@ -700,7 +713,7 @@
 /*
  * Read a command from netbeans.
  */
-#ifdef FEAT_GUI_MOTIF
+#ifdef FEAT_GUI_X11
     static void
 messageFromNetbeans(XtPointer clientData UNUSED,
 		    int *unused1 UNUSED,
@@ -720,15 +733,14 @@
 }
 #endif
 
+#define DETACH_MSG "DETACH\n"
+
     void
 netbeans_read()
 {
     static char_u	*buf = NULL;
     int			len = 0;
     int			readlen = 0;
-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
-    static int		level = 0;
-#endif
 #ifdef HAVE_SELECT
     struct timeval	tval;
     fd_set		rfds;
@@ -744,13 +756,6 @@
 	return;
     }
 
-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
-    /* recursion guard; this will be called from the X event loop at unknown
-     * moments */
-    if (NB_HAS_GUI)
-	++level;
-#endif
-
     /* Allocate a buffer to read into. */
     if (buf == NULL)
     {
@@ -790,34 +795,32 @@
 	    break;	/* did read everything that's available */
     }
 
+    /* Reading a socket disconnection (readlen == 0), or a socket error. */
     if (readlen <= 0)
     {
-	/* read error or didn't read anything */
-	netbeans_close();
-	nbdebug(("messageFromNetbeans: Error in read() from socket\n"));
+	/* Queue a "DETACH" netbeans message in the command queue in order to
+	 * terminate the netbeans session later. Do not end the session here
+	 * directly as we may be running in the context of a call to
+	 * netbeans_parse_messages():
+	 *	netbeans_parse_messages
+	 *	    -> autocmd triggered while processing the netbeans cmd
+	 *		-> ui_breakcheck
+	 *		    -> gui event loop or select loop
+	 *			-> netbeans_read()
+	 */
+	save((char_u *)DETACH_MSG, (int)strlen(DETACH_MSG));
+	nb_close_socket();
+
 	if (len < 0)
 	{
 	    nbdebug(("read from Netbeans socket\n"));
 	    PERROR(_("read from Netbeans socket"));
 	}
-	return; /* don't try to parse it */
     }
 
-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_W32)
-    /* Let the main loop handle messages. */
-    if (NB_HAS_GUI)
-    {
-# ifdef FEAT_GUI_GTK
-	if (gtk_main_level() > 0)
-	    gtk_main_quit();
-# else
-	/* Parse the messages now, but avoid recursion. */
-	if (level == 1)
-	    netbeans_parse_messages();
-
-	--level;
-# endif
-    }
+#if defined(NB_HAS_GUI) && defined(FEAT_GUI_GTK)
+    if (NB_HAS_GUI && gtk_main_level() > 0)
+	gtk_main_quit();
 #endif
 }
 
@@ -955,7 +958,6 @@
     keyQ_T *key_node = keyHead.next;
     queue_T *cmd_node = head.next;
     nbbuf_T buf;
-    buf_T *bufp;
     int i;
 
     /* free the netbeans buffer list */
@@ -964,7 +966,7 @@
 	buf = buf_list[i];
 	vim_free(buf.displayname);
 	vim_free(buf.signmap);
-	if ((bufp=buf.bufp) != NULL)
+	if (buf.bufp != NULL)
 	{
 	    buf.bufp->b_netbeans_file = FALSE;
 	    buf.bufp->b_was_netbeans_file = FALSE;
@@ -976,7 +978,7 @@
     buf_list_used = 0;
 
     /* free the queued key commands */
-    while(key_node != NULL && key_node != &keyHead)
+    while (key_node != NULL && key_node != &keyHead)
     {
 	keyQ_T *next = key_node->next;
 	vim_free(key_node->keystr);
@@ -991,7 +993,7 @@
     }
 
     /* free the queued netbeans commands */
-    while(cmd_node != NULL && cmd_node != &head)
+    while (cmd_node != NULL && cmd_node != &head)
     {
 	queue_T *next = cmd_node->next;
 	vim_free(cmd_node->buffer);
@@ -1186,6 +1188,10 @@
 
     nbdebug(("REP %d: <none>\n", cmdno));
 
+    /* Avoid printing an annoying error message. */
+    if (!NETBEANS_OPEN)
+	return;
+
     sprintf(reply, "%d\n", cmdno);
     nb_send(reply, "nb_reply_nil");
 }
@@ -1389,7 +1395,7 @@
     int		cmdno,
     char_u	*args)	    /* points to space before arguments or NUL */
 {
-    int		doupdate = 0;
+    int		do_update = 0;
     long	off = 0;
     nbbuf_T	*buf = nb_get_buf(bufno);
     static int	skip = 0;
@@ -1594,7 +1600,7 @@
 							last.lnum, last.col));
 		del_from_lnum = first.lnum;
 		del_to_lnum = last.lnum;
-		doupdate = 1;
+		do_update = 1;
 
 		/* Get the position of the first byte after the deleted
 		 * section.  "next" is NULL when deleting to the end of the
@@ -1734,7 +1740,7 @@
 		int	added = 0;
 		int	oldFire = netbeansFireChanges;
 		int	old_b_changed;
-		char_u	*nl;
+		char_u	*nlp;
 		linenr_T lnum;
 		linenr_T lnum_start;
 		pos_T	*pos;
@@ -1771,11 +1777,11 @@
 		lnum = lnum_start;
 
 		/* Loop over the "\n" separated lines of the argument. */
-		doupdate = 1;
+		do_update = 1;
 		while (*args != NUL)
 		{
-		    nl = vim_strchr(args, '\n');
-		    if (nl == NULL)
+		    nlp = vim_strchr(args, '\n');
+		    if (nlp == NULL)
 		    {
 			/* Incomplete line, probably truncated.  Next "insert"
 			 * command should append to this one. */
@@ -1783,13 +1789,13 @@
 		    }
 		    else
 		    {
-			len = nl - args;
+			len = nlp - args;
 
 			/*
 			 * We need to detect EOL style, because the commands
 			 * use a character offset.
 			 */
-			if (nl > args && nl[-1] == '\r')
+			if (nlp > args && nlp[-1] == '\r')
 			{
 			    ff_detected = EOL_DOS;
 			    --len;
@@ -1806,13 +1812,15 @@
 			char_u *oldline = ml_get(lnum);
 			char_u *newline;
 
-			/* Insert halfway a line.  For simplicity we assume we
-			 * need to append to the line. */
-			newline = alloc_check((unsigned)(STRLEN(oldline) + len + 1));
+			/* Insert halfway a line. */
+			newline = alloc_check(
+				       (unsigned)(STRLEN(oldline) + len + 1));
 			if (newline != NULL)
 			{
-			    STRCPY(newline, oldline);
+			    mch_memmove(newline, oldline, (size_t)pos->col);
+			    newline[pos->col] = NUL;
 			    STRCAT(newline, args);
+			    STRCAT(newline, oldline + pos->col);
 			    ml_replace(lnum, newline, FALSE);
 			}
 		    }
@@ -1820,14 +1828,15 @@
 		    {
 			/* Append a new line.  Not that we always do this,
 			 * also when the text doesn't end in a "\n". */
-			ml_append((linenr_T)(lnum - 1), args, (colnr_T)(len + 1), FALSE);
+			ml_append((linenr_T)(lnum - 1), args,
+						   (colnr_T)(len + 1), FALSE);
 			++added;
 		    }
 
-		    if (nl == NULL)
+		    if (nlp == NULL)
 			break;
 		    ++lnum;
-		    args = nl + 1;
+		    args = nlp + 1;
 		}
 
 		/* Adjust the marks below the inserted lines. */
@@ -1986,7 +1995,7 @@
 		EMSG("E640: invalid buffer identifier in initDone");
 		return FAIL;
 	    }
-	    doupdate = 1;
+	    do_update = 1;
 	    buf->initDone = TRUE;
 	    nb_set_curbuf(buf->bufp);
 #if defined(FEAT_AUTOCMD)
@@ -2075,7 +2084,7 @@
 					     ECMD_HIDE + ECMD_OLDBUF, curwin);
 	    buf->bufp = curbuf;
 	    buf->initDone = TRUE;
-	    doupdate = 1;
+	    do_update = 1;
 #if defined(FEAT_TITLE)
 	    maketitle();
 #endif
@@ -2103,7 +2112,7 @@
 		exarg.forceit = FALSE;
 		dosetvisible = TRUE;
 		goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
-		doupdate = 1;
+		do_update = 1;
 		dosetvisible = FALSE;
 
 #ifdef FEAT_GUI
@@ -2250,6 +2259,7 @@
 	    update_topline();		/* scroll to show the line */
 	    update_screen(VALID);
 	    setcursor();
+	    cursor_on();
 	    out_flush();
 #ifdef FEAT_GUI
 	    if (gui.in_use)
@@ -2302,7 +2312,7 @@
 						     buf->bufp->b_fnum, TRUE);
 	    buf->bufp = NULL;
 	    buf->initDone = FALSE;
-	    doupdate = 1;
+	    do_update = 1;
 /* =====================================================================*/
 	}
 	else if (streq((char *)cmd, "setStyle")) /* obsolete... */
@@ -2393,7 +2403,7 @@
 		return FAIL;
 	    }
 
-	    doupdate = 1;
+	    do_update = 1;
 
 	    cp = (char *)args;
 	    serNum = strtol(cp, &cp, 10);
@@ -2441,7 +2451,7 @@
 		nbdebug(("    invalid buffer identifier in removeAnno\n"));
 		return FAIL;
 	    }
-	    doupdate = 1;
+	    do_update = 1;
 	    cp = (char *)args;
 	    serNum = strtol(cp, &cp, 10);
 	    args = (char_u *)cp;
@@ -2486,7 +2496,7 @@
 	    len = strtol(cp, NULL, 10);
 	    args = (char_u *)cp;
 	    pos = off2pos(buf->bufp, off);
-	    doupdate = 1;
+	    do_update = 1;
 	    if (!pos)
 		nbdebug(("    no such start pos in %s, %ld\n", cmd, off));
 	    else
@@ -2548,7 +2558,7 @@
 	    inAtomic = 0;
 	    if (needupdate)
 	    {
-		doupdate = 1;
+		do_update = 1;
 		needupdate = 0;
 	    }
 /* =====================================================================*/
@@ -2629,21 +2639,22 @@
 	 * Unrecognized command is ignored.
 	 */
     }
-    if (inAtomic && doupdate)
+    if (inAtomic && do_update)
     {
 	needupdate = 1;
-	doupdate = 0;
+	do_update = 0;
     }
 
     /*
      * Is this needed? I moved the netbeans_Xt_connect() later during startup
      * and it may no longer be necessary. If its not needed then needupdate
-     * and doupdate can also be removed.
+     * and do_update can also be removed.
      */
-    if (buf != NULL && buf->initDone && doupdate)
+    if (buf != NULL && buf->initDone && do_update)
     {
 	update_screen(NOT_VALID);
 	setcursor();
+	cursor_on();
 	out_flush();
 #ifdef FEAT_GUI
 	if (gui.in_use)
@@ -2773,6 +2784,16 @@
 ex_nbstart(eap)
     exarg_T	*eap;
 {
+#ifdef FEAT_GUI
+# if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
+		&& !defined(FEAT_GUI_W32)
+    if (gui.in_use)
+    {
+	EMSG(_("E838: netbeans is not supported with this GUI"));
+	return;
+    }
+# endif
+#endif
     netbeans_open((char *)eap->arg, FALSE);
 }
 
@@ -2880,7 +2901,7 @@
     char_u	*text;
     linenr_T	lnum;
     int		col;
-    char	buf[MAXPATHL * 2 + 25];
+    char	*buf;
     char_u	*p;
 
     /* Don't do anything when 'ballooneval' is off, messages scrolled the
@@ -2894,15 +2915,20 @@
 	 * length. */
 	if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
 	{
-	    p = nb_quote(text);
-	    if (p != NULL)
+	    buf = (char *)alloc(MAXPATHL * 2 + 25);
+	    if (buf != NULL)
 	    {
-		vim_snprintf(buf, sizeof(buf),
-				       "0:balloonText=%d \"%s\"\n", r_cmdno, p);
-		vim_free(p);
+		p = nb_quote(text);
+		if (p != NULL)
+		{
+		    vim_snprintf(buf, MAXPATHL * 2 + 25,
+				     "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+		    vim_free(p);
+		}
+		nbdebug(("EVT: %s", buf));
+		nb_send(buf, "netbeans_beval_cb");
+		vim_free(buf);
 	    }
-	    nbdebug(("EVT: %s", buf));
-	    nb_send(buf, "netbeans_beval_cb");
 	}
 	vim_free(text);
     }
@@ -2937,7 +2963,7 @@
     if (!NB_HAS_GUI || !NETBEANS_OPEN)
 	return;
 
-# ifdef FEAT_GUI_MOTIF
+# ifdef FEAT_GUI_X11
     /* tell notifier we are interested in being called
      * when there is input on the editor connection socket
      */
@@ -3000,6 +3026,7 @@
     changed_window_setting();
     update_screen(CLEAR);
     setcursor();
+    cursor_on();
     out_flush();
 #ifdef FEAT_GUI
     if (gui.in_use)
@@ -3027,7 +3054,7 @@
     }
 }
 
-#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_W32) || defined(PROTO)
+#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_W32) || defined(PROTO)
 /*
  * Tell netbeans that the window was moved or resized.
  */
@@ -3458,7 +3485,7 @@
     return FALSE;
 }
 
-#if defined(FEAT_GUI_MOTIF) || defined(PROTO)
+#if defined(FEAT_GUI_X11) || defined(PROTO)
 /*
  * We have multiple signs to draw at the same location. Draw the
  * multi-sign indicator instead. This is the Motif version.
@@ -3487,7 +3514,7 @@
     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+3, y++);
     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y);
 }
-#endif /* FEAT_GUI_MOTIF */
+#endif /* FEAT_GUI_X11 */
 
 #if defined(FEAT_GUI_GTK) && !defined(PROTO)
 /*
@@ -3902,14 +3929,12 @@
     }
     else
     {
-	char_u ebuf[BUFSIZ];
+	char_u msgbuf[IOSIZE];
 
-	STRCPY(ebuf, (char_u *)_("E505: "));
-	STRCAT(ebuf, IObuff);
-	STRCAT(ebuf, (char_u *)_("is read-only (add ! to override)"));
-	STRCPY(IObuff, ebuf);
-	nbdebug(("    %s\n", ebuf ));
-	emsg(IObuff);
+	vim_snprintf((char *)msgbuf, IOSIZE,
+		_("E505: %s is read-only (add ! to override)"), IObuff);
+	nbdebug(("    %s\n", msgbuf));
+	emsg(msgbuf);
     }
 }
 
diff -Naur vim73.orig/src/normal.c vim73/src/normal.c
--- vim73.orig/src/normal.c	2010-07-31 13:25:19.000000000 +0000
+++ vim73/src/normal.c	2013-08-04 19:09:10.477277593 +0000
@@ -20,15 +20,19 @@
  */
 static int	resel_VIsual_mode = NUL;	/* 'v', 'V', or Ctrl-V */
 static linenr_T	resel_VIsual_line_count;	/* number of lines */
-static colnr_T	resel_VIsual_col;		/* nr of cols or end col */
+static colnr_T	resel_VIsual_vcol;		/* nr of cols or end col */
+static int	VIsual_mode_orig = NUL;         /* type of Visual mode, that user entered */
 
 static int	restart_VIsual_select = 0;
 #endif
 
+#ifdef FEAT_EVAL
+static void	set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
+#endif
 static int
-# ifdef __BORLANDC__
-_RTLENTRYF
-# endif
+#ifdef __BORLANDC__
+    _RTLENTRYF
+#endif
 		nv_compare __ARGS((const void *s1, const void *s2));
 static int	find_command __ARGS((int cmdchar));
 static void	op_colon __ARGS((oparg_T *oap));
@@ -648,6 +652,14 @@
     dont_scroll = FALSE;	/* allow scrolling here */
 #endif
 
+#ifdef FEAT_EVAL
+    /* Set v:count here, when called from main() and not a stuffed
+     * command, so that v:count can be used in an expression mapping
+     * when there is no count. */
+    if (toplevel && stuff_empty())
+	set_vcount_ca(&ca, &set_prevcount);
+#endif
+
     /*
      * Get the command character from the user.
      */
@@ -689,6 +701,7 @@
 	else
 	    c = 'c';
 	msg_nowait = TRUE;	/* don't delay going to insert mode */
+	old_mapped_len = 0;	/* do go to Insert mode */
     }
 #endif
 
@@ -725,15 +738,7 @@
 	     * command, so that v:count can be used in an expression mapping
 	     * right after the count. */
 	    if (toplevel && stuff_empty())
-	    {
-		long count = ca.count0;
-
-		/* multiply with ca.opcount the same way as below */
-		if (ca.opcount != 0)
-		    count = ca.opcount * (count == 0 ? 1 : count);
-		set_vcount(count, count == 0 ? 1 : count, set_prevcount);
-		set_prevcount = FALSE;  /* only set v:prevcount once */
-	    }
+		set_vcount_ca(&ca, &set_prevcount);
 #endif
 	    if (ctrl_w)
 	    {
@@ -957,8 +962,11 @@
 #ifdef FEAT_CMDL_INFO
 	    need_flushbuf |= add_to_showcmd(ca.nchar);
 #endif
+	    /* For "gn" from redo, need to get one more char to determine the
+	     * operator */
 	    if (ca.nchar == 'r' || ca.nchar == '\'' || ca.nchar == '`'
-						      || ca.nchar == Ctrl_BSL)
+						       || ca.nchar == Ctrl_BSL
+		  || ((ca.nchar == 'n' || ca.nchar == 'N') && !stuff_empty()))
 	    {
 		cp = &ca.extra_char;	/* need to get a third character */
 		if (ca.nchar != 'r')
@@ -1080,6 +1088,8 @@
 		ca.nchar = ca.extra_char;
 		idx = find_command(ca.cmdchar);
 	    }
+	    else if ((ca.nchar == 'n' || ca.nchar == 'N') && ca.cmdchar == 'g')
+		ca.oap->op_type = get_op_type(*cp, NUL);
 	    else if (*cp == Ctrl_BSL)
 	    {
 		long towait = (p_ttm >= 0 ? p_ttm : p_tm);
@@ -1199,7 +1209,16 @@
     {
 	clearop(oap);
 #ifdef FEAT_EVAL
-	set_reg_var('"');
+	{
+	    int regname = 0;
+
+	    /* Adjust the register according to 'clipboard', so that when
+	     * "unnamed" is present it becomes '*' or '+' instead of '"'. */
+# ifdef FEAT_CLIPBOARD
+	    adjust_clip_reg(&regname);
+# endif
+	    set_reg_var(regname);
+	}
 #endif
     }
 
@@ -1386,6 +1405,26 @@
     opcount = ca.opcount;
 }
 
+#ifdef FEAT_EVAL
+/*
+ * Set v:count and v:count1 according to "cap".
+ * Set v:prevcount only when "set_prevcount" is TRUE.
+ */
+    static void
+set_vcount_ca(cap, set_prevcount)
+    cmdarg_T	*cap;
+    int		*set_prevcount;
+{
+    long count = cap->count0;
+
+    /* multiply with cap->opcount the same way as above */
+    if (cap->opcount != 0)
+	count = cap->opcount * (count == 0 ? 1 : count);
+    set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
+    *set_prevcount = FALSE;  /* only set v:prevcount once */
+}
+#endif
+
 /*
  * Handle an operator after visual mode or when the movement is finished
  */
@@ -1404,7 +1443,7 @@
     /* The visual area is remembered for redo */
     static int	    redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
     static linenr_T redo_VIsual_line_count; /* number of lines */
-    static colnr_T  redo_VIsual_col;	    /* number of cols or end column */
+    static colnr_T  redo_VIsual_vcol;	    /* number of cols or end column */
     static long	    redo_VIsual_count;	    /* count for Visual operator */
 # ifdef FEAT_VIRTUALEDIT
     int		    include_line_break = FALSE;
@@ -1419,7 +1458,7 @@
      * This could call do_pending_operator() recursively, but that's OK
      * because gui_yank will be TRUE for the nested call.
      */
-    if (clip_star.available
+    if ((clip_star.available || clip_plus.available)
 	    && oap->op_type != OP_NOP
 	    && !gui_yank
 # ifdef FEAT_VISUAL
@@ -1466,11 +1505,14 @@
 	}
 #endif
 
-	/* only redo yank when 'y' flag is in 'cpoptions' */
-	/* never redo "zf" (define fold) */
+	/* Only redo yank when 'y' flag is in 'cpoptions'. */
+	/* Never redo "zf" (define fold). */
 	if ((vim_strchr(p_cpo, CPO_YANK) != NULL || oap->op_type != OP_YANK)
 #ifdef FEAT_VISUAL
-		&& (!VIsual_active || oap->motion_force)
+		&& ((!VIsual_active || oap->motion_force)
+		    /* Also redo Operator-pending Visual mode mappings */
+		    || (VIsual_active && cap->cmdchar == ':'
+						 && oap->op_type != OP_COLON))
 #endif
 		&& cap->cmdchar != 'D'
 #ifdef FEAT_FOLDING
@@ -1517,22 +1559,31 @@
 #ifdef FEAT_VISUAL
 	if (redo_VIsual_busy)
 	{
+	    /* Redo of an operation on a Visual area. Use the same size from
+	     * redo_VIsual_line_count and redo_VIsual_vcol. */
 	    oap->start = curwin->w_cursor;
 	    curwin->w_cursor.lnum += redo_VIsual_line_count - 1;
 	    if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
 		curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
 	    VIsual_mode = redo_VIsual_mode;
-	    if (VIsual_mode == 'v')
+	    if (redo_VIsual_vcol == MAXCOL || VIsual_mode == 'v')
 	    {
-		if (redo_VIsual_line_count <= 1)
-		    curwin->w_cursor.col += redo_VIsual_col - 1;
+		if (VIsual_mode == 'v')
+		{
+		    if (redo_VIsual_line_count <= 1)
+		    {
+			validate_virtcol();
+			curwin->w_curswant =
+				     curwin->w_virtcol + redo_VIsual_vcol - 1;
+		    }
+		    else
+			curwin->w_curswant = redo_VIsual_vcol;
+		}
 		else
-		    curwin->w_cursor.col = redo_VIsual_col;
-	    }
-	    if (redo_VIsual_col == MAXCOL)
-	    {
-		curwin->w_curswant = MAXCOL;
-		coladvance((colnr_T)MAXCOL);
+		{
+		    curwin->w_curswant = MAXCOL;
+		}
+		coladvance(curwin->w_curswant);
 	    }
 	    cap->count0 = redo_VIsual_count;
 	    if (redo_VIsual_count != 0)
@@ -1548,6 +1599,11 @@
 		curbuf->b_visual.vi_start = VIsual;
 		curbuf->b_visual.vi_end = curwin->w_cursor;
 		curbuf->b_visual.vi_mode = VIsual_mode;
+		if (VIsual_mode_orig != NUL)
+		{
+		    curbuf->b_visual.vi_mode = VIsual_mode_orig;
+		    VIsual_mode_orig = NUL;
+		}
 		curbuf->b_visual.vi_curswant = curwin->w_curswant;
 # ifdef FEAT_EVAL
 		curbuf->b_visual_mode_eval = VIsual_mode;
@@ -1678,7 +1734,7 @@
 		    }
 		}
 		else if (redo_VIsual_busy)
-		    oap->end_vcol = oap->start_vcol + redo_VIsual_col - 1;
+		    oap->end_vcol = oap->start_vcol + redo_VIsual_vcol - 1;
 		/*
 		 * Correct oap->end.col and oap->start.col to be the
 		 * upper-left and lower-right corner of the block area.
@@ -1703,13 +1759,22 @@
 		 */
 		resel_VIsual_mode = VIsual_mode;
 		if (curwin->w_curswant == MAXCOL)
-		    resel_VIsual_col = MAXCOL;
-		else if (VIsual_mode == Ctrl_V)
-		    resel_VIsual_col = oap->end_vcol - oap->start_vcol + 1;
-		else if (oap->line_count > 1)
-		    resel_VIsual_col = oap->end.col;
+		    resel_VIsual_vcol = MAXCOL;
 		else
-		    resel_VIsual_col = oap->end.col - oap->start.col + 1;
+		{
+		    if (VIsual_mode != Ctrl_V)
+			getvvcol(curwin, &(oap->end),
+						  NULL, NULL, &oap->end_vcol);
+		    if (VIsual_mode == Ctrl_V || oap->line_count <= 1)
+		    {
+			if (VIsual_mode != Ctrl_V)
+			    getvvcol(curwin, &(oap->start),
+						&oap->start_vcol, NULL, NULL);
+			resel_VIsual_vcol = oap->end_vcol - oap->start_vcol + 1;
+		    }
+		    else
+			resel_VIsual_vcol = oap->end_vcol;
+		}
 		resel_VIsual_line_count = oap->line_count;
 	    }
 
@@ -1730,14 +1795,22 @@
 	    {
 		/* Prepare for redoing.  Only use the nchar field for "r",
 		 * otherwise it might be the second char of the operator. */
-		prep_redo(oap->regname, 0L, NUL, 'v',
-				get_op_char(oap->op_type),
-				get_extra_op_char(oap->op_type),
-				oap->op_type == OP_REPLACE ? cap->nchar : NUL);
+		if (cap->cmdchar == 'g' && (cap->nchar == 'n'
+							|| cap->nchar == 'N'))
+		    /* "gn" and "gN" are a bit different */
+		    prep_redo(oap->regname, 0L, NUL, cap->cmdchar, cap->nchar,
+					get_op_char(oap->op_type),
+					get_extra_op_char(oap->op_type));
+		else if (cap->cmdchar != ':')
+		    prep_redo(oap->regname, 0L, NUL, 'v',
+					get_op_char(oap->op_type),
+					get_extra_op_char(oap->op_type),
+					oap->op_type == OP_REPLACE
+							  ? cap->nchar : NUL);
 		if (!redo_VIsual_busy)
 		{
 		    redo_VIsual_mode = resel_VIsual_mode;
-		    redo_VIsual_col = resel_VIsual_col;
+		    redo_VIsual_vcol = resel_VIsual_vcol;
 		    redo_VIsual_line_count = resel_VIsual_line_count;
 		    redo_VIsual_count = cap->count0;
 		}
@@ -1763,17 +1836,25 @@
 		{
 		    oap->inclusive = FALSE;
 		    /* Try to include the newline, unless it's an operator
-		     * that works on lines only */
-		    if (*p_sel != 'o'
-			    && !op_on_lines(oap->op_type)
-			    && oap->end.lnum < curbuf->b_ml.ml_line_count)
+		     * that works on lines only. */
+		    if (*p_sel != 'o' && !op_on_lines(oap->op_type))
 		    {
-			++oap->end.lnum;
-			oap->end.col = 0;
+			if (oap->end.lnum < curbuf->b_ml.ml_line_count)
+			{
+			    ++oap->end.lnum;
+			    oap->end.col = 0;
 # ifdef FEAT_VIRTUALEDIT
-			oap->end.coladd = 0;
+			    oap->end.coladd = 0;
 # endif
-			++oap->line_count;
+			    ++oap->line_count;
+			}
+			else
+			{
+			    /* Cannot move below the last line, make the op
+			     * inclusive to tell the operation to include the
+			     * line break. */
+			    oap->inclusive = TRUE;
+			}
 		    }
 		}
 	    }
@@ -1910,7 +1991,7 @@
 		beep_flush();
 	    else
 	    {
-		(void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE);
+		(void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
 		auto_format(FALSE, TRUE);
 	    }
 	    break;
@@ -1920,7 +2001,10 @@
 	    VIsual_reselect = FALSE;	    /* don't reselect now */
 #endif
 	    if (empty_region_error)
+	    {
 		vim_beep();
+		CancelRedo();
+	    }
 	    else
 	    {
 		(void)op_delete(oap);
@@ -1934,7 +2018,10 @@
 	    if (empty_region_error)
 	    {
 		if (!gui_yank)
+		{
 		    vim_beep();
+		    CancelRedo();
+		}
 	    }
 	    else
 		(void)op_yank(oap, FALSE, !gui_yank);
@@ -1946,7 +2033,10 @@
 	    VIsual_reselect = FALSE;	    /* don't reselect now */
 #endif
 	    if (empty_region_error)
+	    {
 		vim_beep();
+		CancelRedo();
+	    }
 	    else
 	    {
 		/* This is a new edit command, not a restart.  Need to
@@ -2008,7 +2098,10 @@
 	case OP_LOWER:
 	case OP_ROT13:
 	    if (empty_region_error)
+	    {
 		vim_beep();
+		CancelRedo();
+	    }
 	    else
 		op_tilde(oap);
 	    check_cursor_col();
@@ -2041,7 +2134,10 @@
 #endif
 #ifdef FEAT_VISUALEXTRA
 	    if (empty_region_error)
+	    {
 		vim_beep();
+		CancelRedo();
+	    }
 	    else
 	    {
 		/* This is a new edit command, not a restart.  Need to
@@ -2071,7 +2167,10 @@
 #ifdef FEAT_VISUALEXTRA
 	    if (empty_region_error)
 #endif
+	    {
 		vim_beep();
+		CancelRedo();
+	    }
 #ifdef FEAT_VISUALEXTRA
 	    else
 		op_replace(oap, cap->nchar);
@@ -2203,6 +2302,9 @@
 {
 #ifdef FEAT_EVAL
     char_u	*(argv[1]);
+# ifdef FEAT_VIRTUALEDIT
+    int		save_virtual_op = virtual_op;
+# endif
 
     if (*p_opfunc == NUL)
 	EMSG(_("E774: 'operatorfunc' is empty"));
@@ -2221,7 +2323,18 @@
 	    argv[0] = (char_u *)"line";
 	else
 	    argv[0] = (char_u *)"char";
+
+# ifdef FEAT_VIRTUALEDIT
+	/* Reset virtual_op so that 'virtualedit' can be changed in the
+	 * function. */
+	virtual_op = MAYBE;
+# endif
+
 	(void)call_func_retnr(p_opfunc, 1, argv, FALSE);
+
+# ifdef FEAT_VIRTUALEDIT
+	virtual_op = save_virtual_op;
+# endif
     }
 #else
     EMSG(_("E775: Eval feature not available"));
@@ -2334,7 +2447,31 @@
 		return FALSE;
 	}
 
-    which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
+    for (;;)
+    {
+	which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
+	if (is_drag)
+	{
+	    /* If the next character is the same mouse event then use that
+	     * one. Speeds up dragging the status line. */
+	    if (vpeekc() != NUL)
+	    {
+		int nc;
+		int save_mouse_row = mouse_row;
+		int save_mouse_col = mouse_col;
+
+		/* Need to get the character, peeking doesn't get the actual
+		 * one. */
+		nc = safe_vgetc();
+		if (c == nc)
+		    continue;
+		vungetc(nc);
+		mouse_row = save_mouse_row;
+		mouse_col = save_mouse_col;
+	    }
+	}
+	break;
+    }
 
 #ifdef FEAT_MOUSESHAPE
     /* May have stopped dragging the status or separator line.  The pointer is
@@ -2377,7 +2514,7 @@
 
 #ifndef FEAT_VISUAL
     /*
-     * ALT is only used for starging/extending Visual mode.
+     * ALT is only used for starting/extending Visual mode.
      */
     if ((mod_mask & MOD_MASK_ALT))
 	return FALSE;
@@ -4342,7 +4479,7 @@
 	    break;
 	}
 #ifdef FEAT_COMMENTS
-	if (get_leader_len(ml_get_curline(), NULL, FALSE) > 0)
+	if (get_leader_len(ml_get_curline(), NULL, FALSE, TRUE) > 0)
 	{
 	    /* Ignore this line, continue at start of next line. */
 	    ++curwin->w_cursor.lnum;
@@ -4501,6 +4638,7 @@
 		}
 		curwin->w_cursor.lnum++;
 		curwin->w_curswant %= width2;
+		linelen = linetabsize(ml_get_curline());
 	    }
 	}
       }
@@ -4545,11 +4683,10 @@
 nv_mousescroll(cap)
     cmdarg_T	*cap;
 {
-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
+# ifdef FEAT_WINDOWS
     win_T *old_curwin = curwin;
 
-    /* Currently we only get the mouse coordinates in the GUI. */
-    if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
+    if (mouse_row >= 0 && mouse_col >= 0)
     {
 	int row, col;
 
@@ -4594,7 +4731,7 @@
     }
 # endif
 
-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
+# ifdef FEAT_WINDOWS
     curwin->w_redr_status = TRUE;
 
     curwin = old_curwin;
@@ -4948,7 +5085,7 @@
 		}
 		break;
 
-		/* "zE": erease all folds */
+		/* "zE": erase all folds */
     case 'E':	if (foldmethodIsManual(curwin))
 		{
 		    clearFolding(curwin);
@@ -5285,6 +5422,7 @@
     cmdarg_T  *cap;
 {
     int	    old_p_im;
+    int	    cmd_result;
 
 #ifdef FEAT_VISUAL
     if (VIsual_active)
@@ -5316,7 +5454,7 @@
 	old_p_im = p_im;
 
 	/* get a command line and execute it */
-	do_cmdline(NULL, getexline, NULL,
+	cmd_result = do_cmdline(NULL, getexline, NULL,
 			    cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0);
 
 	/* If 'insertmode' changed, enter or exit Insert mode */
@@ -5328,12 +5466,17 @@
 		restart_edit = 0;
 	}
 
-	/* The start of the operator may have become invalid by the Ex
-	 * command. */
-	if (cap->oap->op_type != OP_NOP
+	if (cmd_result == FAIL)
+	    /* The Ex command failed, do not execute the operator. */
+	    clearop(cap->oap);
+	else if (cap->oap->op_type != OP_NOP
 		&& (cap->oap->start.lnum > curbuf->b_ml.ml_line_count
 		    || cap->oap->start.col >
-			       (colnr_T)STRLEN(ml_get(cap->oap->start.lnum))))
+			       (colnr_T)STRLEN(ml_get(cap->oap->start.lnum))
+		    || did_emsg
+		    ))
+	    /* The start of the operator has become invalid by the Ex command.
+	     */
 	    clearopbeep(cap->oap);
     }
 }
@@ -5666,8 +5809,13 @@
 	else if (cmdchar == '#')
 	    aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
 	else if (tag_cmd)
-	    /* Don't escape spaces and Tabs in a tag with a backslash */
-	    aux_ptr = (char_u *)"\\|\"\n[";
+	{
+	    if (curbuf->b_help)
+		/* ":help" handles unescaped argument */
+		aux_ptr = (char_u *)"";
+	    else
+		aux_ptr = (char_u *)"\\|\"\n[";
+	}
 	else
 	    aux_ptr = (char_u *)"\\|\"\n*?[";
 
@@ -6980,7 +7128,18 @@
 	    for (n = cap->count1; n > 0; --n)
 	    {
 		State = REPLACE;
-		ins_char(cap->nchar);
+		if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
+		{
+		    int c = ins_copychar(curwin->w_cursor.lnum
+					   + (cap->nchar == Ctrl_Y ? -1 : 1));
+		    if (c != NUL)
+			ins_char(c);
+		    else
+			/* will be decremented further down */
+			++curwin->w_cursor.col;
+		}
+		else
+		    ins_char(cap->nchar);
 		State = old_State;
 		if (cap->ncharC1 != 0)
 		    ins_char(cap->ncharC1);
@@ -7002,7 +7161,15 @@
 		 * line will be changed.
 		 */
 		ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
-		ptr[curwin->w_cursor.col] = cap->nchar;
+		if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
+		{
+		  int c = ins_copychar(curwin->w_cursor.lnum
+					   + (cap->nchar == Ctrl_Y ? -1 : 1));
+		  if (c != NUL)
+		    ptr[curwin->w_cursor.col] = c;
+		}
+		else
+		    ptr[curwin->w_cursor.col] = cap->nchar;
 		if (p_sm && msg_silent == 0)
 		    showmatch(cap->nchar);
 		++curwin->w_cursor.col;
@@ -7103,6 +7270,7 @@
     {
 	cap->cmdchar = 'c';
 	cap->nchar = NUL;
+	VIsual_mode_orig = VIsual_mode; /* remember original area for gv */
 	VIsual_mode = 'V';
 	nv_operator(cap);
     }
@@ -7298,11 +7466,14 @@
     static char_u trans[] = "YyDdCcxdXdAAIIrr";
 
     /* Uppercase means linewise, except in block mode, then "D" deletes till
-     * the end of the line, and "C" replaces til EOL */
+     * the end of the line, and "C" replaces till EOL */
     if (isupper(cap->cmdchar))
     {
 	if (VIsual_mode != Ctrl_V)
+	{
+	    VIsual_mode_orig = VIsual_mode;
 	    VIsual_mode = 'V';
+	}
 	else if (cap->cmdchar == 'C' || cap->cmdchar == 'D')
 	    curwin->w_curswant = MAXCOL;
     }
@@ -7322,7 +7493,10 @@
     if (VIsual_active)	/* "vs" and "vS" are the same as "vc" */
     {
 	if (cap->cmdchar == 'S')
+	{
+	    VIsual_mode_orig = VIsual_mode;
 	    VIsual_mode = 'V';
+	}
 	cap->cmdchar = 'c';
 	nv_operator(cap);
     }
@@ -7401,7 +7575,7 @@
     pos_T	*pos;
     int		c;
 #ifdef FEAT_FOLDING
-    linenr_T	lnum = curwin->w_cursor.lnum;
+    pos_T	old_cursor = curwin->w_cursor;
     int		old_KeyTyped = KeyTyped;    /* getting file may reset it */
 #endif
 
@@ -7430,7 +7604,8 @@
 #endif
 #ifdef FEAT_FOLDING
     if (cap->oap->op_type == OP_NOP
-	    && (pos == (pos_T *)-1 || lnum != curwin->w_cursor.lnum)
+	    && pos != NULL
+	    && (pos == (pos_T *)-1 || !equalpos(old_cursor, *pos))
 	    && (fdo_flags & FDO_MARK)
 	    && old_KeyTyped)
 	foldOpenCursor();
@@ -7551,13 +7726,9 @@
     else		    /* start Visual mode */
     {
 	check_visual_highlight();
-	if (cap->count0)		    /* use previously selected part */
+	if (cap->count0 > 0 && resel_VIsual_mode != NUL)
 	{
-	    if (resel_VIsual_mode == NUL)   /* there is none */
-	    {
-		beep_flush();
-		return;
-	    }
+	    /* use previously selected part */
 	    VIsual = curwin->w_cursor;
 
 	    VIsual_active = TRUE;
@@ -7585,12 +7756,16 @@
 	    if (VIsual_mode == 'v')
 	    {
 		if (resel_VIsual_line_count <= 1)
-		    curwin->w_cursor.col += resel_VIsual_col * cap->count0 - 1;
+		{
+		    validate_virtcol();
+		    curwin->w_curswant = curwin->w_virtcol
+					+ resel_VIsual_vcol * cap->count0 - 1;
+		}
 		else
-		    curwin->w_cursor.col = resel_VIsual_col;
-		check_cursor_col();
+		    curwin->w_curswant = resel_VIsual_vcol;
+		coladvance(curwin->w_curswant);
 	    }
-	    if (resel_VIsual_col == MAXCOL)
+	    if (resel_VIsual_vcol == MAXCOL)
 	    {
 		curwin->w_curswant = MAXCOL;
 		coladvance((colnr_T)MAXCOL);
@@ -7599,7 +7774,7 @@
 	    {
 		validate_virtcol();
 		curwin->w_curswant = curwin->w_virtcol
-					 + resel_VIsual_col * cap->count0 - 1;
+					+ resel_VIsual_vcol * cap->count0 - 1;
 		coladvance(curwin->w_curswant);
 	    }
 	    else
@@ -7612,6 +7787,16 @@
 		/* start Select mode when 'selectmode' contains "cmd" */
 		may_start_select('c');
 	    n_start_visual_mode(cap->cmdchar);
+	    if (VIsual_mode != 'V' && *p_sel == 'e')
+		++cap->count1;  /* include one more char */
+	    if (cap->count0 > 0 && --cap->count1 > 0)
+	    {
+		/* With a count select that many characters or lines. */
+		if (VIsual_mode == 'v' || VIsual_mode == Ctrl_V)
+		    nv_right(cap);
+		else if (VIsual_mode == 'V')
+		    nv_down(cap);
+	    }
 	}
     }
 }
@@ -7659,7 +7844,10 @@
      * virtualedit.  Recalculate curwin->w_cursor to avoid bad hilighting.
      */
     if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB)
+    {
+	validate_virtcol();
 	coladvance(curwin->w_virtcol);
+    }
 #endif
     VIsual = curwin->w_cursor;
 
@@ -7870,6 +8058,18 @@
 	break;
 #endif /* FEAT_VISUAL */
 
+    /* "gn", "gN" visually select next/previous search match
+     * "gn" selects next match
+     * "gN" selects previous match
+     */
+    case 'N':
+    case 'n':
+#ifdef FEAT_VISUAL
+	if (!current_search(cap->count1, cap->nchar == 'n'))
+#endif
+	    clearopbeep(oap);
+	break;
+
     /*
      * "gj" and "gk" two new funny movement keys -- up and down
      * movement based on *screen* line rather than *file* line.
@@ -8274,10 +8474,12 @@
 
 #ifdef FEAT_WINDOWS
     case 't':
-	goto_tabpage((int)cap->count0);
+	if (!checkclearop(oap))
+	    goto_tabpage((int)cap->count0);
 	break;
     case 'T':
-	goto_tabpage(-(int)cap->count1);
+	if (!checkclearop(oap))
+	    goto_tabpage(-(int)cap->count1);
 	break;
 #endif
 
@@ -8479,7 +8681,9 @@
     cap->oap->motion_type = MLINE;
     if (cursor_down(cap->count1 - 1L, cap->oap->op_type == OP_NOP) == FAIL)
 	clearopbeep(cap->oap);
-    else if (  cap->oap->op_type == OP_DELETE
+    else if (  (cap->oap->op_type == OP_DELETE /* only with linewise motions */
+		&& cap->oap->motion_force != 'v'
+		&& cap->oap->motion_force != Ctrl_V)
 	    || cap->oap->op_type == OP_LSHIFT
 	    || cap->oap->op_type == OP_RSHIFT)
 	beginline(BL_SOL | BL_FIX);
@@ -8524,7 +8728,7 @@
     else
 	curwin->w_curswant = 0;
     /* keep curswant at the column where we wanted to go, not where
-       we ended; differs if line is too short */
+     * we ended; differs if line is too short */
     curwin->w_set_curswant = FALSE;
 }
 
@@ -8601,7 +8805,7 @@
 		 * at first, but it's really more what we mean when we say
 		 * 'cw'.
 		 * Another strangeness: When standing on the end of a word
-		 * "ce" will change until the end of the next wordt, but "cw"
+		 * "ce" will change until the end of the next word, but "cw"
 		 * will change only one character! This is done by setting
 		 * flag.
 		 */
@@ -8736,7 +8940,7 @@
 	{
 	    --pp->col;
 #ifdef FEAT_MBYTE
-	    mb_adjustpos(pp);
+	    mb_adjustpos(curbuf, pp);
 #endif
 	}
 	else if (pp->lnum > 1)
@@ -8947,7 +9151,7 @@
 		{
 		    int save_State = State;
 
-		    /* Pretent Insert mode here to allow the cursor on the
+		    /* Pretend Insert mode here to allow the cursor on the
 		     * character past the end of the line */
 		    State = INSERT;
 		    coladvance((colnr_T)MAXCOL);
@@ -8986,7 +9190,7 @@
 	{
 	    int save_State = State;
 
-	    /* Pretent Insert mode here to allow the cursor on the
+	    /* Pretend Insert mode here to allow the cursor on the
 	     * character past the end of the line */
 	    State = INSERT;
 	    coladvance(getviscol());
@@ -9205,7 +9409,7 @@
 	{
 	    prep_redo(cap->oap->regname, cap->count0,
 			 NUL, cap->cmdchar, NUL, NUL, cap->nchar);
-	    (void)do_join(cap->count0, cap->nchar == NUL, TRUE);
+	    (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE);
 	}
     }
 }
@@ -9261,14 +9465,15 @@
 # ifdef FEAT_CLIPBOARD
 	    adjust_clip_reg(&regname);
 # endif
-	    if (regname == 0 || VIM_ISDIGIT(regname)
+           if (regname == 0 || regname == '"'
+				     || VIM_ISDIGIT(regname) || regname == '-'
 # ifdef FEAT_CLIPBOARD
 		    || (clip_unnamed && (regname == '*' || regname == '+'))
 # endif
 
 		    )
 	    {
-		/* the delete is going to overwrite the register we want to
+		/* The delete is going to overwrite the register we want to
 		 * put, save it first. */
 		reg1 = get_register(regname, TRUE);
 	    }
diff -Naur vim73.orig/src/ops.c vim73/src/ops.c
--- vim73.orig/src/ops.c	2010-08-01 12:16:08.000000000 +0000
+++ vim73/src/ops.c	2013-08-04 19:09:10.483944240 +0000
@@ -112,6 +112,9 @@
 # endif
 #endif
 static void	dis_msg __ARGS((char_u *p, int skip_esc));
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+static char_u	*skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
+#endif
 #ifdef FEAT_VISUAL
 static void	block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
 #endif
@@ -329,7 +332,7 @@
 {
     int		count;
     int		i, j;
-    int		p_sw = (int)curbuf->b_p_sw;
+    int		p_sw = (int)get_sw_value();
 
     count = get_indent();	/* get current indent */
 
@@ -385,7 +388,7 @@
     int			total;
     char_u		*newp, *oldp;
     int			oldcol = curwin->w_cursor.col;
-    int			p_sw = (int)curbuf->b_p_sw;
+    int			p_sw = (int)get_sw_value();
     int			p_ts = (int)curbuf->b_p_ts;
     struct block_def	bd;
     int			incr;
@@ -395,7 +398,7 @@
 #ifdef FEAT_RIGHTLEFT
     int			old_p_ri = p_ri;
 
-    p_ri = 0;			/* don't want revins in ident */
+    p_ri = 0;			/* don't want revins in indent */
 #endif
 
     State = INSERT;		/* don't want REPLACE for State */
@@ -959,8 +962,14 @@
      * selection too. */
     if (name == '*' && clip_star.available)
     {
-	if (clip_isautosel())
-	    clip_update_selection();
+	if (clip_isautosel_star())
+	    clip_update_selection(&clip_star);
+	may_get_selection(name);
+    }
+    if (name == '+' && clip_plus.available)
+    {
+	if (clip_isautosel_plus())
+	    clip_update_selection(&clip_plus);
 	may_get_selection(name);
     }
 #endif
@@ -1008,6 +1017,19 @@
     may_set_selection();
 # endif
 }
+
+    void
+free_register(reg)
+    void	*reg;
+{
+    struct yankreg tmp;
+
+    tmp = *y_current;
+    *y_current = *(struct yankreg *)reg;
+    free_yank_all();
+    vim_free(reg);
+    *y_current = tmp;
+}
 #endif
 
 #if defined(FEAT_MOUSE) || defined(PROTO)
@@ -1584,9 +1606,11 @@
 adjust_clip_reg(rp)
     int		*rp;
 {
-    /* If no reg. specified, and "unnamed" is in 'clipboard', use '*' reg. */
-    if (*rp == 0 && clip_unnamed)
-	*rp = '*';
+    /* If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard',
+     * use '*' or '+' reg, respectively. "unnamedplus" prevails. */
+    if (*rp == 0 && clip_unnamed != 0)
+	*rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available)
+								  ? '+' : '*';
     if (!clip_star.available && *rp == '*')
 	*rp = 0;
     if (!clip_plus.available && *rp == '+')
@@ -1612,6 +1636,7 @@
 #endif
     linenr_T		old_lcount = curbuf->b_ml.ml_line_count;
     int			did_yank = FALSE;
+    int			orig_regname = oap->regname;
 
     if (curbuf->b_ml.ml_flags & ML_EMPTY)	    /* nothing to do */
 	return OK;
@@ -1646,9 +1671,12 @@
 	    && !oap->block_mode
 #endif
 	    && oap->line_count > 1
+	    && oap->motion_force == NUL
 	    && oap->op_type == OP_DELETE)
     {
-	ptr = ml_get(oap->end.lnum) + oap->end.col + oap->inclusive;
+	ptr = ml_get(oap->end.lnum) + oap->end.col;
+	if (*ptr != NUL)
+	    ptr += oap->inclusive;
 	ptr = skipwhite(ptr);
 	if (*ptr == NUL && inindent(0))
 	    oap->motion_type = MLINE;
@@ -1701,8 +1729,10 @@
 	/*
 	 * Put deleted text into register 1 and shift number registers if the
 	 * delete contains a line break, or when a regname has been specified.
+	 * Use the register name from before adjust_clip_reg() may have
+	 * changed it.
 	 */
-	if (oap->regname != 0 || oap->motion_type == MLINE
+	if (orig_regname != 0 || oap->motion_type == MLINE
 				   || oap->line_count > 1 || oap->use_reg_one)
 	{
 	    y_current = &y_regs[9];
@@ -1715,9 +1745,14 @@
 		did_yank = TRUE;
 	}
 
-	/* Yank into small delete register when no register specified and the
-	 * delete is within one line. */
-	if (oap->regname == 0 && oap->motion_type != MLINE
+	/* Yank into small delete register when no named register specified
+	 * and the delete is within one line. */
+	if ((
+#ifdef FEAT_CLIPBOARD
+	    ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
+	    ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
+#endif
+	    oap->regname == 0) && oap->motion_type != MLINE
 						      && oap->line_count == 1)
 	{
 	    oap->regname = '-';
@@ -1918,38 +1953,66 @@
 		    curwin->w_cursor.coladd = 0;
 	    }
 #endif
-	    (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+	    if (oap->op_type == OP_DELETE
+		    && oap->inclusive
+		    && oap->end.lnum == curbuf->b_ml.ml_line_count
+		    && n > (int)STRLEN(ml_get(oap->end.lnum)))
+	    {
+		/* Special case: gH<Del> deletes the last line. */
+		del_lines(1L, FALSE);
+	    }
+	    else
+	    {
+		(void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
 #ifdef FEAT_VISUAL
 				    && !oap->is_VIsual
 #endif
 							);
+	    }
 	}
 	else				/* delete characters between lines */
 	{
 	    pos_T   curpos;
+	    int     delete_last_line;
 
 	    /* save deleted and changed lines for undo */
 	    if (u_save((linenr_T)(curwin->w_cursor.lnum - 1),
 		 (linenr_T)(curwin->w_cursor.lnum + oap->line_count)) == FAIL)
 		return FAIL;
 
+	    delete_last_line = (oap->end.lnum == curbuf->b_ml.ml_line_count);
 	    truncate_line(TRUE);	/* delete from cursor to end of line */
 
 	    curpos = curwin->w_cursor;	/* remember curwin->w_cursor */
 	    ++curwin->w_cursor.lnum;
 	    del_lines((long)(oap->line_count - 2), FALSE);
 
-	    /* delete from start of line until op_end */
-	    curwin->w_cursor.col = 0;
-	    (void)del_bytes((long)(oap->end.col + 1 - !oap->inclusive),
-					!virtual_op, oap->op_type == OP_DELETE
+	    if (delete_last_line)
+		oap->end.lnum = curbuf->b_ml.ml_line_count;
+
+	    n = (oap->end.col + 1 - !oap->inclusive);
+	    if (oap->inclusive && delete_last_line
+		    && n > (int)STRLEN(ml_get(oap->end.lnum)))
+	    {
+		/* Special case: gH<Del> deletes the last line. */
+		del_lines(1L, FALSE);
+		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
+		if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+		    curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+	    }
+	    else
+	    {
+		/* delete from start of line until op_end */
+		curwin->w_cursor.col = 0;
+		(void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
 #ifdef FEAT_VISUAL
 					&& !oap->is_VIsual
 #endif
 							    );
-	    curwin->w_cursor = curpos;		/* restore curwin->w_cursor */
-
-	    (void)do_join(2, FALSE, FALSE);
+		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
+	    }
+	    if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+		(void)do_join(2, FALSE, FALSE, FALSE);
 	}
     }
 
@@ -2144,7 +2207,8 @@
 		{
 		    /* This is slow, but it handles replacing a single-byte
 		     * with a multi-byte and the other way around. */
-		    oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
+		    if (curwin->w_cursor.lnum == oap->end.lnum)
+			oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
 		    n = State;
 		    State = REPLACE;
 		    ins_char(c);
@@ -2569,7 +2633,8 @@
 	firstline = ml_get(oap->start.lnum) + bd.textcol;
 	if (oap->op_type == OP_APPEND)
 	    firstline += bd.textlen;
-	if ((ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
+	if (pre_textlen >= 0
+		     && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
 	{
 	    ins_text = vim_strnsave(firstline, (int)ins_len);
 	    if (ins_text != NULL)
@@ -2842,6 +2907,9 @@
     char_u		*p;
     char_u		*pnew;
     struct block_def	bd;
+#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+    int			did_star = FALSE;
+#endif
 
 				    /* check for read-only register */
     if (oap->regname != 0 && !valid_yank_reg(oap->regname, TRUE))
@@ -3000,6 +3068,8 @@
 			}
 #endif
 		    }
+		    if (endcol == MAXCOL)
+			endcol = (colnr_T)STRLEN(p);
 		    if (startcol > endcol
 #ifdef FEAT_VIRTUALEDIT
 			    || is_oneChar
@@ -3008,8 +3078,6 @@
 			bd.textlen = 0;
 		    else
 		    {
-			if (endcol == MAXCOL)
-			    endcol = (colnr_T)STRLEN(p);
 			bd.textlen = endcol - startcol + oap->inclusive;
 		    }
 		    bd.textstart = p + startcol;
@@ -3115,7 +3183,8 @@
      */
     if (clip_star.available
 	    && (curr == &(y_regs[STAR_REGISTER])
-		|| (!deleting && oap->regname == 0 && clip_unnamed)))
+		|| (!deleting && oap->regname == 0
+					   && (clip_unnamed & CLIP_UNNAMED))))
     {
 	if (curr != &(y_regs[STAR_REGISTER]))
 	    /* Copy the text from register 0 to the clipboard register. */
@@ -3123,6 +3192,9 @@
 
 	clip_own_selection(&clip_star);
 	clip_gen_set_selection(&clip_star);
+# ifdef FEAT_X11
+	did_star = TRUE;
+# endif
     }
 
 # ifdef FEAT_X11
@@ -3130,12 +3202,19 @@
      * If we were yanking to the '+' register, send result to selection.
      * Also copy to the '*' register, in case auto-select is off.
      */
-    else if (clip_plus.available && curr == &(y_regs[PLUS_REGISTER]))
+    if (clip_plus.available
+	    && (curr == &(y_regs[PLUS_REGISTER])
+		|| (!deleting && oap->regname == 0
+				      && (clip_unnamed & CLIP_UNNAMED_PLUS))))
     {
-	/* No need to copy to * register upon 'unnamed' now - see below */
+	if (curr != &(y_regs[PLUS_REGISTER]))
+	    /* Copy the text from register 0 to the clipboard register. */
+	    copy_yank_reg(&(y_regs[PLUS_REGISTER]));
+
 	clip_own_selection(&clip_plus);
 	clip_gen_set_selection(&clip_plus);
-	if (!clip_isautosel())
+	if (!clip_isautosel_star() && !did_star
+					  && curr == &(y_regs[PLUS_REGISTER]))
 	{
 	    copy_yank_reg(&(y_regs[STAR_REGISTER]));
 	    clip_own_selection(&clip_star);
@@ -3286,6 +3365,12 @@
 	    return;
     }
 
+#ifdef FEAT_AUTOCMD
+    /* Autocommands may be executed when saving lines for undo, which may make
+     * y_array invalid.  Start undo now to avoid that. */
+    u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1);
+#endif
+
     if (insert_string != NULL)
     {
 	y_type = MCHAR;
@@ -3293,8 +3378,8 @@
 	if (regname == '=')
 	{
 	    /* For the = register we need to split the string at NL
-	     * characters. */
-	    /* Loop twice: count the number of lines and save them. */
+	     * characters.
+	     * Loop twice: count the number of lines and save them. */
 	    for (;;)
 	    {
 		y_size = 0;
@@ -3310,7 +3395,7 @@
 			if (y_array != NULL)
 			    *ptr = NUL;
 			++ptr;
-			/* A trailing '\n' makes the string linewise */
+			/* A trailing '\n' makes the register linewise. */
 			if (*ptr == NUL)
 			{
 			    y_type = MLINE;
@@ -3412,7 +3497,9 @@
 #endif
 	if (dir == FORWARD)
 	    ++lnum;
-	if (u_save(lnum - 1, lnum) == FAIL)
+	/* In an empty buffer the empty line is going to be replaced, include
+	 * it in the saved lines. */
+	if ((bufempty() ? u_save(0, 2) : u_save(lnum - 1, lnum)) == FAIL)
 	    goto end;
 #ifdef FEAT_FOLDING
 	if (dir == FORWARD)
@@ -3979,7 +4066,12 @@
     for (i = -1; i < NUM_REGISTERS && !got_int; ++i)
     {
 	name = get_register_name(i);
-	if (arg != NULL && vim_strchr(arg, name) == NULL)
+	if (arg != NULL && vim_strchr(arg, name) == NULL
+#ifdef ONE_CLIPBOARD
+	    /* Star register and plus register contain the same thing. */
+		&& (name != '*' || vim_strchr(arg, '+') == NULL)
+#endif
+		)
 	    continue;	    /* did not ask for this register */
 
 #ifdef FEAT_CLIPBOARD
@@ -4140,22 +4232,101 @@
     ui_breakcheck();
 }
 
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+/*
+ * If "process" is TRUE and the line begins with a comment leader (possibly
+ * after some white space), return a pointer to the text after it. Put a boolean
+ * value indicating whether the line ends with an unclosed comment in
+ * "is_comment".
+ * line - line to be processed,
+ * process - if FALSE, will only check whether the line ends with an unclosed
+ *	     comment,
+ * include_space - whether to also skip space following the comment leader,
+ * is_comment - will indicate whether the current line ends with an unclosed
+ *		comment.
+ */
+    static char_u *
+skip_comment(line, process, include_space, is_comment)
+    char_u   *line;
+    int      process;
+    int	     include_space;
+    int      *is_comment;
+{
+    char_u *comment_flags = NULL;
+    int    lead_len;
+    int    leader_offset = get_last_leader_offset(line, &comment_flags);
+
+    *is_comment = FALSE;
+    if (leader_offset != -1)
+    {
+	/* Let's check whether the line ends with an unclosed comment.
+	 * If the last comment leader has COM_END in flags, there's no comment.
+	 */
+	while (*comment_flags)
+	{
+	    if (*comment_flags == COM_END
+		    || *comment_flags == ':')
+		break;
+	    ++comment_flags;
+	}
+	if (*comment_flags != COM_END)
+	    *is_comment = TRUE;
+    }
+
+    if (process == FALSE)
+	return line;
+
+    lead_len = get_leader_len(line, &comment_flags, FALSE, include_space);
+
+    if (lead_len == 0)
+	return line;
+
+    /* Find:
+     * - COM_END,
+     * - colon,
+     * whichever comes first.
+     */
+    while (*comment_flags)
+    {
+	if (*comment_flags == COM_END
+		|| *comment_flags == ':')
+	{
+	    break;
+	}
+	++comment_flags;
+    }
+
+    /* If we found a colon, it means that we are not processing a line
+     * starting with a closing part of a three-part comment. That's good,
+     * because we don't want to remove those as this would be annoying.
+     */
+    if (*comment_flags == ':' || *comment_flags == NUL)
+	line += lead_len;
+
+    return line;
+}
+#endif
+
 /*
  * Join 'count' lines (minimal 2) at cursor position.
  * When "save_undo" is TRUE save lines for undo first.
+ * Set "use_formatoptions" to FALSE when e.g. processing
+ * backspace and comment leaders should not be removed.
  *
  * return FAIL for failure, OK otherwise
  */
     int
-do_join(count, insert_space, save_undo)
+do_join(count, insert_space, save_undo, use_formatoptions)
     long    count;
     int	    insert_space;
     int	    save_undo;
+    int	    use_formatoptions UNUSED;
 {
     char_u	*curr = NULL;
+    char_u      *curr_start = NULL;
     char_u	*cend;
     char_u	*newp;
-    char_u	*spaces;	/* number of spaces inserte before a line */
+    char_u	*spaces;	/* number of spaces inserted before a line */
     int		endcurr1 = NUL;
     int		endcurr2 = NUL;
     int		currsize = 0;	/* size of the current line */
@@ -4163,6 +4334,13 @@
     linenr_T	t;
     colnr_T	col = 0;
     int		ret = OK;
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+    int		*comments = NULL;
+    int		remove_comments = (use_formatoptions == TRUE)
+				  && has_format_option(FO_REMOVE_COMS);
+    int		prev_was_comment;
+#endif
+
 
     if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
 			    (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
@@ -4174,6 +4352,17 @@
     spaces = lalloc_clear((long_u)count, TRUE);
     if (spaces == NULL)
 	return FAIL;
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+    if (remove_comments)
+    {
+	comments = (int *)lalloc_clear((long_u)count * sizeof(int), TRUE);
+	if (comments == NULL)
+	{
+	    vim_free(spaces);
+	    return FAIL;
+	}
+    }
+#endif
 
     /*
      * Don't move anything, just compute the final line length
@@ -4181,7 +4370,26 @@
      */
     for (t = 0; t < count; ++t)
     {
-	curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
+	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+	if (remove_comments)
+	{
+	    /* We don't want to remove the comment leader if the
+	     * previous line is not a comment. */
+	    if (t > 0 && prev_was_comment)
+	    {
+
+		char_u *new_curr = skip_comment(curr, TRUE, insert_space,
+							   &prev_was_comment);
+		comments[t] = (int)(new_curr - curr);
+		curr = new_curr;
+	    }
+	    else
+		curr = skip_comment(curr, FALSE, insert_space,
+							   &prev_was_comment);
+	}
+#endif
+
 	if (insert_space && t > 0)
 	{
 	    curr = skipwhite(curr);
@@ -4265,10 +4473,14 @@
 	    copy_spaces(cend, (size_t)(spaces[t]));
 	}
 	mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t,
-				 (long)(cend - newp + spaces[t]));
+			 (long)(cend - newp + spaces[t] - (curr - curr_start)));
 	if (t == 0)
 	    break;
-	curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
+	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+	if (remove_comments)
+	    curr += comments[t - 1];
+#endif
 	if (insert_space && t > 1)
 	    curr = skipwhite(curr);
 	currsize = (int)STRLEN(curr);
@@ -4306,6 +4518,10 @@
 
 theend:
     vim_free(spaces);
+#if defined(FEAT_COMMENTS) || defined(PROTO)
+    if (remove_comments)
+	vim_free(comments);
+#endif
     return ret;
 }
 
@@ -4388,7 +4604,7 @@
 #endif
 
 /*
- * implementation of the format operator 'gq'
+ * Implementation of the format operator 'gq'.
  */
     void
 op_format(oap, keep_cursor)
@@ -4539,9 +4755,11 @@
     char_u	*leader_flags = NULL;	/* flags for leader of current line */
     char_u	*next_leader_flags;	/* flags for leader of next line */
     int		do_comments;		/* format comments */
+    int		do_comments_list = 0;	/* format comments with 'n' or '2' */
 #endif
     int		advance = TRUE;
-    int		second_indent = -1;
+    int		second_indent = -1;	/* indent for second line (comment
+					 * aware) */
     int		do_second_indent;
     int		do_number_indent;
     int		do_trail_white;
@@ -4644,18 +4862,46 @@
 	    if (first_par_line
 		    && (do_second_indent || do_number_indent)
 		    && prev_is_end_par
-		    && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count
+		    && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
+	    {
+		if (do_second_indent && !lineempty(curwin->w_cursor.lnum + 1))
+		{
 #ifdef FEAT_COMMENTS
-		    && leader_len == 0
-		    && next_leader_len == 0
+		    if (leader_len == 0 && next_leader_len == 0)
+		    {
+			/* no comment found */
 #endif
-		    )
-	    {
-		if (do_second_indent
-			&& !lineempty(curwin->w_cursor.lnum + 1))
-		    second_indent = get_indent_lnum(curwin->w_cursor.lnum + 1);
+			second_indent =
+				   get_indent_lnum(curwin->w_cursor.lnum + 1);
+#ifdef FEAT_COMMENTS
+		    }
+		    else
+		    {
+			second_indent = next_leader_len;
+			do_comments_list = 1;
+		    }
+#endif
+		}
 		else if (do_number_indent)
-		    second_indent = get_number_indent(curwin->w_cursor.lnum);
+		{
+#ifdef FEAT_COMMENTS
+		    if (leader_len == 0 && next_leader_len == 0)
+		    {
+			/* no comment found */
+#endif
+			second_indent =
+				     get_number_indent(curwin->w_cursor.lnum);
+#ifdef FEAT_COMMENTS
+		    }
+		    else
+		    {
+			/* get_number_indent() is now "comment aware"... */
+			second_indent =
+				     get_number_indent(curwin->w_cursor.lnum);
+			do_comments_list = 1;
+		    }
+#endif
+		}
 	    }
 
 	    /*
@@ -4694,6 +4940,8 @@
 		insertchar(NUL, INSCHAR_FORMAT
 #ifdef FEAT_COMMENTS
 			+ (do_comments ? INSCHAR_DO_COM : 0)
+			+ (do_comments && do_comments_list
+						       ? INSCHAR_COM_LIST : 0)
 #endif
 			+ (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
 		State = old_State;
@@ -4730,7 +4978,7 @@
 						      (long)-next_leader_len);
 #endif
 		curwin->w_cursor.lnum--;
-		if (do_join(2, TRUE, FALSE) == FAIL)
+		if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
 		{
 		    beep_flush();
 		    break;
@@ -4786,7 +5034,7 @@
 
     ptr = ml_get(lnum);
     if (do_comments)
-	*leader_len = get_leader_len(ptr, leader_flags, FALSE);
+	*leader_len = get_leader_len(ptr, leader_flags, FALSE, TRUE);
     else
 	*leader_len = 0;
 
@@ -5596,6 +5844,8 @@
 					       && len < 1024*1024 && len > 0)
     {
 #ifdef FEAT_MBYTE
+	int ok = TRUE;
+
 	/* The CUT_BUFFER0 is supposed to always contain latin1.  Convert from
 	 * 'enc' when it is a multi-byte encoding.  When 'enc' is an 8-bit
 	 * encoding conversion usually doesn't work, so keep the text as-is.
@@ -5610,6 +5860,7 @@
 		int	intlen = len;
 		char_u	*conv_str;
 
+		vc.vc_fail = TRUE;
 		conv_str = string_convert(&vc, str, &intlen);
 		len = intlen;
 		if (conv_str != NULL)
@@ -5617,12 +5868,26 @@
 		    vim_free(str);
 		    str = conv_str;
 		}
+		else
+		{
+		    ok = FALSE;
+		}
 		convert_setup(&vc, NULL, NULL);
 	    }
+	    else
+	    {
+		ok = FALSE;
+	    }
 	}
+
+	/* Do not store the string if conversion failed.  Better to use any
+	 * other selection than garbled text. */
+	if (ok)
 #endif
-	XStoreBuffer(dpy, (char *)str, (int)len, 0);
-	XFlush(dpy);
+	{
+	    XStoreBuffer(dpy, (char *)str, (int)len, 0);
+	    XFlush(dpy);
+	}
     }
 
     vim_free(str);
@@ -5712,7 +5977,9 @@
     }
 }
 
-/* Convert from the GUI selection string into the '*'/'+' register */
+/*
+ * Convert from the GUI selection string into the '*'/'+' register.
+ */
     void
 clip_yank_selection(type, str, len, cbd)
     int		type;
@@ -6069,9 +6336,6 @@
     if (yank_type == MBLOCK)
 	yank_type = MAUTO;
 #endif
-    if (yank_type == MAUTO)
-	yank_type = ((len > 0 && (str[len - 1] == '\n' || str[len - 1] == '\r'))
-							     ? MLINE : MCHAR);
     str_to_reg(y_current, yank_type, str, len, block_len);
 
 # ifdef FEAT_CLIPBOARD
@@ -6092,13 +6356,14 @@
  * is appended.
  */
     static void
-str_to_reg(y_ptr, type, str, len, blocklen)
+str_to_reg(y_ptr, yank_type, str, len, blocklen)
     struct yankreg	*y_ptr;		/* pointer to yank register */
-    int			type;		/* MCHAR, MLINE or MBLOCK */
+    int			yank_type;	/* MCHAR, MLINE, MBLOCK, MAUTO */
     char_u		*str;		/* string to put in register */
     long		len;		/* length of string */
     long		blocklen;	/* width of Visual block */
 {
+    int		type;			/* MCHAR, MLINE or MBLOCK */
     int		lnum;
     long	start;
     long	i;
@@ -6115,6 +6380,12 @@
     if (y_ptr->y_array == NULL)		/* NULL means empty register */
 	y_ptr->y_size = 0;
 
+    if (yank_type == MAUTO)
+	type = ((len > 0 && (str[len - 1] == NL || str[len - 1] == CAR))
+							     ? MLINE : MCHAR);
+    else
+	type = yank_type;
+
     /*
      * Count the number of lines within the string
      */
@@ -6236,7 +6507,7 @@
     long	chars = 0;
     int		is_word = 0;
 
-    for (i = 0; line[i] && i < limit; )
+    for (i = 0; i < limit && line[i] != NUL; )
     {
 	if (is_word)
 	{
@@ -6261,7 +6532,7 @@
     *wc += words;
 
     /* Add eol_size if the end of line was reached before hitting limit. */
-    if (line[i] == NUL && i < limit)
+    if (i < limit && line[i] == NUL)
     {
 	i += eol_size;
 	chars += eol_size;
diff -Naur vim73.orig/src/option.c vim73/src/option.c
--- vim73.orig/src/option.c	2010-08-04 18:49:18.000000000 +0000
+++ vim73/src/option.c	2013-08-04 19:09:10.493944210 +0000
@@ -140,9 +140,6 @@
 #define PV_MOD		OPT_BUF(BV_MOD)
 #define PV_MPS		OPT_BUF(BV_MPS)
 #define PV_NF		OPT_BUF(BV_NF)
-#ifdef FEAT_OSFILETYPE
-# define PV_OFT		OPT_BUF(BV_OFT)
-#endif
 #ifdef FEAT_COMPL_FUNC
 # define PV_OFU		OPT_BUF(BV_OFU)
 #endif
@@ -337,9 +334,6 @@
 static int	p_mod;
 static char_u	*p_mps;
 static char_u	*p_nf;
-#ifdef FEAT_OSFILETYPE
-static char_u	*p_oft;
-#endif
 static int	p_pi;
 #ifdef FEAT_TEXTOBJ
 static char_u	*p_qe;
@@ -439,17 +433,19 @@
 #define P_RCLR		0x7000	/* clear and redraw all */
 
 #define P_COMMA		0x8000	/* comma separated list */
-#define P_NODUP		0x10000L/* don't allow duplicate strings */
-#define P_FLAGLIST	0x20000L/* list of single-char flags */
+#define P_NODUP		0x10000L /* don't allow duplicate strings */
+#define P_FLAGLIST	0x20000L /* list of single-char flags */
 
-#define P_SECURE	0x40000L/* cannot change in modeline or secure mode */
-#define P_GETTEXT	0x80000L/* expand default value with _() */
-#define P_NOGLOB       0x100000L/* do not use local value for global vimrc */
-#define P_NFNAME       0x200000L/* only normal file name chars allowed */
-#define P_INSECURE     0x400000L/* option was set from a modeline */
-#define P_PRI_MKRC     0x800000L/* priority for :mkvimrc (setting option has
+#define P_SECURE	0x40000L /* cannot change in modeline or secure mode */
+#define P_GETTEXT	0x80000L /* expand default value with _() */
+#define P_NOGLOB       0x100000L /* do not use local value for global vimrc */
+#define P_NFNAME       0x200000L /* only normal file name chars allowed */
+#define P_INSECURE     0x400000L /* option was set from a modeline */
+#define P_PRI_MKRC     0x800000L /* priority for :mkvimrc (setting option has
 				   side effects) */
-#define P_NO_ML       0x1000000L/* not allowed in modeline */
+#define P_NO_ML       0x1000000L /* not allowed in modeline */
+#define P_CURSWANT    0x2000000L /* update curswant required; not needed when
+				  * there is a redraw flag */
 
 #define ISK_LATIN1  (char_u *)"@,48-57,_,192-255"
 
@@ -466,9 +462,9 @@
 #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
 	|| defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
 	|| defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
-# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
+# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
 #else
-# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
+# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
 #endif
 
 /*
@@ -485,7 +481,7 @@
 #endif
 	options[] =
 {
-    {"aleph",	    "al",   P_NUM|P_VI_DEF,
+    {"aleph",	    "al",   P_NUM|P_VI_DEF|P_CURSWANT,
 #ifdef FEAT_RIGHTLEFT
 			    (char_u *)&p_aleph, PV_NONE,
 #else
@@ -507,7 +503,7 @@
 			    {(char_u *)FALSE, (char_u *)FALSE}
 #endif
 			    SCRIPTID_INIT},
-    {"arabic",	    "arab", P_BOOL|P_VI_DEF|P_VIM,
+    {"arabic",	    "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
 #ifdef FEAT_ARABIC
 			    (char_u *)VAR_WIN, PV_ARAB,
 #else
@@ -784,7 +780,7 @@
     {"columns",	    "co",   P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
 			    (char_u *)&Columns, PV_NONE,
 			    {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
-    {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
+    {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
 #ifdef FEAT_COMMENTS
 			    (char_u *)&p_com, PV_COM,
 			    {(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
@@ -794,7 +790,7 @@
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    SCRIPTID_INIT},
-    {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
+    {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
 #ifdef FEAT_FOLDING
 			    (char_u *)&p_cms, PV_CMS,
 			    {(char_u *)"/*%s*/", (char_u *)0L}
@@ -907,6 +903,13 @@
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    SCRIPTID_INIT},
+    {"cscoperelative", "csre", P_BOOL|P_VI_DEF|P_VIM,
+#ifdef FEAT_CSCOPE
+			    (char_u *)&p_csre, PV_NONE,
+#else
+			    (char_u *)NULL, PV_NONE,
+#endif
+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"cscopetag",   "cst",  P_BOOL|P_VI_DEF|P_VIM,
 #ifdef FEAT_CSCOPE
 			    (char_u *)&p_cst, PV_NONE,
@@ -952,7 +955,7 @@
     {"debug",	    NULL,   P_STRING|P_VI_DEF,
 			    (char_u *)&p_debug, PV_NONE,
 			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-    {"define",	    "def",  P_STRING|P_ALLOCED|P_VI_DEF,
+    {"define",	    "def",  P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
 #ifdef FEAT_FIND_ID
 			    (char_u *)&p_def, PV_DEF,
 			    {(char_u *)"^\\s*#\\s*define", (char_u *)0L}
@@ -982,7 +985,7 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-    {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE,
+    {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
 #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
 			    (char_u *)&p_dex, PV_NONE,
 			    {(char_u *)"", (char_u *)0L}
@@ -1098,13 +1101,22 @@
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    SCRIPTID_INIT},
-    {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC,
+    {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC|P_CURSWANT,
 			    (char_u *)&p_ff, PV_FF,
 			    {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
     {"fileformats", "ffs",  P_STRING|P_VIM|P_COMMA|P_NODUP,
 			    (char_u *)&p_ffs, PV_NONE,
 			    {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}
 			    SCRIPTID_INIT},
+    {"fileignorecase", "fic", P_BOOL|P_VI_DEF,
+			    (char_u *)&p_fic, PV_NONE,
+			    {
+#ifdef CASE_INSENSITIVE_FILENAME
+				    (char_u *)TRUE,
+#else
+				    (char_u *)FALSE,
+#endif
+					(char_u *)0L} SCRIPTID_INIT},
     {"filetype",    "ft",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
 #ifdef FEAT_AUTOCMD
 			    (char_u *)&p_ft, PV_FT,
@@ -1158,7 +1170,7 @@
     {"foldlevel",   "fdl",  P_NUM|P_VI_DEF|P_RWIN,
 			    (char_u *)VAR_WIN, PV_FDL,
 			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-    {"foldlevelstart","fdls", P_NUM|P_VI_DEF,
+    {"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
 			    (char_u *)&p_fdls, PV_NONE,
 			    {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
     {"foldmarker",  "fmr",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
@@ -1175,7 +1187,7 @@
     {"foldnestmax", "fdn",  P_NUM|P_VI_DEF|P_RWIN,
 			    (char_u *)VAR_WIN, PV_FDN,
 			    {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
-    {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+    {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
 			    (char_u *)&p_fdo, PV_NONE,
 		 {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
 						 (char_u *)0L} SCRIPTID_INIT},
@@ -1413,6 +1425,15 @@
     {"ignorecase",  "ic",   P_BOOL|P_VI_DEF,
 			    (char_u *)&p_ic, PV_NONE,
 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+    {"imactivatefunc","imaf",P_STRING|P_VI_DEF|P_SECURE,
+# if defined(FEAT_EVAL) && defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+			    (char_u *)&p_imaf, PV_NONE,
+			    {(char_u *)"", (char_u *)NULL}
+# else
+			    (char_u *)NULL, PV_NONE,
+			    {(char_u *)NULL, (char_u *)0L}
+# endif
+			    SCRIPTID_INIT},
     {"imactivatekey","imak",P_STRING|P_VI_DEF,
 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
 			    (char_u *)&p_imak, PV_NONE,
@@ -1455,6 +1476,15 @@
 			    {(char_u *)B_IMODE_NONE, (char_u *)0L}
 #endif
 			    SCRIPTID_INIT},
+    {"imstatusfunc","imsf",P_STRING|P_VI_DEF|P_SECURE,
+# if defined(FEAT_EVAL) && defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
+			    (char_u *)&p_imsf, PV_NONE,
+			    {(char_u *)"", (char_u *)NULL}
+# else
+			    (char_u *)NULL, PV_NONE,
+			    {(char_u *)NULL, (char_u *)0L}
+# endif
+			    SCRIPTID_INIT},
     {"include",	    "inc",  P_STRING|P_ALLOCED|P_VI_DEF,
 #ifdef FEAT_FIND_ID
 			    (char_u *)&p_inc, PV_INC,
@@ -1740,7 +1770,7 @@
     {"matchtime",   "mat",  P_NUM|P_VI_DEF,
 			    (char_u *)&p_mat, PV_NONE,
 			    {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
-    {"maxcombine",  "mco",  P_NUM|P_VI_DEF,
+    {"maxcombine",  "mco",  P_NUM|P_VI_DEF|P_CURSWANT,
 #ifdef FEAT_MBYTE
 			    (char_u *)&p_mco, PV_NONE,
 #else
@@ -1901,14 +1931,8 @@
 			    (char_u *)NULL, PV_NONE,
 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
     {"osfiletype",  "oft",  P_STRING|P_ALLOCED|P_VI_DEF,
-#ifdef FEAT_OSFILETYPE
-			    (char_u *)&p_oft, PV_OFT,
-			    {(char_u *)DFLT_OFT, (char_u *)0L}
-#else
 			    (char_u *)NULL, PV_NONE,
-			    {(char_u *)0L, (char_u *)0L}
-#endif
-			    SCRIPTID_INIT},
+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"paragraphs",  "para", P_STRING|P_VI_DEF,
 			    (char_u *)&p_para, PV_NONE,
 			    {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
@@ -2071,6 +2095,9 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)2000L, (char_u *)0L} SCRIPTID_INIT},
+    {"regexpengine", "re",  P_NUM|P_VI_DEF,
+			    (char_u *)&p_re, PV_NONE,
+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RWIN,
 			    (char_u *)VAR_WIN, PV_RNU,
 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
@@ -2278,6 +2305,15 @@
 			    (char_u *)"",
 #endif
 				(char_u *)0L} SCRIPTID_INIT},
+    {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
+			    (char_u *)&p_sxe, PV_NONE,
+			    {
+#if defined(MSDOS) || defined(WIN16) || defined(WIN3264)
+			    (char_u *)"\"&|<>()@^",
+#else
+			    (char_u *)"",
+#endif
+				(char_u *)0L} SCRIPTID_INIT},
     {"shiftround",  "sr",   P_BOOL|P_VI_DEF|P_VIM,
 			    (char_u *)&p_sr, PV_NONE,
 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
@@ -2706,7 +2742,7 @@
 			    {(char_u *)0L, (char_u *)0L}
 #endif
 			    SCRIPTID_INIT},
-    {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM,
+    {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM|P_CURSWANT,
 #ifdef FEAT_VIRTUALEDIT
 			    (char_u *)&p_ve, PV_NONE,
 			    {(char_u *)"", (char_u *)""}
@@ -2740,7 +2776,7 @@
 			    (char_u *)&p_wc, PV_NONE,
 			    {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}
 			    SCRIPTID_INIT},
-    {"wildcharm",   "wcm",   P_NUM|P_VI_DEF,
+    {"wildcharm",   "wcm",  P_NUM|P_VI_DEF,
 			    (char_u *)&p_wcm, PV_NONE,
 			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
     {"wildignore",  "wig",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
@@ -2750,6 +2786,9 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+    {"wildignorecase", "wic", P_BOOL|P_VI_DEF,
+			    (char_u *)&p_wic, PV_NONE,
+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
     {"wildmenu",    "wmnu", P_BOOL|P_VI_DEF,
 #ifdef FEAT_WILDMENU
 			    (char_u *)&p_wmnu, PV_NONE,
@@ -2891,6 +2930,7 @@
     p_term("t_op", T_OP)
     p_term("t_RI", T_CRI)
     p_term("t_RV", T_CRV)
+    p_term("t_u7", T_U7)
     p_term("t_Sb", T_CSB)
     p_term("t_Sf", T_CSF)
     p_term("t_se", T_SE)
@@ -2996,7 +3036,7 @@
 # define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags)
 #endif
 static void set_string_option_global __ARGS((int opt_idx, char_u **varp));
-static void set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
+static char_u *set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
 static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags));
 static char_u *set_chars_option __ARGS((char_u **varp));
 #ifdef FEAT_SYN_HL
@@ -3145,7 +3185,7 @@
 	{
 #ifdef HAVE_AVAIL_MEM
 	    /* Use amount of memory available at this moment. */
-	    n = (mch_avail_mem(FALSE) >> 11);
+	    n = (mch_avail_mem(FALSE) >> 1);
 #else
 # ifdef HAVE_TOTAL_MEM
 	    /* Use amount of memory available to Vim. */
@@ -3159,7 +3199,7 @@
 	    if (opt_idx >= 0)
 	    {
 #if !defined(HAVE_AVAIL_MEM) && !defined(HAVE_TOTAL_MEM)
-		if ((long)options[opt_idx].def_val[VI_DEFAULT] > n
+		if ((long)options[opt_idx].def_val[VI_DEFAULT] > (long)n
 			|| (long)options[opt_idx].def_val[VI_DEFAULT] == 0L)
 #endif
 		    options[opt_idx].def_val[VI_DEFAULT] = (char_u *)n;
@@ -3843,6 +3883,8 @@
 # ifndef OS2	/* Always use bourne shell style redirection if we reach this */
 	    if (       fnamecmp(p, "sh") == 0
 		    || fnamecmp(p, "ksh") == 0
+		    || fnamecmp(p, "mksh") == 0
+		    || fnamecmp(p, "pdksh") == 0
 		    || fnamecmp(p, "zsh") == 0
 		    || fnamecmp(p, "zsh-beta") == 0
 		    || fnamecmp(p, "bash") == 0
@@ -3850,6 +3892,8 @@
 		    || fnamecmp(p, "cmd") == 0
 		    || fnamecmp(p, "sh.exe") == 0
 		    || fnamecmp(p, "ksh.exe") == 0
+		    || fnamecmp(p, "mksh.exe") == 0
+		    || fnamecmp(p, "pdksh.exe") == 0
 		    || fnamecmp(p, "zsh.exe") == 0
 		    || fnamecmp(p, "zsh-beta.exe") == 0
 		    || fnamecmp(p, "bash.exe") == 0
@@ -3881,7 +3925,8 @@
 
 #if defined(MSDOS) || defined(WIN3264) || defined(OS2)
     /*
-     * Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
+     * Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
+     * 'shell' option.
      * This is done after other initializations, where 'shell' might have been
      * set, but only if they have not been set before.  Default for p_shcf is
      * "/c", for p_shq is "".  For "sh" like  shells it is changed here to
@@ -3918,6 +3963,37 @@
 #  endif
 # endif
     }
+    else if (strstr((char *)gettail(p_sh), "cmd.exe") != NULL)
+    {
+	int	idx3;
+
+	/*
+	 * cmd.exe on Windows will strip the first and last double quote given
+	 * on the command line, e.g. most of the time things like:
+	 *   cmd /c "my path/to/echo" "my args to echo"
+	 * become:
+	 *   my path/to/echo" "my args to echo
+	 * when executed.
+	 *
+	 * To avoid this, set shellxquote to surround the command in
+	 * parenthesis.  This appears to make most commands work, without
+	 * breaking commands that worked previously, such as
+	 * '"path with spaces/cmd" "a&b"'.
+	 */
+	idx3 = findoption((char_u *)"sxq");
+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+	{
+	    p_sxq = (char_u *)"(";
+	    options[idx3].def_val[VI_DEFAULT] = p_sxq;
+	}
+
+	idx3 = findoption((char_u *)"shcf");
+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
+	{
+	    p_shcf = (char_u *)"/c";
+	    options[idx3].def_val[VI_DEFAULT] = p_shcf;
+	}
+    }
 #endif
 
 #ifdef FEAT_TITLE
@@ -4349,7 +4425,7 @@
 		    p = find_termcode(key_name);
 		    if (p == NULL)
 		    {
-			errmsg = (char_u *)N_("E518: Unknown option");
+			errmsg = (char_u *)N_("E846: Key code not set");
 			goto skip;
 		    }
 		    else
@@ -4565,6 +4641,31 @@
 				arg = errbuf;
 			    }
 			    /*
+			     * Convert 'backspace' number to string, for
+			     * adding, prepending and removing string.
+			     */
+			    else if (varp == (char_u *)&p_bs
+					 && VIM_ISDIGIT(**(char_u **)varp))
+			    {
+				i = getdigits((char_u **)varp);
+				switch (i)
+				{
+				    case 0:
+					*(char_u **)varp = empty_option;
+					break;
+				    case 1:
+					*(char_u **)varp = vim_strsave(
+						      (char_u *)"indent,eol");
+					break;
+				    case 2:
+					*(char_u **)varp = vim_strsave(
+						(char_u *)"indent,eol,start");
+					break;
+				}
+				vim_free(oldval);
+				oldval = *(char_u **)varp;
+			    }
+			    /*
 			     * Convert 'whichwrap' number to string, for
 			     * backwards compatibility with Vim 3.0.
 			     * Misuse errbuf[] for the resulting string.
@@ -4697,8 +4798,8 @@
 						|| s[i] == ','
 						|| s[i] == NUL))
 					break;
-				    /* Count backspaces.  Only a comma with an
-				     * even number of backspaces before it is
+				    /* Count backslashes.  Only a comma with an
+				     * even number of backslashes before it is
 				     * recognized as a separator */
 				    if (s > origval && s[-1] == '\\')
 					++bs;
@@ -5275,9 +5376,6 @@
 #ifdef FEAT_AUTOCMD
     check_string_option(&buf->b_p_ft);
 #endif
-#ifdef FEAT_OSFILETYPE
-    check_string_option(&buf->b_p_oft);
-#endif
 #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
     check_string_option(&buf->b_p_cinw);
 #endif
@@ -5520,8 +5618,10 @@
 
 /*
  * Set a string option to a new value, and handle the effects.
+ *
+ * Returns NULL on success or error message on error.
  */
-    static void
+    static char_u *
 set_string_option(opt_idx, value, opt_flags)
     int		opt_idx;
     char_u	*value;
@@ -5530,9 +5630,10 @@
     char_u	*s;
     char_u	**varp;
     char_u	*oldval;
+    char_u	*r = NULL;
 
     if (options[opt_idx].var == NULL)	/* don't set hidden option */
-	return;
+	return NULL;
 
     s = vim_strsave(value);
     if (s != NULL)
@@ -5544,10 +5645,11 @@
 		    : opt_flags);
 	oldval = *varp;
 	*varp = s;
-	if (did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
-							   opt_flags) == NULL)
+	if ((r = did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
+							   opt_flags)) == NULL)
 	    did_set_option(opt_idx, opt_flags, TRUE);
     }
+    return r;
 }
 
 /*
@@ -6082,16 +6184,46 @@
     /* 'matchpairs' */
     else if (gvarp == &p_mps)
     {
-	/* Check for "x:y,x:y" */
-	for (p = *varp; *p != NUL; p += 4)
+#ifdef FEAT_MBYTE
+	if (has_mbyte)
 	{
-	    if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
+	    for (p = *varp; *p != NUL; ++p)
 	    {
-		errmsg = e_invarg;
-		break;
+		int x2 = -1;
+		int x3 = -1;
+
+		if (*p != NUL)
+		    p += mb_ptr2len(p);
+		if (*p != NUL)
+		    x2 = *p++;
+		if (*p != NUL)
+		{
+		    x3 = mb_ptr2char(p);
+		    p += mb_ptr2len(p);
+		}
+		if (x2 != ':' || x3 == -1 || (*p != NUL && *p != ','))
+		{
+		    errmsg = e_invarg;
+		    break;
+		}
+		if (*p == NUL)
+		    break;
+	    }
+	}
+	else
+#endif
+	{
+	    /* Check for "x:y,x:y" */
+	    for (p = *varp; *p != NUL; p += 4)
+	    {
+		if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
+		{
+		    errmsg = e_invarg;
+		    break;
+		}
+		if (p[3] == NUL)
+		    break;
 	    }
-	    if (p[3] == NUL)
-		break;
 	}
     }
 
@@ -6635,7 +6767,7 @@
     {
 	for (s = *varp; *s;)
 	{
-	    while(*s == ',' || *s == ' ')
+	    while (*s == ',' || *s == ' ')
 		s++;
 	    if (!*s)
 		break;
@@ -6999,8 +7131,10 @@
     }
 #endif
 
-    if (curwin->w_curswant != MAXCOL)
-	curwin->w_set_curswant = TRUE;  /* in case 'showbreak' changed */
+    if (curwin->w_curswant != MAXCOL
+		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+	curwin->w_set_curswant = TRUE;
+
 #ifdef FEAT_GUI
     /* check redraw when it's not a GUI option or the GUI is active. */
     if (!redraw_gui_only || gui.in_use)
@@ -7010,7 +7144,7 @@
     return errmsg;
 }
 
-#ifdef FEAT_SYN_HL
+#if defined(FEAT_SYN_HL) || defined(PROTO)
 /*
  * Simple int comparison function for use with qsort()
  */
@@ -7037,6 +7171,9 @@
     int		i;
     int		j = 0;
 
+    if (wp->w_buffer == NULL)
+	return NULL;  /* buffer was closed */
+
     for (s = wp->w_p_cc; *s != NUL && count < 255;)
     {
 	if (*s == '-' || *s == '+')
@@ -7304,8 +7441,9 @@
     static char_u *
 check_clipboard_option()
 {
-    int		new_unnamed = FALSE;
-    int		new_autoselect = FALSE;
+    int		new_unnamed = 0;
+    int		new_autoselect_star = FALSE;
+    int		new_autoselect_plus = FALSE;
     int		new_autoselectml = FALSE;
     int		new_html = FALSE;
     regprog_T	*new_exclude_prog = NULL;
@@ -7316,17 +7454,29 @@
     {
 	if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL))
 	{
-	    new_unnamed = TRUE;
+	    new_unnamed |= CLIP_UNNAMED;
 	    p += 7;
 	}
+	else if (STRNCMP(p, "unnamedplus", 11) == 0
+					    && (p[11] == ',' || p[11] == NUL))
+	{
+	    new_unnamed |= CLIP_UNNAMED_PLUS;
+	    p += 11;
+	}
 	else if (STRNCMP(p, "autoselect", 10) == 0
-					&& (p[10] == ',' || p[10] == NUL))
+					    && (p[10] == ',' || p[10] == NUL))
 	{
-	    new_autoselect = TRUE;
+	    new_autoselect_star = TRUE;
 	    p += 10;
 	}
+	else if (STRNCMP(p, "autoselectplus", 14) == 0
+					    && (p[14] == ',' || p[14] == NUL))
+	{
+	    new_autoselect_plus = TRUE;
+	    p += 14;
+	}
 	else if (STRNCMP(p, "autoselectml", 12) == 0
-					&& (p[12] == ',' || p[12] == NUL))
+					    && (p[12] == ',' || p[12] == NUL))
 	{
 	    new_autoselectml = TRUE;
 	    p += 12;
@@ -7355,10 +7505,11 @@
     if (errmsg == NULL)
     {
 	clip_unnamed = new_unnamed;
-	clip_autoselect = new_autoselect;
+	clip_autoselect_star = new_autoselect_star;
+	clip_autoselect_plus = new_autoselect_plus;
 	clip_autoselectml = new_autoselectml;
 	clip_html = new_html;
-	vim_free(clip_exclude_prog);
+	vim_regfree(clip_exclude_prog);
 	clip_exclude_prog = new_exclude_prog;
 #ifdef FEAT_GUI_GTK
 	if (gui.in_use)
@@ -7369,7 +7520,7 @@
 #endif
     }
     else
-	vim_free(new_exclude_prog);
+	vim_regfree(new_exclude_prog);
 
     return errmsg;
 }
@@ -7396,16 +7547,16 @@
 	if (re != NULL)
 	{
 	    synblock->b_cap_prog = vim_regcomp(re, RE_MAGIC);
+	    vim_free(re);
 	    if (synblock->b_cap_prog == NULL)
 	    {
 		synblock->b_cap_prog = rp; /* restore the previous program */
 		return e_invarg;
 	    }
-	    vim_free(re);
 	}
     }
 
-    vim_free(rp);
+    vim_regfree(rp);
     return NULL;
 }
 #endif
@@ -7483,21 +7634,36 @@
 	compatible_set();
     }
 
-    /* 'list', 'number' */
-    else if ((int *)varp == &curwin->w_p_list
-	  || (int *)varp == &curwin->w_p_nu
-	  || (int *)varp == &curwin->w_p_rnu)
-    {
-	if (curwin->w_curswant != MAXCOL)
-	    curwin->w_set_curswant = TRUE;
-
-	/* If 'number' is set, reset 'relativenumber'. */
-	/* If 'relativenumber' is set, reset 'number'. */
-	if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
-	    curwin->w_p_rnu = FALSE;
-	if ((int *)varp == &curwin->w_p_rnu && curwin->w_p_rnu)
-	    curwin->w_p_nu = FALSE;
+#ifdef FEAT_PERSISTENT_UNDO
+    /* 'undofile' */
+    else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf)
+    {
+	/* Only take action when the option was set. When reset we do not
+	 * delete the undo file, the option may be set again without making
+	 * any changes in between. */
+	if (curbuf->b_p_udf || p_udf)
+	{
+	    char_u	hash[UNDO_HASH_SIZE];
+	    buf_T	*save_curbuf = curbuf;
+
+	    for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
+	    {
+		/* When 'undofile' is set globally: for every buffer, otherwise
+		 * only for the current buffer: Try to read in the undofile,
+		 * if one exists, the buffer wasn't changed and the buffer was
+		 * loaded */
+		if ((curbuf == save_curbuf
+				|| (opt_flags & OPT_GLOBAL) || opt_flags == 0)
+			&& !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL)
+		{
+		    u_compute_hash(hash);
+		    u_read_undo(NULL, hash, curbuf->b_fname);
+		}
+	    }
+	    curbuf = save_curbuf;
+	}
     }
+#endif
 
     else if ((int *)varp == &curbuf->b_p_ro)
     {
@@ -7735,8 +7901,6 @@
     {
 	if (curwin->w_p_wrap)
 	    curwin->w_leftcol = 0;
-	if (curwin->w_curswant != MAXCOL)
-	    curwin->w_set_curswant = TRUE;
     }
 
 #ifdef FEAT_WINDOWS
@@ -7763,9 +7927,9 @@
 #ifdef FEAT_BEVAL
     else if ((int *)varp == &p_beval)
     {
-	if (p_beval == TRUE)
+	if (p_beval && !old_value)
 	    gui_mch_enable_beval_area(balloonEval);
-	else
+	else if (!p_beval && old_value)
 	    gui_mch_disable_beval_area(balloonEval);
     }
 #endif
@@ -7798,6 +7962,10 @@
 	/* Only de-activate it here, it will be enabled when changing mode. */
 	if (p_imdisable)
 	    im_set_active(FALSE);
+	else if (State & INSERT)
+	    /* When the option is set from an autocommand, it may need to take
+	     * effect right away. */
+	    im_set_active(curbuf->b_p_iminsert == B_IMODE_IM);
     }
 #endif
 
@@ -7959,31 +8127,8 @@
 	    curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
 # endif
 	}
-	if (curwin->w_curswant != MAXCOL)
-	    curwin->w_set_curswant = TRUE;
-    }
-
-    else if ((int *)varp == &p_arshape)
-    {
-	if (curwin->w_curswant != MAXCOL)
-	    curwin->w_set_curswant = TRUE;
     }
-#endif
 
-#ifdef FEAT_LINEBREAK
-    if ((int *)varp == &curwin->w_p_lbr)
-    {
-	if (curwin->w_curswant != MAXCOL)
-	    curwin->w_set_curswant = TRUE;
-    }
-#endif
-
-#ifdef FEAT_RIGHTLEFT
-    if ((int *)varp == &curwin->w_p_rl)
-    {
-	if (curwin->w_curswant != MAXCOL)
-	    curwin->w_set_curswant = TRUE;
-    }
 #endif
 
     /*
@@ -7993,7 +8138,9 @@
     options[opt_idx].flags |= P_WAS_SET;
 
     comp_col();			    /* in case 'ruler' or 'showcmd' changed */
-
+    if (curwin->w_curswant != MAXCOL
+		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+	curwin->w_set_curswant = TRUE;
     check_redraw(options[opt_idx].flags);
 
     return NULL;
@@ -8036,7 +8183,7 @@
     need_mouse_correct = TRUE;
 #endif
 
-    if (curbuf->b_p_sw <= 0)
+    if (curbuf->b_p_sw < 0)
     {
 	errmsg = e_positive;
 	curbuf->b_p_sw = curbuf->b_p_ts;
@@ -8381,11 +8528,7 @@
 	}
 	Columns = MIN_COLUMNS;
     }
-    /* Limit the values to avoid an overflow in Rows * Columns. */
-    if (Columns > 10000)
-	Columns = 10000;
-    if (Rows > 1000)
-	Rows = 1000;
+    limit_screen_size();
 
 #ifdef DJGPP
     /* avoid a crash by checking for a too large value of 'columns' */
@@ -8420,11 +8563,6 @@
 	    p_window = Rows - 1;
     }
 
-    if (curbuf->b_p_sts < 0)
-    {
-	errmsg = e_positive;
-	curbuf->b_p_sts = 0;
-    }
     if (curbuf->b_p_ts <= 0)
     {
 	errmsg = e_positive;
@@ -8458,6 +8596,11 @@
 	errmsg = e_positive;
 	p_hi = 0;
     }
+    if (p_re < 0 || p_re > 2)
+    {
+	errmsg = e_invarg;
+	p_re = 0;
+    }
     if (p_report < 0)
     {
 	errmsg = e_positive;
@@ -8508,8 +8651,9 @@
     options[opt_idx].flags |= P_WAS_SET;
 
     comp_col();			    /* in case 'columns' or 'ls' changed */
-    if (curwin->w_curswant != MAXCOL)
-	curwin->w_set_curswant = TRUE;  /* in case 'tabstop' changed */
+    if (curwin->w_curswant != MAXCOL
+		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
+	curwin->w_set_curswant = TRUE;
     check_redraw(options[opt_idx].flags);
 
     return errmsg;
@@ -8523,8 +8667,8 @@
     long_u	flags;
 {
     /* Careful: P_RCLR and P_RALL are a combination of other P_ flags */
-    int		clear = (flags & P_RCLR) == P_RCLR;
-    int		all = ((flags & P_RALL) == P_RALL || clear);
+    int		doclear = (flags & P_RCLR) == P_RCLR;
+    int		all = ((flags & P_RALL) == P_RALL || doclear);
 
 #ifdef FEAT_WINDOWS
     if ((flags & P_RSTAT) || all)	/* mark all status lines dirty */
@@ -8535,7 +8679,7 @@
 	changed_window_setting();
     if (flags & P_RBUF)
 	redraw_curbuf_later(NOT_VALID);
-    if (clear)
+    if (doclear)
 	redraw_all_later(CLEAR);
     else if (all)
 	redraw_all_later(NOT_VALID);
@@ -8673,11 +8817,151 @@
 }
 #endif
 
+#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
+/*
+ * Returns the option attributes and its value. Unlike the above function it
+ * will return either global value or local value of the option depending on
+ * what was requested, but it will never return global value if it was
+ * requested to return local one and vice versa. Neither it will return
+ * buffer-local value if it was requested to return window-local one.
+ *
+ * Pretends that option is absent if it is not present in the requested scope
+ * (i.e. has no global, window-local or buffer-local value depending on
+ * opt_type). Uses
+ *
+ * Returned flags:
+ *       0 hidden or unknown option
+ *  see SOPT_* in vim.h for other flags
+ *
+ * Possible opt_type values: see SREQ_* in vim.h
+ */
+    int
+get_option_value_strict(name, numval, stringval, opt_type, from)
+    char_u	*name;
+    long	*numval;
+    char_u	**stringval;	    /* NULL when only obtaining attributes */
+    int		opt_type;
+    void	*from;
+{
+    int		opt_idx;
+    char_u	*varp = NULL;
+    struct vimoption *p;
+    int		r = 0;
+
+    opt_idx = findoption(name);
+    if (opt_idx < 0)
+	return 0;
+
+    p = &(options[opt_idx]);
+
+    /* Hidden option */
+    if (p->var == NULL)
+	return 0;
+
+    if (p->flags & P_BOOL)
+	r |= SOPT_BOOL;
+    else if (p->flags & P_NUM)
+	r |= SOPT_NUM;
+    else if (p->flags & P_STRING)
+	r |= SOPT_STRING;
+
+    if (p->indir == PV_NONE)
+    {
+	if (opt_type == SREQ_GLOBAL)
+	    r |= SOPT_GLOBAL;
+	else
+	    return 0; /* Did not request global-only option */
+    }
+    else
+    {
+	if (p->indir & PV_BOTH)
+	    r |= SOPT_GLOBAL;
+	else if (opt_type == SREQ_GLOBAL)
+	    return 0; /* Requested global option */
+
+	if (p->indir & PV_WIN)
+	{
+	    if (opt_type == SREQ_BUF)
+		return 0; /* Did not request window-local option */
+	    else
+		r |= SOPT_WIN;
+	}
+	else if (p->indir & PV_BUF)
+	{
+	    if (opt_type == SREQ_WIN)
+		return 0; /* Did not request buffer-local option */
+	    else
+		r |= SOPT_BUF;
+	}
+    }
+
+    if (stringval == NULL)
+	return r;
+
+    if (opt_type == SREQ_GLOBAL)
+	varp = p->var;
+    else
+    {
+	if (opt_type == SREQ_BUF)
+	{
+	    /* Special case: 'modified' is b_changed, but we also want to
+	     * consider it set when 'ff' or 'fenc' changed. */
+	    if (p->indir == PV_MOD)
+	    {
+		*numval = bufIsChanged((buf_T *) from);
+		varp = NULL;
+	    }
+#ifdef FEAT_CRYPT
+	    else if (p->indir == PV_KEY)
+	    {
+		/* never return the value of the crypt key */
+		*stringval = NULL;
+		varp = NULL;
+	    }
+#endif
+	    else
+	    {
+		aco_save_T	aco;
+		aucmd_prepbuf(&aco, (buf_T *) from);
+		varp = get_varp(p);
+		aucmd_restbuf(&aco);
+	    }
+	}
+	else if (opt_type == SREQ_WIN)
+	{
+	    win_T	*save_curwin;
+	    save_curwin = curwin;
+	    curwin = (win_T *) from;
+	    curbuf = curwin->w_buffer;
+	    varp = get_varp(p);
+	    curwin = save_curwin;
+	    curbuf = curwin->w_buffer;
+	}
+	if (varp == p->var)
+	    return (r | SOPT_UNSET);
+    }
+
+    if (varp != NULL)
+    {
+	if (p->flags & P_STRING)
+	    *stringval = vim_strsave(*(char_u **)(varp));
+	else if (p->flags & P_NUM)
+	    *numval = *(long *) varp;
+	else
+	    *numval = *(int *)varp;
+    }
+
+    return r;
+}
+#endif
+
 /*
  * Set the value of option "name".
  * Use "string" for string options, use "number" for other options.
+ *
+ * Returns NULL on success or error message on error.
  */
-    void
+    char_u *
 set_option_value(name, number, string, opt_flags)
     char_u	*name;
     long	number;
@@ -8699,11 +8983,11 @@
 	if (sandbox > 0 && (flags & P_SECURE))
 	{
 	    EMSG(_(e_sandbox));
-	    return;
+	    return NULL;
 	}
 #endif
 	if (flags & P_STRING)
-	    set_string_option(opt_idx, string, opt_flags);
+	    return set_string_option(opt_idx, string, opt_flags);
 	else
 	{
 	    varp = get_varp_scope(&(options[opt_idx]), opt_flags);
@@ -8724,19 +9008,20 @@
 			 * num option using a string. */
 			EMSG3(_("E521: Number required: &%s = '%s'"),
 								name, string);
-			return;     /* do nothing as we hit an error */
+			return NULL;     /* do nothing as we hit an error */
 
 		    }
 		}
 		if (flags & P_NUM)
-		    (void)set_num_option(opt_idx, varp, number,
+		    return set_num_option(opt_idx, varp, number,
 							  NULL, 0, opt_flags);
 		else
-		    (void)set_bool_option(opt_idx, varp, (int)number,
+		    return set_bool_option(opt_idx, varp, (int)number,
 								   opt_flags);
 	    }
 	}
     }
+    return NULL;
 }
 
 /*
@@ -9172,7 +9457,7 @@
     int		expand;
 {
     char_u	*s;
-    char_u	buf[MAXPATHL];
+    char_u	*buf;
 
     if (fprintf(fd, "%s %s=", cmd, name) < 0)
 	return FAIL;
@@ -9190,9 +9475,16 @@
 	}
 	else if (expand)
 	{
+	    buf = alloc(MAXPATHL);
+	    if (buf == NULL)
+		return FAIL;
 	    home_replace(NULL, *valuep, buf, MAXPATHL, FALSE);
 	    if (put_escstr(fd, buf, 2) == FAIL)
+	    {
+		vim_free(buf);
 		return FAIL;
+	    }
+	    vim_free(buf);
 	}
 	else if (put_escstr(fd, *valuep, 2) == FAIL)
 	    return FAIL;
@@ -9403,6 +9695,85 @@
 }
 
 /*
+ * Unset local option value, similar to ":set opt<".
+ */
+
+    void
+unset_global_local_option(name, from)
+    char_u	*name;
+    void	*from;
+{
+    struct vimoption *p;
+    int		opt_idx;
+    buf_T	*buf = (buf_T *)from;
+
+    opt_idx = findoption(name);
+    p = &(options[opt_idx]);
+
+    switch ((int)p->indir)
+    {
+	/* global option with local value: use local value if it's been set */
+	case PV_EP:
+	    clear_string_option(&buf->b_p_ep);
+	    break;
+	case PV_KP:
+	    clear_string_option(&buf->b_p_kp);
+	    break;
+	case PV_PATH:
+	    clear_string_option(&buf->b_p_path);
+	    break;
+	case PV_AR:
+	    buf->b_p_ar = -1;
+	    break;
+	case PV_TAGS:
+	    clear_string_option(&buf->b_p_tags);
+	    break;
+#ifdef FEAT_FIND_ID
+	case PV_DEF:
+	    clear_string_option(&buf->b_p_def);
+	    break;
+	case PV_INC:
+	    clear_string_option(&buf->b_p_inc);
+	    break;
+#endif
+#ifdef FEAT_INS_EXPAND
+	case PV_DICT:
+	    clear_string_option(&buf->b_p_dict);
+	    break;
+	case PV_TSR:
+	    clear_string_option(&buf->b_p_tsr);
+	    break;
+#endif
+#ifdef FEAT_QUICKFIX
+	case PV_EFM:
+	    clear_string_option(&buf->b_p_efm);
+	    break;
+	case PV_GP:
+	    clear_string_option(&buf->b_p_gp);
+	    break;
+	case PV_MP:
+	    clear_string_option(&buf->b_p_mp);
+	    break;
+#endif
+#if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+	case PV_BEXPR:
+	    clear_string_option(&buf->b_p_bexpr);
+	    break;
+#endif
+#if defined(FEAT_CRYPT)
+	case PV_CM:
+	    clear_string_option(&buf->b_p_cm);
+	    break;
+#endif
+#ifdef FEAT_STL_OPT
+	case PV_STL:
+	    clear_string_option(&((win_T *)from)->w_p_stl);
+	    break;
+#endif
+    }
+}
+
+/*
  * Get pointer to option variable, depending on local or global scope.
  */
     static char_u *
@@ -9645,9 +10016,6 @@
 	case PV_MA:	return (char_u *)&(curbuf->b_p_ma);
 	case PV_MOD:	return (char_u *)&(curbuf->b_changed);
 	case PV_NF:	return (char_u *)&(curbuf->b_p_nf);
-#ifdef FEAT_OSFILETYPE
-	case PV_OFT:	return (char_u *)&(curbuf->b_p_oft);
-#endif
 	case PV_PI:	return (char_u *)&(curbuf->b_p_pi);
 #ifdef FEAT_TEXTOBJ
 	case PV_QE:	return (char_u *)&(curbuf->b_p_qe);
@@ -9750,11 +10118,19 @@
     to->wo_stl = vim_strsave(from->wo_stl);
 #endif
     to->wo_wrap = from->wo_wrap;
+#ifdef FEAT_DIFF
+    to->wo_wrap_save = from->wo_wrap_save;
+#endif
 #ifdef FEAT_LINEBREAK
     to->wo_lbr = from->wo_lbr;
 #endif
 #ifdef FEAT_SCROLLBIND
     to->wo_scb = from->wo_scb;
+    to->wo_scb_save = from->wo_scb_save;
+#endif
+#ifdef FEAT_CURSORBIND
+    to->wo_crb = from->wo_crb;
+    to->wo_crb_save = from->wo_crb_save;
 #endif
 #ifdef FEAT_SPELL
     to->wo_spell = from->wo_spell;
@@ -9766,6 +10142,7 @@
 #endif
 #ifdef FEAT_DIFF
     to->wo_diff = from->wo_diff;
+    to->wo_diff_saved = from->wo_diff_saved;
 #endif
 #ifdef FEAT_CONCEAL
     to->wo_cocu = vim_strsave(from->wo_cocu);
@@ -9773,11 +10150,16 @@
 #endif
 #ifdef FEAT_FOLDING
     to->wo_fdc = from->wo_fdc;
+    to->wo_fdc_save = from->wo_fdc_save;
     to->wo_fen = from->wo_fen;
+    to->wo_fen_save = from->wo_fen_save;
     to->wo_fdi = vim_strsave(from->wo_fdi);
     to->wo_fml = from->wo_fml;
     to->wo_fdl = from->wo_fdl;
+    to->wo_fdl_save = from->wo_fdl_save;
     to->wo_fdm = vim_strsave(from->wo_fdm);
+    to->wo_fdm_save = from->wo_diff_saved
+			      ? vim_strsave(from->wo_fdm_save) : empty_option;
     to->wo_fdn = from->wo_fdn;
 # ifdef FEAT_EVAL
     to->wo_fde = vim_strsave(from->wo_fde);
@@ -9809,6 +10191,7 @@
 #ifdef FEAT_FOLDING
     check_string_option(&wop->wo_fdi);
     check_string_option(&wop->wo_fdm);
+    check_string_option(&wop->wo_fdm_save);
 # ifdef FEAT_EVAL
     check_string_option(&wop->wo_fde);
     check_string_option(&wop->wo_fdt);
@@ -9839,6 +10222,7 @@
 #ifdef FEAT_FOLDING
     clear_string_option(&wop->wo_fdi);
     clear_string_option(&wop->wo_fdm);
+    clear_string_option(&wop->wo_fdm_save);
 # ifdef FEAT_EVAL
     clear_string_option(&wop->wo_fde);
     clear_string_option(&wop->wo_fdt);
@@ -9995,9 +10379,6 @@
 	    /* Don't copy 'filetype', it must be detected */
 	    buf->b_p_ft = empty_option;
 #endif
-#ifdef FEAT_OSFILETYPE
-	    buf->b_p_oft = vim_strsave(p_oft);
-#endif
 	    buf->b_p_pi = p_pi;
 #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
 	    buf->b_p_cinw = vim_strsave(p_cinw);
@@ -10011,7 +10392,7 @@
 	    buf->b_p_smc = p_smc;
 #endif
 #ifdef FEAT_SPELL
-	    buf->b_s.b_p_spc = vim_strsave(p_spf);
+	    buf->b_s.b_p_spc = vim_strsave(p_spc);
 	    (void)compile_cap_prog(&buf->b_s);
 	    buf->b_s.b_p_spf = vim_strsave(p_spf);
 	    buf->b_s.b_p_spl = vim_strsave(p_spl);
@@ -10877,7 +11258,8 @@
 shortmess(x)
     int	    x;
 {
-    return (   vim_strchr(p_shm, x) != NULL
+    return p_shm != NULL &&
+	    (   vim_strchr(p_shm, x) != NULL
 	    || (vim_strchr(p_shm, 'a') != NULL
 		&& vim_strchr((char_u *)SHM_A, x) != NULL));
 }
@@ -11083,6 +11465,19 @@
 }
 
 /*
+ * Reset the flag indicating option "name" was set.
+ */
+    void
+reset_option_was_set(name)
+    char_u	*name;
+{
+    int idx = findoption(name);
+
+    if (idx >= 0)
+	options[idx].flags &= ~P_WAS_SET;
+}
+
+/*
  * compatible_set() - Called when 'compatible' has been set or unset.
  *
  * When 'compatible' set: Set all relevant options (those that have the P_VIM)
@@ -11284,16 +11679,19 @@
  * from when editing started (save_file_ff() called).
  * Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
  * changed and 'binary' is not set.
- * Don't consider a new, empty buffer to be changed.
+ * When "ignore_empty" is true don't consider a new, empty buffer to be
+ * changed.
  */
     int
-file_ff_differs(buf)
+file_ff_differs(buf, ignore_empty)
     buf_T	*buf;
+    int		ignore_empty;
 {
     /* In a buffer that was never loaded the options are not valid. */
     if (buf->b_flags & BF_NEVERLOADED)
 	return FALSE;
-    if ((buf->b_flags & BF_NEW)
+    if (ignore_empty
+	    && (buf->b_flags & BF_NEW)
 	    && buf->b_ml.ml_line_count == 1
 	    && *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL)
 	return FALSE;
@@ -11321,3 +11719,121 @@
 {
     return check_opt_strings(p, p_ff_values, FALSE);
 }
+
+/*
+ * Return the effective shiftwidth value for current buffer, using the
+ * 'tabstop' value when 'shiftwidth' is zero.
+ */
+    long
+get_sw_value()
+{
+    return curbuf->b_p_sw ? curbuf->b_p_sw : curbuf->b_p_ts;
+}
+
+/*
+ * Return the effective softtabstop value for the current buffer, using the
+ * 'tabstop' value when 'softtabstop' is negative.
+ */
+    long
+get_sts_value()
+{
+    return curbuf->b_p_sts < 0 ? get_sw_value() : curbuf->b_p_sts;
+}
+
+/*
+ * Check matchpairs option for "*initc".
+ * If there is a match set "*initc" to the matching character and "*findc" to
+ * the opposite character.  Set "*backwards" to the direction.
+ * When "switchit" is TRUE swap the direction.
+ */
+    void
+find_mps_values(initc, findc, backwards, switchit)
+    int	    *initc;
+    int	    *findc;
+    int	    *backwards;
+    int	    switchit;
+{
+    char_u	*ptr;
+
+    ptr = curbuf->b_p_mps;
+    while (*ptr != NUL)
+    {
+#ifdef FEAT_MBYTE
+	if (has_mbyte)
+	{
+	    char_u *prev;
+
+	    if (mb_ptr2char(ptr) == *initc)
+	    {
+		if (switchit)
+		{
+		    *findc = *initc;
+		    *initc = mb_ptr2char(ptr + mb_ptr2len(ptr) + 1);
+		    *backwards = TRUE;
+		}
+		else
+		{
+		    *findc = mb_ptr2char(ptr + mb_ptr2len(ptr) + 1);
+		    *backwards = FALSE;
+		}
+		return;
+	    }
+	    prev = ptr;
+	    ptr += mb_ptr2len(ptr) + 1;
+	    if (mb_ptr2char(ptr) == *initc)
+	    {
+		if (switchit)
+		{
+		    *findc = *initc;
+		    *initc = mb_ptr2char(prev);
+		    *backwards = FALSE;
+		}
+		else
+		{
+		    *findc = mb_ptr2char(prev);
+		    *backwards = TRUE;
+		}
+		return;
+	    }
+	    ptr += mb_ptr2len(ptr);
+	}
+	else
+#endif
+	{
+	    if (*ptr == *initc)
+	    {
+		if (switchit)
+		{
+		    *backwards = TRUE;
+		    *findc = *initc;
+		    *initc = ptr[2];
+		}
+		else
+		{
+		    *backwards = FALSE;
+		    *findc = ptr[2];
+		}
+		return;
+	    }
+	    ptr += 2;
+	    if (*ptr == *initc)
+	    {
+		if (switchit)
+		{
+		    *backwards = FALSE;
+		    *findc = *initc;
+		    *initc = ptr[-2];
+		}
+		else
+		{
+		    *backwards = TRUE;
+		    *findc =  ptr[-2];
+		}
+		return;
+	    }
+	    ++ptr;
+	}
+	if (*ptr == ',')
+	    ++ptr;
+    }
+}
diff -Naur vim73.orig/src/option.h vim73/src/option.h
--- vim73.orig/src/option.h	2010-07-25 14:15:02.000000000 +0000
+++ vim73/src/option.h	2013-08-04 19:09:10.497277533 +0000
@@ -33,7 +33,7 @@
 #     ifdef EBCDIC
 #define DFLT_EFM	"%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
 #     else
-#define DFLT_EFM	"%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+#define DFLT_EFM	"%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
 #     endif
 #    endif
 #   endif
@@ -104,10 +104,11 @@
 #define FO_ONE_LETTER	'1'
 #define FO_WHITE_PAR	'w'	/* trailing white space continues paragr. */
 #define FO_AUTO		'a'	/* automatic formatting */
+#define FO_REMOVE_COMS	'j'	/* remove comment leaders when joining lines */
 
 #define DFLT_FO_VI	"vt"
 #define DFLT_FO_VIM	"tcq"
-#define FO_ALL		"tcroq2vlb1mMBn,aw"	/* for do_set() */
+#define FO_ALL		"tcroq2vlb1mMBn,awj"	/* for do_set() */
 
 /* characters for the p_cpo option: */
 #define CPO_ALTREAD	'a'	/* ":read" sets alternate file name */
@@ -169,10 +170,12 @@
 #define CPO_SUBPERCENT	'/'	/* % in :s string uses previous one */
 #define CPO_BACKSL	'\\'	/* \ is not special in [] */
 #define CPO_CHDIR	'.'	/* don't chdir if buffer is modified */
+#define CPO_SCOLON	';'	/* using "," and ";" will skip over char if
+				 * cursor would not move */
 /* default values for Vim, Vi and POSIX */
 #define CPO_VIM		"aABceFs"
-#define CPO_VI		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>"
-#define CPO_ALL		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\."
+#define CPO_VI		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;"
+#define CPO_ALL		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\.;"
 
 /* characters for p_ww option: */
 #define WW_ALL		"bshl<>[],~"
@@ -226,6 +229,7 @@
 #define GO_MENUS	'm'		/* use menu bar */
 #define GO_NOSYSMENU	'M'		/* don't source system menu */
 #define GO_POINTER	'p'		/* pointer enter/leave callbacks */
+#define GO_ASELPLUS	'P'		/* autoselectPlus */
 #define GO_RIGHT	'r'		/* use right scrollbar */
 #define GO_VRIGHT	'R'		/* right scrollbar with vert split */
 #define GO_TEAROFF	't'		/* add tear-off menu items */
@@ -391,6 +395,7 @@
 EXTERN char_u	*p_cpo;		/* 'cpoptions' */
 #ifdef FEAT_CSCOPE
 EXTERN char_u	*p_csprg;	/* 'cscopeprg' */
+EXTERN int	p_csre;		/* 'cscoperelative' */
 # ifdef FEAT_QUICKFIX
 EXTERN char_u	*p_csqf;	/* 'cscopequickfix' */
 #  define	CSQF_CMDS   "sgdctefi"
@@ -448,6 +453,7 @@
 EXTERN char_u	*p_fencs;	/* 'fileencodings' */
 #endif
 EXTERN char_u	*p_ffs;		/* 'fileformats' */
+EXTERN long	p_fic;		/* 'fileignorecase' */
 #ifdef FEAT_FOLDING
 EXTERN char_u	*p_fcl;		/* 'foldclose' */
 EXTERN long	p_fdls;		/* 'foldlevelstart' */
@@ -552,6 +558,8 @@
 EXTERN int	p_ic;		/* 'ignorecase' */
 #if defined(FEAT_XIM) && defined(FEAT_GUI_GTK)
 EXTERN char_u	*p_imak;	/* 'imactivatekey' */
+EXTERN char_u	*p_imaf;	/* 'imactivatefunc' */
+EXTERN char_u	*p_imsf;	/* 'imstatusfunc' */
 #endif
 #ifdef USE_IM_CONTROL
 EXTERN int	p_imcmdline;	/* 'imcmdline' */
@@ -647,6 +655,7 @@
 EXTERN long	p_rdt;		/* 'redrawtime' */
 #endif
 EXTERN int	p_remap;	/* 'remap' */
+EXTERN long	p_re;		/* 'regexpengine' */
 EXTERN long	p_report;	/* 'report' */
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
 EXTERN long	p_pvh;		/* 'previewheight' */
@@ -709,6 +718,7 @@
 #endif
 EXTERN char_u	*p_shq;		/* 'shellquote' */
 EXTERN char_u	*p_sxq;		/* 'shellxquote' */
+EXTERN char_u	*p_sxe;		/* 'shellxescape' */
 EXTERN char_u	*p_srr;		/* 'shellredir' */
 #ifdef AMIGA
 EXTERN long	p_st;		/* 'shelltype' */
@@ -816,7 +826,7 @@
 EXTERN char_u	*p_ttym;	/* 'ttymouse' */
 EXTERN unsigned ttym_flags;
 # ifdef IN_OPTION_C
-static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", NULL};
+static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL};
 # endif
 # define TTYM_XTERM		0x01
 # define TTYM_XTERM2		0x02
@@ -824,6 +834,8 @@
 # define TTYM_NETTERM		0x08
 # define TTYM_JSBTERM		0x10
 # define TTYM_PTERM		0x20
+# define TTYM_URXVT		0x40
+# define TTYM_SGR		0x80
 #endif
 EXTERN char_u	*p_udir;	/* 'undodir' */
 EXTERN long	p_ul;		/* 'undolevels' */
@@ -854,7 +866,11 @@
 # define VE_ONEMORE	8
 #endif
 EXTERN long	p_verbose;	/* 'verbose' */
-EXTERN char_u	*p_vfile;	/* 'verbosefile' */
+#ifdef IN_OPTION_C
+char_u	*p_vfile = (char_u *)""; /* used before options are initialized */
+#else
+extern char_u	*p_vfile;	/* 'verbosefile' */
+#endif
 EXTERN int	p_warn;		/* 'warn' */
 #ifdef FEAT_CMDL_COMPL
 EXTERN char_u	*p_wop;		/* 'wildoptions' */
@@ -872,6 +888,7 @@
 EXTERN char_u	*p_ww;		/* 'whichwrap' */
 EXTERN long	p_wc;		/* 'wildchar' */
 EXTERN long	p_wcm;		/* 'wildcharm' */
+EXTERN long	p_wic;		/* 'wildignorecase' */
 EXTERN char_u	*p_wim;		/* 'wildmode' */
 #ifdef FEAT_WILDMENU
 EXTERN int	p_wmnu;		/* 'wildmenu' */
@@ -979,9 +996,6 @@
     , BV_MOD
     , BV_MPS
     , BV_NF
-#ifdef FEAT_OSFILETYPE
-    , BV_OFT
-#endif
 #ifdef FEAT_COMPL_FUNC
     , BV_OFU
 #endif
diff -Naur vim73.orig/src/os_amiga.c vim73/src/os_amiga.c
--- vim73.orig/src/os_amiga.c	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/os_amiga.c	2013-08-04 19:09:10.500610856 +0000
@@ -22,6 +22,9 @@
 #undef TRUE		/* will be redefined by exec/types.h */
 #undef FALSE
 
+/* cproto fails on missing include files, skip them */
+#ifndef PROTO
+
 #ifndef LATTICE
 # include <exec/types.h>
 # include <exec/exec.h>
@@ -55,6 +58,8 @@
 # include <libraries/arp_pragmas.h>
 #endif
 
+#endif /* PROTO */
+
 /*
  * At this point TRUE and FALSE are defined as 1L and 0L, but we want 1 and 0.
  */
@@ -113,7 +118,7 @@
 }
 
 /*
- * mch_inchar(): low level input funcion.
+ * mch_inchar(): low level input function.
  * Get a characters from the keyboard.
  * If time == 0 do not wait for characters.
  * If time == n wait a short time for characters.
@@ -191,16 +196,16 @@
 }
 
 /*
- * Return amount of memory still available.
+ * Return amount of memory still available in Kbyte.
  */
     long_u
 mch_avail_mem(special)
     int	    special;
 {
 #ifdef __amigaos4__
-    return (long_u)AvailMem(MEMF_ANY);
+    return (long_u)AvailMem(MEMF_ANY) >> 10;
 #else
-    return (long_u)AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY);
+    return (long_u)(AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY)) >> 10;
 #endif
 }
 
@@ -283,7 +288,9 @@
 #endif
 }
 
-#include <workbench/startup.h>
+#ifndef PROTO
+# include <workbench/startup.h>
+#endif
 
 /*
  * Check_win checks whether we have an interactive window.
@@ -1002,7 +1009,9 @@
  * Heavely modified by mool.
  */
 
-#include <devices/conunit.h>
+#ifndef PROTO
+# include <devices/conunit.h>
+#endif
 
 /*
  * try to get the real window size
@@ -1022,7 +1031,7 @@
 
     /* insure longword alignment */
 #ifdef __amigaos4__
-    if(!(id = AllocDosObject(DOS_INFODATA, 0)))
+    if (!(id = AllocDosObject(DOS_INFODATA, 0)))
 	goto out;
 #else
     id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
@@ -1129,9 +1138,11 @@
  * say 'oml lib:amiga.lib -r sendpacket.o'
  */
 
+#ifndef PROTO
 /* #include <proto/exec.h> */
 /* #include <proto/dos.h> */
-#include <exec/memory.h>
+# include <exec/memory.h>
+#endif
 
 /*
  * Function - dos_packet written by Phil Lindsay, Carolyn Scheppner, and Andy
diff -Naur vim73.orig/src/os_amiga.h vim73/src/os_amiga.h
--- vim73.orig/src/os_amiga.h	2010-05-23 12:15:40.000000000 +0000
+++ vim73/src/os_amiga.h	2013-08-04 19:09:10.500610856 +0000
@@ -56,6 +56,9 @@
 # define TEMPNAMELEN	12
 #endif
 
+/* cproto fails on missing include files */
+#ifndef PROTO
+
 #include <exec/types.h>
 #include <libraries/dos.h>
 #include <libraries/dosextens.h>
@@ -67,6 +70,8 @@
 # include <proto/intuition.h>
 #endif
 
+#endif /* PROTO */
+
 #define FNAME_ILLEGAL ";*?`#%" /* illegal characters in a file name */
 
 /*
@@ -85,6 +90,7 @@
 # include <unistd.h>
 #endif
 
+#ifndef PROTO
 /*
  * arpbase.h must be included before functions.h
  */
@@ -92,6 +98,8 @@
 # include <libraries/arpbase.h>
 #endif
 
+#endif /* PROTO */
+
 /*
  * This won't be needed if you have a version of Lattice 4.01 without broken
  * break signal handling.
@@ -150,7 +158,10 @@
 # define USR_VIMRC_FILE2 "home:.vimrc"
 #endif
 #ifndef USR_VIMRC_FILE3
-# define USR_VIMRC_FILE3 "$VIM/.vimrc"
+# define USR_VIMRC_FILE3 "home:vimfiles:vimrc"
+#endif
+#ifndef USR_VIMRC_FILE4
+# define USR_VIMRC_FILE4 "$VIM/.vimrc"
 #endif
 #ifndef EVIM_FILE
 # define EVIM_FILE	"$VIMRUNTIME/evim.vim"
@@ -163,7 +174,10 @@
 # define USR_GVIMRC_FILE2 "home:.gvimrc"
 #endif
 #ifndef USR_GVIMRC_FILE3
-# define USR_GVIMRC_FILE3 "$VIM/.gvimrc"
+# define USR_GVIMRC_FILE3 "home:vimfiles:gvimrc"
+#endif
+#ifndef USR_GVIMRC_FILE4
+# define USR_GVIMRC_FILE4 "$VIM/.gvimrc"
 #endif
 
 #ifdef FEAT_VIMINFO
diff -Naur vim73.orig/src/os_beos.c vim73/src/os_beos.c
--- vim73.orig/src/os_beos.c	2010-05-15 11:04:09.000000000 +0000
+++ vim73/src/os_beos.c	2013-08-04 19:09:10.503944180 +0000
@@ -13,7 +13,10 @@
 
 #include <float.h>
 #include <termios.h>
-#include <kernel/OS.h>
+#ifndef PROTO
+# include <kernel/OS.h>
+#endif
+
 #include "vim.h"
 
 #if USE_THREAD_FOR_INPUT_WITH_TIMEOUT
diff -Naur vim73.orig/src/os_beos.h vim73/src/os_beos.h
--- vim73.orig/src/os_beos.h	2010-05-15 11:04:11.000000000 +0000
+++ vim73/src/os_beos.h	2013-08-04 19:09:10.503944180 +0000
@@ -22,4 +22,6 @@
 
 /* select emulation */
 
-#include <net/socket.h>		/* for typedefs and #defines only */
+#ifndef PROTO
+# include <net/socket.h>		/* for typedefs and #defines only */
+#endif
diff -Naur vim73.orig/src/os_dos.h vim73/src/os_dos.h
--- vim73.orig/src/os_dos.h	2010-05-23 12:15:50.000000000 +0000
+++ vim73/src/os_dos.h	2013-08-04 19:09:10.507277503 +0000
@@ -20,7 +20,10 @@
 # define USR_VIMRC_FILE		"$HOME\\_vimrc"
 #endif
 #ifndef USR_VIMRC_FILE2
-# define USR_VIMRC_FILE2	"$VIM\\_vimrc"
+# define USR_VIMRC_FILE2	"$HOME\\vimfiles\\vimrc"
+#endif
+#ifndef USR_VIMRC_FILE3
+# define USR_VIMRC_FILE3	"$VIM\\_vimrc"
 #endif
 #ifndef EVIM_FILE
 # define EVIM_FILE		"$VIMRUNTIME\\evim.vim"
@@ -41,7 +44,10 @@
 #  define USR_GVIMRC_FILE	"$HOME\\_gvimrc"
 # endif
 # ifndef USR_GVIMRC_FILE2
-#  define USR_GVIMRC_FILE2	"$VIM\\_gvimrc"
+#  define USR_GVIMRC_FILE2	"$HOME\\vimfiles\\gvimrc"
+# endif
+# ifndef USR_GVIMRC_FILE3
+#  define USR_GVIMRC_FILE3	"$VIM\\_gvimrc"
 # endif
 # ifndef SYS_MENU_FILE
 #  define SYS_MENU_FILE		"$VIMRUNTIME\\menu.vim"
diff -Naur vim73.orig/src/os_mac.h vim73/src/os_mac.h
--- vim73.orig/src/os_mac.h	2010-07-14 18:28:05.000000000 +0000
+++ vim73/src/os_mac.h	2013-08-04 19:09:10.507277503 +0000
@@ -45,7 +45,7 @@
 /* Get stat.h or something similar. Comment: How come some OS get in in vim.h */
 # include <sys/stat.h>
 /* && defined(HAVE_CURSE) */
-/* The curses.h from MacOS X provides by default some BACKWARD compatibilty
+/* The curses.h from MacOS X provides by default some BACKWARD compatibility
  * definition which can cause us problem later on. So we undefine a few of them. */
 # include <curses.h>
 # undef reg
diff -Naur vim73.orig/src/os_mac_conv.c vim73/src/os_mac_conv.c
--- vim73.orig/src/os_mac_conv.c	2010-07-14 11:50:20.000000000 +0000
+++ vim73/src/os_mac_conv.c	2013-08-04 19:09:10.510610826 +0000
@@ -14,6 +14,8 @@
  */
 
 #define NO_X11_INCLUDES
+#define BalloonEval int   /* used in header files */
+
 #include "vim.h"
 #ifndef FEAT_GUI_MAC
 # include <CoreServices/CoreServices.h>
@@ -75,7 +77,7 @@
 	*unconvlenp = 0;
     cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
 
-    if(cfstr == NULL)
+    if (cfstr == NULL)
 	fprintf(stderr, "Encoding failed\n");
     /* When conversion failed, try excluding bytes from the end, helps when
      * there is an incomplete byte sequence.  Only do up to 6 bytes to avoid
diff -Naur vim73.orig/src/os_macosx.m vim73/src/os_macosx.m
--- vim73.orig/src/os_macosx.m	2010-08-15 10:56:50.000000000 +0000
+++ vim73/src/os_macosx.m	2013-08-04 19:09:10.517277473 +0000
@@ -15,6 +15,11 @@
     Error: MACOS 9 is no longer supported in Vim 7
 #endif
 
+/* Avoid a conflict for the definition of Boolean between Mac header files and
+ * X11 header files. */
+#define NO_X11_INCLUDES
+#define BalloonEval int   /* used in header files */
+
 #include "vim.h"
 #import <Cocoa/Cocoa.h>
 
@@ -23,9 +28,9 @@
  * Clipboard support for the console.
  * Don't include this when building the GUI version, the functions in
  * gui_mac.c are used then.  TODO: remove those instead?
- * But for MacVim we need these ones.
+ * But for MacVim we do need these ones.
  */
-#if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI) || defined(FEAT_GUI_MACVIM))
+#if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI_ENABLED) || defined(FEAT_GUI_MACVIM))
 
 /* Used to identify clipboard data copied from Vim. */
 
@@ -60,7 +65,7 @@
     NSString *bestType = [pb availableTypeFromArray:supportedTypes];
     if (!bestType) goto releasepool;
 
-    int motion_type = MCHAR;
+    int motion_type = MAUTO;
     NSString *string = nil;
 
     if ([bestType isEqual:VimPboardType])
@@ -84,9 +89,7 @@
 
     if (!string)
     {
-	/* Use NSStringPboardType.  The motion type is set to line-wise if the
-	 * string contains at least one EOL character, otherwise it is set to
-	 * character-wise (block-wise is never used).
+	/* Use NSStringPboardType.  The motion type is detected automatically.
 	 */
 	NSMutableString *mstring =
 		[[pb stringForType:NSStringPboardType] mutableCopy];
@@ -103,19 +106,13 @@
 					   options:0 range:range];
 	}
 
-	/* Scan for newline character to decide whether the string should be
-	 * pasted line-wise or character-wise.
-	 */
-	motion_type = MCHAR;
-	if (0 < n || NSNotFound != [mstring rangeOfString:@"\n"].location)
-	    motion_type = MLINE;
-
 	string = mstring;
     }
 
+    /* Default to MAUTO, uses MCHAR or MLINE depending on trailing NL. */
     if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
 	    || MAUTO == motion_type))
-	motion_type = MCHAR;
+	motion_type = MAUTO;
 
     char_u *str = (char_u*)[string UTF8String];
     int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
diff -Naur vim73.orig/src/os_msdos.c vim73/src/os_msdos.c
--- vim73.orig/src/os_msdos.c	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/os_msdos.c	2013-08-04 19:09:10.520610796 +0000
@@ -21,10 +21,12 @@
  * Some functions are also used for Win16 (MS-Windows 3.1).
  */
 
-#include "vimio.h"
 #include "vim.h"
 
-#include <conio.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <conio.h>
+#endif
 
 /*
  * MS-DOS only code, not used for Win16.
@@ -32,17 +34,19 @@
 #ifndef WIN16
 
 
-#include <bios.h>
-#ifdef DJGPP
-# include <dpmi.h>
-# include <signal.h>
-# include <sys/movedata.h>
-# include <crt0.h>
-# ifdef FEAT_CLIPBOARD
-#  include <sys/segments.h>
+#ifndef PROTO
+# include <bios.h>
+# ifdef DJGPP
+#  include <dpmi.h>
+#  include <signal.h>
+#  include <sys/movedata.h>
+#  include <crt0.h>
+#  ifdef FEAT_CLIPBOARD
+#   include <sys/segments.h>
+#  endif
+# else
+#  include <alloc.h>
 # endif
-#else
-# include <alloc.h>
 #endif
 
 #if defined(DJGPP) || defined(PROTO)
@@ -551,15 +555,15 @@
 #endif
 
 /*
- * Return amount of memory currently available.
+ * Return amount of memory currently available in Kbyte.
  */
     long_u
 mch_avail_mem(int special)
 {
 #ifdef DJGPP
-    return _go32_dpmi_remaining_virtual_memory();
+    return _go32_dpmi_remaining_virtual_memory() >> 10;
 #else
-    return coreleft();
+    return coreleft() >> 10;
 #endif
 }
 
@@ -698,7 +702,7 @@
  * If Vim should work over the serial line after a 'ctty com1' we must use
  * kbhit() and getch(). (jw)
  * Usually kbhit() is not used, because then CTRL-C and CTRL-P
- * will be catched by DOS (mool).
+ * will be caught by DOS (mool).
  *
  * return TRUE if a character is available, FALSE otherwise
  */
@@ -967,7 +971,7 @@
 }
 
 /*
- * mch_inchar(): low level input funcion.
+ * mch_inchar(): low level input function.
  * Get a characters from the keyboard.
  * If time == 0 do not wait for characters.
  * If time == n wait a short time for characters.
@@ -989,7 +993,7 @@
 
     /*
      * if we got a ctrl-C when we were busy, there will be a "^C" somewhere
-     * on the sceen, so we need to redisplay it.
+     * on the screen, so we need to redisplay it.
      */
     if (delayed_redraw)
     {
@@ -1741,7 +1745,7 @@
 mch_setmouse(int on)
 {
     mouse_active = on;
-    mouse_hidden = TRUE;	/* dont show it until moved */
+    mouse_hidden = TRUE;	/* don't show it until moved */
 }
 #endif
 
@@ -2131,8 +2135,10 @@
 
 #undef setlocale
 
-#include <go32.h>
-#include <inlines/ctype.ha>
+#ifndef PROTO
+# include <go32.h>
+# include <inlines/ctype.ha>
+#endif
 #include <locale.h>
 
 #define UPCASE (__dj_ISALNUM | __dj_ISALPHA | __dj_ISGRAPH | __dj_ISPRINT | __dj_ISUPPER)
@@ -2233,7 +2239,7 @@
     void
 clip_mch_request_selection(VimClipboard *cbd)
 {
-    int		type = MCHAR;
+    int		type = MAUTO;
     char_u	*pAllocated = NULL;
     char_u	*pClipText = NULL;
     int		clip_data_format = 0;
@@ -2281,14 +2287,12 @@
 	{
 	    clip_data_format = CF_TEXT;
 	    pClipText = pAllocated;
-	    type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
 	}
 
 	else if ((pAllocated = Win16GetClipboardData(CF_OEMTEXT)) != NULL)
 	{
 	    clip_data_format = CF_OEMTEXT;
 	    pClipText = pAllocated;
-	    type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
 	}
 
 	/* Did we get anything? */
@@ -2434,7 +2438,7 @@
     long    start_time;
     int	    tick_count;
 
-    /* int 02xf, AX = 0x1701 attempts to open the Windows clipboard.  Upon
+    /* int 0x2f, AX = 0x1701 attempts to open the Windows clipboard.  Upon
      * return from the interrupt, if AX is non-zero, the clipboard was
      * successfully opened.  If AX is zero, the clipboard could not be opened
      * because it is currently in use by another process.
@@ -2529,7 +2533,7 @@
 {
     __dpmi_regs  dpmi_regs;
 
-    /* int 02xf, AX = 0x1702 attempts to empty the Windows clipboard.  Upon
+    /* int 0x2f, AX = 0x1702 attempts to empty the Windows clipboard.  Upon
      * return from the interrupt, if AX == 0, the clipboard could not be
      * emptied (for some reason).
      */
@@ -2612,7 +2616,7 @@
     case CF_TEXT:		    /* Windows text */
     case CF_OEMTEXT:		    /* DOS (OEM) text */
 
-	/* int 02xf, AX = 0x1704 returns the number of bytes of data currently
+	/* int 0x2f, AX = 0x1704 returns the number of bytes of data currently
 	 * on the Windows clipboard, for the specified format.  Upon return
 	 * from the interrupt, DX:AX = the number of bytes, rounded up to the
 	 * nearest multiple of 32.
@@ -2816,7 +2820,7 @@
 	clip_data_size);		/* how many bytes to copy */
 
     /* Send data from the DOS transfer buffer to the Windows clipboard.
-     * int 02xf, AX = 0x1703 sends SI:CX bytes of data from the buffer
+     * int 0x2f, AX = 0x1703 sends SI:CX bytes of data from the buffer
      * at ES:BX, to the clipboard.
      */
     dpmi_regs.x.ax = 0x1703;			/* send clipboard data */
diff -Naur vim73.orig/src/os_msdos.h vim73/src/os_msdos.h
--- vim73.orig/src/os_msdos.h	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/os_msdos.h	2013-08-04 19:09:10.520610796 +0000
@@ -53,9 +53,12 @@
 
 #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
 
-#include <dos.h>
-#include <dir.h>
-#include <time.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <dos.h>
+# include <dir.h>
+# include <time.h>
+#endif
 
 #ifdef DJGPP
 # include <unistd.h>
diff -Naur vim73.orig/src/os_mswin.c vim73/src/os_mswin.c
--- vim73.orig/src/os_mswin.c	2010-07-27 19:39:05.000000000 +0000
+++ vim73/src/os_mswin.c	2013-08-04 19:09:10.523944119 +0000
@@ -22,19 +22,22 @@
 # endif
 #endif
 
-#include "vimio.h"
 #include "vim.h"
 
 #ifdef WIN16
 # define SHORT_FNAME		/* always 8.3 file name */
-# include <dos.h>
+/* cproto fails on missing include files */
+# ifndef PROTO
+#  include <dos.h>
+# endif
 # include <string.h>
 #endif
 #include <sys/types.h>
-#include <errno.h>
 #include <signal.h>
 #include <limits.h>
-#include <process.h>
+#ifndef PROTO
+# include <process.h>
+#endif
 
 #undef chdir
 #ifdef __GNUC__
@@ -45,20 +48,23 @@
 # include <direct.h>
 #endif
 
-#if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
-# include <shellapi.h>
-#endif
-
-#if defined(FEAT_PRINTER) && !defined(FEAT_POSTSCRIPT)
-# include <dlgs.h>
-# ifdef WIN3264
-#  include <winspool.h>
-# else
-#  include <print.h>
+#ifndef PROTO
+# if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
+#  include <shellapi.h>
 # endif
-# include <commdlg.h>
+
+# if defined(FEAT_PRINTER) && !defined(FEAT_POSTSCRIPT)
+#  include <dlgs.h>
+#  ifdef WIN3264
+#   include <winspool.h>
+#  else
+#   include <print.h>
+#  endif
+#  include <commdlg.h>
 #endif
 
+#endif /* PROTO */
+
 #ifdef __MINGW32__
 # ifndef FROM_LEFT_1ST_BUTTON_PRESSED
 #  define FROM_LEFT_1ST_BUTTON_PRESSED    0x0001
@@ -178,12 +184,14 @@
 }
 # endif
 
+# if !defined(__MINGW32__) || (__GNUC__ < 4)
 int _chdrive(int drive)
 {
     char temp [3] = "-:";
     temp[0] = drive + 'A' - 1;
     return !SetCurrentDirectory(temp);
 }
+# endif
 #else
 # ifdef __BORLANDC__
 /* being a more ANSI compliant compiler, BorlandC doesn't define _stricoll:
@@ -595,7 +603,7 @@
 				     gui.starting ? (char_u *)_("Message") :
 #endif
 					     (char_u *)_("Error"),
-				     p, (char_u *)_("&Ok"), 1, NULL);
+				     p, (char_u *)_("&Ok"), 1, NULL, FALSE);
 		break;
 	    }
 	ga_clear(&error_ga);
@@ -817,7 +825,11 @@
     BOOL fRunTimeLinkSuccess = FALSE;
 
     // Get a handle to the DLL module.
+# ifdef WIN16
     hinstLib = LoadLibrary(libname);
+# else
+    hinstLib = vimLoadLib(libname);
+# endif
 
     // If the handle is valid, try to get the function address.
     if (hinstLib != NULL)
@@ -895,736 +907,6 @@
 }
 #endif
 
-#if defined(FEAT_MBYTE) || defined(PROTO)
-/*
- * Convert an UTF-8 string to UTF-16.
- * "instr[inlen]" is the input.  "inlen" is in bytes.
- * When "outstr" is NULL only return the number of UTF-16 words produced.
- * Otherwise "outstr" must be a buffer of sufficient size.
- * Returns the number of UTF-16 words produced.
- */
-    int
-utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
-{
-    int		outlen = 0;
-    char_u	*p = instr;
-    int		todo = inlen;
-    int		l;
-    int		ch;
-
-    while (todo > 0)
-    {
-	/* Only convert if we have a complete sequence. */
-	l = utf_ptr2len_len(p, todo);
-	if (l > todo)
-	{
-	    /* Return length of incomplete sequence. */
-	    if (unconvlenp != NULL)
-		*unconvlenp = todo;
-	    break;
-	}
-
-	ch = utf_ptr2char(p);
-	if (ch >= 0x10000)
-	{
-	    /* non-BMP character, encoding with surrogate pairs */
-	    ++outlen;
-	    if (outstr != NULL)
-	    {
-		*outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
-		*outstr++ = 0xDC00 | (ch & 0x3FF);
-	    }
-	}
-	else if (outstr != NULL)
-	    *outstr++ = ch;
-	++outlen;
-	p += l;
-	todo -= l;
-    }
-
-    return outlen;
-}
-
-/*
- * Convert an UTF-16 string to UTF-8.
- * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
- * When "outstr" is NULL only return the required number of bytes.
- * Otherwise "outstr" must be a buffer of sufficient size.
- * Return the number of bytes produced.
- */
-    int
-utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
-{
-    int		outlen = 0;
-    int		todo = inlen;
-    short_u	*p = instr;
-    int		l;
-    int		ch, ch2;
-
-    while (todo > 0)
-    {
-	ch = *p;
-	if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
-	{
-	    /* surrogate pairs handling */
-	    ch2 = p[1];
-	    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
-	    {
-		ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
-		++p;
-		--todo;
-	    }
-	}
-	if (outstr != NULL)
-	{
-	    l = utf_char2bytes(ch, outstr);
-	    outstr += l;
-	}
-	else
-	    l = utf_char2len(ch);
-	++p;
-	outlen += l;
-	--todo;
-    }
-
-    return outlen;
-}
-
-/*
- * Call MultiByteToWideChar() and allocate memory for the result.
- * Returns the result in "*out[*outlen]" with an extra zero appended.
- * "outlen" is in words.
- */
-    void
-MultiByteToWideChar_alloc(UINT cp, DWORD flags,
-	LPCSTR in, int inlen,
-	LPWSTR *out, int *outlen)
-{
-    *outlen = MultiByteToWideChar(cp, flags, in, inlen, 0, 0);
-    /* Add one one word to avoid a zero-length alloc(). */
-    *out = (LPWSTR)alloc(sizeof(WCHAR) * (*outlen + 1));
-    if (*out != NULL)
-    {
-	MultiByteToWideChar(cp, flags, in, inlen, *out, *outlen);
-	(*out)[*outlen] = 0;
-    }
-}
-
-/*
- * Call WideCharToMultiByte() and allocate memory for the result.
- * Returns the result in "*out[*outlen]" with an extra NUL appended.
- */
-    void
-WideCharToMultiByte_alloc(UINT cp, DWORD flags,
-	LPCWSTR in, int inlen,
-	LPSTR *out, int *outlen,
-	LPCSTR def, LPBOOL useddef)
-{
-    *outlen = WideCharToMultiByte(cp, flags, in, inlen, NULL, 0, def, useddef);
-    /* Add one one byte to avoid a zero-length alloc(). */
-    *out = alloc((unsigned)*outlen + 1);
-    if (*out != NULL)
-    {
-	WideCharToMultiByte(cp, flags, in, inlen, *out, *outlen, def, useddef);
-	(*out)[*outlen] = 0;
-    }
-}
-
-#endif /* FEAT_MBYTE */
-
-#ifdef FEAT_CLIPBOARD
-/*
- * Clipboard stuff, for cutting and pasting text to other windows.
- */
-
-/* Type used for the clipboard type of Vim's data. */
-typedef struct
-{
-    int type;		/* MCHAR, MBLOCK or MLINE */
-    int txtlen;		/* length of CF_TEXT in bytes */
-    int ucslen;		/* length of CF_UNICODETEXT in words */
-    int rawlen;		/* length of clip_star.format_raw, including encoding,
-			   excluding terminating NUL */
-} VimClipType_t;
-
-/*
- * Make vim the owner of the current selection.  Return OK upon success.
- */
-/*ARGSUSED*/
-    int
-clip_mch_own_selection(VimClipboard *cbd)
-{
-    /*
-     * Never actually own the clipboard.  If another application sets the
-     * clipboard, we don't want to think that we still own it.
-     */
-    return FAIL;
-}
-
-/*
- * Make vim NOT the owner of the current selection.
- */
-/*ARGSUSED*/
-    void
-clip_mch_lose_selection(VimClipboard *cbd)
-{
-    /* Nothing needs to be done here */
-}
-
-/*
- * Copy "str[*size]" into allocated memory, changing CR-NL to NL.
- * Return the allocated result and the size in "*size".
- * Returns NULL when out of memory.
- */
-    static char_u *
-crnl_to_nl(const char_u *str, int *size)
-{
-    int		pos = 0;
-    int		str_len = *size;
-    char_u	*ret;
-    char_u	*retp;
-
-    /* Avoid allocating zero bytes, it generates an error message. */
-    ret = lalloc((long_u)(str_len == 0 ? 1 : str_len), TRUE);
-    if (ret != NULL)
-    {
-	retp = ret;
-	for (pos = 0; pos < str_len; ++pos)
-	{
-	    if (str[pos] == '\r' && str[pos + 1] == '\n')
-	    {
-		++pos;
-		--(*size);
-	    }
-	    *retp++ = str[pos];
-	}
-    }
-
-    return ret;
-}
-
-#if defined(FEAT_MBYTE) || defined(PROTO)
-/*
- * Note: the following two functions are only guaranteed to work when using
- * valid MS-Windows codepages or when iconv() is available.
- */
-
-/*
- * Convert "str" from 'encoding' to UTF-16.
- * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
- * Output is returned as an allocated string.  "*lenp" is set to the length of
- * the result.  A trailing NUL is always added.
- * Returns NULL when out of memory.
- */
-    short_u *
-enc_to_utf16(char_u *str, int *lenp)
-{
-    vimconv_T	conv;
-    WCHAR	*ret;
-    char_u	*allocbuf = NULL;
-    int		len_loc;
-    int		length;
-
-    if (lenp == NULL)
-    {
-	len_loc = (int)STRLEN(str) + 1;
-	lenp = &len_loc;
-    }
-
-    if (enc_codepage > 0)
-    {
-	/* We can do any CP### -> UTF-16 in one pass, and we can do it
-	 * without iconv() (convert_* may need iconv). */
-	MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
-    }
-    else
-    {
-	/* Use "latin1" by default, we might be called before we have p_enc
-	 * set up.  Convert to utf-8 first, works better with iconv().  Does
-	 * nothing if 'encoding' is "utf-8". */
-	conv.vc_type = CONV_NONE;
-	if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
-						   (char_u *)"utf-8") == FAIL)
-	    return NULL;
-	if (conv.vc_type != CONV_NONE)
-	{
-	    str = allocbuf = string_convert(&conv, str, lenp);
-	    if (str == NULL)
-		return NULL;
-	}
-	convert_setup(&conv, NULL, NULL);
-
-	length = utf8_to_utf16(str, *lenp, NULL, NULL);
-	ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
-	if (ret != NULL)
-	{
-	    utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
-	    ret[length] = 0;
-	}
-
-	vim_free(allocbuf);
-    }
-
-    *lenp = length;
-    return (short_u *)ret;
-}
-
-/*
- * Convert an UTF-16 string to 'encoding'.
- * Input in "str" with length (counted in wide characters) "*lenp".  When
- * "lenp" is NULL, use wcslen().
- * Output is returned as an allocated string.  If "*lenp" is not NULL it is
- * set to the length of the result.
- * Returns NULL when out of memory.
- */
-    char_u *
-utf16_to_enc(short_u *str, int *lenp)
-{
-    vimconv_T	conv;
-    char_u	*utf8_str = NULL, *enc_str = NULL;
-    int		len_loc;
-
-    if (lenp == NULL)
-    {
-	len_loc = (int)wcslen(str) + 1;
-	lenp = &len_loc;
-    }
-
-    if (enc_codepage > 0)
-    {
-	/* We can do any UTF-16 -> CP### in one pass. */
-	int length;
-
-	WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
-					    (LPSTR *)&enc_str, &length, 0, 0);
-	*lenp = length;
-	return enc_str;
-    }
-
-    /* Avoid allocating zero bytes, it generates an error message. */
-    utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
-    if (utf8_str != NULL)
-    {
-	*lenp = utf16_to_utf8(str, *lenp, utf8_str);
-
-	/* We might be called before we have p_enc set up. */
-	conv.vc_type = CONV_NONE;
-	convert_setup(&conv, (char_u *)"utf-8",
-					    p_enc? p_enc: (char_u *)"latin1");
-	if (conv.vc_type == CONV_NONE)
-	{
-	    /* p_enc is utf-8, so we're done. */
-	    enc_str = utf8_str;
-	}
-	else
-	{
-	    enc_str = string_convert(&conv, utf8_str, lenp);
-	    vim_free(utf8_str);
-	}
-
-	convert_setup(&conv, NULL, NULL);
-    }
-
-    return enc_str;
-}
-#endif /* FEAT_MBYTE */
-
-/*
- * Wait for another process to Close the Clipboard.
- * Returns TRUE for success.
- */
-    static int
-vim_open_clipboard(void)
-{
-    int delay = 10;
-
-    while (!OpenClipboard(NULL))
-    {
-	if (delay > 500)
-	    return FALSE;  /* waited too long, give up */
-	Sleep(delay);
-	delay *= 2;	/* wait for 10, 20, 40, 80, etc. msec */
-    }
-    return TRUE;
-}
-
-/*
- * Get the current selection and put it in the clipboard register.
- *
- * NOTE: Must use GlobalLock/Unlock here to ensure Win32s compatibility.
- * On NT/W95 the clipboard data is a fixed global memory object and
- * so its handle = its pointer.
- * On Win32s, however, co-operation with the Win16 system means that
- * the clipboard data is moveable and its handle is not a pointer at all,
- * so we can't just cast the return value of GetClipboardData to (char_u*).
- * <VN>
- */
-    void
-clip_mch_request_selection(VimClipboard *cbd)
-{
-    VimClipType_t	metadata = { -1, -1, -1, -1 };
-    HGLOBAL		hMem = NULL;
-    char_u		*str = NULL;
-#if defined(FEAT_MBYTE) && defined(WIN3264)
-    char_u		*to_free = NULL;
-#endif
-#ifdef FEAT_MBYTE
-    HGLOBAL		rawh = NULL;
-#endif
-    int			str_size = 0;
-    int			maxlen;
-    size_t		n;
-
-    /*
-     * Don't pass GetActiveWindow() as an argument to OpenClipboard() because
-     * then we can't paste back into the same window for some reason - webb.
-     */
-    if (!vim_open_clipboard())
-	return;
-
-    /* Check for vim's own clipboard format first.  This only gets the type of
-     * the data, still need to use CF_UNICODETEXT or CF_TEXT for the text. */
-    if (IsClipboardFormatAvailable(cbd->format))
-    {
-	VimClipType_t	*meta_p;
-	HGLOBAL		meta_h;
-
-	/* We have metadata on the clipboard; try to get it. */
-	if ((meta_h = GetClipboardData(cbd->format)) != NULL
-		&& (meta_p = (VimClipType_t *)GlobalLock(meta_h)) != NULL)
-	{
-	    /* The size of "VimClipType_t" changed, "rawlen" was added later.
-	     * Only copy what is available for backwards compatibility. */
-	    n = sizeof(VimClipType_t);
-	    if (GlobalSize(meta_h) < n)
-		n = GlobalSize(meta_h);
-	    memcpy(&metadata, meta_p, n);
-	    GlobalUnlock(meta_h);
-	}
-    }
-
-#ifdef FEAT_MBYTE
-    /* Check for Vim's raw clipboard format first.  This is used without
-     * conversion, but only if 'encoding' matches. */
-    if (IsClipboardFormatAvailable(cbd->format_raw)
-				      && metadata.rawlen > (int)STRLEN(p_enc))
-    {
-	/* We have raw data on the clipboard; try to get it. */
-	if ((rawh = GetClipboardData(cbd->format_raw)) != NULL)
-	{
-	    char_u	*rawp;
-
-	    rawp = (char_u *)GlobalLock(rawh);
-	    if (rawp != NULL && STRCMP(p_enc, rawp) == 0)
-	    {
-		n = STRLEN(p_enc) + 1;
-		str = rawp + n;
-		str_size = (int)(metadata.rawlen - n);
-	    }
-	    else
-	    {
-		GlobalUnlock(rawh);
-		rawh = NULL;
-	    }
-	}
-    }
-    if (str == NULL)
-    {
-#endif
-
-#if defined(FEAT_MBYTE) && defined(WIN3264)
-    /* Try to get the clipboard in Unicode if it's not an empty string. */
-    if (IsClipboardFormatAvailable(CF_UNICODETEXT) && metadata.ucslen != 0)
-    {
-	HGLOBAL hMemW;
-
-	if ((hMemW = GetClipboardData(CF_UNICODETEXT)) != NULL)
-	{
-	    WCHAR *hMemWstr = (WCHAR *)GlobalLock(hMemW);
-
-	    /* Use the length of our metadata if possible, but limit it to the
-	     * GlobalSize() for safety. */
-	    maxlen = (int)(GlobalSize(hMemW) / sizeof(WCHAR));
-	    if (metadata.ucslen >= 0)
-	    {
-		if (metadata.ucslen > maxlen)
-		    str_size = maxlen;
-		else
-		    str_size = metadata.ucslen;
-	    }
-	    else
-	    {
-		for (str_size = 0; str_size < maxlen; ++str_size)
-		    if (hMemWstr[str_size] == NUL)
-			break;
-	    }
-	    to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
-	    GlobalUnlock(hMemW);
-	}
-    }
-    else
-#endif
-    /* Get the clipboard in the Active codepage. */
-    if (IsClipboardFormatAvailable(CF_TEXT))
-    {
-	if ((hMem = GetClipboardData(CF_TEXT)) != NULL)
-	{
-	    str = (char_u *)GlobalLock(hMem);
-
-	    /* The length is either what our metadata says or the strlen().
-	     * But limit it to the GlobalSize() for safety. */
-	    maxlen = (int)GlobalSize(hMem);
-	    if (metadata.txtlen >= 0)
-	    {
-		if (metadata.txtlen > maxlen)
-		    str_size = maxlen;
-		else
-		    str_size = metadata.txtlen;
-	    }
-	    else
-	    {
-		for (str_size = 0; str_size < maxlen; ++str_size)
-		    if (str[str_size] == NUL)
-			break;
-	    }
-
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-	    /* The text is in the active codepage.  Convert to 'encoding',
-	     * going through UTF-16. */
-	    acp_to_enc(str, str_size, &to_free, &maxlen);
-	    if (to_free != NULL)
-	    {
-		str_size = maxlen;
-		str = to_free;
-	    }
-# endif
-	}
-    }
-#ifdef FEAT_MBYTE
-    }
-#endif
-
-    if (str != NULL && *str != NUL)
-    {
-	char_u *temp_clipboard;
-
-	/* If the type is not known guess it. */
-	if (metadata.type == -1)
-	    metadata.type = (vim_strchr(str, '\n') == NULL) ? MCHAR : MLINE;
-
-	/* Translate <CR><NL> into <NL>. */
-	temp_clipboard = crnl_to_nl(str, &str_size);
-	if (temp_clipboard != NULL)
-	{
-	    clip_yank_selection(metadata.type, temp_clipboard, str_size, cbd);
-	    vim_free(temp_clipboard);
-	}
-    }
-
-    /* unlock the global object */
-    if (hMem != NULL)
-	GlobalUnlock(hMem);
-#ifdef FEAT_MBYTE
-    if (rawh != NULL)
-	GlobalUnlock(rawh);
-#endif
-    CloseClipboard();
-#if defined(FEAT_MBYTE) && defined(WIN3264)
-    vim_free(to_free);
-#endif
-}
-
-#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
-/*
- * Convert from the active codepage to 'encoding'.
- * Input is "str[str_size]".
- * The result is in allocated memory: "out[outlen]".  With terminating NUL.
- */
-    void
-acp_to_enc(str, str_size, out, outlen)
-    char_u	*str;
-    int		str_size;
-    char_u	**out;
-    int		*outlen;
-
-{
-    LPWSTR	widestr;
-
-    MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
-    if (widestr != NULL)
-    {
-	++*outlen;	/* Include the 0 after the string */
-	*out = utf16_to_enc((short_u *)widestr, outlen);
-	vim_free(widestr);
-    }
-}
-#endif
-
-/*
- * Send the current selection to the clipboard.
- */
-    void
-clip_mch_set_selection(VimClipboard *cbd)
-{
-    char_u		*str = NULL;
-    VimClipType_t	metadata;
-    long_u		txtlen;
-    HGLOBAL		hMemRaw = NULL;
-    HGLOBAL		hMem = NULL;
-    HGLOBAL		hMemVim = NULL;
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-    HGLOBAL		hMemW = NULL;
-# endif
-
-    /* If the '*' register isn't already filled in, fill it in now */
-    cbd->owned = TRUE;
-    clip_get_selection(cbd);
-    cbd->owned = FALSE;
-
-    /* Get the text to be put on the clipboard, with CR-LF. */
-    metadata.type = clip_convert_selection(&str, &txtlen, cbd);
-    if (metadata.type < 0)
-	return;
-    metadata.txtlen = (int)txtlen;
-    metadata.ucslen = 0;
-    metadata.rawlen = 0;
-
-#ifdef FEAT_MBYTE
-    /* Always set the raw bytes: 'encoding', NUL and the text.  This is used
-     * when copy/paste from/to Vim with the same 'encoding', so that illegal
-     * bytes can also be copied and no conversion is needed. */
-    {
-	LPSTR lpszMemRaw;
-
-	metadata.rawlen = (int)(txtlen + STRLEN(p_enc) + 1);
-	hMemRaw = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
-							 metadata.rawlen + 1);
-	lpszMemRaw = (LPSTR)GlobalLock(hMemRaw);
-	if (lpszMemRaw != NULL)
-	{
-	    STRCPY(lpszMemRaw, p_enc);
-	    memcpy(lpszMemRaw + STRLEN(p_enc) + 1, str, txtlen + 1);
-	    GlobalUnlock(hMemRaw);
-	}
-	else
-	    metadata.rawlen = 0;
-    }
-#endif
-
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-    {
-	WCHAR		*out;
-	int		len = metadata.txtlen;
-
-	/* Convert the text to UTF-16. This is put on the clipboard as
-	 * CF_UNICODETEXT. */
-	out = (WCHAR *)enc_to_utf16(str, &len);
-	if (out != NULL)
-	{
-	    WCHAR *lpszMemW;
-
-	    /* Convert the text for CF_TEXT to Active codepage. Otherwise it's
-	     * p_enc, which has no relation to the Active codepage. */
-	    metadata.txtlen = WideCharToMultiByte(GetACP(), 0, out, len,
-							       NULL, 0, 0, 0);
-	    vim_free(str);
-	    str = (char_u *)alloc((unsigned)(metadata.txtlen == 0 ? 1
-							  : metadata.txtlen));
-	    if (str == NULL)
-	    {
-		vim_free(out);
-		return;		/* out of memory */
-	    }
-	    WideCharToMultiByte(GetACP(), 0, out, len,
-						  str, metadata.txtlen, 0, 0);
-
-	    /* Allocate memory for the UTF-16 text, add one NUL word to
-	     * terminate the string. */
-	    hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
-						   (len + 1) * sizeof(WCHAR));
-	    lpszMemW = (WCHAR *)GlobalLock(hMemW);
-	    if (lpszMemW != NULL)
-	    {
-		memcpy(lpszMemW, out, len * sizeof(WCHAR));
-		lpszMemW[len] = NUL;
-		GlobalUnlock(hMemW);
-	    }
-	    vim_free(out);
-	    metadata.ucslen = len;
-	}
-    }
-# endif
-
-    /* Allocate memory for the text, add one NUL byte to terminate the string.
-     */
-    hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, metadata.txtlen + 1);
-    {
-	LPSTR lpszMem = (LPSTR)GlobalLock(hMem);
-
-	if (lpszMem)
-	{
-	    vim_strncpy(lpszMem, str, metadata.txtlen);
-	    GlobalUnlock(hMem);
-	}
-    }
-
-    /* Set up metadata: */
-    {
-	VimClipType_t *lpszMemVim = NULL;
-
-	hMemVim = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,
-						       sizeof(VimClipType_t));
-	lpszMemVim = (VimClipType_t *)GlobalLock(hMemVim);
-	memcpy(lpszMemVim, &metadata, sizeof(metadata));
-	GlobalUnlock(hMemVim);
-    }
-
-    /*
-     * Open the clipboard, clear it and put our text on it.
-     * Always set our Vim format.  Put Unicode and plain text on it.
-     *
-     * Don't pass GetActiveWindow() as an argument to OpenClipboard()
-     * because then we can't paste back into the same window for some
-     * reason - webb.
-     */
-    if (vim_open_clipboard())
-    {
-	if (EmptyClipboard())
-	{
-	    SetClipboardData(cbd->format, hMemVim);
-	    hMemVim = 0;
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-	    if (hMemW != NULL)
-	    {
-		if (SetClipboardData(CF_UNICODETEXT, hMemW) != NULL)
-		    hMemW = NULL;
-	    }
-# endif
-	    /* Always use CF_TEXT.  On Win98 Notepad won't obtain the
-	     * CF_UNICODETEXT text, only CF_TEXT. */
-	    SetClipboardData(CF_TEXT, hMem);
-	    hMem = 0;
-	}
-	CloseClipboard();
-    }
-
-    vim_free(str);
-    /* Free any allocations we didn't give to the clipboard: */
-    if (hMemRaw)
-	GlobalFree(hMemRaw);
-    if (hMem)
-	GlobalFree(hMem);
-# if defined(FEAT_MBYTE) && defined(WIN3264)
-    if (hMemW)
-	GlobalFree(hMemW);
-# endif
-    if (hMemVim)
-	GlobalFree(hMemVim);
-}
-
-#endif /* FEAT_CLIPBOARD */
-
-
 /*
  * Debugging helper: expose the MCH_WRITE_DUMP stuff to other modules
  */
@@ -1763,6 +1045,29 @@
 #define IDC_PRINTTEXT2		402
 #define IDC_PROGRESS		403
 
+#if !defined(FEAT_MBYTE) || defined(WIN16)
+# define vimSetDlgItemText(h, i, s) SetDlgItemText(h, i, s)
+#else
+    static BOOL
+vimSetDlgItemText(HWND hDlg, int nIDDlgItem, char_u *s)
+{
+    WCHAR   *wp = NULL;
+    BOOL    ret;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
+	wp = enc_to_utf16(s, NULL);
+    }
+    if (wp != NULL)
+    {
+	ret = SetDlgItemTextW(hDlg, nIDDlgItem, wp);
+	vim_free(wp);
+	return ret;
+    }
+    return SetDlgItemText(hDlg, nIDDlgItem, s);
+}
+#endif
+
 /*
  * Convert BGR to RGB for Windows GDI calls
  */
@@ -1779,7 +1084,7 @@
 }
 
 /* Attempt to make this work for old and new compilers */
-#if !defined(_MSC_VER) || (_MSC_VER < 1300) || !defined(INT_PTR)
+#if !defined(_WIN64) && (!defined(_MSC_VER) || _MSC_VER < 1300)
 # define PDP_RETVAL BOOL
 #else
 # define PDP_RETVAL INT_PTR
@@ -1814,18 +1119,18 @@
 		{
 		    SendDlgItemMessage(hDlg, i, WM_SETFONT, (WPARAM)hfont, 1);
 		    if (GetDlgItemText(hDlg,i, buff, sizeof(buff)))
-			SetDlgItemText(hDlg,i, _(buff));
+			vimSetDlgItemText(hDlg,i, _(buff));
 		}
 		SendDlgItemMessage(hDlg, IDCANCEL,
 						WM_SETFONT, (WPARAM)hfont, 1);
 		if (GetDlgItemText(hDlg,IDCANCEL, buff, sizeof(buff)))
-		    SetDlgItemText(hDlg,IDCANCEL, _(buff));
+		    vimSetDlgItemText(hDlg,IDCANCEL, _(buff));
 	    }
 #endif
 	    SetWindowText(hDlg, szAppName);
 	    if (prt_name != NULL)
 	    {
-		SetDlgItemText(hDlg, IDC_PRINTTEXT2, (LPSTR)prt_name);
+		vimSetDlgItemText(hDlg, IDC_PRINTTEXT2, (LPSTR)prt_name);
 		vim_free(prt_name);
 		prt_name = NULL;
 	    }
@@ -1854,12 +1159,12 @@
 {
     MSG msg;
 
-    while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+    while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     {
-	if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
+	if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg))
 	{
 	    TranslateMessage(&msg);
-	    DispatchMessage(&msg);
+	    pDispatchMessage(&msg);
 	}
     }
     return !*bUserAbort;
@@ -1867,7 +1172,7 @@
 
 #ifndef FEAT_GUI
 
-    static UINT CALLBACK
+    static UINT_PTR CALLBACK
 PrintHookProc(
 	HWND hDlg,	// handle to dialog box
 	UINT uiMsg,	// message identifier
@@ -2283,7 +1588,7 @@
     SetAbortProc(prt_dlg.hDC, AbortProc);
 #endif
     wsprintf(szBuffer, _("Printing '%s'"), gettail(psettings->jobname));
-    SetDlgItemText(hDlgPrint, IDC_PRINTTEXT1, (LPSTR)szBuffer);
+    vimSetDlgItemText(hDlgPrint, IDC_PRINTTEXT1, (LPSTR)szBuffer);
 
     vim_memset(&di, 0, sizeof(DOCINFO));
     di.cbSize = sizeof(DOCINFO);
@@ -2317,7 +1622,7 @@
 mch_print_begin_page(char_u *msg)
 {
     if (msg != NULL)
-	SetDlgItemText(hDlgPrint, IDC_PROGRESS, (LPSTR)msg);
+	vimSetDlgItemText(hDlgPrint, IDC_PROGRESS, (LPSTR)msg);
     return (StartPage(prt_dlg.hDC) > 0);
 }
 
@@ -2346,10 +1651,41 @@
     int
 mch_print_text_out(char_u *p, int len)
 {
-#ifdef FEAT_PROPORTIONAL_FONTS
+#if defined(FEAT_PROPORTIONAL_FONTS) || (defined(FEAT_MBYTE) && !defined(WIN16))
     SIZE	sz;
 #endif
+#if defined(FEAT_MBYTE) && !defined(WIN16)
+    WCHAR	*wp = NULL;
+    int		wlen = len;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
+	wp = enc_to_utf16(p, &wlen);
+    }
+    if (wp != NULL)
+    {
+	int ret = FALSE;
 
+	TextOutW(prt_dlg.hDC, prt_pos_x + prt_left_margin,
+					 prt_pos_y + prt_top_margin, wp, wlen);
+	GetTextExtentPoint32W(prt_dlg.hDC, wp, wlen, &sz);
+	vim_free(wp);
+	prt_pos_x += (sz.cx - prt_tm.tmOverhang);
+	/* This is wrong when printing spaces for a TAB. */
+	if (p[len] != NUL)
+	{
+	    wlen = MB_PTR2LEN(p + len);
+	    wp = enc_to_utf16(p + len, &wlen);
+	    if (wp != NULL)
+	    {
+		GetTextExtentPoint32W(prt_dlg.hDC, wp, 1, &sz);
+		ret = (prt_pos_x + prt_left_margin + sz.cx > prt_right_margin);
+		vim_free(wp);
+	    }
+	}
+	return ret;
+    }
+#endif
     TextOut(prt_dlg.hDC, prt_pos_x + prt_left_margin,
 					  prt_pos_y + prt_top_margin, p, len);
 #ifndef FEAT_PROPORTIONAL_FONTS
@@ -2408,7 +1744,9 @@
 
 
 #if defined(FEAT_SHORTCUT) || defined(PROTO)
-# include <shlobj.h>
+# ifndef PROTO
+#  include <shlobj.h>
+# endif
 
 /*
  * When "fname" is the name of a shortcut (*.lnk) resolve the file it points
@@ -2510,7 +1848,7 @@
  *
  * So we create a hidden window, and arrange to destroy it on exit.
  */
-HWND message_window = 0;	    /* window that's handling messsages */
+HWND message_window = 0;	    /* window that's handling messages */
 
 #define VIM_CLASSNAME      "VIM_MESSAGES"
 #define VIM_CLASSNAME_LEN  (sizeof(VIM_CLASSNAME) - 1)
@@ -2573,7 +1911,7 @@
 
 static int save_reply(HWND server, char_u *reply, int expr);
 
-/*s
+/*
  * The window procedure for the hidden message window.
  * It handles callback messages and notifications from servers.
  * In order to process these messages, it is necessary to run a
@@ -2613,7 +1951,6 @@
 	HWND		sender = (HWND)wParam;
 	COPYDATASTRUCT	reply;
 	char_u		*res;
-	char_u		winstr[30];
 	int		retval;
 	char_u		*str;
 	char_u		*tofree;
@@ -2664,8 +2001,8 @@
 	    reply.cbData = (DWORD)STRLEN(res) + 1;
 
 	    serverSendEnc(sender);
-	    retval = (int)SendMessage(sender, WM_COPYDATA, (WPARAM)message_window,
-							    (LPARAM)(&reply));
+	    retval = (int)SendMessage(sender, WM_COPYDATA,
+				    (WPARAM)message_window, (LPARAM)(&reply));
 	    vim_free(res);
 	    return retval;
 
@@ -2686,6 +2023,8 @@
 #ifdef FEAT_AUTOCMD
 		else if (data->dwData == COPYDATA_REPLY)
 		{
+		    char_u	winstr[30];
+
 		    sprintf((char *)winstr, PRINTF_HEX_LONG_U, (long_u)sender);
 		    apply_autocmds(EVENT_REMOTEREPLY, winstr, str,
 								TRUE, curbuf);
@@ -3130,10 +2469,10 @@
 {
     MSG msg;
 
-    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+    while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
     {
 	TranslateMessage(&msg);
-	DispatchMessage(&msg);
+	pDispatchMessage(&msg);
     }
 }
 
@@ -3319,7 +2658,7 @@
 
     ReleaseDC(hwnd, hdc);
 
-    /* If we couldn't find a useable font, return failure */
+    /* If we couldn't find a usable font, return failure */
     if (n == 1)
 	return FAIL;
 
diff -Naur vim73.orig/src/os_qnx.c vim73/src/os_qnx.c
--- vim73.orig/src/os_qnx.c	2010-05-24 09:42:44.000000000 +0000
+++ vim73/src/os_qnx.c	2013-08-04 19:09:10.527277443 +0000
@@ -24,10 +24,10 @@
 #if defined(FEAT_GUI_PHOTON)
     PhChannelParms_t parms;
 
-    memset( &parms, 0, sizeof( parms ) );
+    memset(&parms, 0, sizeof(parms));
     parms.flags = Ph_DYNAMIC_BUFFER;
 
-    is_photon_available = (PhAttach( NULL, &parms ) != NULL) ? TRUE : FALSE;
+    is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE;
 #endif
 }
 
@@ -39,8 +39,8 @@
 /* Turn on the clipboard for a console vim when photon is running */
 void qnx_clip_init()
 {
-    if( is_photon_available == TRUE && !gui.in_use)
-	clip_init( TRUE );
+    if (is_photon_available == TRUE && !gui.in_use)
+	clip_init(TRUE);
 }
 
 /*****************************************************************************/
@@ -48,32 +48,32 @@
 
 /* No support for owning the clipboard */
 int
-clip_mch_own_selection( VimClipboard *cbd )
+clip_mch_own_selection(VimClipboard *cbd)
 {
     return FALSE;
 }
 
 void
-clip_mch_lose_selection( VimClipboard *cbd )
+clip_mch_lose_selection(VimClipboard *cbd)
 {
 }
 
 void
-clip_mch_request_selection( VimClipboard *cbd )
+clip_mch_request_selection(VimClipboard *cbd)
 {
     int		    type = MLINE, clip_length = 0, is_type_set = FALSE;
     void	    *cbdata;
     PhClipHeader    *clip_header;
     char_u	    *clip_text = NULL;
 
-    cbdata = PhClipboardPasteStart( PhInputGroup( NULL ));
-    if( cbdata != NULL )
+    cbdata = PhClipboardPasteStart(PhInputGroup(NULL));
+    if (cbdata != NULL)
     {
 	/* Look for the vim specific clip first */
-	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_VIM );
-	if( clip_header != NULL && clip_header->data != NULL )
+	clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_VIM);
+	if (clip_header != NULL && clip_header->data != NULL)
 	{
-	    switch( *(char *) clip_header->data )
+	    switch(*(char *) clip_header->data)
 	    {
 		default: /* fallthrough to line type */
 		case 'L': type = MLINE; break;
@@ -86,27 +86,27 @@
 	}
 
 	/* Try for just normal text */
-	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_TEXT );
-	if( clip_header != NULL )
+	clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_TEXT);
+	if (clip_header != NULL)
 	{
 	    clip_text = clip_header->data;
 	    clip_length  = clip_header->length - 1;
 
-	    if( clip_text != NULL && is_type_set == FALSE )
-		type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
+	    if (clip_text != NULL && is_type_set == FALSE)
+		type = MAUTO;
 	}
 
-	if( (clip_text != NULL) && (clip_length > 0) )
+	if ((clip_text != NULL) && (clip_length > 0))
 	{
-	    clip_yank_selection( type, clip_text, clip_length, cbd );
+	    clip_yank_selection(type, clip_text, clip_length, cbd);
 	}
 
-	PhClipboardPasteFinish( cbdata );
+	PhClipboardPasteFinish(cbdata);
     }
 }
 
 void
-clip_mch_set_selection( VimClipboard *cbd )
+clip_mch_set_selection(VimClipboard *cbd)
 {
     int type;
     long_u  len;
@@ -114,31 +114,31 @@
     PhClipHeader clip_header[2];
 
     /* Prevent recursion from clip_get_selection() */
-    if( cbd->owned == TRUE )
+    if (cbd->owned == TRUE)
 	return;
 
     cbd->owned = TRUE;
-    clip_get_selection( cbd );
+    clip_get_selection(cbd);
     cbd->owned = FALSE;
 
-    type = clip_convert_selection( &str, &len, cbd );
-    if( type >= 0 )
+    type = clip_convert_selection(&str, &len, cbd);
+    if (type >= 0)
     {
-	text_clip = lalloc( len + 1, TRUE ); /* Normal text */
+	text_clip = lalloc(len + 1, TRUE); /* Normal text */
 
-	if( text_clip && vim_clip )
+	if (text_clip && vim_clip)
 	{
-	    memset( clip_header, 0, sizeof( clip_header ) );
+	    memset(clip_header, 0, sizeof(clip_header));
 
-	    STRNCPY( clip_header[0].type, CLIP_TYPE_VIM, 8 );
-	    clip_header[0].length = sizeof( vim_clip );
+	    STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8);
+	    clip_header[0].length = sizeof(vim_clip);
 	    clip_header[0].data   = vim_clip;
 
-	    STRNCPY( clip_header[1].type, CLIP_TYPE_TEXT, 8 );
+	    STRNCPY(clip_header[1].type, CLIP_TYPE_TEXT, 8);
 	    clip_header[1].length = len + 1;
 	    clip_header[1].data   = text_clip;
 
-	    switch( type )
+	    switch(type)
 	    {
 		default: /* fallthrough to MLINE */
 		case MLINE:	*vim_clip = 'L'; break;
@@ -148,14 +148,14 @@
 #endif
 	    }
 
-	    vim_strncpy( text_clip, str, len );
+	    vim_strncpy(text_clip, str, len);
 
 	    vim_clip[ 1 ] = NUL;
 
-	    PhClipboardCopy( PhInputGroup( NULL ), 2, clip_header);
+	    PhClipboardCopy(PhInputGroup(NULL), 2, clip_header);
 	}
-	vim_free( text_clip );
+	vim_free(text_clip);
     }
-    vim_free( str );
+    vim_free(str);
 }
 #endif
diff -Naur vim73.orig/src/os_riscos.c vim73/src/os_riscos.c
--- vim73.orig/src/os_riscos.c	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/os_riscos.c	1970-01-01 00:00:00.000000000 +0000
@@ -1,1292 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved	by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- * See README.txt for an overview of the Vim source code.
- */
-
-#include "vim.h"
-
-/*
- * os_riscos.c
- *
- * Thomas Leonard <tal197@ecs.soton.ac.uk>
- */
-
-const char *__dynamic_da_name = "Vim heap"; /* Enable and name our dynamic area */
-int ro_line_mode = TRUE;  /* For Ex mode we much echo chars to the screen ourselves */
-int windowed;		/* Flag - are we running inside a text window? */
-int WinLeft, WinTop;	/* We might be started inside a text window */
-int ScrollTop;		/* Make cursor movements relative to ScrollTop. */
-
-int old_escape_state = -1;
-int old_cursor_state = -1;
-
-#define rgb(r,g,b) ((b<<24) + (g<<16) + (r<<8))
-#define NORMAL_FG 0x00000000
-#define NORMAL_BG 0xffffffff
-
-/* Convert a DOS colour number to an RGB palette entry.
- * Mappings from X11 rgb/txt file.
- */
-    static int
-map_colour(dos)
-    int dos;		/* Standard DOS colour number. */
-{
-    switch (dos)
-    {
-	case 0: return 0;			/* Black */
-	case 1: return rgb(0,0,139);		/* DarkBlue */
-	case 2: return rgb(0,100,0);		/* DarkGreen */
-	case 3: return rgb(0,139,139);		/* DarkCyan */
-	case 4: return rgb(139,0,0);		/* DarkRed */
-	case 5: return rgb(139,0,139);		/* DarkMagenta */
-	case 6: return rgb(165,42,42);		/* Brown, DarkYellow */
-	case 7: return rgb(211,211,211);	/* LightGray, LightGrey, Gray, Grey */
-	case 8: return rgb(169,169,169);	/* DarkGray, DarkGrey */
-	case 9: return rgb(173,216,230);	/* Blue, LightBlue */
-	case 10: return rgb(144,238,144);	/* Green, LightGreen */
-	case 11: return rgb(224,255,255);	/* Cyan, LightCyan */
-	case 12: return rgb(255,0,0);		/* Red, LightRed */
-	case 13: return rgb(255,0,255);		/* Magenta, LightMagenta */
-	case 14: return rgb(255,255,0);		/* Yellow, LightYellow */
-	case 15: return rgb(255,255,255);	/* White */
-    }
-    return rgb(100,100,100);
-}
-
-    static void
-text_fg(fg)
-    int fg;		/* Foregound colour in the form &BBGGRR00 */
-{
-    xswi(ColourTrans_SetTextColour, fg, 0, 0, 0);
-}
-
-    static void
-text_bg(bg)
-    int		bg;	/* Backgound colour in the form &BBGGRR00 */
-{
-    xswi(ColourTrans_SetTextColour, bg, 0, 0, 1 << 7);
-}
-
-#define OUT_NORMAL 0
-#define OUT_NUMBER 1		/* Reading in a number */
-
-    void
-mch_write(s, len)
-    char_u  *s;
-    int	    len;
-{
-    static int mode = OUT_NORMAL;
-    static int x, y;			/* For reading numbers in. */
-
-    if (!term_console)
-    {
-	/* Maybe we are running Vim remotely - don't interpret chars */
-	while (len--)
-	{
-	    char_u c = *s++;
-	    swi(OS_WriteC, c);
-	    /* We might need to send a CR too. This shouldn't
-	     * hurt if we don't need it, should it?
-	     */
-	    if (c == 10)
-		swi(OS_WriteI + 13);
-	}
-	return;
-    }
-
-    while (len--)
-    {
-	char_u c = *s++;
-	switch (mode)
-	{
-	    case OUT_NUMBER:
-		if (c < '0' || c > '9')
-		{
-		    mode = OUT_NORMAL;
-		}
-		else
-		{
-		    x = (x * 10) + c - '0';
-		    continue;
-		}
-	    /* note: no break here! */
-
-	    case OUT_NORMAL:
-		switch (c)
-		{
-		    case 1:
-			/* Number (in decimal) follows. */
-			mode = OUT_NUMBER;
-			y = x;
-			x = 0;
-			break;
-		    case 2:
-			/* Position cursor. */
-			swi(OS_WriteI + 31);
-			swi(OS_WriteC, x);
-			swi(OS_WriteC, y - ScrollTop);
-			break;
-		    case 3:
-			/* Set scroll region. */
-			if (x == Rows -1 && y == 0 && !windowed)
-			{
-			    /* Whole screen - remove text window.
-			     * This is MUCH faster.
-			     */
-			    swi(OS_WriteI + 26);
-			}
-			else
-			{
-			    /* Create a text window. */
-			    swi(OS_WriteI + 28);
-			    swi(OS_WriteC, WinLeft);
-			    swi(OS_WriteC, WinTop + x);
-			    swi(OS_WriteC, WinLeft + Columns - 1);
-			    swi(OS_WriteC, WinTop + y);
-			}
-			ScrollTop = y;
-			break;
-		    case 4:
-			/* Normal mode. */
-			text_fg(NORMAL_FG);
-			text_bg(NORMAL_BG);
-			break;
-		    case 5:
-			/* Reverse mode. */
-			text_fg(NORMAL_BG);
-			text_bg(NORMAL_FG);
-			break;
-		    case 10:
-			swi(OS_NewLine);
-			break;
-		    case 14:
-			/* Cursor invisible. */
-			swi(OS_WriteN,
-			     "\027\001\000\000\000\000\000\000\000\000",
-			     10);
-			break;
-		    case 15:
-			/* Cursor visible. */
-			swi(OS_WriteN,
-			     "\027\001\002\000\000\000\000\000\000\000",
-			     10);
-			break;
-		    case 16:
-			/* Cursor very visible (flash) */
-			swi(OS_WriteN,
-			     "\027\001\003\000\000\000\000\000\000\000",
-			     10);
-		    case 17:
-			/* Set foreground colour. */
-			text_fg(map_colour(x));
-			break;
-		    case 18:
-			/* Set background colour. */
-			text_bg(map_colour(x));
-			break;
-		    case 19:
-			/* Scroll text down. */
-			swi(OS_WriteN,
-			     "\027\007\000\002\000\000\000\000\000\000",
-			     10);
-			break;
-		    default:
-			swi(OS_WriteC, c);
-		}
-		continue;
-
-	    default:
-		printf("[output error]");
-		mode = OUT_NORMAL;
-	}
-    }
-}
-
-/*
- * mch_inchar(): low level input funcion.
- * Get a characters from the keyboard.
- * Return the number of characters that are available.
- * If wtime == 0 do not wait for characters.
- * If wtime == n wait n msecs for characters.
- * If wtime == -1 wait forever for characters.
- *
- * TODO: call convert_input() for 'fileencoding' to 'encoding' conversion.
- */
-    int
-mch_inchar(buf, maxlen, wtime, tb_change_cnt)
-    char_u  *buf;
-    int	    maxlen;
-    long    wtime;
-    int	    tb_change_cnt;
-{
-    int got=0;
-    unsigned int start_time = clock();
-
-    if (ro_line_mode)
-    {
-	/* We're probably in Ex mode - get whole lines at a time. */
-
-	static char_u	line_buffer[256];
-	static int	remaining_chars = 0;
-	static int	buf_pos = 0;
-
-	/* Do we need to fetch another line? */
-	if (remaining_chars == 0)
-	{
-	    int		old_esc_state;
-	    swi(OS_Byte, 200, 1, 0xfe);
-	    old_esc_state = r1;
-
-	    buf_pos = 0;
-	    if (xswi(OS_ReadLine, line_buffer, 255, 0, 255) & (c_flag | v_flag))
-	    {
-		got_int = TRUE;	    /* ESC pressed */
-		r1 = 0;
-	    }
-	    line_buffer[r1] = 13;
-	    remaining_chars = r1 + 1;	/* Count CR as part of input */
-
-	    swi(OS_Byte, 200, old_esc_state, 0);
-	}
-
-	/* Can we send the rest of the buffer back in one go? */
-	if (remaining_chars <= maxlen)
-	{
-	    int	    got = remaining_chars;
-
-	    memcpy(buf, line_buffer + buf_pos, got);
-	    remaining_chars = 0;
-	    return  got;
-	}
-
-	/* Send as much as we can */
-	memcpy(buf, line_buffer + buf_pos, maxlen);
-	buf_pos += maxlen;
-	remaining_chars -= maxlen;
-
-	return maxlen;
-    }
-
-    if (!term_console)
-    {
-	/* Use OS_ReadC for all input.
-	 * Avoids problems with remote access getting interference from
-	 * the keyboard.
-	 */
-	if (wtime == 0)
-	    return 0;	    /* Ignore quick key checks */
-
-	if (xswi(OS_ReadC) & c_flag)
-	{
-	    got_int = TRUE;	/* ESC pressed - can this happen? */
-	    swi(OS_Byte, 124);	/* Clear Escape state */
-	    r0 = 0x1b;		/* It *might* not have been Escape! */
-	}
-	buf[0] = r0;
-	return 1;
-    }
-
-    /*
-     * OK, here's the plan:
-     *
-     * 1) Wait until wtime expires or we get a key
-     * 2) Get keys until the keyboard buffer is empty or buf is full
-     */
-
-    while (xswi(OS_Byte,145,0) & c_flag)
-    {
-	/* Nothing at all in the keyboard buffer.
-	 * Has our time expired yet?
-	 */
-	if ( (wtime != -1) && (clock() - start_time) >= wtime )
-	    return 0;		/* Nothing read - giving up */
-    }
-
-    /* We've got one char (in r2) - are there any more? */
-
-    while (got < maxlen)
-    {
-	buf[got++] = r2;
-
-	if (xswi(OS_Byte,145,0) & c_flag)
-	    return got;		/* Keyboard buffer empty */
-    }
-    return got;			/* buf is full */
-}
-
-/*
- * return non-zero if a character is available
- */
-    int
-mch_char_avail()
-{
-    if (!term_console)
-	return 0;	    /* Can't tell */
-    if (xswi(OS_Byte, 152, 0) & c_flag)
-	return 0;
-    return 1;
-}
-
-/* Find out how much free memory we have.
- * I don't know how to work this out exactly but, since we can claim
- * more memory from the OS, let's just report the free pool size.
- * Dynamic area 6 doesn't exist pre 3.6 according to StrongHelp, so
- * we'll use Wimp_SlotSize. If that fails (outside the desktop?)
- * then just return a big number and hope.
- */
-    long_u
-mch_avail_mem(special)
-    int special;
-{
-    if (xswi(Wimp_SlotSize, -1, -1) & v_flag)
-	return 0x7fffffff;
-    return r2;
-}
-
-    void
-mch_delay(msec, ignoreinput)
-    long	msec;
-    int		ignoreinput;
-{
-    int		start_time, time_now;
-    int		csec = msec / 10;
-
-    swi(OS_ReadMonotonicTime);
-    start_time = r0;
-
-    for (;;)
-    {
-	swi(OS_ReadMonotonicTime);
-	time_now = r0;
-	if (time_now - start_time > csec)
-	    return;
-#ifdef FEAT_GUI
-	/* In the GUI, allow other programs to run while waiting. */
-	if (gui.in_use)
-	    gui_mch_wait_for_chars(start_time + csec);
-#endif
-    }
-}
-
-/*
- * If the machine has job control, use it to suspend the program,
- * otherwise fake it by starting a new shell.
- */
-    void
-mch_suspend()
-{
-    suspend_shell();
-}
-
-    void
-mch_init()
-{
-    /*
-     * Read window size first. Calls to mch_get_shellsize() will
-     * simply return these values in future so that setting the
-     * text window (used for scrolling) won't give strange results.
-     */
-
-    int buf[7] = {132, 135, 256, 257, 1, 2, -1};
-
-    /* Command windows are no longer forced open, since if we are
-     * in the desktop then we'll use the GUI version.
-     * Opening a command window here messes up the GUI version startup
-     */
-#ifndef FEAT_GUI
-    swi(OS_WriteI);
-#endif
-    swi(OS_ReadVduVariables, buf, buf);
-    WinLeft = buf[0];
-    WinTop  = buf[1];
-    Columns = buf[2];
-    Rows    = buf[3] + 1;	/* Seems to be one off (VduVars wrong?) */
-    ScrollTop = 0;
-
-    /* Are we running in a textwindow? */
-    if (Rows == buf[5] + 1 && Columns == buf[4] + 1)
-	windowed = 0;
-    else
-	windowed = 1;
-
-    /* Choose a nice colour scheme. */
-    text_fg(NORMAL_FG);
-    text_bg(NORMAL_BG);
-}
-
-/*
- * Check_win checks whether we have an interactive stdout.
- */
-/* ARGSUSED */
-    int
-mch_check_win(argc, argv)
-    int	    argc;
-    char    **argv;
-{
-    return OK;
-}
-
-/*
- * Return TRUE if the input comes from a terminal, FALSE otherwise.
- */
-    int
-mch_input_isatty()
-{
-    if (xswi(OS_ChangeRedirection, -1, -1) & v_flag)
-	return TRUE;		/* Error - TRUE is probably correct though */
-    if (r0 == 0)
-	return TRUE;
-    return FALSE;
-}
-
-#ifdef FEAT_TITLE
-    int
-mch_can_restore_title()
-{
-    return FALSE;
-}
-
-    int
-mch_can_restore_icon()
-{
-    return FALSE;
-}
-
-
-/*
- * Set the window title and icon.
- */
-    void
-mch_settitle(title, icon)
-    char_u *title;
-    char_u *icon;
-{
-    if (title == NULL)
-	title = (char_u *) "<untitled>";
-#ifdef FEAT_GUI
-    if (gui.in_use && strcmp(title, gui.window_title))
-    {
-	int length;
-	length = strlen(title);
-	if (length >= gui.window_title_size)
-	    length = gui.window_title_size - 1;
-	strncpy(gui.window_title, title, length);
-	gui.window_title[length] = 0;
-	ro_redraw_title(gui.window_handle);
-    }
-#endif
-    return;
-}
-
-/*
- * Restore the window/icon title.
- * "which" is one of:
- *  1  only restore title
- *  2  only restore icon
- *  3  restore title and icon
- */
-    void
-mch_restore_title(which)
-    int which;
-{
-    return;
-}
-#endif
-
-/*
- * Insert user name in s[len].
- * Return OK if a name found.
- */
-    int
-mch_get_user_name(s, len)
-    char_u  *s;
-    int	    len;
-{
-    /* RISC OS doesn't support user names. */
-    *s = NUL;
-    return FAIL;
-}
-
-/*
- * Insert host name in s[len].
- */
-
-    void
-mch_get_host_name(s, len)
-    char_u  *s;
-    int	    len;
-{
-    if (xswi(OS_ReadVarVal, "Machine$Name", s, len, 0, 3) & v_flag)
-    {
-	/* Variable does not exist (normal operation) */
-	vim_strncpy(s, "(unknown)", len - 1);
-    }
-}
-
-/*
- * return process ID
- */
-    long
-mch_get_pid()
-{
-    if (xswi(Wimp_ReadSysInfo, 5) & v_flag)
-	return 0;
-    return r0;
-}
-
-/*
- * Get name of current directory into buffer 'buf' of length 'len' bytes.
- * Return OK for success, FAIL for failure.
- */
-    int
-mch_dirname(buf, len)
-    char_u  *buf;
-    int	    len;
-{
-    if (xswi(OS_FSControl, 37, "@", buf, 0, 0, len) & v_flag)
-	return FAIL;
-    return OK;
-}
-
-/*
- * Get absolute file name into buffer 'buf' of length 'len' bytes.
- *
- * return FAIL for failure, OK for success
- */
-    int
-mch_FullName(fname, buf, len, force)
-    char_u *fname, *buf;
-    int len;
-    int	force;		/* Also expand when already absolute path name.
-			 * Not used under RISC OS.
-			 */
-{
-    if (xswi(OS_FSControl, 37, fname, buf, 0, 0, len) & v_flag)
-	return FAIL;
-    return OK;
-}
-
-/*
- * Return TRUE if "fname" does not depend on the current directory.
- */
-    int
-mch_isFullName(fname)
-    char_u	*fname;
-{
-    if (strstr(fname, "::") && strstr(fname,".$."))
-	return TRUE;
-    return FALSE;
-}
-
-/*
- * Get file permissions for 'name'.
- * Returns -1 when it doesn't exist.
- */
-    long
-mch_getperm(name)
-    char_u *name;
-{
-    struct stat statb;
-
-    if (stat((char *)name, &statb))
-	return -1;
-    return statb.st_mode;
-}
-
-/*
- * set file permission for 'name' to 'perm'
- *
- * return FAIL for failure, OK otherwise
- */
-    int
-mch_setperm(name, perm)
-    char_u  *name;
-    long    perm;
-{
-    return (chmod((char *)name, (mode_t)perm) == 0 ? OK : FAIL);
-}
-
-/*
- * Set hidden flag for "name".
- */
-/* ARGSUSED */
-    void
-mch_hide(name)
-    char_u	*name;
-{
-    /* can't hide a file */
-}
-
-/*
- * return TRUE if "name" is a directory
- * return FALSE if "name" is not a directory
- * return FALSE for error
- */
-    int
-mch_isdir(name)
-    char_u *name;
-{
-    if (xswi(OS_File, 17, name) & v_flag)
-	return FALSE;
-    if (r0 == 2 || r0 == 3)
-	return TRUE;		/* Count image files as directories. */
-    return FALSE;
-}
-
-/*
- * Return 1 if "name" can be executed, 0 if not.
- * Return -1 if unknown. Requires which to work.
- */
-    int
-mch_can_exe(name)
-    char_u	*name;
-{
-    char_u	*buf;
-    char_u	*p;
-    int		retval;
-
-    buf = alloc((unsigned)STRLEN(name) + 7);
-    if (buf == NULL)
-	return -1;
-    sprintf((char *)buf, "which %s", name);
-    p = get_cmd_output(buf, NULL, SHELL_SILENT);
-    vim_free(buf);
-    if (p == NULL)
-	return -1;
-    /* result can be: "name: Command not found" */
-    retval = (*p != NUL && strstr((char *)p, "not found") == NULL);
-    vim_free(p);
-    return retval;
-}
-
-/*
- * Check what "name" is:
- * NODE_NORMAL: file or directory (or doesn't exist)
- * NODE_WRITABLE: writable device, socket, fifo, etc.
- * NODE_OTHER: non-writable things
- */
-    int
-mch_nodetype(name)
-    char_u	*name;
-{
-    /* TODO */
-    return NODE_NORMAL;
-}
-
-    void
-mch_early_init()
-{
-    /* Turn off all the horrible filename munging in UnixLib. */
-    int __riscosify_control = __RISCOSIFY_NO_PROCESS;
-}
-
-    void
-mch_exit(r)
-    int r;
-{
-    settmode(TMODE_COOK);
-    exiting = TRUE;
-    out_flush();
-    ml_close_all(TRUE);		/* remove all memfiles */
-
-#ifdef FEAT_GUI
-    if (gui.in_use)
-	gui_exit(r);
-#endif
-    swi(OS_NewLine);
-    if (old_escape_state != -1)
-	swi(OS_Byte, 229, old_escape_state, 0);
-    if (old_cursor_state != -1)
-	swi(OS_Byte, 4, old_cursor_state);
-    exit(r);
-}
-
-    void
-mch_settmode(tmode)
-    int		tmode;	    /* TMODE_RAW or TMODE_COOK */
-{
-    if (tmode == TMODE_COOK)
-    {
-	ro_line_mode = TRUE;
-	return;
-    }
-
-    ro_line_mode = FALSE;
-
-    if (term_console)
-    {
-	/* Block cursor. */
-	swi(OS_WriteN,
-		"\027\000\012\000\000\000\000\000\000\000",
-		10);
-
-	/* Disable the standard cursor key actions. */
-	swi(OS_Byte, 4, 1);
-	if (old_cursor_state == -1)
-	    old_cursor_state = r1;
-    }
-
-    /* Stop Escape from quitting Vim! */
-    swi(OS_Byte, 229, 1, 0);
-    if (old_escape_state == -1)
-	old_escape_state = r1;
-}
-
-/*
- * set mouse clicks on or off (only works for xterms)
- */
-    void
-mch_setmouse(on)
-    int	    on;
-{
-}
-
-/*
- * set screen mode, always fails.
- */
-/* ARGSUSED */
-    int
-mch_screenmode(arg)
-    char_u   *arg;
-{
-    EMSG(_(e_screenmode));
-    return FAIL;
-}
-
-/*
- * Try to get the current window size.
- * Return OK when size could be determined, FAIL otherwise.
- * Simply return results stored by mch_init() if we are the
- * machine's console. If not, we don't know how big the screen is.
- */
-    int
-mch_get_shellsize()
-{
-    /* if size changed: screenalloc will allocate new screen buffers */
-    return term_console ? OK : FAIL;
-}
-
-/*
- * Can't change the size.
- * Assume the user knows what he's doing and use the new values.
- */
-    void
-mch_set_shellsize()
-{
-    /* Assume the user knows what he's doing and use the new values. */
-}
-
-/*
- * Rows and/or Columns has changed.
- */
-    void
-mch_new_shellsize()
-{
-    /* Nothing to do. */
-}
-
-    int
-mch_call_shell(cmd, options)
-    char_u	*cmd;
-    int		options;	/* SHELL_*, see vim.h */
-{
-    int		retval;
-    int		tmode = cur_tmode;
-
-    if (cmd == NULL)
-	cmd = (char_u *) "GOS";
-
-#ifdef FEAT_GUI
-    if (gui.in_use)
-	return gui_mch_call_shell(cmd, options);
-#endif
-    if (options & SHELL_COOKED)
-	settmode(TMODE_COOK);		/* set to normal mode */
-    MSG_PUTS("\n");
-
-   /* I don't even want to think about what UnixLib must
-    * be doing to allow this to work...
-    */
-    retval = system(cmd);
-    if (retval && !(options & SHELL_SILENT))
-	EMSG(strerror(EOPSYS));		/* Doesn't seem to set errno? */
-
-    swi(OS_Byte, 229, 1, 0);		/* Re-disable escape */
-    if (tmode == TMODE_RAW)
-	settmode(TMODE_RAW);		/* set to raw mode */
-    return retval ? FAIL : OK;
-}
-
-/*
- * Check for Escape being pressed right now.
- * [ different if !term_console? ]
- */
-    void
-mch_breakcheck()
-{
-    if (xswi(OS_Byte, 121, 0xf0) & v_flag)
-	return;
-    if (r1 == 0xff)
-    {
-	got_int = TRUE;
-	swi(OS_Byte, 15, 1);	/* Flush input buffer */
-    }
-}
-
-/*
- * Recursively expand one path component into all matching files and/or
- * directories.
- * "path" has backslashes before chars that are not to be expanded.
- * Return the number of matches found.
- */
-    int
-mch_expandpath(gap, path, flags)
-    garray_T	*gap;	/* Grow array for results. */
-    char_u	*path;
-    int		flags;	/* EW_* flags */
-{
-    int		got;	/* Number of matches. */
-    char_u	*pattern;
-
-   /* Plan:
-    *
-    * 1) Get first part of path - no wildcards
-    * 2) Get next path element (wildcarded)
-    * 3) Get rest of path
-    *
-    * If (3) is nothing then only the leaf is wildcarded - add to gap
-    * Otherwise call recursively for each path in (2), passing (3)
-    *
-    * This is just the header function.
-    */
-
-    /* We must be able to modifiy path, so make a copy */
-    pattern = vim_strsave(path);
-    if (pattern == NULL)
-	return 0;
-    got = expand_section(gap, (char_u *)"", pattern, flags);
-    vim_free(pattern);
-    return got;
-}
-
-/*
- * expand_section(gap, "$.Dir1.Dir2", "ABBA*.myleaf##")
- *
- * calls expand_section(gap, "$.Dir1.Dir2.ABBA_Gold", "myleaf##")
- *   and expand_section(gap, "$.Dir1.Dir2.ABBA_Live", "myleaf##")
- *
- * If rest is just a leaf then all matches are added to gap.
- *
- * Returns number of items added to gap.
- */
-    int
-expand_section(gap, root, rest, flags)
-    garray_T	*gap;
-    char_u	*root;	/* Non-wildcarded path to search */
-    char_u	*rest;	/* Wildcarded remainder of path */
-    int		flags;	/* Add dirs/files/missing objects. */
-{
-    static char_u buf[MAXPATHL];	/* Temporary buffer. */
-    char_u dir[MAXPATHL];
-    int start_element = -1;		/* Start of wildcarded element */
-    char_u c;
-    int i;
-    int got, dir_pos;
-    int buflen;			/* Chars used in buf[] */
-    int colon = 0;		/* Dir ends in ':' */
-
-    buflen = strlen(root);
-    STRNCPY(buf, root, buflen);	/* Copy root into buffer. */
-
-   /*
-    * Find end of nonwildcarded section.
-    * Count ':' as a path sep since Vim:Bug* is a valid pathname.
-    */
-
-    for (i = 0; c = rest[i]; i++)
-    {
-	if (c == PATHSEP)
-	{
-	    start_element = i;
-	    colon = 0;
-	}
-	if (c == ':')
-	{
-	    start_element = i + 1;
-	    colon = 1;
-	}
-	if (c == '#' || c == '*')
-	    break;
-    }
-    if (c == 0)
-	start_element = i;
-
-   /*
-    * start_element +> terminator for non-wildcarded section.
-    * Transfer this bit into buf.
-    */
-    if (buflen + start_element + 4 >= MAXPATHL)
-       return 0;			/* Buffer full */
-    if (start_element >= 0)
-    {
-	if (*root && !colon)
-	    buf[buflen++] = PATHSEP;
-	strncpy(buf + buflen, rest, start_element);
-	buflen += start_element;
-    }
-    buf[buflen] = 0;
-
-   /*
-    * Did we reach the end of the string without hitting any wildcards?
-    */
-    if (c == 0)
-    {
-	/* Yes - add combined path to grow array and return. */
-	addfile(gap, buf, flags);
-	return 1;
-    }
-
-    if (start_element < 0 || !colon)
-	start_element++;
-    rest += start_element;
-
-   /*
-    * rest does contain wildcards if we get here.
-    *
-    * Now : have we reached the leaf names part yet?
-    * If so, add all matches (files and dirs) to gap.
-    * If not, get next path element and scan all matching directories.
-    */
-
-    start_element = -1;
-    for (i = 0; rest[i]; i++)
-    {
-	if (rest[i] == '.')
-	{
-	    start_element = i;
-	    rest[i] = 0;		/* Break string here. */
-	    break;
-	}
-    }
-
-    /* If start_element is -1 then we are matching leaf names */
-
-    r3 = 0;			/* Number of objs read. */
-    dir_pos = 0;		/* Position through directory. */
-    got = 0;			/* Files added so far. */
-    while (dir_pos != -1)
-    {
-	buf[buflen] = 0;
-	if (xswi(OS_GBPB, 9,
-		buf,				/* Directory to scan. */
-		buf + buflen + (1 - colon),	/* Buffer for result. */
-		1,			/* Number of objects to read. */
-		dir_pos,		/* Search position. */
-		MAXPATHL - 2 - buflen,	/* Size of result buffer. */
-		rest)			/* Wildcarded leafname. */
-			& v_flag)
-	{
-	    EMSG(r0 + 4);
-	    r4 = -1;
-	}
-	dir_pos = r4;		/* r4 corrupted by addfile() */
-	if (r3 > 0)
-	{
-	    char_u *path = buf;
-	    if (buflen == 0)
-		path++;			/* Don't do '.File' */
-	    else if (!colon)
-		buf[buflen] = '.';		/* Join path and leaf */
-
-	   /* Path -> full path of object found */
-	    if (start_element == -1)
-	    {
-		addfile(gap, path, flags);
-		got++;
-	    }
-	    else
-	    {
-	       /* Scan into subdirectories and images; ignore files */
-		swi(OS_File, 17, path);
-		if (r0 == 2 || r0 == 3)
-		    got += expand_section(gap,
-						path,
-						rest + start_element + 1,
-						flags);
-	    }
-	}
-    }
-
-    /* Restore the dot if we removed it. */
-    if (start_element >= 0)
-	rest[start_element] = '.';
-    return got;
-}
-
-/*
- * mch_expand_wildcards() - this code does wild-card pattern matching using
- * the shell. It isn't used under RISC OS.
- *
- * return OK for success, FAIL for error (you may lose some memory) and put
- * an error message in *file.
- *
- * num_pat is number of input patterns
- * pat is array of pointers to input patterns
- * num_file is pointer to number of matched file names
- * file is pointer to array of pointers to matched file names
- */
-    int
-mch_expand_wildcards(num_pat, pat, num_file, file, flags)
-    int		    num_pat;
-    char_u	  **pat;
-    int		   *num_file;
-    char_u	 ***file;
-    int		    flags;		/* EW_* flags */
-{
-    /* This doesn't get called unless SPECIAL_WILDCHAR is defined. */
-    return FAIL;
-}
-
-/*
- * Return TRUE if "p" contains wildcards which can be expanded by
- * mch_expandpath().
- */
-    int
-mch_has_exp_wildcard(p)
-    char_u	*p;
-{
-    if (vim_strpbrk((char_u *)"*#", p))
-	return TRUE;
-    return FALSE;
-}
-
-/* Return TRUE if "p" contains wildcards. */
-    int
-mch_has_wildcard(p)
-    char_u	*p;
-{
-    if (vim_strpbrk((char_u *)"*#`", p))
-	return TRUE;
-    return FALSE;
-}
-
-    int			/* see Unix unlink(2) */
-mch_remove(file)
-    char_u *file;	/* Name of file to delete. */
-{
-    if (xswi(OS_FSControl, 27, file, 0, 0) & v_flag)
-	return EXIT_FAILURE;
-    return EXIT_SUCCESS;
-}
-
-/* Try to make existing scripts work without modification.
- * Return a pointer to the new string (freed by caller), or NULL
- *
- * Two main cases:
- * - Absolute : $VIM/syntax/help.vim
- * - Relative : Adfs::4.$.!Vim.Resources.Syntax/help.vim
- */
-    char_u *
-mch_munge_fname(fname)
-    char_u *fname;
-{
-    char_u c;
-    int len;
-    char_u *retval;
-
-    retval = fname = vim_strsave(fname);
-    if (fname == NULL)
-	return NULL;
-
-    if (strncmp(fname, "$VIM/", 5) == 0)
-    {
-	strncpy(fname, "Vim:", 4);
-	for (fname += 5; c = *fname; fname++)
-	{
-	    if (c == '.')
-		break;
-	    if (c == '/')
-		fname[-1] = '.';
-	    else
-		fname[-1] = c;
-	}
-	fname[-1] = '\0';
-    }
-    else
-    {
-	/* Check to see if the file exists without modification. */
-	if (xswi(OS_File, 17, fname) & v_flag)
-	    r0 == 0;		/* Invalid filename? */
-	if (r0)
-	    return retval;
-
-	len = strlen(fname);
-	if (strcmp(fname + len - 4, ".vim") == 0)
-	{
-	    fname[len - 4] = '\0';
-	    for (; c = *fname; fname++)
-	    {
-		if (c == '/')
-		    *fname = '.';
-	    }
-	}
-    }
-    return retval;
-}
-
-/* QuickFix reads munged names from the error file.
- * Correct them.
- */
-    int
-ro_buflist_add(old_name)
-    char_u  *old_name;	/* Name of file found by quickfix */
-{
-    char_u  *fname;
-    char_u  *leaf;	/* Pointer to start of leaf in old_name */
-    char_u  *ptr;
-    char_u  c;
-    int	    retval;
-
-    if (old_name == NULL)
-	return buflist_add(NULL, 0);
-
-    /* Copy the name so we can mess around with it. */
-    fname = vim_strsave(old_name);
-    if (fname == NULL)
-	/* Out of memory - can't modify name */
-	return buflist_add(old_name, 0);
-
-    /* Change `dir/main.c' into `dir.c.main' */
-    leaf = fname;
-    for (ptr = fname; c = *ptr; ptr++)
-    {
-	if (c == '/')
-	{
-	    leaf = ptr + 1;
-	    *ptr = '.';
-	}
-	else if (c == '.')
-	    break;
-    }
-    if (c == '.')
-    {
-	/* Change `main.c' into `c.main'
-	 *	  |    |
-	 *      leaf  ptr
-	 */
-	ptr += old_name - fname;
-	*ptr = '\0';
-	sprintf(leaf,
-		"%s.%s",
-		ptr + 1,
-		leaf - fname + old_name);
-    }
-
-    retval = buflist_add(fname, 0);
-    free(fname);
-    return retval;
-}
-
-/* Change the current directory.
- * Strip trailing dots to make it easier to use with filename completion.
- * Return 0 for success, -1 for failure.
- */
-    int
-mch_chdir(dir)
-    char_u  *dir;
-{
-    int	    length;
-    int	    retval;
-    char_u  *new_dir;
-
-    if (p_verbose >= 5)
-    {
-	verbose_enter();
-	smsg((char_u *)"chdir(%s)", dir);
-	verbose_leave();
-    }
-    length = strlen(dir);
-    if (dir[length - 1] != '.')
-	return chdir(dir);	    /* No trailing dots - nothing to do. */
-    new_dir = vim_strsave(dir);
-    if (new_dir == NULL)
-	return chdir(dir);	    /* Can't allocate memory. */
-
-    while (new_dir[--length] == '.')
-	new_dir[length] = '\0';
-
-    retval = chdir(new_dir);
-    vim_free(new_dir);
-    return retval;
-}
-
-/* Examine the named file, and set the 'osfiletype' option
- * (in curbuf) to the file's type.
- */
-    void
-mch_read_filetype(file)
-    char_u  *file;
-{
-    int	    type;
-    char_u  type_string[9];
-    int	    i;
-
-    if (xswi(OS_File, 23, file) & v_flag)
-	type = 0xfff;		/* Default to Text */
-    else
-	type = r6;
-
-    /* Type is the numerical value - see if we have a textual equivalent */
-    swi(OS_FSControl, 18, 0, type);
-    ((int *) type_string)[0] = r2;
-    ((int *) type_string)[1] = r3;
-    type_string[8] = 0;
-    for (i = 0; type_string[i] > ' '; i++)
-	;
-    type_string[i] = 0;
-
-    set_string_option_direct("osfiletype", -1, type_string, OPT_FREE, 0);
-    return;
-}
-
-    void
-mch_set_filetype(file, type)
-    char_u  *file;
-    char_u  *type;
-{
-    if (xswi(OS_FSControl, 31, type) & v_flag)
-    {
-	EMSG(_("E366: Invalid 'osfiletype' option - using Text"));
-	r2 = 0xfff;
-    }
-
-    swi(OS_File, 18, file, r2);
-}
-
-/* Return TRUE if the file's type matches 'type'
- * RISC OS types always start with '&'
- */
-    int
-mch_check_filetype(fname, type)
-    char_u  *fname;
-    char_u  *type;
-{
-    int	    value;
-    char    *end;
-
-    if (*type != '&')
-	return FALSE;
-
-    value = strtol(type + 1, &end, 16);
-    if (*end)
-	return FALSE;		/* Invalid type (report error?) */
-
-    if (xswi(OS_File, 23, fname) & v_flag)
-	return FALSE;		/* Invalid filename? */
-
-    return (r0 && r6 == value);
-}
diff -Naur vim73.orig/src/os_riscos.h vim73/src/os_riscos.h
--- vim73.orig/src/os_riscos.h	2010-05-23 12:16:06.000000000 +0000
+++ vim73/src/os_riscos.h	1970-01-01 00:00:00.000000000 +0000
@@ -1,166 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4:
- *
- * VIM - Vi IMproved	by Bram Moolenaar
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/ioctl.h>
-#include <termios.h>
-#include <stdlib.h>
-#include <unixlib/local.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#define CASE_INSENSITIVE_FILENAME
-#define FEAT_MODIFY_FNAME
-#define FEAT_OSFILETYPE
-#define DFLT_OFT	"Text"
-#define USE_TERM_CONSOLE
-#define HAVE_AVAIL_MEM
-
-/* Longer filenames now accessible to all */
-#ifndef BASENAMELEN
-# define BASENAMELEN 64 /* Same length as unzip */
-#endif
-
-#ifndef TEMNAME
-# define TEMPNAME	"<Wimp$ScrapDir>.v?XXXXXX"
-# define TEMPNAMELEN	25
-#endif
-
-#ifndef DFLT_HELPFILE
-# define DFLT_HELPFILE "Vim:doc.help"
-#endif
-
-#ifndef DFLT_BDIR
-# define DFLT_BDIR	".,<Wimp$ScrapDir>."	/* default for 'backupdir' */
-#endif
-
-/* Paths to try putting swap file in. */
-#ifndef DFLT_DIR
-# define DFLT_DIR	"<Wimp$ScrapDir>.,."	/* default for 'directory' */
-#endif
-
-#ifndef DFLT_VDIR
-# define DFLT_VDIR	"Choices:Vim.view"	/* default for 'viewdir' */
-#endif
-
-#ifndef TERMCAPFILE
-# define TERMCAPFILE	"Vim:TermCap"
-#endif
-#define HAVE_TGETENT
-
-#ifndef SYNTAX_FNAME
-# define SYNTAX_FNAME	"Vim:Syntax.%s"
-#endif
-
-#ifndef EVIM_FILE
-# define EVIM_FILE	"Vim:Evim"
-#endif
-
-#define FEAT_VIMINFO
-
-#ifndef VIMINFO_FILE
-# define VIMINFO_FILE	"<Choices$Write>.Vim.VimInfo"
-#endif
-#ifndef VIMINFO_FILE2
-# define VIMINFO_FILE2	"Choices:Vim.VimInfo"
-#endif
-
-#ifndef VIMRC_FILE
-# define VIMRC_FILE	"/vimrc"
-#endif
-#ifndef EXRC_FILE
-# define EXRC_FILE	"/exrc"
-#endif
-#ifndef GVIMRC_FILE
-# define GVIMRC_FILE	"/gvimrc"
-#endif
-#ifndef USR_VIMRC_FILE
-# define USR_VIMRC_FILE	"Vim:Evim"
-#endif
-#ifndef SESSION_FILE
-# define SESSION_FILE	"/Session.vim"
-#endif
-#ifndef USR_VIMRC_FILE
-# define USR_VIMRC_FILE	"Choices:Vim.VimRC"
-#endif
-#ifndef USR_GVIMRC_FILE
-# define USR_GVIMRC_FILE    "Choices:Vim.GVimRC"
-#endif
-#ifndef USR_EXRC_FILE
-# define USR_EXRC_FILE    "Choices:Vim.ExRC"
-#endif
-#ifndef SYS_VIMRC_FILE
-# define SYS_VIMRC_FILE	    "Vim:VimRC"
-#endif
-#ifndef SYS_GVIMRC_FILE
-# define SYS_GVIMRC_FILE    "Vim:GVimRC"
-#endif
-#ifndef SYS_MENU_FILE
-# define SYS_MENU_FILE	    "Vim:Menu"
-#endif
-#ifndef SYS_OPTWIN_FILE
-# define SYS_OPTWIN_FILE    "Vim:Optwin"
-#endif
-#ifndef FILETYPE_FILE
-# define FILETYPE_FILE	    "Vim:Filetype"
-#endif
-#ifndef FTPLUGIN_FILE
-# define FTPLUGIN_FILE	    "Vim:Ftplugin/vim"
-#endif
-#ifndef INDENT_FILE
-# define INDENT_FILE	    "Vim:Indent/vim"
-#endif
-#ifndef FTOFF_FILE
-# define FTOFF_FILE	    "Vim:Ftoff"
-#endif
-#ifndef FTPLUGOF_FILE
-# define FTPLUGOF_FILE	    "Vim:Ftplugof"
-#endif
-#ifndef INDOFF_FILE
-# define INDOFF_FILE	    "Vim:Indoff"
-#endif
-
-#define DFLT_ERRORFILE		"errors/vim"
-#define DFLT_RUNTIMEPATH	"Choices:Vim,Vim:,Choices:Vim.after"
-
-/*
- * RISC PCs have plenty of memory, use large buffers
- */
-#define CMDBUFFSIZE 1024	/* size of the command processing buffer */
-#define MAXPATHL    256		/* paths are always quite short though */
-
-#ifndef DFLT_MAXMEM
-# define DFLT_MAXMEM	(5*1024)    /* use up to 5 Mbyte for a buffer */
-#endif
-
-#ifndef DFLT_MAXMEMTOT
-# define DFLT_MAXMEMTOT	(10*1024)    /* use up to 10 Mbyte for Vim */
-#endif
-
-#ifdef HAVE_SIGSET
-# define signal sigset
-#endif
-
-#define n_flag (1<<31)
-#define z_flag (1<<30)
-#define c_flag (1<<29)
-#define v_flag (1<<28)
-
-/* These take r0-r7 as inputs, returns r0-r7 in global variables. */
-void swi(int swinum, ...);      /* Handles errors itself */
-int xswi(int swinum, ...);      /* Returns errors using v flag */
-extern int r0, r1, r2, r3, r4, r5, r6, r7;  /* For return values */
-
-#include <kernel.h>
-#include <swis.h>
-
-#define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
-#define mch_rename(src, dst) rename(src, dst)
-#define mch_getenv(x) (char_u *)getenv((char *)x)
-#define mch_setenv(name, val, x) setenv(name, val, x)
diff -Naur vim73.orig/src/os_unix.c vim73/src/os_unix.c
--- vim73.orig/src/os_unix.c	2010-08-08 13:14:04.000000000 +0000
+++ vim73/src/os_unix.c	2013-08-04 19:09:10.537277413 +0000
@@ -61,6 +61,11 @@
 #  include <cygwin/version.h>
 #  include <sys/cygwin.h>	/* for cygwin_conv_to_posix_path() and/or
 				 * for cygwin_conv_path() */
+#  ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+#   define WIN32_LEAN_AND_MEAN
+#   include <windows.h>
+#   include "winclip.pro"
+#  endif
 # endif
 #endif
 
@@ -127,6 +132,7 @@
 #  include <X11/Shell.h>
 #  include <X11/StringDefs.h>
 static Widget	xterm_Shell = (Widget)0;
+static void clip_update __ARGS((void));
 static void xterm_update __ARGS((void));
 # endif
 
@@ -154,6 +160,13 @@
 
 static void may_core_dump __ARGS((void));
 
+#ifdef HAVE_UNION_WAIT
+typedef union wait waitstatus;
+#else
+typedef int waitstatus;
+#endif
+static pid_t wait4pid __ARGS((pid_t, waitstatus *));
+
 static int  WaitForChar __ARGS((long));
 #if defined(__BEOS__)
 int  RealWaitForChar __ARGS((int, long, int *));
@@ -271,7 +284,8 @@
 #ifdef SIGBUS
     {SIGBUS,	    "BUS",	TRUE},
 #endif
-#ifdef SIGSEGV
+#if defined(SIGSEGV) && !defined(FEAT_MZSCHEME)
+    /* MzScheme uses SEGV in its garbage collector */
     {SIGSEGV,	    "SEGV",	TRUE},
 #endif
 #ifdef SIGSYS
@@ -283,7 +297,7 @@
 #ifdef SIGTERM
     {SIGTERM,	    "TERM",	TRUE},
 #endif
-#ifdef SIGVTALRM
+#if defined(SIGVTALRM) && !defined(FEAT_RUBY)
     {SIGVTALRM,	    "VTALRM",	TRUE},
 #endif
 #if defined(SIGPROF) && !defined(FEAT_MZSCHEME) && !defined(WE_ARE_PROFILING)
@@ -1107,7 +1121,7 @@
  * On Linux, signal is not always handled immediately either.
  * See https://bugs.launchpad.net/bugs/291373
  *
- * volatile because it is used in in signal handler sigcont_handler().
+ * volatile because it is used in signal handler sigcont_handler().
  */
 static volatile int sigcont_received;
 static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
@@ -1123,6 +1137,75 @@
 }
 #endif
 
+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+static void loose_clipboard __ARGS((void));
+# ifdef USE_SYSTEM
+static void save_clipboard __ARGS((void));
+static void restore_clipboard __ARGS((void));
+
+static void *clip_star_save = NULL;
+static void *clip_plus_save = NULL;
+# endif
+
+/*
+ * Called when Vim is going to sleep or execute a shell command.
+ * We can't respond to requests for the X selections.  Lose them, otherwise
+ * other applications will hang.  But first copy the text to cut buffer 0.
+ */
+    static void
+loose_clipboard()
+{
+    if (clip_star.owned || clip_plus.owned)
+    {
+	x11_export_final_selection();
+	if (clip_star.owned)
+	    clip_lose_selection(&clip_star);
+	if (clip_plus.owned)
+	    clip_lose_selection(&clip_plus);
+	if (x11_display != NULL)
+	    XFlush(x11_display);
+    }
+}
+
+# ifdef USE_SYSTEM
+/*
+ * Save clipboard text to restore later.
+ */
+    static void
+save_clipboard()
+{
+    if (clip_star.owned)
+	clip_star_save = get_register('*', TRUE);
+    if (clip_plus.owned)
+	clip_plus_save = get_register('+', TRUE);
+}
+
+/*
+ * Restore clipboard text if no one own the X selection.
+ */
+    static void
+restore_clipboard()
+{
+    if (clip_star_save != NULL)
+    {
+	if (!clip_gen_owner_exists(&clip_star))
+	    put_register('*', clip_star_save);
+	else
+	    free_register(clip_star_save);
+	clip_star_save = NULL;
+    }
+    if (clip_plus_save != NULL)
+    {
+	if (!clip_gen_owner_exists(&clip_plus))
+	    put_register('+', clip_plus_save);
+	else
+	    free_register(clip_plus_save);
+	clip_plus_save = NULL;
+    }
+}
+# endif
+#endif
+
 /*
  * If the machine has job control, use it to suspend the program,
  * otherwise fake it by starting a new shell.
@@ -1137,19 +1220,7 @@
     out_flush();	    /* needed to disable mouse on some systems */
 
 # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-    /* Since we are going to sleep, we can't respond to requests for the X
-     * selections.  Lose them, otherwise other applications will hang.  But
-     * first copy the text to cut buffer 0. */
-    if (clip_star.owned || clip_plus.owned)
-    {
-	x11_export_final_selection();
-	if (clip_star.owned)
-	    clip_lose_selection(&clip_star);
-	if (clip_plus.owned)
-	    clip_lose_selection(&clip_plus);
-	if (x11_display != NULL)
-	    XFlush(x11_display);
-    }
+    loose_clipboard();
 # endif
 
 # if defined(_REENTRANT) && defined(SIGCONT)
@@ -1203,6 +1274,9 @@
 #ifdef MACOS_CONVERT
     mac_conv_init();
 #endif
+#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+    win_clip_init();
+#endif
 }
 
     static void
@@ -1485,7 +1559,7 @@
 {
     /* This function should not return, it causes exit().  Longjump instead. */
     LONGJMP(lc_jump_env, 1);
-#  ifdef VMS
+#  if defined(VMS) || defined(__CYGWIN__) || defined(__CYGWIN32__)
     return 0;  /* avoid the compiler complains about missing return value */
 #  endif
 }
@@ -1507,7 +1581,7 @@
 
     /* This function should not return, it causes exit().  Longjump instead. */
     LONGJMP(x_jump_env, 1);
-# ifdef VMS
+# if defined(VMS) || defined(__CYGWIN__) || defined(__CYGWIN32__)
     return 0;  /* avoid the compiler complains about missing return value */
 # endif
 }
@@ -1726,6 +1800,11 @@
     }
     if (x11_window == 0 || x11_display == NULL)
 	return (result = FAIL);
+
+# ifdef FEAT_EVAL
+    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
+# endif
+
     return (result = OK);
 }
 
@@ -2134,10 +2213,16 @@
  * Return non-zero when using an xterm mouse, according to 'ttymouse'.
  * Return 1 for "xterm".
  * Return 2 for "xterm2".
+ * Return 3 for "urxvt".
+ * Return 4 for "sgr".
  */
     int
 use_xterm_mouse()
 {
+    if (ttym_flags == TTYM_SGR)
+	return 4;
+    if (ttym_flags == TTYM_URXVT)
+	return 3;
     if (ttym_flags == TTYM_XTERM2)
 	return 2;
     if (ttym_flags == TTYM_XTERM)
@@ -2482,15 +2567,12 @@
 	}
 
 	l = STRLEN(buf);
-	if (l >= len)
-	    retval = FAIL;
+	if (l >= len - 1)
+	    retval = FAIL; /* no space for trailing "/" */
 #ifndef VMS
-	else
-	{
-	    if (l > 0 && buf[l - 1] != '/' && *fname != NUL
+	else if (l > 0 && buf[l - 1] != '/' && *fname != NUL
 						   && STRCMP(fname, ".") != 0)
-		STRCAT(buf, "/");
-	}
+	    STRCAT(buf, "/");
 #endif
     }
 
@@ -2719,6 +2801,13 @@
 #ifdef HAVE_POSIX_ACL
     ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS);
 #else
+#ifdef HAVE_SOLARIS_ZFS_ACL
+    acl_t *aclent;
+
+    if (acl_get((char *)fname, 0, &aclent) < 0)
+	return NULL;
+    ret = (vim_acl_T)aclent;
+#else
 #ifdef HAVE_SOLARIS_ACL
     vim_acl_solaris_T   *aclent;
 
@@ -2764,6 +2853,7 @@
     ret = (vim_acl_T)aclent;
 #endif /* HAVE_AIX_ACL */
 #endif /* HAVE_SOLARIS_ACL */
+#endif /* HAVE_SOLARIS_ZFS_ACL */
 #endif /* HAVE_POSIX_ACL */
     return ret;
 }
@@ -2781,6 +2871,9 @@
 #ifdef HAVE_POSIX_ACL
     acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent);
 #else
+#ifdef HAVE_SOLARIS_ZFS_ACL
+    acl_set((char *)fname, (acl_t *)aclent);
+#else
 #ifdef HAVE_SOLARIS_ACL
     acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt,
 	    ((vim_acl_solaris_T *)aclent)->acl_entry);
@@ -2789,6 +2882,7 @@
     chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len);
 #endif /* HAVE_AIX_ACL */
 #endif /* HAVE_SOLARIS_ACL */
+#endif /* HAVE_SOLARIS_ZFS_ACL */
 #endif /* HAVE_POSIX_ACL */
 }
 
@@ -2801,6 +2895,9 @@
 #ifdef HAVE_POSIX_ACL
     acl_free((acl_t)aclent);
 #else
+#ifdef HAVE_SOLARIS_ZFS_ACL
+    acl_free((acl_t *)aclent);
+#else
 #ifdef HAVE_SOLARIS_ACL
     free(((vim_acl_solaris_T *)aclent)->acl_entry);
     free(aclent);
@@ -2809,6 +2906,7 @@
     free(aclent);
 #endif /* HAVE_AIX_ACL */
 #endif /* HAVE_SOLARIS_ACL */
+#endif /* HAVE_SOLARIS_ZFS_ACL */
 #endif /* HAVE_POSIX_ACL */
 }
 #endif
@@ -3294,6 +3392,29 @@
 	return;
 
     xterm_mouse_vers = use_xterm_mouse();
+
+# ifdef FEAT_MOUSE_URXVT
+    if (ttym_flags == TTYM_URXVT)
+    {
+	out_str_nf((char_u *)
+		   (on
+		   ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
+		   : IF_EB("\033[?1015l", ESC_STR "[?1015l")));
+	ison = on;
+    }
+# endif
+
+# ifdef FEAT_MOUSE_SGR
+    if (ttym_flags == TTYM_SGR)
+    {
+	out_str_nf((char_u *)
+		   (on
+		   ? IF_EB("\033[?1006h", ESC_STR "[?1006h")
+		   : IF_EB("\033[?1006l", ESC_STR "[?1006l")));
+	ison = on;
+    }
+# endif
+
     if (xterm_mouse_vers > 0)
     {
 	if (on)	/* enable mouse events, use mouse tracking if available */
@@ -3372,13 +3493,14 @@
 	     *	  4 = Windows Cross Hair
 	     *	  5 = Windows UP Arrow
 	     */
-#ifdef JSBTERM_MOUSE_NONADVANCED /* Disables full feedback of pointer movements */
+#  ifdef JSBTERM_MOUSE_NONADVANCED
+	    /* Disables full feedback of pointer movements */
 	    out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK1Q\033\\",
 					 ESC_STR "[0~ZwLMRK1Q" ESC_STR "\\"));
-#else
+#  else
 	    out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK+1Q\033\\",
 					ESC_STR "[0~ZwLMRK+1Q" ESC_STR "\\"));
-#endif
+#  endif
 	    ison = TRUE;
 	}
 	else
@@ -3410,6 +3532,9 @@
 {
 # ifdef FEAT_MOUSE_XTERM
     if (use_xterm_mouse()
+# ifdef FEAT_MOUSE_URXVT
+	    && use_xterm_mouse() != 3
+# endif
 #  ifdef FEAT_GUI
 	    && !gui.in_use
 #  endif
@@ -3499,6 +3624,48 @@
     else
 	del_mouse_termcode(KS_PTERM_MOUSE);
 # endif
+# ifdef FEAT_MOUSE_URXVT
+    /* same as the dec mouse */
+    if (use_xterm_mouse() == 3
+#  ifdef FEAT_GUI
+	    && !gui.in_use
+#  endif
+	    )
+    {
+	set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+		    ? IF_EB("\233", CSI_STR)
+		    : IF_EB("\033[", ESC_STR "[")));
+
+	if (*p_mouse != NUL)
+	{
+	    mch_setmouse(FALSE);
+	    setmouse();
+	}
+    }
+    else
+	del_mouse_termcode(KS_URXVT_MOUSE);
+# endif
+# ifdef FEAT_MOUSE_SGR
+    /* same as the dec mouse */
+    if (use_xterm_mouse() == 4
+#  ifdef FEAT_GUI
+	    && !gui.in_use
+#  endif
+	    )
+    {
+	set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME)
+		    ? IF_EB("\233<", CSI_STR "<")
+		    : IF_EB("\033[<", ESC_STR "[<")));
+
+	if (*p_mouse != NUL)
+	{
+	    mch_setmouse(FALSE);
+	    setmouse();
+	}
+    }
+    else
+	del_mouse_termcode(KS_SGR_MOUSE);
+# endif
 }
 #endif
 
@@ -3610,6 +3777,7 @@
 
     Rows = rows;
     Columns = columns;
+    limit_screen_size();
     return OK;
 }
 
@@ -3643,26 +3811,43 @@
     /* Nothing to do. */
 }
 
-#ifndef USE_SYSTEM
-static void append_ga_line __ARGS((garray_T *gap));
-
 /*
- * Append the text in "gap" below the cursor line and clear "gap".
+ * Wait for process "child" to end.
+ * Return "child" if it exited properly, <= 0 on error.
  */
-    static void
-append_ga_line(gap)
-    garray_T	*gap;
-{
-    /* Remove trailing CR. */
-    if (gap->ga_len > 0
-	    && !curbuf->b_p_bin
-	    && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
-	--gap->ga_len;
-    ga_append(gap, NUL);
-    ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
-    gap->ga_len = 0;
+    static pid_t
+wait4pid(child, status)
+    pid_t	child;
+    waitstatus	*status;
+{
+    pid_t wait_pid = 0;
+
+    while (wait_pid != child)
+    {
+	/* When compiled with Python threads are probably used, in which case
+	 * wait() sometimes hangs for no obvious reason.  Use waitpid()
+	 * instead and loop (like the GUI). Also needed for other interfaces,
+	 * they might call system(). */
+# ifdef __NeXT__
+	wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
+# else
+	wait_pid = waitpid(child, status, WNOHANG);
+# endif
+	if (wait_pid == 0)
+	{
+	    /* Wait for 10 msec before trying again. */
+	    mch_delay(10L, TRUE);
+	    continue;
+	}
+	if (wait_pid <= 0
+# ifdef ECHILD
+		&& errno == ECHILD
+# endif
+	   )
+	    break;
+    }
+    return wait_pid;
 }
-#endif
 
     int
 mch_call_shell(cmd, options)
@@ -3706,6 +3891,11 @@
     if (options & SHELL_COOKED)
 	settmode(TMODE_COOK);	    /* set to normal mode */
 
+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+    save_clipboard();
+    loose_clipboard();
+# endif
+
 # ifdef __EMX__
     if (cmd == NULL)
 	x = system("");	/* this starts an interactive shell in emx */
@@ -3776,6 +3966,9 @@
 # ifdef FEAT_TITLE
     resettitle();
 # endif
+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+    restore_clipboard();
+# endif
     return x;
 
 #else /* USE_SYSTEM */	    /* don't use system(), use fork()/exec() */
@@ -3795,6 +3988,7 @@
     int		retval = -1;
     char	**argv = NULL;
     int		argc;
+    char_u	*p_shcf_copy = NULL;
     int		i;
     char_u	*p;
     int		inquote;
@@ -3814,14 +4008,14 @@
 # endif
     int		did_settmode = FALSE;	/* settmode(TMODE_RAW) called */
 
-    out_flush();
-    if (options & SHELL_COOKED)
-	settmode(TMODE_COOK);		/* set to normal mode */
-
     newcmd = vim_strsave(p_sh);
     if (newcmd == NULL)		/* out of memory */
 	goto error;
 
+    out_flush();
+    if (options & SHELL_COOKED)
+	settmode(TMODE_COOK);		/* set to normal mode */
+
     /*
      * Do this loop twice:
      * 1: find number of arguments
@@ -3851,6 +4045,19 @@
 	}
 	if (argv == NULL)
 	{
+	    /*
+	     * Account for possible multiple args in p_shcf.
+	     */
+	    p = p_shcf;
+	    for (;;)
+	    {
+		p = skiptowhite(p);
+		if (*p == NUL)
+		    break;
+		++argc;
+		p = skipwhite(p);
+	    }
+
 	    argv = (char **)alloc((unsigned)((argc + 4) * sizeof(char *)));
 	    if (argv == NULL)	    /* out of memory */
 		goto error;
@@ -3858,9 +4065,27 @@
     }
     if (cmd != NULL)
     {
+	char_u	*s;
+
 	if (extra_shell_arg != NULL)
 	    argv[argc++] = (char *)extra_shell_arg;
-	argv[argc++] = (char *)p_shcf;
+
+	/* Break 'shellcmdflag' into white separated parts.  This doesn't
+	 * handle quoted strings, they are very unlikely to appear. */
+	p_shcf_copy = alloc((unsigned)STRLEN(p_shcf) + 1);
+	if (p_shcf_copy == NULL)    /* out of memory */
+	    goto error;
+	s = p_shcf_copy;
+	p = p_shcf;
+	while (*p != NUL)
+	{
+	    argv[argc++] = (char *)s;
+	    while (*p && *p != ' ' && *p != TAB)
+		*s++ = *p++;
+	    *s++ = NUL;
+	    p = skipwhite(p);
+	}
+
 	argv[argc++] = (char *)cmd;
     }
     argv[argc] = NULL;
@@ -3885,11 +4110,21 @@
 	if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
 	{
 	    pty_master_fd = OpenPTY(&tty_name);	    /* open pty */
-	    if (pty_master_fd >= 0 && ((pty_slave_fd =
-				    open(tty_name, O_RDWR | O_EXTRA, 0)) < 0))
+	    if (pty_master_fd >= 0)
 	    {
-		close(pty_master_fd);
-		pty_master_fd = -1;
+		/* Leaving out O_NOCTTY may lead to waitpid() always returning
+		 * 0 on Mac OS X 10.7 thereby causing freezes. Let's assume
+		 * adding O_NOCTTY always works when defined. */
+#ifdef O_NOCTTY
+		pty_slave_fd = open(tty_name, O_RDWR | O_NOCTTY | O_EXTRA, 0);
+#else
+		pty_slave_fd = open(tty_name, O_RDWR | O_EXTRA, 0);
+#endif
+		if (pty_slave_fd < 0)
+		{
+		    close(pty_master_fd);
+		    pty_master_fd = -1;
+		}
 	    }
 	}
 	/*
@@ -4148,7 +4383,6 @@
 # ifdef FEAT_GUI
 		if (pty_master_fd >= 0)
 		{
-		    close(pty_slave_fd);	/* close slave side of pty */
 		    fromshell_fd = pty_master_fd;
 		    toshell_fd = dup(pty_master_fd);
 		}
@@ -4190,15 +4424,13 @@
 		    {
 			MSG_PUTS(_("\nCannot fork\n"));
 		    }
-		    else if (wpid == 0)
+		    else if (wpid == 0) /* child */
 		    {
 			linenr_T    lnum = curbuf->b_op_start.lnum;
 			int	    written = 0;
 			char_u	    *lp = ml_get(lnum);
-			char_u	    *s;
 			size_t	    l;
 
-			/* child */
 			close(fromshell_fd);
 			for (;;)
 			{
@@ -4210,7 +4442,8 @@
 				len = write(toshell_fd, "", (size_t)1);
 			    else
 			    {
-				s = vim_strchr(lp + written, NL);
+				char_u	*s = vim_strchr(lp + written, NL);
+
 				len = write(toshell_fd, (char *)lp + written,
 					   s == NULL ? l
 					      : (size_t)(s - (lp + written)));
@@ -4221,7 +4454,7 @@
 				 * should not have one. */
 				if (lnum != curbuf->b_op_end.lnum
 					|| !curbuf->b_p_bin
-					|| (lnum != write_no_eol_lnum
+					|| (lnum != curbuf->b_no_eol_lnum
 					    && (lnum !=
 						    curbuf->b_ml.ml_line_count
 						    || curbuf->b_p_eol)))
@@ -4243,7 +4476,7 @@
 			}
 			_exit(0);
 		    }
-		    else
+		    else /* parent */
 		    {
 			close(toshell_fd);
 			toshell_fd = -1;
@@ -4430,7 +4663,7 @@
 		    ++noread_cnt;
 		    while (RealWaitForChar(fromshell_fd, 10L, NULL))
 		    {
-			len = read(fromshell_fd, (char *)buffer
+			len = read_eintr(fromshell_fd, buffer
 # ifdef FEAT_MBYTE
 				+ buffer_off, (size_t)(BUFLEN - buffer_off)
 # else
@@ -4540,7 +4773,7 @@
 		     * typed characters (otherwise we would lose typeahead).
 		     */
 # ifdef __NeXT__
-		    wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *) 0);
+		    wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
 # else
 		    wait_pid = waitpid(pid, &status, WNOHANG);
 # endif
@@ -4555,6 +4788,11 @@
 		    }
 		    else
 			wait_pid = 0;
+
+# if defined(FEAT_XCLIPBOARD) && defined(FEAT_X11)
+		    /* Handle any X events, e.g. serving the clipboard. */
+		    clip_update();
+# endif
 		}
 finished:
 		p_more = p_more_save;
@@ -4564,10 +4802,10 @@
 		    {
 			append_ga_line(&ga);
 			/* remember that the NL was missing */
-			write_no_eol_lnum = curwin->w_cursor.lnum;
+			curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
 		    }
 		    else
-			write_no_eol_lnum = 0;
+			curbuf->b_no_eol_lnum = 0;
 		    ga_clear(&ga);
 		}
 
@@ -4581,6 +4819,45 @@
 		    close(toshell_fd);
 		close(fromshell_fd);
 	    }
+# if defined(FEAT_XCLIPBOARD) && defined(FEAT_X11)
+	    else
+	    {
+		/*
+		 * Similar to the loop above, but only handle X events, no
+		 * I/O.
+		 */
+		for (;;)
+		{
+		    if (got_int)
+		    {
+			/* CTRL-C sends a signal to the child, we ignore it
+			 * ourselves */
+#  ifdef HAVE_SETSID
+			kill(-pid, SIGINT);
+#  else
+			kill(0, SIGINT);
+#  endif
+			got_int = FALSE;
+		    }
+# ifdef __NeXT__
+		    wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
+# else
+		    wait_pid = waitpid(pid, &status, WNOHANG);
+# endif
+		    if ((wait_pid == (pid_t)-1 && errno == ECHILD)
+			    || (wait_pid == pid && WIFEXITED(status)))
+		    {
+			wait_pid = pid;
+			break;
+		    }
+
+		    /* Handle any X events, e.g. serving the clipboard. */
+		    clip_update();
+
+		    mch_delay(10L, TRUE);
+		}
+	    }
+# endif
 
 	    /*
 	     * Wait until our child has exited.
@@ -4589,38 +4866,24 @@
 	     * Don't wait if wait_pid was already set above, indicating the
 	     * child already exited.
 	     */
-	    while (wait_pid != pid)
-	    {
-# ifdef _THREAD_SAFE
-		/* Ugly hack: when compiled with Python threads are probably
-		 * used, in which case wait() sometimes hangs for no obvious
-		 * reason.  Use waitpid() instead and loop (like the GUI). */
-#  ifdef __NeXT__
-		wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
-#  else
-		wait_pid = waitpid(pid, &status, WNOHANG);
-#  endif
-		if (wait_pid == 0)
-		{
-		    /* Wait for 1/100 sec before trying again. */
-		    mch_delay(10L, TRUE);
-		    continue;
-		}
-# else
-		wait_pid = wait(&status);
-# endif
-		if (wait_pid <= 0
-# ifdef ECHILD
-			&& errno == ECHILD
+	    if (wait_pid != pid)
+		wait_pid = wait4pid(pid, &status);
+
+# ifdef FEAT_GUI
+	    /* Close slave side of pty.  Only do this after the child has
+	     * exited, otherwise the child may hang when it tries to write on
+	     * the pty. */
+	    if (pty_master_fd >= 0)
+		close(pty_slave_fd);
 # endif
-		   )
-		    break;
-	    }
 
 	    /* Make sure the child that writes to the external program is
 	     * dead. */
 	    if (wpid > 0)
+	    {
 		kill(wpid, SIGKILL);
+		wait4pid(wpid, NULL);
+	    }
 
 	    /*
 	     * Set to raw mode right now, otherwise a CTRL-C after
@@ -4635,7 +4898,7 @@
 	    {
 		/* LINTED avoid "bitwise operation on signed value" */
 		retval = WEXITSTATUS(status);
-		if (retval && !emsg_silent)
+		if (retval != 0 && !emsg_silent)
 		{
 		    if (retval == EXEC_FAILED)
 		    {
@@ -4656,6 +4919,7 @@
 	}
     }
     vim_free(argv);
+    vim_free(p_shcf_copy);
 
 error:
     if (!did_settmode)
@@ -4766,7 +5030,8 @@
 
 /*
  * Wait "msec" msec until a character is available from file descriptor "fd".
- * Time == -1 will block forever.
+ * "msec" == 0 will check for characters once.
+ * "msec" == -1 will block until a character is available.
  * When a GUI is being used, this will not be used for input -- webb
  * Returns also, when a request from Sniff is waiting -- toni.
  * Or when a Linux GPM mouse event is waiting.
@@ -5004,7 +5269,8 @@
 	/*
 	 * Select on ready for reading and exceptional condition (end of file).
 	 */
-	FD_ZERO(&rfds); /* calls bzero() on a sun */
+select_eintr:
+	FD_ZERO(&rfds);
 	FD_ZERO(&efds);
 	FD_SET(fd, &rfds);
 # if !defined(__QNX__) && !defined(__CYGWIN32__)
@@ -5028,6 +5294,10 @@
 	    FD_SET(ConnectionNumber(xterm_dpy), &rfds);
 	    if (maxfd < ConnectionNumber(xterm_dpy))
 		maxfd = ConnectionNumber(xterm_dpy);
+
+	    /* An event may have already been read but not handled.  In
+	     * particulary, XFlush may cause this. */
+	    xterm_update();
 	}
 # endif
 # ifdef FEAT_MOUSE_GPM
@@ -5048,14 +5318,14 @@
 		maxfd = xsmp_icefd;
 	}
 # endif
-#ifdef FEAT_NETBEANS_INTG
+# ifdef FEAT_NETBEANS_INTG
 	if (nb_fd != -1)
 	{
 	    FD_SET(nb_fd, &rfds);
 	    if (maxfd < nb_fd)
 		maxfd = nb_fd;
 	}
-#endif
+# endif
 
 # ifdef OLD_VMS
 	/* Old VMS as v6.2 and older have broken select(). It waits more than
@@ -5064,6 +5334,21 @@
 # else
 	ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
 # endif
+# ifdef EINTR
+	if (ret == -1 && errno == EINTR)
+	{
+	    /* Check whether window has been resized, EINTR may be caused by
+	     * SIGWINCH. */
+	    if (do_resize)
+		handle_resize();
+
+	    /* Interrupted by a signal, need to try again.  We ignore msec
+	     * here, because we do want to check even after a timeout if
+	     * characters are available.  Needed for reading output of an
+	     * external command after the process has finished. */
+	    goto select_eintr;
+	}
+# endif
 # ifdef __TANDEM
 	if (ret == -1 && errno == ENOTSUP)
 	{
@@ -5071,7 +5356,7 @@
 	    FD_ZERO(&efds);
 	    ret = 0;
 	}
-#endif
+# endif
 # ifdef FEAT_MZSCHEME
 	if (ret == 0 && mzquantum_used)
 	    /* loop if MzThreads must be scheduled and timeout occurred */
@@ -5645,7 +5930,7 @@
 # if defined(__CYGWIN__) || defined(__CYGWIN32__)
     /* Translate <CR><NL> into <NL>.  Caution, buffer may contain NUL. */
     p = buffer;
-    for (i = 0; i < len; ++i)
+    for (i = 0; i < (int)len; ++i)
 	if (!(buffer[i] == CAR && buffer[i + 1] == NL))
 	    *p++ = buffer[i];
     len = p - buffer;
@@ -5693,6 +5978,7 @@
 	if (shell_style == STYLE_PRINT && !did_find_nul)
 	{
 	    /* If there is a NUL, set did_find_nul, else set check_spaces */
+	    buffer[len] = NUL;
 	    if (len && (int)STRLEN(buffer) < (int)len - 1)
 		did_find_nul = TRUE;
 	    else
@@ -5843,7 +6129,6 @@
 }
 #endif
 
-
 /*
  * Return TRUE if the string "p" contains a wildcard that mch_expandpath() can
  * expand.
@@ -6562,7 +6847,7 @@
 	    xterm_hints.x = 2;
 	return TRUE;
     }
-    if (mouse_code == NULL)
+    if (mouse_code == NULL || STRLEN(mouse_code) > 45)
     {
 	xterm_trace = 0;
 	return FALSE;
@@ -6623,6 +6908,21 @@
 # endif
 
 /*
+ * Catch up with GUI or X events.
+ */
+    static void
+clip_update()
+{
+# ifdef FEAT_GUI
+    if (gui.in_use)
+	gui_mch_update();
+    else
+# endif
+    if (xterm_Shell != (Widget)0)
+	xterm_update();
+}
+
+/*
  * Catch up with any queued X events.  This may put keyboard input into the
  * input buffer, call resize call-backs, trigger timers etc.  If there is
  * nothing in the X event queue (& no timers pending), then we return
diff -Naur vim73.orig/src/os_unix.h vim73/src/os_unix.h
--- vim73.orig/src/os_unix.h	2010-05-23 12:16:14.000000000 +0000
+++ vim73/src/os_unix.h	2013-08-04 19:09:10.537277413 +0000
@@ -184,10 +184,6 @@
 
 #define BASENAMELEN	(MAXNAMLEN - 5)
 
-#ifdef HAVE_ERRNO_H
-# include <errno.h>
-#endif
-
 #ifdef HAVE_PWD_H
 # include <pwd.h>
 #endif
@@ -202,6 +198,9 @@
 # define HAVE_TOTAL_MEM
 #endif
 
+
+#ifndef PROTO
+
 #ifdef VMS
 # include <unixio.h>
 # include <unixlib.h>
@@ -230,7 +229,11 @@
 # ifdef FEAT_GUI_GTK
 #  include "gui_gtk_vms.h"
 # endif
+#endif
+
+#endif /* PROTO */
 
+#ifdef VMS
 typedef struct dsc$descriptor   DESC;
 #endif
 
@@ -291,11 +294,24 @@
 # endif
 #endif
 
-#if !defined(USR_VIMRC_FILE2) && defined(OS2)
-# define USR_VIMRC_FILE2 "$VIM/.vimrc"
+
+#if !defined(USR_EXRC_FILE2)
+# ifdef OS2
+#  define USR_VIMRC_FILE2	"$HOME/vimfiles/vimrc"
+# else
+#  ifdef VMS
+#   define USR_VIMRC_FILE2	"sys$login:vimfiles:vimrc"
+#  else
+#    define USR_VIMRC_FILE2	"~/.vim/vimrc"
+#  endif
+# endif
+#endif
+
+#if !defined(USR_VIMRC_FILE3) && defined(OS2)
+# define USR_VIMRC_FILE3 "$VIM/.vimrc"
 #endif
-#if !defined(USR_VIMRC_FILE2) && defined(VMS)
-# define USR_VIMRC_FILE2 "sys$login:_vimrc"
+#if !defined(USR_VIMRC_FILE3) && defined(VMS)
+# define USR_VIMRC_FILE3 "sys$login:_vimrc"
 #endif
 
 #ifndef USR_GVIMRC_FILE
@@ -306,9 +322,21 @@
 # endif
 #endif
 
+#ifndef USR_GVIMRC_FILE2
+# ifdef OS2
+#  define USR_GVIMRC_FILE2	"$HOME/vimfiles/gvimrc"
+# else
+#  ifdef VMS
+#   define USR_GVIMRC_FILE2	"sys$login:vimfiles:gvimrc"
+#  else
+#   define USR_GVIMRC_FILE2	"~/.vim/gvimrc"
+#  endif
+# endif
+#endif
+
 #ifdef VMS
-# ifndef USR_GVIMRC_FILE2
-#  define USR_GVIMRC_FILE2  "sys$login:_gvimrc"
+# ifndef USR_GVIMRC_FILE3
+#  define USR_GVIMRC_FILE3  "sys$login:_gvimrc"
 # endif
 #endif
 
diff -Naur vim73.orig/src/os_win16.c vim73/src/os_win16.c
--- vim73.orig/src/os_win16.c	2010-06-26 04:03:31.000000000 +0000
+++ vim73/src/os_win16.c	2013-08-04 19:09:10.547277383 +0000
@@ -20,20 +20,25 @@
 # pragma warn -obs
 #endif
 
-#include "vimio.h"
 #include "vim.h"
 
-#include <dos.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <dos.h>
+#endif
+
 #include <string.h>
 #include <sys/types.h>
-#include <errno.h>
 #include <signal.h>
 #include <limits.h>
-#include <process.h>
 
-#undef chdir
-#include <direct.h>
-#include <shellapi.h>	/* required for FindExecutable() */
+#ifndef PROTO
+# include <process.h>
+
+# undef chdir
+# include <direct.h>
+# include <shellapi.h>	/* required for FindExecutable() */
+#endif
 
 
 /* Record all output and all keyboard & mouse input */
@@ -245,9 +250,9 @@
 	/* Wait for the command to terminate before continuing */
 	while (GetModuleUsage((HINSTANCE)h_module) > 0 && again )
 	{
-	    while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) && again )
+	    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && again)
 	    {
-		if(msg.message == WM_QUIT)
+		if (msg.message == WM_QUIT)
 
 		{
 		    PostQuitMessage(msg.wParam);
@@ -381,13 +386,13 @@
 
 
 /*
- * How much memory is available?
+ * How much memory is available in Kbyte?
  */
     long_u
 mch_avail_mem(
     int special)
 {
-    return GetFreeSpace(0);
+    return GetFreeSpace(0) >> 10;
 }
 
 
diff -Naur vim73.orig/src/os_win16.h vim73/src/os_win16.h
--- vim73.orig/src/os_win16.h	2010-05-15 11:04:06.000000000 +0000
+++ vim73/src/os_win16.h	2013-08-04 19:09:10.547277383 +0000
@@ -50,7 +50,7 @@
 #endif
 
 /* toupper() is not really broken, but it's very slow.	Probably because of
- * using unicde characters on Windows NT */
+ * using unicode characters on Windows NT */
 #define BROKEN_TOUPPER
 
 #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
@@ -63,16 +63,21 @@
 
 #include <stdlib.h>
 #include <time.h>
-#include <dos.h>
-#include <dir.h>
 
-#ifndef STRICT
-# define STRICT
-#endif
-#ifndef COBJMACROS
-# define COBJMACROS	/* For OLE: Enable "friendlier" access to objects */
-#endif
-#include <windows.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <dos.h>
+# include <dir.h>
+
+# ifndef STRICT
+#  define STRICT
+# endif
+# ifndef COBJMACROS
+#  define COBJMACROS	/* For OLE: Enable "friendlier" access to objects */
+# endif
+# include <windows.h>
+
+#endif /* PROTO */
 
 /*
  *  plenty of memory, use large buffers
diff -Naur vim73.orig/src/os_win32.c vim73/src/os_win32.c
--- vim73.orig/src/os_win32.c	2010-07-14 14:49:36.000000000 +0000
+++ vim73/src/os_win32.c	2013-08-04 19:09:10.553944029 +0000
@@ -20,7 +20,6 @@
  * Roger Knobbe <rogerk@wonderware.com> did the initial port of Vim 3.0.
  */
 
-#include "vimio.h"
 #include "vim.h"
 
 #ifdef FEAT_MZSCHEME
@@ -28,10 +27,13 @@
 #endif
 
 #include <sys/types.h>
-#include <errno.h>
 #include <signal.h>
 #include <limits.h>
-#include <process.h>
+
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <process.h>
+#endif
 
 #undef chdir
 #ifdef __GNUC__
@@ -42,8 +44,10 @@
 # include <direct.h>
 #endif
 
-#if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
-# include <shellapi.h>
+#ifndef PROTO
+# if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
+#  include <shellapi.h>
+# endif
 #endif
 
 #ifdef __MINGW32__
@@ -74,6 +78,16 @@
 # endif
 #endif
 
+/*
+ * Reparse Point
+ */
+#ifndef FILE_ATTRIBUTE_REPARSE_POINT
+# define FILE_ATTRIBUTE_REPARSE_POINT	0x00000400
+#endif
+#ifndef IO_REPARSE_TAG_SYMLINK
+# define IO_REPARSE_TAG_SYMLINK		0xA000000C
+#endif
+
 /* Record all output and all keyboard & mouse input */
 /* #define MCH_WRITE_DUMP */
 
@@ -127,6 +141,10 @@
 typedef int WORD;
 typedef int WCHAR;
 typedef void VOID;
+typedef int BY_HANDLE_FILE_INFORMATION;
+typedef int SE_OBJECT_TYPE;
+typedef int PSNSECINFO;
+typedef int PSNSECINFOW;
 #endif
 
 #ifndef FEAT_GUI_W32
@@ -154,6 +172,18 @@
 # define wcsicmp(a, b) wcscmpi((a), (b))
 #endif
 
+#ifndef PROTO
+
+/* Enable common dialogs input unicode from IME if possible. */
+#ifdef FEAT_MBYTE
+LRESULT (WINAPI *pDispatchMessage)(CONST MSG *) = DispatchMessage;
+BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage;
+BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage;
+BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage;
+#endif
+
+#endif /* PROTO */
+
 #ifndef FEAT_GUI_W32
 /* Win32 Console handles for input and output */
 static HANDLE g_hConIn  = INVALID_HANDLE_VALUE;
@@ -202,59 +232,138 @@
 static char *vimrun_path = "vimrun ";
 #endif
 
+static int win32_getattrs(char_u *name);
+static int win32_setattrs(char_u *name, int attrs);
+static int win32_set_archive(char_u *name);
+
 #ifndef FEAT_GUI_W32
 static int suppress_winsize = 1;	/* don't fiddle with console */
 #endif
 
+static char_u *exe_path = NULL;
+
     static void
 get_exe_name(void)
 {
-    char	temp[256];
-    static int	did_set_PATH = FALSE;
+    /* Maximum length of $PATH is more than MAXPATHL.  8191 is often mentioned
+     * as the maximum length that works (plus a NUL byte). */
+#define MAX_ENV_PATH_LEN 8192
+    char	temp[MAX_ENV_PATH_LEN];
+    char_u	*p;
 
     if (exe_name == NULL)
     {
 	/* store the name of the executable, may be used for $VIM */
-	GetModuleFileName(NULL, temp, 255);
+	GetModuleFileName(NULL, temp, MAX_ENV_PATH_LEN - 1);
 	if (*temp != NUL)
 	    exe_name = FullName_save((char_u *)temp, FALSE);
     }
 
-    if (!did_set_PATH && exe_name != NULL)
+    if (exe_path == NULL && exe_name != NULL)
     {
-	char_u	    *p;
-	char_u	    *newpath;
-
-	/* Append our starting directory to $PATH, so that when doing "!xxd"
-	 * it's found in our starting directory.  Needed because SearchPath()
-	 * also looks there. */
-	p = mch_getenv("PATH");
-	newpath = alloc((unsigned)(STRLEN(p) + STRLEN(exe_name) + 2));
-	if (newpath != NULL)
-	{
-	    STRCPY(newpath, p);
-	    STRCAT(newpath, ";");
-	    vim_strncpy(newpath + STRLEN(newpath), exe_name,
-					    gettail_sep(exe_name) - exe_name);
-	    vim_setenv((char_u *)"PATH", newpath);
-	    vim_free(newpath);
+	exe_path = vim_strnsave(exe_name,
+				     (int)(gettail_sep(exe_name) - exe_name));
+	if (exe_path != NULL)
+	{
+	    /* Append our starting directory to $PATH, so that when doing
+	     * "!xxd" it's found in our starting directory.  Needed because
+	     * SearchPath() also looks there. */
+	    p = mch_getenv("PATH");
+	    if (p == NULL
+		       || STRLEN(p) + STRLEN(exe_path) + 2 < MAX_ENV_PATH_LEN)
+	    {
+		if (p == NULL || *p == NUL)
+		    temp[0] = NUL;
+		else
+		{
+		    STRCPY(temp, p);
+		    STRCAT(temp, ";");
+		}
+		STRCAT(temp, exe_path);
+		vim_setenv((char_u *)"PATH", temp);
+	    }
 	}
+    }
+}
+
+/*
+ * Unescape characters in "p" that appear in "escaped".
+ */
+    static void
+unescape_shellxquote(char_u *p, char_u *escaped)
+{
+    int	    l = (int)STRLEN(p);
+    int	    n;
+
+    while (*p != NUL)
+    {
+	if (*p == '^' && vim_strchr(escaped, p[1]) != NULL)
+	    mch_memmove(p, p + 1, l--);
+#ifdef FEAT_MBYTE
+	n = (*mb_ptr2len)(p);
+#else
+	n = 1;
+#endif
+	p += n;
+	l -= n;
+    }
+}
+
+/*
+ * Load library "name".
+ */
+    HINSTANCE
+vimLoadLib(char *name)
+{
+    HINSTANCE	dll = NULL;
+    char	old_dir[MAXPATHL];
 
-	did_set_PATH = TRUE;
+    /* NOTE: Do not use mch_dirname() and mch_chdir() here, they may call
+     * vimLoadLib() recursively, which causes a stack overflow. */
+    if (exe_path == NULL)
+	get_exe_name();
+    if (exe_path != NULL)
+    {
+#ifdef FEAT_MBYTE
+	WCHAR old_dirw[MAXPATHL];
+
+	if (GetCurrentDirectoryW(MAXPATHL, old_dirw) != 0)
+	{
+	    /* Change directory to where the executable is, both to make
+	     * sure we find a .dll there and to avoid looking for a .dll
+	     * in the current directory. */
+	    SetCurrentDirectory(exe_path);
+	    dll = LoadLibrary(name);
+	    SetCurrentDirectoryW(old_dirw);
+	    return dll;
+	}
+	/* Retry with non-wide function (for Windows 98). */
+	if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+#endif
+	    if (GetCurrentDirectory(MAXPATHL, old_dir) != 0)
+	    {
+		/* Change directory to where the executable is, both to make
+		 * sure we find a .dll there and to avoid looking for a .dll
+		 * in the current directory. */
+		SetCurrentDirectory(exe_path);
+		dll = LoadLibrary(name);
+		SetCurrentDirectory(old_dir);
+	    }
     }
+    return dll;
 }
 
 #if defined(DYNAMIC_GETTEXT) || defined(PROTO)
 # ifndef GETTEXT_DLL
 #  define GETTEXT_DLL "libintl.dll"
 # endif
-/* Dummy funcitons */
+/* Dummy functions */
 static char *null_libintl_gettext(const char *);
 static char *null_libintl_textdomain(const char *);
 static char *null_libintl_bindtextdomain(const char *, const char *);
 static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
 
-static HINSTANCE hLibintlDLL = 0;
+static HINSTANCE hLibintlDLL = NULL;
 char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
 char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
 char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
@@ -282,26 +391,16 @@
     if (hLibintlDLL)
 	return 1;
     /* Load gettext library (libintl.dll) */
-    hLibintlDLL = LoadLibrary(libname != NULL ? libname : GETTEXT_DLL);
+    hLibintlDLL = vimLoadLib(libname != NULL ? libname : GETTEXT_DLL);
     if (!hLibintlDLL)
     {
-	char_u	    dirname[_MAX_PATH];
-
-	/* Try using the path from gvim.exe to find the .dll there. */
-	get_exe_name();
-	STRCPY(dirname, exe_name);
-	STRCPY(gettail(dirname), GETTEXT_DLL);
-	hLibintlDLL = LoadLibrary((char *)dirname);
-	if (!hLibintlDLL)
+	if (p_verbose > 0)
 	{
-	    if (p_verbose > 0)
-	    {
-		verbose_enter();
-		EMSG2(_(e_loadlib), GETTEXT_DLL);
-		verbose_leave();
-	    }
-	    return 0;
+	    verbose_enter();
+	    EMSG2(_(e_loadlib), GETTEXT_DLL);
+	    verbose_leave();
 	}
+	return 0;
     }
     for (i = 0; libintl_entry[i].name != NULL
 					 && libintl_entry[i].ptr != NULL; ++i)
@@ -382,20 +481,78 @@
 DWORD g_PlatformId;
 
 #ifdef HAVE_ACL
-# include <aclapi.h>
+# ifndef PROTO
+#  include <aclapi.h>
+# endif
+# ifndef PROTECTED_DACL_SECURITY_INFORMATION
+#  define PROTECTED_DACL_SECURITY_INFORMATION	0x80000000L
+# endif
+
 /*
  * These are needed to dynamically load the ADVAPI DLL, which is not
  * implemented under Windows 95 (and causes VIM to crash)
  */
-typedef DWORD (WINAPI *PSNSECINFO) (LPTSTR, enum SE_OBJECT_TYPE,
+typedef DWORD (WINAPI *PSNSECINFO) (LPSTR, SE_OBJECT_TYPE,
+	SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
+typedef DWORD (WINAPI *PGNSECINFO) (LPSTR, SE_OBJECT_TYPE,
+	SECURITY_INFORMATION, PSID *, PSID *, PACL *, PACL *,
+	PSECURITY_DESCRIPTOR *);
+# ifdef FEAT_MBYTE
+typedef DWORD (WINAPI *PSNSECINFOW) (LPWSTR, SE_OBJECT_TYPE,
 	SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
-typedef DWORD (WINAPI *PGNSECINFO) (LPSTR, enum SE_OBJECT_TYPE,
+typedef DWORD (WINAPI *PGNSECINFOW) (LPWSTR, SE_OBJECT_TYPE,
 	SECURITY_INFORMATION, PSID *, PSID *, PACL *, PACL *,
 	PSECURITY_DESCRIPTOR *);
+# endif
 
 static HANDLE advapi_lib = NULL;	/* Handle for ADVAPI library */
 static PSNSECINFO pSetNamedSecurityInfo;
 static PGNSECINFO pGetNamedSecurityInfo;
+# ifdef FEAT_MBYTE
+static PSNSECINFOW pSetNamedSecurityInfoW;
+static PGNSECINFOW pGetNamedSecurityInfoW;
+# endif
+#endif
+
+typedef BOOL (WINAPI *PSETHANDLEINFORMATION)(HANDLE, DWORD, DWORD);
+
+static BOOL allowPiping = FALSE;
+static PSETHANDLEINFORMATION pSetHandleInformation;
+
+#ifdef HAVE_ACL
+/*
+ * Enables or disables the specified privilege.
+ */
+    static BOOL
+win32_enable_privilege(LPTSTR lpszPrivilege, BOOL bEnable)
+{
+    BOOL             bResult;
+    LUID             luid;
+    HANDLE           hToken;
+    TOKEN_PRIVILEGES tokenPrivileges;
+
+    if (!OpenProcessToken(GetCurrentProcess(),
+		TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
+	return FALSE;
+
+    if (!LookupPrivilegeValue(NULL, lpszPrivilege, &luid))
+    {
+	CloseHandle(hToken);
+	return FALSE;
+    }
+
+    tokenPrivileges.PrivilegeCount           = 1;
+    tokenPrivileges.Privileges[0].Luid       = luid;
+    tokenPrivileges.Privileges[0].Attributes = bEnable ?
+						    SE_PRIVILEGE_ENABLED : 0;
+
+    bResult = AdjustTokenPrivileges(hToken, FALSE, &tokenPrivileges,
+	    sizeof(TOKEN_PRIVILEGES), NULL, NULL);
+
+    CloseHandle(hToken);
+
+    return bResult && GetLastError() == ERROR_SUCCESS;
+}
 #endif
 
 /*
@@ -430,24 +587,49 @@
 	     * Seems like a lot of overhead to load/unload ADVAPI32.DLL each
 	     * time we verify security...
 	     */
-	    advapi_lib = LoadLibrary("ADVAPI32.DLL");
+	    advapi_lib = vimLoadLib("ADVAPI32.DLL");
 	    if (advapi_lib != NULL)
 	    {
 		pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib,
 						      "SetNamedSecurityInfoA");
 		pGetNamedSecurityInfo = (PGNSECINFO)GetProcAddress(advapi_lib,
 						      "GetNamedSecurityInfoA");
+# ifdef FEAT_MBYTE
+		pSetNamedSecurityInfoW = (PSNSECINFOW)GetProcAddress(advapi_lib,
+						      "SetNamedSecurityInfoW");
+		pGetNamedSecurityInfoW = (PGNSECINFOW)GetProcAddress(advapi_lib,
+						      "GetNamedSecurityInfoW");
+# endif
 		if (pSetNamedSecurityInfo == NULL
-			|| pGetNamedSecurityInfo == NULL)
+			|| pGetNamedSecurityInfo == NULL
+# ifdef FEAT_MBYTE
+			|| pSetNamedSecurityInfoW == NULL
+			|| pGetNamedSecurityInfoW == NULL
+# endif
+			)
 		{
 		    /* If we can't get the function addresses, set advapi_lib
 		     * to NULL so that we don't use them. */
 		    FreeLibrary(advapi_lib);
 		    advapi_lib = NULL;
 		}
+		/* Enable privilege for getting or setting SACLs. */
+		win32_enable_privilege(SE_SECURITY_NAME, TRUE);
 	    }
 	}
 #endif
+	/*
+	 * If we are on windows NT, try to load the pipe functions, only
+	 * available from Win2K.
+	 */
+	if (g_PlatformId == VER_PLATFORM_WIN32_NT)
+	{
+	    HANDLE kernel32 = GetModuleHandle("kernel32");
+	    pSetHandleInformation = (PSETHANDLEINFORMATION)GetProcAddress(
+					    kernel32, "SetHandleInformation");
+
+	    allowPiping = pSetHandleInformation != NULL;
+	}
 	done = TRUE;
     }
 }
@@ -930,7 +1112,7 @@
 	    DWORD dwLR = (pmer->dwButtonState & LEFT_RIGHT);
 
 	    /* if either left or right button only is pressed, see if the
-	     * the next mouse event has both of them pressed */
+	     * next mouse event has both of them pressed */
 	    if (dwLR == LEFT || dwLR == RIGHT)
 	    {
 		for (;;)
@@ -1342,7 +1524,7 @@
 
 
 /*
- * mch_inchar(): low-level input funcion.
+ * mch_inchar(): low-level input function.
  * Get one or more characters from the keyboard or the mouse.
  * If time == 0, do not wait for characters.
  * If time == n, wait a short time for characters.
@@ -1364,6 +1546,11 @@
 #define TYPEAHEADLEN 20
     static char_u   typeahead[TYPEAHEADLEN];	/* previously typed bytes. */
     static int	    typeaheadlen = 0;
+#ifdef FEAT_MBYTE
+    static char_u   *rest = NULL;	/* unconverted rest of previous read */
+    static int	    restlen = 0;
+    int		    unconverted;
+#endif
 
     /* First use any typeahead that was kept because "buf" was too small. */
     if (typeaheadlen > 0)
@@ -1467,6 +1654,33 @@
 
 	    c = tgetch(&modifiers, &ch2);
 
+#ifdef FEAT_MBYTE
+	    /* stolen from fill_input_buf() in ui.c */
+	    if (rest != NULL)
+	    {
+		/* Use remainder of previous call, starts with an invalid
+		 * character that may become valid when reading more. */
+		if (restlen > TYPEAHEADLEN - typeaheadlen)
+		    unconverted = TYPEAHEADLEN - typeaheadlen;
+		else
+		    unconverted = restlen;
+		mch_memmove(typeahead + typeaheadlen, rest, unconverted);
+		if (unconverted == restlen)
+		{
+		    vim_free(rest);
+		    rest = NULL;
+		}
+		else
+		{
+		    restlen -= unconverted;
+		    mch_memmove(rest, rest + unconverted, restlen);
+		}
+		typeaheadlen += unconverted;
+	    }
+	    else
+		unconverted = 0;
+#endif
+
 	    if (typebuf_changed(tb_change_cnt))
 	    {
 		/* "buf" may be invalid now if a client put something in the
@@ -1502,8 +1716,12 @@
 		 * when 'tenc' is set. */
 		if (input_conv.vc_type != CONV_NONE
 						&& (ch2 == NUL || c != K_NUL))
-		    n = convert_input(typeahead + typeaheadlen, n,
-						 TYPEAHEADLEN - typeaheadlen);
+		{
+		    typeaheadlen -= unconverted;
+		    n = convert_input_safe(typeahead + typeaheadlen,
+				n + unconverted, TYPEAHEADLEN - typeaheadlen,
+				rest == NULL ? &rest : NULL, &restlen);
+		}
 #endif
 
 		/* Use the ALT key to set the 8th bit of the character
@@ -1570,8 +1788,10 @@
 #endif /* FEAT_GUI_W32 */
 }
 
-#ifndef __MINGW32__
-# include <shellapi.h>	/* required for FindExecutable() */
+#ifndef PROTO
+# ifndef __MINGW32__
+#  include <shellapi.h>	/* required for FindExecutable() */
+# endif
 #endif
 
 /*
@@ -1615,6 +1835,35 @@
     return TRUE;
 }
 
+#if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
+       __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
+/*
+ * Bad parameter handler.
+ *
+ * Certain MS CRT functions will intentionally crash when passed invalid
+ * parameters to highlight possible security holes.  Setting this function as
+ * the bad parameter handler will prevent the crash.
+ *
+ * In debug builds the parameters contain CRT information that might help track
+ * down the source of a problem, but in non-debug builds the arguments are all
+ * NULL/0.  Debug builds will also produce assert dialogs from the CRT, it is
+ * worth allowing these to make debugging of issues easier.
+ */
+    static void
+bad_param_handler(const wchar_t *expression,
+    const wchar_t *function,
+    const wchar_t *file,
+    unsigned int line,
+    uintptr_t pReserved)
+{
+}
+
+# define SET_INVALID_PARAM_HANDLER \
+	((void)_set_invalid_parameter_handler(bad_param_handler))
+#else
+# define SET_INVALID_PARAM_HANDLER
+#endif
+
 #ifdef FEAT_GUI_W32
 
 /*
@@ -1627,6 +1876,9 @@
     extern int _fmode;
 #endif
 
+    /* Silently handle invalid parameters to CRT functions */
+    SET_INVALID_PARAM_HANDLER;
+
     /* Let critical errors result in a failure, not in a dialog box.  Required
      * for the timestamp test to work on removed floppies. */
     SetErrorMode(SEM_FAILCRITICALERRORS);
@@ -1679,16 +1931,7 @@
 	set_option_value((char_u *)"grepprg", 0, (char_u *)"grep -n", 0);
 
 #ifdef FEAT_CLIPBOARD
-    clip_init(TRUE);
-
-    /*
-     * Vim's own clipboard format recognises whether the text is char, line,
-     * or rectangular block.  Only useful for copying between two Vims.
-     * "VimClipboard" was used for previous versions, using the first
-     * character to specify MCHAR, MLINE or MBLOCK.
-     */
-    clip_star.format = RegisterClipboardFormat("VimClipboard2");
-    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
+    win_clip_init();
 #endif
 }
 
@@ -1835,8 +2078,7 @@
 	cb->BufferSize.X = cb->Info.dwSize.X;
 	cb->BufferSize.Y = cb->Info.dwSize.Y;
 	NumCells = cb->BufferSize.X * cb->BufferSize.Y;
-	if (cb->Buffer != NULL)
-	    vim_free(cb->Buffer);
+	vim_free(cb->Buffer);
 	cb->Buffer = (PCHAR_INFO)alloc(NumCells * sizeof(CHAR_INFO));
 	if (cb->Buffer == NULL)
 	    return FALSE;
@@ -2103,6 +2345,9 @@
     extern int _fmode;
 #endif
 
+    /* Silently handle invalid parameters to CRT functions */
+    SET_INVALID_PARAM_HANDLER;
+
     /* Let critical errors result in a failure, not in a dialog box.  Required
      * for the timestamp test to work on removed floppies. */
     SetErrorMode(SEM_FAILCRITICALERRORS);
@@ -2171,16 +2416,7 @@
 #endif
 
 #ifdef FEAT_CLIPBOARD
-    clip_init(TRUE);
-
-    /*
-     * Vim's own clipboard format recognises whether the text is char, line, or
-     * rectangular block.  Only useful for copying between two Vims.
-     * "VimClipboard" was used for previous versions, using the first
-     * character to specify MCHAR, MLINE or MBLOCK.
-     */
-    clip_star.format = RegisterClipboardFormat("VimClipboard2");
-    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
+    win_clip_init();
 #endif
 
     /* This will be NULL on anything but NT 4.0 */
@@ -2273,12 +2509,14 @@
     int		len)
 {
     char		szTrueName[_MAX_PATH + 2];
+    char		szTrueNameTemp[_MAX_PATH + 2];
     char		*ptrue, *ptruePrev;
     char		*porig, *porigPrev;
     int			flen;
     WIN32_FIND_DATA	fb;
     HANDLE		hFind;
     int			c;
+    int			slen;
 
     flen = (int)STRLEN(name);
     if (flen == 0 || flen > _MAX_PATH)
@@ -2323,12 +2561,19 @@
 	}
 	*ptrue = NUL;
 
+	/* To avoid a slow failure append "\*" when searching a directory,
+	 * server or network share. */
+	STRCPY(szTrueNameTemp, szTrueName);
+	slen = (int)strlen(szTrueNameTemp);
+	if (*porig == psepc && slen + 2 < _MAX_PATH)
+	    STRCPY(szTrueNameTemp + slen, "\\*");
+
 	/* Skip "", "." and "..". */
 	if (ptrue > ptruePrev
 		&& (ptruePrev[0] != '.'
 		    || (ptruePrev[1] != NUL
 			&& (ptruePrev[1] != '.' || ptruePrev[2] != NUL)))
-		&& (hFind = FindFirstFile(szTrueName, &fb))
+		&& (hFind = FindFirstFile(szTrueNameTemp, &fb))
 						      != INVALID_HANDLE_VALUE)
 	{
 	    c = *porig;
@@ -2458,57 +2703,54 @@
 /*
  * get file permissions for `name'
  * -1 : error
- * else FILE_ATTRIBUTE_* defined in winnt.h
+ * else mode_t
  */
     long
 mch_getperm(char_u *name)
 {
-#ifdef FEAT_MBYTE
-    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-    {
-	WCHAR	*p = enc_to_utf16(name, NULL);
-	long	n;
+    struct stat st;
+    int n;
 
-	if (p != NULL)
-	{
-	    n = (long)GetFileAttributesW(p);
-	    vim_free(p);
-	    if (n >= 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
-		return n;
-	    /* Retry with non-wide function (for Windows 98). */
-	}
-    }
-#endif
-    return (long)GetFileAttributes((char *)name);
+    n = mch_stat(name, &st);
+    return n == 0 ? (int)st.st_mode : -1;
 }
 
 
 /*
  * set file permission for `name' to `perm'
+ *
+ * return FAIL for failure, OK otherwise
  */
     int
 mch_setperm(
     char_u  *name,
     long    perm)
 {
-    perm |= FILE_ATTRIBUTE_ARCHIVE;	/* file has changed, set archive bit */
+    long	n;
 #ifdef FEAT_MBYTE
+    WCHAR *p;
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
-	WCHAR	*p = enc_to_utf16(name, NULL);
-	long	n;
+	p = enc_to_utf16(name, NULL);
 
 	if (p != NULL)
 	{
-	    n = (long)SetFileAttributesW(p, perm);
+	    n = _wchmod(p, perm);
 	    vim_free(p);
-	    if (n || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
-		return n ? OK : FAIL;
+	    if (n == -1 && GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
+		return FAIL;
 	    /* Retry with non-wide function (for Windows 98). */
 	}
     }
+    if (p == NULL)
 #endif
-    return SetFileAttributes((char *)name, perm) ? OK : FAIL;
+	n = _chmod(name, perm);
+    if (n == -1)
+	return FAIL;
+
+    win32_set_archive(name);
+
+    return OK;
 }
 
 /*
@@ -2517,91 +2759,167 @@
     void
 mch_hide(char_u *name)
 {
-    int		perm;
-#ifdef FEAT_MBYTE
-    WCHAR	*p = NULL;
+    int attrs = win32_getattrs(name);
+    if (attrs == -1)
+	return;
+
+    attrs |= FILE_ATTRIBUTE_HIDDEN;
+    win32_setattrs(name, attrs);
+}
+
+/*
+ * return TRUE if "name" is a directory
+ * return FALSE if "name" is not a directory or upon error
+ */
+    int
+mch_isdir(char_u *name)
+{
+    int f = win32_getattrs(name);
+
+    if (f == -1)
+	return FALSE;		    /* file does not exist at all */
 
+    return (f & FILE_ATTRIBUTE_DIRECTORY) != 0;
+}
+
+/*
+ * Create directory "name".
+ * Return 0 on success, -1 on error.
+ */
+    int
+mch_mkdir(char_u *name)
+{
+#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
+	WCHAR	*p;
+	int	retval;
+
 	p = enc_to_utf16(name, NULL);
+	if (p == NULL)
+	    return -1;
+	retval = _wmkdir(p);
+	vim_free(p);
+	return retval;
+    }
 #endif
+    return _mkdir(name);
+}
+
+/*
+ * Return TRUE if file "fname" has more than one link.
+ */
+    int
+mch_is_hard_link(char_u *fname)
+{
+    BY_HANDLE_FILE_INFORMATION info;
 
+    return win32_fileinfo(fname, &info) == FILEINFO_OK
+						   && info.nNumberOfLinks > 1;
+}
+
+/*
+ * Return TRUE if file "fname" is a symbolic link.
+ */
+    int
+mch_is_symbolic_link(char_u *fname)
+{
+    HANDLE		hFind;
+    int			res = FALSE;
+    WIN32_FIND_DATAA	findDataA;
+    DWORD		fileFlags = 0, reparseTag = 0;
 #ifdef FEAT_MBYTE
-    if (p != NULL)
+    WCHAR		*wn = NULL;
+    WIN32_FIND_DATAW	findDataW;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+	wn = enc_to_utf16(fname, NULL);
+    if (wn != NULL)
     {
-	perm = GetFileAttributesW(p);
-	if (perm < 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+	hFind = FindFirstFileW(wn, &findDataW);
+	vim_free(wn);
+	if (hFind == INVALID_HANDLE_VALUE
+		&& GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
 	{
 	    /* Retry with non-wide function (for Windows 98). */
-	    vim_free(p);
-	    p = NULL;
+	    hFind = FindFirstFile(fname, &findDataA);
+	    if (hFind != INVALID_HANDLE_VALUE)
+	    {
+		fileFlags = findDataA.dwFileAttributes;
+		reparseTag = findDataA.dwReserved0;
+	    }
+	}
+	else
+	{
+	    fileFlags = findDataW.dwFileAttributes;
+	    reparseTag = findDataW.dwReserved0;
 	}
     }
-    if (p == NULL)
+    else
 #endif
-	perm = GetFileAttributes((char *)name);
-    if (perm >= 0)
     {
-	perm |= FILE_ATTRIBUTE_HIDDEN;
-#ifdef FEAT_MBYTE
-	if (p != NULL)
+	hFind = FindFirstFile(fname, &findDataA);
+	if (hFind != INVALID_HANDLE_VALUE)
 	{
-	    if (SetFileAttributesW(p, perm) == 0
-		    && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
-	    {
-		/* Retry with non-wide function (for Windows 98). */
-		vim_free(p);
-		p = NULL;
-	    }
+	    fileFlags = findDataA.dwFileAttributes;
+	    reparseTag = findDataA.dwReserved0;
 	}
-	if (p == NULL)
-#endif
-	    SetFileAttributes((char *)name, perm);
     }
-#ifdef FEAT_MBYTE
-    vim_free(p);
-#endif
+
+    if (hFind != INVALID_HANDLE_VALUE)
+	FindClose(hFind);
+
+    if ((fileFlags & FILE_ATTRIBUTE_REPARSE_POINT)
+	    && reparseTag == IO_REPARSE_TAG_SYMLINK)
+	res = TRUE;
+
+    return res;
 }
 
 /*
- * return TRUE if "name" is a directory
- * return FALSE if "name" is not a directory or upon error
+ * Return TRUE if file "fname" has more than one link or if it is a symbolic
+ * link.
  */
     int
-mch_isdir(char_u *name)
+mch_is_linked(char_u *fname)
 {
-    int f = mch_getperm(name);
-
-    if (f == -1)
-	return FALSE;		    /* file does not exist at all */
-
-    return (f & FILE_ATTRIBUTE_DIRECTORY) != 0;
+    if (mch_is_hard_link(fname) || mch_is_symbolic_link(fname))
+	return TRUE;
+    return FALSE;
 }
 
 /*
- * Return TRUE if file "fname" has more than one link.
+ * Get the by-handle-file-information for "fname".
+ * Returns FILEINFO_OK when OK.
+ * returns FILEINFO_ENC_FAIL when enc_to_utf16() failed.
+ * Returns FILEINFO_READ_FAIL when CreateFile() failed.
+ * Returns FILEINFO_INFO_FAIL when GetFileInformationByHandle() failed.
  */
     int
-mch_is_linked(char_u *fname)
+win32_fileinfo(char_u *fname, BY_HANDLE_FILE_INFORMATION *info)
 {
     HANDLE	hFile;
-    int		res = 0;
-    BY_HANDLE_FILE_INFORMATION inf;
+    int		res = FILEINFO_READ_FAIL;
 #ifdef FEAT_MBYTE
     WCHAR	*wn = NULL;
 
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+    {
 	wn = enc_to_utf16(fname, NULL);
+	if (wn == NULL)
+	    res = FILEINFO_ENC_FAIL;
+    }
     if (wn != NULL)
     {
 	hFile = CreateFileW(wn,		/* file name */
 		    GENERIC_READ,	/* access mode */
-		    0,			/* share mode */
+		    FILE_SHARE_READ | FILE_SHARE_WRITE,	/* share mode */
 		    NULL,		/* security descriptor */
 		    OPEN_EXISTING,	/* creation disposition */
-		    0,			/* file attributes */
+		    FILE_FLAG_BACKUP_SEMANTICS,	/* file attributes */
 		    NULL);		/* handle to template file */
 	if (hFile == INVALID_HANDLE_VALUE
-		&& GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+			      && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
 	{
 	    /* Retry with non-wide function (for Windows 98). */
 	    vim_free(wn);
@@ -2612,17 +2930,18 @@
 #endif
 	hFile = CreateFile(fname,	/* file name */
 		    GENERIC_READ,	/* access mode */
-		    0,			/* share mode */
+		    FILE_SHARE_READ | FILE_SHARE_WRITE,	/* share mode */
 		    NULL,		/* security descriptor */
 		    OPEN_EXISTING,	/* creation disposition */
-		    0,			/* file attributes */
+		    FILE_FLAG_BACKUP_SEMANTICS,	/* file attributes */
 		    NULL);		/* handle to template file */
 
     if (hFile != INVALID_HANDLE_VALUE)
     {
-	if (GetFileInformationByHandle(hFile, &inf) != 0
-		&& inf.nNumberOfLinks > 1)
-	    res = 1;
+	if (GetFileInformationByHandle(hFile, info) != 0)
+	    res = FILEINFO_OK;
+	else
+	    res = FILEINFO_INFO_FAIL;
 	CloseHandle(hFile);
     }
 
@@ -2633,18 +2952,104 @@
 }
 
 /*
- * Return TRUE if file or directory "name" is writable (not readonly).
- * Strange semantics of Win32: a readonly directory is writable, but you can't
- * delete a file.  Let's say this means it is writable.
+ * get file attributes for `name'
+ * -1 : error
+ * else FILE_ATTRIBUTE_* defined in winnt.h
  */
+    static
     int
-mch_writable(char_u *name)
+win32_getattrs(char_u *name)
 {
-    int perm = mch_getperm(name);
+    int		attr;
+#ifdef FEAT_MBYTE
+    WCHAR	*p = NULL;
 
-    return (perm != -1 && (!(perm & FILE_ATTRIBUTE_READONLY)
-				       || (perm & FILE_ATTRIBUTE_DIRECTORY)));
-}
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+	p = enc_to_utf16(name, NULL);
+
+    if (p != NULL)
+    {
+	attr = GetFileAttributesW(p);
+	if (attr < 0 && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+	{
+	    /* Retry with non-wide function (for Windows 98). */
+	    vim_free(p);
+	    p = NULL;
+	}
+    }
+    if (p == NULL)
+#endif
+	attr = GetFileAttributes((char *)name);
+#ifdef FEAT_MBYTE
+    vim_free(p);
+#endif
+    return attr;
+}
+
+/*
+ * set file attributes for `name' to `attrs'
+ *
+ * return -1 for failure, 0 otherwise
+ */
+    static
+    int
+win32_setattrs(char_u *name, int attrs)
+{
+    int res;
+#ifdef FEAT_MBYTE
+    WCHAR	*p = NULL;
+
+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+	p = enc_to_utf16(name, NULL);
+
+    if (p != NULL)
+    {
+	res = SetFileAttributesW(p, attrs);
+	if (res == FALSE
+	    && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+	{
+	    /* Retry with non-wide function (for Windows 98). */
+	    vim_free(p);
+	    p = NULL;
+	}
+    }
+    if (p == NULL)
+#endif
+	res = SetFileAttributes((char *)name, attrs);
+#ifdef FEAT_MBYTE
+    vim_free(p);
+#endif
+    return res ? 0 : -1;
+}
+
+/*
+ * Set archive flag for "name".
+ */
+    static
+    int
+win32_set_archive(char_u *name)
+{
+    int attrs = win32_getattrs(name);
+    if (attrs == -1)
+	return -1;
+
+    attrs |= FILE_ATTRIBUTE_ARCHIVE;
+    return win32_setattrs(name, attrs);
+}
+
+/*
+ * Return TRUE if file or directory "name" is writable (not readonly).
+ * Strange semantics of Win32: a readonly directory is writable, but you can't
+ * delete a file.  Let's say this means it is writable.
+ */
+    int
+mch_writable(char_u *name)
+{
+    int attrs = win32_getattrs(name);
+
+    return (attrs != -1 && (!(attrs & FILE_ATTRIBUTE_READONLY)
+			  || (attrs & FILE_ATTRIBUTE_DIRECTORY)));
+}
 
 /*
  * Return 1 if "name" can be executed, 0 if not.
@@ -2752,6 +3157,7 @@
     return (vim_acl_T)NULL;
 #else
     struct my_acl   *p = NULL;
+    DWORD   err;
 
     /* This only works on Windows NT and 2000. */
     if (g_PlatformId == VER_PLATFORM_WIN32_NT && advapi_lib != NULL)
@@ -2759,23 +3165,82 @@
 	p = (struct my_acl *)alloc_clear((unsigned)sizeof(struct my_acl));
 	if (p != NULL)
 	{
-	    if (pGetNamedSecurityInfo(
-			(LPTSTR)fname,		// Abstract filename
-			SE_FILE_OBJECT,		// File Object
-			// Retrieve the entire security descriptor.
-			OWNER_SECURITY_INFORMATION |
-			GROUP_SECURITY_INFORMATION |
-			DACL_SECURITY_INFORMATION |
-			SACL_SECURITY_INFORMATION,
-			&p->pSidOwner,		// Ownership information.
-			&p->pSidGroup,		// Group membership.
-			&p->pDacl,		// Discretionary information.
-			&p->pSacl,		// For auditing purposes.
-			&p->pSecurityDescriptor
-				    ) != ERROR_SUCCESS)
+# ifdef FEAT_MBYTE
+	    WCHAR	*wn = NULL;
+
+	    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+		wn = enc_to_utf16(fname, NULL);
+	    if (wn != NULL)
 	    {
-		mch_free_acl((vim_acl_T)p);
-		p = NULL;
+		/* Try to retrieve the entire security descriptor. */
+		err = pGetNamedSecurityInfoW(
+			    wn,			// Abstract filename
+			    SE_FILE_OBJECT,	// File Object
+			    OWNER_SECURITY_INFORMATION |
+			    GROUP_SECURITY_INFORMATION |
+			    DACL_SECURITY_INFORMATION |
+			    SACL_SECURITY_INFORMATION,
+			    &p->pSidOwner,	// Ownership information.
+			    &p->pSidGroup,	// Group membership.
+			    &p->pDacl,		// Discretionary information.
+			    &p->pSacl,		// For auditing purposes.
+			    &p->pSecurityDescriptor);
+		if (err == ERROR_ACCESS_DENIED ||
+			err == ERROR_PRIVILEGE_NOT_HELD)
+		{
+		    /* Retrieve only DACL. */
+		    (void)pGetNamedSecurityInfoW(
+			    wn,
+			    SE_FILE_OBJECT,
+			    DACL_SECURITY_INFORMATION,
+			    NULL,
+			    NULL,
+			    &p->pDacl,
+			    NULL,
+			    &p->pSecurityDescriptor);
+		}
+		if (p->pSecurityDescriptor == NULL)
+		{
+		    mch_free_acl((vim_acl_T)p);
+		    p = NULL;
+		}
+		vim_free(wn);
+	    }
+	    else
+# endif
+	    {
+		/* Try to retrieve the entire security descriptor. */
+		err = pGetNamedSecurityInfo(
+			    (LPSTR)fname,	// Abstract filename
+			    SE_FILE_OBJECT,	// File Object
+			    OWNER_SECURITY_INFORMATION |
+			    GROUP_SECURITY_INFORMATION |
+			    DACL_SECURITY_INFORMATION |
+			    SACL_SECURITY_INFORMATION,
+			    &p->pSidOwner,	// Ownership information.
+			    &p->pSidGroup,	// Group membership.
+			    &p->pDacl,		// Discretionary information.
+			    &p->pSacl,		// For auditing purposes.
+			    &p->pSecurityDescriptor);
+		if (err == ERROR_ACCESS_DENIED ||
+			err == ERROR_PRIVILEGE_NOT_HELD)
+		{
+		    /* Retrieve only DACL. */
+		    (void)pGetNamedSecurityInfo(
+			    (LPSTR)fname,
+			    SE_FILE_OBJECT,
+			    DACL_SECURITY_INFORMATION,
+			    NULL,
+			    NULL,
+			    &p->pDacl,
+			    NULL,
+			    &p->pSecurityDescriptor);
+		}
+		if (p->pSecurityDescriptor == NULL)
+		{
+		    mch_free_acl((vim_acl_T)p);
+		    p = NULL;
+		}
 	    }
 	}
     }
@@ -2784,6 +3249,29 @@
 #endif
 }
 
+#ifdef HAVE_ACL
+/*
+ * Check if "acl" contains inherited ACE.
+ */
+    static BOOL
+is_acl_inherited(PACL acl)
+{
+    DWORD   i;
+    ACL_SIZE_INFORMATION    acl_info;
+    PACCESS_ALLOWED_ACE	    ace;
+
+    acl_info.AceCount = 0;
+    GetAclInformation(acl, &acl_info, sizeof(acl_info), AclSizeInformation);
+    for (i = 0; i < acl_info.AceCount; i++)
+    {
+	GetAce(acl, i, (LPVOID *)&ace);
+	if (ace->Header.AceFlags & INHERITED_ACE)
+	    return TRUE;
+    }
+    return FALSE;
+}
+#endif
+
 /*
  * Set the ACL of file "fname" to "acl" (unless it's NULL).
  * Errors are ignored.
@@ -2794,21 +3282,61 @@
 {
 #ifdef HAVE_ACL
     struct my_acl   *p = (struct my_acl *)acl;
+    SECURITY_INFORMATION    sec_info = 0;
 
     if (p != NULL && advapi_lib != NULL)
-	(void)pSetNamedSecurityInfo(
-		    (LPTSTR)fname,		// Abstract filename
-		    SE_FILE_OBJECT,		// File Object
-		    // Retrieve the entire security descriptor.
-		    OWNER_SECURITY_INFORMATION |
-			GROUP_SECURITY_INFORMATION |
-			DACL_SECURITY_INFORMATION |
-			SACL_SECURITY_INFORMATION,
-		    p->pSidOwner,		// Ownership information.
-		    p->pSidGroup,		// Group membership.
-		    p->pDacl,			// Discretionary information.
-		    p->pSacl			// For auditing purposes.
-		    );
+    {
+# ifdef FEAT_MBYTE
+	WCHAR	*wn = NULL;
+# endif
+
+	/* Set security flags */
+	if (p->pSidOwner)
+	    sec_info |= OWNER_SECURITY_INFORMATION;
+	if (p->pSidGroup)
+	    sec_info |= GROUP_SECURITY_INFORMATION;
+	if (p->pDacl)
+	{
+	    sec_info |= DACL_SECURITY_INFORMATION;
+	    /* Do not inherit its parent's DACL.
+	     * If the DACL is inherited, Cygwin permissions would be changed.
+	     */
+	    if (!is_acl_inherited(p->pDacl))
+		sec_info |= PROTECTED_DACL_SECURITY_INFORMATION;
+	}
+	if (p->pSacl)
+	    sec_info |= SACL_SECURITY_INFORMATION;
+
+# ifdef FEAT_MBYTE
+	if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
+	    wn = enc_to_utf16(fname, NULL);
+	if (wn != NULL)
+	{
+	    (void)pSetNamedSecurityInfoW(
+			wn,			// Abstract filename
+			SE_FILE_OBJECT,		// File Object
+			sec_info,
+			p->pSidOwner,		// Ownership information.
+			p->pSidGroup,		// Group membership.
+			p->pDacl,		// Discretionary information.
+			p->pSacl		// For auditing purposes.
+			);
+	    vim_free(wn);
+	}
+	else
+# endif
+	{
+	    (void)pSetNamedSecurityInfo(
+			(LPSTR)fname,		// Abstract filename
+			SE_FILE_OBJECT,		// File Object
+			sec_info,
+			p->pSidOwner,		// Ownership information.
+			p->pSidGroup,		// Group membership.
+			p->pDacl,		// Discretionary information.
+			p->pSacl		// For auditing purposes.
+			);
+	}
+    }
 #endif
 }
 
@@ -3104,7 +3632,7 @@
  *    4. Prompt the user to press a key to close the console window
  */
     static int
-mch_system(char *cmd, int options)
+mch_system_classic(char *cmd, int options)
 {
     STARTUPINFO		si;
     PROCESS_INFORMATION pi;
@@ -3120,9 +3648,10 @@
      * It's nicer to run a filter command in a minimized window, but in
      * Windows 95 this makes the command MUCH slower.  We can't do it under
      * Win32s either as it stops the synchronous spawn workaround working.
+     * Don't activate the window to keep focus on Vim.
      */
     if ((options & SHELL_DOOUT) && !mch_windows95() && !gui_is_win32s())
-	si.wShowWindow = SW_SHOWMINIMIZED;
+	si.wShowWindow = SW_SHOWMINNOACTIVE;
     else
 	si.wShowWindow = SW_SHOWNORMAL;
     si.cbReserved2 = 0;
@@ -3160,10 +3689,12 @@
 	{
 	    MSG	msg;
 
-	    if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+	    if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
 	    {
 		TranslateMessage(&msg);
-		DispatchMessage(&msg);
+		pDispatchMessage(&msg);
+		delay = 1;
+		continue;
 	    }
 	    if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
 		break;
@@ -3208,6 +3739,506 @@
 
     return ret;
 }
+
+/*
+ * Thread launched by the gui to send the current buffer data to the
+ * process. This way avoid to hang up vim totally if the children
+ * process take a long time to process the lines.
+ */
+    static DWORD WINAPI
+sub_process_writer(LPVOID param)
+{
+    HANDLE	    g_hChildStd_IN_Wr = param;
+    linenr_T	    lnum = curbuf->b_op_start.lnum;
+    DWORD	    len = 0;
+    DWORD	    l;
+    char_u	    *lp = ml_get(lnum);
+    char_u	    *s;
+    int		    written = 0;
+
+    for (;;)
+    {
+	l = (DWORD)STRLEN(lp + written);
+	if (l == 0)
+	    len = 0;
+	else if (lp[written] == NL)
+	{
+	    /* NL -> NUL translation */
+	    WriteFile(g_hChildStd_IN_Wr, "", 1, &len, NULL);
+	}
+	else
+	{
+	    s = vim_strchr(lp + written, NL);
+	    WriteFile(g_hChildStd_IN_Wr, (char *)lp + written,
+		      s == NULL ? l : (DWORD)(s - (lp + written)),
+		      &len, NULL);
+	}
+	if (len == (int)l)
+	{
+	    /* Finished a line, add a NL, unless this line should not have
+	     * one. */
+	    if (lnum != curbuf->b_op_end.lnum
+		|| !curbuf->b_p_bin
+		|| (lnum != curbuf->b_no_eol_lnum
+		    && (lnum != curbuf->b_ml.ml_line_count
+			|| curbuf->b_p_eol)))
+	    {
+		WriteFile(g_hChildStd_IN_Wr, "\n", 1, (LPDWORD)&ignored, NULL);
+	    }
+
+	    ++lnum;
+	    if (lnum > curbuf->b_op_end.lnum)
+		break;
+
+	    lp = ml_get(lnum);
+	    written = 0;
+	}
+	else if (len > 0)
+	    written += len;
+    }
+
+    /* finished all the lines, close pipe */
+    CloseHandle(g_hChildStd_IN_Wr);
+    ExitThread(0);
+}
+
+
+# define BUFLEN 100	/* length for buffer, stolen from unix version */
+
+/*
+ * This function read from the children's stdout and write the
+ * data on screen or in the buffer accordingly.
+ */
+    static void
+dump_pipe(int	    options,
+	  HANDLE    g_hChildStd_OUT_Rd,
+	  garray_T  *ga,
+	  char_u    buffer[],
+	  DWORD	    *buffer_off)
+{
+    DWORD	availableBytes = 0;
+    DWORD	i;
+    int		ret;
+    DWORD	len;
+    DWORD	toRead;
+    int		repeatCount;
+
+    /* we query the pipe to see if there is any data to read
+     * to avoid to perform a blocking read */
+    ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
+			NULL,		    /* optional buffer */
+			0,		    /* buffer size */
+			NULL,		    /* number of read bytes */
+			&availableBytes,    /* available bytes total */
+			NULL);		    /* byteLeft */
+
+    repeatCount = 0;
+    /* We got real data in the pipe, read it */
+    while (ret != 0 && availableBytes > 0)
+    {
+	repeatCount++;
+	toRead =
+# ifdef FEAT_MBYTE
+		 (DWORD)(BUFLEN - *buffer_off);
+# else
+		 (DWORD)BUFLEN;
+# endif
+	toRead = availableBytes < toRead ? availableBytes : toRead;
+	ReadFile(g_hChildStd_OUT_Rd, buffer
+# ifdef FEAT_MBYTE
+		 + *buffer_off, toRead
+# else
+		 , toRead
+# endif
+		 , &len, NULL);
+
+	/* If we haven't read anything, there is a problem */
+	if (len == 0)
+	    break;
+
+	availableBytes -= len;
+
+	if (options & SHELL_READ)
+	{
+	    /* Do NUL -> NL translation, append NL separated
+	     * lines to the current buffer. */
+	    for (i = 0; i < len; ++i)
+	    {
+		if (buffer[i] == NL)
+		    append_ga_line(ga);
+		else if (buffer[i] == NUL)
+		    ga_append(ga, NL);
+		else
+		    ga_append(ga, buffer[i]);
+	    }
+	}
+# ifdef FEAT_MBYTE
+	else if (has_mbyte)
+	{
+	    int		l;
+	    int		c;
+	    char_u	*p;
+
+	    len += *buffer_off;
+	    buffer[len] = NUL;
+
+	    /* Check if the last character in buffer[] is
+	     * incomplete, keep these bytes for the next
+	     * round. */
+	    for (p = buffer; p < buffer + len; p += l)
+	    {
+		l = mb_cptr2len(p);
+		if (l == 0)
+		    l = 1;  /* NUL byte? */
+		else if (MB_BYTE2LEN(*p) != l)
+		    break;
+	    }
+	    if (p == buffer)	/* no complete character */
+	    {
+		/* avoid getting stuck at an illegal byte */
+		if (len >= 12)
+		    ++p;
+		else
+		{
+		    *buffer_off = len;
+		    return;
+		}
+	    }
+	    c = *p;
+	    *p = NUL;
+	    msg_puts(buffer);
+	    if (p < buffer + len)
+	    {
+		*p = c;
+		*buffer_off = (DWORD)((buffer + len) - p);
+		mch_memmove(buffer, p, *buffer_off);
+		return;
+	    }
+	    *buffer_off = 0;
+	}
+# endif /* FEAT_MBYTE */
+	else
+	{
+	    buffer[len] = NUL;
+	    msg_puts(buffer);
+	}
+
+	windgoto(msg_row, msg_col);
+	cursor_on();
+	out_flush();
+    }
+}
+
+/*
+ * Version of system to use for windows NT > 5.0 (Win2K), use pipe
+ * for communication and doesn't open any new window.
+ */
+    static int
+mch_system_piped(char *cmd, int options)
+{
+    STARTUPINFO		si;
+    PROCESS_INFORMATION pi;
+    DWORD		ret = 0;
+
+    HANDLE g_hChildStd_IN_Rd = NULL;
+    HANDLE g_hChildStd_IN_Wr = NULL;
+    HANDLE g_hChildStd_OUT_Rd = NULL;
+    HANDLE g_hChildStd_OUT_Wr = NULL;
+
+    char_u	buffer[BUFLEN + 1]; /* reading buffer + size */
+    DWORD	len;
+
+    /* buffer used to receive keys */
+    char_u	ta_buf[BUFLEN + 1];	/* TypeAHead */
+    int		ta_len = 0;		/* valid bytes in ta_buf[] */
+
+    DWORD	i;
+    int		c;
+    int		noread_cnt = 0;
+    garray_T	ga;
+    int	    delay = 1;
+    DWORD	buffer_off = 0;	/* valid bytes in buffer[] */
+    char	*p = NULL;
+
+    SECURITY_ATTRIBUTES saAttr;
+
+    /* Set the bInheritHandle flag so pipe handles are inherited. */
+    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
+    saAttr.bInheritHandle = TRUE;
+    saAttr.lpSecurityDescriptor = NULL;
+
+    if ( ! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0)
+	/* Ensure the read handle to the pipe for STDOUT is not inherited. */
+       || ! pSetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0)
+	/* Create a pipe for the child process's STDIN. */
+       || ! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0)
+	/* Ensure the write handle to the pipe for STDIN is not inherited. */
+       || ! pSetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) )
+    {
+	CloseHandle(g_hChildStd_IN_Rd);
+	CloseHandle(g_hChildStd_IN_Wr);
+	CloseHandle(g_hChildStd_OUT_Rd);
+	CloseHandle(g_hChildStd_OUT_Wr);
+	MSG_PUTS(_("\nCannot create pipes\n"));
+    }
+
+    si.cb = sizeof(si);
+    si.lpReserved = NULL;
+    si.lpDesktop = NULL;
+    si.lpTitle = NULL;
+    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
+
+    /* set-up our file redirection */
+    si.hStdError = g_hChildStd_OUT_Wr;
+    si.hStdOutput = g_hChildStd_OUT_Wr;
+    si.hStdInput = g_hChildStd_IN_Rd;
+    si.wShowWindow = SW_HIDE;
+    si.cbReserved2 = 0;
+    si.lpReserved2 = NULL;
+
+    if (options & SHELL_READ)
+	ga_init2(&ga, 1, BUFLEN);
+
+    if (cmd != NULL)
+    {
+	p = (char *)vim_strsave((char_u *)cmd);
+	if (p != NULL)
+	    unescape_shellxquote((char_u *)p, p_sxe);
+	else
+	    p = cmd;
+    }
+
+    /* Now, run the command */
+    CreateProcess(NULL,			/* Executable name */
+		  p,			/* Command to execute */
+		  NULL,			/* Process security attributes */
+		  NULL,			/* Thread security attributes */
+
+		  // this command can be litigious, handle inheritance was
+		  // deactivated for pending temp file, but, if we deactivate
+		  // it, the pipes don't work for some reason.
+		  TRUE,			/* Inherit handles, first deactivated,
+					 * but needed */
+		  CREATE_DEFAULT_ERROR_MODE, /* Creation flags */
+		  NULL,			/* Environment */
+		  NULL,			/* Current directory */
+		  &si,			/* Startup information */
+		  &pi);			/* Process information */
+
+    if (p != cmd)
+	vim_free(p);
+
+    /* Close our unused side of the pipes */
+    CloseHandle(g_hChildStd_IN_Rd);
+    CloseHandle(g_hChildStd_OUT_Wr);
+
+    if (options & SHELL_WRITE)
+    {
+	HANDLE thread =
+	   CreateThread(NULL,  /* security attributes */
+			0,     /* default stack size */
+			sub_process_writer, /* function to be executed */
+			g_hChildStd_IN_Wr,  /* parameter */
+			0,		 /* creation flag, start immediately */
+			NULL);		    /* we don't care about thread id */
+	CloseHandle(thread);
+	g_hChildStd_IN_Wr = NULL;
+    }
+
+    /* Keep updating the window while waiting for the shell to finish. */
+    for (;;)
+    {
+	MSG	msg;
+
+	if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+	{
+	    TranslateMessage(&msg);
+	    DispatchMessage(&msg);
+	}
+
+	/* write pipe information in the window */
+	if ((options & (SHELL_READ|SHELL_WRITE))
+# ifdef FEAT_GUI
+		|| gui.in_use
+# endif
+	    )
+	{
+	    len = 0;
+	    if (!(options & SHELL_EXPAND)
+		&& ((options &
+			(SHELL_READ|SHELL_WRITE|SHELL_COOKED))
+		    != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
+# ifdef FEAT_GUI
+		    || gui.in_use
+# endif
+		    )
+		&& (ta_len > 0 || noread_cnt > 4))
+	    {
+		if (ta_len == 0)
+		{
+		    /* Get extra characters when we don't have any.  Reset the
+		     * counter and timer. */
+		    noread_cnt = 0;
+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
+		    gettimeofday(&start_tv, NULL);
+# endif
+		    len = ui_inchar(ta_buf, BUFLEN, 10L, 0);
+		}
+		if (ta_len > 0 || len > 0)
+		{
+		    /*
+		     * For pipes: Check for CTRL-C: send interrupt signal to
+		     * child.  Check for CTRL-D: EOF, close pipe to child.
+		     */
+		    if (len == 1 && cmd != NULL)
+		    {
+			if (ta_buf[ta_len] == Ctrl_C)
+			{
+			    /* Learn what exit code is expected, for
+				* now put 9 as SIGKILL */
+			    TerminateProcess(pi.hProcess, 9);
+			}
+			if (ta_buf[ta_len] == Ctrl_D)
+			{
+			    CloseHandle(g_hChildStd_IN_Wr);
+			    g_hChildStd_IN_Wr = NULL;
+			}
+		    }
+
+		    /* replace K_BS by <BS> and K_DEL by <DEL> */
+		    for (i = ta_len; i < ta_len + len; ++i)
+		    {
+			if (ta_buf[i] == CSI && len - i > 2)
+			{
+			    c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]);
+			    if (c == K_DEL || c == K_KDEL || c == K_BS)
+			    {
+				mch_memmove(ta_buf + i + 1, ta_buf + i + 3,
+					    (size_t)(len - i - 2));
+				if (c == K_DEL || c == K_KDEL)
+				    ta_buf[i] = DEL;
+				else
+				    ta_buf[i] = Ctrl_H;
+				len -= 2;
+			    }
+			}
+			else if (ta_buf[i] == '\r')
+			    ta_buf[i] = '\n';
+# ifdef FEAT_MBYTE
+			if (has_mbyte)
+			    i += (*mb_ptr2len_len)(ta_buf + i,
+						    ta_len + len - i) - 1;
+# endif
+		    }
+
+		    /*
+		     * For pipes: echo the typed characters.  For a pty this
+		     * does not seem to work.
+		     */
+		    for (i = ta_len; i < ta_len + len; ++i)
+		    {
+			if (ta_buf[i] == '\n' || ta_buf[i] == '\b')
+			    msg_putchar(ta_buf[i]);
+# ifdef FEAT_MBYTE
+			else if (has_mbyte)
+			{
+			    int l = (*mb_ptr2len)(ta_buf + i);
+
+			    msg_outtrans_len(ta_buf + i, l);
+			    i += l - 1;
+			}
+# endif
+			else
+			    msg_outtrans_len(ta_buf + i, 1);
+		    }
+		    windgoto(msg_row, msg_col);
+		    out_flush();
+
+		    ta_len += len;
+
+		    /*
+		     * Write the characters to the child, unless EOF has been
+		     * typed for pipes.  Write one character at a time, to
+		     * avoid losing too much typeahead.  When writing buffer
+		     * lines, drop the typed characters (only check for
+		     * CTRL-C).
+		     */
+		    if (options & SHELL_WRITE)
+			ta_len = 0;
+		    else if (g_hChildStd_IN_Wr != NULL)
+		    {
+			WriteFile(g_hChildStd_IN_Wr, (char*)ta_buf,
+				    1, &len, NULL);
+			// if we are typing in, we want to keep things reactive
+			delay = 1;
+			if (len > 0)
+			{
+			    ta_len -= len;
+			    mch_memmove(ta_buf, ta_buf + len, ta_len);
+			}
+		    }
+		}
+	    }
+	}
+
+	if (ta_len)
+	    ui_inchar_undo(ta_buf, ta_len);
+
+	if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+	{
+	    dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
+	    break;
+	}
+
+	++noread_cnt;
+	dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
+
+	/* We start waiting for a very short time and then increase it, so
+	 * that we respond quickly when the process is quick, and don't
+	 * consume too much overhead when it's slow. */
+	if (delay < 50)
+	    delay += 10;
+    }
+
+    /* Close the pipe */
+    CloseHandle(g_hChildStd_OUT_Rd);
+    if (g_hChildStd_IN_Wr != NULL)
+	CloseHandle(g_hChildStd_IN_Wr);
+
+    WaitForSingleObject(pi.hProcess, INFINITE);
+
+    /* Get the command exit code */
+    GetExitCodeProcess(pi.hProcess, &ret);
+
+    if (options & SHELL_READ)
+    {
+	if (ga.ga_len > 0)
+	{
+	    append_ga_line(&ga);
+	    /* remember that the NL was missing */
+	    curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
+	}
+	else
+	    curbuf->b_no_eol_lnum = 0;
+	ga_clear(&ga);
+    }
+
+    /* Close the handles to the subprocess, so that it goes away */
+    CloseHandle(pi.hThread);
+    CloseHandle(pi.hProcess);
+
+    return ret;
+}
+
+    static int
+mch_system(char *cmd, int options)
+{
+    /* if we can pipe and the shelltemp option is off */
+    if (allowPiping && !p_stmp)
+	return mch_system_piped(cmd, options);
+    else
+	return mch_system_classic(cmd, options);
+}
 #else
 
 # define mch_system(c, o) system(c)
@@ -3278,84 +4309,147 @@
     else
     {
 	/* we use "command" or "cmd" to start the shell; slow but easy */
-	char_u *newcmd;
-	long_u cmdlen =  (
-#ifdef FEAT_GUI_W32
-		STRLEN(vimrun_path) +
-#endif
-		STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+	char_u	*newcmd = NULL;
+	char_u	*cmdbase = cmd;
+	long_u	cmdlen;
+
+	/* Skip a leading ", ( and "(. */
+	if (*cmdbase == '"' )
+	    ++cmdbase;
+	if (*cmdbase == '(')
+	    ++cmdbase;
+
+	if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+	{
+	    STARTUPINFO		si;
+	    PROCESS_INFORMATION	pi;
+	    DWORD		flags = CREATE_NEW_CONSOLE;
+	    char_u		*p;
+
+	    si.cb = sizeof(si);
+	    si.lpReserved = NULL;
+	    si.lpDesktop = NULL;
+	    si.lpTitle = NULL;
+	    si.dwFlags = 0;
+	    si.cbReserved2 = 0;
+	    si.lpReserved2 = NULL;
+
+	    cmdbase = skipwhite(cmdbase + 5);
+	    if ((STRNICMP(cmdbase, "/min", 4) == 0)
+		    && vim_iswhite(cmdbase[4]))
+	    {
+		cmdbase = skipwhite(cmdbase + 4);
+		si.dwFlags = STARTF_USESHOWWINDOW;
+		si.wShowWindow = SW_SHOWMINNOACTIVE;
+	    }
+	    else if ((STRNICMP(cmdbase, "/b", 2) == 0)
+		    && vim_iswhite(cmdbase[2]))
+	    {
+		cmdbase = skipwhite(cmdbase + 2);
+		flags = CREATE_NO_WINDOW;
+		si.dwFlags = STARTF_USESTDHANDLES;
+		si.hStdInput = CreateFile("\\\\.\\NUL",	// File name
+		    GENERIC_READ,			// Access flags
+		    0,					// Share flags
+		    NULL,				// Security att.
+		    OPEN_EXISTING,			// Open flags
+		    FILE_ATTRIBUTE_NORMAL,		// File att.
+		    NULL);				// Temp file
+		si.hStdOutput = si.hStdInput;
+		si.hStdError = si.hStdInput;
+	    }
 
-	newcmd = lalloc(cmdlen, TRUE);
-	if (newcmd != NULL)
-	{
-	    char_u *cmdbase = (*cmd == '"' ? cmd + 1 : cmd);
+	    /* Remove a trailing ", ) and )" if they have a match
+	     * at the start of the command. */
+	    if (cmdbase > cmd)
+	    {
+		p = cmdbase + STRLEN(cmdbase);
+		if (p > cmdbase && p[-1] == '"' && *cmd == '"')
+		    *--p = NUL;
+		if (p > cmdbase && p[-1] == ')'
+			&& (*cmd =='(' || cmd[1] == '('))
+		    *--p = NUL;
+	    }
 
-	    if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
+	    newcmd = cmdbase;
+	    unescape_shellxquote(cmdbase, p_sxe);
+
+	    /*
+	     * If creating new console, arguments are passed to the
+	     * 'cmd.exe' as-is. If it's not, arguments are not treated
+	     * correctly for current 'cmd.exe'. So unescape characters in
+	     * shellxescape except '|' for avoiding to be treated as
+	     * argument to them. Pass the arguments to sub-shell.
+	     */
+	    if (flags != CREATE_NEW_CONSOLE)
 	    {
-		STARTUPINFO		si;
-		PROCESS_INFORMATION	pi;
-
-		si.cb = sizeof(si);
-		si.lpReserved = NULL;
-		si.lpDesktop = NULL;
-		si.lpTitle = NULL;
-		si.dwFlags = 0;
-		si.cbReserved2 = 0;
-		si.lpReserved2 = NULL;
-
-		cmdbase = skipwhite(cmdbase + 5);
-		if ((STRNICMP(cmdbase, "/min", 4) == 0)
-			&& vim_iswhite(cmdbase[4]))
-		{
-		    cmdbase = skipwhite(cmdbase + 4);
-		    si.dwFlags = STARTF_USESHOWWINDOW;
-		    si.wShowWindow = SW_SHOWMINNOACTIVE;
-		}
+		char_u	*subcmd;
+		char_u	*cmd_shell = mch_getenv("COMSPEC");
 
-		/* When the command is in double quotes, but 'shellxquote' is
-		 * empty, keep the double quotes around the command.
-		 * Otherwise remove the double quotes, they aren't needed
-		 * here, because we don't use a shell to run the command. */
-		if (*cmd == '"' && *p_sxq == NUL)
-		{
-		    newcmd[0] = '"';
-		    STRCPY(newcmd + 1, cmdbase);
-		}
-		else
+		if (cmd_shell == NULL || *cmd_shell == NUL)
+		    cmd_shell = default_shell();
+
+		subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
+		if (subcmd != NULL)
 		{
-		    STRCPY(newcmd, cmdbase);
-		    if (*cmd == '"' && *newcmd != NUL)
-			newcmd[STRLEN(newcmd) - 1] = NUL;
+		    /* make "cmd.exe /c arguments" */
+		    cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
+		    newcmd = lalloc(cmdlen, TRUE);
+		    if (newcmd != NULL)
+			vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
+						       cmd_shell, subcmd);
+		    else
+			newcmd = cmdbase;
+		    vim_free(subcmd);
 		}
+	    }
 
-		/*
-		 * Now, start the command as a process, so that it doesn't
-		 * inherit our handles which causes unpleasant dangling swap
-		 * files if we exit before the spawned process
-		 */
-		if (CreateProcess (NULL,	// Executable name
-			newcmd,			// Command to execute
-			NULL,			// Process security attributes
-			NULL,			// Thread security attributes
-			FALSE,			// Inherit handles
-			CREATE_NEW_CONSOLE,	// Creation flags
-			NULL,			// Environment
-			NULL,			// Current directory
-			&si,			// Startup information
-			&pi))			// Process information
-		    x = 0;
-		else
-		{
-		    x = -1;
+	    /*
+	     * Now, start the command as a process, so that it doesn't
+	     * inherit our handles which causes unpleasant dangling swap
+	     * files if we exit before the spawned process
+	     */
+	    if (CreateProcess(NULL,		// Executable name
+		    newcmd,			// Command to execute
+		    NULL,			// Process security attributes
+		    NULL,			// Thread security attributes
+		    FALSE,			// Inherit handles
+		    flags,			// Creation flags
+		    NULL,			// Environment
+		    NULL,			// Current directory
+		    &si,			// Startup information
+		    &pi))			// Process information
+		x = 0;
+	    else
+	    {
+		x = -1;
 #ifdef FEAT_GUI_W32
-		    EMSG(_("E371: Command not found"));
+		EMSG(_("E371: Command not found"));
 #endif
-		}
-		/* Close the handles to the subprocess, so that it goes away */
-		CloseHandle(pi.hThread);
-		CloseHandle(pi.hProcess);
 	    }
-	    else
+
+	    if (newcmd != cmdbase)
+		vim_free(newcmd);
+
+	    if (si.hStdInput != NULL)
+	    {
+		/* Close the handle to \\.\NUL */
+		CloseHandle(si.hStdInput);
+	    }
+	    /* Close the handles to the subprocess, so that it goes away */
+	    CloseHandle(pi.hThread);
+	    CloseHandle(pi.hProcess);
+	}
+	else
+	{
+	    cmdlen = (
+#ifdef FEAT_GUI_W32
+		(allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
+#endif
+		STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
+
+	    newcmd = lalloc(cmdlen, TRUE);
+	    if (newcmd != NULL)
 	    {
 #if defined(FEAT_GUI_W32)
 		if (need_vimrun_warning)
@@ -3368,7 +4462,7 @@
 			    MB_ICONWARNING);
 		    need_vimrun_warning = FALSE;
 		}
-		if (!s_dont_use_vimrun)
+		if (!s_dont_use_vimrun && (!allowPiping || p_stmp))
 		    /* Use vimrun to execute the command.  It opens a console
 		     * window, which can be closed without killing Vim. */
 		    vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
@@ -3381,8 +4475,8 @@
 		    vim_snprintf((char *)newcmd, cmdlen, "%s %s %s",
 							   p_sh, p_shcf, cmd);
 		x = mch_system((char *)newcmd, options);
+		vim_free(newcmd);
 	    }
-	    vim_free(newcmd);
 	}
     }
 
@@ -3392,7 +4486,8 @@
     /* Print the return value, unless "vimrun" was used. */
     if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
 #if defined(FEAT_GUI_W32)
-		&& ((options & SHELL_DOOUT) || s_dont_use_vimrun)
+		&& ((options & SHELL_DOOUT) || s_dont_use_vimrun
+						  || (allowPiping && !p_stmp))
 #endif
 	    )
     {
@@ -4236,13 +5331,16 @@
 #ifdef FEAT_MBYTE
     WCHAR	*wn = NULL;
     int		n;
+#endif
+
+    win32_setattrs(name, FILE_ATTRIBUTE_NORMAL);
 
+#ifdef FEAT_MBYTE
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	wn = enc_to_utf16(name, NULL);
 	if (wn != NULL)
 	{
-	    SetFileAttributesW(wn, FILE_ATTRIBUTE_NORMAL);
 	    n = DeleteFileW(wn) ? 0 : -1;
 	    vim_free(wn);
 	    if (n == 0 || GetLastError() != ERROR_CALL_NOT_IMPLEMENTED)
@@ -4251,7 +5349,6 @@
 	}
     }
 #endif
-    SetFileAttributes(name, FILE_ATTRIBUTE_NORMAL);
     return DeleteFile(name) ? 0 : -1;
 }
 
@@ -4272,21 +5369,6 @@
 }
 
 
-/*
- * How much memory is available?
- * Return sum of available physical and page file memory.
- */
-/*ARGSUSED*/
-    long_u
-mch_avail_mem(int special)
-{
-    MEMORYSTATUS	ms;
-
-    ms.dwLength = sizeof(MEMORYSTATUS);
-    GlobalMemoryStatus(&ms);
-    return (long_u) (ms.dwAvailPhys + ms.dwAvailPageFile);
-}
-
 #ifdef FEAT_MBYTE
 /*
  * Same code as below, but with wide functions and no comments.
diff -Naur vim73.orig/src/os_win32.h vim73/src/os_win32.h
--- vim73.orig/src/os_win32.h	2010-05-31 19:50:24.000000000 +0000
+++ vim73/src/os_win32.h	2013-08-04 19:09:10.553944029 +0000
@@ -12,7 +12,10 @@
 
 #include "os_dos.h"		/* common MS-DOS and Win32 stuff */
 #ifndef __CYGWIN__
-#include <direct.h>		/* for _mkdir() */
+/* cproto fails on missing include files */
+# ifndef PROTO
+#  include <direct.h>		/* for _mkdir() */
+# endif
 #endif
 
 /* Stop the VC2005 compiler from nagging. */
@@ -54,14 +57,11 @@
 
 #define FEAT_SHORTCUT		/* resolve shortcuts */
 
-#if !defined(__MINGW32__) \
-	&& !defined(__CYGWIN__) \
-	&& (!defined(__BORLANDC__) || __BORLANDC__ >= 0x550) \
+#if (!defined(__BORLANDC__) || __BORLANDC__ >= 0x550) \
 	&& (!defined(_MSC_VER) || _MSC_VER > 1020)
 /*
  * Access Control List (actually security info).
- * Mingw and Cygwin don't have the acl stuff.
- * Borland only in version 5.5 and later.
+ * Borland has the acl stuff only in version 5.5 and later.
  * MSVC in 5.0, not in 4.2, don't know about 4.3.
  */
 # define HAVE_ACL
@@ -77,7 +77,6 @@
 #ifndef FEAT_GUI_W32		/* GUI works different */
 # define BREAKCHECK_SKIP    1	/* call mch_breakcheck() each time, it's fast */
 #endif
-#define HAVE_AVAIL_MEM
 
 #define HAVE_PUTENV		/* at least Bcc 5.2 and MSC have it */
 
@@ -101,14 +100,16 @@
 #ifndef COBJMACROS
 # define COBJMACROS	/* For OLE: Enable "friendlier" access to objects */
 #endif
-#include <windows.h>
+#ifndef PROTO
+# include <windows.h>
+#endif
 
 /*
  * Win32 has plenty of memory, use large buffers
  */
 #define CMDBUFFSIZE 1024	/* size of the command processing buffer */
 
-/* _MAX_PATH is only 256 (stdlib.h), but we want more for the 'path' option,
+/* _MAX_PATH is only 260 (stdlib.h), but we want more for the 'path' option,
  * thus use a larger number. */
 #define MAXPATHL	1024
 
@@ -191,5 +192,23 @@
 #ifdef __BORLANDC__
 # define vim_mkdir(x, y) mkdir(x)
 #else
-# define vim_mkdir(x, y) _mkdir(x)
+# define vim_mkdir(x, y) mch_mkdir(x)
 #endif
+
+#ifndef PROTO
+
+/* Enable common dialogs input unicode from IME if possible. */
+#ifdef FEAT_MBYTE
+    /* The variables are defined in os_win32.c. */
+extern LRESULT (WINAPI *pDispatchMessage)(CONST MSG *);
+extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT);
+extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG);
+extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT);
+#else
+# define pDispatchMessage DispatchMessage
+# define pGetMessage GetMessage
+# define pIsDialogMessage IsDialogMessage
+# define pPeekMessage PeekMessage
+#endif
+
+#endif /* PROTO */
diff -Naur vim73.orig/src/po/Makefile vim73/src/po/Makefile
--- vim73.orig/src/po/Makefile	2010-08-07 11:37:24.000000000 +0000
+++ vim73/src/po/Makefile	2013-08-04 19:09:10.563943999 +0000
@@ -20,6 +20,7 @@
 		ko \
 		ko.UTF-8 \
 		nb \
+		nl \
 		no \
 		pl \
 		pt_BR \
@@ -33,6 +34,17 @@
 		zh_TW \
 		zh_TW.UTF-8
 
+CONVERTED = \
+		cs.cp1250 \
+		ja.sjis \
+		ja.euc-jp \
+		pl.cp1250 \
+		pl.UTF-8 \
+		ru.cp1251 \
+		sk.cp1250 \
+		uk.cp1251 \
+		zh_CN.cp936
+
 MOFILES = \
 		af.mo \
 		ca.mo \
@@ -49,6 +61,7 @@
 		ko.mo \
 		ko.UTF-8.mo \
 		nb.mo \
+		nl.mo \
 		no.mo \
 		pl.mo \
 		pt_BR.mo \
@@ -62,9 +75,10 @@
 		zh_TW.UTF-8.mo \
 		zh_TW.mo
 
-CONVERTED = \
+MOCONVERTED = \
 		cs.cp1250.mo \
 		ja.sjis.mo \
+		ja.euc-jp.mo \
 		pl.cp1250.mo \
 		pl.UTF-8.mo \
 		ru.cp1251.mo \
@@ -88,6 +102,7 @@
 		ko.ck \
 		ko.UTF-8.ck \
 		nb.ck \
+		nl.ck \
 		no.ck \
 		pl.ck \
 		pt_BR.ck \
@@ -102,6 +117,7 @@
 		zh_TW.ck \
 		cs.cp1250.ck \
 		ja.sjis.ck \
+		ja.euc-jp.ck \
 		pl.cp1250.ck \
 		pl.UTF-8.ck \
 		ru.cp1251.ck \
@@ -123,7 +139,7 @@
 
 .SUFFIXES:
 .SUFFIXES: .po .mo .pot .ck
-.PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES)
+.PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) $(CONVERTED)
 
 .po.mo:
 	$(MSGFMT) -o $@ $<
@@ -132,13 +148,13 @@
 	$(VIM) -u NONE -e -X -S check.vim -c "if error == 0 | q | endif" -c cq $<
 	touch $@
 
-all: $(MOFILES)
+all: $(MOFILES) $(MOCONVERTED)
 
 check: $(CHECKFILES)
 
-install: $(MOFILES)
+install: $(MOFILES) $(MOCONVERTED)
 	@$(MAKE) prefixcheck
-	for lang in $(LANGUAGES); do \
+	for lang in $(LANGUAGES) $(CONVERTED); do \
 	  dir=$(LOCALEDIR)/$$lang/; \
 	  if test ! -x "$$dir"; then \
 	    mkdir $$dir; chmod 755 $$dir; \
@@ -155,13 +171,18 @@
 
 uninstall:
 	@$(MAKE) prefixcheck
-	for cat in $(MOFILES); do \
+	for cat in $(MOFILES) $(MOCONVERTED); do \
 	  cat=`basename $$cat`; \
 	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
 	  rm -f $(LOCALEDIR)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
 	done
 
-converted: $(CONVERTED)
+converted: $(MOCONVERTED)
+
+# nl.po was added later, if it does not exist use a file with just a # in it
+# (an empty file doesn't work with old msgfmt).
+nl.po:
+	@( echo \# > nl.po )
 
 # Norwegian/Bokmal: "nb" is an alias for "no".
 # Copying the file is not efficient, but I don't know of another way to make
@@ -175,11 +196,15 @@
 ja.sjis.po: ja.po
 	@$(MAKE) sjiscorr
 	rm -f ja.sjis.po
-	iconv -f euc-jp -t cp932 ja.po | ./sjiscorr > ja.sjis.po
+	iconv -f utf-8 -t cp932 ja.po | ./sjiscorr > ja.sjis.po
 
 sjiscorr: sjiscorr.c
 	$(CC) -o sjiscorr sjiscorr.c
 
+ja.euc-jp.po: ja.po
+	iconv -f utf-8 -t euc-jp ja.po | \
+		sed -e 's/charset=utf-8/charset=euc-jp/' -e 's/# Original translations/# Generated from ja.po, DO NOT EDIT/' > ja.euc-jp.po
+
 # Convert cs.po to create cs.cp1250.po.
 cs.cp1250.po: cs.po
 	rm -f cs.cp1250.po
diff -Naur vim73.orig/src/po/README.txt vim73/src/po/README.txt
--- vim73.orig/src/po/README.txt	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/README.txt	2013-08-04 19:09:10.563943999 +0000
@@ -65,8 +65,7 @@
 	make xx
 
     This will extract all the strings from Vim and merge them in with the
-    existing translations.  Requires the GNU gettext utilities.  Also requires
-    unpacking the extra archive.
+    existing translations.  Requires the GNU gettext utilities.
     Your original xx.po file will be copied to xx.po.orig
 
     -- After you do this, you MUST do the next three steps! --
@@ -107,3 +106,25 @@
 	make xx.mo
 
     Look out for syntax errors and fix them.
+
+
+USING GETTEXT WITHOUT ICONV
+
+When using gettext which doesn't support iconv, the encoding of the .mo file
+must match your active encoding.  For that you must convert and change
+encoding of *.po file in advance of generating the *.mo file.  For example, to
+convert ja.po to EUC-JP (supposed as your system encoding):
+
+(1) Convert the file encoding:
+
+	mv ja.po ja.po.orig
+	iconv -f utf-8 -t euc-jp ja.po.orig > ja.po
+
+(2) Rewrite charset declaration in the file:
+
+    Open ja.po find this line:
+	"Content-Type: text/plain; charset=utf-8\n"
+    You should change "charset" like this:
+	"Content-Type: text/plain; charset=euc-jp\n"
+
+There are examples in the Makefile for the conversions already supported.
diff -Naur vim73.orig/src/po/af.po vim73/src/po/af.po
--- vim73.orig/src/po/af.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/af.po	2013-08-04 19:09:10.570610646 +0000
@@ -1768,19 +1768,6 @@
 msgid "Undo"
 msgstr "Herroep"
 
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Kan nie Zap font '%s' laai nie"
-
-msgid "E611: Can't use font %s"
-msgstr "E611: Kan nie font %s gebruik nie"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Besig om doodsboodskap aan kindproses te stuur.\n"
-
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Kan nie venster titel vind nie \"%s\""
 
@@ -3752,9 +3739,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ongeldige karakter '%c' in fontnaam \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ongeldige 'osfiletype' opsie - gaan Text gebruik"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Dubbel sein, staak\n"
 
diff -Naur vim73.orig/src/po/ca.po vim73/src/po/ca.po
--- vim73.orig/src/po/ca.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/ca.po	2013-08-04 19:09:10.577277292 +0000
@@ -1,6 +1,6 @@
 # Catalan messages for vim.
-# Copyright (C) 2003-2008 Ernest Adrogu <eadrogue@gmx.net>.
-# This file is distributed under the GNU General Public License.
+# Copyright (C) 2003-2012 Ernest Adrogu <eadrogue@gmx.net>.
+# This file is distributed under the Vim License.
 #
 msgid ""
 msgstr ""
@@ -13,8 +13,6 @@
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=iso-8859-1\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Catalan\n"
-"X-Poedit-Country: SPAIN\n"
 
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: No s'ha pogut assignar memria per cap buffer, sortint..."
@@ -2077,21 +2075,6 @@
 msgstr "&Desfs"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: No s'ha pogut carregar la fosa Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: No es pot utilitzar la fosa %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Enviant un missatge per finalitzar el procs fill.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: No s'ha trobat el ttol de finestra \"%s\""
 
@@ -4282,9 +4265,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Carcter '%c' illegal en el tipus \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: L'opci 'osfiletype' no s vlida - s'usa Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: S'ha rebut un doble senyal, sortint\n"
 
diff -Naur vim73.orig/src/po/de.po vim73/src/po/de.po
--- vim73.orig/src/po/de.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/de.po	2013-08-04 19:09:10.590610586 +0000
@@ -1700,7 +1700,7 @@
 "&Load File"
 msgstr ""
 "&OK\n"
-"&Lese Datei"
+"&Lies Datei"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
@@ -1977,21 +1977,6 @@
 msgstr "&Rckgngig"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap-Schriftart '%s' kann nicht geladen werden"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Schriftart %s kann nicht verwendet werden"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Sende Nachricht zum Beenden des Kind-Prozesses.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Kann Fenstertitel \"%s\" nicht finden"
 
@@ -2769,16 +2754,16 @@
 msgstr "-Z\t\t\tEingeschrnkter Modus (wie \"rvim\")"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tModifikatioen (beim Schreiben von Dateien) sind nicht erlaubt"
+msgstr "-m\t\t\tModifikationen (beim Schreiben von Dateien) sind nicht erlaubt"
 
 msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tModifikatioen im Text nicht erlaubt"
+msgstr "-M\t\t\tModifikationen im Text nicht erlaubt"
 
 msgid "-b\t\t\tBinary mode"
 msgstr "-b\t\t\tBinrmodus"
 
 msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tList Modus"
+msgstr "-l\t\t\tLisp Modus"
 
 msgid "-C\t\t\tCompatible with Vi: 'compatible'"
 msgstr "-C\t\t\tKompatibel zu Vi: 'compatible'"
@@ -4169,9 +4154,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Unzulssiges Zeichen '%c' in der Schriftart \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Unzulssige 'osfiletype'-Option - verwende Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Doppel-Signal, beenden\n"
 
diff -Naur vim73.orig/src/po/en_GB.po vim73/src/po/en_GB.po
--- vim73.orig/src/po/en_GB.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/en_GB.po	2013-08-04 19:09:10.590610586 +0000
@@ -139,14 +139,6 @@
 msgid "E615: vim_SelFile: can't get current directory"
 msgstr "E615: vim_SelFile: cannot get current directory"
 
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Cannot load Zap font '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Cannot use font %s"
-
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
 msgstr ""
 "Vim E458: Cannot allocate colourmap entry, some colours may be incorrect"
diff -Naur vim73.orig/src/po/eo.po vim73/src/po/eo.po
--- vim73.orig/src/po/eo.po	2010-08-13 13:56:41.000000000 +0000
+++ vim73/src/po/eo.po	2013-08-04 19:09:10.597277232 +0000
@@ -14,7 +14,7 @@
 #   Komputada leksikono: http://bertilow.com/div/komputada_leksikono/
 #
 # Lasta versio:
-#   http://svn.ikso.net/programtradukoj/vim/vim7/src/po/eo.po
+#   http://dominique.pelle.free.fr/vim-eo.php
 #
 # Ĉiu komento estas bonvenata...
 # Every remark is welcome...
@@ -23,10 +23,11 @@
 msgstr ""
 "Project-Id-Version: Vim(Esperanto)\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 21:08+0200\n"
-"PO-Revision-Date: 2010-08-06 21:34+0200\n"
+"POT-Creation-Date: 2013-05-27 04:50+0200\n"
+"PO-Revision-Date: 2013-05-27 04:55+0200\n"
 "Last-Translator: Dominique PELLÉ <dominique.pelle@gmail.com>\n"
 "Language-Team: \n"
+"Language: eo\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -53,6 +54,9 @@
 msgid "[Quickfix List]"
 msgstr "[Listo de rapidriparoj]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Aŭtokomandoj haltigis komandon"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Ne eblas disponigi iun ajn bufron, nun eliras..."
 
@@ -186,7 +190,6 @@
 msgid "Top"
 msgstr "Supro"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -256,7 +259,7 @@
 msgstr "E787: Bufro ŝanĝiĝis neatendite"
 
 msgid "E104: Escape not allowed in digraph"
-msgstr "E104: Eskapsigno malpermesita en duliteraĵo"
+msgstr "E104: Eskapsigno nepermesebla en duliteraĵo"
 
 msgid "E544: Keymap file not found"
 msgstr "E544: Dosiero de klavmapo ne troveblas"
@@ -314,6 +317,12 @@
 msgid "Hit end of paragraph"
 msgstr "Atingis finon de alineo"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Kompletiga funkcio ŝanĝis la fenestron"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Kompletiga funkcio forviŝis tekston"
+
 msgid "'dictionary' option is empty"
 msgstr "La opcio 'dictionary' estas malplena"
 
@@ -457,7 +466,7 @@
 msgstr "E711: Lista valoro ne havas sufiĉe da eroj"
 
 msgid "E690: Missing \"in\" after :for"
-msgstr "E690: \"in\" mankas malantaŭ \":for\""
+msgstr "E690: \"in\" mankas post \":for\""
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -471,7 +480,7 @@
 msgstr "E743: variablo ingita tro profunde por malŝlosi"
 
 msgid "E109: Missing ':' after '?'"
-msgstr "E109: Mankas ':' malantaŭ '?'"
+msgstr "E109: Mankas ':' post '?'"
 
 msgid "E691: Can only compare List with List"
 msgstr "E691: Eblas nur kompari Liston kun Listo"
@@ -557,7 +566,7 @@
 
 #, c-format
 msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: Ne sufiĉe da argumentoj de funkcio: %s"
+msgstr "E119: Ne sufiĉe da argumentoj por funkcio: %s"
 
 #, c-format
 msgid "E120: Using <SID> not in a script context: %s"
@@ -570,6 +579,9 @@
 msgid "E808: Number or Float required"
 msgstr "E808: Nombro aŭ Glitpunktnombro bezonata"
 
+msgid "add() argument"
+msgstr "argumento de add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Tro da argumentoj"
 
@@ -584,10 +596,19 @@
 msgid "&Ok"
 msgstr "&Bone"
 
+msgid "extend() argument"
+msgstr "argumento de extend()"
+
 #, c-format
 msgid "E737: Key already exists: %s"
 msgstr "E737: Ŝlosilo jam ekzistas: %s"
 
+msgid "map() argument"
+msgstr "argumento de map()"
+
+msgid "filter() argument"
+msgstr "argumento de filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld linioj: "
@@ -606,8 +627,11 @@
 msgid "called inputrestore() more often than inputsave()"
 msgstr "alvokis inputrestore() pli ofte ol inputsave()"
 
+msgid "insert() argument"
+msgstr "argumento de insert()"
+
 msgid "E786: Range not allowed"
-msgstr "E786: Amplekso malpermesita"
+msgstr "E786: Amplekso nepermesebla"
 
 msgid "E701: Invalid type for len()"
 msgstr "E701: Nevalida datumtipo de len()"
@@ -631,12 +655,21 @@
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Ne eblas legi respondon de servilo"
 
+msgid "remove() argument"
+msgstr "argumento de remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Tro da simbolaj ligiloj (ĉu estas ciklo?)"
 
+msgid "reverse() argument"
+msgstr "argumento de reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Ne eblas sendi al kliento"
 
+msgid "sort() argument"
+msgstr "argumento de sort()"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: Ordiga funkcio fiaskis"
 
@@ -671,14 +704,6 @@
 msgstr "E806: uzo de Glitpunktnombro kiel Ĉeno"
 
 #, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Nomo de variablo Funcref ekendas per majusklo: %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Nomo de variablo konfliktas kun ekzistanta funkcio: %s"
-
-#, c-format
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706: Nekongrua datumtipo de variablo: %s"
 
@@ -687,6 +712,14 @@
 msgstr "E795: Ne eblas forviŝi variablon %s"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: Nomo de variablo Funcref devas finiĝi per majusklo: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Nomo de variablo konfliktas kun ekzistanta funkcio: %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Valoro estas ŝlosita: %s"
 
@@ -708,10 +741,17 @@
 msgid "E124: Missing '(': %s"
 msgstr "E124: Mankas '(': %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Ne eblas uzi g: ĉi tie"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Nevalida argumento: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Ripetita nomo de argumento: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Mankas \":endfunction\""
 
@@ -854,7 +894,6 @@
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Tiu dosiero viminfo estis kreita de Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -862,7 +901,6 @@
 "# Vi povas redakti ĝin se vi estas singarda.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Valoro de 'encoding' kiam tiu dosiero estis kreita\n"
 
@@ -930,7 +968,7 @@
 msgstr "E144: nenumera argumento de :z"
 
 msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: Ŝelkomandoj ne permesataj en rvim"
+msgstr "E145: Ŝelkomandoj nepermeseblaj en rvim"
 
 msgid "E146: Regular expressions can't be delimited by letters"
 msgstr "E146: Ne eblas limigi regulesprimon per literoj"
@@ -975,6 +1013,9 @@
 msgstr "Ŝablono trovita en ĉiuj linioj: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "Ŝablono ne trovita: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1223,7 +1264,7 @@
 msgstr "E319: Bedaŭrinde, tiu komando ne haveblas en tiu versio"
 
 msgid "E172: Only one file name allowed"
-msgstr "E172: Nur unu dosiernomo permesita"
+msgstr "E172: Nur unu dosiernomo permesebla"
 
 msgid "1 more file to edit.  Quit anyway?"
 msgstr "1 plia redaktenda dosiero. Ĉu tamen eliri?"
@@ -1278,6 +1319,9 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: Komandoj difinataj de uzanto devas eki per majusklo"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Rezervita nomo, neuzebla por komando difinita de uzanto"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Neniu komando-difinita-de-uzanto kiel: %s"
@@ -1288,7 +1332,8 @@
 
 msgid "E468: Completion argument only allowed for custom completion"
 msgstr ""
-"E468: Argumento de kompletigo nur permesata por kompletigo difinita de uzanto"
+"E468: Argumento de kompletigo nur permesebla por kompletigo difinita de "
+"uzanto"
 
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: Uzula kompletigo bezonas funkcian argumenton"
@@ -1297,8 +1342,8 @@
 msgstr "nekonata"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Ne eblas trovi agordaron de koloroj %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Ne eblas trovi agordaron de koloroj '%s'"
 
 msgid "Greetings, Vim user!"
 msgstr "Bonvenon, uzanto de Vim!"
@@ -1384,30 +1429,25 @@
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Neniu alterna dosiernomo por anstataŭigi al '#'"
 
-# DP: mi ne certas, ĉu <afile> tradukeblas
-# AM: laŭ mi ne
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
 msgstr "E495: neniu dosiernomo de aŭtokomando por anstataŭigi al \"<afile>\""
 
-# DP: mi ne certas, ĉu <abuf> tradukeblas
-# AM: laŭ mi ne
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
 msgstr ""
 "E496: neniu numero de bufro de aŭtokomando por anstataŭigi al \"<abuf>\""
 
-# DP: mi ne certas, ĉu <amatch> tradukeblas
-# AM: laŭ mi ne
 # DP: ĉu match estas verbo aŭ nomo en la angla version?
 # AM: ĉi tie, nomo, ŝajnas al mi
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
 msgstr ""
 "E497: neniu nomo de kongruo de aŭtokomando por anstataŭigi al \"<amatch>\""
 
-# DP: mi ne certas, ĉu <sfile> tradukeblas
-# AM: laŭ mi ne
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: neniu dosiernomo \":source\" por anstataŭigi al \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: neniu uzebla numero de linio por \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Malplena dosiernomo por '%' aŭ '#', nur funkcias kun \":p:h\""
@@ -1487,7 +1527,7 @@
 msgstr "E583: pluraj \":else\""
 
 msgid "E584: :elseif after :else"
-msgstr "E584: \":elseif\" malantaŭ \":else\""
+msgstr "E584: \":elseif\" post \":else\""
 
 msgid "E585: :while/:for nesting too deep"
 msgstr "E585: \":while/:for\" ingita tro profunde"
@@ -1513,7 +1553,7 @@
 #. Give up for a ":catch" after ":finally" and ignore it.
 #. * Just parse.
 msgid "E604: :catch after :finally"
-msgstr "E604: \":catch\" malantaŭ \":finally\""
+msgstr "E604: \":catch\" post \":finally\""
 
 msgid "E606: :finally without :try"
 msgstr "E606: \":finally\" sen \":try\""
@@ -1529,7 +1569,7 @@
 msgstr "E193: \":endfunction\" ekster funkcio"
 
 msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Nun malpermesas redakti alian bufron"
+msgstr "E788: Ne eblas redakti alian bufron nun"
 
 msgid "E811: Not allowed to change buffer information now"
 msgstr "E811: Ne eblas ŝanĝi informon de bufro nun"
@@ -1639,6 +1679,9 @@
 msgid "[converted]"
 msgstr "[konvertita]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[ĉifrita]"
 
@@ -1816,6 +1859,7 @@
 msgid "%lld characters"
 msgstr "%lld signoj"
 
+#. Explicit typecast avoids warning on Mac OS X 10.6
 #, c-format
 msgid "%ld characters"
 msgstr "%ld signoj"
@@ -1914,7 +1958,7 @@
 
 #, c-format
 msgid "E215: Illegal character after *: %s"
-msgstr "E215: Nevalida signo malantaŭ *: %s"
+msgstr "E215: Nevalida signo post *: %s"
 
 #, c-format
 msgid "E216: No such event: %s"
@@ -2007,6 +2051,12 @@
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: Nevalida reĝimo"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Ne sukcesis krei novan procezon por la grafika interfaco"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: La ida procezo ne sukcesis startigi la grafikan interfacon"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Ne eblas lanĉi la grafikan interfacon"
 
@@ -2090,7 +2140,7 @@
 
 #. whole word only button
 msgid "Match whole word only"
-msgstr "Kongrui nur plenan vorton"
+msgstr "Kongrui kun nur plena vorto"
 
 #. match case button
 msgid "Match case"
@@ -2170,21 +2220,6 @@
 msgstr "&Malfari"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Ne eblas ŝargi la tiparon Zap \"%s\""
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Ne eblas uzi tiparon %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Sendas mesaĝon por finigi idan procezon\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ne eblas trovi titolon de fenestro \"%s\""
 
@@ -2230,7 +2265,7 @@
 
 #, c-format
 msgid "Font '%s' is not fixed-width"
-msgstr "Tiparo \"%s\" ne estas egallarĝa"
+msgstr "Tiparo '%s' ne estas egallarĝa"
 
 #, c-format
 msgid "E253: Fontset name: %s\n"
@@ -2486,7 +2521,7 @@
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Trovi funkciojn, kiuj alvokas tiun funkcion\n"
@@ -2496,7 +2531,7 @@
 "       g: Trovi tiun difinon\n"
 "       i: Trovi dosierojn, kiuj inkluzivas (#include) tiun dosieron\n"
 "       s: Trovi tiun C-simbolon\n"
-"       t: Trovi atribuojn al\n"
+"       t: Trovi tiun ĉenon\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2590,6 +2625,9 @@
 msgid "string cannot contain newlines"
 msgstr "ĉeno ne rajtas enhavi liniavancojn"
 
+msgid "error converting Scheme values to Vim"
+msgstr "eraro dum konverto de Scheme-valoro al Vim"
+
 msgid "Vim error: ~a"
 msgstr "Eraro de Vim: ~a"
 
@@ -2606,13 +2644,13 @@
 msgstr "numero de linio ekster limoj"
 
 msgid "not allowed in the Vim sandbox"
-msgstr "nepermesita en sabloludejo de Vim"
+msgstr "nepermesebla en sabloludejo de Vim"
 
 msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Pitono: Ne eblas uzi :py kaj :py3 en la sama seanco"
+msgstr "E836: Vim ne povas plenumi :python post uzo de :py3"
 
-msgid "E837: This Vim cannot execute :py3 after using :python"
-msgstr "E837: Pitono: Ne eblas uzi :py kaj :py3 en la sama seanco"
+msgid "only string keys are allowed"
+msgstr "nur ĉenaj ŝlosiloj estas permeseblaj"
 
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
@@ -2624,18 +2662,11 @@
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Ne eblas alvoki Pitonon rekursie"
 
-msgid "can't delete OutputObject attributes"
-msgstr "ne eblas forviŝi atributojn de OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "malmolspaceto (softspace) devas esti entjero"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Vim ne povas plenumi :py3  post uzo de :python"
 
-msgid "invalid attribute"
-msgstr "nevalida atributo"
-
-#, c-format
-msgid "<buffer object (deleted) at %p>"
-msgstr "<bufra objekto (forviŝita) ĉe %p>"
+msgid "index must be int or slice"
+msgstr "indekso devas esti 'int' aŭ 'slice'"
 
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ devas esti apero de Ĉeno"
@@ -2669,7 +2700,7 @@
 msgstr "E273: nekonata stato de longjmp: %d"
 
 msgid "Toggle implementation/definition"
-msgstr "Baskuli realigon/difinon"
+msgstr "Baskuligi realigon/difinon"
 
 msgid "Show base class of"
 msgstr "Vidigi bazan klason de"
@@ -2760,10 +2791,10 @@
 msgstr "Sniff: Eraro dum skribo. Malkonektita"
 
 msgid "invalid buffer number"
-msgstr "nevalida nombro de bufroj"
+msgstr "nevalida numero de bufro"
 
 msgid "not implemented yet"
-msgstr "ne jam realigita"
+msgstr "ankoraŭ ne realigita"
 
 #. ???
 msgid "cannot set line(s)"
@@ -2825,12 +2856,6 @@
 "E571: Bedaŭrinde tiu komando estas malŝaltita: la biblioteko Tcl ne "
 "ŝargeblis."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: TCL-ERARO: elira kodo ne estas entjera!? Bv. retpoŝti al vim-dev@vim."
-"org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: elira kodo %d"
@@ -2859,10 +2884,10 @@
 msgstr "Tro da argumentoj de redakto"
 
 msgid "Argument missing after"
-msgstr "Argumento mankas malantaŭ"
+msgstr "Argumento mankas post"
 
 msgid "Garbage after option argument"
-msgstr "Forĵetindaĵo malantaŭ argumento de opcio"
+msgstr "Forĵetindaĵo post argumento de opcio"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr "Tro da argumentoj \"+komando\", \"-c komando\" aŭ \"--cmd komando\""
@@ -2965,7 +2990,7 @@
 "Argumentoj:\n"
 
 msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tNur dosiernomoj malantaŭ tio"
+msgstr "--\t\t\tNur dosiernomoj post tio"
 
 msgid "--literal\t\tDon't expand wildcards"
 msgstr "--literal\t\tNe malvolvi ĵokerojn"
@@ -2988,6 +3013,9 @@
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tReĝimo Ex (kiel \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tPlibonigita Ex-reĝimo"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tSilenta (stapla) reĝimo (nur por \"ex\")"
 
@@ -3004,10 +3032,10 @@
 msgstr "-Z\t\t\tLimigita reĝimo (kiel \"rvim\")"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tŜanĝoj (skribo al dosieroj) malpermesitaj"
+msgstr "-m\t\t\tŜanĝoj (skribo al dosieroj) nepermeseblaj"
 
 msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tŜanĝoj al teksto malpermesitaj"
+msgstr "-M\t\t\tŜanĝoj al teksto nepermeseblaj"
 
 msgid "-b\t\t\tBinary mode"
 msgstr "-b\t\t\tDuuma reĝimo"
@@ -3035,7 +3063,7 @@
 msgstr "-r\t\t\tListigi permutodosierojn .swp kaj eliri"
 
 msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (kun dosiernomo)\tRestaŭri kolapsitan seancon"
+msgstr "-r (kun dosiernomo)\tRestaŭri kolapsintan seancon"
 
 msgid "-L\t\t\tSame as -r"
 msgstr "-L\t\t\tKiel -r"
@@ -3190,12 +3218,6 @@
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tLanĉi vim piktograme"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <nomo>\t\tUzi rimedon kvazaŭ vim estus <nomo>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Nerealigita)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <koloro>\tUzi <koloro>-n por la fona koloro (ankaŭ: -bg)"
 
@@ -3237,19 +3259,6 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Argumentoj agnoskitaj de gvim (versio RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <nombro>\tKomenca larĝo de fenestro en kolumnoj"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <nombro>\tKomenca alto de fenestro en vicoj"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3264,6 +3273,9 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tMalfermi Vim en alia GTK fenestraĵo"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tIgas gvim afiŝi la identigilon de vindozo sur stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <gepatra titolo>\tMalfermi Vim en gepatra aplikaĵo"
 
@@ -3322,7 +3334,6 @@
 "\n"
 "ŝanĝo  linio kol teksto"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3331,7 +3342,6 @@
 "# Markoj de dosiero:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3339,7 +3349,6 @@
 "\n"
 "# Saltlisto (plej novaj unue):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3399,6 +3408,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Ĉu ne akiris blokon n-ro 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Eraro dum ĝisdatigo de ĉifrada permutodosiero .swp"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ve, perdis la permutodosieron .swp!!!"
@@ -3655,7 +3667,7 @@
 "        proceza ID: "
 
 msgid " (still running)"
-msgstr " (ankoraŭ rulas)"
+msgstr " (ankoraŭ ruliĝas)"
 
 msgid ""
 "\n"
@@ -3757,24 +3769,20 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
 "(1) Alia programo eble redaktas la saman dosieron.\n"
 "    Se jes, estu singarda por ne havi du malsamajn\n"
-"    aperojn de la sama dosiero, kiam vi faros ŝanĝojn.\n"
+"    aperojn de la sama dosiero, kiam vi faros ŝanĝojn."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Eliru, aŭ daŭrigu singarde.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Eliru, aŭ daŭrigu singarde.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Redakta seanco de tiu dosiero kolapsis.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Redakta seanco de tiu dosiero kolapsis.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Se veras, uzu \":recover\" aŭ \"vim -r "
@@ -4008,7 +4016,6 @@
 msgid "Vim: Finished.\n"
 msgstr "Vim: Finita.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ERARO: "
 
@@ -4068,6 +4075,9 @@
 msgid "Keys don't match!"
 msgstr "Ŝlosiloj ne kongruas!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: tro longa vojo por kompletigo"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4110,11 +4120,15 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Konekto de NetBeans perdita por bufro %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans ne estas subtenata kun tiu grafika interfaco"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: nebeans jam konektata"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s estas nurlegebla (aldonu ! por transpasi)"
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Neniu identigilo sub la kursoro"
@@ -4245,8 +4259,8 @@
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"Apartigis %s%ld de %ld Linioj; %ld de %ld Vortoj; %ld de %ld Signoj; %ld de %"
-"ld Bajtoj"
+"Apartigis %s%ld de %ld Linioj; %ld de %ld Vortoj; %ld de %ld Signoj; %ld de "
+"%ld Bajtoj"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4257,8 +4271,8 @@
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Kol %s de %s; Linio %ld de %ld; Vorto %ld de %ld; Signo %ld de %ld; Bajto %"
-"ld de %ld"
+"Kol %s de %s; Linio %ld de %ld; Vorto %ld de %ld; Signo %ld de %ld; Bajto "
+"%ld de %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4277,10 +4291,13 @@
 msgstr "E519: Opcio ne subtenata"
 
 msgid "E520: Not allowed in a modeline"
-msgstr "E520: Ne permesita en reĝimlinio"
+msgstr "E520: Nepermesebla en reĝimlinio"
+
+msgid "E846: Key code not set"
+msgstr "E846: Klavkodo ne agordita"
 
 msgid "E521: Number required after ="
-msgstr "E521: Nombro bezonata malantaŭ ="
+msgstr "E521: Nombro bezonata post ="
 
 msgid "E522: Not found in termcap"
 msgstr "E522: Netrovita en termcap"
@@ -4318,7 +4335,7 @@
 
 #, c-format
 msgid "E526: Missing number after <%s>"
-msgstr "E526: Mankas nombro malantaŭ <%s>"
+msgstr "E526: Mankas nombro post <%s>"
 
 msgid "E527: Missing comma"
 msgstr "E527: Mankas komo"
@@ -4346,7 +4363,7 @@
 
 #, c-format
 msgid "E535: Illegal character after <%c>"
-msgstr "E535: Nevalida signo malantaŭ <%c>"
+msgstr "E535: Nevalida signo post <%c>"
 
 msgid "E536: comma required"
 msgstr "E536: komo bezonata"
@@ -4429,7 +4446,7 @@
 
 #, c-format
 msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': Ekstraj signoj malantaŭ punktokomo: %s"
+msgstr "E358: 'langmap': Ekstraj signoj post punktokomo: %s"
 
 msgid "cannot open "
 msgstr "ne eblas malfermi "
@@ -4502,7 +4519,7 @@
 
 #, c-format
 msgid "Printing '%s'"
-msgstr "Presas \"%s\""
+msgstr "Presas '%s'"
 
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
@@ -4512,10 +4529,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Nevalida signo '%c' en nomo de tiparo \"%s\""
 
-# DP: ĉu traduki Text?
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Nevalida opcio 'osfiletype' - uzas Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Duobla signalo, eliranta\n"
 
@@ -4740,18 +4753,9 @@
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: nevalida ano en %s%%[]"
 
-msgid "E339: Pattern too long"
-msgstr "E339: Ŝablono tro longa"
-
-msgid "E50: Too many \\z("
-msgstr "E50: Tro da \\z("
-
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Tro da %s("
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: Neekvilibra \\z("
+msgid "E769: Missing ] after %s["
+msgstr "E769: Mankas ] post %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -4765,9 +4769,22 @@
 msgid "E55: Unmatched %s)"
 msgstr "E55: Neekvilibra %s"
 
+msgid "E339: Pattern too long"
+msgstr "E339: Ŝablono tro longa"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Tro da \\z("
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: Tro da %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Neekvilibra \\z("
+
 #, c-format
 msgid "E59: invalid character after %s@"
-msgstr "E59: nevalida signo malantaŭ %s@"
+msgstr "E59: nevalida signo post %s@"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
@@ -4792,18 +4809,18 @@
 msgstr "E65: Nevalida retro-referenco"
 
 msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( estas malpermesa tie"
+msgstr "E66: \\z( estas permesebla tie"
 
 # DP: vidu http://www.thefreedictionary.com/et+al.
 msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 kaj aliaj estas malpermesataj tie"
+msgstr "E67: \\z1 kaj aliaj estas nepermeseblaj tie"
 
 msgid "E68: Invalid character after \\z"
-msgstr "E68: Nevalida signo malantaŭ \\z"
+msgstr "E68: Nevalida signo post \\z"
 
 #, c-format
 msgid "E69: Missing ] after %s%%["
-msgstr "E69: Mankas ] malantaŭ %s%%["
+msgstr "E69: Mankas ] post %s%%["
 
 #, c-format
 msgid "E70: Empty %s%%[]"
@@ -4811,15 +4828,11 @@
 
 #, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: Nevalida signo malantaŭ %s%%[dxouU]"
+msgstr "E678: Nevalida signo post %s%%[dxouU]"
 
 #, c-format
 msgid "E71: Invalid character after %s%%"
-msgstr "E71: Nevalida signo malantaŭ %s%%"
-
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Mankas ] malantaŭ %s["
+msgstr "E71: Nevalida signo post %s%%"
 
 #, c-format
 msgid "E554: Syntax error in %s{...}"
@@ -4828,6 +4841,83 @@
 msgid "External submatches:\n"
 msgstr "Eksteraj subkongruoj:\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr ""
+"E864: \\%#= povas nur esti sekvita de 0, 1, aŭ 2. La aŭtomata motoro de "
+"regulesprimo estos uzata "
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (NFA-regulesprimo) Mispoziciigita %c"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) Trovis finon de regulesprimo tro frue"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) Nekonata operatoro '\\z%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: Eraro dum prekomputado de NFA kun ekvivalentoklaso!"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) Nekonata operatoro '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (NFS-regulesprimo) Eraro dum legado de limoj de ripeto"
+
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr ""
+"E871: (NFA-regulesprimo) Ne povas havi mult-selekton tuj post alia mult-"
+"selekto!"
+
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (NFA-regulesprimo) tro da '('"
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (NFA-regulesprimo) propra end-eraro"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Ne povis elpreni de la staplo!"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (NFA-regulesprimo) (dum konverto de postmeto al NFA), restas tro da "
+"statoj en la staplo"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (NFA-regulesprimo) ne sufiĉa spaco por enmomorigi la tutan NFA "
+
+msgid "E999: (NFA regexp internal error) Should not process NOT node !"
+msgstr ""
+"E999: (interna eraro de NFA-regulesprimo) Ne devus procezi nodon 'NOT'!"
+
+#. should not be here :P
+msgid "E877: (NFA regexp) Invalid character class "
+msgstr "E877: (NFA-regulesprimo) Nevalida klaso de signo "
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) NE POVIS MALFERMI %s!"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr ""
+"Ne povis malfermi provizoran protokolan dosieron por skribi, nun montras sur "
+"stderr ..."
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr "E878: (NFA) Ne povis asigni memoron por traigi branĉojn!"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Ne povis malfermi la provizoran protokolan dosieron por skribi "
+
 msgid " VREPLACE"
 msgstr " V-ANSTATAŬIGO"
 
@@ -4895,7 +4985,7 @@
 msgstr "E385: serĉo atingis SUBON sen trovi: %s"
 
 msgid "E386: Expected '?' or '/'  after ';'"
-msgstr "E386: Atendis '?' aŭ '/' malantaŭ ';'"
+msgstr "E386: Atendis '?' aŭ '/' post ';'"
 
 msgid " (includes previously listed match)"
 msgstr " (enhavas antaŭe listigitajn kongruojn)"
@@ -4905,7 +4995,7 @@
 msgstr "--- Inkluzivitaj dosieroj "
 
 msgid "not found "
-msgstr "netrovita "
+msgstr "netrovitaj "
 
 msgid "in path ---\n"
 msgstr "en serĉvojo ---\n"
@@ -4979,6 +5069,10 @@
 msgstr "E756: Literumilo ne estas ŝaltita"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "Averto: Ne eblas trovi vortliston \"%s_%s.spl\" aŭ \"%s_ascii.spl\""
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "Averto: Ne eblas trovi vortliston \"%s.%s.spl\" aŭ \"%s.ascii.spl\""
 
@@ -5024,23 +5118,23 @@
 
 #, c-format
 msgid "FLAG after using flags in %s line %d: %s"
-msgstr "FLAG malantaŭ flagoj en %s linio %d: %s"
+msgstr "FLAG post flagoj en %s linio %d: %s"
 
 #, c-format
 msgid ""
 "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
 "%d"
 msgstr ""
-"Difino de COMPOUNDFORBIDFLAG malantaŭ ano PFX povas doni neĝustajn rezultojn "
-"en %s linio %d"
+"Difino de COMPOUNDFORBIDFLAG post ano PFX povas doni neĝustajn rezultojn en "
+"%s linio %d"
 
 #, c-format
 msgid ""
 "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
 "%d"
 msgstr ""
-"Difino de COMPOUNDPERMITFLAG malantaŭ ano PFX povas doni neĝustajn rezultojn "
-"en %s linio %d"
+"Difino de COMPOUNDPERMITFLAG post ano PFX povas doni neĝustajn rezultojn en "
+"%s linio %d"
 
 #, c-format
 msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
@@ -5176,7 +5270,7 @@
 
 #, c-format
 msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "Linio /encoding= malantaŭ vorto ignorita en %s linio %d: %s"
+msgstr "Linio /encoding= post vorto ignorita en %s linio %d: %s"
 
 #, c-format
 msgid "Duplicate /regions= line ignored in %s line %d: %s"
@@ -5202,6 +5296,9 @@
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "Ignoris %d vorto(j)n kun neaskiaj signoj"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Ne sufiĉe da memoro, vortlisto estos nekompleta."
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "Densigis %d de %d nodoj; %d (%d%%) restantaj"
@@ -5379,8 +5476,8 @@
 msgid "E395: contains argument not accepted here"
 msgstr "E395: La argumento \"contains\" ne akcepteblas tie"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: La argumento \"containedin\" ne akcepteblas tie"
+msgid "E844: invalid cchar value"
+msgstr "E844: nevalida valoro de cchar"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: La argumento \"group[t]here\" ne akcepteblas tie"
@@ -5392,6 +5489,9 @@
 msgid "E397: Filename required"
 msgstr "E397: Dosiernomo bezonata"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Tro da sintaksaj inkluzivoj"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: Mankas ']': %s"
@@ -5404,6 +5504,9 @@
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Ne sufiĉaj argumentoj: sintaksa regiono %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Tro da sintaksaj grupoj"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Neniu fasko specifita"
 
@@ -5413,7 +5516,7 @@
 
 #, c-format
 msgid "E402: Garbage after pattern: %s"
-msgstr "E402: Forĵetindaĵo malantaŭ ŝablono: %s"
+msgstr "E402: Forĵetindaĵo post ŝablono: %s"
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
 msgstr "E403: sintaksa sinkronigo: ŝablono de linia daŭrigo specifita dufoje"
@@ -5432,7 +5535,7 @@
 
 #, c-format
 msgid "E407: %s not allowed here"
-msgstr "E407: %s ne estas permesata tie"
+msgstr "E407: %s ne estas permesebla tie"
 
 #, c-format
 msgid "E408: %s must be first in contains list"
@@ -5507,6 +5610,9 @@
 msgid "W18: Invalid character in group name"
 msgstr "W18: Nevalida signo en nomo de grupo"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Tro da emfazaj kaj sintaksaj grupoj"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: ĉe subo de stako de etikedoj"
 
@@ -5568,6 +5674,9 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Vojo de etikeda dosiero trunkita por %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Ignoro de longa linio en etikeda dosiero"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: Eraro de formato en etikeda dosiero \"%s\""
@@ -5584,9 +5693,6 @@
 msgid "E433: No tags file"
 msgstr "E433: Neniu etikeda dosiero"
 
-msgid "Ignoring long line in tags file"
-msgstr "Ignoro de longa linio en etikeda dosiero"
-
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Ne eblas trovi ŝablonon de etikedo"
 
@@ -5681,7 +5787,7 @@
 
 #, c-format
 msgid "Reading undo file: %s"
-msgstr "Legado de de malfara dosiero: %s"
+msgstr "Legado de malfara dosiero: %s"
 
 #, c-format
 msgid "E822: Cannot open undo file for reading: %s"
@@ -5753,20 +5859,20 @@
 msgstr "antaŭ"
 
 msgid "after"
-msgstr "malantaŭ"
+msgstr "post"
 
 msgid "Nothing to undo"
 msgstr "Nenio por malfari"
 
-msgid "number changes  time            saved"
-msgstr "numero ŝanĝoj   tempo           konservita"
+msgid "number changes  when               saved"
+msgstr "numero ŝanĝoj   tempo              konservita"
 
 #, c-format
 msgid "%ld seconds ago"
 msgstr "antaŭ %ld sekundoj"
 
 msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: undojoin estas nepermesita malantaŭ malfaro"
+msgstr "E790: undojoin estas nepermesebla post malfaro"
 
 msgid "E439: undo list corrupt"
 msgstr "E439: listo de malfaro estas difekta"
@@ -5860,13 +5966,6 @@
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"Versio RISC operaciumo"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6054,7 +6153,7 @@
 msgstr "tajpu  :help version7<Enenklavo>  por informo de versio"
 
 msgid "Running in Vi compatible mode"
-msgstr "Rulas en reĝimo kongrua kun Vi"
+msgstr "Ruliĝas en reĝimo kongrua kun Vi"
 
 # DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
 msgid "type  :set nocp<Enter>        for Vim defaults"
@@ -6069,11 +6168,11 @@
 msgstr "menuo  Help->Orfinoj              por pliaj informoj   "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "Rulas senreĝime, tajpita teksto estas enmetita"
+msgstr "Ruliĝas senreĝime, tajpita teksto estas enmetita"
 
 # DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "menuo Redakti->Mallokaj Agordoj->Baskuli Enmetan Reĝimon"
+msgstr "menuo Redakti->Mallokaj Agordoj->Baskuligi Enmetan Reĝimon"
 
 # DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
 msgid "                              for two modes      "
@@ -6082,7 +6181,7 @@
 # DP: tiu ĉeno pli longas (mi ne volas igi ĉiujn aliajn ĉenojn
 #     pli longajn)
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "menuo Redakti->Mallokaj Agordoj->Baskuli Reĝimon Kongruan kun Vi"
+msgstr "menuo Redakti->Mallokaj Agordoj->Baskuligi Reĝimon Kongruan kun Vi"
 
 # DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
 msgid "                              for Vim defaults   "
@@ -6206,7 +6305,7 @@
 
 msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
 msgstr ""
-"E12: Malpermesata komando el exrc/vimrc en aktuala dosierujo aŭ etikeda serĉo"
+"E12: Nepermesebla komando el exrc/vimrc en aktuala dosierujo aŭ etikeda serĉo"
 
 msgid "E171: Missing :endif"
 msgstr "E171: Mankas \":endif\""
@@ -6301,7 +6400,7 @@
 msgstr "E24: Ne estas tia mallongigo"
 
 msgid "E477: No ! allowed"
-msgstr "E477: Neniu ! permesita"
+msgstr "E477: Neniu ! permesebla"
 
 msgid "E25: GUI cannot be used: Not enabled at compile time"
 msgstr "E25: Grafika interfaco ne uzeblas: Malŝaltita dum kompilado"
@@ -6348,7 +6447,7 @@
 msgstr "E35: Neniu antaŭa regulesprimo"
 
 msgid "E481: No range allowed"
-msgstr "E481: Amplekso ne permesita"
+msgstr "E481: Amplekso nepermesebla"
 
 msgid "E36: Not enough room"
 msgstr "E36: Ne sufiĉe da spaco"
@@ -6431,10 +6530,10 @@
 msgstr "E47: Eraro dum legado de erardosiero"
 
 msgid "E48: Not allowed in sandbox"
-msgstr "E48: Ne permesita en sabloludejo"
+msgstr "E48: Nepermesebla en sabloludejo"
 
 msgid "E523: Not allowed here"
-msgstr "E523: Ne permesita tie"
+msgstr "E523: Nepermesebla tie"
 
 msgid "E359: Screen mode setting not supported"
 msgstr "E359: Reĝimo de ekrano ne subtenata"
@@ -6519,6 +6618,9 @@
 msgid "E764: Option '%s' is not set"
 msgstr "E764: La opcio '%s' ne estas ŝaltita"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Nevalida nomo de reĝistro"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "serĉo atingis SUPRON, daŭrigonte al SUBO"
 
@@ -6529,14 +6631,110 @@
 msgid "Need encryption key for \"%s\""
 msgstr "Ŝlosilo de ĉifrado bezonata por \"%s\""
 
+msgid "can't delete OutputObject attributes"
+msgstr "ne eblas forviŝi atributojn de OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "malmolspaceto (softspace) devas esti entjero"
+
+msgid "invalid attribute"
+msgstr "nevalida atributo"
+
 msgid "writelines() requires list of strings"
 msgstr "writelines() bezonas liston de ĉenoj"
 
 msgid "E264: Python: Error initialising I/O objects"
 msgstr "E264: Pitono: Eraro de pravalorizo de eneligaj objektoj"
 
-msgid "no such buffer"
-msgstr "ne estas tia bufro"
+msgid "empty keys are not allowed"
+msgstr "malplenaj ŝlosiloj nepermeseblaj"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "ne eblas forviŝi atributojn de DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Ne eblas ŝanĝi fiksan vortaron"
+
+msgid "Cannot set this attribute"
+msgstr "Ne eblas agordi tiun atributon"
+
+msgid "dict is locked"
+msgstr "vortaro estas ŝlosita"
+
+msgid "failed to add key to dictionary"
+msgstr "aldono de ŝlosilo al vortaro fiaskis"
+
+msgid "list index out of range"
+msgstr "indekso de listo ekster limoj"
+
+msgid "internal error: failed to get vim list item"
+msgstr "interna eraro: obteno de vim-a listero fiaskis"
+
+msgid "list is locked"
+msgstr "listo estas ŝlosita"
+
+msgid "Failed to add item to list"
+msgstr "Aldono de listero fiaskis"
+
+msgid "internal error: no vim list item"
+msgstr "interna eraro: neniu vim-a listero"
+
+msgid "can only assign lists to slice"
+msgstr "nur eblas pravalorizi listojn al segmento"
+
+msgid "internal error: failed to add item to list"
+msgstr "interna eraro: aldono de listero fiaskis"
+
+msgid "can only concatenate with lists"
+msgstr "eblas nur kunmeti kun listoj"
+
+msgid "cannot delete vim.dictionary attributes"
+msgstr "ne eblas forviŝi atributojn de 'vim.dictionary'"
+
+msgid "cannot modify fixed list"
+msgstr "ne eblas ŝanĝi fiksan liston"
+
+msgid "cannot set this attribute"
+msgstr "ne eblas agordi tiun atributon"
+
+msgid "'self' argument must be a dictionary"
+msgstr "argumento 'self' devas esti vortaro"
+
+msgid "failed to run function"
+msgstr "fiaskis ruli funkcion"
+
+msgid "unable to get option value"
+msgstr "fiaskis akiri valoron de opcio"
+
+msgid "unable to unset global option"
+msgstr "ne povis malŝalti mallokan opcion"
+
+msgid "unable to unset option without global value"
+msgstr "ne povis malŝalti opcion sen malloka valoro"
+
+msgid "object must be integer"
+msgstr "objekto devas esti entjero."
+
+msgid "object must be string"
+msgstr "objekto devas esti ĉeno"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "provo de referenco al forviŝita langeto"
+
+#, c-format
+msgid "<tabpage object (deleted) at %p>"
+msgstr "<langeta objekto (forviŝita) ĉe %p>"
+
+#, c-format
+msgid "<tabpage object (unknown) at %p>"
+msgstr "<langeta objekto (nekonata) ĉe %p>"
+
+#, c-format
+msgid "<tabpage %d>"
+msgstr "<langeto %d>"
+
+msgid "no such tab page"
+msgstr "ne estas tia langeto"
 
 msgid "attempt to refer to deleted window"
 msgstr "provo de referenco al forviŝita fenestro"
@@ -6564,3 +6762,64 @@
 
 msgid "attempt to refer to deleted buffer"
 msgstr "provo de referenco al forviŝita bufro"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<bufra objekto (forviŝita) ĉe %p>"
+
+msgid "key must be integer"
+msgstr "ŝlosilo devas esti entjero."
+
+msgid "expected vim.buffer object"
+msgstr "atendis objekton vim.buffer"
+
+msgid "failed to switch to given buffer"
+msgstr "ne povis salti al la specifita bufro"
+
+msgid "expected vim.window object"
+msgstr "atendis objekton vim.window"
+
+msgid "failed to find window in the current tab page"
+msgstr "ne povis trovi vindozon en la nuna langeto"
+
+msgid "did not switch to the specified window"
+msgstr "ne saltis al la specifita vindozo"
+
+msgid "expected vim.tabpage object"
+msgstr "atendis objekton vim.tabpage"
+
+msgid "did not switch to the specified tab page"
+msgstr "ne saltis al la specifita langeto"
+
+msgid "failed to run the code"
+msgstr "fiaskis ruli la kodon"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval ne revenis kun valida python-objekto"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Konverto de revena python-objekto al vim-valoro fiaskis"
+
+msgid "unable to convert to vim structure"
+msgstr "ne povis konverti al vim-strukturo"
+
+msgid "NULL reference passed"
+msgstr "NULL-referenco argumento"
+
+msgid "internal error: invalid value type"
+msgstr "interna eraro: nevalida tipo de valoro"
+
+#~ msgid "E863: return value must be an instance of str"
+#~ msgstr "E863: elira valoro devas esti apero de str"
+
+#~ msgid "E860: Eval did not return a valid python 3 object"
+#~ msgstr "E860: Eval ne revenis kun valida python3-objekto"
+
+#~ msgid "E861: Failed to convert returned python 3 object to vim value"
+#~ msgstr "E861: Konverto de revena python3-objekto al vim-valoro fiaskis"
+
+#~ msgid "Only boolean objects are allowed"
+#~ msgstr "Nur buleaj objektoj estas permeseblaj"
+
+#~ msgid "no such key in dictionary"
+#~ msgstr "tiu ŝlosilo ne ekzistas en vortaro"
diff -Naur vim73.orig/src/po/es.po vim73/src/po/es.po
--- vim73.orig/src/po/es.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/es.po	2013-08-04 19:09:10.603943879 +0000
@@ -2806,24 +2806,6 @@
 msgid "&Undo"
 msgstr "&Deshacer"
 
-#: gui_riscos.c:953
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: No se pudo cargar el tipo de letra de impresión Zap '%s'"
-
-#: gui_riscos.c:1052
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: No se puede usar el tipo de letra de impresión %s"
-
-#: gui_riscos.c:3282
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Enviando mensaje para terminar los procesos dependientes (\"child\").\n"
-
 #: gui_w32.c:1177
 #, c-format
 msgid "E671: Cannot find window title \"%s\""
@@ -5814,10 +5796,6 @@
 "E245: Carácter '%c' ilegal en el nombre del tipo de letra de\n"
 "impresión %s"
 
-#: os_riscos.c:1263
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: La opción \"osfiletype\" no es válida - usando Texto"
-
 #: os_unix.c:1065
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Señal doble, saliendo\n"
diff -Naur vim73.orig/src/po/fi.po vim73/src/po/fi.po
--- vim73.orig/src/po/fi.po	2010-08-13 13:57:05.000000000 +0000
+++ vim73/src/po/fi.po	2013-08-04 19:09:10.607277202 +0000
@@ -367,7 +367,7 @@
 
 #, c-format
 msgid "E121: Undefined variable: %s"
-msgstr "E121: Mrittelemtn muuttuja %s"
+msgstr "E121: Mrittelemtn muuttuja: %s"
 
 msgid "E111: Missing ']'"
 msgstr "E111: ] puuttuu"
@@ -392,7 +392,7 @@
 
 #, c-format
 msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Liikaa argumentteja funktiolle %s"
+msgstr "E118: Liikaa argumentteja funktiolle: %s"
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
@@ -1266,7 +1266,7 @@
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
-msgstr "E181: Virheellinen attribuutti %s"
+msgstr "E181: Virheellinen attribuutti: %s"
 
 msgid "E182: Invalid command name"
 msgstr "E182: Virheellinen komennon nimi"
@@ -2167,22 +2167,6 @@
 msgstr "&Kumoa"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap-fontin latause ei onnistu %s"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Ei voi kytt fonttia %s"
-
-# varmaan SIGTERM, ei SIGKILL tms.
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Lhetetn viesti lapsiprosessien terminoimiseksi.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ikkunan otsikkoa ei lydy %s"
 
@@ -2236,7 +2220,7 @@
 
 #, c-format
 msgid "Font0: %s\n"
-msgstr "Fontti0. %s\n"
+msgstr "Fontti0: %s\n"
 
 #, c-format
 msgid "Font1: %s\n"
@@ -2497,7 +2481,7 @@
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625: ei voi avata csope-tietokantaa %s"
+msgstr "E625: ei voi avata cscope-tietokantaa: %s"
 
 msgid "E626: cannot get cscope database information"
 msgstr "E626: ei voi hakea cscope-tietokannan tietoja"
@@ -4468,9 +4452,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Virheellinen merkki %c fontin nimess %s"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Virheellinen osfiletype - kytetn Texti"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Kaksoissignaali, lopetetaan\n"
 
@@ -5347,7 +5328,7 @@
 
 #, c-format
 msgid "E789: Missing ']': %s"
-msgstr "E789: ] puuttuu; %s"
+msgstr "E789: ] puuttuu: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
@@ -6192,11 +6173,11 @@
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: Virheellinen argumentti %s"
+msgstr "E475: Virheellinen argumentti: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
-msgstr "E15: Virheellinen ilmaus %s"
+msgstr "E15: Virheellinen ilmaus: %s"
 
 msgid "E16: Invalid range"
 msgstr "E16: Virheellinen arvoalue"
diff -Naur vim73.orig/src/po/fr.po vim73/src/po/fr.po
--- vim73.orig/src/po/fr.po	2010-08-13 13:57:24.000000000 +0000
+++ vim73/src/po/fr.po	2013-08-04 19:09:10.613943849 +0000
@@ -6,7 +6,7 @@
 #  FIRST AUTHOR  DindinX         <David.Odin@bigfoot.com>     2000.
 # SECOND AUTHOR  Adrien Beau     <version.francaise@free.fr>  2002, 2003.
 #  THIRD AUTHOR  David Blanchet  <david.blanchet@free.fr>     2006, 2008.
-# FOURTH AUTHOR  Dominique Pell <dominique.pelle@gmail.com>  2008, 2010.
+# FOURTH AUTHOR  Dominique Pell <dominique.pelle@gmail.com>  2008, 2013.
 #
 # Latest translation available at:
 #   http://dominique.pelle.free.fr/vim-fr.php
@@ -15,10 +15,11 @@
 msgstr ""
 "Project-Id-Version: Vim(Franais)\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-06 21:08+0200\n"
-"PO-Revision-Date: 2010-08-06 21:31+0200\n"
+"POT-Creation-Date: 2013-05-27 04:55+0200\n"
+"PO-Revision-Date: 2013-05-27 10:22+0200\n"
 "Last-Translator: Dominique Pell <dominique.pelle@gmail.com>\n"
 "Language-Team: \n"
+"Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=ISO_8859-15\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -45,6 +46,9 @@
 msgid "[Quickfix List]"
 msgstr "[Liste Quickfix]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Des autocommandes ont caus la terminaison de la commande"
+
 # AB - Il faut respecter l'esprit plus que la lettre.
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Aucun tampon ne peut tre allou, Vim doit s'arrter"
@@ -201,7 +205,6 @@
 msgid "Top"
 msgstr "Haut"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -353,6 +356,12 @@
 msgid "Hit end of paragraph"
 msgstr "Fin du paragraphe"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: La fonction de compltement a chang la fentre"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: La fonction de compltement a effac du texte"
+
 msgid "'dictionary' option is empty"
 msgstr "L'option 'dictionary' est vide"
 
@@ -634,6 +643,9 @@
 msgid "E808: Number or Float required"
 msgstr "E808: Nombre ou Flottant requis"
 
+msgid "add() argument"
+msgstr "argument de add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Trop d'arguments"
 
@@ -650,10 +662,19 @@
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "extend() argument"
+msgstr "argument de extend()"
+
 #, c-format
 msgid "E737: Key already exists: %s"
 msgstr "E737: un mappage existe dj pour %s"
 
+msgid "map() argument"
+msgstr "argument de map()"
+
+msgid "filter() argument"
+msgstr "argument de filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld lignes : "
@@ -674,6 +695,9 @@
 msgid "called inputrestore() more often than inputsave()"
 msgstr "inputrestore() a t appel plus de fois qu'inputsave()"
 
+msgid "insert() argument"
+msgstr "argument de insert()"
+
 msgid "E786: Range not allowed"
 msgstr "E786: Les plages ne sont pas autorises"
 
@@ -702,13 +726,22 @@
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Impossible de lire la rponse du serveur"
 
+msgid "remove() argument"
+msgstr "argument de remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Trop de liens symboliques (cycle ?)"
 
+msgid "reverse() argument"
+msgstr "argument de reverse()"
+
 # AB - La version franaise est meilleure que la version anglaise.
 msgid "E258: Unable to send to client"
 msgstr "E258: La rponse n'a pas pu tre envoye au client"
 
+msgid "sort() argument"
+msgstr "argument de sort()"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: La fonction de comparaison de sort() a chou"
 
@@ -742,14 +775,6 @@
 msgid "E806: using Float as a String"
 msgstr "E806: Utilisation d'un Flottant comme une Chane"
 
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Le nom d'une Funcref doit commencer par une majuscule : %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Le nom d'une variable entre en conflit avec la fonction %s"
-
 # DB : On doit pouvoir trouver nettement mieux que a.
 #, c-format
 msgid "E706: Variable type mismatch for: %s"
@@ -760,6 +785,14 @@
 msgstr "E795: Impossible de supprimer la variable %s"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: Le nom d'une Funcref doit commencer par une majuscule : %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Le nom d'une variable entre en conflit avec la fonction %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: La valeur de %s est verrouille"
 
@@ -784,10 +817,17 @@
 msgid "E124: Missing '(': %s"
 msgstr "E124: Il manque '(' aprs %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: Impossible d'utiliser g: ici"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Argument invalide : %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Nom d'argument dupliqu : %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Il manque :endfunction"
 
@@ -979,7 +1019,6 @@
 msgstr "# Ce fichier viminfo a t gnr par Vim %s.\n"
 
 # AB - Les deux versions, bien que diffrentes, se valent.
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -987,7 +1026,6 @@
 "# Vous pouvez l'diter, mais soyez prudent.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# 'encoding' dans lequel ce fichier a t crit\n"
 
@@ -1129,13 +1167,16 @@
 msgid "Pattern found in every line: %s"
 msgstr "Motif trouv dans toutes les lignes : %s"
 
+#, c-format
+msgid "Pattern not found: %s"
+msgstr "Motif introuvable: %s"
+
 # AB - Ne pas traduire le dollar.
 # AB - Ce message n'est volontairement pas traduit. En effet, il fait partie
 #      d'un groupe de trois messages dans viminfo, dont deux ne sont pas soumis
 #       internationalisation. J'attends que les deux autres messages soient
 #      traduisibles pour traduire celui-ci.
 # DB - TODO : Qu'en est-il  prsent ?
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1465,6 +1506,10 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: Les commandes utilisateur doivent commencer par une majuscule"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Nom rserv, ne peux pas tre utilis pour une commande utilisateur"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Aucune commande %s dfinie par l'utilisateur"
@@ -1483,8 +1528,8 @@
 msgstr "inconnu"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Impossible de trouver le jeu de couleurs %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Impossible de trouver le jeu de couleurs '%s'"
 
 msgid "Greetings, Vim user!"
 msgstr "Bienvenue, utilisateur de Vim !"
@@ -1583,6 +1628,9 @@
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: Aucun nom de fichier :source  substituer  \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: aucun numro de ligne  utiliser pour \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Nom de fichier vide pour '%' ou '#', ne marche qu'avec \":p:h\""
@@ -1752,7 +1800,7 @@
 msgstr "E199: Fentre ou tampon actif effac"
 
 msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E812: Des autocommandes on chang le tampon ou le nom du tampon"
+msgstr "E812: Des autocommandes ont chang le tampon ou le nom du tampon"
 
 msgid "Illegal file name"
 msgstr "Nom de fichier invalide"
@@ -1823,6 +1871,9 @@
 msgid "[converted]"
 msgstr "[converti]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[chiffr]"
 
@@ -2010,6 +2061,7 @@
 msgid "%lld characters"
 msgstr "%lld caractres"
 
+#. Explicit typecast avoids warning on Mac OS X 10.6
 #, c-format
 msgid "%ld characters"
 msgstr "%ld caractres"
@@ -2162,7 +2214,7 @@
 msgstr "E220: } manquant."
 
 msgid "E490: No fold found"
-msgstr "E490: Aucune repli trouv"
+msgstr "E490: Aucun repli trouv"
 
 msgid "E350: Cannot create fold with current 'foldmethod'"
 msgstr "E350: Impossible de crer un repli avec la 'foldmethod'e actuelle"
@@ -2205,6 +2257,15 @@
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap : mode invalide"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr ""
+"E851: chec lors de la cration d'un nouveau processus pour l'interface "
+"graphique"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr ""
+"E852: Le processus fils n'a pas russi  dmarrer l'interface graphique"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Impossible de dmarrer l'interface graphique"
 
@@ -2369,21 +2430,6 @@
 msgstr "Ann&uler"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Impossible de charger la police Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Impossible d'utiliser la police %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Envoi d'un message pour interrompre le processus fils.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Titre de fentre \"%s\" introuvable"
 
@@ -2703,7 +2749,7 @@
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Trouver les fonctions appelant cette fonction\n"
@@ -2713,7 +2759,7 @@
 "       g: Trouver cette dfinition\n"
 "       i: Trouver les fichiers qui #incluent ce fichier\n"
 "       s: Trouver ce symbole C\n"
-"       t: Trouver les affectations \n"
+"       t: Trouver cette chane\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2809,6 +2855,9 @@
 msgid "string cannot contain newlines"
 msgstr "une chane ne peut pas contenir de saut-de-ligne"
 
+msgid "error converting Scheme values to Vim"
+msgstr "erreur lors de la conversion d'une valeur de Scheme  Vim"
+
 msgid "Vim error: ~a"
 msgstr "Erreur Vim : ~a"
 
@@ -2828,10 +2877,10 @@
 msgstr "non autoris dans le bac  sable"
 
 msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python : impossible d'utiliser :py et :py3 dans la mme session"
+msgstr "E836: Vim ne peut pas excuter :python aprs avoir utilis :py3"
 
-msgid "E837: This Vim cannot execute :py3 after using :python"
-msgstr "E837: Python : impossible d'utiliser :py et :py3 dans la mme session"
+msgid "only string keys are allowed"
+msgstr "seule une chaine est autorise comme cl"
 
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
@@ -2843,18 +2892,11 @@
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Impossible d'invoquer Python rcursivement"
 
-msgid "can't delete OutputObject attributes"
-msgstr "impossible d'effacer les attributs d'OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace doit tre un nombre entier"
-
-msgid "invalid attribute"
-msgstr "attribut invalide"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Vim ne peut pas excuter :py3 aprs avoir utilis :python"
 
-#, c-format
-msgid "<buffer object (deleted) at %p>"
-msgstr "<objet tampon (effac)  %p>"
+msgid "index must be int or slice"
+msgstr "index doit tre int ou slice"
 
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ doit tre une instance de chane (String)"
@@ -3044,11 +3086,6 @@
 "E571: Dsol, commande dsactive: la bibliothque Tcl n'a pas pu tre "
 "charge."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ERREUR TCL: code de sortie non entier ?! Contactez vim-dev@vim.org, SVP"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: code de sortie %d"
@@ -3131,7 +3168,7 @@
 "More info with: \"vim -h\"\n"
 msgstr ""
 "\n"
-"Plus d'info avec: \"vim -h\"\n"
+"Plus d'info avec : \"vim -h\"\n"
 
 msgid "[file ..]       edit specified file(s)"
 msgstr "[fichier ...]  ouvrir le ou les fichiers spcifis"
@@ -3208,6 +3245,9 @@
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\tMode Ex (comme \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tMode Ex amlior"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\tMode silencieux (batch) (seulement pour \"ex\")"
 
@@ -3408,12 +3448,6 @@
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tIconifier Vim au dmarrage"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <nom>\t\tEmployer les ressources comme si Vim s'appelait <nom>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (non implment)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr ""
 "-background <coul>\tUtiliser <couleur> pour l'arrire-plan\t   (abrv : -bg)"
@@ -3456,19 +3490,6 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Arguments reconnus par gvim (version RISC OS) :\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <nombre>\tNombre de colonnes initial de la fentre"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <nombre>\tNombre de lignes initial de la fentre"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3484,6 +3505,9 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tOuvrir Vim dans un autre widget GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tGvim affiche l'ID de la fentre sur stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <titre parent>\tOuvrir Vim dans une application parente"
 
@@ -3542,7 +3566,6 @@
 "\n"
 "modif  ligne col fichier/texte"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3551,7 +3574,6 @@
 "# Marques dans le fichier :\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3559,7 +3581,6 @@
 "\n"
 "# Liste de sauts (le plus rcent en premier) :\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3621,6 +3642,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Bloc n2 non rcupr ?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Erreur lors de la mise  jour du fichier d'change crypt"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Oups, le fichier d'change a disparu !"
@@ -3984,24 +4008,20 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
 "(1) Un autre programme est peut-tre en train d'diter ce fichier.\n"
 "    Si c'est le cas, faites attention  ne pas vous retrouver avec\n"
-"    deux version diffrentes du mme fichier en faisant des modifications.\n"
+"    deux versions diffrentes du mme fichier en faisant des modifications."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Quittez, ou continuez prudemment.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Quittez, ou continuez prudemment.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Une session d'dition de ce fichier a plant.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Une session d'dition de ce fichier a plant.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Si c'est le cas, utilisez \":recover\" ou \"vim -r "
@@ -4236,7 +4256,6 @@
 msgid "Vim: Finished.\n"
 msgstr "Vim : Fini.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ERREUR : "
 
@@ -4295,6 +4314,9 @@
 msgid "Keys don't match!"
 msgstr "Les cls ne correspondent pas !"
 
+msgid "E854: path too long for completion"
+msgstr "E854: chemin trop long pour compltement"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4339,11 +4361,15 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Connexion NetBeans perdue pour le tampon %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans n'est pas support avec cette interface graphique"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans dj connect"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s est en lecture seule (ajoutez ! pour passer outre)"
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Aucun identifiant sous le curseur"
@@ -4476,8 +4502,8 @@
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractres ; %ld sur %"
-"ld octets slectionns"
+"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractres ; %ld sur "
+"%ld octets slectionns"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4489,8 +4515,8 @@
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; Caractre %ld sur %"
-"ld ; Octet %ld sur %ld"
+"Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; Caractre %ld sur "
+"%ld ; Octet %ld sur %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4511,6 +4537,9 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Non autoris dans une ligne de mode"
 
+msgid "E846: Key code not set"
+msgstr "E846: Le code de touche n'est pas configur"
+
 msgid "E521: Number required after ="
 msgstr "E521: Nombre requis aprs ="
 
@@ -4748,9 +4777,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Caractre '%c' invalide dans le nom de fonte \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Option 'osfiletype' invalide - Text est utilis"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim : Double signal, sortie\n"
 
@@ -4975,18 +5001,9 @@
 msgid "E369: invalid item in %s%%[]"
 msgstr "E369: lment invalide dans %s%%[]"
 
-msgid "E339: Pattern too long"
-msgstr "E339: Motif trop long"
-
-msgid "E50: Too many \\z("
-msgstr "E50: Trop de \\z("
-
 #, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Trop de %s("
-
-msgid "E52: Unmatched \\z("
-msgstr "E52: Pas de correspondance pour \\z("
+msgid "E769: Missing ] after %s["
+msgstr "E769: ']' manquant aprs %s["
 
 #, c-format
 msgid "E53: Unmatched %s%%("
@@ -5000,6 +5017,19 @@
 msgid "E55: Unmatched %s)"
 msgstr "E55: %s) fermante non ouverte"
 
+msgid "E339: Pattern too long"
+msgstr "E339: Motif trop long"
+
+msgid "E50: Too many \\z("
+msgstr "E50: Trop de \\z("
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: Trop de %s("
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: Pas de correspondance pour \\z("
+
 #, c-format
 msgid "E59: invalid character after %s@"
 msgstr "E59: caractre invalide aprs %s@"
@@ -5052,16 +5082,89 @@
 msgstr "E71: Caractre invalide aprs %s%%"
 
 #, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: ']' manquant aprs %s["
-
-#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Erreur de syntaxe dans %s{...}"
 
 msgid "External submatches:\n"
 msgstr "Sous-correspondances externes :\n"
 
+msgid ""
+"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
+"used "
+msgstr ""
+"E864: \\%#= peut tre suivi uniquement de 0, 1 ou 2. Le moteur automatique "
+"sera utilis "
+
+#, c-format
+msgid "E866: (NFA regexp) Misplaced %c"
+msgstr "E866: (regexp NFA) %c au mauvais endroit"
+
+msgid "E865: (NFA) Regexp end encountered prematurely"
+msgstr "E865: (NFA) Fin de regexp rencontre prmaturment"
+
+#, c-format
+msgid "E867: (NFA) Unknown operator '\\z%c'"
+msgstr "E867: (NFA) Oprateur inconnu '\\z%c'"
+
+#. should never happen
+msgid "E868: Error building NFA with equivalence class!"
+msgstr "E868: Erreur lors de la construction du NFA avec classe d'quivalence"
+
+#, c-format
+msgid "E869: (NFA) Unknown operator '\\@%c'"
+msgstr "E869: (NFA) Oprateur inconnu '\\@%c'"
+
+msgid "E870: (NFA regexp) Error reading repetition limits"
+msgstr "E870: (regexp NFA) Erreur  la lecture des limites de rptition"
+
+msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
+msgstr "E871: (regexp NFA) Un multi ne peut pas suivre un multi !"
+
+msgid "E872: (NFA regexp) Too many '('"
+msgstr "E872: (regexp NFA) Trop de '('"
+
+msgid "E873: (NFA regexp) proper termination error"
+msgstr "E873: (NFA regexp) erreur de terminaison"
+
+msgid "E874: (NFA) Could not pop the stack !"
+msgstr "E874: (NFA) Impossible de dpiler !"
+
+msgid ""
+"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
+"left on stack"
+msgstr ""
+"E875: (regexp NFA) (lors de la conversion de postfix  NFA), il reste trop "
+"d'tats sur la pile"
+
+msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
+msgstr "E876: (regexp NFA) Pas assez de mmoire pour stocker le NFA"
+
+msgid "E999: (NFA regexp internal error) Should not process NOT node !"
+msgstr ""
+"E999: (erreur interne du regexp NFA) Un noeud 'NOT' ne devrait pas tre "
+"trait !"
+
+#. should not be here :P
+msgid "E877: (NFA regexp) Invalid character class "
+msgstr "E877: (regexp NFA) Classe de caractre invalide "
+
+#, c-format
+msgid "(NFA) COULD NOT OPEN %s !"
+msgstr "(NFA) IMPOSSIBLE D'OUVRIR %s !"
+
+msgid ""
+"Could not open temporary log file for writing, displaying on stderr ... "
+msgstr ""
+"Impossible d'ouvrir le fichier de log temporaire en criture, affichage sur "
+"stderr ... "
+
+msgid "E878: (NFA) Could not allocate memory for branch traversal!"
+msgstr ""
+"E878: (NFA) Impossible d'allouer la mmoire pour parcourir les branches!"
+
+msgid "Could not open temporary log file for writing "
+msgstr "Impossible d'ouvrir le fichier de log en criture"
+
 msgid " VREPLACE"
 msgstr " VREMPLACEMENT"
 
@@ -5166,7 +5269,7 @@
 msgstr "Tous les fichiers inclus ont t trouvs"
 
 msgid "No included files"
-msgstr "Aucun fichiers inclus"
+msgstr "Aucun fichier inclus"
 
 msgid "E388: Couldn't find definition"
 msgstr "E388: Impossible de trouver la dfinition"
@@ -5214,6 +5317,10 @@
 msgstr "E756: La vrification orthographique n'est pas active"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "Alerte : Liste de mots \"%s_%s.spl\" ou \"%s_ascii.spl\" introuvable"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "Alerte : Liste de mots \"%s.%s.spl\" ou \"%s.ascii.spl\" introuvable"
 
@@ -5235,7 +5342,7 @@
 
 #, c-format
 msgid "Warning: region %s not supported"
-msgstr "Alerte : region %s non supporte"
+msgstr "Alerte : rgion %s non supporte"
 
 #, c-format
 msgid "Reading affix file %s ..."
@@ -5306,7 +5413,7 @@
 
 #, c-format
 msgid "Duplicate affix in %s line %d: %s"
-msgstr "Affixe duplique dans %s ligne %d : %s"
+msgstr "Affixe dupliqu dans %s ligne %d : %s"
 
 #, c-format
 msgid ""
@@ -5441,6 +5548,9 @@
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "%d mot(s) ignor(s) avec des caractres non-ASCII"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: mmoire insuffisante, liste de mots peut-tre incomplte"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "%d noeuds compresss sur %d ; %d (%d%%) restants "
@@ -5506,7 +5616,7 @@
 
 msgid "E763: Word characters differ between spell files"
 msgstr ""
-"E763: Les caractres de mots diffrent entre les fichier orthographiques"
+"E763: Les caractres de mots diffrent entre les fichiers orthographiques"
 
 msgid "Sorry, no suggestions"
 msgstr "Dsol, aucune suggestion"
@@ -5624,8 +5734,8 @@
 msgid "E395: contains argument not accepted here"
 msgstr "E395: L'argument  contains  n'est pas accept ici"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: L'argument  containedin  n'est pas accept ici"
+msgid "E844: invalid cchar value"
+msgstr "E844: valeur de cchar invalide"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: L'argument  group[t]here  n'est pas accept ici"
@@ -5637,6 +5747,9 @@
 msgid "E397: Filename required"
 msgstr "E397: Nom de fichier requis"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Trop d'inclusions de syntaxe"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: ']' manquant : %s"
@@ -5649,6 +5762,9 @@
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Pas assez d'arguments : syntax region %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Trop de grappes de syntaxe"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Aucune grappe spcifie"
 
@@ -5754,6 +5870,9 @@
 msgid "W18: Invalid character in group name"
 msgstr "W18: Caractre invalide dans un nom de groupe"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Trop de groupes de surbrillance et de syntaxe"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: En bas de la pile de marqueurs"
 
@@ -5814,6 +5933,9 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Chemin de fichiers de marqueurs tronqu pour %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Ignore longue ligne dans le fichier de marqueurs"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: Erreur de format dans le fichier de marqueurs \"%s\""
@@ -5830,9 +5952,6 @@
 msgid "E433: No tags file"
 msgstr "E433: Aucun fichier de marqueurs"
 
-msgid "Ignoring long line in tags file"
-msgstr "Ignore longue ligne dans le fichier de marqueurs"
-
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Le motif de marqueur est introuvable"
 
@@ -5909,7 +6028,7 @@
 
 #, c-format
 msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr "Le fichier d'annulations de sera pas cras, impossible de lire : %s"
+msgstr "Le fichier d'annulations ne sera pas cras, impossible de lire : %s"
 
 #, c-format
 msgid "Will not overwrite, this is not an undo file: %s"
@@ -6012,8 +6131,8 @@
 msgstr "Rien  annuler"
 
 # DB - Les deux premires colonnes sont alignes  droite.
-msgid "number changes  time            saved"
-msgstr "numro  modif.  instant         enregistr"
+msgid "number changes  when               saved"
+msgstr "numro modif.   instant            enregistr"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -6114,13 +6233,6 @@
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"Version RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6772,6 +6884,9 @@
 msgid "E764: Option '%s' is not set"
 msgstr "E764: L'option '%s' n'est pas active"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Nom de registre invalide"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "La recherche a atteint le HAUT, et continue en BAS"
 
@@ -6782,14 +6897,110 @@
 msgid "Need encryption key for \"%s\""
 msgstr "Besoin de la cl de chiffrement pour \"%s\""
 
+msgid "can't delete OutputObject attributes"
+msgstr "impossible d'effacer les attributs d'OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "softspace doit tre un nombre entier"
+
+msgid "invalid attribute"
+msgstr "attribut invalide"
+
 msgid "writelines() requires list of strings"
 msgstr "writelines() requiert une liste de chanes"
 
 msgid "E264: Python: Error initialising I/O objects"
 msgstr "E264: Python : Erreur d'initialisation des objets d'E/S"
 
-msgid "no such buffer"
-msgstr "Ce tampon n'existe pas"
+msgid "empty keys are not allowed"
+msgstr "les cls vides ne sont pas autorises"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "Impossible d'effacer les attributs de DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Impossible de modifier un dictionnaire fixe"
+
+msgid "Cannot set this attribute"
+msgstr "Impossible d'initialiser cet attribut"
+
+msgid "dict is locked"
+msgstr "dictionnaire est verrouill"
+
+msgid "failed to add key to dictionary"
+msgstr "l'ajout de cl au dictionnaire a chou"
+
+msgid "list index out of range"
+msgstr "index de liste hors limites"
+
+msgid "internal error: failed to get vim list item"
+msgstr "erreur interne : accs  un lment de liste a chou"
+
+msgid "list is locked"
+msgstr "liste verrouille"
+
+msgid "Failed to add item to list"
+msgstr "Ajout  la liste a chou"
+
+msgid "internal error: no vim list item"
+msgstr "erreur interne : pas d'lment de liste vim"
+
+msgid "can only assign lists to slice"
+msgstr "seules des tranches peuvent tre assignes aux listes"
+
+msgid "internal error: failed to add item to list"
+msgstr "erreur interne : ajout d'lment  la liste a chou"
+
+msgid "can only concatenate with lists"
+msgstr "on ne peut que concatner avec des listes"
+
+msgid "cannot delete vim.dictionary attributes"
+msgstr "impossible d'effacer les attributs de vim.dictionary"
+
+msgid "cannot modify fixed list"
+msgstr "impossible de modifier une liste fixe"
+
+msgid "cannot set this attribute"
+msgstr "impossible d'initialiser cet attribut"
+
+msgid "'self' argument must be a dictionary"
+msgstr "l'argument 'self' doit tre un dictionnaire"
+
+msgid "failed to run function"
+msgstr "excution de la fonction a chou"
+
+msgid "unable to get option value"
+msgstr "impossible d'obtenir la valeur d'une option"
+
+msgid "unable to unset global option"
+msgstr "impossible de dsactiver une option globale"
+
+msgid "unable to unset option without global value"
+msgstr "impossible de dsactiver une option sans une valeur globale"
+
+msgid "object must be integer"
+msgstr "objet doit tre un nombre entier"
+
+msgid "object must be string"
+msgstr "objet doit tre de type string"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "tentative de rfrencer un onglet effac"
+
+#, c-format
+msgid "<tabpage object (deleted) at %p>"
+msgstr "<objet onglet (effac)  %p>"
+
+#, c-format
+msgid "<tabpage object (unknown) at %p>"
+msgstr "<objet onglet (inconnu)  %p>"
+
+#, c-format
+msgid "<tabpage %d>"
+msgstr "<onglet %d>"
+
+msgid "no such tab page"
+msgstr "cet onglet n'existe pas"
 
 msgid "attempt to refer to deleted window"
 msgstr "tentative de rfrencer une fentre efface"
@@ -6817,3 +7028,64 @@
 
 msgid "attempt to refer to deleted buffer"
 msgstr "tentative de rfrencer un tampon effac"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<objet tampon (effac)  %p>"
+
+msgid "key must be integer"
+msgstr "la cl doit tre un nombre entier"
+
+msgid "expected vim.buffer object"
+msgstr "objet vim.buffer attendu"
+
+msgid "failed to switch to given buffer"
+msgstr "impossible de se dplacer au tampon donn"
+
+msgid "expected vim.window object"
+msgstr "objet vim.window attendu"
+
+msgid "failed to find window in the current tab page"
+msgstr "impossible de trouver une fentre dans l'onglet courant"
+
+msgid "did not switch to the specified window"
+msgstr "ne s'est pas dplac  la fentre spcifie"
+
+msgid "expected vim.tabpage object"
+msgstr "objet vim.tabpage attendu"
+
+msgid "did not switch to the specified tab page"
+msgstr "impossible de se dplacer  l'onglet spcifi"
+
+msgid "failed to run the code"
+msgstr "excution du code a chou"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval n'a pas retourn un objet python valide"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Conversion d'objet python  une valeur de vim a chou"
+
+msgid "unable to convert to vim structure"
+msgstr "conversion  une structure vim impossible"
+
+msgid "NULL reference passed"
+msgstr "rfrence NULL passe"
+
+msgid "internal error: invalid value type"
+msgstr "erreur interne : type de valeur invalide"
+
+#~ msgid "E860: Eval did not return a valid python 3 object"
+#~ msgstr "E860: Eval n'a pas retourn un object python 3 valid"
+
+#~ msgid "E861: Failed to convert returned python 3 object to vim value"
+#~ msgstr "E861: Conversion d'objet python 3  une valeur de vim a chou"
+
+#~ msgid "E863: return value must be an instance of str"
+#~ msgstr "E863: valeur de retour doit tre une instance de Str"
+
+#~ msgid "Only boolean objects are allowed"
+#~ msgstr "Seuls les objets boolens sont autoriss"
+
+#~ msgid "no such key in dictionary"
+#~ msgstr "cette cl est inexistante dans le dictionnaire"
diff -Naur vim73.orig/src/po/ga.po vim73/src/po/ga.po
--- vim73.orig/src/po/ga.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/ga.po	2013-08-04 19:09:10.617277172 +0000
@@ -2141,21 +2141,6 @@
 msgstr "&Cealaigh"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: N fidir an chlfhoireann Zap '%s' a lucht"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: N fidir an chlfhoireann %s a sid"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Ag seoladh teachtaireachta chun an macphriseas a stopadh.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: N fidir teideal na fuinneoige \"%s\" a aimsi"
 
@@ -4476,9 +4461,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Carachtar neamhcheadaithe '%c' mar phirt d'ainm cl \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Rogha neamhbhail 'osfiletype' - ag baint sid as `Text'"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Comhartha dbailte, ag scor\n"
 
diff -Naur vim73.orig/src/po/it.po vim73/src/po/it.po
--- vim73.orig/src/po/it.po	2010-08-13 13:57:44.000000000 +0000
+++ vim73/src/po/it.po	2013-08-04 19:09:10.627277142 +0000
@@ -13,8 +13,8 @@
 msgstr ""
 "Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-09 12:53+0200\n"
-"PO-Revision-Date:  2010-08-09 21:00+0200\n"
+"POT-Creation-Date: 2011-03-10 11:10+0100\n"
+"PO-Revision-Date:  2011-03-12 07:08+0100\n"
 "Last-Translator:   Vlad Sandrini   <vlad.gently@gmail.com>\n"
 "Language-Team:     Italian"
 "                   Antonio Colombo <azc100@gmail.com>"
@@ -303,6 +303,12 @@
 msgid "Hit end of paragraph"
 msgstr "Giunto alla fine del paragrafo"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: La funzione di completamento ha modificato la finestra"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: La funzione di completamento ha eliminato del testo"
+
 msgid "'dictionary' option is empty"
 msgstr "l'opzione 'dictionary' non  impostata"
 
@@ -1271,6 +1277,9 @@
 msgstr ""
 "E183: I comandi definiti dall'utente devono iniziare con lettera maiuscola"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Nome riservato, non usabile in un comando definito dall'utente"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Comando definito dall'utente %s inesistente"
@@ -1395,6 +1404,9 @@
 msgstr ""
 "E498: nessun nome di file :source trovato da sostituire per \"<sfile>\""
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: nessun numero di riga da usare per \"<slnum>\""
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: Un nome di file nullo per '%' o '#', va bene solo con \":p:h\""
@@ -1626,6 +1638,9 @@
 msgid "[converted]"
 msgstr "[convertito]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[cifrato]"
 
@@ -2167,21 +2182,6 @@
 msgstr "&U Disfa"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Non riesco a caricare il font Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Non riesco a usare il font %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Spedisco un messaggio per terminare il processo figlio.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Non trovo il titolo della finestra \"%s\""
 
@@ -2307,7 +2307,6 @@
 msgid "No text to be printed"
 msgstr "Manca testo da stampare"
 
-#, c-format
 msgid "Printing page %d (%d%%)"
 msgstr "Sto stampando pagina %d (%d%%)"
 
@@ -2482,7 +2481,7 @@
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Trova funzioni che chiamano questa\n"
@@ -2492,7 +2491,7 @@
 "       g: Trova questa definizione\n"
 "       i: Trova file che #includono questo file\n"
 "       s: Trova questo simbolo C\n"
-"       t: Trova assegnazioni a\n"
+"       t: Trova questa stringa\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2608,7 +2607,7 @@
 msgstr "E836: Python: Impossibile usare :py e :py3 nella stessa sessione"
 
 msgid "E837: This Vim cannot execute :py3 after using :python"
-msgstr "E837: Python: Impossibile usare :py e :py3 nella stessa sessione"
+msgstr "E837: Impossibile usare ora :py3 dopo aver usato :python"
 
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
@@ -3207,12 +3206,6 @@
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tInizia vim riducendolo ad icona"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <nome>\t\tUsa risorsa come se vim fosse <nome>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Non implementato)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <colore>\tUsa <colore> come sfondo (anche: -bg)"
 
@@ -3415,6 +3408,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Non riesco a leggere blocco numero 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Errore aggiornando cifratura dello swap file"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ahim, lo swap file  perduto!!!"
@@ -3518,7 +3514,7 @@
 "If you wrote the text file after changing the crypt key press enter"
 msgstr ""
 "\n"
-"Se hai riscritto il file dopo aver cambio chiave di cifr., premi Invio"
+"Se hai riscritto il file dopo aver cambiato chiave di cifr., premi Invio"
 
 msgid ""
 "\n"
@@ -3773,24 +3769,20 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
 "(1) Un altro programma pu essere in edit sullo stesso file.\n"
 "    Se  cos, attenzione a non trovarti con due versioni\n"
-"    differenti dello stesso file a cui vengono apportate modifiche.\n"
+"    differenti dello stesso file a cui vengono apportate modifiche."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Esci, o continua con prudenza.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Esci, o continua con prudenza.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Una sessione di edit per questo file  finita male.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Una sessione di edit per questo file  finita male.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    Se  cos, usa \":recover\" oppure \"vim -r "
@@ -4022,7 +4014,6 @@
 msgid "Vim: Finished.\n"
 msgstr "Vim: Finito.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ERRORE: "
 
@@ -4123,6 +4114,9 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Connessione NetBeans persa per il buffer %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans non  supportato con questa GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans gi connesso"
 
@@ -4524,9 +4518,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Carattere non ammesso '%c' nel font di nome \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Opzione 'osfiletype' non valida - uso 'Text'"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Segnale doppio, esco\n"
 
@@ -4534,7 +4525,6 @@
 msgid "Vim: Caught deadly signal %s\n"
 msgstr "Vim: Intercettato segnale fatale %s\n"
 
-#, c-format
 msgid "Vim: Caught deadly signal\n"
 msgstr "Vim: Intercettato segnale fatale\n"
 
@@ -4678,26 +4668,21 @@
 msgid "Vim Warning"
 msgstr "Avviso da Vim"
 
-#, c-format
 msgid "E372: Too many %%%c in format string"
 msgstr "E372: Troppi %%%c nella stringa di 'format'"
 
-#, c-format
 msgid "E373: Unexpected %%%c in format string"
 msgstr "E373: %%%c imprevisto nella stringa di 'format'"
 
 msgid "E374: Missing ] in format string"
 msgstr "E374: Manca ] nella stringa di 'format'"
 
-#, c-format
 msgid "E375: Unsupported %%%c in format string"
 msgstr "E375: %%%c non supportato nella stringa di 'format'"
 
-#, c-format
 msgid "E376: Invalid %%%c in format string prefix"
 msgstr "E376: %%%c non valido nel prefisso della stringa di 'format'"
 
-#, c-format
 msgid "E377: Invalid %%%c in format string"
 msgstr "E377: %%%c non valido nella stringa di 'format'"
 
@@ -4746,10 +4731,6 @@
 msgid "E777: String or List expected"
 msgstr "E777: aspettavo Stringa o Lista"
 
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: elemento non valido in %s%%[]"
-
 msgid "E339: Pattern too long"
 msgstr "E339: Espressione troppo lunga"
 
@@ -4763,7 +4744,6 @@
 msgid "E52: Unmatched \\z("
 msgstr "E52: Senza riscontro: \\z("
 
-#, c-format
 msgid "E53: Unmatched %s%%("
 msgstr "E53: Senza riscontro: %s%%("
 
@@ -4810,19 +4790,15 @@
 msgid "E68: Invalid character after \\z"
 msgstr "E68: Carattere non ammesso dopo \\z"
 
-#, c-format
 msgid "E69: Missing ] after %s%%["
 msgstr "E69: Manca ] dopo %s%%["
 
-#, c-format
 msgid "E70: Empty %s%%[]"
 msgstr "E70: %s%%[] vuoto"
 
-#, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
 msgstr "E678: Carattere non valido dopo %s%%[dxouU]"
 
-#, c-format
 msgid "E71: Invalid character after %s%%"
 msgstr "E71: Carattere non ammesso dopo %s%%"
 
@@ -4988,6 +4964,10 @@
 msgstr "E756: Controllo ortografico non abilitato"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "Attenzione: Non trovo lista parole \"%s_%s.spl\" o \"%s_ascii.spl\""
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "Attenzione: Non trovo lista parole \"%s.%s.spl\" o \"%s.ascii.spl\""
 
@@ -5212,6 +5192,9 @@
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "%d parole con caratteri non-ASCII ignorate"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Memoria insufficiente, la lista parole sar incompleta"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "%d di %d nodi compressi; ne restano %d (%d%%)"
@@ -5389,8 +5372,8 @@
 msgid "E395: contains argument not accepted here"
 msgstr "E395: contiene argomenti non accettati qui"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: argomento 'containedin' non accettato qui"
+msgid "E844: invalid cchar value"
+msgstr "E844: valore cchar non valido"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here non ammesso qui"
@@ -5768,8 +5751,8 @@
 msgid "Nothing to undo"
 msgstr "Nessuna modifica, Undo impossibile"
 
-msgid "number changes  time            saved"
-msgstr "numero modif.   ora             salv."
+msgid "number changes  when               saved"
+msgstr "numero modif.   quando             salv."
 
 #, c-format
 msgid "%ld seconds ago"
@@ -6164,7 +6147,6 @@
 msgid "Edit with &Vim"
 msgstr "Apri con &Vim"
 
-#. Now concatenate
 msgid "Edit with existing Vim - "
 msgstr "Apri con Vim esistente - "
 
diff -Naur vim73.orig/src/po/ja.euc-jp.po vim73/src/po/ja.euc-jp.po
--- vim73.orig/src/po/ja.euc-jp.po	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/po/ja.euc-jp.po	2013-08-04 19:09:10.630610465 +0000
@@ -0,0 +1,6683 @@
+# Japanese translation for Vim			vim:set foldmethod=marker:
+#
+# Do ":help uganda"  in Vim to read copying and usage conditions.
+# Do ":help credits" in Vim to see a list of people who contributed.
+#
+# Last Change: 2013 May 19
+#
+# Copyright (C) 2001-12 MURAOKA Taro <koron.kaoriya@gmail.com>
+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+#
+# Generated from ja.po, DO NOT EDIT.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Vim 7.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-05-19 12:20+0900\n"
+"PO-Revision-Date: 2013-05-19 12:30+0900\n"
+"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language: Japanese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=euc-jp\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() ѥɤǸƤӽФޤ"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: BlowfishŹΥӥå/ȥ륨ǥ󤬴ְäƤޤ"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256ΥƥȤ˼Ԥޤ"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: BlowfishŹΥƥȤ˼Ԥޤ"
+
+msgid "[Location List]"
+msgstr "[ꥹ]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfixꥹ]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: autocommandޥɤߤޤ"
+
+msgid "E82: Cannot allocate any buffer, exiting..."
+msgstr "E82: Хåե1ĤǤʤΤ, λޤ..."
+
+msgid "E83: Cannot allocate buffer, using other one..."
+msgstr "E83: ХåեǤʤΤ, ¾ΤѤޤ..."
+
+msgid "E515: No buffers were unloaded"
+msgstr "E515: 줿ХåեϤޤ"
+
+msgid "E516: No buffers were deleted"
+msgstr "E516: 줿ХåեϤޤ"
+
+msgid "E517: No buffers were wiped out"
+msgstr "E517: ˴줿ХåեϤޤ"
+
+msgid "1 buffer unloaded"
+msgstr "1 ĤΥХåեޤ"
+
+#, c-format
+msgid "%d buffers unloaded"
+msgstr "%d ĤΥХåեޤ"
+
+msgid "1 buffer deleted"
+msgstr "1 ĤΥХåեޤ"
+
+#, c-format
+msgid "%d buffers deleted"
+msgstr "%d ĤΥХåեޤ"
+
+msgid "1 buffer wiped out"
+msgstr "1 ĤΥХåե˴ޤ"
+
+#, c-format
+msgid "%d buffers wiped out"
+msgstr "%d ĤΥХåե˴ޤ"
+
+msgid "E84: No modified buffer found"
+msgstr "E84: ѹ줿ХåեϤޤ"
+
+#. back where we started, didn't find anything.
+msgid "E85: There is no listed buffer"
+msgstr "E85: ꥹɽХåեϤޤ"
+
+#, c-format
+msgid "E86: Buffer %ld does not exist"
+msgstr "E86: Хåե %ld Ϥޤ"
+
+msgid "E87: Cannot go beyond last buffer"
+msgstr "E87: ǸΥХåեۤưưϤǤޤ"
+
+msgid "E88: Cannot go before first buffer"
+msgstr "E88: ǽΥХåեؤϰưǤޤ"
+
+#, c-format
+msgid "E89: No write since last change for buffer %ld (add ! to override)"
+msgstr "E89: Хåե %ld ѹ¸Ƥޤ (! ѹ˴)"
+
+msgid "E90: Cannot unload last buffer"
+msgstr "E90: ǸΥХåեϲǤޤ"
+
+msgid "W14: Warning: List of file names overflow"
+msgstr "W14: ٹ: ե̾ΥꥹȤĹ᤮ޤ"
+
+#, c-format
+msgid "E92: Buffer %ld not found"
+msgstr "E92: Хåե %ld Ĥޤ"
+
+#, c-format
+msgid "E93: More than one match for %s"
+msgstr "E93: %s ʣγޤ"
+
+#, c-format
+msgid "E94: No matching buffer for %s"
+msgstr "E94: %s ˳ХåեϤޤǤ"
+
+#, c-format
+msgid "line %ld"
+msgstr " %ld"
+
+msgid "E95: Buffer with this name already exists"
+msgstr "E95: ̾ΥХåեϴˤޤ"
+
+msgid " [Modified]"
+msgstr " [ѹ]"
+
+msgid "[Not edited]"
+msgstr "[̤Խ]"
+
+msgid "[New file]"
+msgstr "[ե]"
+
+msgid "[Read errors]"
+msgstr "[ɹ顼]"
+
+msgid "[readonly]"
+msgstr "[ɹ]"
+
+#, c-format
+msgid "1 line --%d%%--"
+msgstr "1  --%d%%--"
+
+#, c-format
+msgid "%ld lines --%d%%--"
+msgstr "%ld  --%d%%--"
+
+#, c-format
+msgid "line %ld of %ld --%d%%-- col "
+msgstr " %ld ( %ld) --%d%%-- col "
+
+msgid "[No Name]"
+msgstr "[̵̾]"
+
+#. must be a help buffer
+msgid "help"
+msgstr "إ"
+
+msgid "[Help]"
+msgstr "[إ]"
+
+msgid "[Preview]"
+msgstr "[ץӥ塼]"
+
+msgid "All"
+msgstr ""
+
+msgid "Bot"
+msgstr ""
+
+msgid "Top"
+msgstr "Ƭ"
+
+msgid ""
+"\n"
+"# Buffer list:\n"
+msgstr ""
+"\n"
+"# Хåեꥹ:\n"
+
+msgid "[Scratch]"
+msgstr "[]"
+
+msgid ""
+"\n"
+"--- Signs ---"
+msgstr ""
+"\n"
+"---  ---"
+
+#, c-format
+msgid "Signs for %s:"
+msgstr "%s Υ:"
+
+#, c-format
+msgid "    line=%ld  id=%d  name=%s"
+msgstr "    =%ld  ̻=%d  ̾=%s"
+
+#, c-format
+msgid "E96: Can not diff more than %ld buffers"
+msgstr "E96: %ld ʾΥХåեdiffǤޤ"
+
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: եɹ⤷ϽǤޤ"
+
+msgid "E97: Cannot create diffs"
+msgstr "E97: ʬǤޤ "
+
+msgid "Patch file"
+msgstr "ѥåե"
+
+msgid "E816: Cannot read patch output"
+msgstr "E816: patchνϤɹޤ"
+
+msgid "E98: Cannot read diff output"
+msgstr "E98: diffνϤɹޤ"
+
+msgid "E99: Current buffer is not in diff mode"
+msgstr "E99: ߤΥХåեϺʬ⡼ɤǤϤޤ"
+
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: ʬ⡼ɤǤ¾ΥХåեѹǽǤ"
+
+msgid "E100: No other buffer in diff mode"
+msgstr "E100: ʬ⡼ɤǤ¾ΥХåեϤޤ"
+
+msgid "E101: More than two buffers in diff mode, don't know which one to use"
+msgstr ""
+"E101: ʬ⡼ɤΥХåե2İʾ夢ΤǡɤȤǤޤ"
+
+#, c-format
+msgid "E102: Can't find buffer \"%s\""
+msgstr "E102: Хåե \"%s\" Ĥޤ"
+
+#, c-format
+msgid "E103: Buffer \"%s\" is not in diff mode"
+msgstr "E103: Хåե \"%s\" Ϻʬ⡼ɤǤϤޤ"
+
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: ͽХåեѹѹޤ"
+
+msgid "E104: Escape not allowed in digraph"
+msgstr "E104: EscapeϻѤǤޤ"
+
+msgid "E544: Keymap file not found"
+msgstr "E544: ޥåץե뤬Ĥޤ"
+
+msgid "E105: Using :loadkeymap not in a sourced file"
+msgstr "E105: :source ǼեʳǤ :loadkeymap Ȥޤ"
+
+msgid "E791: Empty keymap entry"
+msgstr "E791: Υޥåץȥ"
+
+msgid " Keyword completion (^N^P)"
+msgstr " 䴰 (^N^P)"
+
+#. ctrl_x_mode == 0, ^P/^N compl.
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " ^X ⡼ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+
+msgid " Whole line completion (^L^N^P)"
+msgstr " ()䴰 (^L^N^P)"
+
+msgid " File name completion (^F^N^P)"
+msgstr "ե̾䴰 (^F^N^P)"
+
+msgid " Tag completion (^]^N^P)"
+msgstr " 䴰 (^]^N^P)"
+
+msgid " Path pattern completion (^N^P)"
+msgstr " ѥѥ䴰 (^N^P)"
+
+msgid " Definition completion (^D^N^P)"
+msgstr " 䴰 (^D^N^P)"
+
+msgid " Dictionary completion (^K^N^P)"
+msgstr " 䴰 (^K^N^P)"
+
+msgid " Thesaurus completion (^T^N^P)"
+msgstr " 饹䴰 (^T^N^P)"
+
+msgid " Command-line completion (^V^N^P)"
+msgstr " ޥɥ饤䴰 (^V^N^P)"
+
+msgid " User defined completion (^U^N^P)"
+msgstr " 桼䴰 (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " 䴰 (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr " ֤꽤 (s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " ɽꥭ䴰 (^N^P)"
+
+msgid "Hit end of paragraph"
+msgstr "κǸ˥ҥå"
+
+msgid "E839: Completion function changed window"
+msgstr "E839: ִؿɥѹޤ"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: 䴰ؿƥȤޤ"
+
+msgid "'dictionary' option is empty"
+msgstr "'dictionary' ץ󤬶Ǥ"
+
+msgid "'thesaurus' option is empty"
+msgstr "'thesaurus' ץ󤬶Ǥ"
+
+#, c-format
+msgid "Scanning dictionary: %s"
+msgstr "򥹥: %s"
+
+msgid " (insert) Scroll (^E/^Y)"
+msgstr " () (^E/^Y)"
+
+msgid " (replace) Scroll (^E/^Y)"
+msgstr " (ִ)  (^E/^Y)"
+
+#, c-format
+msgid "Scanning: %s"
+msgstr ": %s"
+
+msgid "Scanning tags."
+msgstr "򥹥."
+
+msgid " Adding"
+msgstr " ɲ"
+
+#. showmode might reset the internal line pointers, so it must
+#. * be called before line = ml_get(), or when this address is no
+#. * longer needed.  -- Acevedo.
+#.
+msgid "-- Searching..."
+msgstr "-- ..."
+
+msgid "Back at original"
+msgstr "Ϥ"
+
+msgid "Word from other line"
+msgstr "¾ιԤñ"
+
+msgid "The only match"
+msgstr "ͣγ"
+
+#, c-format
+msgid "match %d of %d"
+msgstr "%d ܤγ ( %d )"
+
+#, c-format
+msgid "match %d"
+msgstr "%d ܤγ"
+
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: ͽʸ :let ˤޤ"
+
+#, c-format
+msgid "E684: list index out of range: %ld"
+msgstr "E684: ꥹȤΥǥåϰϳǤ: %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: ̤ѿǤ: %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: ']' Ĥޤ"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: %s ΰϥꥹȷǤʤФʤޤ"
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: %s ΰϥꥹȷޤϼ񷿤ǤʤФʤޤ"
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: 񷿤˶ΥȤȤϤǤޤ"
+
+msgid "E714: List required"
+msgstr "E714: ꥹȷɬפǤ"
+
+msgid "E715: Dictionary required"
+msgstr "E715: 񷿤ɬפǤ"
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: ؿΰ¿᤮ޤ: %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: 񷿤˥¸ߤޤ: %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: ؿ %s ѤǤ, ˤ ! ɲäƤ"
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: ˥ȥ꤬¸ߤޤ"
+
+msgid "E718: Funcref required"
+msgstr "E718: ؿȷ׵ᤵޤ"
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: [:] 򼭽񷿤Ȥ߹碌ƤϻȤޤ"
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: ۤʤäѿǤ %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: ̤ΤδؿǤ: %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: ѿ̾Ǥ: %s"
+
+msgid "E687: Less targets than List items"
+msgstr "E687: åȤꥹȷǤ⾯ʤǤ"
+
+msgid "E688: More targets than List items"
+msgstr "E688: åȤꥹȷǤ¿Ǥ"
+
+msgid "Double ; in list of variables"
+msgstr "ꥹȷͤ2İʾ ; Фޤ"
+
+#, c-format
+msgid "E738: Can't list variables for %s"
+msgstr "E738: %s ͤɽǤޤ"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: ꥹȷȼ񷿰ʳϥǥåǤޤ"
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:] ϺǸǤʤФޤ"
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] ˤϥꥹȷͤɬפǤ"
+
+msgid "E710: List value has more items than target"
+msgstr "E710: ꥹȷѿ˥åȤ¿Ǥޤ"
+
+msgid "E711: List value has not enough items"
+msgstr "E711: ꥹȷѿ˽ʬʿǤޤ"
+
+#
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: :for θ \"in\" ޤ"
+
+#, c-format
+msgid "E107: Missing parentheses: %s"
+msgstr "E107: å '(' ޤ: %s"
+
+#, c-format
+msgid "E108: No such variable: \"%s\""
+msgstr "E108: ѿϤޤ: \"%s\""
+
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: ()åˤѿҤ᤮ޤ"
+
+msgid "E109: Missing ':' after '?'"
+msgstr "E109: '?' θ ':' ޤ"
+
+msgid "E691: Can only compare List with List"
+msgstr "E691: ꥹȷϥꥹȷȤӤǤޤ"
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: ꥹȷˤ̵Ǥ"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: 񷿤ϼ񷿤ȤӤǤޤ"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: 񷿤ˤ̵Ǥ"
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: ؿȷϴؿȷȤӤǤޤ"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: ؿȷˤ̵Ǥ"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: '%' ưȤ߹碌ƤϻȤޤ"
+
+msgid "E110: Missing ')'"
+msgstr "E110: ')' Ĥޤ"
+
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: ؿȷϥǥåǤޤ"
+
+#, c-format
+msgid "E112: Option name missing: %s"
+msgstr "E112: ץ̾ޤ: %s"
+
+#, c-format
+msgid "E113: Unknown option: %s"
+msgstr "E113: ̤ΤΥץǤ: %s"
+
+#, c-format
+msgid "E114: Missing quote: %s"
+msgstr "E114:  (\") ޤ: %s"
+
+#, c-format
+msgid "E115: Missing quote: %s"
+msgstr "E115:  (') ޤ: %s"
+
+#, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: ꥹȷ˥ޤޤ: %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: ꥹȷκǸ ']' ޤ: %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: 񷿤˥󤬤ޤ: %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: 񷿤˽ʣޤ: \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: 񷿤˥ޤޤ: %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: 񷿤κǸ '}' ޤ: %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: ɽˤѿҤ᤮ޤ"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: ؿΰ¿᤮ޤ: %s"
+
+#, c-format
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: ؿ̵ʰǤ: %s"
+
+#, c-format
+msgid "E117: Unknown function: %s"
+msgstr "E117: ̤ΤδؿǤ: %s"
+
+#, c-format
+msgid "E119: Not enough arguments for function: %s"
+msgstr "E119: ؿΰʲ᤮ޤ: %s"
+
+#, c-format
+msgid "E120: Using <SID> not in a script context: %s"
+msgstr "E120: ץȰʳ<SID>Ȥޤ: %s"
+
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: ѴؿƤФޤ񤬤ޤ: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: ͤưɬפǤ"
+
+msgid "add() argument"
+msgstr "add() ΰ"
+
+msgid "E699: Too many arguments"
+msgstr "E699: ¿᤮ޤ"
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() ⡼ɤǤѤǤޤ"
+
+#.
+#. * Yes this is ugly, I don't particularly like it either.  But doing it
+#. * this way has the compelling advantage that translations need not to
+#. * be touched at all.  See below what 'ok' and 'ync' are used for.
+#.
+msgid "&Ok"
+msgstr "&Ok"
+
+msgid "extend() argument"
+msgstr "extend() ΰ"
+
+#, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: ϴ¸ߤޤ: %s"
+
+msgid "map() argument"
+msgstr "map() ΰ"
+
+msgid "filter() argument"
+msgstr "filter() ΰ"
+
+#, c-format
+msgid "+-%s%3ld lines: "
+msgstr "+-%s%3ld : "
+
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: ̤ΤδؿǤ: %s"
+
+msgid ""
+"&OK\n"
+"&Cancel"
+msgstr ""
+"(&O)\n"
+"󥻥(&C)"
+
+msgid "called inputrestore() more often than inputsave()"
+msgstr "inputrestore()  inputsave() ¿ƤФޤ"
+
+msgid "insert() argument"
+msgstr "insert() ΰ"
+
+msgid "E786: Range not allowed"
+msgstr "E786: ϰϻϵĤƤޤ"
+
+msgid "E701: Invalid type for len()"
+msgstr "E701: len() ˤ̵ʷǤ"
+
+msgid "E726: Stride is zero"
+msgstr "E726: ȥ饤() 0 Ǥ"
+
+msgid "E727: Start past end"
+msgstr "E727: ϰ֤λ֤ۤޤ"
+
+msgid "<empty>"
+msgstr "<>"
+
+msgid "E240: No connection to Vim server"
+msgstr "E240: Vim Фؤ³ޤ"
+
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241: %s 뤳ȤǤޤ"
+
+msgid "E277: Unable to read a server reply"
+msgstr "E277: Фαޤ"
+
+msgid "remove() argument"
+msgstr "remove() ΰ"
+
+# Added at 10-Mar-2004.
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: ܥå󥯤¿᤮ޤ (۴ĤƤǽޤ)"
+
+msgid "reverse() argument"
+msgstr "reverse() ΰ"
+
+msgid "E258: Unable to send to client"
+msgstr "E258: 饤Ȥ뤳ȤǤޤ"
+
+msgid "sort() argument"
+msgstr "sort() ΰ"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702: ȤӴؿԤޤ"
+
+msgid "(Invalid)"
+msgstr "(̵)"
+
+msgid "E677: Error writing temp file"
+msgstr "E677: ե˥顼ȯޤ"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: ưͤȤưäƤޤ"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: ؿȷͤȤưäƤޤ"
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: ꥹȷͤȤưäƤޤ"
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: 񷿤ͤȤưäƤޤ"
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: ؿȷʸȤưäƤޤ"
+
+msgid "E730: using List as a String"
+msgstr "E730: ꥹȷʸȤưäƤޤ"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: 񷿤ʸȤưäƤޤ"
+
+msgid "E806: using Float as a String"
+msgstr "E806: ưʸȤưäƤޤ"
+
+#, c-format
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: ѿηפޤ: %s"
+
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: ѿ %s Ǥޤ"
+
+#, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: ؿȷѿ̾ʸǻϤޤʤФʤޤ: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: ѿ̾¸δؿ̾Ⱦͤޤ: %s"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: ͤåƤޤ: %s"
+
+msgid "Unknown"
+msgstr ""
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: %s ͤѹǤޤ"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: ԡˤѿҤ᤮ޤ"
+
+#, c-format
+msgid "E123: Undefined function: %s"
+msgstr "E123: ̤δؿǤ: %s"
+
+#, c-format
+msgid "E124: Missing '(': %s"
+msgstr "E124: '(' ޤ: %s"
+
+msgid "E862: Cannot use g: here"
+msgstr "E862: Ǥ g: ϻȤޤ"
+
+#, c-format
+msgid "E125: Illegal argument: %s"
+msgstr "E125: ʰǤ: %s"
+
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: ̾ʣƤޤ: %s"
+
+msgid "E126: Missing :endfunction"
+msgstr "E126: :endfunction ޤ"
+
+#, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: ؿ̾ѿ̾Ⱦͤޤ: %s"
+
+#, c-format
+msgid "E127: Cannot redefine function %s: It is in use"
+msgstr "E127: ؿ %s Ǥޤ: Ǥ"
+
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: ؿ̾ץȤΥե̾Ȱפޤ: %s"
+
+msgid "E129: Function name required"
+msgstr "E129: ؿ̾׵ᤵޤ"
+
+#, c-format
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr "E128: ؿ̾ʸǻϤޤ뤫ޤޤʤФʤޤ: %s"
+
+#, c-format
+msgid "E131: Cannot delete function %s: It is in use"
+msgstr "E131: ؿ %s Ǥޤ: Ǥ"
+
+msgid "E132: Function call depth is higher than 'maxfuncdepth'"
+msgstr "E132: ؿƽФҿ 'maxfuncdepth' Ķޤ"
+
+#, c-format
+msgid "calling %s"
+msgstr "%s ¹Ǥ"
+
+#, c-format
+msgid "%s aborted"
+msgstr "%s Ǥޤ"
+
+#, c-format
+msgid "%s returning #%ld"
+msgstr "%s  #%ld ֤ޤ"
+
+#, c-format
+msgid "%s returning %s"
+msgstr "%s  %s ֤ޤ"
+
+#, c-format
+msgid "continuing in %s"
+msgstr "%s μ¹Ԥ³Ǥ"
+
+msgid "E133: :return not inside a function"
+msgstr "E133: ؿ :return ޤ"
+
+msgid ""
+"\n"
+"# global variables:\n"
+msgstr ""
+"\n"
+"# Хѿ:\n"
+
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tLast set from "
+
+msgid "No old files"
+msgstr "ŤեϤޤ"
+
+#, c-format
+msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+msgstr "<%s>%s%s  %d,  16ʿ %02x,  8ʿ %03o"
+
+#, c-format
+msgid "> %d, Hex %04x, Octal %o"
+msgstr "> %d, 16ʿ %04x, 8ʿ %o"
+
+#, c-format
+msgid "> %d, Hex %08x, Octal %o"
+msgstr "> %d, 16ʿ %08x, 8ʿ %o"
+
+msgid "E134: Move lines into themselves"
+msgstr "E134: Ԥ򤽤켫ȤˤϰưǤޤ"
+
+msgid "1 line moved"
+msgstr "1 Ԥưޤ"
+
+#, c-format
+msgid "%ld lines moved"
+msgstr "%ld Ԥưޤ"
+
+#, c-format
+msgid "%ld lines filtered"
+msgstr "%ld Ԥե륿ޤ"
+
+msgid "E135: *Filter* Autocommands must not change current buffer"
+msgstr "E135: *ե륿* autocommandϸߤΥХåեѹƤϤޤ"
+
+msgid "[No write since last change]\n"
+msgstr "[Ǹѹ¸Ƥޤ]\n"
+
+#, c-format
+msgid "%sviminfo: %s in line: "
+msgstr "%sviminfo: %s : "
+
+msgid "E136: viminfo: Too many errors, skipping rest of file"
+msgstr "E136: viminfo: 顼¿᤮Τ, ʹߤϥåפޤ"
+
+#, c-format
+msgid "Reading viminfo file \"%s\"%s%s%s"
+msgstr "viminfoե \"%s\"%s%s%s ɹ "
+
+msgid " info"
+msgstr " "
+
+msgid " marks"
+msgstr " ޡ"
+
+msgid " oldfiles"
+msgstr " ե뷲"
+
+msgid " FAILED"
+msgstr " "
+
+#. avoid a wait_return for this message, it's annoying
+#, c-format
+msgid "E137: Viminfo file is not writable: %s"
+msgstr "E137: viminfoե뤬ߤǤޤ: %s"
+
+#, c-format
+msgid "E138: Can't write viminfo file %s!"
+msgstr "E138: viminfoե %s ¸Ǥޤ!"
+
+#, c-format
+msgid "Writing viminfo file \"%s\""
+msgstr "viminfoե \"%s\" "
+
+#. Write the info:
+#, c-format
+msgid "# This viminfo file was generated by Vim %s.\n"
+msgstr "#  viminfo ե Vim %s ˤäޤ.\n"
+
+msgid ""
+"# You may edit it if you're careful!\n"
+"\n"
+msgstr ""
+"# ѹݤˤϽʬդƤ!\n"
+"\n"
+
+msgid "# Value of 'encoding' when this file was written\n"
+msgstr "# Υե뤬񤫤줿 'encoding' \n"
+
+msgid "Illegal starting char"
+msgstr "ƬʸǤ"
+
+msgid "Save As"
+msgstr "̾¸"
+
+msgid "Write partial file?"
+msgstr "եʬŪ¸ޤ?"
+
+msgid "E140: Use ! to write partial buffer"
+msgstr "E140: ХåեʬŪ¸ˤ ! ȤäƤ"
+
+#, c-format
+msgid "Overwrite existing file \"%s\"?"
+msgstr "¸Υե \"%s\" 񤭤ޤ?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "åץե \"%s\" ¸ߤޤ. 񤭤ޤ?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: åץե뤬¸ߤޤ: %s (:silent! ɲäǾ)"
+
+#, c-format
+msgid "E141: No file name for buffer %ld"
+msgstr "E141: Хåե %ld ˤ̾ޤ"
+
+msgid "E142: File not written: Writing is disabled by 'write' option"
+msgstr "E142: ե¸ޤǤ: 'write' ץˤ̵Ǥ"
+
+#, c-format
+msgid ""
+"'readonly' option is set for \"%s\".\n"
+"Do you wish to write anyway?"
+msgstr ""
+"\"%s\" ˤ 'readonly' ץꤵƤޤ.\n"
+"񤭶򤷤ޤ?"
+
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"ե \"%s\" ΥѡߥåɹѤǤ.\n"
+"Ǥⶲ餯񤭹ळȤϲǽǤ.\n"
+"³ޤ?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr "E505: \"%s\" ɹѤǤ (ˤ ! ɲ)"
+
+msgid "Edit File"
+msgstr "եԽ"
+
+#, c-format
+msgid "E143: Autocommands unexpectedly deleted new buffer %s"
+msgstr "E143: autocommandͽХåե %s ޤ"
+
+msgid "E144: non-numeric argument to :z"
+msgstr "E144: ǤϤʤ :z Ϥޤ"
+
+msgid "E145: Shell commands not allowed in rvim"
+msgstr "E145: rvimǤϥ륳ޥɤȤޤ"
+
+msgid "E146: Regular expressions can't be delimited by letters"
+msgstr "E146: ɽʸǶڤ뤳ȤǤޤ"
+
+#, c-format
+msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
+msgstr "%s ִޤ? (y/n/a/q/l/^E/^Y)"
+
+msgid "(Interrupted) "
+msgstr "(ޤޤ) "
+
+msgid "1 match"
+msgstr "1 ս곺ޤ"
+
+msgid "1 substitution"
+msgstr "1 սִޤ"
+
+#, c-format
+msgid "%ld matches"
+msgstr "%ld ս곺ޤ"
+
+#, c-format
+msgid "%ld substitutions"
+msgstr "%ld սִޤ"
+
+msgid " on 1 line"
+msgstr " ( 1 )"
+
+#, c-format
+msgid " on %ld lines"
+msgstr " ( %ld )"
+
+msgid "E147: Cannot do :global recursive"
+msgstr "E147: :global ƵŪˤϻȤޤ"
+
+msgid "E148: Regular expression missing from global"
+msgstr "E148: globalޥɤɽꤵƤޤ"
+
+#, c-format
+msgid "Pattern found in every line: %s"
+msgstr "ѥƤιԤǸĤޤ: %s"
+
+#, c-format
+msgid "Pattern not found: %s"
+msgstr "ѥϸĤޤǤ: %s"
+
+msgid ""
+"\n"
+"# Last Substitute String:\n"
+"$"
+msgstr ""
+"\n"
+"# Ǹִ줿ʸ:\n"
+"$"
+
+msgid "E478: Don't panic!"
+msgstr "E478: ƤʤǤ"
+
+#, c-format
+msgid "E661: Sorry, no '%s' help for %s"
+msgstr "E661: ǰǤ '%s' Υإפ %s ˤϤޤ"
+
+#, c-format
+msgid "E149: Sorry, no help for %s"
+msgstr "E149: ǰǤ %s ˤϥإפޤ"
+
+#, c-format
+msgid "Sorry, help file \"%s\" not found"
+msgstr "ǰǤإץե \"%s\" Ĥޤ"
+
+#, c-format
+msgid "E150: Not a directory: %s"
+msgstr "E150: ǥ쥯ȥǤϤޤ: %s"
+
+#, c-format
+msgid "E152: Cannot open %s for writing"
+msgstr "E152: Ѥ %s 򳫤ޤ"
+
+#, c-format
+msgid "E153: Unable to open %s for reading"
+msgstr "E153: ɹѤ %s 򳫤ޤ"
+
+# Added at 29-Apr-2004.
+#, c-format
+msgid "E670: Mix of help file encodings within a language: %s"
+msgstr "E670: 1ĤθΥإץեʣΥ󥳡ɤߤƤޤ: %s"
+
+#, c-format
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154:  \"%s\" ե %s/%s ˽ʣƤޤ"
+
+#, c-format
+msgid "E160: Unknown sign command: %s"
+msgstr "E160: ̤ΤsignޥɤǤ: %s"
+
+msgid "E156: Missing sign name"
+msgstr "E156: sign̾ޤ"
+
+msgid "E612: Too many signs defined"
+msgstr "E612: sign¿Ĥޤ"
+
+#, c-format
+msgid "E239: Invalid sign text: %s"
+msgstr "E239: ̵signΥƥȤǤ: %s"
+
+#, c-format
+msgid "E155: Unknown sign: %s"
+msgstr "E155: ̤ΤsignǤ: %s"
+
+msgid "E159: Missing sign number"
+msgstr "E159: signֹ椬ޤ"
+
+#, c-format
+msgid "E158: Invalid buffer name: %s"
+msgstr "E158: ̵ʥХåե̾Ǥ: %s"
+
+#, c-format
+msgid "E157: Invalid sign ID: %ld"
+msgstr "E157: ̵sign̻ҤǤ: %ld"
+
+# Added at 27-Jan-2004.
+msgid " (NOT FOUND)"
+msgstr "  (Ĥޤ)"
+
+msgid " (not supported)"
+msgstr " (󥵥ݡ)"
+
+msgid "[Deleted]"
+msgstr "[]"
+
+msgid "Entering Debug mode.  Type \"cont\" to continue."
+msgstr "ǥХå⡼ɤޤ. ³ˤ \"cont\" ϤƤ."
+
+#, c-format
+msgid "line %ld: %s"
+msgstr " %ld: %s"
+
+#, c-format
+msgid "cmd: %s"
+msgstr "ޥ: %s"
+
+#, c-format
+msgid "Breakpoint in \"%s%s\" line %ld"
+msgstr "֥졼ݥ \"%s%s\"  %ld"
+
+#, c-format
+msgid "E161: Breakpoint not found: %s"
+msgstr "E161: ֥졼ݥȤĤޤ: %s"
+
+msgid "No breakpoints defined"
+msgstr "֥졼ݥȤƤޤ"
+
+#, c-format
+msgid "%3d  %s %s  line %ld"
+msgstr "%3d  %s %s   %ld"
+
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750:  \":profile start {fname}\" ¹ԤƤ"
+
+#, c-format
+msgid "Save changes to \"%s\"?"
+msgstr "ѹ \"%s\" ¸ޤ?"
+
+msgid "Untitled"
+msgstr "̵"
+
+#, c-format
+msgid "E162: No write since last change for buffer \"%s\""
+msgstr "E162: Хåե \"%s\" ѹ¸Ƥޤ"
+
+msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
+msgstr "ٹ: ͽ¾Хåեذưޤ (autocommands Ĵ٤Ƥ)"
+
+msgid "E163: There is only one file to edit"
+msgstr "E163: Խե1Ĥޤ"
+
+msgid "E164: Cannot go before first file"
+msgstr "E164: ǽΥեˤϹԤޤ"
+
+msgid "E165: Cannot go beyond last file"
+msgstr "E165: ǸΥեۤƸˤϹԤޤ"
+
+#, c-format
+msgid "E666: compiler not supported: %s"
+msgstr "E666: ΥѥˤбƤޤ: %s"
+
+#, c-format
+msgid "Searching for \"%s\" in \"%s\""
+msgstr "\"%s\"  \"%s\" 鸡"
+
+#, c-format
+msgid "Searching for \"%s\""
+msgstr "\"%s\" 򸡺"
+
+#, c-format
+msgid "not found in 'runtimepath': \"%s\""
+msgstr "'runtimepath' ˤϸĤޤ: \"%s\""
+
+msgid "Source Vim script"
+msgstr "VimץȤμ"
+
+#, c-format
+msgid "Cannot source a directory: \"%s\""
+msgstr "ǥ쥯ȥϼޤ: \"%s\""
+
+#, c-format
+msgid "could not source \"%s\""
+msgstr "\"%s\" ޤ"
+
+#, c-format
+msgid "line %ld: could not source \"%s\""
+msgstr " %ld: \"%s\" ޤ"
+
+#, c-format
+msgid "sourcing \"%s\""
+msgstr "\"%s\" "
+
+#, c-format
+msgid "line %ld: sourcing \"%s\""
+msgstr " %ld: %s "
+
+#, c-format
+msgid "finished sourcing %s"
+msgstr "%s μλ"
+
+msgid "modeline"
+msgstr "⡼ɹ"
+
+msgid "--cmd argument"
+msgstr "--cmd "
+
+msgid "-c argument"
+msgstr "-c "
+
+msgid "environment variable"
+msgstr "Ķѿ"
+
+msgid "error handler"
+msgstr "顼ϥɥ"
+
+msgid "W15: Warning: Wrong line separator, ^M may be missing"
+msgstr "W15: ٹ: ԶڤǤ. ^M ʤΤǤ礦"
+
+msgid "E167: :scriptencoding used outside of a sourced file"
+msgstr "E167: :scriptencoding ץȰʳǻѤޤ"
+
+msgid "E168: :finish used outside of a sourced file"
+msgstr "E168: :finish ץȰʳǻѤޤ"
+
+#, c-format
+msgid "Current %slanguage: \"%s\""
+msgstr "ߤ %s: \"%s\""
+
+#, c-format
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197:  \"%s\" Ǥޤ"
+
+msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+msgstr "Ex⡼ɤޤ. Ρޥˤ\"visual\"ϤƤ."
+
+msgid "E501: At end-of-file"
+msgstr "E501: եνλ"
+
+msgid "E169: Command too recursive"
+msgstr "E169: ޥɤƵŪ᤮ޤ"
+
+#, c-format
+msgid "E605: Exception not caught: %s"
+msgstr "E605: 㳰ªޤǤ: %s"
+
+msgid "End of sourced file"
+msgstr "եκǸǤ"
+
+msgid "End of function"
+msgstr "ؿκǸǤ"
+
+msgid "E464: Ambiguous use of user-defined command"
+msgstr "E464: 桼ޥɤΤޤʻѤǤ"
+
+msgid "E492: Not an editor command"
+msgstr "E492: ǥΥޥɤǤϤޤ"
+
+msgid "E493: Backwards range given"
+msgstr "E493: դޤϰϤꤵޤ"
+
+msgid "Backwards range given, OK to swap"
+msgstr "դޤϰϤꤵޤ, ؤޤ?"
+
+msgid "E494: Use w or w>>"
+msgstr "E494: w ⤷ w>> ѤƤ"
+
+msgid "E319: Sorry, the command is not available in this version"
+msgstr "E319: ΥСǤϤΥޥɤѤǤޤ, ʤ"
+
+msgid "E172: Only one file name allowed"
+msgstr "E172: ե̾ 1 ĤˤƤ"
+
+msgid "1 more file to edit.  Quit anyway?"
+msgstr "Խ٤ե뤬 1 Ĥޤ, λޤ?"
+
+#, c-format
+msgid "%d more files to edit.  Quit anyway?"
+msgstr "Խ٤ե뤬 %d Ĥޤ, λޤ?"
+
+msgid "E173: 1 more file to edit"
+msgstr "E173: Խ٤ե뤬 1 Ĥޤ"
+
+#, c-format
+msgid "E173: %ld more files to edit"
+msgstr "E173: Խ٤ե뤬 %ld Ĥޤ"
+
+msgid "E174: Command already exists: add ! to replace it"
+msgstr "E174: ޥɤˤޤ: ˤ ! ɲäƤ"
+
+msgid ""
+"\n"
+"    Name        Args Range Complete  Definition"
+msgstr ""
+"\n"
+"    ̾         ϰ  䴰      "
+
+msgid "No user-defined commands found"
+msgstr "桼ޥɤĤޤǤ"
+
+msgid "E175: No attribute specified"
+msgstr "E175: °Ƥޤ"
+
+msgid "E176: Invalid number of arguments"
+msgstr "E176: ο̵Ǥ"
+
+msgid "E177: Count cannot be specified twice"
+msgstr "E177: Ȥ2Żꤹ뤳ȤϤǤޤ"
+
+msgid "E178: Invalid default value for count"
+msgstr "E178: Ȥξά̵ͤǤ"
+
+msgid "E179: argument required for -complete"
+msgstr "E179: -䴰ΤΰɬפǤ"
+
+#, c-format
+msgid "E181: Invalid attribute: %s"
+msgstr "E181: ̵°Ǥ: %s"
+
+msgid "E182: Invalid command name"
+msgstr "E182: ̵ʥޥ̾Ǥ"
+
+msgid "E183: User defined commands must start with an uppercase letter"
+msgstr "E183: 桼ޥɤϱʸǻϤޤʤФʤޤ"
+
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: ͽ̾ʤΤ, 桼ޥɤѤǤޤ"
+
+#, c-format
+msgid "E184: No such user-defined command: %s"
+msgstr "E184: Υ桼ޥɤϤޤ: %s"
+
+#, c-format
+msgid "E180: Invalid complete value: %s"
+msgstr "E180: ̵䴰Ǥ: %s"
+
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr "E468: 䴰ϥ䴰ǤѤǤޤ"
+
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467: 䴰ˤϰȤƴؿɬפǤ"
+
+msgid "unknown"
+msgstr ""
+
+#, c-format
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: 顼 '%s' Ĥޤ"
+
+msgid "Greetings, Vim user!"
+msgstr "Vim Ȥ󡢤䤢!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784: ǸΥ֥ڡĤ뤳ȤϤǤޤ"
+
+msgid "Already only one tab page"
+msgstr "˥֥ڡ1Ĥޤ"
+
+msgid "Edit File in new window"
+msgstr "ɥǥեԽޤ"
+
+#, c-format
+msgid "Tab page %d"
+msgstr "֥ڡ %d"
+
+msgid "No swap file"
+msgstr "åץե뤬ޤ"
+
+msgid "Append File"
+msgstr "ɲåե"
+
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr ""
+"E747: ХåեƤΤ, ǥ쥯ȥѹǤޤ (! ɲä"
+")"
+
+msgid "E186: No previous directory"
+msgstr "E186: Υǥ쥯ȥϤޤ"
+
+msgid "E187: Unknown"
+msgstr "E187: ̤"
+
+msgid "E465: :winsize requires two number arguments"
+msgstr "E465: :winsize ˤ2ĤοͤΰɬפǤ"
+
+#, c-format
+msgid "Window position: X %d, Y %d"
+msgstr "ɥ: X %d, Y %d"
+
+msgid "E188: Obtaining window position not implemented for this platform"
+msgstr ""
+"E188: Υץåȥۡˤϥɥ֤μǽϼƤޤ"
+
+msgid "E466: :winpos requires two number arguments"
+msgstr "E466: :winpos ˤ2ĤοͤΰɬפǤ"
+
+msgid "Save Redirection"
+msgstr "쥯Ȥ¸ޤ"
+
+msgid "Save View"
+msgstr "ӥ塼¸ޤ"
+
+msgid "Save Session"
+msgstr "å¸ޤ"
+
+msgid "Save Setup"
+msgstr "¸ޤ"
+
+#, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: ǥ쥯ȥǤޤ: %s"
+
+#, c-format
+msgid "E189: \"%s\" exists (add ! to override)"
+msgstr "E189: \"%s\" ¸ߤޤ (񤹤ˤ ! ɲäƤ)"
+
+#, c-format
+msgid "E190: Cannot open \"%s\" for writing"
+msgstr "E190: \"%s\" ѤȤƳޤ"
+
+#. set mark
+msgid "E191: Argument must be a letter or forward/backward quote"
+msgstr "E191: 1ʸαѻ ('  `) ǤʤФޤ"
+
+msgid "E192: Recursive use of :normal too deep"
+msgstr "E192: :normal κƵѤʤ᤮ޤ"
+
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #<  +eval ǽ̵ѤǤޤ"
+
+msgid "E194: No alternate file name to substitute for '#'"
+msgstr "E194: '#'֤ե̾ޤ"
+
+msgid "E495: no autocommand file name to substitute for \"<afile>\""
+msgstr "E495: \"<afile>\"֤autocommandΥե̾ޤ"
+
+msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
+msgstr "E496: \"<abuf>\"֤autocommandХåեֹ椬ޤ"
+
+msgid "E497: no autocommand match name to substitute for \"<amatch>\""
+msgstr "E497: \"<amatch>\"֤autocommandγ̾ޤ"
+
+msgid "E498: no :source file name to substitute for \"<sfile>\""
+msgstr "E498: \"<sfile>\"֤ :source оݥե̾ޤ"
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"ֹ֤椬ޤ"
+
+#, no-c-format
+msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+msgstr ""
+"E499: '%'  '#' ̵̾եʤΤ \":p:h\" ȼʤȤϤǤޤ"
+
+msgid "E500: Evaluates to an empty string"
+msgstr "E500: ʸȤɾޤ"
+
+msgid "E195: Cannot open viminfo file for reading"
+msgstr "E195: viminfoեɹѤȤƳޤ"
+
+msgid "E196: No digraphs in this version"
+msgstr "E196: ΥС˹Ϥޤ"
+
+msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
+msgstr "E608: 'Vim' ǻϤޤ㳰 :throw Ǥޤ"
+
+#. always scroll up, don't overwrite
+#, c-format
+msgid "Exception thrown: %s"
+msgstr "㳰ȯޤ: %s"
+
+#, c-format
+msgid "Exception finished: %s"
+msgstr "㳰«ޤ: %s"
+
+#, c-format
+msgid "Exception discarded: %s"
+msgstr "㳰˴ޤ: %s"
+
+#, c-format
+msgid "%s, line %ld"
+msgstr "%s,  %ld"
+
+#. always scroll up, don't overwrite
+#, c-format
+msgid "Exception caught: %s"
+msgstr "㳰ªޤ: %s"
+
+#, c-format
+msgid "%s made pending"
+msgstr "%s ˤ̤֤ޤ"
+
+#, c-format
+msgid "%s resumed"
+msgstr "%s Ƴޤ"
+
+#, c-format
+msgid "%s discarded"
+msgstr "%s ˴ޤ"
+
+msgid "Exception"
+msgstr "㳰"
+
+msgid "Error and interrupt"
+msgstr "顼ȳ"
+
+msgid "Error"
+msgstr "顼"
+
+#. if (pending & CSTP_INTERRUPT)
+msgid "Interrupt"
+msgstr ""
+
+msgid "E579: :if nesting too deep"
+msgstr "E579: :if Ҥ᤮ޤ"
+
+msgid "E580: :endif without :if"
+msgstr "E580: :if Τʤ :endif ޤ"
+
+msgid "E581: :else without :if"
+msgstr "E581: :if Τʤ :else ޤ"
+
+msgid "E582: :elseif without :if"
+msgstr "E582: :if Τʤ :elseif ޤ"
+
+msgid "E583: multiple :else"
+msgstr "E583: ʣ :else ޤ"
+
+msgid "E584: :elseif after :else"
+msgstr "E584: :else θ :elseif ޤ"
+
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: :while  :for Ҥ᤮ޤ"
+
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :while  :for Τʤ :continue ޤ"
+
+msgid "E587: :break without :while or :for"
+msgstr "E587: :while  :for Τʤ :break ޤ"
+
+msgid "E732: Using :endfor with :while"
+msgstr "E732: :endfor  :while Ȥ߹碌Ƥޤ"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: :endwhile  :for Ȥ߹碌Ƥޤ"
+
+msgid "E601: :try nesting too deep"
+msgstr "E601: :try Ҥ᤮ޤ"
+
+msgid "E603: :catch without :try"
+msgstr "E603: :try Τʤ :catch ޤ"
+
+#. Give up for a ":catch" after ":finally" and ignore it.
+#. * Just parse.
+msgid "E604: :catch after :finally"
+msgstr "E604: :finally θ :catch ޤ"
+
+msgid "E606: :finally without :try"
+msgstr "E606: :try Τʤ :finally ޤ"
+
+#. Give up for a multiple ":finally" and ignore it.
+msgid "E607: multiple :finally"
+msgstr "E607: ʣ :finally ޤ"
+
+msgid "E602: :endtry without :try"
+msgstr "E602: :try Τʤ :endtry Ǥ"
+
+msgid "E193: :endfunction not inside a function"
+msgstr "E193: ؿγ :endfunction ޤ"
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: ߤ¾ΥХåեԽ뤳Ȥϵޤ"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: ߤϥХåեѹ뤳Ȥϵޤ"
+
+msgid "tagname"
+msgstr "̾"
+
+msgid " kind file\n"
+msgstr " ե\n"
+
+msgid "'history' option is zero"
+msgstr "ץ 'history' Ǥ"
+
+#, c-format
+msgid ""
+"\n"
+"# %s History (newest to oldest):\n"
+msgstr ""
+"\n"
+"# %s ܤ (ΤŤΤ):\n"
+
+msgid "Command Line"
+msgstr "ޥɥ饤"
+
+msgid "Search String"
+msgstr "ʸ"
+
+msgid "Expression"
+msgstr ""
+
+msgid "Input Line"
+msgstr "Ϲ"
+
+msgid "E198: cmd_pchar beyond the command length"
+msgstr "E198: cmd_pchar ޥĹĶޤ"
+
+msgid "E199: Active window or buffer deleted"
+msgstr "E199: ƥ֤ʥɥХåեޤ"
+
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: autocommandХåեХåե̾ѹޤ"
+
+msgid "Illegal file name"
+msgstr "ʥե̾"
+
+msgid "is a directory"
+msgstr " ϥǥ쥯ȥǤ"
+
+msgid "is not a file"
+msgstr " ϥեǤϤޤ"
+
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr " ϥǥХǤ ('opendevice' ץǲǤޤ)"
+
+msgid "[New File]"
+msgstr "[ե]"
+
+msgid "[New DIRECTORY]"
+msgstr "[ǥ쥯ȥ]"
+
+msgid "[File too big]"
+msgstr "[ե]"
+
+msgid "[Permission Denied]"
+msgstr "[ǧĤޤ]"
+
+msgid "E200: *ReadPre autocommands made the file unreadable"
+msgstr "E200: *ReadPre autocommand եɹԲĤˤޤ"
+
+msgid "E201: *ReadPre autocommands must not change current buffer"
+msgstr "E201: *ReadPre autocommand ϸߤΥХåեѤޤ"
+
+msgid "Vim: Reading from stdin...\n"
+msgstr "Vim: ɸϤɹ...\n"
+
+msgid "Reading from stdin..."
+msgstr "ɸϤɹ..."
+
+#. Re-opening the original file failed!
+msgid "E202: Conversion made file unreadable!"
+msgstr "E202: ѴեɹԲĤˤޤ"
+
+msgid "[fifo/socket]"
+msgstr "[FIFO/å]"
+
+msgid "[fifo]"
+msgstr "[FIFO]"
+
+msgid "[socket]"
+msgstr "[å]"
+
+msgid "[character special]"
+msgstr "[饯ǥХ]"
+
+msgid "[RO]"
+msgstr "[]"
+
+msgid "[CR missing]"
+msgstr "[CR̵]"
+
+msgid "[long lines split]"
+msgstr "[Ĺʬ]"
+
+msgid "[NOT converted]"
+msgstr "[̤Ѵ]"
+
+msgid "[converted]"
+msgstr "[Ѵ]"
+
+msgid "[blowfish]"
+msgstr "[blowfishŹ沽]"
+
+msgid "[crypted]"
+msgstr "[Ź沽]"
+
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[%ld ܤѴ顼]"
+
+#, c-format
+msgid "[ILLEGAL BYTE in line %ld]"
+msgstr "[%ld ܤʥХ]"
+
+msgid "[READ ERRORS]"
+msgstr "[ɹ顼]"
+
+msgid "Can't find temp file for conversion"
+msgstr "Ѵɬפʰե뤬Ĥޤ"
+
+msgid "Conversion with 'charconvert' failed"
+msgstr "'charconvert' ˤѴԤޤ"
+
+msgid "can't read output of 'charconvert'"
+msgstr "'charconvert' νϤɹޤǤ"
+
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: ե뤬̤ΤˡǰŹ沽Ƥޤ"
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: acwriteХåեγautocommand¸ߤޤ"
+
+msgid "E203: Autocommands deleted or unloaded buffer to be written"
+msgstr "E203: ¸Хåեautocommandޤ"
+
+msgid "E204: Autocommand changed number of lines in unexpected way"
+msgstr "E204: autocommandͽˡǹԿѹޤ"
+
+# Added at 19-Jan-2004.
+msgid "NetBeans disallows writes of unmodified buffers"
+msgstr "NetBeans̤ѹΥХåե񤹤뤳ȤϵĤƤޤ"
+
+msgid "Partial writes disallowed for NetBeans buffers"
+msgstr "NetBeansХåեΰ񤭽ФȤϤǤޤ"
+
+msgid "is not a file or writable device"
+msgstr "ϥեǤ߲ǽǥХǤ⤢ޤ"
+
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "'opendevice' ץˤǥХؤν񤭹ߤϤǤޤ"
+
+msgid "is read-only (add ! to override)"
+msgstr "ɹѤǤ (ˤ ! ɲ)"
+
+msgid "E506: Can't write to backup file (add ! to override)"
+msgstr "E506: Хååץե¸Ǥޤ (! ɲäǶ¸)"
+
+msgid "E507: Close error for backup file (add ! to override)"
+msgstr ""
+"E507: ХååץեĤݤ˥顼ȯޤ (! ɲäǶ)"
+
+msgid "E508: Can't read file for backup (add ! to override)"
+msgstr "E508: Хååѥեɹޤ (! ɲäǶɹ)"
+
+msgid "E509: Cannot create backup file (add ! to override)"
+msgstr "E509: Хååץեޤ (! ɲäǶ)"
+
+msgid "E510: Can't make backup file (add ! to override)"
+msgstr "E510: Хååץեޤ (! ɲäǶ)"
+
+msgid "E460: The resource fork would be lost (add ! to override)"
+msgstr "E460: ꥽ե뤫⤷ޤ (! ɲäǶ)"
+
+msgid "E214: Can't find temp file for writing"
+msgstr "E214: ¸Ѱե뤬Ĥޤ"
+
+msgid "E213: Cannot convert (add ! to write without conversion)"
+msgstr "E213: ѴǤޤ (! ɲäѴ¸)"
+
+msgid "E166: Can't open linked file for writing"
+msgstr "E166: 󥯤줿ե˽ޤ"
+
+msgid "E212: Can't open file for writing"
+msgstr "E212: Ѥ˥ե򳫤ޤ"
+
+msgid "E667: Fsync failed"
+msgstr "E667: fsync ˼Ԥޤ"
+
+msgid "E512: Close failed"
+msgstr "E512: Ĥ뤳Ȥ˼"
+
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr "E513: ߥ顼, Ѵ (񤹤ˤ 'fenc' ˤƤ)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: ߥ顼, Ѵ, Կ %ld (񤹤ˤ 'fenc' ˤƤ"
+")"
+
+msgid "E514: write error (file system full?)"
+msgstr "E514: ߥ顼, (ե륷ƥब?)"
+
+msgid " CONVERSION ERROR"
+msgstr " Ѵ顼"
+
+#, c-format
+msgid " in line %ld;"
+msgstr " %ld;"
+
+msgid "[Device]"
+msgstr "[ǥХ]"
+
+msgid "[New]"
+msgstr "[]"
+
+msgid " [a]"
+msgstr " [a]"
+
+msgid " appended"
+msgstr " ɲ"
+
+msgid " [w]"
+msgstr " [w]"
+
+msgid " written"
+msgstr " "
+
+msgid "E205: Patchmode: can't save original file"
+msgstr "E205: patchmode: ܥե¸Ǥޤ"
+
+msgid "E206: patchmode: can't touch empty original file"
+msgstr "E206: patchmode: θܥեtouchǤޤ"
+
+msgid "E207: Can't delete backup file"
+msgstr "E207: Хååץեäޤ"
+
+msgid ""
+"\n"
+"WARNING: Original file may be lost or damaged\n"
+msgstr ""
+"\n"
+"ٹ: ܥե뤬줿ѹޤ\n"
+
+msgid "don't quit the editor until the file is successfully written!"
+msgstr "ե¸ޤǥǥλʤǤ!"
+
+msgid "[dos]"
+msgstr "[dos]"
+
+msgid "[dos format]"
+msgstr "[dosեޥå]"
+
+msgid "[mac]"
+msgstr "[mac]"
+
+msgid "[mac format]"
+msgstr "[macեޥå]"
+
+msgid "[unix]"
+msgstr "[unix]"
+
+msgid "[unix format]"
+msgstr "[unixեޥå]"
+
+msgid "1 line, "
+msgstr "1 , "
+
+#, c-format
+msgid "%ld lines, "
+msgstr "%ld , "
+
+msgid "1 character"
+msgstr "1 ʸ"
+
+#, c-format
+msgid "%lld characters"
+msgstr "%lld ʸ"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
+msgid "%ld characters"
+msgstr "%ld ʸ"
+
+msgid "[noeol]"
+msgstr "[noeol]"
+
+msgid "[Incomplete last line]"
+msgstr "[ǽԤԴ]"
+
+#. don't overwrite messages here
+#. must give this prompt
+#. don't use emsg() here, don't want to flush the buffers
+msgid "WARNING: The file has been changed since reading it!!!"
+msgstr "ٹ: ɹ˥եѹޤ!!!"
+
+msgid "Do you really want to write to it"
+msgstr "˾񤭤ޤ"
+
+#, c-format
+msgid "E208: Error writing to \"%s\""
+msgstr "E208: \"%s\" Υ顼Ǥ"
+
+#, c-format
+msgid "E209: Error closing \"%s\""
+msgstr "E209: \"%s\" Ĥ˥顼Ǥ"
+
+#, c-format
+msgid "E210: Error reading \"%s\""
+msgstr "E210: \"%s\" ɹΥ顼Ǥ"
+
+msgid "E246: FileChangedShell autocommand deleted buffer"
+msgstr "E246: autocommand  FileChangedShell Хåեޤ"
+
+#, c-format
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: ե \"%s\" ϴ¸ߤޤ"
+
+#, c-format
+msgid ""
+"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
+"well"
+msgstr "W12: ٹ: ե \"%s\" ѹVimΥХåեѹޤ"
+
+msgid "See \":help W12\" for more info."
+msgstr "ܺ٤ \":help W12\" 򻲾ȤƤ"
+
+#, c-format
+msgid "W11: Warning: File \"%s\" has changed since editing started"
+msgstr "W11: ٹ: ե \"%s\" Խϸѹޤ"
+
+msgid "See \":help W11\" for more info."
+msgstr "ܺ٤ \":help W11\" 򻲾ȤƤ"
+
+#, c-format
+msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
+msgstr "W16: ٹ: ե \"%s\" Υ⡼ɤԽϸѹޤ"
+
+msgid "See \":help W16\" for more info."
+msgstr "ܺ٤ \":help W16\" 򻲾ȤƤ"
+
+#, c-format
+msgid "W13: Warning: File \"%s\" has been created after editing started"
+msgstr "W13: ٹ: ե \"%s\" Խϸ˺ޤ"
+
+msgid "Warning"
+msgstr "ٹ"
+
+msgid ""
+"&OK\n"
+"&Load File"
+msgstr ""
+"&OK\n"
+"եɹ(&L)"
+
+#, c-format
+msgid "E462: Could not prepare for reloading \"%s\""
+msgstr "E462: \"%s\" ɤǤޤǤ"
+
+#, c-format
+msgid "E321: Could not reload \"%s\""
+msgstr "E321: \"%s\" ϥɤǤޤǤ"
+
+msgid "--Deleted--"
+msgstr "----"
+
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "autocommand: %s <Хåե=%d> ưŪ˺ޤ"
+
+#. the group doesn't exist
+#, c-format
+msgid "E367: No such group: \"%s\""
+msgstr "E367: Υ롼פϤޤ: \"%s\""
+
+#, c-format
+msgid "E215: Illegal character after *: %s"
+msgstr "E215: * θʸޤ: %s"
+
+#, c-format
+msgid "E216: No such event: %s"
+msgstr "E216: Τ褦ʥ٥ȤϤޤ: %s"
+
+#, c-format
+msgid "E216: No such group or event: %s"
+msgstr "E216: Τ褦ʥ롼פ⤷ϥ٥ȤϤޤ: %s"
+
+#. Highlight title
+msgid ""
+"\n"
+"--- Auto-Commands ---"
+msgstr ""
+"\n"
+"--- Auto-Commands ---"
+
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <Хåե=%d>: ̵ʥХåեֹǤ "
+
+msgid "E217: Can't execute autocommands for ALL events"
+msgstr "E217: ƤΥ٥ȤФƤautocommandϼ¹ԤǤޤ"
+
+msgid "No matching autocommands"
+msgstr "autocommand¸ߤޤ"
+
+msgid "E218: autocommand nesting too deep"
+msgstr "E218: autocommandҤ᤮ޤ"
+
+#, c-format
+msgid "%s Auto commands for \"%s\""
+msgstr "%s Auto commands for \"%s\""
+
+#, c-format
+msgid "Executing %s"
+msgstr "%s ¹ԤƤޤ"
+
+#, c-format
+msgid "autocommand %s"
+msgstr "autocommand %s"
+
+msgid "E219: Missing {."
+msgstr "E219: { ޤ."
+
+msgid "E220: Missing }."
+msgstr "E220: } ޤ."
+
+msgid "E490: No fold found"
+msgstr "E490: ޾ߤޤ"
+
+msgid "E350: Cannot create fold with current 'foldmethod'"
+msgstr "E350: ߤ 'foldmethod' Ǥ޾ߤǤޤ"
+
+msgid "E351: Cannot delete fold with current 'foldmethod'"
+msgstr "E351: ߤ 'foldmethod' Ǥ޾ߤǤޤ"
+
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld Ԥ޾ޤޤ "
+
+msgid "E222: Add to read buffer"
+msgstr "E222: ɹХåեɲ"
+
+msgid "E223: recursive mapping"
+msgstr "E223: ƵŪޥåԥ"
+
+#, c-format
+msgid "E224: global abbreviation already exists for %s"
+msgstr "E224: %s ȤХûϤϴ¸ߤޤ"
+
+#, c-format
+msgid "E225: global mapping already exists for %s"
+msgstr "E225: %s ȤХޥåԥ󥰤ϴ¸ߤޤ"
+
+#, c-format
+msgid "E226: abbreviation already exists for %s"
+msgstr "E226: %s ȤûϤϴ¸ߤޤ"
+
+#, c-format
+msgid "E227: mapping already exists for %s"
+msgstr "E227: %s Ȥޥåԥ󥰤ϴ¸ߤޤ"
+
+msgid "No abbreviation found"
+msgstr "ûϤϸĤޤǤ"
+
+msgid "No mapping found"
+msgstr "ޥåԥ󥰤ϸĤޤǤ"
+
+msgid "E228: makemap: Illegal mode"
+msgstr "E228: makemap: ʥ⡼"
+
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: GUIѤΥץεư˼Ԥޤ"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: ҥץGUIεư˼Ԥޤ"
+
+msgid "E229: Cannot start the GUI"
+msgstr "E229: GUI򳫻ϤǤޤ"
+
+#, c-format
+msgid "E230: Cannot read from \"%s\""
+msgstr "E230: \"%s\"ɹळȤǤޤ"
+
+msgid "E665: Cannot start GUI, no valid font found"
+msgstr "E665: ͭʥեȤĤʤΤ, GUI򳫻ϤǤޤ"
+
+msgid "E231: 'guifontwide' invalid"
+msgstr "E231: 'guifontwide' ̵Ǥ"
+
+msgid "E599: Value of 'imactivatekey' is invalid"
+msgstr "E599: 'imactivatekey' ꤵ줿̵ͤǤ"
+
+#, c-format
+msgid "E254: Cannot allocate color %s"
+msgstr "E254: %s οƤޤ"
+
+msgid "No match at cursor, finding next"
+msgstr "ΰ֤˥ޥåϤޤ, 򸡺Ƥޤ"
+
+msgid "<cannot open> "
+msgstr "<ޤ> "
+
+#, c-format
+msgid "E616: vim_SelFile: can't get font %s"
+msgstr "E616: vim_SelFile: ե %s Ǥޤ"
+
+msgid "E614: vim_SelFile: can't return to current directory"
+msgstr "E614: vim_SelFile: ߤΥǥ쥯ȥޤ"
+
+msgid "Pathname:"
+msgstr "ѥ̾:"
+
+msgid "E615: vim_SelFile: can't get current directory"
+msgstr "E615: vim_SelFile: ߤΥǥ쥯ȥǤޤ"
+
+msgid "OK"
+msgstr "OK"
+
+msgid "Cancel"
+msgstr "󥻥"
+
+msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
+msgstr "С: ǤޤǤ."
+
+msgid "Vim dialog"
+msgstr "Vim "
+
+msgid "E232: Cannot create BalloonEval with both message and callback"
+msgstr "E232: åȥХåΤ BalloonEval Ǥޤ"
+
+msgid ""
+"&Yes\n"
+"&No\n"
+"&Cancel"
+msgstr ""
+"Ϥ(&Y)\n"
+"(&N)\n"
+"󥻥(&C)"
+
+msgid "Input _Methods"
+msgstr "ץåȥ᥽å"
+
+msgid "VIM - Search and Replace..."
+msgstr "VIM - ִ..."
+
+msgid "VIM - Search..."
+msgstr "VIM - ..."
+
+msgid "Find what:"
+msgstr "ʸ:"
+
+msgid "Replace with:"
+msgstr "ִʸ:"
+
+#. whole word only button
+msgid "Match whole word only"
+msgstr "Τ˳Τ"
+
+#. match case button
+msgid "Match case"
+msgstr "ʸ/ʸ̤"
+
+msgid "Direction"
+msgstr ""
+
+#. 'Up' and 'Down' buttons
+msgid "Up"
+msgstr ""
+
+msgid "Down"
+msgstr ""
+
+#. 'Find Next' button
+msgid "Find Next"
+msgstr "򸡺"
+
+#. 'Replace' button
+msgid "Replace"
+msgstr "ִ"
+
+#. 'Replace All' button
+msgid "Replace All"
+msgstr "ִ"
+
+msgid "Vim: Received \"die\" request from session manager\n"
+msgstr "Vim: åޥ͡㤫 \"die\" ׵ޤ\n"
+
+msgid "Close"
+msgstr "Ĥ"
+
+msgid "New tab"
+msgstr "֥ڡ"
+
+msgid "Open Tab..."
+msgstr "֥ڡ򳫤..."
+
+msgid "Vim: Main window unexpectedly destroyed\n"
+msgstr "Vim: ᥤ󥦥ɥ԰դ˲ޤ\n"
+
+msgid "&Filter"
+msgstr "ե륿(&F)"
+
+msgid "&Cancel"
+msgstr "󥻥(&C)"
+
+msgid "Directories"
+msgstr "ǥ쥯ȥ"
+
+msgid "Filter"
+msgstr "ե륿"
+
+msgid "&Help"
+msgstr "إ(&H)"
+
+msgid "Files"
+msgstr "ե"
+
+msgid "&OK"
+msgstr "&OK"
+
+msgid "Selection"
+msgstr ""
+
+msgid "Find &Next"
+msgstr "򸡺(&N)"
+
+msgid "&Replace"
+msgstr "ִ(&R)"
+
+msgid "Replace &All"
+msgstr "ִ(&A)"
+
+msgid "&Undo"
+msgstr "ɥ(&U)"
+
+#, c-format
+msgid "E671: Cannot find window title \"%s\""
+msgstr "E671: ȥ뤬 \"%s\" ΥɥϸĤޤ"
+
+#, c-format
+msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
+msgstr "E243: ϥݡȤޤ: \"-%s\"; OLEǤѤƤ."
+
+msgid "E672: Unable to open window inside MDI application"
+msgstr "E672: MDIץǤϥɥ򳫤ޤ"
+
+msgid "Close tab"
+msgstr "֥ڡĤ"
+
+msgid "Open tab..."
+msgstr "֥ڡ򳫤"
+
+msgid "Find string (use '\\\\' to find  a '\\')"
+msgstr "ʸ ('\\' 򸡺ˤ '\\\\')"
+
+msgid "Find & Replace (use '\\\\' to find  a '\\')"
+msgstr "ִ ('\\' 򸡺ˤ '\\\\')"
+
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr "Ȥޤ"
+
+msgid "Directory\t*.nothing\n"
+msgstr "ǥ쥯ȥ\t*.nothing\n"
+
+msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
+msgstr "Vim E458: ꤬ʤΤǥȥƤޤ"
+
+#, c-format
+msgid "E250: Fonts for the following charsets are missing in fontset %s:"
+msgstr "E250: ʲʸåȤΥեȤޤ %s:"
+
+#, c-format
+msgid "E252: Fontset name: %s"
+msgstr "E252: եȥå̾: %s"
+
+#, c-format
+msgid "Font '%s' is not fixed-width"
+msgstr "ե '%s' ϸǤϤޤ"
+
+#, c-format
+msgid "E253: Fontset name: %s\n"
+msgstr "E253: եȥå̾: %s\n"
+
+#, c-format
+msgid "Font0: %s\n"
+msgstr "ե0: %s\n"
+
+#, c-format
+msgid "Font1: %s\n"
+msgstr "ե1: %s\n"
+
+#, c-format
+msgid "Font%ld width is not twice that of font0\n"
+msgstr "ե%ld ե02ܤǤϤޤ\n"
+
+#, c-format
+msgid "Font0 width: %ld\n"
+msgstr "ե0: %ld\n"
+
+#, c-format
+msgid ""
+"Font1 width: %ld\n"
+"\n"
+msgstr ""
+"ե1: %ld\n"
+"\n"
+
+msgid "Invalid font specification"
+msgstr "̵ʥեȻǤ"
+
+msgid "&Dismiss"
+msgstr "Ѳ(&D)"
+
+msgid "no specific match"
+msgstr "ޥåΤޤ"
+
+msgid "Vim - Font Selector"
+msgstr "Vim - ե"
+
+msgid "Name:"
+msgstr "̾:"
+
+#. create toggle button
+msgid "Show size in Points"
+msgstr "ݥȤɽ"
+
+msgid "Encoding:"
+msgstr "󥳡:"
+
+msgid "Font:"
+msgstr "ե:"
+
+msgid "Style:"
+msgstr ":"
+
+msgid "Size:"
+msgstr ":"
+
+msgid "E256: Hangul automata ERROR"
+msgstr "E256: ϥ󥰥륪ȥޥȥ󥨥顼"
+
+msgid "E550: Missing colon"
+msgstr "E550: 󤬤ޤ"
+
+msgid "E551: Illegal component"
+msgstr "E551: ʹʸǤǤ"
+
+msgid "E552: digit expected"
+msgstr "E552: ͤɬפǤ"
+
+#, c-format
+msgid "Page %d"
+msgstr "%d ڡ"
+
+msgid "No text to be printed"
+msgstr "ƥȤޤ"
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr ": ڡ %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr " ԡ %d ( %d )"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "ޤ: %s"
+
+msgid "Printing aborted"
+msgstr "ߤޤ"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: PostScriptϥեνߥ顼Ǥ"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: ե \"%s\" 򳫤ޤ"
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: PostScriptΥ꥽ե \"%s\" ɹޤ"
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: ե \"%s\"  PostScript ꥽եǤϤޤ"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: ե \"%s\" бƤʤ PostScript ꥽եǤ"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: ꥽ե \"%s\" ϥС󤬰ۤʤޤ"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: ߴ̵ޥХȥ󥳡ǥ󥰤ʸåȤǤ"
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: ޥХȥ󥳡ǥ󥰤Ǥ printmbcharset ˤǤޤ"
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr ""
+"E675: ޥХʸ뤿ΥǥեȥեȤꤵƤޤ"
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: PostScriptѤΥե򳫤ޤ"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: ե \"%s\" 򳫤ޤ"
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: PostScriptΥ꥽ե \"prolog.ps\" Ĥޤ"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: PostScriptΥ꥽ե \"cidfont.ps\" Ĥޤ"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: PostScriptΥ꥽ե \"%s.ps\" Ĥޤ"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: 󥳡 \"%s\" ѴǤޤ"
+
+msgid "Sending to printer..."
+msgstr "ץ󥿤..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: PostScriptեΰ˼Ԥޤ"
+
+msgid "Print job sent."
+msgstr "֤ޤ."
+
+msgid "Add a new database"
+msgstr "ǡ١ɲ"
+
+msgid "Query for a pattern"
+msgstr "ѥΥ꡼ɲ"
+
+msgid "Show this message"
+msgstr "Υåɽ"
+
+msgid "Kill a connection"
+msgstr "³λ"
+
+msgid "Reinit all connections"
+msgstr "Ƥ³ƽ"
+
+msgid "Show connections"
+msgstr "³ɽ"
+
+#, c-format
+msgid "E560: Usage: cs[cope] %s"
+msgstr "E560: ˡ: cs[cope] %s"
+
+msgid "This cscope command does not support splitting the window.\n"
+msgstr "cscopeޥɤʬ䥦ɥǤϥݡȤޤ.\n"
+
+msgid "E562: Usage: cstag <ident>"
+msgstr "E562: ˡ: cstag <ident>"
+
+msgid "E257: cstag: tag not found"
+msgstr "E257: cstag: Ĥޤ"
+
+#, c-format
+msgid "E563: stat(%s) error: %d"
+msgstr "E563: stat(%s) 顼: %d"
+
+msgid "E563: stat error"
+msgstr "E563: stat 顼"
+
+#, c-format
+msgid "E564: %s is not a directory or a valid cscope database"
+msgstr "E564: %s ϥǥ쥯ȥڤͭcscopeΥǡ١ǤϤޤ"
+
+#, c-format
+msgid "Added cscope database %s"
+msgstr "cscopeǡ١ %s ɲ"
+
+#, c-format
+msgid "E262: error reading cscope connection %ld"
+msgstr "E262: cscope³ %ld ɹΥ顼Ǥ"
+
+msgid "E561: unknown cscope search type"
+msgstr "E561: ̤ΤcscopeǤ"
+
+msgid "E566: Could not create cscope pipes"
+msgstr "E566: cscopeѥפǤޤǤ"
+
+msgid "E622: Could not fork for cscope"
+msgstr "E622: cscopeεư(fork)˼Ԥޤ"
+
+msgid "cs_create_connection exec failed"
+msgstr "cs_create_connection μ¹Ԥ˼Ԥޤ"
+
+msgid "cs_create_connection: fdopen for to_fp failed"
+msgstr "cs_create_connection: to_fp  fdopen ˼Ԥޤ"
+
+msgid "cs_create_connection: fdopen for fr_fp failed"
+msgstr "cs_create_connection: fr_fp  fdopen ˼Ԥޤ"
+
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: cscopeץưǤޤǤ"
+
+msgid "E567: no cscope connections"
+msgstr "E567: cscope³˼Ԥޤ"
+
+#, c-format
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: ̵ cscopequickfix ե饰 %c  %c Ǥ"
+
+#, c-format
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: cscope꡼ %s of %s ˳ޤǤ"
+
+msgid "cscope commands:\n"
+msgstr "cscopeޥ:\n"
+
+#, c-format
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (ˡ: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: δؿƤǤؿõ\n"
+"       d: δؿƤǤؿõ\n"
+"       e: egrepѥõ\n"
+"       f: Υեõ\n"
+"       g: õ\n"
+"       i: Υե#includeƤեõ\n"
+"       s: Cܥõ\n"
+"       t: Υƥʸõ\n"
+
+#, c-format
+msgid "E625: cannot open cscope database: %s"
+msgstr "E625: cscopeǡ١: %s 򳫤ȤǤޤ"
+
+msgid "E626: cannot get cscope database information"
+msgstr "E626: cscopeǡ١ξǤޤ"
+
+msgid "E568: duplicate cscope database not added"
+msgstr "E568: ʣcscopeǡ١ɲäޤǤ"
+
+#, c-format
+msgid "E261: cscope connection %s not found"
+msgstr "E261: cscope³ %s ĤޤǤ"
+
+#, c-format
+msgid "cscope connection %s closed"
+msgstr "cscope³ %s Ĥޤ"
+
+#. should not reach here
+msgid "E570: fatal error in cs_manage_matches"
+msgstr "E570: cs_manage_matches ̿Ūʥ顼Ǥ"
+
+#, c-format
+msgid "Cscope tag: %s"
+msgstr "Cscope : %s"
+
+msgid ""
+"\n"
+"   #   line"
+msgstr ""
+"\n"
+"   #   ֹ"
+
+msgid "filename / context / line\n"
+msgstr "ե̾ / ʸ̮ / \n"
+
+#, c-format
+msgid "E609: Cscope error: %s"
+msgstr "E609: cscope顼: %s"
+
+msgid "All cscope databases reset"
+msgstr "Ƥcscopeǡ١ꥻåȤޤ"
+
+msgid "no cscope connections\n"
+msgstr "cscope³ޤ\n"
+
+msgid " # pid    database name                       prepend path\n"
+msgstr " # pid    ǡ١̾                      prepend ѥ\n"
+
+msgid "Lua library cannot be loaded."
+msgstr "Lua饤֥ɤǤޤ."
+
+msgid "cannot save undo information"
+msgstr "ɥ¸Ǥޤ"
+
+msgid ""
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
+"loaded."
+msgstr "E815: Υޥɤ̵Ǥ. MzScheme 饤֥ɤǤޤ."
+
+msgid "invalid expression"
+msgstr "̵ʼǤ"
+
+msgid "expressions disabled at compile time"
+msgstr "ϥѥ̵ˤƤޤ"
+
+msgid "hidden option"
+msgstr "ץ"
+
+msgid "unknown option"
+msgstr "̤ΤΥץǤ"
+
+msgid "window index is out of range"
+msgstr "ϰϳΥɥֹǤ"
+
+msgid "couldn't open buffer"
+msgstr "Хåե򳫤ޤ"
+
+msgid "cannot delete line"
+msgstr "Ԥäޤ"
+
+msgid "cannot replace line"
+msgstr "ԤִǤޤ"
+
+msgid "cannot insert line"
+msgstr "ԤǤޤ"
+
+msgid "string cannot contain newlines"
+msgstr "ʸˤϲʸޤޤ"
+
+msgid "error converting Scheme values to Vim"
+msgstr "SchemeͤVimؤѴ顼"
+
+msgid "Vim error: ~a"
+msgstr "Vim 顼: ~a"
+
+msgid "Vim error"
+msgstr "Vim 顼"
+
+msgid "buffer is invalid"
+msgstr "Хåե̵Ǥ"
+
+msgid "window is invalid"
+msgstr "ɥ̵Ǥ"
+
+msgid "linenr out of range"
+msgstr "ϰϳιֹǤ"
+
+msgid "not allowed in the Vim sandbox"
+msgstr "ɥܥåǤϵޤ"
+
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: 饤֥ %s ɤǤޤǤ"
+
+msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+msgstr ""
+"Υޥɤ̵Ǥ, ʤ: Perl饤֥ɤǤޤǤ."
+
+msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+msgstr ""
+"E299: ɥܥåǤ Safe ⥸塼ѤʤPerlץȤ϶ؤ"
+"Ƥޤ"
+
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: VimǤ :py3 Ȥä :python Ȥޤ"
+
+msgid "only string keys are allowed"
+msgstr "ʸΥΤߤĤƤޤ"
+
+msgid ""
+"E263: Sorry, this command is disabled, the Python library could not be "
+"loaded."
+msgstr ""
+"E263: Υޥɤ̵Ǥ,ʤ: Python饤֥ɤǤޤ"
+"Ǥ."
+
+# Added at 07-Feb-2004.
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Python ƵŪ˼¹Ԥ뤳ȤϤǤޤ"
+
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: ɾͭpython֥Ȥ֤ޤǤ"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: ֤줿python֥ȤvimͤѴǤޤǤ"
+
+msgid "failed to run the code"
+msgstr "ɤμ¹Ԥ˼Ԥޤ"
+
+msgid "E863: return value must be an instance of str"
+msgstr "E863: ͤʸΥ󥹥󥹤ǤʤФʤޤ"
+
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: VimǤ :python Ȥä :py3 Ȥޤ"
+
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: ɾͭpython 3֥Ȥ֤ޤǤ"
+
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr "E861: ֤줿python 3֥ȤvimͤѴǤޤǤ"
+
+msgid "index must be int or slice"
+msgstr "ǥå饤ǤʤФʤޤ"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ ʸΥ󥹥󥹤ǤʤФʤޤ"
+
+msgid ""
+"E266: Sorry, this command is disabled, the Ruby library could not be loaded."
+msgstr ""
+"E266: Υޥɤ̵Ǥ,ʤ: Ruby饤֥ɤǤޤ"
+"."
+
+msgid "E267: unexpected return"
+msgstr "E267: ͽ return Ǥ"
+
+msgid "E268: unexpected next"
+msgstr "E268: ͽ next Ǥ"
+
+msgid "E269: unexpected break"
+msgstr "E269: ͽ break Ǥ"
+
+msgid "E270: unexpected redo"
+msgstr "E270: ͽ redo Ǥ"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: rescue γ retry Ǥ"
+
+msgid "E272: unhandled exception"
+msgstr "E272: 갷ʤä㳰ޤ"
+
+#, c-format
+msgid "E273: unknown longjmp status %d"
+msgstr "E273: ̤Τlongjmp: %d"
+
+msgid "Toggle implementation/definition"
+msgstr "ڤؤ"
+
+msgid "Show base class of"
+msgstr "Υ饹δɽ"
+
+msgid "Show overridden member function"
+msgstr "С饤ɤ줿дؿɽ"
+
+msgid "Retrieve from file"
+msgstr "ե뤫"
+
+msgid "Retrieve from project"
+msgstr "ץȤ"
+
+msgid "Retrieve from all projects"
+msgstr "ƤΥץȤ"
+
+msgid "Retrieve"
+msgstr ""
+
+msgid "Show source of"
+msgstr "Υɽ"
+
+msgid "Find symbol"
+msgstr "Ĥܥ"
+
+msgid "Browse class"
+msgstr "饹򻲾"
+
+msgid "Show class in hierarchy"
+msgstr "ؤǥ饹ɽ"
+
+msgid "Show class in restricted hierarchy"
+msgstr "ꤵ줿ؤǥ饹ɽ"
+
+msgid "Xref refers to"
+msgstr "Xref λ"
+
+msgid "Xref referred by"
+msgstr "Xref Ȥ"
+
+msgid "Xref has a"
+msgstr "Xref ΤΤäƤޤ"
+
+msgid "Xref used by"
+msgstr "Xref Ѥ"
+
+msgid "Show docu of"
+msgstr "ʸϤɽ"
+
+msgid "Generate docu for"
+msgstr "ʸϤ"
+
+msgid ""
+"Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
+"$PATH).\n"
+msgstr ""
+"SNiFF+³Ǥޤ. ĶåƤ(sniffemacs  $PATH ˤʤ"
+"Фʤޤ).\n"
+
+msgid "E274: Sniff: Error during read. Disconnected"
+msgstr "E274: Sniff: ɹ˥顼ȯޤ. Ǥޤ"
+
+msgid "SNiFF+ is currently "
+msgstr "SNiFF+ ξ֤ϡ"
+
+msgid "not "
+msgstr "̤"
+
+msgid "connected"
+msgstr "³פǤ"
+
+#, c-format
+msgid "E275: Unknown SNiFF+ request: %s"
+msgstr "E275: ̤Τ SNiFF+ ꥯȤǤ: %s"
+
+msgid "E276: Error connecting to SNiFF+"
+msgstr "E276: SNiFF+ ؤ³Υ顼Ǥ"
+
+msgid "E278: SNiFF+ not connected"
+msgstr "E278: SNiFF+ ³Ƥޤ"
+
+msgid "E279: Not a SNiFF+ buffer"
+msgstr "E279: SNiFF+ Хåեޤ"
+
+msgid "Sniff: Error during write. Disconnected"
+msgstr "Sniff: ˥顼ȯΤǤޤ"
+
+msgid "invalid buffer number"
+msgstr "̵ʥХåեֹǤ"
+
+msgid "not implemented yet"
+msgstr "ޤƤޤ"
+
+#. ???
+msgid "cannot set line(s)"
+msgstr "ԤǤޤ"
+
+msgid "invalid mark name"
+msgstr "̵ʥޡ̾Ǥ"
+
+msgid "mark not set"
+msgstr "ޡꤵƤޤ"
+
+#, c-format
+msgid "row %d column %d"
+msgstr " %d  %d"
+
+msgid "cannot insert/append line"
+msgstr "Ԥ/ɲäǤޤ"
+
+msgid "line number out of range"
+msgstr "ϰϳιֹǤ"
+
+msgid "unknown flag: "
+msgstr "̤ΤΥե饰: "
+
+msgid "unknown vimOption"
+msgstr "̤Τ vimOption Ǥ"
+
+msgid "keyboard interrupt"
+msgstr "ܡɳ"
+
+msgid "vim error"
+msgstr "vim 顼"
+
+msgid "cannot create buffer/window command: object is being deleted"
+msgstr ""
+"Хåե/ɥޥɤǤޤ: ֥ȤõƤ"
+""
+
+msgid ""
+"cannot register callback command: buffer/window is already being deleted"
+msgstr ""
+"ХåޥɤϿǤޤ: Хåե/ɥ˾õޤ"
+
+#. This should never happen.  Famous last word?
+msgid ""
+"E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim."
+"org"
+msgstr ""
+"E280: TCL ̿Ū顼: reflist !? vim-dev@vim.org 𤷤Ƥ"
+
+msgid "cannot register callback command: buffer/window reference not found"
+msgstr ""
+"ХåޥɤϿǤޤ: Хåե/ɥλȤĤޤ"
+""
+
+msgid ""
+"E571: Sorry, this command is disabled: the Tcl library could not be loaded."
+msgstr ""
+"E571: Υޥɤ̵Ǥ,ʤ: Tcl饤֥ɤǤޤ"
+"."
+
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: λ %d"
+
+msgid "cannot get line"
+msgstr "ԤǤޤ"
+
+msgid "Unable to register a command server name"
+msgstr "̿᥵Ф̾ϿǤޤ"
+
+msgid "E248: Failed to send command to the destination program"
+msgstr "E248: ŪΥץؤΥޥ˼Ԥޤ"
+
+#, c-format
+msgid "E573: Invalid server id used: %s"
+msgstr "E573: ̵ʥIDȤޤ: %s"
+
+msgid "E251: VIM instance registry property is badly formed.  Deleted!"
+msgstr "E251: VIM ΤϿץѥƥǤ. õޤ!"
+
+msgid "Unknown option argument"
+msgstr "̤ΤΥץǤ"
+
+msgid "Too many edit arguments"
+msgstr "Խ¿᤮ޤ"
+
+msgid "Argument missing after"
+msgstr "ޤ"
+
+msgid "Garbage after option argument"
+msgstr "ץθ˥ߤޤ"
+
+msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+msgstr "\"+command\", \"-c command\", \"--cmd command\" ΰ¿᤮ޤ"
+
+msgid "Invalid argument for"
+msgstr "̵ʰǤ: "
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "%d ĤΥե뤬Խ򹵤Ƥޤ\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "netbeans ϤGUIǤѤǤޤ\n"
+
+msgid "This Vim was not compiled with the diff feature."
+msgstr "Vimˤdiffǽޤ(ѥ)."
+
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "'-nb' ԲǽǤ: ѥ̵ˤƤޤ\n"
+
+msgid "Attempt to open script file again: \""
+msgstr "ץȥեƤӳƤߤޤ: \""
+
+msgid "Cannot open for reading: \""
+msgstr "ɹѤȤƳޤ"
+
+msgid "Cannot open for script output: \""
+msgstr "ץȽѤ򳫤ޤ"
+
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: 顼: NetBeansgvim򥹥ȤǤޤ\n"
+
+msgid "Vim: Warning: Output is not to a terminal\n"
+msgstr "Vim: ٹ: üؤνϤǤϤޤ\n"
+
+msgid "Vim: Warning: Input is not from a terminal\n"
+msgstr "Vim: ٹ: üϤǤϤޤ\n"
+
+#. just in case..
+msgid "pre-vimrc command line"
+msgstr "vimrcΥޥɥ饤"
+
+#, c-format
+msgid "E282: Cannot read from \"%s\""
+msgstr "E282: \"%s\"ɹळȤǤޤ"
+
+msgid ""
+"\n"
+"More info with: \"vim -h\"\n"
+msgstr ""
+"\n"
+"ܺ٤ʾ: \"vim -h\"\n"
+
+msgid "[file ..]       edit specified file(s)"
+msgstr "[ե..]    եԽ"
+
+msgid "-               read text from stdin"
+msgstr "-               ɸϤƥȤɹ"
+
+msgid "-t tag          edit file where tag is defined"
+msgstr "-t          줿ȤԽ"
+
+msgid "-q [errorfile]  edit file with first error"
+msgstr "-q [errorfile]  ǽΥ顼Խ"
+
+msgid ""
+"\n"
+"\n"
+"usage:"
+msgstr ""
+"\n"
+"\n"
+"ˡ:"
+
+msgid " vim [arguments] "
+msgstr " vim [] "
+
+msgid ""
+"\n"
+"   or:"
+msgstr ""
+"\n"
+"   ⤷:"
+
+msgid ""
+"\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"羮ʸ̵뤵ʸˤ뤿 / ֤Ƥ"
+
+msgid ""
+"\n"
+"\n"
+"Arguments:\n"
+msgstr ""
+"\n"
+"\n"
+":\n"
+
+msgid "--\t\t\tOnly file names after this"
+msgstr "--\t\t\tΤȤˤϥե̾"
+
+msgid "--literal\t\tDon't expand wildcards"
+msgstr "--literal\t\t磻ɥɤŸʤ"
+
+msgid "-register\t\tRegister this gvim for OLE"
+msgstr "-register\t\tgvimOLEȤϿ"
+
+msgid "-unregister\t\tUnregister gvim for OLE"
+msgstr "-unregister\t\tgvimOLEϿ"
+
+msgid "-g\t\t\tRun using GUI (like \"gvim\")"
+msgstr "-g\t\t\tGUIǵư (\"gvim\" Ʊ)"
+
+msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
+msgstr "-f or  --nofork\tե饦: GUIϤȤforkʤ"
+
+msgid "-v\t\t\tVi mode (like \"vi\")"
+msgstr "-v\t\t\tVi⡼ (\"vi\" Ʊ)"
+
+msgid "-e\t\t\tEx mode (like \"ex\")"
+msgstr "-e\t\t\tEx⡼ (\"ex\" Ʊ)"
+
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tEx⡼"
+
+msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+msgstr "-s\t\t\t(Хå)⡼ (\"ex\" )"
+
+msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
+msgstr "-d\t\t\tʬ⡼ (\"vidiff\" Ʊ)"
+
+msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
+msgstr "-y\t\t\t⡼ (\"evim\" Ʊ, ⡼̵)"
+
+msgid "-R\t\t\tReadonly mode (like \"view\")"
+msgstr "-R\t\t\tɹѥ⡼ (\"view\" Ʊ)"
+
+msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
+msgstr "-Z\t\t\t¥⡼ (\"rvim\" Ʊ)"
+
+msgid "-m\t\t\tModifications (writing files) not allowed"
+msgstr "-m\t\t\tѹ (ե¸) Ǥʤ褦ˤ"
+
+msgid "-M\t\t\tModifications in text not allowed"
+msgstr "-M\t\t\tƥȤԽԤʤʤ褦ˤ"
+
+msgid "-b\t\t\tBinary mode"
+msgstr "-b\t\t\tХʥ⡼"
+
+msgid "-l\t\t\tLisp mode"
+msgstr "-l\t\t\tLisp⡼"
+
+msgid "-C\t\t\tCompatible with Vi: 'compatible'"
+msgstr "-C\t\t\tViߴ⡼: 'compatible'"
+
+msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
+msgstr "-N\t\t\tViߴ⡼: 'nocompatible"
+
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr "-V[N][fname]\t\t [٥ N] [ե̾ fname]"
+
+msgid "-D\t\t\tDebugging mode"
+msgstr "-D\t\t\tǥХå⡼"
+
+msgid "-n\t\t\tNo swap file, use memory only"
+msgstr "-n\t\t\tåץեѤ"
+
+msgid "-r\t\t\tList swap files and exit"
+msgstr "-r\t\t\tåץե󤷽λ"
+
+msgid "-r (with file name)\tRecover crashed session"
+msgstr "-r (ե̾)\tå夷å"
+
+msgid "-L\t\t\tSame as -r"
+msgstr "-L\t\t\t-rƱ"
+
+msgid "-f\t\t\tDon't use newcli to open window"
+msgstr "-f\t\t\tɥ򳫤Τ newcli Ѥʤ"
+
+msgid "-dev <device>\t\tUse <device> for I/O"
+msgstr "-dev <device>\t\tI/O <device> Ѥ"
+
+msgid "-A\t\t\tstart in Arabic mode"
+msgstr "-A\t\t\tӥ⡼ɤǵư"
+
+msgid "-H\t\t\tStart in Hebrew mode"
+msgstr "-H\t\t\tإ֥饤⡼ɤǵư"
+
+msgid "-F\t\t\tStart in Farsi mode"
+msgstr "-F\t\t\tڥ륷⡼ɤǵư"
+
+msgid "-T <terminal>\tSet terminal type to <terminal>"
+msgstr "-T <terminal>\tü <terminal> ꤹ"
+
+msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
+msgstr "-u <vimrc>\t\t.vimrc <vimrc> Ȥ"
+
+msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
+msgstr "-U <gvimrc>\t\t.gvimrc <gvimrc> Ȥ"
+
+msgid "--noplugin\t\tDon't load plugin scripts"
+msgstr "--noplugin\t\tץ饰󥹥ץȤɤʤ"
+
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr "-p[N]\t\tN ĥ֥ڡ򳫤(ά: եˤĤ1)"
+
+msgid "-o[N]\t\tOpen N windows (default: one for each file)"
+msgstr "-o[N]\t\tN ĥɥ򳫤(ά: եˤĤ1)"
+
+msgid "-O[N]\t\tLike -o but split vertically"
+msgstr "-O[N]\t\t-oƱľʬ"
+
+msgid "+\t\t\tStart at end of file"
+msgstr "+\t\t\tեκǸ夫Ϥ"
+
+msgid "+<lnum>\t\tStart at line <lnum>"
+msgstr "+<lnum>\t\t<lnum> ԤϤ"
+
+msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
+msgstr "--cmd <command>\tvimrcɤ <command> ¹Ԥ"
+
+msgid "-c <command>\t\tExecute <command> after loading the first file"
+msgstr "-c <command>\t\tǽΥեɸ <command> ¹Ԥ"
+
+msgid "-S <session>\t\tSource file <session> after loading the first file"
+msgstr "-S <session>\t\tǽΥեɸե <session> "
+
+msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
+msgstr "-s <scriptin>\tե <scriptin> Ρޥ륳ޥɤɹ"
+
+msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
+msgstr "-w <scriptout>\tϤޥɤե <scriptout> ɲä"
+
+msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
+msgstr "-W <scriptout>\tϤޥɤե <scriptout> ¸"
+
+msgid "-x\t\t\tEdit encrypted files"
+msgstr "-x\t\t\tŹ沽줿եԽ"
+
+msgid "-display <display>\tConnect vim to this particular X-server"
+msgstr "-display <display>\tvimꤷ X Ф³"
+
+msgid "-X\t\t\tDo not connect to X server"
+msgstr "-X\t\t\tXФ³ʤ"
+
+msgid "--remote <files>\tEdit <files> in a Vim server if possible"
+msgstr "--remote <files>\tǽʤVimФ <files> Խ"
+
+msgid "--remote-silent <files>  Same, don't complain if there is no server"
+msgstr "--remote-silent <files>  Ʊ, Ф̵ƤٹʸϤʤ"
+
+msgid ""
+"--remote-wait <files>  As --remote but wait for files to have been edited"
+msgstr "--remote-wait <files>\t--remote եԽΤԤ"
+
+msgid ""
+"--remote-wait-silent <files>  Same, don't complain if there is no server"
+msgstr "--remote-wait-silent <files>  Ʊ, Ф̵ƤٹʸϤʤ"
+
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--remote-tab[-wait][-silent] <files>  --remoteǥե1ĤˤĤ1ĤΥ"
+"ڡ򳫤"
+
+msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
+msgstr "--remote-send <keys>\tVimФ <keys> ƽλ"
+
+msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
+msgstr "--remote-expr <expr>\tФ <expr> ¹ԤƷ̤ɽ"
+
+msgid "--serverlist\t\tList available Vim server names and exit"
+msgstr "--serverlist\t\tVim̾ΰɽƽλ"
+
+msgid "--servername <name>\tSend to/become the Vim server <name>"
+msgstr "--servername <name>\tVim <name> /̾ꤹ"
+
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <file>\tưˤä֤ξܺ٤ <file> ؽϤ"
+
+msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
+msgstr "-i <viminfo>\t\t.viminfo <viminfo> Ȥ"
+
+msgid "-h  or  --help\tPrint Help (this message) and exit"
+msgstr "-h or  --help\tإ(Υå)ɽλ"
+
+msgid "--version\t\tPrint version information and exit"
+msgstr "--version\t\tСɽλ"
+
+msgid ""
+"\n"
+"Arguments recognised by gvim (Motif version):\n"
+msgstr ""
+"\n"
+"gvimˤäƲᤵ(MotifС):\n"
+
+msgid ""
+"\n"
+"Arguments recognised by gvim (neXtaw version):\n"
+msgstr ""
+"\n"
+"gvimˤäƲᤵ(neXtawС):\n"
+
+msgid ""
+"\n"
+"Arguments recognised by gvim (Athena version):\n"
+msgstr ""
+"\n"
+"gvimˤäƲᤵ(AthenaС):\n"
+
+msgid "-display <display>\tRun vim on <display>"
+msgstr "-display <display>\t<display> vim¹Ԥ"
+
+msgid "-iconic\t\tStart vim iconified"
+msgstr "-iconic\t\tǾ֤vimư"
+
+msgid "-background <color>\tUse <color> for the background (also: -bg)"
+msgstr "-background <color>\tطʿ <color> Ȥ(Ʊ: -bg)"
+
+msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
+msgstr "-foreground <color>\tʿ <color> Ȥ(Ʊ: -fg)"
+
+msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
+msgstr "-font <font>\t\tƥɽ <font> Ȥ(Ʊ: -fn)"
+
+msgid "-boldfont <font>\tUse <font> for bold text"
+msgstr "-boldfont <font>\t <font> Ȥ"
+
+msgid "-italicfont <font>\tUse <font> for italic text"
+msgstr "-italicfont <for>\tλ <font> Ȥ"
+
+msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
+msgstr "-geometry <geom>\t֤ <geom> Ȥ(Ʊ: -geom)"
+
+msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
+msgstr "-borderwidth <width>\t <width> ˤ(Ʊ: -bw)"
+
+msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
+msgstr ""
+"-scrollbarwidth <width>  С <width> ˤ(Ʊ: -sw)"
+
+msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
+msgstr "-menuheight <height>\t˥塼Сι⤵ <height> ˤ(Ʊ: -mh)"
+
+msgid "-reverse\t\tUse reverse video (also: -rv)"
+msgstr "-reverse\t\tȿžѤ(Ʊ: -rv)"
+
+msgid "+reverse\t\tDon't use reverse video (also: +rv)"
+msgstr "+reverse\t\tȿžѤʤ(Ʊ: +rv)"
+
+msgid "-xrm <resource>\tSet the specified resource"
+msgstr "-xrm <resource>\tΥ꥽Ѥ"
+
+msgid ""
+"\n"
+"Arguments recognised by gvim (GTK+ version):\n"
+msgstr ""
+"\n"
+"gvimˤäƲᤵ(GTK+С):\n"
+
+msgid "-display <display>\tRun vim on <display> (also: --display)"
+msgstr "-display <display>\t<display> vim¹Ԥ(Ʊ: --display)"
+
+msgid "--role <role>\tSet a unique role to identify the main window"
+msgstr "--role <role>\tᥤ󥦥ɥ̤դ(role)ꤹ"
+
+msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+msgstr "--socketid <xid>\tۤʤGTK widgetVim򳫤"
+
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tɥIDɸϤ˽Ϥ"
+
+msgid "-P <parent title>\tOpen Vim inside parent application"
+msgstr "-P <ƤΥȥ>\tVimƥץꥱǵư"
+
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\tۤʤWin32 widgetVim򳫤"
+
+msgid "No display"
+msgstr "ǥץ쥤Ĥޤ"
+
+#. Failed to send, abort.
+msgid ": Send failed.\n"
+msgstr ": ˼Ԥޤ.\n"
+
+#. Let vim start normally.
+msgid ": Send failed. Trying to execute locally\n"
+msgstr ": ˼Ԥޤ. Ǥμ¹ԤߤƤޤ\n"
+
+#, c-format
+msgid "%d of %d edited"
+msgstr "%d  (%d ) ΥեԽޤ"
+
+msgid "No display: Send expression failed.\n"
+msgstr "ǥץ쥤ޤ: ˼Ԥޤ.\n"
+
+msgid ": Send expression failed.\n"
+msgstr ": ˼Ԥޤ.\n"
+
+msgid "No marks set"
+msgstr "ޡꤵƤޤ"
+
+#, c-format
+msgid "E283: No marks matching \"%s\""
+msgstr "E283: \"%s\" ˳ޡޤ"
+
+#. Highlight title
+msgid ""
+"\n"
+"mark line  col file/text"
+msgstr ""
+"\n"
+"mark       ե/ƥ"
+
+#. Highlight title
+msgid ""
+"\n"
+" jump line  col file/text"
+msgstr ""
+"\n"
+" jump       ե/ƥ"
+
+#. Highlight title
+msgid ""
+"\n"
+"change line  col text"
+msgstr ""
+"\n"
+"ѹ         ƥ"
+
+msgid ""
+"\n"
+"# File marks:\n"
+msgstr ""
+"\n"
+"# եޡ:\n"
+
+#. Write the jumplist with -'
+msgid ""
+"\n"
+"# Jumplist (newest first):\n"
+msgstr ""
+"\n"
+"# ץꥹ (Τ):\n"
+
+msgid ""
+"\n"
+"# History of marks within files (newest to oldest):\n"
+msgstr ""
+"\n"
+"# եޡ (ΤŤ):\n"
+
+msgid "Missing '>'"
+msgstr "'>' Ĥޤ"
+
+msgid "E543: Not a valid codepage"
+msgstr "E543: ̵ʥɥڡǤ"
+
+msgid "E284: Cannot set IC values"
+msgstr "E284: ICͤǤޤ"
+
+msgid "E285: Failed to create input context"
+msgstr "E285: ץåȥƥȤκ˼Ԥޤ"
+
+msgid "E286: Failed to open input method"
+msgstr "E286: ץåȥ᥽åɤΥץ˼Ԥޤ"
+
+msgid "E287: Warning: Could not set destroy callback to IM"
+msgstr "E287: ٹ: IM˲ХåǤޤǤ"
+
+msgid "E288: input method doesn't support any style"
+msgstr "E288: ץåȥ᥽åɤϤɤʥ⥵ݡȤޤ"
+
+msgid "E289: input method doesn't support my preedit type"
+msgstr "E289: ץåȥ᥽åɤ my preedit type 򥵥ݡȤޤ"
+
+msgid "E293: block was not locked"
+msgstr "E293: ֥ååƤޤ"
+
+msgid "E294: Seek error in swap file read"
+msgstr "E294: åץեɹ˥顼Ǥ"
+
+msgid "E295: Read error in swap file"
+msgstr "E295: åץեɹߥ顼Ǥ"
+
+msgid "E296: Seek error in swap file write"
+msgstr "E296: åץե߻˥顼Ǥ"
+
+msgid "E297: Write error in swap file"
+msgstr "E297: åץեνߥ顼Ǥ"
+
+msgid "E300: Swap file already exists (symlink attack?)"
+msgstr "E300: åץե뤬¸ߤޤ (symlinkˤ빶?)"
+
+msgid "E298: Didn't get block nr 0?"
+msgstr "E298: ֥å 0 Ǥޤ?"
+
+msgid "E298: Didn't get block nr 1?"
+msgstr "E298: ֥å 1 Ǥޤ?"
+
+msgid "E298: Didn't get block nr 2?"
+msgstr "E298: ֥å 2 Ǥޤ?"
+
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: åץեΰŹ򹹿˥顼ȯޤ"
+
+#. could not (re)open the swap file, what can we do????
+msgid "E301: Oops, lost the swap file!!!"
+msgstr "E301: ä, åץե뤬ޤ!!!"
+
+msgid "E302: Could not rename swap file"
+msgstr "E302: åץե̾Ѥޤ"
+
+#, c-format
+msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
+msgstr "E303: \"%s\" Υåץե򳫤ʤΤǥꥫХԲǽǤ"
+
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr "E304: ml_upd_block0(): ֥å 0 ǤޤǤ??"
+
+#, c-format
+msgid "E305: No swap file found for %s"
+msgstr "E305: %s ˤϥåץե뤬Ĥޤ"
+
+msgid "Enter number of swap file to use (0 to quit): "
+msgstr "Ѥ륹åץեֹϤƤ(0 ǽλ): "
+
+#, c-format
+msgid "E306: Cannot open %s"
+msgstr "E306: %s 򳫤ޤ"
+
+msgid "Unable to read block 0 from "
+msgstr "֥å 0 ɹޤ "
+
+msgid ""
+"\n"
+"Maybe no changes were made or Vim did not update the swap file."
+msgstr ""
+"\n"
+"餯ѹƤʤVimåץե򹹿Ƥޤ."
+
+msgid " cannot be used with this version of Vim.\n"
+msgstr " VimΤΥСǤϻѤǤޤ.\n"
+
+msgid "Use Vim version 3.0.\n"
+msgstr "VimΥС3.0ѤƤ.\n"
+
+#, c-format
+msgid "E307: %s does not look like a Vim swap file"
+msgstr "E307: %s VimΥåץեǤϤʤ褦Ǥ"
+
+msgid " cannot be used on this computer.\n"
+msgstr " Υԥ塼ǤϻѤǤޤ.\n"
+
+msgid "The file was created on "
+msgstr "ΥեϼξǺޤ "
+
+msgid ""
+",\n"
+"or the file has been damaged."
+msgstr ""
+",\n"
+"⤷ϥե뤬»Ƥޤ."
+
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %s ϤΥСVimǥݡȤƤʤǰŹ沽Ƥޤ"
+
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " »Ƥޤ (ڡǾͤ򲼲äƤޤ).\n"
+
+#, c-format
+msgid "Using swap file \"%s\""
+msgstr "åץե \"%s\" "
+
+#, c-format
+msgid "Original file \"%s\""
+msgstr "ܥե \"%s\""
+
+msgid "E308: Warning: Original file may have been changed"
+msgstr "E308: ٹ: ܥե뤬ѹƤޤ"
+
+#, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "åץեϰŹ沽Ƥޤ: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"Ź業ϤȤ˥ƥȥե¸Ƥʤ,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"Ź業ϤƤ."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"Ź業ѤȤ˥ƥȥե¸, ƥȥե"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"åץեƱŹ業Ȥenter򲡤Ƥ."
+
+#, c-format
+msgid "E309: Unable to read block 1 from %s"
+msgstr "E309: %s ֥å 1 ɹޤ"
+
+msgid "???MANY LINES MISSING"
+msgstr "???¿ιԤƤޤ"
+
+msgid "???LINE COUNT WRONG"
+msgstr "???ԿְäƤޤ"
+
+msgid "???EMPTY BLOCK"
+msgstr "???֥åǤ"
+
+msgid "???LINES MISSING"
+msgstr "???ԤƤޤ"
+
+#, c-format
+msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
+msgstr "E310: ֥å 1 IDְäƤޤ(%s .swpեǤʤ?)"
+
+msgid "???BLOCK MISSING"
+msgstr "???֥åޤ"
+
+msgid "??? from here until ???END lines may be messed up"
+msgstr "???  ???END ޤǤιԤ˲Ƥ褦Ǥ"
+
+msgid "??? from here until ???END lines may have been inserted/deleted"
+msgstr "???  ???END ޤǤιԤ줿褦Ǥ"
+
+msgid "???END"
+msgstr "???END"
+
+msgid "E311: Recovery Interrupted"
+msgstr "E311: ꥫХ꤬ޤޤ"
+
+msgid ""
+"E312: Errors detected while recovering; look for lines starting with ???"
+msgstr ""
+"E312: ꥫХκ˥顼Фޤ; ???ǻϤޤԤ򻲾ȤƤ"
+
+msgid "See \":help E312\" for more information."
+msgstr "ܺ٤ \":help E312\" 򻲾ȤƤ"
+
+msgid "Recovery completed. You should check if everything is OK."
+msgstr "ꥫХ꤬λޤ. ƤåƤ."
+
+msgid ""
+"\n"
+"(You might want to write out this file under another name\n"
+msgstr ""
+"\n"
+"(ѹå뤿, Υե̤̾¸\n"
+
+msgid "and run diff with the original file to check for changes)"
+msgstr "ܥեȤ diff ¹ԤɤǤ礦)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "λ. ХåեƤϥեƱˤʤޤ."
+
+msgid ""
+"\n"
+"You may want to delete the .swp file now.\n"
+"\n"
+msgstr ""
+"\n"
+"줫.swpեƤ\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "åץե뤫Ź業ƥȥե˻Ȥޤ.\n"
+
+#. use msg() to start the scrolling properly
+msgid "Swap files found:"
+msgstr "åץե뤬ʣĤޤ:"
+
+msgid "   In current directory:\n"
+msgstr "   ߤΥǥ쥯ȥ:\n"
+
+msgid "   Using specified name:\n"
+msgstr "   ̾:\n"
+
+msgid "   In directory "
+msgstr "   ǥ쥯ȥ "
+
+msgid "      -- none --\n"
+msgstr "      -- ʤ --\n"
+
+msgid "          owned by: "
+msgstr "            ͭ: "
+
+msgid "   dated: "
+msgstr "   : "
+
+msgid "             dated: "
+msgstr "             : "
+
+msgid "         [from Vim version 3.0]"
+msgstr "         [from Vim version 3.0]"
+
+msgid "         [does not look like a Vim swap file]"
+msgstr "         [VimΥåץեǤϤʤ褦Ǥ]"
+
+msgid "         file name: "
+msgstr "        ե̾: "
+
+msgid ""
+"\n"
+"          modified: "
+msgstr ""
+"\n"
+"          ѹ: "
+
+msgid "YES"
+msgstr ""
+
+msgid "no"
+msgstr "ʤ"
+
+msgid ""
+"\n"
+"         user name: "
+msgstr ""
+"\n"
+"          桼̾: "
+
+msgid "   host name: "
+msgstr "   ۥ̾: "
+
+msgid ""
+"\n"
+"         host name: "
+msgstr ""
+"\n"
+"          ۥ̾: "
+
+msgid ""
+"\n"
+"        process ID: "
+msgstr ""
+"\n"
+"        ץID: "
+
+msgid " (still running)"
+msgstr " (ޤ¹)"
+
+msgid ""
+"\n"
+"         [not usable with this version of Vim]"
+msgstr ""
+"\n"
+"         [VimСǤϻѤǤޤ]"
+
+msgid ""
+"\n"
+"         [not usable on this computer]"
+msgstr ""
+"\n"
+"         [Υԥ塼ǤϻѤǤޤ]"
+
+msgid "         [cannot be read]"
+msgstr "         [ɹޤ]"
+
+msgid "         [cannot be opened]"
+msgstr "         [ޤ]"
+
+msgid "E313: Cannot preserve, there is no swap file"
+msgstr "E313: åץե뤬̵ΤǰݻǤޤ"
+
+msgid "File preserved"
+msgstr "ե뤬ݻޤ"
+
+msgid "E314: Preserve failed"
+msgstr "E314: ݻ˼Ԥޤ"
+
+#, c-format
+msgid "E315: ml_get: invalid lnum: %ld"
+msgstr "E315: ml_get: ̵lnumǤ: %ld"
+
+#, c-format
+msgid "E316: ml_get: cannot find line %ld"
+msgstr "E316: ml_get:  %ld 򸫤Ĥޤ"
+
+msgid "E317: pointer block id wrong 3"
+msgstr "E317: ݥ󥿥֥åIDְäƤޤ 3"
+
+msgid "stack_idx should be 0"
+msgstr "stack_idx  0 Ǥ٤Ǥ"
+
+msgid "E318: Updated too many blocks?"
+msgstr "E318: 줿֥å¿᤮뤫?"
+
+msgid "E317: pointer block id wrong 4"
+msgstr "E317: ݥ󥿥֥åIDְäƤޤ 4"
+
+msgid "deleted block 1?"
+msgstr "֥å 1 Ͼä줿?"
+
+#, c-format
+msgid "E320: Cannot find line %ld"
+msgstr "E320:  %ld Ĥޤ"
+
+msgid "E317: pointer block id wrong"
+msgstr "E317: ݥ󥿥֥åIDְäƤޤ"
+
+msgid "pe_line_count is zero"
+msgstr "pe_line_count Ǥ"
+
+#, c-format
+msgid "E322: line number out of range: %ld past the end"
+msgstr "E322: ֹ椬ϰϳǤ: %ld ĶƤޤ"
+
+#, c-format
+msgid "E323: line count wrong in block %ld"
+msgstr "E323: ֥å %ld ιԥȤְäƤޤ"
+
+msgid "Stack size increases"
+msgstr "åޤ"
+
+msgid "E317: pointer block id wrong 2"
+msgstr "E317: ݥ󥿥֥åIDְäƤޤ 2"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: \"%s\" Υܥå󥯤롼פˤʤäƤޤ"
+
+msgid "E325: ATTENTION"
+msgstr "E325: "
+
+msgid ""
+"\n"
+"Found a swap file by the name \""
+msgstr ""
+"\n"
+"̾ǥåץե򸫤Ĥޤ \""
+
+msgid "While opening file \""
+msgstr "Υե򳫤Ƥ \""
+
+msgid "      NEWER than swap file!\n"
+msgstr "      åץե⿷Ǥ!\n"
+
+#. Some of these messages are long to allow translation to
+#. * other languages.
+msgid ""
+"\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
+msgstr ""
+"\n"
+"(1) ̤ΥץबƱեԽƤ뤫⤷ޤ.\n"
+"    ξˤ, ѹ򤷤ݤ˺ǽŪ, Ʊեΰۤʤ\n"
+"    2ĤΥ󥹥󥹤ǤƤޤȤդƤ."
+
+msgid "  Quit, or continue with caution.\n"
+msgstr "  λ뤫, դʤ³Ƥ.\n"
+
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) ΥեԽå󤬥å夷.\n"
+
+msgid "    If this is the case, use \":recover\" or \"vim -r "
+msgstr "    ξˤ \":recover\"  \"vim -r "
+
+msgid ""
+"\"\n"
+"    to recover the changes (see \":help recovery\").\n"
+msgstr ""
+"\"\n"
+"    ѤѹꥫСޤ(\":help recovery\" 򻲾).\n"
+
+msgid "    If you did this already, delete the swap file \""
+msgstr "    ˤԤʤäΤʤ, åץե \""
+
+msgid ""
+"\"\n"
+"    to avoid this message.\n"
+msgstr ""
+"\"\n"
+"    äФΥåǤޤ.\n"
+
+msgid "Swap file \""
+msgstr "åץե \""
+
+msgid "\" already exists!"
+msgstr "\" ˤޤ!"
+
+msgid "VIM - ATTENTION"
+msgstr "VIM - "
+
+msgid "Swap file already exists!"
+msgstr "åץե뤬¸ߤޤ!"
+
+msgid ""
+"&Open Read-Only\n"
+"&Edit anyway\n"
+"&Recover\n"
+"&Quit\n"
+"&Abort"
+msgstr ""
+"ɹѤǳ(&O)\n"
+"ȤˤԽ(&E)\n"
+"褵(&R)\n"
+"λ(&Q)\n"
+"ߤ(&A)"
+
+msgid ""
+"&Open Read-Only\n"
+"&Edit anyway\n"
+"&Recover\n"
+"&Delete it\n"
+"&Quit\n"
+"&Abort"
+msgstr ""
+"ɹѤǳ(&O)\n"
+"ȤˤԽ(&E)\n"
+"褵(&R)\n"
+"(&D)\n"
+"λ(&Q)\n"
+"ߤ(&A)"
+
+msgid "E326: Too many swap files found"
+msgstr "E326: åץե뤬¿Ĥޤ"
+
+msgid "E327: Part of menu-item path is not sub-menu"
+msgstr "E327: ˥塼ƥΥѥʬ֥˥塼ǤϤޤ"
+
+msgid "E328: Menu only exists in another mode"
+msgstr "E328: ˥塼¾Υ⡼ɤˤޤ"
+
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: \"%s\" Ȥ˥塼Ϥޤ"
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: ˥塼̾Ǥ"
+
+msgid "E330: Menu path must not lead to a sub-menu"
+msgstr "E330: ˥塼ѥϥ֥˥塼٤ǤϤޤ"
+
+msgid "E331: Must not add menu items directly to menu bar"
+msgstr "E331: ˥塼Сˤľܥ˥塼ƥɲäǤޤ"
+
+msgid "E332: Separator cannot be part of a menu path"
+msgstr "E332: ڤϥ˥塼ѥΰǤϤޤ"
+
+#. Now we have found the matching menu, and we list the mappings
+#. Highlight title
+msgid ""
+"\n"
+"--- Menus ---"
+msgstr ""
+"\n"
+"--- ˥塼 ---"
+
+msgid "Tear off this menu"
+msgstr "Υ˥塼ڤ"
+
+msgid "E333: Menu path must lead to a menu item"
+msgstr "E333: ˥塼ѥϥ˥塼ƥʤФޤ"
+
+#, c-format
+msgid "E334: Menu not found: %s"
+msgstr "E334: ˥塼Ĥޤ: %s"
+
+#, c-format
+msgid "E335: Menu not defined for %s mode"
+msgstr "E335: %s ˤϥ˥塼Ƥޤ"
+
+msgid "E336: Menu path must lead to a sub-menu"
+msgstr "E336: ˥塼ѥϥ֥˥塼ʤФޤ"
+
+msgid "E337: Menu not found - check menu names"
+msgstr "E337: ˥塼Ĥޤ - ˥塼̾ǧƤ"
+
+#, c-format
+msgid "Error detected while processing %s:"
+msgstr "%s ν˥顼Фޤ:"
+
+#, c-format
+msgid "line %4ld:"
+msgstr " %4ld:"
+
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr "E354: ̵ʥ쥸̾: '%s'"
+
+msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
+msgstr "ܸå/ƽ: ¼ Ϻ <koron.kaoriya@gmail.com>"
+
+msgid "Interrupt: "
+msgstr ": "
+
+msgid "Press ENTER or type command to continue"
+msgstr "³ˤENTER򲡤ޥɤϤƤ"
+
+#, c-format
+msgid "%s line %ld"
+msgstr "%s  %ld"
+
+msgid "-- More --"
+msgstr "-- ³ --"
+
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: /ڡ/ , b/u/k: , q: λ "
+
+msgid "Question"
+msgstr ""
+
+msgid ""
+"&Yes\n"
+"&No"
+msgstr ""
+"Ϥ(&Y)\n"
+"(&N)"
+
+msgid ""
+"&Yes\n"
+"&No\n"
+"Save &All\n"
+"&Discard All\n"
+"&Cancel"
+msgstr ""
+"Ϥ(&Y)\n"
+"(&N)\n"
+"¸(&A)\n"
+"(&D)\n"
+"󥻥(&C)"
+
+msgid "Select Directory dialog"
+msgstr "ǥ쥯ȥ"
+
+msgid "Save File dialog"
+msgstr "ե¸"
+
+msgid "Open File dialog"
+msgstr "եɹ"
+
+#. TODO: non-GUI file selector here
+msgid "E338: Sorry, no file browser in console mode"
+msgstr "E338: 󥽡⡼ɤǤϥե֥饦Ȥޤ, ʤ"
+
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: printf() ΰԽʬǤ"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: printf() ΰˤưԤƤޤ"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: printf() ΰ¿᤮ޤ"
+
+msgid "W10: Warning: Changing a readonly file"
+msgstr "W10: ٹ: ɹѥեѹޤ"
+
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr ""
+"ֹ<Enter>Ϥ뤫ޥǥåƤ (ǥ󥻥): "
+
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "ֹ<Enter>ϤƤ (ǥ󥻥): "
+
+msgid "1 more line"
+msgstr "1  ɲäޤ"
+
+msgid "1 line less"
+msgstr "1  ޤ"
+
+#, c-format
+msgid "%ld more lines"
+msgstr "%ld  ɲäޤ"
+
+#, c-format
+msgid "%ld fewer lines"
+msgstr "%ld  ޤ"
+
+msgid " (Interrupted)"
+msgstr " (ޤޤ)"
+
+msgid "Beep!"
+msgstr "ӡ!"
+
+msgid "Vim: preserving files...\n"
+msgstr "Vim: ե¸...\n"
+
+#. close all memfiles, without deleting
+msgid "Vim: Finished.\n"
+msgstr "Vim: λޤ.\n"
+
+msgid "ERROR: "
+msgstr "顼: "
+
+#, c-format
+msgid ""
+"\n"
+"[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
+msgstr ""
+"\n"
+"[(Х)] - %lu-%lu,  %lu, ԡ %lu\n"
+
+#, c-format
+msgid ""
+"[calls] total re/malloc()'s %lu, total free()'s %lu\n"
+"\n"
+msgstr ""
+"[ƽ]  re/malloc()  %lu,  free()  %lu\n"
+"\n"
+
+msgid "E340: Line is becoming too long"
+msgstr "E340: ԤĹʤ᤮ޤ"
+
+#, c-format
+msgid "E341: Internal error: lalloc(%ld, )"
+msgstr "E341: 顼: lalloc(%ld,)"
+
+#, c-format
+msgid "E342: Out of memory!  (allocating %lu bytes)"
+msgstr "E342: ꤬­ޤ!  (%lu ХȤ׵)"
+
+#, c-format
+msgid "Calling shell to execute: \"%s\""
+msgstr "¹ԤΤ˥ƽФ: \"%s\""
+
+msgid "E545: Missing colon"
+msgstr "E545: 󤬤ޤ"
+
+msgid "E546: Illegal mode"
+msgstr "E546: ʥ⡼ɤǤ"
+
+msgid "E547: Illegal mouseshape"
+msgstr "E547:  'mouseshape' Ǥ"
+
+msgid "E548: digit expected"
+msgstr "E548: ͤɬפǤ"
+
+msgid "E549: Illegal percentage"
+msgstr "E549: ʥѡơǤ"
+
+msgid "Enter encryption key: "
+msgstr "Ź沽ѤΥϤƤ: "
+
+msgid "Enter same key again: "
+msgstr "⤦ƱϤƤ: "
+
+msgid "Keys don't match!"
+msgstr "פޤ"
+
+msgid "E854: path too long for completion"
+msgstr "E854: ѥĹ᤮䴰Ǥޤ"
+
+#, c-format
+msgid ""
+"E343: Invalid path: '**[number]' must be at the end of the path or be "
+"followed by '%s'."
+msgstr ""
+"E343: ̵ʥѥǤ: '**[]' pathκǸ夫 '%s' ³ƤʤȤޤ"
+"."
+
+#, c-format
+msgid "E344: Can't find directory \"%s\" in cdpath"
+msgstr "E344: cdpathˤ \"%s\" Ȥե뤬ޤ"
+
+#, c-format
+msgid "E345: Can't find file \"%s\" in path"
+msgstr "E345: pathˤ \"%s\" Ȥե뤬ޤ"
+
+#, c-format
+msgid "E346: No more directory \"%s\" found in cdpath"
+msgstr "E346: cdpathˤϤʾ \"%s\" Ȥե뤬ޤ"
+
+#, c-format
+msgid "E347: No more file \"%s\" found in path"
+msgstr "E347: ѥˤϤʾ \"%s\" Ȥե뤬ޤ"
+
+msgid "Cannot connect to Netbeans #2"
+msgstr "Netbeans #2 ³Ǥޤ"
+
+msgid "Cannot connect to Netbeans"
+msgstr "Netbeans ³Ǥޤ"
+
+#, c-format
+msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
+msgstr ""
+"E668: NetBeans³եΥ⡼ɤ꤬ޤ: \"%s\""
+
+msgid "read from Netbeans socket"
+msgstr "Netbeans ΥåȤɹ"
+
+#, c-format
+msgid "E658: NetBeans connection lost for buffer %ld"
+msgstr "E658: Хåե %ld  NetBeans ³ޤ"
+
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeansϤGUIˤбƤޤ"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: NetBeansϴ³Ƥޤ"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s ɹѤǤ (ˤ ! ɲ)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: ΰ֤ˤϼ̻Ҥޤ"
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: 'operatorfunc' ץ󤬶Ǥ"
+
+msgid "E775: Eval feature not available"
+msgstr "E775: ɾǽ̵ˤʤäƤޤ"
+
+msgid "Warning: terminal cannot highlight"
+msgstr "ٹ: ѤƤüϥϥ饤ȤǤޤ"
+
+msgid "E348: No string under cursor"
+msgstr "E348: ΰ֤ˤʸ󤬤ޤ"
+
+msgid "E352: Cannot erase folds with current 'foldmethod'"
+msgstr "E352: ߤ 'foldmethod' Ǥ޾ߤõǤޤ"
+
+msgid "E664: changelist is empty"
+msgstr "E664: ѹꥹȤǤ"
+
+msgid "E662: At start of changelist"
+msgstr "E662: ѹꥹȤƬ"
+
+msgid "E663: At end of changelist"
+msgstr "E663: ѹꥹȤ"
+
+msgid "Type  :quit<Enter>  to exit Vim"
+msgstr "Vimλˤ :quit<Enter> ϤƤ"
+
+#, c-format
+msgid "1 line %sed 1 time"
+msgstr "1 Ԥ %s  1 ޤ"
+
+#, c-format
+msgid "1 line %sed %d times"
+msgstr "1 Ԥ %s  %d ޤ"
+
+#, c-format
+msgid "%ld lines %sed 1 time"
+msgstr "%ld Ԥ %s  1 ޤ"
+
+#, c-format
+msgid "%ld lines %sed %d times"
+msgstr "%ld Ԥ %s  %d ޤ"
+
+#, c-format
+msgid "%ld lines to indent... "
+msgstr "%ld ԤǥȤޤ... "
+
+msgid "1 line indented "
+msgstr "1 Ԥ򥤥ǥȤޤ "
+
+#, c-format
+msgid "%ld lines indented "
+msgstr "%ld Ԥ򥤥ǥȤޤ "
+
+msgid "E748: No previously used register"
+msgstr "E748: ޤ쥸ѤƤޤ"
+
+#. must display the prompt
+msgid "cannot yank; delete anyway"
+msgstr "󥯤Ǥޤ; Ȥˤõ"
+
+msgid "1 line changed"
+msgstr "1 Ԥѹޤ"
+
+#, c-format
+msgid "%ld lines changed"
+msgstr "%ld Ԥѹޤ"
+
+#, c-format
+msgid "freeing %ld lines"
+msgstr "%ld Ԥ"
+
+msgid "block of 1 line yanked"
+msgstr "1 ԤΥ֥å󥯤ޤ"
+
+msgid "1 line yanked"
+msgstr "1 Ԥ󥯤ޤ"
+
+#, c-format
+msgid "block of %ld lines yanked"
+msgstr "%ld ԤΥ֥å󥯤ޤ"
+
+#, c-format
+msgid "%ld lines yanked"
+msgstr "%ld Ԥ󥯤ޤ"
+
+#, c-format
+msgid "E353: Nothing in register %s"
+msgstr "E353: 쥸 %s ˤϲ⤢ޤ"
+
+#. Highlight title
+msgid ""
+"\n"
+"--- Registers ---"
+msgstr ""
+"\n"
+"--- 쥸 ---"
+
+msgid "Illegal register name"
+msgstr "ʥ쥸̾"
+
+msgid ""
+"\n"
+"# Registers:\n"
+msgstr ""
+"\n"
+"# 쥸:\n"
+
+#, c-format
+msgid "E574: Unknown register type %d"
+msgstr "E574: ̤ΤΥ쥸 %d Ǥ"
+
+#, c-format
+msgid "%ld Cols; "
+msgstr "%ld ; "
+
+#, c-format
+msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
+msgstr " %s%ld / %ld ; %ld / %ld ñ; %ld / %ld Х"
+
+#, c-format
+msgid ""
+"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+"Bytes"
+msgstr " %s%ld / %ld ; %ld / %ld ñ; %ld / %ld ʸ; %ld / %ld Х"
+
+#, c-format
+msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+msgstr " %s / %s;  %ld of %ld; ñ %ld / %ld; Х %ld / %ld"
+
+#, c-format
+msgid ""
+"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+"%ld"
+msgstr ""
+" %s / %s;  %ld / %ld; ñ %ld / %ld; ʸ %ld / %ld; Х %ld of %ld"
+
+#, c-format
+msgid "(+%ld for BOM)"
+msgstr "(+%ld for BOM)"
+
+msgid "%<%f%h%m%=Page %N"
+msgstr "%<%f%h%m%=%N ڡ"
+
+msgid "Thanks for flying Vim"
+msgstr "Vim ȤäƤƤ꤬Ȥ"
+
+msgid "E518: Unknown option"
+msgstr "E518: ̤ΤΥץǤ"
+
+msgid "E519: Option not supported"
+msgstr "E519: ץϥݡȤƤޤ"
+
+msgid "E520: Not allowed in a modeline"
+msgstr "E520: modeline ǤϵĤޤ"
+
+msgid "E846: Key code not set"
+msgstr "E846: ɤꤵƤޤ"
+
+msgid "E521: Number required after ="
+msgstr "E521: = θˤϿɬפǤ"
+
+msgid "E522: Not found in termcap"
+msgstr "E522: termcap ˸Ĥޤ"
+
+#, c-format
+msgid "E539: Illegal character <%s>"
+msgstr "E539: ʸǤ <%s>"
+
+msgid "E529: Cannot set 'term' to empty string"
+msgstr "E529: 'term' ˤ϶ʸǤޤ"
+
+msgid "E530: Cannot change term in GUI"
+msgstr "E530: GUIǤ 'term' ѹǤޤ"
+
+msgid "E531: Use \":gui\" to start the GUI"
+msgstr "E531: GUI򥹥Ȥˤ \":gui\" ѤƤ"
+
+msgid "E589: 'backupext' and 'patchmode' are equal"
+msgstr "E589: 'backupext'  'patchmode' ƱǤ"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars'̷ͤ⤬ޤ"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars'̷ͤ⤬ޤ"
+
+msgid "E617: Cannot be changed in the GTK+ 2 GUI"
+msgstr "E617: GTK+2 GUIǤѹǤޤ"
+
+msgid "E524: Missing colon"
+msgstr "E524: 󤬤ޤ"
+
+msgid "E525: Zero length string"
+msgstr "E525: ʸĹǤ"
+
+#, c-format
+msgid "E526: Missing number after <%s>"
+msgstr "E526: <%s> θ˿ޤ"
+
+msgid "E527: Missing comma"
+msgstr "E527: ޤޤ"
+
+msgid "E528: Must specify a ' value"
+msgstr "E528: ' ͤꤷʤФʤޤ"
+
+msgid "E595: contains unprintable or wide character"
+msgstr "E595: ɽǤʤʸ磻ʸޤǤޤ"
+
+msgid "E596: Invalid font(s)"
+msgstr "E596: ̵ʥեȤǤ"
+
+msgid "E597: can't select fontset"
+msgstr "E597: եȥåȤǤޤ"
+
+msgid "E598: Invalid fontset"
+msgstr "E598: ̵ʥեȥåȤǤ"
+
+msgid "E533: can't select wide font"
+msgstr "E533: 磻ɥեȤǤޤ"
+
+msgid "E534: Invalid wide font"
+msgstr "E534: ̵ʥ磻ɥեȤǤ"
+
+#, c-format
+msgid "E535: Illegal character after <%c>"
+msgstr "E535: <%c> θʸޤ"
+
+msgid "E536: comma required"
+msgstr "E536: ޤɬפǤ"
+
+#, c-format
+msgid "E537: 'commentstring' must be empty or contain %s"
+msgstr "E537: 'commentstring' ϶Ǥ뤫 %s ޤɬפޤ"
+
+msgid "E538: No mouse support"
+msgstr "E538: ޥϥݡȤޤ"
+
+msgid "E540: Unclosed expression sequence"
+msgstr "E540: λƤޤ"
+
+msgid "E541: too many items"
+msgstr "E541: Ǥ¿᤮ޤ"
+
+msgid "E542: unbalanced groups"
+msgstr "E542: 롼פ礤ޤ"
+
+msgid "E590: A preview window already exists"
+msgstr "E590: ץӥ塼ɥ¸ߤޤ"
+
+msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
+msgstr ""
+"W17: ӥʸˤUTF-8ɬפʤΤ, ':set encoding=utf-8' Ƥ"
+
+#, c-format
+msgid "E593: Need at least %d lines"
+msgstr "E593:  %d ιԿɬפǤ"
+
+#, c-format
+msgid "E594: Need at least %d columns"
+msgstr "E594:  %d ΥɬפǤ"
+
+#, c-format
+msgid "E355: Unknown option: %s"
+msgstr "E355: ̤ΤΥץǤ: %s"
+
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: ɬפǤ: &%s = '%s'"
+
+msgid ""
+"\n"
+"--- Terminal codes ---"
+msgstr ""
+"\n"
+"--- ü ---"
+
+msgid ""
+"\n"
+"--- Global option values ---"
+msgstr ""
+"\n"
+"--- Х륪ץ ---"
+
+msgid ""
+"\n"
+"--- Local option values ---"
+msgstr ""
+"\n"
+"--- 륪ץ ---"
+
+msgid ""
+"\n"
+"--- Options ---"
+msgstr ""
+"\n"
+"--- ץ ---"
+
+msgid "E356: get_varp ERROR"
+msgstr "E356: get_varp 顼"
+
+#, c-format
+msgid "E357: 'langmap': Matching character missing for %s"
+msgstr "E357: 'langmap': %s бʸޤ"
+
+#, c-format
+msgid "E358: 'langmap': Extra characters after semicolon: %s"
+msgstr "E358: 'langmap': ߥθ;ʬʸޤ: %s"
+
+msgid "cannot open "
+msgstr "ޤ "
+
+msgid "VIM: Can't open window!\n"
+msgstr "VIM: ɥ򳫤ޤ!\n"
+
+msgid "Need Amigados version 2.04 or later\n"
+msgstr "AmigadosΥС 2.04ʹߤɬפǤ\n"
+
+#, c-format
+msgid "Need %s version %ld\n"
+msgstr "%s ΥС %ld ɬפǤ\n"
+
+msgid "Cannot open NIL:\n"
+msgstr "NIL򳫤ޤ:\n"
+
+msgid "Cannot create "
+msgstr "Ǥޤ "
+
+#, c-format
+msgid "Vim exiting with %d\n"
+msgstr "Vim %d ǽλޤ\n"
+
+msgid "cannot change console mode ?!\n"
+msgstr "󥽡⡼ɤѹǤޤ?!\n"
+
+msgid "mch_get_shellsize: not a console??\n"
+msgstr "mch_get_shellsize: 󥽡ǤϤʤ??\n"
+
+#. if Vim opened a window: Executing a shell may cause crashes
+msgid "E360: Cannot execute shell with -f option"
+msgstr "E360: -f ץǥ¹ԤǤޤ"
+
+msgid "Cannot execute "
+msgstr "¹ԤǤޤ "
+
+msgid "shell "
+msgstr " "
+
+msgid " returned\n"
+msgstr " ޤ\n"
+
+msgid "ANCHOR_BUF_SIZE too small."
+msgstr "ANCHOR_BUF_SIZE ᤮ޤ."
+
+msgid "I/O ERROR"
+msgstr "ϥ顼"
+
+msgid "Message"
+msgstr "å"
+
+msgid "'columns' is not 80, cannot execute external commands"
+msgstr "'columns' 80ǤϤʤ, ޥɤ¹ԤǤޤ"
+
+msgid "E237: Printer selection failed"
+msgstr "E237: ץ󥿤˼Ԥޤ"
+
+#, c-format
+msgid "to %s on %s"
+msgstr "%s  (%s )"
+
+#, c-format
+msgid "E613: Unknown printer font: %s"
+msgstr "E613: ̤ΤΥץ󥿥ץǤ: %s"
+
+#, c-format
+msgid "E238: Print error: %s"
+msgstr "E238: 顼: %s"
+
+#, c-format
+msgid "Printing '%s'"
+msgstr "Ƥޤ: '%s'"
+
+#, c-format
+msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
+msgstr "E244: ʸå̾ \"%s\" Ǥ (ե̾ \"%s\")"
+
+#, c-format
+msgid "E245: Illegal char '%c' in font name \"%s\""
+msgstr "E245: '%c' ʸǤ (ե̾ \"%s\")"
+
+msgid "Vim: Double signal, exiting\n"
+msgstr "Vim: 2ŤΥʥΤ, λޤ\n"
+
+#, c-format
+msgid "Vim: Caught deadly signal %s\n"
+msgstr "Vim: ̿Ūʥ %s Τޤ\n"
+
+#, c-format
+msgid "Vim: Caught deadly signal\n"
+msgstr "Vim: ̿ŪʥΤޤ\n"
+
+#, c-format
+msgid "Opening the X display took %ld msec"
+msgstr "XФؤ³ %ld ߥäޤ"
+
+msgid ""
+"\n"
+"Vim: Got X error\n"
+msgstr ""
+"\n"
+"Vim: X Υ顼򸡽Фޤr\n"
+
+msgid "Testing the X display failed"
+msgstr "X display Υå˼Ԥޤ"
+
+msgid "Opening the X display timed out"
+msgstr "X display  open ॢȤޤ"
+
+msgid ""
+"\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"ƥƥȤǤޤ "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"ƥƥȤǤޤ "
+
+msgid ""
+"\n"
+"Cannot execute shell "
+msgstr ""
+"\n"
+"¹ԤǤޤ "
+
+msgid ""
+"\n"
+"Cannot execute shell sh\n"
+msgstr ""
+"\n"
+"sh ¹ԤǤޤ\n"
+
+msgid ""
+"\n"
+"shell returned "
+msgstr ""
+"\n"
+"뤬֤ͤޤ "
+
+msgid ""
+"\n"
+"Cannot create pipes\n"
+msgstr ""
+"\n"
+"ѥפǤޤ\n"
+
+msgid ""
+"\n"
+"Cannot fork\n"
+msgstr ""
+"\n"
+"fork Ǥޤ\n"
+
+msgid ""
+"\n"
+"Command terminated\n"
+msgstr ""
+"\n"
+"ޥɤǤޤ\n"
+
+msgid "XSMP lost ICE connection"
+msgstr "XSMP ICE³򼺤ޤ"
+
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = \"%s\""
+
+msgid "Opening the X display failed"
+msgstr "X display  open ˼Ԥޤ"
+
+msgid "XSMP handling save-yourself request"
+msgstr "XSMP save-yourself׵Ƥޤ"
+
+msgid "XSMP opening connection"
+msgstr "XSMP ³򳫻ϤƤޤ"
+
+msgid "XSMP ICE connection watch failed"
+msgstr "XSMP ICE³Ԥ褦Ǥ"
+
+#, c-format
+msgid "XSMP SmcOpenConnection failed: %s"
+msgstr "XSMP SmcOpenConnectionԤޤ: %s"
+
+msgid "At line"
+msgstr ""
+
+msgid "Could not load vim32.dll!"
+msgstr "vim32.dll ɤǤޤǤ"
+
+msgid "VIM Error"
+msgstr "VIM顼"
+
+msgid "Could not fix up function pointers to the DLL!"
+msgstr "DLLؿݥ󥿤ǤޤǤ"
+
+#, c-format
+msgid "shell returned %d"
+msgstr "뤬 %d ǽλޤ"
+
+#, c-format
+msgid "Vim: Caught %s event\n"
+msgstr "Vim: ٥ %s \n"
+
+msgid "close"
+msgstr "Ĥ"
+
+msgid "logoff"
+msgstr ""
+
+msgid "shutdown"
+msgstr "åȥ"
+
+msgid "E371: Command not found"
+msgstr "E371: ޥɤޤ"
+
+msgid ""
+"VIMRUN.EXE not found in your $PATH.\n"
+"External commands will not pause after completion.\n"
+"See  :help win32-vimrun  for more information."
+msgstr ""
+"VIMRUN.EXE $PATH ˸Ĥޤ.\n"
+"ޥɤνλ˰ߤ򤷤ޤ.\n"
+"ܺ٤  :help win32-vimrun  򻲾ȤƤ."
+
+msgid "Vim Warning"
+msgstr "Vimηٹ"
+
+#, c-format
+msgid "E372: Too many %%%c in format string"
+msgstr "E372: եޥåʸ %%%c ¿᤮ޤ"
+
+#, c-format
+msgid "E373: Unexpected %%%c in format string"
+msgstr "E373: եޥåʸͽ %%%c ޤ"
+
+msgid "E374: Missing ] in format string"
+msgstr "E374: եޥåʸ ] ޤ"
+
+#, c-format
+msgid "E375: Unsupported %%%c in format string"
+msgstr "E375: եޥåʸǤ %%%c ϥݡȤޤ"
+
+#, c-format
+msgid "E376: Invalid %%%c in format string prefix"
+msgstr "E376: եޥåʸ̵֤ %%%c ޤ"
+
+#, c-format
+msgid "E377: Invalid %%%c in format string"
+msgstr "E377: եޥåʸ̵ %%%c ޤ"
+
+msgid "E378: 'errorformat' contains no pattern"
+msgstr "E378: 'errorformat' ˥ѥ󤬻ꤵƤޤ"
+
+msgid "E379: Missing or empty directory name"
+msgstr "E379: ǥ쥯ȥ̵̾Ǥ"
+
+msgid "E553: No more items"
+msgstr "E553: Ǥ⤦ޤ"
+
+#, c-format
+msgid "(%d of %d)%s%s: "
+msgstr "(%d of %d)%s%s: "
+
+msgid " (line deleted)"
+msgstr " (Ԥޤ)"
+
+msgid "E380: At bottom of quickfix stack"
+msgstr "E380: quickfix åǤ"
+
+msgid "E381: At top of quickfix stack"
+msgstr "E381: quickfix åƬǤ"
+
+#, c-format
+msgid "error list %d of %d; %d errors"
+msgstr "顼 %d of %d; %d ĥ顼"
+
+msgid "E382: Cannot write, 'buftype' option is set"
+msgstr "E382: 'buftype' ץꤵƤΤǽߤޤ"
+
+msgid "Error file"
+msgstr "顼ե"
+
+msgid "E683: File name missing or invalid pattern"
+msgstr "E683: ե̵̵̾ʥѥǤ"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "ե \"%s\" 򳫤ޤ"
+
+msgid "E681: Buffer is not loaded"
+msgstr "E681: Хåեɤ߹ޤޤǤ"
+
+msgid "E777: String or List expected"
+msgstr "E777: ʸ󤫥ꥹȤɬפǤ"
+
+#, c-format
+msgid "E369: invalid item in %s%%[]"
+msgstr "E369: ̵ʹܤǤ: %s%%[]"
+
+msgid "E339: Pattern too long"
+msgstr "E339: ѥĹ᤮ޤ"
+
+msgid "E50: Too many \\z("
+msgstr "E50: \\z( ¿᤮ޤ"
+
+#, c-format
+msgid "E51: Too many %s("
+msgstr "E51: %s( ¿᤮ޤ"
+
+msgid "E52: Unmatched \\z("
+msgstr "E52: \\z( äƤޤ"
+
+#, c-format
+msgid "E53: Unmatched %s%%("
+msgstr "E53: %s%%( äƤޤ"
+
+#, c-format
+msgid "E54: Unmatched %s("
+msgstr "E54: %s( äƤޤ"
+
+#, c-format
+msgid "E55: Unmatched %s)"
+msgstr "E55: %s) äƤޤ"
+
+#, c-format
+msgid "E59: invalid character after %s@"
+msgstr "E59: %s@ θʸޤ"
+
+#, c-format
+msgid "E60: Too many complex %s{...}s"
+msgstr "E60: ʣ %s{...} ¿᤮ޤ"
+
+#, c-format
+msgid "E61: Nested %s*"
+msgstr "E61:%s* ҤˤʤäƤޤ"
+
+#, c-format
+msgid "E62: Nested %s%c"
+msgstr "E62:%s%c ҤˤʤäƤޤ"
+
+#
+msgid "E63: invalid use of \\_"
+msgstr "E63: \\_ ̵ʻˡǤ"
+
+#, c-format
+msgid "E64: %s%c follows nothing"
+msgstr "E64:%s%c θˤʤˤ⤢ޤ"
+
+#
+msgid "E65: Illegal back reference"
+msgstr "E65: ʸȤǤ"
+
+#
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( ϥǤϵĤƤޤ"
+
+#
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 ¾ϥǤϵĤƤޤ"
+
+#
+msgid "E68: Invalid character after \\z"
+msgstr "E68: \\z θʸޤ"
+
+#
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: %s%%[ θ ] ޤ"
+
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: %s%%[] Ǥ"
+
+#
+#, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: %s%%[dxouU] θʸޤ"
+
+#
+#, c-format
+msgid "E71: Invalid character after %s%%"
+msgstr "E71: %s%% θʸޤ"
+
+#
+#, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: %s[ θ ] ޤ"
+
+#, c-format
+msgid "E554: Syntax error in %s{...}"
+msgstr "E554: %s{...} ʸˡ顼ޤ"
+
+msgid "External submatches:\n"
+msgstr "ʬ:\n"
+
+msgid " VREPLACE"
+msgstr " ִ"
+
+msgid " REPLACE"
+msgstr " ִ"
+
+msgid " REVERSE"
+msgstr " ȿž"
+
+msgid " INSERT"
+msgstr " "
+
+msgid " (insert)"
+msgstr " ()"
+
+msgid " (replace)"
+msgstr " (ִ)"
+
+msgid " (vreplace)"
+msgstr " (ִ)"
+
+msgid " Hebrew"
+msgstr " إ֥饤"
+
+msgid " Arabic"
+msgstr " ӥ"
+
+msgid " (lang)"
+msgstr " ()"
+
+msgid " (paste)"
+msgstr " (Žդ)"
+
+msgid " VISUAL"
+msgstr " ӥ奢"
+
+msgid " VISUAL LINE"
+msgstr " ӥ奢 "
+
+msgid " VISUAL BLOCK"
+msgstr " ӥ奢 "
+
+msgid " SELECT"
+msgstr " 쥯"
+
+msgid " SELECT LINE"
+msgstr " Իظ"
+
+msgid " SELECT BLOCK"
+msgstr " "
+
+msgid "recording"
+msgstr "Ͽ"
+
+#, c-format
+msgid "E383: Invalid search string: %s"
+msgstr "E383: ̵ʸʸǤ: %s"
+
+#, c-format
+msgid "E384: search hit TOP without match for: %s"
+msgstr "E384: ޤǸޤսϤޤ: %s"
+
+#, c-format
+msgid "E385: search hit BOTTOM without match for: %s"
+msgstr "E385: ޤǸޤսϤޤ: %s"
+
+msgid "E386: Expected '?' or '/'  after ';'"
+msgstr "E386: ';' ΤȤˤ '?'  '/' ԤƤ"
+
+msgid " (includes previously listed match)"
+msgstr " (󤷤սޤ)"
+
+#. cursor at status line
+msgid "--- Included files "
+msgstr "--- 󥯥롼ɤ줿ե "
+
+msgid "not found "
+msgstr "Ĥޤ "
+
+msgid "in path ---\n"
+msgstr "ѥ ----\n"
+
+msgid "  (Already listed)"
+msgstr "  ()"
+
+msgid "  NOT FOUND"
+msgstr "  Ĥޤ"
+
+#, c-format
+msgid "Scanning included file: %s"
+msgstr "󥯥롼ɤ줿ե򥹥: %s"
+
+#, c-format
+msgid "Searching included file %s"
+msgstr "󥯥롼ɤ줿ե򥹥 %s"
+
+msgid "E387: Match is on current line"
+msgstr "E387: ߹Ԥ˳ޤ"
+
+msgid "All included files were found"
+msgstr "ƤΥ󥯥롼ɤ줿ե뤬Ĥޤ"
+
+msgid "No included files"
+msgstr "󥯥롼ɥեϤޤ"
+
+msgid "E388: Couldn't find definition"
+msgstr "E388: 򸫤Ĥޤ"
+
+msgid "E389: Couldn't find pattern"
+msgstr "E389: ѥ򸫤Ĥޤ"
+
+msgid "Substitute "
+msgstr "Substitute "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Ǹ %sѥ:\n"
+"~"
+
+msgid "E759: Format error in spell file"
+msgstr "E759: ڥեν񼰥顼Ǥ"
+
+msgid "E758: Truncated spell file"
+msgstr "E758: ڥե뤬ڼƤ褦Ǥ"
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "%s (%d ) ³ƥ: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "%s (%d )  affix ̾Ĺ᤮ޤ: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr ""
+"E761: affixե FOL, LOW ⤷ UPP ΥեޥåȤ˥顼ޤ"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: FOL, LOW ⤷ UPP ʸϰϳǤ"
+
+msgid "Compressing word tree..."
+msgstr "ñĥ꡼򰵽̤Ƥޤ..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756: ڥå̵Ƥޤ"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"ٹ: ñꥹ \"%s_%s.spl\"  \"%s_ascii.spl\" ϸĤޤ"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+"ٹ: ñꥹ \"%s.%s.spl\"  \"%s.ascii.spl\" ϸĤޤ"
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "ڥե \"%s\" ɹ"
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757: ڥեǤϤʤ褦Ǥ"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: ŤڥեʤΤ, åץǡȤƤ"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: 꿷С Vim ѤΥڥեǤ"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: ڥե˥ݡȤƤʤ󤬤ޤ"
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr "ٹ9: %s ȤϰϤϥݡȤƤޤ"
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "affix ե %s ɹ..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "%s (%d ) ñѴǤޤǤ: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "%s μѴϥݡȤƤޤ: %s  %s "
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "%s ѴϥݡȤƤޤ"
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "%s  %d ܤ FLAG ̵ͤޤ: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "%s  %d ܤ˥ե饰ŻѤޤ: %s"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"%s  %d ܤ PFX ܤθ COMPOUNDFORBIDFLAG ϸä̤"
+"Ȥޤ"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"%s  %d ܤ PFX ܤθ COMPOUNDPERMITFLAG ϸä̤"
+"Ȥޤ"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "COMPOUNDRULES ͤ˸꤬ޤ. ե %s  %d : %s"
+
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr "%s  %d ܤ COMPOUNDWORDMAX ͤ˸꤬ޤ: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "%s  %d ܤ COMPOUNDMIN ͤ˸꤬ޤ: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "%s  %d ܤ COMPOUNDSYLMAX ͤ˸꤬ޤ: %s"
+
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr "%s  %d ܤ CHECKCOMPOUNDPATTERN ͤ˸꤬ޤ: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"%s  %d ܤ Ϣ³ affix ֥åΥե饰ȹ礻˰㤤ޤ: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "%s  %d ܤ ʣ affix 򸡽Фޤ: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"line %d: %s"
+msgstr ""
+"%s  %d ܤ affix  BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
+"˻ѤƤ: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "%s  %d ܤǤ Y  N ɬפǤ: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "%s  %d ܤ ϲƤޤ: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "%s  %d ܤˤ REP(SAL) βɬפǤ"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "%s  %d ܤˤ MAP βɬפǤ"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "%s  %d ܤ MAP ˽ʣʸޤ"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "%s  %d ܤ ǧǤʤʣܤޤ: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "%s ܤ FOL/LOW/UPP ޤ"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "SYLLABLE ꤵʤ COMPOUNDSYLMAX"
+
+msgid "Too many postponed prefixes"
+msgstr "ٱֻҤ¿᤮ޤ"
+
+msgid "Too many compound flags"
+msgstr "ʣե饰¿᤮ޤ"
+
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr "ٱֻ /⤷ ʣե饰¿᤮ޤ"
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "SOFO%s Ԥ %s ˤޤ"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "SAL  SOFO  %s ξꤵƤޤ"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "%s  %d Ԥ ե饰ͤǤϤޤ: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "%s  %d ܤ ե饰Ǥ: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr " %s ¾ .aff եǻѤ줿ΤȰۤʤޤ"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "ե %s 򥹥..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760: %s ˤñޤ"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr " %6d, ñ %6d - %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "%s  %d ܤ ʣñ줬Ĥޤ: %s"
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "ʣΤǽñ %s  %d ܤǤ: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d Ĥñ줬Ĥޤ (%s )"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "ASCIIʸޤ %d Ĥñ̵뤷ޤ (%s )"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "ɸϤɹ %s ..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "%s  %d ܤ ʣ /encoding= Ԥ̵뤷ޤ: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "%s  %d ܤ ñθ /encoding= Ԥ̵뤷ޤ: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "%s  %d ܤ ʣ /regions= Ԥ̵뤷ޤ: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "%s  %d , ϰϻ꤬¿᤮ޤ: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "%s  %d ܤ ʣ / Ԥ̵뤷ޤ: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "%s  %d  ̵ nr ΰǤ: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "%s  %d  ǧǽʥե饰Ǥ: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "ASCIIʸޤ %d Ĥñ̵뤷ޤ"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: ꤬­ʤΤǡñꥹȤԴǤ"
+
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr "Ρ %d ( %d ) 򰵽̤ޤ; Ĥ %d (%d%%)"
+
+msgid "Reading back spell file..."
+msgstr "ڥեɹ"
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "ߤ¹..."
+
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "߸ñ: %ld"
+
+#, c-format
+msgid "Total number of words: %d"
+msgstr "ñ: %d"
+
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "ե \"%s\" ..."
+
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr ": %d Х"
+
+msgid "E751: Output file name must not have region name"
+msgstr "E751: ϥե̾ˤϰ̾ޤޤ"
+
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754: ϰϤ 8 ĤޤǤݡȤƤޤ"
+
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755: ̵ϰϤǤ: %s"
+
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "ٹ: ʣե饰 NOBREAK ξȤꤵޤ"
+
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "ڥե %s ..."
+
+msgid "Done!"
+msgstr "¹Ԥޤ!"
+
+#, c-format
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile' ˤ %ld ĤΥȥϤޤ"
+
+#, c-format
+msgid "Word removed from %s"
+msgstr "%s ñ줬ޤ"
+
+#, c-format
+msgid "Word added to %s"
+msgstr "%s ñ줬ɲäޤ"
+
+msgid "E763: Word characters differ between spell files"
+msgstr "E763: ñʸڥեȰۤʤޤ"
+
+msgid "Sorry, no suggestions"
+msgstr "ǰǤ, Ϥޤ"
+
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "ǰǤ,  %ld Ĥޤ"
+
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr "\"%.*s\" 򼡤Ѵ:"
+
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
+
+msgid "E752: No previous spell replacement"
+msgstr "E752: ڥִޤ¹ԤƤޤ"
+
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753: Ĥޤ: %s"
+
+#, c-format
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778: .sug եǤϤʤ褦Ǥ: %s"
+
+#, c-format
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779: Ť .sug եʤΤ, åץǡȤƤ: %s"
+
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780: 꿷С Vim Ѥ .sug եǤ: %s"
+
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781: .sug ե뤬 .spl եȰפޤ: %s"
+
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782: .sug եɹ˥顼ȯޤ: %s"
+
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783: MAP ȥ˽ʣʸ¸ߤޤ"
+
+#, c-format
+msgid "E390: Illegal argument: %s"
+msgstr "E390: ʰǤ: %s"
+
+#, c-format
+msgid "E391: No such syntax cluster: %s"
+msgstr "E391: Τ褦ʹʸ饹Ϥޤ: %s"
+
+msgid "No Syntax items defined for this buffer"
+msgstr "ΥХåե줿ʸǤϤޤ"
+
+msgid "syncing on C-style comments"
+msgstr "CȤƱ"
+
+msgid "no syncing"
+msgstr "Ʊ"
+
+msgid "syncing starts "
+msgstr "Ʊ "
+
+msgid " lines before top line"
+msgstr " (ȥå׹Ԥ)"
+
+msgid ""
+"\n"
+"--- Syntax sync items ---"
+msgstr ""
+"\n"
+"--- ʸƱ ---"
+
+msgid ""
+"\n"
+"syncing on items"
+msgstr ""
+"\n"
+"ǾƱ"
+
+msgid ""
+"\n"
+"--- Syntax items ---"
+msgstr ""
+"\n"
+"--- ʸ ---"
+
+#, c-format
+msgid "E392: No such syntax cluster: %s"
+msgstr "E392: Τ褦ʹʸ饹Ϥޤ: %s"
+
+msgid "minimal "
+msgstr "minimal "
+
+msgid "maximal "
+msgstr "maximal "
+
+msgid "; match "
+msgstr ";  "
+
+msgid " line breaks"
+msgstr " Ĥβ"
+
+msgid "E395: contains argument not accepted here"
+msgstr "E395: ξǤϰcontainsϵĤƤޤ"
+
+msgid "E844: invalid cchar value"
+msgstr "E844: ̵ccharͤǤ"
+
+msgid "E393: group[t]here not accepted here"
+msgstr "E393: Ǥϥ롼פϵĤޤ"
+
+#, c-format
+msgid "E394: Didn't find region item for %s"
+msgstr "E394: %s ϰǤĤޤ"
+
+msgid "E397: Filename required"
+msgstr "E397: ե̾ɬפǤ"
+
+msgid "E847: Too many syntax includes"
+msgstr "E847: ʸμ(include)¿᤮ޤ"
+
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr "E789: ']' ޤ: %s"
+
+#, c-format
+msgid "E398: Missing '=': %s"
+msgstr "E398: '=' ޤ: %s"
+
+#, c-format
+msgid "E399: Not enough arguments: syntax region %s"
+msgstr "E399: ­ޤ: ʸϰ %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: ʸ饹¿᤮ޤ"
+
+msgid "E400: No cluster specified"
+msgstr "E400: 饹ꤵƤޤ"
+
+#, c-format
+msgid "E401: Pattern delimiter not found: %s"
+msgstr "E401: ѥڤ꤬Ĥޤ: %s"
+
+#, c-format
+msgid "E402: Garbage after pattern: %s"
+msgstr "E402: ѥΤȤ˥ߤޤ: %s"
+
+msgid "E403: syntax sync: line continuations pattern specified twice"
+msgstr "E403: ʸƱ: Ϣ³ԥѥ2ٻꤵޤ"
+
+#, c-format
+msgid "E404: Illegal arguments: %s"
+msgstr "E404: ʰǤ: %s"
+
+#, c-format
+msgid "E405: Missing equal sign: %s"
+msgstr "E405: 椬ޤ: %s"
+
+#, c-format
+msgid "E406: Empty argument: %s"
+msgstr "E406: ΰ: %s"
+
+#, c-format
+msgid "E407: %s not allowed here"
+msgstr "E407: %s ϥǤϵĤƤޤ"
+
+#, c-format
+msgid "E408: %s must be first in contains list"
+msgstr "E408: %s ƥꥹȤƬǤʤФʤʤ"
+
+#, c-format
+msgid "E409: Unknown group name: %s"
+msgstr "E409: ̤ΤΥ롼̾: %s"
+
+#, c-format
+msgid "E410: Invalid :syntax subcommand: %s"
+msgstr "E410: ̵ :syntax Υ֥ޥ: %s"
+
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr "E679: syncolor.vim κƵƤӽФ򸡽Фޤ"
+
+#, c-format
+msgid "E411: highlight group not found: %s"
+msgstr "E411: ϥ饤ȥ롼פĤޤ: %s"
+
+#, c-format
+msgid "E412: Not enough arguments: \":highlight link %s\""
+msgstr "E412: ʬǤϤʤ: \":highlight link %s\""
+
+#, c-format
+msgid "E413: Too many arguments: \":highlight link %s\""
+msgstr "E413: ¿᤮ޤ: \":highlight link %s\""
+
+msgid "E414: group has settings, highlight link ignored"
+msgstr "E414: 롼פꤵƤΤǥϥ饤ȥ󥯤̵뤵ޤ"
+
+#, c-format
+msgid "E415: unexpected equal sign: %s"
+msgstr "E415: ͽǤ: %s"
+
+#, c-format
+msgid "E416: missing equal sign: %s"
+msgstr "E416: 椬ޤ: %s"
+
+#, c-format
+msgid "E417: missing argument: %s"
+msgstr "E417: ޤ: %s"
+
+#, c-format
+msgid "E418: Illegal value: %s"
+msgstr "E418: ͤǤ: %s"
+
+msgid "E419: FG color unknown"
+msgstr "E419: ̤ΤʿǤ"
+
+msgid "E420: BG color unknown"
+msgstr "E420: ̤ΤطʿǤ"
+
+#, c-format
+msgid "E421: Color name or number not recognized: %s"
+msgstr "E421: 顼ֹ̾ǧǤޤ: %s"
+
+#, c-format
+msgid "E422: terminal code too long: %s"
+msgstr "E422: üɤĹ᤮ޤ: %s"
+
+#, c-format
+msgid "E423: Illegal argument: %s"
+msgstr "E423: ʰǤ: %s"
+
+msgid "E424: Too many different highlighting attributes in use"
+msgstr "E424: ¿ΰۤʤϥ饤°Ȥ᤮Ƥޤ"
+
+msgid "E669: Unprintable character in group name"
+msgstr "E669: 롼̾˰Բǽʸޤ"
+
+msgid "W18: Invalid character in group name"
+msgstr "W18: 롼̾ʸޤ"
+
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: ϥ饤Ȥȹʸ롼פ¿᤮ޤ"
+
+msgid "E555: at bottom of tag stack"
+msgstr "E555: åǤ"
+
+msgid "E556: at top of tag stack"
+msgstr "E556: åƬǤ"
+
+msgid "E425: Cannot go before first matching tag"
+msgstr "E425: ǽγĶ뤳ȤϤǤޤ"
+
+#, c-format
+msgid "E426: tag not found: %s"
+msgstr "E426: Ĥޤ: %s"
+
+msgid "  # pri kind tag"
+msgstr "  # pri kind tag"
+
+msgid "file\n"
+msgstr "ե\n"
+
+msgid "E427: There is only one matching tag"
+msgstr "E427: 1Ĥޤ"
+
+msgid "E428: Cannot go beyond last matching tag"
+msgstr "E428: Ǹ˳륿ĶƿʤळȤϤǤޤ"
+
+#, c-format
+msgid "File \"%s\" does not exist"
+msgstr "ե \"%s\" ޤ"
+
+#. Give an indication of the number of matching tags
+#, c-format
+msgid "tag %d of %d%s"
+msgstr " %d (%d%s)"
+
+msgid " or more"
+msgstr " ʾ"
+
+msgid "  Using tag with different case!"
+msgstr "  ۤʤcaseǻѤޤ!"
+
+#, c-format
+msgid "E429: File \"%s\" does not exist"
+msgstr "E429: ե \"%s\" ޤ"
+
+#. Highlight title
+msgid ""
+"\n"
+"  # TO tag         FROM line  in file/text"
+msgstr ""
+"\n"
+"  # TO         FROM     in file/text"
+
+#, c-format
+msgid "Searching tags file %s"
+msgstr "ե %s 򸡺"
+
+#, c-format
+msgid "E430: Tag file path truncated for %s\n"
+msgstr "E430: եΥѥ %s ڤΤƤޤ\n"
+
+msgid "Ignoring long line in tags file"
+msgstr "եĹԤ̵뤷ޤ"
+
+#, c-format
+msgid "E431: Format error in tags file \"%s\""
+msgstr "E431: ե \"%s\" ΥեޥåȤ˥顼ޤ"
+
+#, c-format
+msgid "Before byte %ld"
+msgstr "ľ %ld Х"
+
+#, c-format
+msgid "E432: Tags file not sorted: %s"
+msgstr "E432: ե뤬ȤƤޤ: %s"
+
+#. never opened any tags file
+msgid "E433: No tags file"
+msgstr "E433: ե뤬ޤ"
+
+msgid "E434: Can't find tag pattern"
+msgstr "E434: ѥ򸫤Ĥޤ"
+
+msgid "E435: Couldn't find tag, just guessing!"
+msgstr "E435: 򸫤ĤʤΤñ˿¬ޤ!"
+
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "ʣե̾: %s"
+
+msgid "' not known. Available builtin terminals are:"
+msgstr "' ̤ΤǤ. ԤȤ߹üϼΤȤǤ:"
+
+msgid "defaulting to '"
+msgstr "άͤ򼡤Τ褦ꤷޤ '"
+
+msgid "E557: Cannot open termcap file"
+msgstr "E557: termcapե򳫤ޤ"
+
+msgid "E558: Terminal entry not found in terminfo"
+msgstr "E558: terminfoüȥ򸫤Ĥޤ"
+
+msgid "E559: Terminal entry not found in termcap"
+msgstr "E559: termcapüȥ򸫤Ĥޤ"
+
+#, c-format
+msgid "E436: No \"%s\" entry in termcap"
+msgstr "E436: termcap \"%s\" Υȥ꤬ޤ"
+
+msgid "E437: terminal capability \"cm\" required"
+msgstr "E437: ü \"cm\" ǽɬפǤ"
+
+#. Highlight title
+msgid ""
+"\n"
+"--- Terminal keys ---"
+msgstr ""
+"\n"
+"--- ü ---"
+
+msgid "new shell started\n"
+msgstr "ưޤ\n"
+
+msgid "Vim: Error reading input, exiting...\n"
+msgstr "Vim: ϤɹΥ顼ˤ꽪λޤ...\n"
+
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "ΰΤCUT_BUFFER0Ѥޤ"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: ͽԥȤѤޤ"
+
+#. must display the prompt
+msgid "No undo possible; continue anyway"
+msgstr "ǽʥɥϤޤ: Ȥꤢ³ޤ"
+
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: Ѥ˥ɥե򳫤ޤ: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: ɥե뤬Ƥޤ (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'Υǥ쥯ȥ˥ɥե񤭹ޤ"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "ɥեȤɤ߹ʤΤǾ񤭤ޤ: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "ɥեǤϤʤΤǾ񤭤ޤ: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "оݤʤΤǥɥեν񤭹ߤ򥹥åפޤ"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "ɥե񤭹: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: ɥեν񤭹ߥ顼Ǥ: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "ʡۤʤΤǥɥեɤ߹ߤޤ: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "ɥեɹ: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: ɥեɹѤȤƳޤ: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: ɥեǤϤޤ: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: Ź沽ե뤬Ź沽줿ɥեȤäƤޤ: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Ź沽줿ɥեβɤ˼Ԥޤ: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: ɥե뤬Ź沽Ƥޤ: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: ߴ̵ɥեǤ: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "եƤѤäƤ뤿ᡢɥѤǤޤ"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "ɥե %s μλ"
+
+msgid "Already at oldest change"
+msgstr "˰ָŤѹǤ"
+
+msgid "Already at newest change"
+msgstr "˰ֿѹǤ"
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: ɥֹ %ld ϸĤޤ"
+
+msgid "E438: u_undo: line numbers wrong"
+msgstr "E438: u_undo: ֹ椬ְäƤޤ"
+
+msgid "more line"
+msgstr " ɲäޤ"
+
+msgid "more lines"
+msgstr " ɲäޤ"
+
+msgid "line less"
+msgstr " ޤ"
+
+msgid "fewer lines"
+msgstr " ޤ"
+
+msgid "change"
+msgstr "սѹޤ"
+
+msgid "changes"
+msgstr "սѹޤ"
+
+#, c-format
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr ""
+
+msgid "after"
+msgstr ""
+
+msgid "Nothing to undo"
+msgstr "ɥоݤޤ"
+
+msgid "number changes  when               saved"
+msgstr "   ѹ   ѹ           ¸"
+
+#, c-format
+msgid "%ld seconds ago"
+msgstr "%ld ÷вᤷƤޤ"
+
+msgid "E790: undojoin is not allowed after undo"
+msgstr "E790: undo ľ undojoin ϤǤޤ"
+
+msgid "E439: undo list corrupt"
+msgstr "E439: ɥꥹȤƤޤ"
+
+msgid "E440: undo line missing"
+msgstr "E440: ɥԤޤ"
+
+#. Only MS VC 4.1 and earlier can do Win32s
+msgid ""
+"\n"
+"MS-Windows 16/32-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 16/32 ӥå GUI "
+
+msgid ""
+"\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 64 ӥå GUI "
+
+msgid ""
+"\n"
+"MS-Windows 32-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 32 ӥå GUI "
+
+msgid " in Win32s mode"
+msgstr " in Win32s ⡼"
+
+msgid " with OLE support"
+msgstr " with OLE ݡ"
+
+msgid ""
+"\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 64 ӥå 󥽡 "
+
+msgid ""
+"\n"
+"MS-Windows 32-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 32 ӥå 󥽡 "
+
+msgid ""
+"\n"
+"MS-Windows 16-bit version"
+msgstr ""
+"\n"
+"MS-Windows 16 ӥå "
+
+msgid ""
+"\n"
+"32-bit MS-DOS version"
+msgstr ""
+"\n"
+"32 ӥå MS-DOS "
+
+msgid ""
+"\n"
+"16-bit MS-DOS version"
+msgstr ""
+"\n"
+"16 ӥå MS-DOS "
+
+msgid ""
+"\n"
+"MacOS X (unix) version"
+msgstr ""
+"\n"
+"MacOS X (unix) "
+
+msgid ""
+"\n"
+"MacOS X version"
+msgstr ""
+"\n"
+"MacOS X "
+
+msgid ""
+"\n"
+"MacOS version"
+msgstr ""
+"\n"
+"MacOS "
+
+msgid ""
+"\n"
+"OpenVMS version"
+msgstr ""
+"\n"
+"OpenVMS "
+
+msgid ""
+"\n"
+"Included patches: "
+msgstr ""
+"\n"
+"ŬѺѥѥå: "
+
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"ɲóĥѥå: "
+
+msgid "Modified by "
+msgstr "Modified by "
+
+msgid ""
+"\n"
+"Compiled "
+msgstr ""
+"\n"
+"Compiled "
+
+msgid "by "
+msgstr "by "
+
+msgid ""
+"\n"
+"Huge version "
+msgstr ""
+"\n"
+"Huge  "
+
+msgid ""
+"\n"
+"Big version "
+msgstr ""
+"\n"
+"Big  "
+
+msgid ""
+"\n"
+"Normal version "
+msgstr ""
+"\n"
+"̾  "
+
+msgid ""
+"\n"
+"Small version "
+msgstr ""
+"\n"
+"Small  "
+
+msgid ""
+"\n"
+"Tiny version "
+msgstr ""
+"\n"
+"Tiny  "
+
+msgid "without GUI."
+msgstr "without GUI."
+
+msgid "with GTK2-GNOME GUI."
+msgstr "with GTK2-GNOME GUI."
+
+msgid "with GTK2 GUI."
+msgstr "with GTK2 GUI."
+
+msgid "with X11-Motif GUI."
+msgstr "with X11-Motif GUI."
+
+msgid "with X11-neXtaw GUI."
+msgstr "with X11-neXtaw GUI."
+
+msgid "with X11-Athena GUI."
+msgstr "with X11-Athena GUI."
+
+msgid "with Photon GUI."
+msgstr "with Photon GUI."
+
+msgid "with GUI."
+msgstr "with GUI."
+
+msgid "with Carbon GUI."
+msgstr "with Carbon GUI."
+
+msgid "with Cocoa GUI."
+msgstr "with Cocoa GUI."
+
+msgid "with (classic) GUI."
+msgstr "with (饷å) GUI."
+
+msgid "  Features included (+) or not (-):\n"
+msgstr "  ǽΰ ͭ(+)/̵(-)\n"
+
+msgid "   system vimrc file: \""
+msgstr "      ƥ vimrc: \""
+
+msgid "     user vimrc file: \""
+msgstr "        桼 vimrc: \""
+
+msgid " 2nd user vimrc file: \""
+msgstr "     2桼 vimrc: \""
+
+msgid " 3rd user vimrc file: \""
+msgstr "     3桼 vimrc: \""
+
+msgid "      user exrc file: \""
+msgstr "         桼 exrc: \""
+
+msgid "  2nd user exrc file: \""
+msgstr "      2桼 exrc: \""
+
+msgid "  system gvimrc file: \""
+msgstr "     ƥ gvimrc: \""
+
+msgid "    user gvimrc file: \""
+msgstr "       桼 gvimrc: \""
+
+msgid "2nd user gvimrc file: \""
+msgstr "    2桼 gvimrc: \""
+
+msgid "3rd user gvimrc file: \""
+msgstr "    3桼 gvimrc: \""
+
+msgid "    system menu file: \""
+msgstr "    ƥ˥塼: \""
+
+msgid "  fall-back for $VIM: \""
+msgstr "       ά $VIM: \""
+
+msgid " f-b for $VIMRUNTIME: \""
+msgstr "ά $VIMRUNTIME: \""
+
+msgid "Compilation: "
+msgstr "ѥ: "
+
+msgid "Compiler: "
+msgstr "ѥ: "
+
+msgid "Linking: "
+msgstr ": "
+
+msgid "  DEBUG BUILD"
+msgstr "ǥХåӥ"
+
+msgid "VIM - Vi IMproved"
+msgstr "VIM - Vi IMproved"
+
+msgid "version "
+msgstr "version "
+
+msgid "by Bram Moolenaar et al."
+msgstr "by Bram Moolenaar ¾."
+
+msgid "Vim is open source and freely distributable"
+msgstr "Vim ϥץ󥽡Ǥ꼫ͳ۲ǽǤ"
+
+msgid "Help poor children in Uganda!"
+msgstr "ηäޤʤҶ˱!"
+
+msgid "type  :help iccf<Enter>       for information "
+msgstr "ܺ٤ʾ           :help iccf<Enter>      "
+
+msgid "type  :q<Enter>               to exit         "
+msgstr "λˤ           :q<Enter>              "
+
+msgid "type  :help<Enter>  or  <F1>  for on-line help"
+msgstr "饤إפ     :help<Enter>  <F1>   "
+
+msgid "type  :help version7<Enter>   for version info"
+msgstr "С       :help version7<Enter>  "
+
+msgid "Running in Vi compatible mode"
+msgstr "Viߴ⡼ɤư"
+
+msgid "type  :set nocp<Enter>        for Vim defaults"
+msgstr "Vim侩ͤˤˤ    :set nocp<Enter>       "
+
+msgid "type  :help cp-default<Enter> for info on this"
+msgstr "ܺ٤ʾ           :help cp-default<Enter>"
+
+msgid "menu  Help->Orphans           for information    "
+msgstr "ܺ٤ϥ˥塼 إעɻ 򻲾ȤƲ   "
+
+msgid "Running modeless, typed text is inserted"
+msgstr "⡼̵Ǽ¹, פʸޤ"
+
+msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
+msgstr "˥塼 Խꢪ(鿴)⡼ "
+
+msgid "                              for two modes      "
+msgstr "                              ǥ⡼ͭ       "
+
+msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
+msgstr "˥塼 ԽꢪViߴ⡼      "
+
+msgid "                              for Vim defaults   "
+msgstr "                              VimȤư    "
+
+msgid "Sponsor Vim development!"
+msgstr "Vimγȯ礷Ƥ!"
+
+msgid "Become a registered Vim user!"
+msgstr "VimϿ桼ˤʤäƤ!"
+
+msgid "type  :help sponsor<Enter>    for information "
+msgstr "ܺ٤ʾ           :help sponsor<Enter>   "
+
+msgid "type  :help register<Enter>   for information "
+msgstr "ܺ٤ʾ           :help register<Enter>  "
+
+msgid "menu  Help->Sponsor/Register  for information    "
+msgstr "ܺ٤ϥ˥塼 إעݥ󥵡/Ͽ 򻲾ȤƲ   "
+
+msgid "WARNING: Windows 95/98/ME detected"
+msgstr "   ٹ: Windows 95/98/Me 򸡽  "
+
+msgid "type  :help windows95<Enter>  for info on this"
+msgstr " ܺ٤ʾ          :help windows95<Enter> "
+
+msgid "Already only one window"
+msgstr "˥ɥ1Ĥޤ"
+
+msgid "E441: There is no preview window"
+msgstr "E441: ץӥ塼ɥޤ"
+
+msgid "E442: Can't split topleft and botright at the same time"
+msgstr "E442: ȱƱʬ䤹뤳ȤϤǤޤ"
+
+msgid "E443: Cannot rotate when another window is split"
+msgstr "E443: ¾Υɥʬ䤵ƤˤϽǤޤ"
+
+msgid "E444: Cannot close last window"
+msgstr "E444: ǸΥɥĤ뤳ȤϤǤޤ"
+
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: autocmdɥĤޤ"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: autocmdɥĤʤᡢɥĤޤ"
+
+msgid "E445: Other window contains changes"
+msgstr "E445: ¾Υɥˤѹޤ"
+
+msgid "E446: No file name under cursor"
+msgstr "E446: β˥ե̾ޤ"
+
+#, c-format
+msgid "E447: Can't find file \"%s\" in path"
+msgstr "E447: pathˤ \"%s\" Ȥե뤬ޤ"
+
+msgid "Edit with &multiple Vims"
+msgstr "ʣVimԽ (&M)"
+
+msgid "Edit with single &Vim"
+msgstr "1ĤVimԽ (&V)"
+
+msgid "Diff with Vim"
+msgstr "VimǺʬɽ"
+
+msgid "Edit with &Vim"
+msgstr "VimԽ (&V)"
+
+#. Now concatenate
+msgid "Edit with existing Vim - "
+msgstr "ưѤVimԽ - "
+
+msgid "Edits the selected file(s) with Vim"
+msgstr "򤷤եVimԽ"
+
+msgid "Error creating process: Check if gvim is in your path!"
+msgstr "ץκ˼: gvimĶѿPATHˤ뤫ǧƤ!"
+
+msgid "gvimext.dll error"
+msgstr "gvimext.dll 顼"
+
+msgid "Path length too long!"
+msgstr "ѥĹޤ!"
+
+msgid "--No lines in buffer--"
+msgstr "--Хåե˹Ԥޤ--"
+
+#.
+#. * The error messages that can be shared are included here.
+#. * Excluded are errors that are only used once and debugging messages.
+#.
+msgid "E470: Command aborted"
+msgstr "E470: ޥɤǤޤ"
+
+msgid "E471: Argument required"
+msgstr "E471: ɬפǤ"
+
+msgid "E10: \\ should be followed by /, ? or &"
+msgstr "E10: \\ θ /  ?  & ǤʤФʤޤ"
+
+msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
+msgstr "E11: ޥɥ饤Ǥ̵Ǥ; <CR>Ǽ¹, CTRL-CǤ"
+
+msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
+msgstr ""
+"E12: ߤΥǥ쥯ȥ䥿Ǥexrc/vimrcΥޥɤϵĤޤ"
+
+msgid "E171: Missing :endif"
+msgstr "E171: :endif ޤ"
+
+msgid "E600: Missing :endtry"
+msgstr "E600: :endtry ޤ"
+
+msgid "E170: Missing :endwhile"
+msgstr "E170: :endwhile ޤ"
+
+msgid "E170: Missing :endfor"
+msgstr "E170: :endfor ޤ"
+
+msgid "E588: :endwhile without :while"
+msgstr "E588: :while Τʤ :endwhile ޤ"
+
+msgid "E588: :endfor without :for"
+msgstr "E588: :endfor Τʤ :for ޤ"
+
+msgid "E13: File exists (add ! to override)"
+msgstr "E13: ե뤬¸ߤޤ (! ɲäǾ)"
+
+msgid "E472: Command failed"
+msgstr "E472: ޥɤԤޤ"
+
+#, c-format
+msgid "E234: Unknown fontset: %s"
+msgstr "E234: ̤ΤΥեȥå: %s"
+
+#, c-format
+msgid "E235: Unknown font: %s"
+msgstr "E235: ̤ΤΥե: %s"
+
+#, c-format
+msgid "E236: Font \"%s\" is not fixed-width"
+msgstr "E236: ե \"%s\" ϸǤϤޤ"
+
+msgid "E473: Internal error"
+msgstr "E473: 顼Ǥ"
+
+msgid "Interrupted"
+msgstr "ޤޤ"
+
+msgid "E14: Invalid address"
+msgstr "E14: ̵ʥɥ쥹Ǥ"
+
+msgid "E474: Invalid argument"
+msgstr "E474: ̵ʰǤ"
+
+#, c-format
+msgid "E475: Invalid argument: %s"
+msgstr "E475: ̵ʰǤ: %s"
+
+#, c-format
+msgid "E15: Invalid expression: %s"
+msgstr "E15: ̵ʼǤ: %s"
+
+msgid "E16: Invalid range"
+msgstr "E16: ̵ϰϤǤ"
+
+msgid "E476: Invalid command"
+msgstr "E476: ̵ʥޥɤǤ"
+
+#, c-format
+msgid "E17: \"%s\" is a directory"
+msgstr "E17: \"%s\" ϥǥ쥯ȥǤ"
+
+#, c-format
+msgid "E364: Library call failed for \"%s()\""
+msgstr "E364: \"%s\"() Υ饤֥ƽФ˼Ԥޤ"
+
+#, c-format
+msgid "E448: Could not load library function %s"
+msgstr "E448: 饤֥δؿ %s ɤǤޤǤ"
+
+msgid "E19: Mark has invalid line number"
+msgstr "E19: ޡ̵ʹֹ椬ꤵƤޤ"
+
+msgid "E20: Mark not set"
+msgstr "E20: ޡꤵƤޤ"
+
+msgid "E21: Cannot make changes, 'modifiable' is off"
+msgstr "E21: 'modifiable' դʤΤ, ѹǤޤ"
+
+msgid "E22: Scripts nested too deep"
+msgstr "E22: ץȤҤ᤮ޤ"
+
+msgid "E23: No alternate file"
+msgstr "E23: եϤޤ"
+
+msgid "E24: No such abbreviation"
+msgstr "E24: Τ褦ûϤϤޤ"
+
+msgid "E477: No ! allowed"
+msgstr "E477: ! ϵĤƤޤ"
+
+msgid "E25: GUI cannot be used: Not enabled at compile time"
+msgstr "E25: GUIϻԲǽǤ: ѥ̵ˤƤޤ"
+
+msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
+msgstr "E26: إ֥饤ϻԲǽǤ: ѥ̵ˤƤޤ\n"
+
+msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
+msgstr "E27: ڥ륷ϻԲǽǤ: ѥ̵ˤƤޤ\n"
+
+msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
+msgstr "E800: ӥϻԲǽǤ: ѥ̵ˤƤޤ\n"
+
+#, c-format
+msgid "E28: No such highlight group name: %s"
+msgstr "E28: Τ褦̾Υϥ饤ȥ롼פϤޤ: %s"
+
+msgid "E29: No inserted text yet"
+msgstr "E29: ޤƥȤƤޤ"
+
+msgid "E30: No previous command line"
+msgstr "E30: ˥ޥɹԤޤ"
+
+msgid "E31: No such mapping"
+msgstr "E31: Τ褦ʥޥåԥ󥰤Ϥޤ"
+
+msgid "E479: No match"
+msgstr "E479: Ϥޤ"
+
+#, c-format
+msgid "E480: No match: %s"
+msgstr "E480: Ϥޤ: %s"
+
+msgid "E32: No file name"
+msgstr "E32: ե̾ޤ"
+
+msgid "E33: No previous substitute regular expression"
+msgstr "E33: ɽִޤ¹ԤƤޤ"
+
+msgid "E34: No previous command"
+msgstr "E34: ޥɤޤ¹ԤƤޤ"
+
+msgid "E35: No previous regular expression"
+msgstr "E35: ɽޤ¹ԤƤޤ"
+
+msgid "E481: No range allowed"
+msgstr "E481: ϰϻϵĤƤޤ"
+
+msgid "E36: Not enough room"
+msgstr "E36: ɥ˽ʬʹ⤵⤷ޤ"
+
+#, c-format
+msgid "E247: no registered server named \"%s\""
+msgstr "E247: %s Ȥ̾Ͽ줿ФϤޤ"
+
+#, c-format
+msgid "E482: Can't create file %s"
+msgstr "E482: ե %s Ǥޤ"
+
+msgid "E483: Can't get temp file name"
+msgstr "E483: ե̾Ǥޤ"
+
+#, c-format
+msgid "E484: Can't open file %s"
+msgstr "E484: ե \"%s\" 򳫤ޤ"
+
+#, c-format
+msgid "E485: Can't read file %s"
+msgstr "E485: ե %s ɹޤ"
+
+msgid "E37: No write since last change (add ! to override)"
+msgstr "E37: Ǹѹ¸Ƥޤ (! ɲäѹ˴)"
+
+msgid "E38: Null argument"
+msgstr "E38: Ǥ"
+
+msgid "E39: Number expected"
+msgstr "E39: ͤ׵ᤵƤޤ"
+
+#, c-format
+msgid "E40: Can't open errorfile %s"
+msgstr "E40: 顼ե %s 򳫤ޤ"
+
+msgid "E233: cannot open display"
+msgstr "E233: ǥץ쥤򳫤ޤ"
+
+msgid "E41: Out of memory!"
+msgstr "E41: ꤬Ԥ̤Ƥޤ!"
+
+msgid "Pattern not found"
+msgstr "ѥϸĤޤǤ"
+
+#, c-format
+msgid "E486: Pattern not found: %s"
+msgstr "E486: ѥϸĤޤǤ: %s"
+
+msgid "E487: Argument must be positive"
+msgstr "E487: ͤǤʤФʤޤ"
+
+msgid "E459: Cannot go back to previous directory"
+msgstr "E459: Υǥ쥯ȥޤ"
+
+msgid "E42: No Errors"
+msgstr "E42: 顼Ϥޤ"
+
+msgid "E776: No location list"
+msgstr "E776: ꥹȤϤޤ"
+
+msgid "E43: Damaged match string"
+msgstr "E43: ʸ»Ƥޤ"
+
+msgid "E44: Corrupted regexp program"
+msgstr "E44: ɽץǤ"
+
+msgid "E45: 'readonly' option is set (add ! to override)"
+msgstr "E45: 'readonly' ץꤵƤޤ (! ɲäǾ)"
+
+#, c-format
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: ɼѿ \"%s\" ˤͤǤޤ"
+
+#, c-format
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: ɥܥåǤѿ \"%s\" ͤǤޤ"
+
+msgid "E47: Error while reading errorfile"
+msgstr "E47: 顼եɹ˥顼ȯޤ"
+
+msgid "E48: Not allowed in sandbox"
+msgstr "E48: ɥܥåǤϵޤ"
+
+msgid "E523: Not allowed here"
+msgstr "E523: ǤϵĤޤ"
+
+msgid "E359: Screen mode setting not supported"
+msgstr "E359: ꡼⡼ɤˤбƤޤ"
+
+msgid "E49: Invalid scroll size"
+msgstr "E49: ̵ʥ̤Ǥ"
+
+msgid "E91: 'shell' option is empty"
+msgstr "E91: 'shell' ץ󤬶Ǥ"
+
+msgid "E255: Couldn't read in sign data!"
+msgstr "E255: sign ΥǡɹޤǤ"
+
+msgid "E72: Close error on swap file"
+msgstr "E72: åץեΥ顼Ǥ"
+
+msgid "E73: tag stack empty"
+msgstr "E73: åǤ"
+
+msgid "E74: Command too complex"
+msgstr "E74: ޥɤʣ᤮ޤ"
+
+msgid "E75: Name too long"
+msgstr "E75: ̾Ĺ᤮ޤ"
+
+msgid "E76: Too many ["
+msgstr "E76: [ ¿᤮ޤ"
+
+msgid "E77: Too many file names"
+msgstr "E77: ե̾¿᤮ޤ"
+
+msgid "E488: Trailing characters"
+msgstr "E488: ;ʬʸˤޤ"
+
+msgid "E78: Unknown mark"
+msgstr "E78: ̤ΤΥޡ"
+
+msgid "E79: Cannot expand wildcards"
+msgstr "E79: 磻ɥɤŸǤޤ"
+
+msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
+msgstr "E591: 'winheight'  'winminheight' 꾮Ǥޤ"
+
+msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
+msgstr "E592: 'winwidth'  'winminwidth' 꾮Ǥޤ"
+
+msgid "E80: Error while writing"
+msgstr "E80: Υ顼"
+
+msgid "Zero count"
+msgstr ""
+
+msgid "E81: Using <SID> not in a script context"
+msgstr "E81: ץȰʳ<SID>Ȥޤ"
+
+msgid "E449: Invalid expression received"
+msgstr "E449: ̵ʼޤ"
+
+msgid "E463: Region is guarded, cannot modify"
+msgstr "E463: ΰ褬ݸƤΤ, ѹǤޤ"
+
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans ɹѥեѹ뤳Ȥޤ"
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: 顼Ǥ: %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: ѥ 'maxmempattern' ʾΥѤޤ"
+
+msgid "E749: empty buffer"
+msgstr "E749: ХåեǤ"
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: ѥ󤫶ڤ국椬Ǥ"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: Ʊ̾Υե뤬¾ΥХåեɹޤƤޤ"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: ץ '%s' ꤵƤޤ"
+
+msgid "E850: Invalid register name"
+msgstr "E850: ̵ʥ쥸̾Ǥ"
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "ޤǸΤǲޤ"
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "ޤǸΤǾޤ"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "Ź業ɬפǤ: \"%s\""
+
+msgid "can't delete OutputObject attributes"
+msgstr "OutputObject°äޤ"
+
+msgid "softspace must be an integer"
+msgstr "softspace  integer ǤʤФʤޤ"
+
+msgid "invalid attribute"
+msgstr "̵°Ǥ"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines() ˤʸΥꥹȤɬפǤ"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: I/O֥Ȥν顼"
+
+msgid "empty keys are not allowed"
+msgstr "ΥϵĤƤޤ"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "DictionaryObject°äޤ"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "ꤵ줿ѹǤޤ"
+
+msgid "Cannot set this attribute"
+msgstr "°Ǥޤ"
+
+msgid "dict is locked"
+msgstr "ϥåƤޤ"
+
+msgid "failed to add key to dictionary"
+msgstr "ؤΥɲä˼Ԥޤ"
+
+msgid "list index out of range"
+msgstr "ꥹϰϳΥǥåǤ"
+
+msgid "internal error: failed to get vim list item"
+msgstr "顼: vimΥꥹǤμ˼Ԥޤ"
+
+msgid "list is locked"
+msgstr "ꥹȤϥåƤޤ"
+
+msgid "Failed to add item to list"
+msgstr "ꥹȤؤɲä˼Ԥޤ"
+
+msgid "internal error: no vim list item"
+msgstr "顼: vimΥꥹǤޤ"
+
+msgid "can only assign lists to slice"
+msgstr "饤ˤϥꥹȤǤޤ"
+
+msgid "internal error: failed to add item to list"
+msgstr "顼: ꥹȤؤɲä˼Ԥޤ"
+
+msgid "can only concatenate with lists"
+msgstr "ꥹȤȤΤ³Ǥޤ"
+
+msgid "cannot delete vim.dictionary attributes"
+msgstr "vim.dictionary°Ͼäޤ"
+
+msgid "cannot modify fixed list"
+msgstr "ꤵ줿ꥹȤѹǤޤ"
+
+msgid "cannot set this attribute"
+msgstr "°Ǥޤ"
+
+msgid "'self' argument must be a dictionary"
+msgstr "'self' ϼ񷿤ͤǤʤФʤޤ"
+
+msgid "failed to run function"
+msgstr "ؿμ¹Ԥ˼Ԥޤ"
+
+msgid "unable to get option value"
+msgstr "ץͤϼǤޤ"
+
+msgid "unable to unset global option"
+msgstr "Х륪ץϤǤޤ"
+
+msgid "unable to unset option without global value"
+msgstr "ХѿȤ鷺˥ץϤǤޤ"
+
+msgid "object must be integer"
+msgstr "֥ȤǤʤФʤޤ"
+
+msgid "object must be string"
+msgstr "֥ȤʸǤʤФʤޤ"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "줿֤򻲾Ȥ褦Ȥޤ"
+
+#, c-format
+msgid "<tabpage object (deleted) at %p>"
+msgstr "<֥ڡ֥ (õѤ) %p>"
+
+#, c-format
+msgid "<tabpage object (unknown) at %p>"
+msgstr "<֥ڡ֥ () %p>"
+
+#, c-format
+msgid "<tabpage %d>"
+msgstr "<֥ڡ %d>"
+
+msgid "no such tab page"
+msgstr "Τ褦ʥ֥ڡϤޤ"
+
+msgid "attempt to refer to deleted window"
+msgstr "줿ɥ򻲾Ȥ褦Ȥޤ"
+
+msgid "readonly attribute"
+msgstr "ɹ°"
+
+msgid "cursor position outside buffer"
+msgstr "֤Хåեγ¦Ǥ"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<ɥ֥ (õѤ) %p>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<ɥ֥ () %p>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<ɥ %d>"
+
+msgid "no such window"
+msgstr "Τ褦ʥɥϤޤ"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "줿Хåե򻲾Ȥ褦Ȥޤ"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<Хåե֥ (õѤ) %p>"
+
+msgid "key must be integer"
+msgstr "ͤǤʤФʤޤ"
+
+msgid "expected vim.buffer object"
+msgstr "vim.buffer֥ȤԤƤޤ"
+
+msgid "failed to switch to given buffer"
+msgstr "ꤵ줿Хåեؤڤؤ˼Ԥޤ"
+
+msgid "expected vim.window object"
+msgstr "vim.window֥ȤԤƤޤ"
+
+msgid "failed to find window in the current tab page"
+msgstr "ߤΥ֤ˤϻꤵ줿ɥޤǤ"
+
+msgid "did not switch to the specified window"
+msgstr "ꤵ줿ɥڤؤޤǤ"
+
+msgid "expected vim.tabpage object"
+msgstr "vim.tabpage֥ȤԤƤޤ"
+
+msgid "did not switch to the specified tab page"
+msgstr "ꤵ줿֥ڡڤؤޤǤ"
+
+msgid "unable to convert to vim structure"
+msgstr "vimι¤ΤѴǤޤ"
+
+msgid "NULL reference passed"
+msgstr "NULLȤϤޤ"
+
+msgid "internal error: invalid value type"
+msgstr "顼: ̵ͷǤ"
diff -Naur vim73.orig/src/po/ja.po vim73/src/po/ja.po
--- vim73.orig/src/po/ja.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/ja.po	2013-08-04 19:09:10.637277112 +0000
@@ -3,525 +3,578 @@
 # Do ":help uganda"  in Vim to read copying and usage conditions.
 # Do ":help credits" in Vim to see a list of people who contributed.
 #
-# MURAOKA Taro <koron.kaoriya@gmail.com>, 2001-8.
-# Last Change: 31-May-2008.
+# Last Change: 2013 May 19
+#
+# Copyright (C) 2001-12 MURAOKA Taro <koron.kaoriya@gmail.com>
+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+#
+# Original translations.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 7.1\n"
+"Project-Id-Version: Vim 7.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-05-31 22:00+0900\n"
-"PO-Revision-Date: 2008-05-31 22:30+0900\n"
+"POT-Creation-Date: 2013-05-19 12:20+0900\n"
+"PO-Revision-Date: 2013-05-19 12:30+0900\n"
 "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
 "Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language: Japanese\n"
 "MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=euc-jp\n"
+"Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() が空パスワードで呼び出されました"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: Blowfish暗号のビッグ/リトルエンディアンが間違っています"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256のテストに失敗しました"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish暗号のテストに失敗しました"
+
+msgid "[Location List]"
+msgstr "[場所リスト]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfixリスト]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: autocommandがコマンドの停止を引き起こしました"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: Хåե1ĤǤʤΤ, λޤ..."
+msgstr "E82: バッファを1つも作成できないので, 終了します..."
 
 msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: ХåեǤʤΤ, ¾ΤѤޤ..."
+msgstr "E83: バッファを作成できないので, 他のを使用します..."
 
 msgid "E515: No buffers were unloaded"
-msgstr "E515: 줿ХåեϤޤ"
+msgstr "E515: 解放されたバッファはありません"
 
 msgid "E516: No buffers were deleted"
-msgstr "E516: 줿ХåեϤޤ"
+msgstr "E516: 削除されたバッファはありません"
 
 msgid "E517: No buffers were wiped out"
-msgstr "E517: ˴줿ХåեϤޤ"
+msgstr "E517: 破棄されたバッファはありません"
 
 msgid "1 buffer unloaded"
-msgstr "1 ĤΥХåեޤ"
+msgstr "1 個のバッファが解放されました"
 
 #, c-format
 msgid "%d buffers unloaded"
-msgstr "%d ĤΥХåեޤ"
+msgstr "%d 個のバッファが解放されました"
 
 msgid "1 buffer deleted"
-msgstr "1 ĤΥХåեޤ"
+msgstr "1 個のバッファが削除されました"
 
 #, c-format
 msgid "%d buffers deleted"
-msgstr "%d ĤΥХåեޤ"
+msgstr "%d 個のバッファが削除されました"
 
 msgid "1 buffer wiped out"
-msgstr "1 ĤΥХåե˴ޤ"
+msgstr "1 個のバッファが破棄されました"
 
 #, c-format
 msgid "%d buffers wiped out"
-msgstr "%d ĤΥХåե˴ޤ"
+msgstr "%d 個のバッファが破棄されました"
 
 msgid "E84: No modified buffer found"
-msgstr "E84: ѹ줿ХåեϤޤ"
+msgstr "E84: 変更されたバッファはありません"
 
 #. back where we started, didn't find anything.
 msgid "E85: There is no listed buffer"
-msgstr "E85: ꥹɽХåեϤޤ"
+msgstr "E85: リスト表示されるバッファはありません"
 
 #, c-format
 msgid "E86: Buffer %ld does not exist"
-msgstr "E86: Хåե %ld Ϥޤ"
+msgstr "E86: バッファ %ld はありません"
 
 msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: ǸΥХåեۤưưϤǤޤ"
+msgstr "E87: 最後のバッファを越えて移動はできません"
 
 msgid "E88: Cannot go before first buffer"
-msgstr "E88: ǽΥХåեؤϰưǤޤ"
+msgstr "E88: 最初のバッファより前へは移動できません"
 
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr "E89: Хåե %ld ѹ¸Ƥޤ (! ѹ˴)"
+msgstr "E89: バッファ %ld の変更は保存されていません (! で変更を破棄)"
 
 msgid "E90: Cannot unload last buffer"
-msgstr "E90: ǸΥХåեϲǤޤ"
+msgstr "E90: 最後のバッファは解放できません"
 
 msgid "W14: Warning: List of file names overflow"
-msgstr "W14: ٹ: ե̾ΥꥹȤĹ᤮ޤ"
+msgstr "W14: 警告: ファイル名のリストが長過ぎます"
 
 #, c-format
 msgid "E92: Buffer %ld not found"
-msgstr "E92: Хåե %ld ߤĤޤ"
+msgstr "E92: バッファ %ld が見つかりません"
 
 #, c-format
 msgid "E93: More than one match for %s"
-msgstr "E93: %s ʣγޤ"
+msgstr "E93: %s に複数の該当がありました"
 
 #, c-format
 msgid "E94: No matching buffer for %s"
-msgstr "E94: %s ˳ХåեϤޤǤ"
+msgstr "E94: %s に該当するバッファはありませんでした"
 
 #, c-format
 msgid "line %ld"
-msgstr " %ld"
+msgstr "行 %ld"
 
 msgid "E95: Buffer with this name already exists"
-msgstr "E95: ̾ΥХåեϴˤޤ"
+msgstr "E95: この名前のバッファは既にあります"
 
 msgid " [Modified]"
-msgstr " [ѹ]"
+msgstr " [変更あり]"
 
 msgid "[Not edited]"
-msgstr "[̤Խ]"
+msgstr "[未編集]"
 
 msgid "[New file]"
-msgstr "[ե]"
+msgstr "[新ファイル]"
 
 msgid "[Read errors]"
-msgstr "[ɹ顼]"
+msgstr "[読込エラー]"
 
 msgid "[readonly]"
-msgstr "[ɹ]"
+msgstr "[読込専用]"
 
 #, c-format
 msgid "1 line --%d%%--"
-msgstr "1  --%d%%--"
+msgstr "1 行 --%d%%--"
 
 #, c-format
 msgid "%ld lines --%d%%--"
-msgstr "%ld  --%d%%--"
+msgstr "%ld 行 --%d%%--"
 
 #, c-format
 msgid "line %ld of %ld --%d%%-- col "
-msgstr " %ld ( %ld) --%d%%-- col "
+msgstr "行 %ld (全体 %ld) --%d%%-- col "
 
 msgid "[No Name]"
-msgstr "[̵̾]"
+msgstr "[無名]"
 
 #. must be a help buffer
 msgid "help"
-msgstr "إ"
+msgstr "ヘルプ"
 
 msgid "[Help]"
-msgstr "[إ]"
+msgstr "[ヘルプ]"
 
 msgid "[Preview]"
-msgstr "[ץӥ塼]"
+msgstr "[プレビュー]"
 
 msgid "All"
-msgstr ""
+msgstr "全て"
 
 msgid "Bot"
-msgstr ""
+msgstr "末尾"
 
 msgid "Top"
-msgstr "Ƭ"
+msgstr "先頭"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
 msgstr ""
 "\n"
-"# Хåեꥹ:\n"
-
-msgid "[Location List]"
-msgstr "[ꥹ]"
+"# バッファリスト:\n"
 
-msgid "[Quickfix List]"
-msgstr "[Quickfixꥹ]"
+msgid "[Scratch]"
+msgstr "[下書き]"
 
 msgid ""
 "\n"
 "--- Signs ---"
 msgstr ""
 "\n"
-"---  ---"
+"--- サイン ---"
 
 #, c-format
 msgid "Signs for %s:"
-msgstr "%s Υ:"
+msgstr "%s のサイン:"
 
 #, c-format
 msgid "    line=%ld  id=%d  name=%s"
-msgstr "    =%ld  ̻=%d  ̾=%s"
+msgstr "    行=%ld  識別子=%d  名前=%s"
 
 #, c-format
 msgid "E96: Can not diff more than %ld buffers"
-msgstr "E96: %ld ʾΥХåեdiffǤޤ"
+msgstr "E96: %ld 以上のバッファはdiffできません"
+
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: 一時ファイルの読込もしくは書込ができません"
 
 msgid "E97: Cannot create diffs"
-msgstr "E97: ʬǤޤ "
+msgstr "E97: 差分を作成できません "
 
 msgid "Patch file"
-msgstr "ѥåե"
+msgstr "パッチファイル"
+
+msgid "E816: Cannot read patch output"
+msgstr "E816: patchの出力を読込めません"
 
 msgid "E98: Cannot read diff output"
-msgstr "E98: diffνϤɹޤ"
+msgstr "E98: diffの出力を読込めません"
 
 msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: ߤΥХåեϺʬ⡼ɤǤϤޤ"
+msgstr "E99: 現在のバッファは差分モードではありません"
 
 msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: ʬ⡼ɤǤ¾ΥХåեѹǽǤ"
+msgstr "E793: 差分モードである他のバッファは変更可能です"
 
 msgid "E100: No other buffer in diff mode"
-msgstr "E100: ʬ⡼ɤǤ¾ΥХåեϤޤ"
+msgstr "E100: 差分モードである他のバッファはありません"
 
 msgid "E101: More than two buffers in diff mode, don't know which one to use"
 msgstr ""
-"E101: ʬ⡼ɤΥХåե2İʾ夢ΤǡɤȤǤޤ"
+"E101: 差分モードのバッファが2個以上あるので、どれを使うか特定できません"
 
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: Хåե \"%s\" ߤĤޤ"
+msgstr "E102: バッファ \"%s\" が見つかりません"
 
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Хåե \"%s\" Ϻʬ⡼ɤǤϤޤ"
+msgstr "E103: バッファ \"%s\" は差分モードではありません"
 
 msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: ͽХåեѹѹޤ"
+msgstr "E787: 予期せずバッファが変更変更されました"
 
 msgid "E104: Escape not allowed in digraph"
-msgstr "E104: EscapeϻѤǤޤ"
+msgstr "E104: 合字にEscapeは使用できません"
 
 msgid "E544: Keymap file not found"
-msgstr "E544: ޥåץե뤬ߤĤޤ"
+msgstr "E544: キーマップファイルが見つかりません"
 
 msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: :source ǼեʳǤ :loadkeymap Ȥޤ"
+msgstr "E105: :source で取込むファイル以外では :loadkeymap を使えません"
 
 msgid "E791: Empty keymap entry"
-msgstr "E791: Υޥåץȥ"
+msgstr "E791: 空のキーマップエントリ"
 
 msgid " Keyword completion (^N^P)"
-msgstr " 䴰 (^N^P)"
+msgstr " キーワード補完 (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
 msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X ⡼ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " ^X モード (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
-msgstr " ()䴰 (^L^N^P)"
+msgstr " 行(全体)補完 (^L^N^P)"
 
 msgid " File name completion (^F^N^P)"
-msgstr "ե̾䴰 (^F^N^P)"
+msgstr "ファイル名補完 (^F^N^P)"
 
 msgid " Tag completion (^]^N^P)"
-msgstr " 䴰 (^]^N^P)"
+msgstr " タグ補完 (^]^N^P)"
 
 msgid " Path pattern completion (^N^P)"
-msgstr " ѥѥ䴰 (^N^P)"
+msgstr " パスパターン補完 (^N^P)"
 
 msgid " Definition completion (^D^N^P)"
-msgstr " 䴰 (^D^N^P)"
+msgstr " 定義補完 (^D^N^P)"
 
 msgid " Dictionary completion (^K^N^P)"
-msgstr " 䴰 (^K^N^P)"
+msgstr " 辞書補完 (^K^N^P)"
 
 msgid " Thesaurus completion (^T^N^P)"
-msgstr " 饹䴰 (^T^N^P)"
+msgstr " シソーラス補完 (^T^N^P)"
 
 msgid " Command-line completion (^V^N^P)"
-msgstr " ޥɥ饤䴰 (^V^N^P)"
+msgstr " コマンドライン補完 (^V^N^P)"
 
 msgid " User defined completion (^U^N^P)"
-msgstr " 桼䴰 (^U^N^P)"
+msgstr " ユーザ定義補完 (^U^N^P)"
 
 msgid " Omni completion (^O^N^P)"
-msgstr " 䴰 (^O^N^P)"
+msgstr " オムニ補完 (^O^N^P)"
 
 msgid " Spelling suggestion (s^N^P)"
-msgstr " ֤꽤 (s^N^P)"
+msgstr " 綴り修正候補 (s^N^P)"
 
 msgid " Keyword Local completion (^N^P)"
-msgstr " ɽꥭ䴰 (^N^P)"
+msgstr " 局所キーワード補完 (^N^P)"
 
 msgid "Hit end of paragraph"
-msgstr "κǸ˥ҥå"
+msgstr "段落の最後にヒット"
+
+msgid "E839: Completion function changed window"
+msgstr "E839: 補間関数がウィンドウを変更しました"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: 補完関数がテキストを削除しました"
 
 msgid "'dictionary' option is empty"
-msgstr "'dictionary' ץ󤬶Ǥ"
+msgstr "'dictionary' オプションが空です"
 
 msgid "'thesaurus' option is empty"
-msgstr "'thesaurus' ץ󤬶Ǥ"
+msgstr "'thesaurus' オプションが空です"
 
 #, c-format
 msgid "Scanning dictionary: %s"
-msgstr "򥹥: %s"
+msgstr "辞書をスキャン中: %s"
 
 msgid " (insert) Scroll (^E/^Y)"
-msgstr " () (^E/^Y)"
+msgstr " (挿入) スクロール(^E/^Y)"
 
 msgid " (replace) Scroll (^E/^Y)"
-msgstr " (ִ)  (^E/^Y)"
+msgstr " (置換) スクロール (^E/^Y)"
 
 #, c-format
 msgid "Scanning: %s"
-msgstr ": %s"
+msgstr "スキャン中: %s"
 
-#, c-format
 msgid "Scanning tags."
-msgstr "򥹥."
+msgstr "タグをスキャン中."
 
 msgid " Adding"
-msgstr " ɲ"
+msgstr " 追加中"
 
 #. showmode might reset the internal line pointers, so it must
 #. * be called before line = ml_get(), or when this address is no
 #. * longer needed.  -- Acevedo.
 #.
 msgid "-- Searching..."
-msgstr "-- ..."
+msgstr "-- 検索中..."
 
 msgid "Back at original"
-msgstr "Ϥ"
+msgstr "始めに戻る"
 
 msgid "Word from other line"
-msgstr "¾ιԤñ"
+msgstr "他の行の単語"
 
 msgid "The only match"
-msgstr "ͣγ"
+msgstr "唯一の該当"
 
 #, c-format
 msgid "match %d of %d"
-msgstr "%d ܤγ ( %d )"
+msgstr "%d 番目の該当 (全該当 %d 個中)"
 
 #, c-format
 msgid "match %d"
-msgstr "%d ܤγ"
+msgstr "%d 番目の該当"
 
 msgid "E18: Unexpected characters in :let"
-msgstr "E18: ͽʸ :let ˤޤ"
+msgstr "E18: 予期せぬ文字が :let にありました"
 
 #, c-format
 msgid "E684: list index out of range: %ld"
-msgstr "E684: ꥹȤΥǥåϰϳǤ: %ld"
+msgstr "E684: リストのインデックスが範囲外です: %ld"
 
 #, c-format
 msgid "E121: Undefined variable: %s"
-msgstr "E121: ̤ѿǤ: %s"
+msgstr "E121: 未定義の変数です: %s"
 
 msgid "E111: Missing ']'"
-msgstr "E111: ']' ߤĤޤ"
+msgstr "E111: ']' が見つかりません"
 
 #, c-format
 msgid "E686: Argument of %s must be a List"
-msgstr "E686: %s ΰϥꥹȷǤʤФʤޤ"
+msgstr "E686: %s の引数はリスト型でなければなりません"
 
 #, c-format
 msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: %s ΰϥꥹȷޤϼ񷿤ǤʤФʤޤ"
+msgstr "E712: %s の引数はリスト型または辞書型でなければなりません"
 
 msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: 񷿤˶ΥȤȤϤǤޤ"
+msgstr "E713: 辞書型に空のキーを使うことはできません"
 
 msgid "E714: List required"
-msgstr "E714: ꥹȷɬפǤ"
+msgstr "E714: リスト型が必要です"
 
 msgid "E715: Dictionary required"
-msgstr "E715: 񷿤ɬפǤ"
+msgstr "E715: 辞書型が必要です"
 
 #, c-format
 msgid "E118: Too many arguments for function: %s"
-msgstr "E118: ؿΰ¿᤮ޤ: %s"
+msgstr "E118: 関数の引数が多過ぎます: %s"
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: 񷿤˥¸ߤޤ: %s"
+msgstr "E716: 辞書型にキーが存在しません: %s"
 
 #, c-format
 msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: ؿ %s ѤǤ, ˤ ! ɲäƤ"
+msgstr "E122: 関数 %s は定義済です, 再定義するには ! を追加してください"
 
 msgid "E717: Dictionary entry already exists"
-msgstr "E717: ˥ȥ꤬¸ߤޤ"
+msgstr "E717: 辞書型内にエントリが既に存在します"
 
 msgid "E718: Funcref required"
-msgstr "E718: ؿȷ׵ᤵޤ"
+msgstr "E718: 関数参照型が要求されます"
 
 msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: [:] 򼭽񷿤Ȥ߹碌ƤϻȤޤ"
+msgstr "E719: [:] を辞書型と組み合わせては使えません"
 
 #, c-format
 msgid "E734: Wrong variable type for %s="
-msgstr "E734: ۤʤäѿǤ %s="
+msgstr "E734: 異なった型の変数です %s="
 
 #, c-format
 msgid "E130: Unknown function: %s"
-msgstr "E130: ̤ΤδؿǤ: %s"
+msgstr "E130: 未知の関数です: %s"
 
 #, c-format
 msgid "E461: Illegal variable name: %s"
-msgstr "E461: ѿ̾Ǥ: %s"
+msgstr "E461: 不正な変数名です: %s"
 
 msgid "E687: Less targets than List items"
-msgstr "E687: åȤꥹȷǤ⾯ʤǤ"
+msgstr "E687: ターゲットがリスト型内の要素よりも少ないです"
 
 msgid "E688: More targets than List items"
-msgstr "E688: åȤꥹȷǤ¿Ǥ"
+msgstr "E688: ターゲットがリスト型内の要素よりも多いです"
 
 msgid "Double ; in list of variables"
-msgstr "ꥹȷͤ2İʾ ; Фޤ"
+msgstr "リスト型の値に2つ以上の ; が検出されました"
 
 #, c-format
 msgid "E738: Can't list variables for %s"
-msgstr "E738: %s ͤɽǤޤ"
+msgstr "E738: %s の値を一覧表示できません"
 
 msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: ꥹȷȼ񷿰ʳϥǥåǤޤ"
+msgstr "E689: リスト型と辞書型以外はインデックス指定できません"
 
 msgid "E708: [:] must come last"
-msgstr "E708: [:] ϺǸǤʤФޤ"
+msgstr "E708: [:] は最後でなければいけません"
 
 msgid "E709: [:] requires a List value"
-msgstr "E709: [:] ˤϥꥹȷͤɬפǤ"
+msgstr "E709: [:] にはリスト型の値が必要です"
 
 msgid "E710: List value has more items than target"
-msgstr "E710: ꥹȷѿ˥åȤ¿Ǥޤ"
+msgstr "E710: リスト型変数にターゲットよりも多い要素があります"
 
 msgid "E711: List value has not enough items"
-msgstr "E711: ꥹȷѿ˽ʬʿǤޤ"
+msgstr "E711: リスト型変数に十分な数の要素がありません"
 
 #
 msgid "E690: Missing \"in\" after :for"
-msgstr "E690: :for θ \"in\" ޤ"
+msgstr "E690: :for の後に \"in\" がありません"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
-msgstr "E107: å '(' ޤ: %s"
+msgstr "E107: カッコ '(' がありません: %s"
 
 #, c-format
 msgid "E108: No such variable: \"%s\""
-msgstr "E108: ѿϤޤ: \"%s\""
+msgstr "E108: その変数はありません: \"%s\""
 
 msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: ()åˤѿҤ᤮ޤ"
+msgstr "E743: (アン)ロックするには変数の入れ子が深過ぎます"
 
 msgid "E109: Missing ':' after '?'"
-msgstr "E109: '?' θ ':' ޤ"
+msgstr "E109: '?' の後に ':' がありません"
 
 msgid "E691: Can only compare List with List"
-msgstr "E691: ꥹȷϥꥹȷȤӤǤޤ"
+msgstr "E691: リスト型はリスト型としか比較できません"
 
 msgid "E692: Invalid operation for Lists"
-msgstr "E692: ꥹȷˤ̵Ǥ"
+msgstr "E692: リスト型には無効な操作です"
 
 msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: 񷿤ϼ񷿤ȤӤǤޤ"
+msgstr "E735: 辞書型は辞書型としか比較できません"
 
 msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: 񷿤ˤ̵Ǥ"
+msgstr "E736: 辞書型には無効な操作です"
 
 msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: ؿȷϴؿȷȤӤǤޤ"
+msgstr "E693: 関数参照型は関数参照型としか比較できません"
 
 msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: ؿȷˤ̵Ǥ"
+msgstr "E694: 関数参照型には無効な操作です"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: '%' を浮動小数点数と組み合わせては使えません"
 
 msgid "E110: Missing ')'"
-msgstr "E110: ')' ߤĤޤ"
+msgstr "E110: ')' が見つかりません"
 
 msgid "E695: Cannot index a Funcref"
-msgstr "E695: ؿȷϥǥåǤޤ"
+msgstr "E695: 関数参照型はインデックスできません"
 
 #, c-format
 msgid "E112: Option name missing: %s"
-msgstr "E112: ץ̾ޤ: %s"
+msgstr "E112: オプション名がありません: %s"
 
 #, c-format
 msgid "E113: Unknown option: %s"
-msgstr "E113: ̤ΤΥץǤ: %s"
+msgstr "E113: 未知のオプションです: %s"
 
 #, c-format
 msgid "E114: Missing quote: %s"
-msgstr "E114:  (\") ޤ: %s"
+msgstr "E114: 引用符 (\") がありません: %s"
 
 #, c-format
 msgid "E115: Missing quote: %s"
-msgstr "E115:  (') ޤ: %s"
+msgstr "E115: 引用符 (') がありません: %s"
 
 #, c-format
 msgid "E696: Missing comma in List: %s"
-msgstr "E696: ꥹȷ˥ޤޤ: %s"
+msgstr "E696: リスト型にカンマがありません: %s"
 
 #, c-format
 msgid "E697: Missing end of List ']': %s"
-msgstr "E697: ꥹȷκǸ ']' ޤ: %s"
+msgstr "E697: リスト型の最後に ']' がありません: %s"
 
 #, c-format
 msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: 񷿤˥󤬤ޤ: %s"
+msgstr "E720: 辞書型にコロンがありません: %s"
 
 #, c-format
 msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: 񷿤˽ʣޤ: \"%s\""
+msgstr "E721: 辞書型に重複キーがあります: \"%s\""
 
 #, c-format
 msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: 񷿤˥ޤޤ: %s"
+msgstr "E722: 辞書型にカンマがありません: %s"
 
 #, c-format
 msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: 񷿤κǸ '}' ޤ: %s"
+msgstr "E723: 辞書型の最後に '}' がありません: %s"
 
 msgid "E724: variable nested too deep for displaying"
-msgstr "E724: ɽˤѿҤ᤮ޤ"
+msgstr "E724: 表示するには変数の入れ子が深過ぎます"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: 関数の引数が多過ぎます: %s"
+
+#, c-format
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: 関数の無効な引数です: %s"
 
 #, c-format
 msgid "E117: Unknown function: %s"
-msgstr "E117: ̤ΤδؿǤ: %s"
+msgstr "E117: 未知の関数です: %s"
 
 #, c-format
 msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: ؿΰʲ᤮ޤ: %s"
+msgstr "E119: 関数の引数が少な過ぎます: %s"
 
 #, c-format
 msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: ץȰʳ<SID>Ȥޤ: %s"
+msgstr "E120: スクリプト以外で<SID>が使われました: %s"
 
 #, c-format
 msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: ѴؿƤФޤ񤬤ޤ: %s"
+msgstr "E725: 辞書用関数が呼ばれましたが辞書がありません: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: 数値か浮動小数点数が必要です"
+
+msgid "add() argument"
+msgstr "add() の引数"
 
 msgid "E699: Too many arguments"
-msgstr "E699: ¿᤮ޤ"
+msgstr "E699: 引数が多過ぎます"
 
 msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() ⡼ɤǤѤǤޤ"
+msgstr "E785: complete() は挿入モードでしか利用できません"
 
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
@@ -531,176 +584,221 @@
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "extend() argument"
+msgstr "extend() の引数"
+
 #, c-format
 msgid "E737: Key already exists: %s"
-msgstr "E737: %s Ȥϴ¸ߤޤ"
+msgstr "E737: キーは既に存在します: %s"
+
+msgid "map() argument"
+msgstr "map() の引数"
+
+msgid "filter() argument"
+msgstr "filter() の引数"
 
 #, c-format
 msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld :"
+msgstr "+-%s%3ld 行: "
 
 #, c-format
 msgid "E700: Unknown function: %s"
-msgstr "E700: ̤ΤδؿǤ: %s"
+msgstr "E700: 未知の関数です: %s"
 
 msgid ""
 "&OK\n"
 "&Cancel"
 msgstr ""
-"(&O)\n"
-"󥻥(&C)"
+"決定(&O)\n"
+"キャンセル(&C)"
 
 msgid "called inputrestore() more often than inputsave()"
-msgstr "inputrestore()  inputsave() ¿ƤФޤ"
+msgstr "inputrestore() が inputsave() よりも多く呼ばれました"
+
+msgid "insert() argument"
+msgstr "insert() の引数"
 
 msgid "E786: Range not allowed"
-msgstr "E786: ϰϻϵĤƤޤ"
+msgstr "E786: 範囲指定は許可されていません"
 
 msgid "E701: Invalid type for len()"
-msgstr "E701: len() ˤ̵ʷǤ"
+msgstr "E701: len() には無効な型です"
 
 msgid "E726: Stride is zero"
-msgstr "E726: ȥ饤() 0 Ǥ"
+msgstr "E726: ストライド(前進量)が 0 です"
 
 msgid "E727: Start past end"
-msgstr "E727: ϰ֤λ֤ۤޤ"
+msgstr "E727: 開始位置が終了位置を越えました"
 
 msgid "<empty>"
-msgstr "<>"
+msgstr "<空>"
 
 msgid "E240: No connection to Vim server"
-msgstr "E240: Vim Фؤ³ޤ"
+msgstr "E240: Vim サーバへの接続がありません"
 
 #, c-format
 msgid "E241: Unable to send to %s"
-msgstr "E241: %s 뤳ȤǤޤ"
+msgstr "E241: %s へ送ることができません"
 
 msgid "E277: Unable to read a server reply"
-msgstr "E277: Фαޤ"
+msgstr "E277: サーバの応答がありません"
+
+msgid "remove() argument"
+msgstr "remove() の引数"
 
 # Added at 10-Mar-2004.
 msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: ܥå󥯤¿᤮ޤ (۴ĤƤǽޤ)"
+msgstr "E655: シンボリックリンクが多過ぎます (循環している可能性があります)"
+
+msgid "reverse() argument"
+msgstr "reverse() の引数"
 
 msgid "E258: Unable to send to client"
-msgstr "E258: 饤Ȥ뤳ȤǤޤ"
+msgstr "E258: クライアントへ送ることができません"
+
+msgid "sort() argument"
+msgstr "sort() の引数"
 
 msgid "E702: Sort compare function failed"
-msgstr "E702: ȤӴؿԤޤ"
+msgstr "E702: ソートの比較関数が失敗しました"
 
 msgid "(Invalid)"
-msgstr "(̵)"
+msgstr "(無効)"
 
 msgid "E677: Error writing temp file"
-msgstr "E677: ե˥顼ȯޤ"
+msgstr "E677: 一時ファイル書込中にエラーが発生しました"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: 浮動小数点数を数値として扱っています"
 
 msgid "E703: Using a Funcref as a Number"
-msgstr "E703: ؿȷͤȤưäƤޤ"
+msgstr "E703: 関数参照型を数値として扱っています。"
 
 msgid "E745: Using a List as a Number"
-msgstr "E745: ꥹȷͤȤưäƤޤ"
+msgstr "E745: リスト型を数値として扱っています"
 
 msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: 񷿤ͤȤưäƤޤ"
+msgstr "E728: 辞書型を数値として扱っています"
 
 msgid "E729: using Funcref as a String"
-msgstr "E729: ؿȷʸȤưäƤޤ"
+msgstr "E729: 関数参照型を文字列として扱っています"
 
 msgid "E730: using List as a String"
-msgstr "E730: ꥹȷʸȤưäƤޤ"
+msgstr "E730: リスト型を文字列として扱っています"
 
 msgid "E731: using Dictionary as a String"
-msgstr "E731: ѿʸȤưäƤޤ"
+msgstr "E731: 辞書型を文字列として扱っています"
+
+msgid "E806: using Float as a String"
+msgstr "E806: 浮動小数点数を文字列として扱っています"
 
 #, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: ؿȷѿ̾ʸǻϤޤʤФʤޤ: %s"
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: 変数の型が一致しません: %s"
 
 #, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: ѿ̾¸δؿ̾Ⱦͤޤ: %s"
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: 変数 %s を削除できません"
 
 #, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: ѿηפޤ: %s"
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: 関数参照型変数名は大文字で始まらなければなりません: %s"
 
 #, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: ѿ %s Ǥޤ"
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: 変数名が既存の関数名と衝突します: %s"
 
 #, c-format
 msgid "E741: Value is locked: %s"
-msgstr "E741: ͤåƤޤ: %s"
+msgstr "E741: 値がロックされています: %s"
 
 msgid "Unknown"
-msgstr ""
+msgstr "不明"
 
 #, c-format
 msgid "E742: Cannot change value of %s"
-msgstr "E742: %s ͤѹǤޤ"
+msgstr "E742: %s の値を変更できません"
 
 msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: ԡˤѿҤ᤮ޤ"
+msgstr "E698: コピーを取るには変数の入れ子が深過ぎます"
+
+#, c-format
+msgid "E123: Undefined function: %s"
+msgstr "E123: 未定義の関数です: %s"
 
 #, c-format
 msgid "E124: Missing '(': %s"
-msgstr "E124: '(' ޤ: %s"
+msgstr "E124: '(' がありません: %s"
+
+msgid "E862: Cannot use g: here"
+msgstr "E862: ここでは g: は使えません"
 
 #, c-format
 msgid "E125: Illegal argument: %s"
-msgstr "E125: ʰǤ: %s"
+msgstr "E125: 不正な引数です: %s"
+
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: 引数名が重複しています: %s"
 
 msgid "E126: Missing :endfunction"
-msgstr "E126: :endfunction ޤ"
+msgstr "E126: :endfunction がありません"
+
+#, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: 関数名が変数名と衝突します: %s"
+
+#, c-format
+msgid "E127: Cannot redefine function %s: It is in use"
+msgstr "E127: 関数 %s を再定義できません: 使用中です"
 
 #, c-format
 msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: ؿ̾ץȤΥե̾Ȱפޤ: %s"
+msgstr "E746: 関数名がスクリプトのファイル名と一致しません: %s"
 
 msgid "E129: Function name required"
-msgstr "E129: ؿ̾׵ᤵޤ"
+msgstr "E129: 関数名が要求されます"
 
 #, c-format
 msgid "E128: Function name must start with a capital or contain a colon: %s"
-msgstr "E128: ؿ̾ʸǻϤޤ뤫ޤޤʤФʤޤ: %s"
+msgstr "E128: 関数名は大文字で始まるかコロンを含まなければなりません: %s"
 
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: ؿ %s Ǥޤ: Ǥ"
+msgstr "E131: 関数 %s を削除できません: 使用中です"
 
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: ؿƽФҿ 'maxfuncdepth' Ķޤ"
+msgstr "E132: 関数呼出の入れ子数が 'maxfuncdepth' を超えました"
 
 #, c-format
 msgid "calling %s"
-msgstr "%s ¹Ǥ"
+msgstr "%s を実行中です"
 
 #, c-format
 msgid "%s aborted"
-msgstr "%s Ǥޤ"
+msgstr "%s が中断されました"
 
 #, c-format
 msgid "%s returning #%ld"
-msgstr "%s  #%ld ֤ޤ"
+msgstr "%s が #%ld を返しました"
 
 #, c-format
 msgid "%s returning %s"
-msgstr "%s  %s ֤ޤ"
+msgstr "%s が %s を返しました"
 
 #, c-format
 msgid "continuing in %s"
-msgstr "%s μ¹Ԥ³Ǥ"
+msgstr "%s の実行を継続中です"
 
 msgid "E133: :return not inside a function"
-msgstr "E133: ؿ :return ޤ"
+msgstr "E133: 関数外に :return がありました"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
 msgstr ""
 "\n"
-"# Хѿ:\n"
+"# グローバル変数:\n"
 
 msgid ""
 "\n"
@@ -709,126 +807,130 @@
 "\n"
 "\tLast set from "
 
+msgid "No old files"
+msgstr "古いファイルはありません"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
-msgstr "<%s>%s%s  %d,  16ʿ %02x,  8ʿ %03o"
+msgstr "<%s>%s%s  %d,  16進数 %02x,  8進数 %03o"
 
 #, c-format
 msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, 16ʿ %04x, 8ʿ %o"
+msgstr "> %d, 16進数 %04x, 8進数 %o"
 
 #, c-format
 msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, 16ʿ %08x, 8ʿ %o"
+msgstr "> %d, 16進数 %08x, 8進数 %o"
 
 msgid "E134: Move lines into themselves"
-msgstr "E134: Ԥ򤽤켫ȤˤϰưǤޤ"
+msgstr "E134: 行をそれ自身には移動できません"
 
 msgid "1 line moved"
-msgstr "1 Ԥưޤ"
+msgstr "1 行が移動されました"
 
 #, c-format
 msgid "%ld lines moved"
-msgstr "%ld Ԥưޤ"
+msgstr "%ld 行が移動されました"
 
 #, c-format
 msgid "%ld lines filtered"
-msgstr "%ld Ԥե륿ޤ"
+msgstr "%ld 行がフィルタ処理されました"
 
 msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: *ե륿* autocommandϸߤΥХåեѹƤϤޤ"
+msgstr "E135: *フィルタ* autocommandは現在のバッファを変更してはいけません"
 
 msgid "[No write since last change]\n"
-msgstr "[Ǹѹ¸Ƥޤ]\n"
+msgstr "[最後の変更が保存されていません]\n"
 
 #, c-format
 msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s : "
+msgstr "%sviminfo: %s 行目: "
 
 msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: 顼¿᤮Τ, ʹߤϥåפޤ"
+msgstr "E136: viminfo: エラーが多過ぎるので, 以降はスキップします"
 
 #, c-format
 msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "viminfoե \"%s\"%s%s%s ɹ "
+msgstr "viminfoファイル \"%s\"%s%s%s を読込み中 "
 
 msgid " info"
-msgstr " "
+msgstr " 情報"
 
 msgid " marks"
-msgstr " ޡ"
+msgstr " マーク"
+
+msgid " oldfiles"
+msgstr " 旧ファイル群"
 
 msgid " FAILED"
-msgstr " "
+msgstr " 失敗"
 
 #. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: viminfoե뤬ߤǤޤ: %s"
+msgstr "E137: viminfoファイルが書込みできません: %s"
 
 #, c-format
 msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: viminfoե %s ¸Ǥޤ!"
+msgstr "E138: viminfoファイル %s を保存できません!"
 
 #, c-format
 msgid "Writing viminfo file \"%s\""
-msgstr "viminfoե \"%s\" "
+msgstr "viminfoファイル \"%s\" を書込み中"
 
 #. Write the info:
 #, c-format
 msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "#  viminfo ե Vim %s ˤäޤ.\n"
+msgstr "# この viminfo ファイルは Vim %s によって生成されました.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
 msgstr ""
-"# ѹݤˤϽʬդƤ!\n"
+"# 変更する際には十分注意してください!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# Υե뤬񤫤줿 'encoding' \n"
+msgstr "# このファイルが書かれた時の 'encoding' の値\n"
 
 msgid "Illegal starting char"
-msgstr "ƬʸǤ"
+msgstr "不正な先頭文字です"
 
 msgid "Save As"
-msgstr "̾¸"
+msgstr "別名で保存"
 
 msgid "Write partial file?"
-msgstr "եʬŪ¸ޤ?"
+msgstr "ファイルを部分的に保存しますか?"
 
 msgid "E140: Use ! to write partial buffer"
-msgstr "E140: ХåեʬŪ¸ˤ ! ȤäƤ"
+msgstr "E140: バッファを部分的に保存するには ! を使ってください"
 
 #, c-format
 msgid "Overwrite existing file \"%s\"?"
-msgstr "¸Υե \"%s\" 񤭤ޤ?"
+msgstr "既存のファイル \"%s\" を上書きしますか?"
 
 #, c-format
 msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "åץե \"%s\" ¸ߤޤ. 񤭤ޤ?"
+msgstr "スワップファイル \"%s\" が存在します. 上書きを強制しますか?"
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: åץե뤬¸ߤޤ: %s (:silent! ɲäǾ)"
+msgstr "E768: スワップファイルが存在します: %s (:silent! を追加で上書)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
-msgstr "E141: Хåե %ld ˤ̾ޤ"
+msgstr "E141: バッファ %ld には名前がありません"
 
 msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: ե¸ޤǤ: 'write' ץˤ̵Ǥ"
+msgstr "E142: ファイルは保存されませんでした: 'write' オプションにより無効です"
 
 #, c-format
 msgid ""
 "'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"\"%s\" ˤ 'readonly' ץꤵƤޤ.\n"
-"񤭶򤷤ޤ?"
+"\"%s\" には 'readonly' オプションが設定されています.\n"
+"上書き強制をしますか?"
 
 #, c-format
 msgid ""
@@ -836,615 +938,633 @@
 "It may still be possible to write it.\n"
 "Do you wish to try?"
 msgstr ""
-"ե \"%s\" ΥѡߥåɹѤǤ.\n"
-"Ǥⶲ餯񤭹ळȤϲǽǤ.\n"
-"³ޤ?"
+"ファイル \"%s\" のパーミッションが読込専用です.\n"
+"それでも恐らく書き込むことは可能です.\n"
+"継続しますか?"
 
 #, c-format
 msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\" ɹѤǤ (ˤ ! ɲ)"
+msgstr "E505: \"%s\" は読込専用です (強制書込には ! を追加)"
 
 msgid "Edit File"
-msgstr "եԽ"
+msgstr "ファイルを編集"
 
 #, c-format
 msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: autocommandͽХåե %s ޤ"
+msgstr "E143: autocommandが予期せず新しいバッファ %s を削除しました"
 
 msgid "E144: non-numeric argument to :z"
-msgstr "E144: ǤϤʤ :z Ϥޤ"
+msgstr "E144: 数ではない引数が :z に渡されました"
 
 msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: rvimǤϥ륳ޥɤȤޤ"
+msgstr "E145: rvimではシェルコマンドを使えません"
 
 msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: ɽʸǶڤ뤳ȤǤޤ"
+msgstr "E146: 正規表現は文字で区切ることができません"
 
 #, c-format
 msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "%s ִޤ? (y/n/a/q/l/^E/^Y)"
+msgstr "%s に置換しますか? (y/n/a/q/l/^E/^Y)"
 
 msgid "(Interrupted) "
-msgstr "(ޤޤ)"
+msgstr "(割込まれました) "
 
 msgid "1 match"
-msgstr "1 ս곺ޤ"
+msgstr "1 箇所該当しました"
 
 msgid "1 substitution"
-msgstr "1 սִޤ"
+msgstr "1 箇所置換しました"
 
 #, c-format
 msgid "%ld matches"
-msgstr "%ld ս곺ޤ"
+msgstr "%ld 箇所該当しました"
 
 #, c-format
 msgid "%ld substitutions"
-msgstr "%ld սִޤ"
+msgstr "%ld 箇所置換しました"
 
 msgid " on 1 line"
-msgstr " ( 1 )"
+msgstr " (計 1 行内)"
 
 #, c-format
 msgid " on %ld lines"
-msgstr " ( %ld )"
+msgstr " (計 %ld 行内)"
 
 msgid "E147: Cannot do :global recursive"
-msgstr "E147: :global ƵŪˤϻȤޤ"
+msgstr "E147: :global を再帰的には使えません"
 
 msgid "E148: Regular expression missing from global"
-msgstr "E148: globalޥɤɽꤵƤޤ"
+msgstr "E148: globalコマンドに正規表現が指定されていません"
 
 #, c-format
 msgid "Pattern found in every line: %s"
-msgstr "ѥƤιԤǤߤĤޤ: %s"
+msgstr "パターンが全ての行で見つかりました: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "パターンは見つかりませんでした: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
 "$"
 msgstr ""
 "\n"
-"# Ǹִ줿ʸ:\n"
+"# 最後に置換された文字列:\n"
 "$"
 
 msgid "E478: Don't panic!"
-msgstr "E478: ƤʤǤ"
+msgstr "E478: 慌てないでください"
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: ǰǤ '%s' Υإפ %s ˤϤޤ"
+msgstr "E661: 残念ですが '%s' のヘルプが %s にはありません"
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
-msgstr "E149: ǰǤ %s ˤϥإפޤ"
+msgstr "E149: 残念ですが %s にはヘルプがありません"
 
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
-msgstr "ǰǤإץե \"%s\" ߤĤޤ"
+msgstr "残念ですがヘルプファイル \"%s\" が見つかりません"
 
 #, c-format
 msgid "E150: Not a directory: %s"
-msgstr "E150: ǥ쥯ȥǤϤޤ: %s"
+msgstr "E150: ディレクトリではありません: %s"
 
 #, c-format
 msgid "E152: Cannot open %s for writing"
-msgstr "E152: Ѥ %s 򳫤ޤ"
+msgstr "E152: 書込み用に %s を開けません"
 
 #, c-format
 msgid "E153: Unable to open %s for reading"
-msgstr "E153: ɹѤ %s 򳫤ޤ"
+msgstr "E153: 読込用に %s を開けません"
 
 # Added at 29-Apr-2004.
 #, c-format
 msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: 1ĤθΥإץեʣΥ󥳡ɤߤƤޤ: %s"
+msgstr "E670: 1つの言語のヘルプファイルに複数のエンコードが混在しています: %s"
 
 #, c-format
 msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154:  \"%s\" ե %s/%s ˽ʣƤޤ"
+msgstr "E154: タグ \"%s\" がファイル %s/%s に重複しています"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
-msgstr "E160: ̤ΤsignޥɤǤ: %s"
+msgstr "E160: 未知のsignコマンドです: %s"
 
 msgid "E156: Missing sign name"
-msgstr "E156: sign̾ޤ"
+msgstr "E156: sign名がありません"
 
 msgid "E612: Too many signs defined"
-msgstr "E612: sign¿Ĥޤ"
+msgstr "E612: signの定義が多数見つかりました"
 
 #, c-format
 msgid "E239: Invalid sign text: %s"
-msgstr "E239: ̵signΥƥȤǤ: %s"
+msgstr "E239: 無効なsignのテキストです: %s"
 
 #, c-format
 msgid "E155: Unknown sign: %s"
-msgstr "E155: ̤ΤsignǤ: %s"
+msgstr "E155: 未知のsignです: %s"
 
 msgid "E159: Missing sign number"
-msgstr "E159: signֹ椬ޤ"
+msgstr "E159: signの番号がありません"
 
 #, c-format
 msgid "E158: Invalid buffer name: %s"
-msgstr "E158: ̵ʥХåե̾Ǥ: %s"
+msgstr "E158: 無効なバッファ名です: %s"
 
 #, c-format
 msgid "E157: Invalid sign ID: %ld"
-msgstr "E157: ̵sign̻ҤǤ: %ld"
+msgstr "E157: 無効なsign識別子です: %ld"
 
 # Added at 27-Jan-2004.
 msgid " (NOT FOUND)"
-msgstr "  (ߤĤޤ)"
+msgstr "  (見つかりません)"
 
 msgid " (not supported)"
-msgstr " (󥵥ݡ)"
+msgstr " (非サポート)"
 
 msgid "[Deleted]"
-msgstr "[]"
+msgstr "[削除済]"
 
 msgid "Entering Debug mode.  Type \"cont\" to continue."
-msgstr "ǥХå⡼ɤޤ. ³ˤ \"cont\" ϤƤ."
+msgstr "デバッグモードに入ります. 続けるには \"cont\" と入力してください."
 
 #, c-format
 msgid "line %ld: %s"
-msgstr " %ld: %s"
+msgstr "行 %ld: %s"
 
 #, c-format
 msgid "cmd: %s"
-msgstr "ޥ: %s"
+msgstr "コマンド: %s"
 
 #, c-format
 msgid "Breakpoint in \"%s%s\" line %ld"
-msgstr "֥졼ݥ \"%s%s\"  %ld"
+msgstr "ブレークポイント \"%s%s\" 行 %ld"
 
 #, c-format
 msgid "E161: Breakpoint not found: %s"
-msgstr "E161: ֥졼ݥȤߤĤޤ: %s"
+msgstr "E161: ブレークポイントが見つかりません: %s"
 
 msgid "No breakpoints defined"
-msgstr "֥졼ݥȤƤޤ"
+msgstr "ブレークポイントが定義されていません"
 
 #, c-format
 msgid "%3d  %s %s  line %ld"
-msgstr "%3d  %s %s   %ld"
+msgstr "%3d  %s %s  行 %ld"
 
-msgid "E750: First use :profile start <fname>"
-msgstr "E750:  :profile start <fname> ¹ԤƤ"
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: 初めに \":profile start {fname}\" を実行してください"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
-msgstr "ѹ \"%s\" ¸ޤ?"
+msgstr "変更を \"%s\" に保存しますか?"
 
 msgid "Untitled"
-msgstr "̵"
+msgstr "無題"
 
 #, c-format
 msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Хåե \"%s\" ѹ¸Ƥޤ"
+msgstr "E162: バッファ \"%s\" の変更は保存されていません"
 
 msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "ٹ: ͽ¾Хåեذưޤ (autocommands Ĵ٤Ƥ)"
+msgstr "警告: 予期せず他バッファへ移動しました (autocommands を調べてください)"
 
 msgid "E163: There is only one file to edit"
-msgstr "E163: Խե1Ĥޤ"
+msgstr "E163: 編集するファイルは1つしかありません"
 
 msgid "E164: Cannot go before first file"
-msgstr "E164: ǽΥեˤϹԤޤ"
+msgstr "E164: 最初のファイルより前には行けません"
 
 msgid "E165: Cannot go beyond last file"
-msgstr "E165: ǸΥեۤƸˤϹԤޤ"
+msgstr "E165: 最後のファイルを越えて後には行けません"
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E666: ΥѥˤбƤޤ: %s"
+msgstr "E666: そのコンパイラには対応していません: %s"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
-msgstr "\"%s\"  \"%s\" 鸡"
+msgstr "\"%s\" を \"%s\" から検索中"
 
 #, c-format
 msgid "Searching for \"%s\""
-msgstr "\"%s\" 򸡺"
+msgstr "\"%s\" を検索中"
 
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
-msgstr "'runtimepath' ˤϤߤĤޤ: \"%s\""
+msgstr "'runtimepath' の中には見つかりません: \"%s\""
 
 msgid "Source Vim script"
-msgstr "VimץȤμ"
+msgstr "Vimスクリプトの取込み"
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "ǥ쥯ȥϼޤ: \"%s\""
+msgstr "ディレクトリは取込めません: \"%s\""
 
 #, c-format
 msgid "could not source \"%s\""
-msgstr "\"%s\" ޤ"
+msgstr "\"%s\" を取込めません"
 
 #, c-format
 msgid "line %ld: could not source \"%s\""
-msgstr " %ld: \"%s\" ޤ"
+msgstr "行 %ld: \"%s\" を取込めません"
 
 #, c-format
 msgid "sourcing \"%s\""
-msgstr "\"%s\" "
+msgstr "\"%s\" を取込中"
 
 #, c-format
 msgid "line %ld: sourcing \"%s\""
-msgstr " %ld: %s "
+msgstr "行 %ld: %s を取込中"
 
 #, c-format
 msgid "finished sourcing %s"
-msgstr "%s μλ"
+msgstr "%s の取込を完了"
 
 msgid "modeline"
-msgstr "⡼ɹ"
+msgstr "モード行"
 
 msgid "--cmd argument"
-msgstr "--cmd "
+msgstr "--cmd 引数"
 
 msgid "-c argument"
-msgstr "-c "
+msgstr "-c 引数"
 
 msgid "environment variable"
-msgstr "Ķѿ"
+msgstr "環境変数"
 
 msgid "error handler"
-msgstr "顼ϥɥ"
+msgstr "エラーハンドラ"
 
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: ٹ: ԶڤǤ. ^M ʤΤǤ礦"
+msgstr "W15: 警告: 行区切が不正です. ^M がないのでしょう"
 
 msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: :scriptencoding ץȰʳǻѤޤ"
+msgstr "E167: :scriptencoding が取込スクリプト以外で使用されました"
 
 msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: :finish ץȰʳǻѤޤ"
+msgstr "E168: :finish が取込スクリプト以外で使用されました"
 
 #, c-format
 msgid "Current %slanguage: \"%s\""
-msgstr "ߤ %s: \"%s\""
+msgstr "現在の %s言語: \"%s\""
 
 #, c-format
 msgid "E197: Cannot set language to \"%s\""
-msgstr "E197:  \"%s\" Ǥޤ"
+msgstr "E197: 言語を \"%s\" に設定できません"
 
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "Ex⡼ɤޤ. Ρޥˤ\"visual\"ϤƤ."
+msgstr "Exモードに入ります. ノーマルに戻るには\"visual\"と入力してください."
 
 msgid "E501: At end-of-file"
-msgstr "E501: եνλ"
+msgstr "E501: ファイルの終了位置"
 
 msgid "E169: Command too recursive"
-msgstr "E169: ޥɤƵŪ᤮ޤ"
+msgstr "E169: コマンドが再帰的過ぎます"
 
 #, c-format
 msgid "E605: Exception not caught: %s"
-msgstr "E605: 㳰ªޤǤ: %s"
+msgstr "E605: 例外が捕捉されませんでした: %s"
 
 msgid "End of sourced file"
-msgstr "եκǸǤ"
+msgstr "取込ファイルの最後です"
 
 msgid "End of function"
-msgstr "ؿκǸǤ"
+msgstr "関数の最後です"
 
 msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: 桼ޥɤΤޤʻѤǤ"
+msgstr "E464: ユーザ定義コマンドのあいまいな使用です"
 
 msgid "E492: Not an editor command"
-msgstr "E492: ǥΥޥɤǤϤޤ"
+msgstr "E492: エディタのコマンドではありません"
 
 msgid "E493: Backwards range given"
-msgstr "E493: դޤϰϤꤵޤ"
+msgstr "E493: 逆さまの範囲が指定されました"
 
 msgid "Backwards range given, OK to swap"
-msgstr "դޤϰϤꤵޤ, ؤޤ?"
+msgstr "逆さまの範囲が指定されました, 入替えますか?"
 
 msgid "E494: Use w or w>>"
-msgstr "E494: w ⤷ w>> ѤƤ"
+msgstr "E494: w もしくは w>> を使用してください"
 
 msgid "E319: Sorry, the command is not available in this version"
-msgstr "E319: ΥСǤϤΥޥɤѤǤޤ, ʤ"
+msgstr "E319: このバージョンではこのコマンドは利用できません, ごめんなさい"
 
 msgid "E172: Only one file name allowed"
-msgstr "E172: ե̾ 1 ĤˤƤ"
+msgstr "E172: ファイル名は 1 つにしてください"
 
 msgid "1 more file to edit.  Quit anyway?"
-msgstr "Խ٤ե뤬 1 Ĥޤ, λޤ?"
+msgstr "編集すべきファイルが 1 個ありますが, 終了しますか?"
 
 #, c-format
 msgid "%d more files to edit.  Quit anyway?"
-msgstr "Խ٤ե뤬 %d Ĥޤ, λޤ?"
+msgstr "編集すべきファイルがあと %d 個ありますが, 終了しますか?"
 
 msgid "E173: 1 more file to edit"
-msgstr "E173: Խ٤ե뤬 1 Ĥޤ"
+msgstr "E173: 編集すべきファイルが 1 個あります"
 
 #, c-format
 msgid "E173: %ld more files to edit"
-msgstr "E173: Խ٤ե뤬 %ld Ĥޤ"
+msgstr "E173: 編集すべきファイルがあと %ld 個あります"
 
 msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: ޥɤˤޤ: ˤ ! ɲäƤ"
+msgstr "E174: コマンドが既にあります: 再定義するには ! を追加してください"
 
 msgid ""
 "\n"
 "    Name        Args Range Complete  Definition"
 msgstr ""
 "\n"
-"    ̾         ϰ  䴰      "
+"    名前        引数 範囲  補完      定義"
 
 msgid "No user-defined commands found"
-msgstr "桼ޥɤĤޤǤ"
+msgstr "ユーザ定義コマンドが見つかりませんでした"
 
 msgid "E175: No attribute specified"
-msgstr "E175: °Ƥޤ"
+msgstr "E175: 属性は定義されていません"
 
 msgid "E176: Invalid number of arguments"
-msgstr "E176: ο̵Ǥ"
+msgstr "E176: 引数の数が無効です"
 
 msgid "E177: Count cannot be specified twice"
-msgstr "E177: Ȥ2Żꤹ뤳ȤϤǤޤ"
+msgstr "E177: カウントを2重指定することはできません"
 
 msgid "E178: Invalid default value for count"
-msgstr "E178: Ȥξά̵ͤǤ"
+msgstr "E178: カウントの省略値が無効です"
 
 msgid "E179: argument required for -complete"
-msgstr "E179: -䴰ΤΰɬפǤ"
+msgstr "E179: -補完のための引数が必要です"
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
-msgstr "E181: ̵°Ǥ: %s"
+msgstr "E181: 無効な属性です: %s"
 
 msgid "E182: Invalid command name"
-msgstr "E182: ̵ʥޥ̾Ǥ"
+msgstr "E182: 無効なコマンド名です"
 
 msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: 桼ޥɤϱʸǻϤޤʤФʤޤ"
+msgstr "E183: ユーザ定義コマンドは英大文字で始まらなければなりません"
+
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: 予約名なので, ユーザ定義コマンドに利用できません"
 
 #, c-format
 msgid "E184: No such user-defined command: %s"
-msgstr "E184: Υ桼ޥɤϤޤ: %s"
+msgstr "E184: そのユーザ定義コマンドはありません: %s"
 
 #, c-format
 msgid "E180: Invalid complete value: %s"
-msgstr "E180: ̵䴰Ǥ: %s"
+msgstr "E180: 無効な補完指定です: %s"
 
 msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: 䴰ϥ䴰ǤѤǤޤ"
+msgstr "E468: 補完引数はカスタム補完でしか使用できません"
 
 msgid "E467: Custom completion requires a function argument"
-msgstr "E467: 䴰ˤϰȤƴؿɬפǤ"
+msgstr "E467: カスタム補完には引数として関数が必要です"
+
+msgid "unknown"
+msgstr "不明"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: 顼 %s ߤĤޤ"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: カラースキーム '%s' が見つかりません"
 
 msgid "Greetings, Vim user!"
-msgstr "Vim Ȥ󡢤䤢!"
+msgstr "Vim 使いさん、やあ!"
 
 msgid "E784: Cannot close last tab page"
-msgstr "E784: ǸΥ֥ڡĤ뤳ȤϤǤޤ"
+msgstr "E784: 最後のタブページを閉じることはできません"
 
 msgid "Already only one tab page"
-msgstr "˥֥ڡ1Ĥޤ"
+msgstr "既にタブページは1つしかありません"
 
 msgid "Edit File in new window"
-msgstr "ɥǥեԽޤ"
+msgstr "新しいウィンドウでファイルを編集します"
 
 #, c-format
 msgid "Tab page %d"
-msgstr "֥ڡ %d"
+msgstr "タブページ %d"
 
 msgid "No swap file"
-msgstr "åץե뤬ޤ"
+msgstr "スワップファイルがありません"
 
 msgid "Append File"
-msgstr "ɲåե"
+msgstr "追加ファイル"
 
 msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
 msgstr ""
-"E747: ХåեƤΤ, ǥ쥯ȥѹǤޤ (! ɲä"
-")"
+"E747: バッファが修正されているので, ディレクトリを変更できません (! を追加で"
+"上書)"
 
 msgid "E186: No previous directory"
-msgstr "E186: Υǥ쥯ȥϤޤ"
+msgstr "E186: 前のディレクトリはありません"
 
 msgid "E187: Unknown"
-msgstr "E187: ̤"
+msgstr "E187: 未知"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: "
+msgstr "E465: :winsize には2つの数値の引数が必要です"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
-msgstr "ɥ: X %d, Y %d"
+msgstr "ウィンドウ位置: X %d, Y %d"
 
 msgid "E188: Obtaining window position not implemented for this platform"
 msgstr ""
-"E188: Υץåȥۡˤϥɥ֤μǽϼƤޤ"
+"E188: このプラットホームにはウィンドウ位置の取得機能は実装されていません"
 
 msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos ˤ2ĤοͤΰɬפǤ"
+msgstr "E466: :winpos には2つの数値の引数が必要です"
 
 msgid "Save Redirection"
-msgstr "쥯Ȥ¸ޤ"
+msgstr "リダイレクトを保存します"
 
 msgid "Save View"
-msgstr "ӥ塼¸ޤ"
+msgstr "ビューを保存します"
 
 msgid "Save Session"
-msgstr "å¸ޤ"
+msgstr "セッション情報を保存します"
 
 msgid "Save Setup"
-msgstr "¸ޤ"
+msgstr "設定を保存します"
 
 #, c-format
 msgid "E739: Cannot create directory: %s"
-msgstr "E739: ǥ쥯ȥǤޤ: %s"
+msgstr "E739: ディレクトリを作成できません: %s"
 
 #, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" ¸ߤޤ (񤹤ˤ ! ɲäƤ)"
+msgstr "E189: \"%s\" が存在します (上書するには ! を追加してください)"
 
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: \"%s\" ѤȤƳޤ"
+msgstr "E190: \"%s\" を書込み用として開けません"
 
 #. set mark
 msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: ʸ/९ȤǤʤФޤ"
+msgstr "E191: 引数は1文字の英字か引用符 (' か `) でなければいけません"
 
 msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: :normal κƵѤʤ᤮ޤ"
+msgstr "E192: :normal の再帰利用が深くなり過ぎました"
+
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< は +eval 機能が無いと利用できません"
 
 msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: '#'֤ե̾ޤ"
+msgstr "E194: '#'を置き換える副ファイルの名前がありません"
 
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: \"<afile>\"֤autocommandΥե̾ޤ"
+msgstr "E495: \"<afile>\"を置き換えるautocommandのファイル名がありません"
 
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: \"<abuf>\"֤autocommandХåեֹ椬ޤ"
+msgstr "E496: \"<abuf>\"を置き換えるautocommandバッファ番号がありません"
 
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: \"<amatch>\"֤autocommandγ̾ޤ"
+msgstr "E497: \"<amatch>\"を置き換えるautocommandの該当名がありません"
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: \"<sfile>\"֤ :source оݥե̾ޤ"
+msgstr "E498: \"<sfile>\"を置き換える :source 対象ファイル名がありません"
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"を置き換える行番号がありません"
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr ""
-"E499: '%'  '#' ̵̾եʤΤ \":p:h\" ȼʤȤϤǤޤ"
+"E499: '%' や '#' が無名ファイルなので \":p:h\" を伴わない使い方はできません"
 
 msgid "E500: Evaluates to an empty string"
-msgstr "E500: ʸȤɾޤ"
+msgstr "E500: 空文字列として評価されました"
 
 msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: viminfoեɹѤȤƳޤ"
+msgstr "E195: viminfoファイルを読込用として開けません"
 
 msgid "E196: No digraphs in this version"
-msgstr "E196: ΥС˹Ϥޤ"
+msgstr "E196: このバージョンに合字はありません"
 
 msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: 'Vim' ǻϤޤ㳰 :throw Ǥޤ"
+msgstr "E608: 'Vim' で始まる例外は :throw できません"
 
 #. always scroll up, don't overwrite
 #, c-format
 msgid "Exception thrown: %s"
-msgstr "㳰ȯޤ: %s"
+msgstr "例外が発生しました: %s"
 
 #, c-format
 msgid "Exception finished: %s"
-msgstr "㳰«ޤ: %s"
+msgstr "例外が収束しました: %s"
 
 #, c-format
 msgid "Exception discarded: %s"
-msgstr "㳰˴ޤ: %s"
+msgstr "例外が破棄されました: %s"
 
 #, c-format
 msgid "%s, line %ld"
-msgstr "%s,  %ld"
+msgstr "%s, 行 %ld"
 
 #. always scroll up, don't overwrite
 #, c-format
 msgid "Exception caught: %s"
-msgstr "㳰ªޤ: %s"
+msgstr "例外が捕捉されました: %s"
 
 #, c-format
 msgid "%s made pending"
-msgstr "%s ˤ̤֤ޤ"
+msgstr "%s により未決定状態が生じました"
 
 #, c-format
 msgid "%s resumed"
-msgstr "%s Ƴޤ"
+msgstr "%s が再開しました"
 
 #, c-format
 msgid "%s discarded"
-msgstr "%s ˴ޤ"
+msgstr "%s が破棄されました"
 
 msgid "Exception"
-msgstr "㳰"
+msgstr "例外"
 
 msgid "Error and interrupt"
-msgstr "顼ȳ"
+msgstr "エラーと割込み"
 
 msgid "Error"
-msgstr "顼"
+msgstr "エラー"
 
 #. if (pending & CSTP_INTERRUPT)
 msgid "Interrupt"
-msgstr ""
+msgstr "割込み"
 
 msgid "E579: :if nesting too deep"
-msgstr "E579: :if Ҥ᤮ޤ"
+msgstr "E579: :if の入れ子が深過ぎます"
 
 msgid "E580: :endif without :if"
-msgstr "E580: :if Τʤ :endif ޤ"
+msgstr "E580: :if のない :endif があります"
 
 msgid "E581: :else without :if"
-msgstr "E581: :if Τʤ :else ޤ"
+msgstr "E581: :if のない :else があります"
 
 msgid "E582: :elseif without :if"
-msgstr "E582: :if Τʤ :elseif ޤ"
+msgstr "E582: :if のない :elseif があります"
 
 msgid "E583: multiple :else"
-msgstr "E583: ʣ :else ޤ"
+msgstr "E583: 複数の :else があります"
 
 msgid "E584: :elseif after :else"
-msgstr "E584: :else θ :elseif ޤ"
+msgstr "E584: :else の後に :elseif があります"
 
 msgid "E585: :while/:for nesting too deep"
-msgstr "E585: :while  :for Ҥ᤮ޤ"
+msgstr "E585: :while や :for の入れ子が深過ぎます"
 
 msgid "E586: :continue without :while or :for"
-msgstr "E586: :while  :for Τʤ :continue ޤ"
+msgstr "E586: :while や :for のない :continue があります"
 
 msgid "E587: :break without :while or :for"
-msgstr "E587: :while  :for Τʤ :break ޤ"
+msgstr "E587: :while や :for のない :break があります"
 
 msgid "E732: Using :endfor with :while"
-msgstr "E732: :endfor  :while Ȥ߹碌Ƥޤ"
+msgstr "E732: :endfor を :while と組み合わせています"
 
 msgid "E733: Using :endwhile with :for"
-msgstr "E733: :endwhile  :for Ȥ߹碌Ƥޤ"
+msgstr "E733: :endwhile を :for と組み合わせています"
 
 msgid "E601: :try nesting too deep"
-msgstr "E601: :try Ҥ᤮ޤ"
+msgstr "E601: :try の入れ子が深過ぎます"
 
 msgid "E603: :catch without :try"
-msgstr "E603: :try Τʤ :catch ޤ"
+msgstr "E603: :try のない :catch があります"
 
 #. Give up for a ":catch" after ":finally" and ignore it.
 #. * Just parse.
 msgid "E604: :catch after :finally"
-msgstr "E604: :finally θ :catch ޤ"
+msgstr "E604: :finally の後に :catch があります"
 
 msgid "E606: :finally without :try"
-msgstr "E606: :try Τʤ :finally ޤ"
+msgstr "E606: :try のない :finally があります"
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607: ʣ :finalyy ޤ"
+msgstr "E607: 複数の :finally があります"
 
 msgid "E602: :endtry without :try"
-msgstr "E602: :try Τʤ :endtry Ǥ"
+msgstr "E602: :try のない :endtry です"
 
 msgid "E193: :endfunction not inside a function"
-msgstr "E193: ؿγ :endfunction ޤ"
+msgstr "E193: 関数の外に :endfunction がありました"
 
 msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: ߤ¾ΥХåեԽ뤳Ȥϵޤ"
+msgstr "E788: 現在は他のバッファを編集することは許されません"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: 現在はバッファ情報を変更することは許されません"
 
 msgid "tagname"
-msgstr "̾"
+msgstr "タグ名"
 
 msgid " kind file\n"
-msgstr " ե\n"
+msgstr " ファイル種類\n"
 
 msgid "'history' option is zero"
-msgstr "ץ 'history' Ǥ"
+msgstr "オプション 'history' がゼロです"
 
 #, c-format
 msgid ""
@@ -1452,361 +1572,384 @@
 "# %s History (newest to oldest):\n"
 msgstr ""
 "\n"
-"# %s ܤ (ΤŤΤ):\n"
+"# %s 項目の履歴 (新しいものから古いものへ):\n"
 
 msgid "Command Line"
-msgstr "ޥɥ饤"
+msgstr "コマンドライン"
 
 msgid "Search String"
-msgstr "ʸ"
+msgstr "検索文字列"
 
 msgid "Expression"
-msgstr ""
+msgstr "式"
 
 msgid "Input Line"
-msgstr "Ϲ"
+msgstr "入力行"
 
 msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar ޥĹĶޤ"
+msgstr "E198: cmd_pchar がコマンド長を超えました"
 
 msgid "E199: Active window or buffer deleted"
-msgstr "E199: ƥ֤ʥɥХåեޤ"
+msgstr "E199: アクティブなウィンドウかバッファが削除されました"
+
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: autocommandがバッファかバッファ名を変更しました"
 
 msgid "Illegal file name"
-msgstr "ʥե̾"
+msgstr "不正なファイル名"
 
 msgid "is a directory"
-msgstr " ϥǥ쥯ȥǤ"
+msgstr " はディレクトリです"
 
 msgid "is not a file"
-msgstr " ϥեǤϤޤ"
+msgstr " はファイルではありません"
 
 msgid "is a device (disabled with 'opendevice' option)"
-msgstr " ϥǥХǤ ('opendevice' ץǲǤޤ)"
+msgstr " はデバイスです ('opendevice' オプションで回避できます)"
 
 msgid "[New File]"
-msgstr "[ե]"
+msgstr "[新ファイル]"
 
 msgid "[New DIRECTORY]"
-msgstr "[ǥ쥯ȥ]"
+msgstr "[新規ディレクトリ]"
 
 msgid "[File too big]"
-msgstr "[ե]"
+msgstr "[ファイル過大]"
 
 msgid "[Permission Denied]"
-msgstr "[ǧĤޤ]"
+msgstr "[認可がありません]"
 
 msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: *ReadPre autocommand եɹԲĤˤޤ"
+msgstr "E200: *ReadPre autocommand がファイルを読込不可にしました"
 
 msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: *ReadPre autocommand ϸߤΥХåեѤޤ"
+msgstr "E201: *ReadPre autocommand は現在のバッファを変えられません"
 
 msgid "Vim: Reading from stdin...\n"
-msgstr "Vim: ɸϤɹ...\n"
+msgstr "Vim: 標準入力から読込中...\n"
 
 msgid "Reading from stdin..."
-msgstr "ɸϤɹ..."
+msgstr "標準入力から読込み中..."
 
 #. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
-msgstr "E202: ѴեɹԲĤˤޤ"
+msgstr "E202: 変換がファイルを読込不可にしました"
 
 msgid "[fifo/socket]"
-msgstr "[FIFO/å]"
+msgstr "[FIFO/ソケット]"
 
 msgid "[fifo]"
 msgstr "[FIFO]"
 
 msgid "[socket]"
-msgstr "[å]"
+msgstr "[ソケット]"
 
 msgid "[character special]"
-msgstr "[饯ǥХ]"
+msgstr "[キャラクタ・デバイス]"
 
 msgid "[RO]"
-msgstr "[]"
+msgstr "[読専]"
 
 msgid "[CR missing]"
-msgstr "[CR̵]"
-
-msgid "[NL found]"
-msgstr "[NLͭ]"
+msgstr "[CR無]"
 
 msgid "[long lines split]"
-msgstr "[Ĺʬ]"
+msgstr "[長行分割]"
 
 msgid "[NOT converted]"
-msgstr "[̤Ѵ]"
+msgstr "[未変換]"
 
 msgid "[converted]"
-msgstr "[Ѵ]"
+msgstr "[変換済]"
+
+msgid "[blowfish]"
+msgstr "[blowfish暗号化]"
 
 msgid "[crypted]"
-msgstr "[Ź沽]"
+msgstr "[暗号化]"
 
 #, c-format
 msgid "[CONVERSION ERROR in line %ld]"
-msgstr "[%ld ܤѴ顼]"
+msgstr "[%ld 行目で変換エラー]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
-msgstr "[%ld ܤʥХ]"
+msgstr "[%ld 行目の不正なバイト]"
 
 msgid "[READ ERRORS]"
-msgstr "[ɹ顼]"
+msgstr "[読込エラー]"
 
 msgid "Can't find temp file for conversion"
-msgstr "Ѵɬפʰե뤬ߤĤޤ"
+msgstr "変換に必要な一時ファイルが見つかりません"
 
 msgid "Conversion with 'charconvert' failed"
-msgstr "'charconvert' ˤѴԤޤ"
+msgstr "'charconvert' による変換が失敗しました"
 
 msgid "can't read output of 'charconvert'"
-msgstr "'charconvert' νϤɹޤǤ"
+msgstr "'charconvert' の出力を読込めませんでした"
+
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: ファイルが未知の方法で暗号化されています"
 
 msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: acwriteХåեγautocommand¸ߤޤ"
+msgstr "E676: acwriteバッファの該当するautocommandは存在しません"
 
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: ¸Хåեautocommandޤ"
+msgstr "E203: 保存するバッファをautocommandが削除か解放しました"
 
 msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: autocommandͽˡǹԿѹޤ"
+msgstr "E204: autocommandが予期せぬ方法で行数を変更しました"
 
 # Added at 19-Jan-2004.
 msgid "NetBeans disallows writes of unmodified buffers"
-msgstr "NetBeans̤ѹΥХåե񤹤뤳ȤϵĤƤޤ"
+msgstr "NetBeansは未変更のバッファを上書することは許可していません"
 
 msgid "Partial writes disallowed for NetBeans buffers"
-msgstr "NetBeansХåեΰ񤭽ФȤϤǤޤ"
+msgstr "NetBeansバッファの一部を書き出すことはできません"
 
 msgid "is not a file or writable device"
-msgstr "ϥեǤ߲ǽǥХǤ⤢ޤ"
+msgstr "はファイルでも書込み可能デバイスでもありません"
 
 msgid "writing to device disabled with 'opendevice' option"
-msgstr "'opendevice' ץˤǥХؤν񤭹ߤϤǤޤ"
+msgstr "'opendevice' オプションによりデバイスへの書き込みはできません"
 
 msgid "is read-only (add ! to override)"
-msgstr "ɹѤǤ (ˤ ! ɲ)"
+msgstr "は読込専用です (強制書込には ! を追加)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Хååץե¸Ǥޤ (! ɲäǶ¸)"
+msgstr "E506: バックアップファイルを保存できません (! を追加で強制保存)"
 
 msgid "E507: Close error for backup file (add ! to override)"
 msgstr ""
-"E507: ХååץեĤݤ˥顼ȯޤ (! ɲäǶ)"
+"E507: バックアップファイルを閉じる際にエラーが発生しました (! を追加で強制)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Хååѥեɹޤ (! ɲäǶɹ)"
+msgstr "E508: バックアップ用ファイルを読込めません (! を追加で強制読込)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Хååץեޤ (! ɲäǶ)"
+msgstr "E509: バックアップファイルを作れません (! を追加で強制作成)"
 
 msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Хååץեޤ (! ɲäǶ)"
+msgstr "E510: バックアップファイルを作れません (! を追加で強制作成)"
 
 msgid "E460: The resource fork would be lost (add ! to override)"
-msgstr "E460: ꥽ե뤫⤷ޤ (! ɲäǶ)"
+msgstr "E460: リソースフォークが失われるかもしれません (! を追加で強制)"
 
 msgid "E214: Can't find temp file for writing"
-msgstr "E214: ¸Ѱե뤬ߤĤޤ"
+msgstr "E214: 保存用一時ファイルが見つかりません"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: ѴǤޤ (! ɲäѴ¸)"
+msgstr "E213: 変換できません (! を追加で変換せずに保存)"
 
 msgid "E166: Can't open linked file for writing"
-msgstr "E166: 󥯤줿ե˽ޤ"
+msgstr "E166: リンクされたファイルに書込めません"
 
 msgid "E212: Can't open file for writing"
-msgstr "E212: Ѥ˥ե򳫤ޤ"
+msgstr "E212: 書込み用にファイルを開けません"
 
 msgid "E667: Fsync failed"
-msgstr "E667: fsync ˼Ԥޤ"
+msgstr "E667: fsync に失敗しました"
 
 msgid "E512: Close failed"
-msgstr "E512: Ĥ뤳Ȥ˼"
+msgstr "E512: 閉じることに失敗"
 
 msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: ߥ顼, Ѵ (񤹤ˤ 'fenc' ˤƤ)"
+msgstr "E513: 書込みエラー, 変換失敗 (上書するには 'fenc' を空にしてください)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: 書込みエラー, 変換失敗, 行数 %ld (上書するには 'fenc' を空にしてくださ"
+"い)"
 
 msgid "E514: write error (file system full?)"
-msgstr "E514: ߥ顼, (ե륷ƥब?)"
+msgstr "E514: 書込みエラー, (ファイルシステムが満杯?)"
 
 msgid " CONVERSION ERROR"
-msgstr " Ѵ顼"
+msgstr " 変換エラー"
+
+#, c-format
+msgid " in line %ld;"
+msgstr "行 %ld;"
 
 msgid "[Device]"
-msgstr "[ǥХ]"
+msgstr "[デバイス]"
 
 msgid "[New]"
-msgstr "[]"
+msgstr "[新]"
 
 msgid " [a]"
 msgstr " [a]"
 
 msgid " appended"
-msgstr " ɲ"
+msgstr " 追加"
 
 msgid " [w]"
 msgstr " [w]"
 
 msgid " written"
-msgstr " "
+msgstr " 書込み"
 
 msgid "E205: Patchmode: can't save original file"
-msgstr "E205: patchmode: ܥե¸Ǥޤ"
+msgstr "E205: patchmode: 原本ファイルを保存できません"
 
 msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: patchmode: θܥեtouchǤޤ"
+msgstr "E206: patchmode: 空の原本ファイルをtouchできません"
 
 msgid "E207: Can't delete backup file"
-msgstr "E207: Хååץեäޤ"
+msgstr "E207: バックアップファイルを消せません"
 
 msgid ""
 "\n"
 "WARNING: Original file may be lost or damaged\n"
 msgstr ""
 "\n"
-"ٹ: ܥե뤬줿ѹޤ\n"
+"警告: 原本ファイルが失われたか変更されました\n"
 
 msgid "don't quit the editor until the file is successfully written!"
-msgstr "ե¸ޤǥǥλʤǤ!"
+msgstr "ファイルの保存に成功するまでエディタを終了しないでください!"
 
 msgid "[dos]"
 msgstr "[dos]"
 
 msgid "[dos format]"
-msgstr "[dosեޥå]"
+msgstr "[dosフォーマット]"
 
 msgid "[mac]"
 msgstr "[mac]"
 
 msgid "[mac format]"
-msgstr "[macեޥå]"
+msgstr "[macフォーマット]"
 
 msgid "[unix]"
 msgstr "[unix]"
 
 msgid "[unix format]"
-msgstr "[unixեޥå]"
+msgstr "[unixフォーマット]"
 
 msgid "1 line, "
-msgstr "1 , "
+msgstr "1 行, "
 
 #, c-format
 msgid "%ld lines, "
-msgstr "%ld , "
+msgstr "%ld 行, "
 
 msgid "1 character"
-msgstr "1 ʸ"
+msgstr "1 文字"
+
+#, c-format
+msgid "%lld characters"
+msgstr "%lld 文字"
 
+#. Explicit typecast avoids warning on Mac OS X 10.6
 #, c-format
 msgid "%ld characters"
-msgstr "%ld ʸ"
+msgstr "%ld 文字"
 
 msgid "[noeol]"
 msgstr "[noeol]"
 
 msgid "[Incomplete last line]"
-msgstr "[ǽԤԴ]"
+msgstr "[最終行が不完全]"
 
 #. don't overwrite messages here
 #. must give this prompt
 #. don't use emsg() here, don't want to flush the buffers
 msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "ٹ: ɹ˥եѹޤ!!!"
+msgstr "警告: 読込んだ後にファイルに変更がありました!!!"
 
 msgid "Do you really want to write to it"
-msgstr "˾񤭤ޤ"
+msgstr "本当に上書きしますか"
 
 #, c-format
 msgid "E208: Error writing to \"%s\""
-msgstr "E208: \"%s\" Υ顼Ǥ"
+msgstr "E208: \"%s\" を書込み中のエラーです"
 
 #, c-format
 msgid "E209: Error closing \"%s\""
-msgstr "E209: \"%s\" Ĥ˥顼Ǥ"
+msgstr "E209: \"%s\" を閉じる時にエラーです"
 
 #, c-format
 msgid "E210: Error reading \"%s\""
-msgstr "E210: \"%s\" ɹΥ顼Ǥ"
+msgstr "E210: \"%s\" を読込中のエラーです"
 
 msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: autocommand  FileChangedShell Хåեޤ"
+msgstr "E246: autocommand の FileChangedShell がバッファを削除しました"
 
 #, c-format
 msgid "E211: File \"%s\" no longer available"
-msgstr "E211: ե \"%s\" ϴ¸ߤޤ"
+msgstr "E211: ファイル \"%s\" は既に存在しません"
 
 #, c-format
 msgid ""
 "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
 "well"
-msgstr "W12: ٹ: ե \"%s\" ѹVimΥХåեѹޤ"
+msgstr "W12: 警告: ファイル \"%s\" が変更されVimのバッファも変更されました"
 
 msgid "See \":help W12\" for more info."
-msgstr "ܺ٤ \":help W12\" 򻲾ȤƤ"
+msgstr "詳細は \":help W12\" を参照してください"
 
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: ٹ: ե \"%s\" Խϸѹޤ"
+msgstr "W11: 警告: ファイル \"%s\" は編集開始後に変更されました"
 
 msgid "See \":help W11\" for more info."
-msgstr "ܺ٤ \":help W11\" 򻲾ȤƤ"
+msgstr "詳細は \":help W11\" を参照してください"
 
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr "W16: ٹ: ե \"%s\" Υ⡼ɤԽϸѹޤ"
+msgstr "W16: 警告: ファイル \"%s\" のモードが編集開始後に変更されました"
 
 msgid "See \":help W16\" for more info."
-msgstr "ܺ٤ \":help W16\" 򻲾ȤƤ"
+msgstr "詳細は \":help W16\" を参照してください"
 
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: ٹ: ե \"%s\" Խϸ˺ޤ"
+msgstr "W13: 警告: ファイル \"%s\" は編集開始後に作成されました"
 
 msgid "Warning"
-msgstr "ٹ"
+msgstr "警告"
 
 msgid ""
 "&OK\n"
 "&Load File"
 msgstr ""
 "&OK\n"
-"եɹ(&L)"
+"ファイル読込(&L)"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: \"%s\" ɤǤޤǤ"
+msgstr "E462: \"%s\" をリロードする準備ができませんでした"
 
 #, c-format
 msgid "E321: Could not reload \"%s\""
-msgstr "E321: \"%s\" ϥɤǤޤǤ"
+msgstr "E321: \"%s\" はリロードできませんでした"
 
 msgid "--Deleted--"
-msgstr "----"
+msgstr "--削除済--"
 
 #, c-format
 msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "autocommand: %s <Хåե=%d> ưŪ˺ޤ"
+msgstr "autocommand: %s <バッファ=%d> が自動的に削除されます"
 
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
-msgstr "E367: Υ롼פϤޤ: \"%s\""
+msgstr "E367: そのグループはありません: \"%s\""
 
 #, c-format
 msgid "E215: Illegal character after *: %s"
-msgstr "E215: * θʸޤ: %s"
+msgstr "E215: * の後に不正な文字がありました: %s"
 
 #, c-format
 msgid "E216: No such event: %s"
-msgstr "E216: Τ褦ʥ٥ȤϤޤ: %s"
+msgstr "E216: そのようなイベントはありません: %s"
 
 #, c-format
 msgid "E216: No such group or event: %s"
-msgstr "E216: Τ褦ʥ롼פ⤷ϥ٥ȤϤޤ: %s"
+msgstr "E216: そのようなグループもしくはイベントはありません: %s"
 
 #. Highlight title
 msgid ""
@@ -1818,16 +1961,16 @@
 
 #, c-format
 msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <Хåե=%d>: ̵ʥХåեֹǤ"
+msgstr "E680: <バッファ=%d>: 無効なバッファ番号です "
 
 msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: ƤΥ٥ȤФƤautocommandϼ¹ԤǤޤ"
+msgstr "E217: 全てのイベントに対してのautocommandは実行できません"
 
 msgid "No matching autocommands"
-msgstr "autocommand¸ߤޤ"
+msgstr "該当するautocommandは存在しません"
 
 msgid "E218: autocommand nesting too deep"
-msgstr "E218: autocommandҤ᤮ޤ"
+msgstr "E218: autocommandの入れ子が深過ぎます"
 
 #, c-format
 msgid "%s Auto commands for \"%s\""
@@ -1835,984 +1978,985 @@
 
 #, c-format
 msgid "Executing %s"
-msgstr "%s ¹ԤƤޤ"
+msgstr "%s を実行しています"
 
 #, c-format
 msgid "autocommand %s"
 msgstr "autocommand %s"
 
 msgid "E219: Missing {."
-msgstr "E219: { ޤ."
+msgstr "E219: { がありません."
 
 msgid "E220: Missing }."
-msgstr "E220: } ޤ."
+msgstr "E220: } がありません."
 
 msgid "E490: No fold found"
-msgstr "E490: ޾ߤޤ"
+msgstr "E490: 折畳みがありません"
 
 msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: ߤ 'foldmethod' Ǥ޾ߤǤޤ"
+msgstr "E350: 現在の 'foldmethod' では折畳みを作成できません"
 
 msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: ߤ 'foldmethod' Ǥ޾ߤǤޤ"
+msgstr "E351: 現在の 'foldmethod' では折畳みを削除できません"
 
 #, c-format
 msgid "+--%3ld lines folded "
-msgstr "+--%3ld Ԥ޾ޤޤ"
+msgstr "+--%3ld 行が折畳まれました "
 
 msgid "E222: Add to read buffer"
-msgstr "E222: ɹХåեɲ"
+msgstr "E222: 読込バッファへ追加"
 
 msgid "E223: recursive mapping"
-msgstr "E223: ƵŪޥåԥ"
+msgstr "E223: 再帰的マッピング"
 
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: %s ȤХûϤϴ¸ߤޤ"
+msgstr "E224: %s というグローバル短縮入力は既に存在します"
 
 #, c-format
 msgid "E225: global mapping already exists for %s"
-msgstr "E225: %s ȤХޥåԥ󥰤ϴ¸ߤޤ"
+msgstr "E225: %s というグローバルマッピングは既に存在します"
 
 #, c-format
 msgid "E226: abbreviation already exists for %s"
-msgstr "E226: %s ȤûϤϴ¸ߤޤ"
+msgstr "E226: %s という短縮入力は既に存在します"
 
 #, c-format
 msgid "E227: mapping already exists for %s"
-msgstr "E227: %s Ȥޥåԥ󥰤ϴ¸ߤޤ"
+msgstr "E227: %s というマッピングは既に存在します"
 
 msgid "No abbreviation found"
-msgstr "ûϤϤߤĤޤǤ"
+msgstr "短縮入力は見つかりませんでした"
 
 msgid "No mapping found"
-msgstr "ޥåԥ󥰤ϤߤĤޤǤ"
+msgstr "マッピングは見つかりませんでした"
 
 msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: ʥ⡼"
+msgstr "E228: makemap: 不正なモード"
+
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: GUI用のプロセスの起動に失敗しました"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: 子プロセスがGUIの起動に失敗しました"
 
 msgid "E229: Cannot start the GUI"
-msgstr "E229: GUI򳫻ϤǤޤ"
+msgstr "E229: GUIを開始できません"
 
 #, c-format
 msgid "E230: Cannot read from \"%s\""
-msgstr "E230: \"%s\"ɹळȤǤޤ"
+msgstr "E230: \"%s\"から読込むことができません"
 
 msgid "E665: Cannot start GUI, no valid font found"
-msgstr "E665: ͭʥեȤĤʤΤ, GUI򳫻ϤǤޤ"
+msgstr "E665: 有効なフォントが見つからないので, GUIを開始できません"
 
 msgid "E231: 'guifontwide' invalid"
-msgstr "E231: 'guifontwide' ̵Ǥ"
+msgstr "E231: 'guifontwide' が無効です"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599: 'imactivatekey' ꤵ줿̵ͤǤ"
+msgstr "E599: 'imactivatekey' に設定された値が無効です"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
-msgstr "E254: %s οƤޤ"
+msgstr "E254: %s の色を割り当てられません"
 
 msgid "No match at cursor, finding next"
-msgstr "ΰ֤˥ޥåϤޤ, 򸡺Ƥޤ"
+msgstr "カーソルの位置にマッチはありません, 次を検索しています"
 
 msgid "<cannot open> "
-msgstr "<ޤ>"
+msgstr "<開けません> "
 
 #, c-format
 msgid "E616: vim_SelFile: can't get font %s"
-msgstr "E616: vim_SelFile: ե %s Ǥޤ"
+msgstr "E616: vim_SelFile: フォント %s を取得できません"
 
 msgid "E614: vim_SelFile: can't return to current directory"
-msgstr "E614: vim_SelFile: ߤΥǥ쥯ȥޤ"
+msgstr "E614: vim_SelFile: 現在のディレクトリに戻れません"
 
 msgid "Pathname:"
-msgstr "ѥ̾:"
+msgstr "パス名:"
 
 msgid "E615: vim_SelFile: can't get current directory"
-msgstr "E615: vim_SelFile: ߤΥǥ쥯ȥǤޤ"
+msgstr "E615: vim_SelFile: 現在のディレクトリを取得できません"
 
 msgid "OK"
 msgstr "OK"
 
 msgid "Cancel"
-msgstr "󥻥"
+msgstr "キャンセル"
 
 msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-msgstr "С: ǤޤǤ."
+msgstr "スクロールバー: 画像を取得できませんでした."
 
 msgid "Vim dialog"
-msgstr "Vim "
+msgstr "Vim ダイアログ"
 
 msgid "E232: Cannot create BalloonEval with both message and callback"
-msgstr "E232: åȥХåΤ BalloonEval Ǥޤ"
-
-msgid "Vim dialog..."
-msgstr "Vim ..."
+msgstr "E232: メッセージとコールバックのある BalloonEval を作成できません"
 
 msgid ""
 "&Yes\n"
 "&No\n"
 "&Cancel"
 msgstr ""
-"Ϥ(&Y)\n"
-"(&N)\n"
-"󥻥(&C)"
+"はい(&Y)\n"
+"いいえ(&N)\n"
+"キャンセル(&C)"
 
 msgid "Input _Methods"
-msgstr "ץåȥ᥽å"
+msgstr "インプットメソッド"
 
 msgid "VIM - Search and Replace..."
-msgstr "VIM - ִ..."
+msgstr "VIM - 検索と置換..."
 
 msgid "VIM - Search..."
-msgstr "VIM - ..."
+msgstr "VIM - 検索..."
 
 msgid "Find what:"
-msgstr "ʸ:"
+msgstr "検索文字列:"
 
 msgid "Replace with:"
-msgstr "ִʸ:"
+msgstr "置換文字列:"
 
 #. whole word only button
 msgid "Match whole word only"
-msgstr "Τ˳Τ"
+msgstr "正確に該当するものだけ"
 
 #. match case button
 msgid "Match case"
-msgstr "ʸ/ʸ̤"
+msgstr "大文字/小文字を区別する"
 
 msgid "Direction"
-msgstr ""
+msgstr "方向"
 
 #. 'Up' and 'Down' buttons
 msgid "Up"
-msgstr ""
+msgstr "上"
 
 msgid "Down"
-msgstr ""
+msgstr "下"
 
+#. 'Find Next' button
 msgid "Find Next"
-msgstr "򸡺"
+msgstr "次を検索"
 
+#. 'Replace' button
 msgid "Replace"
-msgstr "ִ"
+msgstr "置換"
 
+#. 'Replace All' button
 msgid "Replace All"
-msgstr "ִ"
+msgstr "全て置換"
 
 msgid "Vim: Received \"die\" request from session manager\n"
-msgstr "Vim: åޥ͡㤫 \"die\" ׵ޤ\n"
+msgstr "Vim: セッションマネージャから \"die\" 要求を受け取りました\n"
 
 msgid "Close"
-msgstr "Ĥ"
+msgstr "閉じる"
 
 msgid "New tab"
-msgstr "֥ڡ"
+msgstr "新規タブページ"
 
 msgid "Open Tab..."
-msgstr "֥ڡ򳫤..."
+msgstr "タブページを開く..."
 
 msgid "Vim: Main window unexpectedly destroyed\n"
-msgstr "Vim: ᥤ󥦥ɥ԰դ˲ޤ\n"
-
-msgid "Font Selection"
-msgstr "ե"
-
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "ΰΤCUT_BUFFER0Ѥޤ"
+msgstr "Vim: メインウィンドウが不意に破壊されました\n"
 
 msgid "&Filter"
-msgstr "ե륿(&F)"
+msgstr "フィルタ(&F)"
 
 msgid "&Cancel"
-msgstr "󥻥(&C)"
+msgstr "キャンセル(&C)"
 
 msgid "Directories"
-msgstr "ǥ쥯ȥ"
+msgstr "ディレクトリ"
 
 msgid "Filter"
-msgstr "ե륿"
+msgstr "フィルタ"
 
 msgid "&Help"
-msgstr "إ(&H)"
+msgstr "ヘルプ(&H)"
 
 msgid "Files"
-msgstr "ե"
+msgstr "ファイル"
 
 msgid "&OK"
 msgstr "&OK"
 
 msgid "Selection"
-msgstr ""
+msgstr "選択"
 
 msgid "Find &Next"
-msgstr "򸡺(&N)"
+msgstr "次を検索(&N)"
 
 msgid "&Replace"
-msgstr "ִ(&R)"
+msgstr "置換(&R)"
 
 msgid "Replace &All"
-msgstr "ִ(&A)"
+msgstr "全て置換(&A)"
 
 msgid "&Undo"
-msgstr "ɥ(&U)"
-
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zapե '%s' ɹޤ"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ե %s ѤǤޤ"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ҥץߥåǤ.\n"
+msgstr "アンドゥ(&U)"
 
 #, c-format
 msgid "E671: Cannot find window title \"%s\""
-msgstr "E671: ȥ뤬 \"%s\" ΥɥϤߤĤޤ"
+msgstr "E671: タイトルが \"%s\" のウィンドウは見つかりません"
 
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-msgstr "E243: ϥݡȤޤ: \"-%s\"; OLEǤѤƤ."
+msgstr "E243: 引数はサポートされません: \"-%s\"; OLE版を使用してください."
 
 msgid "E672: Unable to open window inside MDI application"
-msgstr "E672: MDIץǤϥɥ򳫤ޤ"
+msgstr "E672: MDIアプリの中ではウィンドウを開けません"
 
 msgid "Close tab"
-msgstr "֥ڡĤ"
+msgstr "タブページを閉じる"
 
 msgid "Open tab..."
-msgstr "֥ڡ򳫤"
+msgstr "タブページを開く"
 
 msgid "Find string (use '\\\\' to find  a '\\')"
-msgstr "ʸ ('\\' 򸡺ˤ '\\\\')"
+msgstr "検索文字列 ('\\' を検索するには '\\\\')"
 
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
-msgstr "ִ ('\\' 򸡺ˤ '\\\\')"
+msgstr "検索・置換 ('\\' を検索するには '\\\\')"
 
 #. We fake this: Use a filter that doesn't select anything and a default
 #. * file name that won't be used.
 msgid "Not Used"
-msgstr "Ȥޤ"
+msgstr "使われません"
 
 msgid "Directory\t*.nothing\n"
-msgstr "ǥ쥯ȥ\t*.nothing\n"
+msgstr "ディレクトリ\t*.nothing\n"
 
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-msgstr "Vim E458: ꤬ʤΤǥȥƤޤ"
+msgstr "Vim E458: 色指定が正しくないのでエントリを割り当てられません"
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-msgstr "E250: ʲʸåȤΥեȤޤ %s:"
+msgstr "E250: 以下の文字セットのフォントがありません %s:"
 
 #, c-format
 msgid "E252: Fontset name: %s"
-msgstr "E252: եȥå̾: %s"
+msgstr "E252: フォントセット名: %s"
 
 #, c-format
 msgid "Font '%s' is not fixed-width"
-msgstr "ե '%s' ϸǤϤޤ"
+msgstr "フォント '%s' は固定幅ではありません"
 
 #, c-format
 msgid "E253: Fontset name: %s\n"
-msgstr "E253: եȥå̾: %s\n"
+msgstr "E253: フォントセット名: %s\n"
 
 #, c-format
 msgid "Font0: %s\n"
-msgstr "ե0: %s\n"
+msgstr "フォント0: %s\n"
 
 #, c-format
 msgid "Font1: %s\n"
-msgstr "ե1: %s\n"
+msgstr "フォント1: %s\n"
 
 #, c-format
 msgid "Font%ld width is not twice that of font0\n"
-msgstr "ե%ld ե02ܤǤϤޤ\n"
+msgstr "フォント%ld の幅がフォント0の2倍ではありません\n"
 
 #, c-format
 msgid "Font0 width: %ld\n"
-msgstr "ե0: %ld\n"
+msgstr "フォント0の幅: %ld\n"
 
 #, c-format
 msgid ""
 "Font1 width: %ld\n"
 "\n"
 msgstr ""
-"ե1: %ld\n"
+"フォント1の幅: %ld\n"
 "\n"
 
 msgid "Invalid font specification"
-msgstr "̵ʥեȻǤ"
+msgstr "無効なフォント指定です"
 
 msgid "&Dismiss"
-msgstr "Ѳ(&D)"
+msgstr "却下する(&D)"
 
 msgid "no specific match"
-msgstr "ޥåΤޤ"
+msgstr "マッチするものがありません"
 
 msgid "Vim - Font Selector"
-msgstr "Vim - ե"
+msgstr "Vim - フォント選択"
 
 msgid "Name:"
-msgstr "̾:"
+msgstr "名前:"
 
 #. create toggle button
 msgid "Show size in Points"
-msgstr "ݥȤɽ"
+msgstr "サイズをポイントで表示する"
 
 msgid "Encoding:"
-msgstr "󥳡:"
+msgstr "エンコード:"
 
 msgid "Font:"
-msgstr "ե:"
+msgstr "フォント:"
 
 msgid "Style:"
-msgstr ":"
+msgstr "スタイル:"
 
 msgid "Size:"
-msgstr ":"
+msgstr "サイズ:"
 
 msgid "E256: Hangul automata ERROR"
-msgstr "E256: ϥ󥰥륪ȥޥȥ󥨥顼"
+msgstr "E256: ハングルオートマトンエラー"
 
 msgid "E550: Missing colon"
-msgstr "E550: 󤬤ޤ"
+msgstr "E550: コロンがありません"
 
 msgid "E551: Illegal component"
-msgstr "E551: ʹʸǤǤ"
+msgstr "E551: 不正な構文要素です"
 
 msgid "E552: digit expected"
-msgstr "E552: ͤɬפǤ"
+msgstr "E552: 数値が必要です"
 
 #, c-format
 msgid "Page %d"
-msgstr "%d ڡ"
+msgstr "%d ページ"
 
 msgid "No text to be printed"
-msgstr "ƥȤޤ"
+msgstr "印刷するテキストがありません"
 
 #, c-format
 msgid "Printing page %d (%d%%)"
-msgstr ": ڡ %d (%d%%)"
+msgstr "印刷中: ページ %d (%d%%)"
 
 #, c-format
 msgid " Copy %d of %d"
-msgstr " ԡ %d ( %d )"
+msgstr " コピー %d (全 %d 中)"
 
 #, c-format
 msgid "Printed: %s"
-msgstr "ޤ: %s"
+msgstr "印刷しました: %s"
 
 msgid "Printing aborted"
-msgstr "ߤޤ"
+msgstr "印刷が中止されました"
 
 msgid "E455: Error writing to PostScript output file"
-msgstr "E455: PostScriptϥեνߥ顼Ǥ"
+msgstr "E455: PostScript出力ファイルの書込みエラーです"
 
 #, c-format
 msgid "E624: Can't open file \"%s\""
-msgstr "E624: ե \"%s\" 򳫤ޤ"
+msgstr "E624: ファイル \"%s\" を開けません"
 
 #, c-format
 msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: PostScriptΥ꥽ե \"%s\" ɹޤ"
+msgstr "E457: PostScriptのリソースファイル \"%s\" を読込めません"
 
 #, c-format
 msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: ե \"%s\"  PostScript ꥽եǤϤޤ"
+msgstr "E618: ファイル \"%s\" は PostScript リソースファイルではありません"
 
 #, c-format
 msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: ե \"%s\" бƤʤ PostScript ꥽եǤ"
+msgstr "E619: ファイル \"%s\" は対応していない PostScript リソースファイルです"
 
 #, c-format
 msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: ꥽ե \"%s\" ϥС󤬰ۤʤޤ"
+msgstr "E621: リソースファイル \"%s\" はバージョンが異なります"
 
 msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: ߴ̵ޥХȥ󥳡ǥ󥰤ʸåȤǤ"
+msgstr "E673: 互換性の無いマルチバイトエンコーディングと文字セットです"
 
 msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: ޥХȥ󥳡ǥ󥰤Ǥ printmbcharset ˤǤޤ"
+msgstr "E674: マルチバイトエンコーディングでは printmbcharset を空にできません"
 
 msgid "E675: No default font specified for multi-byte printing."
 msgstr ""
-"E675: ޥХʸ뤿ΥǥեȥեȤꤵƤޤ"
+"E675: マルチバイト文字を印刷するためのデフォルトフォントが指定されていません"
 
 msgid "E324: Can't open PostScript output file"
-msgstr "E324: PostScriptѤΥե򳫤ޤ"
+msgstr "E324: PostScript出力用のファイルを開けません"
 
 #, c-format
 msgid "E456: Can't open file \"%s\""
-msgstr "E456: ե \"%s\" 򳫤ޤ"
+msgstr "E456: ファイル \"%s\" を開けません"
 
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: PostScriptΥ꥽ե \"prolog.ps\" ߤĤޤ"
+msgstr "E456: PostScriptのリソースファイル \"prolog.ps\" が見つかりません"
 
 msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: PostScriptΥ꥽ե \"cidfont.ps\" ߤĤޤ"
+msgstr "E456: PostScriptのリソースファイル \"cidfont.ps\" が見つかりません"
 
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: PostScriptΥ꥽ե \"%s.ps\" ߤĤޤ"
+msgstr "E456: PostScriptのリソースファイル \"%s.ps\" が見つかりません"
 
 #, c-format
 msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: 󥳡 \"%s\" ѴǤޤ"
+msgstr "E620: 印刷エンコード \"%s\" へ変換できません"
 
 msgid "Sending to printer..."
-msgstr "ץ󥿤..."
+msgstr "プリンタに送信中..."
 
 msgid "E365: Failed to print PostScript file"
-msgstr "E365: PostScriptեΰ˼Ԥޤ"
+msgstr "E365: PostScriptファイルの印刷に失敗しました"
 
 msgid "Print job sent."
-msgstr "֤ޤ."
+msgstr "印刷ジョブを送信しました."
 
 msgid "Add a new database"
-msgstr "ǡ١ɲ"
+msgstr "新データベースを追加"
 
 msgid "Query for a pattern"
-msgstr "ѥΥ꡼ɲ"
+msgstr "パターンのクエリーを追加"
 
 msgid "Show this message"
-msgstr "Υåɽ"
+msgstr "このメッセージを表示する"
 
 msgid "Kill a connection"
-msgstr "³λ"
+msgstr "接続を終了する"
 
 msgid "Reinit all connections"
-msgstr "Ƥ³ƽ"
+msgstr "全ての接続を再初期化する"
 
 msgid "Show connections"
-msgstr "³ɽ"
+msgstr "接続を表示する"
 
 #, c-format
 msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: ˡ: cs[cope] %s"
+msgstr "E560: 使用方法: cs[cope] %s"
 
 msgid "This cscope command does not support splitting the window.\n"
-msgstr "cscopeޥɤʬ䥦ɥǤϥݡȤޤ.\n"
+msgstr "このcscopeコマンドは分割ウィンドウではサポートされません.\n"
 
 msgid "E562: Usage: cstag <ident>"
-msgstr "E562: ˡ: cstag <ident>"
+msgstr "E562: 使用法: cstag <ident>"
 
 msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: ߤĤޤ"
+msgstr "E257: cstag: タグが見つかりません"
 
 #, c-format
 msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) 顼: %d"
+msgstr "E563: stat(%s) エラー: %d"
 
 msgid "E563: stat error"
-msgstr "E563: stat 顼"
+msgstr "E563: stat エラー"
 
 #, c-format
 msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s ϥǥ쥯ȥڤͭcscopeΥǡ١ǤϤޤ"
+msgstr "E564: %s はディレクトリ及び有効なcscopeのデータベースではありません"
 
 #, c-format
 msgid "Added cscope database %s"
-msgstr "cscopeǡ١ %s ɲ"
+msgstr "cscopeデータベース %s を追加"
 
 #, c-format
 msgid "E262: error reading cscope connection %ld"
-msgstr "E262: cscope³ %ld ɹΥ顼Ǥ"
+msgstr "E262: cscopeの接続 %ld を読込み中のエラーです"
 
 msgid "E561: unknown cscope search type"
-msgstr "E561: ̤ΤcscopeǤ"
+msgstr "E561: 未知のcscope検索型です"
 
 msgid "E566: Could not create cscope pipes"
-msgstr "E566: cscopeѥפǤޤǤ"
+msgstr "E566: cscopeパイプを作成できませんでした"
 
 msgid "E622: Could not fork for cscope"
-msgstr "E622: cscopeεư(fork)˼Ԥޤ"
+msgstr "E622: cscopeの起動準備(fork)に失敗しました"
 
 msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection μ¹Ԥ˼Ԥޤ"
+msgstr "cs_create_connection の実行に失敗しました"
 
 msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: to_fp  fdopen ˼Ԥޤ"
+msgstr "cs_create_connection: to_fp の fdopen に失敗しました"
 
 msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fr_fp  fdopen ˼Ԥޤ"
+msgstr "cs_create_connection: fr_fp の fdopen に失敗しました"
 
 msgid "E623: Could not spawn cscope process"
-msgstr "E623: cscopeץưǤޤǤ"
+msgstr "E623: cscopeプロセスを起動できませんでした"
 
 msgid "E567: no cscope connections"
-msgstr "E567: cscope³˼Ԥޤ"
+msgstr "E567: cscope接続に失敗しました"
 
 #, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: cscope꡼ %s of %s ˳ޤǤ"
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: 無効な cscopequickfix フラグ %c の %c です"
 
 #, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: ̵ cscopequickfix ե饰 %c  %c Ǥ"
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: cscopeクエリー %s of %s に該当がありませんでした"
 
 msgid "cscope commands:\n"
-msgstr "cscopeޥ:\n"
+msgstr "cscopeコマンド:\n"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (ˡ: %s)"
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (使用法: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: この関数を呼んでいる関数を探す\n"
+"       d: この関数から呼んでいる関数を探す\n"
+"       e: このegrepパターンを探す\n"
+"       f: このファイルを探す\n"
+"       g: この定義を探す\n"
+"       i: このファイルを#includeしているファイルを探す\n"
+"       s: このCシンボルを探す\n"
+"       t: このテキスト文字列を探す\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625: cscopeǡ١: %s 򳫤ȤǤޤ"
+msgstr "E625: cscopeデータベース: %s を開くことができません"
 
 msgid "E626: cannot get cscope database information"
-msgstr "E626: cscopeǡ١ξǤޤ"
+msgstr "E626: cscopeデータベースの情報を取得できません"
 
 msgid "E568: duplicate cscope database not added"
-msgstr "E568: ʣcscopeǡ١ɲäޤǤ"
-
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: cscope³κãޤ"
+msgstr "E568: 重複するcscopeデータベースは追加されませんでした"
 
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: cscope³ %s ߤĤޤǤ"
+msgstr "E261: cscope接続 %s が見つかりませんでした"
 
 #, c-format
 msgid "cscope connection %s closed"
-msgstr "cscope³ %s Ĥޤ"
+msgstr "cscope接続 %s が閉じられました"
 
 #. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: cs_manage_matches ̿Ūʥ顼Ǥ"
+msgstr "E570: cs_manage_matches で致命的なエラーです"
 
 #, c-format
 msgid "Cscope tag: %s"
-msgstr "Cscope : %s"
+msgstr "Cscope タグ: %s"
 
 msgid ""
 "\n"
 "   #   line"
 msgstr ""
 "\n"
-"   #   ֹ"
+"   #   行番号"
 
 msgid "filename / context / line\n"
-msgstr "ե̾ / ʸ̮ / \n"
+msgstr "ファイル名 / 文脈 / 行\n"
 
 #, c-format
 msgid "E609: Cscope error: %s"
-msgstr "E609: cscope顼: %s"
+msgstr "E609: cscopeエラー: %s"
 
 msgid "All cscope databases reset"
-msgstr "Ƥcscopeǡ١ꥻåȤޤ"
+msgstr "全てのcscopeデータベースをリセットします"
 
 msgid "no cscope connections\n"
-msgstr "cscope³ޤ\n"
+msgstr "cscope接続がありません\n"
 
 msgid " # pid    database name                       prepend path\n"
-msgstr " # pid    ǡ١̾                      prepend ѥ\n"
+msgstr " # pid    データベース名                      prepend パス\n"
+
+msgid "Lua library cannot be loaded."
+msgstr "Luaライブラリをロードできません."
+
+msgid "cannot save undo information"
+msgstr "アンドゥ情報が保存できません"
 
 msgid ""
-"???: Sorry, this command is disabled, the MzScheme library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
-msgstr ""
-"???: Υޥɤ̵Ǥ, ʤ: MzScheme 饤֥ɤǤ"
-"Ǥ."
+msgstr "E815: このコマンドは無効です. MzScheme ライブラリをロードできません."
 
 msgid "invalid expression"
-msgstr "̵ʼǤ"
+msgstr "無効な式です"
 
 msgid "expressions disabled at compile time"
-msgstr "ϥѥ̵ˤƤޤ"
+msgstr "式はコンパイル時に無効にされています"
 
 msgid "hidden option"
-msgstr "ץ"
+msgstr "隠しオプション"
 
 msgid "unknown option"
-msgstr "̤ΤΥץǤ"
+msgstr "未知のオプションです"
 
 msgid "window index is out of range"
-msgstr "ϰϳΥɥֹǤ"
+msgstr "範囲外のウィンドウ番号です"
 
 msgid "couldn't open buffer"
-msgstr "Хåե򳫤ޤ"
-
-msgid "cannot save undo information"
-msgstr "ɥ¸Ǥޤ"
+msgstr "バッファを開けません"
 
 msgid "cannot delete line"
-msgstr "Ԥäޤ"
+msgstr "行を消せません"
 
 msgid "cannot replace line"
-msgstr "ԤִǤޤ"
+msgstr "行を置換できません"
 
 msgid "cannot insert line"
-msgstr "ԤǤޤ"
+msgstr "行を挿入できません"
 
 msgid "string cannot contain newlines"
-msgstr "ʸˤϲʸޤޤ"
+msgstr "文字列には改行文字を含められません"
+
+msgid "error converting Scheme values to Vim"
+msgstr "Scheme値のVimへの変換エラー"
 
 msgid "Vim error: ~a"
-msgstr "Vim 顼: ~a"
+msgstr "Vim エラー: ~a"
 
 msgid "Vim error"
-msgstr "Vim 顼"
+msgstr "Vim エラー"
 
 msgid "buffer is invalid"
-msgstr "Хåե̵Ǥ"
+msgstr "バッファは無効です"
 
 msgid "window is invalid"
-msgstr "ɥ̵Ǥ"
+msgstr "ウィンドウは無効です"
 
 msgid "linenr out of range"
-msgstr "ϰϳιֹǤ"
+msgstr "範囲外の行番号です"
 
 msgid "not allowed in the Vim sandbox"
-msgstr "ɥܥåǤϵޤ"
+msgstr "サンドボックスでは許されません"
+
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: ライブラリ %s をロードできませんでした"
+
+msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+msgstr ""
+"このコマンドは無効です, ごめんなさい: Perlライブラリをロードできませんでした."
+
+msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+msgstr ""
+"E299: サンドボックスでは Safe モジュールを使用しないPerlスクリプトは禁じられ"
+"ています"
+
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: このVimでは :py3 を使った後に :python を使えません"
+
+msgid "only string keys are allowed"
+msgstr "文字列のキーのみが許可されています"
 
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
 msgstr ""
-"E263: Υޥɤ̵Ǥ,ʤ: Python饤֥ɤǤޤ"
-"Ǥ."
+"E263: このコマンドは無効です,ごめんなさい: Pythonライブラリをロードできません"
+"でした."
 
 # Added at 07-Feb-2004.
 msgid "E659: Cannot invoke Python recursively"
-msgstr "E659: Python ƵŪ˼¹Ԥ뤳ȤϤǤޤ"
-
-msgid "can't delete OutputObject attributes"
-msgstr "OutputObject°äޤ"
+msgstr "E659: Python を再帰的に実行することはできません"
 
-msgid "softspace must be an integer"
-msgstr "softspace  integer ǤʤФʤޤ"
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: 式評価は有効なpythonオブジェクトを返しませんでした"
 
-msgid "invalid attribute"
-msgstr "̵°Ǥ"
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: 返されたpythonオブジェクトをvimの値に変換できませんでした"
 
-msgid "writelines() requires list of strings"
-msgstr "writelines() ˤʸΥꥹȤɬפǤ"
+msgid "failed to run the code"
+msgstr "コードの実行に失敗しました"
 
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: I/O֥Ȥν˥顼Ǥ"
+msgid "E863: return value must be an instance of str"
+msgstr "E863: 戻り値は文字列のインスタンスでなければなりません"
 
-msgid "attempt to refer to deleted buffer"
-msgstr "ä줿ХåեȤޤ"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: このVimでは :python を使った後に :py3 を使えません"
 
-msgid "line number out of range"
-msgstr "ϰϳιֹǤ"
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: 式評価は有効なpython 3オブジェクトを返しませんでした"
 
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<Хåե֥ (õѤ) %8lX>"
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr "E861: 返されたpython 3オブジェクトをvimの値に変換できませんでした"
 
-msgid "invalid mark name"
-msgstr "̵ʥޡ̾Ǥ"
-
-msgid "no such buffer"
-msgstr "Τ褦ʥХåեϤޤ"
-
-msgid "attempt to refer to deleted window"
-msgstr "ä줿ɥȤޤ"
-
-msgid "readonly attribute"
-msgstr "ɹ°"
-
-msgid "cursor position outside buffer"
-msgstr "뤬Хåեγˤޤ"
-
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<ɥ֥ (õ) %.8lX>"
-
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<ɥ֥ (̤) %.8lX>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<ɥ %d>"
-
-msgid "no such window"
-msgstr "Τ褦ʥɥϤޤ"
+msgid "index must be int or slice"
+msgstr "インデックスは整数かスライスでなければなりません"
 
 msgid "E265: $_ must be an instance of String"
-msgstr "E265: $_ ʸΥ󥹥󥹤ǤʤФʤޤ"
+msgstr "E265: $_ は文字列のインスタンスでなければなりません"
 
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
-"E266: Υޥɤ̵Ǥ,ʤ: Ruby饤֥ɤǤޤ"
-"."
+"E266: このコマンドは無効です,ごめんなさい: Rubyライブラリをロードできませんで"
+"した."
 
 msgid "E267: unexpected return"
-msgstr "E267: ͽ return Ǥ"
+msgstr "E267: 予期せぬ return です"
 
 msgid "E268: unexpected next"
-msgstr "E268: ͽ next Ǥ"
+msgstr "E268: 予期せぬ next です"
 
 msgid "E269: unexpected break"
-msgstr "E269: ͽ break Ǥ"
+msgstr "E269: 予期せぬ break です"
 
 msgid "E270: unexpected redo"
-msgstr "E270: ͽ redo Ǥ"
+msgstr "E270: 予期せぬ redo です"
 
 msgid "E271: retry outside of rescue clause"
-msgstr "E271: rescue γ retry Ǥ"
+msgstr "E271: rescue の外の retry です"
 
 msgid "E272: unhandled exception"
-msgstr "E272: 갷ʤä㳰ޤ"
+msgstr "E272: 取り扱われなかった例外があります"
 
 #, c-format
 msgid "E273: unknown longjmp status %d"
-msgstr "E273: ̤Τlongjmp: %d"
+msgstr "E273: 未知のlongjmp状態: %d"
 
 msgid "Toggle implementation/definition"
-msgstr "ڤؤ"
+msgstr "実装と定義を切り替える"
 
 msgid "Show base class of"
-msgstr "Υ饹δɽ"
+msgstr "次のクラスの基底を表示"
 
 msgid "Show overridden member function"
-msgstr "С饤ɤ줿дؿɽ"
+msgstr "オーバーライドされたメンバ関数を表示"
 
 msgid "Retrieve from file"
-msgstr "ե뤫"
+msgstr "ファイルから回復する"
 
 msgid "Retrieve from project"
-msgstr "ץȤ"
+msgstr "プロジェクトから回復する"
 
 msgid "Retrieve from all projects"
-msgstr "ƤΥץȤ"
+msgstr "全てのプロジェクトから回復する"
 
 msgid "Retrieve"
-msgstr ""
+msgstr "回復"
 
 msgid "Show source of"
-msgstr "Υɽ"
+msgstr "次のソースを表示する"
 
 msgid "Find symbol"
-msgstr "ߤĤܥ"
+msgstr "見つけたシンボル"
 
 msgid "Browse class"
-msgstr "饹򻲾"
+msgstr "クラスを参照"
 
 msgid "Show class in hierarchy"
-msgstr "ؤǥ饹ɽ"
+msgstr "階層でクラスを表示"
 
 msgid "Show class in restricted hierarchy"
-msgstr "ꤵ줿ؤǥ饹ɽ"
+msgstr "限定された階層でクラスを表示"
 
 msgid "Xref refers to"
-msgstr "Xref λ"
+msgstr "Xref の参照先"
 
 msgid "Xref referred by"
-msgstr "Xref Ȥ"
+msgstr "Xref が参照される"
 
 msgid "Xref has a"
-msgstr "Xref ΤΤäƤޤ"
+msgstr "Xref が次のものをもっています"
 
 msgid "Xref used by"
-msgstr "Xref Ѥ"
+msgstr "Xref が使用される"
 
 msgid "Show docu of"
-msgstr "ʸϤɽ"
+msgstr "次の文章を表示"
 
 msgid "Generate docu for"
-msgstr "ʸϤ"
+msgstr "次の文章を生成"
 
 msgid ""
 "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
 "$PATH).\n"
 msgstr ""
-"SNiFF+³Ǥޤ. ĶåƤ(sniffemacs  $PATH ˤʤ"
-"Фʤޤ).\n"
+"SNiFF+に接続できません. 環境をチェックしてください(sniffemacs が $PATH になけ"
+"ればなりません).\n"
 
 msgid "E274: Sniff: Error during read. Disconnected"
-msgstr "E274: Sniff: ɹ˥顼ȯޤ. Ǥޤ"
+msgstr "E274: Sniff: 読込中にエラーが発生しました. 切断しました"
 
 msgid "SNiFF+ is currently "
-msgstr "SNiFF+ ξ֤ϡ"
+msgstr "現在SNiFF+ の状態は「"
 
 msgid "not "
-msgstr "̤"
+msgstr "未"
 
 msgid "connected"
-msgstr "³פǤ"
+msgstr "接続」です"
 
 #, c-format
 msgid "E275: Unknown SNiFF+ request: %s"
-msgstr "E275: ̤Τ SNiFF+ ꥯȤǤ: %s"
+msgstr "E275: 未知の SNiFF+ リクエストです: %s"
 
 msgid "E276: Error connecting to SNiFF+"
-msgstr "E276: SNiFF+ ؤ³Υ顼Ǥ"
+msgstr "E276: SNiFF+ への接続中のエラーです"
 
 msgid "E278: SNiFF+ not connected"
-msgstr "E278: SNiFF+ ³Ƥޤ"
+msgstr "E278: SNiFF+ に接続されていません"
 
 msgid "E279: Not a SNiFF+ buffer"
-msgstr "E279: SNiFF+ Хåեޤ"
+msgstr "E279: SNiFF+ バッファがありません"
 
 msgid "Sniff: Error during write. Disconnected"
-msgstr "Sniff: ˥顼ȯΤǤޤ"
+msgstr "Sniff: 書込み中にエラーが発生したので切断しました"
 
 msgid "invalid buffer number"
-msgstr "̵ʥХåեֹǤ"
+msgstr "無効なバッファ番号です"
 
 msgid "not implemented yet"
-msgstr "ޤƤޤ"
+msgstr "まだ実装されていません"
 
 #. ???
 msgid "cannot set line(s)"
-msgstr "ԤǤޤ"
+msgstr "行を設定できません"
+
+msgid "invalid mark name"
+msgstr "無効なマーク名です"
 
 msgid "mark not set"
-msgstr "ޡꤵƤޤ"
+msgstr "マークは設定されていません"
 
 #, c-format
 msgid "row %d column %d"
-msgstr " %d  %d"
+msgstr "行 %d 列 %d"
 
 msgid "cannot insert/append line"
-msgstr "Ԥ/ɲäǤޤ"
+msgstr "行の挿入/追加をできません"
+
+msgid "line number out of range"
+msgstr "範囲外の行番号です"
 
 msgid "unknown flag: "
-msgstr "̤ΤΥե饰:"
+msgstr "未知のフラグ: "
 
 msgid "unknown vimOption"
-msgstr "̤Τ vimOption Ǥ"
+msgstr "未知の vimOption です"
 
 msgid "keyboard interrupt"
-msgstr "ܡɳ"
+msgstr "キーボード割込み"
 
 msgid "vim error"
-msgstr "vim 顼"
+msgstr "vim エラー"
 
 msgid "cannot create buffer/window command: object is being deleted"
 msgstr ""
-"Хåե/ɥޥɤǤޤ: ֥ȤõƤ"
-""
+"バッファ/ウィンドウ作成コマンドを作成できません: オブジェクトが消去されていま"
+"した"
 
 msgid ""
 "cannot register callback command: buffer/window is already being deleted"
 msgstr ""
-"ХåޥɤϿǤޤ: Хåե/ɥ˾õޤ"
+"コールバックコマンドを登録できません: バッファ/ウィンドウが既に消去されました"
 
 #. This should never happen.  Famous last word?
 msgid ""
 "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim."
 "org"
 msgstr ""
-"E280: TCL ̿Ū顼: reflist !? vim-dev@vim.org 𤷤Ƥ"
+"E280: TCL 致命的エラー: reflist 汚染!? vim-dev@vim.org に報告してください"
 
 msgid "cannot register callback command: buffer/window reference not found"
 msgstr ""
-"ХåޥɤϿǤޤ: Хåե/ɥλȤߤĤޤ"
-""
+"コールバックコマンドを登録できません: バッファ/ウィンドウの参照が見つかりませ"
+"ん"
 
 msgid ""
 "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
 msgstr ""
-"E571: Υޥɤ̵Ǥ,ʤ: Tcl饤֥ɤǤޤ"
-"."
-
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: TCL 顼: λɤͤǤϤޤ!? vim-dev@vim.org "
-"Ƥ"
+"E571: このコマンドは無効です,ごめんなさい: Tclライブラリをロードできませんで"
+"した."
 
 #, c-format
 msgid "E572: exit code %d"
-msgstr "E572: λ %d"
+msgstr "E572: 終了コード %d"
 
 msgid "cannot get line"
-msgstr "ԤǤޤ"
+msgstr "行を取得できません"
 
 msgid "Unable to register a command server name"
-msgstr "̿᥵Ф̾ϿǤޤ"
+msgstr "命令サーバの名前を登録できません"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: ŪΥץؤΥޥ˼Ԥޤ"
+msgstr "E248: 目的のプログラムへのコマンド送信に失敗しました"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
-msgstr "E573: ̵ʥIDȤޤ: %s"
+msgstr "E573: 無効なサーバIDが使われました: %s"
 
 msgid "E251: VIM instance registry property is badly formed.  Deleted!"
-msgstr "E251: VIM ΤϿץѥƥǤ. õޤ!"
+msgstr "E251: VIM 実体の登録プロパティが不正です. 消去しました!"
 
 msgid "Unknown option argument"
-msgstr "̤ΤΥץǤ"
+msgstr "未知のオプション引数です"
 
 msgid "Too many edit arguments"
-msgstr "Խ¿᤮ޤ"
+msgstr "編集引数が多過ぎます"
 
 msgid "Argument missing after"
-msgstr "ޤ"
+msgstr "引数がありません"
 
 msgid "Garbage after option argument"
-msgstr "ץθ˥ߤޤ"
+msgstr "オプション引数の後にゴミがあります"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "\"+command\", \"-c command\", \"--cmd command\" ΰ¿᤮ޤ"
+msgstr "\"+command\", \"-c command\", \"--cmd command\" の引数が多過ぎます"
 
 msgid "Invalid argument for"
-msgstr "̵ʰǤ: "
+msgstr "無効な引数です: "
 
 #, c-format
 msgid "%d files to edit\n"
-msgstr "%d ĤΥե뤬Խ򹵤Ƥޤ\n"
+msgstr "%d 個のファイルが編集を控えています\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "netbeans はこのGUIでは利用できません\n"
 
 msgid "This Vim was not compiled with the diff feature."
-msgstr "Vimˤdiffǽޤ(ѥ)."
+msgstr "このVimにはdiff機能がありません(コンパイル時設定)."
+
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "'-nb' 使用不可能です: コンパイル時に無効にされています\n"
 
 msgid "Attempt to open script file again: \""
-msgstr "ץȥեƤӳƤߤޤ: \""
+msgstr "スクリプトファイルを再び開いてみます: \""
 
 msgid "Cannot open for reading: \""
-msgstr "ɹѤȤƳޤ"
+msgstr "読込用として開けません"
 
 msgid "Cannot open for script output: \""
-msgstr "ץȽѤ򳫤ޤ"
+msgstr "スクリプト出力用を開けません"
 
 msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-msgstr "Vim: 顼: NetBeansgvim򥹥ȤǤޤ\n"
+msgstr "Vim: エラー: NetBeansからgvimをスタートできません\n"
 
 msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: ٹ: üؤνϤǤϤޤ\n"
+msgstr "Vim: 警告: 端末への出力ではありません\n"
 
 msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: ٹ: üϤǤϤޤ\n"
+msgstr "Vim: 警告: 端末からの入力ではありません\n"
 
 #. just in case..
 msgid "pre-vimrc command line"
-msgstr "vimrcΥޥɥ饤"
+msgstr "vimrc前のコマンドライン"
 
 #, c-format
 msgid "E282: Cannot read from \"%s\""
-msgstr "E282: \"%s\"ɹळȤǤޤ"
+msgstr "E282: \"%s\"から読込むことができません"
 
 msgid ""
 "\n"
 "More info with: \"vim -h\"\n"
 msgstr ""
 "\n"
-"ܺ٤ʾ: \"vim -h\"\n"
+"より詳細な情報は: \"vim -h\"\n"
 
 msgid "[file ..]       edit specified file(s)"
-msgstr "[ե..]    եԽ"
+msgstr "[ファイル..]    あるファイルを編集する"
 
 msgid "-               read text from stdin"
-msgstr "-               ɸϤƥȤɹ"
+msgstr "-               標準入力からテキストを読込む"
 
 msgid "-t tag          edit file where tag is defined"
-msgstr "-t          줿ȤԽ"
+msgstr "-t タグ         タグが定義されたところから編集する"
 
 msgid "-q [errorfile]  edit file with first error"
-msgstr "-q [errorfile]  ǽΥ顼Խ"
+msgstr "-q [errorfile]  最初のエラーで編集する"
 
 msgid ""
 "\n"
@@ -2821,24 +2965,24 @@
 msgstr ""
 "\n"
 "\n"
-"ˡ:"
+"使用法:"
 
 msgid " vim [arguments] "
-msgstr " vim []"
+msgstr " vim [引数] "
 
 msgid ""
 "\n"
 "   or:"
 msgstr ""
 "\n"
-"   ⤷:"
+"   もしくは:"
 
 msgid ""
 "\n"
 "Where case is ignored prepend / to make flag upper case"
 msgstr ""
 "\n"
-"羮ʸ̵뤵ʸˤ뤿 / ֤Ƥ"
+"大小文字が無視される場合は大文字にするために / を前置してください"
 
 msgid ""
 "\n"
@@ -2847,325 +2991,315 @@
 msgstr ""
 "\n"
 "\n"
-":\n"
+"引数:\n"
 
 msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tΤȤˤϥե̾"
+msgstr "--\t\t\tこのあとにはファイル名だけ"
 
 msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\t磻ɥɤŸʤ"
+msgstr "--literal\t\tワイルドカードを展開しない"
 
 msgid "-register\t\tRegister this gvim for OLE"
-msgstr "-register\t\tgvimOLEȤϿ"
+msgstr "-register\t\tこのgvimをOLEとして登録する"
 
 msgid "-unregister\t\tUnregister gvim for OLE"
-msgstr "-unregister\t\tgvimOLEϿ"
+msgstr "-unregister\t\tgvimのOLE登録を解除する"
 
 msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-msgstr "-g\t\t\tGUIǵư (\"gvim\" Ʊ)"
+msgstr "-g\t\t\tGUIで起動する (\"gvim\" と同じ)"
 
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
-msgstr "-f or  --nofork\tե饦: GUIϤȤforkʤ"
+msgstr "-f or  --nofork\tフォアグラウンド: GUIを始めるときにforkしない"
 
 msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tVi⡼ (\"vi\" Ʊ)"
+msgstr "-v\t\t\tViモード (\"vi\" と同じ)"
 
 msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tEx⡼ (\"ex\" Ʊ)"
+msgstr "-e\t\t\tExモード (\"ex\" と同じ)"
+
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\t改良Exモード"
 
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\t(Хå)⡼ (\"ex\" )"
+msgstr "-s\t\t\tサイレント(バッチ)モード (\"ex\" 専用)"
 
 msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tʬ⡼ (\"vidiff\" Ʊ)"
+msgstr "-d\t\t\t差分モード (\"vidiff\" と同じ)"
 
 msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\t⡼ (\"evim\" Ʊ, ⡼̵)"
+msgstr "-y\t\t\tイージーモード (\"evim\" と同じ, モード無)"
 
 msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tɹѥ⡼ (\"view\" Ʊ)"
+msgstr "-R\t\t\t読込専用モード (\"view\" と同じ)"
 
 msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\t¥⡼ (\"rvim\" Ʊ)"
+msgstr "-Z\t\t\t制限モード (\"rvim\" と同じ)"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tѹ (ե¸) Ǥʤ褦ˤ"
+msgstr "-m\t\t\t変更 (ファイル保存時) をできないようにする"
 
 msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tƥȤԽԤʤʤ褦ˤ"
+msgstr "-M\t\t\tテキストの編集を行なえないようにする"
 
 msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tХʥ⡼"
+msgstr "-b\t\t\tバイナリモード"
 
 msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tLisp⡼"
+msgstr "-l\t\t\tLispモード"
 
 msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tViߴ⡼: 'compatible'"
+msgstr "-C\t\t\tVi互換モード: 'compatible'"
 
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tViߴ⡼: 'nocompatible"
+msgstr "-N\t\t\tVi非互換モード: 'nocompatible"
 
 msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr "-V[N][fname]\t\t [٥ N] [ե̾ fname]"
+msgstr "-V[N][fname]\t\tログ出力設定 [レベル N] [ログファイル名 fname]"
 
 msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tǥХå⡼"
+msgstr "-D\t\t\tデバッグモード"
 
 msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\tåץեѤ"
+msgstr "-n\t\t\tスワップファイルを使用せずメモリだけ"
 
 msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tåץե󤷽λ"
+msgstr "-r\t\t\tスワップファイルを列挙し終了"
 
 msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (ե̾)\tå夷å"
+msgstr "-r (ファイル名)\tクラッシュしたセッションを復帰"
 
 msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\t-rƱ"
+msgstr "-L\t\t\t-rと同じ"
 
 msgid "-f\t\t\tDon't use newcli to open window"
-msgstr "-f\t\t\tɥ򳫤Τ newcli Ѥʤ"
+msgstr "-f\t\t\tウィンドウを開くのに newcli を使用しない"
 
 msgid "-dev <device>\t\tUse <device> for I/O"
-msgstr "-dev <device>\t\tI/O <device> Ѥ"
+msgstr "-dev <device>\t\tI/Oに <device> を使用する"
 
 msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\tӥ⡼ɤǵư"
+msgstr "-A\t\t\tアラビア語モードで起動する"
 
 msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\tإ֥饤⡼ɤǵư"
+msgstr "-H\t\t\tヘブライ語モードで起動する"
 
 msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\tڥ륷⡼ɤǵư"
+msgstr "-F\t\t\tペルシア語モードで起動する"
 
 msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\tü <terminal> ꤹ"
+msgstr "-T <terminal>\t端末を <terminal> に設定する"
 
 msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\t.vimrc <vimrc> Ȥ"
+msgstr "-u <vimrc>\t\t.vimrcの代わりに <vimrc> を使う"
 
 msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-msgstr "-U <gvimrc>\t\t.gvimrc <gvimrc> Ȥ"
+msgstr "-U <gvimrc>\t\t.gvimrcの代わりに <gvimrc> を使う"
 
 msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\tץ饰󥹥ץȤɤʤ"
+msgstr "--noplugin\t\tプラグインスクリプトをロードしない"
 
 msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-p[N]\t\tN ĥ֥ڡ򳫤(ά: եˤĤ1)"
+msgstr "-p[N]\t\tN 個タブページを開く(省略値: ファイルにつき1個)"
 
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tN ĥɥ򳫤(ά: եˤĤ1)"
+msgstr "-o[N]\t\tN 個ウィンドウを開く(省略値: ファイルにつき1個)"
 
 msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\t-oƱľʬ"
+msgstr "-O[N]\t\t-oと同じだが垂直分割"
 
 msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tեκǸ夫Ϥ"
+msgstr "+\t\t\tファイルの最後からはじめる"
 
 msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\t<lnum> ԤϤ"
+msgstr "+<lnum>\t\t<lnum> 行からはじめる"
 
 msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <command>\tvimrcɤ <command> ¹Ԥ"
+msgstr "--cmd <command>\tvimrcをロードする前に <command> を実行する"
 
 msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <command>\t\tǽΥեɸ <command> ¹Ԥ"
+msgstr "-c <command>\t\t最初のファイルをロード後 <command> を実行する"
 
 msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <session>\t\tǽΥեɸե <session> "
+msgstr "-S <session>\t\t最初のファイルをロード後ファイル <session> を取込む"
 
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\tե <scriptin> Ρޥ륳ޥɤɹ"
+msgstr "-s <scriptin>\tファイル <scriptin> からノーマルコマンドを読込む"
 
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <scriptout>\tϤޥɤե <scriptout> ɲä"
+msgstr "-w <scriptout>\t入力した全コマンドをファイル <scriptout> に追加する"
 
 msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-W <scriptout>\tϤޥɤե <scriptout> ¸"
+msgstr "-W <scriptout>\t入力した全コマンドをファイル <scriptout> に保存する"
 
 msgid "-x\t\t\tEdit encrypted files"
-msgstr "-x\t\t\tŹ沽줿եԽ"
+msgstr "-x\t\t\t暗号化されたファイルを編集する"
 
 msgid "-display <display>\tConnect vim to this particular X-server"
-msgstr "-display <display>\tvimꤷ X Ф³"
+msgstr "-display <display>\tvimを指定した X サーバに接続する"
 
 msgid "-X\t\t\tDo not connect to X server"
-msgstr "-X\t\t\tXФ³ʤ"
+msgstr "-X\t\t\tXサーバに接続しない"
 
 msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-msgstr "--remote <files>\tǽʤVimФ <files> Խ"
+msgstr "--remote <files>\t可能ならばVimサーバで <files> を編集する"
 
 msgid "--remote-silent <files>  Same, don't complain if there is no server"
-msgstr "--remote-silnet <files>  Ʊ, Ф̵ƤٹʸϤʤ"
+msgstr "--remote-silent <files>  同上, サーバが無くても警告文を出力しない"
 
 msgid ""
 "--remote-wait <files>  As --remote but wait for files to have been edited"
-msgstr "--remote-wait <files>\t--remote եԽΤԤ"
+msgstr "--remote-wait <files>\t--remote後 ファイルの編集が終わるのを待つ"
 
 msgid ""
 "--remote-wait-silent <files>  Same, don't complain if there is no server"
-msgstr "--remote-wait-silent <files>  Ʊ, Ф̵ƤٹʸϤʤ"
+msgstr "--remote-wait-silent <files>  同上, サーバが無くても警告文を出力しない"
 
 msgid ""
 "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
 msgstr ""
-"--remote-tab[-wait][-silent] <files>  --remoteǥե1ĤˤĤ1ĤΥ"
-"ڡ򳫤"
+"--remote-tab[-wait][-silent] <files>  --remoteでファイル1つにつき1つのタブ"
+"ページを開く"
 
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-msgstr "--remote-send <keys>\tVimФ <keys> ƽλ"
+msgstr "--remote-send <keys>\tVimサーバに <keys> を送信して終了する"
 
 msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-msgstr "--remote-expr <expr>\tФ <expr> ¹ԤƷ̤ɽ"
+msgstr "--remote-expr <expr>\tサーバで <expr> を実行して結果を表示する"
 
 msgid "--serverlist\t\tList available Vim server names and exit"
-msgstr "--serverlist\t\tVim̾ΰɽƽλ"
+msgstr "--serverlist\t\tVimサーバ名の一覧を表示して終了する"
 
 msgid "--servername <name>\tSend to/become the Vim server <name>"
-msgstr "--servename <name>\t\tVim <name> /̾ꤹ"
+msgstr "--servername <name>\tVimサーバ <name> に送信/名前設定する"
+
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <file>\t起動にかかった時間の詳細を <file> へ出力する"
 
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\t.viminfo <viminfo> Ȥ"
+msgstr "-i <viminfo>\t\t.viminfoの代わりに <viminfo> を使う"
 
 msgid "-h  or  --help\tPrint Help (this message) and exit"
-msgstr "-h or  --help\tإ(Υå)ɽλ"
+msgstr "-h or  --help\tヘルプ(このメッセージ)を表示し終了する"
 
 msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\tСɽλ"
+msgstr "--version\t\tバージョン情報を表示し終了する"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Motif version):\n"
 msgstr ""
 "\n"
-"gvimˤäƲᤵ(MotifС):\n"
+"gvimによって解釈される引数(Motifバージョン):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
 msgstr ""
 "\n"
-"gvimˤäƲᤵ(neXtawС):\n"
+"gvimによって解釈される引数(neXtawバージョン):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
-"gvimˤäƲᤵ(AthenaС):\n"
+"gvimによって解釈される引数(Athenaバージョン):\n"
 
 msgid "-display <display>\tRun vim on <display>"
-msgstr "-display <display>\t<display> vim¹Ԥ"
+msgstr "-display <display>\t<display> でvimを実行する"
 
 msgid "-iconic\t\tStart vim iconified"
-msgstr "-iconic\t\tǾ֤vimư"
-
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <name>\t\tvim̾ <name> ǤȤƥ꥽Ȥ"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Ƥʤ)\n"
+msgstr "-iconic\t\t最小化した状態でvimを起動する"
 
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
-msgstr "-background <color>\tطʿ <color> Ȥ(Ʊ: -bg)"
+msgstr "-background <color>\t背景色に <color> を使う(同義: -bg)"
 
 msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-msgstr "-foreground <color>\tʿ <color> Ȥ(Ʊ: -fg)"
+msgstr "-foreground <color>\t前景色に <color> を使う(同義: -fg)"
 
 msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-msgstr "-font <font>\t\tƥɽ <font> Ȥ(Ʊ: -fn)"
+msgstr "-font <font>\t\tテキスト表示に <font> を使う(同義: -fn)"
 
 msgid "-boldfont <font>\tUse <font> for bold text"
-msgstr "-boldfont <font>\t <font> Ȥ"
+msgstr "-boldfont <font>\t太字に <font> を使う"
 
 msgid "-italicfont <font>\tUse <font> for italic text"
-msgstr "-italicfont <for>\tλ <font> Ȥ"
+msgstr "-italicfont <for>\t斜体字に <font> を使う"
 
 msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-msgstr "-geometry <geom>\t֤ <geom> Ȥ(Ʊ: -geom)"
+msgstr "-geometry <geom>\t初期配置に <geom> を使う(同義: -geom)"
 
 msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-msgstr "-borderwidth <width>\t <width> ˤ(Ʊ: -bw)"
+msgstr "-borderwidth <width>\t境界の幅を <width> にする(同義: -bw)"
 
 msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
 msgstr ""
-"-scrollbarwidth <width>  С <width> ˤ(Ʊ: -sw)"
+"-scrollbarwidth <width>  スクロールバーの幅を <width> にする(同義: -sw)"
 
 msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-msgstr "-menuheight <height>\t˥塼Сι⤵ <height> ˤ(Ʊ: -mh)"
+msgstr "-menuheight <height>\tメニューバーの高さを <height> にする(同義: -mh)"
 
 msgid "-reverse\t\tUse reverse video (also: -rv)"
-msgstr "-reverse\t\tȿžѤ(Ʊ: -rv)"
+msgstr "-reverse\t\t反転映像を使用する(同義: -rv)"
 
 msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-msgstr "+reverse\t\tȿžѤʤ(Ʊ: +rv)"
+msgstr "+reverse\t\t反転映像を使用しない(同義: +rv)"
 
 msgid "-xrm <resource>\tSet the specified resource"
-msgstr "-xrm <resource>\tΥ꥽Ѥ"
-
-msgid ""
-"\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"gvimˤäƲᤵ(RISC OSС):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <number>\tΥɥΥñ̤"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <number>\tΥɥιñ̤ι⤵"
+msgstr "-xrm <resource>\t特定のリソースを使用する"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
-"gvimˤäƲᤵ(GTK+С):\n"
+"gvimによって解釈される引数(GTK+バージョン):\n"
 
 msgid "-display <display>\tRun vim on <display> (also: --display)"
-msgstr "-display <display>\t<display> vim¹Ԥ(Ʊ: --display)"
+msgstr "-display <display>\t<display> でvimを実行する(同義: --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
-msgstr "--role <role>\tᥤ󥦥ɥ̤դ(role)ꤹ"
+msgstr "--role <role>\tメインウィンドウを識別する一意な役割(role)を設定する"
 
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-msgstr "--socketid <xid>\tۤʤGTK widgetVim򳫤"
+msgstr "--socketid <xid>\t異なるGTK widgetでVimを開く"
+
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tウィンドウIDを標準出力に出力する"
 
 msgid "-P <parent title>\tOpen Vim inside parent application"
-msgstr "-P <ƤΥȥ>\tVimƥץꥱǵư"
+msgstr "-P <親のタイトル>\tVimを親アプリケーションの中で起動する"
 
 msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-msgstr "--windowid <HWND>\tۤʤWin32 widgetVim򳫤"
+msgstr "--windowid <HWND>\t異なるWin32 widgetの内部にVimを開く"
 
 msgid "No display"
-msgstr "ǥץ쥤Ĥޤ"
+msgstr "ディスプレイが見つかりません"
 
 #. Failed to send, abort.
 msgid ": Send failed.\n"
-msgstr ": ˼Ԥޤ.\n"
+msgstr ": 送信に失敗しました.\n"
 
 #. Let vim start normally.
 msgid ": Send failed. Trying to execute locally\n"
-msgstr ": ˼Ԥޤ. Ǥμ¹ԤߤƤޤ\n"
+msgstr ": 送信に失敗しました. ローカルでの実行を試みています\n"
 
 #, c-format
 msgid "%d of %d edited"
-msgstr "%d  (%d ) ΥեԽޤ"
+msgstr "%d 個 (%d 個中) のファイルを編集しました"
 
 msgid "No display: Send expression failed.\n"
-msgstr "ǥץ쥤ޤ: ˼Ԥޤ.\n"
+msgstr "ディスプレイがありません: 式の送信に失敗しました.\n"
 
 msgid ": Send expression failed.\n"
-msgstr ": ˼Ԥޤ.\n"
+msgstr ": 式の送信に失敗しました.\n"
 
 msgid "No marks set"
-msgstr "ޡꤵƤޤ"
+msgstr "マークが設定されていません"
 
 #, c-format
 msgid "E283: No marks matching \"%s\""
-msgstr "E283: \"%s\" ˳ޡޤ"
+msgstr "E283: \"%s\" に該当するマークがありません"
 
 #. Highlight title
 msgid ""
@@ -3173,7 +3307,7 @@
 "mark line  col file/text"
 msgstr ""
 "\n"
-"mark       ե/ƥ"
+"mark   行   列 ファイル/テキスト"
 
 #. Highlight title
 msgid ""
@@ -3181,7 +3315,7 @@
 " jump line  col file/text"
 msgstr ""
 "\n"
-" jump       ե/ƥ"
+" jump   行   列 ファイル/テキスト"
 
 #. Highlight title
 msgid ""
@@ -3189,452 +3323,485 @@
 "change line  col text"
 msgstr ""
 "\n"
-"ѹ         ƥ"
+"変更   行    列  テキスト"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
 msgstr ""
 "\n"
-"# եޡ:\n"
+"# ファイルマーク:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
 msgstr ""
 "\n"
-"# ץꥹ (Τ):\n"
+"# ジャンプリスト (新しいものが先):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
 msgstr ""
 "\n"
-"# եޡ (ΤŤ):\n"
+"# ファイル内マークの履歴 (新しいものから古いもの):\n"
 
 msgid "Missing '>'"
-msgstr "'>' ߤĤޤ"
+msgstr "'>' が見つかりません"
 
 msgid "E543: Not a valid codepage"
-msgstr "E543: ̵ʥɥڡǤ"
+msgstr "E543: 無効なコードページです"
 
 msgid "E284: Cannot set IC values"
-msgstr "E284: ICͤǤޤ"
+msgstr "E284: ICの値を設定できません"
 
 msgid "E285: Failed to create input context"
-msgstr "E285: ץåȥƥȤκ˼Ԥޤ"
+msgstr "E285: インプットコンテキストの作成に失敗しました"
 
 msgid "E286: Failed to open input method"
-msgstr "E286: ץåȥ᥽åɤΥץ˼Ԥޤ"
+msgstr "E286: インプットメソッドのオープンに失敗しました"
 
 msgid "E287: Warning: Could not set destroy callback to IM"
-msgstr "E287: ٹ: IM˲ХåǤޤǤ"
+msgstr "E287: 警告: IMの破壊コールバックを設定できませんでした"
 
 msgid "E288: input method doesn't support any style"
-msgstr "E288: ץåȥ᥽åɤϤɤʥ⥵ݡȤޤ"
+msgstr "E288: インプットメソッドはどんなスタイルもサポートしません"
 
 msgid "E289: input method doesn't support my preedit type"
-msgstr "E289: ץåȥ᥽åɤ my preedit type 򥵥ݡȤޤ"
-
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: over-the-spot ˤfontsetɬפǤ"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr "E291: GTK+1.2.3ŤΤǥơꥢ̵Ǥ"
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: ץåȥ᥽åɥ ưƤޤ"
+msgstr "E289: インプットメソッドは my preedit type をサポートしません"
 
 msgid "E293: block was not locked"
-msgstr "E293: ֥ååƤޤ"
+msgstr "E293: ブロックがロックされていません"
 
 msgid "E294: Seek error in swap file read"
-msgstr "E294: åץեɹ˥顼Ǥ"
+msgstr "E294: スワップファイル読込時にシークエラーです"
 
 msgid "E295: Read error in swap file"
-msgstr "E295: åץեɹߥ顼Ǥ"
+msgstr "E295: スワップファイルの読込みエラーです"
 
 msgid "E296: Seek error in swap file write"
-msgstr "E296: åץե߻˥顼Ǥ"
+msgstr "E296: スワップファイル書込み時にシークエラーです"
 
 msgid "E297: Write error in swap file"
-msgstr "E297: åץեνߥ顼Ǥ"
+msgstr "E297: スワップファイルの書込みエラーです"
 
 msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: åץե뤬¸ߤޤ (symlinkˤ빶?)"
+msgstr "E300: スワップファイルが既に存在します (symlinkによる攻撃?)"
 
 msgid "E298: Didn't get block nr 0?"
-msgstr "E298: ֥å 0 Ǥޤ?"
+msgstr "E298: ブロック 0 を取得できません?"
 
 msgid "E298: Didn't get block nr 1?"
-msgstr "E298: ֥å 1 Ǥޤ?"
+msgstr "E298: ブロック 1 を取得できません?"
 
 msgid "E298: Didn't get block nr 2?"
-msgstr "E298: ֥å 2 Ǥޤ?"
+msgstr "E298: ブロック 2 を取得できません?"
+
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: スワップファイルの暗号を更新中にエラーが発生しました"
 
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: ä, åץե뤬ޤ!!!"
+msgstr "E301: おっと, スワップファイルが失われました!!!"
 
 msgid "E302: Could not rename swap file"
-msgstr "E302: åץե̾Ѥޤ"
+msgstr "E302: スワップファイルの名前を変えられません"
 
 #, c-format
 msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr "E303: \"%s\" Υåץե򳫤ʤΤǥꥫХԲǽǤ"
+msgstr "E303: \"%s\" のスワップファイルを開けないのでリカバリは不可能です"
 
 msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block0(): ֥å 0 ǤޤǤ??"
+msgstr "E304: ml_upd_block0(): ブロック 0 を取得できませんでした??"
 
 #, c-format
 msgid "E305: No swap file found for %s"
-msgstr "E305: %s ˤϥåץե뤬ߤĤޤ"
+msgstr "E305: %s にはスワップファイルが見つかりません"
 
 msgid "Enter number of swap file to use (0 to quit): "
-msgstr "Ѥ륹åץեֹϤƤ(0 ǽλ): "
+msgstr "使用するスワップファイルの番号を入力してください(0 で終了): "
 
 #, c-format
 msgid "E306: Cannot open %s"
-msgstr "E306: %s 򳫤ޤ"
+msgstr "E306: %s を開けません"
 
 msgid "Unable to read block 0 from "
-msgstr "֥å 0 ɹޤ "
+msgstr "ブロック 0 を読込めません "
 
 msgid ""
 "\n"
 "Maybe no changes were made or Vim did not update the swap file."
 msgstr ""
 "\n"
-"餯ѹƤʤVimåץե򹹿Ƥޤ."
+"恐らく変更がされていないかVimがスワップファイルを更新していません."
 
 msgid " cannot be used with this version of Vim.\n"
-msgstr " VimΤΥСǤϻѤǤޤ.\n"
+msgstr " Vimのこのバージョンでは使用できません.\n"
 
 msgid "Use Vim version 3.0.\n"
-msgstr "VimΥС3.0ѤƤ.\n"
+msgstr "Vimのバージョン3.0を使用してください.\n"
 
 #, c-format
 msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s VimΥåץեǤϤʤ褦Ǥ"
+msgstr "E307: %s はVimのスワップファイルではないようです"
 
 msgid " cannot be used on this computer.\n"
-msgstr " Υԥ塼ǤϻѤǤޤ.\n"
+msgstr " このコンピュータでは使用できません.\n"
 
 msgid "The file was created on "
-msgstr "ΥեϼξǺޤ "
+msgstr "このファイルは次の場所で作られました "
 
 msgid ""
 ",\n"
 "or the file has been damaged."
 msgstr ""
 ",\n"
-"⤷ϥե뤬»Ƥޤ."
+"もしくはファイルが損傷しています."
+
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %s はこのバージョンのVimでサポートしていない形式で暗号化されています"
 
 msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr " »Ƥޤ (ڡǾͤ򲼲äƤޤ).\n"
+msgstr " は損傷しています (ページサイズが最小値を下回っています).\n"
 
 #, c-format
 msgid "Using swap file \"%s\""
-msgstr "åץե \"%s\" "
+msgstr "スワップファイル \"%s\" を使用中"
 
 #, c-format
 msgid "Original file \"%s\""
-msgstr "ܥե \"%s\""
+msgstr "原本ファイル \"%s\""
 
 msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: ٹ: ܥե뤬ѹƤޤ"
+msgstr "E308: 警告: 原本ファイルが変更されています"
+
+#, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "スワップファイルは暗号化されています: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"新しい暗号キーを入力したあとにテキストファイルを保存していない場合は,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"新しい暗号キーを入力してください."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"暗号キーを変えたあとにテキストファイルを保存した場合は, テキストファイルと"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"スワップファイルに同じ暗号キーを使うためにenterだけを押してください."
 
 #, c-format
 msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: %s ֥å 1 ɹޤ"
+msgstr "E309: %s からブロック 1 を読込めません"
 
 msgid "???MANY LINES MISSING"
-msgstr "???¿ιԤƤޤ"
+msgstr "???多くの行が失われています"
 
 msgid "???LINE COUNT WRONG"
-msgstr "???ԿְäƤޤ"
+msgstr "???行数が間違っています"
 
 msgid "???EMPTY BLOCK"
-msgstr "???֥åǤ"
+msgstr "???ブロックが空です"
 
 msgid "???LINES MISSING"
-msgstr "???ԤƤޤ"
+msgstr "???行が失われています"
 
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: ֥å 1 IDְäƤޤ(%s .swpեǤʤ?)"
+msgstr "E310: ブロック 1 のIDが間違っています(%s が.swpファイルでない?)"
 
 msgid "???BLOCK MISSING"
-msgstr "???֥åޤ"
+msgstr "???ブロックがありません"
 
 msgid "??? from here until ???END lines may be messed up"
-msgstr "??? ???ENDޤǤιԤ˲Ƥ褦Ǥ"
+msgstr "??? ここから ???END までの行が破壊されているようです"
 
 msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? ??ENDޤǤιԤ줿褦Ǥ"
+msgstr "??? ここから ???END までの行が挿入か削除されたようです"
 
 msgid "???END"
 msgstr "???END"
 
 msgid "E311: Recovery Interrupted"
-msgstr "E311: ꥫХ꤬ޤޤ"
+msgstr "E311: リカバリが割込まれました"
 
 msgid ""
 "E312: Errors detected while recovering; look for lines starting with ???"
 msgstr ""
-"E312: ꥫХκ˥顼Фޤ; ???ǻϤޤԤ򻲾ȤƤ"
+"E312: リカバリの最中にエラーが検出されました; ???で始まる行を参照してください"
 
 msgid "See \":help E312\" for more information."
-msgstr "ܺ٤ \":help E312\" 򻲾ȤƤ"
+msgstr "詳細は \":help E312\" を参照してください"
 
 msgid "Recovery completed. You should check if everything is OK."
-msgstr "ꥫХ꤬λޤ. ƤåƤ."
+msgstr "リカバリが終了しました. 全てが正しいかチェックしてください."
 
 msgid ""
 "\n"
 "(You might want to write out this file under another name\n"
 msgstr ""
 "\n"
-"(ѹå뤿, Υե̤̾¸\n"
+"(変更をチェックするために, このファイルを別の名前で保存した上で\n"
+
+msgid "and run diff with the original file to check for changes)"
+msgstr "原本ファイルとの diff を実行すると良いでしょう)"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "ܥեȤ diff ¹ԤɤǤ礦)\n"
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "復元完了. バッファの内容はファイルと同じになりました."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"줫.swpեƤ\n"
 "\n"
+"それから.swpファイルを削除してください\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "スワップファイルから取得した暗号キーをテキストファイルに使います.\n"
 
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
-msgstr "åץե뤬ʣĤޤ:"
+msgstr "スワップファイルが複数見つかりました:"
 
 msgid "   In current directory:\n"
-msgstr "   ߤΥǥ쥯ȥ:\n"
+msgstr "   現在のディレクトリ:\n"
 
 msgid "   Using specified name:\n"
-msgstr "   ̾:\n"
+msgstr "   ある名前を使用中:\n"
 
 msgid "   In directory "
-msgstr "   ǥ쥯ȥ "
+msgstr "   ディレクトリ "
 
 msgid "      -- none --\n"
-msgstr "      -- ʤ --\n"
+msgstr "      -- なし --\n"
 
 msgid "          owned by: "
-msgstr "            ͭ: "
+msgstr "            所有者: "
 
 msgid "   dated: "
-msgstr "   : "
+msgstr "   日付: "
 
 msgid "             dated: "
-msgstr "             : "
+msgstr "             日付: "
 
 msgid "         [from Vim version 3.0]"
 msgstr "         [from Vim version 3.0]"
 
 msgid "         [does not look like a Vim swap file]"
-msgstr "         [VimΥåץեǤϤʤ褦Ǥ]"
+msgstr "         [Vimのスワップファイルではないようです]"
 
 msgid "         file name: "
-msgstr "        ե̾: "
+msgstr "        ファイル名: "
 
 msgid ""
 "\n"
 "          modified: "
 msgstr ""
 "\n"
-"          ѹ: "
+"          変更状態: "
 
 msgid "YES"
-msgstr ""
+msgstr "あり"
 
 msgid "no"
-msgstr "ʤ"
+msgstr "なし"
 
 msgid ""
 "\n"
 "         user name: "
 msgstr ""
 "\n"
-"          桼̾: "
+"          ユーザ名: "
 
 msgid "   host name: "
-msgstr "   ۥ̾: "
+msgstr "   ホスト名: "
 
 msgid ""
 "\n"
 "         host name: "
 msgstr ""
 "\n"
-"          ۥ̾: "
+"          ホスト名: "
 
 msgid ""
 "\n"
 "        process ID: "
 msgstr ""
 "\n"
-"        ץID: "
+"        プロセスID: "
 
 msgid " (still running)"
-msgstr " (ޤ¹)"
+msgstr " (まだ実行中)"
 
 msgid ""
 "\n"
 "         [not usable with this version of Vim]"
 msgstr ""
 "\n"
-"         [VimСǤϻѤǤޤ]"
+"         [このVimバージョンでは使用できません]"
 
 msgid ""
 "\n"
 "         [not usable on this computer]"
 msgstr ""
 "\n"
-"         [Υԥ塼ǤϻѤǤޤ]"
+"         [このコンピュータでは使用できません]"
 
 msgid "         [cannot be read]"
-msgstr "         [ɹޤ]"
+msgstr "         [読込めません]"
 
 msgid "         [cannot be opened]"
-msgstr "         [ޤ]"
+msgstr "         [開けません]"
 
 msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: åץե뤬̵ΤǰݻǤޤ"
+msgstr "E313: スワップファイルが無いので維持できません"
 
 msgid "File preserved"
-msgstr "ե뤬ݻޤ"
+msgstr "ファイルが維持されます"
 
 msgid "E314: Preserve failed"
-msgstr "E314: ݻ˼Ԥޤ"
+msgstr "E314: 維持に失敗しました"
 
 #, c-format
 msgid "E315: ml_get: invalid lnum: %ld"
-msgstr "E315: ml_get: ̵lnumǤ: %ld"
+msgstr "E315: ml_get: 無効なlnumです: %ld"
 
 #, c-format
 msgid "E316: ml_get: cannot find line %ld"
-msgstr "E316: ml_get:  %ld ߤĤޤ"
+msgstr "E316: ml_get: 行 %ld を見つけられません"
 
 msgid "E317: pointer block id wrong 3"
-msgstr "E317: ݥ󥿥֥åIDְäƤޤ 3"
+msgstr "E317: ポインタブロックのIDが間違っています 3"
 
 msgid "stack_idx should be 0"
-msgstr "stack_idx  0 Ǥ٤Ǥ"
+msgstr "stack_idx は 0 であるべきです"
 
 msgid "E318: Updated too many blocks?"
-msgstr "E318: 줿֥å¿᤮뤫?"
+msgstr "E318: 更新されたブロックが多過ぎるかも?"
 
 msgid "E317: pointer block id wrong 4"
-msgstr "E317: ݥ󥿥֥åIDְäƤޤ 4"
+msgstr "E317: ポインタブロックのIDが間違っています 4"
 
 msgid "deleted block 1?"
-msgstr "֥å 1 Ͼä줿?"
+msgstr "ブロック 1 は消された?"
 
 #, c-format
 msgid "E320: Cannot find line %ld"
-msgstr "E320:  %ld ߤĤޤ"
+msgstr "E320: 行 %ld が見つかりません"
 
 msgid "E317: pointer block id wrong"
-msgstr "E317: ݥ󥿥֥åIDְäƤޤ"
+msgstr "E317: ポインタブロックのIDが間違っています"
 
 msgid "pe_line_count is zero"
-msgstr "pe_line_count Ǥ"
+msgstr "pe_line_count がゼロです"
 
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
-msgstr "E322: ֹ椬ϰϳǤ: %ld ĶƤޤ"
+msgstr "E322: 行番号が範囲外です: %ld 超えています"
 
 #, c-format
 msgid "E323: line count wrong in block %ld"
-msgstr "E323: ֥å %ld ιԥȤְäƤޤ"
+msgstr "E323: ブロック %ld の行カウントが間違っています"
 
 msgid "Stack size increases"
-msgstr "åޤ"
+msgstr "スタックサイズが増えます"
 
 msgid "E317: pointer block id wrong 2"
-msgstr "E317: ݥ󥿥֥åIDְäƤޤ 2"
+msgstr "E317: ポインタブロックのIDが間違っています 2"
 
 #, c-format
 msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: \"%s\" Υܥå󥯤롼פˤʤäƤޤ"
+msgstr "E773: \"%s\" のシンボリックリンクがループになっています"
 
 msgid "E325: ATTENTION"
-msgstr "E325: "
+msgstr "E325: 注意"
 
 msgid ""
 "\n"
 "Found a swap file by the name \""
 msgstr ""
 "\n"
-"̾ǥåץե򸫤Ĥޤ \""
+"次の名前でスワップファイルを見つけました \""
 
 msgid "While opening file \""
-msgstr "Υե򳫤Ƥ \""
+msgstr "次のファイルを開いている最中 \""
 
 msgid "      NEWER than swap file!\n"
-msgstr "      åץե⿷Ǥ!\n"
+msgstr "      スワップファイルよりも新しいです!\n"
 
 #. Some of these messages are long to allow translation to
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) ̤ΥץबƱեԽƤ뤫⤷ޤ.\n"
-"    ξˤ, ѹ򤷤ݤ˺ǽŪ, Ʊեΰۤʤ\n"
-"    2ĤΥ󥹥󥹤ǤƤޤȤդƤ.\n"
+"(1) 別のプログラムが同じファイルを編集しているかもしれません.\n"
+"    この場合には, 変更をした際に最終的に, 同じファイルの異なる\n"
+"    2つのインスタンスができてしまうことに注意してください."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    λ뤫, դʤ³ޤ.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  終了するか, 注意しながら続けてください.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) ΥեԽå󤬥å夷.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) このファイルの編集セッションがクラッシュした.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
-msgstr "    ξˤ \":recover\"  \"vim -r "
+msgstr "    この場合には \":recover\" か \"vim -r "
 
 msgid ""
 "\"\n"
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    ѤѹꥫСޤ(\":help recover\" 򻲾).\n"
+"    を使用して変更をリカバーします(\":help recovery\" を参照).\n"
 
 msgid "    If you did this already, delete the swap file \""
-msgstr "    ˤԤʤäΤʤ, åץե \""
+msgstr "    既にこれを行なったのならば, スワップファイル \""
 
 msgid ""
 "\"\n"
 "    to avoid this message.\n"
 msgstr ""
 "\"\n"
-"    äФΥåǤޤ.\n"
+"    を消せばこのメッセージを回避できます.\n"
 
 msgid "Swap file \""
-msgstr "åץե \""
+msgstr "スワップファイル \""
 
 msgid "\" already exists!"
-msgstr "\" ˤޤ!"
+msgstr "\" が既にあります!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM - "
+msgstr "VIM - 注意"
 
 msgid "Swap file already exists!"
-msgstr "åץե뤬¸ߤޤ!"
+msgstr "スワップファイルが既に存在します!"
 
 msgid ""
 "&Open Read-Only\n"
@@ -3643,11 +3810,11 @@
 "&Quit\n"
 "&Abort"
 msgstr ""
-"ɹѤǳ(&O)\n"
-"ȤˤԽ(&E)\n"
-"褵(&R)ecover\n"
-"λ(&Q)\n"
-"ߤ(&A)"
+"読込専用で開く(&O)\n"
+"とにかく編集する(&E)\n"
+"復活させる(&R)\n"
+"終了する(&Q)\n"
+"中止する(&A)"
 
 msgid ""
 "&Open Read-Only\n"
@@ -3657,38 +3824,38 @@
 "&Quit\n"
 "&Abort"
 msgstr ""
-"ɹѤǳ(&O)\n"
-"ȤˤԽ(&E)\n"
-"褵(&R)ecover\n"
-"(&D)\n"
-"λ(&Q)\n"
-"ߤ(&A)"
+"読込専用で開く(&O)\n"
+"とにかく編集する(&E)\n"
+"復活させる(&R)\n"
+"削除する(&D)\n"
+"終了する(&Q)\n"
+"中止する(&A)"
 
 msgid "E326: Too many swap files found"
-msgstr "E326: åץե뤬¿Ĥޤ"
+msgstr "E326: スワップファイルが多数見つかりました"
 
 msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: ˥塼ƥΥѥʬ֥˥塼ǤϤޤ"
+msgstr "E327: メニューアイテムのパスの部分がサブメニューではありません"
 
 msgid "E328: Menu only exists in another mode"
-msgstr "E328: ˥塼¾Υ⡼ɤˤޤ"
+msgstr "E328: メニューは他のモードにだけあります"
 
 #, c-format
 msgid "E329: No menu \"%s\""
-msgstr "E329: \"%s\" Ȥ˥塼Ϥޤ"
+msgstr "E329: \"%s\" というメニューはありません"
 
 #. Only a mnemonic or accelerator is not valid.
 msgid "E792: Empty menu name"
-msgstr "E792: ˥塼̾Ǥ"
+msgstr "E792: メニュー名が空です"
 
 msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: ˥塼ѥϥ֥˥塼٤ǤϤޤ"
+msgstr "E330: メニューパスはサブメニューを生じるべきではありません"
 
 msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: ˥塼Сˤľܥ˥塼ƥɲäǤޤ"
+msgstr "E331: メニューバーには直接メニューアイテムを追加できません"
 
 msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: ڤϥ˥塼ѥΰǤϤޤ"
+msgstr "E332: 区切りはメニューパスの一部ではありません"
 
 #. Now we have found the matching menu, and we list the mappings
 #. Highlight title
@@ -3697,68 +3864,68 @@
 "--- Menus ---"
 msgstr ""
 "\n"
-"--- ˥塼 ---"
+"--- メニュー ---"
 
 msgid "Tear off this menu"
-msgstr "Υ˥塼ڤ"
+msgstr "このメニューを切り取る"
 
 msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: ˥塼ѥϥ˥塼ƥʤФޤ"
+msgstr "E333: メニューパスはメニューアイテムを生じなければいけません"
 
 #, c-format
 msgid "E334: Menu not found: %s"
-msgstr "E334: ˥塼ߤĤޤ: %s"
+msgstr "E334: メニューが見つかりません: %s"
 
 #, c-format
 msgid "E335: Menu not defined for %s mode"
-msgstr "E335: %s ˤϥ˥塼Ƥޤ"
+msgstr "E335: %s にはメニューが定義されていません"
 
 msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: ˥塼ѥϥ֥˥塼ʤФޤ"
+msgstr "E336: メニューパスはサブメニューを生じなければいけません"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: ˥塼ߤĤޤ - ˥塼̾ǧƤ"
+msgstr "E337: メニューが見つかりません - メニュー名を確認してください"
 
 #, c-format
 msgid "Error detected while processing %s:"
-msgstr "%s ν˥顼Фޤ:"
+msgstr "%s の処理中にエラーが検出されました:"
 
 #, c-format
 msgid "line %4ld:"
-msgstr " %4ld:"
+msgstr "行 %4ld:"
 
 #, c-format
 msgid "E354: Invalid register name: '%s'"
-msgstr "E354: ̵ʥ쥸̾: '%s'"
+msgstr "E354: 無効なレジスタ名: '%s'"
 
 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "ܸå/ƽ: ¼ Ϻ <koron.kaoriya@gmail.com>"
+msgstr "日本語メッセージ翻訳/監修: 村岡 太郎 <koron.kaoriya@gmail.com>"
 
 msgid "Interrupt: "
-msgstr ": "
+msgstr "割込み: "
 
 msgid "Press ENTER or type command to continue"
-msgstr "³ˤENTER򲡤ޥɤϤƤ"
+msgstr "続けるにはENTERを押すかコマンドを入力してください"
 
 #, c-format
 msgid "%s line %ld"
-msgstr "%s  %ld"
+msgstr "%s 行 %ld"
 
 msgid "-- More --"
-msgstr "-- ³ --"
+msgstr "-- 継続 --"
 
 msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: /ڡ/ , b/uk: , q: λ "
+msgstr " SPACE/d/j: 画面/ページ/行 下, b/u/k: 上, q: 終了 "
 
 msgid "Question"
-msgstr ""
+msgstr "質問"
 
 msgid ""
 "&Yes\n"
 "&No"
 msgstr ""
-"Ϥ(&Y)\n"
-"(&N)"
+"はい(&Y)\n"
+"いいえ(&N)"
 
 msgid ""
 "&Yes\n"
@@ -3767,70 +3934,73 @@
 "&Discard All\n"
 "&Cancel"
 msgstr ""
-"Ϥ(&Y)\n"
-"(&N)\n"
-"¸(&A)\n"
-"(&D)\n"
-"󥻥(&C)"
+"はい(&Y)\n"
+"いいえ(&N)\n"
+"全て保存(&A)\n"
+"全て放棄(&D)\n"
+"キャンセル(&C)"
 
 msgid "Select Directory dialog"
-msgstr "ǥ쥯ȥ"
+msgstr "ディレクトリ選択ダイアログ"
 
 msgid "Save File dialog"
-msgstr "ե¸"
+msgstr "ファイル保存ダイアログ"
 
 msgid "Open File dialog"
-msgstr "եɹ"
+msgstr "ファイル読込ダイアログ"
 
 #. TODO: non-GUI file selector here
 msgid "E338: Sorry, no file browser in console mode"
-msgstr "E338: 󥽡⡼ɤǤϥե֥饦Ȥޤ, ʤ"
+msgstr "E338: コンソールモードではファイルブラウザを使えません, ごめんなさい"
 
 msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: printf() ΰԽʬǤ"
+msgstr "E766: printf() の引数が不十分です"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: printf() の引数には浮動少数点数が期待されています"
 
 msgid "E767: Too many arguments to printf()"
-msgstr "E767: pirntf() ΰ¿᤮ޤ"
+msgstr "E767: printf() の引数が多過ぎます"
 
 msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: ٹ: ɹѥեѹޤ"
+msgstr "W10: 警告: 読込専用ファイルを変更します"
 
-msgid "Type number or click with mouse (<Enter> cancels): "
-msgstr "ͤϤ뤫ޥ򥯥åƤ (<Enter> ǥ󥻥): "
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr ""
+"番号と<Enter>を入力するかマウスでクリックしてください (空でキャンセル): "
 
-msgid "Choice number (<Enter> cancels): "
-msgstr "ֹ򤷤Ƥ (<Enter> ǥ󥻥): "
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "番号と<Enter>を入力してください (空でキャンセル): "
 
 msgid "1 more line"
-msgstr "1  ɲäޤ"
+msgstr "1 行 追加しました"
 
 msgid "1 line less"
-msgstr "1  ޤ"
+msgstr "1 行 削除しました"
 
 #, c-format
 msgid "%ld more lines"
-msgstr "%ld  ɲäޤ"
+msgstr "%ld 行 追加しました"
 
 #, c-format
 msgid "%ld fewer lines"
-msgstr "%ld  ޤ"
+msgstr "%ld 行 削除しました"
 
 msgid " (Interrupted)"
-msgstr " (ޤޤ)"
+msgstr " (割込まれました)"
 
 msgid "Beep!"
-msgstr "ӡ!"
+msgstr "ビーッ!"
 
 msgid "Vim: preserving files...\n"
-msgstr "Vim: ե¸...\n"
+msgstr "Vim: ファイルを保存中...\n"
 
 #. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
-msgstr "Vim: λޤ.\n"
+msgstr "Vim: 終了しました.\n"
 
-#, c-format
 msgid "ERROR: "
-msgstr "顼: "
+msgstr "エラー: "
 
 #, c-format
 msgid ""
@@ -3838,193 +4008,202 @@
 "[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
 msgstr ""
 "\n"
-"[(Х)] - %lu-%lu,  %lu, ԡ %lu\n"
+"[メモリ(バイト)] 総割当-解放量 %lu-%lu, 使用量 %lu, ピーク時 %lu\n"
 
 #, c-format
 msgid ""
 "[calls] total re/malloc()'s %lu, total free()'s %lu\n"
 "\n"
 msgstr ""
-"[ƽ]  re/malloc()  %lu,  free()  %lu\n"
+"[呼出] 総 re/malloc() 回数 %lu, 総 free() 回数 %lu\n"
 "\n"
 
 msgid "E340: Line is becoming too long"
-msgstr "E340: ԤĹʤ᤮ޤ"
+msgstr "E340: 行が長くなり過ぎました"
 
 #, c-format
 msgid "E341: Internal error: lalloc(%ld, )"
-msgstr "E341: 顼: lalloc(%ld,)"
+msgstr "E341: 内部エラー: lalloc(%ld,)"
 
 #, c-format
 msgid "E342: Out of memory!  (allocating %lu bytes)"
-msgstr "E342: ꤬­ޤ!  (%lu ХȤ׵)"
+msgstr "E342: メモリが足りません!  (%lu バイトを割当要求)"
 
 #, c-format
 msgid "Calling shell to execute: \"%s\""
-msgstr "¹ԤΤ˥ƽФ: \"%s\""
+msgstr "実行のためにシェルを呼出し中: \"%s\""
 
 msgid "E545: Missing colon"
-msgstr "E545: 󤬤ޤ"
+msgstr "E545: コロンがありません"
 
 msgid "E546: Illegal mode"
-msgstr "E546: ʥ⡼ɤǤ"
+msgstr "E546: 不正なモードです"
 
 msgid "E547: Illegal mouseshape"
-msgstr "E547:  'mouseshape' Ǥ"
+msgstr "E547: 不正な 'mouseshape' です"
 
 msgid "E548: digit expected"
-msgstr "E548: ͤɬפǤ"
+msgstr "E548: 数値が必要です"
 
 msgid "E549: Illegal percentage"
-msgstr "E549: ʥѡơǤ"
+msgstr "E549: 不正なパーセンテージです"
 
 msgid "Enter encryption key: "
-msgstr "Ź沽ѤΥϤƤ: "
+msgstr "暗号化用のキーを入力してください: "
 
 msgid "Enter same key again: "
-msgstr "⤦ƱϤƤ: "
+msgstr "もう一度同じキーを入力してください: "
 
 msgid "Keys don't match!"
-msgstr "פޤ"
+msgstr "キーが一致しません"
+
+msgid "E854: path too long for completion"
+msgstr "E854: パスが長過ぎて補完できません"
 
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
 "followed by '%s'."
 msgstr ""
-"E343: ̵ʥѥǤ: '**[]' pathκǸ夫 '%s' ³ƤʤȤޤ"
-"."
+"E343: 無効なパスです: '**[数値]' はpathの最後か '%s' が続いてないといけませ"
+"ん."
 
 #, c-format
 msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: cdpathˤ \"%s\" Ȥե뤬ޤ"
+msgstr "E344: cdpathには \"%s\" というファイルがありません"
 
 #, c-format
 msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: pathˤ \"%s\" Ȥե뤬ޤ"
+msgstr "E345: pathには \"%s\" というファイルがありません"
 
 #, c-format
 msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: cdpathˤϤʾ \"%s\" Ȥե뤬ޤ"
+msgstr "E346: cdpathにはこれ以上 \"%s\" というファイルがありません"
 
 #, c-format
 msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: ѥˤϤʾ \"%s\" Ȥե뤬ޤ"
+msgstr "E347: パスにはこれ以上 \"%s\" というファイルがありません"
 
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
-msgstr "Netbeans #2 ³Ǥޤ"
+msgstr "Netbeans #2 に接続できません"
 
 msgid "Cannot connect to Netbeans"
-msgstr "Netbeans ³Ǥޤ"
+msgstr "Netbeans に接続できません"
 
 #, c-format
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
-"E668: NetBeans³եΥ⡼ɤ꤬ޤ: \"%s\""
+"E668: NetBeansの接続情報ファイルのアクセスモードに問題があります: \"%s\""
 
 msgid "read from Netbeans socket"
-msgstr "Netbeans ΥåȤɹ"
+msgstr "Netbeans のソケットを読込み"
 
 #, c-format
 msgid "E658: NetBeans connection lost for buffer %ld"
-msgstr "E658: Хåե %ld  NetBeans ³ޤ"
+msgstr "E658: バッファ %ld の NetBeans 接続が失われました"
+
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeansはこのGUIには対応していません"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: NetBeansは既に接続しています"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s は読込専用です (強制書込には ! を追加)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: カーソルの位置には識別子がありません"
 
 msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' ץ󤬶Ǥ"
+msgstr "E774: 'operatorfunc' オプションが空です"
 
 msgid "E775: Eval feature not available"
-msgstr "E775: ɾǽ̵ˤʤäƤޤ"
+msgstr "E775: 式評価機能が無効になっています"
 
 msgid "Warning: terminal cannot highlight"
-msgstr "ٹ: ѤƤüϥϥ饤ȤǤޤ"
+msgstr "警告: 使用している端末はハイライトできません"
 
 msgid "E348: No string under cursor"
-msgstr "E348: ΰ֤ˤʸ󤬤ޤ"
-
-msgid "E349: No identifier under cursor"
-msgstr "E349: ΰ֤ˤϼ̻Ҥޤ"
+msgstr "E348: カーソルの位置には文字列がありません"
 
 msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: ߤ 'foldmethod' Ǥ޾ߤõǤޤ"
+msgstr "E352: 現在の 'foldmethod' では折畳みを消去できません"
 
 msgid "E664: changelist is empty"
-msgstr "E664: ѹꥹȤǤ"
+msgstr "E664: 変更リストが空です"
 
 msgid "E662: At start of changelist"
-msgstr "E662: ѹꥹȤƬ"
+msgstr "E662: 変更リストの先頭"
 
 msgid "E663: At end of changelist"
-msgstr "E663: ѹꥹȤ"
+msgstr "E663: 変更リストの末尾"
 
 msgid "Type  :quit<Enter>  to exit Vim"
-msgstr "Vimλˤ :quit<Enter> ϤƤ"
+msgstr "Vimを終了するには :quit<Enter> と入力してください"
 
 #, c-format
 msgid "1 line %sed 1 time"
-msgstr "1 Ԥ %s  1 ޤ"
+msgstr "1 行が %s で 1 回処理されました"
 
 #, c-format
 msgid "1 line %sed %d times"
-msgstr "1 Ԥ %s  %d ޤ"
+msgstr "1 行が %s で %d 回処理されました"
 
 #, c-format
 msgid "%ld lines %sed 1 time"
-msgstr "%ld Ԥ %s  1 ޤ"
+msgstr "%ld 行が %s で 1 回処理されました"
 
 #, c-format
 msgid "%ld lines %sed %d times"
-msgstr "%ld Ԥ %s  %d ޤ"
+msgstr "%ld 行が %s で %d 回処理されました"
 
 #, c-format
 msgid "%ld lines to indent... "
-msgstr "%ld ԤǥȤޤ... "
+msgstr "%ld 行がインデントされます... "
 
 msgid "1 line indented "
-msgstr "1 Ԥ򥤥ǥȤޤ"
+msgstr "1 行をインデントしました "
 
 #, c-format
 msgid "%ld lines indented "
-msgstr "%ld Ԥ򥤥ǥȤޤ"
+msgstr "%ld 行をインデントしました "
 
 msgid "E748: No previously used register"
-msgstr "E748: ޤ쥸ѤƤޤ"
+msgstr "E748: まだレジスタを使用していません"
 
 #. must display the prompt
 msgid "cannot yank; delete anyway"
-msgstr "󥯤Ǥޤ; Ȥˤõ"
+msgstr "ヤンクできません; とにかく消去"
 
 msgid "1 line changed"
-msgstr "1 Ԥѹޤ"
+msgstr "1 行が変更されました"
 
 #, c-format
 msgid "%ld lines changed"
-msgstr "%ld Ԥѹޤ"
+msgstr "%ld 行が変更されました"
 
 #, c-format
 msgid "freeing %ld lines"
-msgstr "%ld Ԥ"
+msgstr "%ld 行を解放中"
 
 msgid "block of 1 line yanked"
-msgstr "1 ԤΥ֥å󥯤ޤ"
+msgstr "1 行のブロックがヤンクされました"
 
 msgid "1 line yanked"
-msgstr "1 Ԥ󥯤ޤ"
+msgstr "1 行がヤンクされました"
 
 #, c-format
 msgid "block of %ld lines yanked"
-msgstr "%ld ԤΥ֥å󥯤ޤ"
+msgstr "%ld 行のブロックがヤンクされました"
 
 #, c-format
 msgid "%ld lines yanked"
-msgstr "%ld Ԥ󥯤ޤ"
+msgstr "%ld 行がヤンクされました"
 
 #, c-format
 msgid "E353: Nothing in register %s"
-msgstr "E353: 쥸 %s ˤϲ⤢ޤ"
+msgstr "E353: レジスタ %s には何もありません"
 
 #. Highlight title
 msgid ""
@@ -4032,724 +4211,735 @@
 "--- Registers ---"
 msgstr ""
 "\n"
-"--- 쥸 ---"
+"--- レジスタ ---"
 
 msgid "Illegal register name"
-msgstr "ʥ쥸̾"
+msgstr "不正なレジスタ名"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
 msgstr ""
 "\n"
-"# 쥸:\n"
+"# レジスタ:\n"
 
 #, c-format
 msgid "E574: Unknown register type %d"
-msgstr "E574: ̤ΤΥ쥸 %d Ǥ"
+msgstr "E574: 未知のレジスタ型 %d です"
 
 #, c-format
 msgid "%ld Cols; "
-msgstr "%ld ; "
+msgstr "%ld 列; "
 
 #, c-format
 msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
-msgstr " %s%ld / %ld ; %ld / %ld ñ; %ld / %ld ʸ"
+msgstr "選択 %s%ld / %ld 行; %ld / %ld 単語; %ld / %ld バイト"
 
 #, c-format
 msgid ""
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
-msgstr " %s%ld / %ld ; %ld / %ld ñ; %ld / %ld ʸ; %ld / %ld Х"
+msgstr "選択 %s%ld / %ld 行; %ld / %ld 単語; %ld / %ld 文字; %ld / %ld バイト"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr " %s / %s;  %ld of %ld; ñ %ld / %ld; ʸ %ld / %ld"
+msgstr "列 %s / %s; 行 %ld of %ld; 単語 %ld / %ld; バイト %ld / %ld"
 
 #, c-format
 msgid ""
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-" %s / %s;  %ld / %ld; ñ %ld / %ld; ʸ %ld / %ld; Х %ld of %ld"
+"列 %s / %s; 行 %ld / %ld; 単語 %ld / %ld; 文字 %ld / %ld; バイト %ld of %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
 msgstr "(+%ld for BOM)"
 
 msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=%N ڡ"
+msgstr "%<%f%h%m%=%N ページ"
 
 msgid "Thanks for flying Vim"
-msgstr "Vim ȤäƤƤ꤬Ȥ"
+msgstr "Vim を使ってくれてありがとう"
 
 msgid "E518: Unknown option"
-msgstr "E518: ̤ΤΥץǤ"
+msgstr "E518: 未知のオプションです"
 
 msgid "E519: Option not supported"
-msgstr "E519: ץϥݡȤƤޤ"
+msgstr "E519: オプションはサポートされていません"
 
 msgid "E520: Not allowed in a modeline"
-msgstr "E520: modeline ǤϵĤޤ"
+msgstr "E520: modeline では許可されません"
+
+msgid "E846: Key code not set"
+msgstr "E846: キーコードが設定されていません"
 
 msgid "E521: Number required after ="
-msgstr "E521: = θˤϿɬפǤ"
+msgstr "E521: = の後には数字が必要です"
 
 msgid "E522: Not found in termcap"
-msgstr "E522: termcap ˤߤĤޤ"
+msgstr "E522: termcap 内に見つかりません"
 
 #, c-format
 msgid "E539: Illegal character <%s>"
-msgstr "E539: ʸǤ <%s>"
+msgstr "E539: 不正な文字です <%s>"
 
 msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: 'term' ˤ϶ʸǤޤ"
+msgstr "E529: 'term' には空文字列を設定できません"
 
 msgid "E530: Cannot change term in GUI"
-msgstr "E530: GUIǤ 'term' ѹǤޤ"
+msgstr "E530: GUIでは 'term' を変更できません"
 
 msgid "E531: Use \":gui\" to start the GUI"
-msgstr "E531: GUI򥹥Ȥˤ \":gui\" ѤƤ"
+msgstr "E531: GUIをスタートするには \":gui\" を使用してください"
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext'  'patchmode' ƱǤ"
+msgstr "E589: 'backupext' と 'patchmode' が同じです"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars'の値に矛盾があります"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars'の値に矛盾があります"
 
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-msgstr "E617: GTK+2 GUIǤѹǤޤ"
+msgstr "E617: GTK+2 GUIでは変更できません"
 
 msgid "E524: Missing colon"
-msgstr "E524: 󤬤ޤ"
+msgstr "E524: コロンがありません"
 
 msgid "E525: Zero length string"
-msgstr "E525: ʸĹǤ"
+msgstr "E525: 文字列の長さがゼロです"
 
 #, c-format
 msgid "E526: Missing number after <%s>"
-msgstr "E526: <%s> θ˿ޤ"
+msgstr "E526: <%s> の後に数字がありません"
 
 msgid "E527: Missing comma"
-msgstr "E527: ޤޤ"
+msgstr "E527: カンマがありません"
 
 msgid "E528: Must specify a ' value"
-msgstr "E528: ' ͤꤷʤФʤޤ"
+msgstr "E528: ' の値を指定しなければなりません"
 
 msgid "E595: contains unprintable or wide character"
-msgstr "E595: ɽǤʤʸ磻ʸޤǤޤ"
+msgstr "E595: 表示できない文字かワイド文字を含んでいます"
 
 msgid "E596: Invalid font(s)"
-msgstr "E596: ̵ʥեȤǤ"
+msgstr "E596: 無効なフォントです"
 
 msgid "E597: can't select fontset"
-msgstr "E597: եȥåȤǤޤ"
+msgstr "E597: フォントセットを選択できません"
 
 msgid "E598: Invalid fontset"
-msgstr "E598: ̵ʥեȥåȤǤ"
+msgstr "E598: 無効なフォントセットです"
 
 msgid "E533: can't select wide font"
-msgstr "E533: 磻ɥեȤǤޤ"
+msgstr "E533: ワイドフォントを選択できません"
 
 msgid "E534: Invalid wide font"
-msgstr "E534: ̵ʥ磻ɥեȤǤ"
+msgstr "E534: 無効なワイドフォントです"
 
 #, c-format
 msgid "E535: Illegal character after <%c>"
-msgstr "E535: <%c> θʸޤ"
+msgstr "E535: <%c> の後に不正な文字があります"
 
 msgid "E536: comma required"
-msgstr "E536: ޤɬפǤ"
+msgstr "E536: カンマが必要です"
 
 #, c-format
 msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' ϶Ǥ뤫 %s ޤɬפޤ"
+msgstr "E537: 'commentstring' は空であるか %s を含む必要があります"
 
 msgid "E538: No mouse support"
-msgstr "E538: ޥϥݡȤޤ"
+msgstr "E538: マウスはサポートされません"
 
 msgid "E540: Unclosed expression sequence"
-msgstr "E540: λƤޤ"
+msgstr "E540: 式が終了していません"
 
 msgid "E541: too many items"
-msgstr "E541: Ǥ¿᤮ޤ"
+msgstr "E541: 要素が多過ぎます"
 
 msgid "E542: unbalanced groups"
-msgstr "E542: 롼פ礤ޤ"
+msgstr "E542: グループが釣合いません"
 
 msgid "E590: A preview window already exists"
-msgstr "E590: ץӥ塼ɥ¸ߤޤ"
+msgstr "E590: プレビューウィンドウが既に存在します"
 
 msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
 msgstr ""
-"W17: ӥʸˤUTF-8ɬפʤΤ, ':set encoding=utf-8' Ƥ"
+"W17: アラビア文字にはUTF-8が必要なので, ':set encoding=utf-8' してください"
 
 #, c-format
 msgid "E593: Need at least %d lines"
-msgstr "E593:  %d ιԿɬפǤ"
+msgstr "E593: 最低 %d の行数が必要です"
 
 #, c-format
 msgid "E594: Need at least %d columns"
-msgstr "E594:  %d ΥɬפǤ"
+msgstr "E594: 最低 %d のカラム幅が必要です"
 
 #, c-format
 msgid "E355: Unknown option: %s"
-msgstr "E355: ̤ΤΥץǤ: %s"
+msgstr "E355: 未知のオプションです: %s"
 
 #. There's another character after zeros or the string
 #. * is empty.  In both cases, we are trying to set a
 #. * num option using a string.
 #, c-format
 msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: ɬפǤ: &%s = '%s'"
+msgstr "E521: 数字が必要です: &%s = '%s'"
 
 msgid ""
 "\n"
 "--- Terminal codes ---"
 msgstr ""
 "\n"
-"--- ü ---"
+"--- 端末コード ---"
 
 msgid ""
 "\n"
 "--- Global option values ---"
 msgstr ""
 "\n"
-"--- Х륪ץ ---"
+"--- グローバルオプション値 ---"
 
 msgid ""
 "\n"
 "--- Local option values ---"
 msgstr ""
 "\n"
-"--- 륪ץ ---"
+"--- ローカルオプション値 ---"
 
 msgid ""
 "\n"
 "--- Options ---"
 msgstr ""
 "\n"
-"--- ץ ---"
+"--- オプション ---"
 
 msgid "E356: get_varp ERROR"
-msgstr "E356: get_varp 顼"
+msgstr "E356: get_varp エラー"
 
 #, c-format
 msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': %s бʸޤ"
+msgstr "E357: 'langmap': %s に対応する文字がありません"
 
 #, c-format
 msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': ߥθ;ʬʸޤ: %s"
+msgstr "E358: 'langmap': セミコロンの後に余分な文字があります: %s"
 
 msgid "cannot open "
-msgstr "ޤ "
+msgstr "開けません "
 
 msgid "VIM: Can't open window!\n"
-msgstr "VIM: ɥ򳫤ޤ!\n"
+msgstr "VIM: ウィンドウを開けません!\n"
 
 msgid "Need Amigados version 2.04 or later\n"
-msgstr "AmigadosΥС 2.04ʹߤɬפǤ\n"
+msgstr "Amigadosのバージョン 2.04かそれ以降が必要です\n"
 
 #, c-format
 msgid "Need %s version %ld\n"
-msgstr "%s ΥС %ld ɬפǤ\n"
+msgstr "%s のバージョン %ld が必要です\n"
 
 msgid "Cannot open NIL:\n"
-msgstr "NIL򳫤ޤ:\n"
+msgstr "NILを開けません:\n"
 
 msgid "Cannot create "
-msgstr "Ǥޤ "
+msgstr "作成できません "
 
 #, c-format
 msgid "Vim exiting with %d\n"
-msgstr "Vim %d ǽλޤ\n"
+msgstr "Vimは %d で終了します\n"
 
 msgid "cannot change console mode ?!\n"
-msgstr "󥽡⡼ɤѹǤޤ?!\n"
+msgstr "コンソールモードを変更できません?!\n"
 
 msgid "mch_get_shellsize: not a console??\n"
-msgstr "mch_get_shellsize: 󥽡ǤϤʤ??\n"
+msgstr "mch_get_shellsize: コンソールではない??\n"
 
 #. if Vim opened a window: Executing a shell may cause crashes
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360: -f ץǥ¹ԤǤޤ"
+msgstr "E360: -f オプションでシェルを実行できません"
 
 msgid "Cannot execute "
-msgstr "¹ԤǤޤ "
+msgstr "実行できません "
 
 msgid "shell "
-msgstr " "
+msgstr "シェル "
 
 msgid " returned\n"
-msgstr " ޤ\n"
+msgstr " 戻りました\n"
 
 msgid "ANCHOR_BUF_SIZE too small."
-msgstr "ANCHOR_BUF_SIZE ᤮ޤ."
+msgstr "ANCHOR_BUF_SIZE が小さ過ぎます."
 
 msgid "I/O ERROR"
-msgstr "ϥ顼"
+msgstr "入出力エラー"
 
 msgid "Message"
-msgstr "å"
+msgstr "メッセージ"
 
 msgid "'columns' is not 80, cannot execute external commands"
-msgstr "'columns' 80ǤϤʤ, ޥɤ¹ԤǤޤ"
+msgstr "'columns' が80ではないため, 外部コマンドを実行できません"
 
 msgid "E237: Printer selection failed"
-msgstr "E237: ץ󥿤˼Ԥޤ"
+msgstr "E237: プリンタの選択に失敗しました"
 
 #, c-format
 msgid "to %s on %s"
-msgstr "%s  (%s )"
+msgstr "%s へ (%s 上の)"
 
 #, c-format
 msgid "E613: Unknown printer font: %s"
-msgstr "E613: ̤ΤΥץ󥿥ץǤ: %s"
+msgstr "E613: 未知のプリンタオプションです: %s"
 
 #, c-format
 msgid "E238: Print error: %s"
-msgstr "E238: 顼: %s"
+msgstr "E238: 印刷エラー: %s"
 
 #, c-format
 msgid "Printing '%s'"
-msgstr "Ƥޤ: '%s'"
+msgstr "印刷しています: '%s'"
 
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-msgstr "E244: ʸå̾ \"%s\" Ǥ (ե̾ \"%s\")"
+msgstr "E244: 文字セット名 \"%s\" は不正です (フォント名 \"%s\")"
 
 #, c-format
 msgid "E245: Illegal char '%c' in font name \"%s\""
-msgstr "E245: '%c' ʸǤ (ե̾ \"%s\")"
-
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ̵ 'osfiletype' ץ - \"Text\" Ȥޤ"
+msgstr "E245: '%c' は不正な文字です (フォント名 \"%s\")"
 
 msgid "Vim: Double signal, exiting\n"
-msgstr "Vim: 2ŤΥʥΤ, λޤ\n"
+msgstr "Vim: 2重のシグナルのため, 終了します\n"
 
 #, c-format
 msgid "Vim: Caught deadly signal %s\n"
-msgstr "Vim: ̿Ūʥ %s Τޤ\n"
+msgstr "Vim: 致命的シグナル %s を検知しました\n"
 
 #, c-format
 msgid "Vim: Caught deadly signal\n"
-msgstr "Vim: ̿ŪʥΤޤ\n"
+msgstr "Vim: 致命的シグナルを検知しました\n"
 
 #, c-format
 msgid "Opening the X display took %ld msec"
-msgstr "XФؤ³ %ld ߥäޤ"
+msgstr "Xサーバへの接続に %ld ミリ秒かかりました"
 
 msgid ""
 "\n"
 "Vim: Got X error\n"
 msgstr ""
 "\n"
-"Vim: X Υ顼򸡽Фޤr\n"
+"Vim: X のエラーを検出しましたr\n"
 
 msgid "Testing the X display failed"
-msgstr "X display Υå˼Ԥޤ"
+msgstr "X display のチェックに失敗しました"
 
 msgid "Opening the X display timed out"
-msgstr "X display  open ॢȤޤ"
+msgstr "X display の open がタイムアウトしました"
 
 msgid ""
 "\n"
 "Could not get security context for "
 msgstr ""
 "\n"
-"ƥƥȤǤޤ "
+"セキュリティコンテキストを取得できません "
 
 msgid ""
 "\n"
 "Could not set security context for "
 msgstr ""
 "\n"
-"ƥƥȤǤޤ "
+"セキュリティコンテキストを設定できません "
 
 msgid ""
 "\n"
 "Cannot execute shell "
 msgstr ""
 "\n"
-"¹ԤǤޤ "
+"シェルを実行できません "
 
 msgid ""
 "\n"
 "Cannot execute shell sh\n"
 msgstr ""
 "\n"
-"sh ¹ԤǤޤ\n"
+"sh シェルを実行できません\n"
 
 msgid ""
 "\n"
 "shell returned "
 msgstr ""
 "\n"
-"뤬֤ͤޤ "
+"シェルが値を返しました "
 
 msgid ""
 "\n"
 "Cannot create pipes\n"
 msgstr ""
 "\n"
-"ѥפǤޤ\n"
+"パイプを作成できません\n"
 
 msgid ""
 "\n"
 "Cannot fork\n"
 msgstr ""
 "\n"
-"fork Ǥޤ\n"
+"fork できません\n"
 
 msgid ""
 "\n"
 "Command terminated\n"
 msgstr ""
 "\n"
-"ޥɤǤޤ\n"
+"コマンドを中断しました\n"
 
 msgid "XSMP lost ICE connection"
-msgstr "XSMP ICE³򼺤ޤ"
+msgstr "XSMP がICE接続を失いました"
 
 #, c-format
 msgid "dlerror = \"%s\""
 msgstr "dlerror = \"%s\""
 
 msgid "Opening the X display failed"
-msgstr "X display  open ˼Ԥޤ"
+msgstr "X display の open に失敗しました"
 
 msgid "XSMP handling save-yourself request"
-msgstr "XSMP save-yourself׵Ƥޤ"
+msgstr "XSMP がsave-yourself要求を処理しています"
 
 msgid "XSMP opening connection"
-msgstr "XSMP ³򳫻ϤƤޤ"
+msgstr "XSMP が接続を開始しています"
 
 msgid "XSMP ICE connection watch failed"
-msgstr "XSMP ICE³Ԥ褦Ǥ"
+msgstr "XSMP ICE接続が失敗したようです"
 
 #, c-format
 msgid "XSMP SmcOpenConnection failed: %s"
-msgstr "XSMP SmcOpenConnectionԤޤ: %s"
+msgstr "XSMP SmcOpenConnectionが失敗しました: %s"
 
 msgid "At line"
-msgstr ""
+msgstr "行"
 
 msgid "Could not load vim32.dll!"
-msgstr "vim32.dll ɤǤޤǤ"
+msgstr "vim32.dll をロードできませんでした"
 
 msgid "VIM Error"
-msgstr "VIM顼"
+msgstr "VIMエラー"
 
 msgid "Could not fix up function pointers to the DLL!"
-msgstr "DLLؿݥ󥿤ǤޤǤ"
+msgstr "DLLから関数ポインタを取得できませんでした"
 
 #, c-format
 msgid "shell returned %d"
-msgstr "뤬 %d ǽλޤ"
+msgstr "シェルがコード %d で終了しました"
 
 #, c-format
 msgid "Vim: Caught %s event\n"
-msgstr "Vim: ٥ %s \n"
+msgstr "Vim: イベント %s を検知\n"
 
 msgid "close"
-msgstr "Ĥ"
+msgstr "閉じる"
 
 msgid "logoff"
-msgstr ""
+msgstr "ログオフ"
 
 msgid "shutdown"
-msgstr "åȥ"
+msgstr "シャットダウン"
 
 msgid "E371: Command not found"
-msgstr "E371: ޥɤޤ"
+msgstr "E371: コマンドがありません"
 
 msgid ""
 "VIMRUN.EXE not found in your $PATH.\n"
 "External commands will not pause after completion.\n"
 "See  :help win32-vimrun  for more information."
 msgstr ""
-"VIMRUN.EXE $PATH ˤߤĤޤ.\n"
-"ޥɤνλ˰ߤ򤷤ޤ.\n"
-"ܺ٤  :help win32-vimrun  򻲾ȤƤ."
+"VIMRUN.EXEが $PATH の中に見つかりません.\n"
+"外部コマンドの終了後に一時停止をしません.\n"
+"詳細は  :help win32-vimrun  を参照してください."
 
 msgid "Vim Warning"
-msgstr "Vimηٹ"
+msgstr "Vimの警告"
 
 #, c-format
 msgid "E372: Too many %%%c in format string"
-msgstr "E372: եޥåʸ %%%c ¿᤮ޤ"
+msgstr "E372: フォーマット文字列に %%%c が多過ぎます"
 
 #, c-format
 msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: եޥåʸͽ %%%c ޤ"
+msgstr "E373: フォーマット文字列に予期せぬ %%%c がありました"
 
 msgid "E374: Missing ] in format string"
-msgstr "E374: եޥåʸ ] ޤ"
+msgstr "E374: フォーマット文字列に ] がありません"
 
 #, c-format
 msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: եޥåʸǤ %%%c ϥݡȤޤ"
+msgstr "E375: フォーマット文字列では %%%c はサポートされません"
 
 #, c-format
 msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: եޥåʸ̵֤ %%%c ޤ"
+msgstr "E376: フォーマット文字列の前置に無効な %%%c があります"
 
 #, c-format
 msgid "E377: Invalid %%%c in format string"
-msgstr "E377: եޥåʸ̵ %%%c ޤ"
+msgstr "E377: フォーマット文字列に無効な %%%c があります"
 
 msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' ˥ѥ󤬻ꤵƤޤ"
+msgstr "E378: 'errorformat' にパターンが指定されていません"
 
 msgid "E379: Missing or empty directory name"
-msgstr "E379: ǥ쥯ȥ̵̾Ǥ"
+msgstr "E379: ディレクトリ名が無いか空です"
 
 msgid "E553: No more items"
-msgstr "E553: Ǥ⤦ޤ"
+msgstr "E553: 要素がもうありません"
 
 #, c-format
 msgid "(%d of %d)%s%s: "
 msgstr "(%d of %d)%s%s: "
 
 msgid " (line deleted)"
-msgstr " (Ԥޤ)"
+msgstr " (行が削除されました)"
 
 msgid "E380: At bottom of quickfix stack"
-msgstr "E380: quickfix åǤ"
+msgstr "E380: quickfix スタックの末尾です"
 
 msgid "E381: At top of quickfix stack"
-msgstr "E381: quickfix åƬǤ"
+msgstr "E381: quickfix スタックの先頭です"
 
 #, c-format
 msgid "error list %d of %d; %d errors"
-msgstr "顼 %d of %d; %d ĥ顼"
+msgstr "エラー一覧 %d of %d; %d 個エラー"
 
 msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: 'buftype' ץꤵƤΤǽߤޤ"
+msgstr "E382: 'buftype' オプションが設定されているので書込みません"
+
+msgid "Error file"
+msgstr "エラーファイル"
 
 msgid "E683: File name missing or invalid pattern"
-msgstr "E683: ե̵̵̾ʥѥǤ"
+msgstr "E683: ファイル名が無いか無効なパターンです"
 
 #, c-format
 msgid "Cannot open file \"%s\""
-msgstr "ե \"%s\" 򳫤ޤ"
+msgstr "ファイル \"%s\" を開けません"
 
 msgid "E681: Buffer is not loaded"
-msgstr "E681: Хåեɤ߹ޤޤǤ"
+msgstr "E681: バッファは読み込まれませんでした"
 
 msgid "E777: String or List expected"
-msgstr "E777: ʸ󤫥ꥹȤɬפǤ"
+msgstr "E777: 文字列かリストが必要です"
 
 #, c-format
 msgid "E369: invalid item in %s%%[]"
-msgstr "E369: ̵ʹܤǤ: %s%%[]"
+msgstr "E369: 無効な項目です: %s%%[]"
 
 msgid "E339: Pattern too long"
-msgstr "E339: ѥĹ᤮ޤ"
+msgstr "E339: パターンが長過ぎます"
 
 msgid "E50: Too many \\z("
-msgstr "E50: \\z( ¿᤮ޤ"
+msgstr "E50: \\z( が多過ぎます"
 
 #, c-format
 msgid "E51: Too many %s("
-msgstr "E51: %s( ¿᤮ޤ"
+msgstr "E51: %s( が多過ぎます"
 
 msgid "E52: Unmatched \\z("
-msgstr "E52: \\z( äƤޤ"
+msgstr "E52: \\z( が釣り合っていません"
 
 #, c-format
 msgid "E53: Unmatched %s%%("
-msgstr "E53: %s%%( äƤޤ"
+msgstr "E53: %s%%( が釣り合っていません"
 
 #, c-format
 msgid "E54: Unmatched %s("
-msgstr "E54: %s( äƤޤ"
+msgstr "E54: %s( が釣り合っていません"
 
 #, c-format
 msgid "E55: Unmatched %s)"
-msgstr "E55: %s) äƤޤ"
+msgstr "E55: %s) が釣り合っていません"
 
 #, c-format
 msgid "E59: invalid character after %s@"
-msgstr "E59: %s@ θʸޤ"
+msgstr "E59: %s@ の後に不正な文字がありました"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
-msgstr "E60: ʣ %s{...} ¿᤮ޤ"
+msgstr "E60: 複雑な %s{...} が多過ぎます"
 
 #, c-format
 msgid "E61: Nested %s*"
-msgstr "E61:%s* ҤˤʤäƤޤ"
+msgstr "E61:%s* が入れ子になっています"
 
 #, c-format
 msgid "E62: Nested %s%c"
-msgstr "E62:%s%c ҤˤʤäƤޤ"
+msgstr "E62:%s%c が入れ子になっています"
 
 #
 msgid "E63: invalid use of \\_"
-msgstr "E63: \\_ ̵ʻˡǤ"
+msgstr "E63: \\_ の無効な使用方法です"
 
 #, c-format
 msgid "E64: %s%c follows nothing"
-msgstr "E64:%s%c θˤʤˤ⤢ޤ"
+msgstr "E64:%s%c の後になにもありません"
 
 #
 msgid "E65: Illegal back reference"
-msgstr "E65: ʸȤǤ"
+msgstr "E65: 不正な後方参照です"
 
 #
 msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( ϥǤϵĤƤޤ"
+msgstr "E66: \\z( はココでは許可されていません"
 
 #
 msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 ¾ϥǤϵĤƤޤ"
+msgstr "E67: \\z1 その他はココでは許可されていません"
 
 #
 msgid "E68: Invalid character after \\z"
-msgstr "E68: \\z θʸޤ"
+msgstr "E68: \\z の後に不正な文字がありました"
 
 #
 #, c-format
 msgid "E69: Missing ] after %s%%["
-msgstr "E69: %s%%[ θ ] ޤ"
+msgstr "E69: %s%%[ の後に ] がありません"
 
 #, c-format
 msgid "E70: Empty %s%%[]"
-msgstr "E70: %s%%[] Ǥ"
+msgstr "E70: %s%%[] が空です"
 
 #
 #, c-format
 msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: %s%%[dxouU] θʸޤ"
+msgstr "E678: %s%%[dxouU] の後に不正な文字がありました"
 
 #
 #, c-format
 msgid "E71: Invalid character after %s%%"
-msgstr "E71: %s%% θʸޤ"
+msgstr "E71: %s%% の後に不正な文字がありました"
 
 #
 #, c-format
 msgid "E769: Missing ] after %s["
-msgstr "E769: %s[ θ ] ޤ"
+msgstr "E769: %s[ の後に ] がありません"
 
 #, c-format
 msgid "E554: Syntax error in %s{...}"
-msgstr "E554: %s{...} ʸˡ顼ޤ"
+msgstr "E554: %s{...} 内に文法エラーがあります"
 
 msgid "External submatches:\n"
-msgstr "ʬ:\n"
+msgstr "外部の部分該当:\n"
 
 msgid " VREPLACE"
-msgstr " ִ"
+msgstr " 仮想置換"
 
 msgid " REPLACE"
-msgstr " ִ"
+msgstr " 置換"
 
 msgid " REVERSE"
-msgstr " ȿž"
+msgstr " 反転"
 
 msgid " INSERT"
-msgstr " "
+msgstr " 挿入"
 
 msgid " (insert)"
-msgstr " ()"
+msgstr " (挿入)"
 
 msgid " (replace)"
-msgstr " (ִ)"
+msgstr " (置換)"
 
 msgid " (vreplace)"
-msgstr " (ִ)"
+msgstr " (仮想置換)"
 
 msgid " Hebrew"
-msgstr " إ֥饤"
+msgstr " ヘブライ"
 
 msgid " Arabic"
-msgstr " ӥ"
+msgstr " アラビア"
 
 msgid " (lang)"
-msgstr " ()"
+msgstr " (言語)"
 
 msgid " (paste)"
-msgstr " (Žդ)"
+msgstr " (貼り付け)"
 
 msgid " VISUAL"
-msgstr " ӥ奢"
+msgstr " ビジュアル"
 
 msgid " VISUAL LINE"
-msgstr " ӥ奢 "
+msgstr " ビジュアル 行"
 
 msgid " VISUAL BLOCK"
-msgstr " ӥ奢 "
+msgstr " ビジュアル 矩形"
 
 msgid " SELECT"
-msgstr " 쥯"
+msgstr " セレクト"
 
 msgid " SELECT LINE"
-msgstr " Իظ"
+msgstr " 行指向選択"
 
 msgid " SELECT BLOCK"
-msgstr " "
+msgstr " 矩形選択"
 
 msgid "recording"
-msgstr "Ͽ"
+msgstr "記録中"
 
 #, c-format
 msgid "E383: Invalid search string: %s"
-msgstr "E383: ̵ʸʸǤ: %s"
+msgstr "E383: 無効な検索文字列です: %s"
 
 #, c-format
 msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: ޤǸɳսϤޤ: %s"
+msgstr "E384: 上まで検索しましたが該当箇所はありません: %s"
 
 #, c-format
 msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: ޤǸɳսϤޤ: %s"
+msgstr "E385: 下まで検索しましたが該当箇所はありません: %s"
 
 msgid "E386: Expected '?' or '/'  after ';'"
-msgstr "E386: ';' ΤȤˤ '?'  '/' ԤƤ"
+msgstr "E386: ';' のあとには '?' か '/' が期待されている"
 
 msgid " (includes previously listed match)"
-msgstr " (󤷤սޤ)"
+msgstr " (前に列挙した該当箇所を含む)"
 
 #. cursor at status line
 msgid "--- Included files "
-msgstr "--- 󥯥롼ɤ줿ե"
+msgstr "--- インクルードされたファイル "
 
 msgid "not found "
-msgstr "ߤĤޤ "
+msgstr "見つかりません "
 
 msgid "in path ---\n"
-msgstr "ѥ ----\n"
+msgstr "パスに ----\n"
 
 msgid "  (Already listed)"
-msgstr "  ()"
+msgstr "  (既に列挙)"
 
 msgid "  NOT FOUND"
-msgstr "  ߤĤޤ"
+msgstr "  見つかりません"
 
 #, c-format
 msgid "Scanning included file: %s"
-msgstr "󥯥롼ɤ줿ե򥹥: %s"
+msgstr "インクルードされたファイルをスキャン中: %s"
 
 #, c-format
 msgid "Searching included file %s"
-msgstr "󥯥롼ɤ줿ե򥹥 %s"
+msgstr "インクルードされたファイルをスキャン中 %s"
 
 msgid "E387: Match is on current line"
-msgstr "E387: ߹Ԥ˳ޤ"
+msgstr "E387: 現在行に該当があります"
 
 msgid "All included files were found"
-msgstr "ƤΥ󥯥롼ɤ줿ե뤬ߤĤޤ"
+msgstr "全てのインクルードされたファイルが見つかりました"
 
 msgid "No included files"
-msgstr "󥯥롼ɥեϤޤ"
+msgstr "インクルードファイルはありません"
 
 msgid "E388: Couldn't find definition"
-msgstr "E388: ߤĤޤ"
+msgstr "E388: 定義を見つけられません"
 
 msgid "E389: Couldn't find pattern"
-msgstr "E389: ѥߤĤޤ"
+msgstr "E389: パターンを見つけられません"
+
+msgid "Substitute "
+msgstr "Substitute "
 
 #, c-format
 msgid ""
@@ -4758,606 +4948,627 @@
 "~"
 msgstr ""
 "\n"
-"# Ǹ %sѥ:\n"
+"# 最後の %s検索パターン:\n"
 "~"
 
 msgid "E759: Format error in spell file"
-msgstr "E759: ڥեν񼰥顼Ǥ"
+msgstr "E759: スペルファイルの書式エラーです"
 
 msgid "E758: Truncated spell file"
-msgstr "E758: ڥե뤬ڼƤ褦Ǥ"
+msgstr "E758: スペルファイルが切取られているようです"
 
 #, c-format
 msgid "Trailing text in %s line %d: %s"
-msgstr "%s (%d ) ³ƥ: %s"
+msgstr "%s (%d 行目) に続くテキスト: %s"
 
 #, c-format
 msgid "Affix name too long in %s line %d: %s"
-msgstr "%s (%d )  affix ̾Ĺ᤮ޤ: %s"
+msgstr "%s (%d 行目) の affix 名が長過ぎます: %s"
 
 msgid "E761: Format error in affix file FOL, LOW or UPP"
 msgstr ""
-"E761: affixե FOL, LOW ⤷ UPP ΥեޥåȤ˥顼ޤ"
+"E761: affixファイルの FOL, LOW もしくは UPP のフォーマットにエラーがあります"
 
 msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: FOL, LOW ⤷ UPP ʸϰϳǤ"
+msgstr "E762: FOL, LOW もしくは UPP の文字が範囲外です"
 
 msgid "Compressing word tree..."
-msgstr "ñĥ꡼򰵽̤Ƥޤ..."
+msgstr "単語ツリーを圧縮しています..."
 
 msgid "E756: Spell checking is not enabled"
-msgstr "E756: ڥå̵Ƥޤ"
+msgstr "E756: スペルチェックは無効化されています"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"警告: 単語リスト \"%s_%s.spl\" および \"%s_ascii.spl\" は見つかりません"
 
 #, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
-"ٹ: ñꥹ \"%s.%s.spl\"  \"%s.ascii.spl\" ϸĤޤ"
+"警告: 単語リスト \"%s.%s.spl\" および \"%s.ascii.spl\" は見つかりません"
 
 #, c-format
 msgid "Reading spell file \"%s\""
-msgstr "ڥե \"%s\" ɹ"
+msgstr "スペルファイル \"%s\" を読込中"
 
 msgid "E757: This does not look like a spell file"
-msgstr "E757: ڥեǤϤʤ褦Ǥ"
+msgstr "E757: スペルファイルではないようです"
 
 msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: ŤڥեʤΤ, åץǡȤƤ"
+msgstr "E771: 古いスペルファイルなので, アップデートしてください"
 
 msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: 꿷С Vim ѤΥڥեǤ"
+msgstr "E772: より新しいバージョンの Vim 用のスペルファイルです"
 
 msgid "E770: Unsupported section in spell file"
-msgstr "E770: ڥե˥ݡȤƤʤ󤬤ޤ"
+msgstr "E770: スペルファイルにサポートしていないセクションがあります"
 
 #, c-format
 msgid "Warning: region %s not supported"
-msgstr "ٹ9: %s ȤϰϤϥݡȤƤޤ"
+msgstr "警告9: %s という範囲はサポートされていません"
 
 #, c-format
 msgid "Reading affix file %s ..."
-msgstr "affix ե %s ɹ..."
+msgstr "affix ファイル %s を読込中..."
 
 #, c-format
 msgid "Conversion failure for word in %s line %d: %s"
-msgstr "%s (%d ) ñѴǤޤǤ: %s"
+msgstr "%s (%d 行目) の単語を変換できませんでした: %s"
 
 #, c-format
 msgid "Conversion in %s not supported: from %s to %s"
-msgstr "%s μѴϥݡȤƤޤ: %s  %s "
+msgstr "%s 内の次の変換はサポートされていません: %s から %s へ"
 
 #, c-format
 msgid "Conversion in %s not supported"
-msgstr "%s ѴϥݡȤƤޤ"
+msgstr "%s 内の変換はサポートされていません"
 
 #, c-format
 msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "%s  %d ܤ FLAG ̵ͤޤ: %s"
+msgstr "%s 内の %d 行目の FLAG に無効な値があります: %s"
 
 #, c-format
 msgid "FLAG after using flags in %s line %d: %s"
-msgstr "%s  %d ܤ˥ե饰ŻѤޤ: %s"
+msgstr "%s 内の %d 行目にフラグの二重使用があります: %s"
 
 #, c-format
 msgid ""
 "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
 "%d"
 msgstr ""
-"%s  %d ܤ PFX ܤθ COMPOUNDFORBIDFLAG ϸä̤"
-"Ȥޤ"
+"%s の %d 行目の PFX 項目の後の COMPOUNDFORBIDFLAG の定義は誤った結果を生じる"
+"ことがあります"
 
 #, c-format
 msgid ""
 "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
 "%d"
 msgstr ""
-"%s  %d ܤ PFX ܤθ COMPOUNDPERMITFLAG ϸä̤"
-"Ȥޤ"
+"%s の %d 行目の PFX 項目の後の COMPOUNDPERMITFLAG の定義は誤った結果を生じる"
+"ことがあります"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "COMPOUNDRULES の値に誤りがあります. ファイル %s の %d 行目: %s"
 
 #, c-format
 msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "%s  %d ܤ COMPOUNDWORDMAX ͤ˸꤬ޤ: %s"
+msgstr "%s の %d 行目の COMPOUNDWORDMAX の値に誤りがあります: %s"
 
 #, c-format
 msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "%s  %d ܤ COMPOUNDMIN ͤ˸꤬ޤ: %s"
+msgstr "%s の %d 行目の COMPOUNDMIN の値に誤りがあります: %s"
 
 #, c-format
 msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "%s  %d ܤ COMPOUNDSYLMAX ͤ˸꤬ޤ: %s"
+msgstr "%s の %d 行目の COMPOUNDSYLMAX の値に誤りがあります: %s"
 
 #, c-format
 msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "%s  %d ܤ CHECKCOMPOUNDPATTERN ͤ˸꤬ޤ: %s"
+msgstr "%s の %d 行目の CHECKCOMPOUNDPATTERN の値に誤りがあります: %s"
 
 #, c-format
 msgid "Different combining flag in continued affix block in %s line %d: %s"
 msgstr ""
-"%s  %d ܤ Ϣ³ affix ֥åΥե饰ȹ礻˰㤤ޤ: %s"
+"%s の %d 行目の 連続 affix ブロックのフラグの組合せに違いがあります: %s"
 
 #, c-format
 msgid "Duplicate affix in %s line %d: %s"
-msgstr "%s  %d ܤ ʣ affix 򸡽Фޤ: %s"
+msgstr "%s の %d 行目に 重複した affix を検出しました: %s"
 
 #, c-format
 msgid ""
 "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
 "line %d: %s"
 msgstr ""
-"%s  %d ܤ affix  BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
-"˻ѤƤ: %s"
+"%s の %d 行目の affix は BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
+"に使用してください: %s"
 
 #, c-format
 msgid "Expected Y or N in %s line %d: %s"
-msgstr "%s  %d ܤǤ Y  N ɬפǤ: %s"
+msgstr "%s の %d 行目では Y か N が必要です: %s"
 
 #, c-format
 msgid "Broken condition in %s line %d: %s"
-msgstr "%s  %d ܤ ϲƤޤ: %s"
+msgstr "%s の %d 行目の 条件は壊れています: %s"
 
 #, c-format
 msgid "Expected REP(SAL) count in %s line %d"
-msgstr "%s  %d ܤˤ REP(SAL) βɬפǤ"
+msgstr "%s の %d 行目には REP(SAL) の回数が必要です"
 
 #, c-format
 msgid "Expected MAP count in %s line %d"
-msgstr "%s  %d ܤˤ MAP βɬפǤ"
+msgstr "%s の %d 行目には MAP の回数が必要です"
 
 #, c-format
 msgid "Duplicate character in MAP in %s line %d"
-msgstr "%s  %d ܤ MAP ˽ʣʸޤ"
+msgstr "%s の %d 行目の MAP に重複した文字があります"
 
 #, c-format
 msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "%s  %d ܤ ǧǤʤʣܤޤ: %s"
+msgstr "%s の %d 行目に 認識できないか重複した項目があります: %s"
 
 #, c-format
 msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "%s ܤ FOL/LOW/UPP ޤ"
+msgstr "%s 行目に FOL/LOW/UPP がありません"
 
 msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "SYLLABLE ꤵʤ COMPOUNDSYLMAX"
+msgstr "SYLLABLE が指定されない COMPOUNDSYLMAX"
 
 msgid "Too many postponed prefixes"
-msgstr "ٱֻҤ¿ޤ"
+msgstr "遅延後置子が多過ぎます"
 
 msgid "Too many compound flags"
-msgstr "ʣե饰¿᤮ޤ"
+msgstr "複合フラグが多過ぎます"
 
 msgid "Too many postponed prefixes and/or compound flags"
-msgstr "ٱֻ /⤷ ʣե饰¿ޤ"
+msgstr "遅延後置子 と/もしくは 複合フラグが多過ぎます"
 
 #, c-format
 msgid "Missing SOFO%s line in %s"
-msgstr "SOFO%s Ԥ %s ˤޤ"
+msgstr "SOFO%s 行が %s にありません"
 
 #, c-format
 msgid "Both SAL and SOFO lines in %s"
-msgstr "SAL  SOFO  %s ξꤵƤޤ"
+msgstr "SAL行 と SOFO行 が %s で両方指定されています"
 
 #, c-format
 msgid "Flag is not a number in %s line %d: %s"
-msgstr "%s  %d Ԥ ե饰ͤǤϤޤ: %s"
+msgstr "%s の %d 行の フラグが数値ではありません: %s"
 
 #, c-format
 msgid "Illegal flag in %s line %d: %s"
-msgstr "%s  %d ܤ ե饰Ǥ: %s"
+msgstr "%s の %d 行目の フラグが不正です: %s"
 
 #, c-format
 msgid "%s value differs from what is used in another .aff file"
-msgstr " %s ¾ .aff եǻѤ줿ΤȰۤʤޤ"
+msgstr "値 %s は他の .aff ファイルで使用されたのと異なります"
 
 #, c-format
 msgid "Reading dictionary file %s ..."
-msgstr "ե %s 򥹥..."
+msgstr "辞書ファイル %s をスキャン中..."
 
 #, c-format
 msgid "E760: No word count in %s"
-msgstr "E760: %s ˤñޤ"
+msgstr "E760: %s には単語数がありません"
 
 #, c-format
 msgid "line %6d, word %6d - %s"
-msgstr " %6d, ñ %6d - %s"
+msgstr "行 %6d, 単語 %6d - %s"
 
 #, c-format
 msgid "Duplicate word in %s line %d: %s"
-msgstr "%s  %d ܤ ʣñ줬ߤĤޤ: %s"
+msgstr "%s の %d 行目で 重複単語が見つかりました: %s"
 
 #, c-format
 msgid "First duplicate word in %s line %d: %s"
-msgstr "ʣΤǽñ %s  %d ܤǤ: %s"
+msgstr "重複のうち最初の単語は %s の %d 行目です: %s"
 
 #, c-format
 msgid "%d duplicate word(s) in %s"
-msgstr "%d Ĥñ줬Ĥޤ (%s )"
+msgstr "%d 個の単語が見つかりました (%s 内)"
 
 #, c-format
 msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "ASCIIʸޤ %d Ĥñ̵뤷ޤ (%s )"
+msgstr "非ASCII文字を含む %d 個の単語を無視しました (%s 内)"
 
 #, c-format
 msgid "Reading word file %s ..."
-msgstr "ɸϤɹ %s ..."
+msgstr "標準入力から読込み中 %s ..."
 
 #, c-format
 msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "%s  %d ܤ ʣ /encoding= Ԥ̵뤷ޤ: %s"
+msgstr "%s の %d 行目の 重複した /encoding= 行を無視しました: %s"
 
 #, c-format
 msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "%s  %d ܤ ñθ /encoding= Ԥ̵뤷ޤ: %s"
+msgstr "%s の %d 行目の 単語の後の /encoding= 行を無視しました: %s"
 
 #, c-format
 msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "%s  %d ܤ ʣ /regions= Ԥ̵뤷ޤ: %s"
+msgstr "%s の %d 行目の 重複した /regions= 行を無視しました: %s"
 
 #, c-format
 msgid "Too many regions in %s line %d: %s"
-msgstr "%s  %d , ϰϻ꤬¿ޤ: %s"
+msgstr "%s の %d 行目, 範囲指定が多過ぎます: %s"
 
 #, c-format
 msgid "/ line ignored in %s line %d: %s"
-msgstr "%s  %d ܤ ʣ / Ԥ̵뤷ޤ: %s"
+msgstr "%s の %d 行目の 重複した / 行を無視しました: %s"
 
 #, c-format
 msgid "Invalid region nr in %s line %d: %s"
-msgstr "%s  %d  ̵ nr ΰǤ: %s"
+msgstr "%s の %d 行目 無効な nr 領域です: %s"
 
 #, c-format
 msgid "Unrecognized flags in %s line %d: %s"
-msgstr "%s  %d  ǧǽʥե饰Ǥ: %s"
+msgstr "%s の %d 行目 認識不能なフラグです: %s"
 
 #, c-format
 msgid "Ignored %d words with non-ASCII characters"
-msgstr "ASCIIʸޤ %d Ĥñ̵뤷ޤ"
+msgstr "非ASCII文字を含む %d 個の単語を無視しました"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: メモリが足りないので、単語リストは不完全です"
 
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "Ρ %d ( %d ) 򰵽̤ޤ; Ĥ %d (%d%%)"
+msgstr "ノード %d 個(全 %d 個中) を圧縮しました; 残り %d (%d%%)"
 
 msgid "Reading back spell file..."
-msgstr "ڥեɹ"
+msgstr "スペルファイルを逆読込中"
 
 #.
 #. * Go through the trie of good words, soundfold each word and add it to
 #. * the soundfold trie.
 #.
 msgid "Performing soundfolding..."
-msgstr "ߤ¹..."
+msgstr "音声畳込みを実行中..."
 
 #, c-format
 msgid "Number of words after soundfolding: %ld"
-msgstr "߸ñ: %ld"
+msgstr "音声畳込み後の総単語数: %ld"
 
 #, c-format
 msgid "Total number of words: %d"
-msgstr "ñ: %d"
+msgstr "総単語数: %d"
 
 #, c-format
 msgid "Writing suggestion file %s ..."
-msgstr "ե \"%s\" ..."
+msgstr "修正候補ファイル \"%s\" を書込み中..."
 
 #, c-format
 msgid "Estimated runtime memory use: %d bytes"
-msgstr ": %d Х"
+msgstr "推定メモリ使用量: %d バイト"
 
 msgid "E751: Output file name must not have region name"
-msgstr "E751: ϥե̾ˤϰ̾ޤޤ"
+msgstr "E751: 出力ファイル名には範囲名を含められません"
 
 msgid "E754: Only up to 8 regions supported"
-msgstr "E754: ϰϤ 8 ĤޤǤݡȤƤޤ"
+msgstr "E754: 範囲は 8 個までしかサポートされていません"
 
 #, c-format
 msgid "E755: Invalid region in %s"
-msgstr "E755: ̵ϰϤǤ: %s"
+msgstr "E755: 無効な範囲です: %s"
 
 msgid "Warning: both compounding and NOBREAK specified"
-msgstr "ٹ: ʣե饰 NOBREAK ξȤꤵޤ"
+msgstr "警告: 複合フラグと NOBREAK が両方とも指定されました"
 
 #, c-format
 msgid "Writing spell file %s ..."
-msgstr "ڥե %s ..."
+msgstr "スペルファイル %s を書込み中..."
 
 msgid "Done!"
-msgstr "¹Ԥޤ!"
+msgstr "実行しました!"
 
 #, c-format
 msgid "E765: 'spellfile' does not have %ld entries"
-msgstr "E765: 'spellfile' ˤ %ld ĤΥȥϤޤ"
+msgstr "E765: 'spellfile' には %ld 個のエントリはありません"
 
 #, c-format
 msgid "Word removed from %s"
-msgstr "%s ñ줬ޤ"
+msgstr "%s から単語が削除されました"
 
 #, c-format
 msgid "Word added to %s"
-msgstr "%s ñ줬ɲäޤ"
+msgstr "%s に単語が追加されました"
 
 msgid "E763: Word characters differ between spell files"
-msgstr "E763: ñʸڥեȰۤʤޤ"
+msgstr "E763: 単語の文字がスペルファイルと異なります"
 
 msgid "Sorry, no suggestions"
-msgstr "ǰǤ, Ϥޤ"
+msgstr "残念ですが, 修正候補はありません"
 
 #, c-format
 msgid "Sorry, only %ld suggestions"
-msgstr "ǰǤ,  %ld Ĥޤ"
+msgstr "残念ですが, 修正候補は %ld 個しかありません"
 
 #. for when 'cmdheight' > 1
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
-msgstr "\"%.*s\" 򼡤Ѵ:"
+msgstr "\"%.*s\" を次へ変換:"
 
 #, c-format
 msgid " < \"%.*s\""
 msgstr " < \"%.*s\""
 
 msgid "E752: No previous spell replacement"
-msgstr "E752: ڥִޤ¹ԤƤޤ"
+msgstr "E752: スペル置換がまだ実行されていません"
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E753: ߤĤޤ: %s"
+msgstr "E753: 見つかりません: %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: .sug եǤϤʤ褦Ǥ: %s"
+msgstr "E778: .sug ファイルではないようです: %s"
 
 #, c-format
 msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr "E779: Ť .sug եʤΤ, åץǡȤƤ: %s"
+msgstr "E779: 古い .sug ファイルなので, アップデートしてください: %s"
 
 #, c-format
 msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr "E780: 꿷С Vim Ѥ .sug եǤ: %s"
+msgstr "E780: より新しいバージョンの Vim 用の .sug ファイルです: %s"
 
 #, c-format
 msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr "E781: .sug ե뤬 .spl եȰפޤ: %s"
+msgstr "E781: .sug ファイルが .spl ファイルと一致しません: %s"
 
 #, c-format
 msgid "E782: error while reading .sug file: %s"
-msgstr "E782: .sug եɹ˥顼ȯޤ: %s"
+msgstr "E782: .sug ファイルの読込中にエラーが発生しました: %s"
 
 #. This should have been checked when generating the .spl
 #. * file.
 msgid "E783: duplicate char in MAP entry"
-msgstr "E783: MAP ȥ˽ʣʸ¸ߤޤ"
+msgstr "E783: MAP エントリに重複文字が存在します"
 
 #, c-format
 msgid "E390: Illegal argument: %s"
-msgstr "E390: ʰǤ: %s"
+msgstr "E390: 不正な引数です: %s"
 
 #, c-format
 msgid "E391: No such syntax cluster: %s"
-msgstr "E391: Τ褦ʹʸ饹Ϥޤ: %s"
+msgstr "E391: そのような構文クラスタはありません: %s"
 
 msgid "No Syntax items defined for this buffer"
-msgstr "ΥХåե줿ʸǤϤޤ"
+msgstr "このバッファに定義された構文要素はありません"
 
 msgid "syncing on C-style comments"
-msgstr "CȤƱ"
+msgstr "C言語風コメントから同期中"
 
 msgid "no syncing"
-msgstr "Ʊ"
+msgstr "非同期"
 
 msgid "syncing starts "
-msgstr "Ʊ "
+msgstr "同期開始 "
 
 msgid " lines before top line"
-msgstr " (ȥå׹Ԥ)"
+msgstr " 行前(トップ行よりも)"
 
 msgid ""
 "\n"
 "--- Syntax sync items ---"
 msgstr ""
 "\n"
-"--- ʸƱ ---"
+"--- 構文同期要素 ---"
 
 msgid ""
 "\n"
 "syncing on items"
 msgstr ""
 "\n"
-"ǾƱ"
+"要素上で同期中"
 
 msgid ""
 "\n"
 "--- Syntax items ---"
 msgstr ""
 "\n"
-"--- ʸ ---"
+"--- 構文要素 ---"
 
 #, c-format
 msgid "E392: No such syntax cluster: %s"
-msgstr "E392: Τ褦ʹʸ饹Ϥޤ: %s"
+msgstr "E392: そのような構文クラスタはありません: %s"
 
 msgid "minimal "
-msgstr "minimal"
+msgstr "minimal "
 
 msgid "maximal "
-msgstr "maximal"
+msgstr "maximal "
 
 msgid "; match "
-msgstr ";  "
+msgstr "; 該当 "
 
 msgid " line breaks"
-msgstr " Ĥβ"
+msgstr " 個の改行"
 
 msgid "E395: contains argument not accepted here"
-msgstr "E395: ξǤϰcontainsϵĤƤޤ"
+msgstr "E395: この場所では引数containsは許可されていません"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: ξǤϰcontainedinϵĤƤޤ"
+msgid "E844: invalid cchar value"
+msgstr "E844: 無効なccharの値です"
 
 msgid "E393: group[t]here not accepted here"
-msgstr "E393: Ǥϥ롼פϵĤޤ"
+msgstr "E393: ここではグループは許可されません"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
-msgstr "E394: %s ϰǤߤĤޤ"
+msgstr "E394: %s の範囲要素が見つかりません"
 
 msgid "E397: Filename required"
-msgstr "E397: ե̾ɬפǤ"
+msgstr "E397: ファイル名が必要です"
+
+msgid "E847: Too many syntax includes"
+msgstr "E847: 構文の取り込み(include)が多過ぎます"
 
 #, c-format
 msgid "E789: Missing ']': %s"
-msgstr "E789: ']' ޤ: %s"
+msgstr "E789: ']' がありません: %s"
 
 #, c-format
 msgid "E398: Missing '=': %s"
-msgstr "E398: '=' ޤ: %s"
+msgstr "E398: '=' がありません: %s"
 
 #, c-format
 msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: ­ޤ: ʸϰ %s"
+msgstr "E399: 引数が足りません: 構文範囲 %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: 構文クラスタが多過ぎます"
 
 msgid "E400: No cluster specified"
-msgstr "E400: 饹ꤵƤޤ"
+msgstr "E400: クラスタが指定されていません"
 
 #, c-format
 msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: ѥڤ꤬ߤĤޤ: %s"
+msgstr "E401: パターン区切りが見つかりません: %s"
 
 #, c-format
 msgid "E402: Garbage after pattern: %s"
-msgstr "E402: ѥΤȤ˥ߤޤ: %s"
+msgstr "E402: パターンのあとにゴミがあります: %s"
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: ʸƱ: Ϣ³ԥѥ2ٻꤵޤ"
+msgstr "E403: 構文同期: 連続行パターンが2度指定されました"
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
-msgstr "E404: ʰǤ: %s"
+msgstr "E404: 不正な引数です: %s"
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
-msgstr "E405:  sign ޤ: %s"
+msgstr "E405: 等号がありません: %s"
 
 #, c-format
 msgid "E406: Empty argument: %s"
-msgstr "E406: ΰ: %s"
+msgstr "E406: 空の引数: %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
-msgstr "E407: %s ϥǤϵĤƤޤ"
+msgstr "E407: %s はココでは許可されていません"
 
 #, c-format
 msgid "E408: %s must be first in contains list"
-msgstr "E408: %s ƥꥹȤƬǤʤФʤʤ"
+msgstr "E408: %s は内容リストの先頭でなければならない"
 
 #, c-format
 msgid "E409: Unknown group name: %s"
-msgstr "E409: ̤ΤΥ롼̾: %s"
+msgstr "E409: 未知のグループ名: %s"
 
 #, c-format
 msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: ̵ :syntax Υ֥ޥ: %s"
+msgstr "E410: 無効な :syntax のサブコマンド: %s"
 
 msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: syncolor.vim κƵƤӽФ򸡽Фޤ"
+msgstr "E679: syncolor.vim の再帰呼び出しを検出しました"
 
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: ϥ饤ȥ롼פߤĤޤ: %s"
+msgstr "E411: ハイライトグループが見つかりません: %s"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: ʬǤϤʤ: \":highlight link %s\""
+msgstr "E412: 引数が充分ではない: \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: ¿᤮ޤ: \":highlight link %s\""
+msgstr "E413: 引数が多過ぎます: \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: 롼פꤵƤΤǥϥ饤ȥ󥯤̵뤵ޤ"
+msgstr "E414: グループが設定されているのでハイライトリンクは無視されます"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: ͽƱ sign Ǥ: %s"
+msgstr "E415: 予期せぬ等号です: %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416: Ʊ sign ޤ: %s"
+msgstr "E416: 等号ががありません: %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
-msgstr "E417: ޤ: %s"
+msgstr "E417: 引数がありません: %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
-msgstr "E418: ͤǤ: %s"
+msgstr "E418: 不正な値です: %s"
 
 msgid "E419: FG color unknown"
-msgstr "E419: ̤ΤʿǤ"
+msgstr "E419: 未知の前景色です"
 
 msgid "E420: BG color unknown"
-msgstr "E420: ̤ΤطʿǤ"
+msgstr "E420: 未知の背景色です"
 
 #, c-format
 msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: 顼ֹ̾ǧǤޤ: %s"
+msgstr "E421: カラー名や番号を認識できません: %s"
 
 #, c-format
 msgid "E422: terminal code too long: %s"
-msgstr "E422: üɤĹ᤮ޤ: %s"
+msgstr "E422: 終端コードが長過ぎます: %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
-msgstr "E423: ʰǤ: %s"
+msgstr "E423: 不正な引数です: %s"
 
 msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: ¿ΰۤʤϥ饤°Ȥ᤮Ƥޤ"
+msgstr "E424: 多くの異なるハイライト属性が使われ過ぎています"
 
 msgid "E669: Unprintable character in group name"
-msgstr "E669: 롼̾˰Բǽʸޤ"
+msgstr "E669: グループ名に印刷不可能な文字があります"
 
 msgid "W18: Invalid character in group name"
-msgstr "W18: 롼̾ʸޤ"
+msgstr "W18: グループ名に不正な文字があります"
+
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: ハイライトと構文グループが多過ぎます"
 
 msgid "E555: at bottom of tag stack"
-msgstr "E555: åǤ"
+msgstr "E555: タグスタックの末尾です"
 
 msgid "E556: at top of tag stack"
-msgstr "E556: åƬǤ"
+msgstr "E556: タグスタックの先頭です"
 
 msgid "E425: Cannot go before first matching tag"
-msgstr "E425: ǽγĶ뤳ȤϤǤޤ"
+msgstr "E425: 最初の該当タグを超えて戻ることはできません"
 
 #, c-format
 msgid "E426: tag not found: %s"
-msgstr "E426: ߤĤޤ: %s"
+msgstr "E426: タグが見つかりません: %s"
 
 msgid "  # pri kind tag"
 msgstr "  # pri kind tag"
 
 msgid "file\n"
-msgstr "ե\n"
+msgstr "ファイル\n"
 
 msgid "E427: There is only one matching tag"
-msgstr "E427: 1Ĥޤ"
+msgstr "E427: 該当タグが1つだけしかありません"
 
 msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: Ǹ˳륿ĶƿʤळȤϤǤޤ"
+msgstr "E428: 最後に該当するタグを超えて進むことはできません"
 
 #, c-format
 msgid "File \"%s\" does not exist"
-msgstr "ե \"%s\" ޤ"
+msgstr "ファイル \"%s\" がありません"
 
 #. Give an indication of the number of matching tags
 #, c-format
 msgid "tag %d of %d%s"
-msgstr " %d (%d%s)"
+msgstr "タグ %d (全%d%s)"
 
 msgid " or more"
-msgstr " ʾ"
+msgstr " かそれ以上"
 
 msgid "  Using tag with different case!"
-msgstr "  ۤʤcaseǻѤޤ!"
+msgstr "  タグを異なるcaseで使用します!"
 
 #, c-format
 msgid "E429: File \"%s\" does not exist"
-msgstr "E429: ե \"%s\" ޤ"
+msgstr "E429: ファイル \"%s\" がありません"
 
 #. Highlight title
 msgid ""
@@ -5365,59 +5576,66 @@
 "  # TO tag         FROM line  in file/text"
 msgstr ""
 "\n"
-"  # TO         FROM     in file/text"
+"  # TO タグ        FROM 行    in file/text"
 
 #, c-format
 msgid "Searching tags file %s"
-msgstr "ե %s 򸡺"
+msgstr "タグファイル %s を検索中"
 
 #, c-format
 msgid "E430: Tag file path truncated for %s\n"
-msgstr "E430: եΥѥ %s ڤΤƤޤ\n"
+msgstr "E430: タグファイルのパスが %s に切り捨てられました\n"
+
+msgid "Ignoring long line in tags file"
+msgstr "タグファイル内の長い行を無視します"
 
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: ե \"%s\" ΥեޥåȤ˥顼ޤ"
+msgstr "E431: タグファイル \"%s\" のフォーマットにエラーがあります"
 
 #, c-format
 msgid "Before byte %ld"
-msgstr "ľ %ld Х"
+msgstr "直前の %ld バイト"
 
 #, c-format
 msgid "E432: Tags file not sorted: %s"
-msgstr "E432: ե뤬ȤƤޤ: %s"
+msgstr "E432: タグファイルがソートされていません: %s"
 
 #. never opened any tags file
 msgid "E433: No tags file"
-msgstr "E433: ե뤬ޤ"
+msgstr "E433: タグファイルがありません"
 
 msgid "E434: Can't find tag pattern"
-msgstr "E434: ѥߤĤޤ"
+msgstr "E434: タグパターンを見つけられません"
 
 msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: ߤĤʤΤñ˿¬ޤ!"
+msgstr "E435: タグを見つけられないので単に推測します!"
+
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "重複したフィールド名: %s"
 
 msgid "' not known. Available builtin terminals are:"
-msgstr "' ̤ΤǤ. ԤȤ߹üϼΤȤǤ:"
+msgstr "' は未知です. 現行の組み込み端末は次のとおりです:"
 
 msgid "defaulting to '"
-msgstr "άͤ򼡤Τ褦ꤷޤ '"
+msgstr "省略値を次のように設定します '"
 
 msgid "E557: Cannot open termcap file"
-msgstr "E557: termcapե򳫤ޤ"
+msgstr "E557: termcapファイルを開けません"
 
 msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: terminfoüȥߤĤޤ"
+msgstr "E558: terminfoに端末エントリを見つけられません"
 
 msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: termcapüȥߤĤޤ"
+msgstr "E559: termcapに端末エントリを見つけられません"
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: termcap \"%s\" Υȥ꤬ޤ"
+msgstr "E436: termcapに \"%s\" のエントリがありません"
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: ü \"cm\" ǽɬפǤ"
+msgstr "E437: 端末に \"cm\" 機能が必要です"
 
 #. Highlight title
 msgid ""
@@ -5425,77 +5643,154 @@
 "--- Terminal keys ---"
 msgstr ""
 "\n"
-"--- ü ---"
+"--- 端末キー ---"
 
 msgid "new shell started\n"
-msgstr "ưޤ\n"
+msgstr "新しいシェルを起動します\n"
 
 msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: ϤɹΥ顼ˤ꽪λޤ...\n"
+msgstr "Vim: 入力を読込み中のエラーにより終了します...\n"
+
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "空の選択領域のかわりにCUT_BUFFER0が使用されました"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: 予期せず行カウントが変わりました"
 
 #. must display the prompt
 msgid "No undo possible; continue anyway"
-msgstr "ǽʥɥϤޤ: Ȥꤢ³ޤ"
+msgstr "可能なアンドゥはありません: とりあえず続けます"
+
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: 書込み用にアンドゥファイルを開けません: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: アンドゥファイルが壊れています (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'のディレクトリにアンドゥファイルを書き込めません"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "アンドゥファイルとして読み込めないので上書きしません: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "アンドゥファイルではないので上書きしません: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "対象がないのでアンドゥファイルの書き込みをスキップします"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "アンドゥファイル書き込み中: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: アンドゥファイルの書き込みエラーです: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "オーナーが異なるのでアンドゥファイルを読み込みません: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "アンドゥファイル読込中: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: アンドゥファイルを読込用として開けません: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: アンドゥファイルではありません: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: 非暗号化ファイルが暗号化されたアンドゥファイルを使ってます: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: 暗号化されたアンドゥファイルの解読に失敗しました: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: アンドゥファイルが暗号化されています: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: 互換性の無いアンドゥファイルです: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "ファイルの内容が変わっているため、アンドゥ情報を利用できません"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "アンドゥファイル %s の取込を完了"
 
 msgid "Already at oldest change"
-msgstr "˰ָŤѹǤ"
+msgstr "既に一番古い変更です"
 
 msgid "Already at newest change"
-msgstr "˰ֿѹǤ"
+msgstr "既に一番新しい変更です"
 
 #, c-format
-msgid "Undo number %ld not found"
-msgstr "ɥֹ %ld ߤĤޤ"
+msgid "E830: Undo number %ld not found"
+msgstr "E830: アンドゥ番号 %ld は見つかりません"
 
 msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: ֹ椬ְäƤޤ"
+msgstr "E438: u_undo: 行番号が間違っています"
 
 msgid "more line"
-msgstr " ɲäޤ"
+msgstr "行 追加しました"
 
 msgid "more lines"
-msgstr " ɲäޤ"
+msgstr "行 追加しました"
 
 msgid "line less"
-msgstr " ޤ"
+msgstr "行 削除しました"
 
 msgid "fewer lines"
-msgstr " ޤ"
+msgstr "行 削除しました"
 
 msgid "change"
-msgstr "սѹޤ"
+msgstr "箇所変更しました"
 
 msgid "changes"
-msgstr "սѹޤ"
+msgstr "箇所変更しました"
 
 #, c-format
 msgid "%ld %s; %s #%ld  %s"
 msgstr "%ld %s; %s #%ld  %s"
 
 msgid "before"
-msgstr ""
+msgstr "前方"
 
 msgid "after"
-msgstr ""
+msgstr "後方"
 
 msgid "Nothing to undo"
-msgstr "ɥоݤޤ"
+msgstr "アンドゥ対象がありません"
 
-msgid "number changes  time"
-msgstr "ֹ   ѹ     "
+msgid "number changes  when               saved"
+msgstr "通番   変更数   変更時期           保存済"
 
 #, c-format
 msgid "%ld seconds ago"
-msgstr "%ld ÷вᤷƤޤ"
+msgstr "%ld 秒経過しています"
 
 msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: undo ľ undojoin ϤǤޤ"
+msgstr "E790: undo の直後に undojoin はできません"
 
 msgid "E439: undo list corrupt"
-msgstr "E439: ɥꥹȤƤޤ"
+msgstr "E439: アンドゥリストが壊れています"
 
 msgid "E440: undo line missing"
-msgstr "E440: ɥԤޤ"
+msgstr "E440: アンドゥ行がありません"
 
 #. Only MS VC 4.1 and earlier can do Win32s
 msgid ""
@@ -5503,90 +5798,104 @@
 "MS-Windows 16/32-bit GUI version"
 msgstr ""
 "\n"
-"MS-Windows 16/32 ӥå GUI "
+"MS-Windows 16/32 ビット GUI 版"
 
 msgid ""
 "\n"
 "MS-Windows 64-bit GUI version"
 msgstr ""
 "\n"
-"MS-Windows 64 ӥå GUI "
+"MS-Windows 64 ビット GUI 版"
 
 msgid ""
 "\n"
 "MS-Windows 32-bit GUI version"
 msgstr ""
 "\n"
-"MS-Windows 32 ӥå GUI "
+"MS-Windows 32 ビット GUI 版"
 
 msgid " in Win32s mode"
-msgstr " in Win32s ⡼"
+msgstr " in Win32s モード"
 
 msgid " with OLE support"
-msgstr " with OLE ݡ"
+msgstr " with OLE サポート"
+
+msgid ""
+"\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 64 ビット コンソール 版"
 
 msgid ""
 "\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
-"MS-Windows 32 ӥå 󥽡 "
+"MS-Windows 32 ビット コンソール 版"
 
 msgid ""
 "\n"
 "MS-Windows 16-bit version"
 msgstr ""
 "\n"
-"MS-Windows 16 ӥå "
+"MS-Windows 16 ビット 版"
 
 msgid ""
 "\n"
 "32-bit MS-DOS version"
 msgstr ""
 "\n"
-"32 ӥå MS-DOS "
+"32 ビット MS-DOS 版"
 
 msgid ""
 "\n"
 "16-bit MS-DOS version"
 msgstr ""
 "\n"
-"16 ӥå MS-DOS "
+"16 ビット MS-DOS 版"
 
 msgid ""
 "\n"
 "MacOS X (unix) version"
 msgstr ""
 "\n"
-"MacOS X (unix) "
+"MacOS X (unix) 版"
 
 msgid ""
 "\n"
 "MacOS X version"
 msgstr ""
 "\n"
-"MacOS X "
+"MacOS X 版"
 
 msgid ""
 "\n"
 "MacOS version"
 msgstr ""
 "\n"
-"MacOS "
+"MacOS 版"
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"RISC OS "
+"OpenVMS 版"
 
 msgid ""
 "\n"
 "Included patches: "
 msgstr ""
 "\n"
-"ŬѺѥѥå: "
+"適用済パッチ: "
+
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"追加拡張パッチ: "
 
 msgid "Modified by "
 msgstr "Modified by "
@@ -5606,35 +5915,35 @@
 "Huge version "
 msgstr ""
 "\n"
-"Huge  "
+"Huge 版 "
 
 msgid ""
 "\n"
 "Big version "
 msgstr ""
 "\n"
-"Big  "
+"Big 版 "
 
 msgid ""
 "\n"
 "Normal version "
 msgstr ""
 "\n"
-"̾  "
+"通常 版 "
 
 msgid ""
 "\n"
 "Small version "
 msgstr ""
 "\n"
-"Small  "
+"Small 版 "
 
 msgid ""
 "\n"
 "Tiny version "
 msgstr ""
 "\n"
-"Tiny  "
+"Tiny 版 "
 
 msgid "without GUI."
 msgstr "without GUI."
@@ -5642,15 +5951,9 @@
 msgid "with GTK2-GNOME GUI."
 msgstr "with GTK2-GNOME GUI."
 
-msgid "with GTK-GNOME GUI."
-msgstr "with GTK-GNOME GUI."
-
 msgid "with GTK2 GUI."
 msgstr "with GTK2 GUI."
 
-msgid "with GTK GUI."
-msgstr "with GTK GUI."
-
 msgid "with X11-Motif GUI."
 msgstr "with X11-Motif GUI."
 
@@ -5673,61 +5976,61 @@
 msgstr "with Cocoa GUI."
 
 msgid "with (classic) GUI."
-msgstr "with (饷å) GUI."
+msgstr "with (クラシック) GUI."
 
 msgid "  Features included (+) or not (-):\n"
-msgstr "  ǽΰ ͭ(+)/̵(-)\n"
+msgstr "  機能の一覧 有効(+)/無効(-)\n"
 
 msgid "   system vimrc file: \""
-msgstr "      ƥ vimrc: \""
+msgstr "      システム vimrc: \""
 
 msgid "     user vimrc file: \""
-msgstr "        桼 vimrc: \""
+msgstr "        ユーザ vimrc: \""
 
 msgid " 2nd user vimrc file: \""
-msgstr "     2桼 vimrc: \""
+msgstr "     第2ユーザ vimrc: \""
 
 msgid " 3rd user vimrc file: \""
-msgstr "     3桼 vimrc: \""
+msgstr "     第3ユーザ vimrc: \""
 
 msgid "      user exrc file: \""
-msgstr "         桼 exrc: \""
+msgstr "         ユーザ exrc: \""
 
 msgid "  2nd user exrc file: \""
-msgstr "      2桼 exrc: \""
+msgstr "      第2ユーザ exrc: \""
 
 msgid "  system gvimrc file: \""
-msgstr "     ƥ gvimrc: \""
+msgstr "     システム gvimrc: \""
 
 msgid "    user gvimrc file: \""
-msgstr "       桼 gvimrc: \""
+msgstr "       ユーザ gvimrc: \""
 
 msgid "2nd user gvimrc file: \""
-msgstr "    2桼 gvimrc: \""
+msgstr "    第2ユーザ gvimrc: \""
 
 msgid "3rd user gvimrc file: \""
-msgstr "    3桼 gvimrc: \""
+msgstr "    第3ユーザ gvimrc: \""
 
 msgid "    system menu file: \""
-msgstr "    ƥ˥塼: \""
+msgstr "    システムメニュー: \""
 
 msgid "  fall-back for $VIM: \""
-msgstr "       ά $VIM: \""
+msgstr "       省略時の $VIM: \""
 
 msgid " f-b for $VIMRUNTIME: \""
-msgstr "ά $VIMRUNTIME: \""
+msgstr "省略時の $VIMRUNTIME: \""
 
 msgid "Compilation: "
-msgstr "ѥ: "
+msgstr "コンパイル: "
 
 msgid "Compiler: "
-msgstr "ѥ: "
+msgstr "コンパイラ: "
 
 msgid "Linking: "
-msgstr ": "
+msgstr "リンク: "
 
 msgid "  DEBUG BUILD"
-msgstr "ǥХåӥ"
+msgstr "デバッグビルド"
 
 msgid "VIM - Vi IMproved"
 msgstr "VIM - Vi IMproved"
@@ -5736,477 +6039,645 @@
 msgstr "version "
 
 msgid "by Bram Moolenaar et al."
-msgstr "by Bram Moolenaar ¾."
+msgstr "by Bram Moolenaar 他."
 
 msgid "Vim is open source and freely distributable"
-msgstr "Vim ϥץ󥽡Ǥ꼫ͳ۲ǽǤ"
+msgstr "Vim はオープンソースであり自由に配布可能です"
 
 msgid "Help poor children in Uganda!"
-msgstr "ηäޤʤҶ˱!"
+msgstr "ウガンダの恵まれない子供たちに援助を!"
 
 msgid "type  :help iccf<Enter>       for information "
-msgstr "ܺ٤ʾ           :help iccf<Enter>      "
+msgstr "詳細な情報は           :help iccf<Enter>      "
 
 msgid "type  :q<Enter>               to exit         "
-msgstr "λˤ           :q<Enter>              "
+msgstr "終了するには           :q<Enter>              "
 
 msgid "type  :help<Enter>  or  <F1>  for on-line help"
-msgstr "饤إפ     :help<Enter>  <F1>   "
+msgstr "オンラインヘルプは     :help<Enter> か <F1>   "
 
 msgid "type  :help version7<Enter>   for version info"
-msgstr "С       :help version7<Enter>  "
+msgstr "バージョン情報は       :help version7<Enter>  "
 
 msgid "Running in Vi compatible mode"
-msgstr "Viߴ⡼ɤư"
+msgstr "Vi互換モードで動作中"
 
 msgid "type  :set nocp<Enter>        for Vim defaults"
-msgstr "Vim侩ͤˤˤ    :set nocp<Enter>       "
+msgstr "Vim推奨値にするには    :set nocp<Enter>       "
 
 msgid "type  :help cp-default<Enter> for info on this"
-msgstr "ܺ٤ʾ           :help cp-default<Enter>"
+msgstr "詳細な情報は           :help cp-default<Enter>"
 
 msgid "menu  Help->Orphans           for information    "
-msgstr "ܺ٤ϥ˥塼 إעɻ 򻲾ȤƲ   "
+msgstr "詳細はメニューの ヘルプ→孤児 を参照して下さい   "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "⡼̵Ǽ¹, פʸޤ"
+msgstr "モード無で実行中, タイプした文字が挿入されます"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "˥塼 Խꢪ(鿴)⡼"
+msgstr "メニューの 編集→全体設定→挿入(初心者)モード切替 "
 
 msgid "                              for two modes      "
-msgstr "                              ǥ⡼ͭ       "
+msgstr "                              でモード有に       "
 
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "˥塼 ԽꢪViߴ⡼      "
+msgstr "メニューの 編集→全体設定→Vi互換モード切替      "
 
 msgid "                              for Vim defaults   "
-msgstr "                              VimȤư    "
+msgstr "                              でVimとして動作    "
 
 msgid "Sponsor Vim development!"
-msgstr "Vimγȯ礷Ƥ!"
+msgstr "Vimの開発を応援してください!"
 
 msgid "Become a registered Vim user!"
-msgstr "VimϿ桼ˤʤäƤ!"
+msgstr "Vimの登録ユーザになってください!"
 
 msgid "type  :help sponsor<Enter>    for information "
-msgstr "ܺ٤ʾ           :help sponsor<Enter>   "
+msgstr "詳細な情報は           :help sponsor<Enter>   "
 
 msgid "type  :help register<Enter>   for information "
-msgstr "ܺ٤ʾ           :help register<Enter>  "
+msgstr "詳細な情報は           :help register<Enter>  "
 
 msgid "menu  Help->Sponsor/Register  for information    "
-msgstr "ܺ٤ϥ˥塼 إעݥ󥵡/Ͽ 򻲾ȤƲ   "
+msgstr "詳細はメニューの ヘルプ→スポンサー/登録 を参照して下さい   "
 
 msgid "WARNING: Windows 95/98/ME detected"
-msgstr "   ٹ: Windows 95/98/Me 򸡽  "
+msgstr "   警告: Windows 95/98/Me を検出  "
 
 msgid "type  :help windows95<Enter>  for info on this"
-msgstr " ܺ٤ʾ          :help windows95<Enter> "
+msgstr " 詳細な情報は          :help windows95<Enter> "
 
 msgid "Already only one window"
-msgstr "˥ɥ1Ĥޤ"
+msgstr "既にウィンドウは1つしかありません"
 
 msgid "E441: There is no preview window"
-msgstr "E441: ץӥ塼ɥޤ"
+msgstr "E441: プレビューウィンドウがありません"
 
 msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: ȱƱʬ䤹뤳ȤϤǤޤ"
+msgstr "E442: 左上と右下を同時に分割することはできません"
 
 msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: ¾Υɥʬ䤵ƤˤϽǤޤ"
+msgstr "E443: 他のウィンドウが分割されている時には順回できません"
 
 msgid "E444: Cannot close last window"
-msgstr "E444: ǸΥɥĤ뤳ȤϤǤޤ"
+msgstr "E444: 最後のウィンドウを閉じることはできません"
+
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: autocmdウィンドウは閉じられません"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: autocmdウィンドウしか残らないため、ウィンドウは閉じられません"
 
 msgid "E445: Other window contains changes"
-msgstr "E445: ¾Υɥˤѹޤ"
+msgstr "E445: 他のウィンドウには変更があります"
 
 msgid "E446: No file name under cursor"
-msgstr "E446: β˥ե̾ޤ"
+msgstr "E446: カーソルの下にファイル名がありません"
 
 #, c-format
 msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: pathˤ \"%s\" Ȥե뤬ޤ"
-
-#, c-format
-msgid "E370: Could not load library %s"
-msgstr "E370: 饤֥ %s ɤǤޤǤ"
-
-msgid "Sorry, this command is disabled: the Perl library could not be loaded."
-msgstr ""
-"Υޥɤ̵Ǥ, ʤ: Perl饤֥ɤǤޤǤ."
-
-msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-msgstr ""
-"E299: ɥܥåǤ Safe ⥸塼ѤʤPerlץȤ϶ؤ"
-"Ƥޤ"
+msgstr "E447: pathには \"%s\" というファイルがありません"
 
 msgid "Edit with &multiple Vims"
-msgstr "ʣVimԽ (&M)"
+msgstr "複数のVimで編集する (&M)"
 
 msgid "Edit with single &Vim"
-msgstr "1ĤVimԽ (&V)"
+msgstr "1つのVimで編集する (&V)"
 
 msgid "Diff with Vim"
-msgstr "VimǺʬ򸫤"
+msgstr "Vimで差分を表示する"
 
 msgid "Edit with &Vim"
-msgstr "VimԽ (&V)"
+msgstr "Vimで編集する (&V)"
 
 #. Now concatenate
 msgid "Edit with existing Vim - "
-msgstr "¸VimԽ - "
+msgstr "起動済のVimで編集する - "
 
 msgid "Edits the selected file(s) with Vim"
-msgstr "򤵤줿եVimԽ"
+msgstr "選択したファイルをVimで編集する"
 
 msgid "Error creating process: Check if gvim is in your path!"
-msgstr ""
-"ư˼Ԥޤ: gvim ؤΥѥꤵƤ뤫ǧƤ!"
+msgstr "プロセスの作成に失敗: gvimが環境変数PATH上にあるか確認してください!"
 
 msgid "gvimext.dll error"
-msgstr "gvimext.dll 顼"
+msgstr "gvimext.dll エラー"
 
 msgid "Path length too long!"
-msgstr "ѥĹ᤮ޤ!"
+msgstr "パスが長すぎます!"
 
 msgid "--No lines in buffer--"
-msgstr "--Хåե˹Ԥޤ--"
+msgstr "--バッファに行がありません--"
 
 #.
 #. * The error messages that can be shared are included here.
 #. * Excluded are errors that are only used once and debugging messages.
 #.
 msgid "E470: Command aborted"
-msgstr "E470: ޥɤǤޤ"
+msgstr "E470: コマンドが中断されました"
 
 msgid "E471: Argument required"
-msgstr "E471: ɬפǤ"
+msgstr "E471: 引数が必要です"
 
 msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: \\ θ /  ?  & ǤʤФʤޤ"
+msgstr "E10: \\ の後は / か ? か & でなければなりません"
 
 msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr "E11: ޥɥ饤Ǥ̵Ǥ; <CR>Ǽ¹, CTRL-CǤ"
+msgstr "E11: コマンドラインでは無効です; <CR>で実行, CTRL-Cでやめる"
 
 msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
 msgstr ""
-"E12: ߤΥǥ쥯ȥ䥿Ǥexrc/vimrcΥޥɤϵĤޤ"
+"E12: 現在のディレクトリやタグ検索ではexrc/vimrcのコマンドは許可されません"
 
 msgid "E171: Missing :endif"
-msgstr "E171: :endif ޤ"
+msgstr "E171: :endif がありません"
 
 msgid "E600: Missing :endtry"
-msgstr "E600: :endtry ޤ"
+msgstr "E600: :endtry がありません"
 
 msgid "E170: Missing :endwhile"
-msgstr "E170: :endwhile ޤ"
+msgstr "E170: :endwhile がありません"
 
 msgid "E170: Missing :endfor"
-msgstr "E170: :endfor ޤ"
+msgstr "E170: :endfor がありません"
 
 msgid "E588: :endwhile without :while"
-msgstr "E588: :while Τʤ :endwhile ޤ"
+msgstr "E588: :while のない :endwhile があります"
 
 msgid "E588: :endfor without :for"
-msgstr "E588: :endfor Τʤ :for ޤ"
+msgstr "E588: :endfor のない :for があります"
 
 msgid "E13: File exists (add ! to override)"
-msgstr "E13: ե뤬¸ߤޤ (! ɲäǾ)"
+msgstr "E13: ファイルが存在します (! を追加で上書)"
 
 msgid "E472: Command failed"
-msgstr "E472: ޥɤԤޤ"
+msgstr "E472: コマンドが失敗しました"
 
 #, c-format
 msgid "E234: Unknown fontset: %s"
-msgstr "E234: ̤ΤΥեȥå: %s"
+msgstr "E234: 未知のフォントセット: %s"
 
 #, c-format
 msgid "E235: Unknown font: %s"
-msgstr "E235: ̤ΤΥե: %s"
+msgstr "E235: 未知のフォント: %s"
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: ե \"%s\" ϸǤϤޤ"
+msgstr "E236: フォント \"%s\" は固定幅ではありません"
 
 msgid "E473: Internal error"
-msgstr "E473: 顼Ǥ"
+msgstr "E473: 内部エラーです"
 
 msgid "Interrupted"
-msgstr "ޤޤ"
+msgstr "割込まれました"
 
 msgid "E14: Invalid address"
-msgstr "E14: ̵ʥɥ쥹Ǥ"
+msgstr "E14: 無効なアドレスです"
 
 msgid "E474: Invalid argument"
-msgstr "E474: ̵ʰǤ"
+msgstr "E474: 無効な引数です"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: ̵ʰǤ: %s"
+msgstr "E475: 無効な引数です: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
-msgstr "E15: ̵ʼǤ: %s"
+msgstr "E15: 無効な式です: %s"
 
 msgid "E16: Invalid range"
-msgstr "E16: ̵ϰϤǤ"
+msgstr "E16: 無効な範囲です"
 
 msgid "E476: Invalid command"
-msgstr "E476: ̵ʥޥɤǤ"
+msgstr "E476: 無効なコマンドです"
 
 #, c-format
 msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" ϥǥ쥯ȥǤ"
+msgstr "E17: \"%s\" はディレクトリです"
 
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: \"%s\"() Υ饤֥ƽФ˼Ԥޤ"
+msgstr "E364: \"%s\"() のライブラリ呼出に失敗しました"
 
 #, c-format
 msgid "E448: Could not load library function %s"
-msgstr "E448: 饤֥δؿ %s ɤǤޤǤ"
+msgstr "E448: ライブラリの関数 %s をロードできませんでした"
 
 msgid "E19: Mark has invalid line number"
-msgstr "E19: ޡ̵ʹֹ椬ꤵƤޤ"
+msgstr "E19: マークに無効な行番号が指定されていました"
 
 msgid "E20: Mark not set"
-msgstr "E20: ޡꤵƤޤ"
+msgstr "E20: マークは設定されていません"
 
 msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: 'modifiable' դʤΤ, ѹǤޤ"
+msgstr "E21: 'modifiable' がオフなので, 変更できません"
 
 msgid "E22: Scripts nested too deep"
-msgstr "E22: ץȤҤ᤮ޤ"
+msgstr "E22: スクリプトの入れ子が深過ぎます"
 
 msgid "E23: No alternate file"
-msgstr "E23: եϤޤ"
+msgstr "E23: 副ファイルはありません"
 
 msgid "E24: No such abbreviation"
-msgstr "E24: Τ褦ûϤϤޤ"
+msgstr "E24: そのような短縮入力はありません"
 
 msgid "E477: No ! allowed"
-msgstr "E477: ! ϵĤƤޤ"
+msgstr "E477: ! は許可されていません"
 
 msgid "E25: GUI cannot be used: Not enabled at compile time"
-msgstr "E25: GUIϻԲǽǤ: ѥ̵ˤƤޤ"
+msgstr "E25: GUIは使用不可能です: コンパイル時に無効にされています"
 
 msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-msgstr "E26: إ֥饤ϻԲǽǤ: ѥ̵ˤƤޤ\n"
+msgstr "E26: ヘブライ語は使用不可能です: コンパイル時に無効にされています\n"
 
 msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-msgstr "E27: ڥ륷ϻԲǽǤ: ѥ̵ˤƤޤ\n"
+msgstr "E27: ペルシア語は使用不可能です: コンパイル時に無効にされています\n"
 
 msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-msgstr "E800: ӥϻԲǽǤ: ѥ̵ˤƤޤ\n"
+msgstr "E800: アラビア語は使用不可能です: コンパイル時に無効にされています\n"
 
 #, c-format
 msgid "E28: No such highlight group name: %s"
-msgstr "E28: Τ褦̾Υϥ饤ȥ롼פϤޤ: %s"
+msgstr "E28: そのような名のハイライトグループはありません: %s"
 
 msgid "E29: No inserted text yet"
-msgstr "E29: ޤƥȤƤޤ"
+msgstr "E29: まだテキストが挿入されていません"
 
 msgid "E30: No previous command line"
-msgstr "E30: ˥ޥɹԤޤ"
+msgstr "E30: 以前にコマンド行がありません"
 
 msgid "E31: No such mapping"
-msgstr "E31: Τ褦ʥޥåԥ󥰤Ϥޤ"
+msgstr "E31: そのようなマッピングはありません"
 
 msgid "E479: No match"
-msgstr "E479: Ϥޤ"
+msgstr "E479: 該当はありません"
 
 #, c-format
 msgid "E480: No match: %s"
-msgstr "E480: Ϥޤ: %s"
+msgstr "E480: 該当はありません: %s"
 
 msgid "E32: No file name"
-msgstr "E32: ե̾ޤ"
+msgstr "E32: ファイル名がありません"
 
 msgid "E33: No previous substitute regular expression"
-msgstr "E33: ɽִޤ¹ԤƤޤ"
+msgstr "E33: 正規表現置換がまだ実行されていません"
 
 msgid "E34: No previous command"
-msgstr "E34: ޥɤޤ¹ԤƤޤ"
+msgstr "E34: コマンドがまだ実行されていません"
 
 msgid "E35: No previous regular expression"
-msgstr "E35: ɽޤ¹ԤƤޤ"
+msgstr "E35: 正規表現がまだ実行されていません"
 
 msgid "E481: No range allowed"
-msgstr "E481: ϰϻϵĤƤޤ"
+msgstr "E481: 範囲指定は許可されていません"
 
 msgid "E36: Not enough room"
-msgstr "E36: ʬ̤ޤ"
+msgstr "E36: ウィンドウに十分な高さもしくは幅がありません"
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: %s Ȥ̾Ͽ줿ФϤޤ"
+msgstr "E247: %s という名前の登録されたサーバはありません"
 
 #, c-format
 msgid "E482: Can't create file %s"
-msgstr "E482: ե %s Ǥޤ"
+msgstr "E482: ファイル %s を作成できません"
 
 msgid "E483: Can't get temp file name"
-msgstr "E483: ե̾Ǥޤ"
+msgstr "E483: 一時ファイルの名前を取得できません"
 
 #, c-format
 msgid "E484: Can't open file %s"
-msgstr "E484: ե \"%s\" 򳫤ޤ"
+msgstr "E484: ファイル \"%s\" を開けません"
 
 #, c-format
 msgid "E485: Can't read file %s"
-msgstr "E485: ե %s ɹޤ"
+msgstr "E485: ファイル %s を読込めません"
 
 msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: Ǹѹ¸Ƥޤ (! ɲäѹ˴)"
+msgstr "E37: 最後の変更が保存されていません (! を追加で変更を破棄)"
 
 msgid "E38: Null argument"
-msgstr "E38: Ǥ"
+msgstr "E38: 引数が空です"
 
 msgid "E39: Number expected"
-msgstr "E39: ͤ׵ᤵƤޤ"
+msgstr "E39: 数値が要求されています"
 
 #, c-format
 msgid "E40: Can't open errorfile %s"
-msgstr "E40: 顼ե %s 򳫤ޤ"
+msgstr "E40: エラーファイル %s を開けません"
 
 msgid "E233: cannot open display"
-msgstr "E233: ǥץ쥤򳫤ޤ"
+msgstr "E233: ディスプレイを開けません"
 
 msgid "E41: Out of memory!"
-msgstr "E41: ꤬Ԥ̤Ƥޤ!"
+msgstr "E41: メモリが尽き果てました!"
 
 msgid "Pattern not found"
-msgstr "ѥϤߤĤޤǤ"
+msgstr "パターンは見つかりませんでした"
 
 #, c-format
 msgid "E486: Pattern not found: %s"
-msgstr "E486: ѥϤߤĤޤǤ: %s"
+msgstr "E486: パターンは見つかりませんでした: %s"
 
 msgid "E487: Argument must be positive"
-msgstr "E487: ͤǤʤФʤޤ"
+msgstr "E487: 引数は正の値でなければなりません"
 
 msgid "E459: Cannot go back to previous directory"
-msgstr "E459: Υǥ쥯ȥޤ"
+msgstr "E459: 前のディレクトリに戻れません"
 
 msgid "E42: No Errors"
-msgstr "E42: 顼Ϥޤ"
+msgstr "E42: エラーはありません"
 
 msgid "E776: No location list"
-msgstr "E776: ꥹȤϤޤ"
+msgstr "E776: 場所リストはありません"
 
 msgid "E43: Damaged match string"
-msgstr "E43: ʸ»Ƥޤ"
+msgstr "E43: 該当文字列が破損しています"
 
 msgid "E44: Corrupted regexp program"
-msgstr "E44: ɽץǤ"
+msgstr "E44: 不正な正規表現プログラムです"
 
 msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: 'readonly' ץꤵƤޤ (! ɲäǾ)"
+msgstr "E45: 'readonly' オプションが設定されています (! を追加で上書き)"
 
 #, c-format
 msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: ɼѿ \"%s\" ˤͤǤޤ"
+msgstr "E46: 読取専用変数 \"%s\" には値を設定できません"
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: ɥܥåǤѿ \"%s\" ͤǤޤ"
+msgstr "E794: サンドボックスでは変数 \"%s\" に値を設定できません"
 
 msgid "E47: Error while reading errorfile"
-msgstr "E47: 顼եɹ˥顼ȯޤ"
+msgstr "E47: エラーファイルの読込中にエラーが発生しました"
 
 msgid "E48: Not allowed in sandbox"
-msgstr "E48: ɥܥåǤϵޤ"
+msgstr "E48: サンドボックスでは許されません"
 
 msgid "E523: Not allowed here"
-msgstr "E523: ǤϵĤޤ"
+msgstr "E523: ここでは許可されません"
 
 msgid "E359: Screen mode setting not supported"
-msgstr "E359: ꡼⡼ɤˤбƤޤ"
+msgstr "E359: スクリーンモードの設定には対応していません"
 
 msgid "E49: Invalid scroll size"
-msgstr "E49: ̵ʥ̤Ǥ"
+msgstr "E49: 無効なスクロール量です"
 
 msgid "E91: 'shell' option is empty"
-msgstr "E91: 'shell' ץ󤬶Ǥ"
+msgstr "E91: 'shell' オプションが空です"
 
 msgid "E255: Couldn't read in sign data!"
-msgstr "E255: sign ΥǡɹޤǤ"
+msgstr "E255: sign のデータを読込めませんでした"
 
 msgid "E72: Close error on swap file"
-msgstr "E72: åץեΥ顼Ǥ"
+msgstr "E72: スワップファイルのクローズ時エラーです"
 
 msgid "E73: tag stack empty"
-msgstr "E73: åǤ"
+msgstr "E73: タグスタックが空です"
 
 msgid "E74: Command too complex"
-msgstr "E74: ޥɤʣ᤮ޤ"
+msgstr "E74: コマンドが複雑過ぎます"
 
 msgid "E75: Name too long"
-msgstr "E75: ̾Ĺ᤮ޤ"
+msgstr "E75: 名前が長過ぎます"
 
 msgid "E76: Too many ["
-msgstr "E76: [ ¿᤮ޤ"
+msgstr "E76: [ が多過ぎます"
 
 msgid "E77: Too many file names"
-msgstr "E77: ե̾¿᤮ޤ"
+msgstr "E77: ファイル名が多過ぎます"
 
 msgid "E488: Trailing characters"
-msgstr "E488: ;ʬʸˤޤ"
+msgstr "E488: 余分な文字が後ろにあります"
 
 msgid "E78: Unknown mark"
-msgstr "E78: ̤ΤΥޡ"
+msgstr "E78: 未知のマーク"
 
 msgid "E79: Cannot expand wildcards"
-msgstr "E79: 磻ɥɤŸǤޤ"
+msgstr "E79: ワイルドカードを展開できません"
 
 msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight'  'winminheight' 꾮Ǥޤ"
+msgstr "E591: 'winheight' は 'winminheight' より小さくできません"
 
 msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth'  'winminwidth' 꾮Ǥޤ"
+msgstr "E592: 'winwidth' は 'winminwidth' より小さくできません"
 
 msgid "E80: Error while writing"
-msgstr "E80: Υ顼"
+msgstr "E80: 書込み中のエラー"
 
 msgid "Zero count"
-msgstr ""
+msgstr "ゼロカウント"
 
 msgid "E81: Using <SID> not in a script context"
-msgstr "E81: ץȰʳ<SID>Ȥޤ"
+msgstr "E81: スクリプト以外で<SID>が使われました"
 
 msgid "E449: Invalid expression received"
-msgstr "E449: ̵ʼޤ"
+msgstr "E449: 無効な式を受け取りました"
 
 msgid "E463: Region is guarded, cannot modify"
-msgstr "E463: ΰ褬ݸƤΤ, ѹǤޤ"
+msgstr "E463: 領域が保護されているので, 変更できません"
 
 msgid "E744: NetBeans does not allow changes in read-only files"
-msgstr "E744: NetBeans ɹѥեѹ뤳Ȥޤ"
+msgstr "E744: NetBeans は読込専用ファイルを変更することを許しません"
 
 #, c-format
 msgid "E685: Internal error: %s"
-msgstr "E685: 顼Ǥ: %s"
+msgstr "E685: 内部エラーです: %s"
 
 msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: ѥ 'maxmempattern' ʾΥѤޤ"
+msgstr "E363: パターンが 'maxmempattern' 以上のメモリを使用します"
 
 msgid "E749: empty buffer"
-msgstr "E749: ХåեǤ"
+msgstr "E749: バッファが空です"
 
 msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: ѥ󤫶ڤ국椬Ǥ"
+msgstr "E682: 検索パターンか区切り記号が不正です"
 
 msgid "E139: File is loaded in another buffer"
-msgstr "E139: Ʊ̾Υե뤬¾ΥХåեɹޤƤޤ"
+msgstr "E139: 同じ名前のファイルが他のバッファで読込まれています"
 
 #, c-format
 msgid "E764: Option '%s' is not set"
-msgstr "E764: ץ '%s' ꤵƤޤ"
+msgstr "E764: オプション '%s' は設定されていません"
+
+msgid "E850: Invalid register name"
+msgstr "E850: 無効なレジスタ名です"
 
 msgid "search hit TOP, continuing at BOTTOM"
-msgstr "ޤǸΤǲޤ"
+msgstr "上まで検索したので下に戻ります"
 
 msgid "search hit BOTTOM, continuing at TOP"
-msgstr "ޤǸΤǾޤ"
+msgstr "下まで検索したので上に戻ります"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "暗号キーが必要です: \"%s\""
+
+msgid "can't delete OutputObject attributes"
+msgstr "OutputObject属性を消せません"
+
+msgid "softspace must be an integer"
+msgstr "softspace は integer でなければなりません"
+
+msgid "invalid attribute"
+msgstr "無効な属性です"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines() には文字列のリストが必要です"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: I/Oオブジェクトの初期化エラー"
+
+msgid "empty keys are not allowed"
+msgstr "空のキーは許可されていません"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "DictionaryObject属性を消せません"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "固定された辞書は変更できません"
+
+msgid "Cannot set this attribute"
+msgstr "この属性は設定できません"
+
+msgid "dict is locked"
+msgstr "辞書はロックされています"
+
+msgid "failed to add key to dictionary"
+msgstr "辞書へのキーの追加に失敗しました"
+
+msgid "list index out of range"
+msgstr "リスト範囲外のインデックスです"
+
+msgid "internal error: failed to get vim list item"
+msgstr "内部エラー: vimのリスト要素の取得に失敗しました"
+
+msgid "list is locked"
+msgstr "リストはロックされています"
+
+msgid "Failed to add item to list"
+msgstr "リストへの要素追加に失敗しました"
+
+msgid "internal error: no vim list item"
+msgstr "内部エラー: vimのリスト要素がありません"
+
+msgid "can only assign lists to slice"
+msgstr "スライスにはリストだけが代入できます"
+
+msgid "internal error: failed to add item to list"
+msgstr "内部エラー: リストへの要素追加に失敗しました"
+
+msgid "can only concatenate with lists"
+msgstr "リストとのみ接続できます"
+
+msgid "cannot delete vim.dictionary attributes"
+msgstr "vim.dictionary属性は消せません"
+
+msgid "cannot modify fixed list"
+msgstr "固定されたリストは変更できません"
+
+msgid "cannot set this attribute"
+msgstr "この属性は設定できません"
+
+msgid "'self' argument must be a dictionary"
+msgstr "'self' 引数は辞書型の値でなければなりません"
+
+msgid "failed to run function"
+msgstr "関数の実行に失敗しました"
+
+msgid "unable to get option value"
+msgstr "オプションの値は取得できません"
+
+msgid "unable to unset global option"
+msgstr "グローバルオプションの設定解除はできません"
+
+msgid "unable to unset option without global value"
+msgstr "グローバル変数を使わずにオプションの設定解除はできません"
+
+msgid "object must be integer"
+msgstr "オブジェクトは整数でなければなりません"
+
+msgid "object must be string"
+msgstr "オブジェクトは文字列でなければなりません"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "削除されたタブを参照しようとしました"
+
+#, c-format
+msgid "<tabpage object (deleted) at %p>"
+msgstr "<タブページオブジェクト (消去済み) %p>"
+
+#, c-format
+msgid "<tabpage object (unknown) at %p>"
+msgstr "<タブページオブジェクト (不明) %p>"
+
+#, c-format
+msgid "<tabpage %d>"
+msgstr "<タブページ %d>"
+
+msgid "no such tab page"
+msgstr "そのようなタブページはありません"
+
+msgid "attempt to refer to deleted window"
+msgstr "削除されたウィンドウを参照しようとしました"
+
+msgid "readonly attribute"
+msgstr "読込専用属性"
+
+msgid "cursor position outside buffer"
+msgstr "カーソル位置がバッファの外側です"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<ウィンドウオブジェクト (消去済み) %p>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<ウィンドウオブジェクト (不明) %p>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<ウィンドウ %d>"
+
+msgid "no such window"
+msgstr "そのようなウィンドウはありません"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "削除されたバッファを参照しようとしました"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<バッファオブジェクト (消去済み) %p>"
+
+msgid "key must be integer"
+msgstr "キーは整数値でなければなりません"
+
+msgid "expected vim.buffer object"
+msgstr "vim.bufferオブジェクトを期待しています"
+
+msgid "failed to switch to given buffer"
+msgstr "指定されたバッファへの切り替えに失敗しました"
+
+msgid "expected vim.window object"
+msgstr "vim.windowオブジェクトを期待しています"
+
+msgid "failed to find window in the current tab page"
+msgstr "現在のタブには指定されたウィンドウがありませんでした"
+
+msgid "did not switch to the specified window"
+msgstr "指定されたウィンドウに切り替えませんでした"
+
+msgid "expected vim.tabpage object"
+msgstr "vim.tabpageオブジェクトを期待しています"
+
+msgid "did not switch to the specified tab page"
+msgstr "指定されたタブページに切り替えませんでした"
+
+msgid "unable to convert to vim structure"
+msgstr "vimの構造体に変換できません"
+
+msgid "NULL reference passed"
+msgstr "NULL参照が渡されました"
+
+msgid "internal error: invalid value type"
+msgstr "内部エラー: 無効な値型です"
diff -Naur vim73.orig/src/po/ja.sjis.po vim73/src/po/ja.sjis.po
--- vim73.orig/src/po/ja.sjis.po	2010-08-15 13:02:25.000000000 +0000
+++ vim73/src/po/ja.sjis.po	2013-08-04 19:09:10.643943759 +0000
@@ -3,21 +3,50 @@
 # Do ":help uganda"  in Vim to read copying and usage conditions.
 # Do ":help credits" in Vim to see a list of people who contributed.
 #
-# MURAOKA Taro <koron.kaoriya@gmail.com>, 2001-8.
-# Last Change: 31-May-2008.
+# Last Change: 2013 May 19
+#
+# Copyright (C) 2001-12 MURAOKA Taro <koron.kaoriya@gmail.com>
+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+#
+# Original translations.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 7.1\n"
+"Project-Id-Version: Vim 7.4\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-05-31 22:00+0900\n"
-"PO-Revision-Date: 2008-05-31 22:30+0900\n"
+"POT-Creation-Date: 2013-05-19 12:20+0900\n"
+"PO-Revision-Date: 2013-05-19 12:30+0900\n"
 "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
 "Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language: Japanese\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=cp932\n"
 "Content-Transfer-Encoding: 8-bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() pX[hŌĂяo܂"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: BlowfishÍ̃rbO/gGfBAԈĂ܂"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256̃eXgɎs܂"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: BlowfishÍ̃eXgɎs܂"
+
+msgid "[Location List]"
+msgstr "[ꏊXg]"
+
+msgid "[Quickfix List]"
+msgstr "[QuickfixXg]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: autocommandR}h̒~N܂"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: obt@1쐬łȂ̂, I܂..."
 
@@ -83,7 +112,7 @@
 
 #, c-format
 msgid "E92: Buffer %ld not found"
-msgstr "E92: obt@ %ld ݂܂"
+msgstr "E92: obt@ %ld ܂"
 
 #, c-format
 msgid "E93: More than one match for %s"
@@ -149,7 +178,6 @@
 msgid "Top"
 msgstr "擪"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -157,11 +185,8 @@
 "\n"
 "# obt@Xg:\n"
 
-msgid "[Location List]"
-msgstr "[ꏊXg]"
-
-msgid "[Quickfix List]"
-msgstr "[QuickfixXg]"
+msgid "[Scratch]"
+msgstr "[]"
 
 msgid ""
 "\n"
@@ -182,12 +207,18 @@
 msgid "E96: Can not diff more than %ld buffers"
 msgstr "E96: %ld ȏ̃obt@diffł܂"
 
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: ꎞt@C̓Ǎ͏ł܂"
+
 msgid "E97: Cannot create diffs"
 msgstr "E97: 쐬ł܂ "
 
 msgid "Patch file"
 msgstr "pb`t@C"
 
+msgid "E816: Cannot read patch output"
+msgstr "E816: patch̏o͂Ǎ߂܂"
+
 msgid "E98: Cannot read diff output"
 msgstr "E98: diff̏o͂Ǎ߂܂"
 
@@ -206,7 +237,7 @@
 
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: obt@ \"%s\" ݂܂"
+msgstr "E102: obt@ \"%s\" ܂"
 
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
@@ -219,7 +250,7 @@
 msgstr "E104: Escape͎gpł܂"
 
 msgid "E544: Keymap file not found"
-msgstr "E544: L[}bvt@C݂܂"
+msgstr "E544: L[}bvt@C܂"
 
 msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: :source Ŏ捞ރt@CȊOł :loadkeymap g܂"
@@ -273,6 +304,12 @@
 msgid "Hit end of paragraph"
 msgstr "i̍ŌɃqbg"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Ԋ֐EBhEύX܂"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: ⊮֐eLXg폜܂"
+
 msgid "'dictionary' option is empty"
 msgstr "'dictionary' IvVł"
 
@@ -293,7 +330,6 @@
 msgid "Scanning: %s"
 msgstr "XL: %s"
 
-#, c-format
 msgid "Scanning tags."
 msgstr "^OXL."
 
@@ -336,7 +372,7 @@
 msgstr "E121: `̕ϐł: %s"
 
 msgid "E111: Missing ']'"
-msgstr "E111: ']' ݂܂"
+msgstr "E111: ']' ܂"
 
 #, c-format
 msgid "E686: Argument of %s must be a List"
@@ -429,7 +465,7 @@
 msgstr "E108: ̕ϐ͂܂: \"%s\""
 
 msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: (A`)bNɂ͕ϐ̓q[߂܂"
+msgstr "E743: (A)bNɂ͕ϐ̓q[߂܂"
 
 msgid "E109: Missing ':' after '?'"
 msgstr "E109: '?' ̌ ':' ܂"
@@ -452,8 +488,11 @@
 msgid "E694: Invalid operation for Funcrefs"
 msgstr "E694: ֐Qƌ^ɂ͖ȑł"
 
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: '%' 𕂓_Ƒgݍ킹Ă͎g܂"
+
 msgid "E110: Missing ')'"
-msgstr "E110: ')' ݂܂"
+msgstr "E110: ')' ܂"
 
 msgid "E695: Cannot index a Funcref"
 msgstr "E695: ֐Qƌ^̓CfbNXł܂"
@@ -502,6 +541,14 @@
 msgstr "E724: \\ɂ͕ϐ̓q[߂܂"
 
 #, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: ֐̈߂܂: %s"
+
+#, c-format
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: ֐̖Ȉł: %s"
+
+#, c-format
 msgid "E117: Unknown function: %s"
 msgstr "E117: m̊֐ł: %s"
 
@@ -517,8 +564,14 @@
 msgid "E725: Calling dict function without Dictionary: %s"
 msgstr "E725: p֐Ă΂܂܂: %s"
 
+msgid "E808: Number or Float required"
+msgstr "E808: l_Kvł"
+
+msgid "add() argument"
+msgstr "add() ̈"
+
 msgid "E699: Too many arguments"
-msgstr "E699: ߂܂"
+msgstr "E699: ߂܂"
 
 msgid "E785: complete() can only be used in Insert mode"
 msgstr "E785: complete() ͑}[hłpł܂"
@@ -531,13 +584,22 @@
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "extend() argument"
+msgstr "extend() ̈"
+
 #, c-format
 msgid "E737: Key already exists: %s"
-msgstr "E737: %s ƂL[͊ɑ݂܂"
+msgstr "E737: L[͊ɑ݂܂: %s"
+
+msgid "map() argument"
+msgstr "map() ̈"
+
+msgid "filter() argument"
+msgstr "filter() ̈"
 
 #, c-format
 msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld s:"
+msgstr "+-%s%3ld s: "
 
 #, c-format
 msgid "E700: Unknown function: %s"
@@ -553,6 +615,9 @@
 msgid "called inputrestore() more often than inputsave()"
 msgstr "inputrestore()  inputsave() Ă΂܂"
 
+msgid "insert() argument"
+msgstr "insert() ̈"
+
 msgid "E786: Range not allowed"
 msgstr "E786: ͈͎w͋Ă܂"
 
@@ -578,13 +643,22 @@
 msgid "E277: Unable to read a server reply"
 msgstr "E277: T[ỏ܂"
 
+msgid "remove() argument"
+msgstr "remove() ̈"
+
 # Added at 10-Mar-2004.
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: V{bNN߂܂ (zĂ\\܂)"
 
+msgid "reverse() argument"
+msgstr "reverse() ̈"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: NCAg֑邱Ƃł܂"
 
+msgid "sort() argument"
+msgstr "sort() ̈"
+
 msgid "E702: Sort compare function failed"
 msgstr "E702: \\[g̔r֐s܂"
 
@@ -594,6 +668,9 @@
 msgid "E677: Error writing temp file"
 msgstr "E677: ꎞt@CɃG[܂"
 
+msgid "E805: Using a Float as a Number"
+msgstr "E805: _𐔒lƂĈĂ܂"
+
 msgid "E703: Using a Funcref as a Number"
 msgstr "E703: ֐Qƌ^𐔒lƂĈĂ܂B"
 
@@ -610,15 +687,10 @@
 msgstr "E730: Xg^𕶎ƂĈĂ܂"
 
 msgid "E731: using Dictionary as a String"
-msgstr "E731: ϐ^𕶎ƂĈĂ܂"
+msgstr "E731: ^𕶎ƂĈĂ܂"
 
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: ֐Qƌ^ϐ͑啶Ŏn܂Ȃ΂Ȃ܂: %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: ϐ̊֐ƏՓ˂܂: %s"
+msgid "E806: using Float as a String"
+msgstr "E806: _𕶎ƂĈĂ܂"
 
 #, c-format
 msgid "E706: Variable type mismatch for: %s"
@@ -629,6 +701,14 @@
 msgstr "E795: ϐ %s 폜ł܂"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: ֐Qƌ^ϐ͑啶Ŏn܂Ȃ΂Ȃ܂: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: ϐ̊֐ƏՓ˂܂: %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: lbNĂ܂: %s"
 
@@ -643,17 +723,36 @@
 msgstr "E698: Rs[ɂ͕ϐ̓q[߂܂"
 
 #, c-format
+msgid "E123: Undefined function: %s"
+msgstr "E123: `̊֐ł: %s"
+
+#, c-format
 msgid "E124: Missing '(': %s"
 msgstr "E124: '(' ܂: %s"
 
+msgid "E862: Cannot use g: here"
+msgstr "E862: ł g: ͎g܂"
+
 #, c-format
 msgid "E125: Illegal argument: %s"
 msgstr "E125: sȈł: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: dĂ܂: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: :endfunction ܂"
 
 #, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: ֐ϐƏՓ˂܂: %s"
+
+#, c-format
+msgid "E127: Cannot redefine function %s: It is in use"
+msgstr "E127: ֐ %s Ē`ł܂: gpł"
+
+#, c-format
 msgid "E746: Function name does not match script file name: %s"
 msgstr "E746: ֐XNvg̃t@Cƈv܂: %s"
 
@@ -694,7 +793,6 @@
 msgid "E133: :return not inside a function"
 msgstr "E133: ֐O :return ܂"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -709,6 +807,9 @@
 "\n"
 "\tLast set from "
 
+msgid "No old files"
+msgstr "Ât@C͂܂"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  16i %02x,  8i %03o"
@@ -758,6 +859,9 @@
 msgid " marks"
 msgstr " }[N"
 
+msgid " oldfiles"
+msgstr " t@CQ"
+
 msgid " FAILED"
 msgstr " s"
 
@@ -779,7 +883,6 @@
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "#  viminfo t@C Vim %s ɂĐ܂.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -787,7 +890,6 @@
 "# ύXۂɂ͏\\ӂĂ!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# ̃t@Cꂽ 'encoding' ̒l\n"
 
@@ -865,7 +967,7 @@
 msgstr "%s ɒu܂? (y/n/a/q/l/^E/^Y)"
 
 msgid "(Interrupted) "
-msgstr "(܂܂)"
+msgstr "(܂܂) "
 
 msgid "1 match"
 msgstr "1 ӏY܂"
@@ -896,9 +998,12 @@
 
 #, c-format
 msgid "Pattern found in every line: %s"
-msgstr "p^[SĂ̍sł݂܂: %s"
+msgstr "p^[SĂ̍sŌ܂: %s"
 
 #, c-format
+msgid "Pattern not found: %s"
+msgstr "p^[͌܂ł: %s"
+
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -921,7 +1026,7 @@
 
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
-msgstr "cOłwvt@C \"%s\" ݂܂"
+msgstr "cOłwvt@C \"%s\" ܂"
 
 #, c-format
 msgid "E150: Not a directory: %s"
@@ -975,7 +1080,7 @@
 
 # Added at 27-Jan-2004.
 msgid " (NOT FOUND)"
-msgstr "  (݂܂)"
+msgstr "  (܂)"
 
 msgid " (not supported)"
 msgstr " (T|[g)"
@@ -1000,7 +1105,7 @@
 
 #, c-format
 msgid "E161: Breakpoint not found: %s"
-msgstr "E161: u[N|Cg݂܂: %s"
+msgstr "E161: u[N|Cg܂: %s"
 
 msgid "No breakpoints defined"
 msgstr "u[N|Cg`Ă܂"
@@ -1009,8 +1114,8 @@
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s  s %ld"
 
-msgid "E750: First use :profile start <fname>"
-msgstr "E750: ߂ :profile start <fname> sĂ"
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: ߂ \":profile start {fname}\" sĂ"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
@@ -1049,7 +1154,7 @@
 
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
-msgstr "'runtimepath' ̒ɂ݂͂܂: \"%s\""
+msgstr "'runtimepath' ̒ɂ͌܂: \"%s\""
 
 msgid "Source Vim script"
 msgstr "VimXNvg̎捞"
@@ -1202,6 +1307,9 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: [U`R}h͉p啶Ŏn܂Ȃ΂Ȃ܂"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: \\񖼂Ȃ̂, [U`R}hɗpł܂"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: ̃[U`R}h͂܂: %s"
@@ -1216,9 +1324,12 @@
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: JX^⊮ɂ͈ƂĊ֐Kvł"
 
+msgid "unknown"
+msgstr "s"
+
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: J[XL[ %s ݂܂"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: J[XL[ '%s' ܂"
 
 msgid "Greetings, Vim user!"
 msgstr "Vim gA₠!"
@@ -1254,7 +1365,7 @@
 msgstr "E187: m"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: "
+msgstr "E465: :winsize ɂ2̐l̈Kvł"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
@@ -1293,11 +1404,14 @@
 
 #. set mark
 msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: ͕Oi/ރNH[głȂ΂܂"
+msgstr "E191: 1̉pp ('  `) łȂ΂܂"
 
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192: :normal ̍ċAp[Ȃ߂܂"
 
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #<  +eval @\\Ɨpł܂"
+
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: '#'u镛t@C̖O܂"
 
@@ -1313,6 +1427,9 @@
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: \"<sfile>\"u :source Ώۃt@C܂"
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"usԍ܂"
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr ""
@@ -1426,7 +1543,7 @@
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607:  :finalyy ܂"
+msgstr "E607:  :finally ܂"
 
 msgid "E602: :endtry without :try"
 msgstr "E602: :try ̂Ȃ :endtry ł"
@@ -1437,6 +1554,9 @@
 msgid "E788: Not allowed to edit another buffer now"
 msgstr "E788: ݂͑̃obt@ҏW邱Ƃ͋܂"
 
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: ݂̓obt@ύX邱Ƃ͋܂"
+
 msgid "tagname"
 msgstr "^O"
 
@@ -1472,6 +1592,9 @@
 msgid "E199: Active window or buffer deleted"
 msgstr "E199: ANeBuȃEBhEobt@폜܂"
 
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: autocommandobt@obt@ύX܂"
+
 msgid "Illegal file name"
 msgstr "sȃt@C"
 
@@ -1530,9 +1653,6 @@
 msgid "[CR missing]"
 msgstr "[CR]"
 
-msgid "[NL found]"
-msgstr "[NLL]"
-
 msgid "[long lines split]"
 msgstr "[s]"
 
@@ -1542,6 +1662,9 @@
 msgid "[converted]"
 msgstr "[ϊ]"
 
+msgid "[blowfish]"
+msgstr "[blowfishÍ]"
+
 msgid "[crypted]"
 msgstr "[Í]"
 
@@ -1557,7 +1680,7 @@
 msgstr "[ǍG[]"
 
 msgid "Can't find temp file for conversion"
-msgstr "ϊɕKvȈꎞt@C݂܂"
+msgstr "ϊɕKvȈꎞt@C܂"
 
 msgid "Conversion with 'charconvert' failed"
 msgstr "'charconvert' ɂϊs܂"
@@ -1565,6 +1688,9 @@
 msgid "can't read output of 'charconvert'"
 msgstr "'charconvert' ̏o͂Ǎ߂܂ł"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: t@Cm̕@ňÍĂ܂"
+
 msgid "E676: No matching autocommands for acwrite buffer"
 msgstr "E676: acwriteobt@̊Yautocommand݂͑܂"
 
@@ -1610,7 +1736,7 @@
 msgstr "E460: \\[XtH[N邩܂ (! ǉŋ)"
 
 msgid "E214: Can't find temp file for writing"
-msgstr "E214: ۑpꎞt@C݂܂"
+msgstr "E214: ۑpꎞt@C܂"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
 msgstr "E213: ϊł܂ (! ǉŕϊɕۑ)"
@@ -1630,12 +1756,24 @@
 msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
 msgstr "E513: ݃G[, ϊs (㏑ɂ 'fenc' ɂĂ)"
 
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: ݃G[, ϊs, s %ld (㏑ɂ 'fenc' ɂĂ"
+")"
+
 msgid "E514: write error (file system full?)"
 msgstr "E514: ݃G[, (t@CVXet?)"
 
 msgid " CONVERSION ERROR"
 msgstr " ϊG["
 
+#, c-format
+msgid " in line %ld;"
+msgstr "s %ld;"
+
 msgid "[Device]"
 msgstr "[foCX]"
 
@@ -1702,6 +1840,11 @@
 msgstr "1 "
 
 #, c-format
+msgid "%lld characters"
+msgstr "%lld "
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "%ld "
 
@@ -1818,7 +1961,7 @@
 
 #, c-format
 msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <obt@=%d>: ȃobt@ԍł"
+msgstr "E680: <obt@=%d>: ȃobt@ԍł "
 
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217: SẴCxgɑ΂Ăautocommand͎sł܂"
@@ -1858,7 +2001,7 @@
 
 #, c-format
 msgid "+--%3ld lines folded "
-msgstr "+--%3ld s܏܂܂"
+msgstr "+--%3ld s܏܂܂ "
 
 msgid "E222: Add to read buffer"
 msgstr "E222: Ǎobt@֒ǉ"
@@ -1883,14 +2026,20 @@
 msgstr "E227: %s Ƃ}bsO͊ɑ݂܂"
 
 msgid "No abbreviation found"
-msgstr "Zk݂͂͂܂ł"
+msgstr "Zk͂͌܂ł"
 
 msgid "No mapping found"
-msgstr "}bsO݂͂܂ł"
+msgstr "}bsO͌܂ł"
 
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: sȃ[h"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: GUIp̃vZX̋NɎs܂"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: qvZXGUI̋NɎs܂"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: GUIJnł܂"
 
@@ -1915,7 +2064,7 @@
 msgstr "J[\\̈ʒuɃ}b`͂܂, Ă܂"
 
 msgid "<cannot open> "
-msgstr "<J܂>"
+msgstr "<J܂> "
 
 #, c-format
 msgid "E616: vim_SelFile: can't get font %s"
@@ -1945,9 +2094,6 @@
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: bZ[WƃR[obN̂ BalloonEval 쐬ł܂"
 
-msgid "Vim dialog..."
-msgstr "Vim _CAO..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -1990,12 +2136,15 @@
 msgid "Down"
 msgstr ""
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr ""
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "u"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "SĒu"
 
@@ -2014,12 +2163,6 @@
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "Vim: CEBhEsӂɔj󂳂܂\n"
 
-msgid "Font Selection"
-msgstr "tHgI"
-
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "̑Ï̂CUT_BUFFER0gp܂"
-
 msgid "&Filter"
 msgstr "tB^(&F)"
 
@@ -2057,23 +2200,8 @@
 msgstr "AhD(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: ZaptHg '%s' Ǎ߂܂"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: tHg %s gpł܂"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"qvZX֒~bZ[W𑗐Mł.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
-msgstr "E671: ^Cg \"%s\" ̃EBhE݂͂܂"
+msgstr "E671: ^Cg \"%s\" ̃EBhE͌܂"
 
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
@@ -2251,14 +2379,14 @@
 msgstr "E456: t@C \"%s\" J܂"
 
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: PostScript̃\\[Xt@C \"prolog.ps\" ݂܂"
+msgstr "E456: PostScript̃\\[Xt@C \"prolog.ps\" ܂"
 
 msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: PostScript̃\\[Xt@C \"cidfont.ps\" ݂܂"
+msgstr "E456: PostScript̃\\[Xt@C \"cidfont.ps\" ܂"
 
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: PostScript̃\\[Xt@C \"%s.ps\" ݂܂"
+msgstr "E456: PostScript̃\\[Xt@C \"%s.ps\" ܂"
 
 #, c-format
 msgid "E620: Unable to convert to print encoding \"%s\""
@@ -2302,7 +2430,7 @@
 msgstr "E562: gp@: cstag <ident>"
 
 msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: ^O݂܂"
+msgstr "E257: cstag: ^O܂"
 
 #, c-format
 msgid "E563: stat(%s) error: %d"
@@ -2348,19 +2476,40 @@
 msgstr "E567: cscopeڑɎs܂"
 
 #, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: cscopeNG[ %s of %s ɊY܂ł"
-
-#, c-format
 msgid "E469: invalid cscopequickfix flag %c for %c"
 msgstr "E469:  cscopequickfix tO %c  %c ł"
 
+#, c-format
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: cscopeNG[ %s of %s ɊY܂ł"
+
 msgid "cscope commands:\n"
 msgstr "cscopeR}h:\n"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (gp@: %s)"
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (gp@: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: ̊֐Ăł֐T\n"
+"       d: ̊֐Ăł֐T\n"
+"       e: egrepp^[T\n"
+"       f: ̃t@CT\n"
+"       g: ̒`T\n"
+"       i: ̃t@C#includeĂt@CT\n"
+"       s: CV{T\n"
+"       t: ̃eLXgT\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2372,12 +2521,9 @@
 msgid "E568: duplicate cscope database not added"
 msgstr "E568: dcscopef[^x[X͒ǉ܂ł"
 
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: cscopeڑ̍ő吔ɒB܂"
-
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: cscopeڑ %s ݂܂ł"
+msgstr "E261: cscopeڑ %s ܂ł"
 
 #, c-format
 msgid "cscope connection %s closed"
@@ -2414,12 +2560,16 @@
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    f[^x[X                      prepend pX\n"
 
+msgid "Lua library cannot be loaded."
+msgstr "LuaCu[hł܂."
+
+msgid "cannot save undo information"
+msgstr "AhD񂪕ۑł܂"
+
 msgid ""
-"???: Sorry, this command is disabled, the MzScheme library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
-msgstr ""
-"???: ̃R}h͖ł, ߂Ȃ: MzScheme Cu[hł"
-"ł."
+msgstr "E815: ̃R}h͖ł. MzScheme Cu[hł܂."
 
 msgid "invalid expression"
 msgstr "Ȏł"
@@ -2439,9 +2589,6 @@
 msgid "couldn't open buffer"
 msgstr "obt@J܂"
 
-msgid "cannot save undo information"
-msgstr "AhD񂪕ۑł܂"
-
 msgid "cannot delete line"
 msgstr "s܂"
 
@@ -2454,6 +2601,9 @@
 msgid "string cannot contain newlines"
 msgstr "ɂ͉s܂߂܂"
 
+msgid "error converting Scheme values to Vim"
+msgstr "SchemelVimւ̕ϊG["
+
 msgid "Vim error: ~a"
 msgstr "Vim G[: ~a"
 
@@ -2472,6 +2622,25 @@
 msgid "not allowed in the Vim sandbox"
 msgstr "Th{bNXł͋܂"
 
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: Cu %s [hł܂ł"
+
+msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+msgstr ""
+"̃R}h͖ł, ߂Ȃ: PerlCu[hł܂ł."
+
+msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+msgstr ""
+"E299: Th{bNXł Safe W[gpȂPerlXNvg͋ւ"
+"Ă܂"
+
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Vimł :py3 g :python g܂"
+
+msgid "only string keys are allowed"
+msgstr "̃L[݂̂Ă܂"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2483,60 +2652,29 @@
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Python ċAIɎs邱Ƃ͂ł܂"
 
-msgid "can't delete OutputObject attributes"
-msgstr "OutputObject܂"
-
-msgid "softspace must be an integer"
-msgstr "softspace  integer łȂ΂Ȃ܂"
-
-msgid "invalid attribute"
-msgstr "ȑł"
-
-msgid "writelines() requires list of strings"
-msgstr "writelines() ɂ͕̃XgKvł"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: I/OIuWFNg̏ɃG[ł"
-
-msgid "attempt to refer to deleted buffer"
-msgstr "ꂽobt@QƂ܂"
-
-msgid "line number out of range"
-msgstr "͈͊O̍sԍł"
-
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<obt@IuWFNg (ς) %8lX>"
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: ]͗LpythonIuWFNgԂ܂ł"
 
-msgid "invalid mark name"
-msgstr "ȃ}[Nł"
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: ԂꂽpythonIuWFNgvim̒lɕϊł܂ł"
 
-msgid "no such buffer"
-msgstr "̂悤ȃobt@͂܂"
+msgid "failed to run the code"
+msgstr "R[h̎sɎs܂"
 
-msgid "attempt to refer to deleted window"
-msgstr "ꂽEBhEQƂ܂"
+msgid "E863: return value must be an instance of str"
+msgstr "E863: ߂l͕̃CX^XłȂ΂Ȃ܂"
 
-msgid "readonly attribute"
-msgstr "Ǎp"
-
-msgid "cursor position outside buffer"
-msgstr "J[\\obt@̊Oɂ܂"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Vimł :python g :py3 g܂"
 
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<EBhEIuWFNg () %.8lX>"
-
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<EBhEIuWFNg (m) %.8lX>"
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: ]͗Lpython 3IuWFNgԂ܂ł"
 
-#, c-format
-msgid "<window %d>"
-msgstr "<EBhE %d>"
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr "E861: Ԃꂽpython 3IuWFNgvim̒lɕϊł܂ł"
 
-msgid "no such window"
-msgstr "̂悤ȃEBhE͂܂"
+msgid "index must be int or slice"
+msgstr "CfbNX͐XCXłȂ΂Ȃ܂"
 
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ ͕̃CX^XłȂ΂Ȃ܂"
@@ -2594,7 +2732,7 @@
 msgstr "̃\\[X\\"
 
 msgid "Find symbol"
-msgstr "݂V{"
+msgstr "V{"
 
 msgid "Browse class"
 msgstr "NXQ"
@@ -2668,6 +2806,9 @@
 msgid "cannot set line(s)"
 msgstr "sݒł܂"
 
+msgid "invalid mark name"
+msgstr "ȃ}[Nł"
+
 msgid "mark not set"
 msgstr "}[N͐ݒ肳Ă܂"
 
@@ -2678,8 +2819,11 @@
 msgid "cannot insert/append line"
 msgstr "s̑}/ǉł܂"
 
+msgid "line number out of range"
+msgstr "͈͊O̍sԍł"
+
 msgid "unknown flag: "
-msgstr "m̃tO:"
+msgstr "m̃tO: "
 
 msgid "unknown vimOption"
 msgstr "m vimOption ł"
@@ -2709,7 +2853,7 @@
 
 msgid "cannot register callback command: buffer/window reference not found"
 msgstr ""
-"R[obNR}ho^ł܂: obt@/EBhE̎QƂ݂܂"
+"R[obNR}ho^ł܂: obt@/EBhE̎QƂ܂"
 ""
 
 msgid ""
@@ -2718,12 +2862,6 @@
 "E571: ̃R}h͖ł,߂Ȃ: TclCu[hł܂"
 "."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: TCL G[: IR[hlł͂܂!? vim-dev@vim.org ɕ񍐂"
-"Ă"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: IR[h %d"
@@ -2766,9 +2904,15 @@
 msgid "%d files to edit\n"
 msgstr "%d ̃t@CҏWTĂ܂\n"
 
+msgid "netbeans is not supported with this GUI\n"
+msgstr "netbeans ͂GUIł͗pł܂\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "Vimɂdiff@\\܂(RpCݒ)."
 
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "'-nb' gps\\ł: RpCɖɂĂ܂\n"
+
 msgid "Attempt to open script file again: \""
 msgstr "XNvgt@CĂъJĂ݂܂: \""
 
@@ -2824,7 +2968,7 @@
 "gp@:"
 
 msgid " vim [arguments] "
-msgstr " vim []"
+msgstr " vim [] "
 
 msgid ""
 "\n"
@@ -2873,6 +3017,9 @@
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tEx[h (\"ex\" Ɠ)"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tEx[h"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tTCg(ob`)[h (\"ex\" p)"
 
@@ -2997,7 +3144,7 @@
 msgstr "--remote <files>\t\\ȂVimT[o <files> ҏW"
 
 msgid "--remote-silent <files>  Same, don't complain if there is no server"
-msgstr "--remote-silnet <files>  , T[oĂxo͂Ȃ"
+msgstr "--remote-silent <files>  , T[oĂxo͂Ȃ"
 
 msgid ""
 "--remote-wait <files>  As --remote but wait for files to have been edited"
@@ -3023,7 +3170,10 @@
 msgstr "--serverlist\t\tVimT[öꗗ\\ďI"
 
 msgid "--servername <name>\tSend to/become the Vim server <name>"
-msgstr "--servename <name>\t\tVimT[o <name> ɑM/Oݒ肷"
+msgstr "--servername <name>\tVimT[o <name> ɑM/Oݒ肷"
+
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <file>\tNɂԂ̏ڍׂ <file> ֏o͂"
 
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\t.viminfȏ <viminfo> g"
@@ -3061,12 +3211,6 @@
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\tŏԂvimN"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <name>\t\tvim̖ <name> łƂă\\[Xg"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (ĂȂ)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <color>\twiF <color> g(`: -bg)"
 
@@ -3106,19 +3250,6 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"gvimɂĉ߂(RISC OSo[W):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <number>\t̃EBhẼRPʂ̕"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <number>\t̃EBhE̍sPʂ̍"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3133,6 +3264,9 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tقȂGTK widgetVimJ"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tEBhEIDWo͂ɏo͂"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <ẽ^Cg>\tVimeAvP[V̒ŋN"
 
@@ -3191,7 +3325,6 @@
 "\n"
 "ύX   s      eLXg"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3200,7 +3333,6 @@
 "# t@C}[N:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3208,7 +3340,6 @@
 "\n"
 "# WvXg (V̂):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3217,7 +3348,7 @@
 "# t@C}[N̗ (V̂Â):\n"
 
 msgid "Missing '>'"
-msgstr "'>' ݂܂"
+msgstr "'>' ܂"
 
 msgid "E543: Not a valid codepage"
 msgstr "E543: ȃR[hy[Wł"
@@ -3240,15 +3371,6 @@
 msgid "E289: input method doesn't support my preedit type"
 msgstr "E289: Cvbg\\bh my preedit type T|[g܂"
 
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: over-the-spot X^CɂfontsetKvł"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr "E291: GTK+1.2.3Â̂ŃXe[^XGAł"
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Cvbg\\bhT[o 삵Ă܂"
-
 msgid "E293: block was not locked"
 msgstr "E293: ubNbNĂ܂"
 
@@ -3276,6 +3398,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: ubN 2 擾ł܂?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Xbvt@C̈ÍXVɃG[܂"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: , Xbvt@C܂!!!"
@@ -3292,7 +3417,7 @@
 
 #, c-format
 msgid "E305: No swap file found for %s"
-msgstr "E305: %s ɂ̓Xbvt@C݂܂"
+msgstr "E305: %s ɂ̓Xbvt@C܂"
 
 msgid "Enter number of swap file to use (0 to quit): "
 msgstr "gpXbvt@C̔ԍ͂Ă(0 ŏI): "
@@ -3334,6 +3459,12 @@
 ",\n"
 "̓t@CĂ܂."
 
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %s ͂̃o[WVimŃT|[gĂȂ`ňÍĂ܂"
+
 msgid " has been damaged (page size is smaller than minimum value).\n"
 msgstr " ͑Ă܂ (y[WTCYŏlĂ܂).\n"
 
@@ -3349,6 +3480,38 @@
 msgstr "E308: x: {t@CύXĂ܂"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "Xbvt@C͈ÍĂ܂: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"VÍL[͂ƂɃeLXgt@CۑĂȂꍇ,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"VÍL[͂Ă."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"ÍL[ςƂɃeLXgt@Cۑꍇ, eLXgt@C"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"Xbvt@CɓÍL[g߂enterĂ."
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: %s ubN 1 Ǎ߂܂"
 
@@ -3372,10 +3535,10 @@
 msgstr "???ubN܂"
 
 msgid "??? from here until ???END lines may be messed up"
-msgstr "??? ???END܂ł̍sj󂳂Ă悤ł"
+msgstr "???  ???END ܂ł̍sj󂳂Ă悤ł"
 
 msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? ??END܂ł̍s}폜ꂽ悤ł"
+msgstr "???  ???END ܂ł̍s}폜ꂽ悤ł"
 
 msgid "???END"
 msgstr "???END"
@@ -3401,16 +3564,24 @@
 "\n"
 "(ύX`FbN邽߂, ̃t@Cʂ̖Oŕۑ\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "{t@CƂ diff sƗǂł傤)\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "{t@CƂ diff sƗǂł傤)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr ". obt@̓e̓t@CƓɂȂ܂."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
+"\n"
 "ꂩ.swpt@C폜Ă\n"
 "\n"
 
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "Xbvt@C擾ÍL[eLXgt@CɎg܂.\n"
+
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
 msgstr "Xbvt@C܂:"
@@ -3520,7 +3691,7 @@
 
 #, c-format
 msgid "E316: ml_get: cannot find line %ld"
-msgstr "E316: ml_get: s %ld ݂܂"
+msgstr "E316: ml_get: s %ld ܂"
 
 msgid "E317: pointer block id wrong 3"
 msgstr "E317: |C^ubNIDԈĂ܂ 3"
@@ -3539,7 +3710,7 @@
 
 #, c-format
 msgid "E320: Cannot find line %ld"
-msgstr "E320: s %ld ݂܂"
+msgstr "E320: s %ld ܂"
 
 msgid "E317: pointer block id wrong"
 msgstr "E317: |C^ubNIDԈĂ܂"
@@ -3585,24 +3756,20 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
 "(1) ʂ̃vOt@CҏWĂ邩܂.\n"
 "    ̏ꍇɂ, ύXۂɍŏII, t@C̈قȂ\n"
-"    2̃CX^XłĂ܂ƂɒӂĂ.\n"
+"    2̃CX^XłĂ܂ƂɒӂĂ."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    I邩, ӂȂ瑱܂.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  I邩, ӂȂ瑱Ă.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) ̃t@C̕ҏWZbVNbV.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) ̃t@C̕ҏWZbVNbV.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    ̏ꍇɂ \":recover\"  \"vim -r "
@@ -3612,7 +3779,7 @@
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    gpĕύXJo[܂(\":help recover\" Q).\n"
+"    gpĕύXJo[܂(\":help recovery\" Q).\n"
 
 msgid "    If you did this already, delete the swap file \""
 msgstr "    ɂsȂ̂Ȃ, Xbvt@C \""
@@ -3645,7 +3812,7 @@
 msgstr ""
 "ǍpŊJ(&O)\n"
 "ƂɂҏW(&E)\n"
-"(&R)ecover\n"
+"(&R)\n"
 "I(&Q)\n"
 "~(&A)"
 
@@ -3659,7 +3826,7 @@
 msgstr ""
 "ǍpŊJ(&O)\n"
 "ƂɂҏW(&E)\n"
-"(&R)ecover\n"
+"(&R)\n"
 "폜(&D)\n"
 "I(&Q)\n"
 "~(&A)"
@@ -3707,7 +3874,7 @@
 
 #, c-format
 msgid "E334: Menu not found: %s"
-msgstr "E334: j[݂܂: %s"
+msgstr "E334: j[܂: %s"
 
 #, c-format
 msgid "E335: Menu not defined for %s mode"
@@ -3717,7 +3884,7 @@
 msgstr "E336: j[pX̓Tuj[𐶂Ȃ΂܂"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: j[݂܂ - j[mFĂ"
+msgstr "E337: j[܂ - j[mFĂ"
 
 #, c-format
 msgid "Error detected while processing %s:"
@@ -3748,7 +3915,7 @@
 msgstr "-- p --"
 
 msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: /y[W/s , b/uk: , q: I "
+msgstr " SPACE/d/j: /y[W/s , b/u/k: , q: I "
 
 msgid "Question"
 msgstr ""
@@ -3789,17 +3956,21 @@
 msgid "E766: Insufficient arguments for printf()"
 msgstr "E766: printf() ̈s\\ł"
 
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: printf() ̈ɂ͕_҂Ă܂"
+
 msgid "E767: Too many arguments to printf()"
-msgstr "E767: pirntf() ̈߂܂"
+msgstr "E767: printf() ̈߂܂"
 
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: x: Ǎpt@CύX܂"
 
-msgid "Type number or click with mouse (<Enter> cancels): "
-msgstr "l͂邩}EXNbNĂ (<Enter> ŃLZ): "
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr ""
+"ԍ<Enter>͂邩}EXŃNbNĂ (ŃLZ): "
 
-msgid "Choice number (<Enter> cancels): "
-msgstr "ԍIĂ (<Enter> ŃLZ): "
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "ԍ<Enter>͂Ă (ŃLZ): "
 
 msgid "1 more line"
 msgstr "1 s ǉ܂"
@@ -3828,7 +3999,6 @@
 msgid "Vim: Finished.\n"
 msgstr "Vim: I܂.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "G[: "
 
@@ -3887,6 +4057,9 @@
 msgid "Keys don't match!"
 msgstr "L[v܂"
 
+msgid "E854: path too long for completion"
+msgstr "E854: pX߂ĕ⊮ł܂"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -3911,7 +4084,6 @@
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: pXɂ͂ȏ \"%s\" Ƃt@C܂"
 
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
 msgstr "Netbeans #2 ɐڑł܂"
 
@@ -3930,8 +4102,18 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: obt@ %ld  NetBeans ڑ܂"
 
-msgid "E505: "
-msgstr "E505: "
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans͂GUIɂ͑ΉĂ܂"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: NetBeans͊ɐڑĂ܂"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s ͓Ǎpł (ɂ ! ǉ)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: J[\\̈ʒuɂ͎ʎq܂"
 
 msgid "E774: 'operatorfunc' is empty"
 msgstr "E774: 'operatorfunc' IvVł"
@@ -3945,9 +4127,6 @@
 msgid "E348: No string under cursor"
 msgstr "E348: J[\\̈ʒuɂ͕񂪂܂"
 
-msgid "E349: No identifier under cursor"
-msgstr "E349: J[\\̈ʒuɂ͎ʎq܂"
-
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr "E352: ݂ 'foldmethod' ł͐܏݂ł܂"
 
@@ -3984,11 +4163,11 @@
 msgstr "%ld sCfg܂... "
 
 msgid "1 line indented "
-msgstr "1 sCfg܂"
+msgstr "1 sCfg܂ "
 
 #, c-format
 msgid "%ld lines indented "
-msgstr "%ld sCfg܂"
+msgstr "%ld sCfg܂ "
 
 msgid "E748: No previously used register"
 msgstr "E748: ܂WX^gpĂ܂"
@@ -4006,7 +4185,7 @@
 
 #, c-format
 msgid "freeing %ld lines"
-msgstr "%ld sJ"
+msgstr "%ld s"
 
 msgid "block of 1 line yanked"
 msgstr "1 s̃ubNN܂"
@@ -4037,7 +4216,6 @@
 msgid "Illegal register name"
 msgstr "sȃWX^"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -4055,7 +4233,7 @@
 
 #, c-format
 msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
-msgstr "I %s%ld / %ld s; %ld / %ld P; %ld / %ld "
+msgstr "I %s%ld / %ld s; %ld / %ld P; %ld / %ld oCg"
 
 #, c-format
 msgid ""
@@ -4065,7 +4243,7 @@
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr " %s / %s; s %ld of %ld; P %ld / %ld;  %ld / %ld"
+msgstr " %s / %s; s %ld of %ld; P %ld / %ld; oCg %ld / %ld"
 
 #, c-format
 msgid ""
@@ -4093,11 +4271,14 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: modeline ł͋܂"
 
+msgid "E846: Key code not set"
+msgstr "E846: L[R[hݒ肳Ă܂"
+
 msgid "E521: Number required after ="
 msgstr "E521: = ̌ɂ͐Kvł"
 
 msgid "E522: Not found in termcap"
-msgstr "E522: termcap ɂ݂܂"
+msgstr "E522: termcap Ɍ܂"
 
 #, c-format
 msgid "E539: Illegal character <%s>"
@@ -4115,6 +4296,12 @@
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: 'backupext'  'patchmode' ł"
 
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars'̒lɖ܂"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars'̒lɖ܂"
+
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: GTK+2 GUIł͕ύXł܂"
 
@@ -4321,9 +4508,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: '%c' ͕sȕł (tHg \"%s\")"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366:  'osfiletype' IvV - \"Text\" g܂"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: 2d̃VOî, I܂\n"
 
@@ -4468,7 +4652,7 @@
 "External commands will not pause after completion.\n"
 "See  :help win32-vimrun  for more information."
 msgstr ""
-"VIMRUN.EXE $PATH ̒ɂ݂܂.\n"
+"VIMRUN.EXE $PATH ̒Ɍ܂.\n"
 "OR}h̏IɈꎞ~܂.\n"
 "ڍׂ  :help win32-vimrun  QƂĂ."
 
@@ -4527,6 +4711,9 @@
 msgid "E382: Cannot write, 'buftype' option is set"
 msgstr "E382: 'buftype' IvVݒ肳Ă̂ŏ݂܂"
 
+msgid "Error file"
+msgstr "G[t@C"
+
 msgid "E683: File name missing or invalid pattern"
 msgstr "E683: t@Cȃp^[ł"
 
@@ -4700,11 +4887,11 @@
 
 #, c-format
 msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: ܂ŌǊYӏ͂܂: %s"
+msgstr "E384: ܂Ō܂Yӏ͂܂: %s"
 
 #, c-format
 msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: ܂ŌǊYӏ͂܂: %s"
+msgstr "E385: ܂Ō܂Yӏ͂܂: %s"
 
 msgid "E386: Expected '?' or '/'  after ';'"
 msgstr "E386: ';' ̂Ƃɂ '?'  '/' ҂Ă"
@@ -4714,10 +4901,10 @@
 
 #. cursor at status line
 msgid "--- Included files "
-msgstr "--- CN[hꂽt@C"
+msgstr "--- CN[hꂽt@C "
 
 msgid "not found "
-msgstr "݂܂ "
+msgstr "܂ "
 
 msgid "in path ---\n"
 msgstr "pX ----\n"
@@ -4726,7 +4913,7 @@
 msgstr "  (ɗ)"
 
 msgid "  NOT FOUND"
-msgstr "  ݂܂"
+msgstr "  ܂"
 
 #, c-format
 msgid "Scanning included file: %s"
@@ -4740,16 +4927,19 @@
 msgstr "E387: ݍsɊY܂"
 
 msgid "All included files were found"
-msgstr "SẴCN[hꂽt@C݂܂"
+msgstr "SẴCN[hꂽt@C܂"
 
 msgid "No included files"
 msgstr "CN[ht@C͂܂"
 
 msgid "E388: Couldn't find definition"
-msgstr "E388: `݂܂"
+msgstr "E388: `܂"
 
 msgid "E389: Couldn't find pattern"
-msgstr "E389: p^[݂܂"
+msgstr "E389: p^[܂"
+
+msgid "Substitute "
+msgstr "Substitute "
 
 #, c-format
 msgid ""
@@ -4789,6 +4979,11 @@
 msgstr "E756: Xy`FbN͖Ă܂"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"x: PꃊXg \"%s_%s.spl\"  \"%s_ascii.spl\" ͌܂"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
 "x: PꃊXg \"%s.%s.spl\"  \"%s.ascii.spl\" ͌܂"
@@ -4854,6 +5049,10 @@
 "Ƃ܂"
 
 #, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "COMPOUNDRULES ̒lɌ肪܂. t@C %s  %d s: %s"
+
+#, c-format
 msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
 msgstr "%s  %d sڂ COMPOUNDWORDMAX ̒lɌ肪܂: %s"
 
@@ -4918,13 +5117,13 @@
 msgstr "SYLLABLE w肳Ȃ COMPOUNDSYLMAX"
 
 msgid "Too many postponed prefixes"
-msgstr "xuq܂"
+msgstr "xuq߂܂"
 
 msgid "Too many compound flags"
 msgstr "tO߂܂"
 
 msgid "Too many postponed prefixes and/or compound flags"
-msgstr "xuq / tO܂"
+msgstr "xuq / tO߂܂"
 
 #, c-format
 msgid "Missing SOFO%s line in %s"
@@ -4960,7 +5159,7 @@
 
 #, c-format
 msgid "Duplicate word in %s line %d: %s"
-msgstr "%s  %d sڂ dPꂪ݂܂: %s"
+msgstr "%s  %d sڂ dPꂪ܂: %s"
 
 #, c-format
 msgid "First duplicate word in %s line %d: %s"
@@ -4992,7 +5191,7 @@
 
 #, c-format
 msgid "Too many regions in %s line %d: %s"
-msgstr "%s  %d s, ͈͎w肪܂: %s"
+msgstr "%s  %d s, ͈͎w肪߂܂: %s"
 
 #, c-format
 msgid "/ line ignored in %s line %d: %s"
@@ -5010,6 +5209,9 @@
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "ASCII܂ %d ̒P𖳎܂"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Ȃ̂ŁAPꃊXg͕sSł"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "m[h %d (S %d ) k܂; c %d (%d%%)"
@@ -5097,7 +5299,7 @@
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E753: ݂܂: %s"
+msgstr "E753: ܂: %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
@@ -5173,10 +5375,10 @@
 msgstr "E392: ̂悤ȍ\\NX^͂܂: %s"
 
 msgid "minimal "
-msgstr "minimal"
+msgstr "minimal "
 
 msgid "maximal "
-msgstr "maximal"
+msgstr "maximal "
 
 msgid "; match "
 msgstr "; Y "
@@ -5187,19 +5389,22 @@
 msgid "E395: contains argument not accepted here"
 msgstr "E395: ̏ꏊł͈contains͋Ă܂"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: ̏ꏊł͈containedin͋Ă܂"
+msgid "E844: invalid cchar value"
+msgstr "E844: cchar̒lł"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: ł̓O[v͋܂"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
-msgstr "E394: %s ͈̔͗vf݂܂"
+msgstr "E394: %s ͈̔͗vf܂"
 
 msgid "E397: Filename required"
 msgstr "E397: t@CKvł"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: \\̎荞(include)߂܂"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: ']' ܂: %s"
@@ -5212,12 +5417,15 @@
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: ܂: \\͈ %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: \\NX^߂܂"
+
 msgid "E400: No cluster specified"
 msgstr "E400: NX^w肳Ă܂"
 
 #, c-format
 msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: p^[؂肪݂܂: %s"
+msgstr "E401: p^[؂肪܂: %s"
 
 #, c-format
 msgid "E402: Garbage after pattern: %s"
@@ -5232,7 +5440,7 @@
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
-msgstr "E405:  sign ܂: %s"
+msgstr "E405: ܂: %s"
 
 #, c-format
 msgid "E406: Empty argument: %s"
@@ -5259,7 +5467,7 @@
 
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: nCCgO[v݂܂: %s"
+msgstr "E411: nCCgO[v܂: %s"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
@@ -5274,11 +5482,11 @@
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: \\ʓ sign ł: %s"
+msgstr "E415: \\ʓł: %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416:  sign ܂: %s"
+msgstr "E416: ܂: %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
@@ -5315,6 +5523,9 @@
 msgid "W18: Invalid character in group name"
 msgstr "W18: O[vɕsȕ܂"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: nCCgƍ\\O[v߂܂"
+
 msgid "E555: at bottom of tag stack"
 msgstr "E555: ^OX^bN̖ł"
 
@@ -5326,7 +5537,7 @@
 
 #, c-format
 msgid "E426: tag not found: %s"
-msgstr "E426: ^O݂܂: %s"
+msgstr "E426: ^O܂: %s"
 
 msgid "  # pri kind tag"
 msgstr "  # pri kind tag"
@@ -5375,6 +5586,9 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: ^Ot@C̃pX %s ɐ؂̂Ă܂\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "^Ot@C̒s𖳎܂"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: ^Ot@C \"%s\" ̃tH[}bgɃG[܂"
@@ -5392,10 +5606,14 @@
 msgstr "E433: ^Ot@C܂"
 
 msgid "E434: Can't find tag pattern"
-msgstr "E434: ^Op^[݂܂"
+msgstr "E434: ^Op^[܂"
 
 msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: ^O݂Ȃ̂ŒPɐ܂!"
+msgstr "E435: ^OȂ̂ŒPɐ܂!"
+
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "dtB[h: %s"
 
 msgid "' not known. Available builtin terminals are:"
 msgstr "' ͖mł. s̑gݍݒ[͎̂Ƃł:"
@@ -5407,10 +5625,10 @@
 msgstr "E557: termcapt@CJ܂"
 
 msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: terminfoɒ[Gg݂܂"
+msgstr "E558: terminfoɒ[Gg܂"
 
 msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: termcapɒ[Gg݂܂"
+msgstr "E559: termcapɒ[Gg܂"
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
@@ -5433,10 +5651,87 @@
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim: ͂Ǎݒ̃G[ɂI܂...\n"
 
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "̑Ï̂CUT_BUFFER0gp܂"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: \\sJEgς܂"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "\\ȃAhD͂܂: Ƃ肠܂"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: ݗpɃAhDt@CJ܂: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: AhDt@CĂ܂ (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'̃fBNgɃAhDt@C߂܂"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "AhDt@CƂēǂݍ߂Ȃ̂ŏ㏑܂: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "AhDt@Cł͂Ȃ̂ŏ㏑܂: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "ΏۂȂ̂ŃAhDt@C݂̏XLbv܂"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "AhDt@Cݒ: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: AhDt@C̏݃G[ł: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "I[i[قȂ̂ŃAhDt@Cǂݍ݂܂: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "AhDt@CǍ: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: AhDt@CǍpƂĊJ܂: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: AhDt@Cł͂܂: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: Ít@CÍꂽAhDt@CgĂ܂: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: ÍꂽAhDt@C̉ǂɎs܂: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: AhDt@CÍĂ܂: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: ̖݊AhDt@Cł: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "t@C̓eςĂ邽߁AAhD𗘗pł܂"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "AhDt@C %s ̎捞"
+
 msgid "Already at oldest change"
 msgstr "ɈԌÂύXł"
 
@@ -5444,8 +5739,8 @@
 msgstr "ɈԐVύXł"
 
 #, c-format
-msgid "Undo number %ld not found"
-msgstr "AhDԍ %ld ݂܂"
+msgid "E830: Undo number %ld not found"
+msgstr "E830: AhDԍ %ld ͌܂"
 
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: sԍԈĂ܂"
@@ -5481,8 +5776,8 @@
 msgid "Nothing to undo"
 msgstr "AhDΏۂ܂"
 
-msgid "number changes  time"
-msgstr "ԍ   ύX     "
+msgid "number changes  when               saved"
+msgstr "ʔ   ύX   ύX           ۑ"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5527,6 +5822,13 @@
 
 msgid ""
 "\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 64 rbg R\\[ "
+
+msgid ""
+"\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
@@ -5576,10 +5878,10 @@
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"RISC OS "
+"OpenVMS "
 
 msgid ""
 "\n"
@@ -5588,6 +5890,13 @@
 "\n"
 "Kpσpb`: "
 
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"ǉgpb`: "
+
 msgid "Modified by "
 msgstr "Modified by "
 
@@ -5642,15 +5951,9 @@
 msgid "with GTK2-GNOME GUI."
 msgstr "with GTK2-GNOME GUI."
 
-msgid "with GTK-GNOME GUI."
-msgstr "with GTK-GNOME GUI."
-
 msgid "with GTK2 GUI."
 msgstr "with GTK2 GUI."
 
-msgid "with GTK GUI."
-msgstr "with GTK GUI."
-
 msgid "with X11-Motif GUI."
 msgstr "with X11-Motif GUI."
 
@@ -5772,7 +6075,7 @@
 msgstr "[hŎs, ^Cv}܂"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "j[ ҏWS̐ݒ聨}(S)[hؑ"
+msgstr "j[ ҏWS̐ݒ聨}(S)[hؑ "
 
 msgid "                              for two modes      "
 msgstr "                              Ń[hL       "
@@ -5819,6 +6122,12 @@
 msgid "E444: Cannot close last window"
 msgstr "E444: Ō̃EBhE邱Ƃ͂ł܂"
 
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: autocmdEBhE͕܂"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: autocmdEBhEcȂ߁AEBhE͕܂"
+
 msgid "E445: Other window contains changes"
 msgstr "E445: ̃EBhEɂ͕ύX܂"
 
@@ -5829,19 +6138,6 @@
 msgid "E447: Can't find file \"%s\" in path"
 msgstr "E447: pathɂ \"%s\" Ƃt@C܂"
 
-#, c-format
-msgid "E370: Could not load library %s"
-msgstr "E370: Cu %s [hł܂ł"
-
-msgid "Sorry, this command is disabled: the Perl library could not be loaded."
-msgstr ""
-"̃R}h͖ł, ߂Ȃ: PerlCu[hł܂ł."
-
-msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-msgstr ""
-"E299: Th{bNXł Safe W[gpȂPerlXNvg͋ւ"
-"Ă܂"
-
 msgid "Edit with &multiple Vims"
 msgstr "VimŕҏW (&M)"
 
@@ -5849,27 +6145,26 @@
 msgstr "1VimŕҏW (&V)"
 
 msgid "Diff with Vim"
-msgstr "Vimō"
+msgstr "Vimō\\"
 
 msgid "Edit with &Vim"
 msgstr "VimŕҏW (&V)"
 
 #. Now concatenate
 msgid "Edit with existing Vim - "
-msgstr "VimŕҏW - "
+msgstr "NςVimŕҏW - "
 
 msgid "Edits the selected file(s) with Vim"
-msgstr "Iꂽt@CVimŕҏW"
+msgstr "It@CVimŕҏW"
 
 msgid "Error creating process: Check if gvim is in your path!"
-msgstr ""
-"NɎs܂: gvim ւ̃pXݒ肳Ă邩mFĂ!"
+msgstr "vZX̍쐬Ɏs: gvimϐPATHɂ邩mFĂ!"
 
 msgid "gvimext.dll error"
 msgstr "gvimext.dll G["
 
 msgid "Path length too long!"
-msgstr "pX߂܂!"
+msgstr "pX܂!"
 
 msgid "--No lines in buffer--"
 msgstr "--obt@ɍs܂--"
@@ -6037,7 +6332,7 @@
 msgstr "E481: ͈͎w͋Ă܂"
 
 msgid "E36: Not enough room"
-msgstr "E36: [ȗeʂ܂"
+msgstr "E36: EBhEɏ\\ȍ͕܂"
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
@@ -6078,11 +6373,11 @@
 msgstr "E41: sʂĂ܂!"
 
 msgid "Pattern not found"
-msgstr "p^[݂͂܂ł"
+msgstr "p^[͌܂ł"
 
 #, c-format
 msgid "E486: Pattern not found: %s"
-msgstr "E486: p^[݂͂܂ł: %s"
+msgstr "E486: p^[͌܂ł: %s"
 
 msgid "E487: Argument must be positive"
 msgstr "E487: ͐̒lłȂ΂Ȃ܂"
@@ -6205,8 +6500,184 @@
 msgid "E764: Option '%s' is not set"
 msgstr "E764: IvV '%s' ͐ݒ肳Ă܂"
 
+msgid "E850: Invalid register name"
+msgstr "E850: ȃWX^ł"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "܂Ō̂ŉɖ߂܂"
 
 msgid "search hit BOTTOM, continuing at TOP"
 msgstr "܂Ō̂ŏɖ߂܂"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "ÍL[Kvł: \"%s\""
+
+msgid "can't delete OutputObject attributes"
+msgstr "OutputObject܂"
+
+msgid "softspace must be an integer"
+msgstr "softspace  integer łȂ΂Ȃ܂"
+
+msgid "invalid attribute"
+msgstr "ȑł"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines() ɂ͕̃XgKvł"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: I/OIuWFNg̏G["
+
+msgid "empty keys are not allowed"
+msgstr "̃L[͋Ă܂"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "DictionaryObject܂"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Œ肳ꂽ͕ύXł܂"
+
+msgid "Cannot set this attribute"
+msgstr "̑͐ݒł܂"
+
+msgid "dict is locked"
+msgstr "̓bNĂ܂"
+
+msgid "failed to add key to dictionary"
+msgstr "ւ̃L[̒ǉɎs܂"
+
+msgid "list index out of range"
+msgstr "Xg͈͊ÕCfbNXł"
+
+msgid "internal error: failed to get vim list item"
+msgstr "G[: vim̃Xgvf̎擾Ɏs܂"
+
+msgid "list is locked"
+msgstr "Xg̓bNĂ܂"
+
+msgid "Failed to add item to list"
+msgstr "Xgւ̗vfǉɎs܂"
+
+msgid "internal error: no vim list item"
+msgstr "G[: vim̃Xgvf܂"
+
+msgid "can only assign lists to slice"
+msgstr "XCXɂ̓Xgł܂"
+
+msgid "internal error: failed to add item to list"
+msgstr "G[: Xgւ̗vfǉɎs܂"
+
+msgid "can only concatenate with lists"
+msgstr "XgƂ̂ݐڑł܂"
+
+msgid "cannot delete vim.dictionary attributes"
+msgstr "vim.dictionary͏܂"
+
+msgid "cannot modify fixed list"
+msgstr "Œ肳ꂽXg͕ύXł܂"
+
+msgid "cannot set this attribute"
+msgstr "̑͐ݒł܂"
+
+msgid "'self' argument must be a dictionary"
+msgstr "'self' ͎^̒lłȂ΂Ȃ܂"
+
+msgid "failed to run function"
+msgstr "֐̎sɎs܂"
+
+msgid "unable to get option value"
+msgstr "IvV̒l͎擾ł܂"
+
+msgid "unable to unset global option"
+msgstr "O[oIvV̐ݒ͂ł܂"
+
+msgid "unable to unset option without global value"
+msgstr "O[oϐg킸ɃIvV̐ݒ͂ł܂"
+
+msgid "object must be integer"
+msgstr "IuWFNg͐łȂ΂Ȃ܂"
+
+msgid "object must be string"
+msgstr "IuWFNg͕łȂ΂Ȃ܂"
+
+msgid "attempt to refer to deleted tab page"
+msgstr "폜ꂽ^uQƂ悤Ƃ܂"
+
+#, c-format
+msgid "<tabpage object (deleted) at %p>"
+msgstr "<^uy[WIuWFNg (ς) %p>"
+
+#, c-format
+msgid "<tabpage object (unknown) at %p>"
+msgstr "<^uy[WIuWFNg (s) %p>"
+
+#, c-format
+msgid "<tabpage %d>"
+msgstr "<^uy[W %d>"
+
+msgid "no such tab page"
+msgstr "̂悤ȃ^uy[W͂܂"
+
+msgid "attempt to refer to deleted window"
+msgstr "폜ꂽEBhEQƂ悤Ƃ܂"
+
+msgid "readonly attribute"
+msgstr "Ǎp"
+
+msgid "cursor position outside buffer"
+msgstr "J[\\ʒuobt@̊Oł"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<EBhEIuWFNg (ς) %p>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<EBhEIuWFNg (s) %p>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<EBhE %d>"
+
+msgid "no such window"
+msgstr "̂悤ȃEBhE͂܂"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "폜ꂽobt@QƂ悤Ƃ܂"
+
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<obt@IuWFNg (ς) %p>"
+
+msgid "key must be integer"
+msgstr "L[͐lłȂ΂Ȃ܂"
+
+msgid "expected vim.buffer object"
+msgstr "vim.bufferIuWFNg҂Ă܂"
+
+msgid "failed to switch to given buffer"
+msgstr "w肳ꂽobt@ւ̐؂ւɎs܂"
+
+msgid "expected vim.window object"
+msgstr "vim.windowIuWFNg҂Ă܂"
+
+msgid "failed to find window in the current tab page"
+msgstr "݂̃^uɂ͎w肳ꂽEBhE܂ł"
+
+msgid "did not switch to the specified window"
+msgstr "w肳ꂽEBhEɐ؂ւ܂ł"
+
+msgid "expected vim.tabpage object"
+msgstr "vim.tabpageIuWFNg҂Ă܂"
+
+msgid "did not switch to the specified tab page"
+msgstr "w肳ꂽ^uy[Wɐ؂ւ܂ł"
+
+msgid "unable to convert to vim structure"
+msgstr "vim̍\\̂ɕϊł܂"
+
+msgid "NULL reference passed"
+msgstr "NULLQƂn܂"
+
+msgid "internal error: invalid value type"
+msgstr "G[: Ȓl^ł"
diff -Naur vim73.orig/src/po/ko.UTF-8.po vim73/src/po/ko.UTF-8.po
--- vim73.orig/src/po/ko.UTF-8.po	2010-06-08 21:16:08.000000000 +0000
+++ vim73/src/po/ko.UTF-8.po	2013-08-04 19:09:10.647277082 +0000
@@ -1,12 +1,12 @@
 # Korean translation for Vim
 #
-# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2010
+# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2011
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vim 7.2\n"
+"Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-18 09:43+0900\n"
+"POT-Creation-Date: 2011-02-16 16:18+0900\n"
 "PO-Revision-Date: 2010-02-18 09:49+0900\n"
 "Last-Translator: SungHyun Nam <goweol@gmail.com>\n"
 "Language-Team: GTP Korean <gnome-kr-translation@gnome.or.kr>\n"
@@ -14,6 +14,27 @@
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: 빈 비밀번호로 bf_key_init() 함수가 불려졌습니다"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: Blowfish big/little endian use wrong"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256 시험이 실패했습니다."
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish 시험이 실패했습니다."
+
+msgid "[Location List]"
+msgstr "[위치 목록]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfix 목록]"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: 버퍼를 할당할 수 없어서 끝냅니다..."
 
@@ -147,7 +168,6 @@
 msgid "Top"
 msgstr "꼭대기"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -155,12 +175,6 @@
 "\n"
 "# 버퍼 목록:\n"
 
-msgid "[Location List]"
-msgstr "[위치 목록]"
-
-msgid "[Quickfix List]"
-msgstr "[Quickfix 목록]"
-
 msgid "[Scratch]"
 msgstr "[Scratch]"
 
@@ -232,7 +246,7 @@
 msgstr "E105: 불러들인 파일에서 :loadkeymap을 사용하지 않았습니다"
 
 msgid "E791: Empty keymap entry"
-msgstr "E791: 키맵 엔트리가 비어있슴"
+msgstr "E791: 키맵 엔트리가 비어있음"
 
 msgid " Keyword completion (^N^P)"
 msgstr " 낱말 완성 (^N^P)"
@@ -280,6 +294,12 @@
 msgid "Hit end of paragraph"
 msgstr "단락의 마지막 만남"
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Completion 기능이 창을 바꾸었습니다"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Completion 기능이 문자열을 지웠습니다"
+
 msgid "'dictionary' option is empty"
 msgstr "'dictionary' 옵션이 비었습니다"
 
@@ -367,7 +387,7 @@
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Dictionary에 키가 없슴: %s"
+msgstr "E716: Dictionary에 키가 없음: %s"
 
 #, c-format
 msgid "E122: Function %s already exists, add ! to replace it"
@@ -585,7 +605,7 @@
 msgstr "E727: 시작위치가 끝을 지나침"
 
 msgid "<empty>"
-msgstr "<비어있슴>"
+msgstr "<비어있음>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Vim 서버에 연결되어 있지 않습니다"
@@ -730,7 +750,6 @@
 msgid "E133: :return not inside a function"
 msgstr "E133: :return이 함수 안에 있지 않습니다"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -821,7 +840,6 @@
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# 이 viminfo 파일은 빔이 만든 것입니다 Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -829,7 +847,6 @@
 "# 조심만 한다면 고칠 수도 있습니다!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# 이 파일이 저장되었을 때의 'encoding'의 값\n"
 
@@ -855,7 +872,7 @@
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: 스왑 파일 있슴: %s (덮어쓰려면 :silent! 사용)"
+msgstr "E768: 스왑 파일 있음: %s (덮어쓰려면 :silent! 사용)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -940,7 +957,6 @@
 msgid "Pattern found in every line: %s"
 msgstr "여러 줄에서 패턴을 찾았습니다: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1049,8 +1065,8 @@
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s  %ld 줄"
 
-msgid "E750: First use :profile start <fname>"
-msgstr "E750: 먼저 ':profile start <fname>'을 사용하세요"
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: 먼저 \":profile start {fname}\"을 사용하세요"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
@@ -1096,7 +1112,7 @@
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "디렉토리는 source할 수 없슴: \"%s\""
+msgstr "디렉토리는 source할 수 없음: \"%s\""
 
 #, c-format
 msgid "could not source \"%s\""
@@ -1121,11 +1137,11 @@
 #~ msgid "modeline"
 #~ msgstr ""
 
-#~ msgid "--cmd argument"
-#~ msgstr ""
+msgid "--cmd argument"
+msgstr "--cmd 인자"
 
-#~ msgid "-c argument"
-#~ msgstr ""
+msgid "-c argument"
+msgstr "-c 인자"
 
 msgid "environment variable"
 msgstr "환경 변수"
@@ -1242,6 +1258,9 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: 사용자 정의 명령은 대문자로 시작해야 합니다"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: 예약된 이름, 사용자 정의 명령으로 사용될 수 없습니다"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: 그런 사용자 정의 명령 없음: %s"
@@ -1256,6 +1275,9 @@
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467: 사용자 완성은 함수 인자가 필요합니다"
 
+msgid "unknown"
+msgstr "모름"
+
 #, c-format
 msgid "E185: Cannot find color scheme %s"
 msgstr "E185: 색 스킴 %s을(를) 찾을 수 없습니다"
@@ -1353,6 +1375,9 @@
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: \"<sfile>\"에 대해 치환할 :source 파일 이름이 없습니다"
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"에 사용될 줄 번호가 없습니다"
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: '%'나 '#'에 대한 빈 파일 이름, 오로지 \":p:h\"와만 동작합니다"
@@ -1607,6 +1632,9 @@
 msgid "can't read output of 'charconvert'"
 msgstr "'charconvert'의 출력결과를 읽을 수 없습니다"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: 파일이 모르는 방법으로 암호화되어 있습니다"
+
 msgid "E676: No matching autocommands for acwrite buffer"
 msgstr "E676: acwrite 버퍼에 대한 autocommand를 찾을 수 없습니다"
 
@@ -1674,9 +1702,7 @@
 msgid ""
 "E513: write error, conversion failed in line %ld (make 'fenc' empty to "
 "override)"
-msgstr ""
-"E513: 쓰기 에러, %ld 줄에서 변환 실패 (무시하려면 'fenc'를 비우면 "
-"됨)"
+msgstr "E513: 쓰기 에러, %ld 줄에서 변환 실패 (무시하려면 'fenc'를 비우면 됨)"
 
 msgid "E514: write error (file system full?)"
 msgstr "E514: 쓰기 에러 (파일 시스템이 꽉찼나요?)"
@@ -1754,6 +1780,11 @@
 msgstr "1 글자"
 
 #, c-format
+msgid "%lld characters"
+msgstr "%lld 글자"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "%ld 글자"
 
@@ -1998,9 +2029,6 @@
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: 메시지와 콜백 모두를 사용해서는 BalloonEval을 만들 수 없습니다"
 
-msgid "Vim dialog..."
-msgstr "빔 대화상자..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -2043,12 +2071,15 @@
 msgid "Down"
 msgstr "아래로"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "다음 찾기"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "바꾸기"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "모두 바꾸기"
 
@@ -2067,9 +2098,6 @@
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "빔: 메인 창이 죽게 될 것입니다\n"
 
-msgid "Font Selection"
-msgstr "글꼴 고르기"
-
 msgid "&Filter"
 msgstr "거르개(&F)"
 
@@ -2107,21 +2135,6 @@
 msgstr "취소(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap 글꼴 '%s'을(를) 로드할 수 없습니다"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: 글꼴 %s을(를) 사용할 수 없습니다"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"자식 프로세스를 끝내기 위해 메시지를 보냈습니다.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: 창 제목 \"%s\"을(를) 찾을 수 없습니다"
 
@@ -2398,11 +2411,11 @@
 msgstr "E567: cscope 연결이 없습니다"
 
 #, c-format
-#~ msgid "E259: no matches found for cscope query %s of %s"
+#~ msgid "E469: invalid cscopequickfix flag %c for %c"
 #~ msgstr ""
 
 #, c-format
-#~ msgid "E469: invalid cscopequickfix flag %c for %c"
+#~ msgid "E259: no matches found for cscope query %s of %s"
 #~ msgstr ""
 
 msgid "cscope commands:\n"
@@ -2421,7 +2434,7 @@
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: 이 함수를 부르는 함수들 찾기\n"
@@ -2431,7 +2444,7 @@
 "       g: 이 정의 찾기\n"
 "       i: 이 파일을 포함하는 파일들 찾기\n"
 "       s: 이 C 심볼 찾기\n"
-"       t: Find assignments to\n"
+"       t: 이 문자열 찾기\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2482,12 +2495,18 @@
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    데이터베이스 이름                   prepend path\n"
 
+#~ msgid "Lua library cannot be loaded."
+#~ msgstr ""
+
+msgid "cannot save undo information"
+msgstr "undo 정보를 저장할 수 없습니다"
+
 msgid ""
 "E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E815: 미안합니다, 이 명령은 사용할 수 없습니다, MzScheme 라이브러리를 로딩할 수 없"
-"습니다."
+"E815: 미안합니다, 이 명령은 사용할 수 없습니다, MzScheme 라이브러리를 로딩할 "
+"수 없습니다."
 
 msgid "invalid expression"
 msgstr "잘못된 표현식"
@@ -2507,9 +2526,6 @@
 msgid "couldn't open buffer"
 msgstr "버퍼를 열 수 없었습니다"
 
-msgid "cannot save undo information"
-msgstr "undo 정보를 저장할 수 없습니다"
-
 msgid "cannot delete line"
 msgstr "줄을 지울 수 없습니다"
 
@@ -2540,6 +2556,9 @@
 msgid "not allowed in the Vim sandbox"
 msgstr "Vim sandbox에서는 허용되지 않습니다"
 
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: 이 Vim은 :py3을 사용한 후에 :python을 사용할 수 없습니다"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2559,51 +2578,12 @@
 msgid "invalid attribute"
 msgstr "잘못된 속성"
 
-msgid "writelines() requires list of strings"
-msgstr "writelines()는 문자열 목록이 필요합니다"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: 파이썬: I/O 객체 초기화중 에러가 생겼습니다"
-
-msgid "attempt to refer to deleted buffer"
-msgstr "지워진 버퍼를 참조하려고 하였습니다"
-
-msgid "line number out of range"
-msgstr "줄 번호가 범위를 벗어났습니다"
-
 #, c-format
 msgid "<buffer object (deleted) at %p>"
 msgstr "<%p에 버퍼 객체 (삭제됨)>"
 
-msgid "invalid mark name"
-msgstr "잘못된 마크 이름"
-
-msgid "no such buffer"
-msgstr "그런 버퍼는 없습니다"
-
-msgid "attempt to refer to deleted window"
-msgstr "지워진 창을 참조하려고 하였습니다"
-
-msgid "readonly attribute"
-msgstr "읽기 전용 속성"
-
-msgid "cursor position outside buffer"
-msgstr "퍼서 위치가 버퍼 밖에 있습니다"
-
-#, c-format
-msgid "<window object (deleted) at %p>"
-msgstr "<%p에 창 객체 (삭제됨)>"
-
-#, c-format
-msgid "<window object (unknown) at %p>"
-msgstr "<%p에 창 객체 (모름)>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<창 %d>"
-
-msgid "no such window"
-msgstr "그런 창은 없습니다"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: 이 Vim은 :python을 사용한 후에 :py3을 사용할 수 없습니다"
 
 #~ msgid "E265: $_ must be an instance of String"
 #~ msgstr ""
@@ -2735,6 +2715,9 @@
 msgid "cannot set line(s)"
 msgstr "줄을 설정할 수 없습니다"
 
+msgid "invalid mark name"
+msgstr "잘못된 마크 이름"
+
 msgid "mark not set"
 msgstr "마크가 설정되지 않았습니다"
 
@@ -2745,6 +2728,9 @@
 msgid "cannot insert/append line"
 msgstr "줄을 끼워넣거나 더할 수 없습니다"
 
+msgid "line number out of range"
+msgstr "줄 번호가 범위를 벗어났습니다"
+
 msgid "unknown flag: "
 msgstr "모르는 플래그: "
 
@@ -2829,11 +2815,14 @@
 msgid "%d files to edit\n"
 msgstr "%d 파일을 고치기\n"
 
+msgid "netbeans is not supported with this GUI\n"
+msgstr "이 GUI는 netbeans를 지원하지 않습니다\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "이 빔은 diff 기능 없이 컴파일 되었습니다."
 
 msgid "'-nb' cannot be used: not enabled at compile time\n"
-msgstr "'-nb'는 사용할 수 없슴: 컴파일할 때 포함되지 않음\n"
+msgstr "'-nb'는 사용할 수 없음: 컴파일할 때 포함되지 않음\n"
 
 msgid "Attempt to open script file again: \""
 msgstr "스크립트 파일을 다시 열려고 시도: \""
@@ -3074,7 +3063,8 @@
 msgid ""
 "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
 msgstr ""
-"--remote-tab[-wait][-silent] <files>  --remote와 같지만 파일별로 탭 페이지 사용"
+"--remote-tab[-wait][-silent] <files>  --remote와 같지만 파일별로 탭 페이지 사"
+"용"
 
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <keys>\t빔 서버로 <keys>를 보내고 끝내기"
@@ -3127,12 +3117,6 @@
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\t아이콘 상태로 빔 시작"
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <name>\t\t빔이 <name>인 것처럼 리소스 사용"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (구현되지 않음)\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <color>\t바탕 색으로 <color> 사용 (also: -bg)"
 
@@ -3254,7 +3238,6 @@
 #~ "change line  col text"
 #~ msgstr ""
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3263,7 +3246,6 @@
 "# 파일 마크:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3271,7 +3253,6 @@
 "\n"
 "# 점프목록 (새것이 먼저):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3303,15 +3284,6 @@
 msgid "E289: input method doesn't support my preedit type"
 msgstr "E289: 입력 방식이 내 preedit 형식을 지원하지 않습니다"
 
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: over-the-spot 형식은 fontset이 사용되어야 합니다"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr "E291: GTK+가 1.2.3 이전 판입니다. 상태 영역을 사용할 수 없습니다"
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: 입력 서버가 실행되지 않고 있습니다"
-
 msgid "E293: block was not locked"
 msgstr "E293: 구역이 잠궈지지 않았습니다"
 
@@ -3339,6 +3311,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: 구역 번호 2를 얻지 못했나요?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: 스왑 파일을 암호화할 수 없습니다"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: 으윽, 스왑 파일을 잃어버렸습니다!!!"
@@ -3395,6 +3370,12 @@
 #~ "or the file has been damaged."
 #~ msgstr ""
 
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %s이(가) 암호화되어 있는 데, 이 Vim은 암호화를 지원하지 않습니다"
+
 #~ msgid " has been damaged (page size is smaller than minimum value).\n"
 #~ msgstr ""
 
@@ -3410,6 +3391,38 @@
 msgstr "E308: 경고: 원래 파일이 바뀌었습니다"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "스왑 파일이 암호화됨: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"새로운 암호 키를 입력했는 데, 파일을 저장하지 않았었다면,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"새로운 암호 키를 입력하세요."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"암호 키를 바꾼 후에 파일을 저장했었다면 같은 키로 텍스트 파일과"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"스왑파일을 저장하려면 엔터를 누르세요"
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: %s의 구역 1을 읽을 수 없습니다"
 
@@ -3461,16 +3474,24 @@
 "\n"
 "(어쩌면 다른 이름으로 저장하고 싶으실 지도 모르겠습니다\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "그리고 바뀐 내용을 확인하려면 diff를 이용하십시오)\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "그리고 바뀐 내용을 확인하려면 원래 파일에 대해 diff를 실행하세요)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "복구가 끝났습니다. 버퍼의 내용이 파일 내용과 같습니다."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"나중에 .swp 파일을 지우십시오.\n"
+"\n"
+"이제 .swp 파일을 지우셔도 됩니다.\n"
 "\n"
 
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "텍스트 파일에 스왑파일에서 가져온 암호 키를 사용합니다.\n"
+
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
 msgstr "스왑 파일을 찾았음:"
@@ -3677,10 +3698,12 @@
 msgid "    If you did this already, delete the swap file \""
 msgstr "    이미 복구하셨었다면 스왑파일 \""
 
-#~ msgid ""
-#~ "\"\n"
-#~ "    to avoid this message.\n"
-#~ msgstr ""
+msgid ""
+"\"\n"
+"    to avoid this message.\n"
+msgstr ""
+"\"\n"
+"    을(를) 지우셔야 이 메시지가 사라집니다.\n"
 
 msgid "Swap file \""
 msgstr "스왑 파일 \""
@@ -3889,7 +3912,6 @@
 msgid "Vim: Finished.\n"
 msgstr "빔: 끌났습니다.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "에러: "
 
@@ -3985,8 +4007,14 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: 버퍼 %ld에 대한 NetBeans 연결을 잃어버렸습니다"
 
-#~ msgid "E505: "
-#~ msgstr ""
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: 이 GUI는 netbeans를 지원하지 않습니다"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: netbeans가 이미 연결되어 있습니다"
+
+msgid "E505: "
+msgstr "E505: "
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: 커서 밑에 식별자가 없습니다"
@@ -4092,7 +4120,6 @@
 msgid "Illegal register name"
 msgstr "이상한 레지스터 이름"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -4117,8 +4144,8 @@
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"Selected %s%ld of %ld 라인; %ld of %ld 단어; %ld of %ld 문자; %ld of %ld "
-"바이트"
+"Selected %s%ld of %ld 라인; %ld of %ld 단어; %ld of %ld 문자; %ld of %ld 바이"
+"트"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4129,8 +4156,8 @@
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Col %s of %s; 라인 %ld of %ld; 단어 %ld of %ld; 문자 %ld of %ld; 바이트 %ld of "
-"%ld"
+"Col %s of %s; 라인 %ld of %ld; 단어 %ld of %ld; 문자 %ld of %ld; 바이트 %ld "
+"of %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4173,6 +4200,12 @@
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: 'backupext'와 'patchmode'가 동일합니다"
 
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars' 값과 충돌이 발생합니다"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars' 값과 충돌이 발생합니다"
+
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: GTK+ 2 GUI에서는 바뀔 수 없습니다"
 
@@ -4378,9 +4411,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: 잘못된 글자 '%c'이(가) 글꼴 이름 \"%s\"에 있습니다"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: 잘못된 'osfiletype' 옵션 - Text를 사용합니다"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "빔: 같은 시그널 두 번, 끝냅니다\n"
 
@@ -4584,6 +4614,9 @@
 msgid "E382: Cannot write, 'buftype' option is set"
 msgstr "E382: 쓸 수 없음, 'buftype' 옵션이 설정되어 있습니다"
 
+msgid "Error file"
+msgstr "에러 파일"
+
 msgid "E683: File name missing or invalid pattern"
 msgstr "E683: 파일명 누락 혹은 잘못된 패턴"
 
@@ -4839,6 +4872,10 @@
 msgstr "E756: 맞춤법 검사가 활성화되어 있지 않습니다"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "경고: 단어 목록 \"%s_%s.spl\" 혹은 \"%s_ascii.spl\"을 찾을 수 없습니다"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr "경고: 단어 목록 \"%s.%s.spl\" 혹은 \"%s.ascii.spl\"을 찾을 수 없습니다"
 
@@ -5062,6 +5099,9 @@
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "아스키 문자열이 아닌 %d개의 단어가 무시되었습니다"
 
+#~ msgid "E845: Insufficient memory, word list will be incomplete"
+#~ msgstr ""
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "%d/%d 노드가 압축됨; %d (%d%%)가 남음"
@@ -5149,7 +5189,7 @@
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E753: 찾을 수 없슴: %s"
+msgstr "E753: 찾을 수 없음: %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
@@ -5239,8 +5279,8 @@
 msgid "E395: contains argument not accepted here"
 msgstr "E395: contains 인자는 여기에 쓸 수 없습니다"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: containedin 인자는 여기에 쓸 수 없습니다"
+msgid "E844: invalid cchar value"
+msgstr "E844: 잘못된 cchar 값"
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here는 여기에서 사용될 수 없습니다"
@@ -5452,6 +5492,10 @@
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: 태그를 찾을 수 없지만 이거 같습니다!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "중복된 필드 명: %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' not known. Available builtin terminals are:"
 
@@ -5491,10 +5535,84 @@
 msgid "Used CUT_BUFFER0 instead of empty selection"
 msgstr "빈 고르기 대신 CUT_BUFFER0을 사용했습니다"
 
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: 줄 갯수가 모르는 사이에 바뀌었습니다"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "취소 불가능; 어쨌든 계속합니다"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: 쓰기 위해 undo을 열 수 없습니다: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: 깨진 undo 파일 (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir'에 있는 어떤 디렉토리에도 undo 파일을 쓸 수 없습니다"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "읽을 수가 없어서 undo 파일에 덮어쓸 수 없습니다: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "undo 파일이 아니어서 덮어쓸 수 없습니다: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "undo할 내용이 없어서 undo 파일 저장을 건너뜁니다"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "undo 파일 쓰는 중: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: undo 파일 쓰기 에러: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "소유자가 달라서 undo 파일을 읽지 않습니다: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "undo 파일 읽는 중: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: 읽기 위해 undo 파일을 열 수 없습니다: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: undo 파일이 아닙니다: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: 암호화되지 않은 파일이 암호화된 undo 파일을 가지고 있습니다: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Undo 파일을 해독할 수 없습니다: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Undo 파일이 암호화되었습니다: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: 호환되지 않는 undo 파일: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "파일 내용이 바뀌어서, undo 정보를 사용할 수 없습니다"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "undo 파일 %s을(를) 읽어들였습니다"
+
 msgid "Already at oldest change"
 msgstr "더 이상의 수정이 없었습니다"
 
@@ -5502,8 +5620,8 @@
 msgstr "더 이상의 수정은 없었습니다"
 
 #, c-format
-msgid "Undo number %ld not found"
-msgstr "취소 번호 %ld를 찾을 수 없습니다"
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Undo 번호 %ld를 찾을 수 없습니다"
 
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: 잘못된 줄 번호"
@@ -5539,8 +5657,8 @@
 msgid "Nothing to undo"
 msgstr "취소할 게 없습니다"
 
-msgid "number changes  time"
-msgstr "number changes  time"
+#~ msgid "number changes  when               saved"
+#~ msgstr ""
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5721,15 +5839,9 @@
 msgid "with GTK2-GNOME GUI."
 msgstr "GTK2-GNOME GUI."
 
-msgid "with GTK-GNOME GUI."
-msgstr "GTK-GNOME GUI."
-
 msgid "with GTK2 GUI."
 msgstr "GTK2 GUI."
 
-msgid "with GTK GUI."
-msgstr "GTK GUI."
-
 msgid "with X11-Motif GUI."
 msgstr "X11-Motif GUI."
 
@@ -5902,7 +6014,7 @@
 msgstr "E813: autocmd 창을 닫을 수 없습니다"
 
 msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: 창을 닫을 수 없슴, autocmd 창만 남음"
+msgstr "E814: 창을 닫을 수 없음, autocmd 창만 남음"
 
 msgid "E445: Other window contains changes"
 msgstr "E445: 다른 창이 바뀌었습니다"
@@ -6142,7 +6254,7 @@
 msgstr "E485: %s 파일을 읽을 수 없습니다"
 
 msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: 마지막으로 고친 뒤 저장되지 않았습니다 (덮어쓰려면 ! 더하기)"
+msgstr "E37: 마지막으로 고친 뒤 저장되지 않았습니다 (무시하려면 ! 더하기)"
 
 msgid "E38: Null argument"
 msgstr "E38: 널 인자"
@@ -6177,7 +6289,7 @@
 msgstr "E42: 에러 없음"
 
 msgid "E776: No location list"
-msgstr "E776: 위치 목록 없슴"
+msgstr "E776: 위치 목록 없음"
 
 msgid "E43: Damaged match string"
 msgstr "E43: 깨진 맞는 문자열"
@@ -6194,7 +6306,7 @@
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: sandbox 안에서는 변수를 설정할 수 없슴: \"%s\""
+msgstr "E794: sandbox 안에서는 변수를 설정할 수 없음: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: 에러파일 읽는 도중에 에러"
@@ -6294,3 +6406,42 @@
 msgid "search hit BOTTOM, continuing at TOP"
 msgstr "끝까지 찾았음, 처음부터 계속"
 
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "\"%s\"에 대한 암호 키가 필요합니다"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines()는 문자열 목록이 필요합니다"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: 파이썬: I/O 객체 초기화중 에러가 생겼습니다"
+
+msgid "no such buffer"
+msgstr "그런 버퍼는 없습니다"
+
+msgid "attempt to refer to deleted window"
+msgstr "지워진 창을 참조하려고 하였습니다"
+
+msgid "readonly attribute"
+msgstr "읽기 전용 속성"
+
+msgid "cursor position outside buffer"
+msgstr "퍼서 위치가 버퍼 밖에 있습니다"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<%p에 창 객체 (삭제됨)>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<%p에 창 객체 (모름)>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<창 %d>"
+
+msgid "no such window"
+msgstr "그런 창은 없습니다"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "지워진 버퍼를 참조하려고 하였습니다"
diff -Naur vim73.orig/src/po/ko.po vim73/src/po/ko.po
--- vim73.orig/src/po/ko.po	2010-06-08 21:16:17.000000000 +0000
+++ vim73/src/po/ko.po	2013-08-04 19:09:10.653943729 +0000
@@ -1,12 +1,12 @@
 # Generated from ko.UTF-8.po, DO NOT EDIT
 #
-# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2010
+# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2011
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: vim 7.2\n"
+"Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-02-18 09:43+0900\n"
+"POT-Creation-Date: 2011-02-16 16:18+0900\n"
 "PO-Revision-Date: 2010-02-18 09:49+0900\n"
 "Last-Translator: SungHyun Nam <goweol@gmail.com>\n"
 "Language-Team: GTP Korean <gnome-kr-translation@gnome.or.kr>\n"
@@ -14,6 +14,27 @@
 "Content-Type: text/plain; charset=euc-kr\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831:  йȣ bf_key_init() Լ ҷϴ"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: Blowfish big/little endian use wrong"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256  ߽ϴ."
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish  ߽ϴ."
+
+msgid "[Location List]"
+msgstr "[ġ ]"
+
+msgid "[Quickfix List]"
+msgstr "[Quickfix ]"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: ۸ Ҵ   ϴ..."
 
@@ -147,7 +168,6 @@
 msgid "Top"
 msgstr ""
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -155,12 +175,6 @@
 "\n"
 "#  :\n"
 
-msgid "[Location List]"
-msgstr "[ġ ]"
-
-msgid "[Quickfix List]"
-msgstr "[Quickfix ]"
-
 msgid "[Scratch]"
 msgstr "[Scratch]"
 
@@ -232,7 +246,7 @@
 msgstr "E105: ҷ Ͽ :loadkeymap  ʾҽϴ"
 
 msgid "E791: Empty keymap entry"
-msgstr "E791: Ű Ʈ ֽ"
+msgstr "E791: Ű Ʈ "
 
 msgid " Keyword completion (^N^P)"
 msgstr "  ϼ (^N^P)"
@@ -280,6 +294,12 @@
 msgid "Hit end of paragraph"
 msgstr "ܶ  "
 
+msgid "E839: Completion function changed window"
+msgstr "E839: Completion  â ٲپϴ"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Completion  ڿ ϴ"
+
 msgid "'dictionary' option is empty"
 msgstr "'dictionary' ɼ ϴ"
 
@@ -367,7 +387,7 @@
 
 #, c-format
 msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Dictionary Ű : %s"
+msgstr "E716: Dictionary Ű : %s"
 
 #, c-format
 msgid "E122: Function %s already exists, add ! to replace it"
@@ -585,7 +605,7 @@
 msgstr "E727: ġ  ħ"
 
 msgid "<empty>"
-msgstr "<ֽ>"
+msgstr "<>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Vim  Ǿ  ʽϴ"
@@ -730,7 +750,6 @@
 msgid "E133: :return not inside a function"
 msgstr "E133: :return Լ ȿ  ʽϴ"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -821,7 +840,6 @@
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "#  viminfo    Դϴ Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -829,7 +847,6 @@
 "# ɸ Ѵٸ ĥ  ֽϴ!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "#   Ǿ  'encoding' \n"
 
@@ -855,7 +872,7 @@
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768:   ֽ: %s ( :silent! )"
+msgstr "E768:   : %s ( :silent! )"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -940,7 +957,6 @@
 msgid "Pattern found in every line: %s"
 msgstr " ٿ  ãҽϴ: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1049,8 +1065,8 @@
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s  %ld "
 
-msgid "E750: First use :profile start <fname>"
-msgstr "E750:  ':profile start <fname>' ϼ"
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750:  \":profile start {fname}\" ϼ"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
@@ -1096,7 +1112,7 @@
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "丮 source  : \"%s\""
+msgstr "丮 source  : \"%s\""
 
 #, c-format
 msgid "could not source \"%s\""
@@ -1121,11 +1137,11 @@
 #~ msgid "modeline"
 #~ msgstr ""
 
-#~ msgid "--cmd argument"
-#~ msgstr ""
+msgid "--cmd argument"
+msgstr "--cmd "
 
-#~ msgid "-c argument"
-#~ msgstr ""
+msgid "-c argument"
+msgstr "-c "
 
 msgid "environment variable"
 msgstr "ȯ "
@@ -1242,6 +1258,9 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183:    빮ڷ ؾ մϴ"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841:  ̸,      ϴ"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: ׷    : %s"
@@ -1256,6 +1275,9 @@
 msgid "E467: Custom completion requires a function argument"
 msgstr "E467:  ϼ Լ ڰ ʿմϴ"
 
+msgid "unknown"
+msgstr ""
+
 #, c-format
 msgid "E185: Cannot find color scheme %s"
 msgstr "E185:  Ŵ %s() ã  ϴ"
@@ -1353,6 +1375,9 @@
 msgid "E498: no :source file name to substitute for \"<sfile>\""
 msgstr "E498: \"<sfile>\"  ġȯ :source  ̸ ϴ"
 
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: \"<slnum>\"   ȣ ϴ"
+
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
 msgstr "E499: '%' '#'    ̸,  \":p:h\"͸ մϴ"
@@ -1607,6 +1632,9 @@
 msgid "can't read output of 'charconvert'"
 msgstr "'charconvert' °   ϴ"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821:  𸣴  ȣȭǾ ֽϴ"
+
 msgid "E676: No matching autocommands for acwrite buffer"
 msgstr "E676: acwrite ۿ  autocommand ã  ϴ"
 
@@ -1674,9 +1702,7 @@
 msgid ""
 "E513: write error, conversion failed in line %ld (make 'fenc' empty to "
 "override)"
-msgstr ""
-"E513:  , %ld ٿ ȯ  (Ϸ 'fenc'  "
-")"
+msgstr "E513:  , %ld ٿ ȯ  (Ϸ 'fenc'  )"
 
 msgid "E514: write error (file system full?)"
 msgstr "E514:   ( ý á?)"
@@ -1754,6 +1780,11 @@
 msgstr "1 "
 
 #, c-format
+msgid "%lld characters"
+msgstr "%lld "
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "%ld "
 
@@ -1998,9 +2029,6 @@
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: ޽ ݹ θ ؼ BalloonEval   ϴ"
 
-msgid "Vim dialog..."
-msgstr " ȭ..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -2043,12 +2071,15 @@
 msgid "Down"
 msgstr "Ʒ"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr " ã"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "ٲٱ"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr " ٲٱ"
 
@@ -2067,9 +2098,6 @@
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr ":  â װ  Դϴ\n"
 
-msgid "Font Selection"
-msgstr "۲ "
-
 msgid "&Filter"
 msgstr "Ÿ(&F)"
 
@@ -2107,21 +2135,6 @@
 msgstr "(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Zap ۲ '%s'() ε  ϴ"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ۲ %s()   ϴ"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ڽ μ   ޽ ½ϴ.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: â  \"%s\"() ã  ϴ"
 
@@ -2398,11 +2411,11 @@
 msgstr "E567: cscope  ϴ"
 
 #, c-format
-#~ msgid "E259: no matches found for cscope query %s of %s"
+#~ msgid "E469: invalid cscopequickfix flag %c for %c"
 #~ msgstr ""
 
 #, c-format
-#~ msgid "E469: invalid cscopequickfix flag %c for %c"
+#~ msgid "E259: no matches found for cscope query %s of %s"
 #~ msgstr ""
 
 msgid "cscope commands:\n"
@@ -2421,7 +2434,7 @@
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c:  Լ θ Լ ã\n"
@@ -2431,7 +2444,7 @@
 "       g:   ã\n"
 "       i:   ϴ ϵ ã\n"
 "       s:  C ɺ ã\n"
-"       t: Find assignments to\n"
+"       t:  ڿ ã\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2482,12 +2495,18 @@
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    ͺ̽ ̸                   prepend path\n"
 
+#~ msgid "Lua library cannot be loaded."
+#~ msgstr ""
+
+msgid "cannot save undo information"
+msgstr "undo    ϴ"
+
 msgid ""
 "E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E815: ̾մϴ,     ϴ, MzScheme ̺귯 ε  "
-"ϴ."
+"E815: ̾մϴ,     ϴ, MzScheme ̺귯 ε "
+" ϴ."
 
 msgid "invalid expression"
 msgstr "߸ ǥ"
@@ -2507,9 +2526,6 @@
 msgid "couldn't open buffer"
 msgstr "۸   ϴ"
 
-msgid "cannot save undo information"
-msgstr "undo    ϴ"
-
 msgid "cannot delete line"
 msgstr "   ϴ"
 
@@ -2540,6 +2556,9 @@
 msgid "not allowed in the Vim sandbox"
 msgstr "Vim sandbox  ʽϴ"
 
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836:  Vim :py3  Ŀ :python   ϴ"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2559,51 +2578,12 @@
 msgid "invalid attribute"
 msgstr "߸ Ӽ"
 
-msgid "writelines() requires list of strings"
-msgstr "writelines() ڿ  ʿմϴ"
-
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: ̽: I/O ü ʱȭ  ϴ"
-
-msgid "attempt to refer to deleted buffer"
-msgstr " ۸ Ϸ Ͽϴ"
-
-msgid "line number out of range"
-msgstr " ȣ  ϴ"
-
 #, c-format
 msgid "<buffer object (deleted) at %p>"
 msgstr "<%p  ü ()>"
 
-msgid "invalid mark name"
-msgstr "߸ ũ ̸"
-
-msgid "no such buffer"
-msgstr "׷ ۴ ϴ"
-
-msgid "attempt to refer to deleted window"
-msgstr " â Ϸ Ͽϴ"
-
-msgid "readonly attribute"
-msgstr "б  Ӽ"
-
-msgid "cursor position outside buffer"
-msgstr "ۼ ġ  ۿ ֽϴ"
-
-#, c-format
-msgid "<window object (deleted) at %p>"
-msgstr "<%p â ü ()>"
-
-#, c-format
-msgid "<window object (unknown) at %p>"
-msgstr "<%p â ü ()>"
-
-#, c-format
-msgid "<window %d>"
-msgstr "<â %d>"
-
-msgid "no such window"
-msgstr "׷ â ϴ"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837:  Vim :python  Ŀ :py3   ϴ"
 
 #~ msgid "E265: $_ must be an instance of String"
 #~ msgstr ""
@@ -2735,6 +2715,9 @@
 msgid "cannot set line(s)"
 msgstr "   ϴ"
 
+msgid "invalid mark name"
+msgstr "߸ ũ ̸"
+
 msgid "mark not set"
 msgstr "ũ  ʾҽϴ"
 
@@ -2745,6 +2728,9 @@
 msgid "cannot insert/append line"
 msgstr " ְų   ϴ"
 
+msgid "line number out of range"
+msgstr " ȣ  ϴ"
+
 msgid "unknown flag: "
 msgstr "𸣴 ÷: "
 
@@ -2829,11 +2815,14 @@
 msgid "%d files to edit\n"
 msgstr "%d  ġ\n"
 
+msgid "netbeans is not supported with this GUI\n"
+msgstr " GUI netbeans  ʽϴ\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "  diff    Ǿϴ."
 
 msgid "'-nb' cannot be used: not enabled at compile time\n"
-msgstr "'-nb'   :   Ե \n"
+msgstr "'-nb'   :   Ե \n"
 
 msgid "Attempt to open script file again: \""
 msgstr "ũƮ  ٽ  õ: \""
@@ -3074,7 +3063,8 @@
 msgid ""
 "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
 msgstr ""
-"--remote-tab[-wait][-silent] <files>  --remote  Ϻ   "
+"--remote-tab[-wait][-silent] <files>  --remote  Ϻ   "
+""
 
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <keys>\t  <keys>  "
@@ -3127,12 +3117,6 @@
 msgid "-iconic\t\tStart vim iconified"
 msgstr "-iconic\t\t ·  "
 
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <name>\t\t <name> ó ҽ "
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  ( )\n"
-
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr "-background <color>\t  <color>  (also: -bg)"
 
@@ -3254,7 +3238,6 @@
 #~ "change line  col text"
 #~ msgstr ""
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3263,7 +3246,6 @@
 "#  ũ:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3271,7 +3253,6 @@
 "\n"
 "#  ( ):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3303,15 +3284,6 @@
 msgid "E289: input method doesn't support my preedit type"
 msgstr "E289: Է   preedit   ʽϴ"
 
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: over-the-spot  fontset Ǿ մϴ"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr "E291: GTK+ 1.2.3  Դϴ.     ϴ"
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Է   ʰ ֽϴ"
-
 msgid "E293: block was not locked"
 msgstr "E293:   ʾҽϴ"
 
@@ -3339,6 +3311,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298:  ȣ 2  ߳?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843:   ȣȭ  ϴ"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ,   ҾȽϴ!!!"
@@ -3395,6 +3370,12 @@
 #~ "or the file has been damaged."
 #~ msgstr ""
 
+#, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr ""
+"E833: %s() ȣȭǾ ִ ,  Vim ȣȭ  ʽϴ"
+
 #~ msgid " has been damaged (page size is smaller than minimum value).\n"
 #~ msgstr ""
 
@@ -3410,6 +3391,38 @@
 msgstr "E308: :   ٲϴ"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "  ȣȭ: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"ο ȣ Ű Էߴ ,   ʾҾٸ,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"ο ȣ Ű Էϼ."
+
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"ȣ Ű ٲ Ŀ  ߾ٸ  Ű ؽƮ ϰ"
+
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+" Ϸ ͸ "
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: %s  1   ϴ"
 
@@ -3461,16 +3474,24 @@
 "\n"
 "(¼ ٸ ̸ ϰ   𸣰ڽϴ\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "׸ ٲ  ȮϷ diff ̿Ͻʽÿ)\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "׸ ٲ  ȮϷ  Ͽ  diff ϼ)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr " ϴ.     ϴ."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"߿ .swp  ʽÿ.\n"
+"\n"
+" .swp  ŵ ˴ϴ.\n"
 "\n"
 
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "ؽƮ Ͽ Ͽ  ȣ Ű մϴ.\n"
+
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
 msgstr "  ã:"
@@ -3677,10 +3698,12 @@
 msgid "    If you did this already, delete the swap file \""
 msgstr "    ̹ ϼ̾ٸ  \""
 
-#~ msgid ""
-#~ "\"\n"
-#~ "    to avoid this message.\n"
-#~ msgstr ""
+msgid ""
+"\"\n"
+"    to avoid this message.\n"
+msgstr ""
+"\"\n"
+"    () ž  ޽ ϴ.\n"
 
 msgid "Swap file \""
 msgstr "  \""
@@ -3889,7 +3912,6 @@
 msgid "Vim: Finished.\n"
 msgstr ": ϴ.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr ": "
 
@@ -3985,8 +4007,14 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658:  %ld  NetBeans  ҾȽϴ"
 
-#~ msgid "E505: "
-#~ msgstr ""
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838:  GUI netbeans  ʽϴ"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: netbeans ̹ Ǿ ֽϴ"
+
+msgid "E505: "
+msgstr "E505: "
 
 msgid "E349: No identifier under cursor"
 msgstr "E349: Ŀ ؿ ĺڰ ϴ"
@@ -4092,7 +4120,6 @@
 msgid "Illegal register name"
 msgstr "̻  ̸"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -4117,8 +4144,8 @@
 "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
 "Bytes"
 msgstr ""
-"Selected %s%ld of %ld ; %ld of %ld ܾ; %ld of %ld ; %ld of %ld "
-"Ʈ"
+"Selected %s%ld of %ld ; %ld of %ld ܾ; %ld of %ld ; %ld of %ld "
+"Ʈ"
 
 #, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
@@ -4129,8 +4156,8 @@
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Col %s of %s;  %ld of %ld; ܾ %ld of %ld;  %ld of %ld; Ʈ %ld of "
-"%ld"
+"Col %s of %s;  %ld of %ld; ܾ %ld of %ld;  %ld of %ld; Ʈ %ld "
+"of %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4173,6 +4200,12 @@
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: 'backupext' 'patchmode' մϴ"
 
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: 'listchars'  浹 ߻մϴ"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: 'fillchars'  浹 ߻մϴ"
+
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: GTK+ 2 GUI ٲ  ϴ"
 
@@ -4378,9 +4411,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: ߸  '%c'() ۲ ̸ \"%s\" ֽϴ"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ߸ 'osfiletype' ɼ - Text մϴ"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr ":  ñ׳  , ϴ\n"
 
@@ -4584,6 +4614,9 @@
 msgid "E382: Cannot write, 'buftype' option is set"
 msgstr "E382:   , 'buftype' ɼ Ǿ ֽϴ"
 
+msgid "Error file"
+msgstr " "
+
 msgid "E683: File name missing or invalid pattern"
 msgstr "E683: ϸ  Ȥ ߸ "
 
@@ -4839,6 +4872,10 @@
 msgstr "E756:  ˻簡 ȰȭǾ  ʽϴ"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ": ܾ  \"%s_%s.spl\" Ȥ \"%s_ascii.spl\" ã  ϴ"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ": ܾ  \"%s.%s.spl\" Ȥ \"%s.ascii.spl\" ã  ϴ"
 
@@ -5062,6 +5099,9 @@
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "ƽŰ ڿ ƴ %d ܾ õǾϴ"
 
+#~ msgid "E845: Insufficient memory, word list will be incomplete"
+#~ msgstr ""
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "%d/%d 尡 ; %d (%d%%) "
@@ -5149,7 +5189,7 @@
 
 #, c-format
 msgid "E753: Not found: %s"
-msgstr "E753: ã  : %s"
+msgstr "E753: ã  : %s"
 
 #, c-format
 msgid "E778: This does not look like a .sug file: %s"
@@ -5239,8 +5279,8 @@
 msgid "E395: contains argument not accepted here"
 msgstr "E395: contains ڴ ⿡   ϴ"
 
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: containedin ڴ ⿡   ϴ"
+msgid "E844: invalid cchar value"
+msgstr "E844: ߸ cchar "
 
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]here ⿡   ϴ"
@@ -5452,6 +5492,10 @@
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: ±׸ ã   ̰ ϴ!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "ߺ ʵ : %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' not known. Available builtin terminals are:"
 
@@ -5491,10 +5535,84 @@
 msgid "Used CUT_BUFFER0 instead of empty selection"
 msgstr "   CUT_BUFFER0 ߽ϴ"
 
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834:   𸣴 ̿ ٲϴ"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr " Ұ; · մϴ"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828:   undo   ϴ: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825:  undo  (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "'undodir' ִ  丮 undo    ϴ"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "   undo Ͽ   ϴ: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "undo  ƴϾ   ϴ: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "undo   undo   ǳʶݴϴ"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "undo   : %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: undo   : %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "ڰ ޶ undo   ʽϴ: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "undo  д : %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: б  undo    ϴ: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: undo  ƴմϴ: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: ȣȭ   ȣȭ undo   ֽϴ: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Undo  ص  ϴ: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Undo  ȣȭǾϴ: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: ȣȯ ʴ undo : %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "  ٲ, undo    ϴ"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "undo  %s() о鿴ϴ"
+
 msgid "Already at oldest change"
 msgstr " ̻  ϴ"
 
@@ -5502,8 +5620,8 @@
 msgstr " ̻  ϴ"
 
 #, c-format
-msgid "Undo number %ld not found"
-msgstr " ȣ %ld ã  ϴ"
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Undo ȣ %ld ã  ϴ"
 
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: ߸  ȣ"
@@ -5539,8 +5657,8 @@
 msgid "Nothing to undo"
 msgstr "  ϴ"
 
-msgid "number changes  time"
-msgstr "number changes  time"
+#~ msgid "number changes  when               saved"
+#~ msgstr ""
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5721,15 +5839,9 @@
 msgid "with GTK2-GNOME GUI."
 msgstr "GTK2-GNOME GUI."
 
-msgid "with GTK-GNOME GUI."
-msgstr "GTK-GNOME GUI."
-
 msgid "with GTK2 GUI."
 msgstr "GTK2 GUI."
 
-msgid "with GTK GUI."
-msgstr "GTK GUI."
-
 msgid "with X11-Motif GUI."
 msgstr "X11-Motif GUI."
 
@@ -5902,7 +6014,7 @@
 msgstr "E813: autocmd â   ϴ"
 
 msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: â   , autocmd â "
+msgstr "E814: â   , autocmd â "
 
 msgid "E445: Other window contains changes"
 msgstr "E445: ٸ â ٲϴ"
@@ -6142,7 +6254,7 @@
 msgstr "E485: %s    ϴ"
 
 msgid "E37: No write since last change (add ! to override)"
-msgstr "E37:  ģ   ʾҽϴ ( ! ϱ)"
+msgstr "E37:  ģ   ʾҽϴ (Ϸ ! ϱ)"
 
 msgid "E38: Null argument"
 msgstr "E38:  "
@@ -6177,7 +6289,7 @@
 msgstr "E42:  "
 
 msgid "E776: No location list"
-msgstr "E776: ġ  "
+msgstr "E776: ġ  "
 
 msgid "E43: Damaged match string"
 msgstr "E43:  ´ ڿ"
@@ -6194,7 +6306,7 @@
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: sandbox ȿ    : \"%s\""
+msgstr "E794: sandbox ȿ    : \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47:  д ߿ "
@@ -6294,3 +6406,42 @@
 msgid "search hit BOTTOM, continuing at TOP"
 msgstr " ã, ó "
 
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "\"%s\"  ȣ Ű ʿմϴ"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines() ڿ  ʿմϴ"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: ̽: I/O ü ʱȭ  ϴ"
+
+msgid "no such buffer"
+msgstr "׷ ۴ ϴ"
+
+msgid "attempt to refer to deleted window"
+msgstr " â Ϸ Ͽϴ"
+
+msgid "readonly attribute"
+msgstr "б  Ӽ"
+
+msgid "cursor position outside buffer"
+msgstr "ۼ ġ  ۿ ֽϴ"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<%p â ü ()>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<%p â ü ()>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<â %d>"
+
+msgid "no such window"
+msgstr "׷ â ϴ"
+
+msgid "attempt to refer to deleted buffer"
+msgstr " ۸ Ϸ Ͽϴ"
diff -Naur vim73.orig/src/po/nb.po vim73/src/po/nb.po
--- vim73.orig/src/po/nb.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/nb.po	2013-08-04 19:09:10.657277052 +0000
@@ -2070,21 +2070,6 @@
 msgstr "&Angre"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Kan ikke laste Zap-skrifttype '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Kan ikke bruke skrifttype %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Sender beskjed om  avslutte barneprosess.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Fant ikke vindutittel \"%s\""
 
@@ -4324,9 +4309,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ulovlig tegn '%c' i skrifttypenavn \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ugyldig 'osfiletype'-valg - bruker Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Dobbelt signal, avslutter\n"
 
diff -Naur vim73.orig/src/po/nl.po vim73/src/po/nl.po
--- vim73.orig/src/po/nl.po	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/po/nl.po	2013-08-04 19:09:10.660610375 +0000
@@ -0,0 +1,8207 @@
+# Dutch Translation for Vim		vim:set foldmethod=marker:
+# Do ":help uganda"  in Vim to read copying and usage conditions.
+# Do ":help credits" in Vim to see a list of people who contributed.
+# Previous-Translator(s):
+# highlight: oplichten
+# Erwin Poeze <erwin.poeze@gmail.com>, 2011, 2012.
+msgid ""
+msgstr ""
+"Project-Id-Version: vim 7.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-05-29 07:43+0200\n"
+"PO-Revision-Date: 2012-03-28 08:07+0200\n"
+"Last-Translator: YOUR NAME <E-MAIL@ADDRESS>\n"
+"Language-Team: Dutch <vertaling@vrijschrift.nl>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: blowfish.c:418
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() uitgevoerd met leeg wachtwoord"
+
+#: blowfish.c:513
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+#: blowfish.c:532
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr "E817: gebruik Blowfish big/little endian is onjuist"
+
+#: blowfish.c:645
+msgid "E818: sha256 test failed"
+msgstr "E818: sha256 test mislukt"
+
+#: blowfish.c:650
+msgid "E819: Blowfish test failed"
+msgstr "E819: Blowfish test mislukt"
+
+#: buffer.c:103
+msgid "E82: Cannot allocate any buffer, exiting..."
+msgstr "E82: kan geen buffer aanmaken, beëindigen..."
+
+#: buffer.c:106
+msgid "E83: Cannot allocate buffer, using other one..."
+msgstr "E83: kan geen buffer aanmaken, een andere wordt gebruikt..."
+
+#: buffer.c:879
+msgid "E515: No buffers were unloaded"
+msgstr "E515: geen van de buffers is gelost"
+
+#: buffer.c:881
+msgid "E516: No buffers were deleted"
+msgstr "E516: geen van de buffers is verwijderd"
+
+#: buffer.c:883
+msgid "E517: No buffers were wiped out"
+msgstr "E517: geen van de buffers is gewist"
+
+#: buffer.c:891
+msgid "1 buffer unloaded"
+msgstr "1 buffer gelost"
+
+#: buffer.c:893
+#, c-format
+msgid "%d buffers unloaded"
+msgstr "%d buffers gelost"
+
+#: buffer.c:898
+msgid "1 buffer deleted"
+msgstr "1 buffer verwijderd"
+
+#: buffer.c:900
+#, c-format
+msgid "%d buffers deleted"
+msgstr "%d buffers verwijderd"
+
+#: buffer.c:905
+msgid "1 buffer wiped out"
+msgstr "1 buffer gewist"
+
+#: buffer.c:907
+#, c-format
+msgid "%d buffers wiped out"
+msgstr "%d buffers gewist"
+
+#: buffer.c:965
+msgid "E84: No modified buffer found"
+msgstr "E84: geen aangepast buffer gevonden"
+
+#. back where we started, didn't find anything.
+#: buffer.c:1004
+msgid "E85: There is no listed buffer"
+msgstr "E85: er is geen vermelde buffer"
+
+#: buffer.c:1016
+#, c-format
+msgid "E86: Buffer %ld does not exist"
+msgstr "E86: Buffer %ld bestaat niet"
+
+#: buffer.c:1019
+msgid "E87: Cannot go beyond last buffer"
+msgstr "E87: kan niet voorbij het laatste buffer komen"
+
+#: buffer.c:1021
+msgid "E88: Cannot go before first buffer"
+msgstr "E88: kan niet vóór het eerste buffer komen"
+
+#: buffer.c:1063
+#, c-format
+msgid "E89: No write since last change for buffer %ld (add ! to override)"
+msgstr "E89: niets opgeslagen sinds laatste wijziging van buffer %ld (voeg ! toe om te forceren)"
+
+#: buffer.c:1080
+msgid "E90: Cannot unload last buffer"
+msgstr "E90: kan laatste buffer niet legen"
+
+#: buffer.c:1657
+msgid "W14: Warning: List of file names overflow"
+msgstr "W14: waarschuwing: lijst met bestandsnamen is vol"
+
+#: buffer.c:1856
+#: quickfix.c:3626
+#, c-format
+msgid "E92: Buffer %ld not found"
+msgstr "E92: buffer %ld niet gevonden"
+
+#: buffer.c:2131
+#, c-format
+msgid "E93: More than one match for %s"
+msgstr "E93: %s meermaals gevonden"
+
+#: buffer.c:2133
+#, c-format
+msgid "E94: No matching buffer for %s"
+msgstr "E94: geen overeenkomstig buffer voor %s"
+
+#: buffer.c:2585
+#, c-format
+msgid "line %ld"
+msgstr "regel %ld"
+
+#: buffer.c:2672
+msgid "E95: Buffer with this name already exists"
+msgstr "E95: buffer met deze naam bestaat al"
+
+#: buffer.c:2999
+msgid " [Modified]"
+msgstr " [Gewijzigd]"
+
+#: buffer.c:3004
+msgid "[Not edited]"
+msgstr "[Niet bewerkt]"
+
+#: buffer.c:3009
+msgid "[New file]"
+msgstr "[Nieuw bestand]"
+
+#: buffer.c:3010
+msgid "[Read errors]"
+msgstr "[Leesfouten]"
+
+#: buffer.c:3012
+#: fileio.c:2429
+#: netbeans.c:3848
+msgid "[readonly]"
+msgstr "[alleen-lezen]"
+
+#: buffer.c:3035
+#, c-format
+msgid "1 line --%d%%--"
+msgstr "1 regel --%d%%--"
+
+#: buffer.c:3038
+#, c-format
+msgid "%ld lines --%d%%--"
+msgstr "%ld regels --%d%%--"
+
+#: buffer.c:3045
+#, c-format
+msgid "line %ld of %ld --%d%%-- col "
+msgstr "regel %ld van %ld --%d%%-- kol "
+
+#: buffer.c:3166
+#: buffer.c:5132
+#: memline.c:1783
+msgid "[No Name]"
+msgstr "[Geen naam]"
+
+#. must be a help buffer
+#: buffer.c:3204
+msgid "help"
+msgstr "hulp"
+
+#: buffer.c:3832
+#: screen.c:6091
+msgid "[Help]"
+msgstr "[Hulp]"
+
+#: buffer.c:3866
+#: screen.c:6097
+msgid "[Preview]"
+msgstr "[Voorvertoning]"
+
+#: buffer.c:4188
+msgid "All"
+msgstr "Alles"
+
+#: buffer.c:4188
+msgid "Bot"
+msgstr "Bodem"
+
+#: buffer.c:4191
+msgid "Top"
+msgstr "Top"
+
+#: buffer.c:5067
+#, c-format
+msgid ""
+"\n"
+"# Buffer list:\n"
+msgstr ""
+"\n"
+"# Bufferlijst:\n"
+
+#: buffer.c:5116
+msgid "[Location List]"
+msgstr "[Locatielijst]"
+
+#: buffer.c:5118
+msgid "[Quickfix list]"
+msgstr "[Quickfix-lijst]"
+
+#: buffer.c:5128
+msgid "[Scratch]"
+msgstr "[Klad]"
+
+#: buffer.c:5445
+msgid ""
+"\n"
+"--- Signs ---"
+msgstr ""
+"\n"
+"--- Tekens ---"
+
+#: buffer.c:5455
+#, c-format
+msgid "Signs for %s:"
+msgstr "Tekens voor %s:"
+
+#: buffer.c:5461
+#, c-format
+msgid "    line=%ld  id=%d  name=%s"
+msgstr "    regel=%ld  id=%d  naam=%s"
+
+#: diff.c:141
+#, c-format
+msgid "E96: Can not diff more than %ld buffers"
+msgstr "E96: kan niet meer dan %ld buffers vergelijken"
+
+#: diff.c:777
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: kan tijdelijke bestand niet lezen of opslaan"
+
+#: diff.c:778
+msgid "E97: Cannot create diffs"
+msgstr "E97: kan geen verschillen genereren"
+
+#: diff.c:901
+msgid "Patch file"
+msgstr "Patch-bestand"
+
+#: diff.c:1005
+msgid "E816: Cannot read patch output"
+msgstr "E816: kan patch-uitvoer niet lezen"
+
+#: diff.c:1236
+msgid "E98: Cannot read diff output"
+msgstr "E98: kan diff-uitvoer niet lezen"
+
+#: diff.c:2095
+msgid "E99: Current buffer is not in diff mode"
+msgstr "E99: huidige buffer is niet in diff-modus"
+
+#: diff.c:2114
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: geen ander buffer in diff-modus is bewerkbaar"
+
+#: diff.c:2116
+msgid "E100: No other buffer in diff mode"
+msgstr "E100: geen ander buffer in diff-modus"
+
+#: diff.c:2126
+msgid "E101: More than two buffers in diff mode, don't know which one to use"
+msgstr "E101: meer dan twee buffers in diff-modus, weet niet welke gebruikt moet worden"
+
+#: diff.c:2149
+#, c-format
+msgid "E102: Can't find buffer \"%s\""
+msgstr "E102: kan buffer \"%s\" niet vinden"
+
+#: diff.c:2157
+#, c-format
+msgid "E103: Buffer \"%s\" is not in diff mode"
+msgstr "E103: buffer \"%s\" is niet in diff-modus"
+
+#: diff.c:2201
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: buffer is onverwacht gewijzigd"
+
+#: digraph.c:2214
+msgid "E104: Escape not allowed in digraph"
+msgstr "E104: Escape in digraph niet toegestaan"
+
+#: digraph.c:2407
+msgid "E544: Keymap file not found"
+msgstr "E544: bestand met toetsbindingen niet gevonden"
+
+#: digraph.c:2434
+msgid "E105: Using :loadkeymap not in a sourced file"
+msgstr "E105: Gebruik van :loadkeymap niet in een 'sourced' bestand"
+
+#: digraph.c:2473
+msgid "E791: Empty keymap entry"
+msgstr "E791: toetsbinding leeg"
+
+#: edit.c:42
+msgid " Keyword completion (^N^P)"
+msgstr " trefwoordvoltooiing (^N^P)"
+
+#. ctrl_x_mode == 0, ^P/^N compl.
+#: edit.c:43
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " ^X-modus (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+
+#: edit.c:45
+msgid " Whole line completion (^L^N^P)"
+msgstr " gehele-regelvoltooiing (^L^N^P)"
+
+#: edit.c:46
+msgid " File name completion (^F^N^P)"
+msgstr " bestandsnaamvoltooiing (^F^N^P)"
+
+#: edit.c:47
+msgid " Tag completion (^]^N^P)"
+msgstr " tag-voltooiing (^]^N^P)"
+
+#: edit.c:48
+msgid " Path pattern completion (^N^P)"
+msgstr " Padpatroonvoltooiing (^N^P)"
+
+#: edit.c:49
+msgid " Definition completion (^D^N^P)"
+msgstr " definitievoltooiiing (^D^N^P)"
+
+#: edit.c:51
+msgid " Dictionary completion (^K^N^P)"
+msgstr " Dictionaryvoltooiing (^K^N^P)"
+
+#: edit.c:52
+msgid " Thesaurus completion (^T^N^P)"
+msgstr " Thesaurusvoltooiing (^T^N^P)"
+
+#: edit.c:53
+msgid " Command-line completion (^V^N^P)"
+msgstr " opdrachtregelvoltooiing (^V^N^P)"
+
+#: edit.c:54
+msgid " User defined completion (^U^N^P)"
+msgstr " gebruikergedefinieerde voltooiing (^U^N^P)"
+
+#: edit.c:55
+msgid " Omni completion (^O^N^P)"
+msgstr " omni-voltooiing (^O^N^P)"
+
+#: edit.c:56
+msgid " Spelling suggestion (s^N^P)"
+msgstr " spellingsuggestie (s^N^P)"
+
+#: edit.c:57
+msgid " Keyword Local completion (^N^P)"
+msgstr " lokaal-trefwoordvoltooiing (^N^P)"
+
+#: edit.c:60
+msgid "Hit end of paragraph"
+msgstr "Einde van paragraaf"
+
+#: edit.c:2042
+msgid "'dictionary' option is empty"
+msgstr "'Dictionary'-optie is leeg"
+
+#: edit.c:2043
+msgid "'thesaurus' option is empty"
+msgstr "'thesaurus'-optie is leeg"
+
+#: edit.c:3009
+#, c-format
+msgid "Scanning dictionary: %s"
+msgstr "Doorzoeken Dictionary: %s"
+
+#: edit.c:3494
+msgid " (insert) Scroll (^E/^Y)"
+msgstr " (invoegen) scroll (^E/^Y)"
+
+#: edit.c:3496
+msgid " (replace) Scroll (^E/^Y)"
+msgstr " (vervangen) scroll (^E/^Y)"
+
+#: edit.c:3973
+#, c-format
+msgid "Scanning: %s"
+msgstr "doorzoeken: %s"
+
+#: edit.c:4008
+msgid "Scanning tags."
+msgstr "Doorzoeken tags."
+
+#: edit.c:5021
+msgid " Adding"
+msgstr " toevoegen"
+
+#. showmode might reset the internal line pointers, so it must
+#. * be called before line = ml_get(), or when this address is no
+#. * longer needed.  -- Acevedo.
+#.
+#: edit.c:5068
+msgid "-- Searching..."
+msgstr "-- doorzoeken..."
+
+#: edit.c:5128
+msgid "Back at original"
+msgstr "Terug naar origineel"
+
+#: edit.c:5133
+msgid "Word from other line"
+msgstr "Woord uit andere regel"
+
+#: edit.c:5138
+msgid "The only match"
+msgstr "Het enige resultaat"
+
+#: edit.c:5203
+#, c-format
+msgid "match %d of %d"
+msgstr "resultaat %d van %d"
+
+#: edit.c:5207
+#, c-format
+msgid "match %d"
+msgstr "resultaat %d"
+
+#: eval.c:96
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: onverwachte tekens in :let"
+
+#: eval.c:97
+#, c-format
+msgid "E684: list index out of range: %ld"
+msgstr "E684: lijstindex buiten bereik: %ld"
+
+#: eval.c:98
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: ongedefinieerde variabele: %s"
+
+#: eval.c:99
+msgid "E111: Missing ']'"
+msgstr "E111: ontbrekende ']'"
+
+#: eval.c:100
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: argument van %s moet een List zijn"
+
+#: eval.c:101
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: argument van %s moet een List of Dictionary zijn"
+
+#: eval.c:102
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: kan geen leeg trefwoord als Dictionary gebruiken"
+
+#: eval.c:103
+msgid "E714: List required"
+msgstr "E714: List is vereist"
+
+#: eval.c:104
+msgid "E715: Dictionary required"
+msgstr "E715: Dictionary is vereist"
+
+#: eval.c:105
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: te veel argumenten voor functie: %s"
+
+#: eval.c:106
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: trefwoord niet aangetroffen in Dictionary: %s"
+
+#: eval.c:107
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: function %s bestaat reeds, voeg ! toe om te vervangen"
+
+#: eval.c:108
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: woord bestaat al in Dictionary"
+
+#: eval.c:109
+msgid "E718: Funcref required"
+msgstr "E718: Funcref is vereist"
+
+#: eval.c:110
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: kan [:] niet met een Dictionary gebruiken"
+
+#: eval.c:111
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: onjuist type variabele voor %s="
+
+#: eval.c:112
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: onbekende functie: %s"
+
+#: eval.c:113
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: ongeldige variabelenaam: %s"
+
+#: eval.c:1931
+msgid "E687: Less targets than List items"
+msgstr "E687: minder doelen dan Listitems"
+
+#: eval.c:1936
+msgid "E688: More targets than List items"
+msgstr "E688: meer doelen dan Listitems"
+
+#: eval.c:2022
+msgid "Double ; in list of variables"
+msgstr "Dubbele ; in variabelenlijst"
+
+#: eval.c:2241
+#, c-format
+msgid "E738: Can't list variables for %s"
+msgstr "E738: kan variabelen voor %s niet tonen"
+
+#: eval.c:2587
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: alleen een List of Dictionary kan geÃ¯ndexeerd worden"
+
+#: eval.c:2593
+msgid "E708: [:] must come last"
+msgstr "E708: [:] moet als laatste staan"
+
+#: eval.c:2645
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] vereist een Listwaarde"
+
+#: eval.c:2881
+msgid "E710: List value has more items than target"
+msgstr "E710: Listwaarde heeft meer  value has more items than target"
+
+#: eval.c:2885
+msgid "E711: List value has not enough items"
+msgstr "E711: Listwaarde heeft onvoldoende items"
+
+#: eval.c:3120
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: \"in\" ontbreekt na :for"
+
+#: eval.c:3353
+#, c-format
+msgid "E107: Missing parentheses: %s"
+msgstr "E107: ontbrekende haakjes: %s"
+
+#: eval.c:3592
+#, c-format
+msgid "E108: No such variable: \"%s\""
+msgstr "E108: onbekende variabele: \"%s\""
+
+#: eval.c:3679
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: variabele is te diep genest om te beveiligen"
+
+#: eval.c:4027
+msgid "E109: Missing ':' after '?'"
+msgstr "E109: ':' ontbreekt na '?'"
+
+#: eval.c:4329
+msgid "E691: Can only compare List with List"
+msgstr "E691: List kan alleen met een Lijst worden vergeleken"
+
+#: eval.c:4331
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: ongeldige bewerking voor Listen"
+
+#: eval.c:4358
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Dictionary kan alleen met Woordenboek worden vergeleken"
+
+#: eval.c:4360
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: ongeldige bewerking voor Dictionary"
+
+#: eval.c:4380
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: Funcref kan alleen met Funcref worden vergeleken"
+
+#: eval.c:4382
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: ongeldige bewerking voor Funcrefs"
+
+#: eval.c:4802
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: '%' kan niet met Float worden gebruikt"
+
+#: eval.c:5022
+msgid "E110: Missing ')'"
+msgstr "E110: ')' ontbreekt"
+
+#: eval.c:5174
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: een Funcref kan niet geÃ¯ndexeerd worden"
+
+#: eval.c:5431
+#, c-format
+msgid "E112: Option name missing: %s"
+msgstr "E112: optienaam ontbreekt: %s"
+
+#: eval.c:5449
+#, c-format
+msgid "E113: Unknown option: %s"
+msgstr "E113: onbekende optie: %s"
+
+#: eval.c:5515
+#, c-format
+msgid "E114: Missing quote: %s"
+msgstr "E114: ontbrekend aanhaalteken: %s"
+
+#: eval.c:5651
+#, c-format
+msgid "E115: Missing quote: %s"
+msgstr "E115: ontbrekend aanhaalteken: %s"
+
+#: eval.c:5730
+#, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: komma ontbreekt in List: %s"
+
+#: eval.c:5738
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: einde van List ']' ontbreekt: %s"
+
+#: eval.c:7230
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: dubbelepunt in Dictionary ontbreekt: %s"
+
+#: eval.c:7259
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: dubbele sleutel in Dictionary: \"%s\""
+
+#: eval.c:7279
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: komma ontbreekt in Dictionary: %s"
+
+#: eval.c:7287
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: einde van Dictionary '}' ontbreekt: %s"
+
+#: eval.c:7325
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: variabele is te diep genest om te tonen"
+
+#: eval.c:8059
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: teveel argumenten voor functie %s"
+
+#: eval.c:8061
+#, c-format
+msgid "E116: Invalid arguments for function %s"
+msgstr "E116: ongeldige argumenten voor functie %s"
+
+#: eval.c:8270
+#, c-format
+msgid "E117: Unknown function: %s"
+msgstr "E117: onbekende functie: %s"
+
+#: eval.c:8276
+#, c-format
+msgid "E119: Not enough arguments for function: %s"
+msgstr "E119: onvoldoende argumenten voor functie: %s"
+
+#: eval.c:8280
+#, c-format
+msgid "E120: Using <SID> not in a script context: %s"
+msgstr "E120: gebruik van <SID> buiten een scriptcontext: %s"
+
+#: eval.c:8284
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: dict-functie aanroep zonder Dictionary: %s"
+
+#: eval.c:8357
+msgid "E808: Number or Float required"
+msgstr "E808: Number of Float vereist"
+
+#: eval.c:8949
+msgid "E699: Too many arguments"
+msgstr "E699:teveel argumenten"
+
+#: eval.c:9118
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() kan alleen in Invoegmodus worden gebruikt"
+
+#.
+#. * Yes this is ugly, I don't particularly like it either.  But doing it
+#. * this way has the compelling advantage that translations need not to
+#. * be touched at all.  See below what 'ok' and 'ync' are used for.
+#.
+#: eval.c:9218
+#: gui.c:4876
+#: gui_gtk.c:2144
+#: os_mswin.c:598
+msgid "&Ok"
+msgstr "&Ok"
+
+#: eval.c:9914
+#, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: sleutel bestaat al: %s"
+
+#: eval.c:10506
+#, c-format
+msgid "+-%s%3ld lines: "
+msgstr "+-%s%3ld regels: "
+
+#: eval.c:10594
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: onbekende functie: %s"
+
+#: eval.c:12620
+msgid ""
+"&OK\n"
+"&Cancel"
+msgstr ""
+"&OK\n"
+"&Annuleren"
+
+#: eval.c:12702
+msgid "called inputrestore() more often than inputsave()"
+msgstr "inputrestore() vaker aangeroepen dan inputsave()"
+
+#: eval.c:12836
+msgid "E786: Range not allowed"
+msgstr "E786: bereik niet toegestaan"
+
+#: eval.c:13036
+msgid "E701: Invalid type for len()"
+msgstr "E701: ongeldig type voor len()"
+
+#: eval.c:14063
+msgid "E726: Stride is zero"
+msgstr "E726: stap is nul"
+
+#: eval.c:14065
+msgid "E727: Start past end"
+msgstr "E727: start na einde"
+
+#: eval.c:14118
+#: eval.c:17978
+msgid "<empty>"
+msgstr "<leeg>"
+
+#: eval.c:14352
+msgid "E240: No connection to Vim server"
+msgstr "E240: geen verbinding met Vim-server"
+
+#: eval.c:14400
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241: verzenden naar %s onmogelijk"
+
+#: eval.c:14547
+msgid "E277: Unable to read a server reply"
+msgstr "E277: lezen van serverantwoord onmogelijk"
+
+#: eval.c:14797
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: teveel symbolische koppelingen (oneindige lus?)"
+
+#: eval.c:15527
+msgid "E258: Unable to send to client"
+msgstr "E258: verzenden nar client onmogelijk"
+
+#: eval.c:16294
+msgid "E702: Sort compare function failed"
+msgstr "E702: sorteer-vergelijkfunctie mislukt"
+
+#: eval.c:16619
+msgid "(Invalid)"
+msgstr "(ongeldig)"
+
+#: eval.c:17104
+msgid "E677: Error writing temp file"
+msgstr "E677: opslaan van temp-bestand is mislukt"
+
+#: eval.c:19007
+msgid "E805: Using a Float as a Number"
+msgstr "E805: een Float wordt als Number gebruikt"
+
+#: eval.c:19011
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: een Funcref wordt als Number gebruikt"
+
+#: eval.c:19019
+msgid "E745: Using a List as a Number"
+msgstr "E745: List wordt als een Number gebruikt"
+
+#: eval.c:19022
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: Dictionary gebruiken als een Number"
+
+#: eval.c:19125
+msgid "E729: using Funcref as a String"
+msgstr "E729: Funcref gebruiken als een String"
+
+#: eval.c:19128
+msgid "E730: using List as a String"
+msgstr "E730: List gebruiken als een String"
+
+#: eval.c:19131
+msgid "E731: using Dictionary as a String"
+msgstr "E731: Dictionary gebruiken als een String"
+
+#: eval.c:19135
+msgid "E806: using Float as a String"
+msgstr "E806: Float gebruiken als een String"
+
+#: eval.c:19505
+#, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: variabelenaam van Funcref moet beginnen met een hoofdletter: %s"
+
+#: eval.c:19513
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: variablenaam botst met bestaande functie: %s"
+
+#: eval.c:19538
+#, c-format
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: variabelesoort past niet bij: %s"
+
+#: eval.c:19647
+#, c-format
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: kan variabele %s niet verwijderen"
+
+#: eval.c:19664
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: waarde is geblokkeerd: %s"
+
+#: eval.c:19665
+#: eval.c:19671
+#: message.c:2132
+#: os_mswin.c:2258
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: eval.c:19670
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: kan waarde van %s niet veranderen"
+
+#: eval.c:19755
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: variabele te diep genest om een kopie te maken"
+
+#: eval.c:20228
+#, c-format
+msgid "E123: Undefined function: %s"
+msgstr "E123: ongedefinieerde functie: %s"
+
+#: eval.c:20241
+#, c-format
+msgid "E124: Missing '(': %s"
+msgstr "E124: ontbrekende '(': %s"
+
+#: eval.c:20297
+#, c-format
+msgid "E125: Illegal argument: %s"
+msgstr "E125: ongeldig argument: %s"
+
+#: eval.c:20407
+msgid "E126: Missing :endfunction"
+msgstr "E126: ontbrekende :endfunction"
+
+#: eval.c:20544
+#, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: functienaam botst met variabele: %s"
+
+#: eval.c:20559
+#, c-format
+msgid "E127: Cannot redefine function %s: It is in use"
+msgstr "E127: kan functie %s niet opnieuw definiÃ«ren, het is in gebruik"
+
+#: eval.c:20624
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: functienaam komt niet overeen met bestandsnaam van het script: %s"
+
+#: eval.c:20742
+msgid "E129: Function name required"
+msgstr "E129: functienaam is vereist"
+
+#: eval.c:20862
+#, c-format
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr "E128: functionnaam moet met een hoofdletter beginnen of een dubbelepunt bevatten: %s"
+
+#: eval.c:21394
+#, c-format
+msgid "E131: Cannot delete function %s: It is in use"
+msgstr "E131: functie %s wordt gebruikt en kan niet worden verwijderd"
+
+#: eval.c:21514
+msgid "E132: Function call depth is higher than 'maxfuncdepth'"
+msgstr "E132: diepte functieaanroep overstijgt 'maxfuncdepth'"
+
+#: eval.c:21653
+#, c-format
+msgid "calling %s"
+msgstr "%s aanroepen"
+
+#: eval.c:21745
+#, c-format
+msgid "%s aborted"
+msgstr "%s afgebroken"
+
+#: eval.c:21747
+#, c-format
+msgid "%s returning #%ld"
+msgstr "%s komt terug met de waarde #%ld"
+
+#: eval.c:21763
+#, c-format
+msgid "%s returning %s"
+msgstr "%s komt terug met de waarde %s"
+
+#: eval.c:21787
+#: ex_cmds2.c:3233
+#, c-format
+msgid "continuing in %s"
+msgstr "voortzetten in %s"
+
+#: eval.c:21906
+msgid "E133: :return not inside a function"
+msgstr "E133: :return niet binnen een functie"
+
+#: eval.c:22319
+msgid ""
+"\n"
+"# global variables:\n"
+msgstr ""
+"\n"
+"# globale variabelen:\n"
+
+#: eval.c:22436
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tLaatst ingesteld door "
+
+#: eval.c:22456
+msgid "No old files"
+msgstr "Geen oudere bestanden"
+
+#: ex_cmds.c:101
+#, c-format
+msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+
+#: ex_cmds.c:128
+#, c-format
+msgid "> %d, Hex %04x, Octal %o"
+msgstr "> %d, Hex %04x, Octal %o"
+
+#: ex_cmds.c:129
+#, c-format
+msgid "> %d, Hex %08x, Octal %o"
+msgstr "> %d, Hex %08x, Octal %o"
+
+#: ex_cmds.c:739
+msgid "E134: Move lines into themselves"
+msgstr "E134: verplaats regels in zichzelf"
+
+#: ex_cmds.c:808
+msgid "1 line moved"
+msgstr "1 regel verplaatst"
+
+#: ex_cmds.c:810
+#, c-format
+msgid "%ld lines moved"
+msgstr "%ld regels verplaatst"
+
+#: ex_cmds.c:1305
+#, c-format
+msgid "%ld lines filtered"
+msgstr "%ld regels gefilterd"
+
+#: ex_cmds.c:1329
+msgid "E135: *Filter* Autocommands must not change current buffer"
+msgstr "E135: *Filter* Autocommands mogen huidige buffer niet wijzigen"
+
+#: ex_cmds.c:1414
+msgid "[No write since last change]\n"
+msgstr "[Niets opgeslagen sinds laatste wijziging]\n"
+
+#: ex_cmds.c:1672
+#, c-format
+msgid "%sviminfo: %s in line: "
+msgstr "%sviminfo: %s in regel: "
+
+#: ex_cmds.c:1680
+msgid "E136: viminfo: Too many errors, skipping rest of file"
+msgstr "E136: viminfo: teveel fouten, restand van bestand overgeslagen"
+
+#: ex_cmds.c:1709
+#, c-format
+msgid "Reading viminfo file \"%s\"%s%s%s"
+msgstr "Inlezen viminfo-bestand \"%s\"%s%s%s"
+
+#: ex_cmds.c:1711
+msgid " info"
+msgstr " info"
+
+#: ex_cmds.c:1712
+msgid " marks"
+msgstr " markering"
+
+#: ex_cmds.c:1713
+msgid " oldfiles"
+msgstr " oud-bestanden"
+
+#: ex_cmds.c:1714
+msgid " FAILED"
+msgstr " MISLUKT"
+
+#. avoid a wait_return for this message, it's annoying
+#: ex_cmds.c:1810
+#, c-format
+msgid "E137: Viminfo file is not writable: %s"
+msgstr "E137: viminfo-bestand is niet schrijfbaar: %s"
+
+#: ex_cmds.c:1963
+#, c-format
+msgid "E138: Can't write viminfo file %s!"
+msgstr "E138: kan niet naar viminfo-bestand %s schrijven!"
+
+#: ex_cmds.c:1973
+#, c-format
+msgid "Writing viminfo file \"%s\""
+msgstr "viminfo-bestand \"%s\" opslaan"
+
+#. Write the info:
+#: ex_cmds.c:2081
+#, c-format
+msgid "# This viminfo file was generated by Vim %s.\n"
+msgstr "# Dit viminfo-bestand is aangemaakt door Vim %s.\n"
+
+#: ex_cmds.c:2083
+#, c-format
+msgid ""
+"# You may edit it if you're careful!\n"
+"\n"
+msgstr ""
+"# Bewerken is toegestaan, maar doe het met aandacht!\n"
+"\n"
+
+#: ex_cmds.c:2085
+#, c-format
+msgid "# Value of 'encoding' when this file was written\n"
+msgstr "# Waarde van 'encoding' bij het opslaan van dit bestand\n"
+
+#: ex_cmds.c:2185
+msgid "Illegal starting char"
+msgstr "Ongeldig startteken"
+
+#: ex_cmds.c:2551
+#: ex_cmds2.c:1478
+msgid "Save As"
+msgstr "Opslaan als"
+
+#: ex_cmds.c:2628
+msgid "Write partial file?"
+msgstr "Gedeeltelijk bestand opslaan?"
+
+#: ex_cmds.c:2635
+msgid "E140: Use ! to write partial buffer"
+msgstr "E140: gebruik ! om gedeeltelijk buffer op te slaan"
+
+#: ex_cmds.c:2777
+#, c-format
+msgid "Overwrite existing file \"%s\"?"
+msgstr "Bestaand bestand \"%s\" overschrijven?"
+
+#: ex_cmds.c:2820
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Wisselbestand \"%s\" bestaat, toch overschrijven?"
+
+#: ex_cmds.c:2833
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: wisselbestand bestaat: %s (:silent! overschrijft)"
+
+#: ex_cmds.c:2901
+#, c-format
+msgid "E141: No file name for buffer %ld"
+msgstr "E141: buffer %ld heeft geen bestandsnaam"
+
+#: ex_cmds.c:2940
+msgid "E142: File not written: Writing is disabled by 'write' option"
+msgstr "E142: bestand is niet opgeslagen: opslaan is uitgeschakeld door 'write'-optie"
+
+#: ex_cmds.c:2970
+#, c-format
+msgid ""
+"'readonly' option is set for \"%s\".\n"
+"Do you wish to write anyway?"
+msgstr ""
+"'alleen-lezen'-optie is inschakeld voor \"%s\".\n"
+"Toch opslaan?"
+
+#: ex_cmds.c:2973
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"Bestandsrechten van \"%s\" zijn alleen-lezen.\n"
+"Mogelijk kan er toch naar weggeschreven worden.\n"
+"Proberen op te slaan?"
+
+#: ex_cmds.c:2990
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr "E505: \"%s\" is alleen-lezen (voeg ! toe om te overschrijven)"
+
+#: ex_cmds.c:3177
+msgid "Edit File"
+msgstr "Bestand bewerken"
+
+#: ex_cmds.c:3860
+#, c-format
+msgid "E143: Autocommands unexpectedly deleted new buffer %s"
+msgstr "E143: 'Autocommands' hebben het nieuwe buffer %s onverwacht verwijderd"
+
+#: ex_cmds.c:4076
+msgid "E144: non-numeric argument to :z"
+msgstr "E144: niet-numeriek argument voor :z"
+
+#: ex_cmds.c:4175
+msgid "E145: Shell commands not allowed in rvim"
+msgstr "E145: in rvim zijn shell-opdrachten zijn niet toegestaan"
+
+#: ex_cmds.c:4276
+msgid "E146: Regular expressions can't be delimited by letters"
+msgstr "E146: reguliere expressies kunnen niet begrensd worden door letters"
+
+#: ex_cmds.c:4736
+#, c-format
+msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
+msgstr "vervang door %s (y/n/a/q/l/^E/^Y)?"
+
+#: ex_cmds.c:5181
+msgid "(Interrupted) "
+msgstr "(Onderbroken) "
+
+#: ex_cmds.c:5186
+msgid "1 match"
+msgstr "1 overeenkomst"
+
+#: ex_cmds.c:5186
+msgid "1 substitution"
+msgstr "1 vervanging"
+
+#: ex_cmds.c:5189
+#, c-format
+msgid "%ld matches"
+msgstr "%ld overeenkomsten"
+
+#: ex_cmds.c:5189
+#, c-format
+msgid "%ld substitutions"
+msgstr "%ld vervangingen"
+
+#: ex_cmds.c:5194
+msgid " on 1 line"
+msgstr " op 1 regel"
+
+#: ex_cmds.c:5197
+#, c-format
+msgid " on %ld lines"
+msgstr " op %ld regels"
+
+#: ex_cmds.c:5244
+msgid "E147: Cannot do :global recursive"
+msgstr "E147: kan :global niet recursief uitvoeren"
+
+#: ex_cmds.c:5277
+msgid "E148: Regular expression missing from global"
+msgstr "E148: reguliere expressies ontbreken bij global"
+
+#: ex_cmds.c:5326
+#, c-format
+msgid "Pattern found in every line: %s"
+msgstr "Patroon aangetroffen in iedere regel: %s"
+
+#: ex_cmds.c:5413
+#, c-format
+msgid ""
+"\n"
+"# Last Substitute String:\n"
+"$"
+msgstr ""
+"\n"
+"# Laatst vervangingsstring:\n"
+"$"
+
+#: ex_cmds.c:5526
+msgid "E478: Don't panic!"
+msgstr "E478: geen paniek!"
+
+#: ex_cmds.c:5572
+#, c-format
+msgid "E661: Sorry, no '%s' help for %s"
+msgstr "E661: helaas, geen '%s'-hulp voor %s"
+
+#: ex_cmds.c:5575
+#, c-format
+msgid "E149: Sorry, no help for %s"
+msgstr "E149: helaas, geen hulp voor %s"
+
+#: ex_cmds.c:5617
+#, c-format
+msgid "Sorry, help file \"%s\" not found"
+msgstr "helaas, hulpbestand \"%s\" is niet gevonden"
+
+#: ex_cmds.c:6195
+#, c-format
+msgid "E150: Not a directory: %s"
+msgstr "E150: geen map: %s"
+
+#: ex_cmds.c:6338
+#, c-format
+msgid "E152: Cannot open %s for writing"
+msgstr "E152: kan %s niet openen om naar te schrijven"
+
+#: ex_cmds.c:6375
+#, c-format
+msgid "E153: Unable to open %s for reading"
+msgstr "E153: kan %s niet openen om uit te lezen"
+
+#: ex_cmds.c:6411
+#, c-format
+msgid "E670: Mix of help file encodings within a language: %s"
+msgstr "E670: mengelmoes van hulpbestandcoderingen binnen een taal: %s"
+
+#: ex_cmds.c:6489
+#, c-format
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: dubbele tag \"%s\" in bestand %s/%s"
+
+#: ex_cmds.c:6625
+#, c-format
+msgid "E160: Unknown sign command: %s"
+msgstr "E160: onbekende opdracht voor margetekens: %s"
+
+#: ex_cmds.c:6642
+msgid "E156: Missing sign name"
+msgstr "E156: ontbrekende naam margeteken"
+
+#: ex_cmds.c:6688
+msgid "E612: Too many signs defined"
+msgstr "E612: teveel margetekens gedefinieerd"
+
+#: ex_cmds.c:6756
+#, c-format
+msgid "E239: Invalid sign text: %s"
+msgstr "E239: ongeldige tekst margeteken: %s"
+
+#: ex_cmds.c:6787
+#: ex_cmds.c:6962
+#, c-format
+msgid "E155: Unknown sign: %s"
+msgstr "E155: onbekend margeteken: %s"
+
+#: ex_cmds.c:6820
+msgid "E159: Missing sign number"
+msgstr "E159: ontbrekend nummer margeteken"
+
+#: ex_cmds.c:6902
+#, c-format
+msgid "E158: Invalid buffer name: %s"
+msgstr "E158: ongeldige buffernaam: %s"
+
+#: ex_cmds.c:6941
+#, c-format
+msgid "E157: Invalid sign ID: %ld"
+msgstr "E157: ongeldige id margeteken: %ld"
+
+#: ex_cmds.c:7011
+msgid " (NOT FOUND)"
+msgstr " (NIET GEVONDEN)"
+
+#: ex_cmds.c:7013
+msgid " (not supported)"
+msgstr "(niet ondersteund)"
+
+#: ex_cmds.c:7137
+msgid "[Deleted]"
+msgstr "[Verwijderd]"
+
+#: ex_cmds2.c:138
+msgid "Entering Debug mode.  Type \"cont\" to continue."
+msgstr "Debug-modus gestart.  Typ \"cont\" om verder te gaan."
+
+#: ex_cmds2.c:142
+#: ex_docmd.c:1094
+#, c-format
+msgid "line %ld: %s"
+msgstr "regel %ld: %s"
+
+#: ex_cmds2.c:144
+#, c-format
+msgid "cmd: %s"
+msgstr "cmd: %s"
+
+#: ex_cmds2.c:344
+#, c-format
+msgid "Breakpoint in \"%s%s\" line %ld"
+msgstr "'Breakpoint' in \"%s%s\" regel %ld"
+
+#: ex_cmds2.c:656
+#, c-format
+msgid "E161: Breakpoint not found: %s"
+msgstr "E161: 'Breakpoint' niet gevonden: %s"
+
+#: ex_cmds2.c:692
+msgid "No breakpoints defined"
+msgstr "Geen 'breakpoints' opgegeven"
+
+#: ex_cmds2.c:697
+#, c-format
+msgid "%3d  %s %s  line %ld"
+msgstr "%3d  %s %s  regel %ld"
+
+#: ex_cmds2.c:1095
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: gebruik eerst \":profile start {fname}\""
+
+#: ex_cmds2.c:1503
+#, c-format
+msgid "Save changes to \"%s\"?"
+msgstr "veranderingen opslaan in \"%s\"?"
+
+#: ex_cmds2.c:1505
+#: ex_docmd.c:10880
+msgid "Untitled"
+msgstr "naamloos"
+
+#: ex_cmds2.c:1634
+#, c-format
+msgid "E162: No write since last change for buffer \"%s\""
+msgstr "E162: niets opgeslagen sinds laatste wijziging van buffer \"%s\""
+
+#: ex_cmds2.c:1705
+msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
+msgstr "Waarschuwing: onverwacht ander buffer binnengegaan (controleer 'autocommands')"
+
+#: ex_cmds2.c:2149
+msgid "E163: There is only one file to edit"
+msgstr "E163: slechts een bestand beschikbaar voor bewerking"
+
+#: ex_cmds2.c:2151
+msgid "E164: Cannot go before first file"
+msgstr "E164: kan niet verder terug dan eerste bestand"
+
+#: ex_cmds2.c:2153
+msgid "E165: Cannot go beyond last file"
+msgstr "E165: kan niet verder dan laatste bestand"
+
+#: ex_cmds2.c:2583
+#, c-format
+msgid "E666: compiler not supported: %s"
+msgstr "E666: compiler niet ondersteund: %s"
+
+#: ex_cmds2.c:2684
+#, c-format
+msgid "Searching for \"%s\" in \"%s\""
+msgstr "Naar \"%s\" in \"%s\" zoeken"
+
+#: ex_cmds2.c:2711
+#, c-format
+msgid "Searching for \"%s\""
+msgstr "Naar \"%s\" zoeken"
+
+#: ex_cmds2.c:2737
+#, c-format
+msgid "not found in 'runtimepath': \"%s\""
+msgstr "niet gevonden in 'runtimepath': \"%s\""
+
+#: ex_cmds2.c:2772
+msgid "Source Vim script"
+msgstr "Vim-script laden"
+
+#: ex_cmds2.c:2962
+#, c-format
+msgid "Cannot source a directory: \"%s\""
+msgstr "kan geen map laden: \"%s\""
+
+#: ex_cmds2.c:3019
+#, c-format
+msgid "could not source \"%s\""
+msgstr "kan \"%s\" niet laden"
+
+#: ex_cmds2.c:3021
+#, c-format
+msgid "line %ld: could not source \"%s\""
+msgstr "regel %ld: kan \"%s\" niet laden"
+
+#: ex_cmds2.c:3037
+#, c-format
+msgid "sourcing \"%s\""
+msgstr "\"%s\" laden"
+
+#: ex_cmds2.c:3039
+#, c-format
+msgid "line %ld: sourcing \"%s\""
+msgstr "regel %ld: \"%s\" laden"
+
+#: ex_cmds2.c:3231
+#, c-format
+msgid "finished sourcing %s"
+msgstr "laden van %s afgerond"
+
+#: ex_cmds2.c:3315
+msgid "modeline"
+msgstr "modusregel"
+
+#: ex_cmds2.c:3317
+msgid "--cmd argument"
+msgstr "argument van --cmd"
+
+#: ex_cmds2.c:3319
+msgid "-c argument"
+msgstr "argument van -c"
+
+#: ex_cmds2.c:3321
+msgid "environment variable"
+msgstr "omgevingsvariabele"
+
+#: ex_cmds2.c:3323
+msgid "error handler"
+msgstr "foutafhandeling"
+
+#: ex_cmds2.c:3615
+msgid "W15: Warning: Wrong line separator, ^M may be missing"
+msgstr "W15: waarschuwing: ongeldige regelscheiding, ^M kan ontbreken"
+
+#: ex_cmds2.c:3748
+msgid "E167: :scriptencoding used outside of a sourced file"
+msgstr "E167: :scriptencoding buiten een geladen bestand gebruikt"
+
+#: ex_cmds2.c:3781
+msgid "E168: :finish used outside of a sourced file"
+msgstr "E168: :finish buiten een geladen bestand gebruikt"
+
+#: ex_cmds2.c:4103
+#, c-format
+msgid "Current %slanguage: \"%s\""
+msgstr "Huidige %s-taal: \"%s\""
+
+#: ex_cmds2.c:4120
+#, c-format
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197: taal kan niet ingesteld worden op \"%s\""
+
+#: ex_docmd.c:639
+msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+msgstr "Ex-modus betreden.  Typ \"visual\" om naar de Normaal-modus te gaan."
+
+#: ex_docmd.c:694
+msgid "E501: At end-of-file"
+msgstr "E501: bij bestandseinde"
+
+#: ex_docmd.c:793
+msgid "E169: Command too recursive"
+msgstr "E169: opdracht te recursief"
+
+#: ex_docmd.c:1372
+#, c-format
+msgid "E605: Exception not caught: %s"
+msgstr "E605: uitzondering niet afgevangen: %s"
+
+#: ex_docmd.c:1460
+msgid "End of sourced file"
+msgstr "Einde van geladen bestand"
+
+#: ex_docmd.c:1461
+msgid "End of function"
+msgstr "Einde van functie"
+
+#: ex_docmd.c:2109
+msgid "E464: Ambiguous use of user-defined command"
+msgstr "E464: dubbelzinnig gebruik van gebruikergedefinieerde opdracht"
+
+#: ex_docmd.c:2123
+msgid "E492: Not an editor command"
+msgstr "E492: geen editor-opdracht"
+
+#: ex_docmd.c:2255
+msgid "E493: Backwards range given"
+msgstr "E493: Teruggaand bereik opgegeven"
+
+#: ex_docmd.c:2259
+msgid "Backwards range given, OK to swap"
+msgstr "Teruggaand bereik opgegeven, wisselen is toegestaan"
+
+#: ex_docmd.c:2322
+msgid "E494: Use w or w>>"
+msgstr "E494: w of w>> gebruiken"
+
+#: ex_docmd.c:4095
+msgid "E319: Sorry, the command is not available in this version"
+msgstr "E319: Helaas, in deze versie is de opdracht niet beschikbaar"
+
+#: ex_docmd.c:4444
+msgid "E172: Only one file name allowed"
+msgstr "E172: slechts een bestandsnaam toegestaan"
+
+#: ex_docmd.c:5056
+msgid "1 more file to edit.  Quit anyway?"
+msgstr "1 bestand wacht nog op bewerking.  Toch stoppen?"
+
+#: ex_docmd.c:5059
+#, c-format
+msgid "%d more files to edit.  Quit anyway?"
+msgstr "%d bestanden wachten nog op bewerking.  Toch stoppen?"
+
+#: ex_docmd.c:5066
+msgid "E173: 1 more file to edit"
+msgstr "E173: 1 bestand wacht op bewerking"
+
+#: ex_docmd.c:5068
+#, c-format
+msgid "E173: %ld more files to edit"
+msgstr "E173: %ld bestanden wachten op bewerking"
+
+#: ex_docmd.c:5162
+msgid "E174: Command already exists: add ! to replace it"
+msgstr "E174: opdracht bestaat al: voeg ! toe om het te vervangen"
+
+#: ex_docmd.c:5284
+msgid ""
+"\n"
+"    Name        Args Range Complete  Definition"
+msgstr ""
+"\n"
+"    Naam        Args Berk.  Compleet  Definitie"
+
+#: ex_docmd.c:5377
+msgid "No user-defined commands found"
+msgstr "Geen gebruikergedefinieerde opdrachten gevonden"
+
+#: ex_docmd.c:5409
+msgid "E175: No attribute specified"
+msgstr "E175: geen attribute opgegeven"
+
+#: ex_docmd.c:5461
+msgid "E176: Invalid number of arguments"
+msgstr "E176: ongeldig aantal argumenten"
+
+#: ex_docmd.c:5476
+msgid "E177: Count cannot be specified twice"
+msgstr "E177: aantal kan niet tweemaal worden opgegeven"
+
+#: ex_docmd.c:5486
+msgid "E178: Invalid default value for count"
+msgstr "E178: ongeldige standaardwaarde voor aantal"
+
+#: ex_docmd.c:5514
+msgid "E179: argument required for -complete"
+msgstr "E179: argument vereist voor -complete"
+
+#: ex_docmd.c:5526
+#, c-format
+msgid "E181: Invalid attribute: %s"
+msgstr "E181: ongeldig attribute: %s"
+
+#: ex_docmd.c:5572
+msgid "E182: Invalid command name"
+msgstr "E182: ongeldige opdrachtnaam"
+
+#: ex_docmd.c:5587
+msgid "E183: User defined commands must start with an uppercase letter"
+msgstr "E183: door gebruiker gedefinieerde opdrachten moet een een hoofdletter beginnen"
+
+#: ex_docmd.c:5655
+#, c-format
+msgid "E184: No such user-defined command: %s"
+msgstr "E184: deze door gebruiker gedefinieerde opdracht bestaat niet: %s"
+
+#: ex_docmd.c:6207
+#, c-format
+msgid "E180: Invalid complete value: %s"
+msgstr "E180: ongeldige voltooiingswaarde: %s"
+
+#: ex_docmd.c:6218
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr "E468: argument voor voltooiing alleen toegestaan bij aangepaste voltooiing"
+
+#: ex_docmd.c:6226
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467: aangepaste voltooiing vereist een functieargument"
+
+#: ex_docmd.c:6262
+msgid "unknown"
+msgstr "onbekend"
+
+#: ex_docmd.c:6266
+#, c-format
+msgid "E185: Cannot find color scheme %s"
+msgstr "E185: kan kleurenschema %s niet vinden"
+
+#: ex_docmd.c:6274
+msgid "Greetings, Vim user!"
+msgstr "Gegroet, Vim-gebruiker!"
+
+#: ex_docmd.c:6492
+msgid "E784: Cannot close last tab page"
+msgstr "E784: laatste tabpagina kan niet afgesloten worden"
+
+#: ex_docmd.c:6534
+msgid "Already only one tab page"
+msgstr "Reeds beperkt tot één tabpagina"
+
+#: ex_docmd.c:7221
+msgid "Edit File in new window"
+msgstr "Bestand in nieuw venster bewerken"
+
+#: ex_docmd.c:7347
+#, c-format
+msgid "Tab page %d"
+msgstr "Tabpagina %d"
+
+#: ex_docmd.c:7739
+msgid "No swap file"
+msgstr "Geen wisselbestand"
+
+#: ex_docmd.c:7844
+msgid "Append File"
+msgstr "Bestand toevoegen"
+
+#: ex_docmd.c:7943
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr "E747: kan niet van map veranderen, buffer is gewijzigd (voeg ! toe om te forceren)"
+
+#: ex_docmd.c:7952
+msgid "E186: No previous directory"
+msgstr "E186: geen voorgaande map"
+
+#: ex_docmd.c:8033
+msgid "E187: Unknown"
+msgstr "E187: onbekend"
+
+#: ex_docmd.c:8128
+msgid "E465: :winsize requires two number arguments"
+msgstr "E465: :winsize vereist twee getallen als argument"
+
+#: ex_docmd.c:8190
+#, c-format
+msgid "Window position: X %d, Y %d"
+msgstr "Vensterpositie: X %d, Y %d"
+
+#: ex_docmd.c:8195
+msgid "E188: Obtaining window position not implemented for this platform"
+msgstr "E188: verkrijgen van vensterpositie is voor dit platform niet geïmplementeerd"
+
+#: ex_docmd.c:8205
+msgid "E466: :winpos requires two number arguments"
+msgstr "E466: :winpos vereist twee getallen als argument"
+
+#: ex_docmd.c:8565
+msgid "Save Redirection"
+msgstr "'Redirection' opslaan"
+
+#: ex_docmd.c:8796
+msgid "Save View"
+msgstr "Beeld opslaan"
+
+#: ex_docmd.c:8797
+msgid "Save Session"
+msgstr "Sessie opslaan"
+
+#: ex_docmd.c:8799
+msgid "Save Setup"
+msgstr "Instellingen opslaan"
+
+#: ex_docmd.c:8955
+#, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: kan map %s niet aanmaken"
+
+#: ex_docmd.c:8984
+#, c-format
+msgid "E189: \"%s\" exists (add ! to override)"
+msgstr "E189: \"%s\" bestaat al (voeg ! toe om te forceren)"
+
+#: ex_docmd.c:8989
+#, c-format
+msgid "E190: Cannot open \"%s\" for writing"
+msgstr "E190: \"%s\" kan niet worden beschreven"
+
+#. set mark
+#: ex_docmd.c:9013
+msgid "E191: Argument must be a letter or forward/backward quote"
+msgstr "E191: argument moet een letter zijn of een aanhaalteken, voor of achterwaarts"
+
+#: ex_docmd.c:9060
+msgid "E192: Recursive use of :normal too deep"
+msgstr "E192: recursief gebruik van :normal gaat te diep"
+
+#: ex_docmd.c:9659
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< is zonder de +eval-functionaliteit niet beschikbaar"
+
+#: ex_docmd.c:9668
+msgid "E194: No alternate file name to substitute for '#'"
+msgstr "E194: er is geen wisselende bestandsnaam beschikbaar om '#' te vervangen"
+
+#: ex_docmd.c:9709
+msgid "E495: no autocommand file name to substitute for \"<afile>\""
+msgstr "E495: er is geen 'autocommand'-bestandsnaam om \"<afile>\" te vervangen"
+
+#: ex_docmd.c:9718
+msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
+msgstr "E496: er is geen 'autocommand'-buffernummer om \"<abuf>\" te vervangen"
+
+#: ex_docmd.c:9729
+msgid "E497: no autocommand match name to substitute for \"<amatch>\""
+msgstr "E497: er is geen 'autocommand'-naamovereenkomst om \"<amatch>\" te vervangen"
+
+#: ex_docmd.c:9739
+msgid "E498: no :source file name to substitute for \"<sfile>\""
+msgstr "E498: er is geen :source-bestandsnaam om \"<sfile>\" te vervangen"
+
+#: ex_docmd.c:9781
+#, no-c-format
+msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+msgstr "E499: lege bestandsnaam voor '%' of '#', werkt alleen samen met \":p:h\""
+
+#: ex_docmd.c:9783
+msgid "E500: Evaluates to an empty string"
+msgstr "E500: resulteert in een lege string"
+
+#: ex_docmd.c:10860
+msgid "E195: Cannot open viminfo file for reading"
+msgstr "E195: het 'viminfo'-bestand kan niet worden gelezen"
+
+#: ex_docmd.c:11048
+msgid "E196: No digraphs in this version"
+msgstr "E196: deze versie bevat geen 'digraphs'"
+
+#: ex_eval.c:441
+msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
+msgstr "E608: :throw exceptions met 'Vim' als voorvoegsel zijn niet mogelijk"
+
+#. always scroll up, don't overwrite
+#: ex_eval.c:534
+#, c-format
+msgid "Exception thrown: %s"
+msgstr "Geworpen uitzondering: %s"
+
+#: ex_eval.c:588
+#, c-format
+msgid "Exception finished: %s"
+msgstr "Afgeronde uitzondering: %s"
+
+#: ex_eval.c:589
+#, c-format
+msgid "Exception discarded: %s"
+msgstr "Afgedankte uitzondering: %s"
+
+#: ex_eval.c:635
+#: ex_eval.c:687
+#, c-format
+msgid "%s, line %ld"
+msgstr "%s, regel %ld"
+
+#. always scroll up, don't overwrite
+#: ex_eval.c:657
+#, c-format
+msgid "Exception caught: %s"
+msgstr "Gevangen uitzondering: %s"
+
+#: ex_eval.c:737
+#, c-format
+msgid "%s made pending"
+msgstr "%s aanhanging gemaakt"
+
+#: ex_eval.c:740
+#, c-format
+msgid "%s resumed"
+msgstr "%s voortgezet"
+
+#: ex_eval.c:744
+#, c-format
+msgid "%s discarded"
+msgstr "%s afgedankt"
+
+#: ex_eval.c:771
+msgid "Exception"
+msgstr "Uitzondering"
+
+#: ex_eval.c:777
+msgid "Error and interrupt"
+msgstr "Fout en onderbreken"
+
+#: ex_eval.c:779
+#: gui.c:4875
+#: gui_xmdlg.c:689
+#: gui_xmdlg.c:808
+#: os_mswin.c:597
+msgid "Error"
+msgstr "Fout"
+
+#. if (pending & CSTP_INTERRUPT)
+#: ex_eval.c:781
+msgid "Interrupt"
+msgstr "Onderbreken"
+
+#: ex_eval.c:873
+msgid "E579: :if nesting too deep"
+msgstr "E579: te diepe :if-nesting"
+
+#: ex_eval.c:910
+msgid "E580: :endif without :if"
+msgstr "E580: :endif zonder :if"
+
+#: ex_eval.c:955
+msgid "E581: :else without :if"
+msgstr "E581: :else zonder :if"
+
+#: ex_eval.c:958
+msgid "E582: :elseif without :if"
+msgstr "E582: :elseif zonder :if"
+
+#: ex_eval.c:965
+msgid "E583: multiple :else"
+msgstr "E583: meerdere :else"
+
+#: ex_eval.c:968
+msgid "E584: :elseif after :else"
+msgstr "E584: :elseif na :else"
+
+#: ex_eval.c:1035
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: te diepe :while/:for-nesting"
+
+#: ex_eval.c:1133
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue zonder :while of :for"
+
+#: ex_eval.c:1172
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break zonder :while of :for"
+
+#: ex_eval.c:1222
+msgid "E732: Using :endfor with :while"
+msgstr "E732: gebruik van :endfor met :while"
+
+#: ex_eval.c:1224
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: gebruik van :endwhile met :for"
+
+#: ex_eval.c:1399
+msgid "E601: :try nesting too deep"
+msgstr "E601: te diepe :try-nesting"
+
+#: ex_eval.c:1479
+msgid "E603: :catch without :try"
+msgstr "E603: :catch zonder :try"
+
+#. Give up for a ":catch" after ":finally" and ignore it.
+#. * Just parse.
+#: ex_eval.c:1498
+msgid "E604: :catch after :finally"
+msgstr "E604: :catch na :finally"
+
+#: ex_eval.c:1632
+msgid "E606: :finally without :try"
+msgstr "E606: :finally zonder :try"
+
+#. Give up for a multiple ":finally" and ignore it.
+#: ex_eval.c:1652
+msgid "E607: multiple :finally"
+msgstr "E607: meerdere :finally"
+
+#: ex_eval.c:1762
+msgid "E602: :endtry without :try"
+msgstr "E602: :endtry zonder :try"
+
+#: ex_eval.c:2267
+msgid "E193: :endfunction not inside a function"
+msgstr "E193: :endfunction niet binnen een functie"
+
+#: ex_getln.c:2010
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: nu een andere buffer bewerken is niet toegestaan"
+
+#: ex_getln.c:2025
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: nu bufferinformatie wijzigen is niet toegestaan"
+
+#: ex_getln.c:3923
+msgid "tagname"
+msgstr "tagnaam"
+
+#: ex_getln.c:3926
+msgid " kind file\n"
+msgstr "soor bestand\n"
+
+#: ex_getln.c:5708
+msgid "'history' option is zero"
+msgstr "'history'-optie is nul"
+
+#: ex_getln.c:5979
+#, c-format
+msgid ""
+"\n"
+"# %s History (newest to oldest):\n"
+msgstr ""
+"\n"
+"# %s Historie (jongste naar oudste):\n"
+
+#: ex_getln.c:5980
+msgid "Command Line"
+msgstr "Opdrachtregel"
+
+#: ex_getln.c:5981
+msgid "Search String"
+msgstr "Zoekstring"
+
+#: ex_getln.c:5982
+msgid "Expression"
+msgstr "Expressie"
+
+#: ex_getln.c:5983
+msgid "Input Line"
+msgstr "Invoerregel"
+
+#: ex_getln.c:6021
+msgid "E198: cmd_pchar beyond the command length"
+msgstr "E198: cmd_pchar is langer dan toegestaan voor een opdracht"
+
+#: ex_getln.c:6222
+msgid "E199: Active window or buffer deleted"
+msgstr "E199: actieve venster of buffer verwijderd"
+
+#: fileio.c:158
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: buffer of buffernaam gewijzigd door autocommands"
+
+#: fileio.c:418
+msgid "Illegal file name"
+msgstr "Ongeldige bestandsnaam"
+
+#: fileio.c:447
+#: fileio.c:601
+#: fileio.c:3542
+#: fileio.c:3593
+msgid "is a directory"
+msgstr "is een map"
+
+#: fileio.c:449
+msgid "is not a file"
+msgstr "is geen bestand"
+
+#: fileio.c:462
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "is een apparaat (uitgeschakeld door optie 'opendevice'"
+
+#: fileio.c:642
+#: fileio.c:4848
+msgid "[New File]"
+msgstr "[Nieuw bestand]"
+
+#: fileio.c:645
+msgid "[New DIRECTORY]"
+msgstr "[Nieuwe MAP]"
+
+#: fileio.c:679
+#: fileio.c:682
+msgid "[File too big]"
+msgstr "Bestand te groot"
+
+#: fileio.c:684
+msgid "[Permission Denied]"
+msgstr "[Geen rechten]"
+
+#: fileio.c:817
+msgid "E200: *ReadPre autocommands made the file unreadable"
+msgstr "E200: *ReadPre autocommands hebben het bestand niet-leesbaar gemaakt"
+
+#: fileio.c:819
+msgid "E201: *ReadPre autocommands must not change current buffer"
+msgstr "E201: *ReadPre autocommands mogen huidige buffer niet wijzigen"
+
+#: fileio.c:840
+msgid "Vim: Reading from stdin...\n"
+msgstr "Vim: lezen van standaardinvoer...\n"
+
+#: fileio.c:846
+msgid "Reading from stdin..."
+msgstr "Lezen van standaardinvoer..."
+
+#. Re-opening the original file failed!
+#: fileio.c:1145
+msgid "E202: Conversion made file unreadable!"
+msgstr "E202: bestand niet-leesbaar gemaakt door conversatie"
+
+#: fileio.c:2400
+msgid "[fifo/socket]"
+msgstr "[fifo/socket]"
+
+#: fileio.c:2407
+msgid "[fifo]"
+msgstr "[fifo]"
+
+#: fileio.c:2414
+msgid "[socket]"
+msgstr "[socket]"
+
+#: fileio.c:2422
+msgid "[character special]"
+msgstr "[karakter speciaal]"
+
+#: fileio.c:2429
+#: netbeans.c:3848
+msgid "[RO]"
+msgstr "[RO]"
+
+#: fileio.c:2439
+msgid "[CR missing]"
+msgstr "[CR ontbreekt]"
+
+#: fileio.c:2444
+msgid "[long lines split]"
+msgstr "[lange regels gesplitst]"
+
+#: fileio.c:2450
+#: fileio.c:4832
+msgid "[NOT converted]"
+msgstr "[NIET omgezet]"
+
+#: fileio.c:2455
+#: fileio.c:4837
+msgid "[converted]"
+msgstr "[omgezet]"
+
+#: fileio.c:2462
+#: fileio.c:4862
+msgid "[crypted]"
+msgstr "[versleuteld]"
+
+#: fileio.c:2470
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[OMZETFOUT in regel %ld]"
+
+#: fileio.c:2476
+#, c-format
+msgid "[ILLEGAL BYTE in line %ld]"
+msgstr "[ONGELDIGE BYTE in regel %ld]"
+
+#: fileio.c:2483
+msgid "[READ ERRORS]"
+msgstr "[LEESFOUTEN]"
+
+#: fileio.c:2775
+msgid "Can't find temp file for conversion"
+msgstr "Tijdelijk bestand voor conversie ontbreekt"
+
+#: fileio.c:2782
+msgid "Conversion with 'charconvert' failed"
+msgstr "Conversatie met 'charconvert' is mislukt"
+
+#: fileio.c:2785
+msgid "can't read output of 'charconvert'"
+msgstr "uitvoer van 'charconvert' kan niet worden gelezen"
+
+#: fileio.c:2852
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: bestand is met onbekende methode versleuteld"
+
+#: fileio.c:3387
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: geen overeenkomende autocommands voor 'acwrite'-buffer"
+
+#: fileio.c:3422
+msgid "E203: Autocommands deleted or unloaded buffer to be written"
+msgstr "E203: autocommands hebben buffer verwijderd of gelost die moest worden opgeslagen"
+
+#: fileio.c:3445
+msgid "E204: Autocommand changed number of lines in unexpected way"
+msgstr "E204: autocommand heeft op onverwachte wijze het aantal regels gewijzigd"
+
+#: fileio.c:3485
+msgid "NetBeans disallows writes of unmodified buffers"
+msgstr "Netbeans staat het opslaan van onveranderde buffers niet toe"
+
+#: fileio.c:3493
+msgid "Partial writes disallowed for NetBeans buffers"
+msgstr "Deelopslag voor buffers van Netbeans niet toegestaan"
+
+#: fileio.c:3548
+#: fileio.c:3566
+msgid "is not a file or writable device"
+msgstr "is geen bestand of schrijfbaar apparaat"
+
+#: fileio.c:3577
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "het schrijven naar apparaat is uitgeschakeld met optie 'opendevice'"
+
+#: fileio.c:3619
+#: netbeans.c:3913
+msgid "is read-only (add ! to override)"
+msgstr "is alleen-lezen (voeg ! toe om te schrijven)"
+
+#: fileio.c:3983
+msgid "E506: Can't write to backup file (add ! to override)"
+msgstr "E506: kan niet naar back-upbestand schrijven (voeg hiervoor ! toe)"
+
+#: fileio.c:3995
+msgid "E507: Close error for backup file (add ! to override)"
+msgstr "E507: fout tijdens afsluiten van back-upbestand (voeg ! om toch af te sluiten)"
+
+#: fileio.c:3997
+msgid "E508: Can't read file for backup (add ! to override)"
+msgstr "E508: kan bestand voor back-up niet lezen (voeg ! toe om toch te lezen)"
+
+#: fileio.c:4016
+msgid "E509: Cannot create backup file (add ! to override)"
+msgstr "E509: kan back-upbestand niet aanmaken (voeg ! toe om dit toch aan te maken)"
+
+#: fileio.c:4118
+msgid "E510: Can't make backup file (add ! to override)"
+msgstr "E510: kan back-upbestand niet maken (voeg ! toe om dit toch te maken)"
+
+#: fileio.c:4180
+msgid "E460: The resource fork would be lost (add ! to override)"
+msgstr "E460: de afsplitsing van middelen zou verloren gaan (voeg ! toe om dit toch te doen)"
+
+#: fileio.c:4289
+msgid "E214: Can't find temp file for writing"
+msgstr "E214: kan tijdelijk bestand voor wegschrijven niet vinden"
+
+#: fileio.c:4307
+msgid "E213: Cannot convert (add ! to write without conversion)"
+msgstr "E213: kan niet omzetten (voeg ! toe om zonder omzetting op te slaan)"
+
+#: fileio.c:4342
+msgid "E166: Can't open linked file for writing"
+msgstr "E166: kan niet schrijven naar gekoppeld bestand"
+
+#: fileio.c:4346
+msgid "E212: Can't open file for writing"
+msgstr "E212: kan niet schrijven naar bestand"
+
+#: fileio.c:4648
+msgid "E667: Fsync failed"
+msgstr "E667: fsync is mislukt"
+
+#: fileio.c:4687
+msgid "E512: Close failed"
+msgstr "E512: Afsluiten is mislukt"
+
+#: fileio.c:4739
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr "E513: schrijffout waarbij omzetting is mislukt (leeg 'fenc' om te overschrijven)"
+
+#: fileio.c:4744
+#, c-format
+msgid "E513: write error, conversion failed in line %ld (make 'fenc' empty to override)"
+msgstr "E513: schrijffout waarbij omzetting in regel %ld is mislukt (leeg 'fenc' om te overschrijven)"
+
+#: fileio.c:4753
+msgid "E514: write error (file system full?)"
+msgstr "E514: schrijffout (is bestandssysteem vol?)"
+
+#: fileio.c:4821
+msgid " CONVERSION ERROR"
+msgstr " OMZETTINGFOUT"
+
+#: fileio.c:4826
+#, c-format
+msgid " in line %ld;"
+msgstr " in regel %ld;"
+
+#: fileio.c:4843
+msgid "[Device]"
+msgstr "[Apparaat]"
+
+#: fileio.c:4848
+msgid "[New]"
+msgstr "[Nieuw]"
+
+#: fileio.c:4870
+msgid " [a]"
+msgstr " [a]"
+
+#: fileio.c:4870
+msgid " appended"
+msgstr " toegevoegd"
+
+#: fileio.c:4872
+msgid " [w]"
+msgstr " [w]"
+
+#: fileio.c:4872
+msgid " written"
+msgstr " opgeslagen"
+
+#: fileio.c:4927
+msgid "E205: Patchmode: can't save original file"
+msgstr "E205: patch-modus: kan oorspronkelijke bestand niet opslaan"
+
+#: fileio.c:4950
+msgid "E206: patchmode: can't touch empty original file"
+msgstr "E206: patch-modus: kan oorspronkelijk leeg bestand niet aanraken"
+
+#: fileio.c:4965
+msgid "E207: Can't delete backup file"
+msgstr "E207: back-upbestand kan niet worden verwijderd"
+
+#: fileio.c:5031
+msgid ""
+"\n"
+"WARNING: Original file may be lost or damaged\n"
+msgstr ""
+"\n"
+"WAARSCHUWING: oorspronkelijk bestand kan verloren gaan of beschadigen\n"
+
+#: fileio.c:5033
+msgid "don't quit the editor until the file is successfully written!"
+msgstr "verlaat vim niet voordat het bestand volledig opgeslagen is!"
+
+#: fileio.c:5189
+msgid "[dos]"
+msgstr "[dos]"
+
+#: fileio.c:5189
+msgid "[dos format]"
+msgstr "[dos-format]"
+
+#: fileio.c:5196
+msgid "[mac]"
+msgstr "[mac]"
+
+#: fileio.c:5196
+msgid "[mac format]"
+msgstr "[mac-format]"
+
+#: fileio.c:5203
+msgid "[unix]"
+msgstr "[unix]"
+
+#: fileio.c:5203
+msgid "[unix format]"
+msgstr "[unix-format]"
+
+#: fileio.c:5236
+msgid "1 line, "
+msgstr "1 regel, "
+
+#: fileio.c:5238
+#, c-format
+msgid "%ld lines, "
+msgstr "%ld regels, "
+
+#: fileio.c:5241
+msgid "1 character"
+msgstr "1 teken"
+
+#: fileio.c:5245
+#, c-format
+msgid "%lld characters"
+msgstr "%lld tekens"
+
+#: fileio.c:5247
+#, c-format
+msgid "%ld characters"
+msgstr "%ld tekens"
+
+#: fileio.c:5259
+#: netbeans.c:3853
+msgid "[noeol]"
+msgstr "[noeol]"
+
+#: fileio.c:5259
+#: netbeans.c:3854
+msgid "[Incomplete last line]"
+msgstr "[Laatste regel onvolledig]"
+
+#. don't overwrite messages here
+#. must give this prompt
+#. don't use emsg() here, don't want to flush the buffers
+#: fileio.c:5278
+msgid "WARNING: The file has been changed since reading it!!!"
+msgstr "WAARSCHUWING: het bestand is na het laden gewijzigd!!!"
+
+#: fileio.c:5280
+msgid "Do you really want to write to it"
+msgstr "Wilt u er zeker naar schrijven"
+
+#: fileio.c:6639
+#, c-format
+msgid "E208: Error writing to \"%s\""
+msgstr "E208: schrijven naar \"%s\" is mislukt"
+
+#: fileio.c:6646
+#, c-format
+msgid "E209: Error closing \"%s\""
+msgstr "E209: afsluiten van \"%s\" is mislukt"
+
+#: fileio.c:6649
+#, c-format
+msgid "E210: Error reading \"%s\""
+msgstr "E210: lezen van \"%s\" is mislukt"
+
+#: fileio.c:6911
+msgid "E246: FileChangedShell autocommand deleted buffer"
+msgstr "E246: buffer verwijderd door 'autocommand' FileChangedShell"
+
+#: fileio.c:6926
+#, c-format
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: bestand \"%s\" is niet meer beschikbaar"
+
+#: fileio.c:6941
+#, c-format
+msgid "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as well"
+msgstr "W12: waarschuwing: bestand \"%s\" en de buffer zijn gewijzigd in Vim "
+
+#: fileio.c:6942
+msgid "See \":help W12\" for more info."
+msgstr "Lees \":help W12\" voor meer informatie."
+
+#: fileio.c:6946
+#, c-format
+msgid "W11: Warning: File \"%s\" has changed since editing started"
+msgstr "W11: waarschuwing: bestand \"%s\" is gewijzigd sinds het begin van het bewerken"
+
+#: fileio.c:6947
+msgid "See \":help W11\" for more info."
+msgstr "Lees \":help W11\" voor meer informatie."
+
+#: fileio.c:6951
+#, c-format
+msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
+msgstr "W16: waarschuwing: rechten van bestand \"%s\" zijn gewijzigd sinds het begin van het bewerken"
+
+#: fileio.c:6952
+msgid "See \":help W16\" for more info."
+msgstr "Lees \":help W16\" voor meer informatie"
+
+#: fileio.c:6967
+#, c-format
+msgid "W13: Warning: File \"%s\" has been created after editing started"
+msgstr "W13: waarschuwing: na het begin van het bewerken van bestand \"%s\" is deze ook elders aangemaakt"
+
+#: fileio.c:6997
+msgid "Warning"
+msgstr "Waarschuwing"
+
+#: fileio.c:6998
+msgid ""
+"&OK\n"
+"&Load File"
+msgstr ""
+"&OK\n"
+"Bestand &Laden"
+
+#: fileio.c:7121
+#, c-format
+msgid "E462: Could not prepare for reloading \"%s\""
+msgstr "E462: het voorbereiden van \"%s\" voor het opnieuw laden is mislukt"
+
+#: fileio.c:7140
+#, c-format
+msgid "E321: Could not reload \"%s\""
+msgstr "E321: kan \"%s\" niet opnieuw laden"
+
+#: fileio.c:7754
+msgid "--Deleted--"
+msgstr "--Verwijderd--"
+
+#: fileio.c:7907
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "automatisch verwijderen 'autocommand': %s <buffer=%d>"
+
+#. the group doesn't exist
+#: fileio.c:7953
+#, c-format
+msgid "E367: No such group: \"%s\""
+msgstr "E367: groep \"%s\" bestaat niet"
+
+#: fileio.c:8100
+#, c-format
+msgid "E215: Illegal character after *: %s"
+msgstr "E215: ongeldig teken na *: %s"
+
+#: fileio.c:8112
+#, c-format
+msgid "E216: No such event: %s"
+msgstr "E216: onbekend 'event': %s"
+
+#: fileio.c:8114
+#, c-format
+msgid "E216: No such group or event: %s"
+msgstr "E216: onbekende groep of 'event': %s"
+
+#. Highlight title
+#: fileio.c:8325
+msgid ""
+"\n"
+"--- Auto-Commands ---"
+msgstr ""
+"\n"
+"--- Auto-Commands ---"
+
+#: fileio.c:8561
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>: ongeldig buffernummer "
+
+#: fileio.c:8658
+msgid "E217: Can't execute autocommands for ALL events"
+msgstr "E217: autocommands kunnen niet voor alle 'events' worden uitgevoerd"
+
+#: fileio.c:8681
+msgid "No matching autocommands"
+msgstr "Geen overeenkomstige autocommands"
+
+#: fileio.c:9130
+msgid "E218: autocommand nesting too deep"
+msgstr "E218: hierarchie van aanroepen autocommands te diep"
+
+#: fileio.c:9483
+#, c-format
+msgid "%s Auto commands for \"%s\""
+msgstr "%s 'Auto commands' voor \"%s\""
+
+#: fileio.c:9493
+#, c-format
+msgid "Executing %s"
+msgstr "%s uitvoeren"
+
+#: fileio.c:9562
+#, c-format
+msgid "autocommand %s"
+msgstr "autocommand %s"
+
+#: fileio.c:10252
+msgid "E219: Missing {."
+msgstr "E219: ontbrekende {."
+
+#: fileio.c:10254
+msgid "E220: Missing }."
+msgstr "E220: ontbrekende }."
+
+#: fold.c:68
+msgid "E490: No fold found"
+msgstr "E490: geen vouw gevonden"
+
+#: fold.c:593
+msgid "E350: Cannot create fold with current 'foldmethod'"
+msgstr "E350: kan geen vouw aanmaken met huidige 'vouwmethode'"
+
+#: fold.c:595
+msgid "E351: Cannot delete fold with current 'foldmethod'"
+msgstr "E351: kan geen vouw verwijderen met huidige 'vouwmethode'"
+
+#: fold.c:1998
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld regels gevouwen "
+
+#: getchar.c:252
+msgid "E222: Add to read buffer"
+msgstr "E222: aan leesbuffer toevoegen"
+
+#: getchar.c:2418
+msgid "E223: recursive mapping"
+msgstr "E223: recursieve toewijzing"
+
+#: getchar.c:3404
+#, c-format
+msgid "E224: global abbreviation already exists for %s"
+msgstr "E224: algemene afkorting bestaat al voor %s"
+
+#: getchar.c:3407
+#, c-format
+msgid "E225: global mapping already exists for %s"
+msgstr "E225: er bestaat al een algemene toewijzing voor %s"
+
+#: getchar.c:3539
+#, c-format
+msgid "E226: abbreviation already exists for %s"
+msgstr "E226: er bestaat al een afkorting voor %s"
+
+#: getchar.c:3542
+#, c-format
+msgid "E227: mapping already exists for %s"
+msgstr "E227: toewijzing bestaat al voor %s"
+
+#: getchar.c:3610
+msgid "No abbreviation found"
+msgstr "Geen afkorting gevonden"
+
+#: getchar.c:3612
+msgid "No mapping found"
+msgstr "Geen toewijzing gevonden"
+
+#: getchar.c:4725
+msgid "E228: makemap: Illegal mode"
+msgstr "E228: makemap: ongeldige modus"
+
+#: gui.c:226
+msgid "E229: Cannot start the GUI"
+msgstr "E229: de GUI kan niet worden gestart"
+
+#: gui.c:361
+#, c-format
+msgid "E230: Cannot read from \"%s\""
+msgstr "E230: kan niet gelezen worden uit \"%s\""
+
+#: gui.c:487
+msgid "E665: Cannot start GUI, no valid font found"
+msgstr "E665: de GUI kan niet gestart worden, er is geen geldig lettertype gevonden"
+
+#: gui.c:492
+msgid "E231: 'guifontwide' invalid"
+msgstr "E231: 'guifontwide' ongeldig"
+
+#: gui.c:598
+msgid "E599: Value of 'imactivatekey' is invalid"
+msgstr "E599: waarde van 'imactivatekey' is ongeldig"
+
+#: gui.c:4528
+#, c-format
+msgid "E254: Cannot allocate color %s"
+msgstr "E254: kan de kleur %s niet reserveren"
+
+#: gui.c:5112
+msgid "No match at cursor, finding next"
+msgstr "Op cursorpositie is geen overeenkomst: de volgende zoeken"
+
+#: gui_at_fs.c:300
+msgid "<cannot open> "
+msgstr "<kan niet openen> "
+
+#: gui_at_fs.c:1133
+#, c-format
+msgid "E616: vim_SelFile: can't get font %s"
+msgstr "E616: vim_SelFile: lettertype %s niet gevonden"
+
+#: gui_at_fs.c:2767
+msgid "E614: vim_SelFile: can't return to current directory"
+msgstr "E614: vim_SelFile: teruggaan naar huidige map is niet mogelijk"
+
+#: gui_at_fs.c:2787
+msgid "Pathname:"
+msgstr "Padnaam:"
+
+#: gui_at_fs.c:2793
+msgid "E615: vim_SelFile: can't get current directory"
+msgstr "E615: vim_SelFile: vaststellen huidige map is niet mogelijk"
+
+#: gui_at_fs.c:2801
+#: gui_xmdlg.c:931
+msgid "OK"
+msgstr "Ok"
+
+#: gui_at_fs.c:2801
+#: gui_gtk.c:2818
+#: gui_xmdlg.c:940
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: gui_at_sb.c:490
+msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
+msgstr "Scrollbar-widget: vaststellen afmetingen van miniaturenkaart niet mogelijk."
+
+#: gui_athena.c:2160
+#: gui_motif.c:2588
+msgid "Vim dialog"
+msgstr "Vim-dialoog"
+
+#: gui_beval.c:202
+#: gui_w32.c:4740
+msgid "E232: Cannot create BalloonEval with both message and callback"
+msgstr "E232: aanmaken 'BalloonEval' met zowel een bericht als een 'callback' is niet mogelijk"
+
+#: gui_gtk.c:1694
+msgid "Vim dialog..."
+msgstr "Vim-dialoog..."
+
+#: gui_gtk.c:2145
+#: message.c:3654
+msgid ""
+"&Yes\n"
+"&No\n"
+"&Cancel"
+msgstr ""
+"&Ja\n"
+"&Nee\n"
+"&Annuleren"
+
+#: gui_gtk.c:2343
+msgid "Input _Methods"
+msgstr "Invoer_wijzen"
+
+#: gui_gtk.c:2621
+#: gui_motif.c:3761
+msgid "VIM - Search and Replace..."
+msgstr "VIM - zoeken en vervangen..."
+
+#: gui_gtk.c:2629
+#: gui_motif.c:3763
+msgid "VIM - Search..."
+msgstr "VIM - zoeken..."
+
+#: gui_gtk.c:2661
+#: gui_motif.c:3872
+msgid "Find what:"
+msgstr "Zoek naar:"
+
+#: gui_gtk.c:2679
+#: gui_motif.c:3905
+msgid "Replace with:"
+msgstr "Vervang door:"
+
+#. whole word only button
+#: gui_gtk.c:2711
+#: gui_motif.c:4026
+msgid "Match whole word only"
+msgstr "Alleen volledig woord"
+
+#. match case button
+#: gui_gtk.c:2722
+#: gui_motif.c:4038
+msgid "Match case"
+msgstr "Hoofdlettergevoelig"
+
+#: gui_gtk.c:2732
+#: gui_motif.c:3977
+msgid "Direction"
+msgstr "Richting"
+
+#. 'Up' and 'Down' buttons
+#: gui_gtk.c:2744
+#: gui_motif.c:3990
+msgid "Up"
+msgstr "Opwaarts"
+
+#: gui_gtk.c:2748
+#: gui_motif.c:3999
+msgid "Down"
+msgstr "Neerwaarts"
+
+#: gui_gtk.c:2770
+#: gui_gtk.c:2772
+msgid "Find Next"
+msgstr "Volgende zoeken"
+
+#: gui_gtk.c:2789
+#: gui_gtk.c:2791
+msgid "Replace"
+msgstr "Vervangen"
+
+#: gui_gtk.c:2802
+#: gui_gtk.c:2804
+msgid "Replace All"
+msgstr "Alles vervangen"
+
+#: gui_gtk_x11.c:2432
+msgid "Vim: Received \"die\" request from session manager\n"
+msgstr "Vim: \"die\"-verzoek van sessiebeheerder ontvangen\n"
+
+#: gui_gtk_x11.c:3259
+msgid "Close"
+msgstr "Sluiten"
+
+#: gui_gtk_x11.c:3260
+#: gui_w48.c:2374
+msgid "New tab"
+msgstr "Nieuw tabblad"
+
+#: gui_gtk_x11.c:3261
+msgid "Open Tab..."
+msgstr "Tabblad openen..."
+
+#: gui_gtk_x11.c:4092
+msgid "Vim: Main window unexpectedly destroyed\n"
+msgstr "Vim: hoofdvenster onverwacht gesloten\n"
+
+#: gui_gtk_x11.c:4807
+msgid "Font Selection"
+msgstr "Lettertypeselectie"
+
+#: gui_motif.c:2355
+msgid "&Filter"
+msgstr "&Filter"
+
+#: gui_motif.c:2356
+#: gui_motif.c:3840
+msgid "&Cancel"
+msgstr "&Annuleren"
+
+#: gui_motif.c:2357
+msgid "Directories"
+msgstr "Mappen"
+
+#: gui_motif.c:2358
+msgid "Filter"
+msgstr "Filter"
+
+#: gui_motif.c:2359
+msgid "&Help"
+msgstr "&Hulp"
+
+#: gui_motif.c:2360
+msgid "Files"
+msgstr "Bestanden"
+
+#: gui_motif.c:2361
+msgid "&OK"
+msgstr "&Ok"
+
+#: gui_motif.c:2362
+msgid "Selection"
+msgstr "Selectie"
+
+#: gui_motif.c:3792
+msgid "Find &Next"
+msgstr "&Volgende zoeken"
+
+#: gui_motif.c:3807
+msgid "&Replace"
+msgstr "Ve&rvangen"
+
+#: gui_motif.c:3818
+msgid "Replace &All"
+msgstr "&Alles vervangen"
+
+#: gui_motif.c:3829
+msgid "&Undo"
+msgstr "&Herstellen"
+
+#: gui_riscos.c:953
+#, c-format
+msgid "E610: Can't load Zap font '%s'"
+msgstr "E610: Zap-lettertype '%s' kan niet worden geladen"
+
+#: gui_riscos.c:1052
+#, c-format
+msgid "E611: Can't use font %s"
+msgstr "E611: lettertype %s kan niet worden gebruikt"
+
+#: gui_riscos.c:3282
+msgid ""
+"\n"
+"Sending message to terminate child process.\n"
+msgstr ""
+"\n"
+"Bericht versturen om kindproces te beëindigen.\n"
+
+#: gui_w32.c:1178
+#, c-format
+msgid "E671: Cannot find window title \"%s\""
+msgstr "E671: kan venstertitel \"%s\" niet vinden"
+
+#: gui_w32.c:1191
+#, c-format
+msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
+msgstr "E243: argument niet ondersteund: \"-%s\"; gebruik de OLE-versie."
+
+#: gui_w32.c:1432
+msgid "E672: Unable to open window inside MDI application"
+msgstr "E672: kan geen venster binnen MDI-applicatie openen"
+
+#: gui_w48.c:2373
+msgid "Close tab"
+msgstr "Tabblad sluiten"
+
+#: gui_w48.c:2376
+msgid "Open tab..."
+msgstr "Tabblad openen..."
+
+#: gui_w48.c:2632
+msgid "Find string (use '\\\\' to find  a '\\')"
+msgstr "Tekenreeks zoeken (gebruik '\\\\' om een '\\' te vinden)"
+
+#: gui_w48.c:2668
+msgid "Find & Replace (use '\\\\' to find  a '\\')"
+msgstr "Zoeken & vervangen (gebruik '\\\\' om een '\\' te vinden')"
+
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+#: gui_w48.c:3462
+msgid "Not Used"
+msgstr "Niet gebruikt"
+
+#: gui_w48.c:3463
+msgid "Directory\t*.nothing\n"
+msgstr "Map\t*.niets\n"
+
+#: gui_x11.c:1545
+msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
+msgstr "E458: kan geen kleur toewijzen, sommige kleuren kunnen onjuist zijn"
+
+#: gui_x11.c:2137
+#, c-format
+msgid "E250: Fonts for the following charsets are missing in fontset %s:"
+msgstr "E250: lettertypen voor de volgende tekenverzamelingen ontbreken in verzameling %s:"
+
+#: gui_x11.c:2180
+#, c-format
+msgid "E252: Fontset name: %s"
+msgstr "E252: naam lettertypeverzameling: %s"
+
+#: gui_x11.c:2181
+#, c-format
+msgid "Font '%s' is not fixed-width"
+msgstr "Lettertype '%s' heeft geen vaste breedte"
+
+#: gui_x11.c:2200
+#, c-format
+msgid "E253: Fontset name: %s\n"
+msgstr "E253: naam lettertypeverzameling: %s\n"
+
+#: gui_x11.c:2201
+#, c-format
+msgid "Font0: %s\n"
+msgstr "Font0: %s\n"
+
+#: gui_x11.c:2202
+#, c-format
+msgid "Font1: %s\n"
+msgstr "Font1: %s\n"
+
+#: gui_x11.c:2203
+#, c-format
+msgid "Font%ld width is not twice that of font0\n"
+msgstr "Breedte font%ld is niet het dubbele van font0\n"
+
+#: gui_x11.c:2204
+#, c-format
+msgid "Font0 width: %ld\n"
+msgstr "Font0-breedte: %ld\n"
+
+#: gui_x11.c:2205
+#, c-format
+msgid ""
+"Font1 width: %ld\n"
+"\n"
+msgstr ""
+"Font1-breedte: %ld\n"
+"\n"
+
+#: gui_xmdlg.c:690
+#: gui_xmdlg.c:809
+msgid "Invalid font specification"
+msgstr "Onjuiste specificatie van lettertype"
+
+#: gui_xmdlg.c:691
+#: gui_xmdlg.c:810
+msgid "&Dismiss"
+msgstr "&Afwijzen"
+
+#: gui_xmdlg.c:700
+msgid "no specific match"
+msgstr "geen specifieke overeenkomst"
+
+#: gui_xmdlg.c:909
+msgid "Vim - Font Selector"
+msgstr "Vim - Lettertypekiezer"
+
+#: gui_xmdlg.c:978
+msgid "Name:"
+msgstr "Naam:"
+
+#. create toggle button
+#: gui_xmdlg.c:1018
+msgid "Show size in Points"
+msgstr "Grootte in punten tonen"
+
+#: gui_xmdlg.c:1037
+msgid "Encoding:"
+msgstr "Codering:"
+
+#: gui_xmdlg.c:1083
+msgid "Font:"
+msgstr "Lettertype:"
+
+#: gui_xmdlg.c:1116
+msgid "Style:"
+msgstr "Stijl:"
+
+#: gui_xmdlg.c:1148
+msgid "Size:"
+msgstr "Grootte:"
+
+#: hangulin.c:610
+msgid "E256: Hangul automata ERROR"
+msgstr "E256: 'Hangul automata'-fout"
+
+#: hardcopy.c:210
+msgid "E550: Missing colon"
+msgstr "E550: dubbelepunt ontbreekt"
+
+#: hardcopy.c:222
+msgid "E551: Illegal component"
+msgstr "E551: ongeldige component"
+
+#: hardcopy.c:230
+msgid "E552: digit expected"
+msgstr "E552: cijfer verwacht"
+
+#: hardcopy.c:501
+#, c-format
+msgid "Page %d"
+msgstr "Pagina %d"
+
+#: hardcopy.c:658
+msgid "No text to be printed"
+msgstr "Geen tekst om af te drukken"
+
+#: hardcopy.c:736
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Afdrukken van pagina %d (%d%%)"
+
+#: hardcopy.c:748
+#, c-format
+msgid " Copy %d of %d"
+msgstr "Kopie %d van %d"
+
+#: hardcopy.c:806
+#, c-format
+msgid "Printed: %s"
+msgstr "Afgedrukt: %s"
+
+#: hardcopy.c:814
+msgid "Printing aborted"
+msgstr "Afdrukken afgebroken"
+
+#: hardcopy.c:1469
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: wegschrijven Postscript-uitvoerbestand is mislukt"
+
+#: hardcopy.c:1931
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: openen bestand \"%s\" is mislukt"
+
+#: hardcopy.c:1941
+#: hardcopy.c:2822
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: kan 'Postscript resource'-bestand \"%s\" niet lezen"
+
+#: hardcopy.c:1957
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618L bestand \"%s\" is geen 'Postscript resource'-bestand"
+
+#: hardcopy.c:1975
+#: hardcopy.c:1994
+#: hardcopy.c:2037
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: bestand \"%s\" is geen ondersteund 'Postscript resource'-bestand"
+
+#: hardcopy.c:2056
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: 'resource'-bestand \"%s\" heeft verkeerde versie"
+
+#: hardcopy.c:2543
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Multi-byte-codering en de tekenverzameling zijn onverenigbaar."
+
+#: hardcopy.c:2560
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset mag bij multi-byte-codering niet leeg zijn."
+
+#: hardcopy.c:2578
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: geen standaard lettertype opgegeven voor multi-byte-afdrukken."
+
+#: hardcopy.c:2771
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: openen van PostScript-uitoverbestand is mislukt"
+
+#: hardcopy.c:2808
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Bestand \"%s\" kan niet worden geopend"
+
+#: hardcopy.c:2942
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: 'PostScript resource'-bestand \"prolog.ps\" is niet gevonden"
+
+#: hardcopy.c:2955
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: 'PostScript resource'-bestand \"cidfont.ps\" is niet gevonden"
+
+#: hardcopy.c:2993
+#: hardcopy.c:3015
+#: hardcopy.c:3044
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: 'PostScript resource'-bestand \"%s.ps\" is niet gevonden"
+
+#: hardcopy.c:3031
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: omzetten naar afdrukcodering \"%s\" is mislukt"
+
+#: hardcopy.c:3285
+msgid "Sending to printer..."
+msgstr "Naar printer versturen..."
+
+#: hardcopy.c:3289
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: Afdrukken van PostScript-bestand is mislukt"
+
+#: hardcopy.c:3291
+msgid "Print job sent."
+msgstr "Afdrukopdracht verzonden"
+
+#: if_cscope.c:77
+msgid "Add a new database"
+msgstr "Nieuwe databank toevoegen"
+
+#: if_cscope.c:79
+msgid "Query for a pattern"
+msgstr "Naar een patroon zoeken"
+
+#: if_cscope.c:81
+msgid "Show this message"
+msgstr "Dit bericht tonen"
+
+#: if_cscope.c:83
+msgid "Kill a connection"
+msgstr "Een verbinding verbreken"
+
+#: if_cscope.c:85
+msgid "Reinit all connections"
+msgstr "Alle verbindingen opnieuw initialiseren"
+
+#: if_cscope.c:87
+msgid "Show connections"
+msgstr "Verbindingen tonen"
+
+#: if_cscope.c:95
+#, c-format
+msgid "E560: Usage: cs[cope] %s"
+msgstr "E560: Gebruik: cs[cope] %s"
+
+#: if_cscope.c:236
+msgid "This cscope command does not support splitting the window.\n"
+msgstr "Deze cscope-opdracht ondersteunt niet het splitsen van het venster.\n"
+
+#: if_cscope.c:287
+msgid "E562: Usage: cstag <ident>"
+msgstr "E562: Gebruik: cstag <ident>"
+
+#: if_cscope.c:345
+msgid "E257: cstag: tag not found"
+msgstr "E257: cstag: tag is gevonden"
+
+#: if_cscope.c:515
+#, c-format
+msgid "E563: stat(%s) error: %d"
+msgstr "E563: bevraag((%s) fout: %d"
+
+#: if_cscope.c:525
+msgid "E563: stat error"
+msgstr "E563: bevragingsfout"
+
+#: if_cscope.c:622
+#, c-format
+msgid "E564: %s is not a directory or a valid cscope database"
+msgstr "E564: %s is geen map of een geldige cscope-databank"
+
+#: if_cscope.c:640
+#, c-format
+msgid "Added cscope database %s"
+msgstr "cscope-databank %s toegevoegd"
+
+#: if_cscope.c:695
+#, c-format
+msgid "E262: error reading cscope connection %ld"
+msgstr "E262: lezen van cscope-verbinding %ld is mislukt"
+
+#: if_cscope.c:802
+msgid "E561: unknown cscope search type"
+msgstr "E561: soort cscope-zoekopdracht is onbekend"
+
+#: if_cscope.c:866
+#: if_cscope.c:905
+msgid "E566: Could not create cscope pipes"
+msgstr "E566: aanmaken cscopei-pijp is mislukt"
+
+#: if_cscope.c:882
+msgid "E622: Could not fork for cscope"
+msgstr "E622: nieuw cscope-proces beginnen is mislukt"
+
+#: if_cscope.c:992
+#: if_cscope.c:1029
+msgid "cs_create_connection exec failed"
+msgstr "uitvoering cs_create_connection is mislukt"
+
+#: if_cscope.c:1002
+#: if_cscope.c:1042
+msgid "cs_create_connection: fdopen for to_fp failed"
+msgstr "cs_create_connection: fdopen voor to_fp is mislukt"
+
+#: if_cscope.c:1004
+#: if_cscope.c:1046
+msgid "cs_create_connection: fdopen for fr_fp failed"
+msgstr "cs_create_connection: fdopen voor fr_fp is mislukt"
+
+#: if_cscope.c:1030
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: voortbrengen cscope-proces is mislukt"
+
+#: if_cscope.c:1074
+msgid "E567: no cscope connections"
+msgstr "E567: geen cscope-verbindingen"
+
+#: if_cscope.c:1155
+#, c-format
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: cscopequickfix-vlag %c voor %c is ongeldig"
+
+#: if_cscope.c:1218
+#, c-format
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: cscope-zoekopdracht %s van %s leverde geen resultaten"
+
+#: if_cscope.c:1324
+msgid "cscope commands:\n"
+msgstr "cscope-opdrachten:\n"
+
+#: if_cscope.c:1333
+#, c-format
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (Gebruik: %s)"
+
+#: if_cscope.c:1338
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find assignments to\n"
+msgstr ""
+"\n"
+"       c: zoek functies die deze functie aanroepen\n"
+"       d: zoek functies die door deze functie worden aangeroepen\n"
+"       e: zoek op dit egrep-patroon\n"
+"       f: zoek dit bestand\n"
+"       g: zoek deze definitie\n"
+"       i: zoek bestanden #inclusief dit bestand\n"
+"       s: zoek dit C-symbool\n"
+"       t: zoek toekenningen aan\n"
+
+#: if_cscope.c:1426
+#, c-format
+msgid "E625: cannot open cscope database: %s"
+msgstr "E625: openen is mislukt van cscope-databank: %s"
+
+#: if_cscope.c:1444
+msgid "E626: cannot get cscope database information"
+msgstr "E626: opvragen cscope-databankinformatie is mislukt"
+
+#: if_cscope.c:1469
+msgid "E568: duplicate cscope database not added"
+msgstr "E568: dubbele cscope-databank is niet toegevoegd"
+
+#: if_cscope.c:1614
+#, c-format
+msgid "E261: cscope connection %s not found"
+msgstr "E261: cscope-verbinding %s is niet gevonden"
+
+#: if_cscope.c:1648
+#, c-format
+msgid "cscope connection %s closed"
+msgstr "cscope-verbinding %s is verbroken"
+
+#. should not reach here
+#: if_cscope.c:1788
+msgid "E570: fatal error in cs_manage_matches"
+msgstr "E570: fatale fout in cs_manage_matches"
+
+#: if_cscope.c:2050
+#, c-format
+msgid "Cscope tag: %s"
+msgstr "Cscope-tag: %s"
+
+#: if_cscope.c:2072
+msgid ""
+"\n"
+"   #   line"
+msgstr ""
+"\n"
+"   #   regel"
+
+#: if_cscope.c:2074
+msgid "filename / context / line\n"
+msgstr "bestandsnaam / context / regel\n"
+
+#: if_cscope.c:2186
+#, c-format
+msgid "E609: Cscope error: %s"
+msgstr "E609: Cscope-fout: %s"
+
+#: if_cscope.c:2459
+msgid "All cscope databases reset"
+msgstr "Alle cscope-databanken opnieuw ingesteld"
+
+#: if_cscope.c:2526
+msgid "no cscope connections\n"
+msgstr "geen cscope-verbindingen\n"
+
+#: if_cscope.c:2530
+msgid " # pid    database name                       prepend path\n"
+msgstr " # pid    databanknaam                        padvoorvoegsel\n"
+
+#: if_mzsch.c:1038
+msgid "E815: Sorry, this command is disabled, the MzScheme libraries could not be loaded."
+msgstr "E815: helaas, deze opdracht is uitgeschakeld. De MzScheme-bibliotheken kunnen niet geladen worden."
+
+#: if_mzsch.c:1425
+#: if_python.c:1271
+#: if_tcl.c:1404
+msgid "invalid expression"
+msgstr "ongeldige uitdrukking"
+
+#: if_mzsch.c:1433
+#: if_python.c:1290
+#: if_tcl.c:1409
+msgid "expressions disabled at compile time"
+msgstr "tijdens compileren zijn de expressies uitgeschakeld"
+
+#: if_mzsch.c:1522
+msgid "hidden option"
+msgstr "verborgen optie"
+
+#: if_mzsch.c:1524
+#: if_tcl.c:501
+msgid "unknown option"
+msgstr "onbekende optie"
+
+#: if_mzsch.c:1683
+msgid "window index is out of range"
+msgstr "vensterindex valt buiten het bereik"
+
+#: if_mzsch.c:1843
+msgid "couldn't open buffer"
+msgstr "buffer openen is mislukt"
+
+#: if_mzsch.c:2123
+#: if_mzsch.c:2153
+#: if_mzsch.c:2250
+#: if_mzsch.c:2314
+#: if_mzsch.c:2435
+#: if_mzsch.c:2492
+#: if_python.c:2508
+#: if_python.c:2542
+#: if_python.c:2601
+#: if_python.c:2668
+#: if_python.c:2790
+#: if_python.c:2842
+#: if_tcl.c:684
+#: if_tcl.c:729
+#: if_tcl.c:803
+#: if_tcl.c:875
+#: if_tcl.c:2017
+msgid "cannot save undo information"
+msgstr "herstelinformatie kan niet worden opgeslagen"
+
+#: if_mzsch.c:2128
+#: if_mzsch.c:2258
+#: if_mzsch.c:2328
+#: if_python.c:2510
+#: if_python.c:2608
+#: if_python.c:2679
+msgid "cannot delete line"
+msgstr "regel kan niet worden verwijderd"
+
+#: if_mzsch.c:2159
+#: if_mzsch.c:2343
+#: if_python.c:2547
+#: if_python.c:2695
+#: if_tcl.c:690
+#: if_tcl.c:2039
+msgid "cannot replace line"
+msgstr "regel kan niet worden vervangen"
+
+#: if_mzsch.c:2358
+#: if_mzsch.c:2441
+#: if_mzsch.c:2502
+#: if_python.c:2713
+#: if_python.c:2792
+#: if_python.c:2850
+msgid "cannot insert line"
+msgstr "regel kan niet worden ingevoegd"
+
+#: if_mzsch.c:2593
+#: if_python.c:2962
+msgid "string cannot contain newlines"
+msgstr "tekenreeks kan geen regeleinden bevatten"
+
+#: if_mzsch.c:3034
+msgid "Vim error: ~a"
+msgstr "Vim-fout: ~a"
+
+#: if_mzsch.c:3067
+msgid "Vim error"
+msgstr "Vim-fout"
+
+#: if_mzsch.c:3133
+msgid "buffer is invalid"
+msgstr "buffer is ongeldig"
+
+#: if_mzsch.c:3142
+msgid "window is invalid"
+msgstr "venster is ongeldig"
+
+#: if_mzsch.c:3162
+msgid "linenr out of range"
+msgstr "regelnummer buiten het bereik"
+
+#: if_mzsch.c:3313
+#: if_mzsch.c:3355
+msgid "not allowed in the Vim sandbox"
+msgstr "niet toegestaan in de Vim-zandbak"
+
+#: if_python.c:517
+msgid "E263: Sorry, this command is disabled, the Python library could not be loaded."
+msgstr "E263: helaas, deze opdracht is uitgeschakeld. De Python-bibliotheek kan niet worden geladen."
+
+#: if_python.c:583
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Python kan niet recursief worden aangeroepen"
+
+#: if_python.c:776
+msgid "can't delete OutputObject attributes"
+msgstr "attributen van OutputObject kunnen niet worden verwijderd"
+
+#: if_python.c:783
+msgid "softspace must be an integer"
+msgstr "zachte spatie moet een geheel getal zijn"
+
+#: if_python.c:791
+msgid "invalid attribute"
+msgstr "ongeldig attribuut"
+
+#: if_python.c:830
+#: if_python.c:844
+msgid "writelines() requires list of strings"
+msgstr "writelines() vereist een lijst met tekenreeksen"
+
+#: if_python.c:970
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: initialiseren I/O-objecten is mislukt"
+
+#: if_python.c:1303
+msgid "attempt to refer to deleted buffer"
+msgstr "poging om naar een verwijderd buffer te verwijzen"
+
+#: if_python.c:1318
+#: if_python.c:1359
+#: if_python.c:1423
+#: if_tcl.c:1216
+msgid "line number out of range"
+msgstr "regelnummer valt buiten het bereik"
+
+#: if_python.c:1558
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<buffer-object (verwijderd) bij %p>"
+
+#: if_python.c:1649
+#: if_tcl.c:836
+msgid "invalid mark name"
+msgstr "naam markering ongeldig"
+
+#: if_python.c:1927
+msgid "no such buffer"
+msgstr "onbekende buffer"
+
+#: if_python.c:2015
+msgid "attempt to refer to deleted window"
+msgstr "poging om naar een verwijderd venster te verwijzen"
+
+#: if_python.c:2060
+msgid "readonly attribute"
+msgstr "alleen-lezen attribuut"
+
+#: if_python.c:2074
+msgid "cursor position outside buffer"
+msgstr "cursorpositie valt buiten buffer"
+
+#: if_python.c:2157
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<venster-object (verwijderd) bij %p>"
+
+#: if_python.c:2169
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<venster-object (onbekend) bij %p>"
+
+#: if_python.c:2172
+#, c-format
+msgid "<window %d>"
+msgstr "<venster %d>"
+
+#: if_python.c:2246
+msgid "no such window"
+msgstr "onbekend venster"
+
+#: if_ruby.c:554
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ moet een instantie van String zijn"
+
+#: if_ruby.c:630
+msgid "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
+msgstr "E266: helaas, deze opdracht is uitgeschakeld. De Ruby-bibliotheek kan niet worden geladen."
+
+#: if_ruby.c:662
+msgid "E267: unexpected return"
+msgstr "E267: onverwacht resultaat"
+
+#: if_ruby.c:665
+msgid "E268: unexpected next"
+msgstr "E268: onverwachte volgende"
+
+#: if_ruby.c:668
+msgid "E269: unexpected break"
+msgstr "E269: onverwachte onderbreking"
+
+#: if_ruby.c:671
+msgid "E270: unexpected redo"
+msgstr "E270: onverwachte herstelopdracht"
+
+#: if_ruby.c:674
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: hernieuwde poging buiten de reddingsclausule"
+
+#: if_ruby.c:686
+msgid "E272: unhandled exception"
+msgstr "E272: niet-afgehandelde uitzondering"
+
+#: if_ruby.c:701
+#, c-format
+msgid "E273: unknown longjmp status %d"
+msgstr "E273: onbekende longjmp-status %d"
+
+#: if_sniff.c:64
+msgid "Toggle implementation/definition"
+msgstr "Implementatie/definitie wisselen"
+
+#: if_sniff.c:65
+msgid "Show base class of"
+msgstr "Toon basisklasse van"
+
+#: if_sniff.c:66
+msgid "Show overridden member function"
+msgstr "Toon overschreven member-functie"
+
+#: if_sniff.c:67
+msgid "Retrieve from file"
+msgstr "Uit bestand halen"
+
+#: if_sniff.c:68
+msgid "Retrieve from project"
+msgstr "Uit project halen"
+
+#: if_sniff.c:70
+msgid "Retrieve from all projects"
+msgstr "Uit alle projecten halen"
+
+#: if_sniff.c:71
+msgid "Retrieve"
+msgstr "Ophalen"
+
+#: if_sniff.c:72
+msgid "Show source of"
+msgstr "Toon broncode van"
+
+#: if_sniff.c:73
+msgid "Find symbol"
+msgstr "Zoek symbool"
+
+#: if_sniff.c:74
+msgid "Browse class"
+msgstr "Bekijk klasse"
+
+#: if_sniff.c:75
+msgid "Show class in hierarchy"
+msgstr "Toon klasse in hierarchie"
+
+#: if_sniff.c:76
+msgid "Show class in restricted hierarchy"
+msgstr "Toon klasse in beperkte hierarchie"
+
+#: if_sniff.c:77
+msgid "Xref refers to"
+msgstr "Xref verwijst naar"
+
+#: if_sniff.c:78
+msgid "Xref referred by"
+msgstr "Xref wordt naar verwezen door"
+
+#: if_sniff.c:79
+msgid "Xref has a"
+msgstr "Xref heeft een"
+
+#: if_sniff.c:80
+msgid "Xref used by"
+msgstr "Xref gebruikt door"
+
+#: if_sniff.c:81
+msgid "Show docu of"
+msgstr "Toon documentatie van"
+
+#: if_sniff.c:82
+msgid "Generate docu for"
+msgstr "Genereer documentatie voor"
+
+#: if_sniff.c:94
+msgid "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in $PATH).\n"
+msgstr "Verbinden met SNiFF+ is mislukt. Controleer omgevingsvariabelen (sniffemacs moet in $PATH staan).\n"
+
+#: if_sniff.c:422
+msgid "E274: Sniff: Error during read. Disconnected"
+msgstr "E274: Sniff: leesfout. Verbroken"
+
+#: if_sniff.c:550
+msgid "SNiFF+ is currently "
+msgstr "SNiFF+ is momenteel "
+
+#: if_sniff.c:552
+msgid "not "
+msgstr "niet "
+
+#: if_sniff.c:553
+msgid "connected"
+msgstr "verbonden"
+
+#: if_sniff.c:589
+#, c-format
+msgid "E275: Unknown SNiFF+ request: %s"
+msgstr "E275: onbekend SNiFF+-verzoek: %s"
+
+#: if_sniff.c:602
+msgid "E276: Error connecting to SNiFF+"
+msgstr "E276: verbinden met SNiFF+ is mislukt"
+
+#: if_sniff.c:1013
+msgid "E278: SNiFF+ not connected"
+msgstr "E278: SNiFF+ niet verbonden"
+
+#: if_sniff.c:1022
+msgid "E279: Not a SNiFF+ buffer"
+msgstr "E279: geen SNiFF+-buffer"
+
+#: if_sniff.c:1089
+msgid "Sniff: Error during write. Disconnected"
+msgstr "Sniff: schrijven is mislukt. Verbroken"
+
+#: if_tcl.c:419
+msgid "invalid buffer number"
+msgstr "buffernummer is ongeldig"
+
+#: if_tcl.c:465
+#: if_tcl.c:935
+#: if_tcl.c:1115
+msgid "not implemented yet"
+msgstr "nog niet geïmplementeerd"
+
+#. ???
+#: if_tcl.c:774
+msgid "cannot set line(s)"
+msgstr "kan regel(s) niet instellen"
+
+#: if_tcl.c:845
+msgid "mark not set"
+msgstr "markering niet ingesteld"
+
+#: if_tcl.c:852
+#: if_tcl.c:1071
+#, c-format
+msgid "row %d column %d"
+msgstr "rij %d kolom %d"
+
+#: if_tcl.c:884
+msgid "cannot insert/append line"
+msgstr "invoegen/toevoegen regel is mislukt"
+
+#: if_tcl.c:1270
+msgid "unknown flag: "
+msgstr "unbekende instelling: "
+
+#: if_tcl.c:1340
+msgid "unknown vimOption"
+msgstr "onbekende vim-optie"
+
+#: if_tcl.c:1425
+msgid "keyboard interrupt"
+msgstr "toetsenbord-interrupt"
+
+#: if_tcl.c:1430
+msgid "vim error"
+msgstr "vim-fout"
+
+#: if_tcl.c:1474
+msgid "cannot create buffer/window command: object is being deleted"
+msgstr "aanmaken buffer-/vensteropdracht is mislukt: object wordt verwijderd"
+
+#: if_tcl.c:1550
+msgid "cannot register callback command: buffer/window is already being deleted"
+msgstr " kan 'callback'-opdracht niet registreren: buffer/venster is reeds verwijderd"
+
+#. This should never happen.  Famous last word?
+#: if_tcl.c:1569
+msgid "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim.org"
+msgstr "E280: TCL FATALE FOUT: reflist misschien corrupt!? Meld dit a.u.b. aan vim-dev@vim.org"
+
+#: if_tcl.c:1570
+msgid "cannot register callback command: buffer/window reference not found"
+msgstr "'callback'-opdracht kan niet worden geregistreerd: buffer-/vensterreferentie ontbreekt"
+
+#: if_tcl.c:1742
+msgid "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
+msgstr "E571: Helaas, deze opdracht is uitgeschakeld: het laden van de Tcl-bibliotheek is mislukt."
+
+#: if_tcl.c:1904
+msgid "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
+msgstr "E281: Tcl-fout: afsluitcode is geen geheel getal!? Meld dit a.u.b. aan vim-dev@vim.org"
+
+#: if_tcl.c:1909
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: afsluitcode %d"
+
+#: if_tcl.c:2025
+msgid "cannot get line"
+msgstr "kan regel niet verkrijgen"
+
+#: if_xcmdsrv.c:218
+msgid "Unable to register a command server name"
+msgstr "Het registreren van een opdrachtservernaam is mislukt"
+
+#: if_xcmdsrv.c:477
+msgid "E248: Failed to send command to the destination program"
+msgstr "E248: versturen van opdracht naar het doelprogramma is mislukt"
+
+#: if_xcmdsrv.c:750
+#, c-format
+msgid "E573: Invalid server id used: %s"
+msgstr "E573: ongeldige server-id gebruikt: %s"
+
+#: if_xcmdsrv.c:1131
+msgid "E251: VIM instance registry property is badly formed.  Deleted!"
+msgstr "E251: registereigenschap van VIM-instantie is misvormd.  Verwijderd!"
+
+#: main.c:138
+msgid "Unknown option argument"
+msgstr "Onbekend optieargument"
+
+#: main.c:140
+msgid "Too many edit arguments"
+msgstr "Teveel bewerkargumenten"
+
+#: main.c:142
+msgid "Argument missing after"
+msgstr "Argument ontbreekt na"
+
+#: main.c:144
+msgid "Garbage after option argument"
+msgstr "Rommel na optieargument"
+
+#: main.c:146
+msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+msgstr "Teveel \"+opdracht\", \"-c opdracht\" of \"--cmd opdracht\"-argumenten"
+
+#: main.c:148
+msgid "Invalid argument for"
+msgstr "Ongeldig argument voor"
+
+#: main.c:517
+#, c-format
+msgid "%d files to edit\n"
+msgstr "%d bestanden om te bewerken\n"
+
+#: main.c:942
+msgid "netbeans is not supported with this GUI\n"
+msgstr "Netbeans wordt door deze GUI niet ondersteund\n"
+
+#: main.c:1531
+msgid "This Vim was not compiled with the diff feature."
+msgstr "Deze Vim is niet met de diff-functionaliteit gecompileerd"
+
+#: main.c:1633
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "'-nb' kan niet worden gebruikt: was tijdens compilatie niet ingeschakeld\n"
+
+#: main.c:2165
+msgid "Attempt to open script file again: \""
+msgstr "Poging scriptbestand wederom te openen: \""
+
+#: main.c:2174
+msgid "Cannot open for reading: \""
+msgstr "Openen om te lezen is mislukt: \""
+
+#: main.c:2228
+msgid "Cannot open for script output: \""
+msgstr "Openen voor script-uitvoer is mislukt: \""
+
+#: main.c:2394
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: Fout: gvim starten vanuit Netbeans is mislukt\n"
+
+#: main.c:2399
+msgid "Vim: Warning: Output is not to a terminal\n"
+msgstr "Vim: Waarschuwing: Uitvoer gaan niet naar een terminal\n"
+
+#: main.c:2401
+msgid "Vim: Warning: Input is not from a terminal\n"
+msgstr "Vim: Waarschuwing: Invoer komt niet van een terminal\n"
+
+#. just in case..
+#: main.c:2718
+msgid "pre-vimrc command line"
+msgstr "pre-vimrc-opdracjtregel"
+
+#: main.c:2815
+#, c-format
+msgid "E282: Cannot read from \"%s\""
+msgstr "E282: Kan niet lezen vanuit \"%s\""
+
+#: main.c:3032
+msgid ""
+"\n"
+"More info with: \"vim -h\"\n"
+msgstr ""
+"\n"
+"Meer informatie via: \"vim -h\"\n"
+
+#: main.c:3065
+msgid "[file ..]       edit specified file(s)"
+msgstr "[bestand ..]       bewerk opgegeven bestand(en)"
+
+#: main.c:3066
+msgid "-               read text from stdin"
+msgstr "-               lees tekst vanuit stdin"
+
+#: main.c:3067
+msgid "-t tag          edit file where tag is defined"
+msgstr "-t tag          bewerk bestand waar tag is gedefinieerd"
+
+#: main.c:3069
+msgid "-q [errorfile]  edit file with first error"
+msgstr "-q [foutbestand]  bewerk bestand dat eerste fout bevat"
+
+#: main.c:3078
+msgid ""
+"\n"
+"\n"
+"usage:"
+msgstr ""
+"\n"
+"\n"
+"Gebruik:"
+
+#: main.c:3081
+msgid " vim [arguments] "
+msgstr " vim [argumenten] "
+
+#: main.c:3085
+msgid ""
+"\n"
+"   or:"
+msgstr ""
+"\n"
+"   of:"
+
+#: main.c:3088
+msgid ""
+"\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"Daar waar hoofdletters genegeerd worden kan met / vlag in hoofdletters gezet worden"
+
+#: main.c:3091
+msgid ""
+"\n"
+"\n"
+"Arguments:\n"
+msgstr ""
+"\n"
+"\n"
+"Argumenten:\n"
+
+#: main.c:3092
+msgid "--\t\t\tOnly file names after this"
+msgstr "--\t\t\tHierna alleen bestandsnamen"
+
+#: main.c:3094
+msgid "--literal\t\tDon't expand wildcards"
+msgstr "--literal\t\tJokertekens niet vervangen"
+
+#: main.c:3097
+msgid "-register\t\tRegister this gvim for OLE"
+msgstr "-register\t\tDeze gvim voor OLE registreren"
+
+#: main.c:3098
+msgid "-unregister\t\tUnregister gvim for OLE"
+msgstr "-unregister\t\tgvim afmelden voor OLE"
+
+#: main.c:3101
+msgid "-g\t\t\tRun using GUI (like \"gvim\")"
+msgstr "-g\t\t\tMet GUI opstarten (zoals \"gvim\")"
+
+#: main.c:3102
+msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
+msgstr "-f  of  --nofork\tVoorgrond: niet afsplitsen tijdens opstarten GUI"
+
+#: main.c:3104
+msgid "-v\t\t\tVi mode (like \"vi\")"
+msgstr "-v\t\t\tVi-modus (zoals \"vi\")"
+
+#: main.c:3105
+msgid "-e\t\t\tEx mode (like \"ex\")"
+msgstr "-e\t\t\tEx-modus (zoals \"ex\")"
+
+#: main.c:3106
+msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+msgstr "-s\t\t\tStille (bulk)modus (alleen bij \"ex\")"
+
+#: main.c:3108
+msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
+msgstr "-d\t\t\tDiff-modus (zoals \"vimdiff\")"
+
+#: main.c:3110
+msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
+msgstr "-y\t\t\tEenvoudige modus (zoals \"evim\", zonder modus)"
+
+#: main.c:3111
+msgid "-R\t\t\tReadonly mode (like \"view\")"
+msgstr "-R\t\t\tAlleen-lezen modus (zoals \"view\")"
+
+#: main.c:3112
+msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
+msgstr "-Z\t\t\tBeperkte modus (zoals \"rvim\")"
+
+#: main.c:3113
+msgid "-m\t\t\tModifications (writing files) not allowed"
+msgstr "-m\t\t\tAanpassingen (bestanden opslaan) niet toegestaan"
+
+#: main.c:3114
+msgid "-M\t\t\tModifications in text not allowed"
+msgstr "-M\t\t\tTekstuele aanpassingen niet toegestaan"
+
+#: main.c:3115
+msgid "-b\t\t\tBinary mode"
+msgstr "-b\t\t\tBinaire modus"
+
+#: main.c:3117
+msgid "-l\t\t\tLisp mode"
+msgstr "-l\t\t\tLisp-modus"
+
+#: main.c:3119
+msgid "-C\t\t\tCompatible with Vi: 'compatible'"
+msgstr "-C\t\t\tUitwisselbaar met Vi: 'compatible'"
+
+#: main.c:3120
+msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
+msgstr "-N\t\t\tNiet volledig met Vi uitwisselbaar: 'nocompatible'"
+
+#: main.c:3121
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr "-V[N][fname]\t\tWees uitbundig [niveau N] [schrijf berichten naar fname]"
+
+#: main.c:3123
+msgid "-D\t\t\tDebugging mode"
+msgstr "-D\t\t\tFoutopspoormodus"
+
+#: main.c:3125
+msgid "-n\t\t\tNo swap file, use memory only"
+msgstr "-n\t\t\tGeen wisselbestand, alleen geheugen gebruiken"
+
+#: main.c:3126
+msgid "-r\t\t\tList swap files and exit"
+msgstr "-r\t\t\tWisselbestanden tonen en stoppen"
+
+#: main.c:3127
+msgid "-r (with file name)\tRecover crashed session"
+msgstr "-r (bestandsnaam)\tHerstel ontspoorde sessie"
+
+#: main.c:3128
+msgid "-L\t\t\tSame as -r"
+msgstr "-L\t\t\tGelijk aan -r"
+
+#: main.c:3130
+msgid "-f\t\t\tDon't use newcli to open window"
+msgstr "-f\t\t\tGebruik geen newcli om venster te openen"
+
+#: main.c:3131
+msgid "-dev <device>\t\tUse <device> for I/O"
+msgstr "-dev <device>\t\tGebruik <device> voor in- en uitvoer"
+
+#: main.c:3134
+msgid "-A\t\t\tstart in Arabic mode"
+msgstr "-A\t\t\tIn Arabische modus starten"
+
+#: main.c:3137
+msgid "-H\t\t\tStart in Hebrew mode"
+msgstr "-H\t\t\tIn Hebrewsche modus starten"
+
+#: main.c:3140
+msgid "-F\t\t\tStart in Farsi mode"
+msgstr "-F\t\t\tIn Perzische modus starten"
+
+#: main.c:3142
+msgid "-T <terminal>\tSet terminal type to <terminal>"
+msgstr "-T <terminal>\tTerminalsoort op <terminal> instellen"
+
+#: main.c:3143
+msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
+msgstr "-u <vimrc>\t\tGebruik <vimrc> in plaats van enige .vimrc"
+
+#: main.c:3145
+msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
+msgstr "-U <gvimrc>\t\tGebruik <gvimrc> in plaats van enige .gvimrc"
+
+#: main.c:3147
+msgid "--noplugin\t\tDon't load plugin scripts"
+msgstr "--noplugin\t\tGeen plugin-scripts laden"
+
+#: main.c:3149
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr "-p[N]\t\tN tabpagina's openen (standaard: 1 per bestand)"
+
+#: main.c:3150
+msgid "-o[N]\t\tOpen N windows (default: one for each file)"
+msgstr "-o[N]\t\tN vensters openen (standaard: 1 per bestand)"
+
+#: main.c:3151
+msgid "-O[N]\t\tLike -o but split vertically"
+msgstr "-O[N]\t\tGelijk aan -o maar vertikaal gesplitst"
+
+#: main.c:3153
+msgid "+\t\t\tStart at end of file"
+msgstr "+\t\t\tAan einde van bestand beginnen"
+
+#: main.c:3154
+msgid "+<lnum>\t\tStart at line <lnum>"
+msgstr "+<lnum>\t\tOp regel <lnum> beginnen"
+
+#: main.c:3155
+msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
+msgstr "--cmd <opdracht>\tOpdracht <opdracht> uitvoeren voor enige vimrc-bestand"
+
+#: main.c:3156
+msgid "-c <command>\t\tExecute <command> after loading the first file"
+msgstr "-c <opdracht>\t\tOpdracht <opdracht> uitvoeren na eerste bestand"
+
+#: main.c:3157
+msgid "-S <session>\t\tSource file <session> after loading the first file"
+msgstr ""
+
+#: main.c:3158
+msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
+msgstr ""
+
+#: main.c:3159
+msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
+msgstr ""
+
+#: main.c:3160
+msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
+msgstr ""
+
+#: main.c:3162
+msgid "-x\t\t\tEdit encrypted files"
+msgstr ""
+
+#: main.c:3166
+msgid "-display <display>\tConnect vim to this particular X-server"
+msgstr ""
+
+#: main.c:3168
+msgid "-X\t\t\tDo not connect to X server"
+msgstr ""
+
+#: main.c:3171
+msgid "--remote <files>\tEdit <files> in a Vim server if possible"
+msgstr ""
+
+#: main.c:3172
+msgid "--remote-silent <files>  Same, don't complain if there is no server"
+msgstr ""
+
+#: main.c:3173
+msgid "--remote-wait <files>  As --remote but wait for files to have been edited"
+msgstr ""
+
+#: main.c:3174
+msgid "--remote-wait-silent <files>  Same, don't complain if there is no server"
+msgstr ""
+
+#: main.c:3176
+msgid "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+
+#: main.c:3178
+msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
+msgstr ""
+
+#: main.c:3179
+msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
+msgstr ""
+
+#: main.c:3180
+msgid "--serverlist\t\tList available Vim server names and exit"
+msgstr ""
+
+#: main.c:3181
+msgid "--servername <name>\tSend to/become the Vim server <name>"
+msgstr ""
+
+#: main.c:3184
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr ""
+
+#: main.c:3187
+msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
+msgstr ""
+
+#: main.c:3189
+msgid "-h  or  --help\tPrint Help (this message) and exit"
+msgstr "-h  of  --help\tDit bericht tonen en stoppen"
+
+#: main.c:3190
+msgid "--version\t\tPrint version information and exit"
+msgstr "--version\t\tVersieinformatie tonen en stoppen"
+
+#: main.c:3194
+msgid ""
+"\n"
+"Arguments recognised by gvim (Motif version):\n"
+msgstr ""
+
+#: main.c:3198
+msgid ""
+"\n"
+"Arguments recognised by gvim (neXtaw version):\n"
+msgstr ""
+
+#: main.c:3200
+msgid ""
+"\n"
+"Arguments recognised by gvim (Athena version):\n"
+msgstr ""
+
+#: main.c:3204
+msgid "-display <display>\tRun vim on <display>"
+msgstr ""
+
+#: main.c:3205
+msgid "-iconic\t\tStart vim iconified"
+msgstr ""
+
+#: main.c:3207
+msgid "-name <name>\t\tUse resource as if vim was <name>"
+msgstr ""
+
+#: main.c:3208
+msgid "\t\t\t  (Unimplemented)\n"
+msgstr ""
+
+#: main.c:3210
+msgid "-background <color>\tUse <color> for the background (also: -bg)"
+msgstr ""
+
+#: main.c:3211
+msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
+msgstr ""
+
+#: main.c:3212
+#: main.c:3232
+msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
+msgstr ""
+
+#: main.c:3213
+msgid "-boldfont <font>\tUse <font> for bold text"
+msgstr ""
+
+#: main.c:3214
+msgid "-italicfont <font>\tUse <font> for italic text"
+msgstr ""
+
+#: main.c:3215
+#: main.c:3233
+msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
+msgstr ""
+
+#: main.c:3216
+msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
+msgstr ""
+
+#: main.c:3217
+msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
+msgstr ""
+
+#: main.c:3219
+msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
+msgstr ""
+
+#: main.c:3221
+#: main.c:3234
+msgid "-reverse\t\tUse reverse video (also: -rv)"
+msgstr ""
+
+#: main.c:3222
+msgid "+reverse\t\tDon't use reverse video (also: +rv)"
+msgstr ""
+
+#: main.c:3223
+msgid "-xrm <resource>\tSet the specified resource"
+msgstr ""
+
+#: main.c:3226
+msgid ""
+"\n"
+"Arguments recognised by gvim (RISC OS version):\n"
+msgstr ""
+
+#: main.c:3227
+msgid "--columns <number>\tInitial width of window in columns"
+msgstr ""
+
+#: main.c:3228
+msgid "--rows <number>\tInitial height of window in rows"
+msgstr ""
+
+#: main.c:3231
+msgid ""
+"\n"
+"Arguments recognised by gvim (GTK+ version):\n"
+msgstr ""
+
+#: main.c:3235
+msgid "-display <display>\tRun vim on <display> (also: --display)"
+msgstr ""
+
+#: main.c:3237
+msgid "--role <role>\tSet a unique role to identify the main window"
+msgstr ""
+
+#: main.c:3239
+msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+msgstr ""
+
+#: main.c:3242
+msgid "-P <parent title>\tOpen Vim inside parent application"
+msgstr ""
+
+#: main.c:3243
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr ""
+
+#: main.c:3587
+msgid "No display"
+msgstr ""
+
+#. Failed to send, abort.
+#: main.c:3602
+msgid ": Send failed.\n"
+msgstr ""
+
+#. Let vim start normally.
+#: main.c:3608
+msgid ": Send failed. Trying to execute locally\n"
+msgstr ""
+
+#: main.c:3646
+#: main.c:3667
+#, c-format
+msgid "%d of %d edited"
+msgstr ""
+
+#: main.c:3689
+msgid "No display: Send expression failed.\n"
+msgstr ""
+
+#: main.c:3701
+msgid ": Send expression failed.\n"
+msgstr ""
+
+#: mark.c:761
+msgid "No marks set"
+msgstr ""
+
+#: mark.c:763
+#, c-format
+msgid "E283: No marks matching \"%s\""
+msgstr ""
+
+#. Highlight title
+#: mark.c:774
+msgid ""
+"\n"
+"mark line  col file/text"
+msgstr ""
+
+#. Highlight title
+#: mark.c:896
+msgid ""
+"\n"
+" jump line  col file/text"
+msgstr ""
+
+#. Highlight title
+#: mark.c:943
+msgid ""
+"\n"
+"change line  col text"
+msgstr ""
+
+#: mark.c:1437
+#, c-format
+msgid ""
+"\n"
+"# File marks:\n"
+msgstr ""
+
+#. Write the jumplist with -'
+#: mark.c:1472
+#, c-format
+msgid ""
+"\n"
+"# Jumplist (newest first):\n"
+msgstr ""
+
+#: mark.c:1573
+#, c-format
+msgid ""
+"\n"
+"# History of marks within files (newest to oldest):\n"
+msgstr ""
+
+#: mark.c:1677
+msgid "Missing '>'"
+msgstr ""
+
+#: mbyte.c:550
+msgid "E543: Not a valid codepage"
+msgstr ""
+
+#: mbyte.c:5540
+msgid "E284: Cannot set IC values"
+msgstr ""
+
+#: mbyte.c:5692
+msgid "E285: Failed to create input context"
+msgstr ""
+
+#: mbyte.c:5850
+msgid "E286: Failed to open input method"
+msgstr ""
+
+#: mbyte.c:5863
+msgid "E287: Warning: Could not set destroy callback to IM"
+msgstr ""
+
+#: mbyte.c:5869
+msgid "E288: input method doesn't support any style"
+msgstr ""
+
+#: mbyte.c:5928
+msgid "E289: input method doesn't support my preedit type"
+msgstr ""
+
+#: mbyte.c:6004
+msgid "E290: over-the-spot style requires fontset"
+msgstr ""
+
+#: mbyte.c:6040
+msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
+msgstr ""
+
+#: mbyte.c:6351
+msgid "E292: Input Method Server is not running"
+msgstr ""
+
+#: memfile.c:502
+msgid "E293: block was not locked"
+msgstr ""
+
+#: memfile.c:1045
+msgid "E294: Seek error in swap file read"
+msgstr ""
+
+#: memfile.c:1050
+msgid "E295: Read error in swap file"
+msgstr ""
+
+#: memfile.c:1102
+msgid "E296: Seek error in swap file write"
+msgstr ""
+
+#: memfile.c:1120
+msgid "E297: Write error in swap file"
+msgstr ""
+
+#: memfile.c:1317
+msgid "E300: Swap file already exists (symlink attack?)"
+msgstr ""
+
+#: memline.c:312
+msgid "E298: Didn't get block nr 0?"
+msgstr "E298: Ophalen blok nummer 0 mislukt?"
+
+#: memline.c:359
+msgid "E298: Didn't get block nr 1?"
+msgstr "E298: Ophalen blok nummer 1 mislukt?"
+
+#: memline.c:377
+msgid "E298: Didn't get block nr 2?"
+msgstr "E298: Ophalen blok nummer 2 mislukt?"
+
+#. could not (re)open the swap file, what can we do????
+#: memline.c:490
+msgid "E301: Oops, lost the swap file!!!"
+msgstr "E301: Helaas, wisselbestand is verdwenen!!!"
+
+#: memline.c:502
+msgid "E302: Could not rename swap file"
+msgstr ""
+
+#: memline.c:592
+#, c-format
+msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
+msgstr ""
+
+#: memline.c:703
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr ""
+
+#: memline.c:905
+#, c-format
+msgid "E305: No swap file found for %s"
+msgstr ""
+
+#: memline.c:915
+msgid "Enter number of swap file to use (0 to quit): "
+msgstr "Typ het nummer van het wisselbestand om te gebruiken (0 om te stoppen): "
+
+#: memline.c:960
+#, c-format
+msgid "E306: Cannot open %s"
+msgstr ""
+
+#: memline.c:982
+msgid "Unable to read block 0 from "
+msgstr ""
+
+#: memline.c:985
+msgid ""
+"\n"
+"Maybe no changes were made or Vim did not update the swap file."
+msgstr ""
+
+#: memline.c:995
+#: memline.c:1012
+msgid " cannot be used with this version of Vim.\n"
+msgstr ""
+
+#: memline.c:997
+msgid "Use Vim version 3.0.\n"
+msgstr ""
+
+#: memline.c:1003
+#, c-format
+msgid "E307: %s does not look like a Vim swap file"
+msgstr ""
+
+#: memline.c:1016
+msgid " cannot be used on this computer.\n"
+msgstr ""
+
+#: memline.c:1018
+msgid "The file was created on "
+msgstr ""
+
+#: memline.c:1022
+msgid ""
+",\n"
+"or the file has been damaged."
+msgstr ""
+
+#: memline.c:1040
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr ""
+
+#: memline.c:1072
+#, c-format
+msgid "Using swap file \"%s\""
+msgstr "Toepassen van wisselbestand \"%s\""
+
+#: memline.c:1078
+#, c-format
+msgid "Original file \"%s\""
+msgstr "Oorspronkelijke bestand \"%s\""
+
+#: memline.c:1091
+msgid "E308: Warning: Original file may have been changed"
+msgstr ""
+
+#: memline.c:1161
+#, c-format
+msgid "E309: Unable to read block 1 from %s"
+msgstr ""
+
+#: memline.c:1165
+msgid "???MANY LINES MISSING"
+msgstr ""
+
+#: memline.c:1181
+msgid "???LINE COUNT WRONG"
+msgstr ""
+
+#: memline.c:1188
+msgid "???EMPTY BLOCK"
+msgstr ""
+
+#: memline.c:1214
+msgid "???LINES MISSING"
+msgstr ""
+
+#: memline.c:1246
+#, c-format
+msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
+msgstr ""
+
+#: memline.c:1251
+msgid "???BLOCK MISSING"
+msgstr ""
+
+#: memline.c:1267
+msgid "??? from here until ???END lines may be messed up"
+msgstr ""
+
+#: memline.c:1283
+msgid "??? from here until ???END lines may have been inserted/deleted"
+msgstr ""
+
+#: memline.c:1303
+msgid "???END"
+msgstr ""
+
+#: memline.c:1366
+msgid "E311: Recovery Interrupted"
+msgstr ""
+
+#: memline.c:1371
+msgid "E312: Errors detected while recovering; look for lines starting with ???"
+msgstr ""
+
+#: memline.c:1373
+msgid "See \":help E312\" for more information."
+msgstr ""
+
+#: memline.c:1380
+msgid "Recovery completed. You should check if everything is OK."
+msgstr "Herstel is afgerond. Controleer of het resultaat juist is."
+
+#: memline.c:1381
+msgid ""
+"\n"
+"(You might want to write out this file under another name\n"
+msgstr ""
+"\n"
+"(Een advies is dit bestand onder een andere naam op te slaan\n"
+
+#: memline.c:1382
+msgid "and run diff with the original file to check for changes)"
+msgstr "en met 'diff' te controleren op wijzigingen)"
+
+#: memline.c:1385
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "Herstel is afgerond. Inhoud van het buffer komt overeen met de bestandsinhoud."
+
+#: memline.c:1386
+msgid ""
+"\n"
+"You may want to delete the .swp file now.\n"
+"\n"
+msgstr ""
+"\n"
+"Het .swp-bestand kan nu verwijderd worden.\n"
+"\n"
+
+#. use msg() to start the scrolling properly
+#: memline.c:1462
+msgid "Swap files found:"
+msgstr "Gevonden wisselbestanden:"
+
+#: memline.c:1649
+msgid "   In current directory:\n"
+msgstr "   In huidige map:\n"
+
+#: memline.c:1651
+msgid "   Using specified name:\n"
+msgstr "   Gebruikt opgegeven naam:\n"
+
+#: memline.c:1655
+msgid "   In directory "
+msgstr "   In map "
+
+#: memline.c:1673
+msgid "      -- none --\n"
+msgstr "      -- geen --\n"
+
+#: memline.c:1748
+msgid "          owned by: "
+msgstr "          eigenaar: "
+
+#: memline.c:1750
+msgid "   dated: "
+msgstr "   datum: "
+
+#: memline.c:1754
+#: memline.c:3794
+msgid "             dated: "
+msgstr "             datum: "
+
+#: memline.c:1773
+msgid "         [from Vim version 3.0]"
+msgstr "         [van Vim-versie 3.0]"
+
+#: memline.c:1777
+msgid "         [does not look like a Vim swap file]"
+msgstr "         [lijkt geen Vvim-wisselbestand te zijn]"
+
+#: memline.c:1781
+msgid "         file name: "
+msgstr "      bestandsnaam: "
+
+#: memline.c:1787
+msgid ""
+"\n"
+"          modified: "
+msgstr ""
+"\n"
+"           bewerkt: "
+
+#: memline.c:1788
+msgid "YES"
+msgstr "JA"
+
+#: memline.c:1788
+msgid "no"
+msgstr "nee"
+
+#: memline.c:1792
+msgid ""
+"\n"
+"         user name: "
+msgstr ""
+"\n"
+"    gebruikersnaam: "
+
+#: memline.c:1799
+msgid "   host name: "
+msgstr "  host-naam:"
+
+#: memline.c:1801
+msgid ""
+"\n"
+"         host name: "
+msgstr ""
+"\n"
+"         host-naam: "
+
+#: memline.c:1807
+msgid ""
+"\n"
+"        process ID: "
+msgstr ""
+"\n"
+"         proces-id: "
+
+#: memline.c:1813
+msgid " (still running)"
+msgstr "    (nog actief)"
+
+#: memline.c:1825
+msgid ""
+"\n"
+"         [not usable with this version of Vim]"
+msgstr ""
+"\n"
+"         [onbruikbaar met deze versie van Vim]"
+
+#: memline.c:1828
+msgid ""
+"\n"
+"         [not usable on this computer]"
+msgstr ""
+"\n"
+"         [onbruikbaar op deze computer]"
+
+#: memline.c:1833
+msgid "         [cannot be read]"
+msgstr "         [lezen is onmogelijk]"
+
+#: memline.c:1837
+msgid "         [cannot be opened]"
+msgstr "         [openen is onmogelijk]"
+
+#: memline.c:2027
+msgid "E313: Cannot preserve, there is no swap file"
+msgstr "E313: kan niet worden behouden, want er is geen wisselbestand"
+
+#: memline.c:2080
+msgid "File preserved"
+msgstr "Bestand behouden"
+
+#: memline.c:2082
+msgid "E314: Preserve failed"
+msgstr "E314: behouden is mislukt"
+
+#: memline.c:2159
+#, c-format
+msgid "E315: ml_get: invalid lnum: %ld"
+msgstr ""
+
+#: memline.c:2194
+#, c-format
+msgid "E316: ml_get: cannot find line %ld"
+msgstr ""
+
+#: memline.c:2608
+msgid "E317: pointer block id wrong 3"
+msgstr ""
+
+#: memline.c:2688
+msgid "stack_idx should be 0"
+msgstr ""
+
+#: memline.c:2750
+msgid "E318: Updated too many blocks?"
+msgstr ""
+
+#: memline.c:2930
+msgid "E317: pointer block id wrong 4"
+msgstr ""
+
+#: memline.c:2957
+msgid "deleted block 1?"
+msgstr ""
+
+#: memline.c:3164
+#, c-format
+msgid "E320: Cannot find line %ld"
+msgstr ""
+
+#: memline.c:3413
+msgid "E317: pointer block id wrong"
+msgstr ""
+
+#: memline.c:3429
+msgid "pe_line_count is zero"
+msgstr ""
+
+#: memline.c:3458
+#, c-format
+msgid "E322: line number out of range: %ld past the end"
+msgstr ""
+
+#: memline.c:3462
+#, c-format
+msgid "E323: line count wrong in block %ld"
+msgstr ""
+
+#: memline.c:3511
+msgid "Stack size increases"
+msgstr ""
+
+#: memline.c:3558
+msgid "E317: pointer block id wrong 2"
+msgstr ""
+
+#: memline.c:3595
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: Symbolische koppelingslus voor \"%s\""
+
+#: memline.c:3784
+msgid "E325: ATTENTION"
+msgstr "E325: OPGELET"
+
+#: memline.c:3785
+msgid ""
+"\n"
+"Found a swap file by the name \""
+msgstr ""
+"\n"
+"Er is een wisselbestand aangetroffen met de naam \""
+
+#: memline.c:3789
+msgid "While opening file \""
+msgstr "bij het openen van bestand \""
+
+#: memline.c:3802
+msgid "      NEWER than swap file!\n"
+msgstr "    NIEUWER dan het wisselbestand!\n"
+
+#. Some of these messages are long to allow translation to
+#. * other languages.
+#: memline.c:3806
+msgid ""
+"\n"
+"(1) Another program may be editing the same file.\n"
+"    If this is the case, be careful not to end up with two\n"
+"    different instances of the same file when making changes.\n"
+msgstr ""
+"\n"
+"(1) Mogelijk wordt dit bestand met een ander programma bewerkt.\n"
+"    Als dit het geval is, pas dan op niet met twee verschillende\n"
+"    versies van hetzelfde bestand te eindigen bij het bewerken.\n"
+
+#: memline.c:3807
+msgid "    Quit, or continue with caution.\n"
+msgstr "    Stop of ga aandachtig verder.\n"
+
+#: memline.c:3808
+msgid ""
+"\n"
+"(2) An edit session for this file crashed.\n"
+msgstr ""
+"\n"
+"(2) Een sessie waarin dit bestand werd bewerkt is onverhoeds gestopt.\n"
+
+#: memline.c:3809
+msgid "    If this is the case, use \":recover\" or \"vim -r "
+msgstr "    Als dit het geval is, gebruikt dan \":recover\" of \"vim -r "
+
+#: memline.c:3811
+msgid ""
+"\"\n"
+"    to recover the changes (see \":help recovery\").\n"
+msgstr ""
+"\"\n"
+"    om de aanpassingen te herstellen (zie \":help recovery\").\n"
+
+#: memline.c:3812
+msgid "    If you did this already, delete the swap file \""
+msgstr "    Als dit al gedaan is, verwijder dan het wisselbestand \""
+
+#: memline.c:3814
+msgid ""
+"\"\n"
+"    to avoid this message.\n"
+msgstr ""
+"\"\n"
+"    om dit bericht te voorkomen.\n"
+
+#: memline.c:4233
+#: memline.c:4237
+msgid "Swap file \""
+msgstr "Wisselbestand \""
+
+#: memline.c:4234
+#: memline.c:4240
+msgid "\" already exists!"
+msgstr "\" bestaat al!"
+
+#: memline.c:4243
+msgid "VIM - ATTENTION"
+msgstr "VIM - OPGELET"
+
+#: memline.c:4245
+msgid "Swap file already exists!"
+msgstr "Wisselbestand bestaat reeds."
+
+#: memline.c:4249
+msgid ""
+"&Open Read-Only\n"
+"&Edit anyway\n"
+"&Recover\n"
+"&Quit\n"
+"&Abort"
+msgstr ""
+"Alleen-lezen &openen\n"
+"Toch b&ewerken\n"
+"He&rstellen\n"
+"&Stoppen\n"
+"&Afbreken"
+
+#: memline.c:4251
+msgid ""
+"&Open Read-Only\n"
+"&Edit anyway\n"
+"&Recover\n"
+"&Delete it\n"
+"&Quit\n"
+"&Abort"
+msgstr ""
+"Alleen-lezen &openen\n"
+"Toch b&ewerken\n"
+"He&rstellen\n"
+"Verwij&deren\n"
+"&Stoppen\n"
+"&Afbreken"
+
+#: memline.c:4322
+msgid "E326: Too many swap files found"
+msgstr "E326: teveel wisselbestanden aangetroffen"
+
+#: menu.c:67
+msgid "E327: Part of menu-item path is not sub-menu"
+msgstr "E327: deel van menu-itempad is geen submenu"
+
+#: menu.c:68
+msgid "E328: Menu only exists in another mode"
+msgstr "E328: menu bestaat alleen in andere modus"
+
+#: menu.c:69
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: geen menu \"%s\""
+
+#. Only a mnemonic or accelerator is not valid.
+#: menu.c:480
+msgid "E792: Empty menu name"
+msgstr "E792: menunaam is leeg"
+
+#: menu.c:498
+msgid "E330: Menu path must not lead to a sub-menu"
+msgstr ""
+
+#: menu.c:537
+msgid "E331: Must not add menu items directly to menu bar"
+msgstr ""
+
+#: menu.c:543
+msgid "E332: Separator cannot be part of a menu path"
+msgstr ""
+
+#. Now we have found the matching menu, and we list the mappings
+#. Highlight title
+#: menu.c:1112
+msgid ""
+"\n"
+"--- Menus ---"
+msgstr ""
+
+#: menu.c:2146
+msgid "Tear off this menu"
+msgstr ""
+
+#: menu.c:2211
+msgid "E333: Menu path must lead to a menu item"
+msgstr ""
+
+#: menu.c:2231
+#, c-format
+msgid "E334: Menu not found: %s"
+msgstr ""
+
+#: menu.c:2313
+#, c-format
+msgid "E335: Menu not defined for %s mode"
+msgstr ""
+
+#: menu.c:2351
+msgid "E336: Menu path must lead to a sub-menu"
+msgstr ""
+
+#: menu.c:2372
+msgid "E337: Menu not found - check menu names"
+msgstr ""
+
+#: message.c:462
+#, c-format
+msgid "Error detected while processing %s:"
+msgstr "Fout opgetreden tijdens verwerken van %s:"
+
+#: message.c:487
+#, c-format
+msgid "line %4ld:"
+msgstr "regel %4ld:"
+
+#: message.c:685
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr ""
+
+#: message.c:833
+msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
+msgstr "Vertaald door: Erwin Poeze <erwin.poeze@gmail.com>"
+
+#: message.c:1090
+msgid "Interrupt: "
+msgstr ""
+
+#: message.c:1092
+msgid "Press ENTER or type command to continue"
+msgstr "Toets ENTER of typ een opdracht om verder te gaan"
+
+#: message.c:2139
+#, c-format
+msgid "%s line %ld"
+msgstr "%s regel %ld"
+
+#: message.c:2839
+msgid "-- More --"
+msgstr "-- meer --"
+
+#: message.c:2845
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr ""
+
+#: message.c:3637
+#: message.c:3652
+msgid "Question"
+msgstr "Vraag"
+
+#: message.c:3639
+msgid ""
+"&Yes\n"
+"&No"
+msgstr ""
+
+#: message.c:3672
+msgid ""
+"&Yes\n"
+"&No\n"
+"Save &All\n"
+"&Discard All\n"
+"&Cancel"
+msgstr ""
+
+#: message.c:3713
+msgid "Select Directory dialog"
+msgstr ""
+
+#: message.c:3715
+msgid "Save File dialog"
+msgstr ""
+
+#: message.c:3717
+msgid "Open File dialog"
+msgstr ""
+
+#. TODO: non-GUI file selector here
+#: message.c:3817
+msgid "E338: Sorry, no file browser in console mode"
+msgstr ""
+
+#: message.c:3848
+msgid "E766: Insufficient arguments for printf()"
+msgstr ""
+
+#: message.c:3924
+msgid "E807: Expected Float argument for printf()"
+msgstr ""
+
+#: message.c:4812
+msgid "E767: Too many arguments to printf()"
+msgstr ""
+
+#: misc1.c:2984
+msgid "W10: Warning: Changing a readonly file"
+msgstr ""
+
+#: misc1.c:3278
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr ""
+
+#: misc1.c:3280
+msgid "Type number and <Enter> (empty cancels): "
+msgstr ""
+
+#: misc1.c:3332
+msgid "1 more line"
+msgstr "1 regel meer"
+
+#: misc1.c:3334
+msgid "1 line less"
+msgstr "1 regel minder"
+
+#: misc1.c:3339
+#, c-format
+msgid "%ld more lines"
+msgstr "%ld regels meer"
+
+#: misc1.c:3341
+#, c-format
+msgid "%ld fewer lines"
+msgstr "%ld regels minder"
+
+#: misc1.c:3344
+msgid " (Interrupted)"
+msgstr " (onderbroken)"
+
+#: misc1.c:3409
+msgid "Beep!"
+msgstr "biep!"
+
+#: misc1.c:8394
+msgid "Vim: preserving files...\n"
+msgstr ""
+
+#. close all memfiles, without deleting
+#: misc1.c:8404
+msgid "Vim: Finished.\n"
+msgstr ""
+
+#: misc2.c:771
+#: misc2.c:787
+#, c-format
+msgid "ERROR: "
+msgstr ""
+
+#: misc2.c:791
+#, c-format
+msgid ""
+"\n"
+"[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
+msgstr ""
+
+#: misc2.c:793
+#, c-format
+msgid ""
+"[calls] total re/malloc()'s %lu, total free()'s %lu\n"
+"\n"
+msgstr ""
+
+#: misc2.c:848
+msgid "E340: Line is becoming too long"
+msgstr ""
+
+#: misc2.c:892
+#, c-format
+msgid "E341: Internal error: lalloc(%ld, )"
+msgstr ""
+
+#: misc2.c:1006
+#, c-format
+msgid "E342: Out of memory!  (allocating %lu bytes)"
+msgstr ""
+
+#: misc2.c:3087
+#, c-format
+msgid "Calling shell to execute: \"%s\""
+msgstr ""
+
+#: misc2.c:3356
+msgid "E545: Missing colon"
+msgstr ""
+
+#: misc2.c:3358
+#: misc2.c:3385
+msgid "E546: Illegal mode"
+msgstr ""
+
+#: misc2.c:3424
+msgid "E547: Illegal mouseshape"
+msgstr ""
+
+#: misc2.c:3464
+msgid "E548: digit expected"
+msgstr ""
+
+#: misc2.c:3469
+msgid "E549: Illegal percentage"
+msgstr ""
+
+#: misc2.c:3864
+msgid "Enter encryption key: "
+msgstr ""
+
+#: misc2.c:3865
+msgid "Enter same key again: "
+msgstr ""
+
+#: misc2.c:3876
+msgid "Keys don't match!"
+msgstr ""
+
+#: misc2.c:4418
+#, c-format
+msgid "E343: Invalid path: '**[number]' must be at the end of the path or be followed by '%s'."
+msgstr ""
+
+#: misc2.c:5713
+#, c-format
+msgid "E344: Can't find directory \"%s\" in cdpath"
+msgstr ""
+
+#: misc2.c:5716
+#, c-format
+msgid "E345: Can't find file \"%s\" in path"
+msgstr ""
+
+#: misc2.c:5722
+#, c-format
+msgid "E346: No more directory \"%s\" found in cdpath"
+msgstr ""
+
+#: misc2.c:5725
+#, c-format
+msgid "E347: No more file \"%s\" found in path"
+msgstr ""
+
+#: netbeans.c:390
+msgid "Cannot connect to Netbeans #2"
+msgstr ""
+
+#: netbeans.c:400
+msgid "Cannot connect to Netbeans"
+msgstr ""
+
+#: netbeans.c:445
+#, c-format
+msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
+msgstr ""
+
+#: netbeans.c:798
+msgid "read from Netbeans socket"
+msgstr ""
+
+#: netbeans.c:1950
+#, c-format
+msgid "E658: NetBeans connection lost for buffer %ld"
+msgstr ""
+
+#: netbeans.c:2976
+msgid "E511: netbeans already connected"
+msgstr ""
+
+#: netbeans.c:3911
+msgid "E505: "
+msgstr ""
+
+#: normal.c:186
+msgid "E349: No identifier under cursor"
+msgstr ""
+
+#: normal.c:2206
+msgid "E774: 'operatorfunc' is empty"
+msgstr ""
+
+#: normal.c:2225
+msgid "E775: Eval feature not available"
+msgstr ""
+
+#: normal.c:3240
+msgid "Warning: terminal cannot highlight"
+msgstr "waarschuwing: terminal kan niet oplichten"
+
+#: normal.c:3535
+msgid "E348: No string under cursor"
+msgstr ""
+
+#: normal.c:4887
+msgid "E352: Cannot erase folds with current 'foldmethod'"
+msgstr ""
+
+#: normal.c:7449
+msgid "E664: changelist is empty"
+msgstr "E664: wijzigingslijst is leeg"
+
+#: normal.c:7451
+msgid "E662: At start of changelist"
+msgstr "E662: begin van wijzigingslijst"
+
+#: normal.c:7453
+msgid "E663: At end of changelist"
+msgstr "E663: einde van wijzigingslijst"
+
+#: normal.c:8854
+msgid "Type  :quit<Enter>  to exit Vim"
+msgstr "Typ :quit<Enter> om Vim te verlaten"
+
+#: ops.c:293
+#, c-format
+msgid "1 line %sed 1 time"
+msgstr "1 regel %sed 1 maal"
+
+#: ops.c:295
+#, c-format
+msgid "1 line %sed %d times"
+msgstr "1 regel %sed %d maal"
+
+#: ops.c:300
+#, c-format
+msgid "%ld lines %sed 1 time"
+msgstr "%ld regels %sed 1 maal"
+
+#: ops.c:303
+#, c-format
+msgid "%ld lines %sed %d times"
+msgstr "%ld regels %sed %d maal"
+
+#: ops.c:691
+#, c-format
+msgid "%ld lines to indent... "
+msgstr "%ld in te springen regels... "
+
+#: ops.c:742
+msgid "1 line indented "
+msgstr "1 regel ingesprongen "
+
+#: ops.c:744
+#, c-format
+msgid "%ld lines indented "
+msgstr "%ld regels ingesprongen "
+
+#: ops.c:1170
+msgid "E748: No previously used register"
+msgstr ""
+
+#. must display the prompt
+#: ops.c:1741
+msgid "cannot yank; delete anyway"
+msgstr "kopiÃ«ren niet mogelijk; toch verwijderd"
+
+#: ops.c:2338
+msgid "1 line changed"
+msgstr "1 regel gewijzigd"
+
+#: ops.c:2340
+#, c-format
+msgid "%ld lines changed"
+msgstr "%ld regels gewijzigd"
+
+#: ops.c:2795
+#, c-format
+msgid "freeing %ld lines"
+msgstr ""
+
+#: ops.c:3080
+msgid "block of 1 line yanked"
+msgstr "blok van 1 regel gekopieerd"
+
+#: ops.c:3083
+msgid "1 line yanked"
+msgstr "1 regel gekopieerd"
+
+#: ops.c:3087
+#, c-format
+msgid "block of %ld lines yanked"
+msgstr "blok van %ld regels gekopieerd"
+
+#: ops.c:3090
+#, c-format
+msgid "%ld lines yanked"
+msgstr "%ld regels gekopieerd"
+
+#: ops.c:3385
+#, c-format
+msgid "E353: Nothing in register %s"
+msgstr "E353: niets in register %s"
+
+#. Highlight title
+#: ops.c:3977
+msgid ""
+"\n"
+"--- Registers ---"
+msgstr ""
+"\n"
+"--- Registers ---"
+
+#: ops.c:5351
+msgid "Illegal register name"
+msgstr "ongeldige registernaam"
+
+#: ops.c:5447
+#, c-format
+msgid ""
+"\n"
+"# Registers:\n"
+msgstr ""
+"\n"
+"# Registers:\n"
+
+#: ops.c:5504
+#, c-format
+msgid "E574: Unknown register type %d"
+msgstr ""
+
+#: ops.c:6445
+#, c-format
+msgid "%ld Cols; "
+msgstr "%ld koln; "
+
+#: ops.c:6454
+#, c-format
+msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
+msgstr "geselecteerd %s%ld van %ld regels; %ld van %ld woorden; %ld van %ld bytes"
+
+#: ops.c:6461
+#, c-format
+msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"
+msgstr "geselecteerd %s%ld van %ld regels; %ld van %ld woorden; %ld van %ld rekens; %ld van %ld bytes"
+
+#: ops.c:6480
+#, c-format
+msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+msgstr "kol %s van %s; regel %ld van %ld; woord %ld van %ld; byte %ld van %ld"
+
+#: ops.c:6488
+#, c-format
+msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"
+msgstr "kol %s van %s; regel %ld van %ld; woord %ld van %ld; teken %ld van %ld; byte %ld van %ld"
+
+#: ops.c:6500
+#, c-format
+msgid "(+%ld for BOM)"
+msgstr "(+%ld voor BOD)"
+
+#: option.c:1991
+msgid "%<%f%h%m%=Page %N"
+msgstr "%<%f%h%m%=pagina %N"
+
+#: option.c:2565
+msgid "Thanks for flying Vim"
+msgstr "Dank voor het gebruik van Vim"
+
+#: option.c:4179
+#: option.c:4322
+msgid "E518: Unknown option"
+msgstr "E518: onbekende optie"
+
+#: option.c:4192
+msgid "E519: Option not supported"
+msgstr "E519: optie niet ondersteund"
+
+#: option.c:4230
+msgid "E520: Not allowed in a modeline"
+msgstr ""
+
+#: option.c:4448
+msgid "E521: Number required after ="
+msgstr ""
+
+#: option.c:4773
+#: option.c:5579
+msgid "E522: Not found in termcap"
+msgstr ""
+
+#: option.c:4890
+#, c-format
+msgid "E539: Illegal character <%s>"
+msgstr ""
+
+#: option.c:5571
+msgid "E529: Cannot set 'term' to empty string"
+msgstr ""
+
+#: option.c:5574
+msgid "E530: Cannot change term in GUI"
+msgstr ""
+
+#: option.c:5576
+msgid "E531: Use \":gui\" to start the GUI"
+msgstr ""
+
+#: option.c:5605
+msgid "E589: 'backupext' and 'patchmode' are equal"
+msgstr ""
+
+#: option.c:5833
+msgid "E617: Cannot be changed in the GTK+ 2 GUI"
+msgstr ""
+
+#: option.c:6015
+msgid "E524: Missing colon"
+msgstr ""
+
+#: option.c:6017
+msgid "E525: Zero length string"
+msgstr ""
+
+#: option.c:6100
+#, c-format
+msgid "E526: Missing number after <%s>"
+msgstr ""
+
+#: option.c:6114
+msgid "E527: Missing comma"
+msgstr ""
+
+#: option.c:6121
+msgid "E528: Must specify a ' value"
+msgstr ""
+
+#: option.c:6170
+msgid "E595: contains unprintable or wide character"
+msgstr ""
+
+#: option.c:6214
+msgid "E596: Invalid font(s)"
+msgstr ""
+
+#: option.c:6223
+msgid "E597: can't select fontset"
+msgstr ""
+
+#: option.c:6225
+msgid "E598: Invalid fontset"
+msgstr ""
+
+#: option.c:6233
+msgid "E533: can't select wide font"
+msgstr ""
+
+#: option.c:6235
+msgid "E534: Invalid wide font"
+msgstr ""
+
+#: option.c:6564
+#, c-format
+msgid "E535: Illegal character after <%c>"
+msgstr "E535: ongeldig teken na <%c>"
+
+#: option.c:6688
+msgid "E536: comma required"
+msgstr "E536: komma is vereist"
+
+#: option.c:6698
+#, c-format
+msgid "E537: 'commentstring' must be empty or contain %s"
+msgstr "E537: 'commentstring' moet leeg zijn of het volgende bevatten: %s"
+
+#: option.c:6779
+msgid "E538: No mouse support"
+msgstr "E538: geen muisondersteuning"
+
+#: option.c:7104
+msgid "E540: Unclosed expression sequence"
+msgstr "E540: ongepaarde expressie-volgorde"
+
+#: option.c:7108
+msgid "E541: too many items"
+msgstr "E541: teveel items"
+
+#: option.c:7110
+msgid "E542: unbalanced groups"
+msgstr "E542: ongepaarde groepen"
+
+#: option.c:7461
+msgid "E590: A preview window already exists"
+msgstr "E590: een voorvertoningsvenster bestaat al"
+
+#: option.c:7716
+msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
+msgstr "W17: Arabisch vereist UTF-8, typ ':set encoding=utf-8'"
+
+#: option.c:8172
+#, c-format
+msgid "E593: Need at least %d lines"
+msgstr "E593: vereist minstens %d regels"
+
+#: option.c:8182
+#, c-format
+msgid "E594: Need at least %d columns"
+msgstr "E594: vereist minstens %d kolommen"
+
+#: option.c:8501
+#, c-format
+msgid "E355: Unknown option: %s"
+msgstr "E355: onbekende optie: %s"
+
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#: option.c:8533
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: 'Number' vereist: &%s = '%s'"
+
+#: option.c:8657
+msgid ""
+"\n"
+"--- Terminal codes ---"
+msgstr ""
+"\n"
+"--- Terminal-codes ---"
+
+#: option.c:8659
+msgid ""
+"\n"
+"--- Global option values ---"
+msgstr ""
+"\n"
+"--- Globale optiewaarden ---"
+
+#: option.c:8661
+msgid ""
+"\n"
+"--- Local option values ---"
+msgstr ""
+"\n"
+"--- Lokale optiewaarden ---"
+
+#: option.c:8663
+msgid ""
+"\n"
+"--- Options ---"
+msgstr ""
+"\n"
+"--- Opties ---"
+
+#: option.c:9489
+msgid "E356: get_varp ERROR"
+msgstr ""
+
+#: option.c:10604
+#, c-format
+msgid "E357: 'langmap': Matching character missing for %s"
+msgstr ""
+
+#: option.c:10628
+#, c-format
+msgid "E358: 'langmap': Extra characters after semicolon: %s"
+msgstr ""
+
+#: os_amiga.c:278
+msgid "cannot open "
+msgstr "gefaald tijden openen van "
+
+#: os_amiga.c:313
+msgid "VIM: Can't open window!\n"
+msgstr "VIM: kan venster niet openen!\n"
+
+#: os_amiga.c:340
+msgid "Need Amigados version 2.04 or later\n"
+msgstr "Vereist Amigados versie 2.04 of nieuwer\n"
+
+#: os_amiga.c:346
+#, c-format
+msgid "Need %s version %ld\n"
+msgstr "Vereist %s versie %ld\n"
+
+#: os_amiga.c:419
+msgid "Cannot open NIL:\n"
+msgstr ""
+
+#: os_amiga.c:437
+msgid "Cannot create "
+msgstr "Gefaald tijdens aanmaken van "
+
+#: os_amiga.c:943
+#, c-format
+msgid "Vim exiting with %d\n"
+msgstr "Vim stoppen met %d\n"
+
+#: os_amiga.c:979
+msgid "cannot change console mode ?!\n"
+msgstr ""
+
+#: os_amiga.c:1057
+msgid "mch_get_shellsize: not a console??\n"
+msgstr ""
+
+#. if Vim opened a window: Executing a shell may cause crashes
+#: os_amiga.c:1212
+msgid "E360: Cannot execute shell with -f option"
+msgstr ""
+
+#: os_amiga.c:1253
+#: os_amiga.c:1343
+msgid "Cannot execute "
+msgstr ""
+
+#: os_amiga.c:1256
+#: os_amiga.c:1353
+msgid "shell "
+msgstr ""
+
+#: os_amiga.c:1276
+#: os_amiga.c:1378
+msgid " returned\n"
+msgstr ""
+
+#: os_amiga.c:1540
+msgid "ANCHOR_BUF_SIZE too small."
+msgstr ""
+
+#: os_amiga.c:1544
+msgid "I/O ERROR"
+msgstr ""
+
+#: os_mswin.c:595
+msgid "Message"
+msgstr ""
+
+#: os_mswin.c:710
+msgid "'columns' is not 80, cannot execute external commands"
+msgstr ""
+
+#: os_mswin.c:2143
+msgid "E237: Printer selection failed"
+msgstr ""
+
+#: os_mswin.c:2183
+#, c-format
+msgid "to %s on %s"
+msgstr ""
+
+#: os_mswin.c:2198
+#, c-format
+msgid "E613: Unknown printer font: %s"
+msgstr ""
+
+#: os_mswin.c:2247
+#: os_mswin.c:2257
+#, c-format
+msgid "E238: Print error: %s"
+msgstr ""
+
+#: os_mswin.c:2285
+#, c-format
+msgid "Printing '%s'"
+msgstr ""
+
+#: os_mswin.c:3461
+#, c-format
+msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
+msgstr ""
+
+#: os_mswin.c:3471
+#, c-format
+msgid "E245: Illegal char '%c' in font name \"%s\""
+msgstr ""
+
+#: os_riscos.c:1263
+msgid "E366: Invalid 'osfiletype' option - using Text"
+msgstr ""
+
+#: os_unix.c:1083
+msgid "Vim: Double signal, exiting\n"
+msgstr "Vim: dubbel signaal, stoppen\n"
+
+#: os_unix.c:1089
+#, c-format
+msgid "Vim: Caught deadly signal %s\n"
+msgstr "Vim: fataal signaal gevangen %s\n"
+
+#: os_unix.c:1092
+#, c-format
+msgid "Vim: Caught deadly signal\n"
+msgstr "Vim: fataal signaal gevangen\n"
+
+#: os_unix.c:1430
+#, c-format
+msgid "Opening the X display took %ld msec"
+msgstr "Openen van X-display vereiste %ld ms"
+
+#: os_unix.c:1457
+msgid ""
+"\n"
+"Vim: Got X error\n"
+msgstr ""
+
+#: os_unix.c:1568
+msgid "Testing the X display failed"
+msgstr ""
+
+#: os_unix.c:1708
+msgid "Opening the X display timed out"
+msgstr ""
+
+#: os_unix.c:2682
+#: os_unix.c:2689
+msgid ""
+"\n"
+"Could not get security context for "
+msgstr ""
+
+#: os_unix.c:2699
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+
+#: os_unix.c:3718
+#: os_unix.c:4643
+msgid ""
+"\n"
+"Cannot execute shell "
+msgstr ""
+
+#: os_unix.c:3766
+msgid ""
+"\n"
+"Cannot execute shell sh\n"
+msgstr ""
+
+#: os_unix.c:3770
+#: os_unix.c:4649
+msgid ""
+"\n"
+"shell returned "
+msgstr ""
+
+#: os_unix.c:3914
+msgid ""
+"\n"
+"Cannot create pipes\n"
+msgstr ""
+
+#: os_unix.c:3928
+#: os_unix.c:4192
+msgid ""
+"\n"
+"Cannot fork\n"
+msgstr ""
+
+#: os_unix.c:4656
+msgid ""
+"\n"
+"Command terminated\n"
+msgstr ""
+
+#: os_unix.c:4957
+#: os_unix.c:5122
+#: os_unix.c:6852
+msgid "XSMP lost ICE connection"
+msgstr ""
+
+#: os_unix.c:6252
+#: os_unix.c:6355
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr ""
+
+#: os_unix.c:6437
+msgid "Opening the X display failed"
+msgstr ""
+
+#: os_unix.c:6761
+msgid "XSMP handling save-yourself request"
+msgstr ""
+
+#: os_unix.c:6875
+msgid "XSMP opening connection"
+msgstr ""
+
+#: os_unix.c:6894
+msgid "XSMP ICE connection watch failed"
+msgstr ""
+
+#: os_unix.c:6918
+#, c-format
+msgid "XSMP SmcOpenConnection failed: %s"
+msgstr ""
+
+#: os_vms_mms.c:60
+msgid "At line"
+msgstr "Bij regel"
+
+#: os_w32exe.c:89
+msgid "Could not load vim32.dll!"
+msgstr ""
+
+#: os_w32exe.c:89
+#: os_w32exe.c:100
+msgid "VIM Error"
+msgstr "Vim-fout"
+
+#: os_w32exe.c:99
+msgid "Could not fix up function pointers to the DLL!"
+msgstr ""
+
+#: os_win16.c:342
+#: os_win32.c:3399
+#, c-format
+msgid "shell returned %d"
+msgstr ""
+
+#: os_win32.c:2856
+#, c-format
+msgid "Vim: Caught %s event\n"
+msgstr ""
+
+#: os_win32.c:2858
+msgid "close"
+msgstr "sluiten"
+
+#: os_win32.c:2860
+msgid "logoff"
+msgstr "uitloggen"
+
+#: os_win32.c:2861
+msgid "shutdown"
+msgstr "afsluiten"
+
+#: os_win32.c:3351
+msgid "E371: Command not found"
+msgstr "E371: opdracht niet gevonden"
+
+#: os_win32.c:3364
+msgid ""
+"VIMRUN.EXE not found in your $PATH.\n"
+"External commands will not pause after completion.\n"
+"See  :help win32-vimrun  for more information."
+msgstr ""
+
+#: os_win32.c:3367
+msgid "Vim Warning"
+msgstr "Vim-waarschuwing"
+
+#: quickfix.c:330
+#, c-format
+msgid "E372: Too many %%%c in format string"
+msgstr ""
+
+#: quickfix.c:343
+#, c-format
+msgid "E373: Unexpected %%%c in format string"
+msgstr ""
+
+#: quickfix.c:405
+msgid "E374: Missing ] in format string"
+msgstr ""
+
+#: quickfix.c:419
+#, c-format
+msgid "E375: Unsupported %%%c in format string"
+msgstr ""
+
+#: quickfix.c:439
+#, c-format
+msgid "E376: Invalid %%%c in format string prefix"
+msgstr ""
+
+#: quickfix.c:447
+#, c-format
+msgid "E377: Invalid %%%c in format string"
+msgstr ""
+
+#: quickfix.c:473
+msgid "E378: 'errorformat' contains no pattern"
+msgstr ""
+
+#: quickfix.c:706
+msgid "E379: Missing or empty directory name"
+msgstr ""
+
+#: quickfix.c:1408
+msgid "E553: No more items"
+msgstr ""
+
+#: quickfix.c:1830
+#, c-format
+msgid "(%d of %d)%s%s: "
+msgstr ""
+
+#: quickfix.c:1832
+msgid " (line deleted)"
+msgstr ""
+
+#: quickfix.c:2055
+msgid "E380: At bottom of quickfix stack"
+msgstr ""
+
+#: quickfix.c:2064
+msgid "E381: At top of quickfix stack"
+msgstr ""
+
+#: quickfix.c:2078
+#, c-format
+msgid "error list %d of %d; %d errors"
+msgstr ""
+
+#: quickfix.c:2664
+msgid "E382: Cannot write, 'buftype' option is set"
+msgstr ""
+
+#: quickfix.c:3068
+msgid "E683: File name missing or invalid pattern"
+msgstr ""
+
+#: quickfix.c:3166
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr ""
+
+#: quickfix.c:3703
+msgid "E681: Buffer is not loaded"
+msgstr "E681: buffer is niet geladen"
+
+#: quickfix.c:3764
+msgid "E777: String or List expected"
+msgstr ""
+
+#: regexp.c:331
+#, c-format
+msgid "E369: invalid item in %s%%[]"
+msgstr ""
+
+#: regexp.c:1059
+#: regexp.c:1077
+msgid "E339: Pattern too long"
+msgstr ""
+
+#: regexp.c:1234
+msgid "E50: Too many \\z("
+msgstr ""
+
+#: regexp.c:1245
+#, c-format
+msgid "E51: Too many %s("
+msgstr ""
+
+#: regexp.c:1302
+msgid "E52: Unmatched \\z("
+msgstr "E52: \\z( is niet gepaard"
+
+#: regexp.c:1306
+#, c-format
+msgid "E53: Unmatched %s%%("
+msgstr "E53: %s%%( is niet gepaard"
+
+#: regexp.c:1308
+#, c-format
+msgid "E54: Unmatched %s("
+msgstr "E54: %s( is niet gepaard"
+
+#: regexp.c:1313
+#, c-format
+msgid "E55: Unmatched %s)"
+msgstr "E55: %s) is ongepaard"
+
+#: regexp.c:1531
+#, c-format
+msgid "E59: invalid character after %s@"
+msgstr ""
+
+#: regexp.c:1565
+#, c-format
+msgid "E60: Too many complex %s{...}s"
+msgstr ""
+
+#: regexp.c:1581
+#, c-format
+msgid "E61: Nested %s*"
+msgstr "E61: geneste %s*"
+
+#: regexp.c:1584
+#, c-format
+msgid "E62: Nested %s%c"
+msgstr "E62: geneste %s%c"
+
+#: regexp.c:1704
+msgid "E63: invalid use of \\_"
+msgstr "E63: onjuist gebruikt van \\_"
+
+#: regexp.c:1760
+#, c-format
+msgid "E64: %s%c follows nothing"
+msgstr "E64: %s%c volgt op niets"
+
+#: regexp.c:1816
+msgid "E65: Illegal back reference"
+msgstr "E65: ongeldige terugverwijzing"
+
+#: regexp.c:1829
+msgid "E66: \\z( not allowed here"
+msgstr "E66: \\z( hier niet toegestaan"
+
+#: regexp.c:1848
+msgid "E67: \\z1 et al. not allowed here"
+msgstr "E67: \\z1 en andere hier niet toegestaan"
+
+#: regexp.c:1860
+msgid "E68: Invalid character after \\z"
+msgstr "E68: ongeldig teken na \\z"
+
+#: regexp.c:1912
+#, c-format
+msgid "E69: Missing ] after %s%%["
+msgstr "E69: ontbrekende ] na %s%%["
+
+#: regexp.c:1928
+#, c-format
+msgid "E70: Empty %s%%[]"
+msgstr "E70: leeg %s%%[]"
+
+#: regexp.c:1973
+#, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: onjuist teken na %s%%[dxouU]"
+
+#: regexp.c:2044
+#, c-format
+msgid "E71: Invalid character after %s%%"
+msgstr "E71: onjuist teken na %s%%"
+
+#: regexp.c:2337
+#, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: ontbrekende ] na %s["
+
+#: regexp.c:3033
+#, c-format
+msgid "E554: Syntax error in %s{...}"
+msgstr "E554: Syntaxfout in %s{...}"
+
+#: regexp.c:3876
+msgid "External submatches:\n"
+msgstr ""
+
+#: screen.c:9356
+msgid " VREPLACE"
+msgstr ""
+
+#: screen.c:9360
+msgid " REPLACE"
+msgstr " VERVANGEN"
+
+#: screen.c:9365
+msgid " REVERSE"
+msgstr ""
+
+#: screen.c:9367
+msgid " INSERT"
+msgstr " INVOEGEN"
+
+#: screen.c:9370
+msgid " (insert)"
+msgstr " (invoegen)"
+
+#: screen.c:9372
+msgid " (replace)"
+msgstr " (vervangen)"
+
+#: screen.c:9374
+msgid " (vreplace)"
+msgstr ""
+
+#: screen.c:9377
+msgid " Hebrew"
+msgstr ""
+
+#: screen.c:9388
+msgid " Arabic"
+msgstr ""
+
+#: screen.c:9391
+msgid " (lang)"
+msgstr ""
+
+#: screen.c:9395
+msgid " (paste)"
+msgstr ""
+
+#: screen.c:9408
+msgid " VISUAL"
+msgstr " VISUEEL"
+
+#: screen.c:9409
+msgid " VISUAL LINE"
+msgstr " VISUELE REGEL"
+
+#: screen.c:9410
+msgid " VISUAL BLOCK"
+msgstr " VISUEEL BLOK"
+
+#: screen.c:9411
+msgid " SELECT"
+msgstr " SELECTEREN"
+
+#: screen.c:9412
+msgid " SELECT LINE"
+msgstr " REGELSELECTIE"
+
+#: screen.c:9413
+msgid " SELECT BLOCK"
+msgstr " BLOKSELECTIE"
+
+#: screen.c:9429
+#: screen.c:9495
+msgid "recording"
+msgstr "opnemen"
+
+#: search.c:562
+#, c-format
+msgid "E383: Invalid search string: %s"
+msgstr "E383: ongeldige zoekstring: %s"
+
+#: search.c:983
+#, c-format
+msgid "E384: search hit TOP without match for: %s"
+msgstr "E384: TOP bereikt zonder overeenkomst voor: %s"
+
+#: search.c:986
+#, c-format
+msgid "E385: search hit BOTTOM without match for: %s"
+msgstr "E385: BODEM bereikt zonder overeenkomst voor: %s"
+
+#: search.c:1418
+msgid "E386: Expected '?' or '/'  after ';'"
+msgstr "E386: verwachte '?' of '/' na ';'"
+
+#: search.c:4691
+msgid " (includes previously listed match)"
+msgstr " (bevat eerder getoonde overeenkomst)"
+
+#. cursor at status line
+#: search.c:4711
+msgid "--- Included files "
+msgstr "--- bevatte bestanden "
+
+#: search.c:4713
+msgid "not found "
+msgstr "niet gevonden "
+
+#: search.c:4714
+msgid "in path ---\n"
+msgstr "in pad ---\n"
+
+#: search.c:4771
+msgid "  (Already listed)"
+msgstr " (Reeds getoond)"
+
+#: search.c:4773
+msgid "  NOT FOUND"
+msgstr "  NIET GEVONDEN"
+
+#: search.c:4827
+#, c-format
+msgid "Scanning included file: %s"
+msgstr ""
+
+#: search.c:4836
+#, c-format
+msgid "Searching included file %s"
+msgstr ""
+
+#: search.c:5059
+msgid "E387: Match is on current line"
+msgstr ""
+
+#: search.c:5203
+msgid "All included files were found"
+msgstr ""
+
+#: search.c:5205
+msgid "No included files"
+msgstr ""
+
+#: search.c:5221
+msgid "E388: Couldn't find definition"
+msgstr ""
+
+#: search.c:5223
+msgid "E389: Couldn't find pattern"
+msgstr "E389: kan zoekpatroon niet vinden"
+
+#: search.c:5401
+msgid "Substitute "
+msgstr "Vervangen "
+
+#: search.c:5414
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Laatste %szoekpatroon:\n"
+"~"
+
+#: spell.c:984
+msgid "E759: Format error in spell file"
+msgstr ""
+
+#: spell.c:985
+msgid "E758: Truncated spell file"
+msgstr ""
+
+#: spell.c:986
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr ""
+
+#: spell.c:987
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr ""
+
+#: spell.c:988
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr ""
+
+#: spell.c:989
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr ""
+
+#: spell.c:990
+msgid "Compressing word tree..."
+msgstr ""
+
+#: spell.c:2146
+msgid "E756: Spell checking is not enabled"
+msgstr ""
+
+#: spell.c:2499
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+
+#: spell.c:2773
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr ""
+
+#: spell.c:2805
+msgid "E757: This does not look like a spell file"
+msgstr ""
+
+#: spell.c:2811
+msgid "E771: Old spell file, needs to be updated"
+msgstr ""
+
+#: spell.c:2816
+msgid "E772: Spell file is for newer version of Vim"
+msgstr ""
+
+#: spell.c:2919
+msgid "E770: Unsupported section in spell file"
+msgstr ""
+
+#: spell.c:4320
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr ""
+
+#: spell.c:5207
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr ""
+
+#: spell.c:5255
+#: spell.c:6599
+#: spell.c:7178
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5303
+#: spell.c:7213
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr ""
+
+#: spell.c:5307
+#: spell.c:7218
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr ""
+
+#: spell.c:5320
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5333
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5424
+#, c-format
+msgid "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"
+msgstr ""
+
+#: spell.c:5433
+#, c-format
+msgid "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"
+msgstr ""
+
+#: spell.c:5454
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5481
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5489
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5497
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5519
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5585
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5588
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5610
+#, c-format
+msgid "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5634
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5718
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr ""
+
+#: spell.c:5866
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr ""
+
+#: spell.c:5901
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr ""
+
+#: spell.c:5920
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr ""
+
+#: spell.c:5977
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr ""
+
+#: spell.c:6005
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr ""
+
+#: spell.c:6031
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr ""
+
+#: spell.c:6049
+msgid "Too many postponed prefixes"
+msgstr ""
+
+#: spell.c:6051
+msgid "Too many compound flags"
+msgstr ""
+
+#: spell.c:6053
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr ""
+
+#: spell.c:6065
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr ""
+
+#: spell.c:6068
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr ""
+
+#: spell.c:6175
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr ""
+
+#: spell.c:6178
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr ""
+
+#: spell.c:6395
+#: spell.c:6408
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr ""
+
+#: spell.c:6560
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr ""
+
+#: spell.c:6569
+#, c-format
+msgid "E760: No word count in %s"
+msgstr ""
+
+#: spell.c:6640
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr ""
+
+#: spell.c:6664
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr ""
+
+#: spell.c:6667
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr ""
+
+#: spell.c:6722
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr ""
+
+#: spell.c:6724
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr ""
+
+#: spell.c:7147
+#, c-format
+msgid "Reading word file %s ..."
+msgstr ""
+
+#: spell.c:7197
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr ""
+
+#: spell.c:7200
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr ""
+
+#: spell.c:7227
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr ""
+
+#: spell.c:7233
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr ""
+
+#: spell.c:7247
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr ""
+
+#: spell.c:7277
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr ""
+
+#: spell.c:7285
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr ""
+
+#: spell.c:7315
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr ""
+
+#: spell.c:7776
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr ""
+
+#: spell.c:8567
+msgid "Reading back spell file..."
+msgstr ""
+
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+#: spell.c:8588
+msgid "Performing soundfolding..."
+msgstr ""
+
+#: spell.c:8601
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr ""
+
+#: spell.c:8726
+#, c-format
+msgid "Total number of words: %d"
+msgstr ""
+
+#: spell.c:8943
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr ""
+
+#: spell.c:9004
+#: spell.c:9265
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr ""
+
+#: spell.c:9136
+msgid "E751: Output file name must not have region name"
+msgstr ""
+
+#: spell.c:9138
+msgid "E754: Only up to 8 regions supported"
+msgstr ""
+
+#: spell.c:9168
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr ""
+
+#: spell.c:9239
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr ""
+
+#: spell.c:9258
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr ""
+
+#: spell.c:9263
+msgid "Done!"
+msgstr ""
+
+#: spell.c:9390
+#, c-format
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr ""
+
+#: spell.c:9435
+#, c-format
+msgid "Word removed from %s"
+msgstr ""
+
+#: spell.c:9480
+#, c-format
+msgid "Word added to %s"
+msgstr ""
+
+#: spell.c:9799
+msgid "E763: Word characters differ between spell files"
+msgstr ""
+
+#: spell.c:10177
+msgid "Sorry, no suggestions"
+msgstr ""
+
+#: spell.c:10181
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr ""
+
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#: spell.c:10202
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr ""
+
+#: spell.c:10242
+#, c-format
+msgid " < \"%.*s\""
+msgstr ""
+
+#: spell.c:10420
+msgid "E752: No previous spell replacement"
+msgstr ""
+
+#: spell.c:10470
+#, c-format
+msgid "E753: Not found: %s"
+msgstr ""
+
+#: spell.c:10890
+#, c-format
+msgid "E778: This does not look like a .sug file: %s"
+msgstr ""
+
+#: spell.c:10897
+#, c-format
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr ""
+
+#: spell.c:10903
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr ""
+
+#: spell.c:10913
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr ""
+
+#: spell.c:10926
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr ""
+
+#. This should have been checked when generating the .spl
+#. * file.
+#: spell.c:13623
+msgid "E783: duplicate char in MAP entry"
+msgstr ""
+
+#: syntax.c:3321
+#: syntax.c:3346
+#: syntax.c:3372
+#, c-format
+msgid "E390: Illegal argument: %s"
+msgstr ""
+
+#: syntax.c:3571
+#, c-format
+msgid "E391: No such syntax cluster: %s"
+msgstr ""
+
+#: syntax.c:3730
+msgid "No Syntax items defined for this buffer"
+msgstr ""
+
+#: syntax.c:3738
+msgid "syncing on C-style comments"
+msgstr ""
+
+#: syntax.c:3746
+msgid "no syncing"
+msgstr ""
+
+#: syntax.c:3749
+msgid "syncing starts "
+msgstr ""
+
+#: syntax.c:3751
+#: syntax.c:3827
+msgid " lines before top line"
+msgstr ""
+
+#: syntax.c:3756
+msgid ""
+"\n"
+"--- Syntax sync items ---"
+msgstr ""
+
+#: syntax.c:3761
+msgid ""
+"\n"
+"syncing on items"
+msgstr ""
+
+#: syntax.c:3767
+msgid ""
+"\n"
+"--- Syntax items ---"
+msgstr ""
+
+#: syntax.c:3790
+#, c-format
+msgid "E392: No such syntax cluster: %s"
+msgstr ""
+
+#: syntax.c:3817
+msgid "minimal "
+msgstr ""
+
+#: syntax.c:3824
+msgid "maximal "
+msgstr ""
+
+#: syntax.c:3836
+msgid "; match "
+msgstr ""
+
+#: syntax.c:3838
+msgid " line breaks"
+msgstr ""
+
+#: syntax.c:4480
+msgid "E395: contains argument not accepted here"
+msgstr ""
+
+#: syntax.c:4491
+msgid "E396: containedin argument not accepted here"
+msgstr ""
+
+#: syntax.c:4535
+msgid "E393: group[t]here not accepted here"
+msgstr ""
+
+#: syntax.c:4559
+#, c-format
+msgid "E394: Didn't find region item for %s"
+msgstr ""
+
+#: syntax.c:4636
+msgid "E397: Filename required"
+msgstr ""
+
+#: syntax.c:4759
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr ""
+
+#: syntax.c:5004
+#, c-format
+msgid "E398: Missing '=': %s"
+msgstr ""
+
+#: syntax.c:5166
+#, c-format
+msgid "E399: Not enough arguments: syntax region %s"
+msgstr ""
+
+#: syntax.c:5500
+msgid "E400: No cluster specified"
+msgstr ""
+
+#: syntax.c:5537
+#, c-format
+msgid "E401: Pattern delimiter not found: %s"
+msgstr ""
+
+#: syntax.c:5612
+#, c-format
+msgid "E402: Garbage after pattern: %s"
+msgstr ""
+
+#: syntax.c:5701
+msgid "E403: syntax sync: line continuations pattern specified twice"
+msgstr ""
+
+#: syntax.c:5758
+#, c-format
+msgid "E404: Illegal arguments: %s"
+msgstr ""
+
+#: syntax.c:5808
+#, c-format
+msgid "E405: Missing equal sign: %s"
+msgstr ""
+
+#: syntax.c:5814
+#, c-format
+msgid "E406: Empty argument: %s"
+msgstr ""
+
+#: syntax.c:5840
+#, c-format
+msgid "E407: %s not allowed here"
+msgstr ""
+
+#: syntax.c:5847
+#, c-format
+msgid "E408: %s must be first in contains list"
+msgstr ""
+
+#: syntax.c:5917
+#, c-format
+msgid "E409: Unknown group name: %s"
+msgstr ""
+
+#: syntax.c:6153
+#, c-format
+msgid "E410: Invalid :syntax subcommand: %s"
+msgstr ""
+
+#: syntax.c:6702
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr ""
+
+#: syntax.c:6829
+#, c-format
+msgid "E411: highlight group not found: %s"
+msgstr ""
+
+#: syntax.c:6853
+#, c-format
+msgid "E412: Not enough arguments: \":highlight link %s\""
+msgstr ""
+
+#: syntax.c:6860
+#, c-format
+msgid "E413: Too many arguments: \":highlight link %s\""
+msgstr ""
+
+#: syntax.c:6880
+msgid "E414: group has settings, highlight link ignored"
+msgstr ""
+
+#: syntax.c:7012
+#, c-format
+msgid "E415: unexpected equal sign: %s"
+msgstr ""
+
+#: syntax.c:7048
+#, c-format
+msgid "E416: missing equal sign: %s"
+msgstr ""
+
+#: syntax.c:7076
+#, c-format
+msgid "E417: missing argument: %s"
+msgstr ""
+
+#: syntax.c:7113
+#, c-format
+msgid "E418: Illegal value: %s"
+msgstr ""
+
+#: syntax.c:7232
+msgid "E419: FG color unknown"
+msgstr ""
+
+#: syntax.c:7243
+msgid "E420: BG color unknown"
+msgstr ""
+
+#: syntax.c:7304
+#, c-format
+msgid "E421: Color name or number not recognized: %s"
+msgstr ""
+
+#: syntax.c:7537
+#, c-format
+msgid "E422: terminal code too long: %s"
+msgstr ""
+
+#: syntax.c:7584
+#, c-format
+msgid "E423: Illegal argument: %s"
+msgstr ""
+
+#: syntax.c:8145
+msgid "E424: Too many different highlighting attributes in use"
+msgstr ""
+
+#: syntax.c:8894
+msgid "E669: Unprintable character in group name"
+msgstr ""
+
+#: syntax.c:8903
+msgid "W18: Invalid character in group name"
+msgstr ""
+
+#: tag.c:85
+msgid "E555: at bottom of tag stack"
+msgstr ""
+
+#: tag.c:86
+msgid "E556: at top of tag stack"
+msgstr ""
+
+#: tag.c:435
+msgid "E425: Cannot go before first matching tag"
+msgstr ""
+
+#: tag.c:584
+#, c-format
+msgid "E426: tag not found: %s"
+msgstr "E426: tag niet gevonden: %s"
+
+#: tag.c:617
+msgid "  # pri kind tag"
+msgstr ""
+
+#: tag.c:620
+msgid "file\n"
+msgstr ""
+
+#: tag.c:954
+msgid "E427: There is only one matching tag"
+msgstr ""
+
+#: tag.c:956
+msgid "E428: Cannot go beyond last matching tag"
+msgstr ""
+
+#: tag.c:980
+#, c-format
+msgid "File \"%s\" does not exist"
+msgstr ""
+
+#. Give an indication of the number of matching tags
+#: tag.c:992
+#, c-format
+msgid "tag %d of %d%s"
+msgstr ""
+
+#: tag.c:995
+msgid " or more"
+msgstr ""
+
+#: tag.c:997
+msgid "  Using tag with different case!"
+msgstr ""
+
+#: tag.c:1052
+#, c-format
+msgid "E429: File \"%s\" does not exist"
+msgstr ""
+
+#. Highlight title
+#: tag.c:1120
+msgid ""
+"\n"
+"  # TO tag         FROM line  in file/text"
+msgstr ""
+
+#: tag.c:1547
+#, c-format
+msgid "Searching tags file %s"
+msgstr ""
+
+#: tag.c:1738
+#, c-format
+msgid "E430: Tag file path truncated for %s\n"
+msgstr ""
+
+#: tag.c:2389
+#, c-format
+msgid "E431: Format error in tags file \"%s\""
+msgstr ""
+
+#: tag.c:2393
+#, c-format
+msgid "Before byte %ld"
+msgstr ""
+
+#: tag.c:2426
+#, c-format
+msgid "E432: Tags file not sorted: %s"
+msgstr ""
+
+#. never opened any tags file
+#: tag.c:2470
+msgid "E433: No tags file"
+msgstr "E433: geen tags-bestand"
+
+#: tag.c:2749
+msgid "Ignoring long line in tags file"
+msgstr ""
+
+#: tag.c:3258
+msgid "E434: Can't find tag pattern"
+msgstr ""
+
+#: tag.c:3269
+msgid "E435: Couldn't find tag, just guessing!"
+msgstr ""
+
+#: term.c:1793
+msgid "' not known. Available builtin terminals are:"
+msgstr ""
+
+#: term.c:1817
+msgid "defaulting to '"
+msgstr ""
+
+#: term.c:2172
+msgid "E557: Cannot open termcap file"
+msgstr ""
+
+#: term.c:2176
+msgid "E558: Terminal entry not found in terminfo"
+msgstr ""
+
+#: term.c:2178
+msgid "E559: Terminal entry not found in termcap"
+msgstr ""
+
+#: term.c:2337
+#, c-format
+msgid "E436: No \"%s\" entry in termcap"
+msgstr ""
+
+#: term.c:2814
+msgid "E437: terminal capability \"cm\" required"
+msgstr ""
+
+#. Highlight title
+#: term.c:5283
+msgid ""
+"\n"
+"--- Terminal keys ---"
+msgstr ""
+
+#: ui.c:284
+msgid "new shell started\n"
+msgstr ""
+
+#: ui.c:1886
+msgid "Vim: Error reading input, exiting...\n"
+msgstr "Vim: lezen van de invoer is mislukt. Stoppen...\n"
+
+#: ui.c:2409
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr ""
+
+#. must display the prompt
+#: undo.c:654
+msgid "No undo possible; continue anyway"
+msgstr ""
+
+#. magic at start of header
+#. magic after last header
+#. magic at start of entry
+#. magic after last entry
+#. 2-byte undofile version number
+#. idem, encrypted
+#: undo.c:675
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr ""
+
+#: undo.c:784
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr ""
+
+#: undo.c:1195
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr ""
+
+#: undo.c:1243
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr ""
+
+#: undo.c:1265
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr ""
+
+#: undo.c:1282
+msgid "Skipping undo file write, noting to undo"
+msgstr ""
+
+#: undo.c:1297
+#, c-format
+msgid "Writing undo file: %s"
+msgstr ""
+
+#: undo.c:1387
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr ""
+
+#: undo.c:1467
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr ""
+
+#: undo.c:1481
+#, c-format
+msgid "Reading undo file: %s"
+msgstr ""
+
+#: undo.c:1489
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr ""
+
+#: undo.c:1499
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr ""
+
+#: undo.c:1508
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr ""
+
+#: undo.c:1514
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr ""
+
+#: undo.c:1518
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr ""
+
+#: undo.c:1524
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr ""
+
+#: undo.c:1542
+msgid "File contents changed, cannot use undo info"
+msgstr ""
+
+#: undo.c:1707
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr ""
+
+#: undo.c:1803
+#: undo.c:2011
+msgid "Already at oldest change"
+msgstr "Reeds de laatste wijziging"
+
+#: undo.c:1818
+#: undo.c:2013
+msgid "Already at newest change"
+msgstr "Reeds de nieuwste wijziging"
+
+#: undo.c:2004
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Ongedaan-nummer %ld niet gevonden"
+
+#: undo.c:2177
+msgid "E438: u_undo: line numbers wrong"
+msgstr "E438: u_undo: regelnummers onjuist"
+
+#: undo.c:2415
+msgid "more line"
+msgstr "extra regel"
+
+#: undo.c:2417
+msgid "more lines"
+msgstr "extra regel"
+
+#: undo.c:2419
+msgid "line less"
+msgstr "regel minder"
+
+#: undo.c:2421
+msgid "fewer lines"
+msgstr "regels minder"
+
+#: undo.c:2426
+msgid "change"
+msgstr "wijziging"
+
+#: undo.c:2428
+msgid "changes"
+msgstr "wijzigingen"
+
+#: undo.c:2452
+#, c-format
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+#: undo.c:2455
+msgid "before"
+msgstr "voor"
+
+#: undo.c:2455
+msgid "after"
+msgstr "na"
+
+#: undo.c:2562
+msgid "Nothing to undo"
+msgstr "Niets om ongedaan te maken"
+
+#: undo.c:2568
+msgid "number changes  time"
+msgstr "aantal wijzign  tijd"
+
+#: undo.c:2601
+#, c-format
+msgid "%ld seconds ago"
+msgstr "%ld seconden geleden"
+
+#: undo.c:2616
+msgid "E790: undojoin is not allowed after undo"
+msgstr ""
+
+#: undo.c:2666
+msgid "E439: undo list corrupt"
+msgstr ""
+
+#: undo.c:2698
+msgid "E440: undo line missing"
+msgstr ""
+
+#. Only MS VC 4.1 and earlier can do Win32s
+#: version.c:775
+msgid ""
+"\n"
+"MS-Windows 16/32-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 16/32-bit GUI-versie"
+
+#: version.c:778
+msgid ""
+"\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 64-bit GUI-versie"
+
+#: version.c:780
+msgid ""
+"\n"
+"MS-Windows 32-bit GUI version"
+msgstr ""
+"\n"
+"MS-Windows 32-bit GUIversie"
+
+#: version.c:784
+msgid " in Win32s mode"
+msgstr " in Win32s-modus"
+
+#: version.c:786
+msgid " with OLE support"
+msgstr "met OLE-ondersteuning"
+
+#: version.c:790
+msgid ""
+"\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 64-bit console-versie"
+
+#: version.c:792
+msgid ""
+"\n"
+"MS-Windows 32-bit console version"
+msgstr ""
+"\n"
+"MS-Windows 32-bit console-versie"
+
+#: version.c:797
+msgid ""
+"\n"
+"MS-Windows 16-bit version"
+msgstr ""
+"\n"
+"MS-Windows 16-bit-versie"
+
+#: version.c:801
+msgid ""
+"\n"
+"32-bit MS-DOS version"
+msgstr ""
+"\n"
+"32-bit MS-DOS-versie"
+
+#: version.c:803
+msgid ""
+"\n"
+"16-bit MS-DOS version"
+msgstr ""
+"\n"
+"16-bit MS-DOS-versie"
+
+#: version.c:809
+msgid ""
+"\n"
+"MacOS X (unix) version"
+msgstr ""
+"\n"
+"MacOS X (unix)-versie"
+
+#: version.c:811
+msgid ""
+"\n"
+"MacOS X-versie"
+msgstr ""
+"\n"
+"MacOS X version"
+
+#: version.c:814
+msgid ""
+"\n"
+"MacOS version"
+msgstr ""
+"\n"
+"MacOS-versie"
+
+#: version.c:819
+msgid ""
+"\n"
+"RISC OS version"
+msgstr ""
+"\n"
+"RISC OS-versie"
+
+#: version.c:822
+msgid ""
+"\n"
+"OpenVMS version"
+msgstr ""
+"\n"
+"OpenVMS-versie"
+
+#: version.c:837
+msgid ""
+"\n"
+"Included patches: "
+msgstr ""
+"\n"
+"Inclusief 'patches': "
+
+#: version.c:864
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"Extra 'patches': "
+
+#: version.c:876
+#: version.c:1240
+msgid "Modified by "
+msgstr "Aangepast door "
+
+#: version.c:883
+msgid ""
+"\n"
+"Compiled "
+msgstr ""
+"\n"
+"Gecompileerd "
+
+#: version.c:886
+msgid "by "
+msgstr "door "
+
+#: version.c:898
+msgid ""
+"\n"
+"Huge version "
+msgstr ""
+"\n"
+"Enorme versie "
+
+#: version.c:901
+msgid ""
+"\n"
+"Big version "
+msgstr ""
+"\n"
+"Grote versie "
+
+#: version.c:904
+msgid ""
+"\n"
+"Normal version "
+msgstr ""
+"\n"
+"Normale versie "
+
+#: version.c:907
+msgid ""
+"\n"
+"Small version "
+msgstr ""
+"\n"
+"Kleine versie "
+
+#: version.c:909
+msgid ""
+"\n"
+"Tiny version "
+msgstr ""
+"\n"
+"Mini versie "
+
+#: version.c:915
+msgid "without GUI."
+msgstr ""
+
+#: version.c:920
+msgid "with GTK2-GNOME GUI."
+msgstr ""
+
+#: version.c:922
+msgid "with GTK-GNOME GUI."
+msgstr ""
+
+#: version.c:926
+msgid "with GTK2 GUI."
+msgstr ""
+
+#: version.c:928
+msgid "with GTK GUI."
+msgstr ""
+
+#: version.c:933
+msgid "with X11-Motif GUI."
+msgstr ""
+
+#: version.c:937
+msgid "with X11-neXtaw GUI."
+msgstr ""
+
+#: version.c:939
+msgid "with X11-Athena GUI."
+msgstr ""
+
+#: version.c:943
+msgid "with Photon GUI."
+msgstr ""
+
+#: version.c:946
+msgid "with GUI."
+msgstr ""
+
+#: version.c:949
+msgid "with Carbon GUI."
+msgstr ""
+
+#: version.c:952
+msgid "with Cocoa GUI."
+msgstr ""
+
+#: version.c:955
+msgid "with (classic) GUI."
+msgstr ""
+
+#: version.c:965
+msgid "  Features included (+) or not (-):\n"
+msgstr ""
+
+#: version.c:977
+msgid "   system vimrc file: \""
+msgstr ""
+
+#: version.c:982
+msgid "     user vimrc file: \""
+msgstr ""
+
+#: version.c:987
+msgid " 2nd user vimrc file: \""
+msgstr ""
+
+#: version.c:992
+msgid " 3rd user vimrc file: \""
+msgstr ""
+
+#: version.c:997
+msgid "      user exrc file: \""
+msgstr ""
+
+#: version.c:1002
+msgid "  2nd user exrc file: \""
+msgstr ""
+
+#: version.c:1008
+msgid "  system gvimrc file: \""
+msgstr ""
+
+#: version.c:1012
+msgid "    user gvimrc file: \""
+msgstr ""
+
+#: version.c:1016
+msgid "2nd user gvimrc file: \""
+msgstr ""
+
+#: version.c:1021
+msgid "3rd user gvimrc file: \""
+msgstr ""
+
+#: version.c:1028
+msgid "    system menu file: \""
+msgstr ""
+
+#: version.c:1036
+msgid "  fall-back for $VIM: \""
+msgstr ""
+
+#: version.c:1042
+msgid " f-b for $VIMRUNTIME: \""
+msgstr ""
+
+#: version.c:1046
+msgid "Compilation: "
+msgstr "Compilatie: "
+
+#: version.c:1052
+msgid "Compiler: "
+msgstr "Compiler: "
+
+#: version.c:1057
+msgid "Linking: "
+msgstr "Linking: "
+
+#: version.c:1062
+msgid "  DEBUG BUILD"
+msgstr "  DEBUG BUILD"
+
+#: version.c:1101
+msgid "VIM - Vi IMproved"
+msgstr "VIM - Vi IMproved"
+
+#: version.c:1103
+msgid "version "
+msgstr "versie "
+
+#: version.c:1104
+msgid "by Bram Moolenaar et al."
+msgstr "door Bram Moolenaar en anderen"
+
+#: version.c:1108
+msgid "Vim is open source and freely distributable"
+msgstr "Vim is open-source en vrij verspreidbaar"
+
+#: version.c:1110
+msgid "Help poor children in Uganda!"
+msgstr "Help arme kinderen in Uganda!"
+
+#: version.c:1111
+msgid "type  :help iccf<Enter>       for information "
+msgstr "typ :help iccf<Enter> voor informatie"
+
+#: version.c:1113
+msgid "type   :q<Enter>               to exit"
+msgstr "typ :q<Enter> om te stoppen"
+
+#: version.c:1114
+msgid "type  :help<Enter>  or  <F1>  for on-line help"
+msgstr "typ :help<Enter> of <F1> voor on-line hulp"
+
+#: version.c:1115
+msgid "type  :help version7<Enter>   for version info"
+msgstr "typ :help version7<Enter> voor versieinformatie"
+
+#: version.c:1118
+msgid "Running in Vi compatible mode"
+msgstr "wordt uitgevoerd in Vi compatible-modus"
+
+#: version.c:1119
+msgid "type :set nocp<Enter> for Vim defaults"
+msgstr "typ :set nocp<Enter>  voor standaardinstellingen van Vim"
+
+#: version.c:1120
+msgid "type  :help cp-default<Enter> for info on this"
+msgstr "typ :help cp-default<Enter> voor informatie hierover"
+
+#: version.c:1135
+msgid "menu  Help->Orphans           for information    "
+msgstr "menu Help->Orphans voor informatie"
+
+#: version.c:1137
+msgid "Running modeless, typed text is inserted"
+msgstr ""
+
+#: version.c:1138
+msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
+msgstr ""
+
+#: version.c:1139
+msgid "                              for two modes      "
+msgstr ""
+
+#: version.c:1143
+msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
+msgstr ""
+
+#: version.c:1144
+msgid "                              for Vim defaults   "
+msgstr ""
+
+#: version.c:1191
+msgid "Sponsor Vim development!"
+msgstr "Ondersteun de ontwikkeling van Vim!"
+
+#: version.c:1192
+msgid "Become a registered Vim user!"
+msgstr "Word een geregistreerde Vim-gebruiker!"
+
+#: version.c:1195
+msgid "type  :help sponsor<Enter>    for information "
+msgstr "typ   :help sponsor<Enter>    voor informatie "
+
+#: version.c:1196
+msgid "type  :help register<Enter>   for information "
+msgstr "typ   :help register<Enter>   voor informatie "
+
+#: version.c:1198
+msgid "menu  Help->Sponsor/Register  for information    "
+msgstr "menu  Help->Sponsor/Register  voor informatie    "
+
+#: version.c:1208
+msgid "WARNING: Windows 95/98/ME detected"
+msgstr "Waarschuwing: Windows 95/98/ME gedetecteerd"
+
+#: version.c:1211
+msgid "type  :help windows95<Enter>  for info on this"
+msgstr "typ   :help windows95<Enter>  voor informatie hierover"
+
+#: window.c:88
+msgid "Already only one window"
+msgstr "Reeds beperkt tot een venster"
+
+#: window.c:237
+msgid "E441: There is no preview window"
+msgstr "E441: er is geen voorvertoningsvenster"
+
+#: window.c:672
+msgid "E442: Can't split topleft and botright at the same time"
+msgstr "E442: kan linkerbovenzijde en rechteronderzijde niet gelijktijdig splitsen"
+
+#: window.c:1491
+msgid "E443: Cannot rotate when another window is split"
+msgstr ""
+
+#: window.c:2120
+msgid "E444: Cannot close last window"
+msgstr "E444: sluiten laatste venster is mislukt"
+
+#: window.c:2127
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: sluiten autocmd-venster is mislukt"
+
+#: window.c:2132
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: venster kan niet sluiten want autocmd-venster blijft als enige achter"
+
+#: window.c:3195
+msgid "E445: Other window contains changes"
+msgstr "E445: ander venster blijft achter"
+
+#: window.c:5885
+msgid "E446: No file name under cursor"
+msgstr "E446: cursor staat niet op een bestandsnaam"
+
+#: window.c:6022
+#, c-format
+msgid "E447: Can't find file \"%s\" in path"
+msgstr "E447: bestand \"%s\" niet in pad gevonden"
+
+#: if_perl.xs:434
+#: globals.h:1427
+#, c-format
+msgid "E370: Could not load library %s"
+msgstr "E370: laden van bibliotheek %s is mislukt"
+
+#: if_perl.xs:685
+msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+msgstr ""
+
+#: if_perl.xs:742
+msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+msgstr ""
+
+#: GvimExt/gvimext.cpp:587
+msgid "Edit with &multiple Vims"
+msgstr ""
+
+#: GvimExt/gvimext.cpp:593
+msgid "Edit with single &Vim"
+msgstr ""
+
+#: GvimExt/gvimext.cpp:602
+msgid "Diff with Vim"
+msgstr ""
+
+#: GvimExt/gvimext.cpp:615
+msgid "Edit with &Vim"
+msgstr ""
+
+#. Now concatenate
+#: GvimExt/gvimext.cpp:637
+msgid "Edit with existing Vim - "
+msgstr ""
+
+#: GvimExt/gvimext.cpp:752
+msgid "Edits the selected file(s) with Vim"
+msgstr ""
+
+#: GvimExt/gvimext.cpp:891
+#: GvimExt/gvimext.cpp:972
+msgid "Error creating process: Check if gvim is in your path!"
+msgstr ""
+
+#: GvimExt/gvimext.cpp:892
+#: GvimExt/gvimext.cpp:906
+#: GvimExt/gvimext.cpp:973
+msgid "gvimext.dll error"
+msgstr ""
+
+#: GvimExt/gvimext.cpp:905
+msgid "Path length too long!"
+msgstr ""
+
+#: globals.h:1182
+msgid "--No lines in buffer--"
+msgstr "-- geen regels in buffer --"
+
+#.
+#. * The error messages that can be shared are included here.
+#. * Excluded are errors that are only used once and debugging messages.
+#.
+#: globals.h:1381
+msgid "E470: Command aborted"
+msgstr "E470: opdracht afgebroken"
+
+#: globals.h:1382
+msgid "E471: Argument required"
+msgstr "E471: Argument vereist"
+
+#: globals.h:1383
+msgid "E10: \\ should be followed by /, ? or &"
+msgstr "E10: \\ moet worden gevolgd door /, ? of &"
+
+#: globals.h:1385
+msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
+msgstr "E11: ongeldig in opdrachtregelvenster; <CR> voert uit, CTRL-C stopt"
+
+#: globals.h:1387
+msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
+msgstr ""
+
+#: globals.h:1389
+msgid "E171: Missing :endif"
+msgstr ""
+
+#: globals.h:1390
+msgid "E600: Missing :endtry"
+msgstr ""
+
+#: globals.h:1391
+msgid "E170: Missing :endwhile"
+msgstr ""
+
+#: globals.h:1392
+msgid "E170: Missing :endfor"
+msgstr ""
+
+#: globals.h:1393
+msgid "E588: :endwhile without :while"
+msgstr ""
+
+#: globals.h:1394
+msgid "E588: :endfor without :for"
+msgstr ""
+
+#: globals.h:1396
+msgid "E13: File exists (add ! to override)"
+msgstr ""
+
+#: globals.h:1397
+msgid "E472: Command failed"
+msgstr ""
+
+#: globals.h:1399
+#, c-format
+msgid "E234: Unknown fontset: %s"
+msgstr ""
+
+#: globals.h:1403
+#, c-format
+msgid "E235: Unknown font: %s"
+msgstr ""
+
+#: globals.h:1406
+#, c-format
+msgid "E236: Font \"%s\" is not fixed-width"
+msgstr ""
+
+#: globals.h:1408
+msgid "E473: Internal error"
+msgstr "E473: interne fout"
+
+#: globals.h:1409
+msgid "Interrupted"
+msgstr "onderbroken"
+
+#: globals.h:1410
+msgid "E14: Invalid address"
+msgstr "E14: ongeldig adres"
+
+#: globals.h:1411
+msgid "E474: Invalid argument"
+msgstr "E474: ongeldig argument"
+
+#: globals.h:1412
+#, c-format
+msgid "E475: Invalid argument: %s"
+msgstr "E475: ongeldig argument: %s"
+
+#: globals.h:1414
+#, c-format
+msgid "E15: Invalid expression: %s"
+msgstr "E15: ongeldige expressie: %s"
+
+#: globals.h:1416
+msgid "E16: Invalid range"
+msgstr "E16: ongeldig bereik"
+
+#: globals.h:1417
+msgid "E476: Invalid command"
+msgstr "E476: ongeldige opdracht"
+
+#: globals.h:1419
+#, c-format
+msgid "E17: \"%s\" is a directory"
+msgstr ""
+
+#: globals.h:1422
+#, c-format
+msgid "E364: Library call failed for \"%s()\""
+msgstr ""
+
+#: globals.h:1428
+#, c-format
+msgid "E448: Could not load library function %s"
+msgstr ""
+
+#: globals.h:1430
+msgid "E19: Mark has invalid line number"
+msgstr "E19: markering heeft een ongeldig regelnummer"
+
+#: globals.h:1431
+msgid "E20: Mark not set"
+msgstr "E20: Markering is niet ingesteld"
+
+#: globals.h:1432
+msgid "E21: Cannot make changes, 'modifiable' is off"
+msgstr "E21: kan geen veranderingen maken, 'modifiable' is uitgeschakeld"
+
+#: globals.h:1433
+msgid "E22: Scripts nested too deep"
+msgstr "E22: scripts "
+
+#: globals.h:1434
+msgid "E23: No alternate file"
+msgstr ""
+
+#: globals.h:1435
+msgid "E24: No such abbreviation"
+msgstr ""
+
+#: globals.h:1436
+msgid "E477: No ! allowed"
+msgstr ""
+
+#: globals.h:1438
+msgid "E25: GUI cannot be used: Not enabled at compile time"
+msgstr ""
+
+#: globals.h:1441
+msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
+msgstr ""
+
+#: globals.h:1444
+msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
+msgstr ""
+
+#: globals.h:1447
+msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
+msgstr ""
+
+#: globals.h:1450
+#, c-format
+msgid "E28: No such highlight group name: %s"
+msgstr "E28: naam van deze oplichtgroep is onbekend: %s"
+
+#: globals.h:1452
+msgid "E29: No inserted text yet"
+msgstr ""
+
+#: globals.h:1453
+msgid "E30: No previous command line"
+msgstr ""
+
+#: globals.h:1454
+msgid "E31: No such mapping"
+msgstr ""
+
+#: globals.h:1455
+msgid "E479: No match"
+msgstr "E479: geen overeenkomst"
+
+#: globals.h:1456
+#, c-format
+msgid "E480: No match: %s"
+msgstr "E480: geen overeenkomst: %s"
+
+#: globals.h:1457
+msgid "E32: No file name"
+msgstr "E32: geen bestandsnaam"
+
+#: globals.h:1458
+msgid "E33: No previous substitute regular expression"
+msgstr "E33: geen eerdere reguliere expressie substitutie"
+
+#: globals.h:1459
+msgid "E34: No previous command"
+msgstr "E34: geen eerdere opdracht"
+
+#: globals.h:1460
+msgid "E35: No previous regular expression"
+msgstr "E35: geen eerdere reguliere expressie"
+
+#: globals.h:1461
+msgid "E481: No range allowed"
+msgstr "E481: een bereik is niet toegestaan"
+
+#: globals.h:1463
+msgid "E36: Not enough room"
+msgstr "E36: onvoldoende ruimte"
+
+#: globals.h:1466
+#, c-format
+msgid "E247: no registered server named \"%s\""
+msgstr "E247: \"%s\" niet gevonden als geregistreerde server"
+
+#: globals.h:1468
+#, c-format
+msgid "E482: Can't create file %s"
+msgstr "E482: aanmaken bestand %s is mislukt"
+
+#: globals.h:1469
+msgid "E483: Can't get temp file name"
+msgstr "E483: bepalen naam tijdelijk bestand is mislukt"
+
+#: globals.h:1470
+#, c-format
+msgid "E484: Can't open file %s"
+msgstr "E484: openen bestand %s is mislukt"
+
+#: globals.h:1471
+#, c-format
+msgid "E485: Can't read file %s"
+msgstr "E485: lezen bestand %s is mislukt"
+
+#: globals.h:1472
+msgid "E37: No write since last change (add ! to override)"
+msgstr "E37: niets opgeslagen sinds laatste wijziging (voeg ! toe om te forceren)"
+
+#: globals.h:1473
+msgid "E38: Null argument"
+msgstr "E38: leeg argument (null)"
+
+#: globals.h:1475
+msgid "E39: Number expected"
+msgstr "E39: getal verwacht"
+
+#: globals.h:1478
+#, c-format
+msgid "E40: Can't open errorfile %s"
+msgstr "E40: openen foutenbestand %s is mislukt"
+
+#: globals.h:1481
+msgid "E233: cannot open display"
+msgstr "E233: openen scherm is mislukt"
+
+#: globals.h:1483
+msgid "E41: Out of memory!"
+msgstr "E41: te weinig geheugen!"
+
+#: globals.h:1485
+msgid "Pattern not found"
+msgstr "patroon niet gevonden"
+
+#: globals.h:1487
+#, c-format
+msgid "E486: Pattern not found: %s"
+msgstr "E486: patroon niet gevonden: %s"
+
+#: globals.h:1488
+msgid "E487: Argument must be positive"
+msgstr "E487: argument moet positief zijn"
+
+#: globals.h:1490
+msgid "E459: Cannot go back to previous directory"
+msgstr "E459: kan niet terug naar vorig Dictionary"
+
+#: globals.h:1494
+msgid "E42: No Errors"
+msgstr "E42: geen fouten"
+
+#: globals.h:1495
+msgid "E776: No location list"
+msgstr ""
+
+#: globals.h:1497
+msgid "E43: Damaged match string"
+msgstr "E43: beschadigde zoekstring"
+
+#: globals.h:1498
+msgid "E44: Corrupted regexp program"
+msgstr "E44: regexp-programma is misvormd"
+
+#: globals.h:1499
+msgid "E45: 'readonly' option is set (add ! to override)"
+msgstr "E45: 'alleen-lezen'-optie is ingeschakeld (voeg ! toe om te overschrijven)"
+
+#: globals.h:1501
+#, c-format
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: kan alleen-lezenvariabele \"%s\" niet veranderen"
+
+#: globals.h:1502
+#, c-format
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: kan variabele niet instellen in de zandbak: \"%s\""
+
+#: globals.h:1505
+msgid "E47: Error while reading errorfile"
+msgstr "E47: fout tijdens lezen foutenbestand"
+
+#: globals.h:1508
+msgid "E48: Not allowed in sandbox"
+msgstr "E48: niet toegestaan in zandbak"
+
+#: globals.h:1510
+msgid "E523: Not allowed here"
+msgstr "E523: hier niet toegestaan"
+
+#: globals.h:1513
+msgid "E359: Screen mode setting not supported"
+msgstr "E359: instelling schermmodus niet ondersteund"
+
+#: globals.h:1515
+msgid "E49: Invalid scroll size"
+msgstr "E49: ongeldige scroll-grootte"
+
+#: globals.h:1516
+msgid "E91: 'shell' option is empty"
+msgstr "E91: 'shell'-optie is leeg"
+
+#: globals.h:1518
+msgid "E255: Couldn't read in sign data!"
+msgstr ""
+
+#: globals.h:1520
+msgid "E72: Close error on swap file"
+msgstr ""
+
+#: globals.h:1521
+msgid "E73: tag stack empty"
+msgstr ""
+
+#: globals.h:1522
+msgid "E74: Command too complex"
+msgstr "E74: opdracht te ingewikkeld"
+
+#: globals.h:1523
+msgid "E75: Name too long"
+msgstr "E75: te lange naam"
+
+#: globals.h:1524
+msgid "E76: Too many ["
+msgstr "E76: teveel ["
+
+#: globals.h:1525
+msgid "E77: Too many file names"
+msgstr "E77: teveel bestandsnamen"
+
+#: globals.h:1526
+msgid "E488: Trailing characters"
+msgstr "E488: nakomende tekens"
+
+#: globals.h:1527
+msgid "E78: Unknown mark"
+msgstr "E78: onbekende markering"
+
+#: globals.h:1528
+msgid "E79: Cannot expand wildcards"
+msgstr "E79: vervangen jokertekens is mislukt"
+
+#: globals.h:1530
+msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
+msgstr "E591: 'winheight' kan niet kleiner zijn dan 'winminheight'"
+
+#: globals.h:1532
+msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
+msgstr "E592: 'winwidth' kan niet kleiner zijn dan 'winminwidth'"
+
+#: globals.h:1535
+msgid "E80: Error while writing"
+msgstr "E80: opslaan is mislukt"
+
+#: globals.h:1536
+msgid "Zero count"
+msgstr "Aantal is nul"
+
+#: globals.h:1538
+msgid "E81: Using <SID> not in a script context"
+msgstr "E81: <SID> wordt buiten de scriptcontext gebruikt"
+
+#: globals.h:1541
+msgid "E449: Invalid expression received"
+msgstr "E449: ontvangen expressie is ongeldig"
+
+#: globals.h:1544
+msgid "E463: Region is guarded, cannot modify"
+msgstr "E463: Regio is bescherm en kan niet worden veranderd"
+
+#: globals.h:1545
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans staat geen veranderingen in alleen-lezenbestanden toe"
+
+#: globals.h:1547
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: interne fout: %s"
+
+#: globals.h:1548
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: patroon gebruikt meer geheugen dan 'maxmempattern'"
+
+#: globals.h:1549
+msgid "E749: empty buffer"
+msgstr "E749: leeg buffer"
+
+#: globals.h:1552
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: zoekpatroon of scheidingsteken is ongeldig"
+
+#: globals.h:1554
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: bestand is in een ander buffer geladen"
+
+#: globals.h:1557
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: Optie '%s' is niet ingesteld"
+
+#: globals.h:1564
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "zoeken bereikte TOP, verder vanaf BODEM"
+
+#: globals.h:1565
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "zoeken bereikte BODEM, verder vanaf TOP"
+
diff -Naur vim73.orig/src/po/no.po vim73/src/po/no.po
--- vim73.orig/src/po/no.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/no.po	2013-08-04 19:09:10.663943698 +0000
@@ -2070,21 +2070,6 @@
 msgstr "&Angre"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Kan ikke laste Zap-skrifttype '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Kan ikke bruke skrifttype %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Sender beskjed om  avslutte barneprosess.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Fant ikke vindutittel \"%s\""
 
@@ -4324,9 +4309,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ulovlig tegn '%c' i skrifttypenavn \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ugyldig 'osfiletype'-valg - bruker Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Dobbelt signal, avslutter\n"
 
diff -Naur vim73.orig/src/po/pl.UTF-8.po vim73/src/po/pl.UTF-8.po
--- vim73.orig/src/po/pl.UTF-8.po	2010-08-13 14:11:08.000000000 +0000
+++ vim73/src/po/pl.UTF-8.po	2013-08-04 19:09:10.667277022 +0000
@@ -2147,21 +2147,6 @@
 msgstr "&Cofnij"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nie mogę załadować czcionki Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Nie mogę użyć czcionki %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Wysyłam zawiadomienie kończące proces pochodny.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nie mogę znaleźć tytułu okna \"%s\""
 
@@ -4472,9 +4457,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Niewłaściwa opcja 'osfiletype' - używam Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Podwójny sygnał, wychodzę\n"
 
diff -Naur vim73.orig/src/po/pl.cp1250.po vim73/src/po/pl.cp1250.po
--- vim73.orig/src/po/pl.cp1250.po	2010-08-15 13:02:25.000000000 +0000
+++ vim73/src/po/pl.cp1250.po	2013-08-04 19:09:10.673943668 +0000
@@ -2147,21 +2147,6 @@
 msgstr "&Cofnij"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nie mog zaadowa czcionki Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Nie mog uy czcionki %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Wysyam zawiadomienie koczce proces pochodny.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nie mog znale tytuu okna \"%s\""
 
@@ -4472,9 +4457,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Niewaciwa opcja 'osfiletype' - uywam Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Podwjny sygna, wychodz\n"
 
diff -Naur vim73.orig/src/po/pl.po vim73/src/po/pl.po
--- vim73.orig/src/po/pl.po	2010-08-13 13:58:37.000000000 +0000
+++ vim73/src/po/pl.po	2013-08-04 19:09:10.680610315 +0000
@@ -2147,21 +2147,6 @@
 msgstr "&Cofnij"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nie mog zaadowa czcionki Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Nie mog uy czcionki %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Wysyam zawiadomienie koczce proces pochodny.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nie mog znale tytuu okna \"%s\""
 
@@ -4472,9 +4457,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Niewaciwa opcja 'osfiletype' - uywam Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Podwjny sygna, wychodz\n"
 
diff -Naur vim73.orig/src/po/pt_BR.po vim73/src/po/pt_BR.po
--- vim73.orig/src/po/pt_BR.po	2010-08-11 21:08:01.000000000 +0000
+++ vim73/src/po/pt_BR.po	2013-08-04 19:09:10.683943638 +0000
@@ -2098,21 +2098,6 @@
 msgstr "&Desfazer"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Impossvel carregar a fonte Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Impossvel usar a fonte %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Enviando mensagem para terminar processo-filho.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Impossvel encontrar janela de ttulo \"%s\""
 
@@ -4342,9 +4327,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Caractere '%c' invlido no nome da fonte \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Valor invlido para 'osfiletype' - usando Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Sinal duplo, saindo\n"
 
diff -Naur vim73.orig/src/po/ru.cp1251.po vim73/src/po/ru.cp1251.po
--- vim73.orig/src/po/ru.cp1251.po	2010-08-15 13:02:25.000000000 +0000
+++ vim73/src/po/ru.cp1251.po	2013-08-04 19:09:10.687276962 +0000
@@ -1,39 +1,60 @@
 # Russian translation for Vim
-# 
+#
 #       Vim ":help uganda"
-#  ,  Vim    ":help "
 #
 # vassily "vr" ragosin <vrr@users.sourceforge.net>, 2004
-#
-# Generated from ru.po, DO NOT EDIT.
+# Sergey Alyoshin <alyoshin.s@gmail.com>, 2013
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 6.3\n"
+"Project-Id-Version: vim_7.3_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-06-15 09:39+0400\n"
-"PO-Revision-Date: 2004-05-19 00:23+0400\n"
-"Last-Translator: vassily ragosin <vrr@users.sourceforge.net>\n"
-"Language-Team: vassily ragosin <vrr@users.sourceforge.net>\n"
+"POT-Creation-Date: 2013-06-01 13:52+0400\n"
+"PO-Revision-Date: 2013-06-01 14:16+0400\n"
+"Last-Translator: Sergey Alyoshin <alyoshin.s@gmail.com>\n"
+"Language-Team: \n"
+"Language: Russian\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=cp1251\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init()    "
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr ""
+"E817:   /    Blowfish"
+
+msgid "E818: sha256 test failed"
+msgstr "E818:     sha256"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819:     Blowfish"
+
+msgid "[Location List]"
+msgstr "[ ]"
+
+msgid "[Quickfix List]"
+msgstr "[  ]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855:    "
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82:       , ..."
 
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr "E83:     ,   ..."
 
-#, c-format
 msgid "E515: No buffers were unloaded"
 msgstr "E515:        "
 
-#, c-format
 msgid "E516: No buffers were deleted"
 msgstr "E516:      "
 
-#, c-format
 msgid "E517: No buffers were wiped out"
 msgstr "E517:      "
 
@@ -77,7 +98,8 @@
 
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr "E89:    %ld   (!,   )"
+msgstr ""
+"E89:    %ld   ( !,   )"
 
 msgid "E90: Cannot unload last buffer"
 msgstr "E90:      "
@@ -116,6 +138,9 @@
 msgid "[Read errors]"
 msgstr "[ ]"
 
+msgid "[RO]"
+msgstr "[]"
+
 msgid "[readonly]"
 msgstr "[  ]"
 
@@ -131,15 +156,15 @@
 msgid "line %ld of %ld --%d%%-- col "
 msgstr ". %ld  %ld --%d%%-- . "
 
-msgid "[No file]"
-msgstr "[ ]"
+msgid "[No Name]"
+msgstr "[ ]"
 
 #. must be a help buffer
 msgid "help"
 msgstr ""
 
-msgid "[help]"
-msgstr "[]"
+msgid "[Help]"
+msgstr "[]"
 
 msgid "[Preview]"
 msgstr "[]"
@@ -153,7 +178,6 @@
 msgid "Top"
 msgstr ""
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -161,11 +185,8 @@
 "\n"
 "#  :\n"
 
-msgid "[Error List]"
-msgstr "[ ]"
-
-msgid "[No File]"
-msgstr "[ ]"
+msgid "[Scratch]"
+msgstr "[]"
 
 msgid ""
 "\n"
@@ -186,18 +207,27 @@
 msgid "E96: Can not diff more than %ld buffers"
 msgstr "E96:         %ld "
 
+msgid "E810: Cannot read or write temp files"
+msgstr "E810:      "
+
 msgid "E97: Cannot create diffs"
 msgstr "E97:    "
 
 msgid "Patch file"
 msgstr "-"
 
+msgid "E816: Cannot read patch output"
+msgstr "E816:    patch"
+
 msgid "E98: Cannot read diff output"
-msgstr "E98:     diff"
+msgstr "E98:    diff"
 
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99:       "
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793:       "
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100:      "
 
@@ -212,6 +242,9 @@
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103:  \"%s\"     "
 
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787:   "
+
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104:   Escape    "
 
@@ -221,17 +254,15 @@
 msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105:  :loadkeymap    "
 
+msgid "E791: Empty keymap entry"
+msgstr "E791:    "
+
 msgid " Keyword completion (^N^P)"
 msgstr "    (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^V^N^P)"
-msgstr "  ^X (^E^Y^L^]^F^I^K^D^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr "     (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr "  ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr "    (^L^N^P)"
@@ -257,15 +288,33 @@
 msgid " Command-line completion (^V^N^P)"
 msgstr "    (^V^N^P)"
 
+msgid " User defined completion (^U^N^P)"
+msgstr "   (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " Omni- (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr "    (s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr "     (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr " "
 
-msgid "'thesaurus' option is empty"
-msgstr "    'thesaurus'"
+msgid "E839: Completion function changed window"
+msgstr "E839:    "
+
+msgid "E840: Completion function deleted text"
+msgstr "E840:    "
 
 msgid "'dictionary' option is empty"
 msgstr "    'dictionary'"
 
+msgid "'thesaurus' option is empty"
+msgstr "    'thesaurus'"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr " : %s"
@@ -280,7 +329,6 @@
 msgid "Scanning: %s"
 msgstr ": %s"
 
-#, c-format
 msgid "Scanning tags."
 msgstr "   ."
 
@@ -311,11 +359,100 @@
 msgid "match %d"
 msgstr " %d"
 
-#. Skip further arguments but do continue to
-#. * search for a trailing command.
+msgid "E18: Unexpected characters in :let"
+msgstr "E18:    :let"
+
+#, c-format
+msgid "E684: list index out of range: %ld"
+msgstr "E684:     : %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121:  : %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111:  ']'"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686:  %s   "
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712:  %s     "
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713:      "
+
+msgid "E714: List required"
+msgstr "E714:  "
+
+msgid "E715: Dictionary required"
+msgstr "E715:  "
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118:      %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716:    : %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122:  %s  .  !,   ."
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717:     "
+
+msgid "E718: Funcref required"
+msgstr "E718:    "
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719:   [:]  "
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734:     %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130:  : %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461:   : %s"
+
+msgid "E687: Less targets than List items"
+msgstr "E687:     "
+
+msgid "E688: More targets than List items"
+msgstr "E688:     "
+
+msgid "Double ; in list of variables"
+msgstr " ;   "
+
 #, c-format
-msgid "E106: Unknown variable: \"%s\""
-msgstr "E106:  : \"%s\""
+msgid "E738: Can't list variables for %s"
+msgstr "E738:     %s"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689:      "
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:]   "
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:]   "
+
+msgid "E710: List value has more items than target"
+msgstr "E710:  -    "
+
+msgid "E711: List value has not enough items"
+msgstr "E711: -    "
+
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690:  \"in\"  :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -325,14 +462,38 @@
 msgid "E108: No such variable: \"%s\""
 msgstr "E108:   : \"%s\""
 
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743:      ()"
+
 msgid "E109: Missing ':' after '?'"
 msgstr "E109:  ':'  '?'"
 
+msgid "E691: Can only compare List with List"
+msgstr "E691:      "
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692:    "
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735:      "
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736:    "
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693:          "
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694:      "
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804:   '%'     "
+
 msgid "E110: Missing ')'"
 msgstr "E110:  ')'"
 
-msgid "E111: Missing ']'"
-msgstr "E111:  ']'"
+msgid "E695: Cannot index a Funcref"
+msgstr "E695:     "
 
 #, c-format
 msgid "E112: Option name missing: %s"
@@ -351,6 +512,37 @@
 msgstr "E115:  : %s"
 
 #, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696:    : %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697:    ']': %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720:    : %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721:    : \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722:    : %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723:    '}': %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724:      "
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740:      %s"
+
+#, c-format
 msgid "E116: Invalid arguments for function %s"
 msgstr "E116:    %s  "
 
@@ -359,10 +551,6 @@
 msgstr "E117:  : %s"
 
 #, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118:      %s"
-
-#, c-format
 msgid "E119: Not enough arguments for function: %s"
 msgstr "E119:     %s"
 
@@ -370,6 +558,22 @@
 msgid "E120: Using <SID> not in a script context: %s"
 msgstr "E120: <SID>   : %s"
 
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725:   dict  : %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808:       "
+
+msgid "add() argument"
+msgstr " add()"
+
+msgid "E699: Too many arguments"
+msgstr "E699:   "
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete()      "
+
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
 #. * this way has the compelling advantage that translations need not to
@@ -378,54 +582,148 @@
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "extend() argument"
+msgstr " extend()"
+
+#, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737:   : %s"
+
+msgid "map() argument"
+msgstr " map()"
+
+msgid "filter() argument"
+msgstr " filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld : "
 
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700:  : %s"
+
 msgid ""
 "&OK\n"
 "&Cancel"
 msgstr ""
 "&OK\n"
-"&"
+"&C "
 
 msgid "called inputrestore() more often than inputsave()"
 msgstr " inputrestore()  ,   inputsave()"
 
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655:     (?)"
+msgid "insert() argument"
+msgstr " insert()"
+
+msgid "E786: Range not allowed"
+msgstr "E786:   "
+
+msgid "E701: Invalid type for len()"
+msgstr "E701:    len()"
+
+msgid "E726: Stride is zero"
+msgstr "E726:  "
+
+msgid "E727: Start past end"
+msgstr "E727:   "
+
+msgid "<empty>"
+msgstr "<>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240:     Vim"
 
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241:      %s"
+
 msgid "E277: Unable to read a server reply"
 msgstr "E277:   "
 
+msgid "remove() argument"
+msgstr " remove()"
+
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655:     (?)"
+
+msgid "reverse() argument"
+msgstr " reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258:    "
 
-#, c-format
-msgid "E241: Unable to send to %s"
-msgstr "E241:      %s"
+msgid "sort() argument"
+msgstr " sort()"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702:      "
 
 msgid "(Invalid)"
 msgstr "()"
 
+msgid "E677: Error writing temp file"
+msgstr "E677:     "
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805:       "
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703:      "
+
+msgid "E745: Using a List as a Number"
+msgstr "E745:    "
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728:    "
+
+msgid "E729: using Funcref as a String"
+msgstr "E729:      "
+
+msgid "E730: using List as a String"
+msgstr "E730:    "
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731:    "
+
+msgid "E806: using Float as a String"
+msgstr "E806:       "
+
 #, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121:  : %s"
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706:    : %s"
 
 #, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461:   : %s"
+msgid "E795: Cannot delete variable %s"
+msgstr "E795:    %s"
 
 #, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122:  %s  .  !,   ."
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr ""
+"E704:          : "
+"%s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705:      : %s"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741:  : %s"
+
+msgid "Unknown"
+msgstr ""
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742:    %s"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698:      "
 
 #, c-format
 msgid "E123: Undefined function: %s"
-msgstr "E123:  : %s"
+msgstr "E123:  : %s"
 
 #, c-format
 msgid "E124: Missing '(': %s"
@@ -435,23 +733,33 @@
 msgid "E125: Illegal argument: %s"
 msgstr "E125:  : %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853:   : %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126:   :endfunction"
 
 #, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707:     : %s"
+
+#, c-format
 msgid "E127: Cannot redefine function %s: It is in use"
 msgstr "E127:    %s,  "
 
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746:       : %s"
+
 msgid "E129: Function name required"
 msgstr "E129:   "
 
 #, c-format
-msgid "E128: Function name must start with a capital: %s"
-msgstr "E128:       : %s"
-
-#, c-format
-msgid "E130: Undefined function: %s"
-msgstr "E130:  %s  "
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr ""
+"E128:          "
+": %s"
 
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
@@ -460,7 +768,6 @@
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
 msgstr "E132:    ,   'maxfuncdepth'"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "calling %s"
 msgstr " %s"
@@ -474,10 +781,9 @@
 msgstr "%s  #%ld"
 
 #, c-format
-msgid "%s returning \"%s\""
-msgstr "%s  \"%s\""
+msgid "%s returning %s"
+msgstr "%s  %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "continuing in %s"
 msgstr "  %s"
@@ -485,7 +791,6 @@
 msgid "E133: :return not inside a function"
 msgstr "E133:  :return  "
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -493,6 +798,16 @@
 "\n"
 "#  :\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\t      "
+
+msgid "No old files"
+msgstr "  "
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -543,9 +858,13 @@
 msgid " marks"
 msgstr " "
 
+msgid " oldfiles"
+msgstr "  "
+
 msgid " FAILED"
 msgstr " "
 
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137:     viminfo : %s"
@@ -563,7 +882,6 @@
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "#   viminfo   Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -571,7 +889,6 @@
 "#   (!) .\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "#   'encoding'    \n"
 
@@ -581,11 +898,6 @@
 msgid "Save As"
 msgstr " "
 
-#. Overwriting a file that is loaded in another buffer is not a
-#. * good idea.
-msgid "E139: File is loaded in another buffer"
-msgstr "E139:     "
-
 msgid "Write partial file?"
 msgstr "  ?"
 
@@ -593,8 +905,16 @@
 msgstr "E140:      !"
 
 #, c-format
-msgid "Overwrite existing file \"%.*s\"?"
-msgstr "   \"%.*s\"?"
+msgid "Overwrite existing file \"%s\"?"
+msgstr "   \"%s\"?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "- \"%s\" , ?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: - : %s (:silent!   )"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -605,12 +925,27 @@
 
 #, c-format
 msgid ""
-"'readonly' option is set for \"%.*s\".\n"
+"'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-" \"%.*s\"   'readonly'.\n"
+" \"%s\"   'readonly'.\n"
 "?"
 
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+" \"%s\"      .\n"
+", ,   .\n"
+" ?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr ""
+"E505: \"%s\"     ( !,   )"
+
 msgid "Edit File"
 msgstr " "
 
@@ -634,10 +969,17 @@
 msgid "(Interrupted) "
 msgstr "()"
 
+msgid "1 match"
+msgstr " "
+
 msgid "1 substitution"
 msgstr " "
 
 #, c-format
+msgid "%ld matches"
+msgstr "%ld "
+
+#, c-format
 msgid "%ld substitutions"
 msgstr "%ld "
 
@@ -658,7 +1000,6 @@
 msgid "Pattern found in every line: %s"
 msgstr "     : %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -673,7 +1014,7 @@
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661:  ,  '%s'  %s "
+msgstr "E661:  ,  '%s'  %s "
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
@@ -700,8 +1041,8 @@
 msgstr "E670:        : %s"
 
 #, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s"
-msgstr "E154:   \"%s\"   %s"
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154:   \"%s\"   %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -767,9 +1108,12 @@
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s . %ld"
 
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750:   \":profile start {-}\""
+
 #, c-format
-msgid "Save changes to \"%.*s\"?"
-msgstr "   \"%.*s\"?"
+msgid "Save changes to \"%s\"?"
+msgstr "   \"%s\"?"
 
 msgid "Untitled"
 msgstr " "
@@ -793,7 +1137,7 @@
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E666:   : %s"
+msgstr "E666:   : %s"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
@@ -834,6 +1178,21 @@
 msgid "finished sourcing %s"
 msgstr "  %s "
 
+msgid "modeline"
+msgstr " "
+
+msgid "--cmd argument"
+msgstr "--cmd "
+
+msgid "-c argument"
+msgstr "-c "
+
+msgid "environment variable"
+msgstr " "
+
+msgid "error handler"
+msgstr " "
+
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
 msgstr ""
 "W15: :   .   ^M"
@@ -845,100 +1204,25 @@
 msgstr "E168:  :finish    "
 
 #, c-format
-msgid "Page %d"
-msgstr " %d"
-
-msgid "No text to be printed"
-msgstr " "
-
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr " . %d (%d%%)"
+msgid "Current %slanguage: \"%s\""
+msgstr " %s: \"%s\""
 
 #, c-format
-msgid " Copy %d of %d"
-msgstr "  %d  %d"
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197:     \"%s\""
 
-#, c-format
-msgid "Printed: %s"
-msgstr ": %s"
+msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+msgstr "   Ex.       \"visual\""
 
-#, c-format
-msgid "Printing aborted"
-msgstr " "
+msgid "E501: At end-of-file"
+msgstr "E501:   "
 
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455:     PostScript"
+msgid "E169: Command too recursive"
+msgstr "E169:   "
 
 #, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624:    \"%s\""
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457:     PostScript \"%s\""
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618:  \"%s\"     PostScript"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619:  \"%s\"      PostScript"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621:   \"%s\"  "
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324:    PostScript"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456:    \"%s\""
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456:   PostScript \"prolog.ps\"  "
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456:   PostScript \"%s.ps\"  "
-
-#, c-format
-msgid "E620: Unable to convert from multi-byte to \"%s\" encoding"
-msgstr ""
-"E620:       \"%s\" "
-
-msgid "Sending to printer..."
-msgstr "  ..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365:      PostScript"
-
-msgid "Print job sent."
-msgstr "   ."
-
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr " %s: \"%s\""
-
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197:     \"%s\""
-
-msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "   Ex.       \"visual\""
-
-#. must be at EOF
-msgid "E501: At end-of-file"
-msgstr "E501:   "
-
-msgid "E169: Command too recursive"
-msgstr "E169: C  "
-
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605:    : %s"
+msgid "E605: Exception not caught: %s"
+msgstr "E605:    : %s"
 
 msgid "End of sourced file"
 msgstr "  "
@@ -995,7 +1279,7 @@
 msgstr ",  ,  ."
 
 msgid "E175: No attribute specified"
-msgstr "E175:   "
+msgstr "E175:   "
 
 msgid "E176: Invalid number of arguments"
 msgstr "E176:   "
@@ -1006,19 +1290,8 @@
 msgid "E178: Invalid default value for count"
 msgstr "E178:   -  "
 
-msgid "E179: argument required for complete"
-msgstr "E179:     "
-
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180:   : %s"
-
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr ""
-"E468:        "
-
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467:      "
+msgid "E179: argument required for -complete"
+msgstr "E179:  -complete   "
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
@@ -1030,26 +1303,59 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183:       "
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841:        "
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184:    : %s"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185:   %s  "
+msgid "E180: Invalid complete value: %s"
+msgstr "E180:   : %s"
+
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr ""
+"E468:        "
+
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467:      "
+
+msgid "unknown"
+msgstr ""
+
+#, c-format
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185:     '%s'"
 
 msgid "Greetings, Vim user!"
-msgstr ",  Vim!"
+msgstr " ,  Vim!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784:    "
+
+msgid "Already only one tab page"
+msgstr "    "
 
 msgid "Edit File in new window"
 msgstr "    "
 
+#, c-format
+msgid "Tab page %d"
+msgstr " %d"
+
 msgid "No swap file"
 msgstr " -"
 
 msgid "Append File"
 msgstr " "
 
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr ""
+"E747:   ,   ( !,   "
+")"
+
 msgid "E186: No previous directory"
 msgstr "E186:   "
 
@@ -1057,7 +1363,7 @@
 msgstr "E187: "
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465:  :winsize     "
+msgstr "E465:  :winsize     "
 
 #, c-format
 msgid "Window position: X %d, Y %d"
@@ -1067,7 +1373,7 @@
 msgstr "E188:        "
 
 msgid "E466: :winpos requires two number arguments"
-msgstr "E466:  :winpos     "
+msgstr "E466:  :winpos     "
 
 msgid "Save Redirection"
 msgstr " "
@@ -1082,8 +1388,12 @@
 msgstr " "
 
 #, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739:   : %s"
+
+#, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\"  (!,   )"
+msgstr "E189: \"%s\"  ( !,   )"
 
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
@@ -1096,6 +1406,9 @@
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192:       :normal"
 
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #<     +eval"
+
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194:       '#'"
 
@@ -1109,7 +1422,10 @@
 msgstr "E497:       \"<amatch>\""
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498:    :source   \"<sfile>\""
+msgstr "E498:    :source   \"<sfile>\""
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842:      \"<slnum>\""
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
@@ -1176,7 +1492,7 @@
 msgstr ""
 
 msgid "E579: :if nesting too deep"
-msgstr "E579:    :if"
+msgstr "E579:    :if"
 
 msgid "E580: :endif without :if"
 msgstr "E580: :endif  :if"
@@ -1188,22 +1504,28 @@
 msgstr "E582: :elseif  :if"
 
 msgid "E583: multiple :else"
-msgstr "E583:   :else"
+msgstr "E583:   :else"
 
 msgid "E584: :elseif after :else"
 msgstr "E584: :elseif  :else"
 
-msgid "E585: :while nesting too deep"
-msgstr "E585:    :while"
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585:    :while  :for"
+
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue  :while  :for"
 
-msgid "E586: :continue without :while"
-msgstr "E586: :continue  :while"
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break  :while  :for"
 
-msgid "E587: :break without :while"
-msgstr "E587: :break  :while"
+msgid "E732: Using :endfor with :while"
+msgstr "E732:  :endfor  :while"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733:  :endwhile  :for"
 
 msgid "E601: :try nesting too deep"
-msgstr "E601:    :try"
+msgstr "E601:    :try"
 
 msgid "E603: :catch without :try"
 msgstr "E603: :catch  :try"
@@ -1218,13 +1540,19 @@
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607:   :finally"
+msgstr "E607:   :finally"
 
 msgid "E602: :endtry without :try"
 msgstr "E602: :endtry  :try"
 
 msgid "E193: :endfunction not inside a function"
-msgstr "E193:  :endfunction     "
+msgstr "E193:  :endfunction     "
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788:      "
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811:       "
 
 msgid "tagname"
 msgstr " "
@@ -1261,6 +1589,9 @@
 msgid "E199: Active window or buffer deleted"
 msgstr "E199:     "
 
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812:      "
+
 msgid "Illegal file name"
 msgstr "  "
 
@@ -1270,9 +1601,18 @@
 msgid "is not a file"
 msgstr "  "
 
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "  (   'opendevice')"
+
 msgid "[New File]"
 msgstr "[ ]"
 
+msgid "[New DIRECTORY]"
+msgstr "[ ]"
+
+msgid "[File too big]"
+msgstr "[  ]"
+
 msgid "[Permission Denied]"
 msgstr "[ ]"
 
@@ -1280,13 +1620,13 @@
 msgstr "E200:     *ReadPre   "
 
 msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201:  *ReadPre     "
+msgstr "E201:  *ReadPre     "
 
 msgid "Vim: Reading from stdin...\n"
-msgstr "Vim:       stdin...\n"
+msgstr "Vim:      stdin...\n"
 
 msgid "Reading from stdin..."
-msgstr "      stdin..."
+msgstr "     stdin..."
 
 #. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
@@ -1301,15 +1641,12 @@
 msgid "[socket]"
 msgstr "[]"
 
-msgid "[RO]"
-msgstr "[RO]"
+msgid "[character special]"
+msgstr "[ ]"
 
 msgid "[CR missing]"
 msgstr "[  CR]"
 
-msgid "[NL found]"
-msgstr "[  NL]"
-
 msgid "[long lines split]"
 msgstr "[  ]"
 
@@ -1319,11 +1656,15 @@
 msgid "[converted]"
 msgstr "[]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[]"
 
-msgid "[CONVERSION ERROR]"
-msgstr "[ ]"
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[    %ld]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
@@ -1341,6 +1682,12 @@
 msgid "can't read output of 'charconvert'"
 msgstr "   'charconvert'"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821:    "
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676:      acwrite"
+
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
 msgstr ""
 "E203: ,   ,    "
@@ -1357,32 +1704,41 @@
 msgid "is not a file or writable device"
 msgstr "    ,   "
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "      'opendevice'"
+
 msgid "is read-only (add ! to override)"
-msgstr "    (!,   )"
+msgstr "    ( !,   )"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506:      (!,   )"
+msgstr ""
+"E506:      ( !,   )"
 
 msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507:     (!,   )"
+msgstr ""
+"E507:     ( !,   )"
 
 msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508:     (!,   )"
+msgstr ""
+"E508:     ( !,   )"
 
 msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509:     (!,   )"
+msgstr ""
+"E509:     ( !,   )"
 
 msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510:     (!,   )"
+msgstr ""
+"E510:     ( !,   )"
 
 msgid "E460: The resource fork would be lost (add ! to override)"
-msgstr "E460:     (!,   )"
+msgstr "E460:     ( !,   )"
 
 msgid "E214: Can't find temp file for writing"
 msgstr "E214:      "
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213:   (!    )"
+msgstr ""
+"E213:   ( !    )"
 
 msgid "E166: Can't open linked file for writing"
 msgstr "E166:      "
@@ -1396,15 +1752,29 @@
 msgid "E512: Close failed"
 msgstr "E512:    "
 
-msgid "E513: write error, conversion failed"
-msgstr "E513:  ,   "
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr ""
+"E513:  ,    ( 'fenc',  "
+")"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513:  ,      %ld ( "
+"'fenc',  )"
 
 msgid "E514: write error (file system full?)"
-msgstr "E514:   (  ?)"
+msgstr "E514:   (  ?)"
 
 msgid " CONVERSION ERROR"
 msgstr "  "
 
+#, c-format
+msgid " in line %ld;"
+msgstr "   %ld;"
+
 msgid "[Device]"
 msgstr "[]"
 
@@ -1412,13 +1782,13 @@
 msgstr "[]"
 
 msgid " [a]"
-msgstr " [a]"
+msgstr " []"
 
 msgid " appended"
 msgstr " "
 
 msgid " [w]"
-msgstr " [w]"
+msgstr " []"
 
 msgid " written"
 msgstr " "
@@ -1472,6 +1842,11 @@
 msgstr "1 "
 
 #, c-format
+msgid "%lld characters"
+msgstr ": %lld"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr ": %ld"
 
@@ -1506,8 +1881,8 @@
 msgstr "E246:      FileChangedShell"
 
 #, c-format
-msgid "E211: Warning: File \"%s\" no longer available"
-msgstr "E211: :  \"%s\"   "
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211:  \"%s\"   "
 
 #, c-format
 msgid ""
@@ -1517,25 +1892,31 @@
 "W12: :  \"%s\"   Vim     "
 " "
 
+msgid "See \":help W12\" for more info."
+msgstr ". \":help W12\"   ."
+
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
 msgstr ""
 "W11: :  \"%s\"     "
 
+msgid "See \":help W11\" for more info."
+msgstr ". \":help W11\"   ."
+
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
 "W16: :     \"%s\"     "
 ""
 
+msgid "See \":help W16\" for more info."
+msgstr ". \":help W16\"   ."
+
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
 msgstr ""
 "W13: :  \"%s\"     "
 
-msgid "See \":help W11\" for more info."
-msgstr ".    \":help W11\"."
-
 msgid "Warning"
 msgstr ""
 
@@ -1544,7 +1925,7 @@
 "&Load File"
 msgstr ""
 "&OK\n"
-"& "
+"&L  "
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
@@ -1557,6 +1938,10 @@
 msgid "--Deleted--"
 msgstr "----"
 
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "- : %s <=%d>"
+
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
@@ -1582,6 +1967,10 @@
 "\n"
 "---  ---"
 
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>:    "
+
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217:      "
 
@@ -1599,7 +1988,6 @@
 msgid "Executing %s"
 msgstr " %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "autocommand %s"
 msgstr " %s"
@@ -1621,27 +2009,31 @@
 msgstr ""
 "E351:          'foldmethod'"
 
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld   "
+
 msgid "E222: Add to read buffer"
 msgstr "E222:    "
 
 msgid "E223: recursive mapping"
-msgstr "E223:  "
+msgstr "E223:  "
 
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
-msgstr "E224:      %s"
+msgstr "E224:      %s"
 
 #, c-format
 msgid "E225: global mapping already exists for %s"
-msgstr "E225:      %s"
+msgstr "E225:      %s"
 
 #, c-format
 msgid "E226: abbreviation already exists for %s"
-msgstr "E226:     %s"
+msgstr "E226:     %s"
 
 #, c-format
 msgid "E227: mapping already exists for %s"
-msgstr "E227:     %s"
+msgstr "E227:     %s"
 
 msgid "No abbreviation found"
 msgstr "  "
@@ -1652,6 +2044,12 @@
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap:  "
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851:      . "
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: -    . "
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229:      "
 
@@ -1664,15 +2062,18 @@
 "E665:     . ,   "
 
 msgid "E231: 'guifontwide' invalid"
-msgstr "E231:    'guifontwide'"
+msgstr "E231:    'guifontwide'"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599:    'imactivatekey'"
+msgstr "E599:    'imactivatekey'"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
 msgstr "E254:    %s"
 
+msgid "No match at cursor, finding next"
+msgstr "   ,  "
+
 msgid "<cannot open> "
 msgstr "< > "
 
@@ -1706,9 +2107,6 @@
 "E232: \"\"  ,   ,   , "
 "   "
 
-msgid "Vim dialog..."
-msgstr "  Vim..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -1722,10 +2120,10 @@
 msgstr " "
 
 msgid "VIM - Search and Replace..."
-msgstr "VIM -   ..."
+msgstr "VIM    ..."
 
 msgid "VIM - Search..."
-msgstr "VIM - ..."
+msgstr "VIM  ..."
 
 msgid "Find what:"
 msgstr " :"
@@ -1751,60 +2149,70 @@
 msgid "Down"
 msgstr ""
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr " "
 
+#. 'Replace' button
 msgid "Replace"
 msgstr ""
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr " "
 
 msgid "Vim: Received \"die\" request from session manager\n"
 msgstr "Vim:        \n"
 
+msgid "Close"
+msgstr ""
+
+msgid "New tab"
+msgstr " "
+
+msgid "Open Tab..."
+msgstr " ..."
+
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "Vim:     \n"
 
-msgid "Font Selection"
-msgstr " "
-
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "    CUT_BUFFER0"
+msgid "&Filter"
+msgstr "&"
 
-msgid "Filter"
-msgstr ""
+msgid "&Cancel"
+msgstr "&"
 
 msgid "Directories"
 msgstr ""
 
-msgid "Help"
-msgstr ""
+msgid "Filter"
+msgstr ""
+
+msgid "&Help"
+msgstr "&"
 
 msgid "Files"
 msgstr ""
 
+msgid "&OK"
+msgstr "&"
+
 msgid "Selection"
 msgstr ""
 
-msgid "Undo"
-msgstr ""
+msgid "Find &Next"
+msgstr " &"
 
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610:    Zap '%s'"
+msgid "&Replace"
+msgstr "&"
 
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611:    %s"
+msgid "Replace &All"
+msgstr " &"
 
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"    -.\n"
+msgid "&Undo"
+msgstr "&"
 
+#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671:    \"%s\"  "
 
@@ -1815,20 +2223,34 @@
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672:      MDI"
 
+msgid "Close tab"
+msgstr " "
+
+msgid "Open tab..."
+msgstr " ..."
+
 msgid "Find string (use '\\\\' to find  a '\\')"
 msgstr "  ( '\\\\'   '\\')"
 
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "   ( '\\\\'   '\\')"
 
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr " "
+
+msgid "Directory\t*.nothing\n"
+msgstr "\t*.\n"
+
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
 msgstr ""
-"Vim E458:      ,   "
+"Vim E458:      ,    "
 " "
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-msgstr "E250:    %s     :"
+msgstr "E250:    %s     :"
 
 #, c-format
 msgid "E252: Fontset name: %s"
@@ -1866,9 +2288,133 @@
 "  font1: %ld\n"
 "\n"
 
+msgid "Invalid font specification"
+msgstr "  "
+
+msgid "&Dismiss"
+msgstr "&"
+
+msgid "no specific match"
+msgstr "  "
+
+msgid "Vim - Font Selector"
+msgstr "Vim   "
+
+msgid "Name:"
+msgstr ":"
+
+#. create toggle button
+msgid "Show size in Points"
+msgstr "   "
+
+msgid "Encoding:"
+msgstr ":"
+
+msgid "Font:"
+msgstr ":"
+
+msgid "Style:"
+msgstr ":"
+
+msgid "Size:"
+msgstr ":"
+
 msgid "E256: Hangul automata ERROR"
 msgstr "E256:   "
 
+msgid "E550: Missing colon"
+msgstr "E550:  "
+
+msgid "E551: Illegal component"
+msgstr "E551:  "
+
+msgid "E552: digit expected"
+msgstr "E552:   "
+
+#, c-format
+msgid "Page %d"
+msgstr " %d"
+
+msgid "No text to be printed"
+msgstr " "
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr " . %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr "  %d  %d"
+
+#, c-format
+msgid "Printed: %s"
+msgstr ": %s"
+
+msgid "Printing aborted"
+msgstr " "
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455:     PostScript"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624:    \"%s\""
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457:     PostScript \"%s\""
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618:  \"%s\"     PostScript"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619:  \"%s\"      PostScript"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621:   \"%s\"  "
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673:      ."
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset       ."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675:        ."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324:    PostScript"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456:    \"%s\""
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456:   PostScript \"prolog.ps\"  "
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456:   PostScript \"cidfont.ps\"  "
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456:   PostScript \"%s.ps\"  "
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620:      \"%s\""
+
+msgid "Sending to printer..."
+msgstr "  ..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365:      PostScript"
+
+msgid "Print job sent."
+msgstr "   ."
+
 msgid "Add a new database"
 msgstr "   "
 
@@ -1902,10 +2448,10 @@
 
 #, c-format
 msgid "E563: stat(%s) error: %d"
-msgstr "E563:  stat(%s): %d"
+msgstr "E563:  stat(%s): %d"
 
 msgid "E563: stat error"
-msgstr "E563:  stat"
+msgstr "E563:  stat"
 
 #, c-format
 msgid "E564: %s is not a directory or a valid cscope database"
@@ -1917,10 +2463,10 @@
 
 #, c-format
 msgid "E262: error reading cscope connection %ld"
-msgstr "E262:      cscope %ld"
+msgstr "E262:      cscope %ld"
 
 msgid "E561: unknown cscope search type"
-msgstr "E561:    cscope"
+msgstr "E561:    cscope"
 
 msgid "E566: Could not create cscope pipes"
 msgstr "E566:     cscope"
@@ -1931,49 +2477,67 @@
 msgid "cs_create_connection exec failed"
 msgstr "   cs_create_connection"
 
-msgid "E623: Could not spawn cscope process"
-msgstr "E623:     cscope"
-
 msgid "cs_create_connection: fdopen for to_fp failed"
 msgstr "cs_create_connection:    fdopen  to_fp"
 
 msgid "cs_create_connection: fdopen for fr_fp failed"
 msgstr "cs_create_connection:    fdopen  fr_fp"
 
+msgid "E623: Could not spawn cscope process"
+msgstr "E623:     cscope"
+
 msgid "E567: no cscope connections"
-msgstr "E567:   cscope  "
+msgstr "E567:   cscope  "
 
 #, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259:      cscope %s  %s"
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469:   cscopequickfix %c  %c"
 
 #, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469:   cscopequickfix %c  %c"
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259:      cscope %s  %s"
 
 msgid "cscope commands:\n"
-msgstr " cscope:\n"
+msgstr " cscope:\n"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (: %s)"
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c:     \n"
+"       d:     \n"
+"       e:    egrep\n"
+"       f:   \n"
+"       g:   \n"
+"       i:    (#include)  \n"
+"       s:   C-\n"
+"       t:    \n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625:     cscope: %s"
+msgstr "E625:     cscope: %s"
 
 msgid "E626: cannot get cscope database information"
-msgstr "E626:     cscope  "
+msgstr "E626:     cscope  "
 
 msgid "E568: duplicate cscope database not added"
-msgstr "E568:    cscope  "
-
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569:       cscope"
+msgstr "E568:    cscope  "
 
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261:   cscope %s  "
+msgstr "E261:   cscope %s  "
 
 #, c-format
 msgid "cscope connection %s closed"
@@ -1981,7 +2545,7 @@
 
 #. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570:    cs_manage_matches"
+msgstr "E570:    cs_manage_matches"
 
 #, c-format
 msgid "Cscope tag: %s"
@@ -2010,122 +2574,158 @@
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid                               \n"
 
+msgid "Lua library cannot be loaded."
+msgstr " Lua    ."
+
+msgid "cannot save undo information"
+msgstr "     "
+
 msgid ""
-"E263: Sorry, this command is disabled, the Python library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E263:      ,     "
-"Python"
+"E815:      ,     "
+"MzScheme"
 
-msgid "E659: Cannot invoke Python recursively"
-msgstr "E659:     Python"
+msgid "invalid expression"
+msgstr " "
 
-msgid "can't delete OutputObject attributes"
-msgstr "   OutputObject"
+msgid "expressions disabled at compile time"
+msgstr "   "
 
-msgid "softspace must be an integer"
-msgstr " softspace    "
+msgid "hidden option"
+msgstr " "
 
-msgid "invalid attribute"
-msgstr " "
+msgid "unknown option"
+msgstr " "
 
-msgid "writelines() requires list of strings"
-msgstr "writelines()    "
+msgid "window index is out of range"
+msgstr "    "
 
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python:    I/O"
+msgid "couldn't open buffer"
+msgstr "  "
 
-msgid "invalid expression"
-msgstr " "
+msgid "cannot delete line"
+msgstr "  "
 
-msgid "expressions disabled at compile time"
-msgstr "   "
+msgid "cannot replace line"
+msgstr "  "
 
-msgid "attempt to refer to deleted buffer"
-msgstr "    "
+msgid "cannot insert line"
+msgstr "  "
 
-msgid "line number out of range"
-msgstr "  "
+msgid "string cannot contain newlines"
+msgstr "      "
 
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<  ()  %8lX>"
+msgid "error converting Scheme values to Vim"
+msgstr "   Scheme  Vim"
 
-msgid "invalid mark name"
-msgstr "  "
+msgid "Vim error: ~a"
+msgstr " Vim: ~a"
 
-msgid "no such buffer"
-msgstr "  "
+msgid "Vim error"
+msgstr " Vim"
 
-msgid "attempt to refer to deleted window"
-msgstr "    "
+msgid "buffer is invalid"
+msgstr " "
 
-msgid "readonly attribute"
-msgstr "    "
+msgid "window is invalid"
+msgstr " "
 
-msgid "cursor position outside buffer"
-msgstr "    "
+msgid "linenr out of range"
+msgstr "    "
 
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<  ()  %.8lX>"
+msgid "not allowed in the Vim sandbox"
+msgstr "    Vim"
 
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<  ()  %.8lX>"
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836:  Vim    :python   :py3"
 
-#, c-format
-msgid "<window %d>"
-msgstr "< %d>"
+msgid "only string keys are allowed"
+msgstr "   "
 
-msgid "no such window"
-msgstr "  "
+msgid ""
+"E263: Sorry, this command is disabled, the Python library could not be "
+"loaded."
+msgstr ""
+"E263:      ,     "
+"Python"
 
-msgid "cannot save undo information"
-msgstr "     "
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659:     Python"
 
-msgid "cannot delete line"
-msgstr "  "
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval     Python"
 
-msgid "cannot replace line"
-msgstr "  "
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr ""
+"E859:      Python   VIM"
 
-msgid "cannot insert line"
-msgstr "  "
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<  ()  %p>"
 
-msgid "string cannot contain newlines"
-msgstr "      "
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837:  Vim    :py3   :python"
+
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: Eval     Python 3"
+
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr ""
+"E861:      Python 3   VIM"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_     "
 
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
 "E266:      ,     "
-"Ruby."
+"Ruby"
+
+msgid "E267: unexpected return"
+msgstr "E267:  return"
+
+msgid "E268: unexpected next"
+msgstr "E268:  next"
+
+msgid "E269: unexpected break"
+msgstr "E269:  break"
+
+msgid "E270: unexpected redo"
+msgstr "E270:  redo"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: retry   rescue"
+
+msgid "E272: unhandled exception"
+msgstr "E272:  "
 
 #, c-format
 msgid "E273: unknown longjmp status %d"
-msgstr "E273:   longjmp %d"
+msgstr "E273:   longjmp %d"
 
 msgid "Toggle implementation/definition"
 msgstr "  /"
 
 msgid "Show base class of"
-msgstr "   "
+msgstr "  "
 
 msgid "Show overridden member function"
 msgstr "  "
 
 msgid "Retrieve from file"
-msgstr "  "
+msgstr "  "
 
 msgid "Retrieve from project"
-msgstr "  "
+msgstr "  "
 
 msgid "Retrieve from all projects"
-msgstr "   "
+msgstr "   "
 
 msgid "Retrieve"
-msgstr ""
+msgstr ""
 
 msgid "Show source of"
 msgstr "  "
@@ -2201,13 +2801,13 @@
 msgid "not implemented yet"
 msgstr "  "
 
-msgid "unknown option"
-msgstr " "
-
 #. ???
 msgid "cannot set line(s)"
 msgstr "    "
 
+msgid "invalid mark name"
+msgstr "  "
+
 msgid "mark not set"
 msgstr "  "
 
@@ -2218,6 +2818,9 @@
 msgid "cannot insert/append line"
 msgstr "    "
 
+msgid "line number out of range"
+msgstr "    "
+
 msgid "unknown flag: "
 msgstr " : "
 
@@ -2228,7 +2831,7 @@
 msgstr " "
 
 msgid "vim error"
-msgstr " vim"
+msgstr " VIM"
 
 msgid "cannot create buffer/window command: object is being deleted"
 msgstr "     :    "
@@ -2258,11 +2861,9 @@
 "E571:      ,     "
 "Tcl"
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281:  TCL:      ?!     "
-"vim-dev@vim.org"
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572:   %d"
 
 msgid "cannot get line"
 msgstr "  "
@@ -2271,7 +2872,7 @@
 msgstr "    "
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248:       "
+msgstr "E248:       "
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2282,29 +2883,39 @@
 "E251:      VIM  . "
 "!"
 
-msgid "Unknown option"
-msgstr " "
+msgid "Unknown option argument"
+msgstr "  "
 
 msgid "Too many edit arguments"
-msgstr "   "
+msgstr "   "
 
 msgid "Argument missing after"
-msgstr "  "
+msgstr "  "
 
-msgid "Garbage after option"
-msgstr "  "
+msgid "Garbage after option argument"
+msgstr "   "
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"   \"+\", \"-c \"  \"--cmd \""
+"   \"+\", \"-c \"  \"--cmd \""
 
 msgid "Invalid argument for"
-msgstr "  "
+msgstr "  "
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "  : %d\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "NetBeans      \n"
 
 msgid "This Vim was not compiled with the diff feature."
 msgstr ""
 " Vim       "
 
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "  '-nb':    \n"
+
 msgid "Attempt to open script file again: \""
 msgstr "    : \""
 
@@ -2314,9 +2925,8 @@
 msgid "Cannot open for script output: \""
 msgstr "    : \""
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "  : %d\n"
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: :    gvim  NetBeans\n"
 
 msgid "Vim: Warning: Output is not to a terminal\n"
 msgstr "Vim: :     \n"
@@ -2343,13 +2953,16 @@
 msgstr "[ ..]   "
 
 msgid "-               read text from stdin"
-msgstr "-                     stdin"
+msgstr "-                stdin"
 
 msgid "-t tag          edit file where tag is defined"
-msgstr "-t              "
+msgstr "-t         "
 
+# \n\t\t..    80 
 msgid "-q [errorfile]  edit file with first error"
-msgstr "-q [ ]     "
+msgstr ""
+"-q [-]\n"
+"\t\t\t\t        "
 
 msgid ""
 "\n"
@@ -2361,7 +2974,7 @@
 ":"
 
 msgid " vim [arguments] "
-msgstr " vim [] "
+msgstr " vim [] "
 
 msgid ""
 "\n"
@@ -2372,12 +2985,19 @@
 
 msgid ""
 "\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"  ,    /   "
+
+msgid ""
+"\n"
 "\n"
 "Arguments:\n"
 msgstr ""
 "\n"
 "\n"
-":\n"
+":\n"
 
 msgid "--\t\t\tOnly file names after this"
 msgstr "--\t\t\t    "
@@ -2403,6 +3023,9 @@
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\t Ex ( \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\t  Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\t ()  (  \"ex\")"
 
@@ -2425,7 +3048,7 @@
 msgstr "-M\t\t\t     "
 
 msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\t "
+msgstr "-b\t\t\t "
 
 msgid "-l\t\t\tLisp mode"
 msgstr "-l\t\t\t Lisp"
@@ -2436,8 +3059,11 @@
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
 msgstr "-N\t\t\t    Vi: 'nocompatible'"
 
-msgid "-V[N]\t\tVerbose level"
-msgstr "-V[N]\t\t  "
+# \n\t\t..    80 
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr ""
+"-V[N][]\t\t  \n"
+"\t\t\t\t[ N] [  ]"
 
 msgid "-D\t\t\tDebugging mode"
 msgstr "-D\t\t\t "
@@ -2481,8 +3107,17 @@
 msgid "--noplugin\t\tDon't load plugin scripts"
 msgstr "--noplugin\t\t   "
 
+# \n\t\t..    80 
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr ""
+"-p[N]\t\t N  ( :  \n"
+"\t\t\t\t  )"
+
+# \n\t\t..    80 
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\t N  ( :     )"
+msgstr ""
+"-o[N]\t\t N  ( :  \n"
+"\t\t\t\t  )"
 
 msgid "-O[N]\t\tLike -o but split vertically"
 msgstr "-O[N]\t\t ,   -o,     "
@@ -2499,11 +3134,17 @@
 msgid "-c <command>\t\tExecute <command> after loading the first file"
 msgstr "-c <>\t\t <>    "
 
+# \n\t\t..    80 
 msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <>\t\t  <>    "
+msgstr ""
+"-S <>\t\t  <>  \n"
+"\t\t\t\t "
 
+# \n\t\t..    80 
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <>\t      <>"
+msgstr ""
+"-s <>\t    \n"
+"\t\t\t\t <>"
 
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
 msgstr "-w <>\t      <>"
@@ -2515,7 +3156,7 @@
 msgstr "-x\t\t\t  "
 
 msgid "-display <display>\tConnect vim to this particular X-server"
-msgstr "-display <>\t vim    X"
+msgstr "-display <>\t VIM   X-"
 
 msgid "-X\t\t\tDo not connect to X server"
 msgstr "-X\t\t\t     X"
@@ -2536,6 +3177,11 @@
 msgstr ""
 "--remote-wait-silent <>   ,      "
 
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--remote-tab[-wait][-silent] <>   ,   --remote,   "
+
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <>\t <>   Vim  "
 
@@ -2549,6 +3195,9 @@
 msgstr ""
 "--servername <>\t /  Vim   <>"
 
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <>\t      <>"
+
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\t  .viminfo  <viminfo>"
 
@@ -2563,33 +3212,27 @@
 "Arguments recognised by gvim (Motif version):\n"
 msgstr ""
 "\n"
-"  gvim ( Motif):\n"
+"  gvim ( Motif):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
 msgstr ""
 "\n"
-"  gvim ( neXtaw):\n"
+"  gvim ( neXtaw):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
-"  gvim ( Athena):\n"
+"  gvim ( Athena):\n"
 
 msgid "-display <display>\tRun vim on <display>"
-msgstr "-display <>\t vim   <>"
+msgstr "-display <>\t VIM   <>"
 
 msgid "-iconic\t\tStart vim iconified"
-msgstr "-iconic\t\t vim   "
-
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <>\t\t ,    vim  <>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  ( )\n"
+msgstr "-iconic\t\t VIM   "
 
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr ""
@@ -2633,27 +3276,14 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"  gvim ( RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <>\t    "
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <>\t    "
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
-"  gvim ( GTK+):\n"
+"  gvim ( GTK+):\n"
 
 msgid "-display <display>\tRun vim on <display> (also: --display)"
 msgstr ""
-"-display <>\t vim   <> (: --display)"
+"-display <>\t VIM   <> (: --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
 msgstr ""
@@ -2662,9 +3292,15 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\t Vim    GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\t Window ID  gvim    "
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P < >\t Vim   "
 
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\t Vim    win32"
+
 msgid "No display"
 msgstr " "
 
@@ -2717,7 +3353,6 @@
 "\n"
 ".     "
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -2726,7 +3361,6 @@
 "#  :\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -2734,7 +3368,6 @@
 "\n"
 "#   (  ):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -2763,24 +3396,14 @@
 ""
 
 msgid "E288: input method doesn't support any style"
-msgstr "E288:     "
+msgstr "E288:     "
 
 msgid "E289: input method doesn't support my preedit type"
 msgstr ""
-"E289:        "
-
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290:  \" \"    "
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr ""
-"E291: GTK+   ,  1.2.3.    ."
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292:     "
+"E289:        "
 
 msgid "E293: block was not locked"
-msgstr "E293:   "
+msgstr "E293:   "
 
 msgid "E294: Seek error in swap file read"
 msgstr "E294:     -"
@@ -2807,6 +3430,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298:     2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843:     -"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ,  -!!!"
@@ -2819,8 +3445,8 @@
 msgstr ""
 "E303:    -  \"%s\",  "
 
-msgid "E304: ml_timestamp: Didn't get block 0??"
-msgstr "E304: ml_timestamp:    0??"
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr "E304: ml_upd_block0():    0??"
 
 #, c-format
 msgid "E305: No swap file found for %s"
@@ -2868,6 +3494,14 @@
 "   ."
 
 #, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr "E833: %s ,    Vim   "
+
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr "   (    ).\n"
+
+#, c-format
 msgid "Using swap file \"%s\""
 msgstr " - \"%s\""
 
@@ -2879,6 +3513,40 @@
 msgstr "E308: :     "
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "- : \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"      ,     ,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"     ."
+
+#      ,  
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"        ,  "
+
+#      ,  
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"Enter         -"
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309:    1  %s"
 
@@ -2886,7 +3554,7 @@
 msgstr "???  "
 
 msgid "???LINE COUNT WRONG"
-msgstr "???   "
+msgstr "???  ר "
 
 msgid "???EMPTY BLOCK"
 msgstr "??? "
@@ -2896,7 +3564,7 @@
 
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310:   1 ID (%s    .swp?)"
+msgstr "E310:   1 ID (%s    .swp?)"
 
 msgid "???BLOCK MISSING"
 msgstr "??? "
@@ -2920,7 +3588,7 @@
 " ???"
 
 msgid "See \":help E312\" for more information."
-msgstr ".     (\":help E312\")"
+msgstr ". \":help E312\"   ."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr " . ,    ."
@@ -2932,15 +3600,23 @@
 "\n"
 "(          \n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "    diff).\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "    diff)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr " .     ."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"   .swp.\n"
 "\n"
+",      .swp.\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "    -   .\n"
 
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
@@ -3054,7 +3730,7 @@
 msgstr "E316: ml_get:    %ld"
 
 msgid "E317: pointer block id wrong 3"
-msgstr "E317:     3"
+msgstr "E317:     3"
 
 msgid "stack_idx should be 0"
 msgstr " stack_idx    0"
@@ -3063,7 +3739,7 @@
 msgstr "E318:    ?"
 
 msgid "E317: pointer block id wrong 4"
-msgstr "E317:     4"
+msgstr "E317:     4"
 
 msgid "deleted block 1?"
 msgstr "  1?"
@@ -3073,24 +3749,28 @@
 msgstr "E320:  %ld  "
 
 msgid "E317: pointer block id wrong"
-msgstr "E317:    "
+msgstr "E317:    "
 
 msgid "pe_line_count is zero"
 msgstr " pe_line_count  "
 
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
-msgstr "E322:     : %ld"
+msgstr "E322:     : %ld"
 
 #, c-format
 msgid "E323: line count wrong in block %ld"
-msgstr "E323:       %ld"
+msgstr "E323:       %ld"
 
 msgid "Stack size increases"
 msgstr "  "
 
 msgid "E317: pointer block id wrong 2"
-msgstr "E317:     2"
+msgstr "E317:     2"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773:     \"%s\""
 
 msgid "E325: ATTENTION"
 msgstr "E325: "
@@ -3102,8 +3782,9 @@
 "\n"
 " -   \""
 
+#   ,      .
 msgid "While opening file \""
-msgstr "  : \""
+msgstr "  : \""
 
 msgid "      NEWER than swap file!\n"
 msgstr "                     ,  -!\n"
@@ -3112,24 +3793,23 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) ,      .\n"
-"      ,      ,\n"
-"                .\n"
+"(1) ,        .\n"
+"      ,      , \n"
+"               ."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "         .\n"
-
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
+#  , " \n"  ..   .
+msgid "  Quit, or continue with caution.\n"
 msgstr ""
-"\n"
-"(2)       .\n"
+" \n"
+"         .\n"
+
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2)      .\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "      ,   \":recover\"  \"vim -r "
@@ -3139,7 +3819,7 @@
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"       (. \":help \").\n"
+"       (. \":help recovery\").\n"
 
 msgid "    If you did this already, delete the swap file \""
 msgstr "         ,  - \""
@@ -3158,7 +3838,7 @@
 msgstr "\"  !"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM - "
+msgstr "VIM  "
 
 msgid "Swap file already exists!"
 msgstr "-  !"
@@ -3180,16 +3860,16 @@
 "&Open Read-Only\n"
 "&Edit anyway\n"
 "&Recover\n"
+"&Delete it\n"
 "&Quit\n"
-"&Abort\n"
-"&Delete it"
+"&Abort"
 msgstr ""
 "&O   \n"
 "&E \n"
 "&R \n"
+"&D \n"
 "&Q \n"
-"&A \n"
-"&D "
+"&A "
 
 msgid "E326: Too many swap files found"
 msgstr "E326:    -"
@@ -3200,8 +3880,13 @@
 msgid "E328: Menu only exists in another mode"
 msgstr "E328:      "
 
-msgid "E329: No menu of that name"
-msgstr "E329:     "
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329:   %s"
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792:   "
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330:        "
@@ -3239,7 +3924,7 @@
 msgstr "E336:       "
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337:    --   "
+msgstr "E337:       "
 
 #, c-format
 msgid "Error detected while processing %s:"
@@ -3249,31 +3934,30 @@
 msgid "line %4ld:"
 msgstr " %4ld:"
 
-msgid "[string too long]"
-msgstr "[  ]"
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr "E354:   : '%s'"
 
 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
 msgstr ""
 "    :   <vrr@users.sourceforge."
-"net>"
+"net>,   <alyoshin.s@gmail.com>"
 
 msgid "Interrupt: "
 msgstr ": "
 
-msgid "Hit ENTER to continue"
-msgstr "   ENTER"
+msgid "Press ENTER or type command to continue"
+msgstr " ENTER     "
 
-msgid "Hit ENTER or type command to continue"
-msgstr "   ENTER   "
+#, c-format
+msgid "%s line %ld"
+msgstr "%s  %ld"
 
 msgid "-- More --"
 msgstr "--   --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: , SPACE/b: , d/u: , q: )"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: , SPACE: , d: , q: )"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: // , b/u/k: , q:  "
 
 msgid "Question"
 msgstr ""
@@ -3282,8 +3966,8 @@
 "&Yes\n"
 "&No"
 msgstr ""
-"&\n"
-"&"
+"&Y \n"
+"&N "
 
 msgid ""
 "&Yes\n"
@@ -3292,11 +3976,14 @@
 "&Discard All\n"
 "&Cancel"
 msgstr ""
-"&\n"
-"&\n"
-" &\n"
-"& \n"
-"&"
+"&Y \n"
+"&N \n"
+"&A  \n"
+"&D  \n"
+"&C "
+
+msgid "Select Directory dialog"
+msgstr " "
 
 msgid "Save File dialog"
 msgstr " "
@@ -3309,14 +3996,29 @@
 msgstr ""
 "E338: ,         "
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766:    printf()"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807:        printf()"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767:     printf()"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: :       "
 
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr "   <Enter>    (  ): "
+
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "   <Enter> (  ): "
+
 msgid "1 more line"
 msgstr "  "
 
 msgid "1 line less"
-msgstr "  "
+msgstr "  "
 
 #, c-format
 msgid "%ld more lines"
@@ -3324,19 +4026,21 @@
 
 #, c-format
 msgid "%ld fewer lines"
-msgstr " : %ld"
+msgstr " : %ld"
 
 msgid " (Interrupted)"
 msgstr " ()"
 
+msgid "Beep!"
+msgstr "-!"
+
 msgid "Vim: preserving files...\n"
-msgstr "Vim:  ...\n"
+msgstr "Vim:  ...\n"
 
 #. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
 msgstr "Vim: .\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr ": "
 
@@ -3381,7 +4085,7 @@
 msgstr "E547:   "
 
 msgid "E548: digit expected"
-msgstr "E548:   "
+msgstr "E548:   "
 
 msgid "E549: Illegal percentage"
 msgstr "E549:   "
@@ -3390,11 +4094,14 @@
 msgstr "   : "
 
 msgid "Enter same key again: "
-msgstr "          :"
+msgstr "  : "
 
 msgid "Keys don't match!"
 msgstr "   !"
 
+msgid "E854: path too long for completion"
+msgstr "E854:     "
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -3419,18 +4126,8 @@
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347:       \"%s\""
 
-msgid "E550: Missing colon"
-msgstr "E550:  "
-
-msgid "E551: Illegal component"
-msgstr "E551:  "
-
-msgid "E552: digit expected"
-msgstr "E552:   "
-
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
-msgstr "   Netbeans #2"
+msgstr "   NetBeans #2"
 
 msgid "Cannot connect to Netbeans"
 msgstr "   NetBeans"
@@ -3447,21 +4144,37 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658:    NetBeans   %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans      "
+
+msgid "E511: netbeans already connected"
+msgstr "E511:    NetBeans"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s     ( !,   )"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349:     "
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774:   'operatorfunc'   "
+
+msgid "E775: Eval feature not available"
+msgstr "E775: eval  "
+
 msgid "Warning: terminal cannot highlight"
 msgstr ":     "
 
 msgid "E348: No string under cursor"
 msgstr "E348:     "
 
-msgid "E349: No identifier under cursor"
-msgstr "E349:     "
-
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr ""
 "E352:        'foldmethod'"
 
 msgid "E664: changelist is empty"
-msgstr "E664:   "
+msgstr "E664:   "
 
 msgid "E662: At start of changelist"
 msgstr "E662:    "
@@ -3499,6 +4212,9 @@
 msgid "%ld lines indented "
 msgstr "    (%ld) "
 
+msgid "E748: No previously used register"
+msgstr "E748:    "
+
 #. must display the prompt
 msgid "cannot yank; delete anyway"
 msgstr "  ,  "
@@ -3514,10 +4230,17 @@
 msgid "freeing %ld lines"
 msgstr " : %ld"
 
+msgid "block of 1 line yanked"
+msgstr "    "
+
 msgid "1 line yanked"
 msgstr "  "
 
 #, c-format
+msgid "block of %ld lines yanked"
+msgstr "   : %ld"
+
+#, c-format
 msgid "%ld lines yanked"
 msgstr " : %ld"
 
@@ -3536,7 +4259,6 @@
 msgid "Illegal register name"
 msgstr "  "
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -3549,10 +4271,6 @@
 msgstr "E574:    %d"
 
 #, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354:   : '%s'"
-
-#, c-format
 msgid "%ld Cols; "
 msgstr ": %ld; "
 
@@ -3561,8 +4279,24 @@
 msgstr " %s%ld  %ld ; %ld  %ld ; %ld  %ld "
 
 #, c-format
+msgid ""
+"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+"Bytes"
+msgstr ""
+" %s%ld  %ld .; %ld  %ld ; %ld  %ld .; %ld  %ld "
+""
+
+#, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr ". %s  %s;  . %ld  %ld;  %ld  %ld;  %ld  %ld"
+msgstr ". %s  %s; . %ld  %ld; . %ld  %ld;  %ld  %ld"
+
+#, c-format
+msgid ""
+"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+"%ld"
+msgstr ""
+". %s  %s; . %ld  %ld; . %ld  %ld; . %ld  %ld;  %ld "
+" %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -3583,12 +4317,8 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520:     "
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\t      "
+msgid "E846: Key code not set"
+msgstr "E846:    "
 
 msgid "E521: Number required after ="
 msgstr "E521:  =   "
@@ -3610,7 +4340,13 @@
 msgstr "E531:      \":gui\""
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589:   'backupext'  'patchmode' "
+msgstr "E589:   'backupext'  'patchmode' "
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834:    'listchars'"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835:    'fillchars'"
 
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617:        GTK+ 2"
@@ -3632,19 +4368,19 @@
 msgstr "E528:     '"
 
 msgid "E595: contains unprintable or wide character"
-msgstr "E595:       "
+msgstr "E595:       "
 
 msgid "E596: Invalid font(s)"
 msgstr "E596:  "
 
 msgid "E597: can't select fontset"
-msgstr "E597:    "
+msgstr "E597:    "
 
 msgid "E598: Invalid fontset"
 msgstr "E598:   "
 
 msgid "E533: can't select wide font"
-msgstr "E533:       "
+msgstr "E533:       "
 
 msgid "E534: Invalid wide font"
 msgstr "E534:      "
@@ -3654,7 +4390,7 @@
 msgstr "E535:    <%c>"
 
 msgid "E536: comma required"
-msgstr "E536:  "
+msgstr "E536:  "
 
 #, c-format
 msgid "E537: 'commentstring' must be empty or contain %s"
@@ -3669,10 +4405,10 @@
 msgstr "E540:   "
 
 msgid "E541: too many items"
-msgstr "E541:   "
+msgstr "E541:   "
 
 msgid "E542: unbalanced groups"
-msgstr "E542:  "
+msgstr "E542:  "
 
 msgid "E590: A preview window already exists"
 msgstr "E590:    "
@@ -3693,6 +4429,13 @@
 msgid "E355: Unknown option: %s"
 msgstr "E355:  : %s"
 
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521:   : &%s = '%s'"
+
 msgid ""
 "\n"
 "--- Terminal codes ---"
@@ -3763,7 +4506,7 @@
 
 #. if Vim opened a window: Executing a shell may cause crashes
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360:      -f"
+msgstr "E360:      -f"
 
 msgid "Cannot execute "
 msgstr "  "
@@ -3780,8 +4523,8 @@
 msgid "I/O ERROR"
 msgstr " /"
 
-msgid "...(truncated)"
-msgstr "...()"
+msgid "Message"
+msgstr ""
 
 msgid "'columns' is not 80, cannot execute external commands"
 msgstr "  'columns'   80,    "
@@ -3801,9 +4544,6 @@
 msgid "E238: Print error: %s"
 msgstr "E238:  : %s"
 
-msgid "Unknown"
-msgstr ""
-
 #, c-format
 msgid "Printing '%s'"
 msgstr " '%s'"
@@ -3816,9 +4556,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245:   '%c'    \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366:    'osfiletype' --  Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim:  ,  \n"
 
@@ -3849,6 +4586,20 @@
 
 msgid ""
 "\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"     "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"     "
+
+msgid ""
+"\n"
 "Cannot execute shell "
 msgstr ""
 "\n"
@@ -3892,6 +4643,10 @@
 msgid "XSMP lost ICE connection"
 msgstr "XSMP   ICE"
 
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = \"%s\""
+
 msgid "Opening the X display failed"
 msgstr "   X"
 
@@ -3911,15 +4666,12 @@
 msgid "At line"
 msgstr " "
 
-msgid "Could not allocate memory for command line."
-msgstr "     ."
+msgid "Could not load vim32.dll!"
+msgstr "  vim32.dll!"
 
 msgid "VIM Error"
 msgstr " VIM"
 
-msgid "Could not load vim32.dll!"
-msgstr "  vim32.dll!"
-
 msgid "Could not fix up function pointers to the DLL!"
 msgstr "     DLL!"
 
@@ -3982,7 +4734,7 @@
 msgstr "E378:    'errorformat'  "
 
 msgid "E379: Missing or empty directory name"
-msgstr "E379:        "
+msgstr "E379:        "
 
 msgid "E553: No more items"
 msgstr "E553:   "
@@ -4008,9 +4760,25 @@
 msgstr ""
 "E382:  ,   'buftype'    "
 
+msgid "Error file"
+msgstr " "
+
+msgid "E683: File name missing or invalid pattern"
+msgstr "E683:      "
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "   \"%s\""
+
+msgid "E681: Buffer is not loaded"
+msgstr "E681:   "
+
+msgid "E777: String or List expected"
+msgstr "E777:    "
+
 #, c-format
 msgid "E369: invalid item in %s%%[]"
-msgstr "E369:    %s%%[]"
+msgstr "E369:    %s%%[]"
 
 msgid "E339: Pattern too long"
 msgstr "E339:   "
@@ -4038,20 +4806,8 @@
 msgstr "E55:    %s)"
 
 #, c-format
-msgid "E56: %s* operand could be empty"
-msgstr "E56:    %s*"
-
-#, c-format
-msgid "E57: %s+ operand could be empty"
-msgstr "E57:    %s+"
-
-#, c-format
 msgid "E59: invalid character after %s@"
-msgstr "E59:    %s@"
-
-#, c-format
-msgid "E58: %s{ operand could be empty"
-msgstr "E58:    %s{"
+msgstr "E59:    %s@"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
@@ -4066,7 +4822,7 @@
 msgstr "E62:  %s%c"
 
 msgid "E63: invalid use of \\_"
-msgstr "E63:   \\_"
+msgstr "E63:   \\_"
 
 #, c-format
 msgid "E64: %s%c follows nothing"
@@ -4093,28 +4849,24 @@
 msgstr "E70:  %s%%[]"
 
 #, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678:    %s%%[dxouU]"
+
+#, c-format
 msgid "E71: Invalid character after %s%%"
 msgstr "E71:    %s%%"
 
 #, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769:  ]  %s["
+
+#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554:    %s{...}"
 
-msgid "E361: Crash intercepted; regexp too complex?"
-msgstr ""
-"E361:   :    "
-"?"
-
-msgid "E363: pattern caused out-of-stack error"
-msgstr "E363:         "
-
 msgid "External submatches:\n"
 msgstr " :\n"
 
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld   "
-
 msgid " VREPLACE"
 msgstr "  "
 
@@ -4133,104 +4885,491 @@
 msgid " (replace)"
 msgstr " ()"
 
-msgid " (vreplace)"
-msgstr " ( )"
+msgid " (vreplace)"
+msgstr " ( )"
+
+msgid " Hebrew"
+msgstr " "
+
+msgid " Arabic"
+msgstr " "
+
+msgid " (lang)"
+msgstr " ()"
+
+msgid " (paste)"
+msgstr " ()"
+
+msgid " VISUAL"
+msgstr "  "
+
+msgid " VISUAL LINE"
+msgstr "  "
+
+msgid " VISUAL BLOCK"
+msgstr "  "
+
+msgid " SELECT"
+msgstr " "
+
+msgid " SELECT LINE"
+msgstr "  "
+
+msgid " SELECT BLOCK"
+msgstr "  "
+
+msgid "recording"
+msgstr ""
+
+#, c-format
+msgid "E383: Invalid search string: %s"
+msgstr "E383:   : %s"
+
+#, c-format
+msgid "E384: search hit TOP without match for: %s"
+msgstr "E384:     ; %s  "
+
+#, c-format
+msgid "E385: search hit BOTTOM without match for: %s"
+msgstr "E385:     ; %s  "
+
+msgid "E386: Expected '?' or '/'  after ';'"
+msgstr "E386:  ';'   '?'  '/'"
+
+msgid " (includes previously listed match)"
+msgstr " (   )"
+
+#. cursor at status line
+msgid "--- Included files "
+msgstr "---   "
+
+msgid "not found "
+msgstr "  "
+
+msgid "in path ---\n"
+msgstr "  ---\n"
+
+msgid "  (Already listed)"
+msgstr " ( )"
+
+msgid "  NOT FOUND"
+msgstr "  "
+
+#, c-format
+msgid "Scanning included file: %s"
+msgstr "  : %s"
+
+#, c-format
+msgid "Searching included file %s"
+msgstr "   %s"
+
+msgid "E387: Match is on current line"
+msgstr "E387:    "
+
+msgid "All included files were found"
+msgstr "   "
+
+msgid "No included files"
+msgstr "  "
+
+msgid "E388: Couldn't find definition"
+msgstr "E388:   "
+
+msgid "E389: Couldn't find pattern"
+msgstr "E389:   "
+
+msgid "Substitute "
+msgstr " "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"#  %s :\n"
+"~"
+
+msgid "E759: Format error in spell file"
+msgstr "E759:     "
+
+msgid "E758: Truncated spell file"
+msgstr "E758:   "
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "     %s . %d: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "     %s,  %d: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr "E761:      FOL, LOW  UPP"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762:   FOL, LOW  UPP   "
+
+msgid "Compressing word tree..."
+msgstr "  ..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756:   "
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+":     \"%s_%s.spl\"  \"%s_ascii.spl"
+"\""
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+":     \"%s.%s.spl\"  \"%s.ascii.spl"
+"\""
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "   \"%s\""
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757:      "
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771:   ,   "
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772:        Vim"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770:     "
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr ":  %s  "
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "   %s ..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "     %s,  %d: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "  %s  :  %s  %s"
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "  %s  "
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "  FLAG  %s,  %d: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "FLAG     %s,  %d: %s"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+" COMPOUNDFORBIDFLAG   PFX    "
+"  %s,  %d"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+" COMPOUNDPERMITFLAG   PFX    "
+"  %s,  %d"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "  COMPOUNDRULES  %s,  %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr "  COMPOUNDWORDMAX  %s,  %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "  COMPOUNDMIN  %s,  %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "  COMPOUNDSYLMAX  %s,  %d: %s"
+
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr "  CHECKCOMPOUNDPATTERN  %s,  %d: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"        %s,  %d: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "   %s,  %d: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"line %d: %s"
+msgstr ""
+"    BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
+"NOSUGGEST  %s,  %d: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr " Y  N  %s,  %d: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "   %s,  %d: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "  REP(SAL)  %s,  %d"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "  MAP  %s,  %d"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "   MAP  %s,  %d"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "     %s,  %d: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "  FOL/LOW/UPP  %s"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "COMPOUNDSYLMAX   SYLLABLE"
+
+msgid "Too many postponed prefixes"
+msgstr "   "
+
+msgid "Too many compound flags"
+msgstr "   "
+
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr "    /  "
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "  SOFO%s  %s"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "  SAL  SOFO  %s"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "     %s,  %d: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "   %s   %d: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "%s   ,    .aff"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "   %s ..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760:      %s"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr " %6d,  %6d  %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "   %s   %d: %s "
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "    %s   %d: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d    %s"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr " %d    ASCII   %s"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "   %s ..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "   /encoding=  %s,  %d: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "  /encoding=    %s,  %d: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "   /regions=  %s,  %d: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "    %s,  %d: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "/    %s,  %d: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "    %s,  %d: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "   %s,  %d: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr " %d    ASCII "
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845:   ,     "
 
-msgid " Hebrew"
-msgstr " "
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr " %d  %d ;  %d (%d%%)"
 
-msgid " Arabic"
-msgstr " "
+msgid "Reading back spell file..."
+msgstr "   ..."
 
-msgid " (lang)"
-msgstr " ()"
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "  ..."
 
-msgid " (paste)"
-msgstr " ()"
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "    : %ld"
 
-msgid " VISUAL"
-msgstr "  "
+#, c-format
+msgid "Total number of words: %d"
+msgstr "  : %d"
 
-msgid " VISUAL LINE"
-msgstr "  "
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "     %s"
 
-msgid " VISUAL BLOCK"
-msgstr "  "
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr "    : %d "
 
-msgid " SELECT"
-msgstr " "
+msgid "E751: Output file name must not have region name"
+msgstr "E751:        "
 
-msgid " SELECT LINE"
-msgstr "  "
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754:    8- "
 
-msgid " SELECT BLOCK"
-msgstr "  "
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755:    %s"
 
-msgid "recording"
-msgstr ""
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr ":     NOBREAK"
 
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "     "
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "   %s ..."
 
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "     "
+msgid "Done!"
+msgstr "!"
 
 #, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383:   : %s"
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile'   %ld "
 
 #, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384:     ; %s  "
+msgid "Word removed from %s"
+msgstr "   %s"
 
 #, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385:     ; %s  "
+msgid "Word added to %s"
+msgstr "   %s"
 
-msgid "E386: Expected '?' or '/'  after ';'"
-msgstr "E386:  ';'   '?'  '/'"
+msgid "E763: Word characters differ between spell files"
+msgstr "E763:      "
 
-msgid " (includes previously listed match)"
-msgstr " (   )"
+msgid "Sorry, no suggestions"
+msgstr ",  "
 
-#. cursor at status line
-msgid "--- Included files "
-msgstr "---   "
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr ",  %ld "
 
-msgid "not found "
-msgstr "  "
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr " \"%.*s\" :"
 
-msgid "in path ---\n"
-msgstr "  ---\n"
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
 
-msgid "  (Already listed)"
-msgstr " ( )"
+msgid "E752: No previous spell replacement"
+msgstr "E752:    "
 
-msgid "  NOT FOUND"
-msgstr "  "
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753:  : %s"
 
 #, c-format
-msgid "Scanning included file: %s"
-msgstr "  : %s"
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778:      .sug: %s"
 
-msgid "E387: Match is on current line"
-msgstr "E387:    "
+#, c-format
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779:   .sug,  : %s"
 
-msgid "All included files were found"
-msgstr "   "
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780:  .sug     Vim: %s"
 
-msgid "No included files"
-msgstr "  "
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781:  .sug    .spl: %s"
 
-msgid "E388: Couldn't find definition"
-msgstr "E388:   "
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782:     .sug: %s"
 
-msgid "E389: Couldn't find pattern"
-msgstr "E389:   "
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783:     MAP"
 
 #, c-format
 msgid "E390: Illegal argument: %s"
-msgstr "E390:  : %s"
+msgstr "E390:  : %s"
 
 #, c-format
 msgid "E391: No such syntax cluster: %s"
@@ -4288,29 +5427,39 @@
 msgid " line breaks"
 msgstr "  "
 
+msgid "E395: contains argument not accepted here"
+msgstr "E395:     contains"
+
+msgid "E844: invalid cchar value"
+msgstr "E844:   cchar"
+
 msgid "E393: group[t]here not accepted here"
-msgstr "E393:    group[t]here"
+msgstr "E393:    group[t]here"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
 msgstr "E394:    %s  "
 
-msgid "E395: contains argument not accepted here"
-msgstr "E395:     contains"
-
-msgid "E396: containedin argument not accepted here"
-msgstr "E396:     containedin"
-
 msgid "E397: Filename required"
 msgstr "E397:    "
 
+msgid "E847: Too many syntax includes"
+msgstr "E847:    "
+
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr "E789:  ']': %s"
+
 #, c-format
 msgid "E398: Missing '=': %s"
 msgstr "E398:  '=': %s"
 
 #, c-format
 msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399:   :   %s"
+msgstr "E399:   :   %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848:    "
 
 msgid "E400: No cluster specified"
 msgstr "E400:   "
@@ -4325,11 +5474,11 @@
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
 msgstr ""
-"E403:  :     "
+"E403:  :     "
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
-msgstr "E404:  : %s"
+msgstr "E404:  : %s"
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
@@ -4337,7 +5486,7 @@
 
 #, c-format
 msgid "E406: Empty argument: %s"
-msgstr "E406:  : %s"
+msgstr "E406:  : %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
@@ -4355,32 +5504,35 @@
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410:   :syntax: %s"
 
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr "E679:     syncolor.vim"
+
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411:    %s  "
+msgstr "E411:    %s  "
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412:   : \":highlight link %s\""
+msgstr "E412:   : \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413:   : \":highlight link %s\""
+msgstr "E413:   : \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414:     ,  "
+msgstr "E414:    ,  highlight link"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415:   : %s"
+msgstr "E415:   : %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416:   : %s"
+msgstr "E416:   : %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
-msgstr "E417:  : %s"
+msgstr "E417:  : %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
@@ -4398,11 +5550,11 @@
 
 #, c-format
 msgid "E422: terminal code too long: %s"
-msgstr "E422:    : %s"
+msgstr "E422:    : %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
-msgstr "E423:  : %s"
+msgstr "E423:  : %s"
 
 msgid "E424: Too many different highlighting attributes in use"
 msgstr "E424:       "
@@ -4410,16 +5562,17 @@
 msgid "E669: Unprintable character in group name"
 msgstr "E669:     "
 
-#. This is an error, but since there previously was no check only
-#. * give a warning.
 msgid "W18: Invalid character in group name"
 msgstr "W18:     "
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849:      "
+
 msgid "E555: at bottom of tag stack"
-msgstr "E555:   "
+msgstr "E555:   "
 
 msgid "E556: at top of tag stack"
-msgstr "E556:   "
+msgstr "E556:   "
 
 msgid "E425: Cannot go before first matching tag"
 msgstr "E425:        "
@@ -4434,13 +5587,6 @@
 msgid "file\n"
 msgstr "\n"
 
-#.
-#. * Ask to select a tag from the list.
-#. * When using ":silent" assume that <CR> was entered.
-#.
-msgid "Enter nr of choice (<CR> to abort): "
-msgstr "   (<CR>  ):"
-
 msgid "E427: There is only one matching tag"
 msgstr "E427:     "
 
@@ -4482,6 +5628,9 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430:     %s \n"
 
+msgid "Ignoring long line in tags file"
+msgstr "     tags"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431:      \"%s\""
@@ -4504,6 +5653,10 @@
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435:   ,  !"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "  : %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "'  .   :"
 
@@ -4524,7 +5677,7 @@
 msgstr "E436:  termcap   \"%s\""
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437:    \"cm\""
+msgstr "E437:    \"cm\""
 
 #. Highlight title
 msgid ""
@@ -4540,25 +5693,147 @@
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim:   , ...\n"
 
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "    CUT_BUFFER0"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834:    "
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr " ;  "
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828:      : %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825:    (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "     -   'undodir'"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "   ,  : %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "  ,    : %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "   ,  "
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "  : %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829:     : %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "   ,  : %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "  : %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822:      : %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823:    : %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832:       : %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826:     : %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827:   : %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824:   : %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "  ,    "
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "    %s"
+
+msgid "Already at oldest change"
+msgstr "    "
+
+msgid "Already at newest change"
+msgstr "    "
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830:     %ld"
+
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo:   "
 
-msgid "1 change"
-msgstr " "
+msgid "more line"
+msgstr ". "
+
+msgid "more lines"
+msgstr ". "
+
+msgid "line less"
+msgstr ". "
+
+msgid "fewer lines"
+msgstr ". "
+
+msgid "change"
+msgstr "."
+
+msgid "changes"
+msgstr "."
+
+#, c-format
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr ""
+
+msgid "after"
+msgstr ""
+
+msgid "Nothing to undo"
+msgstr " "
+
+#   :undolist
+msgid "number changes  when               saved"
+msgstr "   .                "
 
 #, c-format
-msgid "%ld changes"
-msgstr ": %ld"
+msgid "%ld seconds ago"
+msgstr "%ld  "
+
+msgid "E790: undojoin is not allowed after undo"
+msgstr "E790:      "
 
 msgid "E439: undo list corrupt"
 msgstr "E439:   "
 
 msgid "E440: undo line missing"
-msgstr "E440:   "
+msgstr "E440:   "
 
 #. Only MS VC 4.1 and earlier can do Win32s
 msgid ""
@@ -4570,19 +5845,33 @@
 
 msgid ""
 "\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"     MS-Windows 64 "
+
+msgid ""
+"\n"
 "MS-Windows 32-bit GUI version"
 msgstr ""
 "\n"
 "     MS-Windows 32 "
 
 msgid " in Win32s mode"
-msgstr "   Win32s"
+msgstr "   Win32"
 
 msgid " with OLE support"
 msgstr "   OLE"
 
 msgid ""
 "\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"   MS-Windows 64 "
+
+msgid ""
+"\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
@@ -4632,10 +5921,10 @@
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"  RISC OS"
+"  OpenVMS"
 
 msgid ""
 "\n"
@@ -4644,6 +5933,13 @@
 "\n"
 ": "
 
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+" : "
+
 msgid "Modified by "
 msgstr " ,  "
 
@@ -4698,15 +5994,9 @@
 msgid "with GTK2-GNOME GUI."
 msgstr "   GTK2-GNOME."
 
-msgid "with GTK-GNOME GUI."
-msgstr "   GTK-GNOME."
-
 msgid "with GTK2 GUI."
 msgstr "   GTK2."
 
-msgid "with GTK GUI."
-msgstr "   GTK."
-
 msgid "with X11-Motif GUI."
 msgstr "   X11-Motif."
 
@@ -4716,9 +6006,6 @@
 msgid "with X11-Athena GUI."
 msgstr "   X11-Athena."
 
-msgid "with BeOS GUI."
-msgstr "   BeOS."
-
 msgid "with Photon GUI."
 msgstr "   Photon."
 
@@ -4789,7 +6076,7 @@
 msgstr "   "
 
 msgid "VIM - Vi IMproved"
-msgstr "VIM ::: Vi IMproved ( Vi) :::  "
+msgstr "VIM  Vi IMproved ( Vi)"
 
 msgid "version "
 msgstr " "
@@ -4828,16 +6115,16 @@
 msgstr " ->                    "
 
 msgid "Running modeless, typed text is inserted"
-msgstr " ,   "
+msgstr " ,   "
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr " -> ->                      "
+msgstr " -> ->                      "
 
 msgid "                              for two modes      "
 msgstr "                                                  "
 
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr " -> ->  Vi                "
+msgstr " -> ->  Vi                "
 
 msgid "                              for Vim defaults   "
 msgstr "                                     Vim       "
@@ -4863,6 +6150,9 @@
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr " :help windows95<Enter>         "
 
+msgid "Already only one window"
+msgstr "    "
+
 msgid "E441: There is no preview window"
 msgstr "E441:   "
 
@@ -4875,8 +6165,11 @@
 msgid "E444: Cannot close last window"
 msgstr "E444:    "
 
-msgid "Already only one window"
-msgstr "    "
+msgid "E813: Cannot close autocmd window"
+msgstr "E813:    "
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814:   ,    "
 
 msgid "E445: Other window contains changes"
 msgstr "E445:      "
@@ -4906,15 +6199,15 @@
 msgid "Edit with single &Vim"
 msgstr "  & Vim"
 
-msgid "&Diff with Vim"
-msgstr "&   Vim"
+msgid "Diff with Vim"
+msgstr "   Vim"
 
 msgid "Edit with &Vim"
 msgstr "&   Vim"
 
 #. Now concatenate
-msgid "Edit with existing Vim - &"
-msgstr "   Vim - &"
+msgid "Edit with existing Vim - "
+msgstr "   Vim  "
 
 msgid "Edits the selected file(s) with Vim"
 msgstr "     Vim"
@@ -4961,11 +6254,17 @@
 msgid "E170: Missing :endwhile"
 msgstr "E170:   :endwhile"
 
+msgid "E170: Missing :endfor"
+msgstr "E170:   :endfor"
+
 msgid "E588: :endwhile without :while"
 msgstr "E588:  :endwhile    :while"
 
+msgid "E588: :endfor without :for"
+msgstr "E588: :endfor  :for"
+
 msgid "E13: File exists (add ! to override)"
-msgstr "E13:   (   !)"
+msgstr "E13:   ( !,  )"
 
 msgid "E472: Command failed"
 msgstr "E472:    "
@@ -4980,7 +6279,7 @@
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236:  \"%s\"    "
+msgstr "E236:  \"%s\"   "
 
 msgid "E473: Internal error"
 msgstr "E473:  "
@@ -4992,11 +6291,11 @@
 msgstr "E14:  "
 
 msgid "E474: Invalid argument"
-msgstr "E474:  "
+msgstr "E474:  "
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475:  : %s"
+msgstr "E475:  : %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
@@ -5012,9 +6311,6 @@
 msgid "E17: \"%s\" is a directory"
 msgstr "E17: \"%s\"  "
 
-msgid "E18: Unexpected characters before '='"
-msgstr "E18:  '='   "
-
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
 msgstr "E364:    \"%s()\"  "
@@ -5098,7 +6394,7 @@
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247:  \"%s\"  "
+msgstr "E247:  \"%s\"  "
 
 #, c-format
 msgid "E482: Can't create file %s"
@@ -5119,7 +6415,7 @@
 msgstr "E37:    ( !,   )"
 
 msgid "E38: Null argument"
-msgstr "E38:  "
+msgstr "E38:  "
 
 msgid "E39: Number expected"
 msgstr "E39:  "
@@ -5129,7 +6425,7 @@
 msgstr "E40:      %s"
 
 msgid "E233: cannot open display"
-msgstr "E233:   "
+msgstr "E233:   "
 
 msgid "E41: Out of memory!"
 msgstr "E41:   !"
@@ -5148,7 +6444,10 @@
 msgstr "E459:     "
 
 msgid "E42: No Errors"
-msgstr "E42:  "
+msgstr "E42:  "
+
+msgid "E776: No location list"
+msgstr "E776:   "
 
 msgid "E43: Damaged match string"
 msgstr "E43:   "
@@ -5157,12 +6456,15 @@
 msgstr "E44:     "
 
 msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr ""
-"E45:   'readonly' ( !,    )"
+msgstr "E45:   'readonly' ( !,   )"
+
+#, c-format
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46:       \"%s\""
 
 #, c-format
-msgid "E46: Cannot set read-only variable \"%s\""
-msgstr "E46:        \"%s\""
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794:     : \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47:     "
@@ -5235,3 +6537,146 @@
 msgid "E463: Region is guarded, cannot modify"
 msgstr "E463:    "
 
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans        "
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685:  : %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363:      'maxmempattern'"
+
+msgid "E749: empty buffer"
+msgstr "E749:  "
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682:     "
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139:     "
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764:  '%s'  "
+
+msgid "E850: Invalid register name"
+msgstr "E850:   "
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "     "
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "     "
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "    \"%s\""
+
+msgid "can't delete OutputObject attributes"
+msgstr "   OutputObject"
+
+msgid "softspace must be an integer"
+msgstr " softspace    "
+
+msgid "invalid attribute"
+msgstr " "
+
+msgid "writelines() requires list of strings"
+msgstr "writelines()    "
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python:    I/O"
+
+msgid "no such buffer"
+msgstr "  "
+
+msgid "empty keys are not allowed"
+msgstr "   "
+
+msgid "failed to add key to dictionary"
+msgstr "    "
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "   DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "   "
+
+msgid "Only boolean objects are allowed"
+msgstr "    "
+
+msgid "Cannot set this attribute"
+msgstr "   "
+
+msgid "no such key in dictionary"
+msgstr "    "
+
+msgid "dict is locked"
+msgstr " "
+
+msgid "internal error: failed to get vim list item"
+msgstr " :      VIM"
+
+msgid "list is locked"
+msgstr " "
+
+msgid "Failed to add item to list"
+msgstr "    "
+
+msgid "internal error: no vim list item"
+msgstr " :    VIM"
+
+msgid "can only assign lists to slice"
+msgstr "     "
+
+msgid "internal error: failed to add item to list"
+msgstr " :      "
+
+msgid "can only concatenate with lists"
+msgstr "   "
+
+msgid "Cannot modify fixed list"
+msgstr "   "
+
+msgid "'self' argument must be a dictionary"
+msgstr " 'self'   "
+
+msgid "failed to run function"
+msgstr "  "
+
+msgid "attempt to refer to deleted window"
+msgstr "    "
+
+msgid "readonly attribute"
+msgstr "    "
+
+msgid "cursor position outside buffer"
+msgstr "    "
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<  ()  %p>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<  ()  %p>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "< %d>"
+
+msgid "no such window"
+msgstr "  "
+
+msgid "attempt to refer to deleted buffer"
+msgstr "    "
+
+msgid "unable to convert to vim structure"
+msgstr "    VIM"
+
+msgid "NULL reference passed"
+msgstr "   NULL"
+
+msgid "internal error: invalid value type"
+msgstr " :   "
diff -Naur vim73.orig/src/po/ru.po vim73/src/po/ru.po
--- vim73.orig/src/po/ru.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/ru.po	2013-08-04 19:09:10.693943608 +0000
@@ -1,39 +1,60 @@
 # Russian translation for Vim
-# 
+#
 # Об условиях использования читайте в редакторе Vim ":help uganda"
-# О людях, делающих Vim читайте в редакторе ":help авторы"
 #
 # vassily "vr" ragosin <vrr@users.sourceforge.net>, 2004
-#
-# Original translations.
+# Sergey Alyoshin <alyoshin.s@gmail.com>, 2013
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Vim 6.3\n"
+"Project-Id-Version: vim_7.3_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2004-06-15 09:39+0400\n"
-"PO-Revision-Date: 2004-05-19 00:23+0400\n"
-"Last-Translator: vassily ragosin <vrr@users.sourceforge.net>\n"
-"Language-Team: vassily ragosin <vrr@users.sourceforge.net>\n"
+"POT-Creation-Date: 2013-06-01 13:52+0400\n"
+"PO-Revision-Date: 2013-06-01 14:16+0400\n"
+"Last-Translator: Sergey Alyoshin <alyoshin.s@gmail.com>\n"
+"Language-Team: \n"
+"Language: Russian\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "E831: bf_key_init() called with empty password"
+msgstr "E831: bf_key_init() вызван с пустым паролем"
+
+msgid "E820: sizeof(uint32_t) != 4"
+msgstr "E820: sizeof(uint32_t) != 4"
+
+msgid "E817: Blowfish big/little endian use wrong"
+msgstr ""
+"E817: Неправильное использование обратного/прямого порядка байт в Blowfish"
+
+msgid "E818: sha256 test failed"
+msgstr "E818: Не удалось выполнить тест sha256"
+
+msgid "E819: Blowfish test failed"
+msgstr "E819: Не удалось выполнить тест Blowfish"
+
+msgid "[Location List]"
+msgstr "[Список расположений]"
+
+msgid "[Quickfix List]"
+msgstr "[Список быстрых исправлений]"
+
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Автокоманды вызвали прекращение команды"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Невозможно выделить память даже для одного буфера, выход..."
 
 msgid "E83: Cannot allocate buffer, using other one..."
 msgstr "E83: Невозможно выделить память для буфера, используем другой буфер..."
 
-#, c-format
 msgid "E515: No buffers were unloaded"
 msgstr "E515: Ни один буфер не был выгружен из памяти"
 
-#, c-format
 msgid "E516: No buffers were deleted"
 msgstr "E516: Ни один буфер не был удалён"
 
-#, c-format
 msgid "E517: No buffers were wiped out"
 msgstr "E517: Ни один буфер не был очищен"
 
@@ -77,7 +98,8 @@
 
 #, c-format
 msgid "E89: No write since last change for buffer %ld (add ! to override)"
-msgstr "E89: Изменения в буфере %ld не сохранены (!, чтобы обойти проверку)"
+msgstr ""
+"E89: Изменения в буфере %ld не сохранены (добавьте !, чтобы обойти проверку)"
 
 msgid "E90: Cannot unload last buffer"
 msgstr "E90: Невозможно выгрузить из памяти последний буфер"
@@ -116,6 +138,9 @@
 msgid "[Read errors]"
 msgstr "[Ошибки чтения]"
 
+msgid "[RO]"
+msgstr "[ТЧ]"
+
 msgid "[readonly]"
 msgstr "[только для чтения]"
 
@@ -131,15 +156,15 @@
 msgid "line %ld of %ld --%d%%-- col "
 msgstr "стр. %ld из %ld --%d%%-- кол. "
 
-msgid "[No file]"
-msgstr "[Нет файла]"
+msgid "[No Name]"
+msgstr "[Нет имени]"
 
 #. must be a help buffer
 msgid "help"
 msgstr "справка"
 
-msgid "[help]"
-msgstr "[справка]"
+msgid "[Help]"
+msgstr "[Справка]"
 
 msgid "[Preview]"
 msgstr "[Предпросмотр]"
@@ -153,7 +178,6 @@
 msgid "Top"
 msgstr "Наверху"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -161,11 +185,8 @@
 "\n"
 "# Список буферов:\n"
 
-msgid "[Error List]"
-msgstr "[Список ошибок]"
-
-msgid "[No File]"
-msgstr "[Нет файла]"
+msgid "[Scratch]"
+msgstr "[Временный]"
 
 msgid ""
 "\n"
@@ -186,18 +207,27 @@
 msgid "E96: Can not diff more than %ld buffers"
 msgstr "E96: Следить за отличиями можно не более чем в %ld буферах"
 
+msgid "E810: Cannot read or write temp files"
+msgstr "E810: Невозможно прочитать или записать временные файлы"
+
 msgid "E97: Cannot create diffs"
 msgstr "E97: Невозможно создать файлы отличий"
 
 msgid "Patch file"
 msgstr "Файл-заплатка"
 
+msgid "E816: Cannot read patch output"
+msgstr "E816: Невозможно прочитать вывод patch"
+
 msgid "E98: Cannot read diff output"
-msgstr "E98: Невозможно прочитать вывод команды diff"
+msgstr "E98: Невозможно прочитать вывод diff"
 
 msgid "E99: Current buffer is not in diff mode"
 msgstr "E99: Активный буфер не находится в режиме отличий"
 
+msgid "E793: No other buffer in diff mode is modifiable"
+msgstr "E793: Больше нет изменяемых буферов в режиме отличий"
+
 msgid "E100: No other buffer in diff mode"
 msgstr "E100: Больше нет буферов в режиме отличий"
 
@@ -212,6 +242,9 @@
 msgid "E103: Buffer \"%s\" is not in diff mode"
 msgstr "E103: Буфер \"%s\" не находится в режиме отличий"
 
+msgid "E787: Buffer changed unexpectedly"
+msgstr "E787: Буфер неожиданно изменился"
+
 msgid "E104: Escape not allowed in digraph"
 msgstr "E104: Экранирующий символ Escape нельзя использовать в диграфе"
 
@@ -221,17 +254,15 @@
 msgid "E105: Using :loadkeymap not in a sourced file"
 msgstr "E105: Команда :loadkeymap применена вне файла сценария"
 
+msgid "E791: Empty keymap entry"
+msgstr "E791: пустая запись раскладки клавиатуры"
+
 msgid " Keyword completion (^N^P)"
 msgstr " Автодополнение ключевого слова (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^V^N^P)"
-msgstr " Автодополнение ^X (^E^Y^L^]^F^I^K^D^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr " Местное автодополнение ключевого слова (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+msgstr " Режим ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Автодополнение целой строки (^L^N^P)"
@@ -257,15 +288,33 @@
 msgid " Command-line completion (^V^N^P)"
 msgstr " Автодополнение командной строки (^V^N^P)"
 
+msgid " User defined completion (^U^N^P)"
+msgstr " Пользовательское автодополнение (^U^N^P)"
+
+msgid " Omni completion (^O^N^P)"
+msgstr " Omni-дополнение (^O^N^P)"
+
+msgid " Spelling suggestion (s^N^P)"
+msgstr " Предложение исправления правописания (s^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " Местное автодополнение ключевого слова (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr "Конец абзаца"
 
-msgid "'thesaurus' option is empty"
-msgstr "Не задано значение опции 'thesaurus'"
+msgid "E839: Completion function changed window"
+msgstr "E839: Функция автодополнения изменила окно"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Функция автодополнения удалила текст"
 
 msgid "'dictionary' option is empty"
 msgstr "Не задано значение опции 'dictionary'"
 
+msgid "'thesaurus' option is empty"
+msgstr "Не задано значение опции 'thesaurus'"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr "Просмотр словаря: %s"
@@ -280,7 +329,6 @@
 msgid "Scanning: %s"
 msgstr "Просмотр: %s"
 
-#, c-format
 msgid "Scanning tags."
 msgstr "Выполняется поиск среди меток."
 
@@ -311,11 +359,100 @@
 msgid "match %d"
 msgstr "соответствие %d"
 
-#. Skip further arguments but do continue to
-#. * search for a trailing command.
+msgid "E18: Unexpected characters in :let"
+msgstr "E18: Неожиданные символы в :let"
+
+#, c-format
+msgid "E684: list index out of range: %ld"
+msgstr "E684: Индекс списка за пределами диапазона: %ld"
+
+#, c-format
+msgid "E121: Undefined variable: %s"
+msgstr "E121: Неопределённая переменная: %s"
+
+msgid "E111: Missing ']'"
+msgstr "E111: Пропущена ']'"
+
+#, c-format
+msgid "E686: Argument of %s must be a List"
+msgstr "E686: Параметр %s должен быть списком"
+
+#, c-format
+msgid "E712: Argument of %s must be a List or Dictionary"
+msgstr "E712: Параметр %s должен быть списком или словарём"
+
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Невозможно использовать пустой ключ для словаря"
+
+msgid "E714: List required"
+msgstr "E714: Требуется список"
+
+msgid "E715: Dictionary required"
+msgstr "E715: Требуется словарь"
+
+#, c-format
+msgid "E118: Too many arguments for function: %s"
+msgstr "E118: Слишком много параметров для функции %s"
+
+#, c-format
+msgid "E716: Key not present in Dictionary: %s"
+msgstr "E716: Нет ключа в словаре: %s"
+
+#, c-format
+msgid "E122: Function %s already exists, add ! to replace it"
+msgstr "E122: Функция %s уже существует. Добавьте !, чтобы заменить её."
+
+msgid "E717: Dictionary entry already exists"
+msgstr "E717: Запись уже существует в словаре"
+
+msgid "E718: Funcref required"
+msgstr "E718: Требуется ссылка на функцию"
+
+msgid "E719: Cannot use [:] with a Dictionary"
+msgstr "E719: Невозможно использовать [:] со словарём"
+
+#, c-format
+msgid "E734: Wrong variable type for %s="
+msgstr "E734: Неправильный тип переменной для %s="
+
+#, c-format
+msgid "E130: Unknown function: %s"
+msgstr "E130: Неизвестная функция: %s"
+
+#, c-format
+msgid "E461: Illegal variable name: %s"
+msgstr "E461: Недопустимое имя переменной: %s"
+
+msgid "E687: Less targets than List items"
+msgstr "E687: Целей меньше чем элементов списка"
+
+msgid "E688: More targets than List items"
+msgstr "E688: Целей больше чем элементов списка"
+
+msgid "Double ; in list of variables"
+msgstr "Двойная ; в списке переменных"
+
 #, c-format
-msgid "E106: Unknown variable: \"%s\""
-msgstr "E106: Неизвестная переменная: \"%s\""
+msgid "E738: Can't list variables for %s"
+msgstr "E738: Невозможно отобразить переменные для %s"
+
+msgid "E689: Can only index a List or Dictionary"
+msgstr "E689: Индексирование возможно только списка или словаря"
+
+msgid "E708: [:] must come last"
+msgstr "E708: [:] должно быть последним"
+
+msgid "E709: [:] requires a List value"
+msgstr "E709: [:] требует значением список"
+
+msgid "E710: List value has more items than target"
+msgstr "E710: Элементов списка-значения больше чем в цели"
+
+msgid "E711: List value has not enough items"
+msgstr "E711: Список-значение не содержит достаточно элементов"
+
+msgid "E690: Missing \"in\" after :for"
+msgstr "E690: Пропущено \"in\" после :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -325,14 +462,38 @@
 msgid "E108: No such variable: \"%s\""
 msgstr "E108: Нет такой переменной: \"%s\""
 
+msgid "E743: variable nested too deep for (un)lock"
+msgstr "E743: Слишком глубоко вложенные переменные для (раз)блокировки"
+
 msgid "E109: Missing ':' after '?'"
 msgstr "E109: Пропущено ':' после '?'"
 
+msgid "E691: Can only compare List with List"
+msgstr "E691: Список можно сравнивать только со списком"
+
+msgid "E692: Invalid operation for Lists"
+msgstr "E692: Недопустимая операция для списков"
+
+msgid "E735: Can only compare Dictionary with Dictionary"
+msgstr "E735: Словарь можно сравнивать только со словарём"
+
+msgid "E736: Invalid operation for Dictionary"
+msgstr "E736: Недопустимая операция для словаря"
+
+msgid "E693: Can only compare Funcref with Funcref"
+msgstr "E693: Ссылку на функцию можно сравнивать только с ссылкой на функцию"
+
+msgid "E694: Invalid operation for Funcrefs"
+msgstr "E694: Недопустимая операция для ссылки на функцию"
+
+msgid "E804: Cannot use '%' with Float"
+msgstr "E804: Невозможно использовать '%' с числом с плавающей точкой"
+
 msgid "E110: Missing ')'"
 msgstr "E110: Пропущена ')'"
 
-msgid "E111: Missing ']'"
-msgstr "E111: Пропущена ']'"
+msgid "E695: Cannot index a Funcref"
+msgstr "E695: Невозможно индексировать ссылку на функцию"
 
 #, c-format
 msgid "E112: Option name missing: %s"
@@ -351,6 +512,37 @@
 msgstr "E115: Пропущена кавычка: %s"
 
 #, c-format
+msgid "E696: Missing comma in List: %s"
+msgstr "E696: Пропущена запятая в списке: %s"
+
+#, c-format
+msgid "E697: Missing end of List ']': %s"
+msgstr "E697: Пропущено окончание списка ']': %s"
+
+#, c-format
+msgid "E720: Missing colon in Dictionary: %s"
+msgstr "E720: Пропущено двоеточие в словаре: %s"
+
+#, c-format
+msgid "E721: Duplicate key in Dictionary: \"%s\""
+msgstr "E721: Повтор ключа в словаре: \"%s\""
+
+#, c-format
+msgid "E722: Missing comma in Dictionary: %s"
+msgstr "E722: Пропущена запятая в словаре: %s"
+
+#, c-format
+msgid "E723: Missing end of Dictionary '}': %s"
+msgstr "E723: Пропущено окончание словаря '}': %s"
+
+msgid "E724: variable nested too deep for displaying"
+msgstr "E724: Слишком глубоко вложенные переменные для отображения"
+
+#, c-format
+msgid "E740: Too many arguments for function %s"
+msgstr "E740: Слишком много параметров для функции %s"
+
+#, c-format
 msgid "E116: Invalid arguments for function %s"
 msgstr "E116: Параметры для функции %s заданы неверно"
 
@@ -359,10 +551,6 @@
 msgstr "E117: Неизвестная функция: %s"
 
 #, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Слишком много параметров для функции %s"
-
-#, c-format
 msgid "E119: Not enough arguments for function: %s"
 msgstr "E119: Недостаточно параметров для функции %s"
 
@@ -370,6 +558,22 @@
 msgid "E120: Using <SID> not in a script context: %s"
 msgstr "E120: <SID> используется вне сценария: %s"
 
+#, c-format
+msgid "E725: Calling dict function without Dictionary: %s"
+msgstr "E725: Вызов функции dict без словаря: %s"
+
+msgid "E808: Number or Float required"
+msgstr "E808: Требуется целое число или с плавающей точкой"
+
+msgid "add() argument"
+msgstr "параметр add()"
+
+msgid "E699: Too many arguments"
+msgstr "E699: Слишком много параметров"
+
+msgid "E785: complete() can only be used in Insert mode"
+msgstr "E785: complete() может использоваться только в режиме Вставки"
+
 #.
 #. * Yes this is ugly, I don't particularly like it either.  But doing it
 #. * this way has the compelling advantage that translations need not to
@@ -378,54 +582,148 @@
 msgid "&Ok"
 msgstr "&Ok"
 
+msgid "extend() argument"
+msgstr "параметр extend()"
+
+#, c-format
+msgid "E737: Key already exists: %s"
+msgstr "E737: Ключ уже существует: %s"
+
+msgid "map() argument"
+msgstr "параметр map()"
+
+msgid "filter() argument"
+msgstr "параметр filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld строк: "
 
+#, c-format
+msgid "E700: Unknown function: %s"
+msgstr "E700: Неизвестная функция: %s"
+
 msgid ""
 "&OK\n"
 "&Cancel"
 msgstr ""
 "&OK\n"
-"О&тмена"
+"&C Отмена"
 
 msgid "called inputrestore() more often than inputsave()"
 msgstr "Функция inputrestore() вызывается чаще, чем функция inputsave()"
 
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Слишком много символических ссылок (цикл?)"
+msgid "insert() argument"
+msgstr "параметр insert()"
+
+msgid "E786: Range not allowed"
+msgstr "E786: Диапазон не допускается"
+
+msgid "E701: Invalid type for len()"
+msgstr "E701: Неправильные тип для len()"
+
+msgid "E726: Stride is zero"
+msgstr "E726: Нулевой шаг"
+
+msgid "E727: Start past end"
+msgstr "E727: Начало после конца"
+
+msgid "<empty>"
+msgstr "<пусто>"
 
 msgid "E240: No connection to Vim server"
 msgstr "E240: Нет связи с сервером Vim"
 
+#, c-format
+msgid "E241: Unable to send to %s"
+msgstr "E241: Не могу отправить сообщение для %s"
+
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Сервер не отвечает"
 
+msgid "remove() argument"
+msgstr "параметр remove()"
+
+msgid "E655: Too many symbolic links (cycle?)"
+msgstr "E655: Слишком много символических ссылок (цикл?)"
+
+msgid "reverse() argument"
+msgstr "параметр reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Не могу ответить клиенту"
 
-#, c-format
-msgid "E241: Unable to send to %s"
-msgstr "E241: Не могу отправить сообщение для %s"
+msgid "sort() argument"
+msgstr "параметр sort()"
+
+msgid "E702: Sort compare function failed"
+msgstr "E702: Неудачное завершение функции сравнения при сортировке"
 
 msgid "(Invalid)"
 msgstr "(Неправильно)"
 
+msgid "E677: Error writing temp file"
+msgstr "E677: Ошибка записи во временный файл"
+
+msgid "E805: Using a Float as a Number"
+msgstr "E805: Использование числа с плавающей точкой как целого"
+
+msgid "E703: Using a Funcref as a Number"
+msgstr "E703: Использование ссылки на функцию как числа"
+
+msgid "E745: Using a List as a Number"
+msgstr "E745: Использование списка как числа"
+
+msgid "E728: Using a Dictionary as a Number"
+msgstr "E728: Использование словаря как числа"
+
+msgid "E729: using Funcref as a String"
+msgstr "E729: Использование ссылки на функцию как строки"
+
+msgid "E730: using List as a String"
+msgstr "E730: Использование списка как строки"
+
+msgid "E731: using Dictionary as a String"
+msgstr "E731: Использование словаря как строки"
+
+msgid "E806: using Float as a String"
+msgstr "E806: Использование числа с плавающей точкой как строки"
+
 #, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Неопределенная переменная: %s"
+msgid "E706: Variable type mismatch for: %s"
+msgstr "E706: Несоответствие типа переменной для: %s"
 
 #, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: Недопустимое имя переменной: %s"
+msgid "E795: Cannot delete variable %s"
+msgstr "E795: Невозможно удалить переменную %s"
 
 #, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Функция %s уже существует. Добавьте !, чтобы заменить её."
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr ""
+"E704: Имя переменной ссылки на функцию должно начинаться с заглавной буквы: "
+"%s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Имя переменной конфликтует с существующей функцией: %s"
+
+#, c-format
+msgid "E741: Value is locked: %s"
+msgstr "E741: Значение заблокировано: %s"
+
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#, c-format
+msgid "E742: Cannot change value of %s"
+msgstr "E742: Невозможно изменить значение %s"
+
+msgid "E698: variable nested too deep for making a copy"
+msgstr "E698: Слишком глубоко вложенные переменные для копирования"
 
 #, c-format
 msgid "E123: Undefined function: %s"
-msgstr "E123: Неопределенная функция: %s"
+msgstr "E123: Неопределённая функция: %s"
 
 #, c-format
 msgid "E124: Missing '(': %s"
@@ -435,23 +733,33 @@
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Недопустимый параметр: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Повторяющееся имя параметра: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Пропущена команда :endfunction"
 
 #, c-format
+msgid "E707: Function name conflicts with variable: %s"
+msgstr "E707: Имя функции конфликтует с переменной: %s"
+
+#, c-format
 msgid "E127: Cannot redefine function %s: It is in use"
 msgstr "E127: Невозможно переопределить функцию %s, она используется"
 
+#, c-format
+msgid "E746: Function name does not match script file name: %s"
+msgstr "E746: Имя функции не соответствует имени файла сценария: %s"
+
 msgid "E129: Function name required"
 msgstr "E129: Требуется имя функции"
 
 #, c-format
-msgid "E128: Function name must start with a capital: %s"
-msgstr "E128: Имя функции должно начинаться с прописной буквы: %s"
-
-#, c-format
-msgid "E130: Undefined function: %s"
-msgstr "E130: Функция %s не определена"
+msgid "E128: Function name must start with a capital or contain a colon: %s"
+msgstr ""
+"E128: Имя функции должно начинаться с заглавной буквы или содержать "
+"двоеточие: %s"
 
 #, c-format
 msgid "E131: Cannot delete function %s: It is in use"
@@ -460,7 +768,6 @@
 msgid "E132: Function call depth is higher than 'maxfuncdepth'"
 msgstr "E132: Глубина вызова функции больше, чем значение 'maxfuncdepth'"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "calling %s"
 msgstr "вызов %s"
@@ -474,10 +781,9 @@
 msgstr "%s возвращает #%ld"
 
 #, c-format
-msgid "%s returning \"%s\""
-msgstr "%s возвращает \"%s\""
+msgid "%s returning %s"
+msgstr "%s возвращает %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "continuing in %s"
 msgstr "продолжение в %s"
@@ -485,7 +791,6 @@
 msgid "E133: :return not inside a function"
 msgstr "E133: команда :return вне функции"
 
-#, c-format
 msgid ""
 "\n"
 "# global variables:\n"
@@ -493,6 +798,16 @@
 "\n"
 "# глобальные переменные:\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tВ последний раз опция изменена в "
+
+msgid "No old files"
+msgstr "Нет старых файлов"
+
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
 msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -543,9 +858,13 @@
 msgid " marks"
 msgstr " отметок"
 
+msgid " oldfiles"
+msgstr " старых файлов"
+
 msgid " FAILED"
 msgstr " НЕУДАЧНО"
 
+#. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
 msgstr "E137: Права на запись файла viminfo отсутствуют: %s"
@@ -563,7 +882,6 @@
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Этот файл viminfo автоматически создан Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -571,7 +889,6 @@
 "# Его можно (осторожно!) редактировать.\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Значение опции 'encoding' в момент записи файла\n"
 
@@ -581,11 +898,6 @@
 msgid "Save As"
 msgstr "Сохранить как"
 
-#. Overwriting a file that is loaded in another buffer is not a
-#. * good idea.
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Файл загружен в другом буфере"
-
 msgid "Write partial file?"
 msgstr "Записать файл частично?"
 
@@ -593,8 +905,16 @@
 msgstr "E140: Для записи части буфера используйте !"
 
 #, c-format
-msgid "Overwrite existing file \"%.*s\"?"
-msgstr "Переписать существующий файл \"%.*s\"?"
+msgid "Overwrite existing file \"%s\"?"
+msgstr "Перезаписать существующий файл \"%s\"?"
+
+#, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Своп-файл \"%s\" существует, перезаписать?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: Своп-файл существует: %s (:silent! чтобы обойти проверку)"
 
 #, c-format
 msgid "E141: No file name for buffer %ld"
@@ -605,12 +925,27 @@
 
 #, c-format
 msgid ""
-"'readonly' option is set for \"%.*s\".\n"
+"'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"Для \"%.*s\" включена опция 'readonly'.\n"
+"Для \"%s\" включена опция 'readonly'.\n"
 "Записать?"
 
+#, c-format
+msgid ""
+"File permissions of \"%s\" are read-only.\n"
+"It may still be possible to write it.\n"
+"Do you wish to try?"
+msgstr ""
+"Файл \"%s\" имеет режим доступа только для чтения.\n"
+"Но, возможно, файл удастся записать.\n"
+"Хотите попробовать?"
+
+#, c-format
+msgid "E505: \"%s\" is read-only (add ! to override)"
+msgstr ""
+"E505: \"%s\" открыт только для чтения (добавьте !, чтобы обойти проверку)"
+
 msgid "Edit File"
 msgstr "Редактирование файла"
 
@@ -634,10 +969,17 @@
 msgid "(Interrupted) "
 msgstr "(Прервано)"
 
+msgid "1 match"
+msgstr "Одно соответствие"
+
 msgid "1 substitution"
 msgstr "Одна замена"
 
 #, c-format
+msgid "%ld matches"
+msgstr "%ld соответствий"
+
+#, c-format
 msgid "%ld substitutions"
 msgstr "%ld замен"
 
@@ -658,7 +1000,6 @@
 msgid "Pattern found in every line: %s"
 msgstr "Соответствие шаблону найдено на каждой строке: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -673,7 +1014,7 @@
 
 #, c-format
 msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: к сожалению, справка '%s' для %s отсутствует"
+msgstr "E661: К сожалению, справка '%s' для %s отсутствует"
 
 #, c-format
 msgid "E149: Sorry, no help for %s"
@@ -700,8 +1041,8 @@
 msgstr "E670: Файлы справки используют разные кодировки для одного языка: %s"
 
 #, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s"
-msgstr "E154: Повторяющаяся метка \"%s\" в файле %s"
+msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+msgstr "E154: Повторяющаяся метка \"%s\" в файле %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -767,9 +1108,12 @@
 msgid "%3d  %s %s  line %ld"
 msgstr "%3d  %s %s стр. %ld"
 
+msgid "E750: First use \":profile start {fname}\""
+msgstr "E750: Первое использование \":profile start {имя-файла}\""
+
 #, c-format
-msgid "Save changes to \"%.*s\"?"
-msgstr "Сохранить изменения в \"%.*s\"?"
+msgid "Save changes to \"%s\"?"
+msgstr "Сохранить изменения в \"%s\"?"
 
 msgid "Untitled"
 msgstr "Без имени"
@@ -793,7 +1137,7 @@
 
 #, c-format
 msgid "E666: compiler not supported: %s"
-msgstr "E666: компилятор не поддерживается: %s"
+msgstr "E666: Компилятор не поддерживается: %s"
 
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
@@ -834,6 +1178,21 @@
 msgid "finished sourcing %s"
 msgstr "считывание сценария %s завершено"
 
+msgid "modeline"
+msgstr "режимная строка"
+
+msgid "--cmd argument"
+msgstr "--cmd параметр"
+
+msgid "-c argument"
+msgstr "-c параметр"
+
+msgid "environment variable"
+msgstr "переменная окружения"
+
+msgid "error handler"
+msgstr "обработчик ошибки"
+
 msgid "W15: Warning: Wrong line separator, ^M may be missing"
 msgstr ""
 "W15: Предупреждение: неправильный разделитель строки. Возможно пропущено ^M"
@@ -845,100 +1204,25 @@
 msgstr "E168: Команда :finish используется вне файла сценария"
 
 #, c-format
-msgid "Page %d"
-msgstr "Страница %d"
-
-msgid "No text to be printed"
-msgstr "Печатать нечего"
-
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Печать стр. %d (%d%%)"
+msgid "Current %slanguage: \"%s\""
+msgstr "Активный %sязык: \"%s\""
 
 #, c-format
-msgid " Copy %d of %d"
-msgstr " Копия %d из %d"
+msgid "E197: Cannot set language to \"%s\""
+msgstr "E197: Невозможно сменить язык на \"%s\""
 
-#, c-format
-msgid "Printed: %s"
-msgstr "Напечатано: %s"
+msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+msgstr "Переход в режим Ex. Для перехода в Обычный режим наберите \"visual\""
 
-#, c-format
-msgid "Printing aborted"
-msgstr "Печать прекращена"
+msgid "E501: At end-of-file"
+msgstr "E501: В конце файла"
 
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Ошибка записи в файл PostScript"
+msgid "E169: Command too recursive"
+msgstr "E169: Слишком рекурсивная команда"
 
 #, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Невозможно открыть файл \"%s\""
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Невозможно прочитать файл ресурсов PostScript \"%s\""
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: файл \"%s\" не является файлом ресурсов PostScript"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: файл \"%s\" не является допустимым файлом ресурсов PostScript"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: файл ресурсов \"%s\" неизвестной версии"
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Невозможно открыть файл PostScript"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Невозможно открыть файл \"%s\""
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Файл ресурсов PostScript \"prolog.ps\" не найден"
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Файл ресурсов PostScript \"%s.ps\" не найден"
-
-#, c-format
-msgid "E620: Unable to convert from multi-byte to \"%s\" encoding"
-msgstr ""
-"E620: Преобразование из мультибайтных символов в кодировку \"%s\" невозможно"
-
-msgid "Sending to printer..."
-msgstr "Отправка на печать..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Не удалось выполнить печать файла PostScript"
-
-msgid "Print job sent."
-msgstr "Задание на печать отправлено."
-
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Активный %sязык: \"%s\""
-
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Невозможно сменить язык на \"%s\""
-
-msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "Переход в режим Ex. Для перехода в Обычный режим наберите \"visual\""
-
-#. must be at EOF
-msgid "E501: At end-of-file"
-msgstr "E501: В конце файла"
-
-msgid "E169: Command too recursive"
-msgstr "E169: Cлишком рекурсивная команда"
-
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: Исключительная ситуация не обработана: %s"
+msgid "E605: Exception not caught: %s"
+msgstr "E605: Исключительная ситуация не обработана: %s"
 
 msgid "End of sourced file"
 msgstr "Конец считанного файла"
@@ -995,7 +1279,7 @@
 msgstr "Команды, определённые пользователем, не обнаружены."
 
 msgid "E175: No attribute specified"
-msgstr "E175: параметр не задан"
+msgstr "E175: Параметр не задан"
 
 msgid "E176: Invalid number of arguments"
 msgstr "E176: Неправильное количество параметров"
@@ -1006,19 +1290,8 @@
 msgid "E178: Invalid default value for count"
 msgstr "E178: Неправильное значение числа-приставки по умолчанию"
 
-msgid "E179: argument required for complete"
-msgstr "E179: для завершения требуется указать параметр"
-
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: Неправильное значение дополнения: %s"
-
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr ""
-"E468: Параметр автодополнения можно использовать только с особым дополнением"
-
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: Особое дополнение требует указания параметра функции"
+msgid "E179: argument required for -complete"
+msgstr "E179: Для -complete требуется указать параметр"
 
 #, c-format
 msgid "E181: Invalid attribute: %s"
@@ -1030,26 +1303,59 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: Команда пользователя должна начинаться с заглавной буквы"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr ""
+"E841: Зарезервированное имя не может использоваться для команд пользователя"
+
 #, c-format
 msgid "E184: No such user-defined command: %s"
 msgstr "E184: Нет такой команды пользователя: %s"
 
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Цветовая схема %s не найдена"
+msgid "E180: Invalid complete value: %s"
+msgstr "E180: Неправильное значение дополнения: %s"
+
+msgid "E468: Completion argument only allowed for custom completion"
+msgstr ""
+"E468: Параметр автодополнения можно использовать только с особым дополнением"
+
+msgid "E467: Custom completion requires a function argument"
+msgstr "E467: Особое дополнение требует указания параметра функции"
+
+msgid "unknown"
+msgstr "неизвестно"
+
+#, c-format
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Невозможно найти цветовую схему '%s'"
 
 msgid "Greetings, Vim user!"
-msgstr "Привет, пользователь Vim!"
+msgstr "Приветствуем вас, пользователь Vim!"
+
+msgid "E784: Cannot close last tab page"
+msgstr "E784: Нельзя закрыть последнюю вкладку"
+
+msgid "Already only one tab page"
+msgstr "На экране всего одна вкладка"
 
 msgid "Edit File in new window"
 msgstr "Редактировать файл в новом окне"
 
+#, c-format
+msgid "Tab page %d"
+msgstr "Вкладка %d"
+
 msgid "No swap file"
 msgstr "Без своп-файла"
 
 msgid "Append File"
 msgstr "Добавить файл"
 
+msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+msgstr ""
+"E747: Смена каталога невозможна, буфер изменён (добавьте !, чтобы обойти "
+"проверку)"
+
 msgid "E186: No previous directory"
 msgstr "E186: Нет предыдущего каталога"
 
@@ -1057,7 +1363,7 @@
 msgstr "E187: Неизвестно"
 
 msgid "E465: :winsize requires two number arguments"
-msgstr "E465: команда :winsize требует указания двух числовых параметров"
+msgstr "E465: Команда :winsize требует указания двух числовых параметров"
 
 #, c-format
 msgid "Window position: X %d, Y %d"
@@ -1067,7 +1373,7 @@
 msgstr "E188: В данной системе определение положения окна не работает"
 
 msgid "E466: :winpos requires two number arguments"
-msgstr "E466: команда :winpos требует указания двух числовых параметров"
+msgstr "E466: Команда :winpos требует указания двух числовых параметров"
 
 msgid "Save Redirection"
 msgstr "Перенаправление записи"
@@ -1082,8 +1388,12 @@
 msgstr "Сохранение настроек"
 
 #, c-format
+msgid "E739: Cannot create directory: %s"
+msgstr "E739: Невозможно создать каталог: %s"
+
+#, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" существует (!, чтобы обойти проверку)"
+msgstr "E189: \"%s\" существует (добавьте !, чтобы обойти проверку)"
 
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
@@ -1096,6 +1406,9 @@
 msgid "E192: Recursive use of :normal too deep"
 msgstr "E192: Слишком глубокая рекурсия при использовании команды :normal"
 
+msgid "E809: #< is not available without the +eval feature"
+msgstr "E809: #< не доступно без особенности +eval"
+
 msgid "E194: No alternate file name to substitute for '#'"
 msgstr "E194: Нет соседнего имени файла для замены '#'"
 
@@ -1109,7 +1422,10 @@
 msgstr "E497: Нет автокомандного имени соответствия для замены \"<amatch>\""
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: нет имени файла :source для замены \"<sfile>\""
+msgstr "E498: Нет имени файла :source для замены \"<sfile>\""
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: Нет номера строки для использования \"<slnum>\""
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
@@ -1176,7 +1492,7 @@
 msgstr "Прерывание"
 
 msgid "E579: :if nesting too deep"
-msgstr "E579: слишком глубоко вложенный :if"
+msgstr "E579: Слишком глубоко вложенный :if"
 
 msgid "E580: :endif without :if"
 msgstr "E580: :endif без :if"
@@ -1188,22 +1504,28 @@
 msgstr "E582: :elseif без :if"
 
 msgid "E583: multiple :else"
-msgstr "E583: обнаружено несколько :else"
+msgstr "E583: Обнаружено несколько :else"
 
 msgid "E584: :elseif after :else"
 msgstr "E584: :elseif после :else"
 
-msgid "E585: :while nesting too deep"
-msgstr "E585: слишком глубоко вложенный :while"
+msgid "E585: :while/:for nesting too deep"
+msgstr "E585: Слишком глубокое вложение :while или :for"
+
+msgid "E586: :continue without :while or :for"
+msgstr "E586: :continue без :while или :for"
 
-msgid "E586: :continue without :while"
-msgstr "E586: :continue без :while"
+msgid "E587: :break without :while or :for"
+msgstr "E587: :break без :while или :for"
 
-msgid "E587: :break without :while"
-msgstr "E587: :break без :while"
+msgid "E732: Using :endfor with :while"
+msgstr "E732: Использование :endfor с :while"
+
+msgid "E733: Using :endwhile with :for"
+msgstr "E733: Использование :endwhile с :for"
 
 msgid "E601: :try nesting too deep"
-msgstr "E601: слишком глубоко вложенный :try"
+msgstr "E601: Слишком глубоко вложенный :try"
 
 msgid "E603: :catch without :try"
 msgstr "E603: :catch без :try"
@@ -1218,13 +1540,19 @@
 
 #. Give up for a multiple ":finally" and ignore it.
 msgid "E607: multiple :finally"
-msgstr "E607: обнаружено несколько :finally"
+msgstr "E607: Обнаружено несколько :finally"
 
 msgid "E602: :endtry without :try"
 msgstr "E602: :endtry без :try"
 
 msgid "E193: :endfunction not inside a function"
-msgstr "E193: команда :endfunction может использоваться только внутри функции"
+msgstr "E193: Команда :endfunction может использоваться только внутри функции"
+
+msgid "E788: Not allowed to edit another buffer now"
+msgstr "E788: Сейчас не допускается редактирование другого буфера"
+
+msgid "E811: Not allowed to change buffer information now"
+msgstr "E811: Сейчас не допускается изменение информации о буфере"
 
 msgid "tagname"
 msgstr "имя метки"
@@ -1261,6 +1589,9 @@
 msgid "E199: Active window or buffer deleted"
 msgstr "E199: Удалено активное окно или буфер"
 
+msgid "E812: Autocommands changed buffer or buffer name"
+msgstr "E812: Автокоманды изменили буфер или имя буфера"
+
 msgid "Illegal file name"
 msgstr "Недопустимое имя файла"
 
@@ -1270,9 +1601,18 @@
 msgid "is not a file"
 msgstr "не является файлом"
 
+msgid "is a device (disabled with 'opendevice' option)"
+msgstr "является устройством (отключено при опции 'opendevice')"
+
 msgid "[New File]"
 msgstr "[Новый файл]"
 
+msgid "[New DIRECTORY]"
+msgstr "[Новый КАТАЛОГ]"
+
+msgid "[File too big]"
+msgstr "[Файл слишком большой]"
+
 msgid "[Permission Denied]"
 msgstr "[Доступ запрещён]"
 
@@ -1280,13 +1620,13 @@
 msgstr "E200: В результате выполнения автокоманд *ReadPre файл стал нечитаемым"
 
 msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: автокоманды *ReadPre не должны изменять активный буфер"
+msgstr "E201: Автокоманды *ReadPre не должны изменять активный буфер"
 
 msgid "Vim: Reading from stdin...\n"
-msgstr "Vim: выполняется чтение из стандартного потока ввода stdin...\n"
+msgstr "Vim: Чтение из стандартного потока ввода stdin...\n"
 
 msgid "Reading from stdin..."
-msgstr "Выполняется чтение из стандартного потока ввода stdin..."
+msgstr "Чтение из стандартного потока ввода stdin..."
 
 #. Re-opening the original file failed!
 msgid "E202: Conversion made file unreadable!"
@@ -1301,15 +1641,12 @@
 msgid "[socket]"
 msgstr "[гнездо]"
 
-msgid "[RO]"
-msgstr "[RO]"
+msgid "[character special]"
+msgstr "[специальный символьный]"
 
 msgid "[CR missing]"
 msgstr "[пропущены символы CR]"
 
-msgid "[NL found]"
-msgstr "[Обнаружены символы NL]"
-
 msgid "[long lines split]"
 msgstr "[длинные строки разбиты]"
 
@@ -1319,11 +1656,15 @@
 msgid "[converted]"
 msgstr "[перекодировано]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[зашифровано]"
 
-msgid "[CONVERSION ERROR]"
-msgstr "[ОШИБКА ПРЕОБРАЗОВАНИЯ]"
+#, c-format
+msgid "[CONVERSION ERROR in line %ld]"
+msgstr "[ОШИБКА ПРЕОБРАЗОВАНИЯ в строке %ld]"
 
 #, c-format
 msgid "[ILLEGAL BYTE in line %ld]"
@@ -1341,6 +1682,12 @@
 msgid "can't read output of 'charconvert'"
 msgstr "невозможно прочитать вывод 'charconvert'"
 
+msgid "E821: File is encrypted with unknown method"
+msgstr "E821: Файл зашифрован неизвестным методом"
+
+msgid "E676: No matching autocommands for acwrite buffer"
+msgstr "E676: Нет подходящих автокоманд для буфера acwrite"
+
 msgid "E203: Autocommands deleted or unloaded buffer to be written"
 msgstr ""
 "E203: Буфер, который требовалось записать, удалён или выгружен автокомандой"
@@ -1357,32 +1704,41 @@
 msgid "is not a file or writable device"
 msgstr "не является файлом или устройством, доступным для записи"
 
+msgid "writing to device disabled with 'opendevice' option"
+msgstr "запись в устройство отключена при опции 'opendevice'"
+
 msgid "is read-only (add ! to override)"
-msgstr "открыт только для чтения (!, чтобы обойти проверку)"
+msgstr "открыт только для чтения (добавьте !, чтобы обойти проверку)"
 
 msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Запись в резервный файл невозможна (!, чтобы обойти проверку)"
+msgstr ""
+"E506: Запись в резервный файл невозможна (добавьте !, чтобы обойти проверку)"
 
 msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: Ошибка закрытия резервного файла (!, чтобы обойти проверку)"
+msgstr ""
+"E507: Ошибка закрытия резервного файла (добавьте !, чтобы обойти проверку)"
 
 msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Невозможно прочитать резервный файл (!, чтобы обойти проверку)"
+msgstr ""
+"E508: Невозможно прочитать резервный файл (добавьте !, чтобы обойти проверку)"
 
 msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Невозможно создать резервный файл (!, чтобы обойти проверку)"
+msgstr ""
+"E509: Невозможно создать резервный файл (добавьте !, чтобы обойти проверку)"
 
 msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Невозможно создать резервный файл (!, чтобы обойти проверку)"
+msgstr ""
+"E510: Невозможно создать резервный файл (добавьте !, чтобы обойти проверку)"
 
 msgid "E460: The resource fork would be lost (add ! to override)"
-msgstr "E460: Вилка ресурса будет потеряна (!, чтобы обойти проверку)"
+msgstr "E460: Ветвь ресурса будет потеряна (добавьте !, чтобы обойти проверку)"
 
 msgid "E214: Can't find temp file for writing"
 msgstr "E214: Временный файл для записи не найден"
 
 msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: Перекодировка невозможна (! для записи без перекодировки)"
+msgstr ""
+"E213: Перекодировка невозможна (добавьте ! для записи без перекодировки)"
 
 msgid "E166: Can't open linked file for writing"
 msgstr "E166: Невозможно открыть связанный файл для записи"
@@ -1396,15 +1752,29 @@
 msgid "E512: Close failed"
 msgstr "E512: Операция закрытия не удалась"
 
-msgid "E513: write error, conversion failed"
-msgstr "E513: Ошибка записи, преобразование не удалось"
+msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+msgstr ""
+"E513: Ошибка записи, преобразование не удалось (очистите 'fenc', чтобы "
+"обойти)"
+
+#, c-format
+msgid ""
+"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+"override)"
+msgstr ""
+"E513: Ошибка записи, преобразование не удалось на строке %ld (очистите "
+"'fenc', чтобы обойти)"
 
 msgid "E514: write error (file system full?)"
-msgstr "E514: ошибка записи (нет свободного места?)"
+msgstr "E514: Ошибка записи (нет свободного места?)"
 
 msgid " CONVERSION ERROR"
 msgstr " ОШИБКА ПРЕОБРАЗОВАНИЯ"
 
+#, c-format
+msgid " in line %ld;"
+msgstr " на строке %ld;"
+
 msgid "[Device]"
 msgstr "[Устройство]"
 
@@ -1412,13 +1782,13 @@
 msgstr "[Новый]"
 
 msgid " [a]"
-msgstr " [a]"
+msgstr " [д]"
 
 msgid " appended"
 msgstr " добавлено"
 
 msgid " [w]"
-msgstr " [w]"
+msgstr " [з]"
 
 msgid " written"
 msgstr " записано"
@@ -1472,6 +1842,11 @@
 msgstr "1 символ"
 
 #, c-format
+msgid "%lld characters"
+msgstr "символов: %lld"
+
+#. Explicit typecast avoids warning on Mac OS X 10.6
+#, c-format
 msgid "%ld characters"
 msgstr "символов: %ld"
 
@@ -1506,8 +1881,8 @@
 msgstr "E246: Буфер удалён при выполнении автокоманды FileChangedShell"
 
 #, c-format
-msgid "E211: Warning: File \"%s\" no longer available"
-msgstr "E211: Предупреждение: файл \"%s\" больше не доступен"
+msgid "E211: File \"%s\" no longer available"
+msgstr "E211: Файл \"%s\" больше не доступен"
 
 #, c-format
 msgid ""
@@ -1517,25 +1892,31 @@
 "W12: Предупреждение: файл \"%s\" и буфер Vim были изменены независимо друг "
 "от друга"
 
+msgid "See \":help W12\" for more info."
+msgstr "См. \":help W12\" для дополнительной информации."
+
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
 msgstr ""
 "W11: Предупреждение: файл \"%s\" был изменён после начала редактирования"
 
+msgid "See \":help W11\" for more info."
+msgstr "См. \":help W11\" для дополнительной информации."
+
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
 "W16: Предупреждение: режим доступа к файлу \"%s\" был изменён после начала "
 "редактирования"
 
+msgid "See \":help W16\" for more info."
+msgstr "См. \":help W16\" для дополнительной информации."
+
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
 msgstr ""
 "W13: Предупреждение: файл \"%s\" был создан после начала редактирования"
 
-msgid "See \":help W11\" for more info."
-msgstr "См. дополнительную информацию в \":help W11\"."
-
 msgid "Warning"
 msgstr "Предупреждение"
 
@@ -1544,7 +1925,7 @@
 "&Load File"
 msgstr ""
 "&OK\n"
-"&Загрузить файл"
+"&L Загрузить файл"
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
@@ -1557,6 +1938,10 @@
 msgid "--Deleted--"
 msgstr "--Удалено--"
 
+#, c-format
+msgid "auto-removing autocommand: %s <buffer=%d>"
+msgstr "авто-удаление автокоманды: %s <буффер=%d>"
+
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
@@ -1582,6 +1967,10 @@
 "\n"
 "--- Автокоманды ---"
 
+#, c-format
+msgid "E680: <buffer=%d>: invalid buffer number "
+msgstr "E680: <buffer=%d>: неправильный номер буфера "
+
 msgid "E217: Can't execute autocommands for ALL events"
 msgstr "E217: Невозможно выполнить автокоманды для ВСЕХ событий"
 
@@ -1599,7 +1988,6 @@
 msgid "Executing %s"
 msgstr "Выполнение %s"
 
-#. always scroll up, don't overwrite
 #, c-format
 msgid "autocommand %s"
 msgstr "автокоманда %s"
@@ -1621,27 +2009,31 @@
 msgstr ""
 "E351: Складка не может быть удалена с текущим значением опции 'foldmethod'"
 
+#, c-format
+msgid "+--%3ld lines folded "
+msgstr "+--%3ld строк в складке"
+
 msgid "E222: Add to read buffer"
 msgstr "E222: Добавление в буфер чтения"
 
 msgid "E223: recursive mapping"
-msgstr "E223: рекурсивная привязка"
+msgstr "E223: Рекурсивная привязка"
 
 #, c-format
 msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: уже есть глобальное сокращение для %s"
+msgstr "E224: Уже есть глобальное сокращение для %s"
 
 #, c-format
 msgid "E225: global mapping already exists for %s"
-msgstr "E225: уже есть глобальная привязка для %s"
+msgstr "E225: Уже есть глобальная привязка для %s"
 
 #, c-format
 msgid "E226: abbreviation already exists for %s"
-msgstr "E226: уже есть сокращение для %s"
+msgstr "E226: Уже есть сокращение для %s"
 
 #, c-format
 msgid "E227: mapping already exists for %s"
-msgstr "E227: уже есть привязка для %s"
+msgstr "E227: Уже есть привязка для %s"
 
 msgid "No abbreviation found"
 msgstr "Сокращения не найдены"
@@ -1652,6 +2044,12 @@
 msgid "E228: makemap: Illegal mode"
 msgstr "E228: makemap: недопустимый режим"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Невозможно создать новый процесс для граф. интерфейса"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Процессу-потомку не удалось запустить граф. интерфейс"
+
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Невозможно перейти в режим графического интерфейса"
 
@@ -1664,15 +2062,18 @@
 "E665: Невозможно перейти в режим граф. интерфейса, неправильно заданы шрифты"
 
 msgid "E231: 'guifontwide' invalid"
-msgstr "E231: неправильное значение опции 'guifontwide'"
+msgstr "E231: Неправильное значение опции 'guifontwide'"
 
 msgid "E599: Value of 'imactivatekey' is invalid"
-msgstr "E599: неправильное значение опции 'imactivatekey'"
+msgstr "E599: Неправильное значение опции 'imactivatekey'"
 
 #, c-format
 msgid "E254: Cannot allocate color %s"
 msgstr "E254: Невозможно назначить цвет %s"
 
+msgid "No match at cursor, finding next"
+msgstr "Нет совпадения под курсором, поиск следующего"
+
 msgid "<cannot open> "
 msgstr "<нельзя открыть> "
 
@@ -1706,9 +2107,6 @@
 "E232: \"Пузырь\" для вычислений, включающий и сообщение, и обратный вызов, "
 "не может быть создан"
 
-msgid "Vim dialog..."
-msgstr "Диалоговое окно Vim..."
-
 msgid ""
 "&Yes\n"
 "&No\n"
@@ -1722,10 +2120,10 @@
 msgstr "Методы Ввода"
 
 msgid "VIM - Search and Replace..."
-msgstr "VIM - Поиск и замена..."
+msgstr "VIM — Поиск и замена..."
 
 msgid "VIM - Search..."
-msgstr "VIM - Поиск..."
+msgstr "VIM — Поиск..."
 
 msgid "Find what:"
 msgstr "Что ищем:"
@@ -1751,60 +2149,70 @@
 msgid "Down"
 msgstr "Вниз"
 
+#. 'Find Next' button
 msgid "Find Next"
 msgstr "Найти следующее"
 
+#. 'Replace' button
 msgid "Replace"
 msgstr "Замена"
 
+#. 'Replace All' button
 msgid "Replace All"
 msgstr "Заменить все"
 
 msgid "Vim: Received \"die\" request from session manager\n"
 msgstr "Vim: Получен запрос на прекращение работы от диспетчера сеансов\n"
 
+msgid "Close"
+msgstr "Закрыть"
+
+msgid "New tab"
+msgstr "Новая вкладка"
+
+msgid "Open Tab..."
+msgstr "Открыть вкладку..."
+
 msgid "Vim: Main window unexpectedly destroyed\n"
 msgstr "Vim: Основное окно было неожиданно закрыто\n"
 
-msgid "Font Selection"
-msgstr "Выбор шрифта"
-
-msgid "Used CUT_BUFFER0 instead of empty selection"
-msgstr "Вместо пустого выделения используется CUT_BUFFER0"
+msgid "&Filter"
+msgstr "&Фильтр"
 
-msgid "Filter"
-msgstr "Фильтр"
+msgid "&Cancel"
+msgstr "О&тмена"
 
 msgid "Directories"
 msgstr "Каталоги"
 
-msgid "Help"
-msgstr "Справка"
+msgid "Filter"
+msgstr "Фильтр"
+
+msgid "&Help"
+msgstr "&Справка"
 
 msgid "Files"
 msgstr "Файлы"
 
+msgid "&OK"
+msgstr "&Да"
+
 msgid "Selection"
 msgstr "Выделение"
 
-msgid "Undo"
-msgstr "Отмена"
+msgid "Find &Next"
+msgstr "Найти &следующее"
 
-#, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Невозможно загрузить шрифт Zap '%s'"
+msgid "&Replace"
+msgstr "За&мена"
 
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Невозможно использовать шрифт %s"
+msgid "Replace &All"
+msgstr "Заменить &все"
 
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Отправка сообщения для уничтожения процесса-потомка.\n"
+msgid "&Undo"
+msgstr "О&тмена"
 
+#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Окно с заголовком \"%s\" не обнаружено"
 
@@ -1815,20 +2223,34 @@
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: Невозможно открыть окно внутри приложения MDI"
 
+msgid "Close tab"
+msgstr "Закрыть вкладку"
+
+msgid "Open tab..."
+msgstr "Открыть вкладку..."
+
 msgid "Find string (use '\\\\' to find  a '\\')"
 msgstr "Поиск строки (используйте '\\\\' для поиска '\\')"
 
 msgid "Find & Replace (use '\\\\' to find  a '\\')"
 msgstr "Поиск и замена (используйте '\\\\' для поиска '\\')"
 
+#. We fake this: Use a filter that doesn't select anything and a default
+#. * file name that won't be used.
+msgid "Not Used"
+msgstr "Не используется"
+
+msgid "Directory\t*.nothing\n"
+msgstr "Каталог\t*.ничего\n"
+
 msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
 msgstr ""
-"Vim E458: невозможно выделить запись в таблице цвета, некоторые цветамогут "
+"Vim E458: Невозможно выделить запись в таблице цвета, некоторые цвета могут "
 "отображаться неправильно"
 
 #, c-format
 msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-msgstr "E250: в наборе шрифтов %s отсутствуют шрифты для следующих кодировок:"
+msgstr "E250: В наборе шрифтов %s отсутствуют шрифты для следующих кодировок:"
 
 #, c-format
 msgid "E252: Fontset name: %s"
@@ -1866,9 +2288,133 @@
 "Ширина шрифта font1: %ld\n"
 "\n"
 
+msgid "Invalid font specification"
+msgstr "Неправильное определение шрифта"
+
+msgid "&Dismiss"
+msgstr "О&тклонить"
+
+msgid "no specific match"
+msgstr "нет специального совпадения"
+
+msgid "Vim - Font Selector"
+msgstr "Vim — Выбор шрифта"
+
+msgid "Name:"
+msgstr "Название:"
+
+#. create toggle button
+msgid "Show size in Points"
+msgstr "Показывать размер в пунктах"
+
+msgid "Encoding:"
+msgstr "Кодировка:"
+
+msgid "Font:"
+msgstr "Шрифт:"
+
+msgid "Style:"
+msgstr "Стиль:"
+
+msgid "Size:"
+msgstr "Размер:"
+
 msgid "E256: Hangul automata ERROR"
 msgstr "E256: ОШИБКА автоматики Хангыл"
 
+msgid "E550: Missing colon"
+msgstr "E550: Пропущено двоеточие"
+
+msgid "E551: Illegal component"
+msgstr "E551: Недопустимый компонент"
+
+msgid "E552: digit expected"
+msgstr "E552: Требуется указать цифру"
+
+#, c-format
+msgid "Page %d"
+msgstr "Страница %d"
+
+msgid "No text to be printed"
+msgstr "Печатать нечего"
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Печать стр. %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr " Копия %d из %d"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "Напечатано: %s"
+
+msgid "Printing aborted"
+msgstr "Печать прекращена"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: Ошибка записи в файл PostScript"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: Невозможно открыть файл \"%s\""
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: Невозможно прочитать файл ресурсов PostScript \"%s\""
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: Файл \"%s\" не является файлом ресурсов PostScript"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: Файл \"%s\" не является допустимым файлом ресурсов PostScript"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: Файл ресурсов \"%s\" неизвестной версии"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Несовместимые многобайтовая кодировка и набор символов."
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset не может быть пустым при многобайтовой кодировке."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: Нет определения шрифта по умолчанию для многобайтовой печати."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: Невозможно открыть файл PostScript"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Невозможно открыть файл \"%s\""
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: Файл ресурсов PostScript \"prolog.ps\" не найден"
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: Файл ресурсов PostScript \"cidfont.ps\" не найден"
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: Файл ресурсов PostScript \"%s.ps\" не найден"
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: Невозможно преобразовать в кодировку печать \"%s\""
+
+msgid "Sending to printer..."
+msgstr "Отправка на печать..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: Не удалось выполнить печать файла PostScript"
+
+msgid "Print job sent."
+msgstr "Задание на печать отправлено."
+
 msgid "Add a new database"
 msgstr "Добавить новую базу данных"
 
@@ -1902,10 +2448,10 @@
 
 #, c-format
 msgid "E563: stat(%s) error: %d"
-msgstr "E563: ошибка stat(%s): %d"
+msgstr "E563: Ошибка stat(%s): %d"
 
 msgid "E563: stat error"
-msgstr "E563: ошибка stat"
+msgstr "E563: Ошибка stat"
 
 #, c-format
 msgid "E564: %s is not a directory or a valid cscope database"
@@ -1917,10 +2463,10 @@
 
 #, c-format
 msgid "E262: error reading cscope connection %ld"
-msgstr "E262: ошибка получения информации от соединения cscope %ld"
+msgstr "E262: Ошибка получения информации от соединения cscope %ld"
 
 msgid "E561: unknown cscope search type"
-msgstr "E561: неизвестный тип поиска cscope"
+msgstr "E561: Неизвестный тип поиска cscope"
 
 msgid "E566: Could not create cscope pipes"
 msgstr "E566: Невозможно создать трубу для cscope"
@@ -1931,49 +2477,67 @@
 msgid "cs_create_connection exec failed"
 msgstr "не удалось выполнить cs_create_connection"
 
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Не удалось запустить процесс cscope"
-
 msgid "cs_create_connection: fdopen for to_fp failed"
 msgstr "cs_create_connection: не удалось выполнить fdopen для to_fp"
 
 msgid "cs_create_connection: fdopen for fr_fp failed"
 msgstr "cs_create_connection: не удалось выполнить fdopen для fr_fp"
 
+msgid "E623: Could not spawn cscope process"
+msgstr "E623: Не удалось запустить процесс cscope"
+
 msgid "E567: no cscope connections"
-msgstr "E567: соединений с cscope не создано"
+msgstr "E567: Соединений с cscope не создано"
 
 #, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: не найдено соответствий по запросу cscope %s для %s"
+msgid "E469: invalid cscopequickfix flag %c for %c"
+msgstr "E469: Неправильный флаг cscopequickfix %c для %c"
 
 #, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: неправильный флаг cscopequickfix %c для %c"
+msgid "E259: no matches found for cscope query %s of %s"
+msgstr "E259: Не найдено соответствий по запросу cscope %s для %s"
 
 msgid "cscope commands:\n"
-msgstr "команды cscope:\n"
+msgstr "Команды cscope:\n"
 
 #, c-format
-msgid "%-5s: %-30s (Usage: %s)"
-msgstr "%-5s: %-30s (Использование: %s)"
+msgid "%-5s: %s%*s (Usage: %s)"
+msgstr "%-5s: %s%*s (использование: %s)"
+
+msgid ""
+"\n"
+"       c: Find functions calling this function\n"
+"       d: Find functions called by this function\n"
+"       e: Find this egrep pattern\n"
+"       f: Find this file\n"
+"       g: Find this definition\n"
+"       i: Find files #including this file\n"
+"       s: Find this C symbol\n"
+"       t: Find this text string\n"
+msgstr ""
+"\n"
+"       c: Найти функции вызывающие эту функцию\n"
+"       d: Найти функции вызываемые этой функцией\n"
+"       e: Найти этот шаблон egrep\n"
+"       f: Найти этот файл\n"
+"       g: Найти это определение\n"
+"       i: Найти файлы включающие (#include) этот файл\n"
+"       s: Найти этот C-символ\n"
+"       t: Найти эту текстовую строку\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
-msgstr "E625: невозможно открыть базу данных cscope: %s"
+msgstr "E625: Невозможно открыть базу данных cscope: %s"
 
 msgid "E626: cannot get cscope database information"
-msgstr "E626: информация о базе данных cscope не доступна"
+msgstr "E626: Информация о базе данных cscope не доступна"
 
 msgid "E568: duplicate cscope database not added"
-msgstr "E568: данная база данных cscope уже подсоединена"
-
-msgid "E569: maximum number of cscope connections reached"
-msgstr "E569: достигнуто максимальное значение открытых соединений с cscope"
+msgstr "E568: Данная база данных cscope уже подсоединена"
 
 #, c-format
 msgid "E261: cscope connection %s not found"
-msgstr "E261: соединение с cscope %s не обнаружено"
+msgstr "E261: Соединение с cscope %s не обнаружено"
 
 #, c-format
 msgid "cscope connection %s closed"
@@ -1981,7 +2545,7 @@
 
 #. should not reach here
 msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: критическая ошибка в cs_manage_matches"
+msgstr "E570: Критическая ошибка в cs_manage_matches"
 
 #, c-format
 msgid "Cscope tag: %s"
@@ -2010,122 +2574,158 @@
 msgid " # pid    database name                       prepend path\n"
 msgstr " # pid    база данных                         начальный путь\n"
 
+msgid "Lua library cannot be loaded."
+msgstr "Библиотека Lua не может быть загружена."
+
+msgid "cannot save undo information"
+msgstr "невозможно сохранить информацию об отмене операции"
+
 msgid ""
-"E263: Sorry, this command is disabled, the Python library could not be "
+"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
 "loaded."
 msgstr ""
-"E263: К сожалению эта команда не работает, поскольку не загружена библиотека "
-"Python"
+"E815: К сожалению эта команда не работает, поскольку не загружена библиотека "
+"MzScheme"
 
-msgid "E659: Cannot invoke Python recursively"
-msgstr "E659: Невозможно выполнить рекурсивный вызов Python"
+msgid "invalid expression"
+msgstr "неправильное выражение"
 
-msgid "can't delete OutputObject attributes"
-msgstr "невозможно удалить атрибуты OutputObject"
+msgid "expressions disabled at compile time"
+msgstr "выражения отключены при компиляции"
 
-msgid "softspace must be an integer"
-msgstr "значение softspace должно быть целым числом"
+msgid "hidden option"
+msgstr "скрытая опция"
 
-msgid "invalid attribute"
-msgstr "неправильный атрибут"
+msgid "unknown option"
+msgstr "неизвестная опция"
 
-msgid "writelines() requires list of strings"
-msgstr "writelines() требует указания списка строк"
+msgid "window index is out of range"
+msgstr "индекс окна за пределами диапазона"
 
-msgid "E264: Python: Error initialising I/O objects"
-msgstr "E264: Python: Ошибка инициализации объектов I/O"
+msgid "couldn't open buffer"
+msgstr "невозможно открыть буфер"
 
-msgid "invalid expression"
-msgstr "неправильное выражение"
+msgid "cannot delete line"
+msgstr "невозможно удалить строку"
 
-msgid "expressions disabled at compile time"
-msgstr "выражения отключены при компиляции"
+msgid "cannot replace line"
+msgstr "невозможно заменить строку"
 
-msgid "attempt to refer to deleted buffer"
-msgstr "попытка сослаться на уничтоженный буфер"
+msgid "cannot insert line"
+msgstr "невозможно вставить строку"
 
-msgid "line number out of range"
-msgstr "запредельный номер строки"
+msgid "string cannot contain newlines"
+msgstr "строка не может содержать символ новой строки"
 
-#, c-format
-msgid "<buffer object (deleted) at %8lX>"
-msgstr "<объект буфера (удален) в %8lX>"
+msgid "error converting Scheme values to Vim"
+msgstr "невозможно преобразовать значения Scheme в Vim"
 
-msgid "invalid mark name"
-msgstr "неправильное имя отметки"
+msgid "Vim error: ~a"
+msgstr "ошибка Vim: ~a"
 
-msgid "no such buffer"
-msgstr "нет такого буфера"
+msgid "Vim error"
+msgstr "ошибка Vim"
 
-msgid "attempt to refer to deleted window"
-msgstr "попытка сослаться на закрытое окно"
+msgid "buffer is invalid"
+msgstr "неправильный буфер"
 
-msgid "readonly attribute"
-msgstr "атрибут доступен только для чтения"
+msgid "window is invalid"
+msgstr "неправильное окно"
 
-msgid "cursor position outside buffer"
-msgstr "позиция курсора находится вне буфера"
+msgid "linenr out of range"
+msgstr "номер строки за пределами диапазона"
 
-#, c-format
-msgid "<window object (deleted) at %.8lX>"
-msgstr "<объект окна (удален) в %.8lX>"
+msgid "not allowed in the Vim sandbox"
+msgstr "не допускается в песочнице Vim"
 
-#, c-format
-msgid "<window object (unknown) at %.8lX>"
-msgstr "<объект окна (неизвестен) в %.8lX>"
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Данный Vim не может выполнить :python после использования :py3"
 
-#, c-format
-msgid "<window %d>"
-msgstr "<окно %d>"
+msgid "only string keys are allowed"
+msgstr "допустимы только строковые ключи"
 
-msgid "no such window"
-msgstr "нет такого окна"
+msgid ""
+"E263: Sorry, this command is disabled, the Python library could not be "
+"loaded."
+msgstr ""
+"E263: К сожалению эта команда не работает, поскольку не загружена библиотека "
+"Python"
 
-msgid "cannot save undo information"
-msgstr "невозможно сохранить информацию об отмене операции"
+msgid "E659: Cannot invoke Python recursively"
+msgstr "E659: Невозможно выполнить рекурсивный вызов Python"
 
-msgid "cannot delete line"
-msgstr "невозможно удалить строку"
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval не возвратил допустимого объекта Python"
 
-msgid "cannot replace line"
-msgstr "невозможно заменить строку"
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr ""
+"E859: Не удалось преобразовать возвращённый объект Python в значение VIM"
 
-msgid "cannot insert line"
-msgstr "невозможно вставить строку"
+#, c-format
+msgid "<buffer object (deleted) at %p>"
+msgstr "<объект буфера (удален) в %p>"
 
-msgid "string cannot contain newlines"
-msgstr "строка не может содержать символ новой строки"
+msgid "E837: This Vim cannot execute :py3 after using :python"
+msgstr "E837: Данный Vim не может выполнить :py3 после использования :python"
+
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: Eval не возвратил допустимого объекта Python 3"
+
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr ""
+"E861: Не удалось преобразовать возвращённый объект Python 3 в значение VIM"
+
+msgid "E265: $_ must be an instance of String"
+msgstr "E265: $_ должен быть экземпляром или строкой"
 
 msgid ""
 "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
 msgstr ""
 "E266: К сожалению эта команда не работает, поскольку не загружена библиотека "
-"Ruby."
+"Ruby"
+
+msgid "E267: unexpected return"
+msgstr "E267: Неожиданный return"
+
+msgid "E268: unexpected next"
+msgstr "E268: Неожиданный next"
+
+msgid "E269: unexpected break"
+msgstr "E269: Неожиданный break"
+
+msgid "E270: unexpected redo"
+msgstr "E270: Неожиданный redo"
+
+msgid "E271: retry outside of rescue clause"
+msgstr "E271: retry вне оператора rescue"
+
+msgid "E272: unhandled exception"
+msgstr "E272: Необработанное исключение"
 
 #, c-format
 msgid "E273: unknown longjmp status %d"
-msgstr "E273: неизвестное состояние longjmp %d"
+msgstr "E273: Неизвестное состояние longjmp %d"
 
 msgid "Toggle implementation/definition"
 msgstr "Переключение между реализацией/определением"
 
 msgid "Show base class of"
-msgstr "Показать базовый класс "
+msgstr "Показать основной класс"
 
 msgid "Show overridden member function"
 msgstr "Показать перегруженные функции"
 
 msgid "Retrieve from file"
-msgstr "Получение из файла"
+msgstr "Получить из файла"
 
 msgid "Retrieve from project"
-msgstr "Получение из проекта"
+msgstr "Получить из проекта"
 
 msgid "Retrieve from all projects"
-msgstr "Получение из всех проектов"
+msgstr "Получить из всех проектов"
 
 msgid "Retrieve"
-msgstr "Получение"
+msgstr "Получить"
 
 msgid "Show source of"
 msgstr "Показать исходный код"
@@ -2201,13 +2801,13 @@
 msgid "not implemented yet"
 msgstr "пока не реализовано"
 
-msgid "unknown option"
-msgstr "неизвестная опция"
-
 #. ???
 msgid "cannot set line(s)"
 msgstr "невозможно назначить строку или строки"
 
+msgid "invalid mark name"
+msgstr "неправильное имя отметки"
+
 msgid "mark not set"
 msgstr "отметка не установлена"
 
@@ -2218,6 +2818,9 @@
 msgid "cannot insert/append line"
 msgstr "невозможно вставить или добавить строку"
 
+msgid "line number out of range"
+msgstr "номер строки за пределами диапазона"
+
 msgid "unknown flag: "
 msgstr "неизвестный флаг: "
 
@@ -2228,7 +2831,7 @@
 msgstr "клавиатурное прерывание"
 
 msgid "vim error"
-msgstr "ошибка vim"
+msgstr "ошибка VIM"
 
 msgid "cannot create buffer/window command: object is being deleted"
 msgstr "невозможно создать команду буфера или окна: объект в процессе удаления"
@@ -2258,11 +2861,9 @@
 "E571: К сожалению эта команда не работает, поскольку не загружена библиотека "
 "Tcl"
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ОШИБКА TCL: Код выхода не является целым числом?! Сообщите об этом в "
-"vim-dev@vim.org"
+#, c-format
+msgid "E572: exit code %d"
+msgstr "E572: Код выхода %d"
 
 msgid "cannot get line"
 msgstr "невозможно получить строку"
@@ -2271,7 +2872,7 @@
 msgstr "Невозможно зарегистрировать имя сервера команд"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: Отправка команды в другую программу не удалась"
+msgstr "E248: Не удалась отправка команды в другую программу"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2282,29 +2883,39 @@
 "E251: Неправильно сформировано значение данного процесса VIM в реестре. "
 "Удалено!"
 
-msgid "Unknown option"
-msgstr "Неизвестный аргумент"
+msgid "Unknown option argument"
+msgstr "Неизвестный необязательный параметр"
 
 msgid "Too many edit arguments"
-msgstr "Слишком много аргументов редактирования"
+msgstr "Слишком много параметров редактирования"
 
 msgid "Argument missing after"
-msgstr "Пропущен аргумент после"
+msgstr "Пропущен параметр после"
 
-msgid "Garbage after option"
-msgstr "Мусор после аргумента"
+msgid "Garbage after option argument"
+msgstr "Мусор после необязательного параметра"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"Слишком много аргументов \"+команда\", \"-c команда\" или \"--cmd команда\""
+"Слишком много параметров \"+команда\", \"-c команда\" или \"--cmd команда\""
 
 msgid "Invalid argument for"
-msgstr "Недопустимые аргументы для"
+msgstr "Недопустимый параметр для"
+
+#, c-format
+msgid "%d files to edit\n"
+msgstr "Файлов для редактирования: %d\n"
+
+msgid "netbeans is not supported with this GUI\n"
+msgstr "NetBeans не поддерживается с этим графическим интерфейсом\n"
 
 msgid "This Vim was not compiled with the diff feature."
 msgstr ""
 "Данный Vim был скомпилирован с выключенной особенностью просмотра отличий"
 
+msgid "'-nb' cannot be used: not enabled at compile time\n"
+msgstr "Невозможно использовать '-nb': не включено при компиляции\n"
+
 msgid "Attempt to open script file again: \""
 msgstr "Попытка повторного открытия файла сценария: \""
 
@@ -2314,9 +2925,8 @@
 msgid "Cannot open for script output: \""
 msgstr "Невозможно открыть для вывода сценария: \""
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "Файлов для редактирования: %d\n"
+msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+msgstr "Vim: Ошибка: Не удалось запустить gvim из NetBeans\n"
 
 msgid "Vim: Warning: Output is not to a terminal\n"
 msgstr "Vim: Предупреждение: Вывод осуществляется не на терминал\n"
@@ -2343,13 +2953,16 @@
 msgstr "[файл ..] редактирование указанных файлов"
 
 msgid "-               read text from stdin"
-msgstr "-                чтение текста из потока ввода stdin"
+msgstr "-           чтение текста из потока ввода stdin"
 
 msgid "-t tag          edit file where tag is defined"
-msgstr "-t метка         редактирование файла с указанной меткой"
+msgstr "-t метка    редактирование файла с указанной меткой"
 
+# \n\t\t.. для умещения в 80 столбцов
 msgid "-q [errorfile]  edit file with first error"
-msgstr "-q [файл ошибок] редактирование файла с первой ошибкой"
+msgstr ""
+"-q [файл-ошибок]\n"
+"\t\t\t\t    редактирование файла с первой ошибкой"
 
 msgid ""
 "\n"
@@ -2361,7 +2974,7 @@
 "Использование:"
 
 msgid " vim [arguments] "
-msgstr " vim [аргументы] "
+msgstr " vim [параметры] "
 
 msgid ""
 "\n"
@@ -2372,12 +2985,19 @@
 
 msgid ""
 "\n"
+"Where case is ignored prepend / to make flag upper case"
+msgstr ""
+"\n"
+"Если регистр игнорируется, добавьте перед флагом / для верхнего регистра"
+
+msgid ""
+"\n"
 "\n"
 "Arguments:\n"
 msgstr ""
 "\n"
 "\n"
-"Аргументы:\n"
+"Параметры:\n"
 
 msgid "--\t\t\tOnly file names after this"
 msgstr "--\t\t\tДалее указываются только имена файлов"
@@ -2403,6 +3023,9 @@
 msgid "-e\t\t\tEx mode (like \"ex\")"
 msgstr "-e\t\t\tРежим Ex (как \"ex\")"
 
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tУлучшенный режим Ex"
+
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
 msgstr "-s\t\t\tТихий (пакетный) режим (только для \"ex\")"
 
@@ -2425,7 +3048,7 @@
 msgstr "-M\t\t\tБез возможности внесения изменений в текст"
 
 msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tБинарный режим"
+msgstr "-b\t\t\tДвоичный режим"
 
 msgid "-l\t\t\tLisp mode"
 msgstr "-l\t\t\tРежим Lisp"
@@ -2436,8 +3059,11 @@
 msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
 msgstr "-N\t\t\tРежим неполной совместимости с Vi: 'nocompatible'"
 
-msgid "-V[N]\t\tVerbose level"
-msgstr "-V[N]\t\tУровень подробности сообщений"
+# \n\t\t.. для умещения в 80 столбцов
+msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+msgstr ""
+"-V[N][файл]\t\tВыводить дополнительные сообщения\n"
+"\t\t\t\t[уровень N] [записывать в файл]"
 
 msgid "-D\t\t\tDebugging mode"
 msgstr "-D\t\t\tРежим отладки"
@@ -2481,8 +3107,17 @@
 msgid "--noplugin\t\tDon't load plugin scripts"
 msgstr "--noplugin\t\tНе загружать сценарии модулей"
 
+# \n\t\t.. для умещения в 80 столбцов
+msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+msgstr ""
+"-p[N]\t\tОткрыть N вкладок (по умолчанию: по одной\n"
+"\t\t\t\tна каждый файл)"
+
+# \n\t\t.. для умещения в 80 столбцов
 msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tОткрыть N окон (по умолчанию: по одному на каждый файл)"
+msgstr ""
+"-o[N]\t\tОткрыть N окон (по умолчанию: по одному\n"
+"\t\t\t\tна каждый файл)"
 
 msgid "-O[N]\t\tLike -o but split vertically"
 msgstr "-O[N]\t\tТо же, что и -o, но с вертикальным разделением окон"
@@ -2499,11 +3134,17 @@
 msgid "-c <command>\t\tExecute <command> after loading the first file"
 msgstr "-c <команда>\t\tВыполнить <команду> после загрузки первого файла"
 
+# \n\t\t.. для умещения в 80 столбцов
 msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <сеанс>\t\tПрочитать сценарий <сеанса> после загрузки первого файла"
+msgstr ""
+"-S <сеанс>\t\tПрочитать сценарий <сеанса> после загрузки\n"
+"\t\t\t\tпервого файла"
 
+# \n\t\t.. для умещения в 80 столбцов
 msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <сценарий>\tПрочитать команды Обычного режима из файла <сценария>"
+msgstr ""
+"-s <сценарий>\tПрочитать команды Обычного режима из\n"
+"\t\t\t\tфайла <сценария>"
 
 msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
 msgstr "-w <сценарий>\tДобавлять все введённые команды в файл <сценария>"
@@ -2515,7 +3156,7 @@
 msgstr "-x\t\t\tРедактирование зашифрованных файлов"
 
 msgid "-display <display>\tConnect vim to this particular X-server"
-msgstr "-display <экран>\tПодсоединить vim к указанному серверу X"
+msgstr "-display <экран>\tПодсоединить VIM к указанному X-серверу"
 
 msgid "-X\t\t\tDo not connect to X server"
 msgstr "-X\t\t\tНе выполнять соединение с сервером X"
@@ -2536,6 +3177,11 @@
 msgstr ""
 "--remote-wait-silent <файлы>  То же, но без жалоб на отсутствие сервера"
 
+msgid ""
+"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+msgstr ""
+"--remote-tab[-wait][-silent] <файлы>  То же, что и --remote, но с вкладками"
+
 msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
 msgstr "--remote-send <кнопки>\tОтправить <кнопки> на сервер Vim и выйти"
 
@@ -2549,6 +3195,9 @@
 msgstr ""
 "--servername <имя>\tОтправить на/стать сервером Vim с указанным <именем>"
 
+msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgstr "--startuptime <файл>\tЗаписать временную метку о запуске в <файл>"
+
 msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
 msgstr "-i <viminfo>\t\tИспользовать вместо .viminfo файл <viminfo>"
 
@@ -2563,33 +3212,27 @@
 "Arguments recognised by gvim (Motif version):\n"
 msgstr ""
 "\n"
-"Аргументы для gvim (версия Motif):\n"
+"Параметры для gvim (версия Motif):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (neXtaw version):\n"
 msgstr ""
 "\n"
-"Аргументы для gvim (версия neXtaw):\n"
+"Параметры для gvim (версия neXtaw):\n"
 
 msgid ""
 "\n"
 "Arguments recognised by gvim (Athena version):\n"
 msgstr ""
 "\n"
-"Аргументы для gvim (версия Athena):\n"
+"Параметры для gvim (версия Athena):\n"
 
 msgid "-display <display>\tRun vim on <display>"
-msgstr "-display <дисплей>\tЗапустить vim на указанном <дисплее>"
+msgstr "-display <дисплей>\tЗапустить VIM на указанном <дисплее>"
 
 msgid "-iconic\t\tStart vim iconified"
-msgstr "-iconic\t\tЗапустить vim в свёрнутом виде"
-
-msgid "-name <name>\t\tUse resource as if vim was <name>"
-msgstr "-name <имя>\t\tИспользовать ресурс, как если бы vim был <именем>"
-
-msgid "\t\t\t  (Unimplemented)\n"
-msgstr "\t\t\t  (Не реализовано)\n"
+msgstr "-iconic\t\tЗапустить VIM в свёрнутом виде"
 
 msgid "-background <color>\tUse <color> for the background (also: -bg)"
 msgstr ""
@@ -2633,27 +3276,14 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Аргументы для gvim (версия RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <число>\tПервоначальная ширина окна в колонках"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <число>\tПервоначальная высота окна в строках"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
-"Аргументы для gvim (версия GTK+):\n"
+"Параметры для gvim (версия GTK+):\n"
 
 msgid "-display <display>\tRun vim on <display> (also: --display)"
 msgstr ""
-"-display <дисплей>\tЗапустить vim на указанном <дисплее> (также: --display)"
+"-display <дисплей>\tЗапустить VIM на указанном <дисплее> (также: --display)"
 
 msgid "--role <role>\tSet a unique role to identify the main window"
 msgstr ""
@@ -2662,9 +3292,15 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tОткрыть Vim внутри другого компонента GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tВывести Window ID для gvim на стандартный поток вывода"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <заголовок родителя>\tОткрыть Vim в родительском приложении"
 
+msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+msgstr "--windowid <HWND>\tОткрыть Vim внутри другого компонента win32"
+
 msgid "No display"
 msgstr "Нет дисплея"
 
@@ -2717,7 +3353,6 @@
 "\n"
 "измен.  стр  кол текст"
 
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -2726,7 +3361,6 @@
 "# Глобальные отметки:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -2734,7 +3368,6 @@
 "\n"
 "# Список прыжков (сначала более свежие):\n"
 
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -2763,24 +3396,14 @@
 "ввода"
 
 msgid "E288: input method doesn't support any style"
-msgstr "E288: метод ввода не поддерживает стили"
+msgstr "E288: Метод ввода не поддерживает стили"
 
 msgid "E289: input method doesn't support my preedit type"
 msgstr ""
-"E289: метод ввода не поддерживает мой тип предварительного редактирования"
-
-msgid "E290: over-the-spot style requires fontset"
-msgstr "E290: стиль \"над местом\" требует указания шрифтового набора"
-
-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-msgstr ""
-"E291: GTK+ более ранней версии, чем 1.2.3. Область состояния не работает."
-
-msgid "E292: Input Method Server is not running"
-msgstr "E292: Сервер метода ввода не запущен"
+"E289: Метод ввода не поддерживает мой тип предварительного редактирования"
 
 msgid "E293: block was not locked"
-msgstr "E293: блок не заблокирован"
+msgstr "E293: Блок не заблокирован"
 
 msgid "E294: Seek error in swap file read"
 msgstr "E294: Ошибка поиска при чтении своп-файла"
@@ -2807,6 +3430,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Не получен блок номер 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Ошибка при обновлении шифрования своп-файла"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ой, потерялся своп-файл!!!"
@@ -2819,8 +3445,8 @@
 msgstr ""
 "E303: Не удалось открыть своп-файл для \"%s\", восстановление невозможно"
 
-msgid "E304: ml_timestamp: Didn't get block 0??"
-msgstr "E304: ml_timestamp: Не получен блок 0??"
+msgid "E304: ml_upd_block0(): Didn't get block 0??"
+msgstr "E304: ml_upd_block0(): Не получен блок 0??"
 
 #, c-format
 msgid "E305: No swap file found for %s"
@@ -2868,6 +3494,14 @@
 "либо файл был повреждён."
 
 #, c-format
+msgid ""
+"E833: %s is encrypted and this version of Vim does not support encryption"
+msgstr "E833: %s зашифрован, а эта версия Vim не поддерживает шифрование"
+
+msgid " has been damaged (page size is smaller than minimum value).\n"
+msgstr " был повреждён (размер страницы меньше минимального значения).\n"
+
+#, c-format
 msgid "Using swap file \"%s\""
 msgstr "Используется своп-файл \"%s\""
 
@@ -2879,6 +3513,40 @@
 msgstr "E308: Предупреждение: исходный файл мог быть изменён"
 
 #, c-format
+msgid "Swap file is encrypted: \"%s\""
+msgstr "Своп-файл зашифрован: \"%s\""
+
+msgid ""
+"\n"
+"If you entered a new crypt key but did not write the text file,"
+msgstr ""
+"\n"
+"Если вы ввели новый пароль для шифрования, но не записали текстовый файл,"
+
+msgid ""
+"\n"
+"enter the new crypt key."
+msgstr ""
+"\n"
+"то введите новый пароль для шифрования."
+
+# Перевод сообщения разделён на две части, часть первая
+msgid ""
+"\n"
+"If you wrote the text file after changing the crypt key press enter"
+msgstr ""
+"\n"
+"Если вы записали текстовый файл после изменения пароля шифрования, то нажмите"
+
+# Перевод сообщения разделён на две части, часть вторая
+msgid ""
+"\n"
+"to use the same key for text file and swap file"
+msgstr ""
+"\n"
+"Enter для использования одного ключа для текстового файла и своп-файла"
+
+#, c-format
 msgid "E309: Unable to read block 1 from %s"
 msgstr "E309: Невозможно прочитать блок 1 из %s"
 
@@ -2886,7 +3554,7 @@
 msgstr "???ОТСУТСТВУЕТ МНОГО СТРОК"
 
 msgid "???LINE COUNT WRONG"
-msgstr "???НЕПРАВИЛЬНОЕ ЗНАЧЕНИЕ СЧЕТЧИКА СТРОК"
+msgstr "???НЕПРАВИЛЬНОЕ ЗНАЧЕНИЕ СЧЁТЧИКА СТРОК"
 
 msgid "???EMPTY BLOCK"
 msgstr "???ПУСТОЙ БЛОК"
@@ -2896,7 +3564,7 @@
 
 #, c-format
 msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: неправильный блок 1 ID (%s не является файлом .swp?)"
+msgstr "E310: Неправильный блок 1 ID (%s не является файлом .swp?)"
 
 msgid "???BLOCK MISSING"
 msgstr "???ПРОПУЩЕН БЛОК"
@@ -2920,7 +3588,7 @@
 "с ???"
 
 msgid "See \":help E312\" for more information."
-msgstr "См. дополнительную информацию в справочнике (\":help E312\")"
+msgstr "См. \":help E312\" для дополнительной информации."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "Восстановление завершено. Проверьте, всё ли в порядке."
@@ -2932,15 +3600,23 @@
 "\n"
 "(Можете записать файл под другим именем и сравнить его с исходным\n"
 
-msgid "and run diff with the original file to check for changes)\n"
-msgstr "файлом при помощи программы diff).\n"
+msgid "and run diff with the original file to check for changes)"
+msgstr "файлом при помощи программы diff)"
+
+msgid "Recovery completed. Buffer contents equals file contents."
+msgstr "Восстановление завершено. Содержимое буферов и файлов эквивалентно."
 
 msgid ""
-"Delete the .swp file afterwards.\n"
+"\n"
+"You may want to delete the .swp file now.\n"
 "\n"
 msgstr ""
-"Затем удалите файл .swp.\n"
 "\n"
+"Вероятно, сейчас вы захотите удалить файл .swp.\n"
+"\n"
+
+msgid "Using crypt key from swap file for the text file.\n"
+msgstr "Использование ключа шифрования из своп-файла для текстового файла.\n"
 
 #. use msg() to start the scrolling properly
 msgid "Swap files found:"
@@ -3054,7 +3730,7 @@
 msgstr "E316: ml_get: невозможно найти строку %ld"
 
 msgid "E317: pointer block id wrong 3"
-msgstr "E317: неправильное значение указателя блока 3"
+msgstr "E317: Неправильное значение указателя блока 3"
 
 msgid "stack_idx should be 0"
 msgstr "значение stack_idx должно быть равно 0"
@@ -3063,7 +3739,7 @@
 msgstr "E318: Обновлено слишком много блоков?"
 
 msgid "E317: pointer block id wrong 4"
-msgstr "E317: неправильное значение указателя блока 4"
+msgstr "E317: Неправильное значение указателя блока 4"
 
 msgid "deleted block 1?"
 msgstr "удалён блок 1?"
@@ -3073,24 +3749,28 @@
 msgstr "E320: Строка %ld не обнаружена"
 
 msgid "E317: pointer block id wrong"
-msgstr "E317: неправильное значение указателя блока"
+msgstr "E317: Неправильное значение указателя блока"
 
 msgid "pe_line_count is zero"
 msgstr "значение pe_line_count равно нулю"
 
 #, c-format
 msgid "E322: line number out of range: %ld past the end"
-msgstr "E322: номер строки за пределами диапазона: %ld"
+msgstr "E322: Номер строки за пределами диапазона: %ld"
 
 #, c-format
 msgid "E323: line count wrong in block %ld"
-msgstr "E323: неправильное значение счётчика строк в блоке %ld"
+msgstr "E323: Неправильное значение счётчика строк в блоке %ld"
 
 msgid "Stack size increases"
 msgstr "Размер стека увеличен"
 
 msgid "E317: pointer block id wrong 2"
-msgstr "E317: неправильное значение указателя блока 2"
+msgstr "E317: Неправильное значение указателя блока 2"
+
+#, c-format
+msgid "E773: Symlink loop for \"%s\""
+msgstr "E773: Петля символьных ссылок для \"%s\""
 
 msgid "E325: ATTENTION"
 msgstr "E325: ВНИМАНИЕ"
@@ -3102,8 +3782,9 @@
 "\n"
 "Обнаружен своп-файл с именем \""
 
+# С маленькой буквы, чтобы соответствовало по стилю соседним сообщениям.
 msgid "While opening file \""
-msgstr "При открытии файла: \""
+msgstr "при открытии файла: \""
 
 msgid "      NEWER than swap file!\n"
 msgstr "                    Более СВЕЖИЙ, чем своп-файл!\n"
@@ -3112,24 +3793,23 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) Возможно, редактирование файла выполняется в другой программе.\n"
-"    Если это так, то будьте внимательны при внесении изменений,\n"
-"    чтобы у вас не появилось два разных варианта одного и того же файла.\n"
+"(1) Возможно, редактирование этого же файла выполняется в другой программе.\n"
+"    Если это так, то будьте внимательны при внесении изменений, чтобы\n"
+"    у вас не появилось два разных варианта одного и того же файла."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Завершите работу или продолжайте с осторожностью.\n"
-
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
+# Сообщение разделено, " \n" добавлено т.к. строка не помещается.
+msgid "  Quit, or continue with caution.\n"
 msgstr ""
-"\n"
-"(2) Предыдущий сеанс редактирования этого файла завершён аварийно.\n"
+" \n"
+"    Завершите работу или продолжайте с осторожностью.\n"
+
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Сеанс редактирования этого файла завершён аварийно.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
 msgstr "    В этом случае, используйте команду \":recover\" или \"vim -r "
@@ -3139,7 +3819,7 @@
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
 "\"\n"
-"    для восстановления изменений (см. \":help восстановление\").\n"
+"    для восстановления изменений (см. \":help recovery\").\n"
 
 msgid "    If you did this already, delete the swap file \""
 msgstr "    Если вы уже выполняли эту операцию, удалите своп-файл \""
@@ -3158,7 +3838,7 @@
 msgstr "\" уже существует!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM - ВНИМАНИЕ"
+msgstr "VIM — ВНИМАНИЕ"
 
 msgid "Swap file already exists!"
 msgstr "Своп-файл уже существует!"
@@ -3180,16 +3860,16 @@
 "&Open Read-Only\n"
 "&Edit anyway\n"
 "&Recover\n"
+"&Delete it\n"
 "&Quit\n"
-"&Abort\n"
-"&Delete it"
+"&Abort"
 msgstr ""
 "&O Открыть для чтения\n"
 "&E Редактировать\n"
 "&R Восстановить\n"
+"&D Удалить\n"
 "&Q Выход\n"
-"&A Прервать\n"
-"&D Удалить"
+"&A Прервать"
 
 msgid "E326: Too many swap files found"
 msgstr "E326: Обнаружено слишком много своп-файлов"
@@ -3200,8 +3880,13 @@
 msgid "E328: Menu only exists in another mode"
 msgstr "E328: Меню в этом режиме не существует"
 
-msgid "E329: No menu of that name"
-msgstr "E329: Нет меню с таким именем"
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: Нет меню %s"
+
+#. Only a mnemonic or accelerator is not valid.
+msgid "E792: Empty menu name"
+msgstr "E792: Пустое имя меню"
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Путь к меню не должен вести к подменю"
@@ -3239,7 +3924,7 @@
 msgstr "E336: Путь к меню должен вести к подменю"
 
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: Меню не найдено -- проверьте имена меню"
+msgstr "E337: Меню не найдено — проверьте имена меню"
 
 #, c-format
 msgid "Error detected while processing %s:"
@@ -3249,31 +3934,30 @@
 msgid "line %4ld:"
 msgstr "строка %4ld:"
 
-msgid "[string too long]"
-msgstr "[слишком длинная строка]"
+#, c-format
+msgid "E354: Invalid register name: '%s'"
+msgstr "E354: Недопустимое имя регистра: '%s'"
 
 msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
 msgstr ""
 "Перевод сообщений на русский язык: Василий Рагозин <vrr@users.sourceforge."
-"net>"
+"net>, Сергей Алёшин <alyoshin.s@gmail.com>"
 
 msgid "Interrupt: "
 msgstr "Прерывание: "
 
-msgid "Hit ENTER to continue"
-msgstr "Для продолжения нажмите ENTER"
+msgid "Press ENTER or type command to continue"
+msgstr "Нажмите ENTER или введите команду для продолжения"
 
-msgid "Hit ENTER or type command to continue"
-msgstr "Для продолжения нажмите ENTER или введите команду"
+#, c-format
+msgid "%s line %ld"
+msgstr "%s строка %ld"
 
 msgid "-- More --"
 msgstr "-- Продолжение следует --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: строка, SPACE/b: страница, d/u: полстраницы, q: выход)"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: строка, SPACE: страница, d: полстраницы, q: выход)"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPACE/d/j: экран/страница/строка вниз, b/u/k: вверх, q: выход "
 
 msgid "Question"
 msgstr "Вопрос"
@@ -3282,8 +3966,8 @@
 "&Yes\n"
 "&No"
 msgstr ""
-"&Да\n"
-"&Нет"
+"&Y Да\n"
+"&N Нет"
 
 msgid ""
 "&Yes\n"
@@ -3292,11 +3976,14 @@
 "&Discard All\n"
 "&Cancel"
 msgstr ""
-"&Да\n"
-"&Нет\n"
-"Сохранить &все\n"
-"&Потерять все\n"
-"О&тмена"
+"&Y Да\n"
+"&N Нет\n"
+"&A Сохранить все\n"
+"&D Потерять все\n"
+"&C Отмена"
+
+msgid "Select Directory dialog"
+msgstr "Выбор каталога"
 
 msgid "Save File dialog"
 msgstr "Сохранение файла"
@@ -3309,14 +3996,29 @@
 msgstr ""
 "E338: Извините, но в консольном режиме нет проводника по файловой системе"
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: Недостаточно параметров для printf()"
+
+msgid "E807: Expected Float argument for printf()"
+msgstr "E807: Ожидался параметр типа с плавающей точкой для printf()"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: Слишком много параметров для printf()"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: Предупреждение: Изменение файла с правами только для чтения"
 
+msgid "Type number and <Enter> or click with mouse (empty cancels): "
+msgstr "Введите номер и <Enter> или щёлкните мышью (пусто для отмены): "
+
+msgid "Type number and <Enter> (empty cancels): "
+msgstr "Введите номер и <Enter> (пусто для отмены): "
+
 msgid "1 more line"
 msgstr "Добавлена одна строка"
 
 msgid "1 line less"
-msgstr "Удалена одна строка"
+msgstr "Убрана одна строка"
 
 #, c-format
 msgid "%ld more lines"
@@ -3324,19 +4026,21 @@
 
 #, c-format
 msgid "%ld fewer lines"
-msgstr "Удалено строк: %ld"
+msgstr "Убрано строк: %ld"
 
 msgid " (Interrupted)"
 msgstr " (Прервано)"
 
+msgid "Beep!"
+msgstr "Би-би!"
+
 msgid "Vim: preserving files...\n"
-msgstr "Vim: сохраняются файлы...\n"
+msgstr "Vim: сохранение файлов...\n"
 
 #. close all memfiles, without deleting
 msgid "Vim: Finished.\n"
 msgstr "Vim: Готово.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ОШИБКА: "
 
@@ -3381,7 +4085,7 @@
 msgstr "E547: Недопустимая форма курсора"
 
 msgid "E548: digit expected"
-msgstr "E548: требуется ввести цифру"
+msgstr "E548: Требуется ввести цифру"
 
 msgid "E549: Illegal percentage"
 msgstr "E549: Недопустимое значение процентов"
@@ -3390,11 +4094,14 @@
 msgstr "Введите пароль для шифрования: "
 
 msgid "Enter same key again: "
-msgstr "        Повторите ввод пароля:"
+msgstr "Повторите ввод пароля: "
 
 msgid "Keys don't match!"
 msgstr "Введённые пароли не совпадают!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: слишком большой путь для автодополнения"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -3419,18 +4126,8 @@
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: В известных каталогах больше нет файлов \"%s\""
 
-msgid "E550: Missing colon"
-msgstr "E550: Пропущено двоеточие"
-
-msgid "E551: Illegal component"
-msgstr "E551: Недопустимый компонент"
-
-msgid "E552: digit expected"
-msgstr "E552: Требуется указать цифру"
-
-#. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
-msgstr "Невозможно соединиться с Netbeans #2"
+msgstr "Невозможно соединиться с NetBeans #2"
 
 msgid "Cannot connect to Netbeans"
 msgstr "Невозможно соединиться с NetBeans"
@@ -3447,21 +4144,37 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Потеряно соединение с NetBeans для буфера %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: NetBeans не поддерживается с этим графическим интерфейсом"
+
+msgid "E511: netbeans already connected"
+msgstr "E511: уже соединён с NetBeans"
+
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s открыт только для чтения (добавьте !, чтобы обойти проверку)"
+
+msgid "E349: No identifier under cursor"
+msgstr "E349: Нет имени в позиции курсора"
+
+msgid "E774: 'operatorfunc' is empty"
+msgstr "E774: Значением опции 'operatorfunc' является пустая строка"
+
+msgid "E775: Eval feature not available"
+msgstr "E775: eval не доступна"
+
 msgid "Warning: terminal cannot highlight"
 msgstr "Предупреждение: терминал не может выполнять подсветку"
 
 msgid "E348: No string under cursor"
 msgstr "E348: Нет строки в позиции курсора"
 
-msgid "E349: No identifier under cursor"
-msgstr "E349: Нет имени в позиции курсора"
-
 msgid "E352: Cannot erase folds with current 'foldmethod'"
 msgstr ""
 "E352: Невозможно стереть складки с текущим значением опции 'foldmethod'"
 
 msgid "E664: changelist is empty"
-msgstr "E664: список изменений пустой"
+msgstr "E664: Список изменений пустой"
 
 msgid "E662: At start of changelist"
 msgstr "E662: В начале списка изменений"
@@ -3499,6 +4212,9 @@
 msgid "%ld lines indented "
 msgstr "Изменены отступы в строках (%ld) "
 
+msgid "E748: No previously used register"
+msgstr "E748: Нет предыдущего использованного регистра"
+
 #. must display the prompt
 msgid "cannot yank; delete anyway"
 msgstr "скопировать не удалось, удаление выполнено"
@@ -3514,10 +4230,17 @@
 msgid "freeing %ld lines"
 msgstr "очищено строк: %ld"
 
+msgid "block of 1 line yanked"
+msgstr "скопирован блок из одной строки"
+
 msgid "1 line yanked"
 msgstr "скопирована одна строка"
 
 #, c-format
+msgid "block of %ld lines yanked"
+msgstr "скопирован блок из строк: %ld"
+
+#, c-format
 msgid "%ld lines yanked"
 msgstr "скопировано строк: %ld"
 
@@ -3536,7 +4259,6 @@
 msgid "Illegal register name"
 msgstr "Недопустимое имя регистра"
 
-#, c-format
 msgid ""
 "\n"
 "# Registers:\n"
@@ -3549,10 +4271,6 @@
 msgstr "E574: Неизвестный тип регистра %d"
 
 #, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: Недопустимое имя регистра: '%s'"
-
-#, c-format
 msgid "%ld Cols; "
 msgstr "Колонок: %ld; "
 
@@ -3561,8 +4279,24 @@
 msgstr "Выделено %s%ld из %ld строк; %ld из %ld слов; %ld из %ld байт"
 
 #, c-format
+msgid ""
+"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+"Bytes"
+msgstr ""
+"Выделено %s%ld из %ld стр.; %ld из %ld слов; %ld из %ld симв.; %ld из %ld "
+"байт"
+
+#, c-format
 msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
-msgstr "Кол. %s из %s;  стр. %ld из %ld; слово %ld из %ld; байт %ld из %ld"
+msgstr "Кол. %s из %s; стр. %ld из %ld; сл. %ld из %ld; байт %ld из %ld"
+
+#, c-format
+msgid ""
+"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+"%ld"
+msgstr ""
+"Кол. %s из %s; стр. %ld из %ld; сл. %ld из %ld; симв. %ld из %ld; байт %ld "
+"из %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -3583,12 +4317,8 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Не допускается в режимной строке"
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tВ последний раз опция изменена в "
+msgid "E846: Key code not set"
+msgstr "E846: Код клавиши не установлен"
 
 msgid "E521: Number required after ="
 msgstr "E521: После = требуется указать число"
@@ -3610,7 +4340,13 @@
 msgstr "E531: Для запуска графического интерфейса используйте \":gui\""
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: значения опций 'backupext' и 'patchmode' равны"
+msgstr "E589: Значения опций 'backupext' и 'patchmode' равны"
+
+msgid "E834: Conflicts with value of 'listchars'"
+msgstr "E834: Конфликтует со значением 'listchars'"
+
+msgid "E835: Conflicts with value of 'fillchars'"
+msgstr "E835: Конфликтует со значением 'fillchars'"
 
 msgid "E617: Cannot be changed in the GTK+ 2 GUI"
 msgstr "E617: Не может быть изменено в графическом интерфейсе GTK+ 2"
@@ -3632,19 +4368,19 @@
 msgstr "E528: Необходимо указать значение для '"
 
 msgid "E595: contains unprintable or wide character"
-msgstr "E595: содержит непечатный символ или символ двойной ширины"
+msgstr "E595: Содержит непечатный символ или символ двойной ширины"
 
 msgid "E596: Invalid font(s)"
 msgstr "E596: Неправильные шрифты"
 
 msgid "E597: can't select fontset"
-msgstr "E597: невозможно выбрать шрифтовой набор"
+msgstr "E597: Невозможно выбрать шрифтовой набор"
 
 msgid "E598: Invalid fontset"
 msgstr "E598: Неправильный шрифтовой набор"
 
 msgid "E533: can't select wide font"
-msgstr "E533: невозможно выбрать шрифт с символами двойной ширины"
+msgstr "E533: Невозможно выбрать шрифт с символами двойной ширины"
 
 msgid "E534: Invalid wide font"
 msgstr "E534: Неправильный шрифт с символами двойной ширины"
@@ -3654,7 +4390,7 @@
 msgstr "E535: Неправильный символ после <%c>"
 
 msgid "E536: comma required"
-msgstr "E536: требуется запятая"
+msgstr "E536: Требуется запятая"
 
 #, c-format
 msgid "E537: 'commentstring' must be empty or contain %s"
@@ -3669,10 +4405,10 @@
 msgstr "E540: Незакрытая последовательность выражения"
 
 msgid "E541: too many items"
-msgstr "E541: слишком много элементов"
+msgstr "E541: Слишком много элементов"
 
 msgid "E542: unbalanced groups"
-msgstr "E542: несбалансированные группы"
+msgstr "E542: Несбалансированные группы"
 
 msgid "E590: A preview window already exists"
 msgstr "E590: Окно предпросмотра уже есть"
@@ -3693,6 +4429,13 @@
 msgid "E355: Unknown option: %s"
 msgstr "E355: Неизвестная опция: %s"
 
+#. There's another character after zeros or the string
+#. * is empty.  In both cases, we are trying to set a
+#. * num option using a string.
+#, c-format
+msgid "E521: Number required: &%s = '%s'"
+msgstr "E521: Требуется указать число: &%s = '%s'"
+
 msgid ""
 "\n"
 "--- Terminal codes ---"
@@ -3763,7 +4506,7 @@
 
 #. if Vim opened a window: Executing a shell may cause crashes
 msgid "E360: Cannot execute shell with -f option"
-msgstr "E360: Невозможно выполнить оболочку с аргументом -f"
+msgstr "E360: Невозможно выполнить оболочку с параметром -f"
 
 msgid "Cannot execute "
 msgstr "Невозможно выполнить "
@@ -3780,8 +4523,8 @@
 msgid "I/O ERROR"
 msgstr "ОШИБКА ВВОДА/ВЫВОДА"
 
-msgid "...(truncated)"
-msgstr "...(обрезано)"
+msgid "Message"
+msgstr "Сообщение"
 
 msgid "'columns' is not 80, cannot execute external commands"
 msgstr "Значение опции 'columns' не равно 80, внешние программы не выполняются"
@@ -3801,9 +4544,6 @@
 msgid "E238: Print error: %s"
 msgstr "E238: Ошибка печати: %s"
 
-msgid "Unknown"
-msgstr "Неизвестно"
-
 #, c-format
 msgid "Printing '%s'"
 msgstr "Печать '%s'"
@@ -3816,9 +4556,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Недопустимый символ '%c' в имени шрифта \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Недопустимое значение опции 'osfiletype' -- используется Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Двойной сигнал, завершение работы\n"
 
@@ -3849,6 +4586,20 @@
 
 msgid ""
 "\n"
+"Could not get security context for "
+msgstr ""
+"\n"
+"Невозможно получить контекст безопасности для "
+
+msgid ""
+"\n"
+"Could not set security context for "
+msgstr ""
+"\n"
+"Невозможно установить контекст безопасности для "
+
+msgid ""
+"\n"
 "Cannot execute shell "
 msgstr ""
 "\n"
@@ -3892,6 +4643,10 @@
 msgid "XSMP lost ICE connection"
 msgstr "XSMP утеряно соединение ICE"
 
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = \"%s\""
+
 msgid "Opening the X display failed"
 msgstr "Неудачное открытие дисплея X"
 
@@ -3911,15 +4666,12 @@
 msgid "At line"
 msgstr "В строке"
 
-msgid "Could not allocate memory for command line."
-msgstr "Невозможно выделить память для командной строки."
+msgid "Could not load vim32.dll!"
+msgstr "Невозможно загрузить vim32.dll!"
 
 msgid "VIM Error"
 msgstr "Ошибка VIM"
 
-msgid "Could not load vim32.dll!"
-msgstr "Невозможно загрузить vim32.dll!"
-
 msgid "Could not fix up function pointers to the DLL!"
 msgstr "Невозможно исправить указатели функций для DLL!"
 
@@ -3982,7 +4734,7 @@
 msgstr "E378: В значении опции 'errorformat' отсутствует шаблон"
 
 msgid "E379: Missing or empty directory name"
-msgstr "E379: имя каталога не задано или равно пустой строке"
+msgstr "E379: Имя каталога не задано или равно пустой строке"
 
 msgid "E553: No more items"
 msgstr "E553: Больше нет элементов"
@@ -4008,9 +4760,25 @@
 msgstr ""
 "E382: Запись невозможна, значение опции 'buftype' не является пустой строкой"
 
+msgid "Error file"
+msgstr "Файл ошибок"
+
+msgid "E683: File name missing or invalid pattern"
+msgstr "E683: Нет имени файла или неправильный шаблон"
+
+#, c-format
+msgid "Cannot open file \"%s\""
+msgstr "Невозможно открыть файл \"%s\""
+
+msgid "E681: Buffer is not loaded"
+msgstr "E681: Буфер не выгружен"
+
+msgid "E777: String or List expected"
+msgstr "E777: Требуется строка или список"
+
 #, c-format
 msgid "E369: invalid item in %s%%[]"
-msgstr "E369: недопустимый элемент в %s%%[]"
+msgstr "E369: Недопустимый элемент в %s%%[]"
 
 msgid "E339: Pattern too long"
 msgstr "E339: Слишком длинный шаблон"
@@ -4038,20 +4806,8 @@
 msgstr "E55: Нет пары для %s)"
 
 #, c-format
-msgid "E56: %s* operand could be empty"
-msgstr "E56: возможно пустой операнд %s*"
-
-#, c-format
-msgid "E57: %s+ operand could be empty"
-msgstr "E57: возможно пустой операнд %s+"
-
-#, c-format
 msgid "E59: invalid character after %s@"
-msgstr "E59: недопустимый символ после %s@"
-
-#, c-format
-msgid "E58: %s{ operand could be empty"
-msgstr "E58: возможно пустой операнд %s{"
+msgstr "E59: Недопустимый символ после %s@"
 
 #, c-format
 msgid "E60: Too many complex %s{...}s"
@@ -4066,7 +4822,7 @@
 msgstr "E62: Вложенные %s%c"
 
 msgid "E63: invalid use of \\_"
-msgstr "E63: недопустимое использование \\_"
+msgstr "E63: Недопустимое использование \\_"
 
 #, c-format
 msgid "E64: %s%c follows nothing"
@@ -4093,28 +4849,24 @@
 msgstr "E70: Пустое %s%%[]"
 
 #, c-format
+msgid "E678: Invalid character after %s%%[dxouU]"
+msgstr "E678: Недопустимый символ после %s%%[dxouU]"
+
+#, c-format
 msgid "E71: Invalid character after %s%%"
 msgstr "E71: Недопустимый символ после %s%%"
 
 #, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: Пропущена ] после %s["
+
+#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Синтаксическая ошибка в %s{...}"
 
-msgid "E361: Crash intercepted; regexp too complex?"
-msgstr ""
-"E361: Предотвращено аварийное завершение: слишком сложное регулярное "
-"выражение?"
-
-msgid "E363: pattern caused out-of-stack error"
-msgstr "E363: применение шаблона привело к ошибке выхода за пределы стека"
-
 msgid "External submatches:\n"
 msgstr "Внешние подсоответствия:\n"
 
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld строк в складке"
-
 msgid " VREPLACE"
 msgstr " ВИРТУАЛЬНАЯ ЗАМЕНА"
 
@@ -4133,104 +4885,491 @@
 msgid " (replace)"
 msgstr " (замена)"
 
-msgid " (vreplace)"
-msgstr " (виртуальная замена)"
+msgid " (vreplace)"
+msgstr " (виртуальная замена)"
+
+msgid " Hebrew"
+msgstr " Иврит"
+
+msgid " Arabic"
+msgstr " Арабский"
+
+msgid " (lang)"
+msgstr " (язык)"
+
+msgid " (paste)"
+msgstr " (вклейка)"
+
+msgid " VISUAL"
+msgstr " ВИЗУАЛЬНЫЙ РЕЖИМ"
+
+msgid " VISUAL LINE"
+msgstr " ВИЗУАЛЬНАЯ СТРОКА"
+
+msgid " VISUAL BLOCK"
+msgstr " ВИЗУАЛЬНЫЙ БЛОК"
+
+msgid " SELECT"
+msgstr " ВЫДЕЛЕНИЕ"
+
+msgid " SELECT LINE"
+msgstr " ВЫДЕЛЕНИЕ СТРОКИ"
+
+msgid " SELECT BLOCK"
+msgstr " ВЫДЕЛЕНИЕ БЛОКА"
+
+msgid "recording"
+msgstr "запись"
+
+#, c-format
+msgid "E383: Invalid search string: %s"
+msgstr "E383: Неправильная строка поиска: %s"
+
+#, c-format
+msgid "E384: search hit TOP without match for: %s"
+msgstr "E384: Поиск закончен в НАЧАЛЕ документа; %s не найдено"
+
+#, c-format
+msgid "E385: search hit BOTTOM without match for: %s"
+msgstr "E385: Поиск закончен в КОНЦЕ документа; %s не найдено"
+
+msgid "E386: Expected '?' or '/'  after ';'"
+msgstr "E386: После ';' ожидается ввод '?' или '/'"
+
+msgid " (includes previously listed match)"
+msgstr " (включает раннее показанные соответствия)"
+
+#. cursor at status line
+msgid "--- Included files "
+msgstr "--- Включённые файлы "
+
+msgid "not found "
+msgstr "не найдено "
+
+msgid "in path ---\n"
+msgstr "по пути ---\n"
+
+msgid "  (Already listed)"
+msgstr " (Уже показано)"
+
+msgid "  NOT FOUND"
+msgstr " НЕ НАЙДЕНО"
+
+#, c-format
+msgid "Scanning included file: %s"
+msgstr "Просмотр включённых файлов: %s"
+
+#, c-format
+msgid "Searching included file %s"
+msgstr "Поиск включённого файла %s"
+
+msgid "E387: Match is on current line"
+msgstr "E387: Соответствие в текущей строке"
+
+msgid "All included files were found"
+msgstr "Найдены все включённые файлы"
+
+msgid "No included files"
+msgstr "Включённых файлов нет"
+
+msgid "E388: Couldn't find definition"
+msgstr "E388: Определение не найдено"
+
+msgid "E389: Couldn't find pattern"
+msgstr "E389: Шаблон не найден"
+
+msgid "Substitute "
+msgstr "Замена "
+
+#, c-format
+msgid ""
+"\n"
+"# Last %sSearch Pattern:\n"
+"~"
+msgstr ""
+"\n"
+"# Последний %sШаблон поиска:\n"
+"~"
+
+msgid "E759: Format error in spell file"
+msgstr "E759: Ошибка формата в файле правописания"
+
+msgid "E758: Truncated spell file"
+msgstr "E758: Файл правописания обрезан"
+
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "Лишний текст на хвосте в %s стр. %d: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "Имя аффикса слишком длинное в %s, строка %d: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr "E761: Ошибка формата в файле аффиксов FOL, LOW или UPP"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: Символы в FOL, LOW или UPP за пределами диапазона"
+
+msgid "Compressing word tree..."
+msgstr "Сжатие дерева слов..."
+
+msgid "E756: Spell checking is not enabled"
+msgstr "E756: Проверка правописания выключена"
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ""
+"Предупреждение: Невозможно найти список слов \"%s_%s.spl\" или \"%s_ascii.spl"
+"\""
+
+#, c-format
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr ""
+"Предупреждение: Невозможно найти список слов \"%s.%s.spl\" или \"%s.ascii.spl"
+"\""
+
+#, c-format
+msgid "Reading spell file \"%s\""
+msgstr "Чтение файла правописания \"%s\""
+
+msgid "E757: This does not look like a spell file"
+msgstr "E757: Это не похоже на файл правописания"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: Старый файл правописания, требуется его обновление"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: Файл правописания предназначен для более новой версии Vim"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: Неподдерживаемый раздел в файле правописания"
+
+#, c-format
+msgid "Warning: region %s not supported"
+msgstr "Предупреждение: регион %s не поддерживается"
+
+#, c-format
+msgid "Reading affix file %s ..."
+msgstr "Чтение файла аффиксов %s ..."
+
+#, c-format
+msgid "Conversion failure for word in %s line %d: %s"
+msgstr "Не удалось преобразовать слово в %s, строка %d: %s"
+
+#, c-format
+msgid "Conversion in %s not supported: from %s to %s"
+msgstr "Преобразование в %s не поддерживается: из %s в %s"
+
+#, c-format
+msgid "Conversion in %s not supported"
+msgstr "Преобразование в %s не поддерживается"
+
+#, c-format
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "Неправильное значение FLAG в %s, строка %d: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "FLAG после использования флагов в %s, строка %d: %s"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Определение COMPOUNDFORBIDFLAG после элемента PFX может дать неправильные "
+"результаты в %s, строка %d"
+
+#, c-format
+msgid ""
+"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+"%d"
+msgstr ""
+"Определение COMPOUNDPERMITFLAG после элемента PFX может дать неправильные "
+"результаты в %s, строка %d"
+
+#, c-format
+msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+msgstr "Неправильное значение COMPOUNDRULES в %s, строка %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+msgstr "Неправильное значение COMPOUNDWORDMAX в %s, строка %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "Неправильное значение COMPOUNDMIN в %s, строка %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "Неправильное значение COMPOUNDSYLMAX в %s, строка %d: %s"
+
+#, c-format
+msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+msgstr "Неправильное значение CHECKCOMPOUNDPATTERN в %s, строка %d: %s"
+
+#, c-format
+msgid "Different combining flag in continued affix block in %s line %d: %s"
+msgstr ""
+"Другой объединяющий флаг в продолжающем блоке аффикса в %s, строка %d: %s"
+
+#, c-format
+msgid "Duplicate affix in %s line %d: %s"
+msgstr "Повторяющийся аффикс в %s, строка %d: %s"
+
+#, c-format
+msgid ""
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"line %d: %s"
+msgstr ""
+"Аффикс также используется для BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
+"NOSUGGEST в %s, строка %d: %s"
+
+#, c-format
+msgid "Expected Y or N in %s line %d: %s"
+msgstr "Ожидалось Y или N в %s, строка %d: %s"
+
+#, c-format
+msgid "Broken condition in %s line %d: %s"
+msgstr "Нарушенное условие в %s, строка %d: %s"
+
+#, c-format
+msgid "Expected REP(SAL) count in %s line %d"
+msgstr "Ожидался счётчик REP(SAL) в %s, строка %d"
+
+#, c-format
+msgid "Expected MAP count in %s line %d"
+msgstr "Ожидался счётчик MAP в %s, строка %d"
+
+#, c-format
+msgid "Duplicate character in MAP in %s line %d"
+msgstr "Повторяющийся символ в MAP в %s, строка %d"
+
+#, c-format
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "Нераспознанный или повторяющийся элемент в %s, строка %d: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "Пропущена строка FOL/LOW/UPP в %s"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "COMPOUNDSYLMAX используется без SYLLABLE"
+
+msgid "Too many postponed prefixes"
+msgstr "Слишком много отложенных префиксов"
+
+msgid "Too many compound flags"
+msgstr "Слишком много составных флагов"
+
+msgid "Too many postponed prefixes and/or compound flags"
+msgstr "Слишком много отложенных префиксов и/или составных флагов"
+
+#, c-format
+msgid "Missing SOFO%s line in %s"
+msgstr "Пропущена строка SOFO%s в %s"
+
+#, c-format
+msgid "Both SAL and SOFO lines in %s"
+msgstr "Обе строки SAL и SOFO в %s"
+
+#, c-format
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "Флаг не является числом в %s, строка %d: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "Недопустимый флаг в %s на строке %d: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "%s имеет другое значение, чем в файле .aff"
+
+#, c-format
+msgid "Reading dictionary file %s ..."
+msgstr "Чтение файла словаря %s ..."
+
+#, c-format
+msgid "E760: No word count in %s"
+msgstr "E760: Количество слов не указано в %s"
+
+#, c-format
+msgid "line %6d, word %6d - %s"
+msgstr "строка %6d, слово %6d — %s"
+
+#, c-format
+msgid "Duplicate word in %s line %d: %s"
+msgstr "Повтор слова в %s на строке %d: %s "
+
+#, c-format
+msgid "First duplicate word in %s line %d: %s"
+msgstr "Первый повтор слова в %s на строке %d: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d повторяющихся слов в %s"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "Пропущено %d слов с не ASCII символами в %s"
+
+#, c-format
+msgid "Reading word file %s ..."
+msgstr "Чтение файла слов %s ..."
+
+#, c-format
+msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+msgstr "Проигнорирована повторяющаяся строка /encoding= в %s, строка %d: %s"
+
+#, c-format
+msgid "/encoding= line after word ignored in %s line %d: %s"
+msgstr "Проигнорирована строка /encoding= после слова в %s, строка %d: %s"
+
+#, c-format
+msgid "Duplicate /regions= line ignored in %s line %d: %s"
+msgstr "Пропускается повтор строки /regions= в %s, строка %d: %s"
+
+#, c-format
+msgid "Too many regions in %s line %d: %s"
+msgstr "Слишком много регионов в %s, строка %d: %s"
+
+#, c-format
+msgid "/ line ignored in %s line %d: %s"
+msgstr "/ строка пропускается в %s, строка %d: %s"
+
+#, c-format
+msgid "Invalid region nr in %s line %d: %s"
+msgstr "Недопустимый номер региона в %s, строка %d: %s"
+
+#, c-format
+msgid "Unrecognized flags in %s line %d: %s"
+msgstr "Нераспознанные флаги в %s, строка %d: %s"
+
+#, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "Пропущено %d слов с не ASCII символами"
+
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Недостаточно оперативной памяти, список слов будет не полон"
 
-msgid " Hebrew"
-msgstr " Иврит"
+#, c-format
+msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+msgstr "Сжато %d из %d узлов; осталось %d (%d%%)"
 
-msgid " Arabic"
-msgstr " Арабский"
+msgid "Reading back spell file..."
+msgstr "Чтение записанного файла правописания..."
 
-msgid " (lang)"
-msgstr " (язык)"
+#.
+#. * Go through the trie of good words, soundfold each word and add it to
+#. * the soundfold trie.
+#.
+msgid "Performing soundfolding..."
+msgstr "Выполнение звуковой свёртки..."
 
-msgid " (paste)"
-msgstr " (вклейка)"
+#, c-format
+msgid "Number of words after soundfolding: %ld"
+msgstr "Количество слов после звуковой свёртки: %ld"
 
-msgid " VISUAL"
-msgstr " ВИЗУАЛЬНЫЙ РЕЖИМ"
+#, c-format
+msgid "Total number of words: %d"
+msgstr "Общее количество слов: %d"
 
-msgid " VISUAL LINE"
-msgstr " ВИЗУАЛЬНАЯ СТРОКА"
+#, c-format
+msgid "Writing suggestion file %s ..."
+msgstr "Запись файла предложения исправлений правописания %s"
 
-msgid " VISUAL BLOCK"
-msgstr " ВИЗУАЛЬНЫЙ БЛОК"
+#, c-format
+msgid "Estimated runtime memory use: %d bytes"
+msgstr "Оценка использования памяти при выполнении: %d байт"
 
-msgid " SELECT"
-msgstr " ВЫДЕЛЕНИЕ"
+msgid "E751: Output file name must not have region name"
+msgstr "E751: Имя выходного файла не должно содержать названия региона"
 
-msgid " SELECT LINE"
-msgstr " ВЫДЕЛЕНИЕ СТРОКИ"
+msgid "E754: Only up to 8 regions supported"
+msgstr "E754: Поддерживается не более 8-ми регионов"
 
-msgid " SELECT BLOCK"
-msgstr " ВЫДЕЛЕНИЕ БЛОКА"
+#, c-format
+msgid "E755: Invalid region in %s"
+msgstr "E755: Недопустимый регион в %s"
 
-msgid "recording"
-msgstr "запись"
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "Предупреждение: оба составные и указано NOBREAK"
 
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "поиск будет продолжен с КОНЦА документа"
+#, c-format
+msgid "Writing spell file %s ..."
+msgstr "Запись файла правописания %s ..."
 
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "поиск будет продолжен с НАЧАЛА документа"
+msgid "Done!"
+msgstr "Завершено!"
 
 #, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: Неправильная строка поиска: %s"
+msgid "E765: 'spellfile' does not have %ld entries"
+msgstr "E765: 'spellfile' не содержит %ld элементов"
 
 #, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: поиск закончен в НАЧАЛЕ документа; %s не найдено"
+msgid "Word removed from %s"
+msgstr "Слово удалено из %s"
 
 #, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: поиск закончен в КОНЦЕ документа; %s не найдено"
+msgid "Word added to %s"
+msgstr "Слово добавлено в %s"
 
-msgid "E386: Expected '?' or '/'  after ';'"
-msgstr "E386: После ';' ожидается ввод '?' или '/'"
+msgid "E763: Word characters differ between spell files"
+msgstr "E763: Символы слов отличаются в файлах правописания"
 
-msgid " (includes previously listed match)"
-msgstr " (включает раннее показанные соответствия)"
+msgid "Sorry, no suggestions"
+msgstr "Извините, нет предположений"
 
-#. cursor at status line
-msgid "--- Included files "
-msgstr "--- Включённые файлы "
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "Извините, только %ld предположений"
 
-msgid "not found "
-msgstr "не найдено "
+#. for when 'cmdheight' > 1
+#. avoid more prompt
+#, c-format
+msgid "Change \"%.*s\" to:"
+msgstr "Заменить \"%.*s\" на:"
 
-msgid "in path ---\n"
-msgstr "по пути ---\n"
+#, c-format
+msgid " < \"%.*s\""
+msgstr " < \"%.*s\""
 
-msgid "  (Already listed)"
-msgstr " (Уже показано)"
+msgid "E752: No previous spell replacement"
+msgstr "E752: Нет предыдущей замены правописания"
 
-msgid "  NOT FOUND"
-msgstr " НЕ НАЙДЕНО"
+#, c-format
+msgid "E753: Not found: %s"
+msgstr "E753: Не найдено: %s"
 
 #, c-format
-msgid "Scanning included file: %s"
-msgstr "Просмотр включённых файлов: %s"
+msgid "E778: This does not look like a .sug file: %s"
+msgstr "E778: Это не похоже на файл .sug: %s"
 
-msgid "E387: Match is on current line"
-msgstr "E387: Соответствие в текущей строке"
+#, c-format
+msgid "E779: Old .sug file, needs to be updated: %s"
+msgstr "E779: Старый файл .sug, требует обновления: %s"
 
-msgid "All included files were found"
-msgstr "Найдены все включённые файлы"
+#, c-format
+msgid "E780: .sug file is for newer version of Vim: %s"
+msgstr "E780: Файл .sug для более новой версии Vim: %s"
 
-msgid "No included files"
-msgstr "Включённых файлов нет"
+#, c-format
+msgid "E781: .sug file doesn't match .spl file: %s"
+msgstr "E781: Файл .sug не соответствует файлу .spl: %s"
 
-msgid "E388: Couldn't find definition"
-msgstr "E388: Определение не найдено"
+#, c-format
+msgid "E782: error while reading .sug file: %s"
+msgstr "E782: Ошибка при чтении файла .sug: %s"
 
-msgid "E389: Couldn't find pattern"
-msgstr "E389: Шаблон не найден"
+#. This should have been checked when generating the .spl
+#. * file.
+msgid "E783: duplicate char in MAP entry"
+msgstr "E783: Повторяющийся символ в элементе MAP"
 
 #, c-format
 msgid "E390: Illegal argument: %s"
-msgstr "E390: Недопустимый аргумент: %s"
+msgstr "E390: Недопустимый параметр: %s"
 
 #, c-format
 msgid "E391: No such syntax cluster: %s"
@@ -4288,29 +5427,39 @@
 msgid " line breaks"
 msgstr " переносов строк"
 
+msgid "E395: contains argument not accepted here"
+msgstr "E395: Здесь нельзя использовать параметр contains"
+
+msgid "E844: invalid cchar value"
+msgstr "E844: Недопустимое значение cchar"
+
 msgid "E393: group[t]here not accepted here"
-msgstr "E393: здесь нельзя использовать group[t]here"
+msgstr "E393: Здесь нельзя использовать group[t]here"
 
 #, c-format
 msgid "E394: Didn't find region item for %s"
 msgstr "E394: Элемент области для %s не найден"
 
-msgid "E395: contains argument not accepted here"
-msgstr "E395: здесь нельзя использовать аргумент contains"
-
-msgid "E396: containedin argument not accepted here"
-msgstr "E396: здесь нельзя использовать аргумент containedin"
-
 msgid "E397: Filename required"
 msgstr "E397: Требуется указать имя файла"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Слишком много синтаксических включений"
+
+#, c-format
+msgid "E789: Missing ']': %s"
+msgstr "E789: Пропущено ']': %s"
+
 #, c-format
 msgid "E398: Missing '=': %s"
 msgstr "E398: Пропущено '=': %s"
 
 #, c-format
 msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Не хватает аргументов: синтаксический регион %s"
+msgstr "E399: Не хватает параметров: синтаксический регион %s"
+
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Слишком много синтаксических кластеров"
 
 msgid "E400: No cluster specified"
 msgstr "E400: Кластер не указан"
@@ -4325,11 +5474,11 @@
 
 msgid "E403: syntax sync: line continuations pattern specified twice"
 msgstr ""
-"E403: синхронизация синтаксиса: шаблон продолжений строки указан дважды"
+"E403: Синхронизация синтаксиса: шаблон продолжений строки указан дважды"
 
 #, c-format
 msgid "E404: Illegal arguments: %s"
-msgstr "E404: Недопустимые аргументы: %s"
+msgstr "E404: Недопустимые параметры: %s"
 
 #, c-format
 msgid "E405: Missing equal sign: %s"
@@ -4337,7 +5486,7 @@
 
 #, c-format
 msgid "E406: Empty argument: %s"
-msgstr "E406: Пустой аргумент: %s"
+msgstr "E406: Пустой параметр: %s"
 
 #, c-format
 msgid "E407: %s not allowed here"
@@ -4355,32 +5504,35 @@
 msgid "E410: Invalid :syntax subcommand: %s"
 msgstr "E410: Неправильная подкоманда :syntax: %s"
 
+msgid "E679: recursive loop loading syncolor.vim"
+msgstr "E679: Рекурсивная петля при загрузке syncolor.vim"
+
 #, c-format
 msgid "E411: highlight group not found: %s"
-msgstr "E411: группа подсветки синтаксиса %s не найдена"
+msgstr "E411: Группа подсветки синтаксиса %s не найдена"
 
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Не хватает аргументов: \":highlight link %s\""
+msgstr "E412: Не хватает параметров: \":highlight link %s\""
 
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Слишком много аргументов: \":highlight link %s\""
+msgstr "E413: Слишком много параметров: \":highlight link %s\""
 
 msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: у группы есть собственные настройки, ссылка игнорируется"
+msgstr "E414: У группы есть настройки, пропускается highlight link"
 
 #, c-format
 msgid "E415: unexpected equal sign: %s"
-msgstr "E415: неожиданный знак равенства: %s"
+msgstr "E415: Неожиданный знак равенства: %s"
 
 #, c-format
 msgid "E416: missing equal sign: %s"
-msgstr "E416: пропущен знак равенства: %s"
+msgstr "E416: Пропущен знак равенства: %s"
 
 #, c-format
 msgid "E417: missing argument: %s"
-msgstr "E417: пропущен аргумент: %s"
+msgstr "E417: Пропущен параметр: %s"
 
 #, c-format
 msgid "E418: Illegal value: %s"
@@ -4398,11 +5550,11 @@
 
 #, c-format
 msgid "E422: terminal code too long: %s"
-msgstr "E422: слишком длинный код терминала: %s"
+msgstr "E422: Слишком длинный код терминала: %s"
 
 #, c-format
 msgid "E423: Illegal argument: %s"
-msgstr "E423: Недопустимый аргумент: %s"
+msgstr "E423: Недопустимый параметр: %s"
 
 msgid "E424: Too many different highlighting attributes in use"
 msgstr "E424: Используется слишком много разных атрибутов подсветки синтаксиса"
@@ -4410,16 +5562,17 @@
 msgid "E669: Unprintable character in group name"
 msgstr "E669: Непечатный символ в имени группы"
 
-#. This is an error, but since there previously was no check only
-#. * give a warning.
 msgid "W18: Invalid character in group name"
 msgstr "W18: Недопустимый символ в имени группы"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Слишком много групп подсветки и синтаксиса"
+
 msgid "E555: at bottom of tag stack"
-msgstr "E555: внизу стека меток"
+msgstr "E555: Внизу стека меток"
 
 msgid "E556: at top of tag stack"
-msgstr "E556: наверху стека меток"
+msgstr "E556: Наверху стека меток"
 
 msgid "E425: Cannot go before first matching tag"
 msgstr "E425: Невозможно перейти в позицию до первой совпадающей метки"
@@ -4434,13 +5587,6 @@
 msgid "file\n"
 msgstr "файл\n"
 
-#.
-#. * Ask to select a tag from the list.
-#. * When using ":silent" assume that <CR> was entered.
-#.
-msgid "Enter nr of choice (<CR> to abort): "
-msgstr "Выберите нужный номер (<CR> для отказа):"
-
 msgid "E427: There is only one matching tag"
 msgstr "E427: Есть только одна совпадающая метка"
 
@@ -4482,6 +5628,9 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Путь к файлу меток %s обрезан\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Игнорирование длинной строки в файле tags"
+
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
 msgstr "E431: Ошибка формата в файле меток \"%s\""
@@ -4504,6 +5653,10 @@
 msgid "E435: Couldn't find tag, just guessing!"
 msgstr "E435: Метка не найдена, пытаемся угадать!"
 
+#, c-format
+msgid "Duplicate field name: %s"
+msgstr "Повторяющееся имя поля: %s"
+
 msgid "' not known. Available builtin terminals are:"
 msgstr "' не известен. Доступны встроенные терминалы:"
 
@@ -4524,7 +5677,7 @@
 msgstr "E436: В termcap нет записи \"%s\""
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: требуется способность терминала \"cm\""
+msgstr "E437: Требуется способность терминала \"cm\""
 
 #. Highlight title
 msgid ""
@@ -4540,25 +5693,147 @@
 msgid "Vim: Error reading input, exiting...\n"
 msgstr "Vim: Ошибка чтения ввода, выход...\n"
 
+msgid "Used CUT_BUFFER0 instead of empty selection"
+msgstr "Вместо пустого выделения используется CUT_BUFFER0"
+
+#. This happens when the FileChangedRO autocommand changes the
+#. * file in a way it becomes shorter.
+msgid "E834: Line count changed unexpectedly"
+msgstr "E834: Неожиданно изменился счётчик строк"
+
 #. must display the prompt
 msgid "No undo possible; continue anyway"
 msgstr "Отмена невозможна; продолжать выполнение"
 
+#, c-format
+msgid "E828: Cannot open undo file for writing: %s"
+msgstr "E828: Невозможно открыть файл отмен для записи: %s"
+
+#, c-format
+msgid "E825: Corrupted undo file (%s): %s"
+msgstr "E825: Файл отмен повреждён (%s): %s"
+
+msgid "Cannot write undo file in any directory in 'undodir'"
+msgstr "Невозможно записать файл отмен в каком-либо каталоге из 'undodir'"
+
+#, c-format
+msgid "Will not overwrite with undo file, cannot read: %s"
+msgstr "Файл отмен не перезаписан, невозможно прочитать: %s"
+
+#, c-format
+msgid "Will not overwrite, this is not an undo file: %s"
+msgstr "Перезапись не выполнена, это не файл отмен: %s"
+
+msgid "Skipping undo file write, nothing to undo"
+msgstr "Пропущена запись файла отмен, нечего отменять"
+
+#, c-format
+msgid "Writing undo file: %s"
+msgstr "Запись файла отмен: %s"
+
+#, c-format
+msgid "E829: write error in undo file: %s"
+msgstr "E829: Ошибка при записи файла отмен: %s"
+
+#, c-format
+msgid "Not reading undo file, owner differs: %s"
+msgstr "Файл отмен не прочитан, другой владелец: %s"
+
+#, c-format
+msgid "Reading undo file: %s"
+msgstr "Чтение файла отмен: %s"
+
+#, c-format
+msgid "E822: Cannot open undo file for reading: %s"
+msgstr "E822: Невозможно открыть файл отмен для чтения: %s"
+
+#, c-format
+msgid "E823: Not an undo file: %s"
+msgstr "E823: Это не файл отмен: %s"
+
+#, c-format
+msgid "E832: Non-encrypted file has encrypted undo file: %s"
+msgstr "E832: Не зашифрованный файл имеет зашифрованный файл отмен: %s"
+
+#, c-format
+msgid "E826: Undo file decryption failed: %s"
+msgstr "E826: Не удалось дешифровать файл отмен: %s"
+
+#, c-format
+msgid "E827: Undo file is encrypted: %s"
+msgstr "E827: Файл отмен зашифрован: %s"
+
+#, c-format
+msgid "E824: Incompatible undo file: %s"
+msgstr "E824: Несовместимый файл отмен: %s"
+
+msgid "File contents changed, cannot use undo info"
+msgstr "Изменилось содержимое файла, невозможно использовать информацию отмен"
+
+#, c-format
+msgid "Finished reading undo file %s"
+msgstr "Завершено чтение файла отмен %s"
+
+msgid "Already at oldest change"
+msgstr "Уже на самом первом изменении"
+
+msgid "Already at newest change"
+msgstr "Уже на самом последнем изменении"
+
+#, c-format
+msgid "E830: Undo number %ld not found"
+msgstr "E830: Не найдена отмена номер %ld"
+
 msgid "E438: u_undo: line numbers wrong"
 msgstr "E438: u_undo: неправильные номера строк"
 
-msgid "1 change"
-msgstr "Единственное изменение"
+msgid "more line"
+msgstr "стр. добавлена"
+
+msgid "more lines"
+msgstr "стр. добавлено"
+
+msgid "line less"
+msgstr "стр. удалена"
+
+msgid "fewer lines"
+msgstr "стр. удалено"
+
+msgid "change"
+msgstr "изм."
+
+msgid "changes"
+msgstr "изм."
+
+#, c-format
+msgid "%ld %s; %s #%ld  %s"
+msgstr "%ld %s; %s #%ld  %s"
+
+msgid "before"
+msgstr "перед"
+
+msgid "after"
+msgstr "после"
+
+msgid "Nothing to undo"
+msgstr "Нечего отменять"
+
+# Заголовок таблицы :undolist
+msgid "number changes  when               saved"
+msgstr " номер  измен.  когда              сохранено"
 
 #, c-format
-msgid "%ld changes"
-msgstr "Изменений: %ld"
+msgid "%ld seconds ago"
+msgstr "%ld с назад"
+
+msgid "E790: undojoin is not allowed after undo"
+msgstr "E790: Объединение отмен не допускается после отмены"
 
 msgid "E439: undo list corrupt"
 msgstr "E439: Повреждён список отмены"
 
 msgid "E440: undo line missing"
-msgstr "E440: потеряна строка отмены"
+msgstr "E440: Потеряна строка отмены"
 
 #. Only MS VC 4.1 and earlier can do Win32s
 msgid ""
@@ -4570,19 +5845,33 @@
 
 msgid ""
 "\n"
+"MS-Windows 64-bit GUI version"
+msgstr ""
+"\n"
+"Версия с графическим интерфейсом для MS-Windows 64 бит"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit GUI version"
 msgstr ""
 "\n"
 "Версия с графическим интерфейсом для MS-Windows 32 бит"
 
 msgid " in Win32s mode"
-msgstr " в режиме Win32s"
+msgstr " в режиме Win32"
 
 msgid " with OLE support"
 msgstr " с поддержкой OLE"
 
 msgid ""
 "\n"
+"MS-Windows 64-bit console version"
+msgstr ""
+"\n"
+"Консольная версия для MS-Windows 64 бит"
+
+msgid ""
+"\n"
 "MS-Windows 32-bit console version"
 msgstr ""
 "\n"
@@ -4632,10 +5921,10 @@
 
 msgid ""
 "\n"
-"RISC OS version"
+"OpenVMS version"
 msgstr ""
 "\n"
-"Версия для RISC OS"
+"Версия для OpenVMS"
 
 msgid ""
 "\n"
@@ -4644,6 +5933,13 @@
 "\n"
 "Заплатки: "
 
+msgid ""
+"\n"
+"Extra patches: "
+msgstr ""
+"\n"
+"Дополнительные заплатки: "
+
 msgid "Modified by "
 msgstr "С изменениями, внесёнными "
 
@@ -4698,15 +5994,9 @@
 msgid "with GTK2-GNOME GUI."
 msgstr "с графическим интерфейсом GTK2-GNOME."
 
-msgid "with GTK-GNOME GUI."
-msgstr "с графическим интерфейсом GTK-GNOME."
-
 msgid "with GTK2 GUI."
 msgstr "с графическим интерфейсом GTK2."
 
-msgid "with GTK GUI."
-msgstr "с графическим интерфейсом GTK."
-
 msgid "with X11-Motif GUI."
 msgstr "с графическим интерфейсом X11-Motif."
 
@@ -4716,9 +6006,6 @@
 msgid "with X11-Athena GUI."
 msgstr "с графическим интерфейсом X11-Athena."
 
-msgid "with BeOS GUI."
-msgstr "с графическим интерфейсом BeOS."
-
 msgid "with Photon GUI."
 msgstr "с графическим интерфейсом Photon."
 
@@ -4789,7 +6076,7 @@
 msgstr "  ОТЛАДОЧНАЯ СБОРКА"
 
 msgid "VIM - Vi IMproved"
-msgstr "VIM ::: Vi IMproved (Улучшенный Vi) ::: Русская версия"
+msgstr "VIM — Vi IMproved (улучшенный Vi)"
 
 msgid "version "
 msgstr "версия "
@@ -4828,16 +6115,16 @@
 msgstr "меню Справка->Сироты             для получения информации     "
 
 msgid "Running modeless, typed text is inserted"
-msgstr "Безрежимная работы, вставка введённого текста"
+msgstr "Безрежимная работа, вставка введённого текста"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "меню Правка->Общие Настройки->Режим Вставки                     "
+msgstr "меню Правка->Глобальные настройки->Режим Вставки                     "
 
 msgid "                              for two modes      "
 msgstr "                                 для двух режимов               "
 
 msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
-msgstr "меню Правка->Общие Настройки->Совместимость с Vi                "
+msgstr "меню Правка->Глобальные настройки->Совместимость с Vi                "
 
 msgid "                              for Vim defaults   "
 msgstr "                                 для перехода в режим Vim       "
@@ -4863,6 +6150,9 @@
 msgid "type  :help windows95<Enter>  for info on this"
 msgstr "наберите :help windows95<Enter>  для получения информации     "
 
+msgid "Already only one window"
+msgstr "На экране всего одно окно"
+
 msgid "E441: There is no preview window"
 msgstr "E441: Окно предпросмотра отсутствует"
 
@@ -4875,8 +6165,11 @@
 msgid "E444: Cannot close last window"
 msgstr "E444: Нельзя закрыть последнее окно"
 
-msgid "Already only one window"
-msgstr "На экране всего одно окно"
+msgid "E813: Cannot close autocmd window"
+msgstr "E813: Нельзя закрыть окно автокоманд"
+
+msgid "E814: Cannot close window, only autocmd window would remain"
+msgstr "E814: Нельзя закрыть окно, останется только окно автокоманд"
 
 msgid "E445: Other window contains changes"
 msgstr "E445: В другом окне есть несохранённые изменения"
@@ -4906,15 +6199,15 @@
 msgid "Edit with single &Vim"
 msgstr "Редактировать в &одном Vim"
 
-msgid "&Diff with Vim"
-msgstr "&Сравнить с помощью Vim"
+msgid "Diff with Vim"
+msgstr "Сравнить с помощью Vim"
 
 msgid "Edit with &Vim"
 msgstr "Ре&дактировать с помощью Vim"
 
 #. Now concatenate
-msgid "Edit with existing Vim - &"
-msgstr "Редактировать в запущенном Vim - &"
+msgid "Edit with existing Vim - "
+msgstr "Редактировать в запущенном Vim — "
 
 msgid "Edits the selected file(s) with Vim"
 msgstr "Редактировать выделенные файлы с помощью Vim"
@@ -4961,11 +6254,17 @@
 msgid "E170: Missing :endwhile"
 msgstr "E170: Отсутствует команда :endwhile"
 
+msgid "E170: Missing :endfor"
+msgstr "E170: Отсутствует команда :endfor"
+
 msgid "E588: :endwhile without :while"
 msgstr "E588: Команда :endwhile без парной команды :while"
 
+msgid "E588: :endfor without :for"
+msgstr "E588: :endfor без :for"
+
 msgid "E13: File exists (add ! to override)"
-msgstr "E13: Файл существует (для перезаписи добавьте !)"
+msgstr "E13: Файл существует (добавьте !, чтобы перезаписать)"
 
 msgid "E472: Command failed"
 msgstr "E472: Не удалось выполнить команду"
@@ -4980,7 +6279,7 @@
 
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Шрифт \"%s\" не является моноширинным шрифтом"
+msgstr "E236: Шрифт \"%s\" не является моноширинным"
 
 msgid "E473: Internal error"
 msgstr "E473: Внутренняя ошибка"
@@ -4992,11 +6291,11 @@
 msgstr "E14: Недопустимый адрес"
 
 msgid "E474: Invalid argument"
-msgstr "E474: Недопустимый аргумент"
+msgstr "E474: Недопустимый параметр"
 
 #, c-format
 msgid "E475: Invalid argument: %s"
-msgstr "E475: Недопустимый аргумент: %s"
+msgstr "E475: Недопустимый параметр: %s"
 
 #, c-format
 msgid "E15: Invalid expression: %s"
@@ -5012,9 +6311,6 @@
 msgid "E17: \"%s\" is a directory"
 msgstr "E17: \"%s\" является каталогом"
 
-msgid "E18: Unexpected characters before '='"
-msgstr "E18: Перед '=' обнаружены неожиданные символы"
-
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
 msgstr "E364: Неудачный вызов функции \"%s()\" из библиотеки"
@@ -5098,7 +6394,7 @@
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: сервер \"%s\" не зарегистрирован"
+msgstr "E247: Сервер \"%s\" не зарегистрирован"
 
 #, c-format
 msgid "E482: Can't create file %s"
@@ -5119,7 +6415,7 @@
 msgstr "E37: Изменения не сохранены (добавьте !, чтобы обойти проверку)"
 
 msgid "E38: Null argument"
-msgstr "E38: Нулевой аргумент"
+msgstr "E38: Нулевой параметр"
 
 msgid "E39: Number expected"
 msgstr "E39: Требуется число"
@@ -5129,7 +6425,7 @@
 msgstr "E40: Не удалось открыть файл ошибок %s"
 
 msgid "E233: cannot open display"
-msgstr "E233: невозможно открыть дисплей"
+msgstr "E233: Невозможно открыть дисплей"
 
 msgid "E41: Out of memory!"
 msgstr "E41: Не хватает памяти!"
@@ -5148,7 +6444,10 @@
 msgstr "E459: Возврат в предыдущий каталог невозможен"
 
 msgid "E42: No Errors"
-msgstr "E42: Ошибок нет"
+msgstr "E42: Нет ошибок"
+
+msgid "E776: No location list"
+msgstr "E776: Нет списка расположений"
 
 msgid "E43: Damaged match string"
 msgstr "E43: Повреждена строка соответствия"
@@ -5157,12 +6456,15 @@
 msgstr "E44: Программа обработки регулярных выражений повреждена"
 
 msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr ""
-"E45: Включена опция 'readonly' (добавьте !, чтобы не обращать внимания)"
+msgstr "E45: Включена опция 'readonly' (добавьте !, чтобы обойти проверку)"
+
+#, c-format
+msgid "E46: Cannot change read-only variable \"%s\""
+msgstr "E46: Невозможно изменить переменную только для чтения \"%s\""
 
 #, c-format
-msgid "E46: Cannot set read-only variable \"%s\""
-msgstr "E46: Невозможно изменить доступную только для чтения переменную \"%s\""
+msgid "E794: Cannot set variable in the sandbox: \"%s\""
+msgstr "E794: Невозможно изменить переменную в песочнице: \"%s\""
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Ошибка при чтении файла ошибок"
@@ -5235,3 +6537,146 @@
 msgid "E463: Region is guarded, cannot modify"
 msgstr "E463: Невозможно изменить охраняемую область"
 
+msgid "E744: NetBeans does not allow changes in read-only files"
+msgstr "E744: NetBeans не допускает изменений в файлах только для чтения"
+
+#, c-format
+msgid "E685: Internal error: %s"
+msgstr "E685: Внутренняя ошибка: %s"
+
+msgid "E363: pattern uses more memory than 'maxmempattern'"
+msgstr "E363: Шаблон использует больше памяти чем 'maxmempattern'"
+
+msgid "E749: empty buffer"
+msgstr "E749: Пустой буфер"
+
+msgid "E682: Invalid search pattern or delimiter"
+msgstr "E682: Неправильная строка поиска или разделитель"
+
+msgid "E139: File is loaded in another buffer"
+msgstr "E139: Файл загружен в другом буфере"
+
+#, c-format
+msgid "E764: Option '%s' is not set"
+msgstr "E764: Опция '%s' не установлена"
+
+msgid "E850: Invalid register name"
+msgstr "E850: Недопустимое имя регистра"
+
+msgid "search hit TOP, continuing at BOTTOM"
+msgstr "Поиск будет продолжен с КОНЦА документа"
+
+msgid "search hit BOTTOM, continuing at TOP"
+msgstr "Поиск будет продолжен с НАЧАЛА документа"
+
+#, c-format
+msgid "Need encryption key for \"%s\""
+msgstr "Требуется ключ шифрования для \"%s\""
+
+msgid "can't delete OutputObject attributes"
+msgstr "невозможно удалить атрибуты OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "значение softspace должно быть целым числом"
+
+msgid "invalid attribute"
+msgstr "неправильный атрибут"
+
+msgid "writelines() requires list of strings"
+msgstr "writelines() требует указания списка строк"
+
+msgid "E264: Python: Error initialising I/O objects"
+msgstr "E264: Python: Ошибка инициализации объектов I/O"
+
+msgid "no such buffer"
+msgstr "нет такого буфера"
+
+msgid "empty keys are not allowed"
+msgstr "пустые ключи не допустимы"
+
+msgid "failed to add key to dictionary"
+msgstr "невозможно добавить ключ к словарю"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "Невозможно удалить атрибуты DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Невозможно изменить фиксированный словарь"
+
+msgid "Only boolean objects are allowed"
+msgstr "Разрешено использовать только логические объекты"
+
+msgid "Cannot set this attribute"
+msgstr "Невозможно установить этот атрибут"
+
+msgid "no such key in dictionary"
+msgstr "нет такого ключа в словаре"
+
+msgid "dict is locked"
+msgstr "словарь заблокирован"
+
+msgid "internal error: failed to get vim list item"
+msgstr "внутренняя ошибка: не удалось получить элемент списка VIM"
+
+msgid "list is locked"
+msgstr "список заблокирован"
+
+msgid "Failed to add item to list"
+msgstr "Невозможно добавить элемент в список"
+
+msgid "internal error: no vim list item"
+msgstr "внутренняя ошибка: нет элемента списка VIM"
+
+msgid "can only assign lists to slice"
+msgstr "назначение выборки возможно только для списков"
+
+msgid "internal error: failed to add item to list"
+msgstr "внутренняя ошибка: не удалось добавить элемент в список"
+
+msgid "can only concatenate with lists"
+msgstr "можно объединить только списки"
+
+msgid "Cannot modify fixed list"
+msgstr "Невозможно изменить фиксированный список"
+
+msgid "'self' argument must be a dictionary"
+msgstr "параметр 'self' должен быть словарём"
+
+msgid "failed to run function"
+msgstr "невозможно выполнить функцию"
+
+msgid "attempt to refer to deleted window"
+msgstr "попытка сослаться на закрытое окно"
+
+msgid "readonly attribute"
+msgstr "атрибут доступен только для чтения"
+
+msgid "cursor position outside buffer"
+msgstr "позиция курсора находится вне буфера"
+
+#, c-format
+msgid "<window object (deleted) at %p>"
+msgstr "<объект окна (удален) в %p>"
+
+#, c-format
+msgid "<window object (unknown) at %p>"
+msgstr "<объект окна (неизвестен) в %p>"
+
+#, c-format
+msgid "<window %d>"
+msgstr "<окно %d>"
+
+msgid "no such window"
+msgstr "нет такого окна"
+
+msgid "attempt to refer to deleted buffer"
+msgstr "попытка сослаться на уничтоженный буфер"
+
+msgid "unable to convert to vim structure"
+msgstr "невозможно преобразовать в структуру VIM"
+
+msgid "NULL reference passed"
+msgstr "передана ссылка на NULL"
+
+msgid "internal error: invalid value type"
+msgstr "внутренняя ошибка: неправильный тип значения"
diff -Naur vim73.orig/src/po/sjiscorr.c vim73/src/po/sjiscorr.c
--- vim73.orig/src/po/sjiscorr.c	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/sjiscorr.c	2013-08-04 19:09:10.803943277 +0000
@@ -18,10 +18,10 @@
 	{
 		for (p = buffer; *p != 0; p++)
 		{
-			if (strncmp(p, "charset=euc-jp", 14) == 0)
+			if (strncmp(p, "charset=utf-8", 13) == 0)
 			{
 				fputs("charset=cp932", stdout);
-				p += 13;
+				p += 12;
 			}
 			else if (strncmp(p, "ja.po - Japanese message file", 29) == 0)
 			{
diff -Naur vim73.orig/src/po/sk.cp1250.po vim73/src/po/sk.cp1250.po
--- vim73.orig/src/po/sk.cp1250.po	2010-08-15 13:02:25.000000000 +0000
+++ vim73/src/po/sk.cp1250.po	2013-08-04 19:09:10.810609924 +0000
@@ -1908,19 +1908,6 @@
 msgid "&Undo"
 msgstr "&Sp"
 
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nemem nata chybn font '%s'"
-
-msgid "E611: Can't use font %s"
-msgstr "E611: Ned sa pou psmo %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Posielam sprvu na ukonenie synovskho procesu.\n"
-
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nemono njs okno s titulkom \"%s\""
 
@@ -4095,9 +4082,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Chybn znak '%c' v nzve psma \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Chybn 'osfiletype' voba - pouitie Textu"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: dvojit signl, konm\n"
 
diff -Naur vim73.orig/src/po/sk.po vim73/src/po/sk.po
--- vim73.orig/src/po/sk.po	2010-08-13 14:00:22.000000000 +0000
+++ vim73/src/po/sk.po	2013-08-04 19:09:10.813943247 +0000
@@ -1908,19 +1908,6 @@
 msgid "&Undo"
 msgstr "&Sp"
 
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Nemem nata chybn font '%s'"
-
-msgid "E611: Can't use font %s"
-msgstr "E611: Ned sa pou psmo %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Posielam sprvu na ukonenie synovskho procesu.\n"
-
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Nemono njs okno s titulkom \"%s\""
 
@@ -4095,9 +4082,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Chybn znak '%c' v nzve psma \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Chybn 'osfiletype' voba - pouitie Textu"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: dvojit signl, konm\n"
 
diff -Naur vim73.orig/src/po/sv.po vim73/src/po/sv.po
--- vim73.orig/src/po/sv.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/sv.po	2013-08-04 19:09:10.820609894 +0000
@@ -173,7 +173,7 @@
 
 #, c-format
 msgid "    line=%ld  id=%d  name=%s"
-msgstr "    line=%ld  id=%d  namn%s"
+msgstr "    line=%ld  id=%d  namn=%s"
 
 #, c-format
 msgid "E96: Can not diff more than %ld buffers"
@@ -2038,21 +2038,6 @@
 msgstr "&ngra"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Kan inte lsa in Zap-typsnitt '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Kan inte anvnda typsnitt %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Skickar meddelande fr att avsluta barnprocess.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Kan inte hitta fnstertitel \"%s\""
 
@@ -4303,9 +4288,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Otilltet tecken '%c' i typsnittsnamn \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Ogiltig 'osfiletype'-flagga - anvnder Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Dubbelsignal, avslutar\n"
 
diff -Naur vim73.orig/src/po/uk.cp1251.po vim73/src/po/uk.cp1251.po
--- vim73.orig/src/po/uk.cp1251.po	2010-08-15 13:02:25.000000000 +0000
+++ vim73/src/po/uk.cp1251.po	2013-08-04 19:09:10.827276541 +0000
@@ -14,10 +14,11 @@
 msgstr ""
 "Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 12:13+0300\n"
+"POT-Creation-Date: 2013-01-17 10:06+0200\n"
 "PO-Revision-Date: 2010-06-18 21:53+0300\n"
 "Last-Translator:   <sakhnik@gmail.com>\n"
 "Language-Team: Bohdan Vlasyuk <bohdan@vstu.edu.ua>\n"
+"Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=cp1251\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -43,6 +44,9 @@
 msgid "[Quickfix List]"
 msgstr "[ ]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855:     "
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82:      ,  ..."
 
@@ -174,7 +178,6 @@
 msgid "Top"
 msgstr ""
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -235,11 +238,11 @@
 
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
-msgstr "E102:     \"%s\""
+msgstr "E102:     %s"
 
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103:  \"%s\"    "
+msgstr "E103:  %s    "
 
 msgid "E787: Buffer changed unexpectedly"
 msgstr "E787:   "
@@ -302,6 +305,13 @@
 msgid "Hit end of paragraph"
 msgstr "  "
 
+# msgstr "E443: "
+msgid "E839: Completion function changed window"
+msgstr "E839:    "
+
+msgid "E840: Completion function deleted text"
+msgstr "E840:    "
+
 msgid "'dictionary' option is empty"
 msgstr " 'dictionary' "
 
@@ -448,7 +458,7 @@
 msgstr "E711:    "
 
 msgid "E690: Missing \"in\" after :for"
-msgstr "E690:  \"in\"  :for"
+msgstr "E690:  in  :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -456,7 +466,7 @@
 
 #, c-format
 msgid "E108: No such variable: \"%s\""
-msgstr "E108:  : \"%s\""
+msgstr "E108:  : %s"
 
 msgid "E743: variable nested too deep for (un)lock"
 msgstr "E743:       -/."
@@ -501,11 +511,11 @@
 
 #, c-format
 msgid "E114: Missing quote: %s"
-msgstr "E114:  '\"': %s"
+msgstr "E114:  : %s"
 
 #, c-format
 msgid "E115: Missing quote: %s"
-msgstr "E115:  \"'\": %s"
+msgstr "E115:  : %s"
 
 # msgstr "E404: "
 #, c-format
@@ -523,7 +533,7 @@
 
 #, c-format
 msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721:    : \"%s\""
+msgstr "E721:    : %s"
 
 # msgstr "E235: "
 #, c-format
@@ -565,6 +575,10 @@
 msgid "E808: Number or Float required"
 msgstr "E808:   Number  Float"
 
+# msgstr "E14: "
+msgid "add() argument"
+msgstr " add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699:  "
 
@@ -580,11 +594,23 @@
 msgid "&Ok"
 msgstr "&O:"
 
+# msgstr "E14: "
+msgid "extend() argument"
+msgstr " extend()"
+
 # msgstr "E226: "
 #, c-format
 msgid "E737: Key already exists: %s"
 msgstr "E737:   : %s"
 
+# msgstr "E14: "
+msgid "map() argument"
+msgstr " map()"
+
+# msgstr "E14: "
+msgid "filter() argument"
+msgstr " filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld : "
@@ -603,6 +629,10 @@
 msgid "called inputrestore() more often than inputsave()"
 msgstr "  inputrestore() ,   inputsave()"
 
+# msgstr "E14: "
+msgid "insert() argument"
+msgstr " insert()"
+
 # msgstr "E406: "
 msgid "E786: Range not allowed"
 msgstr "E786:   "
@@ -630,12 +660,24 @@
 msgid "E277: Unable to read a server reply"
 msgstr "E277:     "
 
+# msgstr "E14: "
+msgid "remove() argument"
+msgstr " remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655:    (?)"
 
+# msgstr "E14: "
+msgid "reverse() argument"
+msgstr " reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258:    볺"
 
+# msgstr "E14: "
+msgid "sort() argument"
+msgstr " sort()"
+
 # msgstr "E364: "
 msgid "E702: Sort compare function failed"
 msgstr "E702:    "
@@ -673,14 +715,6 @@
 msgstr "E806: Float   String"
 
 #, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704:   Funcref     : %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705:      : %s"
-
-#, c-format
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706:   : %s"
 
@@ -689,6 +723,14 @@
 msgstr "E795:     %s"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704:   Funcref     : %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705:      : %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741:  : %s"
 
@@ -714,6 +756,10 @@
 msgid "E125: Illegal argument: %s"
 msgstr "E125:  : %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853:   : %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126:  :endfunction"
 
@@ -785,7 +831,7 @@
 msgstr "  "
 
 msgid "Entering Debug mode.  Type \"cont\" to continue."
-msgstr " .     \"cont\"."
+msgstr " .     cont."
 
 #, c-format
 msgid "line %ld: %s"
@@ -797,7 +843,7 @@
 
 #, c-format
 msgid "Breakpoint in \"%s%s\" line %ld"
-msgstr "   \"%s%s\"  %ld"
+msgstr "   %s%s  %ld"
 
 #, c-format
 msgid "E161: Breakpoint not found: %s"
@@ -811,21 +857,21 @@
 msgstr "%3d %s %s    %ld"
 
 msgid "E750: First use \":profile start {fname}\""
-msgstr "E750:   \":profile start {}\""
+msgstr "E750:   :profile start {}"
 
 msgid "Save As"
 msgstr " "
 
 #, c-format
 msgid "Save changes to \"%s\"?"
-msgstr "   \"%s\"?"
+msgstr "   %s?"
 
 msgid "Untitled"
 msgstr ""
 
 #, c-format
 msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162:  \"%s\"   "
+msgstr "E162:  %s   "
 
 msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
 msgstr ""
@@ -847,38 +893,38 @@
 # msgstr "E195: "
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
-msgstr " \"%s\"  \"%s\""
+msgstr " %s  %s"
 
 #, c-format
 msgid "Searching for \"%s\""
-msgstr " \"%s\""
+msgstr " %s"
 
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
-msgstr " 'runtimepath'   \"%s\""
+msgstr " 'runtimepath'   %s"
 
 msgid "Source Vim script"
 msgstr "  Vim"
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "   : \"%s\""
+msgstr "   : %s"
 
 #, c-format
 msgid "could not source \"%s\""
-msgstr "   \"%s\""
+msgstr "   %s"
 
 #, c-format
 msgid "line %ld: could not source \"%s\""
-msgstr " %ld:    \"%s\""
+msgstr " %ld:    %s"
 
 #, c-format
 msgid "sourcing \"%s\""
-msgstr " \"%s\""
+msgstr " %s"
 
 #, c-format
 msgid "line %ld: sourcing \"%s\""
-msgstr " %ld:  \"%s\""
+msgstr " %ld:  %s"
 
 #, c-format
 msgid "finished sourcing %s"
@@ -912,11 +958,11 @@
 
 #, c-format
 msgid "Current %slanguage: \"%s\""
-msgstr " (%s): \"%s\""
+msgstr " (%s): %s"
 
 #, c-format
 msgid "E197: Cannot set language to \"%s\""
-msgstr "E197:     \"%s\""
+msgstr "E197:     %s"
 
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -959,7 +1005,7 @@
 
 #, c-format
 msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "  viminfo: \"%s\"%s%s%s"
+msgstr "  viminfo: %s%s%s%s"
 
 msgid " info"
 msgstr " "
@@ -976,7 +1022,7 @@
 #. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137:      viminfo: \"%s\""
+msgstr "E137:      viminfo: %s"
 
 #, c-format
 msgid "E138: Can't write viminfo file %s!"
@@ -984,14 +1030,13 @@
 
 #, c-format
 msgid "Writing viminfo file \"%s\""
-msgstr "  viminfo \"%s\""
+msgstr "  viminfo %s"
 
 #. Write the info:
 #, c-format
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "#     Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -999,7 +1044,6 @@
 "#  ,  !\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "#  'encoding'     \n"
 
@@ -1014,11 +1058,11 @@
 
 #, c-format
 msgid "Overwrite existing file \"%s\"?"
-msgstr "   \"%s\"?"
+msgstr "   %s?"
 
 #, c-format
 msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "  \"%s\" , ?"
+msgstr "  %s , ?"
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
@@ -1036,7 +1080,7 @@
 "'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-" \"%s\"  'readonly'.\n"
+" %s  'readonly'.\n"
 "    ?"
 
 #, c-format
@@ -1045,13 +1089,13 @@
 "It may still be possible to write it.\n"
 "Do you wish to try?"
 msgstr ""
-" \"%s\"   .\n"
+" %s   .\n"
 ", ,   .\n"
 " ?"
 
 #, c-format
 msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\"    (!   )"
+msgstr "E505: %s    (!   )"
 
 msgid "Edit File"
 msgstr " "
@@ -1108,7 +1152,6 @@
 msgid "Pattern found in every line: %s"
 msgstr "    : %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1131,7 +1174,7 @@
 
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
-msgstr ",   \"%s\"  "
+msgstr ",   %s  "
 
 #, c-format
 msgid "E150: Not a directory: %s"
@@ -1151,7 +1194,7 @@
 
 #, c-format
 msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154:   \"%s\"   %s/%s"
+msgstr "E154:   %s   %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -1192,7 +1235,7 @@
 msgstr "[]"
 
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr " Ex.       \"visual\""
+msgstr " Ex.       visual"
 
 msgid "E501: At end-of-file"
 msgstr "E501: ʳ "
@@ -1220,7 +1263,7 @@
 msgstr "E493:   "
 
 msgid "Backwards range given, OK to swap"
-msgstr "  ,    -- "
+msgstr "  ,     "
 
 msgid "E494: Use w or w>>"
 msgstr "E494:  w  w>>"
@@ -1288,6 +1331,9 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183:       "
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841:  ,      "
+
 # msgstr "E183: "
 #, c-format
 msgid "E184: No such user-defined command: %s"
@@ -1309,8 +1355,8 @@
 
 # msgstr "E184: "
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185:      %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185:      %s"
 
 msgid "Greetings, Vim user!"
 msgstr "³,  Vim!"
@@ -1380,12 +1426,12 @@
 
 #, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189:  \"%s\"  (!   )"
+msgstr "E189:  %s  (!   )"
 
 # msgstr "E189: "
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190:    \"%s\"  "
+msgstr "E190:    %s  "
 
 # msgstr "E190: "
 #. set mark
@@ -1404,23 +1450,26 @@
 msgstr "E194:       '#'"
 
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495:       \"<afile>\""
+msgstr "E495:       <afile>"
 
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496:       \"<abuf>\""
+msgstr "E496:       <abuf>"
 
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497:       \"<amatch>\""
+msgstr "E497:       <amatch>"
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498:    :source   \"<sfile>\""
+msgstr "E498:    :source   <sfile>"
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842:   ,    <sfile>"
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499:    '%'  '#' ,    \":p:h\""
+msgstr "E499:    '%'  '#' ,    :p:h"
 
 msgid "E500: Evaluates to an empty string"
-msgstr "E500:  --  "
+msgstr "E500:    "
 
 msgid "E195: Cannot open viminfo file for reading"
 msgstr "E195:     viminfo"
@@ -1652,6 +1701,9 @@
 msgid "[converted]"
 msgstr "[]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[]"
 
@@ -1853,50 +1905,50 @@
 
 #, c-format
 msgid "E208: Error writing to \"%s\""
-msgstr "E208:    \"%s\""
+msgstr "E208:    %s"
 
 #, c-format
 msgid "E209: Error closing \"%s\""
-msgstr "E209:   \"%s\""
+msgstr "E209:   %s"
 
 #, c-format
 msgid "E210: Error reading \"%s\""
-msgstr "E210:   \"%s\""
+msgstr "E210:   %s"
 
 msgid "E246: FileChangedShell autocommand deleted buffer"
 msgstr "E246:  FileChangedShell  "
 
 #, c-format
 msgid "E211: File \"%s\" no longer available"
-msgstr "E211:  \"%s\"   "
+msgstr "E211:  %s   "
 
 #, c-format
 msgid ""
 "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
 "well"
-msgstr "W12: :  \"%s\" ,     Vim "
+msgstr "W12: :  %s ,     Vim "
 
 msgid "See \":help W12\" for more info."
-msgstr ". \":help W12\"  ."
+msgstr ". :help W12  ."
 
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: :  \"%s\"    "
+msgstr "W11: :  %s    "
 
 msgid "See \":help W11\" for more info."
-msgstr ". \":help W11\"  ."
+msgstr ". :help W11  ."
 
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
-"W16: :   \"%s\"    "
+"W16: :   %s    "
 
 msgid "See \":help W16\" for more info."
-msgstr ". \":help W16\"  ."
+msgstr ". :help W16  ."
 
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: :  \"%s\"     "
+msgstr "W13: :  %s     "
 
 msgid "Warning"
 msgstr ""
@@ -1910,11 +1962,11 @@
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462:    \"%s\"  "
+msgstr "E462:    %s,  "
 
 #, c-format
 msgid "E321: Could not reload \"%s\""
-msgstr "E321:    \"%s\""
+msgstr "E321:    %s"
 
 msgid "--Deleted--"
 msgstr "----"
@@ -1926,7 +1978,7 @@
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
-msgstr "E367:   : \"%s\""
+msgstr "E367:   : %s"
 
 #, c-format
 msgid "E215: Illegal character after *: %s"
@@ -1968,7 +2020,7 @@
 # msgstr "E218: "
 #, c-format
 msgid "%s Auto commands for \"%s\""
-msgstr " %s  \"%s\""
+msgstr " %s  %s"
 
 #, c-format
 msgid "Executing %s"
@@ -2067,6 +2119,12 @@
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232:    BalloonEval    "
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851:       GUI"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852:      GUI"
+
 # msgstr "E228: "
 msgid "E229: Cannot start the GUI"
 msgstr "E229:    GUI"
@@ -2074,7 +2132,7 @@
 # msgstr "E229: "
 #, c-format
 msgid "E230: Cannot read from \"%s\""
-msgstr "E230:     \"%s\""
+msgstr "E230:     %s"
 
 msgid "E665: Cannot start GUI, no valid font found"
 msgstr "E665:    GUI,   "
@@ -2148,7 +2206,7 @@
 msgstr " "
 
 msgid "Vim: Received \"die\" request from session manager\n"
-msgstr "Vim:   \"die\"   \n"
+msgstr "Vim:   die   \n"
 
 msgid "Close"
 msgstr ""
@@ -2199,29 +2257,12 @@
 msgstr "&U:"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610:     Zap '%s'"
-
-# msgstr "E235: "
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611:     %s"
-
-# msgstr "E242: "
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"     .\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
-msgstr "E671:     \"%s\""
+msgstr "E671:     %s"
 
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-msgstr "E243:   : \"-%s\";    OLE."
+msgstr "E243:   : -%s;    OLE."
 
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672:       MDI"
@@ -2366,23 +2407,23 @@
 
 #, c-format
 msgid "E624: Can't open file \"%s\""
-msgstr "E624:     \"%s\""
+msgstr "E624:     %s"
 
 #, c-format
 msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457:      PostScript \"%s\""
+msgstr "E457:      PostScript %s"
 
 #, c-format
 msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: \"%s\"     PostScript"
+msgstr "E618: %s     PostScript"
 
 #, c-format
 msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: \"%s\"      PostScript"
+msgstr "E619: %s      PostScript"
 
 #, c-format
 msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621:     \"%s\""
+msgstr "E621:     %s"
 
 msgid "E673: Incompatible multi-byte encoding and character set."
 msgstr "E673:      ."
@@ -2399,21 +2440,21 @@
 
 #, c-format
 msgid "E456: Can't open file \"%s\""
-msgstr "E456:     \"%s\""
+msgstr "E456:     %s"
 
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456:      PostScript \"prolog.ps\""
+msgstr "E456:      PostScript prolog.ps"
 
 msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456:      PostScript \"cidfont.ps\""
+msgstr "E456:      PostScript cidfont.ps"
 
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456:      PostScript \"%s.ps\""
+msgstr "E456:      PostScript %s.ps"
 
 #, c-format
 msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620:       \"%s\""
+msgstr "E620:       %s"
 
 msgid "Sending to printer..."
 msgstr "³  ..."
@@ -2526,7 +2567,7 @@
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c:  ,    \n"
@@ -2536,7 +2577,7 @@
 "       g:   \n"
 "       i:  ,      \n"
 "       s:    C\n"
-"       t:   \n"
+"       t:   \n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2649,12 +2690,12 @@
 msgid "not allowed in the Vim sandbox"
 msgstr "    Vim"
 
-msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python:    :py  :py3   "
-
 msgid "E837: This Vim cannot execute :py3 after using :python"
 msgstr "E837: Python:    :py  :py3   "
 
+msgid "only string keys are allowed"
+msgstr "   "
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2662,23 +2703,28 @@
 "E263: ,   ,  Python    "
 "."
 
-msgid "can't delete OutputObject attributes"
-msgstr "    OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace   "
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: Eval    ᒺ python 3"
 
-# msgstr "E180: "
-msgid "invalid attribute"
-msgstr " "
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr "E861:    ᒺ python 3   vim"
 
 #, c-format
 msgid "<buffer object (deleted) at %p>"
 msgstr "<'  ()   %p>"
 
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Python:    :py  :py3   "
+
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659:     Python"
 
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval    ᒺ python"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859:    ᒺ python   vim"
+
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_    String"
 
@@ -2863,12 +2909,6 @@
 msgstr ""
 "E571: ,   ,  Tcl    ."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281:  TCL:     !?  ,   vim-"
-"dev@vim.org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572:   %d"
@@ -2880,7 +2920,7 @@
 msgstr "     "
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248:      -"
+msgstr "E248:      -"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2903,7 +2943,7 @@
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"   \"+\", \"-c \"  \"--cmd \""
+"   +, -c   --cmd "
 
 # msgstr "E14: "
 msgid "Invalid argument for"
@@ -2946,7 +2986,7 @@
 
 #, c-format
 msgid "E282: Cannot read from \"%s\""
-msgstr "E282:     \"%s\""
+msgstr "E282:     %s"
 
 # msgstr "E282: "
 msgid ""
@@ -2954,7 +2994,7 @@
 "More info with: \"vim -h\"\n"
 msgstr ""
 "\n"
-"ĳ : \"vim -h\"\n"
+"ĳ : vim -h\n"
 
 msgid "[file ..]       edit specified file(s)"
 msgstr "[ ..]         "
@@ -3017,31 +3057,34 @@
 msgstr "-unregister\t\t   gvim  OLE"
 
 msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-msgstr "-g\t\t\t GUI ( \"gvim\")"
+msgstr "-g\t\t\t GUI ( gvim)"
 
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
 msgstr "-f    --nofork\t :     GUI"
 
 msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\t Vi ( \"vi\")"
+msgstr "-v\t\t\t Vi ( vi)"
 
 msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\t Ex ( \"ex\")"
+msgstr "-e\t\t\t Ex ( ex)"
+
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\t  Ex"
 
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\t ()  (  \"ex\")"
+msgstr "-s\t\t\t ()  (  ex)"
 
 msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\t  ( \"vimdiff\")"
+msgstr "-d\t\t\t  ( vimdiff)"
 
 msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\t  ( \"evim\",  )"
+msgstr "-y\t\t\t  ( evim,  )"
 
 msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\t  ( \"view\")"
+msgstr "-R\t\t\t  ( view)"
 
 msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\t  ( \"rvim\")"
+msgstr "-Z\t\t\t  ( rvim)"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
 msgstr "-m\t\t\t ( )  "
@@ -3266,19 +3309,6 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-" gvim ( RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <>\t   "
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <>\t   "
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3294,6 +3324,9 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\t³ Vim     GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\t gvim     stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P < >\t³ Vim   "
 
@@ -3326,7 +3359,7 @@
 
 #, c-format
 msgid "E283: No marks matching \"%s\""
-msgstr "E283:  \"%s\"  "
+msgstr "E283:  %s  "
 
 # msgstr "E283: "
 #. Highlight title
@@ -3355,7 +3388,6 @@
 " . . "
 
 # TODO
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3364,7 +3396,6 @@
 "# :\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3373,7 +3404,6 @@
 "#   ( ):\n"
 
 # TODO
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3439,6 +3469,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298:   2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843:     "
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: ,   !!!"
@@ -3451,7 +3484,7 @@
 #, c-format
 msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
 msgstr ""
-"E303:       \"%s\",  "
+"E303:       %s,  "
 
 msgid "E304: ml_upd_block0(): Didn't get block 0??"
 msgstr "E304: ml_upd_block0():   0??"
@@ -3511,18 +3544,18 @@
 
 #, c-format
 msgid "Using swap file \"%s\""
-msgstr "   \"%s\""
+msgstr "   %s"
 
 #, c-format
 msgid "Original file \"%s\""
-msgstr "  \"%s\""
+msgstr "  %s"
 
 msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: : ,    "
 
 #, c-format
 msgid "Swap file is encrypted: \"%s\""
-msgstr "  : \"%s\""
+msgstr "  : %s"
 
 msgid ""
 "\n"
@@ -3597,7 +3630,7 @@
 "  ???"
 
 msgid "See \":help E312\" for more information."
-msgstr ". \":help E312\"  ."
+msgstr ". :help E312  ."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "³ ,    ."
@@ -3787,7 +3820,7 @@
 
 #, c-format
 msgid "E773: Symlink loop for \"%s\""
-msgstr "E773:    \"%s\""
+msgstr "E773:    %s"
 
 # msgstr "E317: "
 msgid "E325: ATTENTION"
@@ -3810,54 +3843,50 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) ,       .\n"
-"     ,      \n"
-"          .\n"
+"(1) ,       .   ,\n"
+"     ,      \n"
+"          ."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    ,   .\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "     .\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2)      .\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2)      .\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
-msgstr "       ,  \":recover\"  \"vim -r "
+msgstr "       ,  :recover  vim -r "
 
 msgid ""
 "\"\n"
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
-"\"\n"
-"       (. \":help recovery\").\n"
+"\n"
+"       (. :help recovery).\n"
 
 msgid "    If you did this already, delete the swap file \""
-msgstr "        ,    \""
+msgstr "        ,    "
 
 msgid ""
 "\"\n"
 "    to avoid this message.\n"
 msgstr ""
-"\"\n"
+",\n"
 "       .\n"
 "\n"
 
 msgid "Swap file \""
-msgstr "  \""
+msgstr "  "
 
 msgid "\" already exists!"
-msgstr "\"  !"
+msgstr "  !"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM -- "
+msgstr "VIM  "
 
 msgid "Swap file already exists!"
 msgstr "   !"
@@ -3904,7 +3933,7 @@
 # msgstr "E328: "
 #, c-format
 msgid "E329: No menu \"%s\""
-msgstr "E329:   \"%s\""
+msgstr "E329:   %s"
 
 #. Only a mnemonic or accelerator is not valid.
 msgid "E792: Empty menu name"
@@ -3954,7 +3983,7 @@
 
 # msgstr "E336: "
 msgid "E337: Menu not found - check menu names"
-msgstr "E337:    --  "
+msgstr "E337:      "
 
 # msgstr "E337: "
 #, c-format
@@ -4070,7 +4099,6 @@
 msgid "Vim: Finished.\n"
 msgstr "Vim: .\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr ": "
 
@@ -4106,7 +4134,7 @@
 # msgstr "E342: "
 #, c-format
 msgid "Calling shell to execute: \"%s\""
-msgstr "   : \"%s\""
+msgstr "   : %s"
 
 msgid "E545: Missing colon"
 msgstr "E545:  "
@@ -4132,6 +4160,9 @@
 msgid "Keys don't match!"
 msgstr "  !"
 
+msgid "E854: path too long for completion"
+msgstr "E854:     "
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4143,22 +4174,22 @@
 # msgstr "E343: "
 #, c-format
 msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344:     \"%s\"  cdpath"
+msgstr "E344:     %s  cdpath"
 
 # msgstr "E344: "
 #, c-format
 msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345:     \"%s\"  path"
+msgstr "E345:     %s  path"
 
 # msgstr "E345: "
 #, c-format
 msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346:  cdpath    \"%s\""
+msgstr "E346:  cdpath    %s"
 
 # msgstr "E346: "
 #, c-format
 msgid "E347: No more file \"%s\" found in path"
-msgstr "E347:       \"%s\""
+msgstr "E347:       %s"
 
 msgid "Cannot connect to Netbeans #2"
 msgstr "  '  Netbeans #2"
@@ -4170,7 +4201,7 @@
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
 "E668:        '  "
-"NetBenans: \"%s\""
+"NetBenans: %s"
 
 msgid "read from Netbeans socket"
 msgstr "   Netbeans"
@@ -4179,11 +4210,15 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658:  '  NetBeans   %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans     GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans  '"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s    (!   )"
 
 # msgstr "E348: "
 msgid "E349: No identifier under cursor"
@@ -4327,8 +4362,8 @@
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-" %s  %s;  %ld  %ld;  %ld  %ld;  %ld of %ld;  %"
-"ld  %ld"
+" %s  %s;  %ld  %ld;  %ld  %ld;  %ld of %ld;  "
+"%ld  %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4349,6 +4384,9 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520:    modeline"
 
+msgid "E846: Key code not set"
+msgstr "E846:    "
+
 msgid "E521: Number required after ="
 msgstr "E521: ϳ =   "
 
@@ -4366,7 +4404,7 @@
 msgstr "E530:    term  GUI"
 
 msgid "E531: Use \":gui\" to start the GUI"
-msgstr "E531:  \":gui\"   GUI"
+msgstr "E531:  :gui   GUI"
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589:  'backupext'  'patchmode' "
@@ -4584,16 +4622,12 @@
 
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-msgstr "E244:     \"%s\"    \"%s\""
+msgstr "E244:     %s    %s"
 
 #, c-format
 msgid "E245: Illegal char '%c' in font name \"%s\""
-msgstr "E245:   %c    \"%s\""
+msgstr "E245:   %c    %s"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366:   'osfiletype' --  `Text'"
-
-# msgstr "E366: "
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim:   , \n"
 
@@ -4684,7 +4718,7 @@
 
 #, c-format
 msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
+msgstr "dlerror = %s"
 
 msgid "Opening the X display failed"
 msgstr "    X"
@@ -4815,7 +4849,7 @@
 
 #, c-format
 msgid "Cannot open file \"%s\""
-msgstr "    \"%s\""
+msgstr "    %s"
 
 msgid "E681: Buffer is not loaded"
 msgstr "E681:   "
@@ -5075,13 +5109,17 @@
 msgstr "E756:    "
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr ":      %s_%s.spl  %s_ascii.spl"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
-":      \"%s.%s.spl\"  \"%s.ascii.spl\""
+":      %s.%s.spl  %s.ascii.spl"
 
 #, c-format
 msgid "Reading spell file \"%s\""
-msgstr "   \"%s\""
+msgstr "   %s"
 
 msgid "E757: This does not look like a spell file"
 msgstr "E757:     "
@@ -5300,6 +5338,9 @@
 msgid "Ignored %d words with non-ASCII characters"
 msgstr " %d   -ASCII "
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845:  ,    "
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr " %d  %d ;  %d (%d%%)"
@@ -5376,11 +5417,11 @@
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
-msgstr " \"%.*s\" :"
+msgstr " %.*s :"
 
 #, c-format
 msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
+msgstr " < %.*s"
 
 # msgstr "E34: "
 msgid "E752: No previous spell replacement"
@@ -5480,6 +5521,10 @@
 msgid "E395: contains argument not accepted here"
 msgstr "E395: ̳   "
 
+# msgstr "E14: "
+msgid "E844: invalid cchar value"
+msgstr "E844:   cchar"
+
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]hete  "
 
@@ -5491,6 +5536,9 @@
 msgid "E397: Filename required"
 msgstr "E397:   "
 
+msgid "E847: Too many syntax includes"
+msgstr "E847:   "
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789:  ']': %s"
@@ -5504,6 +5552,9 @@
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399:  :   %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848:   "
+
 msgid "E400: No cluster specified"
 msgstr "E400:   "
 
@@ -5563,12 +5614,12 @@
 # msgstr "E411: "
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412:  : \":highlight link %s\""
+msgstr "E412:  : :highlight link %s"
 
 # msgstr "E412: "
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413:  : \":highlight link %s\""
+msgstr "E413:  : :highlight link %s"
 
 # msgstr "E413: "
 msgid "E414: group has settings, highlight link ignored"
@@ -5626,6 +5677,9 @@
 msgid "W18: Invalid character in group name"
 msgstr "W18:     "
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849:     "
+
 # msgstr "E424: "
 msgid "E555: at bottom of tag stack"
 msgstr "E555: ʳ  崳"
@@ -5643,13 +5697,13 @@
 
 # msgstr "E426: "
 msgid "  # pri kind tag"
-msgstr "  #    "
+msgstr "  #   "
 
 msgid "file\n"
 msgstr "\n"
 
 msgid "E427: There is only one matching tag"
-msgstr "E427:    "
+msgstr "E427:    "
 
 # msgstr "E427: "
 msgid "E428: Cannot go beyond last matching tag"
@@ -5658,7 +5712,7 @@
 # msgstr "E428: "
 #, c-format
 msgid "File \"%s\" does not exist"
-msgstr " \"%s\"  "
+msgstr " %s  "
 
 #. Give an indication of the number of matching tags
 #, c-format
@@ -5673,7 +5727,7 @@
 
 #, c-format
 msgid "E429: File \"%s\" does not exist"
-msgstr "E429:  \"%s\"  "
+msgstr "E429:  %s  "
 
 # msgstr "E429: "
 #. Highlight title
@@ -5692,10 +5746,13 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430:   崳   %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "      "
+
 # msgstr "E430: "
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
-msgstr "E431:     崳 \"%s\""
+msgstr "E431:     崳 %s"
 
 # msgstr "E431: "
 #, c-format
@@ -5711,9 +5768,6 @@
 msgid "E433: No tags file"
 msgstr "E433:   崳"
 
-msgid "Ignoring long line in tags file"
-msgstr "      "
-
 # msgstr "E433: "
 msgid "E434: Can't find tag pattern"
 msgstr "E434:     "
@@ -5744,10 +5798,10 @@
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436:   \"%s\"   "
+msgstr "E436:   %s   "
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437:    \"cm\""
+msgstr "E437:    cm"
 
 #. Highlight title
 msgid ""
@@ -5892,8 +5946,8 @@
 msgid "Nothing to undo"
 msgstr "  "
 
-msgid "number changes  time            saved"
-msgstr "                    "
+msgid "number changes  when               saved"
+msgstr "                   "
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5998,13 +6052,6 @@
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"  RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6169,7 +6216,7 @@
 msgstr ": Bram Moolenaar  ."
 
 msgid "Vim is open source and freely distributable"
-msgstr "Vim --      "
+msgstr "Vim       "
 
 msgid "Help poor children in Uganda!"
 msgstr "   !"
@@ -6271,7 +6318,7 @@
 # msgstr "E446: "
 #, c-format
 msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447:  \"%s\"     "
+msgstr "E447:  %s     "
 
 #, c-format
 msgid "E370: Could not load library %s"
@@ -6373,7 +6420,7 @@
 # msgstr "E235: "
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236:  \"%s\"  "
+msgstr "E236:  %s  "
 
 msgid "E473: Internal error"
 msgstr "E473:  "
@@ -6406,11 +6453,11 @@
 
 #, c-format
 msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" --  "
+msgstr "E17: %s   "
 
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
-msgstr "E364:    \"%s()\"  "
+msgstr "E364:    %s()  "
 
 #, c-format
 msgid "E448: Could not load library function %s"
@@ -6506,7 +6553,7 @@
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247:      \"%s\""
+msgstr "E247:      %s"
 
 # msgstr "E36: "
 #, c-format
@@ -6573,11 +6620,11 @@
 
 #, c-format
 msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46:    : \"%s\""
+msgstr "E46:    : %s"
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794:      : \"%s\""
+msgstr "E794:      : %s"
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47:    "
@@ -6674,6 +6721,9 @@
 msgid "E764: Option '%s' is not set"
 msgstr "E764:  '%s'  "
 
+msgid "E850: Invalid register name"
+msgstr "E850:   "
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "   ,   ʲ"
 
@@ -6682,7 +6732,17 @@
 
 #, c-format
 msgid "Need encryption key for \"%s\""
-msgstr " \"%s\"  : "
+msgstr " %s  : "
+
+msgid "can't delete OutputObject attributes"
+msgstr "    OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "softspace   "
+
+# msgstr "E180: "
+msgid "invalid attribute"
+msgstr " "
 
 msgid "writelines() requires list of strings"
 msgstr " writelines()   "
@@ -6693,6 +6753,61 @@
 msgid "no such buffer"
 msgstr "  "
 
+# msgstr "E406: "
+msgid "empty keys are not allowed"
+msgstr "   "
+
+msgid "failed to add key to dictionary"
+msgstr "     "
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "    DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "    "
+
+msgid "Only boolean objects are allowed"
+msgstr "   ᒺ"
+
+msgid "Cannot set this attribute"
+msgstr "    "
+
+msgid "no such key in dictionary"
+msgstr "    "
+
+msgid "dict is locked"
+msgstr " "
+
+msgid "internal error: failed to get vim list item"
+msgstr " :      vim"
+
+msgid "list is locked"
+msgstr " "
+
+msgid "Failed to add item to list"
+msgstr "     "
+
+msgid "internal error: no vim list item"
+msgstr " :    vim"
+
+msgid "can only assign lists to slice"
+msgstr "    "
+
+msgid "internal error: failed to add item to list"
+msgstr " :      "
+
+msgid "can only concatenate with lists"
+msgstr " 璺   "
+
+msgid "Cannot modify fixed list"
+msgstr "    "
+
+msgid "'self' argument must be a dictionary"
+msgstr " self   "
+
+msgid "failed to run function"
+msgstr "   "
+
 msgid "attempt to refer to deleted window"
 msgstr "    "
 
@@ -6720,43 +6835,11 @@
 msgid "attempt to refer to deleted buffer"
 msgstr "    "
 
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <>\t\t ,  vim   <>"
-
-#~ msgid "\t\t\t  (Unimplemented)\n"
-#~ msgstr "\t\t\t  ( 䳺)\n"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396:  containedin  "
-
-# msgstr "E232: "
-#~ msgid "Vim dialog..."
-#~ msgstr "ĳ Vim..."
-
-# msgstr "E234: "
-#~ msgid "Font Selection"
-#~ msgstr " "
-
-# msgstr "E289: "
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290:  over-the-spot   "
-
-# msgstr "E290: "
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291:     1.2.3  GTK+.   "
-
-# msgstr "E291: "
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292:     "
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr " GUI GTK-GNOME."
-
-#~ msgid "with GTK GUI."
-#~ msgstr " GUI GTK."
+msgid "unable to convert to vim structure"
+msgstr "     vim"
 
-#~ msgid "[NL found]"
-#~ msgstr "[ NL]"
+msgid "NULL reference passed"
+msgstr "  NULL"
 
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: ʳ '  cscope  "
+msgid "internal error: invalid value type"
+msgstr " :   "
diff -Naur vim73.orig/src/po/uk.po vim73/src/po/uk.po
--- vim73.orig/src/po/uk.po	2010-08-13 13:59:29.000000000 +0000
+++ vim73/src/po/uk.po	2013-08-04 19:09:10.833943187 +0000
@@ -14,10 +14,11 @@
 msgstr ""
 "Project-Id-Version: vim 7.3\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 12:13+0300\n"
+"POT-Creation-Date: 2013-01-17 10:06+0200\n"
 "PO-Revision-Date: 2010-06-18 21:53+0300\n"
 "Last-Translator: Анатолій Сахнік <sakhnik@gmail.com>\n"
 "Language-Team: Bohdan Vlasyuk <bohdan@vstu.edu.ua>\n"
+"Language: uk\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -43,6 +44,9 @@
 msgid "[Quickfix List]"
 msgstr "[Список виправлень]"
 
+msgid "E855: Autocommands caused command to abort"
+msgstr "E855: Автокоманди призвели до скасування команди"
+
 msgid "E82: Cannot allocate any buffer, exiting..."
 msgstr "E82: Немає можливості розмістити хоч один буфер, завершення роботи..."
 
@@ -174,7 +178,6 @@
 msgid "Top"
 msgstr "Вгорі"
 
-#, c-format
 msgid ""
 "\n"
 "# Buffer list:\n"
@@ -235,11 +238,11 @@
 
 #, c-format
 msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: Не вдалося знайти буфер \"%s\""
+msgstr "E102: Не вдалося знайти буфер «%s»"
 
 #, c-format
 msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Буфер \"%s\" не в режимі порівняння"
+msgstr "E103: Буфер «%s» не в режимі порівняння"
 
 msgid "E787: Buffer changed unexpectedly"
 msgstr "E787: Буфер несподівано змінився"
@@ -302,6 +305,13 @@
 msgid "Hit end of paragraph"
 msgstr "Трапився кінець параграфа"
 
+# msgstr "E443: "
+msgid "E839: Completion function changed window"
+msgstr "E839: Функція доповнення змінила вікно"
+
+msgid "E840: Completion function deleted text"
+msgstr "E840: Функція доповнення знищила текст"
+
 msgid "'dictionary' option is empty"
 msgstr "Опція 'dictionary' порожня"
 
@@ -448,7 +458,7 @@
 msgstr "E711: Список має недостатньо елементів"
 
 msgid "E690: Missing \"in\" after :for"
-msgstr "E690: Пропущено \"in\" після :for"
+msgstr "E690: Пропущено «in» після :for"
 
 #, c-format
 msgid "E107: Missing parentheses: %s"
@@ -456,7 +466,7 @@
 
 #, c-format
 msgid "E108: No such variable: \"%s\""
-msgstr "E108: Змінної немає: \"%s\""
+msgstr "E108: Змінної немає: «%s»"
 
 msgid "E743: variable nested too deep for (un)lock"
 msgstr "E743: Змінна має забагато вкладень щоб бути за-/відкритою."
@@ -501,11 +511,11 @@
 
 #, c-format
 msgid "E114: Missing quote: %s"
-msgstr "E114: Бракує '\"': %s"
+msgstr "E114: Бракує лапки: %s"
 
 #, c-format
 msgid "E115: Missing quote: %s"
-msgstr "E115: Бракує \"'\": %s"
+msgstr "E115: Бракує лапки: %s"
 
 # msgstr "E404: "
 #, c-format
@@ -523,7 +533,7 @@
 
 #, c-format
 msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Повторення ключа в словнику: \"%s\""
+msgstr "E721: Повторення ключа в словнику: «%s»"
 
 # msgstr "E235: "
 #, c-format
@@ -565,6 +575,10 @@
 msgid "E808: Number or Float required"
 msgstr "E808: Треба вказати Number чи Float"
 
+# msgstr "E14: "
+msgid "add() argument"
+msgstr "аргумент add()"
+
 msgid "E699: Too many arguments"
 msgstr "E699: Забагато аргументів"
 
@@ -580,11 +594,23 @@
 msgid "&Ok"
 msgstr "&O:Гаразд"
 
+# msgstr "E14: "
+msgid "extend() argument"
+msgstr "аргумент extend()"
+
 # msgstr "E226: "
 #, c-format
 msgid "E737: Key already exists: %s"
 msgstr "E737: Ключ вже існує: %s"
 
+# msgstr "E14: "
+msgid "map() argument"
+msgstr "аргумент map()"
+
+# msgstr "E14: "
+msgid "filter() argument"
+msgstr "аргумент filter()"
+
 #, c-format
 msgid "+-%s%3ld lines: "
 msgstr "+-%s%3ld рядків: "
@@ -603,6 +629,10 @@
 msgid "called inputrestore() more often than inputsave()"
 msgstr "Виклики до inputrestore() частіше, ніж до inputsave()"
 
+# msgstr "E14: "
+msgid "insert() argument"
+msgstr "аргумент insert()"
+
 # msgstr "E406: "
 msgid "E786: Range not allowed"
 msgstr "E786: Інтервал не дозволено"
@@ -630,12 +660,24 @@
 msgid "E277: Unable to read a server reply"
 msgstr "E277: Не вдалося прочитати відповідь сервера"
 
+# msgstr "E14: "
+msgid "remove() argument"
+msgstr "аргумент remove()"
+
 msgid "E655: Too many symbolic links (cycle?)"
 msgstr "E655: Забагато символьних посилань (цикл?)"
 
+# msgstr "E14: "
+msgid "reverse() argument"
+msgstr "аргумент reverse()"
+
 msgid "E258: Unable to send to client"
 msgstr "E258: Не вдалося надіслати клієнту"
 
+# msgstr "E14: "
+msgid "sort() argument"
+msgstr "аргумент sort()"
+
 # msgstr "E364: "
 msgid "E702: Sort compare function failed"
 msgstr "E702: Помилка у функції порівняння"
@@ -673,14 +715,6 @@
 msgstr "E806: Float вжито як String"
 
 #, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Назва змінної Funcref має починатися з великої літери: %s"
-
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Назва змінної співпадає з існуючою функцією: %s"
-
-#, c-format
 msgid "E706: Variable type mismatch for: %s"
 msgstr "E706: Неправильний тип змінної: %s"
 
@@ -689,6 +723,14 @@
 msgstr "E795: Не можна знищити змінну %s"
 
 #, c-format
+msgid "E704: Funcref variable name must start with a capital: %s"
+msgstr "E704: Назва змінної Funcref має починатися з великої літери: %s"
+
+#, c-format
+msgid "E705: Variable name conflicts with existing function: %s"
+msgstr "E705: Назва змінної співпадає з існуючою функцією: %s"
+
+#, c-format
 msgid "E741: Value is locked: %s"
 msgstr "E741: Значення захищене: %s"
 
@@ -714,6 +756,10 @@
 msgid "E125: Illegal argument: %s"
 msgstr "E125: Недозволений аргумент: %s"
 
+#, c-format
+msgid "E853: Duplicate argument name: %s"
+msgstr "E853: Назва аргументу повторюється: %s"
+
 msgid "E126: Missing :endfunction"
 msgstr "E126: Бракує :endfunction"
 
@@ -785,7 +831,7 @@
 msgstr "Жодного старого файлу"
 
 msgid "Entering Debug mode.  Type \"cont\" to continue."
-msgstr "Режим налагодження.  Щоб продовжити введіть \"cont\"."
+msgstr "Режим налагодження.  Щоб продовжити введіть «cont»."
 
 #, c-format
 msgid "line %ld: %s"
@@ -797,7 +843,7 @@
 
 #, c-format
 msgid "Breakpoint in \"%s%s\" line %ld"
-msgstr "Точка зупинки в \"%s%s\" рядок %ld"
+msgstr "Точка зупинки в «%s%s» рядок %ld"
 
 #, c-format
 msgid "E161: Breakpoint not found: %s"
@@ -811,21 +857,21 @@
 msgstr "%3d %s %s   рядок %ld"
 
 msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: Спочатку зробіть \":profile start {файл}\""
+msgstr "E750: Спочатку зробіть «:profile start {файл}»"
 
 msgid "Save As"
 msgstr "Зберегти як"
 
 #, c-format
 msgid "Save changes to \"%s\"?"
-msgstr "Зберегти зміни в \"%s\"?"
+msgstr "Зберегти зміни в «%s»?"
 
 msgid "Untitled"
 msgstr "Неназваний"
 
 #, c-format
 msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Буфер \"%s\" має незбережені зміни"
+msgstr "E162: Буфер «%s» має незбережені зміни"
 
 msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
 msgstr ""
@@ -847,38 +893,38 @@
 # msgstr "E195: "
 #, c-format
 msgid "Searching for \"%s\" in \"%s\""
-msgstr "Пошук \"%s\" в \"%s\""
+msgstr "Пошук «%s» в «%s»"
 
 #, c-format
 msgid "Searching for \"%s\""
-msgstr "Пошук \"%s\""
+msgstr "Пошук «%s»"
 
 #, c-format
 msgid "not found in 'runtimepath': \"%s\""
-msgstr "В 'runtimepath' не знайдено \"%s\""
+msgstr "В 'runtimepath' не знайдено «%s»"
 
 msgid "Source Vim script"
 msgstr "Прочитати скрипт Vim"
 
 #, c-format
 msgid "Cannot source a directory: \"%s\""
-msgstr "Не вдалося прочитати каталог: \"%s\""
+msgstr "Не вдалося прочитати каталог: «%s»"
 
 #, c-format
 msgid "could not source \"%s\""
-msgstr "Не вдалося виконати \"%s\""
+msgstr "Не вдалося виконати «%s»"
 
 #, c-format
 msgid "line %ld: could not source \"%s\""
-msgstr "рядок %ld: не вдалося виконати \"%s\""
+msgstr "рядок %ld: не вдалося виконати «%s»"
 
 #, c-format
 msgid "sourcing \"%s\""
-msgstr "виконується \"%s\""
+msgstr "виконується «%s»"
 
 #, c-format
 msgid "line %ld: sourcing \"%s\""
-msgstr "рядок %ld: виконується \"%s\""
+msgstr "рядок %ld: виконується «%s»"
 
 #, c-format
 msgid "finished sourcing %s"
@@ -912,11 +958,11 @@
 
 #, c-format
 msgid "Current %slanguage: \"%s\""
-msgstr "Мова (%s): \"%s\""
+msgstr "Мова (%s): «%s»"
 
 #, c-format
 msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Не вдалося встановити мову \"%s\""
+msgstr "E197: Не вдалося встановити мову «%s»"
 
 #, c-format
 msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
@@ -959,7 +1005,7 @@
 
 #, c-format
 msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "Зчитується файл viminfo: \"%s\"%s%s%s"
+msgstr "Зчитується файл viminfo: «%s»%s%s%s"
 
 msgid " info"
 msgstr " інформація"
@@ -976,7 +1022,7 @@
 #. avoid a wait_return for this message, it's annoying
 #, c-format
 msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Не дозволено запис у файл viminfo: \"%s\""
+msgstr "E137: Не дозволено запис у файл viminfo: %s"
 
 #, c-format
 msgid "E138: Can't write viminfo file %s!"
@@ -984,14 +1030,13 @@
 
 #, c-format
 msgid "Writing viminfo file \"%s\""
-msgstr "Записується файл viminfo \"%s\""
+msgstr "Записується файл viminfo «%s»"
 
 #. Write the info:
 #, c-format
 msgid "# This viminfo file was generated by Vim %s.\n"
 msgstr "# Цей файл автоматично створений Vim %s.\n"
 
-#, c-format
 msgid ""
 "# You may edit it if you're careful!\n"
 "\n"
@@ -999,7 +1044,6 @@
 "# Можете редагувати, але ОБЕРЕЖНО!\n"
 "\n"
 
-#, c-format
 msgid "# Value of 'encoding' when this file was written\n"
 msgstr "# Значення 'encoding' під час створення цього файлу\n"
 
@@ -1014,11 +1058,11 @@
 
 #, c-format
 msgid "Overwrite existing file \"%s\"?"
-msgstr "Переписати існуючий файл \"%s\"?"
+msgstr "Переписати існуючий файл «%s»?"
 
 #, c-format
 msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "Файл обміну \"%s\" існує, перезаписати?"
+msgstr "Файл обміну «%s» існує, перезаписати?"
 
 #, c-format
 msgid "E768: Swap file exists: %s (:silent! overrides)"
@@ -1036,7 +1080,7 @@
 "'readonly' option is set for \"%s\".\n"
 "Do you wish to write anyway?"
 msgstr ""
-"Для \"%s\" встановлено 'readonly'.\n"
+"Для «%s» встановлено 'readonly'.\n"
 "Бажаєте все одно продовжити запис?"
 
 #, c-format
@@ -1045,13 +1089,13 @@
 "It may still be possible to write it.\n"
 "Do you wish to try?"
 msgstr ""
-"Файл \"%s\" дозволено тільки читати.\n"
+"Файл «%s» дозволено тільки читати.\n"
 "Проте, можливо, його можна записати.\n"
 "Хочете спробувати?"
 
 #, c-format
 msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\" тільки для читання (! щоб не зважати)"
+msgstr "E505: «%s» тільки для читання (! щоб не зважати)"
 
 msgid "Edit File"
 msgstr "Редагувати Файл"
@@ -1108,7 +1152,6 @@
 msgid "Pattern found in every line: %s"
 msgstr "Зразок знайдено у кожному рядку: %s"
 
-#, c-format
 msgid ""
 "\n"
 "# Last Substitute String:\n"
@@ -1131,7 +1174,7 @@
 
 #, c-format
 msgid "Sorry, help file \"%s\" not found"
-msgstr "Вибачте, файл допомоги \"%s\" не знайдено"
+msgstr "Вибачте, файл допомоги «%s» не знайдено"
 
 #, c-format
 msgid "E150: Not a directory: %s"
@@ -1151,7 +1194,7 @@
 
 #, c-format
 msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Повторення теґу \"%s\" у файлі %s/%s"
+msgstr "E154: Повторення теґу «%s» у файлі %s/%s"
 
 #, c-format
 msgid "E160: Unknown sign command: %s"
@@ -1192,7 +1235,7 @@
 msgstr "[Знищено]"
 
 msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
-msgstr "Режим Ex. Для повернення до нормального режиму виконайте \"visual\""
+msgstr "Режим Ex. Для повернення до нормального режиму виконайте «visual»"
 
 msgid "E501: At end-of-file"
 msgstr "E501: Кінець файлу"
@@ -1220,7 +1263,7 @@
 msgstr "E493: Інтервал задано навиворіт"
 
 msgid "Backwards range given, OK to swap"
-msgstr "Інтервал задано навиворіт, щоб поміняти місцями -- ГАРАЗД"
+msgstr "Інтервал задано навиворіт, щоб поміняти місцями — ГАРАЗД"
 
 msgid "E494: Use w or w>>"
 msgstr "E494: Спробуйте w або w>>"
@@ -1288,6 +1331,9 @@
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr "E183: Команди користувача повинні починатися з великої літери"
 
+msgid "E841: Reserved name, cannot be used for user defined command"
+msgstr "E841: Зарезервована назва, не можна використати для користувацької команди"
+
 # msgstr "E183: "
 #, c-format
 msgid "E184: No such user-defined command: %s"
@@ -1309,8 +1355,8 @@
 
 # msgstr "E184: "
 #, c-format
-msgid "E185: Cannot find color scheme %s"
-msgstr "E185: Не вдалося знайти схему кольорів %s"
+msgid "E185: Cannot find color scheme '%s'"
+msgstr "E185: Не вдалося знайти схему кольорів «%s»"
 
 msgid "Greetings, Vim user!"
 msgstr "Вітання, користувачу Vim!"
@@ -1380,12 +1426,12 @@
 
 #, c-format
 msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: Файл \"%s\" існує (! щоб не зважати)"
+msgstr "E189: Файл «%s» існує (! щоб не зважати)"
 
 # msgstr "E189: "
 #, c-format
 msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: Не вдалося відкрити \"%s\" для запису"
+msgstr "E190: Не вдалося відкрити «%s» для запису"
 
 # msgstr "E190: "
 #. set mark
@@ -1404,23 +1450,26 @@
 msgstr "E194: Немає назви вторинного файлу для заміни '#'"
 
 msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: Немає назви файлу автокоманди для заміни \"<afile>\""
+msgstr "E495: Немає назви файлу автокоманди для заміни «<afile>»"
 
 msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: Немає номера буфера автокоманди для заміни \"<abuf>\""
+msgstr "E496: Немає номера буфера автокоманди для заміни «<abuf>»"
 
 msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: Немає назви збігу автокоманди для заміни \"<amatch>\""
+msgstr "E497: Немає назви збігу автокоманди для заміни «<amatch>»"
 
 msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: Немає назви файлу :source для заміни \"<sfile>\""
+msgstr "E498: Немає назви файлу :source для заміни «<sfile>»"
+
+msgid "E842: no line number to use for \"<slnum>\""
+msgstr "E842: немає номера рядка, щоб використати з «<sfile>»"
 
 #, no-c-format
 msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: Назва файлу для '%' чи '#' порожня, працює лише з \":p:h\""
+msgstr "E499: Назва файлу для '%' чи '#' порожня, працює лише з «:p:h»"
 
 msgid "E500: Evaluates to an empty string"
-msgstr "E500: Результат -- порожній рядок"
+msgstr "E500: Результат — порожній рядок"
 
 msgid "E195: Cannot open viminfo file for reading"
 msgstr "E195: Не вдалося прочитати файл viminfo"
@@ -1652,6 +1701,9 @@
 msgid "[converted]"
 msgstr "[конвертовано]"
 
+msgid "[blowfish]"
+msgstr "[blowfish]"
+
 msgid "[crypted]"
 msgstr "[зашифровано]"
 
@@ -1853,50 +1905,50 @@
 
 #, c-format
 msgid "E208: Error writing to \"%s\""
-msgstr "E208: Помилка запису у \"%s\""
+msgstr "E208: Помилка запису у «%s»"
 
 #, c-format
 msgid "E209: Error closing \"%s\""
-msgstr "E209: Помилка закриття \"%s\""
+msgstr "E209: Помилка закриття «%s»"
 
 #, c-format
 msgid "E210: Error reading \"%s\""
-msgstr "E210: Помилка читання \"%s\""
+msgstr "E210: Помилка читання «%s»"
 
 msgid "E246: FileChangedShell autocommand deleted buffer"
 msgstr "E246: Автокоманда FileChangedShell знищила буфер"
 
 #, c-format
 msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Файл \"%s\" більше не досяжний"
+msgstr "E211: Файл «%s» більше не досяжний"
 
 #, c-format
 msgid ""
 "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
 "well"
-msgstr "W12: Застереження: Файл \"%s\" змінився, але й буфер у Vim також"
+msgstr "W12: Застереження: Файл «%s» змінився, але й буфер у Vim також"
 
 msgid "See \":help W12\" for more info."
-msgstr "Див. \":help W12\" для уточнення."
+msgstr "Див. «:help W12» для уточнення."
 
 #, c-format
 msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: Застереження: Файл \"%s\" змінився після початку редагування"
+msgstr "W11: Застереження: Файл «%s» змінився після початку редагування"
 
 msgid "See \":help W11\" for more info."
-msgstr "Див. \":help W11\" для уточнення."
+msgstr "Див. «:help W11» для уточнення."
 
 #, c-format
 msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
 msgstr ""
-"W16: Застереження: Режим файлу \"%s\" змінився після початку редагування"
+"W16: Застереження: Режим файлу «%s» змінився після початку редагування"
 
 msgid "See \":help W16\" for more info."
-msgstr "Див. \":help W16\" для уточнення."
+msgstr "Див. «:help W16» для уточнення."
 
 #, c-format
 msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: Застереження: Файл \"%s\" було створено після початку редагування"
+msgstr "W13: Застереження: Файл «%s» було створено після початку редагування"
 
 msgid "Warning"
 msgstr "Застереження"
@@ -1910,11 +1962,11 @@
 
 #, c-format
 msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: Не вдалося підготувати \"%s\" для перечитання"
+msgstr "E462: Не вдалося підготувати «%s», щоб перечитати"
 
 #, c-format
 msgid "E321: Could not reload \"%s\""
-msgstr "E321: Не вдалося перечитати \"%s\""
+msgstr "E321: Не вдалося перечитати «%s»"
 
 msgid "--Deleted--"
 msgstr "--Знищено--"
@@ -1926,7 +1978,7 @@
 #. the group doesn't exist
 #, c-format
 msgid "E367: No such group: \"%s\""
-msgstr "E367: Немає такої групи: \"%s\""
+msgstr "E367: Немає такої групи: «%s»"
 
 #, c-format
 msgid "E215: Illegal character after *: %s"
@@ -1968,7 +2020,7 @@
 # msgstr "E218: "
 #, c-format
 msgid "%s Auto commands for \"%s\""
-msgstr "Автокоманди %s для \"%s\""
+msgstr "Автокоманди %s для «%s»"
 
 #, c-format
 msgid "Executing %s"
@@ -2067,6 +2119,12 @@
 msgid "E232: Cannot create BalloonEval with both message and callback"
 msgstr "E232: Не вдалося створити BalloonEval з повідомленням і функцією"
 
+msgid "E851: Failed to create a new process for the GUI"
+msgstr "E851: Не вдалося створити новий процес для GUI"
+
+msgid "E852: The child process failed to start the GUI"
+msgstr "E852: Дочірній процес не зміг запустити GUI"
+
 # msgstr "E228: "
 msgid "E229: Cannot start the GUI"
 msgstr "E229: Не вдалося запустити GUI"
@@ -2074,7 +2132,7 @@
 # msgstr "E229: "
 #, c-format
 msgid "E230: Cannot read from \"%s\""
-msgstr "E230: Не вдалося прочитати з \"%s\""
+msgstr "E230: Не вдалося прочитати з «%s»"
 
 msgid "E665: Cannot start GUI, no valid font found"
 msgstr "E665: Не вдалося запустити GUI, не знайдено шрифт"
@@ -2148,7 +2206,7 @@
 msgstr "Замінити усі"
 
 msgid "Vim: Received \"die\" request from session manager\n"
-msgstr "Vim: Отримав запит \"die\" від менеджера сесій\n"
+msgstr "Vim: Отримав запит «die» від менеджера сесій\n"
 
 msgid "Close"
 msgstr "Закрити"
@@ -2199,29 +2257,12 @@
 msgstr "&U:Скасувати"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Не вдалося завантажити шрифт Zap '%s'"
-
-# msgstr "E235: "
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Не вдалося використати шрифт %s"
-
-# msgstr "E242: "
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Посилається повідомлення щоб припинити дочірній процес.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
-msgstr "E671: Не вдалося знайти вікно \"%s\""
+msgstr "E671: Не вдалося знайти вікно «%s»"
 
 #, c-format
 msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-msgstr "E243: Аргумент не підтримується: \"-%s\"; користуйтесь версією з OLE."
+msgstr "E243: Аргумент не підтримується: «-%s»; користуйтесь версією з OLE."
 
 msgid "E672: Unable to open window inside MDI application"
 msgstr "E672: Не вдалося відкрити вікно всередині програми MDI"
@@ -2366,23 +2407,23 @@
 
 #, c-format
 msgid "E624: Can't open file \"%s\""
-msgstr "E624: Не вдалося відкрити файл \"%s\""
+msgstr "E624: Не вдалося відкрити файл «%s»"
 
 #, c-format
 msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Не вдалося прочитати файл ресурсів PostScript \"%s\""
+msgstr "E457: Не вдалося прочитати файл ресурсів PostScript «%s»"
 
 #, c-format
 msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: \"%s\" не є файлом ресурсів PostScript"
+msgstr "E618: «%s» не є файлом ресурсів PostScript"
 
 #, c-format
 msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: \"%s\" не є підтримуваним файлом ресурсів PostScript"
+msgstr "E619: «%s» не є підтримуваним файлом ресурсів PostScript"
 
 #, c-format
 msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: Неправильна версія файлу ресурсів \"%s\""
+msgstr "E621: Неправильна версія файлу ресурсів «%s»"
 
 msgid "E673: Incompatible multi-byte encoding and character set."
 msgstr "E673: Несумісні багатобайтове кодування й набір символів."
@@ -2399,21 +2440,21 @@
 
 #, c-format
 msgid "E456: Can't open file \"%s\""
-msgstr "E456: Не вдалося відкрити файл \"%s\""
+msgstr "E456: Не вдалося відкрити файл «%s»"
 
 msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Не вдалося знайти файл ресурсів PostScript \"prolog.ps\""
+msgstr "E456: Не вдалося знайти файл ресурсів PostScript «prolog.ps»"
 
 msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Не вдалося знайти файл ресурсів PostScript \"cidfont.ps\""
+msgstr "E456: Не вдалося знайти файл ресурсів PostScript «cidfont.ps»"
 
 #, c-format
 msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Не вдалося знайти файл ресурсів PostScript \"%s.ps\""
+msgstr "E456: Не вдалося знайти файл ресурсів PostScript «%s.ps»"
 
 #, c-format
 msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Не вдалося перетворити до кодування друку \"%s\""
+msgstr "E620: Не вдалося перетворити до кодування друку «%s»"
 
 msgid "Sending to printer..."
 msgstr "Відсилається на принтер..."
@@ -2526,7 +2567,7 @@
 "       g: Find this definition\n"
 "       i: Find files #including this file\n"
 "       s: Find this C symbol\n"
-"       t: Find assignments to\n"
+"       t: Find this text string\n"
 msgstr ""
 "\n"
 "       c: Знайти функції, що викликають цю функцію\n"
@@ -2536,7 +2577,7 @@
 "       g: Знайти це визначення\n"
 "       i: Знайти файли, які включають в себе цей файл\n"
 "       s: Знайти цей символ C\n"
-"       t: Знайти присвоєння цьому\n"
+"       t: Знайти цей текст\n"
 
 #, c-format
 msgid "E625: cannot open cscope database: %s"
@@ -2649,12 +2690,12 @@
 msgid "not allowed in the Vim sandbox"
 msgstr "не дозволено у пісочниці Vim"
 
-msgid "E836: This Vim cannot execute :python after using :py3"
-msgstr "E836: Python: Не можна використати :py і :py3 в одному сеансі"
-
 msgid "E837: This Vim cannot execute :py3 after using :python"
 msgstr "E837: Python: Не можна використати :py і :py3 в одному сеансі"
 
+msgid "only string keys are allowed"
+msgstr "Дозволено тільки текстові ключі"
+
 msgid ""
 "E263: Sorry, this command is disabled, the Python library could not be "
 "loaded."
@@ -2662,23 +2703,28 @@
 "E263: Вибачте, ця команда вимкнена, бібліотека Python не може бути "
 "завантажена."
 
-msgid "can't delete OutputObject attributes"
-msgstr "не вдалося знищити атрибути OutputObject"
-
-msgid "softspace must be an integer"
-msgstr "softspace має бути цілим"
+msgid "E860: Eval did not return a valid python 3 object"
+msgstr "E860: Eval не повернув дійсний об’єкт python 3"
 
-# msgstr "E180: "
-msgid "invalid attribute"
-msgstr "неправильний атрибут"
+msgid "E861: Failed to convert returned python 3 object to vim value"
+msgstr "E861: Не вдалося перетворити об’єкт python 3 у значення vim"
 
 #, c-format
 msgid "<buffer object (deleted) at %p>"
 msgstr "<об'єкт буфера (знищено) за адресою %p>"
 
+msgid "E836: This Vim cannot execute :python after using :py3"
+msgstr "E836: Python: Не можна використати :py і :py3 в одному сеансі"
+
 msgid "E659: Cannot invoke Python recursively"
 msgstr "E659: Не можна рекурсивно викликати Python"
 
+msgid "E858: Eval did not return a valid python object"
+msgstr "E858: Eval не повернув дійсний об’єкт python"
+
+msgid "E859: Failed to convert returned python object to vim value"
+msgstr "E859: Не вдалося перетворити об’єкт python у значення vim"
+
 msgid "E265: $_ must be an instance of String"
 msgstr "E265: $_ має бути екземпляром String"
 
@@ -2863,12 +2909,6 @@
 msgstr ""
 "E571: Вибачте, ця команда вимкнена, бібліотека Tcl не може бути завантажена."
 
-msgid ""
-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
-msgstr ""
-"E281: ПОМИЛКА TCL: код виходу не є цілим!? Будь ласка, повідомте у vim-"
-"dev@vim.org"
-
 #, c-format
 msgid "E572: exit code %d"
 msgstr "E572: Код виходу %d"
@@ -2880,7 +2920,7 @@
 msgstr "Не вдалося зареєструвати назву сервера команд"
 
 msgid "E248: Failed to send command to the destination program"
-msgstr "E248: Не вдалося відіслати команду до програми-призначення"
+msgstr "E248: Не вдалося відіслати команду до програми-цілі"
 
 #, c-format
 msgid "E573: Invalid server id used: %s"
@@ -2903,7 +2943,7 @@
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr ""
-"Забагато аргументів у \"+команда\", \"-c команда\" або \"--cmd команда\""
+"Забагато аргументів у «+команда», «-c команда» або «--cmd команда»"
 
 # msgstr "E14: "
 msgid "Invalid argument for"
@@ -2946,7 +2986,7 @@
 
 #, c-format
 msgid "E282: Cannot read from \"%s\""
-msgstr "E282: Не вдалося прочитати з \"%s\""
+msgstr "E282: Не вдалося прочитати з «%s»"
 
 # msgstr "E282: "
 msgid ""
@@ -2954,7 +2994,7 @@
 "More info with: \"vim -h\"\n"
 msgstr ""
 "\n"
-"Дізнайтеся більше: \"vim -h\"\n"
+"Дізнайтеся більше: «vim -h»\n"
 
 msgid "[file ..]       edit specified file(s)"
 msgstr "[файл ..]       редагувати вказані файли"
@@ -3017,31 +3057,34 @@
 msgstr "-unregister\t\tСкасувати реєстрацію цього gvim для OLE"
 
 msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-msgstr "-g\t\t\tЗапустити GUI (ніби \"gvim\")"
+msgstr "-g\t\t\tЗапустити GUI (ніби «gvim»)"
 
 msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
 msgstr "-f  чи  --nofork\tПередній план: тримати термінал після запуску GUI"
 
 msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tРежим Vi (ніби \"vi\")"
+msgstr "-v\t\t\tРежим Vi (ніби «vi»)"
 
 msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tРежим Ex (ніби \"ex\")"
+msgstr "-e\t\t\tРежим Ex (ніби «ex»)"
+
+msgid "-E\t\t\tImproved Ex mode"
+msgstr "-E\t\t\tПокращений режим Ex"
 
 msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tМовчазний (пакетний) режим (лише для \"ex\")"
+msgstr "-s\t\t\tМовчазний (пакетний) режим (лише для «ex»)"
 
 msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tРежим порівняння (ніби \"vimdiff\")"
+msgstr "-d\t\t\tРежим порівняння (ніби «vimdiff»)"
 
 msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tПростий режим (ніби \"evim\", без режимів)"
+msgstr "-y\t\t\tПростий режим (ніби «evim», без режимів)"
 
 msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tРежим перегляду (ніби \"view\")"
+msgstr "-R\t\t\tРежим перегляду (ніби «view»)"
 
 msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tОбмежений режим (ніби \"rvim\")"
+msgstr "-Z\t\t\tОбмежений режим (ніби «rvim»)"
 
 msgid "-m\t\t\tModifications (writing files) not allowed"
 msgstr "-m\t\t\tЗміни (запис файлів) не дозволено"
@@ -3266,19 +3309,6 @@
 
 msgid ""
 "\n"
-"Arguments recognised by gvim (RISC OS version):\n"
-msgstr ""
-"\n"
-"Аргументи gvim (версія RISC OS):\n"
-
-msgid "--columns <number>\tInitial width of window in columns"
-msgstr "--columns <кількість>\tПочаткова кількість колонок вікна"
-
-msgid "--rows <number>\tInitial height of window in rows"
-msgstr "--rows <кількість>\tПочаткова кількість рядків вікна"
-
-msgid ""
-"\n"
 "Arguments recognised by gvim (GTK+ version):\n"
 msgstr ""
 "\n"
@@ -3294,6 +3324,9 @@
 msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
 msgstr "--socketid <xid>\tВідкрити Vim в іншому елементі інтерфейсу GTK"
 
+msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
+msgstr "--echo-wid\t\tХай gvim надрукує ідентифікатор вікна на stdout"
+
 msgid "-P <parent title>\tOpen Vim inside parent application"
 msgstr "-P <заголовок батька>\tВідкрити Vim всередині батьківського вікна"
 
@@ -3326,7 +3359,7 @@
 
 #, c-format
 msgid "E283: No marks matching \"%s\""
-msgstr "E283: Помітку \"%s\" не знайдено"
+msgstr "E283: Помітку «%s» не знайдено"
 
 # msgstr "E283: "
 #. Highlight title
@@ -3355,7 +3388,6 @@
 "змінити ряд. стовп. текст"
 
 # TODO
-#, c-format
 msgid ""
 "\n"
 "# File marks:\n"
@@ -3364,7 +3396,6 @@
 "# Помітки:\n"
 
 #. Write the jumplist with -'
-#, c-format
 msgid ""
 "\n"
 "# Jumplist (newest first):\n"
@@ -3373,7 +3404,6 @@
 "# Список переходів (від найновіших):\n"
 
 # TODO
-#, c-format
 msgid ""
 "\n"
 "# History of marks within files (newest to oldest):\n"
@@ -3439,6 +3469,9 @@
 msgid "E298: Didn't get block nr 2?"
 msgstr "E298: Немає блоку 2?"
 
+msgid "E843: Error while updating swap file crypt"
+msgstr "E843: Помилка поновлення шифрування файлу обміну"
+
 #. could not (re)open the swap file, what can we do????
 msgid "E301: Oops, lost the swap file!!!"
 msgstr "E301: Ой, втрачено файл обміну!!!"
@@ -3451,7 +3484,7 @@
 #, c-format
 msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
 msgstr ""
-"E303: Не вдалося прочитати файл обміну для \"%s\", відновлення неможливе"
+"E303: Не вдалося прочитати файл обміну для «%s», відновлення неможливе"
 
 msgid "E304: ml_upd_block0(): Didn't get block 0??"
 msgstr "E304: ml_upd_block0(): Немає блоку 0??"
@@ -3511,18 +3544,18 @@
 
 #, c-format
 msgid "Using swap file \"%s\""
-msgstr "Використовується файл обміну \"%s\""
+msgstr "Використовується файл обміну «%s»"
 
 #, c-format
 msgid "Original file \"%s\""
-msgstr "Початковий файл \"%s\""
+msgstr "Початковий файл «%s»"
 
 msgid "E308: Warning: Original file may have been changed"
 msgstr "E308: Застереження: Можливо, початковий файл було змінено"
 
 #, c-format
 msgid "Swap file is encrypted: \"%s\""
-msgstr "Файл обміну зашифрований: \"%s\""
+msgstr "Файл обміну зашифрований: «%s»"
 
 msgid ""
 "\n"
@@ -3597,7 +3630,7 @@
 "починаються з ???"
 
 msgid "See \":help E312\" for more information."
-msgstr "Див. \":help E312\" для уточнення."
+msgstr "Див. «:help E312» для уточнення."
 
 msgid "Recovery completed. You should check if everything is OK."
 msgstr "Відновлення закінчено, перевірте чи все гаразд."
@@ -3787,7 +3820,7 @@
 
 #, c-format
 msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: Циклічні символьні посилання \"%s\""
+msgstr "E773: Циклічні символьні посилання «%s»"
 
 # msgstr "E317: "
 msgid "E325: ATTENTION"
@@ -3810,54 +3843,50 @@
 #. * other languages.
 msgid ""
 "\n"
-"(1) Another program may be editing the same file.\n"
-"    If this is the case, be careful not to end up with two\n"
-"    different instances of the same file when making changes.\n"
+"(1) Another program may be editing the same file.  If this is the case,\n"
+"    be careful not to end up with two different instances of the same\n"
+"    file when making changes."
 msgstr ""
 "\n"
-"(1) Можливо, інша програма вже редагує цей самий файл.\n"
-"    Будьте обережні, щоб не залишилися два різні екземпляри\n"
-"    одного й того самого файлу після змін.\n"
+"(1) Можливо, інша програма вже редагує цей самий файл. Якщо це так,\n"
+"    будьте обережні, щоб не залишилися два різні екземпляри\n"
+"    одного й того самого файлу після змін."
 
-msgid "    Quit, or continue with caution.\n"
-msgstr "    Вийдіть, або продовжуйте обережно.\n"
+msgid "  Quit, or continue with caution.\n"
+msgstr "  Вийдіть або продовжуйте обережно.\n"
 
-msgid ""
-"\n"
-"(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Сеанс редагування цього файлу зазнав краху.\n"
+msgid "(2) An edit session for this file crashed.\n"
+msgstr "(2) Сеанс редагування цього файлу зазнав краху.\n"
 
 msgid "    If this is the case, use \":recover\" or \"vim -r "
-msgstr "    Якщо це справді трапилося, спробуйте \":recover\" або \"vim -r "
+msgstr "    Якщо це справді трапилося, спробуйте «:recover» або «vim -r "
 
 msgid ""
 "\"\n"
 "    to recover the changes (see \":help recovery\").\n"
 msgstr ""
-"\"\n"
-"    щоб відновити зміни (див. \":help recovery\").\n"
+"»\n"
+"    щоб відновити зміни (див. «:help recovery»).\n"
 
 msgid "    If you did this already, delete the swap file \""
-msgstr "    Якщо ви вже це зробили, знищіть файл обміну \""
+msgstr "    Якщо ви вже це зробили, знищіть файл обміну «"
 
 msgid ""
 "\"\n"
 "    to avoid this message.\n"
 msgstr ""
-"\"\n"
+"»,\n"
 "    щоб позбутися цього повідомлення.\n"
 "\n"
 
 msgid "Swap file \""
-msgstr "Файл обміну \""
+msgstr "Файл обміну «"
 
 msgid "\" already exists!"
-msgstr "\" вже існує!"
+msgstr "» вже існує!"
 
 msgid "VIM - ATTENTION"
-msgstr "VIM -- УВАГА"
+msgstr "VIM — УВАГА"
 
 msgid "Swap file already exists!"
 msgstr "Файл обміну вже існує!"
@@ -3904,7 +3933,7 @@
 # msgstr "E328: "
 #, c-format
 msgid "E329: No menu \"%s\""
-msgstr "E329: Немає меню \"%s\""
+msgstr "E329: Немає меню «%s»"
 
 #. Only a mnemonic or accelerator is not valid.
 msgid "E792: Empty menu name"
@@ -3954,7 +3983,7 @@
 
 # msgstr "E336: "
 msgid "E337: Menu not found - check menu names"
-msgstr "E337: Меню не знайдено -- перевірте назву"
+msgstr "E337: Меню не знайдено — перевірте назву"
 
 # msgstr "E337: "
 #, c-format
@@ -4070,7 +4099,6 @@
 msgid "Vim: Finished.\n"
 msgstr "Vim: Завершено.\n"
 
-#, c-format
 msgid "ERROR: "
 msgstr "ПОМИЛКА: "
 
@@ -4106,7 +4134,7 @@
 # msgstr "E342: "
 #, c-format
 msgid "Calling shell to execute: \"%s\""
-msgstr "Викликається оболонка щоб виконати: \"%s\""
+msgstr "Викликається оболонка щоб виконати: «%s»"
 
 msgid "E545: Missing colon"
 msgstr "E545: Пропущено двокрапку"
@@ -4132,6 +4160,9 @@
 msgid "Keys don't match!"
 msgstr "Ключі не однакові!"
 
+msgid "E854: path too long for completion"
+msgstr "E854: шлях занадто довгий для доповнення"
+
 #, c-format
 msgid ""
 "E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -4143,22 +4174,22 @@
 # msgstr "E343: "
 #, c-format
 msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: Не вдалося знайти каталог \"%s\" у cdpath"
+msgstr "E344: Не вдалося знайти каталог «%s» у cdpath"
 
 # msgstr "E344: "
 #, c-format
 msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: Не вдалося знайти файл \"%s\" у path"
+msgstr "E345: Не вдалося знайти файл «%s» у path"
 
 # msgstr "E345: "
 #, c-format
 msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: У cdpath немає більше каталогу \"%s\""
+msgstr "E346: У cdpath немає більше каталогу «%s»"
 
 # msgstr "E346: "
 #, c-format
 msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: У шляху пошуку більше немає файлів \"%s\""
+msgstr "E347: У шляху пошуку більше немає файлів «%s»"
 
 msgid "Cannot connect to Netbeans #2"
 msgstr "Не вдалося з'єднатися із Netbeans #2"
@@ -4170,7 +4201,7 @@
 msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
 msgstr ""
 "E668: Неправильний режим доступу до файлу інформації про з'єднання з "
-"NetBenans: \"%s\""
+"NetBenans: «%s»"
 
 msgid "read from Netbeans socket"
 msgstr "читається з сокета Netbeans"
@@ -4179,11 +4210,15 @@
 msgid "E658: NetBeans connection lost for buffer %ld"
 msgstr "E658: Втрачено зв'язок із NetBeans для буфера %ld"
 
+msgid "E838: netbeans is not supported with this GUI"
+msgstr "E838: netbeans не підтримується з цим GUI"
+
 msgid "E511: netbeans already connected"
 msgstr "E511: netbeans вже під'єднано"
 
-msgid "E505: "
-msgstr "E505: "
+#, c-format
+msgid "E505: %s is read-only (add ! to override)"
+msgstr "E505: %s тільки для читання (! щоб не зважати)"
 
 # msgstr "E348: "
 msgid "E349: No identifier under cursor"
@@ -4327,8 +4362,8 @@
 "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
 "%ld"
 msgstr ""
-"Колонка %s з %s; рядок %ld з %ld; слово %ld з %ld; символ %ld of %ld; байт %"
-"ld з %ld"
+"Колонка %s з %s; рядок %ld з %ld; слово %ld з %ld; символ %ld of %ld; байт "
+"%ld з %ld"
 
 #, c-format
 msgid "(+%ld for BOM)"
@@ -4349,6 +4384,9 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Не дозволено у modeline"
 
+msgid "E846: Key code not set"
+msgstr "E846: Код ключа не встановлено"
+
 msgid "E521: Number required after ="
 msgstr "E521: Після = потрібно вказати число"
 
@@ -4366,7 +4404,7 @@
 msgstr "E530: Не вдалося змінити term в GUI"
 
 msgid "E531: Use \":gui\" to start the GUI"
-msgstr "E531: Застосуйте \":gui\" для запуску GUI"
+msgstr "E531: Застосуйте «:gui» для запуску GUI"
 
 msgid "E589: 'backupext' and 'patchmode' are equal"
 msgstr "E589: Опції 'backupext' і 'patchmode' однакові"
@@ -4584,16 +4622,12 @@
 
 #, c-format
 msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-msgstr "E244: Некоректна назва набору символів \"%s\" у назві шрифту \"%s\""
+msgstr "E244: Некоректна назва набору символів «%s» у назві шрифту «%s»"
 
 #, c-format
 msgid "E245: Illegal char '%c' in font name \"%s\""
-msgstr "E245: Помилковий символ %c в назві шрифту \"%s\""
+msgstr "E245: Помилковий символ %c в назві шрифту «%s»"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Неправильна опція 'osfiletype' -- буде `Text'"
-
-# msgstr "E366: "
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Двічі отримано сигнал, вихід\n"
 
@@ -4684,7 +4718,7 @@
 
 #, c-format
 msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
+msgstr "dlerror = «%s»"
 
 msgid "Opening the X display failed"
 msgstr "Не вдалося відкрити дисплей X"
@@ -4815,7 +4849,7 @@
 
 #, c-format
 msgid "Cannot open file \"%s\""
-msgstr "Не вдалося відкрити файл \"%s\""
+msgstr "Не вдалося відкрити файл «%s»"
 
 msgid "E681: Buffer is not loaded"
 msgstr "E681: Буфер не завантажено"
@@ -5075,13 +5109,17 @@
 msgstr "E756: Перевірка орфографії не дозволена"
 
 #, c-format
+msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
+msgstr "Застереження: Не вдалося знайти список слів «%s_%s.spl» чи «%s_ascii.spl»"
+
+#, c-format
 msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
 msgstr ""
-"Застереження: Не вдалося знайти список слів \"%s.%s.spl\" чи \"%s.ascii.spl\""
+"Застереження: Не вдалося знайти список слів «%s.%s.spl» чи «%s.ascii.spl»"
 
 #, c-format
 msgid "Reading spell file \"%s\""
-msgstr "Читається файл орфографії \"%s\""
+msgstr "Читається файл орфографії «%s»"
 
 msgid "E757: This does not look like a spell file"
 msgstr "E757: Не схоже на файл орфографії"
@@ -5300,6 +5338,9 @@
 msgid "Ignored %d words with non-ASCII characters"
 msgstr "Проігноровано %d слів із не-ASCII символами"
 
+msgid "E845: Insufficient memory, word list will be incomplete"
+msgstr "E845: Недостатньо пам’яті, список слів буде неповним"
+
 #, c-format
 msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
 msgstr "Стиснено %d з %d вузлів; залишилося %d (%d%%)"
@@ -5376,11 +5417,11 @@
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
-msgstr "Замінити \"%.*s\" на:"
+msgstr "Замінити «%.*s» на:"
 
 #, c-format
 msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
+msgstr " < «%.*s»"
 
 # msgstr "E34: "
 msgid "E752: No previous spell replacement"
@@ -5480,6 +5521,10 @@
 msgid "E395: contains argument not accepted here"
 msgstr "E395: Містить неприйнятні тут аргументи"
 
+# msgstr "E14: "
+msgid "E844: invalid cchar value"
+msgstr "E844: Некоректне значення cchar"
+
 msgid "E393: group[t]here not accepted here"
 msgstr "E393: group[t]hete тут неприйнятний"
 
@@ -5491,6 +5536,9 @@
 msgid "E397: Filename required"
 msgstr "E397: Потрібна назва файлу"
 
+msgid "E847: Too many syntax includes"
+msgstr "E847: Забагато синтаксичних включень"
+
 #, c-format
 msgid "E789: Missing ']': %s"
 msgstr "E789: Пропущено ']': %s"
@@ -5504,6 +5552,9 @@
 msgid "E399: Not enough arguments: syntax region %s"
 msgstr "E399: Бракує аргументів: синтаксичний регіон %s"
 
+msgid "E848: Too many syntax clusters"
+msgstr "E848: Забагато синтаксичних кластерів"
+
 msgid "E400: No cluster specified"
 msgstr "E400: Кластер не вказано"
 
@@ -5563,12 +5614,12 @@
 # msgstr "E411: "
 #, c-format
 msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Недостатньо аргументів: \":highlight link %s\""
+msgstr "E412: Недостатньо аргументів: «:highlight link %s»"
 
 # msgstr "E412: "
 #, c-format
 msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Забагато аргументів: \":highlight link %s\""
+msgstr "E413: Забагато аргументів: «:highlight link %s»"
 
 # msgstr "E413: "
 msgid "E414: group has settings, highlight link ignored"
@@ -5626,6 +5677,9 @@
 msgid "W18: Invalid character in group name"
 msgstr "W18: Некоректний символ у назві групи"
 
+msgid "E849: Too many highlight and syntax groups"
+msgstr "E849: Забагато груп підсвічування і синтаксису"
+
 # msgstr "E424: "
 msgid "E555: at bottom of tag stack"
 msgstr "E555: Кінець стеку теґів"
@@ -5643,13 +5697,13 @@
 
 # msgstr "E426: "
 msgid "  # pri kind tag"
-msgstr "  # прі тип  теґ"
+msgstr "  # прі тип теґ"
 
 msgid "file\n"
 msgstr "файл\n"
 
 msgid "E427: There is only one matching tag"
-msgstr "E427: Лише однин відповідний теґ"
+msgstr "E427: Лише один відповідний теґ"
 
 # msgstr "E427: "
 msgid "E428: Cannot go beyond last matching tag"
@@ -5658,7 +5712,7 @@
 # msgstr "E428: "
 #, c-format
 msgid "File \"%s\" does not exist"
-msgstr "Файл \"%s\" не існує"
+msgstr "Файл «%s» не існує"
 
 #. Give an indication of the number of matching tags
 #, c-format
@@ -5673,7 +5727,7 @@
 
 #, c-format
 msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Файл \"%s\" не існує"
+msgstr "E429: Файл «%s» не існує"
 
 # msgstr "E429: "
 #. Highlight title
@@ -5692,10 +5746,13 @@
 msgid "E430: Tag file path truncated for %s\n"
 msgstr "E430: Шлях файлу теґів скорочено до %s\n"
 
+msgid "Ignoring long line in tags file"
+msgstr "Ігнорується довгий рядок у файлі з позначками"
+
 # msgstr "E430: "
 #, c-format
 msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: Помилка формату у файлі теґів \"%s\""
+msgstr "E431: Помилка формату у файлі теґів «%s»"
 
 # msgstr "E431: "
 #, c-format
@@ -5711,9 +5768,6 @@
 msgid "E433: No tags file"
 msgstr "E433: Немає файлу теґів"
 
-msgid "Ignoring long line in tags file"
-msgstr "Ігнорується довгий рядок у файлі з позначками"
-
 # msgstr "E433: "
 msgid "E434: Can't find tag pattern"
 msgstr "E434: Не вдалося знайти зразок теґу"
@@ -5744,10 +5798,10 @@
 
 #, c-format
 msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Немає запису \"%s\" про можливості терміналу"
+msgstr "E436: Немає запису «%s» про можливості терміналу"
 
 msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: Потрібна можливість терміналу \"cm\""
+msgstr "E437: Потрібна можливість терміналу «cm»"
 
 #. Highlight title
 msgid ""
@@ -5892,8 +5946,8 @@
 msgid "Nothing to undo"
 msgstr "Немає нічого скасовувати"
 
-msgid "number changes  time            saved"
-msgstr "номер  змін     час             збережено"
+msgid "number changes  when               saved"
+msgstr "номер  зміни    час             збережено"
 
 #, c-format
 msgid "%ld seconds ago"
@@ -5998,13 +6052,6 @@
 
 msgid ""
 "\n"
-"RISC OS version"
-msgstr ""
-"\n"
-"Версія для RISC OS"
-
-msgid ""
-"\n"
 "OpenVMS version"
 msgstr ""
 "\n"
@@ -6169,7 +6216,7 @@
 msgstr "автор: Bram Moolenaar та ін."
 
 msgid "Vim is open source and freely distributable"
-msgstr "Vim -- це відкрита й вільно розповсюджувана програма"
+msgstr "Vim — це відкрита й вільно розповсюджувана програма"
 
 msgid "Help poor children in Uganda!"
 msgstr "Допоможіть сиротам з Уганди!"
@@ -6271,7 +6318,7 @@
 # msgstr "E446: "
 #, c-format
 msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: Файл \"%s\" не знайдено у шляху пошуку"
+msgstr "E447: Файл «%s» не знайдено у шляху пошуку"
 
 #, c-format
 msgid "E370: Could not load library %s"
@@ -6373,7 +6420,7 @@
 # msgstr "E235: "
 #, c-format
 msgid "E236: Font \"%s\" is not fixed-width"
-msgstr "E236: Шрифт \"%s\" не моноширинний"
+msgstr "E236: Шрифт «%s» не моноширинний"
 
 msgid "E473: Internal error"
 msgstr "E473: Внутрішня помилка"
@@ -6406,11 +6453,11 @@
 
 #, c-format
 msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" -- це каталог"
+msgstr "E17: «%s» — це каталог"
 
 #, c-format
 msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: Бібліотечний виклик до \"%s()\" не вдався"
+msgstr "E364: Бібліотечний виклик до «%s()» не вдався"
 
 #, c-format
 msgid "E448: Could not load library function %s"
@@ -6506,7 +6553,7 @@
 
 #, c-format
 msgid "E247: no registered server named \"%s\""
-msgstr "E247: Немає зареєстрованих серверів з назвою \"%s\""
+msgstr "E247: Немає зареєстрованих серверів з назвою «%s»"
 
 # msgstr "E36: "
 #, c-format
@@ -6573,11 +6620,11 @@
 
 #, c-format
 msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Змінна тільки для читання: \"%s\""
+msgstr "E46: Змінна тільки для читання: «%s»"
 
 #, c-format
 msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: Не можна встановити змінну у пісочниці: \"%s\""
+msgstr "E794: Не можна встановити змінну у пісочниці: «%s»"
 
 msgid "E47: Error while reading errorfile"
 msgstr "E47: Помилка читання файлу помилок"
@@ -6674,6 +6721,9 @@
 msgid "E764: Option '%s' is not set"
 msgstr "E764: Опція '%s' не встановлена"
 
+msgid "E850: Invalid register name"
+msgstr "E850: Неправильна назва регістру"
+
 msgid "search hit TOP, continuing at BOTTOM"
 msgstr "Пошук дійшов до ПОЧАТКУ, продовжується з КІНЦЯ"
 
@@ -6682,7 +6732,17 @@
 
 #, c-format
 msgid "Need encryption key for \"%s\""
-msgstr "Для \"%s\" потрібен ключ: "
+msgstr "Для «%s» потрібен ключ: "
+
+msgid "can't delete OutputObject attributes"
+msgstr "не вдалося знищити атрибути OutputObject"
+
+msgid "softspace must be an integer"
+msgstr "softspace має бути цілим"
+
+# msgstr "E180: "
+msgid "invalid attribute"
+msgstr "неправильний атрибут"
 
 msgid "writelines() requires list of strings"
 msgstr "для writelines() потрібен список рядків"
@@ -6693,6 +6753,61 @@
 msgid "no such buffer"
 msgstr "такого буфера немає"
 
+# msgstr "E406: "
+msgid "empty keys are not allowed"
+msgstr "порожні ключі не дозволені"
+
+msgid "failed to add key to dictionary"
+msgstr "не вдалося додати ключ до словника"
+
+msgid "Cannot delete DictionaryObject attributes"
+msgstr "не вдалося знищити атрибути DictionaryObject"
+
+msgid "Cannot modify fixed dictionary"
+msgstr "Не можна змінити фіксований словник"
+
+msgid "Only boolean objects are allowed"
+msgstr "Дозволено тільки логічні об’єкти"
+
+msgid "Cannot set this attribute"
+msgstr "Не можна встановити цей атрибут"
+
+msgid "no such key in dictionary"
+msgstr "немає такого ключа в словнику"
+
+msgid "dict is locked"
+msgstr "словник заблоковано"
+
+msgid "internal error: failed to get vim list item"
+msgstr "внутрішня помилка: не вдалося отримати елемент списку vim"
+
+msgid "list is locked"
+msgstr "список заблоковано"
+
+msgid "Failed to add item to list"
+msgstr "Не вдалося додати елемент до списку"
+
+msgid "internal error: no vim list item"
+msgstr "внутрішня помилка: немає елемента списку vim"
+
+msgid "can only assign lists to slice"
+msgstr "можна присвоювати списки тільки зрізам"
+
+msgid "internal error: failed to add item to list"
+msgstr "внутрішня помилка: не вдалося додати елемент до списку"
+
+msgid "can only concatenate with lists"
+msgstr "можна з’єднувати тільки зі списками"
+
+msgid "Cannot modify fixed list"
+msgstr "Не можна змінити фіксований список"
+
+msgid "'self' argument must be a dictionary"
+msgstr "Аргумент «self» має бути словником"
+
+msgid "failed to run function"
+msgstr "Не вдалося виконати функцію"
+
 msgid "attempt to refer to deleted window"
 msgstr "спроба звернутися до знищеного вікна"
 
@@ -6720,43 +6835,11 @@
 msgid "attempt to refer to deleted buffer"
 msgstr "спроба звернення до знищеного буфера"
 
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <назва>\t\tВикористати ресурси, ніби vim має задану <назву>"
-
-#~ msgid "\t\t\t  (Unimplemented)\n"
-#~ msgstr "\t\t\t  (Не діє)\n"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396: Аргумент containedin тут неприйнятний"
-
-# msgstr "E232: "
-#~ msgid "Vim dialog..."
-#~ msgstr "Діалог Vim..."
-
-# msgstr "E234: "
-#~ msgid "Font Selection"
-#~ msgstr "Вибрати шрифт"
-
-# msgstr "E289: "
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290: Стиль over-the-spot вимагає набір шрифтів"
-
-# msgstr "E290: "
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291: У вас старша за 1.2.3 версія GTK+. Область стану вимкнено"
-
-# msgstr "E291: "
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292: Сервер методу вводу не функціонує"
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr "з GUI GTK-GNOME."
-
-#~ msgid "with GTK GUI."
-#~ msgstr "з GUI GTK."
+msgid "unable to convert to vim structure"
+msgstr "не вдалося перетворити до структури vim"
 
-#~ msgid "[NL found]"
-#~ msgstr "[Знайдено NL]"
+msgid "NULL reference passed"
+msgstr "передано посилання NULL"
 
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: Кількість з'єднань з cscope досягла максимуму"
+msgid "internal error: invalid value type"
+msgstr "внутрішня помилка: неправильний тип значення"
diff -Naur vim73.orig/src/po/vi.po vim73/src/po/vi.po
--- vim73.orig/src/po/vi.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/vi.po	2013-08-04 19:09:10.840609834 +0000
@@ -1785,21 +1785,6 @@
 msgstr "Hủy thao tác"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Không nạp được phông chữ Zap '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: Không sử dụng được phông chữ %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"Gửi thông báo để \"hủy diệt\" (dừng) tiến trình con.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Không tìm được tiêu đề cửa sổ \"%s\""
 
@@ -3801,9 +3786,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Ký tự không cho phép '%c' trong tên phông chữ \"%s\""
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: Giá trị tùy chọn 'osfiletype' không cho phép - sử dụng Text"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: Tín hiệu đôi, thoát\n"
 
diff -Naur vim73.orig/src/po/zh_CN.UTF-8.po vim73/src/po/zh_CN.UTF-8.po
--- vim73.orig/src/po/zh_CN.UTF-8.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/zh_CN.UTF-8.po	2013-08-04 19:09:10.847276480 +0000
@@ -241,9 +241,8 @@
 msgid " Tag completion (^]^N^P)"
 msgstr " Tag 补全 (^]^N^P)"
 
-#, fuzzy
-#~ msgid " Path pattern completion (^N^P)"
-#~ msgstr " 路径模式补全 (^N^P)"
+msgid " Path pattern completion (^N^P)"
+msgstr " 头文件模式补全 (^N^P)"
 
 msgid " Definition completion (^D^N^P)"
 msgstr " 定义补全 (^D^N^P)"
@@ -2016,21 +2015,6 @@
 msgstr "撤销(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: 无法加载 Zap 字体 '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: 无法使用字体 %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"正在发送消息终止子进程。\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: 找不到窗口标题 \"%s\""
 
@@ -4226,9 +4210,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: 不正确的字符 '%c' 出现在字体名称 \"%s\" 内"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: 不正确的 'osfiletype' 选项 - 使用纯文字模式"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: 双重信号，退出中\n"
 
@@ -5302,7 +5283,7 @@
 
 #. must display the prompt
 msgid "No undo possible; continue anyway"
-msgstr "无法撤销；请继续"
+msgstr "无法撤销；仍然继续"
 
 msgid "Already at oldest change"
 msgstr "已位于最旧的改变"
@@ -5619,13 +5600,13 @@
 msgstr "输入  :help cp-default<Enter> 查看相关说明    "
 
 msgid "menu  Help->Orphans           for information    "
-msgstr "菜单  Help->Orphans           查看说明           "
+msgstr "菜单  帮助->孤儿           查看说明           "
 
 msgid "Running modeless, typed text is inserted"
 msgstr "无模式运行，输入文字即插入"
 
 msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
-msgstr "菜单  Edit->Global Settings->Toggle Insert Mode  "
+msgstr "菜单  编辑->全局设定->开/关插入模式  "
 
 #, fuzzy
 #~ msgid "                              for two modes      "
diff -Naur vim73.orig/src/po/zh_CN.cp936.po vim73/src/po/zh_CN.cp936.po
--- vim73.orig/src/po/zh_CN.cp936.po	2010-08-15 13:02:25.000000000 +0000
+++ vim73/src/po/zh_CN.cp936.po	2013-08-04 19:09:10.850609804 +0000
@@ -2016,21 +2016,6 @@
 msgstr "(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: ޷ Zap  '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ޷ʹ %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ڷϢֹӽ̡\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ҳڱ \"%s\""
 
@@ -4226,9 +4211,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: ȷַ '%c'  \"%s\" "
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ȷ 'osfiletype' ѡ - ʹôģʽ"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: ˫źţ˳\n"
 
diff -Naur vim73.orig/src/po/zh_CN.po vim73/src/po/zh_CN.po
--- vim73.orig/src/po/zh_CN.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/zh_CN.po	2013-08-04 19:09:10.857276450 +0000
@@ -2016,21 +2016,6 @@
 msgstr "(&U)"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: ޷ Zap  '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: ޷ʹ %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"ڷϢֹӽ̡\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: Ҳڱ \"%s\""
 
@@ -4226,9 +4211,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: ȷַ '%c'  \"%s\" "
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: ȷ 'osfiletype' ѡ - ʹôģʽ"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: ˫źţ˳\n"
 
diff -Naur vim73.orig/src/po/zh_TW.UTF-8.po vim73/src/po/zh_TW.UTF-8.po
--- vim73.orig/src/po/zh_TW.UTF-8.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/zh_TW.UTF-8.po	2013-08-04 19:09:10.863943097 +0000
@@ -1806,21 +1806,6 @@
 msgstr "復原"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: 無法開啟 Zap 字型 '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: 無法使用字型 %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"送出中斷子程式的訊息中.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: 找不到標題為 \"%s\" 的視窗"
 
@@ -3785,9 +3770,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: 不正確的字元 '%c' 出現在字型名稱 \"%s\" 內"
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: 不正確的 'filetype' 選項 - 使用純文字模式"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: 雙重signal, 離開中\n"
 
diff -Naur vim73.orig/src/po/zh_TW.po vim73/src/po/zh_TW.po
--- vim73.orig/src/po/zh_TW.po	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/po/zh_TW.po	2013-08-04 19:09:10.867276420 +0000
@@ -1799,21 +1799,6 @@
 msgstr "_"
 
 #, c-format
-msgid "E610: Can't load Zap font '%s'"
-msgstr "E610: Lk} Zap r '%s'"
-
-#, c-format
-msgid "E611: Can't use font %s"
-msgstr "E611: LkϥΦr %s"
-
-msgid ""
-"\n"
-"Sending message to terminate child process.\n"
-msgstr ""
-"\n"
-"eX_l{T.\n"
-
-#, c-format
 msgid "E671: Cannot find window title \"%s\""
 msgstr "E671: 䤣D \"%s\" "
 
@@ -3778,9 +3763,6 @@
 msgid "E245: Illegal char '%c' in font name \"%s\""
 msgstr "E245: Tr '%c' X{brW \"%s\" "
 
-msgid "E366: Invalid 'osfiletype' option - using Text"
-msgstr "E366: T 'filetype' ﶵ - ϥί¤rҦ"
-
 msgid "Vim: Double signal, exiting\n"
 msgstr "Vim: signal, }\n"
 
diff -Naur vim73.orig/src/popupmnu.c vim73/src/popupmnu.c
--- vim73.orig/src/popupmnu.c	2010-08-08 13:14:58.000000000 +0000
+++ vim73/src/popupmnu.c	2013-08-04 19:09:10.870609744 +0000
@@ -558,8 +558,11 @@
 	    win_T	*curwin_save = curwin;
 	    int		res = OK;
 
-	    /* Open a preview window.  3 lines by default. */
+	    /* Open a preview window.  3 lines by default.  Prefer
+	     * 'previewheight' if set and smaller. */
 	    g_do_tagpreview = 3;
+	    if (p_pvh > 0 && p_pvh < g_do_tagpreview)
+		g_do_tagpreview = p_pvh;
 	    resized = prepare_tagpreview(FALSE);
 	    g_do_tagpreview = 0;
 
diff -Naur vim73.orig/src/proto/buffer.pro vim73/src/proto/buffer.pro
--- vim73.orig/src/proto/buffer.pro	2010-08-15 12:30:19.000000000 +0000
+++ vim73/src/proto/buffer.pro	2013-08-04 19:09:10.873943067 +0000
@@ -1,7 +1,7 @@
 /* buffer.c */
 int open_buffer __ARGS((int read_stdin, exarg_T *eap, int flags));
 int buf_valid __ARGS((buf_T *buf));
-void close_buffer __ARGS((win_T *win, buf_T *buf, int action));
+void close_buffer __ARGS((win_T *win, buf_T *buf, int action, int abort_if_last));
 void buf_clear_file __ARGS((buf_T *buf));
 void buf_freeall __ARGS((buf_T *buf, int flags));
 void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
@@ -17,7 +17,7 @@
 void buflist_getfpos __ARGS((void));
 buf_T *buflist_findname_exp __ARGS((char_u *fname));
 buf_T *buflist_findname __ARGS((char_u *ffname));
-int buflist_findpat __ARGS((char_u *pattern, char_u *pattern_end, int unlisted, int diffmode));
+int buflist_findpat __ARGS((char_u *pattern, char_u *pattern_end, int unlisted, int diffmode, int curtab_only));
 int ExpandBufnames __ARGS((char_u *pat, int *num_file, char_u ***file, int options));
 buf_T *buflist_findnr __ARGS((int nr));
 char_u *buflist_nr2name __ARGS((int n, int fullname, int helptail));
@@ -51,7 +51,7 @@
 void do_modelines __ARGS((int flags));
 int read_viminfo_bufferlist __ARGS((vir_T *virp, int writing));
 void write_viminfo_bufferlist __ARGS((FILE *fp));
-char *buf_spname __ARGS((buf_T *buf));
+char_u *buf_spname __ARGS((buf_T *buf));
 void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr));
 linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr));
 int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type));
@@ -60,6 +60,7 @@
 int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum));
 int buf_findsigntype_id __ARGS((buf_T *buf, linenr_T lnum, int typenr));
 int buf_signcount __ARGS((buf_T *buf, linenr_T lnum));
+void buf_delete_signs __ARGS((buf_T *buf));
 void buf_delete_all_signs __ARGS((void));
 void sign_list_placed __ARGS((buf_T *rbuf));
 void sign_mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
diff -Naur vim73.orig/src/proto/charset.pro vim73/src/proto/charset.pro
--- vim73.orig/src/proto/charset.pro	2010-08-15 12:30:20.000000000 +0000
+++ vim73/src/proto/charset.pro	2013-08-04 19:09:10.877276390 +0000
@@ -19,8 +19,9 @@
 int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
 int vim_isIDc __ARGS((int c));
 int vim_iswordc __ARGS((int c));
+int vim_iswordc_buf __ARGS((int c, buf_T *buf));
 int vim_iswordp __ARGS((char_u *p));
-int vim_iswordc_buf __ARGS((char_u *p, buf_T *buf));
+int vim_iswordp_buf __ARGS((char_u *p, buf_T *buf));
 int vim_isfilec __ARGS((int c));
 int vim_isfilec_or_wc __ARGS((int c));
 int vim_isprintc __ARGS((int c));
diff -Naur vim73.orig/src/proto/digraph.pro vim73/src/proto/digraph.pro
--- vim73.orig/src/proto/digraph.pro	2010-08-15 12:30:22.000000000 +0000
+++ vim73/src/proto/digraph.pro	2013-08-04 19:09:10.880609714 +0000
@@ -1,7 +1,7 @@
 /* digraph.c */
 int do_digraph __ARGS((int c));
 int get_digraph __ARGS((int cmdline));
-int getdigraph __ARGS((int char1, int char2, int meta));
+int getdigraph __ARGS((int char1, int char2, int meta_char));
 void putdigraph __ARGS((char_u *str));
 void listdigraphs __ARGS((void));
 char_u *keymap_init __ARGS((void));
diff -Naur vim73.orig/src/proto/edit.pro vim73/src/proto/edit.pro
--- vim73.orig/src/proto/edit.pro	2010-08-15 12:30:22.000000000 +0000
+++ vim73/src/proto/edit.pro	2013-08-04 19:09:10.880609714 +0000
@@ -39,4 +39,5 @@
 int hkmap __ARGS((int c));
 void ins_scroll __ARGS((void));
 void ins_horscroll __ARGS((void));
+int ins_copychar __ARGS((linenr_T lnum));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/eval.pro vim73/src/proto/eval.pro
--- vim73.orig/src/proto/eval.pro	2010-08-15 12:30:23.000000000 +0000
+++ vim73/src/proto/eval.pro	2013-08-04 19:09:10.883943037 +0000
@@ -23,8 +23,9 @@
 list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
 int get_spellword __ARGS((list_T *list, char_u **pp));
 typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
-void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv));
 long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
 void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
 void *save_funccal __ARGS((void));
 void restore_funccal __ARGS((void *vfc));
@@ -32,6 +33,8 @@
 void prof_child_exit __ARGS((proftime_T *tm));
 int eval_foldexpr __ARGS((char_u *arg, int *cp));
 void ex_let __ARGS((exarg_T *eap));
+void list_add_watch __ARGS((list_T *l, listwatch_T *lw));
+void list_rem_watch __ARGS((list_T *l, listwatch_T *lwrem));
 void *eval_for_line __ARGS((char_u *arg, int *errp, char_u **nextcmdp, int skip));
 int next_for_item __ARGS((void *fi_void, char_u *arg));
 void free_for_info __ARGS((void *fi_void));
@@ -45,13 +48,25 @@
 list_T *list_alloc __ARGS((void));
 void list_unref __ARGS((list_T *l));
 void list_free __ARGS((list_T *l, int recurse));
+listitem_T *listitem_alloc __ARGS((void));
+void listitem_free __ARGS((listitem_T *item));
+void listitem_remove __ARGS((list_T *l, listitem_T *item));
 dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
+listitem_T *list_find __ARGS((list_T *l, long n));
 char_u *list_find_str __ARGS((list_T *l, long idx));
+void list_append __ARGS((list_T *l, listitem_T *item));
 int list_append_tv __ARGS((list_T *l, typval_T *tv));
 int list_append_dict __ARGS((list_T *list, dict_T *dict));
 int list_append_string __ARGS((list_T *l, char_u *str, int len));
+int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
 int garbage_collect __ARGS((void));
+void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+void set_ref_in_list __ARGS((list_T *l, int copyID));
+void set_ref_in_item __ARGS((typval_T *tv, int copyID));
 dict_T *dict_alloc __ARGS((void));
+void dict_unref __ARGS((dict_T *d));
+void dict_free __ARGS((dict_T *d, int recurse));
 dictitem_T *dictitem_alloc __ARGS((char_u *key));
 void dictitem_free __ARGS((dictitem_T *item));
 int dict_add __ARGS((dict_T *d, dictitem_T *item));
@@ -62,6 +77,10 @@
 long get_dict_number __ARGS((dict_T *d, char_u *key));
 char_u *get_function_name __ARGS((expand_T *xp, int idx));
 char_u *get_expr_name __ARGS((expand_T *xp, int idx));
+int func_call __ARGS((char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv));
+void dict_extend __ARGS((dict_T *d1, dict_T *d2, char_u *action));
+void mzscheme_call_vim __ARGS((char_u *name, typval_T *args, typval_T *rettv));
+float_T vim_round __ARGS((float_T f));
 long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
 void set_vim_var_nr __ARGS((int idx, long val));
 long get_vim_var_nr __ARGS((int idx));
@@ -81,7 +100,8 @@
 char_u *get_tv_string_chk __ARGS((typval_T *varp));
 char_u *get_var_value __ARGS((char_u *name));
 void new_script_vars __ARGS((scid_T id));
-void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
+void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var, int scope));
+void unref_var_dict __ARGS((dict_T *dict));
 void vars_clear __ARGS((hashtab_T *ht));
 void copy_tv __ARGS((typval_T *from, typval_T *to));
 void ex_echo __ARGS((exarg_T *eap));
@@ -89,9 +109,13 @@
 void ex_execute __ARGS((exarg_T *eap));
 void ex_function __ARGS((exarg_T *eap));
 void free_all_functions __ARGS((void));
+int translated_function_exists __ARGS((char_u *name));
+char_u *get_expanded_name __ARGS((char_u *name, int check));
 void func_dump_profile __ARGS((FILE *fd));
 char_u *get_user_func_name __ARGS((expand_T *xp, int idx));
 void ex_delfunction __ARGS((exarg_T *eap));
+void func_unref __ARGS((char_u *name));
+void func_ref __ARGS((char_u *name));
 void ex_return __ARGS((exarg_T *eap));
 int do_return __ARGS((exarg_T *eap, int reanimate, int is_cmd, void *rettv));
 void discard_pending_return __ARGS((void *rettv));
diff -Naur vim73.orig/src/proto/ex_cmds.pro vim73/src/proto/ex_cmds.pro
--- vim73.orig/src/proto/ex_cmds.pro	2010-08-15 12:30:24.000000000 +0000
+++ vim73/src/proto/ex_cmds.pro	2013-08-04 19:09:10.883943037 +0000
@@ -19,10 +19,12 @@
 void do_fixdel __ARGS((exarg_T *eap));
 void print_line_no_prefix __ARGS((linenr_T lnum, int use_number, int list));
 void print_line __ARGS((linenr_T lnum, int use_number, int list));
+int rename_buffer __ARGS((char_u *new_fname));
 void ex_file __ARGS((exarg_T *eap));
 void ex_update __ARGS((exarg_T *eap));
 void ex_write __ARGS((exarg_T *eap));
 int do_write __ARGS((exarg_T *eap));
+int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
 void ex_wnext __ARGS((exarg_T *eap));
 void do_wqall __ARGS((exarg_T *eap));
 int not_writing __ARGS((void));
diff -Naur vim73.orig/src/proto/ex_cmds2.pro vim73/src/proto/ex_cmds2.pro
--- vim73.orig/src/proto/ex_cmds2.pro	2010-08-15 12:30:25.000000000 +0000
+++ vim73/src/proto/ex_cmds2.pro	2013-08-04 19:09:10.887276360 +0000
@@ -17,12 +17,13 @@
 void profile_setlimit __ARGS((long msec, proftime_T *tm));
 int profile_passed_limit __ARGS((proftime_T *tm));
 void profile_zero __ARGS((proftime_T *tm));
+void profile_divide __ARGS((proftime_T *tm, int count, proftime_T *tm2));
 void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
 void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
 void profile_get_wait __ARGS((proftime_T *tm));
 void profile_sub_wait __ARGS((proftime_T *tm, proftime_T *tma));
 int profile_equal __ARGS((proftime_T *tm1, proftime_T *tm2));
-int profile_cmp __ARGS((proftime_T *tm1, proftime_T *tm2));
+int profile_cmp __ARGS((const proftime_T *tm1, const proftime_T *tm2));
 void ex_profile __ARGS((exarg_T *eap));
 char_u *get_profile_name __ARGS((expand_T *xp, int idx));
 void set_context_in_profile_cmd __ARGS((expand_T *xp, char_u *arg));
@@ -42,7 +43,7 @@
 int check_fname __ARGS((void));
 int buf_write_all __ARGS((buf_T *buf, int forceit));
 int get_arglist __ARGS((garray_T *gap, char_u *str));
-int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp));
+int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp, int wig));
 void set_arglist __ARGS((char_u *str));
 void check_arg_idx __ARGS((win_T *win));
 void ex_args __ARGS((exarg_T *eap));
@@ -83,5 +84,7 @@
 char_u *get_mess_lang __ARGS((void));
 void set_lang_var __ARGS((void));
 void ex_language __ARGS((exarg_T *eap));
+void free_locales __ARGS((void));
 char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
+char_u *get_locales __ARGS((expand_T *xp, int idx));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/ex_docmd.pro vim73/src/proto/ex_docmd.pro
--- vim73.orig/src/proto/ex_docmd.pro	2010-08-15 12:30:26.000000000 +0000
+++ vim73/src/proto/ex_docmd.pro	2013-08-04 19:09:10.887276360 +0000
@@ -1,7 +1,7 @@
 /* ex_docmd.c */
 void do_exmode __ARGS((int improved));
 int do_cmdline_cmd __ARGS((char_u *cmd));
-int do_cmdline __ARGS((char_u *cmdline, char_u *(*getline)(int, void *, int), void *cookie, int flags));
+int do_cmdline __ARGS((char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags));
 int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
 void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
 int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
@@ -40,6 +40,7 @@
 void tabpage_new __ARGS((void));
 void do_exedit __ARGS((exarg_T *eap, win_T *old_curwin));
 void free_cd_dir __ARGS((void));
+void post_chdir __ARGS((int local));
 void ex_cd __ARGS((exarg_T *eap));
 void do_sleep __ARGS((long msec));
 int vim_mkdir_emsg __ARGS((char_u *name, int prot));
diff -Naur vim73.orig/src/proto/ex_getln.pro vim73/src/proto/ex_getln.pro
--- vim73.orig/src/proto/ex_getln.pro	2010-08-15 12:30:27.000000000 +0000
+++ vim73/src/proto/ex_getln.pro	2013-08-04 19:09:10.890609683 +0000
@@ -31,7 +31,7 @@
 char_u *addstar __ARGS((char_u *fname, int len, int context));
 void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
 int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
-int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
+int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
 char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
 void init_history __ARGS((void));
 int get_histtype __ARGS((char_u *name));
@@ -48,10 +48,10 @@
 void remove_key_from_history __ARGS((void));
 int get_list_range __ARGS((char_u **str, int *num1, int *num2));
 void ex_history __ARGS((exarg_T *eap));
-void prepare_viminfo_history __ARGS((int asklen));
-int read_viminfo_history __ARGS((vir_T *virp));
+void prepare_viminfo_history __ARGS((int asklen, int writing));
+int read_viminfo_history __ARGS((vir_T *virp, int writing));
 void finish_viminfo_history __ARGS((void));
-void write_viminfo_history __ARGS((FILE *fp));
+void write_viminfo_history __ARGS((FILE *fp, int merge));
 void cmd_pchar __ARGS((int c, int offset));
 int cmd_gchar __ARGS((int offset));
 char_u *script_get __ARGS((exarg_T *eap, char_u *cmd));
diff -Naur vim73.orig/src/proto/fileio.pro vim73/src/proto/fileio.pro
--- vim73.orig/src/proto/fileio.pro	2010-08-15 12:30:28.000000000 +0000
+++ vim73/src/proto/fileio.pro	2013-08-04 19:09:10.890609683 +0000
@@ -35,6 +35,7 @@
 void do_autocmd __ARGS((char_u *arg, int forceit));
 int do_doautocmd __ARGS((char_u *arg, int do_msg));
 void ex_doautoall __ARGS((exarg_T *eap));
+int check_nomodeline __ARGS((char_u **argp));
 void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
 void aucmd_restbuf __ARGS((aco_save_T *aco));
 int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));
@@ -43,8 +44,13 @@
 int trigger_cursorhold __ARGS((void));
 int has_cursormoved __ARGS((void));
 int has_cursormovedI __ARGS((void));
+int has_textchanged __ARGS((void));
+int has_textchangedI __ARGS((void));
+int has_insertcharpre __ARGS((void));
 void block_autocmds __ARGS((void));
 void unblock_autocmds __ARGS((void));
+int is_autocmd_blocked __ARGS((void));
+char_u *getnextac __ARGS((int c, void *cookie, int indent));
 int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
 char_u *get_augroup_name __ARGS((expand_T *xp, int idx));
 char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd));
@@ -54,4 +60,6 @@
 int match_file_pat __ARGS((char_u *pattern, regprog_T *prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
 int match_file_list __ARGS((char_u *list, char_u *sfname, char_u *ffname));
 char_u *file_pat_to_reg_pat __ARGS((char_u *pat, char_u *pat_end, char *allow_dirs, int no_bslash));
+long read_eintr __ARGS((int fd, void *buf, size_t bufsize));
+long write_eintr __ARGS((int fd, void *buf, size_t bufsize));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/fold.pro vim73/src/proto/fold.pro
--- vim73.orig/src/proto/fold.pro	2010-08-15 12:30:29.000000000 +0000
+++ vim73/src/proto/fold.pro	2013-08-04 19:09:10.893943007 +0000
@@ -27,7 +27,7 @@
 void foldUpdate __ARGS((win_T *wp, linenr_T top, linenr_T bot));
 void foldUpdateAll __ARGS((win_T *win));
 int foldMoveTo __ARGS((int updown, int dir, long count));
-void foldInitWin __ARGS((win_T *newwin));
+void foldInitWin __ARGS((win_T *new_win));
 int find_wl_entry __ARGS((win_T *win, linenr_T lnum));
 void foldAdjustVisual __ARGS((void));
 void foldAdjustCursor __ARGS((void));
diff -Naur vim73.orig/src/proto/getchar.pro vim73/src/proto/getchar.pro
--- vim73.orig/src/proto/getchar.pro	2010-08-15 12:30:29.000000000 +0000
+++ vim73/src/proto/getchar.pro	2013-08-04 19:09:10.893943007 +0000
@@ -4,8 +4,9 @@
 char_u *get_inserted __ARGS((void));
 int stuff_empty __ARGS((void));
 void typeahead_noflush __ARGS((int c));
-void flush_buffers __ARGS((int typeahead));
+void flush_buffers __ARGS((int flush_typeahead));
 void ResetRedobuff __ARGS((void));
+void CancelRedo __ARGS((void));
 void saveRedobuff __ARGS((void));
 void restoreRedobuff __ARGS((void));
 void AppendToRedobuff __ARGS((char_u *s));
@@ -51,6 +52,7 @@
 int get_map_mode __ARGS((char_u **cmdp, int forceit));
 void map_clear __ARGS((char_u *cmdp, char_u *arg, int forceit, int abbr));
 void map_clear_int __ARGS((buf_T *buf, int mode, int local, int abbr));
+char_u *map_mode_to_chars __ARGS((int mode));
 int map_to_exists __ARGS((char_u *str, char_u *modechars, int abbr));
 int map_to_exists_mode __ARGS((char_u *rhs, int mode, int abbr));
 char_u *set_context_in_map_cmd __ARGS((expand_T *xp, char_u *cmd, char_u *arg, int forceit, int isabbrev, int isunmap, cmdidx_T cmdidx));
@@ -61,7 +63,7 @@
 int makemap __ARGS((FILE *fd, buf_T *buf));
 int put_escstr __ARGS((FILE *fd, char_u *strstart, int what));
 void check_map_keycodes __ARGS((void));
-char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr));
+char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr, mapblock_T **mp_ptr, int *local_ptr));
 void init_mappings __ARGS((void));
 void add_map __ARGS((char_u *map, int mode));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/gui_athena.pro vim73/src/proto/gui_athena.pro
--- vim73.orig/src/proto/gui_athena.pro	2010-08-15 12:31:06.000000000 +0000
+++ vim73/src/proto/gui_athena.pro	2013-08-04 19:09:10.897276330 +0000
@@ -27,5 +27,5 @@
 void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
 Window gui_x11_get_wid __ARGS((void));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/gui_gtk.pro vim73/src/proto/gui_gtk.pro
--- vim73.orig/src/proto/gui_gtk.pro	2010-08-15 12:31:03.000000000 +0000
+++ vim73/src/proto/gui_gtk.pro	2013-08-04 19:09:10.900609653 +0000
@@ -13,7 +13,7 @@
 void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
 char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield, int ex_cmd));
 void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
 void gui_make_popup __ARGS((char_u *path_name, int mouse_pos));
 void gui_mch_find_dialog __ARGS((exarg_T *eap));
diff -Naur vim73.orig/src/proto/gui_gtk_x11.pro vim73/src/proto/gui_gtk_x11.pro
--- vim73.orig/src/proto/gui_gtk_x11.pro	2010-08-15 12:31:07.000000000 +0000
+++ vim73/src/proto/gui_gtk_x11.pro	2013-08-04 19:09:10.900609653 +0000
@@ -4,6 +4,7 @@
 void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
 void gui_mch_stop_blink __ARGS((void));
 void gui_mch_start_blink __ARGS((void));
+int gui_mch_early_init_check __ARGS((void));
 int gui_mch_init_check __ARGS((void));
 void gui_mch_show_tabline __ARGS((int showit));
 int gui_mch_showing_tabline __ARGS((void));
@@ -20,6 +21,7 @@
 void gui_mch_set_winpos __ARGS((int x, int y));
 int gui_mch_maximized __ARGS((void));
 void gui_mch_unmaximize __ARGS((void));
+void gui_mch_newfont __ARGS((void));
 void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
 void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
 void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
@@ -57,6 +59,7 @@
 void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
 int clip_mch_own_selection __ARGS((VimClipboard *cbd));
 void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+int clip_gtk_owner_exists __ARGS((VimClipboard *cbd));
 void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
 void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
 void gui_mch_draw_menubar __ARGS((void));
diff -Naur vim73.orig/src/proto/gui_mac.pro vim73/src/proto/gui_mac.pro
--- vim73.orig/src/proto/gui_mac.pro	2010-08-14 19:40:45.000000000 +0000
+++ vim73/src/proto/gui_mac.pro	2013-08-04 19:09:10.903942977 +0000
@@ -81,7 +81,7 @@
 int gui_mch_get_mouse_y __ARGS((void));
 void gui_mch_setmouse __ARGS((int x, int y));
 void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
 void gui_mch_set_foreground __ARGS((void));
 void gui_mch_show_tabline __ARGS((int showit));
diff -Naur vim73.orig/src/proto/gui_motif.pro vim73/src/proto/gui_motif.pro
--- vim73.orig/src/proto/gui_motif.pro	2010-08-15 12:31:04.000000000 +0000
+++ vim73/src/proto/gui_motif.pro	2013-08-04 19:09:10.903942977 +0000
@@ -29,7 +29,7 @@
 void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
 Window gui_x11_get_wid __ARGS((void));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield, int ex_cmd));
 void gui_mch_enable_footer __ARGS((int showit));
 void gui_mch_set_footer __ARGS((char_u *s));
 void gui_mch_show_toolbar __ARGS((int showit));
diff -Naur vim73.orig/src/proto/gui_photon.pro vim73/src/proto/gui_photon.pro
--- vim73.orig/src/proto/gui_photon.pro	2010-08-15 12:31:10.000000000 +0000
+++ vim73/src/proto/gui_photon.pro	2013-08-04 19:09:10.903942977 +0000
@@ -8,7 +8,7 @@
 void gui_mch_update __ARGS((void));
 int gui_mch_wait_for_chars __ARGS((int wtime));
 char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *default_name, char_u *ext, char_u *initdir, char_u *filter));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield, int ex_cmd));
 int gui_mch_get_winpos __ARGS((int *x, int *y));
 void gui_mch_set_winpos __ARGS((int x, int y));
 void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
diff -Naur vim73.orig/src/proto/gui_riscos.pro vim73/src/proto/gui_riscos.pro
--- vim73.orig/src/proto/gui_riscos.pro	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/proto/gui_riscos.pro	1970-01-01 00:00:00.000000000 +0000
@@ -1,66 +0,0 @@
-/* Prototypes for gui_riscos.c
- * Based on gui_x11_pro.h (10 March 2002 version)
- */
-void gui_mch_prepare __ARGS((int *argc, char **argv));
-int gui_mch_init_check __ARGS((void));
-int gui_mch_init __ARGS((void));
-void gui_mch_uninit __ARGS((void));
-void gui_mch_new_colors __ARGS((void));
-int gui_mch_open __ARGS((void));
-void gui_init_tooltip_font __ARGS((void));
-void gui_init_menu_font __ARGS((void));void gui_mch_exit __ARGS((int rc));
-int gui_mch_get_winpos __ARGS((int *x, int *y));
-void gui_mch_set_winpos __ARGS((int x, int y));
-void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
-void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
-int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
-GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
-int gui_mch_adjust_charheight __ARGS((void));
-void gui_mch_set_font __ARGS((GuiFont font));
-void gui_mch_set_fontset __ARGS((GuiFontset fontset));
-void gui_mch_free_font __ARGS((GuiFont font));
-void gui_mch_free_fontset __ARGS((GuiFontset fontset));
-GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
-guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
-void gui_mch_set_fg_color __ARGS((guicolor_T color));
-void gui_mch_set_bg_color __ARGS((guicolor_T color));
-void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
-int gui_mch_haskey __ARGS((char_u *name));
-void gui_mch_beep __ARGS((void));
-void gui_mch_flash __ARGS((int msec));
-void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
-void gui_mch_iconify __ARGS((void));
-void gui_mch_set_foreground __ARGS((void));
-void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
-void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
-void gui_mch_update __ARGS((void));
-int gui_mch_wait_for_chars __ARGS((long wtime));
-void gui_mch_flush __ARGS((void));
-void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
-void gui_mch_clear_all __ARGS((void));
-void gui_mch_delete_lines __ARGS((int row, int num_lines));
-void gui_mch_insert_lines __ARGS((int row, int num_lines));
-void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
-int clip_mch_own_selection __ARGS((VimClipboard *cbd));
-void clip_mch_request_selection __ARGS((VimClipboard *cbd));
-void clip_mch_set_selection __ARGS((VimClipboard *cbd));
-void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
-void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
-void gui_mch_draw_menubar __ARGS((void));
-void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
-void gui_mch_stop_blink __ARGS((void));
-void gui_mch_start_blink __ARGS((void));
-void process_event __ARGS((int event, int *block));
-void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
-long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
-void gui_mch_getmouse __ARGS((int *x, int *y));
-void gui_mch_setmouse __ARGS((int x, int y));
-void gui_mch_drawsign __ARGS((int row, int col, int typenr));
-void gui_mch_destroy_sign __ARGS((XImage *sign));
-void gui_mch_mousehide __ARGS((int hide));
-void mch_set_mouse_shape __ARGS((int shape));
-void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
-
-void ro_redraw_title __ARGS((int window));
-int ro_ok_to_quit __ARGS((void));
-/* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/gui_w16.pro vim73/src/proto/gui_w16.pro
--- vim73.orig/src/proto/gui_w16.pro	2010-08-15 12:31:09.000000000 +0000
+++ vim73/src/proto/gui_w16.pro	2013-08-04 19:09:10.907276300 +0000
@@ -49,6 +49,7 @@
 void gui_mch_delete_lines __ARGS((int row, int num_lines));
 void gui_mch_insert_lines __ARGS((int row, int num_lines));
 void gui_mch_exit __ARGS((int rc));
+void gui_mch_wide_font_changed __ARGS((void));
 int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
 int gui_mch_maximized __ARGS((void));
 void gui_mch_newfont __ARGS((void));
@@ -74,6 +75,6 @@
 void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
 void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
 void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 void gui_mch_set_foreground __ARGS((void));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/gui_w32.pro vim73/src/proto/gui_w32.pro
--- vim73.orig/src/proto/gui_w32.pro	2010-08-15 12:31:09.000000000 +0000
+++ vim73/src/proto/gui_w32.pro	2013-08-04 19:09:10.907276300 +0000
@@ -49,6 +49,7 @@
 void gui_mch_delete_lines __ARGS((int row, int num_lines));
 void gui_mch_insert_lines __ARGS((int row, int num_lines));
 void gui_mch_exit __ARGS((int rc));
+void gui_mch_wide_font_changed __ARGS((void));
 int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
 int gui_mch_maximized __ARGS((void));
 void gui_mch_newfont __ARGS((void));
@@ -81,7 +82,7 @@
 void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
 void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
 void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 void gui_mch_set_foreground __ARGS((void));
 void gui_mch_drawsign __ARGS((int row, int col, int typenr));
 void *gui_mch_register_sign __ARGS((char_u *signfile));
diff -Naur vim73.orig/src/proto/if_lua.pro vim73/src/proto/if_lua.pro
--- vim73.orig/src/proto/if_lua.pro	2010-07-22 19:29:02.000000000 +0000
+++ vim73/src/proto/if_lua.pro	2013-08-04 19:09:10.917276270 +0000
@@ -6,4 +6,6 @@
 void ex_luafile __ARGS((exarg_T *eap));
 void lua_buffer_free __ARGS((buf_T *buf));
 void lua_window_free __ARGS((win_T *win));
+void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
+void set_ref_in_lua __ARGS((int copyID));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/if_mzsch.pro vim73/src/proto/if_mzsch.pro
--- vim73.orig/src/proto/if_mzsch.pro	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/proto/if_mzsch.pro	2013-08-04 19:09:10.917276270 +0000
@@ -14,6 +14,7 @@
 void mzvim_reset_timer __ARGS((void));
 void *mzvim_eval_string __ARGS((char_u *str));
 int mzthreads_allowed __ARGS((void));
-void mzscheme_main __ARGS((void));
+int mzscheme_main __ARGS((int argc, char **argv));
 void do_mzeval __ARGS((char_u *str, typval_T *rettv));
+int vim_main2 __ARGS((int argc, char **argv));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/if_python.pro vim73/src/proto/if_python.pro
--- vim73.orig/src/proto/if_python.pro	2010-08-15 12:30:35.000000000 +0000
+++ vim73/src/proto/if_python.pro	2013-08-04 19:09:10.920609593 +0000
@@ -4,6 +4,10 @@
 int python_loaded __ARGS((void));
 void ex_python __ARGS((exarg_T *eap));
 void ex_pyfile __ARGS((exarg_T *eap));
+void ex_pydo __ARGS((exarg_T *eap));
 void python_buffer_free __ARGS((buf_T *buf));
 void python_window_free __ARGS((win_T *win));
+void python_tabpage_free __ARGS((tabpage_T *tab));
+void do_pyeval __ARGS((char_u *str, typval_T *rettv));
+void set_ref_in_python __ARGS((int copyID));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/if_python3.pro vim73/src/proto/if_python3.pro
--- vim73.orig/src/proto/if_python3.pro	2010-08-15 12:30:36.000000000 +0000
+++ vim73/src/proto/if_python3.pro	2013-08-04 19:09:10.923942917 +0000
@@ -4,6 +4,10 @@
 int python3_loaded __ARGS((void));
 void ex_py3 __ARGS((exarg_T *eap));
 void ex_py3file __ARGS((exarg_T *eap));
+void ex_py3do __ARGS((exarg_T *eap));
 void python3_buffer_free __ARGS((buf_T *buf));
 void python3_window_free __ARGS((win_T *win));
+void python3_tabpage_free __ARGS((tabpage_T *tab));
+void do_py3eval __ARGS((char_u *str, typval_T *rettv));
+void set_ref_in_python3 __ARGS((int copyID));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/if_ruby.pro vim73/src/proto/if_ruby.pro
--- vim73.orig/src/proto/if_ruby.pro	2010-08-15 12:30:36.000000000 +0000
+++ vim73/src/proto/if_ruby.pro	2013-08-04 19:09:10.923942917 +0000
@@ -6,4 +6,5 @@
 void ex_rubyfile __ARGS((exarg_T *eap));
 void ruby_buffer_free __ARGS((buf_T *buf));
 void ruby_window_free __ARGS((win_T *win));
+void vim_ruby_init __ARGS((void *stack_start));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/mark.pro vim73/src/proto/mark.pro
--- vim73.orig/src/proto/mark.pro	2010-08-15 12:30:38.000000000 +0000
+++ vim73/src/proto/mark.pro	2013-08-04 19:09:10.927276240 +0000
@@ -5,8 +5,9 @@
 void checkpcmark __ARGS((void));
 pos_T *movemark __ARGS((int count));
 pos_T *movechangelist __ARGS((int count));
+pos_T *getmark_buf __ARGS((buf_T *buf, int c, int changefile));
 pos_T *getmark __ARGS((int c, int changefile));
-pos_T *getmark_fnum __ARGS((int c, int changefile, int *fnum));
+pos_T *getmark_buf_fnum __ARGS((buf_T *buf, int c, int changefile, int *fnum));
 pos_T *getnextmark __ARGS((pos_T *startpos, int dir, int begin_line));
 void fmarks_check_names __ARGS((buf_T *buf));
 int check_mark __ARGS((pos_T *pos));
diff -Naur vim73.orig/src/proto/mbyte.pro vim73/src/proto/mbyte.pro
--- vim73.orig/src/proto/mbyte.pro	2010-08-15 12:30:44.000000000 +0000
+++ vim73/src/proto/mbyte.pro	2013-08-04 19:09:10.930609563 +0000
@@ -2,7 +2,9 @@
 int enc_canon_props __ARGS((char_u *name));
 char_u *mb_init __ARGS((void));
 int bomb_size __ARGS((void));
+void remove_bom __ARGS((char_u *s));
 int mb_get_class __ARGS((char_u *p));
+int mb_get_class_buf __ARGS((char_u *p, buf_T *buf));
 int dbcs_class __ARGS((unsigned lead, unsigned trail));
 int latin_char2len __ARGS((int c));
 int latin_char2bytes __ARGS((int c, char_u *buf));
@@ -56,7 +58,7 @@
 int utf_valid_string __ARGS((char_u *s, char_u *end));
 int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
 void mb_adjust_cursor __ARGS((void));
-void mb_adjustpos __ARGS((pos_T *lp));
+void mb_adjustpos __ARGS((buf_T *buf, pos_T *lp));
 char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
 int mb_charlen __ARGS((char_u *str));
 int mb_charlen_len __ARGS((char_u *str, int len));
diff -Naur vim73.orig/src/proto/message.pro vim73/src/proto/message.pro
--- vim73.orig/src/proto/message.pro	2010-08-15 12:30:41.000000000 +0000
+++ vim73/src/proto/message.pro	2013-08-04 19:09:10.933942886 +0000
@@ -4,7 +4,7 @@
 int msg_attr __ARGS((char_u *s, int attr));
 int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
 char_u *msg_strtrunc __ARGS((char_u *s, int force));
-void trunc_string __ARGS((char_u *s, char_u *buf, int room));
+void trunc_string __ARGS((char_u *s, char_u *buf, int room, int buflen));
 void reset_last_sourcing __ARGS((void));
 void msg_source __ARGS((int attr));
 int emsg_not_now __ARGS((void));
@@ -33,6 +33,7 @@
 int msg_outtrans_len_attr __ARGS((char_u *msgstr, int len, int attr));
 void msg_make __ARGS((char_u *arg));
 int msg_outtrans_special __ARGS((char_u *strstart, int from));
+char_u *str2special_save __ARGS((char_u *str, int is_lhs));
 char_u *str2special __ARGS((char_u **sp, int from));
 void str2specialbuf __ARGS((char_u *sp, char_u *buf, int len));
 void msg_prt_line __ARGS((char_u *s, int list));
@@ -44,6 +45,7 @@
 void may_clear_sb_text __ARGS((void));
 void clear_sb_text __ARGS((void));
 void show_sb_text __ARGS((void));
+void msg_sb_eol __ARGS((void));
 int msg_use_printf __ARGS((void));
 void mch_errmsg __ARGS((char *str));
 void mch_msg __ARGS((char *str));
@@ -63,7 +65,7 @@
 int verbose_open __ARGS((void));
 void give_warning __ARGS((char_u *message, int hl));
 void msg_advance __ARGS((int col));
-int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
+int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
 void display_confirm_msg __ARGS((void));
 int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
 int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
diff -Naur vim73.orig/src/proto/misc1.pro vim73/src/proto/misc1.pro
--- vim73.orig/src/proto/misc1.pro	2010-08-15 12:30:42.000000000 +0000
+++ vim73/src/proto/misc1.pro	2013-08-04 19:09:10.937276210 +0000
@@ -5,8 +5,9 @@
 int get_indent_str __ARGS((char_u *ptr, int ts));
 int set_indent __ARGS((int size, int flags));
 int get_number_indent __ARGS((linenr_T lnum));
-int open_line __ARGS((int dir, int flags, int old_indent));
-int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
+int open_line __ARGS((int dir, int flags, int second_line_indent));
+int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
+int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
 int plines __ARGS((linenr_T lnum));
 int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
 int plines_nofill __ARGS((linenr_T lnum));
@@ -41,6 +42,7 @@
 void check_status __ARGS((buf_T *buf));
 void change_warning __ARGS((int col));
 int ask_yesno __ARGS((char_u *str, int direct));
+int is_mouse_key __ARGS((int c));
 int get_keystroke __ARGS((void));
 int get_number __ARGS((int colon, int *mouse_used));
 int prompt_for_number __ARGS((int *mouse_used));
@@ -49,6 +51,7 @@
 void vim_beep __ARGS((void));
 void init_homedir __ARGS((void));
 void free_homedir __ARGS((void));
+void free_users __ARGS((void));
 char_u *expand_env_save __ARGS((char_u *src));
 char_u *expand_env_save_opt __ARGS((char_u *src, int one));
 void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
@@ -56,6 +59,8 @@
 char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
 void vim_setenv __ARGS((char_u *name, char_u *val));
 char_u *get_env_name __ARGS((expand_T *xp, int idx));
+char_u *get_users __ARGS((expand_T *xp, int idx));
+int match_user __ARGS((char_u *name));
 void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
 char_u *home_replace_save __ARGS((buf_T *buf, char_u *src));
 int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname));
diff -Naur vim73.orig/src/proto/misc2.pro vim73/src/proto/misc2.pro
--- vim73.orig/src/proto/misc2.pro	2010-08-15 12:30:42.000000000 +0000
+++ vim73/src/proto/misc2.pro	2013-08-04 19:09:10.940609533 +0000
@@ -14,6 +14,7 @@
 linenr_T get_cursor_rel_lnum __ARGS((win_T *wp, linenr_T lnum));
 void check_cursor_lnum __ARGS((void));
 void check_cursor_col __ARGS((void));
+void check_cursor_col_win __ARGS((win_T *win));
 void check_cursor __ARGS((void));
 void adjust_cursor_col __ARGS((void));
 int leftcol_changed __ARGS((void));
@@ -40,6 +41,7 @@
 void copy_chars __ARGS((char_u *ptr, size_t count, int c));
 void del_trailing_spaces __ARGS((char_u *ptr));
 void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
+void vim_strcat __ARGS((char_u *to, char_u *from, size_t tosize));
 int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
 void vim_free __ARGS((void *x));
 int vim_stricmp __ARGS((char *s1, char *s2));
@@ -56,6 +58,7 @@
 char_u *ga_concat_strings __ARGS((garray_T *gap));
 void ga_concat __ARGS((garray_T *gap, char_u *s));
 void ga_append __ARGS((garray_T *gap, int c));
+void append_ga_line __ARGS((garray_T *gap));
 int name_to_mod_mask __ARGS((int c));
 int simplify_key __ARGS((int key, int *modifiers));
 int handle_x_keys __ARGS((int key));
@@ -113,4 +116,5 @@
 char_u *read_string __ARGS((FILE *fd, int cnt));
 int put_bytes __ARGS((FILE *fd, long_u nr, int len));
 void put_time __ARGS((FILE *fd, time_t the_time));
+int has_non_ascii __ARGS((char_u *s));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/move.pro vim73/src/proto/move.pro
--- vim73.orig/src/proto/move.pro	2010-08-15 12:30:43.000000000 +0000
+++ vim73/src/proto/move.pro	2013-08-04 19:09:10.940609533 +0000
@@ -24,7 +24,7 @@
 int curwin_col_off __ARGS((void));
 int win_col_off2 __ARGS((win_T *wp));
 int curwin_col_off2 __ARGS((void));
-void curs_columns __ARGS((int scroll));
+void curs_columns __ARGS((int may_scroll));
 void scrolldown __ARGS((long line_count, int byfold));
 void scrollup __ARGS((long line_count, int byfold));
 void check_topfill __ARGS((win_T *wp, int down));
diff -Naur vim73.orig/src/proto/ops.pro vim73/src/proto/ops.pro
--- vim73.orig/src/proto/ops.pro	2010-08-15 12:30:45.000000000 +0000
+++ vim73/src/proto/ops.pro	2013-08-04 19:09:10.943942856 +0000
@@ -15,6 +15,7 @@
 int may_get_selection __ARGS((int regname));
 void *get_register __ARGS((int name, int copy));
 void put_register __ARGS((int name, void *reg));
+void free_register __ARGS((void *reg));
 int yank_register_mline __ARGS((int regname));
 int do_record __ARGS((int c));
 int do_execreg __ARGS((int regname, int colon, int addcr, int silent));
@@ -36,7 +37,7 @@
 int preprocs_left __ARGS((void));
 int get_register_name __ARGS((int num));
 void ex_display __ARGS((exarg_T *eap));
-int do_join __ARGS((long count, int insert_space, int save_undo));
+int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions));
 void op_format __ARGS((oparg_T *oap, int keep_cursor));
 void op_formatexpr __ARGS((oparg_T *oap));
 int fex_format __ARGS((linenr_T lnum, long count, int c));
diff -Naur vim73.orig/src/proto/option.pro vim73/src/proto/option.pro
--- vim73.orig/src/proto/option.pro	2010-08-15 12:30:46.000000000 +0000
+++ vim73/src/proto/option.pro	2013-08-04 19:09:10.947276180 +0000
@@ -22,7 +22,8 @@
 char_u *check_colorcolumn __ARGS((win_T *wp));
 char_u *check_stl_option __ARGS((char_u *s));
 int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
-void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
+int get_option_value_strict __ARGS((char_u *name, long *numval, char_u **stringval, int opt_type, void *from));
+char_u *set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
 char_u *get_term_code __ARGS((char_u *tname));
 char_u *get_highlight_default __ARGS((void));
 char_u *get_encoding_default __ARGS((void));
@@ -33,6 +34,7 @@
 void free_one_termoption __ARGS((char_u *var));
 void set_term_defaults __ARGS((void));
 void comp_col __ARGS((void));
+void unset_global_local_option __ARGS((char_u *name, void *from));
 char_u *get_equalprg __ARGS((void));
 void win_copy_options __ARGS((win_T *wp_from, win_T *wp_to));
 void copy_winopt __ARGS((winopt_T *from, winopt_T *to));
@@ -52,8 +54,12 @@
 void vimrc_found __ARGS((char_u *fname, char_u *envname));
 void change_compatible __ARGS((int on));
 int option_was_set __ARGS((char_u *name));
+void reset_option_was_set __ARGS((char_u *name));
 int can_bs __ARGS((int what));
 void save_file_ff __ARGS((buf_T *buf));
-int file_ff_differs __ARGS((buf_T *buf));
+int file_ff_differs __ARGS((buf_T *buf, int ignore_empty));
 int check_ff_value __ARGS((char_u *p));
+long get_sw_value __ARGS((void));
+long get_sts_value __ARGS((void));
+void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/os_beos.pro vim73/src/proto/os_beos.pro
--- vim73.orig/src/proto/os_beos.pro	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/proto/os_beos.pro	2013-08-04 19:09:10.947276180 +0000
@@ -0,0 +1,4 @@
+/* os_beos.c */
+void beos_cleanup_read_thread __ARGS((void));
+int beos_select __ARGS((int nbits, struct fd_set *rbits, struct fd_set *wbits, struct fd_set *ebits, struct timeval *timeout));
+/* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/os_mswin.pro vim73/src/proto/os_mswin.pro
--- vim73.orig/src/proto/os_mswin.pro	2010-08-15 12:31:15.000000000 +0000
+++ vim73/src/proto/os_mswin.pro	2013-08-04 19:09:10.950609503 +0000
@@ -22,17 +22,6 @@
 int can_end_termcap_mode __ARGS((int give_msg));
 int mch_screenmode __ARGS((char_u *arg));
 int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
-int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
-int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
-void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
-void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
-int clip_mch_own_selection __ARGS((VimClipboard *cbd));
-void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
-short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
-char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
-void clip_mch_request_selection __ARGS((VimClipboard *cbd));
-void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
-void clip_mch_set_selection __ARGS((VimClipboard *cbd));
 void DumpPutS __ARGS((const char *psz));
 int mch_get_winpos __ARGS((int *x, int *y));
 void mch_set_winpos __ARGS((int x, int y));
diff -Naur vim73.orig/src/proto/os_riscos.pro vim73/src/proto/os_riscos.pro
--- vim73.orig/src/proto/os_riscos.pro	2010-08-15 12:31:16.000000000 +0000
+++ vim73/src/proto/os_riscos.pro	1970-01-01 00:00:00.000000000 +0000
@@ -1,49 +0,0 @@
-/* os_riscos.c */
-void mch_write __ARGS((char_u *s, int len));
-int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
-int mch_char_avail __ARGS((void));
-long_u mch_avail_mem __ARGS((int special));
-void mch_delay __ARGS((long msec, int ignoreinput));
-void mch_suspend __ARGS((void));
-void mch_init __ARGS((void));
-int mch_check_win __ARGS((int argc, char **argv));
-int mch_input_isatty __ARGS((void));
-int mch_can_restore_title __ARGS((void));
-int mch_can_restore_icon __ARGS((void));
-void mch_settitle __ARGS((char_u *title, char_u *icon));
-void mch_restore_title __ARGS((int which));
-int mch_get_user_name __ARGS((char_u *s, int len));
-void mch_get_host_name __ARGS((char_u *s, int len));
-long mch_get_pid __ARGS((void));
-int mch_dirname __ARGS((char_u *buf, int len));
-int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
-int mch_isFullName __ARGS((char_u *fname));
-long mch_getperm __ARGS((char_u *name));
-int mch_setperm __ARGS((char_u *name, long perm));
-void mch_hide __ARGS((char_u *name));
-int mch_isdir __ARGS((char_u *name));
-int mch_can_exe __ARGS((char_u *name));
-int mch_nodetype __ARGS((char_u *name));
-void mch_early_init __ARGS((void));
-void mch_exit __ARGS((int r));
-void mch_settmode __ARGS((int tmode));
-void mch_setmouse __ARGS((int on));
-int mch_screenmode __ARGS((char_u *arg));
-int mch_get_shellsize __ARGS((void));
-void mch_set_shellsize __ARGS((void));
-void mch_new_shellsize __ARGS((void));
-int mch_call_shell __ARGS((char_u *cmd, int options));
-void mch_breakcheck __ARGS((void));
-int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
-int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
-int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
-int mch_has_exp_wildcard __ARGS((char_u *p));
-int mch_has_wildcard __ARGS((char_u *p));
-int mch_remove __ARGS((char_u *file));
-char_u *mch_munge_fname __ARGS((char_u *fname));
-int ro_buflist_add __ARGS((char_u *old_name));
-int mch_chdir __ARGS((char_u *dir));
-void mch_read_filetype __ARGS((char_u *file));
-void mch_set_filetype __ARGS((char_u *file, char_u *type));
-int mch_check_filetype __ARGS((char_u *fname, char_u *type));
-/* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/os_win32.pro vim73/src/proto/os_win32.pro
--- vim73.orig/src/proto/os_win32.pro	2010-08-15 12:31:14.000000000 +0000
+++ vim73/src/proto/os_win32.pro	2013-08-04 19:09:10.957276150 +0000
@@ -1,4 +1,5 @@
 /* os_win32.c */
+HINSTANCE vimLoadLib __ARGS((char *name));
 int dyn_libintl_init __ARGS((char *libname));
 void dyn_libintl_end __ARGS((void));
 void PlatformId __ARGS((void));
@@ -19,7 +20,11 @@
 int mch_setperm __ARGS((char_u *name, long perm));
 void mch_hide __ARGS((char_u *name));
 int mch_isdir __ARGS((char_u *name));
+int mch_mkdir __ARGS((char_u *name));
+int mch_is_hard_link __ARGS((char_u *fname));
+int mch_is_symbolic_link __ARGS((char_u *fname));
 int mch_is_linked __ARGS((char_u *fname));
+int win32_fileinfo __ARGS((char_u *fname, BY_HANDLE_FILE_INFORMATION *info));
 int mch_writable __ARGS((char_u *name));
 int mch_can_exe __ARGS((char_u *name));
 int mch_nodetype __ARGS((char_u *name));
@@ -37,7 +42,6 @@
 void mch_delay __ARGS((long msec, int ignoreinput));
 int mch_remove __ARGS((char_u *name));
 void mch_breakcheck __ARGS((void));
-long_u mch_avail_mem __ARGS((int special));
 int mch_wrename __ARGS((WCHAR *wold, WCHAR *wnew));
 int mch_rename __ARGS((const char *pszOldFile, const char *pszNewFile));
 char *default_shell __ARGS((void));
diff -Naur vim73.orig/src/proto/regexp.pro vim73/src/proto/regexp.pro
--- vim73.orig/src/proto/regexp.pro	2010-08-15 12:30:49.000000000 +0000
+++ vim73/src/proto/regexp.pro	2013-08-04 19:09:10.960609473 +0000
@@ -2,16 +2,17 @@
 int re_multiline __ARGS((regprog_T *prog));
 int re_lookbehind __ARGS((regprog_T *prog));
 char_u *skip_regexp __ARGS((char_u *startp, int dirc, int magic, char_u **newp));
-regprog_T *vim_regcomp __ARGS((char_u *expr, int re_flags));
 int vim_regcomp_had_eol __ARGS((void));
 void free_regexp_stuff __ARGS((void));
-int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
-int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
-long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
 reg_extmatch_T *ref_extmatch __ARGS((reg_extmatch_T *em));
 void unref_extmatch __ARGS((reg_extmatch_T *em));
 char_u *regtilde __ARGS((char_u *source, int magic));
 int vim_regsub __ARGS((regmatch_T *rmp, char_u *source, char_u *dest, int copy, int magic, int backslash));
 int vim_regsub_multi __ARGS((regmmatch_T *rmp, linenr_T lnum, char_u *source, char_u *dest, int copy, int magic, int backslash));
 char_u *reg_submatch __ARGS((int no));
+regprog_T *vim_regcomp __ARGS((char_u *expr_arg, int re_flags));
+void vim_regfree __ARGS((regprog_T *prog));
+int vim_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+int vim_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+long vim_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/screen.pro vim73/src/proto/screen.pro
--- vim73.orig/src/proto/screen.pro	2010-08-15 12:30:50.000000000 +0000
+++ vim73/src/proto/screen.pro	2013-08-04 19:09:10.963942796 +0000
@@ -5,6 +5,7 @@
 void redraw_all_later __ARGS((int type));
 void redraw_curbuf_later __ARGS((int type));
 void redraw_buf_later __ARGS((buf_T *buf, int type));
+int redraw_asap __ARGS((int type));
 void redrawWinline __ARGS((linenr_T lnum, int invalid));
 void update_curbuf __ARGS((int type));
 void update_screen __ARGS((int type));
@@ -31,8 +32,8 @@
 void screen_draw_rectangle __ARGS((int row, int col, int height, int width, int invert));
 void screen_fill __ARGS((int start_row, int end_row, int start_col, int end_col, int c1, int c2, int attr));
 void check_for_delay __ARGS((int check_msg_scroll));
-int screen_valid __ARGS((int clear));
-void screenalloc __ARGS((int clear));
+int screen_valid __ARGS((int doclear));
+void screenalloc __ARGS((int doclear));
 void free_screenlines __ARGS((void));
 void screenclear __ARGS((void));
 int can_clear __ARGS((char_u *p));
@@ -50,4 +51,6 @@
 int messaging __ARGS((void));
 void showruler __ARGS((int always));
 int number_width __ARGS((win_T *wp));
+int screen_screencol __ARGS((void));
+int screen_screenrow __ARGS((void));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/search.pro vim73/src/proto/search.pro
--- vim73.orig/src/proto/search.pro	2010-08-15 12:30:51.000000000 +0000
+++ vim73/src/proto/search.pro	2013-08-04 19:09:10.963942796 +0000
@@ -32,6 +32,7 @@
 int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
 int current_par __ARGS((oparg_T *oap, long count, int include, int type));
 int current_quote __ARGS((oparg_T *oap, long count, int include, int quotechar));
+int current_search __ARGS((long count, int forward));
 int linewhite __ARGS((linenr_T lnum));
 void find_pattern_in_path __ARGS((char_u *ptr, int dir, int len, int whole, int skip_comments, int type, long count, int action, linenr_T start_lnum, linenr_T end_lnum));
 int read_viminfo_search_pattern __ARGS((vir_T *virp, int force));
diff -Naur vim73.orig/src/proto/sha256.pro vim73/src/proto/sha256.pro
--- vim73.orig/src/proto/sha256.pro	2010-08-15 12:30:52.000000000 +0000
+++ vim73/src/proto/sha256.pro	2013-08-04 19:09:10.967276120 +0000
@@ -2,6 +2,7 @@
 void sha256_start __ARGS((context_sha256_T *ctx));
 void sha256_update __ARGS((context_sha256_T *ctx, char_u *input, UINT32_T length));
 void sha256_finish __ARGS((context_sha256_T *ctx, char_u digest[32]));
+char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len));
 char_u *sha256_key __ARGS((char_u *buf, char_u *salt, int salt_len));
 int sha256_self_test __ARGS((void));
 void sha2_seed __ARGS((char_u *header, int header_len, char_u *salt, int salt_len));
diff -Naur vim73.orig/src/proto/syntax.pro vim73/src/proto/syntax.pro
--- vim73.orig/src/proto/syntax.pro	2010-08-15 12:30:54.000000000 +0000
+++ vim73/src/proto/syntax.pro	2013-08-04 19:09:10.967276120 +0000
@@ -19,6 +19,8 @@
 int syn_get_sub_char __ARGS((void));
 int syn_get_stack_item __ARGS((int i));
 int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
+void ex_syntime __ARGS((exarg_T *eap));
+char_u *get_syntime_arg __ARGS((expand_T *xp, int idx));
 void init_highlight __ARGS((int both, int reset));
 int load_colors __ARGS((char_u *name));
 void do_highlight __ARGS((char_u *line, int forceit, int init));
diff -Naur vim73.orig/src/proto/term.pro vim73/src/proto/term.pro
--- vim73.orig/src/proto/term.pro	2010-08-15 12:30:56.000000000 +0000
+++ vim73/src/proto/term.pro	2013-08-04 19:09:10.970609443 +0000
@@ -26,6 +26,7 @@
 void ttest __ARGS((int pairs));
 void add_long_to_buf __ARGS((long_u val, char_u *dst));
 void check_shellsize __ARGS((void));
+void limit_screen_size __ARGS((void));
 void win_new_shellsize __ARGS((void));
 void shell_resized __ARGS((void));
 void shell_resized_check __ARGS((void));
@@ -34,6 +35,7 @@
 void starttermcap __ARGS((void));
 void stoptermcap __ARGS((void));
 void may_req_termresponse __ARGS((void));
+void may_req_ambiguous_character_width __ARGS((void));
 int swapping_screen __ARGS((void));
 void setmouse __ARGS((void));
 int mouse_has __ARGS((int c));
@@ -50,7 +52,7 @@
 char_u *get_termcode __ARGS((int i));
 void del_termcode __ARGS((char_u *name));
 void set_mouse_topline __ARGS((win_T *wp));
-int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
+int check_termcode __ARGS((int max_offset, char_u *buf, int bufsize, int *buflen));
 char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
 int find_term_bykeys __ARGS((char_u *src));
 void show_termcodes __ARGS((void));
diff -Naur vim73.orig/src/proto/ui.pro vim73/src/proto/ui.pro
--- vim73.orig/src/proto/ui.pro	2010-08-15 12:30:57.000000000 +0000
+++ vim73/src/proto/ui.pro	2013-08-04 19:09:10.973942766 +0000
@@ -11,17 +11,17 @@
 void ui_new_shellsize __ARGS((void));
 void ui_breakcheck __ARGS((void));
 void clip_init __ARGS((int can_use));
-void clip_update_selection __ARGS((void));
+void clip_update_selection __ARGS((VimClipboard *clip));
 void clip_own_selection __ARGS((VimClipboard *cbd));
 void clip_lose_selection __ARGS((VimClipboard *cbd));
-void clip_copy_selection __ARGS((void));
 void clip_auto_select __ARGS((void));
-int clip_isautosel __ARGS((void));
+int clip_isautosel_star __ARGS((void));
+int clip_isautosel_plus __ARGS((void));
 void clip_modeless __ARGS((int button, int is_click, int is_drag));
 void clip_start_selection __ARGS((int col, int row, int repeated_click));
 void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
 void clip_may_redraw_selection __ARGS((int row, int col, int len));
-void clip_clear_selection __ARGS((void));
+void clip_clear_selection __ARGS((VimClipboard *cbd));
 void clip_may_clear_selection __ARGS((int row1, int row2));
 void clip_scroll_selection __ARGS((int rows));
 void clip_copy_modeless_selection __ARGS((int both));
@@ -29,6 +29,7 @@
 void clip_gen_lose_selection __ARGS((VimClipboard *cbd));
 void clip_gen_set_selection __ARGS((VimClipboard *cbd));
 void clip_gen_request_selection __ARGS((VimClipboard *cbd));
+int clip_gen_owner_exists __ARGS((VimClipboard *cbd));
 int vim_is_input_buf_full __ARGS((void));
 int vim_is_input_buf_empty __ARGS((void));
 int vim_free_in_input_buf __ARGS((void));
@@ -52,6 +53,7 @@
 void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
 int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
 void clip_x11_set_selection __ARGS((VimClipboard *cbd));
+int clip_x11_owner_exists __ARGS((VimClipboard *cbd));
 void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd));
 int jump_to_mouse __ARGS((int flags, int *inclusive, int which_button));
 int mouse_comp_pos __ARGS((win_T *win, int *rowp, int *colp, linenr_T *lnump));
diff -Naur vim73.orig/src/proto/version.pro vim73/src/proto/version.pro
--- vim73.orig/src/proto/version.pro	2010-08-15 12:30:59.000000000 +0000
+++ vim73/src/proto/version.pro	2013-08-04 19:09:10.973942766 +0000
@@ -4,6 +4,7 @@
 int has_patch __ARGS((int n));
 void ex_version __ARGS((exarg_T *eap));
 void list_version __ARGS((void));
+void maybe_intro_message __ARGS((void));
 void intro_message __ARGS((int colon));
 void ex_intro __ARGS((exarg_T *eap));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/winclip.pro vim73/src/proto/winclip.pro
--- vim73.orig/src/proto/winclip.pro	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/proto/winclip.pro	2013-08-04 19:09:10.977276089 +0000
@@ -0,0 +1,14 @@
+/* winclip.c */
+int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
+int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
+void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
+void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
+void win_clip_init __ARGS((void));
+int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
+char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
+void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
+/* vim: set ft=c : */
diff -Naur vim73.orig/src/proto/window.pro vim73/src/proto/window.pro
--- vim73.orig/src/proto/window.pro	2010-08-15 12:30:59.000000000 +0000
+++ vim73/src/proto/window.pro	2013-08-04 19:09:10.977276089 +0000
@@ -1,13 +1,14 @@
 /* window.c */
 void do_window __ARGS((int nchar, long Prenum, int xchar));
 int win_split __ARGS((int size, int flags));
-int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
+int win_split_ins __ARGS((int size, int flags, win_T *new_wp, int dir));
 int win_valid __ARGS((win_T *win));
 int win_count __ARGS((void));
 int make_windows __ARGS((int count, int vertical));
 void win_move_after __ARGS((win_T *win1, win_T *win2));
 void win_equal __ARGS((win_T *next_curwin, int current, int dir));
 void close_windows __ARGS((buf_T *buf, int keep_curwin));
+int one_window __ARGS((void));
 void win_close __ARGS((win_T *win, int free_buf));
 void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
 void win_free_all __ARGS((void));
@@ -26,11 +27,12 @@
 tabpage_T *find_tabpage __ARGS((int n));
 int tabpage_index __ARGS((tabpage_T *ftp));
 void goto_tabpage __ARGS((int n));
-void goto_tabpage_tp __ARGS((tabpage_T *tp));
+void goto_tabpage_tp __ARGS((tabpage_T *tp, int trigger_enter_autocmds, int trigger_leave_autocmds));
 void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
 void tabpage_move __ARGS((int nr));
 void win_goto __ARGS((win_T *wp));
 win_T *win_find_nr __ARGS((int winnr));
+tabpage_T *win_find_tabpage __ARGS((win_T *win));
 void win_enter __ARGS((win_T *wp, int undo_sync));
 win_T *buf_jump_open_win __ARGS((buf_T *buf));
 win_T *buf_jump_open_tab __ARGS((buf_T *buf));
@@ -50,6 +52,8 @@
 void win_setminheight __ARGS((void));
 void win_drag_status_line __ARGS((win_T *dragwin, int offset));
 void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
+void win_new_height __ARGS((win_T *wp, int height));
+void win_new_width __ARGS((win_T *wp, int width));
 void win_comp_scroll __ARGS((win_T *wp));
 void command_height __ARGS((void));
 void last_status __ARGS((int morewin));
@@ -66,9 +70,15 @@
 void check_lnums __ARGS((int do_curwin));
 void make_snapshot __ARGS((int idx));
 void restore_snapshot __ARGS((int idx, int close_curwin));
+int switch_win __ARGS((win_T **save_curwin, tabpage_T **save_curtab, win_T *win, tabpage_T *tp, int no_display));
+void restore_win __ARGS((win_T *save_curwin, tabpage_T *save_curtab, int no_display));
+void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
+void restore_buffer __ARGS((buf_T *save_curbuf));
 int win_hasvertsplit __ARGS((void));
 int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id));
 int match_delete __ARGS((win_T *wp, int id, int perr));
 void clear_matches __ARGS((win_T *wp));
 matchitem_T *get_match __ARGS((win_T *wp, int id));
+int get_win_number __ARGS((win_T *wp, win_T *first_win));
+int get_tab_number __ARGS((tabpage_T *tp));
 /* vim: set ft=c : */
diff -Naur vim73.orig/src/proto.h vim73/src/proto.h
--- vim73.orig/src/proto.h	2010-07-17 15:28:51.000000000 +0000
+++ vim73/src/proto.h	2013-08-04 19:09:10.870609744 +0000
@@ -47,10 +47,12 @@
    typedef int LPBOOL;
 #  include "os_win16.pro"
 #  include "os_mswin.pro"
+#  include "winclip.pro"
 # endif
 # ifdef WIN3264
 #  include "os_win32.pro"
 #  include "os_mswin.pro"
+#  include "winclip.pro"
 #  if (defined(__GNUC__) && !defined(__MINGW32__)) \
 	|| (defined(__BORLANDC__) && __BORLANDC__ < 0x502)
 extern int _stricoll __ARGS((char *a, char *b));
@@ -62,9 +64,6 @@
 # ifdef __BEOS__
 #  include "os_beos.pro"
 # endif
-# ifdef RISCOS
-#  include "os_riscos.pro"
-# endif
 # ifdef __QNX__
 #  include "os_qnx.pro"
 # endif
@@ -245,9 +244,6 @@
 #  ifdef FEAT_GUI_X11
 #   include "gui_x11.pro"
 #  endif
-#  ifdef RISCOS
-#   include "gui_riscos.pro"
-#  endif
 #  ifdef FEAT_GUI_PHOTON
 #   include "gui_photon.pro"
 #  endif
diff -Naur vim73.orig/src/pty.c vim73/src/pty.c
--- vim73.orig/src/pty.c	2010-07-24 18:23:01.000000000 +0000
+++ vim73/src/pty.c	2013-08-04 19:09:10.980609413 +0000
@@ -14,6 +14,10 @@
  * It has been modified to work better with Vim.
  * The parts that are not used in Vim have been deleted.
  * See the "screen" sources for the complete stuff.
+ *
+ * This specific version is distibuted under the Vim license (attribution by
+ * Juergen Weigert), the GPL applies to the original version, see the
+ * copyright notice below.
  */
 
 /* Copyright (c) 1993
@@ -123,8 +127,7 @@
 static void initmaster __ARGS((int));
 
 /*
- *  Open all ptys with O_NOCTTY, just to be on the safe side
- *  (RISCos mips breaks otherwise)
+ *  Open all ptys with O_NOCTTY, just to be on the safe side.
  */
 #ifndef O_NOCTTY
 # define O_NOCTTY 0
@@ -209,8 +212,8 @@
 #ifdef _SEQUENT_
     fvhangup(s);
 #endif
-    strncpy(PtyName, m, sizeof(PtyName));
-    strncpy(TtyName, s, sizeof(TtyName));
+    vim_strncpy((char_u *)PtyName, (char_u *)m, sizeof(PtyName) - 1);
+    vim_strncpy((char_u *)TtyName, (char_u *)s, sizeof(TtyName) - 1);
     initmaster(f);
     *ttyn = TtyName;
     return f;
@@ -301,7 +304,7 @@
 	return -1;
     }
     signal(SIGCHLD, sigcld);
-    strncpy(TtyName, m, sizeof(TtyName));
+    vim_strncpy((char_u *)TtyName, (char_u *)m, sizeof(TtyName) - 1);
     initmaster(f);
     *ttyn = TtyName;
     return f;
@@ -326,7 +329,7 @@
     /* a dumb looking loop replaced by mycrofts code: */
     if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
 	return -1;
-    strncpy(TtyName, ttyname(f), sizeof(TtyName));
+    vim_strncpy((char_u *)TtyName, (char_u *)ttyname(f), sizeof(TtyName) - 1);
     if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
     {
 	close(f);
diff -Naur vim73.orig/src/quickfix.c vim73/src/quickfix.c
--- vim73.orig/src/quickfix.c	2010-08-09 20:12:14.000000000 +0000
+++ vim73/src/quickfix.c	2013-08-04 19:09:10.983942736 +0000
@@ -126,12 +126,14 @@
 static win_T	*qf_find_win __ARGS((qf_info_T *qi));
 static buf_T	*qf_find_buf __ARGS((qf_info_T *qi));
 static void	qf_update_buffer __ARGS((qf_info_T *qi));
+static void	qf_set_title __ARGS((qf_info_T *qi));
 static void	qf_fill_buffer __ARGS((qf_info_T *qi));
 #endif
 static char_u	*get_mef_name __ARGS((void));
-static buf_T	*load_dummy_buffer __ARGS((char_u *fname));
-static void	wipe_dummy_buffer __ARGS((buf_T *buf));
-static void	unload_dummy_buffer __ARGS((buf_T *buf));
+static void	restore_start_dir __ARGS((char_u *dirname_start));
+static buf_T	*load_dummy_buffer __ARGS((char_u *fname, char_u *dirname_start, char_u *resulting_dir));
+static void	wipe_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
+static void	unload_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
 static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
 
 /* Quickfix window check helper macro */
@@ -245,7 +247,7 @@
 			{'t', "."},
 			{'m', ".\\+"},
 			{'r', ".*"},
-			{'p', "[- .]*"},
+			{'p', "[- 	.]*"},
 			{'v', "\\d\\+"},
 			{'s', ".\\+"}
 		    };
@@ -561,6 +563,10 @@
 	    break;
 
 	IObuff[CMDBUFFSIZE - 2] = NUL;  /* for very long lines */
+#ifdef FEAT_MBYTE
+	remove_bom(IObuff);
+#endif
+
 	if ((efmp = vim_strrchr(IObuff, '\n')) != NULL)
 	    *efmp = NUL;
 #ifdef USE_CRNL
@@ -671,11 +677,23 @@
 		}
 		if ((i = (int)fmt_ptr->addr[7]) > 0)		/* %p */
 		{
+		    char_u	*match_ptr;
+
 		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
 			continue;
-		    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
-		    if (*((char_u *)regmatch.startp[i]) != TAB)
-			use_viscol = TRUE;
+		    col = 0;
+		    for (match_ptr = regmatch.startp[i];
+				   match_ptr != regmatch.endp[i]; ++match_ptr)
+		    {
+			++col;
+			if (*match_ptr == TAB)
+			{
+			    col += 7;
+			    col -= col % 8;
+			}
+		    }
+		    ++col;
+		    use_viscol = TRUE;
 		}
 		if ((i = (int)fmt_ptr->addr[8]) > 0)		/* %v */
 		{
@@ -845,7 +863,7 @@
     for (fmt_ptr = fmt_first; fmt_ptr != NULL; fmt_ptr = fmt_first)
     {
 	fmt_first = fmt_ptr->next;
-	vim_free(fmt_ptr->prog);
+	vim_regfree(fmt_ptr->prog);
 	vim_free(fmt_ptr);
     }
     qf_clean_dir_stack(&dir_stack);
@@ -894,8 +912,7 @@
     }
     else
 	qi->qf_curlist = qi->qf_listcount++;
-    qi->qf_lists[qi->qf_curlist].qf_index = 0;
-    qi->qf_lists[qi->qf_curlist].qf_count = 0;
+    vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
     if (qf_title != NULL)
     {
 	char_u *p = alloc((int)STRLEN(qf_title) + 2);
@@ -904,8 +921,6 @@
 	if (p != NULL)
 	    sprintf((char *)p, ":%s", (char *)qf_title);
     }
-    else
-	qi->qf_lists[qi->qf_curlist].qf_title = NULL;
 }
 
 /*
@@ -1164,8 +1179,11 @@
 
 	/* When no valid entries are present in the list, qf_ptr points to
 	 * the first item in the list */
-	if (to_qfl->qf_nonevalid == TRUE)
+	if (to_qfl->qf_nonevalid)
+	{
 	    to_qfl->qf_ptr = to_qfl->qf_start;
+	    to_qfl->qf_index = 1;
+	}
     }
 
     to->w_llist->qf_curlist = qi->qf_curlist;	/* current list */
@@ -1182,21 +1200,17 @@
     if (fname == NULL || *fname == NUL)		/* no file name */
 	return 0;
     {
-#ifdef RISCOS
-	/* Name is reported as `main.c', but file is `c.main' */
-	return ro_buflist_add(fname);
-#else
 	char_u	    *ptr;
 	int	    fnum;
 
-# ifdef VMS
+#ifdef VMS
 	vms_remove_version(fname);
-# endif
-# ifdef BACKSLASH_IN_FILENAME
+#endif
+#ifdef BACKSLASH_IN_FILENAME
 	if (directory != NULL)
 	    slash_adjust(directory);
 	slash_adjust(fname);
-# endif
+#endif
 	if (directory != NULL && !vim_isAbsName(fname)
 		&& (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
 	{
@@ -1221,7 +1235,6 @@
 	    return fnum;
 	}
 	return buflist_add(fname, 0);
-#endif
     }
 }
 
@@ -1603,6 +1616,8 @@
      */
     if (bt_quickfix(curbuf) && !opened_window)
     {
+	win_T *usable_win_ptr = NULL;
+
 	/*
 	 * If there is no file specified, we don't know where to go.
 	 * But do advance, otherwise ":cn" gets stuck.
@@ -1610,14 +1625,32 @@
 	if (qf_ptr->qf_fnum == 0)
 	    goto theend;
 
-	/* Locate a window showing a normal buffer */
 	usable_win = 0;
-	FOR_ALL_WINDOWS(win)
-	    if (win->w_buffer->b_p_bt[0] == NUL)
-	    {
-		usable_win = 1;
-		break;
-	    }
+
+	ll_ref = curwin->w_llist_ref;
+	if (ll_ref != NULL)
+	{
+	    /* Find a window using the same location list that is not a
+	     * quickfix window. */
+	    FOR_ALL_WINDOWS(usable_win_ptr)
+		if (usable_win_ptr->w_llist == ll_ref
+			&& usable_win_ptr->w_buffer->b_p_bt[0] != 'q')
+		{
+		    usable_win = 1;
+		    break;
+		}
+	}
+
+	if (!usable_win)
+	{
+	    /* Locate a window showing a normal buffer */
+	    FOR_ALL_WINDOWS(win)
+		if (win->w_buffer->b_p_bt[0] == NUL)
+		{
+		    usable_win = 1;
+		    break;
+		}
+	}
 
 	/*
 	 * If no usable window is found and 'switchbuf' contains "usetab"
@@ -1646,8 +1679,6 @@
 	 */
 	if (((firstwin == lastwin) && bt_quickfix(curbuf)) || !usable_win)
 	{
-	    ll_ref = curwin->w_llist_ref;
-
 	    flags = WSP_ABOVE;
 	    if (ll_ref != NULL)
 		flags |= WSP_NEWLOC;
@@ -1656,9 +1687,7 @@
 	    opened_window = TRUE;	/* close it when fail */
 	    p_swb = empty_option;	/* don't split again */
 	    swb_flags = 0;
-# ifdef FEAT_SCROLLBIND
-	    curwin->w_p_scb = FALSE;
-# endif
+	    RESET_BINDING(curwin);
 	    if (ll_ref != NULL)
 	    {
 		/* The new window should use the location list from the
@@ -1672,12 +1701,7 @@
 	    if (curwin->w_llist_ref != NULL)
 	    {
 		/* In a location window */
-		ll_ref = curwin->w_llist_ref;
-
-		/* Find the window with the same location list */
-		FOR_ALL_WINDOWS(win)
-		    if (win->w_llist == ll_ref)
-			break;
+		win = usable_win_ptr;
 		if (win == NULL)
 		{
 		    /* Find the window showing the selected file */
@@ -1847,8 +1871,10 @@
 #endif
 	if (print_message)
 	{
-	    /* Update the screen before showing the message */
-	    update_topline_redraw();
+	    /* Update the screen before showing the message, unless the screen
+	     * scrolled up. */
+	    if (!msg_scrolled)
+		update_topline_redraw();
 	    sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
 		    qi->qf_lists[qi->qf_curlist].qf_count,
 		    qf_ptr->qf_cleared ? _(" (line deleted)") : "",
@@ -2075,7 +2101,7 @@
 	    if (qi->qf_curlist == 0)
 	    {
 		EMSG(_("E380: At bottom of quickfix stack"));
-		return;
+		break;
 	    }
 	    --qi->qf_curlist;
 	}
@@ -2084,13 +2110,12 @@
 	    if (qi->qf_curlist >= qi->qf_listcount - 1)
 	    {
 		EMSG(_("E381: At top of quickfix stack"));
-		return;
+		break;
 	    }
 	    ++qi->qf_curlist;
 	}
     }
     qf_msg(qi);
-
 }
 
     static void
@@ -2114,17 +2139,28 @@
     int		idx;
 {
     qfline_T	*qfp;
+    int		stop = FALSE;
 
     while (qi->qf_lists[idx].qf_count)
     {
 	qfp = qi->qf_lists[idx].qf_start->qf_next;
-	vim_free(qi->qf_lists[idx].qf_start->qf_text);
-	vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
-	vim_free(qi->qf_lists[idx].qf_start);
+	if (qi->qf_lists[idx].qf_title != NULL && !stop)
+	{
+	    vim_free(qi->qf_lists[idx].qf_start->qf_text);
+	    stop = (qi->qf_lists[idx].qf_start == qfp);
+	    vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
+	    vim_free(qi->qf_lists[idx].qf_start);
+	    if (stop)
+		/* Somehow qf_count may have an incorrect value, set it to 1
+		 * to avoid crashing when it's wrong.
+		 * TODO: Avoid qf_count being incorrect. */
+		qi->qf_lists[idx].qf_count = 1;
+	}
 	qi->qf_lists[idx].qf_start = qfp;
 	--qi->qf_lists[idx].qf_count;
     }
     vim_free(qi->qf_lists[idx].qf_title);
+    qi->qf_lists[idx].qf_title = NULL;
 }
 
 /*
@@ -2244,6 +2280,7 @@
      * it if we have errors; otherwise, leave it closed.
      */
     if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
+	    || qi->qf_lists[qi->qf_curlist].qf_count == 0
 	    || qi->qf_curlist >= qi->qf_listcount)
     {
 	if (win != NULL)
@@ -2328,14 +2365,14 @@
 	/* The current window becomes the previous window afterwards. */
 	win = curwin;
 
-	if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
-	    /* Create the new window at the very bottom. */
+	if ((eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
+		&& cmdmod.split == 0)
+	    /* Create the new window at the very bottom, except when
+	     * :belowright or :aboveleft is used. */
 	    win_goto(lastwin);
 	if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL)
 	    return;		/* not enough room for window */
-#ifdef FEAT_SCROLLBIND
-	curwin->w_p_scb = FALSE;
-#endif
+	RESET_BINDING(curwin);
 
 	if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
 	{
@@ -2362,6 +2399,7 @@
 	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
 								   OPT_LOCAL);
 	    set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
+	    RESET_BINDING(curwin);
 #ifdef FEAT_DIFF
 	    curwin->w_p_diff = FALSE;
 #endif
@@ -2390,8 +2428,7 @@
     qf_fill_buffer(qi);
 
     if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
-	set_internal_string_var((char_u *)"w:quickfix_title",
-				       qi->qf_lists[qi->qf_curlist].qf_title);
+	qf_set_title(qi);
 
     curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
     curwin->w_cursor.col = 0;
@@ -2528,6 +2565,8 @@
     qf_info_T	*qi;
 {
     buf_T	*buf;
+    win_T	*win;
+    win_T	*curwin_save;
     aco_save_T	aco;
 
     /* Check if a buffer for the quickfix list exists.  Update it. */
@@ -2539,6 +2578,16 @@
 
 	qf_fill_buffer(qi);
 
+	if (qi->qf_lists[qi->qf_curlist].qf_title != NULL
+	    && (win = qf_find_win(qi)) != NULL)
+	{
+	    curwin_save = curwin;
+	    curwin = win;
+	    qf_set_title(qi);
+	    curwin = curwin_save;
+
+	}
+
 	/* restore curwin/curbuf and a few other things */
 	aucmd_restbuf(&aco);
 
@@ -2546,6 +2595,14 @@
     }
 }
 
+    static void
+qf_set_title(qi)
+    qf_info_T	*qi;
+{
+    set_internal_string_var((char_u *)"w:quickfix_title",
+				    qi->qf_lists[qi->qf_curlist].qf_title);
+}
+
 /*
  * Fill current buffer with quickfix errors, replacing any previous contents.
  * curbuf must be the quickfix buffer!
@@ -2657,7 +2714,7 @@
 bt_quickfix(buf)
     buf_T	*buf;
 {
-    return (buf->b_p_bt[0] == 'q');
+    return buf != NULL && buf->b_p_bt[0] == 'q';
 }
 
 /*
@@ -2668,8 +2725,8 @@
 bt_nofile(buf)
     buf_T	*buf;
 {
-    return (buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
-	    || buf->b_p_bt[0] == 'a';
+    return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+	    || buf->b_p_bt[0] == 'a');
 }
 
 /*
@@ -2679,7 +2736,7 @@
 bt_dontwrite(buf)
     buf_T	*buf;
 {
-    return (buf->b_p_bt[0] == 'n');
+    return buf != NULL && buf->b_p_bt[0] == 'n';
 }
 
     int
@@ -2744,6 +2801,13 @@
 #ifdef FEAT_AUTOCMD
     char_u	*au_name = NULL;
 
+    /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
+    if (grep_internal(eap->cmdidx))
+    {
+	ex_vimgrep(eap);
+	return;
+    }
+
     switch (eap->cmdidx)
     {
 	case CMD_make:	    au_name = (char_u *)"make"; break;
@@ -2765,13 +2829,6 @@
     }
 #endif
 
-    /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
-    if (grep_internal(eap->cmdidx))
-    {
-	ex_vimgrep(eap);
-	return;
-    }
-
     if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
 	|| eap->cmdidx == CMD_lgrepadd)
 	wp = curwin;
@@ -2819,17 +2876,21 @@
 					   (eap->cmdidx != CMD_grepadd
 					    && eap->cmdidx != CMD_lgrepadd),
 					   *eap->cmdlinep);
+    if (wp != NULL)
+	qi = GET_LOC_LIST(wp);
 #ifdef FEAT_AUTOCMD
     if (au_name != NULL)
+    {
 	apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
 					       curbuf->b_fname, TRUE, curbuf);
+	if (qi->qf_curlist < qi->qf_listcount)
+	    res = qi->qf_lists[qi->qf_curlist].qf_count;
+	else
+	    res = 0;
+    }
 #endif
     if (res > 0 && !eap->forceit)
-    {
-	if (wp != NULL)
-	    qi = GET_LOC_LIST(wp);
 	qf_jump(qi, 0, 0, FALSE);		/* display first error */
-    }
 
     mch_remove(fname);
     vim_free(fname);
@@ -2974,11 +3035,28 @@
 {
     win_T	*wp = NULL;
     qf_info_T	*qi = &ql_info;
+#ifdef FEAT_AUTOCMD
+    char_u	*au_name = NULL;
+#endif
 
     if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
-	|| eap->cmdidx == CMD_laddfile)
+					       || eap->cmdidx == CMD_laddfile)
 	wp = curwin;
 
+#ifdef FEAT_AUTOCMD
+    switch (eap->cmdidx)
+    {
+	case CMD_cfile:	    au_name = (char_u *)"cfile"; break;
+	case CMD_cgetfile:  au_name = (char_u *)"cgetfile"; break;
+	case CMD_caddfile:  au_name = (char_u *)"caddfile"; break;
+	case CMD_lfile:	    au_name = (char_u *)"lfile"; break;
+	case CMD_lgetfile:  au_name = (char_u *)"lgetfile"; break;
+	case CMD_laddfile:  au_name = (char_u *)"laddfile"; break;
+	default: break;
+    }
+    if (au_name != NULL)
+	apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf);
+#endif
 #ifdef FEAT_BROWSE
     if (cmdmod.browse)
     {
@@ -3010,10 +3088,22 @@
 				  && (eap->cmdidx == CMD_cfile
 					     || eap->cmdidx == CMD_lfile))
     {
+#ifdef FEAT_AUTOCMD
+	if (au_name != NULL)
+	    apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
+#endif
 	if (wp != NULL)
 	    qi = GET_LOC_LIST(wp);
 	qf_jump(qi, 0, 0, eap->forceit);	/* display first error */
     }
+
+    else
+    {
+#ifdef FEAT_AUTOCMD
+	if (au_name != NULL)
+	    apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
+#endif
+    }
 }
 
 /*
@@ -3034,6 +3124,9 @@
     char_u	*p;
     int		fi;
     qf_info_T	*qi = &ql_info;
+#ifdef FEAT_AUTOCMD
+    qfline_T	*cur_qf_start;
+#endif
     qfline_T	*prevp = NULL;
     long	lnum;
     buf_T	*buf;
@@ -3051,18 +3144,22 @@
     int		flags = 0;
     colnr_T	col;
     long	tomatch;
-    char_u	dirname_start[MAXPATHL];
-    char_u	dirname_now[MAXPATHL];
+    char_u	*dirname_start = NULL;
+    char_u	*dirname_now = NULL;
     char_u	*target_dir = NULL;
 #ifdef FEAT_AUTOCMD
     char_u	*au_name =  NULL;
 
     switch (eap->cmdidx)
     {
-	case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
-	case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
-	case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
+	case CMD_vimgrep:     au_name = (char_u *)"vimgrep"; break;
+	case CMD_lvimgrep:    au_name = (char_u *)"lvimgrep"; break;
+	case CMD_vimgrepadd:  au_name = (char_u *)"vimgrepadd"; break;
 	case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
+	case CMD_grep:	      au_name = (char_u *)"grep"; break;
+	case CMD_lgrep:	      au_name = (char_u *)"lgrep"; break;
+	case CMD_grepadd:     au_name = (char_u *)"grepadd"; break;
+	case CMD_lgrepadd:    au_name = (char_u *)"lgrepadd"; break;
 	default: break;
     }
     if (au_name != NULL)
@@ -3097,7 +3194,20 @@
 	EMSG(_(e_invalpat));
 	goto theend;
     }
-    regmatch.regprog = vim_regcomp(s, RE_MAGIC);
+
+    if (s != NULL && *s == NUL)
+    {
+	/* Pattern is empty, use last search pattern. */
+	if (last_search_pat() == NULL)
+	{
+	    EMSG(_(e_noprevre));
+	    goto theend;
+	}
+	regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
+    }
+    else
+	regmatch.regprog = vim_regcomp(s, RE_MAGIC);
+
     if (regmatch.regprog == NULL)
 	goto theend;
     regmatch.rmm_ic = p_ic;
@@ -3122,7 +3232,7 @@
 	    ;
 
     /* parse the list of arguments */
-    if (get_arglist_exp(p, &fcount, &fnames) == FAIL)
+    if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
 	goto theend;
     if (fcount == 0)
     {
@@ -3130,10 +3240,21 @@
 	goto theend;
     }
 
+    dirname_start = alloc(MAXPATHL);
+    dirname_now = alloc(MAXPATHL);
+    if (dirname_start == NULL || dirname_now == NULL)
+	goto theend;
+
     /* Remember the current directory, because a BufRead autocommand that does
      * ":lcd %:p:h" changes the meaning of short path names. */
     mch_dirname(dirname_start, MAXPATHL);
 
+#ifdef FEAT_AUTOCMD
+     /* Remember the value of qf_start, so that we can check for autocommands
+      * changing the current quickfix list. */
+    cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+#endif
+
     seconds = (time_t)0;
     for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
     {
@@ -3178,19 +3299,7 @@
 
 	    /* Load file into a buffer, so that 'fileencoding' is detected,
 	     * autocommands applied, etc. */
-	    buf = load_dummy_buffer(fname);
-
-	    /* When autocommands changed directory: go back.  We assume it was
-	     * ":lcd %:p:h". */
-	    mch_dirname(dirname_now, MAXPATHL);
-	    if (STRCMP(dirname_start, dirname_now) != 0)
-	    {
-		exarg_T ea;
-
-		ea.arg = dirname_start;
-		ea.cmdidx = CMD_lcd;
-		ex_cd(&ea);
-	    }
+	    buf = load_dummy_buffer(fname, dirname_start, dirname_now);
 
 	    p_mls = save_mls;
 #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
@@ -3201,6 +3310,28 @@
 	    /* Use existing, loaded buffer. */
 	    using_dummy = FALSE;
 
+#ifdef FEAT_AUTOCMD
+	if (cur_qf_start != qi->qf_lists[qi->qf_curlist].qf_start)
+	{
+	    int idx;
+
+	    /* Autocommands changed the quickfix list.  Find the one we were
+	     * using and restore it. */
+	    for (idx = 0; idx < LISTCOUNT; ++idx)
+		if (cur_qf_start == qi->qf_lists[idx].qf_start)
+		{
+		    qi->qf_curlist = idx;
+		    break;
+		}
+	    if (idx == LISTCOUNT)
+	    {
+		/* List cannot be found, create a new one. */
+		qf_new_list(qi, *eap->cmdlinep);
+		cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+	    }
+	}
+#endif
+
 	if (buf == NULL)
 	{
 	    if (!got_int)
@@ -3252,6 +3383,9 @@
 		if (got_int)
 		    break;
 	    }
+#ifdef FEAT_AUTOCMD
+	    cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+#endif
 
 	    if (using_dummy)
 	    {
@@ -3261,7 +3395,7 @@
 		{
 		    /* Never keep a dummy buffer if there is another buffer
 		     * with the same name. */
-		    wipe_dummy_buffer(buf);
+		    wipe_dummy_buffer(buf, dirname_start);
 		    buf = NULL;
 		}
 		else if (!cmdmod.hide
@@ -3277,12 +3411,12 @@
 		     * many swap files. */
 		    if (!found_match)
 		    {
-			wipe_dummy_buffer(buf);
+			wipe_dummy_buffer(buf, dirname_start);
 			buf = NULL;
 		    }
 		    else if (buf != first_match_buf || (flags & VGR_NOJUMP))
 		    {
-			unload_dummy_buffer(buf);
+			unload_dummy_buffer(buf, dirname_start);
 			buf = NULL;
 		    }
 		}
@@ -3366,8 +3500,10 @@
     }
 
 theend:
+    vim_free(dirname_now);
+    vim_free(dirname_start);
     vim_free(target_dir);
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 }
 
 /*
@@ -3426,15 +3562,52 @@
 }
 
 /*
- * Load file "fname" into a dummy buffer and return the buffer pointer.
+ * Restore current working directory to "dirname_start" if they differ, taking
+ * into account whether it is set locally or globally.
+ */
+    static void
+restore_start_dir(dirname_start)
+    char_u	*dirname_start;
+{
+    char_u *dirname_now = alloc(MAXPATHL);
+
+    if (NULL != dirname_now)
+    {
+	mch_dirname(dirname_now, MAXPATHL);
+	if (STRCMP(dirname_start, dirname_now) != 0)
+	{
+	    /* If the directory has changed, change it back by building up an
+	     * appropriate ex command and executing it. */
+	    exarg_T ea;
+
+	    ea.arg = dirname_start;
+	    ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd;
+	    ex_cd(&ea);
+	}
+	vim_free(dirname_now);
+    }
+}
+
+/*
+ * Load file "fname" into a dummy buffer and return the buffer pointer,
+ * placing the directory resulting from the buffer load into the
+ * "resulting_dir" pointer. "resulting_dir" must be allocated by the caller
+ * prior to calling this function. Restores directory to "dirname_start" prior
+ * to returning, if autocmds or the 'autochdir' option have changed it.
+ *
+ * If creating the dummy buffer does not fail, must call unload_dummy_buffer()
+ * or wipe_dummy_buffer() later!
+ *
  * Returns NULL if it fails.
- * Must call unload_dummy_buffer() or wipe_dummy_buffer() later!
  */
     static buf_T *
-load_dummy_buffer(fname)
+load_dummy_buffer(fname, dirname_start, resulting_dir)
     char_u	*fname;
+    char_u	*dirname_start;  /* in: old directory */
+    char_u	*resulting_dir;  /* out: new directory */
 {
     buf_T	*newbuf;
+    buf_T	*newbuf_to_wipe = NULL;
     int		failed = TRUE;
     aco_save_T	aco;
 
@@ -3471,33 +3644,48 @@
 	    failed = FALSE;
 	    if (curbuf != newbuf)
 	    {
-		/* Bloody autocommands changed the buffer! */
-		if (buf_valid(newbuf))
-		    wipe_buffer(newbuf, FALSE);
+		/* Bloody autocommands changed the buffer!  Can happen when
+		 * using netrw and editing a remote file.  Use the current
+		 * buffer instead, delete the dummy one after restoring the
+		 * window stuff. */
+		newbuf_to_wipe = newbuf;
 		newbuf = curbuf;
 	    }
 	}
 
 	/* restore curwin/curbuf and a few other things */
 	aucmd_restbuf(&aco);
+	if (newbuf_to_wipe != NULL && buf_valid(newbuf_to_wipe))
+	    wipe_buffer(newbuf_to_wipe, FALSE);
     }
 
+    /*
+     * When autocommands/'autochdir' option changed directory: go back.
+     * Let the caller know what the resulting dir was first, in case it is
+     * important.
+     */
+    mch_dirname(resulting_dir, MAXPATHL);
+    restore_start_dir(dirname_start);
+
     if (!buf_valid(newbuf))
 	return NULL;
     if (failed)
     {
-	wipe_dummy_buffer(newbuf);
+	wipe_dummy_buffer(newbuf, dirname_start);
 	return NULL;
     }
     return newbuf;
 }
 
 /*
- * Wipe out the dummy buffer that load_dummy_buffer() created.
+ * Wipe out the dummy buffer that load_dummy_buffer() created. Restores
+ * directory to "dirname_start" prior to returning, if autocmds or the
+ * 'autochdir' option have changed it.
  */
     static void
-wipe_dummy_buffer(buf)
+wipe_dummy_buffer(buf, dirname_start)
     buf_T	*buf;
+    char_u	*dirname_start;
 {
     if (curbuf != buf)		/* safety check */
     {
@@ -3517,18 +3705,28 @@
 	 * new aborting error, interrupt, or uncaught exception. */
 	leave_cleanup(&cs);
 #endif
+	/* When autocommands/'autochdir' option changed directory: go back. */
+	restore_start_dir(dirname_start);
     }
 }
 
 /*
- * Unload the dummy buffer that load_dummy_buffer() created.
+ * Unload the dummy buffer that load_dummy_buffer() created. Restores
+ * directory to "dirname_start" prior to returning, if autocmds or the
+ * 'autochdir' option have changed it.
  */
     static void
-unload_dummy_buffer(buf)
+unload_dummy_buffer(buf, dirname_start)
     buf_T	*buf;
+    char_u	*dirname_start;
 {
     if (curbuf != buf)		/* safety check */
-	close_buffer(NULL, buf, DOBUF_UNLOAD);
+    {
+	close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
+
+	/* When autocommands/'autochdir' option changed directory: go back. */
+	restore_start_dir(dirname_start);
+    }
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
@@ -3697,7 +3895,7 @@
     }
 
     if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
-	/* empty list or no valid entry */
+	/* no valid entry */
 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
     else
 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
@@ -3841,16 +4039,35 @@
     qf_info_T	*qi = &ql_info;
     int		new_qi = FALSE;
     win_T	*wp;
-
-    /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
-    save_cpo = p_cpo;
-    p_cpo = empty_option;
+#ifdef FEAT_AUTOCMD
+    char_u	*au_name =  NULL;
+#endif
 
 #ifdef FEAT_MULTI_LANG
     /* Check for a specified language */
     lang = check_help_lang(eap->arg);
 #endif
 
+#ifdef FEAT_AUTOCMD
+    switch (eap->cmdidx)
+    {
+	case CMD_helpgrep:  au_name = (char_u *)"helpgrep"; break;
+	case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break;
+	default: break;
+    }
+    if (au_name != NULL)
+    {
+	apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
+					       curbuf->b_fname, TRUE, curbuf);
+	if (did_throw || force_abort)
+	    return;
+    }
+#endif
+
+    /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
+    save_cpo = p_cpo;
+    p_cpo = empty_option;
+
     if (eap->cmdidx == CMD_lhelpgrep)
     {
 	/* Find an existing help window */
@@ -3876,6 +4093,16 @@
     regmatch.rm_ic = FALSE;
     if (regmatch.regprog != NULL)
     {
+#ifdef FEAT_MBYTE
+	vimconv_T vc;
+
+	/* Help files are in utf-8 or latin1, convert lines when 'encoding'
+	 * differs. */
+	vc.vc_type = CONV_NONE;
+	if (!enc_utf8)
+	    convert_setup(&vc, (char_u *)"utf-8", p_enc);
+#endif
+
 	/* create a new quickfix list */
 	qf_new_list(qi, *eap->cmdlinep);
 
@@ -3910,21 +4137,33 @@
 			lnum = 1;
 			while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
 			{
-			    if (vim_regexec(&regmatch, IObuff, (colnr_T)0))
+			    char_u    *line = IObuff;
+#ifdef FEAT_MBYTE
+			    /* Convert a line if 'encoding' is not utf-8 and
+			     * the line contains a non-ASCII character. */
+			    if (vc.vc_type != CONV_NONE
+						   && has_non_ascii(IObuff)) {
+				line = string_convert(&vc, IObuff, NULL);
+				if (line == NULL)
+				    line = IObuff;
+			    }
+#endif
+
+			    if (vim_regexec(&regmatch, line, (colnr_T)0))
 			    {
-				int	l = (int)STRLEN(IObuff);
+				int	l = (int)STRLEN(line);
 
 				/* remove trailing CR, LF, spaces, etc. */
-				while (l > 0 && IObuff[l - 1] <= ' ')
-				     IObuff[--l] = NUL;
+				while (l > 0 && line[l - 1] <= ' ')
+				     line[--l] = NUL;
 
 				if (qf_add_entry(qi, &prevp,
 					    NULL,	/* dir */
 					    fnames[fi],
 					    0,
-					    IObuff,
+					    line,
 					    lnum,
-					    (int)(regmatch.startp[0] - IObuff)
+					    (int)(regmatch.startp[0] - line)
 								+ 1, /* col */
 					    FALSE,	/* vis_col */
 					    NULL,	/* search pattern */
@@ -3934,9 +4173,17 @@
 					    ) == FAIL)
 				{
 				    got_int = TRUE;
+#ifdef FEAT_MBYTE
+				    if (line != IObuff)
+					vim_free(line);
+#endif
 				    break;
 				}
 			    }
+#ifdef FEAT_MBYTE
+			    if (line != IObuff)
+				vim_free(line);
+#endif
 			    ++lnum;
 			    line_breakcheck();
 			}
@@ -3946,7 +4193,12 @@
 		FreeWild(fcount, fnames);
 	    }
 	}
-	vim_free(regmatch.regprog);
+
+	vim_regfree(regmatch.regprog);
+#ifdef FEAT_MBYTE
+	if (vc.vc_type != CONV_NONE)
+	    convert_setup(&vc, NULL, NULL);
+#endif
 
 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
 	qi->qf_lists[qi->qf_curlist].qf_ptr =
@@ -3964,6 +4216,17 @@
     qf_update_buffer(qi);
 #endif
 
+#ifdef FEAT_AUTOCMD
+    if (au_name != NULL)
+    {
+	apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+					       curbuf->b_fname, TRUE, curbuf);
+	if (!new_qi && qi != &ql_info && qf_find_buf(qi) == NULL)
+	    /* autocommands made "qi" invalid */
+	    return;
+    }
+#endif
+
     /* Jump to first match. */
     if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
 	qf_jump(qi, 0, 0, FALSE);
diff -Naur vim73.orig/src/regexp.c vim73/src/regexp.c
--- vim73.orig/src/regexp.c	2010-07-12 20:41:48.000000000 +0000
+++ vim73/src/regexp.c	2013-08-04 19:09:11.000609353 +0000
@@ -38,9 +38,22 @@
  * Named character class support added by Walter Briscoe (1998 Jul 01)
  */
 
+/* Uncomment the first if you do not want to see debugging logs or files
+ * related to regular expressions, even when compiling with -DDEBUG.
+ * Uncomment the second to get the regexp debugging. */
+/* #undef DEBUG */
+/* #define DEBUG */
+
 #include "vim.h"
 
-#undef DEBUG
+#ifdef DEBUG
+/* show/save debugging data when BT engine is used */
+# define BT_REGEXP_DUMP
+/* save the debugging data to a file instead of displaying it */
+# define BT_REGEXP_LOG
+# define BT_REGEXP_DEBUG_LOG
+# define BT_REGEXP_DEBUG_LOG_NAME	"bt_regexp_debug.log"
+#endif
 
 /*
  * The "internal use only" fields in regexp.h are present to pass info from
@@ -326,9 +339,10 @@
 /* Used for an error (down from) vim_regcomp(): give the error message, set
  * rc_did_emsg and return NULL */
 #define EMSG_RET_NULL(m) return (EMSG(m), rc_did_emsg = TRUE, (void *)NULL)
-#define EMSG_M_RET_NULL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, (void *)NULL)
 #define EMSG_RET_FAIL(m) return (EMSG(m), rc_did_emsg = TRUE, FAIL)
-#define EMSG_ONE_RET_NULL EMSG_M_RET_NULL(_("E369: invalid item in %s%%[]"), reg_magic == MAGIC_ALL)
+#define EMSG2_RET_NULL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, (void *)NULL)
+#define EMSG2_RET_FAIL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, FAIL)
+#define EMSG_ONE_RET_NULL EMSG2_RET_NULL(_("E369: invalid item in %s%%[]"), reg_magic == MAGIC_ALL)
 
 #define MAX_LIMIT	(32767L << 16L)
 
@@ -336,11 +350,23 @@
 static int cstrncmp __ARGS((char_u *s1, char_u *s2, int *n));
 static char_u *cstrchr __ARGS((char_u *, int));
 
+#ifdef BT_REGEXP_DUMP
+static void	regdump __ARGS((char_u *, bt_regprog_T *));
+#endif
 #ifdef DEBUG
-static void	regdump __ARGS((char_u *, regprog_T *));
 static char_u	*regprop __ARGS((char_u *));
 #endif
 
+static char_u e_missingbracket[] = N_("E769: Missing ] after %s[");
+static char_u e_unmatchedpp[] = N_("E53: Unmatched %s%%(");
+static char_u e_unmatchedp[] = N_("E54: Unmatched %s(");
+static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)");
+#ifdef FEAT_SYN_HL
+static char_u e_z_not_allowed[] = N_("E66: \\z( not allowed here");
+static char_u e_z1_not_allowed[] = N_("E67: \\z1 et al. not allowed here");
+#endif
+static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%[");
+static char_u e_empty_sb[]  = N_("E70: Empty %s%%[]");
 #define NOT_MULTI	0
 #define MULTI_ONE	1
 #define MULTI_MULT	2
@@ -630,7 +656,13 @@
 };
 #endif
 
-static int	curchr;
+static int	curchr;		/* currently parsed character */
+/* Previous character.  Note: prevchr is sometimes -1 when we are not at the
+ * start, eg in /[ ^I]^ the pattern was never found even if it existed,
+ * because ^ was taken to be magic -- webb */
+static int	prevchr;
+static int	prevprevchr;	/* previous-previous character */
+static int	nextchr;	/* used for ungetchr() */
 
 /* arguments for reg() */
 #define REG_NOPAREN	0	/* toplevel reg() */
@@ -638,10 +670,25 @@
 #define REG_ZPAREN	2	/* \z(\) */
 #define REG_NPAREN	3	/* \%(\) */
 
+typedef struct
+{
+     char_u	*regparse;
+     int	prevchr_len;
+     int	curchr;
+     int	prevchr;
+     int	prevprevchr;
+     int	nextchr;
+     int	at_start;
+     int	prev_at_start;
+     int	regnpar;
+} parse_state_T;
+
 /*
  * Forward declarations for vim_regcomp()'s friends.
  */
 static void	initchr __ARGS((char_u *));
+static void	save_parse_state __ARGS((parse_state_T *ps));
+static void	restore_parse_state __ARGS((parse_state_T *ps));
 static int	getchr __ARGS((void));
 static void	skipchr_keepstart __ARGS((void));
 static int	peekchr __ARGS((void));
@@ -666,16 +713,24 @@
 static void	regc __ARGS((int b));
 #ifdef FEAT_MBYTE
 static void	regmbc __ARGS((int c));
+# define REGMBC(x) regmbc(x);
+# define CASEMBC(x) case x:
 #else
 # define regmbc(c) regc(c)
+# define REGMBC(x)
+# define CASEMBC(x)
 #endif
 static void	reginsert __ARGS((int, char_u *));
+static void	reginsert_nr __ARGS((int op, long val, char_u *opnd));
 static void	reginsert_limits __ARGS((int, long, long, char_u *));
 static char_u	*re_put_long __ARGS((char_u *pr, long_u val));
 static int	read_limits __ARGS((long *, long *));
 static void	regtail __ARGS((char_u *, char_u *));
 static void	regoptail __ARGS((char_u *, char_u *));
 
+static regengine_T bt_regengine;
+static regengine_T nfa_regengine;
+
 /*
  * Return TRUE if compiled regular expression "prog" can match a line break.
  */
@@ -758,6 +813,7 @@
 /*
  * Produce the bytes for equivalence class "c".
  * Currently only handles latin1, latin9 and utf-8.
+ * NOTE: When changing this function, also change nfa_emit_equi_class()
  */
     static void
 reg_equi_class(c)
@@ -787,68 +843,295 @@
 	switch (c)
 	{
 	    case 'A': case '\300': case '\301': case '\302':
+	    CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104) CASEMBC(0x1cd)
+	    CASEMBC(0x1de) CASEMBC(0x1e0) CASEMBC(0x1ea2)
 	    case '\303': case '\304': case '\305':
 		      regmbc('A'); regmbc('\300'); regmbc('\301');
 		      regmbc('\302'); regmbc('\303'); regmbc('\304');
 		      regmbc('\305');
+		      REGMBC(0x100) REGMBC(0x102) REGMBC(0x104)
+		      REGMBC(0x1cd) REGMBC(0x1de) REGMBC(0x1e0)
+		      REGMBC(0x1ea2)
+		      return;
+	    case 'B': CASEMBC(0x1e02) CASEMBC(0x1e06)
+		      regmbc('B'); REGMBC(0x1e02) REGMBC(0x1e06)
 		      return;
 	    case 'C': case '\307':
+	    CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a) CASEMBC(0x10c)
 		      regmbc('C'); regmbc('\307');
+		      REGMBC(0x106) REGMBC(0x108) REGMBC(0x10a)
+		      REGMBC(0x10c)
+		      return;
+	    case 'D': CASEMBC(0x10e) CASEMBC(0x110) CASEMBC(0x1e0a)
+	    CASEMBC(0x1e0e) CASEMBC(0x1e10)
+		      regmbc('D'); REGMBC(0x10e) REGMBC(0x110)
+		      REGMBC(0x1e0a) REGMBC(0x1e0e) REGMBC(0x1e10)
 		      return;
 	    case 'E': case '\310': case '\311': case '\312': case '\313':
+	    CASEMBC(0x112) CASEMBC(0x114) CASEMBC(0x116) CASEMBC(0x118)
+	    CASEMBC(0x11a) CASEMBC(0x1eba) CASEMBC(0x1ebc)
 		      regmbc('E'); regmbc('\310'); regmbc('\311');
 		      regmbc('\312'); regmbc('\313');
+		      REGMBC(0x112) REGMBC(0x114) REGMBC(0x116)
+		      REGMBC(0x118) REGMBC(0x11a) REGMBC(0x1eba)
+		      REGMBC(0x1ebc)
+		      return;
+	    case 'F': CASEMBC(0x1e1e)
+		      regmbc('F'); REGMBC(0x1e1e)
+		      return;
+	    case 'G': CASEMBC(0x11c) CASEMBC(0x11e) CASEMBC(0x120)
+	    CASEMBC(0x122) CASEMBC(0x1e4) CASEMBC(0x1e6) CASEMBC(0x1f4)
+	    CASEMBC(0x1e20)
+		      regmbc('G'); REGMBC(0x11c) REGMBC(0x11e)
+		      REGMBC(0x120) REGMBC(0x122) REGMBC(0x1e4)
+		      REGMBC(0x1e6) REGMBC(0x1f4) REGMBC(0x1e20)
+		      return;
+	    case 'H': CASEMBC(0x124) CASEMBC(0x126) CASEMBC(0x1e22)
+	    CASEMBC(0x1e26) CASEMBC(0x1e28)
+		      regmbc('H'); REGMBC(0x124) REGMBC(0x126)
+		      REGMBC(0x1e22) REGMBC(0x1e26) REGMBC(0x1e28)
 		      return;
 	    case 'I': case '\314': case '\315': case '\316': case '\317':
+	    CASEMBC(0x128) CASEMBC(0x12a) CASEMBC(0x12c) CASEMBC(0x12e)
+	    CASEMBC(0x130) CASEMBC(0x1cf) CASEMBC(0x1ec8)
 		      regmbc('I'); regmbc('\314'); regmbc('\315');
 		      regmbc('\316'); regmbc('\317');
+		      REGMBC(0x128) REGMBC(0x12a) REGMBC(0x12c)
+		      REGMBC(0x12e) REGMBC(0x130) REGMBC(0x1cf)
+		      REGMBC(0x1ec8)
+		      return;
+	    case 'J': CASEMBC(0x134)
+		      regmbc('J'); REGMBC(0x134)
+		      return;
+	    case 'K': CASEMBC(0x136) CASEMBC(0x1e8) CASEMBC(0x1e30)
+	    CASEMBC(0x1e34)
+		      regmbc('K'); REGMBC(0x136) REGMBC(0x1e8)
+		      REGMBC(0x1e30) REGMBC(0x1e34)
+		      return;
+	    case 'L': CASEMBC(0x139) CASEMBC(0x13b) CASEMBC(0x13d)
+	    CASEMBC(0x13f) CASEMBC(0x141) CASEMBC(0x1e3a)
+		      regmbc('L'); REGMBC(0x139) REGMBC(0x13b)
+		      REGMBC(0x13d) REGMBC(0x13f) REGMBC(0x141)
+		      REGMBC(0x1e3a)
+		      return;
+	    case 'M': CASEMBC(0x1e3e) CASEMBC(0x1e40)
+		      regmbc('M'); REGMBC(0x1e3e) REGMBC(0x1e40)
 		      return;
 	    case 'N': case '\321':
+	    CASEMBC(0x143) CASEMBC(0x145) CASEMBC(0x147) CASEMBC(0x1e44)
+	    CASEMBC(0x1e48)
 		      regmbc('N'); regmbc('\321');
+		      REGMBC(0x143) REGMBC(0x145) REGMBC(0x147)
+		      REGMBC(0x1e44) REGMBC(0x1e48)
 		      return;
 	    case 'O': case '\322': case '\323': case '\324': case '\325':
-	    case '\326':
+	    case '\326': case '\330':
+	    CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150) CASEMBC(0x1a0)
+	    CASEMBC(0x1d1) CASEMBC(0x1ea) CASEMBC(0x1ec) CASEMBC(0x1ece)
 		      regmbc('O'); regmbc('\322'); regmbc('\323');
 		      regmbc('\324'); regmbc('\325'); regmbc('\326');
+		      regmbc('\330');
+		      REGMBC(0x14c) REGMBC(0x14e) REGMBC(0x150)
+		      REGMBC(0x1a0) REGMBC(0x1d1) REGMBC(0x1ea)
+		      REGMBC(0x1ec) REGMBC(0x1ece)
+		      return;
+	    case 'P': case 0x1e54: case 0x1e56:
+		      regmbc('P'); REGMBC(0x1e54) REGMBC(0x1e56)
+		      return;
+	    case 'R': CASEMBC(0x154) CASEMBC(0x156) CASEMBC(0x158)
+	    CASEMBC(0x1e58) CASEMBC(0x1e5e)
+		      regmbc('R'); REGMBC(0x154) REGMBC(0x156) REGMBC(0x158)
+		      REGMBC(0x1e58) REGMBC(0x1e5e)
+		      return;
+	    case 'S': CASEMBC(0x15a) CASEMBC(0x15c) CASEMBC(0x15e)
+	    CASEMBC(0x160) CASEMBC(0x1e60)
+		      regmbc('S'); REGMBC(0x15a) REGMBC(0x15c)
+		      REGMBC(0x15e) REGMBC(0x160) REGMBC(0x1e60)
+		      return;
+	    case 'T': CASEMBC(0x162) CASEMBC(0x164) CASEMBC(0x166)
+	    CASEMBC(0x1e6a) CASEMBC(0x1e6e)
+		      regmbc('T'); REGMBC(0x162) REGMBC(0x164)
+		      REGMBC(0x166) REGMBC(0x1e6a) REGMBC(0x1e6e)
 		      return;
 	    case 'U': case '\331': case '\332': case '\333': case '\334':
+	    CASEMBC(0x168) CASEMBC(0x16a) CASEMBC(0x16c) CASEMBC(0x16e)
+	    CASEMBC(0x170) CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
+	    CASEMBC(0x1ee6)
 		      regmbc('U'); regmbc('\331'); regmbc('\332');
 		      regmbc('\333'); regmbc('\334');
+		      REGMBC(0x168) REGMBC(0x16a) REGMBC(0x16c)
+		      REGMBC(0x16e) REGMBC(0x170) REGMBC(0x172)
+		      REGMBC(0x1af) REGMBC(0x1d3) REGMBC(0x1ee6)
+		      return;
+	    case 'V': CASEMBC(0x1e7c)
+		      regmbc('V'); REGMBC(0x1e7c)
+		      return;
+	    case 'W': CASEMBC(0x174) CASEMBC(0x1e80) CASEMBC(0x1e82)
+	    CASEMBC(0x1e84) CASEMBC(0x1e86)
+		      regmbc('W'); REGMBC(0x174) REGMBC(0x1e80)
+		      REGMBC(0x1e82) REGMBC(0x1e84) REGMBC(0x1e86)
+		      return;
+	    case 'X': CASEMBC(0x1e8a) CASEMBC(0x1e8c)
+		      regmbc('X'); REGMBC(0x1e8a) REGMBC(0x1e8c)
 		      return;
 	    case 'Y': case '\335':
+	    CASEMBC(0x176) CASEMBC(0x178) CASEMBC(0x1e8e) CASEMBC(0x1ef2)
+	    CASEMBC(0x1ef6) CASEMBC(0x1ef8)
 		      regmbc('Y'); regmbc('\335');
+		      REGMBC(0x176) REGMBC(0x178) REGMBC(0x1e8e)
+		      REGMBC(0x1ef2) REGMBC(0x1ef6) REGMBC(0x1ef8)
+		      return;
+	    case 'Z': CASEMBC(0x179) CASEMBC(0x17b) CASEMBC(0x17d)
+	    CASEMBC(0x1b5) CASEMBC(0x1e90) CASEMBC(0x1e94)
+		      regmbc('Z'); REGMBC(0x179) REGMBC(0x17b)
+		      REGMBC(0x17d) REGMBC(0x1b5) REGMBC(0x1e90)
+		      REGMBC(0x1e94)
 		      return;
 	    case 'a': case '\340': case '\341': case '\342':
 	    case '\343': case '\344': case '\345':
+	    CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105) CASEMBC(0x1ce)
+	    CASEMBC(0x1df) CASEMBC(0x1e1) CASEMBC(0x1ea3)
 		      regmbc('a'); regmbc('\340'); regmbc('\341');
 		      regmbc('\342'); regmbc('\343'); regmbc('\344');
 		      regmbc('\345');
+		      REGMBC(0x101) REGMBC(0x103) REGMBC(0x105)
+		      REGMBC(0x1ce) REGMBC(0x1df) REGMBC(0x1e1)
+		      REGMBC(0x1ea3)
+		      return;
+	    case 'b': CASEMBC(0x1e03) CASEMBC(0x1e07)
+		      regmbc('b'); REGMBC(0x1e03) REGMBC(0x1e07)
 		      return;
 	    case 'c': case '\347':
+	    CASEMBC(0x107) CASEMBC(0x109) CASEMBC(0x10b) CASEMBC(0x10d)
 		      regmbc('c'); regmbc('\347');
+		      REGMBC(0x107) REGMBC(0x109) REGMBC(0x10b)
+		      REGMBC(0x10d)
+		      return;
+	    case 'd': CASEMBC(0x10f) CASEMBC(0x111) CASEMBC(0x1d0b)
+	    CASEMBC(0x1e11)
+		      regmbc('d'); REGMBC(0x10f) REGMBC(0x111)
+		      REGMBC(0x1e0b) REGMBC(0x01e0f) REGMBC(0x1e11)
 		      return;
 	    case 'e': case '\350': case '\351': case '\352': case '\353':
+	    CASEMBC(0x113) CASEMBC(0x115) CASEMBC(0x117) CASEMBC(0x119)
+	    CASEMBC(0x11b) CASEMBC(0x1ebb) CASEMBC(0x1ebd)
 		      regmbc('e'); regmbc('\350'); regmbc('\351');
 		      regmbc('\352'); regmbc('\353');
+		      REGMBC(0x113) REGMBC(0x115) REGMBC(0x117)
+		      REGMBC(0x119) REGMBC(0x11b) REGMBC(0x1ebb)
+		      REGMBC(0x1ebd)
+		      return;
+	    case 'f': CASEMBC(0x1e1f)
+		      regmbc('f'); REGMBC(0x1e1f)
+		      return;
+	    case 'g': CASEMBC(0x11d) CASEMBC(0x11f) CASEMBC(0x121)
+	    CASEMBC(0x123) CASEMBC(0x1e5) CASEMBC(0x1e7) CASEMBC(0x1f5)
+	    CASEMBC(0x1e21)
+		      regmbc('g'); REGMBC(0x11d) REGMBC(0x11f)
+		      REGMBC(0x121) REGMBC(0x123) REGMBC(0x1e5)
+		      REGMBC(0x1e7) REGMBC(0x1f5) REGMBC(0x1e21)
+		      return;
+	    case 'h': CASEMBC(0x125) CASEMBC(0x127) CASEMBC(0x1e23)
+	    CASEMBC(0x1e27) CASEMBC(0x1e29) CASEMBC(0x1e96)
+		      regmbc('h'); REGMBC(0x125) REGMBC(0x127)
+		      REGMBC(0x1e23) REGMBC(0x1e27) REGMBC(0x1e29)
+		      REGMBC(0x1e96)
 		      return;
 	    case 'i': case '\354': case '\355': case '\356': case '\357':
+	    CASEMBC(0x129) CASEMBC(0x12b) CASEMBC(0x12d) CASEMBC(0x12f)
+	    CASEMBC(0x1d0) CASEMBC(0x1ec9)
 		      regmbc('i'); regmbc('\354'); regmbc('\355');
 		      regmbc('\356'); regmbc('\357');
+		      REGMBC(0x129) REGMBC(0x12b) REGMBC(0x12d)
+		      REGMBC(0x12f) REGMBC(0x1d0) REGMBC(0x1ec9)
+		      return;
+	    case 'j': CASEMBC(0x135) CASEMBC(0x1f0)
+		      regmbc('j'); REGMBC(0x135) REGMBC(0x1f0)
+		      return;
+	    case 'k': CASEMBC(0x137) CASEMBC(0x1e9) CASEMBC(0x1e31)
+	    CASEMBC(0x1e35)
+		      regmbc('k'); REGMBC(0x137) REGMBC(0x1e9)
+		      REGMBC(0x1e31) REGMBC(0x1e35)
+		      return;
+	    case 'l': CASEMBC(0x13a) CASEMBC(0x13c) CASEMBC(0x13e)
+	    CASEMBC(0x140) CASEMBC(0x142) CASEMBC(0x1e3b)
+		      regmbc('l'); REGMBC(0x13a) REGMBC(0x13c)
+		      REGMBC(0x13e) REGMBC(0x140) REGMBC(0x142)
+		      REGMBC(0x1e3b)
+		      return;
+	    case 'm': CASEMBC(0x1e3f) CASEMBC(0x1e41)
+		      regmbc('m'); REGMBC(0x1e3f) REGMBC(0x1e41)
 		      return;
 	    case 'n': case '\361':
+	    CASEMBC(0x144) CASEMBC(0x146) CASEMBC(0x148) CASEMBC(0x149)
+	    CASEMBC(0x1e45) CASEMBC(0x1e49)
 		      regmbc('n'); regmbc('\361');
+		      REGMBC(0x144) REGMBC(0x146) REGMBC(0x148)
+		      REGMBC(0x149) REGMBC(0x1e45) REGMBC(0x1e49)
 		      return;
 	    case 'o': case '\362': case '\363': case '\364': case '\365':
-	    case '\366':
+	    case '\366': case '\370':
+	    CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151) CASEMBC(0x1a1)
+	    CASEMBC(0x1d2) CASEMBC(0x1eb) CASEMBC(0x1ed) CASEMBC(0x1ecf)
 		      regmbc('o'); regmbc('\362'); regmbc('\363');
 		      regmbc('\364'); regmbc('\365'); regmbc('\366');
+		      regmbc('\370');
+		      REGMBC(0x14d) REGMBC(0x14f) REGMBC(0x151)
+		      REGMBC(0x1a1) REGMBC(0x1d2) REGMBC(0x1eb)
+		      REGMBC(0x1ed) REGMBC(0x1ecf)
+		      return;
+	    case 'p': CASEMBC(0x1e55) CASEMBC(0x1e57)
+		      regmbc('p'); REGMBC(0x1e55) REGMBC(0x1e57)
+		      return;
+	    case 'r': CASEMBC(0x155) CASEMBC(0x157) CASEMBC(0x159)
+	    CASEMBC(0x1e59) CASEMBC(0x1e5f)
+		      regmbc('r'); REGMBC(0x155) REGMBC(0x157) REGMBC(0x159)
+		      REGMBC(0x1e59) REGMBC(0x1e5f)
+		      return;
+	    case 's': CASEMBC(0x15b) CASEMBC(0x15d) CASEMBC(0x15f)
+	    CASEMBC(0x161) CASEMBC(0x1e61)
+		      regmbc('s'); REGMBC(0x15b) REGMBC(0x15d)
+		      REGMBC(0x15f) REGMBC(0x161) REGMBC(0x1e61)
+		      return;
+	    case 't': CASEMBC(0x163) CASEMBC(0x165) CASEMBC(0x167)
+	    CASEMBC(0x1e6b) CASEMBC(0x1e6f) CASEMBC(0x1e97)
+		      regmbc('t'); REGMBC(0x163) REGMBC(0x165) REGMBC(0x167)
+		      REGMBC(0x1e6b) REGMBC(0x1e6f) REGMBC(0x1e97)
 		      return;
 	    case 'u': case '\371': case '\372': case '\373': case '\374':
+	    CASEMBC(0x169) CASEMBC(0x16b) CASEMBC(0x16d) CASEMBC(0x16f)
+	    CASEMBC(0x171) CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
+	    CASEMBC(0x1ee7)
 		      regmbc('u'); regmbc('\371'); regmbc('\372');
 		      regmbc('\373'); regmbc('\374');
+		      REGMBC(0x169) REGMBC(0x16b) REGMBC(0x16d)
+		      REGMBC(0x16f) REGMBC(0x171) REGMBC(0x173)
+		      REGMBC(0x1b0) REGMBC(0x1d4) REGMBC(0x1ee7)
+		      return;
+	    case 'v': CASEMBC(0x1e7d)
+		      regmbc('v'); REGMBC(0x1e7d)
+		      return;
+	    case 'w': CASEMBC(0x175) CASEMBC(0x1e81) CASEMBC(0x1e83)
+	    CASEMBC(0x1e85) CASEMBC(0x1e87) CASEMBC(0x1e98)
+		      regmbc('w'); REGMBC(0x175) REGMBC(0x1e81)
+		      REGMBC(0x1e83) REGMBC(0x1e85) REGMBC(0x1e87)
+		      REGMBC(0x1e98)
+		      return;
+	    case 'x': CASEMBC(0x1e8b) CASEMBC(0x1e8d)
+		      regmbc('x'); REGMBC(0x1e8b) REGMBC(0x1e8d)
 		      return;
 	    case 'y': case '\375': case '\377':
+	    CASEMBC(0x177) CASEMBC(0x1e8f) CASEMBC(0x1e99)
+	    CASEMBC(0x1ef3) CASEMBC(0x1ef7) CASEMBC(0x1ef9)
 		      regmbc('y'); regmbc('\375'); regmbc('\377');
+		      REGMBC(0x177) REGMBC(0x1e8f) REGMBC(0x1e99)
+		      REGMBC(0x1ef3) REGMBC(0x1ef7) REGMBC(0x1ef9)
+		      return;
+	    case 'z': CASEMBC(0x17a) CASEMBC(0x17c) CASEMBC(0x17e)
+	    CASEMBC(0x1b6) CASEMBC(0x1e91) CASEMBC(0x1e95)
+		      regmbc('z'); REGMBC(0x17a) REGMBC(0x17c)
+		      REGMBC(0x17e) REGMBC(0x1b6) REGMBC(0x1e91)
+		      REGMBC(0x1e95)
 		      return;
 	}
 #endif
@@ -891,6 +1174,16 @@
     return 0;
 }
 
+static void get_cpo_flags __ARGS((void));
+static int reg_cpo_lit; /* 'cpoptions' contains 'l' flag */
+static int reg_cpo_bsl; /* 'cpoptions' contains '\' flag */
+
+    static void
+get_cpo_flags()
+{
+    reg_cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
+    reg_cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
+}
 
 /*
  * Skip over a "[]" range.
@@ -901,15 +1194,10 @@
 skip_anyof(p)
     char_u	*p;
 {
-    int		cpo_lit;	/* 'cpoptions' contains 'l' flag */
-    int		cpo_bsl;	/* 'cpoptions' contains '\' flag */
 #ifdef FEAT_MBYTE
     int		l;
 #endif
 
-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
-
     if (*p == '^')	/* Complement of range. */
 	++p;
     if (*p == ']' || *p == '-')
@@ -928,9 +1216,9 @@
 		    mb_ptr_adv(p);
 	    }
 	else if (*p == '\\'
-		&& !cpo_bsl
+		&& !reg_cpo_bsl
 		&& (vim_strchr(REGEXP_INRANGE, p[1]) != NULL
-		    || (!cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
+		    || (!reg_cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
 	    p += 2;
 	else if (*p == '[')
 	{
@@ -969,6 +1257,7 @@
 	mymagic = MAGIC_ON;
     else
 	mymagic = MAGIC_OFF;
+    get_cpo_flags();
 
     for (; p[0] != NUL; mb_ptr_adv(p))
     {
@@ -1008,8 +1297,12 @@
     return p;
 }
 
+static regprog_T  *bt_regcomp __ARGS((char_u *expr, int re_flags));
+static void bt_regfree __ARGS((regprog_T *prog));
+
 /*
- * vim_regcomp() - compile a regular expression into internal code
+ * bt_regcomp() - compile a regular expression into internal code for the
+ * traditional back track matcher.
  * Returns the program in allocated space.  Returns NULL for an error.
  *
  * We can't allocate space until we know how big the compiled form will be,
@@ -1028,12 +1321,12 @@
  * of the structure of the compiled regexp.
  * "re_flags": RE_MAGIC and/or RE_STRING.
  */
-    regprog_T *
-vim_regcomp(expr, re_flags)
+    static regprog_T *
+bt_regcomp(expr, re_flags)
     char_u	*expr;
     int		re_flags;
 {
-    regprog_T	*r;
+    bt_regprog_T    *r;
     char_u	*scan;
     char_u	*longest;
     int		len;
@@ -1060,7 +1353,7 @@
 #endif
 
     /* Allocate space. */
-    r = (regprog_T *)lalloc(sizeof(regprog_T) + regsize, TRUE);
+    r = (bt_regprog_T *)lalloc(sizeof(bt_regprog_T) + regsize, TRUE);
     if (r == NULL)
 	return NULL;
 
@@ -1155,10 +1448,21 @@
 	    r->regmlen = len;
 	}
     }
-#ifdef DEBUG
+#ifdef BT_REGEXP_DUMP
     regdump(expr, r);
 #endif
-    return r;
+    r->engine = &bt_regengine;
+    return (regprog_T *)r;
+}
+
+/*
+ * Free a compiled regexp program, returned by bt_regcomp().
+ */
+    static void
+bt_regfree(prog)
+    regprog_T   *prog;
+{
+    vim_free(prog);
 }
 
 /*
@@ -1176,6 +1480,7 @@
 	reg_magic = MAGIC_OFF;
     reg_string = (re_flags & RE_STRING);
     reg_strict = (re_flags & RE_STRICT);
+    get_cpo_flags();
 
     num_complex_braces = 0;
     regnpar = 1;
@@ -1205,7 +1510,7 @@
 #endif
 
 /*
- * reg - regular expression, i.e. main body or parenthesized thing
+ * Parse regular expression, i.e. main body or parenthesized thing.
  *
  * Caller must absorb opening parenthesis.
  *
@@ -1242,7 +1547,7 @@
     {
 	/* Make a MOPEN node. */
 	if (regnpar >= NSUBEXP)
-	    EMSG_M_RET_NULL(_("E51: Too many %s("), reg_magic == MAGIC_ALL);
+	    EMSG2_RET_NULL(_("E51: Too many %s("), reg_magic == MAGIC_ALL);
 	parno = regnpar;
 	++regnpar;
 	ret = regnode(MOPEN + parno);
@@ -1303,14 +1608,14 @@
 	else
 #endif
 	    if (paren == REG_NPAREN)
-	    EMSG_M_RET_NULL(_("E53: Unmatched %s%%("), reg_magic == MAGIC_ALL);
+	    EMSG2_RET_NULL(_(e_unmatchedpp), reg_magic == MAGIC_ALL);
 	else
-	    EMSG_M_RET_NULL(_("E54: Unmatched %s("), reg_magic == MAGIC_ALL);
+	    EMSG2_RET_NULL(_(e_unmatchedp), reg_magic == MAGIC_ALL);
     }
     else if (paren == REG_NOPAREN && peekchr() != NUL)
     {
 	if (curchr == Magic(')'))
-	    EMSG_M_RET_NULL(_("E55: Unmatched %s)"), reg_magic == MAGIC_ALL);
+	    EMSG2_RET_NULL(_(e_unmatchedpar), reg_magic == MAGIC_ALL);
 	else
 	    EMSG_RET_NULL(_(e_trailing));	/* "Can't happen". */
 	/* NOTREACHED */
@@ -1325,7 +1630,7 @@
 }
 
 /*
- * Handle one alternative of an | operator.
+ * Parse one alternative of an | operator.
  * Implements the & operator.
  */
     static char_u *
@@ -1368,7 +1673,7 @@
 }
 
 /*
- * Handle one alternative of an | or & operator.
+ * Parse one alternative of an | or & operator.
  * Implements the concatenation operator.
  */
     static char_u *
@@ -1448,7 +1753,7 @@
 }
 
 /*
- * regpiece - something followed by possible [*+=]
+ * Parse something followed by possible [*+=].
  *
  * Note that the branching code sequences used for = and the general cases
  * of * and + are somewhat optimized:  they use the same NOTHING node as
@@ -1515,7 +1820,9 @@
 	case Magic('@'):
 	    {
 		int	lop = END;
+		int	nr;
 
+		nr = getdecchrs();
 		switch (no_Magic(getchr()))
 		{
 		    case '=': lop = MATCH; break;		  /* \@= */
@@ -1528,7 +1835,7 @@
 			      }
 		}
 		if (lop == END)
-		    EMSG_M_RET_NULL(_("E59: invalid character after %s@"),
+		    EMSG2_RET_NULL(_("E59: invalid character after %s@"),
 						      reg_magic == MAGIC_ALL);
 		/* Look behind must match with behind_pos. */
 		if (lop == BEHIND || lop == NOBEHIND)
@@ -1537,7 +1844,14 @@
 		    *flagp |= HASLOOKBH;
 		}
 		regtail(ret, regnode(END)); /* operand ends */
-		reginsert(lop, ret);
+		if (lop == BEHIND || lop == NOBEHIND)
+		{
+		    if (nr < 0)
+			nr = 0; /* no limit is same as zero limit */
+		    reginsert_nr(lop, nr, ret);
+		}
+		else
+		    reginsert(lop, ret);
 		break;
 	    }
 
@@ -1562,7 +1876,7 @@
 	    else
 	    {
 		if (num_complex_braces >= 10)
-		    EMSG_M_RET_NULL(_("E60: Too many complex %s{...}s"),
+		    EMSG2_RET_NULL(_("E60: Too many complex %s{...}s"),
 						      reg_magic == MAGIC_ALL);
 		reginsert(BRACE_COMPLEX + num_complex_braces, ret);
 		regoptail(ret, regnode(BACK));
@@ -1589,8 +1903,20 @@
     return ret;
 }
 
+/* When making changes to classchars also change nfa_classcodes. */
+static char_u	*classchars = (char_u *)".iIkKfFpPsSdDxXoOwWhHaAlLuU";
+static int	classcodes[] = {
+    ANY, IDENT, SIDENT, KWORD, SKWORD,
+    FNAME, SFNAME, PRINT, SPRINT,
+    WHITE, NWHITE, DIGIT, NDIGIT,
+    HEX, NHEX, OCTAL, NOCTAL,
+    WORD, NWORD, HEAD, NHEAD,
+    ALPHA, NALPHA, LOWER, NLOWER,
+    UPPER, NUPPER
+};
+
 /*
- * regatom - the lowest level
+ * Parse the lowest level.
  *
  * Optimization:  gobbles an entire sequence of ordinary characters so that
  * it can turn them into a single node, which is smaller to store and
@@ -1602,24 +1928,11 @@
 {
     char_u	    *ret;
     int		    flags;
-    int		    cpo_lit;	    /* 'cpoptions' contains 'l' flag */
-    int		    cpo_bsl;	    /* 'cpoptions' contains '\' flag */
     int		    c;
-    static char_u   *classchars = (char_u *)".iIkKfFpPsSdDxXoOwWhHaAlLuU";
-    static int	    classcodes[] = {ANY, IDENT, SIDENT, KWORD, SKWORD,
-				    FNAME, SFNAME, PRINT, SPRINT,
-				    WHITE, NWHITE, DIGIT, NDIGIT,
-				    HEX, NHEX, OCTAL, NOCTAL,
-				    WORD, NWORD, HEAD, NHEAD,
-				    ALPHA, NALPHA, LOWER, NLOWER,
-				    UPPER, NUPPER
-				    };
     char_u	    *p;
     int		    extra = 0;
 
     *flagp = WORST;		/* Tentatively. */
-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
 
     c = getchr();
     switch (c)
@@ -1826,7 +2139,7 @@
 	    {
 #ifdef FEAT_SYN_HL
 		case '(': if (reg_do_extmatch != REX_SET)
-			      EMSG_RET_NULL(_("E66: \\z( not allowed here"));
+			      EMSG_RET_NULL(_(e_z_not_allowed));
 			  if (one_exactly)
 			      EMSG_ONE_RET_NULL;
 			  ret = reg(REG_ZPAREN, &flags);
@@ -1845,7 +2158,7 @@
 		case '7':
 		case '8':
 		case '9': if (reg_do_extmatch != REX_USE)
-			      EMSG_RET_NULL(_("E67: \\z1 et al. not allowed here"));
+			      EMSG_RET_NULL(_(e_z1_not_allowed));
 			  ret = regnode(ZREF + c - '0');
 			  re_has_z = REX_USE;
 			  break;
@@ -1909,7 +2222,7 @@
 			      while ((c = getchr()) != ']')
 			      {
 				  if (c == NUL)
-				      EMSG_M_RET_NULL(_("E69: Missing ] after %s%%["),
+				      EMSG2_RET_NULL(_(e_missing_sb),
 						      reg_magic == MAGIC_ALL);
 				  br = regnode(BRANCH);
 				  if (ret == NULL)
@@ -1925,7 +2238,7 @@
 				      return NULL;
 			      }
 			      if (ret == NULL)
-				  EMSG_M_RET_NULL(_("E70: Empty %s%%[]"),
+				  EMSG2_RET_NULL(_(e_empty_sb),
 						      reg_magic == MAGIC_ALL);
 			      lastbranch = regnode(BRANCH);
 			      br = regnode(NOTHING);
@@ -1969,7 +2282,7 @@
 			      }
 
 			      if (i < 0)
-				  EMSG_M_RET_NULL(
+				  EMSG2_RET_NULL(
 					_("E678: Invalid character after %s%%[dxouU]"),
 					reg_magic == MAGIC_ALL);
 #ifdef FEAT_MBYTE
@@ -2041,7 +2354,7 @@
 			      }
 			  }
 
-			  EMSG_M_RET_NULL(_("E71: Invalid character after %s%%"),
+			  EMSG2_RET_NULL(_("E71: Invalid character after %s%%"),
 						      reg_magic == MAGIC_ALL);
 	    }
 	}
@@ -2112,7 +2425,7 @@
 			    }
 
 			    /* Handle \o40, \x20 and \u20AC style sequences */
-			    if (endc == '\\' && !cpo_lit && !cpo_bsl)
+			    if (endc == '\\' && !reg_cpo_lit && !reg_cpo_bsl)
 				endc = coll_get_char();
 
 			    if (startc > endc)
@@ -2154,9 +2467,9 @@
 		     * Posix doesn't recognize backslash at all.
 		     */
 		    else if (*regparse == '\\'
-			    && !cpo_bsl
+			    && !reg_cpo_bsl
 			    && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
-				|| (!cpo_lit
+				|| (!reg_cpo_lit
 				    && vim_strchr(REGEXP_ABBR,
 						       regparse[1]) != NULL)))
 		    {
@@ -2166,13 +2479,15 @@
 			    /* '\n' in range: also match NL */
 			    if (ret != JUST_CALC_SIZE)
 			    {
-				if (*ret == ANYBUT)
-				    *ret = ANYBUT + ADD_NL;
-				else if (*ret == ANYOF)
+				/* Using \n inside [^] does not change what
+				 * matches. "[^\n]" is the same as ".". */
+				if (*ret == ANYOF)
+				{
 				    *ret = ANYOF + ADD_NL;
+				    *flagp |= HASNL;
+				}
 				/* else: must have had a \n already */
 			    }
-			    *flagp |= HASNL;
 			    regparse++;
 			    startc = -1;
 			}
@@ -2334,8 +2649,7 @@
 		break;
 	    }
 	    else if (reg_strict)
-		EMSG_M_RET_NULL(_("E769: Missing ] after %s["),
-						       reg_magic > MAGIC_OFF);
+		EMSG2_RET_NULL(_(e_missingbracket), reg_magic > MAGIC_OFF);
 	}
 	/* FALLTHROUGH */
 
@@ -2426,7 +2740,7 @@
 #endif
 
 /*
- * emit a node
+ * Emit a node.
  * Return pointer to generated code.
  */
     static char_u *
@@ -2468,6 +2782,8 @@
 regmbc(c)
     int		c;
 {
+    if (!has_mbyte && c > 0xff)
+	return;
     if (regcode == JUST_CALC_SIZE)
 	regsize += (*mb_char2len)(c);
     else
@@ -2476,7 +2792,7 @@
 #endif
 
 /*
- * reginsert - insert an operator in front of already-emitted operand
+ * Insert an operator in front of already-emitted operand
  *
  * Means relocating the operand.
  */
@@ -2507,7 +2823,39 @@
 }
 
 /*
- * reginsert_limits - insert an operator in front of already-emitted operand.
+ * Insert an operator in front of already-emitted operand.
+ * Add a number to the operator.
+ */
+    static void
+reginsert_nr(op, val, opnd)
+    int		op;
+    long	val;
+    char_u	*opnd;
+{
+    char_u	*src;
+    char_u	*dst;
+    char_u	*place;
+
+    if (regcode == JUST_CALC_SIZE)
+    {
+	regsize += 7;
+	return;
+    }
+    src = regcode;
+    regcode += 7;
+    dst = regcode;
+    while (src > opnd)
+	*--dst = *--src;
+
+    place = opnd;		/* Op node, where operand used to be. */
+    *place++ = op;
+    *place++ = NUL;
+    *place++ = NUL;
+    place = re_put_long(place, (long_u)val);
+}
+
+/*
+ * Insert an operator in front of already-emitted operand.
  * The operator has the given limit values as operands.  Also set next pointer.
  *
  * Means relocating the operand.
@@ -2559,7 +2907,7 @@
 }
 
 /*
- * regtail - set the next-pointer at the end of a node chain
+ * Set the next-pointer at the end of a node chain.
  */
     static void
 regtail(p, val)
@@ -2588,7 +2936,7 @@
     else
 	offset = (int)(val - scan);
     /* When the offset uses more than 16 bits it can no longer fit in the two
-     * bytes avaliable.  Use a global flag to avoid having to check return
+     * bytes available.  Use a global flag to avoid having to check return
      * values in too many places. */
     if (offset > 0xffff)
 	reg_toolong = TRUE;
@@ -2600,7 +2948,7 @@
 }
 
 /*
- * regoptail - regtail on item after a BRANCH; nop if none
+ * Like regtail, on item after a BRANCH; nop if none.
  */
     static void
 regoptail(p, val)
@@ -2616,22 +2964,15 @@
 }
 
 /*
- * getchr() - get the next character from the pattern. We know about
- * magic and such, so therefore we need a lexical analyzer.
+ * Functions for getting characters from the regexp input.
  */
 
-/* static int	    curchr; */
-static int	prevprevchr;
-static int	prevchr;
-static int	nextchr;    /* used for ungetchr() */
-/*
- * Note: prevchr is sometimes -1 when we are not at the start,
- * eg in /[ ^I]^ the pattern was never found even if it existed, because ^ was
- * taken to be magic -- webb
- */
 static int	at_start;	/* True when on the first character */
 static int	prev_at_start;  /* True when on the second character */
 
+/*
+ * Start parsing at "str".
+ */
     static void
 initchr(str)
     char_u *str;
@@ -2643,6 +2984,47 @@
     prev_at_start = FALSE;
 }
 
+/*
+ * Save the current parse state, so that it can be restored and parsing
+ * starts in the same state again.
+ */
+    static void
+save_parse_state(ps)
+    parse_state_T *ps;
+{
+    ps->regparse = regparse;
+    ps->prevchr_len = prevchr_len;
+    ps->curchr = curchr;
+    ps->prevchr = prevchr;
+    ps->prevprevchr = prevprevchr;
+    ps->nextchr = nextchr;
+    ps->at_start = at_start;
+    ps->prev_at_start = prev_at_start;
+    ps->regnpar = regnpar;
+}
+
+/*
+ * Restore a previously saved parse state.
+ */
+    static void
+restore_parse_state(ps)
+    parse_state_T *ps;
+{
+    regparse = ps->regparse;
+    prevchr_len = ps->prevchr_len;
+    curchr = ps->curchr;
+    prevchr = ps->prevchr;
+    prevprevchr = ps->prevprevchr;
+    nextchr = ps->nextchr;
+    at_start = ps->at_start;
+    prev_at_start = ps->prev_at_start;
+    regnpar = ps->regnpar;
+}
+
+
+/*
+ * Get the next character without advancing.
+ */
     static int
 peekchr()
 {
@@ -2851,6 +3233,10 @@
     prevprevchr = prpr;
 }
 
+/*
+ * Get the next character from the pattern. We know about magic and such, so
+ * therefore we need a lexical analyzer.
+ */
     static int
 getchr()
 {
@@ -2910,7 +3296,7 @@
 }
 
 /*
- * get and return the value of the decimal string immediately after the
+ * Get and return the value of the decimal string immediately after the
  * current position. Return -1 for invalid.  Consumes all digits.
  */
     static int
@@ -2928,6 +3314,7 @@
 	nr *= 10;
 	nr += c - '0';
 	++regparse;
+	curchr = -1; /* no longer valid */
     }
 
     if (i == 0)
@@ -3105,8 +3492,8 @@
 } regbehind_T;
 
 static char_u	*reg_getline __ARGS((linenr_T lnum));
-static long	vim_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
-static long	regtry __ARGS((regprog_T *prog, colnr_T col));
+static long	bt_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
+static long	regtry __ARGS((bt_regprog_T *prog, colnr_T col));
 static void	cleanup_subexpr __ARGS((void));
 #ifdef FEAT_SYN_HL
 static void	cleanup_zsubexpr __ARGS((void));
@@ -3132,6 +3519,7 @@
 	*(pp) = (savep)->se_u.ptr; }
 
 static int	re_num_cmp __ARGS((long_u val, char_u *scan));
+static int	match_with_backref __ARGS((linenr_T start_lnum, colnr_T start_col, linenr_T end_lnum, colnr_T end_col, int *bytelen));
 static int	regmatch __ARGS((char_u *prog));
 static int	regrepeat __ARGS((char_u *p, long maxcount));
 
@@ -3163,7 +3551,7 @@
 /*
  * Sometimes need to save a copy of a line.  Since alloc()/free() is very
  * slow, we keep one allocated piece of memory and only re-allocate it when
- * it's too small.  It's freed in vim_regexec_both() when finished.
+ * it's too small.  It's freed in bt_regexec_both() when finished.
  */
 static char_u	*reg_tofree = NULL;
 static unsigned	reg_tofreelen;
@@ -3180,7 +3568,7 @@
  * reg_startpos		<invalid>		reg_mmatch->startpos
  * reg_endpos		<invalid>		reg_mmatch->endpos
  * reg_win		NULL			window in which to search
- * reg_buf		<invalid>		buffer in which to search
+ * reg_buf		curbuf			buffer in which to search
  * reg_firstlnum	<invalid>		first line in which to search
  * reg_maxline		0			last line nr
  * reg_line_lbr		FALSE or TRUE		FALSE
@@ -3321,6 +3709,8 @@
 /* TRUE if using multi-line regexp. */
 #define REG_MULTI	(reg_match == NULL)
 
+static int  bt_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+
 /*
  * Match a regexp against a string.
  * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
@@ -3328,8 +3718,8 @@
  *
  * Return TRUE if there is a match, FALSE if not.
  */
-    int
-vim_regexec(rmp, line, col)
+    static int
+bt_regexec(rmp, line, col)
     regmatch_T	*rmp;
     char_u	*line;	/* string to match against */
     colnr_T	col;	/* column to start looking for match */
@@ -3338,22 +3728,26 @@
     reg_mmatch = NULL;
     reg_maxline = 0;
     reg_line_lbr = FALSE;
+    reg_buf = curbuf;
     reg_win = NULL;
     ireg_ic = rmp->rm_ic;
 #ifdef FEAT_MBYTE
     ireg_icombine = FALSE;
 #endif
     ireg_maxcol = 0;
-    return (vim_regexec_both(line, col, NULL) != 0);
+    return (bt_regexec_both(line, col, NULL) != 0);
 }
 
 #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
 	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+
+static int  bt_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+
 /*
  * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
  */
-    int
-vim_regexec_nl(rmp, line, col)
+    static int
+bt_regexec_nl(rmp, line, col)
     regmatch_T	*rmp;
     char_u	*line;	/* string to match against */
     colnr_T	col;	/* column to start looking for match */
@@ -3362,16 +3756,19 @@
     reg_mmatch = NULL;
     reg_maxline = 0;
     reg_line_lbr = TRUE;
+    reg_buf = curbuf;
     reg_win = NULL;
     ireg_ic = rmp->rm_ic;
 #ifdef FEAT_MBYTE
     ireg_icombine = FALSE;
 #endif
     ireg_maxcol = 0;
-    return (vim_regexec_both(line, col, NULL) != 0);
+    return (bt_regexec_both(line, col, NULL) != 0);
 }
 #endif
 
+static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+
 /*
  * Match a regexp against multiple lines.
  * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
@@ -3380,8 +3777,8 @@
  * Return zero if there is no match.  Return number of lines contained in the
  * match otherwise.
  */
-    long
-vim_regexec_multi(rmp, win, buf, lnum, col, tm)
+    static long
+bt_regexec_multi(rmp, win, buf, lnum, col, tm)
     regmmatch_T	*rmp;
     win_T	*win;		/* window in which to search or NULL */
     buf_T	*buf;		/* buffer in which to search */
@@ -3390,7 +3787,6 @@
     proftime_T	*tm;		/* timeout limit or NULL */
 {
     long	r;
-    buf_T	*save_curbuf = curbuf;
 
     reg_match = NULL;
     reg_mmatch = rmp;
@@ -3405,10 +3801,7 @@
 #endif
     ireg_maxcol = rmp->rmm_maxcol;
 
-    /* Need to switch to buffer "buf" to make vim_iswordc() work. */
-    curbuf = buf;
-    r = vim_regexec_both(NULL, col, tm);
-    curbuf = save_curbuf;
+    r = bt_regexec_both(NULL, col, tm);
 
     return r;
 }
@@ -3418,12 +3811,12 @@
  * lines ("line" is NULL, use reg_getline()).
  */
     static long
-vim_regexec_both(line, col, tm)
+bt_regexec_both(line, col, tm)
     char_u	*line;
     colnr_T	col;		/* column to start looking for match */
     proftime_T	*tm UNUSED;	/* timeout limit or NULL */
 {
-    regprog_T	*prog;
+    bt_regprog_T	*prog;
     char_u	*s;
     long	retval = 0L;
 
@@ -3449,14 +3842,14 @@
 
     if (REG_MULTI)
     {
-	prog = reg_mmatch->regprog;
+	prog = (bt_regprog_T *)reg_mmatch->regprog;
 	line = reg_getline((linenr_T)0);
 	reg_startpos = reg_mmatch->startpos;
 	reg_endpos = reg_mmatch->endpos;
     }
     else
     {
-	prog = reg_match->regprog;
+	prog = (bt_regprog_T *)reg_match->regprog;
 	reg_startp = reg_match->startp;
 	reg_endp = reg_match->endp;
     }
@@ -3538,6 +3931,7 @@
 
     regline = line;
     reglnum = 0;
+    reg_toolong = FALSE;
 
     /* Simplest case: Anchored match need be tried only once. */
     if (prog->reganch)
@@ -3697,7 +4091,7 @@
  */
     static long
 regtry(prog, col)
-    regprog_T	*prog;
+    bt_regprog_T    *prog;
     colnr_T	col;
 {
     reginput = regline + col;
@@ -3781,12 +4175,91 @@
 reg_prev_class()
 {
     if (reginput > regline)
-	return mb_get_class(reginput - 1
-				     - (*mb_head_off)(regline, reginput - 1));
+	return mb_get_class_buf(reginput - 1
+			    - (*mb_head_off)(regline, reginput - 1), reg_buf);
     return -1;
 }
 
 #endif
+#ifdef FEAT_VISUAL
+static int reg_match_visual __ARGS((void));
+
+/*
+ * Return TRUE if the current reginput position matches the Visual area.
+ */
+    static int
+reg_match_visual()
+{
+    pos_T	top, bot;
+    linenr_T    lnum;
+    colnr_T	col;
+    win_T	*wp = reg_win == NULL ? curwin : reg_win;
+    int		mode;
+    colnr_T	start, end;
+    colnr_T	start2, end2;
+    colnr_T	cols;
+
+    /* Check if the buffer is the current buffer. */
+    if (reg_buf != curbuf || VIsual.lnum == 0)
+	return FALSE;
+
+    if (VIsual_active)
+    {
+	if (lt(VIsual, wp->w_cursor))
+	{
+	    top = VIsual;
+	    bot = wp->w_cursor;
+	}
+	else
+	{
+	    top = wp->w_cursor;
+	    bot = VIsual;
+	}
+	mode = VIsual_mode;
+    }
+    else
+    {
+	if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end))
+	{
+	    top = curbuf->b_visual.vi_start;
+	    bot = curbuf->b_visual.vi_end;
+	}
+	else
+	{
+	    top = curbuf->b_visual.vi_end;
+	    bot = curbuf->b_visual.vi_start;
+	}
+	mode = curbuf->b_visual.vi_mode;
+    }
+    lnum = reglnum + reg_firstlnum;
+    if (lnum < top.lnum || lnum > bot.lnum)
+	return FALSE;
+
+    if (mode == 'v')
+    {
+	col = (colnr_T)(reginput - regline);
+	if ((lnum == top.lnum && col < top.col)
+		|| (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e')))
+	    return FALSE;
+    }
+    else if (mode == Ctrl_V)
+    {
+	getvvcol(wp, &top, &start, NULL, &end);
+	getvvcol(wp, &bot, &start2, NULL, &end2);
+	if (start2 < start)
+	    start = start2;
+	if (end2 > end)
+	    end = end2;
+	if (top.col == MAXCOL || bot.col == MAXCOL)
+	    end = MAXCOL;
+	cols = win_linetabsize(wp, regline, (colnr_T)(reginput - regline));
+	if (cols < start || cols > end - (*p_sel == 'e'))
+	    return FALSE;
+    }
+    return TRUE;
+}
+#endif
+
 #define ADVANCE_REGINPUT() mb_ptr_adv(reginput)
 
 /*
@@ -3829,7 +4302,7 @@
 #define RA_NOMATCH	5	/* didn't match */
 
   /* Make "regstack" and "backpos" empty.  They are allocated and freed in
-   * vim_regexec_both() to reduce malloc()/free() calls. */
+   * bt_regexec_both() to reduce malloc()/free() calls. */
   regstack.ga_len = 0;
   backpos.ga_len = 0;
 
@@ -3838,14 +4311,14 @@
    */
   for (;;)
   {
-    /* Some patterns my cause a long time to match, even though they are not
+    /* Some patterns may cause a long time to match, even though they are not
      * illegal.  E.g., "\([a-z]\+\)\+Q".  Allow breaking them with CTRL-C. */
     fast_breakcheck();
 
 #ifdef DEBUG
     if (scan != NULL && regnarrate)
     {
-	mch_errmsg(regprop(scan));
+	mch_errmsg((char *)regprop(scan));
 	mch_errmsg("(\n");
     }
 #endif
@@ -3866,7 +4339,7 @@
 #ifdef DEBUG
 	if (regnarrate)
 	{
-	    mch_errmsg(regprop(scan));
+	    mch_errmsg((char *)regprop(scan));
 	    mch_errmsg("...\n");
 # ifdef FEAT_SYN_HL
 	    if (re_extmatch_in != NULL)
@@ -3878,7 +4351,7 @@
 		{
 		    mch_errmsg("    \"");
 		    if (re_extmatch_in->matches[i] != NULL)
-			mch_errmsg(re_extmatch_in->matches[i]);
+			mch_errmsg((char *)re_extmatch_in->matches[i]);
 		    mch_errmsg("\"\n");
 		}
 	    }
@@ -3944,16 +4417,15 @@
 	    break;
 
 	  case RE_MARK:
-	    /* Compare the mark position to the match position.  NOTE: Always
-	     * uses the current buffer. */
+	    /* Compare the mark position to the match position. */
 	    {
 		int	mark = OPERAND(scan)[0];
 		int	cmp = OPERAND(scan)[1];
 		pos_T	*pos;
 
-		pos = getmark(mark, FALSE);
+		pos = getmark_buf(reg_buf, mark, FALSE);
 		if (pos == NULL		     /* mark doesn't exist */
-			|| pos->lnum <= 0    /* mark isn't set (in curbuf) */
+			|| pos->lnum <= 0    /* mark isn't set in reg_buf */
 			|| (pos->lnum == reglnum + reg_firstlnum
 				? (pos->col == (colnr_T)(reginput - regline)
 				    ? (cmp == '<' || cmp == '>')
@@ -3969,80 +4441,9 @@
 
 	  case RE_VISUAL:
 #ifdef FEAT_VISUAL
-	    /* Check if the buffer is the current buffer. and whether the
-	     * position is inside the Visual area. */
-	    if (reg_buf != curbuf || VIsual.lnum == 0)
-		status = RA_NOMATCH;
-	    else
-	    {
-		pos_T	    top, bot;
-		linenr_T    lnum;
-		colnr_T	    col;
-		win_T	    *wp = reg_win == NULL ? curwin : reg_win;
-		int	    mode;
-
-		if (VIsual_active)
-		{
-		    if (lt(VIsual, wp->w_cursor))
-		    {
-			top = VIsual;
-			bot = wp->w_cursor;
-		    }
-		    else
-		    {
-			top = wp->w_cursor;
-			bot = VIsual;
-		    }
-		    mode = VIsual_mode;
-		}
-		else
-		{
-		    if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end))
-		    {
-			top = curbuf->b_visual.vi_start;
-			bot = curbuf->b_visual.vi_end;
-		    }
-		    else
-		    {
-			top = curbuf->b_visual.vi_end;
-			bot = curbuf->b_visual.vi_start;
-		    }
-		    mode = curbuf->b_visual.vi_mode;
-		}
-		lnum = reglnum + reg_firstlnum;
-		col = (colnr_T)(reginput - regline);
-		if (lnum < top.lnum || lnum > bot.lnum)
-		    status = RA_NOMATCH;
-		else if (mode == 'v')
-		{
-		    if ((lnum == top.lnum && col < top.col)
-			    || (lnum == bot.lnum
-					 && col >= bot.col + (*p_sel != 'e')))
-			status = RA_NOMATCH;
-		}
-		else if (mode == Ctrl_V)
-		{
-		    colnr_T	    start, end;
-		    colnr_T	    start2, end2;
-		    colnr_T	    cols;
-
-		    getvvcol(wp, &top, &start, NULL, &end);
-		    getvvcol(wp, &bot, &start2, NULL, &end2);
-		    if (start2 < start)
-			start = start2;
-		    if (end2 > end)
-			end = end2;
-		    if (top.col == MAXCOL || bot.col == MAXCOL)
-			end = MAXCOL;
-		    cols = win_linetabsize(wp,
-				      regline, (colnr_T)(reginput - regline));
-		    if (cols < start || cols > end - (*p_sel == 'e'))
-			status = RA_NOMATCH;
-		}
-	    }
-#else
-	    status = RA_NOMATCH;
+	    if (!reg_match_visual())
 #endif
+		status = RA_NOMATCH;
 	    break;
 
 	  case RE_LNUM:
@@ -4072,7 +4473,7 @@
 		int this_class;
 
 		/* Get class of current and previous char (if it exists). */
-		this_class = mb_get_class(reginput);
+		this_class = mb_get_class_buf(reginput, reg_buf);
 		if (this_class <= 1)
 		    status = RA_NOMATCH;  /* not on a word at all */
 		else if (reg_prev_class() == this_class)
@@ -4081,8 +4482,8 @@
 #endif
 	    else
 	    {
-		if (!vim_iswordc(c)
-			|| (reginput > regline && vim_iswordc(reginput[-1])))
+		if (!vim_iswordc_buf(c, reg_buf) || (reginput > regline
+				   && vim_iswordc_buf(reginput[-1], reg_buf)))
 		    status = RA_NOMATCH;
 	    }
 	    break;
@@ -4096,7 +4497,7 @@
 		int this_class, prev_class;
 
 		/* Get class of current and previous char (if it exists). */
-		this_class = mb_get_class(reginput);
+		this_class = mb_get_class_buf(reginput, reg_buf);
 		prev_class = reg_prev_class();
 		if (this_class == prev_class
 			|| prev_class == 0 || prev_class == 1)
@@ -4105,13 +4506,14 @@
 #endif
 	    else
 	    {
-		if (!vim_iswordc(reginput[-1])
-			|| (reginput[0] != NUL && vim_iswordc(c)))
+		if (!vim_iswordc_buf(reginput[-1], reg_buf)
+			|| (reginput[0] != NUL && vim_iswordc_buf(c, reg_buf)))
 		    status = RA_NOMATCH;
 	    }
 	    break; /* Matched with EOW */
 
 	  case ANY:
+	    /* ANY does not match new lines. */
 	    if (c == NUL)
 		status = RA_NOMATCH;
 	    else
@@ -4133,14 +4535,14 @@
 	    break;
 
 	  case KWORD:
-	    if (!vim_iswordp(reginput))
+	    if (!vim_iswordp_buf(reginput, reg_buf))
 		status = RA_NOMATCH;
 	    else
 		ADVANCE_REGINPUT();
 	    break;
 
 	  case SKWORD:
-	    if (VIM_ISDIGIT(*reginput) || !vim_iswordp(reginput))
+	    if (VIM_ISDIGIT(*reginput) || !vim_iswordp_buf(reginput, reg_buf))
 		status = RA_NOMATCH;
 	    else
 		ADVANCE_REGINPUT();
@@ -4578,9 +4980,6 @@
 	  case BACKREF + 9:
 	    {
 		int		len;
-		linenr_T	clnum;
-		colnr_T		ccol;
-		char_u		*p;
 
 		no = op - BACKREF;
 		cleanup_subexpr();
@@ -4622,67 +5021,15 @@
 			{
 			    /* Messy situation: Need to compare between two
 			     * lines. */
-			    ccol = reg_startpos[no].col;
-			    clnum = reg_startpos[no].lnum;
-			    for (;;)
-			    {
-				/* Since getting one line may invalidate
-				 * the other, need to make copy.  Slow! */
-				if (regline != reg_tofree)
-				{
-				    len = (int)STRLEN(regline);
-				    if (reg_tofree == NULL
-						 || len >= (int)reg_tofreelen)
-				    {
-					len += 50;	/* get some extra */
-					vim_free(reg_tofree);
-					reg_tofree = alloc(len);
-					if (reg_tofree == NULL)
-					{
-					    status = RA_FAIL; /* outof memory!*/
-					    break;
-					}
-					reg_tofreelen = len;
-				    }
-				    STRCPY(reg_tofree, regline);
-				    reginput = reg_tofree
-						       + (reginput - regline);
-				    regline = reg_tofree;
-				}
-
-				/* Get the line to compare with. */
-				p = reg_getline(clnum);
-				if (clnum == reg_endpos[no].lnum)
-				    len = reg_endpos[no].col - ccol;
-				else
-				    len = (int)STRLEN(p + ccol);
-
-				if (cstrncmp(p + ccol, reginput, &len) != 0)
-				{
-				    status = RA_NOMATCH;  /* doesn't match */
-				    break;
-				}
-				if (clnum == reg_endpos[no].lnum)
-				    break;		/* match and at end! */
-				if (reglnum >= reg_maxline)
-				{
-				    status = RA_NOMATCH;  /* text too short */
-				    break;
-				}
-
-				/* Advance to next line. */
-				reg_nextline();
-				++clnum;
-				ccol = 0;
-				if (got_int)
-				{
-				    status = RA_FAIL;
-				    break;
-				}
-			    }
+			    int r = match_with_backref(
+					    reg_startpos[no].lnum,
+					    reg_startpos[no].col,
+					    reg_endpos[no].lnum,
+					    reg_endpos[no].col,
+					    &len);
 
-			    /* found a match!  Note that regline may now point
-			     * to a copy of the line, that should not matter. */
+			    if (r != RA_MATCH)
+				status = r;
 			}
 		    }
 		}
@@ -5153,7 +5500,7 @@
 		/* save the position after the found match for next */
 		reg_save(&(((regbehind_T *)rp) - 1)->save_after, &backpos);
 
-		/* start looking for a match with operand at the current
+		/* Start looking for a match with operand at the current
 		 * position.  Go back one character until we find the
 		 * result, hitting the start of the line or the previous
 		 * line (for multi-line matching).
@@ -5165,7 +5512,7 @@
 		rp->rs_state = RS_BEHIND2;
 
 		reg_restore(&rp->rs_un.regsave, &backpos);
-		scan = OPERAND(rp->rs_scan);
+		scan = OPERAND(rp->rs_scan) + 4;
 	    }
 	    break;
 
@@ -5193,12 +5540,22 @@
 	    }
 	    else
 	    {
+		long limit;
+
 		/* No match or a match that doesn't end where we want it: Go
 		 * back one character.  May go to previous line once. */
 		no = OK;
+		limit = OPERAND_MIN(rp->rs_scan);
 		if (REG_MULTI)
 		{
-		    if (rp->rs_un.regsave.rs_u.pos.col == 0)
+		    if (limit > 0
+			    && ((rp->rs_un.regsave.rs_u.pos.lnum
+						    < behind_pos.rs_u.pos.lnum
+				    ? (colnr_T)STRLEN(regline)
+				    : behind_pos.rs_u.pos.col)
+				- rp->rs_un.regsave.rs_u.pos.col >= limit))
+			no = FAIL;
+		    else if (rp->rs_un.regsave.rs_u.pos.col == 0)
 		    {
 			if (rp->rs_un.regsave.rs_u.pos.lnum
 					< behind_pos.rs_u.pos.lnum
@@ -5214,20 +5571,34 @@
 			}
 		    }
 		    else
-			--rp->rs_un.regsave.rs_u.pos.col;
+		    {
+#ifdef FEAT_MBYTE
+			if (has_mbyte)
+			    rp->rs_un.regsave.rs_u.pos.col -=
+				(*mb_head_off)(regline, regline
+				    + rp->rs_un.regsave.rs_u.pos.col - 1) + 1;
+			else
+#endif
+			    --rp->rs_un.regsave.rs_u.pos.col;
+		    }
 		}
 		else
 		{
 		    if (rp->rs_un.regsave.rs_u.ptr == regline)
 			no = FAIL;
 		    else
-			--rp->rs_un.regsave.rs_u.ptr;
+		    {
+			mb_ptr_back(regline, rp->rs_un.regsave.rs_u.ptr);
+			if (limit > 0 && (long)(behind_pos.rs_u.ptr
+				     - rp->rs_un.regsave.rs_u.ptr) > limit)
+			    no = FAIL;
+		    }
 		}
 		if (no == OK)
 		{
 		    /* Advanced, prepare for finding match again. */
 		    reg_restore(&rp->rs_un.regsave, &backpos);
-		    scan = OPERAND(rp->rs_scan);
+		    scan = OPERAND(rp->rs_scan) + 4;
 		    if (status == RA_MATCH)
 		    {
 			/* We did match, so subexpr may have been changed,
@@ -5472,7 +5843,7 @@
       case SIDENT + ADD_NL:
 	while (count < maxcount)
 	{
-	    if (vim_isIDc(*scan) && (testval || !VIM_ISDIGIT(*scan)))
+	    if (vim_isIDc(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
 	    {
 		mb_ptr_adv(scan);
 	    }
@@ -5502,7 +5873,8 @@
       case SKWORD + ADD_NL:
 	while (count < maxcount)
 	{
-	    if (vim_iswordp(scan) && (testval || !VIM_ISDIGIT(*scan)))
+	    if (vim_iswordp_buf(scan, reg_buf)
+					  && (testval || !VIM_ISDIGIT(*scan)))
 	    {
 		mb_ptr_adv(scan);
 	    }
@@ -5532,7 +5904,7 @@
       case SFNAME + ADD_NL:
 	while (count < maxcount)
 	{
-	    if (vim_isfilec(*scan) && (testval || !VIM_ISDIGIT(*scan)))
+	    if (vim_isfilec(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
 	    {
 		mb_ptr_adv(scan);
 	    }
@@ -5848,9 +6220,14 @@
     static int
 prog_magic_wrong()
 {
-    if (UCHARAT(REG_MULTI
-		? reg_mmatch->regprog->program
-		: reg_match->regprog->program) != REGMAGIC)
+    regprog_T	*prog;
+
+    prog = REG_MULTI ? reg_mmatch->regprog : reg_match->regprog;
+    if (prog->engine == &nfa_regengine)
+	/* For NFA matcher we don't check the magic */
+	return FALSE;
+
+    if (UCHARAT(((bt_regprog_T *)prog)->program) != REGMAGIC)
     {
 	EMSG(_(e_re_corr));
 	return TRUE;
@@ -6074,8 +6451,77 @@
     return val == n;
 }
 
+/*
+ * Check whether a backreference matches.
+ * Returns RA_FAIL, RA_NOMATCH or RA_MATCH.
+ * If "bytelen" is not NULL, it is set to the bytelength of the whole match.
+ */
+    static int
+match_with_backref(start_lnum, start_col, end_lnum, end_col, bytelen)
+    linenr_T start_lnum;
+    colnr_T  start_col;
+    linenr_T end_lnum;
+    colnr_T  end_col;
+    int	     *bytelen;
+{
+    linenr_T	clnum = start_lnum;
+    colnr_T	ccol = start_col;
+    int		len;
+    char_u	*p;
+
+    if (bytelen != NULL)
+	*bytelen = 0;
+    for (;;)
+    {
+	/* Since getting one line may invalidate the other, need to make copy.
+	 * Slow! */
+	if (regline != reg_tofree)
+	{
+	    len = (int)STRLEN(regline);
+	    if (reg_tofree == NULL || len >= (int)reg_tofreelen)
+	    {
+		len += 50;	/* get some extra */
+		vim_free(reg_tofree);
+		reg_tofree = alloc(len);
+		if (reg_tofree == NULL)
+		    return RA_FAIL; /* out of memory!*/
+		reg_tofreelen = len;
+	    }
+	    STRCPY(reg_tofree, regline);
+	    reginput = reg_tofree + (reginput - regline);
+	    regline = reg_tofree;
+	}
+
+	/* Get the line to compare with. */
+	p = reg_getline(clnum);
+	if (clnum == end_lnum)
+	    len = end_col - ccol;
+	else
+	    len = (int)STRLEN(p + ccol);
 
-#ifdef DEBUG
+	if (cstrncmp(p + ccol, reginput, &len) != 0)
+	    return RA_NOMATCH;  /* doesn't match */
+	if (bytelen != NULL)
+	    *bytelen += len;
+	if (clnum == end_lnum)
+	    break;		/* match and at end! */
+	if (reglnum >= reg_maxline)
+	    return RA_NOMATCH;  /* text too short */
+
+	/* Advance to next line. */
+	reg_nextline();
+	++clnum;
+	ccol = 0;
+	if (got_int)
+	    return RA_FAIL;
+    }
+
+    /* found a match!  Note that regline may now point to a copy of the line,
+     * that should not matter. */
+    return RA_MATCH;
+}
+
+#ifdef BT_REGEXP_DUMP
 
 /*
  * regdump - dump a regexp onto stdout in vaguely comprehensible form
@@ -6083,14 +6529,22 @@
     static void
 regdump(pattern, r)
     char_u	*pattern;
-    regprog_T	*r;
+    bt_regprog_T	*r;
 {
     char_u  *s;
     int	    op = EXACTLY;	/* Arbitrary non-END op. */
     char_u  *next;
     char_u  *end = NULL;
+    FILE    *f;
 
-    printf("\r\nregcomp(%s):\r\n", pattern);
+#ifdef BT_REGEXP_LOG
+    f = fopen("bt_regexp_log.log", "a");
+#else
+    f = stdout;
+#endif
+    if (f == NULL)
+	return;
+    fprintf(f, "-------------------------------------\n\r\nregcomp(%s):\r\n", pattern);
 
     s = r->program + 1;
     /*
@@ -6100,45 +6554,65 @@
     while (op != END || s <= end)
     {
 	op = OP(s);
-	printf("%2d%s", (int)(s - r->program), regprop(s)); /* Where, what. */
+	fprintf(f, "%2d%s", (int)(s - r->program), regprop(s)); /* Where, what. */
 	next = regnext(s);
 	if (next == NULL)	/* Next ptr. */
-	    printf("(0)");
+	    fprintf(f, "(0)");
 	else
-	    printf("(%d)", (int)((s - r->program) + (next - s)));
+	    fprintf(f, "(%d)", (int)((s - r->program) + (next - s)));
 	if (end < next)
 	    end = next;
 	if (op == BRACE_LIMITS)
 	{
-	    /* Two short ints */
-	    printf(" minval %ld, maxval %ld", OPERAND_MIN(s), OPERAND_MAX(s));
+	    /* Two ints */
+	    fprintf(f, " minval %ld, maxval %ld", OPERAND_MIN(s), OPERAND_MAX(s));
 	    s += 8;
 	}
+	else if (op == BEHIND || op == NOBEHIND)
+	{
+	    /* one int */
+	    fprintf(f, " count %ld", OPERAND_MIN(s));
+	    s += 4;
+	}
+	else if (op == RE_LNUM || op == RE_COL || op == RE_VCOL)
+	{
+	    /* one int plus comperator */
+	    fprintf(f, " count %ld", OPERAND_MIN(s));
+	    s += 5;
+	}
 	s += 3;
 	if (op == ANYOF || op == ANYOF + ADD_NL
 		|| op == ANYBUT || op == ANYBUT + ADD_NL
 		|| op == EXACTLY)
 	{
 	    /* Literal string, where present. */
+	    fprintf(f, "\nxxxxxxxxx\n");
 	    while (*s != NUL)
-		printf("%c", *s++);
+		fprintf(f, "%c", *s++);
+	    fprintf(f, "\nxxxxxxxxx\n");
 	    s++;
 	}
-	printf("\r\n");
+	fprintf(f, "\r\n");
     }
 
     /* Header fields of interest. */
     if (r->regstart != NUL)
-	printf("start `%s' 0x%x; ", r->regstart < 256
+	fprintf(f, "start `%s' 0x%x; ", r->regstart < 256
 		? (char *)transchar(r->regstart)
 		: "multibyte", r->regstart);
     if (r->reganch)
-	printf("anchored; ");
+	fprintf(f, "anchored; ");
     if (r->regmust != NULL)
-	printf("must have \"%s\"", r->regmust);
-    printf("\r\n");
+	fprintf(f, "must have \"%s\"", r->regmust);
+    fprintf(f, "\r\n");
+
+#ifdef BT_REGEXP_LOG
+    fclose(f);
+#endif
 }
+#endif	    /* BT_REGEXP_DUMP */
 
+#ifdef DEBUG
 /*
  * regprop - printable representation of opcode
  */
@@ -6146,12 +6620,12 @@
 regprop(op)
     char_u	   *op;
 {
-    char_u	    *p;
-    static char_u   buf[50];
+    char	    *p;
+    static char	    buf[50];
 
-    (void) strcpy(buf, ":");
+    STRCPY(buf, ":");
 
-    switch (OP(op))
+    switch ((int) OP(op))
     {
       case BOL:
 	p = "BOL";
@@ -6518,10 +6992,10 @@
 	break;
     }
     if (p != NULL)
-	(void) strcat(buf, p);
-    return buf;
+	STRCAT(buf, p);
+    return (char_u *)buf;
 }
-#endif
+#endif	    /* DEBUG */
 
 #ifdef FEAT_MBYTE
 static void mb_decompose __ARGS((int c, int *c1, int *c2, int *c3));
@@ -6591,7 +7065,7 @@
 {
     decomp_T d;
 
-    if (c >= 0x4b20 && c <= 0xfb4f)
+    if (c >= 0xfb20 && c <= 0xfb4f)
     {
 	d = decomp_table[c - 0xfb20];
 	*c1 = d.a;
@@ -6871,6 +7345,7 @@
 static regmmatch_T	*submatch_mmatch;
 static linenr_T		submatch_firstlnum;
 static linenr_T		submatch_maxline;
+static int		submatch_line_lbr;
 #endif
 
 #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO)
@@ -6904,6 +7379,7 @@
     reg_match = rmp;
     reg_mmatch = NULL;
     reg_maxline = 0;
+    reg_buf = curbuf;
     return vim_regsub_both(source, dest, copy, magic, backslash);
 }
 #endif
@@ -6940,7 +7416,8 @@
     int		c;
     int		cc;
     int		no = -1;
-    fptr_T	func = (fptr_T)NULL;
+    fptr_T	func_all = (fptr_T)NULL;
+    fptr_T	func_one = (fptr_T)NULL;
     linenr_T	clnum = 0;	/* init for GCC */
     int		len = 0;	/* init for GCC */
 #ifdef FEAT_EVAL
@@ -6997,6 +7474,7 @@
 	    submatch_mmatch = reg_mmatch;
 	    submatch_firstlnum = reg_firstlnum;
 	    submatch_maxline = reg_maxline;
+	    submatch_line_lbr = reg_line_lbr;
 	    save_reg_win = reg_win;
 	    save_ireg_ic = ireg_ic;
 	    can_f_submatch = TRUE;
@@ -7008,9 +7486,10 @@
 
 		for (s = eval_result; *s != NUL; mb_ptr_adv(s))
 		{
-		    /* Change NL to CR, so that it becomes a line break.
+		    /* Change NL to CR, so that it becomes a line break,
+		     * unless called from vim_regexec_nl().
 		     * Skip over a backslashed character. */
-		    if (*s == NL)
+		    if (*s == NL && !submatch_line_lbr)
 			*s = CAR;
 		    else if (*s == '\\' && s[1] != NUL)
 		    {
@@ -7019,8 +7498,9 @@
 			 * :s/abc\\\ndef/\="aaa\\\nbbb"/  on text:
 			 *   abc\
 			 *   def
+			 * Not when called from vim_regexec_nl().
 			 */
-			if (*s == NL)
+			if (*s == NL && !submatch_line_lbr)
 			    *s = CAR;
 			had_backslash = TRUE;
 		    }
@@ -7043,6 +7523,7 @@
 	    reg_mmatch = submatch_mmatch;
 	    reg_firstlnum = submatch_firstlnum;
 	    reg_maxline = submatch_maxline;
+	    reg_line_lbr = submatch_line_lbr;
 	    reg_win = save_reg_win;
 	    ireg_ic = save_ireg_ic;
 	    can_f_submatch = FALSE;
@@ -7069,16 +7550,16 @@
 	    {
 		switch (*src++)
 		{
-		case 'u':   func = (fptr_T)do_upper;
+		case 'u':   func_one = (fptr_T)do_upper;
 			    continue;
-		case 'U':   func = (fptr_T)do_Upper;
+		case 'U':   func_all = (fptr_T)do_Upper;
 			    continue;
-		case 'l':   func = (fptr_T)do_lower;
+		case 'l':   func_one = (fptr_T)do_lower;
 			    continue;
-		case 'L':   func = (fptr_T)do_Lower;
+		case 'L':   func_all = (fptr_T)do_Lower;
 			    continue;
 		case 'e':
-		case 'E':   func = (fptr_T)NULL;
+		case 'E':   func_one = func_all = (fptr_T)NULL;
 			    continue;
 		}
 	    }
@@ -7131,11 +7612,14 @@
 #endif
 
 	    /* Write to buffer, if copy is set. */
-	    if (func == (fptr_T)NULL)	/* just copy */
-		cc = c;
-	    else
+	    if (func_one != (fptr_T)NULL)
 		/* Turbo C complains without the typecast */
-		func = (fptr_T)(func(&cc, c));
+		func_one = (fptr_T)(func_one(&cc, c));
+	    else if (func_all != (fptr_T)NULL)
+		/* Turbo C complains without the typecast */
+		func_all = (fptr_T)(func_all(&cc, c));
+	    else /* just copy */
+		cc = c;
 
 #ifdef FEAT_MBYTE
 	    if (has_mbyte)
@@ -7246,11 +7730,14 @@
 #endif
 				c = *s;
 
-			    if (func == (fptr_T)NULL)	/* just copy */
-				cc = c;
-			    else
+			    if (func_one != (fptr_T)NULL)
+				/* Turbo C complains without the typecast */
+				func_one = (fptr_T)(func_one(&cc, c));
+			    else if (func_all != (fptr_T)NULL)
 				/* Turbo C complains without the typecast */
-				func = (fptr_T)(func(&cc, c));
+				func_all = (fptr_T)(func_all(&cc, c));
+			    else /* just copy */
+				cc = c;
 
 #ifdef FEAT_MBYTE
 			    if (has_mbyte)
@@ -7411,3 +7898,192 @@
     return retval;
 }
 #endif
+
+static regengine_T bt_regengine =
+{
+    bt_regcomp,
+    bt_regfree,
+    bt_regexec,
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+    bt_regexec_nl,
+#endif
+    bt_regexec_multi
+#ifdef DEBUG
+    ,(char_u *)""
+#endif
+};
+
+
+#include "regexp_nfa.c"
+
+static regengine_T nfa_regengine =
+{
+    nfa_regcomp,
+    nfa_regfree,
+    nfa_regexec,
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+    nfa_regexec_nl,
+#endif
+    nfa_regexec_multi
+#ifdef DEBUG
+    ,(char_u *)""
+#endif
+};
+
+/* Which regexp engine to use? Needed for vim_regcomp().
+ * Must match with 'regexpengine'. */
+static int regexp_engine = 0;
+#define	    AUTOMATIC_ENGINE	0
+#define	    BACKTRACKING_ENGINE	1
+#define	    NFA_ENGINE		2
+#ifdef DEBUG
+static char_u regname[][30] = {
+		    "AUTOMATIC Regexp Engine",
+		    "BACKTRACKING Regexp Engine",
+		    "NFA Regexp Engine"
+			    };
+#endif
+
+/*
+ * Compile a regular expression into internal code.
+ * Returns the program in allocated memory.
+ * Use vim_regfree() to free the memory.
+ * Returns NULL for an error.
+ */
+    regprog_T *
+vim_regcomp(expr_arg, re_flags)
+    char_u	*expr_arg;
+    int		re_flags;
+{
+    regprog_T   *prog = NULL;
+    char_u	*expr = expr_arg;
+
+    regexp_engine = p_re;
+
+    /* Check for prefix "\%#=", that sets the regexp engine */
+    if (STRNCMP(expr, "\\%#=", 4) == 0)
+    {
+	int newengine = expr[4] - '0';
+
+	if (newengine == AUTOMATIC_ENGINE
+	    || newengine == BACKTRACKING_ENGINE
+	    || newengine == NFA_ENGINE)
+	{
+	    regexp_engine = expr[4] - '0';
+	    expr += 5;
+#ifdef DEBUG
+	    EMSG3("New regexp mode selected (%d): %s", regexp_engine,
+						    regname[newengine]);
+#endif
+	}
+	else
+	{
+	    EMSG(_("E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be used "));
+	    regexp_engine = AUTOMATIC_ENGINE;
+	}
+    }
+#ifdef DEBUG
+    bt_regengine.expr = expr;
+    nfa_regengine.expr = expr;
+#endif
+
+    /*
+     * First try the NFA engine, unless backtracking was requested.
+     */
+    if (regexp_engine != BACKTRACKING_ENGINE)
+        prog = nfa_regengine.regcomp(expr, re_flags);
+    else
+	prog = bt_regengine.regcomp(expr, re_flags);
+
+    if (prog == NULL)	    /* error compiling regexp with initial engine */
+    {
+#ifdef BT_REGEXP_DEBUG_LOG
+	if (regexp_engine != BACKTRACKING_ENGINE)   /* debugging log for NFA */
+	{
+	    FILE *f;
+	    f = fopen(BT_REGEXP_DEBUG_LOG_NAME, "a");
+	    if (f)
+	    {
+		fprintf(f, "Syntax error in \"%s\"\n", expr);
+		fclose(f);
+	    }
+	    else
+		EMSG2("(NFA) Could not open \"%s\" to write !!!",
+                        BT_REGEXP_DEBUG_LOG_NAME);
+	}
+#endif
+	/*
+	 * If NFA engine failed, then revert to the backtracking engine.
+	 * Except when there was a syntax error, which was properly handled by
+	 * NFA engine.
+	 */
+	if (regexp_engine == AUTOMATIC_ENGINE)
+	    prog = bt_regengine.regcomp(expr, re_flags);
+    }
+
+    return prog;
+}
+
+/*
+ * Free a compiled regexp program, returned by vim_regcomp().
+ */
+    void
+vim_regfree(prog)
+    regprog_T   *prog;
+{
+    if (prog != NULL)
+	prog->engine->regfree(prog);
+}
+
+/*
+ * Match a regexp against a string.
+ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return TRUE if there is a match, FALSE if not.
+ */
+    int
+vim_regexec(rmp, line, col)
+    regmatch_T *rmp;
+    char_u      *line;  /* string to match against */
+    colnr_T     col;    /* column to start looking for match */
+{
+    return rmp->regprog->engine->regexec(rmp, line, col);
+}
+
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+/*
+ * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
+ */
+    int
+vim_regexec_nl(rmp, line, col)
+    regmatch_T *rmp;
+    char_u *line;
+    colnr_T col;
+{
+    return rmp->regprog->engine->regexec_nl(rmp, line, col);
+}
+#endif
+
+/*
+ * Match a regexp against multiple lines.
+ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return zero if there is no match.  Return number of lines contained in the
+ * match otherwise.
+ */
+    long
+vim_regexec_multi(rmp, win, buf, lnum, col, tm)
+    regmmatch_T *rmp;
+    win_T       *win;           /* window in which to search or NULL */
+    buf_T       *buf;           /* buffer in which to search */
+    linenr_T    lnum;           /* nr of line to start looking for match */
+    colnr_T     col;            /* column to start looking for match */
+    proftime_T	*tm;		/* timeout limit or NULL */
+{
+    return rmp->regprog->engine->regexec_multi(rmp, win, buf, lnum, col, tm);
+}
diff -Naur vim73.orig/src/regexp.h vim73/src/regexp.h
--- vim73.orig/src/regexp.h	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/regexp.h	2013-08-04 19:09:11.000609353 +0000
@@ -22,20 +22,87 @@
 #define NSUBEXP  10
 
 /*
+ * In the NFA engine: how many braces are allowed.
+ * TODO(RE): Use dynamic memory allocation instead of static, like here
+ */
+#define NFA_MAX_BRACES 20
+
+typedef struct regengine regengine_T;
+
+/*
  * Structure returned by vim_regcomp() to pass on to vim_regexec().
+ * This is the general structure. For the actual matcher, two specific
+ * structures are used. See code below.
+ */
+typedef struct regprog
+{
+    regengine_T		*engine;
+    unsigned		regflags;
+} regprog_T;
+
+/*
+ * Structure used by the back track matcher.
  * These fields are only to be used in regexp.c!
- * See regep.c for an explanation.
+ * See regexp.c for an explanation.
  */
 typedef struct
 {
+    /* These two members implement regprog_T */
+    regengine_T		*engine;
+    unsigned		regflags;
+
     int			regstart;
     char_u		reganch;
     char_u		*regmust;
     int			regmlen;
-    unsigned		regflags;
+#ifdef FEAT_SYN_HL
     char_u		reghasz;
-    char_u		program[1];		/* actually longer.. */
-} regprog_T;
+#endif
+    char_u		program[1];	/* actually longer.. */
+} bt_regprog_T;
+
+/*
+ * Structure representing a NFA state.
+ * A NFA state may have no outgoing edge, when it is a NFA_MATCH state.
+ */
+typedef struct nfa_state nfa_state_T;
+struct nfa_state
+{
+    int			c;
+    nfa_state_T		*out;
+    nfa_state_T		*out1;
+    int			id;
+    int			lastlist[2]; /* 0: normal, 1: recursive */
+    int			val;
+};
+
+/*
+ * Structure used by the NFA matcher.
+ */
+typedef struct
+{
+    /* These two members implement regprog_T */
+    regengine_T		*engine;
+    unsigned		regflags;
+
+    nfa_state_T		*start;		/* points into state[] */
+
+    int			reganch;	/* pattern starts with ^ */
+    int			regstart;	/* char at start of pattern */
+    char_u		*match_text;	/* plain text to match with */
+
+    int			has_zend;	/* pattern contains \ze */
+    int			has_backref;	/* pattern contains \1 .. \9 */
+#ifdef FEAT_SYN_HL
+    int			reghasz;
+#endif
+#ifdef DEBUG
+    char_u		*pattern;
+#endif
+    int			nsubexp;	/* number of () */
+    int			nstate;
+    nfa_state_T		state[1];	/* actually longer.. */
+} nfa_regprog_T;
 
 /*
  * Structure to be used for single-line matching.
@@ -78,4 +145,19 @@
     char_u		*matches[NSUBEXP];
 } reg_extmatch_T;
 
+struct regengine
+{
+    regprog_T	*(*regcomp)(char_u*, int);
+    void	(*regfree)(regprog_T *);
+    int		(*regexec)(regmatch_T*, char_u*, colnr_T);
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+    int		(*regexec_nl)(regmatch_T*, char_u*, colnr_T);
+#endif
+    long	(*regexec_multi)(regmmatch_T*, win_T*, buf_T*, linenr_T, colnr_T, proftime_T*);
+#ifdef DEBUG
+    char_u	*expr;
+#endif
+};
+
 #endif	/* _REGEXP_H */
diff -Naur vim73.orig/src/regexp_nfa.c vim73/src/regexp_nfa.c
--- vim73.orig/src/regexp_nfa.c	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/regexp_nfa.c	2013-08-04 19:09:11.007275999 +0000
@@ -0,0 +1,6700 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * NFA regular expression implementation.
+ *
+ * This file is included in "regexp.c".
+ */
+
+/*
+ * Logging of NFA engine.
+ *
+ * The NFA engine can write four log files:
+ * - Error log: Contains NFA engine's fatal errors.
+ * - Dump log: Contains compiled NFA state machine's information.
+ * - Run log: Contains information of matching procedure.
+ * - Debug log: Contains detailed information of matching procedure. Can be
+ *   disabled by undefining NFA_REGEXP_DEBUG_LOG.
+ * The first one can also be used without debug mode.
+ * The last three are enabled when compiled as debug mode and individually
+ * disabled by commenting them out.
+ * The log files can get quite big!
+ * Do disable all of this when compiling Vim for debugging, undefine DEBUG in
+ * regexp.c
+ */
+#ifdef DEBUG
+# define NFA_REGEXP_ERROR_LOG	"nfa_regexp_error.log"
+# define ENABLE_LOG
+# define NFA_REGEXP_DUMP_LOG	"nfa_regexp_dump.log"
+# define NFA_REGEXP_RUN_LOG	"nfa_regexp_run.log"
+# define NFA_REGEXP_DEBUG_LOG	"nfa_regexp_debug.log"
+#endif
+
+enum
+{
+    NFA_SPLIT = -1024,
+    NFA_MATCH,
+    NFA_SKIP_CHAR,		    /* matches a 0-length char */
+
+    NFA_START_COLL,		    /* [abc] start */
+    NFA_END_COLL,		    /* [abc] end */
+    NFA_START_NEG_COLL,		    /* [^abc] start */
+    NFA_END_NEG_COLL,		    /* [^abc] end (postfix only) */
+    NFA_RANGE,			    /* range of the two previous items
+				     * (postfix only) */
+    NFA_RANGE_MIN,		    /* low end of a range  */
+    NFA_RANGE_MAX,		    /* high end of a range  */
+
+    NFA_CONCAT,			    /* concatenate two previous items (postfix
+				     * only) */
+    NFA_OR,			    /* \| (postfix only) */
+    NFA_STAR,			    /* greedy * (posfix only) */
+    NFA_STAR_NONGREEDY,		    /* non-greedy * (postfix only) */
+    NFA_QUEST,			    /* greedy \? (postfix only) */
+    NFA_QUEST_NONGREEDY,	    /* non-greedy \? (postfix only) */
+
+    NFA_BOL,			    /* ^    Begin line */
+    NFA_EOL,			    /* $    End line */
+    NFA_BOW,			    /* \<   Begin word */
+    NFA_EOW,			    /* \>   End word */
+    NFA_BOF,			    /* \%^  Begin file */
+    NFA_EOF,			    /* \%$  End file */
+    NFA_NEWL,
+    NFA_ZSTART,			    /* Used for \zs */
+    NFA_ZEND,			    /* Used for \ze */
+    NFA_NOPEN,			    /* Start of subexpression marked with \%( */
+    NFA_NCLOSE,			    /* End of subexpr. marked with \%( ... \) */
+    NFA_START_INVISIBLE,
+    NFA_START_INVISIBLE_FIRST,
+    NFA_START_INVISIBLE_NEG,
+    NFA_START_INVISIBLE_NEG_FIRST,
+    NFA_START_INVISIBLE_BEFORE,
+    NFA_START_INVISIBLE_BEFORE_FIRST,
+    NFA_START_INVISIBLE_BEFORE_NEG,
+    NFA_START_INVISIBLE_BEFORE_NEG_FIRST,
+    NFA_START_PATTERN,
+    NFA_END_INVISIBLE,
+    NFA_END_INVISIBLE_NEG,
+    NFA_END_PATTERN,
+    NFA_COMPOSING,		    /* Next nodes in NFA are part of the
+				       composing multibyte char */
+    NFA_END_COMPOSING,		    /* End of a composing char in the NFA */
+    NFA_OPT_CHARS,		    /* \%[abc] */
+
+    /* The following are used only in the postfix form, not in the NFA */
+    NFA_PREV_ATOM_NO_WIDTH,	    /* Used for \@= */
+    NFA_PREV_ATOM_NO_WIDTH_NEG,	    /* Used for \@! */
+    NFA_PREV_ATOM_JUST_BEFORE,	    /* Used for \@<= */
+    NFA_PREV_ATOM_JUST_BEFORE_NEG,  /* Used for \@<! */
+    NFA_PREV_ATOM_LIKE_PATTERN,	    /* Used for \@> */
+
+    NFA_BACKREF1,		    /* \1 */
+    NFA_BACKREF2,		    /* \2 */
+    NFA_BACKREF3,		    /* \3 */
+    NFA_BACKREF4,		    /* \4 */
+    NFA_BACKREF5,		    /* \5 */
+    NFA_BACKREF6,		    /* \6 */
+    NFA_BACKREF7,		    /* \7 */
+    NFA_BACKREF8,		    /* \8 */
+    NFA_BACKREF9,		    /* \9 */
+#ifdef FEAT_SYN_HL
+    NFA_ZREF1,			    /* \z1 */
+    NFA_ZREF2,			    /* \z2 */
+    NFA_ZREF3,			    /* \z3 */
+    NFA_ZREF4,			    /* \z4 */
+    NFA_ZREF5,			    /* \z5 */
+    NFA_ZREF6,			    /* \z6 */
+    NFA_ZREF7,			    /* \z7 */
+    NFA_ZREF8,			    /* \z8 */
+    NFA_ZREF9,			    /* \z9 */
+#endif
+    NFA_SKIP,			    /* Skip characters */
+
+    NFA_MOPEN,
+    NFA_MOPEN1,
+    NFA_MOPEN2,
+    NFA_MOPEN3,
+    NFA_MOPEN4,
+    NFA_MOPEN5,
+    NFA_MOPEN6,
+    NFA_MOPEN7,
+    NFA_MOPEN8,
+    NFA_MOPEN9,
+
+    NFA_MCLOSE,
+    NFA_MCLOSE1,
+    NFA_MCLOSE2,
+    NFA_MCLOSE3,
+    NFA_MCLOSE4,
+    NFA_MCLOSE5,
+    NFA_MCLOSE6,
+    NFA_MCLOSE7,
+    NFA_MCLOSE8,
+    NFA_MCLOSE9,
+
+#ifdef FEAT_SYN_HL
+    NFA_ZOPEN,
+    NFA_ZOPEN1,
+    NFA_ZOPEN2,
+    NFA_ZOPEN3,
+    NFA_ZOPEN4,
+    NFA_ZOPEN5,
+    NFA_ZOPEN6,
+    NFA_ZOPEN7,
+    NFA_ZOPEN8,
+    NFA_ZOPEN9,
+
+    NFA_ZCLOSE,
+    NFA_ZCLOSE1,
+    NFA_ZCLOSE2,
+    NFA_ZCLOSE3,
+    NFA_ZCLOSE4,
+    NFA_ZCLOSE5,
+    NFA_ZCLOSE6,
+    NFA_ZCLOSE7,
+    NFA_ZCLOSE8,
+    NFA_ZCLOSE9,
+#endif
+
+    /* NFA_FIRST_NL */
+    NFA_ANY,		/*	Match any one character. */
+    NFA_IDENT,		/*	Match identifier char */
+    NFA_SIDENT,		/*	Match identifier char but no digit */
+    NFA_KWORD,		/*	Match keyword char */
+    NFA_SKWORD,		/*	Match word char but no digit */
+    NFA_FNAME,		/*	Match file name char */
+    NFA_SFNAME,		/*	Match file name char but no digit */
+    NFA_PRINT,		/*	Match printable char */
+    NFA_SPRINT,		/*	Match printable char but no digit */
+    NFA_WHITE,		/*	Match whitespace char */
+    NFA_NWHITE,		/*	Match non-whitespace char */
+    NFA_DIGIT,		/*	Match digit char */
+    NFA_NDIGIT,		/*	Match non-digit char */
+    NFA_HEX,		/*	Match hex char */
+    NFA_NHEX,		/*	Match non-hex char */
+    NFA_OCTAL,		/*	Match octal char */
+    NFA_NOCTAL,		/*	Match non-octal char */
+    NFA_WORD,		/*	Match word char */
+    NFA_NWORD,		/*	Match non-word char */
+    NFA_HEAD,		/*	Match head char */
+    NFA_NHEAD,		/*	Match non-head char */
+    NFA_ALPHA,		/*	Match alpha char */
+    NFA_NALPHA,		/*	Match non-alpha char */
+    NFA_LOWER,		/*	Match lowercase char */
+    NFA_NLOWER,		/*	Match non-lowercase char */
+    NFA_UPPER,		/*	Match uppercase char */
+    NFA_NUPPER,		/*	Match non-uppercase char */
+
+    NFA_CURSOR,		/*	Match cursor pos */
+    NFA_LNUM,		/*	Match line number */
+    NFA_LNUM_GT,	/*	Match > line number */
+    NFA_LNUM_LT,	/*	Match < line number */
+    NFA_COL,		/*	Match cursor column */
+    NFA_COL_GT,		/*	Match > cursor column */
+    NFA_COL_LT,		/*	Match < cursor column */
+    NFA_VCOL,		/*	Match cursor virtual column */
+    NFA_VCOL_GT,	/*	Match > cursor virtual column */
+    NFA_VCOL_LT,	/*	Match < cursor virtual column */
+    NFA_MARK,		/*	Match mark */
+    NFA_MARK_GT,	/*	Match > mark */
+    NFA_MARK_LT,	/*	Match < mark */
+    NFA_VISUAL,		/*	Match Visual area */
+
+    NFA_FIRST_NL = NFA_ANY + ADD_NL,
+    NFA_LAST_NL = NFA_NUPPER + ADD_NL,
+
+    /* Character classes [:alnum:] etc */
+    NFA_CLASS_ALNUM,
+    NFA_CLASS_ALPHA,
+    NFA_CLASS_BLANK,
+    NFA_CLASS_CNTRL,
+    NFA_CLASS_DIGIT,
+    NFA_CLASS_GRAPH,
+    NFA_CLASS_LOWER,
+    NFA_CLASS_PRINT,
+    NFA_CLASS_PUNCT,
+    NFA_CLASS_SPACE,
+    NFA_CLASS_UPPER,
+    NFA_CLASS_XDIGIT,
+    NFA_CLASS_TAB,
+    NFA_CLASS_RETURN,
+    NFA_CLASS_BACKSPACE,
+    NFA_CLASS_ESCAPE
+};
+
+/* Keep in sync with classchars. */
+static int nfa_classcodes[] = {
+    NFA_ANY, NFA_IDENT, NFA_SIDENT, NFA_KWORD,NFA_SKWORD,
+    NFA_FNAME, NFA_SFNAME, NFA_PRINT, NFA_SPRINT,
+    NFA_WHITE, NFA_NWHITE, NFA_DIGIT, NFA_NDIGIT,
+    NFA_HEX, NFA_NHEX, NFA_OCTAL, NFA_NOCTAL,
+    NFA_WORD, NFA_NWORD, NFA_HEAD, NFA_NHEAD,
+    NFA_ALPHA, NFA_NALPHA, NFA_LOWER, NFA_NLOWER,
+    NFA_UPPER, NFA_NUPPER
+};
+
+static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
+
+/* NFA regexp \ze operator encountered. */
+static int nfa_has_zend;
+
+/* NFA regexp \1 .. \9 encountered. */
+static int nfa_has_backref;
+
+#ifdef FEAT_SYN_HL
+/* NFA regexp has \z( ), set zsubexpr. */
+static int nfa_has_zsubexpr;
+#endif
+
+/* Number of sub expressions actually being used during execution. 1 if only
+ * the whole match (subexpr 0) is used. */
+static int nfa_nsubexpr;
+
+static int *post_start;  /* holds the postfix form of r.e. */
+static int *post_end;
+static int *post_ptr;
+
+static int nstate;	/* Number of states in the NFA. Also used when
+			 * executing. */
+static int istate;	/* Index in the state vector, used in alloc_state() */
+
+/* If not NULL match must end at this position */
+static save_se_T *nfa_endp = NULL;
+
+/* listid is global, so that it increases on recursive calls to
+ * nfa_regmatch(), which means we don't have to clear the lastlist field of
+ * all the states. */
+static int nfa_listid;
+static int nfa_alt_listid;
+
+/* 0 for first call to nfa_regmatch(), 1 for recursive call. */
+static int nfa_ll_index = 0;
+
+static int nfa_regcomp_start __ARGS((char_u *expr, int re_flags));
+static int nfa_get_reganch __ARGS((nfa_state_T *start, int depth));
+static int nfa_get_regstart __ARGS((nfa_state_T *start, int depth));
+static char_u *nfa_get_match_text __ARGS((nfa_state_T *start));
+static int realloc_post_list __ARGS((void));
+static int nfa_recognize_char_class __ARGS((char_u *start, char_u *end, int extra_newl));
+static int nfa_emit_equi_class __ARGS((int c));
+static int nfa_regatom __ARGS((void));
+static int nfa_regpiece __ARGS((void));
+static int nfa_regconcat __ARGS((void));
+static int nfa_regbranch __ARGS((void));
+static int nfa_reg __ARGS((int paren));
+#ifdef DEBUG
+static void nfa_set_code __ARGS((int c));
+static void nfa_postfix_dump __ARGS((char_u *expr, int retval));
+static void nfa_print_state __ARGS((FILE *debugf, nfa_state_T *state));
+static void nfa_print_state2 __ARGS((FILE *debugf, nfa_state_T *state, garray_T *indent));
+static void nfa_dump __ARGS((nfa_regprog_T *prog));
+#endif
+static int *re2post __ARGS((void));
+static nfa_state_T *alloc_state __ARGS((int c, nfa_state_T *out, nfa_state_T *out1));
+static void st_error __ARGS((int *postfix, int *end, int *p));
+static int nfa_max_width __ARGS((nfa_state_T *startstate, int depth));
+static nfa_state_T *post2nfa __ARGS((int *postfix, int *end, int nfa_calc_size));
+static void nfa_postprocess __ARGS((nfa_regprog_T *prog));
+static int check_char_class __ARGS((int class, int c));
+static void nfa_save_listids __ARGS((nfa_regprog_T *prog, int *list));
+static void nfa_restore_listids __ARGS((nfa_regprog_T *prog, int *list));
+static int nfa_re_num_cmp __ARGS((long_u val, int op, long_u pos));
+static long nfa_regtry __ARGS((nfa_regprog_T *prog, colnr_T col));
+static long nfa_regexec_both __ARGS((char_u *line, colnr_T col));
+static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
+static void nfa_regfree __ARGS((regprog_T *prog));
+static int nfa_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+static long nfa_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
+static int match_follows __ARGS((nfa_state_T *startstate, int depth));
+static int failure_chance __ARGS((nfa_state_T *state, int depth));
+
+/* helper functions used when doing re2post() ... regatom() parsing */
+#define EMIT(c)	do {				\
+		    if (post_ptr >= post_end && realloc_post_list() == FAIL) \
+			return FAIL;		\
+		    *post_ptr++ = c;		\
+		} while (0)
+
+/*
+ * Initialize internal variables before NFA compilation.
+ * Return OK on success, FAIL otherwise.
+ */
+    static int
+nfa_regcomp_start(expr, re_flags)
+    char_u	*expr;
+    int		re_flags;	    /* see vim_regcomp() */
+{
+    size_t	postfix_size;
+    int		nstate_max;
+
+    nstate = 0;
+    istate = 0;
+    /* A reasonable estimation for maximum size */
+    nstate_max = (int)(STRLEN(expr) + 1) * 25;
+
+    /* Some items blow up in size, such as [A-z].  Add more space for that.
+     * When it is still not enough realloc_post_list() will be used. */
+    nstate_max += 1000;
+
+    /* Size for postfix representation of expr. */
+    postfix_size = sizeof(int) * nstate_max;
+
+    post_start = (int *)lalloc(postfix_size, TRUE);
+    if (post_start == NULL)
+	return FAIL;
+    post_ptr = post_start;
+    post_end = post_start + nstate_max;
+    nfa_has_zend = FALSE;
+    nfa_has_backref = FALSE;
+
+    /* shared with BT engine */
+    regcomp_start(expr, re_flags);
+
+    return OK;
+}
+
+/*
+ * Figure out if the NFA state list starts with an anchor, must match at start
+ * of the line.
+ */
+    static int
+nfa_get_reganch(start, depth)
+    nfa_state_T *start;
+    int		depth;
+{
+    nfa_state_T *p = start;
+
+    if (depth > 4)
+	return 0;
+
+    while (p != NULL)
+    {
+	switch (p->c)
+	{
+	    case NFA_BOL:
+	    case NFA_BOF:
+		return 1; /* yes! */
+
+	    case NFA_ZSTART:
+	    case NFA_ZEND:
+	    case NFA_CURSOR:
+	    case NFA_VISUAL:
+
+	    case NFA_MOPEN:
+	    case NFA_MOPEN1:
+	    case NFA_MOPEN2:
+	    case NFA_MOPEN3:
+	    case NFA_MOPEN4:
+	    case NFA_MOPEN5:
+	    case NFA_MOPEN6:
+	    case NFA_MOPEN7:
+	    case NFA_MOPEN8:
+	    case NFA_MOPEN9:
+	    case NFA_NOPEN:
+#ifdef FEAT_SYN_HL
+	    case NFA_ZOPEN:
+	    case NFA_ZOPEN1:
+	    case NFA_ZOPEN2:
+	    case NFA_ZOPEN3:
+	    case NFA_ZOPEN4:
+	    case NFA_ZOPEN5:
+	    case NFA_ZOPEN6:
+	    case NFA_ZOPEN7:
+	    case NFA_ZOPEN8:
+	    case NFA_ZOPEN9:
+#endif
+		p = p->out;
+		break;
+
+	    case NFA_SPLIT:
+		return nfa_get_reganch(p->out, depth + 1)
+				       && nfa_get_reganch(p->out1, depth + 1);
+
+	    default:
+		return 0; /* noooo */
+	}
+    }
+    return 0;
+}
+
+/*
+ * Figure out if the NFA state list starts with a character which must match
+ * at start of the match.
+ */
+    static int
+nfa_get_regstart(start, depth)
+    nfa_state_T *start;
+    int		depth;
+{
+    nfa_state_T *p = start;
+
+    if (depth > 4)
+	return 0;
+
+    while (p != NULL)
+    {
+	switch (p->c)
+	{
+	    /* all kinds of zero-width matches */
+	    case NFA_BOL:
+	    case NFA_BOF:
+	    case NFA_BOW:
+	    case NFA_EOW:
+	    case NFA_ZSTART:
+	    case NFA_ZEND:
+	    case NFA_CURSOR:
+	    case NFA_VISUAL:
+	    case NFA_LNUM:
+	    case NFA_LNUM_GT:
+	    case NFA_LNUM_LT:
+	    case NFA_COL:
+	    case NFA_COL_GT:
+	    case NFA_COL_LT:
+	    case NFA_VCOL:
+	    case NFA_VCOL_GT:
+	    case NFA_VCOL_LT:
+	    case NFA_MARK:
+	    case NFA_MARK_GT:
+	    case NFA_MARK_LT:
+
+	    case NFA_MOPEN:
+	    case NFA_MOPEN1:
+	    case NFA_MOPEN2:
+	    case NFA_MOPEN3:
+	    case NFA_MOPEN4:
+	    case NFA_MOPEN5:
+	    case NFA_MOPEN6:
+	    case NFA_MOPEN7:
+	    case NFA_MOPEN8:
+	    case NFA_MOPEN9:
+	    case NFA_NOPEN:
+#ifdef FEAT_SYN_HL
+	    case NFA_ZOPEN:
+	    case NFA_ZOPEN1:
+	    case NFA_ZOPEN2:
+	    case NFA_ZOPEN3:
+	    case NFA_ZOPEN4:
+	    case NFA_ZOPEN5:
+	    case NFA_ZOPEN6:
+	    case NFA_ZOPEN7:
+	    case NFA_ZOPEN8:
+	    case NFA_ZOPEN9:
+#endif
+		p = p->out;
+		break;
+
+	    case NFA_SPLIT:
+	    {
+		int c1 = nfa_get_regstart(p->out, depth + 1);
+		int c2 = nfa_get_regstart(p->out1, depth + 1);
+
+		if (c1 == c2)
+		    return c1; /* yes! */
+		return 0;
+	    }
+
+	    default:
+		if (p->c > 0)
+		    return p->c; /* yes! */
+		return 0;
+	}
+    }
+    return 0;
+}
+
+/*
+ * Figure out if the NFA state list contains just literal text and nothing
+ * else.  If so return a string in allocated memory with what must match after
+ * regstart.  Otherwise return NULL.
+ */
+    static char_u *
+nfa_get_match_text(start)
+    nfa_state_T *start;
+{
+    nfa_state_T *p = start;
+    int		len = 0;
+    char_u	*ret;
+    char_u	*s;
+
+    if (p->c != NFA_MOPEN)
+	return NULL; /* just in case */
+    p = p->out;
+    while (p->c > 0)
+    {
+	len += MB_CHAR2LEN(p->c);
+	p = p->out;
+    }
+    if (p->c != NFA_MCLOSE || p->out->c != NFA_MATCH)
+	return NULL;
+
+    ret = alloc(len);
+    if (ret != NULL)
+    {
+	len = 0;
+	p = start->out->out; /* skip first char, it goes into regstart */
+	s = ret;
+	while (p->c > 0)
+	{
+#ifdef FEAT_MBYTE
+	    if (has_mbyte)
+		s += (*mb_char2bytes)(p->c, s);
+	    else
+#endif
+		*s++ = p->c;
+	    p = p->out;
+	}
+	*s = NUL;
+    }
+    return ret;
+}
+
+/*
+ * Allocate more space for post_start.  Called when
+ * running above the estimated number of states.
+ */
+    static int
+realloc_post_list()
+{
+    int   nstate_max = (int)(post_end - post_start);
+    int   new_max = nstate_max + 1000;
+    int   *new_start;
+    int	  *old_start;
+
+    new_start = (int *)lalloc(new_max * sizeof(int), TRUE);
+    if (new_start == NULL)
+	return FAIL;
+    mch_memmove(new_start, post_start, nstate_max * sizeof(int));
+    old_start = post_start;
+    post_start = new_start;
+    post_ptr = new_start + (post_ptr - old_start);
+    post_end = post_start + new_max;
+    vim_free(old_start);
+    return OK;
+}
+
+/*
+ * Search between "start" and "end" and try to recognize a
+ * character class in expanded form. For example [0-9].
+ * On success, return the id the character class to be emitted.
+ * On failure, return 0 (=FAIL)
+ * Start points to the first char of the range, while end should point
+ * to the closing brace.
+ */
+    static int
+nfa_recognize_char_class(start, end, extra_newl)
+    char_u  *start;
+    char_u  *end;
+    int	    extra_newl;
+{
+#   define CLASS_not		0x80
+#   define CLASS_af		0x40
+#   define CLASS_AF		0x20
+#   define CLASS_az		0x10
+#   define CLASS_AZ		0x08
+#   define CLASS_o7		0x04
+#   define CLASS_o9		0x02
+#   define CLASS_underscore	0x01
+
+    int		newl = FALSE;
+    char_u	*p;
+    int		config = 0;
+
+    if (extra_newl == TRUE)
+	newl = TRUE;
+
+    if (*end != ']')
+	return FAIL;
+    p = start;
+    if (*p == '^')
+    {
+	config |= CLASS_not;
+	p++;
+    }
+
+    while (p < end)
+    {
+	if (p + 2 < end && *(p + 1) == '-')
+	{
+	    switch (*p)
+	    {
+		case '0':
+		    if (*(p + 2) == '9')
+		    {
+			config |= CLASS_o9;
+			break;
+		    }
+		    else
+		    if (*(p + 2) == '7')
+		    {
+			config |= CLASS_o7;
+			break;
+		    }
+		case 'a':
+		    if (*(p + 2) == 'z')
+		    {
+			config |= CLASS_az;
+			break;
+		    }
+		    else
+		    if (*(p + 2) == 'f')
+		    {
+			config |= CLASS_af;
+			break;
+		    }
+		case 'A':
+		    if (*(p + 2) == 'Z')
+		    {
+			config |= CLASS_AZ;
+			break;
+		    }
+		    else
+		    if (*(p + 2) == 'F')
+		    {
+			config |= CLASS_AF;
+			break;
+		    }
+		/* FALLTHROUGH */
+		default:
+		    return FAIL;
+	    }
+	    p += 3;
+	}
+	else if (p + 1 < end && *p == '\\' && *(p + 1) == 'n')
+	{
+	    newl = TRUE;
+	    p += 2;
+	}
+	else if (*p == '_')
+	{
+	    config |= CLASS_underscore;
+	    p ++;
+	}
+	else if (*p == '\n')
+	{
+	    newl = TRUE;
+	    p ++;
+	}
+	else
+	    return FAIL;
+    } /* while (p < end) */
+
+    if (p != end)
+	return FAIL;
+
+    if (newl == TRUE)
+	extra_newl = ADD_NL;
+
+    switch (config)
+    {
+	case CLASS_o9:
+	    return extra_newl + NFA_DIGIT;
+	case CLASS_not |  CLASS_o9:
+	    return extra_newl + NFA_NDIGIT;
+	case CLASS_af | CLASS_AF | CLASS_o9:
+	    return extra_newl + NFA_HEX;
+	case CLASS_not | CLASS_af | CLASS_AF | CLASS_o9:
+	    return extra_newl + NFA_NHEX;
+	case CLASS_o7:
+	    return extra_newl + NFA_OCTAL;
+	case CLASS_not | CLASS_o7:
+	    return extra_newl + NFA_NOCTAL;
+	case CLASS_az | CLASS_AZ | CLASS_o9 | CLASS_underscore:
+	    return extra_newl + NFA_WORD;
+	case CLASS_not | CLASS_az | CLASS_AZ | CLASS_o9 | CLASS_underscore:
+	    return extra_newl + NFA_NWORD;
+	case CLASS_az | CLASS_AZ | CLASS_underscore:
+	    return extra_newl + NFA_HEAD;
+	case CLASS_not | CLASS_az | CLASS_AZ | CLASS_underscore:
+	    return extra_newl + NFA_NHEAD;
+	case CLASS_az | CLASS_AZ:
+	    return extra_newl + NFA_ALPHA;
+	case CLASS_not | CLASS_az | CLASS_AZ:
+	    return extra_newl + NFA_NALPHA;
+	case CLASS_az:
+	   return extra_newl + NFA_LOWER;
+	case CLASS_not | CLASS_az:
+	    return extra_newl + NFA_NLOWER;
+	case CLASS_AZ:
+	    return extra_newl + NFA_UPPER;
+	case CLASS_not | CLASS_AZ:
+	    return extra_newl + NFA_NUPPER;
+    }
+    return FAIL;
+}
+
+/*
+ * Produce the bytes for equivalence class "c".
+ * Currently only handles latin1, latin9 and utf-8.
+ * Emits bytes in postfix notation: 'a,b,NFA_OR,c,NFA_OR' is
+ * equivalent to 'a OR b OR c'
+ *
+ * NOTE! When changing this function, also update reg_equi_class()
+ */
+    static int
+nfa_emit_equi_class(c)
+    int	    c;
+{
+#define EMIT2(c)   EMIT(c); EMIT(NFA_CONCAT);
+
+#ifdef FEAT_MBYTE
+    if (enc_utf8 || STRCMP(p_enc, "latin1") == 0
+					 || STRCMP(p_enc, "iso-8859-15") == 0)
+#endif
+    {
+	switch (c)
+	{
+	    case 'A': case 0300: case 0301: case 0302:
+	    case 0303: case 0304: case 0305:
+		    EMIT2('A');	    EMIT2(0300);  EMIT2(0301);
+		    EMIT2(0302);  EMIT2(0303);  EMIT2(0304);
+		    EMIT2(0305);
+		    return OK;
+
+	    case 'C': case 0307:
+		    EMIT2('C');	    EMIT2(0307);
+		    return OK;
+
+	    case 'E': case 0310: case 0311: case 0312: case 0313:
+		    EMIT2('E');	    EMIT2(0310);  EMIT2(0311);
+		    EMIT2(0312);  EMIT2(0313);
+		    return OK;
+
+	    case 'I': case 0314: case 0315: case 0316: case 0317:
+		    EMIT2('I');	    EMIT2(0314);  EMIT2(0315);
+		    EMIT2(0316);  EMIT2(0317);
+		    return OK;
+
+	    case 'N': case 0321:
+		    EMIT2('N');	    EMIT2(0321);
+		    return OK;
+
+	    case 'O': case 0322: case 0323: case 0324: case 0325:
+	    case 0326:
+		    EMIT2('O');	    EMIT2(0322);  EMIT2(0323);
+		    EMIT2(0324);  EMIT2(0325);  EMIT2(0326);
+		    return OK;
+
+	    case 'U': case 0331: case 0332: case 0333: case 0334:
+		    EMIT2('U');	    EMIT2(0331);  EMIT2(0332);
+		    EMIT2(0333);  EMIT2(0334);
+		    return OK;
+
+	    case 'Y': case 0335:
+		    EMIT2('Y');	    EMIT2(0335);
+		    return OK;
+
+	    case 'a': case 0340: case 0341: case 0342:
+	    case 0343: case 0344: case 0345:
+		    EMIT2('a');	    EMIT2(0340);  EMIT2(0341);
+		    EMIT2(0342);  EMIT2(0343);  EMIT2(0344);
+		    EMIT2(0345);
+		    return OK;
+
+	    case 'c': case 0347:
+		    EMIT2('c');	    EMIT2(0347);
+		    return OK;
+
+	    case 'e': case 0350: case 0351: case 0352: case 0353:
+		    EMIT2('e');	    EMIT2(0350);  EMIT2(0351);
+		    EMIT2(0352);  EMIT2(0353);
+		    return OK;
+
+	    case 'i': case 0354: case 0355: case 0356: case 0357:
+		    EMIT2('i');	    EMIT2(0354);  EMIT2(0355);
+		    EMIT2(0356);  EMIT2(0357);
+		    return OK;
+
+	    case 'n': case 0361:
+		    EMIT2('n');	    EMIT2(0361);
+		    return OK;
+
+	    case 'o': case 0362: case 0363: case 0364: case 0365:
+	    case 0366:
+		    EMIT2('o');	    EMIT2(0362);  EMIT2(0363);
+		    EMIT2(0364);  EMIT2(0365);  EMIT2(0366);
+		    return OK;
+
+	    case 'u': case 0371: case 0372: case 0373: case 0374:
+		    EMIT2('u');	    EMIT2(0371);  EMIT2(0372);
+		    EMIT2(0373);  EMIT2(0374);
+		    return OK;
+
+	    case 'y': case 0375: case 0377:
+		    EMIT2('y');	    EMIT2(0375);  EMIT2(0377);
+		    return OK;
+
+	    default:
+		    return FAIL;
+	}
+    }
+
+    EMIT(c);
+    return OK;
+#undef EMIT2
+}
+
+/*
+ * Code to parse regular expression.
+ *
+ * We try to reuse parsing functions in regexp.c to
+ * minimize surprise and keep the syntax consistent.
+ */
+
+/*
+ * Parse the lowest level.
+ *
+ * An atom can be one of a long list of items.  Many atoms match one character
+ * in the text.  It is often an ordinary character or a character class.
+ * Braces can be used to make a pattern into an atom.  The "\z(\)" construct
+ * is only for syntax highlighting.
+ *
+ * atom    ::=     ordinary-atom
+ *     or  \( pattern \)
+ *     or  \%( pattern \)
+ *     or  \z( pattern \)
+ */
+    static int
+nfa_regatom()
+{
+    int		c;
+    int		charclass;
+    int		equiclass;
+    int		collclass;
+    int		got_coll_char;
+    char_u	*p;
+    char_u	*endp;
+#ifdef FEAT_MBYTE
+    char_u	*old_regparse = regparse;
+#endif
+    int		extra = 0;
+    int		emit_range;
+    int		negated;
+    int		result;
+    int		startc = -1;
+    int		endc = -1;
+    int		oldstartc = -1;
+
+    c = getchr();
+    switch (c)
+    {
+	case NUL:
+	    EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely"));
+
+	case Magic('^'):
+	    EMIT(NFA_BOL);
+	    break;
+
+	case Magic('$'):
+	    EMIT(NFA_EOL);
+#if defined(FEAT_SYN_HL) || defined(PROTO)
+	    had_eol = TRUE;
+#endif
+	    break;
+
+	case Magic('<'):
+	    EMIT(NFA_BOW);
+	    break;
+
+	case Magic('>'):
+	    EMIT(NFA_EOW);
+	    break;
+
+	case Magic('_'):
+	    c = no_Magic(getchr());
+	    if (c == '^')	/* "\_^" is start-of-line */
+	    {
+		EMIT(NFA_BOL);
+		break;
+	    }
+	    if (c == '$')	/* "\_$" is end-of-line */
+	    {
+		EMIT(NFA_EOL);
+#if defined(FEAT_SYN_HL) || defined(PROTO)
+		had_eol = TRUE;
+#endif
+		break;
+	    }
+
+	    extra = ADD_NL;
+
+	    /* "\_[" is collection plus newline */
+	    if (c == '[')
+		goto collection;
+
+	/* "\_x" is character class plus newline */
+	/*FALLTHROUGH*/
+
+	/*
+	 * Character classes.
+	 */
+	case Magic('.'):
+	case Magic('i'):
+	case Magic('I'):
+	case Magic('k'):
+	case Magic('K'):
+	case Magic('f'):
+	case Magic('F'):
+	case Magic('p'):
+	case Magic('P'):
+	case Magic('s'):
+	case Magic('S'):
+	case Magic('d'):
+	case Magic('D'):
+	case Magic('x'):
+	case Magic('X'):
+	case Magic('o'):
+	case Magic('O'):
+	case Magic('w'):
+	case Magic('W'):
+	case Magic('h'):
+	case Magic('H'):
+	case Magic('a'):
+	case Magic('A'):
+	case Magic('l'):
+	case Magic('L'):
+	case Magic('u'):
+	case Magic('U'):
+	    p = vim_strchr(classchars, no_Magic(c));
+	    if (p == NULL)
+	    {
+		EMSGN("INTERNAL: Unknown character class char: %ld", c);
+		return FAIL;
+	    }
+#ifdef FEAT_MBYTE
+	    /* When '.' is followed by a composing char ignore the dot, so that
+	     * the composing char is matched here. */
+	    if (enc_utf8 && c == Magic('.') && utf_iscomposing(peekchr()))
+	    {
+		old_regparse = regparse;
+		c = getchr();
+		goto nfa_do_multibyte;
+	    }
+#endif
+	    EMIT(nfa_classcodes[p - classchars]);
+	    if (extra == ADD_NL)
+	    {
+		EMIT(NFA_NEWL);
+		EMIT(NFA_OR);
+		regflags |= RF_HASNL;
+	    }
+	    break;
+
+	case Magic('n'):
+	    if (reg_string)
+		/* In a string "\n" matches a newline character. */
+		EMIT(NL);
+	    else
+	    {
+		/* In buffer text "\n" matches the end of a line. */
+		EMIT(NFA_NEWL);
+		regflags |= RF_HASNL;
+	    }
+	    break;
+
+	case Magic('('):
+	    if (nfa_reg(REG_PAREN) == FAIL)
+		return FAIL;	    /* cascaded error */
+	    break;
+
+	case Magic('|'):
+	case Magic('&'):
+	case Magic(')'):
+	    EMSGN(_(e_misplaced), no_Magic(c));
+	    return FAIL;
+
+	case Magic('='):
+	case Magic('?'):
+	case Magic('+'):
+	case Magic('@'):
+	case Magic('*'):
+	case Magic('{'):
+	    /* these should follow an atom, not form an atom */
+	    EMSGN(_(e_misplaced), no_Magic(c));
+	    return FAIL;
+
+	case Magic('~'):
+	    {
+		char_u	    *lp;
+
+		/* Previous substitute pattern.
+		 * Generated as "\%(pattern\)". */
+		if (reg_prev_sub == NULL)
+		{
+		    EMSG(_(e_nopresub));
+		    return FAIL;
+		}
+		for (lp = reg_prev_sub; *lp != NUL; mb_cptr_adv(lp))
+		{
+		    EMIT(PTR2CHAR(lp));
+		    if (lp != reg_prev_sub)
+			EMIT(NFA_CONCAT);
+		}
+		EMIT(NFA_NOPEN);
+		break;
+	    }
+
+	case Magic('1'):
+	case Magic('2'):
+	case Magic('3'):
+	case Magic('4'):
+	case Magic('5'):
+	case Magic('6'):
+	case Magic('7'):
+	case Magic('8'):
+	case Magic('9'):
+	    EMIT(NFA_BACKREF1 + (no_Magic(c) - '1'));
+	    nfa_has_backref = TRUE;
+	    break;
+
+	case Magic('z'):
+	    c = no_Magic(getchr());
+	    switch (c)
+	    {
+		case 's':
+		    EMIT(NFA_ZSTART);
+		    break;
+		case 'e':
+		    EMIT(NFA_ZEND);
+		    nfa_has_zend = TRUE;
+		    break;
+#ifdef FEAT_SYN_HL
+		case '1':
+		case '2':
+		case '3':
+		case '4':
+		case '5':
+		case '6':
+		case '7':
+		case '8':
+		case '9':
+		    /* \z1...\z9 */
+		    if (reg_do_extmatch != REX_USE)
+			EMSG_RET_FAIL(_(e_z1_not_allowed));
+		    EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
+		    /* No need to set nfa_has_backref, the sub-matches don't
+		     * change when \z1 .. \z9 matches or not. */
+		    re_has_z = REX_USE;
+		    break;
+		case '(':
+		    /* \z(  */
+		    if (reg_do_extmatch != REX_SET)
+			EMSG_RET_FAIL(_(e_z_not_allowed));
+		    if (nfa_reg(REG_ZPAREN) == FAIL)
+			return FAIL;	    /* cascaded error */
+		    re_has_z = REX_SET;
+		    break;
+#endif
+		default:
+		    EMSGN(_("E867: (NFA) Unknown operator '\\z%c'"),
+								 no_Magic(c));
+		    return FAIL;
+	    }
+	    break;
+
+	case Magic('%'):
+	    c = no_Magic(getchr());
+	    switch (c)
+	    {
+		/* () without a back reference */
+		case '(':
+		    if (nfa_reg(REG_NPAREN) == FAIL)
+			return FAIL;
+		    EMIT(NFA_NOPEN);
+		    break;
+
+		case 'd':   /* %d123 decimal */
+		case 'o':   /* %o123 octal */
+		case 'x':   /* %xab hex 2 */
+		case 'u':   /* %uabcd hex 4 */
+		case 'U':   /* %U1234abcd hex 8 */
+		    {
+			int nr;
+
+			switch (c)
+			{
+			    case 'd': nr = getdecchrs(); break;
+			    case 'o': nr = getoctchrs(); break;
+			    case 'x': nr = gethexchrs(2); break;
+			    case 'u': nr = gethexchrs(4); break;
+			    case 'U': nr = gethexchrs(8); break;
+			    default:  nr = -1; break;
+			}
+
+			if (nr < 0)
+			    EMSG2_RET_FAIL(
+			       _("E678: Invalid character after %s%%[dxouU]"),
+				    reg_magic == MAGIC_ALL);
+			/* TODO: what if a composing character follows? */
+			EMIT(nr);
+		    }
+		    break;
+
+		/* Catch \%^ and \%$ regardless of where they appear in the
+		 * pattern -- regardless of whether or not it makes sense. */
+		case '^':
+		    EMIT(NFA_BOF);
+		    break;
+
+		case '$':
+		    EMIT(NFA_EOF);
+		    break;
+
+		case '#':
+		    EMIT(NFA_CURSOR);
+		    break;
+
+		case 'V':
+		    EMIT(NFA_VISUAL);
+		    break;
+
+		case '[':
+		    {
+			int	    n;
+
+			/* \%[abc] */
+			for (n = 0; (c = peekchr()) != ']'; ++n)
+			{
+			    if (c == NUL)
+				EMSG2_RET_FAIL(_(e_missing_sb),
+						      reg_magic == MAGIC_ALL);
+			    /* recursive call! */
+			    if (nfa_regatom() == FAIL)
+				return FAIL;
+			}
+			getchr();  /* get the ] */
+			if (n == 0)
+			    EMSG2_RET_FAIL(_(e_empty_sb),
+						      reg_magic == MAGIC_ALL);
+			EMIT(NFA_OPT_CHARS);
+			EMIT(n);
+			break;
+		    }
+
+		default:
+		    {
+			int	n = 0;
+			int	cmp = c;
+
+			if (c == '<' || c == '>')
+			    c = getchr();
+			while (VIM_ISDIGIT(c))
+			{
+			    n = n * 10 + (c - '0');
+			    c = getchr();
+			}
+			if (c == 'l' || c == 'c' || c == 'v')
+			{
+			    if (c == 'l')
+				/* \%{n}l  \%{n}<l  \%{n}>l  */
+				EMIT(cmp == '<' ? NFA_LNUM_LT :
+				     cmp == '>' ? NFA_LNUM_GT : NFA_LNUM);
+			    else if (c == 'c')
+				/* \%{n}c  \%{n}<c  \%{n}>c  */
+				EMIT(cmp == '<' ? NFA_COL_LT :
+				     cmp == '>' ? NFA_COL_GT : NFA_COL);
+			    else
+				/* \%{n}v  \%{n}<v  \%{n}>v  */
+				EMIT(cmp == '<' ? NFA_VCOL_LT :
+				     cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);
+			    EMIT(n);
+			    break;
+			}
+			else if (c == '\'' && n == 0)
+			{
+			    /* \%'m  \%<'m  \%>'m  */
+			    EMIT(cmp == '<' ? NFA_MARK_LT :
+				 cmp == '>' ? NFA_MARK_GT : NFA_MARK);
+			    EMIT(getchr());
+			    break;
+			}
+		    }
+		    EMSGN(_("E867: (NFA) Unknown operator '\\%%%c'"),
+								 no_Magic(c));
+		    return FAIL;
+	    }
+	    break;
+
+	case Magic('['):
+collection:
+	    /*
+	     * [abc]  uses NFA_START_COLL - NFA_END_COLL
+	     * [^abc] uses NFA_START_NEG_COLL - NFA_END_NEG_COLL
+	     * Each character is produced as a regular state, using
+	     * NFA_CONCAT to bind them together.
+	     * Besides normal characters there can be:
+	     * - character classes  NFA_CLASS_*
+	     * - ranges, two characters followed by NFA_RANGE.
+	     */
+
+	    p = regparse;
+	    endp = skip_anyof(p);
+	    if (*endp == ']')
+	    {
+		/*
+		 * Try to reverse engineer character classes. For example,
+		 * recognize that [0-9] stands for  \d and [A-Za-z_] with \h,
+		 * and perform the necessary substitutions in the NFA.
+		 */
+		result = nfa_recognize_char_class(regparse, endp,
+							    extra == ADD_NL);
+		if (result != FAIL)
+		{
+		    if (result >= NFA_DIGIT && result <= NFA_NUPPER)
+			EMIT(result);
+		    else	/* must be char class + newline */
+		    {
+			EMIT(result - ADD_NL);
+			EMIT(NFA_NEWL);
+			EMIT(NFA_OR);
+		    }
+		    regparse = endp;
+		    mb_ptr_adv(regparse);
+		    return OK;
+		}
+		/*
+		 * Failed to recognize a character class. Use the simple
+		 * version that turns [abc] into 'a' OR 'b' OR 'c'
+		 */
+		startc = endc = oldstartc = -1;
+		negated = FALSE;
+		if (*regparse == '^')			/* negated range */
+		{
+		    negated = TRUE;
+		    mb_ptr_adv(regparse);
+		    EMIT(NFA_START_NEG_COLL);
+		}
+		else
+		    EMIT(NFA_START_COLL);
+		if (*regparse == '-')
+		{
+		    startc = '-';
+		    EMIT(startc);
+		    EMIT(NFA_CONCAT);
+		    mb_ptr_adv(regparse);
+		}
+		/* Emit the OR branches for each character in the [] */
+		emit_range = FALSE;
+		while (regparse < endp)
+		{
+		    oldstartc = startc;
+		    startc = -1;
+		    got_coll_char = FALSE;
+		    if (*regparse == '[')
+		    {
+			/* Check for [: :], [= =], [. .] */
+			equiclass = collclass = 0;
+			charclass = get_char_class(&regparse);
+			if (charclass == CLASS_NONE)
+			{
+			    equiclass = get_equi_class(&regparse);
+			    if (equiclass == 0)
+				collclass = get_coll_element(&regparse);
+			}
+
+			/* Character class like [:alpha:]  */
+			if (charclass != CLASS_NONE)
+			{
+			    switch (charclass)
+			    {
+				case CLASS_ALNUM:
+				    EMIT(NFA_CLASS_ALNUM);
+				    break;
+				case CLASS_ALPHA:
+				    EMIT(NFA_CLASS_ALPHA);
+				    break;
+				case CLASS_BLANK:
+				    EMIT(NFA_CLASS_BLANK);
+				    break;
+				case CLASS_CNTRL:
+				    EMIT(NFA_CLASS_CNTRL);
+				    break;
+				case CLASS_DIGIT:
+				    EMIT(NFA_CLASS_DIGIT);
+				    break;
+				case CLASS_GRAPH:
+				    EMIT(NFA_CLASS_GRAPH);
+				    break;
+				case CLASS_LOWER:
+				    EMIT(NFA_CLASS_LOWER);
+				    break;
+				case CLASS_PRINT:
+				    EMIT(NFA_CLASS_PRINT);
+				    break;
+				case CLASS_PUNCT:
+				    EMIT(NFA_CLASS_PUNCT);
+				    break;
+				case CLASS_SPACE:
+				    EMIT(NFA_CLASS_SPACE);
+				    break;
+				case CLASS_UPPER:
+				    EMIT(NFA_CLASS_UPPER);
+				    break;
+				case CLASS_XDIGIT:
+				    EMIT(NFA_CLASS_XDIGIT);
+				    break;
+				case CLASS_TAB:
+				    EMIT(NFA_CLASS_TAB);
+				    break;
+				case CLASS_RETURN:
+				    EMIT(NFA_CLASS_RETURN);
+				    break;
+				case CLASS_BACKSPACE:
+				    EMIT(NFA_CLASS_BACKSPACE);
+				    break;
+				case CLASS_ESCAPE:
+				    EMIT(NFA_CLASS_ESCAPE);
+				    break;
+			    }
+			    EMIT(NFA_CONCAT);
+			    continue;
+			}
+			/* Try equivalence class [=a=] and the like */
+			if (equiclass != 0)
+			{
+			    result = nfa_emit_equi_class(equiclass);
+			    if (result == FAIL)
+			    {
+				/* should never happen */
+				EMSG_RET_FAIL(_("E868: Error building NFA with equivalence class!"));
+			    }
+			    continue;
+			}
+			/* Try collating class like [. .]  */
+			if (collclass != 0)
+			{
+			    startc = collclass;	 /* allow [.a.]-x as a range */
+			    /* Will emit the proper atom at the end of the
+			     * while loop. */
+			}
+		    }
+		    /* Try a range like 'a-x' or '\t-z'. Also allows '-' as a
+		     * start character. */
+		    if (*regparse == '-' && oldstartc != -1)
+		    {
+			emit_range = TRUE;
+			startc = oldstartc;
+			mb_ptr_adv(regparse);
+			continue;	    /* reading the end of the range */
+		    }
+
+		    /* Now handle simple and escaped characters.
+		     * Only "\]", "\^", "\]" and "\\" are special in Vi.  Vim
+		     * accepts "\t", "\e", etc., but only when the 'l' flag in
+		     * 'cpoptions' is not included.
+		     * Posix doesn't recognize backslash at all.
+		     */
+		    if (*regparse == '\\'
+			    && !reg_cpo_bsl
+			    && regparse + 1 <= endp
+			    && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
+				|| (!reg_cpo_lit
+				    && vim_strchr(REGEXP_ABBR, regparse[1])
+								      != NULL)
+			    )
+			)
+		    {
+			mb_ptr_adv(regparse);
+
+			if (*regparse == 'n')
+			    startc = reg_string ? NL : NFA_NEWL;
+			else
+			    if  (*regparse == 'd'
+				    || *regparse == 'o'
+				    || *regparse == 'x'
+				    || *regparse == 'u'
+				    || *regparse == 'U'
+				)
+			    {
+				/* TODO(RE) This needs more testing */
+				startc = coll_get_char();
+				got_coll_char = TRUE;
+				mb_ptr_back(old_regparse, regparse);
+			    }
+			    else
+			    {
+				/* \r,\t,\e,\b */
+				startc = backslash_trans(*regparse);
+			    }
+		    }
+
+		    /* Normal printable char */
+		    if (startc == -1)
+			startc = PTR2CHAR(regparse);
+
+		    /* Previous char was '-', so this char is end of range. */
+		    if (emit_range)
+		    {
+			endc = startc;
+			startc = oldstartc;
+			if (startc > endc)
+			    EMSG_RET_FAIL(_(e_invrange));
+
+			if (endc > startc + 2)
+			{
+			    /* Emit a range instead of the sequence of
+			     * individual characters. */
+			    if (startc == 0)
+				/* \x00 is translated to \x0a, start at \x01. */
+				EMIT(1);
+			    else
+				--post_ptr; /* remove NFA_CONCAT */
+			    EMIT(endc);
+			    EMIT(NFA_RANGE);
+			    EMIT(NFA_CONCAT);
+			}
+			else
+#ifdef FEAT_MBYTE
+			     if (has_mbyte && ((*mb_char2len)(startc) > 1
+				    || (*mb_char2len)(endc) > 1))
+			{
+			    /* Emit the characters in the range.
+			     * "startc" was already emitted, so skip it.
+			     * */
+			    for (c = startc + 1; c <= endc; c++)
+			    {
+				EMIT(c);
+				EMIT(NFA_CONCAT);
+			    }
+			}
+			else
+#endif
+			{
+#ifdef EBCDIC
+			    int alpha_only = FALSE;
+
+			    /* for alphabetical range skip the gaps
+			     * 'i'-'j', 'r'-'s', 'I'-'J' and 'R'-'S'. */
+			    if (isalpha(startc) && isalpha(endc))
+				alpha_only = TRUE;
+#endif
+			    /* Emit the range. "startc" was already emitted, so
+			     * skip it. */
+			    for (c = startc + 1; c <= endc; c++)
+#ifdef EBCDIC
+				if (!alpha_only || isalpha(startc))
+#endif
+				{
+				    EMIT(c);
+				    EMIT(NFA_CONCAT);
+				}
+			}
+			emit_range = FALSE;
+			startc = -1;
+		    }
+		    else
+		    {
+			/* This char (startc) is not part of a range. Just
+			 * emit it.
+			 * Normally, simply emit startc. But if we get char
+			 * code=0 from a collating char, then replace it with
+			 * 0x0a.
+			 * This is needed to completely mimic the behaviour of
+			 * the backtracking engine. */
+			if (startc == NFA_NEWL)
+			{
+			    /* Line break can't be matched as part of the
+			     * collection, add an OR below. But not for negated
+			     * range. */
+			    if (!negated)
+				extra = ADD_NL;
+			}
+			else
+			{
+			    if (got_coll_char == TRUE && startc == 0)
+				EMIT(0x0a);
+			    else
+				EMIT(startc);
+			    EMIT(NFA_CONCAT);
+			}
+		    }
+
+		    mb_ptr_adv(regparse);
+		} /* while (p < endp) */
+
+		mb_ptr_back(old_regparse, regparse);
+		if (*regparse == '-')	    /* if last, '-' is just a char */
+		{
+		    EMIT('-');
+		    EMIT(NFA_CONCAT);
+		}
+		mb_ptr_adv(regparse);
+
+		/* skip the trailing ] */
+		regparse = endp;
+		mb_ptr_adv(regparse);
+
+		/* Mark end of the collection. */
+		if (negated == TRUE)
+		    EMIT(NFA_END_NEG_COLL);
+		else
+		    EMIT(NFA_END_COLL);
+
+		/* \_[] also matches \n but it's not negated */
+		if (extra == ADD_NL)
+		{
+		    EMIT(reg_string ? NL : NFA_NEWL);
+		    EMIT(NFA_OR);
+		}
+
+		return OK;
+	    } /* if exists closing ] */
+
+	    if (reg_strict)
+		EMSG_RET_FAIL(_(e_missingbracket));
+	    /* FALLTHROUGH */
+
+	default:
+	    {
+#ifdef FEAT_MBYTE
+		int	plen;
+
+nfa_do_multibyte:
+		/* plen is length of current char with composing chars */
+		if (enc_utf8 && ((*mb_char2len)(c)
+			    != (plen = (*mb_ptr2len)(old_regparse))
+						       || utf_iscomposing(c)))
+		{
+		    int i = 0;
+
+		    /* A base character plus composing characters, or just one
+		     * or more composing characters.
+		     * This requires creating a separate atom as if enclosing
+		     * the characters in (), where NFA_COMPOSING is the ( and
+		     * NFA_END_COMPOSING is the ). Note that right now we are
+		     * building the postfix form, not the NFA itself;
+		     * a composing char could be: a, b, c, NFA_COMPOSING
+		     * where 'b' and 'c' are chars with codes > 256. */
+		    for (;;)
+		    {
+			EMIT(c);
+			if (i > 0)
+			    EMIT(NFA_CONCAT);
+			if ((i += utf_char2len(c)) >= plen)
+			    break;
+			c = utf_ptr2char(old_regparse + i);
+		    }
+		    EMIT(NFA_COMPOSING);
+		    regparse = old_regparse + plen;
+		}
+		else
+#endif
+		{
+		    c = no_Magic(c);
+		    EMIT(c);
+		}
+		return OK;
+	    }
+    }
+
+    return OK;
+}
+
+/*
+ * Parse something followed by possible [*+=].
+ *
+ * A piece is an atom, possibly followed by a multi, an indication of how many
+ * times the atom can be matched.  Example: "a*" matches any sequence of "a"
+ * characters: "", "a", "aa", etc.
+ *
+ * piece   ::=	    atom
+ *	or  atom  multi
+ */
+    static int
+nfa_regpiece()
+{
+    int		i;
+    int		op;
+    int		ret;
+    long	minval, maxval;
+    int		greedy = TRUE;      /* Braces are prefixed with '-' ? */
+    parse_state_T old_state;
+    parse_state_T new_state;
+    int		c2;
+    int		old_post_pos;
+    int		my_post_start;
+    int		quest;
+
+    /* Save the current parse state, so that we can use it if <atom>{m,n} is
+     * next. */
+    save_parse_state(&old_state);
+
+    /* store current pos in the postfix form, for \{m,n} involving 0s */
+    my_post_start = (int)(post_ptr - post_start);
+
+    ret = nfa_regatom();
+    if (ret == FAIL)
+	return FAIL;	    /* cascaded error */
+
+    op = peekchr();
+    if (re_multi_type(op) == NOT_MULTI)
+	return OK;
+
+    skipchr();
+    switch (op)
+    {
+	case Magic('*'):
+	    EMIT(NFA_STAR);
+	    break;
+
+	case Magic('+'):
+	    /*
+	     * Trick: Normally, (a*)\+ would match the whole input "aaa".  The
+	     * first and only submatch would be "aaa". But the backtracking
+	     * engine interprets the plus as "try matching one more time", and
+	     * a* matches a second time at the end of the input, the empty
+	     * string.
+	     * The submatch will the empty string.
+	     *
+	     * In order to be consistent with the old engine, we replace
+	     * <atom>+ with <atom><atom>*
+	     */
+	    restore_parse_state(&old_state);
+	    curchr = -1;
+	    if (nfa_regatom() == FAIL)
+		return FAIL;
+	    EMIT(NFA_STAR);
+	    EMIT(NFA_CONCAT);
+	    skipchr();		/* skip the \+	*/
+	    break;
+
+	case Magic('@'):
+	    c2 = getdecchrs();
+	    op = no_Magic(getchr());
+	    i = 0;
+	    switch(op)
+	    {
+		case '=':
+		    /* \@= */
+		    i = NFA_PREV_ATOM_NO_WIDTH;
+		    break;
+		case '!':
+		    /* \@! */
+		    i = NFA_PREV_ATOM_NO_WIDTH_NEG;
+		    break;
+		case '<':
+		    op = no_Magic(getchr());
+		    if (op == '=')
+			/* \@<= */
+			i = NFA_PREV_ATOM_JUST_BEFORE;
+		    else if (op == '!')
+			/* \@<! */
+			i = NFA_PREV_ATOM_JUST_BEFORE_NEG;
+		    break;
+		case '>':
+		    /* \@>  */
+		    i = NFA_PREV_ATOM_LIKE_PATTERN;
+		    break;
+	    }
+	    if (i == 0)
+	    {
+		EMSGN(_("E869: (NFA) Unknown operator '\\@%c'"), op);
+		return FAIL;
+	    }
+	    EMIT(i);
+	    if (i == NFA_PREV_ATOM_JUST_BEFORE
+					|| i == NFA_PREV_ATOM_JUST_BEFORE_NEG)
+		EMIT(c2);
+	    break;
+
+	case Magic('?'):
+	case Magic('='):
+	    EMIT(NFA_QUEST);
+	    break;
+
+	case Magic('{'):
+	    /* a{2,5} will expand to 'aaa?a?a?'
+	     * a{-1,3} will expand to 'aa??a??', where ?? is the nongreedy
+	     * version of '?'
+	     * \v(ab){2,3} will expand to '(ab)(ab)(ab)?', where all the
+	     * parenthesis have the same id
+	     */
+
+	    greedy = TRUE;
+	    c2 = peekchr();
+	    if (c2 == '-' || c2 == Magic('-'))
+	    {
+		skipchr();
+		greedy = FALSE;
+	    }
+	    if (!read_limits(&minval, &maxval))
+		EMSG_RET_FAIL(_("E870: (NFA regexp) Error reading repetition limits"));
+
+	    /*  <atom>{0,inf}, <atom>{0,} and <atom>{}  are equivalent to
+	     *  <atom>*  */
+	    if (minval == 0 && maxval == MAX_LIMIT)
+	    {
+		if (greedy)
+		    /* \{}, \{0,} */
+		    EMIT(NFA_STAR);
+		else
+		    /* \{-}, \{-0,} */
+		    EMIT(NFA_STAR_NONGREEDY);
+		break;
+	    }
+
+	    /* Special case: x{0} or x{-0} */
+	    if (maxval == 0)
+	    {
+		/* Ignore result of previous call to nfa_regatom() */
+		post_ptr = post_start + my_post_start;
+		/* NFA_SKIP_CHAR has 0-length and works everywhere */
+		EMIT(NFA_SKIP_CHAR);
+		return OK;
+	    }
+
+	    /* Ignore previous call to nfa_regatom() */
+	    post_ptr = post_start + my_post_start;
+	    /* Save parse state after the repeated atom and the \{} */
+	    save_parse_state(&new_state);
+
+	    quest = (greedy == TRUE? NFA_QUEST : NFA_QUEST_NONGREEDY);
+	    for (i = 0; i < maxval; i++)
+	    {
+		/* Goto beginning of the repeated atom */
+		restore_parse_state(&old_state);
+		old_post_pos = (int)(post_ptr - post_start);
+		if (nfa_regatom() == FAIL)
+		    return FAIL;
+		/* after "minval" times, atoms are optional */
+		if (i + 1 > minval)
+		{
+		    if (maxval == MAX_LIMIT)
+		    {
+			if (greedy)
+			    EMIT(NFA_STAR);
+			else
+			    EMIT(NFA_STAR_NONGREEDY);
+		    }
+		    else
+			EMIT(quest);
+		}
+		if (old_post_pos != my_post_start)
+		    EMIT(NFA_CONCAT);
+		if (i + 1 > minval && maxval == MAX_LIMIT)
+		    break;
+	    }
+
+	    /* Go to just after the repeated atom and the \{} */
+	    restore_parse_state(&new_state);
+	    curchr = -1;
+
+	    break;
+
+
+	default:
+	    break;
+    }	/* end switch */
+
+    if (re_multi_type(peekchr()) != NOT_MULTI)
+	/* Can't have a multi follow a multi. */
+	EMSG_RET_FAIL(_("E871: (NFA regexp) Can't have a multi follow a multi !"));
+
+    return OK;
+}
+
+/*
+ * Parse one or more pieces, concatenated.  It matches a match for the
+ * first piece, followed by a match for the second piece, etc.  Example:
+ * "f[0-9]b", first matches "f", then a digit and then "b".
+ *
+ * concat  ::=	    piece
+ *	or  piece piece
+ *	or  piece piece piece
+ *	etc.
+ */
+    static int
+nfa_regconcat()
+{
+    int		cont = TRUE;
+    int		first = TRUE;
+
+    while (cont)
+    {
+	switch (peekchr())
+	{
+	    case NUL:
+	    case Magic('|'):
+	    case Magic('&'):
+	    case Magic(')'):
+		cont = FALSE;
+		break;
+
+	    case Magic('Z'):
+#ifdef FEAT_MBYTE
+		regflags |= RF_ICOMBINE;
+#endif
+		skipchr_keepstart();
+		break;
+	    case Magic('c'):
+		regflags |= RF_ICASE;
+		skipchr_keepstart();
+		break;
+	    case Magic('C'):
+		regflags |= RF_NOICASE;
+		skipchr_keepstart();
+		break;
+	    case Magic('v'):
+		reg_magic = MAGIC_ALL;
+		skipchr_keepstart();
+		curchr = -1;
+		break;
+	    case Magic('m'):
+		reg_magic = MAGIC_ON;
+		skipchr_keepstart();
+		curchr = -1;
+		break;
+	    case Magic('M'):
+		reg_magic = MAGIC_OFF;
+		skipchr_keepstart();
+		curchr = -1;
+		break;
+	    case Magic('V'):
+		reg_magic = MAGIC_NONE;
+		skipchr_keepstart();
+		curchr = -1;
+		break;
+
+	    default:
+		if (nfa_regpiece() == FAIL)
+		    return FAIL;
+		if (first == FALSE)
+		    EMIT(NFA_CONCAT);
+		else
+		    first = FALSE;
+		break;
+	}
+    }
+
+    return OK;
+}
+
+/*
+ * Parse a branch, one or more concats, separated by "\&".  It matches the
+ * last concat, but only if all the preceding concats also match at the same
+ * position.  Examples:
+ *      "foobeep\&..." matches "foo" in "foobeep".
+ *      ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob"
+ *
+ * branch ::=	    concat
+ *		or  concat \& concat
+ *		or  concat \& concat \& concat
+ *		etc.
+ */
+    static int
+nfa_regbranch()
+{
+    int		ch;
+    int		old_post_pos;
+
+    old_post_pos = (int)(post_ptr - post_start);
+
+    /* First branch, possibly the only one */
+    if (nfa_regconcat() == FAIL)
+	return FAIL;
+
+    ch = peekchr();
+    /* Try next concats */
+    while (ch == Magic('&'))
+    {
+	skipchr();
+	EMIT(NFA_NOPEN);
+	EMIT(NFA_PREV_ATOM_NO_WIDTH);
+	old_post_pos = (int)(post_ptr - post_start);
+	if (nfa_regconcat() == FAIL)
+	    return FAIL;
+	/* if concat is empty, skip a input char. But do emit a node */
+	if (old_post_pos == (int)(post_ptr - post_start))
+	    EMIT(NFA_SKIP_CHAR);
+	EMIT(NFA_CONCAT);
+	ch = peekchr();
+    }
+
+    /* Even if a branch is empty, emit one node for it */
+    if (old_post_pos == (int)(post_ptr - post_start))
+	EMIT(NFA_SKIP_CHAR);
+
+    return OK;
+}
+
+/*
+ *  Parse a pattern, one or more branches, separated by "\|".  It matches
+ *  anything that matches one of the branches.  Example: "foo\|beep" matches
+ *  "foo" and matches "beep".  If more than one branch matches, the first one
+ *  is used.
+ *
+ *  pattern ::=	    branch
+ *	or  branch \| branch
+ *	or  branch \| branch \| branch
+ *	etc.
+ */
+    static int
+nfa_reg(paren)
+    int		paren;	/* REG_NOPAREN, REG_PAREN, REG_NPAREN or REG_ZPAREN */
+{
+    int		parno = 0;
+
+    if (paren == REG_PAREN)
+    {
+	if (regnpar >= NSUBEXP) /* Too many `(' */
+	    EMSG_RET_FAIL(_("E872: (NFA regexp) Too many '('"));
+	parno = regnpar++;
+    }
+#ifdef FEAT_SYN_HL
+    else if (paren == REG_ZPAREN)
+    {
+	/* Make a ZOPEN node. */
+	if (regnzpar >= NSUBEXP)
+	    EMSG_RET_FAIL(_("E879: (NFA regexp) Too many \\z("));
+	parno = regnzpar++;
+    }
+#endif
+
+    if (nfa_regbranch() == FAIL)
+	return FAIL;	    /* cascaded error */
+
+    while (peekchr() == Magic('|'))
+    {
+	skipchr();
+	if (nfa_regbranch() == FAIL)
+	    return FAIL;    /* cascaded error */
+	EMIT(NFA_OR);
+    }
+
+    /* Check for proper termination. */
+    if (paren != REG_NOPAREN && getchr() != Magic(')'))
+    {
+	if (paren == REG_NPAREN)
+	    EMSG2_RET_FAIL(_(e_unmatchedpp), reg_magic == MAGIC_ALL);
+	else
+	    EMSG2_RET_FAIL(_(e_unmatchedp), reg_magic == MAGIC_ALL);
+    }
+    else if (paren == REG_NOPAREN && peekchr() != NUL)
+    {
+	if (peekchr() == Magic(')'))
+	    EMSG2_RET_FAIL(_(e_unmatchedpar), reg_magic == MAGIC_ALL);
+	else
+	    EMSG_RET_FAIL(_("E873: (NFA regexp) proper termination error"));
+    }
+    /*
+     * Here we set the flag allowing back references to this set of
+     * parentheses.
+     */
+    if (paren == REG_PAREN)
+    {
+	had_endbrace[parno] = TRUE;     /* have seen the close paren */
+	EMIT(NFA_MOPEN + parno);
+    }
+#ifdef FEAT_SYN_HL
+    else if (paren == REG_ZPAREN)
+	EMIT(NFA_ZOPEN + parno);
+#endif
+
+    return OK;
+}
+
+#ifdef DEBUG
+static char_u code[50];
+
+    static void
+nfa_set_code(c)
+    int	    c;
+{
+    int	    addnl = FALSE;
+
+    if (c >= NFA_FIRST_NL && c <= NFA_LAST_NL)
+    {
+	addnl = TRUE;
+	c -= ADD_NL;
+    }
+
+    STRCPY(code, "");
+    switch (c)
+    {
+	case NFA_MATCH:	    STRCPY(code, "NFA_MATCH "); break;
+	case NFA_SPLIT:	    STRCPY(code, "NFA_SPLIT "); break;
+	case NFA_CONCAT:    STRCPY(code, "NFA_CONCAT "); break;
+	case NFA_NEWL:	    STRCPY(code, "NFA_NEWL "); break;
+	case NFA_ZSTART:    STRCPY(code, "NFA_ZSTART"); break;
+	case NFA_ZEND:	    STRCPY(code, "NFA_ZEND"); break;
+
+	case NFA_BACKREF1:  STRCPY(code, "NFA_BACKREF1"); break;
+	case NFA_BACKREF2:  STRCPY(code, "NFA_BACKREF2"); break;
+	case NFA_BACKREF3:  STRCPY(code, "NFA_BACKREF3"); break;
+	case NFA_BACKREF4:  STRCPY(code, "NFA_BACKREF4"); break;
+	case NFA_BACKREF5:  STRCPY(code, "NFA_BACKREF5"); break;
+	case NFA_BACKREF6:  STRCPY(code, "NFA_BACKREF6"); break;
+	case NFA_BACKREF7:  STRCPY(code, "NFA_BACKREF7"); break;
+	case NFA_BACKREF8:  STRCPY(code, "NFA_BACKREF8"); break;
+	case NFA_BACKREF9:  STRCPY(code, "NFA_BACKREF9"); break;
+#ifdef FEAT_SYN_HL
+	case NFA_ZREF1:	    STRCPY(code, "NFA_ZREF1"); break;
+	case NFA_ZREF2:	    STRCPY(code, "NFA_ZREF2"); break;
+	case NFA_ZREF3:	    STRCPY(code, "NFA_ZREF3"); break;
+	case NFA_ZREF4:	    STRCPY(code, "NFA_ZREF4"); break;
+	case NFA_ZREF5:	    STRCPY(code, "NFA_ZREF5"); break;
+	case NFA_ZREF6:	    STRCPY(code, "NFA_ZREF6"); break;
+	case NFA_ZREF7:	    STRCPY(code, "NFA_ZREF7"); break;
+	case NFA_ZREF8:	    STRCPY(code, "NFA_ZREF8"); break;
+	case NFA_ZREF9:	    STRCPY(code, "NFA_ZREF9"); break;
+#endif
+	case NFA_SKIP:	    STRCPY(code, "NFA_SKIP"); break;
+
+	case NFA_PREV_ATOM_NO_WIDTH:
+			    STRCPY(code, "NFA_PREV_ATOM_NO_WIDTH"); break;
+	case NFA_PREV_ATOM_NO_WIDTH_NEG:
+			    STRCPY(code, "NFA_PREV_ATOM_NO_WIDTH_NEG"); break;
+	case NFA_PREV_ATOM_JUST_BEFORE:
+			    STRCPY(code, "NFA_PREV_ATOM_JUST_BEFORE"); break;
+	case NFA_PREV_ATOM_JUST_BEFORE_NEG:
+			 STRCPY(code, "NFA_PREV_ATOM_JUST_BEFORE_NEG"); break;
+	case NFA_PREV_ATOM_LIKE_PATTERN:
+			    STRCPY(code, "NFA_PREV_ATOM_LIKE_PATTERN"); break;
+
+	case NFA_NOPEN:		    STRCPY(code, "NFA_NOPEN"); break;
+	case NFA_NCLOSE:	    STRCPY(code, "NFA_NCLOSE"); break;
+	case NFA_START_INVISIBLE:   STRCPY(code, "NFA_START_INVISIBLE"); break;
+	case NFA_START_INVISIBLE_FIRST:
+			     STRCPY(code, "NFA_START_INVISIBLE_FIRST"); break;
+	case NFA_START_INVISIBLE_NEG:
+			       STRCPY(code, "NFA_START_INVISIBLE_NEG"); break;
+	case NFA_START_INVISIBLE_NEG_FIRST:
+			 STRCPY(code, "NFA_START_INVISIBLE_NEG_FIRST"); break;
+	case NFA_START_INVISIBLE_BEFORE:
+			    STRCPY(code, "NFA_START_INVISIBLE_BEFORE"); break;
+	case NFA_START_INVISIBLE_BEFORE_FIRST:
+		      STRCPY(code, "NFA_START_INVISIBLE_BEFORE_FIRST"); break;
+	case NFA_START_INVISIBLE_BEFORE_NEG:
+			STRCPY(code, "NFA_START_INVISIBLE_BEFORE_NEG"); break;
+	case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
+		  STRCPY(code, "NFA_START_INVISIBLE_BEFORE_NEG_FIRST"); break;
+	case NFA_START_PATTERN:   STRCPY(code, "NFA_START_PATTERN"); break;
+	case NFA_END_INVISIBLE:	    STRCPY(code, "NFA_END_INVISIBLE"); break;
+	case NFA_END_INVISIBLE_NEG: STRCPY(code, "NFA_END_INVISIBLE_NEG"); break;
+	case NFA_END_PATTERN:	    STRCPY(code, "NFA_END_PATTERN"); break;
+
+	case NFA_COMPOSING:	    STRCPY(code, "NFA_COMPOSING"); break;
+	case NFA_END_COMPOSING:	    STRCPY(code, "NFA_END_COMPOSING"); break;
+	case NFA_OPT_CHARS:	    STRCPY(code, "NFA_OPT_CHARS"); break;
+
+	case NFA_MOPEN:
+	case NFA_MOPEN1:
+	case NFA_MOPEN2:
+	case NFA_MOPEN3:
+	case NFA_MOPEN4:
+	case NFA_MOPEN5:
+	case NFA_MOPEN6:
+	case NFA_MOPEN7:
+	case NFA_MOPEN8:
+	case NFA_MOPEN9:
+	    STRCPY(code, "NFA_MOPEN(x)");
+	    code[10] = c - NFA_MOPEN + '0';
+	    break;
+	case NFA_MCLOSE:
+	case NFA_MCLOSE1:
+	case NFA_MCLOSE2:
+	case NFA_MCLOSE3:
+	case NFA_MCLOSE4:
+	case NFA_MCLOSE5:
+	case NFA_MCLOSE6:
+	case NFA_MCLOSE7:
+	case NFA_MCLOSE8:
+	case NFA_MCLOSE9:
+	    STRCPY(code, "NFA_MCLOSE(x)");
+	    code[11] = c - NFA_MCLOSE + '0';
+	    break;
+#ifdef FEAT_SYN_HL
+	case NFA_ZOPEN:
+	case NFA_ZOPEN1:
+	case NFA_ZOPEN2:
+	case NFA_ZOPEN3:
+	case NFA_ZOPEN4:
+	case NFA_ZOPEN5:
+	case NFA_ZOPEN6:
+	case NFA_ZOPEN7:
+	case NFA_ZOPEN8:
+	case NFA_ZOPEN9:
+	    STRCPY(code, "NFA_ZOPEN(x)");
+	    code[10] = c - NFA_ZOPEN + '0';
+	    break;
+	case NFA_ZCLOSE:
+	case NFA_ZCLOSE1:
+	case NFA_ZCLOSE2:
+	case NFA_ZCLOSE3:
+	case NFA_ZCLOSE4:
+	case NFA_ZCLOSE5:
+	case NFA_ZCLOSE6:
+	case NFA_ZCLOSE7:
+	case NFA_ZCLOSE8:
+	case NFA_ZCLOSE9:
+	    STRCPY(code, "NFA_ZCLOSE(x)");
+	    code[11] = c - NFA_ZCLOSE + '0';
+	    break;
+#endif
+	case NFA_EOL:		STRCPY(code, "NFA_EOL "); break;
+	case NFA_BOL:		STRCPY(code, "NFA_BOL "); break;
+	case NFA_EOW:		STRCPY(code, "NFA_EOW "); break;
+	case NFA_BOW:		STRCPY(code, "NFA_BOW "); break;
+	case NFA_EOF:		STRCPY(code, "NFA_EOF "); break;
+	case NFA_BOF:		STRCPY(code, "NFA_BOF "); break;
+	case NFA_LNUM:		STRCPY(code, "NFA_LNUM "); break;
+	case NFA_LNUM_GT:	STRCPY(code, "NFA_LNUM_GT "); break;
+	case NFA_LNUM_LT:	STRCPY(code, "NFA_LNUM_LT "); break;
+	case NFA_COL:		STRCPY(code, "NFA_COL "); break;
+	case NFA_COL_GT:	STRCPY(code, "NFA_COL_GT "); break;
+	case NFA_COL_LT:	STRCPY(code, "NFA_COL_LT "); break;
+	case NFA_VCOL:		STRCPY(code, "NFA_VCOL "); break;
+	case NFA_VCOL_GT:	STRCPY(code, "NFA_VCOL_GT "); break;
+	case NFA_VCOL_LT:	STRCPY(code, "NFA_VCOL_LT "); break;
+	case NFA_MARK:		STRCPY(code, "NFA_MARK "); break;
+	case NFA_MARK_GT:	STRCPY(code, "NFA_MARK_GT "); break;
+	case NFA_MARK_LT:	STRCPY(code, "NFA_MARK_LT "); break;
+	case NFA_CURSOR:	STRCPY(code, "NFA_CURSOR "); break;
+	case NFA_VISUAL:	STRCPY(code, "NFA_VISUAL "); break;
+
+	case NFA_STAR:		STRCPY(code, "NFA_STAR "); break;
+	case NFA_STAR_NONGREEDY: STRCPY(code, "NFA_STAR_NONGREEDY "); break;
+	case NFA_QUEST:		STRCPY(code, "NFA_QUEST"); break;
+	case NFA_QUEST_NONGREEDY: STRCPY(code, "NFA_QUEST_NON_GREEDY"); break;
+	case NFA_SKIP_CHAR:	STRCPY(code, "NFA_SKIP_CHAR"); break;
+	case NFA_OR:		STRCPY(code, "NFA_OR"); break;
+
+	case NFA_START_COLL:	STRCPY(code, "NFA_START_COLL"); break;
+	case NFA_END_COLL:	STRCPY(code, "NFA_END_COLL"); break;
+	case NFA_START_NEG_COLL: STRCPY(code, "NFA_START_NEG_COLL"); break;
+	case NFA_END_NEG_COLL:	STRCPY(code, "NFA_END_NEG_COLL"); break;
+	case NFA_RANGE:		STRCPY(code, "NFA_RANGE"); break;
+	case NFA_RANGE_MIN:	STRCPY(code, "NFA_RANGE_MIN"); break;
+	case NFA_RANGE_MAX:	STRCPY(code, "NFA_RANGE_MAX"); break;
+
+	case NFA_CLASS_ALNUM:	STRCPY(code, "NFA_CLASS_ALNUM"); break;
+	case NFA_CLASS_ALPHA:	STRCPY(code, "NFA_CLASS_ALPHA"); break;
+	case NFA_CLASS_BLANK:	STRCPY(code, "NFA_CLASS_BLANK"); break;
+	case NFA_CLASS_CNTRL:	STRCPY(code, "NFA_CLASS_CNTRL"); break;
+	case NFA_CLASS_DIGIT:	STRCPY(code, "NFA_CLASS_DIGIT"); break;
+	case NFA_CLASS_GRAPH:	STRCPY(code, "NFA_CLASS_GRAPH"); break;
+	case NFA_CLASS_LOWER:	STRCPY(code, "NFA_CLASS_LOWER"); break;
+	case NFA_CLASS_PRINT:	STRCPY(code, "NFA_CLASS_PRINT"); break;
+	case NFA_CLASS_PUNCT:	STRCPY(code, "NFA_CLASS_PUNCT"); break;
+	case NFA_CLASS_SPACE:	STRCPY(code, "NFA_CLASS_SPACE"); break;
+	case NFA_CLASS_UPPER:	STRCPY(code, "NFA_CLASS_UPPER"); break;
+	case NFA_CLASS_XDIGIT:	STRCPY(code, "NFA_CLASS_XDIGIT"); break;
+	case NFA_CLASS_TAB:	STRCPY(code, "NFA_CLASS_TAB"); break;
+	case NFA_CLASS_RETURN:	STRCPY(code, "NFA_CLASS_RETURN"); break;
+	case NFA_CLASS_BACKSPACE:   STRCPY(code, "NFA_CLASS_BACKSPACE"); break;
+	case NFA_CLASS_ESCAPE:	STRCPY(code, "NFA_CLASS_ESCAPE"); break;
+
+	case NFA_ANY:	STRCPY(code, "NFA_ANY"); break;
+	case NFA_IDENT:	STRCPY(code, "NFA_IDENT"); break;
+	case NFA_SIDENT:STRCPY(code, "NFA_SIDENT"); break;
+	case NFA_KWORD:	STRCPY(code, "NFA_KWORD"); break;
+	case NFA_SKWORD:STRCPY(code, "NFA_SKWORD"); break;
+	case NFA_FNAME:	STRCPY(code, "NFA_FNAME"); break;
+	case NFA_SFNAME:STRCPY(code, "NFA_SFNAME"); break;
+	case NFA_PRINT:	STRCPY(code, "NFA_PRINT"); break;
+	case NFA_SPRINT:STRCPY(code, "NFA_SPRINT"); break;
+	case NFA_WHITE:	STRCPY(code, "NFA_WHITE"); break;
+	case NFA_NWHITE:STRCPY(code, "NFA_NWHITE"); break;
+	case NFA_DIGIT:	STRCPY(code, "NFA_DIGIT"); break;
+	case NFA_NDIGIT:STRCPY(code, "NFA_NDIGIT"); break;
+	case NFA_HEX:	STRCPY(code, "NFA_HEX"); break;
+	case NFA_NHEX:	STRCPY(code, "NFA_NHEX"); break;
+	case NFA_OCTAL:	STRCPY(code, "NFA_OCTAL"); break;
+	case NFA_NOCTAL:STRCPY(code, "NFA_NOCTAL"); break;
+	case NFA_WORD:	STRCPY(code, "NFA_WORD"); break;
+	case NFA_NWORD:	STRCPY(code, "NFA_NWORD"); break;
+	case NFA_HEAD:	STRCPY(code, "NFA_HEAD"); break;
+	case NFA_NHEAD:	STRCPY(code, "NFA_NHEAD"); break;
+	case NFA_ALPHA:	STRCPY(code, "NFA_ALPHA"); break;
+	case NFA_NALPHA:STRCPY(code, "NFA_NALPHA"); break;
+	case NFA_LOWER:	STRCPY(code, "NFA_LOWER"); break;
+	case NFA_NLOWER:STRCPY(code, "NFA_NLOWER"); break;
+	case NFA_UPPER:	STRCPY(code, "NFA_UPPER"); break;
+	case NFA_NUPPER:STRCPY(code, "NFA_NUPPER"); break;
+
+	default:
+	    STRCPY(code, "CHAR(x)");
+	    code[5] = c;
+    }
+
+    if (addnl == TRUE)
+	STRCAT(code, " + NEWLINE ");
+
+}
+
+#ifdef ENABLE_LOG
+static FILE *log_fd;
+
+/*
+ * Print the postfix notation of the current regexp.
+ */
+    static void
+nfa_postfix_dump(expr, retval)
+    char_u  *expr;
+    int	    retval;
+{
+    int *p;
+    FILE *f;
+
+    f = fopen(NFA_REGEXP_DUMP_LOG, "a");
+    if (f != NULL)
+    {
+	fprintf(f, "\n-------------------------\n");
+	if (retval == FAIL)
+	    fprintf(f, ">>> NFA engine failed ... \n");
+	else if (retval == OK)
+	    fprintf(f, ">>> NFA engine succeeded !\n");
+	fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr);
+	for (p = post_start; *p && p < post_end; p++)
+	{
+	    nfa_set_code(*p);
+	    fprintf(f, "%s, ", code);
+	}
+	fprintf(f, "\"\nPostfix notation (int): ");
+	for (p = post_start; *p && p < post_end; p++)
+		fprintf(f, "%d ", *p);
+	fprintf(f, "\n\n");
+	fclose(f);
+    }
+}
+
+/*
+ * Print the NFA starting with a root node "state".
+ */
+    static void
+nfa_print_state(debugf, state)
+    FILE *debugf;
+    nfa_state_T *state;
+{
+    garray_T indent;
+
+    ga_init2(&indent, 1, 64);
+    ga_append(&indent, '\0');
+    nfa_print_state2(debugf, state, &indent);
+    ga_clear(&indent);
+}
+
+    static void
+nfa_print_state2(debugf, state, indent)
+    FILE *debugf;
+    nfa_state_T *state;
+    garray_T *indent;
+{
+    char_u  *p;
+
+    if (state == NULL)
+	return;
+
+    fprintf(debugf, "(%2d)", abs(state->id));
+
+    /* Output indent */
+    p = (char_u *)indent->ga_data;
+    if (indent->ga_len >= 3)
+    {
+	int	last = indent->ga_len - 3;
+	char_u	save[2];
+
+	STRNCPY(save, &p[last], 2);
+	STRNCPY(&p[last], "+-", 2);
+	fprintf(debugf, " %s", p);
+	STRNCPY(&p[last], save, 2);
+    }
+    else
+	fprintf(debugf, " %s", p);
+
+    nfa_set_code(state->c);
+    fprintf(debugf, "%s (%d) (id=%d) val=%d\n",
+		 code,
+		 state->c,
+		 abs(state->id),
+		 state->val);
+    if (state->id < 0)
+	return;
+
+    state->id = abs(state->id) * -1;
+
+    /* grow indent for state->out */
+    indent->ga_len -= 1;
+    if (state->out1)
+	ga_concat(indent, (char_u *)"| ");
+    else
+	ga_concat(indent, (char_u *)"  ");
+    ga_append(indent, '\0');
+
+    nfa_print_state2(debugf, state->out, indent);
+
+    /* replace last part of indent for state->out1 */
+    indent->ga_len -= 3;
+    ga_concat(indent, (char_u *)"  ");
+    ga_append(indent, '\0');
+
+    nfa_print_state2(debugf, state->out1, indent);
+
+    /* shrink indent */
+    indent->ga_len -= 3;
+    ga_append(indent, '\0');
+}
+
+/*
+ * Print the NFA state machine.
+ */
+    static void
+nfa_dump(prog)
+    nfa_regprog_T *prog;
+{
+    FILE *debugf = fopen(NFA_REGEXP_DUMP_LOG, "a");
+
+    if (debugf != NULL)
+    {
+	nfa_print_state(debugf, prog->start);
+
+	if (prog->reganch)
+	    fprintf(debugf, "reganch: %d\n", prog->reganch);
+	if (prog->regstart != NUL)
+	    fprintf(debugf, "regstart: %c (decimal: %d)\n",
+					      prog->regstart, prog->regstart);
+	if (prog->match_text != NULL)
+	    fprintf(debugf, "match_text: \"%s\"\n", prog->match_text);
+
+	fclose(debugf);
+    }
+}
+#endif	    /* ENABLE_LOG */
+#endif	    /* DEBUG */
+
+/*
+ * Parse r.e. @expr and convert it into postfix form.
+ * Return the postfix string on success, NULL otherwise.
+ */
+    static int *
+re2post()
+{
+    if (nfa_reg(REG_NOPAREN) == FAIL)
+	return NULL;
+    EMIT(NFA_MOPEN);
+    return post_start;
+}
+
+/* NB. Some of the code below is inspired by Russ's. */
+
+/*
+ * Represents an NFA state plus zero or one or two arrows exiting.
+ * if c == MATCH, no arrows out; matching state.
+ * If c == SPLIT, unlabeled arrows to out and out1 (if != NULL).
+ * If c < 256, labeled arrow with character c to out.
+ */
+
+static nfa_state_T	*state_ptr; /* points to nfa_prog->state */
+
+/*
+ * Allocate and initialize nfa_state_T.
+ */
+    static nfa_state_T *
+alloc_state(c, out, out1)
+    int		c;
+    nfa_state_T	*out;
+    nfa_state_T	*out1;
+{
+    nfa_state_T *s;
+
+    if (istate >= nstate)
+	return NULL;
+
+    s = &state_ptr[istate++];
+
+    s->c    = c;
+    s->out  = out;
+    s->out1 = out1;
+    s->val  = 0;
+
+    s->id   = istate;
+    s->lastlist[0] = 0;
+    s->lastlist[1] = 0;
+
+    return s;
+}
+
+/*
+ * A partially built NFA without the matching state filled in.
+ * Frag_T.start points at the start state.
+ * Frag_T.out is a list of places that need to be set to the
+ * next state for this fragment.
+ */
+
+/* Since the out pointers in the list are always
+ * uninitialized, we use the pointers themselves
+ * as storage for the Ptrlists. */
+typedef union Ptrlist Ptrlist;
+union Ptrlist
+{
+    Ptrlist	*next;
+    nfa_state_T	*s;
+};
+
+struct Frag
+{
+    nfa_state_T *start;
+    Ptrlist	*out;
+};
+typedef struct Frag Frag_T;
+
+static Frag_T frag __ARGS((nfa_state_T *start, Ptrlist *out));
+static Ptrlist *list1 __ARGS((nfa_state_T **outp));
+static void patch __ARGS((Ptrlist *l, nfa_state_T *s));
+static Ptrlist *append __ARGS((Ptrlist *l1, Ptrlist *l2));
+static void st_push __ARGS((Frag_T s, Frag_T **p, Frag_T *stack_end));
+static Frag_T st_pop __ARGS((Frag_T **p, Frag_T *stack));
+
+/*
+ * Initialize a Frag_T struct and return it.
+ */
+    static Frag_T
+frag(start, out)
+    nfa_state_T	*start;
+    Ptrlist	*out;
+{
+    Frag_T n;
+
+    n.start = start;
+    n.out = out;
+    return n;
+}
+
+/*
+ * Create singleton list containing just outp.
+ */
+    static Ptrlist *
+list1(outp)
+    nfa_state_T	**outp;
+{
+    Ptrlist *l;
+
+    l = (Ptrlist *)outp;
+    l->next = NULL;
+    return l;
+}
+
+/*
+ * Patch the list of states at out to point to start.
+ */
+    static void
+patch(l, s)
+    Ptrlist	*l;
+    nfa_state_T	*s;
+{
+    Ptrlist *next;
+
+    for (; l; l = next)
+    {
+	next = l->next;
+	l->s = s;
+    }
+}
+
+
+/*
+ * Join the two lists l1 and l2, returning the combination.
+ */
+    static Ptrlist *
+append(l1, l2)
+    Ptrlist *l1;
+    Ptrlist *l2;
+{
+    Ptrlist *oldl1;
+
+    oldl1 = l1;
+    while (l1->next)
+	l1 = l1->next;
+    l1->next = l2;
+    return oldl1;
+}
+
+/*
+ * Stack used for transforming postfix form into NFA.
+ */
+static Frag_T empty;
+
+    static void
+st_error(postfix, end, p)
+    int *postfix UNUSED;
+    int *end UNUSED;
+    int *p UNUSED;
+{
+#ifdef NFA_REGEXP_ERROR_LOG
+    FILE *df;
+    int *p2;
+
+    df = fopen(NFA_REGEXP_ERROR_LOG, "a");
+    if (df)
+    {
+	fprintf(df, "Error popping the stack!\n");
+#ifdef DEBUG
+	fprintf(df, "Current regexp is \"%s\"\n", nfa_regengine.expr);
+#endif
+	fprintf(df, "Postfix form is: ");
+#ifdef DEBUG
+	for (p2 = postfix; p2 < end; p2++)
+	{
+	    nfa_set_code(*p2);
+	    fprintf(df, "%s, ", code);
+	}
+	nfa_set_code(*p);
+	fprintf(df, "\nCurrent position is: ");
+	for (p2 = postfix; p2 <= p; p2 ++)
+	{
+	    nfa_set_code(*p2);
+	    fprintf(df, "%s, ", code);
+	}
+#else
+	for (p2 = postfix; p2 < end; p2++)
+	{
+	    fprintf(df, "%d, ", *p2);
+	}
+	fprintf(df, "\nCurrent position is: ");
+	for (p2 = postfix; p2 <= p; p2 ++)
+	{
+	    fprintf(df, "%d, ", *p2);
+	}
+#endif
+	fprintf(df, "\n--------------------------\n");
+	fclose(df);
+    }
+#endif
+    EMSG(_("E874: (NFA) Could not pop the stack !"));
+}
+
+/*
+ * Push an item onto the stack.
+ */
+    static void
+st_push(s, p, stack_end)
+    Frag_T s;
+    Frag_T **p;
+    Frag_T *stack_end;
+{
+    Frag_T *stackp = *p;
+
+    if (stackp >= stack_end)
+	return;
+    *stackp = s;
+    *p = *p + 1;
+}
+
+/*
+ * Pop an item from the stack.
+ */
+    static Frag_T
+st_pop(p, stack)
+    Frag_T **p;
+    Frag_T *stack;
+{
+    Frag_T *stackp;
+
+    *p = *p - 1;
+    stackp = *p;
+    if (stackp < stack)
+	return empty;
+    return **p;
+}
+
+/*
+ * Estimate the maximum byte length of anything matching "state".
+ * When unknown or unlimited return -1.
+ */
+    static int
+nfa_max_width(startstate, depth)
+    nfa_state_T *startstate;
+    int		depth;
+{
+    int		    l, r;
+    nfa_state_T	    *state = startstate;
+    int		    len = 0;
+
+    /* detect looping in a NFA_SPLIT */
+    if (depth > 4)
+	return -1;
+
+    while (state != NULL)
+    {
+	switch (state->c)
+	{
+	    case NFA_END_INVISIBLE:
+	    case NFA_END_INVISIBLE_NEG:
+		/* the end, return what we have */
+		return len;
+
+	    case NFA_SPLIT:
+		/* two alternatives, use the maximum */
+		l = nfa_max_width(state->out, depth + 1);
+		r = nfa_max_width(state->out1, depth + 1);
+		if (l < 0 || r < 0)
+		    return -1;
+		return len + (l > r ? l : r);
+
+	    case NFA_ANY:
+	    case NFA_START_COLL:
+	    case NFA_START_NEG_COLL:
+		/* matches some character, including composing chars */
+#ifdef FEAT_MBYTE
+		if (enc_utf8)
+		    len += MB_MAXBYTES;
+		else if (has_mbyte)
+		    len += 2;
+		else
+#endif
+		    ++len;
+		if (state->c != NFA_ANY)
+		{
+		    /* skip over the characters */
+		    state = state->out1->out;
+		    continue;
+		}
+		break;
+
+	    case NFA_DIGIT:
+	    case NFA_WHITE:
+	    case NFA_HEX:
+	    case NFA_OCTAL:
+		/* ascii */
+		++len;
+		break;
+
+	    case NFA_IDENT:
+	    case NFA_SIDENT:
+	    case NFA_KWORD:
+	    case NFA_SKWORD:
+	    case NFA_FNAME:
+	    case NFA_SFNAME:
+	    case NFA_PRINT:
+	    case NFA_SPRINT:
+	    case NFA_NWHITE:
+	    case NFA_NDIGIT:
+	    case NFA_NHEX:
+	    case NFA_NOCTAL:
+	    case NFA_WORD:
+	    case NFA_NWORD:
+	    case NFA_HEAD:
+	    case NFA_NHEAD:
+	    case NFA_ALPHA:
+	    case NFA_NALPHA:
+	    case NFA_LOWER:
+	    case NFA_NLOWER:
+	    case NFA_UPPER:
+	    case NFA_NUPPER:
+		/* possibly non-ascii */
+#ifdef FEAT_MBYTE
+		if (has_mbyte)
+		    len += 3;
+		else
+#endif
+		    ++len;
+		break;
+
+	    case NFA_START_INVISIBLE:
+	    case NFA_START_INVISIBLE_NEG:
+	    case NFA_START_INVISIBLE_BEFORE:
+	    case NFA_START_INVISIBLE_BEFORE_NEG:
+		/* zero-width, out1 points to the END state */
+		state = state->out1->out;
+		continue;
+
+	    case NFA_BACKREF1:
+	    case NFA_BACKREF2:
+	    case NFA_BACKREF3:
+	    case NFA_BACKREF4:
+	    case NFA_BACKREF5:
+	    case NFA_BACKREF6:
+	    case NFA_BACKREF7:
+	    case NFA_BACKREF8:
+	    case NFA_BACKREF9:
+#ifdef FEAT_SYN_HL
+	    case NFA_ZREF1:
+	    case NFA_ZREF2:
+	    case NFA_ZREF3:
+	    case NFA_ZREF4:
+	    case NFA_ZREF5:
+	    case NFA_ZREF6:
+	    case NFA_ZREF7:
+	    case NFA_ZREF8:
+	    case NFA_ZREF9:
+#endif
+	    case NFA_NEWL:
+	    case NFA_SKIP:
+		/* unknown width */
+		return -1;
+
+	    case NFA_BOL:
+	    case NFA_EOL:
+	    case NFA_BOF:
+	    case NFA_EOF:
+	    case NFA_BOW:
+	    case NFA_EOW:
+	    case NFA_MOPEN:
+	    case NFA_MOPEN1:
+	    case NFA_MOPEN2:
+	    case NFA_MOPEN3:
+	    case NFA_MOPEN4:
+	    case NFA_MOPEN5:
+	    case NFA_MOPEN6:
+	    case NFA_MOPEN7:
+	    case NFA_MOPEN8:
+	    case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+	    case NFA_ZOPEN:
+	    case NFA_ZOPEN1:
+	    case NFA_ZOPEN2:
+	    case NFA_ZOPEN3:
+	    case NFA_ZOPEN4:
+	    case NFA_ZOPEN5:
+	    case NFA_ZOPEN6:
+	    case NFA_ZOPEN7:
+	    case NFA_ZOPEN8:
+	    case NFA_ZOPEN9:
+	    case NFA_ZCLOSE:
+	    case NFA_ZCLOSE1:
+	    case NFA_ZCLOSE2:
+	    case NFA_ZCLOSE3:
+	    case NFA_ZCLOSE4:
+	    case NFA_ZCLOSE5:
+	    case NFA_ZCLOSE6:
+	    case NFA_ZCLOSE7:
+	    case NFA_ZCLOSE8:
+	    case NFA_ZCLOSE9:
+#endif
+	    case NFA_MCLOSE:
+	    case NFA_MCLOSE1:
+	    case NFA_MCLOSE2:
+	    case NFA_MCLOSE3:
+	    case NFA_MCLOSE4:
+	    case NFA_MCLOSE5:
+	    case NFA_MCLOSE6:
+	    case NFA_MCLOSE7:
+	    case NFA_MCLOSE8:
+	    case NFA_MCLOSE9:
+	    case NFA_NOPEN:
+	    case NFA_NCLOSE:
+
+	    case NFA_LNUM_GT:
+	    case NFA_LNUM_LT:
+	    case NFA_COL_GT:
+	    case NFA_COL_LT:
+	    case NFA_VCOL_GT:
+	    case NFA_VCOL_LT:
+	    case NFA_MARK_GT:
+	    case NFA_MARK_LT:
+	    case NFA_VISUAL:
+	    case NFA_LNUM:
+	    case NFA_CURSOR:
+	    case NFA_COL:
+	    case NFA_VCOL:
+	    case NFA_MARK:
+
+	    case NFA_ZSTART:
+	    case NFA_ZEND:
+	    case NFA_OPT_CHARS:
+	    case NFA_SKIP_CHAR:
+	    case NFA_START_PATTERN:
+	    case NFA_END_PATTERN:
+	    case NFA_COMPOSING:
+	    case NFA_END_COMPOSING:
+		/* zero-width */
+		break;
+
+	    default:
+		if (state->c < 0)
+		    /* don't know what this is */
+		    return -1;
+		/* normal character */
+		len += MB_CHAR2LEN(state->c);
+		break;
+	}
+
+	/* normal way to continue */
+	state = state->out;
+    }
+
+    /* unrecognized, "cannot happen" */
+    return -1;
+}
+
+/*
+ * Convert a postfix form into its equivalent NFA.
+ * Return the NFA start state on success, NULL otherwise.
+ */
+    static nfa_state_T *
+post2nfa(postfix, end, nfa_calc_size)
+    int		*postfix;
+    int		*end;
+    int		nfa_calc_size;
+{
+    int		*p;
+    int		mopen;
+    int		mclose;
+    Frag_T	*stack = NULL;
+    Frag_T	*stackp = NULL;
+    Frag_T	*stack_end = NULL;
+    Frag_T	e1;
+    Frag_T	e2;
+    Frag_T	e;
+    nfa_state_T	*s;
+    nfa_state_T	*s1;
+    nfa_state_T	*matchstate;
+    nfa_state_T	*ret = NULL;
+
+    if (postfix == NULL)
+	return NULL;
+
+#define PUSH(s)	    st_push((s), &stackp, stack_end)
+#define POP()	    st_pop(&stackp, stack);		\
+		    if (stackp < stack)			\
+		    {					\
+			st_error(postfix, end, p);	\
+			return NULL;			\
+		    }
+
+    if (nfa_calc_size == FALSE)
+    {
+	/* Allocate space for the stack. Max states on the stack : nstate */
+	stack = (Frag_T *)lalloc((nstate + 1) * sizeof(Frag_T), TRUE);
+	stackp = stack;
+	stack_end = stack + (nstate + 1);
+    }
+
+    for (p = postfix; p < end; ++p)
+    {
+	switch (*p)
+	{
+	case NFA_CONCAT:
+	    /* Concatenation.
+	     * Pay attention: this operator does not exist in the r.e. itself
+	     * (it is implicit, really).  It is added when r.e. is translated
+	     * to postfix form in re2post(). */
+	    if (nfa_calc_size == TRUE)
+	    {
+		/* nstate += 0; */
+		break;
+	    }
+	    e2 = POP();
+	    e1 = POP();
+	    patch(e1.out, e2.start);
+	    PUSH(frag(e1.start, e2.out));
+	    break;
+
+	case NFA_OR:
+	    /* Alternation */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate++;
+		break;
+	    }
+	    e2 = POP();
+	    e1 = POP();
+	    s = alloc_state(NFA_SPLIT, e1.start, e2.start);
+	    if (s == NULL)
+		goto theend;
+	    PUSH(frag(s, append(e1.out, e2.out)));
+	    break;
+
+	case NFA_STAR:
+	    /* Zero or more, prefer more */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate++;
+		break;
+	    }
+	    e = POP();
+	    s = alloc_state(NFA_SPLIT, e.start, NULL);
+	    if (s == NULL)
+		goto theend;
+	    patch(e.out, s);
+	    PUSH(frag(s, list1(&s->out1)));
+	    break;
+
+	case NFA_STAR_NONGREEDY:
+	    /* Zero or more, prefer zero */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate++;
+		break;
+	    }
+	    e = POP();
+	    s = alloc_state(NFA_SPLIT, NULL, e.start);
+	    if (s == NULL)
+		goto theend;
+	    patch(e.out, s);
+	    PUSH(frag(s, list1(&s->out)));
+	    break;
+
+	case NFA_QUEST:
+	    /* one or zero atoms=> greedy match */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate++;
+		break;
+	    }
+	    e = POP();
+	    s = alloc_state(NFA_SPLIT, e.start, NULL);
+	    if (s == NULL)
+		goto theend;
+	    PUSH(frag(s, append(e.out, list1(&s->out1))));
+	    break;
+
+	case NFA_QUEST_NONGREEDY:
+	    /* zero or one atoms => non-greedy match */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate++;
+		break;
+	    }
+	    e = POP();
+	    s = alloc_state(NFA_SPLIT, NULL, e.start);
+	    if (s == NULL)
+		goto theend;
+	    PUSH(frag(s, append(e.out, list1(&s->out))));
+	    break;
+
+	case NFA_END_COLL:
+	case NFA_END_NEG_COLL:
+	    /* On the stack is the sequence starting with NFA_START_COLL or
+	     * NFA_START_NEG_COLL and all possible characters. Patch it to
+	     * add the output to the start. */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate++;
+		break;
+	    }
+	    e = POP();
+	    s = alloc_state(NFA_END_COLL, NULL, NULL);
+	    if (s == NULL)
+		goto theend;
+	    patch(e.out, s);
+	    e.start->out1 = s;
+	    PUSH(frag(e.start, list1(&s->out)));
+	    break;
+
+	case NFA_RANGE:
+	    /* Before this are two characters, the low and high end of a
+	     * range.  Turn them into two states with MIN and MAX. */
+	    if (nfa_calc_size == TRUE)
+	    {
+		/* nstate += 0; */
+		break;
+	    }
+	    e2 = POP();
+	    e1 = POP();
+	    e2.start->val = e2.start->c;
+	    e2.start->c = NFA_RANGE_MAX;
+	    e1.start->val = e1.start->c;
+	    e1.start->c = NFA_RANGE_MIN;
+	    patch(e1.out, e2.start);
+	    PUSH(frag(e1.start, e2.out));
+	    break;
+
+	case NFA_SKIP_CHAR:
+	    /* Symbol of 0-length, Used in a repetition
+	     * with max/min count of 0 */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate++;
+		break;
+	    }
+	    s = alloc_state(NFA_SKIP_CHAR, NULL, NULL);
+	    if (s == NULL)
+		goto theend;
+	    PUSH(frag(s, list1(&s->out)));
+	    break;
+
+	case NFA_OPT_CHARS:
+	  {
+	    int    n;
+
+	    /* \%[abc] */
+	    n = *++p; /* get number of characters */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate += n;
+		break;
+	    }
+	    s = NULL; /* avoid compiler warning */
+	    e1.out = NULL; /* stores list with out1's */
+	    s1 = NULL; /* previous NFA_SPLIT to connect to */
+	    while (n-- > 0)
+	    {
+		e = POP(); /* get character */
+		s = alloc_state(NFA_SPLIT, e.start, NULL);
+		if (s == NULL)
+		    goto theend;
+		if (e1.out == NULL)
+		    e1 = e;
+		patch(e.out, s1);
+		append(e1.out, list1(&s->out1));
+		s1 = s;
+	    }
+	    PUSH(frag(s, e1.out));
+	    break;
+	  }
+
+	case NFA_PREV_ATOM_NO_WIDTH:
+	case NFA_PREV_ATOM_NO_WIDTH_NEG:
+	case NFA_PREV_ATOM_JUST_BEFORE:
+	case NFA_PREV_ATOM_JUST_BEFORE_NEG:
+	case NFA_PREV_ATOM_LIKE_PATTERN:
+	  {
+	    int before = (*p == NFA_PREV_ATOM_JUST_BEFORE
+				      || *p == NFA_PREV_ATOM_JUST_BEFORE_NEG);
+	    int pattern = (*p == NFA_PREV_ATOM_LIKE_PATTERN);
+	    int start_state;
+	    int end_state;
+	    int n = 0;
+	    nfa_state_T *zend;
+	    nfa_state_T *skip;
+
+	    switch (*p)
+	    {
+		case NFA_PREV_ATOM_NO_WIDTH:
+		    start_state = NFA_START_INVISIBLE;
+		    end_state = NFA_END_INVISIBLE;
+		    break;
+		case NFA_PREV_ATOM_NO_WIDTH_NEG:
+		    start_state = NFA_START_INVISIBLE_NEG;
+		    end_state = NFA_END_INVISIBLE_NEG;
+		    break;
+		case NFA_PREV_ATOM_JUST_BEFORE:
+		    start_state = NFA_START_INVISIBLE_BEFORE;
+		    end_state = NFA_END_INVISIBLE;
+		    break;
+		case NFA_PREV_ATOM_JUST_BEFORE_NEG:
+		    start_state = NFA_START_INVISIBLE_BEFORE_NEG;
+		    end_state = NFA_END_INVISIBLE_NEG;
+		    break;
+		default: /* NFA_PREV_ATOM_LIKE_PATTERN: */
+		    start_state = NFA_START_PATTERN;
+		    end_state = NFA_END_PATTERN;
+		    break;
+	    }
+
+	    if (before)
+		n = *++p; /* get the count */
+
+	    /* The \@= operator: match the preceding atom with zero width.
+	     * The \@! operator: no match for the preceding atom.
+	     * The \@<= operator: match for the preceding atom.
+	     * The \@<! operator: no match for the preceding atom.
+	     * Surrounds the preceding atom with START_INVISIBLE and
+	     * END_INVISIBLE, similarly to MOPEN. */
+
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate += pattern ? 4 : 2;
+		break;
+	    }
+	    e = POP();
+	    s1 = alloc_state(end_state, NULL, NULL);
+	    if (s1 == NULL)
+		goto theend;
+
+	    s = alloc_state(start_state, e.start, s1);
+	    if (s == NULL)
+		goto theend;
+	    if (pattern)
+	    {
+		/* NFA_ZEND -> NFA_END_PATTERN -> NFA_SKIP -> what follows. */
+		skip = alloc_state(NFA_SKIP, NULL, NULL);
+		zend = alloc_state(NFA_ZEND, s1, NULL);
+		s1->out= skip;
+		patch(e.out, zend);
+		PUSH(frag(s, list1(&skip->out)));
+	    }
+	    else
+	    {
+		patch(e.out, s1);
+		PUSH(frag(s, list1(&s1->out)));
+		if (before)
+		{
+		    if (n <= 0)
+			/* See if we can guess the maximum width, it avoids a
+			 * lot of pointless tries. */
+			n = nfa_max_width(e.start, 0);
+		    s->val = n; /* store the count */
+		}
+	    }
+	    break;
+	  }
+
+#ifdef FEAT_MBYTE
+	case NFA_COMPOSING:	/* char with composing char */
+#if 0
+	    /* TODO */
+	    if (regflags & RF_ICOMBINE)
+	    {
+		/* use the base character only */
+	    }
+#endif
+	    /* FALLTHROUGH */
+#endif
+
+	case NFA_MOPEN:	/* \( \) Submatch */
+	case NFA_MOPEN1:
+	case NFA_MOPEN2:
+	case NFA_MOPEN3:
+	case NFA_MOPEN4:
+	case NFA_MOPEN5:
+	case NFA_MOPEN6:
+	case NFA_MOPEN7:
+	case NFA_MOPEN8:
+	case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+	case NFA_ZOPEN:	/* \z( \) Submatch */
+	case NFA_ZOPEN1:
+	case NFA_ZOPEN2:
+	case NFA_ZOPEN3:
+	case NFA_ZOPEN4:
+	case NFA_ZOPEN5:
+	case NFA_ZOPEN6:
+	case NFA_ZOPEN7:
+	case NFA_ZOPEN8:
+	case NFA_ZOPEN9:
+#endif
+	case NFA_NOPEN:	/* \%( \) "Invisible Submatch" */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate += 2;
+		break;
+	    }
+
+	    mopen = *p;
+	    switch (*p)
+	    {
+		case NFA_NOPEN: mclose = NFA_NCLOSE; break;
+#ifdef FEAT_SYN_HL
+		case NFA_ZOPEN: mclose = NFA_ZCLOSE; break;
+		case NFA_ZOPEN1: mclose = NFA_ZCLOSE1; break;
+		case NFA_ZOPEN2: mclose = NFA_ZCLOSE2; break;
+		case NFA_ZOPEN3: mclose = NFA_ZCLOSE3; break;
+		case NFA_ZOPEN4: mclose = NFA_ZCLOSE4; break;
+		case NFA_ZOPEN5: mclose = NFA_ZCLOSE5; break;
+		case NFA_ZOPEN6: mclose = NFA_ZCLOSE6; break;
+		case NFA_ZOPEN7: mclose = NFA_ZCLOSE7; break;
+		case NFA_ZOPEN8: mclose = NFA_ZCLOSE8; break;
+		case NFA_ZOPEN9: mclose = NFA_ZCLOSE9; break;
+#endif
+#ifdef FEAT_MBYTE
+		case NFA_COMPOSING: mclose = NFA_END_COMPOSING; break;
+#endif
+		default:
+		    /* NFA_MOPEN, NFA_MOPEN1 .. NFA_MOPEN9 */
+		    mclose = *p + NSUBEXP;
+		    break;
+	    }
+
+	    /* Allow "NFA_MOPEN" as a valid postfix representation for
+	     * the empty regexp "". In this case, the NFA will be
+	     * NFA_MOPEN -> NFA_MCLOSE. Note that this also allows
+	     * empty groups of parenthesis, and empty mbyte chars */
+	    if (stackp == stack)
+	    {
+		s = alloc_state(mopen, NULL, NULL);
+		if (s == NULL)
+		    goto theend;
+		s1 = alloc_state(mclose, NULL, NULL);
+		if (s1 == NULL)
+		    goto theend;
+		patch(list1(&s->out), s1);
+		PUSH(frag(s, list1(&s1->out)));
+		break;
+	    }
+
+	    /* At least one node was emitted before NFA_MOPEN, so
+	     * at least one node will be between NFA_MOPEN and NFA_MCLOSE */
+	    e = POP();
+	    s = alloc_state(mopen, e.start, NULL);   /* `(' */
+	    if (s == NULL)
+		goto theend;
+
+	    s1 = alloc_state(mclose, NULL, NULL);   /* `)' */
+	    if (s1 == NULL)
+		goto theend;
+	    patch(e.out, s1);
+
+#ifdef FEAT_MBYTE
+	    if (mopen == NFA_COMPOSING)
+		/* COMPOSING->out1 = END_COMPOSING */
+		patch(list1(&s->out1), s1);
+#endif
+
+	    PUSH(frag(s, list1(&s1->out)));
+	    break;
+
+	case NFA_BACKREF1:
+	case NFA_BACKREF2:
+	case NFA_BACKREF3:
+	case NFA_BACKREF4:
+	case NFA_BACKREF5:
+	case NFA_BACKREF6:
+	case NFA_BACKREF7:
+	case NFA_BACKREF8:
+	case NFA_BACKREF9:
+#ifdef FEAT_SYN_HL
+	case NFA_ZREF1:
+	case NFA_ZREF2:
+	case NFA_ZREF3:
+	case NFA_ZREF4:
+	case NFA_ZREF5:
+	case NFA_ZREF6:
+	case NFA_ZREF7:
+	case NFA_ZREF8:
+	case NFA_ZREF9:
+#endif
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate += 2;
+		break;
+	    }
+	    s = alloc_state(*p, NULL, NULL);
+	    if (s == NULL)
+		goto theend;
+	    s1 = alloc_state(NFA_SKIP, NULL, NULL);
+	    if (s1 == NULL)
+		goto theend;
+	    patch(list1(&s->out), s1);
+	    PUSH(frag(s, list1(&s1->out)));
+	    break;
+
+	case NFA_LNUM:
+	case NFA_LNUM_GT:
+	case NFA_LNUM_LT:
+	case NFA_VCOL:
+	case NFA_VCOL_GT:
+	case NFA_VCOL_LT:
+	case NFA_COL:
+	case NFA_COL_GT:
+	case NFA_COL_LT:
+	case NFA_MARK:
+	case NFA_MARK_GT:
+	case NFA_MARK_LT:
+	  {
+	    int n = *++p; /* lnum, col or mark name */
+
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate += 1;
+		break;
+	    }
+	    s = alloc_state(p[-1], NULL, NULL);
+	    if (s == NULL)
+		goto theend;
+	    s->val = n;
+	    PUSH(frag(s, list1(&s->out)));
+	    break;
+	  }
+
+	case NFA_ZSTART:
+	case NFA_ZEND:
+	default:
+	    /* Operands */
+	    if (nfa_calc_size == TRUE)
+	    {
+		nstate++;
+		break;
+	    }
+	    s = alloc_state(*p, NULL, NULL);
+	    if (s == NULL)
+		goto theend;
+	    PUSH(frag(s, list1(&s->out)));
+	    break;
+
+	} /* switch(*p) */
+
+    } /* for(p = postfix; *p; ++p) */
+
+    if (nfa_calc_size == TRUE)
+    {
+	nstate++;
+	goto theend;	/* Return value when counting size is ignored anyway */
+    }
+
+    e = POP();
+    if (stackp != stack)
+	EMSG_RET_NULL(_("E875: (NFA regexp) (While converting from postfix to NFA), too many states left on stack"));
+
+    if (istate >= nstate)
+	EMSG_RET_NULL(_("E876: (NFA regexp) Not enough space to store the whole NFA "));
+
+    matchstate = &state_ptr[istate++]; /* the match state */
+    matchstate->c = NFA_MATCH;
+    matchstate->out = matchstate->out1 = NULL;
+    matchstate->id = 0;
+
+    patch(e.out, matchstate);
+    ret = e.start;
+
+theend:
+    vim_free(stack);
+    return ret;
+
+#undef POP1
+#undef PUSH1
+#undef POP2
+#undef PUSH2
+#undef POP
+#undef PUSH
+}
+
+/*
+ * After building the NFA program, inspect it to add optimization hints.
+ */
+    static void
+nfa_postprocess(prog)
+    nfa_regprog_T   *prog;
+{
+    int i;
+    int c;
+
+    for (i = 0; i < prog->nstate; ++i)
+    {
+	c = prog->state[i].c;
+	if (c == NFA_START_INVISIBLE
+		|| c == NFA_START_INVISIBLE_NEG
+		|| c == NFA_START_INVISIBLE_BEFORE
+		|| c == NFA_START_INVISIBLE_BEFORE_NEG)
+	{
+	    int directly;
+
+	    /* Do it directly when what follows is possibly the end of the
+	     * match. */
+	    if (match_follows(prog->state[i].out1->out, 0))
+		directly = TRUE;
+	    else
+	    {
+		int ch_invisible = failure_chance(prog->state[i].out, 0);
+		int ch_follows = failure_chance(prog->state[i].out1->out, 0);
+
+		/* Postpone when the invisible match is expensive or has a
+		 * lower chance of failing. */
+		if (c == NFA_START_INVISIBLE_BEFORE
+		     || c == NFA_START_INVISIBLE_BEFORE_NEG)
+		{
+		    /* "before" matches are very expensive when
+		     * unbounded, always prefer what follows then,
+		     * unless what follows will always match.
+		     * Otherwise strongly prefer what follows. */
+		    if (prog->state[i].val <= 0 && ch_follows > 0)
+			directly = FALSE;
+		    else
+			directly = ch_follows * 10 < ch_invisible;
+		}
+		else
+		{
+		    /* normal invisible, first do the one with the
+		     * highest failure chance */
+		    directly = ch_follows < ch_invisible;
+		}
+	    }
+	    if (directly)
+		/* switch to the _FIRST state */
+		++prog->state[i].c;
+	}
+    }
+}
+
+/****************************************************************
+ * NFA execution code.
+ ****************************************************************/
+
+typedef struct
+{
+    int	    in_use; /* number of subexpr with useful info */
+
+    /* When REG_MULTI is TRUE list.multi is used, otherwise list.line. */
+    union
+    {
+	struct multipos
+	{
+	    lpos_T	start;
+	    lpos_T	end;
+	} multi[NSUBEXP];
+	struct linepos
+	{
+	    char_u	*start;
+	    char_u	*end;
+	} line[NSUBEXP];
+    } list;
+} regsub_T;
+
+typedef struct
+{
+    regsub_T	norm; /* \( .. \) matches */
+#ifdef FEAT_SYN_HL
+    regsub_T	synt; /* \z( .. \) matches */
+#endif
+} regsubs_T;
+
+/* nfa_pim_T stores a Postponed Invisible Match. */
+typedef struct nfa_pim_S nfa_pim_T;
+struct nfa_pim_S
+{
+    int		result;		/* NFA_PIM_*, see below */
+    nfa_state_T	*state;		/* the invisible match start state */
+    regsubs_T	subs;		/* submatch info, only party used */
+    union
+    {
+	lpos_T	pos;
+	char_u	*ptr;
+    } end;			/* where the match must end */
+};
+
+/* Values for done in nfa_pim_T. */
+#define NFA_PIM_UNUSED   0	/* pim not used */
+#define NFA_PIM_TODO     1	/* pim not done yet */
+#define NFA_PIM_MATCH    2	/* pim executed, matches */
+#define NFA_PIM_NOMATCH  3	/* pim executed, no match */
+
+
+/* nfa_thread_T contains execution information of a NFA state */
+typedef struct
+{
+    nfa_state_T	*state;
+    int		count;
+    nfa_pim_T	pim;		/* if pim.result != NFA_PIM_UNUSED: postponed
+				 * invisible match */
+    regsubs_T	subs;		/* submatch info, only party used */
+} nfa_thread_T;
+
+/* nfa_list_T contains the alternative NFA execution states. */
+typedef struct
+{
+    nfa_thread_T    *t;		/* allocated array of states */
+    int		    n;		/* nr of states currently in "t" */
+    int		    len;	/* max nr of states in "t" */
+    int		    id;		/* ID of the list */
+} nfa_list_T;
+
+#ifdef ENABLE_LOG
+static void log_subsexpr __ARGS((regsubs_T *subs));
+static void log_subexpr __ARGS((regsub_T *sub));
+static char *pim_info __ARGS((nfa_pim_T *pim));
+
+    static void
+log_subsexpr(subs)
+    regsubs_T *subs;
+{
+    log_subexpr(&subs->norm);
+# ifdef FEAT_SYN_HL
+    if (nfa_has_zsubexpr)
+	log_subexpr(&subs->synt);
+# endif
+}
+
+    static void
+log_subexpr(sub)
+    regsub_T *sub;
+{
+    int j;
+
+    for (j = 0; j < sub->in_use; j++)
+	if (REG_MULTI)
+	    fprintf(log_fd, "*** group %d, start: c=%d, l=%d, end: c=%d, l=%d\n",
+		    j,
+		    sub->list.multi[j].start.col,
+		    (int)sub->list.multi[j].start.lnum,
+		    sub->list.multi[j].end.col,
+		    (int)sub->list.multi[j].end.lnum);
+	else
+	{
+	    char *s = (char *)sub->list.line[j].start;
+	    char *e = (char *)sub->list.line[j].end;
+
+	    fprintf(log_fd, "*** group %d, start: \"%s\", end: \"%s\"\n",
+		    j,
+		    s == NULL ? "NULL" : s,
+		    e == NULL ? "NULL" : e);
+	}
+}
+
+    static char *
+pim_info(pim)
+    nfa_pim_T *pim;
+{
+    static char buf[30];
+
+    if (pim == NULL || pim->result == NFA_PIM_UNUSED)
+	buf[0] = NUL;
+    else
+    {
+	sprintf(buf, " PIM col %d", REG_MULTI ? (int)pim->end.pos.col
+		: (int)(pim->end.ptr - reginput));
+    }
+    return buf;
+}
+
+#endif
+
+/* Used during execution: whether a match has been found. */
+static int nfa_match;
+
+static void copy_pim __ARGS((nfa_pim_T *to, nfa_pim_T *from));
+static void clear_sub __ARGS((regsub_T *sub));
+static void copy_sub __ARGS((regsub_T *to, regsub_T *from));
+static void copy_sub_off __ARGS((regsub_T *to, regsub_T *from));
+static int sub_equal __ARGS((regsub_T *sub1, regsub_T *sub2));
+static int match_backref __ARGS((regsub_T *sub, int subidx, int *bytelen));
+static int has_state_with_pos __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs));
+static int state_in_list __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs));
+static regsubs_T *addstate __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs_arg, nfa_pim_T *pim, int off));
+static void addstate_here __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim, int *ip));
+
+/*
+ * Copy postponed invisible match info from "from" to "to".
+ */
+    static void
+copy_pim(to, from)
+    nfa_pim_T *to;
+    nfa_pim_T *from;
+{
+    to->result = from->result;
+    to->state = from->state;
+    copy_sub(&to->subs.norm, &from->subs.norm);
+#ifdef FEAT_SYN_HL
+    if (nfa_has_zsubexpr)
+	copy_sub(&to->subs.synt, &from->subs.synt);
+#endif
+    to->end = from->end;
+}
+
+    static void
+clear_sub(sub)
+    regsub_T *sub;
+{
+    if (REG_MULTI)
+	/* Use 0xff to set lnum to -1 */
+	vim_memset(sub->list.multi, 0xff,
+				      sizeof(struct multipos) * nfa_nsubexpr);
+    else
+	vim_memset(sub->list.line, 0, sizeof(struct linepos) * nfa_nsubexpr);
+    sub->in_use = 0;
+}
+
+/*
+ * Copy the submatches from "from" to "to".
+ */
+    static void
+copy_sub(to, from)
+    regsub_T	*to;
+    regsub_T	*from;
+{
+    to->in_use = from->in_use;
+    if (from->in_use > 0)
+    {
+	/* Copy the match start and end positions. */
+	if (REG_MULTI)
+	    mch_memmove(&to->list.multi[0],
+			&from->list.multi[0],
+			sizeof(struct multipos) * from->in_use);
+	else
+	    mch_memmove(&to->list.line[0],
+			&from->list.line[0],
+			sizeof(struct linepos) * from->in_use);
+    }
+}
+
+/*
+ * Like copy_sub() but exclude the main match.
+ */
+    static void
+copy_sub_off(to, from)
+    regsub_T	*to;
+    regsub_T	*from;
+{
+    if (to->in_use < from->in_use)
+	to->in_use = from->in_use;
+    if (from->in_use > 1)
+    {
+	/* Copy the match start and end positions. */
+	if (REG_MULTI)
+	    mch_memmove(&to->list.multi[1],
+			&from->list.multi[1],
+			sizeof(struct multipos) * (from->in_use - 1));
+	else
+	    mch_memmove(&to->list.line[1],
+			&from->list.line[1],
+			sizeof(struct linepos) * (from->in_use - 1));
+    }
+}
+
+/*
+ * Return TRUE if "sub1" and "sub2" have the same start positions.
+ */
+    static int
+sub_equal(sub1, sub2)
+    regsub_T	*sub1;
+    regsub_T	*sub2;
+{
+    int		i;
+    int		todo;
+    linenr_T	s1;
+    linenr_T	s2;
+    char_u	*sp1;
+    char_u	*sp2;
+
+    todo = sub1->in_use > sub2->in_use ? sub1->in_use : sub2->in_use;
+    if (REG_MULTI)
+    {
+	for (i = 0; i < todo; ++i)
+	{
+	    if (i < sub1->in_use)
+		s1 = sub1->list.multi[i].start.lnum;
+	    else
+		s1 = -1;
+	    if (i < sub2->in_use)
+		s2 = sub2->list.multi[i].start.lnum;
+	    else
+		s2 = -1;
+	    if (s1 != s2)
+		return FALSE;
+	    if (s1 != -1 && sub1->list.multi[i].start.col
+					     != sub2->list.multi[i].start.col)
+		return FALSE;
+	}
+    }
+    else
+    {
+	for (i = 0; i < todo; ++i)
+	{
+	    if (i < sub1->in_use)
+		sp1 = sub1->list.line[i].start;
+	    else
+		sp1 = NULL;
+	    if (i < sub2->in_use)
+		sp2 = sub2->list.line[i].start;
+	    else
+		sp2 = NULL;
+	    if (sp1 != sp2)
+		return FALSE;
+	}
+    }
+
+    return TRUE;
+}
+
+#ifdef ENABLE_LOG
+    static void
+report_state(char *action,
+	     regsub_T *sub,
+	     nfa_state_T *state,
+	     int lid,
+	     nfa_pim_T *pim)
+{
+    int col;
+
+    if (sub->in_use <= 0)
+	col = -1;
+    else if (REG_MULTI)
+	col = sub->list.multi[0].start.col;
+    else
+	col = (int)(sub->list.line[0].start - regline);
+    nfa_set_code(state->c);
+    fprintf(log_fd, "> %s state %d to list %d. char %d: %s (start col %d)%s\n",
+	    action, abs(state->id), lid, state->c, code, col,
+	    pim_info(pim));
+}
+#endif
+
+/*
+ * Return TRUE if the same state is already in list "l" with the same
+ * positions as "subs".
+ */
+    static int
+has_state_with_pos(l, state, subs)
+    nfa_list_T		*l;	/* runtime state list */
+    nfa_state_T		*state;	/* state to update */
+    regsubs_T		*subs;	/* pointers to subexpressions */
+{
+    nfa_thread_T	*thread;
+    int			i;
+
+    for (i = 0; i < l->n; ++i)
+    {
+	thread = &l->t[i];
+	if (thread->state->id == state->id
+		&& sub_equal(&thread->subs.norm, &subs->norm)
+#ifdef FEAT_SYN_HL
+		&& (!nfa_has_zsubexpr
+				|| sub_equal(&thread->subs.synt, &subs->synt))
+#endif
+			      )
+	    return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Return TRUE if "state" leads to a NFA_MATCH without advancing the input.
+ */
+    static int
+match_follows(startstate, depth)
+    nfa_state_T *startstate;
+    int		depth;
+{
+    nfa_state_T	    *state = startstate;
+
+    /* avoid too much recursion */
+    if (depth > 10)
+	return FALSE;
+
+    for (;;)
+    {
+	switch (state->c)
+	{
+	    case NFA_MATCH:
+	    case NFA_MCLOSE:
+	    case NFA_END_INVISIBLE:
+	    case NFA_END_INVISIBLE_NEG:
+	    case NFA_END_PATTERN:
+		return TRUE;
+
+	    case NFA_SPLIT:
+		return match_follows(state->out, depth + 1)
+				     || match_follows(state->out1, depth + 1);
+
+	    case NFA_START_INVISIBLE:
+	    case NFA_START_INVISIBLE_FIRST:
+	    case NFA_START_INVISIBLE_BEFORE:
+	    case NFA_START_INVISIBLE_BEFORE_FIRST:
+	    case NFA_START_INVISIBLE_NEG:
+	    case NFA_START_INVISIBLE_NEG_FIRST:
+	    case NFA_START_INVISIBLE_BEFORE_NEG:
+	    case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
+	    case NFA_COMPOSING:
+		/* skip ahead to next state */
+		state = state->out1->out;
+		break;
+
+	    case NFA_ANY:
+	    case NFA_IDENT:
+	    case NFA_SIDENT:
+	    case NFA_KWORD:
+	    case NFA_SKWORD:
+	    case NFA_FNAME:
+	    case NFA_SFNAME:
+	    case NFA_PRINT:
+	    case NFA_SPRINT:
+	    case NFA_WHITE:
+	    case NFA_NWHITE:
+	    case NFA_DIGIT:
+	    case NFA_NDIGIT:
+	    case NFA_HEX:
+	    case NFA_NHEX:
+	    case NFA_OCTAL:
+	    case NFA_NOCTAL:
+	    case NFA_WORD:
+	    case NFA_NWORD:
+	    case NFA_HEAD:
+	    case NFA_NHEAD:
+	    case NFA_ALPHA:
+	    case NFA_NALPHA:
+	    case NFA_LOWER:
+	    case NFA_NLOWER:
+	    case NFA_UPPER:
+	    case NFA_NUPPER:
+	    case NFA_START_COLL:
+	    case NFA_START_NEG_COLL:
+	    case NFA_NEWL:
+		/* state will advance input */
+		return FALSE;
+
+	    default:
+		if (state->c > 0)
+		    /* state will advance input */
+		    return FALSE;
+
+		/* Others: zero-width or possibly zero-width, might still find
+		 * a match at the same position, keep looking. */
+		break;
+	}
+	state = state->out;
+    }
+    return FALSE;
+}
+
+
+/*
+ * Return TRUE if "state" is already in list "l".
+ */
+    static int
+state_in_list(l, state, subs)
+    nfa_list_T		*l;	/* runtime state list */
+    nfa_state_T		*state;	/* state to update */
+    regsubs_T		*subs;	/* pointers to subexpressions */
+{
+    if (state->lastlist[nfa_ll_index] == l->id)
+    {
+	if (!nfa_has_backref || has_state_with_pos(l, state, subs))
+	    return TRUE;
+    }
+    return FALSE;
+}
+
+/*
+ * Add "state" and possibly what follows to state list ".".
+ * Returns "subs_arg", possibly copied into temp_subs.
+ */
+
+    static regsubs_T *
+addstate(l, state, subs_arg, pim, off)
+    nfa_list_T		*l;	    /* runtime state list */
+    nfa_state_T		*state;	    /* state to update */
+    regsubs_T		*subs_arg;  /* pointers to subexpressions */
+    nfa_pim_T		*pim;	    /* postponed look-behind match */
+    int			off;	    /* byte offset, when -1 go to next line */
+{
+    int			subidx;
+    nfa_thread_T	*thread;
+    lpos_T		save_lpos;
+    int			save_in_use;
+    char_u		*save_ptr;
+    int			i;
+    regsub_T		*sub;
+    regsubs_T		*subs = subs_arg;
+    static regsubs_T	temp_subs;
+#ifdef ENABLE_LOG
+    int			did_print = FALSE;
+#endif
+
+    switch (state->c)
+    {
+	case NFA_NCLOSE:
+	case NFA_MCLOSE:
+	case NFA_MCLOSE1:
+	case NFA_MCLOSE2:
+	case NFA_MCLOSE3:
+	case NFA_MCLOSE4:
+	case NFA_MCLOSE5:
+	case NFA_MCLOSE6:
+	case NFA_MCLOSE7:
+	case NFA_MCLOSE8:
+	case NFA_MCLOSE9:
+#ifdef FEAT_SYN_HL
+	case NFA_ZCLOSE:
+	case NFA_ZCLOSE1:
+	case NFA_ZCLOSE2:
+	case NFA_ZCLOSE3:
+	case NFA_ZCLOSE4:
+	case NFA_ZCLOSE5:
+	case NFA_ZCLOSE6:
+	case NFA_ZCLOSE7:
+	case NFA_ZCLOSE8:
+	case NFA_ZCLOSE9:
+#endif
+	case NFA_ZEND:
+	case NFA_SPLIT:
+	case NFA_NOPEN:
+	case NFA_SKIP_CHAR:
+	    /* These nodes are not added themselves but their "out" and/or
+	     * "out1" may be added below.  */
+	    break;
+
+	case NFA_MOPEN:
+	case NFA_MOPEN1:
+	case NFA_MOPEN2:
+	case NFA_MOPEN3:
+	case NFA_MOPEN4:
+	case NFA_MOPEN5:
+	case NFA_MOPEN6:
+	case NFA_MOPEN7:
+	case NFA_MOPEN8:
+	case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+	case NFA_ZOPEN:
+	case NFA_ZOPEN1:
+	case NFA_ZOPEN2:
+	case NFA_ZOPEN3:
+	case NFA_ZOPEN4:
+	case NFA_ZOPEN5:
+	case NFA_ZOPEN6:
+	case NFA_ZOPEN7:
+	case NFA_ZOPEN8:
+	case NFA_ZOPEN9:
+#endif
+	case NFA_ZSTART:
+	    /* These nodes do not need to be added, but we need to bail out
+	     * when it was tried to be added to this list before. */
+	    if (state->lastlist[nfa_ll_index] == l->id)
+		goto skip_add;
+	    state->lastlist[nfa_ll_index] = l->id;
+	    break;
+
+	case NFA_BOL:
+	case NFA_BOF:
+	    /* "^" won't match past end-of-line, don't bother trying.
+	     * Except when at the end of the line, or when we are going to the
+	     * next line for a look-behind match. */
+	    if (reginput > regline
+		    && *reginput != NUL
+		    && (nfa_endp == NULL
+			|| !REG_MULTI
+			|| reglnum == nfa_endp->se_u.pos.lnum))
+		goto skip_add;
+	    /* FALLTHROUGH */
+
+	default:
+	    if (state->lastlist[nfa_ll_index] == l->id)
+	    {
+		/* This state is already in the list, don't add it again,
+		 * unless it is an MOPEN that is used for a backreference or
+		 * when there is a PIM. */
+		if (!nfa_has_backref && pim == NULL)
+		{
+skip_add:
+#ifdef ENABLE_LOG
+		    nfa_set_code(state->c);
+		    fprintf(log_fd, "> Not adding state %d to list %d. char %d: %s\n",
+			    abs(state->id), l->id, state->c, code);
+#endif
+		    return subs;
+		}
+
+		/* Do not add the state again when it exists with the same
+		 * positions. */
+		if (has_state_with_pos(l, state, subs))
+		    goto skip_add;
+	    }
+
+	    /* When there are backreferences or PIMs the number of states may
+	     * be (a lot) bigger than anticipated. */
+	    if (l->n == l->len)
+	    {
+		int newlen = l->len * 3 / 2 + 50;
+
+		if (subs != &temp_subs)
+		{
+		    /* "subs" may point into the current array, need to make a
+		     * copy before it becomes invalid. */
+		    copy_sub(&temp_subs.norm, &subs->norm);
+#ifdef FEAT_SYN_HL
+		    if (nfa_has_zsubexpr)
+			copy_sub(&temp_subs.synt, &subs->synt);
+#endif
+		    subs = &temp_subs;
+		}
+
+		l->t = vim_realloc(l->t, newlen * sizeof(nfa_thread_T));
+		l->len = newlen;
+	    }
+
+	    /* add the state to the list */
+	    state->lastlist[nfa_ll_index] = l->id;
+	    thread = &l->t[l->n++];
+	    thread->state = state;
+	    if (pim == NULL)
+		thread->pim.result = NFA_PIM_UNUSED;
+	    else
+		copy_pim(&thread->pim, pim);
+	    copy_sub(&thread->subs.norm, &subs->norm);
+#ifdef FEAT_SYN_HL
+	    if (nfa_has_zsubexpr)
+		copy_sub(&thread->subs.synt, &subs->synt);
+#endif
+#ifdef ENABLE_LOG
+	    report_state("Adding", &thread->subs.norm, state, l->id, pim);
+	    did_print = TRUE;
+#endif
+    }
+
+#ifdef ENABLE_LOG
+    if (!did_print)
+	report_state("Processing", &subs->norm, state, l->id, pim);
+#endif
+    switch (state->c)
+    {
+	case NFA_MATCH:
+	    nfa_match = TRUE;
+	    break;
+
+	case NFA_SPLIT:
+	    /* order matters here */
+	    subs = addstate(l, state->out, subs, pim, off);
+	    subs = addstate(l, state->out1, subs, pim, off);
+	    break;
+
+	case NFA_SKIP_CHAR:
+	case NFA_NOPEN:
+	case NFA_NCLOSE:
+	    subs = addstate(l, state->out, subs, pim, off);
+	    break;
+
+	case NFA_MOPEN:
+	case NFA_MOPEN1:
+	case NFA_MOPEN2:
+	case NFA_MOPEN3:
+	case NFA_MOPEN4:
+	case NFA_MOPEN5:
+	case NFA_MOPEN6:
+	case NFA_MOPEN7:
+	case NFA_MOPEN8:
+	case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+	case NFA_ZOPEN:
+	case NFA_ZOPEN1:
+	case NFA_ZOPEN2:
+	case NFA_ZOPEN3:
+	case NFA_ZOPEN4:
+	case NFA_ZOPEN5:
+	case NFA_ZOPEN6:
+	case NFA_ZOPEN7:
+	case NFA_ZOPEN8:
+	case NFA_ZOPEN9:
+#endif
+	case NFA_ZSTART:
+	    if (state->c == NFA_ZSTART)
+	    {
+		subidx = 0;
+		sub = &subs->norm;
+	    }
+#ifdef FEAT_SYN_HL
+	    else if (state->c >= NFA_ZOPEN)
+	    {
+		subidx = state->c - NFA_ZOPEN;
+		sub = &subs->synt;
+	    }
+#endif
+	    else
+	    {
+		subidx = state->c - NFA_MOPEN;
+		sub = &subs->norm;
+	    }
+
+	    /* Set the position (with "off" added) in the subexpression.  Save
+	     * and restore it when it was in use.  Otherwise fill any gap. */
+	    save_ptr = NULL;
+	    if (REG_MULTI)
+	    {
+		if (subidx < sub->in_use)
+		{
+		    save_lpos = sub->list.multi[subidx].start;
+		    save_in_use = -1;
+		}
+		else
+		{
+		    save_in_use = sub->in_use;
+		    for (i = sub->in_use; i < subidx; ++i)
+		    {
+			sub->list.multi[i].start.lnum = -1;
+			sub->list.multi[i].end.lnum = -1;
+		    }
+		    sub->in_use = subidx + 1;
+		}
+		if (off == -1)
+		{
+		    sub->list.multi[subidx].start.lnum = reglnum + 1;
+		    sub->list.multi[subidx].start.col = 0;
+		}
+		else
+		{
+		    sub->list.multi[subidx].start.lnum = reglnum;
+		    sub->list.multi[subidx].start.col =
+					  (colnr_T)(reginput - regline + off);
+		}
+	    }
+	    else
+	    {
+		if (subidx < sub->in_use)
+		{
+		    save_ptr = sub->list.line[subidx].start;
+		    save_in_use = -1;
+		}
+		else
+		{
+		    save_in_use = sub->in_use;
+		    for (i = sub->in_use; i < subidx; ++i)
+		    {
+			sub->list.line[i].start = NULL;
+			sub->list.line[i].end = NULL;
+		    }
+		    sub->in_use = subidx + 1;
+		}
+		sub->list.line[subidx].start = reginput + off;
+	    }
+
+	    subs = addstate(l, state->out, subs, pim, off);
+
+	    if (save_in_use == -1)
+	    {
+		if (REG_MULTI)
+		    sub->list.multi[subidx].start = save_lpos;
+		else
+		    sub->list.line[subidx].start = save_ptr;
+	    }
+	    else
+		sub->in_use = save_in_use;
+	    break;
+
+	case NFA_MCLOSE:
+	    if (nfa_has_zend)
+	    {
+		/* Do not overwrite the position set by \ze. If no \ze
+		 * encountered end will be set in nfa_regtry(). */
+		subs = addstate(l, state->out, subs, pim, off);
+		break;
+	    }
+	case NFA_MCLOSE1:
+	case NFA_MCLOSE2:
+	case NFA_MCLOSE3:
+	case NFA_MCLOSE4:
+	case NFA_MCLOSE5:
+	case NFA_MCLOSE6:
+	case NFA_MCLOSE7:
+	case NFA_MCLOSE8:
+	case NFA_MCLOSE9:
+#ifdef FEAT_SYN_HL
+	case NFA_ZCLOSE:
+	case NFA_ZCLOSE1:
+	case NFA_ZCLOSE2:
+	case NFA_ZCLOSE3:
+	case NFA_ZCLOSE4:
+	case NFA_ZCLOSE5:
+	case NFA_ZCLOSE6:
+	case NFA_ZCLOSE7:
+	case NFA_ZCLOSE8:
+	case NFA_ZCLOSE9:
+#endif
+	case NFA_ZEND:
+	    if (state->c == NFA_ZEND)
+	    {
+		subidx = 0;
+		sub = &subs->norm;
+	    }
+#ifdef FEAT_SYN_HL
+	    else if (state->c >= NFA_ZCLOSE)
+	    {
+		subidx = state->c - NFA_ZCLOSE;
+		sub = &subs->synt;
+	    }
+#endif
+	    else
+	    {
+		subidx = state->c - NFA_MCLOSE;
+		sub = &subs->norm;
+	    }
+
+	    /* We don't fill in gaps here, there must have been an MOPEN that
+	     * has done that. */
+	    save_in_use = sub->in_use;
+	    if (sub->in_use <= subidx)
+		sub->in_use = subidx + 1;
+	    if (REG_MULTI)
+	    {
+		save_lpos = sub->list.multi[subidx].end;
+		if (off == -1)
+		{
+		    sub->list.multi[subidx].end.lnum = reglnum + 1;
+		    sub->list.multi[subidx].end.col = 0;
+		}
+		else
+		{
+		    sub->list.multi[subidx].end.lnum = reglnum;
+		    sub->list.multi[subidx].end.col =
+					  (colnr_T)(reginput - regline + off);
+		}
+	    }
+	    else
+	    {
+		save_ptr = sub->list.line[subidx].end;
+		sub->list.line[subidx].end = reginput + off;
+	    }
+
+	    subs = addstate(l, state->out, subs, pim, off);
+
+	    if (REG_MULTI)
+		sub->list.multi[subidx].end = save_lpos;
+	    else
+		sub->list.line[subidx].end = save_ptr;
+	    sub->in_use = save_in_use;
+	    break;
+    }
+    return subs;
+}
+
+/*
+ * Like addstate(), but the new state(s) are put at position "*ip".
+ * Used for zero-width matches, next state to use is the added one.
+ * This makes sure the order of states to be tried does not change, which
+ * matters for alternatives.
+ */
+    static void
+addstate_here(l, state, subs, pim, ip)
+    nfa_list_T		*l;	/* runtime state list */
+    nfa_state_T		*state;	/* state to update */
+    regsubs_T		*subs;	/* pointers to subexpressions */
+    nfa_pim_T		*pim;   /* postponed look-behind match */
+    int			*ip;
+{
+    int tlen = l->n;
+    int count;
+    int listidx = *ip;
+
+    /* first add the state(s) at the end, so that we know how many there are */
+    addstate(l, state, subs, pim, 0);
+
+    /* when "*ip" was at the end of the list, nothing to do */
+    if (listidx + 1 == tlen)
+	return;
+
+    /* re-order to put the new state at the current position */
+    count = l->n - tlen;
+    if (count == 0)
+	return; /* no state got added */
+    if (count == 1)
+    {
+	/* overwrite the current state */
+	l->t[listidx] = l->t[l->n - 1];
+    }
+    else if (count > 1)
+    {
+	if (l->n + count - 1 >= l->len)
+	{
+	    /* not enough space to move the new states, reallocate the list
+	     * and move the states to the right position */
+	    nfa_thread_T *newl;
+
+	    l->len = l->len * 3 / 2 + 50;
+	    newl = (nfa_thread_T *)alloc(l->len * sizeof(nfa_thread_T));
+	    if (newl == NULL)
+		return;
+	    mch_memmove(&(newl[0]),
+		    &(l->t[0]),
+		    sizeof(nfa_thread_T) * listidx);
+	    mch_memmove(&(newl[listidx]),
+		    &(l->t[l->n - count]),
+		    sizeof(nfa_thread_T) * count);
+	    mch_memmove(&(newl[listidx + count]),
+		    &(l->t[listidx + 1]),
+		    sizeof(nfa_thread_T) * (l->n - count - listidx - 1));
+	    vim_free(l->t);
+	    l->t = newl;
+	}
+	else
+	{
+	    /* make space for new states, then move them from the
+	     * end to the current position */
+	    mch_memmove(&(l->t[listidx + count]),
+		    &(l->t[listidx + 1]),
+		    sizeof(nfa_thread_T) * (l->n - listidx - 1));
+	    mch_memmove(&(l->t[listidx]),
+		    &(l->t[l->n - 1]),
+		    sizeof(nfa_thread_T) * count);
+	}
+    }
+    --l->n;
+    *ip = listidx - 1;
+}
+
+/*
+ * Check character class "class" against current character c.
+ */
+    static int
+check_char_class(class, c)
+    int		class;
+    int		c;
+{
+    switch (class)
+    {
+	case NFA_CLASS_ALNUM:
+	    if (c >= 1 && c <= 255 && isalnum(c))
+		return OK;
+	    break;
+	case NFA_CLASS_ALPHA:
+	    if (c >= 1 && c <= 255 && isalpha(c))
+		return OK;
+	    break;
+	case NFA_CLASS_BLANK:
+	    if (c == ' ' || c == '\t')
+		return OK;
+	    break;
+	case NFA_CLASS_CNTRL:
+	    if (c >= 1 && c <= 255 && iscntrl(c))
+		return OK;
+	    break;
+	case NFA_CLASS_DIGIT:
+	    if (VIM_ISDIGIT(c))
+		return OK;
+	    break;
+	case NFA_CLASS_GRAPH:
+	    if (c >= 1 && c <= 255 && isgraph(c))
+		return OK;
+	    break;
+	case NFA_CLASS_LOWER:
+	    if (MB_ISLOWER(c))
+		return OK;
+	    break;
+	case NFA_CLASS_PRINT:
+	    if (vim_isprintc(c))
+		return OK;
+	    break;
+	case NFA_CLASS_PUNCT:
+	    if (c >= 1 && c <= 255 && ispunct(c))
+		return OK;
+	    break;
+	case NFA_CLASS_SPACE:
+	    if ((c >= 9 && c <= 13) || (c == ' '))
+		return OK;
+	    break;
+	case NFA_CLASS_UPPER:
+	    if (MB_ISUPPER(c))
+		return OK;
+	    break;
+	case NFA_CLASS_XDIGIT:
+	    if (vim_isxdigit(c))
+		return OK;
+	    break;
+	case NFA_CLASS_TAB:
+	    if (c == '\t')
+		return OK;
+	    break;
+	case NFA_CLASS_RETURN:
+	    if (c == '\r')
+		return OK;
+	    break;
+	case NFA_CLASS_BACKSPACE:
+	    if (c == '\b')
+		return OK;
+	    break;
+	case NFA_CLASS_ESCAPE:
+	    if (c == '\033')
+		return OK;
+	    break;
+
+	default:
+	    /* should not be here :P */
+	    EMSGN("E877: (NFA regexp) Invalid character class: %ld", class);
+	    return FAIL;
+    }
+    return FAIL;
+}
+
+/*
+ * Check for a match with subexpression "subidx".
+ * Return TRUE if it matches.
+ */
+    static int
+match_backref(sub, subidx, bytelen)
+    regsub_T	*sub;	    /* pointers to subexpressions */
+    int		subidx;
+    int		*bytelen;   /* out: length of match in bytes */
+{
+    int		len;
+
+    if (sub->in_use <= subidx)
+    {
+retempty:
+	/* backref was not set, match an empty string */
+	*bytelen = 0;
+	return TRUE;
+    }
+
+    if (REG_MULTI)
+    {
+	if (sub->list.multi[subidx].start.lnum < 0
+				       || sub->list.multi[subidx].end.lnum < 0)
+	    goto retempty;
+	if (sub->list.multi[subidx].start.lnum == reglnum
+			       && sub->list.multi[subidx].end.lnum == reglnum)
+	{
+	    len = sub->list.multi[subidx].end.col
+					  - sub->list.multi[subidx].start.col;
+	    if (cstrncmp(regline + sub->list.multi[subidx].start.col,
+							 reginput, &len) == 0)
+	    {
+		*bytelen = len;
+		return TRUE;
+	    }
+	}
+	else
+	{
+	    if (match_with_backref(
+			sub->list.multi[subidx].start.lnum,
+			sub->list.multi[subidx].start.col,
+			sub->list.multi[subidx].end.lnum,
+			sub->list.multi[subidx].end.col,
+			bytelen) == RA_MATCH)
+		return TRUE;
+	}
+    }
+    else
+    {
+	if (sub->list.line[subidx].start == NULL
+					|| sub->list.line[subidx].end == NULL)
+	    goto retempty;
+	len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start);
+	if (cstrncmp(sub->list.line[subidx].start, reginput, &len) == 0)
+	{
+	    *bytelen = len;
+	    return TRUE;
+	}
+    }
+    return FALSE;
+}
+
+#ifdef FEAT_SYN_HL
+
+static int match_zref __ARGS((int subidx, int *bytelen));
+
+/*
+ * Check for a match with \z subexpression "subidx".
+ * Return TRUE if it matches.
+ */
+    static int
+match_zref(subidx, bytelen)
+    int		subidx;
+    int		*bytelen;   /* out: length of match in bytes */
+{
+    int		len;
+
+    cleanup_zsubexpr();
+    if (re_extmatch_in == NULL || re_extmatch_in->matches[subidx] == NULL)
+    {
+	/* backref was not set, match an empty string */
+	*bytelen = 0;
+	return TRUE;
+    }
+
+    len = (int)STRLEN(re_extmatch_in->matches[subidx]);
+    if (cstrncmp(re_extmatch_in->matches[subidx], reginput, &len) == 0)
+    {
+	*bytelen = len;
+	return TRUE;
+    }
+    return FALSE;
+}
+#endif
+
+/*
+ * Save list IDs for all NFA states of "prog" into "list".
+ * Also reset the IDs to zero.
+ * Only used for the recursive value lastlist[1].
+ */
+    static void
+nfa_save_listids(prog, list)
+    nfa_regprog_T   *prog;
+    int		    *list;
+{
+    int		    i;
+    nfa_state_T	    *p;
+
+    /* Order in the list is reverse, it's a bit faster that way. */
+    p = &prog->state[0];
+    for (i = prog->nstate; --i >= 0; )
+    {
+	list[i] = p->lastlist[1];
+	p->lastlist[1] = 0;
+	++p;
+    }
+}
+
+/*
+ * Restore list IDs from "list" to all NFA states.
+ */
+    static void
+nfa_restore_listids(prog, list)
+    nfa_regprog_T   *prog;
+    int		    *list;
+{
+    int		    i;
+    nfa_state_T	    *p;
+
+    p = &prog->state[0];
+    for (i = prog->nstate; --i >= 0; )
+    {
+	p->lastlist[1] = list[i];
+	++p;
+    }
+}
+
+    static int
+nfa_re_num_cmp(val, op, pos)
+    long_u	val;
+    int		op;
+    long_u	pos;
+{
+    if (op == 1) return pos > val;
+    if (op == 2) return pos < val;
+    return val == pos;
+}
+
+static int recursive_regmatch __ARGS((nfa_state_T *state, nfa_pim_T *pim, nfa_regprog_T *prog, regsubs_T *submatch, regsubs_T *m, int **listids));
+static int nfa_regmatch __ARGS((nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *submatch, regsubs_T *m));
+
+/*
+ * Recursively call nfa_regmatch()
+ * "pim" is NULL or contains info about a Postponed Invisible Match (start
+ * position).
+ */
+    static int
+recursive_regmatch(state, pim, prog, submatch, m, listids)
+    nfa_state_T	    *state;
+    nfa_pim_T	    *pim;
+    nfa_regprog_T   *prog;
+    regsubs_T	    *submatch;
+    regsubs_T	    *m;
+    int		    **listids;
+{
+    int		save_reginput_col = (int)(reginput - regline);
+    int		save_reglnum = reglnum;
+    int		save_nfa_match = nfa_match;
+    int		save_nfa_listid = nfa_listid;
+    save_se_T   *save_nfa_endp = nfa_endp;
+    save_se_T   endpos;
+    save_se_T   *endposp = NULL;
+    int		result;
+    int		need_restore = FALSE;
+
+    if (pim != NULL)
+    {
+	/* start at the position where the postponed match was */
+	if (REG_MULTI)
+	    reginput = regline + pim->end.pos.col;
+	else
+	    reginput = pim->end.ptr;
+    }
+
+    if (state->c == NFA_START_INVISIBLE_BEFORE
+        || state->c == NFA_START_INVISIBLE_BEFORE_FIRST
+        || state->c == NFA_START_INVISIBLE_BEFORE_NEG
+        || state->c == NFA_START_INVISIBLE_BEFORE_NEG_FIRST)
+    {
+	/* The recursive match must end at the current position. When "pim" is
+	 * not NULL it specifies the current position. */
+	endposp = &endpos;
+	if (REG_MULTI)
+	{
+	    if (pim == NULL)
+	    {
+		endpos.se_u.pos.col = (int)(reginput - regline);
+		endpos.se_u.pos.lnum = reglnum;
+	    }
+	    else
+		endpos.se_u.pos = pim->end.pos;
+	}
+	else
+	{
+	    if (pim == NULL)
+		endpos.se_u.ptr = reginput;
+	    else
+		endpos.se_u.ptr = pim->end.ptr;
+	}
+
+	/* Go back the specified number of bytes, or as far as the
+	 * start of the previous line, to try matching "\@<=" or
+	 * not matching "\@<!". This is very ineffecient, limit the number of
+	 * bytes if possible. */
+	if (state->val <= 0)
+	{
+	    if (REG_MULTI)
+	    {
+		regline = reg_getline(--reglnum);
+		if (regline == NULL)
+		    /* can't go before the first line */
+		    regline = reg_getline(++reglnum);
+	    }
+	    reginput = regline;
+	}
+	else
+	{
+	    if (REG_MULTI && (int)(reginput - regline) < state->val)
+	    {
+		/* Not enough bytes in this line, go to end of
+		 * previous line. */
+		regline = reg_getline(--reglnum);
+		if (regline == NULL)
+		{
+		    /* can't go before the first line */
+		    regline = reg_getline(++reglnum);
+		    reginput = regline;
+		}
+		else
+		    reginput = regline + STRLEN(regline);
+	    }
+	    if ((int)(reginput - regline) >= state->val)
+	    {
+		reginput -= state->val;
+#ifdef FEAT_MBYTE
+		if (has_mbyte)
+		    reginput -= mb_head_off(regline, reginput);
+#endif
+	    }
+	    else
+		reginput = regline;
+	}
+    }
+
+#ifdef ENABLE_LOG
+    if (log_fd != stderr)
+	fclose(log_fd);
+    log_fd = NULL;
+#endif
+    /* Have to clear the lastlist field of the NFA nodes, so that
+     * nfa_regmatch() and addstate() can run properly after recursion. */
+    if (nfa_ll_index == 1)
+    {
+	/* Already calling nfa_regmatch() recursively.  Save the lastlist[1]
+	 * values and clear them. */
+	if (*listids == NULL)
+	{
+	    *listids = (int *)lalloc(sizeof(int) * nstate, TRUE);
+	    if (*listids == NULL)
+	    {
+		EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!"));
+		return 0;
+	    }
+	}
+	nfa_save_listids(prog, *listids);
+	need_restore = TRUE;
+	/* any value of nfa_listid will do */
+    }
+    else
+    {
+	/* First recursive nfa_regmatch() call, switch to the second lastlist
+	 * entry.  Make sure nfa_listid is different from a previous recursive
+	 * call, because some states may still have this ID. */
+	++nfa_ll_index;
+	if (nfa_listid <= nfa_alt_listid)
+	    nfa_listid = nfa_alt_listid;
+    }
+
+    /* Call nfa_regmatch() to check if the current concat matches at this
+     * position. The concat ends with the node NFA_END_INVISIBLE */
+    nfa_endp = endposp;
+    result = nfa_regmatch(prog, state->out, submatch, m);
+
+    if (need_restore)
+	nfa_restore_listids(prog, *listids);
+    else
+    {
+	--nfa_ll_index;
+	nfa_alt_listid = nfa_listid;
+    }
+
+    /* restore position in input text */
+    reglnum = save_reglnum;
+    if (REG_MULTI)
+	regline = reg_getline(reglnum);
+    reginput = regline + save_reginput_col;
+    nfa_match = save_nfa_match;
+    nfa_endp = save_nfa_endp;
+    nfa_listid = save_nfa_listid;
+
+#ifdef ENABLE_LOG
+    log_fd = fopen(NFA_REGEXP_RUN_LOG, "a");
+    if (log_fd != NULL)
+    {
+	fprintf(log_fd, "****************************\n");
+	fprintf(log_fd, "FINISHED RUNNING nfa_regmatch() recursively\n");
+	fprintf(log_fd, "MATCH = %s\n", result == TRUE ? "OK" : "FALSE");
+	fprintf(log_fd, "****************************\n");
+    }
+    else
+    {
+	EMSG(_("Could not open temporary log file for writing, displaying on stderr ... "));
+	log_fd = stderr;
+    }
+#endif
+
+    return result;
+}
+
+static int skip_to_start __ARGS((int c, colnr_T *colp));
+static long find_match_text __ARGS((colnr_T startcol, int regstart, char_u *match_text));
+
+/*
+ * Estimate the chance of a match with "state" failing.
+ * empty match: 0
+ * NFA_ANY: 1
+ * specific character: 99
+ */
+    static int
+failure_chance(state, depth)
+    nfa_state_T *state;
+    int		depth;
+{
+    int c = state->c;
+    int l, r;
+
+    /* detect looping */
+    if (depth > 4)
+	return 1;
+
+    switch (c)
+    {
+	case NFA_SPLIT:
+	    if (state->out->c == NFA_SPLIT || state->out1->c == NFA_SPLIT)
+		/* avoid recursive stuff */
+		return 1;
+	    /* two alternatives, use the lowest failure chance */
+	    l = failure_chance(state->out, depth + 1);
+	    r = failure_chance(state->out1, depth + 1);
+	    return l < r ? l : r;
+
+	case NFA_ANY:
+	    /* matches anything, unlikely to fail */
+	    return 1;
+
+	case NFA_MATCH:
+	case NFA_MCLOSE:
+	    /* empty match works always */
+	    return 0;
+
+	case NFA_START_INVISIBLE:
+	case NFA_START_INVISIBLE_FIRST:
+	case NFA_START_INVISIBLE_NEG:
+	case NFA_START_INVISIBLE_NEG_FIRST:
+	case NFA_START_INVISIBLE_BEFORE:
+	case NFA_START_INVISIBLE_BEFORE_FIRST:
+	case NFA_START_INVISIBLE_BEFORE_NEG:
+	case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
+	case NFA_START_PATTERN:
+	    /* recursive regmatch is expensive, use low failure chance */
+	    return 5;
+
+	case NFA_BOL:
+	case NFA_EOL:
+	case NFA_BOF:
+	case NFA_EOF:
+	case NFA_NEWL:
+	    return 99;
+
+	case NFA_BOW:
+	case NFA_EOW:
+	    return 90;
+
+	case NFA_MOPEN:
+	case NFA_MOPEN1:
+	case NFA_MOPEN2:
+	case NFA_MOPEN3:
+	case NFA_MOPEN4:
+	case NFA_MOPEN5:
+	case NFA_MOPEN6:
+	case NFA_MOPEN7:
+	case NFA_MOPEN8:
+	case NFA_MOPEN9:
+#ifdef FEAT_SYN_HL
+	case NFA_ZOPEN:
+	case NFA_ZOPEN1:
+	case NFA_ZOPEN2:
+	case NFA_ZOPEN3:
+	case NFA_ZOPEN4:
+	case NFA_ZOPEN5:
+	case NFA_ZOPEN6:
+	case NFA_ZOPEN7:
+	case NFA_ZOPEN8:
+	case NFA_ZOPEN9:
+	case NFA_ZCLOSE:
+	case NFA_ZCLOSE1:
+	case NFA_ZCLOSE2:
+	case NFA_ZCLOSE3:
+	case NFA_ZCLOSE4:
+	case NFA_ZCLOSE5:
+	case NFA_ZCLOSE6:
+	case NFA_ZCLOSE7:
+	case NFA_ZCLOSE8:
+	case NFA_ZCLOSE9:
+#endif
+	case NFA_NOPEN:
+	case NFA_MCLOSE1:
+	case NFA_MCLOSE2:
+	case NFA_MCLOSE3:
+	case NFA_MCLOSE4:
+	case NFA_MCLOSE5:
+	case NFA_MCLOSE6:
+	case NFA_MCLOSE7:
+	case NFA_MCLOSE8:
+	case NFA_MCLOSE9:
+	case NFA_NCLOSE:
+	    return failure_chance(state->out, depth + 1);
+
+	case NFA_BACKREF1:
+	case NFA_BACKREF2:
+	case NFA_BACKREF3:
+	case NFA_BACKREF4:
+	case NFA_BACKREF5:
+	case NFA_BACKREF6:
+	case NFA_BACKREF7:
+	case NFA_BACKREF8:
+	case NFA_BACKREF9:
+#ifdef FEAT_SYN_HL
+	case NFA_ZREF1:
+	case NFA_ZREF2:
+	case NFA_ZREF3:
+	case NFA_ZREF4:
+	case NFA_ZREF5:
+	case NFA_ZREF6:
+	case NFA_ZREF7:
+	case NFA_ZREF8:
+	case NFA_ZREF9:
+#endif
+	    /* backreferences don't match in many places */
+	    return 94;
+
+	case NFA_LNUM_GT:
+	case NFA_LNUM_LT:
+	case NFA_COL_GT:
+	case NFA_COL_LT:
+	case NFA_VCOL_GT:
+	case NFA_VCOL_LT:
+	case NFA_MARK_GT:
+	case NFA_MARK_LT:
+	case NFA_VISUAL:
+	    /* before/after positions don't match very often */
+	    return 85;
+
+	case NFA_LNUM:
+	    return 90;
+
+	case NFA_CURSOR:
+	case NFA_COL:
+	case NFA_VCOL:
+	case NFA_MARK:
+	    /* specific positions rarely match */
+	    return 98;
+
+	case NFA_COMPOSING:
+	    return 95;
+
+	default:
+	    if (c > 0)
+		/* character match fails often */
+		return 95;
+    }
+
+    /* something else, includes character classes */
+    return 50;
+}
+
+/*
+ * Skip until the char "c" we know a match must start with.
+ */
+    static int
+skip_to_start(c, colp)
+    int		c;
+    colnr_T	*colp;
+{
+    char_u *s;
+
+    /* Used often, do some work to avoid call overhead. */
+    if (!ireg_ic
+#ifdef FEAT_MBYTE
+		&& !has_mbyte
+#endif
+		)
+	s = vim_strbyte(regline + *colp, c);
+    else
+	s = cstrchr(regline + *colp, c);
+    if (s == NULL)
+	return FAIL;
+    *colp = (int)(s - regline);
+    return OK;
+}
+
+/*
+ * Check for a match with match_text.
+ * Called after skip_to_start() has found regstart.
+ * Returns zero for no match, 1 for a match.
+ */
+    static long
+find_match_text(startcol, regstart, match_text)
+    colnr_T startcol;
+    int	    regstart;
+    char_u  *match_text;
+{
+    colnr_T col = startcol;
+    int	    c1, c2;
+    int	    len1, len2;
+    int	    match;
+
+    for (;;)
+    {
+	match = TRUE;
+	len2 = MB_CHAR2LEN(regstart); /* skip regstart */
+	for (len1 = 0; match_text[len1] != NUL; len1 += MB_CHAR2LEN(c1))
+	{
+	    c1 = PTR2CHAR(match_text + len1);
+	    c2 = PTR2CHAR(regline + col + len2);
+	    if (c1 != c2 && (!ireg_ic || MB_TOLOWER(c1) != MB_TOLOWER(c2)))
+	    {
+		match = FALSE;
+		break;
+	    }
+	    len2 += MB_CHAR2LEN(c2);
+	}
+	if (match
+#ifdef FEAT_MBYTE
+		/* check that no composing char follows */
+		&& !(enc_utf8
+			   && utf_iscomposing(PTR2CHAR(regline + col + len2)))
+#endif
+		)
+	{
+	    cleanup_subexpr();
+	    if (REG_MULTI)
+	    {
+		reg_startpos[0].lnum = reglnum;
+		reg_startpos[0].col = col;
+		reg_endpos[0].lnum = reglnum;
+		reg_endpos[0].col = col + len2;
+	    }
+	    else
+	    {
+		reg_startp[0] = regline + col;
+		reg_endp[0] = regline + col + len2;
+	    }
+	    return 1L;
+	}
+
+	/* Try finding regstart after the current match. */
+	col += MB_CHAR2LEN(regstart); /* skip regstart */
+	if (skip_to_start(regstart, &col) == FAIL)
+	    break;
+    }
+    return 0L;
+}
+
+/*
+ * Main matching routine.
+ *
+ * Run NFA to determine whether it matches reginput.
+ *
+ * When "nfa_endp" is not NULL it is a required end-of-match position.
+ *
+ * Return TRUE if there is a match, FALSE otherwise.
+ * Note: Caller must ensure that: start != NULL.
+ */
+    static int
+nfa_regmatch(prog, start, submatch, m)
+    nfa_regprog_T	*prog;
+    nfa_state_T		*start;
+    regsubs_T		*submatch;
+    regsubs_T		*m;
+{
+    int		result;
+    int		size = 0;
+    int		flag = 0;
+    int		go_to_nextline = FALSE;
+    nfa_thread_T *t;
+    nfa_list_T	list[2];
+    int		listidx;
+    nfa_list_T	*thislist;
+    nfa_list_T	*nextlist;
+    int		*listids = NULL;
+    nfa_state_T *add_state;
+    int		add_here;
+    int		add_count;
+    int		add_off = 0;
+    int		toplevel = start->c == NFA_MOPEN;
+#ifdef NFA_REGEXP_DEBUG_LOG
+    FILE	*debug = fopen(NFA_REGEXP_DEBUG_LOG, "a");
+
+    if (debug == NULL)
+    {
+	EMSG2(_("(NFA) COULD NOT OPEN %s !"), NFA_REGEXP_DEBUG_LOG);
+	return FALSE;
+    }
+#endif
+    nfa_match = FALSE;
+
+    /* Allocate memory for the lists of nodes. */
+    size = (nstate + 1) * sizeof(nfa_thread_T);
+    list[0].t = (nfa_thread_T *)lalloc(size, TRUE);
+    list[0].len = nstate + 1;
+    list[1].t = (nfa_thread_T *)lalloc(size, TRUE);
+    list[1].len = nstate + 1;
+    if (list[0].t == NULL || list[1].t == NULL)
+	goto theend;
+
+#ifdef ENABLE_LOG
+    log_fd = fopen(NFA_REGEXP_RUN_LOG, "a");
+    if (log_fd != NULL)
+    {
+	fprintf(log_fd, "**********************************\n");
+	nfa_set_code(start->c);
+	fprintf(log_fd, " RUNNING nfa_regmatch() starting with state %d, code %s\n",
+	abs(start->id), code);
+	fprintf(log_fd, "**********************************\n");
+    }
+    else
+    {
+	EMSG(_("Could not open temporary log file for writing, displaying on stderr ... "));
+	log_fd = stderr;
+    }
+#endif
+
+    thislist = &list[0];
+    thislist->n = 0;
+    nextlist = &list[1];
+    nextlist->n = 0;
+#ifdef ENABLE_LOG
+    fprintf(log_fd, "(---) STARTSTATE first\n");
+#endif
+    thislist->id = nfa_listid + 1;
+
+    /* Inline optimized code for addstate(thislist, start, m, 0) if we know
+     * it's the first MOPEN. */
+    if (toplevel)
+    {
+	if (REG_MULTI)
+	{
+	    m->norm.list.multi[0].start.lnum = reglnum;
+	    m->norm.list.multi[0].start.col = (colnr_T)(reginput - regline);
+	}
+	else
+	    m->norm.list.line[0].start = reginput;
+	m->norm.in_use = 1;
+	addstate(thislist, start->out, m, NULL, 0);
+    }
+    else
+	addstate(thislist, start, m, NULL, 0);
+
+#define	ADD_STATE_IF_MATCH(state)			\
+    if (result) {					\
+	add_state = state->out;				\
+	add_off = clen;					\
+    }
+
+    /*
+     * Run for each character.
+     */
+    for (;;)
+    {
+	int	curc;
+	int	clen;
+
+#ifdef FEAT_MBYTE
+	if (has_mbyte)
+	{
+	    curc = (*mb_ptr2char)(reginput);
+	    clen = (*mb_ptr2len)(reginput);
+	}
+	else
+#endif
+	{
+	    curc = *reginput;
+	    clen = 1;
+	}
+	if (curc == NUL)
+	{
+	    clen = 0;
+	    go_to_nextline = FALSE;
+	}
+
+	/* swap lists */
+	thislist = &list[flag];
+	nextlist = &list[flag ^= 1];
+	nextlist->n = 0;	    /* clear nextlist */
+	++nfa_listid;
+	thislist->id = nfa_listid;
+	nextlist->id = nfa_listid + 1;
+
+#ifdef ENABLE_LOG
+	fprintf(log_fd, "------------------------------------------\n");
+	fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput);
+	fprintf(log_fd, ">>> Advanced one character ... Current char is %c (code %d) \n", curc, (int)curc);
+	fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n);
+	{
+	    int i;
+
+	    for (i = 0; i < thislist->n; i++)
+		fprintf(log_fd, "%d  ", abs(thislist->t[i].state->id));
+	}
+	fprintf(log_fd, "\n");
+#endif
+
+#ifdef NFA_REGEXP_DEBUG_LOG
+	fprintf(debug, "\n-------------------\n");
+#endif
+	/*
+	 * If the state lists are empty we can stop.
+	 */
+	if (thislist->n == 0)
+	    break;
+
+	/* compute nextlist */
+	for (listidx = 0; listidx < thislist->n; ++listidx)
+	{
+	    t = &thislist->t[listidx];
+
+#ifdef NFA_REGEXP_DEBUG_LOG
+	    nfa_set_code(t->state->c);
+	    fprintf(debug, "%s, ", code);
+#endif
+#ifdef ENABLE_LOG
+	    {
+		int col;
+
+		if (t->subs.norm.in_use <= 0)
+		    col = -1;
+		else if (REG_MULTI)
+		    col = t->subs.norm.list.multi[0].start.col;
+		else
+		    col = (int)(t->subs.norm.list.line[0].start - regline);
+		nfa_set_code(t->state->c);
+		fprintf(log_fd, "(%d) char %d %s (start col %d)%s ... \n",
+			abs(t->state->id), (int)t->state->c, code, col,
+			pim_info(&t->pim));
+	    }
+#endif
+
+	    /*
+	     * Handle the possible codes of the current state.
+	     * The most important is NFA_MATCH.
+	     */
+	    add_state = NULL;
+	    add_here = FALSE;
+	    add_count = 0;
+	    switch (t->state->c)
+	    {
+	    case NFA_MATCH:
+	      {
+		nfa_match = TRUE;
+		copy_sub(&submatch->norm, &t->subs.norm);
+#ifdef FEAT_SYN_HL
+		if (nfa_has_zsubexpr)
+		    copy_sub(&submatch->synt, &t->subs.synt);
+#endif
+#ifdef ENABLE_LOG
+		log_subsexpr(&t->subs);
+#endif
+		/* Found the left-most longest match, do not look at any other
+		 * states at this position.  When the list of states is going
+		 * to be empty quit without advancing, so that "reginput" is
+		 * correct. */
+		if (nextlist->n == 0)
+		    clen = 0;
+		goto nextchar;
+	      }
+
+	    case NFA_END_INVISIBLE:
+	    case NFA_END_INVISIBLE_NEG:
+	    case NFA_END_PATTERN:
+		/*
+		 * This is only encountered after a NFA_START_INVISIBLE or
+		 * NFA_START_INVISIBLE_BEFORE node.
+		 * They surround a zero-width group, used with "\@=", "\&",
+		 * "\@!", "\@<=" and "\@<!".
+		 * If we got here, it means that the current "invisible" group
+		 * finished successfully, so return control to the parent
+		 * nfa_regmatch().  For a look-behind match only when it ends
+		 * in the position in "nfa_endp".
+		 * Submatches are stored in *m, and used in the parent call.
+		 */
+#ifdef ENABLE_LOG
+		if (nfa_endp != NULL)
+		{
+		    if (REG_MULTI)
+			fprintf(log_fd, "Current lnum: %d, endp lnum: %d; current col: %d, endp col: %d\n",
+				(int)reglnum,
+				(int)nfa_endp->se_u.pos.lnum,
+				(int)(reginput - regline),
+				nfa_endp->se_u.pos.col);
+		    else
+			fprintf(log_fd, "Current col: %d, endp col: %d\n",
+				(int)(reginput - regline),
+				(int)(nfa_endp->se_u.ptr - reginput));
+		}
+#endif
+		/* If "nfa_endp" is set it's only a match if it ends at
+		 * "nfa_endp" */
+		if (nfa_endp != NULL && (REG_MULTI
+			? (reglnum != nfa_endp->se_u.pos.lnum
+			    || (int)(reginput - regline)
+						!= nfa_endp->se_u.pos.col)
+			: reginput != nfa_endp->se_u.ptr))
+		    break;
+
+		/* do not set submatches for \@! */
+		if (t->state->c != NFA_END_INVISIBLE_NEG)
+		{
+		    copy_sub(&m->norm, &t->subs.norm);
+#ifdef FEAT_SYN_HL
+		    if (nfa_has_zsubexpr)
+			copy_sub(&m->synt, &t->subs.synt);
+#endif
+		}
+#ifdef ENABLE_LOG
+		fprintf(log_fd, "Match found:\n");
+		log_subsexpr(m);
+#endif
+		nfa_match = TRUE;
+		break;
+
+	    case NFA_START_INVISIBLE:
+	    case NFA_START_INVISIBLE_FIRST:
+	    case NFA_START_INVISIBLE_NEG:
+	    case NFA_START_INVISIBLE_NEG_FIRST:
+	    case NFA_START_INVISIBLE_BEFORE:
+	    case NFA_START_INVISIBLE_BEFORE_FIRST:
+	    case NFA_START_INVISIBLE_BEFORE_NEG:
+	    case NFA_START_INVISIBLE_BEFORE_NEG_FIRST:
+		{
+#ifdef ENABLE_LOG
+		    fprintf(log_fd, "Failure chance invisible: %d, what follows: %d\n",
+			    failure_chance(t->state->out, 0),
+			    failure_chance(t->state->out1->out, 0));
+#endif
+		    /* Do it directly if there already is a PIM or when
+		     * nfa_postprocess() detected it will work better. */
+		    if (t->pim.result != NFA_PIM_UNUSED
+			 || t->state->c == NFA_START_INVISIBLE_FIRST
+			 || t->state->c == NFA_START_INVISIBLE_NEG_FIRST
+			 || t->state->c == NFA_START_INVISIBLE_BEFORE_FIRST
+			 || t->state->c == NFA_START_INVISIBLE_BEFORE_NEG_FIRST)
+		    {
+			int in_use = m->norm.in_use;
+
+			/* Copy submatch info for the recursive call, so that
+			 * \1 can be matched. */
+			copy_sub_off(&m->norm, &t->subs.norm);
+
+			/*
+			 * First try matching the invisible match, then what
+			 * follows.
+			 */
+			result = recursive_regmatch(t->state, NULL, prog,
+						       submatch, m, &listids);
+
+			/* for \@! and \@<! it is a match when the result is
+			 * FALSE */
+			if (result != (t->state->c == NFA_START_INVISIBLE_NEG
+			       || t->state->c == NFA_START_INVISIBLE_NEG_FIRST
+			       || t->state->c
+					   == NFA_START_INVISIBLE_BEFORE_NEG
+			       || t->state->c
+				     == NFA_START_INVISIBLE_BEFORE_NEG_FIRST))
+			{
+			    /* Copy submatch info from the recursive call */
+			    copy_sub_off(&t->subs.norm, &m->norm);
+#ifdef FEAT_SYN_HL
+			    if (nfa_has_zsubexpr)
+				copy_sub_off(&t->subs.synt, &m->synt);
+#endif
+
+			    /* t->state->out1 is the corresponding
+			     * END_INVISIBLE node; Add its out to the current
+			     * list (zero-width match). */
+			    add_here = TRUE;
+			    add_state = t->state->out1->out;
+			}
+			m->norm.in_use = in_use;
+		    }
+		    else
+		    {
+			nfa_pim_T pim;
+
+			/*
+			 * First try matching what follows.  Only if a match
+			 * is found verify the invisible match matches.  Add a
+			 * nfa_pim_T to the following states, it contains info
+			 * about the invisible match.
+			 */
+			pim.state = t->state;
+			pim.result = NFA_PIM_TODO;
+			pim.subs.norm.in_use = 0;
+#ifdef FEAT_SYN_HL
+			pim.subs.synt.in_use = 0;
+#endif
+			if (REG_MULTI)
+			{
+			    pim.end.pos.col = (int)(reginput - regline);
+			    pim.end.pos.lnum = reglnum;
+			}
+			else
+			    pim.end.ptr = reginput;
+
+			/* t->state->out1 is the corresponding END_INVISIBLE
+			 * node; Add its out to the current list (zero-width
+			 * match). */
+			addstate_here(thislist, t->state->out1->out, &t->subs,
+							       &pim, &listidx);
+		    }
+		}
+		break;
+
+	    case NFA_START_PATTERN:
+	      {
+		nfa_state_T *skip = NULL;
+#ifdef ENABLE_LOG
+		int	    skip_lid = 0;
+#endif
+
+		/* There is no point in trying to match the pattern if the
+		 * output state is not going to be added to the list. */
+		if (state_in_list(nextlist, t->state->out1->out, &t->subs))
+		{
+		    skip = t->state->out1->out;
+#ifdef ENABLE_LOG
+		    skip_lid = nextlist->id;
+#endif
+		}
+		else if (state_in_list(nextlist,
+					  t->state->out1->out->out, &t->subs))
+		{
+		    skip = t->state->out1->out->out;
+#ifdef ENABLE_LOG
+		    skip_lid = nextlist->id;
+#endif
+		}
+		else if (state_in_list(thislist,
+					  t->state->out1->out->out, &t->subs))
+		{
+		    skip = t->state->out1->out->out;
+#ifdef ENABLE_LOG
+		    skip_lid = thislist->id;
+#endif
+		}
+		if (skip != NULL)
+		{
+#ifdef ENABLE_LOG
+		    nfa_set_code(skip->c);
+		    fprintf(log_fd, "> Not trying to match pattern, output state %d is already in list %d. char %d: %s\n",
+			    abs(skip->id), skip_lid, skip->c, code);
+#endif
+		    break;
+		}
+
+		/* First try matching the pattern. */
+		result = recursive_regmatch(t->state, NULL, prog,
+						       submatch, m, &listids);
+		if (result)
+		{
+		    int bytelen;
+
+#ifdef ENABLE_LOG
+		    fprintf(log_fd, "NFA_START_PATTERN matches:\n");
+		    log_subsexpr(m);
+#endif
+		    /* Copy submatch info from the recursive call */
+		    copy_sub_off(&t->subs.norm, &m->norm);
+#ifdef FEAT_SYN_HL
+		    if (nfa_has_zsubexpr)
+			copy_sub_off(&t->subs.synt, &m->synt);
+#endif
+		    /* Now we need to skip over the matched text and then
+		     * continue with what follows. */
+		    if (REG_MULTI)
+			/* TODO: multi-line match */
+			bytelen = m->norm.list.multi[0].end.col
+						  - (int)(reginput - regline);
+		    else
+			bytelen = (int)(m->norm.list.line[0].end - reginput);
+
+#ifdef ENABLE_LOG
+		    fprintf(log_fd, "NFA_START_PATTERN length: %d\n", bytelen);
+#endif
+		    if (bytelen == 0)
+		    {
+			/* empty match, output of corresponding
+			 * NFA_END_PATTERN/NFA_SKIP to be used at current
+			 * position */
+			add_here = TRUE;
+			add_state = t->state->out1->out->out;
+		    }
+		    else if (bytelen <= clen)
+		    {
+			/* match current character, output of corresponding
+			 * NFA_END_PATTERN to be used at next position. */
+			add_state = t->state->out1->out->out;
+			add_off = clen;
+		    }
+		    else
+		    {
+			/* skip over the matched characters, set character
+			 * count in NFA_SKIP */
+			add_state = t->state->out1->out;
+			add_off = bytelen;
+			add_count = bytelen - clen;
+		    }
+		}
+		break;
+	      }
+
+	    case NFA_BOL:
+		if (reginput == regline)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_EOL:
+		if (curc == NUL)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_BOW:
+		result = TRUE;
+
+		if (curc == NUL)
+		    result = FALSE;
+#ifdef FEAT_MBYTE
+		else if (has_mbyte)
+		{
+		    int this_class;
+
+		    /* Get class of current and previous char (if it exists). */
+		    this_class = mb_get_class_buf(reginput, reg_buf);
+		    if (this_class <= 1)
+			result = FALSE;
+		    else if (reg_prev_class() == this_class)
+			result = FALSE;
+		}
+#endif
+		else if (!vim_iswordc_buf(curc, reg_buf)
+			   || (reginput > regline
+				   && vim_iswordc_buf(reginput[-1], reg_buf)))
+		    result = FALSE;
+		if (result)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_EOW:
+		result = TRUE;
+		if (reginput == regline)
+		    result = FALSE;
+#ifdef FEAT_MBYTE
+		else if (has_mbyte)
+		{
+		    int this_class, prev_class;
+
+		    /* Get class of current and previous char (if it exists). */
+		    this_class = mb_get_class_buf(reginput, reg_buf);
+		    prev_class = reg_prev_class();
+		    if (this_class == prev_class
+					|| prev_class == 0 || prev_class == 1)
+			result = FALSE;
+		}
+#endif
+		else if (!vim_iswordc_buf(reginput[-1], reg_buf)
+			|| (reginput[0] != NUL
+					   && vim_iswordc_buf(curc, reg_buf)))
+		    result = FALSE;
+		if (result)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_BOF:
+		if (reglnum == 0 && reginput == regline
+					&& (!REG_MULTI || reg_firstlnum == 1))
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_EOF:
+		if (reglnum == reg_maxline && curc == NUL)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+#ifdef FEAT_MBYTE
+	    case NFA_COMPOSING:
+	    {
+		int	    mc = curc;
+		int	    len = 0;
+		nfa_state_T *end;
+		nfa_state_T *sta;
+		int	    cchars[MAX_MCO];
+		int	    ccount = 0;
+		int	    j;
+
+		sta = t->state->out;
+		len = 0;
+		if (utf_iscomposing(sta->c))
+		{
+		    /* Only match composing character(s), ignore base
+		     * character.  Used for ".{composing}" and "{composing}"
+		     * (no preceding character). */
+		    len += mb_char2len(mc);
+		}
+		if (ireg_icombine && len == 0)
+		{
+		    /* If \Z was present, then ignore composing characters.
+		     * When ignoring the base character this always matches. */
+		    if (len == 0 && sta->c != curc)
+			result = FAIL;
+		    else
+			result = OK;
+		    while (sta->c != NFA_END_COMPOSING)
+			sta = sta->out;
+		}
+
+		/* Check base character matches first, unless ignored. */
+		else if (len > 0 || mc == sta->c)
+		{
+		    if (len == 0)
+		    {
+			len += mb_char2len(mc);
+			sta = sta->out;
+		    }
+
+		    /* We don't care about the order of composing characters.
+		     * Get them into cchars[] first. */
+		    while (len < clen)
+		    {
+			mc = mb_ptr2char(reginput + len);
+			cchars[ccount++] = mc;
+			len += mb_char2len(mc);
+			if (ccount == MAX_MCO)
+			    break;
+		    }
+
+		    /* Check that each composing char in the pattern matches a
+		     * composing char in the text.  We do not check if all
+		     * composing chars are matched. */
+		    result = OK;
+		    while (sta->c != NFA_END_COMPOSING)
+		    {
+			for (j = 0; j < ccount; ++j)
+			    if (cchars[j] == sta->c)
+				break;
+			if (j == ccount)
+			{
+			    result = FAIL;
+			    break;
+			}
+			sta = sta->out;
+		    }
+		}
+		else
+		    result = FAIL;
+
+		end = t->state->out1;	    /* NFA_END_COMPOSING */
+		ADD_STATE_IF_MATCH(end);
+		break;
+	    }
+#endif
+
+	    case NFA_NEWL:
+		if (curc == NUL && !reg_line_lbr && REG_MULTI
+						    && reglnum <= reg_maxline)
+		{
+		    go_to_nextline = TRUE;
+		    /* Pass -1 for the offset, which means taking the position
+		     * at the start of the next line. */
+		    add_state = t->state->out;
+		    add_off = -1;
+		}
+		else if (curc == '\n' && reg_line_lbr)
+		{
+		    /* match \n as if it is an ordinary character */
+		    add_state = t->state->out;
+		    add_off = 1;
+		}
+		break;
+
+	    case NFA_START_COLL:
+	    case NFA_START_NEG_COLL:
+	      {
+		/* What follows is a list of characters, until NFA_END_COLL.
+		 * One of them must match or none of them must match. */
+		nfa_state_T	*state;
+		int		result_if_matched;
+		int		c1, c2;
+
+		/* Never match EOL. If it's part of the collection it is added
+		 * as a separate state with an OR. */
+		if (curc == NUL)
+		    break;
+
+		state = t->state->out;
+		result_if_matched = (t->state->c == NFA_START_COLL);
+		for (;;)
+		{
+		    if (state->c == NFA_END_COLL)
+		    {
+			result = !result_if_matched;
+			break;
+		    }
+		    if (state->c == NFA_RANGE_MIN)
+		    {
+			c1 = state->val;
+			state = state->out; /* advance to NFA_RANGE_MAX */
+			c2 = state->val;
+#ifdef ENABLE_LOG
+			fprintf(log_fd, "NFA_RANGE_MIN curc=%d c1=%d c2=%d\n",
+				curc, c1, c2);
+#endif
+			if (curc >= c1 && curc <= c2)
+			{
+			    result = result_if_matched;
+			    break;
+			}
+			if (ireg_ic)
+			{
+			    int curc_low = MB_TOLOWER(curc);
+			    int done = FALSE;
+
+			    for ( ; c1 <= c2; ++c1)
+				if (MB_TOLOWER(c1) == curc_low)
+				{
+				    result = result_if_matched;
+				    done = TRUE;
+				    break;
+				}
+			    if (done)
+				break;
+			}
+		    }
+		    else if (state->c < 0 ? check_char_class(state->c, curc)
+			        : (curc == state->c
+				   || (ireg_ic && MB_TOLOWER(curc)
+						    == MB_TOLOWER(state->c))))
+		    {
+			result = result_if_matched;
+			break;
+		    }
+		    state = state->out;
+		}
+		if (result)
+		{
+		    /* next state is in out of the NFA_END_COLL, out1 of
+		     * START points to the END state */
+		    add_state = t->state->out1->out;
+		    add_off = clen;
+		}
+		break;
+	      }
+
+	    case NFA_ANY:
+		/* Any char except '\0', (end of input) does not match. */
+		if (curc > 0)
+		{
+		    add_state = t->state->out;
+		    add_off = clen;
+		}
+		break;
+
+	    /*
+	     * Character classes like \a for alpha, \d for digit etc.
+	     */
+	    case NFA_IDENT:	/*  \i	*/
+		result = vim_isIDc(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_SIDENT:	/*  \I	*/
+		result = !VIM_ISDIGIT(curc) && vim_isIDc(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_KWORD:	/*  \k	*/
+		result = vim_iswordp_buf(reginput, reg_buf);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_SKWORD:	/*  \K	*/
+		result = !VIM_ISDIGIT(curc)
+					&& vim_iswordp_buf(reginput, reg_buf);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_FNAME:	/*  \f	*/
+		result = vim_isfilec(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_SFNAME:	/*  \F	*/
+		result = !VIM_ISDIGIT(curc) && vim_isfilec(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_PRINT:	/*  \p	*/
+		result = ptr2cells(reginput) == 1;
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_SPRINT:	/*  \P	*/
+		result = !VIM_ISDIGIT(curc) && ptr2cells(reginput) == 1;
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_WHITE:	/*  \s	*/
+		result = vim_iswhite(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NWHITE:	/*  \S	*/
+		result = curc != NUL && !vim_iswhite(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_DIGIT:	/*  \d	*/
+		result = ri_digit(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NDIGIT:	/*  \D	*/
+		result = curc != NUL && !ri_digit(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_HEX:	/*  \x	*/
+		result = ri_hex(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NHEX:	/*  \X	*/
+		result = curc != NUL && !ri_hex(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_OCTAL:	/*  \o	*/
+		result = ri_octal(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NOCTAL:	/*  \O	*/
+		result = curc != NUL && !ri_octal(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_WORD:	/*  \w	*/
+		result = ri_word(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NWORD:	/*  \W	*/
+		result = curc != NUL && !ri_word(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_HEAD:	/*  \h	*/
+		result = ri_head(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NHEAD:	/*  \H	*/
+		result = curc != NUL && !ri_head(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_ALPHA:	/*  \a	*/
+		result = ri_alpha(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NALPHA:	/*  \A	*/
+		result = curc != NUL && !ri_alpha(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_LOWER:	/*  \l	*/
+		result = ri_lower(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NLOWER:	/*  \L	*/
+		result = curc != NUL && !ri_lower(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_UPPER:	/*  \u	*/
+		result = ri_upper(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_NUPPER:	/* \U	*/
+		result = curc != NUL && !ri_upper(curc);
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+
+	    case NFA_BACKREF1:
+	    case NFA_BACKREF2:
+	    case NFA_BACKREF3:
+	    case NFA_BACKREF4:
+	    case NFA_BACKREF5:
+	    case NFA_BACKREF6:
+	    case NFA_BACKREF7:
+	    case NFA_BACKREF8:
+	    case NFA_BACKREF9:
+#ifdef FEAT_SYN_HL
+	    case NFA_ZREF1:
+	    case NFA_ZREF2:
+	    case NFA_ZREF3:
+	    case NFA_ZREF4:
+	    case NFA_ZREF5:
+	    case NFA_ZREF6:
+	    case NFA_ZREF7:
+	    case NFA_ZREF8:
+	    case NFA_ZREF9:
+#endif
+		/* \1 .. \9  \z1 .. \z9 */
+	      {
+		int subidx;
+		int bytelen;
+
+		if (t->state->c <= NFA_BACKREF9)
+		{
+		    subidx = t->state->c - NFA_BACKREF1 + 1;
+		    result = match_backref(&t->subs.norm, subidx, &bytelen);
+		}
+#ifdef FEAT_SYN_HL
+		else
+		{
+		    subidx = t->state->c - NFA_ZREF1 + 1;
+		    result = match_zref(subidx, &bytelen);
+		}
+#endif
+
+		if (result)
+		{
+		    if (bytelen == 0)
+		    {
+			/* empty match always works, output of NFA_SKIP to be
+			 * used next */
+			add_here = TRUE;
+			add_state = t->state->out->out;
+		    }
+		    else if (bytelen <= clen)
+		    {
+			/* match current character, jump ahead to out of
+			 * NFA_SKIP */
+			add_state = t->state->out->out;
+			add_off = clen;
+		    }
+		    else
+		    {
+			/* skip over the matched characters, set character
+			 * count in NFA_SKIP */
+			add_state = t->state->out;
+			add_off = bytelen;
+			add_count = bytelen - clen;
+		    }
+		}
+		break;
+	      }
+	    case NFA_SKIP:
+	      /* character of previous matching \1 .. \9  or \@> */
+	      if (t->count - clen <= 0)
+	      {
+		  /* end of match, go to what follows */
+		  add_state = t->state->out;
+		  add_off = clen;
+	      }
+	      else
+	      {
+		  /* add state again with decremented count */
+		  add_state = t->state;
+		  add_off = 0;
+		  add_count = t->count - clen;
+	      }
+	      break;
+
+	    case NFA_LNUM:
+	    case NFA_LNUM_GT:
+	    case NFA_LNUM_LT:
+		result = (REG_MULTI &&
+			nfa_re_num_cmp(t->state->val, t->state->c - NFA_LNUM,
+			    (long_u)(reglnum + reg_firstlnum)));
+		if (result)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_COL:
+	    case NFA_COL_GT:
+	    case NFA_COL_LT:
+		result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_COL,
+			(long_u)(reginput - regline) + 1);
+		if (result)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_VCOL:
+	    case NFA_VCOL_GT:
+	    case NFA_VCOL_LT:
+		result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_VCOL,
+		    (long_u)win_linetabsize(
+			    reg_win == NULL ? curwin : reg_win,
+			    regline, (colnr_T)(reginput - regline)) + 1);
+		if (result)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_MARK:
+	    case NFA_MARK_GT:
+	    case NFA_MARK_LT:
+	      {
+		pos_T	*pos = getmark_buf(reg_buf, t->state->val, FALSE);
+
+		/* Compare the mark position to the match position. */
+		result = (pos != NULL		     /* mark doesn't exist */
+			&& pos->lnum > 0    /* mark isn't set in reg_buf */
+			&& (pos->lnum == reglnum + reg_firstlnum
+				? (pos->col == (colnr_T)(reginput - regline)
+				    ? t->state->c == NFA_MARK
+				    : (pos->col < (colnr_T)(reginput - regline)
+					? t->state->c == NFA_MARK_GT
+					: t->state->c == NFA_MARK_LT))
+				: (pos->lnum < reglnum + reg_firstlnum
+				    ? t->state->c == NFA_MARK_GT
+				    : t->state->c == NFA_MARK_LT)));
+		if (result)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+	      }
+
+	    case NFA_CURSOR:
+		result = (reg_win != NULL
+			&& (reglnum + reg_firstlnum == reg_win->w_cursor.lnum)
+			&& ((colnr_T)(reginput - regline)
+						   == reg_win->w_cursor.col));
+		if (result)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+		break;
+
+	    case NFA_VISUAL:
+#ifdef FEAT_VISUAL
+		result = reg_match_visual();
+		if (result)
+		{
+		    add_here = TRUE;
+		    add_state = t->state->out;
+		}
+#endif
+		break;
+
+	    default:	/* regular character */
+	      {
+		int c = t->state->c;
+
+		/* TODO: put this in #ifdef later */
+		if (c < 0)
+		    EMSGN("INTERNAL: Negative state char: %ld", c);
+		result = (c == curc);
+
+		if (!result && ireg_ic)
+		    result = MB_TOLOWER(c) == MB_TOLOWER(curc);
+#ifdef FEAT_MBYTE
+		/* If there is a composing character which is not being
+		 * ignored there can be no match. Match with composing
+		 * character uses NFA_COMPOSING above. */
+		if (result && enc_utf8 && !ireg_icombine
+						&& clen != utf_char2len(curc))
+		    result = FALSE;
+#endif
+		ADD_STATE_IF_MATCH(t->state);
+		break;
+	      }
+
+	    } /* switch (t->state->c) */
+
+	    if (add_state != NULL)
+	    {
+		nfa_pim_T *pim;
+
+		if (t->pim.result == NFA_PIM_UNUSED)
+		    pim = NULL;
+		else
+		    pim = &t->pim;
+
+		/* Handle the postponed invisible match if the match might end
+		 * without advancing and before the end of the line. */
+		if (pim != NULL && (clen == 0 || match_follows(add_state, 0)))
+		{
+		    if (pim->result == NFA_PIM_TODO)
+		    {
+#ifdef ENABLE_LOG
+			fprintf(log_fd, "\n");
+			fprintf(log_fd, "==================================\n");
+			fprintf(log_fd, "Postponed recursive nfa_regmatch()\n");
+			fprintf(log_fd, "\n");
+#endif
+			result = recursive_regmatch(pim->state, pim,
+						 prog, submatch, m, &listids);
+			pim->result = result ? NFA_PIM_MATCH : NFA_PIM_NOMATCH;
+			/* for \@! and \@<! it is a match when the result is
+			 * FALSE */
+			if (result != (pim->state->c == NFA_START_INVISIBLE_NEG
+			     || pim->state->c == NFA_START_INVISIBLE_NEG_FIRST
+			     || pim->state->c
+					   == NFA_START_INVISIBLE_BEFORE_NEG
+			     || pim->state->c
+				     == NFA_START_INVISIBLE_BEFORE_NEG_FIRST))
+			{
+			    /* Copy submatch info from the recursive call */
+			    copy_sub_off(&pim->subs.norm, &m->norm);
+#ifdef FEAT_SYN_HL
+			    if (nfa_has_zsubexpr)
+				copy_sub_off(&pim->subs.synt, &m->synt);
+#endif
+			}
+		    }
+		    else
+		    {
+			result = (pim->result == NFA_PIM_MATCH);
+#ifdef ENABLE_LOG
+			fprintf(log_fd, "\n");
+			fprintf(log_fd, "Using previous recursive nfa_regmatch() result, result == %d\n", pim->result);
+			fprintf(log_fd, "MATCH = %s\n", result == TRUE ? "OK" : "FALSE");
+			fprintf(log_fd, "\n");
+#endif
+		    }
+
+		    /* for \@! and \@<! it is a match when result is FALSE */
+		    if (result != (pim->state->c == NFA_START_INVISIBLE_NEG
+			     || pim->state->c == NFA_START_INVISIBLE_NEG_FIRST
+			     || pim->state->c
+					   == NFA_START_INVISIBLE_BEFORE_NEG
+			     || pim->state->c
+				     == NFA_START_INVISIBLE_BEFORE_NEG_FIRST))
+		    {
+			/* Copy submatch info from the recursive call */
+			copy_sub_off(&t->subs.norm, &pim->subs.norm);
+#ifdef FEAT_SYN_HL
+			if (nfa_has_zsubexpr)
+			    copy_sub_off(&t->subs.synt, &pim->subs.synt);
+#endif
+		    }
+		    else
+			/* look-behind match failed, don't add the state */
+			continue;
+
+		    /* Postponed invisible match was handled, don't add it to
+		     * following states. */
+		    pim = NULL;
+		}
+
+		if (add_here)
+		    addstate_here(thislist, add_state, &t->subs, pim, &listidx);
+		else
+		{
+		    addstate(nextlist, add_state, &t->subs, pim, add_off);
+		    if (add_count > 0)
+			nextlist->t[nextlist->n - 1].count = add_count;
+		}
+	    }
+
+	} /* for (thislist = thislist; thislist->state; thislist++) */
+
+	/* Look for the start of a match in the current position by adding the
+	 * start state to the list of states.
+	 * The first found match is the leftmost one, thus the order of states
+	 * matters!
+	 * Do not add the start state in recursive calls of nfa_regmatch(),
+	 * because recursive calls should only start in the first position.
+	 * Unless "nfa_endp" is not NULL, then we match the end position.
+	 * Also don't start a match past the first line. */
+	if (nfa_match == FALSE
+		&& ((toplevel
+			&& reglnum == 0
+			&& clen != 0
+			&& (ireg_maxcol == 0
+			    || (colnr_T)(reginput - regline) < ireg_maxcol))
+		    || (nfa_endp != NULL
+			&& (REG_MULTI
+			    ? (reglnum < nfa_endp->se_u.pos.lnum
+			       || (reglnum == nfa_endp->se_u.pos.lnum
+			           && (int)(reginput - regline)
+						    < nfa_endp->se_u.pos.col))
+			    : reginput < nfa_endp->se_u.ptr))))
+	{
+#ifdef ENABLE_LOG
+	    fprintf(log_fd, "(---) STARTSTATE\n");
+#endif
+	    /* Inline optimized code for addstate() if we know the state is
+	     * the first MOPEN. */
+	    if (toplevel)
+	    {
+		int add = TRUE;
+		int c;
+
+		if (prog->regstart != NUL && clen != 0)
+		{
+		    if (nextlist->n == 0)
+		    {
+			colnr_T col = (colnr_T)(reginput - regline) + clen;
+
+			/* Nextlist is empty, we can skip ahead to the
+			 * character that must appear at the start. */
+			if (skip_to_start(prog->regstart, &col) == FAIL)
+			    break;
+#ifdef ENABLE_LOG
+			fprintf(log_fd, "  Skipping ahead %d bytes to regstart\n",
+				col - ((colnr_T)(reginput - regline) + clen));
+#endif
+			reginput = regline + col - clen;
+		    }
+		    else
+		    {
+			/* Checking if the required start character matches is
+			 * cheaper than adding a state that won't match. */
+			c = PTR2CHAR(reginput + clen);
+			if (c != prog->regstart && (!ireg_ic || MB_TOLOWER(c)
+					       != MB_TOLOWER(prog->regstart)))
+			{
+#ifdef ENABLE_LOG
+			    fprintf(log_fd, "  Skipping start state, regstart does not match\n");
+#endif
+			    add = FALSE;
+			}
+		    }
+		}
+
+		if (add)
+		{
+		    if (REG_MULTI)
+			m->norm.list.multi[0].start.col =
+					 (colnr_T)(reginput - regline) + clen;
+		    else
+			m->norm.list.line[0].start = reginput + clen;
+		    addstate(nextlist, start->out, m, NULL, clen);
+		}
+	    }
+	    else
+		addstate(nextlist, start, m, NULL, clen);
+	}
+
+#ifdef ENABLE_LOG
+	fprintf(log_fd, ">>> Thislist had %d states available: ", thislist->n);
+	{
+	    int i;
+
+	    for (i = 0; i < thislist->n; i++)
+		fprintf(log_fd, "%d  ", abs(thislist->t[i].state->id));
+	}
+	fprintf(log_fd, "\n");
+#endif
+
+nextchar:
+	/* Advance to the next character, or advance to the next line, or
+	 * finish. */
+	if (clen != 0)
+	    reginput += clen;
+	else if (go_to_nextline || (nfa_endp != NULL && REG_MULTI
+					&& reglnum < nfa_endp->se_u.pos.lnum))
+	    reg_nextline();
+	else
+	    break;
+    }
+
+#ifdef ENABLE_LOG
+    if (log_fd != stderr)
+	fclose(log_fd);
+    log_fd = NULL;
+#endif
+
+theend:
+    /* Free memory */
+    vim_free(list[0].t);
+    vim_free(list[1].t);
+    vim_free(listids);
+#undef ADD_STATE_IF_MATCH
+#ifdef NFA_REGEXP_DEBUG_LOG
+    fclose(debug);
+#endif
+
+    return nfa_match;
+}
+
+/*
+ * Try match of "prog" with at regline["col"].
+ * Returns 0 for failure, number of lines contained in the match otherwise.
+ */
+    static long
+nfa_regtry(prog, col)
+    nfa_regprog_T   *prog;
+    colnr_T	    col;
+{
+    int		i;
+    regsubs_T	subs, m;
+    nfa_state_T	*start = prog->start;
+#ifdef ENABLE_LOG
+    FILE	*f;
+#endif
+
+    reginput = regline + col;
+
+#ifdef ENABLE_LOG
+    f = fopen(NFA_REGEXP_RUN_LOG, "a");
+    if (f != NULL)
+    {
+	fprintf(f, "\n\n\t=======================================================\n");
+#ifdef DEBUG
+	fprintf(f, "\tRegexp is \"%s\"\n", nfa_regengine.expr);
+#endif
+	fprintf(f, "\tInput text is \"%s\" \n", reginput);
+	fprintf(f, "\t=======================================================\n\n");
+	nfa_print_state(f, start);
+	fprintf(f, "\n\n");
+	fclose(f);
+    }
+    else
+	EMSG(_("Could not open temporary log file for writing "));
+#endif
+
+    clear_sub(&subs.norm);
+    clear_sub(&m.norm);
+#ifdef FEAT_SYN_HL
+    clear_sub(&subs.synt);
+    clear_sub(&m.synt);
+#endif
+
+    if (nfa_regmatch(prog, start, &subs, &m) == FALSE)
+	return 0;
+
+    cleanup_subexpr();
+    if (REG_MULTI)
+    {
+	for (i = 0; i < subs.norm.in_use; i++)
+	{
+	    reg_startpos[i] = subs.norm.list.multi[i].start;
+	    reg_endpos[i] = subs.norm.list.multi[i].end;
+	}
+
+	if (reg_startpos[0].lnum < 0)
+	{
+	    reg_startpos[0].lnum = 0;
+	    reg_startpos[0].col = col;
+	}
+	if (reg_endpos[0].lnum < 0)
+	{
+	    /* pattern has a \ze but it didn't match, use current end */
+	    reg_endpos[0].lnum = reglnum;
+	    reg_endpos[0].col = (int)(reginput - regline);
+	}
+	else
+	    /* Use line number of "\ze". */
+	    reglnum = reg_endpos[0].lnum;
+    }
+    else
+    {
+	for (i = 0; i < subs.norm.in_use; i++)
+	{
+	    reg_startp[i] = subs.norm.list.line[i].start;
+	    reg_endp[i] = subs.norm.list.line[i].end;
+	}
+
+	if (reg_startp[0] == NULL)
+	    reg_startp[0] = regline + col;
+	if (reg_endp[0] == NULL)
+	    reg_endp[0] = reginput;
+    }
+
+#ifdef FEAT_SYN_HL
+    /* Package any found \z(...\) matches for export. Default is none. */
+    unref_extmatch(re_extmatch_out);
+    re_extmatch_out = NULL;
+
+    if (prog->reghasz == REX_SET)
+    {
+	cleanup_zsubexpr();
+	re_extmatch_out = make_extmatch();
+	for (i = 0; i < subs.synt.in_use; i++)
+	{
+	    if (REG_MULTI)
+	    {
+		struct multipos *mpos = &subs.synt.list.multi[i];
+
+		/* Only accept single line matches. */
+		if (mpos->start.lnum >= 0 && mpos->start.lnum == mpos->end.lnum)
+		    re_extmatch_out->matches[i] =
+			vim_strnsave(reg_getline(mpos->start.lnum)
+							    + mpos->start.col,
+					     mpos->end.col - mpos->start.col);
+	    }
+	    else
+	    {
+		struct linepos *lpos = &subs.synt.list.line[i];
+
+		if (lpos->start != NULL && lpos->end != NULL)
+		    re_extmatch_out->matches[i] =
+			    vim_strnsave(lpos->start,
+					      (int)(lpos->end - lpos->start));
+	    }
+	}
+    }
+#endif
+
+    return 1 + reglnum;
+}
+
+/*
+ * Match a regexp against a string ("line" points to the string) or multiple
+ * lines ("line" is NULL, use reg_getline()).
+ *
+ * Returns 0 for failure, number of lines contained in the match otherwise.
+ */
+    static long
+nfa_regexec_both(line, startcol)
+    char_u	*line;
+    colnr_T	startcol;	/* column to start looking for match */
+{
+    nfa_regprog_T   *prog;
+    long	    retval = 0L;
+    int		    i;
+    colnr_T	    col = startcol;
+
+    if (REG_MULTI)
+    {
+	prog = (nfa_regprog_T *)reg_mmatch->regprog;
+	line = reg_getline((linenr_T)0);    /* relative to the cursor */
+	reg_startpos = reg_mmatch->startpos;
+	reg_endpos = reg_mmatch->endpos;
+    }
+    else
+    {
+	prog = (nfa_regprog_T *)reg_match->regprog;
+	reg_startp = reg_match->startp;
+	reg_endp = reg_match->endp;
+    }
+
+    /* Be paranoid... */
+    if (prog == NULL || line == NULL)
+    {
+	EMSG(_(e_null));
+	goto theend;
+    }
+
+    /* If pattern contains "\c" or "\C": overrule value of ireg_ic */
+    if (prog->regflags & RF_ICASE)
+	ireg_ic = TRUE;
+    else if (prog->regflags & RF_NOICASE)
+	ireg_ic = FALSE;
+
+#ifdef FEAT_MBYTE
+    /* If pattern contains "\Z" overrule value of ireg_icombine */
+    if (prog->regflags & RF_ICOMBINE)
+	ireg_icombine = TRUE;
+#endif
+
+    regline = line;
+    reglnum = 0;    /* relative to line */
+
+    nfa_has_zend = prog->has_zend;
+    nfa_has_backref = prog->has_backref;
+    nfa_nsubexpr = prog->nsubexp;
+    nfa_listid = 1;
+    nfa_alt_listid = 2;
+#ifdef DEBUG
+    nfa_regengine.expr = prog->pattern;
+#endif
+
+    if (prog->reganch && col > 0)
+	return 0L;
+
+    need_clear_subexpr = TRUE;
+#ifdef FEAT_SYN_HL
+    /* Clear the external match subpointers if necessary. */
+    if (prog->reghasz == REX_SET)
+    {
+	nfa_has_zsubexpr = TRUE;
+	need_clear_zsubexpr = TRUE;
+    }
+    else
+	nfa_has_zsubexpr = FALSE;
+#endif
+
+    if (prog->regstart != NUL)
+    {
+	/* Skip ahead until a character we know the match must start with.
+	 * When there is none there is no match. */
+	if (skip_to_start(prog->regstart, &col) == FAIL)
+	    return 0L;
+
+	/* If match_text is set it contains the full text that must match.
+	 * Nothing else to try. Doesn't handle combining chars well. */
+	if (prog->match_text != NULL
+#ifdef FEAT_MBYTE
+		    && !ireg_icombine
+#endif
+		)
+	    return find_match_text(col, prog->regstart, prog->match_text);
+    }
+
+    /* If the start column is past the maximum column: no need to try. */
+    if (ireg_maxcol > 0 && col >= ireg_maxcol)
+	goto theend;
+
+    nstate = prog->nstate;
+    for (i = 0; i < nstate; ++i)
+    {
+	prog->state[i].id = i;
+	prog->state[i].lastlist[0] = 0;
+	prog->state[i].lastlist[1] = 0;
+    }
+
+    retval = nfa_regtry(prog, col);
+
+#ifdef DEBUG
+    nfa_regengine.expr = NULL;
+#endif
+
+theend:
+    return retval;
+}
+
+/*
+ * Compile a regular expression into internal code for the NFA matcher.
+ * Returns the program in allocated space.  Returns NULL for an error.
+ */
+    static regprog_T *
+nfa_regcomp(expr, re_flags)
+    char_u	*expr;
+    int		re_flags;
+{
+    nfa_regprog_T	*prog = NULL;
+    size_t		prog_size;
+    int			*postfix;
+
+    if (expr == NULL)
+	return NULL;
+
+#ifdef DEBUG
+    nfa_regengine.expr = expr;
+#endif
+
+    init_class_tab();
+
+    if (nfa_regcomp_start(expr, re_flags) == FAIL)
+	return NULL;
+
+    /* Build postfix form of the regexp. Needed to build the NFA
+     * (and count its size). */
+    postfix = re2post();
+    if (postfix == NULL)
+    {
+	/* TODO: only give this error for debugging? */
+	if (post_ptr >= post_end)
+	    EMSGN("Internal error: estimated max number of states insufficient: %ld", post_end - post_start);
+	goto fail;	    /* Cascaded (syntax?) error */
+    }
+
+    /*
+     * In order to build the NFA, we parse the input regexp twice:
+     * 1. first pass to count size (so we can allocate space)
+     * 2. second to emit code
+     */
+#ifdef ENABLE_LOG
+    {
+	FILE *f = fopen(NFA_REGEXP_RUN_LOG, "a");
+
+	if (f != NULL)
+	{
+	    fprintf(f, "\n*****************************\n\n\n\n\tCompiling regexp \"%s\" ... hold on !\n", expr);
+	    fclose(f);
+	}
+    }
+#endif
+
+    /*
+     * PASS 1
+     * Count number of NFA states in "nstate". Do not build the NFA.
+     */
+    post2nfa(postfix, post_ptr, TRUE);
+
+    /* allocate the regprog with space for the compiled regexp */
+    prog_size = sizeof(nfa_regprog_T) + sizeof(nfa_state_T) * (nstate - 1);
+    prog = (nfa_regprog_T *)lalloc(prog_size, TRUE);
+    if (prog == NULL)
+	goto fail;
+    state_ptr = prog->state;
+
+    /*
+     * PASS 2
+     * Build the NFA
+     */
+    prog->start = post2nfa(postfix, post_ptr, FALSE);
+    if (prog->start == NULL)
+	goto fail;
+
+    prog->regflags = regflags;
+    prog->engine = &nfa_regengine;
+    prog->nstate = nstate;
+    prog->has_zend = nfa_has_zend;
+    prog->has_backref = nfa_has_backref;
+    prog->nsubexp = regnpar;
+
+    nfa_postprocess(prog);
+
+    prog->reganch = nfa_get_reganch(prog->start, 0);
+    prog->regstart = nfa_get_regstart(prog->start, 0);
+    prog->match_text = nfa_get_match_text(prog->start);
+
+#ifdef ENABLE_LOG
+    nfa_postfix_dump(expr, OK);
+    nfa_dump(prog);
+#endif
+#ifdef FEAT_SYN_HL
+    /* Remember whether this pattern has any \z specials in it. */
+    prog->reghasz = re_has_z;
+#endif
+#ifdef DEBUG
+    prog->pattern = vim_strsave(expr);
+    nfa_regengine.expr = NULL;
+#endif
+
+out:
+    vim_free(post_start);
+    post_start = post_ptr = post_end = NULL;
+    state_ptr = NULL;
+    return (regprog_T *)prog;
+
+fail:
+    vim_free(prog);
+    prog = NULL;
+#ifdef ENABLE_LOG
+    nfa_postfix_dump(expr, FAIL);
+#endif
+#ifdef DEBUG
+    nfa_regengine.expr = NULL;
+#endif
+    goto out;
+}
+
+/*
+ * Free a compiled regexp program, returned by nfa_regcomp().
+ */
+    static void
+nfa_regfree(prog)
+    regprog_T   *prog;
+{
+    if (prog != NULL)
+    {
+	vim_free(((nfa_regprog_T *)prog)->match_text);
+#ifdef DEBUG
+	vim_free(((nfa_regprog_T *)prog)->pattern);
+#endif
+	vim_free(prog);
+    }
+}
+
+/*
+ * Match a regexp against a string.
+ * "rmp->regprog" is a compiled regexp as returned by nfa_regcomp().
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return TRUE if there is a match, FALSE if not.
+ */
+    static int
+nfa_regexec(rmp, line, col)
+    regmatch_T	*rmp;
+    char_u	*line;	/* string to match against */
+    colnr_T	col;	/* column to start looking for match */
+{
+    reg_match = rmp;
+    reg_mmatch = NULL;
+    reg_maxline = 0;
+    reg_line_lbr = FALSE;
+    reg_buf = curbuf;
+    reg_win = NULL;
+    ireg_ic = rmp->rm_ic;
+#ifdef FEAT_MBYTE
+    ireg_icombine = FALSE;
+#endif
+    ireg_maxcol = 0;
+    return (nfa_regexec_both(line, col) != 0);
+}
+
+#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
+
+static int  nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
+
+/*
+ * Like nfa_regexec(), but consider a "\n" in "line" to be a line break.
+ */
+    static int
+nfa_regexec_nl(rmp, line, col)
+    regmatch_T	*rmp;
+    char_u	*line;	/* string to match against */
+    colnr_T	col;	/* column to start looking for match */
+{
+    reg_match = rmp;
+    reg_mmatch = NULL;
+    reg_maxline = 0;
+    reg_line_lbr = TRUE;
+    reg_buf = curbuf;
+    reg_win = NULL;
+    ireg_ic = rmp->rm_ic;
+#ifdef FEAT_MBYTE
+    ireg_icombine = FALSE;
+#endif
+    ireg_maxcol = 0;
+    return (nfa_regexec_both(line, col) != 0);
+}
+#endif
+
+
+/*
+ * Match a regexp against multiple lines.
+ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+ * Uses curbuf for line count and 'iskeyword'.
+ *
+ * Return zero if there is no match.  Return number of lines contained in the
+ * match otherwise.
+ *
+ * Note: the body is the same as bt_regexec() except for nfa_regexec_both()
+ *
+ * ! Also NOTE : match may actually be in another line. e.g.:
+ * when r.e. is \nc, cursor is at 'a' and the text buffer looks like
+ *
+ * +-------------------------+
+ * |a                        |
+ * |b                        |
+ * |c                        |
+ * |                         |
+ * +-------------------------+
+ *
+ * then nfa_regexec_multi() returns 3. while the original
+ * vim_regexec_multi() returns 0 and a second call at line 2 will return 2.
+ *
+ * FIXME if this behavior is not compatible.
+ */
+    static long
+nfa_regexec_multi(rmp, win, buf, lnum, col, tm)
+    regmmatch_T	*rmp;
+    win_T	*win;		/* window in which to search or NULL */
+    buf_T	*buf;		/* buffer in which to search */
+    linenr_T	lnum;		/* nr of line to start looking for match */
+    colnr_T	col;		/* column to start looking for match */
+    proftime_T	*tm UNUSED;	/* timeout limit or NULL */
+{
+    reg_match = NULL;
+    reg_mmatch = rmp;
+    reg_buf = buf;
+    reg_win = win;
+    reg_firstlnum = lnum;
+    reg_maxline = reg_buf->b_ml.ml_line_count - lnum;
+    reg_line_lbr = FALSE;
+    ireg_ic = rmp->rmm_ic;
+#ifdef FEAT_MBYTE
+    ireg_icombine = FALSE;
+#endif
+    ireg_maxcol = rmp->rmm_maxcol;
+
+    return nfa_regexec_both(NULL, col);
+}
+
+#ifdef DEBUG
+# undef ENABLE_LOG
+#endif
diff -Naur vim73.orig/src/screen.c vim73/src/screen.c
--- vim73.orig/src/screen.c	2010-08-13 13:21:27.000000000 +0000
+++ vim73/src/screen.c	2013-08-04 19:09:11.020609293 +0000
@@ -89,6 +89,9 @@
 
 #include "vim.h"
 
+#define MB_FILLER_CHAR '<'  /* character used when a double-width character
+			     * doesn't fit. */
+
 /*
  * The attributes that are actually active for writing to the screen.
  */
@@ -265,6 +268,151 @@
 }
 
 /*
+ * Redraw as soon as possible.  When the command line is not scrolled redraw
+ * right away and restore what was on the command line.
+ * Return a code indicating what happened.
+ */
+    int
+redraw_asap(type)
+    int		type;
+{
+    int		rows;
+    int		r;
+    int		ret = 0;
+    schar_T	*screenline;	/* copy from ScreenLines[] */
+    sattr_T	*screenattr;	/* copy from ScreenAttrs[] */
+#ifdef FEAT_MBYTE
+    int		i;
+    u8char_T	*screenlineUC = NULL;	/* copy from ScreenLinesUC[] */
+    u8char_T	*screenlineC[MAX_MCO];	/* copy from ScreenLinesC[][] */
+    schar_T	*screenline2 = NULL;	/* copy from ScreenLines2[] */
+#endif
+
+    redraw_later(type);
+    if (msg_scrolled || (State != NORMAL && State != NORMAL_BUSY))
+	return ret;
+
+    /* Allocate space to save the text displayed in the command line area. */
+    rows = Rows - cmdline_row;
+    screenline = (schar_T *)lalloc(
+			   (long_u)(rows * Columns * sizeof(schar_T)), FALSE);
+    screenattr = (sattr_T *)lalloc(
+			   (long_u)(rows * Columns * sizeof(sattr_T)), FALSE);
+    if (screenline == NULL || screenattr == NULL)
+	ret = 2;
+#ifdef FEAT_MBYTE
+    if (enc_utf8)
+    {
+	screenlineUC = (u8char_T *)lalloc(
+			  (long_u)(rows * Columns * sizeof(u8char_T)), FALSE);
+	if (screenlineUC == NULL)
+	    ret = 2;
+	for (i = 0; i < p_mco; ++i)
+	{
+	    screenlineC[i] = (u8char_T *)lalloc(
+			  (long_u)(rows * Columns * sizeof(u8char_T)), FALSE);
+	    if (screenlineC[i] == NULL)
+		ret = 2;
+	}
+    }
+    if (enc_dbcs == DBCS_JPNU)
+    {
+	screenline2 = (schar_T *)lalloc(
+			   (long_u)(rows * Columns * sizeof(schar_T)), FALSE);
+	if (screenline2 == NULL)
+	    ret = 2;
+    }
+#endif
+
+    if (ret != 2)
+    {
+	/* Save the text displayed in the command line area. */
+	for (r = 0; r < rows; ++r)
+	{
+	    mch_memmove(screenline + r * Columns,
+			ScreenLines + LineOffset[cmdline_row + r],
+			(size_t)Columns * sizeof(schar_T));
+	    mch_memmove(screenattr + r * Columns,
+			ScreenAttrs + LineOffset[cmdline_row + r],
+			(size_t)Columns * sizeof(sattr_T));
+#ifdef FEAT_MBYTE
+	    if (enc_utf8)
+	    {
+		mch_memmove(screenlineUC + r * Columns,
+			    ScreenLinesUC + LineOffset[cmdline_row + r],
+			    (size_t)Columns * sizeof(u8char_T));
+		for (i = 0; i < p_mco; ++i)
+		    mch_memmove(screenlineC[i] + r * Columns,
+				ScreenLinesC[r] + LineOffset[cmdline_row + r],
+				(size_t)Columns * sizeof(u8char_T));
+	    }
+	    if (enc_dbcs == DBCS_JPNU)
+		mch_memmove(screenline2 + r * Columns,
+			    ScreenLines2 + LineOffset[cmdline_row + r],
+			    (size_t)Columns * sizeof(schar_T));
+#endif
+	}
+
+	update_screen(0);
+	ret = 3;
+
+	if (must_redraw == 0)
+	{
+	    int	off = (int)(current_ScreenLine - ScreenLines);
+
+	    /* Restore the text displayed in the command line area. */
+	    for (r = 0; r < rows; ++r)
+	    {
+		mch_memmove(current_ScreenLine,
+			    screenline + r * Columns,
+			    (size_t)Columns * sizeof(schar_T));
+		mch_memmove(ScreenAttrs + off,
+			    screenattr + r * Columns,
+			    (size_t)Columns * sizeof(sattr_T));
+#ifdef FEAT_MBYTE
+		if (enc_utf8)
+		{
+		    mch_memmove(ScreenLinesUC + off,
+				screenlineUC + r * Columns,
+				(size_t)Columns * sizeof(u8char_T));
+		    for (i = 0; i < p_mco; ++i)
+			mch_memmove(ScreenLinesC[i] + off,
+				    screenlineC[i] + r * Columns,
+				    (size_t)Columns * sizeof(u8char_T));
+		}
+		if (enc_dbcs == DBCS_JPNU)
+		    mch_memmove(ScreenLines2 + off,
+				screenline2 + r * Columns,
+				(size_t)Columns * sizeof(schar_T));
+#endif
+		SCREEN_LINE(cmdline_row + r, 0, Columns, Columns, FALSE);
+	    }
+	    ret = 4;
+	}
+    }
+
+    vim_free(screenline);
+    vim_free(screenattr);
+#ifdef FEAT_MBYTE
+    if (enc_utf8)
+    {
+	vim_free(screenlineUC);
+	for (i = 0; i < p_mco; ++i)
+	    vim_free(screenlineC[i]);
+    }
+    if (enc_dbcs == DBCS_JPNU)
+	vim_free(screenline2);
+#endif
+
+    /* Show the intro message when appropriate. */
+    maybe_intro_message();
+
+    setcursor();
+
+    return ret;
+}
+
+/*
  * Changed something in the current window, at buffer line "lnum", that
  * requires that line and possibly other lines to be redrawn.
  * Used when entering/leaving Insert mode with the cursor on a folded line.
@@ -516,8 +664,10 @@
 # endif
 # ifdef FEAT_CLIPBOARD
 		/* When Visual area changed, may have to update selection. */
-		if (clip_star.available && clip_isautosel())
-		    clip_update_selection();
+		if (clip_star.available && clip_isautosel_star())
+		    clip_update_selection(&clip_star);
+		if (clip_plus.available && clip_isautosel_plus())
+		    clip_update_selection(&clip_plus);
 # endif
 #ifdef FEAT_GUI
 		/* Remove the cursor before starting to do anything, because
@@ -543,6 +693,11 @@
 #if defined(FEAT_SEARCH_EXTRA)
     end_search_hl();
 #endif
+#ifdef FEAT_INS_EXPAND
+    /* May need to redraw the popup menu. */
+    if (pum_visible())
+	pum_redraw();
+#endif
 
 #ifdef FEAT_WINDOWS
     /* Reset b_mod_set flags.  Going through all windows is probably faster
@@ -564,13 +719,8 @@
 	showmode();
 
     /* May put up an introductory message when not editing a file */
-    if (!did_intro && bufempty()
-	    && curbuf->b_fname == NULL
-#ifdef FEAT_WINDOWS
-	    && firstwin->w_next == NULL
-#endif
-	    && vim_strchr(p_shm, SHM_INTRO) == NULL)
-	intro_message(FALSE);
+    if (!did_intro)
+	maybe_intro_message();
     did_intro = TRUE;
 
 #ifdef FEAT_GUI
@@ -764,9 +914,13 @@
 	    doit = TRUE;
     }
 
-    /* Return when there is nothing to do or screen updating already
-     * happening. */
-    if (!doit || updating_screen)
+    /* Return when there is nothing to do, screen updating is already
+     * happening (recursive call) or still starting up. */
+    if (!doit || updating_screen
+#ifdef FEAT_GUI
+	    || gui.starting
+#endif
+	    || starting)
 	return;
 
     /* update all windows that need updating */
@@ -807,8 +961,10 @@
 
 #ifdef FEAT_CLIPBOARD
     /* When Visual area changed, may have to update selection. */
-    if (clip_star.available && clip_isautosel())
-	clip_update_selection();
+    if (clip_star.available && clip_isautosel_star())
+	clip_update_selection(&clip_star);
+    if (clip_plus.available && clip_isautosel_plus())
+	clip_update_selection(&clip_plus);
 #endif
 
     win_update(wp);
@@ -1622,6 +1778,10 @@
 # endif
 					syntax_check_changed(lnum)))
 #endif
+#ifdef FEAT_SEARCH_EXTRA
+				/* match in fixed position might need redraw */
+				||  wp->w_match_head != NULL
+#endif
 				)))))
 	{
 #ifdef FEAT_SEARCH_EXTRA
@@ -1633,11 +1793,11 @@
 	     * When at start of changed lines: May scroll following lines
 	     * up or down to minimize redrawing.
 	     * Don't do this when the change continues until the end.
-	     * Don't scroll when dollar_vcol is non-zero, keep the "$".
+	     * Don't scroll when dollar_vcol >= 0, keep the "$".
 	     */
 	    if (lnum == mod_top
 		    && mod_bot != MAXLNUM
-		    && !(dollar_vcol != 0 && mod_bot == mod_top + 1))
+		    && !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
 	    {
 		int		old_rows = 0;
 		int		new_rows = 0;
@@ -1864,12 +2024,12 @@
 	    if (row > wp->w_height)	/* past end of screen */
 	    {
 		/* we may need the size of that too long line later on */
-		if (dollar_vcol == 0)
+		if (dollar_vcol == -1)
 		    wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
 		++idx;
 		break;
 	    }
-	    if (dollar_vcol == 0)
+	    if (dollar_vcol == -1)
 		wp->w_lines[idx].wl_size = row - srow;
 	    ++idx;
 #ifdef FEAT_FOLDING
@@ -1986,7 +2146,7 @@
 	    }
 #endif
 	}
-	else if (dollar_vcol == 0)
+	else if (dollar_vcol == -1)
 	    wp->w_botline = lnum;
 
 	/* make sure the rest of the screen is blank */
@@ -2001,7 +2161,7 @@
     wp->w_old_botfill = wp->w_botfill;
 #endif
 
-    if (dollar_vcol == 0)
+    if (dollar_vcol == -1)
     {
 	/*
 	 * There is a trick with w_botline.  If we invalidate it on each
@@ -2308,18 +2468,28 @@
 	{
 	    int	    w = number_width(wp);
 	    long num;
+	    char *fmt = "%*ld ";
 
 	    if (len > w + 1)
 		len = w + 1;
 
-	    if (wp->w_p_nu)
-		/* 'number' */
+	    if (wp->w_p_nu && !wp->w_p_rnu)
+		/* 'number' + 'norelativenumber' */
 		num = (long)lnum;
 	    else
+	    {
 		/* 'relativenumber', don't use negative numbers */
-		num = (long)abs((int)get_cursor_rel_lnum(wp, lnum));
+		num = labs((long)get_cursor_rel_lnum(wp, lnum));
+		if (num == 0 && wp->w_p_nu && wp->w_p_rnu)
+		{
+		    /* 'number' + 'relativenumber': cursor line shows absolute
+		     * line number */
+		    num = lnum;
+		    fmt = "%-*ld ";
+		}
+	    }
 
-	    sprintf((char *)buf, "%*ld ", w, num);
+	    sprintf((char *)buf, fmt, w, num);
 #ifdef FEAT_RIGHTLEFT
 	    if (wp->w_p_rl)
 		/* the line number isn't reversed */
@@ -2531,7 +2701,9 @@
 		/* Visual block mode: highlight the chars part of the block */
 		if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
 		{
-		    if (wp->w_old_cursor_lcol + txtcol < (colnr_T)W_WIDTH(wp))
+		    if (wp->w_old_cursor_lcol != MAXCOL
+			     && wp->w_old_cursor_lcol + txtcol
+						       < (colnr_T)W_WIDTH(wp))
 			len = wp->w_old_cursor_lcol;
 		    else
 			len = W_WIDTH(wp) - txtcol;
@@ -2991,7 +3163,10 @@
 	    area_highlighting = TRUE;
 	    attr = hl_attr(HLF_V);
 #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-	    if (clip_star.available && !clip_star.owned && clip_isautosel())
+	    if ((clip_star.available && !clip_star.owned
+						     && clip_isautosel_star())
+		    || (clip_plus.available && !clip_plus.owned
+						    && clip_isautosel_plus()))
 		attr = hl_attr(HLF_VNC);
 #endif
 	}
@@ -3222,8 +3397,7 @@
 		/* no bad word found at line start, don't check until end of a
 		 * word */
 		spell_hlf = HLF_COUNT;
-		word_end = (int)(spell_to_word_end(ptr, wp)
-								  - line + 1);
+		word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
 	    }
 	    else
 	    {
@@ -3332,9 +3506,11 @@
 #endif
 
 #ifdef FEAT_SYN_HL
-    /* Cursor line highlighting for 'cursorline'.  Not when Visual mode is
-     * active, because it's not clear what is selected then. */
-    if (wp->w_p_cul && lnum == wp->w_cursor.lnum && !VIsual_active)
+    /* Cursor line highlighting for 'cursorline' in the current window.  Not
+     * when Visual mode is active, because it's not clear what is selected
+     * then. */
+    if (wp->w_p_cul && lnum == wp->w_cursor.lnum
+					 && !(wp == curwin  && VIsual_active))
     {
 	line_attr = hl_attr(HLF_CUL);
 	area_highlighting = TRUE;
@@ -3405,9 +3581,9 @@
 # endif
 		   )
 		{
-		    int_u	text_sign;
+		    int	text_sign;
 # ifdef FEAT_SIGN_ICONS
-		    int_u	icon_sign;
+		    int	icon_sign;
 # endif
 
 		    /* Draw two cells with the sign value or blank. */
@@ -3469,16 +3645,24 @@
 			    )
 		    {
 			long num;
+			char *fmt = "%*ld ";
 
-			if (wp->w_p_nu)
-			    /* 'number' */
+			if (wp->w_p_nu && !wp->w_p_rnu)
+			    /* 'number' + 'norelativenumber' */
 			    num = (long)lnum;
 			else
+			{
 			    /* 'relativenumber', don't use negative numbers */
-			    num = (long)abs((int)get_cursor_rel_lnum(wp,
-								    lnum));
+			    num = labs((long)get_cursor_rel_lnum(wp, lnum));
+			    if (num == 0 && wp->w_p_nu && wp->w_p_rnu)
+			    {
+				/* 'number' + 'relativenumber' */
+				num = lnum;
+				fmt = "%-*ld ";
+			    }
+			}
 
-			sprintf((char *)extra, "%*ld ",
+			sprintf((char *)extra, fmt,
 						number_width(wp), num);
 			if (wp->w_skipcol > 0)
 			    for (p_extra = extra; *p_extra == ' '; ++p_extra)
@@ -3496,9 +3680,12 @@
 		    char_attr = hl_attr(HLF_N);
 #ifdef FEAT_SYN_HL
 		    /* When 'cursorline' is set highlight the line number of
-		     * the current line differently. */
-		    if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
-			char_attr = hl_combine_attr(hl_attr(HLF_CUL), char_attr);
+		     * the current line differently.
+		     * TODO: Can we use CursorLine instead of CursorLineNr
+		     * when CursorLineNr isn't set? */
+		    if ((wp->w_p_cul || wp->w_p_rnu)
+						 && lnum == wp->w_cursor.lnum)
+			char_attr = hl_attr(HLF_CLN);
 #endif
 		}
 	    }
@@ -3537,6 +3724,11 @@
 		     * required when 'linebreak' is also set. */
 		    if (tocol == vcol)
 			tocol += n_extra;
+#ifdef FEAT_SYN_HL
+		    /* combine 'showbreak' with 'cursorline' */
+		    if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+			char_attr = hl_combine_attr(char_attr, HLF_CLN);
+#endif
 		}
 # endif
 	    }
@@ -3559,7 +3751,7 @@
 	}
 
 	/* When still displaying '$' of change command, stop at cursor */
-	if (dollar_vcol != 0 && wp == curwin
+	if (dollar_vcol >= 0 && wp == curwin
 		   && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
 #ifdef FEAT_DIFF
 				   && filler_todo <= 0
@@ -4006,11 +4198,11 @@
 
 		/* If a double-width char doesn't fit at the left side display
 		 * a '<' in the first column.  Don't do this for unprintable
-		 * charactes. */
+		 * characters. */
 		if (n_skip > 0 && mb_l > 1 && n_extra == 0)
 		{
 		    n_extra = 1;
-		    c_extra = '<';
+		    c_extra = MB_FILLER_CHAR;
 		    c = ' ';
 		    if (area_attr == 0 && search_attr == 0)
 		    {
@@ -4253,7 +4445,20 @@
 		{
 		    /* tab amount depends on current column */
 		    n_extra = (int)wp->w_buffer->b_p_ts
-				   - vcol % (int)wp->w_buffer->b_p_ts - 1;
+					- vcol % (int)wp->w_buffer->b_p_ts - 1;
+#ifdef FEAT_CONCEAL
+		    /* Tab alignment should be identical regardless of
+		     * 'conceallevel' value. So tab compensates of all
+		     * previous concealed characters, and thus resets vcol_off
+		     * and boguscols accumulated so far in the line. Note that
+		     * the tab can be longer than 'tabstop' when there
+		     * are concealed characters. */
+		    n_extra += vcol_off;
+		    vcol -= vcol_off;
+		    vcol_off = 0;
+		    col -= boguscols;
+		    boguscols = 0;
+#endif
 #ifdef FEAT_MBYTE
 		    mb_utf8 = FALSE;	/* don't draw as UTF-8 */
 #endif
@@ -4570,6 +4775,15 @@
 	    c = lcs_prec;
 	    lcs_prec_todo = NUL;
 #ifdef FEAT_MBYTE
+	    if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
+	    {
+		/* Double-width character being overwritten by the "precedes"
+		 * character, need to fill up half the character. */
+		c_extra = MB_FILLER_CHAR;
+		n_extra = 1;
+		n_attr = 2;
+		extra_attr = hl_attr(HLF_AT);
+	    }
 	    mb_c = c;
 	    if (enc_utf8 && (*mb_char2len)(c) > 1)
 	    {
@@ -5307,8 +5521,9 @@
 		    && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
 			|| (ScreenLinesUC[off_from] != 0
 			    && comp_char_differs(off_from, off_to))
-			|| (cols > 1 && ScreenLines[off_from + 1]
-						 != ScreenLines[off_to + 1])))
+			|| ((*mb_off2cells)(off_from, off_from + cols) > 1
+			    && ScreenLines[off_from + 1]
+						  != ScreenLines[off_to + 1])))
 #endif
 	       ))
 	return TRUE;
@@ -5366,6 +5581,12 @@
 # define CHAR_CELLS 1
 #endif
 
+    /* Check for illegal row and col, just in case. */
+    if (row >= Rows)
+	row = Rows - 1;
+    if (endcol > Columns)
+	endcol = Columns;
+
 # ifdef FEAT_CLIPBOARD
     clip_may_clear_selection(row, row);
 # endif
@@ -6211,7 +6432,7 @@
 	}
 	if (wp->w_buffer->b_p_ro)
 	{
-	    STRCPY(p + len, "[RO]");
+	    STRCPY(p + len, _("[RO]"));
 	    len += 4;
 	}
 
@@ -6436,6 +6657,8 @@
     struct	stl_hlrec hltab[STL_MAX_ITEM];
     struct	stl_hlrec tabtab[STL_MAX_ITEM];
     int		use_sandbox = FALSE;
+    win_T	*ewp;
+    int		p_crb_save;
 
     /* setup environment for the task at hand */
     if (wp == NULL)
@@ -6514,16 +6737,31 @@
     if (maxwidth <= 0)
 	return;
 
+    /* Temporarily reset 'cursorbind', we don't want a side effect from moving
+     * the cursor away and back. */
+    ewp = wp == NULL ? curwin : wp;
+    p_crb_save = ewp->w_p_crb;
+    ewp->w_p_crb = FALSE;
+
     /* Make a copy, because the statusline may include a function call that
      * might change the option value and free the memory. */
     stl = vim_strsave(stl);
-    width = build_stl_str_hl(wp == NULL ? curwin : wp,
-				buf, sizeof(buf),
+    width = build_stl_str_hl(ewp, buf, sizeof(buf),
 				stl, use_sandbox,
 				fillchar, maxwidth, hltab, tabtab);
     vim_free(stl);
-    len = (int)STRLEN(buf);
+    ewp->w_p_crb = p_crb_save;
 
+    /* Make all characters printable. */
+    p = transstr(buf);
+    if (p != NULL)
+    {
+	vim_strncpy(buf, p, sizeof(buf) - 1);
+	vim_free(p);
+    }
+
+    /* fill up with "fillchar" */
+    len = (int)STRLEN(buf);
     while (width < maxwidth && len < (int)sizeof(buf) - 1)
     {
 #ifdef FEAT_MBYTE
@@ -6591,16 +6829,17 @@
     int	    row, col;
     int	    attr;
 {
-#ifdef FEAT_MBYTE
     char_u	buf[MB_MAXBYTES + 1];
 
-    buf[(*mb_char2bytes)(c, buf)] = NUL;
-#else
-    char_u	buf[2];
-
-    buf[0] = c;
-    buf[1] = NUL;
+#ifdef FEAT_MBYTE
+    if (has_mbyte)
+	buf[(*mb_char2bytes)(c, buf)] = NUL;
+    else
 #endif
+    {
+	buf[0] = c;
+	buf[1] = NUL;
+    }
     screen_puts(buf, row, col, attr);
 }
 
@@ -6994,7 +7233,7 @@
 {
     if (search_hl.rm.regprog != NULL)
     {
-	vim_free(search_hl.rm.regprog);
+	vim_regfree(search_hl.rm.regprog);
 	search_hl.rm.regprog = NULL;
     }
 }
@@ -7196,7 +7435,7 @@
 	    if (shl == &search_hl)
 	    {
 		/* don't free regprog in the match list, it's a copy */
-		vim_free(shl->rm.regprog);
+		vim_regfree(shl->rm.regprog);
 		no_hlsearch = TRUE;
 	    }
 	    shl->rm.regprog = NULL;
@@ -7827,15 +8066,15 @@
 
 /*
  * screen_valid -  allocate screen buffers if size changed
- *   If "clear" is TRUE: clear screen if it has been resized.
+ *   If "doclear" is TRUE: clear screen if it has been resized.
  *	Returns TRUE if there is a valid screen to write to.
  *	Returns FALSE when starting up and screen not initialized yet.
  */
     int
-screen_valid(clear)
-    int	    clear;
+screen_valid(doclear)
+    int	    doclear;
 {
-    screenalloc(clear);	    /* allocate screen buffers if size changed */
+    screenalloc(doclear);	   /* allocate screen buffers if size changed */
     return (ScreenLines != NULL);
 }
 
@@ -7850,8 +8089,8 @@
  * final size of the shell is needed.
  */
     void
-screenalloc(clear)
-    int	    clear;
+screenalloc(doclear)
+    int	    doclear;
 {
     int		    new_row, old_row;
 #ifdef FEAT_GUI
@@ -8047,7 +8286,7 @@
 	     * (used when resizing the window at the "--more--" prompt or when
 	     * executing an external command, for the GUI).
 	     */
-	    if (!clear)
+	    if (!doclear)
 	    {
 		(void)vim_memset(new_ScreenLines + new_row * Columns,
 				      ' ', (size_t)Columns * sizeof(schar_T));
@@ -8137,7 +8376,7 @@
     screen_Columns = Columns;
 
     must_redraw = CLEAR;	/* need to clear the screen later */
-    if (clear)
+    if (doclear)
 	screenclear2();
 
 #ifdef FEAT_GUI
@@ -9018,7 +9257,7 @@
 	    || (wp != NULL && wp->w_width != Columns)
 # endif
        )
-	clip_clear_selection();
+	clip_clear_selection(&clip_star);
     else
 	clip_scroll_selection(-line_count);
 #endif
@@ -9239,7 +9478,7 @@
 	    || (wp != NULL && wp->w_width != Columns)
 # endif
        )
-	clip_clear_selection();
+	clip_clear_selection(&clip_star);
     else
 	clip_scroll_selection(line_count);
 #endif
@@ -9826,7 +10065,7 @@
     buf_T	*buf;
 {
     if (buf_spname(buf) != NULL)
-	STRCPY(NameBuff, buf_spname(buf));
+	vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
     else
 	home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
     trans_characters(NameBuff, MAXPATHL);
@@ -10175,12 +10414,12 @@
     int		n;
     linenr_T	lnum;
 
-    if (wp->w_p_nu)
-	/* 'number' */
-	lnum = wp->w_buffer->b_ml.ml_line_count;
-    else
-	/* 'relativenumber' */
+    if (wp->w_p_rnu && !wp->w_p_nu)
+	/* cursor line shows "0" */
 	lnum = wp->w_height;
+    else
+	/* cursor line shows absolute line number */
+	lnum = wp->w_buffer->b_ml.ml_line_count;
 
     if (lnum == wp->w_nrwidth_line_count)
 	return wp->w_nrwidth_width;
@@ -10201,3 +10440,23 @@
     return n;
 }
 #endif
+
+/*
+ * Return the current cursor column. This is the actual position on the
+ * screen. First column is 0.
+ */
+    int
+screen_screencol()
+{
+    return screen_cur_col;
+}
+
+/*
+ * Return the current cursor row. This is the actual position on the screen.
+ * First row is 0.
+ */
+    int
+screen_screenrow()
+{
+    return screen_cur_row;
+}
diff -Naur vim73.orig/src/search.c vim73/src/search.c
--- vim73.orig/src/search.c	2010-07-14 14:49:41.000000000 +0000
+++ vim73/src/search.c	2013-08-04 19:09:11.023942616 +0000
@@ -73,7 +73,7 @@
 {
     char_u	    *pat;	/* the pattern (in allocated memory) or NULL */
     int		    magic;	/* magicness of the pattern */
-    int		    no_scs;	/* no smarcase for this pattern */
+    int		    no_scs;	/* no smartcase for this pattern */
     struct soffset  off;
 };
 
@@ -572,7 +572,8 @@
 	extra_col = 0;
 #ifdef FEAT_MBYTE
     /* Watch out for the "col" being MAXCOL - 2, used in a closed fold. */
-    else if (has_mbyte && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
+    else if (dir != BACKWARD && has_mbyte
+		    && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
 						     && pos->col < MAXCOL - 2)
     {
 	ptr = ml_get_buf(buf, pos->lnum, FALSE) + pos->col;
@@ -726,6 +727,8 @@
 					++matchcol;
 				}
 			    }
+			    if (matchcol == 0 && (options & SEARCH_START))
+				break;
 			    if (ptr[matchcol] == NUL
 				    || (nmatched = vim_regexec_multi(&regmatch,
 					      win, buf, lnum + matchpos.lnum,
@@ -866,7 +869,7 @@
 		    /* With the SEARCH_END option move to the last character
 		     * of the match.  Don't do it for an empty match, end
 		     * should be same as start then. */
-		    if (options & SEARCH_END && !(options & SEARCH_NOOF)
+		    if ((options & SEARCH_END) && !(options & SEARCH_NOOF)
 			    && !(matchpos.lnum == endpos.lnum
 				&& matchpos.col == endpos.col))
 		    {
@@ -969,7 +972,7 @@
     }
     while (--count > 0 && found);   /* stop after count matches or no match */
 
-    vim_free(regmatch.regprog);
+    vim_regfree(regmatch.regprog);
 
     called_emsg |= save_called_emsg;
 
@@ -1161,12 +1164,20 @@
 	{
 	    if (spats[RE_SEARCH].pat == NULL)	    /* no previous pattern */
 	    {
-		EMSG(_(e_noprevre));
-		retval = 0;
-		goto end_do_search;
+		pat = spats[RE_SUBST].pat;
+		if (pat == NULL)
+		{
+		    EMSG(_(e_noprevre));
+		    retval = 0;
+		    goto end_do_search;
+		}
+		searchstr = pat;
+	    }
+	    else
+	    {
+		/* make search_regcomp() use spats[RE_SEARCH].pat */
+		searchstr = (char_u *)"";
 	    }
-	    /* make search_regcomp() use spats[RE_SEARCH].pat */
-	    searchstr = (char_u *)"";
 	}
 
 	if (pat != NULL && *pat != NUL)	/* look for (new) offset */
@@ -1538,8 +1549,9 @@
     int			col;
     char_u		*p;
     int			len;
+    int			stop = TRUE;
 #ifdef FEAT_MBYTE
-    static char_u	bytes[MB_MAXBYTES];
+    static char_u	bytes[MB_MAXBYTES + 1];
     static int		bytelen = 1;	/* >1 for multi-byte char */
 #endif
 
@@ -1572,6 +1584,12 @@
 	t_cmd = last_t_cmd;
 	c = lastc;
 	/* For multi-byte re-use last bytes[] and bytelen. */
+
+	/* Force a move of at least one char, so ";" and "," will move the
+	 * cursor, even if the cursor is right in front of char we are looking
+	 * at. */
+	if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1 && t_cmd)
+	    stop = FALSE;
     }
 
     if (dir == BACKWARD)
@@ -1604,14 +1622,15 @@
 		}
 		if (bytelen == 1)
 		{
-		    if (p[col] == c)
+		    if (p[col] == c && stop)
 			break;
 		}
 		else
 		{
-		    if (vim_memcmp(p + col, bytes, bytelen) == 0)
+		    if (vim_memcmp(p + col, bytes, bytelen) == 0 && stop)
 			break;
 		}
+		stop = TRUE;
 	    }
 	}
 	else
@@ -1621,8 +1640,9 @@
 	    {
 		if ((col += dir) < 0 || col >= len)
 		    return FAIL;
-		if (p[col] == c)
+		if (p[col] == c && stop)
 		    break;
+		stop = TRUE;
 	    }
 	}
     }
@@ -1769,28 +1789,8 @@
     }
     else if (initc != '#' && initc != NUL)
     {
-	/* 'matchpairs' is "x:y,x:y" */
-	for (ptr = curbuf->b_p_mps; *ptr; ptr += 2)
-	{
-	    if (*ptr == initc)
-	    {
-		findc = initc;
-		initc = ptr[2];
-		backwards = TRUE;
-		break;
-	    }
-	    ptr += 2;
-	    if (*ptr == initc)
-	    {
-		findc = initc;
-		initc = ptr[-2];
-		backwards = FALSE;
-		break;
-	    }
-	    if (ptr[1] != ',')
-		break;
-	}
-	if (!findc)		/* invalid initc! */
+	find_mps_values(&initc, &findc, &backwards, TRUE);
+	if (findc == NUL)
 	    return NULL;
     }
     /*
@@ -1869,36 +1869,14 @@
 		    --pos.col;
 		for (;;)
 		{
-		    initc = linep[pos.col];
+		    initc = PTR2CHAR(linep + pos.col);
 		    if (initc == NUL)
 			break;
 
-		    for (ptr = curbuf->b_p_mps; *ptr; ++ptr)
-		    {
-			if (*ptr == initc)
-			{
-			    findc = ptr[2];
-			    backwards = FALSE;
-			    break;
-			}
-			ptr += 2;
-			if (*ptr == initc)
-			{
-			    findc = ptr[-2];
-			    backwards = TRUE;
-			    break;
-			}
-			if (!*++ptr)
-			    break;
-		    }
+		    find_mps_values(&initc, &findc, &backwards, FALSE);
 		    if (findc)
 			break;
-#ifdef FEAT_MBYTE
-		    if (has_mbyte)
-			pos.col += (*mb_ptr2len)(linep + pos.col);
-		    else
-#endif
-			++pos.col;
+		    pos.col += MB_PTR2LEN(linep + pos.col);
 		}
 		if (!findc)
 		{
@@ -2243,7 +2221,8 @@
 	 *   inquote if the number of quotes in a line is even, unless this
 	 *   line or the previous one ends in a '\'.  Complicated, isn't it?
 	 */
-	switch (c = linep[pos.col])
+	c = PTR2CHAR(linep + pos.col);
+	switch (c)
 	{
 	case NUL:
 	    /* at end of line without trailing backslash, reset inquote */
@@ -2385,24 +2364,24 @@
     {
 	if (vim_strchr(p, ';') != NULL) /* there may be comments */
 	{
-	    int instr = FALSE;	/* inside of string */
+	    int in_str = FALSE;	/* inside of string */
 
 	    p = line;		/* scan from start */
 	    while ((p = vim_strpbrk(p, (char_u *)"\";")) != NULL)
 	    {
 		if (*p == '"')
 		{
-		    if (instr)
+		    if (in_str)
 		    {
 			if (*(p - 1) != '\\') /* skip escaped quote */
-			    instr = FALSE;
+			    in_str = FALSE;
 		    }
 		    else if (p == line || ((p - line) >= 2
 				      /* skip #\" form */
 				      && *(p - 1) != '\\' && *(p - 2) != '#'))
-			instr = TRUE;
+			in_str = TRUE;
 		}
-		else if (!instr && ((p - line) < 2
+		else if (!in_str && ((p - line) < 2
 				    || (*(p - 1) != '\\' && *(p - 2) != '#')))
 		    break;	/* found! */
 		++p;
@@ -2452,26 +2431,27 @@
      * Only show match for chars in the 'matchpairs' option.
      */
     /* 'matchpairs' is "x:y,x:y" */
-    for (p = curbuf->b_p_mps; *p != NUL; p += 2)
+    for (p = curbuf->b_p_mps; *p != NUL; ++p)
     {
 #ifdef FEAT_RIGHTLEFT
-	if (*p == c && (curwin->w_p_rl ^ p_ri))
+	if (PTR2CHAR(p) == c && (curwin->w_p_rl ^ p_ri))
 	    break;
 #endif
-	p += 2;
-	if (*p == c
+	p += MB_PTR2LEN(p) + 1;
+	if (PTR2CHAR(p) == c
 #ifdef FEAT_RIGHTLEFT
 		&& !(curwin->w_p_rl ^ p_ri)
 #endif
 	   )
 	    break;
-	if (p[1] != ',')
+	p += MB_PTR2LEN(p);
+	if (*p == NUL)
 	    return;
     }
 
     if ((lpos = findmatch(NULL, NUL)) == NULL)	    /* no match, so beep */
 	vim_beep();
-    else if (lpos->lnum >= curwin->w_topline)
+    else if (lpos->lnum >= curwin->w_topline && lpos->lnum < curwin->w_botline)
     {
 	if (!curwin->w_p_wrap)
 	    getvcol(curwin, lpos, NULL, &vcol, NULL);
@@ -2484,8 +2464,8 @@
 	    save_siso = p_siso;
 	    /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
 	     * stop displaying the "$". */
-	    if (dollar_vcol > 0 && dollar_vcol == curwin->w_virtcol)
-		dollar_vcol = 0;
+	    if (dollar_vcol >= 0 && dollar_vcol == curwin->w_virtcol)
+		dollar_vcol = -1;
 	    ++curwin->w_virtcol;	/* do display ')' just before "$" */
 	    update_screen(VALID);	/* show the new char first */
 
@@ -3403,7 +3383,7 @@
 
 #ifdef FEAT_VISUAL
     /*
-     * When visual area is bigger than one character: Extend it.
+     * When the Visual area is bigger than one character: Extend it.
      */
     if (VIsual_active && !equalpos(start_pos, VIsual))
     {
@@ -3491,8 +3471,8 @@
 #endif
 
     /*
-     * If cursor started on blank, check if it is just before the start of the
-     * next sentence.
+     * If the cursor started on a blank, check if it is just before the start
+     * of the next sentence.
      */
     while (c = gchar_pos(&pos), vim_iswhite(c))	/* vim_iswhite() is a macro */
 	incl(&pos);
@@ -3541,7 +3521,7 @@
 #ifdef FEAT_VISUAL
     if (VIsual_active)
     {
-	/* avoid getting stuck with "is" on a single space before a sent. */
+	/* Avoid getting stuck with "is" on a single space before a sentence. */
 	if (equalpos(start_pos, curwin->w_cursor))
 	    goto extend;
 	if (*p_sel == 'e')
@@ -3566,7 +3546,7 @@
 
 /*
  * Find block under the cursor, cursor at end.
- * "what" and "other" are two matching parenthesis/paren/etc.
+ * "what" and "other" are two matching parenthesis/brace/etc.
  */
     int
 current_block(oap, count, include, what, other)
@@ -3901,7 +3881,7 @@
 	curwin->w_cursor = old_pos;
 	goto theend;
     }
-    spat = alloc(len + 29);
+    spat = alloc(len + 31);
     epat = alloc(len + 9);
     if (spat == NULL || epat == NULL)
     {
@@ -3910,7 +3890,7 @@
 	curwin->w_cursor = old_pos;
 	goto theend;
     }
-    sprintf((char *)spat, "<%.*s\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+    sprintf((char *)spat, "<%.*s\\>\\%%(\\s\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
     sprintf((char *)epat, "</%.*s>\\c", len, p);
 
     r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
@@ -4508,6 +4488,206 @@
 
 #endif /* FEAT_TEXTOBJ */
 
+#if defined(FEAT_VISUAL) || defined(PROTO)
+static int is_one_char __ARGS((char_u *pattern));
+
+/*
+ * Find next search match under cursor, cursor at end.
+ * Used while an operator is pending, and in Visual mode.
+ * TODO: redo only works when used in operator pending mode
+ */
+    int
+current_search(count, forward)
+    long	count;
+    int		forward;	/* move forward or backwards */
+{
+    pos_T	start_pos;	/* position before the pattern */
+    pos_T	orig_pos;	/* position of the cursor at beginning */
+    pos_T	pos;		/* position after the pattern */
+    int		i;
+    int		dir;
+    int		result;		/* result of various function calls */
+    char_u	old_p_ws = p_ws;
+    int		flags = 0;
+    pos_T	save_VIsual;
+    int		one_char;
+
+    /* wrapping should not occur */
+    p_ws = FALSE;
+
+    /* Correct cursor when 'selection' is exclusive */
+    if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
+	dec_cursor();
+
+    if (VIsual_active)
+    {
+	orig_pos = curwin->w_cursor;
+	save_VIsual = VIsual;
+
+	pos = curwin->w_cursor;
+	start_pos = VIsual;
+
+	/* make sure, searching further will extend the match */
+	if (VIsual_active)
+	{
+	    if (forward)
+		incl(&pos);
+	    else
+		decl(&pos);
+	}
+    }
+    else
+	orig_pos = pos = start_pos = curwin->w_cursor;
+
+    /* Is the pattern is zero-width? */
+    one_char = is_one_char(spats[last_idx].pat);
+    if (one_char == -1)
+	return FAIL;  /* invalid pattern */
+
+    /*
+     * The trick is to first search backwards and then search forward again,
+     * so that a match at the current cursor position will be correctly
+     * captured.
+     */
+    for (i = 0; i < 2; i++)
+    {
+	if (forward)
+	    dir = i;
+	else
+	    dir = !i;
+
+	flags = 0;
+	if (!dir && !one_char)
+	    flags = SEARCH_END;
+
+	result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
+		spats[last_idx].pat, (long) (i ? count : 1),
+		SEARCH_KEEP | flags, RE_SEARCH, 0, NULL);
+
+	/* First search may fail, but then start searching from the
+	 * beginning of the file (cursor might be on the search match)
+	 * except when Visual mode is active, so that extending the visual
+	 * selection works. */
+	if (!result && i) /* not found, abort */
+	{
+	    curwin->w_cursor = orig_pos;
+	    if (VIsual_active)
+		VIsual = save_VIsual;
+	    p_ws = old_p_ws;
+	    return FAIL;
+	}
+	else if (!i && !result)
+	{
+	    if (forward) /* try again from start of buffer */
+	    {
+		clearpos(&pos);
+	    }
+	    else /* try again from end of buffer */
+	    {
+		/* searching backwards, so set pos to last line and col */
+		pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
+		pos.col  = (colnr_T)STRLEN(
+				ml_get(curwin->w_buffer->b_ml.ml_line_count));
+	    }
+	}
+
+    }
+
+    start_pos = pos;
+    flags = forward ? SEARCH_END : 0;
+
+    /* move to match, except for zero-width matches, in which case, we are
+     * already on the next match */
+    if (!one_char)
+	result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
+	    spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
+
+    if (!VIsual_active)
+	VIsual = start_pos;
+
+    p_ws = old_p_ws;
+    curwin->w_cursor = pos;
+    VIsual_active = TRUE;
+    VIsual_mode = 'v';
+
+    if (VIsual_active)
+    {
+	redraw_curbuf_later(INVERTED);	/* update the inversion */
+	if (*p_sel == 'e')
+	{
+	    /* Correction for exclusive selection depends on the direction. */
+	    if (forward && ltoreq(VIsual, curwin->w_cursor))
+		inc_cursor();
+	    else if (!forward && ltoreq(curwin->w_cursor, VIsual))
+		inc(&VIsual);
+	}
+
+    }
+
+#ifdef FEAT_FOLDING
+    if (fdo_flags & FDO_SEARCH && KeyTyped)
+	foldOpenCursor();
+#endif
+
+    may_start_select('c');
+#ifdef FEAT_MOUSE
+    setmouse();
+#endif
+#ifdef FEAT_CLIPBOARD
+    /* Make sure the clipboard gets updated.  Needed because start and
+     * end are still the same, and the selection needs to be owned */
+    clip_star.vmode = NUL;
+#endif
+    redraw_curbuf_later(INVERTED);
+    showmode();
+
+    return OK;
+}
+
+/*
+ * Check if the pattern is one character or zero-width.
+ * Returns TRUE, FALSE or -1 for failure.
+ */
+    static int
+is_one_char(pattern)
+    char_u	*pattern;
+{
+    regmmatch_T	regmatch;
+    int		nmatched = 0;
+    int		result = -1;
+    pos_T	pos;
+    int		save_called_emsg = called_emsg;
+
+    if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
+					      SEARCH_KEEP, &regmatch) == FAIL)
+	return -1;
+
+    /* move to match */
+    clearpos(&pos);
+    if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
+				     SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
+    {
+	/* Zero-width pattern should match somewhere, then we can check if
+	 * start and end are in the same position. */
+	called_emsg = FALSE;
+	nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+						  pos.lnum, (colnr_T)0, NULL);
+
+	if (!called_emsg)
+	    result = (nmatched != 0
+		&& regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
+		&& regmatch.startpos[0].col == regmatch.endpos[0].col);
+
+	if (!result && incl(&pos) == 0 && pos.col == regmatch.endpos[0].col)
+	    result  = TRUE;
+    }
+
+    called_emsg |= save_called_emsg;
+    vim_regfree(regmatch.regprog);
+    return result;
+}
+#endif /* FEAT_VISUAL */
+
 #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
 	|| defined(PROTO)
 /*
@@ -4527,7 +4707,7 @@
 #if defined(FEAT_FIND_ID) || defined(PROTO)
 /*
  * Find identifiers or defines in included files.
- * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
+ * If p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
  */
     void
 find_pattern_in_path(ptr, dir, len, whole, skip_comments,
@@ -4573,9 +4753,6 @@
     char_u	*already = NULL;
     char_u	*startp = NULL;
     char_u	*inc_opt = NULL;
-#ifdef RISCOS
-    int		previous_munging = __riscosify_control;
-#endif
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
     win_T	*curwin_save = NULL;
 #endif
@@ -4588,11 +4765,6 @@
     if (file_line == NULL)
 	return;
 
-#ifdef RISCOS
-    /* UnixLib knows best how to munge c file names - turn munging back on. */
-    int __riscosify_control = 0;
-#endif
-
     if (type != CHECK_PATH && type != FIND_DEFINE
 #ifdef FEAT_INS_EXPAND
 	/* when CONT_SOL is set compare "ptr" with the beginning of the line
@@ -4653,7 +4825,7 @@
 	    if (inc_opt != NULL && strstr((char *)inc_opt, "\\zs") != NULL)
 		/* Use text from '\zs' to '\ze' (or end) of 'include'. */
 		new_fname = find_file_name_in_path(incl_regmatch.startp[0],
-			      (int)(incl_regmatch.endp[0] - incl_regmatch.startp[0]),
+		       (int)(incl_regmatch.endp[0] - incl_regmatch.startp[0]),
 				 FNAME_EXP|FNAME_INCL|FNAME_REL, 1L, p_fname);
 	    else
 		/* Use text after match with 'include'. */
@@ -4731,17 +4903,33 @@
 			 * Isolate the file name.
 			 * Include the surrounding "" or <> if present.
 			 */
-			for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++)
-			    ;
-			for (i = 0; vim_isfilec(p[i]); i++)
-			    ;
+			if (inc_opt != NULL
+				   && strstr((char *)inc_opt, "\\zs") != NULL)
+			{
+			    /* pattern contains \zs, use the match */
+			    p = incl_regmatch.startp[0];
+			    i = (int)(incl_regmatch.endp[0]
+						   - incl_regmatch.startp[0]);
+			}
+			else
+			{
+			    /* find the file name after the end of the match */
+			    for (p = incl_regmatch.endp[0];
+						  *p && !vim_isfilec(*p); p++)
+				;
+			    for (i = 0; vim_isfilec(p[i]); i++)
+				;
+			}
+
 			if (i == 0)
 			{
 			    /* Nothing found, use the rest of the line. */
 			    p = incl_regmatch.endp[0];
 			    i = (int)STRLEN(p);
 			}
-			else
+			/* Avoid checking before the start of the line, can
+			 * happen if \zs appears in the regexp. */
+			else if (p > line)
 			{
 			    if (p[-1] == '"' || p[-1] == '<')
 			    {
@@ -4892,7 +5080,7 @@
 #ifdef FEAT_COMMENTS
 			if ((*line != '#' ||
 				STRNCMP(skipwhite(line + 1), "define", 6) != 0)
-				&& get_leader_len(line, NULL, FALSE))
+				&& get_leader_len(line, NULL, FALSE, TRUE))
 			    matched = FALSE;
 
 			/*
@@ -5075,9 +5263,7 @@
 			if (win_split(0, 0) == FAIL)
 #endif
 			    break;
-#ifdef FEAT_SCROLLBIND
-			curwin->w_p_scb = FALSE;
-#endif
+			RESET_BINDING(curwin);
 		    }
 		    if (depth == -1)
 		    {
@@ -5134,7 +5320,7 @@
 		    && !(compl_cont_status & CONT_SOL)
 #endif
 		    && *startp != NUL
-		    && *(p = startp + 1) != NUL)
+		    && *(p = startp + MB_PTR2LEN(startp)) != NUL)
 		goto search_line;
 	}
 	line_breakcheck();
@@ -5166,7 +5352,15 @@
 		depth_displayed = depth;
 	}
 	if (depth >= 0)		/* we could read the line */
+	{
 	    files[depth].lnum++;
+	    /* Remove any CR and LF from the line. */
+	    i = (int)STRLEN(line);
+	    if (i > 0 && line[i - 1] == '\n')
+		line[--i] = NUL;
+	    if (i > 0 && line[i - 1] == '\r')
+		line[--i] = NUL;
+	}
 	else if (!already)
 	{
 	    if (++lnum > end_lnum)
@@ -5219,14 +5413,9 @@
 
 fpip_end:
     vim_free(file_line);
-    vim_free(regmatch.regprog);
-    vim_free(incl_regmatch.regprog);
-    vim_free(def_regmatch.regprog);
-
-#ifdef RISCOS
-   /* Restore previous file munging state. */
-    __riscosify_control = previous_munging;
-#endif
+    vim_regfree(regmatch.regprog);
+    vim_regfree(incl_regmatch.regprog);
+    vim_regfree(def_regmatch.regprog);
 }
 
     static void
diff -Naur vim73.orig/src/sha256.c vim73/src/sha256.c
--- vim73.orig/src/sha256.c	2010-07-14 14:49:46.000000000 +0000
+++ vim73/src/sha256.c	2013-08-04 19:09:11.027275939 +0000
@@ -7,9 +7,11 @@
  * See README.txt for an overview of the Vim source code.
  *
  * FIPS-180-2 compliant SHA-256 implementation
- * GPL by Christophe Devine.
+ * GPL by Christophe Devine, applies to older version.
  * Modified for md5deep, in public domain.
  * Modified For Vim, Mohsin Ahmed, http://www.cs.albany.edu/~mosh
+ * Mohsin Ahmed states this work is distributed under the VIM License or GPL,
+ * at your choice.
  *
  * Vim specific notes:
  * Functions exported by this file:
@@ -271,14 +273,13 @@
 #endif /* FEAT_CRYPT || FEAT_PERSISTENT_UNDO */
 
 #if defined(FEAT_CRYPT) || defined(PROTO)
-static char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len));
 static unsigned int get_some_time __ARGS((void));
 
 /*
  * Returns hex digest of "buf[buf_len]" in a static array.
  * if "salt" is not NULL also do "salt[salt_len]".
  */
-    static char_u *
+    char_u *
 sha256_bytes(buf, buf_len, salt, salt_len)
     char_u *buf;
     int    buf_len;
diff -Naur vim73.orig/src/spell.c vim73/src/spell.c
--- vim73.orig/src/spell.c	2010-08-01 13:43:01.000000000 +0000
+++ vim73/src/spell.c	2013-08-04 19:09:11.043942556 +0000
@@ -303,10 +303,6 @@
  *			    few bytes as possible, see offset2bytes())
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for lseek(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 #if defined(FEAT_SPELL) || defined(PROTO)
@@ -327,6 +323,16 @@
 typedef long idx_T;
 #endif
 
+#ifdef VMS
+# define SPL_FNAME_TMPL  "%s_%s.spl"
+# define SPL_FNAME_ADD   "_add."
+# define SPL_FNAME_ASCII "_ascii."
+#else
+# define SPL_FNAME_TMPL  "%s.%s.spl"
+# define SPL_FNAME_ADD   ".add."
+# define SPL_FNAME_ASCII ".ascii."
+#endif
+
 /* Flags used for a word.  Only the lowest byte can be used, the region byte
  * comes above it. */
 #define WF_REGION   0x01	/* region byte follows */
@@ -2471,14 +2477,24 @@
 	 * Find the first spell file for "lang" in 'runtimepath' and load it.
 	 */
 	vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
-					"spell/%s.%s.spl", lang, spell_enc());
+#ifdef VMS
+					"spell/%s_%s.spl",
+#else
+					"spell/%s.%s.spl",
+#endif
+							   lang, spell_enc());
 	r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
 
 	if (r == FAIL && *sl.sl_lang != NUL)
 	{
 	    /* Try loading the ASCII version. */
 	    vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
-						  "spell/%s.ascii.spl", lang);
+#ifdef VMS
+						  "spell/%s_ascii.spl",
+#else
+						  "spell/%s.ascii.spl",
+#endif
+									lang);
 	    r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
 
 #ifdef FEAT_AUTOCMD
@@ -2496,7 +2512,12 @@
 
     if (r == FAIL)
     {
-	smsg((char_u *)_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
+	smsg((char_u *)
+#ifdef VMS
+	_("Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""),
+#else
+	_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
+#endif
 						     lang, spell_enc(), lang);
     }
     else if (sl.sl_slang != NULL)
@@ -2530,7 +2551,7 @@
 int_wordlist_spl(fname)
     char_u	    *fname;
 {
-    vim_snprintf((char *)fname, MAXPATHL, "%s.%s.spl",
+    vim_snprintf((char *)fname, MAXPATHL, SPL_FNAME_TMPL,
 						  int_wordlist, spell_enc());
 }
 
@@ -2637,7 +2658,7 @@
     ga_clear(gap);
 
     for (i = 0; i < lp->sl_prefixcnt; ++i)
-	vim_free(lp->sl_prefprog[i]);
+	vim_regfree(lp->sl_prefprog[i]);
     lp->sl_prefixcnt = 0;
     vim_free(lp->sl_prefprog);
     lp->sl_prefprog = NULL;
@@ -2648,7 +2669,7 @@
     vim_free(lp->sl_midword);
     lp->sl_midword = NULL;
 
-    vim_free(lp->sl_compprog);
+    vim_regfree(lp->sl_compprog);
     vim_free(lp->sl_comprules);
     vim_free(lp->sl_compstartflags);
     vim_free(lp->sl_compallflags);
@@ -2785,8 +2806,8 @@
 	if (lp->sl_fname == NULL)
 	    goto endFAIL;
 
-	/* Check for .add.spl. */
-	lp->sl_add = strstr((char *)gettail(fname), ".add.") != NULL;
+	/* Check for .add.spl (_add.spl for VMS). */
+	lp->sl_add = strstr((char *)gettail(fname), SPL_FNAME_ADD) != NULL;
     }
     else
 	lp = old_lp;
@@ -3613,7 +3634,7 @@
 	}
 
 	/* Add all flags to "sl_compallflags". */
-	if (vim_strchr((char_u *)"+*[]/", c) == NULL
+	if (vim_strchr((char_u *)"?*+[]/", c) == NULL
 		&& !byte_in_str(slang->sl_compallflags, c))
 	{
 	    *ap++ = c;
@@ -3643,7 +3664,7 @@
 	/* Copy flag to "sl_comprules", unless we run into a wildcard. */
 	if (crp != NULL)
 	{
-	    if (c == '+' || c == '*')
+	    if (c == '?' || c == '+' || c == '*')
 	    {
 		vim_free(slang->sl_comprules);
 		slang->sl_comprules = NULL;
@@ -3661,8 +3682,8 @@
 	}
 	else		    /* normal char, "[abc]" and '*' are copied as-is */
 	{
-	    if (c == '+' || c == '~')
-		*pp++ = '\\';	    /* "a+" becomes "a\+" */
+	    if (c == '?' || c == '+' || c == '~')
+		*pp++ = '\\';	    /* "a?" becomes "a\?", "a+" becomes "a\+" */
 #ifdef FEAT_MBYTE
 	    if (enc_utf8)
 		pp += mb_char2bytes(c, pp);
@@ -4207,7 +4228,7 @@
     ga_init2(&ga, sizeof(langp_T), 2);
     clear_midword(wp);
 
-    /* Make a copy of 'spellang', the SpellFileMissing autocommands may change
+    /* Make a copy of 'spelllang', the SpellFileMissing autocommands may change
      * it under our fingers. */
     spl_copy = vim_strsave(wp->w_s->b_p_spl);
     if (spl_copy == NULL)
@@ -4679,7 +4700,7 @@
     buf_T	*buf;
     char_u	fname[MAXPATHL];
 
-    /* Go through all buffers and handle 'spelllang'. */ //<VN>
+    /* Go through all buffers and handle 'spelllang'. <VN> */
     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
 	ga_clear(&buf->b_s.b_langp);
 
@@ -4700,8 +4721,6 @@
 	int_wordlist = NULL;
     }
 
-    init_spell_chartab();
-
     vim_free(repl_to);
     repl_to = NULL;
     vim_free(repl_from);
@@ -4930,6 +4949,8 @@
 
     sblock_T	*si_blocks;	/* memory blocks used */
     long	si_blocks_cnt;	/* memory blocks allocated */
+    int		si_did_emsg;	/* TRUE when ran out of memory */
+
     long	si_compress_cnt;    /* words to add before lowering
 				       compression limit */
     wordnode_T	*si_first_free; /* List of nodes that have been freed during
@@ -4951,7 +4972,7 @@
     char_u	*si_info;	/* info text chars or NULL  */
     int		si_region_count; /* number of regions supported (1 when there
 				    are no regions) */
-    char_u	si_region_name[16]; /* region names; used only if
+    char_u	si_region_name[17]; /* region names; used only if
 				     * si_region_count > 1) */
 
     garray_T	si_rep;		/* list of fromto_T entries from REP lines */
@@ -4997,7 +5018,6 @@
 static int str_equal __ARGS((char_u *s1, char_u	*s2));
 static void add_fromto __ARGS((spellinfo_T *spin, garray_T *gap, char_u	*from, char_u *to));
 static int sal_to_bool __ARGS((char_u *s));
-static int has_non_ascii __ARGS((char_u *s));
 static void spell_free_aff __ARGS((afffile_T *aff));
 static int spell_read_dic __ARGS((spellinfo_T *spin, char_u *fname, afffile_T *affile));
 static int get_affix_flags __ARGS((afffile_T *affile, char_u *afflist));
@@ -5027,7 +5047,7 @@
 static int offset2bytes __ARGS((int nr, char_u *buf));
 static int bytes2offset __ARGS((char_u **pp));
 static void sug_write __ARGS((spellinfo_T *spin, char_u *fname));
-static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int overwrite, int added_word));
+static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int over_write, int added_word));
 static void spell_message __ARGS((spellinfo_T *spin, char_u *str));
 static void init_spellfile __ARGS((void));
 
@@ -5456,21 +5476,25 @@
 	    }
 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
 	    {
-		/* Concatenate this string to previously defined ones, using a
-		 * slash to separate them. */
-		l = (int)STRLEN(items[1]) + 1;
-		if (compflags != NULL)
-		    l += (int)STRLEN(compflags) + 1;
-		p = getroom(spin, l, FALSE);
-		if (p != NULL)
+		/* Don't use the first rule if it is a number. */
+		if (compflags != NULL || *skipdigits(items[1]) != NUL)
 		{
+		    /* Concatenate this string to previously defined ones,
+		     * using a slash to separate them. */
+		    l = (int)STRLEN(items[1]) + 1;
 		    if (compflags != NULL)
+			l += (int)STRLEN(compflags) + 1;
+		    p = getroom(spin, l, FALSE);
+		    if (p != NULL)
 		    {
-			STRCPY(p, compflags);
-			STRCAT(p, "/");
+			if (compflags != NULL)
+			{
+			    STRCPY(p, compflags);
+			    STRCAT(p, "/");
+			}
+			STRCAT(p, items[1]);
+			compflags = p;
 		    }
-		    STRCAT(p, items[1]);
-		    compflags = p;
 		}
 	    }
 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
@@ -5778,7 +5802,7 @@
 					{
 					    sprintf((char *)buf, "^%s",
 							  aff_entry->ae_cond);
-					    vim_free(aff_entry->ae_prog);
+					    vim_regfree(aff_entry->ae_prog);
 					    aff_entry->ae_prog = vim_regcomp(
 						    buf, RE_MAGIC + RE_STRING);
 					}
@@ -6270,7 +6294,7 @@
 
     for (p = compflags; *p != NUL; )
     {
-	if (vim_strchr((char_u *)"/*+[]", *p) != NULL)
+	if (vim_strchr((char_u *)"/?*+[]", *p) != NULL)
 	    /* Copy non-flag characters directly. */
 	    *tp++ = *p++;
 	else
@@ -6299,7 +6323,7 @@
 		    {
 			check_renumber(spin);
 			id = spin->si_newcompID--;
-		    } while (vim_strchr((char_u *)"/+*[]\\-^", id) != NULL);
+		    } while (vim_strchr((char_u *)"/?*+[]\\-^", id) != NULL);
 		    ci->ci_newID = id;
 		    hash_add(&aff->af_comp, ci->ci_key);
 		}
@@ -6458,23 +6482,6 @@
 }
 
 /*
- * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
- * When "s" is NULL FALSE is returned.
- */
-    static int
-has_non_ascii(s)
-    char_u	*s;
-{
-    char_u	*p;
-
-    if (s != NULL)
-	for (p = s; *p != NUL; ++p)
-	    if (*p >= 128)
-		return TRUE;
-    return FALSE;
-}
-
-/*
  * Free the structure filled by spell_read_aff().
  */
     static void
@@ -6500,7 +6507,7 @@
 		--todo;
 		ah = HI2AH(hi);
 		for (ae = ah->ah_first; ae != NULL; ae = ae->ae_next)
-		    vim_free(ae->ae_prog);
+		    vim_regfree(ae->ae_prog);
 	    }
 	}
 	if (ht == &aff->af_suff)
@@ -6930,7 +6937,7 @@
 			    if (ae->ae_add == NULL)
 				*newword = NUL;
 			    else
-				STRCPY(newword, ae->ae_add);
+				vim_strncpy(newword, ae->ae_add, MAXWLEN - 1);
 			    p = word;
 			    if (ae->ae_chop != NULL)
 			    {
@@ -6951,7 +6958,7 @@
 			else
 			{
 			    /* suffix: chop/add at the end of the word */
-			    STRCPY(newword, word);
+			    vim_strncpy(newword, word, MAXWLEN - 1);
 			    if (ae->ae_chop != NULL)
 			    {
 				/* Remove chop string. */
@@ -7343,10 +7350,21 @@
 
     if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
     {
-	/* Allocate a block of memory. This is not freed until much later. */
-	bl = (sblock_T *)alloc_clear((unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
+	if (len >= SBLOCKSIZE)
+	    bl = NULL;
+	else
+	    /* Allocate a block of memory. It is not freed until much later. */
+	    bl = (sblock_T *)alloc_clear(
+				   (unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
 	if (bl == NULL)
+	{
+	    if (!spin->si_did_emsg)
+	    {
+		EMSG(_("E845: Insufficient memory, word list will be incomplete"));
+		spin->si_did_emsg = TRUE;
+	    }
 	    return NULL;
+	}
 	bl->sb_next = spin->si_blocks;
 	spin->si_blocks = bl;
 	bl->sb_used = 0;
@@ -7361,6 +7379,7 @@
 
 /*
  * Make a copy of a string into memory allocated with getroom().
+ * Returns NULL when out of memory.
  */
     static char_u *
 getroom_save(spin, s)
@@ -7395,6 +7414,7 @@
 
 /*
  * Allocate the root of a word tree.
+ * Returns NULL when out of memory.
  */
     static wordnode_T *
 wordtree_alloc(spin)
@@ -7625,7 +7645,7 @@
 
 	/* Compress both trees.  Either they both have many nodes, which makes
 	 * compression useful, or one of them is small, which means
-	 * compression goes fast.  But when filling the souldfold word tree
+	 * compression goes fast.  But when filling the soundfold word tree
 	 * there is no keep-case tree. */
 	wordtree_compress(spin, spin->si_foldroot);
 	if (affixID >= 0)
@@ -7679,6 +7699,7 @@
 /*
  * Get a wordnode_T, either from the list of previously freed nodes or
  * allocate a new one.
+ * Returns NULL when out of memory.
  */
     static wordnode_T *
 get_wordnode(spin)
@@ -7696,7 +7717,8 @@
 	--spin->si_free_count;
     }
 #ifdef SPELL_PRINTTREE
-    n->wn_nr = ++spin->si_wordnode_nr;
+    if (n != NULL)
+	n->wn_nr = ++spin->si_wordnode_nr;
 #endif
     return n;
 }
@@ -8531,7 +8553,7 @@
     }
 
     /* Expand all the remaining arguments (e.g., $VIMRUNTIME). */
-    if (get_arglist_exp(arg, &fcount, &fnames) == OK)
+    if (get_arglist_exp(arg, &fcount, &fnames, FALSE) == OK)
     {
 	mkspell(fcount, fnames, ascii, eap->forceit, FALSE);
 	FreeWild(fcount, fnames);
@@ -8548,7 +8570,7 @@
     spellinfo_T	*spin;
     char_u	*wfname;
 {
-    char_u	fname[MAXPATHL];
+    char_u	*fname = NULL;
     int		len;
     slang_T	*slang;
     int		free_slang = FALSE;
@@ -8612,13 +8634,17 @@
      * Write the .sug file.
      * Make the file name by changing ".spl" to ".sug".
      */
-    STRCPY(fname, wfname);
+    fname = alloc(MAXPATHL);
+    if (fname == NULL)
+	goto theend;
+    vim_strncpy(fname, wfname, MAXPATHL - 1);
     len = (int)STRLEN(fname);
     fname[len - 2] = 'u';
     fname[len - 1] = 'g';
     sug_write(spin, fname);
 
 theend:
+    vim_free(fname);
     if (free_slang)
 	slang_free(slang);
     free_blocks(spin->si_blocks);
@@ -8645,7 +8671,7 @@
     unsigned	words_done = 0;
     int		wordcount[MAXWLEN];
 
-    /* We use si_foldroot for the souldfolded trie. */
+    /* We use si_foldroot for the soundfolded trie. */
     spin->si_foldroot = wordtree_alloc(spin);
     if (spin->si_foldroot == NULL)
 	return FAIL;
@@ -9057,15 +9083,15 @@
  * and ".spl" is appended to make the output file name.
  */
     static void
-mkspell(fcount, fnames, ascii, overwrite, added_word)
+mkspell(fcount, fnames, ascii, over_write, added_word)
     int		fcount;
     char_u	**fnames;
     int		ascii;		    /* -ascii argument given */
-    int		overwrite;	    /* overwrite existing output file */
+    int		over_write;	    /* overwrite existing output file */
     int		added_word;	    /* invoked through "zg" */
 {
-    char_u	fname[MAXPATHL];
-    char_u	wfname[MAXPATHL];
+    char_u	*fname = NULL;
+    char_u	*wfname;
     char_u	**innames;
     int		incount;
     afffile_T	*(afile[8]);
@@ -9093,6 +9119,10 @@
     innames = &fnames[1];
     incount = fcount - 1;
 
+    wfname = alloc(MAXPATHL);
+    if (wfname == NULL)
+	return;
+
     if (fcount >= 1)
     {
 	len = (int)STRLEN(fnames[0]);
@@ -9102,32 +9132,32 @@
 	     * "path/en.latin1.add.spl". */
 	    innames = &fnames[0];
 	    incount = 1;
-	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.spl", fnames[0]);
+	    vim_snprintf((char *)wfname, MAXPATHL, "%s.spl", fnames[0]);
 	}
 	else if (fcount == 1)
 	{
 	    /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
 	    innames = &fnames[0];
 	    incount = 1;
-	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
-			     spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+	    vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
+		  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
 	}
 	else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
 	{
 	    /* Name ends in ".spl", use as the file name. */
-	    vim_strncpy(wfname, fnames[0], sizeof(wfname) - 1);
+	    vim_strncpy(wfname, fnames[0], MAXPATHL - 1);
 	}
 	else
 	    /* Name should be language, make the file name from it. */
-	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
-			     spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+	    vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
+		  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
 
 	/* Check for .ascii.spl. */
-	if (strstr((char *)gettail(wfname), ".ascii.") != NULL)
+	if (strstr((char *)gettail(wfname), SPL_FNAME_ASCII) != NULL)
 	    spin.si_ascii = TRUE;
 
 	/* Check for .add.spl. */
-	if (strstr((char *)gettail(wfname), ".add.") != NULL)
+	if (strstr((char *)gettail(wfname), SPL_FNAME_ADD) != NULL)
 	    spin.si_add = TRUE;
     }
 
@@ -9141,17 +9171,21 @@
     {
 	/* Check for overwriting before doing things that may take a lot of
 	 * time. */
-	if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
+	if (!over_write && mch_stat((char *)wfname, &st) >= 0)
 	{
 	    EMSG(_(e_exists));
-	    return;
+	    goto theend;
 	}
 	if (mch_isdir(wfname))
 	{
 	    EMSG2(_(e_isadir2), wfname);
-	    return;
+	    goto theend;
 	}
 
+	fname = alloc(MAXPATHL);
+	if (fname == NULL)
+	    goto theend;
+
 	/*
 	 * Init the aff and dic pointers.
 	 * Get the region names if there are more than 2 arguments.
@@ -9167,7 +9201,7 @@
 						|| innames[i][len - 3] != '_')
 		{
 		    EMSG2(_("E755: Invalid region in %s"), innames[i]);
-		    return;
+		    goto theend;
 		}
 		spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
 		spin.si_region_name[i * 2 + 1] =
@@ -9184,7 +9218,7 @@
 		|| spin.si_prefroot == NULL)
 	{
 	    free_blocks(spin.si_blocks);
-	    return;
+	    goto theend;
 	}
 
 	/* When not producing a .add.spl file clear the character table when
@@ -9205,7 +9239,7 @@
 	    spin.si_conv.vc_type = CONV_NONE;
 	    spin.si_region = 1 << i;
 
-	    vim_snprintf((char *)fname, sizeof(fname), "%s.aff", innames[i]);
+	    vim_snprintf((char *)fname, MAXPATHL, "%s.aff", innames[i]);
 	    if (mch_stat((char *)fname, &st) >= 0)
 	    {
 		/* Read the .aff file.  Will init "spin->si_conv" based on the
@@ -9216,7 +9250,7 @@
 		else
 		{
 		    /* Read the .dic file and store the words in the trees. */
-		    vim_snprintf((char *)fname, sizeof(fname), "%s.dic",
+		    vim_snprintf((char *)fname, MAXPATHL, "%s.dic",
 								  innames[i]);
 		    if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
 			error = TRUE;
@@ -9298,6 +9332,10 @@
 	    spell_make_sugfile(&spin, wfname);
 
     }
+
+theend:
+    vim_free(fname);
+    vim_free(wfname);
 }
 
 /*
@@ -9350,7 +9388,7 @@
     buf_T	*buf = NULL;
     int		new_spf = FALSE;
     char_u	*fname;
-    char_u	fnamebuf[MAXPATHL];
+    char_u	*fnamebuf = NULL;
     char_u	line[MAXWLEN * 2];
     long	fpos, fpos_next = 0;
     int		i;
@@ -9380,6 +9418,9 @@
 	    EMSG2(_(e_notset), "spellfile");
 	    return;
 	}
+	fnamebuf = alloc(MAXPATHL);
+	if (fnamebuf == NULL)
+	    return;
 
 	for (spf = curwin->w_s->b_p_spf, i = 1; *spf != NUL; ++i)
 	{
@@ -9389,6 +9430,7 @@
 	    if (*spf == NUL)
 	    {
 		EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
+		vim_free(fnamebuf);
 		return;
 	    }
 	}
@@ -9400,6 +9442,7 @@
 	if (buf != NULL && bufIsChanged(buf))
 	{
 	    EMSG(_(e_bufloaded));
+	    vim_free(fnamebuf);
 	    return;
 	}
 
@@ -9494,6 +9537,7 @@
 
 	redraw_all_later(SOME_VALID);
     }
+    vim_free(fnamebuf);
 }
 
 /*
@@ -9502,7 +9546,7 @@
     static void
 init_spellfile()
 {
-    char_u	buf[MAXPATHL];
+    char_u	*buf;
     int		l;
     char_u	*fname;
     char_u	*rtp;
@@ -9512,6 +9556,10 @@
 
     if (*curwin->w_s->b_p_spl != NUL && curwin->w_s->b_langp.ga_len > 0)
     {
+	buf = alloc(MAXPATHL);
+	if (buf == NULL)
+	    return;
+
 	/* Find the end of the language name.  Exclude the region.  If there
 	 * is a path separator remember the start of the tail. */
 	for (lend = curwin->w_s->b_p_spl; *lend != NUL
@@ -9530,7 +9578,8 @@
 	    if (aspath)
 		/* Use directory of an entry with path, e.g., for
 		 * "/dir/lg.utf-8.spl" use "/dir". */
-		vim_strncpy(buf, curbuf->b_s.b_p_spl, lstart - curbuf->b_s.b_p_spl - 1);
+		vim_strncpy(buf, curbuf->b_s.b_p_spl,
+					    lstart - curbuf->b_s.b_p_spl - 1);
 	    else
 		/* Copy the path from 'runtimepath' to buf[]. */
 		copy_option_part(&rtp, buf, MAXPATHL, ",");
@@ -9539,13 +9588,14 @@
 		/* Use the first language name from 'spelllang' and the
 		 * encoding used in the first loaded .spl file. */
 		if (aspath)
-		    vim_strncpy(buf, curbuf->b_s.b_p_spl, lend - curbuf->b_s.b_p_spl);
+		    vim_strncpy(buf, curbuf->b_s.b_p_spl,
+						  lend - curbuf->b_s.b_p_spl);
 		else
 		{
 		    /* Create the "spell" directory if it doesn't exist yet. */
 		    l = (int)STRLEN(buf);
 		    vim_snprintf((char *)buf + l, MAXPATHL - l, "/spell");
-		    if (!filewritable(buf) != 2)
+		    if (filewritable(buf) != 2)
 			vim_mkdir(buf, 0755);
 
 		    l = (int)STRLEN(buf);
@@ -9553,7 +9603,8 @@
 				 "/%.*s", (int)(lend - lstart), lstart);
 		}
 		l = (int)STRLEN(buf);
-		fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)->lp_slang->sl_fname;
+		fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)
+							 ->lp_slang->sl_fname;
 		vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
 			fname != NULL
 			  && strstr((char *)gettail(fname), ".ascii.") != NULL
@@ -9563,6 +9614,8 @@
 	    }
 	    aspath = FALSE;
 	}
+
+	vim_free(buf);
     }
 }
 
@@ -9837,10 +9890,7 @@
 	{
 	    /* be quick for ASCII */
 	    if (wp->w_s->b_spell_ismw[*p])
-	    {
 		s = p + 1;		/* skip a mid-word character */
-		l = MB_BYTE2LEN(*s);
-	    }
 	}
 	else
 	{
@@ -9848,10 +9898,7 @@
 	    if (c < 256 ? wp->w_s->b_spell_ismw[c]
 		    : (wp->w_s->b_spell_ismw_mb != NULL
 			   && vim_strchr(wp->w_s->b_spell_ismw_mb, c) != NULL))
-	    {
 		s = p + l;
-		l = MB_BYTE2LEN(*s);
-	    }
 	}
 
 	c = mb_ptr2char(s);
@@ -10223,7 +10270,7 @@
 
 	    /* The suggested word may replace only part of the bad word, add
 	     * the not replaced part. */
-	    STRCPY(wcopy, stp->st_word);
+	    vim_strncpy(wcopy, stp->st_word, MAXWLEN);
 	    if (sug.su_badlen > stp->st_orglen)
 		vim_strncpy(wcopy + stp->st_wordlen,
 					       sug.su_badptr + stp->st_orglen,
@@ -11130,7 +11177,7 @@
 	    c = *s++;
 
 #ifdef FEAT_MBYTE
-	/* We only change  to SS when we are certain latin1 is used.  It
+	/* We only change 0xdf to SS when we are certain latin1 is used.  It
 	 * would cause weird errors in other 8-bit encodings. */
 	if (enc_latin1like && c == 0xdf)
 	{
@@ -12972,7 +13019,7 @@
 
 /*
  * Combine the list of suggestions in su->su_ga and su->su_sga.
- * They are intwined.
+ * They are entwined.
  */
     static void
 score_combine(su)
@@ -13124,7 +13171,7 @@
 	pbad = badsound2;
     }
 
-    if (lendiff > 0)
+    if (lendiff > 0 && stp->st_wordlen + lendiff < MAXWLEN)
     {
 	/* Add part of the bad word to the good word, so that we soundfold
 	 * what replaces the bad word. */
@@ -13410,7 +13457,7 @@
 
 		/* Add a small penalty for changing the first letter from
 		 * lower to upper case.  Helps for "tath" -> "Kath", which is
-		 * less common thatn "tath" -> "path".  Don't do it when the
+		 * less common than "tath" -> "path".  Don't do it when the
 		 * letter is the same, that has already been counted. */
 		gc = PTR2CHAR(p);
 		if (SPELL_ISUPPER(gc))
@@ -13645,7 +13692,7 @@
 {
     int		m1, m2;
 #ifdef FEAT_MBYTE
-    char_u	buf[MB_MAXBYTES];
+    char_u	buf[MB_MAXBYTES + 1];
     hashitem_T  *hi;
 
     if (c1 >= 256)
@@ -13811,11 +13858,8 @@
 		    su->su_sfmaxscore = cleanup_suggestions(gap,
 				      su->su_sfmaxscore, SUG_CLEAN_COUNT(su));
 		else
-		{
-		    i = su->su_maxscore;
 		    su->su_maxscore = cleanup_suggestions(gap,
 					su->su_maxscore, SUG_CLEAN_COUNT(su));
-		}
 	    }
 	}
     }
@@ -13840,7 +13884,7 @@
     for (i = gap->ga_len - 1; i >= 0; --i)
     {
 	/* Need to append what follows to check for "the the". */
-	STRCPY(longword, stp[i].st_word);
+	vim_strncpy(longword, stp[i].st_word, MAXWLEN);
 	len = stp[i].st_wordlen;
 	vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
 							       MAXWLEN - len);
@@ -14186,7 +14230,7 @@
 	*t = NUL;
     }
     else
-	STRCPY(word, s);
+	vim_strncpy(word, s, MAXWLEN - 1);
 
     smp = (salitem_T *)slang->sl_sal.ga_data;
 
@@ -14448,13 +14492,15 @@
     int		p0 = -333;
     int		c0;
     int		did_white = FALSE;
+    int		wordlen;
+
 
     /*
      * Convert the multi-byte string to a wide-character string.
      * Remove accents, if wanted.  We actually remove all non-word characters.
      * But keep white space.
      */
-    n = 0;
+    wordlen = 0;
     for (s = inword; *s != NUL; )
     {
 	t = s;
@@ -14475,12 +14521,12 @@
 		    continue;
 	    }
 	}
-	word[n++] = c;
+	word[wordlen++] = c;
     }
-    word[n] = NUL;
+    word[wordlen] = NUL;
 
     /*
-     * This comes from Aspell phonet.cpp.
+     * This algorithm comes from Aspell phonet.cpp.
      * Converted from C++ to C.  Added support for multi-byte chars.
      * Changed to keep spaces.
      */
@@ -14665,7 +14711,7 @@
 			    }
 			if (k > k0)
 			    mch_memmove(word + i + k0, word + i + k,
-				    sizeof(int) * (STRLEN(word + i + k) + 1));
+				    sizeof(int) * (wordlen - (i + k) + 1));
 
 			/* new "actual letter" */
 			c = word[i];
@@ -14693,7 +14739,7 @@
 			    if (c != NUL)
 				wres[reslen++] = c;
 			    mch_memmove(word, word + i + 1,
-				    sizeof(int) * (STRLEN(word + i + 1) + 1));
+				       sizeof(int) * (wordlen - (i + 1) + 1));
 			    i = 0;
 			    z0 = 1;
 			}
diff -Naur vim73.orig/src/structs.h vim73/src/structs.h
--- vim73.orig/src/structs.h	2010-08-07 14:59:27.000000000 +0000
+++ vim73/src/structs.h	2013-08-04 19:09:11.050609202 +0000
@@ -63,15 +63,16 @@
 
 #define GA_EMPTY    {0, 0, 0, 0, NULL}
 
-/*
- * This is here because regexp.h needs pos_T and below regprog_T is used.
- */
-#include "regexp.h"
-
 typedef struct window_S		win_T;
 typedef struct wininfo_S	wininfo_T;
 typedef struct frame_S		frame_T;
 typedef int			scid_T;		/* script ID */
+typedef struct file_buffer	buf_T;  /* forward declaration */
+
+/*
+ * This is here because regexp.h needs pos_T and below regprog_T is used.
+ */
+#include "regexp.h"
 
 /*
  * This is here because gui.h needs the pos_T and win_T, and win_T needs gui.h
@@ -140,14 +141,22 @@
 #ifdef FEAT_FOLDING
     long	wo_fdc;
 # define w_p_fdc w_onebuf_opt.wo_fdc	/* 'foldcolumn' */
+    int		wo_fdc_save;
+# define w_p_fdc_save w_onebuf_opt.wo_fdc_save	/* 'foldenable' saved for diff mode */
     int		wo_fen;
 # define w_p_fen w_onebuf_opt.wo_fen	/* 'foldenable' */
+    int		wo_fen_save;
+# define w_p_fen_save w_onebuf_opt.wo_fen_save	/* 'foldenable' saved for diff mode */
     char_u	*wo_fdi;
 # define w_p_fdi w_onebuf_opt.wo_fdi	/* 'foldignore' */
     long	wo_fdl;
 # define w_p_fdl w_onebuf_opt.wo_fdl	/* 'foldlevel' */
+    int		wo_fdl_save;
+# define w_p_fdl_save w_onebuf_opt.wo_fdl_save	/* 'foldlevel' state saved for diff mode */
     char_u	*wo_fdm;
 # define w_p_fdm w_onebuf_opt.wo_fdm	/* 'foldmethod' */
+    char_u	*wo_fdm_save;
+# define w_p_fdm_save w_onebuf_opt.wo_fdm_save	/* 'fdm' saved for diff mode */
     long	wo_fml;
 # define w_p_fml w_onebuf_opt.wo_fml	/* 'foldminlines' */
     long	wo_fdn;
@@ -212,9 +221,17 @@
 #ifdef FEAT_SCROLLBIND
     int		wo_scb;
 # define w_p_scb w_onebuf_opt.wo_scb	/* 'scrollbind' */
+    int		wo_diff_saved; /* options were saved for starting diff mode */
+# define w_p_diff_saved w_onebuf_opt.wo_diff_saved
+    int		wo_scb_save;	/* 'scrollbind' saved for diff mode*/
+# define w_p_scb_save w_onebuf_opt.wo_scb_save
 #endif
     int		wo_wrap;
 #define w_p_wrap w_onebuf_opt.wo_wrap	/* 'wrap' */
+#ifdef FEAT_DIFF
+    int		wo_wrap_save;	/* 'wrap' state saved for diff mode*/
+# define w_p_wrap_save w_onebuf_opt.wo_wrap_save
+#endif
 #ifdef FEAT_CONCEAL
     char_u	*wo_cocu;		/* 'concealcursor' */
 # define w_p_cocu w_onebuf_opt.wo_cocu
@@ -224,6 +241,8 @@
 #ifdef FEAT_CURSORBIND
     int		wo_crb;
 # define w_p_crb w_onebuf_opt.wo_crb	/* 'cursorbind' */
+    int		wo_crb_save;	/* 'cursorbind' state saved for diff mode*/
+# define w_p_crb_save w_onebuf_opt.wo_crb_save
 #endif
 
 #ifdef FEAT_EVAL
@@ -378,6 +397,35 @@
 typedef long		    blocknr_T;
 
 /*
+ * mf_hashtab_T is a chained hashtable with blocknr_T key and arbitrary
+ * structures as items.  This is an intrusive data structure: we require
+ * that items begin with mf_hashitem_T which contains the key and linked
+ * list pointers.  List of items in each bucket is doubly-linked.
+ */
+
+typedef struct mf_hashitem_S mf_hashitem_T;
+
+struct mf_hashitem_S
+{
+    mf_hashitem_T   *mhi_next;
+    mf_hashitem_T   *mhi_prev;
+    blocknr_T	    mhi_key;
+};
+
+#define MHT_INIT_SIZE   64
+
+typedef struct mf_hashtab_S
+{
+    long_u	    mht_mask;	    /* mask used for hash value (nr of items
+				     * in array is "mht_mask" + 1) */
+    long_u	    mht_count;	    /* nr of items inserted into hashtable */
+    mf_hashitem_T   **mht_buckets;  /* points to mht_small_buckets or
+				     *dynamically allocated array */
+    mf_hashitem_T   *mht_small_buckets[MHT_INIT_SIZE];   /* initial buckets */
+    char	    mht_fixed;	    /* non-zero value forbids growth */
+} mf_hashtab_T;
+
+/*
  * for each (previously) used block in the memfile there is one block header.
  *
  * The block may be linked in the used list OR in the free list.
@@ -394,11 +442,11 @@
 
 struct block_hdr
 {
+    mf_hashitem_T bh_hashitem;      /* header for hash table and key */
+#define bh_bnum bh_hashitem.mhi_key /* block number, part of bh_hashitem */
+
     bhdr_T	*bh_next;	    /* next block_hdr in free or used list */
     bhdr_T	*bh_prev;	    /* previous block_hdr in used list */
-    bhdr_T	*bh_hash_next;	    /* next block_hdr in hash list */
-    bhdr_T	*bh_hash_prev;	    /* previous block_hdr in hash list */
-    blocknr_T	bh_bnum;	    /* block number */
     char_u	*bh_data;	    /* pointer to memory (for used block) */
     int		bh_page_count;	    /* number of pages in this block */
 
@@ -417,9 +465,9 @@
 
 struct nr_trans
 {
-    NR_TRANS	*nt_next;		/* next nr_trans in hash list */
-    NR_TRANS	*nt_prev;		/* previous nr_trans in hash list */
-    blocknr_T	nt_old_bnum;		/* old, negative, number */
+    mf_hashitem_T nt_hashitem;		/* header for hash table and key */
+#define nt_old_bnum nt_hashitem.mhi_key	/* old, negative, number */
+
     blocknr_T	nt_new_bnum;		/* new, positive, number */
 };
 
@@ -463,6 +511,8 @@
     int		xp_numfiles;		/* number of files found by
 						    file name completion */
     char_u	**xp_files;		/* list of files */
+    char_u	*xp_line;		/* text being completed */
+    int		xp_col;			/* cursor position in line */
 } expand_T;
 
 /* values for xp_backslash */
@@ -497,14 +547,6 @@
 # endif
 } cmdmod_T;
 
-typedef struct file_buffer buf_T;  /* forward declaration */
-
-/*
- * Simplistic hashing scheme to quickly locate the blocks in the used list.
- * 64 blocks are found directly (64 * 4K = 256K, most files are smaller).
- */
-#define MEMHASHSIZE	64
-#define MEMHASH(nr)	((nr) & (MEMHASHSIZE - 1))
 #define MF_SEED_LEN	8
 
 struct memfile
@@ -517,8 +559,8 @@
     bhdr_T	*mf_used_last;		/* lru block_hdr in used list */
     unsigned	mf_used_count;		/* number of pages in used list */
     unsigned	mf_used_count_max;	/* maximum number of pages in memory */
-    bhdr_T	*mf_hash[MEMHASHSIZE];	/* array of hash lists */
-    NR_TRANS	*mf_trans[MEMHASHSIZE];	/* array of trans lists */
+    mf_hashtab_T mf_hash;		/* hash lists */
+    mf_hashtab_T mf_trans;		/* trans lists */
     blocknr_T	mf_blocknr_max;		/* highest positive block number + 1*/
     blocknr_T	mf_blocknr_min;		/* lowest negative block number - 1 */
     blocknr_T	mf_neg_count;		/* number of negative blocks numbers */
@@ -979,12 +1021,14 @@
 struct mapblock
 {
     mapblock_T	*m_next;	/* next mapblock in list */
-    char_u	*m_keys;	/* mapped from */
+    char_u	*m_keys;	/* mapped from, lhs */
+    char_u	*m_str;		/* mapped to, rhs */
+    char_u	*m_orig_str;	/* rhs as entered by the user */
     int		m_keylen;	/* strlen(m_keys) */
-    char_u	*m_str;		/* mapped to */
     int		m_mode;		/* valid mode */
     int		m_noremap;	/* if non-zero no re-mapping for m_str */
     char	m_silent;	/* <silent> used, don't echo commands */
+    char	m_nowait;	/* <nowait> used */
 #ifdef FEAT_EVAL
     char	m_expr;		/* <expr> used, m_str is an expression */
     scid_T	m_script_ID;	/* ID of script where map was defined */
@@ -1082,6 +1126,11 @@
 #define VAR_DICT    5	/* "v_dict" is used */
 #define VAR_FLOAT   6	/* "v_float" is used */
 
+/* Values for "dv_scope". */
+#define VAR_SCOPE     1	/* a:, v:, s:, etc. scope dictionaries */
+#define VAR_DEF_SCOPE 2	/* l:, g: scope dictionaries: here funcrefs are not
+			   allowed to mask existing functions */
+
 /* Values for "v_lock". */
 #define VAR_LOCKED  1	/* locked with lock(), can use unlock() */
 #define VAR_FIXED   2	/* locked forever */
@@ -1152,11 +1201,12 @@
  */
 struct dictvar_S
 {
+    char	dv_lock;	/* zero, VAR_LOCKED, VAR_FIXED */
+    char	dv_scope;	/* zero, VAR_SCOPE, VAR_DEF_SCOPE */
     int		dv_refcount;	/* reference count */
-    hashtab_T	dv_hashtab;	/* hashtab that refers to the items */
     int		dv_copyID;	/* ID used by deepcopy() */
+    hashtab_T	dv_hashtab;	/* hashtab that refers to the items */
     dict_T	*dv_copydict;	/* copied dict used by deepcopy() */
-    char	dv_lock;	/* zero, VAR_LOCKED, VAR_FIXED */
     dict_T	*dv_used_next;	/* next dict in used dicts list */
     dict_T	*dv_used_prev;	/* previous dict in used dicts list */
 };
@@ -1177,11 +1227,27 @@
 typedef struct qf_info_S qf_info_T;
 #endif
 
+#ifdef FEAT_PROFILE
+/*
+ * Used for :syntime: timing of executing a syntax pattern.
+ */
+typedef struct {
+    proftime_T	total;		/* total time used */
+    proftime_T	slowest;	/* time of slowest call */
+    long	count;		/* nr of times used */
+    long	match;		/* nr of times matched */
+} syn_time_T;
+#endif
+
+/*
+ * These are items normally related to a buffer.  But when using ":ownsyntax"
+ * a window may have its own instance.
+ */
 typedef struct {
 #ifdef FEAT_SYN_HL
     hashtab_T	b_keywtab;		/* syntax keywords hash table */
     hashtab_T	b_keywtab_ic;		/* idem, ignore case */
-    int		b_syn_error;		/* TRUE when error occured in HL */
+    int		b_syn_error;		/* TRUE when error occurred in HL */
     int		b_syn_ic;		/* ignore case for :syn cmds */
     int		b_syn_spell;		/* SYNSPL_ values */
     garray_T	b_syn_patterns;		/* table for syntax patterns */
@@ -1197,6 +1263,9 @@
     long	b_syn_sync_linebreaks;	/* offset for multi-line pattern */
     char_u	*b_syn_linecont_pat;	/* line continuation pattern */
     regprog_T	*b_syn_linecont_prog;	/* line continuation program */
+#ifdef FEAT_PROFILE
+    syn_time_T  b_syn_linecont_time;
+#endif
     int		b_syn_linecont_ic;	/* ignore-case flag for above */
     int		b_syn_topgrp;		/* for ":syntax include" */
 # ifdef FEAT_CONCEAL
@@ -1266,6 +1335,10 @@
     int		b_nwindows;	/* nr of windows open on this buffer */
 
     int		b_flags;	/* various BF_ flags */
+#ifdef FEAT_AUTOCMD
+    int		b_closing;	/* buffer is being closed, don't let
+				   autocommands close it too. */
+#endif
 
     /*
      * b_ffname has the full path of the file (NULL for no name).
@@ -1506,9 +1579,6 @@
     int		b_p_ml_nobin;	/* b_p_ml saved for binary mode */
     int		b_p_ma;		/* 'modifiable' */
     char_u	*b_p_nf;	/* 'nrformats' */
-#ifdef FEAT_OSFILETYPE
-    char_u	*b_p_oft;	/* 'osfiletype' */
-#endif
     int		b_p_pi;		/* 'preserveindent' */
 #ifdef FEAT_TEXTOBJ
     char_u	*b_p_qe;	/* 'quoteescape' */
@@ -1563,6 +1633,9 @@
 
     /* end of buffer options */
 
+    linenr_T	b_no_eol_lnum;	/* non-zero lnum when last line of next binary
+				 * write should not have an end-of-line */
+
     int		b_start_eol;	/* last line had eol when it was read */
     int		b_start_ffc;	/* first char of 'ff' when edit started */
 #ifdef FEAT_MBYTE
@@ -1573,7 +1646,7 @@
 
 #ifdef FEAT_EVAL
     dictitem_T	b_bufvar;	/* variable for "b:" Dictionary */
-    dict_T	b_vars;		/* internal variables, local to buffer */
+    dict_T	*b_vars;	/* internal variables, local to buffer */
 #endif
 
 #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
@@ -1719,7 +1792,15 @@
     frame_T	    *(tp_snapshot[SNAP_COUNT]);  /* window layout snapshots */
 #ifdef FEAT_EVAL
     dictitem_T	    tp_winvar;	    /* variable for "t:" Dictionary */
-    dict_T	    tp_vars;	    /* internal variables, local to tab page */
+    dict_T	    *tp_vars;	    /* internal variables, local to tab page */
+#endif
+
+#ifdef FEAT_PYTHON
+    void	    *tp_python_ref;	/* The Python value for this tab page */
+#endif
+
+#ifdef FEAT_PYTHON3
+    void	    *tp_python3_ref;	/* The Python value for this tab page */
 #endif
 };
 
@@ -1822,13 +1903,17 @@
 				       often, keep it the first item!) */
 
 #if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
-    synblock_T	*w_s;
+    synblock_T	*w_s;		    /* for :ownsyntax */
 #endif
 
 #ifdef FEAT_WINDOWS
     win_T	*w_prev;	    /* link to previous window */
     win_T	*w_next;	    /* link to next window */
 #endif
+#ifdef FEAT_AUTOCMD
+    int		w_closing;	    /* window is being closed, don't let
+				       autocommands close it too. */
+#endif
 
     frame_T	*w_frame;	    /* frame containing this window */
 
@@ -2038,7 +2123,7 @@
 
 #ifdef FEAT_EVAL
     dictitem_T	w_winvar;	/* variable for "w:" Dictionary */
-    dict_T	w_vars;		/* internal variables, local to window */
+    dict_T	*w_vars;	/* internal variables, local to window */
 #endif
 
 #if defined(FEAT_RIGHTLEFT) && defined(FEAT_FKMAP)
@@ -2339,11 +2424,6 @@
     MenuHandle	menu_handle;
     MenuHandle	submenu_handle;
 #endif
-#ifdef RISCOS
-    int		*id;		    /* Not used, but gui.c needs it */
-    int		greyed_out;	    /* Flag */
-    int		hidden;
-#endif
 #ifdef FEAT_GUI_PHOTON
     PtWidget_t	*id;
     PtWidget_t	*submenu_id;
diff -Naur vim73.orig/src/syntax.c vim73/src/syntax.c
--- vim73.orig/src/syntax.c	2010-08-08 13:17:03.000000000 +0000
+++ vim73/src/syntax.c	2013-08-04 19:09:11.060609172 +0000
@@ -68,6 +68,8 @@
 
 #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
 
+#define MAX_HL_ID       20000	/* maximum value for a highlight ID. */
+
 #ifdef FEAT_CMDL_COMPL
 /* Flags to indicate an additional string for highlight name completion. */
 static int include_none = 0;	/* when 1 include "None" */
@@ -103,7 +105,7 @@
 # ifdef FEAT_XFONTSET
 static GuiFontset fontset_name2handle __ARGS((char_u *name, int fixed_width));
 # endif
-static void hl_do_font __ARGS((int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip));
+static void hl_do_font __ARGS((int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font));
 #endif
 
 /*
@@ -151,6 +153,9 @@
     short	 sp_syn_match_id;	/* highlight group ID of pattern */
     char_u	*sp_pattern;		/* regexp to match, pattern */
     regprog_T	*sp_prog;		/* regexp to match, program */
+#ifdef FEAT_PROFILE
+    syn_time_T	 sp_time;
+#endif
     int		 sp_ic;			/* ignore-case flag for sp_prog */
     short	 sp_off_flags;		/* see below */
     int		 sp_offsets[SPO_COUNT];	/* offsets */
@@ -219,16 +224,19 @@
 
 /*
  * Syntax group IDs have different types:
- *     0 -  9999  normal syntax groups
- * 10000 - 14999  ALLBUT indicator (current_syn_inc_tag added)
- * 15000 - 19999  TOP indicator (current_syn_inc_tag added)
- * 20000 - 24999  CONTAINED indicator (current_syn_inc_tag added)
- * >= 25000	  cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
- */
-#define SYNID_ALLBUT	10000	    /* syntax group ID for contains=ALLBUT */
-#define SYNID_TOP	15000	    /* syntax group ID for contains=TOP */
-#define SYNID_CONTAINED	20000	    /* syntax group ID for contains=CONTAINED */
-#define SYNID_CLUSTER	25000	    /* first syntax group ID for clusters */
+ *     0 - 19999  normal syntax groups
+ * 20000 - 20999  ALLBUT indicator (current_syn_inc_tag added)
+ * 21000 - 21999  TOP indicator (current_syn_inc_tag added)
+ * 22000 - 22999  CONTAINED indicator (current_syn_inc_tag added)
+ * 23000 - 32767  cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
+ */
+#define SYNID_ALLBUT	MAX_HL_ID   /* syntax group ID for contains=ALLBUT */
+#define SYNID_TOP	21000	    /* syntax group ID for contains=TOP */
+#define SYNID_CONTAINED	22000	    /* syntax group ID for contains=CONTAINED */
+#define SYNID_CLUSTER	23000	    /* first syntax group ID for clusters */
+
+#define MAX_SYN_INC_TAG	999	    /* maximum before the above overflow */
+#define MAX_CLUSTER_ID  (32767 - SYNID_CLUSTER)
 
 /*
  * Annoying Hack(TM):  ":syn include" needs this pointer to pass to
@@ -264,6 +272,8 @@
  */
 static int keepend_level = -1;
 
+static char msg_no_items[] = N_("No Syntax items defined for this buffer");
+
 /*
  * For the current state we need to remember more than just the idx.
  * When si_m_endpos.lnum is 0, the items other than si_idx are unknown.
@@ -390,6 +400,21 @@
 static int in_id_list __ARGS((stateitem_T *item, short *cont_list, struct sp_syn *ssp, int contained));
 static int push_current_state __ARGS((int idx));
 static void pop_current_state __ARGS((void));
+#ifdef FEAT_PROFILE
+static void syn_clear_time __ARGS((syn_time_T *tt));
+static void syntime_clear __ARGS((void));
+#ifdef __BORLANDC__
+static int _RTLENTRYF syn_compare_syntime __ARGS((const void *v1, const void *v2));
+#else
+static int syn_compare_syntime __ARGS((const void *v1, const void *v2));
+#endif
+static void syntime_report __ARGS((void));
+static int syn_time_on = FALSE;
+# define IF_SYN_TIME(p) (p)
+#else
+# define IF_SYN_TIME(p) NULL
+typedef int syn_time_T;
+#endif
 
 static void syn_stack_apply_changes_block __ARGS((synblock_T *block, buf_T *buf));
 static void find_endpos __ARGS((int idx, lpos_T *startpos, lpos_T *m_endpos, lpos_T *hl_endpos, long *flagsp, lpos_T *end_endpos, int *end_idx, reg_extmatch_T *start_ext));
@@ -401,7 +426,7 @@
 static void syn_add_end_off __ARGS((lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra));
 static void syn_add_start_off __ARGS((lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra));
 static char_u *syn_getcurline __ARGS((void));
-static int syn_regexec __ARGS((regmmatch_T *rmp, linenr_T lnum, colnr_T col));
+static int syn_regexec __ARGS((regmmatch_T *rmp, linenr_T lnum, colnr_T col, syn_time_T *st));
 static int check_keyword_id __ARGS((char_u *line, int startcol, int *endcol, long *flags, short **next_list, stateitem_T *cur_si, int *ccharp));
 static void syn_cmd_case __ARGS((exarg_T *eap, int syncing));
 static void syn_cmd_spell __ARGS((exarg_T *eap, int syncing));
@@ -554,7 +579,13 @@
     if (INVALID_STATE(&current_state))
     {
 	syn_sync(wp, lnum, last_valid);
-	first_stored = current_lnum + syn_block->b_syn_sync_minlines;
+	if (current_lnum == 1)
+	    /* First line is always valid, no matter "minlines". */
+	    first_stored = 1;
+	else
+	    /* Need to parse "minlines" lines before state can be considered
+	     * valid to store. */
+	    first_stored = current_lnum + syn_block->b_syn_sync_minlines;
     }
     else
 	first_stored = current_lnum;
@@ -966,7 +997,8 @@
     {
 	regmatch.rmm_ic = syn_block->b_syn_linecont_ic;
 	regmatch.regprog = syn_block->b_syn_linecont_prog;
-	return syn_regexec(&regmatch, lnum, (colnr_T)0);
+	return syn_regexec(&regmatch, lnum, (colnr_T)0,
+				IF_SYN_TIME(&syn_block->b_syn_linecont_time));
     }
     return FALSE;
 }
@@ -985,7 +1017,10 @@
      * previous line and regions that have "keepend".
      */
     if (current_state.ga_len > 0)
+    {
 	syn_update_ends(TRUE);
+	check_state_ends();
+    }
 
     next_match_idx = -1;
     ++current_line_id;
@@ -1059,7 +1094,6 @@
 	}
     }
     check_keepend();
-    check_state_ends();
 }
 
 /****************************************
@@ -1941,9 +1975,9 @@
 	    if (do_keywords)
 	    {
 	      line = syn_getcurline();
-	      if (vim_iswordc_buf(line + current_col, syn_buf)
+	      if (vim_iswordp_buf(line + current_col, syn_buf)
 		      && (current_col == 0
-			  || !vim_iswordc_buf(line + current_col - 1
+			  || !vim_iswordp_buf(line + current_col - 1
 #ifdef FEAT_MBYTE
 			      - (has_mbyte
 				  ? (*mb_head_off)(line, line + current_col - 1)
@@ -2055,8 +2089,10 @@
 
 			    regmatch.rmm_ic = spp->sp_ic;
 			    regmatch.regprog = spp->sp_prog;
-			    if (!syn_regexec(&regmatch, current_lnum,
-							     (colnr_T)lc_col))
+			    if (!syn_regexec(&regmatch,
+					     current_lnum,
+					     (colnr_T)lc_col,
+				             IF_SYN_TIME(&spp->sp_time)))
 			    {
 				/* no match in this line, try another one */
 				spp->sp_startcol = MAXCOL;
@@ -2528,7 +2564,7 @@
 check_state_ends()
 {
     stateitem_T	*cur_si;
-    int		had_extend = FALSE;
+    int		had_extend;
 
     cur_si = &CUR_STATE(current_state.ga_len - 1);
     for (;;)
@@ -2561,6 +2597,9 @@
 #endif
 		update_si_attr(current_state.ga_len - 1);
 
+		/* nextgroup= should not match in the end pattern */
+		current_next_list = NULL;
+
 		/* what matches next may be different now, clear it */
 		next_match_idx = 0;
 		next_match_col = MAXCOL;
@@ -2578,8 +2617,7 @@
 
 		/* When the ended item has "extend", another item with
 		 * "keepend" now needs to check for its end. */
-		 if (cur_si->si_flags & HL_EXTEND)
-		     had_extend = TRUE;
+		 had_extend = (cur_si->si_flags & HL_EXTEND);
 
 		pop_current_state();
 
@@ -2935,7 +2973,8 @@
 
 	    regmatch.rmm_ic = spp->sp_ic;
 	    regmatch.regprog = spp->sp_prog;
-	    if (syn_regexec(&regmatch, startpos->lnum, lc_col))
+	    if (syn_regexec(&regmatch, startpos->lnum, lc_col,
+						  IF_SYN_TIME(&spp->sp_time)))
 	    {
 		if (best_idx == -1 || regmatch.startpos[0].col
 					      < best_regmatch.startpos[0].col)
@@ -2966,7 +3005,8 @@
 		lc_col = 0;
 	    regmatch.rmm_ic = spp_skip->sp_ic;
 	    regmatch.regprog = spp_skip->sp_prog;
-	    if (syn_regexec(&regmatch, startpos->lnum, lc_col)
+	    if (syn_regexec(&regmatch, startpos->lnum, lc_col,
+					      IF_SYN_TIME(&spp_skip->sp_time))
 		    && regmatch.startpos[0].col
 					     <= best_regmatch.startpos[0].col)
 	    {
@@ -3214,13 +3254,37 @@
  * Returns TRUE when there is a match.
  */
     static int
-syn_regexec(rmp, lnum, col)
+syn_regexec(rmp, lnum, col, st)
     regmmatch_T	*rmp;
     linenr_T	lnum;
     colnr_T	col;
+    syn_time_T  *st UNUSED;
 {
+    int r;
+#ifdef FEAT_PROFILE
+    proftime_T	pt;
+
+    if (syn_time_on)
+	profile_start(&pt);
+#endif
+
     rmp->rmm_maxcol = syn_buf->b_p_smc;
-    if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL) > 0)
+    r = vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL);
+
+#ifdef FEAT_PROFILE
+    if (syn_time_on)
+    {
+	profile_end(&pt);
+	profile_add(&st->total, &pt);
+	if (profile_cmp(&pt, &st->slowest) < 0)
+	    st->slowest = pt;
+	++st->count;
+	if (r > 0)
+	    ++st->match;
+    }
+#endif
+
+    if (r > 0)
     {
 	rmp->startpos[0].lnum += lnum;
 	rmp->endpos[0].lnum += lnum;
@@ -3265,7 +3329,7 @@
 #endif
 	    ++kwlen;
     }
-    while (vim_iswordc_buf(kwp + kwlen, syn_buf));
+    while (vim_iswordp_buf(kwp + kwlen, syn_buf));
 
     if (kwlen > MAXKEYWLEN)
 	return 0;
@@ -3431,7 +3495,7 @@
     block->b_syn_sync_maxlines = 0;
     block->b_syn_sync_linebreaks = 0;
 
-    vim_free(block->b_syn_linecont_prog);
+    vim_regfree(block->b_syn_linecont_prog);
     block->b_syn_linecont_prog = NULL;
     vim_free(block->b_syn_linecont_pat);
     block->b_syn_linecont_pat = NULL;
@@ -3442,6 +3506,9 @@
     /* free the stored states */
     syn_stack_free_all(block);
     invalidate_current_state();
+
+    /* Reset the counter for ":syn include" */
+    running_syn_inc_tag = 0;
 }
 
 /*
@@ -3477,7 +3544,7 @@
     curwin->w_s->b_syn_sync_maxlines = 0;
     curwin->w_s->b_syn_sync_linebreaks = 0;
 
-    vim_free(curwin->w_s->b_syn_linecont_prog);
+    vim_regfree(curwin->w_s->b_syn_linecont_prog);
     curwin->w_s->b_syn_linecont_prog = NULL;
     vim_free(curwin->w_s->b_syn_linecont_pat);
     curwin->w_s->b_syn_linecont_pat = NULL;
@@ -3516,7 +3583,7 @@
     int		i;
 {
     vim_free(SYN_ITEMS(block)[i].sp_pattern);
-    vim_free(SYN_ITEMS(block)[i].sp_prog);
+    vim_regfree(SYN_ITEMS(block)[i].sp_prog);
     /* Only free sp_cont_list and sp_next_list of first start pattern */
     if (i == 0 || SYN_ITEMS(block)[i - 1].sp_type != SPTYPE_START)
     {
@@ -3751,7 +3818,7 @@
 
     if (!syntax_present(curwin))
     {
-	MSG(_("No Syntax items defined for this buffer"));
+	MSG(_(msg_no_items));
 	return;
     }
 
@@ -3988,17 +4055,17 @@
 }
 
     static void
-syn_list_flags(nl, flags, attr)
-    struct name_list	*nl;
+syn_list_flags(nlist, flags, attr)
+    struct name_list	*nlist;
     int			flags;
     int			attr;
 {
     int		i;
 
-    for (i = 0; nl[i].flag != 0; ++i)
-	if (flags & nl[i].flag)
+    for (i = 0; nlist[i].flag != 0; ++i)
+	if (flags & nlist[i].flag)
 	{
-	    msg_puts_attr((char_u *)nl[i].name, attr);
+	    msg_puts_attr((char_u *)nlist[i].name, attr);
 	    msg_putchar(' ');
 	}
 }
@@ -4537,6 +4604,13 @@
 		;
 #endif
 	    }
+#ifdef FEAT_CONCEAL
+	    if (!vim_isprintc_strict(*conceal_char))
+	    {
+		EMSG(_("E844: invalid cchar value"));
+		return NULL;
+	    }
+#endif
 	    arg = skipwhite(arg + 7);
 	}
 	else
@@ -4654,6 +4728,8 @@
 	    return;
 	}
 	sgl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
+	if (sgl_id == 0)
+	    return;
 	/* separate_nextcmd() and expand_filename() depend on this */
 	eap->arg = rest;
     }
@@ -4682,6 +4758,11 @@
      * Save and restore the existing top-level grouplist id and ":syn
      * include" tag around the actual inclusion.
      */
+    if (running_syn_inc_tag >= MAX_SYN_INC_TAG)
+    {
+	EMSG((char_u *)_("E847: Too many syntax includes"));
+	return;
+    }
     prev_syn_inc_tag = current_syn_inc_tag;
     current_syn_inc_tag = ++running_syn_inc_tag;
     prev_toplvl_grp = curwin->w_s->b_syn_topgrp;
@@ -4705,7 +4786,7 @@
     char_u	*group_name_end;
     int		syn_id;
     char_u	*rest;
-    char_u	*keyword_copy;
+    char_u	*keyword_copy = NULL;
     char_u	*p;
     char_u	*kw;
     syn_opt_arg_T syn_opt_arg;
@@ -4717,9 +4798,9 @@
     if (rest != NULL)
     {
 	syn_id = syn_check_group(arg, (int)(group_name_end - arg));
-
-	/* allocate a buffer, for removing the backslashes in the keyword */
-	keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
+	if (syn_id != 0)
+	    /* allocate a buffer, for removing backslashes in the keyword */
+	    keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
 	if (keyword_copy != NULL)
 	{
 	    syn_opt_arg.flags = 0;
@@ -4910,7 +4991,7 @@
     /*
      * Something failed, free the allocated memory.
      */
-    vim_free(item.sp_prog);
+    vim_regfree(item.sp_prog);
     vim_free(item.sp_pattern);
     vim_free(syn_opt_arg.cont_list);
     vim_free(syn_opt_arg.cont_in_list);
@@ -5126,7 +5207,8 @@
 			    (item == ITEM_SKIP) ? SPTYPE_SKIP : SPTYPE_END;
 		    SYN_ITEMS(curwin->w_s)[idx].sp_flags |= syn_opt_arg.flags;
 		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.id = syn_id;
-		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag = current_syn_inc_tag;
+		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag =
+							  current_syn_inc_tag;
 		    SYN_ITEMS(curwin->w_s)[idx].sp_syn_match_id =
 							ppp->pp_matchgroup_id;
 #ifdef FEAT_CONCEAL
@@ -5166,7 +5248,7 @@
 	{
 	    if (!success)
 	    {
-		vim_free(ppp->pp_synp->sp_prog);
+		vim_regfree(ppp->pp_synp->sp_prog);
 		vim_free(ppp->pp_synp->sp_pattern);
 	    }
 	    vim_free(ppp->pp_synp);
@@ -5419,6 +5501,14 @@
 	curwin->w_s->b_syn_clusters.ga_growsize = 10;
     }
 
+    len = curwin->w_s->b_syn_clusters.ga_len;
+    if (len >= MAX_CLUSTER_ID)
+    {
+	EMSG((char_u *)_("E848: Too many syntax clusters"));
+	vim_free(name);
+	return 0;
+    }
+
     /*
      * Make room for at least one other cluster entry.
      */
@@ -5427,7 +5517,6 @@
 	vim_free(name);
 	return 0;
     }
-    len = curwin->w_s->b_syn_clusters.ga_len;
 
     vim_memset(&(SYN_CLSTR(curwin->w_s)[len]), 0, sizeof(syn_cluster_T));
     SYN_CLSTR(curwin->w_s)[len].scl_name = name;
@@ -5469,8 +5558,10 @@
 
     if (rest != NULL)
     {
-	scl_id = syn_check_cluster(arg, (int)(group_name_end - arg))
-							      - SYNID_CLUSTER;
+	scl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
+	if (scl_id == 0)
+	    return;
+	scl_id -= SYNID_CLUSTER;
 
 	for (;;)
 	{
@@ -5509,7 +5600,7 @@
 	if (got_clstr)
 	{
 	    redraw_curbuf_later(SOME_VALID);
-	    syn_stack_free_all(curwin->w_s);	/* Need to recompute all syntax. */
+	    syn_stack_free_all(curwin->w_s);	/* Need to recompute all. */
 	}
     }
 
@@ -5567,6 +5658,9 @@
     if (ci->sp_prog == NULL)
 	return NULL;
     ci->sp_ic = curwin->w_s->b_syn_ic;
+#ifdef FEAT_PROFILE
+    syn_clear_time(&ci->sp_time);
+#endif
 
     /*
      * Check for a match, highlight or region offset.
@@ -5741,8 +5835,11 @@
 		cpo_save = p_cpo;
 		p_cpo = (char_u *)"";
 		curwin->w_s->b_syn_linecont_prog =
-			    vim_regcomp(curwin->w_s->b_syn_linecont_pat, RE_MAGIC);
+		       vim_regcomp(curwin->w_s->b_syn_linecont_pat, RE_MAGIC);
 		p_cpo = cpo_save;
+#ifdef FEAT_PROFILE
+		syn_clear_time(&curwin->w_s->b_syn_linecont_time);
+#endif
 
 		if (curwin->w_s->b_syn_linecont_prog == NULL)
 		{
@@ -5925,7 +6022,7 @@
 			    id = -1;	    /* remember that we found one */
 			}
 		    }
-		    vim_free(regmatch.regprog);
+		    vim_regfree(regmatch.regprog);
 		}
 	    }
 	    vim_free(name);
@@ -6027,7 +6124,7 @@
     static int	depth = 0;
     int		r;
 
-    /* If spp has a "containedin" list and "cur_si" is in it, return TRUE. */
+    /* If ssp has a "containedin" list and "cur_si" is in it, return TRUE. */
     if (cur_si != NULL && ssp->cont_in_list != NULL
 					    && !(cur_si->si_flags & HL_MATCH))
     {
@@ -6198,7 +6295,7 @@
 	curwin->w_p_spell = FALSE;	/* No spell checking */
 	clear_string_option(&curwin->w_s->b_p_spc);
 	clear_string_option(&curwin->w_s->b_p_spf);
-	vim_free(curwin->w_s->b_cap_prog);
+	vim_regfree(curwin->w_s->b_cap_prog);
 	curwin->w_s->b_cap_prog = NULL;
 	clear_string_option(&curwin->w_s->b_p_spl);
 #endif
@@ -6429,8 +6526,205 @@
 }
 #endif
 
-#endif /* FEAT_SYN_HL */
+#ifdef FEAT_PROFILE
+/*
+ * ":syntime".
+ */
+    void
+ex_syntime(eap)
+    exarg_T	*eap;
+{
+    if (STRCMP(eap->arg, "on") == 0)
+	syn_time_on = TRUE;
+    else if (STRCMP(eap->arg, "off") == 0)
+	syn_time_on = FALSE;
+    else if (STRCMP(eap->arg, "clear") == 0)
+	syntime_clear();
+    else if (STRCMP(eap->arg, "report") == 0)
+	syntime_report();
+    else
+	EMSG2(_(e_invarg2), eap->arg);
+}
+
+    static void
+syn_clear_time(st)
+    syn_time_T *st;
+{
+    profile_zero(&st->total);
+    profile_zero(&st->slowest);
+    st->count = 0;
+    st->match = 0;
+}
+
+/*
+ * Clear the syntax timing for the current buffer.
+ */
+    static void
+syntime_clear()
+{
+    int		idx;
+    synpat_T	*spp;
+
+    if (!syntax_present(curwin))
+    {
+	MSG(_(msg_no_items));
+	return;
+    }
+    for (idx = 0; idx < curwin->w_s->b_syn_patterns.ga_len; ++idx)
+    {
+	spp = &(SYN_ITEMS(curwin->w_s)[idx]);
+	syn_clear_time(&spp->sp_time);
+    }
+}
 
+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+/*
+ * Function given to ExpandGeneric() to obtain the possible arguments of the
+ * ":syntime {on,off,clear,report}" command.
+ */
+    char_u *
+get_syntime_arg(xp, idx)
+    expand_T	*xp UNUSED;
+    int		idx;
+{
+    switch (idx)
+    {
+	case 0: return (char_u *)"on";
+	case 1: return (char_u *)"off";
+	case 2: return (char_u *)"clear";
+	case 3: return (char_u *)"report";
+    }
+    return NULL;
+}
+#endif
+
+typedef struct
+{
+    proftime_T	total;
+    int		count;
+    int		match;
+    proftime_T	slowest;
+    proftime_T	average;
+    int		id;
+    char_u	*pattern;
+} time_entry_T;
+
+    static int
+#ifdef __BORLANDC__
+_RTLENTRYF
+#endif
+syn_compare_syntime(v1, v2)
+    const void	*v1;
+    const void	*v2;
+{
+    const time_entry_T	*s1 = v1;
+    const time_entry_T	*s2 = v2;
+
+    return profile_cmp(&s1->total, &s2->total);
+}
+
+/*
+ * Clear the syntax timing for the current buffer.
+ */
+    static void
+syntime_report()
+{
+    int		idx;
+    synpat_T	*spp;
+# ifdef FEAT_FLOAT
+    proftime_T	tm;
+# endif
+    int		len;
+    proftime_T	total_total;
+    int		total_count = 0;
+    garray_T    ga;
+    time_entry_T *p;
+
+    if (!syntax_present(curwin))
+    {
+	MSG(_(msg_no_items));
+	return;
+    }
+
+    ga_init2(&ga, sizeof(time_entry_T), 50);
+    profile_zero(&total_total);
+    for (idx = 0; idx < curwin->w_s->b_syn_patterns.ga_len; ++idx)
+    {
+	spp = &(SYN_ITEMS(curwin->w_s)[idx]);
+	if (spp->sp_time.count > 0)
+	{
+	    ga_grow(&ga, 1);
+	    p = ((time_entry_T *)ga.ga_data) + ga.ga_len;
+	    p->total = spp->sp_time.total;
+	    profile_add(&total_total, &spp->sp_time.total);
+	    p->count = spp->sp_time.count;
+	    p->match = spp->sp_time.match;
+	    total_count += spp->sp_time.count;
+	    p->slowest = spp->sp_time.slowest;
+# ifdef FEAT_FLOAT
+	    profile_divide(&spp->sp_time.total, spp->sp_time.count, &tm);
+	    p->average = tm;
+# endif
+	    p->id = spp->sp_syn.id;
+	    p->pattern = spp->sp_pattern;
+	    ++ga.ga_len;
+	}
+    }
+
+    /* sort on total time */
+    qsort(ga.ga_data, (size_t)ga.ga_len, sizeof(time_entry_T),
+							 syn_compare_syntime);
+
+    MSG_PUTS_TITLE(_("  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"));
+    MSG_PUTS("\n");
+    for (idx = 0; idx < ga.ga_len && !got_int; ++idx)
+    {
+	spp = &(SYN_ITEMS(curwin->w_s)[idx]);
+	p = ((time_entry_T *)ga.ga_data) + idx;
+
+	MSG_PUTS(profile_msg(&p->total));
+	MSG_PUTS(" "); /* make sure there is always a separating space */
+	msg_advance(13);
+	msg_outnum(p->count);
+	MSG_PUTS(" ");
+	msg_advance(20);
+	msg_outnum(p->match);
+	MSG_PUTS(" ");
+	msg_advance(26);
+	MSG_PUTS(profile_msg(&p->slowest));
+	MSG_PUTS(" ");
+	msg_advance(38);
+# ifdef FEAT_FLOAT
+	MSG_PUTS(profile_msg(&p->average));
+	MSG_PUTS(" ");
+# endif
+	msg_advance(50);
+	msg_outtrans(HL_TABLE()[p->id - 1].sg_name);
+	MSG_PUTS(" ");
+
+	msg_advance(69);
+	if (Columns < 80)
+	    len = 20; /* will wrap anyway */
+	else
+	    len = Columns - 70;
+	if (len > (int)STRLEN(p->pattern))
+	    len = (int)STRLEN(p->pattern);
+	msg_outtrans_len(p->pattern, len);
+	MSG_PUTS("\n");
+    }
+    ga_clear(&ga);
+    if (!got_int)
+    {
+	MSG_PUTS("\n");
+	MSG_PUTS(profile_msg(&total_total));
+	msg_advance(13);
+	msg_outnum(total_count);
+	MSG_PUTS("\n");
+    }
+}
+#endif
+
+#endif /* FEAT_SYN_HL */
 
 /**************************************
  *  Highlighting stuff		      *
@@ -6475,8 +6769,6 @@
 	     "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red"),
 #endif
 #ifdef FEAT_INS_EXPAND
-	CENT("PmenuThumb cterm=reverse",
-	     "PmenuThumb cterm=reverse gui=reverse"),
 	CENT("PmenuSbar ctermbg=Grey",
 	     "PmenuSbar ctermbg=Grey guibg=Grey"),
 #endif
@@ -6499,6 +6791,8 @@
 	     "Directory term=bold ctermfg=DarkBlue guifg=Blue"),
 	CENT("LineNr term=underline ctermfg=Brown",
 	     "LineNr term=underline ctermfg=Brown guifg=Brown"),
+	CENT("CursorLineNr term=bold ctermfg=Brown",
+	     "CursorLineNr term=bold ctermfg=Brown gui=bold guifg=Brown"),
 	CENT("MoreMsg term=bold ctermfg=DarkGreen",
 	     "MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
 	CENT("Question term=standout ctermfg=DarkGreen",
@@ -6516,10 +6810,12 @@
 	     "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
 #endif
 #ifdef FEAT_INS_EXPAND
-	CENT("Pmenu ctermbg=LightMagenta",
-	     "Pmenu ctermbg=LightMagenta guibg=LightMagenta"),
-	CENT("PmenuSel ctermbg=LightGrey",
-	     "PmenuSel ctermbg=LightGrey guibg=Grey"),
+	CENT("PmenuThumb ctermbg=Black",
+	     "PmenuThumb ctermbg=Black guibg=Black"),
+	CENT("Pmenu ctermbg=LightMagenta ctermfg=Black",
+	     "Pmenu ctermbg=LightMagenta ctermfg=Black guibg=LightMagenta"),
+	CENT("PmenuSel ctermbg=LightGrey ctermfg=Black",
+	     "PmenuSel ctermbg=LightGrey ctermfg=Black guibg=Grey"),
 #endif
 	CENT("SpecialKey term=bold ctermfg=DarkBlue",
 	     "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
@@ -6585,6 +6881,8 @@
 	     "Directory term=bold ctermfg=LightCyan guifg=Cyan"),
 	CENT("LineNr term=underline ctermfg=Yellow",
 	     "LineNr term=underline ctermfg=Yellow guifg=Yellow"),
+	CENT("CursorLineNr term=bold ctermfg=Yellow",
+	     "CursorLineNr term=bold ctermfg=Yellow gui=bold guifg=Yellow"),
 	CENT("MoreMsg term=bold ctermfg=LightGreen",
 	     "MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen"),
 	CENT("Question term=standout ctermfg=LightGreen",
@@ -6604,10 +6902,12 @@
 	     "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
 #endif
 #ifdef FEAT_INS_EXPAND
-	CENT("Pmenu ctermbg=Magenta",
-	     "Pmenu ctermbg=Magenta guibg=Magenta"),
-	CENT("PmenuSel ctermbg=DarkGrey",
-	     "PmenuSel ctermbg=DarkGrey guibg=DarkGrey"),
+	CENT("PmenuThumb ctermbg=White",
+	     "PmenuThumb ctermbg=White guibg=White"),
+	CENT("Pmenu ctermbg=Magenta ctermfg=Black",
+	     "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
+	CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
+	     "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
 #endif
 	CENT("Title term=bold ctermfg=LightMagenta",
 	     "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
@@ -7212,14 +7512,13 @@
 		HL_TABLE()[idx].sg_fontset = NOFONTSET;
 # endif
 		hl_do_font(idx, arg, is_normal_group, is_menu_group,
-							    is_tooltip_group);
+						     is_tooltip_group, FALSE);
 
 # ifdef FEAT_XFONTSET
 		if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
 		{
-		    /* New fontset was accepted. Free the old one, if there was
-		     * one.
-		     */
+		    /* New fontset was accepted. Free the old one, if there
+		     * was one. */
 		    gui_mch_free_fontset(temp_sg_fontset);
 		    vim_free(HL_TABLE()[idx].sg_font_name);
 		    HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
@@ -7230,8 +7529,7 @@
 		if (HL_TABLE()[idx].sg_font != NOFONT)
 		{
 		    /* New font was accepted. Free the old one, if there was
-		     * one.
-		     */
+		     * one. */
 		    gui_mch_free_font(temp_sg_font);
 		    vim_free(HL_TABLE()[idx].sg_font_name);
 		    HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
@@ -7600,10 +7898,10 @@
 		/*
 		 * Copy characters from arg[] to buf[], translating <> codes.
 		 */
-		for (p = arg, off = 0; off < 100 && *p; )
+		for (p = arg, off = 0; off < 100 - 6 && *p; )
 		{
 		    len = trans_special(&p, buf + off, FALSE);
-		    if (len)		    /* recognized special char */
+		    if (len > 0)	    /* recognized special char */
 			off += len;
 		    else		    /* copy as normal char */
 			buf[off++] = *p++;
@@ -8017,12 +8315,13 @@
  * Get the font or fontset for one highlight group.
  */
     static void
-hl_do_font(idx, arg, do_normal, do_menu, do_tooltip)
+hl_do_font(idx, arg, do_normal, do_menu, do_tooltip, free_font)
     int		idx;
     char_u	*arg;
     int		do_normal;		/* set normal font */
     int		do_menu UNUSED;		/* set menu font */
     int		do_tooltip UNUSED;	/* set tooltip font */
+    int		free_font;		/* free current font/fontset */
 {
 # ifdef FEAT_XFONTSET
     /* If 'guifontset' is not empty, first try using the name as a
@@ -8036,6 +8335,9 @@
 	|| do_tooltip
 #  endif
 	    )
+    {
+	if (free_font)
+	    gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
 	HL_TABLE()[idx].sg_fontset = fontset_name2handle(arg, 0
 #  ifdef FONTSET_ALWAYS
 		|| do_menu
@@ -8044,10 +8346,11 @@
 		|| do_tooltip
 #  endif
 		);
+    }
     if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
     {
-	/* If it worked and it's the Normal group, use it as the
-	 * normal fontset.  Same for the Menu group. */
+	/* If it worked and it's the Normal group, use it as the normal
+	 * fontset.  Same for the Menu group. */
 	if (do_normal)
 	    gui_init_font(arg, TRUE);
 #   if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
@@ -8079,6 +8382,8 @@
     else
 # endif
     {
+	if (free_font)
+	    gui_mch_free_font(HL_TABLE()[idx].sg_font);
 	HL_TABLE()[idx].sg_font = font_name2handle(arg);
 	/* If it worked and it's the Normal group, use it as the
 	 * normal font.  Same for the Menu group. */
@@ -8545,8 +8850,8 @@
 		if (iarg & hl_attr_table[i])
 		{
 		    if (buf[0] != NUL)
-			STRCAT(buf, ",");
-		    STRCAT(buf, hl_name_table[i]);
+			vim_strcat(buf, (char_u *)",", 100);
+		    vim_strcat(buf, (char_u *)hl_name_table[i], 100);
 		    iarg &= ~hl_attr_table[i];	    /* don't want "inverse" */
 		}
 	    }
@@ -8965,6 +9270,13 @@
 	highlight_ga.ga_growsize = 10;
     }
 
+    if (highlight_ga.ga_len >= MAX_HL_ID)
+    {
+	EMSG(_("E849: Too many highlight and syntax groups"));
+	vim_free(name);
+	return 0;
+    }
+
     /*
      * Make room for at least one other syntax_highlight entry.
      */
@@ -9108,7 +9420,7 @@
     if (HL_TABLE()[idx].sg_font_name != NULL)
     {
 	hl_do_font(idx, HL_TABLE()[idx].sg_font_name, FALSE, do_menu,
-		   do_tooltip);
+							    do_tooltip, TRUE);
 	didit = TRUE;
     }
     if (HL_TABLE()[idx].sg_gui_fg_name != NULL)
@@ -9422,7 +9734,7 @@
     int	    cnt;
     int	    attr;
 {
-    msg_puts_attr((char_u *)("N \bI \b!  \b" + cnt / 11), attr);
+    msg_puts_attr((char_u *)&("N \bI \b!  \b"[cnt / 11]), attr);
     msg_clr_eos();
     out_flush();
     ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
diff -Naur vim73.orig/src/tag.c vim73/src/tag.c
--- vim73.orig/src/tag.c	2010-08-10 07:25:22.000000000 +0000
+++ vim73/src/tag.c	2013-08-04 19:09:11.063942496 +0000
@@ -11,10 +11,6 @@
  * Code to handle tags and the tag stack
  */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for lseek(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 /*
@@ -208,7 +204,7 @@
     else
     {
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-	if (g_do_tagpreview)
+	if (g_do_tagpreview != 0)
 	    use_tagstack = FALSE;
 	else
 #endif
@@ -226,7 +222,7 @@
 		    ))
 	{
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-	    if (g_do_tagpreview)
+	    if (g_do_tagpreview != 0)
 	    {
 		if (ptag_entry.tagname != NULL
 			&& STRCMP(ptag_entry.tagname, tag) == 0)
@@ -282,7 +278,7 @@
 	{
 	    if (
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-		    g_do_tagpreview ? ptag_entry.tagname == NULL :
+		    g_do_tagpreview != 0 ? ptag_entry.tagname == NULL :
 #endif
 		    tagstacklen == 0)
 	    {
@@ -365,7 +361,7 @@
 	       )
 	    {
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-		if (g_do_tagpreview)
+		if (g_do_tagpreview != 0)
 		{
 		    cur_match = ptag_entry.cur_match;
 		    cur_fnum = ptag_entry.cur_fnum;
@@ -403,7 +399,7 @@
 		prevtagstackidx = tagstackidx;
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-		if (g_do_tagpreview)
+		if (g_do_tagpreview != 0)
 		{
 		    cur_match = ptag_entry.cur_match;
 		    cur_fnum = ptag_entry.cur_fnum;
@@ -441,7 +437,7 @@
 	}
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-	if (g_do_tagpreview)
+	if (g_do_tagpreview != 0)
 	{
 	    if (type != DT_SELECT && type != DT_JUMP)
 	    {
@@ -496,7 +492,7 @@
 	if (use_tagstack)
 	    name = tagstack[tagstackidx].tagname;
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-	else if (g_do_tagpreview)
+	else if (g_do_tagpreview != 0)
 	    name = ptag_entry.tagname;
 #endif
 	else
@@ -624,7 +620,7 @@
 		    parse_match(matches[i], &tagp);
 		    if (!new_tag && (
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-				(g_do_tagpreview
+				(g_do_tagpreview != 0
 				 && i == ptag_entry.cur_match) ||
 #endif
 				(use_tagstack
@@ -779,17 +775,25 @@
 	    {
 		list_T	*list;
 		char_u	tag_name[128 + 1];
-		char_u	fname[MAXPATHL + 1];
-		char_u	cmd[CMDBUFFSIZE + 1];
+		char_u	*fname;
+		char_u	*cmd;
 
 		/*
 		 * Add the matching tags to the location list for the current
 		 * window.
 		 */
 
+		fname = alloc(MAXPATHL + 1);
+		cmd = alloc(CMDBUFFSIZE + 1);
 		list = list_alloc();
-		if (list == NULL)
+		if (list == NULL || fname == NULL || cmd == NULL)
+		{
+		    vim_free(cmd);
+		    vim_free(fname);
+		    if (list != NULL)
+			list_free(list, TRUE);
 		    goto end_do_tag;
+		}
 
 		for (i = 0; i < num_matches; ++i)
 		{
@@ -810,7 +814,7 @@
 		    p = tag_full_fname(&tagp);
 		    if (p == NULL)
 			continue;
-		    STRCPY(fname, p);
+		    vim_strncpy(fname, p, MAXPATHL);
 		    vim_free(p);
 
 		    /*
@@ -915,6 +919,8 @@
 		set_errorlist(curwin, list, ' ', IObuff);
 
 		list_free(list, TRUE);
+		vim_free(fname);
+		vim_free(cmd);
 
 		cur_match = 0;		/* Jump to the first tag */
 	    }
@@ -966,7 +972,7 @@
 		++tagstackidx;
 	    }
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-	    else if (g_do_tagpreview)
+	    else if (g_do_tagpreview != 0)
 	    {
 		ptag_entry.cur_match = cur_match;
 		ptag_entry.cur_fnum = cur_fnum;
@@ -1271,6 +1277,7 @@
 {
     FILE       *fp;
     char_u     *lbuf;			/* line buffer */
+    int		lbuf_size = LSIZE;	/* length of lbuf */
     char_u     *tag_fname;		/* name of tag file */
     tagname_T	tn;			/* info for get_tagfname() */
     int		first_file;		/* trying first tag file */
@@ -1285,6 +1292,7 @@
     char_u	*s;
     int		i;
 #ifdef FEAT_TAG_BINS
+    int		tag_file_sorted = NUL;	/* !_TAG_FILE_SORTED value */
     struct tag_search_info	/* Binary search file offsets */
     {
 	off_t	low_offset;	/* offset for first char of first line that
@@ -1345,7 +1353,6 @@
     int		match_count = 0;		/* number of matches found */
     char_u	**matches;
     int		mtt;
-    int		len;
     int		help_save;
 #ifdef FEAT_MULTI_LANG
     int		help_pri = 0;
@@ -1354,13 +1361,8 @@
     char_u	*saved_pat = NULL;		/* copy of pat[] */
 #endif
 
-    /* Use two sets of variables for the pattern: "orgpat" holds the values
-     * for the original pattern and "convpat" converted from 'encoding' to
-     * encoding of the tags file.  "pats" point to either one of these. */
-    pat_T	*pats;
     pat_T	orgpat;			/* holds unconverted pattern info */
 #ifdef FEAT_MBYTE
-    pat_T	convpat;		/* holds converted pattern info */
     vimconv_T	vimconv;
 #endif
 
@@ -1384,7 +1386,6 @@
 
     help_save = curbuf->b_help;
     orgpat.pat = pat;
-    pats = &orgpat;
 #ifdef FEAT_MBYTE
     vimconv.vc_type = CONV_NONE;
 #endif
@@ -1392,7 +1393,7 @@
 /*
  * Allocate memory for the buffers that are used
  */
-    lbuf = alloc(LSIZE);
+    lbuf = alloc(lbuf_size);
     tag_fname = alloc(MAXPATHL + 1);
 #ifdef FEAT_EMACS_TAGS
     ebuf = alloc(LSIZE);
@@ -1418,30 +1419,32 @@
     if (help_only)				/* want tags from help file */
 	curbuf->b_help = TRUE;			/* will be restored later */
 
-    pats->len = (int)STRLEN(pat);
+    orgpat.len = (int)STRLEN(pat);
 #ifdef FEAT_MULTI_LANG
     if (curbuf->b_help)
     {
 	/* When "@ab" is specified use only the "ab" language, otherwise
 	 * search all languages. */
-	if (pats->len > 3 && pat[pats->len - 3] == '@'
-					  && ASCII_ISALPHA(pat[pats->len - 2])
-					 && ASCII_ISALPHA(pat[pats->len - 1]))
+	if (orgpat.len > 3 && pat[orgpat.len - 3] == '@'
+					  && ASCII_ISALPHA(pat[orgpat.len - 2])
+					 && ASCII_ISALPHA(pat[orgpat.len - 1]))
 	{
-	    saved_pat = vim_strnsave(pat, pats->len - 3);
+	    saved_pat = vim_strnsave(pat, orgpat.len - 3);
 	    if (saved_pat != NULL)
 	    {
-		help_lang_find = &pat[pats->len - 2];
-		pats->pat = saved_pat;
-		pats->len -= 3;
+		help_lang_find = &pat[orgpat.len - 2];
+		orgpat.pat = saved_pat;
+		orgpat.len -= 3;
 	    }
 	}
     }
 #endif
-    if (p_tl != 0 && pats->len > p_tl)		/* adjust for 'taglength' */
-	pats->len = p_tl;
+    if (p_tl != 0 && orgpat.len > p_tl)		/* adjust for 'taglength' */
+	orgpat.len = p_tl;
 
-    prepare_pats(pats, has_re);
+    prepare_pats(&orgpat, has_re);
+    if (has_re && orgpat.regmatch.regprog == NULL)
+	goto findtag_end;
 
 #ifdef FEAT_TAG_BINS
     /* This is only to avoid a compiler warning for using search_info
@@ -1460,13 +1463,13 @@
      * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
      */
 #ifdef FEAT_TAG_BINS
-    pats->regmatch.rm_ic = ((p_ic || !noic)
-				&& (findall || pats->headlen == 0 || !p_tbs));
+    orgpat.regmatch.rm_ic = ((p_ic || !noic)
+				&& (findall || orgpat.headlen == 0 || !p_tbs));
     for (round = 1; round <= 2; ++round)
     {
-      linear = (pats->headlen == 0 || !p_tbs || round == 2);
+      linear = (orgpat.headlen == 0 || !p_tbs || round == 2);
 #else
-      pats->regmatch.rm_ic = (p_ic || !noic);
+      orgpat.regmatch.rm_ic = (p_ic || !noic);
 #endif
 
       /*
@@ -1695,6 +1698,36 @@
 	    }
 line_read_in:
 
+#ifdef FEAT_MBYTE
+	    if (vimconv.vc_type != CONV_NONE)
+	    {
+		char_u	*conv_line;
+		int	len;
+
+		/* Convert every line.  Converting the pattern from 'enc' to
+		 * the tags file encoding doesn't work, because characters are
+		 * not recognized. */
+		conv_line = string_convert(&vimconv, lbuf, NULL);
+		if (conv_line != NULL)
+		{
+		    /* Copy or swap lbuf and conv_line. */
+		    len = (int)STRLEN(conv_line) + 1;
+		    if (len > lbuf_size)
+		    {
+			vim_free(lbuf);
+			lbuf = conv_line;
+			lbuf_size = len;
+		    }
+		    else
+		    {
+			STRCPY(lbuf, conv_line);
+			vim_free(conv_line);
+		    }
+		}
+	    }
+#endif
+
+
 #ifdef FEAT_EMACS_TAGS
 	    /*
 	     * Emacs tags line with CTRL-L: New file name on next line.
@@ -1764,6 +1797,38 @@
 	     */
 	    if (state == TS_START)
 	    {
+		/* The header ends when the line sorts below "!_TAG_".
+		 * There may be non-header items before the header though,
+		 * e.g. "!" itself. When case is folded lower case letters
+		 * sort before "_". */
+		if (STRNCMP(lbuf, "!_TAG_", 6) <= 0
+				|| (lbuf[0] == '!' && ASCII_ISLOWER(lbuf[1])))
+		{
+		    /*
+		     * Read header line.
+		     */
+#ifdef FEAT_TAG_BINS
+		    if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
+			tag_file_sorted = lbuf[18];
+#endif
+#ifdef FEAT_MBYTE
+		    if (STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
+		    {
+			/* Prepare to convert every line from the specified
+			 * encoding to 'encoding'. */
+			for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
+			    ;
+			*p = NUL;
+			convert_setup(&vimconv, lbuf + 20, p_enc);
+		    }
+#endif
+
+		    /* Read the next line.  Unrecognized flags are ignored. */
+		    continue;
+		}
+
+		/* Headers ends. */
+
 #ifdef FEAT_TAG_BINS
 		/*
 		 * When there is no tag head, or ignoring case, need to do a
@@ -1780,26 +1845,22 @@
 		if (linear)
 # endif
 		    state = TS_LINEAR;
-		else if (STRNCMP(lbuf, "!_TAG_", 6) > 0)
+		else if (tag_file_sorted == NUL)
 		    state = TS_BINARY;
-		else if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
-		{
-		    /* Check sorted flag */
-		    if (lbuf[18] == '1')
+		else if (tag_file_sorted == '1')
 			state = TS_BINARY;
-		    else if (lbuf[18] == '2')
-		    {
-			state = TS_BINARY;
-			sortic = TRUE;
-			pats->regmatch.rm_ic = (p_ic || !noic);
-		    }
-		    else
-			state = TS_LINEAR;
+		else if (tag_file_sorted == '2')
+		{
+		    state = TS_BINARY;
+		    sortic = TRUE;
+		    orgpat.regmatch.rm_ic = (p_ic || !noic);
 		}
+		else
+		    state = TS_LINEAR;
 
-		if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
+		if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
 		{
-		    /* binary search won't work for ignoring case, use linear
+		    /* Binary search won't work for ignoring case, use linear
 		     * search. */
 		    linear = TRUE;
 		    state = TS_LINEAR;
@@ -1837,40 +1898,12 @@
 #endif
 	    }
 
-#ifdef FEAT_MBYTE
-	    if (lbuf[0] == '!' && pats == &orgpat
-			   && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
-	    {
-		/* Convert the search pattern from 'encoding' to the
-		 * specified encoding. */
-		for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
-		    ;
-		*p = NUL;
-		convert_setup(&vimconv, p_enc, lbuf + 20);
-		if (vimconv.vc_type != CONV_NONE)
-		{
-		    convpat.pat = string_convert(&vimconv, pats->pat, NULL);
-		    if (convpat.pat != NULL)
-		    {
-			pats = &convpat;
-			pats->len = (int)STRLEN(pats->pat);
-			prepare_pats(pats, has_re);
-			pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
-		    }
-		}
-
-		/* Prepare for converting a match the other way around. */
-		convert_setup(&vimconv, lbuf + 20, p_enc);
-		continue;
-	    }
-#endif
-
 	    /*
 	     * Figure out where the different strings are in this line.
 	     * For "normal" tags: Do a quick check if the tag matches.
 	     * This speeds up tag searching a lot!
 	     */
-	    if (pats->headlen
+	    if (orgpat.headlen
 #ifdef FEAT_EMACS_TAGS
 			    && !is_etag
 #endif
@@ -1879,12 +1912,39 @@
 		tagp.tagname = lbuf;
 #ifdef FEAT_TAG_ANYWHITE
 		tagp.tagname_end = skiptowhite(lbuf);
-		if (*tagp.tagname_end == NUL)	    /* corrupted tag line */
+		if (*tagp.tagname_end == NUL)
 #else
 		tagp.tagname_end = vim_strchr(lbuf, TAB);
-		if (tagp.tagname_end == NULL)	    /* corrupted tag line */
+		if (tagp.tagname_end == NULL)
 #endif
 		{
+		    if (vim_strchr(lbuf, NL) == NULL)
+		    {
+			/* Truncated line, ignore it.  Has been reported for
+			 * Mozilla JS with extremely long names. */
+			if (p_verbose >= 5)
+			{
+			    verbose_enter();
+			    MSG(_("Ignoring long line in tags file"));
+			    verbose_leave();
+			}
+#ifdef FEAT_TAG_BINS
+			if (state != TS_LINEAR)
+			{
+			    /* Avoid getting stuck. */
+			    linear = TRUE;
+			    state = TS_LINEAR;
+# ifdef HAVE_FSEEKO
+			    fseeko(fp, search_info.low_offset, SEEK_SET);
+# else
+			    fseek(fp, (long)search_info.low_offset, SEEK_SET);
+# endif
+			}
+#endif
+			continue;
+		    }
+
+		    /* Corrupted tag line. */
 		    line_error = TRUE;
 		    break;
 		}
@@ -1927,9 +1987,9 @@
 		cmplen = (int)(tagp.tagname_end - tagp.tagname);
 		if (p_tl != 0 && cmplen > p_tl)	    /* adjust for 'taglength' */
 		    cmplen = p_tl;
-		if (has_re && pats->headlen < cmplen)
-		    cmplen = pats->headlen;
-		else if (state == TS_LINEAR && pats->headlen != cmplen)
+		if (has_re && orgpat.headlen < cmplen)
+		    cmplen = orgpat.headlen;
+		else if (state == TS_LINEAR && orgpat.headlen != cmplen)
 		    continue;
 
 #ifdef FEAT_TAG_BINS
@@ -1948,10 +2008,10 @@
 		     * Compare the current tag with the searched tag.
 		     */
 		    if (sortic)
-			tagcmp = tag_strnicmp(tagp.tagname, pats->head,
+			tagcmp = tag_strnicmp(tagp.tagname, orgpat.head,
 							      (size_t)cmplen);
 		    else
-			tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
+			tagcmp = STRNCMP(tagp.tagname, orgpat.head, cmplen);
 
 		    /*
 		     * A match with a shorter tag means to search forward.
@@ -1959,9 +2019,9 @@
 		     */
 		    if (tagcmp == 0)
 		    {
-			if (cmplen < pats->headlen)
+			if (cmplen < orgpat.headlen)
 			    tagcmp = -1;
-			else if (cmplen > pats->headlen)
+			else if (cmplen > orgpat.headlen)
 			    tagcmp = 1;
 		    }
 
@@ -2005,7 +2065,7 @@
 		}
 		else if (state == TS_SKIP_BACK)
 		{
-		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
 			state = TS_STEP_FORWARD;
 		    else
 			/* Have to skip back more.  Restore the curr_offset
@@ -2015,7 +2075,7 @@
 		}
 		else if (state == TS_STEP_FORWARD)
 		{
-		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
 		    {
 			if ((off_t)ftell(fp) > search_info.match_offset)
 			    break;	/* past last match */
@@ -2026,7 +2086,7 @@
 		else
 #endif
 		    /* skip this match if it can't match */
-		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
+		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
 		    continue;
 
 		/*
@@ -2077,41 +2137,41 @@
 	    if (p_tl != 0 && cmplen > p_tl)	    /* adjust for 'taglength' */
 		cmplen = p_tl;
 	    /* if tag length does not match, don't try comparing */
-	    if (pats->len != cmplen)
+	    if (orgpat.len != cmplen)
 		match = FALSE;
 	    else
 	    {
-		if (pats->regmatch.rm_ic)
+		if (orgpat.regmatch.rm_ic)
 		{
-		    match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
+		    match = (MB_STRNICMP(tagp.tagname, orgpat.pat, cmplen) == 0);
 		    if (match)
-			match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
+			match_no_ic = (STRNCMP(tagp.tagname, orgpat.pat,
 								cmplen) == 0);
 		}
 		else
-		    match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
+		    match = (STRNCMP(tagp.tagname, orgpat.pat, cmplen) == 0);
 	    }
 
 	    /*
 	     * Has a regexp: Also find tags matching regexp.
 	     */
 	    match_re = FALSE;
-	    if (!match && pats->regmatch.regprog != NULL)
+	    if (!match && orgpat.regmatch.regprog != NULL)
 	    {
 		int	cc;
 
 		cc = *tagp.tagname_end;
 		*tagp.tagname_end = NUL;
-		match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
+		match = vim_regexec(&orgpat.regmatch, tagp.tagname, (colnr_T)0);
 		if (match)
 		{
-		    matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
-		    if (pats->regmatch.rm_ic)
+		    matchoff = (int)(orgpat.regmatch.startp[0] - tagp.tagname);
+		    if (orgpat.regmatch.rm_ic)
 		    {
-			pats->regmatch.rm_ic = FALSE;
-			match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
+			orgpat.regmatch.rm_ic = FALSE;
+			match_no_ic = vim_regexec(&orgpat.regmatch, tagp.tagname,
 								  (colnr_T)0);
-			pats->regmatch.rm_ic = TRUE;
+			orgpat.regmatch.rm_ic = TRUE;
 		    }
 		}
 		*tagp.tagname_end = cc;
@@ -2168,7 +2228,7 @@
 			else
 			    mtt = MT_GL_OTH;
 		    }
-		    if (pats->regmatch.rm_ic && !match_no_ic)
+		    if (orgpat.regmatch.rm_ic && !match_no_ic)
 			mtt += MT_IC_OFF;
 		    if (match_re)
 			mtt += MT_RE_OFF;
@@ -2181,35 +2241,8 @@
 		 */
 		if (ga_grow(&ga_match[mtt], 1) == OK)
 		{
-#ifdef FEAT_MBYTE
-		    char_u	*conv_line = NULL;
-		    char_u	*lbuf_line = lbuf;
+		    int len;
 
-		    if (vimconv.vc_type != CONV_NONE)
-		    {
-			/* Convert the tag line from the encoding of the tags
-			 * file to 'encoding'.  Then parse the line again. */
-			conv_line = string_convert(&vimconv, lbuf, NULL);
-			if (conv_line != NULL)
-			{
-			    if (parse_tag_line(conv_line,
-#ifdef FEAT_EMACS_TAGS
-					is_etag,
-#endif
-					&tagp) == OK)
-				lbuf_line = conv_line;
-			    else
-				/* doesn't work, go back to unconverted line. */
-				(void)parse_tag_line(lbuf,
-#ifdef FEAT_EMACS_TAGS
-						     is_etag,
-#endif
-						     &tagp);
-			}
-		    }
-#else
-# define lbuf_line lbuf
-#endif
 		    if (help_only)
 		    {
 #ifdef FEAT_MULTI_LANG
@@ -2301,7 +2334,7 @@
 			 * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
 			 */
 			len = (int)STRLEN(tag_fname)
-						 + (int)STRLEN(lbuf_line) + 3;
+						 + (int)STRLEN(lbuf) + 3;
 #ifdef FEAT_EMACS_TAGS
 			if (is_etag)
 			    len += (int)STRLEN(ebuf) + 1;
@@ -2331,7 +2364,7 @@
 			    else
 				*s++ = NUL;
 #endif
-			    STRCPY(s, lbuf_line);
+			    STRCPY(s, lbuf);
 			}
 		    }
 
@@ -2367,10 +2400,6 @@
 			else
 			    vim_free(mfp);
 		    }
-#ifdef FEAT_MBYTE
-		    /* Note: this makes the values in "tagp" invalid! */
-		    vim_free(conv_line);
-#endif
 		}
 		else    /* Out of memory! Just forget about the rest. */
 		{
@@ -2409,19 +2438,12 @@
 	}
 #endif
 #ifdef FEAT_MBYTE
-	if (pats == &convpat)
-	{
-	    /* Go back from converted pattern to original pattern. */
-	    vim_free(pats->pat);
-	    vim_free(pats->regmatch.regprog);
-	    orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
-	    pats = &orgpat;
-	}
 	if (vimconv.vc_type != CONV_NONE)
 	    convert_setup(&vimconv, NULL, NULL);
 #endif
 
 #ifdef FEAT_TAG_BINS
+	tag_file_sorted = NUL;
 	if (sort_error)
 	{
 	    EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
@@ -2455,13 +2477,13 @@
 #ifdef FEAT_TAG_BINS
       /* stop searching when already did a linear search, or when TAG_NOIC
        * used, and 'ignorecase' not set or already did case-ignore search */
-      if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
+      if (stop_searching || linear || (!p_ic && noic) || orgpat.regmatch.rm_ic)
 	  break;
 # ifdef FEAT_CSCOPE
       if (use_cscope)
 	  break;
 # endif
-      pats->regmatch.rm_ic = TRUE;	/* try another time while ignoring case */
+      orgpat.regmatch.rm_ic = TRUE;	/* try another time while ignoring case */
     }
 #endif
 
@@ -2474,7 +2496,7 @@
 
 findtag_end:
     vim_free(lbuf);
-    vim_free(pats->regmatch.regprog);
+    vim_regfree(orgpat.regmatch.regprog);
     vim_free(tag_fname);
 #ifdef FEAT_EMACS_TAGS
     vim_free(ebuf);
@@ -3114,7 +3136,7 @@
 #endif
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-    if (g_do_tagpreview)
+    if (g_do_tagpreview != 0)
     {
 	postponed_split = 0;	/* don't split again below */
 	curwin_save = curwin;	/* Save current window */
@@ -3143,9 +3165,7 @@
     {
 	win_split(postponed_split > 0 ? postponed_split : 0,
 						       postponed_split_flags);
-# ifdef FEAT_SCROLLBIND
-	curwin->w_p_scb = FALSE;
-# endif
+	RESET_BINDING(curwin);
     }
 #endif
 
@@ -3154,7 +3174,7 @@
 	/* A :ta from a help file will keep the b_help flag set.  For ":ptag"
 	 * we need to use the flag from the window where we came from. */
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-	if (g_do_tagpreview)
+	if (g_do_tagpreview != 0)
 	    keep_help_flag = curwin_save->w_buffer->b_help;
 	else
 #endif
@@ -3328,7 +3348,8 @@
 	}
 
 #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-	if (g_do_tagpreview && curwin != curwin_save && win_valid(curwin_save))
+	if (g_do_tagpreview != 0
+			   && curwin != curwin_save && win_valid(curwin_save))
 	{
 	    /* Return cursor to where we were */
 	    validate_cursor();
@@ -3782,8 +3803,9 @@
     char_u  *start;		/* start of the value */
     char_u  *end;		/* after the value; can be NULL */
 {
-    char_u	buf[MAXPATHL];
+    char_u	*buf;
     int		len = 0;
+    int		retval;
 
     /* check that the field name doesn't exist yet */
     if (dict_find(dict, (char_u *)field_name, -1) != NULL)
@@ -3796,6 +3818,9 @@
 	}
 	return FAIL;
     }
+    buf = alloc(MAXPATHL);
+    if (buf == NULL)
+	return FAIL;
     if (start != NULL)
     {
 	if (end == NULL)
@@ -3805,12 +3830,14 @@
 		--end;
 	}
 	len = (int)(end - start);
-	if (len > (int)sizeof(buf) - 1)
-	    len = sizeof(buf) - 1;
+	if (len > MAXPATHL - 1)
+	    len = MAXPATHL - 1;
 	vim_strncpy(buf, start, len);
     }
     buf[len] = NUL;
-    return dict_add_nr_str(dict, field_name, 0L, buf);
+    retval = dict_add_nr_str(dict, field_name, 0L, buf);
+    vim_free(buf);
+    return retval;
 }
 
 /*
diff -Naur vim73.orig/src/term.c vim73/src/term.c
--- vim73.orig/src/term.c	2010-07-25 13:30:31.000000000 +0000
+++ vim73/src/term.c	2013-08-04 19:09:11.073942465 +0000
@@ -52,7 +52,7 @@
 
 /*
  * Here are the builtin termcap entries.  They are not stored as complete
- * Tcarr structures, as such a structure is too big.
+ * structures with all entries, as such a structure is too big.
  *
  * The entries are compact, therefore they normally are included even when
  * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
@@ -106,11 +106,24 @@
 char		*tgetstr __ARGS((char *, char **));
 
 # ifdef FEAT_TERMRESPONSE
+    /* Change this to "if 1" to debug what happens with termresponse. */
+#  if 0
+#   define DEBUG_TERMRESPONSE
+    static void log_tr(char *msg);
+#   define LOG_TR(msg) log_tr(msg)
+#  else
+#   define LOG_TR(msg)
+#  endif
 /* Request Terminal Version status: */
 #  define CRV_GET	1	/* send T_CRV when switched to RAW mode */
 #  define CRV_SENT	2	/* did send T_CRV, waiting for answer */
 #  define CRV_GOT	3	/* received T_CRV response */
 static int crv_status = CRV_GET;
+/* Request Cursor position report: */
+#  define U7_GET	1	/* send T_U7 when switched to RAW mode */
+#  define U7_SENT	2	/* did send T_U7, waiting for answer */
+#  define U7_GOT	3	/* received T_U7 response */
+static int u7_status = U7_GET;
 # endif
 
 /*
@@ -199,71 +212,6 @@
 #endif
 
 #ifndef NO_BUILTIN_TCAPS
-# if defined(RISCOS) || defined(ALL_BUILTIN_TCAPS)
-/*
- * Default for the Acorn.
- */
-    {(int)KS_NAME,	"riscos"},
-    {(int)KS_CL,	"\014"},		/* Cls and Home Cursor */
-    {(int)KS_CM,	"\001%d\001%d\002"},	/* Position cursor */
-
-    {(int)KS_CCO,	"16"},			/* Allow 16 colors */
-
-    {(int)KS_CAF,	"\001%d\021"},		/* Set foreground colour */
-    {(int)KS_CAB,	"\001%d\022"},		/* Set background colour */
-
-
-    {(int)KS_ME,	"\004"},		/* Normal mode */
-    {(int)KS_MR,	"\005"},		/* Reverse */
-
-    {(int)KS_VI,	"\016"},		/* Cursor invisible */
-    {(int)KS_VE,	"\017"},		/* Cursor visible */
-    {(int)KS_VS,	"\020"},		/* Cursor very visible */
-
-    {(int)KS_CS,	"\001%d\001%d\003"},	/* Set scroll region */
-    {(int)KS_SR,	"\023"},		/* Scroll text down */
-    {K_UP,		"\217"},
-    {K_DOWN,		"\216"},
-    {K_LEFT,		"\214"},
-    {K_RIGHT,		"\215"},
-    {K_S_UP,		"\237"},
-    {K_S_DOWN,		"\236"},
-    {K_S_LEFT,		"\234"},
-    {K_S_RIGHT,		"\235"},
-
-    {K_F1,		"\201"},
-    {K_F2,		"\202"},
-    {K_F3,		"\203"},
-    {K_F4,		"\204"},
-    {K_F5,		"\205"},
-    {K_F6,		"\206"},
-    {K_F7,		"\207"},
-    {K_F8,		"\210"},
-    {K_F9,		"\211"},
-    {K_F10,		"\312"},
-    {K_F11,		"\313"},
-    {K_F12,		"\314"},
-    {K_S_F1,		"\221"},
-    {K_S_F2,		"\222"},
-    {K_S_F3,		"\223"},
-    {K_S_F4,		"\224"},
-    {K_S_F5,		"\225"},
-    {K_S_F6,		"\226"},
-    {K_S_F7,		"\227"},
-    {K_S_F8,		"\230"},
-    {K_S_F9,		"\231"},
-    {K_S_F10,		"\332"},
-    {K_S_F11,		"\333"},
-    {K_S_F12,		"\334"},
-    {K_BS,		"\010"},
-    {K_INS,		"\315"},
-    {K_DEL,		"\177"},
-    {K_HOME,		"\036"},
-    {K_END,		"\213"},
-    {K_PAGEUP,		"\237"},
-    {K_PAGEDOWN,	"\236"},
-# endif	/* Acorn terminal */
-
 
 # if defined(AMIGA) || defined(ALL_BUILTIN_TCAPS)
 /*
@@ -998,6 +946,7 @@
     {(int)KS_CWP,	IF_EB("\033[3;%d;%dt", ESC_STR "[3;%d;%dt")},
 #  endif
     {(int)KS_CRV,	IF_EB("\033[>c", ESC_STR "[>c")},
+    {(int)KS_U7,	IF_EB("\033[6n", ESC_STR "[6n")},
 
     {K_UP,		IF_EB("\033O*A", ESC_STR "O*A")},
     {K_DOWN,		IF_EB("\033O*B", ESC_STR "O*B")},
@@ -1286,6 +1235,7 @@
     {(int)KS_CWP,	"[%dCWP%d]"},
 #  endif
     {(int)KS_CRV,	"[CRV]"},
+    {(int)KS_U7,	"[U7]"},
     {K_UP,		"[KU]"},
     {K_DOWN,		"[KD]"},
     {K_LEFT,		"[KL]"},
@@ -1399,10 +1349,6 @@
 /*
  * DEFAULT_TERM is used, when no terminal is specified with -T option or $TERM.
  */
-#ifdef RISCOS
-# define DEFAULT_TERM	(char_u *)"riscos"
-#endif
-
 #ifdef AMIGA
 # define DEFAULT_TERM	(char_u *)"amiga"
 #endif
@@ -1665,6 +1611,7 @@
 				{KS_TS, "ts"}, {KS_FS, "fs"},
 				{KS_CWP, "WP"}, {KS_CWS, "WS"},
 				{KS_CSI, "SI"}, {KS_CEI, "EI"},
+				{KS_U7, "u7"},
 				{(enum SpecialKey)0, NULL}
 			    };
 
@@ -1922,7 +1869,9 @@
 #    ifdef FEAT_GUI
 	if (!gui.in_use)
 #    endif
+#    ifndef FEAT_CYGWIN_WIN32_CLIPBOARD
 	    clip_init(FALSE);
+#    endif
 #   endif
 	if (use_xterm_like_mouse(term))
 	{
@@ -1933,7 +1882,12 @@
 	}
 #  endif
 	if (p != NULL)
+	{
 	    set_option_value((char_u *)"ttym", 0L, p, 0);
+	    /* Reset the WAS_SET flag, 'ttymouse' can be set to "sgr" or
+	     * "xterm2" in check_termcode(). */
+	    reset_option_was_set((char_u *)"ttym");
+	}
 	if (p == NULL
 #   ifdef FEAT_GUI
 		|| gui.in_use
@@ -1990,6 +1944,7 @@
     full_screen = TRUE;		/* we can use termcap codes from now on */
     set_term_defaults();	/* use current values as defaults */
 #ifdef FEAT_TERMRESPONSE
+    LOG_TR("setting crv_status to CRV_GET");
     crv_status = CRV_GET;	/* Get terminal version later */
 #endif
 
@@ -2065,6 +2020,8 @@
 #  define HMT_DEC	4
 #  define HMT_JSBTERM	8
 #  define HMT_PTERM	16
+#  define HMT_URXVT	32
+#  define HMT_SGR	64
 static int has_mouse_termcode = 0;
 # endif
 
@@ -2100,6 +2057,16 @@
 	has_mouse_termcode |= HMT_PTERM;
     else
 #   endif
+#   ifdef FEAT_MOUSE_URXVT
+    if (n == KS_URXVT_MOUSE)
+	has_mouse_termcode |= HMT_URXVT;
+    else
+#   endif
+#   ifdef FEAT_MOUSE_SGR
+    if (n == KS_SGR_MOUSE)
+	has_mouse_termcode |= HMT_SGR;
+    else
+#   endif
 	has_mouse_termcode |= HMT_NORMAL;
 #  endif
 }
@@ -2137,6 +2104,16 @@
 	has_mouse_termcode &= ~HMT_PTERM;
     else
 #   endif
+#   ifdef FEAT_MOUSE_URXVT
+    if (n == KS_URXVT_MOUSE)
+	has_mouse_termcode &= ~HMT_URXVT;
+    else
+#   endif
+#   ifdef FEAT_MOUSE_SGR
+    if (n == KS_SGR_MOUSE)
+	has_mouse_termcode &= ~HMT_SGR;
+    else
+#   endif
 	has_mouse_termcode &= ~HMT_NORMAL;
 #  endif
 }
@@ -2979,8 +2956,10 @@
 		return -1;
 	    if (buf[len++] == (int)KS_ZERO)
 		c = NUL;
-	    ++len;	/* skip KE_FILLER */
-	    /* else it should be KS_SPECIAL, and c already equals K_SPECIAL */
+	    /* else it should be KS_SPECIAL; when followed by KE_FILLER c is
+	     * K_SPECIAL, or followed by KE_CSI and c must be CSI. */
+	    if (buf[len++] == (int)KE_CSI)
+		c = CSI;
 	}
 	else if (c == CSI && buf[len] == KS_EXTRA
 					       && buf[len + 1] == (int)KE_CSI)
@@ -2994,15 +2973,29 @@
 #endif
 
 /*
- * Check if the new shell size is valid, correct it if it's too small.
+ * Check if the new shell size is valid, correct it if it's too small or way
+ * too big.
  */
     void
 check_shellsize()
 {
-    if (Columns < MIN_COLUMNS)
-	Columns = MIN_COLUMNS;
     if (Rows < min_rows())	/* need room for one window and command line */
 	Rows = min_rows();
+    limit_screen_size();
+}
+
+/*
+ * Limit Rows and Columns to avoid an overflow in Rows * Columns.
+ */
+    void
+limit_screen_size()
+{
+    if (Columns < MIN_COLUMNS)
+	Columns = MIN_COLUMNS;
+    else if (Columns > 10000)
+	Columns = 10000;
+    if (Rows > 1000)
+	Rows = 1000;
 }
 
 /*
@@ -3053,10 +3046,19 @@
     int		old_Rows = Rows;
     int		old_Columns = Columns;
 
-    (void)ui_get_shellsize();
-    check_shellsize();
-    if (old_Rows != Rows || old_Columns != Columns)
-	shell_resized();
+    if (!exiting
+#ifdef FEAT_GUI
+	    /* Do not get the size when executing a shell command during
+	     * startup. */
+	    && !gui.starting
+#endif
+	    )
+    {
+	(void)ui_get_shellsize();
+	check_shellsize();
+	if (old_Rows != Rows || old_Columns != Columns)
+	    shell_resized();
+    }
 }
 
 /*
@@ -3083,12 +3085,20 @@
     if (width < 0 || height < 0)    /* just checking... */
 	return;
 
-    if (State == HITRETURN || State == SETWSIZE) /* postpone the resizing */
+    if (State == HITRETURN || State == SETWSIZE)
     {
+	/* postpone the resizing */
 	State = SETWSIZE;
 	return;
     }
 
+    /* curwin->w_buffer can be NULL when we are closing a window and the
+     * buffer has already been closed and removing a scrollbar causes a resize
+     * event. Don't resize then, it will happen after entering another buffer.
+     */
+    if (curwin->w_buffer == NULL)
+	return;
+
     ++busy;
 
 #ifdef AMIGA
@@ -3206,7 +3216,8 @@
 		/* May need to check for T_CRV response and termcodes, it
 		 * doesn't work in Cooked mode, an external program may get
 		 * them. */
-		if (tmode != TMODE_RAW && crv_status == CRV_SENT)
+		if (tmode != TMODE_RAW && (crv_status == CRV_SENT
+					 || u7_status == U7_SENT))
 		    (void)vpeekc_nomap();
 		check_for_codes_from_term();
 	    }
@@ -3267,9 +3278,19 @@
 	if (!gui.in_use && !gui.starting)
 # endif
 	{
-	    /* May need to check for T_CRV response. */
-	    if (crv_status == CRV_SENT)
-		(void)vpeekc_nomap();
+	    /* May need to discard T_CRV or T_U7 response. */
+	    if (crv_status == CRV_SENT || u7_status == U7_SENT)
+	    {
+# ifdef UNIX
+		/* Give the terminal a chance to respond. */
+		mch_delay(100L, FALSE);
+# endif
+# ifdef TCIFLUSH
+		/* Discard data received but not read. */
+		if (exiting)
+		    tcflush(fileno(stdin), TCIFLUSH);
+# endif
+	    }
 	    /* Check for termcodes first, otherwise an external program may
 	     * get them. */
 	    check_for_codes_from_term();
@@ -3314,6 +3335,7 @@
 # endif
 	    && *T_CRV != NUL)
     {
+	LOG_TR("Sending CRV");
 	out_str(T_CRV);
 	crv_status = CRV_SENT;
 	/* check for the characters now, otherwise they might be eaten by
@@ -3322,6 +3344,74 @@
 	(void)vpeekc_nomap();
     }
 }
+
+# if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * Check how the terminal treats ambiguous character width (UAX #11).
+ * First, we move the cursor to (1, 0) and print a test ambiguous character
+ * \u25bd (WHITE DOWN-POINTING TRIANGLE) and query current cursor position.
+ * If the terminal treats \u25bd as single width, the position is (1, 1),
+ * or if it is treated as double width, that will be (1, 2).
+ * This function has the side effect that changes cursor position, so
+ * it must be called immediately after entering termcap mode.
+ */
+    void
+may_req_ambiguous_character_width()
+{
+    if (u7_status == U7_GET
+	    && cur_tmode == TMODE_RAW
+	    && termcap_active
+	    && p_ek
+#  ifdef UNIX
+	    && isatty(1)
+	    && isatty(read_cmd_fd)
+#  endif
+	    && *T_U7 != NUL
+	    && !option_was_set((char_u *)"ambiwidth"))
+    {
+	 char_u	buf[16];
+
+	 LOG_TR("Sending U7 request");
+	 /* Do this in the second row.  In the first row the returned sequence
+	  * may be CSI 1;2R, which is the same as <S-F3>. */
+	 term_windgoto(1, 0);
+	 buf[mb_char2bytes(0x25bd, buf)] = 0;
+	 out_str(buf);
+	 out_str(T_U7);
+	 u7_status = U7_SENT;
+	 term_windgoto(0, 0);
+	 out_str((char_u *)"  ");
+	 term_windgoto(0, 0);
+	 /* check for the characters now, otherwise they might be eaten by
+	  * get_keystroke() */
+	 out_flush();
+	 (void)vpeekc_nomap();
+    }
+}
+# endif
+
+# ifdef DEBUG_TERMRESPONSE
+    static void
+log_tr(char *msg)
+{
+    static FILE *fd_tr = NULL;
+    static proftime_T start;
+    proftime_T now;
+
+    if (fd_tr == NULL)
+    {
+	fd_tr = fopen("termresponse.log", "w");
+	profile_start(&start);
+    }
+    now = start;
+    profile_end(&now);
+    fprintf(fd_tr, "%s: %s %s\n",
+	    profile_msg(&now),
+	    must_redraw == NOT_VALID ? "NV"
+					 : must_redraw == CLEAR ? "CL" : "  ",
+	    msg);
+}
+# endif
 #endif
 
 /*
@@ -3793,6 +3883,7 @@
 	need_gather = TRUE;		/* need to fill termleader[] */
     }
     detected_8bit = TRUE;
+    LOG_TR("Switching to 8 bit");
 }
 #endif
 
@@ -3828,23 +3919,27 @@
  * Check from typebuf.tb_buf[typebuf.tb_off] to typebuf.tb_buf[typebuf.tb_off
  * + max_offset].
  * Return 0 for no match, -1 for partial match, > 0 for full match.
+ * Return KEYLEN_REMOVED when a key code was deleted.
  * With a match, the match is removed, the replacement code is inserted in
  * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
  * returned.
- * When "buf" is not NULL, it is used instead of typebuf.tb_buf[]. "buflen" is
- * then the length of the string in buf[].
+ * When "buf" is not NULL, buf[bufsize] is used instead of typebuf.tb_buf[].
+ * "buflen" is then the length of the string in buf[] and is updated for
+ * inserts and deletes.
  */
     int
-check_termcode(max_offset, buf, buflen)
+check_termcode(max_offset, buf, bufsize, buflen)
     int		max_offset;
     char_u	*buf;
-    int		buflen;
+    int		bufsize;
+    int		*buflen;
 {
     char_u	*tp;
     char_u	*p;
     int		slen = 0;	/* init for GCC */
     int		modslen;
     int		len;
+    int		retval = 0;
     int		offset;
     char_u	key_name[2];
     int		modifiers;
@@ -3894,8 +3989,7 @@
      * Check at several positions in typebuf.tb_buf[], to catch something like
      * "x<Up>" that can be mapped. Stop at max_offset, because characters
      * after that cannot be used for mapping, and with @r commands
-     * typebuf.tb_buf[]
-     * can become very long.
+     * typebuf.tb_buf[] can become very long.
      * This is used often, KEEP IT FAST!
      */
     for (offset = 0; offset < max_offset; ++offset)
@@ -3909,10 +4003,10 @@
 	}
 	else
 	{
-	    if (offset >= buflen)
+	    if (offset >= *buflen)
 		break;
 	    tp = buf + offset;
-	    len = buflen - offset;
+	    len = *buflen - offset;
 	}
 
 	/*
@@ -4064,15 +4158,32 @@
 	}
 
 #ifdef FEAT_TERMRESPONSE
-	if (key_name[0] == NUL)
-	{
-	    /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c".  Also
-	     * eat other possible responses to t_RV, rxvt returns
-	     * "<Esc>[?1;2c".  Also accept CSI instead of <Esc>[.
-	     * mrxvt has been reported to have "+" in the version. Assume
-	     * the escape sequence ends with a letter or one of "{|}~". */
-	    if (*T_CRV != NUL && ((tp[0] == ESC && tp[1] == '[' && len >= 3)
-					       || (tp[0] == CSI && len >= 2)))
+	if (key_name[0] == NUL
+	    /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
+	    || key_name[0] == KS_URXVT_MOUSE
+# ifdef FEAT_MBYTE
+	    || u7_status == U7_SENT
+# endif
+            )
+	{
+	    /* Check for some responses from terminal start with "<Esc>[" or
+	     * CSI.
+	     *
+	     * - xterm version string: <Esc>[>{x};{vers};{y}c
+	     *   Also eat other possible responses to t_RV, rxvt returns
+	     *   "<Esc>[?1;2c". Also accept CSI instead of <Esc>[.
+	     *   mrxvt has been reported to have "+" in the version. Assume
+	     *   the escape sequence ends with a letter or one of "{|}~".
+	     *
+	     * - cursor position report: <Esc>[{row};{col}R
+	     *   The final byte is 'R'. now it is only used for checking for
+	     *   ambiguous-width character state.
+	     */
+	    p = tp[0] == CSI ? tp + 1 : tp + 2;
+	    if ((*T_CRV != NUL || *T_U7 != NUL)
+			&& ((tp[0] == ESC && tp[1] == '[' && len >= 3)
+			    || (tp[0] == CSI && len >= 2))
+			&& (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
 	    {
 		j = 0;
 		extra = 0;
@@ -4080,14 +4191,64 @@
 				&& !(tp[i] >= '{' && tp[i] <= '~')
 				&& !ASCII_ISALPHA(tp[i]); ++i)
 		    if (tp[i] == ';' && ++j == 1)
-			extra = atoi((char *)tp + i + 1);
+			extra = i + 1;
 		if (i == len)
-		    return -1;		/* not enough characters */
+		{
+		    LOG_TR("Not enough characters for CRV");
+		    return -1;
+		}
+
+#ifdef FEAT_MBYTE
+		/* Eat it when it has 2 arguments and ends in 'R'. Ignore it
+		 * when u7_status is not "sent", <S-F3> sends something
+		 * similar. */
+		if (j == 1 && tp[i] == 'R' && u7_status == U7_SENT)
+		{
+		    char *aw = NULL;
 
+		    LOG_TR("Received U7 status");
+		    u7_status = U7_GOT;
+# ifdef FEAT_AUTOCMD
+		    did_cursorhold = TRUE;
+# endif
+		    if (extra > 0)
+			extra = atoi((char *)tp + extra);
+		    if (extra == 2)
+			aw = "single";
+		    else if (extra == 3)
+			aw = "double";
+		    if (aw != NULL && STRCMP(aw, p_ambw) != 0)
+		    {
+			/* Setting the option causes a screen redraw. Do that
+			 * right away if possible, keeping any messages. */
+			set_option_value((char_u *)"ambw", 0L, (char_u *)aw, 0);
+#ifdef DEBUG_TERMRESPONSE
+			{
+			    char buf[100];
+			    int  r = redraw_asap(CLEAR);
+
+			    sprintf(buf, "set 'ambiwidth', redraw_asap(): %d",
+									   r);
+			    log_tr(buf);
+			}
+#else
+			redraw_asap(CLEAR);
+#endif
+		    }
+		    key_name[0] = (int)KS_EXTRA;
+		    key_name[1] = (int)KE_IGNORE;
+		    slen = i + 1;
+		}
+		else
+#endif
 		/* eat it when at least one digit and ending in 'c' */
-		if (i > 2 + (tp[0] != CSI) && tp[i] == 'c')
+		if (*T_CRV != NUL && i > 2 + (tp[0] != CSI) && tp[i] == 'c')
 		{
+		    LOG_TR("Received CRV");
 		    crv_status = CRV_GOT;
+# ifdef FEAT_AUTOCMD
+		    did_cursorhold = TRUE;
+# endif
 
 		    /* If this code starts with CSI, you can bet that the
 		     * terminal uses 8-bit codes. */
@@ -4097,18 +4258,33 @@
 		    /* rxvt sends its version number: "20703" is 2.7.3.
 		     * Ignore it for when the user has set 'term' to xterm,
 		     * even though it's an rxvt. */
+		    if (extra > 0)
+			extra = atoi((char *)tp + extra);
 		    if (extra > 20000)
 			extra = 0;
 
 		    if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
 		    {
-			/* if xterm version >= 95 use mouse dragging */
-			if (extra >= 95)
-			    set_option_value((char_u *)"ttym", 0L,
+			/* Only set 'ttymouse' automatically if it was not set
+			 * by the user already. */
+			if (!option_was_set((char_u *)"ttym"))
+			{
+# ifdef TTYM_SGR
+			    if (extra >= 277)
+				set_option_value((char_u *)"ttym", 0L,
+							  (char_u *)"sgr", 0);
+			    else
+# endif
+			    /* if xterm version >= 95 use mouse dragging */
+			    if (extra >= 95)
+				set_option_value((char_u *)"ttym", 0L,
 						       (char_u *)"xterm2", 0);
+			}
+
 			/* if xterm version >= 141 try to get termcap codes */
 			if (extra >= 141)
 			{
+			    LOG_TR("Enable checking for XT codes");
 			    check_for_codes = TRUE;
 			    need_gather = TRUE;
 			    req_codes_from_term();
@@ -4147,7 +4323,10 @@
 		    }
 
 		if (i == len)
+		{
+		    LOG_TR("not enough characters for XT");
 		    return -1;		/* not enough characters */
+		}
 	    }
 	}
 #endif
@@ -4184,18 +4363,24 @@
 	/*
 	 * If it is a mouse click, get the coordinates.
 	 */
-	if (key_name[0] == (int)KS_MOUSE
+	if (key_name[0] == KS_MOUSE
 # ifdef FEAT_MOUSE_JSB
-		|| key_name[0] == (int)KS_JSBTERM_MOUSE
+		|| key_name[0] == KS_JSBTERM_MOUSE
 # endif
 # ifdef FEAT_MOUSE_NET
-		|| key_name[0] == (int)KS_NETTERM_MOUSE
+		|| key_name[0] == KS_NETTERM_MOUSE
 # endif
 # ifdef FEAT_MOUSE_DEC
-		|| key_name[0] == (int)KS_DEC_MOUSE
+		|| key_name[0] == KS_DEC_MOUSE
 # endif
 # ifdef FEAT_MOUSE_PTERM
-		|| key_name[0] == (int)KS_PTERM_MOUSE
+		|| key_name[0] == KS_PTERM_MOUSE
+# endif
+# ifdef FEAT_MOUSE_URXVT
+		|| key_name[0] == KS_URXVT_MOUSE
+# endif
+# ifdef FEAT_MOUSE_SGR
+		|| key_name[0] == KS_SGR_MOUSE
 # endif
 		)
 	{
@@ -4275,7 +4460,101 @@
 		    else
 			break;
 		}
+	    }
+
+# if defined(FEAT_MOUSE_URXVT) || defined(FEAT_MOUSE_SGR)
+	    if (key_name[0] == KS_URXVT_MOUSE
+		|| key_name[0] == KS_SGR_MOUSE)
+	    {
+		for (;;)
+		{
+		    /* URXVT 1015 mouse reporting mode:
+		     * Almost identical to xterm mouse mode, except the values
+		     * are decimal instead of bytes.
+		     *
+		     * \033[%d;%d;%dM
+		     *		  ^-- row
+		     *	       ^----- column
+		     *	    ^-------- code
+		     *
+		     * SGR 1006 mouse reporting mode:
+		     * Almost identical to xterm mouse mode, except the values
+		     * are decimal instead of bytes.
+		     *
+		     * \033[<%d;%d;%dM
+		     *		   ^-- row
+		     *	        ^----- column
+		     *	     ^-------- code
+		     *
+		     * \033[<%d;%d;%dm        : mouse release event
+		     *		   ^-- row
+		     *	        ^----- column
+		     *	     ^-------- code
+		     */
+		    p = tp + slen;
+
+		    mouse_code = getdigits(&p);
+		    if (*p++ != ';')
+			return -1;
+
+		    /* when mouse reporting is SGR, add 32 to mouse code */
+                    if (key_name[0] == KS_SGR_MOUSE)
+                        mouse_code += 32;
+
+		    mouse_col = getdigits(&p) - 1;
+		    if (*p++ != ';')
+			return -1;
+
+		    mouse_row = getdigits(&p) - 1;
+                    if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
+			mouse_code |= MOUSE_RELEASE;
+                    else if (*p != 'M')
+			return -1;
+                    p++;
+
+		    slen += (int)(p - (tp + slen));
+
+		    /* skip this one if next one has same code (like xterm
+		     * case) */
+		    j = termcodes[idx].len;
+		    if (STRNCMP(tp, tp + slen, (size_t)j) == 0)
+		    {
+			int slen2;
+			int cmd_complete = 0;
+
+			/* check if the command is complete by looking for the
+			 * 'M' */
+			for (slen2 = slen; slen2 < len; slen2++)
+			{
+			    if (tp[slen2] == 'M'
+                                || (key_name[0] == KS_SGR_MOUSE
+							 && tp[slen2] == 'm'))
+			    {
+				cmd_complete = 1;
+				break;
+			    }
+			}
+			p += j;
+			if (cmd_complete && getdigits(&p) == mouse_code)
+			{
+			    slen += j; /* skip the \033[ */
+			    continue;
+			}
+		    }
+		    break;
+		}
+	    }
+# endif
 
+	if (key_name[0] == (int)KS_MOUSE
+#ifdef FEAT_MOUSE_URXVT
+	    || key_name[0] == (int)KS_URXVT_MOUSE
+#endif
+#ifdef FEAT_MOUSE_SGR
+	    || key_name[0] == KS_SGR_MOUSE
+#endif
+	    )
+	{
 #  if !defined(MSWIN) && !defined(MSDOS)
 		/*
 		 * Handle mouse events.
@@ -4940,6 +5219,13 @@
 #endif
 		string[new_slen++] = key_name[1];
 	}
+	else if (new_slen == 0 && key_name[0] == KS_EXTRA
+						  && key_name[1] == KE_IGNORE)
+	{
+	    /* Do not put K_IGNORE into the buffer, do return KEYLEN_REMOVED
+	     * to indicate what happened. */
+	    retval = KEYLEN_REMOVED;
+	}
 	else
 	{
 	    string[new_slen++] = K_SPECIAL;
@@ -4969,16 +5255,26 @@
 	    if (extra < 0)
 		/* remove matched characters */
 		mch_memmove(buf + offset, buf + offset - extra,
-					   (size_t)(buflen + offset + extra));
+					   (size_t)(*buflen + offset + extra));
 	    else if (extra > 0)
-		/* insert the extra space we need */
+	    {
+		/* Insert the extra space we need.  If there is insufficient
+		 * space return -1. */
+		if (*buflen + extra + new_slen >= bufsize)
+		    return -1;
 		mch_memmove(buf + offset + extra, buf + offset,
-						   (size_t)(buflen - offset));
+						   (size_t)(*buflen - offset));
+	    }
 	    mch_memmove(buf + offset, string, (size_t)new_slen);
+	    *buflen = *buflen + extra + new_slen;
 	}
-	return (len + extra + offset);
+	return retval == 0 ? (len + extra + offset) : retval;
     }
 
+#ifdef FEAT_TERMRESPONSE
+    LOG_TR("normal character");
+#endif
+
     return 0;			    /* no match found */
 }
 
@@ -5219,12 +5515,12 @@
     char_u	*src;
 {
     int		i;
-    int		slen;
+    int		slen = (int)STRLEN(src);
 
     for (i = 0; i < tc_len; ++i)
     {
-	slen = termcodes[i].len;
-	if (slen > 1 && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
+	if (slen == termcodes[i].len
+			&& STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
 	    return i;
     }
     return -1;
@@ -5433,6 +5729,13 @@
      * many, there can be a buffer overflow somewhere. */
     while (xt_index_out < xt_index_in + 10 && key_names[xt_index_out] != NULL)
     {
+# ifdef DEBUG_TERMRESPONSE
+	char dbuf[100];
+
+	sprintf(dbuf, "Requesting XT %d: %s",
+				       xt_index_out, key_names[xt_index_out]);
+	log_tr(dbuf);
+# endif
 	sprintf(buf, "\033P+q%02x%02x\033\\",
 		      key_names[xt_index_out][0], key_names[xt_index_out][1]);
 	out_str_nf((char_u *)buf);
@@ -5479,6 +5782,14 @@
 		break;
 	    }
 	}
+# ifdef DEBUG_TERMRESPONSE
+	{
+	    char buf[100];
+
+	    sprintf(buf, "Received XT %d: %s", xt_index_in, (char *)name);
+	    log_tr(buf);
+	}
+# endif
 	if (key_names[i] != NULL)
 	{
 	    for (i = 8; (c = hexhex2nr(code + i)) >= 0; i += 2)
@@ -5497,7 +5808,17 @@
 		    set_keep_msg_from_hist();
 		    set_color_count(i);
 		    init_highlight(TRUE, FALSE);
-		    redraw_later(CLEAR);
+#ifdef DEBUG_TERMRESPONSE
+		    {
+			char buf[100];
+			int  r = redraw_asap(CLEAR);
+
+			sprintf(buf, "Received t_Co, redraw_asap(): %d", r);
+			log_tr(buf);
+		    }
+#else
+		    redraw_asap(CLEAR);
+#endif
 		}
 	    }
 	    else
diff -Naur vim73.orig/src/term.h vim73/src/term.h
--- vim73.orig/src/term.h	2010-05-15 11:04:06.000000000 +0000
+++ vim73/src/term.h	2013-08-04 19:09:11.073942465 +0000
@@ -83,10 +83,11 @@
 #ifdef FEAT_VERTSPLIT
     KS_CSV,	/* scroll region vertical */
 #endif
-    KS_OP	/* original color pair */
+    KS_OP,	/* original color pair */
+    KS_U7	/* request cursor position */
 };
 
-#define KS_LAST	    KS_OP
+#define KS_LAST	    KS_U7
 
 /*
  * the terminal capabilities are stored in this array
@@ -158,6 +159,7 @@
 #define T_CEI	(term_str(KS_CEI))	/* end insert mode */
 #define T_CRV	(term_str(KS_CRV))	/* request version string */
 #define T_OP	(term_str(KS_OP))	/* original color pair */
+#define T_U7	(term_str(KS_U7))	/* request cursor position */
 
 #define TMODE_COOK  0	/* terminal mode for external cmds and Ex mode */
 #define TMODE_SLEEP 1	/* terminal mode for sleeping (cooked but no echo) */
diff -Naur vim73.orig/src/termlib.c vim73/src/termlib.c
--- vim73.orig/src/termlib.c	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/termlib.c	2013-08-04 19:09:11.073942465 +0000
@@ -13,7 +13,7 @@
 #include "vim.h"
 #include "termlib.pro"
 
-#if !defined(AMIGA) && !defined(VMS) && !defined(MACOS) && !defined(RISCOS)
+#if !defined(AMIGA) && !defined(VMS) && !defined(MACOS)
 # include <sgtty.h>
 #endif
 
diff -Naur vim73.orig/src/testdir/Make_amiga.mak vim73/src/testdir/Make_amiga.mak
--- vim73.orig/src/testdir/Make_amiga.mak	2010-08-04 14:34:34.000000000 +0000
+++ vim73/src/testdir/Make_amiga.mak	2013-08-04 19:09:11.077275789 +0000
@@ -13,6 +13,8 @@
 # test25	uses symbolic link
 # test27	can't edit file with "*"
 # test52	only for Win32
+# test85	no Lua interface
+# test86, 87	no Python interface
 
 SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
 		test7.out test8.out test9.out \
@@ -27,7 +29,11 @@
 		test56.out test57.out test58.out test59.out test60.out \
 		test61.out test62.out test63.out test64.out test65.out \
 		test66.out test67.out test68.out test69.out test70.out \
-		test71.out test72.out test73.out
+		test71.out test72.out test73.out test74.out test75.out \
+		test76.out test77.out test78.out test79.out test80.out \
+		test81.out test82.out test83.out test84.out test88.out \
+		test89.out test90.out test91.out test92.out test93.out \
+		test94.out test95.out test96.out test97.out
 
 .SUFFIXES: .in .out
 
@@ -120,3 +126,24 @@
 test71.out: test71.in
 test72.out: test72.in
 test73.out: test73.in
+test74.out: test74.in
+test75.out: test75.in
+test76.out: test76.in
+test77.out: test77.in
+test78.out: test78.in
+test79.out: test79.in
+test80.out: test80.in
+test81.out: test81.in
+test82.out: test82.in
+test83.out: test83.in
+test84.out: test84.in
+test88.out: test88.in
+test89.out: test89.in
+test90.out: test90.in
+test91.out: test91.in
+test92.out: test92.in
+test93.out: test93.in
+test94.out: test94.in
+test95.out: test95.in
+test96.out: test96.in
+test97.out: test97.in
diff -Naur vim73.orig/src/testdir/Make_dos.mak vim73/src/testdir/Make_dos.mak
--- vim73.orig/src/testdir/Make_dos.mak	2010-08-13 16:27:19.000000000 +0000
+++ vim73/src/testdir/Make_dos.mak	2013-08-04 19:09:11.080609112 +0000
@@ -11,7 +11,7 @@
 # test12	can't unlink a swap file
 # test25	uses symbolic link
 # test27	can't edit file with "*" in file name
-# test31	16 bit version runs out of memory...
+# test97	\{ and \$ are not escaped characters.
 
 SCRIPTS16 =	test1.out test19.out test20.out test22.out \
 		test23.out test24.out test28.out test29.out \
@@ -27,7 +27,12 @@
 		test30.out test31.out test32.out test33.out test34.out \
 		test37.out test38.out test39.out test40.out test41.out \
 		test42.out test52.out test65.out test66.out test67.out \
-		test68.out test69.out test71.out test72.out test73.out
+		test68.out test69.out test71.out test72.out test73.out \
+		test74.out test75.out test76.out test77.out test78.out \
+		test79.out test80.out test81.out test82.out test83.out \
+		test84.out test85.out test86.out test87.out test88.out \
+		test89.out test90.out test91.out test92.out test93.out \
+		test94.out test95.out test96.out
 
 SCRIPTS32 =	test50.out test70.out
 
@@ -35,40 +40,52 @@
 
 .SUFFIXES: .in .out
 
-nongui:	fixff $(SCRIPTS16) $(SCRIPTS)
-	echo ALL DONE
+nongui:	fixff $(SCRIPTS16) $(SCRIPTS) report
 
-small:
-	echo ALL DONE
+small:	report
 
-gui:	fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI)
-	echo ALL DONE
+gui:	fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS_GUI) report
 
-win32:	fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32)
-	echo ALL DONE
+win32:	fixff $(SCRIPTS16) $(SCRIPTS) $(SCRIPTS32) report
 
 fixff:
 	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
-	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q dotest.in
+	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
+		dotest.in test60.ok test71.ok test74.ok
+
+report:
+	@echo ""
+	@echo Test results:
+	@IF EXIST test.log ( type test.log & echo TEST FAILURE & exit /b 1 ) \
+		ELSE ( ECHO ALL DONE )
 
 clean:
 	-del *.out
+	-del *.failed
 	-if exist test.ok del test.ok
 	-if exist small.vim del small.vim
 	-if exist tiny.vim del tiny.vim
 	-if exist mbyte.vim del mbyte.vim
 	-if exist mzscheme.vim del mzscheme.vim
+	-if exist lua.vim del lua.vim
 	-del X*
+	-if exist Xdir1 rd /s /q Xdir1
+	-if exist Xfind rd /s /q Xfind
 	-if exist viminfo del viminfo
+	-del test.log
 
 .in.out:
+	-if exist $*.failed del $*.failed
 	copy $*.ok test.ok
 	$(VIMPROG) -u dos.vim -U NONE --noplugin -s dotest.in $*.in
-	diff test.out $*.ok
-	-if exist $*.out del $*.out
-	rename test.out $*.out
+	@diff test.out $*.ok & if errorlevel 1 \
+		( move /y test.out $*.failed & echo $* FAILED >> test.log ) \
+		else ( move /y test.out $*.out )
 	-del X*
-	-del X*.*
 	-del test.ok
-	-rmdir /s /q Xfind
+	-if exist Xdir1 rd /s /q Xdir1
+	-if exist Xfind rd /s /q Xfind
 	-if exist viminfo del viminfo
+
+nolog:
+	-del test.log
diff -Naur vim73.orig/src/testdir/Make_ming.mak vim73/src/testdir/Make_ming.mak
--- vim73.orig/src/testdir/Make_ming.mak	2010-08-04 14:34:47.000000000 +0000
+++ vim73/src/testdir/Make_ming.mak	2013-08-04 19:09:11.080609112 +0000
@@ -28,7 +28,7 @@
 # test12	can't unlink a swap file
 # test25	uses symbolic link
 # test27	can't edit file with "*" in file name
-# test31	16 bit version runs out of memory...
+# test97	\{ and \$ are not escaped characters.
 
 SCRIPTS16 =	test1.out test19.out test20.out test22.out \
 		test23.out test24.out test28.out test29.out \
@@ -47,7 +47,12 @@
 		test30.out test31.out test32.out test33.out test34.out \
 		test37.out test38.out test39.out test40.out test41.out \
 		test42.out test52.out test65.out test66.out test67.out \
-		test68.out test69.out test71.out test72.out test72.out
+		test68.out test69.out test71.out test72.out test73.out \
+		test74.out test75.out test76.out test77.out test78.out \
+		test79.out test80.out test81.out test82.out test83.out \
+		test84.out test85.out test86.out test87.out test88.out \
+		test89.out test90.out test91.out test92.out test93.out \
+		test94.out test95.out test96.out
 
 SCRIPTS32 =	test50.out test70.out
 
@@ -72,6 +77,8 @@
 
 fixff:
 	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
+		dotest.in test60.ok test71.ok test74.ok
 
 clean:
 	-$(DEL) *.out
@@ -80,6 +87,7 @@
 	-$(DEL) tiny.vim
 	-$(DEL) mbyte.vim
 	-$(DEL) mzscheme.vim
+	-$(DEL) lua.vim
 	-$(DEL) X*
 	-$(DEL) viminfo
 
diff -Naur vim73.orig/src/testdir/Make_os2.mak vim73/src/testdir/Make_os2.mak
--- vim73.orig/src/testdir/Make_os2.mak	2010-08-04 14:34:55.000000000 +0000
+++ vim73/src/testdir/Make_os2.mak	2013-08-04 19:09:11.083942435 +0000
@@ -13,6 +13,9 @@
 # test25	uses symbolic link
 # test27	can't edit file with "*" in file name
 # test52	only for Win32
+# test85	no Lua interface
+# test86, 87	no Python interface
+# test97	\{ and \$ are not escaped characters.
 
 SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
 		test7.out test8.out test9.out \
@@ -27,7 +30,11 @@
 		test56.out test57.out test58.out test59.out test60.out \
 		test61.out test62.out test63.out test64.out test65.out \
 		test66.out test67.out test68.out test69.out test70.out \
-		test71.out test72.out test73.out
+		test71.out test72.out test73.out test74.out test75.out \
+		test76.out test77.out test78.out test79.out test80.out \
+		test81.out test82.out test83.out test84.out test88.out \
+		test89.out test90.out test91.out test92.out test93.out \
+		test94.out test95.out test96.out
 
 .SUFFIXES: .in .out
 
diff -Naur vim73.orig/src/testdir/Make_vms.mms vim73/src/testdir/Make_vms.mms
--- vim73.orig/src/testdir/Make_vms.mms	2010-08-04 14:35:46.000000000 +0000
+++ vim73/src/testdir/Make_vms.mms	2013-08-04 19:09:11.083942435 +0000
@@ -4,7 +4,7 @@
 # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
 #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
 #
-# Last change:  2010 Aug 04
+# Last change:  2013 Jul 03
 #
 # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
 # Edit the lines in the Configuration section below to select.
@@ -74,7 +74,11 @@
 	 test56.out test57.out test60.out \
 	 test61.out test62.out test63.out test64.out test65.out \
 	 test66.out test67.out test68.out test69.out \
-	 test71.out test72.out
+	 test71.out test72.out test74.out test75.out test76.out \
+	 test77.out test78.out test79.out test80.out test81.out \
+	 test82.out test83.out test84.out test88.out test89.out \
+	 test90.out test91.out test92.out test93.out test94.out \
+	 test95.out test96.out test97.out
 
 # Known problems:
 # Test 30: a problem around mac format - unknown reason
@@ -87,6 +91,7 @@
 # with too many dots).
 #
 # Test 72: unknown reason
+# Test 85: no Lua interface
 
 .IFDEF WANT_GUI
 SCRIPT_GUI = test16.out
@@ -181,5 +186,6 @@
 	-@ if "''F$SEARCH("small.vim")'"    .NES. "" then delete/noconfirm/nolog small.vim.*
 	-@ if "''F$SEARCH("mbyte.vim")'"    .NES. "" then delete/noconfirm/nolog mbyte.vim.*
 	-@ if "''F$SEARCH("mzscheme.vim")'" .NES. "" then delete/noconfirm/nolog mzscheme.vim.*
+	-@ if "''F$SEARCH("lua.vim")'" .NES. "" then delete/noconfirm/nolog lua.vim.*
 	-@ if "''F$SEARCH("viminfo.*")'"    .NES. "" then delete/noconfirm/nolog viminfo.*.*
 
diff -Naur vim73.orig/src/testdir/Makefile vim73/src/testdir/Makefile
--- vim73.orig/src/testdir/Makefile	2010-08-15 12:56:30.000000000 +0000
+++ vim73/src/testdir/Makefile	2013-08-04 19:09:11.087275759 +0000
@@ -10,9 +10,10 @@
 #   This will make testing about 10 times as slow.
 # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --log-file=valgrind.$*
 
+
 SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
 		test7.out test8.out test9.out test10.out test11.out \
-		test12.out  test13.out test14.out test15.out test17.out \
+		test12.out test13.out test14.out test15.out test17.out \
 		test18.out test19.out test20.out test21.out test22.out \
 		test23.out test24.out test25.out test26.out test27.out \
 		test28.out test29.out test30.out test31.out test32.out \
@@ -23,7 +24,12 @@
 		test54.out test55.out test56.out test57.out test58.out \
 		test59.out test60.out test61.out test62.out test63.out \
 		test64.out test65.out test66.out test67.out test68.out \
-		test69.out test70.out test71.out test72.out test73.out
+		test69.out test70.out test71.out test72.out test73.out \
+		test74.out test75.out test76.out test77.out test78.out \
+		test79.out test80.out test81.out test82.out test83.out \
+		test84.out test85.out test86.out test87.out test88.out \
+		test89.out test90.out test91.out test92.out test93.out \
+		test94.out test95.out test96.out test97.out
 
 SCRIPTS_GUI = test16.out
 
@@ -43,12 +49,16 @@
 
 $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
 
+RM_ON_RUN = test.out X* viminfo
+RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
+RUN_VIM = $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
+
 clean:
-	-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* valgrind.pid* viminfo
+	-rm -rf *.out *.failed *.rej *.orig test.log $(RM_ON_RUN) $(RM_ON_START) valgrind.*
 
 test1.out: test1.in
-	-rm -f $*.failed tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* viminfo
-	$(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
+	-rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START)
+	$(RUN_VIM) $*.in
 	@/bin/sh -c "if diff test.out $*.ok; \
 		then mv -f test.out $*.out; \
 		else echo; \
@@ -57,18 +67,34 @@
 	-rm -rf X* viminfo
 
 .in.out:
-	-rm -rf $*.failed test.ok test.out X* viminfo
+	-rm -rf $*.failed test.ok $(RM_ON_RUN)
 	cp $*.ok test.ok
-	# Sleep a moment to avoid that the xterm title is messed up
-	@-sleep .2
-	-$(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
-	@/bin/sh -c "if test -f test.out; then\
+	# Sleep a moment to avoid that the xterm title is messed up.
+	# 200 msec is sufficient, but only modern sleep supports a fraction of
+	# a second, fall back to a second if it fails.
+	@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
+	-$(RUN_VIM) $*.in
+
+	# For flaky tests retry one time.
+	@/bin/sh -c "if test -f test.out -a $* = test61; then \
+		  if diff test.out $*.ok; \
+		  then echo flaky test ok first time; \
+		  else rm -rf $*.failed $(RM_ON_RUN); \
+			$(RUN_VIM) $*.in; \
+		  fi \
+		fi"
+
+	# Check if the test.out file matches test.ok.
+	@/bin/sh -c "if test -f test.out; then \
 		  if diff test.out $*.ok; \
 		  then mv -f test.out $*.out; \
 		  else echo $* FAILED >>test.log; mv -f test.out $*.failed; \
 		  fi \
 		else echo $* NO OUTPUT >>test.log; \
 		fi"
+	@/bin/sh -c "if test -f valgrind; then\
+		  mv -f valgrind valgrind.$*; \
+		fi"
 	-rm -rf X* test.ok viminfo
 
 test49.out: test49.vim
diff -Naur vim73.orig/src/testdir/main.aap vim73/src/testdir/main.aap
--- vim73.orig/src/testdir/main.aap	2010-07-30 20:03:23.000000000 +0000
+++ vim73/src/testdir/main.aap	2013-08-04 19:09:11.090609082 +0000
@@ -13,7 +13,7 @@
 		test33.out test34.out test35.out test36.out test37.out
 		test38.out test39.out test40.out test41.out test42.out
 		test43.out test44.out test45.out test46.out test47.out
-		test48.out test49.out
+		test48.out test49.out test74.out
 
 ScriptsGUI = test16.out
 
diff -Naur vim73.orig/src/testdir/python2/module.py vim73/src/testdir/python2/module.py
--- vim73.orig/src/testdir/python2/module.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/python2/module.py	2013-08-04 19:09:11.093942405 +0000
@@ -0,0 +1,2 @@
+import before_1
+dir = '2'
diff -Naur vim73.orig/src/testdir/python3/module.py vim73/src/testdir/python3/module.py
--- vim73.orig/src/testdir/python3/module.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/python3/module.py	2013-08-04 19:09:11.097275729 +0000
@@ -0,0 +1,2 @@
+import before_1
+dir = '3'
diff -Naur vim73.orig/src/testdir/python_after/after.py vim73/src/testdir/python_after/after.py
--- vim73.orig/src/testdir/python_after/after.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/python_after/after.py	2013-08-04 19:09:11.097275729 +0000
@@ -0,0 +1,2 @@
+import before_2
+dir = "after"
diff -Naur vim73.orig/src/testdir/python_before/before.py vim73/src/testdir/python_before/before.py
--- vim73.orig/src/testdir/python_before/before.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/python_before/before.py	2013-08-04 19:09:11.097275729 +0000
@@ -0,0 +1 @@
+dir = "before"
diff -Naur vim73.orig/src/testdir/python_before/before_1.py vim73/src/testdir/python_before/before_1.py
--- vim73.orig/src/testdir/python_before/before_1.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/python_before/before_1.py	2013-08-04 19:09:11.100609052 +0000
@@ -0,0 +1 @@
+# empty file
diff -Naur vim73.orig/src/testdir/python_before/before_2.py vim73/src/testdir/python_before/before_2.py
--- vim73.orig/src/testdir/python_before/before_2.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/python_before/before_2.py	2013-08-04 19:09:11.100609052 +0000
@@ -0,0 +1 @@
+# empty file
diff -Naur vim73.orig/src/testdir/pythonx/failing.py vim73/src/testdir/pythonx/failing.py
--- vim73.orig/src/testdir/pythonx/failing.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/pythonx/failing.py	2013-08-04 19:09:11.100609052 +0000
@@ -0,0 +1 @@
+raise NotImplementedError
diff -Naur vim73.orig/src/testdir/pythonx/failing_import.py vim73/src/testdir/pythonx/failing_import.py
--- vim73.orig/src/testdir/pythonx/failing_import.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/pythonx/failing_import.py	2013-08-04 19:09:11.103942375 +0000
@@ -0,0 +1 @@
+raise ImportError
diff -Naur vim73.orig/src/testdir/pythonx/module.py vim73/src/testdir/pythonx/module.py
--- vim73.orig/src/testdir/pythonx/module.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/pythonx/module.py	2013-08-04 19:09:11.103942375 +0000
@@ -0,0 +1 @@
+dir = 'x'
diff -Naur vim73.orig/src/testdir/pythonx/modulex.py vim73/src/testdir/pythonx/modulex.py
--- vim73.orig/src/testdir/pythonx/modulex.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/pythonx/modulex.py	2013-08-04 19:09:11.107275699 +0000
@@ -0,0 +1 @@
+ddir = 'xx'
diff -Naur vim73.orig/src/testdir/pythonx/topmodule/__init__.py vim73/src/testdir/pythonx/topmodule/__init__.py
--- vim73.orig/src/testdir/pythonx/topmodule/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/pythonx/topmodule/__init__.py	2013-08-04 19:09:11.107275699 +0000
@@ -0,0 +1 @@
+#
diff -Naur vim73.orig/src/testdir/pythonx/topmodule/submodule/__init__.py vim73/src/testdir/pythonx/topmodule/submodule/__init__.py
--- vim73.orig/src/testdir/pythonx/topmodule/submodule/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/pythonx/topmodule/submodule/__init__.py	2013-08-04 19:09:11.107275699 +0000
@@ -0,0 +1 @@
+#
diff -Naur vim73.orig/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py vim73/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py
--- vim73.orig/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/pythonx/topmodule/submodule/subsubmodule/__init__.py	2013-08-04 19:09:11.110609022 +0000
@@ -0,0 +1 @@
+#
diff -Naur vim73.orig/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py vim73/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
--- vim73.orig/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py	2013-08-04 19:09:11.110609022 +0000
@@ -0,0 +1 @@
+#
diff -Naur vim73.orig/src/testdir/test1.in vim73/src/testdir/test1.in
--- vim73.orig/src/testdir/test1.in	2010-08-04 14:06:24.000000000 +0000
+++ vim73/src/testdir/test1.in	2013-08-04 19:09:11.110609022 +0000
@@ -15,6 +15,7 @@
 be set like small.vim above.  mbyte.vim is sourced by tests that require the
 +multi_byte feature.
 Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
+Similar logic is applied to the +lua feature, using lua.vim.
 
 STARTTEST
 :" Write a single line to test.out to check if testing works at all.
@@ -28,10 +29,17 @@
 qa!
 :w! mbyte.vim
 :w! mzscheme.vim
+:w! lua.vim
+:"
 :" If +multi_byte feature supported, make mbyte.vim empty.
 :if has("multi_byte") | sp another | w! mbyte.vim | q | endif
+:"
 :" If +mzscheme feature supported, make mzscheme.vim empty.
 :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
+:"
+:" If +lua feature supported, make lua.vim empty.
+:if has("lua") | sp another | w! lua.vim | q | endif
+:"
 :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
 :" Otherwise write small.vim to skip the test.
 :if 1 | q! | endif
diff -Naur vim73.orig/src/testdir/test10.in vim73/src/testdir/test10.in
--- vim73.orig/src/testdir/test10.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test10.in	2013-08-04 19:09:11.113942345 +0000
@@ -2,56 +2,113 @@
 
 STARTTEST
 :so small.vim
-:/start of errorfile/,/end of errorfile/w! Xerrorfile
+:" Also test a BOM is ignored.
+:so mbyte.vim
+:set encoding=utf-8
+:7/start of errorfile/,/end of errorfile/w! Xerrorfile1
+:7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
 :/start of testfile/,/end of testfile/w! Xtestfile
-:cf Xerrorfile
-rA
+:set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m
+:set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m
+:cf Xerrorfile2
+:clast
+:copen
+:let a=w:quickfix_title
+:wincmd p
+lgR=a
+:cf Xerrorfile1
+grA
 :cn
-rB
+gRLINE 6, COL 19
 :cn
-rC
+gRNO COLUMN SPECIFIED
 :cn
-rD
+gRAGAIN NO COLUMN
 :cn
-rE
+gRCOL 1
+:cn
+gRCOL 2
+:cn
+gRCOL 10
+:cn
+gRVCOL 10
+:cn
+grI
+:cn
+gR. SPACE POINTER
+:cn
+gR. DOT POINTER
+:cn
+gR. DASH POINTER
+:cn
+gR. TAB-SPACE POINTER
+:clast
+:cprev
+:cprev
+:wincmd w
+:let a=w:quickfix_title
+:wincmd p
+lgR=a
 :w! test.out             " Write contents of this file
 :qa!
 ENDTEST
 
 start of errorfile
 "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
-"Xtestfile", line 7 col 19; this is an error
+﻿"Xtestfile", line 6 col 19; this is an error
 gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include  version.c
-Xtestfile:13: parse error before `asd'
+Xtestfile:9: parse error before `asd'
 make: *** [vim] Error 1
-in file "Xtestfile" linenr 16: there is an error
+in file "Xtestfile" linenr 10: there is an error
 
 2 returned
-"Xtestfile", linenr 19: yet another problem
+"Xtestfile", line 11 col 1; this is an error
+"Xtestfile", line 12 col 2; this is another error
+"Xtestfile", line 14:10; this is an error in column 10
+=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time
+"Xtestfile", linenr 16: yet another problem
+Error in "Xtestfile" at line 17:
+x should be a dot
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
+            ^
+Error in "Xtestfile" at line 18:
+x should be a dot
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
+.............^
+Error in "Xtestfile" at line 19:
+x should be a dot
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
+--------------^
+Error in "Xtestfile" at line 20:
+x should be a dot
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
+	       ^
 
 Does anyone know what is the problem and how to correction it?
+"Xtestfile", line 21 col 9: What is the title of the quickfix window?
+"Xtestfile", line 22 col 9: What is the title of the quickfix window?
 end of errorfile
 
 start of testfile
-line 2  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 4  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 7  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  4
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  6
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  9
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 10
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 12
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 14
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 15
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 21
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 22
 end of testfile
diff -Naur vim73.orig/src/testdir/test10.ok vim73/src/testdir/test10.ok
--- vim73.orig/src/testdir/test10.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test10.ok	2013-08-04 19:09:11.113942345 +0000
@@ -1,23 +1,23 @@
 start of testfile
-line 2  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 4  xxxAxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 7  xxxxxxxxxxBxxxxxxxxxxxxxxxxxxx
-line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-Cine 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-Dine 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3
+	xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx    line  4
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5
+	xxxxxxxxxxxxxxxxxLINE 6, COL 19   line  6
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8
+	NO COLUMN SPECIFIEDxxxxxxxxxxx    line  9
+	AGAIN NO COLUMNxxxxxxxxxxxxxxx    line 10
+COL 1	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11
+	COL 2xxxxxxxxxxxxxxxxxxxxxxxxx    line 12
+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13
+	xxxxxxxxCOL 10xxxxxxxxxxxxxxxx    line 14
+	xVCOL 10xxxxxxxxxxxxxxxxxxxxxx    line 15
+	Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16
+	xxxx. SPACE POINTERxxxxxxxxxxx    line 17
+	xxxxx. DOT POINTERxxxxxxxxxxxx    line 18
+	xxxxxx. DASH POINTERxxxxxxxxxx    line 19
+	xxxxxxx. TAB-SPACE POINTERxxxx    line 20
+	xxxxxxxx:cf Xerrorfile1xxxxxxx    line 21
+	xxxxxxxx:cf Xerrorfile2xxxxxxx    line 22
 end of testfile
diff -Naur vim73.orig/src/testdir/test14.in vim73/src/testdir/test14.in
--- vim73.orig/src/testdir/test14.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test14.in	2013-08-04 19:09:11.123942315 +0000
@@ -2,6 +2,7 @@
 Also test ":s/pat/sub/" with different ~s in sub.
 Also test for ^Vxff and ^Vo123 in Insert mode.
 Also test "[m", "]m", "[M" and "]M"
+Also test search()
 
 STARTTEST
 :so small.vim
@@ -34,6 +35,19 @@
 2[MaJ:.w >>test.out
 k[MaK:.w >>test.out
 3[MaL:.w >>test.out
+:"
+/^foobar
+:let startline = line('.')
+:call search('foobar', 'c')
+:call append(line('$'), line('.') - startline)
+j:call search('^$', 'c')
+:call append(line('$'), line('.') - startline)
+:call search('^$', 'bc')
+:call append(line('$'), line('.') - startline)
+/two
+:call search('.', 'c')
+:call append(line('$'), getline('.')[col('.') - 1:])
+:/^search()/,$w >>test.out
 :qa!
 ENDTEST
 
@@ -64,3 +78,9 @@
 		}
 	} e3
 }
+
+foobar
+
+
+one two
+search()
diff -Naur vim73.orig/src/testdir/test14.ok vim73/src/testdir/test14.ok
--- vim73.orig/src/testdir/test14.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test14.ok	2013-08-04 19:09:11.123942315 +0000
@@ -15,3 +15,8 @@
 	}JH e3
 	}K e2
 {LF
+search()
+0
+1
+1
+two
diff -Naur vim73.orig/src/testdir/test16.in vim73/src/testdir/test16.in
--- vim73.orig/src/testdir/test16.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test16.in	2013-08-04 19:09:11.127275638 +0000
@@ -2,6 +2,7 @@
 For KDE set a font, empty 'guifont' may cause a hang.
 
 STARTTEST
+:if $DISPLAY == "" | e! test.ok | wq! test.out | endif
 :set exrc secure
 :if has("gui_kde")
 :  set guifont=Courier\ 10\ Pitch/8/-1/5/50/0/0/0/0/0
diff -Naur vim73.orig/src/testdir/test17.in vim73/src/testdir/test17.in
--- vim73.orig/src/testdir/test17.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test17.in	2013-08-04 19:09:11.130608962 +0000
@@ -1,4 +1,6 @@
-Tests for "gf" on ${VAR}
+Tests for:
+- "gf" on ${VAR},
+- ":checkpath!" with various 'include' settings.
 
 STARTTEST
 :so small.vim
@@ -7,6 +9,13 @@
 :else
 : set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,}
 :endif
+:function! DeleteDirectory(dir)
+: if has("win16") || has("win32") || has("win64") || has("dos16") || has("dos32")
+:  exec "silent !rmdir /Q /S " . a:dir
+: else
+:  exec "silent !rm -rf " . a:dir
+: endif
+:endfun
 :if has("unix")
 :let $CDIR = "."
 /CDIR
@@ -18,10 +27,115 @@
 :endif
 /TDIR
 :endif
+:" Dummy writing for making that sure gf doesn't fail even if the current
+:" file is modified. It can be occurred when executing the following command
+:" directly on Windows without fixing the 'fileformat':
+:"  > nmake -f Make_dos.mak test17.out
+:w! test.out
 gf
+:set ff=unix
 :w! test.out
-:qa!
+:brewind
 ENDTEST
 
 	${CDIR}/test17a.in
 	$TDIR/test17a.in
+
+STARTTEST
+:" check for 'include' without \zs or \ze
+:lang C
+:call delete("./Xbase.a")
+:call DeleteDirectory("Xdir1")
+:!mkdir Xdir1
+:!mkdir "Xdir1/dir2"
+:e! Xdir1/dir2/foo.a
+i#include   "bar.a"
+:w
+:e Xdir1/dir2/bar.a
+i#include      "baz.a"
+:w
+:e Xdir1/dir2/baz.a
+i#include            "foo.a"
+:w
+:e Xbase.a
+:set path=Xdir1/dir2
+i#include    <foo.a>
+:w
+:redir! >>test.out
+:checkpath!
+:redir END
+:brewind
+ENDTEST
+
+STARTTEST
+:" check for 'include' with \zs and \ze
+:call delete("./Xbase.b")
+:call DeleteDirectory("Xdir1")
+:!mkdir Xdir1
+:!mkdir "Xdir1/dir2"
+:let &include='^\s*%inc\s*/\zs[^/]\+\ze'
+:function! DotsToSlashes()
+:  return substitute(v:fname, '\.', '/', 'g') . '.b'
+:endfunction
+:let &includeexpr='DotsToSlashes()'
+:e! Xdir1/dir2/foo.b
+i%inc   /bar/
+:w
+:e Xdir1/dir2/bar.b
+i%inc      /baz/
+:w
+:e Xdir1/dir2/baz.b
+i%inc            /foo/
+:w
+:e Xbase.b
+:set path=Xdir1/dir2
+i%inc    /foo/
+:w
+:redir! >>test.out
+:checkpath!
+:redir END
+:brewind
+ENDTEST
+
+STARTTEST
+:" check for 'include' with \zs and no \ze
+:call delete("./Xbase.c")
+:call DeleteDirectory("Xdir1")
+:!mkdir Xdir1
+:!mkdir "Xdir1/dir2"
+:let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
+:function! StripNewlineChar()
+:  if v:fname =~ '\n$'
+:    return v:fname[:-2]
+:  endif
+:  return v:fname
+:endfunction
+:let &includeexpr='StripNewlineChar()'
+:e! Xdir1/dir2/foo.c
+i%inc   bar.c
+:w
+:e Xdir1/dir2/bar.c
+i%inc      baz.c
+:w
+:e Xdir1/dir2/baz.c
+i%inc            foo.c
+:w
+:e Xdir1/dir2/FALSE.c
+i%inc            foo.c
+:w
+:e Xbase.c
+:set path=Xdir1/dir2
+i%inc    FALSE.c foo.c
+:w
+:redir! >>test.out
+:checkpath!
+:redir END
+:brewind
+:" change "\" to "/" for Windows and fix 'fileformat'
+:e test.out
+:%s#\\#/#g
+:set ff&
+:w
+:q
+ENDTEST
+
diff -Naur vim73.orig/src/testdir/test17.ok vim73/src/testdir/test17.ok
--- vim73.orig/src/testdir/test17.ok	2010-08-04 14:06:40.000000000 +0000
+++ vim73/src/testdir/test17.ok	2013-08-04 19:09:11.130608962 +0000
@@ -1,3 +1,33 @@
 This file is just to test "gf" in test 17.
 The contents is not important.
 Just testing!
+
+
+--- Included files in path ---
+Xdir1/dir2/foo.a
+Xdir1/dir2/foo.a -->
+  Xdir1/dir2/bar.a
+  Xdir1/dir2/bar.a -->
+    Xdir1/dir2/baz.a
+    Xdir1/dir2/baz.a -->
+      "foo.a"  (Already listed)
+
+
+--- Included files in path ---
+Xdir1/dir2/foo.b
+Xdir1/dir2/foo.b -->
+  Xdir1/dir2/bar.b
+  Xdir1/dir2/bar.b -->
+    Xdir1/dir2/baz.b
+    Xdir1/dir2/baz.b -->
+      foo  (Already listed)
+
+
+--- Included files in path ---
+Xdir1/dir2/foo.c
+Xdir1/dir2/foo.c -->
+  Xdir1/dir2/bar.c
+  Xdir1/dir2/bar.c -->
+    Xdir1/dir2/baz.c
+    Xdir1/dir2/baz.c -->
+      foo.c  (Already listed)
diff -Naur vim73.orig/src/testdir/test19.in vim73/src/testdir/test19.in
--- vim73.orig/src/testdir/test19.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test19.in	2013-08-04 19:09:11.133942285 +0000
@@ -1,6 +1,8 @@
 Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
+Also test that dv_ works correctly
 
 STARTTEST
+:so small.vim
 :set smarttab expandtab ts=8 sw=4
 :" make sure that backspace works, no matter what termcap is used
 :set t_kD=x7f t_kb=x08
@@ -12,7 +14,12 @@
 0wR			
 :" Test replacing with Tabs
 0wR			
-:?^start?,$w! test.out
+:" Test that copyindent works with expandtab set
+:set expandtab smartindent copyindent ts=8 sw=8 sts=8
+o{
+x:set nosol
+/Second line/
+fwdv_:?^start?,$w! test.out
 :qa!
 ENDTEST
 
@@ -23,3 +30,4 @@
     a cde
     f ghi
 test text
+  Second line beginning with whitespace
diff -Naur vim73.orig/src/testdir/test19.ok vim73/src/testdir/test19.ok
--- vim73.orig/src/testdir/test19.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test19.ok	2013-08-04 19:09:11.137275608 +0000
@@ -5,3 +5,6 @@
     a cde
     		hi
 test text
+{
+        x
+  with whitespace
diff -Naur vim73.orig/src/testdir/test24.in vim73/src/testdir/test24.in
--- vim73.orig/src/testdir/test24.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test24.in	2013-08-04 19:09:11.147275578 +0000
@@ -44,6 +44,13 @@
 :s/^\(\h\w*\%(->\|\.\)\=\)\+=/XX/
 
 :s/^\(\h\w*\%(->\|\.\)\=\)\+=/YY/
+
+:s/aaa/xyz/
+
+:s/~/bcd/
+
+:s/~\+/BB/
+:"
 :?start?,$w! test.out
 :qa!
 ENDTEST
@@ -77,3 +84,6 @@
 xx an file xx
 x= 9;
 hh= 77;
+ aaa 
+ xyz
+ bcdbcdbcd
diff -Naur vim73.orig/src/testdir/test24.ok vim73/src/testdir/test24.ok
--- vim73.orig/src/testdir/test24.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test24.ok	2013-08-04 19:09:11.147275578 +0000
@@ -27,3 +27,6 @@
 xx an A xx
 XX 9;
 YY 77;
+ xyz 
+ bcd
+ BB
diff -Naur vim73.orig/src/testdir/test29.in vim73/src/testdir/test29.in
--- vim73.orig/src/testdir/test29.in	2010-08-01 13:38:24.000000000 +0000
+++ vim73/src/testdir/test29.in	2013-08-04 19:09:11.157275548 +0000
@@ -4,16 +4,17 @@
  and with 'cpoptions' flag 'j' set or not
 
 STARTTEST
+:so small.vim
 :set nocompatible viminfo+=nviminfo
 :set nojoinspaces
 :set cpoptions-=j
 /firstline/
-j"tdGpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+j"td/^STARTTEST/-1
+PJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
 j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
 j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
 j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
-j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjdG:?firstline?+1,$w! test.out
-:qa!
+j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjd/STARTTEST/-2
 ENDTEST
 
 firstline
@@ -54,3 +55,148 @@
 hjkl iop!
 ert
 
+STARTTEST
+/^{/+1
+:set comments=s1:/*,mb:*,ex:*/,://
+:set nojoinspaces fo=j
+:set backspace=eol,start
+:.,+3join
+j4J
+:.,+2join
+j3J
+:.,+2join
+j3J
+:.,+2join
+jj3J
+ENDTEST
+
+{
+
+/*
+ * Make sure the previous comment leader is not removed.
+ */
+
+/*
+ * Make sure the previous comment leader is not removed.
+ */
+
+// Should the next comment leader be left alone?
+// Yes.
+
+// Should the next comment leader be left alone?
+// Yes.
+
+/* Here the comment leader should be left intact. */
+// And so should this one.
+
+/* Here the comment leader should be left intact. */
+// And so should this one.
+
+if (condition) // Remove the next comment leader!
+               // OK, I will.
+    action();
+
+if (condition) // Remove the next comment leader!
+               // OK, I will.
+    action();
+}
+
+STARTTEST
+/^{/+1
+:set comments=sO:*\ -,mO:*\ \ ,exO:*/
+:set comments+=s1:/*,mb:*,ex:*/,://
+:set comments+=s1:>#,mb:#,ex:#<,:<
+:set cpoptions-=j joinspaces fo=j
+:set backspace=eol,start
+:.,+3join
+j4J
+:.,+8join
+j9J
+:.,+2join
+j3J
+:.,+2join
+j3J
+:.,+2join
+jj3J
+j:.,+2join
+jj3J
+j:.,+5join
+j6J
+oSome code!// Make sure backspacing does not remove this comment leader.0i
+ENDTEST
+
+{
+
+/*
+ * Make sure the previous comment leader is not removed.
+ */
+
+/*
+ * Make sure the previous comment leader is not removed.
+ */
+
+/* List:
+ * - item1
+ *   foo bar baz
+ *   foo bar baz
+ * - item2
+ *   foo bar baz
+ *   foo bar baz
+ */
+
+/* List:
+ * - item1
+ *   foo bar baz
+ *   foo bar baz
+ * - item2
+ *   foo bar baz
+ *   foo bar baz
+ */
+
+// Should the next comment leader be left alone?
+// Yes.
+
+// Should the next comment leader be left alone?
+// Yes.
+
+/* Here the comment leader should be left intact. */
+// And so should this one.
+
+/* Here the comment leader should be left intact. */
+// And so should this one.
+
+if (condition) // Remove the next comment leader!
+               // OK, I will.
+    action();
+
+if (condition) // Remove the next comment leader!
+               // OK, I will.
+    action();
+
+int i = 7 /* foo *// 3
+ // comment
+ ;
+
+int i = 7 /* foo *// 3
+ // comment
+ ;
+
+># Note that the last character of the ending comment leader (left angle
+ # bracket) is a comment leader itself. Make sure that this comment leader is
+ # not removed from the next line #<
+< On this line a new comment is opened which spans 2 lines. This comment should
+< retain its comment leader.
+
+># Note that the last character of the ending comment leader (left angle
+ # bracket) is a comment leader itself. Make sure that this comment leader is
+ # not removed from the next line #<
+< On this line a new comment is opened which spans 2 lines. This comment should
+< retain its comment leader.
+
+}
+
+STARTTEST
+:g/^STARTTEST/.,/^ENDTEST/d
+:?firstline?+1,$w! test.out
+:qa!
+ENDTEST
diff -Naur vim73.orig/src/testdir/test29.ok vim73/src/testdir/test29.ok
--- vim73.orig/src/testdir/test29.ok	2010-07-10 12:08:18.000000000 +0000
+++ vim73/src/testdir/test29.ok	2013-08-04 19:09:11.157275548 +0000
@@ -47,3 +47,42 @@
 asdfasdf 	asdf
 asdfasdf		asdf
 zx cvn.  as dfg? hjkl iop! ert  a
+
+
+{
+/* Make sure the previous comment leader is not removed. */
+/* Make sure the previous comment leader is not removed. */
+// Should the next comment leader be left alone? Yes.
+// Should the next comment leader be left alone? Yes.
+/* Here the comment leader should be left intact. */ // And so should this one.
+/* Here the comment leader should be left intact. */ // And so should this one.
+if (condition) // Remove the next comment leader! OK, I will.
+    action();
+if (condition) // Remove the next comment leader! OK, I will.
+    action();
+}
+
+
+{
+/* Make sure the previous comment leader is not removed.  */
+/* Make sure the previous comment leader is not removed.  */
+/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
+/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
+// Should the next comment leader be left alone?  Yes.
+// Should the next comment leader be left alone?  Yes.
+/* Here the comment leader should be left intact. */ // And so should this one.
+/* Here the comment leader should be left intact. */ // And so should this one.
+if (condition) // Remove the next comment leader!  OK, I will.
+    action();
+if (condition) // Remove the next comment leader!  OK, I will.
+    action();
+int i = 7 /* foo *// 3 // comment
+ ;
+int i = 7 /* foo *// 3 // comment
+ ;
+># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
+># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
+
+Some code!// Make sure backspacing does not remove this comment leader.
+}
+
diff -Naur vim73.orig/src/testdir/test3.in vim73/src/testdir/test3.in
--- vim73.orig/src/testdir/test3.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test3.in	2013-08-04 19:09:11.160608871 +0000
@@ -299,18 +299,39 @@
 
 enum soppie
 {
-	yes = 0,
-	no,
-	maybe
+yes = 0,
+no,
+maybe
 };
 
 typedef enum soppie
 {
-	yes = 0,
-	no,
-	maybe
+yes = 0,
+no,
+maybe
 };
 
+static enum
+{
+yes = 0,
+no,
+maybe
+} soppie;
+
+public static enum
+{
+yes = 0,
+no,
+maybe
+} soppie;
+
+static private enum
+{
+yes = 0,
+no,
+maybe
+} soppie;
+
 {
 	int a,
 		b;
@@ -799,6 +820,69 @@
 	df */
 		hello
 }
+
+/* valid namespaces with normal indent */
+namespace
+{
+{
+  111111111111;
+}
+}
+namespace /* test */
+{
+  11111111111111111;
+}
+namespace // test
+{
+  111111111111111111;
+}
+namespace
+{
+  111111111111111111;
+}
+namespace test
+{
+  111111111111111111;
+}
+namespace{
+  111111111111111111;
+}
+namespace test{
+  111111111111111111;
+}
+namespace {
+  111111111111111111;
+}
+namespace test {
+  111111111111111111;
+namespace test2 {
+  22222222222222222;
+}
+}
+
+/* invalid namespaces use block indent */
+namespace test test2 {
+  111111111111111111111;
+}
+namespace11111111111 {
+  111111111111;
+}
+namespace() {
+  1111111111111;
+}
+namespace()
+{
+  111111111111111111;
+}
+namespace test test2
+{
+  1111111111111111111;
+}
+namespace111111111
+{
+  111111111111111111;
+}
+
 /* end of AUTO */
 
 STARTTEST
@@ -907,6 +991,24 @@
 
 STARTTEST
 :set cin
+:set cino=es,n0s
+/main
+=][
+ENDTEST
+
+main(void)
+{
+	/* Make sure that cino=X0s is not parsed like cino=Xs. */
+	if (cond)
+		foo();
+	else
+	{
+		bar();
+	}
+}
+
+STARTTEST
+:set cin
 :set cino=
 ]]=][
 ENDTEST
@@ -1246,6 +1348,20 @@
 };
 
 STARTTEST
+:set cino=(0,gs,hs
+2kdd]]=][
+ENDTEST
+
+class Foo : public Bar
+{
+public:
+virtual void method1(void) = 0;
+virtual void method2(int arg1,
+int arg2,
+int arg3) = 0;
+};
+
+STARTTEST
 :set cino=+20
 2kdd]]=][
 ENDTEST
@@ -1315,6 +1431,626 @@
 }
 
 STARTTEST
+:set cino=(0,ts
+2kdd=][
+ENDTEST
+
+void func(int a
+#if defined(FOO)
+		  , int b
+		  , int c
+#endif
+		 )
+{
+}
+
+STARTTEST
+:set cino=(0
+2kdd=][
+ENDTEST
+
+void
+func(int a
+#if defined(FOO)
+		  , int b
+		  , int c
+#endif
+		 )
+{
+}
+
+STARTTEST
+:set cino&
+2kdd=7][
+ENDTEST
+
+void func(void)
+{
+	if(x==y)
+		if(y==z)
+			foo=1;
+		else { bar=1;
+			baz=2;
+		}
+	printf("Foo!\n");
+}
+
+void func1(void)
+{
+	char* tab[] = {"foo", "bar",
+		"baz", "quux",
+			"this line used", "to be indented incorrectly"};
+	foo();
+}
+
+void func2(void)
+{
+	int tab[] =
+	{1, 2,
+		3, 4,
+		5, 6};
+
+		printf("This line used to be indented incorrectly.\n");
+}
+
+int foo[]
+#ifdef BAR
+
+= { 1, 2, 3,
+	4, 5, 6 }
+
+#endif
+;
+	int baz;
+
+void func3(void)
+{
+	int tab[] = {
+	1, 2,
+	3, 4,
+	5, 6};
+
+printf("Don't you dare indent this line incorrectly!\n");
+}
+
+void
+func4(a, b,
+		c)
+int a;
+int b;
+int c;
+{
+}
+
+void
+func5(
+		int a,
+		int b)
+{
+}
+
+void
+func6(
+		int a)
+{
+}
+
+STARTTEST
+:set cino&
+:set cino+=l1
+2kdd=][
+ENDTEST
+
+void func(void)
+{
+	int tab[] =
+	{
+		1, 2, 3,
+		4, 5, 6};
+
+	printf("Indent this line correctly!\n");
+
+	switch (foo)
+	{
+		case bar:
+			printf("bar");
+			break;
+		case baz: {
+			printf("baz");
+			break;
+		}
+		case quux:
+printf("But don't break the indentation of this instruction\n");
+break;
+	}
+}
+
+STARTTEST
+:set cino&
+2kdd=][
+ENDTEST
+
+void func(void)
+{
+	cout << "a"
+	<< "b"
+	<< ") :"
+	<< "c";
+}
+
+STARTTEST
+:set com=s1:/*,m:*,ex:*/
+]]3jofoo();
+ENDTEST
+
+void func(void)
+{
+	/*
+	 * This is a comment.
+	 */
+}
+
+STARTTEST
+:set cino&
+2kdd=][
+ENDTEST
+
+void func(void)
+{
+	for (int i = 0; i < 10; ++i)
+		if (i & 1) {
+			foo(1);
+		} else
+			foo(0);
+baz();
+}
+
+STARTTEST
+:set cino=k2s,(0
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+	if (condition1
+	&& condition2)
+	action();
+	function(argument1
+	&& argument2);
+
+	if (c1 && (c2 ||
+	c3))
+	foo;
+	if (c1 &&
+	(c2 || c3))
+	{
+	}
+
+	if (   c1
+	&& (      c2
+	|| c3))
+	foo;
+	func( c1
+	&& (     c2
+	|| c3))
+	foo;
+}
+
+STARTTEST
+:set cino=k2s,(s
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+	if (condition1
+	&& condition2)
+	action();
+	function(argument1
+	&& argument2);
+
+	if (c1 && (c2 ||
+	c3))
+	foo;
+	if (c1 &&
+	(c2 || c3))
+	{
+	}
+
+	if (   c1
+	&& (      c2
+	|| c3))
+	foo;
+	func(   c1
+	&& (      c2
+	|| c3))
+	foo;
+}
+
+STARTTEST
+:set cino=k2s,(s,U1
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+	if (condition1
+	&& condition2)
+	action();
+	function(argument1
+	&& argument2);
+
+	if (c1 && (c2 ||
+	c3))
+	foo;
+	if (c1 &&
+	(c2 || c3))
+	{
+	}
+	if (c123456789
+	&& (c22345
+	|| c3))
+	printf("foo\n");
+
+	c = c1 &&
+	(
+	c2 ||
+	c3
+	) && c4;
+}
+
+STARTTEST
+:set cino=k2s,(0,W4
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+	if (condition1
+	&& condition2)
+	action();
+	function(argument1
+	&& argument2);
+
+	if (c1 && (c2 ||
+	c3))
+	foo;
+	if (c1 &&
+	(c2 || c3))
+	{
+	}
+	if (c123456789
+	&& (c22345
+	|| c3))
+	printf("foo\n");
+
+	if (   c1
+	&& (   c2
+	|| c3))
+	foo;
+
+	a_long_line(
+	argument,
+	argument);
+	a_short_line(argument,
+	argument);
+}
+
+STARTTEST
+:set cino=k2s,u2
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+	if (condition1
+	&& condition2)
+	action();
+	function(argument1
+	&& argument2);
+
+	if (c1 && (c2 ||
+	c3))
+	foo;
+	if (c1 &&
+	(c2 || c3))
+	{
+	}
+	if (c123456789
+	&& (c22345
+	|| c3))
+	printf("foo\n");
+}
+
+STARTTEST
+:set cino=k2s,(0,w1
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+	if (condition1
+	&& condition2)
+	action();
+	function(argument1
+	&& argument2);
+
+	if (c1 && (c2 ||
+	c3))
+	foo;
+	if (c1 &&
+	(c2 || c3))
+	{
+	}
+	if (c123456789
+	&& (c22345
+	|| c3))
+	printf("foo\n");
+
+	if (   c1
+	&& (      c2
+	|| c3))
+	foo;
+	func(   c1
+	&& (      c2
+	|| c3))
+	foo;
+}
+
+STARTTEST
+:set cino=k2,(s
+2kdd3j=][
+ENDTEST
+
+void func(void)
+{
+	if (condition1
+	  && condition2)
+		action();
+	function(argument1
+		&& argument2);
+
+	if (c1 && (c2 ||
+		  c3))
+		foo;
+	if (c1 &&
+	  (c2 || c3))
+	{
+	}
+}
+
+STARTTEST
+:set cino=N-s
+/^NAMESPACESTART
+=/^NAMESPACEEND
+ENDTEST
+
+NAMESPACESTART
+/* valid namespaces with normal indent */
+namespace
+{
+   {
+	111111111111;
+}
+}
+namespace /* test */
+{
+  11111111111111111;
+}
+namespace // test
+{
+  111111111111111111;
+}
+namespace
+{
+  111111111111111111;
+}
+namespace test
+{
+  111111111111111111;
+}
+namespace{
+  111111111111111111;
+}
+namespace test{
+  111111111111111111;
+}
+namespace {
+  111111111111111111;
+}
+namespace test {
+  111111111111111111;
+namespace test2 {
+  22222222222222222;
+}
+}
+
+/* invalid namespaces use block indent */
+namespace test test2 {
+  111111111111111111111;
+}
+namespace11111111111 {
+  111111111111;
+}
+namespace() {
+  1111111111111;
+}
+namespace()
+{
+  111111111111111111;
+}
+namespace test test2
+{
+  1111111111111111111;
+}
+namespace111111111
+{
+  111111111111111111;
+}
+NAMESPACEEND
+
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+var bar = {
+foo: {
+that: this,
+some: ok,
+},
+"bar":{
+a : 2,
+b: "123abc",
+x: 4,
+"y": 5
+}
+}
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+var foo = [
+1,  // indent 8 more
+2,
+3
+];  // indent 8 less
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+function bar() {
+var foo = [
+1,
+2,
+3
+];  // indent 16 less
+}
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+(function($){
+
+var class_name='myclass';
+
+function private_method() {
+}
+
+var public_method={
+method: function(options,args){
+private_method();
+}
+}
+
+function init(options) {
+
+$(this).data(class_name+'_public',$.extend({},{
+foo: 'bar',
+bar: 2,  // indent 8 more
+foobar: [  // indent 8 more
+1,  // indent 8 more
+2,  // indent 16 more
+3   // indent 16 more
+],
+callback: function(){  // indent 8 more
+return true;  // indent 8 more
+}  // indent 8 more
+}, options||{}));
+}
+
+$.fn[class_name]=function() {
+
+var _arguments=arguments;
+return this.each(function(){
+
+var options=$(this).data(class_name+'_public');
+if (!options) {
+init.apply(this,_arguments);
+
+} else {
+var method=public_method[_arguments[0]];
+
+if (typeof(method)!='function') {
+console.log(class_name+' has no method "'+_arguments[0]+'"');
+return false;
+}
+_arguments[0]=options;
+method.apply(this,_arguments);
+}
+});
+}
+
+})(jQuery);
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+function init(options) {
+$(this).data(class_name+'_public',$.extend({},{
+foo: 'bar',
+bar: 2,
+foobar: [
+1,  // indent 8 more
+2,  // indent 8 more
+3   // indent 8 more
+],
+callback: function(){
+return true;
+}
+}, options||{}));
+}
+JSEND
+
+STARTTEST
+:set cino=j1,J1
+/^JSSTART
+=/^JSEND
+ENDTEST
+
+JSSTART
+(function($){
+function init(options) {
+$(this).data(class_name+'_public',$.extend({},{
+foo: 'bar',
+bar: 2,  // indent 8 more
+foobar: [  // indent 8 more
+1,  // indent 8 more
+2,  // indent 16 more
+3  // indent 16 more
+],
+callback: function(){  // indent 8 more
+return true;  // indent 8 more
+}  // indent 8 more
+}, options||{}));
+}
+})(jQuery);
+JSEND
+
+STARTTEST
 :g/^STARTTEST/.,/^ENDTEST/d
 :1;/start of AUTO/,$wq! test.out
 ENDTEST
diff -Naur vim73.orig/src/testdir/test3.ok vim73/src/testdir/test3.ok
--- vim73.orig/src/testdir/test3.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test3.ok	2013-08-04 19:09:11.160608871 +0000
@@ -299,6 +299,27 @@
 	maybe
 };
 
+static enum
+{
+	yes = 0,
+	no,
+	maybe
+} soppie;
+
+public static enum
+{
+	yes = 0,
+	no,
+	maybe
+} soppie;
+
+static private enum
+{
+	yes = 0,
+	no,
+	maybe
+} soppie;
+
 {
 	int a,
 		b;
@@ -787,6 +808,69 @@
 	   df */
 	hello
 }
+
+/* valid namespaces with normal indent */
+namespace
+{
+	{
+		111111111111;
+	}
+}
+namespace /* test */
+{
+	11111111111111111;
+}
+namespace // test
+{
+	111111111111111111;
+}
+namespace
+{
+	111111111111111111;
+}
+namespace test
+{
+	111111111111111111;
+}
+namespace{
+	111111111111111111;
+}
+namespace test{
+	111111111111111111;
+}
+namespace {
+	111111111111111111;
+}
+namespace test {
+	111111111111111111;
+	namespace test2 {
+		22222222222222222;
+	}
+}
+
+/* invalid namespaces use block indent */
+namespace test test2 {
+	111111111111111111111;
+}
+namespace11111111111 {
+	111111111111;
+}
+namespace() {
+	1111111111111;
+}
+namespace()
+{
+	111111111111111111;
+}
+namespace test test2
+{
+	1111111111111111111;
+}
+namespace111111111
+{
+	111111111111111111;
+}
+
 /* end of AUTO */
 
 
@@ -870,6 +954,18 @@
 }
 
 
+main(void)
+{
+	/* Make sure that cino=X0s is not parsed like cino=Xs. */
+	if (cond)
+		foo();
+	else
+	{
+		bar();
+	}
+}
+
+
 {
 	do
 	{
@@ -1127,6 +1223,16 @@
 };
 
 
+class Foo : public Bar
+{
+	public:
+		virtual void method1(void) = 0;
+		virtual void method2(int arg1,
+							 int arg2,
+							 int arg3) = 0;
+};
+
+
 	void
 foo()
 {
@@ -1183,3 +1289,532 @@
 		foo;
 }
 
+
+void func(int a
+#if defined(FOO)
+		  , int b
+		  , int c
+#endif
+		 )
+{
+}
+
+
+	void
+func(int a
+#if defined(FOO)
+	 , int b
+	 , int c
+#endif
+	)
+{
+}
+
+
+void func(void)
+{
+	if(x==y)
+		if(y==z)
+			foo=1;
+		else { bar=1;
+			baz=2;
+		}
+	printf("Foo!\n");
+}
+
+void func1(void)
+{
+	char* tab[] = {"foo", "bar",
+		"baz", "quux",
+		"this line used", "to be indented incorrectly"};
+	foo();
+}
+
+void func2(void)
+{
+	int tab[] =
+	{1, 2,
+		3, 4,
+		5, 6};
+
+	printf("This line used to be indented incorrectly.\n");
+}
+
+int foo[]
+#ifdef BAR
+
+= { 1, 2, 3,
+	4, 5, 6 }
+
+#endif
+	;
+int baz;
+
+void func3(void)
+{
+	int tab[] = {
+		1, 2,
+		3, 4,
+		5, 6};
+
+	printf("Don't you dare indent this line incorrectly!\n");
+}
+
+	void
+func4(a, b,
+		c)
+	int a;
+	int b;
+	int c;
+{
+}
+
+	void
+func5(
+		int a,
+		int b)
+{
+}
+
+	void
+func6(
+		int a)
+{
+}
+
+
+void func(void)
+{
+	int tab[] =
+	{
+		1, 2, 3,
+		4, 5, 6};
+
+	printf("Indent this line correctly!\n");
+
+	switch (foo)
+	{
+		case bar:
+			printf("bar");
+			break;
+		case baz: {
+			printf("baz");
+			break;
+		}
+		case quux:
+			printf("But don't break the indentation of this instruction\n");
+			break;
+	}
+}
+
+
+void func(void)
+{
+	cout << "a"
+		<< "b"
+		<< ") :"
+		<< "c";
+}
+
+
+void func(void)
+{
+	/*
+	 * This is a comment.
+	 */
+	foo();
+}
+
+
+void func(void)
+{
+	for (int i = 0; i < 10; ++i)
+		if (i & 1) {
+			foo(1);
+		} else
+			foo(0);
+	baz();
+}
+
+
+void func(void)
+{
+	if (condition1
+			&& condition2)
+		action();
+	function(argument1
+			 && argument2);
+
+	if (c1 && (c2 ||
+				c3))
+		foo;
+	if (c1 &&
+			(c2 || c3))
+	{
+	}
+
+	if (   c1
+			&& (      c2
+					  || c3))
+		foo;
+	func( c1
+		  && (     c2
+				   || c3))
+		foo;
+}
+
+
+void func(void)
+{
+	if (condition1
+			&& condition2)
+		action();
+	function(argument1
+		&& argument2);
+
+	if (c1 && (c2 ||
+				c3))
+		foo;
+	if (c1 &&
+			(c2 || c3))
+	{
+	}
+
+	if (   c1
+			&& (      c2
+				|| c3))
+		foo;
+	func(   c1
+		&& (      c2
+			|| c3))
+		foo;
+}
+
+
+void func(void)
+{
+	if (condition1
+			&& condition2)
+		action();
+	function(argument1
+		&& argument2);
+
+	if (c1 && (c2 ||
+				c3))
+		foo;
+	if (c1 &&
+			(c2 || c3))
+	{
+	}
+	if (c123456789
+			&& (c22345
+				|| c3))
+		printf("foo\n");
+
+	c = c1 &&
+		(
+			c2 ||
+			c3
+		) && c4;
+}
+
+
+void func(void)
+{
+	if (condition1
+			&& condition2)
+		action();
+	function(argument1
+			 && argument2);
+
+	if (c1 && (c2 ||
+				c3))
+		foo;
+	if (c1 &&
+			(c2 || c3))
+	{
+	}
+	if (c123456789
+			&& (c22345
+				|| c3))
+		printf("foo\n");
+
+	if (   c1
+			&& (   c2
+				   || c3))
+		foo;
+
+	a_long_line(
+		argument,
+		argument);
+	a_short_line(argument,
+				 argument);
+}
+
+
+void func(void)
+{
+	if (condition1
+			&& condition2)
+		action();
+	function(argument1
+			&& argument2);
+
+	if (c1 && (c2 ||
+			  c3))
+		foo;
+	if (c1 &&
+			(c2 || c3))
+	{
+	}
+	if (c123456789
+			&& (c22345
+			  || c3))
+		printf("foo\n");
+}
+
+
+void func(void)
+{
+	if (condition1
+			&& condition2)
+		action();
+	function(argument1
+			 && argument2);
+
+	if (c1 && (c2 ||
+				c3))
+		foo;
+	if (c1 &&
+			(c2 || c3))
+	{
+	}
+	if (c123456789
+			&& (c22345
+				|| c3))
+		printf("foo\n");
+
+	if (   c1
+			&& (      c2
+				|| c3))
+		foo;
+	func(   c1
+		 && (      c2
+			 || c3))
+		foo;
+}
+
+
+void func(void)
+{
+	if (condition1
+	  && condition2)
+		action();
+	function(argument1
+		&& argument2);
+
+	if (c1 && (c2 ||
+		  c3))
+		foo;
+	if (c1 &&
+	  (c2 || c3))
+	{
+	}
+}
+
+
+NAMESPACESTART
+/* valid namespaces with normal indent */
+namespace
+{
+{
+	111111111111;
+}
+}
+namespace /* test */
+{
+11111111111111111;
+}
+namespace // test
+{
+111111111111111111;
+}
+namespace
+{
+111111111111111111;
+}
+namespace test
+{
+111111111111111111;
+}
+namespace{
+111111111111111111;
+}
+namespace test{
+111111111111111111;
+}
+namespace {
+111111111111111111;
+}
+namespace test {
+111111111111111111;
+namespace test2 {
+22222222222222222;
+}
+}
+
+/* invalid namespaces use block indent */
+namespace test test2 {
+	111111111111111111111;
+}
+namespace11111111111 {
+	111111111111;
+}
+namespace() {
+	1111111111111;
+}
+namespace()
+{
+	111111111111111111;
+}
+namespace test test2
+{
+	1111111111111111111;
+}
+namespace111111111
+{
+	111111111111111111;
+}
+NAMESPACEEND
+
+
+
+JSSTART
+var bar = {
+	foo: {
+		that: this,
+		some: ok,
+	},
+	"bar":{
+		a : 2,
+		b: "123abc",
+		x: 4,
+		"y": 5
+	}
+}
+JSEND
+
+
+JSSTART
+var foo = [
+1,  // indent 8 more
+	2,
+	3
+	];  // indent 8 less
+JSEND
+
+
+JSSTART
+function bar() {
+	var foo = [
+		1,
+		2,
+		3
+			];  // indent 16 less
+}
+JSEND
+
+
+JSSTART
+(function($){
+
+	var class_name='myclass';
+
+	function private_method() {
+	}
+
+	var public_method={
+		method: function(options,args){
+			private_method();
+		}
+	}
+
+	function init(options) {
+
+		$(this).data(class_name+'_public',$.extend({},{
+			foo: 'bar',
+		bar: 2,  // indent 8 more
+		foobar: [  // indent 8 more
+			1,  // indent 8 more
+		2,  // indent 16 more
+		3   // indent 16 more
+			],
+		callback: function(){  // indent 8 more
+			return true;  // indent 8 more
+		}  // indent 8 more
+		}, options||{}));
+	}
+
+	$.fn[class_name]=function() {
+
+		var _arguments=arguments;
+		return this.each(function(){
+
+			var options=$(this).data(class_name+'_public');
+			if (!options) {
+				init.apply(this,_arguments);
+
+			} else {
+				var method=public_method[_arguments[0]];
+
+				if (typeof(method)!='function') {
+					console.log(class_name+' has no method "'+_arguments[0]+'"');
+					return false;
+				}
+				_arguments[0]=options;
+				method.apply(this,_arguments);
+			}
+		});
+	}
+
+})(jQuery);
+JSEND
+
+
+JSSTART
+function init(options) {
+	$(this).data(class_name+'_public',$.extend({},{
+		foo: 'bar',
+		bar: 2,
+		foobar: [
+		1,  // indent 8 more
+		2,  // indent 8 more
+		3   // indent 8 more
+		],
+		callback: function(){
+			return true;
+		}
+	}, options||{}));
+}
+JSEND
+
+
+JSSTART
+(function($){
+	function init(options) {
+		$(this).data(class_name+'_public',$.extend({},{
+			foo: 'bar',
+		bar: 2,  // indent 8 more
+		foobar: [  // indent 8 more
+			1,  // indent 8 more
+		2,  // indent 16 more
+		3  // indent 16 more
+			],
+		callback: function(){  // indent 8 more
+			return true;  // indent 8 more
+		}  // indent 8 more
+		}, options||{}));
+	}
+})(jQuery);
+JSEND
+
diff -Naur vim73.orig/src/testdir/test31.in vim73/src/testdir/test31.in
--- vim73.orig/src/testdir/test31.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test31.in	2013-08-04 19:09:11.163942195 +0000
@@ -63,6 +63,12 @@
 :" write "testtext 1"
 A 3:close!
 :w >>test.out
+:set nohidden
+:" test ":all!" hides changed buffer; write "testtext 2 2 2"
+:sp Xtest4
+GA 4:all!
+:1wincmd w
+:w >>test.out
 :qa!
 ENDTEST
 
diff -Naur vim73.orig/src/testdir/test31.ok vim73/src/testdir/test31.ok
--- vim73.orig/src/testdir/test31.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test31.ok	2013-08-04 19:09:11.167275518 +0000
@@ -9,3 +9,4 @@
 testtext 1
 testtext 3 3 3
 testtext 1
+testtext 2 2 2
diff -Naur vim73.orig/src/testdir/test34.in vim73/src/testdir/test34.in
--- vim73.orig/src/testdir/test34.in	2010-05-29 13:09:55.000000000 +0000
+++ vim73/src/testdir/test34.in	2013-08-04 19:09:11.170608841 +0000
@@ -1,5 +1,6 @@
 Test for user functions.
 Also test an <expr> mapping calling a function.
+Also test that a builtin function cannot be replaced.
 
 STARTTEST
 :so small.vim
@@ -58,7 +59,10 @@
 ---*---
 (one
 (two
-[(one again:$-5,$w! test.out
+[(one again:call append(line('$'), max([1, 2, 3]))
+:call extend(g:, {'max': function('min')})
+:call append(line('$'), max([1, 2, 3]))
+:$-7,$w! test.out
 :delfunc Table
 :delfunc Compute
 :delfunc Expr1
diff -Naur vim73.orig/src/testdir/test34.ok vim73/src/testdir/test34.ok
--- vim73.orig/src/testdir/test34.ok	2010-05-29 13:11:12.000000000 +0000
+++ vim73/src/testdir/test34.ok	2013-08-04 19:09:11.170608841 +0000
@@ -1,6 +1,8 @@
 xxx4asdf fail nop ok 9 333
-XX111XX
+XX111-XX
 ---222---
 1. one
 2. two
 1. one again
+3
+3
diff -Naur vim73.orig/src/testdir/test36.in vim73/src/testdir/test36.in
--- vim73.orig/src/testdir/test36.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test36.in	2013-08-04 19:09:11.173942165 +0000
@@ -1,40 +1,105 @@
-Test character classes in regexp
+Test character classes in regexp using regexpengine 0, 1, 2.
 
 STARTTEST
-/^start-here
-j:s/\d//g
-j:s/\D//g
-j:s/\o//g
-j:s/\O//g
-j:s/\x//g
-j:s/\X//g
-j:s/\w//g
-j:s/\W//g
-j:s/\h//g
-j:s/\H//g
-j:s/\a//g
-j:s/\A//g
-j:s/\l//g
-j:s/\L//g
-j:s/\u//g
-j:s/\U//g
+/^start-here/+1
+Y:s/\%#=0\d//g
+p:s/\%#=1\d//g
+p:s/\%#=2\d//g
+p:s/\%#=0[0-9]//g
+p:s/\%#=1[0-9]//g
+p:s/\%#=2[0-9]//g
+p:s/\%#=0\D//g
+p:s/\%#=1\D//g
+p:s/\%#=2\D//g
+p:s/\%#=0[^0-9]//g
+p:s/\%#=1[^0-9]//g
+p:s/\%#=2[^0-9]//g
+p:s/\%#=0\o//g
+p:s/\%#=1\o//g
+p:s/\%#=2\o//g
+p:s/\%#=0[0-7]//g
+p:s/\%#=1[0-7]//g
+p:s/\%#=2[0-7]//g
+p:s/\%#=0\O//g
+p:s/\%#=1\O//g
+p:s/\%#=2\O//g
+p:s/\%#=0[^0-7]//g
+p:s/\%#=1[^0-7]//g
+p:s/\%#=2[^0-7]//g
+p:s/\%#=0\x//g
+p:s/\%#=1\x//g
+p:s/\%#=2\x//g
+p:s/\%#=0[0-9A-Fa-f]//g
+p:s/\%#=1[0-9A-Fa-f]//g
+p:s/\%#=2[0-9A-Fa-f]//g
+p:s/\%#=0\X//g
+p:s/\%#=1\X//g
+p:s/\%#=2\X//g
+p:s/\%#=0[^0-9A-Fa-f]//g
+p:s/\%#=1[^0-9A-Fa-f]//g
+p:s/\%#=2[^0-9A-Fa-f]//g
+p:s/\%#=0\w//g
+p:s/\%#=1\w//g
+p:s/\%#=2\w//g
+p:s/\%#=0[0-9A-Za-z_]//g
+p:s/\%#=1[0-9A-Za-z_]//g
+p:s/\%#=2[0-9A-Za-z_]//g
+p:s/\%#=0\W//g
+p:s/\%#=1\W//g
+p:s/\%#=2\W//g
+p:s/\%#=0[^0-9A-Za-z_]//g
+p:s/\%#=1[^0-9A-Za-z_]//g
+p:s/\%#=2[^0-9A-Za-z_]//g
+p:s/\%#=0\h//g
+p:s/\%#=1\h//g
+p:s/\%#=2\h//g
+p:s/\%#=0[A-Za-z_]//g
+p:s/\%#=1[A-Za-z_]//g
+p:s/\%#=2[A-Za-z_]//g
+p:s/\%#=0\H//g
+p:s/\%#=1\H//g
+p:s/\%#=2\H//g
+p:s/\%#=0[^A-Za-z_]//g
+p:s/\%#=1[^A-Za-z_]//g
+p:s/\%#=2[^A-Za-z_]//g
+p:s/\%#=0\a//g
+p:s/\%#=1\a//g
+p:s/\%#=2\a//g
+p:s/\%#=0[A-Za-z]//g
+p:s/\%#=1[A-Za-z]//g
+p:s/\%#=2[A-Za-z]//g
+p:s/\%#=0\A//g
+p:s/\%#=1\A//g
+p:s/\%#=2\A//g
+p:s/\%#=0[^A-Za-z]//g
+p:s/\%#=1[^A-Za-z]//g
+p:s/\%#=2[^A-Za-z]//g
+p:s/\%#=0\l//g
+p:s/\%#=1\l//g
+p:s/\%#=2\l//g
+p:s/\%#=0[a-z]//g
+p:s/\%#=1[a-z]//g
+p:s/\%#=2[a-z]//g
+p:s/\%#=0\L//g
+p:s/\%#=1\L//g
+p:s/\%#=2\L//g
+p:s/\%#=0[^a-z]//g
+p:s/\%#=1[^a-z]//g
+p:s/\%#=2[^a-z]//g
+p:s/\%#=0\u//g
+p:s/\%#=1\u//g
+p:s/\%#=2\u//g
+p:s/\%#=0[A-Z]//g
+p:s/\%#=1[A-Z]//g
+p:s/\%#=2[A-Z]//g
+p:s/\%#=0\U//g
+p:s/\%#=1\U//g
+p:s/\%#=2\U//g
+p:s/\%#=0[^A-Z]//g
+p:s/\%#=1[^A-Z]//g
+p:s/\%#=2[^A-Z]//g
 :/^start-here/+1,$wq! test.out
 ENDTEST
 
 start-here
 	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
-	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
diff -Naur vim73.orig/src/testdir/test36.ok vim73/src/testdir/test36.ok
--- vim73.orig/src/testdir/test36.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test36.ok	2013-08-04 19:09:11.177275488 +0000
@@ -1,16 +1,96 @@
 	 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+0123456789
+0123456789
+0123456789
+0123456789
+0123456789
 0123456789
 	 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~
+01234567
+01234567
+01234567
+01234567
+01234567
 01234567
 	 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~
+	 !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
+0123456789ABCDEFabcdef
 0123456789ABCDEFabcdef
 	 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./:;<=>?@[\]^`{|}~
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+0123456789ABCDEFGHIXYZ_abcdefghiwxyz
 0123456789ABCDEFGHIXYZ_abcdefghiwxyz
 	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
+ABCDEFGHIXYZ_abcdefghiwxyz
 ABCDEFGHIXYZ_abcdefghiwxyz
 	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
+ABCDEFGHIXYZabcdefghiwxyz
 ABCDEFGHIXYZabcdefghiwxyz
 	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
+abcdefghiwxyz
 abcdefghiwxyz
 	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~
+	 !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
+ABCDEFGHIXYZ
 ABCDEFGHIXYZ
diff -Naur vim73.orig/src/testdir/test40.in vim73/src/testdir/test40.in
--- vim73.orig/src/testdir/test40.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test40.in	2013-08-04 19:09:11.183942135 +0000
@@ -3,18 +3,18 @@
 STARTTEST
 :so small.vim
 :/^start/,$w! Xxx		" write lines below to Xxx
-:au BufReadCmd testA 0r Xxx|$del
-:e testA			" will read text of Xxd instead
-:au BufWriteCmd testA call append(line("$"), "write")
+:au BufReadCmd XtestA 0r Xxx|$del
+:e XtestA			" will read text of Xxd instead
+:au BufWriteCmd XtestA call append(line("$"), "write")
 :w				" will append a line to the file
-:r testA			" should not read anything
+:r XtestA			" should not read anything
 :				" now we have:
 :				" 1	start of Xxx
 :				" 2		test40
 :				" 3	end of Xxx
 :				" 4	write
-:au FileReadCmd testB '[r Xxx
-:2r testB			" will read Xxx below line 2 instead
+:au FileReadCmd XtestB '[r Xxx
+:2r XtestB			" will read Xxx below line 2 instead
 :				" 1	start of Xxx
 :				" 2		test40
 :				" 3	start of Xxx
@@ -22,10 +22,10 @@
 :				" 5	end of Xxx
 :				" 6	end of Xxx
 :				" 7	write
-:au FileWriteCmd testC '[,']copy $
+:au FileWriteCmd XtestC '[,']copy $
 4GA1
-:4,5w testC			" will copy lines 4 and 5 to the end
-:r testC			" should not read anything
+:4,5w XtestC			" will copy lines 4 and 5 to the end
+:r XtestC			" should not read anything
 :				" 1	start of Xxx
 :				" 2		test40
 :				" 3	start of Xxx
@@ -35,14 +35,14 @@
 :				" 7	write
 :				" 8		test401
 :				" 9	end of Xxx
-:au FILEAppendCmd testD '[,']w! test.out
-:w >>testD			" will write all lines to test.out
-:$r testD			" should not read anything
+:au FILEAppendCmd XtestD '[,']w! test.out
+:w >>XtestD			" will write all lines to test.out
+:$r XtestD			" should not read anything
 :$w >>test.out			" append "end of Xxx" to test.out
-:au BufReadCmd testE 0r test.out|$del
-:sp testE			" split window with test.out
+:au BufReadCmd XtestE 0r test.out|$del
+:sp XtestE			" split window with test.out
 5Goasdf:"
-:au BufWriteCmd testE w! test.out
+:au BufWriteCmd XtestE w! test.out
 :wall				" will write other window to test.out
 :				" 1	start of Xxx
 :				" 2		test40
diff -Naur vim73.orig/src/testdir/test43.in vim73/src/testdir/test43.in
--- vim73.orig/src/testdir/test43.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test43.in	2013-08-04 19:09:11.190608781 +0000
@@ -1,6 +1,7 @@
 Tests for regexp with various magic settings.
 
 STARTTEST
+:so small.vim
 :set nocompatible viminfo+=nviminfo
 /^1
 /a*b\{2}c\+/e
@@ -13,7 +14,11 @@
 x:set magic
 /\v(a)(b)\2\1\1/e
 x/\V[ab]\(\[xy]\)\1
-x:?^1?,$w! test.out
+x:$
+:set undolevels=100
+dv?bar?
+Yup:"
+:?^1?,$w! test.out
 :qa!
 ENDTEST
 
@@ -25,3 +30,5 @@
 6 x ^aa$ x
 7 (a)(b) abbaa
 8 axx [ab]xx
+9 foobar
+
diff -Naur vim73.orig/src/testdir/test43.ok vim73/src/testdir/test43.ok
--- vim73.orig/src/testdir/test43.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test43.ok	2013-08-04 19:09:11.193942105 +0000
@@ -6,3 +6,6 @@
 6 x aa$ x
 7 (a)(b) abba
 8 axx ab]xx
+9 foobar
+9 foo
+
diff -Naur vim73.orig/src/testdir/test44.in vim73/src/testdir/test44.in
--- vim73.orig/src/testdir/test44.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test44.in	2013-08-04 19:09:11.193942105 +0000
@@ -27,7 +27,14 @@
 x/\%U12345678
 x/[\U1234abcd\u1234\uabcd]
 x/\%d21879b
-x:?^1?,$w! test.out
+x/ [[=A=]]* [[=B=]]* [[=C=]]* [[=D=]]* [[=E=]]* [[=F=]]* [[=G=]]* [[=H=]]* [[=I=]]* [[=J=]]* [[=K=]]* [[=L=]]* [[=M=]]* [[=N=]]* [[=O=]]* [[=P=]]* [[=Q=]]* [[=R=]]* [[=S=]]* [[=T=]]* [[=U=]]* [[=V=]]* [[=W=]]* [[=X=]]* [[=Y=]]* [[=Z=]]*/e
+x/ [[=a=]]* [[=b=]]* [[=c=]]* [[=d=]]* [[=e=]]* [[=f=]]* [[=g=]]* [[=h=]]* [[=i=]]* [[=j=]]* [[=k=]]* [[=l=]]* [[=m=]]* [[=n=]]* [[=o=]]* [[=p=]]* [[=q=]]* [[=r=]]* [[=s=]]* [[=t=]]* [[=u=]]* [[=v=]]* [[=w=]]* [[=x=]]* [[=y=]]* [[=z=]]*/e
+x:" Test backwards search from a multi-byte char
+/x
+x?.
+x:let @w=':%s#comb[i]nations#œ̄ṣ́m̥̄ᾱ̆́#g'
+:@w
+:?^1?,$w! test.out
 :e! test.out
 G:put =matchstr(\"אבגד\", \".\", 0, 2) " ב
 :put =matchstr(\"אבגד\", \"..\", 0, 2) " בג
@@ -53,3 +60,7 @@
 e y
 f z
 g a啷bb
+h AÀÁÂÃÄÅĀĂĄǍǞǠẢ BḂḆ CÇĆĈĊČ DĎĐḊḎḐ EÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÌÍÎÏĨĪĬĮİǏỈ JĴ KĶǨḰḴ LĹĻĽĿŁḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎŐƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ VṼ WŴẀẂẄẆ XẊẌ YÝŶŸẎỲỶỸ ZŹŻŽƵẐẔ
+i aàáâãäåāăąǎǟǡả bḃḇ cçćĉċč dďđḋḏḑ eèéêëēĕėęěẻẽ fḟ gĝğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįǐỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṁ nñńņňŉṅṉ oòóôõöøōŏőơǒǫǭỏ pṕṗ q rŕŗřṙṟ sśŝşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vṽ wŵẁẃẅẇẘ xẋẍ yýÿŷẏẙỳỷỹ zźżžƶẑẕ
+j 0123❤x
+k combinations
diff -Naur vim73.orig/src/testdir/test44.ok vim73/src/testdir/test44.ok
--- vim73.orig/src/testdir/test44.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test44.ok	2013-08-04 19:09:11.193942105 +0000
@@ -14,6 +14,10 @@
 e y
 f z
 g abb
+h AÀÁÂÃÄÅĀĂĄǍǞǠẢ BḂḆ CÇĆĈĊČ DĎĐḊḎḐ EÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÌÍÎÏĨĪĬĮİǏỈ JĴ KĶǨḰḴ LĹĻĽĿŁḺ MḾṀ NÑŃŅŇṄṈ OÒÓÔÕÖØŌŎŐƠǑǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ VṼ WŴẀẂẄẆ XẊẌ YÝŶŸẎỲỶỸ ZŹŻŽƵẐ
+i aàáâãäåāăąǎǟǡả bḃḇ cçćĉċč dďđḋḏḑ eèéêëēĕėęěẻẽ fḟ gĝğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįǐỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṁ nñńņňŉṅṉ oòóôõöøōŏőơǒǫǭỏ pṕṗ q rŕŗřṙṟ sśŝşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vṽ wŵẁẃẅẇẘ xẋẍ yýÿŷẏẙỳỷỹ zźżžƶẑ
+j 012❤
+k œ̄ṣ́m̥̄ᾱ̆́
 ב
 בג
 א
diff -Naur vim73.orig/src/testdir/test47.in vim73/src/testdir/test47.in
--- vim73.orig/src/testdir/test47.in	2010-07-25 11:39:45.000000000 +0000
+++ vim73/src/testdir/test47.in	2013-08-04 19:09:11.200608751 +0000
@@ -36,7 +36,22 @@
 :call append("$", two)
 :call append("$", three)
 :$-2,$w! test.out
-:unlet one two three
+:" Test that diffing shows correct filler lines
+:diffoff!
+:windo :bw!
+:enew
+:put =range(4,10)
+:1d _
+:vnew
+:put =range(1,10)
+:1d _
+:windo :diffthis
+:wincmd h
+:let w0=line('w0')
+:enew
+:put =w0
+:.w >> test.out
+:unlet! one two three w0
 :qa!
 ENDTEST
 
diff -Naur vim73.orig/src/testdir/test47.ok vim73/src/testdir/test47.ok
--- vim73.orig/src/testdir/test47.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test47.ok	2013-08-04 19:09:11.200608751 +0000
@@ -1,3 +1,4 @@
 2-4-5-6-8-9
 1-2-4-5-8
 2-3-4-5-6-7-8
+1
diff -Naur vim73.orig/src/testdir/test48.in vim73/src/testdir/test48.in
--- vim73.orig/src/testdir/test48.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test48.in	2013-08-04 19:09:11.200608751 +0000
@@ -54,8 +54,12 @@
 ^O3li4li4li   <-- should show the name of a noted text editor
 ^o4li4li4li   <-- and its version number-dd
 :"
+:" Test for yanking and pasting using the small delete register
+gg/^foo
+dewve"-p
 :wq! test.out
 ENDTEST
+foo, bar
 keyword keyw
 all your base are belong to us
 1 2 3 4 5 6
diff -Naur vim73.orig/src/testdir/test48.ok vim73/src/testdir/test48.ok
--- vim73.orig/src/testdir/test48.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test48.ok	2013-08-04 19:09:11.203942074 +0000
@@ -1,3 +1,4 @@
+, foo
 keyword keyword
 all your base 
 are belong to vim
diff -Naur vim73.orig/src/testdir/test49.ok vim73/src/testdir/test49.ok
--- vim73.orig/src/testdir/test49.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test49.ok	2013-08-04 19:09:11.203942074 +0000
@@ -85,8 +85,15 @@
 *** Test  83: OK (2835)
 *** Test  84: OK (934782101)
 *** Test  85: OK (198689)
---- Test  86: All tests were run with throwing exceptions on error.
+--- Test  86: No Crash for vimgrep on BufUnload
+*** Test  86: OK (0)
+--- Test  87: 3
+--- Test  87: 5
+--- Test  87: abcdefghijk
+--- Test  87: Successfully executed funcref Add2
+*** Test  87: OK (0)
+--- Test  88: All tests were run with throwing exceptions on error.
 	      The $VIMNOERRTHROW control is not configured.
---- Test  86: All tests were run with throwing exceptions on interrupt.
+--- Test  88: All tests were run with throwing exceptions on interrupt.
 	      The $VIMNOINTTHROW control is not configured.
-*** Test  86: OK (50443995)
+*** Test  88: OK (50443995)
diff -Naur vim73.orig/src/testdir/test49.vim vim73/src/testdir/test49.vim
--- vim73.orig/src/testdir/test49.vim	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test49.vim	2013-08-04 19:09:11.210608721 +0000
@@ -1,6 +1,6 @@
 " Vim script language tests
 " Author:	Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
-" Last Change:	2006 Apr 28
+" Last Change:	2013 Jun 06
 
 "-------------------------------------------------------------------------------
 " Test environment							    {{{1
@@ -8711,7 +8711,7 @@
 		endif
 	    else
 		if cmd == "let"
-		    let match = MATCH(0, thrmsg, 'E106', "Unknown variable")
+		    let match = MATCH(0, thrmsg, 'E121', "Undefined variable")
 		elseif cmd == "unlet"
 		    let match = MATCH(0, thrmsg, 'E108', "No such variable")
 		endif
@@ -9603,9 +9603,59 @@
 
 Xcheck 198689
 
+"-------------------------------------------------------------------------------
+" Test 86:  setloclist crash						    {{{1
+"
+"	    Executing a setloclist() on BufUnload shouldn't crash Vim
+"-------------------------------------------------------------------------------
+
+func F
+    au BufUnload * :call setloclist(0, [{'bufnr':1, 'lnum':1, 'col':1, 'text': 'tango down'}])
+
+    :lvimgrep /.*/ *.mak
+endfunc
+
+XpathINIT
+
+ExecAsScript F
+
+delfunction F
+Xout  "No Crash for vimgrep on BufUnload"
+Xcheck 0 
+
+"-------------------------------------------------------------------------------
+" Test 87   using (expr) ? funcref : funcref				    {{{1
+"
+"	    Vim needs to correctly parse the funcref and even when it does
+"	    not execute the funcref, it needs to consume the trailing ()
+"-------------------------------------------------------------------------------
+
+XpathINIT
+
+func Add2(x1, x2)
+    return a:x1 + a:x2
+endfu
+
+func GetStr()
+    return "abcdefghijklmnopqrstuvwxyp"
+endfu
+
+echo function('Add2')(2,3)
+
+Xout 1 ? function('Add2')(1,2) : function('Add2')(2,3)
+Xout 0 ? function('Add2')(1,2) : function('Add2')(2,3)
+" Make sure, GetStr() still works.
+Xout GetStr()[0:10]
+
+
+delfunction GetStr
+delfunction Add2
+Xout  "Successfully executed funcref Add2"
+
+Xcheck 0 
 
 "-------------------------------------------------------------------------------
-" Test 86:  $VIMNOERRTHROW and $VIMNOINTTHROW support			    {{{1
+" Test 88:  $VIMNOERRTHROW and $VIMNOINTTHROW support			    {{{1
 "
 "	    It is possible to configure Vim for throwing exceptions on error
 "	    or interrupt, controlled by variables $VIMNOERRTHROW and
diff -Naur vim73.orig/src/testdir/test50.in vim73/src/testdir/test50.in
--- vim73.orig/src/testdir/test50.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test50.in	2013-08-04 19:09:11.213942044 +0000
@@ -33,7 +33,7 @@
 	" This could change for CygWin to //cygdrive/c
 	let dir1='c:/x.x.y'
 	if filereadable(dir1) || isdirectory(dir1)
-		call confirm( "'".dir1."' exists, cannot run test" )
+		echo "FATAL: '".dir1."' exists, cannot run test"
 		return
 	endif
 	let file1=dir1.'/zz.y.txt'
@@ -41,13 +41,18 @@
 	let dir2=dir1.'/VimIsTheGreatestSinceSlicedBread'
 	let file2=dir2.'/z.txt'
 	let nofile2=dir2.'/zz.txt'
-	let resdir1='c:/XX2235~1.Y'
+	call MakeDir( dir1 )
+	let resdir1 = substitute(fnamemodify(dir1, ':p:8'), '\\$', '', '')
+	if resdir1 !~ '\V\^c:/XX\x\x\x\x~1.Y\$'
+		echo "FATAL: unexpected short name: " . resdir1
+		echo "INFO: please report your OS to vim-dev"
+		return
+	endif
 	let resfile1=resdir1.'/ZZY~1.TXT'
 	let resnofile1=resdir1.'/z.y.txt'
 	let resdir2=resdir1.'/VIMIST~1'
 	let resfile2=resdir2.'/z.txt'
 	let resnofile2=resdir2.'/zz.txt'
-	call MakeDir( dir1 )
 	call MakeDir( dir2 )
 	call MakeFile( file1 )
 	call MakeFile( file2 )
diff -Naur vim73.orig/src/testdir/test53.in vim73/src/testdir/test53.in
--- vim73.orig/src/testdir/test53.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test53.in	2013-08-04 19:09:11.217275368 +0000
@@ -28,6 +28,24 @@
 :put =matchstr(\"abcd\", \".\", 0, -1) " a
 :put =match(\"abcd\", \".\", 0, 5) " -1
 :put =match(\"abcd\", \".\", 0, -1) " 0
+/^foobar
+gncsearchmatch/one\_s*two\_s
+:1
+gnd
+/[a]bcdx
+:1
+2gnd/join
+/$
+0gnd
+/\>\zs
+0gnd/^
+gnd$h/\zs
+gnd/[u]niquepattern/s
+vlgnd
+/mother
+:set selection=exclusive
+$cgNmongoose/i
+cgnj
 :/^start:/,/^end:/wq! test.out
 ENDTEST
 
@@ -45,4 +63,16 @@
 -<b>asdf<i>Xasdf</i>asdf</b>-
 -<b>asdX<i>as<b />df</i>asdf</b>-
 </begin>
+SEARCH:
+foobar
+one
+two
+abcdx | abcdx | abcdx
+join 
+lines
+zero width pattern
+delete first and last chars
+uniquepattern uniquepattern
+my very excellent mother just served us nachos
+for (i=0; i<=10; i++)
 end:
diff -Naur vim73.orig/src/testdir/test53.ok vim73/src/testdir/test53.ok
--- vim73.orig/src/testdir/test53.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test53.ok	2013-08-04 19:09:11.220608691 +0000
@@ -18,4 +18,13 @@
 a
 -1
 0
+SEARCH:
+searchmatch
+abcdx |  | abcdx
+join lines
+zerowidth pattern
+elete first and last char
+ uniquepattern
+my very excellent mongoose just served us nachos
+for (j=0; i<=10; i++)
 end:
diff -Naur vim73.orig/src/testdir/test55.in vim73/src/testdir/test55.in
--- vim73.orig/src/testdir/test55.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test55.in	2013-08-04 19:09:11.223942014 +0000
@@ -3,6 +3,7 @@
 STARTTEST
 :so small.vim
 :fun Test(...)
+:lang C
 :" Creating List directly with different types
 :let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},]
 :$put =string(l)
@@ -342,13 +343,52 @@
 :$put =(d == d)
 :$put =(l != deepcopy(l))
 :$put =(d != deepcopy(d))
+:"
+:" compare complex recursively linked list and dict
+:let l = []
+:call add(l, l)
+:let dict4 = {"l": l}
+:call add(dict4.l, dict4)
+:let lcopy = deepcopy(l)
+:let dict4copy = deepcopy(dict4)
+:$put =(l == lcopy)
+:$put =(dict4 == dict4copy)
+:"
+:" Pass the same List to extend()
+:let l = [1, 2, 3, 4, 5]
+:call extend(l, l)
+:$put =string(l)
+:"
+:" Pass the same Dict to extend()
+:let d = { 'a': {'b': 'B'}}
+:call extend(d, d)
+:$put =string(d)
+:"
+:" Pass the same Dict to extend() with "error"
+:try
+:  call extend(d, d, "error")
+:catch
+:  $put =v:exception[:15] . v:exception[-1:-1]
+:endtry
+:$put =string(d)
 :endfun
+:"
 :call Test(1, 2, [3, 4], {5: 6})  " This may take a while
 :"
 :delfunc Test
 :unlet dict
 :call garbagecollect(1)
 :"
+:" test for patch 7.3.637
+:let a = 'No error caught'
+:try|foldopen|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
+o=a:"
+:lang C
+:redir => a
+:try|foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
+:redir END
+o=a:"
+:"
 :/^start:/,$wq! test.out
 ENDTEST
 
diff -Naur vim73.orig/src/testdir/test55.ok vim73/src/testdir/test55.ok
--- vim73.orig/src/testdir/test55.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test55.ok	2013-08-04 19:09:11.223942014 +0000
@@ -109,3 +109,15 @@
 1
 0
 0
+1
+1
+[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
+{'a': {'b': 'B'}}
+Vim(call):E737: a
+{'a': {'b': 'B'}}
+Vim(foldopen):E490:
+
+
+Error detected while processing :
+E492: Not an editor command: foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
+
diff -Naur vim73.orig/src/testdir/test57.in vim73/src/testdir/test57.in
--- vim73.orig/src/testdir/test57.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test57.in	2013-08-04 19:09:11.227275338 +0000
@@ -53,15 +53,19 @@
 t02: numeric
 abc
 ab
-a
 a321
 a123
 a122
+a
+x-22
 b321
 b123
+
 c123d
+-24
  123b
 c321d
+0
 b322b
 b321
 b321b
diff -Naur vim73.orig/src/testdir/test57.ok vim73/src/testdir/test57.ok
--- vim73.orig/src/testdir/test57.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test57.ok	2013-08-04 19:09:11.230608661 +0000
@@ -21,6 +21,10 @@
 a
 
 
+
+-24
+x-22
+0
 a122
 a123
 b123
diff -Naur vim73.orig/src/testdir/test61.in vim73/src/testdir/test61.in
--- vim73.orig/src/testdir/test61.in	2010-06-27 03:07:58.000000000 +0000
+++ vim73/src/testdir/test61.in	2013-08-04 19:09:11.240608631 +0000
@@ -4,6 +4,10 @@
 Also tests :earlier and :later.
 
 STARTTEST
+:echo undotree().entries
+ENDTEST
+
+STARTTEST
 :" Delete three characters and undo
 Gx:set ul=100
 x:set ul=100
@@ -80,6 +84,26 @@
 ggO---:0put b
 ggO---:0put a
 ggO---:w >>test.out
+:so small.vim
+:set nocp viminfo+=nviminfo
+:enew!
+oa
+:set ul=100
+ob
+:set ul=100
+o1a2=setline('.','1234')
+
+uu:"
+oc
+:set ul=100
+o1a2=setline('.','1234')
+
+u:"
+od
+:set ul=100
+o1a2=string(123)
+u:"
+:%w >>test.out
 :qa!
 ENDTEST
 
diff -Naur vim73.orig/src/testdir/test61.ok vim73/src/testdir/test61.ok
--- vim73.orig/src/testdir/test61.ok	2010-06-27 01:45:43.000000000 +0000
+++ vim73/src/testdir/test61.ok	2013-08-04 19:09:11.243941954 +0000
@@ -41,3 +41,9 @@
 two
 two
 three
+
+a
+b
+c
+12
+d
diff -Naur vim73.orig/src/testdir/test62.in vim73/src/testdir/test62.in
--- vim73.orig/src/testdir/test62.in	2010-05-31 19:22:55.000000000 +0000
+++ vim73/src/testdir/test62.in	2013-08-04 19:09:11.243941954 +0000
@@ -49,6 +49,139 @@
 :tabclose
 :call append(line('$'), test_status)
 :"
+:if has('gui') || has('clientserver')
+:" Test for ":tab drop exist-file" to keep current window.
+:sp test1
+:tab drop test1
+:let test_status = 'tab drop 1: fail'
+:if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1
+:    let test_status = 'tab drop 1: pass'
+:endif
+:close
+:call append(line('$'), test_status)
+:"
+:"
+:" Test for ":tab drop new-file" to keep current window of tabpage 1.
+:split
+:tab drop newfile
+:let test_status = 'tab drop 2: fail'
+:if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1
+:    let test_status = 'tab drop 2: pass'
+:endif
+:tabclose
+:q
+:call append(line('$'), test_status)
+:"
+:"
+:" Test for ":tab drop multi-opend-file" to keep current tabpage and window.
+:new test1
+:tabnew
+:new test1
+:tab drop test1
+:let test_status = 'tab drop 3: fail'
+:if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1
+:    let test_status = 'tab drop 3: pass'
+:endif
+:tabclose
+:q
+:call append(line('$'), test_status)
+:else
+:" :drop not supported
+:call append(line('$'), 'tab drop 1: pass')
+:call append(line('$'), 'tab drop 2: pass')
+:call append(line('$'), 'tab drop 3: pass')
+:endif
+:"
+:"
+:for i in range(9) | tabnew | endfor
+1gt
+Go=tabpagenr()
+:tabmove 5
+i=tabpagenr()
+:tabmove -2
+i=tabpagenr()
+:tabmove +4
+i=tabpagenr()
+:tabmove
+i=tabpagenr()
+:tabmove -20
+i=tabpagenr()
+:tabmove +20
+i=tabpagenr()
+:3tabmove
+i=tabpagenr()
+:7tabmove 5
+i=tabpagenr()
+:let a='No error caught.'
+:try
+:tabmove foo
+:catch E474
+:let a='E474 caught.'
+:endtry
+i=a
+:"
+:" Test autocommands
+:tabonly!
+:let g:r=[]
+:command -nargs=1 -bar C :call add(g:r, '=== ' . <q-args> . ' ===')|<args>
+:function Test()
+    let hasau=has('autocmd')
+    if hasau
+        autocmd TabEnter * :call add(g:r, 'TabEnter')
+        autocmd WinEnter * :call add(g:r, 'WinEnter')
+        autocmd BufEnter * :call add(g:r, 'BufEnter')
+        autocmd TabLeave * :call add(g:r, 'TabLeave')
+        autocmd WinLeave * :call add(g:r, 'WinLeave')
+        autocmd BufLeave * :call add(g:r, 'BufLeave')
+    endif
+    let t:a='a'
+    C tab split
+    if !hasau
+        let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter']
+    endif
+    let t:a='b'
+    C tabnew
+    if !hasau
+        let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter']
+    endif
+    let t:a='c'
+    call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
+    C call map(range(1, tabpagenr('$')), 'settabvar(v:val, "a", v:val*2)')
+    call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
+    let w:a='a'
+    C vsplit
+    if !hasau
+        let g:r+=['WinLeave', 'WinEnter']
+    endif
+    let w:a='a'
+    let tabn=tabpagenr()
+    let winr=range(1, winnr('$'))
+    C tabnext 1
+    if !hasau
+        let g:r+=['BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter']
+    endif
+    call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
+    C call map(copy(winr), 'settabwinvar('.tabn.', v:val, "a", v:val*2)')
+    call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
+    if hasau
+        augroup TabDestructive
+            autocmd TabEnter * :C tabnext 2 | C tabclose 3
+        augroup END
+        C tabnext 3
+        let g:r+=[tabpagenr().'/'.tabpagenr('$')]
+        autocmd! TabDestructive TabEnter
+        C tabnew
+        C tabnext 1
+        autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
+        C tabnext 3
+        let g:r+=[tabpagenr().'/'.tabpagenr('$')]
+    else
+        let g:r+=["=== tabnext 3 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","=== tabclose 3 ===","2/2","=== tabnew ===","WinLeave","TabLeave","WinEnter","TabEnter","BufLeave","BufEnter","=== tabnext 1 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","BufEnter","=== tabnext 3 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","=== tabclose 3 ===","BufEnter","=== tabclose 3 ===","2/2",]
+    endif
+endfunction
+:call Test()
+:$ put =g:r
+:"
 :"
 :/^Results/,$w! test.out
 :qa!
diff -Naur vim73.orig/src/testdir/test62.ok vim73/src/testdir/test62.ok
--- vim73.orig/src/testdir/test62.ok	2010-05-31 19:22:55.000000000 +0000
+++ vim73/src/testdir/test62.ok	2013-08-04 19:09:11.243941954 +0000
@@ -5,3 +5,84 @@
 this is tab page 4
 gettabvar: pass
 settabvar: pass
+tab drop 1: pass
+tab drop 2: pass
+tab drop 3: pass
+1
+6
+4
+8
+10
+1
+10
+4
+6
+E474 caught.
+=== tab split ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnew ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufLeave
+BufEnter
+a b c
+=== call map(range(1, tabpagenr('$')), 'settabvar(v:val, ===
+a b c
+=== vsplit ===
+WinLeave
+WinEnter
+=== tabnext 1 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufEnter
+a a
+=== call map(copy(winr), 'settabwinvar('.tabn.', v:val, ===
+a a
+=== tabnext 3 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+=== tabclose 3 ===
+2/2
+=== tabnew ===
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufLeave
+BufEnter
+=== tabnext 1 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+BufEnter
+=== tabnext 3 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+BufLeave
+WinLeave
+TabLeave
+WinEnter
+TabEnter
+=== tabnext 2 ===
+=== tabclose 3 ===
+BufEnter
+=== tabclose 3 ===
+2/2
diff -Naur vim73.orig/src/testdir/test64.in vim73/src/testdir/test64.in
--- vim73.orig/src/testdir/test64.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test64.in	2013-08-04 19:09:11.250608601 +0000
@@ -1,4 +1,5 @@
-Test for regexp patterns.
+Test for regexp patterns without multi-byte support.
+See test95 for multi-byte tests.
 
 A pattern that gives the expected result produces OK, so that we know it was
 actually tried.
@@ -14,154 +15,589 @@
 :"    etc.
 :"  When there is no match use only the first two items.
 :let tl = []
-:call add(tl, ['ab', 'aab', 'ab'])
-:call add(tl, ['b', 'abcdef', 'b'])
-:call add(tl, ['bc*', 'abccccdef', 'bcccc'])
-:call add(tl, ['bc\{-}', 'abccccdef', 'b'])
-:call add(tl, ['bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd'])
-:call add(tl, ['bc*', 'abbdef', 'b'])
-:call add(tl, ['c*', 'ccc', 'ccc'])
-:call add(tl, ['bc*', 'abdef', 'b'])
-:call add(tl, ['c*', 'abdef', ''])
-:call add(tl, ['bc\+', 'abccccdef', 'bcccc'])
-:call add(tl, ['bc\+', 'abdef']) "no match
+:"
+:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+:"""" Previously written tests """"""""""""""""""""""""""""""""
+:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+:"
+:call add(tl, [2, 'ab', 'aab', 'ab'])
+:call add(tl, [2, 'b', 'abcdef', 'b'])
+:call add(tl, [2, 'bc*', 'abccccdef', 'bcccc'])
+:call add(tl, [2, 'bc\{-}', 'abccccdef', 'b'])
+:call add(tl, [2, 'bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd'])
+:call add(tl, [2, 'bc*', 'abbdef', 'b'])
+:call add(tl, [2, 'c*', 'ccc', 'ccc'])
+:call add(tl, [2, 'bc*', 'abdef', 'b'])
+:call add(tl, [2, 'c*', 'abdef', ''])
+:call add(tl, [2, 'bc\+', 'abccccdef', 'bcccc'])
+:call add(tl, [2, 'bc\+', 'abdef']) "no match
 :"
 :"operator \|
-:call add(tl, ['a\|ab', 'cabd', 'a']) "alternation is ordered
+:call add(tl, [2, 'a\|ab', 'cabd', 'a']) "alternation is ordered
 :"
-:call add(tl, ['c\?', 'ccb', 'c'])
-:call add(tl, ['bc\?', 'abd', 'b'])
-:call add(tl, ['bc\?', 'abccd', 'bc'])
-:"
-:call add(tl, ['\va{1}', 'ab', 'a'])
-:"
-:call add(tl, ['\va{2}', 'aa', 'aa'])
-:call add(tl, ['\va{2}', 'caad', 'aa'])
-:call add(tl, ['\va{2}', 'aba'])
-:call add(tl, ['\va{2}', 'ab'])
-:call add(tl, ['\va{2}', 'abaa', 'aa'])
-:call add(tl, ['\va{2}', 'aaa', 'aa'])
-:"
-:call add(tl, ['\vb{1}', 'abca', 'b'])
-:call add(tl, ['\vba{2}', 'abaa', 'baa'])
-:call add(tl, ['\vba{3}', 'aabaac'])
-:"
-:call add(tl, ['\v(ab){1}', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(ab){1}', 'dabc', 'ab', 'ab'])
-:call add(tl, ['\v(ab){1}', 'acb'])
-:"
-:call add(tl, ['\v(ab){0,2}', 'acb', "", ""])
-:call add(tl, ['\v(ab){0,2}', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(ab){1,2}', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(ab){1,2}', 'ababc', 'abab', 'ab'])
-:call add(tl, ['\v(ab){2,4}', 'ababcab', 'abab', 'ab'])
-:call add(tl, ['\v(ab){2,4}', 'abcababa', 'abab', 'ab'])
-:"
-:call add(tl, ['\v(ab){2}', 'abab', 'abab', 'ab'])
-:call add(tl, ['\v(ab){2}', 'cdababe', 'abab', 'ab'])
-:call add(tl, ['\v(ab){2}', 'abac'])
-:call add(tl, ['\v(ab){2}', 'abacabab', 'abab', 'ab'])
-:call add(tl, ['\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab'])
-:call add(tl, ['\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab'])
-:"
-:call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a'])
-:call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa'])
-:call add(tl, ['\v(a{2}){1}', 'aaac', 'aa', 'aa'])
-:call add(tl, ['\v(a{2}){1}', 'daaac', 'aa', 'aa'])
-:call add(tl, ['\v(a{1}){2}', 'daaac', 'aa', 'a'])
-:call add(tl, ['\v(a{1}){2}', 'aaa', 'aa', 'a'])
-:call add(tl, ['\v(a{2})+', 'adaac', 'aa', 'aa'])
-:call add(tl, ['\v(a{2})+', 'aa', 'aa', 'aa'])
-:call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa'])
-:call add(tl, ['\v(a{1}){2}', 'aa', 'aa', 'a'])
-:call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a'])
-:call add(tl, ['\v(a{2}){2}', 'aaaa', 'aaaa', 'aa'])
-:call add(tl, ['\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa'])
-:"
-:call add(tl, ['\v(a+){2}', 'dadaac', 'aa', 'a'])
-:call add(tl, ['\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa'])
-:"
-:call add(tl, ['\v(a{1,2}){2}', 'daaac', 'aaa', 'a'])
-:call add(tl, ['\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a'])
-:call add(tl, ['\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa'])
-:call add(tl, ['\v(a{1,3}){3}', 'daac'])
-:call add(tl, ['\v(a{1,2}){2}', 'dac'])
-:call add(tl, ['\v(a+)+', 'daac', 'aa', 'aa'])
-:call add(tl, ['\v(a+)+', 'aaa', 'aaa', 'aaa'])
-:call add(tl, ['\v(a+){1,2}', 'aaa', 'aaa', 'aaa'])
-:call add(tl, ['\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a'])
-:call add(tl, ['\v(a{3})+', 'daaaac', 'aaa', 'aaa'])
-:call add(tl, ['\v(a|b|c)+', 'aacb', 'aacb', 'b'])
-:call add(tl, ['\v(a|b|c){2}', 'abcb', 'ab', 'b'])
-:call add(tl, ['\v(abc){2}', 'abcabd', ])
-:call add(tl, ['\v(abc){2}', 'abdabcabc','abcabc', 'abc'])
-:"
-:call add(tl, ['a*', 'cc', ''])
-:call add(tl, ['\v(a*)+', 'cc', ''])
-:call add(tl, ['\v((ab)+)+', 'ab', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab'])
-:call add(tl, ['\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab'])
-:call add(tl, ['\v(a{0,2})+', 'cc', ''])
-:call add(tl, ['\v(a*)+', '', ''])
-:call add(tl, ['\v((a*)+)+', '', ''])
-:call add(tl, ['\v((ab)*)+', '', ''])
-:call add(tl, ['\va{1,3}', 'aab', 'aa'])
-:call add(tl, ['\va{2,3}', 'abaa', 'aa'])
-:"
-:call add(tl, ['\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
-:call add(tl, ['\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb'])
-:call add(tl, ['\va{2}|b{2}', 'abab'])
-:call add(tl, ['\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a'])
-:call add(tl, ['\vab{2,3}c', 'aabbccccccccccccc', 'abbc'])
-:call add(tl, ['\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc'])
-:call add(tl, ['\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde'])
-:call add(tl, ['\va(bc){2}d', 'aabcbfbc' ])
-:call add(tl, ['\va*a{2}', 'a', ])
-:call add(tl, ['\va*a{2}', 'aa', 'aa' ])
-:call add(tl, ['\va*a{2}', 'aaa', 'aaa' ])
-:call add(tl, ['\va*a{2}', 'bbbabcc', ])
-:call add(tl, ['\va*b*|a*c*', 'a', 'a'])
-:call add(tl, ['\va{1}b{1}|a{1}b{1}', ''])
+:call add(tl, [2, 'c\?', 'ccb', 'c'])
+:call add(tl, [2, 'bc\?', 'abd', 'b'])
+:call add(tl, [2, 'bc\?', 'abccd', 'bc'])
+:"
+:call add(tl, [2, '\va{1}', 'ab', 'a'])
+:"
+:call add(tl, [2, '\va{2}', 'aa', 'aa'])
+:call add(tl, [2, '\va{2}', 'caad', 'aa'])
+:call add(tl, [2, '\va{2}', 'aba'])
+:call add(tl, [2, '\va{2}', 'ab'])
+:call add(tl, [2, '\va{2}', 'abaa', 'aa'])
+:call add(tl, [2, '\va{2}', 'aaa', 'aa'])
+:"
+:call add(tl, [2, '\vb{1}', 'abca', 'b'])
+:call add(tl, [2, '\vba{2}', 'abaa', 'baa'])
+:call add(tl, [2, '\vba{3}', 'aabaac'])
+:"
+:call add(tl, [2, '\v(ab){1}', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(ab){1}', 'dabc', 'ab', 'ab'])
+:call add(tl, [2, '\v(ab){1}', 'acb'])
+:"
+:call add(tl, [2, '\v(ab){0,2}', 'acb', "", ""])
+:call add(tl, [2, '\v(ab){0,2}', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(ab){1,2}', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(ab){1,2}', 'ababc', 'abab', 'ab'])
+:call add(tl, [2, '\v(ab){2,4}', 'ababcab', 'abab', 'ab'])
+:call add(tl, [2, '\v(ab){2,4}', 'abcababa', 'abab', 'ab'])
+:"
+:call add(tl, [2, '\v(ab){2}', 'abab', 'abab', 'ab'])
+:call add(tl, [2, '\v(ab){2}', 'cdababe', 'abab', 'ab'])
+:call add(tl, [2, '\v(ab){2}', 'abac'])
+:call add(tl, [2, '\v(ab){2}', 'abacabab', 'abab', 'ab'])
+:call add(tl, [2, '\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab'])
+:call add(tl, [2, '\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab'])
+:"
+:call add(tl, [2, '\v(a{1}){1}', 'a', 'a', 'a'])
+:call add(tl, [2, '\v(a{2}){1}', 'aa', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{2}){1}', 'aaac', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{2}){1}', 'daaac', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{1}){2}', 'daaac', 'aa', 'a'])
+:call add(tl, [2, '\v(a{1}){2}', 'aaa', 'aa', 'a'])
+:call add(tl, [2, '\v(a{2})+', 'adaac', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{2})+', 'aa', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{2}){1}', 'aa', 'aa', 'aa'])
+:call add(tl, [2, '\v(a{1}){2}', 'aa', 'aa', 'a'])
+:call add(tl, [2, '\v(a{1}){1}', 'a', 'a', 'a'])
+:call add(tl, [2, '\v(a{2}){2}', 'aaaa', 'aaaa', 'aa'])
+:call add(tl, [2, '\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa'])
+:"
+:call add(tl, [2, '\v(a+){2}', 'dadaac', 'aa', 'a'])
+:call add(tl, [2, '\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa'])
+:"
+:call add(tl, [2, '\v(a{1,2}){2}', 'daaac', 'aaa', 'a'])
+:call add(tl, [2, '\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a'])
+:call add(tl, [2, '\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa'])
+:call add(tl, [2, '\v(a{1,3}){3}', 'daac'])
+:call add(tl, [2, '\v(a{1,2}){2}', 'dac'])
+:call add(tl, [2, '\v(a+)+', 'daac', 'aa', 'aa'])
+:call add(tl, [2, '\v(a+)+', 'aaa', 'aaa', 'aaa'])
+:call add(tl, [2, '\v(a+){1,2}', 'aaa', 'aaa', 'aaa'])
+:call add(tl, [2, '\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a'])
+:call add(tl, [2, '\v(a{3})+', 'daaaac', 'aaa', 'aaa'])
+:call add(tl, [2, '\v(a|b|c)+', 'aacb', 'aacb', 'b'])
+:call add(tl, [2, '\v(a|b|c){2}', 'abcb', 'ab', 'b'])
+:call add(tl, [2, '\v(abc){2}', 'abcabd', ])
+:call add(tl, [2, '\v(abc){2}', 'abdabcabc','abcabc', 'abc'])
+:"
+:call add(tl, [2, 'a*', 'cc', ''])
+:call add(tl, [2, '\v(a*)+', 'cc', ''])
+:call add(tl, [2, '\v((ab)+)+', 'ab', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab'])
+:call add(tl, [2, '\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab'])
+:call add(tl, [2, '\v(a{0,2})+', 'cc', ''])
+:call add(tl, [2, '\v(a*)+', '', ''])
+:call add(tl, [2, '\v((a*)+)+', '', ''])
+:call add(tl, [2, '\v((ab)*)+', '', ''])
+:call add(tl, [2, '\va{1,3}', 'aab', 'aa'])
+:call add(tl, [2, '\va{2,3}', 'abaa', 'aa'])
+:"
+:call add(tl, [2, '\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
+:call add(tl, [2, '\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb'])
+:call add(tl, [2, '\va{2}|b{2}', 'abab'])
+:call add(tl, [2, '\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a'])
+:call add(tl, [2, '\vab{2,3}c', 'aabbccccccccccccc', 'abbc'])
+:call add(tl, [2, '\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc'])
+:call add(tl, [2, '\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde'])
+:call add(tl, [2, '\va(bc){2}d', 'aabcbfbc' ])
+:call add(tl, [2, '\va*a{2}', 'a', ])
+:call add(tl, [2, '\va*a{2}', 'aa', 'aa' ])
+:call add(tl, [2, '\va*a{2}', 'aaa', 'aaa' ])
+:call add(tl, [2, '\va*a{2}', 'bbbabcc', ])
+:call add(tl, [2, '\va*b*|a*c*', 'a', 'a'])
+:call add(tl, [2, '\va{1}b{1}|a{1}b{1}', ''])
 :"
 :"submatches
-:call add(tl, ['\v(a)', 'ab', 'a', 'a'])
-:call add(tl, ['\v(a)(b)', 'ab', 'ab', 'a', 'b'])
-:call add(tl, ['\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c'])
-:call add(tl, ['\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b'])
-:call add(tl, ['\v(a)|(b)', 'ab', 'a', 'a'])
+:call add(tl, [2, '\v(a)', 'ab', 'a', 'a'])
+:call add(tl, [2, '\v(a)(b)', 'ab', 'ab', 'a', 'b'])
+:call add(tl, [2, '\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c'])
+:call add(tl, [2, '\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b'])
+:call add(tl, [2, '\v(a)|(b)', 'ab', 'a', 'a'])
+:"
+:call add(tl, [2, '\v(a*)+', 'aaaa', 'aaaa', ''])
+:call add(tl, [2, 'x', 'abcdef'])
+:"
+:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+:""""" Simple tests """""""""""""""""""""""""""""""""""""""""""
+:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
+:"
+:" Search single groups
+:call add(tl, [2, 'ab', 'aab', 'ab'])
+:call add(tl, [2, 'ab', 'baced'])
+:call add(tl, [2, 'ab', '                    ab           ', 'ab'])
+:"
+:" Search multi-modifiers
+:call add(tl, [2, 'x*', 'xcd', 'x'])
+:call add(tl, [2, 'x*', 'xxxxxxxxxxxxxxxxsofijiojgf', 'xxxxxxxxxxxxxxxx'])
+:" empty match is good
+:call add(tl, [2, 'x*', 'abcdoij', ''])
+:" no match here
+:call add(tl, [2, 'x\+', 'abcdoin'])
+:call add(tl, [2, 'x\+', 'abcdeoijdfxxiuhfij', 'xx'])
+:call add(tl, [2, 'x\+', 'xxxxx', 'xxxxx'])
+:call add(tl, [2, 'x\+', 'abc x siufhiush xxxxxxxxx', 'x'])
+:call add(tl, [2, 'x\=', 'x sdfoij', 'x'])
+:call add(tl, [2, 'x\=', 'abc sfoij', '']) " empty match is good
+:call add(tl, [2, 'x\=', 'xxxxxxxxx c', 'x'])
+:call add(tl, [2, 'x\?', 'x sdfoij', 'x'])
+:" empty match is good
+:call add(tl, [2, 'x\?', 'abc sfoij', ''])
+:call add(tl, [2, 'x\?', 'xxxxxxxxxx c', 'x'])
+:"
+:call add(tl, [2, 'a\{0,0}', 'abcdfdoij', ''])
+:" same thing as 'a?'
+:call add(tl, [2, 'a\{0,1}', 'asiubid axxxaaa', 'a'])
+:" same thing as 'a\{0,1}'
+:call add(tl, [2, 'a\{1,0}', 'asiubid axxxaaa', 'a'])
+:call add(tl, [2, 'a\{3,6}', 'aa siofuh'])
+:call add(tl, [2, 'a\{3,6}', 'aaaaa asfoij afaa', 'aaaaa'])
+:call add(tl, [2, 'a\{3,6}', 'aaaaaaaa', 'aaaaaa'])
+:call add(tl, [2, 'a\{0}', 'asoiuj', ''])
+:call add(tl, [2, 'a\{2}', 'aaaa', 'aa'])
+:call add(tl, [2, 'a\{2}', 'iuash fiusahfliusah fiushfilushfi uhsaifuh askfj nasfvius afg aaaa sfiuhuhiushf', 'aa'])
+:call add(tl, [2, 'a\{2}', 'abcdefghijklmnopqrestuvwxyz1234567890'])
+:" same thing as 'a*'
+:call add(tl, [2, 'a\{0,}', 'oij sdigfusnf', ''])
+:call add(tl, [2, 'a\{0,}', 'aaaaa aa', 'aaaaa'])
+:call add(tl, [2, 'a\{2,}', 'sdfiougjdsafg'])
+:call add(tl, [2, 'a\{2,}', 'aaaaasfoij ', 'aaaaa'])
+:call add(tl, [2, 'a\{5,}', 'xxaaaaxxx '])
+:call add(tl, [2, 'a\{5,}', 'xxaaaaaxxx ', 'aaaaa'])
+:call add(tl, [2, 'a\{,0}', 'oidfguih iuhi hiu aaaa', ''])
+:call add(tl, [2, 'a\{,5}', 'abcd', 'a'])
+:call add(tl, [2, 'a\{,5}', 'aaaaaaaaaa', 'aaaaa'])
+:" leading star as normal char when \{} follows
+:call add(tl, [2, '^*\{4,}$', '***'])
+:call add(tl, [2, '^*\{4,}$', '****', '****'])
+:call add(tl, [2, '^*\{4,}$', '*****', '*****'])
+:" same thing as 'a*'
+:call add(tl, [2, 'a\{}', 'bbbcddiuhfcd', ''])
+:call add(tl, [2, 'a\{}', 'aaaaioudfh coisf jda', 'aaaa'])
+:"
+:call add(tl, [2, 'a\{-0,0}', 'abcdfdoij', ''])
+:" anti-greedy version of 'a?'
+:call add(tl, [2, 'a\{-0,1}', 'asiubid axxxaaa', ''])
+:call add(tl, [2, 'a\{-3,6}', 'aa siofuh'])
+:call add(tl, [2, 'a\{-3,6}', 'aaaaa asfoij afaa', 'aaa'])
+:call add(tl, [2, 'a\{-3,6}', 'aaaaaaaa', 'aaa'])
+:call add(tl, [2, 'a\{-0}', 'asoiuj', ''])
+:call add(tl, [2, 'a\{-2}', 'aaaa', 'aa'])
+:call add(tl, [2, 'a\{-2}', 'abcdefghijklmnopqrestuvwxyz1234567890'])
+:call add(tl, [2, 'a\{-0,}', 'oij sdigfusnf', ''])
+:call add(tl, [2, 'a\{-0,}', 'aaaaa aa', ''])
+:call add(tl, [2, 'a\{-2,}', 'sdfiougjdsafg'])
+:call add(tl, [2, 'a\{-2,}', 'aaaaasfoij ', 'aa'])
+:call add(tl, [2, 'a\{-,0}', 'oidfguih iuhi hiu aaaa', ''])
+:call add(tl, [2, 'a\{-,5}', 'abcd', ''])
+:call add(tl, [2, 'a\{-,5}', 'aaaaaaaaaa', ''])
+:" anti-greedy version of 'a*'
+:call add(tl, [2, 'a\{-}', 'bbbcddiuhfcd', ''])
+:call add(tl, [2, 'a\{-}', 'aaaaioudfh coisf jda', ''])
+:"
+:" Test groups of characters and submatches
+:call add(tl, [2, '\(abc\)*', 'abcabcabc', 'abcabcabc', 'abc'])
+:call add(tl, [2, '\(ab\)\+', 'abababaaaaa', 'ababab', 'ab'])
+:call add(tl, [2, '\(abaaaaa\)*cd', 'cd', 'cd', ''])
+:call add(tl, [2, '\(test1\)\? \(test2\)\?', 'test1 test3', 'test1 ', 'test1', ''])
+:call add(tl, [2, '\(test1\)\= \(test2\) \(test4443\)\=', ' test2 test4443 yupiiiiiiiiiii', ' test2 test4443', '', 'test2', 'test4443'])
+:call add(tl, [2, '\(\(sub1\) hello \(sub 2\)\)', 'asterix sub1 hello sub 2 obelix', 'sub1 hello sub 2', 'sub1 hello sub 2', 'sub1', 'sub 2'])
+:call add(tl, [2, '\(\(\(yyxxzz\)\)\)', 'abcdddsfiusfyyzzxxyyxxzz', 'yyxxzz', 'yyxxzz', 'yyxxzz', 'yyxxzz'])
+:call add(tl, [2, '\v((ab)+|c+)+', 'abcccaba', 'abcccab', 'ab', 'ab'])
+:call add(tl, [2, '\v((ab)|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
+:call add(tl, [2, '\v(a(c*)+b)+', 'acbababaaa', 'acbabab', 'ab', ''])
+:call add(tl, [2, '\v(a|b*)+', 'aaaa', 'aaaa', ''])
+:"
+:" Test greedy-ness and lazy-ness
+:call add(tl, [2, 'a\{-2,7}','aaaaaaaaaaaaa', 'aa'])
+:call add(tl, [2, 'a\{-2,7}x','aaaaaaaaax', 'aaaaaaax'])
+:call add(tl, [2, 'a\{2,7}','aaaaaaaaaaaaaaaaaaaa', 'aaaaaaa'])
+:call add(tl, [2, 'a\{2,7}x','aaaaaaaaax', 'aaaaaaax'])
+:call add(tl, [2, '\vx(.{-,8})yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz','ayxa','xayzxayz'])
+:call add(tl, [2, '\vx(.*)yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz', 'ayxayzxayzxa',''])
+:call add(tl, [2, '\v(a{1,2}){-2,3}','aaaaaaa','aaaa','aa'])
+:call add(tl, [2, '\v(a{-1,3})+','aa','aa','a'])
+:"
+:" Test Character classes
+:call add(tl, [2, '\d\+e\d\d','test 10e23 fd','10e23'])
+:"
+:" Test collections and character range []
+:call add(tl, [2, '\v[a]', 'abcd', 'a'])
+:call add(tl, [2, 'a[bcd]', 'abcd', 'ab'])
+:call add(tl, [2, 'a[b-d]', 'acbd', 'ac'])
+:call add(tl, [2, '[a-d][e-f][x-x]d', 'cexdxx', 'cexd'])
+:call add(tl, [2, '\v[[:alpha:]]+', 'abcdefghijklmnopqrstuvwxyz6','abcdefghijklmnopqrstuvwxyz'])
+:call add(tl, [2, '[[:alpha:]\+]', '6x8','x'])
+:call add(tl, [2, '[^abc]\+','abcabcabc'])
+:call add(tl, [2, '[^abc]','defghiasijvoinasoiunbvb','d'])
+:call add(tl, [2, '[^abc]\+','ddddddda','ddddddd'])
+:call add(tl, [2, '[^a-d]\+','aaaAAAZIHFNCddd','AAAZIHFNC'])
+:call add(tl, [2, '[a-f]*','iiiiiiii',''])
+:call add(tl, [2, '[a-f]*','abcdefgh','abcdef'])
+:call add(tl, [2, '[^a-f]\+','abcdefgh','gh'])
+:call add(tl, [2, '[a-c]\{-3,6}','abcabc','abc'])
+:call add(tl, [2, '[^[:alpha:]]\+','abcccadfoij7787ysf287yrnccdu','7787'])
+:call add(tl, [2, '[-a]', '-', '-'])
+:call add(tl, [2, '[a-]', '-', '-'])
+:call add(tl, [2, '[a-f]*\c','ABCDEFGH','ABCDEF'])
+:call add(tl, [2, '[abc][xyz]\c','-af-AF-BY--','BY'])
+:" filename regexp
+:call add(tl, [2, '[-./[:alnum:]_~]\+', 'log13.file', 'log13.file'])
+:" special chars
+:call add(tl, [2, '[\]\^\-\\]\+', '\^\\\-\---^', '\^\\\-\---^'])
+:" collation elem
+:call add(tl, [2, '[[.a.]]\+', 'aa', 'aa'])
+:" middle of regexp
+:call add(tl, [2, 'abc[0-9]*ddd', 'siuhabc ii'])
+:call add(tl, [2, 'abc[0-9]*ddd', 'adf abc44482ddd oijs', 'abc44482ddd'])
+:call add(tl, [2, '\_[0-9]\+', 'asfi9888u', '9888'])
+:call add(tl, [2, '[0-9\n]\+', 'asfi9888u', '9888'])
+:call add(tl, [2, '\_[0-9]\+', "asfi\n9888u", "\n9888"])
+:call add(tl, [2, '\_f', "  \na ", "\n"])
+:call add(tl, [2, '\_f\+', "  \na ", "\na"])
+:call add(tl, [2, '[0-9A-Za-z-_.]\+', " @0_a.A-{ ", "0_a.A-"])
+:"
+:"""" Test start/end of line, start/end of file
+:call add(tl, [2, '^a.', "a_\nb ", "a_"])
+:call add(tl, [2, '^a.', "b a \na_"])
+:call add(tl, [2, '.a$', " a\n "])
+:call add(tl, [2, '.a$', " a b\n_a", "_a"])
+:call add(tl, [2, '\%^a.', "a a\na", "a "])
+:call add(tl, [2, '\%^a', " a \na "])
+:call add(tl, [2, '.a\%$', " a\n "])
+:call add(tl, [2, '.a\%$', " a\n_a", "_a"])
+:"
+:"""" Test recognition of some character classes
+:call add(tl, [2, '[0-9]', '8', '8'])
+:call add(tl, [2, '[^0-9]', '8'])
+:call add(tl, [2, '[0-9a-fA-F]*', '0a7', '0a7'])
+:call add(tl, [2, '[^0-9A-Fa-f]\+', '0a7'])
+:call add(tl, [2, '[a-z_A-Z0-9]\+', 'aso_sfoij', 'aso_sfoij'])
+:call add(tl, [2, '[a-z]', 'a', 'a'])
+:call add(tl, [2, '[a-zA-Z]', 'a', 'a'])
+:call add(tl, [2, '[A-Z]', 'a'])
+:call add(tl, [2, '\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa'])
+:"
+:"""" Tests for \z features
+:" match ends at \ze
+:call add(tl, [2, 'xx \ze test', 'xx '])
+:call add(tl, [2, 'abc\zeend', 'oij abcend', 'abc'])
+:call add(tl, [2, 'aa\zebb\|aaxx', ' aabb ', 'aa'])
+:call add(tl, [2, 'aa\zebb\|aaxx', ' aaxx ', 'aaxx'])
+:call add(tl, [2, 'aabb\|aa\zebb', ' aabb ', 'aabb'])
+:call add(tl, [2, 'aa\zebb\|aaebb', ' aabb ', 'aa'])
+:" match starts at \zs
+:call add(tl, [2, 'abc\zsdd', 'ddabcddxyzt', 'dd'])
+:call add(tl, [2, 'aa \zsax', ' ax'])
+:call add(tl, [2, 'abc \zsmatch\ze abc', 'abc abc abc match abc abc', 'match'])
+:call add(tl, [2, '\v(a \zsif .*){2}', 'a if then a if last', 'if last', 'a if last'])
+:call add(tl, [2, '\>\zs.', 'aword. ', '.'])
+:"
+:"""" Tests for \@= and \& features
+:call add(tl, [2, 'abc\@=', 'abc', 'ab'])
+:call add(tl, [2, 'abc\@=cd', 'abcd', 'abcd'])
+:call add(tl, [2, 'abc\@=', 'ababc', 'ab'])
+:" will never match, no matter the input text
+:call add(tl, [2, 'abcd\@=e', 'abcd'])
+:" will never match
+:call add(tl, [2, 'abcd\@=e', 'any text in here ... '])
+:call add(tl, [2, '\v(abc)@=..', 'xabcd', 'ab', 'abc'])
+:call add(tl, [2, '\(.*John\)\@=.*Bob', 'here is John, and here is B'])
+:call add(tl, [2, '\(John.*\)\@=.*Bob', 'John is Bobs friend', 'John is Bob', 'John is Bobs friend'])
+:call add(tl, [2, '\<\S\+\())\)\@=', '$((i=i+1))', 'i=i+1', '))'])
+:call add(tl, [2, '.*John\&.*Bob', 'here is John, and here is B'])
+:call add(tl, [2, '.*John\&.*Bob', 'John is Bobs friend', 'John is Bob'])
+:call add(tl, [2, '\v(test1)@=.*yep', 'this is a test1, yep it is', 'test1, yep', 'test1'])
+:call add(tl, [2, 'foo\(bar\)\@!', 'foobar'])
+:call add(tl, [2, 'foo\(bar\)\@!', 'foo bar', 'foo'])
+:call add(tl, [2, 'if \(\(then\)\@!.\)*$', ' if then else'])
+:call add(tl, [2, 'if \(\(then\)\@!.\)*$', ' if else ', 'if else ', ' '])
+:call add(tl, [2, '\(foo\)\@!bar', 'foobar', 'bar'])
+:call add(tl, [2, '\(foo\)\@!...bar', 'foobar'])
+:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' bar foo '])
+:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo bar '])
+:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo xxx ', 'foo'])
+:call add(tl, [2, '[ ]\@!\p\%([ ]\@!\p\)*:', 'implicit mappings:', 'mappings:'])
+:"
+:"""" Combining different tests and features
+:call add(tl, [2, '[[:alpha:]]\{-2,6}', '787abcdiuhsasiuhb4', 'ab'])
+:call add(tl, [2, '', 'abcd', ''])
+:call add(tl, [2, '\v(())', 'any possible text', ''])
+:call add(tl, [2, '\v%(ab(xyz)c)', '   abxyzc ', 'abxyzc', 'xyz'])
+:call add(tl, [2, '\v(test|)empty', 'tesempty', 'empty', ''])
+:call add(tl, [2, '\v(a|aa)(a|aa)', 'aaa', 'aa', 'a', 'a'])
+:"
+:"""" \%u and friends
+:call add(tl, [2, '\%d32', 'yes no', ' '])
+:call add(tl, [2, '\%o40', 'yes no', ' '])
+:call add(tl, [2, '\%x20', 'yes no', ' '])
+:call add(tl, [2, '\%u0020', 'yes no', ' '])
+:call add(tl, [2, '\%U00000020', 'yes no', ' '])
+:"
+:""""" \%[abc]
+:call add(tl, [2, 'foo\%[bar]', 'fobar'])
+:call add(tl, [2, 'foo\%[bar]', 'foobar', 'foobar'])
+:call add(tl, [2, 'foo\%[bar]', 'fooxx', 'foo'])
+:call add(tl, [2, 'foo\%[bar]', 'foobxx', 'foob'])
+:call add(tl, [2, 'foo\%[bar]', 'foobaxx', 'fooba'])
+:call add(tl, [2, 'foo\%[bar]', 'foobarxx', 'foobar'])
+:call add(tl, [2, 'foo\%[bar]x', 'foobxx', 'foobx'])
+:call add(tl, [2, 'foo\%[bar]x', 'foobarxx', 'foobarx'])
+:call add(tl, [2, '\%[bar]x', 'barxx', 'barx'])
+:call add(tl, [2, '\%[bar]x', 'bxx', 'bx'])
+:call add(tl, [2, '\%[bar]x', 'xxx', 'x'])
+:call add(tl, [2, 'b\%[[ao]r]', 'bar bor', 'bar'])
+:call add(tl, [2, 'b\%[[]]r]', 'b]r bor', 'b]r'])
+:"
+:"""" Alternatives, must use first longest match
+:call add(tl, [2, 'goo\|go', 'google', 'goo'])
+:call add(tl, [2, '\<goo\|\<go', 'google', 'goo'])
+:call add(tl, [2, '\<goo\|go', 'google', 'goo'])
+:"
+:"""" Back references
+:call add(tl, [2, '\(\i\+\) \1', ' abc abc', 'abc abc', 'abc'])
+:call add(tl, [2, '\(\i\+\) \1', 'xgoo goox', 'goo goo', 'goo'])
+:call add(tl, [2, '\(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9', 'xabcddefghiabcddefghix', 'abcddefghiabcddefghi', 'a', 'b', 'c', 'dd', 'e', 'f', 'g', 'h', 'i'])
+:call add(tl, [2, '\(\d*\)a \1b', ' a b ', 'a b', ''])
+:call add(tl, [2, '^.\(.\).\_..\1.', "aaa\naaa\nb", "aaa\naaa", 'a'])
+:call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<!$', 'foo.bat/foo.com', 'foo.bat/foo.com', 'bat'])
+:call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<!$', 'foo.bat/foo.bat'])
+:call add(tl, [2, '^.*\.\(.*\)/.\+\(\1\)\@<=$', 'foo.bat/foo.bat', 'foo.bat/foo.bat', 'bat', 'bat'])
+:call add(tl, [2, '\\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}', '2013-06-27${0}', '${0}', '0'])
+:"
+:"""" Look-behind with limit
+:call add(tl, [2, '<\@<=span.', 'xxspanxx<spanyyy', 'spany'])
+:call add(tl, [2, '<\@1<=span.', 'xxspanxx<spanyyy', 'spany'])
+:call add(tl, [2, '<\@2<=span.', 'xxspanxx<spanyyy', 'spany'])
+:call add(tl, [2, '\(<<\)\@<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<'])
+:call add(tl, [2, '\(<<\)\@1<=span.', 'xxspanxxxx<spanxx<<spanyyy'])
+:call add(tl, [2, '\(<<\)\@2<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<'])
+:call add(tl, [2, '\(foo\)\@<!bar.', 'xx foobar1 xbar2 xx', 'bar2'])
+:"
+:" look-behind match in front of a zero-width item
+:call add(tl, [2, '\v\C%(<Last Changed:\s+)@<=.*$', '" test header'])
+:call add(tl, [2, '\v\C%(<Last Changed:\s+)@<=.*$', '" Last Changed: 1970', '1970'])
+:call add(tl, [2, '\(foo\)\@<=\>', 'foobar'])
+:call add(tl, [2, '\(foo\)\@<=\>', 'barfoo', '', 'foo'])
+:call add(tl, [2, '\(foo\)\@<=.*', 'foobar', 'bar', 'foo'])
+:"
+:""""" \@>
+:call add(tl, [2, '\(a*\)\@>a', 'aaaa'])
+:call add(tl, [2, '\(a*\)\@>b', 'aaab', 'aaab', 'aaa'])
+:" TODO: BT engine does not restore submatch after failure
+:call add(tl, [1, '\(a*\)\@>a\|a\+', 'aaaa', 'aaaa'])
+:"
+:"""" "\_" prepended negated collection matches EOL
+:call add(tl, [2, '\_[^8-9]\+', "asfi\n9888", "asfi\n"])
+:call add(tl, [2, '\_[^a]\+', "asfi\n9888", "sfi\n9888"])
+:"
+:"""" Requiring lots of states.
+:call add(tl, [2, '[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}', " 12345678-1234-1234-1234-123456789012 ", "12345678-1234-1234-1234-123456789012", "1234-"])
+:"
+:"""" Skip adding state twice
+:call add(tl, [2, '^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=', "#if FOO", "#if", ' FOO'])
 :"
-:call add(tl, ['\v(a*)+', 'aaaa', 'aaaa', ''])
-:call add(tl, ['x', 'abcdef'])
+:"""" Run the tests
 :"
 :for t in tl
-:  let l = matchlist(t[1], t[0])
+:  let re = t[0]
+:  let pat = t[1]
+:  let text = t[2]
+:  let matchidx = 3
+:  for engine in [0, 1, 2]
+:    if engine == 2 && re == 0 || engine == 1 && re ==1
+:      continue
+:    endif
+:    let &regexpengine = engine
+:    try
+:      let l = matchlist(text, pat)
+:    catch
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
+:    endtry
 :" check the match itself
-:  if len(l) == 0 && len(t) > 2
-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", did not match, expected: \"' . t[2] . '\"'
-:  elseif len(l) > 0 && len(t) == 2
-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", match: \"' . l[0] . '\", expected no match'
-:  elseif len(t) > 2 && l[0] != t[2]
-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", match: \"' . l[0] . '\", expected: \"' . t[2] . '\"'
-:  else
-:    $put ='OK'
-:  endif
-:  if len(l) > 0
+:    if len(l) == 0 && len(t) > matchidx
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
+:    elseif len(l) > 0 && len(t) == matchidx
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
+:    elseif len(t) > matchidx && l[0] != t[matchidx]
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
+:    else
+:      $put ='OK ' . engine . ' - ' . pat
+:    endif
+:    if len(l) > 0
 :"   check all the nine submatches
-:    for i in range(1, 9)
-:      if len(t) <= i + 2
-:        let e = ''
-:      else
-:        let e = t[i + 2]
-:      endif
-:      if l[i] != e
-:        $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
-:      endif
-:    endfor
-:    unlet i
-:  endif
+:      for i in range(1, 9)
+:        if len(t) <= matchidx + i
+:          let e = ''
+:        else
+:          let e = t[matchidx + i]
+:        endif
+:        if l[i] != e
+:          $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+:        endif
+:      endfor
+:      unlet i
+:    endif
+:  endfor
 :endfor
 :unlet t tl e l
-:/^Results/,$wq! test.out
+:"
+:"""""" multi-line tests """"""""""""""""""""
+:let tl = []
+:"
+:"""" back references
+:call add(tl, [2, '^.\(.\).\_..\1.', ['aaa', 'aaa', 'b'], ['XX', 'b']])
+:call add(tl, [2, '\v.*\/(.*)\n.*\/\1$', ['./Dir1/Dir2/zyxwvuts.txt', './Dir1/Dir2/abcdefgh.bat', '', './Dir1/Dir2/file1.txt', './OtherDir1/OtherDir2/file1.txt'], ['./Dir1/Dir2/zyxwvuts.txt', './Dir1/Dir2/abcdefgh.bat', '', 'XX']])
+:"
+:"""" line breaks
+:call add(tl, [2, '\S.*\nx', ['abc', 'def', 'ghi', 'xjk', 'lmn'], ['abc', 'def', 'XXjk', 'lmn']])
+:"
+:" Check that \_[0-9] matching EOL does not break a following \>
+:call add(tl, [2, '\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>', ['', 'localnet/192.168.0.1', ''], ['', 'localnet/XX', '']])
+:"
+:" Check a pattern with a line break and ^ and $
+:call add(tl, [2, 'a\n^b$\n^c', ['a', 'b', 'c'], ['XX']])
+:"
+:"""" Run the multi-line tests
+:"
+:$put ='multi-line tests'
+:for t in tl
+:  let re = t[0]
+:  let pat = t[1]
+:  let before = t[2]
+:  let after = t[3]
+:  for engine in [0, 1, 2]
+:    if engine == 2 && re == 0 || engine == 1 && re ==1
+:      continue
+:    endif
+:    let &regexpengine = engine
+:    new
+:    call setline(1, before)
+:    exe '%s/' . pat . '/XX/'
+:    let result = getline(1, '$')
+:    q!
+:    if result != after
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . string(before) . '\", expected: \"' . string(after) . '\", got: \"' . string(result) . '\"'
+:    else
+:      $put ='OK ' . engine . ' - ' . pat
+:    endif
+:  endfor
+:endfor
+:unlet t tl
+:"
+:" Check that using a pattern on two lines doesn't get messed up by using
+:" matchstr() with \ze in between.
+:set re=0
+/^Substitute here
+:.+1,.+2s/""/\='"'.matchstr(getline("."), '\d\+\ze<').'"'
+/^Substitute here
+:.+1,.+2yank
+Gop:"
+:"
+:" Check a pattern with a look beind crossing a line boundary
+/^Behind:
+/\(<\_[xy]\+\)\@3<=start
+:.yank
+Gop:"
+:"
+:" Check matching Visual area
+/^Visual:
+jfxvfx:s/\%Ve/E/g
+jV:s/\%Va/A/g
+jfxfxj:s/\%Vo/O/g
+:/^Visual/+1,/^Visual/+4yank
+Gop:"
+:"
+:" Check matching marks
+/^Marks:
+jfSmsfEme:.-4,.+6s/.\%>'s.*\%<'e../here/
+jfSmsj0fEme:.-4,.+6s/.\%>'s\_.*\%<'e../again/
+:/^Marks:/+1,/^Marks:/+3yank
+Gop:"
+:"
+:" Check patterns matching cursor position.
+:func! Postest()
+ new
+ call setline(1, ['ffooooo', 'boboooo', 'zoooooo', 'koooooo', 'moooooo', "\t\t\tfoo", 'abababababababfoo', 'bababababababafoo', '********_'])
+ call setpos('.', [0, 1, 0, 0])
+ s/\%>3c.//g
+ call setpos('.', [0, 2, 4, 0])
+ s/\%#.*$//g
+ call setpos('.', [0, 3, 0, 0])
+ s/\%<3c./_/g
+ %s/\%4l\%>5c./_/g
+ %s/\%6l\%>25v./_/g
+ %s/\%>6l\%3c./!/g
+ %s/\%>7l\%12c./?/g
+ %s/\%>7l\%<9l\%>5v\%<8v./#/g
+ 1,$yank
+ quit!
+endfunc
+Go-0-:set re=0
+:call Postest()
+:put
+o-1-:set re=1
+:call Postest()
+:put
+o-2-:set re=2
+:call Postest()
+:put
+:"
+:" start and end of buffer
+/\%^
+yeGop:"
+50%/\%^..
+yeGopA END:"
+50%/\%$
+"ayb20gg/..\%$
+"bybGo"apo"bp:"
+:"
+:""""" Write the results """""""""""""
+:/\%#=1^Results/,$wq! test.out
 ENDTEST
 
+Substitute here:
+<T="">Ta 5</Title>
+<T="">Ac 7</Title>
+
+Behind:
+asdfasd<yyy
+xxstart1
+asdfasd<yy
+xxxstart2
+asdfasd<yy
+xxstart3
+
+Visual:
+thexe the thexethe
+andaxand andaxand
+oooxofor foroxooo
+oooxofor foroxooo
+
+Marks:
+asdfSasdfsadfEasdf
+asdfSas
+dfsadfEasdf
+
 Results of test64:
diff -Naur vim73.orig/src/testdir/test64.ok vim73/src/testdir/test64.ok
--- vim73.orig/src/testdir/test64.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test64.ok	2013-08-04 19:09:11.250608601 +0000
@@ -1,102 +1,1003 @@
 Results of test64:
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
-OK
+OK 0 - ab
+OK 1 - ab
+OK 2 - ab
+OK 0 - b
+OK 1 - b
+OK 2 - b
+OK 0 - bc*
+OK 1 - bc*
+OK 2 - bc*
+OK 0 - bc\{-}
+OK 1 - bc\{-}
+OK 2 - bc\{-}
+OK 0 - bc\{-}\(d\)
+OK 1 - bc\{-}\(d\)
+OK 2 - bc\{-}\(d\)
+OK 0 - bc*
+OK 1 - bc*
+OK 2 - bc*
+OK 0 - c*
+OK 1 - c*
+OK 2 - c*
+OK 0 - bc*
+OK 1 - bc*
+OK 2 - bc*
+OK 0 - c*
+OK 1 - c*
+OK 2 - c*
+OK 0 - bc\+
+OK 1 - bc\+
+OK 2 - bc\+
+OK 0 - bc\+
+OK 1 - bc\+
+OK 2 - bc\+
+OK 0 - a\|ab
+OK 1 - a\|ab
+OK 2 - a\|ab
+OK 0 - c\?
+OK 1 - c\?
+OK 2 - c\?
+OK 0 - bc\?
+OK 1 - bc\?
+OK 2 - bc\?
+OK 0 - bc\?
+OK 1 - bc\?
+OK 2 - bc\?
+OK 0 - \va{1}
+OK 1 - \va{1}
+OK 2 - \va{1}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \va{2}
+OK 1 - \va{2}
+OK 2 - \va{2}
+OK 0 - \vb{1}
+OK 1 - \vb{1}
+OK 2 - \vb{1}
+OK 0 - \vba{2}
+OK 1 - \vba{2}
+OK 2 - \vba{2}
+OK 0 - \vba{3}
+OK 1 - \vba{3}
+OK 2 - \vba{3}
+OK 0 - \v(ab){1}
+OK 1 - \v(ab){1}
+OK 2 - \v(ab){1}
+OK 0 - \v(ab){1}
+OK 1 - \v(ab){1}
+OK 2 - \v(ab){1}
+OK 0 - \v(ab){1}
+OK 1 - \v(ab){1}
+OK 2 - \v(ab){1}
+OK 0 - \v(ab){0,2}
+OK 1 - \v(ab){0,2}
+OK 2 - \v(ab){0,2}
+OK 0 - \v(ab){0,2}
+OK 1 - \v(ab){0,2}
+OK 2 - \v(ab){0,2}
+OK 0 - \v(ab){1,2}
+OK 1 - \v(ab){1,2}
+OK 2 - \v(ab){1,2}
+OK 0 - \v(ab){1,2}
+OK 1 - \v(ab){1,2}
+OK 2 - \v(ab){1,2}
+OK 0 - \v(ab){2,4}
+OK 1 - \v(ab){2,4}
+OK 2 - \v(ab){2,4}
+OK 0 - \v(ab){2,4}
+OK 1 - \v(ab){2,4}
+OK 2 - \v(ab){2,4}
+OK 0 - \v(ab){2}
+OK 1 - \v(ab){2}
+OK 2 - \v(ab){2}
+OK 0 - \v(ab){2}
+OK 1 - \v(ab){2}
+OK 2 - \v(ab){2}
+OK 0 - \v(ab){2}
+OK 1 - \v(ab){2}
+OK 2 - \v(ab){2}
+OK 0 - \v(ab){2}
+OK 1 - \v(ab){2}
+OK 2 - \v(ab){2}
+OK 0 - \v((ab){2}){2}
+OK 1 - \v((ab){2}){2}
+OK 2 - \v((ab){2}){2}
+OK 0 - \v((ab){2}){2}
+OK 1 - \v((ab){2}){2}
+OK 2 - \v((ab){2}){2}
+OK 0 - \v(a{1}){1}
+OK 1 - \v(a{1}){1}
+OK 2 - \v(a{1}){1}
+OK 0 - \v(a{2}){1}
+OK 1 - \v(a{2}){1}
+OK 2 - \v(a{2}){1}
+OK 0 - \v(a{2}){1}
+OK 1 - \v(a{2}){1}
+OK 2 - \v(a{2}){1}
+OK 0 - \v(a{2}){1}
+OK 1 - \v(a{2}){1}
+OK 2 - \v(a{2}){1}
+OK 0 - \v(a{1}){2}
+OK 1 - \v(a{1}){2}
+OK 2 - \v(a{1}){2}
+OK 0 - \v(a{1}){2}
+OK 1 - \v(a{1}){2}
+OK 2 - \v(a{1}){2}
+OK 0 - \v(a{2})+
+OK 1 - \v(a{2})+
+OK 2 - \v(a{2})+
+OK 0 - \v(a{2})+
+OK 1 - \v(a{2})+
+OK 2 - \v(a{2})+
+OK 0 - \v(a{2}){1}
+OK 1 - \v(a{2}){1}
+OK 2 - \v(a{2}){1}
+OK 0 - \v(a{1}){2}
+OK 1 - \v(a{1}){2}
+OK 2 - \v(a{1}){2}
+OK 0 - \v(a{1}){1}
+OK 1 - \v(a{1}){1}
+OK 2 - \v(a{1}){1}
+OK 0 - \v(a{2}){2}
+OK 1 - \v(a{2}){2}
+OK 2 - \v(a{2}){2}
+OK 0 - \v(a{2}){2}
+OK 1 - \v(a{2}){2}
+OK 2 - \v(a{2}){2}
+OK 0 - \v(a+){2}
+OK 1 - \v(a+){2}
+OK 2 - \v(a+){2}
+OK 0 - \v(a{3}){2}
+OK 1 - \v(a{3}){2}
+OK 2 - \v(a{3}){2}
+OK 0 - \v(a{1,2}){2}
+OK 1 - \v(a{1,2}){2}
+OK 2 - \v(a{1,2}){2}
+OK 0 - \v(a{1,3}){2}
+OK 1 - \v(a{1,3}){2}
+OK 2 - \v(a{1,3}){2}
+OK 0 - \v(a{1,3}){2}
+OK 1 - \v(a{1,3}){2}
+OK 2 - \v(a{1,3}){2}
+OK 0 - \v(a{1,3}){3}
+OK 1 - \v(a{1,3}){3}
+OK 2 - \v(a{1,3}){3}
+OK 0 - \v(a{1,2}){2}
+OK 1 - \v(a{1,2}){2}
+OK 2 - \v(a{1,2}){2}
+OK 0 - \v(a+)+
+OK 1 - \v(a+)+
+OK 2 - \v(a+)+
+OK 0 - \v(a+)+
+OK 1 - \v(a+)+
+OK 2 - \v(a+)+
+OK 0 - \v(a+){1,2}
+OK 1 - \v(a+){1,2}
+OK 2 - \v(a+){1,2}
+OK 0 - \v(a+)(a+)
+OK 1 - \v(a+)(a+)
+OK 2 - \v(a+)(a+)
+OK 0 - \v(a{3})+
+OK 1 - \v(a{3})+
+OK 2 - \v(a{3})+
+OK 0 - \v(a|b|c)+
+OK 1 - \v(a|b|c)+
+OK 2 - \v(a|b|c)+
+OK 0 - \v(a|b|c){2}
+OK 1 - \v(a|b|c){2}
+OK 2 - \v(a|b|c){2}
+OK 0 - \v(abc){2}
+OK 1 - \v(abc){2}
+OK 2 - \v(abc){2}
+OK 0 - \v(abc){2}
+OK 1 - \v(abc){2}
+OK 2 - \v(abc){2}
+OK 0 - a*
+OK 1 - a*
+OK 2 - a*
+OK 0 - \v(a*)+
+OK 1 - \v(a*)+
+OK 2 - \v(a*)+
+OK 0 - \v((ab)+)+
+OK 1 - \v((ab)+)+
+OK 2 - \v((ab)+)+
+OK 0 - \v(((ab)+)+)+
+OK 1 - \v(((ab)+)+)+
+OK 2 - \v(((ab)+)+)+
+OK 0 - \v(((ab)+)+)+
+OK 1 - \v(((ab)+)+)+
+OK 2 - \v(((ab)+)+)+
+OK 0 - \v(a{0,2})+
+OK 1 - \v(a{0,2})+
+OK 2 - \v(a{0,2})+
+OK 0 - \v(a*)+
+OK 1 - \v(a*)+
+OK 2 - \v(a*)+
+OK 0 - \v((a*)+)+
+OK 1 - \v((a*)+)+
+OK 2 - \v((a*)+)+
+OK 0 - \v((ab)*)+
+OK 1 - \v((ab)*)+
+OK 2 - \v((ab)*)+
+OK 0 - \va{1,3}
+OK 1 - \va{1,3}
+OK 2 - \va{1,3}
+OK 0 - \va{2,3}
+OK 1 - \va{2,3}
+OK 2 - \va{2,3}
+OK 0 - \v((ab)+|c*)+
+OK 1 - \v((ab)+|c*)+
+OK 2 - \v((ab)+|c*)+
+OK 0 - \v(a{2})|(b{3})
+OK 1 - \v(a{2})|(b{3})
+OK 2 - \v(a{2})|(b{3})
+OK 0 - \va{2}|b{2}
+OK 1 - \va{2}|b{2}
+OK 2 - \va{2}|b{2}
+OK 0 - \v(a)+|(c)+
+OK 1 - \v(a)+|(c)+
+OK 2 - \v(a)+|(c)+
+OK 0 - \vab{2,3}c
+OK 1 - \vab{2,3}c
+OK 2 - \vab{2,3}c
+OK 0 - \vab{2,3}c
+OK 1 - \vab{2,3}c
+OK 2 - \vab{2,3}c
+OK 0 - \vab{2,3}cd{2,3}e
+OK 1 - \vab{2,3}cd{2,3}e
+OK 2 - \vab{2,3}cd{2,3}e
+OK 0 - \va(bc){2}d
+OK 1 - \va(bc){2}d
+OK 2 - \va(bc){2}d
+OK 0 - \va*a{2}
+OK 1 - \va*a{2}
+OK 2 - \va*a{2}
+OK 0 - \va*a{2}
+OK 1 - \va*a{2}
+OK 2 - \va*a{2}
+OK 0 - \va*a{2}
+OK 1 - \va*a{2}
+OK 2 - \va*a{2}
+OK 0 - \va*a{2}
+OK 1 - \va*a{2}
+OK 2 - \va*a{2}
+OK 0 - \va*b*|a*c*
+OK 1 - \va*b*|a*c*
+OK 2 - \va*b*|a*c*
+OK 0 - \va{1}b{1}|a{1}b{1}
+OK 1 - \va{1}b{1}|a{1}b{1}
+OK 2 - \va{1}b{1}|a{1}b{1}
+OK 0 - \v(a)
+OK 1 - \v(a)
+OK 2 - \v(a)
+OK 0 - \v(a)(b)
+OK 1 - \v(a)(b)
+OK 2 - \v(a)(b)
+OK 0 - \v(ab)(b)(c)
+OK 1 - \v(ab)(b)(c)
+OK 2 - \v(ab)(b)(c)
+OK 0 - \v((a)(b))
+OK 1 - \v((a)(b))
+OK 2 - \v((a)(b))
+OK 0 - \v(a)|(b)
+OK 1 - \v(a)|(b)
+OK 2 - \v(a)|(b)
+OK 0 - \v(a*)+
+OK 1 - \v(a*)+
+OK 2 - \v(a*)+
+OK 0 - x
+OK 1 - x
+OK 2 - x
+OK 0 - ab
+OK 1 - ab
+OK 2 - ab
+OK 0 - ab
+OK 1 - ab
+OK 2 - ab
+OK 0 - ab
+OK 1 - ab
+OK 2 - ab
+OK 0 - x*
+OK 1 - x*
+OK 2 - x*
+OK 0 - x*
+OK 1 - x*
+OK 2 - x*
+OK 0 - x*
+OK 1 - x*
+OK 2 - x*
+OK 0 - x\+
+OK 1 - x\+
+OK 2 - x\+
+OK 0 - x\+
+OK 1 - x\+
+OK 2 - x\+
+OK 0 - x\+
+OK 1 - x\+
+OK 2 - x\+
+OK 0 - x\+
+OK 1 - x\+
+OK 2 - x\+
+OK 0 - x\=
+OK 1 - x\=
+OK 2 - x\=
+OK 0 - x\=
+OK 1 - x\=
+OK 2 - x\=
+OK 0 - x\=
+OK 1 - x\=
+OK 2 - x\=
+OK 0 - x\?
+OK 1 - x\?
+OK 2 - x\?
+OK 0 - x\?
+OK 1 - x\?
+OK 2 - x\?
+OK 0 - x\?
+OK 1 - x\?
+OK 2 - x\?
+OK 0 - a\{0,0}
+OK 1 - a\{0,0}
+OK 2 - a\{0,0}
+OK 0 - a\{0,1}
+OK 1 - a\{0,1}
+OK 2 - a\{0,1}
+OK 0 - a\{1,0}
+OK 1 - a\{1,0}
+OK 2 - a\{1,0}
+OK 0 - a\{3,6}
+OK 1 - a\{3,6}
+OK 2 - a\{3,6}
+OK 0 - a\{3,6}
+OK 1 - a\{3,6}
+OK 2 - a\{3,6}
+OK 0 - a\{3,6}
+OK 1 - a\{3,6}
+OK 2 - a\{3,6}
+OK 0 - a\{0}
+OK 1 - a\{0}
+OK 2 - a\{0}
+OK 0 - a\{2}
+OK 1 - a\{2}
+OK 2 - a\{2}
+OK 0 - a\{2}
+OK 1 - a\{2}
+OK 2 - a\{2}
+OK 0 - a\{2}
+OK 1 - a\{2}
+OK 2 - a\{2}
+OK 0 - a\{0,}
+OK 1 - a\{0,}
+OK 2 - a\{0,}
+OK 0 - a\{0,}
+OK 1 - a\{0,}
+OK 2 - a\{0,}
+OK 0 - a\{2,}
+OK 1 - a\{2,}
+OK 2 - a\{2,}
+OK 0 - a\{2,}
+OK 1 - a\{2,}
+OK 2 - a\{2,}
+OK 0 - a\{5,}
+OK 1 - a\{5,}
+OK 2 - a\{5,}
+OK 0 - a\{5,}
+OK 1 - a\{5,}
+OK 2 - a\{5,}
+OK 0 - a\{,0}
+OK 1 - a\{,0}
+OK 2 - a\{,0}
+OK 0 - a\{,5}
+OK 1 - a\{,5}
+OK 2 - a\{,5}
+OK 0 - a\{,5}
+OK 1 - a\{,5}
+OK 2 - a\{,5}
+OK 0 - ^*\{4,}$
+OK 1 - ^*\{4,}$
+OK 2 - ^*\{4,}$
+OK 0 - ^*\{4,}$
+OK 1 - ^*\{4,}$
+OK 2 - ^*\{4,}$
+OK 0 - ^*\{4,}$
+OK 1 - ^*\{4,}$
+OK 2 - ^*\{4,}$
+OK 0 - a\{}
+OK 1 - a\{}
+OK 2 - a\{}
+OK 0 - a\{}
+OK 1 - a\{}
+OK 2 - a\{}
+OK 0 - a\{-0,0}
+OK 1 - a\{-0,0}
+OK 2 - a\{-0,0}
+OK 0 - a\{-0,1}
+OK 1 - a\{-0,1}
+OK 2 - a\{-0,1}
+OK 0 - a\{-3,6}
+OK 1 - a\{-3,6}
+OK 2 - a\{-3,6}
+OK 0 - a\{-3,6}
+OK 1 - a\{-3,6}
+OK 2 - a\{-3,6}
+OK 0 - a\{-3,6}
+OK 1 - a\{-3,6}
+OK 2 - a\{-3,6}
+OK 0 - a\{-0}
+OK 1 - a\{-0}
+OK 2 - a\{-0}
+OK 0 - a\{-2}
+OK 1 - a\{-2}
+OK 2 - a\{-2}
+OK 0 - a\{-2}
+OK 1 - a\{-2}
+OK 2 - a\{-2}
+OK 0 - a\{-0,}
+OK 1 - a\{-0,}
+OK 2 - a\{-0,}
+OK 0 - a\{-0,}
+OK 1 - a\{-0,}
+OK 2 - a\{-0,}
+OK 0 - a\{-2,}
+OK 1 - a\{-2,}
+OK 2 - a\{-2,}
+OK 0 - a\{-2,}
+OK 1 - a\{-2,}
+OK 2 - a\{-2,}
+OK 0 - a\{-,0}
+OK 1 - a\{-,0}
+OK 2 - a\{-,0}
+OK 0 - a\{-,5}
+OK 1 - a\{-,5}
+OK 2 - a\{-,5}
+OK 0 - a\{-,5}
+OK 1 - a\{-,5}
+OK 2 - a\{-,5}
+OK 0 - a\{-}
+OK 1 - a\{-}
+OK 2 - a\{-}
+OK 0 - a\{-}
+OK 1 - a\{-}
+OK 2 - a\{-}
+OK 0 - \(abc\)*
+OK 1 - \(abc\)*
+OK 2 - \(abc\)*
+OK 0 - \(ab\)\+
+OK 1 - \(ab\)\+
+OK 2 - \(ab\)\+
+OK 0 - \(abaaaaa\)*cd
+OK 1 - \(abaaaaa\)*cd
+OK 2 - \(abaaaaa\)*cd
+OK 0 - \(test1\)\? \(test2\)\?
+OK 1 - \(test1\)\? \(test2\)\?
+OK 2 - \(test1\)\? \(test2\)\?
+OK 0 - \(test1\)\= \(test2\) \(test4443\)\=
+OK 1 - \(test1\)\= \(test2\) \(test4443\)\=
+OK 2 - \(test1\)\= \(test2\) \(test4443\)\=
+OK 0 - \(\(sub1\) hello \(sub 2\)\)
+OK 1 - \(\(sub1\) hello \(sub 2\)\)
+OK 2 - \(\(sub1\) hello \(sub 2\)\)
+OK 0 - \(\(\(yyxxzz\)\)\)
+OK 1 - \(\(\(yyxxzz\)\)\)
+OK 2 - \(\(\(yyxxzz\)\)\)
+OK 0 - \v((ab)+|c+)+
+OK 1 - \v((ab)+|c+)+
+OK 2 - \v((ab)+|c+)+
+OK 0 - \v((ab)|c*)+
+OK 1 - \v((ab)|c*)+
+OK 2 - \v((ab)|c*)+
+OK 0 - \v(a(c*)+b)+
+OK 1 - \v(a(c*)+b)+
+OK 2 - \v(a(c*)+b)+
+OK 0 - \v(a|b*)+
+OK 1 - \v(a|b*)+
+OK 2 - \v(a|b*)+
+OK 0 - a\{-2,7}
+OK 1 - a\{-2,7}
+OK 2 - a\{-2,7}
+OK 0 - a\{-2,7}x
+OK 1 - a\{-2,7}x
+OK 2 - a\{-2,7}x
+OK 0 - a\{2,7}
+OK 1 - a\{2,7}
+OK 2 - a\{2,7}
+OK 0 - a\{2,7}x
+OK 1 - a\{2,7}x
+OK 2 - a\{2,7}x
+OK 0 - \vx(.{-,8})yz(.*)
+OK 1 - \vx(.{-,8})yz(.*)
+OK 2 - \vx(.{-,8})yz(.*)
+OK 0 - \vx(.*)yz(.*)
+OK 1 - \vx(.*)yz(.*)
+OK 2 - \vx(.*)yz(.*)
+OK 0 - \v(a{1,2}){-2,3}
+OK 1 - \v(a{1,2}){-2,3}
+OK 2 - \v(a{1,2}){-2,3}
+OK 0 - \v(a{-1,3})+
+OK 1 - \v(a{-1,3})+
+OK 2 - \v(a{-1,3})+
+OK 0 - \d\+e\d\d
+OK 1 - \d\+e\d\d
+OK 2 - \d\+e\d\d
+OK 0 - \v[a]
+OK 1 - \v[a]
+OK 2 - \v[a]
+OK 0 - a[bcd]
+OK 1 - a[bcd]
+OK 2 - a[bcd]
+OK 0 - a[b-d]
+OK 1 - a[b-d]
+OK 2 - a[b-d]
+OK 0 - [a-d][e-f][x-x]d
+OK 1 - [a-d][e-f][x-x]d
+OK 2 - [a-d][e-f][x-x]d
+OK 0 - \v[[:alpha:]]+
+OK 1 - \v[[:alpha:]]+
+OK 2 - \v[[:alpha:]]+
+OK 0 - [[:alpha:]\+]
+OK 1 - [[:alpha:]\+]
+OK 2 - [[:alpha:]\+]
+OK 0 - [^abc]\+
+OK 1 - [^abc]\+
+OK 2 - [^abc]\+
+OK 0 - [^abc]
+OK 1 - [^abc]
+OK 2 - [^abc]
+OK 0 - [^abc]\+
+OK 1 - [^abc]\+
+OK 2 - [^abc]\+
+OK 0 - [^a-d]\+
+OK 1 - [^a-d]\+
+OK 2 - [^a-d]\+
+OK 0 - [a-f]*
+OK 1 - [a-f]*
+OK 2 - [a-f]*
+OK 0 - [a-f]*
+OK 1 - [a-f]*
+OK 2 - [a-f]*
+OK 0 - [^a-f]\+
+OK 1 - [^a-f]\+
+OK 2 - [^a-f]\+
+OK 0 - [a-c]\{-3,6}
+OK 1 - [a-c]\{-3,6}
+OK 2 - [a-c]\{-3,6}
+OK 0 - [^[:alpha:]]\+
+OK 1 - [^[:alpha:]]\+
+OK 2 - [^[:alpha:]]\+
+OK 0 - [-a]
+OK 1 - [-a]
+OK 2 - [-a]
+OK 0 - [a-]
+OK 1 - [a-]
+OK 2 - [a-]
+OK 0 - [a-f]*\c
+OK 1 - [a-f]*\c
+OK 2 - [a-f]*\c
+OK 0 - [abc][xyz]\c
+OK 1 - [abc][xyz]\c
+OK 2 - [abc][xyz]\c
+OK 0 - [-./[:alnum:]_~]\+
+OK 1 - [-./[:alnum:]_~]\+
+OK 2 - [-./[:alnum:]_~]\+
+OK 0 - [\]\^\-\\]\+
+OK 1 - [\]\^\-\\]\+
+OK 2 - [\]\^\-\\]\+
+OK 0 - [[.a.]]\+
+OK 1 - [[.a.]]\+
+OK 2 - [[.a.]]\+
+OK 0 - abc[0-9]*ddd
+OK 1 - abc[0-9]*ddd
+OK 2 - abc[0-9]*ddd
+OK 0 - abc[0-9]*ddd
+OK 1 - abc[0-9]*ddd
+OK 2 - abc[0-9]*ddd
+OK 0 - \_[0-9]\+
+OK 1 - \_[0-9]\+
+OK 2 - \_[0-9]\+
+OK 0 - [0-9\n]\+
+OK 1 - [0-9\n]\+
+OK 2 - [0-9\n]\+
+OK 0 - \_[0-9]\+
+OK 1 - \_[0-9]\+
+OK 2 - \_[0-9]\+
+OK 0 - \_f
+OK 1 - \_f
+OK 2 - \_f
+OK 0 - \_f\+
+OK 1 - \_f\+
+OK 2 - \_f\+
+OK 0 - [0-9A-Za-z-_.]\+
+OK 1 - [0-9A-Za-z-_.]\+
+OK 2 - [0-9A-Za-z-_.]\+
+OK 0 - ^a.
+OK 1 - ^a.
+OK 2 - ^a.
+OK 0 - ^a.
+OK 1 - ^a.
+OK 2 - ^a.
+OK 0 - .a$
+OK 1 - .a$
+OK 2 - .a$
+OK 0 - .a$
+OK 1 - .a$
+OK 2 - .a$
+OK 0 - \%^a.
+OK 1 - \%^a.
+OK 2 - \%^a.
+OK 0 - \%^a
+OK 1 - \%^a
+OK 2 - \%^a
+OK 0 - .a\%$
+OK 1 - .a\%$
+OK 2 - .a\%$
+OK 0 - .a\%$
+OK 1 - .a\%$
+OK 2 - .a\%$
+OK 0 - [0-9]
+OK 1 - [0-9]
+OK 2 - [0-9]
+OK 0 - [^0-9]
+OK 1 - [^0-9]
+OK 2 - [^0-9]
+OK 0 - [0-9a-fA-F]*
+OK 1 - [0-9a-fA-F]*
+OK 2 - [0-9a-fA-F]*
+OK 0 - [^0-9A-Fa-f]\+
+OK 1 - [^0-9A-Fa-f]\+
+OK 2 - [^0-9A-Fa-f]\+
+OK 0 - [a-z_A-Z0-9]\+
+OK 1 - [a-z_A-Z0-9]\+
+OK 2 - [a-z_A-Z0-9]\+
+OK 0 - [a-z]
+OK 1 - [a-z]
+OK 2 - [a-z]
+OK 0 - [a-zA-Z]
+OK 1 - [a-zA-Z]
+OK 2 - [a-zA-Z]
+OK 0 - [A-Z]
+OK 1 - [A-Z]
+OK 2 - [A-Z]
+OK 0 - \C[^A-Z]\+
+OK 1 - \C[^A-Z]\+
+OK 2 - \C[^A-Z]\+
+OK 0 - xx \ze test
+OK 1 - xx \ze test
+OK 2 - xx \ze test
+OK 0 - abc\zeend
+OK 1 - abc\zeend
+OK 2 - abc\zeend
+OK 0 - aa\zebb\|aaxx
+OK 1 - aa\zebb\|aaxx
+OK 2 - aa\zebb\|aaxx
+OK 0 - aa\zebb\|aaxx
+OK 1 - aa\zebb\|aaxx
+OK 2 - aa\zebb\|aaxx
+OK 0 - aabb\|aa\zebb
+OK 1 - aabb\|aa\zebb
+OK 2 - aabb\|aa\zebb
+OK 0 - aa\zebb\|aaebb
+OK 1 - aa\zebb\|aaebb
+OK 2 - aa\zebb\|aaebb
+OK 0 - abc\zsdd
+OK 1 - abc\zsdd
+OK 2 - abc\zsdd
+OK 0 - aa \zsax
+OK 1 - aa \zsax
+OK 2 - aa \zsax
+OK 0 - abc \zsmatch\ze abc
+OK 1 - abc \zsmatch\ze abc
+OK 2 - abc \zsmatch\ze abc
+OK 0 - \v(a \zsif .*){2}
+OK 1 - \v(a \zsif .*){2}
+OK 2 - \v(a \zsif .*){2}
+OK 0 - \>\zs.
+OK 1 - \>\zs.
+OK 2 - \>\zs.
+OK 0 - abc\@=
+OK 1 - abc\@=
+OK 2 - abc\@=
+OK 0 - abc\@=cd
+OK 1 - abc\@=cd
+OK 2 - abc\@=cd
+OK 0 - abc\@=
+OK 1 - abc\@=
+OK 2 - abc\@=
+OK 0 - abcd\@=e
+OK 1 - abcd\@=e
+OK 2 - abcd\@=e
+OK 0 - abcd\@=e
+OK 1 - abcd\@=e
+OK 2 - abcd\@=e
+OK 0 - \v(abc)@=..
+OK 1 - \v(abc)@=..
+OK 2 - \v(abc)@=..
+OK 0 - \(.*John\)\@=.*Bob
+OK 1 - \(.*John\)\@=.*Bob
+OK 2 - \(.*John\)\@=.*Bob
+OK 0 - \(John.*\)\@=.*Bob
+OK 1 - \(John.*\)\@=.*Bob
+OK 2 - \(John.*\)\@=.*Bob
+OK 0 - \<\S\+\())\)\@=
+OK 1 - \<\S\+\())\)\@=
+OK 2 - \<\S\+\())\)\@=
+OK 0 - .*John\&.*Bob
+OK 1 - .*John\&.*Bob
+OK 2 - .*John\&.*Bob
+OK 0 - .*John\&.*Bob
+OK 1 - .*John\&.*Bob
+OK 2 - .*John\&.*Bob
+OK 0 - \v(test1)@=.*yep
+OK 1 - \v(test1)@=.*yep
+OK 2 - \v(test1)@=.*yep
+OK 0 - foo\(bar\)\@!
+OK 1 - foo\(bar\)\@!
+OK 2 - foo\(bar\)\@!
+OK 0 - foo\(bar\)\@!
+OK 1 - foo\(bar\)\@!
+OK 2 - foo\(bar\)\@!
+OK 0 - if \(\(then\)\@!.\)*$
+OK 1 - if \(\(then\)\@!.\)*$
+OK 2 - if \(\(then\)\@!.\)*$
+OK 0 - if \(\(then\)\@!.\)*$
+OK 1 - if \(\(then\)\@!.\)*$
+OK 2 - if \(\(then\)\@!.\)*$
+OK 0 - \(foo\)\@!bar
+OK 1 - \(foo\)\@!bar
+OK 2 - \(foo\)\@!bar
+OK 0 - \(foo\)\@!...bar
+OK 1 - \(foo\)\@!...bar
+OK 2 - \(foo\)\@!...bar
+OK 0 - ^\%(.*bar\)\@!.*\zsfoo
+OK 1 - ^\%(.*bar\)\@!.*\zsfoo
+OK 2 - ^\%(.*bar\)\@!.*\zsfoo
+OK 0 - ^\%(.*bar\)\@!.*\zsfoo
+OK 1 - ^\%(.*bar\)\@!.*\zsfoo
+OK 2 - ^\%(.*bar\)\@!.*\zsfoo
+OK 0 - ^\%(.*bar\)\@!.*\zsfoo
+OK 1 - ^\%(.*bar\)\@!.*\zsfoo
+OK 2 - ^\%(.*bar\)\@!.*\zsfoo
+OK 0 - [ ]\@!\p\%([ ]\@!\p\)*:
+OK 1 - [ ]\@!\p\%([ ]\@!\p\)*:
+OK 2 - [ ]\@!\p\%([ ]\@!\p\)*:
+OK 0 - [[:alpha:]]\{-2,6}
+OK 1 - [[:alpha:]]\{-2,6}
+OK 2 - [[:alpha:]]\{-2,6}
+OK 0 - 
+OK 1 - 
+OK 2 - 
+OK 0 - \v(())
+OK 1 - \v(())
+OK 2 - \v(())
+OK 0 - \v%(ab(xyz)c)
+OK 1 - \v%(ab(xyz)c)
+OK 2 - \v%(ab(xyz)c)
+OK 0 - \v(test|)empty
+OK 1 - \v(test|)empty
+OK 2 - \v(test|)empty
+OK 0 - \v(a|aa)(a|aa)
+OK 1 - \v(a|aa)(a|aa)
+OK 2 - \v(a|aa)(a|aa)
+OK 0 - \%d32
+OK 1 - \%d32
+OK 2 - \%d32
+OK 0 - \%o40
+OK 1 - \%o40
+OK 2 - \%o40
+OK 0 - \%x20
+OK 1 - \%x20
+OK 2 - \%x20
+OK 0 - \%u0020
+OK 1 - \%u0020
+OK 2 - \%u0020
+OK 0 - \%U00000020
+OK 1 - \%U00000020
+OK 2 - \%U00000020
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]
+OK 1 - foo\%[bar]
+OK 2 - foo\%[bar]
+OK 0 - foo\%[bar]x
+OK 1 - foo\%[bar]x
+OK 2 - foo\%[bar]x
+OK 0 - foo\%[bar]x
+OK 1 - foo\%[bar]x
+OK 2 - foo\%[bar]x
+OK 0 - \%[bar]x
+OK 1 - \%[bar]x
+OK 2 - \%[bar]x
+OK 0 - \%[bar]x
+OK 1 - \%[bar]x
+OK 2 - \%[bar]x
+OK 0 - \%[bar]x
+OK 1 - \%[bar]x
+OK 2 - \%[bar]x
+OK 0 - b\%[[ao]r]
+OK 1 - b\%[[ao]r]
+OK 2 - b\%[[ao]r]
+OK 0 - b\%[[]]r]
+OK 1 - b\%[[]]r]
+OK 2 - b\%[[]]r]
+OK 0 - goo\|go
+OK 1 - goo\|go
+OK 2 - goo\|go
+OK 0 - \<goo\|\<go
+OK 1 - \<goo\|\<go
+OK 2 - \<goo\|\<go
+OK 0 - \<goo\|go
+OK 1 - \<goo\|go
+OK 2 - \<goo\|go
+OK 0 - \(\i\+\) \1
+OK 1 - \(\i\+\) \1
+OK 2 - \(\i\+\) \1
+OK 0 - \(\i\+\) \1
+OK 1 - \(\i\+\) \1
+OK 2 - \(\i\+\) \1
+OK 0 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
+OK 1 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
+OK 2 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
+OK 0 - \(\d*\)a \1b
+OK 1 - \(\d*\)a \1b
+OK 2 - \(\d*\)a \1b
+OK 0 - ^.\(.\).\_..\1.
+OK 1 - ^.\(.\).\_..\1.
+OK 2 - ^.\(.\).\_..\1.
+OK 0 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 1 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 2 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 0 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 1 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 2 - ^.*\.\(.*\)/.\+\(\1\)\@<!$
+OK 0 - ^.*\.\(.*\)/.\+\(\1\)\@<=$
+OK 1 - ^.*\.\(.*\)/.\+\(\1\)\@<=$
+OK 2 - ^.*\.\(.*\)/.\+\(\1\)\@<=$
+OK 0 - \\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}
+OK 1 - \\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}
+OK 2 - \\\@<!\${\(\d\+\%(:.\{-}\)\?\\\@<!\)}
+OK 0 - <\@<=span.
+OK 1 - <\@<=span.
+OK 2 - <\@<=span.
+OK 0 - <\@1<=span.
+OK 1 - <\@1<=span.
+OK 2 - <\@1<=span.
+OK 0 - <\@2<=span.
+OK 1 - <\@2<=span.
+OK 2 - <\@2<=span.
+OK 0 - \(<<\)\@<=span.
+OK 1 - \(<<\)\@<=span.
+OK 2 - \(<<\)\@<=span.
+OK 0 - \(<<\)\@1<=span.
+OK 1 - \(<<\)\@1<=span.
+OK 2 - \(<<\)\@1<=span.
+OK 0 - \(<<\)\@2<=span.
+OK 1 - \(<<\)\@2<=span.
+OK 2 - \(<<\)\@2<=span.
+OK 0 - \(foo\)\@<!bar.
+OK 1 - \(foo\)\@<!bar.
+OK 2 - \(foo\)\@<!bar.
+OK 0 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 1 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 2 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 0 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 1 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 2 - \v\C%(<Last Changed:\s+)@<=.*$
+OK 0 - \(foo\)\@<=\>
+OK 1 - \(foo\)\@<=\>
+OK 2 - \(foo\)\@<=\>
+OK 0 - \(foo\)\@<=\>
+OK 1 - \(foo\)\@<=\>
+OK 2 - \(foo\)\@<=\>
+OK 0 - \(foo\)\@<=.*
+OK 1 - \(foo\)\@<=.*
+OK 2 - \(foo\)\@<=.*
+OK 0 - \(a*\)\@>a
+OK 1 - \(a*\)\@>a
+OK 2 - \(a*\)\@>a
+OK 0 - \(a*\)\@>b
+OK 1 - \(a*\)\@>b
+OK 2 - \(a*\)\@>b
+OK 0 - \(a*\)\@>a\|a\+
+OK 2 - \(a*\)\@>a\|a\+
+OK 0 - \_[^8-9]\+
+OK 1 - \_[^8-9]\+
+OK 2 - \_[^8-9]\+
+OK 0 - \_[^a]\+
+OK 1 - \_[^a]\+
+OK 2 - \_[^a]\+
+OK 0 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
+OK 1 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
+OK 2 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
+OK 0 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
+OK 1 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
+OK 2 - ^\%(\%(^\s*#\s*if\>\|#\s*if\)\)\(\%>1c.*$\)\@=
+multi-line tests
+OK 0 - ^.\(.\).\_..\1.
+OK 1 - ^.\(.\).\_..\1.
+OK 2 - ^.\(.\).\_..\1.
+OK 0 - \v.*\/(.*)\n.*\/\1$
+OK 1 - \v.*\/(.*)\n.*\/\1$
+OK 2 - \v.*\/(.*)\n.*\/\1$
+OK 0 - \S.*\nx
+OK 1 - \S.*\nx
+OK 2 - \S.*\nx
+OK 0 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
+OK 1 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
+OK 2 - \<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
+OK 0 - a\n^b$\n^c
+OK 1 - a\n^b$\n^c
+OK 2 - a\n^b$\n^c
+
+<T="5">Ta 5</Title>
+<T="7">Ac 7</Title>
+
+xxstart3
+
+thexE thE thExethe
+AndAxAnd AndAxAnd
+oooxOfOr fOrOxooo
+oooxOfOr fOrOxooo
+
+asdfhereasdf
+asdfagainasdf
+
+-0-
+ffo
+bob
+__ooooo
+koooo__
+moooooo
+			f__
+ab!babababababfoo
+ba!ab##abab?bafoo
+**!*****_
+-1-
+ffo
+bob
+__ooooo
+koooo__
+moooooo
+			f__
+ab!babababababfoo
+ba!ab##abab?bafoo
+**!*****_
+-2-
+ffo
+bob
+__ooooo
+koooo__
+moooooo
+			f__
+ab!babababababfoo
+ba!ab##abab?bafoo
+**!*****_
+Test
+Test END
+EN
+E
diff -Naur vim73.orig/src/testdir/test65.in vim73/src/testdir/test65.in
--- vim73.orig/src/testdir/test65.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test65.in	2013-08-04 19:09:11.253941924 +0000
@@ -1,4 +1,4 @@
-Test for floating point.
+Test for floating point and logical operators.
 
 STARTTEST
 :so small.vim
@@ -72,6 +72,23 @@
 :$put ='float2nr'
 :$put =float2nr(123.456)
 :$put =float2nr(-123.456)
+:$put ='AND'
+:$put =and(127, 127)
+:$put =and(127, 16)
+:$put =and(127, 128)
+:$put ='OR'
+:$put =or(16, 7)
+:$put =or(8, 7)
+:$put =or(0, 123)
+:$put ='XOR'
+:$put =xor(127, 127)
+:$put =xor(127, 16)
+:$put =xor(127, 128)
+:$put ='invert'
+:$put =and(invert(127), 65535)
+:$put =and(invert(16), 65535)
+:$put =and(invert(128), 65535)
+:$put =invert(1.0)
 :/^Results/,$wq! test.out
 ENDTEST
 
diff -Naur vim73.orig/src/testdir/test65.ok vim73/src/testdir/test65.ok
--- vim73.orig/src/testdir/test65.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test65.ok	2013-08-04 19:09:11.253941924 +0000
@@ -54,3 +54,20 @@
 float2nr
 123
 -123
+AND
+127
+16
+0
+OR
+23
+15
+123
+XOR
+0
+111
+255
+invert
+65408
+65519
+65407
+0
diff -Naur vim73.orig/src/testdir/test66.in vim73/src/testdir/test66.in
--- vim73.orig/src/testdir/test66.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test66.in	2013-08-04 19:09:11.253941924 +0000
@@ -3,12 +3,14 @@
 
 STARTTEST
 :so small.vim
+/^one
+fe4jRugvr1:'<,'>w! test.out
 /^abcdefgh
 4jI    j<<11|D
 7|a		
 7|a		   
 7|a	       	4k13|4j<
-:$-4,$w! test.out
+:$-5,$w >> test.out
 :$-4,$s/\s\+//g
 4kI    j<<
 7|a		
@@ -18,6 +20,12 @@
 :qa!
 ENDTEST
 
+one two three
+one two three
+one two three
+one two three
+one two three
+
 abcdefghijklmnopqrstuvwxyz
 abcdefghijklmnopqrstuvwxyz
 abcdefghijklmnopqrstuvwxyz
diff -Naur vim73.orig/src/testdir/test66.ok vim73/src/testdir/test66.ok
--- vim73.orig/src/testdir/test66.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test66.ok	2013-08-04 19:09:11.253941924 +0000
@@ -1,3 +1,9 @@
+on1 two three
+on1 two three
+on1 two three
+on1 two three
+on1 two three
+
     abcdefghijklmnopqrstuvwxyz
 abcdefghij
     abc	    defghijklmnopqrstuvwxyz
diff -Naur vim73.orig/src/testdir/test68.in vim73/src/testdir/test68.in
--- vim73.orig/src/testdir/test68.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test68.in	2013-08-04 19:09:11.257275247 +0000
@@ -51,6 +51,67 @@
 }
 
 STARTTEST
+/^{/+1
+:set tw=5 fo=tcn comments=:#
+A bjA b
+ENDTEST
+
+{
+  1 a
+# 1 a
+}
+
+STARTTEST
+/^{/+1
+:set tw=5 fo=qn comments=:#
+gwap
+ENDTEST
+
+{
+# 1 a b
+}
+
+STARTTEST
+/^{/+1
+:set tw=5 fo=q2 comments=:#
+gwap
+ENDTEST
+
+{
+# x
+#   a b
+}
+
+STARTTEST
+/^{/+2
+:set tw& fo=a
+I^^
+ENDTEST
+
+{
+   1aa
+   2bb
+}
+
+STARTTEST
+/mno pqr/
+:setl tw=20 fo=an12wcq comments=s1:/*,mb:*,ex:*/
+A vwx yz
+ENDTEST
+
+/* abc def ghi jkl 
+ *    mno pqr stu
+ */
+
+STARTTEST
+/^#/
+:setl tw=12 fo=tqnc comments=:#
+A foobar
+ENDTEST
+
+# 1 xxxxx
+
+STARTTEST
 :g/^STARTTEST/.,/^ENDTEST/d
 :1;/^Results/,$wq! test.out
 ENDTEST
diff -Naur vim73.orig/src/testdir/test68.ok vim73/src/testdir/test68.ok
--- vim73.orig/src/testdir/test68.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test68.ok	2013-08-04 19:09:11.260608571 +0000
@@ -33,3 +33,36 @@
 #a b
 }
 
+
+{
+  1 a
+    b
+# 1 a
+#   b
+}
+
+
+{
+# 1 a
+#   b
+}
+
+
+{
+# x a
+#   b
+}
+
+
+{ 1aa ^^2bb }
+
+
+/* abc def ghi jkl 
+ *    mno pqr stu 
+ *    vwx yz
+ */
+
+
+# 1 xxxxx
+#   foobar
+
diff -Naur vim73.orig/src/testdir/test69.in vim73/src/testdir/test69.in
--- vim73.orig/src/testdir/test69.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test69.in	2013-08-04 19:09:11.260608571 +0000
@@ -1,4 +1,6 @@
 Test for multi-byte text formatting.
+Also test, that 'mps' with multibyte chars works.
+And test "ra" on multi-byte characters.
 
 STARTTEST
 :so mbyte.vim
@@ -134,6 +136,24 @@
 }
 
 STARTTEST
+/^{/+1
+:set mps+=u2018:u2019
+d%
+ENDTEST
+
+{
+‘ two three ’ four
+}
+STARTTEST
+/^ra test
+jVjra
+ENDTEST
+
+ra test
+ａbbａ
+ａａb
+
+STARTTEST
 :g/^STARTTEST/.,/^ENDTEST/d
 :1;/^Results/,$wq! test.out
 ENDTEST
diff -Naur vim73.orig/src/testdir/test69.ok vim73/src/testdir/test69.ok
--- vim73.orig/src/testdir/test69.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test69.ok	2013-08-04 19:09:11.260608571 +0000
@@ -140,3 +140,12 @@
 a
 }
 
+
+{
+ four
+}
+
+ra test
+aaaa
+aaa
+
diff -Naur vim73.orig/src/testdir/test70.in vim73/src/testdir/test70.in
--- vim73.orig/src/testdir/test70.in	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test70.in	2013-08-04 19:09:11.263941894 +0000
@@ -41,9 +41,19 @@
 :if l2[2] == l2
 :let res = "OK"
 :else
-:let res = "FAILED"
+:let res = "FAILED: " . l2[2]
 :endif
 :call setline(search("^3"), "circular test " . res)
+:" funcrefs
+:mz (define vim:max (vim-eval "function('max')"))
+:mz (define m (vim:max '(1 100 8)))
+:let m = mzeval('m')
+:if m == 100
+:let fref_res = "OK"
+:else
+:let fref_res = "FAILED: " . m
+:end
+:call append(line('$'), 'funcrefs '. fref_res)
 :?^1?,$w! test.out
 :qa!
 ENDTEST
diff -Naur vim73.orig/src/testdir/test70.ok vim73/src/testdir/test70.ok
--- vim73.orig/src/testdir/test70.ok	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/testdir/test70.ok	2013-08-04 19:09:11.267275217 +0000
@@ -3,3 +3,4 @@
 2 line 2
 dictionary with list OK
 circular test OK
+funcrefs OK
diff -Naur vim73.orig/src/testdir/test71.in vim73/src/testdir/test71.in
--- vim73.orig/src/testdir/test71.in	2010-07-20 14:51:58.000000000 +0000
+++ vim73/src/testdir/test71.in	2013-08-04 19:09:11.267275217 +0000
@@ -1,14 +1,19 @@
 Test for encryption.
+The test data is in another file to avoid problems with 'encoding', especially
+cp932.
 
 STARTTEST
 :so small.vim
+:set enc=latin1
+:bwipe!
+:r test71a.in
 :/^start of text/+1
 :let text_lines = getline('.', line('.') + 2)
 :/^start of cm=zip bytes/+1
 :let cm0_bytes = getline('.', '.')
 :/^start of cm=blowfish bytes/+1
 :let cm1_bytes = getline('.', '.')
-:bwipe
+:bwipe!
 :call append(0, text_lines)
 :$d
 :X
@@ -60,16 +65,3 @@
 :qa!
 ENDTEST
 
-start of text
-01234567890123456789012345678901234567
-line 2  foo bar blah
-line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-end of text
-
-start of cm=zip bytes
-VimCrypt~01!lV'}MgVE#32U
-end of cm=zip bytes
-
-start of cm=blowfish bytes
-VimCrypt~02!k)#S=#MJAͥM!
-end of cm=blowfish bytes
diff -Naur vim73.orig/src/testdir/test71a.in vim73/src/testdir/test71a.in
--- vim73.orig/src/testdir/test71a.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test71a.in	2013-08-04 19:09:11.267275217 +0000
@@ -0,0 +1,14 @@
+
+start of text
+01234567890123456789012345678901234567
+line 2  foo bar blah
+line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+end of text
+
+start of cm=zip bytes
+VimCrypt~01!lV'}MgVE#32U
+end of cm=zip bytes
+
+start of cm=blowfish bytes
+VimCrypt~02!k)#S=#MJAͥM!
+end of cm=blowfish bytes
diff -Naur vim73.orig/src/testdir/test72.in vim73/src/testdir/test72.in
--- vim73.orig/src/testdir/test72.in	2010-08-07 11:26:43.000000000 +0000
+++ vim73/src/testdir/test72.in	2013-08-04 19:09:11.270608541 +0000
@@ -51,6 +51,12 @@
 :e Xtestfile
 uuu:w >>test.out
 :"
+:" Test that reading the undofiles when setting undofile works
+:set noundofile ul=0
+i
+u:e! Xtestfile
+:set undofile ul=100
+uuuuuu:w >>test.out
 :" And now with encryption, cryptmethod=zip
 :e! Xtestfile
 :set undofile cm=zip
diff -Naur vim73.orig/src/testdir/test72.ok vim73/src/testdir/test72.ok
--- vim73.orig/src/testdir/test72.ok	2010-05-30 20:39:12.000000000 +0000
+++ vim73/src/testdir/test72.ok	2013-08-04 19:09:11.270608541 +0000
@@ -7,6 +7,16 @@
 eight
 nine
 ten
+one
+two
+three
+four
+five
+six
+seven
+eight
+nine
+ten
 monday
 wednesday
 thursday
diff -Naur vim73.orig/src/testdir/test73.in vim73/src/testdir/test73.in
--- vim73.orig/src/testdir/test73.in	2010-08-15 11:02:37.000000000 +0000
+++ vim73/src/testdir/test73.in	2013-08-04 19:09:11.273941864 +0000
@@ -158,6 +158,16 @@
 :" Find the file containing 'E.T.' in the Xfind/in/path directory
 :find file	
 :exec "w >>" . test_out
+:"
+:" Test that completion works when path=.,,
+:"
+:set path=.,,
+:" Open Jimmy Hoffa file
+:e in/file.txt
+:exec "w >>" . test_out
+:" Search for the file containing Holy Grail in same directory as in/path.txt
+:find stu	
+:exec "w >>" . test_out
 :q
 :exec "cd " . cwd
 :call DeleteDirectory("Xfind")
diff -Naur vim73.orig/src/testdir/test73.ok vim73/src/testdir/test73.ok
--- vim73.orig/src/testdir/test73.ok	2010-08-15 11:02:37.000000000 +0000
+++ vim73/src/testdir/test73.ok	2013-08-04 19:09:11.273941864 +0000
@@ -17,3 +17,5 @@
 Voyager 2
 Jimmy Hoffa
 E.T.
+Jimmy Hoffa
+Another Holy Grail
diff -Naur vim73.orig/src/testdir/test74.in vim73/src/testdir/test74.in
--- vim73.orig/src/testdir/test74.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test74.in	2013-08-04 19:09:11.273941864 +0000
@@ -0,0 +1,36 @@
+" Tests for storing global variables in the .viminfo file vim: set ft=vim:
+
+STARTTEST
+:so small.vim
+:" Do all test in a separate window to avoid E211 when we recursively
+:" delete the Xfind directory during cleanup
+:"
+:" This will cause a few errors, do it silently.
+:set visualbell
+:set nocp viminfo+=!,nviminfo
+:let MY_GLOBAL_DICT={'foo': 1, 'bar': 0, 'longvarible': 1000}
+:" store a really long list, so line wrapping will occur in viminfo file
+:let MY_GLOBAL_LIST=range(1,100)
+:wv! Xviminfo
+:unlet MY_GLOBAL_DICT
+:unlet MY_GLOBAL_LIST
+:rv! Xviminfo
+:call delete('Xviminfo')
+:if exists("MY_GLOBAL_DICT")
+:redir >> test.out
+:echo MY_GLOBAL_DICT
+:redir end
+:endif
+:if exists("MY_GLOBAL_LIST")
+:redir >> test.out
+:echo MY_GLOBAL_LIST
+:redir end
+:endif
+:redir >> test.out
+:echo "foobar"
+:redir end
+:endif
+:qa!
+ENDTEST
+
+eof
diff -Naur vim73.orig/src/testdir/test74.ok vim73/src/testdir/test74.ok
--- vim73.orig/src/testdir/test74.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test74.ok	2013-08-04 19:09:11.273941864 +0000
@@ -0,0 +1,5 @@
+
+{'foo': 1, 'longvarible': 1000, 'bar': 0}
+[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
+
+foobar
diff -Naur vim73.orig/src/testdir/test75.in vim73/src/testdir/test75.in
--- vim73.orig/src/testdir/test75.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test75.in	2013-08-04 19:09:11.277275187 +0000
@@ -0,0 +1,24 @@
+" Tests for functions.
+
+STARTTEST
+:so small.vim
+:set cpo-=<
+:" Test maparg() with a string result
+:map foo<C-V> is<F4>foo
+:vnoremap <script> <buffer> <expr> <silent> bar isbar
+:call append('$', maparg('foo<C-V>'))
+:call append('$', string(maparg('foo<C-V>', '', 0, 1)))
+:call append('$', string(maparg('bar', '', 0, 1)))
+:map <buffer> <nowait> foo bar
+:call append('$', string(maparg('foo', '', 0, 1)))
+:"
+:map abc x<char-114>x
+:call append('$', maparg('abc'))
+:map abc y<S-char-114>y
+:call append('$', maparg('abc'))
+:"
+:/^eof/+1,$w! test.out
+:qa!
+ENDTEST
+
+eof
diff -Naur vim73.orig/src/testdir/test75.ok vim73/src/testdir/test75.ok
--- vim73.orig/src/testdir/test75.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test75.ok	2013-08-04 19:09:11.277275187 +0000
@@ -0,0 +1,6 @@
+is<F4>foo
+{'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'nowait': 0, 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
+{'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'nowait': 0, 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
+{'silent': 0, 'noremap': 0, 'lhs': 'foo', 'mode': ' ', 'nowait': 1, 'expr': 0, 'sid': 0, 'rhs': 'bar', 'buffer': 1}
+xrx
+yRy
diff -Naur vim73.orig/src/testdir/test76.in vim73/src/testdir/test76.in
--- vim73.orig/src/testdir/test76.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test76.in	2013-08-04 19:09:11.277275187 +0000
@@ -0,0 +1,46 @@
+Tests for completefunc/omnifunc. vim: set ft=vim :
+
+STARTTEST
+:"Test that nothing happens if the 'completefunc' opens
+:"a new window (no completion, no crash)
+:so small.vim
+:function! DummyCompleteOne(findstart, base)
+:  if a:findstart
+:    return 0
+:  else
+:    wincmd n
+:    return ['onedef', 'oneDEF']
+:  endif
+:endfunction
+:setlocal completefunc=DummyCompleteOne
+/^one
+A:q!
+:function! DummyCompleteTwo(findstart, base)
+:  if a:findstart
+:    wincmd n
+:    return 0
+:  else
+:    return ['twodef', 'twoDEF']
+:  endif
+:endfunction
+:setlocal completefunc=DummyCompleteTwo
+/^two
+A:q!
+:"Test that 'completefunc' works when it's OK.
+:function! DummyCompleteThree(findstart, base)
+:  if a:findstart
+:    return 0
+:  else
+:    return ['threedef', 'threeDEF']
+:  endif
+:endfunction
+:setlocal completefunc=DummyCompleteThree
+/^three
+A:/^+++/,/^three/w! test.out
+:qa!
+ENDTEST
+
++++
+one
+two
+three
diff -Naur vim73.orig/src/testdir/test76.ok vim73/src/testdir/test76.ok
--- vim73.orig/src/testdir/test76.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test76.ok	2013-08-04 19:09:11.280608511 +0000
@@ -0,0 +1,4 @@
++++
+
+two
+threeDEF
diff -Naur vim73.orig/src/testdir/test77.in vim73/src/testdir/test77.in
--- vim73.orig/src/testdir/test77.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test77.in	2013-08-04 19:09:11.280608511 +0000
@@ -0,0 +1,30 @@
+Inserts 2 million lines with consecutive integers starting from 1
+(essentially, the output of GNU's seq 1 2000000), writes them to Xtest
+and writes its cksum to test.out.
+
+We need 2 million lines to trigger a call to mf_hash_grow().  If it would mess
+up the lines the checksum would differ.
+
+cksum is part of POSIX and so should be available on most Unixes.
+If it isn't available then the test will be skipped.
+
+STARTTEST
+:so small.vim
+:if !executable("cksum")
+: e! test.ok
+: w! test.out
+: qa!
+:endif
+:set fileformat=unix undolevels=-1
+ggdG
+:let i = 1
+:while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
+ggdd
+:w! Xtest
+:r !cksum Xtest
+:s/\s/ /g
+:set fileformat&
+:.w! test.out
+:qa!
+ENDTEST
+
diff -Naur vim73.orig/src/testdir/test77.ok vim73/src/testdir/test77.ok
--- vim73.orig/src/testdir/test77.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test77.ok	2013-08-04 19:09:11.280608511 +0000
@@ -0,0 +1 @@
+3678979763 14888896 Xtest
diff -Naur vim73.orig/src/testdir/test78.in vim73/src/testdir/test78.in
--- vim73.orig/src/testdir/test78.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test78.in	2013-08-04 19:09:11.283941834 +0000
@@ -0,0 +1,46 @@
+Inserts 10000 lines with text to fill the swap file with two levels of pointer
+blocks.  Then recovers from the swap file and checks all text is restored.
+
+We need about 10000 lines of 100 characters to get two levels of pointer
+blocks.
+
+STARTTEST
+:so small.vim
+:set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo
+:e! Xtest
+ggdG
+:let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
+:let i = 1
+:let linecount = 10000
+:while i <= linecount | call append(i - 1, i . text) | let i += 1 | endwhile
+:preserve
+:" get the name of the swap file
+:redir => swapname
+:swapname
+:redir END
+:let swapname = substitute(swapname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
+:" make a copy of the swap file in Xswap
+:set bin
+:exe 'sp ' . swapname
+:w! Xswap
+:echo swapname
+:set nobin
+:new
+:only!
+:bwipe! Xtest
+:call rename('Xswap', swapname)
+:recover Xtest
+:call delete(swapname)
+:new
+:call append(0, 'recovery start')
+:wincmd w
+:let linedollar = line('$')
+:if linedollar < linecount | exe 'wincmd w' | call append(line('$'), "expected " . linecount . " lines but found only " . linedollar) | exe 'wincmd w' | let linecount = linedollar | endif
+:let i = 1
+:while i <= linecount | if getline(i) != i . text | exe 'wincmd w' | call append(line('$'), i . ' differs') | exe 'wincmd w' | endif | let i += 1 | endwhile
+:q!
+:call append(line('$'), 'recovery end')
+:w! test.out
+:qa!
+ENDTEST
+
diff -Naur vim73.orig/src/testdir/test78.ok vim73/src/testdir/test78.ok
--- vim73.orig/src/testdir/test78.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test78.ok	2013-08-04 19:09:11.283941834 +0000
@@ -0,0 +1,3 @@
+recovery start
+
+recovery end
diff -Naur vim73.orig/src/testdir/test79.in vim73/src/testdir/test79.in
--- vim73.orig/src/testdir/test79.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test79.in	2013-08-04 19:09:11.283941834 +0000
@@ -0,0 +1,226 @@
+Test for *sub-replace-special* and *sub-replace-expression* on :substitute.
+Test for submatch() on :substitue.
+Test for *:s%* on :substitute.
+
+STARTTEST
+:so small.vim
+ENDTEST
+
+Results of test71:
+
+STARTTEST
+:set magic
+:set cpo&
+/^TEST/
+j:s/A/&&/
+j:s/B/\&/
+j:s/C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/
+j:s/D/d/
+j:s/E/~/
+j:s/F/\~/
+j:s/G/\ugg/
+j:s/H/\Uh\Eh/
+j:s/I/\lII/
+j:s/J/\LJ\EJ/
+j:s/K/\Uk\ek/
+j:s/L//
+j:s/M/\r/
+j:s/N/\/
+j:s/O/\n/
+j:s/P/\b/
+j:s/Q/\t/
+j:s/R/\\/
+j:s/S/\c/
+j:s/T/ /
+j:s/U/\L\uuUu\l\EU/
+j:s/V/\U\lVvV\u\Ev/
+ENDTEST
+
+TEST_1:
+A
+B
+C123456789
+D
+E
+F
+G
+H
+I
+J
+K
+lLl
+mMm
+nNn
+oOo
+pPp
+qQq
+rRr
+sSs
+tTt
+U
+V
+
+STARTTEST
+:set nomagic
+:set cpo&
+/^TEST/
+j:s/A/&&/
+j:s/B/\&/
+j:s/\mC\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/
+j:s/D/d/
+j:s/E/~/
+j:s/F/\~/
+j:s/G/\ugg/
+j:s/H/\Uh\Eh/
+j:s/I/\lII/
+j:s/J/\LJ\EJ/
+j:s/K/\Uk\ek/
+j:s/L//
+j:s/M/\r/
+j:s/N/\/
+j:s/O/\n/
+j:s/P/\b/
+j:s/Q/\t/
+j:s/R/\\/
+j:s/S/\c/
+j:s/T/ /
+j:s/U/\L\uuUu\l\EU/
+j:s/V/\U\lVvV\u\Ev/
+ENDTEST
+
+TEST_2:
+A
+B
+C123456789
+D
+E
+F
+G
+H
+I
+J
+K
+lLl
+mMm
+nNn
+oOo
+pPp
+qQq
+rRr
+sSs
+tTt
+U
+V
+
+STARTTEST
+:set magic&
+:set cpo&
+/^TEST/
+j:s/A/\='\'/
+j:s/B/\='\\'/
+j:s/C/\=''/
+j:s/D/\='\'/
+j:s/E/\='\\'/
+j:s/F/\='\r'/
+j:s/G/\=' '/
+j:s/H/\='\ '/
+j:s/I/\='\\ '/
+j:s/J/\='\n'/
+j:s/K/\="\r"/
+j:s/L/\="\n"/
+ENDTEST
+
+TEST_3:
+aAa
+bBb
+cCc
+dDd
+eEe
+fFf
+gGg
+hHh
+iIi
+jJj
+kKk
+lLl
+
+STARTTEST
+:set magic&
+:set cpo&
+/^TEST/
+j:s/A/\=substitute(submatch(0), '.', '\', '')/
+j:s/B/\=substitute(submatch(0), '.', '\\', '')/
+j:s/C/\=substitute(submatch(0), '.', '', '')/
+j:s/D/\=substitute(submatch(0), '.', '\', '')/
+j:s/E/\=substitute(submatch(0), '.', '\\', '')/
+j:s/F/\=substitute(submatch(0), '.', '\r', '')/
+j:s/G/\=substitute(submatch(0), '.', ' ', '')/
+j:s/H/\=substitute(submatch(0), '.', '\ ', '')/
+j:s/I/\=substitute(submatch(0), '.', '\\ ', '')/
+j:s/J/\=substitute(submatch(0), '.', '\n', '')/
+j:s/K/\=substitute(submatch(0), '.', "\r", '')/
+j:s/L/\=substitute(submatch(0), '.', "\n", '')/
+ENDTEST
+
+TEST_4:
+aAa
+bBb
+cCc
+dDd
+eEe
+fFf
+gGg
+hHh
+iIi
+jJj
+kKk
+lLl
+
+STARTTEST
+:set magic&
+:set cpo&
+/^TEST/
+j:s/A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\=submatch(0) . submatch(9) . submatch(8) . submatch(7) . submatch(6) . submatch(5) . submatch(4) . submatch(3) . submatch(2) . submatch(1)/
+ENDTEST
+
+TEST_5:
+A123456789
+
+STARTTEST
+:set magic&
+/^TEST/
+:set cpo+=/
+j:s/A/a/
+j:s/B/%/
+:set cpo-=/
+j:s/C/c/
+j:s/D/%/
+ENDTEST
+
+TEST_6:
+A
+B
+C
+D
+
+STARTTEST
+:set magic&
+:set cpo&
+/^TEST_7/
+j:s/A./\=submatch(0)/
+j:s/B./\=submatch(0)/
+/^Q$
+:s/Q[^\n]Q/\=submatch(0)."foobar"/
+:" Avoid :s error breaks dotest map on Windows.
+ENDTEST
+
+TEST_7:
+AA
+B B
+Q
+Q
+
+STARTTEST
+:g/^STARTTEST/.,/^ENDTEST/d
+:1;/^Results/,$wq! test.out
+ENDTEST
diff -Naur vim73.orig/src/testdir/test79.ok vim73/src/testdir/test79.ok
--- vim73.orig/src/testdir/test79.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test79.ok	2013-08-04 19:09:11.287275157 +0000
@@ -0,0 +1,124 @@
+Results of test71:
+
+
+TEST_1:
+AA
+&
+C123456789987654321
+d
+d
+~
+Gg
+Hh
+iI
+jJ
+Kk
+l
+l
+m
+m
+nn
+o o
+pp
+q	q
+r\r
+scs
+t t
+UuuU
+vVVv
+
+
+TEST_2:
+&&
+B
+C123456789987654321
+d
+~
+~
+Gg
+Hh
+iI
+jJ
+Kk
+l
+l
+m
+m
+nn
+o o
+pp
+q	q
+r\r
+scs
+t t
+UuuU
+vVVv
+
+
+TEST_3:
+a\a
+b\\b
+c
+c
+d\
+d
+e\\
+e
+f\rf
+g
+g
+h\
+h
+i\\
+i
+j\nj
+k
+k
+l
+l
+
+
+TEST_4:
+a\a
+b\b
+c
+c
+d
+d
+e\
+e
+f
+f
+g
+g
+h
+h
+i\
+i
+j
+j
+k
+k
+l
+l
+
+
+TEST_5:
+A123456789987654321
+
+
+TEST_6:
+a
+a
+c
+%
+
+
+TEST_7:
+A
+A
+B
+B
+Q
+Q
+
diff -Naur vim73.orig/src/testdir/test80.in vim73/src/testdir/test80.in
--- vim73.orig/src/testdir/test80.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test80.in	2013-08-04 19:09:11.287275157 +0000
@@ -0,0 +1,180 @@
+Test for *sub-replace-special* and *sub-replace-expression* on substitue().
+Test for submatch() on substitue().
+Test for *:s%* on :substitute.
+
+STARTTEST
+:so small.vim
+ENDTEST
+
+TEST_1:
+
+STARTTEST
+:set magic
+:set cpo&
+:$put =\"\n\nTEST_1:\"
+:$put =substitute('A', 'A', '&&', '')
+:$put =substitute('B', 'B', '\&', '')
+:$put =substitute('C123456789', 'C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\0\9\8\7\6\5\4\3\2\1', '')
+:$put =substitute('D', 'D', 'd', '')
+:$put =substitute('E', 'E', '~', '')
+:$put =substitute('F', 'F', '\~', '')
+:$put =substitute('G', 'G', '\ugg', '')
+:$put =substitute('H', 'H', '\Uh\Eh', '')
+:$put =substitute('I', 'I', '\lII', '')
+:$put =substitute('J', 'J', '\LJ\EJ', '')
+:$put =substitute('K', 'K', '\Uk\ek', '')
+:$put =substitute('lLl', 'L', '', '')
+:$put =substitute('mMm', 'M', '\r', '')
+:$put =substitute('nNn', 'N', '\', '')
+:$put =substitute('oOo', 'O', '\n', '')
+:$put =substitute('pPp', 'P', '\b', '')
+:$put =substitute('qQq', 'Q', '\t', '')
+:$put =substitute('rRr', 'R', '\\', '')
+:$put =substitute('sSs', 'S', '\c', '')
+:$put =substitute('uUu', 'U', \"\n\", '')
+:$put =substitute('vVv', 'V', \"\b\", '')
+:$put =substitute('wWw', 'W', \"\\\", '')
+:$put =substitute('xXx', 'X', \"\r\", '')
+:$put =substitute('Y', 'Y', '\L\uyYy\l\EY', '')
+:$put =substitute('Z', 'Z', '\U\lZzZ\u\Ez', '')
+/^TEST_2
+ENDTEST
+
+TEST_2:
+
+STARTTEST
+:set nomagic
+:set cpo&
+:$put =\"\n\nTEST_2:\"
+:$put =substitute('A', 'A', '&&', '')
+:$put =substitute('B', 'B', '\&', '')
+:$put =substitute('C123456789', 'C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\0\9\8\7\6\5\4\3\2\1', '')
+:$put =substitute('D', 'D', 'd', '')
+:$put =substitute('E', 'E', '~', '')
+:$put =substitute('F', 'F', '\~', '')
+:$put =substitute('G', 'G', '\ugg', '')
+:$put =substitute('H', 'H', '\Uh\Eh', '')
+:$put =substitute('I', 'I', '\lII', '')
+:$put =substitute('J', 'J', '\LJ\EJ', '')
+:$put =substitute('K', 'K', '\Uk\ek', '')
+:$put =substitute('lLl', 'L', '', '')
+:$put =substitute('mMm', 'M', '\r', '')
+:$put =substitute('nNn', 'N', '\', '')
+:$put =substitute('oOo', 'O', '\n', '')
+:$put =substitute('pPp', 'P', '\b', '')
+:$put =substitute('qQq', 'Q', '\t', '')
+:$put =substitute('rRr', 'R', '\\', '')
+:$put =substitute('sSs', 'S', '\c', '')
+:$put =substitute('tTt', 'T', \"\r\", '')
+:$put =substitute('uUu', 'U', \"\n\", '')
+:$put =substitute('vVv', 'V', \"\b\", '')
+:$put =substitute('wWw', 'W', \"\\\", '')
+:$put =substitute('X', 'X', '\L\uxXx\l\EX', '')
+:$put =substitute('Y', 'Y', '\U\lYyY\u\Ey', '')
+/^TEST_3
+ENDTEST
+
+TEST_3:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_3:\"
+:let y = substitute('aAa', 'A', '\="\\"', '')           | $put =y
+:let y = substitute('bBb', 'B', '\="\\\\"', '')         | $put =y
+:let y = substitute('cCc', 'C', '\=""', '')         | $put =y
+:let y = substitute('dDd', 'D', '\="\\"', '')       | $put =y
+:let y = substitute('eEe', 'E', '\="\\\\"', '')     | $put =y
+:let y = substitute('fFf', 'F', '\="\\r"', '')          | $put =y
+:let y = substitute('jJj', 'J', '\="\\n"', '')          | $put =y
+:let y = substitute('kKk', 'K', '\="\r"', '')           | $put =y
+:let y = substitute('lLl', 'L', '\="\n"', '')           | $put =y
+/^TEST_4
+ENDTEST
+
+TEST_4:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_4:\"
+:let y = substitute('aAa', 'A', '\=substitute(submatch(0), ".", "\\", "")', '')       | $put =y
+:let y = substitute('bBb', 'B', '\=substitute(submatch(0), ".", "\\\\", "")', '')     | $put =y
+:let y = substitute('cCc', 'C', '\=substitute(submatch(0), ".", "", "")', '')     | $put =y
+:let y = substitute('dDd', 'D', '\=substitute(submatch(0), ".", "\\", "")', '')   | $put =y
+:let y = substitute('eEe', 'E', '\=substitute(submatch(0), ".", "\\\\", "")', '') | $put =y
+:let y = substitute('fFf', 'F', '\=substitute(submatch(0), ".", "\\r", "")', '')      | $put =y
+:let y = substitute('jJj', 'J', '\=substitute(submatch(0), ".", "\\n", "")', '')      | $put =y
+:let y = substitute('kKk', 'K', '\=substitute(submatch(0), ".", "\r", "")', '')       | $put =y
+:let y = substitute('lLl', 'L', '\=substitute(submatch(0), ".", "\n", "")', '')       | $put =y
+/^TEST_5
+ENDTEST
+
+TEST_5:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_5:\"
+:$put =substitute('A123456789', 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\=submatch(0) . submatch(9) . submatch(8) . submatch(7) . submatch(6) . submatch(5) . submatch(4) . submatch(3) . submatch(2) . submatch(1)', '')
+/^TEST_6
+ENDTEST
+
+TEST_6:
+
+STARTTEST
+:set magic&
+:$put =\"\n\nTEST_6:\"
+:set cpo+=/
+:$put =substitute('A', 'A', 'a', '')
+:$put =substitute('B', 'B', '%', '')
+:set cpo-=/
+:$put =substitute('C', 'C', 'c', '')
+:$put =substitute('D', 'D', '%', '')
+/^TEST_7
+ENDTEST
+
+TEST_7:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_7:\"
+:$put =substitute('AA', 'A.', '\=submatch(0)', '')
+:$put =substitute(\"B\nB\", 'B.', '\=submatch(0)', '')
+/^TEST_8
+ENDTEST
+
+TEST_8:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_8:\"
+:$put =',,X'
+:s/\(^\|,\)\ze\(,\|X\)/\1N/g
+:$put =',,Y'
+:s/\(^\|,\)\ze\(,\|Y\)/\1N/gc
+a:$put =',,Z'
+:s/\(^\|,\)\ze\(,\|Z\)/\1N/gc
+yy/^TEST_9:
+ENDTEST
+
+TEST_9:
+
+STARTTEST
+:set magic&
+:set cpo&
+:$put =\"\n\nTEST_9:\"
+:$put ='xxx'
+:s/x/X/gc
+yyq/^TEST_10:
+ENDTEST
+
+TEST_10:
+
+STARTTEST
+:/^Results/,$wq! test.out
+ENDTEST
+
+Results of test72:
diff -Naur vim73.orig/src/testdir/test80.ok vim73/src/testdir/test80.ok
--- vim73.orig/src/testdir/test80.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test80.ok	2013-08-04 19:09:11.290608481 +0000
@@ -0,0 +1,115 @@
+Results of test72:
+
+
+TEST_1:
+AA
+&
+C123456789987654321
+d
+~
+~
+Gg
+Hh
+iI
+jJ
+Kk
+ll
+mm
+nn
+o
+o
+pp
+q	q
+r\r
+scs
+u
+u
+vv
+w\w
+xx
+YyyY
+zZZz
+
+
+TEST_2:
+AA
+&
+C123456789987654321
+d
+~
+~
+Gg
+Hh
+iI
+jJ
+Kk
+ll
+mm
+nn
+o
+o
+pp
+q	q
+r\r
+scs
+tt
+u
+u
+vv
+w\w
+XxxX
+yYYy
+
+
+TEST_3:
+a\a
+b\\b
+cc
+d\d
+e\\e
+f\rf
+j\nj
+kk
+l
+l
+
+
+TEST_4:
+a\a
+b\b
+cc
+dd
+e\e
+ff
+j
+j
+kk
+l
+l
+
+
+TEST_5:
+A123456789987654321
+
+
+TEST_6:
+a
+%
+c
+%
+
+
+TEST_7:
+AA
+B
+B
+
+
+TEST_8:
+N,,NX
+N,,NY
+N,,NZ
+
+
+TEST_9:
+XXx
diff -Naur vim73.orig/src/testdir/test81.in vim73/src/testdir/test81.in
--- vim73.orig/src/testdir/test81.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test81.in	2013-08-04 19:09:11.290608481 +0000
@@ -0,0 +1,22 @@
+Test for t movement command and 'cpo-;' setting
+
+STARTTEST
+:set nocompatible viminfo+=nviminfo
+:set cpo-=;
+/firstline/
+j0tt;D
+0fz;D
+$Fy;D
+$Ty;D:set cpo+=;
+j0tt;;D
+$Ty;;D:?firstline?+1,$w! test.out
+:qa!
+ENDTEST
+
+firstline
+aaa two three four
+    zzz
+yyy   
+bbb yee yoo four
+ccc two three four
+ddd yee yoo four
diff -Naur vim73.orig/src/testdir/test81.ok vim73/src/testdir/test81.ok
--- vim73.orig/src/testdir/test81.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test81.ok	2013-08-04 19:09:11.290608481 +0000
@@ -0,0 +1,6 @@
+aaa two
+    z
+y
+bbb y
+ccc
+ddd yee y
diff -Naur vim73.orig/src/testdir/test82.in vim73/src/testdir/test82.in
--- vim73.orig/src/testdir/test82.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test82.in	2013-08-04 19:09:11.293941804 +0000
@@ -0,0 +1,93 @@
+Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
+
+STARTTEST
+:so small.vim
+:if !has("multi_byte")
+: e! test.ok
+: w! test.out
+: qa!
+:endif
+:set enc=utf8
+ggdG
+:
+:function! Ch(a, op, b, expected)
+:  if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
+:    call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
+:  else
+:    let b:passed += 1
+:  endif
+:endfunction
+:
+:function! Chk(a, b, result)
+:  if a:result == 0
+:    call Ch(a:a, '==?', a:b, 1)
+:    call Ch(a:a, '!=?', a:b, 0)
+:    call Ch(a:a, '<=?', a:b, 1)
+:    call Ch(a:a, '>=?', a:b, 1)
+:    call Ch(a:a, '<?', a:b, 0)
+:    call Ch(a:a, '>?', a:b, 0)
+:  elseif a:result > 0
+:    call Ch(a:a, '==?', a:b, 0)
+:    call Ch(a:a, '!=?', a:b, 1)
+:    call Ch(a:a, '<=?', a:b, 0)
+:    call Ch(a:a, '>=?', a:b, 1)
+:    call Ch(a:a, '<?', a:b, 0)
+:    call Ch(a:a, '>?', a:b, 1)
+:  else
+:    call Ch(a:a, '==?', a:b, 0)
+:    call Ch(a:a, '!=?', a:b, 1)
+:    call Ch(a:a, '<=?', a:b, 1)
+:    call Ch(a:a, '>=?', a:b, 0)
+:    call Ch(a:a, '<?', a:b, 1)
+:    call Ch(a:a, '>?', a:b, 0)
+:  endif
+:endfunction
+:
+:function! Check(a, b, result)
+:  call Chk(a:a, a:b, a:result)
+:  call Chk(a:b, a:a, -a:result)
+:endfunction
+:
+:function! LT(a, b)
+:  call Check(a:a, a:b, -1)
+:endfunction
+:
+:function! GT(a, b)
+:  call Check(a:a, a:b, 1)
+:endfunction
+:
+:function! EQ(a, b)
+:  call Check(a:a, a:b, 0)
+:endfunction
+:
+:let b:passed=0
+:call EQ('', '')
+:call LT('', 'a')
+:call EQ('abc', 'abc')
+:call EQ('Abc', 'abC')
+:call LT('ab', 'abc')
+:call LT('AB', 'abc')
+:call LT('ab', 'aBc')
+:call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
+:call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
+:call EQ('\xe2\x84\xaa', 'k')
+:call LT('\xe2\x84\xaa', 'kkkkkk')
+:call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
+:call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
+:call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
+:call EQ('Abc\x80', 'AbC\x80')
+:call LT('Abc\x80', 'AbC\x81')
+:call LT('Abc', 'AbC\x80')
+:call LT('abc\x80DEF', 'abc\x80def')  " case folding stops at the first bad character
+:call LT('\xc3XYZ', '\xc3xyz')
+:call EQ('\xef\xbc\xba', '\xef\xbd\x9a')  " FF3A (upper), FF5A (lower)
+:call GT('\xef\xbc\xba', '\xef\xbc\xff')  " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
+:call LT('\xc3', '\xc3\x83')
+:call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
+:for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
+:for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
+:for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
+:call append(0, printf('%d checks passed', b:passed))
+:wq! test.out
+ENDTEST
+
diff -Naur vim73.orig/src/testdir/test82.ok vim73/src/testdir/test82.ok
--- vim73.orig/src/testdir/test82.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test82.ok	2013-08-04 19:09:11.293941804 +0000
@@ -0,0 +1,2 @@
+3732 checks passed
+
diff -Naur vim73.orig/src/testdir/test83-tags2 vim73/src/testdir/test83-tags2
--- vim73.orig/src/testdir/test83-tags2	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test83-tags2	2013-08-04 19:09:11.293941804 +0000
@@ -0,0 +1,2 @@
+!_TAG_FILE_ENCODING	cp932	//
+`ab	Xtags2.txt	/`ab
diff -Naur vim73.orig/src/testdir/test83-tags3 vim73/src/testdir/test83-tags3
--- vim73.orig/src/testdir/test83-tags3	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test83-tags3	2013-08-04 19:09:11.297275127 +0000
@@ -0,0 +1,102 @@
+!_TAG_FILE_SORTED	1	//
+!_TAG_FILE_ENCODING	cp932	//
+abc1	Xtags3.txt	/`ab
+abc2	Xtags3.txt	/`ab
+abc3	Xtags3.txt	/`ab
+abc4	Xtags3.txt	/`ab
+abc5	Xtags3.txt	/`ab
+abc6	Xtags3.txt	/`ab
+abc7	Xtags3.txt	/`ab
+abc8	Xtags3.txt	/`ab
+abc9	Xtags3.txt	/`ab
+abc10	Xtags3.txt	/`ab
+abc11	Xtags3.txt	/`ab
+abc12	Xtags3.txt	/`ab
+abc13	Xtags3.txt	/`ab
+abc14	Xtags3.txt	/`ab
+abc15	Xtags3.txt	/`ab
+abc16	Xtags3.txt	/`ab
+abc17	Xtags3.txt	/`ab
+abc18	Xtags3.txt	/`ab
+abc19	Xtags3.txt	/`ab
+abc20	Xtags3.txt	/`ab
+abc21	Xtags3.txt	/`ab
+abc22	Xtags3.txt	/`ab
+abc23	Xtags3.txt	/`ab
+abc24	Xtags3.txt	/`ab
+abc25	Xtags3.txt	/`ab
+abc26	Xtags3.txt	/`ab
+abc27	Xtags3.txt	/`ab
+abc28	Xtags3.txt	/`ab
+abc29	Xtags3.txt	/`ab
+abc30	Xtags3.txt	/`ab
+abc31	Xtags3.txt	/`ab
+abc32	Xtags3.txt	/`ab
+abc33	Xtags3.txt	/`ab
+abc34	Xtags3.txt	/`ab
+abc35	Xtags3.txt	/`ab
+abc36	Xtags3.txt	/`ab
+abc37	Xtags3.txt	/`ab
+abc38	Xtags3.txt	/`ab
+abc39	Xtags3.txt	/`ab
+abc40	Xtags3.txt	/`ab
+abc41	Xtags3.txt	/`ab
+abc42	Xtags3.txt	/`ab
+abc43	Xtags3.txt	/`ab
+abc44	Xtags3.txt	/`ab
+abc45	Xtags3.txt	/`ab
+abc46	Xtags3.txt	/`ab
+abc47	Xtags3.txt	/`ab
+abc48	Xtags3.txt	/`ab
+abc49	Xtags3.txt	/`ab
+abc50	Xtags3.txt	/`ab
+abc51	Xtags3.txt	/`ab
+abc52	Xtags3.txt	/`ab
+abc53	Xtags3.txt	/`ab
+abc54	Xtags3.txt	/`ab
+abc55	Xtags3.txt	/`ab
+abc56	Xtags3.txt	/`ab
+abc57	Xtags3.txt	/`ab
+abc58	Xtags3.txt	/`ab
+abc59	Xtags3.txt	/`ab
+abc60	Xtags3.txt	/`ab
+abc61	Xtags3.txt	/`ab
+abc62	Xtags3.txt	/`ab
+abc63	Xtags3.txt	/`ab
+abc64	Xtags3.txt	/`ab
+abc65	Xtags3.txt	/`ab
+abc66	Xtags3.txt	/`ab
+abc67	Xtags3.txt	/`ab
+abc68	Xtags3.txt	/`ab
+abc69	Xtags3.txt	/`ab
+abc70	Xtags3.txt	/`ab
+abc71	Xtags3.txt	/`ab
+abc72	Xtags3.txt	/`ab
+abc73	Xtags3.txt	/`ab
+abc74	Xtags3.txt	/`ab
+abc75	Xtags3.txt	/`ab
+abc76	Xtags3.txt	/`ab
+abc77	Xtags3.txt	/`ab
+abc78	Xtags3.txt	/`ab
+abc79	Xtags3.txt	/`ab
+abc80	Xtags3.txt	/`ab
+abc81	Xtags3.txt	/`ab
+abc82	Xtags3.txt	/`ab
+abc83	Xtags3.txt	/`ab
+abc84	Xtags3.txt	/`ab
+abc85	Xtags3.txt	/`ab
+abc86	Xtags3.txt	/`ab
+abc87	Xtags3.txt	/`ab
+abc88	Xtags3.txt	/`ab
+abc89	Xtags3.txt	/`ab
+abc90	Xtags3.txt	/`ab
+abc91	Xtags3.txt	/`ab
+abc92	Xtags3.txt	/`ab
+abc93	Xtags3.txt	/`ab
+abc94	Xtags3.txt	/`ab
+abc95	Xtags3.txt	/`ab
+abc96	Xtags3.txt	/`ab
+abc97	Xtags3.txt	/`ab
+abc98	Xtags3.txt	/`ab
+abc99	Xtags3.txt	/`ab
+abc100	Xtags3.txt	/`ab
diff -Naur vim73.orig/src/testdir/test83.in vim73/src/testdir/test83.in
--- vim73.orig/src/testdir/test83.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test83.in	2013-08-04 19:09:11.297275127 +0000
@@ -0,0 +1,76 @@
+Tests for tag search with !_TAG_FILE_ENCODING.
+
+STARTTEST
+:so mbyte.vim
+:set enc=utf8
+:if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
+: e! test.ok
+: w! test.out
+: qa!
+:endif
+
+:/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
+:/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
+:/^text for tags3$/,/^text for tags3$/+1w! Xtags3.txt
+:/^tags1$/+1,/^tags1-end$/-1w! Xtags1
+
+ggdG
+
+:call setline('.', 'Results of test83')
+
+:" case1:
+:new
+:set tags=Xtags1
+:let v:errmsg = ''
+:tag abcdefghijklmnopqrs
+:if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
+: close
+: put ='case1: failed'
+:else
+: close
+: put ='case1: ok'
+:endif
+
+:" case2:
+:new
+:set tags=test83-tags2
+:let v:errmsg = ''
+:tag /.ＢＣ
+:if v:errmsg =~ 'E426:' || getline('.') != 'ＡＢＣ'
+: close
+: put ='case2: failed'
+:else
+: close
+: put ='case2: ok'
+:endif
+
+:" case3:
+:new
+:set tags=test83-tags3
+:let v:errmsg = ''
+:tag abc50
+:if v:errmsg =~ 'E426:' || getline('.') != 'ＡＢＣ'
+: close
+: put ='case3: failed'
+:else
+: close
+: put ='case3: ok'
+:endif
+:close
+
+:wq! test.out
+ENDTEST
+
+text for tags1
+abcdefghijklmnopqrs
+
+text for tags2
+ＡＢＣ
+
+text for tags3
+ＡＢＣ
+
+tags1
+!_TAG_FILE_ENCODING	utf-8	//
+abcdefghijklmnopqrs	Xtags1.txt	/abcdefghijklmnopqrs
+tags1-end
diff -Naur vim73.orig/src/testdir/test83.ok vim73/src/testdir/test83.ok
--- vim73.orig/src/testdir/test83.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test83.ok	2013-08-04 19:09:11.297275127 +0000
@@ -0,0 +1,4 @@
+Results of test83
+case1: ok
+case2: ok
+case3: ok
diff -Naur vim73.orig/src/testdir/test84.in vim73/src/testdir/test84.in
--- vim73.orig/src/testdir/test84.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test84.in	2013-08-04 19:09:11.297275127 +0000
@@ -0,0 +1,35 @@
+Tests for curswant not changing when setting an option
+
+STARTTEST
+:so small.vim
+:/^start target options$/+1,/^end target options$/-1 yank
+:let target_option_names = split(@0)
+:function TestCurswant(option_name)
+:  normal! ggf8j
+:  let curswant_before = winsaveview().curswant
+:  execute 'let' '&'.a:option_name '=' '&'.a:option_name
+:  let curswant_after = winsaveview().curswant
+:  return [a:option_name, curswant_before, curswant_after]
+:endfunction
+:
+:new
+:put =['1234567890', '12345']
+:1 delete _
+:let result = []
+:for option_name in target_option_names
+:  call add(result, TestCurswant(option_name))
+:endfor
+:
+:new
+:put =map(copy(result), 'join(v:val, '' '')')
+:1 delete _
+:write test.out
+:
+:qall!
+ENDTEST
+
+start target options
+	tabstop
+	timeoutlen
+	ttimeoutlen
+end target options
diff -Naur vim73.orig/src/testdir/test84.ok vim73/src/testdir/test84.ok
--- vim73.orig/src/testdir/test84.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test84.ok	2013-08-04 19:09:11.300608450 +0000
@@ -0,0 +1,3 @@
+tabstop 7 4
+timeoutlen 7 7
+ttimeoutlen 7 7
diff -Naur vim73.orig/src/testdir/test85.in vim73/src/testdir/test85.in
--- vim73.orig/src/testdir/test85.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test85.in	2013-08-04 19:09:11.300608450 +0000
@@ -0,0 +1,85 @@
+Test for Lua interface and luaeval() function
+
+STARTTEST
+:so small.vim
+:so lua.vim
+:set nocompatible viminfo+=nviminfo
+:lua l = vim.list():add"item0":add"dictionary with list OK":add"item2"
+:lua h = vim.dict(); h.list = l
+:call garbagecollect()
+/^1
+:" change buffer contents
+:lua curbuf = vim.buffer()
+:lua curline = vim.eval"line('.')"
+:lua curbuf[curline] = "1 changed line 1"
+:" scalar test
+:let tmp_string = luaeval('"string"')
+:let tmp_1000 = luaeval('1000')
+:if printf("%s%.0f", tmp_string, tmp_1000) == "string1000"
+:let scalar_res = "OK"
+:else
+:let scalar_res = "FAILED"
+:endif
+:call append(search("^1"), "scalar test " . scalar_res)
+:" dictionary containing a list
+:let tmp = luaeval("h").list[1]
+:/^2/put =tmp
+:" circular list (at the same time test lists containing lists)
+:lua l[2] = l
+:let l2 = luaeval("h").list
+:if l2[2] == l2
+:let res = "OK"
+:else
+:let res = "FAILED"
+:endif
+:call setline(search("^3"), "circular test " . res)
+
+:let l = []
+:lua l = vim.eval("l")
+:lua l:add(123)
+:lua l:add("abc")
+:lua l:add(vim.eval("[1, 2, 3]"))
+:lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}"))
+:lua l:insert(123)
+:lua l:insert("abc")
+:lua l:insert(vim.eval("[1, 2, 3]"))
+:lua l:insert(vim.eval("{'a':1, 'b':2, 'c':3}"))
+:lua l[0] = l[0]
+:lua l[1] = l[1]
+:lua l[2] = l[2]
+:lua l[3] = l[3]
+:lua l[0] = 123
+:lua l[1] = "abc"
+:lua l[2] = vim.eval("[1, 2, 3]")
+:lua l[3] = vim.eval("{'a':1, 'b':2, 'c':3}")
+:lua l[3] = nil
+:lua l[2] = nil
+:lua l[1] = nil
+:lua l[0] = nil
+:lua l = nil
+:$put =string(l)
+
+:let d = {}
+:lua d = vim.eval("d")
+:lua d[0] = 123
+:lua d[1] = "abc"
+:lua d[2] = vim.eval("[1, 2, 3]")
+:lua d[3] = vim.eval("{'a':1, 'b':2, 'c':3}")
+:lua d[4] = d[0]
+:lua d[5] = d[1]
+:lua d[6] = d[2]
+:lua d[7] = d[3]
+:lua d[3] = nil
+:lua d[2] = nil
+:lua d[1] = nil
+:lua d[0] = nil
+:lua d = nil
+:$put =string(d)
+
+:?^1?,$w! test.out
+:qa!
+ENDTEST
+
+1 line 1
+2 line 2
+3 line 3
diff -Naur vim73.orig/src/testdir/test85.ok vim73/src/testdir/test85.ok
--- vim73.orig/src/testdir/test85.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test85.ok	2013-08-04 19:09:11.300608450 +0000
@@ -0,0 +1,7 @@
+1 changed line 1
+scalar test OK
+2 line 2
+dictionary with list OK
+circular test OK
+[123.0, 'abc', [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}]
+{'4': 123.0, '5': 'abc', '6': [1, 2, 3], '7': {'a': 1, 'b': 2, 'c': 3}}
diff -Naur vim73.orig/src/testdir/test86.in vim73/src/testdir/test86.in
--- vim73.orig/src/testdir/test86.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test86.in	2013-08-04 19:09:11.303941774 +0000
@@ -0,0 +1,1309 @@
+Tests for various python features.     vim: set ft=vim :
+
+NOTE: This will cause errors when run under valgrind.
+This would require recompiling Python with:
+  ./configure --without-pymalloc
+See http://svn.python.org/view/python/trunk/Misc/README.valgrind?view=markup
+
+STARTTEST
+:so small.vim
+:set encoding=latin1
+:set noswapfile
+:if !has('python') | e! test.ok | wq! test.out | endif
+:lang C
+:fun Test()
+:py import vim
+:let l = []
+:py l=vim.bindeval('l')
+:py f=vim.bindeval('function("strlen")')
+:" Extending List directly with different types
+:py l.extend([1, "as'd", [1, 2, f, {'a': 1}]])
+:$put =string(l)
+:$put =string(l[-1])
+:try
+:  $put =string(l[-4])
+:catch
+:  $put =v:exception[:13]
+:endtry
+:" List assignment
+:py l[0]=0
+:$put =string(l)
+:py l[-2]=f
+:$put =string(l)
+:"
+:" Extending Dictionary directly with different types
+:let d = {}
+:fun d.f()
+:  return 1
+:endfun
+py << EOF
+d=vim.bindeval('d')
+d['1']='asd'
+d.update(b=[1, 2, f])
+d.update((('-1', {'a': 1}),))
+d.update({'0': -1})
+dk = d.keys()
+dv = d.values()
+di = d.items()
+cmpfun = lambda a, b: cmp(repr(a), repr(b))
+dk.sort(cmpfun)
+dv.sort(cmpfun)
+di.sort(cmpfun)
+EOF
+:$put =pyeval('d[''f''](self={})')
+:$put =pyeval('repr(dk)')
+:$put =substitute(pyeval('repr(dv)'),'0x\x\+','','g')
+:$put =substitute(pyeval('repr(di)'),'0x\x\+','','g')
+:for [key, Val] in sort(items(d))
+:  $put =string(key) . ' : ' . string(Val)
+:  unlet key Val
+:endfor
+:py del dk
+:py del di
+:py del dv
+:"
+:" removing items with del
+:py del l[2]
+:$put =string(l)
+:let l = range(8)
+:py l=vim.bindeval('l')
+:try
+:   py del l[:3]
+:   py del l[1:]
+:catch
+:   $put =v:exception
+:endtry
+:$put =string(l)
+:"
+:py del d['-1']
+:py del d['f']
+:$put =string(pyeval('d.get(''b'', 1)'))
+:$put =string(pyeval('d.pop(''b'')'))
+:$put =string(pyeval('d.get(''b'', 1)'))
+:$put =string(pyeval('d.pop(''1'', 2)'))
+:$put =string(pyeval('d.pop(''1'', 2)'))
+:$put =pyeval('repr(d.has_key(''0''))')
+:$put =pyeval('repr(d.has_key(''1''))')
+:$put =pyeval('repr(''0'' in d)')
+:$put =pyeval('repr(''1'' in d)')
+:$put =pyeval('repr(list(iter(d)))')
+:$put =string(d)
+:$put =pyeval('repr(d.popitem())')
+:$put =pyeval('repr(d.get(''0''))')
+:$put =pyeval('repr(list(iter(d)))')
+:"
+:" removing items out of range: silently skip items that don't exist
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:" The following two ranges delete nothing as they match empty list:
+:py del l[2:1]
+:$put =string(l)
+:py del l[2:2]
+:$put =string(l)
+:py del l[2:3]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[2:4]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[2:5]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[2:6]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:" The following two ranges delete nothing as they match empty list:
+:py del l[-1:2]
+:$put =string(l)
+:py del l[-2:2]
+:$put =string(l)
+:py del l[-3:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[-4:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[-5:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py del l[-6:2]
+:$put =string(l)
+:"
+:" Slice assignment to a list
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[0:0]=['a']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[1:2]=['b']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[2:4]=['c']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[4:4]=['d']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[-1:2]=['e']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[-10:2]=['f']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:py l[2:-10]=['g']
+:$put =string(l)
+:let l = []
+:py l=vim.bindeval('l')
+:py l[0:0]=['h']
+:$put =string(l)
+:"
+:" Locked variables
+:let l = [0, 1, 2, 3]
+:py l=vim.bindeval('l')
+:lockvar! l
+:py l[2]='i'
+:$put =string(l)
+:unlockvar! l
+:"
+:" Function calls
+:fun New(...)
+:   return ['NewStart']+a:000+['NewEnd']
+:endfun
+:fun DictNew(...) dict
+:   return ['DictNewStart']+a:000+['DictNewEnd', self]
+:endfun
+:let l=[function('New'), function('DictNew')]
+:py l=vim.bindeval('l')
+:py l.extend(list(l[0](1, 2, 3)))
+:$put =string(l)
+:py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
+:$put =string(l)
+:py l.extend([l[0].name])
+:$put =string(l)
+:try
+:   py l[1](1, 2, 3)
+:catch
+:   $put =v:exception[:16]
+:endtry
+:py f=l[0]
+:delfunction New
+:try
+:   py f(1, 2, 3)
+:catch
+:   $put =v:exception[:16]
+:endtry
+:if has('float')
+:   let l=[0.0]
+:   py l=vim.bindeval('l')
+:   py l.extend([0.0])
+:   $put =string(l)
+:else
+:   $put ='[0.0, 0.0]'
+:endif
+:let messages=[]
+:delfunction DictNew
+py <<EOF
+import sys
+d=vim.bindeval('{}')
+m=vim.bindeval('messages')
+def em(expr, g=globals(), l=locals()):
+    try:
+        exec(expr, g, l)
+    except:
+        m.extend([sys.exc_type.__name__])
+
+em('d["abc1"]')
+em('d["abc1"]="\\0"')
+em('d["abc1"]=vim')
+em('d[""]=1')
+em('d["a\\0b"]=1')
+em('d[u"a\\0b"]=1')
+
+em('d.pop("abc1")')
+em('d.popitem()')
+del em
+del m
+EOF
+:$put =messages
+:unlet messages
+:" locked and scope attributes
+:let d={} | let dl={} | lockvar dl
+:for s in split("d dl v: g:")
+:    let name=tr(s, ':', 's')
+:    execute 'py '.name.'=vim.bindeval("'.s.'")'
+:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';')
+:    $put =toput
+:endfor
+:silent! let d.abc2=1
+:silent! let dl.abc3=1
+:py d.locked=True
+:py dl.locked=False
+:silent! let d.def=1
+:silent! let dl.def=1
+:put ='d:'.string(d)
+:put ='dl:'.string(dl)
+:unlet d dl
+:
+:let l=[] | let ll=[] | lockvar ll
+:for s in split("l ll")
+:    let name=tr(s, ':', 's')
+:    execute 'py '.name.'=vim.bindeval("'.s.'")'
+:    let toput=s.' : locked:'.pyeval(name.'.locked')
+:    $put =toput
+:endfor
+:silent! call extend(l, [0])
+:silent! call extend(ll, [0])
+:py l.locked=True
+:py ll.locked=False
+:silent! call extend(l, [1])
+:silent! call extend(ll, [1])
+:put ='l:'.string(l)
+:put ='ll:'.string(ll)
+:unlet l ll
+:"
+:" pyeval()
+:let l=pyeval('range(3)')
+:$put =string(l)
+:let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
+:$put =sort(items(d))
+:if has('float')
+:   let f=pyeval('0.0')
+:   $put =string(f)
+:else
+:   $put ='0.0'
+:endif
+:" Invalid values:
+:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
+:   try
+:      let v=pyeval(e)
+:   catch
+:      let toput=e.":\t".v:exception[:13]
+:      $put =toput
+:   endtry
+:endfor
+:"
+:" threading
+:let l = [0]
+:py l=vim.bindeval('l')
+py <<EOF
+import threading
+import time
+
+class T(threading.Thread):
+    def __init__(self):
+        threading.Thread.__init__(self)
+        self.t = 0
+        self.running = True
+
+    def run(self):
+        while self.running:
+            self.t += 1
+            time.sleep(0.1)
+
+t = T()
+del T
+t.start()
+EOF
+:sleep 1
+:py t.running = False
+:py t.join()
+:py l[0] = t.t > 8  # check if the background thread is working
+:py del time
+:py del threading
+:$put =string(l)
+:"
+:" settrace
+:let l = []
+:py l=vim.bindeval('l')
+py <<EOF
+import sys
+
+def traceit(frame, event, arg):
+    global l
+    if event == "line":
+        l.extend([frame.f_lineno])
+    return traceit
+
+def trace_main():
+    for i in range(5):
+        pass
+EOF
+:py sys.settrace(traceit)
+:py trace_main()
+:py sys.settrace(None)
+:py del traceit
+:py del trace_main
+:$put =string(l)
+:"
+:" Slice
+:py ll = vim.bindeval('[0, 1, 2, 3, 4, 5]')
+:py l = ll[:4]
+:$put =string(pyeval('l'))
+:py l = ll[2:]
+:$put =string(pyeval('l'))
+:py l = ll[:-4]
+:$put =string(pyeval('l'))
+:py l = ll[-2:]
+:$put =string(pyeval('l'))
+:py l = ll[2:4]
+:$put =string(pyeval('l'))
+:py l = ll[4:2]
+:$put =string(pyeval('l'))
+:py l = ll[-4:-2]
+:$put =string(pyeval('l'))
+:py l = ll[-2:-4]
+:$put =string(pyeval('l'))
+:py l = ll[:]
+:$put =string(pyeval('l'))
+:py l = ll[0:6]
+:$put =string(pyeval('l'))
+:py l = ll[-10:10]
+:$put =string(pyeval('l'))
+:"
+:" Vars
+:let g:foo = 'bac'
+:let w:abc3 = 'def'
+:let b:baz = 'bar'
+:let t:bar = 'jkl'
+:try
+:  throw "Abc"
+:catch
+:  put =pyeval('vim.vvars[''exception'']')
+:endtry
+:put =pyeval('vim.vars[''foo'']')
+:put =pyeval('vim.current.window.vars[''abc3'']')
+:put =pyeval('vim.current.buffer.vars[''baz'']')
+:put =pyeval('vim.current.tabpage.vars[''bar'']')
+:"
+:" Options
+:" paste:          boolean, global
+:" previewheight   number,  global
+:" operatorfunc:   string,  global
+:" number:         boolean, window-local
+:" numberwidth:    number,  window-local
+:" colorcolumn:    string,  window-local
+:" statusline:     string,  window-local/global
+:" autoindent:     boolean, buffer-local
+:" shiftwidth:     number,  buffer-local
+:" omnifunc:       string,  buffer-local
+:" preserveindent: boolean, buffer-local/global
+:" path:           string,  buffer-local/global
+:let g:bufs=[bufnr('%')]
+:new
+:let g:bufs+=[bufnr('%')]
+:vnew
+:let g:bufs+=[bufnr('%')]
+:wincmd j
+:vnew
+:let g:bufs+=[bufnr('%')]
+:wincmd l
+:fun RecVars(opt)
+:  let gval =string(eval('&g:'.a:opt))
+:  let wvals=join(map(range(1, 4),  'v:val.":".string(getwinvar(v:val, "&".a:opt))'))
+:  let bvals=join(map(copy(g:bufs), 'v:val.":".string(getbufvar(v:val, "&".a:opt))'))
+:  put ='  G: '.gval
+:  put ='  W: '.wvals
+:  put ='  B: '.wvals
+:endfun
+py << EOF
+def e(s, g=globals(), l=locals()):
+    try:
+        exec(s, g, l)
+    except:
+        vim.command('return ' + repr(sys.exc_type.__name__))
+
+def ev(s, g=globals(), l=locals()):
+    try:
+        return eval(s, g, l)
+    except:
+        vim.command('let exc=' + repr(sys.exc_type.__name__))
+        return 0
+EOF
+:fun E(s)
+:   python e(vim.eval('a:s'))
+:endfun
+:fun Ev(s)
+:   let r=pyeval('ev(vim.eval("a:s"))')
+:   if exists('exc')
+:       throw exc
+:   endif
+:   return r
+:endfun
+:py gopts1=vim.options
+:py wopts1=vim.windows[2].options
+:py wopts2=vim.windows[0].options
+:py wopts3=vim.windows[1].options
+:py bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options
+:py bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options
+:py bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options
+:set path=.,..,,
+:let lst=[]
+:let lst+=[['paste',          1,     0,     1,     2,      1,    1,      0    ]]
+:let lst+=[['previewheight',  5,     1,     6,     'a',    0,    1,      0    ]]
+:let lst+=[['operatorfunc',   'A',   'B',   'C',   2,      0,    1,      0    ]]
+:let lst+=[['number',         0,     1,     1,     0,      1,    0,      1    ]]
+:let lst+=[['numberwidth',    2,     3,     5,     -100,   0,    0,      1    ]]
+:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc4',  0,    0,      1    ]]
+:let lst+=[['statusline',     '1',   '2',   '4',   0,      0,    1,      1    ]]
+:let lst+=[['autoindent',     0,     1,     1,     2,      1,    0,      2    ]]
+:let lst+=[['shiftwidth',     0,     2,     1,     3,      0,    0,      2    ]]
+:let lst+=[['omnifunc',       'A',   'B',   'C',   1,      0,    0,      2    ]]
+:let lst+=[['preserveindent', 0,     1,     1,     2,      1,    1,      2    ]]
+:let lst+=[['path',           '.,,', ',,',  '.',   0,      0,    1,      2    ]]
+:for       [oname,            oval1, oval2, oval3, invval, bool, global, local] in lst
+:   py oname=vim.eval('oname')
+:   py oval1=vim.bindeval('oval1')
+:   py oval2=vim.bindeval('oval2')
+:   py oval3=vim.bindeval('oval3')
+:   if invval is 0 || invval is 1
+:       py invval=bool(vim.bindeval('invval'))
+:   else
+:       py invval=vim.bindeval('invval')
+:   endif
+:   if bool
+:       py oval1=bool(oval1)
+:       py oval2=bool(oval2)
+:       py oval3=bool(oval3)
+:   endif
+:   put ='>>> '.oname
+:   for v in ['gopts1', 'wopts1', 'bopts1']
+:       try
+:           put ='  p/'.v.': '.Ev('repr('.v.'['''.oname.'''])')
+:       catch
+:           put ='  p/'.v.'! '.v:exception
+:       endtry
+:       let r=E(v.'['''.oname.''']=invval')
+:       if r isnot 0
+:           put ='  inv: '.string(invval).'! '.r
+:       endif
+:       for vv in (v is# 'gopts1' ? [v] : [v, v[:-2].'2', v[:-2].'3'])
+:           let val=substitute(vv, '^.opts', 'oval', '')
+:           let r=E(vv.'['''.oname.''']='.val)
+:           if r isnot 0
+:               put ='  '.vv.'! '.r
+:           endif
+:       endfor
+:   endfor
+:   call RecVars(oname)
+:   for v in ['wopts3', 'bopts3']
+:       let r=E('del '.v.'["'.oname.'"]')
+:       if r isnot 0
+:           put ='  del '.v.'! '.r
+:       endif
+:   endfor
+:   call RecVars(oname)
+:endfor
+:delfunction RecVars
+:delfunction E
+:delfunction Ev
+:py del ev
+:py del e
+:only
+:for buf in g:bufs[1:]
+:   execute 'bwipeout!' buf
+:endfor
+:py del gopts1
+:py del wopts1
+:py del wopts2
+:py del wopts3
+:py del bopts1
+:py del bopts2
+:py del bopts3
+:py del oval1
+:py del oval2
+:py del oval3
+:py del oname
+:py del invval
+:"
+:" Test buffer object
+:vnew
+:put ='First line'
+:put ='Second line'
+:put ='Third line'
+:1 delete _
+:py b=vim.current.buffer
+:wincmd w
+:mark a
+:augroup BUFS
+:   autocmd BufFilePost * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
+:   autocmd BufFilePre * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
+:augroup END
+py << EOF
+cb = vim.current.buffer
+# Tests BufferAppend and BufferItem
+cb.append(b[0])
+# Tests BufferSlice and BufferAssSlice
+cb.append('abc5') # Will be overwritten
+cb[-1:] = b[:-2]
+# Test BufferLength and BufferAssSlice
+cb.append('def') # Will not be overwritten
+cb[len(cb):] = b[:]
+# Test BufferAssItem and BufferMark
+cb.append('ghi') # Will be overwritten
+cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
+# Test BufferRepr
+cb.append(repr(cb) + repr(b))
+# Modify foreign buffer
+b.append('foo')
+b[0]='bar'
+b[0:0]=['baz']
+vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
+# Test assigning to name property
+import os
+old_name = cb.name
+cb.name = 'foo'
+cb.append(cb.name[-11:].replace(os.path.sep, '/'))
+b.name = 'bar'
+cb.append(b.name[-11:].replace(os.path.sep, '/'))
+cb.name = old_name
+cb.append(cb.name[-17:].replace(os.path.sep, '/'))
+del old_name
+# Test CheckBuffer
+for _b in vim.buffers:
+    if _b is not cb:
+        vim.command('bwipeout! ' + str(_b.number))
+del _b
+cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
+for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")', 'b.name = "!"'):
+    try:
+        exec(expr)
+    except vim.error:
+        pass
+    else:
+        # Usually a SEGV here
+        # Should not happen in any case
+        cb.append('No exception for ' + expr)
+vim.command('cd .')
+del b
+EOF
+:augroup BUFS
+:   autocmd!
+:augroup END
+:augroup! BUFS
+:"
+:" Test vim.buffers object
+:set hidden
+:edit a
+:buffer #
+:edit b
+:buffer #
+:edit c
+:buffer #
+py << EOF
+try:
+    from __builtin__ import next
+except ImportError:
+    next = lambda o: o.next()
+# Check GCing iterator that was not fully exhausted
+i = iter(vim.buffers)
+cb.append('i:' + str(next(i)))
+# and also check creating more then one iterator at a time
+i2 = iter(vim.buffers)
+cb.append('i2:' + str(next(i2)))
+cb.append('i:' + str(next(i)))
+# The following should trigger GC and not cause any problems
+del i
+del i2
+i3 = iter(vim.buffers)
+cb.append('i3:' + str(next(i3)))
+del i3
+
+prevnum = 0
+for b in vim.buffers:
+    # Check buffer order
+    if prevnum >= b.number:
+        cb.append('!!! Buffer numbers not in strictly ascending order')
+    # Check indexing: vim.buffers[number].number == number
+    cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
+    prevnum = b.number
+del prevnum
+
+cb.append(str(len(vim.buffers)))
+
+bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+
+# Test wiping out buffer with existing iterator
+i4 = iter(vim.buffers)
+cb.append('i4:' + str(next(i4)))
+vim.command('bwipeout! ' + str(bnums.pop(0)))
+try:
+    next(i4)
+except vim.error:
+    pass
+else:
+    cb.append('!!!! No vim.error')
+i4 = iter(vim.buffers)
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+cb.append('i4:' + str(next(i4)))
+try:
+    next(i4)
+except StopIteration:
+    cb.append('StopIteration')
+del i4
+del bnums
+EOF
+:"
+:" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
+:tabnew 0
+:tabnew 1
+:vnew a.1
+:tabnew 2
+:vnew a.2
+:vnew b.2
+:vnew c.2
+py << EOF
+cb.append('Number of tabs: ' + str(len(vim.tabpages)))
+cb.append('Current tab pages:')
+def W(w):
+    if repr(w).find('(unknown)') != -1:
+        return '<window object (unknown)>'
+    else:
+        return repr(w)
+
+start = len(cb)
+
+def Cursor(w):
+    if w.buffer is cb:
+        return repr((start - w.cursor[0], w.cursor[1]))
+    else:
+        return repr(w.cursor)
+
+for t in vim.tabpages:
+    cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
+    cb.append('  Windows:')
+    for w in t.windows:
+        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
+        # Other values depend on the size of the terminal, so they are checked partly:
+        for attr in ('height', 'row', 'width', 'col'):
+            try:
+                aval = getattr(w, attr)
+                if type(aval) is not long:
+                    raise TypeError
+                if aval < 0:
+                    raise ValueError
+            except Exception:
+                cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + sys.exc_type.__name__)
+        del aval
+        del attr
+        w.cursor = (len(w.buffer), 0)
+del W
+del Cursor
+cb.append('Number of windows in current tab page: ' + str(len(vim.windows)))
+if list(vim.windows) != list(vim.current.tabpage.windows):
+    cb.append('!!!!!! Windows differ')
+EOF
+:"
+:" Test vim.current
+py << EOF
+def H(o):
+    return repr(o)
+cb.append('Current tab page: ' + repr(vim.current.tabpage))
+cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
+cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ ' is ' + H(vim.current.tabpage.window.buffer))
+del H
+# Assigning: fails
+try:
+    vim.current.window = vim.tabpages[0].window
+except ValueError:
+    cb.append('ValueError at assigning foreign tab window')
+
+for attr in ('window', 'tabpage', 'buffer'):
+    try:
+        setattr(vim.current, attr, None)
+    except TypeError:
+        cb.append('Type error at assigning None to vim.current.' + attr)
+del attr
+
+# Assigning: success
+vim.current.tabpage = vim.tabpages[-2]
+vim.current.buffer = cb
+vim.current.window = vim.windows[0]
+vim.current.window.cursor = (len(vim.current.buffer), 0)
+cb.append('Current tab page: ' + repr(vim.current.tabpage))
+cb.append('Current window: ' + repr(vim.current.window))
+cb.append('Current buffer: ' + repr(vim.current.buffer))
+cb.append('Current line: ' + repr(vim.current.line))
+ws = list(vim.windows)
+ts = list(vim.tabpages)
+for b in vim.buffers:
+    if b is not cb:
+        vim.command('bwipeout! ' + str(b.number))
+del b
+cb.append('w.valid: ' + repr([w.valid for w in ws]))
+cb.append('t.valid: ' + repr([t.valid for t in ts]))
+del w
+del t
+del ts
+del ws
+EOF
+:tabonly!
+:only!
+:"
+:" Test types
+py << EOF
+for expr, attr in (
+    ('vim.vars',                         'Dictionary'),
+    ('vim.options',                      'Options'),
+    ('vim.bindeval("{}")',               'Dictionary'),
+    ('vim.bindeval("[]")',               'List'),
+    ('vim.bindeval("function(\'tr\')")', 'Function'),
+    ('vim.current.buffer',               'Buffer'),
+    ('vim.current.range',                'Range'),
+    ('vim.current.window',               'Window'),
+    ('vim.current.tabpage',              'TabPage'),
+):
+    cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
+del expr
+del attr
+EOF
+:"
+:" Test __dir__() method
+py << EOF
+for name, o in (
+        ('current',    vim.current),
+        ('buffer',     vim.current.buffer),
+        ('window',     vim.current.window),
+        ('tabpage',    vim.current.tabpage),
+        ('range',      vim.current.range),
+        ('dictionary', vim.bindeval('{}')),
+        ('list',       vim.bindeval('[]')),
+        ('function',   vim.bindeval('function("tr")')),
+        ('output',     sys.stdout),
+    ):
+    cb.append(name + ':' + ','.join(dir(o)))
+del name
+del o
+EOF
+:"
+:" Test vim.*.__new__
+:$put =string(pyeval('vim.Dictionary({})'))
+:$put =string(pyeval('vim.Dictionary(a=1)'))
+:$put =string(pyeval('vim.Dictionary(((''a'', 1),))'))
+:$put =string(pyeval('vim.List()'))
+:$put =string(pyeval('vim.List(iter(''abc7''))'))
+:$put =string(pyeval('vim.Function(''tr'')'))
+:"
+:" Test stdout/stderr
+:redir => messages
+:py sys.stdout.write('abc8') ; sys.stdout.write('def')
+:py sys.stderr.write('abc9') ; sys.stderr.write('def')
+:py sys.stdout.writelines(iter('abcA'))
+:py sys.stderr.writelines(iter('abcB'))
+:redir END
+:$put =string(substitute(messages, '\d\+', '', 'g'))
+:" Test subclassing
+:fun Put(...)
+:   $put =string(a:000)
+:   return a:000
+:endfun
+py << EOF
+class DupDict(vim.Dictionary):
+    def __setitem__(self, key, value):
+        super(DupDict, self).__setitem__(key, value)
+        super(DupDict, self).__setitem__('dup_' + key, value)
+dd = DupDict()
+dd['a'] = 'b'
+
+class DupList(vim.List):
+    def __getitem__(self, idx):
+        return [super(DupList, self).__getitem__(idx)] * 2
+
+dl = DupList()
+dl2 = DupList(iter('abcC'))
+dl.extend(dl2[0])
+
+class DupFun(vim.Function):
+    def __call__(self, arg):
+        return super(DupFun, self).__call__(arg, arg)
+
+df = DupFun('Put')
+EOF
+:$put =string(sort(keys(pyeval('dd'))))
+:$put =string(pyeval('dl'))
+:$put =string(pyeval('dl2'))
+:$put =string(pyeval('df(2)'))
+:$put =string(pyeval('dl') is# pyeval('dl'))
+:$put =string(pyeval('dd') is# pyeval('dd'))
+:$put =string(pyeval('df'))
+:delfunction Put
+py << EOF
+del DupDict
+del DupList
+del DupFun
+del dd
+del dl
+del dl2
+del df
+EOF
+:"
+:" Test chdir
+py << EOF
+import os
+fnamemodify = vim.Function('fnamemodify')
+cb.append(fnamemodify('.', ':p:h:t'))
+cb.append(vim.eval('@%'))
+os.chdir('..')
+cb.append(fnamemodify('.', ':p:h:t'))
+cb.append(vim.eval('@%').replace(os.path.sep, '/'))
+os.chdir('testdir')
+cb.append(fnamemodify('.', ':p:h:t'))
+cb.append(vim.eval('@%'))
+del fnamemodify
+EOF
+:"
+:" Test errors
+:fun F() dict
+:endfun
+:fun D()
+:endfun
+py << EOF
+def ee(expr, g=globals(), l=locals()):
+    try:
+        exec(expr, g, l)
+    except:
+        ei = sys.exc_info()
+        msg = sys.exc_info()[0].__name__ + ':' + repr(sys.exc_info()[1].args)
+        msg = msg.replace('TypeError:(\'argument 1 ', 'TypeError:(\'')
+        if expr.find('None') > -1:
+            msg = msg.replace('TypeError:(\'iteration over non-sequence\',)',
+                              'TypeError:("\'NoneType\' object is not iterable",)')
+        if expr.find('FailingNumber') > -1:
+            msg = msg.replace(', not \'FailingNumber\'', '').replace('"', '\'')
+            msg = msg.replace('TypeError:(\'iteration over non-sequence\',)',
+                              'TypeError:("\'FailingNumber\' object is not iterable",)')
+        if msg.find('(\'\'') > -1 or msg.find('(\'can\'t') > -1:
+            msg = msg.replace('(\'', '("').replace('\',)', '",)')
+        if expr == 'fd(self=[])':
+            # HACK: PyMapping_Check changed meaning
+            msg = msg.replace('AttributeError:(\'keys\',)',
+                              'TypeError:(\'unable to convert list to vim dictionary\',)')
+        cb.append(expr + ':' + msg)
+    else:
+        cb.append(expr + ':NOT FAILED')
+d = vim.Dictionary()
+ned = vim.Dictionary(foo='bar', baz='abcD')
+dl = vim.Dictionary(a=1)
+dl.locked = True
+l = vim.List()
+ll = vim.List('abcE')
+ll.locked = True
+f = vim.Function('string')
+fd = vim.Function('F')
+fdel = vim.Function('D')
+vim.command('delfunction D')
+
+def subexpr_test(expr, name, subexprs):
+    cb.append('>>> Testing %s using %s' % (name, expr))
+    for subexpr in subexprs:
+        ee(expr % subexpr)
+    cb.append('<<< Finished')
+
+def stringtochars_test(expr):
+    return subexpr_test(expr, 'StringToChars', (
+        '1',       # Fail type checks
+        'u"\\0"',  # Fail PyString_AsStringAndSize(bytes, , NULL) check
+        '"\\0"',   # Fail PyString_AsStringAndSize(object, , NULL) check
+    ))
+
+class Mapping(object):
+    def __init__(self, d):
+        self.d = d
+
+    def __getitem__(self, key):
+        return self.d[key]
+
+    def keys(self):
+        return self.d.keys()
+
+    def items(self):
+        return self.d.items()
+
+def convertfrompyobject_test(expr, recurse=True):
+    # pydict_to_tv
+    stringtochars_test(expr % '{%s : 1}')
+    if recurse:
+        convertfrompyobject_test(expr % '{"abcF" : %s}', False)
+    # pymap_to_tv
+    stringtochars_test(expr % 'Mapping({%s : 1})')
+    if recurse:
+        convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False)
+    # pyseq_to_tv
+    iter_test(expr)
+    return subexpr_test(expr, 'ConvertFromPyObject', (
+        'None',                 # Not conversible
+        '{"": 1}',              # Empty key not allowed
+        '{u"": 1}',             # Same, but with unicode object
+        'FailingMapping()',     #
+        'FailingMappingKey()',  #
+        'FailingNumber()',      #
+    ))
+
+def convertfrompymapping_test(expr):
+    convertfrompyobject_test(expr)
+    return subexpr_test(expr, 'ConvertFromPyMapping', (
+        '[]',
+    ))
+
+def iter_test(expr):
+    return subexpr_test(expr, '*Iter*', (
+        'FailingIter()',
+        'FailingIterNext()',
+    ))
+
+def number_test(expr, natural=False, unsigned=False):
+    if natural:
+        unsigned = True
+    return subexpr_test(expr, 'NumberToLong', (
+        '[]',
+        'None',
+    ) + (unsigned and ('-1',) or ())
+    + (natural and ('0',) or ()))
+
+class FailingTrue(object):
+    def __nonzero__(self):
+        raise NotImplementedError('bool')
+
+class FailingIter(object):
+    def __iter__(self):
+        raise NotImplementedError('iter')
+
+class FailingIterNext(object):
+    def __iter__(self):
+        return self
+
+    def next(self):
+        raise NotImplementedError('next')
+
+class FailingMappingKey(object):
+    def __getitem__(self, item):
+        raise NotImplementedError('getitem:mappingkey')
+
+    def keys(self):
+        return list("abcH")
+
+class FailingMapping(object):
+    def __getitem__(self):
+        raise NotImplementedError('getitem:mapping')
+
+    def keys(self):
+        raise NotImplementedError('keys')
+
+class FailingList(list):
+    def __getitem__(self, idx):
+        if i == 2:
+            raise NotImplementedError('getitem:list')
+        else:
+            return super(FailingList, self).__getitem__(idx)
+
+class NoArgsCall(object):
+    def __call__(self):
+        pass
+
+class FailingCall(object):
+    def __call__(self, path):
+        raise NotImplementedError('call')
+
+class FailingNumber(object):
+    def __int__(self):
+        raise NotImplementedError('int')
+
+cb.append("> Output")
+cb.append(">> OutputSetattr")
+ee('del sys.stdout.softspace')
+number_test('sys.stdout.softspace = %s', unsigned=True)
+number_test('sys.stderr.softspace = %s', unsigned=True)
+ee('sys.stdout.attr = None')
+cb.append(">> OutputWrite")
+ee('sys.stdout.write(None)')
+cb.append(">> OutputWriteLines")
+ee('sys.stdout.writelines(None)')
+ee('sys.stdout.writelines([1])')
+iter_test('sys.stdout.writelines(%s)')
+cb.append("> VimCommand")
+stringtochars_test('vim.command(%s)')
+ee('vim.command("", 2)')
+#! Not checked: vim->python exceptions translating: checked later
+cb.append("> VimToPython")
+#! Not checked: everything: needs errors in internal python functions
+cb.append("> VimEval")
+stringtochars_test('vim.eval(%s)')
+ee('vim.eval("", FailingTrue())')
+#! Not checked: everything: needs errors in internal python functions
+cb.append("> VimEvalPy")
+stringtochars_test('vim.bindeval(%s)')
+ee('vim.eval("", 2)')
+#! Not checked: vim->python exceptions translating: checked later
+cb.append("> VimStrwidth")
+stringtochars_test('vim.strwidth(%s)')
+cb.append("> VimForeachRTP")
+ee('vim.foreach_rtp(None)')
+ee('vim.foreach_rtp(NoArgsCall())')
+ee('vim.foreach_rtp(FailingCall())')
+ee('vim.foreach_rtp(int, 2)')
+cb.append('> import')
+old_rtp = vim.options['rtp']
+vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+ee('import xxx_no_such_module_xxx')
+ee('import failing_import')
+ee('import failing')
+vim.options['rtp'] = old_rtp
+del old_rtp
+cb.append("> Dictionary")
+cb.append(">> DictionaryConstructor")
+ee('vim.Dictionary("abcI")')
+##! Not checked: py_dict_alloc failure
+cb.append(">> DictionarySetattr")
+ee('del d.locked')
+ee('d.locked = FailingTrue()')
+ee('vim.vvars.locked = False')
+ee('d.scope = True')
+ee('d.xxx = True')
+cb.append(">> _DictionaryItem")
+ee('d.get("a", 2, 3)')
+stringtochars_test('d.get(%s)')
+ee('d.pop("a")')
+ee('dl.pop("a")')
+cb.append(">> DictionaryIterNext")
+ee('for i in ned: ned["a"] = 1')
+del i
+cb.append(">> DictionaryAssItem")
+ee('dl["b"] = 1')
+stringtochars_test('d[%s] = 1')
+convertfrompyobject_test('d["a"] = %s')
+cb.append(">> DictionaryUpdate")
+cb.append(">>> kwargs")
+cb.append(">>> iter")
+ee('d.update(FailingMapping())')
+ee('d.update([FailingIterNext()])')
+iter_test('d.update(%s)')
+convertfrompyobject_test('d.update(%s)')
+stringtochars_test('d.update(((%s, 0),))')
+convertfrompyobject_test('d.update((("a", %s),))')
+cb.append(">> DictionaryPopItem")
+ee('d.popitem(1, 2)')
+cb.append(">> DictionaryHasKey")
+ee('d.has_key()')
+cb.append("> List")
+cb.append(">> ListConstructor")
+ee('vim.List(1, 2)')
+ee('vim.List(a=1)')
+iter_test('vim.List(%s)')
+convertfrompyobject_test('vim.List([%s])')
+cb.append(">> ListItem")
+ee('l[1000]')
+cb.append(">> ListAssItem")
+ee('ll[1] = 2')
+ee('l[1000] = 3')
+cb.append(">> ListAssSlice")
+ee('ll[1:100] = "abcJ"')
+iter_test('l[:] = %s')
+convertfrompyobject_test('l[:] = [%s]')
+cb.append(">> ListConcatInPlace")
+iter_test('l.extend(%s)')
+convertfrompyobject_test('l.extend([%s])')
+cb.append(">> ListSetattr")
+ee('del l.locked')
+ee('l.locked = FailingTrue()')
+ee('l.xxx = True')
+cb.append("> Function")
+cb.append(">> FunctionConstructor")
+ee('vim.Function("123")')
+ee('vim.Function("xxx_non_existent_function_xxx")')
+ee('vim.Function("xxx#non#existent#function#xxx")')
+cb.append(">> FunctionCall")
+convertfrompyobject_test('f(%s)')
+convertfrompymapping_test('fd(self=%s)')
+cb.append("> TabPage")
+cb.append(">> TabPageAttr")
+ee('vim.current.tabpage.xxx')
+cb.append("> TabList")
+cb.append(">> TabListItem")
+ee('vim.tabpages[1000]')
+cb.append("> Window")
+cb.append(">> WindowAttr")
+ee('vim.current.window.xxx')
+cb.append(">> WindowSetattr")
+ee('vim.current.window.buffer = 0')
+ee('vim.current.window.cursor = (100000000, 100000000)')
+ee('vim.current.window.cursor = True')
+number_test('vim.current.window.height = %s', unsigned=True)
+number_test('vim.current.window.width = %s', unsigned=True)
+ee('vim.current.window.xxxxxx = True')
+cb.append("> WinList")
+cb.append(">> WinListItem")
+ee('vim.windows[1000]')
+cb.append("> Buffer")
+cb.append(">> StringToLine (indirect)")
+ee('vim.current.buffer[0] = u"\\na"')
+ee('vim.current.buffer[0] = "\\na"')
+cb.append(">> SetBufferLine (indirect)")
+ee('vim.current.buffer[0] = True')
+cb.append(">> SetBufferLineList (indirect)")
+ee('vim.current.buffer[:] = True')
+ee('vim.current.buffer[:] = ["\\na", "bc"]')
+cb.append(">> InsertBufferLines (indirect)")
+ee('vim.current.buffer.append(None)')
+ee('vim.current.buffer.append(["\\na", "bc"])')
+ee('vim.current.buffer.append("\\nbc")')
+cb.append(">> RBItem")
+ee('vim.current.buffer[100000000]')
+cb.append(">> RBAsItem")
+ee('vim.current.buffer[100000000] = ""')
+cb.append(">> BufferAttr")
+ee('vim.current.buffer.xxx')
+cb.append(">> BufferSetattr")
+ee('vim.current.buffer.name = True')
+ee('vim.current.buffer.xxx = True')
+cb.append(">> BufferMark")
+ee('vim.current.buffer.mark(0)')
+ee('vim.current.buffer.mark("abcM")')
+ee('vim.current.buffer.mark("!")')
+cb.append(">> BufferRange")
+ee('vim.current.buffer.range(1, 2, 3)')
+cb.append("> BufMap")
+cb.append(">> BufMapItem")
+ee('vim.buffers[100000000]')
+number_test('vim.buffers[%s]', natural=True)
+cb.append("> Current")
+cb.append(">> CurrentGetattr")
+ee('vim.current.xxx')
+cb.append(">> CurrentSetattr")
+ee('vim.current.line = True')
+ee('vim.current.buffer = True')
+ee('vim.current.window = True')
+ee('vim.current.tabpage = True')
+ee('vim.current.xxx = True')
+del d
+del ned
+del dl
+del l
+del ll
+del f
+del fd
+del fdel
+del subexpr_test
+del stringtochars_test
+del Mapping
+del convertfrompyobject_test
+del convertfrompymapping_test
+del iter_test
+del number_test
+del FailingTrue
+del FailingIter
+del FailingIterNext
+del FailingMapping
+del FailingMappingKey
+del FailingList
+del NoArgsCall
+del FailingCall
+del FailingNumber
+EOF
+:delfunction F
+:"
+:" Test import
+py << EOF
+sys.path.insert(0, os.path.join(os.getcwd(), 'python_before'))
+sys.path.append(os.path.join(os.getcwd(), 'python_after'))
+vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+l = []
+def callback(path):
+    l.append(path[-len('/testdir'):].replace(os.path.sep, '/'))
+vim.foreach_rtp(callback)
+cb.append(repr(l))
+del l
+def callback(path):
+    return path[-len('/testdir'):].replace(os.path.sep, '/')
+cb.append(repr(vim.foreach_rtp(callback)))
+del callback
+from module import dir as d
+from modulex import ddir
+cb.append(d + ',' + ddir)
+import before
+cb.append(before.dir)
+import after
+cb.append(after.dir)
+import topmodule as tm
+import topmodule.submodule as tms
+import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss
+cb.append(tm.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):])
+cb.append(tms.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):])
+cb.append(tmsss.__file__.replace('.pyc', '.py').replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):])
+del before
+del after
+del d
+del ddir
+del tm
+del tms
+del tmsss
+EOF
+:"
+:" Test exceptions
+:fun Exe(e)
+:   execute a:e
+:endfun
+py << EOF
+Exe = vim.bindeval('function("Exe")')
+ee('vim.command("throw \'abcN\'")')
+ee('Exe("throw \'def\'")')
+ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
+ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
+ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
+ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
+del Exe
+EOF
+:delfunction Exe
+:"
+:" Cleanup
+py << EOF
+del cb
+del ee
+del sys
+del os
+del vim
+EOF
+:endfun
+:"
+:fun RunTest()
+:let checkrefs = !empty($PYTHONDUMPREFS)
+:let start = getline(1, '$')
+:for i in range(checkrefs ? 10 : 1)
+:   if i != 0
+:       %d _
+:       call setline(1, start)
+:   endif
+:   call Test()
+:   if i == 0
+:       let result = getline(1, '$')
+:   endif
+:endfor
+:if checkrefs
+:   %d _
+:   call setline(1, result)
+:endif
+:endfun
+:"
+:call RunTest()
+:delfunction RunTest
+:delfunction Test
+:call garbagecollect(1)
+:"
+:/^start:/,$wq! test.out
+:" vim: et ts=4 isk-=\:
+:call getchar()
+ENDTEST
+
+start:
diff -Naur vim73.orig/src/testdir/test86.ok vim73/src/testdir/test86.ok
--- vim73.orig/src/testdir/test86.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test86.ok	2013-08-04 19:09:11.307275097 +0000
@@ -0,0 +1,1197 @@
+start:
+[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
+[1, 2, function('strlen'), {'a': 1}]
+Vim(put):E684:
+[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
+[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
+1
+['-1', '0', '1', 'b', 'f']
+['asd', -1L, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >]
+[('-1', <vim.dictionary object at >), ('0', -1L), ('1', 'asd'), ('b', <vim.list object at >), ('f', <vim.Function '1'>)]
+'-1' : {'a': 1}
+'0' : -1
+'1' : 'asd'
+'b' : [1, 2, function('strlen')]
+'f' : function('1')
+[0, function('strlen')]
+[3]
+[1, 2, function('strlen')]
+[1, 2, function('strlen')]
+1
+'asd'
+2
+True
+False
+True
+False
+['0']
+{'0': -1}
+('0', -1L)
+None
+[]
+[0, 1, 2, 3]
+[0, 1, 2, 3]
+[0, 1, 3]
+[0, 1]
+[0, 1]
+[0, 1]
+[0, 1, 2, 3]
+[0, 1, 2, 3]
+[0, 2, 3]
+[2, 3]
+[2, 3]
+[2, 3]
+['a', 0, 1, 2, 3]
+[0, 'b', 2, 3]
+[0, 1, 'c']
+[0, 1, 2, 3, 'd']
+[0, 1, 2, 'e', 3]
+['f', 2, 3]
+[0, 1, 'g', 2, 3]
+['h']
+[0, 1, 2, 3]
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
+Vim(python):E725:
+Vim(python):E117:
+[0.0, 0.0]
+KeyError
+TypeError
+TypeError
+ValueError
+TypeError
+TypeError
+KeyError
+KeyError
+d : locked:0;scope:0
+dl : locked:1;scope:0
+v: : locked:2;scope:1
+g: : locked:0;scope:2
+d:{'abc2': 1}
+dl:{'def': 1}
+l : locked:0
+ll : locked:1
+l:[0]
+ll:[1]
+[0, 1, 2]
+['a', 'b']
+['c', 1]
+['d', ['e']]
+0.0
+"\0":	Vim(let):E859:
+{"\0": 1}:	Vim(let):E859:
+undefined_name:	Vim(let):Trace
+vim:	Vim(let):E859:
+[1]
+[1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
+[0, 1, 2, 3]
+[2, 3, 4, 5]
+[0, 1]
+[4, 5]
+[2, 3]
+[]
+[2, 3]
+[]
+[0, 1, 2, 3, 4, 5]
+[0, 1, 2, 3, 4, 5]
+[0, 1, 2, 3, 4, 5]
+Abc
+bac
+def
+bar
+jkl
+>>> paste
+  p/gopts1: False
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 2! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 1
+  W: 1:1 2:1 3:1 4:1
+  B: 1:1 2:1 3:1 4:1
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 1
+  W: 1:1 2:1 3:1 4:1
+  B: 1:1 2:1 3:1 4:1
+>>> previewheight
+  p/gopts1: 12
+  inv: 'a'! TypeError
+  p/wopts1! KeyError
+  inv: 'a'! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 'a'! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 5
+  W: 1:5 2:5 3:5 4:5
+  B: 1:5 2:5 3:5 4:5
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 5
+  W: 1:5 2:5 3:5 4:5
+  B: 1:5 2:5 3:5 4:5
+>>> operatorfunc
+  p/gopts1: ''
+  inv: 2! TypeError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 2! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 'A'
+  W: 1:'A' 2:'A' 3:'A' 4:'A'
+  B: 1:'A' 2:'A' 3:'A' 4:'A'
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 'A'
+  W: 1:'A' 2:'A' 3:'A' 4:'A'
+  B: 1:'A' 2:'A' 3:'A' 4:'A'
+>>> number
+  p/gopts1! KeyError
+  inv: 0! KeyError
+  gopts1! KeyError
+  p/wopts1: False
+  p/bopts1! KeyError
+  inv: 0! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 0
+  W: 1:1 2:1 3:0 4:0
+  B: 1:1 2:1 3:0 4:0
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: 0
+  W: 1:1 2:1 3:0 4:0
+  B: 1:1 2:1 3:0 4:0
+>>> numberwidth
+  p/gopts1! KeyError
+  inv: -100! KeyError
+  gopts1! KeyError
+  p/wopts1: 8
+  inv: -100! error
+  p/bopts1! KeyError
+  inv: -100! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 8
+  W: 1:3 2:5 3:2 4:8
+  B: 1:3 2:5 3:2 4:8
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: 8
+  W: 1:3 2:5 3:2 4:8
+  B: 1:3 2:5 3:2 4:8
+>>> colorcolumn
+  p/gopts1! KeyError
+  inv: 'abc4'! KeyError
+  gopts1! KeyError
+  p/wopts1: ''
+  inv: 'abc4'! error
+  p/bopts1! KeyError
+  inv: 'abc4'! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: ''
+  W: 1:'+2' 2:'+3' 3:'+1' 4:''
+  B: 1:'+2' 2:'+3' 3:'+1' 4:''
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: ''
+  W: 1:'+2' 2:'+3' 3:'+1' 4:''
+  B: 1:'+2' 2:'+3' 3:'+1' 4:''
+>>> statusline
+  p/gopts1: ''
+  inv: 0! TypeError
+  p/wopts1: None
+  inv: 0! TypeError
+  p/bopts1! KeyError
+  inv: 0! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: '1'
+  W: 1:'2' 2:'4' 3:'1' 4:'1'
+  B: 1:'2' 2:'4' 3:'1' 4:'1'
+  del bopts3! KeyError
+  G: '1'
+  W: 1:'2' 2:'1' 3:'1' 4:'1'
+  B: 1:'2' 2:'1' 3:'1' 4:'1'
+>>> autoindent
+  p/gopts1! KeyError
+  inv: 2! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: False
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+>>> shiftwidth
+  p/gopts1! KeyError
+  inv: 3! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 3! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: 8
+  G: 8
+  W: 1:0 2:2 3:8 4:1
+  B: 1:0 2:2 3:8 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 8
+  W: 1:0 2:2 3:8 4:1
+  B: 1:0 2:2 3:8 4:1
+>>> omnifunc
+  p/gopts1! KeyError
+  inv: 1! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 1! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: ''
+  inv: 1! TypeError
+  G: ''
+  W: 1:'A' 2:'B' 3:'' 4:'C'
+  B: 1:'A' 2:'B' 3:'' 4:'C'
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: ''
+  W: 1:'A' 2:'B' 3:'' 4:'C'
+  B: 1:'A' 2:'B' 3:'' 4:'C'
+>>> preserveindent
+  p/gopts1! KeyError
+  inv: 2! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: False
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+>>> path
+  p/gopts1: '.,..,,'
+  inv: 0! TypeError
+  p/wopts1! KeyError
+  inv: 0! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: None
+  inv: 0! TypeError
+  G: '.,,'
+  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+  del wopts3! KeyError
+  G: '.,,'
+  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+First line
+First line
+def
+First line
+Second line
+Third line
+(7, 2)
+<buffer test86.in><buffer >
+baz
+bar
+Second line
+Third line
+foo
+1:BufFilePre:1
+1:BufFilePost:1
+testdir/foo
+5:BufFilePre:5
+5:BufFilePost:5
+testdir/bar
+1:BufFilePre:1
+1:BufFilePost:1
+testdir/test86.in
+valid: b:False, cb:True
+i:<buffer test86.in>
+i2:<buffer test86.in>
+i:<buffer a>
+i3:<buffer test86.in>
+1:<buffer test86.in>=<buffer test86.in>
+8:<buffer a>=<buffer a>
+9:<buffer b>=<buffer b>
+10:<buffer c>=<buffer c>
+4
+i4:<buffer test86.in>
+i4:<buffer test86.in>
+StopIteration
+Number of tabs: 4
+Current tab pages:
+  <tabpage 0>(1): 1 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (37, 0)
+  <tabpage 1>(2): 1 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
+  <tabpage 2>(3): 2 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
+    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
+  <tabpage 3>(4): 4 windows, current is <window 0>
+  Windows:
+    <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
+    <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0)
+    <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0)
+    <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0)
+Number of windows in current tab page: 4
+Current tab page: <tabpage 3>
+Current window: <window 0>: <window 0> is <window 0>
+Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2>
+ValueError at assigning foreign tab window
+Type error at assigning None to vim.current.window
+Type error at assigning None to vim.current.tabpage
+Type error at assigning None to vim.current.buffer
+Current tab page: <tabpage 2>
+Current window: <window 0>
+Current buffer: <buffer test86.in>
+Current line: 'Type error at assigning None to vim.current.buffer'
+w.valid: [True, False]
+t.valid: [True, False, True, False]
+vim.vars:Dictionary:True
+vim.options:Options:True
+vim.bindeval("{}"):Dictionary:True
+vim.bindeval("[]"):List:True
+vim.bindeval("function('tr')"):Function:True
+vim.current.buffer:Buffer:True
+vim.current.range:Range:True
+vim.current.window:Window:True
+vim.current.tabpage:TabPage:True
+current:__dir__,__members__,buffer,line,range,tabpage,window
+buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars
+window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
+tabpage:__dir__,__members__,number,valid,vars,window,windows
+range:__dir__,__members__,append,end,start
+dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+list:__dir__,__members__,extend,locked
+function:__dir__,__members__,softspace
+output:__dir__,__members__,flush,softspace,write,writelines
+{}
+{'a': 1}
+{'a': 1}
+[]
+['a', 'b', 'c', '7']
+function('tr')
+'
+abcdef
+line  :
+abcdef
+abcA
+line  :
+abcB'
+['a', 'dup_a']
+['a', 'a']
+['a', 'b', 'c', 'C']
+[2, 2]
+[2, 2]
+1
+1
+function('Put')
+testdir
+test86.in
+src
+testdir/test86.in
+testdir
+test86.in
+> Output
+>> OutputSetattr
+del sys.stdout.softspace:AttributeError:("can't delete OutputObject attributes",)
+>>> Testing NumberToLong using sys.stdout.softspace = %s
+sys.stdout.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+sys.stdout.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+sys.stdout.softspace = -1:ValueError:('number must be greater or equal to zero',)
+<<< Finished
+>>> Testing NumberToLong using sys.stderr.softspace = %s
+sys.stderr.softspace = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+sys.stderr.softspace = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+sys.stderr.softspace = -1:ValueError:('number must be greater or equal to zero',)
+<<< Finished
+sys.stdout.attr = None:AttributeError:('invalid attribute: attr',)
+>> OutputWrite
+sys.stdout.write(None):TypeError:('coercing to Unicode: need string or buffer, NoneType found',)
+>> OutputWriteLines
+sys.stdout.writelines(None):TypeError:("'NoneType' object is not iterable",)
+sys.stdout.writelines([1]):TypeError:('coercing to Unicode: need string or buffer, int found',)
+>>> Testing *Iter* using sys.stdout.writelines(%s)
+sys.stdout.writelines(FailingIter()):NotImplementedError:('iter',)
+sys.stdout.writelines(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+> VimCommand
+>>> Testing StringToChars using vim.command(%s)
+vim.command(1):TypeError:('expected str() or unicode() instance, but got int',)
+vim.command(u"\0"):TypeError:('expected string without null bytes',)
+vim.command("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+vim.command("", 2):TypeError:('command() takes exactly one argument (2 given)',)
+> VimToPython
+> VimEval
+>>> Testing StringToChars using vim.eval(%s)
+vim.eval(1):TypeError:('expected str() or unicode() instance, but got int',)
+vim.eval(u"\0"):TypeError:('expected string without null bytes',)
+vim.eval("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+vim.eval("", FailingTrue()):TypeError:('function takes exactly 1 argument (2 given)',)
+> VimEvalPy
+>>> Testing StringToChars using vim.bindeval(%s)
+vim.bindeval(1):TypeError:('expected str() or unicode() instance, but got int',)
+vim.bindeval(u"\0"):TypeError:('expected string without null bytes',)
+vim.bindeval("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+vim.eval("", 2):TypeError:('function takes exactly 1 argument (2 given)',)
+> VimStrwidth
+>>> Testing StringToChars using vim.strwidth(%s)
+vim.strwidth(1):TypeError:('expected str() or unicode() instance, but got int',)
+vim.strwidth(u"\0"):TypeError:('expected string without null bytes',)
+vim.strwidth("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+> VimForeachRTP
+vim.foreach_rtp(None):TypeError:("'NoneType' object is not callable",)
+vim.foreach_rtp(NoArgsCall()):TypeError:('__call__() takes exactly 1 argument (2 given)',)
+vim.foreach_rtp(FailingCall()):NotImplementedError:('call',)
+vim.foreach_rtp(int, 2):TypeError:('foreach_rtp() takes exactly one argument (2 given)',)
+> import
+import xxx_no_such_module_xxx:ImportError:('No module named xxx_no_such_module_xxx',)
+import failing_import:ImportError:('No module named failing_import',)
+import failing:NotImplementedError:()
+> Dictionary
+>> DictionaryConstructor
+vim.Dictionary("abcI"):ValueError:('expected sequence element of size 2, but got sequence of size 1',)
+>> DictionarySetattr
+del d.locked:AttributeError:('cannot delete vim.Dictionary attributes',)
+d.locked = FailingTrue():NotImplementedError:('bool',)
+vim.vvars.locked = False:TypeError:('cannot modify fixed dictionary',)
+d.scope = True:AttributeError:('cannot set attribute scope',)
+d.xxx = True:AttributeError:('cannot set attribute xxx',)
+>> _DictionaryItem
+d.get("a", 2, 3):TypeError:('function takes at most 2 arguments (3 given)',)
+>>> Testing StringToChars using d.get(%s)
+d.get(1):TypeError:('expected str() or unicode() instance, but got int',)
+d.get(u"\0"):TypeError:('expected string without null bytes',)
+d.get("\0"):TypeError:('expected string without null bytes',)
+<<< Finished
+d.pop("a"):KeyError:('a',)
+dl.pop("a"):error:('dictionary is locked',)
+>> DictionaryIterNext
+for i in ned: ned["a"] = 1:RuntimeError:('hashtab changed during iteration',)
+>> DictionaryAssItem
+dl["b"] = 1:error:('dictionary is locked',)
+>>> Testing StringToChars using d[%s] = 1
+d[1] = 1:TypeError:('expected str() or unicode() instance, but got int',)
+d[u"\0"] = 1:TypeError:('expected string without null bytes',)
+d["\0"] = 1:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = {%s : 1}
+d["a"] = {1 : 1}:TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = {u"\0" : 1}:TypeError:('expected string without null bytes',)
+d["a"] = {"\0" : 1}:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}}
+d["a"] = {"abcF" : {1 : 1}}:TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = {"abcF" : {u"\0" : 1}}:TypeError:('expected string without null bytes',)
+d["a"] = {"abcF" : {"\0" : 1}}:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})}
+d["a"] = {"abcF" : Mapping({1 : 1})}:TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = {"abcF" : Mapping({u"\0" : 1})}:TypeError:('expected string without null bytes',)
+d["a"] = {"abcF" : Mapping({"\0" : 1})}:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d["a"] = {"abcF" : %s}
+d["a"] = {"abcF" : FailingIter()}:TypeError:('unable to convert FailingIter to vim structure',)
+d["a"] = {"abcF" : FailingIterNext()}:NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s}
+d["a"] = {"abcF" : None}:TypeError:('unable to convert NoneType to vim structure',)
+d["a"] = {"abcF" : {"": 1}}:ValueError:('empty keys are not allowed',)
+d["a"] = {"abcF" : {u"": 1}}:ValueError:('empty keys are not allowed',)
+d["a"] = {"abcF" : FailingMapping()}:NotImplementedError:('keys',)
+d["a"] = {"abcF" : FailingMappingKey()}:NotImplementedError:('getitem:mappingkey',)
+d["a"] = {"abcF" : FailingNumber()}:TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({%s : 1})
+d["a"] = Mapping({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = Mapping({u"\0" : 1}):TypeError:('expected string without null bytes',)
+d["a"] = Mapping({"\0" : 1}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}})
+d["a"] = Mapping({"abcG" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = Mapping({"abcG" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+d["a"] = Mapping({"abcG" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})})
+d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+d["a"] = Mapping({"abcG" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s})
+d["a"] = Mapping({"abcG" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',)
+d["a"] = Mapping({"abcG" : FailingIterNext()}):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s})
+d["a"] = Mapping({"abcG" : None}):TypeError:('unable to convert NoneType to vim structure',)
+d["a"] = Mapping({"abcG" : {"": 1}}):ValueError:('empty keys are not allowed',)
+d["a"] = Mapping({"abcG" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+d["a"] = Mapping({"abcG" : FailingMapping()}):NotImplementedError:('keys',)
+d["a"] = Mapping({"abcG" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+d["a"] = Mapping({"abcG" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using d["a"] = %s
+d["a"] = FailingIter():TypeError:('unable to convert FailingIter to vim structure',)
+d["a"] = FailingIterNext():NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = %s
+d["a"] = None:TypeError:('unable to convert NoneType to vim structure',)
+d["a"] = {"": 1}:ValueError:('empty keys are not allowed',)
+d["a"] = {u"": 1}:ValueError:('empty keys are not allowed',)
+d["a"] = FailingMapping():NotImplementedError:('keys',)
+d["a"] = FailingMappingKey():NotImplementedError:('getitem:mappingkey',)
+d["a"] = FailingNumber():TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> DictionaryUpdate
+>>> kwargs
+>>> iter
+d.update(FailingMapping()):NotImplementedError:('keys',)
+d.update([FailingIterNext()]):NotImplementedError:('next',)
+>>> Testing *Iter* using d.update(%s)
+d.update(FailingIter()):NotImplementedError:('iter',)
+d.update(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing StringToChars using d.update({%s : 1})
+d.update({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+d.update({u"\0" : 1}):TypeError:('expected string without null bytes',)
+d.update({"\0" : 1}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update({"abcF" : {%s : 1}})
+d.update({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+d.update({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+d.update({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})})
+d.update({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+d.update({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+d.update({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d.update({"abcF" : %s})
+d.update({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',)
+d.update({"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update({"abcF" : %s})
+d.update({"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',)
+d.update({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+d.update({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+d.update({"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+d.update({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+d.update({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({%s : 1}))
+d.update(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+d.update(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+d.update(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}}))
+d.update(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+d.update(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+d.update(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})}))
+d.update(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+d.update(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d.update(Mapping({"abcG" : %s}))
+d.update(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',)
+d.update(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s}))
+d.update(Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',)
+d.update(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+d.update(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+d.update(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+d.update(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+d.update(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using d.update(%s)
+d.update(FailingIter()):NotImplementedError:('iter',)
+d.update(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update(%s)
+d.update(None):TypeError:("'NoneType' object is not iterable",)
+d.update({"": 1}):ValueError:('empty keys are not allowed',)
+d.update({u"": 1}):ValueError:('empty keys are not allowed',)
+d.update(FailingMapping()):NotImplementedError:('keys',)
+d.update(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+d.update(FailingNumber()):TypeError:("'FailingNumber' object is not iterable",)
+<<< Finished
+>>> Testing StringToChars using d.update(((%s, 0),))
+d.update(((1, 0),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update(((u"\0", 0),)):TypeError:('expected string without null bytes',)
+d.update((("\0", 0),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {%s : 1}),))
+d.update((("a", {1 : 1}),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", {u"\0" : 1}),)):TypeError:('expected string without null bytes',)
+d.update((("a", {"\0" : 1}),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),))
+d.update((("a", {"abcF" : {1 : 1}}),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", {"abcF" : {u"\0" : 1}}),)):TypeError:('expected string without null bytes',)
+d.update((("a", {"abcF" : {"\0" : 1}}),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),))
+d.update((("a", {"abcF" : Mapping({1 : 1})}),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", {"abcF" : Mapping({u"\0" : 1})}),)):TypeError:('expected string without null bytes',)
+d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d.update((("a", {"abcF" : %s}),))
+d.update((("a", {"abcF" : FailingIter()}),)):TypeError:('unable to convert FailingIter to vim structure',)
+d.update((("a", {"abcF" : FailingIterNext()}),)):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),))
+d.update((("a", {"abcF" : None}),)):TypeError:('unable to convert NoneType to vim structure',)
+d.update((("a", {"abcF" : {"": 1}}),)):ValueError:('empty keys are not allowed',)
+d.update((("a", {"abcF" : {u"": 1}}),)):ValueError:('empty keys are not allowed',)
+d.update((("a", {"abcF" : FailingMapping()}),)):NotImplementedError:('keys',)
+d.update((("a", {"abcF" : FailingMappingKey()}),)):NotImplementedError:('getitem:mappingkey',)
+d.update((("a", {"abcF" : FailingNumber()}),)):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
+d.update((("a", Mapping({1 : 1})),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", Mapping({u"\0" : 1})),)):TypeError:('expected string without null bytes',)
+d.update((("a", Mapping({"\0" : 1})),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),))
+d.update((("a", Mapping({"abcG" : {1 : 1}})),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", Mapping({"abcG" : {u"\0" : 1}})),)):TypeError:('expected string without null bytes',)
+d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),))
+d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):TypeError:('expected str() or unicode() instance, but got int',)
+d.update((("a", Mapping({"abcG" : Mapping({u"\0" : 1})})),)):TypeError:('expected string without null bytes',)
+d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),))
+d.update((("a", Mapping({"abcG" : FailingIter()})),)):TypeError:('unable to convert FailingIter to vim structure',)
+d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),))
+d.update((("a", Mapping({"abcG" : None})),)):TypeError:('unable to convert NoneType to vim structure',)
+d.update((("a", Mapping({"abcG" : {"": 1}})),)):ValueError:('empty keys are not allowed',)
+d.update((("a", Mapping({"abcG" : {u"": 1}})),)):ValueError:('empty keys are not allowed',)
+d.update((("a", Mapping({"abcG" : FailingMapping()})),)):NotImplementedError:('keys',)
+d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):NotImplementedError:('getitem:mappingkey',)
+d.update((("a", Mapping({"abcG" : FailingNumber()})),)):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using d.update((("a", %s),))
+d.update((("a", FailingIter()),)):TypeError:('unable to convert FailingIter to vim structure',)
+d.update((("a", FailingIterNext()),)):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", %s),))
+d.update((("a", None),)):TypeError:('unable to convert NoneType to vim structure',)
+d.update((("a", {"": 1}),)):ValueError:('empty keys are not allowed',)
+d.update((("a", {u"": 1}),)):ValueError:('empty keys are not allowed',)
+d.update((("a", FailingMapping()),)):NotImplementedError:('keys',)
+d.update((("a", FailingMappingKey()),)):NotImplementedError:('getitem:mappingkey',)
+d.update((("a", FailingNumber()),)):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> DictionaryPopItem
+d.popitem(1, 2):TypeError:('popitem() takes no arguments (2 given)',)
+>> DictionaryHasKey
+d.has_key():TypeError:('has_key() takes exactly one argument (0 given)',)
+> List
+>> ListConstructor
+vim.List(1, 2):TypeError:('function takes at most 1 argument (2 given)',)
+vim.List(a=1):TypeError:('list constructor does not accept keyword arguments',)
+>>> Testing *Iter* using vim.List(%s)
+vim.List(FailingIter()):NotImplementedError:('iter',)
+vim.List(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing StringToChars using vim.List([{%s : 1}])
+vim.List([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([{u"\0" : 1}]):TypeError:('expected string without null bytes',)
+vim.List([{"\0" : 1}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}])
+vim.List([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',)
+vim.List([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}])
+vim.List([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',)
+vim.List([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using vim.List([{"abcF" : %s}])
+vim.List([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to vim structure',)
+vim.List([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}])
+vim.List([{"abcF" : None}]):TypeError:('unable to convert NoneType to vim structure',)
+vim.List([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',)
+vim.List([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',)
+vim.List([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',)
+vim.List([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',)
+vim.List([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({%s : 1})])
+vim.List([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',)
+vim.List([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})])
+vim.List([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',)
+vim.List([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})])
+vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',)
+vim.List([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',)
+vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})])
+vim.List([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to vim structure',)
+vim.List([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})])
+vim.List([Mapping({"abcG" : None})]):TypeError:('unable to convert NoneType to vim structure',)
+vim.List([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',)
+vim.List([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',)
+vim.List([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',)
+vim.List([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',)
+vim.List([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using vim.List([%s])
+vim.List([FailingIter()]):TypeError:('unable to convert FailingIter to vim structure',)
+vim.List([FailingIterNext()]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([%s])
+vim.List([None]):TypeError:('unable to convert NoneType to vim structure',)
+vim.List([{"": 1}]):ValueError:('empty keys are not allowed',)
+vim.List([{u"": 1}]):ValueError:('empty keys are not allowed',)
+vim.List([FailingMapping()]):NotImplementedError:('keys',)
+vim.List([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',)
+vim.List([FailingNumber()]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> ListItem
+l[1000]:IndexError:('list index out of range',)
+>> ListAssItem
+ll[1] = 2:error:('list is locked',)
+l[1000] = 3:IndexError:('list index out of range',)
+>> ListAssSlice
+ll[1:100] = "abcJ":error:('list is locked',)
+>>> Testing *Iter* using l[:] = %s
+l[:] = FailingIter():NotImplementedError:('iter',)
+l[:] = FailingIterNext():NotImplementedError:('next',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [{%s : 1}]
+l[:] = [{1 : 1}]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [{u"\0" : 1}]:TypeError:('expected string without null bytes',)
+l[:] = [{"\0" : 1}]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}]
+l[:] = [{"abcF" : {1 : 1}}]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [{"abcF" : {u"\0" : 1}}]:TypeError:('expected string without null bytes',)
+l[:] = [{"abcF" : {"\0" : 1}}]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}]
+l[:] = [{"abcF" : Mapping({1 : 1})}]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [{"abcF" : Mapping({u"\0" : 1})}]:TypeError:('expected string without null bytes',)
+l[:] = [{"abcF" : Mapping({"\0" : 1})}]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using l[:] = [{"abcF" : %s}]
+l[:] = [{"abcF" : FailingIter()}]:TypeError:('unable to convert FailingIter to vim structure',)
+l[:] = [{"abcF" : FailingIterNext()}]:NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}]
+l[:] = [{"abcF" : None}]:TypeError:('unable to convert NoneType to vim structure',)
+l[:] = [{"abcF" : {"": 1}}]:ValueError:('empty keys are not allowed',)
+l[:] = [{"abcF" : {u"": 1}}]:ValueError:('empty keys are not allowed',)
+l[:] = [{"abcF" : FailingMapping()}]:NotImplementedError:('keys',)
+l[:] = [{"abcF" : FailingMappingKey()}]:NotImplementedError:('getitem:mappingkey',)
+l[:] = [{"abcF" : FailingNumber()}]:TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
+l[:] = [Mapping({1 : 1})]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [Mapping({u"\0" : 1})]:TypeError:('expected string without null bytes',)
+l[:] = [Mapping({"\0" : 1})]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})]
+l[:] = [Mapping({"abcG" : {1 : 1}})]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [Mapping({"abcG" : {u"\0" : 1}})]:TypeError:('expected string without null bytes',)
+l[:] = [Mapping({"abcG" : {"\0" : 1}})]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})]
+l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:TypeError:('expected str() or unicode() instance, but got int',)
+l[:] = [Mapping({"abcG" : Mapping({u"\0" : 1})})]:TypeError:('expected string without null bytes',)
+l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})]
+l[:] = [Mapping({"abcG" : FailingIter()})]:TypeError:('unable to convert FailingIter to vim structure',)
+l[:] = [Mapping({"abcG" : FailingIterNext()})]:NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})]
+l[:] = [Mapping({"abcG" : None})]:TypeError:('unable to convert NoneType to vim structure',)
+l[:] = [Mapping({"abcG" : {"": 1}})]:ValueError:('empty keys are not allowed',)
+l[:] = [Mapping({"abcG" : {u"": 1}})]:ValueError:('empty keys are not allowed',)
+l[:] = [Mapping({"abcG" : FailingMapping()})]:NotImplementedError:('keys',)
+l[:] = [Mapping({"abcG" : FailingMappingKey()})]:NotImplementedError:('getitem:mappingkey',)
+l[:] = [Mapping({"abcG" : FailingNumber()})]:TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using l[:] = [%s]
+l[:] = [FailingIter()]:TypeError:('unable to convert FailingIter to vim structure',)
+l[:] = [FailingIterNext()]:NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [%s]
+l[:] = [None]:TypeError:('unable to convert NoneType to vim structure',)
+l[:] = [{"": 1}]:ValueError:('empty keys are not allowed',)
+l[:] = [{u"": 1}]:ValueError:('empty keys are not allowed',)
+l[:] = [FailingMapping()]:NotImplementedError:('keys',)
+l[:] = [FailingMappingKey()]:NotImplementedError:('getitem:mappingkey',)
+l[:] = [FailingNumber()]:TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> ListConcatInPlace
+>>> Testing *Iter* using l.extend(%s)
+l.extend(FailingIter()):NotImplementedError:('iter',)
+l.extend(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing StringToChars using l.extend([{%s : 1}])
+l.extend([{1 : 1}]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([{u"\0" : 1}]):TypeError:('expected string without null bytes',)
+l.extend([{"\0" : 1}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}])
+l.extend([{"abcF" : {1 : 1}}]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([{"abcF" : {u"\0" : 1}}]):TypeError:('expected string without null bytes',)
+l.extend([{"abcF" : {"\0" : 1}}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}])
+l.extend([{"abcF" : Mapping({1 : 1})}]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([{"abcF" : Mapping({u"\0" : 1})}]):TypeError:('expected string without null bytes',)
+l.extend([{"abcF" : Mapping({"\0" : 1})}]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using l.extend([{"abcF" : %s}])
+l.extend([{"abcF" : FailingIter()}]):TypeError:('unable to convert FailingIter to vim structure',)
+l.extend([{"abcF" : FailingIterNext()}]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}])
+l.extend([{"abcF" : None}]):TypeError:('unable to convert NoneType to vim structure',)
+l.extend([{"abcF" : {"": 1}}]):ValueError:('empty keys are not allowed',)
+l.extend([{"abcF" : {u"": 1}}]):ValueError:('empty keys are not allowed',)
+l.extend([{"abcF" : FailingMapping()}]):NotImplementedError:('keys',)
+l.extend([{"abcF" : FailingMappingKey()}]):NotImplementedError:('getitem:mappingkey',)
+l.extend([{"abcF" : FailingNumber()}]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({%s : 1})])
+l.extend([Mapping({1 : 1})]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([Mapping({u"\0" : 1})]):TypeError:('expected string without null bytes',)
+l.extend([Mapping({"\0" : 1})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})])
+l.extend([Mapping({"abcG" : {1 : 1}})]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([Mapping({"abcG" : {u"\0" : 1}})]):TypeError:('expected string without null bytes',)
+l.extend([Mapping({"abcG" : {"\0" : 1}})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})])
+l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):TypeError:('expected str() or unicode() instance, but got int',)
+l.extend([Mapping({"abcG" : Mapping({u"\0" : 1})})]):TypeError:('expected string without null bytes',)
+l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})])
+l.extend([Mapping({"abcG" : FailingIter()})]):TypeError:('unable to convert FailingIter to vim structure',)
+l.extend([Mapping({"abcG" : FailingIterNext()})]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})])
+l.extend([Mapping({"abcG" : None})]):TypeError:('unable to convert NoneType to vim structure',)
+l.extend([Mapping({"abcG" : {"": 1}})]):ValueError:('empty keys are not allowed',)
+l.extend([Mapping({"abcG" : {u"": 1}})]):ValueError:('empty keys are not allowed',)
+l.extend([Mapping({"abcG" : FailingMapping()})]):NotImplementedError:('keys',)
+l.extend([Mapping({"abcG" : FailingMappingKey()})]):NotImplementedError:('getitem:mappingkey',)
+l.extend([Mapping({"abcG" : FailingNumber()})]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using l.extend([%s])
+l.extend([FailingIter()]):TypeError:('unable to convert FailingIter to vim structure',)
+l.extend([FailingIterNext()]):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([%s])
+l.extend([None]):TypeError:('unable to convert NoneType to vim structure',)
+l.extend([{"": 1}]):ValueError:('empty keys are not allowed',)
+l.extend([{u"": 1}]):ValueError:('empty keys are not allowed',)
+l.extend([FailingMapping()]):NotImplementedError:('keys',)
+l.extend([FailingMappingKey()]):NotImplementedError:('getitem:mappingkey',)
+l.extend([FailingNumber()]):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>> ListSetattr
+del l.locked:AttributeError:('cannot delete vim.List attributes',)
+l.locked = FailingTrue():NotImplementedError:('bool',)
+l.xxx = True:AttributeError:('cannot set attribute xxx',)
+> Function
+>> FunctionConstructor
+vim.Function("123"):ValueError:('unnamed function 123 does not exist',)
+vim.Function("xxx_non_existent_function_xxx"):ValueError:('function xxx_non_existent_function_xxx does not exist',)
+vim.Function("xxx#non#existent#function#xxx"):NOT FAILED
+>> FunctionCall
+>>> Testing StringToChars using f({%s : 1})
+f({1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+f({u"\0" : 1}):TypeError:('expected string without null bytes',)
+f({"\0" : 1}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using f({"abcF" : {%s : 1}})
+f({"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+f({"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+f({"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})})
+f({"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+f({"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+f({"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using f({"abcF" : %s})
+f({"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',)
+f({"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using f({"abcF" : %s})
+f({"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',)
+f({"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+f({"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+f({"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+f({"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+f({"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using f(Mapping({%s : 1}))
+f(Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+f(Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+f(Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}}))
+f(Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+f(Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+f(Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})}))
+f(Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+f(Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+f(Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using f(Mapping({"abcG" : %s}))
+f(Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',)
+f(Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s}))
+f(Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',)
+f(Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+f(Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+f(Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+f(Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+f(Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using f(%s)
+f(FailingIter()):TypeError:('unable to convert FailingIter to vim structure',)
+f(FailingIterNext()):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using f(%s)
+f(None):TypeError:('unable to convert NoneType to vim structure',)
+f({"": 1}):ValueError:('empty keys are not allowed',)
+f({u"": 1}):ValueError:('empty keys are not allowed',)
+f(FailingMapping()):NotImplementedError:('keys',)
+f(FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+f(FailingNumber()):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using fd(self={%s : 1})
+fd(self={1 : 1}):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self={u"\0" : 1}):TypeError:('expected string without null bytes',)
+fd(self={"\0" : 1}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using fd(self={"abcF" : {%s : 1}})
+fd(self={"abcF" : {1 : 1}}):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self={"abcF" : {u"\0" : 1}}):TypeError:('expected string without null bytes',)
+fd(self={"abcF" : {"\0" : 1}}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})})
+fd(self={"abcF" : Mapping({1 : 1})}):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self={"abcF" : Mapping({u"\0" : 1})}):TypeError:('expected string without null bytes',)
+fd(self={"abcF" : Mapping({"\0" : 1})}):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using fd(self={"abcF" : %s})
+fd(self={"abcF" : FailingIter()}):TypeError:('unable to convert FailingIter to vim structure',)
+fd(self={"abcF" : FailingIterNext()}):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self={"abcF" : %s})
+fd(self={"abcF" : None}):TypeError:('unable to convert NoneType to vim structure',)
+fd(self={"abcF" : {"": 1}}):ValueError:('empty keys are not allowed',)
+fd(self={"abcF" : {u"": 1}}):ValueError:('empty keys are not allowed',)
+fd(self={"abcF" : FailingMapping()}):NotImplementedError:('keys',)
+fd(self={"abcF" : FailingMappingKey()}):NotImplementedError:('getitem:mappingkey',)
+fd(self={"abcF" : FailingNumber()}):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({%s : 1}))
+fd(self=Mapping({1 : 1})):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self=Mapping({u"\0" : 1})):TypeError:('expected string without null bytes',)
+fd(self=Mapping({"\0" : 1})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}}))
+fd(self=Mapping({"abcG" : {1 : 1}})):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self=Mapping({"abcG" : {u"\0" : 1}})):TypeError:('expected string without null bytes',)
+fd(self=Mapping({"abcG" : {"\0" : 1}})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})}))
+fd(self=Mapping({"abcG" : Mapping({1 : 1})})):TypeError:('expected str() or unicode() instance, but got int',)
+fd(self=Mapping({"abcG" : Mapping({u"\0" : 1})})):TypeError:('expected string without null bytes',)
+fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):TypeError:('expected string without null bytes',)
+<<< Finished
+>>> Testing *Iter* using fd(self=Mapping({"abcG" : %s}))
+fd(self=Mapping({"abcG" : FailingIter()})):TypeError:('unable to convert FailingIter to vim structure',)
+fd(self=Mapping({"abcG" : FailingIterNext()})):NotImplementedError:('next',)
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s}))
+fd(self=Mapping({"abcG" : None})):TypeError:('unable to convert NoneType to vim structure',)
+fd(self=Mapping({"abcG" : {"": 1}})):ValueError:('empty keys are not allowed',)
+fd(self=Mapping({"abcG" : {u"": 1}})):ValueError:('empty keys are not allowed',)
+fd(self=Mapping({"abcG" : FailingMapping()})):NotImplementedError:('keys',)
+fd(self=Mapping({"abcG" : FailingMappingKey()})):NotImplementedError:('getitem:mappingkey',)
+fd(self=Mapping({"abcG" : FailingNumber()})):TypeError:('long() argument must be a string or a number',)
+<<< Finished
+>>> Testing *Iter* using fd(self=%s)
+fd(self=FailingIter()):TypeError:('unable to convert FailingIter to vim dictionary',)
+fd(self=FailingIterNext()):TypeError:('unable to convert FailingIterNext to vim dictionary',)
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self=%s)
+fd(self=None):TypeError:('unable to convert NoneType to vim dictionary',)
+fd(self={"": 1}):ValueError:('empty keys are not allowed',)
+fd(self={u"": 1}):ValueError:('empty keys are not allowed',)
+fd(self=FailingMapping()):NotImplementedError:('keys',)
+fd(self=FailingMappingKey()):NotImplementedError:('getitem:mappingkey',)
+fd(self=FailingNumber()):TypeError:('unable to convert FailingNumber to vim dictionary',)
+<<< Finished
+>>> Testing ConvertFromPyMapping using fd(self=%s)
+fd(self=[]):TypeError:('unable to convert list to vim dictionary',)
+<<< Finished
+> TabPage
+>> TabPageAttr
+vim.current.tabpage.xxx:AttributeError:('xxx',)
+> TabList
+>> TabListItem
+vim.tabpages[1000]:IndexError:('no such tab page',)
+> Window
+>> WindowAttr
+vim.current.window.xxx:AttributeError:('xxx',)
+>> WindowSetattr
+vim.current.window.buffer = 0:TypeError:('readonly attribute: buffer',)
+vim.current.window.cursor = (100000000, 100000000):error:('cursor position outside buffer',)
+vim.current.window.cursor = True:TypeError:('argument must be 2-item sequence, not bool',)
+>>> Testing NumberToLong using vim.current.window.height = %s
+vim.current.window.height = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+vim.current.window.height = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+vim.current.window.height = -1:ValueError:('number must be greater or equal to zero',)
+<<< Finished
+>>> Testing NumberToLong using vim.current.window.width = %s
+vim.current.window.width = []:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+vim.current.window.width = None:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+vim.current.window.width = -1:ValueError:('number must be greater or equal to zero',)
+<<< Finished
+vim.current.window.xxxxxx = True:AttributeError:('xxxxxx',)
+> WinList
+>> WinListItem
+vim.windows[1000]:IndexError:('no such window',)
+> Buffer
+>> StringToLine (indirect)
+vim.current.buffer[0] = u"\na":error:('string cannot contain newlines',)
+vim.current.buffer[0] = "\na":error:('string cannot contain newlines',)
+>> SetBufferLine (indirect)
+vim.current.buffer[0] = True:TypeError:('bad argument type for built-in operation',)
+>> SetBufferLineList (indirect)
+vim.current.buffer[:] = True:TypeError:('bad argument type for built-in operation',)
+vim.current.buffer[:] = ["\na", "bc"]:error:('string cannot contain newlines',)
+>> InsertBufferLines (indirect)
+vim.current.buffer.append(None):TypeError:('bad argument type for built-in operation',)
+vim.current.buffer.append(["\na", "bc"]):error:('string cannot contain newlines',)
+vim.current.buffer.append("\nbc"):error:('string cannot contain newlines',)
+>> RBItem
+vim.current.buffer[100000000]:IndexError:('line number out of range',)
+>> RBAsItem
+vim.current.buffer[100000000] = "":IndexError:('line number out of range',)
+>> BufferAttr
+vim.current.buffer.xxx:AttributeError:('xxx',)
+>> BufferSetattr
+vim.current.buffer.name = True:TypeError:('expected str() or unicode() instance, but got bool',)
+vim.current.buffer.xxx = True:AttributeError:('xxx',)
+>> BufferMark
+vim.current.buffer.mark(0):TypeError:('expected str() or unicode() instance, but got int',)
+vim.current.buffer.mark("abcM"):ValueError:('mark name must be a single character',)
+vim.current.buffer.mark("!"):error:('invalid mark name',)
+>> BufferRange
+vim.current.buffer.range(1, 2, 3):TypeError:('function takes exactly 2 arguments (3 given)',)
+> BufMap
+>> BufMapItem
+vim.buffers[100000000]:KeyError:(100000000,)
+>>> Testing NumberToLong using vim.buffers[%s]
+vim.buffers[[]]:TypeError:('expected int(), long() or something supporting coercing to long(), but got list',)
+vim.buffers[None]:TypeError:('expected int(), long() or something supporting coercing to long(), but got NoneType',)
+vim.buffers[-1]:ValueError:('number must be greater then zero',)
+vim.buffers[0]:ValueError:('number must be greater then zero',)
+<<< Finished
+> Current
+>> CurrentGetattr
+vim.current.xxx:AttributeError:('xxx',)
+>> CurrentSetattr
+vim.current.line = True:TypeError:('bad argument type for built-in operation',)
+vim.current.buffer = True:TypeError:('expected vim.Buffer object, but got bool',)
+vim.current.window = True:TypeError:('expected vim.Window object, but got bool',)
+vim.current.tabpage = True:TypeError:('expected vim.TabPage object, but got bool',)
+vim.current.xxx = True:AttributeError:('xxx',)
+['/testdir']
+'/testdir'
+2,xx
+before
+after
+pythonx/topmodule/__init__.py
+pythonx/topmodule/submodule/__init__.py
+pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
+vim.command("throw 'abcN'"):error:('abcN',)
+Exe("throw 'def'"):error:('def',)
+vim.eval("Exe('throw ''ghi''')"):error:('ghi',)
+vim.eval("Exe('echoerr ''jkl''')"):error:('Vim(echoerr):jkl',)
+vim.eval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)
+vim.bindeval("Exe('xxx_non_existent_command_xxx')"):error:('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',)
diff -Naur vim73.orig/src/testdir/test87.in vim73/src/testdir/test87.in
--- vim73.orig/src/testdir/test87.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test87.in	2013-08-04 19:09:11.310608420 +0000
@@ -0,0 +1,1271 @@
+Tests for various python features.     vim: set ft=vim :
+
+STARTTEST
+:so small.vim
+:set noswapfile
+:if !has('python3') | e! test.ok | wq! test.out | endif
+:lang C
+:fun Test()
+:py3 import vim
+:let l = []
+:py3 l=vim.bindeval('l')
+:py3 f=vim.bindeval('function("strlen")')
+:" Extending List directly with different types
+:py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]]
+:$put =string(l)
+:$put =string(l[-1])
+:try
+:  $put =string(l[-4])
+:catch
+:  $put =v:exception[:13]
+:endtry
+:" List assignment
+:py3 l[0]=0
+:$put =string(l)
+:py3 l[-2]=f
+:$put =string(l)
+:"
+:" Extending Dictionary directly with different types
+:let d = {}
+:fun d.f()
+:  return 1
+:endfun
+py3 << EOF
+d=vim.bindeval('d')
+d['1']='asd'
+d.update(b=[1, 2, f])
+d.update((('-1', {'a': 1}),))
+d.update({'0': -1})
+dk = d.keys()
+dv = d.values()
+di = d.items()
+dk.sort(key=repr)
+dv.sort(key=repr)
+di.sort(key=repr)
+EOF
+:$put =py3eval('d[''f''](self={})')
+:$put =py3eval('repr(dk)')
+:$put =substitute(py3eval('repr(dv)'),'0x\x\+','','g')
+:$put =substitute(py3eval('repr(di)'),'0x\x\+','','g')
+:for [key, Val] in sort(items(d))
+:  $put =string(key) . ' : ' . string(Val)
+:  unlet key Val
+:endfor
+:py3 del dk
+:py3 del di
+:py3 del dv
+:"
+:" removing items with del
+:py3 del l[2]
+:$put =string(l)
+:let l = range(8)
+:py3 l=vim.bindeval('l')
+:try
+:   py3 del l[:3]
+:   py3 del l[1:]
+:catch
+:   $put =v:exception
+:endtry
+:$put =string(l)
+:"
+:py3 del d['-1']
+:py3 del d['f']
+:$put =string(py3eval('d.get(''b'', 1)'))
+:$put =string(py3eval('d.pop(''b'')'))
+:$put =string(py3eval('d.get(''b'', 1)'))
+:$put =string(py3eval('d.pop(''1'', 2)'))
+:$put =string(py3eval('d.pop(''1'', 2)'))
+:$put =py3eval('repr(d.has_key(''0''))')
+:$put =py3eval('repr(d.has_key(''1''))')
+:$put =py3eval('repr(''0'' in d)')
+:$put =py3eval('repr(''1'' in d)')
+:$put =py3eval('repr(list(iter(d)))')
+:$put =string(d)
+:$put =py3eval('repr(d.popitem())')
+:$put =py3eval('repr(d.get(''0''))')
+:$put =py3eval('repr(list(iter(d)))')
+:"
+:" removing items out of range: silently skip items that don't exist
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:" The following two ranges delete nothing as they match empty list:
+:py3 del l[2:1]
+:$put =string(l)
+:py3 del l[2:2]
+:$put =string(l)
+:py3 del l[2:3]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[2:4]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[2:5]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[2:6]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:" The following two ranges delete nothing as they match empty list:
+:py3 del l[-1:2]
+:$put =string(l)
+:py3 del l[-2:2]
+:$put =string(l)
+:py3 del l[-3:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[-4:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[-5:2]
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 del l[-6:2]
+:$put =string(l)
+:"
+:" Slice assignment to a list
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[0:0]=['a']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[1:2]=['b']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[2:4]=['c']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[4:4]=['d']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[-1:2]=['e']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[-10:2]=['f']
+:$put =string(l)
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:py3 l[2:-10]=['g']
+:$put =string(l)
+:let l = []
+:py3 l=vim.bindeval('l')
+:py3 l[0:0]=['h']
+:$put =string(l)
+:"
+:" Locked variables
+:let l = [0, 1, 2, 3]
+:py3 l=vim.bindeval('l')
+:lockvar! l
+:py3 l[2]='i'
+:$put =string(l)
+:unlockvar! l
+:"
+:" Function calls
+:fun New(...)
+:   return ['NewStart']+a:000+['NewEnd']
+:endfun
+:fun DictNew(...) dict
+:   return ['DictNewStart']+a:000+['DictNewEnd', self]
+:endfun
+:let l=[function('New'), function('DictNew')]
+:py3 l=vim.bindeval('l')
+:py3 l.extend(list(l[0](1, 2, 3)))
+:$put =string(l)
+:py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
+:$put =string(l)
+:py3 l+=[l[0].name]
+:$put =string(l)
+:try
+:   py3 l[1](1, 2, 3)
+:catch
+:   $put =v:exception[:13]
+:endtry
+:py3 f=l[0]
+:delfunction New
+:try
+:   py3 f(1, 2, 3)
+:catch
+:   $put =v:exception[:13]
+:endtry
+:if has('float')
+:   let l=[0.0]
+:   py3 l=vim.bindeval('l')
+:   py3 l.extend([0.0])
+:   $put =string(l)
+:else
+:   $put ='[0.0, 0.0]'
+:endif
+:let messages=[]
+:delfunction DictNew
+py3 <<EOF
+d=vim.bindeval('{}')
+m=vim.bindeval('messages')
+def em(expr, g=globals(), l=locals()):
+    try:
+        exec(expr, g, l)
+    except Exception as e:
+        m.extend([e.__class__.__name__])
+
+em('d["abc1"]')
+em('d["abc1"]="\\0"')
+em('d["abc1"]=vim')
+em('d[""]=1')
+em('d["a\\0b"]=1')
+em('d[b"a\\0b"]=1')
+
+em('d.pop("abc1")')
+em('d.popitem()')
+del em
+del m
+EOF
+:$put =messages
+:unlet messages
+:" locked and scope attributes
+:let d={} | let dl={} | lockvar dl
+:for s in split("d dl v: g:")
+:    let name=tr(s, ':', 's')
+:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
+:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
+:    $put =toput
+:endfor
+:silent! let d.abc2=1
+:silent! let dl.abc3=1
+:py3 d.locked=True
+:py3 dl.locked=False
+:silent! let d.def=1
+:silent! let dl.def=1
+:put ='d:'.string(d)
+:put ='dl:'.string(dl)
+:unlet d dl
+:
+:let l=[] | let ll=[] | lockvar ll
+:for s in split("l ll")
+:    let name=tr(s, ':', 's')
+:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
+:    let toput=s.' : locked:'.py3eval(name.'.locked')
+:    $put =toput
+:endfor
+:silent! call extend(l, [0])
+:silent! call extend(ll, [0])
+:py3 l.locked=True
+:py3 ll.locked=False
+:silent! call extend(l, [1])
+:silent! call extend(ll, [1])
+:put ='l:'.string(l)
+:put ='ll:'.string(ll)
+:unlet l ll
+:"
+:" py3eval()
+:let l=py3eval('[0, 1, 2]')
+:$put =string(l)
+:let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
+:$put =sort(items(d))
+:if has('float')
+:   let f=py3eval('0.0')
+:   $put =string(f)
+:else
+:   $put ='0.0'
+:endif
+:" Invalid values:
+:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
+:   try
+:      let v=py3eval(e)
+:   catch
+:      let toput=e.":\t".v:exception[:13]
+:      $put =toput
+:   endtry
+:endfor
+:"
+:" threading
+:let l = [0]
+:py3 l=vim.bindeval('l')
+py3 <<EOF
+import threading
+import time
+
+class T(threading.Thread):
+    def __init__(self):
+        threading.Thread.__init__(self)
+        self.t = 0
+        self.running = True
+
+    def run(self):
+        while self.running:
+            self.t += 1
+            time.sleep(0.1)
+
+t = T()
+del T
+t.start()
+EOF
+:sleep 1
+:py3 t.running = False
+:py3 t.join()
+:py3 l[0] = t.t > 8  # check if the background thread is working
+:py3 del time
+:py3 del threading
+:$put =string(l)
+:"
+:" settrace
+:let l = []
+:py3 l=vim.bindeval('l')
+py3 <<EOF
+import sys
+
+def traceit(frame, event, arg):
+    global l
+    if event == "line":
+        l += [frame.f_lineno]
+    return traceit
+
+def trace_main():
+    for i in range(5):
+        pass
+EOF
+:py3 sys.settrace(traceit)
+:py3 trace_main()
+:py3 sys.settrace(None)
+:py3 del traceit
+:py3 del trace_main
+:$put =string(l)
+:"
+:" Vars
+:let g:foo = 'bac'
+:let w:abc3 = 'def'
+:let b:baz = 'bar'
+:let t:bar = 'jkl'
+:try
+:  throw "Abc"
+:catch
+:  put =py3eval('vim.vvars[''exception'']')
+:endtry
+:put =py3eval('vim.vars[''foo'']')
+:put =py3eval('vim.current.window.vars[''abc3'']')
+:put =py3eval('vim.current.buffer.vars[''baz'']')
+:put =py3eval('vim.current.tabpage.vars[''bar'']')
+:"
+:" Options
+:" paste:          boolean, global
+:" previewheight   number,  global
+:" operatorfunc:   string,  global
+:" number:         boolean, window-local
+:" numberwidth:    number,  window-local
+:" colorcolumn:    string,  window-local
+:" statusline:     string,  window-local/global
+:" autoindent:     boolean, buffer-local
+:" shiftwidth:     number,  buffer-local
+:" omnifunc:       string,  buffer-local
+:" preserveindent: boolean, buffer-local/global
+:" path:           string,  buffer-local/global
+:let g:bufs=[bufnr('%')]
+:new
+:let g:bufs+=[bufnr('%')]
+:vnew
+:let g:bufs+=[bufnr('%')]
+:wincmd j
+:vnew
+:let g:bufs+=[bufnr('%')]
+:wincmd l
+:fun RecVars(opt)
+:  let gval =string(eval('&g:'.a:opt))
+:  let wvals=join(map(range(1, 4),  'v:val.":".string(getwinvar(v:val, "&".a:opt))'))
+:  let bvals=join(map(copy(g:bufs), 'v:val.":".string(getbufvar(v:val, "&".a:opt))'))
+:  put ='  G: '.gval
+:  put ='  W: '.wvals
+:  put ='  B: '.wvals
+:endfun
+py3 << EOF
+def e(s, g=globals(), l=locals()):
+    try:
+        exec(s, g, l)
+    except Exception as e:
+        vim.command('return ' + repr(e.__class__.__name__))
+
+def ev(s, g=globals(), l=locals()):
+    try:
+        return eval(s, g, l)
+    except Exception as e:
+        vim.command('let exc=' + repr(e.__class__.__name__))
+        return 0
+EOF
+:fun E(s)
+:   python3 e(vim.eval('a:s'))
+:endfun
+:fun Ev(s)
+:   let r=py3eval('ev(vim.eval("a:s"))')
+:   if exists('exc')
+:       throw exc
+:   endif
+:   return r
+:endfun
+:py3 gopts1=vim.options
+:py3 wopts1=vim.windows[2].options
+:py3 wopts2=vim.windows[0].options
+:py3 wopts3=vim.windows[1].options
+:py3 bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options
+:py3 bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options
+:py3 bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options
+:set path=.,..,,
+:let lst=[]
+:let lst+=[['paste',          1,     0,     1,     2,      1,    1,      0    ]]
+:let lst+=[['previewheight',  5,     1,     6,     'a',    0,    1,      0    ]]
+:let lst+=[['operatorfunc',   'A',   'B',   'C',   2,      0,    1,      0    ]]
+:let lst+=[['number',         0,     1,     1,     0,      1,    0,      1    ]]
+:let lst+=[['numberwidth',    2,     3,     5,     -100,   0,    0,      1    ]]
+:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc4',  0,    0,      1    ]]
+:let lst+=[['statusline',     '1',   '2',   '4',   0,      0,    1,      1    ]]
+:let lst+=[['autoindent',     0,     1,     1,     2,      1,    0,      2    ]]
+:let lst+=[['shiftwidth',     0,     2,     1,     3,      0,    0,      2    ]]
+:let lst+=[['omnifunc',       'A',   'B',   'C',   1,      0,    0,      2    ]]
+:let lst+=[['preserveindent', 0,     1,     1,     2,      1,    1,      2    ]]
+:let lst+=[['path',           '.,,', ',,',  '.',   0,      0,    1,      2    ]]
+:for       [oname,            oval1, oval2, oval3, invval, bool, global, local] in lst
+:   py3 oname=vim.eval('oname')
+:   py3 oval1=vim.bindeval('oval1')
+:   py3 oval2=vim.bindeval('oval2')
+:   py3 oval3=vim.bindeval('oval3')
+:   if invval is 0 || invval is 1
+:       py3 invval=bool(vim.bindeval('invval'))
+:   else
+:       py3 invval=vim.bindeval('invval')
+:   endif
+:   if bool
+:       py3 oval1=bool(oval1)
+:       py3 oval2=bool(oval2)
+:       py3 oval3=bool(oval3)
+:   endif
+:   put ='>>> '.oname
+:   for v in ['gopts1', 'wopts1', 'bopts1']
+:       try
+:           put ='  p/'.v.': '.Ev('repr('.v.'['''.oname.'''])')
+:       catch
+:           put ='  p/'.v.'! '.v:exception
+:       endtry
+:       let r=E(v.'['''.oname.''']=invval')
+:       if r isnot 0
+:           put ='  inv: '.string(invval).'! '.r
+:       endif
+:       for vv in (v is# 'gopts1' ? [v] : [v, v[:-2].'2', v[:-2].'3'])
+:           let val=substitute(vv, '^.opts', 'oval', '')
+:           let r=E(vv.'['''.oname.''']='.val)
+:           if r isnot 0
+:               put ='  '.vv.'! '.r
+:           endif
+:       endfor
+:   endfor
+:   call RecVars(oname)
+:   for v in ['wopts3', 'bopts3']
+:       let r=E('del '.v.'["'.oname.'"]')
+:       if r isnot 0
+:           put ='  del '.v.'! '.r
+:       endif
+:   endfor
+:   call RecVars(oname)
+:endfor
+:delfunction RecVars
+:delfunction E
+:delfunction Ev
+:py3 del ev
+:py3 del e
+:only
+:for buf in g:bufs[1:]
+:   execute 'bwipeout!' buf
+:endfor
+:py3 del gopts1
+:py3 del wopts1
+:py3 del wopts2
+:py3 del wopts3
+:py3 del bopts1
+:py3 del bopts2
+:py3 del bopts3
+:py3 del oval1
+:py3 del oval2
+:py3 del oval3
+:py3 del oname
+:py3 del invval
+:"
+:" Test buffer object
+:vnew
+:put ='First line'
+:put ='Second line'
+:put ='Third line'
+:1 delete _
+:py3 b=vim.current.buffer
+:wincmd w
+:mark a
+:augroup BUFS
+:   autocmd BufFilePost * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
+:   autocmd BufFilePre * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
+:augroup END
+py3 << EOF
+cb = vim.current.buffer
+# Tests BufferAppend and BufferItem
+cb.append(b[0])
+# Tests BufferSlice and BufferAssSlice
+cb.append('abc5') # Will be overwritten
+cb[-1:] = b[:-2]
+# Test BufferLength and BufferAssSlice
+cb.append('def') # Will not be overwritten
+cb[len(cb):] = b[:]
+# Test BufferAssItem and BufferMark
+cb.append('ghi') # Will be overwritten
+cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
+# Test BufferRepr
+cb.append(repr(cb) + repr(b))
+# Modify foreign buffer
+b.append('foo')
+b[0]='bar'
+b[0:0]=['baz']
+vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
+# Test assigning to name property
+import os
+old_name = cb.name
+cb.name = 'foo'
+cb.append(cb.name[-11:].replace(os.path.sep, '/'))
+b.name = 'bar'
+cb.append(b.name[-11:].replace(os.path.sep, '/'))
+cb.name = old_name
+cb.append(cb.name[-17:].replace(os.path.sep, '/'))
+del old_name
+# Test CheckBuffer
+for _b in vim.buffers:
+    if _b is not cb:
+        vim.command('bwipeout! ' + str(_b.number))
+del _b
+cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
+for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc6")'):
+    try:
+        exec(expr)
+    except vim.error:
+        pass
+    else:
+        # Usually a SEGV here
+        # Should not happen in any case
+        cb.append('No exception for ' + expr)
+vim.command('cd .')
+del b
+EOF
+:"
+:" Test vim.buffers object
+:set hidden
+:edit a
+:buffer #
+:edit b
+:buffer #
+:edit c
+:buffer #
+py3 << EOF
+# Check GCing iterator that was not fully exhausted
+i = iter(vim.buffers)
+cb.append('i:' + str(next(i)))
+# and also check creating more then one iterator at a time
+i2 = iter(vim.buffers)
+cb.append('i2:' + str(next(i2)))
+cb.append('i:' + str(next(i)))
+# The following should trigger GC and not cause any problems
+del i
+del i2
+i3 = iter(vim.buffers)
+cb.append('i3:' + str(next(i3)))
+del i3
+
+prevnum = 0
+for b in vim.buffers:
+    # Check buffer order
+    if prevnum >= b.number:
+        cb.append('!!! Buffer numbers not in strictly ascending order')
+    # Check indexing: vim.buffers[number].number == number
+    cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
+    prevnum = b.number
+del prevnum
+
+cb.append(str(len(vim.buffers)))
+
+bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+
+# Test wiping out buffer with existing iterator
+i4 = iter(vim.buffers)
+cb.append('i4:' + str(next(i4)))
+vim.command('bwipeout! ' + str(bnums.pop(0)))
+try:
+    next(i4)
+except vim.error:
+    pass
+else:
+    cb.append('!!!! No vim.error')
+i4 = iter(vim.buffers)
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+cb.append('i4:' + str(next(i4)))
+try:
+    next(i4)
+except StopIteration:
+    cb.append('StopIteration')
+del i4
+del bnums
+EOF
+:"
+:" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
+:tabnew 0
+:tabnew 1
+:vnew a.1
+:tabnew 2
+:vnew a.2
+:vnew b.2
+:vnew c.2
+py3 << EOF
+cb.append('Number of tabs: ' + str(len(vim.tabpages)))
+cb.append('Current tab pages:')
+
+def W(w):
+    if '(unknown)' in repr(w):
+        return '<window object (unknown)>'
+    else:
+        return repr(w)
+
+def Cursor(w, start=len(cb)):
+    if w.buffer is cb:
+        return repr((start - w.cursor[0], w.cursor[1]))
+    else:
+        return repr(w.cursor)
+
+for t in vim.tabpages:
+    cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
+    cb.append('  Windows:')
+    for w in t.windows:
+        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
+        # Other values depend on the size of the terminal, so they are checked partly:
+        for attr in ('height', 'row', 'width', 'col'):
+            try:
+                aval = getattr(w, attr)
+                if type(aval) is not int:
+                    raise TypeError
+                if aval < 0:
+                    raise ValueError
+            except Exception as e:
+                cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + e.__class__.__name__)
+        del aval
+        del attr
+        w.cursor = (len(w.buffer), 0)
+del W
+del Cursor
+cb.append('Number of windows in current tab page: ' + str(len(vim.windows)))
+if list(vim.windows) != list(vim.current.tabpage.windows):
+    cb.append('!!!!!! Windows differ')
+EOF
+:"
+:" Test vim.current
+py3 << EOF
+def H(o):
+    return repr(o)
+cb.append('Current tab page: ' + repr(vim.current.tabpage))
+cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
+cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ ' is ' + H(vim.current.tabpage.window.buffer))
+del H
+# Assigning: fails
+try:
+    vim.current.window = vim.tabpages[0].window
+except ValueError:
+    cb.append('ValueError at assigning foreign tab window')
+
+for attr in ('window', 'tabpage', 'buffer'):
+    try:
+        setattr(vim.current, attr, None)
+    except TypeError:
+        cb.append('Type error at assigning None to vim.current.' + attr)
+del attr
+
+# Assigning: success
+vim.current.tabpage = vim.tabpages[-2]
+vim.current.buffer = cb
+vim.current.window = vim.windows[0]
+vim.current.window.cursor = (len(vim.current.buffer), 0)
+cb.append('Current tab page: ' + repr(vim.current.tabpage))
+cb.append('Current window: ' + repr(vim.current.window))
+cb.append('Current buffer: ' + repr(vim.current.buffer))
+cb.append('Current line: ' + repr(vim.current.line))
+ws = list(vim.windows)
+ts = list(vim.tabpages)
+for b in vim.buffers:
+    if b is not cb:
+        vim.command('bwipeout! ' + str(b.number))
+del b
+cb.append('w.valid: ' + repr([w.valid for w in ws]))
+cb.append('t.valid: ' + repr([t.valid for t in ts]))
+del w
+del t
+del ts
+del ws
+EOF
+:tabonly!
+:only!
+:"
+:" Test types
+py3 << EOF
+for expr, attr in (
+    ('vim.vars',                         'Dictionary'),
+    ('vim.options',                      'Options'),
+    ('vim.bindeval("{}")',               'Dictionary'),
+    ('vim.bindeval("[]")',               'List'),
+    ('vim.bindeval("function(\'tr\')")', 'Function'),
+    ('vim.current.buffer',               'Buffer'),
+    ('vim.current.range',                'Range'),
+    ('vim.current.window',               'Window'),
+    ('vim.current.tabpage',              'TabPage'),
+):
+    cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
+del expr
+del attr
+EOF
+:"
+:" Test __dir__() method
+py3 << EOF
+for name, o in (
+        ('current',    vim.current),
+        ('buffer',     vim.current.buffer),
+        ('window',     vim.current.window),
+        ('tabpage',    vim.current.tabpage),
+        ('range',      vim.current.range),
+        ('dictionary', vim.bindeval('{}')),
+        ('list',       vim.bindeval('[]')),
+        ('function',   vim.bindeval('function("tr")')),
+        ('output',     sys.stdout),
+    ):
+    cb.append(name + ':' + ','.join(dir(o)))
+del name
+del o
+EOF
+:"
+:" Test vim.*.__new__
+:$put =string(py3eval('vim.Dictionary({})'))
+:$put =string(py3eval('vim.Dictionary(a=1)'))
+:$put =string(py3eval('vim.Dictionary(((''a'', 1),))'))
+:$put =string(py3eval('vim.List()'))
+:$put =string(py3eval('vim.List(iter(''abc7''))'))
+:$put =string(py3eval('vim.Function(''tr'')'))
+:"
+:" Test stdout/stderr
+:redir => messages
+:py3 sys.stdout.write('abc8') ; sys.stdout.write('def')
+:py3 sys.stderr.write('abc9') ; sys.stderr.write('def')
+:py3 sys.stdout.writelines(iter('abcA'))
+:py3 sys.stderr.writelines(iter('abcB'))
+:redir END
+:$put =string(substitute(messages, '\d\+', '', 'g'))
+:" Test subclassing
+:fun Put(...)
+:   $put =string(a:000)
+:   return a:000
+:endfun
+py3 << EOF
+class DupDict(vim.Dictionary):
+    def __setitem__(self, key, value):
+        super(DupDict, self).__setitem__(key, value)
+        super(DupDict, self).__setitem__('dup_' + key, value)
+dd = DupDict()
+dd['a'] = 'b'
+
+class DupList(vim.List):
+    def __getitem__(self, idx):
+        return [super(DupList, self).__getitem__(idx)] * 2
+
+dl = DupList()
+dl2 = DupList(iter('abcC'))
+dl.extend(dl2[0])
+
+class DupFun(vim.Function):
+    def __call__(self, arg):
+        return super(DupFun, self).__call__(arg, arg)
+
+df = DupFun('Put')
+EOF
+:$put =string(sort(keys(py3eval('dd'))))
+:$put =string(py3eval('dl'))
+:$put =string(py3eval('dl2'))
+:$put =string(py3eval('df(2)'))
+:$put =string(py3eval('dl') is# py3eval('dl'))
+:$put =string(py3eval('dd') is# py3eval('dd'))
+:$put =string(py3eval('df'))
+:delfunction Put
+py3 << EOF
+del DupDict
+del DupList
+del DupFun
+del dd
+del dl
+del dl2
+del df
+EOF
+:"
+:" Test chdir
+py3 << EOF
+import os
+fnamemodify = vim.Function('fnamemodify')
+cb.append(str(fnamemodify('.', ':p:h:t')))
+cb.append(vim.eval('@%'))
+os.chdir('..')
+cb.append(str(fnamemodify('.', ':p:h:t')))
+cb.append(vim.eval('@%').replace(os.path.sep, '/'))
+os.chdir('testdir')
+cb.append(str(fnamemodify('.', ':p:h:t')))
+cb.append(vim.eval('@%'))
+del fnamemodify
+EOF
+:"
+:" Test errors
+:fun F() dict
+:endfun
+:fun D()
+:endfun
+py3 << EOF
+import re
+
+py33_type_error_pattern = re.compile('^__call__\(\) takes (\d+) positional argument but (\d+) were given$')
+
+def ee(expr, g=globals(), l=locals()):
+    try:
+        try:
+            exec(expr, g, l)
+        except Exception as e:
+            if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."):
+                cb.append(expr + ':' + repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1]))))
+            elif sys.version_info >= (3, 3) and e.__class__ is ImportError and str(e).find('No module named \'') >= 0:
+                cb.append(expr + ':' + repr((e.__class__, ImportError(str(e).replace("'", '')))))
+            elif sys.version_info >= (3, 3) and e.__class__ is TypeError:
+                m = py33_type_error_pattern.search(str(e))
+                if m:
+                    msg = '__call__() takes exactly {0} positional argument ({1} given)'.format(m.group(1), m.group(2))
+                    cb.append(expr + ':' + repr((e.__class__, TypeError(msg))))
+                else:
+                    cb.append(expr + ':' + repr((e.__class__, e)))
+            else:
+                cb.append(expr + ':' + repr((e.__class__, e)))
+        else:
+            cb.append(expr + ':NOT FAILED')
+    except Exception as e:
+        cb.append(expr + '::' + repr((e.__class__, e)))
+
+d = vim.Dictionary()
+ned = vim.Dictionary(foo='bar', baz='abcD')
+dl = vim.Dictionary(a=1)
+dl.locked = True
+l = vim.List()
+ll = vim.List('abcE')
+ll.locked = True
+f = vim.Function('string')
+fd = vim.Function('F')
+fdel = vim.Function('D')
+vim.command('delfunction D')
+
+def subexpr_test(expr, name, subexprs):
+    cb.append('>>> Testing %s using %s' % (name, expr))
+    for subexpr in subexprs:
+        ee(expr % subexpr)
+    cb.append('<<< Finished')
+
+def stringtochars_test(expr):
+    return subexpr_test(expr, 'StringToChars', (
+        '1',       # Fail type checks
+        'b"\\0"',  # Fail PyString_AsStringAndSize(object, , NULL) check
+        '"\\0"',   # Fail PyString_AsStringAndSize(bytes, , NULL) check
+    ))
+
+class Mapping(object):
+    def __init__(self, d):
+        self.d = d
+
+    def __getitem__(self, key):
+        return self.d[key]
+
+    def keys(self):
+        return self.d.keys()
+
+    def items(self):
+        return self.d.items()
+
+def convertfrompyobject_test(expr, recurse=True):
+    # pydict_to_tv
+    stringtochars_test(expr % '{%s : 1}')
+    if recurse:
+        convertfrompyobject_test(expr % '{"abcF" : %s}', False)
+    # pymap_to_tv
+    stringtochars_test(expr % 'Mapping({%s : 1})')
+    if recurse:
+        convertfrompyobject_test(expr % 'Mapping({"abcG" : %s})', False)
+    # pyseq_to_tv
+    iter_test(expr)
+    return subexpr_test(expr, 'ConvertFromPyObject', (
+        'None',                 # Not conversible
+        '{b"": 1}',             # Empty key not allowed
+        '{"": 1}',              # Same, but with unicode object
+        'FailingMapping()',     #
+        'FailingMappingKey()',  #
+        'FailingNumber()',      #
+    ))
+
+def convertfrompymapping_test(expr):
+    convertfrompyobject_test(expr)
+    return subexpr_test(expr, 'ConvertFromPyMapping', (
+        '[]',
+    ))
+
+def iter_test(expr):
+    return subexpr_test(expr, '*Iter*', (
+        'FailingIter()',
+        'FailingIterNext()',
+    ))
+
+def number_test(expr, natural=False, unsigned=False):
+    if natural:
+        unsigned = True
+    return subexpr_test(expr, 'NumberToLong', (
+        '[]',
+        'None',
+    ) + (('-1',) if unsigned else ())
+    + (('0',) if natural else ()))
+
+class FailingTrue(object):
+    def __bool__(self):
+        raise NotImplementedError('bool')
+
+class FailingIter(object):
+    def __iter__(self):
+        raise NotImplementedError('iter')
+
+class FailingIterNext(object):
+    def __iter__(self):
+        return self
+
+    def __next__(self):
+        raise NotImplementedError('next')
+
+class FailingMappingKey(object):
+    def __getitem__(self, item):
+        raise NotImplementedError('getitem:mappingkey')
+
+    def keys(self):
+        return list("abcH")
+
+class FailingMapping(object):
+    def __getitem__(self):
+        raise NotImplementedError('getitem:mapping')
+
+    def keys(self):
+        raise NotImplementedError('keys')
+
+class FailingList(list):
+    def __getitem__(self, idx):
+        if i == 2:
+            raise NotImplementedError('getitem:list')
+        else:
+            return super(FailingList, self).__getitem__(idx)
+
+class NoArgsCall(object):
+    def __call__(self):
+        pass
+
+class FailingCall(object):
+    def __call__(self, path):
+        raise NotImplementedError('call')
+
+class FailingNumber(object):
+    def __int__(self):
+        raise NotImplementedError('int')
+
+cb.append("> Output")
+cb.append(">> OutputSetattr")
+ee('del sys.stdout.softspace')
+number_test('sys.stdout.softspace = %s', unsigned=True)
+number_test('sys.stderr.softspace = %s', unsigned=True)
+ee('sys.stdout.attr = None')
+cb.append(">> OutputWrite")
+ee('sys.stdout.write(None)')
+cb.append(">> OutputWriteLines")
+ee('sys.stdout.writelines(None)')
+ee('sys.stdout.writelines([1])')
+iter_test('sys.stdout.writelines(%s)')
+cb.append("> VimCommand")
+stringtochars_test('vim.command(%s)')
+ee('vim.command("", 2)')
+#! Not checked: vim->python exceptions translating: checked later
+cb.append("> VimToPython")
+#! Not checked: everything: needs errors in internal python functions
+cb.append("> VimEval")
+stringtochars_test('vim.eval(%s)')
+ee('vim.eval("", FailingTrue())')
+#! Not checked: everything: needs errors in internal python functions
+cb.append("> VimEvalPy")
+stringtochars_test('vim.bindeval(%s)')
+ee('vim.eval("", 2)')
+#! Not checked: vim->python exceptions translating: checked later
+cb.append("> VimStrwidth")
+stringtochars_test('vim.strwidth(%s)')
+cb.append("> VimForeachRTP")
+ee('vim.foreach_rtp(None)')
+ee('vim.foreach_rtp(NoArgsCall())')
+ee('vim.foreach_rtp(FailingCall())')
+ee('vim.foreach_rtp(int, 2)')
+cb.append('> import')
+old_rtp = vim.options['rtp']
+vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+ee('import xxx_no_such_module_xxx')
+ee('import failing_import')
+ee('import failing')
+vim.options['rtp'] = old_rtp
+del old_rtp
+cb.append("> Dictionary")
+cb.append(">> DictionaryConstructor")
+ee('vim.Dictionary("abcI")')
+##! Not checked: py_dict_alloc failure
+cb.append(">> DictionarySetattr")
+ee('del d.locked')
+ee('d.locked = FailingTrue()')
+ee('vim.vvars.locked = False')
+ee('d.scope = True')
+ee('d.xxx = True')
+cb.append(">> _DictionaryItem")
+ee('d.get("a", 2, 3)')
+stringtochars_test('d.get(%s)')
+ee('d.pop("a")')
+ee('dl.pop("a")')
+cb.append(">> DictionaryIterNext")
+ee('for i in ned: ned["a"] = 1')
+del i
+cb.append(">> DictionaryAssItem")
+ee('dl["b"] = 1')
+stringtochars_test('d[%s] = 1')
+convertfrompyobject_test('d["a"] = %s')
+cb.append(">> DictionaryUpdate")
+cb.append(">>> kwargs")
+cb.append(">>> iter")
+ee('d.update(FailingMapping())')
+ee('d.update([FailingIterNext()])')
+iter_test('d.update(%s)')
+convertfrompyobject_test('d.update(%s)')
+stringtochars_test('d.update(((%s, 0),))')
+convertfrompyobject_test('d.update((("a", %s),))')
+cb.append(">> DictionaryPopItem")
+ee('d.popitem(1, 2)')
+cb.append(">> DictionaryHasKey")
+ee('d.has_key()')
+cb.append("> List")
+cb.append(">> ListConstructor")
+ee('vim.List(1, 2)')
+ee('vim.List(a=1)')
+iter_test('vim.List(%s)')
+convertfrompyobject_test('vim.List([%s])')
+cb.append(">> ListItem")
+ee('l[1000]')
+cb.append(">> ListAssItem")
+ee('ll[1] = 2')
+ee('l[1000] = 3')
+cb.append(">> ListAssSlice")
+ee('ll[1:100] = "abcJ"')
+iter_test('l[:] = %s')
+convertfrompyobject_test('l[:] = [%s]')
+cb.append(">> ListConcatInPlace")
+iter_test('l.extend(%s)')
+convertfrompyobject_test('l.extend([%s])')
+cb.append(">> ListSetattr")
+ee('del l.locked')
+ee('l.locked = FailingTrue()')
+ee('l.xxx = True')
+cb.append("> Function")
+cb.append(">> FunctionConstructor")
+ee('vim.Function("123")')
+ee('vim.Function("xxx_non_existent_function_xxx")')
+ee('vim.Function("xxx#non#existent#function#xxx")')
+cb.append(">> FunctionCall")
+convertfrompyobject_test('f(%s)')
+convertfrompymapping_test('fd(self=%s)')
+cb.append("> TabPage")
+cb.append(">> TabPageAttr")
+ee('vim.current.tabpage.xxx')
+cb.append("> TabList")
+cb.append(">> TabListItem")
+ee('vim.tabpages[1000]')
+cb.append("> Window")
+cb.append(">> WindowAttr")
+ee('vim.current.window.xxx')
+cb.append(">> WindowSetattr")
+ee('vim.current.window.buffer = 0')
+ee('vim.current.window.cursor = (100000000, 100000000)')
+ee('vim.current.window.cursor = True')
+number_test('vim.current.window.height = %s', unsigned=True)
+number_test('vim.current.window.width = %s', unsigned=True)
+ee('vim.current.window.xxxxxx = True')
+cb.append("> WinList")
+cb.append(">> WinListItem")
+ee('vim.windows[1000]')
+cb.append("> Buffer")
+cb.append(">> StringToLine (indirect)")
+ee('vim.current.buffer[0] = "\\na"')
+ee('vim.current.buffer[0] = b"\\na"')
+cb.append(">> SetBufferLine (indirect)")
+ee('vim.current.buffer[0] = True')
+cb.append(">> SetBufferLineList (indirect)")
+ee('vim.current.buffer[:] = True')
+ee('vim.current.buffer[:] = ["\\na", "bc"]')
+cb.append(">> InsertBufferLines (indirect)")
+ee('vim.current.buffer.append(None)')
+ee('vim.current.buffer.append(["\\na", "bc"])')
+ee('vim.current.buffer.append("\\nbc")')
+cb.append(">> RBItem")
+ee('vim.current.buffer[100000000]')
+cb.append(">> RBAsItem")
+ee('vim.current.buffer[100000000] = ""')
+cb.append(">> BufferAttr")
+ee('vim.current.buffer.xxx')
+cb.append(">> BufferSetattr")
+ee('vim.current.buffer.name = True')
+ee('vim.current.buffer.xxx = True')
+cb.append(">> BufferMark")
+ee('vim.current.buffer.mark(0)')
+ee('vim.current.buffer.mark("abcM")')
+ee('vim.current.buffer.mark("!")')
+cb.append(">> BufferRange")
+ee('vim.current.buffer.range(1, 2, 3)')
+cb.append("> BufMap")
+cb.append(">> BufMapItem")
+ee('vim.buffers[100000000]')
+number_test('vim.buffers[%s]', natural=True)
+cb.append("> Current")
+cb.append(">> CurrentGetattr")
+ee('vim.current.xxx')
+cb.append(">> CurrentSetattr")
+ee('vim.current.line = True')
+ee('vim.current.buffer = True')
+ee('vim.current.window = True')
+ee('vim.current.tabpage = True')
+ee('vim.current.xxx = True')
+del d
+del ned
+del dl
+del l
+del ll
+del f
+del fd
+del fdel
+del subexpr_test
+del stringtochars_test
+del Mapping
+del convertfrompyobject_test
+del convertfrompymapping_test
+del iter_test
+del number_test
+del FailingTrue
+del FailingIter
+del FailingIterNext
+del FailingMapping
+del FailingMappingKey
+del FailingList
+del NoArgsCall
+del FailingCall
+del FailingNumber
+EOF
+:delfunction F
+:"
+:" Test import
+py3 << EOF
+sys.path.insert(0, os.path.join(os.getcwd(), 'python_before'))
+sys.path.append(os.path.join(os.getcwd(), 'python_after'))
+vim.options['rtp'] = os.getcwd().replace(',', '\\,').replace('\\', '\\\\')
+l = []
+def callback(path):
+    l.append(os.path.relpath(path))
+vim.foreach_rtp(callback)
+cb.append(repr(l))
+del l
+def callback(path):
+    return os.path.relpath(path)
+cb.append(repr(vim.foreach_rtp(callback)))
+del callback
+from module import dir as d
+from modulex import ddir
+cb.append(d + ',' + ddir)
+import before
+cb.append(before.dir)
+import after
+cb.append(after.dir)
+import topmodule as tm
+import topmodule.submodule as tms
+import topmodule.submodule.subsubmodule.subsubsubmodule as tmsss
+cb.append(tm.__file__.replace(os.path.sep, '/')[-len('modulex/topmodule/__init__.py'):])
+cb.append(tms.__file__.replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/__init__.py'):])
+cb.append(tmsss.__file__.replace(os.path.sep, '/')[-len('modulex/topmodule/submodule/subsubmodule/subsubsubmodule.py'):])
+del before
+del after
+del d
+del ddir
+del tm
+del tms
+del tmsss
+EOF
+:"
+:" Test exceptions
+:fun Exe(e)
+:   execute a:e
+:endfun
+py3 << EOF
+Exe = vim.bindeval('function("Exe")')
+ee('vim.command("throw \'abcN\'")')
+ee('Exe("throw \'def\'")')
+ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
+ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
+ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
+ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
+del Exe
+EOF
+:delfunction Exe
+:"
+:" Cleanup
+py3 << EOF
+del cb
+del ee
+del sys
+del os
+del vim
+EOF
+:endfun
+:"
+:fun RunTest()
+:let checkrefs = !empty($PYTHONDUMPREFS)
+:let start = getline(1, '$')
+:for i in range(checkrefs ? 10 : 1)
+:   if i != 0
+:       %d _
+:       call setline(1, start)
+:   endif
+:   call Test()
+:   if i == 0
+:       let result = getline(1, '$')
+:   endif
+:endfor
+:if checkrefs
+:   %d _
+:   call setline(1, result)
+:endif
+:endfun
+:"
+:call RunTest()
+:delfunction RunTest
+:delfunction Test
+:call garbagecollect(1)
+:"
+:/^start:/,$wq! test.out
+:" vim: et ts=4 isk-=\:
+:call getchar()
+ENDTEST
+
+start:
diff -Naur vim73.orig/src/testdir/test87.ok vim73/src/testdir/test87.ok
--- vim73.orig/src/testdir/test87.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test87.ok	2013-08-04 19:09:11.313941744 +0000
@@ -0,0 +1,1186 @@
+start:
+[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
+[1, 2, function('strlen'), {'a': 1}]
+Vim(put):E684:
+[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
+[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
+1
+[b'-1', b'0', b'1', b'b', b'f']
+[-1, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >, b'asd']
+[(b'-1', <vim.dictionary object at >), (b'0', -1), (b'1', b'asd'), (b'b', <vim.list object at >), (b'f', <vim.Function '1'>)]
+'-1' : {'a': 1}
+'0' : -1
+'1' : 'asd'
+'b' : [1, 2, function('strlen')]
+'f' : function('1')
+[0, function('strlen')]
+[3]
+[1, 2, function('strlen')]
+[1, 2, function('strlen')]
+1
+'asd'
+2
+True
+False
+True
+False
+[b'0']
+{'0': -1}
+(b'0', -1)
+None
+[]
+[0, 1, 2, 3]
+[0, 1, 2, 3]
+[0, 1, 3]
+[0, 1]
+[0, 1]
+[0, 1]
+[0, 1, 2, 3]
+[0, 1, 2, 3]
+[0, 2, 3]
+[2, 3]
+[2, 3]
+[2, 3]
+['a', 0, 1, 2, 3]
+[0, 'b', 2, 3]
+[0, 1, 'c']
+[0, 1, 2, 3, 'd']
+[0, 1, 2, 'e', 3]
+['f', 2, 3]
+[0, 1, 'g', 2, 3]
+['h']
+[0, 1, 2, 3]
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
+Vim(py3):E725:
+Vim(py3):E117:
+[0.0, 0.0]
+KeyError
+TypeError
+TypeError
+ValueError
+TypeError
+TypeError
+KeyError
+KeyError
+d : locked:0;scope:0
+dl : locked:1;scope:0
+v: : locked:2;scope:1
+g: : locked:0;scope:2
+d:{'abc2': 1}
+dl:{'def': 1}
+l : locked:0
+ll : locked:1
+l:[0]
+ll:[1]
+[0, 1, 2]
+['a', 'b']
+['c', 1]
+['d', ['e']]
+0.0
+"\0":	Vim(let):E859:
+{"\0": 1}:	Vim(let):E859:
+undefined_name:	Vim(let):Trace
+vim:	Vim(let):E859:
+[1]
+[1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
+Abc
+bac
+def
+bar
+jkl
+>>> paste
+  p/gopts1: False
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 2! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 1
+  W: 1:1 2:1 3:1 4:1
+  B: 1:1 2:1 3:1 4:1
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 1
+  W: 1:1 2:1 3:1 4:1
+  B: 1:1 2:1 3:1 4:1
+>>> previewheight
+  p/gopts1: 12
+  inv: 'a'! TypeError
+  p/wopts1! KeyError
+  inv: 'a'! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 'a'! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 5
+  W: 1:5 2:5 3:5 4:5
+  B: 1:5 2:5 3:5 4:5
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 5
+  W: 1:5 2:5 3:5 4:5
+  B: 1:5 2:5 3:5 4:5
+>>> operatorfunc
+  p/gopts1: b''
+  inv: 2! TypeError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1! KeyError
+  inv: 2! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 'A'
+  W: 1:'A' 2:'A' 3:'A' 4:'A'
+  B: 1:'A' 2:'A' 3:'A' 4:'A'
+  del wopts3! KeyError
+  del bopts3! KeyError
+  G: 'A'
+  W: 1:'A' 2:'A' 3:'A' 4:'A'
+  B: 1:'A' 2:'A' 3:'A' 4:'A'
+>>> number
+  p/gopts1! KeyError
+  inv: 0! KeyError
+  gopts1! KeyError
+  p/wopts1: False
+  p/bopts1! KeyError
+  inv: 0! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 0
+  W: 1:1 2:1 3:0 4:0
+  B: 1:1 2:1 3:0 4:0
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: 0
+  W: 1:1 2:1 3:0 4:0
+  B: 1:1 2:1 3:0 4:0
+>>> numberwidth
+  p/gopts1! KeyError
+  inv: -100! KeyError
+  gopts1! KeyError
+  p/wopts1: 8
+  inv: -100! error
+  p/bopts1! KeyError
+  inv: -100! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: 8
+  W: 1:3 2:5 3:2 4:8
+  B: 1:3 2:5 3:2 4:8
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: 8
+  W: 1:3 2:5 3:2 4:8
+  B: 1:3 2:5 3:2 4:8
+>>> colorcolumn
+  p/gopts1! KeyError
+  inv: 'abc4'! KeyError
+  gopts1! KeyError
+  p/wopts1: b''
+  inv: 'abc4'! error
+  p/bopts1! KeyError
+  inv: 'abc4'! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: ''
+  W: 1:'+2' 2:'+3' 3:'+1' 4:''
+  B: 1:'+2' 2:'+3' 3:'+1' 4:''
+  del wopts3! ValueError
+  del bopts3! KeyError
+  G: ''
+  W: 1:'+2' 2:'+3' 3:'+1' 4:''
+  B: 1:'+2' 2:'+3' 3:'+1' 4:''
+>>> statusline
+  p/gopts1: b''
+  inv: 0! TypeError
+  p/wopts1: None
+  inv: 0! TypeError
+  p/bopts1! KeyError
+  inv: 0! KeyError
+  bopts1! KeyError
+  bopts2! KeyError
+  bopts3! KeyError
+  G: '1'
+  W: 1:'2' 2:'4' 3:'1' 4:'1'
+  B: 1:'2' 2:'4' 3:'1' 4:'1'
+  del bopts3! KeyError
+  G: '1'
+  W: 1:'2' 2:'1' 3:'1' 4:'1'
+  B: 1:'2' 2:'1' 3:'1' 4:'1'
+>>> autoindent
+  p/gopts1! KeyError
+  inv: 2! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: False
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+>>> shiftwidth
+  p/gopts1! KeyError
+  inv: 3! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 3! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: 8
+  G: 8
+  W: 1:0 2:2 3:8 4:1
+  B: 1:0 2:2 3:8 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 8
+  W: 1:0 2:2 3:8 4:1
+  B: 1:0 2:2 3:8 4:1
+>>> omnifunc
+  p/gopts1! KeyError
+  inv: 1! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 1! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: b''
+  inv: 1! TypeError
+  G: ''
+  W: 1:'A' 2:'B' 3:'' 4:'C'
+  B: 1:'A' 2:'B' 3:'' 4:'C'
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: ''
+  W: 1:'A' 2:'B' 3:'' 4:'C'
+  B: 1:'A' 2:'B' 3:'' 4:'C'
+>>> preserveindent
+  p/gopts1! KeyError
+  inv: 2! KeyError
+  gopts1! KeyError
+  p/wopts1! KeyError
+  inv: 2! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: False
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+  del wopts3! KeyError
+  del bopts3! ValueError
+  G: 0
+  W: 1:0 2:1 3:0 4:1
+  B: 1:0 2:1 3:0 4:1
+>>> path
+  p/gopts1: b'.,..,,'
+  inv: 0! TypeError
+  p/wopts1! KeyError
+  inv: 0! KeyError
+  wopts1! KeyError
+  wopts2! KeyError
+  wopts3! KeyError
+  p/bopts1: None
+  inv: 0! TypeError
+  G: '.,,'
+  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
+  del wopts3! KeyError
+  G: '.,,'
+  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
+First line
+First line
+def
+First line
+Second line
+Third line
+(7, 2)
+<buffer test87.in><buffer >
+baz
+bar
+Second line
+Third line
+foo
+1:BufFilePre:1
+1:BufFilePost:1
+testdir/foo
+5:BufFilePre:5
+5:BufFilePost:5
+testdir/bar
+1:BufFilePre:1
+1:BufFilePost:1
+testdir/test87.in
+valid: b:False, cb:True
+i:<buffer test87.in>
+i2:<buffer test87.in>
+i:<buffer a>
+i3:<buffer test87.in>
+1:<buffer test87.in>=<buffer test87.in>
+8:<buffer a>=<buffer a>
+9:<buffer b>=<buffer b>
+10:<buffer c>=<buffer c>
+4
+i4:<buffer test87.in>
+i4:<buffer test87.in>
+StopIteration
+Number of tabs: 4
+Current tab pages:
+  <tabpage 0>(1): 1 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (37, 0)
+  <tabpage 1>(2): 1 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
+  <tabpage 2>(3): 2 windows, current is <window object (unknown)>
+  Windows:
+    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
+    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
+  <tabpage 3>(4): 4 windows, current is <window 0>
+  Windows:
+    <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
+    <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0)
+    <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0)
+    <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0)
+Number of windows in current tab page: 4
+Current tab page: <tabpage 3>
+Current window: <window 0>: <window 0> is <window 0>
+Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2>
+ValueError at assigning foreign tab window
+Type error at assigning None to vim.current.window
+Type error at assigning None to vim.current.tabpage
+Type error at assigning None to vim.current.buffer
+Current tab page: <tabpage 2>
+Current window: <window 0>
+Current buffer: <buffer test87.in>
+Current line: 'Type error at assigning None to vim.current.buffer'
+w.valid: [True, False]
+t.valid: [True, False, True, False]
+vim.vars:Dictionary:True
+vim.options:Options:True
+vim.bindeval("{}"):Dictionary:True
+vim.bindeval("[]"):List:True
+vim.bindeval("function('tr')"):Function:True
+vim.current.buffer:Buffer:True
+vim.current.range:Range:True
+vim.current.window:Window:True
+vim.current.tabpage:TabPage:True
+current:__dir__,buffer,line,range,tabpage,window
+buffer:__dir__,append,mark,name,number,options,range,valid,vars
+window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
+tabpage:__dir__,number,valid,vars,window,windows
+range:__dir__,append,end,start
+dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
+list:__dir__,extend,locked
+function:__dir__,softspace
+output:__dir__,flush,softspace,write,writelines
+{}
+{'a': 1}
+{'a': 1}
+[]
+['a', 'b', 'c', '7']
+function('tr')
+'
+abcdef
+line  :
+abcdef
+abcA
+line  :
+abcB'
+['a', 'dup_a']
+['a', 'a']
+['a', 'b', 'c', 'C']
+[2, 2]
+[2, 2]
+1
+1
+function('Put')
+b'testdir'
+test87.in
+b'src'
+testdir/test87.in
+b'testdir'
+test87.in
+> Output
+>> OutputSetattr
+del sys.stdout.softspace:(<class 'AttributeError'>, AttributeError("can't delete OutputObject attributes",))
+>>> Testing NumberToLong using sys.stdout.softspace = %s
+sys.stdout.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+sys.stdout.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+sys.stdout.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+<<< Finished
+>>> Testing NumberToLong using sys.stderr.softspace = %s
+sys.stderr.softspace = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+sys.stderr.softspace = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+sys.stderr.softspace = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+<<< Finished
+sys.stdout.attr = None:(<class 'AttributeError'>, AttributeError('invalid attribute: attr',))
+>> OutputWrite
+sys.stdout.write(None):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",))
+>> OutputWriteLines
+sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
+sys.stdout.writelines([1]):(<class 'TypeError'>, TypeError("Can't convert 'int' object to str implicitly",))
+>>> Testing *Iter* using sys.stdout.writelines(%s)
+sys.stdout.writelines(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+sys.stdout.writelines(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+> VimCommand
+>>> Testing StringToChars using vim.command(%s)
+vim.command(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.command(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.command("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+vim.command("", 2):(<class 'TypeError'>, TypeError('command() takes exactly one argument (2 given)',))
+> VimToPython
+> VimEval
+>>> Testing StringToChars using vim.eval(%s)
+vim.eval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.eval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.eval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+vim.eval("", FailingTrue()):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+> VimEvalPy
+>>> Testing StringToChars using vim.bindeval(%s)
+vim.bindeval(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.bindeval(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.bindeval("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+vim.eval("", 2):(<class 'TypeError'>, TypeError('function takes exactly 1 argument (2 given)',))
+> VimStrwidth
+>>> Testing StringToChars using vim.strwidth(%s)
+vim.strwidth(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.strwidth(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.strwidth("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+> VimForeachRTP
+vim.foreach_rtp(None):(<class 'TypeError'>, TypeError("'NoneType' object is not callable",))
+vim.foreach_rtp(NoArgsCall()):(<class 'TypeError'>, TypeError('__call__() takes exactly 1 positional argument (2 given)',))
+vim.foreach_rtp(FailingCall()):(<class 'NotImplementedError'>, NotImplementedError('call',))
+vim.foreach_rtp(int, 2):(<class 'TypeError'>, TypeError('foreach_rtp() takes exactly one argument (2 given)',))
+> import
+import xxx_no_such_module_xxx:(<class 'ImportError'>, ImportError('No module named xxx_no_such_module_xxx',))
+import failing_import:(<class 'ImportError'>, ImportError('No module named failing_import',))
+import failing:(<class 'NotImplementedError'>, NotImplementedError())
+> Dictionary
+>> DictionaryConstructor
+vim.Dictionary("abcI"):(<class 'ValueError'>, ValueError('expected sequence element of size 2, but got sequence of size 1',))
+>> DictionarySetattr
+del d.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.Dictionary attributes',))
+d.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',))
+vim.vvars.locked = False:(<class 'TypeError'>, TypeError('cannot modify fixed dictionary',))
+d.scope = True:(<class 'AttributeError'>, AttributeError('cannot set attribute scope',))
+d.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',))
+>> _DictionaryItem
+d.get("a", 2, 3):(<class 'TypeError'>, TypeError('function takes at most 2 arguments (3 given)',))
+>>> Testing StringToChars using d.get(%s)
+d.get(1):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.get(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.get("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+d.pop("a"):(<class 'KeyError'>, KeyError('a',))
+dl.pop("a"):(<class 'vim.error'>, error('dictionary is locked',))
+>> DictionaryIterNext
+for i in ned: ned["a"] = 1:(<class 'RuntimeError'>, RuntimeError('hashtab changed during iteration',))
+>> DictionaryAssItem
+dl["b"] = 1:(<class 'vim.error'>, error('dictionary is locked',))
+>>> Testing StringToChars using d[%s] = 1
+d[1] = 1:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d[b"\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = {%s : 1}
+d["a"] = {1 : 1}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = {b"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = {"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = {"abcF" : {%s : 1}}
+d["a"] = {"abcF" : {1 : 1}}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = {"abcF" : {b"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = {"abcF" : {"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = {"abcF" : Mapping({%s : 1})}
+d["a"] = {"abcF" : Mapping({1 : 1})}:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = {"abcF" : Mapping({b"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = {"abcF" : Mapping({"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d["a"] = {"abcF" : %s}
+d["a"] = {"abcF" : FailingIter()}:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d["a"] = {"abcF" : FailingIterNext()}:(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = {"abcF" : %s}
+d["a"] = {"abcF" : None}:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d["a"] = {"abcF" : {b"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = {"abcF" : {"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = {"abcF" : FailingMapping()}:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d["a"] = {"abcF" : FailingMappingKey()}:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d["a"] = {"abcF" : FailingNumber()}:(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({%s : 1})
+d["a"] = Mapping({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = Mapping({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = Mapping({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({"abcG" : {%s : 1}})
+d["a"] = Mapping({"abcG" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = Mapping({"abcG" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = Mapping({"abcG" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d["a"] = Mapping({"abcG" : Mapping({%s : 1})})
+d["a"] = Mapping({"abcG" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d["a"] = Mapping({"abcG" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d["a"] = Mapping({"abcG" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d["a"] = Mapping({"abcG" : %s})
+d["a"] = Mapping({"abcG" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d["a"] = Mapping({"abcG" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = Mapping({"abcG" : %s})
+d["a"] = Mapping({"abcG" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d["a"] = Mapping({"abcG" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = Mapping({"abcG" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = Mapping({"abcG" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d["a"] = Mapping({"abcG" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d["a"] = Mapping({"abcG" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using d["a"] = %s
+d["a"] = FailingIter():(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d["a"] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d["a"] = %s
+d["a"] = None:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d["a"] = {b"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = {"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d["a"] = FailingMapping():(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d["a"] = FailingMappingKey():(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d["a"] = FailingNumber():(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> DictionaryUpdate
+>>> kwargs
+>>> iter
+d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+>>> Testing *Iter* using d.update(%s)
+d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing StringToChars using d.update({%s : 1})
+d.update({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update({"abcF" : {%s : 1}})
+d.update({"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update({"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update({"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update({"abcF" : Mapping({%s : 1})})
+d.update({"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update({"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d.update({"abcF" : %s})
+d.update({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update({"abcF" : %s})
+d.update({"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({%s : 1}))
+d.update(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({"abcG" : {%s : 1}}))
+d.update(Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update(Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update(Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update(Mapping({"abcG" : Mapping({%s : 1})}))
+d.update(Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update(Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d.update(Mapping({"abcG" : %s}))
+d.update(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update(Mapping({"abcG" : %s}))
+d.update(Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using d.update(%s)
+d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update(%s)
+d.update(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
+d.update({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update(FailingNumber()):(<class 'TypeError'>, TypeError("'FailingNumber' object is not iterable",))
+<<< Finished
+>>> Testing StringToChars using d.update(((%s, 0),))
+d.update(((1, 0),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update(((b"\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {%s : 1}),))
+d.update((("a", {1 : 1}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", {b"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", {"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {"abcF" : {%s : 1}}),))
+d.update((("a", {"abcF" : {1 : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", {"abcF" : {b"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", {"abcF" : {"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", {"abcF" : Mapping({%s : 1})}),))
+d.update((("a", {"abcF" : Mapping({1 : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", {"abcF" : Mapping({b"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", {"abcF" : Mapping({"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d.update((("a", {"abcF" : %s}),))
+d.update((("a", {"abcF" : FailingIter()}),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update((("a", {"abcF" : FailingIterNext()}),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", {"abcF" : %s}),))
+d.update((("a", {"abcF" : None}),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update((("a", {"abcF" : {b"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", {"abcF" : {"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", {"abcF" : FailingMapping()}),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update((("a", {"abcF" : FailingMappingKey()}),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update((("a", {"abcF" : FailingNumber()}),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
+d.update((("a", Mapping({1 : 1})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", Mapping({b"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", Mapping({"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({"abcG" : {%s : 1}})),))
+d.update((("a", Mapping({"abcG" : {1 : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", Mapping({"abcG" : {b"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", Mapping({"abcG" : {"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using d.update((("a", Mapping({"abcG" : Mapping({%s : 1})})),))
+d.update((("a", Mapping({"abcG" : Mapping({1 : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+d.update((("a", Mapping({"abcG" : Mapping({b"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+d.update((("a", Mapping({"abcG" : Mapping({"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using d.update((("a", Mapping({"abcG" : %s})),))
+d.update((("a", Mapping({"abcG" : FailingIter()})),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update((("a", Mapping({"abcG" : FailingIterNext()})),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abcG" : %s})),))
+d.update((("a", Mapping({"abcG" : None})),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update((("a", Mapping({"abcG" : {b"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", Mapping({"abcG" : {"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", Mapping({"abcG" : FailingMapping()})),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update((("a", Mapping({"abcG" : FailingMappingKey()})),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update((("a", Mapping({"abcG" : FailingNumber()})),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using d.update((("a", %s),))
+d.update((("a", FailingIter()),)):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+d.update((("a", FailingIterNext()),)):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using d.update((("a", %s),))
+d.update((("a", None),)):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+d.update((("a", {b"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", {"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+d.update((("a", FailingMapping()),)):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+d.update((("a", FailingNumber()),)):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> DictionaryPopItem
+d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
+>> DictionaryHasKey
+d.has_key():(<class 'TypeError'>, TypeError('has_key() takes exactly one argument (0 given)',))
+> List
+>> ListConstructor
+vim.List(1, 2):(<class 'TypeError'>, TypeError('function takes at most 1 argument (2 given)',))
+vim.List(a=1):(<class 'TypeError'>, TypeError('list constructor does not accept keyword arguments',))
+>>> Testing *Iter* using vim.List(%s)
+vim.List(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+vim.List(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing StringToChars using vim.List([{%s : 1}])
+vim.List([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using vim.List([{"abcF" : {%s : 1}}])
+vim.List([{"abcF" : {1 : 1}}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([{"abcF" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([{"abcF" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using vim.List([{"abcF" : Mapping({%s : 1})}])
+vim.List([{"abcF" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([{"abcF" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using vim.List([{"abcF" : %s}])
+vim.List([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+vim.List([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([{"abcF" : %s}])
+vim.List([{"abcF" : None}]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+vim.List([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+vim.List([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+vim.List([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({%s : 1})])
+vim.List([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({"abcG" : {%s : 1}})])
+vim.List([Mapping({"abcG" : {1 : 1}})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([Mapping({"abcG" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([Mapping({"abcG" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using vim.List([Mapping({"abcG" : Mapping({%s : 1})})])
+vim.List([Mapping({"abcG" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.List([Mapping({"abcG" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+vim.List([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using vim.List([Mapping({"abcG" : %s})])
+vim.List([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+vim.List([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([Mapping({"abcG" : %s})])
+vim.List([Mapping({"abcG" : None})]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+vim.List([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+vim.List([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+vim.List([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using vim.List([%s])
+vim.List([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+vim.List([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using vim.List([%s])
+vim.List([None]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+vim.List([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+vim.List([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+vim.List([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+vim.List([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> ListItem
+l[1000]:(<class 'IndexError'>, IndexError('list index out of range',))
+>> ListAssItem
+ll[1] = 2:(<class 'vim.error'>, error('list is locked',))
+l[1000] = 3:(<class 'IndexError'>, IndexError('list index out of range',))
+>> ListAssSlice
+ll[1:100] = "abcJ":(<class 'vim.error'>, error('list is locked',))
+>>> Testing *Iter* using l[:] = %s
+l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError('iter',))
+l[:] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [{%s : 1}]
+l[:] = [{1 : 1}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [{b"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [{"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [{"abcF" : {%s : 1}}]
+l[:] = [{"abcF" : {1 : 1}}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [{"abcF" : {b"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [{"abcF" : {"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [{"abcF" : Mapping({%s : 1})}]
+l[:] = [{"abcF" : Mapping({1 : 1})}]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [{"abcF" : Mapping({b"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [{"abcF" : Mapping({"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using l[:] = [{"abcF" : %s}]
+l[:] = [{"abcF" : FailingIter()}]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l[:] = [{"abcF" : FailingIterNext()}]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [{"abcF" : %s}]
+l[:] = [{"abcF" : None}]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l[:] = [{"abcF" : {b"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [{"abcF" : {"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [{"abcF" : FailingMapping()}]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l[:] = [{"abcF" : FailingMappingKey()}]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l[:] = [{"abcF" : FailingNumber()}]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
+l[:] = [Mapping({1 : 1})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [Mapping({b"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [Mapping({"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({"abcG" : {%s : 1}})]
+l[:] = [Mapping({"abcG" : {1 : 1}})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [Mapping({"abcG" : {b"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [Mapping({"abcG" : {"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l[:] = [Mapping({"abcG" : Mapping({%s : 1})})]
+l[:] = [Mapping({"abcG" : Mapping({1 : 1})})]:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l[:] = [Mapping({"abcG" : Mapping({b"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l[:] = [Mapping({"abcG" : Mapping({"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using l[:] = [Mapping({"abcG" : %s})]
+l[:] = [Mapping({"abcG" : FailingIter()})]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l[:] = [Mapping({"abcG" : FailingIterNext()})]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [Mapping({"abcG" : %s})]
+l[:] = [Mapping({"abcG" : None})]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l[:] = [Mapping({"abcG" : {b"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [Mapping({"abcG" : {"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [Mapping({"abcG" : FailingMapping()})]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l[:] = [Mapping({"abcG" : FailingMappingKey()})]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l[:] = [Mapping({"abcG" : FailingNumber()})]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using l[:] = [%s]
+l[:] = [FailingIter()]:(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l[:] = [FailingIterNext()]:(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l[:] = [%s]
+l[:] = [None]:(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l[:] = [{b"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [{"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l[:] = [FailingMapping()]:(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l[:] = [FailingMappingKey()]:(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l[:] = [FailingNumber()]:(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> ListConcatInPlace
+>>> Testing *Iter* using l.extend(%s)
+l.extend(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError('iter',))
+l.extend(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing StringToChars using l.extend([{%s : 1}])
+l.extend([{1 : 1}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l.extend([{"abcF" : {%s : 1}}])
+l.extend([{"abcF" : {1 : 1}}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([{"abcF" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([{"abcF" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l.extend([{"abcF" : Mapping({%s : 1})}])
+l.extend([{"abcF" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([{"abcF" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([{"abcF" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using l.extend([{"abcF" : %s}])
+l.extend([{"abcF" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l.extend([{"abcF" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([{"abcF" : %s}])
+l.extend([{"abcF" : None}]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l.extend([{"abcF" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([{"abcF" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([{"abcF" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l.extend([{"abcF" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l.extend([{"abcF" : FailingNumber()}]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({%s : 1})])
+l.extend([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({"abcG" : {%s : 1}})])
+l.extend([Mapping({"abcG" : {1 : 1}})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([Mapping({"abcG" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([Mapping({"abcG" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using l.extend([Mapping({"abcG" : Mapping({%s : 1})})])
+l.extend([Mapping({"abcG" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+l.extend([Mapping({"abcG" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+l.extend([Mapping({"abcG" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using l.extend([Mapping({"abcG" : %s})])
+l.extend([Mapping({"abcG" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l.extend([Mapping({"abcG" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([Mapping({"abcG" : %s})])
+l.extend([Mapping({"abcG" : None})]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l.extend([Mapping({"abcG" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([Mapping({"abcG" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([Mapping({"abcG" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l.extend([Mapping({"abcG" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l.extend([Mapping({"abcG" : FailingNumber()})]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using l.extend([%s])
+l.extend([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+l.extend([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using l.extend([%s])
+l.extend([None]):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+l.extend([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+l.extend([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+l.extend([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+l.extend([FailingNumber()]):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>> ListSetattr
+del l.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.List attributes',))
+l.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError('bool',))
+l.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set attribute xxx',))
+> Function
+>> FunctionConstructor
+vim.Function("123"):(<class 'ValueError'>, ValueError('unnamed function 123 does not exist',))
+vim.Function("xxx_non_existent_function_xxx"):(<class 'ValueError'>, ValueError('function xxx_non_existent_function_xxx does not exist',))
+vim.Function("xxx#non#existent#function#xxx"):NOT FAILED
+>> FunctionCall
+>>> Testing StringToChars using f({%s : 1})
+f({1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using f({"abcF" : {%s : 1}})
+f({"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f({"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f({"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using f({"abcF" : Mapping({%s : 1})})
+f({"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f({"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f({"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using f({"abcF" : %s})
+f({"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+f({"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using f({"abcF" : %s})
+f({"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+f({"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f({"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f({"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+f({"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+f({"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using f(Mapping({%s : 1}))
+f(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using f(Mapping({"abcG" : {%s : 1}}))
+f(Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f(Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f(Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using f(Mapping({"abcG" : Mapping({%s : 1})}))
+f(Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+f(Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+f(Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using f(Mapping({"abcG" : %s}))
+f(Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+f(Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using f(Mapping({"abcG" : %s}))
+f(Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+f(Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f(Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f(Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+f(Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+f(Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using f(%s)
+f(FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+f(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using f(%s)
+f(None):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+f({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+f(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+f(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+f(FailingNumber()):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using fd(self={%s : 1})
+fd(self={1 : 1}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self={b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self={"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using fd(self={"abcF" : {%s : 1}})
+fd(self={"abcF" : {1 : 1}}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self={"abcF" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self={"abcF" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using fd(self={"abcF" : Mapping({%s : 1})})
+fd(self={"abcF" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self={"abcF" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self={"abcF" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using fd(self={"abcF" : %s})
+fd(self={"abcF" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+fd(self={"abcF" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self={"abcF" : %s})
+fd(self={"abcF" : None}):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+fd(self={"abcF" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self={"abcF" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self={"abcF" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+fd(self={"abcF" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+fd(self={"abcF" : FailingNumber()}):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({%s : 1}))
+fd(self=Mapping({1 : 1})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self=Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self=Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({"abcG" : {%s : 1}}))
+fd(self=Mapping({"abcG" : {1 : 1}})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self=Mapping({"abcG" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self=Mapping({"abcG" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing StringToChars using fd(self=Mapping({"abcG" : Mapping({%s : 1})}))
+fd(self=Mapping({"abcG" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+fd(self=Mapping({"abcG" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+fd(self=Mapping({"abcG" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
+<<< Finished
+>>> Testing *Iter* using fd(self=Mapping({"abcG" : %s}))
+fd(self=Mapping({"abcG" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim structure',))
+fd(self=Mapping({"abcG" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError('next',))
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self=Mapping({"abcG" : %s}))
+fd(self=Mapping({"abcG" : None})):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim structure',))
+fd(self=Mapping({"abcG" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self=Mapping({"abcG" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self=Mapping({"abcG" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+fd(self=Mapping({"abcG" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+fd(self=Mapping({"abcG" : FailingNumber()})):(<class 'NotImplementedError'>, NotImplementedError('int',))
+<<< Finished
+>>> Testing *Iter* using fd(self=%s)
+fd(self=FailingIter()):(<class 'TypeError'>, TypeError('unable to convert FailingIter to vim dictionary',))
+fd(self=FailingIterNext()):(<class 'TypeError'>, TypeError('unable to convert FailingIterNext to vim dictionary',))
+<<< Finished
+>>> Testing ConvertFromPyObject using fd(self=%s)
+fd(self=None):(<class 'TypeError'>, TypeError('unable to convert NoneType to vim dictionary',))
+fd(self={b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self={"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
+fd(self=FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError('keys',))
+fd(self=FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError('getitem:mappingkey',))
+fd(self=FailingNumber()):(<class 'TypeError'>, TypeError('unable to convert FailingNumber to vim dictionary',))
+<<< Finished
+>>> Testing ConvertFromPyMapping using fd(self=%s)
+fd(self=[]):(<class 'AttributeError'>, AttributeError('keys',))
+<<< Finished
+> TabPage
+>> TabPageAttr
+vim.current.tabpage.xxx:(<class 'AttributeError'>, AttributeError("'vim.tabpage' object has no attribute 'xxx'",))
+> TabList
+>> TabListItem
+vim.tabpages[1000]:(<class 'IndexError'>, IndexError('no such tab page',))
+> Window
+>> WindowAttr
+vim.current.window.xxx:(<class 'AttributeError'>, AttributeError("'vim.window' object has no attribute 'xxx'",))
+>> WindowSetattr
+vim.current.window.buffer = 0:(<class 'TypeError'>, TypeError('readonly attribute: buffer',))
+vim.current.window.cursor = (100000000, 100000000):(<class 'vim.error'>, error('cursor position outside buffer',))
+vim.current.window.cursor = True:(<class 'TypeError'>, TypeError('argument must be 2-item sequence, not bool',))
+>>> Testing NumberToLong using vim.current.window.height = %s
+vim.current.window.height = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+vim.current.window.height = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+vim.current.window.height = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+<<< Finished
+>>> Testing NumberToLong using vim.current.window.width = %s
+vim.current.window.width = []:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+vim.current.window.width = None:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+vim.current.window.width = -1:(<class 'ValueError'>, ValueError('number must be greater or equal to zero',))
+<<< Finished
+vim.current.window.xxxxxx = True:(<class 'AttributeError'>, AttributeError('xxxxxx',))
+> WinList
+>> WinListItem
+vim.windows[1000]:(<class 'IndexError'>, IndexError('no such window',))
+> Buffer
+>> StringToLine (indirect)
+vim.current.buffer[0] = "\na":(<class 'vim.error'>, error('string cannot contain newlines',))
+vim.current.buffer[0] = b"\na":(<class 'vim.error'>, error('string cannot contain newlines',))
+>> SetBufferLine (indirect)
+vim.current.buffer[0] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+>> SetBufferLineList (indirect)
+vim.current.buffer[:] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+vim.current.buffer[:] = ["\na", "bc"]:(<class 'vim.error'>, error('string cannot contain newlines',))
+>> InsertBufferLines (indirect)
+vim.current.buffer.append(None):(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+vim.current.buffer.append(["\na", "bc"]):(<class 'vim.error'>, error('string cannot contain newlines',))
+vim.current.buffer.append("\nbc"):(<class 'vim.error'>, error('string cannot contain newlines',))
+>> RBItem
+vim.current.buffer[100000000]:(<class 'IndexError'>, IndexError('line number out of range',))
+>> RBAsItem
+vim.current.buffer[100000000] = "":(<class 'IndexError'>, IndexError('line number out of range',))
+>> BufferAttr
+vim.current.buffer.xxx:(<class 'AttributeError'>, AttributeError("'vim.buffer' object has no attribute 'xxx'",))
+>> BufferSetattr
+vim.current.buffer.name = True:(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got bool',))
+vim.current.buffer.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
+>> BufferMark
+vim.current.buffer.mark(0):(<class 'TypeError'>, TypeError('expected bytes() or str() instance, but got int',))
+vim.current.buffer.mark("abcM"):(<class 'ValueError'>, ValueError('mark name must be a single character',))
+vim.current.buffer.mark("!"):(<class 'vim.error'>, error('invalid mark name',))
+>> BufferRange
+vim.current.buffer.range(1, 2, 3):(<class 'TypeError'>, TypeError('function takes exactly 2 arguments (3 given)',))
+> BufMap
+>> BufMapItem
+vim.buffers[100000000]:(<class 'KeyError'>, KeyError(100000000,))
+>>> Testing NumberToLong using vim.buffers[%s]
+vim.buffers[[]]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got list',))
+vim.buffers[None]:(<class 'TypeError'>, TypeError('expected int() or something supporting coercing to int(), but got NoneType',))
+vim.buffers[-1]:(<class 'ValueError'>, ValueError('number must be greater then zero',))
+vim.buffers[0]:(<class 'ValueError'>, ValueError('number must be greater then zero',))
+<<< Finished
+> Current
+>> CurrentGetattr
+vim.current.xxx:(<class 'AttributeError'>, AttributeError("'vim.currentdata' object has no attribute 'xxx'",))
+>> CurrentSetattr
+vim.current.line = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
+vim.current.buffer = True:(<class 'TypeError'>, TypeError('expected vim.Buffer object, but got bool',))
+vim.current.window = True:(<class 'TypeError'>, TypeError('expected vim.Window object, but got bool',))
+vim.current.tabpage = True:(<class 'TypeError'>, TypeError('expected vim.TabPage object, but got bool',))
+vim.current.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
+['.']
+'.'
+3,xx
+before
+after
+pythonx/topmodule/__init__.py
+pythonx/topmodule/submodule/__init__.py
+pythonx/topmodule/submodule/subsubmodule/subsubsubmodule.py
+vim.command("throw 'abcN'"):(<class 'vim.error'>, error('abcN',))
+Exe("throw 'def'"):(<class 'vim.error'>, error('def',))
+vim.eval("Exe('throw ''ghi''')"):(<class 'vim.error'>, error('ghi',))
+vim.eval("Exe('echoerr ''jkl''')"):(<class 'vim.error'>, error('Vim(echoerr):jkl',))
+vim.eval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
+vim.bindeval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
diff -Naur vim73.orig/src/testdir/test88.in vim73/src/testdir/test88.in
--- vim73.orig/src/testdir/test88.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test88.in	2013-08-04 19:09:11.313941744 +0000
@@ -0,0 +1,85 @@
+vim: set ft=vim
+
+Tests for correct display (cursor column position) with +conceal and
+tabulators.
+
+STARTTEST
+:so small.vim
+:if !has('conceal')
+   e! test.ok
+   wq! test.out
+:endif
+:" Conceal settings.
+:set conceallevel=2
+:set concealcursor=nc
+:syntax match test /|/ conceal
+:" Save current cursor position. Only works in <expr> mode, can't be used
+:" with :normal because it moves the cursor to the command line. Thanks to ZyX
+:" <zyx.vim@gmail.com> for the idea to use an <expr> mapping.
+:let positions = []
+:nnoremap <expr> GG ":let positions += ['".screenrow().":".screencol()."']\n"
+:" Start test.
+/^start:
+:normal ztj
+GGk
+:" We should end up in the same column when running these commands on the two
+:" lines.
+:normal ft
+GGk
+:normal $
+GGk
+:normal 0j
+GGk
+:normal ft
+GGk
+:normal $
+GGk
+:normal 0j0j
+GGk
+:" Same for next test block.
+:normal ft
+GGk
+:normal $
+GGk
+:normal 0j
+GGk
+:normal ft
+GGk
+:normal $
+GGk
+:normal 0j0j
+GGk
+:" And check W with multiple tabs and conceals in a line.
+:normal W
+GGk
+:normal W
+GGk
+:normal W
+GGk
+:normal $
+GGk
+:normal 0j
+GGk
+:normal W
+GGk
+:normal W
+GGk
+:normal W
+GGk
+:normal $
+GGk
+:" Display result.
+:call append('$', 'end:')
+:call append('$', positions)
+:/^end/,$wq! test.out
+ENDTEST
+
+start:
+.concealed.     text
+|concealed|	text
+
+	.concealed.	text
+	|concealed|	text
+
+.a.	.b.	.c.	.d.
+|a|	|b|	|c|	|d|
diff -Naur vim73.orig/src/testdir/test88.ok vim73/src/testdir/test88.ok
--- vim73.orig/src/testdir/test88.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test88.ok	2013-08-04 19:09:11.313941744 +0000
@@ -0,0 +1,23 @@
+end:
+2:1
+2:17
+2:20
+3:1
+3:17
+3:20
+5:8
+5:25
+5:28
+6:8
+6:25
+6:28
+8:1
+8:9
+8:17
+8:25
+8:27
+9:1
+9:9
+9:17
+9:25
+9:26
diff -Naur vim73.orig/src/testdir/test89.in vim73/src/testdir/test89.in
--- vim73.orig/src/testdir/test89.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test89.in	2013-08-04 19:09:11.317275067 +0000
@@ -0,0 +1,68 @@
+- Some tests for setting 'number' and 'relativenumber'
+  This is not all that useful now that the options are no longer reset when
+  setting the other.
+- Some tests for findfile() function
+
+STARTTEST
+:so small.vim
+:set hidden nocp nu rnu viminfo+=nviminfo
+:redir @a | set nu? rnu? | redir END
+:e! xx
+:redir @b | set nu? rnu? | redir END
+:e! #
+:$put ='results:'
+:$put a
+:$put b
+:"
+:set nonu nornu
+:setglobal nu
+:setlocal rnu
+:redir @c | setglobal nu? | redir END
+:set nonu nornu
+:setglobal rnu
+:setlocal nu
+:redir @d | setglobal rnu? | redir END
+:$put =':setlocal must NOT reset the other global value'
+:$put c
+:$put d
+:"
+:set nonu nornu
+:setglobal nu
+:setglobal rnu
+:redir @e | setglobal nu? | redir END
+:set nonu nornu
+:setglobal rnu
+:setglobal nu
+:redir @f | setglobal rnu? | redir END
+:$put =':setglobal MUST reset the other global value'
+:$put e
+:$put f
+:"
+:set nonu nornu
+:set nu
+:set rnu
+:redir @g | setglobal nu? | redir END
+:set nonu nornu
+:set rnu
+:set nu
+:redir @h | setglobal rnu? | redir END
+:$put =':set MUST reset the other global value'
+:$put g
+:$put h
+:"
+:let cwd=getcwd()
+:cd ../..
+:$put =''
+:$put ='Testing findfile'
+:$put =''
+:set ssl
+:$put =findfile('test19.in','src/test*')
+:exe "cd" cwd
+:cd ..
+:$put =findfile('test19.in','test*')
+:$put =findfile('test19.in','testdir')
+:exe "cd" cwd
+:/^results/,$w! test.out
+:q!
+ENDTEST
+
diff -Naur vim73.orig/src/testdir/test89.ok vim73/src/testdir/test89.ok
--- vim73.orig/src/testdir/test89.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test89.ok	2013-08-04 19:09:11.317275067 +0000
@@ -0,0 +1,28 @@
+results:
+
+  number
+  relativenumber
+
+  number
+  relativenumber
+:setlocal must NOT reset the other global value
+
+  number
+
+  relativenumber
+:setglobal MUST reset the other global value
+
+  number
+
+  relativenumber
+:set MUST reset the other global value
+
+  number
+
+  relativenumber
+
+Testing findfile
+
+src/testdir/test19.in
+testdir/test19.in
+testdir/test19.in
diff -Naur vim73.orig/src/testdir/test90.in vim73/src/testdir/test90.in
--- vim73.orig/src/testdir/test90.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test90.in	2013-08-04 19:09:11.320608390 +0000
@@ -0,0 +1,53 @@
+Tests for sha256() function.    vim: set ft=vim et ts=2 sw=2 :
+
+STARTTEST
+:so small.vim
+:if !has('cryptv') || !exists('*sha256')
+   e! test.ok
+   wq! test.out
+:endif
+:"
+:let testcase='test for empty string: '
+:if sha256("") ==# 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+:"
+:let testcase='test for 1 char: '
+:if sha256("a") ==# 'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+:"
+:let testcase='test for 3 chars: '
+:if sha256("abc") ==# 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+:"
+:let testcase='test for contains meta char: '
+:if sha256("foo\nbar") ==# '807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+:"
+:let testcase='test for contains non-ascii char: '
+:if sha256("\xde\xad\xbe\xef") ==# '5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953'
+: let res='ok'
+:else
+: let res='ng'
+:endif
+:$put =testcase.res
+"
+:/^start:/,$wq! test.out
+ENDTEST
+
+start:
diff -Naur vim73.orig/src/testdir/test90.ok vim73/src/testdir/test90.ok
--- vim73.orig/src/testdir/test90.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test90.ok	2013-08-04 19:09:11.320608390 +0000
@@ -0,0 +1,6 @@
+start:
+test for empty string: ok
+test for 1 char: ok
+test for 3 chars: ok
+test for contains meta char: ok
+test for contains non-ascii char: ok
diff -Naur vim73.orig/src/testdir/test91.in vim73/src/testdir/test91.in
--- vim73.orig/src/testdir/test91.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test91.in	2013-08-04 19:09:11.323941714 +0000
@@ -0,0 +1,99 @@
+Tests for getbufvar(), getwinvar(), gettabvar() and gettabwinvar().
+vim: set ft=vim :
+
+STARTTEST
+:so small.vim
+:"
+:" Test for getbufvar()
+:" Use strings to test for memory leaks.
+:let b:var_num = '1234'
+:let def_num = '5678'
+:$put =string(getbufvar(1, 'var_num'))
+:$put =string(getbufvar(1, 'var_num', def_num))
+:$put =string(getbufvar(1, ''))
+:$put =string(getbufvar(1, '', def_num))
+:unlet b:var_num
+:$put =string(getbufvar(1, 'var_num', def_num))
+:$put =string(getbufvar(1, ''))
+:$put =string(getbufvar(1, '', def_num))
+:$put =string(getbufvar(9, ''))
+:$put =string(getbufvar(9, '', def_num))
+:unlet def_num
+:$put =string(getbufvar(1, '&autoindent'))
+:$put =string(getbufvar(1, '&autoindent', 1))
+:"
+:" test for getwinvar()
+:let w:var_str = "Dance"
+:let def_str = "Chance"
+:$put =string(getwinvar(1, 'var_str'))
+:$put =string(getwinvar(1, 'var_str', def_str))
+:$put =string(getwinvar(1, ''))
+:$put =string(getwinvar(1, '', def_str))
+:unlet w:var_str
+:$put =string(getwinvar(1, 'var_str', def_str))
+:$put =string(getwinvar(1, ''))
+:$put =string(getwinvar(1, '', def_str))
+:$put =string(getwinvar(9, ''))
+:$put =string(getwinvar(9, '', def_str))
+:$put =string(getwinvar(1, '&nu'))
+:$put =string(getwinvar(1, '&nu',  1))
+:unlet def_str
+:"
+:" test for gettabvar()
+:tabnew
+:tabnew
+:let t:var_list = [1, 2, 3]
+:let def_list = [4, 5, 6, 7]
+:tabrewind
+:$put =string(gettabvar(3, 'var_list'))
+:$put =string(gettabvar(3, 'var_list', def_list))
+:$put =string(gettabvar(3, ''))
+:$put =string(gettabvar(3, '', def_list))
+:tablast
+:unlet t:var_list
+:tabrewind
+:$put =string(gettabvar(3, 'var_list', def_list))
+:$put =string(gettabvar(9, ''))
+:$put =string(gettabvar(9, '', def_list))
+:$put =string(gettabvar(3, '&nu'))
+:$put =string(gettabvar(3, '&nu', def_list))
+:unlet def_list
+:tabonly
+:"
+:" test for gettabwinvar()
+:tabnew
+:tabnew
+:tabprev
+:split
+:split
+:wincmd w
+:vert split
+:wincmd w
+:let w:var_dict = {'dict': 'tabwin'}
+:let def_dict = {'dict2': 'newval'}
+:wincmd b
+:tabrewind
+:$put =string(gettabwinvar(2, 3, 'var_dict'))
+:$put =string(gettabwinvar(2, 3, 'var_dict', def_dict))
+:$put =string(gettabwinvar(2, 3, ''))
+:$put =string(gettabwinvar(2, 3, '', def_dict))
+:tabnext
+:3wincmd w
+:unlet w:var_dict
+:tabrewind
+:$put =string(gettabwinvar(2, 3, 'var_dict', def_dict))
+:$put =string(gettabwinvar(2, 3, ''))
+:$put =string(gettabwinvar(2, 3, '', def_dict))
+:$put =string(gettabwinvar(2, 9, ''))
+:$put =string(gettabwinvar(2, 9, '', def_dict))
+:$put =string(gettabwinvar(9, 3, ''))
+:$put =string(gettabwinvar(9, 3, '', def_dict))
+:unlet def_dict
+:$put =string(gettabwinvar(2, 3, '&nux'))
+:$put =string(gettabwinvar(2, 3, '&nux', 1))
+:tabonly
+:"
+:/^start/,$wq! test.out
+ENDTEST
+
+start:
diff -Naur vim73.orig/src/testdir/test91.ok vim73/src/testdir/test91.ok
--- vim73.orig/src/testdir/test91.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test91.ok	2013-08-04 19:09:11.323941714 +0000
@@ -0,0 +1,45 @@
+start:
+'1234'
+'1234'
+{'var_num': '1234'}
+{'var_num': '1234'}
+'5678'
+{}
+{}
+''
+'5678'
+0
+0
+'Dance'
+'Dance'
+{'var_str': 'Dance'}
+{'var_str': 'Dance'}
+'Chance'
+{}
+{}
+''
+'Chance'
+0
+0
+[1, 2, 3]
+[1, 2, 3]
+''
+[4, 5, 6, 7]
+[4, 5, 6, 7]
+''
+[4, 5, 6, 7]
+''
+[4, 5, 6, 7]
+{'dict': 'tabwin'}
+{'dict': 'tabwin'}
+{'var_dict': {'dict': 'tabwin'}}
+{'var_dict': {'dict': 'tabwin'}}
+{'dict2': 'newval'}
+{}
+{}
+''
+{'dict2': 'newval'}
+''
+{'dict2': 'newval'}
+''
+1
diff -Naur vim73.orig/src/testdir/test92.in vim73/src/testdir/test92.in
--- vim73.orig/src/testdir/test92.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test92.in	2013-08-04 19:09:11.323941714 +0000
@@ -0,0 +1,48 @@
+vim: set ft=vim fenc=utf-8:
+
+Tests if :mksession saves cursor columns correctly in presence of tab and 
+multibyte characters when fileencoding=utf-8.
+
+STARTTEST
+:so mbyte.vim
+:if !has('mksession')
+:  e! test.ok
+:  wq! test.out
+:endif
+:set sessionoptions=buffers splitbelow fileencoding=utf-8
+/^start:
+:vsplit
+j16|:split
+j16|:split
+j16|:split
+j8|:split
+j8|:split
+j16|:split
+j16|:split
+j16|:wincmd l
+/^start:
+:set nowrap
+j16|3zl:split
+j016|3zl:split
+j016|3zl:split
+j08|3zl:split
+j08|3zl:split
+j016|3zl:split
+j016|3zl:split
+j016|3zl:split
+:mksession! test.out
+:new test.out
+:v/\(^ *normal! 0\|^ *exe 'normal!\)/d
+:w
+:qa!
+ENDTEST
+
+start:
+no multibyte chAracter
+	one leaDing tab
+    four leadinG spaces
+two		consecutive tabs
+two	tabs	in one line
+one … multibyteCharacter
+a “b” two multiByte characters
+“c”1€ three mulTibyte characters
diff -Naur vim73.orig/src/testdir/test92.ok vim73/src/testdir/test92.ok
--- vim73.orig/src/testdir/test92.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test92.ok	2013-08-04 19:09:11.323941714 +0000
@@ -0,0 +1,26 @@
+normal! 016|
+normal! 016|
+normal! 016|
+normal! 08|
+normal! 08|
+normal! 016|
+normal! 016|
+normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 8 . '|'
+  normal! 08|
+  exe 'normal! ' . s:c . '|zs' . 8 . '|'
+  normal! 08|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
diff -Naur vim73.orig/src/testdir/test93.in vim73/src/testdir/test93.in
--- vim73.orig/src/testdir/test93.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test93.in	2013-08-04 19:09:11.327275037 +0000
@@ -0,0 +1,48 @@
+vim: set ft=vim fenc=latin1:
+
+Tests if :mksession saves cursor columns correctly in presence of tab and 
+multibyte characters when fileencoding=latin1.
+
+STARTTEST
+:so mbyte.vim
+:if !has('mksession')
+:  e! test.ok
+:  wq! test.out
+:endif
+:set sessionoptions=buffers splitbelow fileencoding=latin1
+/^start:
+:vsplit
+j16|:split
+j16|:split
+j16|:split
+j8|:split
+j8|:split
+j16|:split
+j16|:split
+j16|:wincmd l
+/^start:
+:set nowrap
+j16|3zl:split
+j016|3zl:split
+j016|3zl:split
+j08|3zl:split
+j08|3zl:split
+j016|3zl:split
+j016|3zl:split
+j016|3zl:split
+:mksession! test.out
+:new test.out
+:v/\(^ *normal! 0\|^ *exe 'normal!\)/d
+:w
+:qa!
+ENDTEST
+
+start:
+no multibyte chAracter
+	one leaDing tab
+    four leadinG spaces
+two		consecutive tabs
+two	tabs	in one line
+one  multibyteCharacter
+a   two multiByte characters
+A  three mulTibyte characters
diff -Naur vim73.orig/src/testdir/test93.ok vim73/src/testdir/test93.ok
--- vim73.orig/src/testdir/test93.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test93.ok	2013-08-04 19:09:11.327275037 +0000
@@ -0,0 +1,26 @@
+normal! 016|
+normal! 016|
+normal! 016|
+normal! 08|
+normal! 08|
+normal! 016|
+normal! 016|
+normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 8 . '|'
+  normal! 08|
+  exe 'normal! ' . s:c . '|zs' . 8 . '|'
+  normal! 08|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
+  exe 'normal! ' . s:c . '|zs' . 16 . '|'
+  normal! 016|
diff -Naur vim73.orig/src/testdir/test94.in vim73/src/testdir/test94.in
--- vim73.orig/src/testdir/test94.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test94.in	2013-08-04 19:09:11.327275037 +0000
@@ -0,0 +1,95 @@
+Test for Visual mode and operators
+
+Tests for the two kinds of operations: Those executed with Visual mode
+followed by an operator and those executed via Operator-pending mode. Also
+part of the test are mappings, counts, and repetition with the . command.
+
+Test cases:
+- Visual modes (v V CTRL-V) followed by an operator; count; repeating
+- Visual mode maps; count; repeating
+  - Simple
+  - With an Ex command (custom text object)
+- Operator-pending mode maps
+  - Simple
+  - With Ex command moving the cursor
+  - With Ex command and Visual selection (custom text object)
+- Patch 7.3.879: Properly abort Ex command in Operator-pending mode
+
+STARTTEST
+:so small.vim
+:set nocp viminfo+=nviminfo
+:
+:" User functions
+:function MoveToCap()
+:  call search('\u', 'W')
+:endfunction
+:function SelectInCaps()
+:  let [line1, col1] = searchpos('\u', 'bcnW')
+:  let [line2, col2] = searchpos('.\u', 'nW')
+:  call setpos("'<", [0, line1, col1, 0])
+:  call setpos("'>", [0, line2, col2, 0])
+:  normal! gv
+:endfunction
+:
+:" Visual modes followed by operator
+/^apple
+lvld.l3vd.:
+/^line 1
+Vcnewlinej.j2Vd.:
+/^xxxx
+jlc  l.l2c----l.:
+:
+:" Visual mode maps (movement and text object)
+:vnoremap W /\u/s-1<CR>
+:vnoremap iW :<C-U>call SelectInCaps()<CR>
+/^Kiwi
+vWcNol.fD2vd.:
+/^Jambu
+llviWc-l.l2vdl.:
+:
+:" Operator-pending mode maps (movement and text object)
+:onoremap W /\u/<CR>
+:onoremap <Leader>W :<C-U>call MoveToCap()<CR>
+:onoremap iW :<C-U>call SelectInCaps()<CR>
+/^Pineapple
+cW-l.l2.l.:
+/^Juniper
+g?\WfD.:
+/^Lemon
+yiWPlciWNewfr.:
+:
+:" Patch 7.3.879: Properly abort Operator-pending mode for "dv:<Esc>" etc.
+/^zzzz
+dV:dv::set noma | let v:errmsg = ''
+d::set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed'
+dv:dV::set noma | let v:errmsg = ''
+d::set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok'
+:/^start:/+2,$w! test.out
+:q!
+ENDTEST
+
+start:
+
+apple banana cherry
+
+line 1 line 1
+line 2 line 2
+line 3 line 3
+line 4 line 4
+line 5 line 5
+line 6 line 6
+
+xxxxxxxxxxxxx
+xxxxxxxxxxxxx
+xxxxxxxxxxxxx
+xxxxxxxxxxxxx
+
+KiwiRaspberryDateWatermelonPeach
+JambuRambutanBananaTangerineMango
+
+PineappleQuinceLoganberryOrangeGrapefruitKiwiZ
+JuniperDurianZ
+LemonNectarineZ
+
+zzzz
+zzzz
diff -Naur vim73.orig/src/testdir/test94.ok vim73/src/testdir/test94.ok
--- vim73.orig/src/testdir/test94.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test94.ok	2013-08-04 19:09:11.330608360 +0000
@@ -0,0 +1,20 @@
+a y
+
+newline
+newline
+
+    --------x
+    --------x
+xxxx--------x
+xxxx--------x
+
+NoNoberryach
+--ago
+
+----Z
+WhavcreQhevnaZ
+LemonNewNewZ
+
+zzz
+ok
+ok
diff -Naur vim73.orig/src/testdir/test95.in vim73/src/testdir/test95.in
--- vim73.orig/src/testdir/test95.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test95.in	2013-08-04 19:09:11.330608360 +0000
@@ -0,0 +1,124 @@
+Test for regexp patterns with multi-byte support, using utf-8.
+See test64 for the non-multi-byte tests.
+
+A pattern that gives the expected result produces OK, so that we know it was
+actually tried.
+
+STARTTEST
+:so small.vim
+:so mbyte.vim
+:set nocp encoding=utf-8 viminfo+=nviminfo nomore
+:" tl is a List of Lists with:
+:"    2: test auto/old/new  0: test auto/old  1: test auto/new
+:"    regexp pattern
+:"    text to test the pattern on
+:"    expected match (optional)
+:"    expected submatch 1 (optional)
+:"    expected submatch 2 (optional)
+:"    etc.
+:"  When there is no match use only the first two items.
+:let tl = []
+
+:"""" Multi-byte character tests. These will fail unless vim is compiled
+:"""" with Multibyte (FEAT_MBYTE) or BIG/HUGE features.
+:call add(tl, [2, '[[:alpha:][=a=]]\+', '879 aiaãâaiuvna ', 'aiaãâaiuvna'])
+:call add(tl, [2, '[[=a=]]\+', 'ddaãâbcd', 'aãâ'])								" equivalence classes
+:call add(tl, [2, '[^ม ]\+', 'มม oijasoifjos ifjoisj f osij j มมมมม abcd', 'oijasoifjos'])
+:call add(tl, [2, ' [^ ]\+', 'start มabcdม ', ' มabcdม'])
+:call add(tl, [2, '[ม[:alpha:][=a=]]\+', '879 aiaãมâมaiuvna ', 'aiaãมâมaiuvna'])
+
+:" this is not a normal "i" but 0xec
+:call add(tl, [2, '\p\+', 'ìa', 'ìa'])
+
+:"""" Test recognition of some character classes
+:call add(tl, [2, '\i\+', '&*¨xx ', 'xx'])
+:call add(tl, [2, '\f\+', '&*fname ', 'fname'])
+
+:"""" Test composing character matching
+:call add(tl, [2, '.ม', 'xม่x yมy', 'yม'])
+:call add(tl, [2, '.ม่', 'xม่x yมy', 'xม่'])
+:call add(tl, [2, "\u05b9", " x\u05b9 ", "x\u05b9"])
+:call add(tl, [2, ".\u05b9", " x\u05b9 ", "x\u05b9"])
+:call add(tl, [2, "\u05b9\u05bb", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, ".\u05b9\u05bb", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, "\u05bb\u05b9", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, ".\u05bb\u05b9", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, "\u05b9", " y\u05bb x\u05b9 ", "x\u05b9"])
+:call add(tl, [2, ".\u05b9", " y\u05bb x\u05b9 ", "x\u05b9"])
+:call add(tl, [2, "\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"])
+:call add(tl, [2, ".\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"])
+:call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"])
+:call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"])
+
+
+:"""" Test \Z
+:call add(tl, [2, 'ú\Z', 'x'])
+:call add(tl, [2, 'יהוה\Z', 'יהוה', 'יהוה'])
+:call add(tl, [2, 'יְהוָה\Z', 'יהוה', 'יהוה'])
+:call add(tl, [2, 'יהוה\Z', 'יְהוָה', 'יְהוָה'])
+:call add(tl, [2, 'יְהוָה\Z', 'יְהוָה', 'יְהוָה'])
+:call add(tl, [2, 'יְ\Z', 'וְיַ', 'יַ'])
+:call add(tl, [2, "ק\u200d\u05b9x\\Z", "xק\u200d\u05b9xy", "ק\u200d\u05b9x"])
+:call add(tl, [2, "ק\u200d\u05b9x\\Z", "xק\u200dxy", "ק\u200dx"])
+:call add(tl, [2, "ק\u200dx\\Z", "xק\u200d\u05b9xy", "ק\u200d\u05b9x"])
+:call add(tl, [2, "ק\u200dx\\Z", "xק\u200dxy", "ק\u200dx"])
+:call add(tl, [2, "\u05b9\\Z", "xyz"])
+:call add(tl, [2, "\\Z\u05b9", "xyz"])
+:call add(tl, [2, "\u05b9\\Z", "xy\u05b9z", "y\u05b9"])
+:call add(tl, [2, "\\Z\u05b9", "xy\u05b9z", "y\u05b9"])
+:call add(tl, [1, "\u05b9\\+\\Z", "xy\u05b9z\u05b9 ", "y\u05b9z\u05b9"])
+:call add(tl, [1, "\\Z\u05b9\\+", "xy\u05b9z\u05b9 ", "y\u05b9z\u05b9"])
+
+:"""" Combining different tests and features
+:call add(tl, [2, '[^[=a=]]\+', 'ddaãâbcd', 'dd'])
+
+:"""" Run the tests
+
+:"
+:for t in tl
+:  let re = t[0]
+:  let pat = t[1]
+:  let text = t[2]
+:  let matchidx = 3
+:  for engine in [0, 1, 2]
+:    if engine == 2 && re == 0 || engine == 1 && re == 1
+:      continue
+:    endif
+:    let &regexpengine = engine
+:    try
+:      let l = matchlist(text, pat)
+:    catch
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
+:    endtry
+:" check the match itself
+:    if len(l) == 0 && len(t) > matchidx
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
+:    elseif len(l) > 0 && len(t) == matchidx
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
+:    elseif len(t) > matchidx && l[0] != t[matchidx]
+:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
+:    else
+:      $put ='OK ' . engine . ' - ' . pat
+:    endif
+:    if len(l) > 0
+:"   check all the nine submatches
+:      for i in range(1, 9)
+:        if len(t) <= matchidx + i
+:          let e = ''
+:        else
+:          let e = t[matchidx + i]
+:        endif
+:        if l[i] != e
+:          $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+:        endif
+:      endfor
+:      unlet i
+:    endif
+:  endfor
+:endfor
+:unlet t tl e l
+
+:/\%#=1^Results/,$wq! test.out
+ENDTEST
+
+Results of test95:
diff -Naur vim73.orig/src/testdir/test95.ok vim73/src/testdir/test95.ok
--- vim73.orig/src/testdir/test95.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test95.ok	2013-08-04 19:09:11.333941684 +0000
@@ -0,0 +1,115 @@
+Results of test95:
+OK 0 - [[:alpha:][=a=]]\+
+OK 1 - [[:alpha:][=a=]]\+
+OK 2 - [[:alpha:][=a=]]\+
+OK 0 - [[=a=]]\+
+OK 1 - [[=a=]]\+
+OK 2 - [[=a=]]\+
+OK 0 - [^ม ]\+
+OK 1 - [^ม ]\+
+OK 2 - [^ม ]\+
+OK 0 -  [^ ]\+
+OK 1 -  [^ ]\+
+OK 2 -  [^ ]\+
+OK 0 - [ม[:alpha:][=a=]]\+
+OK 1 - [ม[:alpha:][=a=]]\+
+OK 2 - [ม[:alpha:][=a=]]\+
+OK 0 - \p\+
+OK 1 - \p\+
+OK 2 - \p\+
+OK 0 - \i\+
+OK 1 - \i\+
+OK 2 - \i\+
+OK 0 - \f\+
+OK 1 - \f\+
+OK 2 - \f\+
+OK 0 - .ม
+OK 1 - .ม
+OK 2 - .ม
+OK 0 - .ม่
+OK 1 - .ม่
+OK 2 - .ม่
+OK 0 - ֹ
+OK 1 - ֹ
+OK 2 - ֹ
+OK 0 - .ֹ
+OK 1 - .ֹ
+OK 2 - .ֹ
+OK 0 - ֹֻ
+OK 1 - ֹֻ
+OK 2 - ֹֻ
+OK 0 - .ֹֻ
+OK 1 - .ֹֻ
+OK 2 - .ֹֻ
+OK 0 - ֹֻ
+OK 1 - ֹֻ
+OK 2 - ֹֻ
+OK 0 - .ֹֻ
+OK 1 - .ֹֻ
+OK 2 - .ֹֻ
+OK 0 - ֹ
+OK 1 - ֹ
+OK 2 - ֹ
+OK 0 - .ֹ
+OK 1 - .ֹ
+OK 2 - .ֹ
+OK 0 - ֹ
+OK 1 - ֹ
+OK 2 - ֹ
+OK 0 - .ֹ
+OK 1 - .ֹ
+OK 2 - .ֹ
+OK 0 - ֹֻ
+OK 2 - ֹֻ
+OK 0 - .ֹֻ
+OK 1 - .ֹֻ
+OK 2 - .ֹֻ
+OK 0 - ú\Z
+OK 1 - ú\Z
+OK 2 - ú\Z
+OK 0 - יהוה\Z
+OK 1 - יהוה\Z
+OK 2 - יהוה\Z
+OK 0 - יְהוָה\Z
+OK 1 - יְהוָה\Z
+OK 2 - יְהוָה\Z
+OK 0 - יהוה\Z
+OK 1 - יהוה\Z
+OK 2 - יהוה\Z
+OK 0 - יְהוָה\Z
+OK 1 - יְהוָה\Z
+OK 2 - יְהוָה\Z
+OK 0 - יְ\Z
+OK 1 - יְ\Z
+OK 2 - יְ\Z
+OK 0 - ק‍ֹx\Z
+OK 1 - ק‍ֹx\Z
+OK 2 - ק‍ֹx\Z
+OK 0 - ק‍ֹx\Z
+OK 1 - ק‍ֹx\Z
+OK 2 - ק‍ֹx\Z
+OK 0 - ק‍x\Z
+OK 1 - ק‍x\Z
+OK 2 - ק‍x\Z
+OK 0 - ק‍x\Z
+OK 1 - ק‍x\Z
+OK 2 - ק‍x\Z
+OK 0 - ֹ\Z
+OK 1 - ֹ\Z
+OK 2 - ֹ\Z
+OK 0 - \Zֹ
+OK 1 - \Zֹ
+OK 2 - \Zֹ
+OK 0 - ֹ\Z
+OK 1 - ֹ\Z
+OK 2 - ֹ\Z
+OK 0 - \Zֹ
+OK 1 - \Zֹ
+OK 2 - \Zֹ
+OK 0 - ֹ\+\Z
+OK 2 - ֹ\+\Z
+OK 0 - \Zֹ\+
+OK 2 - \Zֹ\+
+OK 0 - [^[=a=]]\+
+OK 1 - [^[=a=]]\+
+OK 2 - [^[=a=]]\+
diff -Naur vim73.orig/src/testdir/test96.in vim73/src/testdir/test96.in
--- vim73.orig/src/testdir/test96.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test96.in	2013-08-04 19:09:11.333941684 +0000
@@ -0,0 +1,142 @@
+This will test for problems in quickfix:
+A. incorrectly copying location lists which caused the location list to show a
+   different name than the file that was actually being displayed.
+B. not reusing the window for which the location list window is opened but
+   instead creating new windows.
+C. make sure that the location list window is not reused instead of the window
+   it belongs to.
+
+Note: to debug a problem comment out the last ":b 1" in a test and testing will
+stop at this point.
+
+STARTTEST
+:so small.vim
+: enew
+: w! test.out
+: b 1
+: " Set up the test environment:
+: function! ReadTestProtocol(name)
+:   let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '')
+:   let word = substitute(base, '\v(.*)\..*', '\1', '')
+:
+:   setl modifiable
+:   setl noreadonly
+:   setl noswapfile
+:   setl bufhidden=delete
+:   %del _
+:   " For problem 2:
+:   " 'buftype' has to be set to reproduce the constant opening of new windows
+:   setl buftype=nofile
+:
+:   call setline(1, word)
+:
+:   setl nomodified
+:   setl nomodifiable
+:   setl readonly
+:   exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '')
+: endfunction
+: augroup testgroup
+:   au!
+:   autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>"))
+: augroup END
+: let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ]
+:
+: let qflist = []
+: for word in words
+:   call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', })
+:   " NOTE: problem 1:
+:   " intentionally not setting 'lnum' so that the quickfix entries are not
+:   " valid
+:   call setloclist(0, qflist, ' ')
+: endfor
+ENDTEST
+
+Test A:
+STARTTEST
+:lrewind
+:enew
+:lopen
+:lnext
+:lnext
+:lnext
+:lnext
+:vert split
+:wincmd L
+:lopen
+:wincmd p
+:lnext
+:"b 1
+:let fileName = expand("%")
+:wincmd p
+:let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '')
+:wincmd n
+:wincmd K
+:b test.out
+:let fileName = substitute(fileName, '\\', '/', 'g')
+:let locationListFileName = substitute(locationListFileName, '\\', '/', 'g')
+:call append(line('$'), "Test A:")
+:call append(line('$'), "  - file name displayed: " . fileName)
+:call append(line('$'), "  - quickfix claims that the file name displayed is: " . locationListFileName)
+:w
+:wincmd o
+:b 1
+ENDTEST
+
+Test B:
+STARTTEST
+:lrewind
+:lopen
+:2
+:exe "normal \<CR>"
+:wincmd p
+:3
+:exe "normal \<CR>"
+:wincmd p
+:4
+:exe "normal \<CR>"
+:let numberOfWindowsOpen = winnr('$')
+:wincmd n
+:wincmd K
+:b test.out
+:call append(line('$'), "Test B:")
+:call append(line('$'), "  - number of window open: " . numberOfWindowsOpen)
+:w
+:wincmd o
+:b 1
+ENDTEST
+
+Test C:
+STARTTEST
+:lrewind
+:lopen
+:" Let's move the location list window to the top to check whether it (the first
+:" window found) will be reused when we try to open new windows:
+:wincmd K
+:2
+:exe "normal \<CR>"
+:wincmd p
+:3
+:exe "normal \<CR>"
+:wincmd p
+:4
+:exe "normal \<CR>"
+:1wincmd w
+:let locationListWindowBufType = &buftype
+:2wincmd w
+:let bufferName = expand("%")
+:wincmd n
+:wincmd K
+:b test.out
+:let bufferName = substitute(bufferName, '\\', '/', 'g')
+:call append(line('$'), "Test C:")
+:call append(line('$'), "  - 'buftype' of the location list window: " . locationListWindowBufType)
+:call append(line('$'), "  - buffer displayed in the 2nd window: " . bufferName)
+:w
+:wincmd o
+:b 1
+ENDTEST
+
+STARTTEST
+:qa
+ENDTEST
+
diff -Naur vim73.orig/src/testdir/test96.ok vim73/src/testdir/test96.ok
--- vim73.orig/src/testdir/test96.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test96.ok	2013-08-04 19:09:11.333941684 +0000
@@ -0,0 +1,9 @@
+
+Test A:
+  - file name displayed: test://bar.txt
+  - quickfix claims that the file name displayed is: test://bar.txt
+Test B:
+  - number of window open: 2
+Test C:
+  - 'buftype' of the location list window: quickfix
+  - buffer displayed in the 2nd window: test://quux.txt
diff -Naur vim73.orig/src/testdir/test97.in vim73/src/testdir/test97.in
--- vim73.orig/src/testdir/test97.in	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test97.in	2013-08-04 19:09:11.333941684 +0000
@@ -0,0 +1,17 @@
+Test whether glob()/globpath() return correct results with certain escaped
+characters.
+
+STARTTEST
+:so small.vim
+:set shell=doesnotexist
+:e test.out
+:put =glob('Xxx\{')
+:put =glob('Xxx\$')
+:w! Xxx{
+:w! Xxx\$
+:put =glob('Xxx\{')
+:put =glob('Xxx\$')
+:w
+:qa!
+ENDTEST
+
diff -Naur vim73.orig/src/testdir/test97.ok vim73/src/testdir/test97.ok
--- vim73.orig/src/testdir/test97.ok	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/testdir/test97.ok	2013-08-04 19:09:11.337275007 +0000
@@ -0,0 +1,5 @@
+
+
+
+Xxx{
+Xxx$
diff -Naur vim73.orig/src/typemap vim73/src/typemap
--- vim73.orig/src/typemap	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/typemap	2013-08-04 19:09:11.343941653 +0000
@@ -6,7 +6,7 @@
 T_VIOBJNOMUNGE
 	if (sv_isa($arg, \"${ntype}\")) {
 	    IV tmp = SvIV((SV*)SvRV($arg));
-	    $var = ($type) tmp;
+	    $var = INT2PTR($type, tmp);
 	    if (!tmp)
 		croak(\"$ntype no longer exists\");
 	}
diff -Naur vim73.orig/src/ui.c vim73/src/ui.c
--- vim73.orig/src/ui.c	2010-08-08 13:17:30.000000000 +0000
+++ vim73/src/ui.c	2013-08-04 19:09:11.347274977 +0000
@@ -18,6 +18,12 @@
 
 #include "vim.h"
 
+#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# include "winclip.pro"
+#endif
+
     void
 ui_write(s, len)
     char_u  *s;
@@ -58,7 +64,7 @@
 #endif
 }
 
-#if defined(UNIX) || defined(VMS) || defined(PROTO)
+#if defined(UNIX) || defined(VMS) || defined(PROTO) || defined(WIN3264)
 /*
  * When executing an external program, there may be some typed characters that
  * are not consumed by it.  Give them back to ui_inchar() and they are stored
@@ -98,7 +104,7 @@
 #endif
 
 /*
- * ui_inchar(): low level input funcion.
+ * ui_inchar(): low level input function.
  * Get characters from the keyboard.
  * Return the number of characters that are available.
  * If "wtime" == 0 do not wait for characters.
@@ -326,13 +332,7 @@
 {
 #ifdef FEAT_GUI
     if (gui.in_use)
-	gui_set_shellsize(mustset,
-# ifdef WIN3264
-		TRUE
-# else
-		FALSE
-# endif
-		, RESIZE_BOTH);
+	gui_set_shellsize(mustset, TRUE, RESIZE_BOTH);
     else
 #endif
 	mch_set_shellsize();
@@ -381,6 +381,8 @@
 
 #if defined(FEAT_CLIPBOARD) || defined(PROTO)
 
+static void clip_copy_selection __ARGS((VimClipboard *clip));
+
 /*
  * Selection stuff using Visual mode, for cutting and pasting text to other
  * windows.
@@ -423,9 +425,10 @@
  * this is called whenever VIsual mode is ended.
  */
     void
-clip_update_selection()
+clip_update_selection(clip)
+    VimClipboard    *clip;
 {
-    pos_T    start, end;
+    pos_T	    start, end;
 
     /* If visual mode is only due to a redo command ("."), then ignore it */
     if (!redo_VIsual_busy && VIsual_active && (State & NORMAL))
@@ -444,17 +447,17 @@
 	    start = curwin->w_cursor;
 	    end = VIsual;
 	}
-	if (!equalpos(clip_star.start, start)
-		|| !equalpos(clip_star.end, end)
-		|| clip_star.vmode != VIsual_mode)
-	{
-	    clip_clear_selection();
-	    clip_star.start = start;
-	    clip_star.end = end;
-	    clip_star.vmode = VIsual_mode;
-	    clip_free_selection(&clip_star);
-	    clip_own_selection(&clip_star);
-	    clip_gen_set_selection(&clip_star);
+	if (!equalpos(clip->start, start)
+		|| !equalpos(clip->end, end)
+		|| clip->vmode != VIsual_mode)
+	{
+	    clip_clear_selection(clip);
+	    clip->start = start;
+	    clip->end = end;
+	    clip->vmode = VIsual_mode;
+	    clip_free_selection(clip);
+	    clip_own_selection(clip);
+	    clip_gen_set_selection(clip);
 	}
     }
 }
@@ -469,13 +472,13 @@
      */
 #ifdef FEAT_X11
     /* Always own the selection, we might have lost it without being
-     * notified. */
+     * notified, e.g. during a ":sh" command. */
     if (cbd->available)
     {
 	int was_owned = cbd->owned;
 
 	cbd->owned = (clip_gen_own_selection(cbd) == OK);
-	if (!was_owned && cbd == &clip_star)
+	if (!was_owned && (cbd == &clip_star || cbd == &clip_plus))
 	{
 	    /* May have to show a different kind of highlighting for the
 	     * selected area.  There is no specific redraw command for this,
@@ -483,13 +486,14 @@
 	    if (cbd->owned
 		    && (get_real_state() == VISUAL
 					    || get_real_state() == SELECTMODE)
-		    && clip_isautosel()
+		    && (cbd == &clip_star ? clip_isautosel_star()
+						      : clip_isautosel_plus())
 		    && hl_attr(HLF_V) != hl_attr(HLF_VNC))
 		redraw_curbuf_later(INVERTED_ALL);
 	}
     }
 #else
-    /* Only own the clibpard when we didn't own it yet. */
+    /* Only own the clipboard when we didn't own it yet. */
     if (!cbd->owned && cbd->available)
 	cbd->owned = (clip_gen_own_selection(cbd) == OK);
 #endif
@@ -502,12 +506,15 @@
 #ifdef FEAT_X11
     int	    was_owned = cbd->owned;
 #endif
-    int     visual_selection = (cbd == &clip_star);
+    int     visual_selection = FALSE;
+
+    if (cbd == &clip_star || cbd == &clip_plus)
+	visual_selection = TRUE;
 
     clip_free_selection(cbd);
     cbd->owned = FALSE;
     if (visual_selection)
-	clip_clear_selection();
+	clip_clear_selection(cbd);
     clip_gen_lose_selection(cbd);
 #ifdef FEAT_X11
     if (visual_selection)
@@ -518,7 +525,8 @@
 	if (was_owned
 		&& (get_real_state() == VISUAL
 					    || get_real_state() == SELECTMODE)
-		&& clip_isautosel()
+		&& (cbd == &clip_star ?
+				clip_isautosel_star() : clip_isautosel_plus())
 		&& hl_attr(HLF_V) != hl_attr(HLF_VNC))
 	{
 	    update_curbuf(INVERTED_ALL);
@@ -534,18 +542,18 @@
 #endif
 }
 
-    void
-clip_copy_selection()
+    static void
+clip_copy_selection(clip)
+    VimClipboard	*clip;
 {
-    if (VIsual_active && (State & NORMAL) && clip_star.available)
+    if (VIsual_active && (State & NORMAL) && clip->available)
     {
-	if (clip_isautosel())
-	    clip_update_selection();
-	clip_free_selection(&clip_star);
-	clip_own_selection(&clip_star);
-	if (clip_star.owned)
-	    clip_get_selection(&clip_star);
-	clip_gen_set_selection(&clip_star);
+	clip_update_selection(clip);
+	clip_free_selection(clip);
+	clip_own_selection(clip);
+	if (clip->owned)
+	    clip_get_selection(clip);
+	clip_gen_set_selection(clip);
     }
 }
 
@@ -555,21 +563,38 @@
     void
 clip_auto_select()
 {
-    if (clip_isautosel())
-	clip_copy_selection();
+    if (clip_isautosel_star())
+	clip_copy_selection(&clip_star);
+    if (clip_isautosel_plus())
+	clip_copy_selection(&clip_plus);
 }
 
 /*
- * Return TRUE if automatic selection of Visual area is desired.
+ * Return TRUE if automatic selection of Visual area is desired for the *
+ * register.
  */
     int
-clip_isautosel()
+clip_isautosel_star()
 {
     return (
 #ifdef FEAT_GUI
 	    gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) :
 #endif
-	    clip_autoselect);
+	    clip_autoselect_star);
+}
+
+/*
+ * Return TRUE if automatic selection of Visual area is desired for the +
+ * register.
+ */
+    int
+clip_isautosel_plus()
+{
+    return (
+#ifdef FEAT_GUI
+	    gui.in_use ? (vim_strchr(p_go, GO_ASELPLUS) != NULL) :
+#endif
+	    clip_autoselect_plus);
 }
 
 
@@ -657,7 +682,7 @@
     VimClipboard	*cb = &clip_star;
 
     if (cb->state == SELECT_DONE)
-	clip_clear_selection();
+	clip_clear_selection(cb);
 
     row = check_row(row);
     col = check_col(col);
@@ -749,7 +774,7 @@
 	printf("Selection ended: (%u,%u) to (%u,%u)\n", cb->start.lnum,
 		cb->start.col, cb->end.lnum, cb->end.col);
 #endif
-	if (clip_isautosel()
+	if (clip_isautosel_star()
 		|| (
 #ifdef FEAT_GUI
 		    gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) :
@@ -932,16 +957,16 @@
  * Called from outside to clear selected region from the display
  */
     void
-clip_clear_selection()
+clip_clear_selection(cbd)
+    VimClipboard    *cbd;
 {
-    VimClipboard    *cb = &clip_star;
 
-    if (cb->state == SELECT_CLEARED)
+    if (cbd->state == SELECT_CLEARED)
 	return;
 
-    clip_invert_area((int)cb->start.lnum, cb->start.col, (int)cb->end.lnum,
-						     cb->end.col, CLIP_CLEAR);
-    cb->state = SELECT_CLEARED;
+    clip_invert_area((int)cbd->start.lnum, cbd->start.col, (int)cbd->end.lnum,
+						     cbd->end.col, CLIP_CLEAR);
+    cbd->state = SELECT_CLEARED;
 }
 
 /*
@@ -954,7 +979,7 @@
     if (clip_star.state == SELECT_DONE
 	    && row2 >= clip_star.start.lnum
 	    && row1 <= clip_star.end.lnum)
-	clip_clear_selection();
+	clip_clear_selection(&clip_star);
 }
 
 /*
@@ -1431,6 +1456,21 @@
 #endif
 }
 
+    int
+clip_gen_owner_exists(cbd)
+    VimClipboard	*cbd UNUSED;
+{
+#ifdef FEAT_XCLIPBOARD
+# ifdef FEAT_GUI_GTK
+    if (gui.in_use)
+	return clip_gtk_owner_exists(cbd);
+    else
+# endif
+	return clip_x11_owner_exists(cbd);
+#endif
+    return TRUE;
+}
+
 #endif /* FEAT_CLIPBOARD */
 
 /*****************************************************************************
@@ -1609,7 +1649,7 @@
 
 #if defined(FEAT_HANGULIN) || defined(PROTO)
     void
-push_raw_key (s, len)
+push_raw_key(s, len)
     char_u  *s;
     int	    len;
 {
@@ -1917,6 +1957,7 @@
 static Atom	vim_atom;	/* Vim's own special selection format */
 #ifdef FEAT_MBYTE
 static Atom	vimenc_atom;	/* Vim's extended selection format */
+static Atom	utf8_atom;
 #endif
 static Atom	compound_text_atom;
 static Atom	text_atom;
@@ -1930,6 +1971,7 @@
     vim_atom	       = XInternAtom(dpy, VIM_ATOM_NAME,   False);
 #ifdef FEAT_MBYTE
     vimenc_atom	       = XInternAtom(dpy, VIMENC_ATOM_NAME,False);
+    utf8_atom	       = XInternAtom(dpy, "UTF8_STRING",   False);
 #endif
     compound_text_atom = XInternAtom(dpy, "COMPOUND_TEXT", False);
     text_atom	       = XInternAtom(dpy, "TEXT",	   False);
@@ -1944,10 +1986,9 @@
  */
 
 static Boolean	clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
-
 static void  clip_x11_lose_ownership_cb __ARGS((Widget, Atom *));
-
 static void clip_x11_timestamp_cb __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont));
+static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
 
 /*
  * Property callback to get a timestamp for XtOwnSelection.
@@ -1985,8 +2026,17 @@
 	return;
 
     /* Get the selection, using the event timestamp. */
-    XtOwnSelection(w, xproperty->atom, xproperty->time,
-	    clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb, NULL);
+    if (XtOwnSelection(w, xproperty->atom, xproperty->time,
+	    clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
+	    NULL) == OK)
+    {
+	/* Set the "owned" flag now, there may have been a call to
+	 * lose_ownership_cb in between. */
+	if (xproperty->atom == clip_plus.sel_atom)
+	    clip_plus.owned = TRUE;
+	else
+	    clip_star.owned = TRUE;
+    }
 }
 
     void
@@ -1997,8 +2047,6 @@
 	    /*(XtEventHandler)*/clip_x11_timestamp_cb, (XtPointer)NULL);
 }
 
-static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
-
     static void
 clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
 			      format)
@@ -2010,7 +2058,7 @@
     long_u	*length;
     int		*format;
 {
-    int		motion_type;
+    int		motion_type = MAUTO;
     long_u	len;
     char_u	*p;
     char	**text_list = NULL;
@@ -2030,7 +2078,6 @@
 	*(int *)success = FALSE;
 	return;
     }
-    motion_type = MCHAR;
     p = (char_u *)value;
     len = *length;
     if (*type == vim_atom)
@@ -2069,7 +2116,11 @@
     }
 #endif
 
-    else if (*type == compound_text_atom || (
+    else if (*type == compound_text_atom
+#ifdef FEAT_MBYTE
+	    || *type == utf8_atom
+#endif
+	    || (
 #ifdef FEAT_MBYTE
 		enc_dbcs != 0 &&
 #endif
@@ -2083,7 +2134,13 @@
 	text_prop.encoding = *type;
 	text_prop.format = *format;
 	text_prop.nitems = len;
-	status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
+#if defined(FEAT_MBYTE) && defined(X_HAVE_UTF8_STRING)
+	if (*type == utf8_atom)
+	    status = Xutf8TextPropertyToTextList(X_DISPLAY, &text_prop,
+							 &text_list, &n_text);
+	else
+#endif
+	    status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
 							 &text_list, &n_text);
 	if (status != Success || n_text < 1)
 	{
@@ -2123,7 +2180,7 @@
 #else
 	    1
 #endif
-	    ; i < 5; i++)
+	    ; i < 6; i++)
     {
 	switch (i)
 	{
@@ -2131,10 +2188,23 @@
 	    case 0:  type = vimenc_atom;	break;
 #endif
 	    case 1:  type = vim_atom;		break;
-	    case 2:  type = compound_text_atom; break;
-	    case 3:  type = text_atom;		break;
+#ifdef FEAT_MBYTE
+	    case 2:  type = utf8_atom;		break;
+#endif
+	    case 3:  type = compound_text_atom; break;
+	    case 4:  type = text_atom;		break;
 	    default: type = XA_STRING;
 	}
+#ifdef FEAT_MBYTE
+	if (type == utf8_atom
+# if defined(X_HAVE_UTF8_STRING)
+		&& !enc_utf8
+# endif
+		)
+	    /* Only request utf-8 when 'encoding' is utf8 and
+	     * Xutf8TextPropertyToTextList is available. */
+	    continue;
+#endif
 	success = MAYBE;
 	XtGetSelectionValue(myShell, cbd->sel_atom, type,
 	    clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
@@ -2225,18 +2295,23 @@
     {
 	Atom *array;
 
-	if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 6))) == NULL)
+	if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 7))) == NULL)
 	    return False;
 	*value = (XtPointer)array;
 	i = 0;
-	array[i++] = XA_STRING;
 	array[i++] = targets_atom;
 #ifdef FEAT_MBYTE
 	array[i++] = vimenc_atom;
 #endif
 	array[i++] = vim_atom;
+#ifdef FEAT_MBYTE
+	if (enc_utf8)
+	    array[i++] = utf8_atom;
+#endif
+	array[i++] = XA_STRING;
 	array[i++] = text_atom;
 	array[i++] = compound_text_atom;
+
 	*type = XA_ATOM;
 	/* This used to be: *format = sizeof(Atom) * 8; but that caused
 	 * crashes on 64 bit machines. (Peter Derr) */
@@ -2248,6 +2323,7 @@
     if (       *target != XA_STRING
 #ifdef FEAT_MBYTE
 	    && *target != vimenc_atom
+	    && *target != utf8_atom
 #endif
 	    && *target != vim_atom
 	    && *target != text_atom
@@ -2277,24 +2353,33 @@
 	return False;
     }
 
-    if (*target == XA_STRING)
+    if (*target == XA_STRING
+#ifdef FEAT_MBYTE
+	    || (*target == utf8_atom && enc_utf8)
+#endif
+	    )
     {
 	mch_memmove(result, string, (size_t)(*length));
-	*type = XA_STRING;
+	*type = *target;
     }
-    else if (*target == compound_text_atom
-	    || *target == text_atom)
+    else if (*target == compound_text_atom || *target == text_atom)
     {
 	XTextProperty	text_prop;
 	char		*string_nt = (char *)alloc((unsigned)*length + 1);
+	int		conv_result;
 
 	/* create NUL terminated string which XmbTextListToTextProperty wants */
 	mch_memmove(string_nt, string, (size_t)*length);
 	string_nt[*length] = NUL;
-	XmbTextListToTextProperty(X_DISPLAY, (char **)&string_nt, 1,
-					      XCompoundTextStyle, &text_prop);
+	conv_result = XmbTextListToTextProperty(X_DISPLAY, (char **)&string_nt,
+					   1, XCompoundTextStyle, &text_prop);
 	vim_free(string_nt);
 	XtFree(*value);			/* replace with COMPOUND text */
+	if (conv_result != Success)
+	{
+	    vim_free(string);
+	    return False;
+	}
 	*value = (XtPointer)(text_prop.value);	/*    from plain text */
 	*length = text_prop.nitems;
 	*type = compound_text_atom;
@@ -2336,22 +2421,38 @@
 
     void
 clip_x11_lose_selection(myShell, cbd)
-    Widget	myShell;
+    Widget		myShell;
     VimClipboard	*cbd;
 {
-    XtDisownSelection(myShell, cbd->sel_atom, CurrentTime);
+    XtDisownSelection(myShell, cbd->sel_atom,
+				XtLastTimestampProcessed(XtDisplay(myShell)));
 }
 
     int
 clip_x11_own_selection(myShell, cbd)
-    Widget	myShell;
+    Widget		myShell;
     VimClipboard	*cbd;
 {
-    /* Get the time by a zero-length append, clip_x11_timestamp_cb will be
-     * called with the current timestamp.  */
-    if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell), cbd->sel_atom,
-	    timestamp_atom, 32, PropModeAppend, NULL, 0))
-	return FAIL;
+    /* When using the GUI we have proper timestamps, use the one of the last
+     * event.  When in the console we don't get events (the terminal gets
+     * them), Get the time by a zero-length append, clip_x11_timestamp_cb will
+     * be called with the current timestamp.  */
+#ifdef FEAT_GUI
+    if (gui.in_use)
+    {
+	if (XtOwnSelection(myShell, cbd->sel_atom,
+	       XtLastTimestampProcessed(XtDisplay(myShell)),
+	       clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
+	       NULL) == False)
+	    return FAIL;
+    }
+    else
+#endif
+    {
+	if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
+		  cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
+	    return FAIL;
+    }
     /* Flush is required in a terminal as nothing else is doing it. */
     XFlush(XtDisplay(myShell));
     return OK;
@@ -2366,6 +2467,13 @@
     VimClipboard *cbd UNUSED;
 {
 }
+
+    int
+clip_x11_owner_exists(cbd)
+    VimClipboard	*cbd;
+{
+    return XGetSelectionOwner(X_DISPLAY, cbd->sel_atom) != None;
+}
 #endif
 
 #if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \
@@ -3064,7 +3172,7 @@
     char_u	*start;
 
     start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
-    while (count <= vcol && *ptr != NUL)
+    while (count < vcol && *ptr != NUL)
     {
 	count += win_lbr_chartabsize(wp, ptr, count, NULL);
 	mb_ptr_adv(ptr);
diff -Naur vim73.orig/src/undo.c vim73/src/undo.c
--- vim73.orig/src/undo.c	2010-08-07 10:48:15.000000000 +0000
+++ vim73/src/undo.c	2013-08-04 19:09:11.353941623 +0000
@@ -81,10 +81,6 @@
 #define UH_MAGIC 0x18dade	/* value for uh_magic when in use */
 #define UE_MAGIC 0xabc123	/* value for ue_magic when in use */
 
-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
-# include "vimio.h"	/* for vim_read(), must be before vim.h */
-#endif
-
 #include "vim.h"
 
 static void u_unch_branch __ARGS((u_header_T *uhp));
@@ -220,6 +216,7 @@
 
 /*
  * Save the current line for both the "u" and "U" command.
+ * Careful: may trigger autocommands that reload the buffer.
  * Returns OK or FAIL.
  */
     int
@@ -242,8 +239,9 @@
     if (undo_off)
 	return OK;
 
-    if (top > curbuf->b_ml.ml_line_count ||
-			    top >= bot || bot > curbuf->b_ml.ml_line_count + 1)
+    if (top > curbuf->b_ml.ml_line_count
+	    || top >= bot
+	    || bot > curbuf->b_ml.ml_line_count + 1)
 	return FALSE;	/* rely on caller to do error messages */
 
     if (top + 2 == bot)
@@ -723,7 +721,7 @@
     char_u		*p;
 
     sha256_start(&ctx);
-    for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+    for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
     {
 	p = ml_get(lnum);
 	sha256_update(&ctx, p, (UINT32_T)(STRLEN(p) + 1));
@@ -1386,7 +1384,7 @@
 		char_u	mbuf[UF_START_MAGIC_LEN];
 		int	len;
 
-		len = vim_read(fd, mbuf, UF_START_MAGIC_LEN);
+		len = read_eintr(fd, mbuf, UF_START_MAGIC_LEN);
 		close(fd);
 		if (len < UF_START_MAGIC_LEN
 		      || memcmp(mbuf, UF_START_MAGIC, UF_START_MAGIC_LEN) != 0)
@@ -1516,8 +1514,10 @@
 	write_ok = TRUE;
 #ifdef U_DEBUG
     if (headers_written != buf->b_u_numhead)
-	EMSG3("Written %ld headers, but numhead is %ld",
-					   headers_written, buf->b_u_numhead);
+    {
+	EMSGN("Written %ld headers, ...", headers_written);
+	EMSGN("... but numhead is %ld", buf->b_u_numhead);
+    }
 #endif
 
 write_error:
@@ -1539,6 +1539,7 @@
 	/* For systems that support ACL: get the ACL from the original file. */
 	acl = mch_get_acl(buf->b_ffname);
 	mch_set_acl(file_name, acl);
+	mch_free_acl(acl);
     }
 #endif
 
@@ -1861,6 +1862,7 @@
     curbuf->b_u_seq_cur = seq_cur;
     curbuf->b_u_time_cur = seq_time;
     curbuf->b_u_save_nr_last = last_save_nr;
+    curbuf->b_u_save_nr_cur = last_save_nr;
 
     curbuf->b_u_synced = TRUE;
     vim_free(uhp_table);
@@ -2794,7 +2796,7 @@
 								uhp->uh_time);
 	    if (uhp->uh_save_nr > 0)
 	    {
-		while (STRLEN(IObuff) < 32)
+		while (STRLEN(IObuff) < 33)
 		    STRCAT(IObuff, " ");
 		vim_snprintf_add((char *)IObuff, IOSIZE,
 						   "  %3ld", uhp->uh_save_nr);
@@ -2849,7 +2851,7 @@
 	sort_strings((char_u **)ga.ga_data, ga.ga_len);
 
 	msg_start();
-	msg_puts_attr((char_u *)_("number changes  time            saved"),
+	msg_puts_attr((char_u *)_("number changes  when               saved"),
 							      hl_attr(HLF_T));
 	for (i = 0; i < ga.ga_len && !got_int; ++i)
 	{
@@ -2879,7 +2881,12 @@
     if (time(NULL) - tt >= 100)
     {
 	curtime = localtime(&tt);
-	(void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
+	if (time(NULL) - tt < (60L * 60L * 12L))
+	    /* within 12 hours */
+	    (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
+	else
+	    /* longer ago */
+	    (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
     }
     else
 #endif
@@ -3299,7 +3306,7 @@
 #ifdef FEAT_QUICKFIX
 	    !bt_dontwrite(buf) &&
 #endif
-	    (buf->b_changed || file_ff_differs(buf));
+	    (buf->b_changed || file_ff_differs(buf, TRUE));
 }
 
     int
@@ -3309,7 +3316,7 @@
 #ifdef FEAT_QUICKFIX
 	!bt_dontwrite(curbuf) &&
 #endif
-	(curbuf->b_changed || file_ff_differs(curbuf));
+	(curbuf->b_changed || file_ff_differs(curbuf, TRUE));
 }
 
 #if defined(FEAT_EVAL) || defined(PROTO)
diff -Naur vim73.orig/src/version.c vim73/src/version.c
--- vim73.orig/src/version.c	2010-08-01 13:45:48.000000000 +0000
+++ vim73/src/version.c	2013-08-04 19:09:11.387274856 +0000
@@ -34,6 +34,9 @@
 # if (defined(VMS) && defined(VAXC)) || defined(PROTO)
 char	longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
 						      + sizeof(__TIME__) + 3];
+
+static void list_features __ARGS((void));
+
     void
 make_version()
 {
@@ -348,6 +351,7 @@
 # else
 	"-mouse",
 #endif
+
 #if defined(UNIX) || defined(VMS)
 # ifdef FEAT_MOUSE_DEC
 	"+mouse_dec",
@@ -369,24 +373,39 @@
 # else
 	"-mouse_netterm",
 # endif
+#endif
+
+#ifdef __QNX__
+# ifdef FEAT_MOUSE_PTERM
+	"+mouse_pterm",
+# else
+	"-mouse_pterm",
+# endif
+#endif
+
+#if defined(UNIX) || defined(VMS)
+# ifdef FEAT_MOUSE_SGR
+	"+mouse_sgr",
+# else
+	"-mouse_sgr",
+# endif
 # ifdef FEAT_SYSMOUSE
 	"+mouse_sysmouse",
 # else
 	"-mouse_sysmouse",
 # endif
+# ifdef FEAT_MOUSE_URXVT
+	"+mouse_urxvt",
+# else
+	"-mouse_urxvt",
+# endif
 # ifdef FEAT_MOUSE_XTERM
 	"+mouse_xterm",
 # else
 	"-mouse_xterm",
 # endif
 #endif
-#ifdef __QNX__
-# ifdef FEAT_MOUSE_PTERM
-	"+mouse_pterm",
-# else
-	"-mouse_pterm",
-# endif
-#endif
+
 #ifdef FEAT_MBYTE_IME
 # ifdef DYNAMIC_IME
 	"+multi_byte_ime/dyn",
@@ -426,11 +445,6 @@
 	"-ole",
 # endif
 #endif
-#ifdef FEAT_OSFILETYPE
-	"+osfiletype",
-#else
-	"-osfiletype",
-#endif
 #ifdef FEAT_PATH_EXTRA
 	"+path_extra",
 #else
@@ -715,237 +729,2932 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
-    0
-};
-
-/*
- * Place to put a short description when adding a feature with a patch.
- * Keep it short, e.g.,: "relative numbers", "persistent undo".
- * Also add a comment marker to separate the lines.
- * See the official Vim patches for the diff format: It must use a context of
- * one line only.  Create it by hand or use "diff -C2" and edit the patch.
- */
-static char *(extra_patches[]) =
-{   /* Add your patch description below this line */
+    1314,
 /**/
-    NULL
-};
-
-    int
-highest_patch()
-{
-    int		i;
-    int		h = 0;
-
-    for (i = 0; included_patches[i] != 0; ++i)
-	if (included_patches[i] > h)
-	    h = included_patches[i];
-    return h;
-}
-
-#if defined(FEAT_EVAL) || defined(PROTO)
-/*
- * Return TRUE if patch "n" has been included.
- */
-    int
-has_patch(n)
-    int		n;
-{
-    int		i;
-
-    for (i = 0; included_patches[i] != 0; ++i)
-	if (included_patches[i] == n)
-	    return TRUE;
-    return FALSE;
-}
-#endif
-
-    void
-ex_version(eap)
-    exarg_T	*eap;
-{
-    /*
-     * Ignore a ":version 9.99" command.
-     */
-    if (*eap->arg == NUL)
-    {
-	msg_putchar('\n');
-	list_version();
-    }
-}
-
-    void
-list_version()
-{
-    int		i;
-    int		first;
-    char	*s = "";
-
-    /*
-     * When adding features here, don't forget to update the list of
-     * internal variables in eval.c!
-     */
-    MSG(longVersion);
-#ifdef WIN3264
-# ifdef FEAT_GUI_W32
-#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
-    /* Only MS VC 4.1 and earlier can do Win32s */
-    MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
-#  else
-#   ifdef _WIN64
-    MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
-#   else
-    MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
-#   endif
-#  endif
-    if (gui_is_win32s())
-	MSG_PUTS(_(" in Win32s mode"));
-# ifdef FEAT_OLE
-    MSG_PUTS(_(" with OLE support"));
-# endif
-# else
-#  ifdef _WIN64
-    MSG_PUTS(_("\nMS-Windows 64-bit console version"));
-#  else
-    MSG_PUTS(_("\nMS-Windows 32-bit console version"));
-#  endif
-# endif
-#endif
-#ifdef WIN16
-    MSG_PUTS(_("\nMS-Windows 16-bit version"));
-#endif
-#ifdef MSDOS
-# ifdef DJGPP
-    MSG_PUTS(_("\n32-bit MS-DOS version"));
-# else
-    MSG_PUTS(_("\n16-bit MS-DOS version"));
-# endif
-#endif
-#ifdef MACOS
-# ifdef MACOS_X
-#  ifdef MACOS_X_UNIX
-    MSG_PUTS(_("\nMacOS X (unix) version"));
-#  else
-    MSG_PUTS(_("\nMacOS X version"));
-#  endif
-#else
-    MSG_PUTS(_("\nMacOS version"));
-# endif
-#endif
-
-#ifdef RISCOS
-    MSG_PUTS(_("\nRISC OS version"));
-#endif
-#ifdef VMS
-    MSG_PUTS(_("\nOpenVMS version"));
-# ifdef HAVE_PATHDEF
-    if (*compiled_arch != NUL)
-    {
-	MSG_PUTS(" - ");
-	MSG_PUTS(compiled_arch);
-    }
-# endif
-
-#endif
-
-    /* Print the list of patch numbers if there is at least one. */
-    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
-    if (included_patches[0] != 0)
-    {
-	MSG_PUTS(_("\nIncluded patches: "));
-	first = -1;
-	/* find last one */
-	for (i = 0; included_patches[i] != 0; ++i)
-	    ;
-	while (--i >= 0)
-	{
-	    if (first < 0)
-		first = included_patches[i];
-	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
-	    {
-		MSG_PUTS(s);
-		s = ", ";
-		msg_outnum((long)first);
-		if (first != included_patches[i])
-		{
-		    MSG_PUTS("-");
-		    msg_outnum((long)included_patches[i]);
-		}
-		first = -1;
-	    }
-	}
-    }
-
-    /* Print the list of extra patch descriptions if there is at least one. */
-    if (extra_patches[0] != NULL)
-    {
-	MSG_PUTS(_("\nExtra patches: "));
-	s = "";
-	for (i = 0; extra_patches[i] != NULL; ++i)
-	{
-	    MSG_PUTS(s);
-	    s = ", ";
-	    MSG_PUTS(extra_patches[i]);
-	}
-    }
-
-#ifdef MODIFIED_BY
-    MSG_PUTS("\n");
-    MSG_PUTS(_("Modified by "));
-    MSG_PUTS(MODIFIED_BY);
-#endif
-
-#ifdef HAVE_PATHDEF
-    if (*compiled_user != NUL || *compiled_sys != NUL)
-    {
-	MSG_PUTS(_("\nCompiled "));
-	if (*compiled_user != NUL)
-	{
-	    MSG_PUTS(_("by "));
-	    MSG_PUTS(compiled_user);
-	}
-	if (*compiled_sys != NUL)
-	{
-	    MSG_PUTS("@");
-	    MSG_PUTS(compiled_sys);
-	}
-    }
-#endif
-
-#ifdef FEAT_HUGE
-    MSG_PUTS(_("\nHuge version "));
-#else
-# ifdef FEAT_BIG
-    MSG_PUTS(_("\nBig version "));
-# else
-#  ifdef FEAT_NORMAL
-    MSG_PUTS(_("\nNormal version "));
-#  else
-#   ifdef FEAT_SMALL
-    MSG_PUTS(_("\nSmall version "));
-#   else
-    MSG_PUTS(_("\nTiny version "));
-#   endif
-#  endif
-# endif
-#endif
-#ifndef FEAT_GUI
-    MSG_PUTS(_("without GUI."));
-#else
-# ifdef FEAT_GUI_GTK
-#  ifdef FEAT_GUI_GNOME
-    MSG_PUTS(_("with GTK2-GNOME GUI."));
-#  else
-    MSG_PUTS(_("with GTK2 GUI."));
-#  endif
-# else
-#  ifdef FEAT_GUI_MOTIF
-    MSG_PUTS(_("with X11-Motif GUI."));
-#  else
-#   ifdef FEAT_GUI_ATHENA
-#    ifdef FEAT_GUI_NEXTAW
-    MSG_PUTS(_("with X11-neXtaw GUI."));
-#    else
+    1313,
+/**/
+    1312,
+/**/
+    1311,
+/**/
+    1310,
+/**/
+    1309,
+/**/
+    1308,
+/**/
+    1307,
+/**/
+    1306,
+/**/
+    1305,
+/**/
+    1304,
+/**/
+    1303,
+/**/
+    1302,
+/**/
+    1301,
+/**/
+    1300,
+/**/
+    1299,
+/**/
+    1298,
+/**/
+    1297,
+/**/
+    1296,
+/**/
+    1295,
+/**/
+    1294,
+/**/
+    1293,
+/**/
+    1292,
+/**/
+    1291,
+/**/
+    1290,
+/**/
+    1289,
+/**/
+    1288,
+/**/
+    1287,
+/**/
+    1286,
+/**/
+    1285,
+/**/
+    1284,
+/**/
+    1283,
+/**/
+    1282,
+/**/
+    1281,
+/**/
+    1280,
+/**/
+    1279,
+/**/
+    1278,
+/**/
+    1277,
+/**/
+    1276,
+/**/
+    1275,
+/**/
+    1274,
+/**/
+    1273,
+/**/
+    1272,
+/**/
+    1271,
+/**/
+    1270,
+/**/
+    1269,
+/**/
+    1268,
+/**/
+    1267,
+/**/
+    1266,
+/**/
+    1265,
+/**/
+    1264,
+/**/
+    1263,
+/**/
+    1262,
+/**/
+    1261,
+/**/
+    1260,
+/**/
+    1259,
+/**/
+    1258,
+/**/
+    1257,
+/**/
+    1256,
+/**/
+    1255,
+/**/
+    1254,
+/**/
+    1253,
+/**/
+    1252,
+/**/
+    1251,
+/**/
+    1250,
+/**/
+    1249,
+/**/
+    1248,
+/**/
+    1247,
+/**/
+    1246,
+/**/
+    1245,
+/**/
+    1244,
+/**/
+    1243,
+/**/
+    1242,
+/**/
+    1241,
+/**/
+    1240,
+/**/
+    1239,
+/**/
+    1238,
+/**/
+    1237,
+/**/
+    1236,
+/**/
+    1235,
+/**/
+    1234,
+/**/
+    1233,
+/**/
+    1232,
+/**/
+    1231,
+/**/
+    1230,
+/**/
+    1229,
+/**/
+    1228,
+/**/
+    1227,
+/**/
+    1226,
+/**/
+    1225,
+/**/
+    1224,
+/**/
+    1223,
+/**/
+    1222,
+/**/
+    1221,
+/**/
+    1220,
+/**/
+    1219,
+/**/
+    1218,
+/**/
+    1217,
+/**/
+    1216,
+/**/
+    1215,
+/**/
+    1214,
+/**/
+    1213,
+/**/
+    1212,
+/**/
+    1211,
+/**/
+    1210,
+/**/
+    1209,
+/**/
+    1208,
+/**/
+    1207,
+/**/
+    1206,
+/**/
+    1205,
+/**/
+    1204,
+/**/
+    1203,
+/**/
+    1202,
+/**/
+    1201,
+/**/
+    1200,
+/**/
+    1199,
+/**/
+    1198,
+/**/
+    1197,
+/**/
+    1196,
+/**/
+    1195,
+/**/
+    1194,
+/**/
+    1193,
+/**/
+    1192,
+/**/
+    1191,
+/**/
+    1190,
+/**/
+    1189,
+/**/
+    1188,
+/**/
+    1187,
+/**/
+    1186,
+/**/
+    1185,
+/**/
+    1184,
+/**/
+    1183,
+/**/
+    1182,
+/**/
+    1181,
+/**/
+    1180,
+/**/
+    1179,
+/**/
+    1178,
+/**/
+    1177,
+/**/
+    1176,
+/**/
+    1175,
+/**/
+    1174,
+/**/
+    1173,
+/**/
+    1172,
+/**/
+    1171,
+/**/
+    1170,
+/**/
+    1169,
+/**/
+    1168,
+/**/
+    1167,
+/**/
+    1166,
+/**/
+    1165,
+/**/
+    1164,
+/**/
+    1163,
+/**/
+    1162,
+/**/
+    1161,
+/**/
+    1160,
+/**/
+    1159,
+/**/
+    1158,
+/**/
+    1157,
+/**/
+    1156,
+/**/
+    1155,
+/**/
+    1154,
+/**/
+    1153,
+/**/
+    1152,
+/**/
+    1151,
+/**/
+    1150,
+/**/
+    1149,
+/**/
+    1148,
+/**/
+    1147,
+/**/
+    1146,
+/**/
+    1145,
+/**/
+    1144,
+/**/
+    1143,
+/**/
+    1142,
+/**/
+    1141,
+/**/
+    1140,
+/**/
+    1139,
+/**/
+    1138,
+/**/
+    1137,
+/**/
+    1136,
+/**/
+    1135,
+/**/
+    1134,
+/**/
+    1133,
+/**/
+    1132,
+/**/
+    1131,
+/**/
+    1130,
+/**/
+    1129,
+/**/
+    1128,
+/**/
+    1127,
+/**/
+    1126,
+/**/
+    1125,
+/**/
+    1124,
+/**/
+    1123,
+/**/
+    1122,
+/**/
+    1121,
+/**/
+    1120,
+/**/
+    1119,
+/**/
+    1118,
+/**/
+    1117,
+/**/
+    1116,
+/**/
+    1115,
+/**/
+    1114,
+/**/
+    1113,
+/**/
+    1112,
+/**/
+    1111,
+/**/
+    1110,
+/**/
+    1109,
+/**/
+    1108,
+/**/
+    1107,
+/**/
+    1106,
+/**/
+    1105,
+/**/
+    1104,
+/**/
+    1103,
+/**/
+    1102,
+/**/
+    1101,
+/**/
+    1100,
+/**/
+    1099,
+/**/
+    1098,
+/**/
+    1097,
+/**/
+    1096,
+/**/
+    1095,
+/**/
+    1094,
+/**/
+    1093,
+/**/
+    1092,
+/**/
+    1091,
+/**/
+    1090,
+/**/
+    1089,
+/**/
+    1088,
+/**/
+    1087,
+/**/
+    1086,
+/**/
+    1085,
+/**/
+    1084,
+/**/
+    1083,
+/**/
+    1082,
+/**/
+    1081,
+/**/
+    1080,
+/**/
+    1079,
+/**/
+    1078,
+/**/
+    1077,
+/**/
+    1076,
+/**/
+    1075,
+/**/
+    1074,
+/**/
+    1073,
+/**/
+    1072,
+/**/
+    1071,
+/**/
+    1070,
+/**/
+    1069,
+/**/
+    1068,
+/**/
+    1067,
+/**/
+    1066,
+/**/
+    1065,
+/**/
+    1064,
+/**/
+    1063,
+/**/
+    1062,
+/**/
+    1061,
+/**/
+    1060,
+/**/
+    1059,
+/**/
+    1058,
+/**/
+    1057,
+/**/
+    1056,
+/**/
+    1055,
+/**/
+    1054,
+/**/
+    1053,
+/**/
+    1052,
+/**/
+    1051,
+/**/
+    1050,
+/**/
+    1049,
+/**/
+    1048,
+/**/
+    1047,
+/**/
+    1046,
+/**/
+    1045,
+/**/
+    1044,
+/**/
+    1043,
+/**/
+    1042,
+/**/
+    1041,
+/**/
+    1040,
+/**/
+    1039,
+/**/
+    1038,
+/**/
+    1037,
+/**/
+    1036,
+/**/
+    1035,
+/**/
+    1034,
+/**/
+    1033,
+/**/
+    1032,
+/**/
+    1031,
+/**/
+    1030,
+/**/
+    1029,
+/**/
+    1028,
+/**/
+    1027,
+/**/
+    1026,
+/**/
+    1025,
+/**/
+    1024,
+/**/
+    1023,
+/**/
+    1022,
+/**/
+    1021,
+/**/
+    1020,
+/**/
+    1019,
+/**/
+    1018,
+/**/
+    1017,
+/**/
+    1016,
+/**/
+    1015,
+/**/
+    1014,
+/**/
+    1013,
+/**/
+    1012,
+/**/
+    1011,
+/**/
+    1010,
+/**/
+    1009,
+/**/
+    1008,
+/**/
+    1007,
+/**/
+    1006,
+/**/
+    1005,
+/**/
+    1004,
+/**/
+    1003,
+/**/
+    1002,
+/**/
+    1001,
+/**/
+    1000,
+/**/
+    999,
+/**/
+    998,
+/**/
+    997,
+/**/
+    996,
+/**/
+    995,
+/**/
+    994,
+/**/
+    993,
+/**/
+    992,
+/**/
+    991,
+/**/
+    990,
+/**/
+    989,
+/**/
+    988,
+/**/
+    987,
+/**/
+    986,
+/**/
+    985,
+/**/
+    984,
+/**/
+    983,
+/**/
+    982,
+/**/
+    981,
+/**/
+    980,
+/**/
+    979,
+/**/
+    978,
+/**/
+    977,
+/**/
+    976,
+/**/
+    975,
+/**/
+    974,
+/**/
+    973,
+/**/
+    972,
+/**/
+    971,
+/**/
+    970,
+/**/
+    969,
+/**/
+    968,
+/**/
+    967,
+/**/
+    966,
+/**/
+    965,
+/**/
+    964,
+/**/
+    963,
+/**/
+    962,
+/**/
+    961,
+/**/
+    960,
+/**/
+    959,
+/**/
+    958,
+/**/
+    957,
+/**/
+    956,
+/**/
+    955,
+/**/
+    954,
+/**/
+    953,
+/**/
+    952,
+/**/
+    951,
+/**/
+    950,
+/**/
+    949,
+/**/
+    948,
+/**/
+    947,
+/**/
+    946,
+/**/
+    945,
+/**/
+    944,
+/**/
+    943,
+/**/
+    942,
+/**/
+    941,
+/**/
+    940,
+/**/
+    939,
+/**/
+    938,
+/**/
+    937,
+/**/
+    936,
+/**/
+    935,
+/**/
+    934,
+/**/
+    933,
+/**/
+    932,
+/**/
+    931,
+/**/
+    930,
+/**/
+    929,
+/**/
+    928,
+/**/
+    927,
+/**/
+    926,
+/**/
+    925,
+/**/
+    924,
+/**/
+    923,
+/**/
+    922,
+/**/
+    921,
+/**/
+    920,
+/**/
+    919,
+/**/
+    918,
+/**/
+    917,
+/**/
+    916,
+/**/
+    915,
+/**/
+    914,
+/**/
+    913,
+/**/
+    912,
+/**/
+    911,
+/**/
+    910,
+/**/
+    909,
+/**/
+    908,
+/**/
+    907,
+/**/
+    906,
+/**/
+    905,
+/**/
+    904,
+/**/
+    903,
+/**/
+    902,
+/**/
+    901,
+/**/
+    900,
+/**/
+    899,
+/**/
+    898,
+/**/
+    897,
+/**/
+    896,
+/**/
+    895,
+/**/
+    894,
+/**/
+    893,
+/**/
+    892,
+/**/
+    891,
+/**/
+    890,
+/**/
+    889,
+/**/
+    888,
+/**/
+    887,
+/**/
+    886,
+/**/
+    885,
+/**/
+    884,
+/**/
+    883,
+/**/
+    882,
+/**/
+    881,
+/**/
+    880,
+/**/
+    879,
+/**/
+    878,
+/**/
+    877,
+/**/
+    876,
+/**/
+    875,
+/**/
+    874,
+/**/
+    873,
+/**/
+    872,
+/**/
+    871,
+/**/
+    870,
+/**/
+    869,
+/**/
+    868,
+/**/
+    867,
+/**/
+    866,
+/**/
+    865,
+/**/
+    864,
+/**/
+    863,
+/**/
+    862,
+/**/
+    861,
+/**/
+    860,
+/**/
+    859,
+/**/
+    858,
+/**/
+    857,
+/**/
+    856,
+/**/
+    855,
+/**/
+    854,
+/**/
+    853,
+/**/
+    852,
+/**/
+    851,
+/**/
+    850,
+/**/
+    849,
+/**/
+    848,
+/**/
+    847,
+/**/
+    846,
+/**/
+    845,
+/**/
+    844,
+/**/
+    843,
+/**/
+    842,
+/**/
+    841,
+/**/
+    840,
+/**/
+    839,
+/**/
+    838,
+/**/
+    837,
+/**/
+    836,
+/**/
+    835,
+/**/
+    834,
+/**/
+    833,
+/**/
+    832,
+/**/
+    831,
+/**/
+    830,
+/**/
+    829,
+/**/
+    828,
+/**/
+    827,
+/**/
+    826,
+/**/
+    825,
+/**/
+    824,
+/**/
+    823,
+/**/
+    822,
+/**/
+    821,
+/**/
+    820,
+/**/
+    819,
+/**/
+    818,
+/**/
+    817,
+/**/
+    816,
+/**/
+    815,
+/**/
+    814,
+/**/
+    813,
+/**/
+    812,
+/**/
+    811,
+/**/
+    810,
+/**/
+    809,
+/**/
+    808,
+/**/
+    807,
+/**/
+    806,
+/**/
+    805,
+/**/
+    804,
+/**/
+    803,
+/**/
+    802,
+/**/
+    801,
+/**/
+    800,
+/**/
+    799,
+/**/
+    798,
+/**/
+    797,
+/**/
+    796,
+/**/
+    795,
+/**/
+    794,
+/**/
+    793,
+/**/
+    792,
+/**/
+    791,
+/**/
+    790,
+/**/
+    789,
+/**/
+    788,
+/**/
+    787,
+/**/
+    786,
+/**/
+    785,
+/**/
+    784,
+/**/
+    783,
+/**/
+    782,
+/**/
+    781,
+/**/
+    780,
+/**/
+    779,
+/**/
+    778,
+/**/
+    777,
+/**/
+    776,
+/**/
+    775,
+/**/
+    774,
+/**/
+    773,
+/**/
+    772,
+/**/
+    771,
+/**/
+    770,
+/**/
+    769,
+/**/
+    768,
+/**/
+    767,
+/**/
+    766,
+/**/
+    765,
+/**/
+    764,
+/**/
+    763,
+/**/
+    762,
+/**/
+    761,
+/**/
+    760,
+/**/
+    759,
+/**/
+    758,
+/**/
+    757,
+/**/
+    756,
+/**/
+    755,
+/**/
+    754,
+/**/
+    753,
+/**/
+    752,
+/**/
+    751,
+/**/
+    750,
+/**/
+    749,
+/**/
+    748,
+/**/
+    747,
+/**/
+    746,
+/**/
+    745,
+/**/
+    744,
+/**/
+    743,
+/**/
+    742,
+/**/
+    741,
+/**/
+    740,
+/**/
+    739,
+/**/
+    738,
+/**/
+    737,
+/**/
+    736,
+/**/
+    735,
+/**/
+    734,
+/**/
+    733,
+/**/
+    732,
+/**/
+    731,
+/**/
+    730,
+/**/
+    729,
+/**/
+    728,
+/**/
+    727,
+/**/
+    726,
+/**/
+    725,
+/**/
+    724,
+/**/
+    723,
+/**/
+    722,
+/**/
+    721,
+/**/
+    720,
+/**/
+    719,
+/**/
+    718,
+/**/
+    717,
+/**/
+    716,
+/**/
+    715,
+/**/
+    714,
+/**/
+    713,
+/**/
+    712,
+/**/
+    711,
+/**/
+    710,
+/**/
+    709,
+/**/
+    708,
+/**/
+    707,
+/**/
+    706,
+/**/
+    705,
+/**/
+    704,
+/**/
+    703,
+/**/
+    702,
+/**/
+    701,
+/**/
+    700,
+/**/
+    699,
+/**/
+    698,
+/**/
+    697,
+/**/
+    696,
+/**/
+    695,
+/**/
+    694,
+/**/
+    693,
+/**/
+    692,
+/**/
+    691,
+/**/
+    690,
+/**/
+    689,
+/**/
+    688,
+/**/
+    687,
+/**/
+    686,
+/**/
+    685,
+/**/
+    684,
+/**/
+    683,
+/**/
+    682,
+/**/
+    681,
+/**/
+    680,
+/**/
+    679,
+/**/
+    678,
+/**/
+    677,
+/**/
+    676,
+/**/
+    675,
+/**/
+    674,
+/**/
+    673,
+/**/
+    672,
+/**/
+    671,
+/**/
+    670,
+/**/
+    669,
+/**/
+    668,
+/**/
+    667,
+/**/
+    666,
+/**/
+    665,
+/**/
+    664,
+/**/
+    663,
+/**/
+    662,
+/**/
+    661,
+/**/
+    660,
+/**/
+    659,
+/**/
+    658,
+/**/
+    657,
+/**/
+    656,
+/**/
+    655,
+/**/
+    654,
+/**/
+    653,
+/**/
+    652,
+/**/
+    651,
+/**/
+    650,
+/**/
+    649,
+/**/
+    648,
+/**/
+    647,
+/**/
+    646,
+/**/
+    645,
+/**/
+    644,
+/**/
+    643,
+/**/
+    642,
+/**/
+    641,
+/**/
+    640,
+/**/
+    639,
+/**/
+    638,
+/**/
+    637,
+/**/
+    636,
+/**/
+    635,
+/**/
+    634,
+/**/
+    633,
+/**/
+    632,
+/**/
+    631,
+/**/
+    630,
+/**/
+    629,
+/**/
+    628,
+/**/
+    627,
+/**/
+    626,
+/**/
+    625,
+/**/
+    624,
+/**/
+    623,
+/**/
+    622,
+/**/
+    621,
+/**/
+    620,
+/**/
+    619,
+/**/
+    618,
+/**/
+    617,
+/**/
+    616,
+/**/
+    615,
+/**/
+    614,
+/**/
+    613,
+/**/
+    612,
+/**/
+    611,
+/**/
+    610,
+/**/
+    609,
+/**/
+    608,
+/**/
+    607,
+/**/
+    606,
+/**/
+    605,
+/**/
+    604,
+/**/
+    603,
+/**/
+    602,
+/**/
+    601,
+/**/
+    600,
+/**/
+    599,
+/**/
+    598,
+/**/
+    597,
+/**/
+    596,
+/**/
+    595,
+/**/
+    594,
+/**/
+    593,
+/**/
+    592,
+/**/
+    591,
+/**/
+    590,
+/**/
+    589,
+/**/
+    588,
+/**/
+    587,
+/**/
+    586,
+/**/
+    585,
+/**/
+    584,
+/**/
+    583,
+/**/
+    582,
+/**/
+    581,
+/**/
+    580,
+/**/
+    579,
+/**/
+    578,
+/**/
+    577,
+/**/
+    576,
+/**/
+    575,
+/**/
+    574,
+/**/
+    573,
+/**/
+    572,
+/**/
+    571,
+/**/
+    570,
+/**/
+    569,
+/**/
+    568,
+/**/
+    567,
+/**/
+    566,
+/**/
+    565,
+/**/
+    564,
+/**/
+    563,
+/**/
+    562,
+/**/
+    561,
+/**/
+    560,
+/**/
+    559,
+/**/
+    558,
+/**/
+    557,
+/**/
+    556,
+/**/
+    555,
+/**/
+    554,
+/**/
+    553,
+/**/
+    552,
+/**/
+    551,
+/**/
+    550,
+/**/
+    549,
+/**/
+    548,
+/**/
+    547,
+/**/
+    546,
+/**/
+    545,
+/**/
+    544,
+/**/
+    543,
+/**/
+    542,
+/**/
+    541,
+/**/
+    540,
+/**/
+    539,
+/**/
+    538,
+/**/
+    537,
+/**/
+    536,
+/**/
+    535,
+/**/
+    534,
+/**/
+    533,
+/**/
+    532,
+/**/
+    531,
+/**/
+    530,
+/**/
+    529,
+/**/
+    528,
+/**/
+    527,
+/**/
+    526,
+/**/
+    525,
+/**/
+    524,
+/**/
+    523,
+/**/
+    522,
+/**/
+    521,
+/**/
+    520,
+/**/
+    519,
+/**/
+    518,
+/**/
+    517,
+/**/
+    516,
+/**/
+    515,
+/**/
+    514,
+/**/
+    513,
+/**/
+    512,
+/**/
+    511,
+/**/
+    510,
+/**/
+    509,
+/**/
+    508,
+/**/
+    507,
+/**/
+    506,
+/**/
+    505,
+/**/
+    504,
+/**/
+    503,
+/**/
+    502,
+/**/
+    501,
+/**/
+    500,
+/**/
+    499,
+/**/
+    498,
+/**/
+    497,
+/**/
+    496,
+/**/
+    495,
+/**/
+    494,
+/**/
+    493,
+/**/
+    492,
+/**/
+    491,
+/**/
+    490,
+/**/
+    489,
+/**/
+    488,
+/**/
+    487,
+/**/
+    486,
+/**/
+    485,
+/**/
+    484,
+/**/
+    483,
+/**/
+    482,
+/**/
+    481,
+/**/
+    480,
+/**/
+    479,
+/**/
+    478,
+/**/
+    477,
+/**/
+    476,
+/**/
+    475,
+/**/
+    474,
+/**/
+    473,
+/**/
+    472,
+/**/
+    471,
+/**/
+    470,
+/**/
+    469,
+/**/
+    468,
+/**/
+    467,
+/**/
+    466,
+/**/
+    465,
+/**/
+    464,
+/**/
+    463,
+/**/
+    462,
+/**/
+    461,
+/**/
+    460,
+/**/
+    459,
+/**/
+    458,
+/**/
+    457,
+/**/
+    456,
+/**/
+    455,
+/**/
+    454,
+/**/
+    453,
+/**/
+    452,
+/**/
+    451,
+/**/
+    450,
+/**/
+    449,
+/**/
+    448,
+/**/
+    447,
+/**/
+    446,
+/**/
+    445,
+/**/
+    444,
+/**/
+    443,
+/**/
+    442,
+/**/
+    441,
+/**/
+    440,
+/**/
+    439,
+/**/
+    438,
+/**/
+    437,
+/**/
+    436,
+/**/
+    435,
+/**/
+    434,
+/**/
+    433,
+/**/
+    432,
+/**/
+    431,
+/**/
+    430,
+/**/
+    429,
+/**/
+    428,
+/**/
+    427,
+/**/
+    426,
+/**/
+    425,
+/**/
+    424,
+/**/
+    423,
+/**/
+    422,
+/**/
+    421,
+/**/
+    420,
+/**/
+    419,
+/**/
+    418,
+/**/
+    417,
+/**/
+    416,
+/**/
+    415,
+/**/
+    414,
+/**/
+    413,
+/**/
+    412,
+/**/
+    411,
+/**/
+    410,
+/**/
+    409,
+/**/
+    408,
+/**/
+    407,
+/**/
+    406,
+/**/
+    405,
+/**/
+    404,
+/**/
+    403,
+/**/
+    402,
+/**/
+    401,
+/**/
+    400,
+/**/
+    399,
+/**/
+    398,
+/**/
+    397,
+/**/
+    396,
+/**/
+    395,
+/**/
+    394,
+/**/
+    393,
+/**/
+    392,
+/**/
+    391,
+/**/
+    390,
+/**/
+    389,
+/**/
+    388,
+/**/
+    387,
+/**/
+    386,
+/**/
+    385,
+/**/
+    384,
+/**/
+    383,
+/**/
+    382,
+/**/
+    381,
+/**/
+    380,
+/**/
+    379,
+/**/
+    378,
+/**/
+    377,
+/**/
+    376,
+/**/
+    375,
+/**/
+    374,
+/**/
+    373,
+/**/
+    372,
+/**/
+    371,
+/**/
+    370,
+/**/
+    369,
+/**/
+    368,
+/**/
+    367,
+/**/
+    366,
+/**/
+    365,
+/**/
+    364,
+/**/
+    363,
+/**/
+    362,
+/**/
+    361,
+/**/
+    360,
+/**/
+    359,
+/**/
+    358,
+/**/
+    357,
+/**/
+    356,
+/**/
+    355,
+/**/
+    354,
+/**/
+    353,
+/**/
+    352,
+/**/
+    351,
+/**/
+    350,
+/**/
+    349,
+/**/
+    348,
+/**/
+    347,
+/**/
+    346,
+/**/
+    345,
+/**/
+    344,
+/**/
+    343,
+/**/
+    342,
+/**/
+    341,
+/**/
+    340,
+/**/
+    339,
+/**/
+    338,
+/**/
+    337,
+/**/
+    336,
+/**/
+    335,
+/**/
+    334,
+/**/
+    333,
+/**/
+    332,
+/**/
+    331,
+/**/
+    330,
+/**/
+    329,
+/**/
+    328,
+/**/
+    327,
+/**/
+    326,
+/**/
+    325,
+/**/
+    324,
+/**/
+    323,
+/**/
+    322,
+/**/
+    321,
+/**/
+    320,
+/**/
+    319,
+/**/
+    318,
+/**/
+    317,
+/**/
+    316,
+/**/
+    315,
+/**/
+    314,
+/**/
+    313,
+/**/
+    312,
+/**/
+    311,
+/**/
+    310,
+/**/
+    309,
+/**/
+    308,
+/**/
+    307,
+/**/
+    306,
+/**/
+    305,
+/**/
+    304,
+/**/
+    303,
+/**/
+    302,
+/**/
+    301,
+/**/
+    300,
+/**/
+    299,
+/**/
+    298,
+/**/
+    297,
+/**/
+    296,
+/**/
+    295,
+/**/
+    294,
+/**/
+    293,
+/**/
+    292,
+/**/
+    291,
+/**/
+    290,
+/**/
+    289,
+/**/
+    288,
+/**/
+    287,
+/**/
+    286,
+/**/
+    285,
+/**/
+    284,
+/**/
+    283,
+/**/
+    282,
+/**/
+    281,
+/**/
+    280,
+/**/
+    279,
+/**/
+    278,
+/**/
+    277,
+/**/
+    276,
+/**/
+    275,
+/**/
+    274,
+/**/
+    273,
+/**/
+    272,
+/**/
+    271,
+/**/
+    270,
+/**/
+    269,
+/**/
+    268,
+/**/
+    267,
+/**/
+    266,
+/**/
+    265,
+/**/
+    264,
+/**/
+    263,
+/**/
+    262,
+/**/
+    261,
+/**/
+    260,
+/**/
+    259,
+/**/
+    258,
+/**/
+    257,
+/**/
+    256,
+/**/
+    255,
+/**/
+    254,
+/**/
+    253,
+/**/
+    252,
+/**/
+    251,
+/**/
+    250,
+/**/
+    249,
+/**/
+    248,
+/**/
+    247,
+/**/
+    246,
+/**/
+    245,
+/**/
+    244,
+/**/
+    243,
+/**/
+    242,
+/**/
+    241,
+/**/
+    240,
+/**/
+    239,
+/**/
+    238,
+/**/
+    237,
+/**/
+    236,
+/**/
+    235,
+/**/
+    234,
+/**/
+    233,
+/**/
+    232,
+/**/
+    231,
+/**/
+    230,
+/**/
+    229,
+/**/
+    228,
+/**/
+    227,
+/**/
+    226,
+/**/
+    225,
+/**/
+    224,
+/**/
+    223,
+/**/
+    222,
+/**/
+    221,
+/**/
+    220,
+/**/
+    219,
+/**/
+    218,
+/**/
+    217,
+/**/
+    216,
+/**/
+    215,
+/**/
+    214,
+/**/
+    213,
+/**/
+    212,
+/**/
+    211,
+/**/
+    210,
+/**/
+    209,
+/**/
+    208,
+/**/
+    207,
+/**/
+    206,
+/**/
+    205,
+/**/
+    204,
+/**/
+    203,
+/**/
+    202,
+/**/
+    201,
+/**/
+    200,
+/**/
+    199,
+/**/
+    198,
+/**/
+    197,
+/**/
+    196,
+/**/
+    195,
+/**/
+    194,
+/**/
+    193,
+/**/
+    192,
+/**/
+    191,
+/**/
+    190,
+/**/
+    189,
+/**/
+    188,
+/**/
+    187,
+/**/
+    186,
+/**/
+    185,
+/**/
+    184,
+/**/
+    183,
+/**/
+    182,
+/**/
+    181,
+/**/
+    180,
+/**/
+    179,
+/**/
+    178,
+/**/
+    177,
+/**/
+    176,
+/**/
+    175,
+/**/
+    174,
+/**/
+    173,
+/**/
+    172,
+/**/
+    171,
+/**/
+    170,
+/**/
+    169,
+/**/
+    168,
+/**/
+    167,
+/**/
+    166,
+/**/
+    165,
+/**/
+    164,
+/**/
+    163,
+/**/
+    162,
+/**/
+    161,
+/**/
+    160,
+/**/
+    159,
+/**/
+    158,
+/**/
+    157,
+/**/
+    156,
+/**/
+    155,
+/**/
+    154,
+/**/
+    153,
+/**/
+    152,
+/**/
+    151,
+/**/
+    150,
+/**/
+    149,
+/**/
+    148,
+/**/
+    147,
+/**/
+    146,
+/**/
+    145,
+/**/
+    144,
+/**/
+    143,
+/**/
+    142,
+/**/
+    141,
+/**/
+    140,
+/**/
+    139,
+/**/
+    138,
+/**/
+    137,
+/**/
+    136,
+/**/
+    135,
+/**/
+    134,
+/**/
+    133,
+/**/
+    132,
+/**/
+    131,
+/**/
+    130,
+/**/
+    129,
+/**/
+    128,
+/**/
+    127,
+/**/
+    126,
+/**/
+    125,
+/**/
+    124,
+/**/
+    123,
+/**/
+    122,
+/**/
+    121,
+/**/
+    120,
+/**/
+    119,
+/**/
+    118,
+/**/
+    117,
+/**/
+    116,
+/**/
+    115,
+/**/
+    114,
+/**/
+    113,
+/**/
+    112,
+/**/
+    111,
+/**/
+    110,
+/**/
+    109,
+/**/
+    108,
+/**/
+    107,
+/**/
+    106,
+/**/
+    105,
+/**/
+    104,
+/**/
+    103,
+/**/
+    102,
+/**/
+    101,
+/**/
+    100,
+/**/
+    99,
+/**/
+    98,
+/**/
+    97,
+/**/
+    96,
+/**/
+    95,
+/**/
+    94,
+/**/
+    93,
+/**/
+    92,
+/**/
+    91,
+/**/
+    90,
+/**/
+    89,
+/**/
+    88,
+/**/
+    87,
+/**/
+    86,
+/**/
+    85,
+/**/
+    84,
+/**/
+    83,
+/**/
+    82,
+/**/
+    81,
+/**/
+    80,
+/**/
+    79,
+/**/
+    78,
+/**/
+    77,
+/**/
+    76,
+/**/
+    75,
+/**/
+    74,
+/**/
+    73,
+/**/
+    72,
+/**/
+    71,
+/**/
+    70,
+/**/
+    69,
+/**/
+    68,
+/**/
+    67,
+/**/
+    66,
+/**/
+    65,
+/**/
+    64,
+/**/
+    63,
+/**/
+    62,
+/**/
+    61,
+/**/
+    60,
+/**/
+    59,
+/**/
+    58,
+/**/
+    57,
+/**/
+    56,
+/**/
+    55,
+/**/
+    54,
+/**/
+    53,
+/**/
+    52,
+/**/
+    51,
+/**/
+    50,
+/**/
+    49,
+/**/
+    48,
+/**/
+    47,
+/**/
+    46,
+/**/
+    45,
+/**/
+    44,
+/**/
+    43,
+/**/
+    42,
+/**/
+    41,
+/**/
+    40,
+/**/
+    39,
+/**/
+    38,
+/**/
+    37,
+/**/
+    36,
+/**/
+    35,
+/**/
+    34,
+/**/
+    33,
+/**/
+    32,
+/**/
+    31,
+/**/
+    30,
+/**/
+    29,
+/**/
+    28,
+/**/
+    27,
+/**/
+    26,
+/**/
+    25,
+/**/
+    24,
+/**/
+    23,
+/**/
+    22,
+/**/
+    21,
+/**/
+    20,
+/**/
+    19,
+/**/
+    18,
+/**/
+    17,
+/**/
+    16,
+/**/
+    15,
+/**/
+    14,
+/**/
+    13,
+/**/
+    12,
+/**/
+    11,
+/**/
+    10,
+/**/
+    9,
+/**/
+    8,
+/**/
+    7,
+/**/
+    6,
+/**/
+    5,
+/**/
+    4,
+/**/
+    3,
+/**/
+    2,
+/**/
+    1,
+/**/
+    0
+};
+
+/*
+ * Place to put a short description when adding a feature with a patch.
+ * Keep it short, e.g.,: "relative numbers", "persistent undo".
+ * Also add a comment marker to separate the lines.
+ * See the official Vim patches for the diff format: It must use a context of
+ * one line only.  Create it by hand or use "diff -C2" and edit the patch.
+ */
+static char *(extra_patches[]) =
+{   /* Add your patch description below this line */
+/**/
+    NULL
+};
+
+    int
+highest_patch()
+{
+    int		i;
+    int		h = 0;
+
+    for (i = 0; included_patches[i] != 0; ++i)
+	if (included_patches[i] > h)
+	    h = included_patches[i];
+    return h;
+}
+
+#if defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * Return TRUE if patch "n" has been included.
+ */
+    int
+has_patch(n)
+    int		n;
+{
+    int		i;
+
+    for (i = 0; included_patches[i] != 0; ++i)
+	if (included_patches[i] == n)
+	    return TRUE;
+    return FALSE;
+}
+#endif
+
+    void
+ex_version(eap)
+    exarg_T	*eap;
+{
+    /*
+     * Ignore a ":version 9.99" command.
+     */
+    if (*eap->arg == NUL)
+    {
+	msg_putchar('\n');
+	list_version();
+    }
+}
+
+/*
+ * List all features aligned in columns, dictionary style.
+ */
+    static void
+list_features()
+{
+    int		i;
+    int		ncol;
+    int		nrow;
+    int		nfeat = 0;
+    int		width = 0;
+
+    /* Find the length of the longest feature name, use that + 1 as the column
+     * width */
+    for (i = 0; features[i] != NULL; ++i)
+    {
+	int l = (int)STRLEN(features[i]);
+
+	if (l > width)
+	    width = l;
+	++nfeat;
+    }
+    width += 1;
+
+    if (Columns < width)
+    {
+	/* Not enough screen columns - show one per line */
+	for (i = 0; features[i] != NULL; ++i)
+	{
+	    version_msg(features[i]);
+	    if (msg_col > 0)
+		msg_putchar('\n');
+	}
+	return;
+    }
+
+    /* The rightmost column doesn't need a separator.
+     * Sacrifice it to fit in one more column if possible. */
+    ncol = (int) (Columns + 1) / width;
+    nrow = nfeat / ncol + (nfeat % ncol ? 1 : 0);
+
+    /* i counts columns then rows.  idx counts rows then columns. */
+    for (i = 0; !got_int && i < nrow * ncol; ++i)
+    {
+	int idx = (i / ncol) + (i % ncol) * nrow;
+
+	if (idx < nfeat)
+	{
+	    int last_col = (i + 1) % ncol == 0;
+
+	    msg_puts((char_u *)features[idx]);
+	    if (last_col)
+	    {
+		if (msg_col > 0)
+		    msg_putchar('\n');
+	    }
+	    else
+	    {
+		while (msg_col % width)
+		    msg_putchar(' ');
+	    }
+	}
+	else
+	{
+	    if (msg_col > 0)
+		msg_putchar('\n');
+	}
+    }
+}
+
+    void
+list_version()
+{
+    int		i;
+    int		first;
+    char	*s = "";
+
+    /*
+     * When adding features here, don't forget to update the list of
+     * internal variables in eval.c!
+     */
+    MSG(longVersion);
+#ifdef WIN3264
+# ifdef FEAT_GUI_W32
+#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
+    /* Only MS VC 4.1 and earlier can do Win32s */
+    MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
+#  else
+#   ifdef _WIN64
+    MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
+#   else
+    MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
+#   endif
+#  endif
+    if (gui_is_win32s())
+	MSG_PUTS(_(" in Win32s mode"));
+# ifdef FEAT_OLE
+    MSG_PUTS(_(" with OLE support"));
+# endif
+# else
+#  ifdef _WIN64
+    MSG_PUTS(_("\nMS-Windows 64-bit console version"));
+#  else
+    MSG_PUTS(_("\nMS-Windows 32-bit console version"));
+#  endif
+# endif
+#endif
+#ifdef WIN16
+    MSG_PUTS(_("\nMS-Windows 16-bit version"));
+#endif
+#ifdef MSDOS
+# ifdef DJGPP
+    MSG_PUTS(_("\n32-bit MS-DOS version"));
+# else
+    MSG_PUTS(_("\n16-bit MS-DOS version"));
+# endif
+#endif
+#ifdef MACOS
+# ifdef MACOS_X
+#  ifdef MACOS_X_UNIX
+    MSG_PUTS(_("\nMacOS X (unix) version"));
+#  else
+    MSG_PUTS(_("\nMacOS X version"));
+#  endif
+#else
+    MSG_PUTS(_("\nMacOS version"));
+# endif
+#endif
+
+#ifdef VMS
+    MSG_PUTS(_("\nOpenVMS version"));
+# ifdef HAVE_PATHDEF
+    if (*compiled_arch != NUL)
+    {
+	MSG_PUTS(" - ");
+	MSG_PUTS(compiled_arch);
+    }
+# endif
+
+#endif
+
+    /* Print the list of patch numbers if there is at least one. */
+    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
+    if (included_patches[0] != 0)
+    {
+	MSG_PUTS(_("\nIncluded patches: "));
+	first = -1;
+	/* find last one */
+	for (i = 0; included_patches[i] != 0; ++i)
+	    ;
+	while (--i >= 0)
+	{
+	    if (first < 0)
+		first = included_patches[i];
+	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
+	    {
+		MSG_PUTS(s);
+		s = ", ";
+		msg_outnum((long)first);
+		if (first != included_patches[i])
+		{
+		    MSG_PUTS("-");
+		    msg_outnum((long)included_patches[i]);
+		}
+		first = -1;
+	    }
+	}
+    }
+
+    /* Print the list of extra patch descriptions if there is at least one. */
+    if (extra_patches[0] != NULL)
+    {
+	MSG_PUTS(_("\nExtra patches: "));
+	s = "";
+	for (i = 0; extra_patches[i] != NULL; ++i)
+	{
+	    MSG_PUTS(s);
+	    s = ", ";
+	    MSG_PUTS(extra_patches[i]);
+	}
+    }
+
+#ifdef MODIFIED_BY
+    MSG_PUTS("\n");
+    MSG_PUTS(_("Modified by "));
+    MSG_PUTS(MODIFIED_BY);
+#endif
+
+#ifdef HAVE_PATHDEF
+    if (*compiled_user != NUL || *compiled_sys != NUL)
+    {
+	MSG_PUTS(_("\nCompiled "));
+	if (*compiled_user != NUL)
+	{
+	    MSG_PUTS(_("by "));
+	    MSG_PUTS(compiled_user);
+	}
+	if (*compiled_sys != NUL)
+	{
+	    MSG_PUTS("@");
+	    MSG_PUTS(compiled_sys);
+	}
+    }
+#endif
+
+#ifdef FEAT_HUGE
+    MSG_PUTS(_("\nHuge version "));
+#else
+# ifdef FEAT_BIG
+    MSG_PUTS(_("\nBig version "));
+# else
+#  ifdef FEAT_NORMAL
+    MSG_PUTS(_("\nNormal version "));
+#  else
+#   ifdef FEAT_SMALL
+    MSG_PUTS(_("\nSmall version "));
+#   else
+    MSG_PUTS(_("\nTiny version "));
+#   endif
+#  endif
+# endif
+#endif
+#ifndef FEAT_GUI
+    MSG_PUTS(_("without GUI."));
+#else
+# ifdef FEAT_GUI_GTK
+#  ifdef FEAT_GUI_GNOME
+    MSG_PUTS(_("with GTK2-GNOME GUI."));
+#  else
+    MSG_PUTS(_("with GTK2 GUI."));
+#  endif
+# else
+#  ifdef FEAT_GUI_MOTIF
+    MSG_PUTS(_("with X11-Motif GUI."));
+#  else
+#   ifdef FEAT_GUI_ATHENA
+#    ifdef FEAT_GUI_NEXTAW
+    MSG_PUTS(_("with X11-neXtaw GUI."));
+#    else
     MSG_PUTS(_("with X11-Athena GUI."));
 #    endif
 #   else
@@ -974,15 +3683,8 @@
 #endif
     version_msg(_("  Features included (+) or not (-):\n"));
 
-    /* print all the features */
-    for (i = 0; features[i] != NULL; ++i)
-    {
-	version_msg(features[i]);
-	if (msg_col > 0)
-	    version_msg(" ");
-    }
+    list_features();
 
-    version_msg("\n");
 #ifdef SYS_VIMRC_FILE
     version_msg(_("   system vimrc file: \""));
     version_msg(SYS_VIMRC_FILE);
@@ -1093,6 +3795,21 @@
 static void do_intro_line __ARGS((int row, char_u *mesg, int add_version, int attr));
 
 /*
+ * Show the intro message when not editing a file.
+ */
+    void
+maybe_intro_message()
+{
+    if (bufempty()
+	    && curbuf->b_fname == NULL
+#ifdef FEAT_WINDOWS
+	    && firstwin->w_next == NULL
+#endif
+	    && vim_strchr(p_shm, SHM_INTRO) == NULL)
+	intro_message(FALSE);
+}
+
+/*
  * Give an introductory message about Vim.
  * Only used when starting Vim on an empty file, without a file name.
  * Or with the ":intro" command (for Sven :-).
@@ -1262,14 +3979,11 @@
 	if (highest_patch())
 	{
 	    /* Check for 9.9x or 9.9xx, alpha/beta version */
-	    if (isalpha((int)mediumVersion[3]))
+	    if (isalpha((int)vers[3]))
 	    {
-		if (isalpha((int)mediumVersion[4]))
-		    sprintf((char *)vers + 5, ".%d%s", highest_patch(),
-							   mediumVersion + 5);
-		else
-		    sprintf((char *)vers + 4, ".%d%s", highest_patch(),
-							   mediumVersion + 4);
+		int len = (isalpha((int)vers[4])) ? 5 : 4;
+		sprintf((char *)vers + len, ".%d%s", highest_patch(),
+							 mediumVersion + len);
 	    }
 	    else
 		sprintf((char *)vers + 3, ".%d", highest_patch());
diff -Naur vim73.orig/src/vim.h vim73/src/vim.h
--- vim73.orig/src/vim.h	2010-07-29 18:46:39.000000000 +0000
+++ vim73/src/vim.h	2013-08-04 19:09:11.393941503 +0000
@@ -27,6 +27,11 @@
 # endif
 #endif
 
+#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64) \
+	|| defined(__EMX__)
+# include "vimio.h"
+#endif
+
 /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
 
 #ifdef HAVE_CONFIG_H	/* GNU autoconf (or something else) was here */
@@ -96,10 +101,13 @@
 # endif
 # ifndef FEAT_CLIPBOARD
 #  define FEAT_CLIPBOARD
+#  if defined(FEAT_SMALL) && !defined(FEAT_MOUSE)
+#   define FEAT_MOUSE
+#  endif
 # endif
 #endif
 #if defined(MACOS_X) || defined(MACOS_CLASSIC)
-#  define MACOS
+# define MACOS
 #endif
 #if defined(MACOS_X) && defined(MACOS_CLASSIC)
     Error: To compile for both MACOS X and Classic use a Classic Carbon
@@ -116,6 +124,7 @@
     || defined(FEAT_GUI_W32) \
     || defined(FEAT_GUI_W16) \
     || defined(FEAT_GUI_PHOTON)
+# define FEAT_GUI_ENABLED  /* also defined with NO_X11_INCLUDES */
 # if !defined(FEAT_GUI) && !defined(NO_X11_INCLUDES)
 #  define FEAT_GUI
 # endif
@@ -179,9 +188,6 @@
 #  define SIZEOF_INT 2
 # endif
 #endif
-#ifdef RISCOS
-# define SIZEOF_INT 4
-#endif
 
 
 #include "feature.h"	/* #defines for optionals and features */
@@ -192,8 +198,8 @@
 #endif
 
 #ifdef NO_X11_INCLUDES
-    /* In os_mac_conv.c NO_X11_INCLUDES is defined to avoid X11 headers.
-     * Disable all X11 related things to avoid conflicts. */
+    /* In os_mac_conv.c and os_macosx.m NO_X11_INCLUDES is defined to avoid
+     * X11 headers.  Disable all X11 related things to avoid conflicts. */
 # ifdef FEAT_X11
 #  undef FEAT_X11
 # endif
@@ -335,10 +341,6 @@
 # include "os_mac.h"
 #endif
 
-#ifdef RISCOS
-# include "os_riscos.h"
-#endif
-
 #ifdef __QNX__
 # include "os_qnx.h"
 #endif
@@ -475,6 +477,11 @@
 # include <sys/stat.h>
 #endif
 
+#if defined(HAVE_ERRNO_H) || defined(DJGPP) || defined(WIN16) \
+	|| defined(WIN32) || defined(_WIN64) || defined(__EMX__)
+# include <errno.h>
+#endif
+
 /*
  * Allow other (non-unix) systems to configure themselves now
  * These are also in os_unix.h, because osdef.sh needs them there.
@@ -486,7 +493,7 @@
 #  include <string.h>
 # endif
 # if defined(HAVE_STRINGS_H) && !defined(NO_STRINGS_WITH_STRING_H)
-#   include <strings.h>
+#  include <strings.h>
 # endif
 # ifdef HAVE_STAT_H
 #  include <stat.h>
@@ -511,22 +518,22 @@
 # include <stdarg.h>
 #endif
 
-# if defined(HAVE_SYS_SELECT_H) && \
+#if defined(HAVE_SYS_SELECT_H) && \
 	(!defined(HAVE_SYS_TIME_H) || defined(SYS_SELECT_WITH_SYS_TIME))
-#  include <sys/select.h>
-# endif
+# include <sys/select.h>
+#endif
 
-# ifndef HAVE_SELECT
-#  ifdef HAVE_SYS_POLL_H
-#   include <sys/poll.h>
+#ifndef HAVE_SELECT
+# ifdef HAVE_SYS_POLL_H
+#  include <sys/poll.h>
+#  define HAVE_POLL
+# else
+#  ifdef HAVE_POLL_H
+#   include <poll.h>
 #   define HAVE_POLL
-#  else
-#   ifdef HAVE_POLL_H
-#    include <poll.h>
-#    define HAVE_POLL
-#   endif
 #  endif
 # endif
+#endif
 
 /* ================ end of the header file puzzle =============== */
 
@@ -776,6 +783,10 @@
 #define EXPAND_FILETYPE		37
 #define EXPAND_FILES_IN_PATH	38
 #define EXPAND_OWNSYNTAX	39
+#define EXPAND_LOCALES		40
+#define EXPAND_HISTORY		41
+#define EXPAND_USER		42
+#define EXPAND_SYNTIME		43
 
 /* Values for exmode_active (0 is no exmode) */
 #define EXMODE_NORMAL		1
@@ -789,6 +800,7 @@
 #define WILD_PREV		5
 #define WILD_ALL		6
 #define WILD_LONGEST		7
+#define WILD_ALL_KEEP		8
 
 #define WILD_LIST_NOTFOUND	1
 #define WILD_HOME_REPLACE	2
@@ -798,6 +810,7 @@
 #define WILD_KEEP_ALL		32
 #define WILD_SILENT		64
 #define WILD_ESCAPE		128
+#define WILD_ICASE		256
 
 /* Flags for expand_wildcards() */
 #define EW_DIR		0x01	/* include directory names */
@@ -808,6 +821,9 @@
 #define EW_SILENT	0x20	/* don't print "1 returned" from shell */
 #define EW_EXEC		0x40	/* executable files */
 #define EW_PATH		0x80	/* search in 'path' too */
+#define EW_ICASE	0x100	/* ignore case */
+#define EW_NOERROR	0x200	/* no error for bad regexp */
+#define EW_NOTWILD	0x400	/* add match with literal name if exists */
 /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
  * is used when executing commands and EW_SILENT for interactive expanding. */
 
@@ -1061,12 +1077,14 @@
 #define INSCHAR_DO_COM	2	/* format comments */
 #define INSCHAR_CTRLV	4	/* char typed just after CTRL-V */
 #define INSCHAR_NO_FEX	8	/* don't use 'formatexpr' */
+#define INSCHAR_COM_LIST 16	/* format comments with list/2nd line indent */
 
 /* flags for open_line() */
 #define OPENLINE_DELSPACES  1	/* delete spaces after cursor */
 #define OPENLINE_DO_COM	    2	/* format comments */
 #define OPENLINE_KEEPTRAIL  4	/* keep trailing spaces */
 #define OPENLINE_MARKFIX    8	/* fix mark positions */
+#define OPENLINE_COM_LIST  16	/* format comments with list/2nd line indent */
 
 /*
  * There are four history tables:
@@ -1228,6 +1246,7 @@
     EVENT_CMDWINENTER,		/* after entering the cmdline window */
     EVENT_CMDWINLEAVE,		/* before leaving the cmdline window */
     EVENT_COLORSCHEME,		/* after loading a colorscheme */
+    EVENT_COMPLETEDONE,		/* after finishing insert complete */
     EVENT_FILEAPPENDPOST,	/* after appending to a file */
     EVENT_FILEAPPENDPRE,	/* before appending to a file */
     EVENT_FILEAPPENDCMD,	/* append to a file using command */
@@ -1253,8 +1272,9 @@
     EVENT_INSERTENTER,		/* when entering Insert mode */
     EVENT_INSERTLEAVE,		/* when leaving Insert mode */
     EVENT_MENUPOPUP,		/* just before popup menu is displayed */
-    EVENT_QUICKFIXCMDPOST,	/* after :make, :grep etc */
-    EVENT_QUICKFIXCMDPRE,	/* before :make, :grep etc */
+    EVENT_QUICKFIXCMDPOST,	/* after :make, :grep etc. */
+    EVENT_QUICKFIXCMDPRE,	/* before :make, :grep etc. */
+    EVENT_QUITPRE,		/* before :quit */
     EVENT_SESSIONLOADPOST,	/* after loading a session file */
     EVENT_STDINREADPOST,	/* after reading from stdin */
     EVENT_STDINREADPRE,		/* before reading from stdin */
@@ -1269,6 +1289,7 @@
     EVENT_WINENTER,		/* after entering a window */
     EVENT_WINLEAVE,		/* before leaving a window */
     EVENT_ENCODINGCHANGED,	/* after changing the 'encoding' option */
+    EVENT_INSERTCHARPRE,	/* before inserting a char */
     EVENT_CURSORHOLD,		/* cursor in same position for a while */
     EVENT_CURSORHOLDI,		/* idem, in Insert mode */
     EVENT_FUNCUNDEFINED,	/* if calling a function which doesn't exist */
@@ -1283,6 +1304,8 @@
     EVENT_TABENTER,		/* after entering a tab page */
     EVENT_SHELLCMDPOST,		/* after ":!cmd" */
     EVENT_SHELLFILTERPOST,	/* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
+    EVENT_TEXTCHANGED,		/* text was modified */
+    EVENT_TEXTCHANGEDI,		/* text was modified in Insert mode*/
     NUM_EVENTS			/* MUST be the last one */
 };
 
@@ -1307,6 +1330,7 @@
     , HLF_M	    /* "--More--" message */
     , HLF_CM	    /* Mode (e.g., "-- INSERT --") */
     , HLF_N	    /* line number for ":number" and ":#" commands */
+    , HLF_CLN	    /* current line number */
     , HLF_R	    /* return to continue message and yes/no questions */
     , HLF_S	    /* status lines */
     , HLF_SNC	    /* status lines of not-current windows */
@@ -1344,7 +1368,7 @@
 /* The HL_FLAGS must be in the same order as the HLF_ enums!
  * When changing this also adjust the default for 'highlight'. */
 #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
-		  'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+		  'n', 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
 		  'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
 		  'B', 'P', 'R', 'L', \
 		  '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
@@ -1423,6 +1447,8 @@
 
 #define IOSIZE	   (1024+1)	/* file i/o and sprintf buffer size */
 
+#define DIALOG_MSG_SIZE 1000	/* buffer size for dialog_msg() */
+
 #ifdef FEAT_MBYTE
 # define MSG_BUF_LEN 480	/* length of buffer for small messages */
 # define MSG_BUF_CLEN  (MSG_BUF_LEN / 6)    /* cell length (worst case: utf-8
@@ -1605,18 +1631,8 @@
  * (this does not account for maximum name lengths and things like "../dir",
  * thus it is not 100% accurate!)
  */
-#ifdef CASE_INSENSITIVE_FILENAME
-# ifdef BACKSLASH_IN_FILENAME
-#  define fnamecmp(x, y) vim_fnamecmp((x), (y))
-#  define fnamencmp(x, y, n) vim_fnamencmp((x), (y), (size_t)(n))
-# else
-#  define fnamecmp(x, y) MB_STRICMP((x), (y))
-#  define fnamencmp(x, y, n) MB_STRNICMP((x), (y), (n))
-# endif
-#else
-# define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
-# define fnamencmp(x, y, n) strncmp((char *)(x), (char *)(y), (size_t)(n))
-#endif
+#define fnamecmp(x, y) vim_fnamecmp((char_u *)(x), (char_u *)(y))
+#define fnamencmp(x, y, n) vim_fnamencmp((char_u *)(x), (char_u *)(y), (size_t)(n))
 
 #ifdef HAVE_MEMSET
 # define vim_memset(ptr, c, size)   memset((ptr), (c), (size))
@@ -1640,6 +1656,11 @@
 # define USE_INPUT_BUF
 #endif
 
+#ifndef EINTR
+# define read_eintr(fd, buf, count) vim_read((fd), (buf), (count))
+# define write_eintr(fd, buf, count) vim_write((fd), (buf), (count))
+#endif
+
 #ifdef MSWIN
 /* On MS-Windows the third argument isn't size_t.  This matters for Win64,
  * where sizeof(size_t)==8, not 4 */
@@ -1683,6 +1704,8 @@
  * character of up to 6 bytes, or one 16-bit character of up to three bytes
  * plus six following composing characters of three bytes each. */
 # define MB_MAXBYTES	21
+#else
+# define MB_MAXBYTES	1
 #endif
 
 #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
@@ -1842,15 +1865,16 @@
 #define VV_OP		52
 #define VV_SEARCHFORWARD 53
 #define VV_OLDFILES	54
-#define VV_LEN		55	/* number of v: vars */
+#define VV_WINDOWID	55
+#define VV_LEN		56	/* number of v: vars */
 
 #ifdef FEAT_CLIPBOARD
 
 /* VIM_ATOM_NAME is the older Vim-specific selection type for X11.  Still
  * supported for when a mix of Vim versions is used. VIMENC_ATOM_NAME includes
  * the encoding to support Vims using different 'encoding' values. */
-#define VIM_ATOM_NAME "_VIM_TEXT"
-#define VIMENC_ATOM_NAME "_VIMENC_TEXT"
+# define VIM_ATOM_NAME "_VIM_TEXT"
+# define VIMENC_ATOM_NAME "_VIMENC_TEXT"
 
 /* Selection states for modeless selection */
 # define SELECT_CLEARED		0
@@ -1899,7 +1923,7 @@
     GdkAtom     gtk_sel_atom;	/* PRIMARY/CLIPBOARD selection ID */
 # endif
 
-# ifdef MSWIN
+# if defined(MSWIN) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
     int_u	format;		/* Vim's own special clipboard format */
     int_u	format_raw;	/* Vim's raw text clipboard format */
 # endif
@@ -1996,6 +2020,7 @@
  #pragma warning(disable : 4312)
 #endif
 
+/* Note: a NULL argument for vim_realloc() is not portable, don't use it. */
 #if defined(MEM_PROFILE)
 # define vim_realloc(ptr, size)  mem_realloc((ptr), (size))
 #else
@@ -2098,6 +2123,12 @@
 # endif
 #endif
 
+#if defined(FEAT_BROWSE) && defined(GTK_CHECK_VERSION)
+# if GTK_CHECK_VERSION(2,4,0)
+#  define USE_FILE_CHOOSER
+# endif
+#endif
+
 #ifndef FEAT_NETBEANS_INTG
 # undef NBDEBUG
 #endif
@@ -2193,4 +2224,30 @@
 #define MSCR_LEFT	-1
 #define MSCR_RIGHT	-2
 
+#define KEYLEN_PART_KEY -1	/* keylen value for incomplete key-code */
+#define KEYLEN_PART_MAP -2	/* keylen value for incomplete mapping */
+#define KEYLEN_REMOVED  9999	/* keylen value for removed sequence */
+
+/* Return values from win32_fileinfo(). */
+#define FILEINFO_OK	     0
+#define FILEINFO_ENC_FAIL    1	/* enc_to_utf16() failed */
+#define FILEINFO_READ_FAIL   2	/* CreateFile() failed */
+#define FILEINFO_INFO_FAIL   3	/* GetFileInformationByHandle() failed */
+
+/* Return value from get_option_value_strict */
+#define SOPT_BOOL	0x01	/* Boolean option */
+#define SOPT_NUM	0x02	/* Number option */
+#define SOPT_STRING	0x04	/* String option */
+#define SOPT_GLOBAL	0x08	/* Option has global value */
+#define SOPT_WIN	0x10	/* Option has window-local value */
+#define SOPT_BUF	0x20	/* Option has buffer-local value */
+#define SOPT_UNSET	0x40	/* Option does not have local value set */
+
+#define SREQ_GLOBAL	0	/* Request global option */
+#define SREQ_WIN	1	/* Request window-local option */
+#define SREQ_BUF	2	/* Request buffer-local option */
+
+/* Character used as separated in autoload function/variable names. */
+#define AUTOLOAD_CHAR '#'
+
 #endif /* VIM__H */
diff -Naur vim73.orig/src/vim.rc vim73/src/vim.rc
--- vim73.orig/src/vim.rc	2010-05-15 11:04:10.000000000 +0000
+++ vim73/src/vim.rc	2013-08-04 19:09:11.397274826 +0000
@@ -116,8 +116,8 @@
 FONT 8, "Helv"
 BEGIN
     DEFPUSHBUTTON   "Cancel", IDCANCEL, 85, 60, 40, 14
-    CTEXT	    "Printing",IDC_PRINTTEXT1,23,15,157,8
-    CTEXT	    " ",IDC_PRINTTEXT2,23,25,157,8
-    CTEXT	    "Initializing...",IDC_PROGRESS,24,38,157,8
+    CTEXT	    "Printing",IDC_PRINTTEXT1,23,15,157,9
+    CTEXT	    " ",IDC_PRINTTEXT2,23,25,157,9
+    CTEXT	    "Initializing...",IDC_PROGRESS,24,38,157,9
     GROUPBOX	    "",IDC_BOX1,19,9,170,47
 END
diff -Naur vim73.orig/src/vimio.h vim73/src/vimio.h
--- vim73.orig/src/vimio.h	2010-05-15 11:04:08.000000000 +0000
+++ vim73/src/vimio.h	2013-08-04 19:09:11.407274796 +0000
@@ -13,4 +13,7 @@
 # define _CRT_NONSTDC_NO_DEPRECATE
 #endif
 
-#include <io.h>
+/* cproto fails on missing include files */
+#ifndef PROTO
+# include <io.h>
+#endif
diff -Naur vim73.orig/src/winclip.c vim73/src/winclip.c
--- vim73.orig/src/winclip.c	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/winclip.c	2013-08-04 19:09:11.413941443 +0000
@@ -0,0 +1,800 @@
+/* vi:set ts=8 sts=4 sw=4:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+ * Do ":help uganda"  in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ * See README.txt for an overview of the Vim source code.
+ */
+
+/*
+ * winclip.c
+ *
+ * Routines common to both Win16 and Win32 for clipboard handling.
+ * Also used by Cygwin, using os_unix.c.
+ */
+
+#ifdef WIN16
+# ifdef __BORLANDC__
+#  pragma warn -par
+#  pragma warn -ucp
+#  pragma warn -use
+#  pragma warn -aus
+# endif
+#endif
+
+#include "vimio.h"
+#include "vim.h"
+
+/*
+ * Compile only the clipboard handling features when compiling for cygwin
+ * posix environment.
+ */
+#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
+# define WIN3264
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+# include "winclip.pro"
+#endif
+
+/*
+ * When generating prototypes for Win32 on Unix, these lines make the syntax
+ * errors disappear.  They do not need to be correct.
+ */
+#ifdef PROTO
+#define WINAPI
+#define WINBASEAPI
+typedef int DWORD;
+typedef int LPBOOL;
+typedef int LPCSTR;
+typedef int LPCWSTR;
+typedef int LPSTR;
+typedef int LPWSTR;
+typedef int UINT;
+#endif
+
+#if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * Convert an UTF-8 string to UTF-16.
+ * "instr[inlen]" is the input.  "inlen" is in bytes.
+ * When "outstr" is NULL only return the number of UTF-16 words produced.
+ * Otherwise "outstr" must be a buffer of sufficient size.
+ * Returns the number of UTF-16 words produced.
+ */
+    int
+utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
+{
+    int		outlen = 0;
+    char_u	*p = instr;
+    int		todo = inlen;
+    int		l;
+    int		ch;
+
+    while (todo > 0)
+    {
+	/* Only convert if we have a complete sequence. */
+	l = utf_ptr2len_len(p, todo);
+	if (l > todo)
+	{
+	    /* Return length of incomplete sequence. */
+	    if (unconvlenp != NULL)
+		*unconvlenp = todo;
+	    break;
+	}
+
+	ch = utf_ptr2char(p);
+	if (ch >= 0x10000)
+	{
+	    /* non-BMP character, encoding with surrogate pairs */
+	    ++outlen;
+	    if (outstr != NULL)
+	    {
+		*outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
+		*outstr++ = 0xDC00 | (ch & 0x3FF);
+	    }
+	}
+	else if (outstr != NULL)
+	    *outstr++ = ch;
+	++outlen;
+	p += l;
+	todo -= l;
+    }
+
+    return outlen;
+}
+
+/*
+ * Convert an UTF-16 string to UTF-8.
+ * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
+ * When "outstr" is NULL only return the required number of bytes.
+ * Otherwise "outstr" must be a buffer of sufficient size.
+ * Return the number of bytes produced.
+ */
+    int
+utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
+{
+    int		outlen = 0;
+    int		todo = inlen;
+    short_u	*p = instr;
+    int		l;
+    int		ch, ch2;
+
+    while (todo > 0)
+    {
+	ch = *p;
+	if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
+	{
+	    /* surrogate pairs handling */
+	    ch2 = p[1];
+	    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
+	    {
+		ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
+		++p;
+		--todo;
+	    }
+	}
+	if (outstr != NULL)
+	{
+	    l = utf_char2bytes(ch, outstr);
+	    outstr += l;
+	}
+	else
+	    l = utf_char2len(ch);
+	++p;
+	outlen += l;
+	--todo;
+    }
+
+    return outlen;
+}
+
+/*
+ * Call MultiByteToWideChar() and allocate memory for the result.
+ * Returns the result in "*out[*outlen]" with an extra zero appended.
+ * "outlen" is in words.
+ */
+    void
+MultiByteToWideChar_alloc(UINT cp, DWORD flags,
+	LPCSTR in, int inlen,
+	LPWSTR *out, int *outlen)
+{
+    *outlen = MultiByteToWideChar(cp, flags, in, inlen, 0, 0);
+    /* Add one one word to avoid a zero-length alloc(). */
+    *out = (LPWSTR)alloc(sizeof(WCHAR) * (*outlen + 1));
+    if (*out != NULL)
+    {
+	MultiByteToWideChar(cp, flags, in, inlen, *out, *outlen);
+	(*out)[*outlen] = 0;
+    }
+}
+
+/*
+ * Call WideCharToMultiByte() and allocate memory for the result.
+ * Returns the result in "*out[*outlen]" with an extra NUL appended.
+ */
+    void
+WideCharToMultiByte_alloc(UINT cp, DWORD flags,
+	LPCWSTR in, int inlen,
+	LPSTR *out, int *outlen,
+	LPCSTR def, LPBOOL useddef)
+{
+    *outlen = WideCharToMultiByte(cp, flags, in, inlen, NULL, 0, def, useddef);
+    /* Add one one byte to avoid a zero-length alloc(). */
+    *out = (LPSTR)alloc((unsigned)*outlen + 1);
+    if (*out != NULL)
+    {
+	WideCharToMultiByte(cp, flags, in, inlen, *out, *outlen, def, useddef);
+	(*out)[*outlen] = 0;
+    }
+}
+
+#endif /* FEAT_MBYTE */
+
+#ifdef FEAT_CLIPBOARD
+/*
+ * Clipboard stuff, for cutting and pasting text to other windows.
+ */
+
+    void
+win_clip_init(void)
+{
+    clip_init(TRUE);
+
+    /*
+     * Vim's own clipboard format recognises whether the text is char, line,
+     * or rectangular block.  Only useful for copying between two Vims.
+     * "VimClipboard" was used for previous versions, using the first
+     * character to specify MCHAR, MLINE or MBLOCK.
+     */
+    clip_star.format = RegisterClipboardFormat("VimClipboard2");
+    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
+}
+
+/* Type used for the clipboard type of Vim's data. */
+typedef struct
+{
+    int type;		/* MCHAR, MBLOCK or MLINE */
+    int txtlen;		/* length of CF_TEXT in bytes */
+    int ucslen;		/* length of CF_UNICODETEXT in words */
+    int rawlen;		/* length of clip_star.format_raw, including encoding,
+			   excluding terminating NUL */
+} VimClipType_t;
+
+/*
+ * Make vim the owner of the current selection.  Return OK upon success.
+ */
+/*ARGSUSED*/
+    int
+clip_mch_own_selection(VimClipboard *cbd)
+{
+    /*
+     * Never actually own the clipboard.  If another application sets the
+     * clipboard, we don't want to think that we still own it.
+     */
+    return FAIL;
+}
+
+/*
+ * Make vim NOT the owner of the current selection.
+ */
+/*ARGSUSED*/
+    void
+clip_mch_lose_selection(VimClipboard *cbd)
+{
+    /* Nothing needs to be done here */
+}
+
+/*
+ * Copy "str[*size]" into allocated memory, changing CR-NL to NL.
+ * Return the allocated result and the size in "*size".
+ * Returns NULL when out of memory.
+ */
+    static char_u *
+crnl_to_nl(const char_u *str, int *size)
+{
+    int		pos = 0;
+    int		str_len = *size;
+    char_u	*ret;
+    char_u	*retp;
+
+    /* Avoid allocating zero bytes, it generates an error message. */
+    ret = lalloc((long_u)(str_len == 0 ? 1 : str_len), TRUE);
+    if (ret != NULL)
+    {
+	retp = ret;
+	for (pos = 0; pos < str_len; ++pos)
+	{
+	    if (str[pos] == '\r' && str[pos + 1] == '\n')
+	    {
+		++pos;
+		--(*size);
+	    }
+	    *retp++ = str[pos];
+	}
+    }
+
+    return ret;
+}
+
+/*
+ * Wait for another process to Close the Clipboard.
+ * Returns TRUE for success.
+ */
+    static int
+vim_open_clipboard(void)
+{
+    int delay = 10;
+
+    while (!OpenClipboard(NULL))
+    {
+	if (delay > 500)
+	    return FALSE;  /* waited too long, give up */
+	Sleep(delay);
+	delay *= 2;	/* wait for 10, 20, 40, 80, etc. msec */
+    }
+    return TRUE;
+}
+
+/*
+ * Get the current selection and put it in the clipboard register.
+ *
+ * NOTE: Must use GlobalLock/Unlock here to ensure Win32s compatibility.
+ * On NT/W95 the clipboard data is a fixed global memory object and
+ * so its handle = its pointer.
+ * On Win32s, however, co-operation with the Win16 system means that
+ * the clipboard data is moveable and its handle is not a pointer at all,
+ * so we can't just cast the return value of GetClipboardData to (char_u*).
+ * <VN>
+ */
+    void
+clip_mch_request_selection(VimClipboard *cbd)
+{
+    VimClipType_t	metadata = { -1, -1, -1, -1 };
+    HGLOBAL		hMem = NULL;
+    char_u		*str = NULL;
+#if defined(FEAT_MBYTE) && defined(WIN3264)
+    char_u		*to_free = NULL;
+#endif
+#ifdef FEAT_MBYTE
+    HGLOBAL		rawh = NULL;
+#endif
+    int			str_size = 0;
+    int			maxlen;
+    size_t		n;
+
+    /*
+     * Don't pass GetActiveWindow() as an argument to OpenClipboard() because
+     * then we can't paste back into the same window for some reason - webb.
+     */
+    if (!vim_open_clipboard())
+	return;
+
+    /* Check for vim's own clipboard format first.  This only gets the type of
+     * the data, still need to use CF_UNICODETEXT or CF_TEXT for the text. */
+    if (IsClipboardFormatAvailable(cbd->format))
+    {
+	VimClipType_t	*meta_p;
+	HGLOBAL		meta_h;
+
+	/* We have metadata on the clipboard; try to get it. */
+	if ((meta_h = GetClipboardData(cbd->format)) != NULL
+		&& (meta_p = (VimClipType_t *)GlobalLock(meta_h)) != NULL)
+	{
+	    /* The size of "VimClipType_t" changed, "rawlen" was added later.
+	     * Only copy what is available for backwards compatibility. */
+	    n = sizeof(VimClipType_t);
+	    if (GlobalSize(meta_h) < n)
+		n = GlobalSize(meta_h);
+	    memcpy(&metadata, meta_p, n);
+	    GlobalUnlock(meta_h);
+	}
+    }
+
+#ifdef FEAT_MBYTE
+    /* Check for Vim's raw clipboard format first.  This is used without
+     * conversion, but only if 'encoding' matches. */
+    if (IsClipboardFormatAvailable(cbd->format_raw)
+				      && metadata.rawlen > (int)STRLEN(p_enc))
+    {
+	/* We have raw data on the clipboard; try to get it. */
+	if ((rawh = GetClipboardData(cbd->format_raw)) != NULL)
+	{
+	    char_u	*rawp;
+
+	    rawp = (char_u *)GlobalLock(rawh);
+	    if (rawp != NULL && STRCMP(p_enc, rawp) == 0)
+	    {
+		n = STRLEN(p_enc) + 1;
+		str = rawp + n;
+		str_size = (int)(metadata.rawlen - n);
+	    }
+	    else
+	    {
+		GlobalUnlock(rawh);
+		rawh = NULL;
+	    }
+	}
+    }
+    if (str == NULL)
+    {
+#endif
+
+#if defined(FEAT_MBYTE) && defined(WIN3264)
+    /* Try to get the clipboard in Unicode if it's not an empty string. */
+    if (IsClipboardFormatAvailable(CF_UNICODETEXT) && metadata.ucslen != 0)
+    {
+	HGLOBAL hMemW;
+
+	if ((hMemW = GetClipboardData(CF_UNICODETEXT)) != NULL)
+	{
+	    WCHAR *hMemWstr = (WCHAR *)GlobalLock(hMemW);
+
+	    /* Use the length of our metadata if possible, but limit it to the
+	     * GlobalSize() for safety. */
+	    maxlen = (int)(GlobalSize(hMemW) / sizeof(WCHAR));
+	    if (metadata.ucslen >= 0)
+	    {
+		if (metadata.ucslen > maxlen)
+		    str_size = maxlen;
+		else
+		    str_size = metadata.ucslen;
+	    }
+	    else
+	    {
+		for (str_size = 0; str_size < maxlen; ++str_size)
+		    if (hMemWstr[str_size] == NUL)
+			break;
+	    }
+	    to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
+	    GlobalUnlock(hMemW);
+	}
+    }
+    else
+#endif
+    /* Get the clipboard in the Active codepage. */
+    if (IsClipboardFormatAvailable(CF_TEXT))
+    {
+	if ((hMem = GetClipboardData(CF_TEXT)) != NULL)
+	{
+	    str = (char_u *)GlobalLock(hMem);
+
+	    /* The length is either what our metadata says or the strlen().
+	     * But limit it to the GlobalSize() for safety. */
+	    maxlen = (int)GlobalSize(hMem);
+	    if (metadata.txtlen >= 0)
+	    {
+		if (metadata.txtlen > maxlen)
+		    str_size = maxlen;
+		else
+		    str_size = metadata.txtlen;
+	    }
+	    else
+	    {
+		for (str_size = 0; str_size < maxlen; ++str_size)
+		    if (str[str_size] == NUL)
+			break;
+	    }
+
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+	    /* The text is in the active codepage.  Convert to 'encoding',
+	     * going through UTF-16. */
+	    acp_to_enc(str, str_size, &to_free, &maxlen);
+	    if (to_free != NULL)
+	    {
+		str_size = maxlen;
+		str = to_free;
+	    }
+# endif
+	}
+    }
+#ifdef FEAT_MBYTE
+    }
+#endif
+
+    if (str != NULL && *str != NUL)
+    {
+	char_u *temp_clipboard;
+
+	/* If the type is not known detect it. */
+	if (metadata.type == -1)
+	    metadata.type = MAUTO;
+
+	/* Translate <CR><NL> into <NL>. */
+	temp_clipboard = crnl_to_nl(str, &str_size);
+	if (temp_clipboard != NULL)
+	{
+	    clip_yank_selection(metadata.type, temp_clipboard, str_size, cbd);
+	    vim_free(temp_clipboard);
+	}
+    }
+
+    /* unlock the global object */
+    if (hMem != NULL)
+	GlobalUnlock(hMem);
+#ifdef FEAT_MBYTE
+    if (rawh != NULL)
+	GlobalUnlock(rawh);
+#endif
+    CloseClipboard();
+#if defined(FEAT_MBYTE) && defined(WIN3264)
+    vim_free(to_free);
+#endif
+}
+
+/*
+ * Send the current selection to the clipboard.
+ */
+    void
+clip_mch_set_selection(VimClipboard *cbd)
+{
+    char_u		*str = NULL;
+    VimClipType_t	metadata;
+    long_u		txtlen;
+    HGLOBAL		hMemRaw = NULL;
+    HGLOBAL		hMem = NULL;
+    HGLOBAL		hMemVim = NULL;
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+    HGLOBAL		hMemW = NULL;
+# endif
+
+    /* If the '*' register isn't already filled in, fill it in now */
+    cbd->owned = TRUE;
+    clip_get_selection(cbd);
+    cbd->owned = FALSE;
+
+    /* Get the text to be put on the clipboard, with CR-LF. */
+    metadata.type = clip_convert_selection(&str, &txtlen, cbd);
+    if (metadata.type < 0)
+	return;
+    metadata.txtlen = (int)txtlen;
+    metadata.ucslen = 0;
+    metadata.rawlen = 0;
+
+#ifdef FEAT_MBYTE
+    /* Always set the raw bytes: 'encoding', NUL and the text.  This is used
+     * when copy/paste from/to Vim with the same 'encoding', so that illegal
+     * bytes can also be copied and no conversion is needed. */
+    {
+	LPSTR lpszMemRaw;
+
+	metadata.rawlen = (int)(txtlen + STRLEN(p_enc) + 1);
+	hMemRaw = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
+							 metadata.rawlen + 1);
+	lpszMemRaw = (LPSTR)GlobalLock(hMemRaw);
+	if (lpszMemRaw != NULL)
+	{
+	    STRCPY(lpszMemRaw, p_enc);
+	    memcpy(lpszMemRaw + STRLEN(p_enc) + 1, str, txtlen + 1);
+	    GlobalUnlock(hMemRaw);
+	}
+	else
+	    metadata.rawlen = 0;
+    }
+#endif
+
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+    {
+	WCHAR		*out;
+	int		len = metadata.txtlen;
+
+	/* Convert the text to UTF-16. This is put on the clipboard as
+	 * CF_UNICODETEXT. */
+	out = (WCHAR *)enc_to_utf16(str, &len);
+	if (out != NULL)
+	{
+	    WCHAR *lpszMemW;
+
+	    /* Convert the text for CF_TEXT to Active codepage. Otherwise it's
+	     * p_enc, which has no relation to the Active codepage. */
+	    metadata.txtlen = WideCharToMultiByte(GetACP(), 0, out, len,
+							       NULL, 0, 0, 0);
+	    vim_free(str);
+	    str = (char_u *)alloc((unsigned)(metadata.txtlen == 0 ? 1
+							  : metadata.txtlen));
+	    if (str == NULL)
+	    {
+		vim_free(out);
+		return;		/* out of memory */
+	    }
+	    WideCharToMultiByte(GetACP(), 0, out, len,
+					   (LPSTR)str, metadata.txtlen, 0, 0);
+
+	    /* Allocate memory for the UTF-16 text, add one NUL word to
+	     * terminate the string. */
+	    hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
+						   (len + 1) * sizeof(WCHAR));
+	    lpszMemW = (WCHAR *)GlobalLock(hMemW);
+	    if (lpszMemW != NULL)
+	    {
+		memcpy(lpszMemW, out, len * sizeof(WCHAR));
+		lpszMemW[len] = NUL;
+		GlobalUnlock(hMemW);
+	    }
+	    vim_free(out);
+	    metadata.ucslen = len;
+	}
+    }
+# endif
+
+    /* Allocate memory for the text, add one NUL byte to terminate the string.
+     */
+    hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, metadata.txtlen + 1);
+    {
+	LPSTR lpszMem = (LPSTR)GlobalLock(hMem);
+
+	if (lpszMem)
+	{
+	    vim_strncpy((char_u *)lpszMem, str, metadata.txtlen);
+	    GlobalUnlock(hMem);
+	}
+    }
+
+    /* Set up metadata: */
+    {
+	VimClipType_t *lpszMemVim = NULL;
+
+	hMemVim = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,
+						       sizeof(VimClipType_t));
+	lpszMemVim = (VimClipType_t *)GlobalLock(hMemVim);
+	memcpy(lpszMemVim, &metadata, sizeof(metadata));
+	GlobalUnlock(hMemVim);
+    }
+
+    /*
+     * Open the clipboard, clear it and put our text on it.
+     * Always set our Vim format.  Put Unicode and plain text on it.
+     *
+     * Don't pass GetActiveWindow() as an argument to OpenClipboard()
+     * because then we can't paste back into the same window for some
+     * reason - webb.
+     */
+    if (vim_open_clipboard())
+    {
+	if (EmptyClipboard())
+	{
+	    SetClipboardData(cbd->format, hMemVim);
+	    hMemVim = 0;
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+	    if (hMemW != NULL)
+	    {
+		if (SetClipboardData(CF_UNICODETEXT, hMemW) != NULL)
+		    hMemW = NULL;
+	    }
+# endif
+	    /* Always use CF_TEXT.  On Win98 Notepad won't obtain the
+	     * CF_UNICODETEXT text, only CF_TEXT. */
+	    SetClipboardData(CF_TEXT, hMem);
+	    hMem = 0;
+	}
+	CloseClipboard();
+    }
+
+    vim_free(str);
+    /* Free any allocations we didn't give to the clipboard: */
+    if (hMemRaw)
+	GlobalFree(hMemRaw);
+    if (hMem)
+	GlobalFree(hMem);
+# if defined(FEAT_MBYTE) && defined(WIN3264)
+    if (hMemW)
+	GlobalFree(hMemW);
+# endif
+    if (hMemVim)
+	GlobalFree(hMemVim);
+}
+
+#endif /* FEAT_CLIPBOARD */
+
+#if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * Note: the following two functions are only guaranteed to work when using
+ * valid MS-Windows codepages or when iconv() is available.
+ */
+
+/*
+ * Convert "str" from 'encoding' to UTF-16.
+ * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
+ * Output is returned as an allocated string.  "*lenp" is set to the length of
+ * the result.  A trailing NUL is always added.
+ * Returns NULL when out of memory.
+ */
+    short_u *
+enc_to_utf16(char_u *str, int *lenp)
+{
+    vimconv_T	conv;
+    WCHAR	*ret;
+    char_u	*allocbuf = NULL;
+    int		len_loc;
+    int		length;
+
+    if (lenp == NULL)
+    {
+	len_loc = (int)STRLEN(str) + 1;
+	lenp = &len_loc;
+    }
+
+    if (enc_codepage > 0)
+    {
+	/* We can do any CP### -> UTF-16 in one pass, and we can do it
+	 * without iconv() (convert_* may need iconv). */
+	MultiByteToWideChar_alloc(enc_codepage, 0, (LPCSTR)str, *lenp,
+							       &ret, &length);
+    }
+    else
+    {
+	/* Use "latin1" by default, we might be called before we have p_enc
+	 * set up.  Convert to utf-8 first, works better with iconv().  Does
+	 * nothing if 'encoding' is "utf-8". */
+	conv.vc_type = CONV_NONE;
+	if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
+						   (char_u *)"utf-8") == FAIL)
+	    return NULL;
+	if (conv.vc_type != CONV_NONE)
+	{
+	    str = allocbuf = string_convert(&conv, str, lenp);
+	    if (str == NULL)
+		return NULL;
+	}
+	convert_setup(&conv, NULL, NULL);
+
+	length = utf8_to_utf16(str, *lenp, NULL, NULL);
+	ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
+	if (ret != NULL)
+	{
+	    utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
+	    ret[length] = 0;
+	}
+
+	vim_free(allocbuf);
+    }
+
+    *lenp = length;
+    return (short_u *)ret;
+}
+
+/*
+ * Convert an UTF-16 string to 'encoding'.
+ * Input in "str" with length (counted in wide characters) "*lenp".  When
+ * "lenp" is NULL, use wcslen().
+ * Output is returned as an allocated string.  If "*lenp" is not NULL it is
+ * set to the length of the result.
+ * Returns NULL when out of memory.
+ */
+    char_u *
+utf16_to_enc(short_u *str, int *lenp)
+{
+    vimconv_T	conv;
+    char_u	*utf8_str = NULL, *enc_str = NULL;
+    int		len_loc;
+
+    if (lenp == NULL)
+    {
+	len_loc = (int)wcslen(str) + 1;
+	lenp = &len_loc;
+    }
+
+    if (enc_codepage > 0)
+    {
+	/* We can do any UTF-16 -> CP### in one pass. */
+	int length;
+
+	WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
+					    (LPSTR *)&enc_str, &length, 0, 0);
+	*lenp = length;
+	return enc_str;
+    }
+
+    /* Avoid allocating zero bytes, it generates an error message. */
+    utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
+    if (utf8_str != NULL)
+    {
+	*lenp = utf16_to_utf8(str, *lenp, utf8_str);
+
+	/* We might be called before we have p_enc set up. */
+	conv.vc_type = CONV_NONE;
+	convert_setup(&conv, (char_u *)"utf-8",
+					    p_enc? p_enc: (char_u *)"latin1");
+	if (conv.vc_type == CONV_NONE)
+	{
+	    /* p_enc is utf-8, so we're done. */
+	    enc_str = utf8_str;
+	}
+	else
+	{
+	    enc_str = string_convert(&conv, utf8_str, lenp);
+	    vim_free(utf8_str);
+	}
+
+	convert_setup(&conv, NULL, NULL);
+    }
+
+    return enc_str;
+}
+#endif /* FEAT_MBYTE */
+
+#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
+/*
+ * Convert from the active codepage to 'encoding'.
+ * Input is "str[str_size]".
+ * The result is in allocated memory: "out[outlen]".  With terminating NUL.
+ */
+    void
+acp_to_enc(str, str_size, out, outlen)
+    char_u	*str;
+    int		str_size;
+    char_u	**out;
+    int		*outlen;
+
+{
+    LPWSTR	widestr;
+
+    MultiByteToWideChar_alloc(GetACP(), 0, (LPCSTR)str, str_size,
+							    &widestr, outlen);
+    if (widestr != NULL)
+    {
+	++*outlen;	/* Include the 0 after the string */
+	*out = utf16_to_enc((short_u *)widestr, outlen);
+	vim_free(widestr);
+    }
+}
+#endif
diff -Naur vim73.orig/src/window.c vim73/src/window.c
--- vim73.orig/src/window.c	2010-07-20 20:23:49.000000000 +0000
+++ vim73/src/window.c	2013-08-04 19:09:11.420608090 +0000
@@ -23,7 +23,7 @@
 static void win_totop __ARGS((int size, int flags));
 static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
 static int last_window __ARGS((void));
-static int one_window __ARGS((void));
+static int close_last_window_tabpage __ARGS((win_T *win, int free_buf, tabpage_T *prev_curtab));
 static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
 static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
 static tabpage_T *alt_tabpage __ARGS((void));
@@ -44,20 +44,19 @@
 static void new_frame __ARGS((win_T *wp));
 #if defined(FEAT_WINDOWS) || defined(PROTO)
 static tabpage_T *alloc_tabpage __ARGS((void));
-static int leave_tabpage __ARGS((buf_T *new_curbuf));
-static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf));
+static int leave_tabpage __ARGS((buf_T *new_curbuf, int trigger_leave_autocmds));
+static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf, int trigger_enter_autocmds, int trigger_leave_autocmds));
 static void frame_fix_height __ARGS((win_T *wp));
 static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
-static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
+static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin, int trigger_enter_autocmds, int trigger_leave_autocmds));
 static void win_free __ARGS((win_T *wp, tabpage_T *tp));
 static void frame_append __ARGS((frame_T *after, frame_T *frp));
 static void frame_insert __ARGS((frame_T *before, frame_T *frp));
 static void frame_remove __ARGS((frame_T *frp));
-#ifdef FEAT_VERTSPLIT
-static void win_new_width __ARGS((win_T *wp, int width));
+# ifdef FEAT_VERTSPLIT
 static void win_goto_ver __ARGS((int up, long count));
 static void win_goto_hor __ARGS((int left, long count));
-#endif
+# endif
 static void frame_add_height __ARGS((frame_T *frp, int n));
 static void last_status_rec __ARGS((frame_T *fr, int statusline));
 
@@ -67,10 +66,15 @@
 static int check_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
 static win_T *restore_snapshot_rec __ARGS((frame_T *sn, frame_T *fr));
 
+static int frame_check_height __ARGS((frame_T *topfrp, int height));
+#ifdef FEAT_VERTSPLIT
+static int frame_check_width __ARGS((frame_T *topfrp, int width));
+#endif
+
 #endif /* FEAT_WINDOWS */
 
 static win_T *win_alloc __ARGS((win_T *after, int hidden));
-static void win_new_height __ARGS((win_T *, int));
+static void set_fraction __ARGS((win_T *wp));
 
 #define URL_SLASH	1		/* path_is_url() has found "://" */
 #define URL_BACKSLASH	2		/* path_is_url() has found ":\\" */
@@ -354,11 +358,11 @@
 						     && valid_tabpage(oldtab))
 		    {
 			newtab = curtab;
-			goto_tabpage_tp(oldtab);
+			goto_tabpage_tp(oldtab, TRUE, TRUE);
 			if (curwin == wp)
 			    win_close(curwin, FALSE);
 			if (valid_tabpage(newtab))
-			    goto_tabpage_tp(newtab);
+			    goto_tabpage_tp(newtab, TRUE, TRUE);
 		    }
 		}
 		break;
@@ -525,9 +529,7 @@
 		    setpcmark();
 		    if (win_split(0, 0) == OK)
 		    {
-# ifdef FEAT_SCROLLBIND
-			curwin->w_p_scb = FALSE;
-# endif
+			RESET_BINDING(curwin);
 			(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
 							   ECMD_HIDE, NULL);
 			if (nchar == 'F' && lnum >= 0)
@@ -684,19 +686,19 @@
 }
 
 /*
- * When "newwin" is NULL: split the current window in two.
- * When "newwin" is not NULL: insert this window at the far
+ * When "new_wp" is NULL: split the current window in two.
+ * When "new_wp" is not NULL: insert this window at the far
  * top/left/right/bottom.
  * return FAIL for failure, OK otherwise
  */
     int
-win_split_ins(size, flags, newwin, dir)
+win_split_ins(size, flags, new_wp, dir)
     int		size;
     int		flags;
-    win_T	*newwin;
+    win_T	*new_wp;
     int		dir;
 {
-    win_T	*wp = newwin;
+    win_T	*wp = new_wp;
     win_T	*oldwin;
     int		new_size = size;
     int		i;
@@ -719,7 +721,7 @@
     /* add a status line when p_ls == 1 and splitting the first window */
     if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
     {
-	if (oldwin->w_height <= p_wmh && newwin == NULL)
+	if (oldwin->w_height <= p_wmh && new_wp == NULL)
 	{
 	    EMSG(_(e_noroom));
 	    return FAIL;
@@ -752,7 +754,7 @@
 	}
 	else
 	    available = oldwin->w_width;
-	if (available < needed && newwin == NULL)
+	if (available < needed && new_wp == NULL)
 	{
 	    EMSG(_(e_noroom));
 	    return FAIL;
@@ -816,7 +818,7 @@
 	    available = oldwin->w_height;
 	    needed += p_wmh;
 	}
-	if (available < needed && newwin == NULL)
+	if (available < needed && new_wp == NULL)
 	{
 	    EMSG(_(e_noroom));
 	    return FAIL;
@@ -889,20 +891,20 @@
 			p_sb))))
     {
 	/* new window below/right of current one */
-	if (newwin == NULL)
+	if (new_wp == NULL)
 	    wp = win_alloc(oldwin, FALSE);
 	else
 	    win_append(oldwin, wp);
     }
     else
     {
-	if (newwin == NULL)
+	if (new_wp == NULL)
 	    wp = win_alloc(oldwin->w_prev, FALSE);
 	else
 	    win_append(oldwin->w_prev, wp);
     }
 
-    if (newwin == NULL)
+    if (new_wp == NULL)
     {
 	if (wp == NULL)
 	    return FAIL;
@@ -973,10 +975,10 @@
 		frp->fr_parent = curfrp;
     }
 
-    if (newwin == NULL)
+    if (new_wp == NULL)
 	frp = wp->w_frame;
     else
-	frp = newwin->w_frame;
+	frp = new_wp->w_frame;
     frp->fr_parent = curfrp->fr_parent;
 
     /* Insert the new frame at the right place in the frame list. */
@@ -985,10 +987,17 @@
     else
 	frame_append(curfrp, frp);
 
+    /* Set w_fraction now so that the cursor keeps the same relative
+     * vertical position. */
+    if (oldwin->w_height > 0)
+	set_fraction(oldwin);
+    wp->w_fraction = oldwin->w_fraction;
+
 #ifdef FEAT_VERTSPLIT
     if (flags & WSP_VERT)
     {
 	wp->w_p_scr = curwin->w_p_scr;
+
 	if (need_status)
 	{
 	    win_new_height(oldwin, oldwin->w_height - 1);
@@ -1220,15 +1229,15 @@
     }
     newp->w_tagstackidx = oldp->w_tagstackidx;
     newp->w_tagstacklen = oldp->w_tagstacklen;
-# ifdef FEAT_FOLDING
+#ifdef FEAT_FOLDING
     copyFoldingState(oldp, newp);
-# endif
+#endif
 
     win_init_some(newp, oldp);
 
-# ifdef FEAT_SYN_HL
+#ifdef FEAT_SYN_HL
     check_colorcolumn(newp);
-# endif
+#endif
 }
 
 /*
@@ -2028,7 +2037,11 @@
 
     for (wp = firstwin; wp != NULL && lastwin != firstwin; )
     {
-	if (wp->w_buffer == buf && (!keep_curwin || wp != curwin))
+	if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
+#ifdef FEAT_AUTOCMD
+		&& !(wp->w_closing || wp->w_buffer->b_closing)
+#endif
+		)
 	{
 	    win_close(wp, FALSE);
 
@@ -2045,7 +2058,11 @@
 	nexttp = tp->tp_next;
 	if (tp != curtab)
 	    for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
-		if (wp->w_buffer == buf)
+		if (wp->w_buffer == buf
+#ifdef FEAT_AUTOCMD
+		    && !(wp->w_closing || wp->w_buffer->b_closing)
+#endif
+		    )
 		{
 		    win_close_othertab(wp, FALSE, tp);
 
@@ -2058,6 +2075,7 @@
 
     --RedrawingDisabled;
 
+    redraw_tabline = TRUE;
     if (h != tabline_height())
 	shell_new_rows();
 }
@@ -2077,7 +2095,7 @@
  * Return TRUE if there is only one window other than "aucmd_win" in the
  * current tab page.
  */
-    static int
+    int
 one_window()
 {
 #ifdef FEAT_AUTOCMD
@@ -2100,10 +2118,60 @@
 }
 
 /*
+ * Close the possibly last window in a tab page.
+ * Returns TRUE when the window was closed already.
+ */
+    static int
+close_last_window_tabpage(win, free_buf, prev_curtab)
+    win_T	*win;
+    int		free_buf;
+    tabpage_T   *prev_curtab;
+{
+    if (firstwin == lastwin)
+    {
+#ifdef FEAT_AUTOCMD
+	buf_T	*old_curbuf = curbuf;
+#endif
+
+	/*
+	 * Closing the last window in a tab page.  First go to another tab
+	 * page and then close the window and the tab page.  This avoids that
+	 * curwin and curtab are invalid while we are freeing memory, they may
+	 * be used in GUI events.
+	 * Don't trigger autocommands yet, they may use wrong values, so do
+	 * that below.
+	 */
+	goto_tabpage_tp(alt_tabpage(), FALSE, TRUE);
+	redraw_tabline = TRUE;
+
+	/* Safety check: Autocommands may have closed the window when jumping
+	 * to the other tab page. */
+	if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
+	{
+	    int	    h = tabline_height();
+
+	    win_close_othertab(win, free_buf, prev_curtab);
+	    if (h != tabline_height())
+		shell_new_rows();
+	}
+	/* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
+	 * that now. */
+#ifdef FEAT_AUTOCMD
+	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+	if (old_curbuf != curbuf)
+	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+#endif
+	return TRUE;
+    }
+    return FALSE;
+}
+
+/*
  * Close window "win".  Only works for the current tab page.
  * If "free_buf" is TRUE related buffer may be unloaded.
  *
- * called by :quit, :close, :xit, :wq and findtag()
+ * Called by :quit, :close, :xit, :wq and findtag().
  */
     void
 win_close(win, free_buf)
@@ -2126,6 +2194,8 @@
     }
 
 #ifdef FEAT_AUTOCMD
+    if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing))
+	return; /* window is already being closed */
     if (win == aucmd_win)
     {
 	EMSG(_("E813: Cannot close autocmd window"));
@@ -2138,33 +2208,15 @@
     }
 #endif
 
-    /*
-     * When closing the last window in a tab page first go to another tab
-     * page and then close the window and the tab page.  This avoids that
-     * curwin and curtab are not invalid while we are freeing memory, they may
-     * be used in GUI events.
-     */
-    if (firstwin == lastwin)
-    {
-	goto_tabpage_tp(alt_tabpage());
-	redraw_tabline = TRUE;
-
-	/* Safety check: Autocommands may have closed the window when jumping
-	 * to the other tab page. */
-	if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
-	{
-	    int	    h = tabline_height();
-
-	    win_close_othertab(win, free_buf, prev_curtab);
-	    if (h != tabline_height())
-		shell_new_rows();
-	}
-	return;
-    }
+    /* When closing the last window in a tab page first go to another tab page
+     * and then close the window and the tab page to avoid that curwin and
+     * curtab are invalid while we are freeing memory. */
+    if (close_last_window_tabpage(win, free_buf, prev_curtab))
+      return;
 
     /* When closing the help window, try restoring a snapshot after closing
      * the window.  Otherwise clear the snapshot, it's now invalid. */
-    if (win->w_buffer->b_help)
+    if (win->w_buffer != NULL && win->w_buffer->b_help)
 	help_window = TRUE;
     else
 	clear_snapshot(curtab, SNAP_HELP_IDX);
@@ -2179,17 +2231,26 @@
 	wp = frame2win(win_altframe(win, NULL));
 
 	/*
-	 * Be careful: If autocommands delete the window, return now.
+	 * Be careful: If autocommands delete the window or cause this window
+	 * to be the last one left, return now.
 	 */
 	if (wp->w_buffer != curbuf)
 	{
 	    other_buffer = TRUE;
+	    win->w_closing = TRUE;
 	    apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
-	    if (!win_valid(win) || last_window())
+	    if (!win_valid(win))
+		return;
+	    win->w_closing = FALSE;
+	    if (last_window())
 		return;
 	}
+	win->w_closing = TRUE;
 	apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
-	if (!win_valid(win) || last_window())
+	if (!win_valid(win))
+	    return;
+	win->w_closing = FALSE;
+	if (last_window())
 	    return;
 # ifdef FEAT_EVAL
 	/* autocmds may abort script processing */
@@ -2206,17 +2267,41 @@
 	out_flush();
 #endif
 
+#ifdef FEAT_SYN_HL
+    /* Free independent synblock before the buffer is freed. */
+    if (win->w_buffer != NULL)
+	reset_synblock(win);
+#endif
+
     /*
      * Close the link to the buffer.
      */
-    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+    if (win->w_buffer != NULL)
+    {
+#ifdef FEAT_AUTOCMD
+	win->w_closing = TRUE;
+#endif
+	close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
+#ifdef FEAT_AUTOCMD
+	if (win_valid(win))
+	    win->w_closing = FALSE;
+#endif
+    }
+
+    if (only_one_window() && win_valid(win) && win->w_buffer == NULL
+	    && (last_window() || curtab != prev_curtab
+		|| close_last_window_tabpage(win, free_buf, prev_curtab)))
+	/* Autocommands have close all windows, quit now. */
+	getout(0);
 
     /* Autocommands may have closed the window already, or closed the only
      * other window or moved to another tab page. */
-    if (!win_valid(win) || last_window() || curtab != prev_curtab)
+    else if (!win_valid(win) || last_window() || curtab != prev_curtab
+	    || close_last_window_tabpage(win, free_buf, prev_curtab))
 	return;
 
-    /* Free the memory used for the window. */
+    /* Free the memory used for the window and get the window that received
+     * the screen space. */
     wp = win_free_mem(win, &dir, NULL);
 
     /* Make sure curwin isn't invalid.  It can cause severe trouble when
@@ -2267,7 +2352,7 @@
 	win_comp_pos();
     if (close_curwin)
     {
-	win_enter_ext(wp, FALSE, TRUE);
+	win_enter_ext(wp, FALSE, TRUE, TRUE, TRUE);
 #ifdef FEAT_AUTOCMD
 	if (other_buffer)
 	    /* careful: after this wp and win may be invalid! */
@@ -2297,7 +2382,7 @@
 
 /*
  * Close window "win" in tab page "tp", which is not the current tab page.
- * This may be the last window ih that tab page and result in closing the tab,
+ * This may be the last window in that tab page and result in closing the tab,
  * thus "tp" may become invalid!
  * Caller must check if buffer is hidden and whether the tabline needs to be
  * updated.
@@ -2313,8 +2398,13 @@
     tabpage_T   *ptp = NULL;
     int		free_tp = FALSE;
 
+#ifdef FEAT_AUTOCMD
+    if (win->w_closing || win->w_buffer->b_closing)
+	return; /* window is already being closed */
+#endif
+
     /* Close the link to the buffer. */
-    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
+    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
 
     /* Careful: Autocommands may have closed the tab page or made it the
      * current tab page.  */
@@ -3241,6 +3331,9 @@
     else
 	wp->w_farsi = W_CONV;
 #endif
+#ifdef FEAT_SYN_HL
+    wp->w_s = &wp->w_buffer->b_s;
+#endif
 }
 
 /*
@@ -3277,9 +3370,7 @@
     if (aucmd_win != NULL)
     {
 	win_init_some(aucmd_win, curwin);
-# ifdef FEAT_SCROLLBIND
-	aucmd_win->w_p_scb = FALSE;
-# endif
+	RESET_BINDING(aucmd_win);
 	new_frame(aucmd_win);
     }
 }
@@ -3320,10 +3411,8 @@
 	/* First window in new tab page, initialize it from "oldwin". */
 	win_init(curwin, oldwin, 0);
 
-# ifdef FEAT_SCROLLBIND
-	/* We don't want scroll-binding in the first window. */
-	curwin->w_p_scb = FALSE;
-# endif
+	/* We don't want cursor- and scroll-binding in the first window. */
+	RESET_BINDING(curwin);
     }
 #endif
 
@@ -3380,25 +3469,35 @@
 alloc_tabpage()
 {
     tabpage_T	*tp;
+# ifdef FEAT_GUI
+    int		i;
+# endif
+
 
     tp = (tabpage_T *)alloc_clear((unsigned)sizeof(tabpage_T));
-    if (tp != NULL)
+    if (tp == NULL)
+	return NULL;
+
+# ifdef FEAT_EVAL
+    /* init t: variables */
+    tp->tp_vars = dict_alloc();
+    if (tp->tp_vars == NULL)
     {
-# ifdef FEAT_GUI
-	int	i;
+	vim_free(tp);
+	return NULL;
+    }
+    init_var_dict(tp->tp_vars, &tp->tp_winvar, VAR_SCOPE);
+# endif
 
-	for (i = 0; i < 3; i++)
-	    tp->tp_prev_which_scrollbars[i] = -1;
+# ifdef FEAT_GUI
+    for (i = 0; i < 3; i++)
+	tp->tp_prev_which_scrollbars[i] = -1;
 # endif
 # ifdef FEAT_DIFF
-	tp->tp_diff_invalid = TRUE;
+    tp->tp_diff_invalid = TRUE;
 # endif
-#ifdef FEAT_EVAL
-	/* init t: variables */
-	init_var_dict(&tp->tp_vars, &tp->tp_winvar);
-#endif
-	tp->tp_ch_used = p_ch;
-    }
+    tp->tp_ch_used = p_ch;
+
     return tp;
 }
 
@@ -3414,8 +3513,19 @@
     for (idx = 0; idx < SNAP_COUNT; ++idx)
 	clear_snapshot(tp, idx);
 #ifdef FEAT_EVAL
-    vars_clear(&tp->tp_vars.dv_hashtab);	/* free all t: variables */
+    vars_clear(&tp->tp_vars->dv_hashtab);	/* free all t: variables */
+    hash_init(&tp->tp_vars->dv_hashtab);
+    unref_var_dict(tp->tp_vars);
+#endif
+
+#ifdef FEAT_PYTHON
+    python_tabpage_free(tp);
+#endif
+
+#ifdef FEAT_PYTHON3
+    python3_tabpage_free(tp);
 #endif
+
     vim_free(tp);
 }
 
@@ -3439,7 +3549,7 @@
 	return FAIL;
 
     /* Remember the current windows in this Tab page. */
-    if (leave_tabpage(curbuf) == FAIL)
+    if (leave_tabpage(curbuf, TRUE) == FAIL)
     {
 	vim_free(newtp);
 	return FAIL;
@@ -3484,14 +3594,14 @@
 
 	redraw_all_later(CLEAR);
 #ifdef FEAT_AUTOCMD
-	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
 	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
 #endif
 	return OK;
     }
 
     /* Failed, get back the previous Tab page */
-    enter_tabpage(curtab, curbuf);
+    enter_tabpage(curtab, curbuf, TRUE, TRUE);
     return FAIL;
 }
 
@@ -3597,14 +3707,15 @@
 
 /*
  * Prepare for leaving the current tab page.
- * When autocomands change "curtab" we don't leave the tab page and return
+ * When autocommands change "curtab" we don't leave the tab page and return
  * FAIL.
  * Careful: When OK is returned need to get a new tab page very very soon!
  */
     static int
-leave_tabpage(new_curbuf)
+leave_tabpage(new_curbuf, trigger_leave_autocmds)
     buf_T	*new_curbuf UNUSED;    /* what is going to be the new curbuf,
 				       NULL if unknown */
+    int		trigger_leave_autocmds UNUSED;
 {
     tabpage_T	*tp = curtab;
 
@@ -3612,18 +3723,21 @@
     reset_VIsual_and_resel();	/* stop Visual mode */
 #endif
 #ifdef FEAT_AUTOCMD
-    if (new_curbuf != curbuf)
+    if (trigger_leave_autocmds)
     {
-	apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+	if (new_curbuf != curbuf)
+	{
+	    apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+	    if (curtab != tp)
+		return FAIL;
+	}
+	apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+	if (curtab != tp)
+	    return FAIL;
+	apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
 	if (curtab != tp)
 	    return FAIL;
     }
-    apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
-    if (curtab != tp)
-	return FAIL;
-    apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
-    if (curtab != tp)
-	return FAIL;
 #endif
 #if defined(FEAT_GUI)
     /* Remove the scrollbars.  They may be added back later. */
@@ -3644,11 +3758,15 @@
 /*
  * Start using tab page "tp".
  * Only to be used after leave_tabpage() or freeing the current tab page.
+ * Only trigger *Enter autocommands when trigger_enter_autocmds is TRUE.
+ * Only trigger *Leave autocommands when trigger_leave_autocmds is TRUE.
  */
     static void
-enter_tabpage(tp, old_curbuf)
+enter_tabpage(tp, old_curbuf, trigger_enter_autocmds, trigger_leave_autocmds)
     tabpage_T	*tp;
     buf_T	*old_curbuf UNUSED;
+    int		trigger_enter_autocmds UNUSED;
+    int		trigger_leave_autocmds UNUSED;
 {
     int		old_off = tp->tp_firstwin->w_winrow;
     win_T	*next_prevwin = tp->tp_prevwin;
@@ -3661,16 +3779,10 @@
     /* We would like doing the TabEnter event first, but we don't have a
      * valid current window yet, which may break some commands.
      * This triggers autocommands, thus may make "tp" invalid. */
-    win_enter_ext(tp->tp_curwin, FALSE, TRUE);
+    win_enter_ext(tp->tp_curwin, FALSE, TRUE,
+			      trigger_enter_autocmds, trigger_leave_autocmds);
     prevwin = next_prevwin;
 
-#ifdef FEAT_AUTOCMD
-    apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
-
-    if (old_curbuf != curbuf)
-	apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
-#endif
-
     last_status(FALSE);		/* status line may appear or disappear */
     (void)win_comp_pos();	/* recompute w_winrow for all windows */
     must_redraw = CLEAR;	/* need to redraw everything */
@@ -3700,6 +3812,17 @@
     gui_may_update_scrollbars();
 #endif
 
+#ifdef FEAT_AUTOCMD
+    /* Apply autocommands after updating the display, when 'rows' and
+     * 'columns' have been set correctly. */
+    if (trigger_enter_autocmds)
+    {
+	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+	if (old_curbuf != curbuf)
+	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+    }
+#endif
+
     redraw_all_later(CLEAR);
 }
 
@@ -3773,7 +3896,7 @@
 	}
     }
 
-    goto_tabpage_tp(tp);
+    goto_tabpage_tp(tp, TRUE, TRUE);
 
 #ifdef FEAT_GUI_TABLINE
     if (gui_use_tabline())
@@ -3783,21 +3906,28 @@
 
 /*
  * Go to tabpage "tp".
+ * Only trigger *Enter autocommands when trigger_enter_autocmds is TRUE.
+ * Only trigger *Leave autocommands when trigger_leave_autocmds is TRUE.
  * Note: doesn't update the GUI tab.
  */
     void
-goto_tabpage_tp(tp)
+goto_tabpage_tp(tp, trigger_enter_autocmds, trigger_leave_autocmds)
     tabpage_T	*tp;
+    int		trigger_enter_autocmds;
+    int		trigger_leave_autocmds;
 {
     /* Don't repeat a message in another tab page. */
     set_keep_msg(NULL, 0);
 
-    if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
+    if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer,
+					trigger_leave_autocmds) == OK)
     {
 	if (valid_tabpage(tp))
-	    enter_tabpage(tp, curbuf);
+	    enter_tabpage(tp, curbuf, trigger_enter_autocmds,
+		    trigger_leave_autocmds);
 	else
-	    enter_tabpage(curtab, curbuf);
+	    enter_tabpage(curtab, curbuf, trigger_enter_autocmds,
+		    trigger_leave_autocmds);
     }
 }
 
@@ -3810,7 +3940,7 @@
     tabpage_T	*tp;
     win_T	*wp;
 {
-    goto_tabpage_tp(tp);
+    goto_tabpage_tp(tp, TRUE, TRUE);
     if (curtab == tp && win_valid(wp))
     {
 	win_enter(wp, TRUE);
@@ -3848,7 +3978,7 @@
     }
 
     /* Re-insert it at the specified position. */
-    if (n == 0)
+    if (n <= 0)
     {
 	curtab->tp_next = first_tabpage;
 	first_tabpage = curtab;
@@ -3906,9 +4036,10 @@
 
 #ifdef FEAT_CONCEAL
     /* Conceal cursor line in previous window, unconceal in current window. */
-    if (win_valid(owp))
+    if (win_valid(owp) && owp->w_p_cole > 0 && !msg_scrolled)
 	update_single_line(owp, owp->w_cursor.lnum);
-    update_single_line(curwin, curwin->w_cursor.lnum);
+    if (curwin->w_p_cole > 0 && !msg_scrolled)
+	need_cursor_line_redraw = TRUE;
 #endif
 }
 
@@ -3933,6 +4064,27 @@
 }
 #endif
 
+#if (defined(FEAT_WINDOWS) && (defined(FEAT_PYTHON) || defined(FEAT_PYTHON3))) \
+	|| defined(PROTO)
+/*
+ * Find the tabpage for window "win".
+ */
+    tabpage_T *
+win_find_tabpage(win)
+    win_T	*win;
+{
+    win_T	*wp;
+    tabpage_T	*tp;
+
+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+	for (wp = (tp == curtab ? firstwin : tp->tp_firstwin);
+						  wp != NULL; wp = wp->w_next)
+	    if (wp == win)
+		return tp;
+    return NULL;
+}
+#endif
+
 #ifdef FEAT_VERTSPLIT
 /*
  * Move to window above or below "count" times.
@@ -4069,7 +4221,7 @@
     win_T	*wp;
     int		undo_sync;
 {
-    win_enter_ext(wp, undo_sync, FALSE);
+    win_enter_ext(wp, undo_sync, FALSE, TRUE, TRUE);
 }
 
 /*
@@ -4078,10 +4230,12 @@
  * been closed and isn't valid.
  */
     static void
-win_enter_ext(wp, undo_sync, curwin_invalid)
+win_enter_ext(wp, undo_sync, curwin_invalid, trigger_enter_autocmds, trigger_leave_autocmds)
     win_T	*wp;
     int		undo_sync;
     int		curwin_invalid;
+    int		trigger_enter_autocmds UNUSED;
+    int		trigger_leave_autocmds UNUSED;
 {
 #ifdef FEAT_AUTOCMD
     int		other_buffer = FALSE;
@@ -4091,7 +4245,7 @@
 	return;
 
 #ifdef FEAT_AUTOCMD
-    if (!curwin_invalid)
+    if (!curwin_invalid && trigger_leave_autocmds)
     {
 	/*
 	 * Be careful: If autocommands delete the window, return now.
@@ -4160,9 +4314,12 @@
     }
 
 #ifdef FEAT_AUTOCMD
-    apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
-    if (other_buffer)
-	apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+    if (trigger_enter_autocmds)
+    {
+	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+	if (other_buffer)
+	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+    }
 #endif
 
 #ifdef FEAT_TITLE
@@ -4271,78 +4428,86 @@
     win_T	*after UNUSED;
     int		hidden UNUSED;
 {
-    win_T	*newwin;
+    win_T	*new_wp;
 
     /*
      * allocate window structure and linesizes arrays
      */
-    newwin = (win_T *)alloc_clear((unsigned)sizeof(win_T));
-    if (newwin != NULL && win_alloc_lines(newwin) == FAIL)
+    new_wp = (win_T *)alloc_clear((unsigned)sizeof(win_T));
+    if (new_wp == NULL)
+	return NULL;
+
+    if (win_alloc_lines(new_wp) == FAIL)
     {
-	vim_free(newwin);
-	newwin = NULL;
+	vim_free(new_wp);
+	return NULL;
     }
 
-    if (newwin != NULL)
+#ifdef FEAT_EVAL
+    /* init w: variables */
+    new_wp->w_vars = dict_alloc();
+    if (new_wp->w_vars == NULL)
     {
+	win_free_lsize(new_wp);
+	vim_free(new_wp);
+	return NULL;
+    }
+    init_var_dict(new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
+#endif
+
 #ifdef FEAT_AUTOCMD
-	/* Don't execute autocommands while the window is not properly
-	 * initialized yet.  gui_create_scrollbar() may trigger a FocusGained
-	 * event. */
-	block_autocmds();
+    /* Don't execute autocommands while the window is not properly
+     * initialized yet.  gui_create_scrollbar() may trigger a FocusGained
+     * event. */
+    block_autocmds();
 #endif
-	/*
-	 * link the window in the window list
-	 */
+    /*
+     * link the window in the window list
+     */
 #ifdef FEAT_WINDOWS
-	if (!hidden)
-	    win_append(after, newwin);
+    if (!hidden)
+	win_append(after, new_wp);
 #endif
 #ifdef FEAT_VERTSPLIT
-	newwin->w_wincol = 0;
-	newwin->w_width = Columns;
+    new_wp->w_wincol = 0;
+    new_wp->w_width = Columns;
 #endif
 
-	/* position the display and the cursor at the top of the file. */
-	newwin->w_topline = 1;
+    /* position the display and the cursor at the top of the file. */
+    new_wp->w_topline = 1;
 #ifdef FEAT_DIFF
-	newwin->w_topfill = 0;
+    new_wp->w_topfill = 0;
 #endif
-	newwin->w_botline = 2;
-	newwin->w_cursor.lnum = 1;
+    new_wp->w_botline = 2;
+    new_wp->w_cursor.lnum = 1;
 #ifdef FEAT_SCROLLBIND
-	newwin->w_scbind_pos = 1;
+    new_wp->w_scbind_pos = 1;
 #endif
 
-	/* We won't calculate w_fraction until resizing the window */
-	newwin->w_fraction = 0;
-	newwin->w_prev_fraction_row = -1;
+    /* We won't calculate w_fraction until resizing the window */
+    new_wp->w_fraction = 0;
+    new_wp->w_prev_fraction_row = -1;
 
 #ifdef FEAT_GUI
-	if (gui.in_use)
-	{
-	    gui_create_scrollbar(&newwin->w_scrollbars[SBAR_LEFT],
-		    SBAR_LEFT, newwin);
-	    gui_create_scrollbar(&newwin->w_scrollbars[SBAR_RIGHT],
-		    SBAR_RIGHT, newwin);
-	}
-#endif
-#ifdef FEAT_EVAL
-	/* init w: variables */
-	init_var_dict(&newwin->w_vars, &newwin->w_winvar);
+    if (gui.in_use)
+    {
+	gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_LEFT],
+		SBAR_LEFT, new_wp);
+	gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_RIGHT],
+		SBAR_RIGHT, new_wp);
+    }
 #endif
 #ifdef FEAT_FOLDING
-	foldInitWin(newwin);
+    foldInitWin(new_wp);
 #endif
 #ifdef FEAT_AUTOCMD
-	unblock_autocmds();
+    unblock_autocmds();
 #endif
 #ifdef FEAT_SEARCH_EXTRA
-	newwin->w_match_head = NULL;
-	newwin->w_next_match_id = 4;
+    new_wp->w_match_head = NULL;
+    new_wp->w_next_match_id = 4;
 #endif
-    }
-    return newwin;
+    return new_wp;
 }
 
 #if defined(FEAT_WINDOWS) || defined(PROTO)
@@ -4402,7 +4567,9 @@
     clear_winopt(&wp->w_allbuf_opt);
 
 #ifdef FEAT_EVAL
-    vars_clear(&wp->w_vars.dv_hashtab);	    /* free all w: variables */
+    vars_clear(&wp->w_vars->dv_hashtab);	/* free all w: variables */
+    hash_init(&wp->w_vars->dv_hashtab);
+    unref_var_dict(wp->w_vars);
 #endif
 
     if (prevwin == wp)
@@ -4435,7 +4602,6 @@
 #endif /* FEAT_GUI */
 
 #ifdef FEAT_SYN_HL
-    reset_synblock(wp);  /* free independent synblock */
     vim_free(wp->w_p_cc_cols);
 #endif
 
@@ -4589,7 +4755,7 @@
     /* First try setting the heights of windows with 'winfixheight'.  If
      * that doesn't result in the right height, forget about that option. */
     frame_new_height(topframe, h, FALSE, TRUE);
-    if (topframe->fr_height != h)
+    if (!frame_check_height(topframe, h))
 	frame_new_height(topframe, h, FALSE, FALSE);
 
     (void)win_comp_pos();		/* recompute w_winrow and w_wincol */
@@ -4623,7 +4789,7 @@
     /* First try setting the widths of windows with 'winfixwidth'.  If that
      * doesn't result in the right width, forget about that option. */
     frame_new_width(topframe, (int)Columns, FALSE, TRUE);
-    if (topframe->fr_width != Columns)
+    if (!frame_check_width(topframe, Columns))
 	frame_new_width(topframe, (int)Columns, FALSE, FALSE);
 
     (void)win_comp_pos();		/* recompute w_winrow and w_wincol */
@@ -5459,19 +5625,31 @@
 
 #endif /* FEAT_WINDOWS */
 
+#define FRACTION_MULT	16384L
+
+/*
+ * Set wp->w_fraction for the current w_wrow and w_height.
+ */
+    static void
+set_fraction(wp)
+    win_T	*wp;
+{
+    wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
+				    + FRACTION_MULT / 2) / (long)wp->w_height;
+}
+
 /*
  * Set the height of a window.
  * This takes care of the things inside the window, not what happens to the
  * window position, the frame or to other windows.
  */
-    static void
+    void
 win_new_height(wp, height)
     win_T	*wp;
     int		height;
 {
     linenr_T	lnum;
     int		sline, line_size;
-#define FRACTION_MULT	16384L
 
     /* Don't want a negative height.  Happens when splitting a tiny window.
      * Will equalize heights soon to fix it. */
@@ -5481,8 +5659,7 @@
 	return;	    /* nothing to do */
 
     if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
-	wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
-				    + FRACTION_MULT / 2) / (long)wp->w_height;
+	set_fraction(wp);
 
     wp->w_height = height;
     wp->w_skipcol = 0;
@@ -5606,7 +5783,7 @@
 /*
  * Set the width of a window.
  */
-    static void
+    void
 win_new_width(wp, width)
     win_T	*wp;
     int		width;
@@ -6193,7 +6370,8 @@
 	return FALSE;
 
     for (wp = firstwin; wp != NULL; wp = wp->w_next)
-	if ((!((wp->w_buffer->b_help && !curbuf->b_help)
+	if (wp->w_buffer != NULL
+		&& (!((wp->w_buffer->b_help && !curbuf->b_help)
 # ifdef FEAT_QUICKFIX
 		    || wp->w_p_pvw
 # endif
@@ -6399,6 +6577,131 @@
 
 #endif
 
+#if defined(FEAT_EVAL) || defined(PROTO)
+/*
+ * Set "win" to be the curwin and "tp" to be the current tab page.
+ * restore_win() MUST be called to undo.
+ * No autocommands will be executed.
+ * When "no_display" is TRUE the display won't be affected, no redraw is
+ * triggered, another tabpage access is limited.
+ * Returns FAIL if switching to "win" failed.
+ */
+    int
+switch_win(save_curwin, save_curtab, win, tp, no_display)
+    win_T	**save_curwin UNUSED;
+    tabpage_T	**save_curtab UNUSED;
+    win_T	*win UNUSED;
+    tabpage_T	*tp UNUSED;
+    int		no_display UNUSED;
+{
+# ifdef FEAT_AUTOCMD
+    block_autocmds();
+# endif
+# ifdef FEAT_WINDOWS
+    *save_curwin = curwin;
+    if (tp != NULL)
+    {
+	*save_curtab = curtab;
+	if (no_display)
+	{
+	    curtab->tp_firstwin = firstwin;
+	    curtab->tp_lastwin = lastwin;
+	    curtab = tp;
+	    firstwin = curtab->tp_firstwin;
+	    lastwin = curtab->tp_lastwin;
+	}
+	else
+	    goto_tabpage_tp(tp, FALSE, FALSE);
+    }
+    if (!win_valid(win))
+    {
+# ifdef FEAT_AUTOCMD
+	unblock_autocmds();
+# endif
+	return FAIL;
+    }
+    curwin = win;
+    curbuf = curwin->w_buffer;
+# endif
+    return OK;
+}
+
+/*
+ * Restore current tabpage and window saved by switch_win(), if still valid.
+ * When "no_display" is TRUE the display won't be affected, no redraw is
+ * triggered.
+ */
+    void
+restore_win(save_curwin, save_curtab, no_display)
+    win_T	*save_curwin UNUSED;
+    tabpage_T	*save_curtab UNUSED;
+    int		no_display UNUSED;
+{
+# ifdef FEAT_WINDOWS
+    if (save_curtab != NULL && valid_tabpage(save_curtab))
+    {
+	if (no_display)
+	{
+	    curtab->tp_firstwin = firstwin;
+	    curtab->tp_lastwin = lastwin;
+	    curtab = save_curtab;
+	    firstwin = curtab->tp_firstwin;
+	    lastwin = curtab->tp_lastwin;
+	}
+	else
+	    goto_tabpage_tp(save_curtab, FALSE, FALSE);
+    }
+    if (win_valid(save_curwin))
+    {
+	curwin = save_curwin;
+	curbuf = curwin->w_buffer;
+    }
+# endif
+# ifdef FEAT_AUTOCMD
+    unblock_autocmds();
+# endif
+}
+
+/*
+ * Make "buf" the current buffer.  restore_buffer() MUST be called to undo.
+ * No autocommands will be executed.  Use aucmd_prepbuf() if there are any.
+ */
+    void
+switch_buffer(save_curbuf, buf)
+    buf_T *buf;
+    buf_T **save_curbuf;
+{
+# ifdef FEAT_AUTOCMD
+    block_autocmds();
+# endif
+    *save_curbuf = curbuf;
+    --curbuf->b_nwindows;
+    curbuf = buf;
+    curwin->w_buffer = buf;
+    ++curbuf->b_nwindows;
+}
+
+/*
+ * Restore the current buffer after using switch_buffer().
+ */
+    void
+restore_buffer(save_curbuf)
+    buf_T *save_curbuf;
+{
+# ifdef FEAT_AUTOCMD
+    unblock_autocmds();
+# endif
+    /* Check for valid buffer, just in case. */
+    if (buf_valid(save_curbuf))
+    {
+	--curbuf->b_nwindows;
+	curwin->w_buffer = save_curbuf;
+	curbuf = save_curbuf;
+	++curbuf->b_nwindows;
+    }
+}
+#endif
+
 #if (defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)) || defined(PROTO)
 /*
  * Return TRUE if there is any vertically split window.
@@ -6548,7 +6851,7 @@
 	wp->w_match_head = cur->next;
     else
 	prev->next = cur->next;
-    vim_free(cur->match.regprog);
+    vim_regfree(cur->match.regprog);
     vim_free(cur->pattern);
     vim_free(cur);
     redraw_later(SOME_VALID);
@@ -6567,7 +6870,7 @@
     while (wp->w_match_head != NULL)
     {
 	m = wp->w_match_head->next;
-	vim_free(wp->w_match_head->match.regprog);
+	vim_regfree(wp->w_match_head->match.regprog);
 	vim_free(wp->w_match_head->pattern);
 	vim_free(wp->w_match_head);
 	wp->w_match_head = m;
@@ -6591,3 +6894,84 @@
     return cur;
 }
 #endif
+
+#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
+    int
+get_win_number(win_T *wp, win_T *first_win)
+{
+    int		i = 1;
+    win_T	*w;
+
+    for (w = first_win; w != NULL && w != wp; w = W_NEXT(w))
+	++i;
+
+    if (w == NULL)
+	return 0;
+    else
+	return i;
+}
+
+    int
+get_tab_number(tabpage_T *tp UNUSED)
+{
+    int		i = 1;
+# ifdef FEAT_WINDOWS
+    tabpage_T	*t;
+
+    for (t = first_tabpage; t != NULL && t != tp; t = t->tp_next)
+	++i;
+
+    if (t == NULL)
+	return 0;
+    else
+# endif
+	return i;
+}
+#endif
+
+#ifdef FEAT_WINDOWS
+/*
+ * Return TRUE if "topfrp" and its children are at the right height.
+ */
+    static int
+frame_check_height(topfrp, height)
+    frame_T *topfrp;
+    int	    height;
+{
+    frame_T *frp;
+
+    if (topfrp->fr_height != height)
+	return FALSE;
+
+    if (topfrp->fr_layout == FR_ROW)
+	for (frp = topfrp->fr_child; frp != NULL; frp = frp->fr_next)
+	    if (frp->fr_height != height)
+		return FALSE;
+
+    return TRUE;
+}
+#endif
+
+#ifdef FEAT_VERTSPLIT
+/*
+ * Return TRUE if "topfrp" and its children are at the right width.
+ */
+    static int
+frame_check_width(topfrp, width)
+    frame_T *topfrp;
+    int	    width;
+{
+    frame_T *frp;
+
+    if (topfrp->fr_width != width)
+	return FALSE;
+
+    if (topfrp->fr_layout == FR_COL)
+	for (frp = topfrp->fr_child; frp != NULL; frp = frp->fr_next)
+	    if (frp->fr_width != width)
+		return FALSE;
+
+    return TRUE;
+}
+#endif
+
diff -Naur vim73.orig/src/workshop.c vim73/src/workshop.c
--- vim73.orig/src/workshop.c	2010-08-08 13:18:24.000000000 +0000
+++ vim73/src/workshop.c	2013-08-04 19:09:11.423941413 +0000
@@ -16,7 +16,6 @@
 #include <sys/types.h>
 #include <netdb.h>
 #include <netinet/in.h>
-#include <errno.h>
 #include <sys/socket.h>
 #ifdef HAVE_LIBGEN_H
 # include <libgen.h>
diff -Naur vim73.orig/src/xpm/COPYRIGHT vim73/src/xpm/COPYRIGHT
--- vim73.orig/src/xpm/COPYRIGHT	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xpm/COPYRIGHT	2013-08-04 19:09:11.427274736 +0000
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 1989-95 GROUPE BULL
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of GROUPE BULL shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from GROUPE BULL.
+ */
+
+Arnaud LE HORS      BULL Research FRANCE -- Koala Project 
+                    (XPM - X PixMap format version 2 & 3)
+    Internet:       lehors@sophia.inria.fr
+Surface Mail:       Arnaud LE HORS, INRIA - Sophia Antipolis, 
+                    2004, route des Lucioles, 06565 Valbonne Cedex -- FRANCE
+ Voice phone:       (33) 93.65.77.71, Fax: (33) 93 65 77 66, Telex: 97 00 50 F
diff -Naur vim73.orig/src/xpm/README.txt vim73/src/xpm/README.txt
--- vim73.orig/src/xpm/README.txt	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xpm/README.txt	2013-08-04 19:09:11.430608059 +0000
@@ -0,0 +1,26 @@
+This is XPM library compiled for Windows which is intended for use with Vim
+'signs' feature.
+
+Libraries in x86 directory were compiled with MSVC6 and MinGW. Proposed
+commands to compile Vim are:
+
+Any version of MSVC starting from version 6.0:
+nmake -f Make_mvc.mak GUI=yes CSCOPE=yes NETBEANS=yes XPM=e:\hg\xpm\x86
+
+MinGW:
+mingw32-make -f Make_ming.mak GUI=yes CSCOPE=yes XPM=e:/hg/xpm/x86
+
+MinGW 64 for x64:
+mingw32-make -f Make_ming.mak GUI=yes ARCH=x86-64 XPM=E:\HG\xpm\x64
+
+Microsoft Visual C++ on x64 (tested with versions 2008 and 2010):
+nmake -f Make_mvc.mak GUI=yes CSCOPE=yes XPM=E:\HG\xpm\x64
+
+To test, open some file in Vim and execute commands below:
+:exe 'sign define vimxpm icon='.$VIMRUNTIME.'\\vim32x32.xpm'
+:exe 'sign place 1 line=1 name=vimxpm file='.expand('%:p')
+
+
+See COPYRIGHT for XPM licence.
+
+If you have questions please email sergey.khorev@gmail.com.
diff -Naur vim73.orig/src/xpm/include/simx.h vim73/src/xpm/include/simx.h
--- vim73.orig/src/xpm/include/simx.h	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xpm/include/simx.h	2013-08-04 19:09:11.430608059 +0000
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 1989-95 GROUPE BULL
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of GROUPE BULL shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from GROUPE BULL.
+ */
+
+/*****************************************************************************\
+* simx.h: 0.1a                                                                *
+*                                                                             *
+* This emulates some Xlib functionality for MSW. It's not a general solution, *
+* it is close related to XPM-lib. It is only intended to satisfy what is need *
+* there. Thus allowing to read XPM files under MS windows.                    *
+*                                                                             *
+* Developed by HeDu 3/94 (hedu@cul-ipn.uni-kiel.de)                           *
+\*****************************************************************************/
+
+
+#ifndef _SIMX_H
+#define _SIMX_H
+
+#ifdef FOR_MSW
+
+#include "windows.h"			/* MS windows GDI types */
+
+/*
+ * minimal portability layer between ansi and KR C
+ */
+/* this comes from xpm.h, and is here again, to avoid complicated
+    includes, since this is included from xpm.h */
+/* these defines get undefed at the end of this file */
+#if __STDC__ || defined(__cplusplus) || defined(c_plusplus)
+ /* ANSI || C++ */
+#define FUNC(f, t, p) extern t f p
+#define LFUNC(f, t, p) static t f p
+#else /* k&R */
+#define FUNC(f, t, p) extern t f()
+#define LFUNC(f, t, p) static t f()
+#endif
+
+
+FUNC(boundCheckingMalloc, void *, (long s));
+FUNC(boundCheckingCalloc, void *, (long num, long s));
+FUNC(boundCheckingRealloc, void *, (void *p, long s));
+
+/* define MSW types for X window types,
+   I don't know much about MSW, but the following defines do the job */
+
+typedef HDC Display;			/* this should be similar */
+typedef void *Screen;			/* not used */
+typedef void *Visual;			/* not used yet, is for GRAY, COLOR,
+					 * MONO */
+
+typedef void *Colormap;			/* should be COLORPALETTE, not done
+					 * yet */
+
+typedef COLORREF Pixel;
+
+#define PIXEL_ALREADY_TYPEDEFED		/* to let xpm.h know about it */
+
+typedef struct {
+    Pixel pixel;
+    BYTE red, green, blue;
+}      XColor;
+
+typedef struct {
+    HBITMAP bitmap;
+    unsigned int width;
+    unsigned int height;
+    unsigned int depth;
+}      XImage;
+
+#if defined(__cplusplus) || defined(c_plusplus)
+extern "C" {
+#endif
+/* some replacements for X... functions */
+
+/* XDefaultXXX */
+    FUNC(XDefaultVisual, Visual *, (Display *display, Screen *screen));
+    FUNC(XDefaultScreen, Screen *, (Display *d));
+    FUNC(XDefaultColormap, Colormap *, (Display *display, Screen *screen));
+    FUNC(XDefaultDepth, int, (Display *d, Screen *s));
+
+/* color related */
+    FUNC(XParseColor, int, (Display *, Colormap *, char *, XColor *));
+    FUNC(XAllocColor, int, (Display *, Colormap *, XColor *));
+    FUNC(XQueryColors, void, (Display *display, Colormap *colormap,
+			      XColor *xcolors, int ncolors));
+    FUNC(XFreeColors, int, (Display *d, Colormap cmap,
+			    unsigned long pixels[],
+			    int npixels, unsigned long planes));
+/* XImage */
+    FUNC(XCreateImage, XImage *, (Display *, Visual *, int depth, int format,
+				  int x, int y, int width, int height,
+				  int pad, int foo));
+
+/* free and destroy bitmap */
+    FUNC(XDestroyImage, void /* ? */ , (XImage *));
+/* free only, bitmap remains */
+    FUNC(XImageFree, void, (XImage *));
+#if defined(__cplusplus) || defined(c_plusplus)
+} /* end of extern "C" */
+#endif /* cplusplus */
+
+#define ZPixmap 1			/* not really used */
+#define XYBitmap 1			/* not really used */
+
+#ifndef True
+#define True 1
+#define False 0
+#endif
+#ifndef Bool
+typedef BOOL Bool;		/* take MSW bool */
+#endif
+/* make these local here, simx.c gets the same from xpm.h */
+#undef LFUNC
+#undef FUNC
+
+#endif /* def FOR_MSW */
+
+#endif /* _SIMX_H */
diff -Naur vim73.orig/src/xpm/include/xpm.h vim73/src/xpm/include/xpm.h
--- vim73.orig/src/xpm/include/xpm.h	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xpm/include/xpm.h	2013-08-04 19:09:11.430608059 +0000
@@ -0,0 +1,501 @@
+/*
+ * Copyright (C) 1989-95 GROUPE BULL
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of GROUPE BULL shall not be
+ * used in advertising or otherwise to promote the sale, use or other dealings
+ * in this Software without prior written authorization from GROUPE BULL.
+ */
+
+/*****************************************************************************\
+* xpm.h:                                                                      *
+*                                                                             *
+*  XPM library                                                                *
+*  Include file                                                               *
+*                                                                             *
+*  Developed by Arnaud Le Hors                                                *
+\*****************************************************************************/
+
+/*
+ * The code related to FOR_MSW has been added by
+ * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
+ */
+
+/*
+ * The code related to AMIGA has been added by
+ * Lorens Younes (d93-hyo@nada.kth.se) 4/96
+ */
+
+#ifndef XPM_h
+#define XPM_h
+
+/*
+ * first some identification numbers:
+ * the version and revision numbers are determined with the following rule:
+ * SO Major number = LIB minor version number.
+ * SO Minor number = LIB sub-minor version number.
+ * e.g: Xpm version 3.2f
+ *      we forget the 3 which is the format number, 2 gives 2, and f gives 6.
+ *      thus we have XpmVersion = 2 and XpmRevision = 6
+ *      which gives  SOXPMLIBREV = 2.6
+ *
+ * Then the XpmIncludeVersion number is built from these numbers.
+ */
+#define XpmFormat 3
+#define XpmVersion 4
+#define XpmRevision 11
+#define XpmIncludeVersion ((XpmFormat * 100 + XpmVersion) * 100 + XpmRevision)
+
+#ifndef XPM_NUMBERS
+
+#ifdef FOR_MSW
+# define SYSV			/* uses memcpy string.h etc. */
+# include <malloc.h>
+# include "simx.h"		/* defines some X stuff using MSW types */
+#define NEED_STRCASECMP		/* at least for MSVC++ */
+#else /* FOR_MSW */
+# ifdef AMIGA
+#  include "amigax.h"
+# else /* not AMIGA */
+#  include <X11/Xlib.h>
+#  include <X11/Xutil.h>
+# endif /* not AMIGA */
+#endif /* FOR_MSW */
+
+/* let's define Pixel if it is not done yet */
+#if ! defined(_XtIntrinsic_h) && ! defined(PIXEL_ALREADY_TYPEDEFED)
+typedef unsigned long Pixel;	/* Index into colormap */
+# define PIXEL_ALREADY_TYPEDEFED
+#endif
+
+/* make sure we know whether function prototypes are needed or not */
+#ifndef NeedFunctionPrototypes
+# if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
+#  define NeedFunctionPrototypes 1
+# else
+#  define NeedFunctionPrototypes 0
+# endif
+#endif
+
+
+/* Return ErrorStatus codes:
+ * null     if full success
+ * positive if partial success
+ * negative if failure
+ */
+
+#define XpmColorError    1
+#define XpmSuccess       0
+#define XpmOpenFailed   -1
+#define XpmFileInvalid  -2
+#define XpmNoMemory     -3
+#define XpmColorFailed  -4
+
+typedef struct {
+    char *name;			/* Symbolic color name */
+    char *value;		/* Color value */
+    Pixel pixel;		/* Color pixel */
+}      XpmColorSymbol;
+
+typedef struct {
+    char *name;			/* name of the extension */
+    unsigned int nlines;	/* number of lines in this extension */
+    char **lines;		/* pointer to the extension array of strings */
+}      XpmExtension;
+
+typedef struct {
+    char *string;		/* characters string */
+    char *symbolic;		/* symbolic name */
+    char *m_color;		/* monochrom default */
+    char *g4_color;		/* 4 level grayscale default */
+    char *g_color;		/* other level grayscale default */
+    char *c_color;		/* color default */
+}      XpmColor;
+
+typedef struct {
+    unsigned int width;		/* image width */
+    unsigned int height;	/* image height */
+    unsigned int cpp;		/* number of characters per pixel */
+    unsigned int ncolors;	/* number of colors */
+    XpmColor *colorTable;	/* list of related colors */
+    unsigned int *data;		/* image data */
+}      XpmImage;
+
+typedef struct {
+    unsigned long valuemask;	/* Specifies which attributes are defined */
+    char *hints_cmt;		/* Comment of the hints section */
+    char *colors_cmt;		/* Comment of the colors section */
+    char *pixels_cmt;		/* Comment of the pixels section */
+    unsigned int x_hotspot;	/* Returns the x hotspot's coordinate */
+    unsigned int y_hotspot;	/* Returns the y hotspot's coordinate */
+    unsigned int nextensions;	/* number of extensions */
+    XpmExtension *extensions;	/* pointer to array of extensions */
+}      XpmInfo;
+
+typedef int (*XpmAllocColorFunc)(
+#if NeedFunctionPrototypes
+    Display*			/* display */,
+    Colormap			/* colormap */,
+    char*			/* colorname */,
+    XColor*			/* xcolor */,
+    void*			/* closure */
+#endif
+);
+
+typedef int (*XpmFreeColorsFunc)(
+#if NeedFunctionPrototypes
+    Display*			/* display */,
+    Colormap			/* colormap */,
+    Pixel*			/* pixels */,
+    int				/* npixels */,
+    void*			/* closure */
+#endif
+);
+
+typedef struct {
+    unsigned long valuemask;		/* Specifies which attributes are
+					   defined */
+
+    Visual *visual;			/* Specifies the visual to use */
+    Colormap colormap;			/* Specifies the colormap to use */
+    unsigned int depth;			/* Specifies the depth */
+    unsigned int width;			/* Returns the width of the created
+					   pixmap */
+    unsigned int height;		/* Returns the height of the created
+					   pixmap */
+    unsigned int x_hotspot;		/* Returns the x hotspot's
+					   coordinate */
+    unsigned int y_hotspot;		/* Returns the y hotspot's
+					   coordinate */
+    unsigned int cpp;			/* Specifies the number of char per
+					   pixel */
+    Pixel *pixels;			/* List of used color pixels */
+    unsigned int npixels;		/* Number of used pixels */
+    XpmColorSymbol *colorsymbols;	/* List of color symbols to override */
+    unsigned int numsymbols;		/* Number of symbols */
+    char *rgb_fname;			/* RGB text file name */
+    unsigned int nextensions;		/* Number of extensions */
+    XpmExtension *extensions;		/* List of extensions */
+
+    unsigned int ncolors;               /* Number of colors */
+    XpmColor *colorTable;               /* List of colors */
+/* 3.2 backward compatibility code */
+    char *hints_cmt;                    /* Comment of the hints section */
+    char *colors_cmt;                   /* Comment of the colors section */
+    char *pixels_cmt;                   /* Comment of the pixels section */
+/* end 3.2 bc */
+    unsigned int mask_pixel;            /* Color table index of transparent
+                                           color */
+
+    /* Color Allocation Directives */
+    Bool exactColors;			/* Only use exact colors for visual */
+    unsigned int closeness;		/* Allowable RGB deviation */
+    unsigned int red_closeness;		/* Allowable red deviation */
+    unsigned int green_closeness;	/* Allowable green deviation */
+    unsigned int blue_closeness;	/* Allowable blue deviation */
+    int color_key;			/* Use colors from this color set */
+
+    Pixel *alloc_pixels;		/* Returns the list of alloc'ed color
+					   pixels */
+    int nalloc_pixels;			/* Returns the number of alloc'ed
+					   color pixels */
+
+    Bool alloc_close_colors;    	/* Specify whether close colors should
+					   be allocated using XAllocColor
+					   or not */
+    int bitmap_format;			/* Specify the format of 1bit depth
+					   images: ZPixmap or XYBitmap */
+
+    /* Color functions */
+    XpmAllocColorFunc alloc_color;	/* Application color allocator */
+    XpmFreeColorsFunc free_colors;	/* Application color de-allocator */
+    void *color_closure;		/* Application private data to pass to
+					   alloc_color and free_colors */
+
+}      XpmAttributes;
+
+/* XpmAttributes value masks bits */
+#define XpmVisual	   (1L<<0)
+#define XpmColormap	   (1L<<1)
+#define XpmDepth	   (1L<<2)
+#define XpmSize		   (1L<<3)	/* width & height */
+#define XpmHotspot	   (1L<<4)	/* x_hotspot & y_hotspot */
+#define XpmCharsPerPixel   (1L<<5)
+#define XpmColorSymbols	   (1L<<6)
+#define XpmRgbFilename	   (1L<<7)
+/* 3.2 backward compatibility code */
+#define XpmInfos	   (1L<<8)
+#define XpmReturnInfos	   XpmInfos
+/* end 3.2 bc */
+#define XpmReturnPixels	   (1L<<9)
+#define XpmExtensions      (1L<<10)
+#define XpmReturnExtensions XpmExtensions
+
+#define XpmExactColors     (1L<<11)
+#define XpmCloseness	   (1L<<12)
+#define XpmRGBCloseness	   (1L<<13)
+#define XpmColorKey	   (1L<<14)
+
+#define XpmColorTable      (1L<<15)
+#define XpmReturnColorTable XpmColorTable
+
+#define XpmReturnAllocPixels (1L<<16)
+#define XpmAllocCloseColors (1L<<17)
+#define XpmBitmapFormat    (1L<<18)
+
+#define XpmAllocColor      (1L<<19)
+#define XpmFreeColors      (1L<<20)
+#define XpmColorClosure    (1L<<21)
+
+
+/* XpmInfo value masks bits */
+#define XpmComments        XpmInfos
+#define XpmReturnComments  XpmComments
+
+/* XpmAttributes mask_pixel value when there is no mask */
+#ifndef FOR_MSW
+#define XpmUndefPixel 0x80000000
+#else
+/* int is only 16 bit for MSW */
+#define XpmUndefPixel 0x8000
+#endif
+
+/*
+ * color keys for visual type, they must fit along with the number key of
+ * each related element in xpmColorKeys[] defined in XpmI.h
+ */
+#define XPM_MONO	2
+#define XPM_GREY4	3
+#define XPM_GRAY4	3
+#define XPM_GREY 	4
+#define XPM_GRAY 	4
+#define XPM_COLOR	5
+
+
+/* macros for forward declarations of functions with prototypes */
+#if NeedFunctionPrototypes
+#define FUNC(f, t, p) extern t f p
+#define LFUNC(f, t, p) static t f p
+#else
+#define FUNC(f, t, p) extern t f()
+#define LFUNC(f, t, p) static t f()
+#endif
+
+
+/*
+ * functions declarations
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
+/* Same for Amiga! */
+
+#if !defined(FOR_MSW) && !defined(AMIGA)
+    FUNC(XpmCreatePixmapFromData, int, (Display *display,
+					Drawable d,
+					char **data,
+					Pixmap *pixmap_return,
+					Pixmap *shapemask_return,
+					XpmAttributes *attributes));
+
+    FUNC(XpmCreateDataFromPixmap, int, (Display *display,
+					char ***data_return,
+					Pixmap pixmap,
+					Pixmap shapemask,
+					XpmAttributes *attributes));
+
+    FUNC(XpmReadFileToPixmap, int, (Display *display,
+				    Drawable d,
+				    char *filename,
+				    Pixmap *pixmap_return,
+				    Pixmap *shapemask_return,
+				    XpmAttributes *attributes));
+
+    FUNC(XpmWriteFileFromPixmap, int, (Display *display,
+				       char *filename,
+				       Pixmap pixmap,
+				       Pixmap shapemask,
+				       XpmAttributes *attributes));
+#endif
+
+    FUNC(XpmCreateImageFromData, int, (Display *display,
+				       char **data,
+				       XImage **image_return,
+				       XImage **shapemask_return,
+				       XpmAttributes *attributes));
+
+    FUNC(XpmCreateDataFromImage, int, (Display *display,
+				       char ***data_return,
+				       XImage *image,
+				       XImage *shapeimage,
+				       XpmAttributes *attributes));
+
+    FUNC(XpmReadFileToImage, int, (Display *display,
+				   char *filename,
+				   XImage **image_return,
+				   XImage **shapeimage_return,
+				   XpmAttributes *attributes));
+
+    FUNC(XpmWriteFileFromImage, int, (Display *display,
+				      char *filename,
+				      XImage *image,
+				      XImage *shapeimage,
+				      XpmAttributes *attributes));
+
+    FUNC(XpmCreateImageFromBuffer, int, (Display *display,
+					 char *buffer,
+					 XImage **image_return,
+					 XImage **shapemask_return,
+					 XpmAttributes *attributes));
+#if !defined(FOR_MSW) && !defined(AMIGA)
+    FUNC(XpmCreatePixmapFromBuffer, int, (Display *display,
+					  Drawable d,
+					  char *buffer,
+					  Pixmap *pixmap_return,
+					  Pixmap *shapemask_return,
+					  XpmAttributes *attributes));
+
+    FUNC(XpmCreateBufferFromImage, int, (Display *display,
+					 char **buffer_return,
+					 XImage *image,
+					 XImage *shapeimage,
+					 XpmAttributes *attributes));
+
+    FUNC(XpmCreateBufferFromPixmap, int, (Display *display,
+					  char **buffer_return,
+					  Pixmap pixmap,
+					  Pixmap shapemask,
+					  XpmAttributes *attributes));
+#endif
+    FUNC(XpmReadFileToBuffer, int, (char *filename, char **buffer_return));
+    FUNC(XpmWriteFileFromBuffer, int, (char *filename, char *buffer));
+
+    FUNC(XpmReadFileToData, int, (char *filename, char ***data_return));
+    FUNC(XpmWriteFileFromData, int, (char *filename, char **data));
+
+    FUNC(XpmAttributesSize, int, ());
+    FUNC(XpmFreeAttributes, void, (XpmAttributes *attributes));
+    FUNC(XpmFreeExtensions, void, (XpmExtension *extensions,
+				   int nextensions));
+
+    FUNC(XpmFreeXpmImage, void, (XpmImage *image));
+    FUNC(XpmFreeXpmInfo, void, (XpmInfo *info));
+    FUNC(XpmGetErrorString, char *, (int errcode));
+    FUNC(XpmLibraryVersion, int, ());
+
+    /* XpmImage functions */
+    FUNC(XpmReadFileToXpmImage, int, (char *filename,
+				      XpmImage *image,
+				      XpmInfo *info));
+
+    FUNC(XpmWriteFileFromXpmImage, int, (char *filename,
+					 XpmImage *image,
+					 XpmInfo *info));
+#if !defined(FOR_MSW) && !defined(AMIGA)
+    FUNC(XpmCreatePixmapFromXpmImage, int, (Display *display,
+					    Drawable d,
+					    XpmImage *image,
+					    Pixmap *pixmap_return,
+					    Pixmap *shapemask_return,
+					    XpmAttributes *attributes));
+#endif
+    FUNC(XpmCreateImageFromXpmImage, int, (Display *display,
+					   XpmImage *image,
+					   XImage **image_return,
+					   XImage **shapeimage_return,
+					   XpmAttributes *attributes));
+
+    FUNC(XpmCreateXpmImageFromImage, int, (Display *display,
+					   XImage *image,
+					   XImage *shapeimage,
+					   XpmImage *xpmimage,
+					   XpmAttributes *attributes));
+#if !defined(FOR_MSW) && !defined(AMIGA)
+    FUNC(XpmCreateXpmImageFromPixmap, int, (Display *display,
+					    Pixmap pixmap,
+					    Pixmap shapemask,
+					    XpmImage *xpmimage,
+					    XpmAttributes *attributes));
+#endif
+    FUNC(XpmCreateDataFromXpmImage, int, (char ***data_return,
+					  XpmImage *image,
+					  XpmInfo *info));
+
+    FUNC(XpmCreateXpmImageFromData, int, (char **data,
+					  XpmImage *image,
+					  XpmInfo *info));
+
+    FUNC(XpmCreateXpmImageFromBuffer, int, (char *buffer,
+					    XpmImage *image,
+					    XpmInfo *info));
+
+    FUNC(XpmCreateBufferFromXpmImage, int, (char **buffer_return,
+					    XpmImage *image,
+					    XpmInfo *info));
+
+    FUNC(XpmGetParseError, int, (char *filename,
+				 int *linenum_return,
+				 int *charnum_return));
+
+    FUNC(XpmFree, void, (void *ptr));
+
+#ifdef __cplusplus
+} /* for C++ V2.0 */
+#endif
+
+
+/* backward compatibility */
+
+/* for version 3.0c */
+#define XpmPixmapColorError  XpmColorError
+#define XpmPixmapSuccess     XpmSuccess
+#define XpmPixmapOpenFailed  XpmOpenFailed
+#define XpmPixmapFileInvalid XpmFileInvalid
+#define XpmPixmapNoMemory    XpmNoMemory
+#define XpmPixmapColorFailed XpmColorFailed
+
+#define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \
+    XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
+#define XpmWritePixmapFile(dpy, file, pix, mask, att) \
+    XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
+
+/* for version 3.0b */
+#define PixmapColorError  XpmColorError
+#define PixmapSuccess     XpmSuccess
+#define PixmapOpenFailed  XpmOpenFailed
+#define PixmapFileInvalid XpmFileInvalid
+#define PixmapNoMemory    XpmNoMemory
+#define PixmapColorFailed XpmColorFailed
+
+#define ColorSymbol XpmColorSymbol
+
+#define XReadPixmapFile(dpy, d, file, pix, mask, att) \
+    XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
+#define XWritePixmapFile(dpy, file, pix, mask, att) \
+    XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
+#define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \
+    XpmCreatePixmapFromData(dpy, d, data, pix, mask, att)
+#define XCreateDataFromPixmap(dpy, data, pix, mask, att) \
+    XpmCreateDataFromPixmap(dpy, data, pix, mask, att)
+
+#endif /* XPM_NUMBERS */
+#endif
diff -Naur vim73.orig/src/xpm/x64/lib/libXpm.a vim73/src/xpm/x64/lib/libXpm.a
--- vim73.orig/src/xpm/x64/lib/libXpm.a	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xpm/x64/lib/libXpm.a	2013-08-04 19:09:11.433941383 +0000
@@ -0,0 +1,238 @@
+!<arch>
+/               1346471174  0     0     0       1492      `
+   F              @  @  ~  ~  )  )  )  X  X  ^  ^  d  d  d  d  d  d  d  z  z  z  z  "  "  v  v  v  v  v  v  v  v                  ȸ                                ,  ,  ,  ,  ,   xpmFreeColorTable XpmFreeExtensions XpmAttributesSize xpmInitAttributes xpmSetAttributes XpmFreeAttributes XpmCreateBufferFromXpmImage XpmCreateBufferFromImage XpmCreateDataFromXpmImage XpmCreateDataFromImage xpmstrcasecmp XpmCreateImageFromXpmImage xpmParseDataAndCreate XpmCreateImageFromBuffer XpmCreateXpmImageFromBuffer XpmCreateImageFromData XpmCreateXpmImageFromData xpmNextString xpmNextWord xpmNextUI xpmGetString xpmGetCmt xpmParseHeader xpmDataTypes xpmHashSlot xpmHashIntern xpmHashTableInit xpmHashTableFree xpmInitXpmImage XpmFreeXpmImage xpmInitXpmInfo XpmFreeXpmInfo xpmSetInfoMask xpmSetInfo xpmatoui XpmGetErrorString XpmLibraryVersion XpmFree XpmReadFileToBuffer XpmReadFileToData XpmReadFileToImage XpmReadFileToXpmImage xpmReadRgbNames xpmGetRgbName xpmGetRGBfromName xpmFreeRgbNames XpmCreateXpmImageFromImage boundCheckingMalloc boundCheckingCalloc boundCheckingRealloc XDefaultVisual XDefaultScreen XDefaultDepth XDefaultColormap XParseColor XAllocColor XQueryColors XFreeColors XCreateImage XImageFree XDestroyImage XpmWriteFileFromBuffer xpmParseValues xpmParseColors xpmParseExtensions xpmParseData xpmColorKeys XpmWriteFileFromData XpmWriteFileFromXpmImage XpmWriteFileFromImage  Attrib.o/       1346471167  0     0     100666  2539      `
+d             .text                            P`.data                               @ P.bss                                 P.xdata          L                 @ 0@.pdata          H   H  :         @ 0@UWVSH(HHtO~;HHRHHl0f     H~0HHt    HH9uH9uHH([^_]    H([^_]     AUATUWVSH(HH}   teIHRLlD  I$Ht    Al$I|$t1fHHt    H9wI|$HtH    IM9uHH([^_]A\A]    H([^_]A\A]fffff.        f.     Ht_HA0    A8    HAp    Ah    HAx    Hǁ       Hǁ       u(   tHǁ       ǁ       f.     HA`    AX    ffffff.     WVSH0HĀtHJHKpJKhB    HB    tIH0HK`AH(KXI@0    A@(    A tAH K$AH$K((JK,CBC H0[^_f     tzHrHT$(LD$         HHT$(LD$    ~*HN0ILIIH0I1IL9HuHCpBChI@HCxI@H   I@H   B    HB    I@    I@    I@        HCp    Ȁu.HK0HT$(LD$     LD$ HT$(HC0    C8    Ch    AUATUWVSH(HtQ8  Ā9     LkpMtcCh~<LMdfHu H~0     HHt    HH9uHL9uIM     L    HCp    Ch    HKxHt    HCx    H   Ht    Hǃ       H   Ht    Hǃ       HK0Ht    HC0    C8    tSXuj   t
+   u    H([^_]A\A]@ H       Hǃ       ǃ       ƋShHKp1HCp    Ch    HK`HC`    CX    wHI0    HC0    C8    a B0`pP   B0`pP         R0`p B0`pP      h       p           &  $   0    (     `  ,   `     8   =                            n      5                        	      "      >      W                  [                 	       	              	       	              	       	            $   	    (   	    ,       0   	    4   	    8       <   	    @   	    D       .file         gAttrib.c                                                 p           (              :   0          L             ]   `      .text                          .data                            .bss                             .xdata         L                 .pdata         H                free                 o               xpmFreeColorTable XpmFreeExtensions XpmAttributesSize xpmInitAttributes xpmSetAttributes XpmFreeAttributes boundCheckingMalloc 
+CrBufFrI.o/     1346471168  0     0     100666  3329      `
+d     d
+        .text           @          $     P`.data                               @ P.bss                                 P.rdata          @   D              @ P@.xdata          $                 @ 0@.pdata               (
+         @ 0@AWAVAUATUWVSHx  MH$  IL$  H    tvA 1L$PtjA@(tbIX01H@LcM,H    {tHkt1@ HL H    9ߍtwM9L  ID$P    *   D$\    D$P1ۅtMH$  HHHt    XH$  HJHt	    \H$  HHHt	    \Iimage_naH/* XPM *H/
+staticI char * Ime[] = {L$   Ht$pH|$xL$   L$   fǄ$   
+     HI	  HT$pH)       \$P  AGEOH   HL$pD$(AGD$ E    H$   AtH$    D\$\E  DALDDp",
+     HH  HT$pAH    DL$PEL  AGAWIƄ$p  "x  L$p  HT$8H@L|$`IITHHD0HT$@HD$HIFI    LD$8HL1    Ht$@LLMtH    H   HL    HHHH(u",
+ HLD)    HHt5DLAHH0    H;|$H   ImIf.     L    Hx  [^_]A\A]A^A_H$  LBM/IM)H        p)H$  LAMDH    H    An7D$\   L|$`AWAHAGT    HHD$`5DD$PE  AGAWMoIoE7D$hDHD$`T$8HD$PI   |$hAF   Dd$lMAHHHHHD$HHL$@A$"IEt7L1ۋD HIHHH@HIT     A9wLd$@Hl$HA$",
+ AID;|$8uMDd$lA"IEtE|$hL1D  D HIHHH@HIT     A9wAFHHID+d$PL$\A"G|<0  H$  ELt$`P(HX01L   BLcH@M,LH#   H    {HHkHƅt+1     LD H1   HH    HH9wM9L   IDI XPMEXT ALTpH$  HD$pHDJ$DB H       AH$  LAMDHL$`H        AD)H,
+"XPMENE|FDEXTHfF" HD$`B8};
+ H$  H1fD  VSH   H$   HLMHtH    L$   Ht$     u<HtAHL$@H    LD$@H$   HH$   D$8    D$8HĨ   [^H$   E1H̐/*%s*/
+ "%d %d %d %d  %d %d 	%s %s ,
+"XPMEXT %s" ,
+"%s"         
+  0`
+p	P	 	 0`            7     g                                  w                              0                                          D      }                                          z                                    <      A                                                                   .file         gCrBufFrI.c                                                      .text          7  $             .data                            .bss                             .rdata         8                 .xdata         $                 .pdata                             9            strlen               F            strcpy           sprintf              Z            strncpy          free                 o                                               XpmCreateBufferFromXpmImage XpmCreateBufferFromImage xpmColorKeys boundCheckingMalloc boundCheckingRealloc XpmCreateXpmImageFromImage xpmSetInfo XpmFreeXpmImage 
+CrDatFrI.o/     1346471168  0     0     100666  3136      `
+d     	        .text               @           P`.data                               @ P.bss                                 P.rdata          0                 @ P@.xdata          $                 @ 0@.pdata             (  l	         @ 0@AWAVAUATUWVSH  MH$  IL$   H    tA   D$h    D$l    D$X    AG   ƉD$T    HI  AGEOH$   H    HىD$(AGD$ E    LcIH$    tH$     DL$hE  I)޿AD    HI$  HHA    AWAGI҉T$@   L$  HD$8L|$`1LI LD$8HLL1    LLMtH    H   HL    HHHH(uL)    H  LHA    H0IDH9l$@wL|$`AGAL$lT$X$   AG$   D    HHD$X  D$TAG1D$lHT$XAwHHH
+ I    I    HHHHLH9sًL$THD$XT$lE/H$   HAGIHT$XHHT$xAWMwIo$      $   L$   HDLd$xL$   AIHD$@AEHHT$8HHHHD$pHT$`D  Et<L1fD  D HIHHH@HI    A9wLd$`Hl$pA$ Ld$8M'MgIL;|$@uLd$xL$   L$   EtF$   Ht$x1ۋD HIHHH@HI    A9wAEHHHD$xHL$x L$h!  HD$XH$  1HD$Ttt$T1IHt    H9wL    HĨ  [^_]A\A]A^A_A@(IX01H@E1LcM4    {H    Fl/tHkt1fHL H    9ߍtwM9LtI뼃
+AD$h   t$XDl$l(I XPMEXT MIDI$DA H   L    HIH$   H$   B(Hr0AWHTHL$XHы$   HHKH   |$lE1H@Ld$HHHD$@LH   E~    D9vH    HHHCDnHCLfHD$8E   1A@ IHL    A.9sI    HHDHDHA9wHT$8Gt= AJ\H;t$@tHHULd$HHHXPMENDEXfAT HEH\$8ÿVSH   H$   HLMHtH    L$   Ht$     u<HtAHL$@H    LD$@H$   HmH$   D$8    D$8HĨ   [^H$   E1H;̐%d %d %d %d  %d %d 	%s %s XPMEXT %s             
+  0`
+p	P	 	 0`    0      0       n                                  Q      b      i      u                        5      >      .                        W      z                  W      `      m                  d      z                                                       .file         gCrDatFrI.c                                               0      .text                         .data                            .bss                             .rdata         $                 .xdata         $                 .pdata                             5                B            sprintf              V            strcpy           strncpy          strlen           free                 j                                               XpmCreateDataFromXpmImage XpmCreateDataFromImage xpmColorKeys boundCheckingCalloc boundCheckingMalloc XpmCreateXpmImageFromImage xpmSetInfo XpmFreeXpmImage create.o/       1346471168  0     0     100666  11875     `
+d     T(  6      .text           p     "      w     P`.data                               @ P.bss                                 P.xdata             t!              @ 0@.pdata          l   "  F'         @ 0@.rdata              "              @ P@WVSH MHHLt    tHIH    1҅H [^_fffff.     HX    AwA	D$@$   D$H    D$(    D$     D$8$   D$0    H$   HHHXD  D$(         AWAVAUATUWVSHHH    H$   1EHEL$   H	HD$0EHD$8tSAEL5    H   HD$(f1Et*f     HAHM EAA9wH|$(D9uHT$8HM LD$0HH[^_]A\A]A^A_IfD  AWAVAUATUWVSHH
+  $
+  $
+  HHD$
+  D$
+  L$
+      Ƅ@   v	  D$
+  MD$4    IEV  H1    $
+  '  fH$@  E1Iu=HSHHSC'ID9v!t݅tHK    C'ID9w߅  H$@  Lt$8L$
+  AE1HH@ AI0A9  IH    uD9HDLt$8}  H$
+  IM H    H$
+  DD$4IM F    Mt*IIM     H$
+  DD$4IM F    ;$
+  D$4$
+  9T$41  HD$@   HD$(H|$(1H  L$
+     RI0f<P9  I$L2JD@Hu׺          HJD@   I$E1ML=    tH	    IU IHAHD$8H$
+  HM HAH$@  HD$(@   1HHt/L$
+       I$I0fT@  9u拴$
+    L-    E1H    D$
+  E  1   HSHHSP      Hc|@  f|   H$
+  EHM DLAMt |@  H$
+  ELDLAՃ;$
+    rjHK    P   pHH
+  [^_]A\A]A^A_D$
+  E  L=    E1IH    D$
+  E  1        HC8HHCG=        HSHHSP      HcHT@H   Hcf<j    H$
+  I$HAHD@H$
+  EI$hDL    Mt0IU I$AHD@H$
+  EI$hDL    ;$
+    HK    HK    H\$@H   f.     HHt    HH9uV$
+  1JL=    E1IH1    $
+     1(f.     HSHHS,@  H9v#tۅtHK    ,@  H9wH$
+  H$@      H8 HH$
+  I$HAHE H$
+  EI$@D    Mt-IU I$AHE H$
+  EI$@D    ;$
+  AD;$
+  1$AD;$
+  ?MtLHT$8AL    HT$(HM A1AD;$
+  H\$@H   fHHt    HH9u1H\$@H       HHt    HH9uvH\$@H   f     HHt    HH9uFATUWVSH HքtyHH-    u&If     GHVtI^Ht(HAA9tA)DH [^_]A\f1)H [^_]A\V11fff.     AWAVAUATUWVSH   H$  H$  HH$   HLD$    E1@W  uH$       H$   H    e  HKHL$P@   D$t   tD   DDD$tH   HL$@tL   LD$@    HD$H    tH   H\$HD$X   wH   D$XD$  D$\    E  HcD$XL$tE1HL$|HD$`D$XHT$`D$xHTHHH$   HT$8W@ H    L}  H$       E  D"AH0HHHD$80D;$  )  E  |$tv \$tf     L4Muw\$|   L4M   H    LM\HL$HL$   MHT$PHL$ H$   T$@~{L$0  A$   L$(  уAH$0  L$@  AL$8  E     уAH$@  HR@DkHH$   D  D$\   !D$\D$\HĨ   [^_]A\A]A^A_LD$HL$   HT$PH$   LD$ MT$@~H$0  # D$\       HVDd$pHl$hL$   HHHIE1@ AIE90  IHt@tLH    tSHuINHtLD$`D$XJ< uHT$8HHz t}   HHHtiuD  E9HDd$pHHl$hI> B  I^H  H    H!   H$       E  D!+|$x  H$   H<   HT$8D$xHKHHz t7AIE9HDd$pHHl$hHT$HL$   IH$   HT$ HT$PT$@   L$0  $   AL$(  AAL$@  H$0  AL$8  E     AH$@  A*INAFHɉtUH    uEH$   E     D!L$@  A L$8  AH$@  AFE    D$\   H$       H$   H    HHD$PtlvD$xD$x     H$   E1    H$   H    H$       H$   H    HD$PHD$t   HD$H    D$X   HL$@a@ AWAVAUATUWVSH   H$   MHHML$  HǄ$       HǄ$       Ǆ$      Ǆ$       Ǆ$       tI     H$   tH$  H     H<    H    HH    H$     HSH$     ST$|   D$x   t
+   T$xHb   HT$ptH   HD$pN    HIS  N    HH  N    HI  N    HIO  H$   DNLFHHLl$HHD$PH$   Ld$8Hl$(L|$ HD$@H$   HD$0 D$l#  |%H   
+        H$   Ht    H$   Ht    L    HtH    D$   E  MtL    MtL    D$lHĸ   [^_]A\A]A^A_HSH$   ?H    HH    HH$   ^  %H    HH    D$|HHD$x   HD$p0 MttV|$|A   DDL$xH$   DD$|T$(H$   L$ HHD$0D$lHFL|$(HDNDHD$ H$   HH$   D$|t$         L    H    H       L         $   L      MtH$   I|$| eH$   H$  HMD  E1E1D$lHD$     MH$   HT$pE1D$lH$   DL$xH$   A   HHD$0FD$(D$ hD$l`HFHl$(HDNDHD$ H$   HD$l&fH    HH    HH$       HH    H$   H    HH    D$|H<D$x   HD$pf.     $   Lk0C8$      WL         L    [ D$l AWAVAUATUWVSH8  L$  H$  MHILMHǄ$       HǄ$       Ǆ$     Ǆ$      Ǆ$      Ǆ$(      Ǆ$,      HǄ$       HǄ$       HǄ$       HǄ$       tI     MtI$    Hp     H    HH    H$      HSHT$p   ST$|   D$x   t
+   T$xH   HT$htH   HD$hE1MtAE E1AL       H8  [^_]A\A]A^A_ HSH$   [H    HH    HHD$p  AH    HH    D$|HHD$x   HD$hLfD  H$,  L$  L$  H$  LHD$@H$(  HD$8H$$  HD$0H$   HD$(H$  HD$     E  D$  H$   $  H$   Av	  H$   L$   LHD$     7  HǄ$       HǄ$       HǄ$       HǄ$       $  v$  4  H$   Ht$      H$   Ht    H$   Ht    H$   Ht    H$   Ht    H$   Ht    H$    tH$       H$    tH$       D$  E  H$    tH$       H$    {H$       ifE'  $      HH$     $      HH$     $      HH$   w  $      HH$     H$  H$   D$  L$   HHD$PH$  HT$HH$   HD$@H$   HT$(HHD$8H$  HD$0H$   HD$  t*Hېtt   f     HtSH$   |$|A   DDL$xDD$|HHD$0$  H$   D$($  D$ qMD$|tU$     tHH$   DL$xH$   A   HHD$0$  D$($  D$ sH$   H$   HD$  D$  HD$PH$   HT$XH$   HD$HH$   HT$8LHD$@H$   HD$0$  D$($  D$ *H$       H$       HǄ$       HǄ$       W$  v$  `  E  M  AE t$,  H  IE0    AE(    H$  $  E$  HB    B$  B$  BH$   HBt$H$   IEH$   IEH$   IE$(  t$   AM AE $$  AE$H       H$   HC0$  C8$          H$   $  H      HtH$   HE |$| dH$   I$SH$   L    K    H    HH    HH$       HH    HD$pH    HH    D$|H?D$x   HD$hHD$     L$   HHT$pT$hH    D$  $  D  HǄ$       f.     HǄ$       HǄ$       HǄ$       fH$   L    H$       f     HǄ$       HǄ$       wmH$       H$       <H$       H$   L    H$  $  $  HB    B$  B$  BH$   HBlH$       IU0ME(L    HǄ$       HǄ$        20`p      	 0`
+p	P  
+ I0`
+p	P
+ 
+20`pP
+  0`
+p	P
+  0`
+p	P
+ ' 0`
+p	P    B       P                             	  0    	  	  H   	  \  X   `    p     c      None                                -                              "    p  #      $                $      A        %                        "    N  #            "    X              #      #      &          /  "    ~  #      '                i        &      &    		  &    =	      
+  (    ,
+  )    
+      #            e  $          7        (      *      (      )      (    )  *      (      )    }  +      +      +      +    b  ,    t  ,    |  &      &      &      &      (      *      (    !  -      &      &      &    4  (    ?  )    O  (    Z  *    j  (    u  -      &      &      (      )    Y  .      (      *      (      -    ]  /      0    &  1    8  &    J  &    \  &    n  ,      ,      &      &      &      &      +    4  +    T  +    t  +    q  &    ~  &       2    4  (    ?  )    O  (    Z  *    g  (    r  -      3    <  2    N  4      &      &      &      2    #   4    8   5       !                                                                     $       (       ,       0       4       8       <       @       D       H       L       P       T       X       \       `       d       h       .file         gcreate.c                                                 P                         '              @             Y    	          g   	          t              ~   `                   .text          c   w             .data                            .bss                             .xdata                          .pdata         l                .rdata                                                                                                                                                           ,               8           getc             strcmp               F           free                 Z               f               u                                                                                                                                                                                    0           C  AllocColor CreateXImage FreeColors MSWPutImagePixels.isra.1 ParseAndPutPixels.isra.2 xpmstrcasecmp CreateColors CSWTCH.47 XpmCreateImageFromXpmImage xpmParseDataAndCreate __imp_SelectObject __imp_SetPixel __imp_CreateCompatibleDC __imp_DeleteDC __imp_tolower XParseColor XAllocColor XCreateImage XFreeColors xpmNextString boundCheckingCalloc xpmHashSlot XDefaultScreen XDefaultVisual XDefaultColormap boundCheckingMalloc XDestroyImage XDefaultDepth xpmParseHeader xpmParseValues xpmParseColors xpmFreeColorTable xpmGetCmt xpmHashTableInit xpmHashTableFree xpmParseExtensions 
+CrIFrBuf.o/     1346471169  0     0     100666  1452      `
+d     0        .text           `     |           P`.data                               @ P.bss                                 P.xdata          (   <              @ 0@.pdata             d           @ 0@AVAUATUWVSH  H$@  H$  H$  HIMMH    H    HD$@   Ld$PD$\    tqH    HH    HT$@HMMHt$0H\$(H|$     xIHH    H    H    H  [^_]A\A]A^@ HT$@HMMHD$0    HD$(    H|$     fWVSH`  LHHH    H    HL$ IHD$    H\$0D$<        H`  [^_Ð	 \ 
+0	`pP  
+ 
+L 0`p                S     9       A       c       n                                                      D                                                 .file         gCrIFrBuf.c                                                      .text          S               .data                            .bss                             .xdata         (                 .pdata                             9                I                X                j                y                                                                               XpmCreateImageFromBuffer XpmCreateXpmImageFromBuffer xpmInitXpmImage xpmInitXpmInfo xpmInitAttributes xpmSetInfoMask xpmParseDataAndCreate xpmSetAttributes XpmFreeXpmInfo XpmFreeXpmImage xpmParseData CrIFrDat.o/     1346471169  0     0     100666  1576      `
+d             .text                           P`.data                               @ P.bss                                 P.xdata          (                 @ 0@.pdata               t         @ 0@AVAUATUWVSH  H$@  H$  H$  HIMMH    H    I$HD$@    Ld$HD$X    D$\    HǄ$h      HD$PHǄ$`      Ƅ$q   Ƅ$p   Ǆ$t      tmH    HH    HT$@HMMHt$0H\$(H|$     xIHH    H    H    H  [^_]A\A]A^HT$@HMMHD$0    HD$(    H|$     fWVSH`  LHHH    H    HHL$ IHD$     H\$(D$8    D$<    HD$0HǄ$H      HǄ$@      Ƅ$Q   Ƅ$P   Ǆ$T          H`  [^_Ð	 \ 
+0	`pP  
+ 
+L 0`p      >      @       9       A                                                 6      W      _                                                       .file         gCrIFrDat.c                                               @      .text                         .data                            .bss                             .xdata         (                 .pdata                             5                E                T                f                u                                                                               XpmCreateImageFromData XpmCreateXpmImageFromData xpmInitXpmImage xpmInitXpmInfo xpmInitAttributes xpmSetInfoMask xpmParseDataAndCreate xpmSetAttributes XpmFreeXpmInfo XpmFreeXpmImage xpmParseData data.o/         1346471169  0     0     100666  5509      `
+d       !      .text               $      .     P`.data                         @ `.bss                                 P.xdata          |                 @ 0@.pdata          T   p           @ 0@.rdata          `                 @ P@AUATUWVSH(9Im  H   Li HYLE A HH    UD)DA9N  HAtuAɄ   EL$ L1fD  I$(  8tDAu<HB8Hjt+t&H      uL   B8Hju At$H         HHHjBDA9uxtuĄgH    1H([^_]A\A]Åu    OHH    u1H([^_]A\A]f     L   r AL   LQ A A 1    IL$DHHIL$ATAL 8   HuAT$ M1M$(  A:tJuD LɃLIQt0A8t+IL$H=  IL$uLфҸ   LIQuAD$%     LILIQA8u't3IL$H=  IL$uLѸ   ǐR     Il$1H([^_]A\A]AAM)L$bfffff.     VSH(H˅      1   Hq   0   uZH    u1H([^    HH    H   9tH    1H([^H    H    0  9ttH   Ht9u H    1  9VuLAHQAHHA1H([^Ð1  tHCHHCt8u퀻0   uOH   HHCHHCH   L@LC8tHCHHCHHC:0  H   Ht8uffffff.     AWAVAUATUWVSH(HHEǃ   t{LiL5    L    Ɖ   Aօt1  9uE1.t/1  9t$E9sBt% LI    ƉAօDtL    ~   HCL5    1  HFD9tHCD(HEDAօu1 1  D9t0HsD.EHDHsDm HAօuGD9rHkH([^_]A\A]A^A_A@ SH   A   HHT$ HL$ I؉    H   [ffff.     AWAVAUATUWVSH8  HIL$     HnH  E   1  9  H    9tHH^u)DcD    HH  EHH    u$H$  I>D 1H8  [^_]A\A]A^A_ D  THiH    øt       H1  9   Ld$0E1E1f     A$HA    tZ1  9tOIA   uE   HD    HI   J8HT$0A   LELd$0    E1돃   EEu A   H    fD  EaHDL$(D    HHDL$(t9DHT$0EHDL$(H    DL$(B      1E1H       A   1>iH    WfD  VSH(H֋H˅tIu1H    H([^        LcCHS HH    HcCH 1C    H([^f.     ATUWVSH   DE1HEuDH   [^_]A\@ Hl$ A   Ɓ0   Ɓ1  
+Hǁ(      Hǁ       HIA   *  HH/  d  H5      HA8cHHA   H    11HcL%@   H   f     ǃ4      H    HcH    4  HHD0H   H   HƅHH(     HE1f     I@IL$H{  IH    uHcH    HHUD  H5       HHHAKHc_   HD4      HH*H)Ÿ   H.H5   HHOH9ǃ4     H@      Fƃ1   HE1䈃0  F	1   H5      HA8H@      Zf.     H   HE1H   H   H(  )   0     1  5f.     1A                      
+                                                 #       ""      &       )       7       ?       C       H              ""             J       Q       V                                                                        B0`pP   B0`  	 B0`
+p	P   D 0  
+ G 0`
+p	P B0`   D 0`pP                               8     j  D   p    \       h   #define _format XPM XPM2  ! 
+ C /* */ ,
+ static char * [] = {
+ };
+ Lisp ; (setq   '(
+ ))
+       9                            O      ,      D      d                              *      :                                    <      m                              .      \                  v	      	      	      	      
+      \
+      j
+      
+      
+       
+            C      h                                                            (       0       8       @       H       P       `       h       p       x                                                            
+       
+              
+       
+              
+       
+            $   
+    (   
+    ,       0   
+    4   
+    8       <   
+    @   
+    D       H   
+    L   
+    P       .file         gdata.c                                                                          +             5             B   p          L         .text            .             .data                          .bss                             .xdata         |                 .pdata         T                .rdata         Z                     [               h            getc             ungetc           xpmatoui             v            strncpy                          free             strncmp          strrchr             ParseComment xpmNextString xpmNextWord xpmNextUI xpmGetString xpmGetCmt xpmParseHeader xpmDataTypes __imp_isspace boundCheckingMalloc boundCheckingRealloc 
+hashtab.o/      1346471170  0     0     100666  1598      `
+d             .text                           P`.data                               @ P.bss                                 P.xdata          8   \              @ 0@.pdata          0     
+         @ 0@ATUWVSH 2HyI@t|A1fAEHAEA)DDEuߋ	1HHcHHlfD  HH9HGHHtH@81uL    uHH [^_]A\Ë	1D  AUATUWVSH(E1HHLCH8 HtDH([^_]A\A]f.            H   H0HxHE C;C}
+Cf+VUUULcAt- 3)S    HtHcHCHH9sHH9H    r~'1fD  I<HtHH|H8H9LE1    C#HE     Af.     SH    AU   HA           Ht1HcHH9sf     HH9H    rHC1H [øffff.     WVSH HqHHt2HcHH9sHHHt    H9rH    HG    H [^_Ð
+ 
+20`pP B0`pP   20 20`p                     #  $   0  }  ,                 ;                  \      i                                                                       $       (       ,       .file         ghashtab.c                                                                        /   0      .text          }               .data                            .bss                             .xdata         8                 .pdata         0                strcmp               @            free             T   xpmHashSlot xpmHashIntern xpmHashTableInit xpmHashTableFree boundCheckingMalloc Image.o/        1346471170  0     0     100666  792       `
+d             .text           `      `           P`.data                               @ P.bss                                 P.xdata             <              @ 0@.pdata             H  t         @ 0@A    HA    HA         SH HHIHtS    HKHt    HC    H [Ð    20               U      5       C                                                  .file         gImage.c                                                          .text          U                .data                            .bss                             .xdata                          .pdata                             $            free             6   xpmInitXpmImage XpmFreeXpmImage xpmFreeColorTable Info.o/         1346471170  0     0     100666  1220      `
+d              .text           `                P`.data                               @ P.bss                                 P.xdata             <              @ 0@.pdata          0   P           @ 0@Ht'HA    HA    HA    HA0    A(    fSH HHtVtDHIHt    HC    HKHt    HC    HKHt    HC    u    H [    S(tHK0    HC0    C(    ffffff.         t   t	   Ë    t$LBx   LAL   LAL   LAtLB`	   LA0DBXDA(tB$	A B(A$Ð    20          .       0                     Q     N       d       z                                                                               $       (       ,       .file         gInfo.c                                                   0           "              1          .text          Q               .data                            .bss                             .xdata                          .pdata         0                free                 <            N   xpmInitXpmInfo XpmFreeXpmInfo xpmSetInfoMask xpmSetInfo XpmFreeExtensions misc.o/         1346471171  0     0     100666  1378      `
+d             .text                      	     P`.data                               @ P.bss                                 P.xdata                           @ 0@.pdata          0              @ 0@.rdata             D           @ P@1tMD	EQA	w?E1    DIHEYA	wAEA9ADAuA    1ff.     HQ   wHd   HcHH       H         HB        H6        H'        H        v  f.                         U       `                           XpmColorError XpmSuccess XpmOpenFailed XpmFileInvalid XpmNoMemory XpmColorFailed Invalid XpmError                         c       r                                                                                                                         $       (       ,       d       h       l       p       t       x       .file         gmisc.c            xpmatoui                                `                     XpmFree        .text             	             .data                            .bss                             .xdata                          .pdata         0                .rdata         |                free             (   XpmGetErrorString XpmLibraryVersion RdFToBuf.o/     1346471171  0     0     100666  1341      `
+d     D        .text                          P`.data                               @ P.bss                                 P.rdata                           @ P@.xdata                           @ 0@.pdata               &         @ 0@AVAUATUWVSH   AH    H1       HT$     D9   T$ T$`T$$fT$dT$&fT$fT$(fT$hT$*fT$jT$,fT$lT$0T$pHT$8׉T$tHT$@HT$xHT$HH$   HT$PH$      H        HH   O    HHtLcI   MH    HI    D9uBB# E1H] DHĐ   [^_]A\A]A^HT$`   1HHA    H    @ 뼉    HA    룐r               	  
+0	`pP      {      $       ;          
+                         	      N      X      e      u                            .file         gRdFToBuf.c                                        .text          {               .data                            .bss                             .rdata                          .xdata                          .pdata                                             '            open                 5            fread            fclose           close            free             I   XpmReadFileToBuffer __imp__fstat64 __imp__fdopen boundCheckingMalloc 
+RdFToDat.o/     1346471171  0     0     100666  851       `
+d             .text           p      d           P`.data                               @ P.bss                                 P.xdata             L              @ 0@.pdata             X           @ 0@SH   HHD$0   tH    LD$0HT$p    u.LD$0HT$pH    HL$pD$(    HL$0    D$(HĐ   [Ð  0      i       *       @       N       X                         
+    .file         gRdFToDat.c                                        .text          i                .data                            .bss                             .xdata                          .pdata                                             ,                F                V            e   XpmReadFileToData XpmReadFileToXpmImage XpmCreateDataFromXpmImage XpmFreeXpmImage XpmFreeXpmInfo 
+RdFToI.o/       1346471172  0     0     100666  2495      `
+d     <  #      .text                           P`.data                               @ P.bss                                 P.rdata          0   $              @ P@.xdata          <   T              @ 0@.pdata          0              @ 0@UWVSH(  HHH       <H   H    HHC      C    1H(  [^_]D  HcH5       H|t]tH|H5      uH      IHL$     H   HL$     HHC{z   IH   f            HCAff.     SH0tt1H0[HHT$(    HT$(H9tH
+H0[    fD  H
+H    H0[Hfffff.     ATUWVSH  H$0  HH$  HLM    H$      HT$@HH   H   H    H$  H    H$  HT$@MIHH\$0HD$(H$  HD$     xL$  H$  H    H$      L$@HT$HH$      H  [^_]A\D  H$  HT$@MIHHD$0    HD$(    HD$     f.     WVSHp  LHHH    H    HT$0H u&HL$0IH    L$0HT$8D$(
+D$(Hp  [^_Ð.Z uncompress -c "%s" r .gz gunzip -qc "%s"      E 0`pP R0 \ 0`pP  
+ 
+N 0`p              b     p           ,          '       /       f                                                        /      V                                    /      <       W  !                        "    F                                                                       $       (       ,       .file         gRdFToI.c                                                           %   p          8         .text                         .data                            .bss                             .rdata         ,                 .xdata         <                 .pdata         0                    N                [                l            strlen           fopen            sprintf          fclose               z                                                                                                                                              OpenReadFile xpmDataClose.isra.0 XpmReadFileToImage XpmReadFileToXpmImage __imp__popen __imp___iob_func __imp__pclose xpmInitXpmImage xpmInitXpmInfo xpmInitAttributes xpmSetInfoMask xpmParseDataAndCreate xpmSetAttributes XpmFreeXpmInfo XpmFreeXpmImage xpmParseData 
+rgb.o/          1346471172  0     0     100666  9826      `
+d      $        .text                          P`.data                        @ `.bss                                 P.xdata          (                 @ 0@.pdata          0     #         @ 0@.rdata                           @ P@   f.     SH   D\$01H   t2DE9uD9uD9uHcH    HH[1[f.     AWAVAUATUWVSH(HLL$           HI    Ht(8 tPHu    L    Hu AM LH-    tՈHuH    L    Ht@aA   1L=    
+foD93BD% LLcIMI     tC}DgD9~H$      L                H([^_]A\A]A^A_AFLЉH$       D  Ð                               2     '            -            3            :               @            O              T       +     _       **     e       ޸     o       _     y                    i            rV            ""                                                  V-            k            UV/                                      z                      8Kf           /OO     ,            :            E           N            Z      TTT     b           m      ##     w                 Pi                                 ڪ            ߄           ~~~                                                                                !!!           $$$           &&&           )))           +++           ...           000                      333           666     &      888     -      ;;;     4      ===     ;      @@@     B      BBB     I      EEE     P      GGG     W      JJJ     ^           d      MMM     k      OOO     r      RRR     y      TTT           WWW           YYY           \\\           ^^^           aaa           ccc           
+
+
+           fff           iii           kkk           nnn           ppp           sss           uuu           xxx           zzz           }}}                                      
+                                            &           -           4           ;           B           H           O           V           ]           d           k           r           y                                                                                                                                                                                                                                       
+                                            &           ,           3           :           A           H           O           V           ]           d           k           r             x      /                      i           k99                      ~                                 |                                                        ݂                           &           0      z     <            J           W      p     f      w     u      |                                                          R                       22           2K           f           R           p           4wf           jj     &      ##     8            H       y     X      //d     e           o           y                 ޭ           ##u           ##u                      k#                       E                                  sx                      p                      ڹ           ͅ?                      H                )            0             4           >      Ai     H      E     T      z     [      `     f      R     o           x      R-           r           ~           p                      AA           Tp           ޸           ؿ           cG                                   >           >           ޳                                             28                                         0  	 B0`
+p	P                   f      p            $   grey AliceBlue AntiqueWhite Aquamarine Azure Beige Bisque Black BlanchedAlmond Blue BlueViolet Brown burlywood CadetBlue chartreuse chocolate Coral CornflowerBlue cornsilk Cyan DarkGoldenrod DarkGreen DarkKhaki DarkOliveGreen DarkOrange DarkOrchid DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DimGray DodgerBlue Firebrick FloralWhite ForestGreen gainsboro GhostWhite Gold Goldenrod Gray Gray0 Gray1 Gray10 Gray100 Gray11 Gray12 Gray13 Gray14 Gray15 Gray16 Gray17 Gray18 Gray19 Gray2 Gray20 Gray21 Gray22 Gray23 Gray24 Gray25 Gray26 Gray27 Gray28 Gray29 Gray3 Gray30 Gray31 Gray32 Gray33 Gray34 Gray35 Gray36 Gray37 Gray38 Gray39 Gray4 Gray40 Gray41 Gray42 Gray43 Gray44 Gray45 Gray46 Gray47 Gray48 Gray49 Gray5 Gray50 Gray51 Gray52 Gray53 Gray54 Gray55 Gray56 Gray57 Gray58 Gray59 Gray6 Gray60 Gray61 Gray62 Gray63 Gray64 Gray65 Gray66 Gray67 Gray68 Gray69 Gray7 Gray70 Gray71 Gray72 Gray73 Gray74 Gray75 Gray76 Gray77 Gray78 Gray79 Gray8 Gray80 Gray81 Gray82 Gray83 Gray84 Gray85 Gray86 Gray87 Gray88 Gray89 Gray9 Gray90 Gray91 Gray92 Gray93 Gray94 Gray95 Gray96 Gray97 Gray98 Gray99 Green GreenYellow honeydew HotPink IndianRed ivory Khaki lavender LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan LightGoldenrod LightGoldenrodYellow LightGray LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateBlue LightSlateGray LightSteelBlue LightYellow LimeGreen linen Magenta Maroon MediumAquamarine MediumBlue MediumForestGreen MediumGoldenrod MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose moccasin NavajoWhite Navy NavyBlue OldLace OliveDrab Orange OrangeRed Orchid PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip PeachPuff peru Pink Plum PowderBlue purple Red RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen seashell Sienna SkyBlue SlateBlue SlateGray snow SpringGreen SteelBlue Tan Thistle tomato Transparent Turquoise Violet VioletRed Wheat White WhiteSmoke Yellow YellowGreen          
+    T   
+                                                
+    G      y                                   0       @       P       `       p                                                                                   0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                       	      	       	      0	      @	      P	      `	      p	      	      	      	      	      	      	      	      	       
+      
+       
+      0
+      @
+      P
+      `
+      p
+      
+      
+      
+      
+      
+      
+      
+      
+                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                          0      @      P      `      p                                                                                   $       (       ,       .file         grgb.c                                                               "               0   p           B         .text                         .data                         .bss                             .xdata         (                 .pdata         0                .rdata                             R            strdup           strchr           strstr               `            free             n   xpmReadRgbNames xpmGetRgbName theRGBRecords xpmGetRGBfromName xpmFreeRgbNames __imp_tolower xpmstrcasecmp scan.o/         1346471172  0     0     100666  4358      `
+d     b  #      .text           	                P`.data                               @ P.bss                                 P.rdata          p   
+              @ P@.xdata          \   
+              @ 0@.pdata          <   P           @ 0@AWAVAUATUWVSHx  H$   $  H$  H$  MD$  D$  tH$     H$      H$  H    HD$PtH$  0$  I$      HHD$H  $    $  H$  E}AULt$HHt$XMG\$dH͉H@LD$@HHD0HD$8         HIHE   ABA\   L    I[)AȉAAvLL\$@If.     )щAA\   )щȉAA IM9uJ\; A$H0IAIH;l$8BHt$X\$dD$  LD$H1HT$PH$  E1    11    H$   At)H$  Ā  HJpzhHr0   HL$h$     $  H$  Hl$HIH@HLl0t;11D  DE )D9   9t9u   9u    E   DMDEH]   EHL$pD$     HL$p    HID$(   I0HM9lHL$H    D1    1Hx  [^_]A\A]A^A_HPHT$P> 9hM   IHD$81LD$8ILHtHT$0    HT$0IDHH(uffDMDE1EDD$     HH    HID$()HL$H    D1    2HL$H    H@HHD$hHD$8F$  L$  MppAxhIp0A   @ fD  u,BuHB        B   1A    @ 1A     fD  AWAVAUATUWVSH(L$   L$   E1HDD$   H	Im    $   L=    t^1uH     H9t5EHAILAօt۸H([^_]A\A]A^A_D  AD;$   u1fffff.     UWVSH8A Hօu=jzH
+9vH;u H;t9w9t A81H8[^_]1A     H8[^_]ËF9sV̍ LD$(V        HLD$(   HtHV     AWAVAUATUWVSHxH$   HIHLMHD$P    HD$X    D$`   D$d    D$h      DbjDE1Ht             HHD$X  L$`    HHD$P  Ht-HEALHD$(HD$PHD$ H1u6H   HdEAL1HD$(HD$PHD$ HtnHL$XHtD$H    D$HHL$PHtD$H    D$HHtT$dHD$H    D$HHx[^_]A\A]A^A_fD  Do,    L$d0       HH  DD$d   A\v\   \   D9rD9DCT$h1   AM    HHV  A  HHvEEJT H  HH9uJLH ttātm      t_Ā"  HRHHWp1HLHtHT$H    HHDHT$H   HH(u.D  1@ Hk       HHF(   D$hDD$dLL$PHLH|$0Dl$(D$  :T$dHL$PA/EgEoIwAWHT$XD$HIW    D$HJMt;E`AhD<     1@ fD  1E11HGpH .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}| #%02x%02x%02x None 
+ O 0`
+p	P   	 B0`
+p	P   b0`pP  	 0`
+p	P      Z      `         R     `    4     y	  D   b       r                    <                                                 q                                                         !          1      H      a  "      !          h                  	                                                                       $       (       ,       0       4       8       .file         gscan.c                                                   `          #             <   `          G         .text          y	                .data                            .bss                             .rdata         p                 .xdata         \                 .pdata         <                    b                u                                                                                            sprintf          strdup           free                                                                                           .  ScanOtherColors storeMaskPixel MSWGetImagePixels.isra.1 storePixel XpmCreateXpmImageFromImage __imp_SelectObject __imp_GetPixel XDefaultScreen XDefaultColormap boundCheckingMalloc XQueryColors xpmReadRgbNames xpmFreeRgbNames xpmGetRgbName boundCheckingRealloc boundCheckingCalloc xpmFreeColorTable simx.o/         1346471173  0     0     100666  2890      `
+d       %      .text           p     \      
+     P`.data                               @ P.bss                                 P.xdata          \   L              @ 0@.pdata                     -   @ 0@AЃ	vAvQ17FÍAfff.     Hc         HcHc    D  Hc         1ffff.     1ffff.     WVSH H       HH	HǺ   ӉH [^_ffffff.     1ffff.     WVSH01MLLtVA8#tXLL$,LD$(HT$$H    t]DD$(DL$$L$,AADNDFN		Љ   H0[^_L    }      t1H0[^_@ KKyKD$$jK\K	D$(MK
+?D$,9@ K'KD$$KD$(D$,	@ KKKD$$KKD$(KD$,@    f.     E~,AKLfA A@fA@APII9uffff.     1ffff.     UWVSH8   $   $   D    HHt(HD$     AA       kH{sHH8[^_]ÐHt    fD  fffff.     SH HHtH	    HH [H [Ð                   20`p    R0`p          b0`pP      20    $       0   8      @   K      P   X      `   c      p   s                     $      \  (   `  f  4   p    8       <       @      2  P   @  f  T             "    F  #                R      4       G        T   !    &  $                                                                     $       (       ,       0       4       8       <       @       D       H       L       P       T       X       \       `       d       h       l       p       t       x       |                                                                                                  .file         gsimx.c                                                   0           %   @           9   P           N   `           ]   p           l              z                               `             p                                                     @      .text          f  
+             .data                            .bss                             .xdata         \                 .pdata            -                                                 	           malloc           calloc           realloc                         strlen           free             .  hexCharToInt boundCheckingMalloc boundCheckingCalloc boundCheckingRealloc XDefaultVisual XDefaultScreen XDefaultDepth XDefaultColormap XParseColor XAllocColor XQueryColors XFreeColors XCreateImage XImageFree XDestroyImage __imp_GetDeviceCaps __imp_CreateBitmap __imp_DeleteObject xpmGetRGBfromName WrFFrBuf.o/     1346471173  0     0     100666  879       `
+d             .text           p                P`.data                               @ P.bss                                 P.rdata             t              @ P@.xdata                           @ 0@.pdata                        @ 0@VSH(HH        HHtCH    HHcIA       HH    1H([^f.     萐w                B0`      g          
+           !       5       @                             .file         gWrFFrBuf.c                                        .text          g                .data                            .bss                             .rdata                          .xdata                          .pdata                         fopen            strlen           fwrite           fclose              XpmWriteFileFromBuffer 
+parse.o/        1346471173  0     0     100666  9240      `
+d     z  /      .text               4      s     P`.data           @              @ `.bss                                 P.xdata          t   4              @ 0@.pdata          <              @ 0@.rdata          P                 @ P@AWAVAUATUWVSHX
+  D$
+  L$
+  HD$
+      DA    HIj  A  A@  DƄP   v	  $
+  FMD$@    HHD$H   Ld$8t$DH    D$D   HD$HMdf.     1EL$P  u?HSHHSAD5 HA9v"t܅tHK    AD5 HA9wޅ  H$
+  1L$P  @ H09  HL    u9  A6IM9ZD$@$
+  9D$@Ld$8H$
+  L 1Z  Ll$P1   LHT  L$
+     RI0f<P9*  IL:JDPHuغ          HJDPj  IH$P  1@   HHt&H$
+  H
+H0	fLP  9uD$
+  E'DnLE1IH    x  Jl/?HSHHSP   wFHDP  ft7HH92  ttHK    P   v L    HX
+  [^_]A\A]A^A_D$
+  E  D~LD$0    IH      Nt?o@ HC(HHCE=     u_HSHHSP   wTHcHTPHtGHBft<HL9e  ttHK    댅tHK    I       IM Ht    II9u@ Ld$8$
+  hFLE1H   HD$0H    Hl$0H   f     1HKHHKP  HA9v.tڅtHKHT$(    HT$(P  HA9wH$P  L    H H#H@HH9AD;$
+  Mf     AD;$
+  fzf     D$0$
+  9D$0I    IM Ht    II9u5I   IM Ht    II9uqI   f.     IM Ht    II9uL    D:ffff.     AWAVAUATUWVSH8  D4  L$  HH$  L$  L$  L$  E  Hl$0D$,   E1E1E1E1A   HH    usH5   H   u`A   HH    tKH_   D40     Ht2HH)HHQ  =H  HH_       HuξH8  [^_]A\A]A^A_D  H   HuEuH5'   Hǹ   uH$  H    tAH    l$,EtEtEzEqH$  H$  1         SEEH5   Hǹ   .H$  H    AmEH5      HH$  H    A-EH5   Hǹ   H$  H    A    H$  H    iH$  H    QH$  H    9Hl$0A   H1H    toH$  MH           H$  A   HىH    1҃tH$  1H5       HH5       HzH$  LH        1҅tLH    1҅H$  1LLH    Cffffff.     AWAVAUATUWVSHh  $  Hˋ$  0   D$  L$      HHD$@>  D4  E  D$  E  $  HT$@HD$8    HT$0D$L$  H@HHD0HD$X$  HD$PH    L$L    HT$0HHH  D$  1$  Eu&      HSHHS7H9vt߅tHK    7H9wჼ$  HD$PD a  Ƅ$`   E1D$H    HT$`A   H    AE]  Eu+L-    D1I| AH    H9tGHHu|$H  EH$`     HT$`HBD$` E1    yD  HT$`IH    ul$Hu @ AƄ$`   A   Dt$H8H$`  HH!%t  DHQHD HH)    HH}  D$HHT$0HH    vfD  HH!%t  DHQHE Hf  t$H   D$HHT$0H$`  H<H
+H!%t  DHJHD HH)J    HHH   H    HD$00HD$8HD$XH9D$0EH$  HT$@H1$  HL$@    Hh  [^_]A\A]A^A_Ã$  HD$0LD$8H$  H    o$  HL$@D$(    D$(롋$  HL$@    ƃ0  "ƃ1   H    D$  ƃ1  "E1$  D$  H$`  D$  H|$@1D$  D$  AAT$8     D    HHY1E  D|$HLd$0EIIHHH HWHHWD HA9v!t݅tHO    D HA9wHLLd$0IALED|$HCD  v!AvHH$  I    H    Ƅ$`   HT$`HD`     HT$`A   H    tP$`   tHDHAAD! tAA  ADLAID Hf  놐HH!%t  DHQHD HH)    HHHHD$(    9l$8LD$(LG(Ƅ$`   w HH0A9/f.     H        
+fff.     AWAVAUATUWVSHXH-    L%8   A   HH$   L$          A	       LD$LHT$@HHD$0    uRf     HD$@HLHt^LHL  H    H    LD$LHT$@H    tHL$0D$(    D$(HX[^_]A\A]A^A_@ 	   LHAA(EE\  H|$0D$<   1VHT$8T$<    HHD$0  HvHt$@H|$0HL,HH    uL$L))    HIE   DD$LHHAA)    HL$@    H    LD$LHT$@H    J     E1    IEf.     AHD$@H   H   HL	   AA(EE   AvIM        Ht~HT$@IEHJ    LD$LHT$@H    yAuT$8HL$0D$(    D$(EE@EtJD$<@Eu   t$8H|$0a1HL$@    T$8HL$0Eu    IM    IE    HL$@    H    IE    AE    IHL$@    T$8HL$0IE    AE        wHD$@    H1    HL$0    D$8    T$8H$   H$   1H/D$8tEH\$0uHL$@    fD  AUATUWVSH   1MHHLǄ$       Ǆ$       HD$h    HD$p    HD$x    HǄ$       HǄ$       tA 1@H    AtDHĸ   [^_]A\A]f.     H$   L$   L$   H$   HHD$@H$   HD$8H$   HD$0H$   HD$(H$   HD$ Aw  D$   $   Ld$PAv	  LL$hHLd$ WA1  X  HD$pD$   D$   $   HLd$0HD$8HD$hHD$($   D$ a$   Av$     E   u  Hf  t$     HC0    C(    $   E $   E$   E$   EHD$hHEHD$pHEt!HD$xHCH$   HCH$   HC$   $   C $   C$$   v$      HL$hHt$       HL$pHt    HL$xHt    H$   Ht    H$   H    fHT$xH    L    A^D$   $       H$   H    vL     8L     E$   E $   E$   E$   EHD$hHEHD$pHEH$   H    HS0LC(HgAB       D       F       I       K                               
+ K0`
+p	P
+ G 0`
+p	P
+  0`
+p	P	 0`
+p	P    0`pP            	     	  4  0   @    H        `   XPMEXT #define _width _height _ncolors _chars_per_pixel XPMENDEXT s m g4 g c    ?                    V            |                  9                        C                  J      m                  D      P      m                              #      ~                                    3      P      h                               
+	      #	      L	      ]	      	      	      ]
+      f
+      
+            +  
+    @  !      "      #          1  $            $    5  %    v  &      %      %          4              &            "    (              $          S      Z      x              '                  '          b  (                  )                  '          o  (            '      *            *    !      5      ?  *    h        *                      x  +      %                            	  ,      -    L  ,    Y  .    i  .      ,                                                                                                          $       (       ,       0       4       8       .file         gparse.c                                                               	          .   @          A          .text            s             .data          (                .bss                             .xdata         t                 .pdata         <                .rdata         M                     N               [                i                }            getc             strcmp                           free                                             strchr                           xpmatoui         strlen           strcat           strncmp          strcpy                                                                           strncpy                                            $               .               ?           P  ParsePixels xpmParseValues xpmParseColors xpmParseExtensions xpmParseData xpmColorKeys __imp_isspace boundCheckingMalloc xpmNextString boundCheckingCalloc xpmHashSlot xpmNextWord xpmNextUI xpmFreeColorTable xpmHashIntern xpmGetString boundCheckingRealloc XpmFreeExtensions xpmParseHeader xpmGetCmt xpmHashTableInit xpmHashTableFree WrFFrDat.o/     1346471174  0     0     100666  841       `
+d             .text           `      T           P`.data                               @ P.bss                                 P.xdata             <              @ 0@.pdata             H  |         @ 0@SH   HLD$0HHT$pD$0       u.LD$0HT$pH    HL$pD$(    HL$0    D$(HĐ   [  0      `       !       7       E       O                         
+    .file         gWrFFrDat.c                                        .text          `                .data                            .bss                             .xdata                          .pdata                                             3                L                \            k   XpmWriteFileFromData XpmCreateXpmImageFromData XpmWriteFileFromXpmImage XpmFreeXpmImage XpmFreeXpmInfo 
+WrFFrI.o/       1346471174  0     0     100666  3804      `
+d       %      .text                     @     P`.data                               @ P.bss                                 P.rdata                           @ P@.xdata          $                 @ 0@.pdata               P         @ 0@AWAVAUATUWVSHh  HIHL$        Z  H   L    HH  D$T   /   L    HpH.   IDH    HtCH|$`HH    H.       Htf      _H.       HuH-   H    Ht2H|$`H9tHH    H _H-       HuHH$     H$  E1A  D$\    H8   IH    Et H$  L@MtHZ   H    EDMHb   HىD$(ED$ DE     H$   tH$    T$\  H~   IA          Et H$  L@MtHZ   H    EH}  Lg0L,@IMLH   H1    LL7MtH    H   HL0    HH(uH~   IA      L    M9   I0HcH5      I||  I|H5       hH$   MH$`      H   H$`      HH  D$T   FJ(D$\   Et H$  LBMtHZ   H    EDm ULuLeD$XA͉T$P    HHD$8   "H|$PHD$0A      l$XAEHHHD$@HHD$0HD$Hf     HD$01EHt6AHIHHH@HI    A9wHT$@HD$HM$LD$8H    "@ HA    D;|$PuHEtEl$XH|$01fAHIHHH@HI    A9wAEHHHD$0HD$0HL$8H "@     HL$8    D$\   H$  B(Hr0toLfH@M,    LH   H    ~Hnt1LD H   HH    9wM9LtIMH   H   IA          H   IA      1    |$Tt-    H0H9tH    Hh  [^_]A\A]A^A_H    E1Hv   IA          DJ$DB Ho   H        H5    HX0D$T   tLffff.     VSH   H$   HLML$   H\$     u<HtKHL$@H    LD$@H$   HyH$   D$8    D$8HĨ   [^f.     H$   E1H=image_name .Z compress > "%s" w .gz gzip -q > "%s"      /* XPM */
+static char * %s[] = {
+ /*%s*/
+ "%d %d %d %d  %d %d  XPMEXT ",
+ "%s 	%s %s %s,
+ ,
+"XPMEXT %s" ,
+"%s" ,
+"XPMENDEXT" };
+        
+  0`
+p	P	 	 0`    #      0       +       ;       C       d       |                                                 C      N      k      s                                          *      4      E      L      X      i                                                F      N      v                  0      n                                           0      <      O      V      k      x        !                                              X  "    n  #      $                                               .file         gWrFFrI.c                                                 0      .text            @             .data                            .bss                             .rdata                          .xdata         $                 .pdata                             3                @                M                ^            fwrite           fputs            strlen           fopen            strrchr          strchr           strcpy           fprintf          sprintf              l            strncpy          free             fclose                                                              XpmWriteFileFromXpmImage XpmWriteFileFromImage xpmColorKeys __imp__popen __imp___iob_func __imp__pclose boundCheckingMalloc XpmCreateXpmImageFromImage xpmSetInfo XpmFreeXpmImage 
\ No newline at end of file
diff -Naur vim73.orig/src/xpm/x64/lib/libXpm.lib vim73/src/xpm/x64/lib/libXpm.lib
--- vim73.orig/src/xpm/x64/lib/libXpm.lib	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xpm/x64/lib/libXpm.lib	2013-08-04 19:09:11.437274706 +0000
@@ -0,0 +1,469 @@
+!<arch>
+/               1345988052              0       12499     `
+  u  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _                                        n  @  @  @  @  @  @  @  @  @  @  @  @  @  @                                                                                                                                                                                                                                                              l            2 2 2 2   < < < < B B B B B B B B B B B B B B B B B B B B B B B B B B ; ; Fp Fp P` P` P`     
+ 
+ 
+ ׀ ׀ ׀ ׀ ׀ ׀??_C@_01NOFIACDB@w?$AA@ ??_C@_02DKCKIIND@?$CFs?$AA@ ??_C@_02HCDJPINJ@?4Z?$AA@ ??_C@_03BPDIBAFI@?$CC?0?6?$AA@ ??_C@_03GBOLEDH@?4gz?$AA@ ??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@ ??_C@_03OOBEOJGI@?$CC?$CFs?$AA@ ??_C@_04ICMOPAOK@?$CFs?0?6?$AA@ ??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@ ??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@ ??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@ ??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@ ??_C@_07MPMODOEI@?5XPMEXT?$AA@ ??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@ ??_C@_0L@NDIFBCJA@image_name?$AA@ ??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@ ??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@ ??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@ XpmWriteFileFromImage XpmWriteFileFromXpmImage XpmWriteFileFromData ??_C@_01CLKCMJKC@?5?$AA@ ??_C@_01GOHFPIOK@m?$AA@ ??_C@_01JEJKBAGA@g?$AA@ ??_C@_01LKDEMHDF@s?$AA@ ??_C@_01PAPGNFGE@c?$AA@ ??_C@_02PGAMAILP@g4?$AA@ ??_C@_06HPJDNAON@_width?$AA@ ??_C@_06MOPGFMAJ@XPMEXT?$AA@ ??_C@_07MAHLPAJA@?$CDdefine?$AA@ ??_C@_07MJPPKBHL@_height?$AA@ ??_C@_08FOGANHJK@_ncolors?$AA@ ??_C@_09OINMEHGD@XPMENDEXT?$AA@ ??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@ xpmColorKeys xpmParseColors xpmParseData xpmParseExtensions xpmParseValues XpmWriteFileFromBuffer XAllocColor XCreateImage XDefaultColormap XDefaultDepth XDefaultScreen XDefaultVisual XDestroyImage XFreeColors XImageFree XParseColor XQueryColors boundCheckingCalloc boundCheckingMalloc boundCheckingRealloc ??_C@_04OHJIHAFH@None?$AA@ ??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@ ??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@ XpmCreateXpmImageFromImage ??_C@_03CILPFPCI@Tan?$AA@ ??_C@_03PADCEAKC@Red?$AA@ ??_C@_04CAKOHOCJ@Blue?$AA@ ??_C@_04GDBIAANM@grey?$AA@ ??_C@_04HPKDHBOB@snow?$AA@ ??_C@_04ICNCCCFD@Cyan?$AA@ ??_C@_04IDKACLOG@Pink?$AA@ ??_C@_04KFNAIHAE@Gray?$AA@ ??_C@_04MJMKNOJB@peru?$AA@ ??_C@_04PABHPHAJ@Gold?$AA@ ??_C@_04PCFHDAMD@Plum?$AA@ ??_C@_04PDAFKIPB@Navy?$AA@ ??_C@_05BAFHKIGF@Gray8?$AA@ ??_C@_05BPGNDIAE@Black?$AA@ ??_C@_05CKEFAMIJ@Azure?$AA@ ??_C@_05EGDKJJDN@Brown?$AA@ ??_C@_05EOEDPHMI@Beige?$AA@ ??_C@_05GGOIJPPE@Green?$AA@ ??_C@_05IONEIFOL@Gray6?$AA@ ??_C@_05JEMJJCE@Gray9?$AA@ ??_C@_05JHMPLEKK@Gray7?$AA@ ??_C@_05JNPICLKJ@Coral?$AA@ ??_C@_05KFPJNGCI@Gray5?$AA@ ??_C@_05LMOCOHGJ@Gray4?$AA@ ??_C@_05MBJFBDCM@Gray1?$AA@ ??_C@_05MLLCELJD@linen?$AA@ ??_C@_05NIIOCCGN@Gray0?$AA@ ??_C@_05NNJJIMHF@ivory?$AA@ ??_C@_05OKLIEAOP@Gray2?$AA@ ??_C@_05PBMHPMDG@Khaki?$AA@ ??_C@_05PDKDHBKO@Gray3?$AA@ ??_C@_05PIEKEAEL@Wheat?$AA@ ??_C@_05PLKILNHI@White?$AA@ ??_C@_06CAMJFDIO@Gray68?$AA@ ??_C@_06CBALDJLJ@Gray78?$AA@ ??_C@_06CCIPONNH@Gray58?$AA@ ??_C@_06CDENIHOA@Gray48?$AA@ ??_C@_06CFIGEFAL@Gray18?$AA@ ??_C@_06CGACJBGF@Gray38?$AA@ ??_C@_06CHMAPLFC@Gray28?$AA@ ??_C@_06CKFHHOIE@Gray88?$AA@ ??_C@_06CLJFBELD@Gray98?$AA@ ??_C@_06DCIOCFPC@Gray99?$AA@ ??_C@_06DDEMEPMF@Gray89?$AA@ ??_C@_06DIBAAIPI@Gray79?$AA@ ??_C@_06DJNCGCMP@Gray69?$AA@ ??_C@_06DKFGLGKB@Gray49?$AA@ ??_C@_06DLJENMJG@Gray59?$AA@ ??_C@_06DMJNHEEK@Gray19?$AA@ ??_C@_06DONLMKBD@Gray29?$AA@ ??_C@_06DPBJKACE@Gray39?$AA@ ??_C@_06GCLALPIA@Violet?$AA@ ??_C@_06GEHONCEN@purple?$AA@ ??_C@_06ICCAKDNH@Yellow?$AA@ ??_C@_06IGOCDBII@Gray84?$AA@ ??_C@_06IHCAFLLP@Gray94?$AA@ ??_C@_06IJDDAKAH@Gray14?$AA@ ??_C@_06IKLHNOGJ@Gray34?$AA@ ??_C@_06ILHFLEFO@Gray24?$AA@ ??_C@_06IMHMBMIC@Gray64?$AA@ ??_C@_06INLOHGLF@Gray74?$AA@ ??_C@_06IODKKCNL@Gray54?$AA@ ??_C@_06IPPIMIOM@Gray44?$AA@ ??_C@_06JACIDLEG@Gray15?$AA@ ??_C@_06JCGOIFBP@Gray25?$AA@ ??_C@_06JDKMOPCI@Gray35?$AA@ ??_C@_06JEKFEHPE@Gray75?$AA@ ??_C@_06JFGHCNMD@Gray65?$AA@ ??_C@_06JGODPJKN@Gray45?$AA@ ??_C@_06JHCBJDJK@Gray55?$AA@ ??_C@_06JODLGKPO@Gray95?$AA@ ??_C@_06JOHNHAPC@Salmon?$AA@ ??_C@_06JPPJAAMJ@Gray85?$AA@ ??_C@_06KAFIOHJN@Gray27?$AA@ ??_C@_06KBJKINKK@Gray37?$AA@ ??_C@_06KCBOFJME@Gray17?$AA@ ??_C@_06KENFJLCP@Gray47?$AA@ ??_C@_06KFBHPBBI@Gray57?$AA@ ??_C@_06KGJDCFHG@Gray77?$AA@ ??_C@_06KHFBEPEB@Gray67?$AA@ ??_C@_06KMANAIHM@Gray97?$AA@ ??_C@_06KNMPGCEL@Gray87?$AA@ ??_C@_06LENEFDAK@Gray86?$AA@ ??_C@_06LFBGDJDN@Gray96?$AA@ ??_C@_06LIIBLMOL@Gray36?$AA@ ??_C@_06LJEDNGNM@Gray26?$AA@ ??_C@_06LJLNHCPM@Bisque?$AA@ ??_C@_06LLAFGIIF@Gray16?$AA@ ??_C@_06LMAMMAFJ@Gray56?$AA@ ??_C@_06LMIDBFFB@Orange?$AA@ ??_C@_06LNMOKKGO@Gray46?$AA@ ??_C@_06LOEKHOAA@Gray66?$AA@ ??_C@_06LPIIBEDH@Gray76?$AA@ ??_C@_06MALJFOCL@Gray43?$AA@ ??_C@_06MBHLDEBM@Gray53?$AA@ ??_C@_06MCPPOAHC@Gray73?$AA@ ??_C@_06MDDNIKEF@Gray63?$AA@ ??_C@_06MEDECCJJ@Gray23?$AA@ ??_C@_06MFPGEIKO@Gray33?$AA@ ??_C@_06MGHCJMMA@Gray13?$AA@ ??_C@_06MIGBMNHI@Gray93?$AA@ ??_C@_06MJKDKHEP@Gray83?$AA@ ??_C@_06NALDPNEI@tomato?$AA@ ??_C@_06NALIJGAO@Gray82?$AA@ ??_C@_06NBHKPMDJ@Gray92?$AA@ ??_C@_06NIGAAFFN@Gray52?$AA@ ??_C@_06NJKCGPGK@Gray42?$AA@ ??_C@_06NKCGLLAE@Gray62?$AA@ ??_C@_06NLOENBDD@Gray72?$AA@ ??_C@_06NMEFHGAJ@Maroon?$AA@ ??_C@_06NMONHJOP@Gray32?$AA@ ??_C@_06NNCPBDNI@Gray22?$AA@ ??_C@_06NPGJKNIB@Gray12?$AA@ ??_C@_06OCIOPEIM@Gray80?$AA@ ??_C@_06ODEMJOLL@Gray90?$AA@ ??_C@_06OIBANJIG@Gray60?$AA@ ??_C@_06OJNCLDLB@Gray70?$AA@ ??_C@_06OKFGGHNP@Gray50?$AA@ ??_C@_06OLJEANOI@Gray40?$AA@ ??_C@_06OLNBEJPI@Sienna?$AA@ ??_C@_06ONFPMPAD@Gray10?$AA@ ??_C@_06OONLBLGN@Gray30?$AA@ ??_C@_06OPBJHBFK@Gray20?$AA@ ??_C@_06PAKNAFKG@Orchid?$AA@ ??_C@_06PAMJICPA@Gray71?$AA@ ??_C@_06PBALOIMH@Gray61?$AA@ ??_C@_06PCIPDMKJ@Gray41?$AA@ ??_C@_06PDENFGJO@Gray51?$AA@ ??_C@_06PEEEPOEC@Gray11?$AA@ ??_C@_06PGACEABL@Gray21?$AA@ ??_C@_06PHMACKCM@Gray31?$AA@ ??_C@_06PKFHKPPK@Gray91?$AA@ ??_C@_06PLJFMFMN@Gray81?$AA@ ??_C@_07BEDHGNF@DimGray?$AA@ ??_C@_07DHJFKJBB@HotPink?$AA@ ??_C@_07EGKCDIIG@Gray100?$AA@ ??_C@_07LFEAGNHO@Magenta?$AA@ ??_C@_07NPHLIBMI@Thistle?$AA@ ??_C@_07PJJBFELP@OldLace?$AA@ ??_C@_07PNJLOGGO@SkyBlue?$AA@ ??_C@_08BKNCNHLL@honeydew?$AA@ ??_C@_08DECOJLB@cornsilk?$AA@ ??_C@_08GKFCFKAC@DeepPink?$AA@ ??_C@_08KJABFMDC@NavyBlue?$AA@ ??_C@_08KJDCPJPL@lavender?$AA@ ??_C@_08MFJLKPPC@seashell?$AA@ ??_C@_08MPDGLOME@SeaGreen?$AA@ ??_C@_08OIIPPDDA@moccasin?$AA@ ??_C@_09BIACIJCM@DarkKhaki?$AA@ ??_C@_09BPADAHOC@chocolate?$AA@ ??_C@_09CAIKIAKL@LightPink?$AA@ ??_C@_09CBPIIJBO@LightCyan?$AA@ ??_C@_09CGAPEKNC@CadetBlue?$AA@ ??_C@_09DEFDJNGA@SlateGray?$AA@ ??_C@_09EHCEAFM@Firebrick?$AA@ ??_C@_09GHIAHKFI@VioletRed?$AA@ ??_C@_09GLNHDDDA@IndianRed?$AA@ ??_C@_09GPKCMEJ@LightGray?$AA@ ??_C@_09HBGGELGD@RosyBrown?$AA@ ??_C@_09IDIENFGE@LightBlue?$AA@ ??_C@_09IGCCILNJ@LawnGreen?$AA@ ??_C@_09IPCNOKOO@DarkGreen?$AA@ ??_C@_09JHLANABP@burlywood?$AA@ ??_C@_09JIGGJDDI@PaleGreen?$AA@ ??_C@_09KDCNEHNA@OliveDrab?$AA@ ??_C@_09LBCNGEEN@SlateBlue?$AA@ ??_C@_09MENJEMGM@SteelBlue?$AA@ ??_C@_09MFNHBCHG@MintCream?$AA@ ??_C@_09MIGKOGAO@gainsboro?$AA@ ??_C@_09NCIGFANI@LimeGreen?$AA@ ??_C@_09NKNFPLIJ@RoyalBlue?$AA@ ??_C@_09ODOKIMGN@AliceBlue?$AA@ ??_C@_09OGGDAFEL@Goldenrod?$AA@ ??_C@_09OKCCEKJG@PeachPuff?$AA@ ??_C@_09PDBAPE@OrangeRed?$AA@ ??_C@_09PKEKPHNP@Turquoise?$AA@ ??_C@_09POIPCADB@MistyRose?$AA@ ??_C@_0BA@FICOLOP@MediumVioletRed?$AA@ ??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@ ??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@ ??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@ ??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@ ??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@ ??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@ ??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@ ??_C@_0L@CHNAEACO@chartreuse?$AA@ ??_C@_0L@EBAICJFO@DarkOrange?$AA@ ??_C@_0L@GDAICLDE@MediumBlue?$AA@ ??_C@_0L@GDPGEMPN@DarkSalmon?$AA@ ??_C@_0L@IKFOHFNE@PowderBlue?$AA@ ??_C@_0L@IKHGMDBB@Aquamarine?$AA@ ??_C@_0L@IPLDLLMK@DodgerBlue?$AA@ ??_C@_0L@JFDGDMCP@LightCoral?$AA@ ??_C@_0L@JIMBJDOA@PapayaWhip?$AA@ ??_C@_0L@JPDLIDIP@DarkViolet?$AA@ ??_C@_0L@KFIMMJOB@GhostWhite?$AA@ ??_C@_0L@NCGDJKJ@DarkOrchid?$AA@ ??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@ ??_C@_0L@PDJLLNIH@BlueViolet?$AA@ ??_C@_0L@PKPGDMJG@SandyBrown?$AA@ ??_C@_0M@BKMBPOEB@FloralWhite?$AA@ ??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@ ??_C@_0M@DMHCPCEI@Transparent?$AA@ ??_C@_0M@GCHHLGNN@GreenYellow?$AA@ ??_C@_0M@GODNHLND@ForestGreen?$AA@ ??_C@_0M@HNCGGICD@YellowGreen?$AA@ ??_C@_0M@IGPDELNF@LightYellow?$AA@ ??_C@_0M@JADEIAIP@SpringGreen?$AA@ ??_C@_0M@JKKOJIPA@LightSalmon?$AA@ ??_C@_0M@NBNLJNOB@SaddleBrown?$AA@ ??_C@_0M@PFCNBHOF@NavajoWhite?$AA@ ??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@ ??_C@_0N@BEMAIPGH@MediumOrchid?$AA@ ??_C@_0N@EPKOGBBA@MediumPurple?$AA@ ??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@ ??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@ ??_C@_0N@ILIFGKIL@MidnightBlue?$AA@ ??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@ ??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@ ??_C@_0O@DAMODFNL@PaleTurquoise?$AA@ ??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@ ??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@ ??_C@_0O@KNAELIFM@PaleVioletRed?$AA@ ??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@ ??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@ ??_C@_0O@OIOECAME@LavenderBlush?$AA@ ??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@ ??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@ ??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@ ??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@ ??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@ ??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@ ??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@ ??_C@_0P@LOKKLDIA@LightSlateGray?$AA@ ??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@ xpmFreeRgbNames xpmGetRGBfromName xpmGetRgbName xpmReadRgbNames ??_C@_01KDCPPGHE@r?$AA@ ??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@ ??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@ XpmReadFileToImage XpmReadFileToXpmImage XpmReadFileToData XpmReadFileToBuffer ??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@ ??_C@_0L@GGDGBBNE@XpmSuccess?$AA@ ??_C@_0M@KNHHACKL@XpmNoMemory?$AA@ ??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@ ??_C@_0O@NCABLEEJ@XpmColorError?$AA@ ??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@ ??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@ XpmFree XpmGetErrorString XpmLibraryVersion xpmatoui XpmFreeXpmInfo xpmInitXpmInfo xpmSetInfo xpmSetInfoMask XpmFreeXpmImage xpmInitXpmImage xpmHashIntern xpmHashSlot xpmHashTableFree xpmHashTableInit ??_C@_00CNPNBAHC@?$AA@ ??_C@_01DCLJPIOD@?$CB?$AA@ ??_C@_01EEMJAFIK@?6?$AA@ ??_C@_01GFHCPBMG@C?$AA@ ??_C@_01ICJEACDI@?$DL?$AA@ ??_C@_02CHHINNLG@?$CK?1?$AA@ ??_C@_02FMMEOLBI@?1?$CK?$AA@ ??_C@_02MLAGHBOD@?0?6?$AA@ ??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@ ??_C@_03PJGJBIFG@XPM?$AA@ ??_C@_04GPIBMJKI@XPM2?$AA@ ??_C@_04JEIEPLD@?5?8?$CI?6?$AA@ ??_C@_04JLHIKKNM@Lisp?$AA@ ??_C@_06GGEPMBCG@?$CIsetq?5?$AA@ ??_C@_07EPAHIEDI@_format?$AA@ ??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@ ??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@ ??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@ ??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@ xpmDataTypes xpmGetCmt xpmGetString xpmNextString xpmNextUI xpmNextWord xpmParseHeader XpmCreateImageFromData XpmCreateXpmImageFromData XpmCreateImageFromBuffer XpmCreateXpmImageFromBuffer XpmCreateImageFromXpmImage xpmParseDataAndCreate xpmstrcasecmp ??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@ ??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ XpmCreateDataFromImage XpmCreateDataFromXpmImage ??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@ XpmCreateBufferFromImage XpmCreateBufferFromXpmImage XpmAttributesSize XpmFreeAttributes XpmFreeExtensions xpmFreeColorTable xpmInitAttributes xpmSetAttributes 
+/               1345988052              0       11841     `
+   _      n  @     ظ  l  2  < B ; pF `P  
+  u                                                                                                                                                                                                                                                                                                                                              
+ 	                                        ??_C@_00CNPNBAHC@?$AA@ ??_C@_01CLKCMJKC@?5?$AA@ ??_C@_01DCLJPIOD@?$CB?$AA@ ??_C@_01EEMJAFIK@?6?$AA@ ??_C@_01GFHCPBMG@C?$AA@ ??_C@_01GOHFPIOK@m?$AA@ ??_C@_01ICJEACDI@?$DL?$AA@ ??_C@_01JEJKBAGA@g?$AA@ ??_C@_01KDCPPGHE@r?$AA@ ??_C@_01LKDEMHDF@s?$AA@ ??_C@_01NOFIACDB@w?$AA@ ??_C@_01PAPGNFGE@c?$AA@ ??_C@_02CHHINNLG@?$CK?1?$AA@ ??_C@_02DKCKIIND@?$CFs?$AA@ ??_C@_02FMMEOLBI@?1?$CK?$AA@ ??_C@_02HCDJPINJ@?4Z?$AA@ ??_C@_02MLAGHBOD@?0?6?$AA@ ??_C@_02PGAMAILP@g4?$AA@ ??_C@_03BPDIBAFI@?$CC?0?6?$AA@ ??_C@_03CILPFPCI@Tan?$AA@ ??_C@_03GBOLEDH@?4gz?$AA@ ??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@ ??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@ ??_C@_03OOBEOJGI@?$CC?$CFs?$AA@ ??_C@_03PADCEAKC@Red?$AA@ ??_C@_03PJGJBIFG@XPM?$AA@ ??_C@_04CAKOHOCJ@Blue?$AA@ ??_C@_04GDBIAANM@grey?$AA@ ??_C@_04GPIBMJKI@XPM2?$AA@ ??_C@_04HPKDHBOB@snow?$AA@ ??_C@_04ICMOPAOK@?$CFs?0?6?$AA@ ??_C@_04ICNCCCFD@Cyan?$AA@ ??_C@_04IDKACLOG@Pink?$AA@ ??_C@_04JEIEPLD@?5?8?$CI?6?$AA@ ??_C@_04JLHIKKNM@Lisp?$AA@ ??_C@_04KFNAIHAE@Gray?$AA@ ??_C@_04MJMKNOJB@peru?$AA@ ??_C@_04OHJIHAFH@None?$AA@ ??_C@_04PABHPHAJ@Gold?$AA@ ??_C@_04PCFHDAMD@Plum?$AA@ ??_C@_04PDAFKIPB@Navy?$AA@ ??_C@_05BAFHKIGF@Gray8?$AA@ ??_C@_05BPGNDIAE@Black?$AA@ ??_C@_05CKEFAMIJ@Azure?$AA@ ??_C@_05EGDKJJDN@Brown?$AA@ ??_C@_05EOEDPHMI@Beige?$AA@ ??_C@_05GGOIJPPE@Green?$AA@ ??_C@_05IONEIFOL@Gray6?$AA@ ??_C@_05JEMJJCE@Gray9?$AA@ ??_C@_05JHMPLEKK@Gray7?$AA@ ??_C@_05JNPICLKJ@Coral?$AA@ ??_C@_05KFPJNGCI@Gray5?$AA@ ??_C@_05LMOCOHGJ@Gray4?$AA@ ??_C@_05MBJFBDCM@Gray1?$AA@ ??_C@_05MLLCELJD@linen?$AA@ ??_C@_05NIIOCCGN@Gray0?$AA@ ??_C@_05NNJJIMHF@ivory?$AA@ ??_C@_05OKLIEAOP@Gray2?$AA@ ??_C@_05PBMHPMDG@Khaki?$AA@ ??_C@_05PDKDHBKO@Gray3?$AA@ ??_C@_05PIEKEAEL@Wheat?$AA@ ??_C@_05PLKILNHI@White?$AA@ ??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@ ??_C@_06CAMJFDIO@Gray68?$AA@ ??_C@_06CBALDJLJ@Gray78?$AA@ ??_C@_06CCIPONNH@Gray58?$AA@ ??_C@_06CDENIHOA@Gray48?$AA@ ??_C@_06CFIGEFAL@Gray18?$AA@ ??_C@_06CGACJBGF@Gray38?$AA@ ??_C@_06CHMAPLFC@Gray28?$AA@ ??_C@_06CKFHHOIE@Gray88?$AA@ ??_C@_06CLJFBELD@Gray98?$AA@ ??_C@_06DCIOCFPC@Gray99?$AA@ ??_C@_06DDEMEPMF@Gray89?$AA@ ??_C@_06DIBAAIPI@Gray79?$AA@ ??_C@_06DJNCGCMP@Gray69?$AA@ ??_C@_06DKFGLGKB@Gray49?$AA@ ??_C@_06DLJENMJG@Gray59?$AA@ ??_C@_06DMJNHEEK@Gray19?$AA@ ??_C@_06DONLMKBD@Gray29?$AA@ ??_C@_06DPBJKACE@Gray39?$AA@ ??_C@_06GCLALPIA@Violet?$AA@ ??_C@_06GEHONCEN@purple?$AA@ ??_C@_06GGEPMBCG@?$CIsetq?5?$AA@ ??_C@_06HPJDNAON@_width?$AA@ ??_C@_06ICCAKDNH@Yellow?$AA@ ??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@ ??_C@_06IGOCDBII@Gray84?$AA@ ??_C@_06IHCAFLLP@Gray94?$AA@ ??_C@_06IJDDAKAH@Gray14?$AA@ ??_C@_06IKLHNOGJ@Gray34?$AA@ ??_C@_06ILHFLEFO@Gray24?$AA@ ??_C@_06IMHMBMIC@Gray64?$AA@ ??_C@_06INLOHGLF@Gray74?$AA@ ??_C@_06IODKKCNL@Gray54?$AA@ ??_C@_06IPPIMIOM@Gray44?$AA@ ??_C@_06JACIDLEG@Gray15?$AA@ ??_C@_06JCGOIFBP@Gray25?$AA@ ??_C@_06JDKMOPCI@Gray35?$AA@ ??_C@_06JEKFEHPE@Gray75?$AA@ ??_C@_06JFGHCNMD@Gray65?$AA@ ??_C@_06JGODPJKN@Gray45?$AA@ ??_C@_06JHCBJDJK@Gray55?$AA@ ??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@ ??_C@_06JODLGKPO@Gray95?$AA@ ??_C@_06JOHNHAPC@Salmon?$AA@ ??_C@_06JPPJAAMJ@Gray85?$AA@ ??_C@_06KAFIOHJN@Gray27?$AA@ ??_C@_06KBJKINKK@Gray37?$AA@ ??_C@_06KCBOFJME@Gray17?$AA@ ??_C@_06KENFJLCP@Gray47?$AA@ ??_C@_06KFBHPBBI@Gray57?$AA@ ??_C@_06KGJDCFHG@Gray77?$AA@ ??_C@_06KHFBEPEB@Gray67?$AA@ ??_C@_06KMANAIHM@Gray97?$AA@ ??_C@_06KNMPGCEL@Gray87?$AA@ ??_C@_06LENEFDAK@Gray86?$AA@ ??_C@_06LFBGDJDN@Gray96?$AA@ ??_C@_06LIIBLMOL@Gray36?$AA@ ??_C@_06LJEDNGNM@Gray26?$AA@ ??_C@_06LJLNHCPM@Bisque?$AA@ ??_C@_06LLAFGIIF@Gray16?$AA@ ??_C@_06LMAMMAFJ@Gray56?$AA@ ??_C@_06LMIDBFFB@Orange?$AA@ ??_C@_06LNMOKKGO@Gray46?$AA@ ??_C@_06LOEKHOAA@Gray66?$AA@ ??_C@_06LPIIBEDH@Gray76?$AA@ ??_C@_06MALJFOCL@Gray43?$AA@ ??_C@_06MBHLDEBM@Gray53?$AA@ ??_C@_06MCPPOAHC@Gray73?$AA@ ??_C@_06MDDNIKEF@Gray63?$AA@ ??_C@_06MEDECCJJ@Gray23?$AA@ ??_C@_06MFPGEIKO@Gray33?$AA@ ??_C@_06MGHCJMMA@Gray13?$AA@ ??_C@_06MIGBMNHI@Gray93?$AA@ ??_C@_06MJKDKHEP@Gray83?$AA@ ??_C@_06MOPGFMAJ@XPMEXT?$AA@ ??_C@_06NALDPNEI@tomato?$AA@ ??_C@_06NALIJGAO@Gray82?$AA@ ??_C@_06NBHKPMDJ@Gray92?$AA@ ??_C@_06NIGAAFFN@Gray52?$AA@ ??_C@_06NJKCGPGK@Gray42?$AA@ ??_C@_06NKCGLLAE@Gray62?$AA@ ??_C@_06NLOENBDD@Gray72?$AA@ ??_C@_06NMEFHGAJ@Maroon?$AA@ ??_C@_06NMONHJOP@Gray32?$AA@ ??_C@_06NNCPBDNI@Gray22?$AA@ ??_C@_06NPGJKNIB@Gray12?$AA@ ??_C@_06OCIOPEIM@Gray80?$AA@ ??_C@_06ODEMJOLL@Gray90?$AA@ ??_C@_06OIBANJIG@Gray60?$AA@ ??_C@_06OJNCLDLB@Gray70?$AA@ ??_C@_06OKFGGHNP@Gray50?$AA@ ??_C@_06OLJEANOI@Gray40?$AA@ ??_C@_06OLNBEJPI@Sienna?$AA@ ??_C@_06ONFPMPAD@Gray10?$AA@ ??_C@_06OONLBLGN@Gray30?$AA@ ??_C@_06OPBJHBFK@Gray20?$AA@ ??_C@_06PAKNAFKG@Orchid?$AA@ ??_C@_06PAMJICPA@Gray71?$AA@ ??_C@_06PBALOIMH@Gray61?$AA@ ??_C@_06PCIPDMKJ@Gray41?$AA@ ??_C@_06PDENFGJO@Gray51?$AA@ ??_C@_06PEEEPOEC@Gray11?$AA@ ??_C@_06PGACEABL@Gray21?$AA@ ??_C@_06PHMACKCM@Gray31?$AA@ ??_C@_06PKFHKPPK@Gray91?$AA@ ??_C@_06PLJFMFMN@Gray81?$AA@ ??_C@_07BEDHGNF@DimGray?$AA@ ??_C@_07DHJFKJBB@HotPink?$AA@ ??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@ ??_C@_07EGKCDIIG@Gray100?$AA@ ??_C@_07EPAHIEDI@_format?$AA@ ??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@ ??_C@_07LFEAGNHO@Magenta?$AA@ ??_C@_07MAHLPAJA@?$CDdefine?$AA@ ??_C@_07MJPPKBHL@_height?$AA@ ??_C@_07MPMODOEI@?5XPMEXT?$AA@ ??_C@_07NPHLIBMI@Thistle?$AA@ ??_C@_07PJJBFELP@OldLace?$AA@ ??_C@_07PNJLOGGO@SkyBlue?$AA@ ??_C@_08BKNCNHLL@honeydew?$AA@ ??_C@_08DECOJLB@cornsilk?$AA@ ??_C@_08FOGANHJK@_ncolors?$AA@ ??_C@_08GKFCFKAC@DeepPink?$AA@ ??_C@_08KJABFMDC@NavyBlue?$AA@ ??_C@_08KJDCPJPL@lavender?$AA@ ??_C@_08MFJLKPPC@seashell?$AA@ ??_C@_08MPDGLOME@SeaGreen?$AA@ ??_C@_08OIIPPDDA@moccasin?$AA@ ??_C@_09BIACIJCM@DarkKhaki?$AA@ ??_C@_09BPADAHOC@chocolate?$AA@ ??_C@_09CAIKIAKL@LightPink?$AA@ ??_C@_09CBPIIJBO@LightCyan?$AA@ ??_C@_09CGAPEKNC@CadetBlue?$AA@ ??_C@_09DEFDJNGA@SlateGray?$AA@ ??_C@_09EHCEAFM@Firebrick?$AA@ ??_C@_09GHIAHKFI@VioletRed?$AA@ ??_C@_09GLNHDDDA@IndianRed?$AA@ ??_C@_09GPKCMEJ@LightGray?$AA@ ??_C@_09HBGGELGD@RosyBrown?$AA@ ??_C@_09IDIENFGE@LightBlue?$AA@ ??_C@_09IGCCILNJ@LawnGreen?$AA@ ??_C@_09IPCNOKOO@DarkGreen?$AA@ ??_C@_09JHLANABP@burlywood?$AA@ ??_C@_09JIGGJDDI@PaleGreen?$AA@ ??_C@_09KDCNEHNA@OliveDrab?$AA@ ??_C@_09LBCNGEEN@SlateBlue?$AA@ ??_C@_09MENJEMGM@SteelBlue?$AA@ ??_C@_09MFNHBCHG@MintCream?$AA@ ??_C@_09MIGKOGAO@gainsboro?$AA@ ??_C@_09NCIGFANI@LimeGreen?$AA@ ??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@ ??_C@_09NKNFPLIJ@RoyalBlue?$AA@ ??_C@_09ODOKIMGN@AliceBlue?$AA@ ??_C@_09OGGDAFEL@Goldenrod?$AA@ ??_C@_09OINMEHGD@XPMENDEXT?$AA@ ??_C@_09OKCCEKJG@PeachPuff?$AA@ ??_C@_09PDBAPE@OrangeRed?$AA@ ??_C@_09PKEKPHNP@Turquoise?$AA@ ??_C@_09POIPCADB@MistyRose?$AA@ ??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@ ??_C@_0BA@FICOLOP@MediumVioletRed?$AA@ ??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@ ??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@ ??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@ ??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@ ??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@ ??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@ ??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@ ??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@ ??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@ ??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@ ??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@ ??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@ ??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@ ??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@ ??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@ ??_C@_0L@CHNAEACO@chartreuse?$AA@ ??_C@_0L@EBAICJFO@DarkOrange?$AA@ ??_C@_0L@GDAICLDE@MediumBlue?$AA@ ??_C@_0L@GDPGEMPN@DarkSalmon?$AA@ ??_C@_0L@GGDGBBNE@XpmSuccess?$AA@ ??_C@_0L@IKFOHFNE@PowderBlue?$AA@ ??_C@_0L@IKHGMDBB@Aquamarine?$AA@ ??_C@_0L@IPLDLLMK@DodgerBlue?$AA@ ??_C@_0L@JFDGDMCP@LightCoral?$AA@ ??_C@_0L@JIMBJDOA@PapayaWhip?$AA@ ??_C@_0L@JPDLIDIP@DarkViolet?$AA@ ??_C@_0L@KFIMMJOB@GhostWhite?$AA@ ??_C@_0L@NCGDJKJ@DarkOrchid?$AA@ ??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@ ??_C@_0L@NDIFBCJA@image_name?$AA@ ??_C@_0L@PDJLLNIH@BlueViolet?$AA@ ??_C@_0L@PKPGDMJG@SandyBrown?$AA@ ??_C@_0M@BKMBPOEB@FloralWhite?$AA@ ??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@ ??_C@_0M@DMHCPCEI@Transparent?$AA@ ??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_0M@GCHHLGNN@GreenYellow?$AA@ ??_C@_0M@GODNHLND@ForestGreen?$AA@ ??_C@_0M@HNCGGICD@YellowGreen?$AA@ ??_C@_0M@IGPDELNF@LightYellow?$AA@ ??_C@_0M@JADEIAIP@SpringGreen?$AA@ ??_C@_0M@JKKOJIPA@LightSalmon?$AA@ ??_C@_0M@KNHHACKL@XpmNoMemory?$AA@ ??_C@_0M@NBNLJNOB@SaddleBrown?$AA@ ??_C@_0M@PFCNBHOF@NavajoWhite?$AA@ ??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@ ??_C@_0N@BEMAIPGH@MediumOrchid?$AA@ ??_C@_0N@EPKOGBBA@MediumPurple?$AA@ ??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@ ??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@ ??_C@_0N@ILIFGKIL@MidnightBlue?$AA@ ??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@ ??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@ ??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@ ??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@ ??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@ ??_C@_0O@DAMODFNL@PaleTurquoise?$AA@ ??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@ ??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@ ??_C@_0O@KNAELIFM@PaleVioletRed?$AA@ ??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@ ??_C@_0O@NCABLEEJ@XpmColorError?$AA@ ??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@ ??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@ ??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@ ??_C@_0O@OIOECAME@LavenderBlush?$AA@ ??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@ ??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@ ??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@ ??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@ ??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@ ??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@ ??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@ ??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@ ??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@ ??_C@_0P@LOKKLDIA@LightSlateGray?$AA@ ??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@ XAllocColor XCreateImage XDefaultColormap XDefaultDepth XDefaultScreen XDefaultVisual XDestroyImage XFreeColors XImageFree XParseColor XQueryColors XpmAttributesSize XpmCreateBufferFromImage XpmCreateBufferFromXpmImage XpmCreateDataFromImage XpmCreateDataFromXpmImage XpmCreateImageFromBuffer XpmCreateImageFromData XpmCreateImageFromXpmImage XpmCreateXpmImageFromBuffer XpmCreateXpmImageFromData XpmCreateXpmImageFromImage XpmFree XpmFreeAttributes XpmFreeExtensions XpmFreeXpmImage XpmFreeXpmInfo XpmGetErrorString XpmLibraryVersion XpmReadFileToBuffer XpmReadFileToData XpmReadFileToImage XpmReadFileToXpmImage XpmWriteFileFromBuffer XpmWriteFileFromData XpmWriteFileFromImage XpmWriteFileFromXpmImage boundCheckingCalloc boundCheckingMalloc boundCheckingRealloc xpmColorKeys xpmDataTypes xpmFreeColorTable xpmFreeRgbNames xpmGetCmt xpmGetRGBfromName xpmGetRgbName xpmGetString xpmHashIntern xpmHashSlot xpmHashTableFree xpmHashTableInit xpmInitAttributes xpmInitXpmImage xpmInitXpmInfo xpmNextString xpmNextUI xpmNextWord xpmParseColors xpmParseData xpmParseDataAndCreate xpmParseExtensions xpmParseHeader xpmParseValues xpmReadRgbNames xpmSetAttributes xpmSetInfo xpmSetInfoMask xpmatoui xpmstrcasecmp 
+WrFFrI.obj/     1345988051              100666  12566     `
+d> %:PQ         .drectve        ]   	               
+ .debug$S        p   !
+              @ B.text              
+  T          P`.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata          $     @         @0@.pdata             ^  j         @0@.xdata                           @0@.rdata                           @0@.rdata                           @0@.rdata                           @0@.text           d              P`.pdata             W  c         @0@.xdata                           @0@.rdata                           @0@.rdata                           @0@.text                E          P`.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata             =  I         @0@.xdata             g              @0@.rdata             s              @@@.rdata                           @0@.rdata                           @@@.text           >              P`.pdata             j  v         @0@.xdata                        @0@.rdata                           @@@.rdata                           @0@.rdata                           @0@.rdata                           @@@.rdata                           @0@.text           F     (          P`.pdata             F  R         @0@.xdata             p           @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata             $              @0@.text             ,            P`.pdata                        @0@.xdata                           @0@.rdata                           @0@.rdata                           @@@.rdata                           @0@.rdata                           @@@.rdata                           @@@.rdata          "                 @@@.text             &            P`.pdata             e  q         @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata               %         @0@.xdata             C  [         @0@.rdata             e              @@@.text              p            P`.pdata               #         @0@.xdata             A              @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       b   $     d:\Develop\xpm\lib\WrFFrI.obj : < b      	x    	x Microsoft (R) Optimizing Compiler   E   UATH(H\$@Ht$HH|$PLl$XLt$ LL5    HE    M$H    H    I\$I   LMtLH    H    HHHuH    H    I0IuLt$ Ll$XH|$PHt$HH\$@H(A\]/   $    G   #    O        n       v                                                       !                                                                   !
+   t
+ 
+d	 4                                                                    B
+P  ",
+ 	%s %s "%s DL$ HL$SUATAUAWH@LADAXAɃ    LHuAGH@A_A]A\][Ht$xH|$8Lt$0L$    "HptxH$   HD$ D  HEt9MD  LHH@HI    HHIuۋ$   Ld$p"H    MIG     Hl$ uH$   Et4Iff     LHH@HI    HHHu"H    MIF     I    Lt$0H|$8Ht$x3H@A_A]A\][-   6       5       4              5    +  1    :       B  .        d          '       '       -    Y Y Tt Od rP0%s %s,
+ Hl$ VH HHEtrH\$0H|$8Ld$@Ef     LH    H    D^H^EtILH    H    HHuHIuLd$@H|$8H\$0H    HHl$HH ^    6   T    >        X   Q    `           N                          9       9       ?    !                 9       9       K                  9       9       E    !  
+t 4               9       9       K                   9       9       K    
+ 
+T	 
+2`,
+"XPMENDEXT" ,
+"%s" ,
+"XPMEXT %s" H\$Ht$ WH0  H    H3H$   HLHu    H0HC   H3IHHɃH~IAH5       HcIu0H    HL$     H    HL$     HCHuSv~QBH5       HcIu8H    HL$     H    HL$     HCHu(   H    I    HCHt   3H$   H3    L$0  I[ Is(I_   r    0   q    `   p    v   m       j       i       f       e       b       j       i       f       i      _    %  s        >          W       W       ]    $ dK 4J F p            ^    gzip -q > "%s" .gz w compress > "%s" .Z H(tu1HIH(    H\$ HY    H0H;tH    H\$ H(       '   q    8       A   F           v       v       |    !                 v       v              A           v       v           ! 4               v       v                          v       v            B  H\$Hl$Ht$H|$ ATH0ILH   MtA!s3HtA!
+sAy( u3H        tLCMtH    H    AD$EL$E$D$(AD$H    HωD$     HttDK$DC H    H    tH    H    H    H    tLCMtH    H    ED$IT$H    tLCMtH    H    ID$EL$ED$A$HD$(ID$HHD$     u%tDC(HS0H    H    H    3H\$@Hl$HHt$PH|$XH0A\R       W        k       s                                                                                         "      *       T  '    l  9    s      {                                       
+ t d
+ T	 4 R};
+  XPMEXT  %d %d "%d %d %d %d /*%s*/
+ /* XPM */
+static char * %s[] = {
+ @UVWHp  H    H3H$`  HHT$ IH    V  H$  H   P/H    HHuHHú.   H    HtOH$`  H+HÈDuH$`  .   H$`      Htf.   H _    Hu-   H    HtgH$`  H;t"H$`  H+ːHÈDuH$`  -   H    Ht&     -   H _    HuH    LH\$(LHH    L$ tu H        H0H;tH    H$  H$`  H3    Hp  _^]   r    ,   W    P       m                                  ,      :      P      h      o  q            s                                  !       8                            8                               ! 4     8                                8                               p`P      `     ^    image_name H\$WH   H$   IMHLL$0LIH\$     u7HtHL$PH    LD$PE3HT$0H    HL$0    H$   HĐ   _/       E       \       h                                         4  p  @comp.id	x    .drectve       ]                 .debug$S       p                 .text                ;O                    .pdata               (?                   .xdata                       %           .pdata               U        :           .xdata         $      ')6        O           .pdata               +1|        d           .xdata      	                  w       	    .rdata      
+          0                
+    .rdata                IJ-                    fprintf          .rdata                ɯ0                                    .text          d     n                    .pdata                                 .xdata                :                  free             .rdata                >:         /          .rdata                         K          strncpy              k           .text                F                   .pdata               a                  .xdata                                 .pdata               /E                  .xdata               Q                  .pdata               O?[4                  .xdata                q#B        
+          .rdata                ".]         "          .rdata                nt         O          .rdata                TU <         w          .text          >                        .pdata               J06                  .xdata               '                                 fopen            .rdata                jL                   .rdata                 Ԕ         (           _popen           .rdata      !          1~`         B      !    sprintf          .rdata      "          I a         Z      "    .rdata      #          4އr               #                                                 .text       $   F      ߅{               $    .pdata      %         04D$              %    .xdata      &         ^$              &    .pdata      '         a.w$              '    .xdata      (         1?U$        .      (    .pdata      )         $$        D      )    .xdata      *          9$        X      *    fclose           _pclose          .text       +        i         m      +    .pdata      ,         
+X+        z      ,    .xdata      -          Pq+              -    .rdata      .          K               .    .rdata      /          U               /    .rdata      0          Kk               0    .rdata      1          $l               1    .rdata      2                   =      2    .rdata      3   "       S         g      3    .text       4        aT               4    .pdata      5         -[4              5    .xdata      6         $4              6    .pdata      7         4              7    .xdata      8         lq4        =      8    .pdata      9         H(V4        _      9    .xdata      :         ŭ4              :    .rdata      ;          \G               ;    strchr           strrchr          $LN32       4    .text       <         -               <    .pdata      =         <pu<              =    .xdata      >          kj<              >                       #               .           $LN7        <    I  WriteColors $pdata$5$WriteColors $chain$5$WriteColors $pdata$4$WriteColors $chain$4$WriteColors $pdata$WriteColors $unwind$WriteColors ??_C@_03BPDIBAFI@?$CC?0?6?$AA@ ??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@ ??_C@_03OOBEOJGI@?$CC?$CFs?$AA@ xpmColorKeys WritePixels $pdata$WritePixels $unwind$WritePixels ??_C@_02DKCKIIND@?$CFs?$AA@ ??_C@_04ICMOPAOK@?$CFs?0?6?$AA@ boundCheckingMalloc WriteExtensions $pdata$3$WriteExtensions $chain$3$WriteExtensions $pdata$2$WriteExtensions $chain$2$WriteExtensions $pdata$WriteExtensions $unwind$WriteExtensions ??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@ ??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@ ??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@ OpenWriteFile $pdata$OpenWriteFile $unwind$OpenWriteFile __GSHandlerCheck ??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_03GBOLEDH@?4gz?$AA@ ??_C@_01NOFIACDB@w?$AA@ ??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_02HCDJPINJ@?4Z?$AA@ __iob_func __security_cookie __security_check_cookie xpmDataClose $pdata$1$xpmDataClose $chain$1$xpmDataClose $pdata$0$xpmDataClose $chain$0$xpmDataClose $pdata$xpmDataClose $unwind$xpmDataClose xpmWriteFile $pdata$xpmWriteFile $unwind$xpmWriteFile ??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@ ??_C@_07MPMODOEI@?5XPMEXT?$AA@ ??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@ ??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@ ??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@ XpmWriteFileFromXpmImage $pdata$1$XpmWriteFileFromXpmImage $chain$1$XpmWriteFileFromXpmImage $pdata$0$XpmWriteFileFromXpmImage $chain$0$XpmWriteFileFromXpmImage $pdata$XpmWriteFileFromXpmImage $unwind$XpmWriteFileFromXpmImage ??_C@_0L@NDIFBCJA@image_name?$AA@ XpmWriteFileFromImage $pdata$XpmWriteFileFromImage $unwind$XpmWriteFileFromImage XpmFreeXpmImage xpmSetInfo XpmCreateXpmImageFromImage WrFFrDat.obj/   1345988051              100666  1117      `
+d %:Pc         .drectve        ]                   
+ .debug$S        p   9              @ B.text           `     	          P`.pdata             1  =         @0@.xdata             [              @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       d   &     d:\Develop\xpm\lib\WrFFrDat.obj : < b      	x    	x Microsoft (R) Optimizing Compiler @SH   HHLD$@HT$ HD$@       u*LD$@HT$ H    HL$     HL$@    HĀ   [%       ;       G       Q           `                             	 	0@comp.id	x    .drectve       ]                 .debug$S       p                 .text          `      /                    .pdata                                  .xdata                \^]        5               R                a                q                            $LN4               XpmWriteFileFromData $pdata$XpmWriteFileFromData $unwind$XpmWriteFileFromData XpmFreeXpmInfo XpmFreeXpmImage XpmWriteFileFromXpmImage XpmCreateXpmImageFromData 
+parse.obj/      1345988051              100666  16304     `
+d7 %:P+         .drectve        ]                  
+ .debug$S        p   		              @ B.rdata             y	              @0@.rdata             {	              @0@.rdata             }	              @0@.rdata             	              @0@.rdata             	              @0@.data           (   	  	         @ @.text             	        "    P`.pdata                        @0@.xdata                4         @0@.rdata             >              @0@.rdata             E              @@@.rdata          	   M              @@@.rdata             V              @@@.rdata             g              @@@.rdata             o              @0@.text             v  )          P`.pdata             A  M         @0@.xdata             k           @0@.pdata                        @0@.xdata                        @0@.pdata               	         @0@.xdata             '  C         @0@.pdata             a  m         @0@.xdata                        @0@.rdata                           @0@.text               B          P`.pdata             (  4         @0@.xdata             R  j         @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata             
+  "         @0@.pdata             @  L         @0@.xdata             j           @0@.text           -    #      .    P`.pdata             %  %         @0@.xdata             %  %         @0@.pdata             %  %         @0@.xdata             &  #&         @0@.pdata             A&  M&         @0@.xdata             k&  &         @0@.pdata             &  &         @0@.xdata             &  &         @0@.pdata             &  '         @0@.xdata             #'              @0@.rdata          
+   7'              @@@.text              A'  a*          P`.pdata             +  +         @0@.xdata             ++  ;+         @0@.pdata             Y+  e+         @0@.xdata             +  +         @0@.pdata             +  +         @0@.xdata             +              @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       a   #     d:\Develop\xpm\lib\parse.obj : < b      	x    	x Microsoft (R) Optimizing Compiler    c g g4 m s                                                                  
+            @SUVWATAUAVAWHh  H    H3H$P  4   L$  L$  L$  H$  H$  IL|$(Lt$0Ll$@MLL$HH\$8HT$ H*         HH      IH      IH      HT$PA   H    ؅  A   uHT$PH    D    uA3AE t+HH    tHH    uE3E&3R  HL$PLƋ    tHH    tA3HT$PA   HA    uHT$PH    D    tE3Ee 3  E3E333E3Ef HT$PA   H      HT$PH    D      HT$PA   H    |  LL$PDP _   I    LHV  HI+HLPH   I+   I+tKHtI빅   DGH    I      HT$(H       A      DFH    I       HT$HH       AjE   EEH    I       HT$8H    tvE0EulEFH    I    uUHT$ H    tDEH    AA]Et'Et"ttHD$0     HD$@     3H$P  H3    Hh  A_A^A]A\_^][   9       8       8       8       8       7       6       3      8    -  8    M  2    \  8    }  7      6      3      7      1      3      7    )  .    v  -    ~  3      8      *      3      8      '      3      8    *  $    2  3    C  8    R  !      :                  ;       ;           &
+ M 	p`P0    P          _width _height _ncolors _chars_per_pixel #define XPMEXT @SWAUAVAWH  H    H3H$P  H$  DET$(L0   AH\$@LL$HD|$<    HHD$ HuG  A4   H$x  H$p  L$h    3HHD$0l$,E  A|$8I        HHH  Et>AAttIN    DIFHDXIFDHHuH\$0 Av AvHHL$@D    T  H$P  A   IDDD$P     D  EuVH5    Af     LH3IHHH;uH$P  LI      Hr3E  Eu3H|$PH    fGAHH|$PƄP   3H$P  3    
+HDuDH$P  A   I    D#E  H3H|$PH#    H\$0AHHH   HD$PHL$PH+     HD
+ut$,Dl$(H0H\$0t$,A;  |$8D|$<s`EtGH3H|$PH#    HtFHT$0AHHL$PHT$PH+@ 
+HLu3D{D$P De3T$(HL$       T$(HL$       IAƆ0  "AƆ1       E3AƆ1  "HE       AO    HHH  Et>IAttIN    DIFHDXIFDHHuH\$@ AvAvHEH    l  I    H$P  @2A   I@|$P    D؅   @t3H|$PH    fGAHH|$PƄP   3H$P  H3fff     
+HDuH$P  A   I    D؅t|$PH3H|$PH#    HH   HL$PHT$PH+fffff     
+HLuAEH~(L$PD;sI    AH0E;YH|$ HD$HH83H$p  H$x  L$h  H$P  H3    HĀ  A_A^A]_[HL$ A    HL$ A       9    O   ^       !       ]       \    ,  [    W  7    p        3      Z    4  7    _  ]      ]    C  W    [  W    }  !      ]      \      [    &  !    D  7    h  Z      7      ]    3  !    z  :      W      W                _       _       D    !   č  d  T     p          _       _       V    n            _       _       J    !       p          _       _       V    p   n          _       _       P    ! č d T     p          _       _       V        p           _       _       V    "  	p0      P            @SUVATAUAVHX
+  H    H3H$@
+  H$
+  L$
+  L$
+  HAAET$ \$$HD$8    HD$(Hu
+)  H$
+  $
+  L$P
+  Lǃ%    H|$0Ƅ<@     A   E3E   H    A   ff     H$@  tBH|$0E ttHM    DHEHDXHEDHHuʋ$
+  H$@  I    HHQ  AIAG;t$ r\$ AD;d$$THD$(HL$8H3H$
+  L$P
+  H$@
+  H3    HX
+  A^A]A\^][3D9\$$vfD  H    DT$ E        H$@  tGH|$0E ttHM    DHEHDXHEDHHuʋ$
+  DT$ 3DEtB AL$@  H@HIL+    B+uHutAE;rE;  EIA;FAD;l$$HL$@3A       E3AEtUfD  H4@HIHHL9l@u          HD@HtlISHHD@fHA;rDt$$AE   Dd$ H    AE       E tFtAHM    C    JL@Ht    II   |I    HEHXHEC=      E ttHM    DHEHDXHEAC=   waHcHL@HtTIcAftHIAGA;0A;
+D  JL@Ht    II   |JL@Ht    II   |HL$(    JL@Ht    II   |HL$(    H$@  3A       3DEt fIAPAI0fL@  E;rDd$$EqfH    td@ E ttHM    DHEHDXHEAC=   RIcD@  f>IAG;rA;3   9    ]   ]       !      \    J  |      :      !      \      }      ^    I  !    q  \      {      {      \    K  {    k  {      {      {      {      }      !    1  \                b       b       h    !   J tU    u          b       b       z                b       b       n    !       u          b       b       z    u             b       b       t    ! JtU    u          b       b       z        u           b       b       z    # K
+`P0    @
+          LD$HT$SWATAUAVAWHHE3MLDd$        ω|$$    L$   HT$(IL    ؅tI    HHA_A^A]A\_[HT$(H    A   H$       ؅   D  HT$(H    A	       tYHL$(    I    L$   HT$(I    ؅uHT$(D@H        ؅uI    6  uHT$(H    A	       Ht$@  3Ht$0  I    HH  HHt$(LNHH    tKH    u$   ++˃    HH	  D$   HD+HA    HL$(    I    L$   HT$(I    ؅  H    DCH    HGHT$(E3    ؅   E3At$ff     HT$(H    A	       trHO    H  HGHL$(AIL I΃I    L$   HT$(I    ؅   HT$(D@H        ؅qEuHO    HG    Ht$0DgDd$ |$$AHDd$ Ht$0|$$0E   u
+HL$(    L$   H$   Ee L83Ht$@H$   HHA_A^A]A\_[ËT$ IDg    HL$(    T$ IDg    AT$IHG    G        HL$(    AT$IHG    G        [HL$(    AI    <L$   HL$(    I    E3	'   !    7   ]    O       ]   {    z   6       3              3       {       !              6       3      {    "      -  3    U      |              ]            {      !            ]      6       3    H      S  3    d        !            6      3      {    *  {    q        {                  {            {            {    !  {    c  -                            !   d  T                                 L  c                            !      3                           3  L                            ! d    3                              3                            ! T                                                                   p0  XPMENDEXT HSUVWAUH   3ILHxxHxHxHxHxHxMtA sw      HD$XL$   LD$PHD$@HD$\HT$THD$8HD$hHHD$0H$   HD$(H$   HD$     c  tH$   H    D$   Av'$   vH$       "  D$   $   H$   L$   HL$   HD$ L$       L$   Dt.$   e  $   W  H$       E  tHT$pH    D$   DD$PT$THD$`HHD$8H$   HD$0$   Lt$(D$     $   Dv$   vH$       E   tHT$xH    Ht4#
+s.9|$Xt!LC(HS0H    DtH|$`   H{0{(D$TMuAE D$PAE$   AE$   AEHD$`IEHt<tH$   HCHD$pHCHD$xHC9|$\t$   C D$hC$3YH|$`Mt$   I    HtH    H$   Ht    HL$pHt    HL$xHt    AL$   L$   Hİ   A]_^][I                            (  >    `      v        b                        W      {      {      {      {                                   !                                                                !                                                                    	p`P0  @comp.id	x    .drectve       ]                 .debug$S       p                 .rdata                d8N                    .rdata                `*                    .rdata                R.         4           .rdata                S         M           .rdata                5*         e           .data          (                    }           .text       	     "   t                	    .pdata      
+         4	               
+    .xdata                e	                                                   .rdata                l                     .rdata                "S                   .rdata         	       <G                    .rdata                Q         ?          strchr           .rdata                ЦZ         h          xpmatoui         strncmp          .rdata                |e                                                                               $LN60       	    .text               &C                   .pdata               _                  .xdata               ñ                  .pdata                       %          .xdata               |{        =          .pdata                       U          .xdata               DQ        m          .pdata               P                  .xdata               a                                 .rdata                $                                  getc                                           $LN95           .text               6^                   .pdata                                 .xdata               ;^        4          .pdata               }A        I          .xdata                u]        ^           .pdata      !         [         s      !    .xdata      "          ҿ              "    .pdata      #                       #    .xdata      $         G              $    free                            memset           .text       %   -  .                  %    .pdata      &         mP%              &    .xdata      '         %              '    .pdata      (         !%              (    .xdata      )         Yw%        7      )    .pdata      *         %        S      *    .xdata      +         aes%        o      +    .pdata      ,         %              ,    .xdata      -         ۵%              -    .pdata      .          q%              .    .xdata      /          ;M%              /                   strncpy          isspace              
+           .rdata      0   
+       Щ               0        ?           $LN43       %    .text       1         :X         L      1    .pdata      2         m_1        Y      2    .xdata      3         ׾!1        o      3    .pdata      4         h.1              4    .xdata      5         X1              5    .pdata      6         =1              6    .xdata      7           X1              7                                                                $LN37       1      ??_C@_01PAPGNFGE@c?$AA@ ??_C@_01JEJKBAGA@g?$AA@ ??_C@_02PGAMAILP@g4?$AA@ ??_C@_01GOHFPIOK@m?$AA@ ??_C@_01LKDEMHDF@s?$AA@ xpmColorKeys xpmParseValues $pdata$xpmParseValues $unwind$xpmParseValues __GSHandlerCheck xpmNextString ??_C@_06HPJDNAON@_width?$AA@ ??_C@_07MJPPKBHL@_height?$AA@ ??_C@_08FOGANHJK@_ncolors?$AA@ ??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@ ??_C@_07MAHLPAJA@?$CDdefine?$AA@ ??_C@_06MOPGFMAJ@XPMEXT?$AA@ xpmNextWord xpmNextUI __security_cookie __security_check_cookie xpmParseColors $pdata$4$xpmParseColors $chain$4$xpmParseColors $pdata$3$xpmParseColors $chain$3$xpmParseColors $pdata$2$xpmParseColors $chain$2$xpmParseColors $pdata$xpmParseColors $unwind$xpmParseColors xpmFreeColorTable ??_C@_01CLKCMJKC@?5?$AA@ xpmHashIntern boundCheckingMalloc boundCheckingCalloc ParsePixels $pdata$3$ParsePixels $chain$3$ParsePixels $pdata$2$ParsePixels $chain$2$ParsePixels $pdata$1$ParsePixels $chain$1$ParsePixels $pdata$ParsePixels $unwind$ParsePixels xpmHashSlot xpmParseExtensions $pdata$4$xpmParseExtensions $chain$4$xpmParseExtensions $pdata$2$xpmParseExtensions $chain$2$xpmParseExtensions $pdata$1$xpmParseExtensions $chain$1$xpmParseExtensions $pdata$0$xpmParseExtensions $chain$0$xpmParseExtensions $pdata$xpmParseExtensions $unwind$xpmParseExtensions XpmFreeExtensions boundCheckingRealloc ??_C@_09OINMEHGD@XPMENDEXT?$AA@ xpmGetString xpmParseData $pdata$2$xpmParseData $chain$2$xpmParseData $pdata$1$xpmParseData $chain$1$xpmParseData $pdata$xpmParseData $unwind$xpmParseData xpmHashTableFree xpmHashTableInit xpmGetCmt xpmParseHeader WrFFrBuf.obj/   1345988050              100666  1173      `
+d %:P         .drectve        ]                  
+ .debug$S        p   a              @ B.text           v     G          P`.pdata             o  {         @0@.xdata                           @0@.rdata                           @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       d   &     d:\Develop\xpm\lib\WrFFrBuf.obj : < b      	x    	x Microsoft (R) Optimizing Compiler H\$VH HH        HHuH\$8H ^H3H|$0HD@LHHHcH    Hˍx    H\$8H|$0H ^              S       ^           v                             : :t 
+4 
+2`w @comp.id	x    .drectve       ]                 .debug$S       p                 .text          v      a                    .pdata               ?j                   .xdata                3        9           fclose           fwrite           fopen            .rdata                1~`         X           $LN5            p   XpmWriteFileFromBuffer $pdata$XpmWriteFileFromBuffer $unwind$XpmWriteFileFromBuffer ??_C@_01NOFIACDB@w?$AA@ 
+simx.obj/       1345988050              100666  8727      `
+d2 %:P         .drectve        ]                  
+ .debug$S        l   A              @ B.text                          P`.text                          P`.text                          P`.text                             P`.text                             P`.text           8     $	          P`.pdata             8	  D	         @0@.xdata             b	              @0@.text              n	               P`.text           '   q	               P`.text             	  t          P`.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata             2  F         @0@.pdata             d  p         @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata               (         @0@.xdata             F  Z         @0@.pdata             x           @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata             0  <         @0@.xdata             Z  n         @0@.pdata                        @0@.xdata                           @0@.text           |     :          P`.pdata             N  Z         @0@.xdata             x              @0@.text                             P`.text           6                  P`.text                             P`.text           q     0          P`.pdata             D  P         @0@.xdata             n  ~         @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata             &              @0@.text              2  E          P`.pdata             O  [         @0@.xdata             y              @0@.text           %               P`.pdata                        @0@.xdata                           @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       `   "     d:\Develop\xpm\lib\simx.obj : < b      	x    	x Microsoft (R) Optimizing Compiler Hc           HcHc           Hc           33H\$WH HH	       H       H\$0H _        '            8           !       !           
+ 
+4 
+2p3ÍAЃ	wAÍAwAÍAwA3H(LLH  9#  HH|$ 3IHHɃ   AR3ɍBЃ	wBw©BwAARBЃ	wBw©BwAARBЃ	wH|$ Jи   A	H(ÍBwH|$ J   A	H(ÍBwJH|$ A	   H(Ãc  AR3ɍBЃ	wBw©BwAzGЃ	wGwǩGwAARBЃ	wBw©BwAzGЃ	wGwǩGwAARBЃ	wBw©BwAzGЃ	wOH|$ Ѹ   AH(ÍGwOH|$ Ѹ   AH(ÍGwOH|$    AH(Ãu_AJ    AJ    AAJ    AJ    AAJ	    AJ
+    и   AH|$ H(3H(r  '      '      '      '      '      '                *       *       0    !                  *       *       `    g            *       *       6    !   t                *       *       `    E  g          *       *       <    !   t                *       *       `    #  E          *       *       B    !   t                *       *       `       #          *       *       H    !   t                *       *       `                  *       *       N    !   t                *       *       `                  *       *       T    !   t                *       *       `                   *       *       Z    ! t                *       *       `                    *       *       `     B  @SH0IIMtcA8#LL$ HT$$LD$PHu        t;DL$PDD$ L$$AAKDKDCи   H0[3H0[*   *    1   j        |           k       k       i     R0   E~/A     A IHA@A@A@A@A@u3Hl$VH0   A    HHtGH\$@\$pH|$H|$xDA   ˋHD$         ^H\$@H~H|$HHƉnHl$PH0^       I       f   q                         }    !                                      f                             ! t	 4                                                                  
+ 
+T
+ 
+R`H(Ht    H(
+                                         B  HtSH HH	    H    H [                  %                             
+ 
+20@comp.id	x    .drectve       ]                 .debug$S       l                 .text                eS                    malloc           .text                K?                    calloc           .text                :         ,           realloc          .text                          A           .text                          P           .text          8      h         _           .pdata      	         H(V        m       	    .xdata      
+          %Y%               
+                    $LN3            .text                                     .text          '       g6                    .text               P                    .pdata               G^Z                   .xdata               !@                   .pdata               U                   .xdata               LR                  .pdata                       )          .xdata               LR        >          .pdata               im!        S          .xdata               LR        g          .pdata               >y        {          .xdata               LR                  .pdata                                 .xdata               LR                  .pdata               Q                  .xdata               LR                  .pdata               Q=                  .xdata               fR                  .pdata               Vbv                  .xdata                9        -          .text           |      b         @           .pdata      !         ߄         L      !    .xdata      "          c         _      "        s           $LN8             .text       #          +               #    .text       $   6       k               $    .text       %                         %    .text       &   q      ;               &    .pdata      '         X&              '    .xdata      (         k&              (    .pdata      )         h&              )    .xdata      *         J<&              *    .pdata      +         #&              +    .xdata      ,          M&        #      ,        8           $LN13       &    .text       -                   K      -    .pdata      .         64-        V      .    .xdata      /          9-        h      /    free             $LN4        -    .text       0   %      "kzj         {      0    .pdata      1         2l0              1    .xdata      2          k0              2                   $LN8        0      boundCheckingMalloc boundCheckingCalloc boundCheckingRealloc XDefaultVisual XDefaultScreen XDefaultDepth $pdata$XDefaultDepth $unwind$XDefaultDepth __imp_GetDeviceCaps XDefaultColormap hexCharToInt rgbFromHex $pdata$13$rgbFromHex $chain$13$rgbFromHex $pdata$12$rgbFromHex $chain$12$rgbFromHex $pdata$10$rgbFromHex $chain$10$rgbFromHex $pdata$8$rgbFromHex $chain$8$rgbFromHex $pdata$6$rgbFromHex $chain$6$rgbFromHex $pdata$4$rgbFromHex $chain$4$rgbFromHex $pdata$2$rgbFromHex $chain$2$rgbFromHex $pdata$0$rgbFromHex $chain$0$rgbFromHex $pdata$rgbFromHex $unwind$rgbFromHex XParseColor $pdata$XParseColor $unwind$XParseColor xpmGetRGBfromName XAllocColor XQueryColors XFreeColors XCreateImage $pdata$2$XCreateImage $chain$2$XCreateImage $pdata$1$XCreateImage $chain$1$XCreateImage $pdata$XCreateImage $unwind$XCreateImage __imp_CreateBitmap XImageFree $pdata$XImageFree $unwind$XImageFree XDestroyImage $pdata$XDestroyImage $unwind$XDestroyImage __imp_DeleteObject 
+scan.obj/       1345988050              100666  8135      `
+d %:P)  l       .drectve        ]                  
+ .debug$S        l   !              @ B.rdata          ]                 @P@.data                         @ @.text                          P`.pdata                        @0@.xdata                           @0@.text           0                  P`.text           D  *  n          P`.pdata                        @0@.xdata                        @0@.pdata               	         @0@.xdata             &	  :	         @0@.pdata             X	  d	         @0@.xdata             	              @0@.rdata             	              @0@.text              	            P`.pdata             _  k         @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata               '         @0@.xdata             E  a         @0@.rdata             k              @@@.text              y            P`.pdata             2  >         @0@.xdata             \              @0@.text             x  M          P`.pdata                        @0@.xdata                           @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       `   "     d:\Develop\xpm\lib\scan.obj : < b      	x    	x Microsoft (R) Optimizing Compiler  .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|                 Hl$Ht$ ATH A8 MHtA     3Hl$@Ht$HH A\H
+H\$0ZH|$8zH;s9(t
+H;r;u,R;r҉V    Hu   HH,FA$3H\$0H|$8Hl$@Ht$HH A\u                                        H
+ Ht @4 d	 T 2u"9JuHB   B   A    3A     3H\$Hl$WH HJI؋    LHE HuACH\$8Hl$@H _L    IE3AACv<DW AظBIAD¸BAAk\D+ICAKuHt$0A H   %   usp      tbtH4IHHspHCpH4ȿ   H]H+@ HHt    HHt7Hv3Ht$0H\$8Hl$@H _H        HE(HuԸ   1    B   
+       0    +  /    0  0    (  D                             !   d                             ,       (                        &    ! d                             ,                                 ,     T 4 2pNone @SVWAVAWH  H    H3H$p  H$  3E3IDD$0LHT$8HHL$`HD$HHttHGHD$@    HH    DD$0HD$@$  tI0AHL|$8DD$0B        HD$XHu
+&  H$  L$  E3L$  ILD9d$0   D$  AG    LHE H   L    DøBIk\D+CACAv@EOfD  ˸BIA+BDAAk\D+ICAKuE3AAE IH0HAGD;d$0TL|$8HD$Xt$0HT$@HL$`DL    33    ؉D$`Htjs3L_pLW0DwhD   L\$8LT$@\HL$X      s)HGpLW0DwhD   HD$HLT$@L\$HL\$8L\$HLT$HDl$`L\$8LT$@D$P    H  Mg(L|$XIoE   E33E3Et*@ A;uA   EII+A9t
+IA;rA;tNHD$HHtJ<H<RHII\$I+   HL(Ht    HHHu\$`t$0jt.EDM DE3ɉD$     HtH    I$1EDM DEH    HL$pD$     HL$p    I$I<$ t&D$PLT$@L\$8I0HD$P;I    3    L|$XI    3    3L$  H$  L$  H$p  H3    HĐ  A_A^_^[   S    a   R    l   Q       1       1      
+      P      O      N      0    $  M    1  0    L  L    Z  I    d  0      N      H      N      H      T                 4       4       :    !                 4       4       F                 4       4       @    ! P Q T[               4       4       F                   4       4       F    ! R p`0      p     G    #%02x%02x%02x H\$Hl$Ht$WATAUAVAWH Lt$pHLH	I~EA    3Et>Ld$x3ۅt,@ IM Dŋ    LI֋Aԅu0H;rA;r3H\$PHl$XHt$`H A_A^A]A\_ø6   _    [   ^                   W       W       ]     d T 4
+ 2pLL$ SVATAUAVAWHhE3ILLD$P   AELd$@Ld$HDd$TDd$XHt	rDjHtApEhH$   Ht usA,$   D$   Aͺ   H$   H|$`    HD$HHuX  L$P    HD$@HuXy  Ht[HIH|$H    AEtBA܅t4D  IDŋ    HT$@Lǋ       H;rA;rMtWIIH|$H    AEt>A܅t0D  IDŋ    HT$@Lǋ    u9H;rA;rL$T0       LHuX         DD$T\      D;v     k\D;w$   D$X;Bt&H$   IL    ؅u6D$XDD$TH$   LL$@Hl$0IIω|$(D$     ؅t9HD$HHtH    HD$@HtH    MtT$TI    1H$   D$TAHD$H1DiyLaHAHL$@    3H|$`H$   HhA_A^A]A\^[â   j       1       _    
+  ^          H  _    j  ^    y        j          E  4    ]  N    o  N      i      N                  k       k       h     t T 	`0  @comp.id	x    .drectve       ]                 .debug$S       l                 .rdata         ]       q%                    .data                              \           .text                &         f           .pdata               Ӕ        q           .xdata                L                                   .text          0       S                    .text       	   D     /g                	    .pdata      
+         e	               
+    .xdata               mѯ-	                   .pdata               [x	                  .xdata               |i	        )          .pdata               `g	        G          .xdata                Br	        c          .rdata                xE                   strdup                          .text                v                   .pdata                                 .xdata                2                  .pdata               {                  .xdata               p        
+          .pdata               ʜ        #          .xdata               h        :              R               c           sprintf          .rdata                Ñ2         s                         free                                                                                                       .text                p$                   .pdata                       +          .xdata                mۇ        D              ^               m           .text               i\m                   .pdata               Qib                  .xdata                E                                                $LN60             ??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@ printable storePixel $pdata$storePixel $unwind$storePixel boundCheckingRealloc storeMaskPixel ScanTransparentColor $pdata$2$ScanTransparentColor $chain$2$ScanTransparentColor $pdata$0$ScanTransparentColor $chain$0$ScanTransparentColor $pdata$ScanTransparentColor $unwind$ScanTransparentColor ??_C@_04OHJIHAFH@None?$AA@ boundCheckingMalloc ScanOtherColors $pdata$3$ScanOtherColors $chain$3$ScanOtherColors $pdata$2$ScanOtherColors $chain$2$ScanOtherColors $pdata$ScanOtherColors $unwind$ScanOtherColors __GSHandlerCheck xpmFreeRgbNames ??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@ xpmGetRgbName xpmReadRgbNames XQueryColors XDefaultColormap XDefaultScreen __security_cookie __security_check_cookie MSWGetImagePixels $pdata$MSWGetImagePixels $unwind$MSWGetImagePixels __imp_GetPixel __imp_SelectObject XpmCreateXpmImageFromImage $pdata$XpmCreateXpmImageFromImage $unwind$XpmCreateXpmImageFromImage xpmFreeColorTable boundCheckingCalloc 
+rgb.obj/        1345988050              100666  39939     `
+d %:P;J        .drectve        ]   &               
+ .debug$S        l   &              @ B.rdata             M'              @@@.rdata             Y'              @0@.rdata             `'              @@@.rdata             k'              @0@.rdata             q'              @0@.rdata          
+   w'              @@@.rdata             '              @0@.rdata          
+   '              @@@.rdata             '              @@@.rdata             '              @0@.rdata             '              @@@.rdata             '              @0@.rdata          
+   '              @@@.rdata             '              @@@.rdata             '              @0@.rdata          
+   '              @@@.rdata          
+   '              @@@.rdata             '              @@@.rdata             '              @0@.rdata          	   '              @@@.rdata          	   '              @@@.rdata             (              @@@.rdata             (              @0@.rdata             (              @@@.rdata          
+   (              @@@.rdata          
+   )(              @@@.rdata             3(              @0@.rdata             7(              @0@.rdata             >(              @@@.rdata             I(              @0@.rdata             N(              @0@.rdata             S(              @0@.rdata          
+   X(              @@@.rdata             b(              @@@.rdata             m(              @@@.rdata             {(              @@@.rdata          
+   (              @@@.rdata             (              @@@.rdata             (              @0@.rdata          
+   (              @@@.rdata             (              @0@.rdata          
+   (              @@@.rdata             (              @@@.rdata          	   (              @@@.rdata             (              @0@.rdata             (              @@@.rdata          	   (              @@@.rdata          
+   (              @@@.rdata          
+   (              @@@.rdata             )              @@@.rdata             )              @@@.rdata             )              @@@.rdata             /)              @@@.rdata             A)              @@@.rdata             Q)              @@@.rdata             `)              @@@.rdata             m)              @@@.rdata             z)              @@@.rdata             )              @@@.rdata             )              @@@.rdata             )              @@@.rdata             )              @0@.rdata             )              @@@.rdata             )              @0@.rdata          
+   )              @@@.rdata             )              @@@.rdata             )              @@@.rdata             )              @@@.rdata             *              @@@.rdata             *              @@@.rdata             *              @@@.rdata             +*              @@@.rdata          
+   7*              @@@.rdata          
+   A*              @@@.rdata             K*              @@@.rdata             `*              @@@.rdata          
+   o*              @@@.rdata             y*              @@@.rdata          
+   *              @@@.rdata             *              @@@.rdata          
+   *              @@@.rdata             *              @@@.rdata          	   *              @@@.rdata             *              @0@.rdata             *              @0@.rdata          
+   *              @@@.rdata             *              @@@.rdata          	   *              @@@.rdata             *              @@@.rdata             *              @0@.rdata             *              @0@.rdata             *              @0@.rdata             +              @0@.rdata             
++              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             &+              @0@.rdata             -+              @0@.rdata             4+              @0@.rdata             ;+              @0@.rdata             A+              @0@.rdata             H+              @0@.rdata             O+              @0@.rdata             V+              @0@.rdata             ]+              @0@.rdata             d+              @0@.rdata             k+              @0@.rdata             r+              @0@.rdata             y+              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             +              @0@.rdata             ,              @0@.rdata             
+,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             %,              @0@.rdata             ,,              @0@.rdata             3,              @0@.rdata             :,              @0@.rdata             A,              @0@.rdata             H,              @0@.rdata             O,              @0@.rdata             V,              @0@.rdata             ],              @0@.rdata             d,              @0@.rdata             k,              @0@.rdata             q,              @0@.rdata             x,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             ,              @0@.rdata             -              @0@.rdata             	-              @0@.rdata             -              @0@.rdata             -              @0@.rdata             -              @0@.rdata             %-              @0@.rdata             ,-              @0@.rdata             3-              @0@.rdata             :-              @0@.rdata             A-              @0@.rdata             H-              @0@.rdata             O-              @0@.rdata             U-              @0@.rdata             \-              @0@.rdata             c-              @0@.rdata             j-              @0@.rdata             q-              @0@.rdata             x-              @0@.rdata             -              @0@.rdata             -              @0@.rdata             -              @0@.rdata             -              @@@.rdata             -              @0@.rdata             -              @0@.rdata             -              @0@.rdata             -              @0@.rdata          
+   -              @@@.rdata             -              @0@.rdata             -              @@@.rdata          
+   -              @@@.rdata             -              @@@.rdata             -              @@@.rdata          
+   -              @@@.rdata             -              @@@.rdata             .              @@@.rdata             .              @@@.rdata          	   .              @@@.rdata             ".              @@@.rdata             -.              @@@.rdata             ;.              @@@.rdata             I.              @@@.rdata             W.              @@@.rdata             d.              @@@.rdata             o.              @@@.rdata             z.              @@@.rdata             .              @@@.rdata          
+   .              @@@.rdata          
+   .              @@@.rdata             .              @@@.rdata             .              @0@.rdata          	   .              @@@.rdata             .              @@@.rdata             .              @0@.rdata          
+   .              @@@.rdata             .              @@@.rdata          
+   .              @@@.rdata          
+   .              @@@.rdata             /              @0@.rdata             /              @@@.rdata             /              @0@.rdata             /              @@@.rdata             '/              @0@.rdata             -/              @0@.rdata             4/              @0@.rdata             :/              @0@.rdata             @/              @@@.rdata             K/              @@@.rdata          
+   X/              @@@.data             b/  >         @ P.text              :G  AG          P`.text           p   KG  G          P`.pdata             G  G         @0@.xdata             H              @0@.text           j  H  uI          P`.pdata             I  I         @0@.xdata             J              @0@.rdata             3J              @0@.text              8J               P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       _   !     d:\Develop\xpm\lib\rgb.obj : < b      	x    	x Microsoft (R) Optimizing Compiler  YellowGreen Yellow WhiteSmoke White Wheat VioletRed Violet Turquoise Transparent tomato Thistle Tan SteelBlue SpringGreen snow SlateGray SlateBlue SkyBlue Sienna seashell SeaGreen SandyBrown Salmon SaddleBrown RoyalBlue RosyBrown Red purple PowderBlue Plum Pink peru PeachPuff PapayaWhip PaleVioletRed PaleTurquoise PaleGreen PaleGoldenrod Orchid OrangeRed Orange OliveDrab OldLace NavyBlue Navy NavajoWhite moccasin MistyRose MintCream MidnightBlue MediumVioletRed MediumTurquoise MediumSpringGreen MediumSlateBlue MediumSeaGreen MediumPurple MediumOrchid MediumGoldenrod MediumForestGreen MediumBlue MediumAquamarine Maroon Magenta linen LimeGreen LightYellow LightSteelBlue LightSlateGray LightSlateBlue LightSkyBlue LightSeaGreen LightSalmon LightPink LightGray LightGoldenrodYellow LightGoldenrod LightCyan LightCoral LightBlue LemonChiffon LawnGreen LavenderBlush lavender Khaki ivory IndianRed HotPink honeydew GreenYellow Green Gray99 Gray98 Gray97 Gray96 Gray95 Gray94 Gray93 Gray92 Gray91 Gray90 Gray9 Gray89 Gray88 Gray87 Gray86 Gray85 Gray84 Gray83 Gray82 Gray81 Gray80 Gray8 Gray79 Gray78 Gray77 Gray76 Gray75 Gray74 Gray73 Gray72 Gray71 Gray70 Gray7 Gray69 Gray68 Gray67 Gray66 Gray65 Gray64 Gray63 Gray62 Gray61 Gray60 Gray6 Gray59 Gray58 Gray57 Gray56 Gray55 Gray54 Gray53 Gray52 Gray51 Gray50 Gray5 Gray49 Gray48 Gray47 Gray46 Gray45 Gray44 Gray43 Gray42 Gray41 Gray40 Gray4 Gray39 Gray38 Gray37 Gray36 Gray35 Gray34 Gray33 Gray32 Gray31 Gray30 Gray3 Gray29 Gray28 Gray27 Gray26 Gray25 Gray24 Gray23 Gray22 Gray21 Gray20 Gray2 Gray19 Gray18 Gray17 Gray16 Gray15 Gray14 Gray13 Gray12 Gray11 Gray100 Gray10 Gray1 Gray0 Gray Goldenrod Gold GhostWhite gainsboro ForestGreen FloralWhite Firebrick DodgerBlue DimGray DeepSkyBlue DeepPink DarkViolet DarkTurquoise DarkSlateGray DarkSlateBlue DarkSeaGreen DarkSalmon DarkOrchid DarkOrange DarkOliveGreen DarkKhaki DarkGreen DarkGoldenrod Cyan cornsilk CornflowerBlue Coral chocolate chartreuse CadetBlue burlywood Brown BlueViolet Blue BlanchedAlmond Black Bisque Beige Azure Aquamarine AntiqueWhite AliceBlue                                   2                                                                                                +             **             ޸             _                           i             rV             ""                                                      V-             k             UV/                                         z                          8Kf             /OO                                                                    TTT                          ##                          Pi                                       ڪ              ߄             ~~~                                                                                              !!!             $$$             &&&             )))             +++             ...             000                          333             666             888             ;;;             ===             @@@             BBB             EEE             GGG             JJJ                          MMM             OOO             RRR             TTT             WWW             YYY             \\\             ^^^             aaa             ccc             
+
+
+             fff             iii             kkk             nnn             ppp             sss             uuu             xxx             zzz             }}}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       /                          i             k99                          ~                                       |                                                                  ݂                                                    z                                        p             w             |                                                                    R                           22             2K             f             R             p             4wf             jj             ##                            y             //d                                                    ޭ             ##u             ##u                          k#                           E                                        sx                          p                          ڹ             ͅ?                          H                                                                    Ai             E             z             `             R                          R-             r             ~             p                          AA             Tp             ޸             ؿ             cG                                         >             >             ޳                                                     28                                            0      @      P      `      p                                                                       0     @     P     `     p  }     z     w     t     q     n     k     h     e      b     _      \   0  Y   @  V   P  S   `  P   p  M     J     G     D     A     >     ;     8     5      2     /      ,   0  )   @  &   P  #   `      p                                                              0     @     P     `     p                                                              0     @     P     `     p                                                              0     @     P     `     p                           ~     {     x     u      r     o      l   0  i   @  f   P  c   `  `   p  ]     Z     W     T     Q     N     K     H     E      B     ?      <   0  9   @  6   P  3   `  0   p  -     *     '     $     !                        	     	      	     0	  	   @	     P	     `	      p	      	      	      	      	      	      	      	      	       
+      
+       
+      0
+      @
+      P
+      `
+      p
+      
+      
+      
+      
+      
+      
+      
+      
+                          0      @      P      `      p                                                                      |    0  y    @  v    P  s    `  p    p  m      j      g      d      a      ^      [      X      U       R      O       L    0  I    @  F    P  C    `  @    p  =      :      7      4      1      .      +      (      %       "                 0      @      P      `      p        
+                    H\$D    3AE~;DL$(L   AA;uf;uA;tIA;|3H\$H\$HcH    HH            d          p                           4 H\$Hl$Ht$H|$ ATAUAVH MML        HH    Ht08 tff     HHH u    H    HuЀ}  HtfD      HÈC; uH    H    Ht@a=    3H    @ +HcHHHH    t.y~^;H    ~A   AE     A$    /HH    HLAfAE A$H    H\$@Hl$HHt$PH|$X   H A^A]A\(      8      h                                                     B         j                          t d
+ T	 4 2grey   @comp.id	x    .drectve       ]                 .debug$S       l                 .rdata                Q                    .rdata                V         '           .rdata                'F         D           .rdata                $㕵         f           .rdata                w                    .rdata         
+       {                    .rdata      	          #                 	    .rdata      
+   
+       V`?                
+    .rdata                X                    .rdata                                    .rdata                ^E         ;          .rdata                         Y          .rdata         
+       ۬         s          .rdata                                   .rdata                y~F                   .rdata         
+       
+&(                   .rdata         
+       X                   .rdata                Fg                   .rdata                yiB         /          .rdata         	       Dm         L          .rdata         	       U         k          .rdata                rn                   .rdata                sP                   .rdata                qU                   .rdata         
+        l                   .rdata         
+       m                   .rdata                A`.         ,          .rdata                         F          .rdata                ;&         c          .rdata                 !8                    .rdata      !          #}               !    .rdata      "          s               "    .rdata      #   
+       W               #    .rdata      $          ݹ               $    .rdata      %          d>@               %    .rdata      &          㳊         =      &    .rdata      '   
+                b      '    .rdata      (          wA               (    .rdata      )          '%>               )    .rdata      *   
+       }               *    .rdata      +          5               +    .rdata      ,   
+       YX               ,    .rdata      -          )tLc               -    .rdata      .   	       c         =      .    .rdata      /                   \      /    .rdata      0          u.q         w      0    .rdata      1   	       ay               1    .rdata      2   
+                      2    .rdata      3   
+                      3    .rdata      4          {               4    .rdata      5          E_               5    .rdata      6                   D      6    .rdata      7          I\$         l      7    .rdata      8          PAk               8    .rdata      9          *8               9    .rdata      :          m%               :    .rdata      ;          6K               ;    .rdata      <          V %         ,      <    .rdata      =          βU         T      =    .rdata      >          'ep         ~      >    .rdata      ?                         ?    .rdata      @          V־               @    .rdata      A          M/               A    .rdata      B                         B    .rdata      C   
+       Q                C    .rdata      D          Er         @      D    .rdata      E          f         c      E    .rdata      F          O               F    .rdata      G                         G    .rdata      H                         H    .rdata      I          4}               I    .rdata      J          `         	      J    .rdata      K   
+       "<         A	      K    .rdata      L   
+                a	      L    .rdata      M          u         	      M    .rdata      N          ׶D         	      N    .rdata      O   
+       =         	      O    .rdata      P          <rN         	      P    .rdata      Q   
+       B         
+      Q    .rdata      R          8         5
+      R    .rdata      S   
+       PW         Y
+      S    .rdata      T                   y
+      T    .rdata      U   	       İ         
+      U    .rdata      V          j         
+      V    .rdata      W          )Ҥ         
+      W    .rdata      X   
+       w         
+      X    .rdata      Y          H               Y    .rdata      Z   	       <$         3      Z    .rdata      [          M]         R      [    .rdata      \          (         u      \    .rdata      ]          sP               ]    .rdata      ^          24I               ^    .rdata      _          (               _    .rdata      `                         `    .rdata      a          J               a    .rdata      b          >{         "      b    .rdata      c                   ?      c    .rdata      d                   \      d    .rdata      e          {Ę         y      e    .rdata      f          :߁               f    .rdata      g          xqG               g    .rdata      h          DoQ               h    .rdata      i          ^H               i    .rdata      j          B\               j    .rdata      k          sG         %      k    .rdata      l          H j         B      l    .rdata      m          	q         _      m    .rdata      n          ·0         |      n    .rdata      o          +               o    .rdata      p          L               p    .rdata      q                         q    .rdata      r          9j^               r    .rdata      s          y(Z               s    .rdata      t          8C         )      t    .rdata      u                    F      u    .rdata      v          4         c      v    .rdata      w          ug6               w    .rdata      x          4V-               x    .rdata      y          l               y    .rdata      z          w               z    .rdata      {          qZ               {    .rdata      |          0A               |    .rdata      }                   .      }    .rdata      ~          NBA[         J      ~    .rdata                sZB         g          .rdata                o                   .rdata                ^                   .rdata                B                   .rdata                <                   .rdata                Ī                   .rdata                                   .rdata                FȘ         2          .rdata                         O          .rdata                         l          .rdata                Y                   .rdata                V@                   .rdata                ф                   .rdata                                   .rdata                                   .rdata                Z                   .rdata                         6          .rdata                %         S          .rdata                vޑ         p          .rdata                ^Gň                   .rdata                t                   .rdata                 X                   .rdata                aA                   .rdata                F                    .rdata                ]                   .rdata                ,p         :          .rdata                mk         W          .rdata                ~*         t          .rdata                O1                   .rdata                (                   .rdata                i-                   .rdata                5                   .rdata                ]                   .rdata                䱑D         !          .rdata                +	         >          .rdata                j         [          .rdata                ?         x          .rdata                $                   .rdata                /he                   .rdata                nY~                   .rdata                
+S                   .rdata                ;H         	          .rdata                /         &          .rdata                H\         B          .rdata                SE         _          .rdata                         |          .rdata                ]                   .rdata                                   .rdata                ߔ                   .rdata                                   .rdata                Y3                   .rdata                `         *          .rdata                Q         G          .rdata                         d          .rdata                T^                   .rdata                eG                   .rdata                Ey                   .rdata                H                   .rdata                                   .rdata                *                   .rdata                A         .          .rdata                          K          .rdata                ז         h          .rdata                                   .rdata                ̏                   .rdata                pM                   .rdata                1|                   .rdata                                   .rdata         
+                          .rdata                         3          .rdata                1         N          .rdata         
+       q         p          .rdata                CB                   .rdata                                   .rdata         
+                          .rdata                                   .rdata                CV                   .rdata                |Ͳ         4          .rdata         	       Ss         W          .rdata                C         v          .rdata                p                   .rdata                                   .rdata                ↬                   .rdata                zJ                   .rdata                         +          .rdata                w^         M          .rdata                Mgp         n          .rdata                ]u7                   .rdata         
+       w                   .rdata         
+       g}X                   .rdata                                   .rdata                *                   .rdata         	                6          .rdata                8         T          .rdata                u         z          .rdata         
+       kv                   .rdata                =                   .rdata         
+       [z:                   .rdata         
+       Gŋ                   .rdata                a                   .rdata                g         4          .rdata                vs         V          .rdata                uC         q          .rdata                XfPQ                   .rdata                }R.                   .rdata                ~                    .rdata                Rxd                   .rdata                                   .rdata                1         *          .rdata         
+                N          .data               L          n              |        .text                                   .text          p      i~n                   .pdata               P                  .xdata                                  $LN10           .text          j     JD                   .pdata               Ƿ\                  .xdata                [N                  free                            strstr           .rdata                >Z         )          tolower          strchr           strdup           $LN26           .text                 .B+         D          T  ??_C@_0M@HNCGGICD@YellowGreen?$AA@ ??_C@_06ICCAKDNH@Yellow?$AA@ ??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@ ??_C@_05PLKILNHI@White?$AA@ ??_C@_05PIEKEAEL@Wheat?$AA@ ??_C@_09GHIAHKFI@VioletRed?$AA@ ??_C@_06GCLALPIA@Violet?$AA@ ??_C@_09PKEKPHNP@Turquoise?$AA@ ??_C@_0M@DMHCPCEI@Transparent?$AA@ ??_C@_06NALDPNEI@tomato?$AA@ ??_C@_07NPHLIBMI@Thistle?$AA@ ??_C@_03CILPFPCI@Tan?$AA@ ??_C@_09MENJEMGM@SteelBlue?$AA@ ??_C@_0M@JADEIAIP@SpringGreen?$AA@ ??_C@_04HPKDHBOB@snow?$AA@ ??_C@_09DEFDJNGA@SlateGray?$AA@ ??_C@_09LBCNGEEN@SlateBlue?$AA@ ??_C@_07PNJLOGGO@SkyBlue?$AA@ ??_C@_06OLNBEJPI@Sienna?$AA@ ??_C@_08MFJLKPPC@seashell?$AA@ ??_C@_08MPDGLOME@SeaGreen?$AA@ ??_C@_0L@PKPGDMJG@SandyBrown?$AA@ ??_C@_06JOHNHAPC@Salmon?$AA@ ??_C@_0M@NBNLJNOB@SaddleBrown?$AA@ ??_C@_09NKNFPLIJ@RoyalBlue?$AA@ ??_C@_09HBGGELGD@RosyBrown?$AA@ ??_C@_03PADCEAKC@Red?$AA@ ??_C@_06GEHONCEN@purple?$AA@ ??_C@_0L@IKFOHFNE@PowderBlue?$AA@ ??_C@_04PCFHDAMD@Plum?$AA@ ??_C@_04IDKACLOG@Pink?$AA@ ??_C@_04MJMKNOJB@peru?$AA@ ??_C@_09OKCCEKJG@PeachPuff?$AA@ ??_C@_0L@JIMBJDOA@PapayaWhip?$AA@ ??_C@_0O@KNAELIFM@PaleVioletRed?$AA@ ??_C@_0O@DAMODFNL@PaleTurquoise?$AA@ ??_C@_09JIGGJDDI@PaleGreen?$AA@ ??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@ ??_C@_06PAKNAFKG@Orchid?$AA@ ??_C@_09PDBAPE@OrangeRed?$AA@ ??_C@_06LMIDBFFB@Orange?$AA@ ??_C@_09KDCNEHNA@OliveDrab?$AA@ ??_C@_07PJJBFELP@OldLace?$AA@ ??_C@_08KJABFMDC@NavyBlue?$AA@ ??_C@_04PDAFKIPB@Navy?$AA@ ??_C@_0M@PFCNBHOF@NavajoWhite?$AA@ ??_C@_08OIIPPDDA@moccasin?$AA@ ??_C@_09POIPCADB@MistyRose?$AA@ ??_C@_09MFNHBCHG@MintCream?$AA@ ??_C@_0N@ILIFGKIL@MidnightBlue?$AA@ ??_C@_0BA@FICOLOP@MediumVioletRed?$AA@ ??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@ ??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@ ??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@ ??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@ ??_C@_0N@EPKOGBBA@MediumPurple?$AA@ ??_C@_0N@BEMAIPGH@MediumOrchid?$AA@ ??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@ ??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@ ??_C@_0L@GDAICLDE@MediumBlue?$AA@ ??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@ ??_C@_06NMEFHGAJ@Maroon?$AA@ ??_C@_07LFEAGNHO@Magenta?$AA@ ??_C@_05MLLCELJD@linen?$AA@ ??_C@_09NCIGFANI@LimeGreen?$AA@ ??_C@_0M@IGPDELNF@LightYellow?$AA@ ??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@ ??_C@_0P@LOKKLDIA@LightSlateGray?$AA@ ??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@ ??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@ ??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@ ??_C@_0M@JKKOJIPA@LightSalmon?$AA@ ??_C@_09CAIKIAKL@LightPink?$AA@ ??_C@_09GPKCMEJ@LightGray?$AA@ ??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@ ??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@ ??_C@_09CBPIIJBO@LightCyan?$AA@ ??_C@_0L@JFDGDMCP@LightCoral?$AA@ ??_C@_09IDIENFGE@LightBlue?$AA@ ??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@ ??_C@_09IGCCILNJ@LawnGreen?$AA@ ??_C@_0O@OIOECAME@LavenderBlush?$AA@ ??_C@_08KJDCPJPL@lavender?$AA@ ??_C@_05PBMHPMDG@Khaki?$AA@ ??_C@_05NNJJIMHF@ivory?$AA@ ??_C@_09GLNHDDDA@IndianRed?$AA@ ??_C@_07DHJFKJBB@HotPink?$AA@ ??_C@_08BKNCNHLL@honeydew?$AA@ ??_C@_0M@GCHHLGNN@GreenYellow?$AA@ ??_C@_05GGOIJPPE@Green?$AA@ ??_C@_06DCIOCFPC@Gray99?$AA@ ??_C@_06CLJFBELD@Gray98?$AA@ ??_C@_06KMANAIHM@Gray97?$AA@ ??_C@_06LFBGDJDN@Gray96?$AA@ ??_C@_06JODLGKPO@Gray95?$AA@ ??_C@_06IHCAFLLP@Gray94?$AA@ ??_C@_06MIGBMNHI@Gray93?$AA@ ??_C@_06NBHKPMDJ@Gray92?$AA@ ??_C@_06PKFHKPPK@Gray91?$AA@ ??_C@_06ODEMJOLL@Gray90?$AA@ ??_C@_05JEMJJCE@Gray9?$AA@ ??_C@_06DDEMEPMF@Gray89?$AA@ ??_C@_06CKFHHOIE@Gray88?$AA@ ??_C@_06KNMPGCEL@Gray87?$AA@ ??_C@_06LENEFDAK@Gray86?$AA@ ??_C@_06JPPJAAMJ@Gray85?$AA@ ??_C@_06IGOCDBII@Gray84?$AA@ ??_C@_06MJKDKHEP@Gray83?$AA@ ??_C@_06NALIJGAO@Gray82?$AA@ ??_C@_06PLJFMFMN@Gray81?$AA@ ??_C@_06OCIOPEIM@Gray80?$AA@ ??_C@_05BAFHKIGF@Gray8?$AA@ ??_C@_06DIBAAIPI@Gray79?$AA@ ??_C@_06CBALDJLJ@Gray78?$AA@ ??_C@_06KGJDCFHG@Gray77?$AA@ ??_C@_06LPIIBEDH@Gray76?$AA@ ??_C@_06JEKFEHPE@Gray75?$AA@ ??_C@_06INLOHGLF@Gray74?$AA@ ??_C@_06MCPPOAHC@Gray73?$AA@ ??_C@_06NLOENBDD@Gray72?$AA@ ??_C@_06PAMJICPA@Gray71?$AA@ ??_C@_06OJNCLDLB@Gray70?$AA@ ??_C@_05JHMPLEKK@Gray7?$AA@ ??_C@_06DJNCGCMP@Gray69?$AA@ ??_C@_06CAMJFDIO@Gray68?$AA@ ??_C@_06KHFBEPEB@Gray67?$AA@ ??_C@_06LOEKHOAA@Gray66?$AA@ ??_C@_06JFGHCNMD@Gray65?$AA@ ??_C@_06IMHMBMIC@Gray64?$AA@ ??_C@_06MDDNIKEF@Gray63?$AA@ ??_C@_06NKCGLLAE@Gray62?$AA@ ??_C@_06PBALOIMH@Gray61?$AA@ ??_C@_06OIBANJIG@Gray60?$AA@ ??_C@_05IONEIFOL@Gray6?$AA@ ??_C@_06DLJENMJG@Gray59?$AA@ ??_C@_06CCIPONNH@Gray58?$AA@ ??_C@_06KFBHPBBI@Gray57?$AA@ ??_C@_06LMAMMAFJ@Gray56?$AA@ ??_C@_06JHCBJDJK@Gray55?$AA@ ??_C@_06IODKKCNL@Gray54?$AA@ ??_C@_06MBHLDEBM@Gray53?$AA@ ??_C@_06NIGAAFFN@Gray52?$AA@ ??_C@_06PDENFGJO@Gray51?$AA@ ??_C@_06OKFGGHNP@Gray50?$AA@ ??_C@_05KFPJNGCI@Gray5?$AA@ ??_C@_06DKFGLGKB@Gray49?$AA@ ??_C@_06CDENIHOA@Gray48?$AA@ ??_C@_06KENFJLCP@Gray47?$AA@ ??_C@_06LNMOKKGO@Gray46?$AA@ ??_C@_06JGODPJKN@Gray45?$AA@ ??_C@_06IPPIMIOM@Gray44?$AA@ ??_C@_06MALJFOCL@Gray43?$AA@ ??_C@_06NJKCGPGK@Gray42?$AA@ ??_C@_06PCIPDMKJ@Gray41?$AA@ ??_C@_06OLJEANOI@Gray40?$AA@ ??_C@_05LMOCOHGJ@Gray4?$AA@ ??_C@_06DPBJKACE@Gray39?$AA@ ??_C@_06CGACJBGF@Gray38?$AA@ ??_C@_06KBJKINKK@Gray37?$AA@ ??_C@_06LIIBLMOL@Gray36?$AA@ ??_C@_06JDKMOPCI@Gray35?$AA@ ??_C@_06IKLHNOGJ@Gray34?$AA@ ??_C@_06MFPGEIKO@Gray33?$AA@ ??_C@_06NMONHJOP@Gray32?$AA@ ??_C@_06PHMACKCM@Gray31?$AA@ ??_C@_06OONLBLGN@Gray30?$AA@ ??_C@_05PDKDHBKO@Gray3?$AA@ ??_C@_06DONLMKBD@Gray29?$AA@ ??_C@_06CHMAPLFC@Gray28?$AA@ ??_C@_06KAFIOHJN@Gray27?$AA@ ??_C@_06LJEDNGNM@Gray26?$AA@ ??_C@_06JCGOIFBP@Gray25?$AA@ ??_C@_06ILHFLEFO@Gray24?$AA@ ??_C@_06MEDECCJJ@Gray23?$AA@ ??_C@_06NNCPBDNI@Gray22?$AA@ ??_C@_06PGACEABL@Gray21?$AA@ ??_C@_06OPBJHBFK@Gray20?$AA@ ??_C@_05OKLIEAOP@Gray2?$AA@ ??_C@_06DMJNHEEK@Gray19?$AA@ ??_C@_06CFIGEFAL@Gray18?$AA@ ??_C@_06KCBOFJME@Gray17?$AA@ ??_C@_06LLAFGIIF@Gray16?$AA@ ??_C@_06JACIDLEG@Gray15?$AA@ ??_C@_06IJDDAKAH@Gray14?$AA@ ??_C@_06MGHCJMMA@Gray13?$AA@ ??_C@_06NPGJKNIB@Gray12?$AA@ ??_C@_06PEEEPOEC@Gray11?$AA@ ??_C@_07EGKCDIIG@Gray100?$AA@ ??_C@_06ONFPMPAD@Gray10?$AA@ ??_C@_05MBJFBDCM@Gray1?$AA@ ??_C@_05NIIOCCGN@Gray0?$AA@ ??_C@_04KFNAIHAE@Gray?$AA@ ??_C@_09OGGDAFEL@Goldenrod?$AA@ ??_C@_04PABHPHAJ@Gold?$AA@ ??_C@_0L@KFIMMJOB@GhostWhite?$AA@ ??_C@_09MIGKOGAO@gainsboro?$AA@ ??_C@_0M@GODNHLND@ForestGreen?$AA@ ??_C@_0M@BKMBPOEB@FloralWhite?$AA@ ??_C@_09EHCEAFM@Firebrick?$AA@ ??_C@_0L@IPLDLLMK@DodgerBlue?$AA@ ??_C@_07BEDHGNF@DimGray?$AA@ ??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@ ??_C@_08GKFCFKAC@DeepPink?$AA@ ??_C@_0L@JPDLIDIP@DarkViolet?$AA@ ??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@ ??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@ ??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@ ??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@ ??_C@_0L@GDPGEMPN@DarkSalmon?$AA@ ??_C@_0L@NCGDJKJ@DarkOrchid?$AA@ ??_C@_0L@EBAICJFO@DarkOrange?$AA@ ??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@ ??_C@_09BIACIJCM@DarkKhaki?$AA@ ??_C@_09IPCNOKOO@DarkGreen?$AA@ ??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@ ??_C@_04ICNCCCFD@Cyan?$AA@ ??_C@_08DECOJLB@cornsilk?$AA@ ??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@ ??_C@_05JNPICLKJ@Coral?$AA@ ??_C@_09BPADAHOC@chocolate?$AA@ ??_C@_0L@CHNAEACO@chartreuse?$AA@ ??_C@_09CGAPEKNC@CadetBlue?$AA@ ??_C@_09JHLANABP@burlywood?$AA@ ??_C@_05EGDKJJDN@Brown?$AA@ ??_C@_0L@PDJLLNIH@BlueViolet?$AA@ ??_C@_04CAKOHOCJ@Blue?$AA@ ??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@ ??_C@_05BPGNDIAE@Black?$AA@ ??_C@_06LJLNHCPM@Bisque?$AA@ ??_C@_05EOEDPHMI@Beige?$AA@ ??_C@_05CKEFAMIJ@Azure?$AA@ ??_C@_0L@IKHGMDBB@Aquamarine?$AA@ ??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@ ??_C@_09ODOKIMGN@AliceBlue?$AA@ theRGBRecords numTheRGBRecords xpmReadRgbNames xpmGetRgbName $pdata$xpmGetRgbName $unwind$xpmGetRgbName xpmGetRGBfromName $pdata$xpmGetRGBfromName $unwind$xpmGetRGBfromName xpmstrcasecmp ??_C@_04GDBIAANM@grey?$AA@ xpmFreeRgbNames 
+RdFToI.obj/     1345988049              100666  5315      `
+d %:P  X       .drectve        ]                  
+ .debug$S        p   	              @ B.text           E  y            P`.pdata             T  `         @0@.xdata             ~           @0@.rdata                           @@@.rdata                           @0@.rdata                           @0@.rdata                           @@@.rdata                           @0@.text           B               P`.pdata             0  <         @0@.xdata             Z  j         @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata                           @0@.text           \    r	          P`.pdata             
+  
+         @0@.xdata             2
+  N
+         @0@.text              X
+  
+      	    P`.pdata             V  b         @0@.xdata                        @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       b   $     d:\Develop\xpm\lib\RdFToI.obj : < b      	x    	x Microsoft (R) Optimizing Compiler   H\$Ht$ WH0  H    H3H$   HLHu    HC   H3IHHɃH~OAH5       HcIu6H    HL$        H    HL$     HCHuw{~OBH5       HcIu6H    HL$        H    HL$     HCHu#'H    I    HCHt   C    3H$   H3    L$0  I[ Is(I_   "    0   !    \        r                                                                            ,  #        E                            $ dK 4J F p                gunzip -qc "%s" .gz r uncompress -c "%s" .Z H(tu-HIH(    H\$ HY    H;tH    H\$ H(   :    '   !    4   9    =   B           &       &       ,    !                 &       &       8       =           &       &       2    ! 4               &       &       8                   &       &       8     B  @SUVWATH  H    H3H$  H$@  HHL$@MIH    HL$`    H$   H       HthH    HL$`H    HD$`H|$0HD$(HD$@H$   MLHHD$     ؅xLD$`HT$@H    HL$`    .3H$   MHD$0HD$(HD$@LHHD$     ؋$   tu&H$           H$   H;t    HL$@    H$  H3    H  A\_^][   "    :   K    D   J    T       i   I    v   H       G       F       E       G      :      !    .  9    8  D    J  #        \          L       L       C      ^ p`P0               @SVWHp  H    H3H$`  HHIH    H    HT$ H    uBHL$ LH    L$ tu HL$(        HL$(H;t    H$`  H3    Hp  _^[   "    *   K    2   J    ?       S   V    m   :    t   !       9       #                   W       W       U     N p`0      `         @comp.id	x    .drectve       ]                 .debug$S       p                 .text          E     љ                    .pdata               =
+                   .xdata               '        %               :            fopen            .rdata                TA         K           .rdata                Ԕ                    _popen           .rdata                t	                    sprintf          .rdata      	          ]YV                	    .rdata      
+          4އr                
+                                                 .text          B      *         7          .pdata               z>        D          .xdata               ^        Z          .pdata                       p          .xdata               1?U                  .pdata               $                  .xdata                9                  fclose           _pclose          .text          \     a                   .pdata               =                  .xdata               zf                                                    ,               =               S               b               t                          $LN15           .text             	   ,d                   .pdata               v.                  .xdata                                                $LN11             OpenReadFile $pdata$OpenReadFile $unwind$OpenReadFile __GSHandlerCheck ??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@ ??_C@_03GBOLEDH@?4gz?$AA@ ??_C@_01KDCPPGHE@r?$AA@ ??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@ ??_C@_02HCDJPINJ@?4Z?$AA@ __iob_func __security_cookie __security_check_cookie xpmDataClose $pdata$1$xpmDataClose $chain$1$xpmDataClose $pdata$0$xpmDataClose $chain$0$xpmDataClose $pdata$xpmDataClose $unwind$xpmDataClose XpmReadFileToImage $pdata$XpmReadFileToImage $unwind$XpmReadFileToImage XpmFreeXpmImage XpmFreeXpmInfo xpmSetAttributes xpmParseDataAndCreate xpmSetInfoMask xpmInitAttributes xpmInitXpmInfo xpmInitXpmImage XpmReadFileToXpmImage $pdata$XpmReadFileToXpmImage $unwind$XpmReadFileToXpmImage xpmParseData 
+RdFToDat.obj/   1345988049              100666  1111      `
+d %:Pi         .drectve        ]                   
+ .debug$S        p   9              @ B.text           f               P`.pdata             7  C         @0@.xdata             a              @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       d   &     d:\Develop\xpm\lib\RdFToDat.obj : < b      	x    	x Microsoft (R) Optimizing Compiler @SH   HD$@   HtH    LD$@HT$     u*LD$@HT$ H    HL$     HL$@    HĀ   [+       A       M       W           f                             	 	0@comp.id	x    .drectve       ]                 .debug$S       p                 .text          f      x5                    .pdata               <                   .xdata                \^]        /               I                X                h                            $LN5               XpmReadFileToData $pdata$XpmReadFileToData $unwind$XpmReadFileToData XpmFreeXpmInfo XpmFreeXpmImage XpmCreateDataFromXpmImage XpmReadFileToXpmImage 
+RdFToBuf.obj/   1345988049              100666  2845      `
+d %:P*  2       .drectve        ]   D               
+ .debug$S        p                 @ B.text                          P`.pdata             ~           @0@.xdata                        @0@.pdata                        @0@.xdata                         @0@.pdata             2  >         @0@.xdata             \  x         @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata                           @0@.rdata             (              @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       d   &     d:\Develop\xpm\lib\RdFToBuf.obj : < b      	x    	x Microsoft (R) Optimizing Compiler @SUHXHH    3    ؅xHT$     t    HX][H    Ht$p    HHu    Ht$pHX][H|$xL$   Lcd$4AL$    HHuH    GELMĺ   HLl$P    HH    A;tH    A< 3H} Ll$PH|$xL$   Ht$pHX][   0    &   /    1   .    B   -    N   *    ]   .       )       (       '       (       &                  1       1           !   p             1       1                         1       1           ! 
+ p             1       1           p              1       1           !  t  d     H          1       1       %    H   p           1       1           ! d     H          1       1       %        H           1       1       %     P0  r @comp.id	x    .drectve       ]                 .debug$S       p                 .text                i                    .pdata                                  .xdata               8p        5           .pdata               O        R           .xdata               Ǐ        o           .pdata               t'W                   .xdata      	         =V               	    .pdata      
+         P?               
+    .xdata               :=                   .pdata               Xx                   .xdata                Ϲ                  free             fread            fclose               7           _fdopen          .rdata                t	         K          close                c           open             $LN13           o  XpmReadFileToBuffer $pdata$6$XpmReadFileToBuffer $chain$6$XpmReadFileToBuffer $pdata$5$XpmReadFileToBuffer $chain$5$XpmReadFileToBuffer $pdata$4$XpmReadFileToBuffer $chain$4$XpmReadFileToBuffer $pdata$0$XpmReadFileToBuffer $chain$0$XpmReadFileToBuffer $pdata$XpmReadFileToBuffer $unwind$XpmReadFileToBuffer boundCheckingMalloc ??_C@_01KDCPPGHE@r?$AA@ _fstat64i32 
+misc.obj/       1345988048              100666  2352      `
+d %:P  /       .drectve        ]                  
+ .debug$S        l   y              @ B.text           G                  P`.text           p   ,            P`.rdata             2              @@@.rdata             C              @@@.rdata             R              @@@.rdata             ^              @@@.rdata             m              @@@.rdata             {              @@@.rdata                           @@@.text                             P`.text                          P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       `   "     d:\Develop\xpm\lib\misc.obj : < b      	x    	x Microsoft (R) Optimizing Compiler L3Dхt8@ A<0|<9AILHD;rEtD;u	A   3ÃwFH    Hc    HH    H    H    H    H    H    H    f                           '       &    !   $    )        1       9       A       I       Q       X       \       `       d       h   !    l   %    Invalid XpmError XpmColorFailed XpmNoMemory XpmFileInvalid XpmOpenFailed XpmSuccess XpmColorError v         .    @comp.id	x    .drectve       ]                 .debug$S       l                 .text          G        I     xpmatoui        .text          p      G                    .rdata                -R                    .rdata                |)         @           $LN2    F       .rdata                ;;])         f           $LN3    >       .rdata                ]h                    $LN4    6       .rdata      	          I6                	    $LN5    .       .rdata      
+          _N                
+    $LN6    &       .rdata                q2E                    $LN7           $LN12   X                      .text                 $e$         '          .text                %     XpmFree         free             9  XpmGetErrorString ??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@ ??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@ ??_C@_0M@KNHHACKL@XpmNoMemory?$AA@ ??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@ ??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@ ??_C@_0L@GGDGBBNE@XpmSuccess?$AA@ ??_C@_0O@NCABLEEJ@XpmColorError?$AA@ __ImageBase XpmLibraryVersion Info.obj/       1345988048              100666  2153      `
+d %:P  &       .drectve        ]                  
+ .debug$S        l   Q              @ B.text                             P`.text           {     T          P`.pdata             |           @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata             0  <         @0@.xdata             Z              @0@.text               b               P`.text           `                  P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       `   "     d:\Develop\xpm\lib\Info.obj : < b      	x    	x Microsoft (R) Optimizing Compiler Ht3HAHAHAHA0A(HttSH H|$03!Hs6HIHt	    H{HKHt	    H{HKHt	    H{#
+sS(tHK0    H{0{(;H|$0H [$       6       H       b       y   {                             !       
+                            
+   y                             ! t     
+                                
+                             
+ 
+20    "s   "
+s	       "s$   HBxHAH   HAH   HA"
+s	   HB`HA0BXA(t	B$A B(A$@comp.id	x    .drectve       ]                 .debug$S       l                 .text                 ۵,                    .text          {                          .pdata               6H        "           .xdata               $(        :           .pdata               b(Y        R           .xdata               Ӹ        j           .pdata      	                        	    .xdata      
+          k               
+                    free             $LN10           .text                  ¥                    .text          `       Xz                       xpmInitXpmInfo XpmFreeXpmInfo $pdata$1$XpmFreeXpmInfo $chain$1$XpmFreeXpmInfo $pdata$0$XpmFreeXpmInfo $chain$0$XpmFreeXpmInfo $pdata$XpmFreeXpmInfo $unwind$XpmFreeXpmInfo XpmFreeExtensions xpmSetInfoMask xpmSetInfo 
+Image.obj/      1345988048              100666  1064      `
+d %:P[         .drectve        ]                  
+ .debug$S        p   a              @ B.text                             P`.text           6               P`.pdata             )  5         @0@.xdata             S              @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       a   #     d:\Develop\xpm\lib\Image.obj : < b      	x    	x Microsoft (R) Optimizing Compiler    3AHAHA@SH HHIHtS    HKHt    HC    H [       $           6                              20@comp.id	x    .drectve       ]                 .debug$S       p                 .text                 &                    .text          6                          .pdata               ZC        $           .xdata                        ;           free                 S            $LN6            e   xpmInitXpmImage XpmFreeXpmImage $pdata$XpmFreeXpmImage $unwind$XpmFreeXpmImage xpmFreeColorTable hashtab.obj/    1345988048              100666  5066      `
+d %:P[  Y       .drectve        ]   t               
+ .debug$S        p                 @ B.text           1   A  r          P`.pdata             |           @0@.xdata                           @0@.text                             P`.pdata             ]  i         @0@.xdata                           @0@.text                X          P`.pdata             v           @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata             *  6         @0@.xdata             T              @0@.text              h            P`.pdata             	  	         @0@.xdata             5	              @0@.text           m   I	  	          P`.pdata             	  	         @0@.xdata             	              @0@.text           g   	  ]
+          P`.pdata             q
+  }
+         @0@.xdata             
+  
+         @0@.pdata             
+  
+         @0@.xdata             
+           @0@.pdata             %  1         @0@.xdata             O              @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       c   %     d:\Develop\xpm\lib\hashtab.obj : < b      	x    	x Microsoft (R) Optimizing Compiler  H\$WH H   H    HtH8HXH\$0H _           1                             
+ 
+4 
+2pH\$H|$LY3HLLt$Dffff     IAkEEuMc3AIMHtD    H 8u LL+ B+uHutIM;sODI HuH\$H|$I                                 
+ 
+t 4 H\$Hl$H|$ ATH LaVUUU<H9ЉQ        LHuACaHEHcII;v3HHI;wI~2Ht$0HD  HHtHH    HHHuHt$0I    3H\$8Hl$@H|$HH A\<                 .                                !    !       s                        -    s                            '    ! d     s                        -        s                         -     t	 T 4 2H\$Hl$Ht$WH IHH    HH8 uC       HtH0HhHHu C;C|H    uCC3H\$0Hl$8Ht$@H _       1       \                      8       8       7     d T 4 2pH\$WH H   AU   3y       LHuGH\$0H _HcII;vD  HH9I;wL[H\$03H _%           m           B       B       A    
+ 
+4 
+2pHt$WH HyHHtFHcH\$0HH;v f     HKHHt    H;wH    H\$0HF    Ht$8H _>   .    K   .    \   g           X       X       K    !                 X       X       W       \           X       X       Q    ! 4               X       X       W                   X       X       W    
+ 
+d 
+2p@comp.id	x    .drectve       ]                 .debug$S       p                 .text          1      	|a     AtomMake        .pdata               SgI                   .xdata                %Y%                       %            .text                 ʤz         9           .pdata               '        E           .xdata                Uqi        X           $LN18           .text       	         f}>         l       	    .pdata      
+         [	        {       
+    .xdata               |	                   .pdata               y	                   .xdata               ',	                   .pdata               s"	                   .xdata                S	                   free             .text                                   .pdata                                 .xdata                Cc        +          $LN10           .text          m      rvO         A          .pdata               jK        R          .xdata                %Y%        j          $LN8            .text          g      FGX                   .pdata               /_                  .xdata                                 .pdata               18                  .xdata               fq                  .pdata                *c                  .xdata                7                  $LN8            -  $pdata$AtomMake $unwind$AtomMake boundCheckingMalloc xpmHashSlot $pdata$xpmHashSlot $unwind$xpmHashSlot HashTableGrows $pdata$1$HashTableGrows $chain$1$HashTableGrows $pdata$0$HashTableGrows $chain$0$HashTableGrows $pdata$HashTableGrows $unwind$HashTableGrows xpmHashIntern $pdata$xpmHashIntern $unwind$xpmHashIntern xpmHashTableInit $pdata$xpmHashTableInit $unwind$xpmHashTableInit xpmHashTableFree $pdata$1$xpmHashTableFree $chain$1$xpmHashTableFree $pdata$0$xpmHashTableFree $chain$0$xpmHashTableFree $pdata$xpmHashTableFree $unwind$xpmHashTableFree data.obj/       1345988047              100666  13175     `
+d= %:P-         .drectve        ]   	               
+ .debug$S        l   	              @ B.rdata             e
+              @0@.rdata             i
+              @0@.rdata             n
+              @0@.rdata             u
+              @0@.rdata             w
+              @0@.rdata             |
+              @0@.rdata             
+              @@@.rdata             
+              @@@.rdata             
+              @0@.rdata             
+              @0@.rdata             
+              @0@.rdata             
+              @0@.rdata             
+              @0@.rdata             
+              @0@.rdata             
+              @@.rdata          6   
+              @@@.rdata             
+              @@@.data             
+            @ P.text           E    +          P`.pdata             ]  i         @0@.xdata          $              @0@.pdata                        @0@.xdata                           @0@.text                     
+    P`.pdata             Y  e         @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata             7  K         @0@.pdata             i  u         @0@.xdata                           @0@.text           >          	    P`.pdata             3  ?         @0@.xdata             ]  m         @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata                           @0@.text           V   %  {          P`.pdata                        @0@.xdata                        @0@.text                         P`.pdata                        @0@.xdata          $              @0@.text           j     A          P`.pdata             U  a         @0@.xdata                           @0@.text                         P`.pdata                        @0@.xdata             :  J         @0@.pdata             h  t         @0@.xdata                        @0@.pdata                        @0@.xdata               
+         @0@.rdata                           @0@.rdata                           @0@.rdata                           @@@.rdata             %              @@@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       `   "     d:\Develop\xpm\lib\data.obj : < b      	x    	x Microsoft (R) Optimizing Compiler ))
+  '(
+ (setq  ; Lisp };
+ [] = {
+ static char * ,
+ */ /* C 
+ !  $Id: xpm.shar,v 3.71 1998/03/19 19:47:14 lehors Exp $ $XpmVersion: 3.4k $                                          
+                                                              ""                                                              ""                                                                                                          7       4       1       .        +    0   1    8   1    @   1    H   1    P   (    X   %    `   "    p       x                                      +       +              
+           AUH09L   H   E3LA Q H    IEIHHAIEA:utu׀: tAI)E3H0A]AM ME 3     M(  AA8 t-t)IEHHIE  uME 3IAA:	uAUIEHHIE  uME 3IIAA:ut
+uA9 uIM3H0A]H   H\$@Hl$HHt$PH|$(Ld$ LaHy AM I   3I    HHD؈D;u
+t4Auـ> t)   f     I    Hσu   E] I} 3I(  8t*At$I    D؁  uI} 3HÈ:uA]fI    D؁  uI} 3HHÈ;u	t
+ù> uI    H|$(Ht$PHl$HH\$@Ld$ 3H0A]G  M      L      M      M      L      E          ?       ?       E    !
+  t d
+ 
+T	 4              ?       ?        K                  ?       ?       K     R@SH HمuAHAQH3HQH [Ã   1  t HCHHHCt:u逻0   tNHCt7D  HC:0  r  H   Ht:uH    HCuHC3H [H   H4  HK 8u&    HCH    H   L[A8tHCHC3H [À1   H|$0HytH    1  ;tu耻0   thH    0  D;   @ A   H   HtD;uH    H    D0  D;uH|$03H [H    tIH    H   D;u% H    H    DH   D;tHA    H|$03H [Ô   ?       ?      M    6  M    r  ?    z  M      M      ?      M      L                i       i       V    !                i       i       h                i       i       \    !   t              i       i       h                i       i       b    ! t              i       i       h                  i       i       h     20H\$Ht$WATAUH 3ELH      Hl$@HifD  H    ؃t    t1  ;uۋ    u31  ;t(t#A;sA] HI    ȋ    tHՋ    Hl$@tHA    t)     1  ;tHGHG    uHGIHHGA]    u1  ;tA;rHOFH\$HHt$PH A]A\_D   M    R       h          M              L                           >                        r    !       1                        ~    1                            x    ! T     1                        ~        1                         ~     d
+ 4	 2p@SH0  H    H3H$   HHT$ A       HL$ LË    H$   H3    H0  [       *   l    9       I           V                              	F 0                H\$ UVWATAUAVAWH@  H    H3H$0  33LD$ LHم    LqI       NE3Ll$0    1  H;t`t`A   u3   H    HtVHT$0EHH    AE3Ll$0Am IIA    1  ;uu$H       H       A4t<SH    LHtӋHT$0EHH    I֋;     zI֋        fHiHt]E t!1      ;tHCHC us+Ƌ    HHRDHH    ; tF8 HD$ I?03H$0  H3    H$  H@  A_A^A]A\_^]       S   M    n                        M                        5      G  L    [  L                                                      ) 4S H 
+p`P      0         H\$WH 9 HHtAIt:    HW HLcGH    HLc_A G    3H\$0H _H\$0H    3H _       2           j                             
+ 
+4 
+2pH\$VWATH0  H    H3H$   3H996  HT$ A   @0  Ɓ1  
+H(  H       L%       HT$ H    D    uhHT$ A   H    u
+  HcHL$ _   D<      HtH+H    HLD<     u   4     HT$ A   H    u$HT$ H    D    {x   jHT$ H    D    NHT$ A   H    3H95    tGH$X  HcI     HHT$ L    tHHHIH8 uH$X  ǃ4      HcHJ<& uBH   HH   H   H(      D   D0     1  R4   JD&H   JD&H(  u)BD&Hƃ1   0      BD&1  H    3H$   H3    H$`  H0  A\_^       W   l    ^   <    s       {          l                            l                8      @      [  l    d  <            <      <      P      <      <    K  P    a  P    s                                    !       j                           j                              ! TK     j                               j                            " 4L F 	p`                XPM2 XPM _format #define @comp.id	x    .drectve       ]                 .debug$S       l                 .rdata                QuI                    .rdata                QG0         %           .rdata                         E           .rdata                8<         f           .rdata                >                    .rdata                K                    .rdata      	          *                	    .rdata      
+          z                
+    .rdata                W                   .rdata                ['         /          .rdata                z\         L          .rdata                T         i          .rdata                                   .rdata                                   .rdata                                       .rdata         6       g=                   .rdata                c                   .data               Nvy          ;          RCS_Id             G         .text          E     	2         T          .pdata               qO        a          .xdata         $      k        w          .pdata               =                  .xdata                                  ungetc           getc             .text            
+   ڬe                   .pdata               }                  .xdata               O                  .pdata               >_\                  .xdata               n        	          .pdata               ل6                   .xdata                (f*        7           .pdata      !         3`        N      !    .xdata      "                  c      "    $LN42           .text       #   >  	   ,t         y      #    .pdata      $         #              $    .xdata      %         0#              %    .pdata      &         K#              &    .xdata      '         G@#              '    .pdata      (         SgI#              (    .xdata      )          m#              )    isspace          $LN28       #    .text       *   V      J                *    .pdata      +         AI*        
+      +    .xdata      ,         7U*              ,        -           xpmatoui             >               P           $LN3        *    .text       -        o         h      -    .pdata      .         L-        u      .    .xdata      /   $      -              /    free             strncpy                                        $LN30       -    .text       0   j      ^               0    .pdata      1         s+A0              1    .xdata      2          %Y%0              2    $LN8        0    .text       3                       3    .pdata      4         B3              4    .xdata      5         +]^3              5    .pdata      6         $3        3      6    .xdata      7         x3        K      7    .pdata      8         Ƿ\3        c      8    .xdata      9         3        y      9    .rdata      :          J\V               :    .rdata      ;          8'               ;    .rdata      <                         <    strrchr          strncmp          .rdata      =          ЦZ               =    $LN28       3      ??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@ ??_C@_04JEIEPLD@?5?8?$CI?6?$AA@ ??_C@_06GGEPMBCG@?$CIsetq?5?$AA@ ??_C@_01ICJEACDI@?$DL?$AA@ ??_C@_04JLHIKKNM@Lisp?$AA@ ??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@ ??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@ ??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@ ??_C@_02MLAGHBOD@?0?6?$AA@ ??_C@_02CHHINNLG@?$CK?1?$AA@ ??_C@_02FMMEOLBI@?1?$CK?$AA@ ??_C@_01GFHCPBMG@C?$AA@ ??_C@_01EEMJAFIK@?6?$AA@ ??_C@_01DCLJPIOD@?$CB?$AA@ ??_C@_00CNPNBAHC@?$AA@ ??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@ ??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@ RCS_Version xpmDataTypes ParseComment $pdata$4$ParseComment $chain$4$ParseComment $pdata$ParseComment $unwind$ParseComment xpmNextString $pdata$3$xpmNextString $chain$3$xpmNextString $pdata$2$xpmNextString $chain$2$xpmNextString $pdata$0$xpmNextString $chain$0$xpmNextString $pdata$xpmNextString $unwind$xpmNextString xpmNextWord $pdata$1$xpmNextWord $chain$1$xpmNextWord $pdata$0$xpmNextWord $chain$0$xpmNextWord $pdata$xpmNextWord $unwind$xpmNextWord xpmNextUI $pdata$xpmNextUI $unwind$xpmNextUI __GSHandlerCheck __security_cookie __security_check_cookie xpmGetString $pdata$xpmGetString $unwind$xpmGetString boundCheckingRealloc boundCheckingMalloc xpmGetCmt $pdata$xpmGetCmt $unwind$xpmGetCmt xpmParseHeader $pdata$1$xpmParseHeader $chain$1$xpmParseHeader $pdata$0$xpmParseHeader $chain$0$xpmParseHeader $pdata$xpmParseHeader $unwind$xpmParseHeader ??_C@_04GPIBMJKI@XPM2?$AA@ ??_C@_03PJGJBIFG@XPM?$AA@ ??_C@_07EPAHIEDI@_format?$AA@ ??_C@_07MAHLPAJA@?$CDdefine?$AA@ 
+CrIFrDat.obj/   1345988047              100666  2621      `
+d	 %:P  (       .drectve        ]   |               
+ .debug$S        p                 @ B.text           =   I               P`.text           a              P`.pdata             U  a         @0@.xdata                        @0@.text                ^          P`.pdata                        @0@.xdata                        @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       d   &     d:\Develop\xpm\lib\CrIFrDat.obj : < b      	x    	x Microsoft (R) Optimizing Compiler E3HJDHDBDBL(  L   HBD1  D0  D4  @SUVWATH  H    H3H$  H$@  HHL$@MIH    HL$`    HE3D$   H$   D$   H$   D$   L$  L$  D$  D$  D$  HthH    HL$`H    HD$`H|$0HD$(HD$@H$   MLHHD$     ؅xLD$`HT$@H    HL$`    ,L\$0HD$@L\$(H$   MLHHD$     HL$@    H$  H3    H  A\_^][       :       D                                         1      =      O          a                              ^ p`P0               H\$Ht$ WHp  H    H3H$`  HHIH    H    HE3HL$ LHHD$0D\$ H\$(D\$8D\$<L$H  L$@  D$Q  D$P  D$T      H$`  H3    L$p  I[Is(I_       1       9          &                          '       '       %    $ dS 4P N p      `         @comp.id	x    .drectve       ]                 .debug$S       p                 .text          =       X                    .text          a     ܴB                    .pdata               6        %           .xdata               zf        C               b                s                                                                                                                                                           $LN9            .text                         #          .pdata               ͹        =          .xdata      	         Gn        ^      	                   $LN5              OpenArray XpmCreateImageFromData $pdata$XpmCreateImageFromData $unwind$XpmCreateImageFromData __GSHandlerCheck XpmFreeXpmImage XpmFreeXpmInfo xpmSetAttributes xpmParseDataAndCreate xpmSetInfoMask xpmInitAttributes xpmInitXpmInfo xpmInitXpmImage __security_cookie __security_check_cookie XpmCreateXpmImageFromData $pdata$XpmCreateXpmImageFromData $unwind$XpmCreateXpmImageFromData xpmParseData 
+CrIFrBuf.obj/   1345988047              100666  2483      `
+d	 %:PI  (       .drectve        ]   |               
+ .debug$S        p                 @ B.text              I               P`.text           '  [            P`.pdata                        @0@.xdata               6         @0@.text              @            P`.pdata                        @0@.xdata             #  ?         @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       d   &     d:\Develop\xpm\lib\CrIFrBuf.obj : < b      	x    	x Microsoft (R) Optimizing Compiler    HJB    @SUVWATH  H    H3H$  H$@  HHL$@MIH    HL$`    3Ǆ$      $   H$   HthH    HL$`H    HD$`H|$0HD$(HD$@H$   MLHHD$     ؅xLD$`HT$@H    HL$`    ,HD$0HD$(HD$@H$   MLHHD$     HL$@    H$  H3    H  A\_^][       :       D       m       z                                                   '                              ^ p`P0               H\$Ht$ WHp  H    H3H$`  HHIH    H    HL$ LHD$    H\$0D$<        H$`  H3    L$p  I[Is(I_       1       9       ^   &    n                      '       '       %    $ dS 4P N p      `         @comp.id	x    .drectve       ]                 .debug$S       p                 .text                 ()                    .text          '     Jj                    .pdata               `U        (           .xdata               zf        H               i                z                                                                                                                                                           $LN9            .text                Cj         *          .pdata               ÌY        F          .xdata      	         Gn        i      	                   $LN5              OpenBuffer XpmCreateImageFromBuffer $pdata$XpmCreateImageFromBuffer $unwind$XpmCreateImageFromBuffer __GSHandlerCheck XpmFreeXpmImage XpmFreeXpmInfo xpmSetAttributes xpmParseDataAndCreate xpmSetInfoMask xpmInitAttributes xpmInitXpmInfo xpmInitXpmImage __security_cookie __security_check_cookie XpmCreateXpmImageFromBuffer $pdata$XpmCreateXpmImageFromBuffer $unwind$XpmCreateXpmImageFromBuffer xpmParseData 
+create.obj/     1345988047              100666  16420     `
+d, %:P/         .drectve        ]                  
+ .debug$S        p   Q              @ B.text           t     5          P`.pdata             I  U         @0@.xdata             s              @0@.text                             P`.text           `               P`.pdata               		         @0@.xdata             '	              @0@.text           *  7	  a
+          P`.pdata             
+  
+         @0@.xdata             
+              @0@.rdata             
+              @0@.text             
+            P`.pdata                        @0@.xdata             5  M         @0@.pdata             k  w         @0@.xdata                           @0@.text                          P`.pdata                        @0@.xdata                           @0@.text           p     k          P`.pdata             u           @0@.xdata                           @0@.text                H          P`.pdata             f  r         @0@.xdata                        @0@.pdata                        @0@.xdata                         @0@.pdata               *         @0@.xdata             H              @0@.text           L  \        '    P`.pdata             .  :         @0@.xdata          $   X  |         @0@.text               $#          P`.pdata             $  *$         @0@.xdata             H$  \$         @0@.pdata             z$  $         @0@.xdata             $              @0@.text           +  $  ,      '    P`.pdata             m.  y.         @0@.xdata             .  .         @0@.pdata             .  .         @0@.xdata             .              @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       b   $     d:\Develop\xpm\lib\create.obj : < b      	x    	x Microsoft (R) Optimizing Compiler   H\$Ht$WH HHt,@ ; t#        ;u%GHHÄu+H\$0Ht$8H _H\$0+Ht$8H _)       3           t                              d 4 2p   H\$Ht$WH IHHMt    uH\$0Ht$8H _LHH    H\$0Ht$83ɅH _       C           `                              d 4 2pH\$Hl$Ht$WATAUH0A9 ILLH    It&; t!        ;uHHÀ? u7+   H$   LL$hLIIHD$ $   y   }tL$   D$hH$   AA HL$xHD$hL$   H$       AH$   A 'HD$xH$        H$     D$p3H\$PHl$XHt$`H0A]A\_(   )    :       D           *                          &    
+ d T 4
+ RpNone DL$ HL$SUVWATAVH   E3AILHHt@tHJ@BHH$   $   3$   H$  H$   HttHBH$   H    HH    H$   MtA$tID$H$   H    HH    H$      MtA$$sE$   D$  
+D$  MtA$$sI$   H$   H    H$   MtA$$sI$   H$   L$   Att
+uH      3HcIcL$   $   H$   H$   L$     L$8  D$   E3E  HuH$   3E   @ HHt@H   LL+f     B +uHu   H$   {   HOHn   HL9l uHL9l tH}&HBHfD  L9l u	HH~H|-HT Ht    t+H$   D$   H$   HA;.D$   D$  A;  L9/   LOM   H$   $   L$   H$   H$  H$   H$   HD$xH$`  Dl$pLl$hLd$`HD$XH$X  HD$PH$P  HD$HH$H  HD$@H$@  HD$8H$0  L|$0HD$(t$     uD$  H$   Dh   D$  H$   A      GL$0  AE HHt\H    t(; t#        ;u/GHHÄu7+uH$@  $   A7+A   H$`  L$X  AE 
+$   AD$  	  $   IcAE   H\         LM   H$   L$   H$   H$  H$   H$   HD$x3D$pHD$hH$`  Ld$`HD$XH$X  HD$PH$P  HD$HH$H  HD$@H$@  HD$8H$0  L|$0HD$(t$     tA   H5D$  A   D$  AxE   H$   H\    LM   H$   L$   H$   H$  H$   H$   HD$x3D$pHD$hH$`  Ld$`HD$XH$X  HD$PH$P  HD$HH$H  HD$@H$@  HD$8H$0  L|$0HD$(t$     t$A   H5D$  EuAE?D$  $(  H$0  H$   H0I$   Ic;AL$   L$   H   A^A\_^][   ;       :       ;       9                         )                B       B       z            ,       ,       2    !' ' $     z         ,       ,       8        z          ,       ,       8      p`P0H8D$         H8   E                   >       >       D     b  @SHPAv       A   D;AG3ۉ\$HD$@$   D$8$   D$0\$(\$     H$   HHDًHP[N   O        p           H       H       N     0H\$UVATAVAWH HHl$pLH	EA    3LEtMH|$PLl$XLl$x3t'fD  E I$DEL     H;rA;rLl$XH|$PI$IH\$`H A_A^A\^]H%    '   f    c   e       f                  R       R       X    !       5          R       R       d    5              R       R       ^    !
+ 
+ t
+     5          R       R       d        5           R       R       d     4 2	`PH\$UVWATAUAVAWHp
+  H    H3H$`
+  H$
+  $
+  L$
+  L$
+  HD$0H$
+  HD$@H$  HHD$8HL$(H$   DL$ EDD$$HHL$H    $
+  Ht$PƄ4`   7  .  E3EEJ  LAD  H    A   H$`  t?IttHO    DHGHDXHGDHHuˋ$
+  H$`  I    HL90  HD$0HL$(HH	    LHD$@AKEċDHD$(H    HD$HHt4HHD$(H    LHL$8ACEċDHD$(H    ;l$$\$$AD;d$ +  E3EE  H    ED9t$$%      H$`  tAHt$PttHO    DHGHDXHGDHHuˋ$
+  AޅtIffff     H[L$`  HIL+ff     B +uHut;r;  HD$0HHD$(H    HD$@EDHD$(AH    HD$HHt.HHD$(H    HD$8EDHD$(AH    AD;d$$AD;l$   HL$`3A       D$
+  E3AEtYff     H4@HIHHL9l`u          HD`HtlISHHD`fHA;rED9l$ V   H    AE1  L|$(    t?t:HO    <     JL`Ht    II   |  HGHXHGC=     ttHO    DHGHDXHGAC=      HcH\`H   IcfD9,s   HD$0IH    DsHD$@FLIEċ    HD$HHt)HI    DsHD$8FLIEċ    A;AD;d$ JL`Ht    II   |  JL`Ht    II   |       JL`Ht    II   ||  3Ht#HM     HT$HHHL    LLl$PLHD$0HM H    H$`  3A   L    D$
+  DEtIASAI0fL`  E;r9\$    D|$$H    E   ttHO    DHGHDXHGAC=   IcD`  fHD$@DDLHD$(H    MtHD$8DŋDLI    A;l;l$ s3LMtII    I    HD$(IH    3H$`
+  H3    H$
+  Hp
+  A_A^A]A\_^]   x       w      v    J  u    l  f      e      f      e      w    A  v      f      e      f    ,  e    _  z      t      w      v    +  s    r  v      f      e      f      e    >  s    ^  s      s      r      f      f      z    D  w    a  v      e      e      f    
+  q      f    -  y        L          i       i       o    ) 4XN
+p`P      `
+     p    LL$ LD$SUVWATAUAWH   L3IHD$`   H$   H$   LL鉌$   L$hMtIHtI	H$   HttHCHD$xI    IH    HD$xHttHCH$   I    IH    H$   Htt	CD$dI    IH    D$dHt#s   $   Ǆ$      L$   Ht#sL   L$   H    H$   N    HHD$pHuG  N    LHux  N    LHux  N    LHux  DNLFHD$hHD$PL|$HH$   HD$@Ll$8HD$`HD$0HILt$(H|$     tQ  Ht#s9   :  H9$      DD$dNAv       A   D;AGA   E;DD$   3|$HD$@L$8T$0HT$xỈ|$(|$     HH$   Hux   HD$pDNDHD$(HFHIHD$     l$`     H$       FD$   HT$x3|$HD$@   D$8L$0DGỈ|$(|$     HH$   H   H$   xHt    $   $   HL$p    MtI    t!H$   DMIHD$     $   MtI    M   I       HFDNDHILt$(HD$     HL$p    I    Ht!	rsD$hL{0   C8I    Ht#s$   L      I    H$   HtH$   HH$   HtH$   HL$   HĠ   A_A]A\_^][Â   ;       :       ;       9       ;           ?  >    R      r                     ,      O      R    -  O    V      p  s    }  s      s      s      R      s      s    %  s    N  s                                  !                                                                 	  p`P0  HL@HPSVWATAUAVAWH  E3MHLǀ8   Ld$`L$   L$   Ld$xML$   Dd$tD@DPD<LHLpLxL`MtM MtM!H$  HttHCH$       IH    H$   HttHCH$   I    IH    H$   H$P  Ht
+tkI    IH    Ht#s   D$pD$p   Ht#sH   H$   H    H$   H$x  Ht&sA   H    k  H$   L$  LD$hHD$@H$   HT$lHD$8H$   HHD$0H$   HD$(H$h  HD$       EtH$   H    D$h  Av'$  vH$         D$h  $  H$   L$   HHD$     s  EtH$X  H$       $      HH$   HuxIG  $      HD$xHuxI#  $      LHuHl$`x  $      H$   HuHl$`x  D$  L$   H$   HL$PHD$HHD$tHD$@Ll$8H$   HD$0HD$xHHD$(IH|$     t d  Ht#s    S  H$`   tvv          ;G|$pH$   A   A;DDD3ɉL$HD$@D$hD$8D$lD$0L$(L$ I    HHD$`Hux  |$p$      t\MtWD$hH$   3ɉL$HD$@   D$8D$lDADωD$0L$(L$ I    H$   HuHl$`xh  HD$xDL$hDD$lH$X  HD$XH$   HD$PH$   IHD$HHD$`HD$@H$   HD$8H$   HD$0$h  D$($  D$     H$       HL$xHǄ$           HD$x      $h  v$  vH$       EtH$X  H$   H    H$X  Ht9&
+s3$    t LF(HV0H    tHl$`=  3HF0F(H$p  D$lD$hHA    A$h  A$  AH$   HAHtJEt$H$   HFH$   HFH$   HF$    t$   F $   F$Ht,	rsH$   $      HK0C8H$       Ht#sD$tL      I    H$`  HtHL$`HMtH$   I3  IHl$`Hl$`Hl$`$h  v$  vH$       H$   Ht$      H$   Ht    H$   Ht    H$   Ht    HtH    H$   HtH    H$   HtH    HD$xHtH    DL$tEtH$   MIHD$     $   MtI    H$   HtH    H$P  H  A_A^A]A\_^[ü   ;       :       ;       9    !  ;    ,      p  >                      >      r                                      ,      O      O      i    &  s    <  s    n                    s      s    (      A      S  s    e  s    w  s                  s      s      s    
+  s      +                            ! T*                                                                	 " p`0  @comp.id	x    .drectve       ]                 .debug$S       p                 .text          t      -                    .pdata               j(                   .xdata                O        '           tolower          $LN9            .text                 b<         =           .text          `      O         K           .pdata                       V           .xdata      	          O        h       	        {                            .text       
+   *     bE     SetColor    
+    .pdata               *u
+                   .xdata                [sO
+                   .rdata                xE                    .text               ow                    .pdata               р                   .xdata               jy                   .pdata                                 .xdata                5Sls                      1               B               Q           .text                FG1         `          .pdata               8Ժ        k          .xdata                17        }                         .text          p                         .pdata               P                  .xdata                -                                 .text                }͉                   .pdata               m                  .xdata               zt                  .pdata               Ô        '          .xdata               	        B          .pdata               ]-        ]          .xdata                Uɥn        v                                        .text           L  '   |`                    .pdata      !         ,镻               !    .xdata      "   $      	1               "                                                 free                 0               D           getc                 P               ^               p           memset           .text       #        F               #    .pdata      $         #              $    .xdata      %         TV#              %    .pdata      &         *!)	#              &    .xdata      '          T#              '        0               >               R           $LN57       #    .text       (   +  '   d         `      (    .pdata      )         GJ@(        v      )    .xdata      *         %S{(              *    .pdata      +         3`(              +    .xdata      ,           A(              ,                                                     %               4               E               O               ^           $LN93       (    m  xpmstrcasecmp $pdata$xpmstrcasecmp $unwind$xpmstrcasecmp xpmVisualType AllocColor $pdata$AllocColor $unwind$AllocColor XAllocColor XParseColor $pdata$SetColor $unwind$SetColor ??_C@_04OHJIHAFH@None?$AA@ CreateColors $pdata$1$CreateColors $chain$1$CreateColors $pdata$CreateColors $unwind$CreateColors XDefaultColormap XDefaultVisual XDefaultScreen FreeColors $pdata$FreeColors $unwind$FreeColors XFreeColors CreateXImage $pdata$CreateXImage $unwind$CreateXImage XCreateImage MSWPutImagePixels $pdata$2$MSWPutImagePixels $chain$2$MSWPutImagePixels $pdata$1$MSWPutImagePixels $chain$1$MSWPutImagePixels $pdata$MSWPutImagePixels $unwind$MSWPutImagePixels __imp_SetPixel __imp_SelectObject ParseAndPutPixels $pdata$ParseAndPutPixels $unwind$ParseAndPutPixels __GSHandlerCheck __imp_DeleteDC __imp_CreateCompatibleDC boundCheckingCalloc xpmHashSlot xpmNextString __security_cookie __security_check_cookie XpmCreateImageFromXpmImage $pdata$0$XpmCreateImageFromXpmImage $chain$0$XpmCreateImageFromXpmImage $pdata$XpmCreateImageFromXpmImage $unwind$XpmCreateImageFromXpmImage XDestroyImage boundCheckingMalloc XDefaultDepth xpmParseDataAndCreate $pdata$0$xpmParseDataAndCreate $chain$0$xpmParseDataAndCreate $pdata$xpmParseDataAndCreate $unwind$xpmParseDataAndCreate xpmFreeColorTable xpmParseExtensions xpmHashTableFree xpmParseColors xpmHashTableInit xpmGetCmt xpmParseValues xpmParseHeader CrDatFrI.obj/   1345988046              100666  8974      `
+d) %:P         .drectve        ]   |               
+ .debug$S        p                 @ B.text           7  I            P`.pdata                        @0@.xdata          $     	         @0@.rdata             	              @0@.text             %	  *
+          P`.pdata             >
+  J
+         @0@.xdata             h
+  x
+         @0@.pdata             
+  
+         @0@.xdata             
+  
+         @0@.pdata             
+  
+         @0@.xdata               ,         @0@.pdata             J  V         @0@.xdata             t           @0@.pdata                        @0@.xdata                           @0@.text                             P`.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata                        @0@.pdata             :  F         @0@.xdata             d              @0@.text             t            P`.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata             5  Q         @0@.pdata             o  {         @0@.xdata                           @0@.rdata          
+                 @@@.rdata          
+                 @@@.text           ^              P`.pdata                        @0@.xdata          $              @0@.rdata                           @0@.rdata                           @@@.text                          P`.pdata                        @0@.xdata                           @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       d   &     d:\Develop\xpm\lib\CrDatFrI.obj : < b      	x    	x Microsoft (R) Optimizing Compiler H\$ UVWATAUAVAWH@  H    H3H$0  E3EMHT$ LE   $  H|0I$HL$0L    HH=    I\$   LMtLH    H    HcHHHHuHD$0+ŋ    HtxHL$ LHT$0)HL$0L+
+HALuIE $  AI0IH|0E;M3H$0  H3    H$  H@  A_A^A]A\_^]ø       ]       g                                      7                            ) 4S H 
+p`P      0         	%s %s DL$ SUVWAUAVH(L$   Ld$hAADLt}H$   L|$ HD$`EI$Et;AIfff     LHH@HI    HHHuDL$xHL$` IIL$II$uL|$ H$   I$Ld$hEt3AI     LHH@HI    HHHu H(A^A]_^][t                                              !                               8                                &    !      9                        2    9                            ,    !     9                        2       9                         2    !                              8                                 8     B	p`P0  H\$Hl$VE3IILAڅtlH|$Dff     ECI;ISH3B\HET
+Et&fff     H:H3HHDIuIIuH|$AB
+E Hl$ CH\$^Ê              ;       ;       A    !                 ;       ;       M                  ;       ;       G    ! t               ;       ;       M                   ;       ;       M     T 4 `  @SUVH HY3HIHE   H|$@Ld$HDd$`Ll$PE    LE HH        A;sH} H3HHHLHKELEHtVLf     IHff     HHBuA;sI8H3HHHKHIIuHIXLl$PLd$HH|$@H    HH   fAH ^][J   h    O          e      e                 P       P       V    !       "          P       P       b    "              P       P       \    ! 
+ 
+	 t     "          P       P       b        "           P       P       b     2`P0XPMENDEXT XPMEXT %s H\$ UVWATAUAVAWH`  H    H3H$P  HHL$H3MLHT$@L$0HM   A 
+   A@(y   MP0   DL؉t$8@ EJI:IRH3B\HEDEt%fff     H:H3HHDL+uIL+uCAh
+D$0L$8Eg   AB        LHu	AE!  AGEOED$(AGH    HL$PD$     HcH|PMt#AtEN$EF H    H    HcHtH XPMEXT HHGHD$P+ǋ    HIE Hupc  HL$P\$4HHBuAGEOMGIMHT$4D$       HL$@E?DyAG	AL$4L$0    HHup   L\$@l$0MACL+LAHHESAfD  KIf     HHBuK<H3IHIHIIuAKD$4J<HAHHHICEKECAHD$(ICHD$     |$8 t%HL$@EN(MF0AAWl$ HHL    HD$HH03EtIAHHt    HHuI    H$P  H3    H$  H`  A_A^A]A\_^]          y    (  x    6      X  u    `                                P      r    -  r    ?          ^          z       z       q    ) 4W L 
+p`P      P          %d %d %d %d %d %d H\$WH   IMHHtH    H$   LL$0LIH|$     u7HtHL$PH    LD$PE3HT$0H    HL$0    H$   HĐ   _;       Q       h   k    t                                         4  p  @comp.id	x    .drectve       ]                 .debug$S       p                 .text          7     Y7Q<                    .pdata               Q)                   .xdata         $              %               :                K            sprintf          .rdata                IJ-         _                           strncpy                                          .text               _k                    .pdata               _CR                   .xdata      	         ǆ               	    .pdata      
+         ӹE               
+    .xdata               H_^        
+          .pdata               Vbt                   .xdata                       6          .pdata                       L          .xdata               㷦        b          .pdata               }-!        x          .xdata                Dֆ}                  .text                 w,@                   .pdata               pgb                  .xdata               f                  .pdata               '                  .xdata               :                  .pdata               #1i                  .xdata                HP%\        ,          .text                         D          .pdata               4        U          .xdata               Ǐ        o          .pdata               4X                  .xdata               V                  .pdata               +eS                  .xdata                DѬ                  .rdata          
+       Щ                    .rdata      !   
+                      !    .text       "   ^     Ɩ7[         2      "    .pdata      #         iDq"        L      #    .xdata      $   $      b'"        m      $    free             .rdata      %          Kk               %    .rdata      &          -N               &                   $LN42       "    .text       '         P               '    .pdata      (         Q'              (    .xdata      )          kj'        .      )        M               ]               h           $LN8        '      CreateColors $pdata$CreateColors $unwind$CreateColors __GSHandlerCheck boundCheckingMalloc ??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@ xpmColorKeys __security_cookie __security_check_cookie CreatePixels $pdata$3$CreatePixels $chain$3$CreatePixels $pdata$2$CreatePixels $chain$2$CreatePixels $pdata$1$CreatePixels $chain$1$CreatePixels $pdata$0$CreatePixels $chain$0$CreatePixels $pdata$CreatePixels $unwind$CreatePixels CountExtensions $pdata$1$CountExtensions $chain$1$CountExtensions $pdata$0$CountExtensions $chain$0$CountExtensions $pdata$CountExtensions $unwind$CountExtensions CreateExtensions $pdata$3$CreateExtensions $chain$3$CreateExtensions $pdata$2$CreateExtensions $chain$2$CreateExtensions $pdata$CreateExtensions $unwind$CreateExtensions ??_C@_09OINMEHGD@XPMENDEXT?$AA@ ??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@ XpmCreateDataFromXpmImage $pdata$XpmCreateDataFromXpmImage $unwind$XpmCreateDataFromXpmImage ??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@ ??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ boundCheckingCalloc XpmCreateDataFromImage $pdata$XpmCreateDataFromImage $unwind$XpmCreateDataFromImage XpmFreeXpmImage xpmSetInfo XpmCreateXpmImageFromImage CrBufFrI.obj/   1345988046              100666  9018      `
+d) %:P         .drectve        ]   |               
+ .debug$S        p                 @ B.text           U  I            P`.pdata                        @0@.xdata              	  .	         @0@.rdata             8	              @0@.text              ?	  6
+          P`.pdata             J
+  V
+         @0@.xdata             t
+              @0@.text              
+               P`.pdata                        @0@.xdata             :  J         @0@.pdata             h  t         @0@.xdata                        @0@.pdata                        @0@.xdata                           @0@.text                          P`.pdata                        @0@.xdata             8  H         @0@.pdata             f  r         @0@.xdata                        @0@.pdata                        @0@.xdata                           @0@.rdata                           @@@.rdata                           @0@.rdata                           @@@.text           `   '               P`.pdata                        @0@.xdata                           @0@.text           `              P`.pdata               )         @0@.xdata          $   G  k         @0@.rdata             u              @0@.rdata             y              @@@.rdata                           @0@.rdata                           @@@.rdata                           @@@.rdata          *                 @@@.text                R          P`.pdata             z           @0@.xdata                           @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       d   &     d:\Develop\xpm\lib\CrBufFrI.obj : < b      	x    	x Microsoft (R) Optimizing Compiler @SUVWATAUAVAWHH  H    H3H$0  E3MMLHL$ D$0"D9$     $  H|1ff     I$HL$1L    HH=    I\$   LMtLH    H    HcHHHHuH\$ E ",
+ HD$0H+AT     HtqA/ALD$0HD  AHIJuA.H$  AI0H|1D;$  83H$0  H3    HH  A_A^A]A\_^][ø       m       w                            6          U                            &
+ I 	p`P0    0         	%s %s H\$HT$HL$UVWATAUAVAWH AL$   D$   H$   ELHtVEf     "HEt*IfMHH@HI    IHHu",
+ HIuLl$h"HEt0I     MHH@HI    IHHu"+\$`A] H\$pH A_A^A]A\_^]t                                                
+ 4 2p`PHE3LхtmH<$Dfff     I:IR3HABHED
+t.Lffffff     H:H3HIHEDuIIuH<$A@H{              #       #       )    !                 #       #       5       {           #       #       /    ! t                #       #       5                   #       #       5       H\$ VAUAVH ILLHEt}Hl$@H|$HLd$PELH    H    HnHcȋFHمt/Hf     LE H    H    HHcHHuHIuLd$PH|$HHl$@H    H   C   fCA+݃AH\$XH A^A]^7   S    ?       g   P    o          M       M       M                  8       8       >    !                 8       8       J                  8       8       D    ! 
+ 
+t	 T               8       8       J                   8       8       J     4 2
+`,
+"XPMENDEXT" ,
+"%s" ,
+"XPMEXT %s" H|$Hy3LHtH3HHQIxHtH3HэT
+IxHt3HHэD
+H|$H|$    `           V       V       \     t H\$ UVWATAUAVAWHp  H    H3H$`  3ILHL$PD~H1Mt
+A ErDHtA 
+sAP(tIH0    DEtGH{HtH3HэqH{HtH3HэtH{HtH3HэtH    HL$`    7Dt)A    HHuFA  HD$`HHL$`H+ffff     HD
+uEtLCMtH>H        AEEMEE D$(AEH    HL$`D$     Ht tDK$DC HL,`H        EtHL,`H        HL,`H        HDADt$D    LHI  HT$`HD$HH+HL$`JHD
+u|$@Et LCMtH    I    |$@AEMMLD$@D$(AEHT$DHL$HD$     Ht$H   AM D$DAMAMTH    HH   Et%LCMtt$@H    H0    t$@t$@IEEMEE HD$0IEHD$(AEHT$@HωD$     EtL$@DK(LC0HT$@H    D$@8};
+ HD$PH83HtH    H$`  H3    H$  Hp  A_A^A]A\_^]       j   #       y              v    3  u    8      U  r    c        o            l            i                  u          M      }        u                  8    /  f    A          `          z       z       e    ) 4Y N 
+p`P      `         ",
+  XPMEXT  %d %d "%d %d %d %d /*%s*/
+ /* XPM */
+static char * image_name[] = {
+ H\$WH   IMHHtH    H$   LL$0LIH|$     u7HtHL$PH    LD$PE3HT$0H    HL$0    H$   HĐ   _;       Q       h   _    t                                         4  p  @comp.id	x    .drectve       ]                 .debug$S       p                 .text          U                         .pdata                                  .xdata                B
+        #               7                H            sprintf          .rdata                IJ-         ]                           strncpy                                          .text                C<}                    .pdata               S                   .xdata      	          ;x               	    .text       
+                          
+    .pdata               ڮ
+                   .xdata               ݬ
+                  .pdata               ^
+        +          .xdata               V
+        C          .pdata               2
+        [          .xdata                _
+        q          .text                ~                   .pdata               -                  .xdata               k                  .pdata               3ӣ                  .xdata               {I                  .pdata               #                  .xdata                KW                  .rdata                ".]         +          .rdata                nt         X          .rdata                TU <                   .text          `       r                   .pdata                                 .xdata                ͏g                  .text          `     gl                   .pdata               &                  .xdata          $      s        &           free             .rdata      !          0         J      !    .rdata      "          U         i      "    .rdata      #          Kk               #    .rdata      $          $l               $    .rdata      %                         %                   .rdata      &   *       #                &    $LN33           .text       '         P         f      '    .pdata      (         Q'              (    .xdata      )          kj'              )                                                 $LN8        '      WriteColors $pdata$WriteColors $unwind$WriteColors __GSHandlerCheck boundCheckingRealloc ??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@ xpmColorKeys __security_cookie __security_check_cookie WritePixels $pdata$WritePixels $unwind$WritePixels ExtensionsSize $pdata$1$ExtensionsSize $chain$1$ExtensionsSize $pdata$0$ExtensionsSize $chain$0$ExtensionsSize $pdata$ExtensionsSize $unwind$ExtensionsSize WriteExtensions $pdata$3$WriteExtensions $chain$3$WriteExtensions $pdata$2$WriteExtensions $chain$2$WriteExtensions $pdata$WriteExtensions $unwind$WriteExtensions ??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@ ??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@ ??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@ CommentsSize $pdata$CommentsSize $unwind$CommentsSize XpmCreateBufferFromXpmImage $pdata$XpmCreateBufferFromXpmImage $unwind$XpmCreateBufferFromXpmImage ??_C@_03BPDIBAFI@?$CC?0?6?$AA@ ??_C@_07MPMODOEI@?5XPMEXT?$AA@ ??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@ ??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@ boundCheckingMalloc ??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@ XpmCreateBufferFromImage $pdata$XpmCreateBufferFromImage $unwind$XpmCreateBufferFromImage XpmFreeXpmImage xpmSetInfo XpmCreateXpmImageFromImage Attrib.obj/     1345988045              100666  9282      `
+d2 %:P         .drectve        ]                  
+ .debug$S        p   A              @ B.text           v     '	          P`.pdata             1	  =	         @0@.xdata             [	              @0@.text              k	  	          P`.pdata             
+  
+         @0@.xdata             9
+  I
+         @0@.pdata             g
+  s
+         @0@.xdata             
+  
+         @0@.pdata             
+  
+         @0@.xdata             
+           @0@.pdata             #  /         @0@.xdata             M  a         @0@.pdata                        @0@.xdata                           @0@.text           }     .          P`.pdata             B  N         @0@.xdata             l  |         @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata               8         @0@.pdata             V  b         @0@.xdata                        @0@.pdata                        @0@.xdata                           @0@.text                          P`.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata              0  P         @0@.pdata             n  z         @0@.xdata                           @0@.text                             P`.text           K                  P`.text           O    @          P`.pdata             T  `         @0@.xdata             ~           @0@.pdata                        @0@.xdata                        @0@.pdata                        @0@.xdata             .  F         @0@.pdata             d  p         @0@.xdata                        @0@.pdata                        @0@.xdata                           @0@.text                     	    P`.pdata             ]  i         @0@.xdata                           @0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES"       b   $     d:\Develop\xpm\lib\Attrib.obj : < b      	x    	x Microsoft (R) Optimizing Compiler   H\$Ht$WH HI        LHuHACH\$0Ht$8H _Å~H    HHH0HuH\$0Ht$8L3H _           v                              d 4 2pHtATH Ht$@LH~NH\$0Hl$8H|$HD  H   HHt    HHuHHuH|$HHl$8H\$0I$    I    Ht$@H A\A   0    m   0    u   0                                    !                               /    h                                !                              )       h                         #    ! t	 
+T 4                            )                                )    ! d                             /                                 /     2HtvATH Ht$@LH~NH\$0Hl$8H|$HD  H޿   HHt    HHuH0HuH|$HHl$8H\$0I    Ht$@H A\A   0    l   0    {   }           R       R       9    !                 R       R       Q    h   {           R       R       ?    !                R       R       K       h           R       R       E    ! t	 
+T 4              R       R       K                  R       R       K    ! d               R       R       Q                   R       R       Q     2H   ATH Lx   H\$0Hl$8Ht$@H|$HHqHNHt    FHtHHHt    HHuHHt    HHuH|$HHt$@Hl$8H\$0I    H A\>   0    Y   0    p   0       0                  h       h       [    !                 h       h       g                  h       h       a    ! t	 d 
+T 4               h       h       g                   h       h       g     2   HtD3
+HQ0Q8HQpQhHQxH   H   sHQ`QXsH      @SVWH Ll$PE3IHHsHBHApBAhDjLj      Hl$@HjLd$HDbB        LHu'Lkp##	rHK0    Lk0Dk8DkhYE~I@ H(HH0HuL[pFChHGHCxHGH   HGH   DnLnLoLoLoHl$@Ld$H#
+sHG0HC`G(CXLo0Do(Ll$PtG C$G$C( FC,CFC H _^[a          0      O                        w    !       
+                                                       }    !   
+   F                            F                                ! 	 T 
+   F                            
+   F                             ! 
+     
+                                
+                              2p`0H\$WH 3!	Hs9y8tHI0    H{0{8sShHKp    H{p{husoHKpHtSh    H{p{hHKxHt	    H{xH   Ht    H   H   Ht    H   HK0Ht    H{0{8#
+sSXtHK`    H{`{X#s!9   tH       H      ;H\$0H _   0    :   3    Z       o   0       0       0       0       U       0                                    
+ 
+4 
+2p@comp.id	x    .drectve       ]                 .debug$S       p                 .text          v      o|                    .pdata               ?j                   .xdata                O        3               O            .text                P1         c           .pdata               ؕ        u           .xdata               =                   .pdata      	         ֑/               	    .xdata      
+         c%               
+    .pdata               !                   .xdata               L
+                   .pdata                                 .xdata               r        2          .pdata               Vj]        M          .xdata                        f          free             .text          }      4φ                   .pdata               b                  .xdata               =                  .pdata               0d                  .xdata               c%                  .pdata               !                  .xdata               L
+                  .pdata                       4          .xdata               r        O          .pdata               Vj]        j          .xdata                                  $LN16           .text                #                   .pdata               rh                  .xdata               ,T                  .pdata                                 .xdata                 ;                    .pdata      !         -{              !    .xdata      "          6p        4      "    $LN18           .text       #                    N      #    .text       $   K       ϧ$E         `      $    .text       %   O     ޷o         r      %    .pdata      &         '%              &    .xdata      '         $(%              '    .pdata      (         (q%              (    .xdata      )         ɒ%              )    .pdata      *         C*%              *    .xdata      +         k2Y%              +    .pdata      ,         #%              ,    .xdata      -         	7%        9      -    .pdata      .         %        S      .    .xdata      /          6Z%        k      /    $LN22       %    .text       0     	   Uu                0    .pdata      1         er=0              1    .xdata      2          %Y%0              2    $LN16       0      CreateOldColorTable $pdata$CreateOldColorTable $unwind$CreateOldColorTable boundCheckingMalloc FreeOldColorTable $pdata$5$FreeOldColorTable $chain$5$FreeOldColorTable $pdata$4$FreeOldColorTable $chain$4$FreeOldColorTable $pdata$3$FreeOldColorTable $chain$3$FreeOldColorTable $pdata$0$FreeOldColorTable $chain$0$FreeOldColorTable $pdata$FreeOldColorTable $unwind$FreeOldColorTable xpmFreeColorTable $pdata$5$xpmFreeColorTable $chain$5$xpmFreeColorTable $pdata$4$xpmFreeColorTable $chain$4$xpmFreeColorTable $pdata$3$xpmFreeColorTable $chain$3$xpmFreeColorTable $pdata$0$xpmFreeColorTable $chain$0$xpmFreeColorTable $pdata$xpmFreeColorTable $unwind$xpmFreeColorTable XpmFreeExtensions $pdata$4$XpmFreeExtensions $chain$4$XpmFreeExtensions $pdata$3$XpmFreeExtensions $chain$3$XpmFreeExtensions $pdata$XpmFreeExtensions $unwind$XpmFreeExtensions XpmAttributesSize xpmInitAttributes xpmSetAttributes $pdata$4$xpmSetAttributes $chain$4$xpmSetAttributes $pdata$3$xpmSetAttributes $chain$3$xpmSetAttributes $pdata$2$xpmSetAttributes $chain$2$xpmSetAttributes $pdata$0$xpmSetAttributes $chain$0$xpmSetAttributes $pdata$xpmSetAttributes $unwind$xpmSetAttributes XpmFreeAttributes $pdata$XpmFreeAttributes $unwind$XpmFreeAttributes 
\ No newline at end of file
diff -Naur vim73.orig/src/xpm/x86/lib/libXpm.a vim73/src/xpm/x86/lib/libXpm.a
--- vim73.orig/src/xpm/x86/lib/libXpm.a	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xpm/x86/lib/libXpm.a	2013-08-04 19:09:11.440608029 +0000
@@ -0,0 +1,125 @@
+!<arch>
+/               1345987854  0     0     0       1562      `
+   F  ^  ^  ^  ^  ^  ^          )R  )R  )R  S<  S<  Xt  Xt  ]  ]  ]  ]  ]  ]  ]  s  s  s  s  x  x  {B  {B  {B  {B          *                                              8  
+  
+  
+  
+  
+  T  0  0_xpmFreeColorTable _XpmFreeExtensions _XpmAttributesSize _xpmInitAttributes _xpmSetAttributes _XpmFreeAttributes _XpmCreateBufferFromXpmImage _XpmCreateBufferFromImage _XpmCreateDataFromXpmImage _XpmCreateDataFromImage _xpmstrcasecmp _XpmCreateImageFromXpmImage _xpmParseDataAndCreate _XpmCreateImageFromBuffer _XpmCreateXpmImageFromBuffer _XpmCreateImageFromData _XpmCreateXpmImageFromData _xpmNextString _xpmNextWord _xpmNextUI _xpmGetString _xpmGetCmt _xpmParseHeader _xpmDataTypes _xpmHashSlot _xpmHashIntern _xpmHashTableInit _xpmHashTableFree _xpmInitXpmImage _XpmFreeXpmImage _xpmInitXpmInfo _XpmFreeXpmInfo _xpmSetInfoMask _xpmSetInfo _xpmatoui _XpmGetErrorString _XpmLibraryVersion _XpmFree _XpmReadFileToBuffer _XpmReadFileToData _XpmReadFileToXpmImage _XpmReadFileToImage _xpmReadRgbNames _xpmGetRgbName _xpmGetRGBfromName _xpmFreeRgbNames _XpmCreateXpmImageFromImage _boundCheckingMalloc _boundCheckingCalloc _boundCheckingRealloc _XDefaultVisual _XDefaultScreen _XDefaultDepth _XDefaultColormap _XParseColor _XAllocColor _XQueryColors _XFreeColors _XCreateImage _XImageFree _XDestroyImage _XpmWriteFileFromBuffer _xpmParseValues _xpmParseColors _xpmParseExtensions _xpmParseData _xpmColorKeys _XpmWriteFileFromData _XpmWriteFileFromXpmImage _XpmWriteFileFromImage  Attrib.o/       1345987849  0     0     100666  2178      `
+L            .text                           P`.data                               @ 0.bss                                 0UWVSEEUE҉EtdE    }9E}Ct&    &    Nxt$    Ny썶    EE9E|EE[^_]    [^_]Ð&    UWVSEUEU   E     Ev]t& UubE1x@9r*t& F9st$F    9rfUBu+EEE9EwUU[^_]    $    딉$    ˃[^_]É'    U   ]Í    UEtN@$    @(    @D    @@    @H    @L    @P    u   t@p    @t    ]Í    @<    @8    U]]u}Ct~MACDAA    C@A    tMAC<AA    C8A    E t@CACM(AC CAC]u}]tESDUxp    $    t`1ɉ	2A9|UMB    MBC@AB    CHACLACPA    A    A    CD    tC@    C$$    C$    C(    UWVSEtX(X  %   f  u:tMA8     tUJt=  E     [^_]ËE@DE   E    UǋR@9UU}It& '       &    Nxt$    Ny썶    EM9M|U$    M$    E@D    @@    UBH&  UBL  UBP   UB$   EUB@D$BD$rMAD    A@    @$$    MA$    A(    Bp$    MEAp    At         [^_]ÉD$A<$E@<    @8    Y$    MA$    A(    &$    MAP    $    MAL    $    MAH    S              /      9                              "                  !      A      X      o      |       '      .file         gAttrib.c                                                            *   P          =   `          P             b   0      .text                         .data                            .bss                             _free                u               _xpmFreeColorTable _XpmFreeExtensions _XpmAttributesSize _xpmInitAttributes _xpmSetAttributes _XpmFreeAttributes _boundCheckingMalloc CrBufFrI.o/     1345987849  0     0     100666  3425      `
+L            .text           p     	      &     P`.data                               @ 0.bss                                 0.rdata          d   $	              @ 0@U1WVS  11E     1EtUB  u1   MA   A   Q1ɉ   19sm1ۋ$    yqTC$    T9r9rtIU1ۋBt$    XMAt$    \UBt$    \    
+   (   )   fD*$      $L$    tUB{  MAD$AD$AD$D$*   D$$    ËEtU  t XPM+EXT +",
+ +؉D$$      L$$    ؋tMQ  EUM@RI19ƅ"   &       D$$փD$    Ív '    t"D$$D$7   D$    Gv",
+ )ˍsD$$      D$؉$    91  MAQÃ@D$$        MЋUE	z@JB1҉H9shv "1F;s:fCT$@4$D$    ;r",
+ 9r"1F;s8CT$@4$D$    ;r"F)Ƌ   1MЉEI@9   >   1\$4$D$    ƋIX9ωs'fL   4$GL$D$    ;r9r,
+"XFPMENFDEXTfF" )ƍF};
+ 1ҋMĜ  [^_]ø   iBD$BD$S   D$؉$    4MQgT$Z   \$ȉ$    ?uĜ  [^_]É$    D$Z   L$Љ$    WT$Z   L$Љ$     &    Ux}}uu]t    t$EȉD$ED$ED$E$    u3t>t$]$    \$<$EȉD$ÍEȉ$    ؋u]}]1҉T$͐/* XPM */
+static char * image_name[] = {
+ "%d %d %d %d 	%s %s ,
+"XPMEXT %s" ,
+"%s"  %d %d /*%s*/
+                 <      Q      g      w                              )                  Z      }                              c            w                  3      G                  !      5      a      x                              (      H      .file         gCrBufFrI.c                                            !         .text          c  &             .data                            .bss                             .rdata         b                     ;            _strlen          _strncpy         _free                I            _strcpy              _            _sprintf             t                                               _XpmCreateBufferFromXpmImage _XpmCreateBufferFromImage _xpmColorKeys _boundCheckingRealloc _boundCheckingMalloc _XpmFreeXpmImage _xpmSetInfo _XpmCreateXpmImageFromImage 
+CrDatFrI.o/     1345987850  0     0     100666  3164      `
+L     
+       .text                            P`.data                               @ 0.bss                                 0.rdata          $                 @ 0@U1W11V1S  ]Eۉ     t]C  E   P\$BЉ$      ]    CD$CD$CD$T$<$D$    EtE X  t XPMCEXT )C$      |$$    EU]@R[19   t&    D$։$D$    Ív '    t"D$$D$   D$    Gvύ)Ís4$    Z  T$$    9,1  U:BӋRǋ@э$    N  s[ȋ1ۉ&    CD$$    $    @F;vϋEHȋIU]E[xP1ۉ@9   t& 1;sF&    '    FT$@$D$    ;r ЉC9q1;s8FD$@$D$    ;r _  ]1pS]Ћ[U|ƋRtxP1lx9p   |   \$D$$    lt9ls|$    ȃF|1|[hX;hsIt& D$$    lt9ls$    @FG;hrpx|9p& XPME@NDEXf@T 1E1;s  C;r拝$    Ĭ  [^_]ËC	S11   19   f1{D$    [T$    F$    T9r9r
+@+f$C    @D$B$D$   D$    Ux}}uu]t    t$EȉD$ED$ED$E$    u3t>t$]$    \$<$EȉD$1ÍEȉ$    ؋u]}]1D$͐%d %d %d %d 	%s %s XPMEXT %s  %d %d n                            )                                                                  e                  9      |            $                  %      B      K                        .file         gCrDatFrI.c                                               `      .text                         .data                            .bss                             .rdata         $                     7            _strncpy         _free            _strlen              E            _strcpy          _sprintf             Z                o                                               _XpmCreateDataFromXpmImage _XpmCreateDataFromImage _xpmColorKeys _boundCheckingMalloc _boundCheckingCalloc _XpmFreeXpmImage _xpmSetInfo _XpmCreateXpmImageFromImage create.o/       1345987850  0     0     100666  10669     `
+L     $  2     .text                      o     P`.data                               @ 0.bss                                 0.rdata                           @ 0@UWVSu]t,t($    $    9uFCu)[^_]Ét& U(]E]u}u}t\$D$t$<$    t\$t$<$    1҅]Ћu}]Í&    '    U8uu}Ǹ    ]ӉD$4$	u+EU     E  E1ҋ]Ћu}]Ét$E@\$<$D$ED$U<   |tʋE$ME E$BEE     E,E(E,BUWVS|҉E}UE    t	@j  E    E  M  AEE  E   PUE  UB@r  JlM̋EU  E@H     U؋E(  MA      Eԃ}E   t  }E   tE   E    U9U  E    u܅.  E    E܋O9EȋuMst    1҃} tU$T$    tGu5^t.EHt        '    EM9MrE9E   `  FU  U11ۉT$8M؉t$0\$,L$4UT$(M(L$$U$T$ M L$UT$ML$UT$ML$UЉD$T$M$UE  E   t& Mȋ]̅1҃t)'    &  KMȅ1҃u]̍    '    MC1҃   tU1T$8M1҉T$0t$,L$4UT$(M(L$$U$T$ M L$UT$ML$UT$ML$UЉD$T$M$UE"t9E   CMȅ1҃g&    '    ]ȅ  EЃMEE9MEă|[^_]ËB,R0EUU1T$8M1҉T$0t$,L$4UT$(M(L$$U$T$ M L$UT$ML$UT$ML$UЉD$T$M$UEA'  E   KXNFUɉuhM   U(MM$U(@D$F$2;Ev '    @t
+    T$F$uMUЋE    s}E   E    E`   E   M$    D$E$    EHU$    D$M$    	E   F|[^_]E       '    UE    ]    US4ËM    w	D$ ET$$D$ED$$    L$D$1D$1D$ED$    U4[]UW1VSuEUD$$    E;}sD1;]s6'    UU|$\$CD$$    ;]rG;}rEUD$$    e[^_]Í&    '    UWVSlEE    u}E    ]E   E    E    E    E    t	E     Mt	U    t	  4$    D$4$    E܅q  h  SU؅:  1  CEԅ  C	  S|UЅ  C     E̋G$    EċUĸC  G$    EE   G$    EE   G$    EEt{EUD$ ED$ET$UD$ED$EĉT$ډD$GD$G$Eȅ   |'   C   CX   v '    E5  EJ  }ątEĉ$    ]tU$    E+  UtE$    EtU$    Eȃl[^_]ËC(t& Ete}ED$GD$D$Et   D$Uԉ$UCEȅ8EċUD$GD$GD$$}   1҃} t[EUЉD$GD$T$U܉D$$   EȅEUD$GD$GD$$"Uĉ$    E$      u	  EUC(ES$CT   C   UESpCtEtEUEEUE  E   t& 4$    D$4$    &    4$    D$4$    Et& $    E    '    $    v D$U1ɉL$E4$T$D$UE$    E$    	    '    U1W11V1S  11ۉ   } 11|1x11111Ett	E     ut	U    t	   E$    D$U$    2  )  O    w  G  W|  G     E1҉ptE@t   pU$    te[^_]ËOQD$ D$D$D$D$D$D$D$M$    up  M  %  L$E؉D$D$T$U$    A  p  $      $    |  $    x  $    t  D$ tD$D$xD$T$|L$D$D$$EtC  tGtGX.  EtMD$D$D$t   D$4$E     1҃}   lh``d\TXf  `
+  `1ۃ)1҃dd  1ɋhL9LA  U$    1ҋlP9P  1;`s;    U	Ш  MFQBAC;`rˍM؉T$$    Ë S  XD$M$    @D$LL$PD$U$    TtRTD$U$    |@D$LD$PT$M$    Pl9Pt&   ^       0M$    D$E$    E$    D$U$    U؉$    'D$ED$U$      v  A  &             t$    |t|$       xtx$    ttt$    e[^_]ËEPBHB   @ȈFCSD$E$    O$    9$    $    $    $    $D$    D$1҉T$xD$T$M$D$M$    $    +E؉$    0Ht,@L$H$    H$    DL$U$    11$    1|$    |vn  p  Mt(E@t*MA    A    UB    BBBBEtJptMAAAtUB
+B  u	  tG(O$GTtdGt^xWpGtEtU}tM1.Lh9LUx$    뤍D$D$D$$   T$E
+1hL9LE$    1lP9Pv  1;`s4fM	Ш  QFBAC;`r1;ds/1fT$\$    tF;dr;dXD$M$    D$LL$PD$U$    TtMTD$U$    |D$LD$PT$M$    Pl9PEPBHBx@ȈFC$    Lh9LHT1Ht9U$    HTD$H$    @X1D$M$    D1҉T$   L$$    ;ds#\F;dfUr1Lh9L
+U$    1lP9P   U	Ш   MA@AC=   ]fDD$LL$PD$U$    Ht;]|DD$LD$PT$H$    Pl9P(Lh9LEPBHB  @t$    TD$M$    Q1ҍ   L$1T$$    ;d   \PF;dfQst <u$      D$    <ɉu1C     t$    ލU؉$    1Lh9L  M$    1Pl9PX  U	ШI  MA0@AF=     U	Ш8  MA@AC=   x  i  f<X ^  XD$M$    XDD$LL$PD$U$    TtYTD$U$    |XDD$LD$PT$M$    Pl9PLfEPBHB   @EPBHB}   @$    +1C   (t$    1C   t$    މ$    $    21&    C   Lt$    ސNone    $   0    1   0       /       .             *          h        ,      +      ,      -    Z  $      #      "      #      ,      -    	  &    3	  &    S	  &    s	  &    $
+  )    6
+  )    S
+  )    e
+  )    e  )    p  )            ,      '    $  ,    0  +    D  %    d  %      )      )    ~  ,      -    (  !                   &    >  &    ]  &    |  &    <              #      "    7  #    m  "            ,      '      ,      +          2        )      )      )      )    [      h  %    u  %      )      )      )                	  1          D  #    U      o  #      )      )    -  )          '  *    \  #      "      #      "    *  1    f        #      #          #        "      "    ^  )    x                  ,  )    9      c        #    W  "    }  #      "    0  1    ]  )      )      1      1      )      (    .file         gcreate.c                                                 `                         )             7             C              Q             d                       .text            o             .data                            .bss                             .rdata                                                                                          _memset                                                                             #               3               E               P               `               p               }                                                                                      _free            _strcmp                                                                                     _tolower         __filbuf         '  _xpmstrcasecmp _AllocColor _SetColor _CreateColors _FreeColors _CreateXImage _MSWPutImagePixels _XpmCreateImageFromXpmImage _xpmParseDataAndCreate _xpmHashSlot _boundCheckingCalloc _DeleteDC@4 _xpmNextString _CreateCompatibleDC@4 _xpmFreeColorTable _xpmParseExtensions _xpmHashTableFree _xpmParseColors _xpmHashTableInit _xpmGetCmt _xpmParseValues _xpmParseHeader _SetPixel@16 _SelectObject@8 _XCreateImage _XDestroyImage _boundCheckingMalloc _XDefaultDepth _XFreeColors _XDefaultColormap _XDefaultScreen _XDefaultVisual _XAllocColor _XParseColor 
+CrIFrBuf.o/     1345987850  0     0     100666  1275      `
+L            .text                           P`.data                               @ 0.bss                                 0U]   BB    Ít& '    UEȁ  ]xuu}}$    4$    E}   <$    |$4$    |$Eȉt$D$ED$E\$D$E$    xt$EȉD$<$    4$    Eȉ$    ؋u]}]f11҉D$EȉT$D$ED$E\$D$E$    ÍEȉ$    ؋u]}]Ít& UX  uu}}]􍝸<$    4$    Et$|$$    ]u}]ÐE       M       g       s                                               R      Z      t      .file         gCrIFrBuf.c                                                           *   0      .text                         .data                            .bss                                 G                U                f                v                                                                                               _OpenBuffer _XpmCreateImageFromBuffer _XpmCreateXpmImageFromBuffer _xpmParseData _XpmFreeXpmImage _XpmFreeXpmInfo _xpmSetAttributes _xpmParseDataAndCreate _xpmSetInfoMask _xpmInitAttributes _xpmInitXpmInfo _xpmInitXpmImage 
+CrIFrDat.o/     1345987850  0     0     100666  1318      `
+L            .text                L           P`.data                               @ 0.bss                                 0U1ɉB ]    B1  1B    B      Ƃ   Ƃ      É'    UEȁ  ]xuu}}$    4$    Eu}   <$    |$4$    |$Eȉt$D$ED$E\$D$E$    xt$EȉD$<$    4$    Eȉ$    ؋u]}]f1D$1D$EȉD$ED$E\$D$E$    ÍEȉ$    ؋u]}]Ít& UX  uu}}]􍝸<$    4$    Eht$|$$    ]u}]Ðu       }                                                 <      I                        .file         gCrIFrDat.c                                               P           '   `      .text                         .data                            .bss                                 B                P                a                q                                                                                               _OpenArray _XpmCreateImageFromData _XpmCreateXpmImageFromData _xpmParseData _XpmFreeXpmImage _XpmFreeXpmInfo _xpmSetAttributes _xpmParseDataAndCreate _xpmSetInfoMask _xpmInitAttributes _xpmInitXpmInfo _xpmInitXpmImage data.o/         1345987851  0     0     100666  5560      `
+L            .text           0           7     P`.data                         @ `.bss                                 0.rdata          \   d              @ 0@UWVS8E  EM  qωMME    AU萋FHFxY@GӈEEE9u1҃uĄt0]tt$O$    Ku1[^_]É4$    룋UZ}E    M  M8GUE:1t3FHF)  @}  uE    }븐t& EMA+t& GEEE9uZB҅tJFHF   @}  uE    }GEEE9t&    F     1[^_]ÃM1EËE  Av ECFMGPBA
+8uuބt.E)x1[^_]É4$    H4$    U1J]E  81&    CG:1҄tM  QBA
+uՋ]1΋Ex    CFG8u,t(M  QBA
+uً]F1GC8tԄt+   Vt$$    1[^_]ËEH&    '    UVSuuVFBVN1[^]Í          ^t0t& '    CHCL  @  9tBuۀ   t^fCHCxE@  9tz  t 9uȉ!CHCy    $    뷋  7$t& @   9   CHCyՉ$      tNt& '    AN t8u  toFHN 8AN 8    t8uՉ:Nɉ$    \$$    V  HVJN 8tAF-F  HN8t֍    '    UWVSUE    	Шt_MQ1f     Xb  M  9P  EBP    8tĉ$   |$    MQ빋Ur#v      xt^M  9tPFHFb  8@t2    8t<$   L$    볉4$    Ӊ'        8        X   U  91   M9M   E@EFEHFx@뎡     XuYUM  919Mt;EPBEMQ@EE    8t$   t$    tMEHE[^_]É$   T$    t$$    E[^_]É4$    U   S  D$E\$$D$U$T$      []Í        UW1V1S<  U	Ш   Ep  t*  9tFt& EPBXt9u)B$    E  t$T$$    U
+  D    EpFHF   @Ӹ   $   1ҍ    U  9Pt&       FGHF(  @ӋU  91u          t$$    EE1<  [^_]É4$       D$$       ǉ<$   D$D$    1FGHF&    4$    BT$$    tET$ǋ<$D$     $    $        '    U]]uutCu    1]u]@$    S$T$ST$    S 1C    ]u]fU18  ]]u};u1]u}]ƃ   11ƃ  
+       T$D$$etV$   D$t$EZ  uA      ƍs  ]u}]F      ƍu$   D$D$ǅ1/_   $D$    t))ǃ~   N   9׉]         v                           ƃ     $     5V         81ɉ   I$   t$D$ |$T$$    t    u량$-          $
+        $           
+                        
+   ""           &   *   /      ""     1   8   =                                    ! 
+ C /* */ ,
+ static char * [] = {
+ };
+ Lisp ; (setq   '(
+ ))
+ XPM2 #define _format XPM                       )                  ?                  q                              %      /      A      O                        >      R      e            D      y            	      	      	      
+      T
+      t
+      
+      
+      
+      6      N            8                                    3      O      `                                    &                                                                $       (       0       4       8       <       @       D       H       P       T       X       \       .file         gdata.c                                                              !   @          .   p          9             G              R   p      .text          /  7             .data                          .bss                             .rdata         Z                     b               p                            _strrchr         _strncmp         _free                            _strncpy                                         _ungetc                          __filbuf            _ParseComment _xpmNextString _xpmNextWord _xpmNextUI _xpmGetString _xpmGetCmt _xpmParseHeader _xpmDataTypes __imp___pctype __imp____mb_cur_max _boundCheckingRealloc _boundCheckingMalloc _xpmatoui __isctype hashtab.o/      1345987851  0     0     100666  1211      `
+L     B       .text           p                P`.data                               @ 0.bss                                 0UWVS1ۋ}Mw)Au?1tDUU9s\t(U 8u$UT$    uҍt& '    [^_]Í    U(uu}}]t$<$OË t1ɋ]ȋu}]Í    $       t0EBҹtƋG;G}@G붋VUUUEMG]ɉEȉ)W$    xG        9w1];u}'    uF;u|E$    G' <$FD$_Ѝ    US]   CU   C    $       Ҹtt&      9wS1Z[]Ív '    UWVS}wt<&    9vt$    9w덴&    4$    G    [^_]Ðm              2                  A      T      .file         ghashtab.c                                                                         2         .text          g               .data                            .bss                             _free            _strcmp              D            Y   _xpmHashSlot _xpmHashIntern _xpmHashTableInit _xpmHashTableFree _boundCheckingMalloc 
+Image.o/        1345987851  0     0     100666  579       `
+L             .text                            P`.data                               @ 0.bss                                 0UE@    @    @    ]Ív US]SuCu(C    []ËC$D$    Ctݐt& $    C    []ÐP       d       .file         gImage.c                                                          .text          u                .data                            .bss                             _free                &            9   _xpmInitXpmImage _XpmFreeXpmImage _xpmFreeColorTable 
+Info.o/         1345987851  0     0     100666  901       `
+L     $       .text           p                P`.data                               @ 0.bss                                 0UEt#@    @    @    @    @    ]ÐUS]tutCud    []Ív Cu=Cu%Cu̍&    $    C    벉$    C    ʉ$    C    벉D$C$    C    C    z'    UUM    t   t
+   ]Ðt& UUM    t   AHBALBAPBt
+   A<BA8Bt
+ABAB]Ð                            .file         gInfo.c                                                   0           $              4         .text          n               .data                            .bss                                 @            _free            S   _xpmInitXpmInfo _XpmFreeXpmInfo _xpmSetInfoMask _xpmSetInfo _XpmFreeExtensions 
+misc.o/         1345987852  0     0     100666  1002      `
+L            .text                        	     P`.data                               @ 0.bss                                 0.rdata          |     Z         @ 0@UW1V1;}S]s*&    '    ,0<	wFC|P;ur1;u1Ʌt
+E   8[^_]U    Uw$d      ]]    ].   ]:   ]I   ]W   Ít& '    Uv  ]Í    U]    Invalid XpmError XpmColorFailed XpmColorError XpmNoMemory XpmFileInvalid XpmOpenFailed XpmSuccess   z                  b       v       {                                                 d       h       l       p       t       x       .file         gmisc.c                                                   `           !          _XpmFree       .text             	             .data                            .bss                             .rdata         |                _free            4   _xpmatoui _XpmGetErrorString _XpmLibraryVersion RdFToBuf.o/     1345987852  0     0     100666  914       `
+L            .text                       
+     P`.data                               @ 0.bss                                 0.rdata                           @ 0@U1ɉWVS\E     EL$$    Å۸xw$ED$    ul$    T$    EtT}̍G$    t^|$E4$D$   D$    ËE$    9u"7 E01\[^_]É$    4$    ڋE$    Ȑr          9       E   
+    N       c                                          .file         gRdFToBuf.c                                        .text             
+             .data                            .bss                             .rdata                          _free            _fread           _fclose                          __fdopen         _close           __fstat          _open            .   _XpmReadFileToBuffer _boundCheckingMalloc RdFToDat.o/     1345987852  0     0     100666  682       `
+L     D       .text                            P`.data                               @ 0.bss                                 0Uh}}]uE   t    EuȉD$t$E$    t؋u]}]Ét$E<$D$    4$    E$    ؋u]}]Ð8       `       j       u   
+    .file         gRdFToDat.c                                        .text                          .data                            .bss                                                 '                8                S            j   _XpmReadFileToData _XpmFreeXpmInfo _XpmFreeXpmImage _XpmCreateDataFromXpmImage _XpmReadFileToXpmImage RdFToI.o/       1345987852  0     0     100666  2179      `
+L     b       .text           `     @           P`.data                               @ 0.bss                                 0.rdata          ,                 @ 0@UH  ]Éu}   $    {~+   D       $   D$    At   1F    ]Ћu}]   D   ։^	         \$D$$    t$$    Gs뀡       B^       \$L$$    $   T$    B뛉'    UttË@;    t$    Í&    @$    Ív UX  }E}]u$    <$    Et؋u]}]Ív |$E4$D$    ÉT؋u]}]Ðt& UEȁ  uu$]}}    4$    Ex      <$    |$4$    |$EȉD$Et$D$ED$xD$E$    xt$EȉD$<$    4$    xEȉ$    ؋u]}]1D$1D$EȉD$ED$ED$xD$E$    롐.gz r .Z uncompress -c "%s" gunzip -qc "%s" &       [       m       v                                         "      ;      W      _      h                                          _      g                                          I      .file         gRdFToI.c                                                                         7   @      .text          Q               .data                            .bss                             .rdata         ,                     K            __pclose         _fclose          __popen          _sprintf         _strlen              W                e                v                                                                                                            _fopen              _OpenReadFile _xpmDataClose _XpmReadFileToXpmImage _XpmReadFileToImage __imp___iob _xpmParseData _XpmFreeXpmImage _XpmFreeXpmInfo _xpmSetAttributes _xpmParseDataAndCreate _xpmSetInfoMask _xpmInitAttributes _xpmInitXpmInfo _xpmInitXpmImage 
+rgb.o/          1345987852  0     0     100666  7632      `
+L            .text                            P`.data           `             @ `.bss                                 0.rdata            	              @ 0@UX  ]Í    U1ɉWVSX  u}9}&       9tA9|[1^_]Í    9u;Eu[    ^_]Í    '    UWVSE$    E'        T$E$    t; v tCC]t$    Cu  D$U$    t@a5X  1N{907    D$M$    t<}Ѝs9~ЋEUM    E        $       [^_]Ë   MЉMUM$       [^_]Ít& U]Ð     
+       2 "    (    .    5       ;    J      O   + Z   ** `   ޸ j   _ t        i    rV    ""                  V-    k    UV/              z       8Kf   /OO '    5    @   I    U  TTT ]   h  ## r   ~  Pi         ڪ    ߄   ~~~                        !!!   $$$   &&&   )))   +++   ...   000      333   666 !  888 (  ;;; /  === 6  @@@ =  BBB D  EEE K  GGG R  JJJ Y   _  MMM f  OOO m  RRR t  TTT {  WWW   YYY   \\\   ^^^   aaa   ccc   
+
+
+   fff   iii   kkk   nnn   ppp   sss   uuu   xxx   zzz   }}}                      !   (   /   6   =   C   J   Q   X   _   f   m   t   {                                                                        !   '   .   5   <   C   J   Q   X   _   f   m     s  /      i   k99      ~         |                ݂       !   +  z 7    E   R  p a  w p  |                  R       22   2K   f   R   p   4wf   jj !  ## 3    C   y S  //d `   j   t   }  ޭ   ##u   ##u      k#       E          sx      p       ڹ 
+  ͅ?      H    $    +     /   9  Ai C  E O  z V  ` a  R j   s  R- z  r   ~   p      AA   Tp   ޸   ؿ   cG           >   >   ޳           	  28                AliceBlue AntiqueWhite Aquamarine Azure Beige Bisque Black BlanchedAlmond Blue BlueViolet Brown burlywood CadetBlue chartreuse chocolate Coral CornflowerBlue cornsilk Cyan DarkGoldenrod DarkGreen DarkKhaki DarkOliveGreen DarkOrange DarkOrchid DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DimGray DodgerBlue Firebrick FloralWhite ForestGreen gainsboro GhostWhite Gold Goldenrod Gray Gray0 Gray1 Gray10 Gray100 Gray11 Gray12 Gray13 Gray14 Gray15 Gray16 Gray17 Gray18 Gray19 Gray2 Gray20 Gray21 Gray22 Gray23 Gray24 Gray25 Gray26 Gray27 Gray28 Gray29 Gray3 Gray30 Gray31 Gray32 Gray33 Gray34 Gray35 Gray36 Gray37 Gray38 Gray39 Gray4 Gray40 Gray41 Gray42 Gray43 Gray44 Gray45 Gray46 Gray47 Gray48 Gray49 Gray5 Gray50 Gray51 Gray52 Gray53 Gray54 Gray55 Gray56 Gray57 Gray58 Gray59 Gray6 Gray60 Gray61 Gray62 Gray63 Gray64 Gray65 Gray66 Gray67 Gray68 Gray69 Gray7 Gray70 Gray71 Gray72 Gray73 Gray74 Gray75 Gray76 Gray77 Gray78 Gray79 Gray8 Gray80 Gray81 Gray82 Gray83 Gray84 Gray85 Gray86 Gray87 Gray88 Gray89 Gray9 Gray90 Gray91 Gray92 Gray93 Gray94 Gray95 Gray96 Gray97 Gray98 Gray99 Green GreenYellow honeydew HotPink IndianRed ivory Khaki lavender LavenderBlush LawnGreen LemonChiffon LightBlue LightCoral LightCyan LightGoldenrod LightGoldenrodYellow LightGray LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateBlue LightSlateGray LightSteelBlue LightYellow LimeGreen linen Magenta Maroon MediumAquamarine MediumBlue MediumForestGreen MediumGoldenrod MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed MidnightBlue MintCream MistyRose moccasin NavajoWhite Navy NavyBlue OldLace OliveDrab Orange OrangeRed Orchid PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip PeachPuff peru Pink Plum PowderBlue purple Red RosyBrown RoyalBlue SaddleBrown Salmon SandyBrown SeaGreen seashell Sienna SkyBlue SlateBlue SlateGray snow SpringGreen SteelBlue Tan Thistle tomato Transparent Turquoise Violet VioletRed Wheat White WhiteSmoke Yellow YellowGreen grey                 3       k                                          
+      *      9      l                                                       (       0       8       @       H       P       X       `       h       p       x                                                                                                                                                       (      0      8      @      H      P      X      `      h      p      x                                                                                                                                      (      0      8      @      H      P      X      `      h      p      x                                                                                                                                      (      0      8      @      H      P      X      `      h      p      x                                                                                                                                      (      0      8      @      H      P      X      `      h      p      x                                                                                                                                      (      0      8      @      H      P      X      `      h      p      x                                                                                                                                      (      0      8      @      H      P      X      `      h      p      x                                                                                                                                      (      0      8      @      H      .file         grgb.c                                   X          %                                6              E              X         .text                         .data          \               .bss                             .rdata                         _free                i            _strstr          _tolower         _strchr          _strdup          x   _theRGBRecords _numTheRGBRecords _xpmReadRgbNames _xpmGetRgbName _xpmGetRGBfromName _xpmFreeRgbNames _xpmstrcasecmp scan.o/         1345987853  0     0     100666  4125      `
+L            .text            
+     H      %     P`.data              
+           @ 0.bss                                 0.rdata          p   
+              @ 0@UuEu]}t     1]u}]ËFN>9ˍMs        E9tC9r9tU뷋V9vEUUAF뚍F    D$<$    Ҹ   tN빐&    UEUMu'BuB   B           1]    1]UW1VSEEpD$U$    ;}sM1;]s?'    |$\$U$    t$U$T$UuC;]rG;}re1[^_]Íe[^_]Í    '    U1WVS  ]1}1ۉE    E    E   E    E    y  CSE  U   MI    L$$    E̅  E$    Eȅ  t7   D$EȉD$$D$E[q  t7    ډD$EȉD$L$$E 6     D$Eԉ$      ]Ժ   \   \k\B9w9su؅I  1EȉM1ɉ  U  JtK$      1    B|v '    |$    :  B       k\)C6B)BFtt    k\)C;r G971]D$T$L$$    t$$        ]tDUBM  t0UM]ERDI@[$@T1Ƀ   &    '      111;&t& )ʋ9  F;  ;uй   1v E̅u=Eȅu,tEԉD$$    Ĭ  [^_]É$    ʉ$    빅OGzB$    ú          1 C;s1BF    k\)C;r E  U   fu	  ]ST     f  CDR<о   t$      Fv1҅҉]ԋuJDZ@B$RT?  BD$BD$B$D$]   D$    $    A  9x$    $    T$    1MAQEԉYAẺAEȉ$    1t& ;v<t	<   t$    FvBD$BD$BL$$    D$    $    CE$    D$U$    $    $    $    D$    $k       B1MAD<Tw     .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}| #%02x%02x%02x None        3      a      \      u                              :      \  
+      
+           0      Y      n      x              
+      
+    k                        R      h                  C	      S	      l	      {	      	      	      	      	      	              .file         gscan.c                                                                             +             >         .text          
+  %             .data                          .bss                             .rdata         p                     Z                g                w            _sprintf                                                                                         _strdup                          _free                                                           +  _printable _storePixel _storeMaskPixel _MSWGetImagePixels _XpmCreateXpmImageFromImage _GetPixel@12 _SelectObject@8 _xpmFreeRgbNames _xpmGetRgbName _xpmReadRgbNames _XQueryColors _XDefaultScreen _XDefaultColormap _xpmFreeColorTable _boundCheckingMalloc _boundCheckingCalloc _boundCheckingRealloc 
+simx.o/         1345987853  0     0     100666  2040      `
+L     p  !     .text                      
+     P`.data                               @ 0.bss                                 0U]    &    U]    &    U]    &    U1]É'    U1]É'    U   ]]uT$$    Ƹ   D$$    ]u]Í&    U1]É'    U@Ѓ	v!AQvA1҃wQɉ'    ]Í        U1҉(]]}}ۉutX;#tb$ED$ED$ED$    1҅t0u]MÈ_	O	   G]Ћu}]É$       t1҃tgCCECCECCE   7CCECCEC	wC
+CcECWECK뀉'    U   ]Í    UMVuS1CԈAQA9|[^]Ív U1]É'    U($   ]uu }}$t3|$1   D$EL$4$D$    Es{C؋u]}]Í&    UEt]    ]Í&    '    US]t$    ]]뼋]Ðn              )      v            d                     %       <      .file         gsimx.c                                                              .               D   0           T   @           d   P           s                                             p                                                    0             P      .text          y  
+             .data                            .bss                                             _free                                          _strlen              %           _realloc         _calloc          _malloc          6  _boundCheckingMalloc _boundCheckingCalloc _boundCheckingRealloc _XDefaultVisual _XDefaultScreen _XDefaultDepth _XDefaultColormap _hexCharToInt _XParseColor _XAllocColor _XQueryColors _XFreeColors _XCreateImage _XImageFree _XDestroyImage _DeleteObject@4 _CreateBitmap@20 _xpmGetRGBfromName _GetDeviceCaps@8 WrFFrBuf.o/     1345987853  0     0     100666  662       `
+L     Z       .text           p      (           P`.data                               @ 0.bss                                 0.rdata             $              @ 0@U    VSEL$]$    ƅt4$    D$   T$$t$    4$    1H[^]Ðw      
+           .       G       Q       .file         gWrFFrBuf.c                                        .text          e                .data                            .bss                             .rdata                          _fclose          _fwrite          _strlen          _fopen              _XpmWriteFileFromBuffer parse.o/        1345987853  0     0     100666  9485      `
+L     b   -     .text           @     X      |     P`.data                0          @ 0.bss                                 0.rdata          P                 @ 0@UWVS<  E     111҉11   D$t$E$    J        1     D$T$M$    	  11+(  B   $_   |$       )ȉ)  v/  u            UT$M$    ti   &    u4$    	Шu	Шt<  [^_]ËE$U(         1<  [^_]ËU$T$    tML$u4$    tE4$D$    tU4$T$    t   D$L$u4$    t1  E(҉  M1ۉL$u4$      U$16$      UT$M$       o,      ut$E$       "j3      Uut$E$    ;   M\$14$L$       M$9   t$1|$E$    tc1U(
+<      ƍ^   NE 4$D$    fU$   \<      u   xE D$U$    .   $    U   WVS<  L$E$    T  U     1E9  UBM$    $      1;us6&    M	Ш  QFBAC;ur }1҃}  ƅ 11   D$D$U$    >  &    u:1ۿ    '    $    9N  v܋1҃]  tot& '    ! t  u ҃)A$    t  |$$    ƅ    B  E1ƀ  "ƀ   $    UƂ  "E9  E1<  [^_]ËEPBHB  @ȈFCt$T$$    1҃v B  u<$    f8  1.L$<$    1   D$D$U$    '  v ! t  u ҃)A$      |$$    M9quT$D$E$    ML$$    ;UB$      1;us6&    M	ШV  QFBAC;ur }1҃}t+T$D$E$    5U$    ƅ 2 t<$    f8  1ۍ.L$<$       L$D$U$    uv ! t  u ҃)A$       |$$    EH;Yƅ wYU9m    EPBHBx@ȈFC$    E$    뚉$    gED$$    <  [^_]ËUT$$    <  [^_]ËED$$ًML$$fUWVS<EE    $    $       EUMT$L$E$       v U   <   ׉U(ۅtx}Թ	   C   (ʅɉMtuMԉ$    E$    UMT$L$E$    tE$    ؃<[^_]ËU$    }ԾC   	   (E؅1҃}   E    EȃD$U$    E  EUȋuЃEf     Pt#C    8t$   D$    u݋E))؃$    MM  E)؃D$D$$    E$    E$    UMT$L$E$      $       E    UE   B    U   <   ׉U(ۅ   }й	   C   (ʅɉM   M̉L$UB$       EMAM܋EEAM܉$    UMT$L$E$    MU܋MQE@D$E$    E$    M$    E    EUME<1[^_]Ë}܅trEE܋UEۉB1҃} ut]؅uE$    랋E$    EU܋M@QD$E$    %UB$    MA    qE$    UT$M$뺋MA    A    E$    E@    @    E@D$U$uU1W11VS  }11111t	E@uU$    t%Ĭ  [^_]ËU   $    uۍMD$ D$D$D$D$D$D$D$$x      T$UE؉D$D$L$$    $          1҃/1҃   19  M$    19t&   19s?&    '    U	Ш  MFQBAC9rύM؉T$$       @9eU؉$    019  U$    19&      19s?&    '    U	Ш   MFQBAC9r1;s01ۍv T$$    tF;r;  09AEPBHBL  @ȈFCeEPBHB  @ȈFC=$    v9    	  Et(E@t.  MA    A    UuBBBBBtJtMAAAtUB
+B1+$    $    vvM؉$                u$    991;D$E$    D$E$    $    ^$    C$    ($D$    MD$$    U؉$    $   1T$1|$$    ;s#F;fUr19E1ۉ$    9shM	ШtiA@AB=   UfH9r9ZEPBHBG  @1ҍ   L$1T$$    ;szPF;fQsX8u$      D$    u1C     t$    1ۉ9V  U$    1ɉ9   U	Ш   MA@AC=     U	Ш   MA@AB=        Pf   H9MEPBHB   @EEPBHB   @VUD$E$D$1t& C   t$    މ$    41C   t$    މ$    $    s$    1C   t$    ސ             	   s m g4 g c #define _chars_per_pixel _height _width _ncolors XPMEXT XPMENDEXT    _   )    n          )       &    $      E  *    g  %      *      *      *    ,  *    N  )      *            *          "  *    N      o  *      '      )          &  *    C      t  *      $      %      #      )      	             #            %    b  (                   )    S  #    v        !      "      #    	  !    	  %    	       	      	  )    3
+  #    I
+      
+  ,    
+  %    
+  ,    
+  "      "    g  %    s  #                              %          #      8      C                          +      #          (      3  %    L      b  #                        %    %      K      [      f                              (      X                  &  #      %          R        %    '              ,      ,          L                                      "          +      ]        %            $          )  %            ,            ,      ,    
+      3                                          .file         gparse.c                                                            $   P          8         .text          9  |             .data                          .bss                             .rdata         M                     F               T                c                w                                                            _strncpy                                                         _strcmp                          _free            _memset          _strcat          _strcpy          _strlen                              	                              1               F           _strchr              U           _strncmp             _               l               w           __filbuf           _xpmParseValues _xpmParseColors _xpmParseExtensions _xpmParseData _xpmColorKeys __imp___pctype __imp____mb_cur_max _xpmHashTableFree _xpmHashTableInit _xpmGetCmt _xpmParseHeader _XpmFreeExtensions _boundCheckingRealloc _xpmGetString _xpmHashSlot _xpmHashIntern _xpmFreeColorTable _boundCheckingMalloc _boundCheckingCalloc _xpmNextString _xpmatoui _xpmNextWord _xpmNextUI __isctype 
+WrFFrDat.o/     1345987853  0     0     100666  672       `
+L     4       .text                            P`.data                               @ 0.bss                                 0Uhuuȉ}}]E   |$t$E$    t؋u]}]É|$t$E$    4$    <$    ؋u]}]Ð+       S       ]       e   
+    .file         gWrFFrDat.c                                        .text          x                .data                            .bss                                                 *                ;                U            p   _XpmWriteFileFromData _XpmFreeXpmInfo _XpmFreeXpmImage _XpmWriteFileFromXpmImage _XpmCreateXpmImageFromData WrFFrI.o/       1345987853  0     0     100666  3841      `
+L       !     .text           0     	      ?     P`.data                               @ 0.bss                                 0.rdata                           @ 0@UWVS  ]W  E$      ~U       ƍ|  U   D$$      t& '    ҉r  E      M/   D$$    |  C$.   |$    t.\$$     _$.   t$    u$-   L$    t79t\$4$    v  _$-   T$    u1EtE@t   }1tUBtrt   \$   T$$    tuFh  UBD$BD$BD$$D$6   D$    Etu  y  $C      \$L$   L$    tuF  U1Jr9   v ^   D$G   D$$    t& '    t&D$D$K   D$$    Gv$C      D$   L$D$    9XtUB  EUu@J6BHrû$    5   "1ɋ@9   1;s8GL$@$D$    ;r"R   C D$L$$    9x1;s@&    GL$@$D$    ;r"C L$4$    4$       EU@R|1t9txs{|4$1D$W   D$    |xX9s+    FD$e   D$$    9rtx|9tr$l      \$   L$t$    $z      T$1ۉD$   D$          ؁Ĭ  [^_]U|~      ։E   L$D$$    $   D$               1$    Y$      |$   t$T$    Z     9$    E   T$D$+FD$FD$   D$$    ]}D$   D$$    xD$   t$$    D$   D$$    t& UxuEu}}ȉD$E]t$D$E|$$    u0t;t$]$    \$|$E$<$    ؋u]}]1t$А.gz w image_name    /* XPM */
+static char * %s[] = {
+ "%d %d %d %d ",
+ "%s 	%s %s %s,
+ ,
+"XPMEXT %s" ,
+"%s" ,
+"XPMENDEXT" };
+ .Z compress > "%s"  XPMEXT gzip -q > "%s"  %d %d /*%s*/
+         7       R       ^                                           	      %      @                              -      N                                                            ,      L                        -      6      a      m                                    )      ?      G      P      o                                                +      A      S      g      s                                    .file         gWrFFrI.c                                                       .text          #  ?             .data                            .bss                             .rdata                              5                C            _fputs           _fwrite          __pclose         _fclose          __popen          _sprintf         _strlen          _free            _strncpy             O            _fprintf         _strcpy          _strchr          _strrchr             d                u                            _fopen              _XpmWriteFileFromXpmImage _XpmWriteFileFromImage _xpmColorKeys __imp___iob _boundCheckingMalloc _XpmFreeXpmImage _xpmSetInfo _XpmCreateXpmImageFromImage 
diff -Naur vim73.orig/src/xpm/x86/lib/libXpm.lib vim73/src/xpm/x86/lib/libXpm.lib
--- vim73.orig/src/xpm/x86/lib/libXpm.lib	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xpm/x86/lib/libXpm.lib	2013-08-04 19:09:11.443941353 +0000
@@ -0,0 +1,332 @@
+!<arch>
+/               1345987754              0       11348     `
+  u  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  V  tn  w  w  w  w  w  w  w  w  w  w  w  w  w  w  w  w  w  w                                x  x  x  x                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               ^ ^ ^ ^ ^ k n sT sT sT sT sT sT sT sT sT sT sT } } } }                                     b b b             ??_C@_01LLF@w?$AA@ ??_C@_02BKNP@?4Z?$AA@ ??_C@_02DILL@?$CFs?$AA@ ??_C@_03FMCK@?$HN?$DL?6?$AA@ ??_C@_03HPHD@?4gz?$AA@ ??_C@_03NNMC@?$CC?0?6?$AA@ ??_C@_03NOED@?$CC?$CFs?$AA@ ??_C@_04DBEM@?$CFs?0?6?$AA@ ??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@ ??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@ ??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@ ??_C@_07MEOC@?5XPMEXT?$AA@ ??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@ ??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@ ??_C@_0L@JJCH@image_name?$AA@ ??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@ ??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@ ??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@ _XpmWriteFileFromImage _XpmWriteFileFromXpmImage _XpmWriteFileFromData ??_C@_01FCOA@?5?$AA@ ??_C@_01IJJ@c?$AA@ ??_C@_01KBOJ@s?$AA@ ??_C@_01KCMF@g?$AA@ ??_C@_01KDFD@m?$AA@ ??_C@_02EPGO@g4?$AA@ ??_C@_06BGFG@XPMEXT?$AA@ ??_C@_06IKHH@_width?$AA@ ??_C@_07BLIB@_height?$AA@ ??_C@_07GIIJ@?$CDdefine?$AA@ ??_C@_08OLGI@_ncolors?$AA@ ??_C@_09IGJF@XPMENDEXT?$AA@ ??_C@_0BB@OCOG@_chars_per_pixel?$AA@ _xpmColorKeys _xpmParseColors _xpmParseData _xpmParseExtensions _xpmParseValues _XpmWriteFileFromBuffer _XAllocColor _XCreateImage _XDefaultColormap _XDefaultDepth _XDefaultScreen _XDefaultVisual _XDestroyImage _XFreeColors _XImageFree _XParseColor _XQueryColors _boundCheckingCalloc _boundCheckingMalloc _boundCheckingRealloc ??_C@_04COF@None?$AA@ ??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@ ??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@ _XpmCreateXpmImageFromImage ??_C@_03GOGG@Red?$AA@ ??_C@_03NJCN@Tan?$AA@ ??_C@_04BAEF@peru?$AA@ ??_C@_04CFCB@Gray?$AA@ ??_C@_04CKHC@Cyan?$AA@ ??_C@_04IKOF@Gold?$AA@ ??_C@_04KPAE@Blue?$AA@ ??_C@_04NFMJ@grey?$AA@ ??_C@_04NPOO@snow?$AA@ ??_C@_04OEDJ@Plum?$AA@ ??_C@_04OFAF@Pink?$AA@ ??_C@_04PGEO@Navy?$AA@ ??_C@_05CGP@White?$AA@ ??_C@_05DKMC@Green?$AA@ ??_C@_05EAN@Gray8?$AA@ ??_C@_05FAHO@Gray5?$AA@ ??_C@_05FALF@Gray0?$AA@ ??_C@_05FBBK@Azure?$AA@ ??_C@_05FBHM@Khaki?$AA@ ??_C@_05FFA@Gray7?$AA@ ??_C@_05FJL@Gray2?$AA@ ??_C@_05GJBG@Brown?$AA@ ??_C@_05IFEB@Black?$AA@ ??_C@_05KJCE@ivory?$AA@ ??_C@_05KJOE@linen?$AA@ ??_C@_05KOJK@Gray9?$AA@ ??_C@_05KPAM@Gray3?$AA@ ??_C@_05KPMH@Gray6?$AA@ ??_C@_05OFHD@Coral?$AA@ ??_C@_05OLFG@Beige?$AA@ ??_C@_05PKCC@Gray1?$AA@ ??_C@_05PKOJ@Gray4?$AA@ ??_C@_05PPMO@Wheat?$AA@ ??_C@_06BFFO@Gray75?$AA@ ??_C@_06BFJF@Gray70?$AA@ ??_C@_06BFLI@Violet?$AA@ ??_C@_06BKBB@Gray32?$AA@ ??_C@_06BKNK@Gray37?$AA@ ??_C@_06BLIH@Gray38?$AA@ ??_C@_06CFAH@Orchid?$AA@ ??_C@_06CIEM@Gray96?$AA@ ??_C@_06CIIH@Gray93?$AA@ ??_C@_06CJBB@Gray99?$AA@ ??_C@_06COGK@Gray40?$AA@ ??_C@_06COKB@Gray45?$AA@ ??_C@_06DBBO@Bisque?$AA@ ??_C@_06DDP@Gray60?$AA@ ??_C@_06DFJB@Sienna?$AA@ ??_C@_06DGNC@Gray18?$AA@ ??_C@_06DHEE@Gray12?$AA@ ??_C@_06DHIP@Gray17?$AA@ ??_C@_06DIAL@Gray55?$AA@ ??_C@_06DIMA@Gray50?$AA@ ??_C@_06DOCN@Gray83?$AA@ ??_C@_06DOOG@Gray86?$AA@ ??_C@_06DPE@Gray65?$AA@ ??_C@_06DPLL@Gray89?$AA@ ??_C@_06EAHA@Gray77?$AA@ ??_C@_06EALL@Gray72?$AA@ ??_C@_06EBCN@Gray78?$AA@ ??_C@_06EPDP@Gray30?$AA@ ??_C@_06EPPE@Gray35?$AA@ ??_C@_06FEAG@Maroon?$AA@ ??_C@_06FGBB@Gray62?$AA@ ??_C@_06FGNK@Gray67?$AA@ ??_C@_06FHIH@Gray68?$AA@ ??_C@_06FJFO@Gray25?$AA@ ??_C@_06FJJF@Gray20?$AA@ ??_C@_06GCGK@Gray10?$AA@ ??_C@_06GCKB@Gray15?$AA@ ??_C@_06GLAD@Gray81?$AA@ ??_C@_06GLMI@Gray84?$AA@ ??_C@_06GMHI@Gray58?$AA@ ??_C@_06GNCF@Gray57?$AA@ ??_C@_06GNOO@Gray52?$AA@ ??_C@_06HKNC@Gray48?$AA@ ??_C@_06HLEE@Gray42?$AA@ ??_C@_06HLIP@Gray47?$AA@ ??_C@_06HNGC@Gray94?$AA@ ??_C@_06HNKJ@Gray91?$AA@ ??_C@_06ICBA@Gray92?$AA@ ??_C@_06ICNL@Gray97?$AA@ ??_C@_06IDIG@Gray98?$AA@ ??_C@_06IEDG@Gray44?$AA@ ??_C@_06IEPN@Gray41?$AA@ ??_C@_06JCFH@Gray51?$AA@ ??_C@_06JCJM@Gray54?$AA@ ??_C@_06JEHB@Gray87?$AA@ ??_C@_06JELK@Gray82?$AA@ ??_C@_06JFCM@Gray88?$AA@ ??_C@_06JMEF@Gray19?$AA@ ??_C@_06JNBI@Gray16?$AA@ ??_C@_06JNND@Gray13?$AA@ ??_C@_06KGCM@Gray23?$AA@ ??_C@_06KGOH@Gray26?$AA@ ??_C@_06KHLK@Gray29?$AA@ ??_C@_06KJGD@Gray64?$AA@ ??_C@_06KJKI@Gray61?$AA@ ??_C@_06LAEN@Gray36?$AA@ ??_C@_06LAIG@Gray33?$AA@ ??_C@_06LBBA@Gray39?$AA@ ??_C@_06LPAC@Gray71?$AA@ ??_C@_06LPMJ@Gray74?$AA@ ??_C@_06MBFP@Gray85?$AA@ ??_C@_06MBJE@Gray80?$AA@ ??_C@_06MGOP@Gray59?$AA@ ??_C@_06MHA@Gray27?$AA@ ??_C@_06MHHJ@Gray53?$AA@ ??_C@_06MHLC@Gray56?$AA@ ??_C@_06MIDG@Gray14?$AA@ ??_C@_06MIPN@Gray11?$AA@ ??_C@_06MJKB@purple?$AA@ ??_C@_06MLL@Gray22?$AA@ ??_C@_06NAEF@Gray49?$AA@ ??_C@_06NBBI@Gray46?$AA@ ??_C@_06NBND@Gray43?$AA@ ??_C@_06NCN@Gray28?$AA@ ??_C@_06NHDO@Gray90?$AA@ ??_C@_06NHPF@Gray95?$AA@ ??_C@_06NJCI@Yellow?$AA@ ??_C@_06NKLF@Salmon?$AA@ ??_C@_06OFGD@Gray34?$AA@ ??_C@_06OFKI@Gray31?$AA@ ??_C@_06OKCM@Gray73?$AA@ ??_C@_06OKOH@Gray76?$AA@ ??_C@_06OLLK@Gray79?$AA@ ??_C@_06OLOI@Orange?$AA@ ??_C@_06PDAC@Gray21?$AA@ ??_C@_06PDMJ@Gray24?$AA@ ??_C@_06PEAM@tomato?$AA@ ??_C@_06PMEN@Gray66?$AA@ ??_C@_06PMIG@Gray63?$AA@ ??_C@_06PNBA@Gray69?$AA@ ??_C@_07CCJC@HotPink?$AA@ ??_C@_07CGCE@Thistle?$AA@ ??_C@_07HPBN@OldLace?$AA@ ??_C@_07IGIM@Magenta?$AA@ ??_C@_07LNPC@Gray100?$AA@ ??_C@_07PBMA@SkyBlue?$AA@ ??_C@_07PCNH@DimGray?$AA@ ??_C@_08CJCK@moccasin?$AA@ ??_C@_08DNID@DeepPink?$AA@ ??_C@_08FJBA@NavyBlue?$AA@ ??_C@_08FMGG@lavender?$AA@ ??_C@_08HADN@cornsilk?$AA@ ??_C@_08IBDC@seashell?$AA@ ??_C@_08LHFL@honeydew?$AA@ ??_C@_08MBEP@SeaGreen?$AA@ ??_C@_09BDMI@OliveDrab?$AA@ ??_C@_09BKLN@PeachPuff?$AA@ ??_C@_09BOEB@SlateGray?$AA@ ??_C@_09CLEE@LightPink?$AA@ ??_C@_09CLIF@RoyalBlue?$AA@ ??_C@_09DMBK@LimeGreen?$AA@ ??_C@_09FGMF@Turquoise?$AA@ ??_C@_09FMMG@IndianRed?$AA@ ??_C@_09GABH@CadetBlue?$AA@ ??_C@_09GBEF@LightBlue?$AA@ ??_C@_09GHMI@MintCream?$AA@ ??_C@_09GMBI@PaleGreen?$AA@ ??_C@_09HFBF@Firebrick?$AA@ ??_C@_09HKOG@chocolate?$AA@ ??_C@_09IAEP@DarkKhaki?$AA@ ??_C@_09IDAC@SteelBlue?$AA@ ??_C@_09IPPN@gainsboro?$AA@ ??_C@_09JEGE@SlateBlue?$AA@ ??_C@_09KEPN@MistyRose?$AA@ ??_C@_09KMIH@VioletRed?$AA@ ??_C@_09KOFD@LawnGreen?$AA@ ??_C@_09LPFD@RosyBrown?$AA@ ??_C@_09LPGI@burlywood?$AA@ ??_C@_09MLEL@OrangeRed?$AA@ ??_C@_09MLNE@Goldenrod?$AA@ ??_C@_09OEDD@LightCyan?$AA@ ??_C@_09OLGA@LightGray?$AA@ ??_C@_09OLPB@DarkGreen?$AA@ ??_C@_09PCLJ@AliceBlue?$AA@ ??_C@_0BA@DGOK@MediumTurquoise?$AA@ ??_C@_0BA@KLPL@MediumGoldenrod?$AA@ ??_C@_0BA@MMKI@MediumVioletRed?$AA@ ??_C@_0BA@PEEL@MediumSlateBlue?$AA@ ??_C@_0BB@LEGJ@MediumAquamarine?$AA@ ??_C@_0BC@DACG@MediumForestGreen?$AA@ ??_C@_0BC@HJAL@MediumSpringGreen?$AA@ ??_C@_0BF@JONP@LightGoldenrodYellow?$AA@ ??_C@_0L@BOIA@GhostWhite?$AA@ ??_C@_0L@CAIG@chartreuse?$AA@ ??_C@_0L@CGBN@DodgerBlue?$AA@ ??_C@_0L@DGFJ@WhiteSmoke?$AA@ ??_C@_0L@DNNE@BlueViolet?$AA@ ??_C@_0L@EOAJ@Aquamarine?$AA@ ??_C@_0L@FBDJ@DarkOrange?$AA@ ??_C@_0L@GAGA@SandyBrown?$AA@ ??_C@_0L@GAGE@DarkSalmon?$AA@ ??_C@_0L@HKLN@LightCoral?$AA@ ??_C@_0L@JPNG@DarkOrchid?$AA@ ??_C@_0L@KPGJ@DarkViolet?$AA@ ??_C@_0L@MMBE@PowderBlue?$AA@ ??_C@_0L@OLEL@MediumBlue?$AA@ ??_C@_0L@PNNL@PapayaWhip?$AA@ ??_C@_0M@BPCH@Transparent?$AA@ ??_C@_0M@BPNM@ForestGreen?$AA@ ??_C@_0M@DMAP@YellowGreen?$AA@ ??_C@_0M@FGPB@SpringGreen?$AA@ ??_C@_0M@HDMO@FloralWhite?$AA@ ??_C@_0M@IAHK@SaddleBrown?$AA@ ??_C@_0M@IBCK@LightSalmon?$AA@ ??_C@_0M@ICLH@LightYellow?$AA@ ??_C@_0M@JGIF@GreenYellow?$AA@ ??_C@_0M@NMOH@DeepSkyBlue?$AA@ ??_C@_0M@POIL@NavajoWhite?$AA@ ??_C@_0N@BHGF@MediumOrchid?$AA@ ??_C@_0N@BIEM@MidnightBlue?$AA@ ??_C@_0N@EPMH@MediumPurple?$AA@ ??_C@_0N@FJKA@LemonChiffon?$AA@ ??_C@_0N@HACN@DarkSeaGreen?$AA@ ??_C@_0N@NNFJ@AntiqueWhite?$AA@ ??_C@_0N@NNJL@LightSkyBlue?$AA@ ??_C@_0O@BGGF@DarkGoldenrod?$AA@ ??_C@_0O@EJNF@DarkSlateBlue?$AA@ ??_C@_0O@FCA@PaleTurquoise?$AA@ ??_C@_0O@HGGD@LightSeaGreen?$AA@ ??_C@_0O@ILHE@DarkTurquoise?$AA@ ??_C@_0O@JIDB@PaleGoldenrod?$AA@ ??_C@_0O@MDPA@DarkSlateGray?$AA@ ??_C@_0O@PPGC@PaleVioletRed?$AA@ ??_C@_0O@PPHN@LavenderBlush?$AA@ ??_C@_0P@BDLF@LightSteelBlue?$AA@ ??_C@_0P@END@LightSlateBlue?$AA@ ??_C@_0P@FDEE@DarkOliveGreen?$AA@ ??_C@_0P@FDIN@CornflowerBlue?$AA@ ??_C@_0P@FLGD@LightGoldenrod?$AA@ ??_C@_0P@HJDN@BlanchedAlmond?$AA@ ??_C@_0P@IOPG@LightSlateGray?$AA@ ??_C@_0P@OOCE@MediumSeaGreen?$AA@ _xpmFreeRgbNames _xpmGetRGBfromName _xpmGetRgbName _xpmReadRgbNames ??_C@_01LHO@r?$AA@ ??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@ ??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@ _XpmReadFileToImage _XpmReadFileToXpmImage _XpmReadFileToData _XpmReadFileToBuffer ??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@ ??_C@_0L@POMH@XpmSuccess?$AA@ ??_C@_0M@KHPB@XpmNoMemory?$AA@ ??_C@_0O@FNPH@XpmOpenFailed?$AA@ ??_C@_0O@PNEN@XpmColorError?$AA@ ??_C@_0P@MINL@XpmColorFailed?$AA@ ??_C@_0P@PLPG@XpmFileInvalid?$AA@ _XpmFree _XpmGetErrorString _XpmLibraryVersion _xpmatoui _XpmFreeXpmInfo _xpmInitXpmInfo _xpmSetInfo _xpmSetInfoMask _XpmFreeXpmImage _xpmInitXpmImage _xpmHashIntern _xpmHashSlot _xpmHashTableFree _xpmHashTableInit ??_C@_00A@?$AA@ ??_C@_01BJG@?6?$AA@ ??_C@_01FAJB@?$DL?$AA@ ??_C@_01FKHJ@C?$AA@ ??_C@_01PIHH@?$CB?$AA@ ??_C@_02BOOO@?$CK?1?$AA@ ??_C@_02DLDK@?0?6?$AA@ ??_C@_02FCCF@?1?$CK?$AA@ ??_C@_03FMK@XPM?$AA@ ??_C@_03PHEM@?$CJ?$CJ?6?$AA@ ??_C@_04DHGG@?5?8?$CI?6?$AA@ ??_C@_04HCLL@XPM2?$AA@ ??_C@_04JOHA@Lisp?$AA@ ??_C@_06EHEH@?$CIsetq?5?$AA@ ??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@ ??_C@_07NAB@_format?$AA@ ??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@ ??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@ ??_C@_0O@JACJ@static?5char?5?$CK?$AA@ _xpmDataTypes _xpmGetCmt _xpmGetString _xpmNextString _xpmNextUI _xpmNextWord _xpmParseHeader _XpmCreateImageFromData _XpmCreateXpmImageFromData _XpmCreateImageFromBuffer _XpmCreateXpmImageFromBuffer _XpmCreateImageFromXpmImage _xpmParseDataAndCreate _xpmstrcasecmp ??_C@_09CHAC@XPMEXT?5?$CFs?$AA@ ??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ _XpmCreateDataFromImage _XpmCreateDataFromXpmImage ??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@ _XpmCreateBufferFromImage _XpmCreateBufferFromXpmImage _XpmAttributesSize _XpmFreeAttributes _XpmFreeExtensions _xpmFreeColorTable _xpmInitAttributes _xpmSetAttributes /               1345987754              0       10690     `
+   V  nt  w      x    ^ k n Ts }      b    u                                                                                                                                                                                                                                                                                                                                              
+ 	                                        ??_C@_00A@?$AA@ ??_C@_01BJG@?6?$AA@ ??_C@_01FAJB@?$DL?$AA@ ??_C@_01FCOA@?5?$AA@ ??_C@_01FKHJ@C?$AA@ ??_C@_01IJJ@c?$AA@ ??_C@_01KBOJ@s?$AA@ ??_C@_01KCMF@g?$AA@ ??_C@_01KDFD@m?$AA@ ??_C@_01LHO@r?$AA@ ??_C@_01LLF@w?$AA@ ??_C@_01PIHH@?$CB?$AA@ ??_C@_02BKNP@?4Z?$AA@ ??_C@_02BOOO@?$CK?1?$AA@ ??_C@_02DILL@?$CFs?$AA@ ??_C@_02DLDK@?0?6?$AA@ ??_C@_02EPGO@g4?$AA@ ??_C@_02FCCF@?1?$CK?$AA@ ??_C@_03FMCK@?$HN?$DL?6?$AA@ ??_C@_03FMK@XPM?$AA@ ??_C@_03GOGG@Red?$AA@ ??_C@_03HPHD@?4gz?$AA@ ??_C@_03NJCN@Tan?$AA@ ??_C@_03NNMC@?$CC?0?6?$AA@ ??_C@_03NOED@?$CC?$CFs?$AA@ ??_C@_03PHEM@?$CJ?$CJ?6?$AA@ ??_C@_04BAEF@peru?$AA@ ??_C@_04CFCB@Gray?$AA@ ??_C@_04CKHC@Cyan?$AA@ ??_C@_04COF@None?$AA@ ??_C@_04DBEM@?$CFs?0?6?$AA@ ??_C@_04DHGG@?5?8?$CI?6?$AA@ ??_C@_04HCLL@XPM2?$AA@ ??_C@_04IKOF@Gold?$AA@ ??_C@_04JOHA@Lisp?$AA@ ??_C@_04KPAE@Blue?$AA@ ??_C@_04NFMJ@grey?$AA@ ??_C@_04NPOO@snow?$AA@ ??_C@_04OEDJ@Plum?$AA@ ??_C@_04OFAF@Pink?$AA@ ??_C@_04PGEO@Navy?$AA@ ??_C@_05CGP@White?$AA@ ??_C@_05DKMC@Green?$AA@ ??_C@_05EAN@Gray8?$AA@ ??_C@_05FAHO@Gray5?$AA@ ??_C@_05FALF@Gray0?$AA@ ??_C@_05FBBK@Azure?$AA@ ??_C@_05FBHM@Khaki?$AA@ ??_C@_05FFA@Gray7?$AA@ ??_C@_05FJL@Gray2?$AA@ ??_C@_05GJBG@Brown?$AA@ ??_C@_05IFEB@Black?$AA@ ??_C@_05KJCE@ivory?$AA@ ??_C@_05KJOE@linen?$AA@ ??_C@_05KOJK@Gray9?$AA@ ??_C@_05KPAM@Gray3?$AA@ ??_C@_05KPMH@Gray6?$AA@ ??_C@_05OFHD@Coral?$AA@ ??_C@_05OLFG@Beige?$AA@ ??_C@_05PKCC@Gray1?$AA@ ??_C@_05PKOJ@Gray4?$AA@ ??_C@_05PPMO@Wheat?$AA@ ??_C@_06BFFO@Gray75?$AA@ ??_C@_06BFJF@Gray70?$AA@ ??_C@_06BFLI@Violet?$AA@ ??_C@_06BGFG@XPMEXT?$AA@ ??_C@_06BKBB@Gray32?$AA@ ??_C@_06BKNK@Gray37?$AA@ ??_C@_06BLIH@Gray38?$AA@ ??_C@_06CFAH@Orchid?$AA@ ??_C@_06CIEM@Gray96?$AA@ ??_C@_06CIIH@Gray93?$AA@ ??_C@_06CJBB@Gray99?$AA@ ??_C@_06COGK@Gray40?$AA@ ??_C@_06COKB@Gray45?$AA@ ??_C@_06DBBO@Bisque?$AA@ ??_C@_06DDP@Gray60?$AA@ ??_C@_06DFJB@Sienna?$AA@ ??_C@_06DGNC@Gray18?$AA@ ??_C@_06DHEE@Gray12?$AA@ ??_C@_06DHIP@Gray17?$AA@ ??_C@_06DIAL@Gray55?$AA@ ??_C@_06DIMA@Gray50?$AA@ ??_C@_06DOCN@Gray83?$AA@ ??_C@_06DOOG@Gray86?$AA@ ??_C@_06DPE@Gray65?$AA@ ??_C@_06DPLL@Gray89?$AA@ ??_C@_06EAHA@Gray77?$AA@ ??_C@_06EALL@Gray72?$AA@ ??_C@_06EBCN@Gray78?$AA@ ??_C@_06EHEH@?$CIsetq?5?$AA@ ??_C@_06EPDP@Gray30?$AA@ ??_C@_06EPPE@Gray35?$AA@ ??_C@_06FEAG@Maroon?$AA@ ??_C@_06FGBB@Gray62?$AA@ ??_C@_06FGNK@Gray67?$AA@ ??_C@_06FHIH@Gray68?$AA@ ??_C@_06FJFO@Gray25?$AA@ ??_C@_06FJJF@Gray20?$AA@ ??_C@_06GCGK@Gray10?$AA@ ??_C@_06GCKB@Gray15?$AA@ ??_C@_06GLAD@Gray81?$AA@ ??_C@_06GLMI@Gray84?$AA@ ??_C@_06GMHI@Gray58?$AA@ ??_C@_06GNCF@Gray57?$AA@ ??_C@_06GNOO@Gray52?$AA@ ??_C@_06HKNC@Gray48?$AA@ ??_C@_06HLEE@Gray42?$AA@ ??_C@_06HLIP@Gray47?$AA@ ??_C@_06HNGC@Gray94?$AA@ ??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@ ??_C@_06HNKJ@Gray91?$AA@ ??_C@_06ICBA@Gray92?$AA@ ??_C@_06ICNL@Gray97?$AA@ ??_C@_06IDIG@Gray98?$AA@ ??_C@_06IEDG@Gray44?$AA@ ??_C@_06IEPN@Gray41?$AA@ ??_C@_06IKHH@_width?$AA@ ??_C@_06JCFH@Gray51?$AA@ ??_C@_06JCJM@Gray54?$AA@ ??_C@_06JEHB@Gray87?$AA@ ??_C@_06JELK@Gray82?$AA@ ??_C@_06JFCM@Gray88?$AA@ ??_C@_06JMEF@Gray19?$AA@ ??_C@_06JNBI@Gray16?$AA@ ??_C@_06JNND@Gray13?$AA@ ??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@ ??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@ ??_C@_06KGCM@Gray23?$AA@ ??_C@_06KGOH@Gray26?$AA@ ??_C@_06KHLK@Gray29?$AA@ ??_C@_06KJGD@Gray64?$AA@ ??_C@_06KJKI@Gray61?$AA@ ??_C@_06LAEN@Gray36?$AA@ ??_C@_06LAIG@Gray33?$AA@ ??_C@_06LBBA@Gray39?$AA@ ??_C@_06LPAC@Gray71?$AA@ ??_C@_06LPMJ@Gray74?$AA@ ??_C@_06MBFP@Gray85?$AA@ ??_C@_06MBJE@Gray80?$AA@ ??_C@_06MGOP@Gray59?$AA@ ??_C@_06MHA@Gray27?$AA@ ??_C@_06MHHJ@Gray53?$AA@ ??_C@_06MHLC@Gray56?$AA@ ??_C@_06MIDG@Gray14?$AA@ ??_C@_06MIPN@Gray11?$AA@ ??_C@_06MJKB@purple?$AA@ ??_C@_06MLL@Gray22?$AA@ ??_C@_06NAEF@Gray49?$AA@ ??_C@_06NBBI@Gray46?$AA@ ??_C@_06NBND@Gray43?$AA@ ??_C@_06NCN@Gray28?$AA@ ??_C@_06NHDO@Gray90?$AA@ ??_C@_06NHPF@Gray95?$AA@ ??_C@_06NJCI@Yellow?$AA@ ??_C@_06NKLF@Salmon?$AA@ ??_C@_06OFGD@Gray34?$AA@ ??_C@_06OFKI@Gray31?$AA@ ??_C@_06OKCM@Gray73?$AA@ ??_C@_06OKOH@Gray76?$AA@ ??_C@_06OLLK@Gray79?$AA@ ??_C@_06OLOI@Orange?$AA@ ??_C@_06PDAC@Gray21?$AA@ ??_C@_06PDMJ@Gray24?$AA@ ??_C@_06PEAM@tomato?$AA@ ??_C@_06PMEN@Gray66?$AA@ ??_C@_06PMIG@Gray63?$AA@ ??_C@_06PNBA@Gray69?$AA@ ??_C@_07BLIB@_height?$AA@ ??_C@_07CCJC@HotPink?$AA@ ??_C@_07CGCE@Thistle?$AA@ ??_C@_07GIIJ@?$CDdefine?$AA@ ??_C@_07HPBN@OldLace?$AA@ ??_C@_07IGIM@Magenta?$AA@ ??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@ ??_C@_07LNPC@Gray100?$AA@ ??_C@_07MEOC@?5XPMEXT?$AA@ ??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@ ??_C@_07NAB@_format?$AA@ ??_C@_07PBMA@SkyBlue?$AA@ ??_C@_07PCNH@DimGray?$AA@ ??_C@_08CJCK@moccasin?$AA@ ??_C@_08DNID@DeepPink?$AA@ ??_C@_08FJBA@NavyBlue?$AA@ ??_C@_08FMGG@lavender?$AA@ ??_C@_08HADN@cornsilk?$AA@ ??_C@_08IBDC@seashell?$AA@ ??_C@_08LHFL@honeydew?$AA@ ??_C@_08MBEP@SeaGreen?$AA@ ??_C@_08OLGI@_ncolors?$AA@ ??_C@_09BDMI@OliveDrab?$AA@ ??_C@_09BKLN@PeachPuff?$AA@ ??_C@_09BOEB@SlateGray?$AA@ ??_C@_09CHAC@XPMEXT?5?$CFs?$AA@ ??_C@_09CLEE@LightPink?$AA@ ??_C@_09CLIF@RoyalBlue?$AA@ ??_C@_09DMBK@LimeGreen?$AA@ ??_C@_09FGMF@Turquoise?$AA@ ??_C@_09FMMG@IndianRed?$AA@ ??_C@_09GABH@CadetBlue?$AA@ ??_C@_09GBEF@LightBlue?$AA@ ??_C@_09GHMI@MintCream?$AA@ ??_C@_09GMBI@PaleGreen?$AA@ ??_C@_09HFBF@Firebrick?$AA@ ??_C@_09HKOG@chocolate?$AA@ ??_C@_09IAEP@DarkKhaki?$AA@ ??_C@_09IDAC@SteelBlue?$AA@ ??_C@_09IGJF@XPMENDEXT?$AA@ ??_C@_09IPPN@gainsboro?$AA@ ??_C@_09JEGE@SlateBlue?$AA@ ??_C@_09KEPN@MistyRose?$AA@ ??_C@_09KMIH@VioletRed?$AA@ ??_C@_09KOFD@LawnGreen?$AA@ ??_C@_09LPFD@RosyBrown?$AA@ ??_C@_09LPGI@burlywood?$AA@ ??_C@_09MLEL@OrangeRed?$AA@ ??_C@_09MLNE@Goldenrod?$AA@ ??_C@_09OEDD@LightCyan?$AA@ ??_C@_09OLGA@LightGray?$AA@ ??_C@_09OLPB@DarkGreen?$AA@ ??_C@_09PCLJ@AliceBlue?$AA@ ??_C@_0BA@DGOK@MediumTurquoise?$AA@ ??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@ ??_C@_0BA@KLPL@MediumGoldenrod?$AA@ ??_C@_0BA@MMKI@MediumVioletRed?$AA@ ??_C@_0BA@PEEL@MediumSlateBlue?$AA@ ??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@ ??_C@_0BB@LEGJ@MediumAquamarine?$AA@ ??_C@_0BB@OCOG@_chars_per_pixel?$AA@ ??_C@_0BC@DACG@MediumForestGreen?$AA@ ??_C@_0BC@HJAL@MediumSpringGreen?$AA@ ??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@ ??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@ ??_C@_0BF@JONP@LightGoldenrodYellow?$AA@ ??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@ ??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@ ??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@ ??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@ ??_C@_0L@BOIA@GhostWhite?$AA@ ??_C@_0L@CAIG@chartreuse?$AA@ ??_C@_0L@CGBN@DodgerBlue?$AA@ ??_C@_0L@DGFJ@WhiteSmoke?$AA@ ??_C@_0L@DNNE@BlueViolet?$AA@ ??_C@_0L@EOAJ@Aquamarine?$AA@ ??_C@_0L@FBDJ@DarkOrange?$AA@ ??_C@_0L@GAGA@SandyBrown?$AA@ ??_C@_0L@GAGE@DarkSalmon?$AA@ ??_C@_0L@HKLN@LightCoral?$AA@ ??_C@_0L@JJCH@image_name?$AA@ ??_C@_0L@JPNG@DarkOrchid?$AA@ ??_C@_0L@KPGJ@DarkViolet?$AA@ ??_C@_0L@MMBE@PowderBlue?$AA@ ??_C@_0L@OLEL@MediumBlue?$AA@ ??_C@_0L@PNNL@PapayaWhip?$AA@ ??_C@_0L@POMH@XpmSuccess?$AA@ ??_C@_0M@BPCH@Transparent?$AA@ ??_C@_0M@BPNM@ForestGreen?$AA@ ??_C@_0M@DMAP@YellowGreen?$AA@ ??_C@_0M@FGPB@SpringGreen?$AA@ ??_C@_0M@HDMO@FloralWhite?$AA@ ??_C@_0M@IAHK@SaddleBrown?$AA@ ??_C@_0M@IBCK@LightSalmon?$AA@ ??_C@_0M@ICLH@LightYellow?$AA@ ??_C@_0M@JGIF@GreenYellow?$AA@ ??_C@_0M@KHPB@XpmNoMemory?$AA@ ??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_0M@NMOH@DeepSkyBlue?$AA@ ??_C@_0M@POIL@NavajoWhite?$AA@ ??_C@_0N@BHGF@MediumOrchid?$AA@ ??_C@_0N@BIEM@MidnightBlue?$AA@ ??_C@_0N@EPMH@MediumPurple?$AA@ ??_C@_0N@FJKA@LemonChiffon?$AA@ ??_C@_0N@HACN@DarkSeaGreen?$AA@ ??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_0N@NNFJ@AntiqueWhite?$AA@ ??_C@_0N@NNJL@LightSkyBlue?$AA@ ??_C@_0O@BGGF@DarkGoldenrod?$AA@ ??_C@_0O@EJNF@DarkSlateBlue?$AA@ ??_C@_0O@FCA@PaleTurquoise?$AA@ ??_C@_0O@FNPH@XpmOpenFailed?$AA@ ??_C@_0O@HGGD@LightSeaGreen?$AA@ ??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@ ??_C@_0O@ILHE@DarkTurquoise?$AA@ ??_C@_0O@JACJ@static?5char?5?$CK?$AA@ ??_C@_0O@JIDB@PaleGoldenrod?$AA@ ??_C@_0O@MDPA@DarkSlateGray?$AA@ ??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@ ??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@ ??_C@_0O@PNEN@XpmColorError?$AA@ ??_C@_0O@PPGC@PaleVioletRed?$AA@ ??_C@_0O@PPHN@LavenderBlush?$AA@ ??_C@_0P@BDLF@LightSteelBlue?$AA@ ??_C@_0P@END@LightSlateBlue?$AA@ ??_C@_0P@FDEE@DarkOliveGreen?$AA@ ??_C@_0P@FDIN@CornflowerBlue?$AA@ ??_C@_0P@FLGD@LightGoldenrod?$AA@ ??_C@_0P@HJDN@BlanchedAlmond?$AA@ ??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_0P@IOPG@LightSlateGray?$AA@ ??_C@_0P@MINL@XpmColorFailed?$AA@ ??_C@_0P@OOCE@MediumSeaGreen?$AA@ ??_C@_0P@PLPG@XpmFileInvalid?$AA@ _XAllocColor _XCreateImage _XDefaultColormap _XDefaultDepth _XDefaultScreen _XDefaultVisual _XDestroyImage _XFreeColors _XImageFree _XParseColor _XQueryColors _XpmAttributesSize _XpmCreateBufferFromImage _XpmCreateBufferFromXpmImage _XpmCreateDataFromImage _XpmCreateDataFromXpmImage _XpmCreateImageFromBuffer _XpmCreateImageFromData _XpmCreateImageFromXpmImage _XpmCreateXpmImageFromBuffer _XpmCreateXpmImageFromData _XpmCreateXpmImageFromImage _XpmFree _XpmFreeAttributes _XpmFreeExtensions _XpmFreeXpmImage _XpmFreeXpmInfo _XpmGetErrorString _XpmLibraryVersion _XpmReadFileToBuffer _XpmReadFileToData _XpmReadFileToImage _XpmReadFileToXpmImage _XpmWriteFileFromBuffer _XpmWriteFileFromData _XpmWriteFileFromImage _XpmWriteFileFromXpmImage _boundCheckingCalloc _boundCheckingMalloc _boundCheckingRealloc _xpmColorKeys _xpmDataTypes _xpmFreeColorTable _xpmFreeRgbNames _xpmGetCmt _xpmGetRGBfromName _xpmGetRgbName _xpmGetString _xpmHashIntern _xpmHashSlot _xpmHashTableFree _xpmHashTableInit _xpmInitAttributes _xpmInitXpmImage _xpmInitXpmInfo _xpmNextString _xpmNextUI _xpmNextWord _xpmParseColors _xpmParseData _xpmParseDataAndCreate _xpmParseExtensions _xpmParseHeader _xpmParseValues _xpmReadRgbNames _xpmSetAttributes _xpmSetInfo _xpmSetInfoMask _xpmatoui _xpmstrcasecmp WrFFrI.obj/     1345987754              100666  7580      `
+L% $:Pg  y       .drectve        P                  
+ .text              ,            P`.debug$F                      HB.text           @    8          P`.data                            @0.debug$F                      HB.text           p    ;
+          P`.data                            @0.data                            @0.data                            @0.data                            @0.data              $              @0.data              1              @0.data           "   9              @0.debug$F           [  k         HB.text              u            P`.data              E              @0.data              L              @0.debug$F           P  `         HB.text              j  j          P`.data                            @0.data                            @0.debug$F                      HB.text           p     L          P`.data                            @0.data                            @0.data                            @0.debug$F                      HB.text               E          P`.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.debug$F                      HB.text           0     /          P`.debug$F           M  ]         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES L$T$8D$ Vt$PVPD$HQRP    uMt$L$VQ    L$LT$$D$RPQ    D$DT$j RP    L$Q    ^8Ð   
+    4   	    H       ^       m           {                $  $   V$,  PV      W   j/V    uGj.W    tJ3+T$j.ȃL$|$Q    tj.P _    uj-W    tUT$;t%3+T$ȃ|$j-W    tj-P _    u    $8  $4  $  QWRP    $  Q    _^$  Ð   \    4       J                                                       ,  t    image_name     >  	            S\$UWtt   3ttCD$   uD$    D$|$Ph    W    tCtPh    W    Vt$NVFQRPQh    W    ttSCRPh    W    D$ th    W    h    W    tCtPh    W    NVQRW    tCtPh    W    FNVPFQRPQW    ^u)D$tSCRPW    h    W    3_][ÐG   /    M   ,    a   +    g   ,       (       ,       %       ,       "       ,              ,       +       ,       4      +      ,    -  @    K  N    S      Y  ,    };
+ ",
+  XPMEXT  %d %d "%d %d %d %d /*%s*/
+ /* XPM */
+static char * %s[] = {
+     f                D$vpS\$Ul$VWD$E }Ph    S        tPPh    S       ~h    S    D$$HD$u_^][Ð    ;    &   ,    .   8    =   7    C   ,    R   8    Y       _   ,    	%s %s "%s     y             4    L$SUl$͋D$VQp    ؃ۉ\$u	^][ÅW"v_|$$t$D$sv%؋U@D$,QV    Ku\$ T$Sh    "RF     D$(HD$u|$$D$sv+D$L$(U@RV    D$$HD$uًD$Sh    "PF     S    3_^][Ð   I    a   H    z   G       ,       H       D       ,       A    %s %s,
+                  @    D$S\$vPUVW|$D$Ph    S    GwvQh    S    MuD$HD$u_^]h    S    [Ð   W    "   ,    9   T    ?   ,    ^   Q    d   ,    ,
+"XPMENDEXT" ,
+"%s" ,
+"XPMEXT %s"     m             N       SU$  VWu!$  _^]@        3[   Ë3I   t/    :utH^:uu3uQUT$h    R    D$h    P    $,  Au_^][   _^]   3[   Ã~Yt/    :utP^:uu3uUD$h    P    L$h    Qkh    U    $   Au_^][   _^]   3[   Ð"   o    R   n       k       h       g       d       c      `    #  h    ,  g    7  g    =  ]    gzip -q > "%s" .gz w compress > "%s" .Z     s           \    L$HtHuAP    ËA=    tP    YÐ   v       o    %   u        +              t    .file         gWrFFrI.c          @comp.id
+    .drectve       P       -Q"      .text                ˵Ƃ                                        ,                8            .debug$F             4    .text          @     <W         T           .data                 \G         n           _strchr          _strrchr         .debug$F             8n=    .text          p     G                    .data                 K                    .data       	          0                	    .data       
+          U                
+    .data                 Kk                    .data                 $l                   .data                          @          _fprintf         .data          "       S         f          .debug$F             lyZ    .text                K                   .data                 IJ-                                  .data                 ɯ0                   .debug$F             9    .text                8WY3                   _free            .data                 >:                   .data                          6          _strncpy             R           .debug$F             :y    .text          p      1G         g          .data                 ".]         x          .data                 nt                   .data                 TU <                   .debug$F             E    .text               1L                   _fopen           .data                 jL                   .data                 Ԕ         3          __popen          .data                  1~`         J           _sprintf         .data       !          I a         ]      !    .data       "          4އr               "    __iob            .debug$F    #                 .text       $   0      %:               $    _fclose          __pclose         .debug$F    %             $      _XpmWriteFileFromImage _XpmFreeXpmImage _xpmSetInfo _XpmCreateXpmImageFromImage _XpmWriteFileFromXpmImage ??_C@_0L@JJCH@image_name?$AA@ _xpmWriteFile ??_C@_03FMCK@?$HN?$DL?6?$AA@ ??_C@_03NNMC@?$CC?0?6?$AA@ ??_C@_07MEOC@?5XPMEXT?$AA@ ??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@ ??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@ ??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@ _WriteColors ??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@ _xpmColorKeys ??_C@_03NOED@?$CC?$CFs?$AA@ _WritePixels ??_C@_02DILL@?$CFs?$AA@ ??_C@_04DBEM@?$CFs?0?6?$AA@ _boundCheckingMalloc _WriteExtensions ??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@ ??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@ ??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@ _OpenWriteFile ??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_03HPHD@?4gz?$AA@ ??_C@_01LLF@w?$AA@ ??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@ ??_C@_02BKNP@?4Z?$AA@ _xpmDataClose WrFFrDat.obj/   1345987753              100666  746       `
+L $:P~         .drectve        P                   
+ .text           `      <          P`.debug$F           d  t         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 8T$@D$L$ PQRD$$       u1T$<D$VL$PQR    D$P    L$,Q    ^8Ð       7   
+    C   	    M           [                .file         gWrFFrDat.c        @comp.id
+    .drectve       P       K      .text          `      C                                        *                ;                U            .debug$F                     p   _XpmWriteFileFromData _XpmFreeXpmInfo _XpmFreeXpmImage _XpmWriteFileFromXpmImage _XpmCreateXpmImageFromData parse.obj/      1345987753              100666  11188     `
+L $:P!  g       .drectve        P                  
+ .data              L  `         @ 0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.text                     '    P`.data              
+              @0.data           	   $
+              @0.data              -
+              @0.data              5
+              @0.data              <
+              @0.data              D
+              @0.debug$F           K
+  [
+         HB.text           0  e
+            P`.data                            @0.debug$F                      HB.text                     .    P`.data           
+   _              @0.debug$F           i  y         HB.text               #          P`.debug$F                      HB.text                           P`.debug$F           !  !         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES                                                     
+    c g g4 m s   SU$  VW39     $$  PU      $(  QU    h  $,  RU    O  $0  PU    6  L$h   QU      uT$PRh        u   3$@  $4  PtSU    t0$8  QU    t$<     _^]3[  Ë$<  _3^][  ÍL$ VQ    t$8  RU    t   3$<  T$h   RU    u+PD$ Ph        u   _^]3[  3_^][  3ۉ|$|$|$L$h   QU      T$PRh          D$h   PU      D4 D$j_P      +ȍL
+w3Ҋ    $    @΅\  jPh        D  $$  PU    +          jPh          $(  QU             L$   jPh           $,  RU       D$   =L$   jPh        uw$0  PU    tbD$   U    D$@D$Lt;t7D$t/D$t'$<  $@          _^]3[  _^][  ÍI                      )   8    B   8    [   8    t   8       7       6       3       8       8    4  2    I  8    r  7      6      3      7      1      3    	  7    '  .    G  -    N  ,    a  *    f  3      8      &      3      8      "      3    	  8    2      7  3    L  8    a        +      '      #                _chars_per_pixel _ncolors _height _width #define XPMEXT          	            SUV$(  WjV    3;l$u_^][  Ë$(  9   U  ;|$l$M  $0  S    GP    L$  vGt/t*CHIHKA|3BQ    
+KAKFMu v0$,  v&D$T$R$<  QR    -  3h   D$$D$ D$($(  PS    F  D$uC3۾    3I;u$$  UQR    (  Crˋ$(  D$   D$u.    3T$$+уOʃ󤍼$$  3Ƅ,$   +T$$O͉D$󤍄$$  h   PS    t$ Q  |$$Q    L$Ѓ҉s  |$$3+T$ȋD$@󤋌$,  ;D$T$  t$ tH|$$3Q    Ѓ  D$|$$3+ȃCD$$ \$ $(  D$   $,  T$QR    _^][  Ë$,  L$PQ    _^][  Ë$,  T$QR    _^][  Ë$,  L$PQ    _^][  Sƃ  "ƃ       ;ƃ  "|$l$  $0  GP    E   vLt/t*CHIHKA|3BQ    
+KAKFOu$0   v-$,  v#L$U $8  QRP    t  S    $(  h   QSD$4     Ѓ   D$$t2    3l$$+O͋l$󤍼$$  3Ƅ$   +T$$уOʍ$$  h   PS    Ѓn|$$3Q    Ѓ   |$$3+ȃ󤋴$,  |$UD$$ N;s	S    G;|$l$&$4  D$_^]3[  Ë$,  D$RP    _^][  Ë$,  T$QR    _^][  Ë$,  L$PQ    _^][  Ð   E    d       m   D       C       B    $  7    @      a  3      A      7    7  D      D      >    B  >    d  >      >            D      C    b  B    u        7      A      7    ?  D            >      >      >          .          =    SUl$ VW3U|$    j    ؍D$ L$0PQU    ;tS    _^][ËT$(jRh        ;teD$(j	Ph        ;tEL$(Q    U    T$ D$0RPU    ;uL$(jQh        ;u;  T$(j	Rh        D$ |$|$D$   GPS      L$(t$Y=    ~jR        AtGыT$++׃R    w  L$+QWP    T$4R    U    D$,L$<PQU     i  j    FT$,jRh        ؃   D$(j	Ph        D$ tdV   QR    4  FL$(UG    T$D$,RPU    ؃3  L$(jQh        ؃uuVR    F    T$L$Bۋ\$~T$L$[D$   D$(P    S    D$    \$   D$(P    L$QS    _^][ËT$(R    L$3FFD$@PQ    _^][ËT$D$BF    RPF        _^][ËL$(Q    T$D$B~RP    _^][ËL$T$A~QR    _^][ËD$ uL$(Q    T$0D$L$,_^]3[Ð          D    ,   U    ;   T    T   6    Y   3    n   S    s   3       T              U       6       3       S       3       P    !  O    /  N    =  M    [  D    {  L      T            U      D      6      3      S      3      P          )  U    B  6    G  3    ]  T      T      T      T      K      T      K    /  K    F  T    Y  K    |  K      T    XPMENDEXT                J    @S\$PU3V;Wl$4l$(l$l$l$l$ l$$tD$   ul$|$TW    ;4  D$(L$4PT$@QD$@RL$`PT$lQD$DRL$DPQW    $;  9l$tT$RW    |$Tv|$\vD$@P    ;  D$TL$@T$QL$`RPQW    ;t(|$T   |$\   T$@R       9l$tD$ PW    D$L$T$@QL$XRT$dPD$<QL$<RPQW    D$t v|$\vT$@R    ;uD9l$tD$$PW    ;      9l$(t{KSQRW    ;tjD$;tL$\QP    D$;t	P    D$;t	P    D$ ;t	P    D$$;t	P    _^][@ÉkkD$XT$,L$0;݉T$THL$\PT$HL$PHt59l$tT$D$ L$$SCK9l$4tD$<T$8CS3_^][@ÐF   ^              ]       \       =      [      ]    I  c    h  [      ]      J      >      T      T      T    
+  T                   Z      $  SUV$(  WP    3Ƀ;D$u_^][  Ë$4  D$H  H:  D     $0     ;L$Z  $$  V    $,  3   3vHt/t*FHIHNA|3BQ    
+NAND< G;r$<  L$ QR     t=HD$ED$$(  ;wD$$,  @;D$E  T$R    _^][  ;L$j  $$  S    $,  D$       $4  3vHt/t*CHIHKA|3BQ    
+KAKD4 F;r$0  3vJ$8  E t$ :utP:Vuu3t$0  G;r;$0  C  D$L$A8D$$(  ;ȉL$"D$$,  @;D$H  $0     3|$ 3vI$8  t D ujh          3ɍWGH;fHr$,  D$    F  $$  \$V    $,  3	  tntiFPJPFH|H3ҊARt$    t	P    OuL$Q    _^][  P    
+F8@F         t/t*FHIHNA|3BQ    
+NAN~o=   }hL t`fAftW%  HEC$(  ;D$$,  @;D$t$    t	P    Oue  t$    t	P    OuD$P    _^][  Ít$    t	P    OuL$Q    _^][  Ë$0     3|$ v$8  93ۍP@;fT\ rꋄ$,  3   $$  \$V    $,  3vxt/t*FHIHNA|3BQ    
+NAN=   fDD f%  HGC$(  ;r$,  E;b$@  T$_^]3[  Ð    D              C      d    Q  T    }        C      E          r  T      T      C      C    g  T      T      T      T      T    B        C                  c    .file         gparse.c           @comp.id
+    .drectve       P       pE2      .data                                         .data                 !                    .data                 `*         %           .data                 R.         9           .data                 S         N           .data                 5*         b           .text            '   wΝ         v           $L53108 R                      .data       	          Q                	    $L53103 "      .data       
+   	       <G                
+    $L53098       .data                 "S                    $L53093       .data                 l                     $L53088 U      $L53469       $L53468       _strchr          .data                 ЦZ                       %           _strncmp         .data                 |e         /              H               U           .debug$F             ̄    .text          0     e         `              p           .data                 $                                  __filbuf                                       .debug$F             0KJ5    .text            .   Itf                                  _strncpy         __pctype                                                      .data          
+       Щ         &          _free                B           .debug$F             r    .text               92         P              ^               p                                         .debug$F             C0    .text                v\t                                  .debug$F                       _xpmColorKeys ??_C@_01IJJ@c?$AA@ ??_C@_01KCMF@g?$AA@ ??_C@_02EPGO@g4?$AA@ ??_C@_01KDFD@m?$AA@ ??_C@_01KBOJ@s?$AA@ _xpmParseValues _xpmNextString ??_C@_0BB@OCOG@_chars_per_pixel?$AA@ ??_C@_08OLGI@_ncolors?$AA@ ??_C@_07BLIB@_height?$AA@ ??_C@_06IKHH@_width?$AA@ ??_C@_07GIIJ@?$CDdefine?$AA@ _xpmatoui ??_C@_06BGFG@XPMEXT?$AA@ _xpmNextWord _xpmNextUI _xpmParseColors _xpmFreeColorTable ??_C@_01FCOA@?5?$AA@ _xpmHashIntern _boundCheckingMalloc _boundCheckingCalloc _xpmParseExtensions _XpmFreeExtensions __isctype ___mb_cur_max _boundCheckingRealloc ??_C@_09IGJF@XPMENDEXT?$AA@ _xpmGetString _xpmParseData _xpmHashTableFree _xpmHashTableInit _xpmGetCmt _xpmParseHeader _ParsePixels _xpmHashSlot WrFFrBuf.obj/   1345987753              100666  743       `
+L $:P         .drectve        P                   
+ .text           P     T          P`.data              |              @0.debug$F           ~           HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$Vh    P    u^ËT$W3VIjQR    V    ǃH_^Ð          
+    5   	    =       w     N                 .file         gWrFFrBuf.c        @comp.id
+    .drectve       P       C      .text          P      &:                    _fclose          _fwrite          _fopen           .data                 1~`                    .debug$F                     /   _XpmWriteFileFromBuffer ??_C@_01LLF@w?$AA@ 
+simx.obj/       1345987753              100666  5012      `
+L! $:P  ]       .drectve        P   <               
+ .text                          P`.debug$F                      HB.text                           P`.debug$F                      HB.text                 $          P`.debug$F           .  >         HB.text              H               P`.debug$F           X  h         HB.text              r               P`.debug$F                      HB.text           0               P`.debug$F                      HB.text                             P`.debug$F                       HB.text                          P`.debug$F                      HB.text           @    	          P`.debug$F           	  	         HB.text           @   	               P`.debug$F           	  
+         HB.text              
+               P`.debug$F           (
+  8
+         HB.text           0   B
+               P`.debug$F           r
+  
+         HB.text              
+               P`.debug$F           
+  
+         HB.text           P   
+            P`.debug$F             *         HB.text              4  D          P`.debug$F           N  ^         HB.text               h            P`.debug$F                      HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$P    Ð                             D$L$PQ    Ð                             D$L$PQ    Ð                             3Ð                      3Ð                      SVt$W=    jP׋jQ_^[Ð	   $        #             #    3Ð                  )    D$tr8#uL$ T$QL$RQP    T$ L$RT$QRP    t:L$ T$D$S3%   ؋D$\$XPH   [3Ð!   4    8   /                    .    Vt$W$  >#  3Iu;FP    L$VR    L$VR    L$$_   ^ÃuWVR    FP    L$9VR    FP    L$$9VR    FZunVR    FP    L$9VR    FP    L$$9V	R    F
+P    L$0   9_^_3^Ð.   9    >   9    N   9    n   9    }   9       9       9       9       9       9       9       9      9      9        7            4    D$0|	9Ãa|	fÃA|	F3Ð    1              9       Ð                  >    L$D$~P3ҊPPPIuÐ    (              C    3Ð                  H    Vj    t.S\$(Ul$(W|$j WjSU    ~n_^][^Ë^Ð       )   N        C       
+      M    D$tP    Y
+   T                      S    Vt$tP    V    ^Ð   Z       S                     Y    .file         gsimx.c            @comp.id
+    .drectve       P                 .text                )                    _malloc          .debug$F                     .text                 %c                    _calloc          .debug$F                     .text                 %c         .           _realloc         .debug$F                     .text                 Ω         D           .debug$F    	                 .text       
+          Ω         T       
+    .debug$F             'k
+    .text          0      ?         d               s            .debug$F                     .text                 Ω                    .debug$F             5    .text                J                                    .debug$F                     .text          @     Aѻ                    .debug$F                     .text          @       ^                    .debug$F                     .text                 M                    .debug$F                     .text          0       \                    .debug$F                     .text                 Ω                    .debug$F             ON    .text          P      O                                   .debug$F                     .text                W         #          _free            .debug$F             ĉs    .text                   3         /               >           .debug$F    !                  T  _boundCheckingMalloc _boundCheckingCalloc _boundCheckingRealloc _XDefaultVisual _XDefaultScreen _XDefaultDepth __imp__GetDeviceCaps@8 _XDefaultColormap _XParseColor _xpmGetRGBfromName _rgbFromHex _hexCharToInt _XAllocColor _XQueryColors _XFreeColors _XCreateImage __imp__CreateBitmap@20 _XImageFree _XDestroyImage __imp__DeleteObject@4 scan.obj/       1345987753              100666  5137      `
+L $:P  >       .drectve        P                  
+ .data                         @ 0.data           ]                 @0.text              w            P`.debug$F             )         HB.text              3            P`.debug$F                      HB.text           @                  P`.debug$F           '  7         HB.text              A  1          P`.data              m              @0.debug$F           r           HB.text               ,          P`.data                            @0.debug$F                      HB.text                          P`.debug$F                      HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES         
+     .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}| D$ SUVt$0W333;ŉl$l$l$D$   l$ l$$txX
+;t~^L$<;t ut	A D$4l$4jQ    ;ŉD$u
+  T$    P    ;ŉD$u
+   ;l$,t L$h    QSWVU       D$0t T$h    RSWPU       D$ jP    D$u
+   L$ \   ;Ⱥ   v4@+B;w9T$4sT$4D$$t!L$<T$4D$QRP    u-L$ T$<D$4RT$(PD$RPQL$$QU    tD3D$;t	P    D$;t	P    D$;tT$ RP    _^][ËD$8L$4T$ HL$PT$8XHPD$P    3_^][p                        9              9          f  !      *                                                T$SUVWt_^]    3[Ët$l$^~;s9(tG;r;u9F;r&FPQ    u
+_^]   [ËT$,F@F:_^]3[ÐT                            D$u'D$   PuH    HD$3ËL$3    Ð    <                  SUVt$WFP    l$ȃɉE u
+_^][á    3A Av'NڸB\   3    ANAuڋD$ tcс   utRHT   tGtPDI@Dٿ   u+݋3tP    t$Gv_^]3[h        Eu_^][       ,       V          %       $       %    None                  !    $  S$D  UVW3;߉|$$|$ t
+tC$8  V    PV    $H  D$;t1$<  $@  $D  I$<  $@  $D  $@      R    ;ǉD$u_^][$  Ë$<  L$$@     $L  CP    T$ȃɉ   3һ\       $L  AAv<K\$޸B+3\       AAD$HD$uЋ$L  $D   GFM L$$D  $@  ;L$M$P  D$$@  T$QP$@  RP    j j     ۉl$tcĀt;KDs@S$CTL$0t$ T$D$BT$R    _^][$  tKDS@C$L$$KTT$ D$L$t$ $@  D$,      $<  D$zX|$(tx33v"T$;D$u   +,;kt@;r;tFL$$t
+T$0@+Ǎw   x7tP    Mut$ |$(fl$t+33ɊC3PSQRUj     tP    -33ɊC3PSQRD$@h    P    L$HQ    tHD$,$@  l$@;D$,|$(D$P    Uj     3_^][$  ËT$R    Uj     _^][$  Ð2   4    9   3                         0        2      1            %      0      %      /      ,    %  %    ^      f  +            +    #%02x%02x%02x                *    D$T$SUl$VW}QP    D$ 3ۅv<D$3v)L$SVR    WUPT$4uD$F;r׋D$ C;r_^]3[_^][Ð   ;    >   :        v             9    .file         gscan.c            @comp.id
+    .drectve       P       N      .data                                         .data          ]       6kH                    .text                Z         c                           _free                                            .debug$F             eJ    .text                pr                                    .debug$F                     .text          @                           .debug$F    	         ~y    .text       
+         
+ib                
+    .data                 xE                   _strdup          .debug$F             XY\
+    .text                @                       +           _sprintf         .data                 Ñ2         <              i               x                                                        .debug$F             P}]    .text                S                                                 .debug$F                       _printable ??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@ _XpmCreateXpmImageFromImage _xpmFreeColorTable _boundCheckingMalloc _boundCheckingCalloc _storePixel _boundCheckingRealloc _storeMaskPixel _ScanTransparentColor ??_C@_04COF@None?$AA@ _ScanOtherColors _xpmFreeRgbNames ??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@ _xpmGetRgbName _xpmReadRgbNames _XQueryColors _XDefaultColormap _XDefaultScreen _MSWGetImagePixels __imp__GetPixel@12 __imp__SelectObject@8 
+rgb.obj/        1345987753              100666  36745     `
+L $:P2B        .drectve        P   \&               
+ .data           \  &  .         @ @.data              ,7              @0.data              87              @0.data              ?7              @0.data              J7              @0.data              P7              @0.data           
+   V7              @0.data              `7              @0.data           
+   g7              @0.data              q7              @0.data              }7              @0.data              7              @0.data              7              @0.data           
+   7              @0.data              7              @0.data              7              @0.data           
+   7              @0.data           
+   7              @0.data              7              @0.data              7              @0.data           	   7              @0.data           	   7              @0.data              7              @0.data              7              @0.data              7              @0.data           
+   7              @0.data           
+   8              @0.data              8              @0.data              8              @0.data              8              @0.data              (8              @0.data              -8              @0.data              28              @0.data           
+   78              @0.data              A8              @0.data              L8              @0.data              Z8              @0.data           
+   h8              @0.data              r8              @0.data              8              @0.data           
+   8              @0.data              8              @0.data           
+   8              @0.data              8              @0.data           	   8              @0.data              8              @0.data              8              @0.data           	   8              @0.data           
+   8              @0.data           
+   8              @0.data              8              @0.data              8              @0.data              8              @0.data              9              @0.data               9              @0.data              09              @0.data              ?9              @0.data              L9              @0.data              Y9              @0.data              i9              @0.data              {9              @0.data              9              @0.data              9              @0.data              9              @0.data              9              @0.data           
+   9              @0.data              9              @0.data              9              @0.data              9              @0.data              9              @0.data              9              @0.data              9              @0.data              
+:              @0.data           
+   :              @0.data           
+    :              @0.data              *:              @0.data              ?:              @0.data           
+   N:              @0.data              X:              @0.data           
+   c:              @0.data              m:              @0.data           
+   z:              @0.data              :              @0.data           	   :              @0.data              :              @0.data              :              @0.data           
+   :              @0.data              :              @0.data           	   :              @0.data              :              @0.data              :              @0.data              :              @0.data              :              @0.data              :              @0.data              :              @0.data              :              @0.data              :              @0.data              :              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data               ;              @0.data              ';              @0.data              .;              @0.data              5;              @0.data              <;              @0.data              C;              @0.data              J;              @0.data              Q;              @0.data              X;              @0.data              _;              @0.data              f;              @0.data              l;              @0.data              s;              @0.data              z;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              ;              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data               <              @0.data              '<              @0.data              .<              @0.data              5<              @0.data              <<              @0.data              C<              @0.data              J<              @0.data              P<              @0.data              W<              @0.data              ^<              @0.data              e<              @0.data              l<              @0.data              s<              @0.data              z<              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              <              @0.data              =              @0.data              =              @0.data              =              @0.data              =              @0.data               =              @0.data              '=              @0.data              .=              @0.data              4=              @0.data              ;=              @0.data              B=              @0.data              I=              @0.data              P=              @0.data              W=              @0.data              ^=              @0.data              e=              @0.data              l=              @0.data              s=              @0.data              {=              @0.data              =              @0.data              =              @0.data              =              @0.data           
+   =              @0.data              =              @0.data              =              @0.data           
+   =              @0.data              =              @0.data              =              @0.data           
+   =              @0.data              =              @0.data              =              @0.data              =              @0.data           	   =              @0.data              >              @0.data              >              @0.data              >              @0.data              (>              @0.data              6>              @0.data              C>              @0.data              N>              @0.data              Y>              @0.data              d>              @0.data           
+   s>              @0.data           
+   }>              @0.data              >              @0.data              >              @0.data           	   >              @0.data              >              @0.data              >              @0.data           
+   >              @0.data              >              @0.data           
+   >              @0.data           
+   >              @0.data              >              @0.data              >              @0.data              >              @0.data              >              @0.data              ?              @0.data              ?              @0.data              ?              @0.data              ?              @0.data              ?              @0.data              *?              @0.data           
+   7?              @0.text              A?  Q?          P`.debug$F           [?  k?         HB.text           p   u?  ?          P`.debug$F           @  @         HB.text           @  @  ]A          P`.data              A              @0.debug$F           A  A         HB.text              B               P`.debug$F           B  (B         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES               2                                        +     **     ޸     _           i     rV     ""                      V-     k     UV/                 z          8Kf     /OO                            TTT          ##          Pi               ڪ      ߄     ~~~                                      !!!     $$$     &&&     )))     +++     ...     000          333     666     888     ;;;     ===     @@@     BBB     EEE     GGG     JJJ          MMM     OOO     RRR     TTT     WWW     YYY     \\\     ^^^     aaa     ccc     
+
+
+     fff     iii     kkk     nnn     ppp     sss     uuu     xxx     zzz     }}}                                                                                                                                                                                                                                                                                               /          i     k99          ~               |                          ݂                    z                p     w     |                            R           22     2K     f     R     p     4wf     jj     ##            y     //d                    ޭ     ##u     ##u          k#           E                sx          p          ڹ     ͅ?          H                            Ai     E     z     `     R          R-     r     ~     p          AA     Tp     ޸     ؿ     cG                 >     >     ޳                     28                                            (      0      8      @      H      P      X      `      h      p      x                                                         ~      {      x      u      r      o      l      i      f     c     `     ]      Z   (  W   0  T   8  Q   @  N   H  K   P  H   X  E   `  B   h  ?   p  <   x  9     6     3     0     -     *     '     $     !                                        	                               (     0     8     @     H     P     X     `     h     p     x                                                                                                                (     0     8     @     H     P     X     `     h     p  |   x  y     v     s     p     m     j     g     d     a     ^     [     X     U     R     O     L     I      F     C     @     =      :   (  7   0  4   8  1   @  .   H  +   P  (   X  %   `  "   h     p     x                           
+                                                                                                  (      0      8      @      H      P      X      `      h      p      x                                                                                                                           }       z    (  w    0  t    8  q    @  n    H  k    P  h    X  e    `  b    h  _    p  \    x  Y      V      S      P      M      J      G      D      A      >      ;      8      5      2      /      ,      )       &      #                        (      0      8      @      H      YellowGreen Yellow WhiteSmoke White Wheat VioletRed Violet Turquoise Transparent tomato Thistle Tan SteelBlue SpringGreen snow SlateGray SlateBlue SkyBlue Sienna seashell SeaGreen SandyBrown Salmon SaddleBrown RoyalBlue RosyBrown Red purple PowderBlue Plum Pink peru PeachPuff PapayaWhip PaleVioletRed PaleTurquoise PaleGreen PaleGoldenrod Orchid OrangeRed Orange OliveDrab OldLace NavyBlue Navy NavajoWhite moccasin MistyRose MintCream MidnightBlue MediumVioletRed MediumTurquoise MediumSpringGreen MediumSlateBlue MediumSeaGreen MediumPurple MediumOrchid MediumGoldenrod MediumForestGreen MediumBlue MediumAquamarine Maroon Magenta linen LimeGreen LightYellow LightSteelBlue LightSlateGray LightSlateBlue LightSkyBlue LightSeaGreen LightSalmon LightPink LightGray LightGoldenrodYellow LightGoldenrod LightCyan LightCoral LightBlue LemonChiffon LawnGreen LavenderBlush lavender Khaki ivory IndianRed HotPink honeydew GreenYellow Green Gray99 Gray98 Gray97 Gray96 Gray95 Gray94 Gray93 Gray92 Gray91 Gray90 Gray9 Gray89 Gray88 Gray87 Gray86 Gray85 Gray84 Gray83 Gray82 Gray81 Gray80 Gray8 Gray79 Gray78 Gray77 Gray76 Gray75 Gray74 Gray73 Gray72 Gray71 Gray70 Gray7 Gray69 Gray68 Gray67 Gray66 Gray65 Gray64 Gray63 Gray62 Gray61 Gray60 Gray6 Gray59 Gray58 Gray57 Gray56 Gray55 Gray54 Gray53 Gray52 Gray51 Gray50 Gray5 Gray49 Gray48 Gray47 Gray46 Gray45 Gray44 Gray43 Gray42 Gray41 Gray40 Gray4 Gray39 Gray38 Gray37 Gray36 Gray35 Gray34 Gray33 Gray32 Gray31 Gray30 Gray3 Gray29 Gray28 Gray27 Gray26 Gray25 Gray24 Gray23 Gray22 Gray21 Gray20 Gray2 Gray19 Gray18 Gray17 Gray16 Gray15 Gray14 Gray13 Gray12 Gray11 Gray100 Gray10 Gray1 Gray0 Gray Goldenrod Gold GhostWhite gainsboro ForestGreen FloralWhite Firebrick DodgerBlue DimGray DeepSkyBlue DeepPink DarkViolet DarkTurquoise DarkSlateGray DarkSlateBlue DarkSeaGreen DarkSalmon DarkOrchid DarkOrange DarkOliveGreen DarkKhaki DarkGreen DarkGoldenrod Cyan cornsilk CornflowerBlue Coral chocolate chartreuse CadetBlue burlywood Brown BlueViolet Blue BlanchedAlmond Black Bisque Beige Azure Aquamarine AntiqueWhite AliceBlue     Ð                            SU-    V3W~?T$$|$   ؁   ;u3ۊ܁   ;\$ u%   ;tF;|_^]3[Ë    _^][Ð              Y           b                D$SUVWP    j W    t!8 tHH@uj W    uߊtR    FFuh    W    t@a    3XÙ+    QW    t-}^n;e++    RW    uӋ   T$W   
+T$ 3Ɋ́   
+L$$%          _^][ËT$D$L$ W                   _^][
+            5      M      _      e      u                                              /     grey     @               Ð                     .file         grgb.c             @comp.id
+    .drectve       P       Z6      .data          \     z_             X                     .data                 Q         %           .data                 V         D           .data                 'F         ]           .data                 $㕵         {           .data                 w                    .data          
+       {                    .data       	          #                 	    .data       
+   
+       V`?                
+    .data                 X                    .data                                     .data                 ^E         3          .data                          M          .data          
+       ۬         c          .data                                    .data                 y~F                   .data          
+       
+&(                   .data          
+       X                   .data                 Fg                   .data                 yiB                   .data          	       Dm                    .data          	       U         ;          .data                 rn         V          .data                 sP         t          .data                 qU                   .data          
+        l                   .data          
+       m                   .data                 A`.                   .data                                    .data                 ;&                   .data                  !8         1           .data       !          #}         H      !    .data       "          s         _      "    .data       #   
+       W         v      #    .data       $          ݹ               $    .data       %          d>@               %    .data       &          㳊               &    .data       '   
+                      '    .data       (          wA               (    .data       )          '%>         .      )    .data       *   
+       }         G      *    .data       +          5         c      +    .data       ,   
+       YX         |      ,    .data       -          )tLc               -    .data       .   	       c               .    .data       /                         /    .data       0          u.q               0    .data       1   	       ay               1    .data       2   
+                      2    .data       3   
+                :      3    .data       4          {         V      4    .data       5          E_         v      5    .data       6                         6    .data       7          I\$               7    .data       8          PAk               8    .data       9          *8               9    .data       :          m%         *      :    .data       ;          6K         J      ;    .data       <          V %         j      <    .data       =          βU               =    .data       >          'ep               >    .data       ?                         ?    .data       @          V־               @    .data       A          M/               A    .data       B                   *      B    .data       C   
+       Q         B      C    .data       D          Er         ^      D    .data       E          f         }      E    .data       F          O               F    .data       G                         G    .data       H                         H    .data       I          4}               I    .data       J          `         #      J    .data       K   
+       "<         B      K    .data       L   
+                ^      L    .data       M          u         z      M    .data       N          ׶D               N    .data       O   
+       =               O    .data       P          <rN               P    .data       Q   
+       B               Q    .data       R          8         	      R    .data       S   
+       PW         ;	      S    .data       T                   W	      T    .data       U   	       İ         x	      U    .data       V          j         	      V    .data       W          )Ҥ         	      W    .data       X   
+       w         	      X    .data       Y          H         	      Y    .data       Z   	       <$         	      Z    .data       [          M]         
+      [    .data       \          (         3
+      \    .data       ]          sP         K
+      ]    .data       ^          24I         d
+      ^    .data       _          (         }
+      _    .data       `                   
+      `    .data       a          J         
+      a    .data       b          >{         
+      b    .data       c                   
+      c    .data       d                   
+      d    .data       e          {Ę               e    .data       f          :߁         ,      f    .data       g          xqG         E      g    .data       h          DoQ         ]      h    .data       i          ^H         v      i    .data       j          B\               j    .data       k          sG               k    .data       l          H j               l    .data       m          	q               m    .data       n          ·0               n    .data       o          +               o    .data       p          L         %      p    .data       q                   >      q    .data       r          9j^         W      r    .data       s          y(Z         n      s    .data       t          8C               t    .data       u                          u    .data       v          4               v    .data       w          ug6               w    .data       x          4V-               x    .data       y          l               y    .data       z          w               z    .data       {          qZ         6      {    .data       |          0A         O      |    .data       }                   h      }    .data       ~          NBA[               ~    .data                 sZB                   .data                 o                   .data                 ^                   .data                 B                   .data                 <                   .data                 Ī                   .data                          -          .data                 FȘ         F          .data                          _          .data                          w          .data                 Y                   .data                 V@                   .data                 ф                   .data                                    .data                                    .data                 Z                   .data                          %          .data                 %         >          .data                 vޑ         W          .data                 ^Gň         p          .data                 t                   .data                  X                   .data                 aA                   .data                 F                   .data                 ]                   .data                 ,p                   .data                 mk                   .data                 ~*         7          .data                 O1         P          .data                 (         i          .data                 i-                   .data                 5                   .data                 ]                   .data                 䱑D                   .data                 +	                   .data                 j                   .data                 ?                   .data                 $         0          .data                 /he         I          .data                 nY~         b          .data                 
+S         {          .data                 ;H                   .data                 /                   .data                 H\                   .data                 SE                   .data                                    .data                 ]                   .data                          '          .data                 ߔ         @          .data                          Y          .data                 Y3         r          .data                 `                   .data                 Q                   .data                                    .data                 T^                   .data                 eG                   .data                 Ey                   .data                 H                   .data                          7          .data                 *         P          .data                 A         i          .data                                     .data                 ז                   .data                                    .data                 ̏                   .data                 pM                   .data                 1|                   .data                                    .data          
+                .          .data                          J          .data                 1         a          .data          
+       q                   .data                 CB                   .data                                    .data          
+                          .data                                    .data                 CV                   .data                 |Ͳ         -          .data          	       Ss         L          .data                 C         g          .data                 p                   .data                                    .data                 ↬                   .data                 zJ                   .data                                    .data                 w^         &          .data                 Mgp         D          .data                 ]u7         b          .data          
+       w                   .data          
+       g}X                   .data                                    .data                 *                   .data          	                          .data                 8                   .data                 u         1          .data          
+       kv         I          .data                 =         e          .data          
+       [z:                   .data          
+       Gŋ                   .data                 a                   .data                 g                   .data                 vs                   .data                 uC                   .data                 XfPQ         *          .data                 }R.         B          .data                 ~          [          .data                 Rxd         s          .data                                    .data                 1                   .data          
+                          .text                *4                   .debug$F                     .text          p      Qnm                   .debug$F             [~$    .text          @                        _free                           _strstr          .data                 >Z         '          _tolower         _strchr          _strdup          .debug$F                     .text                 @         >          .debug$F                     O  _numTheRGBRecords _theRGBRecords ??_C@_0M@DMAP@YellowGreen?$AA@ ??_C@_06NJCI@Yellow?$AA@ ??_C@_0L@DGFJ@WhiteSmoke?$AA@ ??_C@_05CGP@White?$AA@ ??_C@_05PPMO@Wheat?$AA@ ??_C@_09KMIH@VioletRed?$AA@ ??_C@_06BFLI@Violet?$AA@ ??_C@_09FGMF@Turquoise?$AA@ ??_C@_0M@BPCH@Transparent?$AA@ ??_C@_06PEAM@tomato?$AA@ ??_C@_07CGCE@Thistle?$AA@ ??_C@_03NJCN@Tan?$AA@ ??_C@_09IDAC@SteelBlue?$AA@ ??_C@_0M@FGPB@SpringGreen?$AA@ ??_C@_04NPOO@snow?$AA@ ??_C@_09BOEB@SlateGray?$AA@ ??_C@_09JEGE@SlateBlue?$AA@ ??_C@_07PBMA@SkyBlue?$AA@ ??_C@_06DFJB@Sienna?$AA@ ??_C@_08IBDC@seashell?$AA@ ??_C@_08MBEP@SeaGreen?$AA@ ??_C@_0L@GAGA@SandyBrown?$AA@ ??_C@_06NKLF@Salmon?$AA@ ??_C@_0M@IAHK@SaddleBrown?$AA@ ??_C@_09CLIF@RoyalBlue?$AA@ ??_C@_09LPFD@RosyBrown?$AA@ ??_C@_03GOGG@Red?$AA@ ??_C@_06MJKB@purple?$AA@ ??_C@_0L@MMBE@PowderBlue?$AA@ ??_C@_04OEDJ@Plum?$AA@ ??_C@_04OFAF@Pink?$AA@ ??_C@_04BAEF@peru?$AA@ ??_C@_09BKLN@PeachPuff?$AA@ ??_C@_0L@PNNL@PapayaWhip?$AA@ ??_C@_0O@PPGC@PaleVioletRed?$AA@ ??_C@_0O@FCA@PaleTurquoise?$AA@ ??_C@_09GMBI@PaleGreen?$AA@ ??_C@_0O@JIDB@PaleGoldenrod?$AA@ ??_C@_06CFAH@Orchid?$AA@ ??_C@_09MLEL@OrangeRed?$AA@ ??_C@_06OLOI@Orange?$AA@ ??_C@_09BDMI@OliveDrab?$AA@ ??_C@_07HPBN@OldLace?$AA@ ??_C@_08FJBA@NavyBlue?$AA@ ??_C@_04PGEO@Navy?$AA@ ??_C@_0M@POIL@NavajoWhite?$AA@ ??_C@_08CJCK@moccasin?$AA@ ??_C@_09KEPN@MistyRose?$AA@ ??_C@_09GHMI@MintCream?$AA@ ??_C@_0N@BIEM@MidnightBlue?$AA@ ??_C@_0BA@MMKI@MediumVioletRed?$AA@ ??_C@_0BA@DGOK@MediumTurquoise?$AA@ ??_C@_0BC@HJAL@MediumSpringGreen?$AA@ ??_C@_0BA@PEEL@MediumSlateBlue?$AA@ ??_C@_0P@OOCE@MediumSeaGreen?$AA@ ??_C@_0N@EPMH@MediumPurple?$AA@ ??_C@_0N@BHGF@MediumOrchid?$AA@ ??_C@_0BA@KLPL@MediumGoldenrod?$AA@ ??_C@_0BC@DACG@MediumForestGreen?$AA@ ??_C@_0L@OLEL@MediumBlue?$AA@ ??_C@_0BB@LEGJ@MediumAquamarine?$AA@ ??_C@_06FEAG@Maroon?$AA@ ??_C@_07IGIM@Magenta?$AA@ ??_C@_05KJOE@linen?$AA@ ??_C@_09DMBK@LimeGreen?$AA@ ??_C@_0M@ICLH@LightYellow?$AA@ ??_C@_0P@BDLF@LightSteelBlue?$AA@ ??_C@_0P@IOPG@LightSlateGray?$AA@ ??_C@_0P@END@LightSlateBlue?$AA@ ??_C@_0N@NNJL@LightSkyBlue?$AA@ ??_C@_0O@HGGD@LightSeaGreen?$AA@ ??_C@_0M@IBCK@LightSalmon?$AA@ ??_C@_09CLEE@LightPink?$AA@ ??_C@_09OLGA@LightGray?$AA@ ??_C@_0BF@JONP@LightGoldenrodYellow?$AA@ ??_C@_0P@FLGD@LightGoldenrod?$AA@ ??_C@_09OEDD@LightCyan?$AA@ ??_C@_0L@HKLN@LightCoral?$AA@ ??_C@_09GBEF@LightBlue?$AA@ ??_C@_0N@FJKA@LemonChiffon?$AA@ ??_C@_09KOFD@LawnGreen?$AA@ ??_C@_0O@PPHN@LavenderBlush?$AA@ ??_C@_08FMGG@lavender?$AA@ ??_C@_05FBHM@Khaki?$AA@ ??_C@_05KJCE@ivory?$AA@ ??_C@_09FMMG@IndianRed?$AA@ ??_C@_07CCJC@HotPink?$AA@ ??_C@_08LHFL@honeydew?$AA@ ??_C@_0M@JGIF@GreenYellow?$AA@ ??_C@_05DKMC@Green?$AA@ ??_C@_06CJBB@Gray99?$AA@ ??_C@_06IDIG@Gray98?$AA@ ??_C@_06ICNL@Gray97?$AA@ ??_C@_06CIEM@Gray96?$AA@ ??_C@_06NHPF@Gray95?$AA@ ??_C@_06HNGC@Gray94?$AA@ ??_C@_06CIIH@Gray93?$AA@ ??_C@_06ICBA@Gray92?$AA@ ??_C@_06HNKJ@Gray91?$AA@ ??_C@_06NHDO@Gray90?$AA@ ??_C@_05KOJK@Gray9?$AA@ ??_C@_06DPLL@Gray89?$AA@ ??_C@_06JFCM@Gray88?$AA@ ??_C@_06JEHB@Gray87?$AA@ ??_C@_06DOOG@Gray86?$AA@ ??_C@_06MBFP@Gray85?$AA@ ??_C@_06GLMI@Gray84?$AA@ ??_C@_06DOCN@Gray83?$AA@ ??_C@_06JELK@Gray82?$AA@ ??_C@_06GLAD@Gray81?$AA@ ??_C@_06MBJE@Gray80?$AA@ ??_C@_05EAN@Gray8?$AA@ ??_C@_06OLLK@Gray79?$AA@ ??_C@_06EBCN@Gray78?$AA@ ??_C@_06EAHA@Gray77?$AA@ ??_C@_06OKOH@Gray76?$AA@ ??_C@_06BFFO@Gray75?$AA@ ??_C@_06LPMJ@Gray74?$AA@ ??_C@_06OKCM@Gray73?$AA@ ??_C@_06EALL@Gray72?$AA@ ??_C@_06LPAC@Gray71?$AA@ ??_C@_06BFJF@Gray70?$AA@ ??_C@_05FFA@Gray7?$AA@ ??_C@_06PNBA@Gray69?$AA@ ??_C@_06FHIH@Gray68?$AA@ ??_C@_06FGNK@Gray67?$AA@ ??_C@_06PMEN@Gray66?$AA@ ??_C@_06DPE@Gray65?$AA@ ??_C@_06KJGD@Gray64?$AA@ ??_C@_06PMIG@Gray63?$AA@ ??_C@_06FGBB@Gray62?$AA@ ??_C@_06KJKI@Gray61?$AA@ ??_C@_06DDP@Gray60?$AA@ ??_C@_05KPMH@Gray6?$AA@ ??_C@_06MGOP@Gray59?$AA@ ??_C@_06GMHI@Gray58?$AA@ ??_C@_06GNCF@Gray57?$AA@ ??_C@_06MHLC@Gray56?$AA@ ??_C@_06DIAL@Gray55?$AA@ ??_C@_06JCJM@Gray54?$AA@ ??_C@_06MHHJ@Gray53?$AA@ ??_C@_06GNOO@Gray52?$AA@ ??_C@_06JCFH@Gray51?$AA@ ??_C@_06DIMA@Gray50?$AA@ ??_C@_05FAHO@Gray5?$AA@ ??_C@_06NAEF@Gray49?$AA@ ??_C@_06HKNC@Gray48?$AA@ ??_C@_06HLIP@Gray47?$AA@ ??_C@_06NBBI@Gray46?$AA@ ??_C@_06COKB@Gray45?$AA@ ??_C@_06IEDG@Gray44?$AA@ ??_C@_06NBND@Gray43?$AA@ ??_C@_06HLEE@Gray42?$AA@ ??_C@_06IEPN@Gray41?$AA@ ??_C@_06COGK@Gray40?$AA@ ??_C@_05PKOJ@Gray4?$AA@ ??_C@_06LBBA@Gray39?$AA@ ??_C@_06BLIH@Gray38?$AA@ ??_C@_06BKNK@Gray37?$AA@ ??_C@_06LAEN@Gray36?$AA@ ??_C@_06EPPE@Gray35?$AA@ ??_C@_06OFGD@Gray34?$AA@ ??_C@_06LAIG@Gray33?$AA@ ??_C@_06BKBB@Gray32?$AA@ ??_C@_06OFKI@Gray31?$AA@ ??_C@_06EPDP@Gray30?$AA@ ??_C@_05KPAM@Gray3?$AA@ ??_C@_06KHLK@Gray29?$AA@ ??_C@_06NCN@Gray28?$AA@ ??_C@_06MHA@Gray27?$AA@ ??_C@_06KGOH@Gray26?$AA@ ??_C@_06FJFO@Gray25?$AA@ ??_C@_06PDMJ@Gray24?$AA@ ??_C@_06KGCM@Gray23?$AA@ ??_C@_06MLL@Gray22?$AA@ ??_C@_06PDAC@Gray21?$AA@ ??_C@_06FJJF@Gray20?$AA@ ??_C@_05FJL@Gray2?$AA@ ??_C@_06JMEF@Gray19?$AA@ ??_C@_06DGNC@Gray18?$AA@ ??_C@_06DHIP@Gray17?$AA@ ??_C@_06JNBI@Gray16?$AA@ ??_C@_06GCKB@Gray15?$AA@ ??_C@_06MIDG@Gray14?$AA@ ??_C@_06JNND@Gray13?$AA@ ??_C@_06DHEE@Gray12?$AA@ ??_C@_06MIPN@Gray11?$AA@ ??_C@_07LNPC@Gray100?$AA@ ??_C@_06GCGK@Gray10?$AA@ ??_C@_05PKCC@Gray1?$AA@ ??_C@_05FALF@Gray0?$AA@ ??_C@_04CFCB@Gray?$AA@ ??_C@_09MLNE@Goldenrod?$AA@ ??_C@_04IKOF@Gold?$AA@ ??_C@_0L@BOIA@GhostWhite?$AA@ ??_C@_09IPPN@gainsboro?$AA@ ??_C@_0M@BPNM@ForestGreen?$AA@ ??_C@_0M@HDMO@FloralWhite?$AA@ ??_C@_09HFBF@Firebrick?$AA@ ??_C@_0L@CGBN@DodgerBlue?$AA@ ??_C@_07PCNH@DimGray?$AA@ ??_C@_0M@NMOH@DeepSkyBlue?$AA@ ??_C@_08DNID@DeepPink?$AA@ ??_C@_0L@KPGJ@DarkViolet?$AA@ ??_C@_0O@ILHE@DarkTurquoise?$AA@ ??_C@_0O@MDPA@DarkSlateGray?$AA@ ??_C@_0O@EJNF@DarkSlateBlue?$AA@ ??_C@_0N@HACN@DarkSeaGreen?$AA@ ??_C@_0L@GAGE@DarkSalmon?$AA@ ??_C@_0L@JPNG@DarkOrchid?$AA@ ??_C@_0L@FBDJ@DarkOrange?$AA@ ??_C@_0P@FDEE@DarkOliveGreen?$AA@ ??_C@_09IAEP@DarkKhaki?$AA@ ??_C@_09OLPB@DarkGreen?$AA@ ??_C@_0O@BGGF@DarkGoldenrod?$AA@ ??_C@_04CKHC@Cyan?$AA@ ??_C@_08HADN@cornsilk?$AA@ ??_C@_0P@FDIN@CornflowerBlue?$AA@ ??_C@_05OFHD@Coral?$AA@ ??_C@_09HKOG@chocolate?$AA@ ??_C@_0L@CAIG@chartreuse?$AA@ ??_C@_09GABH@CadetBlue?$AA@ ??_C@_09LPGI@burlywood?$AA@ ??_C@_05GJBG@Brown?$AA@ ??_C@_0L@DNNE@BlueViolet?$AA@ ??_C@_04KPAE@Blue?$AA@ ??_C@_0P@HJDN@BlanchedAlmond?$AA@ ??_C@_05IFEB@Black?$AA@ ??_C@_06DBBO@Bisque?$AA@ ??_C@_05OLFG@Beige?$AA@ ??_C@_05FBBK@Azure?$AA@ ??_C@_0L@EOAJ@Aquamarine?$AA@ ??_C@_0N@NNFJ@AntiqueWhite?$AA@ ??_C@_09PCLJ@AliceBlue?$AA@ _xpmReadRgbNames _xpmGetRgbName _xpmGetRGBfromName _xpmstrcasecmp ??_C@_04NFMJ@grey?$AA@ _xpmFreeRgbNames 
+RdFToI.obj/     1345987752              100666  3302      `
+L $:P~  7       .drectve        P   D               
+ .text                         P`.debug$F             "         HB.text           p   ,            P`.debug$F                      HB.text           p    X          P`.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.debug$F                      HB.text           0     F          P`.debug$F           d  t         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES \  D$ P    L$Q    $l  T$@RP       V$t  W   V    L$$VQ    $  T$,VD$R$  PQ$  D$\RPQ    (|L$ T$QRV    D$ P    L$@Q    T$R    _^\  Ë$t  $p  j T$j RP$x  T$PQRP    묐              (       J       U                 
+       	       2                                     $  V$0  WV    $<  W    $8  D$PQ    uWT$VR    D$P    _^$  Ð              0       C       O   2        a                   SU$  VWu($  F       F    _^]3[   Ë3I~ct/    :utH^:uu3u)$  UT$h    R       D$h    Pj   t/    :utP^:uu3uH$  UD$h    P       L$h    Q    F_^][   h    U    $   F_^][   Ð   -    U   ,       )       &       %       "            &      %          ?  %    E      gunzip -qc "%s" .gz r uncompress -c "%s" .Z     l               L$HtHuAP    ËA=    tP    YÐ   4       -    %   3        +              2    .file         gRdFToI.c          @comp.id
+    .drectve       P       Suj      .text               @2                                        )                9                K                b                r                                            .debug$F             ѯU    .text          p      /޺                                    .debug$F                 .text          p     ApH                    _fopen           __popen          .data                 TA                    .data                 Ԕ         	          .data       	          t	                	    _sprintf         .data       
+          ]YV         3      
+    .data                 4އr         f          __iob            .debug$F                     .text          0      1         |          _fclose          __pclose         .debug$F                       _XpmReadFileToImage _XpmFreeXpmImage _XpmFreeXpmInfo _xpmSetAttributes _xpmParseDataAndCreate _xpmSetInfoMask _xpmInitAttributes _xpmInitXpmInfo _xpmInitXpmImage _XpmReadFileToXpmImage _xpmParseData _OpenReadFile ??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@ ??_C@_03HPHD@?4gz?$AA@ ??_C@_01LHO@r?$AA@ ??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@ ??_C@_02BKNP@?4Z?$AA@ _xpmDataClose RdFToDat.obj/   1345987752              100666  756       `
+L $:P         .drectve        P                   
+ .text           p      L          P`.debug$F           t           HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 8Vt$DD$   t    T$@D$L$PQR    u+D$L$PQV    T$R    D$,P    ^8Ð*       A   
+    M   	    W           e                .file         gRdFToDat.c        @comp.id
+    .drectve       P       ߿      .text          p      +)                                        '                8                S            .debug$F                     j   _XpmReadFileToData _XpmFreeXpmInfo _XpmFreeXpmImage _XpmCreateDataFromXpmImage _XpmReadFileToXpmImage RdFToBuf.obj/   1345987752              100666  1081      `
+L $:P~         .drectve        P                   
+ .text                          P`.data              b              @0.debug$F           d  t         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$L$$     SVWj Q    }
+_^[$ÍT$RV    tV    _^[$h    V    ؃uV    _^[$Ë|$ GP    uS    _^[$USWjV    S    ;]tV    _^[$ËL$8> _31^[$Ð       6       C       U       [       j                 
+       	       
+           r        	             .file         gRdFToBuf.c        @comp.id
+    .drectve       P       C      .text                Z                    _free            _fread           _fclose                          __fdopen         .data                 t	         .           _close           __fstat          _open            .debug$F                     A   _XpmReadFileToBuffer _boundCheckingMalloc ??_C@_01LHO@r?$AA@ 
+misc.obj/       1345987752              100666  2557      `
+L $:P  6       .drectve        P                  
+ .text           P                  P`.debug$F           4  D         HB.text           `   N            P`.data              :              @0.data              K              @0.data              Z              @0.data              f              @0.data              u              @0.data                            @0.data                            @0.debug$F                      HB.text                             P`.debug$F                      HB.text                          P`.debug$F             
+         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES W|$33҅v7Vt$0|9FB;׍DAr^t;uT$_   3_Ð    H                 D$w+$        ø    ø    ø    ø    ø    ø    ÍI                            (       &       "            &       ,       2       8       @       D       H       L       P   #    T   '    Invalid XpmError XpmColorFailed XpmNoMemory XpmFileInvalid XpmOpenFailed XpmSuccess XpmColorError     X                  v  Ð                   -    D$P    YÐ   3                      2    .file         gmisc.c            @comp.id
+    .drectve       P                 .text          P       h
+                    .debug$F             NL    .text          `      PҥE                    .data                 -R         !           .data                 |)         G           $L53070 1       .data                 ;;])         i           $L53068 +       .data                 ]h                    $L53066 %       .data       	          I6                	    $L53064        .data       
+          _N                
+    $L53062        .data                 q2E                    $L53060        $L53096 @       .debug$F                     .text                 ѓh         
+          .debug$F                     .text                t     _XpmFree        _free            .debug$F                       _xpmatoui _XpmGetErrorString ??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@ ??_C@_0P@MINL@XpmColorFailed?$AA@ ??_C@_0M@KHPB@XpmNoMemory?$AA@ ??_C@_0P@PLPG@XpmFileInvalid?$AA@ ??_C@_0O@FNPH@XpmOpenFailed?$AA@ ??_C@_0L@POMH@XpmSuccess?$AA@ ??_C@_0O@PNEN@XpmColorError?$AA@ _XpmLibraryVersion 
+Info.obj/       1345987752              100666  1477      `
+L	 $:P         .drectve        P   |               
+ .text                              P`.debug$F                      HB.text                          P`.debug$F                      HB.text           0                  P`.debug$F                      HB.text           `                  P`.debug$F           r           HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$3;tHHHHHÐ                      Vt$W3;tct9F;tP    ~F;tP    ~F;tP    ~tF;tPFP    ~~>_^Ð       /       B       `           r                 D$L$     t    tÐ    *                  D$L$     t    QHPQLPQPPtQ<PQ8PtQPIH    `                  .file         gInfo.c            @comp.id
+    .drectve       P                 .text                  ur                    .debug$F             aR    .text                FTP                        $            _free            .debug$F                     .text          0       0         7           .debug$F                     .text          `       ,2/         G           .debug$F    	                 S   _xpmInitXpmInfo _XpmFreeXpmInfo _XpmFreeExtensions _xpmSetInfoMask _xpmSetInfo 
+Image.obj/      1345987752              100666  815       `
+L $:P         .drectve        P                   
+ .text              ,               P`.debug$F           <  L         HB.text           @   V            P`.debug$F                      HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$3ɉHHH                      Vt$FtNQP    Ft	P    F    ^Ð       "           2                 .file         gImage.c           @comp.id
+    .drectve       P                 .text                                     .debug$F             wv    .text          @                          _free                &            .debug$F                     9   _xpmInitXpmImage _XpmFreeXpmImage _xpmFreeColorTable 
+hashtab.obj/    1345987751              100666  2249      `
+L $:P  %       .drectve        P                  
+ .text              l               P`.debug$F                      HB.text           `   &            P`.debug$F                      HB.text                           P`.debug$F                      HB.text                          P`.debug$F                      HB.text           P               P`.debug$F           $  4         HB.text           P   >            P`.debug$F                      HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES T$SUVt$
+3WnL$t+JBu3L ɍ| tL	T$8u1t$:utA:Fuu3Ƀt;s|u_^][Ð                     S\$Vt$WSV    ? u;D$PS    u	_^[ËFN;|V    u	F@F3_^[Ð       #       E           ]                 j    tL$T$PÐ                             SUVt$Wn؍ VUUU<    WV    u
+_^][ÍF;v;    wۋ~tQV    KuU    3_^][Ð.       k       ~                            Vt$h      FU   F        u^Ë;v;    wF3^Ð           N                 S\$W{t2V4;vFt	P    ;wW    C    ^_[Ð#       0           B             "    .file         ghashtab.c         @comp.id
+    .drectve       P                 .text                  kLP                    .debug$F                     .text          `      t                    .debug$F             Sm2    .text                 S                         *            .debug$F                     .text                ҵ         ?           _free            .debug$F    	                 .text       
+   P      1         O       
+    .debug$F                 
+    .text          P      q}         a           .debug$F                     s   _xpmHashSlot _xpmHashIntern _AtomMake _boundCheckingMalloc _HashTableGrows _xpmHashTableInit _xpmHashTableFree 
+data.obj/       1345987751              100666  8777      `
+L% $:P  x       .drectve        P                  
+ .data              ,           @ @.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.data                            @0.bss                               0.data           6                 @0.data                            @0.text             $  	          P`.debug$F           D
+  T
+         HB.text             ^
+  n          P`.debug$F                      HB.text               Z          P`.debug$F                       HB.text           @   
+  J          P`.debug$F           ^  n         HB.text           `  x            P`.debug$F           Z  j         HB.text           p   t            P`.debug$F                      HB.text           `    r          P`.data                            @0.data                            @0.data                            @0.data                            @0.debug$F                      HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES                      
+                              ""                              ""                                                      <       8       4       1       .       4       4        4    $   4    (   +    ,   (    0   %    8   "    <       @       D       H       L       P   .    X   .    \       `       d   
+    ))
+  '(
+ (setq  ; Lisp };
+ [] = {
+ static char * ,
+ */ /* C 
+ ! $Id: xpm.shar,v 3.71 1998/03/19 19:47:14 lehors Exp $ $XpmVersion: 3.4k $ Vt$WuFN@_F3V^Ã     tF@ɉFt:t
+@ɉFu  tFNANS  :  G    t:u	V    NANu_3^Ë    ~G:ʉFu V    ~  G:ʉFtH_F3^Ê  ~t-GHGx3A	W      ;tuӊ  tIGHGx3A	W      ;tjte  t	;uV    뷋  t?GHGx3A	W      
+;uV    WP    _3^Ð   F       F    
+  A    A  A    k  F      A      F      @                    ?    SUl$VW}      ]3
+  MABGFM:utu> tE+_E^]3[È3ɋ  :t#tUB  Uu3FA:u݉MUB  Uu3FAG:utu؀? uE_H^E]3[Ë  ]uD$      CHCx3A	S    T$FBGT$;u	tuĀ? t$|$   SP    NOu_^]3[Íu3  L$:t=t8CHCx3A	S      uu3L$FG:uÉ}CHCx3A	S      uu3L$FGAL$	;u	tuL$9 ZSR    _^]3[   A    =  @      A      A      @                    F    QSUVW|$3l$      wFHFx3ۊ@V    ؃t0=    ~jS        Xt  ;ul$=    ~jS        ZuF  ;t;t6L$D$ ;s*] FEAHL$Fx3ۊ@V    VS    D$_^][YÃ=    ~Wj2V    G    0qt  ;tG뾋t$G@FG^    E~jS        Xu  ;t;l$ rGMHG_^][YÐ;   A    K   N    V   M    `   L       N       M       L       A       @       N      M      L    R  N    `  M    j  L                   K    L$   D$ h   PQ    $  RPD$P      Ð   K    )   T        4             S      SU$  VW3E 3    ED$HIHx3ۊAP    ؃u_^][  ÍD$jD$    D$      ;ً      |$   uF   UW       T$h   RP    $,  D$    D$D$T$@BD$D$T$HIHx3ۊAP      ;auW    _^][  ËL$1D$t[@PW    uW    _^][  ËT$D$R.PQ    t$ T$$. FRS    }T$ RS       e]t^t  ;tuFƉu uu+FV    u_^][  VSW    E tD7 $$  $(  81_^]3[  ÐF   A    w   ]       \       [      A    5  Z    _  \    n  Z      [      @      @      ]       [        R           Y    Vt$> uD$^     3ËFt4@WP    |$VNQRP    N F    _3^ËT$3^    Ð#   ]    7   [        a             b       SUV$  33W;-  D$h   PVƆ   Ɔ  
+           L$PQh        ujT$h   RV    ;u_^][   ÍD$j_PD<     ;t+L<QPh        u         T$h   RV    u+PD$Ph           _^][   ÃcL$PQh        HT$h   RV    ء    t)    L$SQR    tO  Eǅu3ۉ   9    ;uK   V                     _^]3[   ý   뚋           ;É  u5   V  Ɔ            3_^][   V    _^]3[   ÐE   K    \   u    a   r    x   K       q       p       r       K       m       r    )  j    .  r    I  K    P      \      l  r                        ?                                   #  ?    )      E  ?    XPM2 XPM _format #define     Y           g    .file         gdata.c            @comp.id
+    .drectve       P       &Px      .data                                        .data                 QuI                    .data                 QG0         /           .data                          L           .data                 8<         i           .data                 >                    .data                 K                    .data       	          *                	    .data       
+          z                
+    .data                 W                   .data                 ['                   .data                 z\         3          .data                 T         L          .data                          `          .data                          t          .bss                                         _RCS_Id        .data          6       g=                                 .data                 c                   .text               䶧                   _ungetc          __filbuf         .debug$F                     .text               3̨                   .debug$F             ʮ    .text                        ,          __pctype             9               C           .debug$F             M    .text          @      O         Q              \           .debug$F             N    .text          `     e         f          _free            _strncpy             t                          .debug$F                     .text          p      znԦ                   .debug$F             |'    .text           `     -x                    .data       !          J\V               !    .data       "          8'               "    .data       #                         #    _strrchr         _strncmp         .data       $          ЦZ               $    .debug$F    %                    _xpmDataTypes ??_C@_03PHEM@?$CJ?$CJ?6?$AA@ ??_C@_04DHGG@?5?8?$CI?6?$AA@ ??_C@_06EHEH@?$CIsetq?5?$AA@ ??_C@_01FAJB@?$DL?$AA@ ??_C@_04JOHA@Lisp?$AA@ ??_C@_03FMCK@?$HN?$DL?6?$AA@ ??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@ ??_C@_0O@JACJ@static?5char?5?$CK?$AA@ ??_C@_02DLDK@?0?6?$AA@ ??_C@_02BOOO@?$CK?1?$AA@ ??_C@_02FCCF@?1?$CK?$AA@ ??_C@_01FKHJ@C?$AA@ ??_C@_01BJG@?6?$AA@ ??_C@_01PIHH@?$CB?$AA@ ??_C@_00A@?$AA@ ??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@ _RCS_Version ??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@ _xpmNextString _ParseComment _xpmNextWord __isctype ___mb_cur_max _xpmNextUI _xpmatoui _xpmGetString _boundCheckingRealloc _boundCheckingMalloc _xpmGetCmt _xpmParseHeader ??_C@_04HCLL@XPM2?$AA@ ??_C@_03FMK@XPM?$AA@ ??_C@_07NAB@_format?$AA@ ??_C@_07GIIJ@?$CDdefine?$AA@ 
+CrIFrDat.obj/   1345987751              100666  1726      `
+L $:P         .drectve        P   ,               
+ .text              |  l      
+    P`.debug$F                      HB.text           P     :          P`.debug$F           b  r         HB.text           @   |               P`.debug$F                      HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES \  D$ VWP    L$$Q    $t  T$HRP    $  tV    L$$VQ    $  T$,VD$R$  PQ$  D$\RPQ    (|L$ T$QRV    D$ P    L$Q    _^\  Ë$t  $p  j T$j RP$x  T$PQRP    붐              *       >       I       v          
+       	                                      $  V$0  WV    $<  W    $8  D$PQ    WT$VR    _^$  Ð              0       <           L                D$T$3ɉPHPH           Ð    9                  .file         gCrIFrDat.c        @comp.id
+    .drectve       P       Suj      .text             
+                                           -                =                O                f                v                                            .debug$F             ѯU    .text          P      9jC(                                    .debug$F                     .text          @       ]                    .debug$F                        _XpmCreateImageFromData _XpmFreeXpmImage _XpmFreeXpmInfo _xpmSetAttributes _xpmParseDataAndCreate _xpmSetInfoMask _xpmInitAttributes _xpmInitXpmInfo _xpmInitXpmImage _XpmCreateXpmImageFromData _xpmParseData _OpenArray CrIFrBuf.obj/   1345987751              100666  1699      `
+L $:P         .drectve        P   ,               
+ .text              |  l      
+    P`.debug$F                      HB.text           P     :          P`.debug$F           b  r         HB.text               |               P`.debug$F                      HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES \  D$ VWP    L$$Q    $t  T$HRP    $  tV    L$$VQ    $  T$,VD$R$  PQ$  D$\RPQ    (|L$ T$QRV    D$ P    L$Q    _^\  Ë$t  $p  j T$j RP$x  T$PQRP    붐              *       >       I       v          
+       	                                      $  V$0  WV    $<  W    $8  D$PQ    WT$VR    _^$  Ð              0       <           L                D$L$    H@    Ð                      .file         gCrIFrBuf.c        @comp.id
+    .drectve       P       Suj      .text             
+                                           /                ?                Q                h                x                                            .debug$F             ѯU    .text          P      9jC(                                    .debug$F                     .text                  E                    .debug$F                        _XpmCreateImageFromBuffer _XpmFreeXpmImage _XpmFreeXpmInfo _xpmSetAttributes _xpmParseDataAndCreate _xpmSetInfoMask _xpmInitAttributes _xpmInitXpmInfo _xpmInitXpmImage _XpmCreateXpmImageFromBuffer _xpmParseData _OpenBuffer 
+create.obj/     1345987751              100666  11128     `
+L $:P"  [       .drectve        P                  
+ .text           P   $  t          P`.debug$F                      HB.text               R          P`.debug$F           V	  f	         HB.text           P  p	            P`.data              8              @0.debug$F           =  M         HB.text              W               P`.debug$F           g  w         HB.text           P               P`.debug$F                      HB.text                          P`.debug$F                      HB.text                           P`.debug$F             '         HB.text           `   1            P`.debug$F                      HB.text                5          P`.debug$F           S  c         HB.text           `  m        '    P`.debug$F           S  c         HB.text             m  -!      "    P`.debug$F           "  "         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES S\$Vt$Wt+> t&P    Q    ȃ;uCCFu_^+[Ë_^+[       &           P                 ,D$8SUV3W;Ɖt$t$D$$   t$t$t$(t$8t0D$L;t0|$Pl$@;t
+tGU    PU    ;D$ tt	OL$0U    PU    D$0;tt	WT$,U    PU    D$,;t   t	G|D$@D$@   ;t   t   L$4D$4    t$DVR    ؃ۉ\$Du_^][,ËFP    D$Pu
+0  NQ    D$u
+  VR    D$u
+   L$8T$(QPD$RT$\L$0PFQNRSPQWU    ؃,t   ttGX   D$HtRL$,D$@t   T$RVRRPD$0QPU    ؃ucL$DVFQRT$ PQRU    |$$      D$L   ND$PD$DQL$(RPjQU    ؃   D$t	P    D$t	P    T$DR    D$Tt	P    D$(tt$j PD$8VPUT$Ht$t	V    D$   P    _^][,ËL$PVFQRT$$PQRU    D$DP    L$TQ    ttT$D$8L$$W$G(OTT$R    t   tD$L$(GpOtT$R    D$HtL$D$LtT$_^][,ÐU       \       {                               2           "      C      d              8      >    Z  8    u                                      >          (      W                               0SUVt$D3W;l$0t@tF,N0D$8L$l$;tt	VT$|$DW    PW    D$;t
+tF|$DW    PW    ;D$,t@t	NlL$T$R    D$;t   t   D$(D$(    ;t    t   L$$l$$D$t$HtHt
+D$   D$   D$   D$   9l$P  \$TT$3;׉|$ w  D$LL$8|$4L$T@D$<   D$<9tEt=Ǌ:utP:Vuu3t$HL$T   ujQtcD$L$L<uyHt}$D$@L$L9 u	@~|L$LtPR    t"L$TD$4T$@;D$4L$T+L$TT$D$4;tq9 q  Af  L$$T$(QL$pRT$pj j VQL$|RT$|QL$|RT$|QL$TRT$pSUPD$LPQR    Du
+D$    D$0   D$ |$uwD$L4vktWL$$T$(QL$LRT$tj j QL$|RT$|QL$|RT$|QL$|RT$<QL$pSUPD$dRPQ    DtD$0   OD$    T$D$ r   D$L<   tWL$$T$(QL$LRT$tj j QL$|RT$|QL$|RT$|QL$|RT$<QL$pSUPD$dRPQ    Dt^D$0   F딋QAt$h    P    uD$XL$\     )
+T$X   D$l|$hAt$H|$LL$XD$PE;|$LL$XD$0_^][0_^][0ÐF       M       l       s          !       &            -      -      -                None     G                  Ð                  !    D$S\$Vt$W|$tVPWS    u_^[VWS    _^[Ð   (    2   '        C             &    Vt$h    V    tyD$PT$L$PD$QVRPT$`}
+   ^u
+   ^ËD$4t$0T$L$BD$$T$(t$8D$<    A^3ËD$$L$(T$,^     D$ 3Ð	                              -    D$L$T$j PD$QRP    Ð   3                      2    L$v       ;T$j PD$RT$PD$j j RQL$$PQ    T$D(ÐA   9        Y              8    D$T$SW|$QP    D$D$3ۅv8Ul$V3v!T$(PD$SVQ    F;rߋD$ C;r^]D$T$RQ    _[Ð   @    L   ?    n   @        u             >    |$   S3UV;W\$8\$<D$X   \$\$\$ \$(\$\\$p\$l\$`\$$\$L\$P\$Tt$   ;t$   $   ;t
+tGV    PV    ;D$Htt	OL$dV    PV    D$d;tt	WT$@V    PV    D$@;t   t	G|D$DD$D   ;t   t   L$hD$h    $   ;tt   3$   t$4U    ;  T$`D$lRL$|PT$|QD$(RL$ PT$DQD$DRPU    $;  ;tL$LQU    |$v|$vT$|R    ;  T$D$|L$$PD$QRPU    ;  9\$4tL$PQU    T$    P    ;ÉD$u
+E  L$    R    ;ÉD$u
+  D$    Q    ;ÉD$ u
+  T$    P    ;ÉD$(u
+  T$(L$pQL$$D$`RPD$$T$dQL$$RT$$PD$<Q$   RPWQ    ,;t  ;tt	9_Xu  9$   tEL$@   ;uD$DL$0T$8RT$0QL$PR$   PD$PPQR    ;'  |$X   t>9$   t5L$0T$,D$<PD$HQL$PR$   PjQR    ;   D$L$<T$PD$<QRT$0$   PD$,QL$$RT$HPD$HQ$   RPUQ    T$DR    D$L\$HP    8;\$uw|$v|$vL$|Q    9\$4tT$TRU    $   ;8  -  D$`;Ë$     HQPU    ;   |$v|$vT$|R    D$$;tL$QP    D$L;t	P    D$P;t	P    D$T;t	P    D$8;t	P    D$<;t	P    D$;t	P    D$;t	P    D$\;t|$ T$dSP$   WRPT$||$ ;t	W    D$(;t	P    _^][|ÉXX$   L$,T$0L$PT$HL$$PHX$   ;t69\$4tT$LL$PPT$THP9\$ltL$tT$xHP;ttD$(L$pT$XG$O(WTD$(P    ;t   tL$ T$\OpWtD$ P    $   ;tL$8$   ;tT$<3_^][|Ð                                            2    D  M    }  L      K      J      I      K    	      /      U      {            /  8    w  8      R                  H      K    V  G    {  H      F                                              >      O            $          W           E    L$  SUVHW  H  D h  $0  Z  $,  D$    S  $$  $   W    $,  3   $4  3vOt/t*GHIHOA|3BQ    
+OAOD4$4  F;r$<  D$PQ    >   $@  PQ    $D  BD$RPUQ    $H  t-ЋPQ    $L  BD$RPUQ    $(  E;
+D$$,  @;D$_^]3[  Ë$,  D$      $$  S    $,  D$    6  $4  3vHt/t*CHIHKA|3BQ    
+KAKD4F;r$0  3vJ$8  E t$:utP:Vuu3t$0  G;r;$0  i  $@  $   QR    $D  T$l$QRUP    $H  t&QR    $L  T$QRUP    $(  E;l$D$$,  @;D$_^]3[  Ë$0     3|$3vI$8  tDujh          3ɍWGH;fHr$,  D$      $(  $$  $   U    D$      E tet`EPJPEH|=03ɊFL$0Kt$   t	P    Ou_^][  P    D$E@T$ED${  =   p  E t3t.EPJPEH|83ɊG8P    
+E0@E         T$|   f<w    $@  QR    $D  3fwTD$L$RPQR    $H  t1QR    $L  3fwTD$L$RPQR    D$$(  @;ƉD$pD$$,  @;D$?t$   t	P    Ou_^]3[  Ít$   t	P    Ou_^][  Ít$   t	P    Ou_^][  Ë$H  $   =    tP    M QS׉D$3ۋ$@  PQ׋$0  D$   3|$v$8  93ҍh@;flTrꋄ$,  3   $$  V    $,  3   t/t*FHIHNA|3BQ    
+NAN=   fDDf%  $   $D  LQUWP    t$L  TRUWS    $(  $$  G;H$,  E;tD$PS    S    $   L$QP    _^]3[  Ða   X       W       V      @    #  ?    <  @    [  ?      X      W      @      ?      @      ?    g  U      X          4  W      W      @      ?    $  @    I  ?                        @    !  T      X      W    4  ?    M  ?      @      S      @                  R    .file         gcreate.c          @comp.id
+    .drectve       P                 .text          P      ({                    _tolower         .debug$F             A    .text               ~                    _free                /                >                S                b                t                            .debug$F             ~y    .text          P     FC                    .data                 xE                    .debug$F                     .text       	          1                	    .debug$F    
+         jN	    .text          P      3                                                    .debug$F                     .text                e!,                    .debug$F                 .text                 =                                   .debug$F             ǉ    .text          `                                        .debug$F             tB    .text                y5g         ,              ?               R           .debug$F             7Y,    .text          `  '   0^         h                                                                                                                                  .debug$F             RT    .text            "   ɓ                                      *               F               [           __filbuf             h           .debug$F                     w  _xpmstrcasecmp _XpmCreateImageFromXpmImage _XDestroyImage _boundCheckingMalloc _XDefaultDepth _XDefaultColormap _XDefaultVisual _XDefaultScreen _CreateColors ??_C@_04COF@None?$AA@ _xpmVisualType _AllocColor _XAllocColor _XParseColor _SetColor _FreeColors _XFreeColors _CreateXImage _XCreateImage _MSWPutImagePixels __imp__SetPixel@16 __imp__SelectObject@8 _xpmParseDataAndCreate _xpmFreeColorTable _xpmParseExtensions _xpmHashTableFree _xpmParseColors _xpmHashTableInit _xpmGetCmt _xpmParseValues _xpmParseHeader _ParseAndPutPixels __imp__DeleteDC@4 __imp__CreateCompatibleDC@4 _boundCheckingCalloc _xpmHashSlot _xpmNextString CrDatFrI.obj/   1345987750              100666  4690      `
+L $:PH  >       .drectve        P                  
+ .text              \            P`.debug$F             .         HB.text             8  (          P`.data                            @0.data                            @0.data                            @0.debug$F                      HB.text               	          P`.data              ?	              @0.debug$F           F	  V	         HB.text              `	   
+          P`.debug$F           4
+  D
+         HB.text              N
+               P`.debug$F           
+  
+         HB.text              
+            P`.data           
+                 @0.data           
+   $              @0.debug$F           .  >         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 8VW|$Ht    t$TL$PT$LD$VPD$LQRP    uEt L$ VQ    T$(D$RPW    L$j QW    T$R    _^8Ð-   
+    C   	    S       e       t                           $  $(  $0  SUV3;Wt$,t$0tlteA;t^T$D$    RT$0RPAP    $<  j{G|$    PD$    ;l$u_^][$  Ét$ 뻋KSCQRPQT$Dh    R    tL$X  t tHPQRh    V    D$ t       NT$4+FV    E u
+  L$|$43L$+} ȃKSCQRL$PUQR    <  L$C@T$D$0Ct$,ȍP    u
+   CL$|$ǋՍL M L$C+@L$$D$(L$$<3+z3L$$|BILD$(
+HD$(uT$K    T$ōT L$щKSQKRSQRQP    D$8t/$@  T$RHPD$4QKRT$PʍTR    $8  3(l$|$v݋t	P    OuU    _^][$  ÐN   0    s                                                       e  !          e  +      5                 XPMEXT  %d %d %d %d %d %d                      $  SUVWD$       $(  $   $(  E VPD$P]    t4    tPQh    V       ~؍T$+FV    Ѓti$  88|$3+ȋD$@󤋌$  D$$  $$  ;A_^]3[  _^][  ÐF   &    R   %    a   $    g       x   %           	%s %s                !    D$T$SUVt$H@WɉD$ va\$$l$L$} v3T$$T$(V@PW    D$0HD$$uًT$D$  M ȉML$IL$u\$$l$} v!V@D$,QW    Mu _^][ÐH   &       &                     +    L$33v[SUl$VWL$]} uDD$3IۍT
+v>3IKT
+uD$HD$D$u_^][L$
+@T$Ð    x             0    D$T$SUX 3D$   VWD$t$Qh    R    D$0E;s>3ILKFVvVD$:3+;ȋD$$E;s:3ILKD$HD$ut$D$Ht$D$R_^    ][   Jf   fBÐ1   ;    7          8       8       8    XPMENDEXT XPMEXT %s                  5    .file         gCrDatFrI.c        @comp.id
+    .drectve       P       -Q"      .text                                                        -                9            .debug$F             $W    .text               {#         U           _free                p            .data                 U                    .data                 Kk                    _sprintf         .data                 -N                                    .debug$F             I    .text       	                       	    .data       
+          IJ-               
+        3           _strncpy         .debug$F                 	    .text                +ф*         A          .debug$F                     .text                 </         O          .debug$F             yi    .text                24y         `          .data          
+       Щ         r          .data          
+                          .debug$F                       _XpmCreateDataFromImage _XpmFreeXpmImage _xpmSetInfo _XpmCreateXpmImageFromImage _XpmCreateDataFromXpmImage _boundCheckingMalloc ??_C@_07MEOC@?5XPMEXT?$AA@ ??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@ ??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ _boundCheckingCalloc _CreateColors ??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@ _xpmColorKeys _CreatePixels _CountExtensions _CreateExtensions ??_C@_09IGJF@XPMENDEXT?$AA@ ??_C@_09CHAC@XPMEXT?5?$CFs?$AA@ CrBufFrI.obj/   1345987750              100666  5927      `
+L $:P  R       .drectve        P   $               
+ .text              t            P`.debug$F           6  F         HB.text           @  P            P`.data              	              @0.data              	              @0.data              	              @0.data              	              @0.data              	              @0.data              	              @0.data           *   	              @0.debug$F           	  	         HB.text           P  
+  T          P`.data                            @0.debug$F                      HB.text                k          P`.debug$F                      HB.text           p                  P`.debug$F             #         HB.text              -            P`.data                            @0.data              +              @0.data              2              @0.debug$F           @  P         HB.text           P   Z               P`.debug$F                      HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 8VW|$Ht    t$TL$PT$LD$VPD$LQRP    uEt L$ VQ    T$(D$RPW    L$j QW    T$R    _^8Ð-   
+    C   	    S       e       t                             $  S$$  UVW333;݉l$(   t
+L$ul$;trtkC;tdL$ KPQ    9l$tS    T$$h    R    D$ǍD0PD$$    Ѓ;ՉT$u_^][  Él$ 멍|$$3+ȋD$;t*[;t#L$T$Sh    R    L$ȉL$$,  CKSPQRPL$4h    Q    苄$H  t! tP@RPL,,h    Q    D$ tT,$h    R    D,$h    P    L$D$ PQD$(       T$D$Ѝ|$$3+ȃL$|$͋$0  L$t*Et#L$T$Ph    R    L$ȉL$CKSPQD$RL$$PT$$QR    u0CL$T$CDPRD$     u#D$t	P    _^][  ÅD$t&MtQL$h    P    L$ȉL$SCKRSPQRT$ PD$(L$$QR    D$<t MUQL$RT$D$PR    D$L$    _$$  D$^]3[  ÐW   <    h   O    v   (    |   %       $       #       %    %       +  %    Q      W  %    m      s  %            %            #    
+  %    7  -    d      ~        #      %      7      A          };
+ ",
+  XPMEXT  %d %d "%d %d %d %d /*%s*/
+ /* XPM */
+static char * image_name[] = {
+     >                 $  SUVWD$"D$      $0  $$  $0  $(  VPD$!P    t4    tPQh    V       ~؋    D$+$  ދ$   QP    Ѓty>3>u |$+t$|$ȋD$} $  @} $(  $,  ;D$$(  
+_^]3[  _^][  ÐQ   2    ]   1    l   0    r   %       1                  	%s %s     I           -    D$S\$HUVt$WvO|$(D$ l$"Fv#T$,S@PV    Mul$    D$ HD$ u|$(l$"FvS@D$0QV    Mu|$D$"+F_^][Ð9   2    N          2                     7    D$3҅vTS\$UVWD$;3sCIT
+v>3IMT
+uD$HD$u_^]B[ÍBÐ    b             <    D$Vt$WvRS\$UD$ Ph    V    {CvQh    V    MuD$ HD$ u][    ֋|$   +_J   Bf   D$fJ^Ð   J    "   %    ;   G    A   %    a   D    o   D    z   D       D    ,
+"XPMENDEXT" ,
+"%s" ,
+"XPMEXT %s"                  A    Vt$W3ҋ~t3Iу~t3IT
+~t3I_^D
+_^    P             O    .file         gCrBufFrI.c        @comp.id
+    .drectve       P       -Q"      .text                                                        /                ;            .debug$F             )    .text          @     _O         W           .data                 K         t           _free                            .data                 0                    .data                 U                    .data                 Kk                    .data       	          $l                	    .data       
+                   0      
+        V           _sprintf         .data          *       #         k          .debug$F             I    .text          P     F                   .data                 IJ-                                  _strncpy         .debug$F                     .text                כen                   .debug$F                     .text          p       B!                   .debug$F             :y    .text                u,l                   .data                 ".]                   .data                 nt         @          .data                 TU <         d          .debug$F                     .text          P       '                   .debug$F                       _XpmCreateBufferFromImage _XpmFreeXpmImage _xpmSetInfo _XpmCreateXpmImageFromImage _XpmCreateBufferFromXpmImage ??_C@_03FMCK@?$HN?$DL?6?$AA@ _boundCheckingRealloc ??_C@_03NNMC@?$CC?0?6?$AA@ ??_C@_07MEOC@?5XPMEXT?$AA@ ??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@ ??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@ ??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@ _boundCheckingMalloc ??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@ _WriteColors ??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@ _xpmColorKeys _WritePixels _ExtensionsSize _WriteExtensions ??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@ ??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@ ??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@ _CommentsSize 
+Attrib.obj/     1345987750              100666  3166      `
+L $:P^  /       .drectve        P                  
+ .text           P     \          P`.debug$F           p           HB.text           p               P`.debug$F           "  2         HB.text              <               P`.debug$F           L  \         HB.text           @   f               P`.debug$F                      HB.text                          P`.debug$F                      HB.text           P     .          P`.debug$F           8  H         HB.text              R  R      	    P`.debug$F                      HB.text           `     &          P`.debug$F           D  T         HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES S\$t?D$~.UVW   t	P    OuMuދ\$_^]S    [Ð%       A           J                 W|$teD$vTSUVGt	P    G7v؋t	P    Kut	P    Mu|$^][W    _"       <       Q       g           p                    Ð                       D$3;t0H$H(HDH@HHHLHPtH<H8   tHpHtÐ    ;                  SU\$Vt$3W|$ĀtCFDKN@kkitdCKVDRPQ    t%uV$R    n$n(n@'CF@ONHWVLGFPkkoootON<WV8ootGFON_ SV FKN^][Ð?   !    ]                            Vt$    P    uL$^Å~T$NuT$^3Ð   "        E             !    Vt$W3t9~(tF$P    ~$~(ĀtN@VDQR    ~D~@ntiFD;tN@QP    ~D~@FH;tP    ~HFL;tP    ~LFP;tP    ~PF$;tP    ~$~(tF8;tV<PR    ~<~8   t9~ttFpP    ~p~t>_^Ð       6       W   ,    m                                                           '    S\$tGD$~.UVW3   t	P    OuMuދ\$_^]P    S    [Ð%       C       I           R             ,    .file         gAttrib.c          @comp.id
+    .drectve       P                 .text          P      gG                    _free            .debug$F                     .text          p      1                    .debug$F                     .text                 5]+         *           .debug$F                     .text          @       ѶF         =           .debug$F    	                 .text       
+         +(?         P       
+    .debug$F             Sm2
+    .text          P      Q	         b               w            .debug$F                     .text             	   :(                    .debug$F                     .text          `      d                    .debug$F                        _xpmFreeColorTable _XpmFreeExtensions _XpmAttributesSize _xpmInitAttributes _xpmSetAttributes _CreateOldColorTable _boundCheckingMalloc _XpmFreeAttributes _FreeOldColorTable 
\ No newline at end of file
diff -Naur vim73.orig/src/xpm_w32.c vim73/src/xpm_w32.c
--- vim73.orig/src/xpm_w32.c	2010-05-15 11:04:07.000000000 +0000
+++ vim73/src/xpm_w32.c	2013-08-04 19:09:11.447274676 +0000
@@ -1,4 +1,5 @@
-/*
+/* vi:set ts=8 sts=4 sw=4:
+ *
  * Load XPM image.
  *
  * This function is placed in separate file because Xpm headers conflict with
@@ -30,9 +31,10 @@
 #include "xpm.h"
 
 /*
- * Tries to load Xpm image from file 'filename'.
- * If fails return -1.
- * success - 0 and image and mask BITMAPS
+ * Tries to load an Xpm image from the file "filename".
+ * Returns -1 on failure.
+ * Returns 0 on success and stores image and mask BITMAPS in "hImage" and
+ * "hShape".
  */
     int
 LoadXpmImage(filename, hImage, hShape)
@@ -40,7 +42,7 @@
     HBITMAP *hImage;
     HBITMAP *hShape;
 {
-    XImage	    *img;   /* loaded image */
+    XImage	    *img;  /* loaded image */
     XImage	    *shp;  /* shapeimage */
     XpmAttributes   attr;
     int		    res;
@@ -51,10 +53,13 @@
     DeleteDC(hdc);
     if (res < 0)
 	return -1;
-    else
+    if (shp == NULL)
     {
-	*hImage = img->bitmap;
-	*hShape = shp->bitmap;
-	return 0;
+	if (img)
+	    XDestroyImage(img);
+	return -1;
     }
+    *hImage = img->bitmap;
+    *hShape = shp->bitmap;
+    return 0;
 }
diff -Naur vim73.orig/src/xxd/Make_ming.mak vim73/src/xxd/Make_ming.mak
--- vim73.orig/src/xxd/Make_ming.mak	1970-01-01 00:00:00.000000000 +0000
+++ vim73/src/xxd/Make_ming.mak	2013-08-04 19:09:11.453941323 +0000
@@ -0,0 +1,28 @@
+# The most simplistic Makefile, for MinGW gcc on MS-DOS
+
+ifndef USEDLL
+USEDLL = no
+endif
+
+ifeq (yes, $(USEDLL))
+DEFINES =
+LIBS    = -lc
+else
+DEFINES =
+LIBS    =
+endif
+
+CC = gcc
+CFLAGS = -O2 -Wall -DWIN32 $(DEFINES)
+
+ifneq (sh.exe, $(SHELL))
+DEL = rm
+else
+DEL = del
+endif
+
+xxd.exe: xxd.c
+	$(CC) $(CFLAGS) -s -o xxd.exe xxd.c $(LIBS)
+
+clean:
+	-$(DEL) xxd.exe
diff -Naur vim73.orig/src/xxd/xxd.c vim73/src/xxd/xxd.c
--- vim73.orig/src/xxd/xxd.c	2010-05-15 11:04:06.000000000 +0000
+++ vim73/src/xxd/xxd.c	2013-08-04 19:09:11.457274646 +0000
@@ -49,6 +49,8 @@
  *	    option -b added: 01000101 binary output in normal format.
  * 16.05.00 Added VAXC changes by Stephen P. Wall
  * 16.05.00 Improved MMS file and merge for VMS by Zoltan Arpadffy
+ * 2011 March  Better error handling by Florian Zumbiehl.
+ * 2011 April  Formatting by Bram Moolenaar
  *
  * (c) 1990-1998 by Juergen Weigert (jnweiger@informatik.uni-erlangen.de)
  *
@@ -207,8 +209,9 @@
 
 /* Let's collect some prototypes */
 /* CodeWarrior is really picky about missing prototypes */
-static void exit_with_usage __P((char *));
-static int huntype __P((FILE *, FILE *, FILE *, char *, int, int, long));
+static void exit_with_usage __P((void));
+static void die __P((int));
+static int huntype __P((FILE *, FILE *, FILE *, int, int, long));
 static void xxdline __P((FILE *, char *, int));
 
 #define TRY_SEEK	/* attempt to use lseek, or skip forward by reading */
@@ -223,9 +226,10 @@
 #define HEX_CINCLUDE 2
 #define HEX_BITS 3		/* not hex a dump, but bits: 01111001 */
 
-static void
-exit_with_usage(pname)
-char *pname;
+static char *pname;
+
+  static void
+exit_with_usage()
 {
   fprintf(stderr, "Usage:\n       %s [options] [infile [outfile]]\n", pname);
   fprintf(stderr, "    or\n       %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
@@ -252,6 +256,15 @@
   exit(1);
 }
 
+  static void
+die(ret)
+  int ret;
+{
+  fprintf(stderr, "%s: ", pname);
+  perror(NULL);
+  exit(ret);
+}
+
 /*
  * Max. cols binary characters are decoded from the input stream per line.
  * Two adjacent garbage characters after evaluated data delimit valid data.
@@ -259,12 +272,11 @@
  *
  * The name is historic and came from 'undo type opt h'.
  */
-static int
-huntype(fpi, fpo, fperr, pname, cols, hextype, base_off)
-FILE *fpi, *fpo, *fperr;
-char *pname;
-int cols, hextype;
-long base_off;
+  static int
+huntype(fpi, fpo, fperr, cols, hextype, base_off)
+  FILE *fpi, *fpo, *fperr;
+  int cols, hextype;
+  long base_off;
 {
   int c, ign_garb = 1, n1 = -1, n2 = 0, n3, p = cols;
   long have_off = 0, want_off = 0;
@@ -318,7 +330,8 @@
 
       if (base_off + want_off != have_off)
 	{
-	  fflush(fpo);
+	  if (fflush(fpo) != 0)
+	    die(3);
 #ifdef TRY_SEEK
 	  c = fseek(fpo, base_off + want_off - have_off, 1);
 	  if (c >= 0)
@@ -330,12 +343,14 @@
 	      return 5;
 	    }
 	  for (; have_off < base_off + want_off; have_off++)
-	    putc(0, fpo);
+	    if (putc(0, fpo) == EOF)
+	      die(3);
 	}
 
       if (n2 >= 0 && n1 >= 0)
 	{
-	  putc((n2 << 4) | n1, fpo);
+	  if (putc((n2 << 4) | n1, fpo) == EOF)
+	    die(3);
 	  have_off++;
 	  want_off++;
 	  n1 = -1;
@@ -345,6 +360,8 @@
 	      want_off = 0;
 	      while ((c = getc(fpi)) != '\n' && c != EOF)
 		;
+	      if (c == EOF && ferror(fpi))
+		die(2);
 	      ign_garb = 1;
 	    }
 	}
@@ -355,15 +372,20 @@
 	    want_off = 0;
 	  while ((c = getc(fpi)) != '\n' && c != EOF)
 	    ;
+	  if (c == EOF && ferror(fpi))
+	    die(2);
 	  ign_garb = 1;
 	}
     }
-  fflush(fpo);
+  if (fflush(fpo) != 0)
+    die(3);
 #ifdef TRY_SEEK
   fseek(fpo, 0L, 2);
 #endif
-  fclose(fpo);
-  fclose(fpi);
+  if (fclose(fpo) != 0)
+    die(3);
+  if (fclose(fpi) != 0)
+    die(2);
   return 0;
 }
 
@@ -379,11 +401,11 @@
  *
  * If nz is always positive, lines are never suppressed.
  */
-static void
+  static void
 xxdline(fp, l, nz)
-FILE *fp;
-char *l;
-int nz;
+  FILE *fp;
+  char *l;
+  int nz;
 {
   static char z[LLEN+1];
   static int zero_seen = 0;
@@ -398,12 +420,15 @@
 	  if (nz < 0)
 	    zero_seen--;
 	  if (zero_seen == 2)
-	    fputs(z, fp);
+	    if (fputs(z, fp) == EOF)
+	      die(3);
 	  if (zero_seen > 2)
-	    fputs("*\n", fp);
+	    if (fputs("*\n", fp) == EOF)
+	      die(3);
 	}
       if (nz >= 0 || zero_seen > 0)
-	fputs(l, fp);
+	if (fputs(l, fp) == EOF)
+	  die(3);
       if (nz)
 	zero_seen = 0;
     }
@@ -439,10 +464,10 @@
     0070,0071,0372,0373,0374,0375,0376,0377
 };
 
-int
+  int
 main(argc, argv)
-int argc;
-char *argv[];
+  int argc;
+  char *argv[];
 {
   FILE *fp, *fpo;
   int c, e, p = 0, relseek = 1, negseek = 0, revert = 0;
@@ -451,8 +476,8 @@
   int octspergrp = -1;	/* number of octets grouped in output */
   int grplen;		/* total chars per octet group */
   long length = -1, n = 0, seekoff = 0;
-  char l[LLEN+1];
-  char *pname, *pp;
+  static char l[LLEN+1];  /* static because it may be too big for stack */
+  char *pp;
 
 #ifdef AMIGA
   /* This program doesn't work when started from the Workbench */
@@ -495,7 +520,7 @@
 	  else
 	    {
 	      if (!argv[2])
-		exit_with_usage(pname);
+		exit_with_usage();
 	      cols = (int)strtol(argv[2], NULL, 0);
 	      argv++;
 	      argc--;
@@ -508,7 +533,7 @@
 	  else
 	    {
 	      if (!argv[2])
-		exit_with_usage(pname);
+		exit_with_usage();
 	      octspergrp = (int)strtol(argv[2], NULL, 0);
 	      argv++;
 	      argc--;
@@ -531,7 +556,7 @@
 	  else
 	    {
 	      if (!argv[2])
-		exit_with_usage(pname);
+		exit_with_usage();
 #ifdef TRY_SEEK
 	      if (argv[2][0] == '+')
 		relseek++;
@@ -550,7 +575,7 @@
 	  else
 	    {
 	      if (!argv[2])
-		exit_with_usage(pname);
+		exit_with_usage();
 	      length = strtol(argv[2], (char **)NULL, 0);
 	      argv++;
 	      argc--;
@@ -563,7 +588,7 @@
 	  break;
 	}
       else if (pp[0] == '-' && pp[1])	/* unknown option */
-	exit_with_usage(pname);
+	exit_with_usage();
       else
 	break;				/* not an option */
 
@@ -602,7 +627,7 @@
     octspergrp = cols;
 
   if (argc > 3)
-    exit_with_usage(pname);
+    exit_with_usage();
 
   if (argc == 1 || (argv[1][0] == '-' && !argv[1][1]))
     BIN_ASSIGN(fp = stdin, !revert);
@@ -640,7 +665,7 @@
 	  fprintf(stderr, "%s: sorry, cannot revert this type of hexdump\n", pname);
 	  return -1;
 	}
-      return huntype(fp, fpo, stderr, pname, cols, hextype,
+      return huntype(fp, fpo, stderr, cols, hextype,
 		negseek ? -seekoff : seekoff);
     }
 
@@ -664,7 +689,18 @@
 	  long s = seekoff;
 
 	  while (s--)
-	    (void)getc(fp);
+	    if (getc(fp) == EOF)
+	    {
+	      if (ferror(fp))
+		{
+		  die(2);
+		}
+	      else
+		{
+		  fprintf(stderr, "%s: sorry cannot seek.\n", pname);
+		  return 4;
+		}
+	    }
 	}
     }
 
@@ -672,54 +708,76 @@
     {
       if (fp != stdin)
 	{
-	  fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "");
+	  if (fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
+	    die(3);
 	  for (e = 0; (c = argv[1][e]) != 0; e++)
-	    putc(isalnum(c) ? c : '_', fpo);
-	  fputs("[] = {\n", fpo);
+	    if (putc(isalnum(c) ? c : '_', fpo) == EOF)
+	      die(3);
+	  if (fputs("[] = {\n", fpo) == EOF)
+	    die(3);
 	}
 
       p = 0;
+      c = 0;
       while ((length < 0 || p < length) && (c = getc(fp)) != EOF)
 	{
-	  fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
-	    (p % cols) ? ", " : ",\n  "+2*!p,  c);
+	  if (fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
+		(p % cols) ? ", " : &",\n  "[2*!p],  c) < 0)
+	    die(3);
 	  p++;
 	}
+      if (c == EOF && ferror(fp))
+	die(2);
 
-      if (p)
-	fputs("\n};\n"+3*(fp == stdin), fpo);
+      if (p && fputs("\n", fpo) == EOF)
+	die(3);
+      if (fputs(&"};\n"[3 * (fp == stdin)], fpo) == EOF)
+	die(3);
 
       if (fp != stdin)
 	{
-	  fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "");
+	  if (fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
+	    die(3);
 	  for (e = 0; (c = argv[1][e]) != 0; e++)
-	    putc(isalnum(c) ? c : '_', fpo);
-	  fprintf(fpo, "_len = %d;\n", p);
+	    if (putc(isalnum(c) ? c : '_', fpo) == EOF)
+	      die(3);
+	  if (fprintf(fpo, "_len = %d;\n", p) < 0)
+	    die(3);
 	}
 
-      fclose(fp);
-      fclose(fpo);
+      if (fclose(fp))
+	die(2);
+      if (fclose(fpo))
+	die(3);
       return 0;
     }
 
   if (hextype == HEX_POSTSCRIPT)
     {
       p = cols;
+      e = 0;
       while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
 	{
-	  putchar(hexx[(e >> 4) & 0xf]);
-	  putchar(hexx[(e     ) & 0xf]);
+	  if (putc(hexx[(e >> 4) & 0xf], fpo) == EOF
+		  || putc(hexx[e & 0xf], fpo) == EOF)
+	    die(3);
 	  n++;
 	  if (!--p)
 	    {
-	      putchar('\n');
+	      if (putc('\n', fpo) == EOF)
+		die(3);
 	      p = cols;
 	    }
 	}
+      if (e == EOF && ferror(fp))
+	die(2);
       if (p < cols)
-	putchar('\n');
-      fclose(fp);
-      fclose(fpo);
+	if (putc('\n', fpo) == EOF)
+	  die(3);
+      if (fclose(fp))
+	die(2);
+      if (fclose(fpo))
+	die(3);
       return 0;
     }
 
@@ -730,6 +788,7 @@
   else	/* hextype == HEX_BITS */
     grplen = 8 * octspergrp + 1;
 
+  e = 0;
   while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
     {
       if (p == 0)
@@ -771,6 +830,8 @@
 	  p = 0;
 	}
     }
+  if (e == EOF && ferror(fp))
+    die(2);
   if (p)
     {
       l[c = (11 + (grplen * cols - 1)/octspergrp + p)] = '\n'; l[++c] = '\0';
@@ -779,7 +840,11 @@
   else if (autoskip)
     xxdline(fpo, l, -1);	/* last chance to flush out suppressed lines */
 
-  fclose(fp);
-  fclose(fpo);
+  if (fclose(fp))
+    die(2);
+  if (fclose(fpo))
+    die(3);
   return 0;
 }
+
+/* vi:set ts=8 sw=4 sts=2 cino+={2 cino+=n-2 : */
diff -Naur vim73.orig/uninstal.txt vim73/uninstal.txt
--- vim73.orig/uninstal.txt	2010-05-15 11:03:08.000000000 +0000
+++ vim73/uninstal.txt	2013-08-04 19:09:11.460607969 +0000
@@ -55,8 +55,8 @@
    skip the next step.
 
 5. Delete the distributed files.  If you followed the directions, these will
-   be located in a directory like "C:\vim\vim72".  If the $VIM environment
-   variable is set, the directory will be $VIM\vim72.  Delete the "vim72"
+   be located in a directory like "C:\vim\vim73".  If the $VIM environment
+   variable is set, the directory will be $VIM\vim73.  Delete the "vim73"
    directory and all that is in it.  Warning: If you changed any of the
    distributed files, or added some of your own files, you might want to save
    these first.  But normally you would not have changed or added files here.
diff -Naur vim73.orig/vimtutor.com vim73/vimtutor.com
--- vim73.orig/vimtutor.com	2010-05-15 11:04:12.000000000 +0000
+++ vim73/vimtutor.com	2013-08-04 19:09:11.463941293 +0000
@@ -30,7 +30,7 @@
 $ !
 $	if f$search ("vim:vim.exe") .eqs. ""
 $	then
-$	    write sys$error "Error - Can't run tutoral. VIM not found."
+$	    write sys$error "Error - Can't run tutorial. VIM not found."
 $	    exit
 $	endif
 $ !
